PIDUINO
Loading...
Searching...
No Matches
Piduino::SpiDev

#include <spidev.h>

Inheritance diagram for Piduino::SpiDev:
Collaboration diagram for Piduino::SpiDev:

Classes

class  Cs
 Broche de chip select d'un bus SPI. More...
 
class  Info
 Informations sur un bus SPI. More...
 
class  Settings
 
class  Transfer
 

Public Types

enum  OpenModeFlag {
  NotOpen = 0x0000 , Append = std::ios_base::app , AtEnd = std::ios_base::ate , Binary = std::ios_base::binary ,
  ReadOnly = std::ios_base::in , WriteOnly = std::ios_base::out , ReadWrite = ReadOnly | WriteOnly , Truncate = std::ios_base::trunc ,
  IosModes = Append | AtEnd | Binary | ReadOnly | WriteOnly | Truncate , Unbuffered = (Truncate << 1)
}
 Flags that specify how the device is to be opened. More...
 
typedef Flags< OpenModeFlagOpenMode
 Type representing a combination of OpenModeFlag values.
 

Public Member Functions

 SpiDev ()
 Constructeur par défaut.
 
 SpiDev (const Info &bus)
 Constructeur à partir d'un bus.
 
 SpiDev (int idBus, int idCs=0)
 Constructeur à partir identifiant de bus.
 
 SpiDev (const std::string &path)
 Constructeur à partir chemin de bus.
 
 SpiDev (const char *path)
 Constructeur à partir chemin de bus const char *.
 
virtual ~SpiDev ()
 Destructeur.
 
virtual bool open (OpenMode mode=IoDevice::ReadWrite)
 Ouverture du bus SPI La configuration settings() est appliquée.
 
virtual void close ()
 Fermeture du bus Cette fonction est appelée par le destructeur.
 
void setBus (int idBus, int idCs=0)
 Modification du bus SPI Si la liaison ouverte, celle-ci est fermée, puis réouverte sur le nouveau bus.
 
void setBus (const Info &bus)
 Surcharge de setBus() à partir d'une variable Info.
 
void setBusPath (const std::string &path)
 Modification du chemin du bus Si la liaison ouverte, celle-ci est fermée, puis réouverte sur le nouveau bus.
 
void setBusPath (const char *path)
 Surcharge de setBusPath() à partir d'une variable const char *.
 
const Infobus () const
 Informations sur le bus.
 
int transfer (const uint8_t *txbuf, uint8_t *rxbuf, uint32_t len)
 Transfert d'un message en entrée-sortie.
 
int read (uint8_t *buffer, uint32_t len)
 Lecture d'un message.
 
int write (const uint8_t *buffer, uint32_t len)
 Ecriture d'un message.
 
void pushTransfer (Transfer &t)
 Empilement d'un message dans la pile de transmission Permet de gérer l'envoi de plusieurs message d'un seul tenant. Le ou les messages seront transmis lors du prochain appel à transfer(), read() ou write()
 
int transfer ()
 Transmission des messages de la pile de transmission La pile est vidée avant retour.
 
void clear ()
 Vidage de la pile de transmission Pas nécessaire après transfer()
 
void setSettings (const Settings &settings)
 Modification des réglages de la transmission Si la liaison est ouverte les réglages sont appliqués immédiatement, sinon ils le seront à l'ouverture par open()
 
void setMode (uint8_t mode)
 Modification du mode de fonctionnement Les valeurs généralement utilisées sont SPI_MODE_0, SPI_MODE_1, SPI_MODE_2 ou SPI_MODE_3 qui correspondent aux valeurs de polarité et de phase d'horloge telle que définies dans les standards https://en.wikipedia.org/wiki/Serial_Peripheral_Interface#Clock_polarity_and_phase. On pourra y ajouter des flags en effectuant un "OU" (|) avec les valeurs suivantes (prise en compte dépendant de la plateforme !):
 
void setSpeedHz (uint32_t speedHz)
 Modification de la vitesse maximale de transmission en Hz Si la liaison est ouverte les réglages sont appliqués immédiatement, sinon ils le seront à l'ouverture par open()
 
void setBitsPerWord (uint8_t bit)
 Modification du nombre de bits par mot Si la liaison est ouverte les réglages sont appliqués immédiatement, sinon ils le seront à l'ouverture par open()
 
