Communiquer avec module USB RFID (ACR 122 et autres)
-
- Messages : 67
- Inscription : mer. 27/sept./2006 12:45
Re: Communiquer avec module USB RFID ACR 122?
Je dois avouer que je ne suis pas très fort dans l'usage des DLL. J'ai regardé le paquet de cette API et le fichier "readme" indique que cette api concerne les interfaces suivantes :
CTN1=ACR38U-CCID
CTN2=ACR128U
La mienne est une ACR122U. Je ne suis donc pas certain de son bon fonctionnement (la démo fournie avec ne fonctionne d'ailleurs pas avec mon interface (avec ou sans carte)).
Je précise que je suis débutant en ce qui concerne l'utilisation d'un Wrapper ou d'une DLL.
Je dois avouer que j'ai du mal à savoir comment faire à partir des infos obtenues sur msdn ou de codes en divers langages pour retranscrire cela sous Purebasic. Mais j'ai soif de comprendre et d'apprendre.
N'auriez vous pas un ou plusieurs liens sur des discussions expliquant comment utiliser une dll à partir de purebasic (j'ai regarde les tutos, mais rien là-dessus)?
CTN1=ACR38U-CCID
CTN2=ACR128U
La mienne est une ACR122U. Je ne suis donc pas certain de son bon fonctionnement (la démo fournie avec ne fonctionne d'ailleurs pas avec mon interface (avec ou sans carte)).
Je précise que je suis débutant en ce qui concerne l'utilisation d'un Wrapper ou d'une DLL.
Je dois avouer que j'ai du mal à savoir comment faire à partir des infos obtenues sur msdn ou de codes en divers langages pour retranscrire cela sous Purebasic. Mais j'ai soif de comprendre et d'apprendre.
N'auriez vous pas un ou plusieurs liens sur des discussions expliquant comment utiliser une dll à partir de purebasic (j'ai regarde les tutos, mais rien là-dessus)?
Re: Communiquer avec module USB RFID ACR 122?
une dll c'est un ensemble de procedures
on les creer comme ça en Purebasic (extrait de la doc )
a compiler avec le nom "PureBasic.dll"
et le commutateur de compilation sur DLL
et on l'utilise comme ça :
pour les Dll fait a partir du C ou c++ c'est pareille pour l'appel
la seule inconnue c'est de connaitre le nom des fonctions , et leur parametres (notamment leur nombre) !
une doc avec la Dll est bienvenu bien sur
sinon, il existe des outils pour voir le nom des fonctions a l'interieur de la DLL
(mais j'ai oublié leur noms.... vu que je ne m'en sert pas)
on les creer comme ça en Purebasic (extrait de la doc )
a compiler avec le nom "PureBasic.dll"
et le commutateur de compilation sur DLL
Code : Tout sélectionner
; Créer et enregistrer ce fichier sous le nom 'PureBasic.pb'
; La DLL 'PureBasic.dll' sera créée.
ProcedureDLL MaFonction()
MessageRequester("Bonjour", "Voici une DLL PureBasic !", 0)
EndProcedure
et on l'utilise comme ça :
Code : Tout sélectionner
; Créer un deuxième fichier PureBasic avec le code suivant:
; Voici le programme client qui utilise la DLL
; Compiler et executer ce programme dans le dossier
; contenant la dll 'PureBasic.dll'.
If OpenLibrary(0, "PureBasic.dll")
CallFunction(0, "MaFonction")
CloseLibrary(0)
pour les Dll fait a partir du C ou c++ c'est pareille pour l'appel
la seule inconnue c'est de connaitre le nom des fonctions , et leur parametres (notamment leur nombre) !
une doc avec la Dll est bienvenu bien sur
sinon, il existe des outils pour voir le nom des fonctions a l'interieur de la DLL
(mais j'ai oublié leur noms.... vu que je ne m'en sert pas)
-
- Messages : 67
- Inscription : mer. 27/sept./2006 12:45
Re: Communiquer avec module USB RFID ACR 122?
Merci de tes éclaircissements.
Je vais donc essayer de transposer cela par rapport à mon besoin :
J'utilise la winscard.dll (objet du wrapper présenté précédemment).
J'ai la fonction SCardListReaders Que l'on retrouve expliquée sur le site de microsoft (MSDN):
https://msdn.microsoft.com/en-us/librar ... s.85).aspx
On y lit que SCardListReaders est décrite avec ses paramètres en syntaxe C++:
Chaque paramètre est expliqué.
Retour dans Purebasic avec cette description :
Je dispose d'un wrapper de la winscard.dll . Dans celle-ci, la fonction SCardListReaders est représentée par une procédure simple (et non Dll) :
A te lire, ça parait plus simple d'utiliser une procédure DLL (nonobstant les histoires de pointeurs (où j'ai également du recyclage à faire
))
Dans mon cas, il est plus judicieux de travailler avec le wrapper ou avec une procédure DLL?
Je vais donc essayer de transposer cela par rapport à mon besoin :
J'utilise la winscard.dll (objet du wrapper présenté précédemment).
J'ai la fonction SCardListReaders Que l'on retrouve expliquée sur le site de microsoft (MSDN):
https://msdn.microsoft.com/en-us/librar ... s.85).aspx
On y lit que SCardListReaders est décrite avec ses paramètres en syntaxe C++:
Code : Tout sélectionner
C++
LONG WINAPI SCardListReaders(
_In_ SCARDCONTEXT hContext,
_In_opt_ LPCTSTR mszGroups,
_Out_ LPTSTR mszReaders,
_Inout_ LPDWORD pcchReaders
);
Retour dans Purebasic avec cette description :
Je dispose d'un wrapper de la winscard.dll . Dans celle-ci, la fonction SCardListReaders est représentée par une procédure simple (et non Dll) :
Code : Tout sélectionner
Procedure.l sSCardListReaders(self.l, a.l, b.l, c.l, d.l)
ProcedureReturn CallFunctionFast(fSCardListReaders, a, b, c, d)
EndProcedure

