由於聲音的調整經常需要不斷的調整與測試,如果在整機的狀態下,又不能跳線,那從修改參數,compile code,build image以及download image,光是修改一次參數的時間可能就要光掉5分鐘的時間了,效率上蠻差的!
##CONTINUE##
在Roland的建議以及幫助下,為了改參數能更快更方便,同時,希望能在讓客戶自行調整參數又不需要更動到driver的情形下,把參數的設定值儲存到一個文字檔上,再由driver來讀檔以及設定值!
1.
因為在此案中,Audio Path共有6種,所以必須準備6個檔分別對應至這6種情形,然後在Windows CE的 Registry下加入6個參數,儲存這四個檔的放置位置與檔名 :在Platform.reg中加入6個參數
[HKEY_LOCAL_MACHINE\SOFTWARE]
"File1"="\\Windows\\Bypass1.txt"
"File2"="\\Windows\\Bypass2.txt"
"File3"="\\Windows\\Bypass3.txt"
"File4"="\\Windows\\Bypass4.txt"
"File5"="\\Windows\\pcm01.txt"
"File6"="\\Windows\\pcm02.txt"
2.
在driver裡加入讀取Registry值與讀取檔案內值的function:傳入要讀取Registry的值並讀取相對應的檔案,再透過UART將值傳送至XX1182中。
int XX1182Write(HKEY key, TCHAR *subkey, TCHAR *name, HANDLE hComPort)
{
HKEY hkey;
LONG lResult;
TCHAR str[MAX_PATH], *pStr;
DWORD dwType, dwSize;
FILE *file;
unsigned char pData[7];
int i, nResult;
if (RegOpenKeyEx(key, subkey, 0, KEY_QUERY_VALUE, &hkey) != ERROR_SUCCESS)
return 0;
dwSize = sizeof(str);
lResult = RegQueryValueEx(hkey, name, NULL, &dwType, (LPBYTE)str, &dwSize); //query registry value
RegCloseKey(hkey);
if (lResult != ERROR_SUCCESS || dwType != REG_SZ)
return 0;
file = _tfopen(str, _T("rt"));
if (file == NULL) //open file failed
return 0;
nResult = 0;
while (_fgetts(str, MAX_PATH, file))
{
pStr = _tcsstr(str, _T("//"));
if (pStr) //there is comment
*pStr = _T('\0'); //remove comment
pStr = str;
for (i = 0; i < pstr =" _tcsstr(pStr,">= _T('0') && *pStr <= _T('9')) pData[i] = (pData[i] <<>= _T('A') && *pStr <= _T('F')) pData[i] = (pData[i] <<>= _T('a') && *pStr <= _T('f')) pData[i] = (pData[i] << i ="="">misc.iEchoStatus == 0)
{
nLine = XX1182Write(HKEY_LOCAL_MACHINE, _T("SOFTWARE"), _T("File1"), hFile);
CloseHandle(hFile);
}
else if(v_pDriverGlobals->misc.iEchoStatus == 1)
{
nLine = XX1182Write(HKEY_LOCAL_MACHINE, _T("SOFTWARE"), _T("File2"), hFile);
CloseHandle(hFile);
}
else if(v_pDriverGlobals->misc.iEchoStatus == 2)
{
nLine = XX1182Write(HKEY_LOCAL_MACHINE, _T("SOFTWARE"), _T("File3"), hFile);
CloseHandle(hFile);
}
else
{
nLine = XX1182Write(HKEY_LOCAL_MACHINE, _T("SOFTWARE"), _T("File4"), hFile);
CloseHandle(hFile);
}
break;
case IOCTL_FME_PCM_MESSAGE:
//PCM spk -> out2 echo cancellation on
nLine = XX1182Write(HKEY_LOCAL_MACHINE, _T("SOFTWARE"), _T("File6"), hFile);
CloseHandle(hFile);
break;
case IOCTL_FME_PCM_MESSAGE2:
//PCM spk -> out2 echo cancellation on
nLine = XX1182Write(HKEY_LOCAL_MACHINE, _T("SOFTWARE"), _T("File5"), hFile);
CloseHandle(hFile);
break;
藉由此方式,確實可讓調整參數更快也更方便,可直接在Windows CE直接更改相對應的文字檔來調整,driver的不份則不需再更動,不過,缺點則是執行時間會變長。
2007年4月2日
讓調整參數更方便
張貼者:
Joseph
於
09:19
標籤: Audio, WinCE Driver