C2A_Core
packet_list.h ファイル

CTCP, CTP, CCP のリストとしてのデータ構造を定義. 片方向リストとして実装されている [詳解]

#include <stddef.h>
#include "common_cmd_packet.h"
#include "block_command_table.h"
packet_list.h の依存先関係図:
被依存関係図:

[ソースコード]

データ構造

struct  PL_Node
 片方向リストを構成する各 Node [詳解]
 
struct  PacketList
 パケットリスト本体 [詳解]
 

型定義

typedef struct PL_Node PL_Node
 

列挙型

enum  PL_PACKET_TYPE { PL_PACKET_TYPE_CTCP , PL_PACKET_TYPE_CTP , PL_PACKET_TYPE_CCP , PL_PACKET_TYPE_OTHER }
 PacketList に格納される packet の型情報 [詳解]
 
enum  PL_ACK {
  PL_SUCCESS , PL_LIST_FULL , PL_LIST_EMPTY , PL_PACKET_TYPE_ERR ,
  PL_TLC_PAST_TIME , PL_TLC_ALREADY_EXISTS , PL_TLC_ON_TIME , PL_TLC_NOT_YET ,
  PL_BC_INACTIVE_BLOCK , PL_BC_LIST_CLEARED , PL_BC_TIME_ADJUSTED , PL_NO_SUCH_NODE
}
 PacketList 関連操作のエラーコード [詳解]
 

関数

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 を初期化 [詳解]
 
void PL_clear_list (PacketList *pl)
 PacketList をクリア [詳解]
 
uint32_t PL_count_executed_nodes (const PacketList *pl)
 PacketList で実行された Node 数を返す [詳解]
 
uint16_t PL_count_active_nodes (const PacketList *pl)
 PacketList で有効な(実行待ち) Node 数を返す [詳解]
 
uint16_t PL_count_inactive_nodes (const PacketList *pl)
 PacketList で使用されていない Node 数を返す [詳解]
 
uint16_t PL_get_total_node_num (const PacketList *pl)
 PacketList の全 Node 数を返す [詳解]
 
uint16_t PL_get_packet_size (const PacketList *pl)
 PacketList で使用される packet の型サイズを返す [詳解]
 
PL_PACKET_TYPE PL_get_packet_type (const PacketList *pl)
 PacketList で使用される packet の型情報 PL_PACKET_TYPE を返す [詳解]
 
int PL_is_empty (const PacketList *pl)
 PacketList が空かどうか [詳解]
 
int PL_is_full (const PacketList *pl)
 PacketList が満杯かどうか [詳解]
 
const PL_NodePL_get_head (const PacketList *pl)
 PacketList の active な先頭 Node を取得 [詳解]
 
const PL_NodePL_get_tail (const PacketList *pl)
 PacketList の active な末端 Node を取得 [詳解]
 
const PL_NodePL_get_next (const PL_Node *node)
 現 Node から次の Node を取得 [詳解]
 
PL_ACK PL_push_front (PacketList *pl, const void *packet)
 PacketList の先頭に packet を挿入 [詳解]
 
PL_ACK PL_push_back (PacketList *pl, const void *packet)
 PacketList の末尾に packet を挿入 [詳解]
 
PL_ACK PL_insert_after (PacketList *pl, PL_Node *pos, const void *packet)
 ある Node の直後に packet を挿入 [詳解]
 
PL_ACK PL_drop_executed (PacketList *pl)
 先頭 Node を落とす [詳解]
 
PL_ACK PL_drop_node (PacketList *pl, PL_Node *prev, PL_Node *current)
 指定された Node を落とす [詳解]
 
PL_ACK PL_insert_tl_cmd (PacketList *pl, const CommonCmdPacket *packet, cycle_t now)
 CCP が時系列に並ぶように CCP を挿入する [詳解]
 
PL_ACK PL_deploy_block_cmd (PacketList *pl, const bct_id_t block, cycle_t start_at)
 PacketList 上に BC を展開する [詳解]
 
PL_ACK PL_check_tl_cmd (const PacketList *pl, cycle_t time)
 PacketList の先頭と time を比較 [詳解]
 

詳解

CTCP, CTP, CCP のリストとしてのデータ構造を定義. 片方向リストとして実装されている

packet_list.h に定義があります。

型定義詳解

◆ PL_Node

typedef struct PL_Node PL_Node

packet_list.h1 行目に定義があります。

列挙型詳解

◆ PL_ACK

enum PL_ACK

PacketList 関連操作のエラーコード

覚え書き
uint8_t を想定
列挙値
PL_SUCCESS 

成功

PL_LIST_FULL 

PacketList が満杯 (inactive 無し)

PL_LIST_EMPTY 

PacketList が空 (active 無し)

PL_PACKET_TYPE_ERR 

PL_PACKET_TYPE 関連エラー

PL_TLC_PAST_TIME 

実行時間既に経過

PL_TLC_ALREADY_EXISTS 

同時刻に既に Node が存在