Dans mon cas, il est plus judicieux de travailler avec le wrapper ou avec une procédure DLL?
Dernière modification par totorcalais le jeu. 27/oct./2016 14:20, modifié 1 fois.
Re: Communiquer avec module USB RFID ACR 122?
En général, c'est plus simple que ça en a l'air. Dans l'include et dans le chm il y a un petit exemple... Mais en regardant un peu plus en détail, ainsi que quelques questions/réponses sur le net, je crois quand même que ça ne va pas être de la tarte !
A noter que dans ton code, les valeurs retournées semblent incorrectes. Peut-être est-ce dû à l'unicode ou des procedures qui devraient être des "ProcedureC".
A noter que dans ton code, les valeurs retournées semblent incorrectes. Peut-être est-ce dû à l'unicode ou des procedures qui devraient être des "ProcedureC".
-
- Messages : 67
- Inscription : mer. 27/sept./2006 12:45
Re: Communiquer avec module USB RFID ACR 122?
J'ai utilisé une procédure de conversion en ascII et en effet, le code chinois (ou autre) devient :
IL détecte bien le lecteur de carte ACS ACR1 qui, dans le logiciel fourni avec est un ACS ACR122 0.
Il y a donc le début. Et c'est un début
(on se contente de peu)
Code : Tout sélectionner
dll ok
Scard : : 0 hCTX: FFFFFFFFCD010000
Reader : 0 buffer: ACS ACR1
Connect : valeur A : FFFFFFFF80100009
Status : valeur A : 6 : valeur S : 0 : valeur AP : 0 : valeur ATRL : 0 : valeur ATR : 0
Disconnect : valeur A : 6
Connect : valeur A : FFFFFFFF80100009
Status : valeur A : 6 : valeur S : 0 : valeur AP : 0 : valeur ATRL : 0 : valeur ATR : 0
Transmit : valeur A : 6 : valeur OUT,Outl : 00000000000000000000 : valeur Outl : A
Transmit : valeur A : 6 : valeur OUT,Outl : 00000000000000000000 : valeur Outl : A
Transmit : valeur A : 6 : valeur OUT,Outl : 00000000000000000000 : valeur Outl : A
Transmit : valeur A : 6 : valeur OUT,Outl : 00000000000000000000 : valeur Outl : A
Transmit : valeur A : 6 : valeur OUT,Outl : 00000000000000000000 : valeur Outl : A
Transmit : valeur A : 6 : valeur OUT,Outl : 00000000000000000000 : valeur Outl : A
Transmit : valeur A : 6 : valeur OUT,Outl : 00000000000000000000 : valeur Outl : A
Transmit : valeur A : 6 : valeur OUT,Outl : 00000000000000000000 : valeur Outl : A
Transmit : valeur A : 6 : valeur OUT,Outl : 00000000000000000000 : valeur Outl : A
Transmit : valeur A : 6 : valeur OUT,Outl : 00000000000000000000 : valeur Outl : A
Il y a donc le début. Et c'est un début

