Browse Source

code cleanup

pull/2568/head
Christos Themelis 6 months ago
parent
commit
e9685941a5
  1. 41
      src/helpers/esp32/ESPNOWRadio.cpp
  2. 1
      variants/elecrow_espnow/platformio.ini

41
src/helpers/esp32/ESPNOWRadio.cpp

@ -3,6 +3,7 @@
#include <WiFi.h>
#include <esp_wifi.h>
#ifdef CLIENT_WITHOUT_LORA
static constexpr uint16_t BRIDGE_PACKET_MAGIC = 0xC03E;
static const size_t MAX_ESPNOW_PACKET_SIZE = 250;
/**
@ -25,12 +26,6 @@ static uint8_t rx_buf[256];
static uint8_t last_rx_len = 0;
static char bridge_secret[16];
// callback when data is sent
static void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
is_send_complete = true;
ESPNOW_DEBUG_PRINTLN("Send Status: %d", (int)status);
}
static void xorCrypt(uint8_t *data, size_t len) {
size_t keyLen = strlen(bridge_secret);
for (size_t i = 0; i < len; i++) {
@ -54,9 +49,18 @@ static bool validateChecksum(const uint8_t *data, size_t len, uint16_t received_
return received_checksum == calculated_checksum;
}
#endif
// callback when data is sent
static void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
is_send_complete = true;
ESPNOW_DEBUG_PRINTLN("Send Status: %d", (int)status);
}
static void OnDataRecv(const uint8_t *mac, const uint8_t *data, int len) {
ESPNOW_DEBUG_PRINTLN("Recv: len = %d", len);
#ifdef CLIENT_WITHOUT_LORA
if (len < 4) return;
uint16_t magic = (data[0] << 8) | data[1];
@ -75,12 +79,18 @@ static void OnDataRecv(const uint8_t *mac, const uint8_t *data, int len) {
memcpy(rx_buf, meshPayload, meshLen);
last_rx_len = meshLen;
#else
memcpy(rx_buf, data, len);
last_rx_len = len;
#endif
}
void ESPNOWRadio::init() {
// Set device as a Wi-Fi Station
WiFi.mode(WIFI_STA);
#ifdef CLIENT_WITHOUT_LORA
strncpy(bridge_secret, "LVSITANOS", sizeof(bridge_secret));
#endif
// Long Range mode
esp_wifi_set_protocol(WIFI_IF_STA, WIFI_PROTOCOL_LR);
@ -127,42 +137,39 @@ uint32_t ESPNOWRadio::intID() {
bool ESPNOWRadio::startSendRaw(const uint8_t* bytes, int len) {
// Send message via ESP-NOW
is_send_complete = false;
#ifdef CLIENT_WITHOUT_LORA
if (!bytes || len <= 0) {
Serial.println("Invalid raw mesh packet");
ESPNOW_DEBUG_PRINTLN("Invalid raw mesh packet");
return false;
}
if (len > (MAX_ESPNOW_PACKET_SIZE - 4)) {
Serial.println("Mesh packet too large for ESP-NOW");
ESPNOW_DEBUG_PRINTLN("Mesh packet too large for ESP-NOW");
return false;
}
uint8_t out[MAX_ESPNOW_PACKET_SIZE];
// 1) magic
out[0] = (BRIDGE_PACKET_MAGIC >> 8) & 0xFF;
out[1] = BRIDGE_PACKET_MAGIC & 0xFF;
// 2) checksum (πάνω στο raw mesh packet)
uint16_t cksum = fletcher16(bytes, len);
out[2] = (cksum >> 8) & 0xFF;
out[3] = cksum & 0xFF;
// 3) payload = raw mesh packet
memcpy(out + 4, bytes, len);
// 4) encrypt checksum + payload
xorCrypt(out + 2, len + 2);
// 5) send via ESP-NOW
esp_err_t result = esp_now_send(broadcastAddress, out, len + 4);
#else
is_send_complete = false;
esp_err_t result = esp_now_send(broadcastAddress, bytes, len);
#endif
if (result == ESP_OK) {
n_sent++;
ESPNOW_DEBUG_PRINTLN("Send success");
return true;
}
last_send_result = result;
is_send_complete = true;
ESPNOW_DEBUG_PRINTLN("Send failed: %d", result);

1
variants/elecrow_espnow/platformio.ini

@ -28,6 +28,7 @@ build_flags =
-D LV_CONF_PATH=lv_conf.h
-D ELECROW_DISPLAY_50
-D USE_MODULE_SWITCHES
-D CLIENT_WITHOUT_LORA
-D ADVERT_NAME='"Elecrow Terminal"'
-D MAX_CONTACTS=350
-D MAX_GROUP_CHANNELS=8

Loading…
Cancel
Save