Remote_Wifi_Switch/main/data_processing.h
2025-02-21 15:26:53 +05:30

299 lines
15 KiB
C

/*
* data_processing.h
*
* Created on: Feb 3, 2023
* Author: Partha
*/
#ifndef MAIN_DATA_PROCESSING_H_
#define MAIN_DATA_PROCESSING_H_
#include "sdkconfig.h"
#include "esp_netif.h"
typedef struct
{
// If at some point in the future more data needs to fit into this structure, the floats can be replaced with signed scaled int16s to save space.
// Simply convert the floats to scaled signed int16s on-the-fly when storing the log, and convert them back on-the-fly when displaying the log
// or sending them to the server. Because of the limited range utilized by the floats, you can probably multiply them by 100, store them as ints,
// and then divide them by 100 after retrieving them. Check to see if any weird out-of-range indicators in the floats would break this system
// before implementing it. You would need to alter the deviceSaveHistory(), deviceShowHistory(), and sendDataToServer() functions, and possibly
// the deviceClearHistory() functions, and adapt to the rtcRamData structure.
bool logHistoryRecorded; // Flag that indicates if the entry is empty or filled with valid data.
//int8_t logRSSI;
uint8_t logStatusFlags;
uint16_t logXaxis;
uint16_t logYaxis;
uint16_t logZaxis;
uint32_t logTriggerFlags1;
uint32_t logTriggerFlags2;
uint32_t logLight;
uint32_t logCheckInTime;
float logTemp;
float logHumidity;
float logThermocoupleTemp;
}historyLog_t;
typedef enum
{
HISTORY_TEMP_FIELD = 1,
HISTORY_HUMI_FIELD,
HISTORY_THERM_FIELD,
HISTORY_LIGHT_FIELD,
HISTORY_TIME_FIELD,
HISTORY_TRIG1_FIELD,
HISTORY_TRIG2_FIELD,
HISTORY_XAXIS_FIELD,
HISTORY_YAXIS_FIELD,
HISTORY_ZAXIS_FIELD,
HISTORY_RSSI_FIELD,
HISTORY_STAUS_FIELD,
HISTORY_RECORD_FIELD
}historyLog_field_t;
#define ON_BOARDING_MODE 0x01010101
#define ALERT_MODE 0x02020202
#define CHECK_IN_MODE 0x03030303
#define DEVICE_RESET_MODE 0x04040404
#define USER_FEEDBACK_MODE 0x05050505
#define WAKE_HOST_LOWER_BYTE_DISABLED 0x00
#define WAKE_HOST_LOWER_BYTE_ON_MOVEMENT_DETECTION 0x01 // 0 = disabled, 1 = enabled.
#define WAKE_HOST_LOWER_BYTE_ON_LIGHT_TO_DARK 0x02 // 0 = disabled, 1 = enabled.
#define WAKE_HOST_LOWER_BYTE_ON_DARK_TO_LIGHT 0x04 // 0 = disabled, 1 = enabled.
#define WAKE_HOST_LOWER_BYTE_ON_SWITCH_FROM_USB_TO_BATTERY 0x08 // 0 = disabled, 1 = enabled.
#define WAKE_HOST_LOWER_BYTE_ON_SWITCH_FROM_BATTERY_TO_USB 0x10 // 0 = disabled, 1 = enabled.
#define WAKE_HOST_LOWER_BYTE_WHEN_THERMOCOUPLE_CROSSES_LIMITS 0x20 // 0 = disabled, 1 = enabled.
#define WAKE_HOST_LOWER_BYTE_UNUSED_A 0x40 // 0 = disabled, 1 = enabled.
#define WAKE_HOST_LOWER_BYTE_UNUSED_B 0x80 // 0 = disabled, 1 = enabled.
#define WAKE_HOST_UPPER_BYTE_UNUSED_C 0x01 // 0 = disabled, 1 = enabled.
#define WAKE_HOST_UPPER_BYTE_UNUSED_D 0x02 // 0 = disabled, 1 = enabled.
#define WAKE_HOST_UPPER_BYTE_UNUSED_E 0x04 // 0 = disabled, 1 = enabled.
#define WAKE_HOST_UPPER_BYTE_UNUSED_F 0x08 // 0 = disabled, 1 = enabled.
#define WAKE_HOST_UPPER_BYTE_UNUSED_G 0x10 // 0 = disabled, 1 = enabled.
#define WAKE_HOST_UPPER_BYTE_UNUSED_H 0x20 // 0 = disabled, 1 = enabled.
#define WAKE_HOST_UPPER_BYTE_UNUSED_I 0x40 // 0 = disabled, 1 = enabled.
#define WAKE_HOST_UPPER_BYTE_UNUSED_J 0x80 // 0 = disabled, 1 = enabled.
// 16-bit masks
#define WAKE_HOST_DISABLED (uint16_t)WAKE_HOST_LOWER_BYTE_DISABLED
#define WAKE_HOST_ON_MOVEMENT_DETECTION (uint16_t)WAKE_HOST_LOWER_BYTE_ON_MOVEMENT_DETECTION
#define WAKE_HOST_ON_LIGHT_TO_DARK (uint16_t)WAKE_HOST_LOWER_BYTE_ON_LIGHT_TO_DARK
#define WAKE_HOST_ON_DARK_TO_LIGHT (uint16_t)WAKE_HOST_LOWER_BYTE_ON_DARK_TO_LIGHT
#define WAKE_HOST_ON_SWITCH_FROM_USB_TO_BATTERY (uint16_t)WAKE_HOST_LOWER_BYTE_ON_SWITCH_FROM_USB_TO_BATTERY
#define WAKE_HOST_ON_SWITCH_FROM_BATTERY_TO_USB (uint16_t)WAKE_HOST_LOWER_BYTE_ON_SWITCH_FROM_BATTERY_TO_USB
#define WAKE_HOST_WHEN_THERMOCOUPLE_CROSSES_LIMITS (uint16_t)WAKE_HOST_LOWER_BYTE_WHEN_THERMOCOUPLE_CROSSES_LIMITS
#define WAKE_HOST_UNUSED_A (uint16_t)WAKE_HOST_LOWER_BYTE_UNUSED_A
#define WAKE_HOST_UNUSED_B (uint16_t)WAKE_HOST_LOWER_BYTE_UNUSED_B
#define WAKE_HOST_UNUSED_C (uint16_t)(WAKE_HOST_UPPER_BYTE_UNUSED_C << 8)
#define WAKE_HOST_UNUSED_D (uint16_t)(WAKE_HOST_UPPER_BYTE_UNUSED_D << 8)
#define WAKE_HOST_UNUSED_E (uint16_t)(WAKE_HOST_UPPER_BYTE_UNUSED_E << 8)
#define WAKE_HOST_UNUSED_F (uint16_t)(WAKE_HOST_UPPER_BYTE_UNUSED_F << 8)
#define WAKE_HOST_UNUSED_G (uint16_t)(WAKE_HOST_UPPER_BYTE_UNUSED_G << 8)
#define WAKE_HOST_UNUSED_H (uint16_t)(WAKE_HOST_UPPER_BYTE_UNUSED_H << 8)
#define WAKE_HOST_UNUSED_I (uint16_t)(WAKE_HOST_UPPER_BYTE_UNUSED_I << 8)
#define WAKE_HOST_UNUSED_J (uint16_t)(WAKE_HOST_UPPER_BYTE_UNUSED_J << 8)
#define STROBED_SENSOR_MEASUREMENT_EXCEEDED_THRESHOLD_A 0x0001
#define STROBED_SENSOR_MEASUREMENT_RETURNED_FROM_ABOVE_THRESHOLD_A 0x0002
#define STROBED_SENSOR_MEASUREMENT_EXCEEDED_THRESHOLD_B 0x0004
#define STROBED_SENSOR_MEASUREMENT_RETURNED_FROM_ABOVE_THRESHOLD_B 0x0008
#define STROBED_SENSOR_MEASUREMENT_EXCEEDED_THRESHOLD_C 0x0010
#define STROBED_SENSOR_MEASUREMENT_RETURNED_FROM_ABOVE_THRESHOLD_C 0x0020
#define STROBED_SENSOR_MEASUREMENT_FELL_BELOW_THRESHOLD_D 0x0040
#define STROBED_SENSOR_MEASUREMENT_RETURNED_FROM_BELOW_THRESHOLD_D 0x0080
#define STROBED_SENSOR_MEASUREMENT_FELL_BELOW_THRESHOLD_E 0x0100
#define STROBED_SENSOR_MEASUREMENT_RETURNED_FROM_BELOW_THRESHOLD_E 0x0200
#define STROBED_SENSOR_MEASUREMENT_FELL_BELOW_THRESHOLD_F 0x0400
#define STROBED_SENSOR_MEASUREMENT_RETURNED_FROM_BELOW_THRESHOLD_F 0x0800
#define STROBED_SENSOR_UNUSED_A 0x1000
#define STROBED_SENSOR_UNUSED_B 0x2000
#define STROBED_SENSOR_UNUSED_C 0x4000
#define STROBED_SENSOR_UNUSED_D 0x8000
#define STROBED_MOTION_LOWER_BYTE_MOVEMENT_DETECTED 0x01
#define STROBED_MOTION_LOWER_BYTE_UNUSED_A 0x02
#define STROBED_MOTION_LOWER_BYTE_UNUSED_B 0x04
#define STROBED_MOTION_LOWER_BYTE_UNUSED_C 0x08
#define STROBED_MOTION_LOWER_BYTE_UNUSED_D 0x10
#define STROBED_MOTION_LOWER_BYTE_UNUSED_E 0x20
#define STROBED_MOTION_LOWER_BYTE_UNUSED_F 0x40
#define STROBED_MOTION_LOWER_BYTE_UNUSED_G 0x80
#define STROBED_MOTION_UPPER_BYTE_UNUSED_H 0x01
#define STROBED_MOTION_UPPER_BYTE_UNUSED_I 0x02
#define STROBED_MOTION_UPPER_BYTE_UNUSED_J 0x04
#define STROBED_MOTION_UPPER_BYTE_UNUSED_K 0x08
#define STROBED_MOTION_UPPER_BYTE_UNUSED_L 0x10
#define STROBED_MOTION_UPPER_BYTE_UNUSED_M 0x20
#define STROBED_MOTION_UPPER_BYTE_UNUSED_N 0x40
#define STROBED_MOTION_UPPER_BYTE_UNUSED_O 0x80
// 16-bit masks
#define STROBED_MOTION_MOVEMENT_DETECTED (uint16_t)STROBED_MOTION_LOWER_BYTE_MOVEMENT_DETECTED
#define STROBED_MOTION_UNUSED_A (uint16_t)STROBED_MOTION_LOWER_BYTE_UNUSED_A
#define STROBED_MOTION_UNUSED_B (uint16_t)STROBED_MOTION_LOWER_BYTE_UNUSED_B
#define STROBED_MOTION_UNUSED_C (uint16_t)STROBED_MOTION_LOWER_BYTE_UNUSED_C
#define STROBED_MOTION_UNUSED_D (uint16_t)STROBED_MOTION_LOWER_BYTE_UNUSED_D
#define STROBED_MOTION_UNUSED_E (uint16_t)STROBED_MOTION_LOWER_BYTE_UNUSED_E
#define STROBED_MOTION_UNUSED_F (uint16_t)STROBED_MOTION_LOWER_BYTE_UNUSED_F
#define STROBED_MOTION_UNUSED_G (uint16_t)STROBED_MOTION_LOWER_BYTE_UNUSED_G
#define STROBED_MOTION_UNUSED_H (uint16_t)(STROBED_MOTION_LOWER_BYTE_UNUSED_H << 8)
#define STROBED_MOTION_UNUSED_I (uint16_t)(STROBED_MOTION_LOWER_BYTE_UNUSED_I << 8)
#define STROBED_MOTION_UNUSED_J (uint16_t)(STROBED_MOTION_LOWER_BYTE_UNUSED_J << 8)
#define STROBED_MOTION_UNUSED_K (uint16_t)(STROBED_MOTION_LOWER_BYTE_UNUSED_K << 8)
#define STROBED_MOTION_UNUSED_L (uint16_t)(STROBED_MOTION_LOWER_BYTE_UNUSED_L << 8)
#define STROBED_MOTION_UNUSED_M (uint16_t)(STROBED_MOTION_LOWER_BYTE_UNUSED_M << 8)
#define STROBED_MOTION_UNUSED_N (uint16_t)(STROBED_MOTION_LOWER_BYTE_UNUSED_N << 8)
#define STROBED_MOTION_UNUSED_O (uint16_t)(STROBED_MOTION_LOWER_BYTE_UNUSED_O << 8)
#define STROBED_MISC_LOWER_BYTE_CHECK_IN_REQUESTED 0x01
#define STROBED_MISC_LOWER_BYTE_CHANGE_FROM_LIGHT_TO_DARK 0x02
#define STROBED_MISC_LOWER_BYTE_CHANGE_FROM_DARK_TO_LIGHT 0x04
#define STROBED_MISC_LOWER_BYTE_CHANGE_FROM_USB_TO_BATTERY 0x08
#define STROBED_MISC_LOWER_BYTE_CHANGE_FROM_BATTERY_TO_USB 0x10
#define STROBED_MISC_LOWER_BYTE_THERMOCOUPLE_PLUGGED_IN 0x20
#define STROBED_MISC_LOWER_BYTE_THERMOCOUPLE_UNPLUGGED 0x40
#define STROBED_MISC_LOWER_BYTE_REGULAR_SCHEDULED_CHECK_IN 0x80
#define STROBED_MISC_UPPER_BYTE_CHECK_IN_REQ_AFTER_POWER_ON 0x01
#define STROBED_MISC_UPPER_BYTE_DEVICE_OPERATE_IN_ALERT_MODE 0x02
#define STROBED_MISC_UPPER_BYTE_UNUSED_D 0x04
#define STROBED_MISC_UPPER_BYTE_UNUSED_E 0x08
#define STROBED_MISC_UPPER_BYTE_UNUSED_F 0x10
#define STROBED_MISC_UPPER_BYTE_UNUSED_G 0x20
#define STROBED_MISC_UPPER_BYTE_UNUSED_H 0x40
#define STROBED_MISC_UPPER_BYTE_UNUSED_I 0x80
// 16-bit masks
#define STROBED_MISC_CHECK_IN_REQUESTED (uint16_t)STROBED_MISC_LOWER_BYTE_CHECK_IN_REQUESTED
#define STROBED_MISC_CHANGE_FROM_LIGHT_TO_DARK (uint16_t)STROBED_MISC_LOWER_BYTE_CHANGE_FROM_LIGHT_TO_DARK
#define STROBED_MISC_CHANGE_FROM_DARK_TO_LIGHT (uint16_t)STROBED_MISC_LOWER_BYTE_CHANGE_FROM_DARK_TO_LIGHT
#define STROBED_MISC_CHANGE_FROM_USB_TO_BATTERY (uint16_t)STROBED_MISC_LOWER_BYTE_CHANGE_FROM_USB_TO_BATTERY
#define STROBED_MISC_CHANGE_FROM_BATTERY_TO_USB (uint16_t)STROBED_MISC_LOWER_BYTE_CHANGE_FROM_BATTERY_TO_USB
#define STROBED_MISC_THERMOCOUPLE_PLUGGED_IN (uint16_t)STROBED_MISC_LOWER_BYTE_THERMOCOUPLE_PLUGGED_IN
#define STROBED_MISC_THERMOCOUPLE_UNPLUGGED (uint16_t)STROBED_MISC_LOWER_BYTE_THERMOCOUPLE_UNPLUGGED
#define STROBED_MISC_REGULAR_SCHEDULED_CHECK_IN (uint16_t)STROBED_MISC_LOWER_BYTE_REGULAR_SCHEDULED_CHECK_IN
#define STROBED_MISC_CHECK_IN_REQ_AFTER_POWER_ON (uint16_t)(STROBED_MISC_UPPER_BYTE_CHECK_IN_REQ_AFTER_POWER_ON << 8)
#define STROBED_MISC_DEVICE_OPERATE_IN_ALERT_MODE (uint16_t)(STROBED_MISC_UPPER_BYTE_DEVICE_OPERATE_IN_ALERT_MODE << 8)
#define STROBED_MISC_UNUSED_D (uint16_t)(STROBED_MISC_UPPER_BYTE_UNUSED_D << 8)
#define STROBED_MISC_UNUSED_E (uint16_t)(STROBED_MISC_UPPER_BYTE_UNUSED_E << 8)
#define STROBED_MISC_UNUSED_F (uint16_t)(STROBED_MISC_UPPER_BYTE_UNUSED_F << 8)
#define STROBED_MISC_UNUSED_G (uint16_t)(STROBED_MISC_UPPER_BYTE_UNUSED_G << 8)
#define STROBED_MISC_UNUSED_H (uint16_t)(STROBED_MISC_UPPER_BYTE_UNUSED_H << 8)
#define STROBED_MISC_UNUSED_I (uint16_t)(STROBED_MISC_UPPER_BYTE_UNUSED_I << 8)
#define CURRENT_STATUS_LIGHT_DETECTED 0x01
#define CURRENT_STATUS_POWERED_BY_USB 0x02
#define CURRENT_STATUS_UNUSED_A 0x04
#define CURRENT_STATUS_UNUSED_B 0x08
#define CURRENT_STATUS_UNUSED_C 0x10
#define CURRENT_STATUS_UNUSED_D 0x20
#define CURRENT_STATUS_UNUSED_E 0x40
#define CURRENT_STATUS_UNUSED_F 0x80
#define LIGHT_SENSOR_VREF_1V024 0x00 // Vref = 1.024V
#define LIGHT_SENSOR_VREF_2V048 0x01 // Vref = 2.048V
#define LIGHT_SENSOR_VREF_2V500 0x02 // Vref = 2.500V
#define LIGHT_SENSOR_VREF_VDD 0x03 // Vref = Vdd
#define LIGHT_DETECTED true
#define LIGHT_UNDETECTED false
/* TRIGGER 1 bits */
#define STROBED_TEMPERATURE_MEASUREMENT_EXCEEDED_UPPER_THRESHOLD 0x0001
#define STROBED_TEMPERATURE_MEASUREMENT_FELL_BELOW_LOWER_THRESHOLD 0x0002
#define STROBED_HUMIDITY_MEASUREMENT_EXCEEDED_UPPER_THRESHOLD 0x0004
#define STROBED_HUMIDITY_MEASUREMENT_FELL_BELOW_LOWER_THRESHOLD 0x0008
#define STROBED_THERMOCOUPLE_MEASUREMENT_EXCEEDED_UPPER_THRESHOLD 0x0010
#define STROBED_THERMOCOUPLE_MEASUREMENT_FELL_BELOW_LOWER_THRESHOLD 0x0020
#define STROBED_EXTERNAL_TEMP_PROBE_MEASUREMENT_EXCEEDED_UPPER_THRESHOLD 0x0040
#define STROBED_EXTERNAL_TEMP_PROBE_MEASUREMENT_FELL_BELOW_LOWER_THRESHOLD 0x0080
#define STROBED_DEVICE_OPERATE_IN_ALERT_MODE 0x0100
/* TRIGGER 2 bits */
#define STROBED_REGULAR_SCHEDULED_SENDINTERVAL_CHECKIN 0x0001
#define STROBED_POWER_CHANGE_FROM_BATTERY_TO_USB 0x0002
#define STROBED_POWER_CHANGE_FROM_USB_TO_BATTERY 0x0004
#define STROBED_MOTION_MOVEMENT_WAS_DETECTED 0x0008
#define STROBED_LIGHT_TRANSITION_FROM_LIGHT_TO_DARK 0x0010
#define STROBED_LIGHT_TRANSITION_FROM_DARK_TO_LIGHT 0x0020
#define STROBED_CHECK_IN_REQUESTED_AFTER_POWER_ON 0x4000
#define STROBED_BUTTON_CHECK_IN_REQUESTED 0x8000
#define STROBED_SENSOR_MEASUREMENT_EXCEEDED_UPPER_THRESHOLD 0x0001
#define STROBED_SENSOR_MEASUREMENT_FELL_BELOW_LOWER_THRESHOLD 0x0002
typedef enum
{
TEMPERATURE_SENSOR,
HUMIDITY_SENSOR,
THERMOCOUPLE_SENSOR,
LIGHT_SENSOR,
ACCELEROMETER_SENSOR,
POWER_MONITOR_SENSOR
}sensorType_t;
typedef enum
{
BATTERY_CHARGING,
BATTERY_CHARGED,
BATTERY_FAULT
}batteryChargingState_t;
void data_initialize_rtc_ram(void);
bool data_setTempPresent(bool status);
bool data_setAccelPresent(bool status);
bool data_setThermocouplePresent(bool status);
uint16_t data_get_motion_threshold(void);
uint32_t data_get_send_interval(void);
bool data_is_usb_connected(void);
void data_task(void *pvParameters);
void data_update_trigger_flags(void);
void data_create_checkin_string(char *buff, size_t len);
void data_parse_http_response(const char *http_resp);
void data_processSensorModes(sensorType_t sensor);
uint8_t data_process_tempHumi_thresholds(float raw_data, float prev_raw_data, sensorType_t sensor);
uint8_t data_process_lightSen_thresholds(uint32_t prev_raw_data, uint32_t raw_data);
#if 0
uint32_t data_get_light_sensor_gp(void);
uint32_t data_get_light_sensor_gn(void);
#endif
uint8_t data_get_light_sensor_threshold(void);
void data_process_power_thresholds(void);
void data_save_history(void);
void data_show_history(uint8_t sector, bool print_logs, size_t* size_of_written_sector_data);
bool data_clear_history(void);
uint32_t data_get_mode(void);
esp_err_t data_parsing_config(char *buff,int len);
esp_err_t check_in_attempts_count( int httpRetryCnt, int maxretrynum );
void init_send_Details(void);
int32_t data_get_postToServer(void);
int32_t data_get_postUrlMax(void);
void data_init_postUrlMax(int32_t val);
void data_set_postToServer(int32_t val);
void data_init_postToServer(void);
uint32_t data_get_alertInterval(void);
void data_set_ap_mac_addr(uint8_t *bssid);
void data_set_wifi_rssi(int32_t rsi);
int32_t data_get_wifi_rssi(void);
uint8_t* data_get_ap_mac_addr(void);
void data_set_local_ip_addr(esp_netif_ip_info_t* ip_infos);
uint32_t data_get_ip_addr(void);
uint32_t data_get_gw_addr(void);
uint32_t data_get_netmask_addr(void);
void data_set_wifi_channel(uint8_t channel);
uint8_t data_get_wifi_channel(void);
void data_clearWifiConnectionSettings(void);
void data_set_main_and_backup_dns(esp_netif_dns_info_t* dns1, esp_netif_dns_info_t* dns2);
void data_set_urlConnect(void);
#endif /* MAIN_DATA_PROCESSING_H_ */