C2A_Core
aobc.c
[詳解]
1 #pragma section REPRO
6 #include "./aobc.h"
14 #include <string.h>
15 
16 #define AOBC_STREAM_TLM_CMD (0)
17 
19  CTCP_MAX_LEN +
21 
23 static DS_ERR_CODE AOBC_analyze_rec_data_(DS_StreamConfig* p_stream_config,
24  void* p_driver);
25 
27 {
28  DS_ERR_CODE ret;
29 
30  memset(aobc_driver, 0x00, sizeof(*aobc_driver));
32 
38 
39  ret = DS_init(&(aobc_driver->driver.super),
41  rx_buffer,
43  if (ret != DS_ERR_CODE_OK) return DS_INIT_DS_INIT_ERR;
44  return DS_INIT_OK;
45 }
46 
47 
49 {
50  DS_StreamConfig* p_stream_config;
51 
52  p_super->interface = UART;
53 
54  // stream は 0 のみ
55  p_stream_config = &(p_super->stream_config[AOBC_STREAM_TLM_CMD]);
56 
58 
59  // 定期 TLM の監視機能の有効化しない → ので設定上書きなし
60 
61  DSSC_enable(p_stream_config);
62 
63  return DS_ERR_CODE_OK;
64 }
65 
66 
68 {
69  DS_ERR_CODE ret;
70  DS_StreamConfig* p_stream_config;
71 
73 
74  if (ret != DS_ERR_CODE_OK) return DS_REC_DS_RECEIVE_ERR;
75 
77  if (DSSC_get_rec_status(p_stream_config)->status_code != DS_STREAM_REC_STATUS_FIXED_FRAME) return DS_REC_OK; // 受信せず([TODO] 詳細なエラー処理は一旦しない)
78 
80 
81  if (ret != DS_ERR_CODE_OK) return DS_REC_ANALYZE_ERR;
82 
83  return DS_REC_OK;
84 }
85 
86 
88  void* p_driver)
89 {
90  AOBC_Driver* aobc_driver = (AOBC_Driver*)p_driver;
91 
93 
94  if (!EB90_FRAME_is_valid_crc_of_dssc(p_stream_config))
95  {
97  return DS_ERR_CODE_ERR;
98  }
99 
100  return AOBC_buffer_tlm_packet(p_stream_config, aobc_driver);
101 }
102 
103 
104 // TODO: DS protocol 改修にともなって古くなったので治す
105 #if 0
106 // 非C2A系列はこのように書く
107 static DS_ERR_CODE AOBC_analyze_rec_data_(DS_StreamConfig* p_stream_config, void* p_driver)
108 {
109  AOBC_Driver* aobc_driver = (AOBC_Driver*)p_driver;
110  uint32_t tlm_ver = DS_ISSLFMT_get_tlm_version(p_stream_config);
111  uint32_t tlm_id = DS_ISSLFMT_get_tlm_id(tlm_ver, p_stream_config);
112 
114 
115  // [TODO] ここ自動生成したい...
116  switch (tlm_id)
117  {
118  case AOBC_Tlm_CODE_HK:
119  return AOBC_analyze_tlm_hk_(p_stream_config, aobc_driver);
120  default:
122  return DS_ERR_CODE_OK;
123  }
124 }
125 #endif
126 
127 
129 {
130  DS_ERR_CODE ret;
131  DS_StreamConfig* p_stream_config;
132  AOBC_CMD_CODE cmd_code;
133 
135 
136  // tx_frameの設定
137  CCP_set_tx_frame_to_dssc(p_stream_config, packet);
138 
139  cmd_code = (AOBC_CMD_CODE)CCP_get_id(packet);
140 
141  // [TODO] ここではコマンドが実際に存在するか,ということはフィルタしない!(でいいよね?)
142  // 必要があれば,AOBC 側で弾くべき.
143  switch (cmd_code)
144  {
145  case AOBC_Cmd_CODE_GENERATE_TLM: // FALLTHROUGH
146  case AOBC_Cmd_CODE_TG_GENERATE_TLM: // FALLTHROUGH
147  case AOBC_Cmd_CODE_TG_GENERATE_HP_TLM: // FALLTHROUGH
148  case AOBC_Cmd_CODE_TG_GENERATE_RT_TLM: // FALLTHROUGH
149  case AOBC_Cmd_CODE_TG_GENERATE_ST_TLM: // FALLTHROUGH
150  case AOBC_Cmd_CODE_TG_FORWARD_TLM: // FALLTHROUGH
151  case AOBC_Cmd_CODE_TG_FORWARD_AS_HP_TLM: // FALLTHROUGH
152  case AOBC_Cmd_CODE_TG_FORWARD_AS_RT_TLM: // FALLTHROUGH
155  break;
156  default:
158  break;
159  }
160 
161  if (ret == DS_ERR_CODE_OK)
162  {
163  return DS_CMD_OK;
164  }
165  else
166  {
167  // TODO: エラー処理?
169  }
170 }
171 
172 #pragma section
DS_CMD_ERR_CODE AOBC_send_cmd(AOBC_Driver *aobc_driver, const CommonCmdPacket *packet)
AOBC へのコマンド送信
Definition: aobc.c:128
static uint8_t AOBC_tx_frame_[EB90_FRAME_HEADER_SIZE+CTCP_MAX_LEN+EB90_FRAME_FOOTER_SIZE]
Definition: aobc.c:20
#define AOBC_STREAM_TLM_CMD
テレコマで使うストリーム
Definition: aobc.c:16
DS_REC_ERR_CODE AOBC_rec(AOBC_Driver *aobc_driver)
AOBC のデータ(テレメ)受信
Definition: aobc.c:67
static DS_ERR_CODE AOBC_analyze_rec_data_(DS_StreamConfig *p_stream_config, void *p_driver)
Definition: aobc.c:87
static DS_ERR_CODE AOBC_load_driver_super_init_settings_(DriverSuper *p_super)
Definition: aobc.c:48
DS_INIT_ERR_CODE AOBC_init(AOBC_Driver *aobc_driver, uint8_t ch, DS_StreamRecBuffer *rx_buffer)
AOBC 初期化
Definition: aobc.c:26
AOBC の Driver
@ AOBC_RX_ERR_CODE_CRC_ERR
Definition: aobc.h:35
@ AOBC_RX_ERR_CODE_TLM_NOT_FOUND
Definition: aobc.h:34
@ AOBC_RX_ERR_CODE_OK
Definition: aobc.h:33
コマンド定義
@ AOBC_Cmd_CODE_TG_FORWARD_TLM
@ AOBC_Cmd_CODE_TG_FORWARD_AS_ST_TLM
@ AOBC_Cmd_CODE_TG_GENERATE_TLM
@ AOBC_Cmd_CODE_TG_GENERATE_HP_TLM
@ AOBC_Cmd_CODE_TG_GENERATE_ST_TLM
@ AOBC_Cmd_CODE_TG_FORWARD_AS_HP_TLM
@ AOBC_Cmd_CODE_TG_GENERATE_RT_TLM
@ AOBC_Cmd_CODE_GENERATE_TLM
@ AOBC_Cmd_CODE_TG_FORWARD_AS_RT_TLM
void AOBC_init_tlm_buffer(AOBC_Driver *aobc_driver)
DS_ERR_CODE AOBC_buffer_tlm_packet(DS_StreamConfig *p_stream_config, AOBC_Driver *aobc_driver)
テレメトリバッファー(テレメ中継)
テレメトリ定義
CCP 関連基本関数の宣言
CMD_CODE CCP_get_id(const CommonCmdPacket *packet)
CMD ID を取得
CTCP 関連基本関数の宣言
#define CTCP_MAX_LEN
DS_ERR_CODE CCP_set_tx_frame_to_dssc(DS_StreamConfig *p_stream_config, const CommonCmdPacket *send_packet)
C2A 間通信など, CCP をコンポ間通信に用いるときの tx_frame のセット
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))
C2A 間通信など, CTCP をコンポ間通信に用いるとき,DS_init で渡す初期化関数内部用の Init Util
コンポ間通信などで標準的に使う ネットワーク層 の Common Tlm Cmd Packet (概ね Space Packet)
const AOBC_Driver *const aobc_driver
AOBC driver
Definition: di_aobc.c:23
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 のみの使用の場合)
Definition: driver_super.c:242
DS_ERR_CODE DS_analyze_rec_data(DriverSuper *p_super, uint8_t stream, void *p_driver)
data_analyzer_ を呼び出し,受信データを解析する.
Definition: driver_super.c:486
const DS_StreamRecStatus * DSSC_get_rec_status(const DS_StreamConfig *p_stream_config)
DS_ERR_CODE DS_receive(DriverSuper *p_super)
継承先の機器からテレメトリを受信する
Definition: driver_super.c:355
DS_ERR_CODE DS_send_general_cmd(DriverSuper *p_super, uint8_t stream)
継承先の機器に一般コマンドを発行する
Definition: driver_super.c:496
void DSSC_enable(DS_StreamConfig *p_stream_config)
DS_ERR_CODE DS_send_req_tlm_cmd(DriverSuper *p_super, uint8_t stream)
継承先の機器にテレメ要求コマンドを発行する
Definition: driver_super.c:517
@ DS_STREAM_REC_STATUS_FIXED_FRAME
Definition: driver_super.h:179
DS_INIT_ERR_CODE
Driver の初期化関数のエラーコード
Definition: driver_super.h:70
@ DS_INIT_OK
OK
Definition: driver_super.h:71
@ DS_INIT_DS_INIT_ERR
DS_init でのエラー
Definition: driver_super.h:72
DS_REC_ERR_CODE
Driver の受信関数のエラーコード
Definition: driver_super.h:84
@ DS_REC_OK
OK
Definition: driver_super.h:85
@ DS_REC_ANALYZE_ERR
DS_analyze_rec_data でのエラー
Definition: driver_super.h:87
@ DS_REC_DS_RECEIVE_ERR
DS_receive でのエラー
Definition: driver_super.h:86
DS_CMD_ERR_CODE
各DIが Driver にコマンドを送るときに,統一的に使うコード
Definition: driver_super.h:100
@ DS_CMD_OK
OKは0であることを保証する
Definition: driver_super.h:101
@ DS_CMD_DRIVER_SUPER_ERR
DriverSuper 側,つまり配送の低レイヤーでエラーが起きた場合
Definition: driver_super.h:105
DS_ERR_CODE
DriverSuper の汎用エラーコード
Definition: driver_super.h:116
@ DS_ERR_CODE_ERR
Definition: driver_super.h:118
@ DS_ERR_CODE_OK
返り値は継承先や IF 先で上書きされるため,OK は 0 であることが必須
Definition: driver_super.h:117
uint8_t EB90_FRAME_is_valid_crc_of_dssc(const DS_StreamConfig *p_stream_config)
EB90 Frame に付与された CRC が正しいかチェック
コンポ間通信などで標準的に使う データリンク層 の EB90 Frame
#define EB90_FRAME_HEADER_SIZE
EB90 Frame のヘッダサイズ
#define EB90_FRAME_FOOTER_SIZE
EB90 Frame のフッタサイズ
@ UART
Definition: if_list.h:11
struct AOBC_Driver::@22 driver
AOBC_Info info
Definition: aobc.h:70
UART_Config uart_config
RS422 class
Definition: aobc.h:68
DriverSuper super
DriverSuper class
Definition: aobc.h:67
struct AOBC_Info::@21 comm
通信情報
AOBC_RX_ERR_CODE rx_err_code
Definition: aobc.h:55
Space Packet (コマンド用)
DriverSuperStream の設定
Definition: driver_super.h:281
フレーム受信バッファ
Definition: driver_super.h:222
DS_STREAM_REC_STATUS_CODE status_code
status
Definition: driver_super.h:207
DriverSuper の設定 各 IF はこれを継承してつかう.
Definition: driver_super.h:407
IF_LIST_ENUM interface
継承先の機器の使用 IF
Definition: driver_super.h:409
DS_StreamConfig stream_config[DS_STREAM_MAX]
Definition: driver_super.h:414
PARITY_SETTINGS parity_settings
パリティ設定
Definition: uart.h:85
UART_DATA_LENGTH data_length
データ長
Definition: uart.h:86
uint32_t baudrate
継承先の機器のボーレート値
Definition: uart.h:84
uint8_t ch
継承先の機器がつながっているポート番号
Definition: uart.h:82
UART_STOP_BIT stop_bit
ストップビット
Definition: uart.h:87
@ UART_DATA_LENGTH_8BIT
Definition: uart.h:37
@ PARITY_SETTINGS_NONE
パリティチェックをしない
Definition: uart.h:23
@ UART_STOP_BIT_1BIT
Definition: uart.h:46