packages feed

huckleberry-0.10.0.0: cbits/hs_spi.c

#include "hs_spi.h"

#include <sys/ioctl.h>
#include <linux/spi/spidev.h>
#include <string.h>


unsigned char spi_mode_0() {
  return SPI_MODE_0;
}
unsigned char spi_mode_1() {
  return SPI_MODE_1;
}
unsigned char spi_mode_2() {
  return SPI_MODE_2;
}
unsigned char spi_mode_3() {
  return SPI_MODE_3;
}



int spi_transfer_tx_rx_1(int fd, void *buff, __u32 buff_len, __u8 bits, __u32 speed, __u16 delay, __u8 cs_change) {

  struct spi_ioc_transfer tran;
  memset(&tran,0,sizeof(struct spi_ioc_transfer));
  
  tran.tx_buf        = (__u64) buff;
  tran.rx_buf        = (__u64) buff;
  tran.len           = buff_len;
  tran.bits_per_word = bits;
  tran.speed_hz      = speed;
  tran.delay_usecs   = delay;
  tran.cs_change     = cs_change;

  return ioctl(fd,SPI_IOC_MESSAGE(1),&tran);
  
}
int spi_transfer_tx_rx_2(int fd,
			 void *tx_buff, __u32 tx_buff_len,
			 void *rx_buff, __u32 rx_buff_len,
			 __u8 bits, __u32 speed, __u16 delay, __u8 cs_change) {

  struct spi_ioc_transfer tran[2];
  memset(tran,0,sizeof(tran));
  
  tran[0].tx_buf        = (__u64) tx_buff;
  tran[0].len           = tx_buff_len;
  tran[0].bits_per_word = bits;
  tran[0].speed_hz      = speed;
  tran[0].delay_usecs   = delay;
  tran[0].cs_change     = cs_change;

  tran[1].rx_buf        = (__u64) rx_buff;
  tran[1].len           = rx_buff_len;
  tran[1].bits_per_word = bits;
  tran[1].speed_hz      = speed;
  tran[1].delay_usecs   = delay;
  tran[1].cs_change     = cs_change;

  return ioctl(fd,SPI_IOC_MESSAGE(2),tran);
  
}
int spi_transfer_tx_1(int fd, void *buff, __u32 buff_len, __u8 bits, __u32 speed, __u16 delay, __u8 cs_change) {
  
  struct spi_ioc_transfer tran;
  memset(&tran,0,sizeof(struct spi_ioc_transfer));
  
  tran.tx_buf        = (__u64) buff;
  tran.len           = buff_len;
  tran.bits_per_word = bits;
  tran.speed_hz      = speed;
  tran.delay_usecs   = delay;
  tran.cs_change     = cs_change;

  return ioctl(fd,SPI_IOC_MESSAGE(1),&tran);

}
int spi_transfer_rx_1(int fd, void *buff, __u32 buff_len, __u8 bits, __u32 speed, __u16 delay, __u8 cs_change) {
  
  struct spi_ioc_transfer tran;
  memset(&tran,0,sizeof(struct spi_ioc_transfer));
  
  tran.rx_buf        = (__u64) buff;
  tran.len           = buff_len;
  tran.bits_per_word = bits;
  tran.speed_hz      = speed;
  tran.delay_usecs   = delay;
  tran.cs_change     = cs_change;

  return ioctl(fd,SPI_IOC_MESSAGE(1),&tran);

}


int spi_get_mode(int fd, __u8 *pmode) {
  return ioctl(fd,SPI_IOC_RD_MODE,pmode);
}
int spi_set_mode(int fd, __u8 mode) {
  return ioctl(fd,SPI_IOC_WR_MODE,&mode);
}

int spi_get_lsb_first(int fd, __u8 *plsb) {
  return ioctl(fd,SPI_IOC_RD_LSB_FIRST,plsb);
}
int spi_set_lsb_first(int fd, __u8 lsb) {
  return ioctl(fd,SPI_IOC_WR_LSB_FIRST,&lsb);
}

int spi_get_bits_per_word(int fd, __u8 *pbits) {
  return ioctl(fd,SPI_IOC_RD_BITS_PER_WORD,pbits);
}
int spi_set_bits_per_word(int fd, __u8 bits) {
  return ioctl(fd,SPI_IOC_WR_BITS_PER_WORD,&bits);
}

int spi_get_max_speed_hz(int fd, __u32 *pspeed) {
  return ioctl(fd,SPI_IOC_RD_MAX_SPEED_HZ,pspeed);
}
int spi_set_max_speed_hz(int fd, __u32 speed) {
  return ioctl(fd,SPI_IOC_WR_MAX_SPEED_HZ,&speed);
}