+\r
+static void V2Protocol_ProcessCmdSPIMulti(void)\r
+{\r
+ uint8_t TxBytes = Endpoint_Read_Byte();\r
+ uint8_t RxBytes = Endpoint_Read_Byte();\r
+ uint8_t RxStartAddr = Endpoint_Read_Byte();\r
+ uint8_t TxData[255];\r
+ \r
+ Endpoint_Read_Stream_LE(TxData, TxBytes);\r
+ \r
+ Endpoint_ClearOUT();\r
+ Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
+ Endpoint_WaitUntilReady();\r
+ \r
+ Endpoint_Write_Byte(CMD_SPI_MULTI);\r
+ Endpoint_Write_Byte(STATUS_CMD_OK);\r
+\r
+ uint8_t CurrTxPos = 0;\r
+ uint8_t CurrRxPos = 0;\r
+\r
+ while (CurrTxPos < RxStartAddr)\r
+ {\r
+ if (CurrTxPos < TxBytes)\r
+ SPI_SendByte(TxData[CurrTxPos]);\r
+ else\r
+ SPI_SendByte(0);\r
+ \r
+ CurrTxPos++;\r
+ }\r
+\r
+ while (CurrRxPos < RxBytes)\r
+ {\r
+ if (CurrTxPos < TxBytes)\r
+ {\r
+ Endpoint_Write_Byte(SPI_TransferByte(TxData[CurrTxPos]));\r
+ CurrTxPos++;\r
+ }\r
+ else\r
+ {\r
+ Endpoint_Write_Byte(SPI_ReceiveByte());\r
+ }\r
+ \r
+ CurrRxPos++;\r
+ } \r
+ \r
+ Endpoint_Write_Byte(STATUS_CMD_OK);\r
+ Endpoint_ClearIN(); \r
+}\r