wifi & lmic loops restructured
This commit is contained in:
parent
bf14b061b7
commit
19b9e4d721
@ -11,9 +11,9 @@
|
||||
|
||||
; ---> SELECT TARGET PLATFORM HERE! <---
|
||||
[platformio]
|
||||
env_default = heltec_wifi_lora_32
|
||||
;env_default = heltec_wifi_lora_32
|
||||
;env_default = ttgov1
|
||||
;env_default = ttgov2
|
||||
env_default = ttgov2
|
||||
;env_default = lopy
|
||||
;env_default = lopy4
|
||||
;env_default = lolin32lite_lora
|
||||
|
@ -109,7 +109,7 @@ void printKeys(void) {
|
||||
|
||||
void do_send(osjob_t* j){
|
||||
uint8_t mydata[4];
|
||||
uint16_t data;
|
||||
|
||||
// Sum of unique WIFI MACs seen
|
||||
mydata[0] = (macs_wifi & 0xff00) >> 8;
|
||||
mydata[1] = macs_wifi & 0xff;
|
||||
@ -123,12 +123,6 @@ void do_send(osjob_t* j){
|
||||
mydata[3] = 0;
|
||||
#endif
|
||||
|
||||
// Total BLE+WIFI unique MACs seen
|
||||
// TBD ?
|
||||
//data = (uint16_t) macs.size();
|
||||
//mydata[4] = (macs_total & 0xff00) >> 8;
|
||||
//mydata[5] = macs_total & 0xff;
|
||||
|
||||
// Check if there is not a current TX/RX job running
|
||||
if (LMIC.opmode & OP_TXRXPEND) {
|
||||
ESP_LOGI(TAG, "OP_TXRXPEND, not sending");
|
||||
@ -138,10 +132,18 @@ void do_send(osjob_t* j){
|
||||
LMIC_setTxData2(1, mydata, sizeof(mydata), (cfg.countermode & 0x02));
|
||||
ESP_LOGI(TAG, "Packet queued");
|
||||
sprintf(display_lmic, "PACKET QUEUED");
|
||||
// clear counter if not in cumulative counter mode
|
||||
if (cfg.countermode != 1) {
|
||||
reset_counters(); // clear macs container and reset all counters
|
||||
reset_salt(); // get new salt for salting hashes
|
||||
}
|
||||
// Next TX is scheduled after TX_COMPLETE event.
|
||||
}
|
||||
|
||||
// Schedule next transmission
|
||||
os_setTimedCallback(&sendjob, os_getTime()+sec2osticks(SEND_SECS * 2), do_send);
|
||||
|
||||
} // do_send()
|
||||
|
||||
void onEvent (ev_t ev) {
|
||||
char buff[24]="";
|
||||
|
||||
@ -161,8 +163,10 @@ void onEvent (ev_t ev) {
|
||||
case EV_REJOIN_FAILED: strcpy_P(buff, PSTR("REJOIN FAILED")); break;
|
||||
|
||||
case EV_JOINED:
|
||||
|
||||
joinstate=true;
|
||||
strcpy_P(buff, PSTR("JOINED"));
|
||||
sprintf(display_lora, ""); // erase "Join Wait" message from display
|
||||
|
||||
// Disable link check validation (automatically enabled
|
||||
// during join, but not supported by TTN at this time).
|
||||
LMIC_setLinkCheckMode(0);
|
||||
@ -170,26 +174,21 @@ void onEvent (ev_t ev) {
|
||||
LMIC_setAdrMode(cfg.adrmode);
|
||||
// Set data rate and transmit power (note: txpower seems to be ignored by the library)
|
||||
switch_lora(cfg.lorasf,cfg.txpower);
|
||||
joinstate=true;
|
||||
|
||||
// show effective LoRa parameters after join
|
||||
ESP_LOGI(TAG, "ADR=%i, SF=%i, TXPOWER=%i", cfg.adrmode, cfg.lorasf, cfg.txpower);
|
||||
break;
|
||||
|
||||
case EV_TXCOMPLETE:
|
||||
ESP_LOGI(TAG, "EV_TXCOMPLETE (includes waiting for RX windows)");
|
||||
if (LMIC.txrxFlags & TXRX_ACK) {
|
||||
ESP_LOGI(TAG, "Received ack");
|
||||
sprintf(display_lmic, "RECEIVED ACK");
|
||||
|
||||
} else {
|
||||
sprintf(display_lmic, "TX COMPLETE");
|
||||
}
|
||||
strcpy_P(buff, (LMIC.txrxFlags & TXRX_ACK) ? PSTR("RECEIVED ACK") : PSTR("TX COMPLETE"));
|
||||
sprintf(display_lora, ""); // erase previous LoRa message from display
|
||||
|
||||
if (LMIC.dataLen) {
|
||||
ESP_LOGI(TAG, "Received %d bytes of payload", LMIC.dataLen);
|
||||
sprintf(display_lora, "Rcvd %d bytes", LMIC.dataLen);
|
||||
|
||||
ESP_LOGI(TAG, "Received %d bytes of payload, RSSI %d SNR %d", LMIC.dataLen, LMIC.rssi, (signed char)LMIC.snr / 4);
|
||||
// LMIC.snr = SNR twos compliment [dB] * 4
|
||||
// LMIC.rssi = RSSI [dBm] (-196...+63)
|
||||
sprintf(display_lmic, "RSSI %d SNR %d", LMIC.rssi, (signed char)LMIC.snr / 4 );
|
||||
sprintf(display_lora, "RSSI %d SNR %d", LMIC.rssi, (signed char)LMIC.snr / 4 );
|
||||
|
||||
// check if payload received on command port, then call remote command interpreter
|
||||
if ( (LMIC.txrxFlags & TXRX_PORT) && (LMIC.frame[LMIC.dataBeg-1] == RCMDPORT ) ) {
|
||||
@ -203,6 +202,7 @@ void onEvent (ev_t ev) {
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default: sprintf_P(buff, PSTR("UNKNOWN EVENT %d"), ev); break;
|
||||
}
|
||||
|
||||
@ -212,6 +212,5 @@ void onEvent (ev_t ev) {
|
||||
sprintf(display_lmic, buff);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
} // onEvent()
|
||||
|
||||
|
63
src/main.cpp
63
src/main.cpp
@ -142,14 +142,33 @@ void lorawan_loop(void * pvParameters) {
|
||||
|
||||
configASSERT( ( ( uint32_t ) pvParameters ) == 1 ); // FreeRTOS check
|
||||
|
||||
static uint16_t lorawait = 0;
|
||||
|
||||
while(1) {
|
||||
|
||||
// execute LMIC jobs
|
||||
os_runloop_once();
|
||||
|
||||
// indicate LMIC state on LEDs if present
|
||||
#if (HAS_LED != NOT_A_PIN) || defined (HAS_RGB_LED)
|
||||
led_loop();
|
||||
#endif
|
||||
|
||||
/*
|
||||
// check if payload is sent
|
||||
while(LMIC.opmode & OP_TXRXPEND) {
|
||||
if(!lorawait)
|
||||
sprintf(display_lora, "LoRa wait");
|
||||
lorawait++;
|
||||
// in case sending really fails: reset LMIC and rejoin network
|
||||
if( (lorawait % MAXLORARETRY ) == 0) {
|
||||
ESP_LOGI(TAG, "Payload not sent, resetting LMIC and rejoin");
|
||||
lorawait = 0;
|
||||
LMIC_reset(); // Reset the MAC state. Session and pending data transfers will be discarded.
|
||||
};
|
||||
vTaskDelay(1000/portTICK_PERIOD_MS);
|
||||
yield();
|
||||
}
|
||||
*/
|
||||
vTaskDelay(10/portTICK_PERIOD_MS);
|
||||
yield();
|
||||
}
|
||||
@ -192,49 +211,15 @@ void sniffer_loop(void * pvParameters) {
|
||||
|
||||
configASSERT( ( ( uint32_t ) pvParameters ) == 1 ); // FreeRTOS check
|
||||
|
||||
char buff[16];
|
||||
int nloop=0, lorawait=0;
|
||||
|
||||
while (1) {
|
||||
|
||||
nloop++; // actual number of wifi loops, controls cycle when data is sent
|
||||
|
||||
channel = (channel % WIFI_CHANNEL_MAX) + 1; // rotates variable channel 1..WIFI_CHANNEL_MAX
|
||||
for (channel = 1; channel <= WIFI_CHANNEL_MAX; channel++) {
|
||||
// rotates variable channel 1..WIFI_CHANNEL_MAX
|
||||
wifi_sniffer_set_channel(channel);
|
||||
ESP_LOGD(TAG, "Wifi set channel %d", channel);
|
||||
|
||||
// duration of one wifi scan loop reached? then send data and begin new scan cycle
|
||||
if ( nloop >= ( (100 / cfg.wifichancycle) * (cfg.wifiscancycle * 2)) +1 ) {
|
||||
|
||||
nloop=0; channel=0; // reset wifi scan + channel loop counter
|
||||
do_send(&sendjob); // Prepare and execute LoRaWAN data upload
|
||||
|
||||
// clear counter if not in cumulative counter mode
|
||||
if (cfg.countermode != 1) {
|
||||
reset_counters(); // clear macs container and reset all counters
|
||||
reset_salt(); // get new salt for salting hashes
|
||||
}
|
||||
|
||||
// check if payload is sent
|
||||
lorawait = 0;
|
||||
while(LMIC.opmode & OP_TXRXPEND) {
|
||||
if(!lorawait)
|
||||
sprintf(display_lora, "LoRa wait");
|
||||
lorawait++;
|
||||
// in case sending really fails: reset and rejoin network
|
||||
if( (lorawait % MAXLORARETRY ) == 0) {
|
||||
ESP_LOGI(TAG, "Payload not sent, trying reset and rejoin");
|
||||
esp_restart();
|
||||
};
|
||||
vTaskDelay(1000/portTICK_PERIOD_MS);
|
||||
yield();
|
||||
}
|
||||
sprintf(display_lora, ""); // clear LoRa wait message fromd display
|
||||
|
||||
} // end of send data cycle
|
||||
|
||||
vTaskDelay(cfg.wifichancycle*10 / portTICK_PERIOD_MS);
|
||||
yield();
|
||||
}
|
||||
|
||||
} // end of infinite wifi channel rotation loop
|
||||
}
|
||||
@ -556,7 +541,9 @@ ESP_LOGI(TAG, "Features %s", features);
|
||||
#endif
|
||||
|
||||
os_init(); // setup LMIC
|
||||
LMIC_reset(); // Reset the MAC state. Session and pending data transfers will be discarded.
|
||||
os_setCallback(&initjob, lora_init); // setup initial job & join network
|
||||
|
||||
wifi_sniffer_init(); // setup wifi in monitor mode and start MAC counting
|
||||
|
||||
// initialize salt value using esp_random() called by random() in arduino-esp32 core
|
||||
|
@ -1,6 +1,6 @@
|
||||
|
||||
// program version - note: increment version after modifications to configData_t struct!!
|
||||
#define PROGVERSION "1.3.22" // use max 10 chars here!
|
||||
#define PROGVERSION "1.3.23" // use max 10 chars here!
|
||||
#define PROGNAME "PAXCNT"
|
||||
|
||||
//--- Declarations ---
|
||||
|
@ -32,9 +32,9 @@
|
||||
#define WIFI_MY_COUNTRY "EU" // select locale for Wifi RF settings
|
||||
#define WIFI_CHANNEL_SWITCH_INTERVAL 50 // [seconds/100] -> 0,5 sec.
|
||||
|
||||
// LoRa payload send cycle
|
||||
#define SEND_SECS 120 // [seconds/2] -> 240 sec.
|
||||
//#define SEND_SECS 30 // [seconds/2] -> 60 sec.
|
||||
// LoRa payload send cycle --> take care of duty cycle of LoRaWAN network! <--
|
||||
//#define SEND_SECS 120 // [seconds/2] -> 240 sec.
|
||||
#define SEND_SECS 30 // [seconds/2] -> 60 sec.
|
||||
|
||||
// Default LoRa Spreadfactor
|
||||
#define LORASFDEFAULT 9 // 7 ... 12 SF, according to LoRaWAN specs
|
||||
|
Loading…
Reference in New Issue
Block a user