Add missing option for getting tdma signal strength
[project/uqmi.git] / commands-wms.c
index b85cd705b94dfd93a3bc90161d14e9043d15baff..e3bcbc87eaeb14cf7ce59e88327a94fb77872ce9 100644 (file)
@@ -512,7 +512,7 @@ pdu_encode_semioctet(unsigned char *dest, const char *str)
                str++;
        }
 
-       return len;
+       return lower ? len : (len + 1);
 }
 
 static int
@@ -560,7 +560,7 @@ pdu_encode_number(unsigned char *dest, const char *str, bool smsc)
        }
 
        for (i = 0; str[i]; i++) {
-               if (str[i] >= '0' || str[i] <= '9')
+               if (str[i] >= '0' && str[i] <= '9')
                        continue;
 
                ascii = true;
@@ -591,7 +591,7 @@ pdu_encode_data(unsigned char *dest, const char *str)
 
        dest[len++] = 0;
        len += pdu_encode_7bit_str(&dest[len], str);
-       dest[0] = len - 1;
+       dest[0] = strlen(str);
 
        return len;
 }
@@ -612,12 +612,12 @@ cmd_wms_send_message_prepare(struct qmi_dev *qmi, struct qmi_request *req, struc
        unsigned char protocol_id = 0x00;
        unsigned char dcs = 0x00;
 
-       if (!_send.smsc || !*_send.smsc || !_send.target || !*_send.target) {
+       if (!_send.target || !*_send.target) {
                uqmi_add_error("Missing argument");
                return QMI_CMD_EXIT;
        }
 
-       if (strlen(_send.smsc) > 16 || strlen(_send.target) > 16 || strlen(arg) > 160) {
+       if ((_send.smsc && strlen(_send.smsc) > 16) || strlen(_send.target) > 16 || strlen(arg) > 160) {
                uqmi_add_error("Argument too long");
                return QMI_CMD_EXIT;
        }
@@ -625,7 +625,11 @@ cmd_wms_send_message_prepare(struct qmi_dev *qmi, struct qmi_request *req, struc
        if (_send.flash)
                dcs |= 0x10;
 
-       cur += pdu_encode_number(cur, _send.smsc, true);
+       if (!_send.smsc || !*_send.smsc)
+               *(cur++) = 0;
+       else
+               cur += pdu_encode_number(cur, _send.smsc, true);
+
        *(cur++) = first_octet;
        *(cur++) = 0; /* reference */