Open Model Railroad Network (OpenMRN)
Loading...
Searching...
No Matches
Stm32SPI Class Reference

Specialization of SPI driver for STM32 devices. More...

#include <Stm32SPI.hxx>

Inheritance diagram for Stm32SPI:
SPI Node Device FileIO

Public Member Functions

 Stm32SPI (const char *name, SPI_TypeDef *port, uint32_t interrupt, ChipSelectMethod cs_assert, ChipSelectMethod cs_deassert, OSMutex *bus_lock=nullptr)
 Constructor.
 
 ~Stm32SPI ()
 Destructor.
 
- Public Member Functions inherited from SPI
int transfer_with_cs_assert (struct spi_ioc_transfer *msg)
 Method to transmit/receive the data.
 
int transfer_with_cs_assert_polled (struct spi_ioc_transfer *msgs, int num=1)
 Method to transmit/receive the data.
 
int transfer_messages (struct spi_ioc_transfer *msgs, int num)
 Conduct multiple message transfers with one stop at the end.
 
- Public Member Functions inherited from Device
 Device (const char *name)
 Constructor.
 
virtual ~Device ()
 Destructor.
 

Private Member Functions

void enable () override
 function to enable device
 
void disable () override
 function to disable device
 
int transfer (struct spi_ioc_transfer *msg) override
 Method to transmit/receive the data.
 
int transfer_polled (struct spi_ioc_transfer *msg) override
 Method to transmit/receive the data.
 
int update_configuration () override
 Update the configuration of the bus.
 
 Stm32SPI ()
 Default constructor.
 
 DISALLOW_COPY_AND_ASSIGN (Stm32SPI)
 

Private Attributes

SPI_HandleTypeDef spiHandle_
 Stm32 HAL device structure.
 

Additional Inherited Members

- Public Types inherited from SPI
typedef void(* ChipSelectMethod) ()
 Function point for the chip select assert and deassert methods.
 
- Static Public Member Functions inherited from Device
static int open (struct _reent *reent, const char *path, int flags, int mode)
 Open a file or device.
 
static int close (struct _reent *reent, int fd)
 Close a file or device.
 
static int stat (struct _reent *reent, const char *path, struct stat *stat)
 Get the status information of a file or device.
 
static int select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, long long timeout)
 POSIX select().
 
static void select_clear ()
 Clears the current thread's select bits.
 
- Static Public Member Functions inherited from FileIO
static ssize_t read (struct _reent *reent, int fd, void *buf, size_t count)
 Read from a file or device.
 
static ssize_t write (struct _reent *reent, int fd, const void *buf, size_t count)
 Write to a file or device.
 
static _off_t lseek (struct _reent *reent, int fd, _off_t offset, int whence)
 Change the offset index of a file or device.
 
static int fstat (struct _reent *reent, int fd, struct stat *stat)
 Get the status information of a file or device.
 
static int ioctl (int fd, unsigned long int key, unsigned long data)
 Request and ioctl transaction.
 
static int fcntl (int fd, int cmd, unsigned long data)
 Manipulate a file descriptor.
 
static bool is_device (int fd)
 Test if the file descriptor belongs to a device.
 
- Protected Member Functions inherited from SPI
 SPI (const char *name, ChipSelectMethod cs_assert, ChipSelectMethod cs_deassert, OSMutex *bus_lock=nullptr)
 Constructor.
 
 ~SPI ()
 Destructor.
 
void bus_lock ()
 Lock the bus shared by many chip selects.
 
void bus_unlock ()
 Unlock the bus shared by many chip selects.
 
int ioctl (File *file, unsigned long int key, unsigned long data) override
 Request an ioctl transaction.
 
- Protected Member Functions inherited from Node
 Node (const char *name)
 Constructor.
 
virtual ~Node ()
 Destructor.
 
int open (File *, const char *, int, int) OVERRIDE
 Open method.
 
int close (File *) OVERRIDE
 Close method.
 
virtual int fstat (File *file, struct stat *stat) override
 Get the status information of a file or device.
 
- Protected Member Functions inherited from FileIO
 FileIO (const char *name)
 Constructor.
 
virtual ~FileIO ()
 Destructor.
 
virtual off_t lseek (File *f, off_t offset, int whence)
 Seek method.
 
virtual int fcntl (File *file, int cmd, unsigned long data)
 Manipulate a file descriptor.
 
virtual bool select (File *file, int mode)
 Device select method.
 
