huohuoh
Dependencies: NetServices mbed C027_Supports mbed-rpcx
Modem.cpp@1:f7d9b0530b73, 2019-09-11 (annotated)
- Committer:
- aldoao
- Date:
- Wed Sep 11 06:32:20 2019 +0000
- Revision:
- 1:f7d9b0530b73
- Parent:
- 0:64967b7043c2
tipe,1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
irsanjul | 0:64967b7043c2 | 1 | #include "MDM.h" |
irsanjul | 0:64967b7043c2 | 2 | #include "mbed.h" |
irsanjul | 0:64967b7043c2 | 3 | #include "Modem.h" |
irsanjul | 0:64967b7043c2 | 4 | #include <sstream> |
irsanjul | 0:64967b7043c2 | 5 | |
irsanjul | 0:64967b7043c2 | 6 | extern Serial dbg; |
irsanjul | 0:64967b7043c2 | 7 | |
irsanjul | 0:64967b7043c2 | 8 | void SetModem(MDMSerial &mdm) |
irsanjul | 0:64967b7043c2 | 9 | { |
irsanjul | 0:64967b7043c2 | 10 | MDMParser::DevStatus devStatus = {}; |
irsanjul | 0:64967b7043c2 | 11 | MDMParser::NetStatus netStatus = {}; |
irsanjul | 0:64967b7043c2 | 12 | bool mdmOk = mdm.init(SIMPIN, &devStatus); |
irsanjul | 0:64967b7043c2 | 13 | mdm.dumpDevStatus(&devStatus); |
irsanjul | 0:64967b7043c2 | 14 | if (mdmOk) { |
irsanjul | 0:64967b7043c2 | 15 | mdmOk = mdm.registerNet(&netStatus); |
irsanjul | 0:64967b7043c2 | 16 | mdm.dumpNetStatus(&netStatus); |
irsanjul | 0:64967b7043c2 | 17 | } |
irsanjul | 0:64967b7043c2 | 18 | if (mdmOk) |
irsanjul | 0:64967b7043c2 | 19 | { |
irsanjul | 0:64967b7043c2 | 20 | MDMParser::IP ip = mdm.join(APN,USERNAME,PASSWORD); |
irsanjul | 0:64967b7043c2 | 21 | if (ip != NOIP) |
irsanjul | 0:64967b7043c2 | 22 | { |
irsanjul | 0:64967b7043c2 | 23 | mdm.dumpIp(ip); |
irsanjul | 0:64967b7043c2 | 24 | dbg.printf("\r\n<Modem Connected>"); |
irsanjul | 0:64967b7043c2 | 25 | } |
irsanjul | 0:64967b7043c2 | 26 | } |
irsanjul | 0:64967b7043c2 | 27 | } |
irsanjul | 0:64967b7043c2 | 28 | |
irsanjul | 0:64967b7043c2 | 29 | std::string Convertint(int data) |
irsanjul | 0:64967b7043c2 | 30 | { |
irsanjul | 0:64967b7043c2 | 31 | std::stringstream c; |
irsanjul | 0:64967b7043c2 | 32 | c << data; |
irsanjul | 0:64967b7043c2 | 33 | |
irsanjul | 0:64967b7043c2 | 34 | return c.str(); |
irsanjul | 0:64967b7043c2 | 35 | } |
irsanjul | 0:64967b7043c2 | 36 | |
irsanjul | 0:64967b7043c2 | 37 | std::string Convert(double data) |
irsanjul | 0:64967b7043c2 | 38 | { |
irsanjul | 0:64967b7043c2 | 39 | std::stringstream c; |
irsanjul | 0:64967b7043c2 | 40 | c << data; |
irsanjul | 0:64967b7043c2 | 41 | |
irsanjul | 0:64967b7043c2 | 42 | return c.str(); |
irsanjul | 0:64967b7043c2 | 43 | } |
irsanjul | 0:64967b7043c2 | 44 | |
irsanjul | 0:64967b7043c2 | 45 | bool PostData(MDMSerial &mdm, const int &identifier_, const std::vector<int> &input, bool mode) |
irsanjul | 0:64967b7043c2 | 46 | { |
irsanjul | 0:64967b7043c2 | 47 | char buf[512] = ""; |
irsanjul | 0:64967b7043c2 | 48 | int ret; |
irsanjul | 0:64967b7043c2 | 49 | bool res = false; |
irsanjul | 0:64967b7043c2 | 50 | int socket = mdm.socketSocket(MDMParser::IPPROTO_TCP); |
irsanjul | 0:64967b7043c2 | 51 | |
irsanjul | 0:64967b7043c2 | 52 | std::string body; |
irsanjul | 0:64967b7043c2 | 53 | body += "{\"val\":\""; |
irsanjul | 0:64967b7043c2 | 54 | body += identifier_; |
irsanjul | 0:64967b7043c2 | 55 | body += std::string(input.begin(), input.end()); |
irsanjul | 0:64967b7043c2 | 56 | body += "\"}"; |
irsanjul | 0:64967b7043c2 | 57 | |
irsanjul | 0:64967b7043c2 | 58 | std::string http; |
irsanjul | 0:64967b7043c2 | 59 | if(mode == SKADA) |
irsanjul | 0:64967b7043c2 | 60 | { |
irsanjul | 0:64967b7043c2 | 61 | http += "PUT /todo/api/v1.0/scadas/1 HTTP/1.1\r\n"; |
irsanjul | 0:64967b7043c2 | 62 | } |
irsanjul | 0:64967b7043c2 | 63 | else if(mode == TASK) |
irsanjul | 0:64967b7043c2 | 64 | { |
irsanjul | 0:64967b7043c2 | 65 | http += "POST /todo/api/v1.0/tasks HTTP/1.1\r\n"; |
irsanjul | 0:64967b7043c2 | 66 | } |
irsanjul | 0:64967b7043c2 | 67 | http += "Host: 182.23.67.168:5000\r\n"; |
irsanjul | 0:64967b7043c2 | 68 | http += "Authorization: Basic am9objpoZWxsbw==\r\n"; |
irsanjul | 0:64967b7043c2 | 69 | http += "Connection: close\r\n"; |
irsanjul | 0:64967b7043c2 | 70 | http += "Content-Type: application/json\r\n"; |
irsanjul | 0:64967b7043c2 | 71 | http += "Content-Length: "; |
irsanjul | 0:64967b7043c2 | 72 | http += Convertint((int)body.size()); |
irsanjul | 0:64967b7043c2 | 73 | http += "\r\n\r\n"; |
irsanjul | 0:64967b7043c2 | 74 | http += body; |
irsanjul | 0:64967b7043c2 | 75 | http += "\r\n\r\n"; |
irsanjul | 0:64967b7043c2 | 76 | |
irsanjul | 0:64967b7043c2 | 77 | dbg.printf("Request:\r\n%s",http.c_str()); |
irsanjul | 0:64967b7043c2 | 78 | |
irsanjul | 0:64967b7043c2 | 79 | dbg.printf("Ready to post\r\n"); |
irsanjul | 0:64967b7043c2 | 80 | mdm.socketSetBlocking(socket, 10000); |
irsanjul | 0:64967b7043c2 | 81 | if (mdm.socketConnect(socket, "182.23.67.168", 5000)) |
irsanjul | 0:64967b7043c2 | 82 | { |
irsanjul | 0:64967b7043c2 | 83 | dbg.printf("Sending request\r\n"); |
irsanjul | 0:64967b7043c2 | 84 | mdm.socketSend(socket, http.c_str(), http.size()); |
irsanjul | 0:64967b7043c2 | 85 | |
irsanjul | 0:64967b7043c2 | 86 | ret = mdm.socketRecv(socket, buf, sizeof(buf)-1); |
irsanjul | 0:64967b7043c2 | 87 | if (ret > 0) |
irsanjul | 0:64967b7043c2 | 88 | { |
irsanjul | 0:64967b7043c2 | 89 | dbg.printf("Socket Recv \"%*s\"\r\n", ret, buf); |
irsanjul | 0:64967b7043c2 | 90 | if(strstr(buf, "HTTP/1.0 200") || strstr(buf, "HTTP/1.0 201")) |
irsanjul | 0:64967b7043c2 | 91 | { |
irsanjul | 0:64967b7043c2 | 92 | res = true; |
irsanjul | 0:64967b7043c2 | 93 | } |
irsanjul | 0:64967b7043c2 | 94 | else |
irsanjul | 0:64967b7043c2 | 95 | { |
irsanjul | 0:64967b7043c2 | 96 | res = false; |
irsanjul | 0:64967b7043c2 | 97 | } |
irsanjul | 0:64967b7043c2 | 98 | } |
irsanjul | 0:64967b7043c2 | 99 | else |
irsanjul | 0:64967b7043c2 | 100 | { |
irsanjul | 0:64967b7043c2 | 101 | dbg.printf("return 0\r\n"); |
irsanjul | 0:64967b7043c2 | 102 | res = false; |
irsanjul | 0:64967b7043c2 | 103 | } |
irsanjul | 0:64967b7043c2 | 104 | |
irsanjul | 0:64967b7043c2 | 105 | mdm.socketClose(socket); |
irsanjul | 0:64967b7043c2 | 106 | mdm.socketFree(socket); |
irsanjul | 0:64967b7043c2 | 107 | } |
irsanjul | 0:64967b7043c2 | 108 | else |
irsanjul | 0:64967b7043c2 | 109 | { |
irsanjul | 0:64967b7043c2 | 110 | mdm.socketSetBlocking(socket, 10000); |
irsanjul | 0:64967b7043c2 | 111 | mdm.socketConnect(socket, "182.23.67.168", 5000); |
irsanjul | 0:64967b7043c2 | 112 | res = false; |
irsanjul | 0:64967b7043c2 | 113 | } |
irsanjul | 0:64967b7043c2 | 114 | return res; |
irsanjul | 0:64967b7043c2 | 115 | } |
irsanjul | 0:64967b7043c2 | 116 | |
irsanjul | 0:64967b7043c2 | 117 | bool chekConect(MDMSerial &mdm) |
irsanjul | 0:64967b7043c2 | 118 | { |
irsanjul | 0:64967b7043c2 | 119 | bool stat = mdm.CheckCon(); |
irsanjul | 0:64967b7043c2 | 120 | if(!stat) |
irsanjul | 0:64967b7043c2 | 121 | { |
irsanjul | 0:64967b7043c2 | 122 | MDMParser::IP ip = mdm.join(APN,USERNAME,PASSWORD); |
irsanjul | 0:64967b7043c2 | 123 | if (ip != NOIP) |
irsanjul | 0:64967b7043c2 | 124 | { |
irsanjul | 0:64967b7043c2 | 125 | mdm.dumpIp(ip); |
irsanjul | 0:64967b7043c2 | 126 | return true; |
irsanjul | 0:64967b7043c2 | 127 | } |
irsanjul | 0:64967b7043c2 | 128 | else |
irsanjul | 0:64967b7043c2 | 129 | { |
irsanjul | 0:64967b7043c2 | 130 | mdm.join(APN,USERNAME,PASSWORD); |
irsanjul | 0:64967b7043c2 | 131 | return false; |
irsanjul | 0:64967b7043c2 | 132 | } |
irsanjul | 0:64967b7043c2 | 133 | } |
irsanjul | 0:64967b7043c2 | 134 | else |
irsanjul | 0:64967b7043c2 | 135 | return true; |
irsanjul | 0:64967b7043c2 | 136 | } |