For test

Dependencies:   mbed

ArduinoSerial.h

Committer:
shennongmin
Date:
2015-02-03
Revision:
15:f5682fb5b315
Parent:
14:40b1decf03f3
Child:
16:e184ebcd5896

File content as of revision 15:f5682fb5b315:

#ifndef __ARDUINOSERIAL_H__
#define __ARDUINOSERIAL_H__

#include "log.h"
#include "time.h"
#include "Print.h"
#include "WString.h"

typedef enum {
    ARDUINOSERIAL_BUFFER_SIZE = 4096,
} ArduinoSerialConstant;

typedef struct {
    unsigned char buffer[ARDUINOSERIAL_BUFFER_SIZE];
    volatile unsigned int head;
    volatile unsigned int tail;
} RingBuffer;

class ArduinoSerial;

typedef struct LinkedListNode{
    ArduinoSerial* data;
    struct LinkedListNode *next;
} LinkedListNode;

class ArduinoSerial: public Serial, public Print
{
public:
    static void uart_irq_callback(void);
    
    ArduinoSerial(PinName tx, PinName rx);
    
    virtual ~ArduinoSerial(void);
    
    void begin(int baud_rate);
    
    int available(void);

    /* 清空接收缓冲区的数据 */
    void flush(void);
    
    char read_char(void);
    
    void setTimeout(unsigned long millisecond);
    
    bool find(const char *str);
    
    virtual size_t write(uint8_t data);

private:
    static LinkedListNode *init_list_head_node(LinkedListNode *head);
    static LinkedListNode *add_node_to_tail(LinkedListNode *head, ArduinoSerial* data);
    static LinkedListNode *del_node_by_data(LinkedListNode *head, ArduinoSerial* data);
    static LinkedListNode *find_node_by_data(LinkedListNode *head, ArduinoSerial* data);
    
    static LinkedListNode list_head;
    static unsigned int instance_counter;
    
    void write_char(unsigned char c);

    RingBuffer rx_buffer;
    unsigned long find_timeout;
};

#endif /* #ifndef __ARDUINOSERIAL_H__ */