case KEY_CODE_UP: next_index = index > SET_ID_VOLUME ? (index - 1) : (SET_ID_VOICE_ASSISTANT_SWITCH); next_list = lv_obj_get_child(p_setting_win, next_index); next_bg = lv_obj_get_child(next_list,0); ws01_setting_list_group[next_index].selected = true; ws01_setting_list_group[index].selected = false; lv_obj_remove_style(list, &style_btn_focus, 0); lv_obj_set_style_bg_color(bg, lv_color_hex(0x2e3033), 0); lv_obj_add_style(next_list, &style_btn_focus, 0); lv_obj_set_style_bg_color(next_bg, lv_color_hex(0x558dff), 0); lv_obj_scroll_to_view(next_list, LV_ANIM_OFF); break; case KEY_CODE_DOWN: next_index = index < SET_ID_VOICE_ASSISTANT_SWITCH ? (index + 1) : (SET_ID_VOLUME); next_list = lv_obj_get_child(p_setting_win, next_index); next_bg = lv_obj_get_child(next_list,0); ws01_setting_list_group[next_index].selected = true; ws01_setting_list_group[index].selected = false; lv_obj_remove_style(list, &style_btn_focus, 0); lv_obj_set_style_bg_color(bg, lv_color_hex(0x2e3033), 0); lv_obj_add_style(next_list, &style_btn_focus, 0); lv_obj_set_style_bg_color(next_bg, lv_color_hex(0x558dff), 0); lv_obj_scroll_to_view(next_list, LV_ANIM_OFF); break;
时间: 2024-04-26 08:26:27 浏览: 10
这段代码是用来处理按键操作的。KEY_CODE_UP 表示上移按键,KEY_CODE_DOWN 表示下移按键。当按下上移按键时,会选择上一个选项,当按下下移按键时,会选择下一个选项。同时,还会修改选项的背景颜色,以表示当前选中的选项。其中,lv_obj_get_child 函数用来获取指定对象的指定子对象,lv_obj_remove_style 函数用来移除指定对象的指定样式,lv_obj_add_style 函数用来添加指定对象的指定样式,lv_obj_set_style_bg_color 函数用来设置指定对象的背景颜色,lv_obj_scroll_to_view 函数用来滚动对象到可见区域。
相关问题
优化一下下面代码if(vsomeip::message_type_e::MT_REQUEST == _message->get_message_type()) { std::shared_ptr<vsomeip::message> its_response = vsomeip::runtime::get()->create_response(_message); if(TBOX_SERVICE_ID_LOCATION == _message->get_service()) { _location_service_response_map.insert(pair<uint16_t, std::shared_ptr<vsomeip::message>>(_message->get_method(), its_response)); } else if(TBOX_SERVICE_ID_TBS == _message->get_service()) { _tbox_service_response_map.insert(pair<uint16_t, std::shared_ptr<vsomeip::message>>(_message->get_method(), its_response)); } else if(TBOX_SERVICE_ID_RESV_UPDATE == _message->get_service()) { _resvUpdate_service_response_map.insert(pair<uint16_t, std::shared_ptr<vsomeip::message>>(_message->get_method(), its_response)); } else if(TBOX_SERVICE_ID_XCALL_VLAN04 == _message->get_service()){ _response_map.insert(pair<uint16_t, std::shared_ptr<vsomeip::message>>(_message->get_method(), its_response)); } else { free(its_data); DLT_IVI_VLAN04_LOG(DLT_LOG_WARN,DLT_STRING("unknown service id.")); return; } }
可以将多个if语句合并成一个switch语句,这样代码更简洁易读。同时,可以使用unordered_map代替多个map,将不同的服务ID对应的响应消息指针保存在同一个unordered_map中,这样可以避免代码重复。修改后的代码如下:
```
if (vsomeip::message_type_e::MT_REQUEST == _message->get_message_type()) {
std::shared_ptr<vsomeip::message> its_response = vsomeip::runtime::get()->create_response(_message);
uint16_t service_id = _message->get_service();
uint16_t method_id = _message->get_method();
switch (service_id) {
case TBOX_SERVICE_ID_LOCATION:
_location_service_response_map[method_id] = its_response;
break;
case TBOX_SERVICE_ID_TBS:
_tbox_service_response_map[method_id] = its_response;
break;
case TBOX_SERVICE_ID_RESV_UPDATE:
_resvUpdate_service_response_map[method_id] = its_response;
break;
case TBOX_SERVICE_ID_XCALL_VLAN04:
_response_map[method_id] = its_response;
break;
default:
free(its_data);
DLT_IVI_VLAN04_LOG(DLT_LOG_WARN, DLT_STRING("unknown service id."));
return;
}
}
```
static void SetKeyLength(HcfAlgParaValue value, void *attr) { SymKeyAttr *keyAttr = (SymKeyAttr *)attr; switch (value) { case HCF_ALG_AES_128: keyAttr->algo = HCF_ALG_AES; keyAttr->keySize = AES_KEY_SIZE_128; break; case HCF_ALG_AES_192: keyAttr->algo = HCF_ALG_AES; keyAttr->keySize = AES_KEY_SIZE_192; break; case HCF_ALG_AES_256: keyAttr->algo = HCF_ALG_AES; keyAttr->keySize = AES_KEY_SIZE_256; break; case HCF_ALG_SM4_128: keyAttr->algo = HCF_ALG_SM4; keyAttr->keySize = SM4_KEY_SIZE_128; break; case HCF_ALG_3DES_192: keyAttr->algo = HCF_ALG_DES; keyAttr->keySize = DES_KEY_SIZE_192; break; default: break; } }代码解析
这段代码定义了一个名为 SetKeyLength 的函数,它的作用是根据给定的 HcfAlgParaValue 值设置 SymKeyAttr 结构体中的算法标识符和密钥长度。
该函数接收两个参数,第一个参数是 HcfAlgParaValue 枚举类型的值,用于指定要设置的密钥长度。第二个参数是一个指向 SymKeyAttr 结构体的指针,用于指定要设置的密钥属性。
该函数使用 switch 语句根据给定的密钥长度值,设置 SymKeyAttr 结构体中的算法标识符和密钥长度。具体地,当 value 的值为 HCF_ALG_AES_128 时,将算法标识符设置为 HCF_ALG_AES,将密钥长度设置为 AES_KEY_SIZE_128;当 value 的值为 HCF_ALG_AES_192 时,将算法标识符设置为 HCF_ALG_AES,将密钥长度设置为 AES_KEY_SIZE_192;当 value 的值为 HCF_ALG_AES_256 时,将算法标识符设置为 HCF_ALG_AES,将密钥长度设置为 AES_KEY_SIZE_256;当 value 的值为 HCF_ALG_SM4_128 时,将算法标识符设置为 HCF_ALG_SM4,将密钥长度设置为 SM4_KEY_SIZE_128;当 value 的值为 HCF_ALG_3DES_192 时,将算法标识符设置为 HCF_ALG_DES,将密钥长度设置为 DES_KEY_SIZE_192。如果 value 的值不在上述情况中,该函数不做任何操作。
需要注意的是,该函数中的算法标识符和密钥长度的设置是通过修改 SymKeyAttr 结构体中的成员变量实现的。