📄 hsm.c
字号:
serAputs(" 偶校验");
break;
case 'E':
serAputs(" 偶校验");
break;
case 'o':
serAputs(" 奇校验");
break;
case 'O':
serAputs(" 奇校验");
break;
case 'n':
serAputs(" 无奇偶校验");
break;
case 'N':
serAputs(" 无奇偶校验");
break;
default:
serAputs(" 无奇偶校验");
break;
}
serAputs("\r\n该终端的软件版本号:");
readUserBlock(input,Soft_Version,sizeof(input));
serAputs(input);
serAputs("\r\n该终端的产品序列号:");
readUserBlock(input,Ser_Number,sizeof(input));
serAputs(input);
for(i=0;i<6;i++)
{msDelay(1000);}
serAputs(menu);
serAputs("请输入设置选项:");
break;
/************************AT指令测试*****************************/
case '5':
serAputs("\r\n正在初始化modem...");
Module_Rst();
serCopen(19200);
do
{
ModemSend("AT\r");
msDelay(100);
}while(!ModemExpect("OK", 2000));
serAputs("\r\nModem初始化!");
serAputs("\r\nAT 指令测试状态:\r\n");
serArdFlush();
serCrdFlush();
while(1)
{
if(serArdUsed()>0)
{
msDelay(20);
len=serArdUsed();
serAread(buffer, len, 100);
buffer[len]=0x00;
ModemSend(buffer);
//serArdFlush();
}
if(serCrdUsed()>0)
{
msDelay(100);
len=serCrdUsed();
serCread(buffer,len,2000);
buffer[len]=0x00;
serXprint(buffer);
while(serAwrFree() != 1023);
msDelay(10);
//serCrdFlush();
}
}
case '*':
//可能是看门狗,下次专门做个程序‘*'选择进去。
// serAopen(115200);
serAputs("\r\n正在初始化modem...");
Module_Rst();
serCopen(19200);
do
{
ModemSend("AT\r");
msDelay(100);
}while(!ModemExpect("OK", 2000));
serAputs("\r\nModem初始化完毕!");
Module_Rst();
serAputs("\r\n开始清空modem内短消息!\r\n");
for(j = 1;j < 250;j++)
{
itoa(j,index);
ModemSend("at+cmgd=");
ModemSend(index);
ModemSend("\r");
if(i%2 == 0)
LED_CON(OFF);
else
LED_CON(ON);
t = SEC_TIMER;
count = 0;
do
{
if((SEC_TIMER - t) > 4)
{
ModemSend("at+cmgd=");
ModemSend(index);
ModemSend("\r");
t = SEC_TIMER;
}
count++;
if(count > 2)
break;
}while(!ModemExpect("OK", 4000));
if(count > 2)
break;
serAputs("\r\n第 ");
serAputs(index);
serAputs(" 条已经成功删除\r\n");
}
msDelay(1000);
serAputs(menu);
serAputs("请输入设置选项:");
break;
default:
break;
}
}while((ch!='q')&(ch!='Q'));
serAputs("\r\n设置结束!");
serAclose();
Init485();
LED_CON(OFF);
return;
}
else
{
serArdFlush();
while (serAwrFree() != BUFSIZE);
return;
}
}
LED_CON(OFF);
msDelay(500);
}
serArdFlush();
while (serAwrFree() != BUFSIZE);
// serAclose();
// hitwd();
LED_CON(OFF);
return;
}
msDelay(unsigned int delay)
{
auto long t;
t = MS_TIMER;
while((MS_TIMER - t) < delay );
}
/**********************************************************
程序名称:serXsread(unsigned char *array, usnsigned char n)
功能:从串口X(A or B or C or D)接收字符,如果接收到不可显字符
或接收到一定的(n)字符数后返回。
入口参数:
*array 字符串指针
n 字符串长度
返回值:
无
************************************************************/
void serXsread(unsigned char array[],unsigned char n)
{
auto unsigned char ch;
auto unsigned char i;
i=0;
for(i=0;i<n;i++)
{
while (serArdUsed() == 0);
ch = serAgetc();
if(ch==-1)
{
array[i]=0;
return;
}
if(ch>0x20)
{
array[i]=ch;
}
else
{
array[i]=0;
return;
}
}
}
/********************************************
程序名称:serXprint(unsigned char *array)
功能:从串口X(A or B or C or D)送出字符串。
入口参数:
*array 字符串指针
返回值:
无
***********************************************/
void serXprint(unsigned char array[])
{
auto unsigned char i;
auto unsigned char ch;
i=0;
while(array[i]!=0)
{
serAputc(array[i++]);
}
}
/****************************************************************
函数功能: 发送一条短消息
入口参数: 发送缓存
返回参数: 无
作者: 周志刚
时间: 2003/11/21
*****************************************************************/
void SendSMS(char *bufer)
{
auto unsigned char ch;
auto long t;
auto char temp[16];
auto int flag;
auto int count;
auto int SendTime;
count = 0;
flag = InitSMS();
while(flag == 0)
{
flag = InitSMS();
count++;
if(count > 10)
Sys_Err = 1;
}
for(SendTime = 0;SendTime < 10;SendTime++)
{
readUserBlock(temp,Phone_Number,sizeof(temp));
#ifdef DTU_DEBUG
serAputs("\r\n start send SMS to:");
serAputs(temp);
serAputs("\r\n");
#endif
/************************TEXT_MODE发送短消息*********************/
/******************setup arrive number****************************/
ModemSend("AT+cmgs=");
ModemSend(temp);
ModemSend("\r");
if(!ModemExpect(">", 4000)) //目的号码
continue;
#ifdef DTU_DEBUG
serAputs("\r\n text setup AT+cmgs=13*********** OK");
#endif
/******************text mode sms****************************/
ModemSend(bufer);
ch = 26;
serCputc(ch);
if(!ModemExpect("OK", 15000))
continue;
#ifdef DTU_DEBUG
serAputs("\r\n text sms send OK");
#endif
return;
}
ser485rdFlush();
}
/**************************************************************
/* 程序功能: 接收短消息
/* 入口参数: 返回数据缓存
/* 返回参数: 1 : sm receiced successful
/* 0 : error
/*
/* 作者: 周志刚
/* 时间: 2003/11/19
修改:2004/02/21
**************************************************************/
unsigned char ReceiveSMS(char *buf,char *index)
{
auto int i,j,len;
auto unsigned char temp[250];
//char expect_sms[20]={'+','C','M','T','I',':',' ','"','M','T','"',',','\0'};
auto unsigned char expect_sms[20];
//unsigned char index[3];
auto long t;
auto unsigned char flag,newsms_flag;
auto unsigned char test[10];
int test1;
#ifdef DTU_DEBUG
serAputs("\r\nRECEIVE SOMETHING\r\n");
#endif
for(i = 0;i < 20;i++)
{
expect_sms[i] = 0;
}
for(i = 0;i < 250;i++)
{
temp[i] = 0;
}
len = serCrdUsed();
do
{
len = serCrdUsed();
msDelay(10);
}while(len != serCrdUsed());
if(len > 200)
return 0;
serCread(temp, len, 300);
temp[len] = 0;
#ifdef DTU_DEBUG
serAputs("\r\n");
serAputs(temp);
serAputs("\r\n");
#endif
/*********************expect "+CMTI: \"MT\","*********************************/
newsms_flag = 0;
i = 0;
while(temp[i] != '+')
{
i++;
if(i == len)
return 0;
}
j = 0;
while(temp[i] != ',')
{
expect_sms[j++] = temp[i++];
if((i > len)||(j > 18))
return 0;
}
expect_sms[j++] = ',';
expect_sms[j++] = 0;
flag = i;
#ifdef DTU_DEBUG
serAputs("\r\expect_sms[] is:");
serAputs(expect_sms);
serAputs("\r\n");
#endif
if((strcmp(expect_sms,"+CMTI: \"SM\",") != 0)&&(strcmp(expect_sms,"+CMTI: \"MT\",") != 0))//do not expect "CMIT"
{
#ifdef DTU_DEBUG
serAputs("\r\ndo not expect +CMTI: \"SM\",\r\n");
#endif
return 0;
}
index[0] = temp[flag+1];
index[1] = temp[flag+2];
index[2] = 0;
#ifdef DTU_DEBUG
serAputs(temp);
#endif
#ifdef DTU_DEBUG
serAputs("\r\n start read new message from modem.....\r\n");
#endif
ModemSend("at+cmgr=");
ModemSend(index);
ModemSend("\r");
#ifdef DTU_DEBUG
serAputs("\r\n at+cmgr=");
serAputs(index);
serAputs("\r\n");
#endif
t = SEC_TIMER;
while(serCrdUsed() < 1)//wait for sms data from modem
{
if((SEC_TIMER - t) > 2)//time out
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -