2014年5月5日

[ios]SensorTagのiBeaconパケット

BLEのスニファで、SensorTagのiBeaconパケットを取ってみた。
iBeaconというよりも、BLEがまだよくわかっていないので、そこからだ。
Core_V4.1の"Core System Package [Low Energy Controller volume] PartB  LINK LAYER SPECIFICATION"に説明がありそうだ。

image

 

iBeaconは、「俺ここにいるぜ!」のようなビーコンパケットに特定のフォーマットを持たせたものだ、という認識。
サザエのしっぽを、苦いから切り捨てるか、これはつまみによいと思って食べるか、の違いみたいなものか。
通信めいたものはAdvertisingだけで、あとは受信側がそれを解析して、好きなように使うだけなんだろう。

image


image

image

まず、ADV_NON_CONN_INDから。
Core_v4.1のp.2507 2.3.1.3 ADV_NONCONN_IND。
このPDUは、non-connectable undirected advertisingイベントで使うものらしい。
接続せず、特定の相手向けでもない、ということか。

image

Lengthが33で、AdvAが6ということは、AdvDataは27ということになる。
AdvAは、advertiser's public(TxAdd=0) or random(TxAdd=1) device addressが載っているらしい。TxAddは0だから、SensorTag固有の値か、TI固有の値か、そんなのなんだろう。
AdvDataには、advertiser's HostからのAdvertising Dataが載っているとのこと。

Advertising Dataのフォーマットみたいなものが見当たらない。これがいいのか?
https://www.bluetooth.org/en-us/specification/assigned-numbers/generic-access-profile


image

ここからは、iBeaconのデータと言うことになる。
http://stackoverflow.com/questions/18906988/what-is-the-ibeacon-bluetooth-profile

1A : データ長。AdvDataが27バイトなので、残り26バイト。

FF : <<Manufacturer Specific Data>> CSS v4.pdf
image

4C, 00 : Company Identifier Code。これがAppleのコードらしい。

02, 15 : iBeacon advertisement indicator

FA, 5F, 55, D9, BC, 63, 40, 2E, A2, 54, 09, 1B, 8F, E8, C9, 91 : iBeacon proximity uuid

00, 01 : major
00, 01 : minor

C5 : Tx Power

2014年5月4日

[ios]iBeaconの通知は、ロック状態を突き抜けるほどではない?

後日談あり
http://hiro99ma.blogspot.com/2014/05/iosibeacon_5.html

TIのSensorTagをiBeaconモードで使っていて気付いたのだが、ロック状態で通知センターに表示するようにしていても、確かにロック画面には表示されるのだが突き抜けて表示するってほどではないんだな。

何を言ってるのかわからんかもしれんが・・・。
例えば、時計アプリで目覚ましをかけていると、ロック状態でLCDがオフの状態でも、それを突き破って通知してくるじゃないか(通知センターとは違うんだけど)。
そうじゃないんだな、というだけの話だ。

 

通知センターの動作とは、またちょっと違うと思うのだな。
普段お仕事でやってるアプリなんかは、基本的にロック状態でも突き抜けるようになっている(なっていた)ので、なんかそういう風に作ってあるんだろう。
こういう、小技というか、こういうことをしたいとき、みたいなのをうまく探し出せないんだよなぁ。。。

[ios]SensorTagのiBeaconモードがわかった気がする

TIのSensorTagだが、iBeaconにもなるFWが公開されているのは把握していた。
そして、それを焼いていたのだが、どう使うのかわかっていなかった。
iBeaconアプリがそもそもどういう動きをするのかもわかってなかったので、何かしないと使えんのか、というくらいの認識だったけど、ようやくわかった気がする(弱い・・・)。

 

まず、SensorTagのアプリをAppStoreからダウンロードする。
どうも、"SensorTag"と"Multitool"というものがあるらしいのだが、違いがよくわからない。。。
私はSensorTagを使っていたので、それでFWを焼いた。
以下のサイトを見ると、SensorTag_iBeacon_BeataB_v1_0.bin、を焼くように書いてあるし、私が焼いたときもそうだったんだけど、今のアプリを見るとAとBしかないな。。。
統合されたのかもしれないが、焼いてないからわからない。
http://processors.wiki.ti.com/index.php/SensorTag_with_iBeacon

 

さて、焼いてからSensorTagアプリに接続すると、ボタンとか温度とかの設定のある画面の下の方に、iBeacon Configurationというものが出てくる。
出てくるのか、出てきたのかはよくわからない。。。
デフォルト値は、こうなっているようだ。

  • iBeacon Major : 0x0001
  • iBeacon Minor : 0x0001
  • iBeacon TX Power : -59
  • iBeacon Interval 16390

 よくわからんが、このままにしておこう。

 