void setBitOrder (bool bitOrder)
 Modification de l'ordre de transmission des bits MsbFirst ou LsbFirst Si la liaison est ouverte les réglages sont appliqués immédiatement, sinon ils le seront à l'ouverture par open()
 
const Settingssettings () const
 Configuration actuelle.
 
uint8_t mode () const
 Mode de fonctionnement cf setMode()
 
uint32_t speedHz () const
 Vitesse maximale de transmission en Hz.
 
uint8_t bitsPerWord () const
 Nombre de bits par mot.
 
bool bitOrder () const
 Ordre de transmission des bits MsbFirst ou LsbFirst.
 
OpenMode openMode () const
 Returns the current open mode of the device.
 
virtual bool isOpen () const
 Returns true if the device is currently open.
 
bool isReadable () const
 Returns true if the device is readable.
 
bool isWritable () const
 Returns true if the device is writable.
 
bool isBuffered () const
 Returns true if the device is buffered.
 
virtual bool isSequential () const
 Returns true if this device is sequential; otherwise returns false.
 
void setTextModeEnabled (bool enabled)
 Enables or disables text mode for the device.
 
bool isTextModeEnabled () const
 Returns true if text mode is enabled.
 
void setDebug (bool enabled)
 Enables or disables debug mode for the device.
 
bool isDebug () const
 Returns true if debug mode is enabled.
 
virtual std::string errorString () const
 Returns a human-readable description of the last error.
 
virtual int error () const
 Returns the code of the last error.
 

Protected Member Functions

 SpiDev (Private &dd)
 

Protected Attributes

std::unique_ptr< Privated_ptr
 Pointer to the private implementation.
 

Detailed Description

Definition at line 70 of file spidev.h.

Member Typedef Documentation

◆ OpenMode

Type representing a combination of OpenModeFlag values.

Definition at line 70 of file iodevice.h.

Member Enumeration Documentation

◆ OpenModeFlag

Flags that specify how the device is to be opened.

These flags control the behavior of the device when it is opened. They can be combined using bitwise OR.

Enumerator
NotOpen 

Device is not open.

Append 

Set the stream's position indicator to the end of the stream before each output operation.

AtEnd 

Set the stream's position indicator to the end of the stream on opening.

Binary 

Open the device in binary mode (no text translation).

ReadOnly 

Open the device for input operations only.

Text mode: When reading, end-of-line terminators are translated to '
'. When writing, end-of-line terminators are translated to the local encoding (e.g., '\r
' for Win32).

WriteOnly 

Open the device for output operations only.

ReadWrite 

Open the device for both input and output operations.

Truncate 

Discard any existing content when opening the device.

IosModes 

Combination of all standard I/O modes.

Unbuffered 

Open the device in unbuffered mode (implementation-defined).

Definition at line 48 of file iodevice.h.

Constructor & Destructor Documentation

◆ SpiDev() [1/6]

Piduino::SpiDev::SpiDev ( )

Constructeur par défaut.

◆ SpiDev() [2/6]

Piduino::SpiDev::SpiDev ( const Info bus)

Constructeur à partir d'un bus.

◆ SpiDev() [3/6]

Piduino::SpiDev::SpiDev ( int  idBus,
int  idCs = 0 
)
explicit

Constructeur à partir identifiant de bus.

◆ SpiDev() [4/6]

Piduino::SpiDev::SpiDev ( const std::string &  path)
explicit

Constructeur à partir chemin de bus.

◆ SpiDev() [5/6]

Piduino::SpiDev::SpiDev ( const char *  path)
explicit

Constructeur à partir chemin de bus const char *.

◆ ~SpiDev()

virtual Piduino::SpiDev::~SpiDev ( )
virtual

Destructeur.

◆ SpiDev() [6/6]

Piduino::SpiDev::SpiDev ( Private dd)
protected

Member Function Documentation

◆ bitOrder()

bool Piduino::SpiDev::bitOrder ( ) const

Ordre de transmission des bits MsbFirst ou LsbFirst.

◆ bitsPerWord()

uint8_t Piduino::SpiDev::bitsPerWord ( ) const

Nombre de bits par mot.

◆ bus()

const Info & Piduino::SpiDev::bus ( ) const

Informations sur le bus.

Referenced by Piduino::SpiDev::Info::Info().

◆ clear()

void Piduino::SpiDev::clear ( )

Vidage de la pile de transmission Pas nécessaire après transfer()

◆ close()

virtual void Piduino::SpiDev::close ( )
virtual

Fermeture du bus Cette fonction est appelée par le destructeur.

