30 lines
898 B
C++
30 lines
898 B
C++
#include "spi_api.h"
|
|
#include "SPI_F4HDK.h"
|
|
|
|
#if DEVICE_SPI_ASYNCH
|
|
#define SPI_S(obj) (( struct spi_s *)(&(obj->spi)))
|
|
#else
|
|
#define SPI_S(obj) (( struct spi_s *)(obj))
|
|
#endif
|
|
|
|
int spi_master_transfer_2(spi_t *obj, const unsigned char *tx, size_t tx_length, unsigned char *rx, size_t rx_length) {
|
|
struct spi_s *spiobj = SPI_S(obj);
|
|
SPI_HandleTypeDef *handle = &(spiobj->handle);
|
|
|
|
if(tx_length < rx_length) {
|
|
tx_length = rx_length;
|
|
}
|
|
|
|
/* Use 10ms timeout */
|
|
uint16_t ret = HAL_SPI_TransmitReceive(handle, (uint8_t *)tx, (uint8_t *)rx, tx_length, 3); //3
|
|
|
|
if(ret == HAL_OK) {
|
|
return tx_length;
|
|
} else {
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
int SPI_F4HDK::transfer_2(const unsigned char *tx_buffer, int tx_length, unsigned char *rx_buffer, int rx_length) {
|
|
return spi_master_transfer_2 (&_spi, tx_buffer, tx_length, rx_buffer, rx_length);
|
|
}
|