This commit is contained in:
Manticore 2025-03-12 16:52:58 +05:30
parent 1d457bb387
commit 55d997c072
4 changed files with 176 additions and 54 deletions

View File

@ -24,6 +24,7 @@
#include "data_processing.h"
#include "ota.h"
#include "hmi.h"
#include "esp_mac.h"
#define LOG_LOCAL_LEVEL ESP_LOG_INFO
#include "esp_log.h"
@ -95,6 +96,14 @@ extern uint32_t g_McuUpdate;
extern uint32_t g_ModemUpdate;
extern uint32_t g_version;
/// mqtt added ///
bool qmtopen_fail = false;
int qmtopen_retries = 0;
#define QMTOPEN_RETRY_NUM 3
/// mqtt added end ///
typedef enum
{
COMMS_EVENT_START,
@ -112,6 +121,9 @@ typedef enum
COMMS_STATE_WIFI_CONNECT,
COMMS_STATE_WIFI_POST_REQ,
COMMS_STATE_WIFI_GET_REQ,
COMMS_STATE_WAIT_MQTT_CONNECT,
COMMS_STATE_WAIT_MQTT_PUB,
COMMS_STATE_WAIT_MQTT_CLOSE,
COMMS_STATE_WAIT_HTTP_SEND_CONFIG_FLAGS,
COMMS_STATE_WAIT_HTTP_GET_CONFIG_FLAGS,
COMMS_STATE_WAIT_HTTP_POST_REQ,
@ -217,6 +229,9 @@ static const char* state_str(comms_state_t s)
case COMMS_STATE_WIFI_CONNECT:return "WIFI_CONNECT";
case COMMS_STATE_WIFI_POST_REQ:return "WIFI_POST_REQ";
case COMMS_STATE_WIFI_GET_REQ:return "WIFI_GET_REQ";
case COMMS_STATE_WAIT_MQTT_CONNECT:return "WAIT_MQTT_CONNECT";
case COMMS_STATE_WAIT_MQTT_PUB:return "WAIT_MQTT_PUB";
case COMMS_STATE_WAIT_MQTT_CLOSE:return "WAIT_MQTT_CLOSE";
case COMMS_STATE_WAIT_HTTP_SEND_CONFIG_FLAGS:return "WAIT_HTTP_SEND_CONFIG_FLAGS";
case COMMS_STATE_WAIT_HTTP_GET_CONFIG_FLAGS:return "WAIT_HTTP_GET_CONFIG_FLAGS";
case COMMS_STATE_WAIT_HTTP_POST_REQ:return "WAIT_HTTP_POST_REQ";
@ -405,7 +420,86 @@ static void http_op_cb(int status)
}
}
////////////////////////////////////////////////mqtt////////////////////////////////
static void mqtt_connect_cb(int status)
{
comms.poll_timer = true;
if (ESP_OK == status)
{
/* connected */
}
else
{
/* Nope - back idle */
ESP_LOGW(TAG,"MQTT connection failed.\r\n");
/*if open fail flag is set then mqtt connection is closed
and then attempt another mqtt sequence*/
if(qmtopen_fail){
//qmtopen_fail = false;
ESP_LOGI(TAG, "Closing connection\r\n");
//GPIO_ResetBits(GPIO_Pin_22);
//heartbeat_time = 5;
transition(COMMS_STATE_WAIT_MQTT_PUB);
}
else{
transition(COMMS_STATE_GOING_IDLE);
}
}
// update_relay_led();
}
static void mqtt_pub_cb(int status)
{
comms.poll_timer = true;
if (ESP_OK == status)
{
/* connected */
}
else
{
/* Nope - back to idle */
ESP_LOGW(TAG, "MQTT publish failed.\r\n");
transition(COMMS_STATE_GOING_IDLE);
}
// update_relay_led();
}
static void mqtt_close_cb(int status)
{
comms.poll_timer = true;
if (ESP_OK == status)
{
}
else
{
if(qmtopen_fail){
if(qmtopen_retries >= QMTOPEN_RETRY_NUM){
qmtopen_retries = 0;
qmtopen_fail = false;
ESP_LOGI(TAG, "MQTT open retries exceeded. bypass SP1\r\n");
transition(COMMS_STATE_WAIT_MQTT_CLOSE);
}
else{
qmtopen_fail = false;
ESP_LOGW(TAG, "MQTT close failed.\r\n");
transition(COMMS_STATE_WAIT_NET_CONNECT);
}
}
}
}
///////////////////////////////////////////end mqtt ////////////////////////////////
static void http_post_op_cb(int status)
{
@ -1219,7 +1313,7 @@ static int state_machine(comms_event_t evt)
/* Reset the backup flag */
comms_do_wifi_backup = false;
comms_do_cell_backup = false;
// comms_do_cell_backup = false;
/* Status is ERROR until cleared by successful completion. */
comms.last_cycle_status = COMMS_STATUS_ERROR;
@ -1335,11 +1429,7 @@ static int state_machine(comms_event_t evt)
/* Set the posting_failed to be true */
comms_posting_failed = true;
/* Do cellular backup for the check-in process */
if(COMMS_OVER_WIFI_CELL_BACKUP)
{
comms_do_cell_backup = true;
}
/* Do a transition to "GOING_IDLE" state */
transition(COMMS_STATE_GOING_IDLE);
@ -2029,6 +2119,43 @@ static int state_machine(comms_event_t evt)
/* ------------------------------------------------------------------------- */
char* get_mac(void){
uint8_t mac[6]; // Buffer to store MAC address
esp_efuse_mac_get_default(mac);
// Print original MAC in hex format
printf("MAC Address (Hex): %02X:%02X:%02X:%02X:%02X:%02X\n",
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
// Convert MAC address to a decimal string
char full_mac_decimal[20]; // Buffer for full decimal MAC
int len = snprintf(full_mac_decimal, sizeof(full_mac_decimal), "%d%d%d%d%d%d",
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
// Ensure exactly 15 characters by padding with leading zeros if necessary
char mac_15[16]; // 15 characters + null terminator
if (len < 15) {
// Fill with leading zeros
memset(mac_15, '0', 15 - len);
strcpy(mac_15 + (15 - len), full_mac_decimal);
} else {
// Truncate if necessary
strncpy(mac_15, full_mac_decimal, 15);
}
mac_15[15] = '\0'; // Null-terminate
// Print the final 15-character decimal MAC address
printf("Formatted MAC (15 Characters): %s\n", mac_15);
// strncpy(MAC_ID, mac_15, 15);
// printf("Formatted MAC (15 Characters): %s\n", MAC_ID);
return mac_15;
}
/* Initialize. */
int comms_init(void)
{

View File

@ -281,4 +281,7 @@ bool comms_is_started(void);
*/
int comms_get_status(void);
// Get MAC id
char* get_mac(void);
#endif /* MAIN_COMMS_H_ */

View File

@ -34,11 +34,14 @@
#include "lwip/ip4_addr.h"
#include "wifi_Init.h"
#include "nvm.h"
#include "wifi_OTA.h"
static const char* TAG = "DATA";
#define LOG_LOCAL_LEVEL ESP_LOG_INFO
#include "esp_log.h"
#define IMEI "353165803930522"
extern bool isCycleCompleted;
extern uint8_t comms_mode;
extern comms_medium_t comms_medium;
@ -2480,17 +2483,22 @@ esp_err_t data_parsing_config(char *buff,int len){
esp_err_t retval = ESP_FAIL;
char *ret = NULL;
char server_request[11]={0};
//char setting_req[]="settings";
ret = strstr(buff, (const char*)"settings");
data_parse_String_value(server_request,"request",buff);
if( ret != NULL ){
// char setting_req[]="settings";
// ret = strstr(buff, (const char*)"settings");
// data_parse_String_value(server_request,"request",buff);
// if( ret != NULL ){
if(1){
//retval = data_parse_uint_value(&g_server_time,"time", buff);
retval = data_parse_uint_value(&g_ID,"id", buff);
retval = data_parse_uint_value(&g_SensorInt,"SensorInt", buff);
retval = data_parse_uint_value(&g_ConfigUpdate,"ConfigUpdate", buff);
retval = data_parse_uint_value(&g_McuUpdate,"McuUpdate", buff);
retval = data_parse_uint_value(&g_ModemUpdate,"ModemUpdate", buff);
ESP_LOGI(TAG, "ConfigUpdate: %ld McuUpdate: %ld ModemUpdate: %ld", g_ConfigUpdate, g_McuUpdate, g_ModemUpdate);
if(g_McuUpdate == 1)
wifi_ota_start_firmware_update(IMEI);
}
else
{

View File

@ -34,6 +34,8 @@
#include <sys/time.h>
#include "rtc.h"
#include "data_processing.h"
@ -85,37 +87,6 @@ void extract_mcu_update(const char *json_data, char *output) {
}
}
void get_mac(void){
uint8_t mac[6]; // Buffer to store MAC address
esp_efuse_mac_get_default(mac);
// Print original MAC in hex format
printf("MAC Address (Hex): %02X:%02X:%02X:%02X:%02X:%02X\n",
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
// Convert MAC address to a decimal string
char full_mac_decimal[20]; // Buffer for full decimal MAC
int len = snprintf(full_mac_decimal, sizeof(full_mac_decimal), "%d%d%d%d%d%d",
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
// Ensure exactly 15 characters by padding with leading zeros if necessary
char mac_15[16]; // 15 characters + null terminator
if (len < 15) {
// Fill with leading zeros
memset(mac_15, '0', 15 - len);
strcpy(mac_15 + (15 - len), full_mac_decimal);
} else {
// Truncate if necessary
strncpy(mac_15, full_mac_decimal, 15);
}
mac_15[15] = '\0'; // Null-terminate
// Print the final 15-character decimal MAC address
printf("Formatted MAC (15 Characters): %s\n", mac_15);
strncpy(MAC_ID, mac_15, 15);
printf("Formatted MAC (15 Characters): %s\n", MAC_ID);
}
static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)
{
@ -210,13 +181,22 @@ void app_main(void)
/* Create the UART tasks for both UART0 and UART1 */
uart_create_rx_tasks();
get_mac();
char mac[15];
snprintf(mac,sizeof(mac), get_mac());
ESP_LOGI(TAG, "======> Mac id: %s", mac);
// Get firmwae version
const esp_app_desc_t *app_desc = esp_app_get_description();
ESP_LOGI(TAG, "Firmware Version: %s", app_desc->version);
while(1){
vTaskDelay(100 / portTICK_PERIOD_MS);
// get_time();
// ESP_LOGI("TIME", "Current time =====> %s", buff);
ESP_LOGI(TAG,"====>>> Test data <<<=========");
}
/*
uint8_t* test_str[] = {0xA5,0x05,0x4C,0x4C,0x42}; // Example command to request current value
@ -263,16 +243,6 @@ void app_main(void)
get_time();
while(1){
vTaskDelay(100 / portTICK_PERIOD_MS);
// get_time();
// ESP_LOGI("TIME", "Current time =====> %s", buff);
ESP_LOGI(TAG,"====>>> HIiiiiii <<<=========");
}
// Configure Target brocker URL
esp_mqtt_client_config_t mqtt_cfg = {
@ -284,8 +254,22 @@ void app_main(void)
esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, NULL);
esp_mqtt_client_start(client);
http_get_request(MCU_CONFIG);
http_get_request(MCU_UPDATE);
data_parsing_config(&HTTP_GET_DATA, sizeof(HTTP_GET_DATA));
while(1){
vTaskDelay(100 / portTICK_PERIOD_MS);
// get_time();
// ESP_LOGI("TIME", "Current time =====> %s", buff);
ESP_LOGI(TAG,"====>>> Test data <<<=========");
}
char* strret = NULL;
char* token = strtok(HTTP_GET_DATA, "SP4");
ESP_LOGI(TAG,"REcived data from main1 %s",token);