cat1 server中添加sms解析 190/1 190/head 191/target/1
authorSnickerSun <snickersun@163.com>
Wed, 29 May 2024 09:44:54 +0000 (17:44 +0800)
committerSnickerSun <snickersun@163.com>
Wed, 29 May 2024 09:44:54 +0000 (17:44 +0800)
code/sdk/drivers/peripheral/slip/cat1Service/cat1_server.cpp
code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c
code/sdk/drivers/peripheral/utils/pdu.c
code/sdk/drivers/peripheral/utils/pdu.h

index 9ac12cb..5f60e4b 100644 (file)
@@ -273,7 +273,56 @@ void udp_send_msg_toCat1(uint8_t cmd,char *content)
 #define MSG_SPLIT_CHAR ","
 #define MSG_SPLIT_CHAR2 "@"
 
+static int decodeSMS(char* msg)
+{
+// FE150117ref:0@total_num:1@seq:1@data:0100240D91688139687502F200084250926172722316662F6211670B53CB621153EF80FD9700898198847EA6
+    
+    runtime_status_t * runtime = get_device_runtime_status();
+    int msglen = strlen(msg)+1;
+    if (msglen < 25)
+    {
+        PRINT("sms msg len is too short !\r\n");
+        return  -1;
+    }
+
+    char* msgbuf = (char*)malloc(msglen);
+    if (msgbuf == NULL) return -2;
+    memcpy_s(msgbuf,msglen,msg,msglen);
+    msgbuf[msglen-1] = '\0';
+
+    char* p = MSG_SPLIT_CHAR;
+    if (strstr(msgbuf,MSG_SPLIT_CHAR2) != NULL)
+    {
+        p = MSG_SPLIT_CHAR2;
+    }
+    char *pchStrTmpIn = nullptr;
+    char *s = nullptr;
+    for (s = strtok_r(msgbuf,p,&pchStrTmpIn); s!=NULL;s=strtok_r(NULL,p,&pchStrTmpIn))
+    {
+        if((strlen(s)> 4) && (strncmp(s,"ref:",4) == 0) )
+        {
+            char* ptmp=s+4;
+            PRINT("ref  %s\r\n",ptmp);
+        }else if ((strlen(s)> 10) && (strncmp(s,"total_num:",10) == 0) )
+        {
+            char* ptmp=s+10;
+            PRINT("total_num  %s\r\n",ptmp);
+        }else if ((strlen(s)> 4) && (strncmp(s,"seq:",4) == 0) )
+        {
+            char* ptmp=s+4;
+            PRINT("seq  %s\r\n",ptmp);
+        }else if ((strlen(s)> 5) && (strncmp(s,"data:",5) == 0) )
+        {
+            char* ptmp=s+5;
+            PRINT("data  %s\r\n",ptmp);
+            pdu_decode_example(ptmp);
+        }
+    }
+    free(msgbuf);
+    msgbuf=NULL;
 
+    return 0;    
+}
 // const char* msgboot = "BOOTUP:pyVer,PY_SRV_V4,modemVer,EG810MCNLAR06A01M08_VOLTE_OCPU_QPY_BETA0312";
 // const char* msgver ="pyVer,PY_SRV_V4,modemVer,EG810MCNLAR06A01M08_VOLTE_OCPU_QPY_BETA0312";
 static int decodeVersion(char* msg)
@@ -633,8 +682,11 @@ int cat1_handle_version_msg(struct tcp_msg_t *msg)
 int cat1_handle_sms(struct tcp_msg_t *msg)
 {
     char* smsmsg=msg->buffer;
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_MAIN_SERVICE,"cat1 cat1_handle_sms %s\n",smsmsg);
-    //添加到消息列表里
+    // WEARABLE_LOGI(WEARABLE_LOG_MODULE_MAIN_SERVICE,"cat1 cat1_handle_sms %s\n",smsmsg);
+    if (decodeSMS(smsmsg) ==0 )
+    {
+        //添加到消息列表里
+    }
     return 1;
 }
 
@@ -873,9 +925,6 @@ static int udp_packet_parse(char *rx_buffer, int len)
             case UDP_CMD_GET_RECV_NETWORKSTAT:
                 index = cat1_handle_networ_msg(msg);
                 break;
