應(yīng)用,一定要應(yīng)用

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            25 Posts :: 0 Stories :: 118 Comments :: 0 Trackbacks

          #

          自己寫(xiě)的一個(gè)小的發(fā)短信的程序一文中,我提到了一個(gè)我遇到的問(wèn)題:
          用手機(jī)(作為gsm模塊)的話(huà)會(huì)因?yàn)槭謾C(jī)截獲了接收信息而不能達(dá)到聊天的效果,大家如果有什么好的方法可以在這里告訴我,或者給我email,郵箱地址是flyffa@gmail.com
          這兩天我有空來(lái)繼續(xù)深入做的時(shí)候發(fā)現(xiàn)我自己犯了一個(gè)錯(cuò)誤。用手機(jī)不能達(dá)到聊天效果的原因,不是因?yàn)槭謾C(jī)截獲了消息,而是因?yàn)橄⒌拇鎯?chǔ)位置的變化,也就是說(shuō)在簡(jiǎn)單的gsm模塊中(如tc35i)消息是存儲(chǔ)在sim卡中的,而在手機(jī)中,卻是存在于ME中的,這個(gè)是由AT+CNMI決定的。
          AT+CNMI指令語(yǔ)法為 :
          AT+CNMI=[<mode>[,<mt>[,<bm>[,<ds>[,<bfr>]]]]]
          其中mode指的是新短信到來(lái)時(shí)的通知方式。
          而mt就指的是新短信到來(lái)時(shí)的存儲(chǔ)方式。
        1. 0 – 儲(chǔ)存到默認(rèn)的內(nèi)存位置(包括class 3)
        2. 1 – 儲(chǔ)存到默認(rèn)的內(nèi)存位置,并且向TE發(fā)出通知(包括class 3)
        3. 2 – 對(duì)于class 2,儲(chǔ)存到SIM卡,并且向TE發(fā)出通知;對(duì)于其它c(diǎn)lass,直接將消息轉(zhuǎn)發(fā)到 TE
        4. 3 – 對(duì)于class 3,直接將消息轉(zhuǎn)發(fā)到 TE;對(duì)于其它c(diǎn)lass,同mt=1
        5. 這個(gè)默認(rèn)存儲(chǔ)位置就是由手機(jī)決定的了,在gsm0705規(guī)范的3。4。1節(jié)中,我們可以查到一段關(guān)于mt的描述,在具體的mt值的描述在gsm0338中,但這里有一句話(huà)需要注意:but use <mem3> as preferred memory,也就是說(shuō),gsm更加建議采用<mem3>做為默認(rèn)的手機(jī)存儲(chǔ)實(shí)現(xiàn)。

          現(xiàn)在的問(wèn)題就是<mem3>是什么,在gsm0705的3.1節(jié)中,我們可以找到mem3的定義:
          <mem3> string type; memory to which received SMS are preferred to be stored (unless forwarded directly to TE; refer command New Message Indications +CNMI); refer <mem1> for defined values; received CBMs are
          always stored in "BM" (or some manufacturer specific storage) unless directly forwarded to TE; received status reports are always stored in "SR" (or some manufacturer specific storage) unless directlyforwarded to TE
          中間有一段話(huà)說(shuō)值請(qǐng)參考mem1的值,查了一下mem1的值,有以下這些:
          "BM" broadcast message storage
          "ME" ME message storage
          "MT" any of the storages associated with ME
          "SM" SIM message storage
          "TA" TA message storage
          "SR" status report storage

          我再查了一下gsm0705的4.1節(jié),關(guān)于pdu模式下的cmgl命令的執(zhí)行,果然提到了存儲(chǔ)的部分,Execution command returns messages with status value <stat> from preferred message storage <mem1> to the TE.
          這就開(kāi)始有點(diǎn)明白了,gsm模塊的<mem3>和<mem1>應(yīng)該是一致的,所以,我們沒(méi)有發(fā)現(xiàn)問(wèn)題,但是手機(jī)下這兩是不一致的,所以我讀不到任何短信,我想應(yīng)該是這樣了,問(wèn)題是如何讀到呢。
          AT+CPMS提供了方法:
          命令:+CPMS=<mem1>[,<mem2>[,<mem3>]]
          返回:+CPMS: <used1>,<total1>,<used2>,<total2>,<used3>,<total3>

          命令:+CPMS?
          返回:+CPMS: <mem1>,<used1>,<total1>,<mem2>,<used2>,<total2>,<mem3>,<used3>,<total3>

          命令:+CPMS=?
          返回:+CPMS: (list of supported <mem1>s),(list of supported <mem2>s),(list of supported <mem3>s)

          我用Erricsion的t39做了個(gè)測(cè)試,超級(jí)終端下做的:
          at+cpms=?
          +CPMS: ("ME","SM"),("ME","SM"),("ME")

          OK
          at+cpms?
          +CPMS: "SM",0,25,"SM",0,25,"ME",0,40

          OK
          可以看到這里的<mem1>是SM,而<mem3>是ME,這就是問(wèn)題所在了,由于這部手機(jī)的<mem3>不支持SM,所以把<mem1>設(shè)為ME,我的程序就可以運(yùn)行了。
          以上是我解決這個(gè)問(wèn)題的方法,不知道還有沒(méi)有更好更方便的方法,如果有,希望能回復(fù)在blog下,我不甚感激。也歡迎同道中人關(guān)注和討論。

          用tc35i做了個(gè)測(cè)試:
          at+cpms?
          +CPMS: "ME",0,25,"ME",0,25,"SM",0,25

          OK
          at+cpms=?
          +CPMS: ("MT","SM","ME"),("MT","SM","ME"),("MT","SM")

          OK
          這就讓我有點(diǎn)郁悶了,這里的<mem3>和<mem1>不同,可并沒(méi)有象我想象的那樣,接收的短信被放到SIM卡中,而是被放到了ME中,是不是tc35i沒(méi)有按照規(guī)范執(zhí)行呢,請(qǐng)教各位。


          posted @ 2006-06-07 12:02 flyffa 閱讀(1819) | 評(píng)論 (4)編輯 收藏

          20060526
          發(fā)出1.1版本,這個(gè)版本主要是在圖形化界面上做了一些修改,為了提高一定的操作便捷性。
          下載地址:http://www.aygfsteel.com/Files/flyffa/javaSms1.1.rar
          1、將窗口改成了一般的聊天窗口形態(tài),同時(shí)支持alt+s的快捷方式。
          2、窗口大小可拖拽
          3、增加發(fā)送聲音和接收聲音,以及在短信來(lái)的時(shí)候激活窗口
          4、將號(hào)碼欄設(shè)置為下拉框形態(tài),并提供地址自動(dòng)保存功能,生成文件Address

          如果需要了解其他更多,訪(fǎng)問(wèn):
          http://www.aygfsteel.com/flyffa/archive/2006/05/15/46177.html
          posted @ 2006-05-26 11:51 flyffa 閱讀(930) | 評(píng)論 (0)編輯 收藏

               摘要: 1.1. 基本知識(shí) 短信開(kāi)發(fā)指通過(guò)串口 at 命令驅(qū)動(dòng)短信貓進(jìn)行短信發(fā)送和接收操作。 在 java 中 主要使用 javax.comm 包進(jìn)...  閱讀全文
          posted @ 2006-05-15 11:22 flyffa 閱讀(8857) | 評(píng)論 (21)編輯 收藏

          前段時(shí)間公司的工作涉及到了短信部分,寫(xiě)了一些程序,寫(xiě)來(lái)寫(xiě)去,覺(jué)得在電腦上發(fā)短信還是很方便的,就自己給自己寫(xiě)了一個(gè),通過(guò)串口驅(qū)動(dòng)gsm設(shè)備的短信程序。
          說(shuō)是串口,其實(shí)紅外口,藍(lán)牙口,還是usb轉(zhuǎn)換的com口,其實(shí)本質(zhì)都是一樣的,只要能在電腦里找到com口就行了。
          大家有興趣的可以下載下去看看。下載地址列在這篇文檔的下面。

          大多操作都很簡(jiǎn)單,把手機(jī)連上,(紅外,藍(lán)牙,數(shù)據(jù)線(xiàn)都可以)然后啟動(dòng)程序,當(dāng)然,這是java寫(xiě)的程序,你的保證你的path里有$JAVA_HOME/bin的路徑,或者你自己改我的bat文件也行。

          主要要注意的問(wèn)題是波特率的選擇,因?yàn)楦鱾€(gè)手機(jī)的各種連接方式的波特率都是不同的,選擇的波特率不正確容易導(dǎo)致數(shù)據(jù)傳輸問(wèn)題,甚至可能會(huì)失敗。我現(xiàn)在不能自動(dòng)獲取端口的波特率,大家如果有什么好的方法可以在這里告訴我,或者給我email,郵箱地址是flyffa@gmail.com

          當(dāng)然,你的手機(jī)要能支持標(biāo)準(zhǔn)的at命令了,程序是通過(guò)at命令完成的,比如發(fā)送的時(shí)候是at+cmgs,接收的時(shí)候用的是at+cmgl。

          有一個(gè)地方需要注意,我為了避免sim卡中的信息上溢,隔段時(shí)間就會(huì)把sim中的信息刪除一次,呵呵,大家卡里有什么重要的內(nèi)容最好提前保存起來(lái)。(1。2版本之后就不再自動(dòng)刪除了)

          程序?qū)懙倪€很不完善,后續(xù)慢慢支持吧。

          unix/linux主機(jī)沒(méi)有測(cè)過(guò),不過(guò)都是標(biāo)準(zhǔn)java,改起來(lái)應(yīng)該也不難,后面有時(shí)間再繼續(xù)支持吧。

          歡迎各路高手交流。

          使用說(shuō)明:
          1、jdk1.4以上支持,請(qǐng)正確配置path,或者自行修改javaSms.bat中的命令。
          2、gsm模塊一臺(tái),可以是專(zhuān)門(mén)的gsm模塊,也可以是一些支持at命令的手機(jī)。
          3、程序在simens的tc35i模塊上開(kāi)發(fā)。用simens的s75,nokia的3230手機(jī)紅外測(cè)試通過(guò)。
          4、西門(mén)子的SX1不能支持,由于其com口(紅外,數(shù)據(jù)線(xiàn),藍(lán)牙)被內(nèi)置的fax模塊接管,不能直接連到gsm模塊上,說(shuō)白了就是不支持at命令,特別說(shuō)明的原因是我的機(jī)器就是SX1,苦啊。
          5、手機(jī)或者gsm設(shè)備正確連接上電腦之后,設(shè)備管理里面應(yīng)該出現(xiàn)一個(gè)新的com口(數(shù)據(jù)線(xiàn)方式連接),或者出現(xiàn)新的紅外設(shè)備(紅外方式連接),或者藍(lán)牙設(shè)備(藍(lán)牙方式連接),找到后通過(guò)屬性可以查看其最高波特率,這個(gè)能有效幫助你選擇javaSms的連接波特率。


          20060405
          發(fā)出第一版:
          下載地址:http://www.aygfsteel.com/Files/flyffa/javaSms.rar
          底層包實(shí)現(xiàn)了短信發(fā)送,超長(zhǎng)短信發(fā)送,wap-push發(fā)送,超長(zhǎng)wap-push發(fā)送
          圖形界面實(shí)現(xiàn)短信發(fā)送,超長(zhǎng)短信發(fā)送。
          圖形界面支持com口選擇,波特率選擇。

          未支持:
          wap-push接收,超長(zhǎng)短信接收。
          除了發(fā)送接收之外的其余四種短信格式,均未支持。

          20060526
          發(fā)出1.1版本,這個(gè)版本主要是在圖形化界面上做了一些修改,為了提高一定的操作便捷性。
          下載地址:http://www.aygfsteel.com/Files/flyffa/javaSms1.1.rar
          1、將窗口改成了一般的聊天窗口形態(tài),同時(shí)支持alt+s的快捷方式。
          2、窗口大小可拖拽
          3、增加發(fā)送聲音和接收聲音,以及在短信來(lái)的時(shí)候激活窗口
          4、將號(hào)碼欄設(shè)置為下拉框形態(tài),并提供地址自動(dòng)保存功能,生成文件Address

          20060607
          1.2版本,下載地址
          http://www.aygfsteel.com/Files/flyffa/javaSms1.2.rar
          1、對(duì)聯(lián)通手機(jī)號(hào)碼進(jìn)行支持,主要的處理就是在短信中心的控制上
          2、對(duì)容錯(cuò)能力進(jìn)行提高,對(duì)于發(fā)送失敗的信息,加以提示.
          3、解決以手機(jī)做為gsm模塊時(shí)不能正常接收短信的問(wèn)題,從而達(dá)到聊天的效果。
          4、停止自動(dòng)刪除短消息的功能。

          posted @ 2006-05-15 11:10 flyffa 閱讀(7699) | 評(píng)論 (65)編輯 收藏

          向dudu申請(qǐng)了這個(gè)站點(diǎn)有些日子了,一直被些瑣事纏身,一篇都沒(méi)有貼,實(shí)在是汗顏,今天先開(kāi)個(gè)張吧,回頭有空再把該發(fā)的都發(fā)上來(lái)。
          做Java也有些年頭了,中間也涉及到了各種各樣其他的技術(shù),寫(xiě)到這里,算是做個(gè)整理和記載吧。
          過(guò)兩天把手頭的項(xiàng)目忙完,再做個(gè)細(xì)致的分類(lèi)吧。
          歡迎各路高手交流。

          posted @ 2006-05-12 11:43 flyffa 閱讀(165) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題
          共3頁(yè): 上一頁(yè) 1 2 3 
          主站蜘蛛池模板: 乌海市| 微山县| 图片| 东宁县| 鹤壁市| 玛曲县| 菏泽市| 石阡县| 张家川| 太和县| 龙山县| 黄冈市| 西林县| 南部县| 象州县| 北海市| 浏阳市| 内黄县| 池州市| 大化| 鄂温| 城口县| 长岛县| 昔阳县| 大姚县| 桦南县| 盘山县| 和政县| 华容县| 新营市| 闸北区| 县级市| 弥勒县| 德化县| 衡阳市| 洪雅县| 三穗县| 祥云县| 黄陵县| 八宿县| 措美县|