PL_TLC_ON_TIME 

実行時刻丁度

PL_TLC_NOT_YET 

まだ実行時刻ではない

PL_BC_INACTIVE_BLOCK 

無効な BC

PL_BC_LIST_CLEARED 

PL クリア (初期化, active 全削除) された

PL_BC_TIME_ADJUSTED 

同時刻に Node があったため調整せれた

PL_NO_SUCH_NODE 

そんな Node は無い

packet_list.h38 行目に定義があります。

◆ PL_PACKET_TYPE

PacketList に格納される packet の型情報

覚え書き
uint8_t を想定
基本的に PacketList は任意の packet 型を格納できるようにしているが,特定のメソッドが特定の型を要求するため,作っている 以下で定義されている型については,それを指定して PL_initialize を呼び出すことを推奨する(内部でアサーションなどもかかるので)
列挙値
PL_PACKET_TYPE_CTCP 

CommonTlmCmdPacket

PL_PACKET_TYPE_CTP 

CommonTlmPacket

PL_PACKET_TYPE_CCP 

CommonCmdPacket

PL_PACKET_TYPE_OTHER 

その他のパケット

packet_list.h25 行目に定義があります。

関数詳解

◆ PL_check_tl_cmd()

PL_ACK PL_check_tl_cmd ( const PacketList pl,
cycle_t  time 
)

PacketList の先頭と time を比較

覚え書き
TimeLine だけでなく TaskList もこれを使い,その場合, time は step_t になることに注意
引数
[in]plPacketList
[in]time比較する時刻
戻り値
PL_TLC_ON_TIMEちょうど
PL_TLC_PAST_TIME過去
PL_TLC_NOT_YETまだ指定時刻になっていない or PacketList が空
PL_PACKET_TYPE_ERR指定した PacketList の packet が CCP ではない

packet_list.c397 行目に定義があります。

呼び出し関係図:
被呼び出し関係図:

◆ PL_clear_list()

void PL_clear_list ( PacketList pl)

PacketList をクリア

引数
[in,out]plクリアする PacketList
戻り値
void
覚え書き
全 active Node を削除して 全て inactive の stock にする

packet_list.c69 行目に定義があります。

被呼び出し関係図:

◆ PL_count_active_nodes()

uint16_t PL_count_active_nodes ( const PacketList pl)

PacketList で有効な(実行待ち) Node 数を返す

引数
[in]plPacketList
戻り値
有効な(実行待ち) Node 数

packet_list.c104 行目に定義があります。

被呼び出し関係図:

◆ PL_count_executed_nodes()

uint32_t PL_count_executed_nodes ( const PacketList pl)

PacketList で実行された Node 数を返す

引数
[in]plPacketList
戻り値
実行された Node 数

packet_list.c97 行目に定義があります。

被呼び出し関係図:

◆ PL_count_inactive_nodes()

uint16_t PL_count_inactive_nodes ( const PacketList pl)

PacketList で使用されていない Node 数を返す

引数
[in]plPacketList
戻り値
使用されていない Node 数

packet_list.c111 行目に定義があります。

被呼び出し関係図:

◆ PL_deploy_block_cmd()

PL_ACK PL_deploy_block_cmd ( PacketList pl,
const bct_id_t  block,
cycle_t  start_at 
)

PacketList 上に BC を展開する

覚え書き
TimeLine だけでなく TaskList もこれを使い,その場合, start_at は step_t になることに注意
引数
[in,out]plBC を展開する PacketList
[in]block展開する BC の ID
[in]start_at開始基準時刻
戻り値
PL_SUCCESS成功
PL_BC_INACTIVE_BLOCKblock が不正
PL_BC_LIST_CLEAREDPacketList の空き容量が不足していたため,強制的に clear した場合
PL_BC_TIME_ADJUSTED時間調整が施された場合
PL_PACKET_TYPE_ERR指定した PacketList の packet が CCP ではない

packet_list.c340 行目に定義があります。

呼び出し関係図:
被呼び出し関係図:

◆ PL_drop_executed()

PL_ACK PL_drop_executed ( PacketList pl)

先頭 Node を落とす

引数
[in]plPacketList
戻り値
PL_SUCCESS成功
PL_LIST_EMPTYPacketList が空

packet_list.c236 行目に定義があります。

呼び出し関係図:
被呼び出し関係図:

◆ PL_drop_node()

PL_ACK PL_drop_node ( PacketList pl,
PL_Node prev,
PL_Node current 
)

指定された Node を落とす

引数
[in]plPacketList
[in]prev落とす直前 Node. current が先頭の場合は NULL
[in]current落とす Node
戻り値
PL_SUCCESS成功
PL_LIST_EMPTYPacketList が空
PL_NO_SUCH_NODE引数で指定したような Node は存在しない

packet_list.c248 行目に定義があります。

呼び出し関係図:
被呼び出し関係図:

◆ PL_get_head()

const PL_Node* PL_get_head ( const PacketList pl)

