add wifi channel map configuration option

This commit is contained in:
cyberman54 2023-04-28 17:24:12 +02:00
parent 166b438faf
commit a52a087fb9
7 changed files with 32 additions and 10 deletions

View File

@ -111,6 +111,11 @@ Send for example `83` `86` as Downlink on Port 2 to get battery status and time/
0 ... 100 percentage of luminosity (100% = full light)
e.g. 50 -> 50% of luminosity [default]
#### 0x11 set Wifi scanner channel map bitmask
bytes 1..2 = wifi channel map bitmask (MSB), 0..8191
e.g. 0b1010000001001 sets channels 1, 4, 11, 13
#### 0x13 set user sensor mode
byte 1 = user sensor number (1..3)

View File

@ -66,6 +66,7 @@ typedef struct __attribute__((packed)) {
uint16_t sleepcycle; // sleep cycle [seconds/10]
uint16_t wakesync; // time window [seconds] to sync wakeup on top-of-hour
uint8_t wifichancycle; // wifi channel switch cycle [seconds/100]
uint16_t wifichanmap; // wifi channel hopping scheme
uint8_t blescantime; // BLE scan cycle duration [seconds]
uint8_t blescan; // 0=disabled, 1=enabled
uint8_t wifiscan; // 0=disabled, 1=enabled

View File

@ -40,6 +40,7 @@ static void defaultConfig(configData_t *myconfig) {
myconfig->wakesync = SYNCWAKEUP; // wakeup sync window [seconds]
myconfig->wifichancycle =
WIFI_CHANNEL_SWITCH_INTERVAL; // wifi channel switch cycle [seconds/100]
myconfig->wifichanmap = WIFI_CHANNEL_MAP; // wifi channel hopping scheme
myconfig->blescantime =
BLESCANINTERVAL /
10; // BT channel scan cycle [seconds/100], default 1 (= 10ms)

View File

@ -282,7 +282,7 @@ void setup() {
// configure WIFI sniffing
strcpy(configuration.wifi_my_country_str, WIFI_MY_COUNTRY);
configuration.wificounter = cfg.wifiscan;
configuration.wifi_channel_map = WIFI_CHANNEL_ALL;
configuration.wifi_channel_map = cfg.wifichanmap;
configuration.wifi_channel_switch_interval = cfg.wifichancycle;
configuration.wifi_rssi_threshold = cfg.rssilimit;
ESP_LOGI(TAG, "WIFISCAN: %s", cfg.wifiscan ? "on" : "off");

View File

@ -53,6 +53,7 @@
// WiFi scan parameters
#define WIFI_MY_COUNTRY "01" // select 2-letter locale for Wifi RF settings, e.g. "DE"; use "01" for world safe mode
#define WIFI_CHANNEL_SWITCH_INTERVAL 50 // [seconds/100] -> 0,5 sec.
#define WIFI_CHANNEL_MAP WIFI_CHANNEL_ALL // possible values see libpax_api.h
// LoRa payload default parameters
#define MEM_LOW 2048 // [Bytes] low memory threshold triggering a send cycle

View File

@ -44,6 +44,7 @@ void PayloadConvert::addConfig(configData_t value) {
buffer[cursor++] = lowByte(value.rssilimit);
buffer[cursor++] = value.sendcycle;
buffer[cursor++] = value.wifichancycle;
//buffer[cursor++] = value.wifichanmap;
buffer[cursor++] = value.blescantime;
buffer[cursor++] = value.blescan;
buffer[cursor++] = value.wifiant;
@ -170,6 +171,7 @@ void PayloadConvert::addConfig(configData_t value) {
writeUint16(value.rssilimit);
writeUint8(value.sendcycle);
writeUint8(value.wifichancycle);
//writeUint8(value.wifichanmap);
writeUint8(value.blescantime);
writeUint16(value.sleepcycle);
writeBitmap(value.adrmode ? true : false, value.screensaver ? true : false,

View File

@ -106,6 +106,17 @@ void set_wifichancycle(uint8_t val[]) {
init_libpax();
}
void set_wifichanmap(uint8_t val[]) {
// swap byte order from msb to lsb, note: this is a platform dependent hack
cfg.wifichanmap = __builtin_bswap16(*(uint16_t *)(val));
libpax_counter_stop();
libpax_config_t current_config;
libpax_get_current_config(&current_config);
current_config.wifi_channel_map = cfg.wifichanmap;
libpax_update_config(&current_config);
init_libpax();
}
void set_blescantime(uint8_t val[]) {
cfg.blescantime = val[0];
libpax_counter_stop();
@ -406,15 +417,16 @@ static const cmd_t table[] = {
{0x0b, set_wifichancycle, 1}, {0x0c, set_blescantime, 1},
{0x0d, set_wakesync, 2}, {0x0e, set_blescan, 1},
{0x0f, set_wifiant, 1}, {0x10, set_rgblum, 1},
{0x13, set_sensor, 2}, {0x14, set_payloadmask, 1},
{0x15, set_bme, 1}, {0x16, set_batt, 1},
{0x17, set_wifiscan, 1}, {0x18, set_flush, 0},
{0x19, set_sleepcycle, 2}, {0x20, set_loadconfig, 0},
{0x21, set_saveconfig, 0}, {0x80, get_config, 0},
{0x81, get_status, 0}, {0x83, get_batt, 0},
{0x84, get_gps, 0}, {0x85, get_bme, 0},
{0x86, get_time, 0}, {0x87, set_timesync, 0},
{0x88, set_time, 4}, {0x99, set_flush, 0}};
{0x11, set_wifichanmap, 2}, {0x13, set_sensor, 2},
{0x14, set_payloadmask, 1}, {0x15, set_bme, 1},
{0x16, set_batt, 1}, {0x17, set_wifiscan, 1},
{0x18, set_flush, 0}, {0x19, set_sleepcycle, 2},
{0x20, set_loadconfig, 0}, {0x21, set_saveconfig, 0},
{0x80, get_config, 0}, {0x81, get_status, 0},
{0x83, get_batt, 0}, {0x84, get_gps, 0},
{0x85, get_bme, 0}, {0x86, get_time, 0},
{0x87, set_timesync, 0}, {0x88, set_time, 4},
{0x99, set_flush, 0}};
static const uint8_t cmdtablesize =
sizeof(table) / sizeof(table[0]); // number of commands in command table