2012-04-20 80 views
1

您應該如何以編程方式檢測通話中的遠程調制解調器何時掛斷?我正在編寫一個C程序,它與Ubuntu linux中的SoftModem設備/dev/ttySL0接口。我能夠使用Hayes AT命令配置調制解調器並與遠程調制解調器進行通信。但是,我一直無法確定我應該如何檢測到另一端掛斷了線路。Hayes AT命令:檢測遠程掛斷?

我配置了調制解調器,以便當另一端掛起時,設備打印NO CARRIER並切換到命令模式。但是,我無法使用NO CARRIER字符串,因爲我無法保證調制解調器在數據模式下不會收到該字符串。

你怎麼「聽」遠程掛斷?

+0

P.S.我沒有代表創建一個56k調制解調器或softmodem標籤。調制解調器標籤似乎與56k調制解調器到調制解調器鏈接有關的互聯網訪問調制解調器更多。 – 2012-04-20 21:45:29

+0

我加了一個[at-command]標籤;這應該就夠了。 [聽]不是一個真正的標籤。 – 2012-04-20 21:46:56

+1

有趣的一個。在RS232硬件世界中,有用於此的CD(載波檢測)線。如果您正在使用API​​ /庫,是否有相關的虛擬化? – 2012-04-20 21:48:08

回答

0

NO CARRIER進行測試,因爲文字不足。本文經常發生在網站上,即使在Q站點上。

來自調制解調器,它應該用換行符括起來。

此外,檢測到該文本後,您可以嘗試使用+++切換到命令模式。如果有效,您的連接仍然存在,您可以重新連接並繼續使用它。如果沒有(因爲你已經在那裏,並且+++是一個無效的命令),連接已經結束。

3

這是調制解調器上的硬件信號,載波檢測(CD)線路。您需要監控它以知道連接丟失。 linux中的基礎知識在this how-to中描述,您可以使用TIOCM_CAR命令通過ioctl()獲得信號狀態。

+0

這當然似乎是我在找的東西。儘管如此,我還是希望將這個問題歸結爲一個可行的例子。在我的第一個實驗中,DCD開始禁用,並在建立連接時啓用(如預期的那樣),但是當遠程調制解調器斷開連接時,即使在從設備讀取「NO CARRIER」後,DCD仍然保持啓用狀態。 – 2012-04-21 02:47:46

+0

它是如何關閉然後:) – 2012-04-21 02:49:36

+0

當我調用'TIOCSSOFTCAR' ioctl清除CLOCAL時它被重置爲0。 – 2012-04-21 04:19:53