Firmware
Public Member Functions | Protected Member Functions | Protected Attributes | Static Protected Attributes | List of all members
cdev::CDev Class Reference

Abstract class for any character device. More...

#include <CDev.hpp>

Inheritance diagram for cdev::CDev:
AirspeedSim BMP280 cdev::VFile CDevNode CM8JL65 DevCommon device::CDev HC_SR04 IridiumSBD LED leddar_one LidarLitePWM LPS22HB LPS25H MPL3115A2 MPU6000 MS5611 PWMIN PWMSim PX4Accelerometer PX4FMU PX4Gyroscope PX4IO PX4Magnetometer SF0X SyslinkBridge SyslinkMemory TAP_ESC TFMINI ToneAlarm UavcanEsc UavcanNode UavcanNode ulanding::Radar uORB::DeviceNode

Public Member Functions

 CDev (const char *devname)
 Constructor. More...
 
virtual int init ()
 
virtual int open (file_t *filep)
 Handle an open of the device. More...
 
virtual int close (file_t *filep)
 Handle a close of the device. More...
 
virtual ssize_t read (file_t *filep, char *buffer, size_t buflen)
 Perform a read from the device. More...
 
virtual ssize_t write (file_t *filep, const char *buffer, size_t buflen)
 Perform a write to the device. More...
 
virtual off_t seek (file_t *filep, off_t offset, int whence)
 Perform a logical seek operation on the device. More...
 
virtual int ioctl (file_t *filep, int cmd, unsigned long arg)
 Perform an ioctl operation on the device. More...
 
virtual int poll (file_t *filep, px4_pollfd_struct_t *fds, bool setup)
 Perform a poll setup/teardown operation. More...
 
const char * get_devname () const
 Get the device name. More...
 

Protected Member Functions

virtual pollevent_t poll_state (file_t *filep)
 Check the current state of the device for poll events from the perspective of the file. More...
 
virtual void poll_notify (pollevent_t events)
 Report new poll events. More...
 
virtual void poll_notify_one (px4_pollfd_struct_t *fds, pollevent_t events)
 Internal implementation of poll_notify. More...
 
virtual int open_first (file_t *filep)
 Notification of the first open. More...
 
virtual int close_last (file_t *filep)
 Notification of the last close. More...
 
virtual int register_class_devname (const char *class_devname)
 Register a class device name, automatically adding device class instance suffix if need be. More...
 
virtual int unregister_class_devname (const char *class_devname, unsigned class_instance)
 Register a class device name, automatically adding device class instance suffix if need be. More...
 
void lock ()
 Take the driver lock. More...
 
void unlock ()
 Release the driver lock.
 

Protected Attributes

px4_sem_t _lock
 lock to protect access to all class members (also for derived classes)
 

Static Protected Attributes

static const px4_file_operations_t fops = {}
 Pointer to the default cdev file operations table; useful for registering clone devices etc.
 

Detailed Description

Abstract class for any character device.

Constructor & Destructor Documentation

§ CDev()

CDev::CDev ( const char *  devname)

Constructor.

Parameters
nameDriver name
devnameDevice node name

Member Function Documentation

§ close()

int CDev::close ( file_t filep)
virtual

Handle a close of the device.

This function is called for every close of the device. The default implementation maintains _open_count and returns OK as long as it is not zero.

Parameters
filepPointer to the NuttX file structure.
Returns
OK if the close was successful, -errno otherwise.

Reimplemented in CDevNode, and uORB::DeviceNode.

§ close_last()

virtual int cdev::CDev::close_last ( file_t filep)
inlineprotectedvirtual

Notification of the last close.

This function is called when the device open count transitions from one to zero. The driver lock is held for the duration of the call.

The default implementation returns OK.

Parameters
filepPointer to the NuttX file structure.
Returns
OK if the open should return OK, -errno otherwise.

§ get_devname()

const char* cdev::CDev::get_devname ( ) const
inline

Get the device name.

Returns
the file system string of the device handle

§ ioctl()

int CDev::ioctl ( file_t filep,
int  cmd,
unsigned long  arg 
)
virtual

Perform an ioctl operation on the device.

The default implementation handles DIOC_GETPRIV, and otherwise returns -ENOTTY. Subclasses should call the default implementation for any command they do not handle themselves.

Parameters
filepPointer to the NuttX file structure.
cmdThe ioctl command value.
argThe ioctl argument value.
Returns
OK on success, or -errno otherwise.

Reimplemented in TAP_ESC, uORB::DeviceNode, TFMINI, CM8JL65, HC_SR04, SF0X, PWMSim, AirspeedSim, device::CDev, LED, PX4Magnetometer, PX4Accelerometer, and PX4Gyroscope.

