8 #include "../System/TimeManager/time_manager.h"
74 const uint8_t* packet_stock_head = (
const uint8_t*)pl->
packet_stock_;
77 for (i = 0; i < node_num; ++i)
83 for (i = 0; i < node_num - 1; ++i)
164 return (node != NULL) ? node->
next : NULL;
196 new_pl_node->
next = NULL;
228 pos->
next = new_pl_node;
298 else if (head > planed)
302 else if (head == planed || tail == planed)
317 if (curr_ti < planed)
322 else if (curr_ti > planed)
363 for (i = 0; i < bc_length; ++i)
418 if (free_node == NULL)
return NULL;
uint8_t BCE_is_active(const bct_id_t block)
BCT の length の getter
BCT_ACK BCT_make_pos(BCT_Pos *pos, const bct_id_t block, const uint8_t cmd)
BCT_Pos* を引数から作る
BCT_ACK BCT_load_cmd(const BCT_Pos *pos, CommonCmdPacket *packet)
保存データを CCP にコピーする.
uint8_t BCT_get_bc_length(const bct_id_t block)
BCT の length の getter
#define BCT_MAX_BLOCKS
BCのIDの最大数
void CCP_set_ti(CommonCmdPacket *packet, cycle_t ti)
TI を設定
void CCP_set_exec_type(CommonCmdPacket *packet, CCP_EXEC_TYPE type)
EXEC_TYPE を設定
cycle_t CCP_get_ti(const CommonCmdPacket *packet)
TI を取得
@ CCP_EXEC_TYPE_TL_FROM_GS
TL : Timeline Command
static PL_Node * PL_get_free_node_(PacketList *pl)
未使用 Node を新規に取得
const PL_Node * PL_get_tail(const PacketList *pl)
PacketList の active な末端 Node を取得
void PL_clear_list(PacketList *pl)
PacketList をクリア
PL_ACK PL_check_tl_cmd(const PacketList *pl, cycle_t time)
PacketList の先頭と time を比較
PL_ACK PL_drop_node(PacketList *pl, PL_Node *prev, PL_Node *current)
指定された Node を落とす
PL_ACK PL_push_front(PacketList *pl, const void *packet)
PacketList の先頭に packet を挿入
uint16_t PL_get_total_node_num(const PacketList *pl)
PacketList の全 Node 数を返す
uint16_t PL_get_packet_size(const PacketList *pl)
PacketList で使用される packet の型サイズを返す
const PL_Node * PL_get_next(const PL_Node *node)
現 Node から次の Node を取得
PL_ACK PL_insert_after(PacketList *pl, PL_Node *pos, const void *packet)
ある Node の直後に packet を挿入
static PL_ACK PL_drop_head_(PacketList *pl)
先頭 Node を落とす
PL_PACKET_TYPE PL_get_packet_type(const PacketList *pl)
PacketList で使用される packet の型情報 PL_PACKET_TYPE を返す
const PL_Node * PL_get_head(const PacketList *pl)
PacketList の active な先頭 Node を取得
PL_ACK PL_deploy_block_cmd(PacketList *pl, const bct_id_t block, cycle_t start_at)
PacketList 上に BC を展開する
uint16_t PL_count_active_nodes(const PacketList *pl)
PacketList で有効な(実行待ち) Node 数を返す
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 を初期化
PL_ACK PL_insert_tl_cmd(PacketList *pl, const CommonCmdPacket *packet, cycle_t now)
CCP が時系列に並ぶように CCP を挿入する
uint32_t PL_count_executed_nodes(const PacketList *pl)
PacketList で実行された Node 数を返す
PL_ACK PL_drop_executed(PacketList *pl)
先頭 Node を落とす
uint16_t PL_count_inactive_nodes(const PacketList *pl)
PacketList で使用されていない Node 数を返す
int PL_is_full(const PacketList *pl)
PacketList が満杯かどうか
PL_ACK PL_push_back(PacketList *pl, const void *packet)
PacketList の末尾に packet を挿入
int PL_is_empty(const PacketList *pl)
PacketList が空かどうか
CTCP, CTP, CCP のリストとしてのデータ構造を定義. 片方向リストとして実装されている
PL_ACK
PacketList 関連操作のエラーコード
@ PL_TLC_NOT_YET
まだ実行時刻ではない
@ PL_LIST_EMPTY
PacketList が空 (active 無し)
@ PL_BC_INACTIVE_BLOCK
無効な BC
@ PL_TLC_PAST_TIME
実行時間既に経過
@ PL_LIST_FULL
PacketList が満杯 (inactive 無し)
@ PL_BC_TIME_ADJUSTED
同時刻に Node があったため調整せれた
@ PL_PACKET_TYPE_ERR
PL_PACKET_TYPE 関連エラー
@ PL_BC_LIST_CLEARED
PL クリア (初期化, active 全削除) された
@ PL_NO_SUCH_NODE
そんな Node は無い
@ PL_TLC_ALREADY_EXISTS
同時刻に既に Node が存在
PL_PACKET_TYPE
PacketList に格納される packet の型情報
@ PL_PACKET_TYPE_CCP
CommonCmdPacket
@ PL_PACKET_TYPE_CTCP
CommonTlmCmdPacket
@ PL_PACKET_TYPE_CTP
CommonTlmPacket
void * packet
片方向リストに格納される packet. どのような型でも良いように, void.(基本的には CTCP, CTP, CCP を想定)
struct PL_Node * next
次の Node (片方向リスト)
uint16_t packet_size_
PL_Node->packet の型サイズ
uint16_t total_nodes_
全ノード数 (static 確保)
PL_PACKET_TYPE packet_type_
保持する packet の型情報.PL_PACKET_TYPE を参照
PL_Node * inactive_list_head_
確保されている領域の内,使っていないものの先頭
PL_Node * active_list_tail_
確保されている領域の内,使っているものの末端
PL_Node * pl_node_stock_
確保されている PL_Node 領域(配列)全体の先頭
PL_Node * active_list_head_
確保されている領域の内,使っているものの先頭
void * packet_stock_
確保されている packet 領域(配列)全体の先頭
uint16_t active_nodes_
現在片方向リストに入っているノード数
uint32_t executed_nodes_
実行(コマンド) or 配送(テレメ)されたノード数 // FIXME: TODO: テレメのときもカウントアップしてるか確認