This repository has been archived on 2018-05-28. You can view files and clone it, but cannot push or open issues or pull requests.
BBB-Simple-ACS/client/lib/spi_device.hpp

77 lines
2.6 KiB
C++

/*
* SPIDevice.h Created on: 22 May 2014
* Copyright (c) 2014 Derek Molloy (www.derekmolloy.ie)
* Made available for the book "Exploring BeagleBone"
* See: www.exploringbeaglebone.com
* Licensed under the EUPL V.1.1
*
* This Software is provided to You under the terms of the European
* Union Public License (the "EUPL") version 1.1 as published by the
* European Union. Any use of this Software, other than as authorized
* under this License is strictly prohibited (to the extent such use
* is covered by a right of the copyright holder of this Software).
*
* This Software is provided under the License on an "AS IS" basis and
* without warranties of any kind concerning the Software, including
* without limitation merchantability, fitness for a particular purpose,
* absence of defects or errors, accuracy, and non-infringement of
* intellectual property rights other than copyright. This disclaimer
* of warranty is an essential part of the License and a condition for
* the grant of any rights to this Software.
*
* For more details, see http://www.derekmolloy.ie/
*/
#pragma once
#include <string>
class spi_device
{
public:
/// SPI modes.
enum mode
{
/// Low at idle, capture on rising clock edge
mode0 = 0,
/// Low at idle, capture on falling clock edge
mode1 = 1,
/// High at idle, capture on falling clock edge
mode2 = 2,
/// High at idle, capture on rising clock edge
mode3 = 3
};
private:
/// Base path of SPI devices.
static constexpr const char* base_path = "/dev/spidev";
/// Bus number.
unsigned int bus_;
/// Device number on the bus.
unsigned int device_;
/// Device file descriptor.
int fd_ = -1;
/// The precise filename for the SPI device.
std::string filename_;
/// The current SPI mode.
mode mode_ = mode3;
/// The number of bits per word
uint8_t bits_ = 8;
/// The speed of transfer in Hz.
uint32_t speed_ = 500000;
/// The transfer delay in usecs.
uint16_t delay_ = 0;
public:
spi_device(unsigned bus, unsigned device);
unsigned char read(unsigned char register_address);
unsigned char read_register(unsigned char register_address);
int write_register(unsigned char register_address, unsigned char value);
int write(unsigned char value);
int write(unsigned char value[], unsigned length);
int set_speed(uint32_t speed);
int set_mode(mode mode);
int set_bits_per_word(uint8_t bits);
~spi_device();
int transfer(unsigned char send[], unsigned char receive[], unsigned length);
};