|
3 | 3 |
|
4 | 4 | #include "at_handler.h"
|
5 | 5 |
|
| 6 | +#define INCREMENT_MOD(x,MOD) x = (++x) % MOD |
| 7 | + |
6 | 8 | /* -------------------------------------------------------------------------- */
|
7 | 9 | void CAtHandler::add_cmds_wifi_netif() {
|
8 | 10 | /* -------------------------------------------------------------------------- */
|
@@ -258,14 +260,8 @@ void CAtHandler::add_cmds_wifi_netif() {
|
258 | 260 |
|
259 | 261 | srv.continue_read();
|
260 | 262 |
|
261 |
| - //unsigned long start_time = millis(); |
262 | 263 | int sent = 0;
|
263 |
| - //while(millis() - start_time < 5000 && sent < data_received.size()){ |
264 |
| - sent += the_client.client->write(data_received.data() + sent, data_received.size() - sent); |
265 |
| - //if(sent < data_received.size()) |
266 |
| - //delay(100); |
267 |
| - //} |
268 |
| - |
| 264 | + sent += the_client.client->write(data_received.data() + sent, data_received.size() - sent); |
269 | 265 |
|
270 | 266 | if (sent < data_received.size()) {
|
271 | 267 | return chAT::CommandStatus::ERROR;
|
@@ -408,8 +404,7 @@ void CAtHandler::add_cmds_wifi_netif() {
|
408 | 404 | for(int i = 0;i<MAX_CLIENT_AVAILABLE;i++) {
|
409 | 405 | if(serverClients[i].server == sock) {
|
410 | 406 | if(serverClients[i].client) {
|
411 |
| - int sent = 0; |
412 |
| - serverClients[i].client.write(data_received.data() + sent, data_received.size() - sent); |
| 407 | + serverClients[i].client.write(data_received.data(), data_received.size()); |
413 | 408 | }
|
414 | 409 | }
|
415 | 410 | }
|
@@ -489,32 +484,40 @@ void CAtHandler::add_cmds_wifi_netif() {
|
489 | 484 | if(serverWiFi[sock] == nullptr) {
|
490 | 485 | return chAT::CommandStatus::ERROR;
|
491 | 486 | }
|
492 |
| - |
493 |
| - /* accept */ |
494 |
| - |
495 |
| - int i = 0; |
496 |
| - for(;i<MAX_CLIENT_AVAILABLE;i++) { |
| 487 | + /* accept */ |
| 488 | + for(int i = 0;i<MAX_CLIENT_AVAILABLE;i++) { |
497 | 489 | if(!serverClients[i].client) {
|
| 490 | + serverClients[i].client = serverWiFi[sock]->available(); |
| 491 | + serverClients[i].server = sock; |
498 | 492 | break;
|
499 | 493 | }
|
500 | 494 | }
|
501 |
| - if(i < MAX_CLIENT_AVAILABLE) { |
502 |
| - serverClients[i].client = serverWiFi[sock]->available(); |
503 |
| - serverClients[i].server = sock; |
504 |
| - } |
| 495 | + |
| 496 | + int client_sock = -1; |
| 497 | + |
| 498 | + int end = last_server_client_sock; |
505 | 499 |
|
506 |
| - i = 0; |
507 |
| - for(;i<MAX_CLIENT_AVAILABLE;i++) { |
508 |
| - if(serverClients[i].client) { |
509 |
| - srv.write_response_prompt(); |
510 |
| - srv.write_str((const char *) String(START_CLIENT_SERVER_SOCK + i).c_str()); |
511 |
| - srv.write_line_end(); |
512 |
| - return chAT::CommandStatus::OK; |
| 500 | + do { |
| 501 | + if(serverClients[last_server_client_sock].client) { |
| 502 | + client_sock = last_server_client_sock; |
| 503 | + break; |
513 | 504 | }
|
514 |
| - } |
| 505 | + INCREMENT_MOD(last_server_client_sock,MAX_CLIENT_AVAILABLE); |
| 506 | + } while(end != last_server_client_sock); |
515 | 507 |
|
| 508 | + int sock_to_send = -1; |
| 509 | + if(client_sock == -1) { |
| 510 | + last_server_client_sock = 0; |
| 511 | + } |
| 512 | + else { |
| 513 | + last_server_client_sock = client_sock; |
| 514 | + sock_to_send = START_CLIENT_SERVER_SOCK + client_sock; |
| 515 | + } |
| 516 | + |
| 517 | + |
| 518 | + |
516 | 519 | srv.write_response_prompt();
|
517 |
| - srv.write_str((const char *) String(-1).c_str()); |
| 520 | + srv.write_str((const char *) String(sock_to_send).c_str()); |
518 | 521 | srv.write_line_end();
|
519 | 522 | return chAT::CommandStatus::OK;
|
520 | 523 | }
|
@@ -642,7 +645,7 @@ void CAtHandler::add_cmds_wifi_netif() {
|
642 | 645 | srv.write_response_prompt();
|
643 | 646 | srv.write_str((const char *)(results.c_str()));
|
644 | 647 | srv.write_vec8(data_received);
|
645 |
| - srv.write_line_end(); |
| 648 | + |
646 | 649 |
|
647 | 650 | return chAT::CommandStatus::OK;
|
648 | 651 | }
|
|
0 commit comments