kii-core の利用

Thing SDK Embedded を単体で使用する場合、kii-core が提供する API を使うことによって、タスクの自動的な切り替えをサポートしていない OS(ノンプリエンプティブな OS)でも Kii Cloud SDK を利用することができます。kii-core は、Thing SDK Embedded のソース中の kii-core ディレクトリにあります。

Thing-IF SDK はプリエンプティブな OS でしか利用できません。

Thing SDK Embedded の機能はブロッキング API として提供されているため、API の完了まで制御を戻しません。kii-core では同じ機能をノンプリエンプティブな OS で利用できるように、処理を少しずつ実行できるような設計になっています。

Thing SDK Embedded と kii-core の API は、以下のように使い分けます。

  • ターゲットの OS がノンプリエンプティブなタスク制御しかサポートしていない場合

    ノンプリエンプティブなタスク制御では、時間がかかる処理を行う場合、そのタスクは自主的に他のタスクに処理を譲る必要があります。kii-core の API を繰り返して呼び出すことで、API の機能を少しずつ実行することができます。

  • ターゲットの OS がプリエンプティブなタスク制御を行っている場合

    プリエンプティブなタスク制御では、タスクの切り替えが OS によって自動的に行われます。Thing SDK Embedded の API 呼び出して結果を受け取るというシンプルな利用方法が適しています。

kii-core が提供している API の利用方法は、このガイドでは説明を省略していますが、Thing SDK Embedded のソースコードで参照できます。

たとえば、kii_object_create_with_id() は、kii_object.c で以下のように実装されています。

int ret = -1;
kii_error_code_t core_err;
kii_state_t state;

core_err = kii_core_create_new_object_with_id(
    &kii->kii_core,
    bucket,
    object_id,
    object_data,
    object_content_type);
if (core_err != KIIE_OK) {
  goto exit;
}
do {
  core_err = kii_core_run(&kii->kii_core);
  state = kii_core_get_state(&kii->kii_core);
} while (state != KII_STATE_IDLE);
if (core_err != KIIE_OK) {
  goto exit;
}
if(kii->kii_core.response_code < 200 || 300 <= kii->kii_core.response_code) {
  goto exit;
}

ここで呼び出している、kii_core_create_new_object_with_id()kii_core_run() が kii-core の API です。リクエストを生成後、do~while で少しずつ処理を進めながら、最後に結果を参照しています。

他の API も、これと同様の方法で実装方法を確認できます。