624 lines
21 KiB
C++
624 lines
21 KiB
C++
#ifndef __PHONIC_UBOX_INCLUDE__
|
||
#define __PHONIC_UBOX_INCLUDE__
|
||
|
||
|
||
#ifndef WINVER
|
||
#define WINVER 0x0501
|
||
#endif
|
||
|
||
#ifndef _WIN32_WINNT
|
||
#define _WIN32_WINNT 0x0501
|
||
#endif
|
||
|
||
#define WIN32_LEAN_AND_MEAN // 从 Windows 头中排除极少使用的资料
|
||
|
||
#include <windows.h>
|
||
|
||
#include <iostream>
|
||
|
||
|
||
|
||
/*
|
||
#ifdef PHONIC_UBOX_EXPORTS
|
||
#define PHONIC_UBOX_API extern "C" __declspec(dllexport)
|
||
#else
|
||
#define PHONIC_UBOX_API extern "C" __declspec(dllimport)
|
||
#endif
|
||
*/
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
|
||
typedef unsigned long UBOX_HANDLE;
|
||
|
||
#define INVALID_UBOX_HANDLE (UBOX_HANDLE)(-1)
|
||
|
||
#define VOICE_FRAME_TIME 20 //语音帧时间,单位:毫秒
|
||
|
||
|
||
|
||
/* ---------------------------------------------
|
||
BusyInfo.busy_dual_frequency = 0;
|
||
BusyInfo.busy_frequency0 = 450;
|
||
BusyInfo.busy_frequency1 = 420;
|
||
BusyInfo.busy_on = 35;
|
||
BusyInfo.busy_off = 35;
|
||
BusyInfo.busy_on_off_error = 5;
|
||
BusyInfo.busy_enery_gate = 12;
|
||
BusyInfo.busy_period_count = 3;
|
||
*/
|
||
|
||
struct tagBusyInfo
|
||
{
|
||
long busy_dual_frequency;
|
||
long busy_frequency0;
|
||
long busy_frequency1;
|
||
long busy_on;
|
||
long busy_off;
|
||
long busy_on_off_error;
|
||
long busy_enery_gate;
|
||
long busy_period_count;
|
||
};
|
||
|
||
typedef enum ENUM_VOICE_CODER
|
||
{
|
||
CODER_ALAW = 0,
|
||
CODER_PCM = 1,
|
||
CODER_G729 = 3,
|
||
CODER_SPEEX = 20,
|
||
CODER_MP3 = 38,
|
||
CODER_ULAW = 100,
|
||
}VOICE_CODER;
|
||
|
||
|
||
typedef enum ENUM_UBOX_WORK_MODE
|
||
{
|
||
UBOX_MODE_RECORD = 0, //录音模式, 通常使用的模式
|
||
UBOX_MODE_DIAG = 1, //诊断模式, 用于捕获线路信息,供信号分析之用,支持的语音编码方式是CODER_PCM
|
||
UBOX_MODE_CONFIG = 2, //配置模式,
|
||
}UBOX_WORK_MODE;
|
||
|
||
|
||
typedef enum ENUM_UBOX_STATE
|
||
{
|
||
UBOX_STATE_PLUG_OUT = 0, //无此设备,或设备已被拔出
|
||
//当设备被拔出时,不需要调用 stop_record(),因为 phonic_ubox 已经自动为你调用过了!
|
||
|
||
UBOX_STATE_RESET = 1, //复位态,表示既非振铃也非摘机的状态。如果此前为振铃态,则此状态表示振铃已停止,如果此前为摘机态,则此状态表示已挂机。
|
||
UBOX_STATE_RINGING = 2, //振铃态,表示已检测到线路振铃信号,如果振铃停止,则将触发 UBOX_EVENT_RESET 事件,并汇报 UBOX_STATE_RESET 状态。
|
||
UBOX_STATE_HOOK_OFF = 3, //检测到电话机摘机
|
||
UBOX_STATE_HANG = 4, //悬空态,
|
||
UBOX_STATE_IDLE = 5,
|
||
UBOX_STATE_REVERSE_HOOKOFF = 6, //反向摘机,指软件摘机
|
||
UBOX_STATE_POSITIVIE_HOOKOFF = 7, //正向摘机,指软件摘机
|
||
}UBOX_STATE;
|
||
|
||
typedef enum ENUM_UBOX_EVENT
|
||
{
|
||
UBOX_EVENT_DEVICE_PLUG_IN = 1, //检测到设备插入,回调函数中param1、param2、param3、param4未使用,
|
||
//参数如果没有说明,未使用,下同
|
||
UBOX_EVENT_DEVICE_PLUG_OUT = 2, //检测到设备拔出,
|
||
|
||
UBOX_EVENT_ALARM = 3, //报警,param1参照UBOX_ALARM的定义,设备工作不正常,软件退出,检查设备驱动程序是否安装好
|
||
|
||
UBOX_EVENT_LINE_RESET = 10, //复位:摘机->挂机,振铃->停振 硬件LED灭 已经将该事件分为两个挂机和停振事件
|
||
UBOX_EVENT_LINE_RINGING = 11, //振铃,硬件LED亮
|
||
UBOX_EVENT_LINE_HOOK_OFF = 12, //摘机,硬件LED亮
|
||
UBOX_EVENT_LINE_HANG = 13, //检测到线路悬空 ,默认线路电压小于3V,认为线路悬空,硬件LED闪烁
|
||
|
||
//UBOX_EVENT_LING_FLUSH = 14, //?? 需要吗?
|
||
|
||
UBOX_EVENT_RING_CANCEL = 15, //振铃取消,当末次振铃停止超过6秒,则触发此事件,
|
||
|
||
UBOX_EVENT_LINE_VOLTAGE = 16, //线路电压事件,param1是线路电压值,param1不会出现等于0的电压。
|
||
UBOX_EVENT_STREAM_VOICE = 20, //流式录音事件,param1是录音数据地址,需要转换,unsigned char* pvoice= (unsigned char*)param1
|
||
// param2是录音数据长度
|
||
|
||
|
||
UBOX_EVENT_CALLER_ID = 21, //param1是号码地址 param2是时间地址 param3是姓名地址 param4没有用
|
||
//需要类型转换 char* pszcallId =(char*)param1, char* pszcalltime=(char*)param2,
|
||
//char* pszcallname=(char*) param3
|
||
|
||
UBOX_EVENT_DTMF_DOWN = 22, //按键事件,param1是按键键值
|
||
UBOX_EVENT_DTMF_UP = 23,
|
||
UBOX_EVENT_DEVICE_ERROR = 24, //设备错误,需要软件重新启动,不然接收不到主叫号码
|
||
UBOX_EVENT_DEVICE_PLAY_END = 25, //放音完毕
|
||
UBOX_EVENT_DEVICE_PLAY_ERROR = 26, //放音异常
|
||
UBOX_EVENT_DEVICE_BUSY_TONE = 27, //检测到忙音,对方挂机
|
||
UBOX_EVENT_CALLOUTFINISH = 28, //呼出完成,表示拨号结束
|
||
UBOX_EVENT_POLARITY = 29, //检测到极性反转
|
||
UBOX_EVENT_LINE_HOOK_UP = 30, //挂机
|
||
UBOX_EVENT_LINE_RING_STOP = 31, //停振
|
||
}UBOX_EVENT;
|
||
|
||
|
||
typedef enum ENUM_UBOX_ERROR_CODE
|
||
{
|
||
UBOX_ERR_SUCCESS = 0, //操作成功
|
||
|
||
UBOX_ERR_SYSTEM = -1, //系统错误,调用操作系统(windows)的方法时出现错误.
|
||
UBOX_ERR_DEVICE_NOT_FOUND = -2, //没有这个设备,可能设备已经被拔出
|
||
UBOX_ERR_INVALID_HANDLE = -3, //不合法的 UBOX_HANDLE
|
||
UBOX_ERR_INVALID_PARAMETER = -4, //不合法的输入参数
|
||
UBOX_ERR_EXCEPTION = -5, //发生异常
|
||
UBOX_ERR_INVALID_WORK_MODE = -6, //错误的工作模式
|
||
UBOX_ERR_UBOX_NOT_OPEN = -7, //ubox设备尚未打开
|
||
|
||
UBOX_ERR_CANNOT_CREATE_DIR = -10, //未能创建目录,当指定录音时,如果文件名包含目录路径,则ubox将试图建立相应的目录树。
|
||
UBOX_ERR_CANNOT_CREATE_FILE = -11, //未能创建录音文件
|
||
|
||
UBOX_ERR_INVALID_VOICE_CODER = -12, //不支持的语音编码
|
||
|
||
UBOX_ERR_DEVICE_BUSY = -13, //设备忙,当设备已经在录音的时候再次指示其同类型(文件与文件、STREAM与STREAM)的录音,就会返回此错误码
|
||
UBOX_ERR_LINE_NOT_FOUND = -14,
|
||
UBOX_ERR_USING = -15, //不支持该功能,错误使用
|
||
|
||
}UBOX_ERROR_CODE;
|
||
|
||
typedef enum ENUM_UBOX_ALARM
|
||
{
|
||
UBOX_ALARM_CAN_FIND_MIC = 1, //未能找到 ubox 的 MIC 设备
|
||
UBOX_ALARM_CAN_OPEN_MIC = 2, //未能打开 ubox 的 MIC 设备
|
||
UBOX_ALARM_CAN_OPEN_PLAY = 3, //未能打开 ubox 的 放音 设备
|
||
UBOX_ALARM_DEVICE_ERROR = 4, //设备故障
|
||
|
||
|
||
|
||
}UBOX_ALARM;
|
||
|
||
//事件回调函数
|
||
typedef void ( CALLBACK* UBoxEventNotifyProc )(
|
||
UBOX_HANDLE uboxHnd //设备句柄
|
||
, int eventID //事件,参考UBOX_EVENT的定义
|
||
, unsigned long param1 //下面几个参数不同的事件,其含义不同
|
||
, unsigned long param2
|
||
, unsigned long param3
|
||
, unsigned long param4
|
||
);
|
||
|
||
|
||
|
||
/*注意事项:
|
||
|
||
插上USB录音盒硬件会成为系统默认录音设备。硬件版本号3.0以上会修改默认放音设备,软件启动后不能保证修改成系统原来的默认放音
|
||
vista就不能修改。二次开发的软件,在软件帮助中需要告诉用户修改默认录放音频设备。在“控制面板”->“声音、语音和音频设备"->“声音、音频设备属性”
|
||
->"音频",从设备列表中选择默认声音播放和录音设备。
|
||
|
||
*/
|
||
|
||
|
||
//ubox_open:
|
||
//功能:proc 回调函数
|
||
//参数:mode 设置 ubox 的工作模式,通常的方式是录音方式
|
||
//说明:这个函数成功调用并不表示USB设备打开成功,事件UBOX_EVENT_DEVICE_PLUG_IN通知上层程序,设备已插入
|
||
// 收到UBOX_EVENT_ALARM和UBOX_EVENT_DEVICE_ERROR,上层应用程序要对它们处理,否则不能正确工作,参考这个两个事件的说明
|
||
//所有其他函数都必须在 ubox_open() 之后才能使用,
|
||
// 否则,对于返回类型为 int 的函数将返回 UBOX_ERR_SYSTEM,
|
||
// 对于返回类型为 UBOX_HANDLE 的函数将返回 INVALID_UBOX_HANDLE。
|
||
int WINAPI ubox_open(UBoxEventNotifyProc proc, UBOX_WORK_MODE mode);
|
||
typedef int (__stdcall *Mubox_open)(UBoxEventNotifyProc proc, UBOX_WORK_MODE mode);
|
||
|
||
void WINAPI ubox_close(void);
|
||
typedef void (__stdcall *Mubox_close)(void);
|
||
|
||
//ubox_get_work_mode:
|
||
//功能:返回当前工作模式
|
||
//返回:UBOX_WORK_MODE
|
||
|
||
int WINAPI ubox_get_work_mode( void );
|
||
|
||
typedef int (__stdcall *Mubox_get_work_mode)(void);
|
||
|
||
|
||
//ubox_check_coder:
|
||
//功能:检查指定的语音编码是否合法
|
||
//返回:0 语音编码是合法的,
|
||
// UBOX_ERR_INVALID_VOICE_CODER 语音编码不合法
|
||
//说明:此函数可工作在任何模式。
|
||
|
||
int WINAPI ubox_check_coder( int coder );
|
||
|
||
|
||
//ubox_get_line_state:
|
||
//功能:
|
||
//说明:此函数必需在 UBOX_MODE_RECORD 和 UBOX_MODE_DIAG 模式下使用,否则返回 UBOX_ERR_INVALID_WORK_MODE。
|
||
|
||
int WINAPI ubox_get_line_state( UBOX_HANDLE uboxHnd);
|
||
|
||
|
||
//ubox_record_file:
|
||
//功能:
|
||
//说明:此函数必需在 UBOX_MODE_RECORD 和 UBOX_MODE_DIAG 模式下使用,否则返回 UBOX_ERR_INVALID_WORK_MODE。
|
||
//第三个参数参考VOICE_CODER
|
||
int WINAPI ubox_record_file(UBOX_HANDLE uboxHnd, const char* filename, int coder );
|
||
typedef int (__stdcall *Mubox_record_file)(UBOX_HANDLE uboxHnd, const char* filename, int coder);
|
||
|
||
//ubox_record_stream:
|
||
//功能: 开始流式录音,第三个参数参考VOICE_CODER,语音数据以UBOX_EVENT_STREAM_VOICE事件通知
|
||
//说明:此函数必需在 UBOX_MODE_RECORD 和 UBOX_MODE_DIAG 模式下使用,否则返回 UBOX_ERR_INVALID_WORK_MODE。
|
||
int WINAPI ubox_record_stream(UBOX_HANDLE uboxHnd, int coder );
|
||
typedef int (__stdcall *Mubox_record_stream)(UBOX_HANDLE uboxHnd, int coder );
|
||
|
||
//ubox_stop_record:
|
||
//功能:停止文件和流式录音
|
||
//说明:此函数必需在 UBOX_MODE_RECORD 和 UBOX_MODE_DIAG 模式下使用,否则返回 UBOX_ERR_INVALID_WORK_MODE。
|
||
int WINAPI ubox_stop_record(UBOX_HANDLE uboxHnd);
|
||
typedef int (__stdcall *Mubox_stop_record)(UBOX_HANDLE uboxHnd);
|
||
|
||
|
||
//注意:停止使用
|
||
//ubox_set_volume:
|
||
//功能:设置音量,设置音量为0db就可以了,
|
||
//说明:volume取值范围0-19db
|
||
int WINAPI ubox_set_volume(UBOX_HANDLE uboxHnd,int volume );
|
||
|
||
|
||
//注意:停止使用
|
||
//ubox_set_volume:
|
||
//功能:设置放音音量
|
||
//说明:volume取值范围-12db-6db
|
||
int WINAPI ubox_set_Speakervolume(UBOX_HANDLE uboxHnd, int volume );
|
||
|
||
|
||
//ubox_get_hang_threshold:
|
||
//功能:读取悬空门限值
|
||
//说明:此函数必需在 UBOX_MODE_CONFIG 模式下使用,否则返回 UBOX_ERR_INVALID_WORK_MODE。
|
||
int WINAPI ubox_get_hang_threshold(UBOX_HANDLE uboxHnd );
|
||
|
||
|
||
|
||
//ubox_set_hang_threshold:
|
||
//功能:设置悬空门限值,参考ubox_set_hookoff_threshold中的说明
|
||
|
||
int WINAPI ubox_set_hang_threshold(UBOX_HANDLE uboxHnd, int threshold );
|
||
|
||
|
||
|
||
//ubox_get_hookoff_threshold:
|
||
//功能:读取摘机门限值
|
||
//说明:此函数必需在 UBOX_MODE_CONFIG 模式下使用,否则返回 UBOX_ERR_INVALID_WORK_MODE。
|
||
int WINAPI ubox_get_hookoff_threshold(UBOX_HANDLE uboxHnd);
|
||
|
||
|
||
|
||
//ubox_set_hookoff_threshold:
|
||
//功能:设置摘机门限值,threshold的值是稳定摘机电压和挂机电压的之和的一半,摘机电压和挂机电压测量调用ubox_start_read_line_voltage
|
||
//和ubox_stop_read_line_voltage,参考这个两个函数的用法.
|
||
|
||
int WINAPI ubox_set_hookoff_threshold(UBOX_HANDLE uboxHnd, int threshold );
|
||
|
||
|
||
|
||
|
||
/*硬件是通过压控方式检测电话状态,通常情况下,挂机线路直流电压48V左右,摘机线路直流电压会降到6V左右。USB录音盒设置默认摘机门限值为18V,
|
||
当线路电压大于18V,软件判断为挂机状态,小于18V软件判断为摘机状态。由于电话线的所处的环境不同,线路直流电压值不同,可能摘机线路电压要
|
||
大于摘机门限值,或者挂机电压小于摘机门限值,这样软件不能正确检测到电话状态,需要重新设置摘机门限值*/
|
||
//功能:开始检测线路电压,每隔200ms送上UBOX_EVENT_LINE_VOLTAGE事件通知,回调函数中param1就是线路电压值,剩下的参数没有用
|
||
// 线路电压有一定波动,必须测量一段时间,取平均值,必须调用结束检测线路电压函数
|
||
// 成功返回UBOX_ERR_SUCCESS,错误返回为非0
|
||
int WINAPI ubox_start_read_line_voltage(UBOX_HANDLE uboxHnd);
|
||
|
||
|
||
//功能:结束检测线路电压,成功返回UBOX_ERR_SUCCESS,错误返回为非0
|
||
int WINAPI ubox_stop_read_line_voltage(UBOX_HANDLE uboxHnd);
|
||
|
||
//功能:在设备打开后,才可以获取硬件的版本号,成功返回UBOX_ERR_SUCCESS,错误返回为非0 version_num由整数部分和1位小数部分组成,
|
||
//整数部分是主版本号,小数部分是次版本号
|
||
//参数说明:第一个参数是设备句柄,第二个参数是获取版本号,假如你的设备句柄是2,定义float versionnum,调用ubox_get_device_versionnum(2,versionnum)
|
||
int WINAPI ubox_get_device_versionnum(UBOX_HANDLE uboxHnd,float &version_num);
|
||
|
||
|
||
//功能:在设备打开后,手动摘电话机,上层应用软件自动拨号,成功返回UBOX_ERR_SUCCESS,错误返回为非0,硬件版本号小于3.0不支持拨号功能
|
||
//参数说明:第一个参数是设备句柄,第二个参数是拨号的号码,假如你的设备句柄是2,要拨打10000,调用ubox_send_dtmf(2,"10000")
|
||
|
||
int WINAPI ubox_send_dtmf(UBOX_HANDLE uboxHnd,const char* dmftfstring);
|
||
typedef int (__stdcall *Mubox_send_dtmf)(UBOX_HANDLE uboxHnd,const char* dmftfstring);
|
||
|
||
|
||
|
||
|
||
//功能:在设备打开后,播放语音文件,该PC具有音频文件的解码器都能播放。成功返回UBOX_ERR_SUCCESS,错误返回为非0
|
||
//注意:一边播放文件,会影响录音的效果。放音通道是单声道,硬件版本号小于3.0不支持放音功能
|
||
int WINAPI ubox_play_file(UBOX_HANDLE uboxHnd,const char* filename);
|
||
|
||
//功能:在设备打开后,停止播放,成功返回UBOX_ERR_SUCCESS,错误返回-1
|
||
int WINAPI ubox_stop_play(UBOX_HANDLE uboxHnd);
|
||
|
||
//功能:在设备打开后,正在播放,调用这个函数暂停,再调用一次,又继续播放,成功返回UBOX_ERR_SUCCESS,错误返回为非0
|
||
int WINAPI ubox_play_pause(UBOX_HANDLE uboxHnd);
|
||
|
||
|
||
//功能:在设备成功打开后,打开和关闭AGC,第二参数为true,关闭agc,为false时,打开agc,默认情况下是打开agc.成功返回UBOX_ERR_SUCCESS,错误返回为非0
|
||
int WINAPI ubox_close_agc(UBOX_HANDLE uboxHnd,bool bclose);
|
||
|
||
|
||
//功能:在设备成功打开后,此函数必需在 UBOX_MODE_CONFIG 模式下使用,读取eeprom区域的数据,成功返回UBOX_ERR_SUCCESS,错误返回为非0,
|
||
//最后三个参数输入不正确,返回UBOX_ERR_INVALID_PARAMETER
|
||
//addr地址范围为0x00-0x07,必须在这个范围内,读取数据最大长度为8个字节,第三个参数为读取数据的地址
|
||
//用法:假如uboxHnd=1,addr=0x00,unsigned char readdata[8]
|
||
//ubox_read_eeprom(1,0x00,&readata[0],8),调用成功后,读取的数据在readdata中
|
||
int WINAPI ubox_read_eeprom(UBOX_HANDLE uboxHnd,unsigned char addr,unsigned char* outdata,int len);
|
||
|
||
//功能:在设备成功打开后,此函数可在任何模式下使用,写入eeprom区域的数据,成功返回UBOX_ERR_SUCCESS,错误返回为非0,
|
||
//最后三个参数输入不正确,返回UBOX_ERR_INVALID_PARAMETER
|
||
//addr地址范围为0x00-0x08,必须在这个范围内,写入数据最大长度为8个字节,第三个参数为写入数据的地址
|
||
//用法:假如uboxHnd=1,addr=0x00,unsigned char writedata[8] ={0x01,0x20,0x30,0x31,0x32,0x33,0x40,0x70}
|
||
//ubox_write_eeprom(1,0x00,&writedata[0],8),可以在同一个地址区域调用ubox_read_eeprom验证,读取的数据和写入数据是否相等
|
||
int WINAPI ubox_write_eeprom(UBOX_HANDLE uboxHnd,unsigned char addr,unsigned char* indata,int len);
|
||
|
||
|
||
//功能:在设备成功打开后,此函数可在任何模式下使用,读取eeprom区域的数据,成功返回UBOX_ERR_SUCCESS,错误返回为非0,
|
||
//最后三个参数输入不正确,返回UBOX_ERR_INVALID_PARAMETER
|
||
//addr地址范围为0x00-0x08,必须在这个范围内,读取数据最大长度为8个字节,并且addr+len不要大于8,第三个参数为读取数据的地址
|
||
//用法:假如uboxHnd=1,addr=0x00,unsigned char readdata[8]
|
||
//ubox_read_eeprom(1,0x00,&readata[0],8),调用成功后,读取的数据在readdata中
|
||
//注意调用ubox_write_eeprom写成功后,读取其正确值,必须在软件重新启动后,调用ubox_read_eepromEx才能正确读取上次修改的值。
|
||
|
||
int WINAPI ubox_read_eepromEx(UBOX_HANDLE uboxHnd,unsigned char addr,unsigned char* outdata,int len);
|
||
|
||
|
||
//功能:在设备成功打开后,软件摘机,成功返回UBOX_ERR_SUCCESS,错误返回为非0
|
||
//注意:必须在硬件版本3.0以上才支持
|
||
int WINAPI ubox_soft_hook_off(UBOX_HANDLE uboxHnd);
|
||
|
||
//功能:在设备成功打开后,软件挂机,成功返回UBOX_ERR_SUCCESS,错误返回为非0
|
||
//注意:必须在硬件版本3.0以上才支持
|
||
int WINAPI ubox_soft_hook_on(UBOX_HANDLE uboxHnd);
|
||
|
||
////功能:在设备成功打开后,此函数读取用户号,成功返回用户号长度,错误返回为小于0的数,
|
||
//用户号的长度是8个字节,所以 参数len不小于8, user-num可用地址空间不能小于8个字节。
|
||
|
||
// 如果需要用户号请联系我公司
|
||
int WINAPI ubox_get_usernum(UBOX_HANDLE uboxHnd,unsigned char* user_num,int len);
|
||
|
||
|
||
//功能:在设备成功打开后,如果忙音收不到,才需要设置该参数,此函数设置忙音参数,成功返回UBOX_ERR_SUCCESS,错误返回为非0,
|
||
|
||
int WINAPI ubox_set_busy_tone(UBOX_HANDLE uboxHnd,const tagBusyInfo busyinfo);
|
||
|
||
//功能: 在设备成功打开后,获取设备名字
|
||
//返回值是设备名字的长度,设备名字为Fi3001B 是1路高阻录音 设备名字为Fi3002B 是2路高阻录音 设备名字为Fi3102A 是两路外线 设备名字为Fi3101A 是1路带耳麦
|
||
int WINAPI ubox_get_product_name(UBOX_HANDLE uboxHnd, char* product_name);
|
||
|
||
//功能:在设备成功打开后,此函数设置留言模式参数,bset=true 打开留言参数,bset=false 关闭留言参数,成功返回UBOX_ERR_SUCCESS,错误返回为非0,
|
||
//注意:需要设置留言模式下才需要打开留言参数。
|
||
//要退出留言模式,必须关闭留言参数,否则麦克风不能用
|
||
int WINAPI ubox_set_message_param(UBOX_HANDLE uboxHnd,bool bset);
|
||
|
||
|
||
|
||
//功能:在设备成功打开后,此函数用于是否打开蜂鸣器,bset=true 蜂鸣器,bset=false 关闭蜂鸣器,成功返回UBOX_ERR_SUCCESS,错误返回为非0,
|
||
//注意:默认是关闭蜂鸣器。其作用只接耳麦时,来电时提示用户,如果蜂鸣器已打开,振铃时蜂鸣器会响。
|
||
|
||
int WINAPI ubox_open_buzzer_switch(UBOX_HANDLE uboxHnd,bool bset);
|
||
|
||
//获取产品ID号,返回值就是产品ID,对应的值如下:
|
||
|
||
// 1 FI3102A 2路USB 外线
|
||
// 2 FI3002B 2路USB录音盒
|
||
// 3 FI3001B 1路USB录音盒
|
||
// 4 FI3101A 带耳麦的USB语音盒(1外1内)
|
||
|
||
int WINAPI ubox_get_product_ID(UBOX_HANDLE uboxHnd);
|
||
|
||
//打开日志文件,该函数可以在调用ubox_open之前调用
|
||
//level=0, 显示所有日志信息
|
||
//level =1, 显示错误和警告信息显示
|
||
void WINAPI ubox_open_logfile(long level);
|
||
|
||
//关闭日志文件
|
||
void WINAPI ubox_close_logfile();
|
||
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#ifdef __cplusplus
|
||
|
||
|
||
class ubox_state_formator
|
||
{
|
||
int state_code_;
|
||
|
||
ubox_state_formator();
|
||
|
||
public:
|
||
ubox_state_formator( int code ):state_code_(code){;}
|
||
ubox_state_formator( const ubox_state_formator& rhs):state_code_(rhs.state_code_){;}
|
||
ubox_state_formator& operator = ( const ubox_state_formator& rhs)
|
||
{
|
||
state_code_ = rhs.state_code_;
|
||
return *this;
|
||
}
|
||
|
||
|
||
friend std::ostream & operator << (std::ostream& os ,const ubox_state_formator& me )
|
||
{
|
||
switch( me.state_code_ )
|
||
{
|
||
case UBOX_STATE_PLUG_OUT:
|
||
os << "状态=" << me.state_code_ << " : 空设备";
|
||
break;
|
||
case UBOX_STATE_RESET:
|
||
os << "状态=" << me.state_code_ << " : 复位";
|
||
break;
|
||
case UBOX_STATE_RINGING:
|
||
os << "状态=" << me.state_code_ << " : 振铃";
|
||
break;
|
||
case UBOX_STATE_HOOK_OFF:
|
||
os << "状态=" << me.state_code_ << " : 摘机";
|
||
break;
|
||
case UBOX_STATE_HANG:
|
||
os << "状态=" << me.state_code_ << " : 悬空";
|
||
break;
|
||
|
||
case UBOX_STATE_REVERSE_HOOKOFF:
|
||
os << "状态=" << me.state_code_ << " : 反向摘机";
|
||
break;
|
||
case UBOX_STATE_POSITIVIE_HOOKOFF:
|
||
os << "状态=" << me.state_code_ << " : 正向摘机";
|
||
break;
|
||
|
||
/* case UBOX_STATE_TELEPHONE_HOOKON:
|
||
os << "状态=" << me.state_code_ << " : 电话机挂机";
|
||
break;*/
|
||
default:
|
||
os << "状态=" << me.state_code_ << " : 未定义";
|
||
break;
|
||
}
|
||
return os;
|
||
}
|
||
};
|
||
|
||
|
||
class ubox_event_formator
|
||
{
|
||
int event_code_;
|
||
|
||
ubox_event_formator();
|
||
|
||
public:
|
||
ubox_event_formator( int code ):event_code_(code){;}
|
||
ubox_event_formator( const ubox_event_formator& rhs):event_code_(rhs.event_code_){;}
|
||
ubox_event_formator& operator = ( const ubox_event_formator& rhs)
|
||
{
|
||
event_code_ = rhs.event_code_;
|
||
return *this;
|
||
}
|
||
|
||
friend std::ostream & operator << (std::ostream& os ,const ubox_event_formator& me )
|
||
{
|
||
switch( me.event_code_ )
|
||
{
|
||
case UBOX_EVENT_DEVICE_PLUG_IN:
|
||
os << "事件=" << me.event_code_ << " : 设备插入";
|
||
break;
|
||
case UBOX_EVENT_DEVICE_PLUG_OUT:
|
||
os << "事件=" << me.event_code_ << " : 设备拔出";
|
||
break;
|
||
|
||
case UBOX_EVENT_LINE_RESET:
|
||
os << "事件=" << me.event_code_ << " : 线路复位";
|
||
break;
|
||
|
||
case UBOX_EVENT_LINE_RINGING:
|
||
os << "事件=" << me.event_code_ << " : 线路振铃";
|
||
break;
|
||
|
||
case UBOX_EVENT_LINE_HOOK_OFF:
|
||
os << "事件=" << me.event_code_ << " : 线路摘机";
|
||
break;
|
||
|
||
case UBOX_EVENT_LINE_HANG://检测到线路悬空
|
||
os << "事件=" << me.event_code_ << " : 线路悬空";
|
||
break;
|
||
|
||
|
||
case UBOX_EVENT_STREAM_VOICE:
|
||
os << "事件=" << me.event_code_ << " : 实时语音";
|
||
break;
|
||
|
||
|
||
case UBOX_EVENT_CALLER_ID:
|
||
os << "事件=" << me.event_code_ << " : 来电号码";
|
||
break;
|
||
|
||
case UBOX_EVENT_DTMF_DOWN:
|
||
os << "事件=" << me.event_code_ << " : DTMF按下";
|
||
break;
|
||
|
||
case UBOX_EVENT_DTMF_UP:
|
||
os << "事件=" << me.event_code_ << " : DTMF释放";
|
||
break;
|
||
|
||
case UBOX_EVENT_ALARM:
|
||
os << "事件=" << me.event_code_ << " : 警报通知";
|
||
break;
|
||
|
||
case UBOX_EVENT_RING_CANCEL:
|
||
os << "事件=" << me.event_code_ << " : 振铃取消";
|
||
break;
|
||
|
||
default:
|
||
os << "事件=" << me.event_code_ << " : 未定义的事件码";
|
||
break;
|
||
}
|
||
return os;
|
||
}
|
||
};
|
||
|
||
class ubox_err
|
||
{
|
||
int err_code_;
|
||
public:
|
||
ubox_err(int code):err_code_(code){;}
|
||
|
||
friend std::ostream & operator << (std::ostream& os ,const ubox_err& me )
|
||
{
|
||
switch( me.err_code_ )
|
||
{
|
||
case UBOX_ERR_SUCCESS:
|
||
os << "错误码=" << me.err_code_ << " : 操作成功";
|
||
break;
|
||
case UBOX_ERR_SYSTEM:
|
||
os << "错误码=" << me.err_code_ << " : 系统错误";
|
||
break;
|
||
case UBOX_ERR_DEVICE_NOT_FOUND:
|
||
os << "错误码=" << me.err_code_ << " : 无此设备";
|
||
break;
|
||
case UBOX_ERR_INVALID_HANDLE:
|
||
os << "错误码=" << me.err_code_ << " : 非法的 UBOX_HANDLE";
|
||
break;
|
||
case UBOX_ERR_INVALID_PARAMETER:
|
||
os << "错误码=" << me.err_code_ << " : 非法参数";
|
||
break;
|
||
case UBOX_ERR_CANNOT_CREATE_DIR:
|
||
os << "错误码=" << me.err_code_ << " : 未能创建目录";
|
||
break;
|
||
case UBOX_ERR_CANNOT_CREATE_FILE:
|
||
os << "错误码=" << me.err_code_ << " : 未能创建录音文件";
|
||
break;
|
||
case UBOX_ERR_INVALID_VOICE_CODER:
|
||
os << "错误码=" << me.err_code_ << " : 不支持的语音编码";
|
||
break;
|
||
case UBOX_ERR_INVALID_WORK_MODE:
|
||
os << "错误码=" << me.err_code_ << " : 错误的工作模式";
|
||
break;
|
||
case UBOX_ERR_EXCEPTION:
|
||
os << "错误码=" << me.err_code_ << " : 发生异常";
|
||
break;
|
||
case UBOX_ERR_DEVICE_BUSY:
|
||
os << "错误码=" << me.err_code_ << " : 设备忙";
|
||
break;
|
||
case UBOX_ERR_UBOX_NOT_OPEN:
|
||
os << "错误码=" << me.err_code_ << " : ubox设备尚未打开";
|
||
break;
|
||
|
||
|
||
default:
|
||
os << "错误码=" << me.err_code_ << " : 未定义的错误码";
|
||
break;
|
||
}
|
||
return os;
|
||
}
|
||
};
|
||
|
||
/*
|
||
ubox_err 使用范例:
|
||
|
||
int result = ubox_record_stream(uboxHnd, coder );
|
||
if( result != UBOX_ERR_SUCCESS )
|
||
{
|
||
std::cout << "ubox_record_stream(, " << coder << " ) faild! "
|
||
<< ubox_err(result)
|
||
<< std::endl;
|
||
}
|
||
*/
|
||
|
||
#endif //__cplusplus
|
||
|
||
#endif//__PHONIC_UBOX_INCLUDE__
|