2015年9月11日 星期五

Disable USB driver dialog

在 WINCE 6.0 2010 March 的 Update 中 ( usbddrv.cpp )
增加了關掉提示 載入driver 的功能


只要在 registry 設定


[HKEY_LOCAL_MACHINE\Drivers\USB\LoadClients]

"DoNotPromptUser"=dword:0
The default value is 0. Set it to 1 to disable the dialogs.

就可以了


還有 2010 March Update 解決了許多的 USB Issue
請看 http://support.microsoft.com/?scid=kb;en-us;980435&x=-486&y=-101


Note: 在WINCE 5.0 要自己修改 usbddrv.cpp
此 usbddrv.cpp 屬於 usbd
呼叫 dialog 的函式為 GetClientDriverName()

HcdDeviceAttached() -> LoadDeviceDrivers() failed -> GetClientDriverName() -> InstallClientDriver()

2014年4月9日 星期三

USB hub problem 及研究

最近遇到一個問題,就是Genesys Logic 的GL852G Hub IC 無法在Au1200 board 下 run high speed.
Initial (插拔或重開機) 有時是High speed, 大部份時間是 full speed.

但其較差的兄弟 GL850G 則無此問題

為此 研究了 USB driver code ( HCD 部份) 目前還是沒有頭緒,不過卻更深入地了解了
WINCE 下 USB Driver 的架構。

參考資料

Search USB EHCI, USB giisr.dll, usb enumeration, hcdattach ....
http://www.cctime.com/html/2010-6-23/20106231428565702.htm
http://www.eettaiwan.com/ART_8800271415_644847_TA_ebef4eeb.HTM
http://bluefish.blog.51cto.com/214870/72920
http://www.beyondlogic.org/usbnutshell/usb7.htm
http://kunyi.spaces.live.com/blog/cns!30484CDA412A1D29!748.entry
http://dev.firnow.com/course/6_system/linux/Linuxjs/2007917/71729.html
http://blogs.msdn.com/b/ningling/archive/2007/06/10/windows-ce-6-0.aspx
http://www.gentoo.org/doc/zh_cn/usb-guide.xml


還有compile 的問題,為了避免全部 sysgen

更改在 common oak driver usb 下面的 code
要用 sysgen 才會更新
光是這樣就make run time image 的話, 重開機會當在load ehci.dll 或 ohcd.dll

所以在 db1200\ 下面 要rebuild ehci.dll and ohcd.dll (Public OAK 下面先sysgen, 再build db1200下的 ehci 跟 ohcd )




解決了 修改 ResetAndEnablePort() 當失敗的時候 重試至成功為止
owner
chw.cpp  ResetAndEnablePort

2013年12月23日 星期一

Android 3.2+ Code (Inadvertently?) Preventing Write Access to External Storage


In the past, an app would request the “WRITE_EXTERNAL_STORAGE” permission, which would grant write access to all external storages (user/group “sdcard_rw“). This has apparently been changed to only grant write access to the primary external storage. A second permission has been introduced called “WRITE_MEDIA_STORAGE“, which would grant access to the other external storages (user/group “media_rw“).
The problem is, a third party will not actually be granted this permission, only system apps and apps provided by the device manufacturer will normally be granted this permission. There are exceptions, apparently on some devices third party apps will be granted this permission, but according to the AOSP sources, they’re certainly not supposed to.

Solution:
find /system/etc/permissions/platform.xml, and modify


<permission name=”android.permission.WRITE_EXTERNAL_STORAGE” >

     <group gid=”sdcard_rw” />

     <group gid=”media_rw” />

 </permission>
     

http://www.xda-developers.com/android/android-3-2-code-inadvertently-preventing-write-access-to-external-storage/

http://www.chainfire.eu/articles/113/Is_Google_blocking_apps_writing_to_SD_cards_/


platform.xml 在 frameworks\base\data\etc 下面

2013年1月31日 星期四

MAC Mini Ethernet Problem

