<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中同時(shí)實(shí)現(xiàn)GPRS和SMS短信收發(fā)

     2010-6-11              

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

     

    硬件組成

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

     

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

     

    MC37i電源管理

            通過(guò)ETA300 GPRS擴(kuò)展單元可實(shí)現(xiàn)對(duì)MC37i的電源管理,MC37i的電源管理是通過(guò)兩路GPIO:GPIO8和GPIO9來(lái)實(shí)現(xiàn),分別對(duì)應(yīng)GPRS _STB、GPRS_AUX管腳信號(hào)。在程序上操作GPIO8、GPIO9實(shí)現(xiàn)對(duì)MC37i的上電、關(guān)電操作。以下為提供的對(duì)MC37i電源管理的操作函數(shù):

            // 功能描述:該函數(shù)通過(guò)對(duì)EM9160的GPRS_STB和GPRS_AUX兩個(gè)管腳信號(hào)的操作,實(shí)現(xiàn)對(duì)GPRS模塊的電源管理。
            // 輸入?yún)?shù) OpMode: 電源管理功能索引號(hào),有效索引號(hào)包括:
                                 OpMode = 1: 對(duì)GPRS模塊進(jìn)行上電操作,并把執(zhí)行該操作后電 源狀態(tài)返回;
                                 OpMode = 2: 對(duì)GPRS模塊進(jìn)行強(qiáng)制關(guān)電,并把執(zhí)行該操作后電源狀態(tài)返回;
                                 OpMode = 3: 讀取GPRS模塊當(dāng)前的電源狀態(tài)。
            // 輸出參數(shù) pResult: 用于存儲(chǔ)讀取的電源狀態(tài)信息。
                                 *pResult = 0: 表示GPRS模塊的電源已關(guān)閉;
                                 *pResult = 1: 表示GPRS模塊的電源已加載成功;

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

     

    嵌入式Linux中的GPRS撥號(hào)

            嵌入式Linux ppp GPRS撥號(hào)程序pppd和相關(guān)的腳本文件,均已經(jīng)缺省包含在EM9160板卡的根文件系統(tǒng)中。

     

            嵌入式Linux主板EM9160環(huán)境下進(jìn)行GPRS撥號(hào)時(shí),首先調(diào)用函數(shù)GPRS_PM(…)使MC37i上電成功,然后再啟動(dòng)pppd進(jìn)程進(jìn)行GPRS撥號(hào)。

     

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

     

            掛斷直接可調(diào)用ppp-off腳本:

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

     

    嵌入式Linux中的SMS短信收發(fā)

            SMS短信收發(fā)的核心通訊模式為串口通訊,應(yīng)用程序上也是采用的C++的編程方式,利用英利公司網(wǎng)站技術(shù)天地欄目中《嵌入式Linux串口通訊的C++設(shè)計(jì)》一文中介紹的CSerial類(lèi),在CSerial基礎(chǔ)上派生了一個(gè)針對(duì)于SMS收發(fā)應(yīng)用的class SMS,該派生類(lèi) class SMS 中重新實(shí)現(xiàn)了虛函數(shù)PackagePro(…) 接收數(shù)據(jù)處理函數(shù),以滿足SMS收發(fā)的應(yīng)用需求。

     

            在sms.h中定義了短信的數(shù)據(jù)結(jié)構(gòu):

            struct SMS_DATA
            {
                    unsigned char PhoneNum[16]; // 對(duì)端電話號(hào)碼
                    struct Date d; // 日期:年月日
                    struct Time t; // 時(shí)間:時(shí)分秒
                    int DatLen; // 數(shù)據(jù)長(zhǎng)度
                    unsigned char DBuf[168]; // 短信數(shù)據(jù)內(nèi)容
            };

     

            對(duì)于SMS短信收發(fā)可調(diào)用的類(lèi)函數(shù)包括有:

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

     

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

     

            在class SMS中實(shí)現(xiàn)了支持中文短信的發(fā)送,所以短信發(fā)送的模式均采用PDU模式。對(duì)于中文字符,在短信發(fā)送時(shí)還需要轉(zhuǎn)換為unicode碼,程序代碼中已經(jīng)實(shí)現(xiàn)了中文內(nèi)碼到unicode 碼的自動(dòng)轉(zhuǎn)換,客戶在測(cè)試該程序時(shí),需要注意的是要將unicode 的相關(guān)轉(zhuǎn)換文件表COPY到/mn/nandflash:gsm0338.bin gb2312.bin unicode.bin。

     

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

    一级一级特黄女人精品毛片| 99热亚洲色精品国产88| 国产精品原创巨作av| 69国产成人精品视频软件| 91麻豆精品视频在线观看| 日韩精品一区二区三区中文版 | 2022国产精品不卡a| 久久精品国产99国产精品澳门| 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 久久无码av亚洲精品色午夜| 青青青国产精品一区二区| 野狼第一精品社区| 国产三级精品三级| 日韩精品一区二三区中文| 精品久久洲久久久久护士| 国产精品成人观看视频免费| 亚洲精品综合一二三区在线| 国产成人精品一区二区三区无码| 亚洲高清国产拍精品青青草原 | 一级一级特黄女人精品毛片| 精品国产免费观看| 精品日产卡一卡二卡三入口| 一级一级特黄女人精品毛片视频| 亚洲精品综合久久中文字幕| 99久久久国产精品免费牛牛| 亚洲国产精品免费视频| 国产91大片精品一区在线观看| 久草视频这里只有精品| assbbwbbwbbwbbwbw精品| 精品国产爽爽AV| 国产精品午夜久久| 国产精品嫩草影院久久| 国产L精品国产亚洲区久久| 国产一区二区精品久久91| 久久亚洲精品无码aⅴ大香| 99热精品在线播放| 99亚洲精品高清一二区| 91精品国产综合久久四虎久久无码一级| 久久影院综合精品| 91嫩草亚洲精品| 999国内精品永久免费视频|