Reimplemented from Piduino::IoDevice.

◆ error()

virtual int Piduino::IoDevice::error ( ) const
virtualinherited

Returns the code of the last error.

Returns
The error code.

◆ errorString()

virtual std::string Piduino::IoDevice::errorString ( ) const
virtualinherited

Returns a human-readable description of the last error.

Returns
The error string.

◆ isBuffered()

bool Piduino::IoDevice::isBuffered ( ) const
inherited

Returns true if the device is buffered.

Returns
True if buffered, false otherwise.

◆ isDebug()

bool Piduino::IoDevice::isDebug ( ) const
inherited

Returns true if debug mode is enabled.

Returns
True if debug mode is enabled, false otherwise.

◆ isOpen()

virtual bool Piduino::IoDevice::isOpen ( ) const
virtualinherited

Returns true if the device is currently open.

Returns
True if open, false otherwise.

◆ isReadable()

bool Piduino::IoDevice::isReadable ( ) const
inherited

Returns true if the device is readable.

Returns
True if readable, false otherwise.

◆ isSequential()

virtual bool Piduino::IoDevice::isSequential ( ) const
virtualinherited

Returns true if this device is sequential; otherwise returns false.

Sequential devices, as opposed to random-access devices, have no concept of a start, an end, a size, or a current position, and do not support seeking. You can only read from the device when it reports that data is available. The most common example of a sequential device is a network socket. On Unix, special files such as /dev/zero and fifo pipes are sequential. Regular files, on the other hand, do support random access. They have both a size and a current position, and they also support seeking backwards and forwards in the data stream. Regular files are non-sequential.

The IoDevice implementation returns false.

Returns
True if the device is sequential, false otherwise.

◆ isTextModeEnabled()

bool Piduino::IoDevice::isTextModeEnabled ( ) const
inherited

Returns true if text mode is enabled.

Returns
True if text mode is enabled, false otherwise.

◆ isWritable()

bool Piduino::IoDevice::isWritable ( ) const
inherited

Returns true if the device is writable.

Returns
True if writable, false otherwise.

◆ mode()

uint8_t Piduino::SpiDev::mode ( ) const

Mode de fonctionnement cf setMode()

◆ open()

virtual bool Piduino::SpiDev::open ( OpenMode  mode = IoDevice::ReadWrite)
virtual

Ouverture du bus SPI La configuration settings() est appliquée.

Parameters
modemode d'ouverture
Returns
true si ouvert, false sinon, dans ce cas error() et errorString() peuvent être utilisé pour connaître la raison.

Reimplemented from Piduino::IoDevice.

◆ openMode()

OpenMode Piduino::IoDevice::openMode ( ) const
inherited

Returns the current open mode of the device.

Returns
The open mode flags.

◆ pushTransfer()

void Piduino::SpiDev::pushTransfer ( Transfer t)

Empilement d'un message dans la pile de transmission Permet de gérer l'envoi de plusieurs message d'un seul tenant. Le ou les messages seront transmis lors du prochain appel à transfer(), read() ou write()

Parameters
tréférence sur le message

◆ read()

int Piduino::SpiDev::read ( uint8_t *  buffer,
uint32_t  len 
)

Lecture d'un message.

Parameters
rxbufbuffer qui contiendra les octets lues sur MISO
lennombre d'octets à lire.
Returns
0, valeur négative si erreur, dans ce cas error() et errorString() peuvent être utilisé pour connaître la raison.

◆ setBitOrder()

void Piduino::SpiDev::setBitOrder ( bool  bitOrder)

Modification de l'ordre de transmission des bits MsbFirst ou LsbFirst Si la liaison est ouverte les réglages sont appliqués immédiatement, sinon ils le seront à l'ouverture par open()

◆ setBitsPerWord()

void Piduino::SpiDev::setBitsPerWord ( uint8_t  bit)

Modification du nombre de bits par mot Si la liaison est ouverte les réglages sont appliqués immédiatement, sinon ils le seront à l'ouverture par open()

◆ setBus() [1/2]

void Piduino::SpiDev::setBus ( const Info bus)

Surcharge de setBus() à partir d'une variable Info.

◆ setBus() [2/2]

void Piduino::SpiDev::setBus ( int  idBus,
int  idCs = 0 
)

Modification du bus SPI Si la liaison ouverte, celle-ci est fermée, puis réouverte sur le nouveau bus.

