int aciga_action_in_proc(aciga_peer_device_t *src,uint8_t msgid, uint32_t runid, uint8_t aiid, aciga_service_data_t *svc ) { unsigned char cmd_buf[UART_SEND_CMD_BUF_SIZE]; int cmd_len; int i; int ret =-1; if((svc!=NULL)&&(aciga_action_in_scv_check(svc)!=0)) { ACIGA_LOGD("svc siid error"); return -1; } for( i = 0; i <ARRAY_SIZE(g_action_in_cmd_pro); i++ ) { if( aiid == g_action_in_cmd_pro[i].cmd && NULL != g_action_in_cmd_pro[i].func ) { ret = g_action_in_cmd_pro[i].func(msgid,runid,aiid,svc,(uint8_t *)&cmd_buf,&cmd_len); if(ret==0){ aciga_device_uart_send(src,cmd_buf,cmd_len); } return 0; } } return -1; }
时间: 2024-04-06 08:30:51 浏览: 65
这是一个名为aciga_action_in_proc的函数,该函数接受一些参数,包括一个aciga_peer_device_t类型的指针src、三个整型参数msgid、runid和aiid、以及一个aciga_service_data_t类型的指针svc。该函数返回一个整型值。
该函数首先检查svc指针是否非空,如果不是,则调用aciga_action_in_scv_check函数检查svc指向的aciga_service_data_t类型数据的siid是否正确。如果不正确,则返回-1。
接下来,该函数遍历一个名为g_action_in_cmd_pro的数组,并查找与参数aiid匹配的元素。如果找到了匹配的元素,则调用该元素中的函数,并将msgid、runid、aiid、svc等参数传递给该函数。该函数返回的结果存储在cmd_buf缓冲区中,并将cmd_buf中的数据通过src指向的设备发送出去。如果函数执行成功,则返回0。
如果遍历完整个数组都没有找到匹配的元素,则返回-1。
相关问题
typedef struct aciga_dev_model_srv_cbs { void (*dev_prop_write_cb)(aciga_peer_device_t *src, uint8_t n_svc, aciga_service_data_t svc[]); void (*dev_prop_read_cb)(aciga_peer_device_t *src, uint8_t msgid, uint8_t n_svc, aciga_service_read_param_t svc[]); void (*dev_action_in_cb)(aciga_peer_device_t *src, uint8_t msgid, uint32_t runid, uint8_t aiid, aciga_service_data_t *svc); void (*dev_reset_cb)(aciga_peer_device_t *src, uint8_t flag); //flag 0: unbind without clear user data, 1: unbind and clear user data void (*dev_time_sync_data_cb)(aciga_peer_device_t *src, uint64_t utc_timestamp, int tz_offset_minutes); void (*dev_wifi_conf_cb)(aciga_peer_device_t *src, const char *ssid, const char *psk); void (*dev_group_add_cb)(aciga_peer_device_t *src, uint8_t msgid, int n_group, uint16_t groups[]); void (*dev_group_del_cb)(aciga_peer_device_t *src, uint8_t msgid, int n_group, uint16_t groups[]); void (*dev_group_get_cb)(aciga_peer_device_t *src, uint8_t msgid); void (*dev_relay_set_cb)(aciga_peer_device_t *src, uint8_t msgid, uint8_t enable); void (*dev_relay_get_cb)(aciga_peer_device_t *src, uint8_t msgid); void (*dev_factory_test_cmd_cb)(aciga_peer_device_t *src, const uint8_t *payload, size_t len); void (*dev_scene_conf_cb)(aciga_peer_device_t *src, uint8_t msgid, const uint8_t *payload, size_t len); } aciga_dev_model_srv_cbs_t;
这是一个结构体类型定义,名为`aciga_dev_model_srv_cbs_t`,其中包含了多个函数指针成员,每个函数指针成员都对应着一种回调函数。该结构体类型很可能是一个设备模型服务的回调函数集合,用于指定在设备模型服务中,当某个事件或操作发生时,应该调用哪些回调函数来进行处理。
具体来说,该结构体类型中的每个函数指针成员都有着不同的作用:
- `dev_prop_write_cb`:设备属性写回调函数,当需要写入设备属性时,会调用该回调函数来实现写入操作。
- `dev_prop_read_cb`:设备属性读回调函数,当需要读取设备属性时,会调用该回调函数来实现读取操作。
- `dev_action_in_cb`:设备动作回调函数,当需要执行某个设备动作时,会调用该回调函数来实现动作执行。
- `dev_reset_cb`:设备重置回调函数,当需要重置设备时,会调用该回调函数来实现重置操作。
- `dev_time_sync_data_cb`:时间同步回调函数,当需要对设备进行时间同步时,会调用该回调函数来实现同步操作。
- `dev_wifi_conf_cb`:WiFi配置回调函数,当需要对设备进行WiFi配置时,会调用该回调函数来实现配置操作。
- `dev_group_add_cb`:设备分组添加回调函数,当需要将设备添加到某个分组时,会调用该回调函数来实现添加操作。
- `dev_group_del_cb`:设备分组删除回调函数,当需要将设备从某个分组中删除时,会调用该回调函数来实现删除操作。
- `dev_group_get_cb`:设备分组查询回调函数,当需要查询设备所在的所有分组时,会调用该回调函数来实现查询操作。
- `dev_relay_set_cb`:继电器设置回调函数,当需要设置设备继电器状态时,会调用该回调函数来实现设置操作。
- `dev_relay_get_cb`:继电器查询回调函数,当需要查询设备继电器状态时,会调用该回调函数来实现查询操作。
- `dev_factory_test_cmd_cb`:设备出厂测试命令回调函数,当需要执行设备出厂测试命令时,会调用该回调函数来实现测试操作。
- `dev_scene_conf_cb`:场景配置回调函数,当需要对设备进行场景配置时,会调用该回调函数来实现配置操作。
typedef int (*pfun_action_in_cmd_proc)(uint8_t msgid, uint32_t runid, uint8_t aiid, aciga_service_data_t *svc,uint8_t *out,int *out_len); typedef struct
这段代码定义了一个函数指针类型pfun_action_in_cmd_proc和一个结构体类型。函数指针类型pfun_action_in_cmd_proc定义了一个函数指针,该函数指针指向一个函数,该函数有五个参数:msgid、runid、aiid、svc和out_len,其中svc是一个结构体类型的指针,out是一个指向uint8_t类型的指针。函数指针类型pfun_action_in_cmd_proc返回一个int类型的值。
结构体类型未给出完整定义,只是声明了一个结构体类型aciga_service_data_t。该结构体类型包含多个字段,具体信息未给出。
阅读全文