§ lock()

void cdev::CDev::lock ( )
inlineprotected

Take the driver lock.

Each driver instance has its own lock/semaphore.

Note that we must loop as the wait may be interrupted by a signal.

Careful: lock() calls cannot be nested!

§ open()

int CDev::open ( file_t filep)
virtual

Handle an open of the device.

This function is called for every open of the device. The default implementation maintains _open_count and always returns OK.

Parameters
filepPointer to the NuttX file structure.
Returns
OK if the open is allowed, -errno otherwise.

Reimplemented in CDevNode, and uORB::DeviceNode.

§ open_first()

virtual int cdev::CDev::open_first ( file_t filep)
inlineprotectedvirtual

Notification of the first open.

This function is called when the device open count transitions from zero to one. The driver lock is held for the duration of the call.

The default implementation returns OK.

Parameters
filepPointer to the NuttX file structure.
Returns
OK if the open should proceed, -errno otherwise.

§ poll()

int CDev::poll ( file_t filep,
px4_pollfd_struct_t *  fds,
bool  setup 
)
virtual

Perform a poll setup/teardown operation.

This is handled internally and should not normally be overridden.

Parameters
filepPointer to the internal file structure.
fdsPoll descriptor being waited on.
setupTrue if this is establishing a request, false if it is being torn down.
Returns
OK on success, or -errno otherwise.

§ poll_notify()

void CDev::poll_notify ( pollevent_t  events)
protectedvirtual

Report new poll events.

This function should be called anytime the state of the device changes in a fashion that might be interesting to a poll waiter.

Parameters
eventsThe new event(s) being announced.

§ poll_notify_one()

void CDev::poll_notify_one ( px4_pollfd_struct_t *  fds,
pollevent_t  events 
)
protectedvirtual

Internal implementation of poll_notify.

Parameters
fdsA poll waiter to notify.
eventsThe event(s) to send to the waiter.

Reimplemented in uORB::DeviceNode.

§ poll_state()

virtual pollevent_t cdev::CDev::poll_state ( file_t filep)
inlineprotectedvirtual

Check the current state of the device for poll events from the perspective of the file.

This function is called by the default poll() implementation when a poll is set up to determine whether the poll should return immediately.

The default implementation returns no events.

Parameters
filepThe file that's interested.
Returns
The current set of poll events.

Reimplemented in uORB::DeviceNode.

§ read()

virtual ssize_t cdev::CDev::read ( file_t filep,
char *  buffer,
size_t  buflen 
)
inlinevirtual

Perform a read from the device.

The default implementation returns -ENOSYS.

Parameters
filepPointer to the NuttX file structure.
bufferPointer to the buffer into which data should be placed.
buflenThe number of bytes to be read.
Returns
The number of bytes read or -errno otherwise.

Reimplemented in CDevNode, TFMINI, HC_SR04, SF0X, uORB::DeviceNode, AirspeedSim, and LidarLitePWM.

§ register_class_devname()

int CDev::register_class_devname ( const char *  class_devname)
protectedvirtual

Register a class device name, automatically adding device class instance suffix if need be.

Parameters
class_devnameDevice class name
Returns
class_instamce Class instance created, or -errno on failure

§ seek()

virtual off_t cdev::CDev::seek ( file_t filep,
off_t  offset,
int  whence 
)
inlinevirtual

Perform a logical seek operation on the device.

The default implementation returns -ENOSYS.

Parameters
filepPointer to the NuttX file structure.
offsetThe new file position relative to whence.
whenceSEEK_OFS, SEEK_CUR or SEEK_END.
Returns
The previous offset, or -errno otherwise.

§ unregister_class_devname()

int CDev::unregister_class_devname ( const char *  class_devname,
unsigned  class_instance 
)
protectedvirtual

Register a class device name, automatically adding device class instance suffix if need be.

Parameters
class_devnameDevice class name
class_instanceDevice class instance from register_class_devname()
Returns
OK on success, -errno otherwise

§ write()

virtual ssize_t cdev::CDev::write ( file_t filep,
const char *  buffer,
size_t  buflen 
)
inlinevirtual

Perform a write to the device.

The default implementation returns -ENOSYS.

Parameters
filepPointer to the NuttX file structure.
bufferPointer to the buffer from which data should be read.
buflenThe number of bytes to be written.
Returns
The number of bytes written or -errno otherwise.

Reimplemented in CDevNode, uORB::DeviceNode, and cdev::VFile.


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