按要求更新UI,添加音频播放接口,添加通过环形队列保存温度数据,并计算方差判断稳定是否稳定

This commit is contained in:
helloyifa 2025-04-21 18:02:49 +08:00
parent 01d731d41c
commit 9d6c0206e4
10 changed files with 1753 additions and 140 deletions

View File

@ -7,13 +7,26 @@
#include "drv_oled.h"
#include <rtthread.h>
#include <rtdevice.h>
#include "sys_ctrl_pub.h"
#include "sys_ctrl.h"
#include "target_util_pub.h"
#include "drv_model_pub.h"
#include "app_temperature.h"
#include "app_voice_player.h"
#ifdef PKG_USING_EASYFLASH
#include "easyflash.h"
#endif
#include "saradc_intf.h"
#include "saradc_pub.h"
#include "ring_queue.h"
static app_temperature_info_t temperature_info;
static app_dev_info_t dev_info;
static app_temperature_mode_t app_mode = APP_MODE_NORMAL;
static beken_timer_t timer_detect;
static beken_timer_t timer_hall_detect;
@ -21,25 +34,27 @@ static beken_timer_t timer_poweroff;
static beken_timer_t timer_bind;
static beken_timer_t timer_idle;
//extern uint8_t ble_active;
//static uint8_t actv_idx;
int Temp,Temp2,lastTemp;
int temp0,temp1,temp2;
uint8_t tempstr[5];
uint8_t tempstr1[5];
uint8_t tempstr11[5];
uint8_t tempstr2[5];
uint8_t batstr1[5];
uint8_t batstr2[5]="%";
uint8_t batstr3[5]=" ";
char *endPtr;
int start_bind_detect = 0;
int hall_key_down_count = 0;
int hall_io_state = 0;
static ADC_OBJ box_batt_adc;
static int box_battery_percent = -1;
uint16_t last_body_temp = 0;
rt_thread_t tid_show_wait_temp;
static app_ui_mode app_mode = UI_IDLE;
rt_thread_t tid_show_detect_temp;
static RingQueue ring_queue;
/**
*
*/
uint8_t ble_device_mac[6] = {0xe5, 0xe6, 0xb6, 0x09, 0x28, 0x37};
//uint8_t ble_device_name[12] = {0};
int ble_device_rssi = -100;
int ble_found_bind_dev = 0;
/**
@ -107,15 +122,16 @@ void temperature_adv_callback(recv_adv_t *r_ind)
//不等于 IT12的 跳过!
return;
}
#if 1
bk_printf("\r\n");
bk_printf("ble dev (%s): %02x:%02x:%02x:%02x:%02x:%02x,rssi:%d\r\n",str_name,r_ind->adv_addr[0], r_ind->adv_addr[1], r_ind->adv_addr[2],
r_ind->adv_addr[3], r_ind->adv_addr[4], r_ind->adv_addr[5],rssi);
#endif
//如果当前是绑定模式 则收集BLE 测温设备 判断信号值,然后绑定
if(app_mode == APP_MODE_BIND){
if(app_mode == UI_BOX_BIND){
//简单匹配 选择信号值最大的
bk_printf("app_mode == UI_BOX_BIND\r\n");
if(rssi > ble_device_rssi){
ble_found_bind_dev = 1;
ble_device_rssi = rssi;
@ -134,8 +150,19 @@ void temperature_adv_callback(recv_adv_t *r_ind)
{
return;
}
//复制设备名称
rt_memset(temperature_info.device_name,0,sizeof(temperature_info.device_name));
rt_memcpy(temperature_info.device_name,str_name,sizeof(str_name));
//rt_strcmp((char*)str_name,(char*)temperature_info.device_name);
bk_printf("!!!ble_device : %s %s \r\n",str_name,temperature_info.device_name);
rtos_reload_timer(&timer_idle);
//在超时或者等待温度页面 第一次接受到温度 显示设备信息
if(app_mode == UI_IDLE || app_mode == UI_WAIT_TEMPERATURE || app_mode == UI_SHOW_MEMORY_INFO){
bk_printf("!app_mode : %d \r\n",app_mode);
app_enter_ui(UI_SHOW_DEVICE_INFO);
}
//int i;
//for (i = 0; i < r_ind->data_len; i++)
//{
@ -194,30 +221,289 @@ void temperature_adv_callback(recv_adv_t *r_ind)
p += data_len; // p之前已经移动到数据部分开始处此时加上数据长度让指针移动到下一个AD结构
}
}
uint16_t last_body_temp = 0;
void timer_temp_run_callback(void *arg){
//如果当前进入了绑定模式 则不刷新温度
if(app_mode == APP_MODE_BIND){
return;
}
//如果当前温度和之前相同 不刷新温度
uint16_t temp_body = temperature_info.temperature_body;
if(last_body_temp == temp_body){
return;
//return;
}
last_body_temp = temp_body;
//添加数据到队列,数量足够后取出所有温度数据 计算方差 如果小于 N N可以趋近于0 暂定小于100 则表示温度稳定
RingQueue_enqueue(&ring_queue,(int)last_body_temp);
int size = RingQueue_size(&ring_queue);
bk_printf("RingQueue_size -> %d \r\n", size);
if (RingQueue_isFull(&ring_queue)) {
int i = 0;
int t_datas[MAX_SIZE];
for(i = 0;i < MAX_SIZE; i++){
int value = 0;
RingQueue_dequeue(&ring_queue,&value);
t_datas[i] = value;
bk_printf("%d ", value);
}
bk_printf("\r\n", size);
//计算平均值
int sum = 0;
for(i = 0;i < MAX_SIZE; i++){
sum += t_datas[i];
}
int mean_value = sum / MAX_SIZE;
bk_printf("mean_value:%d \r\n", mean_value);
//计算方差
double sumOfSquares = 0;
for (int i = 0; i < MAX_SIZE; i++) {
sumOfSquares += (t_datas[i] - mean_value) * (t_datas[i] - mean_value);
}
int variance_value = sumOfSquares / MAX_SIZE; // 注意这里是n而不是n-1对于样本方差
bk_printf("variance_value:%d \r\n", variance_value);
}
app_enter_ui(UI_SHOW_TEMPERATURE);
}
void timer_temp_run_callback(void *arg){
//如果当前进入了绑定模式 则不刷新温度
if(app_mode == UI_BOX_BIND){
return;
}
if(app_mode == UI_BOX_BATTERY){
return;
}
//if(app_mode == UI_SHOW_DEVICE_INFO){
// return;
//}
}
/**
* ...
*/
static void app_temperature_ui_wait_entry(void *parameter)
{
int i = 0;
int ui_wait_step = 0;
while (1)
{
if(i >2000){
i = 0;
}
i++;
if(app_mode == UI_WAIT_TEMPERATURE || app_mode == UI_IDLE ||UI_SHOW_MEMORY_INFO){
if(i%50==0){ //500ms
OLED_Clear();
switch (ui_wait_step)
{
case 0:
OLED_ShowString(0+20,0,(u8 *)"",32,1);
ui_wait_step =1;
break;
case 1:
OLED_ShowString(0+20,0,(u8 *)".",32,1);
ui_wait_step =2;
break;
case 2:
OLED_ShowString(0+20,0,(u8 *)"..",32,1);
ui_wait_step =3;
break;
case 3:
OLED_ShowString(0+20,0,(u8 *)"...",32,1);
ui_wait_step =0;
break;
break;
default:
break;
}
OLED_Refresh();
}
rt_thread_mdelay(10);
}
}
rt_kprintf("ui_wait finish !!!\r\n");
}
void app_show_box_battery(){
rt_kprintf("UI->app_show_box_battery\r\n");
OLED_Clear();
char str_batt[12] = {0};
rt_sprintf(str_batt,"%d%",box_battery_percent);
extern unsigned char f35x40_box_ico[];
//满电显示屏显示不全 缩小字体显示
if(box_battery_percent >= 100){
OLED_ShowPicture(3,5,35,40,(u8 *)&f35x40_box_ico,1);
OLED_ShowString(38,15,(u8 *)str_batt,16,1);
}else{
OLED_ShowPicture(1,3,35,40,(u8 *)&f35x40_box_ico,1);
//OLED_DrawCircle(15, 20, 10);
//OLED_DrawCircle(15, 20, 7);
OLED_ShowString(36,8,(u8 *)str_batt,24,1);
}
OLED_Refresh();
}
/**
*
*/
void app_show_memory_detect_info(){
rt_kprintf("UI->app_show_last_detect_info\r\n");
OLED_Clear();
OLED_ShowString(2,1,(u8 *)"M1",16,1);
OLED_ShowString(0,18,(u8 *)"36.5 C",24,1);
OLED_DrawCircle(55,15,4);
OLED_Refresh();
}
/**
*
*/
void app_show_temperature_device_info(){
rt_kprintf("UI->app_show_temperature_device_info\r\n");
OLED_Clear();
//char str_device[16]={0};
//rt_sprintf(str_device,"%s",temperature_info.device_name);
OLED_ShowString(0,5,(u8 *)temperature_info.device_name,16,1);
extern unsigned char f40x20_box_batt[];
OLED_ShowPicture(0,23,40,20,(u8 *)&f40x20_box_batt,1);
char str_batt[16]={0};
rt_sprintf(str_batt,":%d%",temperature_info.batt_val);
OLED_ShowString(35,25,(u8 *)str_batt,16,1);
OLED_Refresh();
rt_thread_mdelay(2000);
//app_enter_ui(UI_WAIT_TEMPERATURE);
}
/**
*
*/
void app_show_wait_temperature(){
rt_kprintf("UI->app_show_wait_temperature\r\n");
if(tid_show_wait_temp){
rt_thread_detach(tid_show_wait_temp);
tid_show_wait_temp = NULL;
}
tid_show_wait_temp = rt_thread_create("wait_temp",app_temperature_ui_wait_entry,RT_NULL,1024 * 8,21,10);
if (tid_show_wait_temp)
rt_thread_startup(tid_show_wait_temp);
}
static void app_temperature_ui_detect_entry(void *parameter)
{
int i = 0;
int ui_show_point = 0;
while (1)
{
if(i >2000){
i = 0;
}
i++;
//1s刷新一次 用于 屏幕上的点 闪烁
if(i%100==0){ //1000ms
OLED_Clear();
//rt_kprintf("UI->app_ui_show_temperautre \r\n");
uint16_t temp_body = last_body_temp;
char str_temp[8]={0};
rt_sprintf(str_temp,"%d.%d \n",temp_body/100,temp_body/10%10);
//rt_kprintf("%s\r\n",str_temp);
if(temp_body > BLE_TEMPERATURE_LIMIT_MIN && temp_body < BLE_TEMPERATURE_LIMIT_MAX){
OLED_Clear();
rt_memset(str_temp,0,sizeof(str_temp));
rt_sprintf(str_temp,"%d",temp_body/100);//整数
OLED_ShowString(0,0+10,(u8*)str_temp,32,1);
OLED_ShowChar(32,0+10,'.',32,1);//小数点
rt_memset(str_temp,0,sizeof(str_temp));
rt_sprintf(str_temp,"%d",temp_body/10%10);//小数点后一位
OLED_ShowString(40,0+10,(u8*)str_temp,32,1);
//屏幕上的点(度) 闪烁
if(ui_show_point){
OLED_DrawCircle(62,10,4);
OLED_ShowChar(61,16,'C',24,1);
ui_show_point = 0;
}else{
ui_show_point = 1;
}
}
if(temp_body < BLE_TEMPERATURE_LIMIT_MIN){
OLED_Clear();
//OLED_ShowString(0+10,0+5,(u8 *)"LOW",32,1);
OLED_ShowChinese(3,5,0,32,1); //低
OLED_ShowChinese(35,5,2,32,1);//温
}
if(temp_body > BLE_TEMPERATURE_LIMIT_MAX){
OLED_Clear();
//OLED_ShowString(0+5,0+5,(u8 *)"HIGH",32,1);
OLED_ShowChinese(3,5,9,32,1); //超
OLED_ShowChinese(35,5,2,32,1);//温
}
OLED_Refresh();
}
rt_thread_mdelay(10);
//}
}
rt_kprintf("ui_detect finish !!!\r\n");
}
/**
*
*/
void app_show_detect_temperature(){
rt_kprintf("UI->app_show_detect_temperature\r\n");
//退出正在进行的动画线程
if(tid_show_wait_temp){
rt_thread_detach(tid_show_wait_temp);
tid_show_wait_temp = NULL;
}
//退出正在进行测温的动画线程
if(tid_show_detect_temp){
rt_thread_detach(tid_show_detect_temp);
tid_show_detect_temp = NULL;
}
tid_show_detect_temp = rt_thread_create("do_detect",app_temperature_ui_detect_entry,RT_NULL,1024 * 8,21,10);
if (tid_show_detect_temp)
rt_thread_startup(tid_show_detect_temp);
}
void app_ui_show_bind(){
rt_kprintf("UI->app_ui_show_bind \r\n");
OLED_Clear();
//OLED_ShowString(0+5,0+5,(u8 *)"BIND",32,1);
OLED_ShowChinese(3,3,3,32,1); //绑
OLED_ShowChinese(35,3,4,32,1);//定
OLED_Refresh();
}
/**
*
*/
void app_ui_show_temperautre(){
rt_kprintf("UI->app_ui_show_temperautre \r\n");
uint16_t temp_body = last_body_temp;
char str_temp[8]={0};
rt_sprintf(str_temp,"%d.%d \n",temp_body/100,temp_body/10%10);
rt_kprintf("%s\r\n",str_temp);
//rt_kprintf("Temp:%d,Temp2:%d\r\n",Temp,Temp2);
//rt_kprintf("Temp:%d,Temp2:%d\r\n",Temp,Temp2);
if(temp_body > BLE_TEMPERATURE_LIMIT_MIN && temp_body < BLE_TEMPERATURE_LIMIT_MAX){
OLED_Clear();
rt_memset(str_temp,0,sizeof(str_temp));
@ -229,39 +515,107 @@ void timer_temp_run_callback(void *arg){
rt_memset(str_temp,0,sizeof(str_temp));
rt_sprintf(str_temp,"%d",temp_body/10%10);//小数点后一位
OLED_ShowString(40,0+10,(u8*)str_temp,32,1);
OLED_DrawCircle(58,5+6,4);
OLED_ShowChar(56,8+10,'C',24,1);
OLED_DrawCircle(60,10,4);
OLED_ShowChar(58,16,'C',24,1);
}
if(temp_body < BLE_TEMPERATURE_LIMIT_MIN){
OLED_Clear();
OLED_ShowString(0+10,0+5,(u8 *)"LOW",32,1);
//OLED_ShowString(0+10,0+5,(u8 *)"LOW",32,1);
OLED_ShowChinese(3,5,0,32,1); //低
OLED_ShowChinese(35,5,2,32,1);//温
}
if(temp_body > BLE_TEMPERATURE_LIMIT_MAX){
OLED_Clear();
OLED_ShowString(0+5,0+5,(u8 *)"HIGH",32,1);
//OLED_ShowString(0+5,0+5,(u8 *)"HIGH",32,1);
OLED_ShowChinese(3,5,9,32,1); //超
OLED_ShowChinese(35,5,2,32,1);//温
}
lastTemp=Temp;
OLED_Refresh();
}
void app_enter_bind_mode(bool enter){
if(enter){
app_mode = APP_MODE_BIND;
rt_memset(ble_device_mac,0,sizeof(ble_device_mac));
//收到的信号值 区域0 为越好
ble_device_rssi = -100;
//清除找到绑定设备标志
ble_found_bind_dev = 0;
OLED_Clear();
OLED_ShowString(0+5,0+5,(u8 *)"BIND",32,1);
}else{
app_mode = APP_MODE_NORMAL;
OLED_Clear();
OLED_ShowString(0+20,0,(u8 *)"...",32,1);
void app_enter_ui(app_ui_mode mode){
if(app_mode == mode){
return;
}
OLED_Refresh();
app_mode = mode;
//等待其它页面线程退出
rt_thread_mdelay(50);
if(tid_show_wait_temp){
rt_thread_delete(tid_show_wait_temp);
tid_show_wait_temp = NULL;
}
//退出正在进行测温的动画线程
if(tid_show_detect_temp){
rt_thread_detach(tid_show_detect_temp);
tid_show_detect_temp = NULL;
}
switch (mode)
{
case UI_BOX_BATTERY:
app_show_box_battery();
//app_show_do_detect_temperature();
break;
case UI_SHOW_DEVICE_INFO:
app_show_temperature_device_info();
break;
case UI_IDLE:
case UI_WAIT_TEMPERATURE:
app_show_wait_temperature();
break;
case UI_BOX_BIND:
app_ui_show_bind();
break;
case UI_SHOW_TEMPERATURE:
//app_ui_show_temperautre();
app_show_detect_temperature();
break;
case UI_SHOW_MEMORY_INFO:
app_show_memory_detect_info();
break;
default:
break;
}
}
/**
*
*/
void temperature_save_record(app_detect_record_t *record){
EfErrCode result = EF_NO_ERR;
result = ef_set_env(BLE_TEMPERATURE_FLASH_RECORD_KEY, (char *)record);
result = ef_save_env();
if (result == EF_NO_ERR)
{
rt_kprintf("temperature_save_record success !!!\r\n");
}else{
rt_kprintf("temperature_save_record failed !!!\r\n");
}
}
/**
*
*/
void temperature_read_record(app_detect_record_t *record){
rt_memset(record,0,sizeof(app_dev_info_t));
/*获取easy flash存入的数据*/
char *t = ef_get_env(BLE_TEMPERATURE_FLASH_RECORD_KEY);
if(t != NULL){
rt_memcpy(&dev_info,t,sizeof(app_dev_info_t));
}else{
rt_kprintf("temperature_read_record error\r\n");
}
}
void box_show_ble_device_info(app_temperature_info_t *temperature_info){
OLED_Clear();
//OLED_ShowString(0+5,0+5,(u8 *)"BIND",32,1);
OLED_DrawCircle(10,20,10);
OLED_ShowString(22,0+5,(u8 *)"30%",24,1);
rt_thread_mdelay(1500);
}
@ -277,6 +631,7 @@ void box_poweroff_timeout_callback(void *arg){
*/
void box_bind_timeout_callback(void *arg){
rtos_stop_timer(&timer_bind);
rt_kprintf("box_bind callback\r\n");
if(ble_found_bind_dev){
bk_printf("BIND: %02x:%02x:%02x:%02x:%02x:%02x \r\n",ble_device_mac[0],ble_device_mac[1], ble_device_mac[2],
ble_device_mac[3], ble_device_mac[4],ble_device_mac[5]);
@ -289,23 +644,29 @@ void box_bind_timeout_callback(void *arg){
if(result == EF_NO_ERR)
{
OLED_Clear();
OLED_ShowString(0+15,0+5,(u8 *)"OK",32,1);
//OLED_ShowString(0+15,0+5,(u8 *)"OK",32,1);
OLED_ShowChinese(3,3,5,32,1); //成
OLED_ShowChinese(35,3,6,32,1);//功
OLED_Refresh();
rt_thread_mdelay(1000);
}
}
app_enter_bind_mode(false);
//app_enter_bind_mode(false);
app_enter_ui(UI_IDLE);
rt_kprintf("exit bind mode !!!\r\n");
}
/*
广
*/
void timer_app_idle_callback(void *arg){
if(app_mode == APP_MODE_BIND){
if(app_mode == UI_BOX_BIND){
return;
}
app_enter_bind_mode(false);
//app_enter_bind_mode(false);
app_enter_ui(UI_IDLE);
rt_kprintf("back idle mode !!!\r\n");
}
@ -341,9 +702,15 @@ void timer_hall_detect_callback(void *arg){
rt_kprintf("enter bind !!!\r\n");
start_bind_detect = 0;
hall_key_down_count = 0;
app_enter_bind_mode(true);
rt_memset(ble_device_mac,0,sizeof(ble_device_mac));
//收到的信号值 区域0 为越好
ble_device_rssi = -100;
//清除找到绑定设备标志
ble_found_bind_dev = 0;
//app_enter_bind_mode(true);
//进入绑定模式 并启动超时退出
app_enter_ui(UI_BOX_BIND);
rtos_start_timer(&timer_bind);
}
}
@ -395,31 +762,84 @@ void temperature_dev_config_init(){
}
}
/****channel 1 - 7***/
static void box_adc_detect_callback(int new_mv, void *user_data)
{
static int cnt = 0;
box_batt_adc.user_data = (void*)new_mv;
if(cnt++ >= 20)
{
cnt = 0;
rt_kprintf("adc channel%d voltage:%d,%x\r\n",box_batt_adc.channel,new_mv,box_batt_adc.user_data);
int bat_volt = new_mv*2;
int batt_min = 3300;
int batt_max = 4200;
rt_kprintf("battery_calc --> bat_volt:%d\n",bat_volt);
if (bat_volt < batt_min) {
box_battery_percent=0;
} else if (bat_volt > batt_max) {
box_battery_percent= 100;
} else {
box_battery_percent= ((float)(bat_volt - batt_min) / (batt_max - batt_min)) * 100;
printf("battery_calc @@@ --> percent:%d\n",box_battery_percent);
}
if(box_battery_percent < 0){
box_battery_percent = 0;
}
rt_kprintf("battery_calc --> percent:%d\n",box_battery_percent);
adc_obj_stop(&box_batt_adc);
}
}
void box_init_power(){
int channel;
channel = 7;
saradc_work_create();
adc_obj_init(&box_batt_adc, box_adc_detect_callback, channel, &box_batt_adc);
adc_obj_start(&box_batt_adc);
}
static void charger_module_enable(UINT32 enable)
{
sctrl_analog_set(SCTRL_ANALOG_CTRL4, (sctrl_analog_get(SCTRL_ANALOG_CTRL4) & ~(1 << 12)) | (!!enable << 12));
}
void temperature_init(void){
// 查询绑定设备
uint8_t test_device_mac[6] = {0xe5, 0xe6, 0xb6, 0x09, 0x28, 0x37};
rt_memcmp(dev_info.bind_mac, test_device_mac, sizeof(test_device_mac));
box_init_power();
//初始化GPIO
gpio_init();
//初始化OLED显示屏
OLED_Init();
//OLED_Clear();
// OLED_ShowChar(32,0+10,'.',32,1);
// OLED_Refresh();
// rt_thread_mdelay(100);
// OLED_Clear();
// OLED_ShowChar(56,8+10,'C',24,1);
// OLED_Refresh();
// bk_gpio_output(20,0);
// bk_gpio_output(21,0);
// oled_show_temp(370,4);
// user_app_start();
rt_thread_mdelay(500);
while(1){
if(box_battery_percent >= 0){
break;
}
rt_thread_mdelay(20);
}
app_enter_ui(UI_BOX_BATTERY);
rt_thread_mdelay(2000);
temperature_dev_config_init();
app_enter_bind_mode(false);
//app_enter_bind_mode(false);
RingQueue_init(&ring_queue);
//app_show_last_detect_info();
box_switch_init();
app_enter_ui(UI_SHOW_MEMORY_INFO);
//app_enter_ui(UI_WAIT_TEMPERATURE);
//初始化BLE
belon_ble_active();
@ -429,14 +849,54 @@ void temperature_init(void){
//启动BLE SLAVE 发广播提供APP 连接进行设置
belon_ble_init_adv();
//启动定时器 定时更新温度显示
rtos_init_timer(&timer_detect, 1000, timer_temp_run_callback, NULL);
rtos_init_timer(&timer_detect, BLE_TEMPERATURE_DETECT_INTERVAL, timer_temp_run_callback, NULL);
rtos_start_timer(&timer_detect);
//霍尔检测 100ms一次 中断不好使 先这样处理
rtos_init_timer(&timer_hall_detect, 100, timer_hall_detect_callback, NULL);
//初始化HALL按键检测
box_switch_init();
//霍尔检测 50ms一次 中断不好使 先这样处理
rtos_init_timer(&timer_hall_detect, BLE_TEMPERATURE_HALL_DETECT_INTERVAL, timer_hall_detect_callback, NULL);
rtos_start_timer(&timer_hall_detect);
rtos_init_timer(&timer_poweroff, BLE_TEMPERATURE_POWEROFF_TIMEOUT, box_poweroff_timeout_callback, NULL);
rtos_init_timer(&timer_bind, BLE_TEMPERATURE_BIND_MODE_TIMEOUT, box_bind_timeout_callback, NULL);
rtos_init_timer(&timer_idle, BLE_TEMPERATURE_IDLE_MODE_TIMEOUT, timer_app_idle_callback, NULL);
charger_module_enable(0);
//sctrl_ctrl(CMD_SCTRL_USB_CHARGE_STOP, 0);
voice_player_mute(1);
voice_player_init();
//app_tcp_init();
//app_tcp_connect();
//char m_data[128] ={0x12};
//app_tcp_send(m_data,sizeof(m_data));
//voice_play(1);
//rt_thread_mdelay(1000);
//voice_play(2);
//rt_thread_mdelay(1000);
//voice_play(3);
//rt_thread_mdelay(1000);
/*
voice_play(4);
rt_thread_mdelay(1000);
voice_play(5);
rt_thread_mdelay(1000);
voice_play(6);
rt_thread_mdelay(1000);
voice_play(7);
rt_thread_mdelay(1000);
voice_play(8);
rt_thread_mdelay(1000);
voice_play(9);
rt_thread_mdelay(1000);
voice_play(10);
rt_thread_mdelay(1000);
voice_play(11);
rt_thread_mdelay(1000);
voice_play(0);*/
}

View File

@ -20,27 +20,61 @@
#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
#define BLE_TEMPERATURE_DETECT_INTERVAL 2000
/**
* 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 5000 //ms
/**
*
*/
#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
{
@ -50,21 +84,56 @@ typedef enum
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_

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,10 @@
#ifndef _APP_VOICE_PLAYER_H_
#define _APP_VOICE_PLAYER_H_
#include <rtthread.h>
void voice_player_init(void);
void voice_play(int index);
void voice_player_mute(int en);
#endif //_APP_VOICE_PLAYER_H_

View File

@ -349,6 +349,7 @@ const unsigned char asc2_2412[][36]={
{0x00,0x00,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x82,0x44,0x28,0x10,0x00,0x00,0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00},/*">",30*/
{0x00,0xC0,0x20,0x20,0x10,0x10,0x10,0x10,0x30,0xE0,0xC0,0x00,0x00,0x03,0x03,0x00,0x00,0xF0,0x10,0x08,0x0C,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00,0x00},/*"?",31*/
{0x00,0x00,0x00,0xC0,0x40,0x60,0x20,0x20,0x20,0x40,0xC0,0x00,0x00,0xFC,0xFF,0x01,0xF0,0x0E,0x03,0xC1,0xFE,0x03,0x80,0x7F,0x00,0x01,0x07,0x0E,0x08,0x11,0x11,0x10,0x11,0x09,0x04,0x02},/*"@",32*/
#if 1
{0x00,0x00,0x00,0x00,0x80,0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x7C,0x43,0x40,0x47,0x7F,0xF8,0x80,0x00,0x00,0x10,0x18,0x1F,0x10,0x00,0x00,0x00,0x00,0x13,0x1F,0x1C,0x10},/*"A",33*/
{0x20,0xE0,0xE0,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0xFF,0xFF,0x10,0x10,0x10,0x10,0x18,0x2F,0xE7,0x80,0x00,0x10,0x1F,0x1F,0x10,0x10,0x10,0x10,0x10,0x18,0x0F,0x07,0x00},/*"B",34*/
{0x00,0x00,0x80,0xC0,0x40,0x20,0x20,0x20,0x20,0x60,0xE0,0x00,0x00,0xFC,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x01,0x07,0x0E,0x18,0x10,0x10,0x10,0x08,0x04,0x03,0x00},/*"C",35*/
@ -412,7 +413,7 @@ const unsigned char asc2_2412[][36]={
{0x00,0x00,0x04,0x0C,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEF,0x28,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x60,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"}",93*/
{0x00,0x18,0x06,0x02,0x02,0x04,0x08,0x10,0x20,0x20,0x30,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/
#endif
};
@ -452,6 +453,7 @@ const unsigned char asc2_3216[][64]={
{0x00,0x40,0xE0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x0E,0x1C,0x38,0x70,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0x70,0x38,0x1C,0x1E,0x0F,0x07,0x03,0x00,0x00,0x04,0x0E,0x0E,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*">",30*/
{0x00,0x00,0x00,0x80,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x1E,0x1F,0x1F,0x1F,0x01,0x00,0x80,0xC1,0xF3,0xFF,0xFF,0x7F,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1F,0x1F,0x1F,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00},/*"?",31*/
{0x00,0x00,0x00,0x00,0x80,0x80,0xC0,0x40,0x40,0x40,0x40,0xC0,0x80,0x80,0x00,0x00,0x00,0xF8,0xFE,0x0F,0xC3,0xF1,0xF8,0x3C,0x0C,0xCC,0xFC,0xFC,0x3D,0x0F,0xFE,0xF8,0x00,0x7F,0xFF,0xC0,0x3F,0x7F,0x7F,0x60,0x70,0x3F,0x7F,0x67,0x60,0x3C,0x1F,0x07,0x00,0x00,0x01,0x03,0x07,0x06,0x04,0x0C,0x08,0x0C,0x04,0x06,0x02,0x02,0x00,0x00},/*"@",32*/
#if 1
{0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFC,0xFF,0xFF,0x1F,0xFF,0xFF,0xF8,0xC0,0x00,0x00,0x00,0x00,0x80,0xF0,0xFE,0xFF,0x7F,0x1F,0x1C,0x1C,0x1C,0x1F,0xFF,0xFF,0xFE,0xE0,0x00,0x00,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07,0x07,0x07},/*"A",33*/
{0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x80,0x80,0x80,0x80,0x81,0xC1,0xFF,0xFF,0x7F,0x3E,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0x03,0x03,0x87,0xFF,0xFE,0xFC,0x78,0x00,0x07,0x07,0x07,0x07,0x06,0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x03,0x01,0x00},/*"B",34*/
{0x00,0x00,0x00,0x00,0x80,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0xE0,0xFC,0xFF,0xFF,0x1F,0x03,0x01,0x00,0x00,0x01,0x03,0x3F,0x3F,0x3F,0x38,0x00,0x1F,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x80,0xF8,0xF8,0xF8,0x38,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x0E,0x0E,0x0E,0x0F,0x07,0x07,0x03,0x01,0x00},/*"C",35*/
@ -514,38 +516,54 @@ const unsigned char asc2_3216[][64]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00},/*"|",92*/
{0x00,0x00,0x08,0x08,0xF8,0xF8,0xF8,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x7F,0x7F,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"}",93*/
{0x00,0x00,0x38,0x3C,0x1E,0x0E,0x0E,0x1E,0x1C,0x38,0x78,0x70,0x78,0x3E,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/
#endif
};
//16*16 点阵 黑体
const unsigned char Hzk1[][32]={
{0x10,0x60,0x02,0x8C,0x00,0x0E,0x22,0x12,0x0A,0xC2,0x0A,0x12,0x22,0x0E,0x00,0x00,0x04,0x04,0x7E,0x01,0x20,0x21,0x11,0x09,0x05,0xFF,0x05,0x09,0x11,0x21,0x20,0x00},/*"Éî",0*/
{0x20,0x20,0x20,0xFF,0x20,0x20,0x00,0xFF,0x00,0x00,0xFE,0x00,0x00,0xFF,0x00,0x00,0x10,0x30,0x10,0x0F,0x08,0x88,0x60,0x1F,0x00,0x00,0x3F,0x00,0x00,0xFF,0x00,0x00},/*"ÛÚ",1*/
{0x00,0x02,0x02,0xF2,0x12,0x12,0x12,0xF2,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x0F,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00},/*"¿É",2*/
{0x80,0x64,0x2C,0x34,0x24,0x24,0xEC,0x32,0x22,0x22,0x32,0x2E,0x23,0xA2,0x60,0x00,0x00,0x41,0x21,0x91,0x89,0x87,0x4D,0x55,0x25,0x25,0x55,0x4D,0x81,0x80,0x80,0x00},/*"°®",3*/
{0x10,0x10,0xD0,0xFF,0x90,0x42,0x2A,0x52,0x4E,0x40,0x47,0x58,0x24,0x52,0x88,0x00,0x04,0x03,0x00,0xFF,0x40,0x41,0x5F,0x69,0x49,0x49,0x49,0x69,0x5F,0x40,0x40,0x00},/*"³È",4*/
{0x24,0x24,0xA4,0xFE,0xA3,0x22,0x00,0x22,0xCC,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x08,0x06,0x01,0xFF,0x00,0x01,0x04,0x04,0x04,0x04,0x04,0xFF,0x02,0x02,0x02,0x00},/*"¿Æ",5*/
{0x10,0x10,0x10,0xFF,0x10,0x90,0x08,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x08,0x00,0x04,0x44,0x82,0x7F,0x01,0x80,0x80,0x40,0x43,0x2C,0x10,0x28,0x46,0x81,0x80,0x00},/*"¼¼",6*/
{0x04,0x04,0x04,0x84,0xE4,0x3C,0x27,0x24,0x24,0x24,0x24,0xE4,0x04,0x04,0x04,0x00,0x04,0x02,0x01,0x00,0xFF,0x09,0x09,0x09,0x09,0x49,0x89,0x7F,0x00,0x00,0x00,0x00},/*"ÓÐ",7*/
{0x00,0xFE,0x22,0x5A,0x86,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,0x00,0xFF,0x04,0x08,0x07,0x00,0xFF,0x40,0x20,0x03,0x0C,0x14,0x22,0x41,0x40,0x00},/*"ÏÞ",8*/
{0x00,0x80,0x40,0x20,0x18,0x06,0x80,0x00,0x07,0x18,0x20,0x40,0x80,0x00,0x00,0x00,0x01,0x00,0x20,0x70,0x28,0x26,0x21,0x20,0x20,0x24,0x38,0x60,0x00,0x01,0x01,0x00},/*"¹«",9*/
{0x00,0x10,0x12,0x92,0x92,0x92,0x92,0x92,0x92,0x12,0x12,0x02,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x3F,0x00,0x40,0x80,0x7F,0x00,0x00,0x00},/*"˾",10*/
//测(0) 量(1) 中(2)
{0x00,0x64,0xC4,0x0C,0x00,0xFC,0x04,0xE4,0x04,0xFC,0x00,0xF8,0x00,0xFE,0xFE,0x00,0x00,0x60,0x18,0x06,0x40,0x67,0x38,0x0F,0x18,0x67,0x00,0x0F,0x40,0x7F,0x7F,0x00},/*"测",0*/
{0x00,0x40,0x40,0x7C,0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0x7C,0x40,0x40,0x00,0x00,0x40,0x50,0x5F,0x5B,0x5B,0x5B,0x7F,0x7F,0x5B,0x5B,0x5B,0x5F,0x40,0x40,0x00},/*"量",1*/
{0x00,0x00,0xF0,0x10,0x10,0x10,0x10,0xFE,0xFE,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0xFF,0xFF,0x02,0x02,0x02,0x02,0x07,0x00,0x00},/*"中",2*/
};
const unsigned char Hzk2[][72]={
{0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFC,0x84,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"ÖÐ",0*/
};
//32*32 点阵 黑体加粗
const unsigned char Hzk3[][128]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFF,0xFF,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"ÖÐ",0*/
{0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFC,0xFC,0x7C,0x0C,0x00,0xE0,0xE0,0xE0,0x60,0x60,0x60,0x60,0x60,0xE0,0xF0,0xF0,0x30,0x30,0x38,0x38,0x38,0x20,0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0xFC,0x7F,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xFF,0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x80,0xC0,0xC0,0x80,0x07,0x7F,0xFF,0xFC,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,0x7F,0x00,0x00,0x1C,0x3F,0x3F,0x1F,0x0F,0x0F,0x1F,0x3D,0x78,0x70,0x20,0x03,0x0F,0x1F,0x3E,0x3C,0x70,0x7F,0x3F,0x1E,0x02},/*"低",0*/
{0x00,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x7C,0x7C,0x7C,0x7C,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x7E,0x7E,0x7E,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x7E,0x7E,0x7E,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE,0x06,0x06,0x06,0xE6,0xE6,0xE6,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0xE6,0xE6,0xE6,0x06,0x06,0x06,0x06,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x7F,0x7F,0x7F,0x7F,0x00,0x00,0x00,0x07,0x07,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x00,0x30,0x70,0x70,0x7F,0x7F,0x3F,0x00,0x00},/*"高",1*/
{0x00,0x00,0x00,0x10,0x38,0x38,0x70,0xF0,0xE0,0x40,0x00,0xF8,0xF8,0xF8,0xF8,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x1C,0x3C,0x78,0x70,0x70,0x20,0x00,0x00,0x7F,0x7F,0x7F,0x7F,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x67,0x7F,0x7F,0x7F,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xFC,0xFC,0x7C,0x08,0x00,0xFC,0xFC,0xFC,0x1C,0x1C,0xFC,0xFC,0xFC,0x1C,0x1C,0xFC,0xFC,0xFC,0xFC,0x1C,0x1C,0xFC,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x18,0x3F,0x3F,0x1F,0x03,0x30,0x30,0x30,0x3F,0x3F,0x3F,0x30,0x30,0x3F,0x3F,0x3F,0x30,0x30,0x3F,0x3F,0x3F,0x3F,0x30,0x30,0x3F,0x3F,0x3F,0x30,0x30,0x30},/*"温",2*/
{0x00,0x00,0x00,0x00,0x00,0x80,0xF0,0xF8,0x78,0x18,0x00,0x00,0x80,0x80,0x80,0xFC,0xFC,0xFC,0x8C,0x80,0x80,0x80,0xE0,0xE0,0xE0,0x60,0x60,0xE0,0xE0,0xE0,0x60,0x00,0x00,0x00,0x70,0x78,0x7E,0x3F,0xA7,0xE1,0xF8,0xFE,0x3E,0x0E,0xC7,0xC1,0xC1,0xFF,0xFF,0xFF,0xC1,0xC1,0xC1,0x01,0xFF,0xFF,0xFF,0xE0,0xFC,0xFF,0x3F,0x03,0x00,0x00,0x00,0x00,0x10,0x70,0x78,0x7E,0x3F,0x37,0x31,0x30,0x18,0x18,0x30,0x30,0x30,0xFF,0xFF,0xFF,0x30,0x30,0x30,0x30,0xFF,0xFF,0xFF,0x00,0x03,0x0F,0xFF,0xFE,0xF8,0x00,0x00,0x00,0x04,0x0C,0x0C,0x0C,0x0E,0x06,0x06,0x06,0x07,0x63,0x73,0x7C,0x3F,0x1F,0x07,0x01,0x00,0x00,0x00,0x00,0x7F,0x7F,0x7F,0x02,0x07,0x07,0x07,0x03,0x01,0x00},/*"绑",3*/
{0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x9C,0xFE,0xFE,0xB8,0x90,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0xF1,0xF1,0xF1,0xF1,0x71,0x71,0x71,0x71,0x71,0x71,0x71,0x7F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF8,0xFE,0xFE,0x9C,0x04,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x00,0x00,0x00,0x00,0x00,0x20,0x30,0x78,0x7E,0x3F,0x0F,0x07,0x01,0x03,0x07,0x0F,0x0E,0x1C,0x1C,0x3F,0x3F,0x3F,0x3F,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x38,0x18,0x00},/*"定",4*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0xFC,0xFC,0x00,0x08,0x1C,0x3C,0xFC,0xF8,0x70,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0x03,0x03,0xFF,0xFF,0xFF,0xC3,0x03,0x03,0x83,0xF3,0xF3,0xE3,0x63,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x01,0x9F,0xFF,0xFF,0xF8,0xFE,0x3F,0x1F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x20,0x38,0x7E,0x7F,0x1F,0x07,0x00,0x02,0x0E,0x0E,0x0E,0x27,0x77,0x77,0x78,0x3C,0x1E,0x1E,0x0F,0x07,0x03,0x07,0x1F,0x3F,0x3C,0x78,0x78,0x7F,0x7F,0x3F,0x02},/*"成",5*/
{0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0x00,0x00,0x00,0x00,0xFC,0xFC,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0x0F,0x0E,0x0E,0x0E,0x0E,0xFF,0xFF,0xFF,0x0E,0x0E,0x0E,0x0E,0x0E,0xFE,0xFE,0xFE,0x02,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0xFF,0xFF,0xFF,0xC0,0xE0,0xE0,0x60,0x60,0x00,0x80,0xE0,0xFE,0xFF,0x7F,0x07,0x00,0x00,0x00,0x00,0xFC,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x03,0x03,0x03,0x03,0x01,0x01,0x01,0x00,0x00,0x20,0x70,0x78,0x7C,0x3E,0x1F,0x07,0x03,0x01,0x00,0x10,0x30,0x38,0x38,0x38,0x3F,0x1F,0x1F,0x01,0x00,0x00},/*"功",6*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xE0,0xE0,0x60,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0xF0,0xFC,0x7F,0x1F,0x07,0x07,0x06,0x06,0x06,0x06,0x06,0xFF,0xFF,0xFF,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x86,0xC6,0xF6,0xFF,0x7F,0x3F,0x7F,0xFE,0xF6,0xC6,0x86,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x70,0x70,0x70,0x78,0x38,0x1C,0x1E,0x0F,0x07,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x07,0x0F,0x1E,0x1E,0x3C,0x3C,0x38,0x38,0x08,0x00},/*"失",7*/
{0x00,0x00,0x00,0xE0,0xE0,0xE0,0xE0,0x60,0x60,0x60,0x60,0x60,0x60,0xE0,0xE0,0xE0,0x00,0x00,0x00,0xC0,0xFC,0xFC,0x78,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0xFE,0xFE,0xFE,0x04,0x00,0xFF,0xFF,0xFF,0xC0,0xF0,0xFC,0xFF,0xFF,0x83,0x03,0x03,0x03,0xFF,0xFF,0xFF,0x0F,0x03,0x07,0x07,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0xC0,0xFF,0xFF,0x3F,0x80,0x80,0x3F,0x3F,0x3F,0x00,0x01,0x01,0x07,0x3F,0xFF,0xF8,0xE0,0xFC,0xFF,0x3F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x38,0x3C,0x1E,0x1F,0x0F,0x03,0x01,0x01,0x03,0x07,0x0F,0x3E,0x3C,0x78,0x70,0x38,0x3C,0x1C,0x0E,0x07,0x07,0x0F,0x1E,0x3C,0x38,0x70,0x70,0x60,0x00},/*"败",8*/
//
{0x00,0x00,0x00,0xC0,0xC0,0xC0,0xC0,0xC0,0xFC,0xFC,0xFC,0xC0,0xC0,0xC0,0xC0,0xC0,0x30,0x30,0x30,0x30,0xF0,0xF0,0xF0,0x30,0x30,0x30,0x30,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0x70,0x71,0x71,0x71,0x71,0x71,0x7F,0xFF,0xFF,0xF1,0x71,0x71,0x71,0x71,0xE0,0xF0,0x7C,0x3F,0x1F,0x0F,0x03,0x60,0x60,0x70,0x7F,0x7F,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00,0xC0,0xFE,0xFE,0xFE,0x82,0x00,0xFF,0xFF,0xFF,0x18,0x18,0x18,0x18,0x00,0x01,0xFF,0xFF,0xFF,0x03,0x03,0x03,0x03,0x03,0x03,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x10,0x3C,0x3F,0x3F,0x0F,0x03,0x07,0x0F,0x0F,0x1F,0x1F,0x38,0x38,0x38,0x30,0x30,0x30,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x70,0x10},/*"超",9*/
};
const unsigned char f35x40_box_ico[]=
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0x38,0x1C,0x8C,0x8C,0x8C,0x8C,0x8C,0x8C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x8C,0xCC,0xCC,0xCC,0xCC,0x8C,0x0C,0x1C,0x38,0xF0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x80,0x00,0x20,0x31,0x31,0x31,0x31,0x3F,0x0E,0x00,0x00,0x00,0x00,0x1F,0x3F,0x7F,0x7F,0x7F,0x7F,0x3F,0x1F,0x00,0x80,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
//小电池图标 40x20
const unsigned char f40x20_box_batt[]=
{0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF0,0xF8,0x38,0x38,0x38,0xB8,0xB8,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0x38,0xF8,0xF8,0xF0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xC0,0xC6,0xC6,0xDF,0xDF,0xC6,0xC6,0xC0,0xC0,0xC0,0xC6,0xC6,0xC6,0xC6,0xC6,0xC0,0xFF,0xFF,0xFF,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
const unsigned char Hzk4[][512]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8,0xF0,0xF0,0x70,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFE,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xFF,0xFF,0xFF,0xFF,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xFF,0xFF,0xFF,0xFF,0x07,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0xFF,0xFF,0xFF,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x0F,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"ÖÐ",0*/
@ -629,6 +647,8 @@ const unsigned char F8X16_bat5[]=
const unsigned char F8X16_bat6[]=
{ 0x18,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
u8 OLED_GRAM[144][8];
//<2F><><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>
@ -932,6 +952,39 @@ void OLED_DrawCircle(u8 x,u8 y,u8 r)
}
}
void OLED_DrawFilledCircle(u8 x0, u8 y0, u8 r, u8 c)
{
int16_t f = 1 - r;
int16_t ddF_x = 1;
int16_t ddF_y = -2 * r;
int16_t x = 0;
int16_t y = r;
OLED_DrawPoint(x0, y0 + r, c);
OLED_DrawPoint(x0, y0 - r, c);
OLED_DrawPoint(x0 + r, y0, c);
OLED_DrawPoint(x0 - r, y0, c);
OLED_DrawLine(x0 - r, y0, x0 + r, y0, c);
while (x < y)
{
if (f >= 0)
{
y--;
ddF_y += 2;
f += ddF_y;
}
x++;
ddF_x += 2;
f += ddF_x;
OLED_DrawLine(x0 - x, y0 + y, x0 + x, y0 + y, c);
OLED_DrawLine(x0 + x, y0 - y, x0 - x, y0 - y, c);
OLED_DrawLine(x0 + y, y0 + x, x0 - y, y0 + x, c);
OLED_DrawLine(x0 + y, y0 - x, x0 - y, y0 - x, c);
}
}
//<2F><>ָ<EFBFBD><D6B8>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ʾһ<CABE><D2BB><EFBFBD>ַ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
@ -1232,6 +1285,7 @@ void OLED_Init(void)
OLED_WR_Byte(0xAF,OLED_CMD); /*display ON*/
OLED_Clear();
OLED_Refresh();
}

View File

@ -49,6 +49,7 @@ void OLED_Clear(void);
void OLED_DrawPoint(u8 x,u8 y,u8 t);
void OLED_DrawLine(u8 x1,u8 y1,u8 x2,u8 y2,u8 mode);
void OLED_DrawCircle(u8 x,u8 y,u8 r);
void OLED_DrawFilledCircle(u8 x0, u8 y0, u8 r, u8 c);
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size1,u8 mode);
void OLED_ShowChar6x8(u8 x,u8 y,u8 chr,u8 mode);
void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 size1,u8 mode);

View File

@ -74,45 +74,6 @@ extern int rt_hw_flash_disk_readonly_init(const char *name, uint32_t base, uint3
extern void rt_hw_wdg_start(int argc, char **argv);
extern int bk_wlan_dtim_rf_ps_mode_enable(void );
#define BUILD_UINT16(loByte, hiByte) \
((uint16_t)(((loByte) & 0x00FF) + (((hiByte) & 0x00FF) << 8)))
#define BK_ATT_DECL_PRIMARY_SERVICE_128 {0x00,0x28,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
#define BK_ATT_DECL_CHARACTERISTIC_128 {0x03,0x28,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
#define BK_ATT_DESC_CLIENT_CHAR_CFG_128 {0x02,0x29,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
#define WRITE_REQ_CHARACTERISTIC_128 {0x01,0xFF,0,0,0x34,0x56,0,0,0,0,0x28,0x37,0,0,0,0}
#define INDICATE_CHARACTERISTIC_128 {0x02,0xFF,0,0,0x34,0x56,0,0,0,0,0x28,0x37,0,0,0,0}
#define NOTIFY_CHARACTERISTIC_128 {0x03,0xFF,0,0,0x34,0x56,0,0,0,0,0x28,0x37,0,0,0,0}
static const uint8_t test_svc_uuid[16] = {0xFF,0xFF,0,0,0x34,0x56,0,0,0,0,0x28,0x37,0,0,0,0};
enum
{
TEST_IDX_SVC,
TEST_IDX_FF01_VAL_CHAR,
TEST_IDX_FF01_VAL_VALUE,
TEST_IDX_FF02_VAL_CHAR,
TEST_IDX_FF02_VAL_VALUE,
TEST_IDX_FF02_VAL_IND_CFG,
TEST_IDX_FF03_VAL_CHAR,
TEST_IDX_FF03_VAL_VALUE,
TEST_IDX_FF03_VAL_NTF_CFG,
TEST_IDX_NB,
};
extern bk_attm_desc_t test_att_db[TEST_IDX_NB];
extern void ble_set_notice_cb(ble_notice_cb_t func);
extern ble_err_t bk_ble_init(void);
extern void cli_ble_write_callback(write_req_t *write_req);
extern uint8_t cli_ble_read_callback(read_req_t *read_req);
extern void ble_notice_cb(ble_notice_t notice, void *param);
extern void ble_cmd_cb(ble_cmd_t cmd, ble_cmd_param_t *param);
extern uint8_t ble_active;
uint8_t actv_idx;
int main(int argc, char **argv)
{

View File

@ -0,0 +1,41 @@
#include <rtthread.h>
#include <finsh.h>
#include "common.h"
#include "param_config.h"
#include "ble_pub.h"
#include "drv_oled.h"
#include <rtthread.h>
#include <rtdevice.h>
#include "ring_queue.h"
void RingQueue_init(RingQueue *q) {
q->front = 0;
q->rear = 0;
q->size = 0;
}
bool RingQueue_isFull(RingQueue *q) {
return q->size == MAX_SIZE;
}
int RingQueue_size(RingQueue* q) {
return q->size;
}
bool RingQueue_enqueue(RingQueue *q, int value) {
if (RingQueue_isFull(q)) {
return false; // 队列已满,返回失败
}
q->data[q->rear] = value; // 将值放入队尾
q->rear = (q->rear + 1) % MAX_SIZE; // 更新队尾指针,注意使用模运算实现循环
q->size++; // 队列大小加一
return true; // 成功入队返回true
}
bool RingQueue_dequeue(RingQueue *q, int *value) {
if (q->size == 0) { // 队列为空,返回失败
return false;
}
*value = q->data[q->front]; // 获取队头元素的值
q->front = (q->front + 1) % MAX_SIZE; // 更新队头指针,注意使用模运算实现循环
q->size--; // 队列大小减一
return true; // 成功出队返回true
}

View File

@ -0,0 +1,18 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_SIZE 50
typedef struct {
int data[MAX_SIZE]; // 存储数据的数组
int front; // 队头指针
int rear; // 队尾指针
int size; // 队列当前大小
} RingQueue;
void RingQueue_init(RingQueue *q);
bool RingQueue_isFull(RingQueue *q);
int RingQueue_size(RingQueue* q);
bool RingQueue_enqueue(RingQueue *q, int value);
bool RingQueue_dequeue(RingQueue *q, int *value);

View File

@ -247,10 +247,10 @@
#define CFG_IPERF_TEST IPERF_OPEN_ONLY
#if CFG_WIFI_P2P
#define CFG_USE_APP_DEMO_VIDEO_TRANSFER 1
#define CFG_USE_APP_DEMO_VIDEO_TRANSFER 0
#define CFG_USE_CAMERA_INTF 1
#else
#define CFG_USE_APP_DEMO_VIDEO_TRANSFER 1
#define CFG_USE_APP_DEMO_VIDEO_TRANSFER 0
#define CFG_USE_CAMERA_INTF 1
#endif
#define CFG_USE_HSLAVE_SPI 0