freematics-traccar-encrypted/esp32/telelogger/telemesh.cpp

113 lines
2.6 KiB
C++

#include "FreematicsPlus.h"
#include "config.h"
#include "telemesh.h"
#if 0
#include <mdf_common.h>
#include <mwifi.h>
static mdf_err_t event_loop_cb(mdf_event_loop_t event, void *ctx)
{
switch (event) {
case MDF_EVENT_MWIFI_STARTED:
Serial.println("MESH is started");
break;
case MDF_EVENT_MWIFI_PARENT_CONNECTED:
Serial.println("Parent is connected on station interface");
break;
case MDF_EVENT_MWIFI_PARENT_DISCONNECTED:
Serial.println("Parent is disconnected on station interface");
break;
default:
break;
}
return MDF_OK;
}
static mdf_err_t wifi_init()
{
mdf_err_t ret = nvs_flash_init();
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
nvs_flash_erase();
ret = nvs_flash_init();
}
//MDF_ERROR_ASSERT(ret);
tcpip_adapter_init();
esp_event_loop_init(NULL, NULL);
esp_wifi_init(&cfg);
esp_wifi_set_storage(WIFI_STORAGE_FLASH);
esp_wifi_set_mode(WIFI_MODE_STA);
esp_wifi_set_ps(WIFI_PS_NONE);
esp_mesh_set_6m_rate(false);
return esp_wifi_start();
}
bool ClientWiFiMesh::begin(CFreematics* device)
{
if (m_inited) return true;
mwifi_init_config_t cfg = MWIFI_INIT_CONFIG_DEFAULT();
mwifi_config_t config = {0};
config.channel = WIFI_MESH_CHANNEL;
config.mesh_type = MWIFI_MESH_NODE;
memcpy(config.mesh_id, WIFI_MESH_ID, sizeof(WIFI_MESH_ID) - 1);
mdf_event_loop_init(event_loop_cb);
wifi_init();
mwifi_init(&cfg);
mwifi_set_config(&config);
if (mwifi_start() == MDF_OK) {
m_inited = true;
return true;
}
return false;
}
bool ClientWiFiMesh::open(const char* host, uint16_t port)
{
return mwifi_is_connected();
}
bool ClientWiFiMesh::send(const char* data, unsigned int len)
{
if (mwifi_is_connected()) {
mwifi_data_type_t data_type = {0x0};
if (mwifi_write(NULL, &data_type, data, len, true) == MDF_OK)
return true;
}
return false;
}
char* ClientWiFiMesh::receive(int* pbytes, unsigned int timeout)
{
if (mwifi_is_connected()) {
uint8_t src_addr[MWIFI_ADDR_LEN] = {0x0};
mwifi_data_type_t data_type = {0x0};
size_t size = MESH_RECV_BUF_SIZE - 1;
if (mwifi_read(src_addr, &data_type, m_buffer, &size, timeout / portTICK_PERIOD_MS) == MDF_OK) {
m_buffer[size] = 0;
if (pbytes) *pbytes = size;
return m_buffer;
}
}
return 0;
}
ClientWiFiMesh::ClientWiFiMesh()
{
m_buffer = (char*)malloc(MESH_RECV_BUF_SIZE);
}
ClientWiFiMesh::~ClientWiFiMesh()
{
free(m_buffer);
}
#endif