我的Mac Mini (OS X 10.7.5 ) 最近發現ethernet connection 不通,  查看network
發現一直在 unplugged 跟 unknown state 中切換.
後來找了資料, 在 hardware 連線設定中 關掉 automatic 使用 manual setting
在duplex 中不要用 flow control 跟 energy efficient 就行了
使用 full duplex 沒問題
只要一打開 flow control 跟 energy efficient 就完蛋
但是在 Linux Mint 跟Windows  7 中卻很正常運作

2012年11月8日 星期四

Porting New SMSC LAN9211 Driver from XSCALE to MIPS

加入platform builder 後 第一個 build 錯誤訊息
1. cannot find ndis.h,  在 \WINCE500\PUBLIC\COMMON\CESYSGEN\DDK\INC 中
2. Remove xscale-50.c xsc-util.S
3. 在 platform.h 中, comment #include "xscale-50.h" 或者不要定義 BSP_MAINSTONE (Correct Way)
然後 include "au1200_smsc.h"
4. 在 au1200_smsc.h 中定義 CACHE_LINE_BYTES  32
5. 把有 DMA_XFER 相關的CODE用 ifdef mark 起來,暫時不用DMA
6. 剩下 ChipSetup 中的 INT_DEAS 和四個未定義的函數
PlatformInitialize, PlatformDisplayInfo, PlatformSetBusWidth, PlatformSetBusTiming

Bad Database Entry 把platform 下的 build.dat 刪掉就行了

2012年11月1日 星期四

WINCE 7 Building Error (BSP)

裝好 RMI Au1200 BSP之後 build 還是會出現錯誤停住
主要是BSP build 有問題

過了之前的 compiler option 問題之後 出現以下問題

BUILD: [02:0000000219:ERRORE] f:\wince700\platform\db1200\src\drivers\usb20\ehci\cehcd.h(71) : error C2555: 'CEhcd::AddedTt': overriding virtual function return type differs and is not covariant from 'CDeviceGlobal::AddedTt'
BUILD: [02:0000000220:INFO  ]         f:\wince700\public\common\oak\drivers\usb\hcd\usb20\usb2com\cdevice.hpp(65) : see declaration of 'CDeviceGlobal::AddedTt'



主要因為 WINCE 7  OAK 中 cdevice.hpp 中class  CDeviceGlobal 的一些函式定義改變


  virtual PVOID   AddedTt( UCHAR uHubAddress,UCHAR uPort)=0;
  virtual BOOL    DeleteTt( UCHAR uHubAddress,UCHAR uPort, PVOID ttContext)=0;
  virtual LPCTSTR GetControllerName( void ) const = 0;

在 WINCE 5 中為
    virtual BOOL    AddedTt( UCHAR uHubAddress,UCHAR uPort)=0;
    virtual BOOL    DeleteTt( UCHAR uHubAddress,UCHAR uPort)=0;
    
在 WINCE 7  hcd.hpp 中 class CHcd  多了下面這個函式
  virtual DWORD GetNumOfPorts() = 0;

而舊的WINCE 有 GetNumberOfPort() 這個函式


Class Hierarchy

USB2lib --> CEhcd
CDeviceGlobal --> CHcd --> CHW --> CEhcd

在解決了AddedTt, DeleteTt, GetControllerName, 及GetNumOfPorts 之後
USB20的部份就過了

接下來在 DISPLAY 的 display.cpp 遇到阻礙
#include 找不到
gxinfo.h 為GAPI (GameX) 的header file

主要提 struct GXDeviceInfo 的定義

可是 GAPI 遠在 WINCE 5.0 之前就消失了


GPESurfRotate not defined
這個在WINCE 5 中有(Link with GPERotate.lib )  在CE 7中好像沒有了

解決了GPESurfRotate  之後 build 又遇到 link problem
如同以下