-            case UDP_MSG_SMS:
-                           index = cat1_handle_sms(msg);
-                break;
             case UDP_CMD_GET_TIME:
                            index = cat1_handle_timesync(msg);
                 break;
@@ -923,6 +972,8 @@ static int udp_packet_parse(char *rx_buffer, int len)
                 #endif
                 break;
             case UDP_MSG_RECV_CAT1_SMS_CONTENT://接收单条短信内容
+            case UDP_MSG_SMS:
+                           index = cat1_handle_sms(msg);
                 break;
                    default:
                            PRINT("error message: %s\n", rx_buffer);
index 4aa3b33..069aa70 100644 (file)
@@ -476,28 +476,7 @@ static uint32_t custom_utils_pdudec(uint8_t *para, uint32_t paraLen, char *strCo
     const char *inpdustr = (const char*)argv[0];
      
     
-    struct tm sms_broken_time={0};
-    time_t sms_broken_timestamp=0;
-    int timezone = 0; //单位15分钟
-    char phone_number[24]={0};
-    int phone_number_size=24;
-    char pduarray[128]={0};
-    int pduarray_size = 128;
-    char text[128]={0};
-    int text_size=128;
-
-    /**
-    strHex2bytearray 0891683108705505F0240D91685125419665F1000842508281025223108BA152127684597D597D768457FA91D1 ret 0
-    output_sms_text_length 16, index 29
-    pdustr len 45,phonenumb:8615521469561 ,text:计划的好好的基金 ,txtlen:24, receive time 0124-04-28 18:20:25  offset 28800 , timestampe 1716891625
-    */
-
-    ret=strHex2bytearray(inpdustr,(char*)pduarray,&pduarray_size);
-    printf("strHex2bytearray %s ret %d\n",inpdustr,ret);
-    ret = pdu_decode((unsigned char*)pduarray,pduarray_size,&sms_broken_time,&timezone,&sms_broken_timestamp,(char*)phone_number,phone_number_size,(char*)text,text_size);
-    printf("pdustr len %d,phonenumb:%s ,text:%s ,txtlen:%d, ",text_size,phone_number,text,ret);
-    printf("receive time %04d-%02d-%02d %02d:%02d:%02d  offset %d , timestampe %d\n",sms_broken_time.tm_year,sms_broken_time.tm_mon,sms_broken_time.tm_mday,sms_broken_time.tm_hour,sms_broken_time.tm_min,sms_broken_time.tm_sec,
-    timezone,sms_broken_timestamp);
+    pdu_decode_example(inpdustr);
 
     return ERRCODE_SUCC;
 }
index 0ad06c0..4ad0602 100644 (file)
@@ -32,115 +32,6 @@ SwapDecimalNibble(const unsigned char x)
 {
        return (x / 16) + ((x % 16) * 10);
 }
