/* * 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_ */