For test

Dependencies:   mbed

Committer:
shennongmin
Date:
Wed Feb 04 02:47:28 2015 +0000
Revision:
16:e184ebcd5896
Parent:
15:f5682fb5b315
Child:
18:37254b357abd
All is okay without style

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 15:f5682fb5b315 4 #include "log.h"
shennongmin 10:9d4ec0359a5c 5 #include "time.h"
shennongmin 10:9d4ec0359a5c 6 #include "Print.h"
shennongmin 10:9d4ec0359a5c 7 #include "WString.h"
shennongmin 10:9d4ec0359a5c 8
shennongmin 11:7bd1b2a67b1a 9 typedef enum {
shennongmin 11:7bd1b2a67b1a 10 ARDUINOSERIAL_BUFFER_SIZE = 4096,
shennongmin 11:7bd1b2a67b1a 11 } ArduinoSerialConstant;
shennongmin 11:7bd1b2a67b1a 12
shennongmin 11:7bd1b2a67b1a 13 typedef struct {
shennongmin 11:7bd1b2a67b1a 14 unsigned char buffer[ARDUINOSERIAL_BUFFER_SIZE];
shennongmin 11:7bd1b2a67b1a 15 volatile unsigned int head;
shennongmin 11:7bd1b2a67b1a 16 volatile unsigned int tail;
shennongmin 11:7bd1b2a67b1a 17 } RingBuffer;
shennongmin 11:7bd1b2a67b1a 18
shennongmin 11:7bd1b2a67b1a 19 class ArduinoSerial;
shennongmin 11:7bd1b2a67b1a 20
shennongmin 11:7bd1b2a67b1a 21 typedef struct LinkedListNode{
shennongmin 11:7bd1b2a67b1a 22 ArduinoSerial* data;
shennongmin 11:7bd1b2a67b1a 23 struct LinkedListNode *next;
shennongmin 11:7bd1b2a67b1a 24 } LinkedListNode;
shennongmin 10:9d4ec0359a5c 25
shennongmin 10:9d4ec0359a5c 26 class ArduinoSerial: public Serial, public Print
shennongmin 10:9d4ec0359a5c 27 {
shennongmin 10:9d4ec0359a5c 28 public:
shennongmin 10:9d4ec0359a5c 29 static void uart_irq_callback(void);
shennongmin 11:7bd1b2a67b1a 30
shennongmin 10:9d4ec0359a5c 31 ArduinoSerial(PinName tx, PinName rx);
shennongmin 10:9d4ec0359a5c 32
shennongmin 10:9d4ec0359a5c 33 virtual ~ArduinoSerial(void);
shennongmin 10:9d4ec0359a5c 34
shennongmin 10:9d4ec0359a5c 35 void begin(int baud_rate);
shennongmin 10:9d4ec0359a5c 36
shennongmin 10:9d4ec0359a5c 37 int available(void);
shennongmin 10:9d4ec0359a5c 38
shennongmin 10:9d4ec0359a5c 39 /* 清空接收缓冲区的数据 */
shennongmin 10:9d4ec0359a5c 40 void flush(void);
shennongmin 10:9d4ec0359a5c 41
shennongmin 10:9d4ec0359a5c 42 char read_char(void);
shennongmin 10:9d4ec0359a5c 43
shennongmin 10:9d4ec0359a5c 44 void setTimeout(unsigned long millisecond);
shennongmin 10:9d4ec0359a5c 45
shennongmin 10:9d4ec0359a5c 46 bool find(const char *str);
shennongmin 10:9d4ec0359a5c 47
shennongmin 10:9d4ec0359a5c 48 virtual size_t write(uint8_t data);
shennongmin 11:7bd1b2a67b1a 49
shennongmin 10:9d4ec0359a5c 50 private:
shennongmin 12:4e4e72f18047 51 static LinkedListNode *init_list_head_node(LinkedListNode *head);
shennongmin 12:4e4e72f18047 52 static LinkedListNode *add_node_to_tail(LinkedListNode *head, ArduinoSerial* data);
shennongmin 12:4e4e72f18047 53 static LinkedListNode *del_node_by_data(LinkedListNode *head, ArduinoSerial* data);
shennongmin 12:4e4e72f18047 54 static LinkedListNode *find_node_by_data(LinkedListNode *head, ArduinoSerial* data);
shennongmin 10:9d4ec0359a5c 55
shennongmin 11:7bd1b2a67b1a 56 static LinkedListNode list_head;
shennongmin 10:9d4ec0359a5c 57 static unsigned int instance_counter;
shennongmin 10:9d4ec0359a5c 58
shennongmin 14:40b1decf03f3 59 void write_char(unsigned char c);
shennongmin 16:e184ebcd5896 60
shennongmin 10:9d4ec0359a5c 61 RingBuffer rx_buffer;
shennongmin 10:9d4ec0359a5c 62 unsigned long find_timeout;
shennongmin 10:9d4ec0359a5c 63 };
shennongmin 10:9d4ec0359a5c 64
shennongmin 10:9d4ec0359a5c 65 #endif /* #ifndef __ARDUINOSERIAL_H__ */