Provided by: erlang-manpages_18.3-dfsg-1ubuntu3.1_all bug

NAME

       ose_erl_driver - 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(3erl).

         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(3erl), erl_driver(3erl)