For test

Dependencies:   mbed

Committer:
shennongmin
Date:
Tue Feb 03 07:31:13 2015 +0000
Revision:
11:7bd1b2a67b1a
Parent:
10:9d4ec0359a5c
Child:
12:4e4e72f18047
debug linked list

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_INSTANCE_MAX = 5,
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 11:7bd1b2a67b1a 28
shennongmin 10:9d4ec0359a5c 29 public:
shennongmin 10:9d4ec0359a5c 30 static void uart_irq_callback(void);
shennongmin 11:7bd1b2a67b1a 31 static LinkedListNode *init_list_head_node(LinkedListNode *head);
shennongmin 11:7bd1b2a67b1a 32 static LinkedListNode *add_node_to_tail(LinkedListNode *head, ArduinoSerial* data);
shennongmin 11:7bd1b2a67b1a 33 static LinkedListNode *del_node_by_data(LinkedListNode *head, ArduinoSerial* data);
shennongmin 11:7bd1b2a67b1a 34 static LinkedListNode *find_node_by_data(LinkedListNode *head, ArduinoSerial* data);
shennongmin 11:7bd1b2a67b1a 35
shennongmin 10:9d4ec0359a5c 36 public:
shennongmin 10:9d4ec0359a5c 37 ArduinoSerial(PinName tx, PinName rx);
shennongmin 10:9d4ec0359a5c 38
shennongmin 10:9d4ec0359a5c 39 virtual ~ArduinoSerial(void);
shennongmin 10:9d4ec0359a5c 40
shennongmin 10:9d4ec0359a5c 41 void begin(int baud_rate);
shennongmin 10:9d4ec0359a5c 42
shennongmin 10:9d4ec0359a5c 43 int available(void);
shennongmin 10:9d4ec0359a5c 44
shennongmin 10:9d4ec0359a5c 45 /* 清空接收缓冲区的数据 */
shennongmin 10:9d4ec0359a5c 46 void flush(void);
shennongmin 10:9d4ec0359a5c 47
shennongmin 10:9d4ec0359a5c 48 char read_char(void);
shennongmin 10:9d4ec0359a5c 49
shennongmin 10:9d4ec0359a5c 50 void setTimeout(unsigned long millisecond);
shennongmin 10:9d4ec0359a5c 51
shennongmin 10:9d4ec0359a5c 52 bool find(const char *str);
shennongmin 10:9d4ec0359a5c 53
shennongmin 10:9d4ec0359a5c 54 virtual size_t write(uint8_t data);
shennongmin 11:7bd1b2a67b1a 55
shennongmin 10:9d4ec0359a5c 56 private:
shennongmin 10:9d4ec0359a5c 57 void write_char(unsigned char c);
shennongmin 10:9d4ec0359a5c 58
shennongmin 10:9d4ec0359a5c 59 private:
shennongmin 11:7bd1b2a67b1a 60 static LinkedListNode list_head;
shennongmin 10:9d4ec0359a5c 61 static unsigned int instance_counter;
shennongmin 10:9d4ec0359a5c 62
shennongmin 10:9d4ec0359a5c 63 RingBuffer rx_buffer;
shennongmin 10:9d4ec0359a5c 64 unsigned long find_timeout;
shennongmin 10:9d4ec0359a5c 65 };
shennongmin 10:9d4ec0359a5c 66
shennongmin 10:9d4ec0359a5c 67 #endif /* #ifndef __ARDUINOSERIAL_H__ */