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

📄 radiostatedlg.cpp

📁 Mobile Application for trackig
💻 CPP
字号:
// RadioStateDlg.cpp : implementation file
//

#include "stdafx.h"
#include "RadioState.h"
#include "RadioStateDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

void FAR PASCAL CRadioStateDlg::lineCallback(DWORD hDevice,DWORD dwMsg,DWORD dwCallbackInstance,
											 DWORD dwParam1,DWORD dwParam2,DWORD dwParam3)
{
}


// CRadioStateDlg dialog
CRadioStateDlg::CRadioStateDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CRadioStateDlg::IDD, pParent)
{
	m_hIcon				= AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_hLineApp			= NULL;
	m_dwDevices			= 0;
	m_dwCellularId		= 0;
	m_dwLowAPIVersion	= 0;
	m_hCellularLine		= NULL;
	m_dwRadioState		= 0;
	m_dwRadioSupport	= 0;
	m_bRadioOff			= FALSE;
}

void CRadioStateDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CRadioStateDlg, CDialog)
	ON_WM_SIZE()

	//}}AFX_MSG_MAP
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_ONOFF, &CRadioStateDlg::OnBnClickedOnoff)
END_MESSAGE_MAP()


// CRadioStateDlg message handlers

BOOL CRadioStateDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon

	if(0 == InitializeTAPI())
	{
		m_dwCellularId	= GetCellularLineId();
	}

	if(0xFFFFFFFF != m_dwCellularId)
	{
		m_hCellularLine	= OpenTAPILine(m_dwCellularId);

		if(m_hCellularLine)
		{
			lineGetEquipmentState(m_hCellularLine,&m_dwRadioState,&m_dwRadioSupport);
		}
	}

	DisplayInfo(m_dwRadioState);
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CRadioStateDlg::OnSize(UINT nType, int cx, int cy)
{
	CDialog::OnSize(nType,cx,cy);
}

long CRadioStateDlg::InitializeTAPI()
{
	LINEINITIALIZEEXPARAMS	sLineParam;

	memset(&sLineParam,0,sizeof(LINEINITIALIZEEXPARAMS));

	sLineParam.dwTotalSize	= sizeof(LINEINITIALIZEEXPARAMS);
	sLineParam.dwOptions	= LINEINITIALIZEEXOPTION_USEHIDDENWINDOW; 

	m_dwLowAPIVersion		= TAPI_CURRENT_VERSION;

	long	lReturn	= lineInitializeEx(&m_hLineApp,
									   theApp.m_hInstance,
									   lineCallback,
									   TAPI_FRIENDLY_NAME,
									   &m_dwDevices,
									   &m_dwLowAPIVersion,
									   &sLineParam);

	return lReturn;
}

void CRadioStateDlg::ShutdownTAPI()
{
	if(m_hCellularLine)
	{
		lineClose(m_hCellularLine);
	}

	if(m_hLineApp)
	{
		lineShutdown(m_hLineApp);
	}

	m_hLineApp		= NULL;
	m_hCellularLine	= NULL;
}
void CRadioStateDlg::OnDestroy()
{
	ShutdownTAPI();

	CDialog::OnDestroy();
}

