2019-06-05

Dependencies:   DataStorage NetworkManager IR_Manager WheelManager RestAPI_Manager

Committer:
asaewing
Date:
Fri Dec 21 14:19:47 2018 +0000
Revision:
2:7581451de520
Parent:
1:dc6fd86fb7f9
Child:
4:acd433b7ecd7
2018-12-21 3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
asaewing 2:7581451de520 1 #if !FEATURE_LWIP
asaewing 2:7581451de520 2 #error [NOT_SUPPORTED] LWIP not supported for this target
asaewing 2:7581451de520 3 #endif
asaewing 2:7581451de520 4
asaewing 2:7581451de520 5 #include "module_for_all.h"
asaewing 2:7581451de520 6
asaewing 2:7581451de520 7 #define PORT 8080
asaewing 2:7581451de520 8
asaewing 2:7581451de520 9 #define IP1 "192.168.20.101"
asaewing 2:7581451de520 10 #define IP2 "192.168.20.102"
asaewing 2:7581451de520 11 #define IP3 "192.168.20.103"
asaewing 2:7581451de520 12 #define IP4 "192.168.20.104"
asaewing 2:7581451de520 13 #define GATEWAY "192.168.20.1"
asaewing 2:7581451de520 14 #define MASK "255.255.255.0"
asaewing 2:7581451de520 15
asaewing 2:7581451de520 16 const char* ip = 0;
asaewing 2:7581451de520 17 const char* mac = 0;
asaewing 2:7581451de520 18 DataStorage ds_manager("");
asaewing 2:7581451de520 19
asaewing 2:7581451de520 20 //DigitalIn IP_Select2(PG_2);
asaewing 2:7581451de520 21
asaewing 2:7581451de520 22 //DigitalIn Test_Mode(PC_14);
asaewing 2:7581451de520 23
asaewing 2:7581451de520 24 NetworkManager* net_manager = new NetworkManager(IP1, GATEWAY, MASK, PORT);
asaewing 2:7581451de520 25 RestAPI_Manager* restAPI_manager = new RestAPI_Manager(&ds_manager, IP1, "1");
asaewing 2:7581451de520 26
asaewing 2:7581451de520 27 //NetworkManager net_manager();
asaewing 2:7581451de520 28 //RestAPI_Manager restAPI_manager();
asaewing 2:7581451de520 29
asaewing 2:7581451de520 30 void checkServer()
asaewing 2:7581451de520 31 {
asaewing 2:7581451de520 32 //TCPSocket socket;
asaewing 2:7581451de520 33
asaewing 2:7581451de520 34 printf("Sending HTTP request to www.arm.com...\r\n");
asaewing 2:7581451de520 35
asaewing 2:7581451de520 36 // Open a socket on the network interface, and create a TCP connection to www.arm.com
asaewing 2:7581451de520 37 net_manager->clt_sock.open(&(net_manager->eth));
asaewing 2:7581451de520 38 net_manager->clt_sock.connect("192.168.20.1", 81);
asaewing 2:7581451de520 39
asaewing 2:7581451de520 40 // Send a simple http request
asaewing 2:7581451de520 41 //char sbuffer[] = "GET /iamok/ HTTP/1.1\r\nHost: 192.168.20.1\r\n\r\n";
asaewing 2:7581451de520 42 std::string sbuffer_str = "GET /iamok/ HTTP/1.1\r\nHost: 192.168.20.1\r\n\r\n";
asaewing 2:7581451de520 43 char* sbuffer = new char [sbuffer_str.length()+1];
asaewing 2:7581451de520 44
asaewing 2:7581451de520 45 //tmpString = stringToChar(tmpResponse);
asaewing 2:7581451de520 46 stringToChar(sbuffer, sbuffer_str);
asaewing 2:7581451de520 47
asaewing 2:7581451de520 48 //clt_sock.send(tmpString, strlen(tmpString));
asaewing 2:7581451de520 49
asaewing 2:7581451de520 50 int scount = net_manager->clt_sock.send(sbuffer, strlen(sbuffer));
asaewing 2:7581451de520 51 printf("sent %d [%.*s]\r\n", scount, strstr(sbuffer, "\r\n")-sbuffer, sbuffer);
asaewing 2:7581451de520 52
asaewing 2:7581451de520 53 if (scount>=0){
asaewing 2:7581451de520 54 // Recieve a simple http response and print out the response line
asaewing 2:7581451de520 55 char* rbuffer = new char[1024];
asaewing 2:7581451de520 56 //char* buf = new char[1024];
asaewing 2:7581451de520 57 //int rcount = net_manager->clt_sock.recv(rbuffer, sizeof rbuffer);
asaewing 2:7581451de520 58 int rcount = net_manager->clt_sock.recv(rbuffer, 100);
asaewing 2:7581451de520 59 printf("recv %d [%.*s]\r\n", rcount, strstr(rbuffer, "\r\n")-rbuffer, rbuffer);
asaewing 2:7581451de520 60 delete [] rbuffer;
asaewing 2:7581451de520 61 } else {
asaewing 2:7581451de520 62 DataStorage::_W1_A = 0;
asaewing 2:7581451de520 63 DataStorage::_W1_B = 0;
asaewing 2:7581451de520 64
asaewing 2:7581451de520 65 DataStorage::_W2_A = 0;
asaewing 2:7581451de520 66 DataStorage::_W2_B = 0;
asaewing 2:7581451de520 67
asaewing 2:7581451de520 68 DataStorage::_W3_A = 0;
asaewing 2:7581451de520 69 DataStorage::_W3_B = 0;
asaewing 2:7581451de520 70
asaewing 2:7581451de520 71 DataStorage::_W4_A = 0;
asaewing 2:7581451de520 72 DataStorage::_W4_B = 0;
asaewing 2:7581451de520 73
asaewing 2:7581451de520 74 for (int ii=0;ii<5;ii++){
asaewing 2:7581451de520 75 DataStorage::WM_PWM[ii][0] = 1;
asaewing 2:7581451de520 76 DataStorage::WM_PWM[ii][1] = 0;
asaewing 2:7581451de520 77 }
asaewing 2:7581451de520 78
asaewing 2:7581451de520 79 (DataStorage::_WM_PWM_out01).period(DataStorage::WM_PWM[0][0]);
asaewing 2:7581451de520 80 (DataStorage::_WM_PWM_out02).period(DataStorage::WM_PWM[1][0]);
asaewing 2:7581451de520 81 (DataStorage::_WM_PWM_out03).period(DataStorage::WM_PWM[2][0]);
asaewing 2:7581451de520 82 (DataStorage::_WM_PWM_out04).period(DataStorage::WM_PWM[3][0]);
asaewing 2:7581451de520 83
asaewing 2:7581451de520 84 (DataStorage::_WM_PWM_out01).write(DataStorage::WM_PWM[0][1]);
asaewing 2:7581451de520 85 (DataStorage::_WM_PWM_out02).write(DataStorage::WM_PWM[1][1]);
asaewing 2:7581451de520 86 (DataStorage::_WM_PWM_out03).write(DataStorage::WM_PWM[2][1]);
asaewing 2:7581451de520 87 (DataStorage::_WM_PWM_out04).write(DataStorage::WM_PWM[3][1]);
asaewing 2:7581451de520 88 }
asaewing 2:7581451de520 89
asaewing 2:7581451de520 90 // Close the socket to return its memory and bring down the network interface
asaewing 2:7581451de520 91 net_manager->clt_sock.close();
asaewing 2:7581451de520 92
asaewing 2:7581451de520 93 delete [] sbuffer;
asaewing 2:7581451de520 94
asaewing 2:7581451de520 95 }
asaewing 2:7581451de520 96
asaewing 2:7581451de520 97 void checkServerLoop() {
asaewing 2:7581451de520 98 while (true) {
asaewing 2:7581451de520 99 checkServer();
asaewing 2:7581451de520 100 }
asaewing 2:7581451de520 101 }
asaewing 2:7581451de520 102
asaewing 2:7581451de520 103 void checkServerThread() {
asaewing 2:7581451de520 104 Thread thread_connect;
asaewing 2:7581451de520 105 thread_connect.start(checkServerLoop);
asaewing 2:7581451de520 106 }
asaewing 2:7581451de520 107
asaewing 2:7581451de520 108
asaewing 2:7581451de520 109 bool EventLoop() {
asaewing 2:7581451de520 110 while (true) {
asaewing 2:7581451de520 111 printf("$$ EventLoop New\r\n");
asaewing 2:7581451de520 112
asaewing 2:7581451de520 113 //Thread threadMain01;
asaewing 2:7581451de520 114 //restAPI_manager.changeThread(&threadMain01);
asaewing 2:7581451de520 115
asaewing 2:7581451de520 116 //printf("$$ EventLoop Change Thread\r\n");
asaewing 2:7581451de520 117
asaewing 2:7581451de520 118 LED_NetWait();
asaewing 2:7581451de520 119
asaewing 2:7581451de520 120 printf("$$ EventLoop Waiting\r\n");
asaewing 2:7581451de520 121
asaewing 2:7581451de520 122 net_manager->AcceptEvent();
asaewing 2:7581451de520 123 //printf("$$ EventLoop run Response\r\n");
asaewing 2:7581451de520 124 if (DataStorage::isAccept){
asaewing 2:7581451de520 125 LED_NetProcess();
asaewing 2:7581451de520 126 DataStorage::http_method = net_manager->getHttpMethod();
asaewing 2:7581451de520 127 DataStorage::api_command = net_manager->getApiCommand();
asaewing 2:7581451de520 128 DataStorage::response = restAPI_manager->runCommand(DataStorage::http_method, DataStorage::api_command);
asaewing 2:7581451de520 129 net_manager->SendResponseEvent(DataStorage::response);
asaewing 2:7581451de520 130 } else {
asaewing 2:7581451de520 131 DataStorage::noAcceptCount += 1;
asaewing 2:7581451de520 132 if (DataStorage::noAcceptCount==20) {
asaewing 2:7581451de520 133 DataStorage::noAcceptCount = 0;
asaewing 2:7581451de520 134 checkServer();
asaewing 2:7581451de520 135 }
asaewing 2:7581451de520 136 }
asaewing 2:7581451de520 137
asaewing 2:7581451de520 138 //DataStorage::http_method = net_manager->getHttpMethod();
asaewing 2:7581451de520 139 //DataStorage::api_command = net_manager->getApiCommand();
asaewing 2:7581451de520 140
asaewing 2:7581451de520 141 //DataStorage::response = restAPI_manager->runCommand(DataStorage::http_method, DataStorage::api_command);
asaewing 2:7581451de520 142 //net_manager->SendResponseEvent(DataStorage::response);
asaewing 2:7581451de520 143
asaewing 2:7581451de520 144 DataStorage::isAccept = false;
asaewing 2:7581451de520 145 printf("$$ EventLoop Finish\r\n");
asaewing 2:7581451de520 146 }
asaewing 2:7581451de520 147
asaewing 2:7581451de520 148 //printf("$$ EventLoop ALL Finish\r\n");
asaewing 2:7581451de520 149 return false;
asaewing 2:7581451de520 150 }
asaewing 2:7581451de520 151
asaewing 2:7581451de520 152 void checkIP(){
asaewing 2:7581451de520 153 DigitalIn IP_Select1(PD_7);
asaewing 2:7581451de520 154 DigitalIn IP_Select2(PD_6);
asaewing 2:7581451de520 155
asaewing 2:7581451de520 156 DataStorage::ipSelect = 1;
asaewing 2:7581451de520 157
asaewing 2:7581451de520 158 if (IP_Select1.read() == 1){
asaewing 2:7581451de520 159 DataStorage::ipSelect += 1;
asaewing 2:7581451de520 160 }
asaewing 2:7581451de520 161
asaewing 2:7581451de520 162 if (IP_Select2.read() == 1){
asaewing 2:7581451de520 163 DataStorage::ipSelect += 2;
asaewing 2:7581451de520 164 }
asaewing 2:7581451de520 165
asaewing 2:7581451de520 166 //char* tmp_IP = 0;
asaewing 2:7581451de520 167
asaewing 2:7581451de520 168 switch(DataStorage::ipSelect) {
asaewing 2:7581451de520 169 case 1:
asaewing 2:7581451de520 170 //tmp_IP = IP1;
asaewing 2:7581451de520 171 DataStorage::ipChar = IP1;
asaewing 2:7581451de520 172 break;
asaewing 2:7581451de520 173 case 2:
asaewing 2:7581451de520 174 //tmp_IP = IP2;
asaewing 2:7581451de520 175 DataStorage::ipChar = IP2;
asaewing 2:7581451de520 176 break;
asaewing 2:7581451de520 177 case 3:
asaewing 2:7581451de520 178 //tmp_IP = IP3;
asaewing 2:7581451de520 179 DataStorage::ipChar = IP3;
asaewing 2:7581451de520 180 break;
asaewing 2:7581451de520 181 case 4:
asaewing 2:7581451de520 182 //tmp_IP = IP4;
asaewing 2:7581451de520 183 DataStorage::ipChar = IP4;
asaewing 2:7581451de520 184 break;
asaewing 2:7581451de520 185 }
asaewing 2:7581451de520 186
asaewing 2:7581451de520 187 //std::string tmp_IP_s = intToString(DataStorage::ipSelect);
asaewing 2:7581451de520 188 DataStorage::ipStr = intToString(DataStorage::ipSelect);
asaewing 2:7581451de520 189
asaewing 2:7581451de520 190
asaewing 2:7581451de520 191 net_manager->SetConfig(DataStorage::ipChar, GATEWAY, MASK, PORT);
asaewing 2:7581451de520 192 restAPI_manager->SetConfig(DataStorage::ipChar, DataStorage::ipStr);
asaewing 2:7581451de520 193
asaewing 2:7581451de520 194 printf("mbed %d Start\r\n", DataStorage::ipSelect);
asaewing 2:7581451de520 195
asaewing 2:7581451de520 196 //delete tmp_IP;
asaewing 2:7581451de520 197 }
asaewing 2:7581451de520 198
asaewing 2:7581451de520 199 int netInit(){
asaewing 2:7581451de520 200 net_manager->ServerInit();
asaewing 2:7581451de520 201 printf("ServerInit\r\n");
asaewing 2:7581451de520 202
asaewing 2:7581451de520 203 if (net_manager->OpenServer()) return -1;
asaewing 2:7581451de520 204 printf("OpenServer\r\n");
asaewing 2:7581451de520 205
asaewing 2:7581451de520 206 if (net_manager->BindPort()) return -1;
asaewing 2:7581451de520 207 printf("BindPort\r\n");
asaewing 2:7581451de520 208
asaewing 2:7581451de520 209 if (net_manager->ListenConnections()) return -1;
asaewing 2:7581451de520 210 printf("ListenConnections\r\n");
asaewing 2:7581451de520 211
asaewing 2:7581451de520 212 return 0;
asaewing 2:7581451de520 213 }
asaewing 2:7581451de520 214
asaewing 2:7581451de520 215 void start(){
asaewing 2:7581451de520 216 printf("mbed Power Start\r\n");
asaewing 2:7581451de520 217 LED_PowerStart();
asaewing 2:7581451de520 218
asaewing 2:7581451de520 219 checkIP();
asaewing 2:7581451de520 220 wait(0.5);
asaewing 2:7581451de520 221 netInit();
asaewing 2:7581451de520 222 }
asaewing 2:7581451de520 223 /* Main function */
asaewing 2:7581451de520 224 int main(){
asaewing 2:7581451de520 225 start();
asaewing 2:7581451de520 226
asaewing 2:7581451de520 227 if (EventLoop()) {
asaewing 2:7581451de520 228 return 0;
asaewing 2:7581451de520 229 }
asaewing 2:7581451de520 230 }