Guest User

Untitled

a guest
Nov 21st, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 KB | None | 0 0
  1. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  2. {
  3. if (huart->Instance == huart1.Instance)
  4. {
  5. // Don't overwrite existing data.
  6. if (((_RxHead + 1) % BUFFER_SIZE) != _RxTail)
  7. {
  8. // Check for sysex.
  9. if (_SysexReceived == 0)
  10. {
  11. if (_RxByte == 0xF0)
  12. {
  13. _RxBuffer[_RxHead] = _RxByte;
  14. _RxHead = (_RxHead + 1) % BUFFER_SIZE;
  15. _SysexReceived = 1;
  16. }
  17.  
  18. // No sysex, skip active sensing/timing.
  19. else if ((_RxByte != 0xF8) && (_RxByte != 0xFE))
  20. {
  21. // Add byte.
  22. _RxBuffer[_RxHead] = _RxByte;
  23. _RxHead = (_RxHead + 1) % BUFFER_SIZE;
  24. }
  25. }
  26. else if (_SysexReceived < MAX_SYSEX_LENGTH)
  27. {
  28. // Sysex: add byte.
  29. _RxBuffer[_RxHead] = _RxByte;
  30. _RxHead = (_RxHead + 1) % BUFFER_SIZE;
  31. _SysexReceived = (_RxByte == 0xF7) ? 0 : _SysexReceived + 1;
  32. }
  33. else // SysexReceived >= (or ==) MAX_SYSEX_LENGTH
  34. {
  35. // Too long message, only write last 0x7F.
  36. if (_RxByte == 0xF7)
  37. {
  38. _RxBuffer[_RxHead] = _RxByte;
  39. _RxHead = (_RxHead + 1) % BUFFER_SIZE;
  40. _SysexReceived = 0;
  41. }
  42. }
  43.  
  44. #ifdef __BUFFER_DEBUG
  45. __ReceivedBufferData[__ReceivedIndex] = _RxByte;
  46. __ReceivedBufferHead[__ReceivedIndex] = _RxHead;
  47. __ReceivedBufferTail[__ReceivedIndex] = _RxTail;
  48. __ReceivedBufferSysex[__ReceivedIndex] = _SysexReceived;
  49. __ReceivedIndex++;
  50. if (__ReceivedIndex == __RECEIVED_BUFFER_SIZE)
  51. {
  52. __ReceivedIndex = 0;
  53. __ReceivedRounds++;
  54. }
  55. #endif
  56. }
  57. else
  58. {
  59. _Error_Handler(__FILE__, __LINE__);
  60. }
  61. }
  62. }
Add Comment
Please, Sign In to add comment