C2A_Core
packet_list.h
[詳解]
1 
5 #ifndef PACKET_LIST_H_
6 #define PACKET_LIST_H_
7 
8 #include <stddef.h>
9 
10 #include "common_cmd_packet.h"
11 #include "block_command_table.h"
12 
13 
14 // 自己参照用
15 typedef struct PL_Node PL_Node;
16 
17 
25 typedef enum
26 {
32 
38 typedef enum
39 {
53 
58 struct PL_Node
59 {
60  void* packet;
61  struct PL_Node* next;
62 };
63 
72 typedef struct
73 {
74  uint16_t total_nodes_;
75  uint32_t executed_nodes_;
76  uint16_t active_nodes_;
77  uint16_t packet_size_;
79 
81  void* packet_stock_;
85 } PacketList;
86 
87 
99 PL_ACK PL_initialize(PL_Node* pl_node_stock,
100  void* packet_stock,
101  uint16_t node_num,
102  PL_PACKET_TYPE packet_type,
103  uint16_t packet_size,
104  PacketList* pl);
105 
112 void PL_clear_list(PacketList* pl);
113 
119 uint32_t PL_count_executed_nodes(const PacketList* pl);
120 
126 uint16_t PL_count_active_nodes(const PacketList* pl);
127 
133 uint16_t PL_count_inactive_nodes(const PacketList* pl);
134 
140 uint16_t PL_get_total_node_num(const PacketList* pl);
141 
147 uint16_t PL_get_packet_size(const PacketList* pl);
148 
155 
162 int PL_is_empty(const PacketList* pl);
163 
170 int PL_is_full(const PacketList* pl);
171 
177 const PL_Node* PL_get_head(const PacketList* pl);
178 
184 const PL_Node* PL_get_tail(const PacketList* pl);
185 
192 const PL_Node* PL_get_next(const PL_Node* node);
193 
201 PL_ACK PL_push_front(PacketList* pl, const void* packet);
202 
210 PL_ACK PL_push_back(PacketList* pl, const void* packet);
211 
221 PL_ACK PL_insert_after(PacketList* pl, PL_Node* pos, const void* packet);
222 
230 
240 PL_ACK PL_drop_node(PacketList* pl, PL_Node* prev, PL_Node* current);
241 
242 
243 // 以下,特定の packet を想定した PacketList の関数
244 
259 
272 PL_ACK PL_deploy_block_cmd(PacketList* pl, const bct_id_t block, cycle_t start_at);
273 
284 PL_ACK PL_check_tl_cmd(const PacketList* pl, cycle_t time);
285 
286 #endif
BCTの定義, BCT周りの関数
uint16_t bct_id_t
CCP 関連基本関数の宣言
uint32_t cycle_t
Definition: obc_time.h:10
PL_ACK
PacketList 関連操作のエラーコード
Definition: packet_list.h:39
@ PL_TLC_NOT_YET
まだ実行時刻ではない
Definition: packet_list.h:47
@ PL_LIST_EMPTY
PacketList が空 (active 無し)
Definition: packet_list.h:42
@ PL_BC_INACTIVE_BLOCK
無効な BC
Definition: packet_list.h:48
@ PL_TLC_PAST_TIME
実行時間既に経過
Definition: packet_list.h:44
@ PL_SUCCESS
成功
Definition: packet_list.h:40
@ PL_LIST_FULL
PacketList が満杯 (inactive 無し)
Definition: packet_list.h:41
@ PL_BC_TIME_ADJUSTED
同時刻に Node があったため調整せれた
Definition: packet_list.h:50
@ PL_PACKET_TYPE_ERR
PL_PACKET_TYPE 関連エラー
Definition: packet_list.h:43
@ PL_TLC_ON_TIME
実行時刻丁度
Definition: packet_list.h:46
@ PL_BC_LIST_CLEARED
PL クリア (初期化, active 全削除) された
Definition: packet_list.h:49
@ PL_NO_SUCH_NODE
そんな Node は無い
Definition: packet_list.h:51
@ PL_TLC_ALREADY_EXISTS
同時刻に既に Node が存在
Definition: packet_list.h:45
const PL_Node * PL_get_tail(const PacketList *pl)
PacketList の active な末端 Node を取得
Definition: packet_list.c:156
void PL_clear_list(PacketList *pl)
PacketList をクリア
Definition: packet_list.c:69
PL_ACK PL_check_tl_cmd(const PacketList *pl, cycle_t time)
PacketList の先頭と time を比較
Definition: packet_list.c:397
PL_ACK PL_drop_node(PacketList *pl, PL_Node *prev, PL_Node *current)
指定された Node を落とす
Definition: packet_list.c:248
PL_ACK PL_push_front(PacketList *pl, const void *packet)
PacketList の先頭に packet を挿入
Definition: packet_list.c:168
uint16_t PL_get_total_node_num(const PacketList *pl)
PacketList の全 Node 数を返す
Definition: packet_list.c:117
uint16_t PL_get_packet_size(const PacketList *pl)
PacketList で使用される packet の型サイズを返す
Definition: packet_list.c:124
const PL_Node * PL_get_next(const PL_Node *node)
現 Node から次の Node を取得
Definition: packet_list.c:162
PL_ACK PL_insert_after(PacketList *pl, PL_Node *pos, const void *packet)
ある Node の直後に packet を挿入
Definition: packet_list.c:214
PL_PACKET_TYPE PL_get_packet_type(const PacketList *pl)
PacketList で使用される packet の型情報 PL_PACKET_TYPE を返す
Definition: packet_list.c:131
const PL_Node * PL_get_head(const PacketList *pl)
PacketList の active な先頭 Node を取得
Definition: packet_list.c:150
PL_ACK PL_deploy_block_cmd(PacketList *pl, const bct_id_t block, cycle_t start_at)
PacketList 上に BC を展開する
Definition: packet_list.c:340
uint16_t PL_count_active_nodes(const PacketList *pl)
PacketList で有効な(実行待ち) Node 数を返す
Definition: packet_list.c:104
PL_PACKET_TYPE
PacketList に格納される packet の型情報
Definition: packet_list.h:26
@ PL_PACKET_TYPE_CCP
CommonCmdPacket
Definition: packet_list.h:29
@ PL_PACKET_TYPE_CTCP
CommonTlmCmdPacket
Definition: packet_list.h:27
@ PL_PACKET_TYPE_CTP
CommonTlmPacket
Definition: packet_list.h:28
@ PL_PACKET_TYPE_OTHER
その他のパケット
Definition: packet_list.h:30
PL_ACK PL_initialize(PL_Node *pl_node_stock, void *packet_stock, uint16_t node_num, PL_PACKET_TYPE packet_type, uint16_t packet_size, PacketList *pl)
static に確保された PL_Node 配列と packet 配列を受け取りその領域を使用して PL を初期化
Definition: packet_list.c:34
PL_ACK PL_insert_tl_cmd(PacketList *pl, const CommonCmdPacket *packet, cycle_t now)
CCP が時系列に並ぶように CCP を挿入する
Definition: packet_list.c:279
uint32_t PL_count_executed_nodes(const PacketList *pl)
PacketList で実行された Node 数を返す
Definition: packet_list.c:97
PL_ACK PL_drop_executed(PacketList *pl)
先頭 Node を落とす
Definition: packet_list.c:236
uint16_t PL_count_inactive_nodes(const PacketList *pl)
PacketList で使用されていない Node 数を返す
Definition: packet_list.c:111
int PL_is_full(const PacketList *pl)
PacketList が満杯かどうか
Definition: packet_list.c:144
PL_ACK PL_push_back(PacketList *pl, const void *packet)
PacketList の末尾に packet を挿入
Definition: packet_list.c:189
int PL_is_empty(const PacketList *pl)
PacketList が空かどうか
Definition: packet_list.c:138
Space Packet (コマンド用)
片方向リストを構成する各 Node
Definition: packet_list.h:59
void * packet
片方向リストに格納される packet. どのような型でも良いように, void.(基本的には CTCP, CTP, CCP を想定)
Definition: packet_list.h:60
struct PL_Node * next
次の Node (片方向リスト)
Definition: packet_list.h:61
パケットリスト本体
Definition: packet_list.h:73
uint16_t packet_size_
PL_Node->packet の型サイズ
Definition: packet_list.h:77
uint16_t total_nodes_
全ノード数 (static 確保)
Definition: packet_list.h:74
PL_PACKET_TYPE packet_type_
保持する packet の型情報.PL_PACKET_TYPE を参照
Definition: packet_list.h:78
PL_Node * inactive_list_head_
確保されている領域の内,使っていないものの先頭
Definition: packet_list.h:82
PL_Node * active_list_tail_
確保されている領域の内,使っているものの末端
Definition: packet_list.h:84
PL_Node * pl_node_stock_
確保されている PL_Node 領域(配列)全体の先頭
Definition: packet_list.h:80
PL_Node * active_list_head_
確保されている領域の内,使っているものの先頭
Definition: packet_list.h:83
void * packet_stock_
確保されている packet 領域(配列)全体の先頭
Definition: packet_list.h:81
uint16_t active_nodes_
現在片方向リストに入っているノード数
Definition: packet_list.h:76
uint32_t executed_nodes_
実行(コマンド) or 配送(テレメ)されたノード数 // FIXME: TODO: テレメのときもカウントアップしてるか確認
Definition: packet_list.h:75