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

📄 radioctrl.cpp

📁 一款usb端口控制手机的程序
💻 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 + -