123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- /*
- * serial.c
- */
-
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #pragma GCC diagnostic ignored "-pedantic"
- #include "mbed.h"
- #pragma GCC diagnostic pop
-
- #include "MODSERIAL.h"
-
- #define UART_COUNT 1
-
- static MODSERIAL serial(USBTX, USBRX, 2048, 32);
-
- extern "C" {
-
- #include "serial.h"
-
- uint8_t serialAvailable(void) {
- return UART_COUNT;
- }
-
- void serialInit(uint8_t uart, uint32_t baud) {
- if (uart >= UART_COUNT)
- return;
-
- serial.baud(baud);
- }
-
- void serialClose(uint8_t uart) {
- if (uart >= UART_COUNT)
- return;
-
- // Nothing to do
- }
-
- uint8_t serialHasChar(uint8_t uart) {
- if (uart >= UART_COUNT)
- return 0;
-
- return serial.readable();
- }
-
- uint8_t serialGetBlocking(uint8_t uart) {
- if (uart >= UART_COUNT)
- return 0;
-
- if (!serial.readable()) {
- return 0;
- }
-
- return serial.getc();
- }
-
- uint8_t serialGet(uint8_t uart) {
- if (uart >= UART_COUNT)
- return 0;
-
- while (!serial.readable());
-
- return serial.getc();
- }
-
- uint8_t serialRxBufferFull(uint8_t uart) {
- if (uart >= UART_COUNT)
- return 0;
-
- return serial.readable();
- }
-
- void serialWrite(uint8_t uart, uint8_t data) {
- if (uart >= UART_COUNT)
- return;
-
- serial.putc(data);
- }
-
- void serialWriteString(uint8_t uart, const char *data) {
- if (data == 0) {
- serialWriteString(uart, "NULL");
- } else {
- while (*data != '\0') {
- serialWrite(uart, *data++);
- }
- }
- }
-
- void serialWriteHex(uint8_t uart, uint8_t value) {
- char buff[3] = { 0, 0, '\0' };
-
- if (value >= 16) {
- buff[0] = value / 16;
- value = value % 16;
- }
- buff[1] = value;
-
- if (buff[0] <= 9) {
- buff[0] += '0';
- } else {
- buff[0] -= 10;
- buff[0] += 'A';
- }
-
- if (buff[1] <= 9) {
- buff[1] += '0';
- } else {
- buff[1] -= 10;
- buff[1] += 'A';
- }
-
- serialWriteString(uart, buff);
- }
-
- void serialWriteUnsigned8(uint8_t uart, uint8_t value) {
- char buff[4] = { '0', '0', '0', '\0' };
-
- uint8_t pos = sizeof(buff) - 2;
- while (value > 0) {
- buff[pos--] = '0' + (value % 10);
- value /= 10;
- }
-
- uint8_t start = 0;
- while ((start < (sizeof(buff) - 2)) && (buff[start] == '0')) {
- start++;
- }
-
- serialWriteString(uart, buff + start);
- }
-
- void serialWriteUnsigned16(uint8_t uart, uint16_t value) {
- char buff[6] = { '0', '0', '0', '0', '0', '\0' };
-
- uint8_t pos = sizeof(buff) - 2;
- while (value > 0) {
- buff[pos--] = '0' + (value % 10);
- value /= 10;
- }
-
- uint8_t start = 0;
- while ((start < (sizeof(buff) - 2)) && (buff[start] == '0')) {
- start++;
- }
-
- serialWriteString(uart, buff + start);
- }
-
- void serialWriteUnsigned32(uint8_t uart, uint32_t value) {
- char buff[11] = { '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '\0' };
-
- uint8_t pos = sizeof(buff) - 2;
- while (value > 0) {
- buff[pos--] = '0' + (value % 10);
- value /= 10;
- }
-
- uint8_t start = 0;
- while ((start < (sizeof(buff) - 2)) && (buff[start] == '0')) {
- start++;
- }
-
- serialWriteString(uart, buff + start);
- }
-
- void serialWriteUnsigned64(uint8_t uart, uint64_t value) {
- char buff[21] = { '0', '0', '0', '0', '0', '0', '0', '0', '0', '0',
- '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '\0' };
-
- uint8_t pos = sizeof(buff) - 2;
- while (value > 0) {
- buff[pos--] = '0' + (value % 10);
- value /= 10;
- }
-
- uint8_t start = 0;
- while ((start < (sizeof(buff) - 2)) && (buff[start] == '0')) {
- start++;
- }
-
- serialWriteString(uart, buff + start);
- }
-
- uint8_t serialTxBufferFull(uint8_t uart) {
- if (uart >= UART_COUNT)
- return 1;
-
- return !serial.writeable();
- }
-
- uint8_t serialTxBufferEmpty(uint8_t uart) {
- if (uart >= UART_COUNT)
- return 0;
-
- return serial.writeable();
- }
-
- }
|