12 #include "../../IfWrapper/ccsds_user.h"
13 #include "../../TlmCmd/Ccsds/tc_transfer_frame.h"
19 #define GS_RX_HEADER_SIZE (2)
20 #define GS_RX_FRAMELENGTH_TYPE_SIZE (2)
21 #define GS_TX_STREAM (0)
23 #if GS_RX_HEADER_NUM > DS_STREAM_MAX
24 #error GS RX HEADER NUM TOO MANY
261 size_t vcdu_size =
sizeof(
VCDU);
uint8_t CCSDS_get_buffer_num(void)
CCSDS TX の残り buffer をカウントするAPI を呼びだす
CCP_DEST_TYPE CSP_get_dest_type(const CmdSpacePacket *csp)
Destination Type を取得
@ CCP_DEST_TYPE_TO_UNKOWN
const GS_Driver *const gs_driver
void DSSC_enable_strict_frame_search(DS_StreamConfig *p_stream_config)
void DSSC_set_rx_frame_size(DS_StreamConfig *p_stream_config, const int16_t rx_frame_size)
void DSSC_set_rx_framelength_type_size(DS_StreamConfig *p_stream_config, const uint16_t rx_framelength_type_size)
void DSSC_set_tx_frame(DS_StreamConfig *p_stream_config, uint8_t *tx_frame)
DS_ERR_CODE DS_analyze_rec_data(DriverSuper *p_super, uint8_t stream, void *p_driver)
data_analyzer_ を呼び出し,受信データを解析する.
const DS_StreamRecStatus * DSSC_get_rec_status(const DS_StreamConfig *p_stream_config)
const DS_RecStatus * DSC_get_rec_status(const DriverSuper *p_super)
void DSSC_set_rx_framelength_offset(DS_StreamConfig *p_stream_config, const uint16_t rx_framelength_offset)
void DSSC_set_tx_frame_size(DS_StreamConfig *p_stream_config, const uint16_t tx_frame_size)
void DSSC_set_rx_header(DS_StreamConfig *p_stream_config, const uint8_t *rx_header, const uint16_t rx_header_size)
DS_ERR_CODE DS_receive(DriverSuper *p_super)
継承先の機器からテレメトリを受信する
DS_ERR_CODE DS_init_streams(DriverSuper *p_super, void *if_config, DS_StreamRecBuffer *rx_buffers[DS_STREAM_MAX], DS_ERR_CODE(*load_init_setting)(DriverSuper *p_super))
継承先の機器より DriverSuper を初期化する(複数の stream を使用する場合)
void DSSC_set_data_analyzer(DS_StreamConfig *p_stream_config, DS_ERR_CODE(*data_analyzer)(DS_StreamConfig *p_stream_config, void *p_driver))
const uint8_t * DSSC_get_rx_frame(const DS_StreamConfig *p_stream_config)
確定したフレームを取得
DS_ERR_CODE DS_send_general_cmd(DriverSuper *p_super, uint8_t stream)
継承先の機器に一般コマンドを発行する
void DSSC_enable(DS_StreamConfig *p_stream_config)
void DSSC_set_rx_framelength_pos(DS_StreamConfig *p_stream_config, const int16_t rx_framelength_pos)
各制御センサ・アクチュエータ等とのインターフェースドライバ群のスーパークラス
@ DS_STREAM_REC_STATUS_FIXED_FRAME
DS_INIT_ERR_CODE
Driver の初期化関数のエラーコード
@ DS_INIT_DS_INIT_ERR
DS_init でのエラー
DS_REC_ERR_CODE
Driver の受信関数のエラーコード
DS_CMD_ERR_CODE
各DIが Driver にコマンドを送るときに,統一的に使うコード
@ DS_CMD_OK
OKは0であることを保証する
@ DS_CMD_DRIVER_SUPER_ERR
DriverSuper 側,つまり配送の低レイヤーでエラーが起きた場合
DS_ERR_CODE
DriverSuper の汎用エラーコード
@ DS_ERR_CODE_OK
返り値は継承先や IF 先で上書きされるため,OK は 0 であることが必須
static DS_ERR_CODE GS_load_ccsds_driver_super_init_settings_(DriverSuper *p_super)
CCSDS 側 Driver の DS 上での初期化設定
DS_CMD_ERR_CODE GS_send_vcdu(GS_Driver *gs_driver, const VCDU *vcdu)
地上に向けて TLM を送信. 形式は VCDU
DS_REC_ERR_CODE GS_rec_tctf(GS_Driver *gs_driver)
地上から CMD を受信する. 形式は TC Transer Frame
static DS_ERR_CODE GS_analyze_rec_data_(DS_StreamConfig *p_stream_config, void *p_driver)
地上からの受信データ解析関数
static void GS_load_default_driver_super_init_settings_(DriverSuper *p_super)
上記初期化の共通部分をまとめた関数
#define GS_RX_HEADER_SIZE
static DS_ERR_CODE GS_load_uart_driver_super_init_settings_(DriverSuper *p_super)
UART 側 Driver の DS 上での初期化設定
#define GS_RX_FRAMELENGTH_TYPE_SIZE
static uint8_t GS_rx_header_[GS_RX_HEADER_NUM][GS_RX_HEADER_SIZE]
DS_INIT_ERR_CODE GS_init(GS_Driver *gs_driver, uint8_t uart_ch, DS_StreamRecBuffer *ccsds_rx_buffers[DS_STREAM_MAX], DS_StreamRecBuffer *uart_rx_buffers[DS_STREAM_MAX])
Driver の初期化
static uint8_t GS_tx_frame_[VCDU_LEN]
Ground Station との通信用の Driver
GS_PORT_TYPE
GS の通信ポートは CCSDS と UART の 2 つある
@ GS_PORT_TYPE_CCSDS
CCSDS
void GS_validate_init(void)
GS_ValiateInfo の初期化
GS_VALIDATE_ERR GS_validate_tctf(const TcTransferFrame *tctf)
tctf の検証
GS_VALIDATE_ERR
gs_validate 関数の返り値
PH_ACK PH_analyze_cmd_packet(const CommonCmdPacket *packet)
CCP を解析する
C2A 全体を流れる Common Packet の配送を制御する
SpacePacket 類 と CommonTlmCmdPacket 類が相互参照するのを回避するためのヘッダ
uint32_t bitrate
継承先の機器のビットレート値 (bps)
uint8_t ch
将来的にchが追加されることを想定して
uint8_t buffer_num
送信バッファの残り数. 最大 CCSDS_FIFO_SIZE
int ret_from_if_rx
IF_RX の返り値
DriverSuper の設定 各 IF はこれを継承してつかう.
IF_LIST_ENUM interface
継承先の機器の使用 IF
DS_StreamConfig stream_config[DS_STREAM_MAX]
struct GS_Driver::@72 driver_ccsds
CCSDS_Config ccsds_config
const GS_Info * latest_info
GS_Info info[GS_PORT_TYPE_NUM]
CCSDS 用と UART 用 2 つ
uint8_t is_tlm_on
UART に TLM を流すかどうか, CCSDS では許容でも UART に TLM を送りすぎると詰まってしまうため
GS_PORT_TYPE tlm_tx_port_type
struct GS_Driver::@73 driver_uart
VCDU_VCID vcid
送信した TLM のタイプ
cycle_t last_rec_time
最後に受信した時刻
struct GS_Info::@69::@71 tctf
uint32_t vcdu_counter
VCDU counter
CCP_DEST_TYPE last_dest_type
最後に受信したパケットの dest type
PH_ACK cmd_ack
受信した CMD の実行結果
int ret_from_if_rx
UART or CCSDS からの返り値
cycle_t send_cycle
最後に送信したときの時刻
DS_ERR_CODE rec_status
DriverSuper からの受信結果
TC Transfer Frame のパケット構造体
PARITY_SETTINGS parity_settings
パリティ設定
UART_DATA_LENGTH data_length
データ長
uint32_t baudrate
継承先の機器のボーレート値
uint8_t ch
継承先の機器がつながっているポート番号
UART_STOP_BIT stop_bit
ストップビット
const CmdSpacePacket * TCS_get_command_space_packet(const TcSegment *tcs)
Command space packet 開始ポインタを取得
const TcSegment * TCTF_get_tc_segment(const TcTransferFrame *tctf)
TC Segment を取得
const TcTransferFrame * TCTF_convert_from_bytes_to_tctf(const uint8_t *byte)
受信 byte 列を TcTransferFrame* に変換
TCTF_TYPE TCTF_get_type(const TcTransferFrame *tctf)
command type を取得
@ TCTF_SCID_SAMPLE_SATELLITE
cycle_t TMGR_get_master_total_cycle(void)
現在の total_cycle を返す
@ PARITY_SETTINGS_NONE
パリティチェックをしない
uint32_t VCDU_get_vcdu_counter(const VCDU *vcdu)
void VCDU_generate_byte_stream(const VCDU *vcdu, uint8_t byte_stream[VCDU_LEN])
VCDU_VCID VCDU_get_vcid(const VCDU *vcdu)