2010年7月27日 星期二

Run Control Panel .cpl in command prompt

在WINCE下面,有 touchpanel 的control panel .cpl
因為不想重新 make image。
所以試著直接copy .cpl檔案 到機器上 run。

在Windows 底下, run control.exe 或 rundll32.exe shell32.dll,Control_RunDLL hdwwiz.cpl
control   --- 會叫出control panel window
control hdwwiz.cpl  會叫出相對應的control panel。

...而在WINCE 5 下面,打 control xxx.cpl 並不會呼叫相對應的 control panel,
只會叫出 control panel的 window。
還有有些 .cpl可以直接  double click 執行,有些不行。
還有 WINCE 底下沒有 rundll32.exe ....

DEBUGZONE

善用DEBUGZONE是很重要的
這樣程式的DEBUG輸出才會條理不容易亂
不過常常忘記DEBUGZONE 的用法
現在把它整理後寫在這邊


1.  Define DEBUGZONE



#define ZONE_INIT   DEBUGZONE(0)
#define ZONE_TEST   DEBUGZONE(1)
....


2. 定義 dpCurSettings

如以下


#ifdef DEBUG
DBGPARAM dpCurSettings = {
    TEXT("USBPRN"), {
    TEXT("Errors"),    TEXT("Warnings"),  TEXT("Init"),        TEXT("Trace"),
    TEXT("LPT_INIT"),  TEXT("LPT_READ"),  TEXT("LPT_WRITE"),   TEXT("LPT_IOCTL"),
    TEXT("USB_PARSE"), TEXT("USB_INIT"),  TEXT("USB_CONTROL"), TEXT("USB_BULK"),
    TEXT("Undefined"), TEXT("Undefined"), TEXT("Undefined"),   TEXT("USBCLIENT")
    },
     0x0003 // ZONE_WRN|ZONE_ERR
};
#endif  // DEBUG


DBGPARAM 的第三個參數 zonemask 決定哪個DEBUG MSG打開

3. 使用 DEBUGREGISTER macro
在程式進入點的地方 call DEBUGREGISTER



BOOL
DllEntry(
   HANDLE hDllHandle,
   DWORD  dwReason,
   LPVOID lpreserved
   )
{
    UNREFERENCED_PARAMETER(hDllHandle);
    UNREFERENCED_PARAMETER(lpreserved);
    switch (dwReason) {

      case DLL_PROCESS_ATTACH:
           DEBUGREGISTER((HINSTANCE)hDllHandle);
  DisableThreadLibraryCalls((HMODULE) hDllHandle);
           break;

      case DLL_PROCESS_DETACH:
           break;

      default:
        break;
    }
    return TRUE;
}

一般程式(非DLL)的話,使用DEBUGREGISTER(NULL);

DEBUGREGISTER 只有在 DEBUG BUILD 中才有定義
而 RETAILREGISTERZONES 用在DEBUG 及 RETAIL BUILD 中

4. 完成

2010年7月23日 星期五

USB 研究

正在研究走 USB 還是走 SPDIF Optical 的音質哪一個比較好的時候
找到以下的網頁
http://msdn.microsoft.com/en-us/library/ff540194(VS.85).aspx

關於SPDIF Wikipedia 已經有詳細的說明
就我目前的了解
SPDIF 發送端的品質影響很大。因為接收端不能控制Data Rate。
高等的 Amplifier 可能會有特別的處理,如 clock lock, jitter free。


相對的,USB方面可能有兩種傳送方式。
第一種最常用的就是走 Isochronous Transfer。
這個可能會有問題,跟SPDIF比也不知道誰好誰壞。go
就我使用Digital Music SX的經驗,聽音樂時,再使用其它USB裝置如隨身碟傳大檔案,
有時會破音。(也或許是 creative 的driver沒有寫好)

第二種就是把Audio Stream 當成data 來傳,這樣就有 error correction 及 data resend。
好像 emu0404 是採用此種方式。

看了上面那篇文章,USB Protocol 對bandwidth allocation好像是 first-come first-serve
如此看來 USB Isoch Transfer 如果用得好的話,應該會比SPDIF好?
http://www.my-hiend.com/vbb/showthread.php?t=1965

http://forum.audiogon.com/cgi-bin/fr.pl?ddgtl&1179056058&openflup&5

請再search asynchronous USB

Ayre QB-9 vs Lavry DA11