/* * SPI_Bridge.h * * Created on: Jun 13, 2020 * Author: matth */ #ifndef __SPI_BRIDGE_H__ #define __SPI_BRIDGE_H__ #include "SPIDevice.h" #include "main.h" #include #include #ifdef __cplusplus extern "C" { #endif #ifndef SPI_Bridge_QUEUE_LEN # define SPI_Bridge_QUEUE_LEN (2048) #endif #ifndef SPI_Bridge_BLOCK_LEN # define SPI_Bridge_BLOCK_LEN (64) #endif #ifndef SPI_Bridge_UNPACK_LEN # define SPI_Bridge_UNPACK_LEN (512) #endif typedef struct SPI_Bridge { SPI_DEV_t *hdev; osMutexId pack_mutex_id; uint8_t queue_in[SPI_Bridge_QUEUE_LEN]; uint16_t queue_in_hdr; uint16_t queue_in_tail; uint8_t queue_out[SPI_Bridge_QUEUE_LEN]; uint16_t queue_out_hdr; uint16_t queue_out_tail; uint8_t buff[SPI_Bridge_BLOCK_LEN]; uint8_t buff_in[SPI_Bridge_BLOCK_LEN]; int stage; size_t idx; size_t len; uint8_t sum; uint8_t id; uint8_t data[SPI_Bridge_UNPACK_LEN]; /* monitor */ size_t error_cnt; size_t count_in; size_t count_out; size_t pkg_in; size_t pkg_out; size_t dia_in; /* diagram in */ size_t dia_out; /* diagram out */ size_t Bps_in; size_t Pps_in; size_t Dps_in; size_t Bps_out; size_t Pps_out; size_t Dps_out; } SPI_Bridge_t; void SPI_Bridge_init(SPI_Bridge_t *b, SPI_DEV_t *hdev, osMutexId pack_mutex); void SPI_Bridge_pack(SPI_Bridge_t *b, uint8_t id, uint8_t cmd[], size_t len, uint32_t millisec); int SPI_Bridge_unpack(SPI_Bridge_t *b); void SPI_Bridge_Master_TransmitReceive(SPI_Bridge_t *b, uint32_t millisec, uint32_t millisec_wait, uint32_t millisec_trans); void SPI_Bridge_Slave_TransmitReceive(SPI_Bridge_t *b, uint32_t millisec, uint32_t millisec_trans); void SPI_Bridge_stats(SPI_Bridge_t *b); #ifdef __cplusplus } #endif #endif /* __SPI_BRIDGE_H__ */