For test

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ArduinoSerial.h Source File

ArduinoSerial.h

00001 #ifndef __ARDUINOSERIAL_H__
00002 #define __ARDUINOSERIAL_H__
00003 
00004 #include "Print.h"
00005 #include "WString.h"
00006 
00007 typedef enum {
00008     ARDUINOSERIAL_BUFFER_SIZE = 4096,
00009 } ArduinoSerialConstant;
00010 
00011 typedef struct {
00012     unsigned char buffer[ARDUINOSERIAL_BUFFER_SIZE];
00013     volatile unsigned int head;
00014     volatile unsigned int tail;
00015 } ArduinoSerialRingBuffer;
00016 
00017 class ArduinoSerial;
00018 
00019 typedef struct ArduinoSerialLinkedNode{
00020     ArduinoSerial* data;
00021     struct ArduinoSerialLinkedNode *next;
00022 } ArduinoSerialLinkedNode;
00023 
00024 class ArduinoSerial: public Serial, public Print
00025 {
00026 public:
00027     ArduinoSerial(PinName tx, PinName rx);
00028     
00029     virtual ~ArduinoSerial(void);
00030     
00031     void begin(int baud_rate);
00032     
00033     int available(void);
00034 
00035     void flush(void);
00036     
00037     char readChr(void);
00038     
00039     void setTimeout(unsigned long millisecond);
00040     
00041     bool find(const char *str);
00042     
00043 private:
00044     static void uartIrqCallback(void);
00045     static ArduinoSerialLinkedNode *initHeadNode(ArduinoSerialLinkedNode *head);
00046     static ArduinoSerialLinkedNode *addNode(ArduinoSerialLinkedNode *head, ArduinoSerial* data);
00047     static ArduinoSerialLinkedNode *delNode(ArduinoSerialLinkedNode *head, ArduinoSerial* data);
00048     static ArduinoSerialLinkedNode *findNode(ArduinoSerialLinkedNode *head, ArduinoSerial* data);
00049     
00050     static ArduinoSerialLinkedNode ms_list_head;
00051     static unsigned int ms_instance_counter;
00052     
00053     virtual size_t write(uint8_t data);
00054     void writeChr(unsigned char c);
00055  
00056     ArduinoSerialRingBuffer m_rx_buffer;
00057     unsigned long m_find_timeout;
00058 };
00059 
00060 #endif /* #ifndef __ARDUINOSERIAL_H__ */