@@ -168,15 +168,18 @@ int FtdiSpi::ft2232_spi_wr_and_rd(//struct ftdi_spi *spi,
168168 uint32_t writecnt,
169169 const uint8_t * writearr, uint8_t * readarr)
170170{
171- uint32_t max_xfer = (readarr) ? _buffer_size : 4096 ;
171+ // -3: for MPSSE instruction
172+ const uint32_t max_xfer = ((readarr) ? _buffer_size : 4096 );
172173 uint8_t buf[max_xfer];
173- int i = 0 ;
174+ uint8_t cmd[] = {
175+ static_cast <uint8_t >(((readarr) ? (MPSSE_DO_READ | _rd_mode) : 0 ) |
176+ ((writearr) ? (MPSSE_DO_WRITE | _wr_mode) : 0 )),
177+ 0 , 0 };
174178 int ret = 0 ;
175179
176180 uint8_t *rx_ptr = readarr;
177181 uint8_t *tx_ptr = (uint8_t *)writearr;
178182 uint32_t len = writecnt;
179- uint32_t xfer;
180183
181184 if (_cs_mode == SPI_CS_AUTO) {
182185 clearCs ();
@@ -190,33 +193,27 @@ int FtdiSpi::ft2232_spi_wr_and_rd(//struct ftdi_spi *spi,
190193 * operations.
191194 */
192195 while (len > 0 ) {
193- xfer = (len > max_xfer) ? max_xfer : len;
194-
195- buf[i++] = ((readarr) ? (MPSSE_DO_READ | _rd_mode) : 0 ) |
196- ((writearr) ? (MPSSE_DO_WRITE | _wr_mode) : 0 );
197- buf[i++] = (xfer - 1 ) & 0xff ;
198- buf[i++] = ((xfer - 1 ) >> 8 ) & 0xff ;
196+ const uint32_t xfer = (len > max_xfer) ? max_xfer : len;
197+ cmd[1 ] = ((xfer - 1 ) >> 0 ) & 0xff ;
198+ cmd[2 ] = ((xfer - 1 ) >> 8 ) & 0xff ;
199+ mpsse_store (cmd, 3 );
199200 if (writearr) {
200- memcpy (buf + i , tx_ptr, xfer);
201+ memcpy (buf, tx_ptr, xfer);
201202 tx_ptr += xfer;
202- i += xfer;
203203 }
204204
205- ret = mpsse_store (buf, i );
205+ ret = mpsse_store (buf, xfer );
206206 if (ret)
207207 printf (" send_buf failed before read: %i %s\n " , ret, ftdi_get_error_string (_ftdi));
208- i = 0 ;
209208 if (readarr) {
210- // if (ret == 0) {
211209 ret = mpsse_read (rx_ptr, xfer);
212- if ((uint32_t )ret != xfer)
213- printf (" get_buf failed: %i\n " , ret);
214- // }
210+ if (ret < 0 )
211+ printf (" get_buf failed: %i %s\n " , ret, ftdi_get_error_string (_ftdi));
215212 rx_ptr += xfer;
216213 } else {
217214 ret = mpsse_write ();
218- if (( uint32_t ) ret != xfer+ 3 )
219- printf (" error %d %d \n " , ret, i );
215+ if (ret < 0 )
216+ printf (" error: %i %s \n " , ret, ftdi_get_error_string (_ftdi) );
220217 }
221218 len -= xfer;
222219
0 commit comments