none
wince 6.0判斷網路連線裝置。 RRS feed

  • 問題

  • 請教各位,
    我的wince設備會同時開啟WIFI及3G,
    當兩者都有訊號時,有辦法指定使用那一個裝置來傳送資料嗎??


    之前討論區有相關討論,但都是用Connection Manager。
    但是它好像是 Windows Mobile only API。

    還是當wifi有訊號時,就把3G連線斷掉。而當wifi沒有訊號時,再建立3G的連線。
    • 已移動 ZebraTWModerator 2009年8月12日 下午 03:33 Belong to Embedded Forum (從:行動開發討論區(Mobile Development))
    2009年5月30日 上午 03:40

解答

  • 在 CE 上的確是沒有 Connection Manager 可以用,就算在 CE 6 下面已經有 Cellcore Module, 但假如你有 PB 6 去看一下
    PUBLIC\CELLCORE\OAK\LIB\ARMV4I\DEBUG\cellcore.def 就會發現 ConnMgrXXX 這些 API 都是被 CELLCORE_MODULES_CONNMGR 包起來
    而再看一下 PUBLIC\CELLCORE\cebasecesysgen.bat 又會看到 set SYSGEN_CONNMGR=1 是被 REMARK 掉。
    就算把這個 remark 拿掉, 也會因為沒有相關的 libray, 而在 build OS 的 SYSGEN 時就 fail。

    而事實上 ConnMgr 某整程度上而言, 也是透過一套 policy 來 connect 或 disconnect device 裡的 network interfaces。
    所以基本上你是可以說當 WiFi 連上時把 WWAN 切掉, 然後沒訊號時再連。

    或者也可以試看看改變 Routing Table, 讓 WWAN (3G) interface 的 Metric 大一點, 這樣 by default 應該就會先用 WiFi, 要是此路不通 TCP/IP stack 就會嘗試 比較低優先的 metric.
    關於這方面可以參考 SetIpForwardEntry http://msdn.microsoft.com/en-us/library/aa916414.aspx and
    http://msdn.microsoft.com/en-us/library/aa916803.aspx, 然後假如你有 PB 6 的話, 可以看一下 route.exe 的 code 在 PUBLIC\COMMON\OAK\DRIVERS\NETSAMP\ROUTE\route.cpp。


    如果你覺得我的文章以確切回答到問題, 請不吝標示為有用 and 解答.
    • 已標示為解答 btomij 2009年6月2日 下午 04:27
    2009年6月2日 上午 02:19

所有回覆

  • Hi, 你可以找找看(或是實測看看)系統裡面是不是有cellcore.dll存在,看MSDN說明,應該有些function在CE3.0之後就有了。
    態度決定一切 ! - blog : http://bauann-makeit.blogspot.com/
    2009年5月30日 下午 06:18
  • 在我的設備裡,沒有這個檔案耶。
    我試過網路上一些範例,都是顯示找不到這個檔案。
    然後我在opennet看到,cellcore.dll這個檔只有mobile才有的。
    http://community.opennetcf.com/forums/t/10533.aspx
    2009年6月1日 上午 02:25
  • 找了一下資料..殘念,如您所說似乎在CE6裡面是沒有cellcore.dll可以用;兩個建議參考看看

    1.改為使用RAS API
       原文可參考一下這篇
       http://social.msdn.microsoft.com/Forums/en-US/netfxcompact/thread/766f86da-0f72-47a9-b451-ddec8fd43355

    2.跟你的設備提供廠商討論看看,是不是能幫你加這個東西進來

    態度決定一切 ! - blog : http://bauann-makeit.blogspot.com/
    2009年6月1日 上午 06:56
  • 你應該可以在系統中 QUREY 到兩個 NDIS ADAPTOR,用 NDIS 的 資料結構,可以找到 信號強度 這個欄位,
    用他來判斷就可以了,必要時,用 IP 來決定也可以!

    -Zebra @TECHWARE

    Zebra@ eMVP
    2009年6月1日 下午 03:02
    版主
  • 在 CE 上的確是沒有 Connection Manager 可以用,就算在 CE 6 下面已經有 Cellcore Module, 但假如你有 PB 6 去看一下
    PUBLIC\CELLCORE\OAK\LIB\ARMV4I\DEBUG\cellcore.def 就會發現 ConnMgrXXX 這些 API 都是被 CELLCORE_MODULES_CONNMGR 包起來
    而再看一下 PUBLIC\CELLCORE\cebasecesysgen.bat 又會看到 set SYSGEN_CONNMGR=1 是被 REMARK 掉。
    就算把這個 remark 拿掉, 也會因為沒有相關的 libray, 而在 build OS 的 SYSGEN 時就 fail。

    而事實上 ConnMgr 某整程度上而言, 也是透過一套 policy 來 connect 或 disconnect device 裡的 network interfaces。
    所以基本上你是可以說當 WiFi 連上時把 WWAN 切掉, 然後沒訊號時再連。

    或者也可以試看看改變 Routing Table, 讓 WWAN (3G) interface 的 Metric 大一點, 這樣 by default 應該就會先用 WiFi, 要是此路不通 TCP/IP stack 就會嘗試 比較低優先的 metric.
    關於這方面可以參考 SetIpForwardEntry http://msdn.microsoft.com/en-us/library/aa916414.aspx and
    http://msdn.microsoft.com/en-us/library/aa916803.aspx, 然後假如你有 PB 6 的話, 可以看一下 route.exe 的 code 在 PUBLIC\COMMON\OAK\DRIVERS\NETSAMP\ROUTE\route.cpp。


    如果你覺得我的文章以確切回答到問題, 請不吝標示為有用 and 解答.
    • 已標示為解答 btomij 2009年6月2日 下午 04:27
    2009年6月2日 上午 02:19
  • 謝謝各位的幫忙,我想比較簡單的方法,就是利用訊號來判斷了。

    2009年6月2日 下午 04:29
  • 所以,您的解答是誰?
    Zebra@ eMVP
    2009年6月3日 上午 02:28
    版主
  • 謝謝各位的幫忙,今天測了一天。
    以下是我目前的作法。

    取得Routing Table,在這個網站有相關的範例。
    http://bertjansen.spaces.live.com/Blog/cns!D9B33D4A940B6FFD!192.entry

    利用OpenNet.Net,來取得各ADAPTOR的相關資訊。來決定要變更那一個設備的Metrix。

    再使用SetIpForwardEntry來變更Metrix。



    2009年6月3日 下午 01:38