-
-// Encode/Decode PDU: Translate ASCII 7bit characters to 8bit buffer.
-// SMS encoding example from: http://www.dreamfabric.com/sms/.
-//
-// 7-bit ASCII: "hellohello"
-// [0]:h   [1]:e   [2]:l   [3]:l   [4]:o   [5]:h   [6]:e   [7]:l   [8]:l   [9]:o
-// 1101000 1100101 1101100 1101100 1101111 1101000 1100101 1101100 1101100 1101111
-//               |             |||           ||||| |               |||||||  ||||||
-// /-------------/   ///-------///     /////-///// \------------\  |||||||  \\\\\\ .
-// |                 |||               |||||                    |  |||||||   ||||||
-// input buffer position
-// 10000000 22111111 33322222 44443333 55555333 66666655 77777776 98888888 --999999
-// |                 |||               |||||                    |  |||||||   ||||||
-// 8bit encoded buffer
-// 11101000 00110010 10011011 11111101 01000110 10010111 11011001 11101100 00110111
-// E8       32       9B       FD       46       97       D9       EC       37
-
-
-// // Encode PDU message by merging 7 bit ASCII characters into 8 bit octets.
-// static int
-// EncodePDUMessage(const char* sms_text, int sms_text_length, unsigned char* output_buffer, int buffer_size)
-// {
-//     // Check if output buffer is big enough.
-//     if ((sms_text_length * 7 + 7) / 8 > buffer_size)
-//             return -1;
-
-//     int output_buffer_length = 0;
-//     int carry_on_bits = 1;
-//     int i = 0;
-
-//     for (; i < sms_text_length - 1; ++i) {
-//             output_buffer[output_buffer_length++] =
-//                     ((sms_text[i] & BITMASK_7BITS) >> (carry_on_bits - 1)) |
-//                     ((sms_text[i + 1] & BITMASK_7BITS) << (8 - carry_on_bits));
-//             carry_on_bits++;
-//             if (carry_on_bits == 8) {
-//                     carry_on_bits = 1;
-//                     ++i;
-//             }
-//     }
-
-
-//     if (i < sms_text_length)
-//             output_buffer[output_buffer_length++] = (sms_text[i] & BITMASK_7BITS) >> (carry_on_bits - 1);
-
-//     return output_buffer_length;
-// }
-
-// // Decode PDU message by splitting 8 bit encoded buffer into 7 bit ASCII
-// // characters.
-// static int
-// DecodePDUMessage(const unsigned char* buffer, int buffer_length, char* output_sms_text, int sms_text_length)
-// {
-//     int output_text_length = 0;
-//     if (buffer_length > 0)
-//             output_sms_text[output_text_length++] = BITMASK_7BITS & buffer[0];
-
-//     int carry_on_bits = 1;
-//     int i = 1;
-//     for (; i < buffer_length; ++i) {
-
-//             output_sms_text[output_text_length++] = BITMASK_7BITS & ((buffer[i] << carry_on_bits) | (buffer[i - 1] >> (8 - carry_on_bits)));
-
-//             if (output_text_length == sms_text_length) break;
-
-//             carry_on_bits++;
-
-//             if (carry_on_bits == 8) {
-//                     carry_on_bits = 1;
-//                     output_sms_text[output_text_length++] = buffer[i] & BITMASK_7BITS;
-//                     if (output_text_length == sms_text_length) break;
-//             }
-
-//     }
-//     if (output_text_length < sms_text_length)  // Add last remainder.
-//             output_sms_text[output_text_length++] = buffer[i - 1] >> (8 - carry_on_bits);
-
-//     return output_text_length;
-// }
-
-// Encode a digit based phone number for SMS based format.
-static int
-EncodePhoneNumber(const char* phone_number, unsigned char* output_buffer, int buffer_size)
-{
-       int output_buffer_length = 0;  
-       const int phone_number_length = strlen(phone_number);
-
-       // Check if the output buffer is big enough.
-       if ((phone_number_length + 1) / 2 > buffer_size)
-               return -1;
-
-       int i = 0;
-       for (; i < phone_number_length; ++i) {
-
-               if (phone_number[i] < '0' && phone_number[i] > '9')
-                       return -1;
-
-               if (i % 2 == 0) {
-                       output_buffer[output_buffer_length++] = BITMASK_HIGH_4BITS | (phone_number[i] - '0');
-               } else {
-                       output_buffer[output_buffer_length - 1] =
-                               (output_buffer[output_buffer_length - 1] & BITMASK_LOW_4BITS) |
-                               ((phone_number[i] - '0') << 4); 
-               }
-       }
-
-       return output_buffer_length;
-}
-
 // Decode a digit based phone number for SMS based format.
 static int
 DecodePhoneNumber(const unsigned char* buffer, int phone_number_length, char* output_phone_number)
@@ -212,68 +103,62 @@ uint8_t *utf82uni (const uint8_t *uft8_in,uint8_t **uni_out)
        return 0;
 }
 