BUILD: [00:0000000063:WARNN ] F:\WINCE700\platform\DB1200\Src\Drivers\DISPLAY\: Missing source file: F:\WINCE700\public\common\oak\lib\MIPSII\retail\ctblt.lib.
BUILD: [00:0000000064:WARNN ] F:\WINCE700\platform\DB1200\Src\Drivers\DISPLAY\: Missing source file: F:\WINCE700\public\common\oak\lib\MIPSII\retail\EMUL.lib.
BUILD: [00:0000000065:WARNN ] F:\WINCE700\platform\DB1200\Src\Drivers\DISPLAY\: Missing source file: F:\WINCE700\public\common\oak\lib\MIPSII\retail\GPE_LIB.lib.
BUILD: [00:0000000078:PROGC ] Building EXPLIB Pass in F:\WINCE700\platform\DB1200\Src\Drivers\DISPLAY\ directory.
BUILD: [01:0000000091:ERRORE] Error(s) in directory "F:\WINCE700\platform\DB1200\Src\Drivers\DISPLAY\".
BUILD: [01:0000000092:ERRORE] NMAKE : fatal error U1073: don't know how to make 'F:\WINCE700\public\common\oak\lib\MIPSII\retail\ctblt.lib'


ctblt.lib EMUL.lib GPE_LIB.lib 在WINCE 6 public\common\oak\lib 中是有的
不過在 WINCE 7中就沒有了
找到以下網址有說明
http://msdn.microsoft.com/en-us/library/aa447499.aspx


You might receive linker errors while migrating a display driver from Windows CE .NET 4.1 to Windows CE .NET 4.2 and later.
As of Windows CE .NET 4.2, Sysgen variables replace the Ctblt.lib and Emul.lib static libraries, as shown in the following table.
Windows CE .NET 4.1 libraryWindows CE .NET 4.2 and later Sysgen variable
Ctblt.libSYSGEN_GPE_CLEARTYPE
Emul.libSYSGEN_GPE_NOEMUL
To fix a linker error, you might need to set the value of the SYSGEN_GPE_CLEARTYPE or SYSGEN_GPE_NOEMUL variables to 1.
Effective with Windows CE .NET 4.1, Windows CE no longer supports 2-bits-per-pixel (bpp) video drivers and hardware. The lowest supported resolution is 8 bpp.


再繼續build 下去
在 lan91c111.c 中 出現2個Warning 
since warning treated as error when compiling drivers, 所以要解決


BUILD: [01:0000000186:WARNN ] f:\wince700\platform\db1200\src\kitl\lan91c111.c(170) : warning C4013: 'VBridgeInit' undefined; assuming extern returning int
BUILD: [01:0000000187:WARNN ] f:\wince700\platform\db1200\src\kitl\lan91c111.c(171) : warning C4013: 'VBridgeKSetLocalMacAddress' undefined; assuming extern returning int


VBridgeInit() 及 VBridgeKSetLocalMacAddress((char*)mac) 未定義




再來就是 oal\oallib\power.c
extern EDBG_ADAPTER Adapter;
EDBG_ADAPTER 好像沒有定義 (本來在 Public\Common\OAK\INC\Halether.h )


還有build db1200\common\LDREBOOT 下面的 eboot.c 及 lan91c111.c 時
EDBG_ADAPTER 沒有定義





在WINCE 6
/*
 *  @struct EDBG_ADAPTER | Adapter info struct
 *
 *  Contains information pertaining to the debug Ethernet adapter.
 */
typedef struct _EDBG_ADAPTER
{
    EDBG_ADDR Addr;       // @field Ethernet and IP Address of device
    DWORD     SysIntrVal; // @field Logical interrupt for Ethernet controller. If set to EDBG_SYSINTR_NOINTR,
                          //        no interrupt will be registered, and the adapter will only be accessed
                          //        in polled mode.  This may be used for systems with limited IRQ lines, but
                          //        is not recommended due to delays in the system which may occur when packets
                          //        are dropped on the network.
    DWORD DHCPLeaseTime;  // @field Duration of DHCP IP lease in seconds
    DWORD EdbgFlags;      // @field Information about ethernet system
} EDBG_ADAPTER;




