/*********************************************************************************
|
* Copyright: (C) 2019 LingYun IoT System Studio
|
* All rights reserved.
|
*
|
* Filename: spidev.h
|
* Description: This file is spidev user space API.
|
*
|
* Version: 1.0.0(2019年08月19日)
|
* Author: Guo Wenxue <guowenxue@gmail.com>
|
* ChangeLog: 1, Release initial version on "2019年08月19日 23时18分54秒"
|
*
|
********************************************************************************/
|
#ifndef _SPIDEV_H_
|
#define _SPIDEV_H_
|
|
#include <stdint.h>
|
#include <fcntl.h>
|
#include <sys/ioctl.h>
|
#include <linux/ioctl.h>
|
#include <sys/stat.h>
|
#include <linux/types.h>
|
#include <linux/spi/spidev.h>
|
|
#define DEVNAME_LEN 64
|
|
#define DEF_SPI_BPW 8 /* bits per word */
|
#define DEF_SPI_SPEED 500 /* unit kHZ */
|
#define DEF_SPI_MODE SPI_CPHA
|
|
//#define SPI_DEBUG
|
#ifdef SPI_DEBUG
|
#define spi_dbg(format,args...) printf(format, ##args)
|
#else
|
#define spi_dbg(format,args...) do{} while(0);
|
#endif
|
|
typedef struct spidev_s
|
{
|
char devname[DEVNAME_LEN];
|
int fd;
|
uint8_t bits; /* bits per word */
|
uint32_t speed; /* max speed in HZ */
|
uint32_t delay; /* delay usecs */
|
|
/* mode: SPI_CPHA,SPI_CPOL => <SPI_MODE_0,SPI_MODE_1,SPI_MODE_2,SPI_MODE_3>
|
* SPI_CS_HIGH | SPI_LSB_FIRST | SPI_3WIRE | SPI_LOOP | SPI_NO_CS
|
* | SPI_READY | SPI_TX_DUAL | SPI_TX_QUAD | SPI_RX_DUAL | SPI_RX_QUAD */
|
uint32_t mode;
|
} spidev_t;
|
|
|
/* initialise and open spidev context
|
* NOTE: $speed unit is KHz
|
*/
|
extern int spi_init(spidev_t *spi, char *spidev, uint8_t bpw, uint32_t speed, uint32_t delay, uint32_t mode);
|
|
|
/* read size bytes from SPI slave */
|
extern int spi_read(spidev_t *spi, char *buf, int size);
|
|
|
/* write nbytes to SPI slave */
|
extern int spi_write(spidev_t *spi, char *data, int nbytes);
|
|
|
/* write nbytes and read nbytes to/from SPI slave */
|
extern int spi_rdwr(spidev_t *spi, char *data, char *rbuf, int nbytes);
|
|
|
/* terminate and close spidev context */
|
extern int spi_term(spidev_t *spi);
|
|
|
#endif /* ----- #ifndef _SPIDEV_H_ ----- */
|