| 445 | } |
| 446 | |
| 447 | bool onCommandCallback(improv::ImprovCommand cmd) { |
| 448 | switch (cmd.command) { |
| 449 | case improv::Command::GET_CURRENT_STATE: { |
| 450 | if ((WiFi.status() == WL_CONNECTED)) { |
| 451 | set_state(improv::State::STATE_PROVISIONED); |
| 452 | std::vector<uint8_t> data = improv::build_rpc_response(improv::GET_CURRENT_STATE, getLocalUrl(), false); |
| 453 | send_response(data); |
| 454 | } else { |
| 455 | set_state(improv::State::STATE_AUTHORIZED); |
| 456 | } |
| 457 | break; |
| 458 | } |
| 459 | |
| 460 | case improv::Command::WIFI_SETTINGS: { |
| 461 | if (cmd.ssid.length() == 0) { |
| 462 | set_error(improv::Error::ERROR_INVALID_RPC); |
| 463 | break; |
| 464 | } |
| 465 | |
| 466 | set_state(improv::STATE_PROVISIONING); |
| 467 | |
| 468 | ws.enable(false); |
| 469 | refreshAllPending(); |
| 470 | saveDB("/current/tagDB.json"); |
| 471 | ws.closeAll(); |
| 472 | delay(100); |
| 473 | if (wm.connectToWifi(String(cmd.ssid.c_str()), String(cmd.password.c_str()), true)) { |
| 474 | Preferences preferences; |
| 475 | preferences.begin("wifi", false); |
| 476 | preferences.putString("ssid", cmd.ssid.c_str()); |
| 477 | preferences.putString("pw", cmd.password.c_str()); |
| 478 | preferences.end(); |
| 479 | ws.enable(true); |
| 480 | |
| 481 | set_state(improv::STATE_PROVISIONED); |
| 482 | std::vector<uint8_t> data = improv::build_rpc_response(improv::WIFI_SETTINGS, getLocalUrl(), false); |
| 483 | send_response(data); |
| 484 | } else { |
| 485 | set_state(improv::STATE_STOPPED); |
| 486 | set_error(improv::Error::ERROR_UNABLE_TO_CONNECT); |
| 487 | } |
| 488 | |
| 489 | break; |
| 490 | } |
| 491 | |
| 492 | case improv::Command::GET_DEVICE_INFO: { |
| 493 | std::vector<std::string> infos = { |
| 494 | // Firmware name |
| 495 | "OpenEPaperLink", |
| 496 | // Firmware version |
| 497 | STR(BUILD_VERSION), |
| 498 | // Hardware chip/variant |
| 499 | STR(BUILD_ENV_NAME), |
| 500 | // Device name |
| 501 | "Access Point"}; |
| 502 | std::vector<uint8_t> data = improv::build_rpc_response(improv::GET_DEVICE_INFO, infos, false); |
| 503 | send_response(data); |
| 504 | break; |
nothing calls this directly
no test coverage detected