For test

Dependencies:   mbed

Committer:
shennongmin
Date:
Wed Feb 04 09:28:28 2015 +0000
Revision:
19:6c8b29734511
Parent:
18:37254b357abd
Child:
20:43451f36281e
compile okay

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shennongmin 10:9d4ec0359a5c 1 #ifndef __ARDUINOSERIAL_H__
shennongmin 10:9d4ec0359a5c 2 #define __ARDUINOSERIAL_H__
shennongmin 10:9d4ec0359a5c 3
shennongmin 10:9d4ec0359a5c 4 #include "time.h"
shennongmin 10:9d4ec0359a5c 5 #include "Print.h"
shennongmin 10:9d4ec0359a5c 6 #include "WString.h"
shennongmin 10:9d4ec0359a5c 7
shennongmin 11:7bd1b2a67b1a 8 typedef enum {
shennongmin 11:7bd1b2a67b1a 9 ARDUINOSERIAL_BUFFER_SIZE = 4096,
shennongmin 11:7bd1b2a67b1a 10 } ArduinoSerialConstant;
shennongmin 11:7bd1b2a67b1a 11
shennongmin 11:7bd1b2a67b1a 12 typedef struct {
shennongmin 11:7bd1b2a67b1a 13 unsigned char buffer[ARDUINOSERIAL_BUFFER_SIZE];
shennongmin 11:7bd1b2a67b1a 14 volatile unsigned int head;
shennongmin 11:7bd1b2a67b1a 15 volatile unsigned int tail;
shennongmin 18:37254b357abd 16 } ArduinoSerialRingBuffer;
shennongmin 11:7bd1b2a67b1a 17
shennongmin 11:7bd1b2a67b1a 18 class ArduinoSerial;
shennongmin 11:7bd1b2a67b1a 19
shennongmin 19:6c8b29734511 20 typedef struct ArduinoSerialLinkedNode{
shennongmin 11:7bd1b2a67b1a 21 ArduinoSerial* data;
shennongmin 19:6c8b29734511 22 struct ArduinoSerialLinkedNode *next;
shennongmin 19:6c8b29734511 23 } ArduinoSerialLinkedNode;
shennongmin 10:9d4ec0359a5c 24
shennongmin 10:9d4ec0359a5c 25 class ArduinoSerial: public Serial, public Print
shennongmin 10:9d4ec0359a5c 26 {
shennongmin 10:9d4ec0359a5c 27 public:
shennongmin 10:9d4ec0359a5c 28 ArduinoSerial(PinName tx, PinName rx);
shennongmin 10:9d4ec0359a5c 29
shennongmin 10:9d4ec0359a5c 30 virtual ~ArduinoSerial(void);
shennongmin 10:9d4ec0359a5c 31
shennongmin 10:9d4ec0359a5c 32 void begin(int baud_rate);
shennongmin 10:9d4ec0359a5c 33
shennongmin 10:9d4ec0359a5c 34 int available(void);
shennongmin 10:9d4ec0359a5c 35
shennongmin 10:9d4ec0359a5c 36 /* 清空接收缓冲区的数据 */
shennongmin 10:9d4ec0359a5c 37 void flush(void);
shennongmin 10:9d4ec0359a5c 38
shennongmin 10:9d4ec0359a5c 39 char read_char(void);
shennongmin 10:9d4ec0359a5c 40
shennongmin 10:9d4ec0359a5c 41 void setTimeout(unsigned long millisecond);
shennongmin 10:9d4ec0359a5c 42
shennongmin 10:9d4ec0359a5c 43 bool find(const char *str);
shennongmin 10:9d4ec0359a5c 44
shennongmin 10:9d4ec0359a5c 45 virtual size_t write(uint8_t data);
shennongmin 11:7bd1b2a67b1a 46
shennongmin 10:9d4ec0359a5c 47 private:
shennongmin 18:37254b357abd 48 static void uartIrqCallback(void);
shennongmin 19:6c8b29734511 49 static ArduinoSerialLinkedNode *initHeadNode(ArduinoSerialLinkedNode *head);
shennongmin 19:6c8b29734511 50 static ArduinoSerialLinkedNode *addNode(ArduinoSerialLinkedNode *head, ArduinoSerial* data);
shennongmin 19:6c8b29734511 51 static ArduinoSerialLinkedNode *delNode(ArduinoSerialLinkedNode *head, ArduinoSerial* data);
shennongmin 19:6c8b29734511 52 static ArduinoSerialLinkedNode *findNode(ArduinoSerialLinkedNode *head, ArduinoSerial* data);
shennongmin 10:9d4ec0359a5c 53
shennongmin 19:6c8b29734511 54 static ArduinoSerialLinkedNode ms_list_head;
shennongmin 19:6c8b29734511 55 static unsigned int ms_instance_counter;
shennongmin 10:9d4ec0359a5c 56
shennongmin 14:40b1decf03f3 57 void write_char(unsigned char c);
shennongmin 16:e184ebcd5896 58
shennongmin 19:6c8b29734511 59 ArduinoSerialRingBuffer m_rx_buffer;
shennongmin 19:6c8b29734511 60 unsigned long m_find_timeout;
shennongmin 10:9d4ec0359a5c 61 };
shennongmin 10:9d4ec0359a5c 62
shennongmin 10:9d4ec0359a5c 63 #endif /* #ifndef __ARDUINOSERIAL_H__ */