激情综合丁香-激情综合六月-激情综合婷婷亚洲图片-激情综合图区-激情综合网五月

嵌入式Linux中同時實現GPRS和SMS短信收發

 2010-6-11              

        隨著移動通訊技術的發展普及,GPRS無線通訊和SMS短信收發越來越多地應用到工業領域的遠程數據通訊中。GPSR主要是進行的數據通訊,SMS則是AT指令的操作模式,在不少的無線通訊模塊,比如西門子的MC39i、華為的GTM900,模塊一旦處于GPRS數據通訊狀態,則無法再進行AT指令的操作,從而難以同時實現SMS短信數據收發的功能。解決這個問題方法之一是在軟件上實現多路轉換協議,這種方式通過軟件協議的方式將一個物理口虛擬為多個口,從而將GPRS通訊和SMS通訊分開,這種模式程序往往比較復雜,在嵌入式的應用中比較難以實現。方法之二就是直接在硬件物理口上將GPRS和SMS通訊分開,西門子提供的MC37i無線模塊本身就自帶有兩個物理串口,可以支持分別進行GPRS和SMS通訊的操作。本文將結合英利公司提供的ARM9 Linux主板EM9160和ETA300 GPRS擴展單元(GPRS無線模塊為MC37i),著重介紹如何同時實現GPSR通訊和SMS短信收發的應用。

 

硬件組成

        英利公司的嵌入式Linux主板EM9160共有6個異步串口,在Linux環境中為“/dev/ttyS1”-“/dev/ttyS6”。ETA300是包括MC37i模塊的外掛式GPRS通訊單元,可直接通過帶線與英利EM9160開發評估底板相連,如下圖所示。其中GPRS通訊占用EM9160的 “/dev/ttyS1” (或稱COM2) 口,SMS通訊占用EM9160的“/dev/ttyS4”( 或稱COM5 ) 口,連接方式如下圖所示。

 

嵌入式Linux工控板EM9160連接GPRS模塊示例圖

 

MC37i電源管理

        通過ETA300 GPRS擴展單元可實現對MC37i的電源管理,MC37i的電源管理是通過兩路GPIO:GPIO8和GPIO9來實現,分別對應GPRS _STB、GPRS_AUX管腳信號。在程序上操作GPIO8、GPIO9實現對MC37i的上電、關電操作。以下為提供的對MC37i電源管理的操作函數:

        // 功能描述:該函數通過對EM9160的GPRS_STB和GPRS_AUX兩個管腳信號的操作,實現對GPRS模塊的電源管理。
        // 輸入參數 OpMode: 電源管理功能索引號,有效索引號包括:
                             OpMode = 1: 對GPRS模塊進行上電操作,并把執行該操作后電 源狀態返回;
                             OpMode = 2: 對GPRS模塊進行強制關電,并把執行該操作后電源狀態返回;
                             OpMode = 3: 讀取GPRS模塊當前的電源狀態。
        // 輸出參數 pResult: 用于存儲讀取的電源狀態信息。
                             *pResult = 0: 表示GPRS模塊的電源已關閉;
                             *pResult = 1: 表示GPRS模塊的電源已加載成功;

        int GPRS_PM( int fd, int OpMode, int* pResult )

 

嵌入式Linux中的GPRS撥號

        嵌入式Linux ppp GPRS撥號程序pppd和相關的腳本文件,均已經缺省包含在EM9160板卡的根文件系統中。

 

        嵌入式Linux主板EM9160環境下進行GPRS撥號時,首先調用函數GPRS_PM(…)使MC37i上電成功,然后再啟動pppd進程進行GPRS撥號。

 

        printf('GPRS Power On\n');
        GPRS_PM(fd, 1, &GPRS_State);
        // MC37i模塊上電登錄到移動網絡等待時間
        for( i1=0; i1<8; i1++ )
        {
                sleep( 1 );
                printf( '.\n' );
        }
        system( 'pppd call pppd-connect-script' );

 

        掛斷直接可調用ppp-off腳本:

        system( '/etc/ppp/ppp-off' );

 

嵌入式Linux中的SMS短信收發

        SMS短信收發的核心通訊模式為串口通訊,應用程序上也是采用的C++的編程方式,利用英利公司網站技術天地欄目中《嵌入式Linux串口通訊的C++設計》一文中介紹的CSerial類,在CSerial基礎上派生了一個針對于SMS收發應用的class SMS,該派生類 class SMS 中重新實現了虛函數PackagePro(…) 接收數據處理函數,以滿足SMS收發的應用需求。

 

        在sms.h中定義了短信的數據結構:

        struct SMS_DATA
        {
                unsigned char PhoneNum[16]; // 對端電話號碼
                struct Date d; // 日期:年月日
                struct Time t; // 時間:時分秒
                int DatLen; // 數據長度
                unsigned char DBuf[168]; // 短信數據內容
        };

 

        對于SMS短信收發可調用的類函數包括有:

        // 按照指定的參數打開短信Modem端口,并創建短信接收線程
        int OpenPort( int PortNo, int baudrate, char databits, char stopbits, char parity );
        // 關閉短信Modem端口并釋放相關資源
        int ClosePort( );
        // 發送AT指令初始化短信Modem
        int InitSMSModem( );
        // 發送短信
        int SendMessage( struct SMS_DATA* pSMS );

 

        在該例程中短信接收的處理放在函數PackagePro(…)中實現的,用戶可以根據實際情況加以調整。SMS短信收發的實現代碼均在sms.cpp下,由于是CSerial的派生類,其接收的主要流程可參見英利公司網站技術天地欄目中《嵌入式Linux串口通訊的C++設計》一文中相關介紹,這里不再贅述。

 

        在class SMS中實現了支持中文短信的發送,所以短信發送的模式均采用PDU模式。對于中文字符,在短信發送時還需要轉換為unicode碼,程序代碼中已經實現了中文內碼到unicode 碼的自動轉換,客戶在測試該程序時,需要注意的是要將unicode 的相關轉換文件表COPY到/mn/nandflash:gsm0338.bin gb2312.bin unicode.bin。

 

        本文中所介紹的例程僅僅適用于英利EM9160嵌入式主板,均有源碼提供。感興趣的客戶可以發郵件到公司技術支持郵箱 support@emlinix.com索取相關代碼。

主站蜘蛛池模板: 久久久精品免费观看| 成人综合婷婷国产精品久久免费 | 美女黄污网站| 国产一区二区三区在线免费观看| 亚洲精品午夜级久久久久| 小泽玛利亚一区二区| 手机看片日韩国产福利视频| 玖玖99| 国产片在线看| 国产精品欧美一区喷水| 精品一区二区三区在线视频观看| 国产综合精品久久亚洲| 青青视频免费| 亚洲欧美日韩精品久久亚洲区色播| 一级做a爱过程免费视频高清 | 性感美女香蕉视频| 91短视频在线观看免费最新91| 国产中文欧美| 看片日韩| 欧美日韩国产另类在线观看 | 成人亚洲国产| 免费黄色福利| 国产r级在线观看| 国产欧美日韩在线观看一区二区三区| 黄色网页在线| 精品久久久一二三区| 成人午夜免费在线观看| 国产欧美日韩免费一区二区| 久久亚洲精品成人综合| 青青草97国产精品免费观看| 亚洲精品二区中文字幕| 伊人2222| 综合99| 182tv免费福利夜在线观看| 一级毛片一级毛片一级毛片| 久久免费黄色| 久久精品亚瑟全部免费观看| 日本特黄特色大片免费视频观看| 中文字幕 视频一区| 午夜激情婷婷| 中文字幕日韩精品在线|