2019-06-05

Dependencies:   DataStorage NetworkManager IR_Manager WheelManager RestAPI_Manager

Committer:
asaewing
Date:
Wed Jun 05 07:57:11 2019 +0000
Revision:
5:aaab7ef5dccf
Parent:
4:acd433b7ecd7
1.0

Who changed what in which revision?

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