Re: Communiquer avec module USB RFID ACR 122?
Si on utilise l'api fourni avec le lecteur, essaie ceci:
Télécharge l'api et dézippe
http://www.acs.com.hk/download-driver-u ... 1001-P.zip
Commence par lire le petit chm car il y a une histoire de fichier ini à créer qui n'est pas très clair.
Dans le dossier lib\x86 ou lib\x64, crée le fichier ctacs.ini avec ceci à l'intérieur:
C'est l'importation des fonctions de la dll
(En fait, je me suis compliqué inutilement la tache, j'aurais pu utiliser la fonction Import ou ImportC de PB ce qui aurait donné ce code:
fin de la parenthèse)
Crée un fichier Test.pb, qui est la traduction du code c en pb du chm
Il faut que tous les fichiers le .pb, le .pbi, le .ini et la dll, la .lib soient dans le même dossier.
Ça devrait fonctionner en x64 comme en x86
Si ça donne du chinois, c'est une histoire d'unicode/ascii
Lance Test.pb
Ça donne quelque chose ?
[Edition] J'ai corrigé le .pbi
Mesa.
Télécharge l'api et dézippe
http://www.acs.com.hk/download-driver-u ... 1001-P.zip
Commence par lire le petit chm car il y a une histoire de fichier ini à créer qui n'est pas très clair.
Dans le dossier lib\x86 ou lib\x64, crée le fichier ctacs.ini avec ceci à l'intérieur:
Avec l’éditeur PureBasic , crée un fichier ct_api.pbi; Sample ctacs.ini (Windows)
[CardTerminal]
CTN1=ACR122U
[ACR122U]
ICC1=ACS CCID USB Reader 0
C'est l'importation des fonctions de la dll
Code : Tout sélectionner
;/**
; * @file
; * ACS CT-API library header file.
; * @version 1.0
; * @date 7 September 2011
;* @copyright Copyright (C) 2011 Advanced Card Systems Ltd. All rights reserved.
;*/
;/**
;* @mainpage Using CT-API
;*
;* @section Introduction Introduction
;*
;* This documentation covers the APIs provided by ACS CT-API library. This
;* library implements CT-API functions For ACS smart card readers.
;*
;* @section DefiningCardTerminals Defining Card Terminals
;*
;* To use CT-API With ACS smart card readers, you must place a initialization
;* file "ctacs.ini" To the current directory With your application program. This
;* file is To Map PC/SC readers To card terminal numbers And ICC interfaces.
;*
;* The following sample INI file defines 2 card terminals. CTN1 is mapped To
;* ACR38U-CCID While CTN2 is mapped To ACR128U And each ICC Interface is mapped
;* To PC/SC reader name.
;*
;* @subsection Windows Windows
;*
;* @code
;* ; Sample ctacs.ini (Windows)
;*
;* [CardTerminal]
;* CTN1=ACR38U-CCID
;* CTN2=ACR128U
;*
;* [ACR38U-CCID]
;* ICC1=ACS CCID USB Reader 0
;*
;* [ACR128U]
;* ICC1=ACS ACR128U ICC Interface 0
;* ICC2=ACS ACR128U PICC Interface 0
;* ICC3=ACS ACR128U SAM Interface 0
;* @endcode
;*
;* @subsection LinuxMacOSX Linux/Mac OS X
;*
;* @code
;* ; Sample ctacs.ini (Linux/Mac OS X)
;*
;* [CardTerminal]
;* CTN1=ACR38U-CCID
;* CTN2=ACR128U
;*
;* [ACR38U-CCID]
;* ICC1=ACS ACR38U-CCID 00 00
;*
;* [ACR128U]
;* ICC1=ACS ACR128U 00 00
;* ICC2=ACS ACR128U 00 01
;* ICC3=ACS ACR128U 00 02
;* @endcode
;*
;* @section CallingCTAPIFunctions Calling CT-API Functions
;*
;* Your source code must include a header file "ct_api.h" IN order To CALL the
;* CT-API functions.
;*
;* @code
; * #include <stdio.h>
; * #include <ct_api.h>
; *
; * INT main(INT argc, char; *argv[])
; * {
; * char RET;
; * unsigned short ctn;
; * unsigned short pn;
; * unsigned short sad;
; * unsigned short dad;
; *
; * // REQUEST ICC
; * unsigned char command[] = { 0x20, 0x12, 0x01, 0x00, 0x00 };
; * unsigned short lenc = SizeOf(command);
; *
; * unsigned char response[300];
; * unsigned short lenr = SizeOf(response);
; *
; * ctn = 1;
; * pn = 1;
; *
; * // Initialize card terminal
; * RET = CT_init(ctn, pn);
; * If (RET != OK)
; * {
; * printf("Error: CT_init failed with error %d\n", RET);
; * Return 1;
; * }
; *
; * sad = 2; // Source = Host
; * dad = 1; // Destination = Card Terminal
; *
; * // Send command
; * RET = CT_data(ctn, &dad, &sad, lenc, command, &lenr, response);
; * If (RET != OK)
; * printf("Error: CT_data failed with error %d\n", RET);
; * Else
; * {
; * // Display response
; * printf("Response: ");
; * For (i = 0; i < lenr; i++)
; * printf("%02X ", response[i]);
; * printf("\n");
; * }
; *
; * // Close card terminal
; * RET = CT_close(ctn);
; * If (RET != OK)
; * printf("Error: CT_close failed with error %d\n", RET);
; *
; * Return 0;
; * }
; * @endcode
; */
;/**
; * @page ReturnValues Return Values
; *
; * @section CTAPIReturnValues CT-API Return Values
; *
; * CT-API functions Return the following values:
; *
; * <table>
; * <tr><th>Error Code</th><th>Value</th><th>Description</th></tr>
; * <tr><td>OK</td><td>0</td><td>Function CALL was successful.</td></tr>
; * <tr><td>ERR_INVALID</td><td>-1</td><td>Invalid parameter Or value.</td></tr>
; * <tr><td>ERR_CT</td><td>-8</td><td>CT error.</td></tr>
; * <tr><td>ERR_TRANS</td><td>-10</td><td>Non-eliminable transmission error.</td></tr>
; * <tr><td>ERR_MEMORY</td><td>-11</td><td>Memory assignment error IN HTSI.</td></tr>
; * <tr><td>ERR_HOST</td><td>-127</td><td>Abort of function by host/OS.</td></tr>
; * <tr><td>ERR_HTSI</td><td>-128</td><td>HTSI error.</td></tr>
; * </table>
; */
;#ifndef CT_API_H
;#define CT_API_H
;#ifdef _WIN32
;#include <windows.h>
;#else
;#define WINAPI ///< Calling convention.
;#endif
;// Error codes
; Ici je préfère créer des variables globales plutôt que des constante
Global OK=0;#define OK 0 ///< Function CALL was successful.
Global ERR_INVALID =-1;#define ERR_INVALID -1 ///< Invalid parameter Or value.
Global ERR_CT = -8;#define ERR_CT -8 ///< CT error.
Global ERR_TRANS = -10;#define ERR_TRANS -10 ///< Non-eliminable transmission error.
Global ERR_MEMORY= -11;#define ERR_MEMORY -11 ///< Memory assignment error IN HTSI.
Global ERR_HOST = -127;#define ERR_HOST -127 ///< Abort of function by host/OS.
Global ERR_HTSI = -128;ERR_HTSI -128#define ERR_HTSI -128 ///< HTSI error.
dll=OpenLibrary(0,"ctacs.dll")
If dll = 0
Debug "dll introuvable"
End
EndIf
;/**
;* Pointer To CT_init() function.
;*/
;typedef char (WINAPI *CT_INIT)(unsigned short ctn, unsigned short pn);
Prototype ProtoCT_init(ctn.u, pn.u)
CT_init.ProtoCT_init = GetFunction(0, "CT_init")
; Initiation of the host/CT connection.
;
; Parameters:
; ctn Logical CardTerminal number.
; pn Port number of the physical Interface. This parameter is reserved For future use And it must be 1.
;
; Returns:
; If the function succeeds, the function returns OK.
; If the function fails, it returns an error code. For more information, see CT-API Return Values.
;/**
; * Pointer To CT_data() function.
; */
;typedef char (WINAPI *CT_DATA)(unsigned short ctn, unsigned char *dad, unsigned char *sad,
; unsigned short lenc, unsigned char *command, unsigned short *lenr, unsigned char *response);
Prototype ProtoCT_data(ctn.u, *dad, *sad, lenc.u, *command, *lenr, *response)
CT_data.ProtoCT_data = GetFunction(0, "CT_data")
; Transmission of a command To a CardTerminal Or To an ICC And give back the response.
;
; Parameters:
; ctn Logical CardTerminal number.
; dad Destination address. Destination Address (Hex) Receiver
; 00 ICC1 (IC card 1)
; 01 CT
; 02 ICC1 (IC card 2)
; ... ...
; 0E ICC14 (IC card 14)
; XX other values reserved
;
;
; sad Source address. Source Address (Hex) Sender
; 02 HOST
; 05 REMOTE HOST
;
;
; lenc Command length IN byte.
; command ICC-command Or CT-command.
; lenr Passing of the max. buffer size of the response field To the function And Return of the actual length of the response IN byte.
; response Response To the command.
;
; Returns:
; If the function succeeds, the function returns OK.
; If the function fails, it returns an error code. For more information, see CT-API Return Values.
; /**
; * Pointer To CT_close() function.
; */
; typedef char (WINAPI *CT_CLOSE)(unsigned short ctn);
Prototype ProtoCT_close(ctn.u)
CT_close.ProtoCT_close = GetFunction(0, "CT_close")
; Close the host/CT connection.
;
; Parameters:
; ctn Logical CardTerminal number.
;
; Returns:
; If the function succeeds, the function returns OK.
; If the function fails, it returns an error code. For more information, see CT-API Return Values.
;#ifdef __cplusplus
;extern "C" {
;#endif
;/**
;* Initiation of the host/CT connection.
; * @param ctn Logical CardTerminal number.
; * @param pn Port number of the physical Interface. This parameter is reserved
; * For future use And it must be 1.
;* @return If the function succeeds, the function returns OK.<br />
;* If the function fails, it returns an error code. For more
;* information, see @ref CTAPIReturnValues.
; */
; char WINAPI CT_init(unsigned short ctn, unsigned short pn);
;
; /**
; * Transmission of a command To a CardTerminal Or To an ICC And give back the
; * response.
; * @param ctn Logical CardTerminal number.
; * @param dad Destination address.
; * <table>
; * <tr><th>Destination Address (Hex)</th><th>Receiver</th></tr>
; * <tr><td>00</td><td>ICC1 (IC card 1)</td></tr>
; * <tr><td>01</td><td>CT</td></tr>
; * <tr><td>02</td><td>ICC1 (IC card 2)</td></tr>
; * <tr><td>...</td><td>...</td></tr>
; * <tr><td>0E</td><td>ICC14 (IC card 14)</td></tr>
; * <tr><td>XX</td><td>other values reserved</td></tr>
; * </table><br />
; * @param sad Source address.
; * <table>
; * <tr><th>Source Address (Hex)</th><th>Sender</th></tr>
; * <tr><td>02</td><td>HOST</td></tr>
; * <tr><td>05</td><td>REMOTE HOST</td></tr>
; * </table><br />
; * @param lenc Command length IN byte.
; * @param command ICC-command Or CT-command.
; * @param lenr Passing of the max. buffer size of the response field To the
; function And Return of the actual length of the response IN
; byte.
; * @param response Response To the command.
; * @return If the function succeeds, the function returns OK.<br />
; * If the function fails, it returns an error code. For more
; * information, see @ref CTAPIReturnValues.
; */
; char WINAPI CT_data(unsigned short ctn, unsigned char *dad, unsigned char *sad,
; unsigned short lenc, unsigned char *command, unsigned short *lenr, unsigned char *response);
;
; /**
; * Close the host/CT connection.
; * @param ctn Logical CardTerminal number.
; * @return If the function succeeds, the function returns OK.<br />
; * If the function fails, it returns an error code. For more
; * information, see @ref CTAPIReturnValues.
; */
; char WINAPI CT_close(unsigned short ctn);
;
; #ifdef __cplusplus
; }
; #endif
;
; #endif
Code : Tout sélectionner
Global OK=0 ;#define OK 0 ///< Function CALL was successful.
Global ERR_INVALID =-1 ;#define ERR_INVALID -1 ///< Invalid parameter Or value.
Global ERR_CT = -8 ;#define ERR_CT -8 ///< CT error.
Global ERR_TRANS = -10 ;#define ERR_TRANS -10 ///< Non-eliminable transmission error.
Global ERR_MEMORY= -11 ;#define ERR_MEMORY -11 ///< Memory assignment error IN HTSI.
Global ERR_HOST = -127;#define ERR_HOST -127 ///< Abort of function by host/OS.
Global ERR_HTSI = -128;#define ERR_HTSI -128 ///< HTSI error.
Import "ctacs.lib"
CT_close(ctn.u) As "CT_close"
CT_data(ctn.u, *dad, *sad, lenc.u, *command, *lenr, *response) As "CT_data"
CT_init(ctn.u, pn.u) As "CT_init"
EndImport
Crée un fichier Test.pb, qui est la traduction du code c en pb du chm
Code : Tout sélectionner
;exemple trouvé dans le chm
;#include <stdio.h>
IncludeFile "ct_api.pbi" ; #include <ct_api.h>
;INT main(INT argc, char *argv[])
; {
RET.a ;char RET;
ct.u ;unsigned short ctn;
pn.u ;unsigned short pn;
sad.u ;unsigned short sad;
dad.u ;unsigned short dad;
;// REQUEST ICC
*command=AllocateMemory(5);unsigned char command[] = { 0x20, 0x12, 0x01, 0x00, 0x00 };
PokeA(*command,$20)
PokeA(*command+1,$12)
PokeA(*command+2,$01)
PokeA(*command+3,$00)
PokeA(*command+4,$00)
lenc.u=MemorySize(*command);unsigned short lenc = SizeOf(command);
*reponse=AllocateMemory(300);unsigned char response[300];
lent.u=MemorySize(*reponse) ;unsigned short lenr = SizeOf(response);
ctn = 1;
pn = 1 ;
;// Initialize card terminal
RET = CT_init(ctn, pn);
If RET <> OK ;If (RET != OK)
;{
Debug "Error: CT_init failed with error " + Str(RET);printf("Error: CT_init failed With error %d\n", RET);
;Retour=1;Return 1;
EndIf ;}
sad = 2; // Source = Host
dad = 1; // Destination = Card Terminal
;// Send command
RET = CT_data(ctn, @dad, @sad, lenc, command, @lenr, response);RET = CT_data(ctn, &dad, &sad, lenc, command, &lenr, response);
If RET <> OK ;If (RET != OK)
Debug "Error: CT_data failed With error " + Str(RET) ;printf("Error: CT_data failed With error %d\n", RET);
Else
;{
;// Display response
Debug "Response: ";printf("Response: ");
For i = 0 To lenr -1; i++);For (i = 0; i < lenr; i++)
Debug Hex(PeekA(*response+i),#PB_Ascii);printf("%02X ", response[i]);
;printf("\n");
Next i
EndIf;}
;// Close card terminal
RET = CT_close(ctn);
If RET <> OK ;If (RET != OK)
Debug "Error: CT_close failed With error " + Str(RET);printf("Error: CT_close failed With error %d\n", RET);
EndIf
;Retour=0;Return 0;
;}
Ça devrait fonctionner en x64 comme en x86
Si ça donne du chinois, c'est une histoire d'unicode/ascii
Lance Test.pb
Ça donne quelque chose ?
[Edition] J'ai corrigé le .pbi
Mesa.
-
- Messages : 67
- Inscription : mer. 27/sept./2006 12:45
Re: Communiquer avec module USB RFID ACR 122?
Salut et c'est impressionnant de voir que tu prends du temps pour m'aider.
J'ai donc procédé ainsi et, en lançant, je n'ai pas d'erreur mais le programme de test me retourne :
Les codes erreurs ne sont décrits dans le chm.
Question qui me turlupine : le script ctacs.ini est utilisé par la dll?
Quand tu dis que je dois le mettre dans la lib, tu parles du système ou de purelibraries (et si oui, dans la racine, dans windows ou userlibraries?)?
J'espère ne pas te désespérer avec mon manque d'haitude pour les lib ou dll.
J'ai donc procédé ainsi et, en lançant, je n'ai pas d'erreur mais le programme de test me retourne :
Code : Tout sélectionner
Error: CT_init failed with error 248
Error: CT_data failed With error 255
Error: CT_close failed With error 248
Question qui me turlupine : le script ctacs.ini est utilisé par la dll?
Quand tu dis que je dois le mettre dans la lib, tu parles du système ou de purelibraries (et si oui, dans la racine, dans windows ou userlibraries?)?
J'espère ne pas te désespérer avec mon manque d'haitude pour les lib ou dll.
Re: Communiquer avec module USB RFID ACR 122?
Les codes d'erreur sont dans le chm:
A savoir:
OK = 0;< Function CALL was successful.
ERR_INVALID = -1;< Invalid parameter Or value.
ERR_CT = -8;< CT error.
ERR_TRANS = -10;< Non-eliminable transmission error.
ERR_MEMORY= -11;< Memory assignment error IN HTSI.
ERR_HOST = -127;< Abort of function by host/OS.
ERR_HTSI = -128;< HTSI error.
bizarrement ils sont négatifs !
Il faut arriver à ce que le CT_init fonctionne et renvoie 0
A la place de :[ACR122U]
ICC1=ACS CCID USB Reader 0
essaie
[ACR122U]
ICC1=ACS ACR122U 00 00
;* ICC2=ACS ACR122U 00 01
;* ICC3=ACS ACR122U 00 02
A demain...
M.
A savoir:
OK = 0;< Function CALL was successful.
ERR_INVALID = -1;< Invalid parameter Or value.
ERR_CT = -8;< CT error.
ERR_TRANS = -10;< Non-eliminable transmission error.
ERR_MEMORY= -11;< Memory assignment error IN HTSI.
ERR_HOST = -127;< Abort of function by host/OS.
ERR_HTSI = -128;< HTSI error.
bizarrement ils sont négatifs !
Il faut arriver à ce que le CT_init fonctionne et renvoie 0
Il faut croire que oui, essaie de faire des tests en le manipulant. A priori, on peut déclarer plusieurs lecteurs de type différentsQuestion qui me turlupine : le script ctacs.ini est utilisé par la dll?
A la place de :[ACR122U]
ICC1=ACS CCID USB Reader 0
essaie
[ACR122U]
ICC1=ACS ACR122U 00 00
;* ICC2=ACS ACR122U 00 01
;* ICC3=ACS ACR122U 00 02
Je parlais de ctacs.lib au cas où tu aurais essayé le code avec import.Quand tu dis que je dois le mettre dans la lib, tu parles du système ou de purelibraries (et si oui, dans la racine, dans windows ou userlibraries?)?
Non, non, e trouve le sujet intéressantJ'espère ne pas te désespérer avec mon manque d'haitude pour les lib ou dll.

