Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

Devices Class Reference

The Device Handler Manages the devices. More...

#include <devices.h>

List of all members.

Public Methods

 Devices ()
 Constructor. More...

 ~Devices ()
 Deconstructor. More...

string addDevicePlugIn (string filename)
 Loads and registers a new device plugin. More...

bool update ()
int countDevices ()
 Returns number of registered devices. More...

int nameToInt (string name)
 Return device number of device name. More...

string getDeviceName (int i)
 Returns name of device number. More...

int getDeviceAxes (int i)
 Returns amount of axes. More...

int getDeviceButtons (int i)
 Returns amount of buttons. More...

int getDeviceSlots (int i)
 Returns amount of slots. More...

float getSlot (int device, int slot)
 Returns value of device slot. More...

bool connect (int device, int deviceslot, DeviceEvent ev)
 Connect device slot to event. More...

float eventStatus (DeviceEvent ev)
 Returns event status. More...


Private Types

typedef vector<DevicePlugIn*> CVectorDevicePlugIn
typedef vector<float> CEvents
typedef vector< vector<int> > CCEvents

Private Attributes

int registeredDevices
CVectorDevicePlugIn devs
CEvents events
CCEvents cEvents


Detailed Description

The Device Handler Manages the devices.

Author(s):
Marc Haisenko
Date:
200400

Definition at line 33 of file devices.h.

00033 {
00034     public:
00035 
00037     Devices ();
00039     ~Devices ();
00040 
00042 
00046     string  addDevicePlugIn (string filename);
00047 
00048     bool    update ();
00049 
00051 
00054     int countDevices ();
00055 
00057 
00061     int nameToInt (string name);
00062 
00064 
00068     string  getDeviceName (int i);
00069 
00071 
00075     int getDeviceAxes (int i);
00077 
00081     int getDeviceButtons (int i);
00082 
00084 
00088     int     getDeviceSlots (int i);
00089 
00091 
00096     float   getSlot (int device, int slot);
00097 
00099 
00105     bool    connect (int device, int deviceslot, DeviceEvent ev);
00106 
00108 
00112     float   eventStatus (DeviceEvent ev);
00113 
00114 
00115     private:
00116 
00117     typedef vector<DevicePlugIn*> CVectorDevicePlugIn;
00118         typedef vector<float>         CEvents;
00119         typedef vector< vector<int> > CCEvents;
00120     int         registeredDevices;
00121     CVectorDevicePlugIn devs;
00122         CEvents         events;
00123         CCEvents        cEvents;
00124 }

Member Typedef Documentation

typedef vector< vector<int> > Devices::CCEvents [private]

Definition at line 119 of file devices.h.

typedef vector<float> Devices::CEvents [private]

Definition at line 118 of file devices.h.

typedef vector<DevicePlugIn*> Devices::CVectorDevicePlugIn [private]

Definition at line 117 of file devices.h.


Constructor & Destructor Documentation

Devices::Devices ()

Constructor.

Definition at line 29 of file devices.cpp.

00029 {
00030     registeredDevices = 0;
00031     
00032     for (int i = 0; i < DEVICE_EVENTS; i++) {
00033         events.push_back (0.0);
00034     };
00035 }

Devices::~Devices ()

Deconstructor.

Definition at line 47 of file devices.cpp.

00047 {
00048 }

Member Function Documentation

string Devices::addDevicePlugIn ( string filename)

Loads and registers a new device plugin.

Parameters:
filename   the name of the plugin
Returns:
device name

Definition at line 60 of file devices.cpp.

00060 {
00061     typedef void* (*pfnPlugIn)();
00062     pfnPlugIn getPlugIn;
00063     void*     handler;
00064     
00065     if ((handler = (pfnPlugIn) dlopen (filename.c_str (), RTLD_NOW)) != 0) {
00066         if ((getPlugIn = (pfnPlugIn)dlsym (handler, "GetDevicePlugIn")) != 0) {
00067             devs.push_back ((DevicePlugIn*) getPlugIn ());
00068             devs.back ()->openDevice ();
00069 
00070             vector<int> tmpV;
00071             for (int i = 0; i < (devs.back ()->buttons () + (devs.back ()->axes () * 2)); i++) {
00072                 tmpV.push_back (0);
00073             };
00074             cEvents.push_back (tmpV);
00075 
00076             return string (devs.back ()->name ());
00077         } else {
00078             return "Error: Not a 3Dsia device plugin !";
00079         };
00080     } else {
00081         return "Error: Couldn't open device plugin !";
00082     };
00083 }

bool Devices::connect ( int device,
int deviceslot,
DeviceEvent ev)

Connect device slot to event.

Parameters:
device   device number
deviceslot   slot number
ev   event number
Returns:
false on failure

Definition at line 191 of file devices.cpp.

00191 {
00192     if ((device >= 0) && ((CCEvents::size_type)device < cEvents.size ()) && (deviceslot < getDeviceSlots (device))) {
00193         cEvents[device][deviceslot] = ev;
00194         return true;
00195     } else return false;
00196 }

int Devices::countDevices ()

Returns number of registered devices.

Returns:
number of devices

Definition at line 95 of file devices.cpp.

