blob: 5ff13a7d4a4a714b6a060ad7651e49e806ac2357 [file] [log] [blame]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <errno.h>
#include <unistd.h>
#include <liblog/lynq_deflog.h>
#include <sys/types.h>
#include <pthread.h>
#include <libsms/lynq_sms.h>
#include "lynq_qser_sms.h"
#define USER_LOG_TAG "LYNQ_QSER_SMS"
QSER_SMS_RxMsgHandlerFunc_t tmp = NULL;
sms_client_handle_type h_sms = 0;
enum{
SMS_OK = 0,
SMS_FAIL,
SMS_PARAM_ERR
};
void *new_sms_thread_recv(void *p)
{
int handle = -1;
int status = -1;
int charset = -1;
char smsc[1024];
int smscLen = -1;
int smslen = -1;
char message[1024];
char teleNum[1024];
int numLen = -1;
int current = -1;
int total = -1;
QSER_sms_info_t QSER_sms_info;
while (1)
{
if(!lynq_wait_receive_new_sms(&handle))
{
if(!lynq_read_sms(handle,&status,&charset,smsc,&smscLen,&smslen,message,teleNum,&numLen,&current,&total))
{
QSER_sms_info.storage_index = handle;
QSER_sms_info.format = (QSER_SMS_T)charset;
memcpy(QSER_sms_info.sms_data, message, smslen);
QSER_sms_info.sms_data[smslen] = '\0';
QSER_sms_info.sms_data_len = smslen;
if(total > 1)
{
QSER_sms_info.user_data_head_valid = 1;
}
else
{
QSER_sms_info.user_data_head_valid = 0;
}
tmp(&QSER_sms_info, &h_sms);
}
else
{
LYDBGLOG("lynq_read_sms error\n");
}
}
else
{
LYDBGLOG("lynq_wait_receive_new_sms error\n");
break;
}
}
return NULL;
}
int qser_sms_client_init(sms_client_handle_type *ph_sms)
{
if(NULL == ph_sms)
{
LYERRLOG("input error\n");
return SMS_PARAM_ERR;
}
*ph_sms = (sms_client_handle_type)getpid();
h_sms = *ph_sms;
return lynq_sms_init(*ph_sms);
}
int qser_sms_client_deinit(sms_client_handle_type h_sms)
{
if(h_sms == 0)
{
LYERRLOG("not init\n");
return SMS_PARAM_ERR;
}
return lynq_sms_deinit();
}
int qser_sms_send_sms(sms_client_handle_type h_sms, QSER_sms_info_t *pt_sms_info)
{
if(NULL == pt_sms_info)
{
LYERRLOG("input error\n");
return SMS_PARAM_ERR;
}
if(h_sms == 0)
{
LYERRLOG("not init\n");
return SMS_PARAM_ERR;
}
return lynq_send_sms(pt_sms_info->src_addr, pt_sms_info->type, pt_sms_info->sms_data, pt_sms_info->sms_data_len);
}
int qser_sms_addrxmsghandler(QSER_SMS_RxMsgHandlerFunc_t handlerPtr, void* contextPtr)
{
if(NULL == handlerPtr)
{
return SMS_PARAM_ERR;
}
if(NULL == contextPtr)
{
return SMS_PARAM_ERR;
}
tmp = handlerPtr;
pthread_t lynq_new_sms_tid = -1;
int rt = pthread_create(&lynq_new_sms_tid, NULL, new_sms_thread_recv, NULL);
if(rt < 0)
{
LYDBGLOG("qser_sms_addrxmsghandler pthread_create error!!!\n");
return -1;
}
return SMS_OK;
}
int qser_sms_deletefromstorage(sms_client_handle_type h_sms, QSER_sms_storage_info_t *pt_sms_storage)
{
if(NULL == pt_sms_storage)
{
LYERRLOG("input error\n");
return SMS_PARAM_ERR;
}
if(h_sms == 0)
{
LYERRLOG("not init\n");
return SMS_PARAM_ERR;
}
return lynq_delete_sms(pt_sms_storage->storage_idx);
}
int qser_sms_send_smspdu(sms_client_handle_type h_sms, QSER_wms_send_raw_message_data_t *raw_messagdata, QSER_wms_raw_send_resp_t *rawresp)
{
if(NULL == raw_messagdata)
{
LYERRLOG("input error\n");
return SMS_PARAM_ERR;
}
if(NULL == rawresp)
{
LYERRLOG("input error\n");
return SMS_PARAM_ERR;
}
if(h_sms == 0)
{
LYERRLOG("not init\n");
return SMS_PARAM_ERR;
}
LYERRLOG("not support\n");
return 0;
}
int qser_sms_getsmscenteraddress( sms_client_handle_type h_sms, QSER_sms_service_center_cfg_t *set_sca_cfg)
{
if(NULL == set_sca_cfg)
{
LYERRLOG("input error\n");
return SMS_PARAM_ERR;
}
if(h_sms == 0)
{
LYERRLOG("not init\n");
return SMS_PARAM_ERR;
}
return lynq_get_smsc_address(set_sca_cfg->service_center_addr);
}
int qser_sms_setsmscenteraddress( sms_client_handle_type h_sms, QSER_sms_service_center_cfg_t *get_sca_cfg)
{
if(NULL == get_sca_cfg)
{
LYERRLOG("input error\n");
return SMS_PARAM_ERR;
}
if(h_sms == 0)
{
LYERRLOG("not init\n");
return SMS_PARAM_ERR;
}
return lynq_set_smsc_address(get_sca_cfg->service_center_addr);
}