DWORD CRadioStateDlg::GetCellularLineId()
{
	DWORD				dwReturn		= 0xFFFFFFFF;
	long				lResult			= 0;
	LINEEXTENSIONID		sLineExt		= {0};
	LPLINEDEVCAPS		lpLineDevCaps	= NULL;	
	DWORD				dwAPIVersion	= TAPI_CURRENT_VERSION;
	BOOL				bContinue		= TRUE;

	for(DWORD dwLine=0; dwLine<m_dwDevices && bContinue; ++dwLine)
	{
		lResult		= lineNegotiateAPIVersion(m_hLineApp,dwLine,m_dwLowAPIVersion,TAPI_CURRENT_VERSION,&dwAPIVersion,&sLineExt);

		if(0 == lResult)
		{
			lpLineDevCaps	= (LPLINEDEVCAPS)LocalAlloc(LPTR,sizeof(LINEDEVCAPS));
			lResult			= LINEERR_STRUCTURETOOSMALL;

			lpLineDevCaps->dwTotalSize	= sizeof(LINEDEVCAPS);
			lpLineDevCaps->dwNeededSize	= sizeof(LINEDEVCAPS);

			while(LINEERR_STRUCTURETOOSMALL == lResult)
			{
				lResult	= lineGetDevCaps(m_hLineApp,dwLine,TAPI_CURRENT_VERSION,0,lpLineDevCaps);

				if(LINEERR_STRUCTURETOOSMALL == lResult || lpLineDevCaps->dwTotalSize < lpLineDevCaps->dwNeededSize)
				{
					lpLineDevCaps	= (LPLINEDEVCAPS)LocalReAlloc(lpLineDevCaps,lpLineDevCaps->dwNeededSize,LMEM_MOVEABLE);
					lResult			= LINEERR_STRUCTURETOOSMALL;

					lpLineDevCaps->dwTotalSize	= lpLineDevCaps->dwNeededSize;
				}
			}

			if(0 == lResult)
			{
				TCHAR szName[512];

				memcpy((PVOID)szName,(PVOID)((BYTE*)lpLineDevCaps + lpLineDevCaps ->dwLineNameOffset), 
					    lpLineDevCaps->dwLineNameSize);

				szName[lpLineDevCaps->dwLineNameSize]	= 0;

				if(_tcscmp(szName,CELLTSP_LINENAME_STRING) == 0)
				{
					dwReturn	= dwLine;
					bContinue	= FALSE;
				}
			}

			LocalFree((HLOCAL)lpLineDevCaps);
		}
	}

	return dwReturn;
}

HLINE CRadioStateDlg::OpenTAPILine(DWORD dwLineId)
{
	DWORD	dwMediaMode = LINEMEDIAMODE_INTERACTIVEVOICE;
	HLINE	hLine		= NULL;
	long	lReturn		= lineOpen(m_hLineApp,m_dwCellularId,&hLine,
								   TAPI_CURRENT_VERSION,0,(DWORD)this,
								   LINECALLPRIVILEGE_OWNER,dwMediaMode,0);

	return hLine;
}

void CRadioStateDlg::DisplayInfo(DWORD dwState)
{
	CString		strState(TEXT("Unknown"));
	CString		strInfo;

	switch(dwState)
	{
		case LINEEQUIPSTATE_MINIMUM:	strState	= TEXT("OFF");				break;
		case LINEEQUIPSTATE_FULL:		strState	= TEXT("ON");				break;
		case LINEEQUIPSTATE_RXONLY:		strState	= TEXT("RECEIVE ONLY");		break;
		case LINEEQUIPSTATE_TXONLY:		strState	= TEXT("TRANSMIT ONLY");	break;
		case LINEEQUIPSTATE_NOTXRX:		strState	= TEXT("OFF");				break;
	}

	strInfo.Format(TEXT("Radio state is %s"),strState);

	SetDlgItemText(IDC_EQPSTATE,strInfo);

	if(LINEEQUIPSTATE_MINIMUM	== dwState		||
	   LINEEQUIPSTATE_NOTXRX	== dwState)
	{
		m_bRadioOff	= TRUE;

		GetDlgItem(IDC_ONOFF)->SetWindowText(TEXT("Turn it ON"));
	}
	else
	{
		m_bRadioOff	= FALSE;

		GetDlgItem(IDC_ONOFF)->SetWindowText(TEXT("Turn it OFF"));
	}
}
void CRadioStateDlg::OnBnClickedOnoff()
{
	if(!m_hCellularLine)
		return;

	SetCursor(LoadCursor(NULL,IDC_WAIT));

	if(m_bRadioOff)
	{
		lineSetEquipmentState(m_hCellularLine,LINEEQUIPSTATE_FULL);

		lineRegister(m_hCellularLine,LINEREGMODE_AUTOMATIC,NULL,0);
	}
	else
	{
		lineSetEquipmentState(m_hCellularLine,LINEEQUIPSTATE_MINIMUM);

		lineUnregister(m_hCellularLine);
	}

	lineGetEquipmentState(m_hCellularLine,&m_dwRadioState,&m_dwRadioSupport);
	
	DisplayInfo(m_dwRadioState);

	SetCursor(LoadCursor(NULL,IDC_ARROW));
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -