| //#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; | |
| } | |