00095 {
00096     return devs.size ();
00097 }

float Devices::eventStatus ( DeviceEvent ev)

Returns event status.

Parameters:
ev   Event to check
Returns:
event value

Definition at line 209 of file devices.cpp.

00209 {
00210     if ((ev >= 0) && ((CEvents::size_type)ev < events.size ())) {
00211         return events[ev];
00212     } else return 0.0;
00213 }

int Devices::getDeviceAxes ( int i)

Returns amount of axes.

Parameters:
i   device number
Returns:
amount of axes, -1 on failure

Definition at line 142 of file devices.cpp.

00142 {
00143     if ((i >= 0) && ((CVectorDevicePlugIn::size_type)i < devs.size ())) {
00144         return devs[i]->axes ();
00145     } else return -1;
00146 }

int Devices::getDeviceButtons ( int i)

Returns amount of buttons.

Parameters:
i   device number
Returns:
amount of buttons, -1 on failure

Definition at line 158 of file devices.cpp.

00158 {
00159     if ((i >= 0) && ((CVectorDevicePlugIn::size_type)i < devs.size ())) {
00160         return devs[i]->buttons ();
00161     } else return -1;
00162 }

string Devices::getDeviceName ( int i)

Returns name of device number.

Parameters:
i   device number
Returns:
device name

Definition at line 126 of file devices.cpp.

00126 {
00127     if ((i >= 0) && ((CVectorDevicePlugIn::size_type)i < devs.size ())) {
00128         return devs[i]->name ();
00129     } else return "no such device";
00130 }

int Devices::getDeviceSlots ( int i)

Returns amount of slots.

Parameters:
i   device number
Returns:
amount of slots, -1 on failure

Definition at line 175 of file devices.cpp.

00175 {
00176     if ((i >= 0) && ((CVectorDevicePlugIn::size_type)i < devs.size ())) {
00177         return (devs[i]->buttons () + (devs[i]->axes () * 2));
00178     } else return -1;
00179 }

float Devices::getSlot ( int device,
int slot)

Returns value of device slot.

Parameters:
device   The number of the device
slot   The number of the slot
Returns:
slot value

Definition at line 234 of file devices.cpp.

00234 {
00235     if ((device >= 0) && ((CVectorDevicePlugIn::size_type)device < devs.size ()) && (slot >= 0) && (slot < getDeviceSlots (device))) {
00236         if (slot < getDeviceButtons (device)) {
00237             if (devs[device]->buttonPressed (slot)) {
00238                 return 1.0;
00239             } else {
00240                 return 0.0;
00241             };
00242         } else {
00243             if (((slot - getDeviceButtons (device)) % 2) == 0) {
00244                 if (devs[device]->axis ((slot - getDeviceButtons (device)) / 2) < 0) return 0.0;
00245                 return (devs[device]->axis ((slot - getDeviceButtons (device)) / 2)) / 32767.0;
00246             } else {
00247                 if (devs[device]->axis ((slot - getDeviceButtons (device)) / 2) > 0) return 0.0;
00248                 return -(devs[device]->axis ((slot - getDeviceButtons (device)) / 2)) / 32767.0;
00249             };
00250         };
00251     } else return 0.0;
00252 }

int Devices::nameToInt ( string name)

Return device number of device name.

Parameters:
name   returned by addDevicePlugin
Returns:
device number, -1 on failure

Definition at line 109 of file devices.cpp.

00109 {
00110     for (CVectorDevicePlugIn::size_type i = 0; i < devs.size(); i++) {
00111         if (devs[i]->name () == name) return i;
00112     };
00113     return -1;
00114 }

bool Devices::update ()

Definition at line 267 of file devices.cpp.

00267 {
00268     if (devs.size () == 0) return false;
00269     
00270     for (CEvents::size_type i = 0; i < events.size (); i++) {
00271         events[i] = 0.0;
00272     };
00273     
00274     for (CVectorDevicePlugIn::size_type i = 0; i < devs.size (); i++) {
00275         devs[i]->update ();
00276         for (CCEvents::size_type k = 0; k < cEvents[i].size (); k++) {
00277             if (events[cEvents[i][k]] == 0.0) events[cEvents[i][k]] = 0.0;
00278         };
00279     };
00280     
00281     for (CVectorDevicePlugIn::size_type i = 0; i < devs.size (); i++) {
00282         for (CCEvents::size_type k = 0; k < cEvents[i].size (); k++) {
00283             if (events[cEvents[i][k]] == 0.0) events[cEvents[i][k]] += getSlot (i, k);
00284         };
00285     };
00286     
00287     return true;
00288 }

Member Data Documentation

CCEvents Devices::cEvents [private]

Definition at line 123 of file devices.h.

CVectorDevicePlugIn Devices::devs [private]

Definition at line 121 of file devices.h.

CEvents Devices::events [private]

Definition at line 122 of file devices.h.

int Devices::registeredDevices [private]

Definition at line 120 of file devices.h.


The documentation for this class was generated from the following files:
Generated at Sat May 13 13:50:25 2000 for 3Dsia by doxygen 1.1.2 written by Dimitri van Heesch, © 1997-2000