You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
1.7 KiB

3 months ago
#ifndef _SPI_H_
#define _SPI_H_
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <fcntl.h>
#include <unistd.h>
#include <pthread.h>
#include <sys/ioctl.h>
#include <linux/spi/spidev.h>
#define SPI_DEVICE "/dev/spidev0.0"
#define SPI_MODULE SPI_MODE_1
#define SPI_MAX_SPEED ( 25 * 1000 * 1000)
#define SPI_NBITS 8
#define SPI_FIRST 0
#define SPI_BUFFER_NUM 1024
class Spi
{
public :
Spi(char *para_dev = SPI_DEVICE , int para_mode = SPI_MODULE , int para_max_speed = SPI_MAX_SPEED , int para_nbits = SPI_NBITS , int para_first = SPI_FIRST) ;
~Spi() ;
void spiMutexLock() ;
void spiMutexUnlock() ;
void printTxBuffer() ;
void printRxBuffer() ;
int getTxLength() ;
int getRxLength() ;
uint8_t* getTxBuffer() ;
uint8_t* getRxBuffer() ;
void printTxBuffer(uint8_t *para_tx_buffer , int para_tx_len) ;
void printRxBuffer(uint8_t *para_rx_buffer , int para_rx_len) ;
int singleWriteSpi(unsigned char *para_tx_buffer , int para_tx_len) ;
int singleReadSpi(unsigned char *para_rx_buffer , int para_rx_len) ;
int writeSpi(unsigned char *para_tx_buffer , int para_tx_len) ;
int readSpi( unsigned char *para_rx_buffer , int para_rx_len) ;
int readWriteSpi(unsigned char *para_tx_buffer , unsigned char *para_rx_buffer , int para_tx_len , int para_rx_len ) ;
private :
int spi_fd ;
int mode ;
int max_speed ;
int nbits ;
int first ;
int ret ;
pthread_mutex_t spi_mutex ;
uint8_t tx_buffer[SPI_BUFFER_NUM] ;
uint8_t rx_buffer[SPI_BUFFER_NUM] ;
} ;
#endif