Compare commits
2 Commits
9149c2deff
...
c4a50bc6b2
Author | SHA1 | Date | |
---|---|---|---|
c4a50bc6b2 | |||
3c32679dbb |
@ -676,7 +676,7 @@ static void handle_system_event(key_event_t event)
|
||||
app_start();
|
||||
init_bat_timer();
|
||||
// spi_led_init();
|
||||
bk_printf("VER:%s\r\n","1.0.6");
|
||||
bk_printf("VER:%s\r\n",APPLICATION_VERSION);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@ -49,7 +49,7 @@ static ReturnValue sleep_helper_set_mode_callback(const PropertyList* properties
|
||||
}
|
||||
|
||||
static ReturnValue sleep_helper_set_level_callback(const PropertyList* properties) {
|
||||
Property* level_prop = property_list_get_by_name(properties, "mode");
|
||||
Property* level_prop = property_list_get_by_name(properties, "level");
|
||||
if (!level_prop || property_get_type(level_prop) != PROPERTY_TYPE_INTEGER) {
|
||||
return return_value_create_string("{\"error\":\"Invalid level parameter\"}");
|
||||
}
|
||||
@ -248,7 +248,7 @@ void app_mcp_init(){
|
||||
PropertyList* props = property_list_create();
|
||||
Property* brightness_prop = property_create_integer("brightness", false, 0, true, 0, 100);
|
||||
property_list_add_property(props, brightness_prop);
|
||||
mcp_server_add_tool_with_params(mcp_server, "self.screen.set_brightness", "Set screen brightness", props, set_brightness_callback);
|
||||
mcp_server_add_tool_with_params(mcp_server, "self.light.set_brightness", "设置拍拍灯的灯光亮度", props, set_brightness_callback);
|
||||
}
|
||||
// 添加拍照工具
|
||||
//{
|
||||
|
@ -80,7 +80,7 @@ enum ListeningMode {
|
||||
* 解决调用BLE设置灯光常亮时异常问题
|
||||
*/
|
||||
|
||||
#define APPLICATION_VERSION "1.1.6"
|
||||
#define APPLICATION_VERSION "1.1.8"
|
||||
#define APPLICATION_DEFULT_OTA_URL "https://xiaozhi.xa-poka.com/xiaozhi/ota/"
|
||||
#define APPLICATION_CONFIG_KEY_AI_URL "ai_url"
|
||||
/**
|
||||
|
@ -927,21 +927,7 @@ int rtc_websocket_send_text(transport web_socket, void *str, enum MsgType msgtyp
|
||||
|
||||
|
||||
break;}
|
||||
case BEKEN_RTC_SEND_IOT_DESC:{
|
||||
extern char *getGlobalSessionId(void);
|
||||
|
||||
cJSON* iot_desc = (cJSON*)thing_gen_iot_descriptors(getGlobalSessionId());
|
||||
char *message = cJSON_PrintUnformatted(iot_desc);
|
||||
if (message == NULL)
|
||||
{
|
||||
cJSON_Delete(iot_desc);
|
||||
return -1;
|
||||
}
|
||||
LOGI("iot -->(len:%d) %s\n",strlen(message),message);
|
||||
int ret = websocket_client_send_text(web_socket, message, strlen(message), 10*1000);
|
||||
LOGE("send iot desc ret:%d \n",ret);
|
||||
cJSON_Delete(iot_desc);
|
||||
break;}
|
||||
default:
|
||||
BK_LOGE("WebSocket", "Unsupported message type");
|
||||
return -1;
|
||||
|
@ -44,91 +44,6 @@ int lamp_get_bright(){
|
||||
return ws2812_get_brightness();
|
||||
}
|
||||
|
||||
cJSON* iot_lamp_get_device_desc(){
|
||||
|
||||
cJSON *lamp_desc = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(lamp_desc, "name", IOT_LAMP_DEVICE_NAME);
|
||||
cJSON_AddStringToObject(lamp_desc, "description", "这是拍拍灯");
|
||||
|
||||
cJSON *properties = cJSON_CreateObject();
|
||||
//定义brightness 属性
|
||||
cJSON *brightness = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(brightness, "description", "当前亮度百分比");
|
||||
cJSON_AddStringToObject(brightness, "type", "number");
|
||||
//添加brightness属性到properties
|
||||
cJSON_AddItemToObjectCS(properties,"brightness",brightness);
|
||||
|
||||
//定义battery 属性
|
||||
cJSON *battery = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(battery, "description", "当前电量百分比");
|
||||
cJSON_AddStringToObject(battery, "type", "number");
|
||||
cJSON_AddItemToObjectCS(properties,IOT_LAMP_DEVICE_PARAM_BATTERY,battery);
|
||||
|
||||
//添加properties 到lamp_desc 描述
|
||||
cJSON_AddItemToObjectCS(lamp_desc,"properties",properties);
|
||||
|
||||
|
||||
//定义version属性
|
||||
cJSON *version = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(version, "description", "当前拍拍灯软件版本");
|
||||
cJSON_AddStringToObject(version, "type", "string");
|
||||
//添加brightness属性到properties
|
||||
cJSON_AddItemToObjectCS(properties,"version",version);
|
||||
|
||||
//添加properties 到lamp_desc 描述
|
||||
cJSON_AddItemToObjectCS(lamp_desc,"properties",properties);
|
||||
|
||||
|
||||
//定义方法methods
|
||||
cJSON *methods = cJSON_CreateObject();
|
||||
|
||||
|
||||
|
||||
//定义一个设置亮度的方法
|
||||
/*"SetBrightness": {
|
||||
"description": "设置亮度",
|
||||
"parameters": {
|
||||
"brightness": {
|
||||
"description": "0到100之间的整数",
|
||||
"type": "number"
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
cJSON *SetBrightness = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(SetBrightness, "description", "打开关闭灯光以及设置亮度");
|
||||
|
||||
cJSON *parameters = cJSON_CreateObject();
|
||||
cJSON *p_brightness = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(p_brightness, "type", "number");
|
||||
cJSON_AddStringToObject(p_brightness, "description", "0到100之间的整数 0表示关灯 非0表示打开,默认100");
|
||||
|
||||
|
||||
cJSON_AddItemToObjectCS(parameters,IOT_LAMP_DEVICE_PARAM_BRIGHTNESS,p_brightness);
|
||||
cJSON_AddItemToObjectCS(SetBrightness,"parameters",parameters);
|
||||
|
||||
//cJSON_AddStringToObject(SetBrightness, "type", "number");
|
||||
cJSON_AddItemToObjectCS(methods,IOT_LAMP_DEVICE_FUNS_SET_BRIGHTNESS,SetBrightness);
|
||||
|
||||
|
||||
cJSON *methods_ota = cJSON_CreateObject();
|
||||
//[警告:此操作将导致设备完全关闭,请慎重使用]
|
||||
cJSON_AddStringToObject(methods_ota, "description", "升级拍拍灯最新软件[必须要用户二次确认]");
|
||||
|
||||
|
||||
//cJSON_AddStringToObject(SetBrightness, "type", "number");
|
||||
cJSON_AddItemToObjectCS(methods,IOT_LAMP_DEVICE_OTA,methods_ota);
|
||||
|
||||
|
||||
cJSON_AddItemToObjectCS(lamp_desc,"methods",methods);
|
||||
|
||||
//打印一下描述
|
||||
//char *json_desc = cJSON_Print(lamp_desc);
|
||||
//LOGE("lamp_desc-->%s\n",json_desc);
|
||||
//cJSON_Delete(lamp_desc);
|
||||
return lamp_desc;
|
||||
}
|
||||
|
||||
void iot_lamp_report_state(int brightness){
|
||||
|
||||
}
|
||||
@ -305,39 +220,3 @@ __exit:
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void iot_lamp_parser_invoke(char* cmd,char * paramters_json){
|
||||
|
||||
//设置亮度
|
||||
if (strcmp(cmd, "SetBrightness") == 0)
|
||||
{
|
||||
//获取亮度值
|
||||
cJSON* params = cJSON_Parse(paramters_json);
|
||||
if(params == NULL) return;
|
||||
// {"brightness": 60}
|
||||
int brightness = cJSON_GetObjectItem(params, IOT_LAMP_DEVICE_PARAM_BRIGHTNESS)->valueint;
|
||||
LOGE("invoke brightness-->%d\n",brightness);
|
||||
if(brightness == 0){
|
||||
ws2812_led_clear_all();
|
||||
}else{
|
||||
//ws2812_set_all_led(0xFFFFFF,brightness);
|
||||
ws2812_set_all_led_brightness(brightness);
|
||||
}
|
||||
//thing_report_iot_state_number(IOT_LAMP_DEVICE_NAME,IOT_LAMP_DEVICE_PARAM_BRIGHTNESS,brightness);
|
||||
cJSON_Delete(params);
|
||||
}
|
||||
else if (strcmp(cmd, IOT_LAMP_DEVICE_OTA) == 0){
|
||||
LOGE("invoke ota !!\n");
|
||||
//电量低于25 不允许执行OTA
|
||||
int battery = battery_get_percent();
|
||||
if(battery < 25){
|
||||
LOGE("power low bat:%d ,don't ota !!\n",battery);
|
||||
app_event_send_msg(APP_EVT_LOW_VOLTAGE, 0);
|
||||
return ;
|
||||
}
|
||||
iot_lamp_check_ota();
|
||||
//ws2812_led_start_ota();
|
||||
//https_ota_start();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -34,8 +34,6 @@ void lamp_deinit();
|
||||
*/
|
||||
int lamp_get_bright();
|
||||
|
||||
cJSON * iot_lamp_get_device_desc();
|
||||
void iot_lamp_parser_invoke(char* cmd,char * paramters_json);
|
||||
int iot_lamp_check_ota();
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -272,7 +272,6 @@ void sleep_helper_set_mode(sleep_mode mode){
|
||||
sleep_msg_t msg;
|
||||
msg.mode = mode;
|
||||
rtos_push_to_queue(&sleep_helper_msg_que, &msg, BEKEN_NO_WAIT);
|
||||
//thing_report_iot_state_number(IOT_SLEEP_HELPER_DEVICE_NAME,IOT_SLEEP_HELPER_DEVICE_PARAM_MODE,mode);
|
||||
}
|
||||
}
|
||||
|
||||
@ -339,7 +338,6 @@ void sleep_helper_set_level(sleep_model_level level){
|
||||
LOGE("sleep_helper period_cycle s %d duty_cycle %d\n",config.period_cycle,config.duty_cycle);
|
||||
bk_pwm_set_init_signal_low(pwm_chan);
|
||||
bk_pwm_set_period_duty(pwm_chan,&config);
|
||||
//thing_report_iot_state_number(IOT_SLEEP_HELPER_DEVICE_NAME,IOT_SLEEP_HELPER_DEVICE_PARAM_LEVEL,level);
|
||||
}
|
||||
}
|
||||
|
||||
@ -375,7 +373,6 @@ int sleep_helper_open(){
|
||||
//默认模式1
|
||||
sleep_helper_set_mode(SLEEP_MODE_1);
|
||||
sleep_helper_start_timer();
|
||||
//thing_report_iot_state_number(IOT_SLEEP_HELPER_DEVICE_NAME,IOT_SLEEP_HELPER_DEVICE_PARAM_MODE,SLEEP_MODE_1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -389,117 +386,8 @@ void sleep_helper_close(){
|
||||
// 关闭电源输出
|
||||
bk_gpio_set_output_low(GPIO_44);
|
||||
bk_gpio_set_output_low(GPIO_45);
|
||||
|
||||
//thing_report_iot_state_number(IOT_SLEEP_HELPER_DEVICE_NAME,IOT_SLEEP_HELPER_DEVICE_PARAM_MODE,0);
|
||||
}
|
||||
|
||||
cJSON* iot_sleep_helper_get_device_desc()
|
||||
{
|
||||
cJSON *sleep_helper_desc = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(sleep_helper_desc, "name", IOT_SLEEP_HELPER_DEVICE_NAME);
|
||||
cJSON_AddStringToObject(sleep_helper_desc, "description", "这是助眠仪(睡眠辅助仪器)");
|
||||
|
||||
cJSON *properties = cJSON_CreateObject();
|
||||
//mode 属性
|
||||
cJSON *mode = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(mode, "description", "当前工作模式 0表示关闭 1-3表示3种不同的模式");
|
||||
cJSON_AddStringToObject(mode, "type", "number");
|
||||
//添加mode属性到properties
|
||||
cJSON_AddItemToObjectCS(properties,IOT_SLEEP_HELPER_DEVICE_PARAM_MODE,mode);
|
||||
|
||||
//level 属性
|
||||
cJSON *param_level = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(param_level, "description", "当前工作等级");
|
||||
cJSON_AddStringToObject(param_level, "type", "number");
|
||||
//添加mode属性到properties
|
||||
cJSON_AddItemToObjectCS(properties,IOT_SLEEP_HELPER_DEVICE_PARAM_LEVEL,param_level);
|
||||
|
||||
|
||||
//添加properties speaker_desc 描述
|
||||
cJSON_AddItemToObjectCS(sleep_helper_desc,"properties",properties);
|
||||
|
||||
|
||||
//定义方法methods
|
||||
cJSON *methods = cJSON_CreateObject();
|
||||
//设置模式的方法
|
||||
cJSON *setMode = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(setMode, "description", "设置助眠仪工作模式");
|
||||
cJSON *parameters = cJSON_CreateObject();
|
||||
cJSON *p_mode = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(p_mode, "type", "number");
|
||||
cJSON_AddStringToObject(p_mode, "description", "1到3之间的整数");
|
||||
cJSON_AddItemToObjectCS(parameters,IOT_SLEEP_HELPER_DEVICE_PARAM_MODE,p_mode);
|
||||
cJSON_AddItemToObjectCS(setMode,"parameters",parameters);
|
||||
cJSON_AddItemToObjectCS(methods,IOT_SLEEP_HELPER_DEVICE_FUNS_SET_MODE,setMode);
|
||||
|
||||
|
||||
//设置工作等级的方法
|
||||
cJSON *setLevel = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(setLevel, "description", "设置助眠仪工作等级强度");
|
||||
cJSON *parameters_set_level = cJSON_CreateObject();
|
||||
cJSON *p_level = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(p_level, "type", "number");
|
||||
cJSON_AddStringToObject(p_level, "description", "1到9之间的整数");
|
||||
cJSON_AddItemToObjectCS(parameters_set_level,IOT_SLEEP_HELPER_DEVICE_PARAM_LEVEL,p_level);
|
||||
cJSON_AddItemToObjectCS(setLevel,"parameters",parameters_set_level);
|
||||
cJSON_AddItemToObjectCS(methods,IOT_SLEEP_HELPER_DEVICE_FUNS_SET_LEVEL,setLevel);
|
||||
|
||||
|
||||
//打开助眠仪
|
||||
cJSON *methods_open = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(methods_open, "description", "打开助眠仪");
|
||||
cJSON_AddItemToObjectCS(methods,IOT_SLEEP_HELPER_DEVICE_OPEN,methods_open);
|
||||
|
||||
//打开助眠仪
|
||||
cJSON *methods_close = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(methods_close, "description", "关闭助眠仪");
|
||||
cJSON_AddItemToObjectCS(methods,IOT_SLEEP_HELPER_DEVICE_CLOSE,methods_close);
|
||||
|
||||
|
||||
cJSON_AddItemToObjectCS(sleep_helper_desc,"methods",methods);
|
||||
|
||||
//打印一下描述
|
||||
//char *json_desc = cJSON_Print(speaker_desc);
|
||||
//LOGE("speaker_desc-->%s\n",json_desc);
|
||||
//cJSON_Delete(speaker_desc);
|
||||
return sleep_helper_desc;
|
||||
}
|
||||
|
||||
|
||||
void iot_sleep_helper_parser_invoke(char* cmd,char * paramters_json){
|
||||
|
||||
LOGE("iot_sleep_helper_parser_invoke :%s\n",paramters_json);
|
||||
cJSON* params = cJSON_Parse(paramters_json);
|
||||
if(params == NULL){
|
||||
LOGE("params == NULL\n");
|
||||
//return;
|
||||
}
|
||||
//设置模式
|
||||
if (strcmp(cmd, IOT_SLEEP_HELPER_DEVICE_FUNS_SET_MODE) == 0)
|
||||
{
|
||||
// {"mode": 60}
|
||||
int mode = cJSON_GetObjectItem(params, "mode")->valueint;
|
||||
LOGE("mode :%d\n",mode);
|
||||
sleep_helper_set_mode(mode);
|
||||
}
|
||||
if (strcmp(cmd, IOT_SLEEP_HELPER_DEVICE_FUNS_SET_LEVEL) == 0)
|
||||
{
|
||||
// {"level": 60}
|
||||
int level = cJSON_GetObjectItem(params, "level")->valueint;
|
||||
LOGE("level :%d\n",level);
|
||||
sleep_helper_set_level(level);
|
||||
|
||||
}
|
||||
if (strcmp(cmd, IOT_SLEEP_HELPER_DEVICE_OPEN) == 0)
|
||||
{
|
||||
sleep_helper_open();
|
||||
}
|
||||
if (strcmp(cmd, IOT_SLEEP_HELPER_DEVICE_CLOSE) == 0)
|
||||
{
|
||||
sleep_helper_close();
|
||||
}
|
||||
cJSON_Delete(params);
|
||||
}
|
||||
|
||||
void sleep_helper_init(){
|
||||
bk_pwm_driver_init();
|
||||
|
@ -76,8 +76,6 @@ int sleep_helper_get_level();
|
||||
int sleep_helper_get_work_timeout();
|
||||
void sleep_helper_deinit();
|
||||
|
||||
cJSON * iot_sleep_helper_get_device_desc();
|
||||
void iot_sleep_helper_parser_invoke(char* cmd,char * paramters_json);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -160,48 +160,6 @@ uint32_t speaker_volume_get_level_count()
|
||||
#endif
|
||||
|
||||
|
||||
cJSON* iot_speaker_get_device_desc()
|
||||
{
|
||||
cJSON *speaker_desc = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(speaker_desc, "name", IOT_SPEAKER_DEVICE_NAME);
|
||||
cJSON_AddStringToObject(speaker_desc, "description", "音量调节");
|
||||
|
||||
cJSON *properties = cJSON_CreateObject();
|
||||
//volume 属性
|
||||
cJSON *volume = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(volume, "description", "当前设备音量 0-100");
|
||||
cJSON_AddStringToObject(volume, "type", "number");
|
||||
//添加brightness属性到properties
|
||||
cJSON_AddItemToObjectCS(properties,IOT_SPEAKER_DEVICE_PARAM_VOL,volume);
|
||||
//添加properties speaker_desc 描述
|
||||
cJSON_AddItemToObjectCS(speaker_desc,"properties",properties);
|
||||
|
||||
|
||||
//定义方法methods
|
||||
cJSON *methods = cJSON_CreateObject();
|
||||
cJSON *setVolume = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(setVolume, "description", "设置音量和声音大小");
|
||||
|
||||
cJSON *parameters = cJSON_CreateObject();
|
||||
cJSON *p_volume = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(p_volume, "type", "number");
|
||||
cJSON_AddStringToObject(p_volume, "description", "0到100之间的整数");
|
||||
|
||||
|
||||
cJSON_AddItemToObjectCS(parameters,"volume",p_volume);
|
||||
cJSON_AddItemToObjectCS(setVolume,"parameters",parameters);
|
||||
|
||||
//cJSON_AddStringToObject(SetBrightness, "type", "number");
|
||||
cJSON_AddItemToObjectCS(methods,IOT_SPEAKER_DEVICE_FUNS_SET_VOL,setVolume);
|
||||
cJSON_AddItemToObjectCS(speaker_desc,"methods",methods);
|
||||
|
||||
//打印一下描述
|
||||
//char *json_desc = cJSON_Print(speaker_desc);
|
||||
//LOGE("speaker_desc-->%s\n",json_desc);
|
||||
//cJSON_Delete(speaker_desc);
|
||||
return speaker_desc;
|
||||
}
|
||||
|
||||
void speaker_set_volume(int volume)
|
||||
{
|
||||
if (volume >= 0 && volume <= 100)
|
||||
@ -212,23 +170,3 @@ void speaker_set_volume(int volume)
|
||||
//thing_report_iot_state_number(IOT_SPEAKER_DEVICE_NAME, IOT_SPEAKER_DEVICE_PARAM_VOL, volume);
|
||||
}
|
||||
}
|
||||
void iot_speaker_parser_invoke(char* cmd,char * paramters_json){
|
||||
|
||||
LOGE("iot_speaker_parser_invoke :%s\n",paramters_json);
|
||||
//设置音量
|
||||
if (strcmp(cmd, "setVolume") == 0)
|
||||
{
|
||||
//获取亮度值
|
||||
cJSON* params = cJSON_Parse(paramters_json);
|
||||
if(params == NULL){
|
||||
LOGE("params == NULL\n");
|
||||
return;
|
||||
}
|
||||
// {"volume": 60}
|
||||
int volume = cJSON_GetObjectItem(params, "volume")->valueint;
|
||||
LOGE("volume :%d\n",volume);
|
||||
speaker_set_volume(volume);
|
||||
cJSON_Delete(params);
|
||||
}
|
||||
|
||||
}
|
@ -12,8 +12,6 @@ extern "C" {
|
||||
|
||||
void speaker_volume_init();
|
||||
|
||||
cJSON* iot_speaker_get_device_desc();
|
||||
void iot_speaker_parser_invoke(char* cmd,char * paramters_json);
|
||||
/**
|
||||
* 获取当前音量
|
||||
*/
|
||||
|
@ -25,258 +25,7 @@
|
||||
#define LOGW(...) BK_LOGW(TAG, ##__VA_ARGS__)
|
||||
#define LOGE(...) BK_LOGE(TAG, ##__VA_ARGS__)
|
||||
#define LOGD(...) BK_LOGD(TAG, ##__VA_ARGS__)
|
||||
extern rtc_session *__get_beken_rtc(void);
|
||||
extern char *getGlobalSessionId(void);
|
||||
extern bool g_connected_flag;
|
||||
|
||||
static beken_queue_t thing_msg_que = NULL;
|
||||
static beken_thread_t thing_thread_hdl = NULL;
|
||||
static int thing_start = 0;
|
||||
typedef struct
|
||||
{
|
||||
int type ;
|
||||
char *data;
|
||||
int data_len;
|
||||
} thing_msg_t;
|
||||
|
||||
|
||||
cJSON* thing_gen_iot_descriptors(char *session_id)
|
||||
{
|
||||
// 1.判断数据合法
|
||||
// 2.发送给服务器
|
||||
cJSON *messageRoot = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(messageRoot, "session_id", session_id);
|
||||
cJSON_AddStringToObject(messageRoot, "type", "iot");
|
||||
cJSON_AddBoolToObject(messageRoot, "update", true);
|
||||
|
||||
cJSON *descriptorArray = cJSON_CreateArray();
|
||||
|
||||
#ifdef IOT_LAMP
|
||||
cJSON* lamp_desc = iot_lamp_get_device_desc();
|
||||
//cJSON_AddItemToArray(descriptorArray, cJSON_Duplicate(descriptor, 1));
|
||||
cJSON_AddItemToArray(descriptorArray, lamp_desc);
|
||||
#endif
|
||||
|
||||
#ifdef IOT_SPEAKER
|
||||
cJSON* speaker_desc = iot_speaker_get_device_desc();
|
||||
//cJSON_AddItemToArray(descriptorArray, cJSON_Duplicate(descriptor, 1));
|
||||
cJSON_AddItemToArray(descriptorArray, speaker_desc);
|
||||
#endif
|
||||
|
||||
#ifdef IOT_SLEEP_HELPER
|
||||
cJSON* sleep_helper_desc = iot_sleep_helper_get_device_desc();
|
||||
cJSON_AddItemToArray(descriptorArray, sleep_helper_desc);
|
||||
#endif
|
||||
|
||||
|
||||
cJSON_AddItemToObject(messageRoot, "descriptors", descriptorArray);
|
||||
return messageRoot;
|
||||
}
|
||||
|
||||
//{"session_id":"14c23594","type":"iot","update":true,"states":[{"name":"AudioSpeaker","state":{"volume":50}}]}
|
||||
void thing_report_iot_state(char * device,char * properties_key, char* state){
|
||||
cJSON *messageRoot = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(messageRoot, "session_id", getGlobalSessionId());
|
||||
cJSON_AddStringToObject(messageRoot, "type", "iot");
|
||||
cJSON_AddBoolToObject(messageRoot, "update", true);
|
||||
cJSON *stateArray = cJSON_CreateArray();
|
||||
|
||||
cJSON *states_desc = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(states_desc, "name", device);
|
||||
|
||||
//cJSON *state_obj = cJSON_CreateObject();
|
||||
|
||||
//{"volume":50}
|
||||
cJSON *param = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(param, properties_key, state);
|
||||
//"state":{"volume":50}}
|
||||
cJSON_AddItemToObjectCS(states_desc,"state",param);
|
||||
|
||||
cJSON_AddItemToArray(stateArray, states_desc);
|
||||
cJSON_AddItemToObject(messageRoot, "states", stateArray);
|
||||
char *message = cJSON_PrintUnformatted(messageRoot);
|
||||
LOGE("iot -->(len:%d) %s\n",strlen(message),message);
|
||||
//将数据发送到队列 使用线程发送
|
||||
if (thing_msg_que != NULL)
|
||||
{
|
||||
thing_msg_t msg;
|
||||
msg.type = 0;
|
||||
msg.data = os_malloc(strlen(message)+1);
|
||||
strcpy(msg.data, message);
|
||||
msg.data_len = strlen(message);
|
||||
rtos_push_to_queue(&thing_msg_que, &msg, BEKEN_NO_WAIT);
|
||||
}
|
||||
|
||||
//rtc_session *beken_rtc = __get_beken_rtc();
|
||||
//transport bk_rtc_ws = beken_rtc->bk_rtc_client;
|
||||
//websocket_client_send_text(bk_rtc_ws, message, strlen(message), 10*1000);
|
||||
cJSON_Delete(messageRoot);
|
||||
}
|
||||
|
||||
void thing_report_iot_state_number(char * device,char * properties_key, int state){
|
||||
cJSON *messageRoot = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(messageRoot, "session_id", getGlobalSessionId());
|
||||
cJSON_AddStringToObject(messageRoot, "type", "iot");
|
||||
cJSON_AddBoolToObject(messageRoot, "update", true);
|
||||
cJSON *stateArray = cJSON_CreateArray();
|
||||
|
||||
cJSON *states_desc = cJSON_CreateObject();
|
||||
cJSON_AddStringToObject(states_desc, "name", device);
|
||||
|
||||
//cJSON *state_obj = cJSON_CreateObject();
|
||||
|
||||
//{"volume":50}
|
||||
cJSON *param = cJSON_CreateObject();
|
||||
cJSON_AddNumberToObject(param, properties_key, state);
|
||||
//"state":{"volume":50}}
|
||||
cJSON_AddItemToObjectCS(states_desc,"state",param);
|
||||
|
||||
cJSON_AddItemToArray(stateArray, states_desc);
|
||||
cJSON_AddItemToObject(messageRoot, "states", stateArray);
|
||||
char *message = cJSON_PrintUnformatted(messageRoot);
|
||||
LOGE("iot -->(len:%d) %s\n",strlen(message),message);
|
||||
|
||||
//rtc_session *beken_rtc = __get_beken_rtc();
|
||||
//transport bk_rtc_ws = beken_rtc->bk_rtc_client;
|
||||
//websocket_client_send_text(bk_rtc_ws, message, strlen(message), 10*1000);
|
||||
//将数据发送到队列 使用线程发送
|
||||
if (thing_msg_que != NULL)
|
||||
{
|
||||
thing_msg_t msg;
|
||||
msg.type = 0;
|
||||
msg.data = os_malloc(strlen(message)+1);
|
||||
strcpy(msg.data, message);
|
||||
msg.data_len = strlen(message);
|
||||
rtos_push_to_queue(&thing_msg_que, &msg, BEKEN_NO_WAIT);
|
||||
}
|
||||
|
||||
cJSON_Delete(messageRoot);
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析平台下发的IOT指令,获取响应的参数调用不同的硬件功能
|
||||
* 物联网指令:
|
||||
*
|
||||
* {
|
||||
"type": "iot",
|
||||
"commands": [
|
||||
{
|
||||
"name": "lamp",
|
||||
"method": "SetBrightness",
|
||||
"parameters": {
|
||||
"brightness": 50
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
*/
|
||||
|
||||
void thing_iot_invoke(char *iot_json){
|
||||
cJSON* iot_invoke = cJSON_Parse(iot_json);
|
||||
cJSON *commands = cJSON_GetObjectItem(iot_invoke, "commands");
|
||||
// 检查是否为数组类型
|
||||
if (commands ==NULL && !cJSON_IsArray(commands)) {
|
||||
cJSON_Delete(iot_invoke);
|
||||
return ;
|
||||
}
|
||||
// 遍历数组并打印元素
|
||||
int arraySize = cJSON_GetArraySize(commands);
|
||||
for (int i = 0; i < arraySize; i++) {
|
||||
cJSON *item = cJSON_GetArrayItem(commands, i);
|
||||
char *name = cJSON_GetObjectItem(item, "name")->valuestring;
|
||||
char *method = cJSON_GetObjectItem(item, "method")->valuestring;
|
||||
|
||||
cJSON *parameters = cJSON_GetObjectItem(item, "parameters");
|
||||
char *str_parameters =cJSON_PrintUnformatted(parameters);
|
||||
LOGE("cmd:%s method:%s\n",name,method);
|
||||
//灯光指令
|
||||
if (strcmp(name, "lamp") == 0)
|
||||
{
|
||||
iot_lamp_parser_invoke(method,str_parameters);
|
||||
}
|
||||
|
||||
//扬声器指令
|
||||
if (strcmp(name, "speaker") == 0)
|
||||
{
|
||||
iot_speaker_parser_invoke(method,str_parameters);
|
||||
}
|
||||
|
||||
//睡眠仪指令
|
||||
if (strcmp(name, IOT_SLEEP_HELPER_DEVICE_NAME) == 0)
|
||||
{
|
||||
iot_sleep_helper_parser_invoke(method,str_parameters);
|
||||
}
|
||||
}
|
||||
// 释放内存
|
||||
cJSON_Delete(iot_invoke);
|
||||
}
|
||||
|
||||
// AddStringProperty
|
||||
// AddNumberProperty
|
||||
// AddBooleanProperty
|
||||
// AddMethod
|
||||
|
||||
/**
|
||||
* 生成IOT 描述文件 用于意图识别控制
|
||||
*/
|
||||
|
||||
|
||||
static void thing_thread_task(void *arg)
|
||||
{
|
||||
bk_err_t ret = BK_OK;
|
||||
while(thing_start){
|
||||
|
||||
thing_msg_t msg;
|
||||
ret = rtos_pop_from_queue(&thing_msg_que, &msg, BEKEN_WAIT_FOREVER);
|
||||
if (kNoErr == ret)
|
||||
{
|
||||
switch (msg.type)
|
||||
{
|
||||
// 发送数据到平台
|
||||
case 0:
|
||||
{
|
||||
//没有连接平台的情况下 不允许发送数据
|
||||
if(!g_connected_flag){
|
||||
break;
|
||||
}
|
||||
rtc_session *beken_rtc = __get_beken_rtc();
|
||||
if(beken_rtc == NULL){
|
||||
break;
|
||||
}
|
||||
transport bk_rtc_ws = beken_rtc->bk_rtc_client;
|
||||
websocket_client_send_text(bk_rtc_ws, msg.data, msg.data_len, 10*1000);
|
||||
os_free(msg.data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/* delete msg queue */
|
||||
ret = rtos_deinit_queue(&thing_msg_que);
|
||||
if (ret != kNoErr)
|
||||
{
|
||||
bk_printf("delete spi_led_msg_que fail\n");
|
||||
}
|
||||
thing_msg_que = NULL;
|
||||
/* delete task */
|
||||
if(thing_thread_hdl!= NULL) {
|
||||
rtos_delete_thread(&thing_thread_hdl);
|
||||
thing_thread_hdl = NULL;
|
||||
}
|
||||
bk_printf("delete thing_thread_hdl task\n");
|
||||
}
|
||||
|
||||
void thing_report_device_state(){
|
||||
//上报当前软件版本
|
||||
thing_report_iot_state(IOT_LAMP_DEVICE_NAME,"version", APPLICATION_VERSION);
|
||||
//上报当前亮度
|
||||
thing_report_iot_state_number(IOT_LAMP_DEVICE_NAME,IOT_LAMP_DEVICE_PARAM_BRIGHTNESS,lamp_get_bright());
|
||||
//上报当前音量
|
||||
thing_report_iot_state_number(IOT_SPEAKER_DEVICE_NAME,IOT_SPEAKER_DEVICE_PARAM_VOL,speaker_volume_get_current());
|
||||
//上报当前电量
|
||||
thing_report_iot_state_number(IOT_LAMP_DEVICE_NAME,IOT_LAMP_DEVICE_PARAM_BATTERY,battery_get_percent());
|
||||
//thing_report_iot_state_number(IOT_SPEAKER_DEVICE_NAME,IOT_SPEAKER_DEVICE_PARAM_VOL,volume*10);
|
||||
}
|
||||
void thing_init()
|
||||
{
|
||||
#ifdef IOT_LAMP
|
||||
@ -289,28 +38,13 @@ void thing_init()
|
||||
|
||||
#ifdef IOT_SLEEP_HELPER
|
||||
sleep_helper_init();
|
||||
//sleep_helper_set_mode(SLEEP_MODE_1);
|
||||
#endif
|
||||
|
||||
thing_start = 1;
|
||||
bk_err_t ret = BK_OK;
|
||||
ret = rtos_init_queue(&thing_msg_que, "thing_msg_que", sizeof(thing_msg_t), 5);
|
||||
if (ret != kNoErr)
|
||||
{
|
||||
bk_printf("create thing_msg_que queue fail\n");
|
||||
}
|
||||
ret = rtos_create_thread(&thing_thread_hdl,
|
||||
4,
|
||||
"spi_led",
|
||||
(beken_thread_function_t)thing_thread_task,
|
||||
5 * 1024,
|
||||
NULL);
|
||||
if (ret != kNoErr)
|
||||
{
|
||||
thing_thread_hdl = NULL;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void thing_deinit(){
|
||||
thing_start = 0;
|
||||
lamp_deinit();
|
||||
sleep_helper_deinit();
|
||||
//speaker_volume_deinit();
|
||||
}
|
||||
|
@ -20,48 +20,3 @@
|
||||
void thing_init();
|
||||
void thing_deinit();
|
||||
|
||||
cJSON * thing_create(char * name,char *description);
|
||||
|
||||
/*
|
||||
"theme": {
|
||||
"description": "主题",
|
||||
"type": "string"
|
||||
},*/
|
||||
cJSON * thing_add_string_property(char * name,char *description);
|
||||
/*
|
||||
"theme": {
|
||||
"description": "主题",
|
||||
"type": "string"
|
||||
},*/
|
||||
cJSON * thing_add_number_property(char * name,char *description);
|
||||
|
||||
|
||||
/**
|
||||
* # Sending IoT descriptors
|
||||
[{"name":"AudioSpeaker","description":"The audio speaker of the device","properties":{"volume":{"description":"Current audio volume value","type":"number"}},"methods":{"set_volume":{"description":"Set the audio volume","parameters":{"volume":{"description":"An integer between 0 and 100","type":"number"}}}}},{"name":"Lamp","description":"A test lamp","properties":{"power":{"description":"Whether the lamp is on","type":"boolean"}},"methods":{"turn_on":{"description":"Turn on the lamp","parameters":{}},"turn_off":{"description":"Turn off the lamp","parameters":{}}}}]
|
||||
# Sending IoT states
|
||||
{"session_id":"14c23594","type":"iot","update":true,"states":[{"name":"AudioSpeaker","state":{"volume":50}}]}
|
||||
|
||||
*/
|
||||
//AddStringProperty
|
||||
//AddNumberProperty
|
||||
//AddBooleanProperty
|
||||
//AddMethod
|
||||
|
||||
void thing_report_iot_state(char * device,char * properties_key, char* state);
|
||||
|
||||
void thing_report_iot_state_number(char * device,char * properties_key, int state);
|
||||
/**
|
||||
* 生成IOT 描述文件 用于意图识别控制
|
||||
*/
|
||||
cJSON* thing_gen_iot_descriptors(char *session_id);
|
||||
|
||||
/**
|
||||
* 解析平台下发的IOT指令,获取响应的参数调用不同的硬件功能
|
||||
*/
|
||||
void thing_iot_invoke(char *iot_json);
|
||||
|
||||
/**
|
||||
*连接服务器成功后 上报当前设备状态
|
||||
*/
|
||||
void thing_report_device_state();
|
@ -598,7 +598,7 @@ int demo_network_auto_reconnect(bool val) // val true means from disconnect to r
|
||||
app_event_send_msg(APP_EVT_RECONNECT_NETWORK, 0);
|
||||
network_disc_evt_posted = 0;
|
||||
}
|
||||
BK_LOGE(TAG, "bbbbbbbbbbb\n");
|
||||
BK_LOGE(TAG, "demo_sta_app_init ssid:%s\n",(char *)info.sta_ssid);
|
||||
demo_sta_app_init((char *)info.sta_ssid, (char *)info.sta_pwd);
|
||||
return 0x71l;
|
||||
}
|
||||
|
@ -566,7 +566,7 @@ void rtc_websocket_msg_handle(char *json_text, unsigned int size)
|
||||
// 解析服务器下发的IOT 指令
|
||||
else if (strcmp(type->valuestring, "iot") == 0)
|
||||
{
|
||||
thing_iot_invoke(json_text);
|
||||
//thing_iot_invoke(json_text);
|
||||
}
|
||||
else if (strcmp(type->valuestring, "llm") == 0)
|
||||
{
|
||||
@ -809,16 +809,6 @@ void rtc_websocket_event_handler(void *event_handler_arg, char *event_base, int3
|
||||
rtos_delay_milliseconds(100);
|
||||
rtc_websocket_send_text(client, (void *)(&audio_info), BEKEN_RTC_SEND_START_LISTEN);
|
||||
|
||||
//2025.07.07
|
||||
//rtos_delay_milliseconds(100);
|
||||
//rtc_websocket_send_text(client, (void *)(&audio_info), BEKEN_RTC_SEND_IOT_DESC);
|
||||
//rtos_delay_milliseconds(20);
|
||||
//thing_report_device_state();
|
||||
|
||||
|
||||
// rtc_websocket_send_text(client, (void *)(&audio_info), BEKEN_RTC_SEND_START_LISTEN);
|
||||
// rtos_delay_milliseconds(200);
|
||||
// rtc_websocket_send_text(client, (void *)(&audio_info), BEKEN_RTC_SEND_LISTEN);
|
||||
break;
|
||||
case WEBSOCKET_EVENT_DISCONNECTED:
|
||||
//bk_printf("WEBSOCKET_EVENT_DISCONNECTED~~~~\n");
|
||||
|
Loading…
x
Reference in New Issue
Block a user