linfeng zhong
/
SIM_ByIrq
Using the interrupt function to dispose messages
main.cpp@0:0e1ee46c6ffb, 2017-11-29 (annotated)
- Committer:
- Zero_YI
- Date:
- Wed Nov 29 06:22:01 2017 +0000
- Revision:
- 0:0e1ee46c6ffb
SIM_ByIrq
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Zero_YI | 0:0e1ee46c6ffb | 1 | #include "mbed.h" |
Zero_YI | 0:0e1ee46c6ffb | 2 | #include "string.h" |
Zero_YI | 0:0e1ee46c6ffb | 3 | |
Zero_YI | 0:0e1ee46c6ffb | 4 | #define MAX_READ_LEN 256 |
Zero_YI | 0:0e1ee46c6ffb | 5 | #define SEVER "122.5.17.146" |
Zero_YI | 0:0e1ee46c6ffb | 6 | #define PORT 9961 |
Zero_YI | 0:0e1ee46c6ffb | 7 | |
Zero_YI | 0:0e1ee46c6ffb | 8 | DigitalOut myled(LED1); |
Zero_YI | 0:0e1ee46c6ffb | 9 | Timer timer; |
Zero_YI | 0:0e1ee46c6ffb | 10 | Serial pc(USBTX,USBRX,9600); |
Zero_YI | 0:0e1ee46c6ffb | 11 | Serial sim(PA_9,PA_10,115200); |
Zero_YI | 0:0e1ee46c6ffb | 12 | |
Zero_YI | 0:0e1ee46c6ffb | 13 | char readBuf[MAX_READ_LEN]; |
Zero_YI | 0:0e1ee46c6ffb | 14 | int bufPtr; |
Zero_YI | 0:0e1ee46c6ffb | 15 | bool revOK; |
Zero_YI | 0:0e1ee46c6ffb | 16 | |
Zero_YI | 0:0e1ee46c6ffb | 17 | enum rxMode{ |
Zero_YI | 0:0e1ee46c6ffb | 18 | CMDMODE = 0; |
Zero_YI | 0:0e1ee46c6ffb | 19 | GPSMODE = 1; |
Zero_YI | 0:0e1ee46c6ffb | 20 | }; |
Zero_YI | 0:0e1ee46c6ffb | 21 | |
Zero_YI | 0:0e1ee46c6ffb | 22 | void uartIrq() |
Zero_YI | 0:0e1ee46c6ffb | 23 | { |
Zero_YI | 0:0e1ee46c6ffb | 24 | while(sim.readable()&&bufPtr<MAX_READ_LEN) |
Zero_YI | 0:0e1ee46c6ffb | 25 | { |
Zero_YI | 0:0e1ee46c6ffb | 26 | char buf = sim.getc(); |
Zero_YI | 0:0e1ee46c6ffb | 27 | if(buf!='\r'&&buf!='\n') |
Zero_YI | 0:0e1ee46c6ffb | 28 | { |
Zero_YI | 0:0e1ee46c6ffb | 29 | readBuf[bufPtr++] = buf; |
Zero_YI | 0:0e1ee46c6ffb | 30 | } |
Zero_YI | 0:0e1ee46c6ffb | 31 | if(buf=='\n') |
Zero_YI | 0:0e1ee46c6ffb | 32 | { |
Zero_YI | 0:0e1ee46c6ffb | 33 | readBuf[bufPtr] = 0; |
Zero_YI | 0:0e1ee46c6ffb | 34 | bufPtr = 0; |
Zero_YI | 0:0e1ee46c6ffb | 35 | revOK = true; |
Zero_YI | 0:0e1ee46c6ffb | 36 | } |
Zero_YI | 0:0e1ee46c6ffb | 37 | } |
Zero_YI | 0:0e1ee46c6ffb | 38 | } |
Zero_YI | 0:0e1ee46c6ffb | 39 | |
Zero_YI | 0:0e1ee46c6ffb | 40 | int getReply(uint16_t timeOut=1000) |
Zero_YI | 0:0e1ee46c6ffb | 41 | { |
Zero_YI | 0:0e1ee46c6ffb | 42 | int begin; |
Zero_YI | 0:0e1ee46c6ffb | 43 | timer.start(); |
Zero_YI | 0:0e1ee46c6ffb | 44 | begin = timer.read_ms(); |
Zero_YI | 0:0e1ee46c6ffb | 45 | while(!revOK) |
Zero_YI | 0:0e1ee46c6ffb | 46 | { |
Zero_YI | 0:0e1ee46c6ffb | 47 | if(timer.read_ms()-begin>timeOut) |
Zero_YI | 0:0e1ee46c6ffb | 48 | { |
Zero_YI | 0:0e1ee46c6ffb | 49 | timer.stop(); |
Zero_YI | 0:0e1ee46c6ffb | 50 | return 0; //time out; |
Zero_YI | 0:0e1ee46c6ffb | 51 | } |
Zero_YI | 0:0e1ee46c6ffb | 52 | } |
Zero_YI | 0:0e1ee46c6ffb | 53 | timer.stop(); |
Zero_YI | 0:0e1ee46c6ffb | 54 | revOK = false; |
Zero_YI | 0:0e1ee46c6ffb | 55 | return 1; |
Zero_YI | 0:0e1ee46c6ffb | 56 | } |
Zero_YI | 0:0e1ee46c6ffb | 57 | |
Zero_YI | 0:0e1ee46c6ffb | 58 | bool expectReply(char* eptReply,uint16_t timeOut,uint8_t mulNum=2) |
Zero_YI | 0:0e1ee46c6ffb | 59 | { |
Zero_YI | 0:0e1ee46c6ffb | 60 | for(int i=0;i<mulNum;i++) |
Zero_YI | 0:0e1ee46c6ffb | 61 | { |
Zero_YI | 0:0e1ee46c6ffb | 62 | getReply(timeOut); |
Zero_YI | 0:0e1ee46c6ffb | 63 | if(0!=strstr(readBuf,eptReply)) |
Zero_YI | 0:0e1ee46c6ffb | 64 | { |
Zero_YI | 0:0e1ee46c6ffb | 65 | return true; |
Zero_YI | 0:0e1ee46c6ffb | 66 | } |
Zero_YI | 0:0e1ee46c6ffb | 67 | } |
Zero_YI | 0:0e1ee46c6ffb | 68 | return false; |
Zero_YI | 0:0e1ee46c6ffb | 69 | } |
Zero_YI | 0:0e1ee46c6ffb | 70 | |
Zero_YI | 0:0e1ee46c6ffb | 71 | int sendCheckReply(char* cmd,char* reply,uint16_t timeOut=1000) |
Zero_YI | 0:0e1ee46c6ffb | 72 | { |
Zero_YI | 0:0e1ee46c6ffb | 73 | sim.printf("%s\r\n",cmd); |
Zero_YI | 0:0e1ee46c6ffb | 74 | return expectReply(reply,timeOut,5); |
Zero_YI | 0:0e1ee46c6ffb | 75 | } |
Zero_YI | 0:0e1ee46c6ffb | 76 | |
Zero_YI | 0:0e1ee46c6ffb | 77 | bool TCPconnect(char *server, uint16_t port) |
Zero_YI | 0:0e1ee46c6ffb | 78 | { |
Zero_YI | 0:0e1ee46c6ffb | 79 | if (! sendCheckReply("AT+CIPSHUT", "SHUT OK", 5000) ) |
Zero_YI | 0:0e1ee46c6ffb | 80 | return false; |
Zero_YI | 0:0e1ee46c6ffb | 81 | //pc.printf("%s\r\n",readBuf); |
Zero_YI | 0:0e1ee46c6ffb | 82 | |
Zero_YI | 0:0e1ee46c6ffb | 83 | if (! sendCheckReply("AT+CIPMUX=0", "OK") ) |
Zero_YI | 0:0e1ee46c6ffb | 84 | return false; |
Zero_YI | 0:0e1ee46c6ffb | 85 | |
Zero_YI | 0:0e1ee46c6ffb | 86 | sim.printf("AT+CIPSTART=\"TCP\",\"%s\",%d\r\n",server,port); |
Zero_YI | 0:0e1ee46c6ffb | 87 | if (! expectReply("OK",1000,2)) return false; |
Zero_YI | 0:0e1ee46c6ffb | 88 | if (! expectReply("CONNECT OK",1000,3)) return false; |
Zero_YI | 0:0e1ee46c6ffb | 89 | return true; |
Zero_YI | 0:0e1ee46c6ffb | 90 | } |
Zero_YI | 0:0e1ee46c6ffb | 91 | |
Zero_YI | 0:0e1ee46c6ffb | 92 | bool init() |
Zero_YI | 0:0e1ee46c6ffb | 93 | { |
Zero_YI | 0:0e1ee46c6ffb | 94 | for(int i=0;i<3;i++) |
Zero_YI | 0:0e1ee46c6ffb | 95 | { |
Zero_YI | 0:0e1ee46c6ffb | 96 | if(sendCheckReply("AT","OK")) |
Zero_YI | 0:0e1ee46c6ffb | 97 | { |
Zero_YI | 0:0e1ee46c6ffb | 98 | return true; |
Zero_YI | 0:0e1ee46c6ffb | 99 | } |
Zero_YI | 0:0e1ee46c6ffb | 100 | wait(0.5); |
Zero_YI | 0:0e1ee46c6ffb | 101 | } |
Zero_YI | 0:0e1ee46c6ffb | 102 | return false; |
Zero_YI | 0:0e1ee46c6ffb | 103 | } |
Zero_YI | 0:0e1ee46c6ffb | 104 | |
Zero_YI | 0:0e1ee46c6ffb | 105 | bool TCPsend(char*sendData) |
Zero_YI | 0:0e1ee46c6ffb | 106 | { |
Zero_YI | 0:0e1ee46c6ffb | 107 | if(sendCheckReply("AT+CIPSTATUS","CONNECT OK")) |
Zero_YI | 0:0e1ee46c6ffb | 108 | { |
Zero_YI | 0:0e1ee46c6ffb | 109 | sendCheckReply("AT+CIPSEND",">"); |
Zero_YI | 0:0e1ee46c6ffb | 110 | sim.printf("%s\r\n",sendData); |
Zero_YI | 0:0e1ee46c6ffb | 111 | sim.printf("%c\r\n",char(0x1a)); |
Zero_YI | 0:0e1ee46c6ffb | 112 | if(expectReply("SEND OK",1000,5)) |
Zero_YI | 0:0e1ee46c6ffb | 113 | { |
Zero_YI | 0:0e1ee46c6ffb | 114 | // pc.printf("SEND OK\r\n"); |
Zero_YI | 0:0e1ee46c6ffb | 115 | return true; |
Zero_YI | 0:0e1ee46c6ffb | 116 | } |
Zero_YI | 0:0e1ee46c6ffb | 117 | else |
Zero_YI | 0:0e1ee46c6ffb | 118 | { |
Zero_YI | 0:0e1ee46c6ffb | 119 | // pc.printf("SEND FAIL:%s\r\n",readBuf); |
Zero_YI | 0:0e1ee46c6ffb | 120 | return false; |
Zero_YI | 0:0e1ee46c6ffb | 121 | } |
Zero_YI | 0:0e1ee46c6ffb | 122 | } |
Zero_YI | 0:0e1ee46c6ffb | 123 | return false; |
Zero_YI | 0:0e1ee46c6ffb | 124 | } |
Zero_YI | 0:0e1ee46c6ffb | 125 | |
Zero_YI | 0:0e1ee46c6ffb | 126 | bool TCPclose() |
Zero_YI | 0:0e1ee46c6ffb | 127 | { |
Zero_YI | 0:0e1ee46c6ffb | 128 | if(sendCheckReply("AT+CIPCLOSE","CLOSE OK")) |
Zero_YI | 0:0e1ee46c6ffb | 129 | { |
Zero_YI | 0:0e1ee46c6ffb | 130 | return true; |
Zero_YI | 0:0e1ee46c6ffb | 131 | } |
Zero_YI | 0:0e1ee46c6ffb | 132 | else |
Zero_YI | 0:0e1ee46c6ffb | 133 | { |
Zero_YI | 0:0e1ee46c6ffb | 134 | return false; |
Zero_YI | 0:0e1ee46c6ffb | 135 | } |
Zero_YI | 0:0e1ee46c6ffb | 136 | } |
Zero_YI | 0:0e1ee46c6ffb | 137 | |
Zero_YI | 0:0e1ee46c6ffb | 138 | int main() { |
Zero_YI | 0:0e1ee46c6ffb | 139 | sim.attach(&uartIrq,Serial::RxIrq); |
Zero_YI | 0:0e1ee46c6ffb | 140 | pc.printf("Hello World!\r\n"); |
Zero_YI | 0:0e1ee46c6ffb | 141 | while(pc.readable()) |
Zero_YI | 0:0e1ee46c6ffb | 142 | pc.getc(); |
Zero_YI | 0:0e1ee46c6ffb | 143 | if(init()) |
Zero_YI | 0:0e1ee46c6ffb | 144 | pc.printf("init OK\r\n"); |
Zero_YI | 0:0e1ee46c6ffb | 145 | else |
Zero_YI | 0:0e1ee46c6ffb | 146 | pc.printf("init failed!please try again later!\r\n"); |
Zero_YI | 0:0e1ee46c6ffb | 147 | if(TCPconnect(SEVER,PORT)) |
Zero_YI | 0:0e1ee46c6ffb | 148 | pc.printf("TCPconnect OK\r\n"); |
Zero_YI | 0:0e1ee46c6ffb | 149 | else |
Zero_YI | 0:0e1ee46c6ffb | 150 | pc.printf("TCPconnect Fail\r\n"); |
Zero_YI | 0:0e1ee46c6ffb | 151 | if(TCPsend("I Love Juan")) |
Zero_YI | 0:0e1ee46c6ffb | 152 | pc.printf("Send OK\r\n"); |
Zero_YI | 0:0e1ee46c6ffb | 153 | else |
Zero_YI | 0:0e1ee46c6ffb | 154 | pc.printf("Send Fail\r\n"); |
Zero_YI | 0:0e1ee46c6ffb | 155 | while(1) { |
Zero_YI | 0:0e1ee46c6ffb | 156 | myled = !myled; |
Zero_YI | 0:0e1ee46c6ffb | 157 | wait(1); |
Zero_YI | 0:0e1ee46c6ffb | 158 | } |
Zero_YI | 0:0e1ee46c6ffb | 159 | } |