Loading lib/qmi_encdec.c +19 −14 Original line number Diff line number Diff line Loading @@ -88,7 +88,8 @@ static int _qmi_kernel_decode(struct elem_info *ei_array, void *out_c_struct, void *in_buf, uint32_t in_buf_len, int dec_level); static struct elem_info *skip_to_next_elem(struct elem_info *ei_array); static struct elem_info *skip_to_next_elem(struct elem_info *ei_array, int level); /** * qmi_calc_max_msg_len() - Calculate the maximum length of a QMI message Loading Loading @@ -151,7 +152,7 @@ static int qmi_calc_min_msg_len(struct elem_info *ei_array, while (temp_ei->data_type != QMI_EOTI) { /* Optional elements do not count in minimum length */ if (temp_ei->data_type == QMI_OPT_FLAG) { temp_ei = skip_to_next_elem(temp_ei); temp_ei = skip_to_next_elem(temp_ei, level); continue; } Loading Loading @@ -327,6 +328,7 @@ static int qmi_encode_struct_elem(struct elem_info *ei_array, /** * skip_to_next_elem() - Skip to next element in the structure to be encoded * @ei_array: Struct info describing the element to be skipped. * @level: Depth level of encoding/decoding to identify nested structures. * * @return: Struct info of the next element that can be encoded. * Loading @@ -335,15 +337,20 @@ static int qmi_encode_struct_elem(struct elem_info *ei_array, * optional element can be skipped. This function can be used to perform * that operation. */ static struct elem_info *skip_to_next_elem(struct elem_info *ei_array) static struct elem_info *skip_to_next_elem(struct elem_info *ei_array, int level) { struct elem_info *temp_ei = ei_array; uint8_t tlv_type; if (level > 1) { temp_ei = temp_ei + 1; } else { do { tlv_type = temp_ei->tlv_type; temp_ei = temp_ei + 1; } while (tlv_type == temp_ei->tlv_type); } return temp_ei; } Loading Loading @@ -401,7 +408,7 @@ static int _qmi_kernel_encode(struct elem_info *ei_array, if (opt_flag_value) temp_ei = temp_ei + 1; else temp_ei = skip_to_next_elem(temp_ei); temp_ei = skip_to_next_elem(temp_ei, enc_level); break; case QMI_DATA_LEN: Loading @@ -417,13 +424,11 @@ static int _qmi_kernel_encode(struct elem_info *ei_array, } rc = qmi_encode_basic_elem(buf_dst, &data_len_value, 1, data_len_sz); if (data_len_value) { UPDATE_ENCODE_VARIABLES(temp_ei, buf_dst, encoded_bytes, tlv_len, encode_tlv, rc); encode_tlv = 0; } else { temp_ei = skip_to_next_elem(temp_ei); } if (!data_len_value) temp_ei = skip_to_next_elem(temp_ei, enc_level); break; case QMI_UNSIGNED_1_BYTE: Loading Loading
lib/qmi_encdec.c +19 −14 Original line number Diff line number Diff line Loading @@ -88,7 +88,8 @@ static int _qmi_kernel_decode(struct elem_info *ei_array, void *out_c_struct, void *in_buf, uint32_t in_buf_len, int dec_level); static struct elem_info *skip_to_next_elem(struct elem_info *ei_array); static struct elem_info *skip_to_next_elem(struct elem_info *ei_array, int level); /** * qmi_calc_max_msg_len() - Calculate the maximum length of a QMI message Loading Loading @@ -151,7 +152,7 @@ static int qmi_calc_min_msg_len(struct elem_info *ei_array, while (temp_ei->data_type != QMI_EOTI) { /* Optional elements do not count in minimum length */ if (temp_ei->data_type == QMI_OPT_FLAG) { temp_ei = skip_to_next_elem(temp_ei); temp_ei = skip_to_next_elem(temp_ei, level); continue; } Loading Loading @@ -327,6 +328,7 @@ static int qmi_encode_struct_elem(struct elem_info *ei_array, /** * skip_to_next_elem() - Skip to next element in the structure to be encoded * @ei_array: Struct info describing the element to be skipped. * @level: Depth level of encoding/decoding to identify nested structures. * * @return: Struct info of the next element that can be encoded. * Loading @@ -335,15 +337,20 @@ static int qmi_encode_struct_elem(struct elem_info *ei_array, * optional element can be skipped. This function can be used to perform * that operation. */ static struct elem_info *skip_to_next_elem(struct elem_info *ei_array) static struct elem_info *skip_to_next_elem(struct elem_info *ei_array, int level) { struct elem_info *temp_ei = ei_array; uint8_t tlv_type; if (level > 1) { temp_ei = temp_ei + 1; } else { do { tlv_type = temp_ei->tlv_type; temp_ei = temp_ei + 1; } while (tlv_type == temp_ei->tlv_type); } return temp_ei; } Loading Loading @@ -401,7 +408,7 @@ static int _qmi_kernel_encode(struct elem_info *ei_array, if (opt_flag_value) temp_ei = temp_ei + 1; else temp_ei = skip_to_next_elem(temp_ei); temp_ei = skip_to_next_elem(temp_ei, enc_level); break; case QMI_DATA_LEN: Loading @@ -417,13 +424,11 @@ static int _qmi_kernel_encode(struct elem_info *ei_array, } rc = qmi_encode_basic_elem(buf_dst, &data_len_value, 1, data_len_sz); if (data_len_value) { UPDATE_ENCODE_VARIABLES(temp_ei, buf_dst, encoded_bytes, tlv_len, encode_tlv, rc); encode_tlv = 0; } else { temp_ei = skip_to_next_elem(temp_ei); } if (!data_len_value) temp_ei = skip_to_next_elem(temp_ei, enc_level); break; case QMI_UNSIGNED_1_BYTE: Loading