77 lines
2.6 KiB
C++
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);
|
||
|
};
|