123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- #include "drivers/RawSerial.h"
- #include "platform/mbed_wait_api.h"
- #include <stdio.h>
- #include <cstdarg>
- #if DEVICE_SERIAL
- #define STRING_STACK_LIMIT 120
- namespace mbed {
- RawSerial::RawSerial(PinName tx, PinName rx, int baud) : SerialBase(tx, rx, baud)
- {
-
- }
- int RawSerial::getc()
- {
- lock();
- int ret = _base_getc();
- unlock();
- return ret;
- }
- int RawSerial::putc(int c)
- {
- lock();
- int ret = _base_putc(c);
- unlock();
- return ret;
- }
- int RawSerial::puts(const char *str)
- {
- lock();
- while (*str) {
- putc(*str ++);
- }
- unlock();
- return 0;
- }
- int RawSerial::printf(const char *format, ...)
- {
- lock();
- std::va_list arg;
- va_start(arg, format);
-
-
- char dummy_buf[1];
- int len = vsnprintf(dummy_buf, sizeof(dummy_buf), format, arg);
- if (len < STRING_STACK_LIMIT) {
- char temp[STRING_STACK_LIMIT];
- vsprintf(temp, format, arg);
- puts(temp);
- } else {
- char *temp = new char[len + 1];
- vsprintf(temp, format, arg);
- puts(temp);
- delete[] temp;
- }
- va_end(arg);
- unlock();
- return len;
- }
- void RawSerial::lock()
- {
-
- }
- void RawSerial::unlock()
- {
-
- }
- }
- #endif
|