2012-05-14 31 views
3

有沒有辦法在c#中寫一個串口重定向器?我有一個編碼爲使用端口1(com1 :)的應用程序,但是,手持設備上的端口(Intermec CN50)始終爲3.我無權修改移動軟件,但是我想重定向任何數據出1複製到3和任何數據進來複制從3到1,所以該應用程序不知道區別。c#串口重定向

我知道這是一個困難的問題,但我相信你們之中有一個人有答案。

我確定不要。

感謝 克里斯

回答

3

沒有,沒有。根據設備和您的確切需求,您可以選擇兩種選擇。

第一個也是最簡單的是重定向驅動程序。 如果您的設備尚未定義COM1設備,則可以在HKLM\drivers\builtin中修改註冊表,並將您的特定端口的索引從3更改爲1。這會導致device.exe將端口暴露爲COM1而不是COM3。但以我的經驗來看,這不太可能奏效,因爲大多數串行端口都設置爲允許操作系統自動分配索引,這意味着COM1和COM2已被使用。但是,你仍然可以解決這個問題。您只需爲該設備的每個等於或低於3的實例明確分配一個索引。將索引1移至3並將索引3移至1,並且您可以有效地交換端口。

以下是一些示例 - 有幾個例子,因爲它取決於OEM如何設置驅動程序初始化。這裏有一個名爲沒有明確的端口驅動程序的示例(在這種情況下,I2C,但它的工作方式相同):

driver with no port

注意有一個PrefixIndex。該驅動程序將列舉爲「I2C0:」。如果您將Index值更改爲其他值,請說'2',那麼它將枚舉爲「I2C2:」。這裏

enter image description here

注意,Port值匹配PrefixIndex

在某些情況下,駕駛者可以提供一個特定的端口名稱,像這樣的。不知道如果你手動設置不同,會發生什麼,所以不要這樣做。如果你想將這一個移動到COM3,你會將Index更改爲3,將Port更改爲COM3,但是必須確保註冊表中沒有其他設置已經設置爲使用這些值。您不希望兩個驅動程序實例試圖枚舉相同的索引。如果你這樣做,我認爲行爲是第二​​個增加,但最好明確地設置值是唯一的,所以你知道發生了什麼。

如果這不符合您的需求,您必須編寫實際的設備驅動程序來執行端口移動/聚合。它可以像Windows Mobile下的現有GPS中間驅動程序(GPSID)一樣工作,並允許您將串行數據重定向到任何您想要的端口。但是,這必須用C編寫,因爲託管代碼(在CF中)無法導出本機符號,因此無法使device.exe加載C#程序集。

+0

您只需爲設備的每個等於或低於3的實例分配索引即可。將索引1移至3並將索引3移至1,並且您可以有效地交換端口。< - 請解釋這部分,ctacke –

+0

我已經將tusbvcp設備上的端口設置爲com1:並且它仍然訪問com3:而不是com1: –

+0

您是否還更改了索引?更改後必須軟重置,以便重新加載驅動程序。 – ctacke