SSM
|
Defines | |
#define | SSM_SNAME_MAX 32 |
#define | createSSM_time(n, u, s, l, c) createSSM(n,u,s,l,c) |
Typedefs | |
typedef char * | SSM_sid |
typedef int | SSM_tid |
Enumerations | |
enum | SSM_open_mode { SSM_READ = 0x20, SSM_WRITE = 0x40, SSM_EXCLUSIVE = 0x80, SSM_MODE_MASK = 0xe0 } |
オープンモードのフラグ More... | |
enum | { SSM_ERROR_FUTURE = -1, SSM_ERROR_PAST = -2, SSM_ERROR_NO_DATA = -3 } |
TIDのエラー値 More... | |
Functions | |
void | errSSM (void) |
SSMでエラーが発生したときに詳細を表示する | |
int | initSSM (void) |
SSMへの接続 | |
int | endSSM (void) |
SSMからの切断 | |
SSM_sid | createSSM (const char *stream_name, int stream_id, size_t stream_size, ssmTimeT life, ssmTimeT cycle) __attribute__((warn_unused_result)) |
ストリームの作成 | |
int | releaseSSM (SSM_sid *sid) |
ストリームの破棄 | |
SSM_sid | openSSM (const char *stream_name, int stream_id, char open_mode) __attribute__((warn_unused_result)) |
ストリームへの接続 | |
int | closeSSM (SSM_sid *sid) |
ストリームの破棄 | |
SSM_tid | getTID (SSM_sid sid, ssmTimeT ytime) |
TimeIDの探索 | |
SSM_tid | getTID_top (SSM_sid sid) |
SSM上に存在する最も新しいTimeIDを取得する | |
SSM_tid | getTID_bottom (SSM_sid sid) |
SSM上に存在する最も古いTimeIDを取得する | |
int | waitTID (SSM_sid sid, SSM_tid tid) |
指定したTimeIDになるまで待つ | |
SSM_tid | readSSM (SSM_sid sid, void *data, ssmTimeT *ytime, SSM_tid tid) __attribute__((warn_unused_result)) |
指定したTimeIDのデータを読み込む | |
SSM_tid | readSSM_time (SSM_sid sid, void *data, ssmTimeT ytime, ssmTimeT *ret_time) __attribute__((warn_unused_result)) |
指定した時刻より前で、指定した時刻に最も近いデータを読み込む | |
SSM_tid | readSSMP (SSM_sid sid, void *adata, ssmTimeT *ytime, SSM_tid tid, void(*callback)(const void *ssmp, void *data, void *user_data), void *user_data) __attribute__((warn_unused_result)) |
SSM_tid | readSSMP_time (SSM_sid sid, void *adata, ssmTimeT ytime, ssmTimeT *ret_time, void(*callback)(const void *ssmp, void *data, void *user_data), void *user_data) __attribute__((warn_unused_result)) |
SSM_tid | writeSSM_time (SSM_sid sid, const void *data, ssmTimeT ytime) |
指定したタイムスタンプを付けてデータを書き込む | |
SSM_tid | writeSSM (SSM_sid sid, const void *data, ssmTimeT ytime) |
writeSSM_time と一緒。互換性のため、残してある。 | |
SSM_tid | writeSSMP (SSM_sid sid, const void *adata, ssmTimeT ytime, void(*callback)(void *ssmp, const void *data, void *user_data), void *user_data) |
SSM_tid | writeSSMP_time (SSM_sid sid, const void *adata, ssmTimeT ytime, void(*callback)(void *ssmp, const void *data, void *user_data), void *user_data) |
int | set_propertySSM (const char *stream_name, int stream_id, const void *data, size_t size) |
SSMへのプロパティーの登録 | |
int | get_propertySSM (const char *stream_name, int stream_id, void *data) |
SSMからのプロパティーの取得 | |
int | getSSM_num (void) |
int | getSSM_name (int n, char *stream_name, int *stream_id, size_t *size) |
int | getSSM_info (const char *stream_name, int stream_id, size_t *size, int *num, double *cycle, size_t *property_size) |
int | damp (SSM_sid sid, int mode, int num) |
メモリダンプ |
#define SSM_SNAME_MAX 32 |
センサ名の最大長さ(8n)
typedef char* SSM_sid |
ストリーム記憶用の型
typedef int SSM_tid |
SSMのデータの書き込み回数カウンタ型
anonymous enum |
enum SSM_open_mode |
int closeSSM | ( | SSM_sid * | sid | ) |
ストリームの破棄
[in,out] | sid | SSM管理ID |
1 | 成功 |
0 | 失敗 |
これからのアップデートを考えたとき、プログラム終了時にこの関数を呼び出すことが望ましい。
SSM_sid createSSM | ( | const char * | stream_name, |
int | stream_id, | ||
size_t | stream_size, | ||
ssmTimeT | life, | ||
ssmTimeT | cycle | ||
) |
ストリームの作成
[in] | stream_name | ストリームの名前 |
[in] | stream_id | 同一ストリーム名を区別するための番号 |
[in] | stream_size | ストリームのデータサイズ |
[in] | life | ストリームの保存時間 |
[in] | cycle | ストリームの書き込み周期 |
0 | 失敗 |
SSMはストリームの管理を"名前"と"番号"を使用して管理する。 同一の機能を持つストリームは、名前を同じにし、番号を変えて管理すると分かりやすい。
ストリームのデータサイズは、書き込む構造体(クラス)などのサイズを入れる。
SSMは時刻同期用にリングバッファを構成する。 リングバッファの個数は、life及びcycleに従って確保される。 また、cycleは高速な時刻同期にも利用されるため、できるだけ正確に書くことが望ましい。
終了時には destroySSM() しなければならない。
int damp | ( | SSM_sid | sid, |
int | mode, | ||
int | num | ||
) |
メモリダンプ
int endSSM | ( | void | ) |
SSMからの切断
1 | 成功 |
0 | 失敗 |
SSMの使用をやめる場合に必ず実行すること。
int get_propertySSM | ( | const char * | stream_name, |
int | stream_id, | ||
void * | data | ||
) |
SSMからのプロパティーの取得
[in] | *stream_name | ストリームの名前 |
[in] | stream_id | 同一ストリーム名を区別するための番号 |
[out] | *data | 書き込むデータ |
1 | 成功 |
0 | 失敗 |
TimeIDの探索
[in] | sid | SSM管理ID |
[in] | 目標時間 |
SSM_ERROR_FUTURE | 新しすぎて存在しない |
SSM_ERROR_PAST | 古すぎて存在しない |
SSM_ERROR_NO_DATA | SSM上にデータがまだ存在しない |
SSM上に存在する最も古いTimeIDを取得する
[in] | sid | SSM管理ID |
SSM上に存在する最も新しいTimeIDを取得する
[in] | sid | SSM管理ID |
int initSSM | ( | void | ) |
SSMへの接続
1 | 成功 |
0 | 失敗 |
すべてのSSMの関数を使用する前にかならず実行する。 これを実行しない場合、他の関数は失敗する。
SSM_sid openSSM | ( | const char * | stream_name, |
int | stream_id, | ||
char | open_mode | ||
) |
ストリームへの接続
[in] | stream_name | ストリームの名前 |
[in] | stream_id | 同一ストリーム名を区別するための番号 |
[in] | open_mode | ストリームの書き込み方向を定義できるようにしたい。とりあえず0を書いておけば問題ない。 |
0 | 失敗 |
すでに作成されたストリームへ接続する。
openSSM() した場合は、終了時に closeSSM() を実行する必要がある
指定したTimeIDのデータを読み込む
[in] | sid | SSM管理ID |
[out] | *data | 読み込むデータ |
[out] | *ytime | データの書き込み時間 |
[in] | tid | 読み込みたいTimeID -1を指定すると最新のデータ |
SSM_ERROR_FUTURE | 新しすぎて存在しない |
SSM_ERROR_PAST | 古すぎて存在しない |
SSM_ERROR_NO_DATA | SSM上にデータがまだ存在しない |
指定した時刻より前で、指定した時刻に最も近いデータを読み込む
[in] | sid | SSM管理ID |
[out] | *data | 読み込むデータ |
[out] | ytime | 指定時刻 |
SSM_ERROR_FUTURE | 新しすぎて存在しない |
SSM_ERROR_PAST | 古すぎて存在しない |
SSM_ERROR_NO_DATA | SSM上にデータがまだ存在しない |
int releaseSSM | ( | SSM_sid * | sid | ) |
ストリームの破棄
[in,out] | sid | SSM管理ID |
1 | 成功 |
0 | 失敗 |
現状として、実際にSSMからストリームを破棄できるわけではなく、ストリームから切断するだけである。 しかし、これからのことを考えると、プログラムの最後で必ず実行しておくことを推奨する。
int set_propertySSM | ( | const char * | stream_name, |
int | stream_id, | ||
const void * | data, | ||
size_t | size | ||
) |
SSMへのプロパティーの登録
[in] | *stream_name | ストリームの名前 |
[in] | stream_id | 同一ストリーム名を区別するための番号 |
[in] | *data | 書き込むデータ |
[in] | size | データサイズ |
1 | 成功 |
0 | 失敗 |
create済みのストリームしか登録できないので注意。
指定したTimeIDになるまで待つ
[in] | sid | SSM管理ID |
[in] | tid | 読み込みたいTimeID |
1 | 成功 |
0 | 失敗 |
-1 | エラー |
現状の実装として、waitできるのは1秒のみである。
writeSSM_time と一緒。互換性のため、残してある。