今天将wince4.2的(基于s3c2440)3串口移植到wince5下,在用uart0(com1)作为调试串口。这个当然没有问题了。
      问题出现在我将uart1和uart2的相关注册表项加入到platform.reg之后,activesync不起作用了。调试串口的消息是:出错,错误码608。对照help文档为:ERROR_DEVICE_DOES_NOT_EXIT。我个人认为是非常奇怪的错误。
      还好我知道是因为加入了uart1和uart2的注册表项引发的这个错误。因为在只有uart0的时候是ok的。为此我又验证了一下:只要有uart1(com2)的注册表项activesync就不行(与上面同样的错误)。
     至此初步怀疑,是activesync要占用com2这个端口。所以将uart1的注册表项修改如下:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SER24402]
   "DeviceArrayIndex"=dword:1
   "Index"=dword:4
   "Port"="COM4:"
   "FriendlyName"="Serial Cable on COM4:"
     也就是将原来的com2修改成了com4,应用程序只要打开com4就可以用uart1了。
再一次测试activesync--OK。
     虽然事实证明activesync要占用com2,至少在我这个环境下是这样的。但是我想这个东西应该是可配置的。经过仔细查看.reg文件发现:
在platform.reg下有关usbfn(serial)的项如下:
[HKEY_LOCAL_MACHINE\Drivers\USB\FunctionDrivers\Serial_Class]
   "FriendlyName"=LOC_USBFN_SERIAL_NAME
   "idVendor"=dword:0547
   "Manufacturer"=LOC_USBFN_SERIAL_MANUFACTURER
   "idProduct"=dword:2720
   "Product"=LOC_USBFN_SERIAL_PRODUCT
   "Index"=dword:2
再看common.reg中的:
[HKEY_LOCAL_MACHINE\Drivers\USB\FunctionDrivers\Serial_Class]
   "Dll"="serialusbfn.dll"
   "InterfaceSubClass"=dword:ff
   "InterfaceProtocol"=dword:ff
   "DeviceName"="USBFNS1:"
   "Tsp"="Unimodem.dll"
   "Prefix"="COM"
   "DeviceArrayIndex"=dword:0
   "DeviceType"=dword:0
   "IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"
   "idVendor"=dword:045E
   "Manufacturer"="Generic Manufacturer (PROTOTYPE--Remember to change idVendor)"
   "idProduct"=dword:00ce
   "Product"="Generic Serial (PROTOTYPE--Remember to change idVendor)"
   "bcdDevice"=dword:0
 
     哈哈,就是这个了,将"Index"的值直接改成8,ok!