A demain...
M.
Re: Communiquer avec module USB RFID ACR 122?
Une question en passant: quelle est la marque de ton lecteur ?
Le même produit semble vendu sous plusieurs noms sur A...z (ou alors ils se copient?)
- ACS (celui qui à la plus de doc) http://www.acs.com.hk/en/products/3/acr ... fc-reader/
- Kkmoon (un SDK disponible ici)
- Yosoo (pas trouvé de doc)
- Autre ?

Le même produit semble vendu sous plusieurs noms sur A...z (ou alors ils se copient?)
- ACS (celui qui à la plus de doc) http://www.acs.com.hk/en/products/3/acr ... fc-reader/
- Kkmoon (un SDK disponible ici)
- Yosoo (pas trouvé de doc)
- Autre ?

Re: Communiquer avec module USB RFID ACR 122?
heu... tu ne reponds pas a sa question !Mesa a écrit :Je parlais de ctacs.lib au cas où tu aurais essayé le code avec import.Quand tu dis que je dois le mettre dans la lib, tu parles du système ou de purelibraries (et si oui, dans la racine, dans windows ou userlibraries?)?
il te demande ou doit t'il mettre son fichier, dans la Lib ? , dans le systeme ? ou dans Purebasic, et ou ?

-
- Messages : 67
- Inscription : mer. 27/sept./2006 12:45
Re: Communiquer avec module USB RFID ACR 122?
Salut à tous,
Concernant le script en .ini, j'ai finalement lu dans le chm qu'il fallait le placer là où se trouvait la dll (répertoire du programme).
J'ai fait un nouvel essai avec le code fourni par mesa.
J'ai vu, dans les commentaires du code, que les paramètres indiquaient :
avec dans le chm l'explication suivante :
J'ai donc essayé en changeant CTN et PN et passé en revue la palette possible :
j'ai remarqué que lorsque le ctn est à 1, il n'y a plus que deux lignes d'erreur.
Concernant le script en .ini, j'ai finalement lu dans le chm qu'il fallait le placer là où se trouvait la dll (répertoire du programme).
J'ai fait un nouvel essai avec le code fourni par mesa.
J'ai vu, dans les commentaires du code, que les paramètres indiquaient :
Code : Tout sélectionner
;* Initiation of the host/CT connection.
; * @param ctn Logical CardTerminal number.
; * @param pn Port number of the physical Interface. This parameter is reserved
; * For future use And it must be 1.
;* @return If the function succeeds, the function returns OK.<br />
;* If the function fails, it returns an error code. For more
;* information, see @ref CTAPIReturnValues.
Code : Tout sélectionner
char WINAPI CT_init ( unsigned short ctn,
unsigned short pn
)
Initiation of the host/CT connection.
Parameters:
ctn Logical CardTerminal number.
pn Port number of the physical interface. This parameter is reserved for future use and it must be 1.
Returns:
If the function succeeds, the function returns OK.
If the function fails, it returns an error code. For more information, see CT-API Return Values.
j'ai remarqué que lorsque le ctn est à 1, il n'y a plus que deux lignes d'erreur.
et ça repasse à trois erreurs dès que le ctn passe est différent de 1....
i=0 j=6................................................................
Error: CT_init failed with error 248
Error: CT_data failed With error 255
Error: CT_close failed With error 248
i=0 j=7................................................................
Error: CT_init failed with error 248
Error: CT_data failed With error 255
Error: CT_close failed With error 248
i=1 j=0................................................................
Error: CT_init failed with error 248
Error: CT_data failed With error 255
i=1 j=1................................................................
Error: CT_init failed with error 248
Error: CT_data failed With error 255
i=1 j=2................................................................
Error: CT_init failed with error 248
Error: CT_data failed With error 255
i=1 j=3................................................................
Error: CT_init failed with error 248
Error: CT_data failed With error 255
...
Re: Communiquer avec module USB RFID ACR 122?
Remplace le contenu du fichier .ini par
M.
; Sample ctacs.ini (Windows)
[CardTerminal]
CTN1=ACR122U
[ACR122U]
ICC1=ACS ACR122U 00 00
M.
-
- Messages : 67
- Inscription : mer. 27/sept./2006 12:45
Re: Communiquer avec module USB RFID ACR 122?
Cela donne le même résultat :
toujours 3 erreurs sauf pour le ctn à 1 ou il n'y a pas celle du close
toujours 3 erreurs sauf pour le ctn à 1 ou il n'y a pas celle du close