C2A_Core
packet_list.c ファイル

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

#include "packet_list.h"
#include "../System/TimeManager/time_manager.h"
#include "common_tlm_cmd_packet.h"
#include "block_command_executor.h"
#include "block_command_table.h"
#include <stdint.h>
#include <string.h>
packet_list.c の依存先関係図:

[ソースコード]

関数

static PL_NodePL_get_free_node_ (PacketList *pl)
 未使用 Node を新規に取得 [詳解]
 
static PL_ACK PL_drop_head_ (PacketList *pl)
 先頭 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 を初期化 [詳解]
 
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.c に定義があります。

関数詳解

◆ 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_head_()

static PL_ACK PL_drop_head_ ( PacketList pl)
static

先頭 Node を落とす

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

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

被呼び出し関係図:

◆ 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_free_node_()

static PL_Node * PL_get_free_node_ ( PacketList pl)
static

未使用 Node を新規に取得

覚え書き
取得されたものは使われることを想定(引数として与えられた pl の内部状態は更新される)
引数
[in,out]plPacketList
戻り値
未使用Node
NULL(PacketListが満杯の時)

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

被呼び出し関係図:

◆ 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 行目に定義があります。

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