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 との闘いが続きます。