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

📄 fmmodem.cpp

📁 采用cb平台开发
💻 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 + -