PacketList の active な先頭 Node を取得

引数
[in]plPacketList
戻り値
active な先頭 Node

packet_list.c150 行目に定義があります。

被呼び出し関係図:

◆ PL_get_next()

const PL_Node* PL_get_next ( const PL_Node node)

現 Node から次の Node を取得

引数
[in]node現 Node
戻り値
次のNode
NULL(現 Node が末尾の場合)

packet_list.c162 行目に定義があります。

被呼び出し関係図:

◆ PL_get_packet_size()

uint16_t PL_get_packet_size ( const PacketList pl)

PacketList で使用される packet の型サイズを返す

引数
[in]plPacketList
戻り値
packet の型サイズ

packet_list.c124 行目に定義があります。

◆ PL_get_packet_type()

PL_PACKET_TYPE PL_get_packet_type ( const PacketList pl)

PacketList で使用される packet の型情報 PL_PACKET_TYPE を返す

引数
[in]plPacketList
戻り値
packet の型情報

packet_list.c131 行目に定義があります。

被呼び出し関係図:

◆ PL_get_tail()

const PL_Node* PL_get_tail ( const PacketList pl)

PacketList の active な末端 Node を取得

引数
[in]plPacketList
戻り値
active な末端 Node

packet_list.c156 行目に定義があります。

被呼び出し関係図:

◆ PL_get_total_node_num()

uint16_t PL_get_total_node_num ( const PacketList pl)

PacketList の全 Node 数を返す

引数
[in]plPacketList
戻り値
全 Node 数

packet_list.c117 行目に定義があります。

◆ PL_initialize()

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 を初期化

引数
[in]pl_node_stock使用する PL_Node 配列
[in]packet_stockPL_Node として使用する packet の配列(メモリ確保用)
[in]node_numPL_Node の数
[in]packet_type保持する packet の型情報.PL_PACKET_TYPE を参照
[in]packet_size使用する packet の型サイズ
[in,out]pl初期化する PacketList
戻り値
PL_SUCCESS成功
PL_PACKET_TYPE_ERR型関連エラー

packet_list.c34 行目に定義があります。

呼び出し関係図:
被呼び出し関係図:

◆ PL_insert_after()

PL_ACK PL_insert_after ( PacketList pl,
PL_Node pos,
const void *  packet 
)

ある Node の直後に packet を挿入

引数
[in]plPacketList
[in]pos直後に挿入される packet
[in]packet挿入する packet
戻り値
PL_SUCCESS成功
PL_LIST_FULLPacketList が満杯
PL_NO_SUCH_NODEpos で指定したような Node は存在しない

packet_list.c214 行目に定義があります。

呼び出し関係図:
被呼び出し関係図:

◆ PL_insert_tl_cmd()

PL_ACK PL_insert_tl_cmd ( PacketList pl,
const CommonCmdPacket packet,
cycle_t  now 
)

CCP が時系列に並ぶように CCP を挿入する

覚え書き
TimeLine だけでなく TaskList もこれを使い,その場合, now は step_t になることに注意
引数
[in,out]plCCP を挿入する PacketList
[in]packet挿入する CCP
[in]now基準時刻 (TimeLine なら現在時刻, TaskList なら現在 step)
戻り値
PL_SUCCESS成功
PL_LIST_FULLPacketList が満杯
PL_TLC_PAST_TIME実行時間がすでに過ぎている
PL_TLC_ALREADY_EXISTS指定した実行時間にはすでにコマンドが登録されている
PL_NO_SUCH_NODE何かがおかしい
PL_PACKET_TYPE_ERR指定した PacketList の packet が CCP ではない

packet_list.c279 行目に定義があります。

呼び出し関係図:
被呼び出し関係図:

◆ PL_is_empty()

int PL_is_empty ( const PacketList pl)

PacketList が空かどうか

引数
[in]plPacketList
戻り値
1True
0False

packet_list.c138 行目に定義があります。

被呼び出し関係図:

◆ PL_is_full()

int PL_is_full ( const PacketList pl)

PacketList が満杯かどうか

引数
[in]plPacketList
戻り値
1True
0False

packet_list.c144 行目に定義があります。

被呼び出し関係図:

◆ PL_push_back()

PL_ACK PL_push_back ( PacketList pl,
const void *  packet 
)

PacketList の末尾に packet を挿入

引数
[in]plPacketList
[in]packet挿入する packet
戻り値
PL_SUCCESS成功
PL_LIST_FULLPacketList が満杯

packet_list.c189 行目に定義があります。

呼び出し関係図:
被呼び出し関係図:

◆ PL_push_front()

PL_ACK PL_push_front ( PacketList pl,
const void *  packet 
)

PacketList の先頭に packet を挿入

引数
[in]plPacketList
[in]packet挿入する packet
戻り値
PL_SUCCESS成功
PL_LIST_FULLPacketList が満杯

packet_list.c168 行目に定義があります。

呼び出し関係図:
被呼び出し関係図: