[英]How make use of the Voice API to make calls using Huawei 3g Modems?
一些像我这样的华为3g调制解调器(E1752)具有拨打和接听电话的能力。 我相信板载有可以在拨打或接听电话时使用的PCM频道,但我没有更多相关信息。
我正在使用他们的应用程序称为移动合作伙伴,这是一个相当完整的应用程序,支持拨打和接听电话 但我想构建我自己的应用程序,它将在Mac OS X上运行。但我无法找到任何详细说明Voice API和板载PCM通道的文档。 如果有人知道这一点,请告诉我。
谢谢Harryd
语音实现如下: - 您的调制解调器共注册5个设备。音频通过名为“华为移动连接 - 应用程序接口”的串口发送。
语音(输入)数据的格式:
wFormatTag = WAVE_FORMAT_PCM;
nChannels = 1;
nSamplesPerSec = 8000;
nAvgBytesPerSec = 16000;
nBlockAlign = 2;
wBitsPerSample = 16;
cbSize = 0;
ReadFile或WriteFile操作(对于COM端口)中的语音数据块大小必须设置为320字节。 在每个ReadFile之后必须进行WriteFile操作(在其他选择缓冲区中将溢出并且调制解调器将在一段时间后重新启动)。 样品:
// BlockSize - size of buff for wave in|out operations (in my case 320*4 bytes)
while (!bAllRead) {
if (cInfo->hCom == INVALID_HANDLE_VALUE) {
SetVoiceClosed(cInfo);//exit from thread
return 0;
}
BOOL isRead = ReadFile(cInfo->hCom, cInfo->Header[counter].lpData + currBlocLength, 320, &nActualRead, &cInfo->o);
if (isRead || (GetLastError() == ERROR_IO_PENDING && GetOverlappedResult(cInfo->hCom, &cInfo->o, &nActualRead, TRUE))) {
if (nActualRead > 0) {
// обратка
nActualWrite = 0;
int nActualWriteAll = 0;
BOOL isWrite = WriteFile(cInfo->hCom, CurrBuffPtr + currBlocLength, nActualRead, &nActualWrite, &cInfo->oVoiceOut);
while (isWrite || (GetLastError() == ERROR_IO_PENDING && GetOverlappedResult(cInfo->hCom, &cInfo->oVoiceOut, &nActualWrite, TRUE))) {
nActualWriteAll += nActualWrite;
if (nActualWriteAll >= nActualRead)
break;
}
currBlocLength += nActualRead;
if (currBlocLength >= BlockSize)
bAllRead = true;
}
else {
Sleep(25);// wait for voice data (resync)
PurgeComm(cInfo->hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
}
}
else {
bAllRead = true;// there are no active call
PurgeComm(cInfo->hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
}
}
像那样)))。 我没有在互联网上找到任何有用的信息,所以所有建议都基于我的实验。 我希望这很有用。
PS:我希望波浪进出操作对你来说不是问题。
PS2:对不起我的英语,我来自乌克兰。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.