Emulate 「Serial」of Arduino library for mbed. We can easily port arduino's project into mbed by this library.

Dependents:   MPU6050 MPU9150 MPU6050 MPU6050 ... more

ArduinoSerial.h

Committer:
syundo0730
Date:
2016-01-31
Revision:
1:e5a32ea3587b
Parent:
0:35db472ea9e6

File content as of revision 1:e5a32ea3587b:

#ifndef _ARDUINO_SERIAL_H_
#define _ARDUINO_SERIAL_H_

#include "mbed.h"

enum Format { BIN, OCT, DEC, HEX, NUMBER };

class ArduinoSerial
{
public:
    ArduinoSerial() : serial(USBTX, USBRX) {}
    ArduinoSerial(int baudrate) : serial(USBTX, USBRX) {
        serial.baud(baudrate);
    }
    ArduinoSerial(PinName tx, PinName rx, int baudrate = 9600) : serial(tx, rx) {
        serial.baud(baudrate);
    }

private:
    Serial serial;

public:
    void begin(int baudrate) {
        serial.baud(baudrate);
    }

    void inline print(const char* x) {
        serial.printf("%s", x);
    }
    
    template <typename T>
    void inline print(T x) {
        serial.printf("%f", (float)x);
    }
    
    template <typename T>
    void inline print(T x, Format fmt) {
        if (fmt == BIN) {
            serial.printf("We aren't supporting this format: %d", x);
        } else if(fmt == OCT) {
            serial.printf("%o", x);
        } else if (fmt == DEC) {
            serial.printf("%d", x);
        } else if (fmt == HEX) {
            serial.printf("%x", x);
        } else {
            serial.printf("%g", x);
        }
    }
    
    template <typename T>
    void inline println(T x) {
        ArduinoSerial::print(x);
        serial.printf("\r\n");
    }
    
    template <typename T>
    void inline println(T x, Format fmt) {
        ArduinoSerial::print(x, fmt);
        serial.printf("\r\n");
    }

    void inline write(const uint8_t packet) {
        serial.putc(packet);
    }

    void inline write(const uint8_t* packet, uint8_t length) {
        for (int i = 0; i < length; ++i) {
            serial.putc(packet[i]);
        }
    }
};

#endif /* _ARDUINO_SERIAL_H_ */