**:
分析閱讀的是s3c6410 wince6.0的攝像頭驅動,s5pv210雖然也是6.0,但結構大不相同,暫且不提。
根據msdn,應用層呼叫攝像頭驅動初始化時序如下:1)呼叫cam_init和cam_open。2)dshow呼叫findfirstdevice得到裝置名,呼叫createfile開啟。3)dshow用csproperty_pin_ctypes 得到驅動支援的pin的數量,用csproperty_pin_category得到每個pin的種類,用csproperty_pin_devicename得到pin的名字(通常是pin1:)。4)dshow呼叫createfile開啟pin驅動,初始化stream,設定它的properties, data format,並為它分配buffer。5)例項化stream,設定它的種類,並新增乙個queue,用於在驅動和dshow間非同步傳遞資料。
本文以pin_iocontrol中的動作來分析攝像頭驅動,主要關注preview動作相關的部分,buffer分配以csproperty_buffer_client_limited為例(這也是本人開發環境下實際採用的方式)。
pin_iocontrol中的各種命令碼可以簡單歸結為如下框圖。除pin_iocontrol外,每個橙色方框中的子命令由cpindevice類實現,函式名標於方框中。
具體的iocontrol配置步驟和分析思路採用感激不盡~),各步驟呼叫時序如下所述。
0. cam_init中初始化cam,逐層呼叫到在s3c6410_camera.cpp的camerainit()可以看到,其中將各暫存器的物理位址對映成虛擬位址,初始化外設模組,設定gpio,時鐘,設定dma buffer的物理和虛擬位址,初始化中斷。
1.例項化各種pin介面
3.初始化sensor狀態,包括camera時鐘、gpio、復位等設定,之後設定capture的狀態為pause。可以看出這步需要和camera外設互動,正確設定外設的暫存器數值,使其正常工作。
4.管理pin的buffer,本環境中由使用者層分配
5.設定still和capture的pin為pause狀態。
6.設定preview的pin為run狀態。
7.新增buffer到驅動的佇列中。cs_enqueue時,在cpindevice的enqueuedescriptor()裡,把應用層傳過來的buffer marshall到pindevice的m_pstreamdescriptorlist裡。
8.中斷處理。在幀同步的中斷中,從buffer中copy image,加入queue中。
攝像頭驅動的工作流程大致如上。
WinCE6 0驅動移植
裝置管理器 裝置管理 在private winceos coreos device 目錄.看看裝置管理器的入口點devmain.c.在wince5.0時代,裝置管理器是作為乙個程序來實現的 devece.exe.所以裡面就是乙個入口函式winmain 呼叫startdevicemanager 函式....
DirectShow驅動攝像頭
對於小攝像頭的驅動有幾種方法,通過使用directshow來驅動攝像頭靈活性比較好,有簡單的方法也有比較複雜但更有效的方法,本文只介紹簡單方法,希望與大家交流!用directshow來使用攝像頭,一般要求攝像頭的驅動是wdm格式的,當然,一些比較老的驅動格式directshow也可支援。direct...
wince6 0編譯命令分析
下面從csdn幫助文件簡要說明vs2005下面的系統編譯命令,這些命令位於build advanced build commonds 一共有六條命令,分別是 1.sysgen 2.clean sysgen 3.build and sysgen 4.rebuild and clean sysgen 5...