logo.png

Activités :
..

Traitements :
platine
polarisation
laser
altera1
altera2

Objet :
Configuration
Home Up


Contents



1 Introduction

Cette page décrit la sous activité 'EXECUTORS' faisant partie de l'activité 'DEVICES-CONTROLER'.

Il s'agit d'une abstraction du code communiquant avec les différents modules. C'est ici que sera localisé le code spécifique d'accès au périfériques.


2 Diagramme de flux

Figure: DIAGRAMME DE FLUX
\begin{figure}\centering
\includeImage[scale=0.7]{DF}
\end{figure}


2.1 Niveau n+1

L'activité se divise 4 traitements :


2.2 Événements

L'activité réagit via les évènements suivants :

  • platine-executor-orders en provenance du traitement translator et a destination du traitement platine
  • polarisation-executor-orders en provenance du traitement translator et a destination du traitement polarization
  • laser-executor-orders en provenance du traitement translator et a destination du traitement laser
  • altera1-executor-orders en provenance du traitement translator et a destination du traitement toAltera1
  • altera2-executor-orders en provenance du traitement translator et a destination du traitement toAltera2


3 Implémentation

Il n'y a pas de code à ce niveau. Néanmoins, chacun des traitements inclus dans cette activité sont codés de la même manière. Aussi, nous exposons ci-dessous les grandes lignes de l'implémentation de ces traitements.


4 Générateur de squelette


4.1 Installation

Instructions officielles :

# su - enx
$ cd ~/svn/enx/EnxTools/Driver_Generator

fichier  /.bash_profile

# needed for driver generator's configuration
export ENX_SRC=~/svn/enx/Trunk/

# needed for ENX to find it's plugins (the drivers)
export LD_LIBRARY_PATH=~/ENX-2.4/i686/Drivers


4.2 Configuration

$ ./configure --enable-C --with-name=monDriver

  • You must define the driver name (--with-name=...).
    $ ./configure --with-name=monDriver
    

  • You should look for environment variable ENX_SRC
    $ export ENX_SRC=/home/enx/svn/enx/Trunk/
    


4.3 Make

$ make 
Creating stubs for monDriver driver
    Creating directory build/monDriver
    Copying files
DONE.

$ cp -fr build/monDriver ~/.
$ cd ~/monDriver
$ make
$ make install


5 Prise en main du nouveau driver

  • charger le nouveau driver en mémoire :
    $ ~/ENX-2.4/i686/console
    
    ENX > !driver_add monDriver libmondriver.so
    
    ENX > !list driver
     - monDriver
     - DRIVER_DEBUG
    

  • création d'un nouveau device utilisant le nouveau drivers :
    ENX > !create monDevice 0 0xFF monDriver
    ENX > !list device
     - monDevice
    

  • utilisation :
    ENX > md monDevice 0
     249 INFO [main_task_0810D0D0] ENX.Console - 0x00000000 -> 0x0C000000
    ENX > mm monDevice 0 0x1234
     256 INFO [main_task_0810D0D0] ENX.Console - OK
    ENX > md monDevice 0
     268 INFO [main_task_0810D0D0] ENX.Console - 0x00000000 -> 0x00000000
    ENX > special monDevice test
     315 INFO [main_task_0810D0D0] ENX.Console - SUPER TEST !!!
    ENX > help monDevice    
     329 INFO [main_task_0810D0D0] ENX.Console - SUPER HELP !!!
    


6 Edition des liens


6.1 Appel à une bibliothèque dynamique

Fichier  /monDriver/libmondriver.gpr :

for Library_Options use ("../altera2ada.o", "-L/usr/local/lib", "-lftd2xx");

Fichier  /monDriver/libmondriver.gpr :

...
#include "ftd2xx.h"
...
char* special (void *struct_c, char *command) 
{
  char *return_value=(char*)0;

  FT_STATUS l_ftStatus;
  DWORD l_luNumDevs;
 
  // create the device information list
  l_ftStatus = FT_CreateDeviceInfoList(&l_luNumDevs);
  if (l_ftStatus == FT_OK) {
    printf("Number of devices is %lu\n",l_luNumDevs);
  }

  return return_value;
}
...


6.2 Linkage avec un fichier objet C

Fichier  /monDriver/libmondriver.gpr :

for Library_Options use ("../altera2ada.o", "../toto.o");

Fichier  /monDriver/libmondriver.gpr :

...
extern int tata();
...
char* special (void *struct_c, char *command) 
{
  char *return_value=(char*)0;

  printf("printf: toto = %i\n", tata());

  return return_value;
}
...


6.3 Linkage avec un fichier objet C++

Fichier  /monDriver/libmondriver.gpr :

for Library_Options use ("../altera2ada.o", "../toto.o");

Fichier  /monDriver/libmondriver.gpr :

...
extern int tata();
...
char* special (void *struct_c, char *command) 
{
  char *return_value=(char*)0;

  printf("printf: toto = %i\n", tata());

  return return_value;
}
...

Fichier  /monDriver/toto.cc :

extern "C" int tata()
{
        static int bof=42;
        return ++bof;
}

Home Up

This document is also available in PDF and PostScript format.



2016-02-15