Naze32 clone with Frysky receiver
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

serial.cpp 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. /*
  2. * serial.c
  3. */
  4. #pragma GCC diagnostic push
  5. #pragma GCC diagnostic ignored "-Wunused-parameter"
  6. #pragma GCC diagnostic ignored "-pedantic"
  7. #include "mbed.h"
  8. #pragma GCC diagnostic pop
  9. #define UART_COUNT 1
  10. static Serial serial(USBTX, USBRX);
  11. extern "C" {
  12. #include "serial.h"
  13. uint8_t serialAvailable(void) {
  14. return UART_COUNT;
  15. }
  16. void serialInit(uint8_t uart, uint16_t baud) {
  17. if (uart >= UART_COUNT)
  18. return;
  19. serial.baud(baud);
  20. }
  21. void serialClose(uint8_t uart) {
  22. if (uart >= UART_COUNT)
  23. return;
  24. // Nothing to do
  25. }
  26. uint8_t serialHasChar(uint8_t uart) {
  27. if (uart >= UART_COUNT)
  28. return 0;
  29. return serial.readable();
  30. }
  31. uint8_t serialGetBlocking(uint8_t uart) {
  32. if (uart >= UART_COUNT)
  33. return 0;
  34. if (!serial.readable()) {
  35. return 0;
  36. }
  37. return serial.getc();
  38. }
  39. uint8_t serialGet(uint8_t uart) {
  40. if (uart >= UART_COUNT)
  41. return 0;
  42. while (!serial.readable());
  43. return serial.getc();
  44. }
  45. uint8_t serialRxBufferFull(uint8_t uart) {
  46. if (uart >= UART_COUNT)
  47. return 0;
  48. return serial.readable();
  49. }
  50. void serialWrite(uint8_t uart, uint8_t data) {
  51. if (uart >= UART_COUNT)
  52. return;
  53. serial.putc(data);
  54. }
  55. void serialWriteString(uint8_t uart, const char *data) {
  56. if (data == 0) {
  57. serialWriteString(uart, "NULL");
  58. } else {
  59. while (*data != '\0') {
  60. serialWrite(uart, *data++);
  61. }
  62. }
  63. }
  64. void serialWriteHex(uint8_t uart, uint8_t value) {
  65. char buff[3] = { 0, 0, '\0' };
  66. if (value >= 16) {
  67. buff[0] = value / 16;
  68. value = value % 16;
  69. }
  70. buff[1] = value;
  71. if (buff[0] <= 9) {
  72. buff[0] += '0';
  73. } else {
  74. buff[0] -= 10;
  75. buff[0] += 'A';
  76. }
  77. if (buff[1] <= 9) {
  78. buff[1] += '0';
  79. } else {
  80. buff[1] -= 10;
  81. buff[1] += 'A';
  82. }
  83. serialWriteString(uart, buff);
  84. }
  85. void serialWriteUnsigned8(uint8_t uart, uint8_t value) {
  86. char buff[4] = { '0', '0', '0', '\0' };
  87. uint8_t pos = sizeof(buff) - 2;
  88. while (value > 0) {
  89. buff[pos--] = '0' + (value % 10);
  90. value /= 10;
  91. }
  92. uint8_t start = 0;
  93. while ((start < (sizeof(buff) - 2)) && (buff[start] == '0')) {
  94. start++;
  95. }
  96. serialWriteString(uart, buff + start);
  97. }
  98. void serialWriteUnsigned16(uint8_t uart, uint16_t value) {
  99. char buff[6] = { '0', '0', '0', '0', '0', '\0' };
  100. uint8_t pos = sizeof(buff) - 2;
  101. while (value > 0) {
  102. buff[pos--] = '0' + (value % 10);
  103. value /= 10;
  104. }
  105. uint8_t start = 0;
  106. while ((start < (sizeof(buff) - 2)) && (buff[start] == '0')) {
  107. start++;
  108. }
  109. serialWriteString(uart, buff + start);
  110. }
  111. void serialWriteUnsigned32(uint8_t uart, uint32_t value) {
  112. char buff[11] = { '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '\0' };
  113. uint8_t pos = sizeof(buff) - 2;
  114. while (value > 0) {
  115. buff[pos--] = '0' + (value % 10);
  116. value /= 10;
  117. }
  118. uint8_t start = 0;
  119. while ((start < (sizeof(buff) - 2)) && (buff[start] == '0')) {
  120. start++;
  121. }
  122. serialWriteString(uart, buff + start);
  123. }
  124. void serialWriteUnsigned64(uint8_t uart, uint64_t value) {
  125. char buff[21] = { '0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
  126. '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '\0' };
  127. uint8_t pos = sizeof(buff) - 2;
  128. while (value > 0) {
  129. buff[pos--] = '0' + (value % 10);
  130. value /= 10;
  131. }
  132. uint8_t start = 0;
  133. while ((start < (sizeof(buff) - 2)) && (buff[start] == '0')) {
  134. start++;
  135. }
  136. serialWriteString(uart, buff + start);
  137. }
  138. uint8_t serialTxBufferFull(uint8_t uart) {
  139. if (uart >= UART_COUNT)
  140. return 1;
  141. return !serial.writeable();
  142. }
  143. uint8_t serialTxBufferEmpty(uint8_t uart) {
  144. if (uart >= UART_COUNT)
  145. return 0;
  146. return serial.writeable();
  147. }
  148. }