#ifndef APP_H #define APP_H #include "config-check.h" #include #include #define SENSOR_NAME_LEN 10 // TODO: Randomize these numbers. There are no reason why they should be in order. enum sm_cmd_code { SM_CMD_GET_SENSOR_COUNT = 1, // Used to be 2 SM_CMD_GET_VALUE = 8, 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_SET_UPDATE_INTERVAL = 7, // 8 is used 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; }; /** * This includes the sensor id because it can be used as a notification too */ struct sm_get_value_res { uint8_t sensor; uint16_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_set_update_interval_req { uint8_t sensor; uint8_t interval_in_seconds; }; struct sm_set_update_interval_res { }; 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; struct sm_set_update_interval_req set_update_interval; }; }; // 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; struct sm_set_update_interval_res set_update_interval; }; }; void sm_loop(); void sm_setup(); void sm_on_connect(); void sm_on_disconnect(); //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); #ifdef SM_DEBUG void write_req(struct sm_req const &req); void write_res(struct sm_res const &res); #endif #endif // vim: set ft=arduino: