65.9K
CodeProject 正在变化。 阅读更多。
Home

为您的桌面添加收音机支持

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.94/5 (18投票s)

2003 年 1 月 26 日

8分钟阅读

viewsIcon

150189

downloadIcon

1796

使用WiNRADiO卡为您的台式计算机添加收音机支持。

Sample Image - WiNRADiO.jpg

引言

WiNRADiO WR-1000i 是一款 PC 卡宽带通信接收器。我用它来监听各种业余无线电频道,有时也会录制下来供以后使用。假设您可以控制接收器,通过给它指定频率来设置您想要的频道,并可以选择录制。利用 WiNRADiO 的功能,您可以确定信号强度是否大于某个恒定值。另一方面,您可以扫描一个频率带宽并报告活动的频道。

正是由于这些复杂的功能,我编写了一个简单的程序来展示如何控制无线电接收器。在编译此演示程序之前,您必须安装 WiNRADiO 驱动程序。安装驱动程序后,编译并运行演示程序。

注意:您必须拥有 WiNRADiO 卡才能看到确切的结果。有关 WiNRADiO 的更多信息,请单击 此处。图 2 显示了 WiNRADiO 1500 系列卡。

WiNRADiO 1500 series ISA card
图 2

程序工作原理

为了简化,我创建了一个类来调用 WiNRADiO API。所有内容都由这个类处理:CWiNRADiO。首先,将 WiNRADiO.hWiNRADiO.cpp 添加到您的项目中。然后,在您的对话框定义或主头文件顶部包含 WiNRADiO.h 头文件。定义一个类型为 CWiNRADiO 的成员变量。

例如

CWiNRADiO m_Radio;

通过使用 CWiNRADiO 类,您可以控制您的接收器。

深入了解 CWiNRADiO

注意:大部分函数文档摘自 WiNRADiO SDK 文档。

以下是 CWiNRADiO 类的成员函数

int OpenRadioDevice(int iDeviceNum);

描述:打开一个无线电设备,以便您可以使用其他函数来控制该设备。

参数

iDeviceNum:您想打开的无线电设备编号,范围从 1 到 255。如果指定为零,它将打开下一个可用设备。串行设备(WR-xx00e)无法显式指定,只能用零打开。

返回值:返回一个设备句柄,该句柄必须用于调用所有其他函数(hRadio)。如果返回零,则没有可用设备可供打开,或者指定的设备不存在。

备注:如果您希望一个以上的应用程序使用同一设备,您必须在使用完毕后关闭该设备,以便其他应用程序可以访问该设备。对于 Win32 应用程序,多个线程可以随时访问同一设备。

BOOL CloseRadioDevice();

描述:关闭之前打开的无线电设备,并允许其他程序访问该无线电设备。

返回值:如果函数成功,则返回值为 TRUE,否则返回值为 FALSE

LPSTR GetModeString(int iMode, LPSTR lpBuffer, int cbMaxLen);

描述:GetModeString 函数检索一个文本字符串,该字符串描述一个模式(可选包括带宽)。

参数

iMode:要获取字符串的模式以及可选的带宽。有关有效值,请参阅 SetMode

lpBuffer:指向将接收模式字符串的缓冲区的指针。

cbMaxLen:指定要复制到缓冲区的最大字符数。如果模式字符串比 cbMaxLen 中指定的字符数长,则该字符串将被截断。

返回值:如果函数成功,则返回指向 lpBuffer 的指针。否则,返回 NULL

BOOL GetPower();

描述:GetPower 函数返回接收器电源是打开还是关闭。

返回值:如果接收器电源已打开,则返回 TRUE;如果电源已关闭,则返回 FALSE

BOOL SetPower(BOOL bPower=TRUE);

描述:SetPower 函数打开或关闭设备的电源。此函数可用于在便携式应用中关闭 WiNRADiO 以节省电池电量。

参数

bPower:如果为 TRUE,则无线电设备电源已打开;如果为 FALSE,则无线电设备电源已关闭。

返回值:如果函数成功,则返回值为 TRUE。如果函数失败,则返回值为 FALSE

BOOL GetMute();

描述:GetMute 函数返回音频输出静音控件的状态。

返回值:如果音频静音已启用,则 GetMute 返回 TRUE;否则,如果静音已禁用,则返回 FALSE

BOOL SetMute(BOOL bMute);

描述:SetMute 函数控制音频输出是否被静音。

参数

bMute:如果为 TRUE,则音频静音已启用;如果为 FALSE,则音频静音已禁用。

返回值:如果函数成功,则返回值为 TRUE。如果函数失败,则返回值为 FALSE

int GetMode();

描述:GetMode 函数检索接收器当前所处的接收模式。

返回值:如果成功,则返回当前接收器模式;否则,返回 -1。有关可能的模式返回值,请参阅 SetMode

BOOL SetMode(int iMode);

描述:SetMode 函数设置无线电设备的接收模式。

参数

iMode:指定要将设备设置为的接收模式。使用以下常量之一:

RMD_CW, RMD_AM, RMD_FMN, RMD_FMW, RMD_LSB, RMD_USB, RMD_FMM

返回值:如果函数成功,则返回值为 TRUE。如果函数失败,则返回值为 FALSE

备注:要设置模式,必须指定一个 RMD_xxx 模式,并将其与可选的 RBW_xxx 带宽值进行 OR 运算。如果未指定带宽,则默认为该模式使用的带宽。常量表示近似带宽,调用 GetModeString 将返回实际带宽。