- Static Protected Member Functions inherited from Device
static void select_insert (SelectInfo *info)
 Add client to list of clients needing woken.
 
static void select_wakeup (SelectInfo *info)
 Wakeup the list of clients needing woken.
 
static void select_wakeup_from_isr (SelectInfo *info, int *woken)
 Wakeup the list of clients needing woken.
 
- Static Protected Member Functions inherited from FileIO
static int fd_alloc (void)
 Allocate a free file descriptor.
 
static void fd_free (int fd)
 Free up a file descriptor.
 
static Filefile_lookup (int fd)
 Looks up a reference to a File corresponding to a given file descriptor.
 
static int fd_lookup (File *file)
 Looks up a file descriptor corresponding to a given File reference.
 
- Protected Attributes inherited from SPI
ChipSelectMethod csAssert
 function pointer to a method that asserts chip select.
 
ChipSelectMethod csDeassert
 function pointer to a method that deasserts chip select.
 
uint32_t speedHz
 Max default speed in Hz.
 
uint8_t bitsPerWord
 number of bits per word transaction
 
uint8_t mode
 one of four SPI modes
 
bool lsbFirst
 transmit LSB first if true
 
- Protected Attributes inherited from Node
OSMutex lock_
 protects internal structures.
 
mode_t mode_
 File open mode, such as O_NONBLOCK.
 
unsigned int references_
 number of open references
 
- Protected Attributes inherited from FileIO
const char * name
 device name
 
- Static Protected Attributes inherited from FileIO
static const unsigned int numOpenFiles = 20
 
static File files []
 File descriptor pool.
 
static OSMutex mutex
 mutual exclusion for fileio
 

Detailed Description

Specialization of SPI driver for STM32 devices.

Definition at line 45 of file Stm32SPI.hxx.

Constructor & Destructor Documentation

◆ Stm32SPI()

Stm32SPI::Stm32SPI ( const char *  name,
SPI_TypeDef *  port,
uint32_t  interrupt,
ChipSelectMethod  cs_assert,
ChipSelectMethod  cs_deassert,
OSMutex bus_lock = nullptr 
)

Constructor.

Parameters
namename of this device instance in the file system
porthardware instance of this device, e.g. SPI1
interruptinterrupt number of this device (unused)
cs_assertfunction pointer to a method that asserts chip select
cs_deassertfunction pointer to a method that deasserts chip select
bus_lockthe user must provide a shared mutex if the device instance represents more than one chip select on the same bus interface.

Definition at line 122 of file Stm32SPI.cxx.

◆ ~Stm32SPI()

Stm32SPI::~Stm32SPI ( )
inline

Destructor.

Definition at line 65 of file Stm32SPI.hxx.

Member Function Documentation

◆ disable()

void Stm32SPI::disable ( )
inlineoverrideprivatevirtual

function to disable device

Implements Node.

Definition at line 71 of file Stm32SPI.hxx.

◆ enable()

void Stm32SPI::enable ( )
inlineoverrideprivatevirtual

function to enable device

Implements Node.

Definition at line 70 of file Stm32SPI.hxx.

◆ transfer()

int Stm32SPI::transfer ( struct spi_ioc_transfer *  msg)
overrideprivatevirtual

Method to transmit/receive the data.

Parameters
msgmessage(s) to transact.
Returns
bytes transfered upon success, -errno upon failure

Implements SPI.

Definition at line 247 of file Stm32SPI.cxx.

◆ transfer_polled()

int Stm32SPI::transfer_polled ( struct spi_ioc_transfer *  msg)
inlineoverrideprivatevirtual

Method to transmit/receive the data.

This will be always polled mode.

Parameters
msgmessage(s) to transact.
Returns
bytes transfered upon success, -errno upon failure

Implements SPI.

Definition at line 83 of file Stm32SPI.hxx.

◆ update_configuration()

int Stm32SPI::update_configuration ( )
overrideprivatevirtual

Update the configuration of the bus.

Returns
>= 0 upon success, -errno upon failure
Todo:
this might not be the correct clock value for the F303

Implements SPI.

Definition at line 148 of file Stm32SPI.cxx.

Member Data Documentation

◆ spiHandle_

SPI_HandleTypeDef Stm32SPI::spiHandle_
private

Stm32 HAL device structure.

Definition at line 94 of file Stm32SPI.hxx.


The documentation for this class was generated from the following files: