objective-cをちょい研究!ブログ -18ページ目

objective-cをちょい研究!ブログ

WILLCOMを卒業してiOS開発者に転身しました。。
コメント&トラックバック大歓迎です。

2chのZERO3ソフトスレでライトEメールの受信についての話題があったんで、アプリの可能性について考えてみました。


通常のEメール受信ではライトメール通知→受信という処理が、ライトEメール受信ではライトメール受信の1回だけで済むので、文字数は250文字程度と少ないですがかなり速くなります。


WILLCOM W-ZERO3ソフト関連 Part28
http://hobby11.2ch.net/test/read.cgi/keitai/1214150461/


ZERO3でライトEメールを受信させるためには、ATコマンドを叩いて受信設定(以下LE設定)をONにする必要があります。
LE設定をONにしないで、オンラインサインアップで「ライトEメールを受信する」にすると、ライトEメールセンターからのワンギリが永遠(数日くらい?)来ます(^^; 次の日履歴を見たらセンター番号だらけ… なんて経験したことがある人もいるんじゃないでしょうか。


LE設定をONにすればW-SIMで勝手に受信してくれるんですが、ZERO3ではライトメールとしてもEメールとしても読めません。UUIを使ってる点ではライトメールもライトEメールも同じなんですが、メール受信時にW-SIMからZERO3に通知される識別文字列と、W-SIM内でのデータ格納場所が違います。ZERO3の電話関連を処理するアプリ(shphonelib.dll)ではライトEメールに対応してないので、直接W-SIMを読みに行くアプリを作る必要があります。


さてどのタイミングで読みに行くか。


常時W-SIMを監視する
shphonelibに着信情報が行かなくなるので、電話が取れなくなります(^^;
shphonelibを偽装するか、電話アプリやメールアプリを制御できれば可能かもしれないですが。


着信があったときにW-SIMを読みに行く
LE設定をONにすると着信履歴に番号が残らなくなりました。着信履歴を監視すればよいと思ったんですが…

一瞬画面が真っ青になるので何らかの信号(トリガー)はあるかも知れません。


定期的にW-SIMを読みに行く
W-SIMを読むためにCOMポートを開いて開放するのに数秒かかります。読みに行く間隔を短くすると電話が取れない時間が長くなり、間隔を長くするとせっかく受信が早い特徴が無くなってしまいます。



ということで、ライトEメールの受信だけを考えるなら簡単なんですが、電話機能を温存させるとなると難しそうです。

今回ついにライトEメールの送信方法が判明したんですが、片っ端からATコマンドを叩いてみたので色々と他のコマンドも判明しました。


拡張ライトEメール送信方法を探すつもりが、まず判明したのがDXメールがらみ。


ATDX
DXメール発信。


AT#Xn
DXメールの種別指定。
 #X0 直送メール
 #X1 チャットメール,コンテンツ,サウンドマーケット
 #X2 エッジeメール送信
 #X3 エッジeメール受信
 #X4 エッジeメール送受信

 #X9 オンラインサインアップ


AT@R0:n
DXメールの受信設定。
 AT@R0:0 受信しない
 AT@R0:1 受信する


AT#Xnで設定した番号が着信時に表示されるようになる。#X0だと勝手に着信しちゃいます。
PmailDX=1


SII AH-S101S コマンドリファレンス

AT@Rについて記載されてます



次に判明したのがUUIがらみの着信表示設定。


AT#Pn
ライトメールの受信設定。
 #P1 受信する
 #P2 受信しない(送信側ではエラー表示する)
 #P3 受信しない(送信側では送信完了する)


既に判明分もまとめると以下のとおり
1=受信する、2=受信しない みたいです。


AT#ELn ライトEメール受信
AT#ERn Eメール自動受信
ATUUIAn 着信時にUUIを表示


AT@RMML
W-SIM WIKI に「ローミングメール?」と書いてあったんで、ローミング時のEメール設定がらみだと思ってたんですが、1と2が設定できるので タイローミング設定の通知ライトメールの受信設定っぽい。



ATDI と ATDX があることがわかったんで、ATDA~Zまで全部叩いてみた。


ATDn  ダイアル
ATDEn ライトEメール送信
ATDIn ライトメールダイアル
ATDL リダイヤル
ATDMn 通常発信?
ATDPn パルス発信 (Thanks ごりぽんさん)
ATDTn トーン発信
ATDUn 通常発信?
ATDXn DXメール送信


意外と色々な種類があることが判明。ATDI と ATDE はデータをセットしておかないとERRORになるんで、このほかにもATD系のコマンドはあるかも。

ついに、拡張ライトEメールの送信方法が判明しました\(^^)/

ATコマンドを叩き続けて数ヶ月、この道のりは長かったです…(ToT) (笑


予想通りSレジスタの301にデータをセットでOKでした。
普通のライトメール送信と違って、ヘッターの4文字(128 145 000 013)は要らないみたい。


送り方ですが、ATDIでは無くて、ATDE*900 で送信に成功。


受信したEメールを見てみると、送信文字数90文字の壁を無事に突破っ!!!

1回の送信で宛先・件名・改行を含めて半角211文字までOKでした。


他にも面白い(?)ATコマンドが見つかったので後ほどまとめます。


人気ブログ ←←←ランキング参加中です m(_。__)m


文字コードを数字に変換して・・・なんてのが実験中に面倒になってきたので、早速ですが拡張ライトEメールの送信アプリを即興で作ってみました。


それにしてもライトEメールは速すぎ~。

送信開始から完了までおよそ5秒。

auとsoftbankに送ってみたところ、送信完了から10秒ほどで受信。

通常のEメールならまだ送信すら終わっていない。


LEMail207


バージョンアップ済みです。最新版をダウンロードしてください。

【ダウンロード】

好きなフォルダにおいて下さい。

Compact Framework 2.0が入ってればアドエス以外でも動くと思います。
http://www.ne.jp/asahi/phs/phs/blog/lemail207.lzh


【使い方】
一応画面でも入力できますが、基本的にはコマンドラインで使用します。


LEMail207 宛先 件名 本文 /S /C /M0


例)LEMail207 test@test.jp こんにちは 元気ですか? /S /C /M0


送信できるのは、改行を含めて211文字です。


件名を空にしたい場合は、%0A%0Dを入れて下さい。


本文に改行を入れたい場合は %0A%0D 、空白を入れたい場合は %20 に置き換えて下さい。


/S 自動送信オプション


/C 送信後アプリ終了オプション(/Sと併用)


/M0 送信成功時にメッセージをダイアログ表示しない(/S /Cと併用)



ZERO3の着信音などでMIDIを鳴らしているDLLの調査です。


FRING_LIB.DLLのエクスポート関数名はDependency Walker というソフトで調べることが出来るんだけど、調べた関数の使い方がまったくわからない。


ダミーのエクスポート関数を実装したダミーのFRING_LIB.DLLを作って、元にあったDLLを上書きして、どのように呼ばれているのか調べてみた。
ダミー関数は呼ばれるとログを吐くようにしてある。


着信音の設定でMIDIを視聴してみた結果は以下のとおり。
音は当然ならないが再生中と表示されたのでうまくごまかせている感じ。


fmpj_dll_init 272304 0
fmpj_sys_open 570878756 2
fmpj_data_ex_getformatid 273184 2854
fmpj_player_open 272308 570878724
fmpj_player_setdata 0 570878732
fmpj_data_ex_getformatid 273184 2854
fmpj_info_player_params 570878728 2818
fmpj_player_setparam 0 0
fmpj_player_seek 0 0
fmpj_player_play 0 2
fmpj_sys_close 1 2
fmpj_dll_quit 11272 2

リストの数値は、エクスポート関数の引数がわからないのでint型の引数を2つと仮定して取得してみた結果。


引数の値が大きいものは、ポインタかハンドルの可能性もある。


ここまで調べてみたけど、やっぱり使い方はわからないままでした(^^;

ATコマンド解析用のツールです。

調査用に作っていたツールを手直ししてテスト公開です。


Sendコマンド


【概要】

ATコマンドの送信が出来ます。

反響があればもうちょいちゃんとしたもの作ります。


【ダウンロード】

好きなフォルダにおいて下さい。

Compact Framework 2.0が入ってればアドエス以外でも動くと思います。

http://www.ne.jp/asahi/phs/phs/blog/sendcommand.lzh


★Zero3プログラムランキング★

↑↑やる気アップになりますので投票お願いします↑↑


【使い方】


■ATコマンド

接続ボタンを押してW-SIMに接続します。

送信ボタンでATコマンドを送信できます。

使い終わったら、切断ボタンでW-SIMを開放して下さい。


■その他機能

作成中です。

DeviceIOの設定取得、メニューIDの調査、イベント送信、メッセージ送信機能も付いてまが、使い方はとりあえず聞いてください(^^;