Files
motor/Common/spi/SPI_Bridge.h
T
2024-09-26 22:32:20 +08:00

87 lines
1.7 KiB
C

/*
* 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 <cmsis_os.h>
#include <stdint.h>
#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__ */