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

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