📄 wmmpsms.c
字号:
printf("Peer number: %s\n", number);
memset(&smsconfig, 0, sizeof(SMS_CONFIG));
ret = getsmsconfig(hSmsHandle, &smsconfig);
if (ret < 0)
{
printf("Error: get SMS configure");
goto sendtext8bit_fail;
}
if (smsconfig.smstype != SMS_PDU || smsconfig.smscode != SMS_ENCODE_8BIT)
{//need to set
smsconfig.smstype = SMS_PDU;
smsconfig.smscode = SMS_ENCODE_8BIT;
smsconfig.pdu.tp_dcs = 0x04;
}
ret = setsmsconfig(hSmsHandle, &smsconfig);
if (ret < 0)
{
printf("Error: set SMS configure\n");
goto sendtext8bit_fail;
}
//encode sms data by 8-bit
/*
memset(sms8bitcode, 0, sizeof(sms8bitcode));
ret = convsmsdata((uchar*)smsdata, strlen(smsdata), sms7bitcode, &sms7bitlen, SMS_ENCODE_7BIT);
if (ret < 0)
{
printf("Error: convert sms data by 7-bit coding\n");
goto sendtext8bit_fail;
}
*/
printf("Sending...\n");
sms8bitlen = strlen(smsdata);
ret = sendsms(hSmsHandle, (uchar*)smsdata, sms8bitlen, number);
if (ret < 0)
{
printf("Failed to send SMS\n");
}
else
{
printf("Succ to send SMS\n");
}
getchar();
return 0;
sendtext8bit_fail:
return -1;
}
int sendunicsms(void)
{
int ret;
int inkey, ifexit;
while (1)
{
printf(" Send UCS16-bit SMS\n");
printf("1. TEXT 2. PDU\n");
printf("0. exit send UCS16-bit sms\n");
inkey = getchar();
ret = getchar();
switch(inkey)
{
case '1':
sendtextucs16();
break;
case '2':
sendpduucs16();
break;
case '0':
ifexit = 1;
break;
default:
break;
}
if (ifexit == 1)
{
printf("exit send UCS16-bit SMS\n");
break;
}
}
return 0;
}
int sendtextucs16(void)
{
int i, smslen, ret, smsunilen;
char ch;
char smsdata[256];
char number[30];
uchar smsunicode[512];
SMS_CONFIG smsconfig;
memset(smsdata, 0, sizeof(smsdata));
printf("Input sms content:\n");
/* Read in single line from "stdin": */
for( i = 0; (i < 140) && ((ch = getchar()) != EOF)
&& (ch != '\n'); i++ )
smsdata[i] = (char)ch;
/* Terminate string with null character: */
smsdata[i] = '\0';
smslen = strlen(smsdata);
printf("SMS contents:\n%s\n", smsdata);
memset(number, 0, sizeof(number));
printf("Input peer number:\n");
for( i = 0; (i < 140) && ((ch = getchar()) != EOF)
&& (ch != '\n'); i++ )
number[i] = (char)ch;
number[i] = '\0';
printf("Peer number: %s\n", number);
memset(&smsconfig, 0, sizeof(SMS_CONFIG));
ret = getsmsconfig(hSmsHandle, &smsconfig);
if (ret < 0)
{
printf("Error: get SMS configure");
goto sendtextucs16_fail;
}
if (smsconfig.smstype != SMS_TEXT || smsconfig.smscode != SMS_ENCODE_UCS16)
{//need to set
smsconfig.smstype = SMS_TEXT;
smsconfig.smscode = SMS_ENCODE_UCS16;
}
ret = setsmsconfig(hSmsHandle, &smsconfig);
if (ret < 0)
{
printf("Error: set SMS configure\n");
goto sendtextucs16_fail;
}
//encode sms data by UCS16-bit
memset(smsunicode, 0, sizeof(smsunicode));
ret = convsmsdata((uchar*)smsdata, strlen(smsdata), smsunicode, &smsunilen, GB_TO_UCS16);
if (ret < 0)
{
printf("Error: convert sms data by UCS16-bit coding\n");
goto sendtextucs16_fail;
}
printf("Sending...\n");
ret = sendsms(hSmsHandle, smsunicode, smsunilen, number);
if (ret < 0)
{
printf("Failed to send SMS\n");
}
else
{
printf("Succ to send SMS\n");
}
getchar();
return 0;
sendtextucs16_fail:
return -1;
}
int sendpduucs16(void)
{
int i, smslen, ret, smsunilen;
char ch;
char smsdata[256];
char number[30];
uchar smsunicode[512];
SMS_CONFIG smsconfig;
memset(smsdata, 0, sizeof(smsdata));
printf("Input sms content:\n");
/* Read in single line from "stdin": */
for( i = 0; (i < 140) && ((ch = getchar()) != EOF)
&& (ch != '\n'); i++ )
smsdata[i] = (char)ch;
/* Terminate string with null character: */
smsdata[i] = '\0';
smslen = strlen(smsdata);
printf("SMS contents:\n%s\n", smsdata);
memset(number, 0, sizeof(number));
printf("Input peer number:\n");
for( i = 0; (i < 140) && ((ch = getchar()) != EOF)
&& (ch != '\n'); i++ )
number[i] = (char)ch;
number[i] = '\0';
printf("Peer number: %s\n", number);
memset(&smsconfig, 0, sizeof(SMS_CONFIG));
ret = getsmsconfig(hSmsHandle, &smsconfig);
if (ret < 0)
{
printf("Error: get SMS configure");
goto sendpduucs16_fail;
}
if (smsconfig.smstype != SMS_PDU || smsconfig.smscode != SMS_ENCODE_UCS16)
{//need to set
smsconfig.smstype = SMS_PDU;
smsconfig.smscode = SMS_ENCODE_UCS16;
smsconfig.pdu.tp_dcs = 0x08;
}
ret = setsmsconfig(hSmsHandle, &smsconfig);
if (ret < 0)
{
printf("Error: set SMS configure\n");
goto sendpduucs16_fail;
}
//encode sms data by UCS16-bit
memset(smsunicode, 0, sizeof(smsunicode));
ret = convsmsdata((uchar*)smsdata, strlen(smsdata), smsunicode, &smsunilen, GB_TO_UCS16);
if (ret < 0)
{
printf("Error: convert sms data by UCS16-bit coding\n");
goto sendpduucs16_fail;
}
printf("Sending...\n");
ret = sendsms(hSmsHandle, smsunicode, smsunilen, number);
if (ret < 0)
{
printf("Failed to send SMS\n");
}
else
{
printf("Succ to send SMS\n");
}
getchar();
return 0;
sendpduucs16_fail:
return -1;
}
int checknewsms(void)
{
int ret;
ret = ifnewsms(hSmsHandle);
if (ret < 0)
{
printf("Error: check if there are new SMS\n");
}
else
{
printf("There are %d new SMS\n", ret);
}
getchar();
return 0;
}
int recvanysms(void)
{
int ret, smslen, input, i, ifexit = 0;
int smsconlen, realsmslen;
uchar ucRawSms[512], ucRealSms[256], ucSmsContent[256];
char szPeerNum[30];
uchar ucSmsType, ucSmsCode;
PDU pdu;
char ch;
SMS_CONFIG smsconfig;
while (1)
{
printf(" Receive SMS \n");
printf("1.Text 7-bit\n");
printf("2.Text 8-bit\n");
printf("3.Text UCS2\n");
printf("4.PDU \n");
printf("0.Exit receive SMS\n");
memset(&smsconfig, 0, sizeof(SMS_CONFIG));
ret = getsmsconfig(hSmsHandle, &smsconfig);
ucSmsType = smsconfig.smstype;
ucSmsCode = smsconfig.smscode;
for( i = 0; (i < 2) && ((ch = getchar()) != EOF) && (ch != '\n'); i++ )
input = ch;
switch(input)
{
case '1':
if (ucSmsType != SMS_TEXT || ucSmsCode != SMS_ENCODE_7BIT)
{
smsconfig.smstype = SMS_TEXT;
smsconfig.smscode = SMS_ENCODE_7BIT;
}
ret = setsmsconfig(hSmsHandle, &smsconfig);
if (ret < 0)
{
printf("Error: set SMS configure\n");
goto recvanysms_fail;
}
break;
case '2':
if (ucSmsType != SMS_TEXT || ucSmsCode != SMS_ENCODE_8BIT)
{
smsconfig.smstype = SMS_TEXT;
smsconfig.smscode = SMS_ENCODE_8BIT;
}
ret = setsmsconfig(hSmsHandle, &smsconfig);
if (ret < 0)
{
printf("Error: set SMS configure\n");
goto recvanysms_fail;
}
break;
case '3':
if (ucSmsType != SMS_TEXT || ucSmsCode != SMS_ENCODE_UCS16)
{
smsconfig.smstype = SMS_TEXT;
smsconfig.smscode = SMS_ENCODE_UCS16;
}
ret = setsmsconfig(hSmsHandle, &smsconfig);
if (ret < 0)
{
printf("Error: set SMS configure\n");
goto recvanysms_fail;
}
break;
case '4':
if (ucSmsType != SMS_PDU)
{
smsconfig.smstype = SMS_PDU;
}
ret = setsmsconfig(hSmsHandle, &smsconfig);
if (ret < 0)
{
printf("Error: set SMS configure\n");
goto recvanysms_fail;
}
break;
case '0':
ifexit = 1;
break;
default:
continue;
break;
}
if (ifexit == 1)
{
printf("Exit receive SMS...\n");
break;
}
smslen = 0;
memset(ucRawSms, 0, sizeof(ucRawSms));
memset(szPeerNum, 0, sizeof(szPeerNum));
ret = recvsms(hSmsHandle, ucRawSms, &smslen, szPeerNum);
if (ret < 0)
{
printf("Error: no SMS\n");
goto recvanysms_fail;
}
printf("New SMS from: %s\n", szPeerNum);
printf("New SMS length: %d\n", smslen);
printf("New SMS content:\n%s\n", ucRawSms);
memset(ucRealSms, 0, sizeof(ucRealSms));
realsmslen = 0;
if (hSmsHandle->SmsConf.smstype == SMS_PDU)
{
ret = procpdudata(ucRawSms, smslen, &pdu, ucRealSms, &realsmslen);
if (ret < 0)
{
printf("Error: parse PDU data\n");
goto recvanysms_fail;
}
memset(ucSmsContent, 0, sizeof(ucSmsContent));
smsconlen = 0;
if ( (pdu.tp_dcs & 0x0C) == 0x00)
{//7-bit
ret = convsmsdata(ucRealSms, realsmslen, ucSmsContent, &smsconlen, DECODE_7BIT);
if (ret < 0)
{
printf("Error: decode PDU 7-bit data\n");
goto recvanysms_fail;
}
}
if ( (pdu.tp_dcs & 0x0C) == 0x04)
{//8-bit
ret = convsmsdata(ucRealSms, realsmslen, ucSmsContent, &smsconlen, HEX_TO_CHAR);
if (ret < 0)
{
printf("Error: decode PDU 8-bit data\n");
goto recvanysms_fail;
}
}
if ( (pdu.tp_dcs & 0x0C) == 0x08)
{//UCS2
ret = convsmsdata(ucRealSms, realsmslen, ucSmsContent, &smsconlen, UCS16_TO_GB);
if (ret < 0)
{
printf("Error: decode PDU UCS16-bit data\n");
goto recvanysms_fail;
}
}
printf("SMS length: %d\n", smsconlen);
printf("SMS content:\n%s\n", ucSmsContent);
}
else
{
if (hSmsHandle->SmsConf.smscode == SMS_ENCODE_8BIT)
{
ret = convsmsdata(ucRawSms, smslen, ucRealSms, &realsmslen, HEX_TO_CHAR);
if (ret < 0)
{
printf("Error: convert sms data from 2Hex to char\n");
goto recvanysms_fail;
}
printf("SMS length: %d\n", realsmslen);
printf("SMS content:\n%s\n", ucRealSms);
}
if (hSmsHandle->SmsConf.smscode == SMS_ENCODE_UCS16)
{
ret = convsmsdata(ucRawSms, smslen, ucRealSms, &realsmslen, UCS16_TO_GB);
if (ret < 0)
{
printf("Error: convert sms data from UCS16 to GB\n");
goto recvanysms_fail;
}
printf("SMS length: %d\n", realsmslen);
printf("SMS content:\n%s\n", ucRealSms);
}
}
getchar();
}
return 0;
recvanysms_fail:
getchar();
return -1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -