87 lines
1.7 KiB
C
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__ */
|