-
Notifications
You must be signed in to change notification settings - Fork 1
SIPF_OBJECT
Fuminori OKUHARA edited this page Mar 23, 2022
·
6 revisions
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 |
送受信するオブジェクトを表す構造体。
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 |
値を格納しているバッファへのポインタを指定する。マルチバイト型の値はリトルエンディアンであることを想定している。 |
オブジェクトの送信/受信を一意に表すID。
typedef struct
{
uint8_t value[16];
} SipfObjectOtid;
メンバー | |
---|---|
value |
OTIDを格納するバッファ。 |
バッファで指定された内容を送信する。
送信内容は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の負の値など |
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の負の値など |
オブジェクトの生データをパースしてSipfObjectObject構造体に格納します。
int SipfObjectParse(uint8_t *raw_buff, const uint16_t raw_len, SipfObjectObject *obj);
引数 | 説明 | |
---|---|---|
raw_buff |
[in]オブジェクトの内容を格納したバッファ | バッファへのポインタを指定する |
raw_len |
[in]オブジェクトの内容を格納したバッファのサイズ | |
obj |
[out]オブジェクト | オブジェクトを格納する変数へのポインタを指定する |
戻り値 | 説明 |
---|---|
実行成否 | 成功: 0、失敗: -1 |
オブジェクト送信時に送るデータを生成します。
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 |