In Japan MSDN

typedef struct {
EDBG_ADDR Addr;
DWORD SysIntrVal;
DWORD DHCPLeaseTime;
DWORD EdbgFlags;}
EDBG_ADAPTER;




OAL 在WinCE 5 中並不存在
Start from CE6
http://blogs.msdn.com/b/ce_base/archive/2006/11/21/ce6-oal-what-you-need-to-know.aspx

So what did change?  In CE6 we split up three components that previously linked together to make the kernel executable, nk.exe.  CE5 the kernel, OAL and the Kernel Independent Transport Layer (KITL) all linked into nk.exe.  In CE6 these are broken into kernel.dll, oal.exe and kitl.dll.




再來就是 don't know how to make \WINCE700\PLATFORM\DB1200\LIB\MIPSII\RETAIL\stall.lib
在  \OSDesigns\XXX\Au1200\WinCE700\db1200_MIPSII_Retail\cesysgen\platform\DB1200\lib\MIPSII\retail 裏是有 stall.lib的。
先暫時從sysgen copy 過去就行了


還有在BSP GPIO 少了 oal_log.lib, 這個也是從   \OSDesigns\XXX\Au1200\WinCE700\db1200_MIPSII_Retail\cesysgen\PLATCOMM\db1200\lib\MIPSII\retail  copy 到 \WINCE700\PLATFORM\COMMON\LIB\MIPS\RETAIL 就行 $(_COMMONPLATROOT)


後面出現以下錯誤

在build BSP中的 ehcipdd ( ehci.dll )時
hcd2lib.lib( cdevice.obj ) 中找不到 CreateControlPipe, CreateIsochronousPipe, CreateBulkPipe, CreateInterruptPipe
這是因為在BSP 的ehci 中的 cpipe.cpp (ehcimdd.lib), CreateControlPipe ... 跟 WINCE 7 OAK 中的定義不同
WINCE 7 OAK 中的 CreateXXXPipe 都多了一個參數,倒數第2 個參數為 const PVOID ttContext


解決:在bsp中的 cpipe.cpp,幫 CreateXXXPipe() 多加倒數第二個參數 IN const PVOID ttContext,然後再用
UNREFERENCED_PARAMETER( ttContext ); 去除Warning


接著出現一堆 Link error, GPE::EmulatedBlt(), ..... GPE::xxxx()
Display driver 沒有Link GPE.lib 
http://support.microsoft.com/kb/247058/en-us




然後出現 KITL 少了 oal_kitl.lib, kitl_log.lib, vbridge.lib
oal_kitl.lib, kitl_log.lib 從 \OSDesigns\XXX\Au1200\WinCE700\db1200_MIPSII_Retail\cesysgen\PLATCOMM\db1200\lib\MIPSII\retail
copy 就行了,而 vbridge.lib 在WINCE5, WINCE6 的時候 是在 COMMON\OAK\LIB 下
http://msdn.microsoft.com/en-us/library/aa447112.aspx
http://msdn.microsoft.com/en-us/library/ms901803.aspx

之後又少了 oal_io.lib oal_ioctl.lib oal_cache.lib oal_cache_mips32.lib

之後在\WINCE700\platform\DB1200\Src\Bootloader\BUILDEXE\ 下面 少了 EBOOT.LIB
其路徑在WINCE5 6是指向 Public\Common\Oak\Lib 下面,但是在WINCE7 沒有在 OAK 目錄中
Eboot.lib 在\OSDesigns\XXX\Au1200\WinCE700\db1200_MIPSII_Retail\cesysgen\PLATCOMM\db1200\lib\MIPSII\retail 裏面


Eboot.lib 之後,出現了一堆 lib link error,unresolved external symbol KITLOutputDebugString 
很多Library 用到 KITLOutputDebugString
還有 inet_ntoa 及  EbootReadSerialIP