Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rename Driver -> Component Driver #146

Merged
merged 23 commits into from
Oct 13, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@ set(C2A_CORE_DIR ${CMAKE_CURRENT_SOURCE_DIR})

set(C2A_SRCS
c2a_core_main.c
driver/common_tlm_cmd_packet_for_driver_super.c
driver/eb90_frame_for_driver_super.c
driver/eb90_packet_for_driver_super.c
driver/driver_super.c
component_driver/common_tlm_cmd_packet_for_driver_super.c
component_driver/eb90_frame_for_driver_super.c
component_driver/eb90_packet_for_driver_super.c
component_driver/driver_super.c
hal/i2c_common.c
system/application_manager/app_info.c
system/application_manager/app_manager.c
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,39 +3,39 @@
* @file
* @brief コンポ間通信などで標準的に使う ネットワーク層 の Common Tlm Cmd Packet (概ね Space Packet)
* @note ここでは,データリンク層は CCSDS ではなく EB90 Frame を使うことを想定 (TODO: 今後拡張予定)
* @note データリンク層は DS_StreamConfig.data_link_layer_ で規定する
* @note データリンク層は CDS_StreamConfig.data_link_layer_ で規定する
* @note packet 構造 などは tlm_cmd/common_tlm_cmd_packet.h を参照のこと
*/
#include "common_tlm_cmd_packet_for_driver_super.h"
#include "eb90_frame_for_driver_super.h"
#include <string.h>

// FIXME: DS_StreamConfig.data_link_layer_ をちゃんと見る!
// FIXME: CDS_StreamConfig.data_link_layer_ をちゃんと見る!

DS_ERR_CODE CTCP_get_ctcp_from_dssc(const DS_StreamConfig* p_stream_config, CommonTlmCmdPacket* received_packet)
CDS_ERR_CODE CTCP_get_ctcp_from_cdssc(const CDS_StreamConfig* p_stream_config, CommonTlmCmdPacket* received_packet)
{
const uint16_t packet_len = EB90_FRAME_get_packet_length_from_dssc(p_stream_config);
const uint16_t packet_len = EB90_FRAME_get_packet_length_from_cdssc(p_stream_config);

if (packet_len > CTCP_MAX_LEN) return DS_ERR_CODE_ERR;
if (packet_len > CTCP_MAX_LEN) return CDS_ERR_CODE_ERR;

// まず, 受信データ長だけコピーしてしまってから,アサーションする(効率のため)
memcpy(&received_packet->packet, EB90_FRAME_get_packet_head_from_dssc(p_stream_config), (size_t)packet_len);
if (CTCP_get_packet_len(received_packet) != packet_len) return DS_ERR_CODE_ERR;
if (!CTCP_is_valid_packet(received_packet)) return DS_ERR_CODE_ERR;
return DS_ERR_CODE_OK;
memcpy(&received_packet->packet, EB90_FRAME_get_packet_head_from_cdssc(p_stream_config), (size_t)packet_len);
if (CTCP_get_packet_len(received_packet) != packet_len) return CDS_ERR_CODE_ERR;
if (!CTCP_is_valid_packet(received_packet)) return CDS_ERR_CODE_ERR;
return CDS_ERR_CODE_OK;
}


DS_ERR_CODE CTP_get_ctp_from_dssc(const DS_StreamConfig* p_stream_config, CommonTlmPacket* received_packet)
CDS_ERR_CODE CTP_get_ctp_from_cdssc(const CDS_StreamConfig* p_stream_config, CommonTlmPacket* received_packet)
{
const uint16_t packet_len = EB90_FRAME_get_packet_length_from_dssc(p_stream_config);
const uint16_t packet_len = EB90_FRAME_get_packet_length_from_cdssc(p_stream_config);

if (packet_len > CTP_MAX_LEN) return DS_ERR_CODE_ERR;
if (packet_len > CTP_MAX_LEN) return CDS_ERR_CODE_ERR;

// まず, 受信データ長だけコピーしてしまってから,アサーションする(効率のため)
memcpy(&received_packet->packet, EB90_FRAME_get_packet_head_from_dssc(p_stream_config), (size_t)packet_len);
if (CTP_get_packet_len(received_packet) != packet_len) return DS_ERR_CODE_ERR;
if (!CTP_is_valid_packet(received_packet)) return DS_ERR_CODE_ERR;
memcpy(&received_packet->packet, EB90_FRAME_get_packet_head_from_cdssc(p_stream_config), (size_t)packet_len);
if (CTP_get_packet_len(received_packet) != packet_len) return CDS_ERR_CODE_ERR;
if (!CTP_is_valid_packet(received_packet)) return CDS_ERR_CODE_ERR;

// On-Board Subnetwork Time を設定
if (CTP_get_on_board_subnet_time(received_packet) == 0xffffffff)
Expand All @@ -45,73 +45,73 @@ DS_ERR_CODE CTP_get_ctp_from_dssc(const DS_StreamConfig* p_stream_config, Common
// MOBC - sub OBC (2nd OBC) - 3rd OBC というとき, 2nd OBC でも 0xffffffff ができるようにしている
CTP_set_on_board_subnet_time(received_packet);
}
return DS_ERR_CODE_OK;
return CDS_ERR_CODE_OK;
}


DS_ERR_CODE CCP_get_ccp_from_dssc(const DS_StreamConfig* p_stream_config, CommonCmdPacket* received_packet)
CDS_ERR_CODE CCP_get_ccp_from_cdssc(const CDS_StreamConfig* p_stream_config, CommonCmdPacket* received_packet)
{
const uint16_t packet_len = EB90_FRAME_get_packet_length_from_dssc(p_stream_config);
const uint16_t packet_len = EB90_FRAME_get_packet_length_from_cdssc(p_stream_config);

if (packet_len > CCP_MAX_LEN) return DS_ERR_CODE_ERR;
if (packet_len > CCP_MAX_LEN) return CDS_ERR_CODE_ERR;

// まず, 受信データ長だけコピーしてしまってから,アサーションする(効率のため)
memcpy(&received_packet->packet, EB90_FRAME_get_packet_head_from_dssc(p_stream_config), (size_t)packet_len);
if (CCP_get_packet_len(received_packet) != packet_len) return DS_ERR_CODE_ERR;
if (!CCP_is_valid_packet(received_packet)) return DS_ERR_CODE_ERR;
return DS_ERR_CODE_OK;
memcpy(&received_packet->packet, EB90_FRAME_get_packet_head_from_cdssc(p_stream_config), (size_t)packet_len);
if (CCP_get_packet_len(received_packet) != packet_len) return CDS_ERR_CODE_ERR;
if (!CCP_is_valid_packet(received_packet)) return CDS_ERR_CODE_ERR;
return CDS_ERR_CODE_OK;
}


DS_ERR_CODE CTCP_init_dssc(DS_StreamConfig* p_stream_config,
uint8_t* tx_frame_buffer,
int16_t tx_frame_buffer_size,
DS_ERR_CODE (*data_analyzer)(DS_StreamConfig* p_stream_config, void* p_driver))
CDS_ERR_CODE CTCP_init_cdssc(CDS_StreamConfig* p_stream_config,
uint8_t* tx_frame_buffer,
int16_t tx_frame_buffer_size,
CDS_ERR_CODE (*data_analyzer)(CDS_StreamConfig* p_stream_config, void* p_driver))
{
// MOBC か sub OBC かによって,送信側 (tx 側) が CTP になるか CCP になるかは不明なため,ひとまず CTCP に
// メモリが苦しい OBC もあるので,考えてもいいかも
const uint16_t max_frame_size = EB90_FRAME_HEADER_SIZE + CTCP_MAX_LEN + EB90_FRAME_FOOTER_SIZE;
if (tx_frame_buffer_size < max_frame_size)
{
return DS_ERR_CODE_ERR;
return CDS_ERR_CODE_ERR;
}

// 送信はする
DSSC_set_tx_frame(p_stream_config, tx_frame_buffer); // 送る直前に中身を memcpy する
DSSC_set_tx_frame_buffer_size(p_stream_config, tx_frame_buffer_size);
DSSC_set_tx_frame_size(p_stream_config, 0); // 送る直前に値をセットする
CDSSC_set_tx_frame(p_stream_config, tx_frame_buffer); // 送る直前に中身を memcpy する
CDSSC_set_tx_frame_buffer_size(p_stream_config, tx_frame_buffer_size);
CDSSC_set_tx_frame_size(p_stream_config, 0); // 送る直前に値をセットする

// 定期的な受信はする
DSSC_set_rx_header(p_stream_config, EB90_FRAME_kStx, EB90_FRAME_STX_SIZE);
DSSC_set_rx_footer(p_stream_config, EB90_FRAME_kEtx, EB90_FRAME_ETX_SIZE);
DSSC_set_rx_frame_size(p_stream_config, -1); // 可変
DSSC_set_max_rx_frame_size(p_stream_config, max_frame_size);
DSSC_set_rx_framelength_pos(p_stream_config, EB90_FRAME_STX_SIZE);
DSSC_set_rx_framelength_type_size(p_stream_config, 2);
DSSC_set_rx_framelength_offset(p_stream_config,
CDSSC_set_rx_header(p_stream_config, EB90_FRAME_kStx, EB90_FRAME_STX_SIZE);
CDSSC_set_rx_footer(p_stream_config, EB90_FRAME_kEtx, EB90_FRAME_ETX_SIZE);
CDSSC_set_rx_frame_size(p_stream_config, -1); // 可変
CDSSC_set_max_rx_frame_size(p_stream_config, max_frame_size);
CDSSC_set_rx_framelength_pos(p_stream_config, EB90_FRAME_STX_SIZE);
CDSSC_set_rx_framelength_type_size(p_stream_config, 2);
CDSSC_set_rx_framelength_offset(p_stream_config,
EB90_FRAME_HEADER_SIZE + EB90_FRAME_FOOTER_SIZE);
DSSC_set_data_analyzer(p_stream_config, data_analyzer);
CDSSC_set_data_analyzer(p_stream_config, data_analyzer);

// 定期 TLM の監視機能の有効化はここではしないので, Driver 側でやる
// 定期 TLM の監視機能の有効化はここではしないので, ComponentDriver 側でやる
// enable もここではしない

return DS_ERR_CODE_OK;
return CDS_ERR_CODE_OK;
}


DS_ERR_CODE CTCP_set_tx_frame_to_dssc(DS_StreamConfig* p_stream_config,
const CommonTlmCmdPacket* send_packet)
CDS_ERR_CODE CTCP_set_tx_frame_to_cdssc(CDS_StreamConfig* p_stream_config,
const CommonTlmCmdPacket* send_packet)
{
size_t pos;
size_t size;
uint16_t crc;
uint16_t packet_len = CTCP_get_packet_len(send_packet);
uint16_t frame_len = (uint16_t)(packet_len + EB90_FRAME_HEADER_SIZE + EB90_FRAME_FOOTER_SIZE);
uint8_t* tx_frame = DSSC_get_tx_frame_as_non_const_pointer(p_stream_config);
uint8_t* tx_frame = CDSSC_get_tx_frame_as_non_const_pointer(p_stream_config);

if (frame_len > DSSC_get_tx_frame_buffer_size(p_stream_config)) return DS_ERR_CODE_ERR;
if (frame_len > CDSSC_get_tx_frame_buffer_size(p_stream_config)) return CDS_ERR_CODE_ERR;

DSSC_set_tx_frame_size(p_stream_config, frame_len);
CDSSC_set_tx_frame_size(p_stream_config, frame_len);

pos = 0;
size = EB90_FRAME_STX_SIZE;
Expand All @@ -132,25 +132,25 @@ DS_ERR_CODE CTCP_set_tx_frame_to_dssc(DS_StreamConfig* p_stream_config,
size = EB90_FRAME_ETX_SIZE;
memcpy(&(tx_frame[pos]), EB90_FRAME_kEtx, size);

return DS_ERR_CODE_OK;
return CDS_ERR_CODE_OK;
}


DS_ERR_CODE CTP_set_tx_frame_to_dssc(DS_StreamConfig* p_stream_config,
const CommonTlmPacket* send_packet)
CDS_ERR_CODE CTP_set_tx_frame_to_cdssc(CDS_StreamConfig* p_stream_config,
const CommonTlmPacket* send_packet)
{
const CommonTlmCmdPacket* ctcp = CTCP_convert_from_ctp(send_packet);
if (ctcp == NULL) return DS_ERR_CODE_ERR;
return CTCP_set_tx_frame_to_dssc(p_stream_config, ctcp);
if (ctcp == NULL) return CDS_ERR_CODE_ERR;
return CTCP_set_tx_frame_to_cdssc(p_stream_config, ctcp);
}


DS_ERR_CODE CCP_set_tx_frame_to_dssc(DS_StreamConfig* p_stream_config,
const CommonCmdPacket* send_packet)
CDS_ERR_CODE CCP_set_tx_frame_to_cdssc(CDS_StreamConfig* p_stream_config,
const CommonCmdPacket* send_packet)
{
const CommonTlmCmdPacket* ctcp = CTCP_convert_from_ccp(send_packet);
if (ctcp == NULL) return DS_ERR_CODE_ERR;
return CTCP_set_tx_frame_to_dssc(p_stream_config, ctcp);
if (ctcp == NULL) return CDS_ERR_CODE_ERR;
return CTCP_set_tx_frame_to_cdssc(p_stream_config, ctcp);
}

#pragma section
92 changes: 92 additions & 0 deletions component_driver/common_tlm_cmd_packet_for_driver_super.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
/**
* @file
* @brief コンポ間通信などで標準的に使う ネットワーク層 の Common Tlm Cmd Packet (概ね Space Packet)
* @note ここでは,データリンク層は CCSDS ではなく EB90 Frame を使うことを想定 (TODO: 今後拡張予定)
* @note データリンク層は CDS_StreamConfig.data_link_layer_ で規定する
* @note packet 構造 などは tlm_cmd/common_tlm_cmd_packet.h を参照のこと
*/
#ifndef COMMON_TLM_CMD_PACKET_FOR_DRIVER_SUPER_H_
#define COMMON_TLM_CMD_PACKET_FOR_DRIVER_SUPER_H_

#include <stdint.h>
#include "driver_super.h"
#include "../tlm_cmd/common_tlm_cmd_packet.h"

/**
* @brief CommonTlmCmdPacket を受信データからコピーして取得する
* @note フレームが確定しているときに呼び出すこと
* @param[in] p_stream_config: ComponentDriverSuper 構造体の CDS_StreamConfig
* @param[out] received_packet: 抽出したパケット
* @retval CDS_ERR_CODE_OK: 正常終了
* @retval CDS_ERR_CODE_ERR: パケット長が異常など,エラーでコピーできない
*/
CDS_ERR_CODE CTCP_get_ctcp_from_cdssc(const CDS_StreamConfig* p_stream_config, CommonTlmCmdPacket* received_packet);

/**
* @brief CommonTlmPacket を受信データからコピーして取得する
* @note フレームが確定しているときに呼び出すこと
* @param[in] p_stream_config: ComponentDriverSuper 構造体の CDS_StreamConfig
* @param[out] received_packet: 抽出したパケット
* @retval CDS_ERR_CODE_OK: 正常終了
* @retval CDS_ERR_CODE_ERR: パケット長が異常など,エラーでコピーできない
*/
CDS_ERR_CODE CTP_get_ctp_from_cdssc(const CDS_StreamConfig* p_stream_config, CommonTlmPacket* received_packet);

/**
* @brief CommonCmdPacket を受信データからコピーして取得する
* @note フレームが確定しているときに呼び出すこと
* @param[in] p_stream_config: ComponentDriverSuper 構造体の CDS_StreamConfig
* @param[out] received_packet: 抽出したパケット
* @retval CDS_ERR_CODE_OK: 正常終了
* @retval CDS_ERR_CODE_ERR: パケット長が異常など,エラーでコピーできない
*/
CDS_ERR_CODE CCP_get_ccp_from_cdssc(const CDS_StreamConfig* p_stream_config, CommonCmdPacket* received_packet);

/**
* @brief C2A 間通信など, CTCP をコンポ間通信に用いるとき,CDS_init で渡す初期化関数内部用の Init Util
*
* これを呼び出すと,まるっと DSSC の初期設定ができる.
* @note CDSSC_enable は ComponentDriver 側でやること
* @param[in] p_stream_config: ComponentDriverSuper 構造体の CDS_StreamConfig
* @param[in] tx_frame_buffer: コマンドフレーム(送信フレーム)のバッファ
* @param[in] tx_frame_buffer_size: バッファサイズ
* @param[in] data_analyzer: CDSSC_set_data_analyzer で渡すための data_analyzer
* @retval CDS_ERR_CODE_OK: 正常終了
* @retval CDS_ERR_CODE_ERR: フレームバッファのサイズ不足などのエラー
*/
CDS_ERR_CODE CTCP_init_cdssc(CDS_StreamConfig* p_stream_config,
uint8_t* tx_frame_buffer,
int16_t tx_frame_buffer_size,
CDS_ERR_CODE (*data_analyzer)(CDS_StreamConfig* p_stream_config, void* p_driver));

/**
* @brief C2A 間通信など, CTCP をコンポ間通信に用いるときの tx_frame のセット
* @param[in] p_stream_config: ComponentDriverSuper 構造体の CDS_StreamConfig
* @param[in] send_packet: 送信するパケット
* @retval CDS_ERR_CODE_OK: 正常終了
* @retval CDS_ERR_CODE_ERR: DSSC 内部の設定不足などのエラー
*/
CDS_ERR_CODE CTCP_set_tx_frame_to_cdssc(CDS_StreamConfig* p_stream_config,
const CommonTlmCmdPacket* send_packet);

/**
* @brief C2A 間通信など, CTP をコンポ間通信に用いるときの tx_frame のセット
* @param[in] p_stream_config: ComponentDriverSuper 構造体の CDS_StreamConfig
* @param[in] send_packet: 送信するパケット
* @retval CDS_ERR_CODE_OK: 正常終了
* @retval CDS_ERR_CODE_ERR: DSSC 内部の設定不足などのエラー
*/
CDS_ERR_CODE CTP_set_tx_frame_to_cdssc(CDS_StreamConfig* p_stream_config,
const CommonTlmPacket* send_packet);

/**
* @brief C2A 間通信など, CCP をコンポ間通信に用いるときの tx_frame のセット
* @param[in] p_stream_config: ComponentDriverSuper 構造体の CDS_StreamConfig
* @param[in] send_packet: 送信するパケット
* @retval CDS_ERR_CODE_OK: 正常終了
* @retval CDS_ERR_CODE_ERR: DSSC 内部の設定不足などのエラー
*/
CDS_ERR_CODE CCP_set_tx_frame_to_cdssc(CDS_StreamConfig* p_stream_config,
const CommonCmdPacket* send_packet);

#endif
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/**
* @file
* @brief Driver Super の通信で使うプロトコルスタックのデータリンク層定義
* @brief ComponentDriverSuper の通信で使うプロトコルスタックのデータリンク層定義
*/
#ifndef DATA_LINK_LAYER_DEFINITION_H_
#define DATA_LINK_LAYER_DEFINITION_H_
Expand Down
Loading