ここでもう1つアプリをインストールしておこう。
"iBeacon Loc"というアプリだ。
これが、SensorTagのiBeaconアプリというかになるみたいだ。
起動すると、部屋割りっぽい画面が出てくる。
ここで、SensorTagの横ボタンを長押し! 2秒らしい。
そうすると、画面にSensorTagが出てくるんじゃないかと思う。
赤い輪っかが点滅していないだろうか。

輪っかは3重になっていて、Far、Near、Immidiate、の意味らしい。
これは、iBeaconの「距離」だったと思う。


さて、このSensorTagがどう動いているのかというのが、よくわかっていない。
横ボタンを短押しするとデフォルトモードで、2秒押しでiBeaconモード。
SensorTagにはD1とD2のLEDがあるけど、D1が点滅するときがデフォルトモードで、D2が点滅するときがiBeaconモードのような気がする。

そして、iBeacon Locをインストールしておけば、アプリ起動していなくてもSensorTagがiBeaconモードになると通知センターに表示されるようだ。
話には聞いていたけど「本当なんだー」というのが、正直な感想だ。
ほら、iOSアプリって起動していないと何もしない、というイメージがあるではないか。

2014年4月29日

[ios]not very useful...

威嚇アプリがRejectされたショックが、意外と大きい。
いや、Rejectされたショックよりも、Rejectされた理由、いやいや、Rejectされた理由の文言にだ。

not very useful...
not very useful...
not very useful...

なんかもう、3回くらいエコー付きで叫びたくなるようなセリフだ。
せっかくあんたのAppStoreの1つに加えてあげようと思ってアップしたのに、その口の利き方は何?
親の顔がみたいったらありゃしない、きぃぃぃぃ!!

 

泣くこと地頭にはかなわんというが、最近はAppleとAmazonとかも加わりそうだ。
機能を追加するしかないのだろうが、なにやればいいかさっぱり思いつかん。

2014年4月26日

[ios]初レビュー! そして差し戻し・・・

(私にしては)がんばって作ったIKAKU Saver。
iTunes Connectに申請して4日目。ようやくレビューへ!

どうでもいいことを先に書くと、Android端末でiCloudのメールを受けられずに困っていた。
私のiPad miniは目覚まし用なので、仕事先で使うのはNexus7なのだ。
(それも、ほとんど使わないけどさ。。)
http://support.apple.com/kb/ht4864?viewlocale=ja_JP&locale=ja_JP
↑ここに、つなぎ方が書いてあった。
SMTP情報は、STARTTLSにする、というくらいか。


こんなメールが来ます。

Subject : IKAKU Saver: App Submission Feedback
Body:

Hello hiro99ma,

Your app IKAKU Saver has been reviewed, but we are unable to post this version. For details, or to directly contact the App Review team, visit the Resolution Center in iTunes Connect. Do not reply to this email.

Regards,

App Review

 

いやあ、一発でうまく行くとは期待してなかったけど、哀しいねぇ。
では、このResolution Centerなるものを見てみよう。
そうすると、だめな理由が書いてあった。

image

2.12: Apps that are not very useful, are simply web sites bundled as apps, or do not provide any lasting entertainment value may be rejected

直訳すると、こんな感じか。

特に便利ってわけでもないしぃ、エンタテイメント性もないしぃ、このままだとリジェクトになるぞぉ

ひ、ひどい・・・。
いや、確かに便利ではないよ。
でもね、指にキャラクターがついていくのって、それなりにエンタテイメント性がないとはいえないじゃないか。


ちょっと憤りを感じつつ、対策のためにネット検索すると、やはりたくさん出てきた。

https://www.google.co.jp/search?q=ios+reject+2.12&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox-a

先頭の2つが、気持ち的に役立った。
戦うのもあり、アプリの実装を追加するもあり。

むむー。
追加するのは面倒だから、もう少し戦ってみますか。

2014年4月21日

[ios]XcodeのValidateでネットワーク接続できないときは、Xcode再起動

Androidで作っていた「威嚇!セイバー!!」を、iOSに移植してみた。
内容はいいとして(いいのか?)、AppStoreへの申請がよくわからんかった。

手順はいろいろなサイトに書いてあるんだけど、DistributionのProvisioningがうまくXcodeに取り込めない。
Organizerに突っ込んでみても、なんか怒られる。

そっちは置いておいて、Archiveビルドして、OrganizerからValidateしてみた。
最初は「そんなアプリない」って怒られたのだが、これはiTunes connectで「Ready to Upload Binary」というボタンが出てきて押さないといかんかった。
最初は出てなかったように思うので、時間が少しかかるのかもしれん。

それを押すと、Validateが進んだ。
が、時間がかかるなあ、と思っているとネットワークが切断されたとかつながらなかったとか、そんな感じのメッセージが出てきた。
2回やったけど、だめ。
うーむ。

Stackoverflowで検索すると、Xcodeを再起動するとよかった、とあった。
再起動したら、できた。
なんじゃそりゃあああああ。


今は、Waiting For Reviewになってる。
まあ、1回は「スクリーンショットが足らん」と返されたんだけど、それを設定したらおとなしくなっている。
はてさて、どうなることやら。

2014年4月20日

[ios]animateWithDurationは途中で実行すると終点から始まるようだ


実装の練習として、威嚇アプリをiOSに移植しようとしている。
やっぱり、実践しないとね。

animateWithDurationで、UIImageViewのcenterをじりじり動かそうとしている。
さて、問題は途中でアニメーションを終わらせられるかどうかだ。
アニメーション中と終了時とで呼ばれるBlockは記載するようだが、

試しに、animateWithDurationでアニメーションが終わらない間にもう一度呼んでみた。
うーん・・・UIImageViewの位置がアニメーション後の位置に移動してから始まるようだ。
animationsとcompletionにログを出すと、animationsのあとでcompletionがNOで呼ばれるようだ。そのときの座標はアニメーション開始時の座標みたい。
Androidも確かそうだったが、移動中の座標ではないのだな。

それと、animationsの処理は移動中に呼び出されるわけではないので、その中で動的に移動方向を変えるようなことをしてもだめだよ。

私がやりたいことをやるには、これではだめそうだ、ということはわかった。

2014年4月13日

[rpi]クロスコンパイラはどれがよいのだろう

急に、Raspberry Piの実行環境を素から作ってみたくなった。
ああ、現実逃避さ。

素から、といっても、buildrootでやるつもりだ。


gitでbuildrootを取ってくる。
http://buildroot.uclibc.org/download.html

Raspberry Piのクロスコンパイラは、ここ
https://github.com/raspberrypi/tools/tree/master/arm-bcm2708

ん、クロスコンパイラが4つある?

  • arm-bcm2708-linux-gnueabi
  • arm-bcm2708hardfp-linux-gnueabi
  • gcc-linaro-arm-linux-gnueabihf-raspbian
  • gcc-linaro-arm-linux-gnueabihf-raspbian-x64

arm-bcm2708は2年前で、gcc-linaroは新しく更新されていた。
じゃあ、linaroのがよいのか?
というよりも、違いは??

http://airwiki.ws.dei.polimi.it/index.php/Cross-compiling_for_the_RaspberryPi
ここを読むと「最適化とFPUサポートがあるからこれを使うぜ」みたいに書いてあるから、どれでもいいんだろう。

2014年4月12日

[nfc]NFC Forumのドキュメント更新

NFC Forumの技術文書が更新されていた。

http://nfc-forum.org/our-work/specifications-and-application-documents/specifications/specification-status/

リストがあるが、一番下に「Last updated」があるので、ここを覚えておくのが良いだろう。
今は、4月2日更新だ。

内容は読まず、日付だけでいくと、以下が更新されていた。

  • Type n Tag Operation
  • Connection Handover
  • LLCP
  • Digital Protocol
  • Activity
  • NCI

今年になって更新された文書が上記だった、ということだ。

2014年4月2日

FeliCa Linkのドキュメント

FeliCa Linkのドキュメントが公開されていた。

http://www.sony.co.jp/Products/felica/business/tech-support/index.html#Link01

読みたいのだが・・・時間がない(睡眠の)。
ざっと読むと、なかなか面白そうな代物だ。

  • NFC-DEP(212kbps/424kbps)が使える
  • FeliCa Liteと互換のモードがある
  • 電池がなくても動ける状態がある
  • リーダライタモードがある(FeliCa通信、とあるので、NFC-F仕様の範囲内のみか?)
  • I2C

単純にFeliCa Plugの置き換えかと思ったが、かなり多機能になっている。
試してみたいのだが、遊ぶ時間もないが、売ってるところもない。
スイッチサイエンスさんだろうと思って毎日チェックしてるんだけどなぁ。。。