📄 radioctrl.cpp
字号:
#include "StdAfx.h"
#include ".\radioctrl.h"
#include "E:\Mydesign\pCom\pCom\pCom\pCom.h"
#pragma comment(lib,"E:\\MyDesign\\bin\\pCom.lib")
HANDLE RadioCtrl::GetHandle(void) { return this->pHandle;}
HANDLE RadioCtrl::SetHandle(HANDLE h) { return pHandle=h;}
RadioCtrl::RadioCtrl(void)
: inUse(FALSE)
{
SetHandle(INVALID_HANDLE_VALUE);
radio_string=new char[100];
this->os_Read.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
this->os_Write.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
buffer=new char[1024];
::InitializeCriticalSection(&this->busCritical);
}
RadioCtrl::~RadioCtrl(void)
{
CloseRadio();
delete radio_string;
delete buffer;
}
int RadioCtrl::OpenRadio(void)
{
::GetPhoneString(radio_string,100);
pHandle=::OpenRadio(radio_string);
if(!pHandle||pHandle==INVALID_HANDLE_VALUE)
return TDTK_FAIL;
return TDTK_SUCCESS;
}
int RadioCtrl::CloseRadio(void)
{
if(pHandle&&pHandle!=INVALID_HANDLE_VALUE)
{
CloseHandle(pHandle);
pHandle=INVALID_HANDLE_VALUE;
}
return TDTK_SUCCESS;
}
int RadioCtrl::WriteData(BYTE* pData, ULONG dataLen)
{
int nStatus;
if(!pHandle||pHandle==INVALID_HANDLE_VALUE)
return TDTK_FAIL;
nStatus=::WriteData(pHandle,pData,dataLen,os_Write);
return nStatus;
}
int RadioCtrl::WriteData(CString cmdStr)
{
int nStatus;
if(!pHandle||pHandle==INVALID_HANDLE_VALUE)
return TDTK_FAIL;
BYTE* pData=new BYTE[cmdStr.GetLength()];
if(ConvertStrToByte(cmdStr,pData,cmdStr.GetLength()))
{
nStatus=::WriteData(pHandle,pData,cmdStr.GetLength()/2,os_Write);
}
else
{
nStatus=0;
}
delete pData;
return nStatus;
}
int RadioCtrl::ConvertStrToByte(CString cmdStr, BYTE* pData, ULONG dataLen)
{
ULONG i;
BYTE temp;
for(i=0;i<dataLen/2;i++)
{
pData[i]=cmdStr.GetAt(i*2);
if(pData[i]<='9'&&pData[i]>='0')
pData[i]-='0';
else if(pData[i]>='a'&&pData[i]<='f')
pData[i]-='a';
else if(pData[i]>='A'&&pData[i]<='F')
pData[i]-='A';
else
return 0;
temp=cmdStr.GetAt(i*2+1);
if(temp<='9'&&temp>='0')
temp-='0';
else if(temp>='a'&&temp<='f')
temp-='a';
else if(temp>='A'&&temp<='F')
temp-='A';
else
return 0;
pData[i]=pData[i]<<4|(temp&0x0f);
}
return 1;
}
CString RadioCtrl::DataToHexStr(BYTE* pData, ULONG dataLen)
{
if(dataLen*2>1024)
{
delete buffer;
buffer=new char[dataLen*2+1];
}
memset((void*)buffer,0,dataLen*2+1);
ULONG i;
for(i=0;i<dataLen;i++)
{
buffer[(i<<1)]=pData[i]&0x0f;
buffer[(i<<1)+1]=(pData[i]&0xf0)>>4;
if(buffer[i<<1]<10)
buffer[i<<1]+='0';
else
buffer[i<<1]+='A'-10;
if(buffer[(i<<1)+1]<10)
buffer[(i<<1)+1]+='0';
else
buffer[(i<<1)+1]+='A'-10;
}
return CString(buffer);
}
CString RadioCtrl::DataToStr(BYTE* pData, ULONG dataLen)
{
ULONG i;
if(dataLen>1024)
return CString();
for(i=0;i<dataLen;i++)
sprintf(&buffer[i],"%c",pData[i]);
buffer[i]=0;
return CString(buffer);
}
CString RadioCtrl::QueryStr(void)
{
ULONG returnLen;
BYTE buf[1000];
int nStatus=QueryData(buf,1000,returnLen);
if(nStatus!=TDTK_SUCCESS)
return NULL;
CString str=this->DataToHexStr((BYTE*)buf,returnLen);
return str;
}
int RadioCtrl::QueryData(BYTE* pData, ULONG dataLen, ULONG& returnLen)
{
int nStatus=::QueryData(pHandle,pData,dataLen,returnLen,os_Read);
return nStatus;
}
int RadioCtrl::btnClick(int num)
{
BYTE btnCmd[17]={0x41,0x02,00,00,0x08,00,0x09,00,00,0x00,0x00,0x13,00,01,00,00,0x00};
btnCmd[16]=(BYTE)num;
DWORD pdwLen=17;
BYTE pData[100];
ULONG len;
this->RequestBus();
int nStatus=WriteData(btnCmd,pdwLen);
Sleep(100);
if(nStatus==TDTK_SUCCESS)
nStatus=this->QueryData(pData,100,len);
if(nStatus!=TDTK_SUCCESS||pData[0]!=1)
Sleep(3000);
Sleep(100);
this->ReleaseBus();
return nStatus;
}
void RadioCtrl::RequestBus(void)
{
while(this->inUse==TRUE)Sleep(200);
::EnterCriticalSection(&busCritical);
inUse=TRUE;
::LeaveCriticalSection(&busCritical);
}
void RadioCtrl::ReleaseBus(void)
{
::EnterCriticalSection(&busCritical);
inUse=FALSE;
::LeaveCriticalSection(&busCritical);
}
int RadioCtrl::GetVersion(CString& str)
{
//41 02 00 00 08 00 0A 00 00 00 00 39 00 02 00 00 FF FF
BYTE btnCmd[]={0x41,0x02,00,00,0x08,00,0x0A,00,00,0x00,0x00,0x39,00,02,00,00,0xFF,0xFF};
DWORD pdwLen=sizeof(btnCmd);
this->RequestBus();
this->ClearRadioBuf();
int nStatus=WriteData(btnCmd,pdwLen);
Sleep(20);
BYTE pData[150];
ULONG lenth;
if(nStatus==TDTK_SUCCESS)
{
nStatus=this->QueryData(pData,150,lenth);
str=this->DataToStr(&pData[15],lenth-15);
}
if(nStatus!=TDTK_SUCCESS||pData[0]!=1)
Sleep(3000);
ReleaseBus();
return nStatus;
}
int RadioCtrl::GetSN(CString& str)
{
//41 02 00 00 08 00 10 00 00 00 00 20 00 08 00 00 00 11 00 01 00 00 00 0A
BYTE btnCmd[]={0x41,0x02,00,00,0x08,00,0x10,00,00,0x00,0x00,0x20,00,0x08,00,00,0x00,0x11,0x00,0x01,0x00,0x00,0x00,0x0A};
DWORD pdwLen=sizeof(btnCmd);
RequestBus();
this->ClearRadioBuf();
int nStatus=WriteData(btnCmd,pdwLen);
Sleep(20);
BYTE pData[150];
ULONG lenth;
if(nStatus==TDTK_SUCCESS)
{
nStatus=this->QueryData(pData,150,lenth);
str=this->DataToStr(&pData[15],lenth-15);
}
if(nStatus!=TDTK_SUCCESS||pData[0]!=1)
Sleep(3000);
ReleaseBus();
return nStatus;
}
int RadioCtrl::btnClick(int num, BYTE* returnData, ULONG dataLen, ULONG& returnLen)
{
BYTE btnCmd[17]={0x41,0x02,00,00,0x08,00,0x09,00,00,0x00,0x00,0x13,00,01,00,00,0x00};
btnCmd[16]=(BYTE)num;
DWORD pdwLen=17;
this->RequestBus();
int nStatus=WriteData(btnCmd,pdwLen);
Sleep(100);
if(nStatus==TDTK_SUCCESS)
nStatus=this->QueryData(returnData,dataLen,returnLen);
if(nStatus!=TDTK_SUCCESS||returnData[0]!=1)
Sleep(3000);
Sleep(200);
this->ReleaseBus();
return nStatus;
}
int RadioCtrl::SendCmd(BYTE* cmdData, ULONG dataLen)
{
BYTE returnData[1024];
ULONG returnLen;
this->RequestBus();
int nStatus;
nStatus=WriteData(cmdData,dataLen);
Sleep(20);
if(nStatus==TDTK_SUCCESS)
nStatus=QueryData(returnData,1024,returnLen);
if(nStatus!=TDTK_SUCCESS||returnData[0]!=1)
Sleep(3000);
this->ReleaseBus();
return nStatus;
}
int RadioCtrl::SendCmd(CString cmdStr)
{
BYTE returnData[1024];
ULONG returnLen;
this->RequestBus();
int nStatus;
nStatus=WriteData(cmdStr);
Sleep(20);
if(nStatus==TDTK_SUCCESS)
nStatus=QueryData(returnData,1024,returnLen);
if(nStatus!=TDTK_SUCCESS||returnData[0]!=1)
Sleep(3000);
this->ReleaseBus();
return nStatus;
}
int RadioCtrl::SendCmd(BYTE* cmdData, ULONG dataLen, BYTE* returnData,ULONG len, ULONG returnLen)
{
this->RequestBus();
int nStatus;
nStatus=WriteData(cmdData,dataLen);
Sleep(20);
if(nStatus==TDTK_SUCCESS)
nStatus=QueryData(returnData,len,returnLen);
if(nStatus!=TDTK_SUCCESS||returnData[0]!=1)
Sleep(3000);
this->ReleaseBus();
return nStatus;
}
int RadioCtrl::Suspend(void)
{
//41 02 00 00 08 00 09 00 00 00 00 36 00 01 00 00 00
BYTE btnCmd[]={0x41,0x02,00,00,0x08,00,0x09,00,00,0x00,0x00,0x36,00,0x01,00,00,0x00};
DWORD pdwLen=sizeof(btnCmd);
RequestBus();
int nStatus=WriteData(btnCmd,pdwLen);
Sleep(20);
BYTE pData[150];
ULONG lenth;
if(nStatus==TDTK_SUCCESS)
{
nStatus=this->QueryData(pData,150,lenth);
}
if(nStatus!=TDTK_SUCCESS||pData[0]!=1)
Sleep(3000);
ReleaseBus();
return nStatus;
}
int RadioCtrl::Normal(void)
{
//41 02 00 00 08 00 09 00 00 00 00 36 00 01 00 00 01
BYTE btnCmd[]={0x41,0x02,00,00,0x08,00,0x09,00,00,0x00,0x00,0x36,00,0x01,00,00,0x01};
DWORD pdwLen=sizeof(btnCmd);
RequestBus();
int nStatus=WriteData(btnCmd,pdwLen);
Sleep(20);
BYTE pData[150];
ULONG lenth;
if(nStatus==TDTK_SUCCESS)
{
nStatus=this->QueryData(pData,150,lenth);
}
if(nStatus!=TDTK_SUCCESS||pData[0]!=1)
Sleep(3000);
ReleaseBus();
return nStatus;
}
int RadioCtrl::GetIMEI(CString& str)
{
//410200000800100000000020000800000004000100000009
CString cmdStr="410200000800100000000020000800000004000100000009";
BYTE returnData[1024];
ULONG returnLen;
this->RequestBus();
int nStatus;
nStatus=WriteData(cmdStr);
Sleep(20);
if(nStatus==TDTK_SUCCESS)
{
nStatus=QueryData(returnData,1024,returnLen);
if(nStatus==TDTK_SUCCESS)
{
str=this->DataToHexStr(returnData,returnLen);
QueryData(returnData,1024,returnLen);
}
}
if(nStatus!=TDTK_SUCCESS||returnData[0]!=1)
Sleep(3000);
this->ReleaseBus();
return nStatus;
}
//you can When you call this function,
int RadioCtrl::KeyTest(WORD& key)
{
//41 02 00 00 08 00 08 00 00 00 00 3F 00 00 00 00 ---Key Test Command
//CString cmdStr="41020000080008000000003F00000000";
OpenRadio();
BYTE cmdByte[]={0x41,0x02,0x00,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00};
BYTE returnData[1024];
ULONG len=sizeof(cmdByte);;
ULONG returnLen;
this->RequestBus();
int nStatus;
nStatus=WriteData(cmdByte,len);
Sleep(200);
if(nStatus==TDTK_SUCCESS)
{
nStatus=QueryData(returnData,1024,returnLen);
if(nStatus==TDTK_SUCCESS)
{
key=*(WORD*)(LPVOID)&returnData[returnLen-2];
}
}
if(nStatus!=TDTK_SUCCESS||returnData[0]!=1)
Sleep(3000);
this->ReleaseBus();
return nStatus;
}
void RadioCtrl::ClearRadioBuf(void)
{
BYTE returnData[1024];
ULONG returnLen;
while(QueryData(returnData,1024,returnLen)==TDTK_SUCCESS);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -