<strike id="kiyse"></strike>
  • <tr id="kiyse"></tr>
  • <strike id="kiyse"></strike><samp id="kiyse"><tbody id="kiyse"></tbody></samp>
    <strike id="kiyse"><s id="kiyse"></s></strike>
    <tr id="kiyse"></tr>
    <noframes id="kiyse"><code id="kiyse"></code></noframes>
    <th id="kiyse"></th>
    <samp id="kiyse"></samp>
  • <th id="kiyse"><s id="kiyse"></s></th>
  • Linux主板4G通訊斷線重連的自動(dòng)管理

     2019-5-5     作者:黃志超         
    文章標(biāo)簽:C/C++Eclipse4G

      在工控主板使用的現(xiàn)場(chǎng)環(huán)境中,可能會(huì)有一部分不能夠提供以太網(wǎng)的情形,所以3G和4G網(wǎng)絡(luò)以其便捷的使用方式,得到越來(lái)越廣泛的應(yīng)用。但是在使用無(wú)線通訊的時(shí)候,為了保證通訊的穩(wěn)定性,斷線重連機(jī)制是必須在程序中實(shí)現(xiàn)的。


      為了讓客戶能夠更加便捷的進(jìn)行開(kāi)發(fā),英創(chuàng)公司在Linux主板上實(shí)現(xiàn)了自動(dòng)撥號(hào)和斷線重連的管理功能,并以庫(kù)文件的形式放在主板文件系統(tǒng)中提供給客戶。通過(guò)撥號(hào)管理庫(kù)提供的API函數(shù),客戶就能夠方便的實(shí)現(xiàn)自動(dòng)撥號(hào)以及斷線重連的功能,下面就詳細(xì)介紹針對(duì)英創(chuàng)Linux主板的撥號(hào)管理庫(kù)及導(dǎo)出的API函數(shù)。


      英創(chuàng)公司提供的撥號(hào)管理庫(kù)文件名為libautodial.so,在編譯應(yīng)用程序的時(shí)候,需要鏈接這個(gè)庫(kù)文件,如果客戶使用光盤資料中提供的eclipse工具進(jìn)行開(kāi)發(fā),在編譯之前需要對(duì)工程進(jìn)行設(shè)置,設(shè)置方法為選擇對(duì)應(yīng)的工程,通過(guò)右鍵菜單進(jìn)入properties,點(diǎn)擊右側(cè)C/C++ Build子欄目,選擇其中Settings這一項(xiàng),在C++ Linker子項(xiàng)中添加庫(kù)文件和路徑,如下圖:


    Linux主板4G通訊斷線重連的自動(dòng)管理.png

    工程設(shè)置


      Windows開(kāi)發(fā)環(huán)境和Ubuntu開(kāi)發(fā)環(huán)境下面的eclipse設(shè)置方法相同。對(duì)運(yùn)行環(huán)境的英創(chuàng)主板,其根文件系統(tǒng)/lib路徑下已經(jīng)做好了相應(yīng)設(shè)置,客戶不需要再做任何操作,直接運(yùn)行編譯好的程序即可。


      撥號(hào)管理庫(kù)文件libautodial.so一共提供了三個(gè)API函數(shù),分別實(shí)現(xiàn)連接,查詢和斷開(kāi)的功能,函數(shù)接口定義如下:


    /**
     *    啟用撥號(hào)管理線程
    *
    *    函數(shù)會(huì)創(chuàng)建一個(gè)線程用來(lái)進(jìn)行撥號(hào)管理
    *    實(shí)現(xiàn)自動(dòng)撥號(hào),以及斷線重連
    *
     *    返回值說(shuō)明:
     *     0 表示成功開(kāi)啟撥號(hào)管理線程。
     *    -1 表示在當(dāng)前環(huán)境無(wú)法運(yùn)行。
     *
     */
    int pppconnt_start();
     
    /**
     *    查詢連接狀態(tài)
     *
     *    返回值說(shuō)明:
     *    0 表示運(yùn)行連接正常。
     *    -1 表示連接斷開(kāi)。
    *      -2表示信號(hào)太差或者沒(méi)有讀取到SIM卡導(dǎo)致連接失敗。
     *    -3表示連接模塊無(wú)響應(yīng),建議檢查硬件連接和驅(qū)動(dòng)是否加載成功。
    *
     */
    int pppconnt_check();
     
    /**
     *    關(guān)閉連接
     *
     *    關(guān)閉撥號(hào)管理功能,并關(guān)閉已建立的連接。
     *
     */
    void pppconnect_stop();


      pppconnt_start()函數(shù)會(huì)創(chuàng)建一個(gè)線程來(lái)對(duì)整個(gè)撥號(hào)的流程實(shí)現(xiàn)自動(dòng)管理,管理線程一開(kāi)始便會(huì)自動(dòng)判斷接入的模塊型號(hào),根據(jù)模塊型號(hào)調(diào)用對(duì)應(yīng)的撥號(hào)腳本,然后進(jìn)行撥號(hào)和斷線重連。所以對(duì)于客戶來(lái)說(shuō),只需要調(diào)用一次pppconnt_start()函數(shù),就會(huì)創(chuàng)建出一個(gè)實(shí)現(xiàn)撥號(hào)管理的線程,不需要再執(zhí)行其他任何操作。


      pppconnt_check()函數(shù)提供了查詢功能,如果在使用過(guò)程中客戶想獲取連接狀態(tài),可以通過(guò)調(diào)用該函數(shù)的返回值來(lái)判斷,0為正常連接,-1為連接斷開(kāi),-2為信號(hào)弱或者無(wú)信號(hào),可能是由于沒(méi)有接天線或者沒(méi)有讀取到SIM卡造成的,-3為模塊無(wú)響應(yīng),可能是由于沒(méi)有識(shí)別到外部模塊或者沒(méi)有加載驅(qū)動(dòng)造成的。如果一直無(wú)法連接成功,客戶可以根據(jù)查詢的返回值判斷原因,還可以增加硬件復(fù)位和重新上電等操作來(lái)保證模塊的正常工作。


      pppconnt_stop()函數(shù),這個(gè)函數(shù)會(huì)關(guān)閉撥號(hào)管理線程,以及已經(jīng)建立好的連接。在客戶需要關(guān)閉撥號(hào)連接或是對(duì)模塊進(jìn)行復(fù)位等操作時(shí),建議先調(diào)用pppconnt_stop()函數(shù)釋放相關(guān)資源。


      客戶在主板上電后,需要先加載4G模塊對(duì)應(yīng)的驅(qū)動(dòng),因?yàn)樾枰?qū)動(dòng)加載成功后,才能通過(guò)虛擬串口使用程序與模塊之間進(jìn)行交互,加載驅(qū)動(dòng)可以放在程序或者腳本中進(jìn)行,驅(qū)動(dòng)加載的方法可以參考文章:《英創(chuàng)Linux主板基于3G和4G的無(wú)線通訊方案》中的說(shuō)明。驅(qū)動(dòng)加載成功后,系統(tǒng)會(huì)生成對(duì)應(yīng)的虛擬串口,這時(shí)就可以調(diào)用撥號(hào)管理庫(kù)中提供的pppconnt_start()函數(shù)進(jìn)行撥號(hào)連接了。根據(jù)上面的介紹和對(duì)API函數(shù)的描述,我們使用以下代碼進(jìn)行簡(jiǎn)單的測(cè)試:


     int   i1;
     
           //先調(diào)用一次pppconnt_stop,關(guān)閉連接
           pppconnt_stop();
     
           //通過(guò)代碼加載驅(qū)動(dòng),測(cè)試使用華為ME909s,VID=0x12d1,PID=15c1
           system("insmod /lib/modules/4.1.15/usbserial.ko vendor=0x12d1 product=0x15c1");
     
           //開(kāi)啟撥號(hào)管理
           i1 = pppconnt_start( );
           printf("i1 = %d\n", i1);
     
           while(1)
           {
                  i1 = pppconnt_check();
                  if(!i1) {
    printf("connected!\n");
                         //main processing
                         //...
                         sleep(5);      
                  }
                  else {
                         //返回值為-,說(shuō)明連接斷開(kāi)
                         if(i1 == -1)
                                printf("disconnect!\n");
                         //返回值為-2,說(shuō)明檢測(cè)不到信號(hào),可能是沒(méi)有檢測(cè)到SIM卡,這里執(zhí)行退出
                         else if(i1 == -2) {
                                printf("singal is weak, please check SIM card!\n");
                                break;
                         }
                         //返回值為-3,說(shuō)明模塊無(wú)響應(yīng),這里執(zhí)行退出
                         else if(i1 == -3) {
                                printf("there is no response, please check hardware!\n");
                                break;
                         }
                  }
     
                  sleep(1);
           }
     
           //退出循環(huán),調(diào)用pppconnt_stop,釋放相關(guān)資源
           pppconnt_stop();
           return 0;


      例程中對(duì)于查詢到的狀態(tài),我們只是做了簡(jiǎn)單的打印,方便觀看效果,在遇到?jīng)]有讀取到SIM卡和模塊無(wú)響應(yīng)的情況下就退出,在實(shí)際使用中可以加入硬件復(fù)位和重新上電等操作。應(yīng)用處理由sleep函數(shù)代表,可更換為其他處理代碼。例程測(cè)試效果如下:


    Linux主板4G通訊斷線重連的自動(dòng)管理.png

    建立連接


      可以看到系統(tǒng)通過(guò)程序加載驅(qū)動(dòng)后,生成了相應(yīng)的虛擬串口,然后啟用了撥號(hào)管理功能,start_connect()函數(shù)讀出模塊為ME909s,根據(jù)模塊型號(hào)調(diào)用了對(duì)應(yīng)的撥號(hào)腳本,連接成功后,檢測(cè)線程打印出connected,說(shuō)明連接已經(jīng)成功。為了測(cè)試效果我們通過(guò)終端關(guān)閉撥號(hào)連接,模擬斷線的情況,來(lái)測(cè)試是否能夠?qū)崿F(xiàn)自動(dòng)重連:


    Linux主板4G通訊斷線重連的自動(dòng)管理.png

    斷開(kāi)模塊


      從打印信息可以看到,在我們通過(guò)終端關(guān)閉撥號(hào)連接后,檢測(cè)程序打印的信息提示disconnect,說(shuō)明此時(shí)撥號(hào)連接已經(jīng)斷開(kāi)。pppconnt_check()函數(shù)檢測(cè)到連接斷開(kāi)但是硬件正常,于是返回-1,根據(jù)測(cè)試代碼,就會(huì)打印disconnect信息。接下來(lái)我們查看撥號(hào)管理線程是否會(huì)自動(dòng)重連,打印信息如下:


    Linux主板4G通訊斷線重連的自動(dòng)管理.png

    重連過(guò)程


      根據(jù)打印信息可以看出,在斷開(kāi)連接以后,10s左右的時(shí)間便重新連接上了,重新連接的過(guò)程是在撥號(hào)管理線程內(nèi)部進(jìn)行的,當(dāng)檢測(cè)程序提示了connected,就說(shuō)明重連成功。


      成功連接后,會(huì)生成ppp0網(wǎng)口,可以使用ifconfig命令查看,如果要使用ppp0網(wǎng)絡(luò),采用linux標(biāo)準(zhǔn)的網(wǎng)絡(luò)編程就可以了,即創(chuàng)建套接字綁定ppp0,然后進(jìn)行需要的設(shè)置和操作,關(guān)于這部分的說(shuō)明,可以參考我們提供的編程應(yīng)用手冊(cè)以及例程step3_tcpserver、step4_tcpclient。


      如果客戶對(duì)撥號(hào)管理的功能感興趣,可以和英創(chuàng)工程師聯(lián)系,索取相關(guān)例程代碼。

    文章標(biāo)簽:C/C++Eclipse4G
    久久久999国产精品| 国产精品成人观看视频网站| 久久这里精品国产99丫E6| 国产成人精品视频网站| 精品国产乱码久久久久久呢| 国产精品丝袜一区二区三区| 精品人妻无码专区在中文字幕| 精品久久久久久无码不卡| 久久精品国产亚洲AV果冻传媒| 国产精品99久久精品爆乳| 九九热线精品视频16| 久久精品亚洲AV久久久无码| 国产成人亚洲综合无码精品| 国产精品一区二区三区99| 国产精品极品美女自在线| 国产精品真实对白精彩久久| 久久久免费的精品| 熟女少妇精品一区二区| 亚洲高清国产拍精品青青草原| 精品国产乱码久久久久久 | 国产精品福利区一区二区三区四区| 美国发布站精品视频| 182tv午夜精品视频在线播放| 日本精品久久久久中文字幕8| 久久国产热这里只有精品| 日韩精品人成在线播放| 日韩亚洲综合精品国产| 91麻豆精品国产一级| 精品福利一区二区三区免费视频| 久久精品国产99国产| 亚洲精品无码不卡在线播放HE| 国产成人高清精品免费观看| 免费久久精品国产片香蕉| 国产自偷在线拍精品热| 国产欧美另类久久久精品图片| 一本色道久久综合亚洲精品蜜桃冫| 亚洲国产精品综合福利专区| 久久久免费精品re6| 无码精品人妻一区二区三区中 | 亚洲精品mv在线观看| 91精品国产亚洲爽啪在线影院 |