Interface logicielle PC pour cartes NSI
Transcription
Interface logicielle PC pour cartes NSI
www.nsi.fr Interface logicielle PC pour cartes NSI Guide utilisateur 30/08/2013 DUT-MUX-0219 /V1.2 Auteur : Cédric Rousset Approbation : Christian Andagnotto Page laissée intentionnellement blanche Interface logicielle PC pour cartes NSI - Guide utilisateur I. Contenu I. CONTENU .............................................................................................................................. 1 II. AVERTISSEMENTS ............................................................................................................ 3 III. BUT DU DOCUMENT ....................................................................................................... 4 IV. PRESENTATION GENERALE ........................................................................................ 5 IV.1 Architecture................................................................................................................... 5 IV.2 Systèmes supportés ....................................................................................................... 6 IV.3 Cartes concernées.......................................................................................................... 6 V. MISE EN ŒUVRE DE L'INTERFACE LOGICIELLE .................................................. 7 V.1 Présentation .................................................................................................................... 7 V.2 Composition de l'interface logicielle .............................................................................. 7 V.2.1 NSIMISC.DLL .................................................................................................. 7 V.2.2 NSIMISC.LIB .................................................................................................... 8 V.2.3 Fichiers .H .......................................................................................................... 8 V.2.4 Programme de test ............................................................................................. 8 V.2.5 Programmes d’exemple ..................................................................................... 9 V.2.6 Fichiers d’installation ........................................................................................ 9 V.2.7 Pilotes de périphériques ..................................................................................... 9 V.3 Liste des fonctions de l'interface logicielle .................................................................... 10 V.4 Séquences d'appel des requêtes ...................................................................................... 11 V.4.1 Tableau récapitulatif .......................................................................................... 12 V.5 Modes du périphérique (non disponible) ....................................................................... 13 V.5.1 Mise en veille ..................................................................................................... 13 V.5.2 Réveil ................................................................................................................. 14 VI. DESCRIPTION DES TYPES ............................................................................................. 15 VI.1 t_MiscDeviceInfo ......................................................................................................... 15 VI.2 t_MiscDeviceMode ....................................................................................................... 16 VI.3 t_MiscInputInfo ............................................................................................................ 16 VII. DESCRIPTION DES FONCTIONS DE L'INTERFACE .............................................. 17 VII.1 Nsi_GetAPIinfo ........................................................................................................... 17 VII.2 Nsi_ExitDrv ................................................................................................................. 18 VII.3 Nsi_GetDeviceInfo ...................................................................................................... 19 VII.4 Nsi_GetDeviceMode (non disponible) ........................................................................ 20 VII.5 Nsi_InitDrv .................................................................................................................. 21 VII.6 Nsi_ReadAna ............................................................................................................... 22 VII.7 Nsi_ReadIo .................................................................................................................. 23 VII.8 Nsi_ReadIoEx .............................................................................................................. 24 VII.9 Nsi_SetDeviceMode (non disponible)......................................................................... 25 VII.10 Nsi_WriteIo ............................................................................................................... 26 VIII. TRUCS ET ASTUCES ..................................................................................................... 27 VIII.1 Dépanner une application ........................................................................................... 27 VIII.2 Utiliser un compilateur non Microsoft ....................................................................... 27 VIII.2.1 Linkage de l’application avec la DLL NSIMISC .......................................... 27 août 2013 DUT-MUX-0219 /V1.2 -1- Interface logicielle PC pour cartes NSI - Guide utilisateur VIII.2.2 Alignement des structures de données ........................................................... 27 IX. INSTALLATION DE L'INTERFACE LOGICIELLE ................................................... 29 IX.1 Installer un périphérique USB ...................................................................................... 30 IX.1.1 Sous Windows 98/Me....................................................................................... 30 IX.1.2 Sous Windows 2000 ......................................................................................... 31 IX.1.3 Sous Windows XP ............................................................................................ 32 IX.2 Dépannage de l’installation........................................................................................... 33 X. DESINSTALLATION DE L’INTERFACE LOGICIELLE ............................................. 34 X.1 Windows 95/98/Me ........................................................................................................ 34 X.2 Windows 2000................................................................................................................ 35 X.3 Windows XP .................................................................................................................. 35 XI. ANNEXE : PROTOTYPES DES FONCTIONS............................................................... 36 XII. ANNEXE : FONCTIONS DE L'API WIN32 .................................................................. 37 XIII. ANNEXE : PROGRAMME D'EXEMPLE .................................................................... 39 XIII.1 Déclarations ................................................................................................................ 39 XIII.2 Initialisations .............................................................................................................. 40 XIII.3 Gestion des Entrées/Sorties ........................................................................................ 43 XIII.4 Gestion des modes de fonctionnement ....................................................................... 44 XIII.5 Arrêt du programme ................................................................................................... 45 -2- DUT-MUX-0219 /V1.2 août 2013 Interface logicielle PC pour cartes NSI - Guide utilisateur II. Avertissements Les éléments contenus dans ce document sont fournis à titre d'information. Ils pourront faire l'objet de modifications sans préavis et ne sauraient en aucune manière engager la société anonyme NSI. La société anonyme NSI ne saurait en aucun cas être tenue pour responsable d'une quelconque erreur contenue dans ce document, ainsi que des éventuelles conséquences pouvant en résulter. Aucune partie de ce document ne peut être reproduite à d'autres fins que l'usage personnel de l'acheteur sans la permission expresse et écrite de la société anonyme NSI. août 2013 DUT-MUX-0219 /V1.2 -3- Interface logicielle PC pour cartes NSI - Guide utilisateur III. But du document Le but de ce document est de donner à l'utilisateur toutes les informations nécessaires à l'utilisation de l'interface logicielle pour les cartes NSI. -4- DUT-MUX-0219 /V1.2 août 2013 Interface logicielle PC pour cartes NSI - Guide utilisateur IV. Présentation générale L'interface logicielle générique permet aux utilisateurs de réaliser leurs propres applications pour Windows en utilisant les cartes NSI au travers d'une interface simple et rapide à mettre en œuvre. L'interface logicielle générique se présente sous la forme d'une série de fonctions dont l'utilisation est décrite dans ce document. Ces fonctions sont exécutées par une DLL qu'une ou plusieurs applications peuvent appeler simultanément. Cette DLL est identique pour toutes les plates formes Windows supportées. L'interface logicielle permet à l'utilisateur de faire abstraction aussi bien du système d'exploitation que du type de carte utilisé. Voir les paragraphes suivants pour connaître les caractéristiques des différentes cartes et les systèmes d’exploitations supportées par cette interface logicielle. L’interface logicielle peut gérer plusieurs cartes simultanément. IV.1 Architecture Application Win32 Applications Win32 NSICAN, NSIDIAG, … Système NSIMISC.DLL Pilotes de périphérique NSI ISA-PCMCIA-PCI-USB Pilote NSIU2KBO ou NSIU2KUD Matériel Applications Win32 Plate-forme : Windows 98, Me, 2000, XP Cartes NSI MUXy box MUXy box 2 août 2013 DUT-MUX-0219 /V1.2 -5- Interface logicielle PC pour cartes NSI - Guide utilisateur IV.2 Systèmes supportés L’interface logicielle fonctionne pour des ordinateurs de type PC fonctionnant avec les systèmes d’exploitation suivants : Windows XP Windows Vista 32 bits Windows Vista 64 bits (MUXybox2 uniquement) Windows Seven 32 bits Windows Seven 64 bits (MUXybox2 uniquement) IV.3 Cartes concernées Référence NSI Désignation Bus Nb Canaux Description KT007078 MUXy box USB 2 MUXy box KT009498 MUXy box 2 USB 2 MUXy box 2 -6- DUT-MUX-0219 /V1.2 août 2013 Interface logicielle PC pour cartes NSI - Guide utilisateur V. Mise en œuvre de l'interface logicielle V.1 Présentation Les fonctions de l'interface logicielle permettent à des programmeurs de réaliser des applications pour Windows utilisant les cartes NSI. Ces fonctions permettent d'exécuter des fonctionnalités indépendantes des réseaux CAN, VAN, K, LIN ou autres, comme la gestion d'entrées/sorties ou tout autre fonction propre au périphérique piloté. Toutes les fonctions de l’interface logicielle sont définies en Langage C dans la librairie : NSIMISC.DLL. L’interface logicielle permet d’utiliser toutes les cartes NSI énumérées dans le paragraphe Cartes supportées. Pour utiliser un périphérique, une application doit premièrement l’ouvrir (Nsi_InitDrv). Lors de cette ouverture, un identificateur unique est retourné par l'interface. Cet identificateur - le "Handle" – doit ensuite être utilisé par l'application lors de chaque appel aux fonctions de l'interface pour identifier ce canal. Un canal ne peut pas être ouvert par une autre application tant qu'il n'a pas été refermé (Nsi_ExitDrv). V.2 Composition de l'interface logicielle Les chemins des répertoires indiqués sont relatifs au répertoire \Pilotes PC – PC drivers du CD-ROM intitulé « CD-ROM Livraison NSI ». V.2.1 NSIMISC.DLL Le fichier NSIMISC.DLL (Dynamic Link Library) exporte toutes les fonctions de l'interface logicielle. Les applications doivent appeler ce fichier DLL pour utiliser l'interface logicielle. La DLL NSIMISC communique les ordres de l'application vers la carte NSI au travers d'un pilote de périphérique. Pour lier une application avec le fichier DLL, le compilateur utilise généralement un fichier LIB qui définit les points d’entrées de chaque fonction exportée. Les prototypes des fonctions sont fournis dans plusieurs fichiers H décrits ci-dessous. Le fichier NSIMISC.DLL est copié par le processus d'installation dans le répertoire System ou System32 d'où il est accessible par toutes les applications. Il n’est pas nécessaire de copier ce fichier à un autre emplacement. Se référer au chapitre Installation de l’interface logicielle pour plus de détails. Une application cliente pourra appeler simultanément l’ensemble des interfaces logicielles. août 2013 DUT-MUX-0219 /V1.2 -7- Interface logicielle PC pour cartes NSI - Guide utilisateur V.2.2 NSIMISC.LIB Le fichier NSIMISC.LIB permet de lier une application avec NSIMISC.DLL lors de la construction d'une application. Le fichier NSIMISC.LIB livré dans le répertoire MISCPC2000\Include est spécifique aux environnements de développement Microsoft. En cas d’incompatibilité, ce fichier peut être généré pour d'autres outils de développement grâce aux fichier DEF ou DLL. Le fichier LIB doit être copié dans le répertoire du projet de l'application et inséré dans le projet comme indiqué dans la documentation de l'outil de développement utilisé. Voir le paragraphe Utiliser un compilateur non Microsoft dans le chapitre Trucs et Astuces. V.2.3 Fichiers .H Les fichiers .H livrés dans le répertoire MISCPC2000\Include du CD-ROM définissent en langage C les prototypes des fonctions de l'interface logicielle. Deux fichiers différents séparent la déclaration des structures et des constantes (MISCDEF.H) de la déclaration des prototypes des fonctions (MISCPRO.H). Ces fichiers doivent être copiés dans le répertoire du projet de l'application et inclus dans le code source par la directive suivante : #include "miscdef.h" #include "miscpro.h" Attention : Les fichiers H de l’interface logicielle contiennent des directives de compilation dont la syntaxe est spécifique aux outils Microsoft. Celles-ci doivent impérativement être modifiés en fonction du compilateur utilisé. Voir le paragraphe Utiliser un compilateur non Microsoft dans le chapitre Trucs et Astuces. V.2.4 Programme de test Un programme de test (MISCTEST.EXE) est livré dans le répertoire MISCPC2000EX\Test du CD-ROM. Ce programme permet de vérifier que le pilote de la carte et la DLL sont correctement installés et qu'une carte fonctionne. Il est possible d’ouvrir ce programme plusieurs fois et de l’utiliser simultanément sur des périphériques différents. -8- DUT-MUX-0219 /V1.2 août 2013 Interface logicielle PC pour cartes NSI - Guide utilisateur V.2.5 Programmes d’exemple Un programme d’exemple est livré dans le répertoire MISCPC2000\Samples du CD-ROM. V.2.6 Fichiers d’installation Les fichiers d'installation (.INF et .BAT) permettent d'installer les pilotes de périphérique en fonction du système d'exploitation. Se référer au chapitre Installation de l’interface logicielle pour plus de détails sur l’utilisation de ces fichiers. V.2.7 Pilotes de périphériques Les fichiers pilotes de périphérique nécessaires sont automatiquement copiés lors de l’installation de l’interface logicielle. Les applications ne doivent normalement pas accéder directement à ces fichiers : NSIU2KBO.SYS : Pilote Windows 98/Me/XP/2000 pour MUXy box NSIU2KUD.SYS : Pilote Windows XP/Vista/Seven pour MUXy box2 août 2013 DUT-MUX-0219 /V1.2 -9- Interface logicielle PC pour cartes NSI - Guide utilisateur V.3 Liste des fonctions de l'interface logicielle Nom Nsi_EnumCards Nsi_InitDrv Nsi_GetDeviceInfo Nsi_GetAPIinfo Nsi_WriteIo Nsi_ReadIo Nsi_ReadIoEx Nsi_ReadAna Nsi_SetDeviceMode Nsi_GetDeviceMode Nsi_ExitDrv - 10 - Fonction Configuration, initialisation Enumération des périphériques NSI détectées et de leur propriétés Ouverture d'un canal. Informations sur le périphérique. Retourne les versions des couches logicielles Entrée / Sorties Ecriture d’entrées/sorties Lecture d’entrées/sorties Lecture d’entrées/sorties avancée Lecture d’entrées ANA (MUXybox2 uniquement) Divers Place le périphérique dans un mode particulier Récupère le mode dans lequel se trouve le périphérique. Sortie du driver Arrêt du programme et restitution de l'environnement. DUT-MUX-0219 /V1.2 août 2013 Interface logicielle PC pour cartes NSI - Guide utilisateur Arrêt de la communication Fonctions spécifiques Initialisation et configuration V.4 Séquences d'appel des requêtes Nsi_EnumCards Nsi_InitDrv Application utilisateur Nsi_ExitDrv L’appel de ces fonctions est impératif et l’ordre doit être respecté. L’appel de ces fonctions est facultatif ; il dépend de l’application. août 2013 DUT-MUX-0219 /V1.2 - 11 - Interface logicielle PC pour cartes NSI - Guide utilisateur V.4.1 Tableau récapitulatif L'appel des fonctions de l'interface doit respecter un certain ordre. Si la séquence d'appel n'est pas respecté, l'interface logicielle retourne le code d'erreur _SEQ_ERR (erreur de séquence). INIT DRV OK Etat Requêtes Nsi_EnumCards Nsi_InitDrv Nsi_GetAPIinfo Nsi_GetDeviceInfo X X X X X X Nsi_WriteIo Nsi_ReadIo Nsi_ReadIoEx Nsi_ReadAna X X X X Nsi_SetDeviceMode Nsi_GetDeviceMode X X Nsi_ExitDrv X Le tableau suivant précise quelles requêtes provoquent les changements d'état de l'interface. Le code retour doit indiquer _OK pour que le changement ait eu lieu. Etats REPOS INIT_DRV_OK - 12 - Requêtes de transition Nsi_ExitDrv Nsi_InitDrv DUT-MUX-0219 /V1.2 août 2013 Interface logicielle PC pour cartes NSI - Guide utilisateur V.5 Modes du périphérique (non disponible) V.5.1 Mise en veille MUXy box possède un mode de basse consommation (Low Power) permettant de réduire la consommation; ce mode est activé par la commande SetDeviceMode(Low_Power) qui autorise le passage de l'interface en basse consommation suivant le diagramme d'état cidessous (figure 1.1) SetDeviceMode (LOW_POWER) / Désactiver Automaintien Alimentation Mode Low Power automaintien OFF Not (Conditions de réveil) Mode Normal automaintien ON consommation normale Réveillé consommation normale En veille basse consommation Conditions de réveil SetDeviceMode (MODE_NORMAL) / Activer Automaintien Alimentation Les conditions de réveil, définies plus en détail au §5.2, sont les suivantes : une activité est détectée sur les bus CAN/LIN ou sur une entrée logique (réveil local) la liaison USB hôte est connectée (réveil commandé) un réveil programmé par l'horloge interne est déclenché (réveil autonôme) août 2013 DUT-MUX-0219 /V1.2 - 13 - Interface logicielle PC pour cartes NSI - Guide utilisateur V.5.2 Réveil Lorsque MUXy box est en état de veille basse consommation (mode "Low Power"), les évènements suivants provoquent la ré-alimentation de l'interface : 1 2 3 4 5 6 7 8 9 10 Evènement de réveil Reconnexion de la liaison USB avec le PC hôte Message de réveil sur le bus CAN0 "high speed" Message de réveil sur le bus CAN0 "low speed" Message de réveil sur le bus CAN1 "high speed" Message de réveil sur le bus CAN1 "low speed" Message de réveil sur le bus LIN Entrée logique TOR 1 à l'état haut Entrée logique TOR 2 à l'état haut Alarme programmable (réserve) Demande de réveil de la carte fille (réserve) Type de réveil Commandé (+5V USB) Local (signal INH du driver TJA1041 canal 0) Local (signal INH du driver TJA1054 canal 0) Local (signal INH du driver TJA1041 canal 1) Local (signal INH du driver TJA1041 canal 1) Local (signal INH du driver TJA1020) Local (détection de seuil) Local (détection de seuil) Autonome (signal d' IT de l'horloge temps réel) Autonome (signal d' IT du bus d'extension) Si l'une au moins de ces conditions de réveil est vraie, MUXy box passe alors dans un état transitoire de réveil (état réveillé de l'automate illustré par la fig 1.1) avec retour à la consommation normale. Pour éviter les boucles de transitions en veille / réveillé conduisant à des réveils intempestifs, le paramètre Sleep_delay de la commande SetDeviceMode(LOW_POWER) permet à l'utilisateur de spécifier un délai minimal d'inactivité avant que l'interface ne retourne à l'état de veille basse consommation. L'automate détaillé régissant le Mode Low Power est illustré par le diagramme d'état suivant : Mode Low Power Not (Conditions de réveil) / Démarrer Délai (Sleep_delay) Réveillé consommation normale Conditions de réveil Attente délai de mise en veille Fin du délai et Not (Conditions de réveil) / Mise en veille des interfaces Hard - 14 - DUT-MUX-0219 /V1.2 En veille basse consommation août 2013 Interface logicielle PC pour cartes NSI - Guide utilisateur VI. Description des types Notation : pour les définitions de types (typedef), le préfixe t_ est utilisé. VI.1 t_MiscDeviceInfo La structure t_MiscDeviceInfo est retournée par la fonction Nsi_GetDeviceInfo. Elle permet d'obtenir des informations sur un périphérique. typedef struct{ unsigned long deviceType; // Type de périphérique union { struct USB{ short vendorID; //VendorID short deviceID; //DeviceID char productName[0x40]; //Nom produit char manufacturerName[0x40]; //Fabricant char serialNumber[0x80]; //N° de série short firmwareVersion; //Version code ULONG boardType; //Type de carte ULONG reserved2; //Réservé ULONG hardwareVersion; //Version carte }; struct PCI{ ULONG IOBaseAddress; //Adresse IO ULONG memoryBaseAddress[3]; //Mémoire base ULONG IRQLineNumber; //N° IRQ ULONG boardType; //Type de carte char cardNameString[80]; //Nom de carte ULONG reserved1; //Réservé ULONG reserved2; //Réservé }; struct ISA{ ULONG IOBaseAddress; //Adresse IO ULONG IRQLineNumber; //N° IRQ ULONG boardType; //Type de carte char cardNameString[80]; //Nom du canal ULONG reserved1; //Réservé ULONG reserved2; //Réservé }; char reserved[512]; } } t_MiscDeviceInfo; deviceType : Type de périphérique/pilote utilisé. Notes sur différents champs apparaissant dans les structures : firmwareVersion: Version du code embarqué. hardwareVersion: Version de la carte. (Non supporté pour MUXy box) Note: Les versions sont retournées sous la forme: (version majeur x 100) + version mineur. août 2013 DUT-MUX-0219 /V1.2 - 15 - Interface logicielle PC pour cartes NSI - Guide utilisateur Exemple : 102 s'interprète comme la version 1.02 boardType : Type de carte utilisée. _MUXYBOX _MUXYBOX2 : MUXy box standard : MUXy box2 standard VI.2 t_MiscDeviceMode Enumération des différents mode du périphérique. typedef enum { _UNKNOWN = 0, _NORMAL = 1, _LOW_POWER = 2, } t_NsiDeviceMode; VI.3 t_MiscInputInfo Informations sur les entrées. typedef struct{ unsigned char InputValue; //Valeur de l'entrée (0,1) unsigned long InputChange; //Date du dernier changement d'état (unité 100us) unsigned char reserved[128]; } t_MISCinputInfo; - 16 - DUT-MUX-0219 /V1.2 août 2013 Interface logicielle PC pour cartes NSI - Guide utilisateur VII. Description des fonctions de l'interface VII.1 Nsi_GetAPIinfo Retourne les informations concernant l'interface logicielle : version du pilote de la carte utilisée et version de la DLL NSIMISC. short Nsi_GetAPIinfo( HANDLE short* short* unsigned long* hdrv, DLLversion, DRVversion, reserved ) Paramètres : hdrv : Identificateur du canal retourné par la fonction Nsi_InitDrv. DLLversion: Version de la DLL NSIMISC.DLL. DRVversion: Version du pilote de périphérique de la carte utilisée. reserved : Réservé Note: Les versions sont retournées sous la forme: (version majeur x 100) + version mineur. Exemple : 102 s'interprète comme la version 1.02 Code retour : _OK : _SEQ_ERR : _INVALID_OP : _PARAM_ERR : août 2013 Versions retournées correctement. Séquence invalide. La valeur de hdrv est invalide. Paramètre invalide. DUT-MUX-0219 /V1.2 - 17 - Interface logicielle PC pour cartes NSI - Guide utilisateur VII.2 Nsi_ExitDrv Désactive le contrôleur de protocole et restitue l'environnement initial du canal. Ne pas oublier d'appeler cette requête en fin d'utilisation d'un périphérique. En effet, tant qu'un canal n'a pas été libéré par cette fonction, d'autres applications ne peuvent pas l'utiliser. short Nsi_ExitDrv( HANDLE hdrv ); Paramètres : hdrv : Identificateur du canal retourné par la fonction Nsi_InitDrv. Code retour : _OK : _SEQ_ERR : _INVALID_OP : _DRV_PARAM_ERR : _USB_ERR : _BOARD_TIMEOUT: - 18 - Canal libéré. Séquence invalide. La valeur de hdrv est invalide. Problème d'accès au pilote. Vérifier l'installation de la carte. Erreur de transmission USB. Pas d'acquittement du périphérique USB. DUT-MUX-0219 /V1.2 août 2013 Interface logicielle PC pour cartes NSI - Guide utilisateur VII.3 Nsi_GetDeviceInfo Retourne diverses informations sur le périphérique. short Nsi_GetDeviceInfo( HANDLE hdrv, t_MISCdeviceInfo* deviceInfo ); Paramètres : hdrv : Handle du périphérique retourné par la fonction Nsi_InitDrv. Ce paramètre identifie le canal (carte) concerné par cette fonction. deviceInfo : Pointeur sur une structure t_MISCdeviceInfo. Code retour : _OK : _INVALID_OP : _PARAM_ERR : _DRV_PARAM_ERR : _USB_ERR : _BOARD_TIMEOUT: août 2013 Résultat correct. La valeur de hdrv est invalide. Paramètre invalide. Problème d'accès au pilote. Vérifier l'installation de la carte. Erreur de transmission USB. Erreur d'acquittement USB. DUT-MUX-0219 /V1.2 - 19 - Interface logicielle PC pour cartes NSI - Guide utilisateur VII.4 Nsi_GetDeviceMode (non disponible) Récupère le mode actuel du périphérique. short Nsi_GetDeviceMode( HANDLE hdrv, t_MISCdeviceMode* pMode ); Paramètres : hdrv : Handle du périphérique retourné par la fonction Nsi_InitDrv. Ce paramètre identifie le canal (carte) concerné par cette fonction. pMode: Mode du périphérique. _NORMAL : Mode normal. _LOW_POWER : Mode basse consommation. Code retour : _OK : _SEQ_ERR : _PARAM_ERR : _BOARD_ERR _INVALID_OP : _DRV_PARAM_ERR : _CHIP_ERR: _USB_ERR : _BOARD_TIMEOUT: - 20 - Configuration réussie. Séquence invalide. Paramètre invalide. Type de carte ne supportant pas cette fonction. La valeur de hdrv est invalide. Problème d'accès au pilote. Vérifier l'installation de la carte. Erreur hardware. Erreur de transmission USB. Erreur d'acquittement USB DUT-MUX-0219 /V1.2 août 2013 Interface logicielle PC pour cartes NSI - Guide utilisateur VII.5 Nsi_InitDrv Ouverture d'un canal correspondant à un périphérique détecté. Cette fonction doit être appelée avant toute autre pour accéder à un canal particulier. Il est conseillé d'utiliser la fonction Nsi_EnumCards pour déterminer les périphériques disponibles. La valeur retournée dans la variable hDrv en échange du numéro de périphérique cno permet d’identifier ce canal pour toutes les opérations suivantes. Un même canal ne peut pas être ouvert simultanément par deux applications. Un canal ouvert doit toujours être libéré après utilisation par la fonction Nsi_ExitDrv. short Nsi_InitDrv( short HANDLE* cno, hDrv ); Paramètres : cno : Index du périphérique a ouvrir. Cette valeur correspond à la position du périphérique dans le tableau retourné par la fonction Nsi_EnumCards. Le premier périphérique détecté correspond à la valeur cno = 0. hDrv : Pointeur sur une variable de type HANDLE (void*). Au retour de la fonction, cette variable est initialisée avec l'identificateur du canal. Cette valeur doit être ensuite passée à toutes les autres fonctions de l'interface pour agir sur ce canal particulier. Code retour : _OK : Canal ouvert. _INVALID_OP : La valeur cno est invalide ou le canal est déjà utilisé. _OPENING_DRV_ERR : Problème d'accès au pilote de la carte. Vérifier l'installation du pilote de périphérique. _USB_ERR : Erreur de transmission USB. _BOARD_TIMEOUT: Pas d'acquittement du périphérique USB. août 2013 DUT-MUX-0219 /V1.2 - 21 - Interface logicielle PC pour cartes NSI - Guide utilisateur VII.6 Nsi_ReadAna Permet de récupérer l'état des entrées analogiques présente sur la carte. short Nsi_ReadAna( HANDLE unsigned short ); hdrv, pAnaInputInfo[4], Paramètres : hdrv : Handle du périphérique retourné par la fonction Nsi_InitDrv. Ce paramètre identifie le canal (carte) concerné par cette fonction. pAnaInputInfo : Adresse du tableau de unsigned short. Il n'est pas nécessaire de passer un tableau de plus de 4 unsigned short. pAnaInputInfo[0] : Valeur en point ADC de la tension d’alimentation (conversion en Volt par la formule PT_ADC*5.22*0.00488=Volt ) pAnaInputInfo[1] : reserved pAnaInputInfo[2] : reserved pAnaInputInfo[3] : Valeur en point ADC de la tension présente sur le bornier de la MUXybox2 (conversion en Volt par la formule PT_ADC*5.22*0.00488=Volt ) Code retour : _OK : _SEQ_ERR : _PARAM_ERR : _BOARD_ERR _INVALID_OP : _DRV_PARAM_ERR : _CHIP_ERR: _USB_ERR : _BOARD_TIMEOUT: - 22 - Configuration réussie. Séquence invalide. Paramètre invalide. Type de carte ne supportant pas cette fonction. La valeur de hdrv est invalide. Problème d'accès au pilote. Vérifier l'installation de la carte. Erreur hardware. Erreur de transmission USB. Erreur d'acquittement USB DUT-MUX-0219 /V1.2 août 2013 Interface logicielle PC pour cartes NSI - Guide utilisateur VII.7 Nsi_ReadIo Permet de récupérer l'état d'entrées logiques présentes sur la carte. short Nsi_ReadIo( HANDLE unsigned long unsigned long hdrv, dwInputValues, reserved ); Paramètres : hdrv : Handle du périphérique retourné par la fonction Nsi_InitDrv. Ce paramètre identifie le canal (carte) concerné par cette fonction. dwInputValues : Champs de bits représentant les valeurs des entrées à lire. Bit0 (LSB) = Entrée 1 Bit1 = Entrée 2 reserved : Champs réservé. Code retour : _OK : _SEQ_ERR : _PARAM_ERR : _BOARD_ERR _INVALID_OP : _DRV_PARAM_ERR : _CHIP_ERR: _USB_ERR : _BOARD_TIMEOUT: août 2013 Configuration réussie. Séquence invalide. Paramètre invalide. Type de carte ne supportant pas cette fonction. La valeur de hdrv est invalide. Problème d'accès au pilote. Vérifier l'installation de la carte. Erreur hardware. Erreur de transmission USB. Erreur d'acquittement USB DUT-MUX-0219 /V1.2 - 23 - Interface logicielle PC pour cartes NSI - Guide utilisateur VII.8 Nsi_ReadIoEx Permet de récupérer l'état d'entrées logiques présentes sur la carte ainsi que la date de leur dernier changement d'état. short Nsi_ReadIoEx( HANDLE t_MISCinputInfo* unsigned long unsigned long hdrv, pInputInfo, dwInputInfoLen, reserved ); Paramètres : hdrv : Handle du périphérique retourné par la fonction Nsi_InitDrv. Ce paramètre identifie le canal (carte) concerné par cette fonction. pInputInfo : Adresse du tableau de structure t_MISCinputInfo. Il n'est pas nécessaire de passer un tableau de plus de NB_MAX_INPUTS (2). dwInputInputLen: Longueur du tableau pInputInfo. reserved : Champs réservé. Code retour : _OK : _SEQ_ERR : _PARAM_ERR : _BOARD_ERR _INVALID_OP : _DRV_PARAM_ERR : _CHIP_ERR: _USB_ERR : _BOARD_TIMEOUT: - 24 - Configuration réussie. Séquence invalide. Paramètre invalide. Type de carte ne supportant pas cette fonction. La valeur de hdrv est invalide. Problème d'accès au pilote. Vérifier l'installation de la carte. Erreur hardware. Erreur de transmission USB. Erreur d'acquittement USB DUT-MUX-0219 /V1.2 août 2013 Interface logicielle PC pour cartes NSI - Guide utilisateur VII.9 Nsi_SetDeviceMode (non disponible) Permet de placer le périphérique dans un mode particulier. short Nsi_SetDeviceMode( HANDLE t_MISCdeviceMode unsigned long hdrv, mode, dwParam ); Paramètres : hdrv : Handle du périphérique retourné par la fonction Nsi_InitDrv. Ce paramètre identifie le canal (carte) concerné par cette fonction. mode: Mode du périphérique. _NORMAL : Mode normal. _LOW_POWER : Mode basse consommation. Code retour : _OK : _SEQ_ERR : _PARAM_ERR : _BOARD_ERR _INVALID_OP : _DRV_PARAM_ERR : _CHIP_ERR: _USB_ERR : _BOARD_TIMEOUT: août 2013 Configuration réussie. Séquence invalide. Paramètre invalide. Type de carte ne supportant pas cette fonction. La valeur de hdrv est invalide. Problème d'accès au pilote. Vérifier l'installation de la carte. Erreur hardware. Erreur de transmission USB. Erreur d'acquittement USB DUT-MUX-0219 /V1.2 - 25 - Interface logicielle PC pour cartes NSI - Guide utilisateur VII.10 Nsi_WriteIo Permet de positionner l'état de sorties logiques présentes sur la carte. short Nsi_WriteIo( HANDLE unsigned long unsigned long hdrv, dwOutputValues, reserved ); Paramètres : hdrv : Handle du périphérique retourné par la fonction Nsi_InitDrv. Ce paramètre identifie le canal (carte) concerné par cette fonction. dwOutputValues : Champs de bits représentant les valeurs des sorties à positionner. Bit0 (LSB) = Sortie 1 Bit1 = Sortie 2 reserved : Champs réservé. Code retour : _OK : _SEQ_ERR : _PARAM_ERR : _BOARD_ERR _INVALID_OP : _DRV_PARAM_ERR : _CHIP_ERR: _USB_ERR : _BOARD_TIMEOUT: - 26 - Configuration réussie. Séquence invalide. Paramètre invalide. Type de carte ne supportant pas cette fonction. La valeur de hdrv est invalide. Problème d'accès au pilote. Vérifier l'installation de la carte. Erreur hardware. Erreur de transmission USB. Erreur d'acquittement USB DUT-MUX-0219 /V1.2 août 2013 Interface logicielle PC pour cartes NSI - Guide utilisateur VIII. Trucs et astuces VIII.1 Dépanner une application La fonction Nsi_InitDrv ne fonctionne pas : Il est impossible d'obtenir le HANDLE d'un canal : Appeler la fonction Nsi_EnumCards pour connaître le nombre de canaux disponibles et vérifier que le canal désiré (cno) n'est pas déjà utilisé. Vérifier que la carte est correctement installée dans le Gestionnaire des Périphériques. VIII.2 Utiliser un compilateur non Microsoft VIII.2.1 Linkage de l’application avec la DLL NSIMISC Le fichier NSIMISC.LIB permet à l’outil de développement de lier l’application avec le fichier NSIMISC.DLL. Ce fichier est spécifique au compilateur Microsoft qui a servi à réaliser le fichier DLL. Il n’est pas compatible avec d’autres environnements de développement. Voici différentes solutions à ce problème : 1. Utiliser le fichier DEF ou DLL à la place du fichier LIB dans le projet. Ceci est possible avec les outils C++ Borland ou Labview. 2. Régénérer le fichier LIB à partir du fichier DLL ou du fichier DEF grâce à un utilitaire livré avec l’outil de développement utilisé. Exemple : Les outils Borland C++ sont livrés avec un programme IMPLIB.EXE qui permet de générer un fichier LIB au format Borland à partir du fichier NSIMISC.DEF. 3. Obtenir les points d’entrée des fonctions de la DLL par la fonction GetProcAddress. Celle-ci retourne un pointeur sur chaque fonction de la DLL à partir de son nom. Dans ce cas, le fichier MISCPRO.H doit être modifié. VIII.2.2 Alignement des structures de données Les directives de compilation d’alignement des structures de données et de convention d’appel des fonctions sont spécifiques aux compilateurs Microsoft. Il faut les modifier en fonction du compilateur utilisé. Alignement des structures sur 2 octets dans le fichier MISCDEF.H. Si cet alignement n’est pas respecté, l’interface est inutilisable. Le choix de cet alignement peut être spécifié par une option générale du compilateur ou par une directive de compilation dans le code (recommandé) : août 2013 DUT-MUX-0219 /V1.2 - 27 - Interface logicielle PC pour cartes NSI - Guide utilisateur Microsoft : #pragma pack(push,2) // Définition des structures #pragma pack(pop) Borland : #pragma option –a2 // Définition des structures #pragma option –a- Note : Afin d’aligner les types énumérés (enum) sur des int il est aussi nécessaire sous Borland d’ajouter la directive de compilation suivante : #pragma option –b Déclaration des fonctions de l’interface comme étant importées d’une DLL avec la convention d’appel Microsoft standard (stdcall). Cette déclaration est faite par le symbole _MISCAPI défini dans le fichier MISCPRO.H : Microsoft #define _MISCAPI __declspec(dllimport) __stdcall Borland : #define _MISCAPI _import _stdcall - 28 - DUT-MUX-0219 /V1.2 août 2013 Interface logicielle PC pour cartes NSI - Guide utilisateur IX. Installation de l'interface logicielle L’installation de l’interface logicielle permet au système de configurer la ou les cartes à utiliser et de recopier les fichiers du pilote et de la DLL sur le disque dur du PC. L’installation doit être effectuée dans les deux cas suivants : 1. Première installation de l’interface sur un PC. Si la carte est déjà utilisée par une autre application ou une version précédente de l’interface logicielle, celle-ci doit être désinstallée avant de poursuivre. 2. Installation d’une nouvelle carte NSI. L’interface logicielle est capable de gérer plusieurs cartes de types différents dans un même PC. Cette annexe permet d’effectuer les installations des cartes suivantes : - MUXy box pour les systèmes suivants : - Windows 98, Me, - Windows 2000, XP. Les chemins des répertoires indiqués dans la procédure d’installation de chaque carte pour chaque système sont relatifs au répertoire \Pilotes PC – PC drivers du CD-ROM. août 2013 DUT-MUX-0219 /V1.2 - 29 - Interface logicielle PC pour cartes NSI - Guide utilisateur IX.1 Installer un périphérique USB Pour installer l’interface logicielle pour la première fois avec un périphérique USB, il faut suivre la procédure décrite dans ce paragraphe. L’installation dépend du système d’exploitation utilisé. Se reporter au paragraphe correspondant. ● Fermer toutes les applications en cours. ● Brancher le câble USB entre le PC et le périphérique. IX.1.1 Sous Windows 98/Me Windows indique qu'il vient de détecter un nouveau périphérique USB. L'assistant d'installation de nouveau périphérique démarre. Insérer le CD-ROM « CD Livraison NSI » dans le lecteur du PC. Cliquer sur le bouton Suivant. Sélectionner l'option "Rechercher le meilleur pilote…". La fenêtre suivante apparaît : Cocher uniquement la ligne "Définir un emplacement" et cliquer sur le bouton Parcourir Sélectionner le répertoire MISCPC2000\Win9x puis cliquer sur Suivant. Windows cherche et indique qu'il a trouvé le pilote USB. Cliquer sur Suivant. Windows copie les fichiers sur le disque dur puis indique qu'il a terminé l'installation. Cliquer sur Terminer. Windows peut demander de redémarrer le PC, accepter. L'interface logicielle est prête à être utilisée. Vérifier que la carte fonctionne en démarrant le programme MISCTEST.EXE qui est dans le répertoire MISCPC2000\Test du CD-ROM. En cas de problème, consulter le paragraphe «Dépannage de l’installation». - 30 - DUT-MUX-0219 /V1.2 août 2013 Interface logicielle PC pour cartes NSI - Guide utilisateur IX.1.2 Sous Windows 2000 Windows indique qu'il vient de détecter un nouveau périphérique USB. L'assistant d'installation de nouveau périphérique démarre. Cliquer sur le bouton "Suivant". Sélectionner l'option "Rechercher un pilote approprié pour mon périphérique". Cocher uniquement la ligne "Emplacement spécifique" puis cliquer sur Suivant. Sélectionner le bouton Parcourir et sélectionner le répertoire MISCPC2000\Win2k. Cliquer sur Ok. Windows 2000 recherche le pilote et indique qu'il a trouvé un pilote pour le périphérique. Cliquer sur Suivant. Windows 2000 recopie les fichiers du pilote sur le disque dur. Lorsque la copie est finie, cliquer sur Terminer. L'interface logicielle est prête à être utilisée. Vérifier que la carte fonctionne en démarrant le programme MISCTEST.EXE qui est dans le répertoire MISCPC2000\Test du CD-ROM. En cas de problème, consulter le paragraphe «Dépannage de l’installation». août 2013 DUT-MUX-0219 /V1.2 - 31 - Interface logicielle PC pour cartes NSI - Guide utilisateur IX.1.3 Sous Windows XP Windows indique qu'il vient de détecter un nouveau périphérique USB. L'assistant d'installation de nouveau périphérique démarre. La fenêtre suivante apparaît : Sélectionner l'option "Installer à partir d'une liste ou d'un emplacement spécifié". Cliquer sur Suivant. Sélectionner l'option "Rechercher le meilleur pilote dans ces emplacements". Insérer le CD-ROM « CD Livraison NSI » dans le lecteur du PC et cliquer sur Parcourir Sélectionner le répertoire MISCPC2000\Win2k du CD-ROM d'installation. Cliquer sur Suivant. Windows cherche et indique qu'il a trouvé le pilote USB pour le périphérique. Cliquer sur Suivant. Windows copie les fichiers sur le disque dur puis indique qu'il a terminé l'installation. Cliquer sur Terminer. L'interface logicielle est prête à être utilisée. Vérifier que la carte fonctionne en démarrant le programme MISCTEST.EXE qui est dans le répertoire MISCPC2000\Test du CD-ROM. En cas de problème, consulter le paragraphe «Dépannage de l’installation». - 32 - DUT-MUX-0219 /V1.2 août 2013 Interface logicielle PC pour cartes NSI - Guide utilisateur IX.2 Dépannage de l’installation Win9x, Me, 2k, XP: Windows ne détecte pas la carte au démarrage Vérifier dans le gestionnaire de périphériques que Windows ne détecte pas de conflit de ressources. Dans ce cas, résoudre les conflits et éventuellement désinstaller des périphériques non utilisés. Redémarrer le PC. Ou Lancer l'installation de nouveau périphérique à partir du Panneau de Configuration. Ou Vérifier que les pilotes sont dans les répertoires appropriés. Dans le cas contraire, recommencer l’installation de l’interface: Windows 98, Me : MUXy box NSIU2KBO.SYS dans Windows\System32\Drivers Windows 2000 : MUXy box NSIU2KBO.SYS dans WinNT \System32\Drivers Windows XP : MUXy box NSIU2KBO.SYS dans Windows\System32\Drivers Win9x, Me, 2k, XP: La carte est signalée en erreur dans le gestionnaire de périphériques Cliquer sur l'icône de la carte dans le Gestionnaire de Périphériques puis cliquer sur Supprimer. Eteindre complètement le PC puis redémarrer. La détection d'un nouveau périphérique est signalée. Fournir de nouveau les pilotes si Windows le demande. août 2013 DUT-MUX-0219 /V1.2 - 33 - Interface logicielle PC pour cartes NSI - Guide utilisateur X. Désinstallation de l’interface logicielle X.1 Windows 95/98/Me Fermer toutes les applications en cours… Double cliquer sur les icônes suivantes : 1. Poste de Travail 2. Panneau de Configuration 3. Système Cliquer sur l'onglet Gestionnaire de Périphériques Double cliquer sur NSI. Sélectionner la ligne de la carte NSI. Cliquer sur le bouton Supprimer. Répéter l’opération pour toutes les cartes installées. Fermer le Gestionnaire de Périphériques Ouvrir l’Explorateur Windows Supprimer les fichiers suivants : dans le répertoire \Windows\System NSIMISC.DLL dans le répertoire \Windows\System32\Drivers NSIU2KBO.SYS (MUXy box) dans le répertoire \Windows\Inf\Other (Attention : ce répertoire peut être caché) NSIU2KBO.SYS (MUXy box) Redémarrer le système. - 34 - DUT-MUX-0219 /V1.2 août 2013 Interface logicielle PC pour cartes NSI - Guide utilisateur X.2 Windows 2000 Fermer toutes les applications en cours… Double cliquer sur les icônes suivantes : 1. Poste de Travail 2. Panneau de Configuration 3. Système Cliquer sur l'onglet Matériel puis sur le bouton Gestionnaire de Périphériques. Double cliquer sur NSI. Sélectionner la ligne de la carte NSI Dans le menu Action, cliquer sur Désinstaller. Confirmer la suppression de ce périphérique. Répéter l’opération pour toutes les cartes installées. Fermer le Gestionnaire de Périphériques Ouvrir l’Explorateur Windows Supprimer les fichiers suivants : dans le répertoire \WinNT\System32 NSIMISC.DLL. dans le répertoire \WinNT\System32\Drivers NSIU2KBO.SYS (MUXy box) X.3 Windows XP Fermer toutes les applications en cours… Ouvrir le menu Démarrer et cliquer sur les icônes suivantes : 1. Panneau de Configuration 2. Système Cliquer sur l'onglet Matériel puis sur le bouton Gestionnaire de Périphériques. Double cliquer sur NSI. Sélectionner la ligne de la carte NSI Dans le menu Action, cliquer sur Désinstaller. Confirmer la suppression de ce périphérique. Répéter l’opération pour toutes les cartes installées. Fermer le Gestionnaire de Périphériques Ouvrir l’Explorateur Windows et supprimer les fichiers suivants : dans le répertoire \Windows\System32 NSIMISC.DLL. dans le répertoire \Windows\System32\Drivers NSIU2KBO.SYS (MUXy) août 2013 DUT-MUX-0219 /V1.2 - 35 - Interface logicielle PC pour cartes NSI - Guide utilisateur XI. ANNEXE : Prototypes des Fonctions short Nsi_ConfigEvent( HANDLE HANDLE unsigned long hDrv, hEvent, ident ); unsigned long* t_CardData* unsigned long cardcnt, carddata, carddatasz ); short Nsi_ExitDrv( HANDLE hdrv ); short Nsi_GetAPIinfo( HANDLE short* short* unsigned long* hdrv, DLLversion, DRVversion, reserved ); short Nsi_GetDeviceInfo( HANDLE hdrv, t_MISCdeviceInfo* deviceInfo ); HANDLE hdrv, t_MISCdeviceMode* pMode ); short HANDLE* cno, hdrv ); short Nsi_ReadIo( HANDLE unsigned long unsigned long hdrv, dwInputValues, reserved ); short Nsi_ReadIoEx( HANDLE t_MISCinputInfo* unsigned long unsigned long hdrv, pInputInfo, dwInputInfoLen, reserved ); short Nsi_SetDeviceMode( HANDLE t_MISCdeviceMode unsigned long hdrv, mode, dwParam HANDLE unsigned long unsigned long hdrv, dwOutputValues, reserved ); short Nsi_EnumCards( short Nsi_GetDeviceMode( short Nsi_InitDrv( short Nsi_WriteIo( - 36 - DUT-MUX-0219 /V1.2 ); août 2013 Interface logicielle PC pour cartes NSI - Guide utilisateur XII. Annexe : Fonctions de l'API Win32 L'interface Win32 est une API (Application Programming Interface) développée par Microsoft pour ses systèmes d'exploitation 32 bits: Windows NT et Windows 95 / 98. L'API Win32 permet de réaliser des applications capables de fonctionner sous tous les systèmes implémentant l'interface Win32. L'API Win32 est dite "Multi Thread". Qu'est ce qu'un "Thread" ? En terme de code, un "Thread" est simplement une séquence de code qui est exécutée par le système d'exploitation dans le contexte d'un processus (généralement une application). Un processus débute son exécution par son Thread principal qui, dans un programme C traditionnel, est la fonction main( ). Une fois démarré, le programme peut créer de nouveaux "Threads" en effectuant un appel système spécifiant l'adresse de la fonction initiale du nouveau "Thread". Le système d'exploitation fait basculer le contrôle du processeur entre les Threads de manière préemptive pour donner l'impression que les Threads s'exécutent en parallèle et de manière asynchrone. Les fonctions Win32 à connaître hEvent = CreateEvent( &sa, fManual, fInitial, pszName ) Création d'un événement. Un événement peut avoir deux états : "signalé" ou "non signalé". Les paramètres sa et pszName ne sont significatifs que lorsque les événements sont partagés entre des processus. Dans un processus unique, ces paramètres sont définis à NULL. Le paramètre fInitial indique si l'événement sera "signalé" (fInitial =TRUE) ou "non signalé" (fInitial = FALSE) à sa création. Le paramètre fManual indique si l'événement est repassé automatiquement (fManual = FALSE) à l'état "non signalé" par la fonction WaitForSingleObject ou s'il est géré initialisé par une application (fManual =TRUE). hEvent est l'identificateur de l'événement crée. WaitForSingleObject( hEvent, dwTimeOut ) Mise en attente du Thread qui appelle cette fonction de l'occurrence d'un événement . Le paramètre hEvent indique le Handle de l'événement attendu. Le paramètre dwTimeOut précise le temps d'attente maximal. Si l'événement est "signalé", la fonction retourne aussitôt sinon elle suspend le Thread jusqu'à ce que l'événement devienne "signalé". dwTimeOut peut être égal à une valeur en millisecondes de façon à ce que la fonction retourne à la fin de ce délai dans le cas où l'événement reste "non signalé". Quand dwTimeOut est égal à INFINITE, le Thread reprend son cours uniquement lorsque l'événement est signalé. hThread = CreateThread( fdwCreate, lpIDThread ) lpsa, cbStack, lpStartAddr, lpvThreadParm, Cette fonction crée un nouveau Thread. Le paramètre lpsa est un pointeur sur une structure SECURITY_ATTRIBUTES. La valeur NULL permet d'utiliser les attribut par défaut. Le paramètre cbStack définit la quantité d'espace d'adressage que le thread est autorisé à employer pour sa propre pile. La valeur 0 crée une pile de 1Mo par défaut. Le paramètre août 2013 DUT-MUX-0219 /V1.2 - 37 - Interface logicielle PC pour cartes NSI - Guide utilisateur lpStartAddr indique l'adresse de la fonction que le nouveau Thread doit exécuter. Le paramètre lpvThreadParm est passé à la fonction lorsque le thread commence son exécution. Le paramètre fdwCreate spécifie des options additionnelles contrôlant la création du thread. Si cette valeur est 0, le thread commence son exécution immédiatement. HThread est l'identificateur du thread crée. Le paramètre lpIDThread est une adresse valide où sera enregistré l'ID que le système affecte au nouveau thread. TerminateThread( hThread, dwExitcode ) Cette fonction termine le Thread identifié par le paramètre hThread et place le code de sortie à la valeur dwExitCode. Cette fonction permet aussi de terminer un Thread s'il ne répond plus aux commandes. Attention, cette fonction est dangereuse pour la stabilité du système d'exploitation et ne doit être utilisée que dans les cas les plus extrême. Il est nécessaire de bien contrôler que le Thread qui doit être terminé ne fait plus aucun appel au pilote du périphérique. CloseHandle( handle ) Cette fonction permet la fermeture d'un objet (Ex: un événement). Le paramètre handle est l'identificateur de l'objet à fermer. Remarque : Le HANDLE hdrv retourné par la fonction Nsi_InitDrv ne doit pas être fermé par l'application. Il faut appeler la fonction Nsi_ExitDrv. - 38 - DUT-MUX-0219 /V1.2 août 2013 Interface logicielle PC pour cartes NSI - Guide utilisateur XIII. Annexe : Programme d'exemple Ce programme est donné à titre d'exemple. Il a été écrit en langage C et compilé avec l'outil Developper Studio de Microsoft. Les conséquences de toute erreur ou mauvais fonctionnement de ce programme ne sauraient mettre en cause la responsabilité de la société NSI. La totalité de ce programme d'exemple est fourni sur le CD-ROM de livraison de l'interface logicielle dans le répertoire MISCPC2000\Samples. MISCTEST.C Ce programme montre comment accéder à un périphérique pour récupérer les informations sur ce dernier ou encore effectuer d'autres fonctionnalités propres au périphérique. Les fonctions retournant des chaînes de caractères traduisant les codes utilisés par l'interface sont fournis dans le s fichiers ECHOMISC.C ECHOMISC.H Pour faciliter la compréhension du code, tous les cas d'erreurs possibles ne sont pas traités. L'appel de chaque fonction est suivi de l'affichage des paramètres et du code retourné. XIII.1 Déclarations Dans cette partie du programme, on déclare les prototypes des fonctions de l'interface logicielle puis on crée les ressources systèmes nécessaires au fonctionnement de l'interface. #include <windows.h> #include <conio.h> #include <stdio.h> // Inclusion des fichiers de déclaration des structures // et des fonctions de l'interface. // #include "miscdef.h" #include "miscpro.h" // Prototypes des fonctions du programme d'exemple // #include "miscdemo.h" // Fonctions d'affichage // #include "echomisc.c" #include "echomisc.h" // Variables globales // -----------------// // Handle du canal ouvert HANDLE hDevice = INVALID_HANDLE_VALUE; août 2013 DUT-MUX-0219 /V1.2 - 39 - Interface logicielle PC pour cartes NSI - Guide utilisateur // MAIN( ) //----------// Fonction principale du programme d'exemple. // void main( void ) { // Variables internes diverses int i; short cr; BOOL done = FALSE; short canal; char key[2]; short DLL,DRV; t_MISCdeviceMode mode; t_MISCdeviceInfo tDeviceInfo; unsigned long cardCount; unsigned long values; //Pour la gestion des Entrees/Sorties //Pour la gestion avancee des Entrees/Sorties t_MISCinputInfo InputsInfo[NB_MAX_INPUTS]; // Variables de contrôle du Thread DWORD threadId; HANDLE hThread; // Tableau pour recevoir la configuration des canaux t_CardData cardData[10]; XIII.2 Initialisations Cette partie du programme choisit un périphérique disponible et l'initialiser. // Nsi_EnumCards // -----------// Lorsque plusieurs peripheriques sont disponibles dans un même // PC, il est utile de connaître les particularités de chaque // peripherique pour choisir lequel utiliser. Cette fonction retourne // la liste des peripheriques utilisables dans un tableau. L'indice // du tableau correspond au numéro du peripherique. // cr = Nsi_EnumCards( &cardCount, cardData, sizeof( cardData )); printf( "Nsi_EnumCards : %s\n", GetCodeString( cr ) ); if( cr != _OK ) { printf(" Failed to get device list.\n" ); getch( ); return; } - 40 - DUT-MUX-0219 /V1.2 août 2013 Interface logicielle PC pour cartes NSI - Guide utilisateur // Affiche la liste des cartes et trouve la premiere disponible. // L'index de ce peripherique est placé dans la variable "device". // Sinon –1 ce qui indique aucun peripherique libre. // printf( " Detected devices : %d\n", cardCount ); device = -1; for( i=0; i<(int)cardCount; i++ ) { printf(" %d – IO:% 3xh IRQ:%d %s (%d)\n", i, cardData[i].IOBaseAddress, cardData[i].IRQLineNumber, cardData[i].cardNameString, cardData[i].cardAlreadyOpen ); // Trouve le premier peripherique disponible cad non utilisé au même // moment par une autre application. // if( device == -1 && cardData[i].cardAlreadyOpen == FALSE ) { device = i; } } // Vérifie qu'au moins un peripherique est disponible if( device < 0 ) { printf(" MISCTEST needs at least one available device…\n" ); getch( ); return; } // Nsi_InitDrv // ---------// Selectionne et initialise un peripherique. La valeur du // premier paramètre indique l'indice du peripherique que l'on // veut utiliser. Celui-ci correspond à l'indice dans le tableau // retourné par Nsi_EnumCards. Un "Handle" est retourné dans la // variable "hDevice". Cette valeur identifie ce peripherique. Elle // est passée à toutes les autres fonctions de l'interface logicielle. // cr = Nsi_InitDrv( (short)canal, &hDevice ); printf( "Nsi_InitDrv( %d,%08Xh ) : %s\n", device, hDevice, GetCodeString( cr )); if( cr != _OK ) { printf(" Unable to select device #%d.\n", canal ); getch( ); return; } août 2013 DUT-MUX-0219 /V1.2 - 41 - Interface logicielle PC pour cartes NSI - Guide utilisateur // // // // // cr Nsi_GetAPIinfo --------------Retourne le type de la carte du canal initialisé et les version des fichiers de l'interface logicielle. = Nsi_GetAPIinfo( hDevice, &DLL, &DRV ); printf("Nsi_GetAPIinfo : %s (%s,Dll:%.2f,Drv:%.2f)\n", GetCodeString(cr), DLL / 100.0, DRV / 100.0 ); if( cr != _OK ) done = TRUE; // GetDeviceInfo // --------------// Retourne les informations sur la carte du canal initialisé et la // version du logiciel embarqué. // cr = Nsi_GetDeviceInfo( hdrv, &tDeviceInfo ); printf( "Nsi_GetDeviceInfo:\t%s (Fw:%.2f, Hw:%.2f )\n", GetCodeString(cr), tDeviceInfo.USB.firmwareVersion/100.0, tDeviceInfo.USB.hardwareVersion/100.0); - 42 - DUT-MUX-0219 /V1.2 août 2013 Interface logicielle PC pour cartes NSI - Guide utilisateur XIII.3 Gestion des Entrées/Sorties Cette partie du programme permet de gérer les Entrées/Sorties d'un périphérique. // Nsi_ReadIo // ---------// Lecture de la valeur des entrées logiques d'un périphérique. // La signification de la valeur retournée par la fonction est // décrite dans le manuel utilisateur de la carte concernée // cr = Nsi_ReadIo( hdrv, &values, 0 ); printf("Nsi_ReadIo:\t\t%s : Inputs=%08d\n",GetCodeString(cr), values); // Nsi_ReadIoEx // -----------// Lecture de la valeur des entrées logiques d'un périphérique et de // la date de leur dernier changement d'état. // cr = Nsi_ReadIoEx( hdrv, InputsInfo, sizeof(InputsInfo), 0 ); printf("Nsi_ReadIoEx:\t\t%s : Input1=%d, LastChange=%08d\n Input2=%d, LastChange=%08d\n ", GetCodeString(cr), tInputInfo[0].InputValue, tInputInfo[0].InputChange, tInputInfo[1].InputValue, tInputInfo[1].InputChange); // Nsi_WriteIo // ---------// Ecriture de la valeur des sorties logiques d'un périphérique // La signification de la valeur passée a la fonction est // décrite dans le manuel utilisateur de la carte concernée // cr = Nsi_WriteIo( hdrv, values, 0 ); printf("Nsi_WriteIo:\t\t%s : Outputs=%08d\n",GetCodeString(cr), values); août 2013 DUT-MUX-0219 /V1.2 - 43 - Interface logicielle PC pour cartes NSI - Guide utilisateur XIII.4 Gestion des modes de fonctionnement Cette partie du programme permet de gérer les différents modes d'un périphérique. Elle est valable uniquement pour les périphériques de type MUXy box. Les fonctions de gestion des modes retournerons _BOARD_ERR si elles sont appelés pour d'autres périphériques. // Nsi_SetDeviceMode // ----------------// Demande au périphérique de se placer dans un mode particulier // cr = Nsi_SetDeviceMode( hdrv, _MODE_LOW_POWER, 0 ); printf("Nsi_SetDeviceMode:\t%s : Mode=LOW_POWER\n",GetCodeString(cr)); // Nsi_GetDeviceMode // ----------------// Récupération du mode dans lequel est le périphérique // cr = Nsi_GetDeviceMode( hdrv, &mode ); printf(" Nsi_GetDeviceMode:\t%s : Mode=%s\n", GetCodeString(cr), GetModeString(mode) ); - 44 - DUT-MUX-0219 /V1.2 août 2013 Interface logicielle PC pour cartes NSI - Guide utilisateur XIII.5 Arrêt du programme Cette partie du programme est exécutée lorsque l'utilisateur presse sur la touche ESC. On doit alors refermer le périphérique utilisé puis libérer les ressources système utilisées. Ceci comprend le Thread de réception qui est arrêté (voir le code de ce Thread ci dessous). // Nsi_ExitDrv // ---------// Ferme le handle du canal et libère le canal pour que d'autres // applications puissent l'utiliser // cr = Nsi_ExitDrv( hDevice ); printf( "Nsi_ExitDrv : %s\n", GetCodeString(cr)); if( hDevice ) CloseHandle( hDevice ); puts(" Done : Press Key…"); getch( ); // Fin du programme principal août 2013 DUT-MUX-0219 /V1.2 - 45 - Interface logicielle PC pour cartes NSI - Guide utilisateur Historique Version Auteur 1.0 Cédric Rousset 1.1 Cédric Rousset 1.2 E.Pennamen - 46 - Date Modifications 10-03-04 Version initiale 14-12-05 Ajout de la fonction Nsi_ReadIoEx. 04-02-13 Ajout de la fonction Nsi_ReadAna DUT-MUX-0219 /V1.2 août 2013