📄 modemproc.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "modemproc.h"
#include "UartPort.h"
#include "modem.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
char callnumber[100];
char PackageData[2048];
unsigned int Packagesize=0;
//---------------------------------------------------------------------------
void SetDialNumber(char *number)
{
int length=strlen(number)+1;
memcpy(callnumber,number,length);
}
void SigninPackage(int sendsize,char *sbuf)
{
Packagesize=sendsize;
memcpy(PackageData,sbuf,sendsize);
}
void ModemProc()
{
char * sbuffer=NULL;
char mode,ensync,cres;
unsigned char msg[100];
unsigned char rbuffer[2048];
int i, len,sendnum,j;
len=Packagesize;
sbuffer=PackageData;
memset(msg, 0,sizeof(msg));
DebugPrint("开始拨号...\r\n");
mode=BEFOREHAND_DIAL;
cres=ModemDial(callnumber, mode);
if (cres)
{
AnsiString as;
as=as.sprintf("设定modem参数失败。cres=%d\r\n",cres);
DebugPrint(as.c_str());
return;
}
cres=ModemState();
ensync=1;
while(mode)
{
cres=ModemState();
if (cres==STA_SYNC_GO&&ensync)
{
DebugPrint("拨号成功,开始同步...\r\n");
ensync=0;
}
if (cres==STA_LINE_IDLE||
cres==STA_DIAL_FAIL||
cres==STA_SYNC_FAIL||
cres==STA_LINE_OFF||
cres==STA_NO_CCARRIER)
break;
//--------------------------------
};
if (cres==STA_LINE_IDLE)
{
DebugPrint("modem同步完成。\r\n");
}
else if (cres==STA_DIAL_FAIL||cres==STA_LINE_OFF)
{
DebugPrint("modem拔号失败。\r\n");
}
else if (cres==STA_SYNC_FAIL)
{
DebugPrint("modem同步失败。\r\n");
}
else if (cres==STA_NO_CCARRIER)
{
DebugPrint("无载波\r\n");
}
if (cres==STA_LINE_IDLE)
{
//----------------------------------------------
sendnum=2;
//----------------------------------------------
for (j=0;j<sendnum;j++)
{
//发送签到包
//------------------------------------------
AnsiString as;
as=as.sprintf("发第%d个包: ",j+1);
DebugPrint(as.c_str());
cres=ModemSend(sbuffer, len);
if (cres==SEND_SUCCESSFUL)
{
DebugPrint("成功\r\n");
}
else if (cres==SEND_ERROR_LENGTH)
{
DebugPrint("超长了\r\n");
}
else if (cres==SEND_LINE_OFF)
{
DebugPrint("掉线了\r\n");
}
else if (cres==TIME_OVERFLOW)
{
DebugPrint("时间溢出\r\n");
}
else if (cres==STA_SEND_FAIL)
{
DebugPrint("发送3次失败\r\n");
}
else if (cres==SEND_UNRIPE)
{
DebugPrint("未准备好\r\n");
}
//------------------------------------------
if (cres!=SEND_SUCCESSFUL)
continue;
as=as.sprintf("收第%d个包: ",j+1);
DebugPrint(as.c_str());
memset(rbuffer, 0, sizeof(rbuffer));
cres=ModemRecv(rbuffer, (unsigned short *)(&i),500); //300:预计要接收的字节数
if (cres==REC_SUCCESSFUL)
{
DebugPrint("成功\r\n");
}
else if (cres==REC_LINE_OFF)
{
DebugPrint("掉线了\r\n");
}
else if (cres==TIME_OVERFLOW)
{
DebugPrint("时间溢出\r\n");
}
//------------------------------------------
cres=ModemState();
if (cres==STA_LINE_DATAOFF||cres==STA_LINE_OFF||cres==STA_NO_CCARRIER)
break;
}
//----------------------------------------------
DebugPrint("挂机中... \r\n");
cres=ModemHook();
if(cres!=0x00)
{
DebugPrint("挂机操作失败。\r\n");
}
else
{
DebugPrint("挂机操作成功。\r\n");
}
//----------------------------------------------
}
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -