Simple HTTP Server with one page index.html stored inside MBED as char vector and javascript to update a table content
Fork of HTTP_SERVER by
HTTP_SERVER.cpp@14:f21da0acc9f6, 2018-05-10 (annotated)
- Committer:
- mmdonatti
- Date:
- Thu May 10 20:24:03 2018 +0000
- Revision:
- 14:f21da0acc9f6
- Parent:
- 10:4a48594c2f44
Simple server GET and POST for one index.html page and javascript
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
aktk | 0:cc483bea4fe3 | 1 | #include "HTTP_SERVER.h" |
mmdonatti | 14:f21da0acc9f6 | 2 | |
aktk | 8:b013075de2e4 | 3 | #ifndef DEBUG |
aktk | 10:4a48594c2f44 | 4 | //#define DEBUG |
aktk | 8:b013075de2e4 | 5 | #endif |
aktk | 1:3a1fe94c6e42 | 6 | |
mmdonatti | 14:f21da0acc9f6 | 7 | //HTML file - with Javascript |
mmdonatti | 14:f21da0acc9f6 | 8 | const char *index_html = "<html><head><title>DCM Heaters Driver</title><link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"http://cnpem.br/wp-content/uploads/2018/01/LNLS_Sirius-02-293x300.png\" />\n\ |
mmdonatti | 14:f21da0acc9f6 | 9 | <script src=\"https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js\"></script></head>\n\ |
mmdonatti | 14:f21da0acc9f6 | 10 | <script language=\"javascript\" type=\"text/javascript\">\n\ |
mmdonatti | 14:f21da0acc9f6 | 11 | function loop(){\n\ |
mmdonatti | 14:f21da0acc9f6 | 12 | $.post(\"read_data\", function(data){\n\ |
mmdonatti | 14:f21da0acc9f6 | 13 | if(data.length >0)\n\ |
mmdonatti | 14:f21da0acc9f6 | 14 | {\n\ |
mmdonatti | 14:f21da0acc9f6 | 15 | var str = data;\n\ |
mmdonatti | 14:f21da0acc9f6 | 16 | var res = str.split(\" \");\n\ |
mmdonatti | 14:f21da0acc9f6 | 17 | if(res.length == 97){\n\ |
mmdonatti | 14:f21da0acc9f6 | 18 | var table = '<div id=\"data_table\">'+\n\ |
mmdonatti | 14:f21da0acc9f6 | 19 | '<table width=\"100%\" border=\"1\" cellpadding=\"3\" cellspacing=\"1\" bgcolor=\"#E3EBFB\">'+\n\ |
mmdonatti | 14:f21da0acc9f6 | 20 | '<tr align=\"center\" valign=\"middle\">'+\n\ |
mmdonatti | 14:f21da0acc9f6 | 21 | '<td width=\"50\" height=\"40\"><strong>Channel</font></strong></td>'+\n\ |
mmdonatti | 14:f21da0acc9f6 | 22 | '<td width=\"96\" height=\"40\"><strong>Voltage (V)</font></strong></td>'+\n\ |
mmdonatti | 14:f21da0acc9f6 | 23 | '<td width=\"96\" height=\"40\"><strong>Current (A)</font></strong></td>'+\n\ |
mmdonatti | 14:f21da0acc9f6 | 24 | '<td width=\"96\" height=\"40\"><strong>Control (%)</font></strong></td>'+\n\ |
mmdonatti | 14:f21da0acc9f6 | 25 | '<td width=\"96\" height=\"40\"><strong>Current Limit (A)</font></strong></td>'+\n\ |
mmdonatti | 14:f21da0acc9f6 | 26 | '<td width=\"96\" height=\"40\"><strong>Failure</font></strong></td>'+\n\ |
mmdonatti | 14:f21da0acc9f6 | 27 | '<td width=\"96\" height=\"40\"><strong>Overload</font></strong></td>'+\n\ |
mmdonatti | 14:f21da0acc9f6 | 28 | '<td width=\"96\" height=\"40\"><strong>No Load</font></strong></td>'+\n\ |
mmdonatti | 14:f21da0acc9f6 | 29 | '<td width=\"96\" height=\"40\"><strong>Enable</font></strong></td></tr>';\n\ |
mmdonatti | 14:f21da0acc9f6 | 30 | for(var i=0;i<8;i++){\n\ |
mmdonatti | 14:f21da0acc9f6 | 31 | table = table + '<tr align=\"center\" valign=\"middle\">'+\n\ |
mmdonatti | 14:f21da0acc9f6 | 32 | '<td width=\"50\" height=\"31\"bgcolor=\"#FFFFFF\"><span style=\"font-weight:bold;\">'+(i+1)+'</span></td>'+\n\ |
mmdonatti | 14:f21da0acc9f6 | 33 | '<td width=\"96\" height=\"28\"bgcolor=\"#FFFFFF\"><span style=\"font-weight:bold;\">'+res[i*12]+'</span></td>'+\n\ |
mmdonatti | 14:f21da0acc9f6 | 34 | '<td width=\"96\" height=\"28\"bgcolor=\"#FFFFFF\"><span style=\"font-weight:bold;\">'+res[i*12+1]+'</span></td>'+\n\ |
mmdonatti | 14:f21da0acc9f6 | 35 | '<td width=\"96\" height=\"28\"bgcolor=\"#FFFFFF\"><span style=\"font-weight:bold;\">'+res[i*12+2]+'</span></td>'+\n\ |
mmdonatti | 14:f21da0acc9f6 | 36 | '<td width=\"96\" height=\"28\"bgcolor=\"#FFFFFF\"><span style=\"font-weight:bold;\">'+res[i*12+3]+'</span></td>'+\n\ |
mmdonatti | 14:f21da0acc9f6 | 37 | '<td width=\"96\" height=\"28\"bgcolor=\"'+res[i*12+4]+'\"><span style=\"font-weight:bold;\">'+res[i*12+5]+'</span></td>'+\n\ |
mmdonatti | 14:f21da0acc9f6 | 38 | '<td width=\"96\" height=\"28\"bgcolor=\"'+res[i*12+6]+'\"><span style=\"font-weight:bold;\">'+res[i*12+7]+'</span></td>'+\n\ |
mmdonatti | 14:f21da0acc9f6 | 39 | '<td width=\"96\" height=\"28\"bgcolor=\"'+res[i*12+8]+'\"><span style=\"font-weight:bold;\">'+res[i*12+9]+'</span></td>'+\n\ |
mmdonatti | 14:f21da0acc9f6 | 40 | '<td width=\"96\" height=\"28\"bgcolor=\"'+res[i*12+10]+'\"><span style=\"font-weight:bold;\">'+res[i*12+11]+'</span></td>'+\n\ |
mmdonatti | 14:f21da0acc9f6 | 41 | '</tr>';\n\ |
mmdonatti | 14:f21da0acc9f6 | 42 | }\n\ |
mmdonatti | 14:f21da0acc9f6 | 43 | table = table + '</table></div>';\n\ |
mmdonatti | 14:f21da0acc9f6 | 44 | document.getElementById(\"data_table\").innerHTML = table;\n\ |
mmdonatti | 14:f21da0acc9f6 | 45 | }}\n\ |
mmdonatti | 14:f21da0acc9f6 | 46 | });\n\ |
mmdonatti | 14:f21da0acc9f6 | 47 | setTimeout(function(){ loop() }, 2000);\n\ |
mmdonatti | 14:f21da0acc9f6 | 48 | }\n\ |
mmdonatti | 14:f21da0acc9f6 | 49 | </script>\n\ |
mmdonatti | 14:f21da0acc9f6 | 50 | <body onLoad=\"loop()\">\n\ |
mmdonatti | 14:f21da0acc9f6 | 51 | <table width=\"100%\"border=\"0\" cellspacing=\"0\" cellpadding=\"0\" style=\"font-weight:normal;\">\n\ |
mmdonatti | 14:f21da0acc9f6 | 52 | <tr>\n\ |
mmdonatti | 14:f21da0acc9f6 | 53 | <td width=\"25%\" height=\"142\" align=\"center\" valign=\"middle\" style=\"border-bottom: #000000 solid 1px;\">\n\ |
mmdonatti | 14:f21da0acc9f6 | 54 | <a href=\"http://www.lnls.cnpem.br/\"><img src=\"http://lnls.cnpem.br/wp-content/themes/lnls-v2/assets/images/logo-header.svg\" alt=\"LNLS\" width=\"305\" height=\"142\" /></a></td>\n\ |
mmdonatti | 14:f21da0acc9f6 | 55 | <td colspan=\"5\" height=\"142\" align=\"center\" scope=\"col\" style=\"border-bottom: #000000 solid 1px;\"><p><span class=\"style7\">DCM HEATERS DRIVER<br /><br/>\n\ |
mmdonatti | 14:f21da0acc9f6 | 56 | <strong>DIAGNOSTICS<br/></strong></span></p>\n\ |
mmdonatti | 14:f21da0acc9f6 | 57 | <p><span class=\"style7\"><strong><em> <a href=\"http://www.lnls.cnpem.br\">LNLS</a></em></strong></span></p></td>\n\ |
mmdonatti | 14:f21da0acc9f6 | 58 | <td width=\"25%\" height=\"142\" align=\"center\" style=\"border-bottom: #000000 solid 1px;\">\n\ |
mmdonatti | 14:f21da0acc9f6 | 59 | <a href=\"http://www.lnls.cnpem.br/grupos/gae/\"><img src=\"http://www.gae.agency/wp-content/uploads/2016/03/Logo_gae_hp_blue.png\" alt=\"GAE\" width=\"305\" height=\"99\" /></a></td>\n\ |
mmdonatti | 14:f21da0acc9f6 | 60 | </tr>\n\ |
mmdonatti | 14:f21da0acc9f6 | 61 | </table>\n<div id=\"data_table\"></div></body></html>\0"; |
mmdonatti | 14:f21da0acc9f6 | 62 | |
mmdonatti | 14:f21da0acc9f6 | 63 | //table colors vector |
mmdonatti | 14:f21da0acc9f6 | 64 | const char *color[] = {"#C8FFC8\0","#FF0000\0"}; |
mmdonatti | 14:f21da0acc9f6 | 65 | |
mmdonatti | 14:f21da0acc9f6 | 66 | int index_html_len; //index with html length |
mmdonatti | 14:f21da0acc9f6 | 67 | |
mmdonatti | 14:f21da0acc9f6 | 68 | char buffer[MAX_BUFFER_SIZE]; //receive and transmit buffer |
mmdonatti | 14:f21da0acc9f6 | 69 | char tmp_buffer[200]; //aux buffer |
mmdonatti | 14:f21da0acc9f6 | 70 | int status_code; //http status code |
mmdonatti | 14:f21da0acc9f6 | 71 | char reason_phrase[30]; //http reason phrase |
mmdonatti | 14:f21da0acc9f6 | 72 | |
mmdonatti | 14:f21da0acc9f6 | 73 | char httpmethod[20]; //http method |
mmdonatti | 14:f21da0acc9f6 | 74 | char filepath[20]; //file requested |
mmdonatti | 14:f21da0acc9f6 | 75 | char http_ver[20]; //http version |
mmdonatti | 14:f21da0acc9f6 | 76 | |
mmdonatti | 14:f21da0acc9f6 | 77 | int idx_buffer; //index buffer |
mmdonatti | 14:f21da0acc9f6 | 78 | |
mmdonatti | 14:f21da0acc9f6 | 79 | //Debug functions |
aktk | 10:4a48594c2f44 | 80 | namespace HTTP_SERVER |
aktk | 10:4a48594c2f44 | 81 | { |
aktk | 1:3a1fe94c6e42 | 82 | void DEBUG_PRINT_LINE(const char* arg_line) |
aktk | 1:3a1fe94c6e42 | 83 | { |
aktk | 1:3a1fe94c6e42 | 84 | #ifdef DEBUG |
aktk | 10:4a48594c2f44 | 85 | printf("(HTTP_SERVER) ") |
aktk | 10:4a48594c2f44 | 86 | printf(arg_line); |
aktk | 10:4a48594c2f44 | 87 | printf("\r\n"); |
aktk | 1:3a1fe94c6e42 | 88 | #endif |
aktk | 1:3a1fe94c6e42 | 89 | } |
aktk | 10:4a48594c2f44 | 90 | template<typename T> |
aktk | 10:4a48594c2f44 | 91 | void DEBUG_PRINT_LINE(const char* arg_line, T arg_t) |
aktk | 10:4a48594c2f44 | 92 | { |
aktk | 10:4a48594c2f44 | 93 | #ifdef DEBUG |
aktk | 10:4a48594c2f44 | 94 | printf("(HTTP_SERVER) "); |
aktk | 10:4a48594c2f44 | 95 | printf(arg_line, arg_t); |
aktk | 10:4a48594c2f44 | 96 | printf("\r\n"); |
aktk | 10:4a48594c2f44 | 97 | #endif |
aktk | 10:4a48594c2f44 | 98 | } |
aktk | 10:4a48594c2f44 | 99 | template<typename T1, typename T2> |
aktk | 10:4a48594c2f44 | 100 | void DEBUG_PRINT_LINE(const char* arg_line, T1 arg_t1, T2 arg_t2) |
aktk | 10:4a48594c2f44 | 101 | { |
aktk | 10:4a48594c2f44 | 102 | #ifdef DEBUG |
aktk | 10:4a48594c2f44 | 103 | printf("(HTTP_SERVER) "); |
aktk | 10:4a48594c2f44 | 104 | printf(arg_line, arg_t1, arg_t2); |
aktk | 10:4a48594c2f44 | 105 | printf("\r\n"); |
aktk | 10:4a48594c2f44 | 106 | #endif |
aktk | 10:4a48594c2f44 | 107 | } |
aktk | 10:4a48594c2f44 | 108 | } |
aktk | 10:4a48594c2f44 | 109 | using namespace HTTP_SERVER; |
aktk | 1:3a1fe94c6e42 | 110 | |
aktk | 0:cc483bea4fe3 | 111 | HttpServer::HttpServer() |
aktk | 0:cc483bea4fe3 | 112 | { |
mmdonatti | 14:f21da0acc9f6 | 113 | buffer[0] = '\0'; //constructor |
aktk | 0:cc483bea4fe3 | 114 | } |
aktk | 0:cc483bea4fe3 | 115 | |
aktk | 0:cc483bea4fe3 | 116 | HttpServer::~HttpServer() |
aktk | 0:cc483bea4fe3 | 117 | { |
aktk | 0:cc483bea4fe3 | 118 | } |
aktk | 0:cc483bea4fe3 | 119 | bool HttpServer::init() |
aktk | 0:cc483bea4fe3 | 120 | { |
aktk | 0:cc483bea4fe3 | 121 | // TCP Socket setup |
aktk | 0:cc483bea4fe3 | 122 | // To open Server-side PORT |
aktk | 0:cc483bea4fe3 | 123 | if(tcpsvr.bind(TCP_PORT)< 0) { |
aktk | 0:cc483bea4fe3 | 124 | return false; |
mmdonatti | 14:f21da0acc9f6 | 125 | } |
mmdonatti | 14:f21da0acc9f6 | 126 | tcpsvr.set_blocking(true,1500); //set blocking socket |
mmdonatti | 14:f21da0acc9f6 | 127 | |
aktk | 0:cc483bea4fe3 | 128 | // Server start listening Request from a web browser. |
mmdonatti | 14:f21da0acc9f6 | 129 | |
mmdonatti | 14:f21da0acc9f6 | 130 | if(tcpsvr.listen(5) < 0) { |
aktk | 0:cc483bea4fe3 | 131 | return false; |
aktk | 0:cc483bea4fe3 | 132 | } |
mmdonatti | 14:f21da0acc9f6 | 133 | |
mmdonatti | 14:f21da0acc9f6 | 134 | index_html_len = strlen(index_html); //calculate string length |
aktk | 0:cc483bea4fe3 | 135 | |
aktk | 0:cc483bea4fe3 | 136 | return true; |
aktk | 0:cc483bea4fe3 | 137 | } |
aktk | 0:cc483bea4fe3 | 138 | |
mmdonatti | 14:f21da0acc9f6 | 139 | bool HttpServer::run(channel *CH) |
mmdonatti | 14:f21da0acc9f6 | 140 | { |
mmdonatti | 14:f21da0acc9f6 | 141 | if(tcpsvr.accept(tcpcon) < 0) { |
mmdonatti | 14:f21da0acc9f6 | 142 | //printf("(HTTP_SERVER) failed to accept connection.\r\n"); |
mmdonatti | 14:f21da0acc9f6 | 143 | return -1; |
mmdonatti | 14:f21da0acc9f6 | 144 | } |
mmdonatti | 14:f21da0acc9f6 | 145 | // When conected |
mmdonatti | 14:f21da0acc9f6 | 146 | while(tcpcon.is_connected()) |
mmdonatti | 14:f21da0acc9f6 | 147 | { |
mmdonatti | 14:f21da0acc9f6 | 148 | tcpcon.set_blocking(false,100); |
mmdonatti | 14:f21da0acc9f6 | 149 | // |
mmdonatti | 14:f21da0acc9f6 | 150 | // Request Analysis |
mmdonatti | 14:f21da0acc9f6 | 151 | // |
mmdonatti | 14:f21da0acc9f6 | 152 | |
mmdonatti | 14:f21da0acc9f6 | 153 | DEBUG_PRINT_LINE("DEBUG MODE"); |
mmdonatti | 14:f21da0acc9f6 | 154 | switch(tcpcon.receive(buffer, 1023)) { |
mmdonatti | 14:f21da0acc9f6 | 155 | case 0: |
mmdonatti | 14:f21da0acc9f6 | 156 | //DEBUG_PRINT_LINE("received buffer is empty."); |
mmdonatti | 14:f21da0acc9f6 | 157 | status_code = 400; |
mmdonatti | 14:f21da0acc9f6 | 158 | sprintf(reason_phrase,"No Request\0"); |
mmdonatti | 14:f21da0acc9f6 | 159 | httpmethod[0] = '\0'; |
mmdonatti | 14:f21da0acc9f6 | 160 | filepath[0] = '\0'; |
mmdonatti | 14:f21da0acc9f6 | 161 | http_ver[0] = '\0'; |
mmdonatti | 14:f21da0acc9f6 | 162 | break; |
mmdonatti | 14:f21da0acc9f6 | 163 | case -1: |
mmdonatti | 14:f21da0acc9f6 | 164 | DEBUG_PRINT_LINE("failed to read data from client."); |
mmdonatti | 14:f21da0acc9f6 | 165 | status_code = 500; |
mmdonatti | 14:f21da0acc9f6 | 166 | sprintf(reason_phrase,"Internal Server Error\0"); |
mmdonatti | 14:f21da0acc9f6 | 167 | httpmethod[0] = '\0'; |
mmdonatti | 14:f21da0acc9f6 | 168 | filepath[0] = '\0'; |
mmdonatti | 14:f21da0acc9f6 | 169 | http_ver[0] = '\0'; |
mmdonatti | 14:f21da0acc9f6 | 170 | break; |
mmdonatti | 14:f21da0acc9f6 | 171 | default: |
mmdonatti | 14:f21da0acc9f6 | 172 | DEBUG_PRINT_LINE("Received Data: %d",strlen(buffer)); |
mmdonatti | 14:f21da0acc9f6 | 173 | DEBUG_PRINT_LINE("-->\r\n"); |
mmdonatti | 14:f21da0acc9f6 | 174 | DEBUG_PRINT_LINE("%.*s[End of Request]",strlen(buffer),buffer); |
mmdonatti | 14:f21da0acc9f6 | 175 | // get HTTP method, File path, HTTP version |
mmdonatti | 14:f21da0acc9f6 | 176 | sprintf(httpmethod,strtok(buffer," ")); |
mmdonatti | 14:f21da0acc9f6 | 177 | filepath[0] = '\0'; |
mmdonatti | 14:f21da0acc9f6 | 178 | sprintf(http_ver,"HTTP/1.1\0"); |
mmdonatti | 14:f21da0acc9f6 | 179 | DEBUG_PRINT_LINE("httpmethod: %s", httpmethod); |
mmdonatti | 14:f21da0acc9f6 | 180 | DEBUG_PRINT_LINE("file path: %s", filepath); |
mmdonatti | 14:f21da0acc9f6 | 181 | DEBUG_PRINT_LINE("http ver : %s", http_ver); |
mmdonatti | 14:f21da0acc9f6 | 182 | break; |
aktk | 0:cc483bea4fe3 | 183 | } |
mmdonatti | 14:f21da0acc9f6 | 184 | |
mmdonatti | 14:f21da0acc9f6 | 185 | if (httpmethod[0] == '\0') { |
mmdonatti | 14:f21da0acc9f6 | 186 | buffer[MAX_BUFFER_SIZE - 1] = '\0'; |
mmdonatti | 14:f21da0acc9f6 | 187 | sprintf(buffer,"%s %d %s\r\nConnection: Close\r\n\r\n\0", http_ver, status_code, reason_phrase); |
mmdonatti | 14:f21da0acc9f6 | 188 | DEBUG_PRINT_LINE("echo back done."); |
mmdonatti | 14:f21da0acc9f6 | 189 | break; |
mmdonatti | 14:f21da0acc9f6 | 190 | } |
mmdonatti | 14:f21da0acc9f6 | 191 | |
mmdonatti | 14:f21da0acc9f6 | 192 | // Response |
mmdonatti | 14:f21da0acc9f6 | 193 | if (strcmp(httpmethod,"GET") == 0 ) //GET request - always index.html stoed in index_html |
mmdonatti | 14:f21da0acc9f6 | 194 | { |
mmdonatti | 14:f21da0acc9f6 | 195 | DEBUG_PRINT_LINE("GET request incomming."); |
mmdonatti | 14:f21da0acc9f6 | 196 | |
mmdonatti | 14:f21da0acc9f6 | 197 | buffer[MAX_BUFFER_SIZE-1] = '\0'; |
mmdonatti | 14:f21da0acc9f6 | 198 | status_code = 200; |
mmdonatti | 14:f21da0acc9f6 | 199 | sprintf(reason_phrase,"OK\0"); |
aktk | 1:3a1fe94c6e42 | 200 | |
mmdonatti | 14:f21da0acc9f6 | 201 | sprintf(buffer,"%s %d %s\r\nConnection: Close\r\nContent-Type: text/html\r\nKeep-Alive: timeout=15\r\n\r\n\0", http_ver, status_code, reason_phrase); |
mmdonatti | 14:f21da0acc9f6 | 202 | tcpcon.send_all(buffer,strlen(buffer)); |
mmdonatti | 14:f21da0acc9f6 | 203 | tcpcon.send_all((char*)index_html,index_html_len); |
mmdonatti | 14:f21da0acc9f6 | 204 | |
mmdonatti | 14:f21da0acc9f6 | 205 | break; |
mmdonatti | 14:f21da0acc9f6 | 206 | } |
mmdonatti | 14:f21da0acc9f6 | 207 | if (strcmp(httpmethod,"POST") == 0 ) //POST request - javascript request |
mmdonatti | 14:f21da0acc9f6 | 208 | { |
mmdonatti | 14:f21da0acc9f6 | 209 | DEBUG_PRINT_LINE("POST request incomming."); |
mmdonatti | 14:f21da0acc9f6 | 210 | status_code = 200; |
mmdonatti | 14:f21da0acc9f6 | 211 | sprintf(reason_phrase,"OK\0"); |
mmdonatti | 14:f21da0acc9f6 | 212 | |
mmdonatti | 14:f21da0acc9f6 | 213 | sprintf(buffer,"%s %d %s\r\nConnection: Close\r\n\r\n\0", http_ver, status_code, reason_phrase); |
aktk | 0:cc483bea4fe3 | 214 | |
mmdonatti | 14:f21da0acc9f6 | 215 | for(idx_buffer=0;idx_buffer<=7;idx_buffer++) |
mmdonatti | 14:f21da0acc9f6 | 216 | { |
mmdonatti | 14:f21da0acc9f6 | 217 | sprintf(tmp_buffer,"%4.2f %3.2f %d %3.2f %s %d %s %d %s %d %s %d \0",CH[idx_buffer].voltage,CH[idx_buffer].current,CH[idx_buffer].control,CH[idx_buffer].limit,\ |
mmdonatti | 14:f21da0acc9f6 | 218 | color[CH[idx_buffer].failure>0],CH[idx_buffer].failure,\ |
mmdonatti | 14:f21da0acc9f6 | 219 | color[CH[idx_buffer].overload>ERROR_REP],CH[idx_buffer].overload>ERROR_REP,\ |
mmdonatti | 14:f21da0acc9f6 | 220 | color[CH[idx_buffer].noload>ERROR_REP],CH[idx_buffer].noload>ERROR_REP,\ |
mmdonatti | 14:f21da0acc9f6 | 221 | color[CH[idx_buffer].enable==0],CH[idx_buffer].enable); |
mmdonatti | 14:f21da0acc9f6 | 222 | strcat(buffer,tmp_buffer); |
aktk | 0:cc483bea4fe3 | 223 | |
mmdonatti | 14:f21da0acc9f6 | 224 | } |
mmdonatti | 14:f21da0acc9f6 | 225 | tcpcon.send_all(buffer,strlen(buffer)); |
mmdonatti | 14:f21da0acc9f6 | 226 | break; |
mmdonatti | 14:f21da0acc9f6 | 227 | |
aktk | 0:cc483bea4fe3 | 228 | |
mmdonatti | 14:f21da0acc9f6 | 229 | } |
aktk | 0:cc483bea4fe3 | 230 | } |
mmdonatti | 14:f21da0acc9f6 | 231 | tcpcon.close(); //always close the connection |
aktk | 0:cc483bea4fe3 | 232 | return 0; |
aktk | 0:cc483bea4fe3 | 233 | } |