sforkowany z mirror/meshtastic-firmware
Merge pull request #1519 from meshtastic/LocalConfig
Push of Config-Protos on PhoneAPI initraytac-diy
commit
c3c359c0cb
|
@ -112,7 +112,8 @@ bool PhoneAPI::handleToRadio(const uint8_t *buf, size_t bufLength)
|
||||||
*
|
*
|
||||||
* Our sending states progress in the following sequence (the client app ASSUMES THIS SEQUENCE, DO NOT CHANGE IT):
|
* Our sending states progress in the following sequence (the client app ASSUMES THIS SEQUENCE, DO NOT CHANGE IT):
|
||||||
* STATE_SEND_MY_INFO, // send our my info record
|
* STATE_SEND_MY_INFO, // send our my info record
|
||||||
STATE_SEND_RADIO,
|
* STATE_SEND_GROUPS
|
||||||
|
STATE_SEND_CONFIG,
|
||||||
STATE_SEND_NODEINFO, // states progress in this order as the device sends to to the client
|
STATE_SEND_NODEINFO, // states progress in this order as the device sends to to the client
|
||||||
STATE_SEND_COMPLETE_ID,
|
STATE_SEND_COMPLETE_ID,
|
||||||
STATE_SEND_PACKETS // send packets or debug strings
|
STATE_SEND_PACKETS // send packets or debug strings
|
||||||
|
@ -140,11 +141,52 @@ size_t PhoneAPI::getFromRadio(uint8_t *buf)
|
||||||
myNodeInfo.has_gps = gps && gps->isConnected(); // Update with latest GPS connect info
|
myNodeInfo.has_gps = gps && gps->isConnected(); // Update with latest GPS connect info
|
||||||
fromRadioScratch.which_payloadVariant = FromRadio_my_info_tag;
|
fromRadioScratch.which_payloadVariant = FromRadio_my_info_tag;
|
||||||
fromRadioScratch.my_info = myNodeInfo;
|
fromRadioScratch.my_info = myNodeInfo;
|
||||||
state = STATE_SEND_NODEINFO;
|
state = STATE_SEND_CONFIG;
|
||||||
|
|
||||||
service.refreshMyNodeInfo(); // Update my NodeInfo because the client will be asking for it soon.
|
service.refreshMyNodeInfo(); // Update my NodeInfo because the client will be asking for it soon.
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case STATE_SEND_CONFIG:
|
||||||
|
fromRadioScratch.which_payloadVariant = FromRadio_config_tag;
|
||||||
|
switch (config_state) {
|
||||||
|
case Config_device_tag:
|
||||||
|
fromRadioScratch.config.which_payloadVariant = Config_device_tag;
|
||||||
|
fromRadioScratch.config.payloadVariant.device = config.device;
|
||||||
|
break;
|
||||||
|
case Config_position_tag:
|
||||||
|
fromRadioScratch.config.which_payloadVariant = Config_position_tag;
|
||||||
|
fromRadioScratch.config.payloadVariant.position = config.position;
|
||||||
|
break;
|
||||||
|
case Config_power_tag:
|
||||||
|
fromRadioScratch.config.which_payloadVariant = Config_power_tag;
|
||||||
|
fromRadioScratch.config.payloadVariant.power = config.power;
|
||||||
|
fromRadioScratch.config.payloadVariant.power.ls_secs = default_ls_secs;
|
||||||
|
break;
|
||||||
|
case Config_wifi_tag:
|
||||||
|
fromRadioScratch.config.which_payloadVariant = Config_wifi_tag;
|
||||||
|
fromRadioScratch.config.payloadVariant.wifi = config.wifi;
|
||||||
|
break;
|
||||||
|
case Config_display_tag:
|
||||||
|
fromRadioScratch.config.which_payloadVariant = Config_display_tag;
|
||||||
|
fromRadioScratch.config.payloadVariant.display = config.display;
|
||||||
|
break;
|
||||||
|
case Config_lora_tag:
|
||||||
|
fromRadioScratch.config.which_payloadVariant = Config_lora_tag;
|
||||||
|
fromRadioScratch.config.payloadVariant.lora = config.lora;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE: The phone app needs to know the ls_secs value so it can properly expect sleep behavior.
|
||||||
|
// So even if we internally use 0 to represent 'use default' we still need to send the value we are
|
||||||
|
// using to the app (so that even old phone apps work with new device loads).
|
||||||
|
|
||||||
|
config_state++;
|
||||||
|
// Advance when we have sent all of our config objects
|
||||||
|
if (config_state > Config_lora_tag) {
|
||||||
|
state = STATE_SEND_NODEINFO;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case STATE_SEND_NODEINFO: {
|
case STATE_SEND_NODEINFO: {
|
||||||
const NodeInfo *info = nodeInfoForPhone;
|
const NodeInfo *info = nodeInfoForPhone;
|
||||||
nodeInfoForPhone = NULL; // We just consumed a nodeinfo, will need a new one next time
|
nodeInfoForPhone = NULL; // We just consumed a nodeinfo, will need a new one next time
|
||||||
|
@ -220,6 +262,9 @@ bool PhoneAPI::available()
|
||||||
|
|
||||||
case STATE_SEND_MY_INFO:
|
case STATE_SEND_MY_INFO:
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
case STATE_SEND_CONFIG:
|
||||||
|
return true;
|
||||||
|
|
||||||
case STATE_SEND_NODEINFO:
|
case STATE_SEND_NODEINFO:
|
||||||
if (!nodeInfoForPhone)
|
if (!nodeInfoForPhone)
|
||||||
|
@ -269,4 +314,4 @@ int PhoneAPI::onNotify(uint32_t newValue)
|
||||||
DEBUG_MSG("(Client not yet interested in packets)\n");
|
DEBUG_MSG("(Client not yet interested in packets)\n");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,13 +20,10 @@ class PhoneAPI
|
||||||
: public Observer<uint32_t> // FIXME, we shouldn't be inheriting from Observer, instead use CallbackObserver as a member
|
: public Observer<uint32_t> // FIXME, we shouldn't be inheriting from Observer, instead use CallbackObserver as a member
|
||||||
{
|
{
|
||||||
enum State {
|
enum State {
|
||||||
STATE_UNUSED, // (no longer used) old default state - until Android apps are all updated, uses the old BLE API
|
STATE_SEND_NOTHING, // Initial state, don't send anything until the client starts asking for config
|
||||||
STATE_SEND_NOTHING, // (Eventual) Initial state, don't send anything until the client starts asking for config
|
|
||||||
// (disconnected)
|
|
||||||
STATE_SEND_MY_INFO, // send our my info record
|
STATE_SEND_MY_INFO, // send our my info record
|
||||||
STATE_SEND_GROUPS,
|
STATE_SEND_GROUPS, // new in 1.3?
|
||||||
// STATE_SEND_RADIO, // in 1.2 we now send this as a regular mesh packet
|
STATE_SEND_CONFIG, // Replacement for the old Radioconfig
|
||||||
// STATE_SEND_OWNER, no need to send Owner specially, it is just part of the nodedb
|
|
||||||
STATE_SEND_NODEINFO, // states progress in this order as the device sends to to the client
|
STATE_SEND_NODEINFO, // states progress in this order as the device sends to to the client
|
||||||
STATE_SEND_COMPLETE_ID,
|
STATE_SEND_COMPLETE_ID,
|
||||||
STATE_SEND_PACKETS // send packets or debug strings
|
STATE_SEND_PACKETS // send packets or debug strings
|
||||||
|
@ -34,6 +31,8 @@ class PhoneAPI
|
||||||
|
|
||||||
State state = STATE_SEND_NOTHING;
|
State state = STATE_SEND_NOTHING;
|
||||||
|
|
||||||
|
int8_t config_state = Config_device_tag;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Each packet sent to the phone has an incrementing count
|
* Each packet sent to the phone has an incrementing count
|
||||||
*/
|
*/
|
||||||
|
|
Ładowanie…
Reference in New Issue