C2A_Core
uart_test.c
[詳解]
1 #pragma section REPRO
7 #include "uart_test.h"
10 #include "../../Settings/sils_define.h"
11 #include "string.h" // for memcpy
12 #include <stdio.h> // SILSでのprint
13 
14 // ヘッダーフッター
15 #define UART_TEST_HEADER_SIZE (8)
16 #define UART_TEST_FOOTER_SIZE (2)
17 #define UART_TEST_TX_FRAME_SIZE_MAX (16)
18 
19 static const uint8_t UART_TEST_header_[UART_TEST_HEADER_SIZE] = {0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7};
20 static const uint8_t UART_TEST_footer_[UART_TEST_FOOTER_SIZE] = {0xBF, 0xBE};
21 
22 #define UART_TEST_STREAM_FIX (0)
23 #define UART_TEST_STREAM_VAR (1)
24 
26 
28 static DS_ERR_CODE UART_TEST_analyze_rec_data_(DS_StreamConfig* p_stream_config, void* p_driver);
29 
30 
32 {
33  DS_ERR_CODE ret;
34 
40 
43  rx_buffers,
45  if (ret != DS_ERR_CODE_OK) return DS_INIT_DS_INIT_ERR;
46  return DS_INIT_OK;
47 }
48 
49 
51 {
52  DS_StreamConfig* p_stream_config;
53 
54  p_super->interface = UART;
55 
56  // stream0の設定
57  p_stream_config = &(p_super->stream_config[UART_TEST_STREAM_FIX]);
58  DSSC_enable(p_stream_config);
59  DSSC_enable_strict_frame_search(p_stream_config);
60 
61  // 送信はする
62  DSSC_set_tx_frame(p_stream_config, UART_TEST_tx_frame_); // 送る直前に中身をmemcpyする
63  DSSC_set_tx_frame_size(p_stream_config, 0); // 送る直前に値をセットする
64 
65  // 定期的な受信はする
68  DSSC_set_rx_frame_size(p_stream_config, 12);
70 
71  // stream1の設定
72  p_stream_config = &(p_super->stream_config[UART_TEST_STREAM_VAR]);
73  DSSC_enable(p_stream_config);
74  DSSC_enable_strict_frame_search(p_stream_config);
75 
76  // 送信はしない
77 
78  // 定期的な受信はする
81  DSSC_set_rx_frame_size(p_stream_config, -1); // 可変
83  DSSC_set_rx_framelength_type_size(p_stream_config, 2);
86 
87  // 定期TLMの監視機能の有効化しない → ので設定上書きなし
88 
89  return DS_ERR_CODE_OK;
90 }
91 
92 
94 {
95  DS_ERR_CODE ret;
96  DS_StreamConfig* p_stream_config;
97 
99 
100  if (ret != DS_ERR_CODE_OK) return DS_REC_DS_RECEIVE_ERR;
101 
104  {
106  }
107 
110  {
112  }
113 
114  // 返り値ぐだぐだだけど,まあテストコードなので...
115  if (ret != DS_ERR_CODE_OK) return DS_REC_ANALYZE_ERR;
116 
117  return DS_REC_OK;
118 }
119 
120 
121 static DS_ERR_CODE UART_TEST_analyze_rec_data_(DS_StreamConfig* p_stream_config, void* p_driver)
122 {
124  uint16_t i;
125 
126  (void)(uart_test_driver);
127 
128 #ifndef SILS_FW
129  Printf("DEC DATA: %d\n", DSSC_get_rec_status(p_stream_config)->fixed_frame_len);
130  for (i = 0; i < DSSC_get_rec_status(p_stream_config)->fixed_frame_len; i++)
131  {
132  Printf("%02x ", DSSC_get_rx_frame(p_stream_config)[i]);
133  }
134  Printf(" \n");
135 #else
136  printf("DEC DATA: %d\n", DSSC_get_rec_status(p_stream_config)->fixed_frame_len);
137  for (i = 0; i < DSSC_get_rec_status(p_stream_config)->fixed_frame_len; i++)
138  {
139  printf("%02x ", DSSC_get_rx_frame(p_stream_config)[i]);
140  }
141  printf(" \n");
142 #endif
143  return DS_ERR_CODE_OK;
144 }
145 
146 
148 {
149  DS_ERR_CODE ret;
150  DS_StreamConfig* p_stream_config;
151 
153 
154  switch (id)
155  {
156  case 0:
157  UART_TEST_tx_frame_[0] = 'i';
158  UART_TEST_tx_frame_[1] = 'd';
159  UART_TEST_tx_frame_[2] = '0';
160  UART_TEST_tx_frame_[3] = 'a';
161  UART_TEST_tx_frame_[4] = 'b';
162  UART_TEST_tx_frame_[5] = 0x0d;
163  UART_TEST_tx_frame_[6] = 0x0a;
164  DSSC_set_tx_frame_size(p_stream_config, 7);
165  break;
166  case 1:
167  UART_TEST_tx_frame_[0] = 'i';
168  UART_TEST_tx_frame_[1] = 'd';
169  UART_TEST_tx_frame_[2] = '1';
170  UART_TEST_tx_frame_[3] = 'A';
171  UART_TEST_tx_frame_[4] = 'B';
172  UART_TEST_tx_frame_[5] = 0x0d;
173  UART_TEST_tx_frame_[6] = 0x0a;
174  DSSC_set_tx_frame_size(p_stream_config, 7);
175  break;
176  case 2:
177  UART_TEST_tx_frame_[0] = 'i';
178  UART_TEST_tx_frame_[1] = 'd';
179  UART_TEST_tx_frame_[2] = '2';
180  UART_TEST_tx_frame_[3] = 0x0d;
181  UART_TEST_tx_frame_[4] = 0x0a;
182  DSSC_set_tx_frame_size(p_stream_config, 5);
183  break;
184  default:
185  UART_TEST_tx_frame_[0] = 'd';
186  UART_TEST_tx_frame_[1] = 'e';
187  UART_TEST_tx_frame_[2] = 'f';
188  UART_TEST_tx_frame_[3] = 'a';
189  UART_TEST_tx_frame_[4] = 'u';
190  UART_TEST_tx_frame_[5] = 'l';
191  UART_TEST_tx_frame_[6] = 't';
192  UART_TEST_tx_frame_[7] = 0x0d;
193  UART_TEST_tx_frame_[8] = 0x0a;
194  DSSC_set_tx_frame_size(p_stream_config, 9);
195  break;
196  }
197 
199  if (ret == DS_ERR_CODE_OK)
200  {
201  return DS_CMD_OK;
202  }
203  else
204  {
206  }
207 }
208 
209 #pragma section
CCP 関連基本関数の宣言
const UART_TEST_Driver *const uart_test_driver
Definition: di_uart_test.c:24
void DSSC_enable_strict_frame_search(DS_StreamConfig *p_stream_config)
void DSSC_set_rx_frame_size(DS_StreamConfig *p_stream_config, const int16_t rx_frame_size)
void DSSC_set_rx_framelength_type_size(DS_StreamConfig *p_stream_config, const uint16_t rx_framelength_type_size)
void DSSC_set_tx_frame(DS_StreamConfig *p_stream_config, uint8_t *tx_frame)
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)
void DSSC_set_rx_framelength_offset(DS_StreamConfig *p_stream_config, const uint16_t rx_framelength_offset)
void DSSC_set_tx_frame_size(DS_StreamConfig *p_stream_config, const uint16_t tx_frame_size)
void DSSC_set_rx_header(DS_StreamConfig *p_stream_config, const uint8_t *rx_header, const uint16_t rx_header_size)
DS_ERR_CODE DS_receive(DriverSuper *p_super)
継承先の機器からテレメトリを受信する
Definition: driver_super.c:355
DS_ERR_CODE DS_init_streams(DriverSuper *p_super, void *if_config, DS_StreamRecBuffer *rx_buffers[DS_STREAM_MAX], DS_ERR_CODE(*load_init_setting)(DriverSuper *p_super))
継承先の機器より DriverSuper を初期化する(複数の stream を使用する場合)
Definition: driver_super.c:254
void DSSC_set_data_analyzer(DS_StreamConfig *p_stream_config, DS_ERR_CODE(*data_analyzer)(DS_StreamConfig *p_stream_config, void *p_driver))
const uint8_t * DSSC_get_rx_frame(const DS_StreamConfig *p_stream_config)
確定したフレームを取得
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)
void DSSC_set_rx_framelength_pos(DS_StreamConfig *p_stream_config, const int16_t rx_framelength_pos)
void DSSC_set_rx_footer(DS_StreamConfig *p_stream_config, const uint8_t *rx_footer, const uint16_t rx_footer_size)
@ 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
#define DS_STREAM_MAX
Definition: driver_super.h:31
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_OK
返り値は継承先や IF 先で上書きされるため,OK は 0 であることが必須
Definition: driver_super.h:117
@ UART
Definition: if_list.h:11
HW 依存 Print, つまり ログ情報のフォーマット出力(デバッグ出力)
void Printf(const char *format,...)
Definition: print.c:9
DriverSuperStream の設定
Definition: driver_super.h:281
フレーム受信バッファ
Definition: driver_super.h:222
DS_STREAM_REC_STATUS_CODE status_code
status
Definition: driver_super.h:207
uint16_t fixed_frame_len
フレーム確定したときのフレーム長さ
Definition: driver_super.h:208
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
struct UART_TEST_Driver::@74 driver
UART_Config uart_config
RS422 class
Definition: uart_test.h:29
DriverSuper super
DriverSuper class
Definition: uart_test.h:28
@ UART_DATA_LENGTH_8BIT
Definition: uart.h:37
@ PARITY_SETTINGS_NONE
パリティチェックをしない
Definition: uart.h:23
@ UART_STOP_BIT_1BIT
Definition: uart.h:46
#define UART_TEST_TX_FRAME_SIZE_MAX
Definition: uart_test.c:17
static const uint8_t UART_TEST_footer_[UART_TEST_FOOTER_SIZE]
Definition: uart_test.c:20
DS_CMD_ERR_CODE UART_TEST_send(UART_TEST_Driver *uart_test_driver, uint8_t id)
UART_TESTへのコマンド送信
Definition: uart_test.c:147
static const uint8_t UART_TEST_header_[UART_TEST_HEADER_SIZE]
Definition: uart_test.c:19
#define UART_TEST_STREAM_FIX
固定長
Definition: uart_test.c:22
static DS_ERR_CODE UART_TEST_analyze_rec_data_(DS_StreamConfig *p_stream_config, void *p_driver)
Definition: uart_test.c:121
DS_INIT_ERR_CODE UART_TEST_init(UART_TEST_Driver *uart_test_driver, uint8_t ch, DS_StreamRecBuffer *rx_buffers[DS_STREAM_MAX])
UART_TEST初期化
Definition: uart_test.c:31
static DS_ERR_CODE UART_TEST_load_driver_super_init_settings_(DriverSuper *p_super)
Definition: uart_test.c:50
#define UART_TEST_FOOTER_SIZE
Definition: uart_test.c:16
DS_REC_ERR_CODE UART_TEST_rec(UART_TEST_Driver *uart_test_driver)
UART_TESTのデータ(テレメ)受信
Definition: uart_test.c:93
#define UART_TEST_HEADER_SIZE
Definition: uart_test.c:15
#define UART_TEST_STREAM_VAR
可変長
Definition: uart_test.c:23
static uint8_t UART_TEST_tx_frame_[UART_TEST_TX_FRAME_SIZE_MAX]
Definition: uart_test.c:25
テスト用UARTのDriver