|
C2A_Core
|
各制御センサ・アクチュエータ等とのインターフェースドライバ群のスーパークラス [詳解]
#include <src_user/IfWrapper/if_list.h>#include <stdint.h>#include "../../Library/endian.h"#include "../../System/TimeManager/time_manager.h"#include <src_user/Settings/DriverSuper/driver_super_params.h>データ構造 | |
| struct | DS_RecStatus |
| IF 受信状況 [詳解] | |
| struct | DS_StreamSendStatus |
| フレーム送信状況 [詳解] | |
| struct | DS_StreamRecStatus |
| フレーム受信状況 [詳解] | |
| struct | DS_StreamRecBuffer |
| フレーム受信バッファ [詳解] | |
| struct | DS_Config |
| DriverSuper の設定 [詳解] | |
| struct | DS_StreamConfig |
| DriverSuperStream の設定 [詳解] | |
| struct | DriverSuper |
| DriverSuper の設定 各 IF はこれを継承してつかう. [詳解] | |
マクロ定義 | |
| #define | DS_STREAM_MAX (3) |
| #define | DS_IF_RX_BUFFER_SIZE (1024) |
型定義 | |
| typedef struct DriverSuper | DriverSuper |
| typedef struct DS_StreamConfig | DS_StreamConfig |
各制御センサ・アクチュエータ等とのインターフェースドライバ群のスーパークラス
DriverSuper Class は
各制御センサ・アクチュエータ等とのインターフェースを実現し,
初期化,コマンド発行,テレメトリリクエスト,テレメトリ受信,テレメトリ解析などを行う,ドライバ群のスーパークラスです.
個々の機器のインターフェースドライバに継承させて使用します.
driver_super.h に定義があります。
| #define DS_IF_RX_BUFFER_SIZE (1024) |
IF_RX で受信するときの一次バッファ IF_RX から受信できる最大数を規定する OBC の物理的な信号ラインのバッファサイズ以上とするともっともパフォーマンスが出る
driver_super.h の 35 行目に定義があります。
| #define DS_STREAM_MAX (3) |
DS_StreamConfig の最大数 uint8_t を想定
driver_super.h の 32 行目に定義があります。
| typedef struct DriverSuper DriverSuper |
driver_super.h の 1 行目に定義があります。
| typedef struct DS_StreamConfig DS_StreamConfig |
driver_super.h の 1 行目に定義があります。
| enum DS_CMD_ERR_CODE |
各DIが Driver にコマンドを送るときに,統一的に使うコード
| 列挙値 | |
|---|---|
| DS_CMD_OK | OKは0であることを保証する |
| DS_CMD_ILLEGAL_CONTEXT | CCP_EXEC_ILLEGAL_CONTEXT に対応.DIでみることも多いはず.HW依存部は Driver でみる |
| DS_CMD_ILLEGAL_PARAMETER | CCP_EXEC_ILLEGAL_PARAMETER に対応.ヒーターの個数など,HW 依存部は Driver でみる |
| DS_CMD_ILLEGAL_LENGTH | CCP_EXEC_ILLEGAL_LENGTH に対応.これは基本的にはDIで見るはずなので,使われないことを想定 |
| DS_CMD_DRIVER_SUPER_ERR | DriverSuper 側,つまり配送の低レイヤーでエラーが起きた場合 |
| DS_CMD_UNKNOWN_ERR | |
driver_super.h の 99 行目に定義があります。
| enum DS_DRIVER_ERR_CODE |
Driver の汎用エラーコード
Driver 内の各種 setter 等の関数返り値で使われることを想定
driver_super.h の 55 行目に定義があります。
| enum DS_ERR_CODE |
DriverSuper の汎用エラーコード
| 列挙値 | |
|---|---|
| DS_ERR_CODE_OK | 返り値は継承先や IF 先で上書きされるため,OK は 0 であることが必須 |
| DS_ERR_CODE_ERR | |
driver_super.h の 115 行目に定義があります。
| enum DS_INIT_ERR_CODE |
Driver の初期化関数のエラーコード
| 列挙値 | |
|---|---|
| DS_INIT_OK | OK |
| DS_INIT_DS_INIT_ERR | DS_init でのエラー |
| DS_INIT_PARAMETER_ERR | 初期化パラメタエラー |
| DS_INIT_OTHER_ERR | その他のエラー |
| DS_INIT_UNKNOWN_ERR | UNKNOWN ERR |
driver_super.h の 69 行目に定義があります。
| enum DS_REC_ERR_CODE |
Driver の受信関数のエラーコード
| 列挙値 | |
|---|---|
| DS_REC_OK | OK |
| DS_REC_DS_RECEIVE_ERR | DS_receive でのエラー |
| DS_REC_ANALYZE_ERR | DS_analyze_rec_data でのエラー |
| DS_REC_OTHER_ERR | その他のエラー |
| DS_REC_UNKNOWN_ERR | UNKNOWN ERR |
driver_super.h の 83 行目に定義があります。
受信途絶判定コード
| 列挙値 | |
|---|---|
| DS_RX_DISRUPTION_STATUS_OK | 受信途絶していない or 受信途絶判定をしない状態 |
| DS_RX_DISRUPTION_STATUS_LOST | 受信途絶検出 |
driver_super.h の 126 行目に定義があります。
DS_StreamRecStatus でつかう.テレメ受信の状態遷移を示す
driver_super.h の 172 行目に定義があります。
DS_StreamSendStatus でつかう.コマンド受信の状態を示す
| 列挙値 | |
|---|---|
| DS_STREAM_SEND_STATUS_OK | |
| DS_STREAM_SEND_STATUS_DISABLE | |
| DS_STREAM_SEND_STATUS_TX_ERR | IF_TX でエラー |
| DS_STREAM_SEND_STATUS_VALIDATE_ERR | 送信前に validate_config でエラー |
| DS_STREAM_SEND_STATUS_OTHER_ERR | |
driver_super.h の 147 行目に定義があります。
| 列挙値 | |
|---|---|
| DS_STREAM_TLM_DISRUPTION_STATUS_OK | テレメ途絶していない or テレメ途絶判定をしない状態 |
| DS_STREAM_TLM_DISRUPTION_STATUS_LOST | テレメ途絶検出 |
driver_super.h の 195 行目に定義があります。
| DS_ERR_CODE DS_analyze_rec_data | ( | DriverSuper * | p_super, |
| uint8_t | stream, | ||
| void * | p_driver | ||
| ) |
data_analyzer_ を呼び出し,受信データを解析する.
DS_receive にてデータを受信した後, DSSC_get_rec_status(p_stream_config)->status_code が DS_STREAM_REC_STATUS_FIXED_FRAME ならば呼び出す.
| p_super | DriverSuper 構造体へのポインタ |
| stream | どの stream_config を使用するか.stream は 0-MAX なので,継承先で ENUM など宣言して使いやすくすればいいと思う. |
| p_driver | 継承先機器のドライバ構造体など.data_analyzer_ の第二引数. |
driver_super.c の 486 行目に定義があります。
| DS_ERR_CODE DS_clear_rx_buffer | ( | DriverSuper * | p_super | ) |
受信バッファをクリアする
例えば,ヘッダなしテレメの場合,途中でゴミデータが入ると以後すべてのフレームがずれてしまう.
そのようなとき(CRC エラーがでるとか,受信データが明らかにおかしい場合)に,buffer を一度クリアし,
次に届くデータからフレーム解析を先頭から行うようにするために用いる.
| p_super | DriverSuper 構造体へのポインタ |
driver_super.c の 337 行目に定義があります。
| CCP_CmdRet DS_conv_cmd_err_to_ccp_cmd_ret | ( | DS_CMD_ERR_CODE | code | ) |
DS_CMD_ERR_CODE から CCP_CmdRet への変換関数
DI から Driver の関数を呼び出したときのエラーコードの変換に用いる
| DS_CMD_ERR_CODE |
driver_super.c の 1690 行目に定義があります。
| CCP_CmdRet DS_conv_driver_err_to_ccp_cmd_ret | ( | DS_DRIVER_ERR_CODE | code | ) |
DS_DRIVER_ERR_CODE から CCP_CmdRet への変換関数
DI から Driver の関数を呼び出したときのエラーコードの変換に用いる
| DS_DRIVER_ERR_CODE |
driver_super.c の 1670 行目に定義があります。
| DS_ERR_CODE DS_init | ( | DriverSuper * | p_super, |
| void * | if_config, | ||
| DS_StreamRecBuffer * | rx_buffer, | ||
| DS_ERR_CODE(*)(DriverSuper *p_super) | load_init_setting | ||
| ) |
継承先の機器より DriverSuper を初期化する(stream 0 のみの使用の場合)
DriverSuper 構造体を継承先 Driver 構造体のメンバとして定義(継承)し,ポインタを渡すことでポートを初期化する.
そして,構造体内の初期化が必要な変数を初期化する.
デフォルト値の上書きは load_init_setting で行う
| p_super | 初期化する DriverSuper 構造体へのポインタ |
| if_config | 初期化する Driverで用いられている IF の config 構造体 |
| rx_buffer | 初期化する DriverSuper の stream 0 で用いられるフレーム受信バッファ |
| load_init_setting | DriverSuper の初期設定ロード関数ポインタ |
driver_super.c の 242 行目に定義があります。
| DS_ERR_CODE DS_init_stream_rec_buffer | ( | DS_StreamRecBuffer * | stream_rec_buffer, |
| uint8_t * | buffer, | ||
| const uint16_t | buffer_capacity | ||
| ) |
DS_StreamRecBuffer に確保したメモリを与えて初期化する
| [out] | stream_rec_buffer | 初期化する DS_StreamRecBuffer |
| [in] | buffer | 与えるメモリ領域 |
| [in] | buffer_capacity | 与えるメモリサイズ |
driver_super.c の 1645 行目に定義があります。
| DS_ERR_CODE DS_init_streams | ( | DriverSuper * | p_super, |
| void * | if_config, | ||
| DS_StreamRecBuffer * | rx_buffers[DS_STREAM_MAX], | ||
| DS_ERR_CODE(*)(DriverSuper *p_super) | load_init_setting | ||
| ) |
継承先の機器より DriverSuper を初期化する(複数の stream を使用する場合)
DriverSuper 構造体を継承先 Driver 構造体のメンバとして定義(継承)し,ポインタを渡すことでポートを初期化する.
そして,構造体内の初期化が必要な変数を初期化する.
デフォルト値の上書きは load_init_setting で行う
| p_super | 初期化する DriverSuper 構造体へのポインタ |
| if_config | 初期化する Driverで用いられている IF の config 構造体 |
| rx_buffers | 初期化する DriverSuper で用いられるフレーム受信バッファ.使用しない stream は NULL を設定しておく |
| load_init_setting | DriverSuper の初期設定ロード関数ポインタ |
driver_super.c の 254 行目に定義があります。
| void DS_nullify_stream_rec_buffers | ( | DS_StreamRecBuffer * | rx_buffers[DS_STREAM_MAX] | ) |
DS_StreamRecBuffer の要素数 DS_STREAM_MAX の配列を NULL で初期化する
| [out] | rx_buffers | 初期化する DS_StreamRecBuffer の配列 |
driver_super.c の 1658 行目に定義があります。
| DS_ERR_CODE DS_receive | ( | DriverSuper * | p_super | ) |
継承先の機器からテレメトリを受信する
フレームを確定させて,rx_frame_ にいれるまで.解析 (data_analyzer_) はしないのでドライバで DS_analyze_rec_data を呼び出すこと
これは,同じ stream でもテレメ内部の ID などで解析を変えたいときなどが想定されるため
| p_super | DriverSuper 構造体へのポインタ |
| DS_ERR_CODE_OK | IF_RX でのエラーなし |
| DS_ERR_CODE_ERR | IF_RX でのエラーあり |
driver_super.c の 355 行目に定義があります。
| DS_ERR_CODE DS_reset | ( | DriverSuper * | p_super | ) |
DriverSuper のリセット
| p_super | DriverSuper 構造体へのポインタ |
driver_super.c の 287 行目に定義があります。
| DS_ERR_CODE DS_send_general_cmd | ( | DriverSuper * | p_super, |
| uint8_t | stream | ||
| ) |
継承先の機器に一般コマンドを発行する
このコマンドを送ったことによってレスポンスが返ってくることを想定していない(その場合は DS_send_req_tlm_cmd を使う)
| p_super | DriverSuper 構造体へのポインタ |
| stream | どのstream_config を使用するか.stream は 0-MAX なので,継承先で ENUM など宣言して使いやすくすればいいと思う. |
| DS_ERR_CODE_OK | 正常終了 |
| DS_ERR_CODE_ERR | IF_TX でのエラーあり |
driver_super.c の 496 行目に定義があります。
| DS_ERR_CODE DS_send_req_tlm_cmd | ( | DriverSuper * | p_super, |
| uint8_t | stream | ||
| ) |
継承先の機器にテレメ要求コマンドを発行する
テレメについては DS_receive で受け取る.
| p_super | DriverSuper 構造体へのポインタ |
| stream | どのstream_config を使用するか.stream は 0-MAX なので,継承先で ENUM など宣言して使いやすくすればいいと思う. |
| DS_ERR_CODE_OK | 正常終了 |
| DS_ERR_CODE_ERR | IF_TX でのエラーあり |
driver_super.c の 517 行目に定義があります。
| DS_ERR_CODE DS_validate_config | ( | DriverSuper * | p_super | ) |
DriverSuper の設定に不整合が生じていないかチェックする
Driver の設定を変えた場合は毎回呼び出すことを推奨する
| p_super | DriverSuper 構造体へのポインタ |
driver_super.c の 319 行目に定義があります。
| void DSC_disable_monitor_for_rx_disruption | ( | DriverSuper * | p_super | ) |
driver_super.c の 1341 行目に定義があります。
| void DSC_enable_monitor_for_rx_disruption | ( | DriverSuper * | p_super | ) |
driver_super.c の 1336 行目に定義があります。
| const DS_RecStatus* DSC_get_rec_status | ( | const DriverSuper * | p_super | ) |
| uint16_t DSC_get_rx_buffer_size_in_if_rx | ( | const DriverSuper * | p_super | ) |
driver_super.c の 1318 行目に定義があります。
| uint32_t DSC_get_rx_call_count | ( | const DriverSuper * | p_super | ) |
driver_super.c の 1370 行目に定義があります。
| uint32_t DSC_get_rx_count | ( | const DriverSuper * | p_super | ) |
driver_super.c の 1365 行目に定義があります。
| DS_RX_DISRUPTION_STATUS_CODE DSC_get_rx_disruption_status | ( | const DriverSuper * | p_super | ) |
driver_super.c の 1380 行目に定義があります。
| const ObcTime* DSC_get_rx_time | ( | const DriverSuper * | p_super | ) |
driver_super.c の 1375 行目に定義があります。
| uint8_t DSC_get_should_monitor_for_rx_disruption | ( | const DriverSuper * | p_super | ) |
driver_super.c の 1331 行目に定義があります。
| uint32_t DSC_get_time_threshold_for_rx_disruption | ( | const DriverSuper * | p_super | ) |
driver_super.c の 1346 行目に定義があります。
| DS_ERR_CODE DSC_set_rx_buffer_size_in_if_rx | ( | DriverSuper * | p_super, |
| const uint16_t | rx_buffer_size_in_if_rx | ||
| ) |
driver_super.c の 1323 行目に定義があります。
| void DSC_set_time_threshold_for_rx_disruption | ( | DriverSuper * | p_super, |
| const uint32_t | time_threshold_for_rx_disruption | ||
| ) |
driver_super.c の 1351 行目に定義があります。
| void DSSC_disable | ( | DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1400 行目に定義があります。
| void DSSC_disable_monitor_for_tlm_disruption | ( | DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1560 行目に定義があります。
| void DSSC_disable_strict_frame_search | ( | DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1416 行目に定義があります。
| void DSSC_enable | ( | DS_StreamConfig * | p_stream_config | ) |
| void DSSC_enable_monitor_for_tlm_disruption | ( | DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1554 行目に定義があります。
| void DSSC_enable_strict_frame_search | ( | DS_StreamConfig * | p_stream_config | ) |
| uint16_t DSSC_get_fixed_rx_frame_size | ( | const DS_StreamConfig * | p_stream_config | ) |
確定したフレームのサイズを取得
| p_stream_config[in] | DriverSuper 構造体の DS_StreamConfig |
| フレーム確定時 | 確定したフレームサイズ |
| フレーム未確定時 | 0 |
driver_super.c の 1719 行目に定義があります。
| uint32_t DSSC_get_general_cmd_tx_count | ( | const DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1597 行目に定義があります。
| const ObcTime* DSSC_get_general_cmd_tx_time | ( | const DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1617 行目に定義があります。
| uint8_t DSSC_get_is_enabled | ( | const DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1388 行目に定義があります。
| uint8_t DSSC_get_is_strict_frame_search | ( | const DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1405 行目に定義があります。
| uint16_t DSSC_get_max_rx_frame_size | ( | const DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1509 行目に定義があります。
| const DS_StreamRecStatus* DSSC_get_rec_status | ( | const DS_StreamConfig * | p_stream_config | ) |
| uint32_t DSSC_get_req_tlm_cmd_tx_count | ( | const DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1602 行目に定義があります。
| uint32_t DSSC_get_req_tlm_cmd_tx_count_after_last_tx | ( | const DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1607 行目に定義があります。
| const ObcTime* DSSC_get_req_tlm_cmd_tx_time | ( | const DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1622 行目に定義があります。
| DS_ERR_CODE DSSC_get_ret_from_data_analyzer | ( | const DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1637 行目に定義があります。
| uint16_t DSSC_get_rx_footer_size | ( | const DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1492 行目に定義があります。
| const uint8_t* DSSC_get_rx_frame | ( | const DS_StreamConfig * | p_stream_config | ) |
確定したフレームを取得
| p_stream_config[in] | DriverSuper 構造体の DS_StreamConfig |
| フレーム確定時 | 受信フレーム先頭ポインタ |
| フレーム未確定時 | rx_buffer_.pos_of_frame_head_candidate |
driver_super.c の 1712 行目に定義があります。
| uint32_t DSSC_get_rx_frame_fix_count | ( | const DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1612 行目に定義があります。
| const ObcTime* DSSC_get_rx_frame_fix_time | ( | const DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1627 行目に定義があります。
| int16_t DSSC_get_rx_frame_size | ( | const DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1497 行目に定義があります。
| uint16_t DSSC_get_rx_header_size | ( | const DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1478 行目に定義があります。
| const DS_StreamSendStatus* DSSC_get_send_status | ( | const DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1587 行目に定義があります。
| uint8_t DSSC_get_should_monitor_for_tlm_disruption | ( | const DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1549 行目に定義があります。
| uint32_t DSSC_get_time_threshold_for_tlm_disruption | ( | const DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1566 行目に定義があります。
| DS_STREAM_TLM_DISRUPTION_STATUS_CODE DSSC_get_tlm_disruption_status | ( | const DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1632 行目に定義があります。
| const uint8_t* DSSC_get_tx_frame | ( | DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1421 行目に定義があります。
| uint8_t* DSSC_get_tx_frame_as_non_const_pointer | ( | DS_StreamConfig * | p_stream_config | ) |
| int16_t DSSC_get_tx_frame_buffer_size | ( | DS_StreamConfig * | p_stream_config | ) |
| uint16_t DSSC_get_tx_frame_size | ( | const DS_StreamConfig * | p_stream_config | ) |
driver_super.c の 1438 行目に定義があります。
| void DSSC_set_data_analyzer | ( | DS_StreamConfig * | p_stream_config, |
| DS_ERR_CODE(*)(DS_StreamConfig *p_stream_config, void *p_driver) | data_analyzer | ||
| ) |
| void DSSC_set_max_rx_frame_size | ( | DS_StreamConfig * | p_stream_config, |
| const uint16_t | max_rx_frame_size | ||
| ) |
| void DSSC_set_rx_buffer | ( | DS_StreamConfig * | p_stream_config, |
| DS_StreamRecBuffer * | rx_buffer | ||
| ) |
| void DSSC_set_rx_footer | ( | DS_StreamConfig * | p_stream_config, |
| const uint8_t * | rx_footer, | ||
| const uint16_t | rx_footer_size | ||
| ) |
| void DSSC_set_rx_frame_size | ( | DS_StreamConfig * | p_stream_config, |
| const int16_t | rx_frame_size | ||
| ) |
| void DSSC_set_rx_framelength_endian | ( | DS_StreamConfig * | p_stream_config, |
| const ENDIAN_TYPE | rx_framelength_endian | ||
| ) |
driver_super.c の 1542 行目に定義があります。
| void DSSC_set_rx_framelength_offset | ( | DS_StreamConfig * | p_stream_config, |
| const uint16_t | rx_framelength_offset | ||
| ) |
| void DSSC_set_rx_framelength_pos | ( | DS_StreamConfig * | p_stream_config, |
| const int16_t | rx_framelength_pos | ||
| ) |
| void DSSC_set_rx_framelength_type_size | ( | DS_StreamConfig * | p_stream_config, |
| const uint16_t | rx_framelength_type_size | ||
| ) |
| void DSSC_set_rx_header | ( | DS_StreamConfig * | p_stream_config, |
| const uint8_t * | rx_header, | ||
| const uint16_t | rx_header_size | ||
| ) |
| void DSSC_set_time_threshold_for_tlm_disruption | ( | DS_StreamConfig * | p_stream_config, |
| const uint32_t | time_threshold_for_tlm_disruption | ||
| ) |
driver_super.c の 1571 行目に定義があります。
| void DSSC_set_tx_frame | ( | DS_StreamConfig * | p_stream_config, |
| uint8_t * | tx_frame | ||
| ) |
| void DSSC_set_tx_frame_buffer_size | ( | DS_StreamConfig * | p_stream_config, |
| const int16_t | tx_frame_buffer_size | ||
| ) |
| void DSSC_set_tx_frame_size | ( | DS_StreamConfig * | p_stream_config, |
| const uint16_t | tx_frame_size | ||
| ) |