Naze32 clone with Frysky receiver
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

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. }