-
Notifications
You must be signed in to change notification settings - Fork 2
/
hako_asset_runner.h
132 lines (114 loc) · 4.63 KB
/
hako_asset_runner.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#ifndef _HAKO_ASSET_RUNNER_H_
#define _HAKO_ASSET_RUNNER_H_
#ifdef __cplusplus
extern "C" {
#endif
#include "hako_capi_types.h"
/***********************
* simulation control
***********************/
/**
* @brief 箱庭アセットの初期化関数
*
* この関数は箱庭アセットを初期化します。
*
* @param[in] asset_name アセット名
* @param[in] config_path 箱庭アセットのコンフィグファイルパス
* @param[in] delta_usec シミュレーションのステップ間隔(マイクロ秒単位)
* @return 初期化が成功した場合は true、失敗した場合は false
*/
extern bool hako_asset_runner_init(const char* asset_name, const char* config_path, hako_time_t delta_usec);
/**
* @brief コールバック関数を登録します。
*
* この関数は、アセットに対してセットアップ、タスク実行、リセットなど
* アクションに関連するコールバック関数を登録します。未登録の場合は、
* 下記に記載の実行タイミングで呼び出しは行われません。
*
* - setup
* - 実行タイミング:箱庭アセットの登録および初期化処理終了後
* - 実行処理内容:シミュレーション実行前に初期化が必要な処理を記載
* - write_initial_pdu_data
* - 実行タイミング:PDUの初期値設定可能なタイミング
* - 実行処理内容:初期値設定したいチャネルに対してPDUの書き込みを行う。未設定の場合はゼロクリア。
* - do_task
* - 実行タイミング:delta_usec単位で呼び出し
* - 実行処理内容:シミュレーション中に実行したい処理を記載
* - reset
* - 実行タイミング:reset イベント発生時
* - 実行処理内容:reset イベントで実行したい処理を記載
*
* @param[in] callback コールバック関数へのポインタを含む構造体へのポインタ
* @return 登録が成功した場合は true、失敗した場合は false
*/
typedef struct {
void (*setup) ();
void (*write_initial_pdu_data) (const char* robot_name, HakoPduChannelIdType lchannel);
void (*do_task) ();
void (*reset) ();
} hako_asset_runner_callback_t;
extern bool hako_asset_runner_register_callback(const hako_asset_runner_callback_t*callback);
/**
* @brief 箱庭アセットの終了関数
*
* この関数は箱庭アセットを終了します。
*/
extern void hako_asset_runner_fin(void);
/**
* @brief 箱庭アセットのステップ関数
*
* この関数は箱庭アセットのシミュレーション時間を1ステップを進めます。
*
* @param[in] increment_step ステップを進める量(箱庭アセットのコンフィグで定義した delta_time_usec 単位)
* @return ステップの進行に成功した場合は true、失敗した場合は false
*/
extern bool hako_asset_runner_step(hako_time_t increment_step);
/***********************
* pdu io
***********************/
/**
* @brief 箱庭アセットのPDU読み取り関数
*
* この関数は指定されたロボットの指定されたローカルチャネルからPDUを読み取ります。
*
* @param[in] robo_name ロボット名
* @param[in] lchannel 論理チャネルID
* @param[out] buffer 読み取られたデータを格納するバッファ
* @param[in] buffer_len バッファの長さ
* @return 読み取りが成功した場合は true、失敗した場合は false
*/
extern bool hako_asset_runner_pdu_read(const char* robo_name, HakoPduChannelIdType lchannel, char* buffer, size_t buffer_len);
/**
* @brief 箱庭アセットのPDU書き込み関数
*
* この関数は指定されたロボットの指定されたローカルチャネルにPDUを書き込みます。
*
* @param[in] robo_name ロボット名
* @param[in] lchannel 論理チャネルID
* @param[in] buffer 書き込むデータが格納されたバッファ
* @param[in] buffer_len バッファ内のデータ長さ
* @return 書き込みが成功した場合は true、失敗した場合は false
*/
extern bool hako_asset_runner_pdu_write(const char* robo_name, HakoPduChannelIdType lchannel, const char* buffer, size_t buffer_len);
extern hako_time_t hako_asset_runner_get_world_time();
/*
* example of api uscase
*/
/*
extern hako_asset_runner_callback_t my_callbacks;
void main(void)
{
hako_asset_runner_init("sample", "./config.json", 1000*10);
hako_asset_runner_register_callback(&my_callbacks);
while (true) {
if (hako_asset_runner_step(1) == false) {
break;
}
}
hako_asset_runner_fin();
}
*/
#ifdef __cplusplus
}
#endif
#endif /* _HAKO_ASSET_RUNNER_H_ */