diff --git a/drivers/qmimodem/qmi.c b/drivers/qmimodem/qmi.c index 17c6a6f3..c538cb97 100644 --- a/drivers/qmimodem/qmi.c +++ b/drivers/qmimodem/qmi.c @@ -1720,6 +1720,27 @@ bool qmi_result_get_uint8(struct qmi_result *result, uint8_t type, return true; } +bool qmi_result_get_int16(struct qmi_result *result, uint8_t type, + int16_t *value) +{ + const unsigned char *ptr; + uint16_t len, tmp; + + if (!result || !type) + return false; + + ptr = tlv_get(result->data, result->length, type, &len); + if (!ptr) + return false; + + memcpy(&tmp, ptr, 2); + + if (value) + *value = GINT16_FROM_LE(tmp); + + return true; +} + bool qmi_result_get_uint16(struct qmi_result *result, uint8_t type, uint16_t *value) { diff --git a/drivers/qmimodem/qmi.h b/drivers/qmimodem/qmi.h index bfe8e6b5..b4955b40 100644 --- a/drivers/qmimodem/qmi.h +++ b/drivers/qmimodem/qmi.h @@ -130,6 +130,8 @@ const void *qmi_result_get(struct qmi_result *result, uint8_t type, char *qmi_result_get_string(struct qmi_result *result, uint8_t type); bool qmi_result_get_uint8(struct qmi_result *result, uint8_t type, uint8_t *value); +bool qmi_result_get_int16(struct qmi_result *result, uint8_t type, + int16_t *value); bool qmi_result_get_uint16(struct qmi_result *result, uint8_t type, uint16_t *value); bool qmi_result_get_uint32(struct qmi_result *result, uint8_t type,