- added Delay to Serial flush method
Fork of ArduinoAPI by
ArduinoSerial.h@5:8072d40c7f3c, 2015-03-14 (annotated)
- Committer:
- JojoS
- Date:
- Sat Mar 14 10:15:36 2015 +0000
- Revision:
- 5:8072d40c7f3c
- Parent:
- 4:1fec2e4c60e5
- Child:
- 7:c62910a9e405
improved write: check writeable before putc();
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
itead | 0:5ebc917ebd09 | 1 | #ifndef __ARDUINOAPI_ARDUINOSERIAL_H__ |
itead | 0:5ebc917ebd09 | 2 | #define __ARDUINOAPI_ARDUINOSERIAL_H__ |
itead | 0:5ebc917ebd09 | 3 | |
itead | 0:5ebc917ebd09 | 4 | #include "Print.h" |
itead | 0:5ebc917ebd09 | 5 | #include "WString.h" |
itead | 0:5ebc917ebd09 | 6 | |
JojoS | 5:8072d40c7f3c | 7 | |
itead | 0:5ebc917ebd09 | 8 | typedef enum { |
itead | 4:1fec2e4c60e5 | 9 | ARDUINOSERIAL_BUFFER_SIZE = 512, |
itead | 0:5ebc917ebd09 | 10 | } ArduinoSerialConstant; |
itead | 0:5ebc917ebd09 | 11 | |
itead | 0:5ebc917ebd09 | 12 | typedef struct { |
itead | 0:5ebc917ebd09 | 13 | unsigned char buffer[ARDUINOSERIAL_BUFFER_SIZE]; |
itead | 0:5ebc917ebd09 | 14 | volatile unsigned int head; |
itead | 0:5ebc917ebd09 | 15 | volatile unsigned int tail; |
itead | 0:5ebc917ebd09 | 16 | } ArduinoSerialRingBuffer; |
itead | 0:5ebc917ebd09 | 17 | |
itead | 0:5ebc917ebd09 | 18 | class ArduinoSerial; |
itead | 0:5ebc917ebd09 | 19 | |
itead | 0:5ebc917ebd09 | 20 | typedef struct ArduinoSerialLinkedNode{ |
itead | 0:5ebc917ebd09 | 21 | ArduinoSerial* data; |
itead | 0:5ebc917ebd09 | 22 | struct ArduinoSerialLinkedNode *next; |
itead | 0:5ebc917ebd09 | 23 | } ArduinoSerialLinkedNode; |
itead | 0:5ebc917ebd09 | 24 | |
itead | 0:5ebc917ebd09 | 25 | class ArduinoSerial: public Serial, public Print |
itead | 0:5ebc917ebd09 | 26 | { |
itead | 0:5ebc917ebd09 | 27 | public: |
itead | 0:5ebc917ebd09 | 28 | ArduinoSerial(PinName tx, PinName rx); |
itead | 0:5ebc917ebd09 | 29 | |
itead | 0:5ebc917ebd09 | 30 | virtual ~ArduinoSerial(void); |
itead | 0:5ebc917ebd09 | 31 | |
itead | 1:2179048af332 | 32 | virtual size_t write(uint8_t data); |
itead | 1:2179048af332 | 33 | |
itead | 0:5ebc917ebd09 | 34 | void begin(int baud_rate); |
itead | 0:5ebc917ebd09 | 35 | |
itead | 0:5ebc917ebd09 | 36 | int available(void); |
itead | 0:5ebc917ebd09 | 37 | |
itead | 0:5ebc917ebd09 | 38 | void flush(void); |
itead | 0:5ebc917ebd09 | 39 | |
itead | 0:5ebc917ebd09 | 40 | char readChr(void); |
itead | 0:5ebc917ebd09 | 41 | |
itead | 0:5ebc917ebd09 | 42 | void setTimeout(unsigned long millisecond); |
itead | 0:5ebc917ebd09 | 43 | |
itead | 0:5ebc917ebd09 | 44 | bool find(const char *str); |
itead | 0:5ebc917ebd09 | 45 | |
itead | 0:5ebc917ebd09 | 46 | private: |
itead | 0:5ebc917ebd09 | 47 | static void uartIrqCallback(void); |
itead | 0:5ebc917ebd09 | 48 | static ArduinoSerialLinkedNode *initHeadNode(ArduinoSerialLinkedNode *head); |
itead | 0:5ebc917ebd09 | 49 | static ArduinoSerialLinkedNode *addNode(ArduinoSerialLinkedNode *head, ArduinoSerial* data); |
itead | 0:5ebc917ebd09 | 50 | static ArduinoSerialLinkedNode *delNode(ArduinoSerialLinkedNode *head, ArduinoSerial* data); |
itead | 0:5ebc917ebd09 | 51 | static ArduinoSerialLinkedNode *findNode(ArduinoSerialLinkedNode *head, ArduinoSerial* data); |
itead | 0:5ebc917ebd09 | 52 | |
itead | 0:5ebc917ebd09 | 53 | static ArduinoSerialLinkedNode ms_list_head; |
itead | 0:5ebc917ebd09 | 54 | static unsigned int ms_instance_counter; |
itead | 0:5ebc917ebd09 | 55 | |
itead | 0:5ebc917ebd09 | 56 | void writeChr(unsigned char c); |
itead | 0:5ebc917ebd09 | 57 | |
itead | 0:5ebc917ebd09 | 58 | ArduinoSerialRingBuffer m_rx_buffer; |
itead | 0:5ebc917ebd09 | 59 | unsigned long m_find_timeout; |
itead | 0:5ebc917ebd09 | 60 | }; |
itead | 0:5ebc917ebd09 | 61 | |
itead | 0:5ebc917ebd09 | 62 | #endif /* #ifndef __ARDUINOAPI_ARDUINOSERIAL_H__ */ |