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






4.94/5 (18投票s)
2003 年 1 月 26 日
8分钟阅读

150189

1796
使用WiNRADiO卡为您的台式计算机添加收音机支持。
引言
WiNRADiO WR-1000i 是一款 PC 卡宽带通信接收器。我用它来监听各种业余无线电频道,有时也会录制下来供以后使用。假设您可以控制接收器,通过给它指定频率来设置您想要的频道,并可以选择录制。利用 WiNRADiO 的功能,您可以确定信号强度是否大于某个恒定值。另一方面,您可以扫描一个频率带宽并报告活动的频道。
正是由于这些复杂的功能,我编写了一个简单的程序来展示如何控制无线电接收器。在编译此演示程序之前,您必须安装 WiNRADiO 驱动程序。安装驱动程序后,编译并运行演示程序。
注意:您必须拥有 WiNRADiO 卡才能看到确切的结果。有关 WiNRADiO 的更多信息,请单击 此处。图 2 显示了 WiNRADiO 1500 系列卡。
图 2
程序工作原理
为了简化,我创建了一个类来调用 WiNRADiO API。所有内容都由这个类处理:CWiNRADiO
。首先,将 WiNRADiO.h 和 WiNRADiO.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
结构中的 iMaxAMScanRate
和 iMaxFMScanRate
字段分别指定了无线电在每种模式下可以扫描的速度(每秒扫描的站数)。因此,在调用 SetFrequency
和 GetSignalStrength
之间,应插入 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
结构中的 dwMinFreq
和 dwMaxFreq
字段中指定。
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
尽情享用!