设备支持的模式数量由 GetRadioDeviceInfo 函数返回的 RADIOINFO 结构中的 iNumModes 字段指定。实际支持的模式可以从 lpSupportedModes 数组中读取,其元素数量由 iNumModes 指定。该数组同时指定了模式和带宽。

BOOL GetScanMode();

描述:获取无线电的扫描模式。

返回值:如果接收器已设置为扫描模式,则返回 TRUE;否则,如果未设置,则返回 FALSE

BOOL SetScanMode(BOOL bScan);

描述:SetScanMode 函数控制无线电接收器对频率变化的信号强度响应。

参数

bScan:设置为 TRUE 以启用扫描模式,设置为 FALSE 以禁用它。

返回值:如果函数成功,则返回值为 TRUE,否则返回值为 FALSE

备注:如果启用了扫描模式,GetSignalStrength 返回的值可能不太准确,但会对频率变化做出更快的响应。

RADIOINFO 结构中的 iMaxAMScanRateiMaxFMScanRate 字段分别指定了无线电在每种模式下可以扫描的速度(每秒扫描的站数)。因此,在调用 SetFrequencyGetSignalStrength 之间,应插入 1000/iMaxXXScanRate 毫秒的延迟(在扫描期间)。

BOOL GetAttenuator();

描述:GetAttenuator 函数返回射频输入衰减器设置。

返回值:如果射频衰减器已启用,则 GetAttenuator 返回 TRUE;否则,如果已禁用,则返回 FALSE

BOOL SetAttenuator(BOOL bAtten=TRUE);

描述:SetAttenuator 函数激活或禁用射频输入衰减器。它用于防止接收器被强信号过载。

参数

bAtten:如果为 TRUE,则射频衰减器已启用;如果为 FALSE,则射频衰减器已禁用(更灵敏)。

返回值:如果函数成功,则返回值为 TRUE。如果函数失败,则返回值为 FALSE

int GetVolume();

描述:GetVolume 函数返回无线电设备的音频输出音量。

返回值:如果成功,则返回当前音频输出音量;否则,返回 -1。

BOOL SetVolume(int iVolume);

描述:SetVolume 函数设置音频输出音量级别。

参数

iVolume:指定接收器的音频输出音量。

返回值:如果函数成功,则返回值为 TRUE。如果函数失败,则返回值为 FALSE

备注:最高音量级别在 GetRadioDeviceInfo 函数检索到的 RADIOINFO 结构中的 iMaxVolume 字段中指定。在静音启用期间不会发出任何声音。

DWORD GetFrequency();

描述:GetFrequency 函数检索接收器调谐到的频率。

返回值:以 Hz 为单位的当前接收器频率。

BOOL SetFrequency(DWORD dwFreq);

描述:SetFrequency 函数设置设备要调谐到的频率。

参数

dwFreq:指定要调谐到接收器的频率。前 31 位用于指定频率(以 Hz 为单位),范围从 0 到 2.147 GHz。如果设置了第 31 位(MSB),则前 31 位的值乘以 10,从而使可调谐频率范围从 0 到 21.47 GHz,最小分辨率为 10 Hz。

返回值:如果函数成功,则返回值为 TRUE。如果函数失败,则返回值为 FALSE

备注:下限和上限分别在 GetRadioDeviceInfo 函数检索到的 RADIOINFO 结构中的 dwMinFreqdwMaxFreq 字段中指定。

DWORD GetSignalStrength();

描述:GetSignalStrength 函数返回无线电设备接收到的无线电信号强度。

返回值:低位字范围从 0(非常弱的信号)到 120(非常强的信号)。这是 WiNRADiO 使用的值,约等于相对于接收器噪声底的信号强度(以 dB 为单位)。高位字保留供将来使用,应将其屏蔽掉。

int GetRadioDeviceInfo(LPRADIOINFO lpInfo);

描述:GetRadioDeviceInfo 函数检索有关无线电设备的硬件信息。

参数

lpInfo:指向一个 RADIOINFO 结构的地址,该结构将填充有关无线电设备的功能和其他信息。此参数可以为 NULL

返回值:包含无线电设备上控制器当前状态的位字段(未指定的位是保留的)。

位 功能

0 IBF:如果读取 MCU 端口已满,则为高

1 OBF:如果写入 MCU 端口已满,则为高

2 -XLD:LD(锁定检测)信号的倒置(来自无线电设备卡)

5 -DSPPPRES:如果 DSP 选项存在,则为低

7 MCUSTAT:当 MCU 空闲时(等待命令)为低,忙碌或正在与 PC 进行数据传输时为高。

使用示例

使用这个类非常简单。首先包含 WiNRADiO.h 头文件,然后声明一个类型为 CWiNRADiO 的成员变量。下面是一个示例:

CWiNRADiO m_Radio;
m_Radio.OpenRadioDevice(1); //Open 1st Radio Device
m_Radio.SetPower(TRUE); //Turn on Radio
m_Radio.SetMute(FALSE);
m_Radio.SetMode(RMD_FMW); //Wide FM
m_Radio.SetFrequency(104700000); //104.7 MHz 

if (m_Radio.GetSignalStrength() < 70)    //Level of Singal is low
{
    m_Radio.SetFrequency(102600000); //102.6 MHz
}

m_Radio.CloseRadioDevice(); //Close

尽情享用!

© . All rights reserved.