Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
- {
- if (huart->Instance == huart1.Instance)
- {
- // Don't overwrite existing data.
- if (((_RxHead + 1) % BUFFER_SIZE) != _RxTail)
- {
- // Check for sysex.
- if (_SysexReceived == 0)
- {
- if (_RxByte == 0xF0)
- {
- _RxBuffer[_RxHead] = _RxByte;
- _RxHead = (_RxHead + 1) % BUFFER_SIZE;
- _SysexReceived = 1;
- }
- // No sysex, skip active sensing/timing.
- else if ((_RxByte != 0xF8) && (_RxByte != 0xFE))
- {
- // Add byte.
- _RxBuffer[_RxHead] = _RxByte;
- _RxHead = (_RxHead + 1) % BUFFER_SIZE;
- }
- }
- else if (_SysexReceived < MAX_SYSEX_LENGTH)
- {
- // Sysex: add byte.
- _RxBuffer[_RxHead] = _RxByte;
- _RxHead = (_RxHead + 1) % BUFFER_SIZE;
- _SysexReceived = (_RxByte == 0xF7) ? 0 : _SysexReceived + 1;
- }
- else // SysexReceived >= (or ==) MAX_SYSEX_LENGTH
- {
- // Too long message, only write last 0x7F.
- if (_RxByte == 0xF7)
- {
- _RxBuffer[_RxHead] = _RxByte;
- _RxHead = (_RxHead + 1) % BUFFER_SIZE;
- _SysexReceived = 0;
- }
- }
- #ifdef __BUFFER_DEBUG
- __ReceivedBufferData[__ReceivedIndex] = _RxByte;
- __ReceivedBufferHead[__ReceivedIndex] = _RxHead;
- __ReceivedBufferTail[__ReceivedIndex] = _RxTail;
- __ReceivedBufferSysex[__ReceivedIndex] = _SysexReceived;
- __ReceivedIndex++;
- if (__ReceivedIndex == __RECEIVED_BUFFER_SIZE)
- {
- __ReceivedIndex = 0;
- __ReceivedRounds++;
- }
- #endif
- }
- else
- {
- _Error_Handler(__FILE__, __LINE__);
- }
- }
- }
Add Comment
Please, Sign In to add comment