Skip to content

Commit

Permalink
Merge pull request #146 from arkedge/feature/rename-driver2
Browse files Browse the repository at this point in the history
Rename Driver -> Component Driver
  • Loading branch information
sksat authored Oct 13, 2023
2 parents 7453213 + fa4518f commit ba3aa55
Show file tree
Hide file tree
Showing 28 changed files with 1,181 additions and 1,141 deletions.
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

0 comments on commit ba3aa55

Please sign in to comment.