freerunner_platform_hardware_hw
とりあえず Gitrious に signup しないと clone できんのかな、とアカウント作成したんですが、もしかしたら不要だったのかな。
以下で clone できました。
$ git clone git://gitorious.org/android-on-freerunner/freerunner_platform_hardware_hw.git
今から中身確認します。
ぬひひ
これ、そのまま動きそうなカンジ。とりあえず現時点で判明している i/f としては gps_get_hardware_interface なんですが、以下なカンジ。
static const GpsInterface freerunnerGpsInterface = { freerunner_gps_init, freerunner_gps_start, freerunner_gps_stop, freerunner_gps_set_fix_frequency, freerunner_gps_cleanup, freerunner_gps_inject_time, freerunner_gps_delete_aiding_data, freerunner_gps_set_position_mode, freerunner_gps_get_extension, }; const GpsInterface* gps_get_hardware_interface() { return &freerunnerGpsInterface; }
で、init な手続きが以下。
static int freerunner_gps_init(GpsCallbacks* callbacks) { GpsState* s = _gps_state; if (!s->init) gps_state_init(s); if (s->fd < 0) return -1; s->callbacks = *callbacks; return 0; }
gps_state_init な手続きは、というと略し気味で以下。
// look for a kernel-provided device name if (property_get("ro.kernel.android.gps",prop,"") == 0) { D("no kernel-provided gps device name"); return; } if ( snprintf(device, sizeof(device), "/dev/%s", prop) >= (int)sizeof(device) ) { LOGE("gps serial device name too long: '%s'", prop); return; } do { state->fd = open( device, O_RDWR ); } while (state->fd < 0 && errno == EINTR);
system.prop だったかの ro.kernel.android.gps のナニでデバイスファイルを fopen しておられます。別途 Android.mk 確認しつつ libfreerunner_gps な shared をどうやって Android とリンクするのか、を整理しとく必要あり。
おそらく
内容確認は土曜日に、な予定ッス。とりあえず明日は dongle との闘いが続きます。