#ifndef APP_H #define APP_H #include #include #define SENSOR_NAME_LEN 10 enum sm_cmd_code { SM_CMD_GET_SENSOR_COUNT = 1, SM_CMD_GET_VALUE = 2, SM_CMD_SET_WARNING_VALUE = 3, SM_CMD_GET_WARNING_VALUE = 4, SM_CMD_SET_SENSOR_NAME = 5, SM_CMD_GET_SENSOR_NAME = 6, SM_CMD_FAIL = 255, }; struct sm_get_sensor_count_req { }; struct sm_get_sensor_count_res { uint8_t count; }; struct sm_get_value_req { uint8_t sensor; }; struct sm_get_value_res { uint8_t value; }; struct sm_set_warning_value_req { uint8_t sensor; uint16_t warning_value; }; struct sm_set_warning_value_res { }; struct sm_get_warning_value_req { uint8_t sensor; }; struct sm_get_warning_value_res { uint16_t warning_value; }; struct sm_set_sensor_name_req { uint8_t sensor; uint8_t length; uint8_t name[SENSOR_NAME_LEN]; }; struct sm_set_sensor_name_res { }; struct sm_get_sensor_name_req { uint8_t sensor; }; struct sm_get_sensor_name_res { uint8_t length; uint8_t name[SENSOR_NAME_LEN]; }; struct sm_req { uint8_t code; union { struct sm_get_sensor_count_req get_sensor_count; struct sm_get_value_req get_value; struct sm_set_warning_value_req set_warning_value; struct sm_get_warning_value_req get_warning_value; struct sm_set_sensor_name_req set_sensor_name; struct sm_get_sensor_name_req get_sensor_name; }; }; // len + code #define SM_RES_HEADER_SIZE 1 struct sm_res { // header uint8_t code; // body union { struct sm_get_sensor_count_res get_sensor_count; struct sm_get_value_res get_value; struct sm_set_warning_value_res set_warning_value; struct sm_get_warning_value_res get_warning_value; struct sm_set_sensor_name_res set_sensor_name; struct sm_get_sensor_name_res get_sensor_name; }; }; void on_loop(); //boolean tx_soil_moisture(struct sm_res& res); void notify_soil_moisture(const struct sm_res& res, uint8_t body_len); void notify_battery_level(uint8_t value); void on_soil_moisture_ctrl(uint8_t *data, uint8_t len); #ifndef SM_DEBUG #define SM_DEBUG 1 #endif #if SM_DEBUG == 1 void write_req(struct sm_req const& req); void write_res(struct sm_res const& res); #endif #endif