140 lines
2.6 KiB
C

#ifndef _APP_TEMPERATURE_H_
#define _APP_TEMPERATURE_H_
#include <rtthread.h>
#include <finsh.h>
#include "common.h"
#include "param_config.h"
#include "ble_pub.h"
#include "drv_oled.h"
#include "belon_ble.h"
#if (CFG_BLE_VERSION == BLE_VERSION_5_2)
#include "app_ble.h"
#include "app_sdp.h"
#include "app_ble_init.h"
#endif
#if (BLE_APP_SEC)
#include "app_sec.h"
#endif
#include "kernel_mem.h"
/**
* 腋温计iT12
*/
#define BLE_TEMPERATURE_DEVICE_IT12 "iT12"
/**
* 耳温计iT19
*/
#define BLE_TEMPERATURE_DEVICE_IT19 "iT19"
/**
* 温度定时更新间隔时间
*/
#define BLE_TEMPERATURE_DETECT_INTERVAL 1000
/**
* 显示温度最小值 低于该值显示LOW
*/
#define BLE_TEMPERATURE_LIMIT_MIN 3200
/**
* 显示温度最大值 高于该值显示HIGH
*/
#define BLE_TEMPERATURE_LIMIT_MAX 4200
/**
* 霍尔按键检测GPIO
*/
#define BLE_TEMPERATURE_HALL_DETECT_PIN 38
/**
* 盒子电源控制GPIO
*/
#define BLE_TEMPERATURE_BOX_POWER_CTR 39
/**
* 检测到充电仓关闭后延迟多长时间关机
*/
#define BLE_TEMPERATURE_POWEROFF_TIMEOUT 3000 //ms
/**
* 进入绑定模式 等待多长时间进行BLE 设备扫描
*/
#define BLE_TEMPERATURE_BIND_MODE_TIMEOUT 8000 //ms
/**
* 霍尔按键检测时间间隔
*/
#define BLE_TEMPERATURE_HALL_DETECT_INTERVAL 50 //ms
/**
* 超时10s 都没有收到温度广播数据 回到等待测温页面
*/
#define BLE_TEMPERATURE_IDLE_MODE_TIMEOUT 10000 //ms
/**
* 配置文件easyflah KEY
*/
#define BLE_TEMPERATURE_FLASH_CONFIG_KEY "dev_cfg"
/**
* 测温记录 easyflah KEY
*/
#define BLE_TEMPERATURE_FLASH_RECORD_KEY "dev_record"
typedef enum
{
APP_MODE_NORMAL,
APP_MODE_BIND,
} app_temperature_mode_t;
typedef struct
{
uint8_t device_name[16];
uint8_t device_mac[6];
uint16_t temperature_body;
uint16_t temperature_obj;
uint16_t temperature_env;
uint16_t batt_val;
uint16_t device_state;
}app_temperature_info_t;
/**
* BOX 参数
*/
typedef struct
{
uint8_t bind_mac[6];
uint16_t detect_interval;
}app_dev_info_t;
typedef struct
{
uint64_t timestamp;
uint16_t temperature_value;
}app_detect_record_t;
typedef enum
{
UI_IDLE,
UI_WAIT_TEMPERATURE,
UI_BOX_BATTERY,
UI_BOX_BIND,
UI_SHOW_TEMPERATURE,
UI_SHOW_DEVICE_INFO,
UI_SHOW_MEMORY_INFO
}app_ui_mode;
void temperature_init(void);
void temperature_adv_callback(recv_adv_t *r_ind);
void app_enter_bind_mode(bool enter);
/**
* 保存最新的一次记录
*/
void temperature_save_record(app_detect_record_t *record);
/**
* 读取最新的一次记录
*/
void temperature_read_record(app_detect_record_t *record);
void app_enter_ui(app_ui_mode mode);
#endif //_APP_TEMPERATURE_H_