📄 fmmodem.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "fmModem.h"
#include "UartPort.h"
#include "modem.h"
#include "modemproc.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmModem *frmModem;
//volatile unsigned int StTick;
volatile unsigned int OldTick;
unsigned long __stdcall ProcThreadFunc(void *lpParam);
unsigned long __stdcall InitThreadFunc(void *lpParam);
unsigned long __stdcall TimeThreadFunc(void *lpParam);
volatile unsigned char backstate;
volatile unsigned char entimer;
volatile unsigned int crTick;
#define StTick GetTickCount()
//---------------------------------------------------------------------------
__fastcall TfrmModem::TfrmModem(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmModem::FormCreate(TObject *Sender)
{
mmMsg->Lines->Clear();
cbCallNumber->Text="0,,041183650666";
SPC = new TComm(SPC);
SPC->OnReceiveData = SPCReceiveData;
//大连银联
PackUnit[0].size=60;
PackUnit[0].PackData=new char[PackUnit[0].size];
memcpy(PackUnit[0].PackData,"\x60\x02\x22\x00\x00\x60\x21\x00\x00\x00\x00\x08\x00\x00\x20\x00\x00\x00\xc0\x00\x12\x00\x01\x64\x30\x30\x30\x30\x30\x30\x31\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x31\x32\x33\x34\x35\x00\x11\x00\x00\x00\x05\x00\x10\x00\x03\x30\x30\x31",PackUnit[0].size);
//视融达签到包
PackUnit[1].size=60;
PackUnit[1].PackData=new char[PackUnit[1].size];
memcpy(PackUnit[1].PackData,"\x60\x00\x00\x80\x00\x60\x22\x00\x00\x00\x00\x08\x00\x00\x20\x00\x00\x00\xC0\x00\x12\x00\x00\x01\x30\x30\x30\x32\x36\x37\x31\x35\x30\x30\x31\x34\x32\x30\x31\x38\x33\x39\x39\x30\x35\x37\x33\x00\x11\x00\x00\x00\x23\x00\x30\x00\x03\x30\x31\x20",PackUnit[1].size);
//南天东华签到包
PackUnit[2].size=63;
PackUnit[2].PackData=new char[PackUnit[2].size];
memcpy(PackUnit[2].PackData,"\x02\x00\x58\x60\x00\x03\x00\x00\x02\x00\x20\x24\x04\x80\x00\xC0\x80\x10\x31\x00\x00\x00\x00\x01\x00\x00\x02\x20\x00\x30\x31\x32\x33\x34\x35\x36\x37\x41\x30\x30\x30\x31\x42\x30\x30\x30\x32\x43\x30\x30\x30\x33\x31\x35\x36\x00\x08\x01\x00\x00\x01\x03\x82",PackUnit[2].size);
PackUnit[3].size=60;
PackUnit[3].PackData=new char[PackUnit[3].size];
memcpy(PackUnit[3].PackData,"\x60\x02\x22\x00\x00\x60\x21\x00\x00\x00\x00\x08\x00\x00\x20\x00\x00\x00\xc0\x00\x12\x00\x01\x64\x30\x30\x30\x30\x30\x30\x31\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x31\x32\x33\x34\x35\x00\x11\x00\x00\x00\x05\x00\x10\x00\x03\x30\x30\x31",PackUnit[3].size);
rgPacket->ItemIndex=0;
cbCallNumber->Items->Add("0,,041183650666");
cbCallNumber->Items->Add("041183650666");
cbCallNumber->Items->Add("247");
cbCallNumber->Items->Add("13570829721");
cbCallNumber->ItemIndex=3;
btPortState->Caption="串口关闭";
CommInition();
}
//---------------------------------------------------------------------------
unsigned long __stdcall ProcThreadFunc(void *lpParam)
{
unsigned long timeThreadID;
crTick=0;
HANDLE TimeProcHandle = CreateThread(NULL, 0, TimeThreadFunc, NULL, 0, &timeThreadID);
ModemProc();
CloseHandle(TimeProcHandle);
return 0;
}
unsigned long __stdcall InitThreadFunc(void *lpParam)
{
backstate=ModemInit();
if (backstate)
{
AnsiString as;
as=as.sprintf("设定modem参数失败。cres=%d\r\n",backstate);
DebugPrint(as.c_str());
}
else
{
DebugPrint("初始化成功\r\n ");
}
return 0;
}
unsigned long __stdcall TimeThreadFunc(void *lpParam)
{
unsigned int timestar=0;
unsigned int tickbuf=0;
while(1)
{
if (entimer)
{
timer3_c_irq_handler();
timestar=1;
tickbuf=GetTickCount();
}
if (timestar)
{
while(1)
{
if (GetTickCount()-tickbuf>=10)
{
tickbuf=GetTickCount();
break;
}
}
}
}
return 0;
}
//---------------------------------------------------------------------------
void __fastcall TfrmModem::SPCReceiveData(TObject *Sender,void *Buffer,Word BufferLength)
{
//
PortReceive((unsigned char *)Buffer,BufferLength);
}
void __fastcall TfrmModem::FormDestroy(TObject *Sender)
{
delete SPC;
CloseHandle(tickHandle);
}
//---------------------------------------------------------------------------
void __fastcall TfrmModem::CommInition(void)
{
SPC->CommName="COM1";
SPC->BaudRate=115200;
SPC->ParityCheck = false;
SPC->StopBits = _1;
SPC->Parity = Even;
SPC->Outx_XonXoffFlow = false;
SPC->StartComm();
}
void __fastcall TfrmModem::btCallClick(TObject *Sender)
{
//
SetDialNumber(cbCallNumber->Text.c_str());
if (rgPacket->ItemIndex>=0)
{
SigninPackage(PackUnit[rgPacket->ItemIndex].size,PackUnit[rgPacket->ItemIndex].PackData);
}
unsigned long procThreadID;
HANDLE ModemProcHandle = CreateThread(NULL, 0, ProcThreadFunc, NULL, 0, &procThreadID);
CloseHandle(ModemProcHandle);
}
//---------------------------------------------------------------------------
void __fastcall TfrmModem::btModemInitionClick(TObject *Sender)
{
DebugPrint("modem初始化...\r\n");
backstate=0;
unsigned long InitThreadID;
HANDLE ModemInitHandle = CreateThread(NULL, 0, InitThreadFunc, NULL, 0, &InitThreadID);
CloseHandle(ModemInitHandle);
}
//---------------------------------------------------------------------------
void __fastcall TfrmModem::Button1Click(TObject *Sender)
{
mmMsg->Lines->Add(AnsiString(GetTickCount()));
mmMsg->Lines->Add(AnsiString(StTick));
}
//---------------------------------------------------------------------------
void __fastcall TfrmModem::btPortStateClick(TObject *Sender)
{
if (btPortState->Caption=="串口关闭")
{
btPortState->Caption="串口打开" ;
SPC->StopComm();
}
else
{
btPortState->Caption="串口关闭";
SPC->StartComm();
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmModem::btClearClick(TObject *Sender)
{
mmMsg->Lines->Clear();
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -