+
+static void jtag_shift_bytes(
+ uint8_t *input_data,
+ uint8_t *output_data,
+ uint32_t data_bits,
+ bool must_end)
+{
+
+ /* Sanity check */
+ if(data_bits % 8 != 0){
+ printf("Error %u is not a byte multiple\n", data_bits);
+ }
+ //printf("jtag_shift_bytes(0x%08x,0x%08x,%u,%s);\n",input_data, output_data, data_bits, must_end ? "true" : "false");
+ uint32_t byte_count = data_bits / 8;
+
+
+
+ data[0] = MC_DATA_OUT | MC_DATA_IN | MC_DATA_LSB | MC_DATA_OCN;
+ data[1] = (byte_count - 1);
+ data[2] = (byte_count - 1) >> 8;
+ memcpy(data + 3, input_data, byte_count);
+
+ mpsse_xfer(data, byte_count + 3, byte_count);
+
+ memcpy(output_data, data, byte_count);
+}
+
+