int aciga_action_in_set_keys(uint8_t msgid, uint32_t runid, uint8_t aiid, aciga_service_data_t *svc,uint8_t *out,int *out_len ) { ACIGA_LOGD("[ACTION_IN] %s",__func__); uint16_t key_id ; uint8_t week ; uint32_t date_start_time ; uint32_t date_end_time; uint16_t start_time; uint16_t end_time; props_data_t data[6]; data[0].piid = E_LOCK_PIID_KEY_ID; data[1].piid = E_LOCK_PIID_WEEKEND; data[2].piid = E_LOCK_PIID_START_TIME; data[3].piid = E_LOCK_PIID_END_TIME; data[4].piid = E_LOCK_PIID_START_DATA; data[5].piid = E_LOCK_PIID_END_DATE; if(aciga_action_in_scv_get_piid_val(svc,(props_data_t *)&data,ARRAY_SIZE(data))==0){ ACIGA_LOGE("get piid error"); return -1; }
时间: 2024-04-06 17:29:28 浏览: 16
这段代码定义了一个名为 aciga_action_in_set_keys 的函数,它有六个参数,分别为 msgid、runid、aiid、svc、out 和 out_len。函数返回一个 int 类型的值。
函数的主要作用是从 svc 中获取一组属性值,并根据这些属性值执行一些动作。具体来说,函数首先使用 __func__ 宏打印日志,然后声明了一些变量,包括 key_id、week、date_start_time、date_end_time、start_time、end_time 和 data 数组。
接下来,函数使用数组 data 来存储属性值,每个属性值都有一个 piid 标识符,分别为 E_LOCK_PIID_KEY_ID、E_LOCK_PIID_WEEKEND、E_LOCK_PIID_START_TIME、E_LOCK_PIID_END_TIME、E_LOCK_PIID_START_DATA 和 E_LOCK_PIID_END_DATE。
函数调用了 aciga_action_in_scv_get_piid_val 函数来从 svc 中获取属性值,并将这些值存储在 data 数组中。如果获取属性值失败,则函数返回 -1。
总之,这段代码实现了从 svc 中获取属性值并执行相应动作的功能。
相关问题
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。该结构体类型包含多个字段,具体信息未给出。
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; }
这是一个名为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。