23 #ifndef DRIVER_SUPER_H_
24 #define DRIVER_SUPER_H_
28 #include "../../Library/endian.h"
29 #include "../../System/TimeManager/time_manager.h"
31 #define DS_STREAM_MAX (3)
33 #define DS_IF_RX_BUFFER_SIZE (1024)
546 const uint16_t rx_buffer_size_in_if_rx);
552 const uint32_t time_threshold_for_rx_disruption);
579 const uint16_t tx_frame_size);
582 const int16_t tx_frame_buffer_size);
587 const uint8_t* rx_header,
588 const uint16_t rx_header_size);
591 const uint8_t* rx_footer,
592 const uint16_t rx_footer_size);
596 const int16_t rx_frame_size);
599 const uint16_t max_rx_frame_size);
602 const int16_t rx_framelength_pos);
604 const uint16_t rx_framelength_type_size);
606 const uint16_t rx_framelength_offset);
615 const uint32_t time_threshold_for_tlm_disruption);
650 const uint16_t buffer_capacity);
uint16_t DSSC_get_max_rx_frame_size(const DS_StreamConfig *p_stream_config)
void DSSC_enable_strict_frame_search(DS_StreamConfig *p_stream_config)
uint8_t * DSSC_get_tx_frame_as_non_const_pointer(DS_StreamConfig *p_stream_config)
void DSSC_disable(DS_StreamConfig *p_stream_config)
const uint8_t * DSSC_get_tx_frame(DS_StreamConfig *p_stream_config)
DS_ERR_CODE DS_init_stream_rec_buffer(DS_StreamRecBuffer *stream_rec_buffer, uint8_t *buffer, const uint16_t buffer_capacity)
DS_StreamRecBuffer に確保したメモリを与えて初期化する
uint8_t DSSC_get_is_strict_frame_search(const DS_StreamConfig *p_stream_config)
uint32_t DSSC_get_req_tlm_cmd_tx_count_after_last_tx(const DS_StreamConfig *p_stream_config)
DS_ERR_CODE DS_init(DriverSuper *p_super, void *if_config, DS_StreamRecBuffer *rx_buffer, DS_ERR_CODE(*load_init_setting)(DriverSuper *p_super))
継承先の機器より DriverSuper を初期化する(stream 0 のみの使用の場合)
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)
uint32_t DSC_get_rx_count(const DriverSuper *p_super)
void DSC_disable_monitor_for_rx_disruption(DriverSuper *p_super)
uint32_t DSSC_get_general_cmd_tx_count(const DS_StreamConfig *p_stream_config)
const DS_StreamSendStatus * DSSC_get_send_status(const DS_StreamConfig *p_stream_config)
const ObcTime * DSSC_get_req_tlm_cmd_tx_time(const DS_StreamConfig *p_stream_config)
uint32_t DSC_get_time_threshold_for_rx_disruption(const DriverSuper *p_super)
void DSSC_set_rx_framelength_endian(DS_StreamConfig *p_stream_config, const ENDIAN_TYPE rx_framelength_endian)
DS_STREAM_TLM_DISRUPTION_STATUS_CODE DSSC_get_tlm_disruption_status(const DS_StreamConfig *p_stream_config)
DS_STREAM_REC_STATUS_CODE
DS_StreamRecStatus でつかう.テレメ受信の状態遷移を示す
@ DS_STREAM_REC_STATUS_OTHER_ERR
@ DS_STREAM_REC_STATUS_RX_ERR
IF_RX でエラー
@ DS_STREAM_REC_STATUS_FOOTER_MISMATCH
@ DS_STREAM_REC_STATUS_RX_FRAME_TOO_SHORT
@ DS_STREAM_REC_STATUS_FINDING_HEADER
@ DS_STREAM_REC_STATUS_RECEIVING_FOOTER
@ DS_STREAM_REC_STATUS_VALIDATE_ERR
受信前に validate_config でエラー
@ DS_STREAM_REC_STATUS_HEADER_MISMATCH
@ DS_STREAM_REC_STATUS_RX_FRAME_TOO_LONG
@ DS_STREAM_REC_STATUS_RECEIVING_HEADER
@ DS_STREAM_REC_STATUS_RECEIVING_DATA
@ DS_STREAM_REC_STATUS_FIXED_FRAME
@ DS_STREAM_REC_STATUS_RECEIVING_FRAMELENGTH
可変長フレームでの,フレーム長データを受信中
@ DS_STREAM_REC_STATUS_DISABLE
uint8_t DSC_get_should_monitor_for_rx_disruption(const DriverSuper *p_super)
void DSSC_set_tx_frame(DS_StreamConfig *p_stream_config, uint8_t *tx_frame)
uint16_t DSC_get_rx_buffer_size_in_if_rx(const DriverSuper *p_super)
uint32_t DSSC_get_req_tlm_cmd_tx_count(const DS_StreamConfig *p_stream_config)
DS_STREAM_TLM_DISRUPTION_STATUS_CODE
@ DS_STREAM_TLM_DISRUPTION_STATUS_LOST
テレメ途絶検出
@ DS_STREAM_TLM_DISRUPTION_STATUS_OK
テレメ途絶していない or テレメ途絶判定をしない状態
uint8_t DSSC_get_should_monitor_for_tlm_disruption(const DS_StreamConfig *p_stream_config)
DS_ERR_CODE DS_analyze_rec_data(DriverSuper *p_super, uint8_t stream, void *p_driver)
data_analyzer_ を呼び出し,受信データを解析する.
void DSSC_set_time_threshold_for_tlm_disruption(DS_StreamConfig *p_stream_config, const uint32_t time_threshold_for_tlm_disruption)
DS_ERR_CODE DS_validate_config(DriverSuper *p_super)
DriverSuper の設定に不整合が生じていないかチェックする
const DS_StreamRecStatus * DSSC_get_rec_status(const DS_StreamConfig *p_stream_config)
uint16_t DSSC_get_rx_footer_size(const DS_StreamConfig *p_stream_config)
uint32_t DSC_get_rx_call_count(const DriverSuper *p_super)
uint16_t DSSC_get_rx_header_size(const DS_StreamConfig *p_stream_config)
DS_INIT_ERR_CODE
Driver の初期化関数のエラーコード
@ DS_INIT_UNKNOWN_ERR
UNKNOWN ERR
@ DS_INIT_PARAMETER_ERR
初期化パラメタエラー
@ DS_INIT_OTHER_ERR
その他のエラー
@ DS_INIT_DS_INIT_ERR
DS_init でのエラー
const DS_RecStatus * DSC_get_rec_status(const DriverSuper *p_super)
DS_REC_ERR_CODE
Driver の受信関数のエラーコード
@ DS_REC_OTHER_ERR
その他のエラー
@ DS_REC_ANALYZE_ERR
DS_analyze_rec_data でのエラー
@ DS_REC_DS_RECEIVE_ERR
DS_receive でのエラー
@ DS_REC_UNKNOWN_ERR
UNKNOWN ERR
void DSC_enable_monitor_for_rx_disruption(DriverSuper *p_super)
void DSSC_set_tx_frame_buffer_size(DS_StreamConfig *p_stream_config, const int16_t tx_frame_buffer_size)
void DSSC_set_max_rx_frame_size(DS_StreamConfig *p_stream_config, const uint16_t max_rx_frame_size)
DS_ERR_CODE DS_reset(DriverSuper *p_super)
DriverSuper のリセット
DS_CMD_ERR_CODE
各DIが Driver にコマンドを送るときに,統一的に使うコード
@ DS_CMD_OK
OKは0であることを保証する
@ DS_CMD_ILLEGAL_PARAMETER
CCP_EXEC_ILLEGAL_PARAMETER に対応.ヒーターの個数など,HW 依存部は Driver でみる
@ DS_CMD_ILLEGAL_LENGTH
CCP_EXEC_ILLEGAL_LENGTH に対応.これは基本的にはDIで見るはずなので,使われないことを想定
@ DS_CMD_ILLEGAL_CONTEXT
CCP_EXEC_ILLEGAL_CONTEXT に対応.DIでみることも多いはず.HW依存部は Driver でみる
@ DS_CMD_DRIVER_SUPER_ERR
DriverSuper 側,つまり配送の低レイヤーでエラーが起きた場合
DS_RX_DISRUPTION_STATUS_CODE DSC_get_rx_disruption_status(const DriverSuper *p_super)
uint32_t DSSC_get_time_threshold_for_tlm_disruption(const DS_StreamConfig *p_stream_config)
CCP_CmdRet DS_conv_cmd_err_to_ccp_cmd_ret(DS_CMD_ERR_CODE code)
DS_CMD_ERR_CODE から CCP_CmdRet への変換関数
void DS_nullify_stream_rec_buffers(DS_StreamRecBuffer *rx_buffers[DS_STREAM_MAX])
DS_StreamRecBuffer の要素数 DS_STREAM_MAX の配列を NULL で初期化する
void DSSC_set_rx_buffer(DS_StreamConfig *p_stream_config, DS_StreamRecBuffer *rx_buffer)
DS_DRIVER_ERR_CODE
Driver の汎用エラーコード
@ DS_DRIVER_ERR_CODE_ILLEGAL_PARAMETER
CCP_EXEC_ILLEGAL_PARAMETER に対応
@ DS_DRIVER_ERR_CODE_ILLEGAL_LENGTH
CCP_EXEC_ILLEGAL_PARAMETER に対応
@ DS_DRIVER_ERR_CODE_ILLEGAL_CONTEXT
CCP_EXEC_ILLEGAL_CONTEXT に対応
@ DS_DRIVER_ERR_CODE_OK
OK
@ DS_DRIVER_ERR_CODE_UNKNOWN_ERR
UNKNOWN ERR
DS_ERR_CODE DSSC_get_ret_from_data_analyzer(const DS_StreamConfig *p_stream_config)
uint32_t DSSC_get_rx_frame_fix_count(const DS_StreamConfig *p_stream_config)
const ObcTime * DSSC_get_rx_frame_fix_time(const DS_StreamConfig *p_stream_config)
void DSSC_disable_monitor_for_tlm_disruption(DS_StreamConfig *p_stream_config)
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)
DS_ERR_CODE
DriverSuper の汎用エラーコード
@ DS_ERR_CODE_OK
返り値は継承先や IF 先で上書きされるため,OK は 0 であることが必須
CCP_CmdRet DS_conv_driver_err_to_ccp_cmd_ret(DS_DRIVER_ERR_CODE code)
DS_DRIVER_ERR_CODE から CCP_CmdRet への変換関数
const ObcTime * DSC_get_rx_time(const DriverSuper *p_super)
int16_t DSSC_get_rx_frame_size(const DS_StreamConfig *p_stream_config)
void DSSC_set_rx_header(DS_StreamConfig *p_stream_config, const uint8_t *rx_header, const uint16_t rx_header_size)
void DSSC_enable_monitor_for_tlm_disruption(DS_StreamConfig *p_stream_config)
DS_ERR_CODE DS_receive(DriverSuper *p_super)
継承先の機器からテレメトリを受信する
DS_ERR_CODE DS_clear_rx_buffer(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))
DS_ERR_CODE DSC_set_rx_buffer_size_in_if_rx(DriverSuper *p_super, const uint16_t rx_buffer_size_in_if_rx)
const ObcTime * DSSC_get_general_cmd_tx_time(const DS_StreamConfig *p_stream_config)
const uint8_t * DSSC_get_rx_frame(const DS_StreamConfig *p_stream_config)
確定したフレームを取得
void DSSC_disable_strict_frame_search(DS_StreamConfig *p_stream_config)
DS_STREAM_SEND_STATUS_CODE
DS_StreamSendStatus でつかう.コマンド受信の状態を示す
@ DS_STREAM_SEND_STATUS_VALIDATE_ERR
送信前に validate_config でエラー
@ DS_STREAM_SEND_STATUS_DISABLE
@ DS_STREAM_SEND_STATUS_OTHER_ERR
@ DS_STREAM_SEND_STATUS_OK
@ DS_STREAM_SEND_STATUS_TX_ERR
IF_TX でエラー
DS_RX_DISRUPTION_STATUS_CODE
受信途絶判定コード
@ DS_RX_DISRUPTION_STATUS_LOST
受信途絶検出
@ DS_RX_DISRUPTION_STATUS_OK
受信途絶していない or 受信途絶判定をしない状態
uint16_t DSSC_get_tx_frame_size(const DS_StreamConfig *p_stream_config)
int16_t DSSC_get_tx_frame_buffer_size(DS_StreamConfig *p_stream_config)
DS_ERR_CODE DS_send_general_cmd(DriverSuper *p_super, uint8_t stream)
継承先の機器に一般コマンドを発行する
uint8_t DSSC_get_is_enabled(const DS_StreamConfig *p_stream_config)
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_ERR_CODE DS_send_req_tlm_cmd(DriverSuper *p_super, uint8_t stream)
継承先の機器にテレメ要求コマンドを発行する
void DSC_set_time_threshold_for_rx_disruption(DriverSuper *p_super, const uint32_t time_threshold_for_rx_disruption)
uint16_t DSSC_get_fixed_rx_frame_size(const DS_StreamConfig *p_stream_config)
確定したフレームのサイズを取得
void DSSC_set_rx_footer(DS_StreamConfig *p_stream_config, const uint8_t *rx_footer, const uint16_t rx_footer_size)
DriverSuperパラメタのオーバーライド用ヘッダー
uint8_t should_monitor_for_rx_disruption_
ObcTime rx_time_
なにかしらのデータの受信時刻
uint32_t time_threshold_for_rx_disruption_
DS_RecStatus rec_status_
IF受信状況
uint32_t rx_count_
なにかしらのデータの受信回数
uint32_t rx_call_count_
DS_receive 呼び出し回数
uint16_t rx_buffer_size_in_if_rx_
DS_RX_DISRUPTION_STATUS_CODE rx_disruption_status
受信途絶判定
int ret_from_if_rx
IF_RX の返り値
uint8_t is_validation_needed_for_rec_
受信前に設定値の Validation が必要か?
uint32_t req_tlm_cmd_tx_count_
テレメ要求コマンド送信回数
uint16_t rx_framelength_type_size_
struct DS_StreamConfig::@6 info
取得値(メトリクス)
uint8_t should_monitor_for_tlm_disruption_
DS_StreamRecBuffer * rx_buffer_
int16_t rx_framelength_pos_
uint32_t general_cmd_tx_count_
通常コマンド送信回数
DS_ERR_CODE ret_from_data_analyzer_
data_analyzer_ の返り値
uint16_t rx_framelength_offset_
int16_t tx_frame_buffer_size_
DS_StreamSendStatus send_status_
フレーム送信状況
const uint8_t * rx_footer_
DS_StreamRecStatus rec_status_
フレーム受信状況
ObcTime req_tlm_cmd_tx_time_
テレメ要求コマンド最終送信時刻
ObcTime general_cmd_tx_time_
通常コマンド最終送信時刻
uint8_t is_validation_needed_for_send_
送信前に設定値の Validation が必要か?
DS_ERR_CODE(* data_analyzer_)(DS_StreamConfig *p_stream_config, void *p_driver)
const uint8_t * rx_header_
ENDIAN_TYPE rx_framelength_endian_
uint16_t max_rx_frame_size_
uint32_t req_tlm_cmd_tx_count_after_last_tx_
ObcTime rx_frame_fix_time_
フレーム確定時刻
uint32_t time_threshold_for_tlm_disruption_
struct DS_StreamConfig::@5 settings
設定値
uint8_t is_strict_frame_search_
uint32_t rx_frame_fix_count_
フレーム受信確定回数
uint8_t * buffer
バッファ本体となる uint8_t 配列.外部から与える
uint16_t pos_of_frame_head_candidate
フレーム開始点の候補
uint16_t pos_of_last_rec
最後に受信したデータを格納した位置
uint16_t confirmed_frame_len
受信フレームとして受理された pos_of_frame_head_candidate からの長さ(フレーム確定後,これがフレーム長になる)
uint16_t capacity
buffer のメモリ確保量
uint8_t is_frame_fixed
このバッファ上でフレームが確定してるか?
DS_STREAM_REC_STATUS_CODE status_code
status
uint32_t count_of_carry_over_failures
uint16_t fixed_frame_len
フレーム確定したときのフレーム長さ
DS_STREAM_TLM_DISRUPTION_STATUS_CODE tlm_disruption_status
テレメ途絶判定
int ret_from_if_tx
IF_TX の返り値
DS_STREAM_SEND_STATUS_CODE status_code
status
DriverSuper の設定 各 IF はこれを継承してつかう.
IF_LIST_ENUM interface
継承先の機器の使用 IF
DS_StreamConfig stream_config[DS_STREAM_MAX]
DS_Config config
DriverSuper の設定