+// 十六进制数据映射表
+static const char HexTbl[]={"0123456789ABCDEF"};
+ 
+// 十六进制字符转为数字
+static unsigned char HexChar2Number(char hex)
+{
+       unsigned char value = 0;
+       if(hex >= '0' && hex <= '9')
+       {
+               value = hex - '0';      
+       }
+       else if(hex >= 'A' && hex <= 'Z')
+       {
+               value = hex - 'A' + 10; 
+       }
+       else if(hex >= 'a' && hex <= 'z')
+       {
+               value = hex - 'a' + 10; 
+       }
+ 
+       return value;
+}
+ 
+// 两个十六进制字符转为十进制数据
+static unsigned char strHex2Byte(char *pHex)
+{
+       unsigned char value;
+       value = HexChar2Number(pHex[0]) << 4;
+       value |= HexChar2Number(pHex[1]);
+       
+       return value;   
+}
 
 
-                        
-// // Encode a SMS message to PDU、
-// int
-// pdu_encode(const char* service_center_number, const char* phone_number, const char* sms_text,
-//        unsigned char* output_buffer, int buffer_size)
-// {   
-//     if (buffer_size < 2)
-//             return -1;
-
-//     int output_buffer_length = 0;
-
-//     // 1. Set SMS center number.
-//     int length = 0;
-//     if (service_center_number && strlen(service_center_number) > 0) {
-//             output_buffer[1] = TYPE_OF_ADDRESS_INTERNATIONAL_PHONE;
-//             length = EncodePhoneNumber(service_center_number,
-//                                        output_buffer + 2, buffer_size - 2);
-//             if (length < 0 && length >= 254)
-//                     return -1;
-//             length++;  // Add type of address.
-//     }
-//     output_buffer[0] = length;
-//     output_buffer_length = length + 1;
-//     if (output_buffer_length + 4 > buffer_size)
-//             return -1;  // Check if it has space for four more bytes.
-
-//     // 2. Set type of message.
-//     output_buffer[output_buffer_length++] = SMS_SUBMIT;
-//     output_buffer[output_buffer_length++] = 0x00;  // Message reference.
-
-//     // 3. Set phone number.
-//     output_buffer[output_buffer_length] = strlen(phone_number);
-//     output_buffer[output_buffer_length + 1] = TYPE_OF_ADDRESS_INTERNATIONAL_PHONE;
-//     length = EncodePhoneNumber(phone_number,
-//                                output_buffer + output_buffer_length + 2,
-//                                buffer_size - output_buffer_length - 2);
-//     output_buffer_length += length + 2;
-//     if (output_buffer_length + 4 > buffer_size)
-//             return -1;  // Check if it has space for four more bytes.
-
-
-//     // 4. Protocol identifiers.
-//     output_buffer[output_buffer_length++] = 0x00;  // TP-PID: Protocol identifier.
-//     output_buffer[output_buffer_length++] = 0x00;  // TP-DCS: Data coding scheme.
-//     output_buffer[output_buffer_length++] = 0xB0;  // TP-VP: Validity: 10 days
-
-//     // 5. SMS message.
-//     const int sms_text_length = strlen(sms_text);
-//     if (sms_text_length > SMS_MAX_7BIT_TEXT_LENGTH)
-//             return -1;
-//     output_buffer[output_buffer_length++] = sms_text_length;
-//     length = EncodePDUMessage(sms_text, sms_text_length,
-//                               output_buffer + output_buffer_length, 
-//                               buffer_size - output_buffer_length);
-//     if (length < 0)
-//             return -1;
-//     output_buffer_length += length;
-
-//     return output_buffer_length;
-// }
+int strHex2bytearray(char *inputHexstr, char *output_bytes, int *max_output_bytes_count)
+{
+       if(inputHexstr == NULL || output_bytes == NULL || max_output_bytes_count == NULL)
+       {
+               return -1;
+       }
+       int inputlen=strlen(inputHexstr);
+       if (inputlen%2 != 0 || inputlen<2) 
+               return -2;
+       int outputlen = inputlen/2;
+       if (*max_output_bytes_count < outputlen)
+       {
+               outputlen = *max_output_bytes_count;
+       }
+       for (int i = 0; i< outputlen ; i++)
+       {
+               output_bytes[i]=strHex2Byte(&inputHexstr[i*2]);
+       }
+       *max_output_bytes_count = outputlen;
+       return 0;
+       
+}
 
 int pdu_decode(unsigned char* buffer, int buffer_length,
               struct tm* output_sms_time, int* output_sms_zone,time_t *output_sms_timestamp,
@@ -339,7 +224,7 @@ int pdu_decode(unsigned char* buffer, int buffer_length,
 
        const int output_sms_text_length = buffer[sms_start];
        if (sms_text_size < output_sms_text_length) return -6;  // Cannot hold decoded buffer.
-       printf("output_sms_text_length %d, index %d\n",output_sms_text_length,sms_start + 1);
+       // printf("output_sms_text_length %d, index %d\n",output_sms_text_length,sms_start + 1);
 
 
        unsigned char * unicodebuf=buffer+sms_start+1;
@@ -364,95 +249,83 @@ int pdu_decode(unsigned char* buffer, int buffer_length,
        return decoded_sms_text_size;
 }
 
-
-// 十六进制数据映射表
-static const char HexTbl[]={"0123456789ABCDEF"};
- 
-// 十六进制字符转为数字
-static unsigned char HexChar2Number(char hex)
+/**
+ * 输入: inpdustr  pdu hex string , 申请好内存的变量: 时间戳 output_sms_timestamp, 
+ *               发送电话号缓存output_sender_phone_number及缓存长度 sender_phone_number_size
+ *               短信缓存output_sms_text及缓存长度sms_text_size
+ * 输出:
+ *             时间戳 output_sms_timestamp
+ *             发送电话号output_sender_phone_number
+ *             短信内容output_sms_text
+ * 返回:
+ *             成功返回sms的文本长度,失败返回 负值
+*/
+int pdu_decode_hexstr(unsigned char* inpdustr, 
+              time_t *output_sms_timestamp,
+              char* output_sender_phone_number, int sender_phone_number_size,
+              char* output_sms_text, int sms_text_size)
 {
-       unsigned char value = 0;
-       if(hex >= '0' && hex <= '9')
-       {
-               value = hex - '0';      
-       }
-       else if(hex >= 'A' && hex <= 'Z')
+
+       if( inpdustr ==NULL || output_sms_timestamp ==NULL || output_sender_phone_number == NULL || output_sms_text==NULL)
        {
-               value = hex - 'A' + 10; 
+               return -11;
        }
-       else if(hex >= 'a' && hex <= 'z')
+    char pduarray[256]={0};
+    int pduarray_size = 256;
+    struct tm sms_broken_time={0};
+    int timezone = 0; //单位15分钟
+
+
+       int ret=strHex2bytearray((char*)inpdustr,(char*)pduarray,&pduarray_size);
+    // printf("strHex2bytearray %s ret %d\n",inpdustr,ret);
+       if (ret != 0)
        {
-               value = hex - 'a' + 10; 
+               return -12;
        }
- 
-       return value;
+
+       ret = pdu_decode((unsigned char*)pduarray,pduarray_size,&sms_broken_time,&timezone,output_sms_timestamp,output_sender_phone_number,sender_phone_number_size,(char*)output_sms_text,sms_text_size);
+    // printf("pdustr len %d,phonenumb:%s ,text:%s ,txtlen:%d, ",strlen(inpdustr),output_sender_phone_number,output_sms_text,ret);
+    // printf("receive time %04d-%02d-%02d %02d:%02d:%02d  offset %d , timestampe %d\n",sms_broken_time.tm_year,sms_broken_time.tm_mon,sms_broken_time.tm_mday,sms_broken_time.tm_hour,sms_broken_time.tm_min,sms_broken_time.tm_sec,
+    // timezone,*output_sms_timestamp);
+       return ret;
 }
- 
-// 两个十六进制字符转为十进制数据
-static unsigned char strHex2Byte(char *pHex)
+/**
+strHex2bytearray 0891683108705505F0240D91685125419665F1000842508281025223108BA152127684597D597D768457FA91D1 ret 0
+output_sms_text_length 16, index 29
+pdustr len 45,phonenumb:8615521469561 ,text:计划的好好的基金 ,txtlen:24, receive time 0124-04-28 18:20:25  offset 28800 , timestampe 1716891625
+*/
+
+int pdu_decode_example(const char *inpdustr )
 {
-       unsigned char value;
-       value = HexChar2Number(pHex[0]) << 4;
-       value |= HexChar2Number(pHex[1]);
-       
-       return value;   
-}
 
+       int ret=0;
+    time_t sms_broken_timestamp=0;
+    char phone_number[24]={0};
+    int phone_number_size=24;
+    char text[256]={0};
+    int text_size=256;
 
-int strHex2bytearray(char *inputHexstr, char *output_bytes, int *max_output_bytes_count)
-{
-       if(inputHexstr == NULL || output_bytes == NULL || max_output_bytes_count == NULL)
+    ret = pdu_decode_hexstr(inpdustr,&sms_broken_timestamp,phone_number,phone_number_size,text,text_size);
+   
+       if (ret <= 0)
        {
-               return -1;
+               printf("pdu_decode_hexstr Error %d",ret);
+       }else{
+               printf(" recv sms phonenumber %s len %d, timestamp %d , smstxt %s len %d , pdu_decode_hexstr ret %d\n",phone_number,strlen(phone_number),sms_broken_timestamp,text,strlen(text),ret);
+               struct tm * timenow =localtime(&sms_broken_timestamp);
+               printf("receive timenow %04d-%02d-%02d %02d:%02d:%02d  \n",
+                       timenow->tm_year+1900,
+                       timenow->tm_mon+1,
+                       timenow->tm_mday,
+                       timenow->tm_hour,
+                       timenow->tm_min,
+                       timenow->tm_sec);
        }
-       int inputlen=strlen(inputHexstr);
-       if (inputlen%2 != 0 || inputlen<2) 
-               return -2;
-       int outputlen = inputlen/2;
-       if (*max_output_bytes_count < outputlen)
-       {
-               outputlen = *max_output_bytes_count;
-       }
-       for (int i = 0; i< outputlen ; i++)
-       {
-               output_bytes[i]=strHex2Byte(&inputHexstr[i*2]);
-       }
-       *max_output_bytes_count = outputlen;
-       return 0;
-       
+       return ret;
 }
 
-
-
-// int main_pdu_decode_example()
-// {
-
-// struct tm sms_broken_time={0};
-// time_t sms_broken_timestamp=0;
-// int timezone = 0; //单位15分钟
-// char phone_number[24]={0};
-// int phone_number_size=24;
-// char text[256]={0};
-// int text_size=256;
-
-// /**
-// strHex2bytearray 0891683108705505F0240D91685125419665F1000842508281025223108BA152127684597D597D768457FA91D1 ret 0
-// output_sms_text_length 16, index 29
-// pdustr len 45,phonenumb:8615521469561 ,text:计划的好好的基金 ,txtlen:24, receive time 0124-04-28 18:20:25  offset 28800 , timestampe 1716891625
-// */
-
-// char * inputpdutxt="0891683108705505F0240D91685125419665F1000842508281025223108BA152127684597D597D768457FA91D1";
-// int ret=strHex2bytearray(inputpdutxt,text,&text_size);
-// printf("strHex2bytearray %s ret %d\n",inputpdutxt,ret);
-// ret = pdu_decode(text,text_size,&sms_broken_time,&timezone,&sms_broken_timestamp,phone_number,phone_number_size,text,text_size);
-// printf("pdustr len %d,phonenumb:%s ,text:%s ,txtlen:%d, ",text_size,phone_number,text,ret);
-// printf("receive time %04d-%02d-%02d %02d:%02d:%02d  offset %d , timestampe %d\n",sms_broken_time.tm_year,sms_broken_time.tm_mon,sms_broken_time.tm_mday,sms_broken_time.tm_hour,sms_broken_time.tm_min,sms_broken_time.tm_sec,
-// timezone,sms_broken_timestamp);
-
-// return 0;
-// }
-
 // int main()
 // {
-//     return main_pdu_decode_example();
+       // const char *inpdustr = "0891683108705505F0240D91685125419665F1000842508281025223108BA152127684597D597D768457FA91D1"; 
+//     return pdu_decode_example(inpdustr);
 // }
\ No newline at end of file
index 0a24e77..0481bd8 100644 (file)
@@ -32,7 +32,22 @@ int pdu_decode( unsigned char* pdu, int pdu_len,
  * Convert Hex String to binary array 
 */
 int strHex2bytearray(char *inputHexstr, char *output_bytes, int *max_output_bytes_count);
-
+/**
+ * 输入: inpdustr  pdu hex string , 申请好内存的变量: 时间戳 output_sms_timestamp, 
+ *               发送电话号缓存output_sender_phone_number及缓存长度 sender_phone_number_size
+ *               短信缓存output_sms_text及缓存长度sms_text_size
+ * 输出:
+ *             时间戳 output_sms_timestamp
+ *             发送电话号output_sender_phone_number
+ *             短信内容output_sms_text
+ * 返回:
+ *             成功返回sms的文本长度,失败返回 负值
+*/
+int pdu_decode_hexstr(unsigned char* inpdustr, 
+              time_t *output_sms_timestamp,
+              char* output_sender_phone_number, int sender_phone_number_size,
+              char* output_sms_text, int sms_text_size);
+int pdu_decode_example(const char *inpdustr );
 
 #endif   // SMS_SMS_H_