Parameters
idBusidentifiant du bus 0..N
idCsidentifiant du chip select 0..C
Returns
true si ouvert, false sinon, dans ce cas error() et errorString() peuvent être utilisé pour connaître la raison.

◆ setBusPath() [1/2]

void Piduino::SpiDev::setBusPath ( const char *  path)

Surcharge de setBusPath() à partir d'une variable const char *.

◆ setBusPath() [2/2]

void Piduino::SpiDev::setBusPath ( const std::string &  path)

Modification du chemin du bus Si la liaison ouverte, celle-ci est fermée, puis réouverte sur le nouveau bus.

Parameters
pathchemin dans /dev

◆ setDebug()

void Piduino::IoDevice::setDebug ( bool  enabled)
inherited

Enables or disables debug mode for the device.

Parameters
enabledTrue to enable debug mode, false to disable.

◆ setMode()

void Piduino::SpiDev::setMode ( uint8_t  mode)

Modification du mode de fonctionnement Les valeurs généralement utilisées sont SPI_MODE_0, SPI_MODE_1, SPI_MODE_2 ou SPI_MODE_3 qui correspondent aux valeurs de polarité et de phase d'horloge telle que définies dans les standards https://en.wikipedia.org/wiki/Serial_Peripheral_Interface#Clock_polarity_and_phase. On pourra y ajouter des flags en effectuant un "OU" (|) avec les valeurs suivantes (prise en compte dépendant de la plateforme !):

  • SPI_CS_HIGH pour une action du chip select à l'état haut
  • SPI_3WIRE mode 3 fils (MISO/MOSI sur le même fil)
  • SPI_NO_CS chip select géré de l'espace utilisateur
  • . Si la liaison est ouverte les réglages sont appliqués immédiatement, sinon ils le seront à l'ouverture par open()

◆ setSettings()

void Piduino::SpiDev::setSettings ( const Settings settings)

Modification des réglages de la transmission Si la liaison est ouverte les réglages sont appliqués immédiatement, sinon ils le seront à l'ouverture par open()

◆ setSpeedHz()

void Piduino::SpiDev::setSpeedHz ( uint32_t  speedHz)

Modification de la vitesse maximale de transmission en Hz Si la liaison est ouverte les réglages sont appliqués immédiatement, sinon ils le seront à l'ouverture par open()

◆ setTextModeEnabled()

void Piduino::IoDevice::setTextModeEnabled ( bool  enabled)
inherited

Enables or disables text mode for the device.

Parameters
enabledTrue to enable text mode, false to disable.

◆ settings()

const Settings & Piduino::SpiDev::settings ( ) const

Configuration actuelle.

◆ speedHz()

uint32_t Piduino::SpiDev::speedHz ( ) const

Vitesse maximale de transmission en Hz.

◆ transfer() [1/2]

int Piduino::SpiDev::transfer ( )

Transmission des messages de la pile de transmission La pile est vidée avant retour.

Returns
0, valeur négative si erreur, dans ce cas error() et errorString() peuvent être utilisé pour connaître la raison.

◆ transfer() [2/2]

int Piduino::SpiDev::transfer ( const uint8_t *  txbuf,
uint8_t *  rxbuf,
uint32_t  len 
)

Transfert d'un message en entrée-sortie.

Parameters
txbufbuffer sur les octets à transmettre, 0 si pas de données à transmettre, dans ce cas, des 0 sont transmis sur MOSI.
rxbufbuffer qui contiendra les octets lues sur MISO, 0 si les données ne doivent pas être récupérées.
lennombre d'octets dans le ou les buffers. Si les 2 buffers txbuf et rxbuf sont fournis, ils doivent avoir une taille au moins égale à len.
Returns
0, valeur négative si erreur, dans ce cas error() et errorString() peuvent être utilisé pour connaître la raison.

◆ write()

int Piduino::SpiDev::write ( const uint8_t *  buffer,
uint32_t  len 
)

Ecriture d'un message.

Parameters
txbufbuffer sur les octets à transmettre à transmettre, dans ce cas, des 0 sont transmis sur MOSI.
lennombre d'octets dans le buffer
Returns
0, valeur négative si erreur, dans ce cas error() et errorString() peuvent être utilisé pour connaître la raison.

Member Data Documentation

◆ d_ptr

std::unique_ptr<Private> Piduino::IoDevice::d_ptr
protectedinherited

Pointer to the private implementation.

Definition at line 190 of file iodevice.h.