diff --git a/Examples/minimum_user_for_s2e/src/src_user/Settings/TlmCmd/Ccsds/space_packet_params.h b/Examples/minimum_user_for_s2e/src/src_user/Settings/TlmCmd/Ccsds/space_packet_params.h new file mode 100644 index 000000000..c6f826e73 --- /dev/null +++ b/Examples/minimum_user_for_s2e/src/src_user/Settings/TlmCmd/Ccsds/space_packet_params.h @@ -0,0 +1,14 @@ +/** + * @file + * @brief SpacePacket のユーザー設定 + */ +#ifndef SPACE_PACKET_PARAMS_H_ +#define SPACE_PACKET_PARAMS_H_ + +#undef SP_TLM_MAX_LEN +#undef SP_CMD_MAX_LEN + +#define SP_TLM_MAX_LEN (432) +#define SP_CMD_MAX_LEN (128) + +#endif diff --git a/TlmCmd/Ccsds/cmd_space_packet.c b/TlmCmd/Ccsds/cmd_space_packet.c new file mode 100644 index 000000000..926e82ad6 --- /dev/null +++ b/TlmCmd/Ccsds/cmd_space_packet.c @@ -0,0 +1,13 @@ +#pragma section REPRO +/** + * @file + * @brief CCSDS で規定される Space Packet の コマンド版の実装 + * @brief C ではテンプレートが使えないため,別で定義する + * @note 詳細は space_packet.h を参照 + */ + +#include "cmd_space_packet.h" +#include "space_packet.h" + + +#pragma section diff --git a/TlmCmd/Ccsds/cmd_space_packet.h b/TlmCmd/Ccsds/cmd_space_packet.h new file mode 100644 index 000000000..53237e90c --- /dev/null +++ b/TlmCmd/Ccsds/cmd_space_packet.h @@ -0,0 +1,17 @@ +/** + * @file + * @brief CCSDS で規定される Space Packet の コマンド版の実装 + * @brief C ではテンプレートが使えないため,別で定義する + * @note 詳細は space_packet.h を参照 + */ +#ifndef CMD_SPACE_PACKET_H_ +#define CMD_SPACE_PACKET_H_ + +// FIXME: 拡張性の高いように, Secondary Heaer の定義などを直していく +// https://github.com/ut-issl/c2a-core/issues/155 + +#include + + + +#endif diff --git a/TlmCmd/Ccsds/space_packet.h b/TlmCmd/Ccsds/space_packet.h index 2547f2ffc..3e5de7652 100644 --- a/TlmCmd/Ccsds/space_packet.h +++ b/TlmCmd/Ccsds/space_packet.h @@ -12,5 +12,131 @@ #ifndef SPACE_PACKET_H_ #define SPACE_PACKET_H_ +#include "tlm_space_packet.h" +#include "cmd_space_packet.h" + +#define SP_TLM_MAX_LEN (432) //!< TlmSpacePacket の最大パケット長.VCDU 分割しないならこれが最大値 +#define SP_CMD_MAX_LEN (128) //!< CmdSpacePacket の最大パケット長.値は適当においている + +// SP_TLM_MAX_LEN, SP_CMD_MAX_LEN を再定義 +#include +// ここで APID を定義する +// 詳細は common_tlm_cmd_packet.h を参照 +#include + +#if SP_TLM_MAX_LEN > SP_CMD_MAX_LEN +#define SP_MAX_LEN SP_TLM_MAX_LEN +#else +#define SP_MAX_LEN SP_CMD_MAX_LEN +#endif + +#define SP_PRM_HDR_LEN (6) //!< Packet Primary Header 長 + + +#if SP_TLM_MAX_LEN <= SP_PRM_HDR_LEN +#error SP_TLM_MAX_LEN is too small +#endif +#if SP_CMD_MAX_LEN <= SP_PRM_HDR_LEN +#error SP_CMD_MAX_LEN is too small +#endif + + + + + + + + +/** + * @enum SP_VER + * @brief Space Packet Version Number + * @note 3 bit + */ +typedef enum +{ + SP_VER_1 = 0, //!< 000b: Version-1 + SP_VER_UNKNOWN +} SP_VER; + +/** + * @enum SP_TYPE + * @brief Space Packet Type + * @note tlm or cmd を規定 + * @note 0/1の 1 bit + */ +typedef enum +{ + SP_TYPE_TLM = 0, //!< 0b: TELEMETRY + SP_TYPE_CMD = 1 //!< 1b: COMMAND +} SP_TYPE; + +/** + * @enum SP_2ND_HDR_FLAG + * @brief Space Packet Secandary Header Flag + * @note Secondary Header の有無 + * @note 0/1 の 1 bit + */ +typedef enum +{ + SP_2ND_HDR_FLAG_ABSENT = 0, //!< 0b: Secondary Header Absent + SP_2ND_HDR_FLAG_PRESENT = 1 //!< 1b: Secondary Header Present +} SP_2ND_HDR_FLAG; + +/** + * @enum SP_SEQ_FLAG + * @brief Space Packet Sequence Flag + * @note 2 bit +// FIXME +// * @note Packet Sequence Flag for each ADU もこれを用いる. +// * その場合, component を segment と読み替える. + */ +typedef enum +{ + SP_SEQ_FLAG_CONT = 0, //!< 00b: Continuation component of higher data structure + SP_SEQ_FLAG_FIRST = 1, //!< 01b: First component of higher data structure + SP_SEQ_FLAG_LAST = 2, //!< 10b: Last component of higher data structure + SP_SEQ_FLAG_SINGLE = 3 //!< 11b: Standalone packet +} SP_SEQ_FLAG; + + + + + + +/** + * @struct SpacePacket + * @brief Space Packet + */ +typedef struct +{ + uint8_t packet[SP_MAX_LEN]; +} SpacePacket; + +/** + * @struct TlmSpacePacket + * @brief Space Packet (テレメ用) + * @note C ではテンプレートが使えないため,別で定義する + * https://github.com/ut-issl/c2a-core/issues/204 + */ +typedef struct +{ + uint8_t packet[SP_TLM_MAX_LEN]; +} TlmSpacePacket; + +/** + * @struct CmdSpacePacket + * @brief Space Packet (コマンド用) + * @note C ではテンプレートが使えないため,別で定義する + * https://github.com/ut-issl/c2a-core/issues/204 + */ +typedef struct +{ + uint8_t packet[SP_CMD_MAX_LEN]; +} CmdSpacePacket; + + + + + #endif diff --git a/TlmCmd/Ccsds/tlm_space_packet.c b/TlmCmd/Ccsds/tlm_space_packet.c new file mode 100644 index 000000000..af56cc3b9 --- /dev/null +++ b/TlmCmd/Ccsds/tlm_space_packet.c @@ -0,0 +1,13 @@ +#pragma section REPRO +/** + * @file + * @brief CCSDS で規定される Space Packet の テレメ版の実装 + * @brief C ではテンプレートが使えないため,別で定義する + * @note 詳細は space_packet.h を参照 + */ + +#include "tlm_space_packet.h" +#include "space_packet.h" + + +#pragma section diff --git a/TlmCmd/Ccsds/tlm_space_packet.h b/TlmCmd/Ccsds/tlm_space_packet.h new file mode 100644 index 000000000..f4bd8c01c --- /dev/null +++ b/TlmCmd/Ccsds/tlm_space_packet.h @@ -0,0 +1,17 @@ +/** + * @file + * @brief CCSDS で規定される Space Packet の テレメ版の実装 + * @brief C ではテンプレートが使えないため,別で定義する + * @note 詳細は space_packet.h を参照 + */ +#ifndef TLM_SPACE_PACKET_H_ +#define TLM_SPACE_PACKET_H_ + +// FIXME: 拡張性の高いように, Secondary Heaer の定義などを直していく +// https://github.com/ut-issl/c2a-core/issues/155 + +#include + + + +#endif