Add mbtk/liblynq_lib_v2/ mbtk/libql_lib_v2/
Change-Id: Idbb802cd805b34603ccf65bff9818725a6955e51
diff --git a/mbtk/libql_lib_v2/src/ql_sms.c b/mbtk/libql_lib_v2/src/ql_sms.c
new file mode 100755
index 0000000..cbad623
--- /dev/null
+++ b/mbtk/libql_lib_v2/src/ql_sms.c
@@ -0,0 +1,493 @@
+//#include "lynq/lynq_sms_api.h"
+#include "mbtk_info_api.h"
+#include "mbtk_pdu_sms.h"
+#include "ql/ql_sms.h"
+
+
+#include <stdio.h>
+#include <stdlib.h>
+
+
+#define TELEPHONE_NUM_MAX 16
+#define MSM_NUMBER_MAX 1024+1
+#define RES_NUM_MIN 128
+
+#define DSC_to_msg(DSC) (DSC == 0 ? "Bit7" : (DSC == 1 ? "Bit8" : "UCS2"))
+
+static mbtk_info_handle_t* info_handle = NULL;
+static char center_address[15] = {0};
+
+
+// 编码后短信
+
+#if 0
+struct PDUS {
+ unsigned int count;
+ char **PDU;
+};
+#endif
+
+void lynq_sms_state_change_cb(const void* data, int data_len)
+{
+ LOGV("sms_state_change_cb()----------start\n");
+ uint8 *ptr = (uint8*)data;
+ printf("3sms_state_change_cb() : %s\n", ptr);
+
+ struct SMS_Struct s = PDUDecoding(ptr);
+ printf("服务中心地址: %s\n", s.SCA);
+ printf("发送方地址: %s\n", s.OA);
+ printf("服务中心时间戳: %s\n", s.SCTS);
+ printf("消息内容: %s\n", s.UD);
+ printf("数据编码方案: %s\n", DSC_to_msg(s.DCS));
+}
+
+
+QL_SMS_ERROR_CODE ql_sms_init()
+{
+ if(info_handle == NULL)
+ {
+ info_handle = mbtk_info_handle_get();
+ if(info_handle)
+ {
+ printf("creat info_handle is success\n");
+ }
+ else{
+ printf("creat info_handle is fail\n");
+ return QL_SMS_GENERIC_FAILURE;
+ }
+ }
+
+ return QL_SMS_SUCCESS;
+}
+
+
+QL_SMS_ERROR_CODE ql_sms_release()
+{
+ int ret = QL_SMS_SUCCESS;
+ if(info_handle)
+ {
+ ret = mbtk_info_handle_free(&info_handle);
+ }
+ else
+ {
+ ret = QL_SMS_GENERIC_FAILURE;
+ }
+
+ return ret;
+}
+
+
+/*
+*AT+CMGS="10086", CMGS TEST // Send a SMS
+> CMGS TEST
++CMGS: 17
+OK
+*/
+/*
+int charset: send sms mode
+ 0:pdu, 1:text
+
+*/
+//当state 设置为 0(pdu)模式时,telephony_num应该设置为pud 数据大小的长度;msg:为pud 数据
+
+QL_SMS_ERROR_CODE ql_sms_send_pdu_msg(uint8_t *phone_num,uint8_t *data,int sms_type)
+{
+ if(info_handle == NULL || phone_num == NULL || data == NULL)
+ {
+ return -1;
+ }
+
+ char cmgs[MSM_NUMBER_MAX] = {0};
+ char resp[RES_NUM_MIN] = {0};
+ char pdu_data[512] = {0};
+ char phone_lenth[10] = {0};
+ char *p = pdu_data;
+ int mode = 0;
+ int err = 0;
+ int i = 0;
+
+ if(strlen(data) > 512 || strlen(data) == 0 || strlen(phone_num) == 0)
+ {
+ printf("strlen(telephony_num):%d\n", strlen(phone_num));
+ printf("strlen(msg):%d\n", strlen(data));
+ return -1;
+ }
+
+ memset(center_address, 0, sizeof(center_address));
+ memcpy(center_address, "+8613800280500", strlen("+8613800280500"));
+
+ printf("phone_num:%s\n", phone_num);
+ printf("center_address:%s\n", center_address);
+ printf("data:%s\n", data);
+
+
+ mode = 0; // PDU
+
+ char* pdu = NULL;
+ char* smsc = SCAEncoding(center_address);
+ struct PDUS *pdus = PDUEncoding(center_address,phone_num, data, NULL);
+
+ for (i = 0; i < pdus->count; i++) {
+ printf("第 %d 条:\n", i + 1);
+ printf("%s\n", pdus->PDU[i]);
+ pdu = pdus->PDU[i];
+ }
+
+ sprintf(p, "%s",smsc);
+ printf("pdu_data:%s\n", pdu_data);
+ sprintf(p+strlen(p), "%s", pdu);
+ printf("pdu_data:%s\n",pdu_data);
+
+
+ err = mbtk_sms_cmgf_set(info_handle, mode);
+ if(err) {
+ printf("cmgf set error : %d\n", err);
+ } else {
+ printf("cmgf set success\n");
+ }
+
+ sprintf(cmgs,"%d,%s",strlen(pdu_data), pdu_data);
+ printf("cmgs:%s\n", cmgs);
+
+ memset(resp, 0, sizeof(resp));
+
+ err = mbtk_sms_cmgs_set(info_handle, cmgs, resp);
+ if(err) {
+ printf("Error : %d\n", err);
+ return -1;
+ } else {
+ printf("cmgs set success . resp:%s\n", resp);
+ }
+
+ return 0;
+
+}
+QL_SMS_ERROR_CODE ql_sms_send_text_msg(uint8_t *phone_num,uint8_t *data,int sms_type)
+{
+ if(info_handle == NULL || phone_num == NULL || data == NULL)
+ {
+ return -1;
+ }
+
+ char cmgs[MSM_NUMBER_MAX] = {0};
+ char resp[RES_NUM_MIN] = {0};
+ int mode = 0;
+ int err = 0;
+ if(strlen(data) > 512 || strlen(data) == 0 || strlen(phone_num) == 0)
+ {
+ printf("strlen(telephony_num):%d\n", strlen(phone_num));
+ printf("strlen(msg):%d\n", strlen(data));
+ return -1;
+ }
+
+ mode = 1; // text
+
+ err = mbtk_sms_cmgf_set(info_handle, mode);
+ if(err) {
+ printf("cmgf set error : %d\n", err);
+ } else {
+ printf("cmgf set success\n");
+ }
+
+ sprintf(cmgs,"%s,%s",phone_num, data);
+ printf("cmgs:%s\n", cmgs);
+
+/* char *ptr = strstr(cmd, "cmgs,"); //CMGS="10086",hf
+ if(ptr != NULL)
+ {
+ ptr = strstr(cmd, ",");
+ ptr++;
+ memset(cmgs, 0, sizeof(cmgs));
+ memcpy(cmgs, ptr, strlen(ptr));
+ printf("1cmgs:%s, strlen(cmgs):%d\n", cmgs, strlen(cmgs));
+ }
+*/
+
+ memset(resp, 0, sizeof(resp));
+
+ err = mbtk_sms_cmgs_set(info_handle, cmgs, resp);
+ if(err) {
+ printf("Error : %d\n", err);
+ return -1;
+ } else {
+ printf("cmgs set success . resp:%s\n", resp);
+ }
+
+ return 0;
+
+}
+
+
+QL_SMS_ERROR_CODE ql_sms_add_event_handler(QL_SMS_StatusIndMsgHandlerFunc_t handlerPtr, void* contextPtr)
+{
+ if(info_handle == NULL)
+ {
+ return QL_SMS_GENERIC_FAILURE;
+ }
+
+ int ret = mbtk_sms_cnmi_set(info_handle);
+ if(ret)
+ {
+ printf("set cnmi fail\n");
+ return QL_SMS_GENERIC_FAILURE;
+ }
+
+ mbtk_sms_state_change_cb_reg(info_handle, lynq_sms_state_change_cb);
+ return QL_SMS_SUCCESS;
+}
+
+
+/*
+ AT+CMGD=<index>[,<delflag>]
+
+ Deletes message based on index
+ node:
+ index is -1, delete all message
+ delflag set 4
+*/
+
+QL_SMS_ERROR_CODE ql_sms_delete_msg(size_t index)
+{
+ char cmgd[128] = {0};
+ int err = 0;
+
+ if(index == -1) //delete all
+ {
+ memcpy(cmgd, ",4", strlen(",4"));
+ }
+ else
+ {
+ sprintf(cmgd,"%d",index);
+ }
+
+ printf("cmgd:%s\n", cmgd);
+
+ err = mbtk_sms_cmgd_set(info_handle, cmgd);
+ if(err) {
+ printf("lynq_delete_sms Error : %d\n", err);
+ return -1;
+ } else {
+ printf("lynq_delete_sms set success\n");
+ }
+
+ return 0;
+
+}
+
+
+QL_SMS_ERROR_CODE ql_search_sms_text_message(int index, recvmessage* payload)
+{
+ if(info_handle == NULL)
+ {
+ return -1;
+ }
+
+ char cmgs[MSM_NUMBER_MAX] = {0};
+ int mode = 1; // text
+ int err = 0;
+ char *data = "ALL";
+
+ err = mbtk_sms_cmgf_set(info_handle, mode);
+ if(err) {
+ printf("cmgf set error : %d\n", err);
+ } else {
+ printf("cmgf set success\n");
+ }
+
+
+ char cmgl[128] = {0};
+ char resp[1024+1] ={0};
+ sprintf(cmgl,"%d,%s", index, data);
+/*
+ char *ptr = strstr(cmd, "cmgl,"); // AT+CMGL[=<stat>]
+ if(ptr != NULL)
+ {
+ ptr = strstr(cmd, ",");
+ ptr++;
+ memset(cmgl, 0, sizeof(cmgl));
+ memcpy(cmgl, ptr, strlen(ptr));
+ printf("0cmgl:%s\n", cmgl);
+ }
+*/
+ memset(resp, 0, sizeof(resp));
+ err = mbtk_sms_cmgl_set(info_handle, cmgl, resp);
+ if(err) {
+ printf("lynq_list_sms Error : %d\n", err);
+ return -1;
+ } else {
+ printf("cmgl set success, reg:%s\n",resp);
+ }
+
+ return 0;
+
+}
+QL_SMS_ERROR_CODE ql_search_sms_pdu_message(int index, recvmessage* payload)
+{
+ if(info_handle == NULL)
+ {
+ return -1;
+ }
+
+ char cmgs[MSM_NUMBER_MAX] = {0};
+ int mode = 0; // pud
+ int err = 0;
+ char *data = "ALL";
+
+
+ err = mbtk_sms_cmgf_set(info_handle, mode);
+ if(err) {
+ printf("cmgf set error : %d\n", err);
+ } else {
+ printf("cmgf set success\n");
+ }
+
+
+ char cmgl[128] = {0};
+ char resp[1024+1] ={0};
+ sprintf(cmgl,"%d,%s", index, data);
+/*
+ char *ptr = strstr(cmd, "cmgl,"); // AT+CMGL[=<stat>]
+ if(ptr != NULL)
+ {
+ ptr = strstr(cmd, ",");
+ ptr++;
+ memset(cmgl, 0, sizeof(cmgl));
+ memcpy(cmgl, ptr, strlen(ptr));
+ printf("0cmgl:%s\n", cmgl);
+ }
+*/
+ memset(resp, 0, sizeof(resp));
+ err = mbtk_sms_cmgl_set(info_handle, cmgl, resp);
+ if(err) {
+ printf("lynq_list_sms Error : %d\n", err);
+ return -1;
+ } else {
+ printf("cmgl set success, reg:%s\n",resp);
+ }
+
+ return 0;
+
+}
+
+
+/*
+function: lynq_list_sms
+stat:0:pud, 1:text
+index: 0, list index;
+ > 0,
+
+*/
+QL_SMS_ERROR_CODE ql_sms_list_sms(int stat, int index, char *data)
+{
+ if(info_handle == NULL)
+ {
+ return -1;
+ }
+
+ char cmgs[MSM_NUMBER_MAX] = {0};
+ int mode = 0;
+ int err = 0;
+
+ if(stat) // text
+ {
+ mode = 1;
+ }
+
+ err = mbtk_sms_cmgf_set(info_handle, mode);
+ if(err) {
+ printf("cmgf set error : %d\n", err);
+ } else {
+ printf("cmgf set success\n");
+ }
+
+
+ char cmgl[128] = {0};
+ char resp[1024+1] ={0};
+ sprintf(cmgl,"%d,%s", index, data);
+/*
+ char *ptr = strstr(cmd, "cmgl,"); // AT+CMGL[=<stat>]
+ if(ptr != NULL)
+ {
+ ptr = strstr(cmd, ",");
+ ptr++;
+ memset(cmgl, 0, sizeof(cmgl));
+ memcpy(cmgl, ptr, strlen(ptr));
+ printf("0cmgl:%s\n", cmgl);
+ }
+*/
+ memset(resp, 0, sizeof(resp));
+ err = mbtk_sms_cmgl_set(info_handle, cmgl, resp);
+ if(err) {
+ printf("lynq_list_sms Error : %d\n", err);
+ return -1;
+ } else {
+ printf("cmgl set success, reg:%s\n",resp);
+ }
+
+ return 0;
+}
+
+
+
+int ql_sms_query_sms_storage_status(void)
+{
+ char mem[128] = {0};
+ int err = mbtk_sms_cpms_get(info_handle, mem);
+ if(err) {
+ printf("cpms query is fail Error : %d\n", err);
+ return -1;
+ } else {
+ printf("cpms query is success : %s\n", mem);
+ }
+
+ return 0;
+}
+
+QL_SMS_ERROR_CODE ql_sms_get_sms_center_address(uint8_t *sms_center_addree)
+{
+ char csca[128] = {0};
+ if(info_handle == NULL || sms_center_addree == NULL)
+ {
+ return QL_SMS_GENERIC_FAILURE;
+ }
+
+ int err = mbtk_sms_csca_get(info_handle, sms_center_addree);
+ if(err) {
+ printf("lynq_get_smsc_address Error : %d\n", err);
+ return QL_GET_RESPONSE_ERROR;
+ } else {
+ printf("lynq_get_smsc_address success\n");
+ }
+
+ return 0;
+}
+
+
+QL_SMS_ERROR_CODE ql_sms_set_sms_center_address(unsigned char *destNum)
+{
+ printf("1destNum:%s\n", destNum);
+ memset(center_address, 0, sizeof(center_address));
+ memcpy(center_address, destNum, strlen(destNum));
+ if(info_handle == NULL || destNum == NULL)
+ {
+ return -1;
+ }
+
+ int err = mbtk_sms_csca_set(info_handle, destNum);
+ if(err) {
+ printf("Error : %d\n", err);
+ return err;
+ } else {
+ // memset(center_address, 0, sizeof(center_address));
+ // memcpy(center_address, destNum, strlen(destNum));
+ printf("destNum:%s\n", destNum);
+ printf("lynq_set_smsc_address success\n");
+ }
+ return 0;
+
+}
+
+
+
+
+