⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wmmpsms.c

📁 在GPRS或者CDMA modem上实现发送/接收短信的C代码;支持Siemens
💻 C
📖 第 1 页 / 共 2 页
字号:
	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 + -