work1

Dependencies:   mbed MAX44009 mbed-os Si7021

Committer:
danaeb
Date:
Wed May 27 11:37:29 2020 +0000
Revision:
0:d3e390d62607
create

Who changed what in which revision?

UserRevisionLine numberNew contents of line
danaeb 0:d3e390d62607 1 #ifndef TASK_MAIN_H
danaeb 0:d3e390d62607 2 #define TASK_MAIN_H
danaeb 0:d3e390d62607 3
danaeb 0:d3e390d62607 4 #include "mbed.h"
danaeb 0:d3e390d62607 5 #include "liboo/types.h"
danaeb 0:d3e390d62607 6 #include "AppMain.h"
danaeb 0:d3e390d62607 7 #include "AppLora.h"
danaeb 0:d3e390d62607 8 #include "Button.h"
danaeb 0:d3e390d62607 9 #include "Sensor.h"
danaeb 0:d3e390d62607 10 #include "SensorManager.h"
danaeb 0:d3e390d62607 11 #include "CommandSample.h"
danaeb 0:d3e390d62607 12 #include "CommandSampleSelector.h"
danaeb 0:d3e390d62607 13 //#include "Latch.h"
danaeb 0:d3e390d62607 14
danaeb 0:d3e390d62607 15 #include "Calendar.h"
danaeb 0:d3e390d62607 16
danaeb 0:d3e390d62607 17 #define COMMAND_COUNT 5
danaeb 0:d3e390d62607 18 #define COMMAND_PAYLOAD_SIZE 255
danaeb 0:d3e390d62607 19
danaeb 0:d3e390d62607 20 #define DEBUG_MEMORY_START 2048
danaeb 0:d3e390d62607 21 #define DEBUG_MEMORY_SIZE 128
danaeb 0:d3e390d62607 22
danaeb 0:d3e390d62607 23 using namespace liboo;
danaeb 0:d3e390d62607 24 using namespace events;
danaeb 0:d3e390d62607 25 class AppMain{
danaeb 0:d3e390d62607 26 public:
danaeb 0:d3e390d62607 27 typedef enum{
danaeb 0:d3e390d62607 28 GLOBAL_STATE_STOP,
danaeb 0:d3e390d62607 29 GLOBAL_STATE_JOIN,
danaeb 0:d3e390d62607 30 GLOBAL_STATE_RUN,
danaeb 0:d3e390d62607 31 GLOBAL_STATE_DISCONNECTING,
danaeb 0:d3e390d62607 32 }GLOBAL_STATE;
danaeb 0:d3e390d62607 33
danaeb 0:d3e390d62607 34 typedef enum{
danaeb 0:d3e390d62607 35 EVENT_SHORT_PUSH,
danaeb 0:d3e390d62607 36 EVENT_LONG_PUSH,
danaeb 0:d3e390d62607 37 EVENT_JOIN_SUCCESS,
danaeb 0:d3e390d62607 38 EVENT_DISCONNECTED,
danaeb 0:d3e390d62607 39 EVENT_JOIN_FAILED,
danaeb 0:d3e390d62607 40 EVENT_CONNECTION_ERROR,
danaeb 0:d3e390d62607 41 EVENT_MINUTE_ELAPSED,
danaeb 0:d3e390d62607 42 EVENT_DAILY_SEND,
danaeb 0:d3e390d62607 43
danaeb 0:d3e390d62607 44 EVENT_TX_DONE,
danaeb 0:d3e390d62607 45 EVENT_TX_ERROR,
danaeb 0:d3e390d62607 46 EVENT_RX_ERROR,
danaeb 0:d3e390d62607 47 }EVENT;
danaeb 0:d3e390d62607 48
danaeb 0:d3e390d62607 49 typedef enum{
danaeb 0:d3e390d62607 50 RUN_STATE_READY,
danaeb 0:d3e390d62607 51 RUN_STATE_WAIT_SEND_COMPLETE,
danaeb 0:d3e390d62607 52 }RUN_STATE;
danaeb 0:d3e390d62607 53
danaeb 0:d3e390d62607 54 static void initialize(EventQueue *queue);
danaeb 0:d3e390d62607 55 static void incoming_lora_message_callback(void);
danaeb 0:d3e390d62607 56 static void set_history_size(u8 history_size);
danaeb 0:d3e390d62607 57
danaeb 0:d3e390d62607 58
danaeb 0:d3e390d62607 59 private:
danaeb 0:d3e390d62607 60 AppMain(){}; // private constructor that prevent anyone from
danaeb 0:d3e390d62607 61 // creating the instance
danaeb 0:d3e390d62607 62 static void _create_sensors(void);
danaeb 0:d3e390d62607 63 static void _button_callback_handler(Button::ACTION action);
danaeb 0:d3e390d62607 64 static void _lora_callback_handler(AppLora::EVENT event);
danaeb 0:d3e390d62607 65 static void _minute_elapsed_callback_handler(void);
danaeb 0:d3e390d62607 66 static void _daily_send_callback_handler(void);
danaeb 0:d3e390d62607 67
danaeb 0:d3e390d62607 68 static void _global_event_handler_from_interrupt(AppMain::EVENT event);
danaeb 0:d3e390d62607 69 static void _global_event_handler(AppMain::EVENT event);
danaeb 0:d3e390d62607 70 static void _run_event_handler(AppMain::EVENT event);
danaeb 0:d3e390d62607 71
danaeb 0:d3e390d62607 72 static void _minutes_elapsed(void);
danaeb 0:d3e390d62607 73 static void _enter_global_state_stop(void);
danaeb 0:d3e390d62607 74 static void _enter_global_state_join(void);
danaeb 0:d3e390d62607 75 static void _enter_global_state_run(void);
danaeb 0:d3e390d62607 76 static void _enter_global_state_disconnecting(void);
danaeb 0:d3e390d62607 77 static void _compute_random_number(void);
danaeb 0:d3e390d62607 78 static void _trigger_latch(bool sens);
danaeb 0:d3e390d62607 79
danaeb 0:d3e390d62607 80 //debug
danaeb 0:d3e390d62607 81 static void _write_time(char* buffer);
danaeb 0:d3e390d62607 82
danaeb 0:d3e390d62607 83 static s8 _send_empty(void);
danaeb 0:d3e390d62607 84 static void _scheduled_send(bool is_hourly_send);
danaeb 0:d3e390d62607 85 static s8 _send_samples(bool is_hourly_send);
danaeb 0:d3e390d62607 86
danaeb 0:d3e390d62607 87 static SensorData _sensor_data;
danaeb 0:d3e390d62607 88 static Sensor *_sensor_array[CONFIG_SENSOR_COUNT];
danaeb 0:d3e390d62607 89 static CommandSample *_command_sample_array[COMMAND_COUNT];
danaeb 0:d3e390d62607 90 static u8 _command_payload[COMMAND_PAYLOAD_SIZE];
danaeb 0:d3e390d62607 91 static EventQueue *_queue;
danaeb 0:d3e390d62607 92 //static PCAL6416 *_gpio_exp;
danaeb 0:d3e390d62607 93 static LedBlinker *_led_blinker;
danaeb 0:d3e390d62607 94 static Button *_button;
danaeb 0:d3e390d62607 95 static SensorManager *_sensor_manager;
danaeb 0:d3e390d62607 96 static Calendar *_calendar;
danaeb 0:d3e390d62607 97 static MemoryDeviceEeprom *_memory_device_calendar;
danaeb 0:d3e390d62607 98 //static Latch *_latch;
danaeb 0:d3e390d62607 99 static CommandSampleSelector _command_selector;
danaeb 0:d3e390d62607 100
danaeb 0:d3e390d62607 101 /*
danaeb 0:d3e390d62607 102 static SensorBattery *_sensor_battery;
danaeb 0:d3e390d62607 103 static SensorTensiometer *_sensor_tensiometer_1;
danaeb 0:d3e390d62607 104 static SensorTensiometer *_sensor_tensiometer_2;
danaeb 0:d3e390d62607 105 static SensorTensiometer *_sensor_tensiometer_3;
danaeb 0:d3e390d62607 106 static SensorPressure *_sensor_pressure_1;
danaeb 0:d3e390d62607 107 static SensorPressure *_sensor_pressure_2;
danaeb 0:d3e390d62607 108 static SensorPressure *_sensor_pressure_3;
danaeb 0:d3e390d62607 109 static SensorPressure *_sensor_pressure_pipe;
danaeb 0:d3e390d62607 110 static SensorSoilTemperature *sensor_soil_temperature;
danaeb 0:d3e390d62607 111 //static SensorBoardTempRH *sensor_board_temp_rh;
danaeb 0:d3e390d62607 112 */
danaeb 0:d3e390d62607 113
danaeb 0:d3e390d62607 114 static GLOBAL_STATE _global_state;
danaeb 0:d3e390d62607 115 static RUN_STATE _run_state;
danaeb 0:d3e390d62607 116 //static bool _forced_timestamp; // all frame must be timestamp until
danaeb 0:d3e390d62607 117 // the server answer
danaeb 0:d3e390d62607 118 //static bool _next_frame_timestamped; // every day a frame
danaeb 0:d3e390d62607 119 // must be timestamped
danaeb 0:d3e390d62607 120 static u32 _daily_send_s;
danaeb 0:d3e390d62607 121 static u8 _remaining_join_tries;
danaeb 0:d3e390d62607 122 static u8 _remaining_sample_before_send; // number of time the sensor have
danaeb 0:d3e390d62607 123 // sampled. When this number reach 5
danaeb 0:d3e390d62607 124 // a transmition is scheduled
danaeb 0:d3e390d62607 125 static u8 _transmit_count_before_alternate; // every 6 transmit we
danaeb 0:d3e390d62607 126 // must use alternate
danaeb 0:d3e390d62607 127 // command
danaeb 0:d3e390d62607 128 static u8 _send_delay;
danaeb 0:d3e390d62607 129 static u8 _history_size;
danaeb 0:d3e390d62607 130 static char _time_buffer[24];
danaeb 0:d3e390d62607 131
danaeb 0:d3e390d62607 132 static void _software_watchdog_increment();
danaeb 0:d3e390d62607 133 static void _software_watchdog_reset();
danaeb 0:d3e390d62607 134 static void _software_watchdog_enable();
danaeb 0:d3e390d62607 135 static void _software_watchdog_disable();
danaeb 0:d3e390d62607 136 static u8 _software_watchdog_time;
danaeb 0:d3e390d62607 137 static bool _software_watchdog_is_enable;
danaeb 0:d3e390d62607 138
danaeb 0:d3e390d62607 139 };
danaeb 0:d3e390d62607 140
danaeb 0:d3e390d62607 141 #endif
danaeb 0:d3e390d62607 142