User's Guide
Reference Manual
Release Notes
PDF
Top

OSE
Reference Manual
Version 1.0.2

Expand All
Contract All

Table of Contents

- ose (App)
- ose
  - Top of manual page
  - attach/2
  - close/1
  - dehunt/2
  - detach/2
  - get_id/1
  - get_name/2
  - hunt/2
  - listen/2
  - open/1
  - send/4
  - send/5
- ose_erl_driver
  - Top of manual page
  - erl_drv_ose_get_signal()
  - erl_drv_ose_event_alloc()
  - erl_drv_ose_event_free()
  - erl_drv_ose_event_fetch()

# ose_erl_driver

### C LIBRARY

ose_erl_driver

### LIBRARY SUMMARY

Linked-in drivers in Enea OSE

### DESCRIPTION

Writing Linked-in drivers that also work on Enea OSE is very similar for how you would do it for Unix. The difference from Unix is that driver_select, ready_input and ready_output all work with signals instead of file descriptors. This means that the driver_select is used to specify which type of signal should trigger calls to ready_input/ready_output. The functions described below are available to driver programmers on Enea OSE to facilitate this.

### DATA TYPES

union SIGNAL
  See the Enea OSE SPI documentation for a description.
SIGSELECT
  See the Enea OSE SPI documentation for a description.
ErlDrvEvent
  The ErlDrvEvent is a handle to a signal number and id combination. It is passed to driver_select(3).
ErlDrvOseEventId
  This is the id used to associate a specific signal to a certain driver instance.

### EXPORTS

union SIGNAL *erl_drv_ose_get_signal(ErlDrvEvent drv_event)

Fetch the next signal associated with drv_event. Signals will be returned in the order which they were received and when no more signals are available NULL will be returned. Use this function in the ready_input/ready_output callbacks to get signals.

ErlDrvEvent erl_drv_ose_event_alloc(SIGSELECT signo, ErlDrvOseEventId id, ErlDrvOseEventId (*resolve_signal)(union SIGNAL* sig), void *extra)

Create a new ErlDrvEvent associated with signo, id and uses the resolve_signal function to extract the id from a signal with signo. The extra parameter can be used for additional data. See Signals in a Linked-in driver in the OSE User's Guide.

void erl_drv_ose_event_free(ErlDrvEvent drv_event)

Free a ErlDrvEvent. This should always be done in the stop_select callback when the event is no longer being used.

void erl_drv_ose_event_fetch(ErlDrvEvent drv_event, SIGSELECT *signo, ErlDrvOseEventId *id, void **extra)

Write the signal number, id and any extra data associated with drv_event into *signo and *id respectively. NULL can be also passed as signo or id in order to ignore that field.

### SEE ALSO

driver_entry(3), erl_driver(3)