Skip to content

SIPF_OBJECT

Fuminori OKUHARA edited this page Mar 23, 2022 · 6 revisions

SIPF_OBJECT: オブジェクト送受信クライアント

SIPF_OBJECTプロトコルでオブジェクトを送信/受信する機能を提供します。

sipf/sipf_object.h

マクロ

SIPF_OBJECTデータ型

マクロ 意味
OBJ_TYPE_UINT8 符号なし8bit整数 0x00
OBJ_TYPE_INT8 符号付き8bit整数 0x01
OBJ_TYPE_UINT16 符号なし16bit整数 0x02
OBJ_TYPE_INT16 符号付き16bit整数 0x03
OBJ_TYPE_UINT32 符号なし32bit整数 0x04
OBJ_TYPE_INT32 符号付き32bit整数 0x05
OBJ_TYPE_UINT64 符号なし64bit整数 0x06
OBJ_TYPE_INT64 符号付き64bit整数 0x07
OBJ_TYPE_FLOAT32 単精度浮動小数点数 0x08
OBJ_TYPE_FLOAT64 倍精度浮動小数点数 0x09
OBJ_TYPE_BIN バイナリ(バイト列) 0x10
OBJ_TYPE_STR_UTF8 文字列(UTF-8) 0x20

型定義

オブジェクト - SipfObjectObject

送受信するオブジェクトを表す構造体。

typedef struct
{
    uint8_t obj_type;
    uint8_t obj_tagid;
    uint8_t value_len;
    uint8_t *value;
} SipfObjectObject;
メンバー
obj_type オブジェクトのデータ型を指定する。 SIPF_OBJECTデータ型マクロ(OBJ_TYPE_*)のいずれかを指定する。
obj_tagid タグIDを指定する。
value_len 値の長さを指定する。
value 値を格納しているバッファへのポインタを指定する。マルチバイト型の値はリトルエンディアンであることを想定している。

OTID - SipfObjectOtid

オブジェクトの送信/受信を一意に表すID。

typedef struct
{
    uint8_t value[16];
} SipfObjectOtid;
メンバー
value OTIDを格納するバッファ。

関数定義

オブジェクト送信 - SipfObjClientObjUpRaw()

バッファで指定された内容を送信する。
送信内容はSIPF_OBJECTプロトコルOBJ_UPコマンドの仕様に従う必要があります。

送信内容の生成はSipfObjectCreateObjUpPayload()で生成することも可能です。

int SipfObjClientObjUpRaw(uint8_t *payload_buffer, uint16_t size, SipfObjectOtid *otid);
引数 説明
payload_buffer [in]送信するペイロードを格納しているバッファへのポインタ
size [in]ペイロード長 Byte単位で指定。最大1012Byte
otid [out]送信を識別するOTID
戻り値 説明
実行成否 成功: 0、失敗: 0以外 失敗時の値はZephyr OSのhttp_clientライブラリのhttp_client_req()の戻り値、socketのerrnoの負の値など

オブジェクト受信 - SipfObjClientObjDown()

SIPF_OBJECTプロトコルOBJ_DOWNコマンドでオブジェクトを受信します。

int SipfObjClientObjDown(SipfObjectOtid *otid, uint8_t *remains, uint8_t *objqty, uint8_t **p_objs, uint8_t **p_user_send_datetime, uint8_t **p_recv_datetime);
引数 説明
otid [out]受信を識別するOTID OTIDを格納する変数へのポインタを指定する
remains [out]未受信の有無 0: 未受信なし, 1: 未受信あり
objqty [out]受信したオブジェクト数 オブジェクト数を格納する変数へのポインタを指定する
p_objs [out]受信バッファ内のオブジェクトへのポインタ ポインタ変数へのポインタを指定する
p_user_send_datetime [out]受信バッファ内のユーザー送信時刻へのポインタ ポインタ変数へのポインタを指定する
p_recv_datetime [out]受信バッファ内のサーバー受信時刻へのポインタ ポインタ変数へのポインタを指定する
戻り値 説明
実行成否 成功: 0、失敗: 0以外 失敗時の値はZephyr OSのhttp_clientライブラリのhttp_client_req()の戻り値、socketのerrnoの負の値など

オブジェクト受信結果の解析 - SipfObjectParse()

オブジェクトの生データをパースしてSipfObjectObject構造体に格納します。

int SipfObjectParse(uint8_t *raw_buff, const uint16_t raw_len, SipfObjectObject *obj);
引数 説明
raw_buff [in]オブジェクトの内容を格納したバッファ バッファへのポインタを指定する
raw_len [in]オブジェクトの内容を格納したバッファのサイズ
obj [out]オブジェクト オブジェクトを格納する変数へのポインタを指定する
戻り値 説明
実行成否 成功: 0、失敗: -1

オブジェクト送信データの生成 - SipfObjectCreateObjUpPayload()

オブジェクト送信時に送るデータを生成します。

int SipfObjectCreateObjUpPayload(uint8_t *raw_buff, uint16_t sz_raw_buff, SipfObjectObject *objs, uint8_t obj_qty);
引数 説明
raw_buff [out]送信データを格納するバッファ データを格納するバッファへのポインタを指定する
sz_raw_buff [in]送信データを格納するバッファのサイズ
objs [in]送信するオブジェクトのリスト リスト(=配列)へのポインタを指定する
obj_qty [in]送信するオブジェクトの数
戻り値 説明
バッファに格納したデータ長 成功: データ長、失敗: -1