| 66 | }; |
| 67 | |
| 68 | static std::vector<Option> |
| 69 | buildModelOptions(NimBLERemoteCharacteristic *pTXChar, std::vector<Option> &deviceSelection) { |
| 70 | std::vector<Option> charOptions; |
| 71 | charOptions.reserve(sizeof(payloads) / sizeof(payloads[0]) + 1); |
| 72 | |
| 73 | for (size_t i = 0; i < sizeof(payloads) / sizeof(payloads[0]); ++i) { |
| 74 | const PayloadDef &pd = payloads[i]; |
| 75 | charOptions.push_back({pd.label, [pTXChar, &deviceSelection, &pd](void) { |
| 76 | bool success = pTXChar->writeValue(pd.data, pd.len, true); |
| 77 | displayTextLine(success ? "Write success!" : "Write failed!"); |
| 78 | delay(UI_READ_DELAY); |
| 79 | std::vector<Option> nextOpts = buildModelOptions(pTXChar, deviceSelection); |
| 80 | loopOptions(nextOpts); |
| 81 | }}); |
| 82 | } |
| 83 | |
| 84 | charOptions.push_back({"Back", [&](void) { |
| 85 | pClient->disconnect(); |
| 86 | scooterDisconnected = true; |
| 87 | delay(CMD_DELAY); |
| 88 | loopOptions(deviceSelection); |
| 89 | }}); |
| 90 | |
| 91 | return charOptions; |
| 92 | } |
| 93 | |
| 94 | BLENinebot::BLENinebot() { setup(); } |
| 95 | BLENinebot::~BLENinebot() { |
no test coverage detected