Add shortcuts to SwapEndian_16() and SwapEndian_32() internal functions to improve optimization if called with constant inputs.
This commit is contained in:
parent
ef4cff29c3
commit
3478178127
5 changed files with 53 additions and 25 deletions
|
@ -65,7 +65,13 @@ static bool IsTMCBulkOUTReset = false;
|
|||
static uint8_t CurrentTransferTag = 0;
|
||||
|
||||
/** Length of last data transfer, for reporting to the host in case an in-progress transfer is aborted */
|
||||
static uint32_t LastTransferLength = 0;
|
||||
static uint16_t LastTransferLength = 0;
|
||||
|
||||
/** Buffer to hold the next message to sent to the TMC host */
|
||||
static uint8_t NextResponseBuffer[64];
|
||||
|
||||
/** Indicates the length of the next response to send */
|
||||
static uint8_t NextReponseLen;
|
||||
|
||||
/** Main program entry point. This routine contains the overall program flow, including initial
|
||||
* setup of all components and the main program loop.
|
||||
|
@ -318,6 +324,27 @@ void EVENT_USB_Device_ControlRequest(void)
|
|||
}
|
||||
}
|
||||
|
||||
void ProcessSentMessage(uint8_t* const Data, const uint8_t Length)
|
||||
{
|
||||
if (strncmp((char*)Data, "*IDN?", 5) == 0)
|
||||
strcpy((char*)NextResponseBuffer, "LUFA TMC DEMO");
|
||||
|
||||
NextReponseLen = strlen((char*)NextResponseBuffer);
|
||||
}
|
||||
|
||||
uint8_t GetNextMessage(uint8_t* const Data)
|
||||
{
|
||||
strcpy((char*)NextResponseBuffer, "LUFA TMC DEMO");
|
||||
|
||||
NextReponseLen = strlen((char*)NextResponseBuffer);
|
||||
// ---
|
||||
uint8_t DataLen = MIN(NextReponseLen, 64);
|
||||
|
||||
strlcpy((char*)Data, (char*)NextResponseBuffer, DataLen);
|
||||
|
||||
return DataLen;
|
||||
}
|
||||
|
||||
/** Function to manage TMC data transmission and reception to and from the host. */
|
||||
void TMC_Task(void)
|
||||
{
|
||||
|
@ -326,7 +353,7 @@ void TMC_Task(void)
|
|||
return;
|
||||
|
||||
TMC_MessageHeader_t MessageHeader;
|
||||
uint16_t BytesTransferred;
|
||||
uint8_t MessagePayload[128];
|
||||
|
||||
/* Try to read in a TMC message from the interface, process if one is available */
|
||||
if (ReadTMCHeader(&MessageHeader))
|
||||
|
@ -337,34 +364,32 @@ void TMC_Task(void)
|
|||
switch (MessageHeader.MessageID)
|
||||
{
|
||||
case TMC_MESSAGEID_DEV_DEP_MSG_OUT:
|
||||
BytesTransferred = 0;
|
||||
while (Endpoint_Discard_Stream(MessageHeader.TransferSize, &BytesTransferred) ==
|
||||
LastTransferLength = 0;
|
||||
while (Endpoint_Read_Stream_LE(MessagePayload, MIN(MessageHeader.TransferSize, sizeof(MessagePayload)), &LastTransferLength) ==
|
||||
ENDPOINT_RWSTREAM_IncompleteTransfer)
|
||||
{
|
||||
if (IsTMCBulkOUTReset)
|
||||
break;
|
||||
}
|
||||
LastTransferLength = BytesTransferred;
|
||||
|
||||
Endpoint_ClearOUT();
|
||||
|
||||
ProcessSentMessage(MessagePayload, LastTransferLength);
|
||||
break;
|
||||
case TMC_MESSAGEID_DEV_DEP_MSG_IN:
|
||||
Endpoint_ClearOUT();
|
||||
|
||||
char MessageData[] = "TMC Class Test";
|
||||
|
||||
MessageHeader.TransferSize = strlen(MessageData);
|
||||
MessageHeader.TransferSize = GetNextMessage(MessagePayload);
|
||||
MessageHeader.MessageIDSpecific.DeviceOUT.LastMessageTransaction = true;
|
||||
WriteTMCHeader(&MessageHeader);
|
||||
|
||||
BytesTransferred = 0;
|
||||
while (Endpoint_Write_Stream_LE(MessageData, MessageHeader.TransferSize, &BytesTransferred) ==
|
||||
LastTransferLength = 0;
|
||||
while (Endpoint_Write_Stream_LE(MessagePayload, MessageHeader.TransferSize, &LastTransferLength) ==
|
||||
ENDPOINT_RWSTREAM_IncompleteTransfer)
|
||||
{
|
||||
if (IsTMCBulkINReset)
|
||||
break;
|
||||
}
|
||||
LastTransferLength = BytesTransferred;
|
||||
|
||||
Endpoint_ClearIN();
|
||||
break;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue