59 #ifndef VIVICORESERIAL_H
60 # define VIVICORESERIAL_H
63 # define BOARD_REV_FP1_EVT (1)
64 # define BOARD_REV_FP1_DVT (2)
65 # define BOARD_REV_FP1_PVT (3)
66 # define BOARD_REV (BOARD_REV_FP1_DVT)
69 # define BOARD_TYPE (BOARD_TYPE_BRANCH)
72 # if (BOARD_TYPE == BOARD_TYPE_DEPRECATED_CUSTOM)
73 # define CORE_COMM_UART_PORT (1)
74 # define SKIP_VERIFY_BRANCH_TYPE
75 # elif (BOARD_TYPE == BOARD_TYPE_CUSTOM)
76 # define CORE_COMM_UART_PORT (1)
77 # define SKIP_VERIFY_BRANCH_TYPE
79 # elif (BOARD_TYPE == BOARD_TYPE_USER_BRANCH)
80 # define CORE_COMM_UART_PORT (0)
81 # define SKIP_VERIFY_BRANCH_TYPE
83 # define CORE_COMM_UART_PORT (0)
92 # define NUM_SERIAL_BYTES (10)
93 # define NUM_BRTYPE_BYTES (4)
95 # define NUM_MAX_TEMP_BUFF (30)
96 # define NUM_MAX_READ_BUFF (64)
103 # define SERIAL_BUFFER_SIZE (1UL << 4)
105 # define SERIAL_BUFFER_SIZE (1UL << 6)
108 # define RING_PKT_BUFFER_SIZE (10)
110 template <
typename T,
size_t N>
size_t countof(
const T (&)[N]) {
114 template <
typename T,
size_t SIZE>
struct RingBuffer {
116 volatile unsigned int head;
117 volatile unsigned int tail;
119 RingBuffer(
const unsigned int HEAD,
const unsigned int TAIL) : head(HEAD), tail(TAIL) {}
128 struct pkt_payload_t {
168 volatile uint8_t *ubrrl,
169 volatile uint8_t *ucsra,
170 volatile uint8_t *ucsrb,
171 volatile uint8_t *ucsrc,
172 volatile uint8_t *udr,
200 bool begin(
const uint32_t branch_type,
const uint16_t user_version,
const dcInfo_t *dc_info,
const uint8_t dc_num,
201 const uint16_t min_lib_buildno = 0);
264 bool write(
const uint8_t dc_n,
const int32_t data_scaler);
283 bool writeRaw(
const uint8_t *data,
const size_t data_len,
const dataType_t data_type = DATA_TYPE_DCDT);
306 bool isInFatalError(
void);
308 BranchCommand_t parseCommand(
const uint8_t c);
309 BranchCommandRes_t processCommand(
const BranchCommand_t cmd);
310 bool sendResponse(
const BranchCommand_t bcmd,
const BranchCommandRes_t res_type);
312 void clearTransmitting(
void);
313 void setSyncBreakReceived(
void);
315 volatile uint8_t *
const _ubrrh;
316 volatile uint8_t *
const _ubrrl;
317 volatile uint8_t *
const _ucsra;
318 volatile uint8_t *
const _ucsrb;
319 volatile uint8_t *
const _ucsrc;
320 volatile uint8_t *
const _udr;
323 const uint8_t _rxcie;
324 const uint8_t _udrie;
331 RingBuffer<pkt_payload_t, RING_PKT_BUFFER_SIZE> *_rx_buffer =
nullptr;
332 RingBuffer<unsigned char, SERIAL_BUFFER_SIZE> * _tx_buffer =
nullptr;
334 bool _is_passthru_mode =
false;
338 struct scalerDataW_t {
343 struct scalerDataR_t {
346 uint8_t dc_nums_count;
349 const uint8_t _signature[3];
350 const uint8_t _serial_number[NUM_SERIAL_BYTES];
354 uint8_t *_cmd_params =
nullptr;
355 uint8_t _cmd_params_len = 0;
356 uint8_t _data_len_by_user = 0;
358 scalerDataR_t _scaler_data_by_core = {};
359 scalerDataW_t _scaler_data_by_user = {};
360 scalerDataW_t _scaler_data_for_ini = {};
361 data_pkt _raw_data_by_core = {};
362 data_pkt _raw_data_by_user = {};
368 bool _dominate_led =
false;
370 volatile bool _is_dcdt_ok =
false;
371 volatile bool _send_flag =
false;
372 bool _is_read_polling =
false;
373 bool _in_transmitting =
false;
374 bool _is_sync_break_received =
false;
376 uint8_t _my_branch_id = 0;
377 uint32_t _my_branch_type = 0;
378 uint16_t _user_fw_ver = 0;
379 uint16_t _min_lib_buildno = 0;
380 bool _fatal_mode =
false;
381 BranchCommandParamFind_t _find_branch_mode = BCMDPARAM_FIND_BLINK_OFF;
382 uint32_t _saved_branch_type = 0;
388 bool pullFromRxRingBuff(data_pkt *raw_data);
389 void pushToRxRingBuff(
const uint8_t *buffer,
const uint8_t length,
const dataType_t data_type);
390 size_t pushToTxRingBuff(
const uint8_t c);
391 void pushToTxRingBuffAndTransmit(
const uint8_t *buffer,
const uint8_t datalen);
393 void setTransmitting(
void);
394 bool isTransmitting(
void);
395 bool isSyncBreakReceived(
void);
397 void setBaud(
unsigned long baud);
398 void setSyncBreak(
void);
400 void controlLedBlink(
const bool *timing_table,
const uint8_t max_count);
401 void controlLedOnOff(
const bool stop_blink);
402 void manageLedState(
void);
404 uint8_t getCRC8(
const uint8_t *buff,
const size_t size);
Communication protocol definitions for VIVIWARE Cell Branch and Custom.
#define NUM_MAX_UART_PKT
Maximum packet size for UART communication protocol.
Definition: CommunicationProtocol.h:168
#define NUM_MAX_UART_PKT_BODY_DATA
Maximum data size on a packet for UART communication protocol.
Definition: CommunicationProtocol.h:150
#define NUM_MAX_DC
Maximum number of DC info in a Branch.
Definition: CommunicationProtocol.h:265
Data code translater library to encode/decode DCDT for VIVIWARE Cell Branch and Custom.
Debug print library for VIVIWARE Cell Branch and Custom.
VivicoreSerial library version definition.
This class is to encode and decode DCDT format data which is used between VIVIWARE Cell App,...
Definition: VivicoreSerialDataCode.h:57
This class is for branch to talk with core.
Definition: VivicoreSerial.h:164
bool begin(const uint32_t branch_type, const uint16_t user_version, const dcInfo_t *dc_info, const uint8_t dc_num, const uint16_t min_lib_buildno=0)
Definition: VivicoreSerial.cpp:743
bool writeRaw(const uint8_t *data, const size_t data_len, const dataType_t data_type=DATA_TYPE_DCDT)
Definition: VivicoreSerial.cpp:1059
bool flush(void)
Definition: VivicoreSerial.cpp:997
RawData_t readRaw(void)
Definition: VivicoreSerial.cpp:976
AvailableNum_t available(void)
Definition: VivicoreSerial.cpp:920
void end(void)
Definition: VivicoreSerial.cpp:875
bool write(const uint8_t dc_n, const int32_t data_scaler)
Definition: VivicoreSerial.cpp:1086
ScalerData_t read(void)
Definition: VivicoreSerial.cpp:944
This is data buffer structure to get the number of available data for VivicoreSerial::available.
Definition: VivicoreSerial.h:156
uint8_t raw
Definition: VivicoreSerial.h:157
uint8_t scaler
Definition: VivicoreSerial.h:158
This is data buffer structure to read raw data from core.
Definition: VivicoreSerial.h:147
size_t data_len
Definition: VivicoreSerial.h:149
bool success
Definition: VivicoreSerial.h:150
uint8_t data[NUM_MAX_UART_PKT_BODY_DATA]
Definition: VivicoreSerial.h:148
This is data buffer structure to read scaler data from core.
Definition: VivicoreSerial.h:138
uint8_t dc_n
Definition: VivicoreSerial.h:139
bool success
Definition: VivicoreSerial.h:141
int32_t data
Definition: VivicoreSerial.h:140
DC information structure for each input or output of Branch.
Definition: VivicoreSerialDataCode.h:35