Demande d'aide pour écrire un programme en C

Fermé
purle - 10 mars 2009 à 10:44
 purle - 11 mars 2009 à 10:19
Bonjour,
voila j'ai un programme à faire permettant de faire fonctionner un Contactless Reader sur Linux.
seulement j'ai plusieurs scripts mais je ne sais pas du tout les relier.....
j'ai mis toutes les informations que j'avais (c'est un peu long) , si quelqu'un pouvait m'aider, merci par avance.

1) READER COMMANDS
#######################################################
ACR120_Open
ACR120_Close
ACR120_Reset

#include “acr120.h”
main()
{
// Open a communication channel, the first USB Reader
INT16 hReader=ACR120_Open(ACR120_USB1);
// Reset the Reader to the initial state.
if(hReader>0)
{
INT16 Status= ACR120_Reset(hReader);
}
else
{
// error happened
}
// some operations
// Close the communication channel, the first USB Reader
if(hReader>0)
{
Status= ACR120_Close(hReader);
hReader = -1;
}
}
###########################################################
ACR120_Status

#include “acr120.h”
// Obtain the Firmware version & Reader Status if the USB connection is already
// established
if(hReader>0)
{
UINT8 FirmwareVersion[20];
STRUCT_STATUS ReaderStatus;
INT16 Status= ACR120_Status(hReader. FirmwareVersion, &ReaderStatus);
If(Status== SUCCESS_READER_OP)
{
// do some operations if the operation is success
}
else
{
// error happened!!
}
}
Struct STRUCT_STATUS
{
// 0x01 = Type A; 0x02 = Type B; 0x03 = Type A + Type B
UINT8 MifareInterfaceType;
// Bit 0 = Mifare Light; Bit 1 = Mifare1K; Bit 2 = Mifare 4K; Bit 3 = Mifare DESFire
// Bit 4 = Mifare UltraLight; Bit 5 = JCOP30; Bit 6 = Shanghai Transport
// Bit 7 = MPCOS Combi; Bit 8 = ISO type B, Calypso
// Bit 9 – Bit 31 = To be defined
UINT32 CardsSupported;
UINT8 CardOpMode; // To be defined
UINT8 FWI; // the current FWI value (time out value)
UINT8 RFU; // To be defined
UINT16 RFU2; // to be defined
} ReaderStatus;
##########################################################
ACR120_ReadRC531Reg
ACR120_WriteRC531Reg


#include “acr120.h”
// Read & Write the Reader Register if the USB connection is already established
if(hReader>0)
{
UINT8 RegNo=0x05; // the register address
UINT8 Value; // the register value
INT16 Status= ACR120_ReadRC531Reg(hReader, RegNo, &Value);
If(Status== SUCCESS_READER_OP)
{
// Update the register value
Value!=0x01;
Status= ACR120_WriteRC531Reg(hReader, RegNo, Value);
}
if(Status!= SUCCESS_READER_OP)
{
// error happened!!
}
}
#Users are not recommended to modify the internal register setting.

############################################################
ACR120_DirectSend
ACR120_DirectReceive
ACR120_RequestDLLVersion


#include “acr120.h”
// Get the DLL Version
UINT8 Length;
UINT8 Version[40]; // the DLL Version string is less than 40 bytes long
INT16 Status=ACR120_RequestDLLVersion(&Length, Version);
if(Status== SUCCESS_READER_OP)
{
// display the DLL version,
Version[Length]=’\0’; // add the terminator ‘\0’
printf(“The DLL version is %s”, Version);
}
else
{
// DLL Error !!
}

#############################################################
ACR120_ReadEEPROM
ACR120_WriteEEPROM


#include “acr120.h”
// Read & Write the EEPROM if the USB connection is already established
if(hReader>0)
{
UINT8 Address=0x04; // the address of the EEPROM to be accessed
UINT8 Value; // the value
INT16 Status= ACR120_ReadEEPROM(hReader, Address, &Value);
If(Status== SUCCESS_READER_OP)
{
// Update the register value
Value &= 0x0F;
Status= ACR120_WriteEEPROM(hReader, Address, Value);
}
if(Status!= SUCCESS_READER_OP)
{
// error happened!!
}
}
###########################################################
ACR120_ReadUserPort
ACR120_WriteUserPort

#include “acr120.h”
// Turn on the LED if the USB connection is already established
if(hReader>0)
{
UINT8 PortValue; // the value of the user port
INT16 Status= ACR120_ReadUserPort(hReader, &PortValue);
If(Status== SUCCESS_READER_OP)
{
// Turn on the LED only
PortValue |= 0x40;
Status= ACR120_WriteUserPort(hReader, PortValue);
}
}







############################################################
ACR120_Power

#include “acr120.h”
// Turn off the Antenna Power for power saving
if(hReader>0)
{
INT16 Status= ACR120_Power(hReader, 0x00);
}
// The Antenna Power will be turned on automatically if any Card Operations is started.
// E.g. ACR120_Select(). Don’t need to turn on the Antenna Power manually.
// However, the Antenna Power cannot be turned off while any Card Operations is running.

#################################################################

2) GENERAL CARD COMMANDS
##############################################
ACR120_Select

#include “acr120.h”

// Select a TAG on the reader

if(hReader>0)

{

UINT8 TagType; // the Tag Type

UINT8 TagLength; // the length of the Tag SN

UINT8 TagSN[10]; // The SN of the Tag

// This API is useful for selecting a TAG in which the SN is not known in advance.

INT16 Status= ACR120_Select(hReader, &TagType, &TagLength, TagSN);

If(Status== SUCCESS_READER_OP)

{

// Now the TagSN[10] contains the SN of the Tag

// Please check the TagLength to determine the actual length of the SN

// e.g for Mifare 1K card, the TagLength will be equal to 0x04.

// the TagType will be equal to 0x02;

}

else

{

// No TAG is found!!

}

}

###############################################
ACR120_ListTags

#include “acr120.h”

UINT8 TagFound; // number of TAG found

UINT8 TagType[4]; // the Tag Type

UINT8 TagLength[4]; // the length of the Tag SN

UINT8 TagSN[4][10]; // The SN of the Tag

// Find all the TAGs placed on the reader antenna. Maximum 4 TAGs can be recognized

// by the reader at the same time.

INT16 Status= ACR120_ListTags(hReader,

&TagFound, TagType, TagLength, TagSN);

If(Status== SUCCESS_READER_OP)

{

// Now the TagFound contains the number of TAG recognized by the reader

// Assume the TagFound is equal to two, Two TAGs are found

// the TagSN[0][10] contains the SN of the first Tag

// the TagLength[0] contains the actual length of the SN of the first TAG

// the TagType[0] contains the TAG Type of the first TAG

// the TagSN[1][10] contains the SN of the second Tag

// the TagLength[1] contains the actual length of the SN of the second TAG

// the TagType[1] contains the TAG Type of the second TAG

// the content of TagSN[2][10], TagLength[2], TagType[2] have no meaning

// Similarly, the content of TagSN[3][10], TagLength[3], TagType[3] have no

// meaning

}

else { // No TAG is found!! }

###############################################
ACR120_MultiTagSelect

#include “acr120.h”

UINT8 ResultTagType; // the Tag Type detected by the reader

UINT8 ResultTagLength; // the Tag length detected by the reader

UINT8 ResultTagSN[10]; // the Tag SN detected by the reader

// The SN of the Tag is “A6 2D EA 92”, the length is 4 bytes

// Fill the rest of the array with zeros

UINT8 TagSN[10]={ 0xA6, 0x2D, 0xEA, 0x92, 0x00,

0x00, 0x00, 0x00, 0x00, 0x00};

// Select an arbitrary TAG if the SN of the TAG is known already. E.g. By using

// ACR120_ListTags()

// This API is useful for selecting an arbitrary TAG among all the TAGs.

INT16 Status= ACR120_MultiTagSelect(hReader,

0x04, TagSN,

ResultTagType, ResultTagLength, ResultTagSN);

If(Status== SUCCESS_READER_OP)

{

// the ResultTagSN[10] contains the SN of the Tag detected by the reader

// it must be the same as the TagSN[10]

// the ResultTagLength contains the actual length of the SN of the TAG detected by

//the reader. it must be the same as the TagLength

// the ResultTagType contains the TAG Type of the TAG detected by the reader

}

else

{

// No TAG is selected!!

}

################################################
3) CARD COMMANDS FOR MIFARE 1K/4K CARDS

################################################
ACR120_Login


#include “acr120.h”

// Login the selected TAG on the reader

if(hReader>0)

{

UINT8 TagType; // the Tag Type

UINT8 TagLength; // the length of the Tag SN

UINT8 TagSN[10]; // The SN of the Tag

// Select a Tag

INT16 Status= ACR120_Select(hReader, &TagType, &TagLength, TagSN);

// Assume a Tag is successfully selected

// Login the Sector 0x02 with a given key (Key A Login)

UINT8 Key[6]={ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06}; // the key used for login

Status= ACR120_Login(hReader, 0x02,

AC_MIFARE_LOGIN_KEYTYPE_A, 0, Key);

If(Status== SUCCESS_READER_OP)

{

// Now the Sector 0x02 is successfully authenticated (login success)

}

else

{

// The Sector 0x02 is not authenticated (login fail)!!

}

// some operations

//

//

// Assume the Tag is still selected

// Login the Sector 0x08 with a MasterKey 0x01 stored in Reader (Key B Login)

Status= ACR120_Login(hReader, 0x08,

AC_MIFARE_LOGIN_KEYTYPE_STORED_B, 0x01, NULL);

If(Status== SUCCESS_READER_OP)

{

// Now the Sector 0x08 is successfully authenticated (login success)

}

else

{

// The Sector 0x08 is not authenticated (login fail)!!

}

}



###################################### »
ACR120_Read

ACR120_ReadValue

ACR120_Write

ACR120_WriteValue

#include “acr120.h”

// Read & Write the Block if the USB connection is already established

if(hReader>0)

{

UINT8 BlockData[16] // the data stored in the “Data Block”

UINT8 BlockValue; // the value stored in the “Value Block”

// Assume the sector 0x02 is authenticated already

// Read the block 0x08 of sector 0x02, each sector contains 4 blocks

// Sector 0x02 consists of Blocks 0x08, 0x09, 0x0A & 0x0B

// Assume the Block 0x08 is a “Data Block”, read the content

INT16 Status= ACR120_Read(hReader, 0x08, BlockData);

// update the block with a new content

UINT8 NewBlockData[16];

memset(NewBlockData, 0x00, 16);

Status= ACR120_Write(hReader, 0x08, NewBlockData);

//

// Assume the Block 0x09 is a “Value Block”, read the value first

Status= ACR120_ReadValue(hReader, 0x09, &BlockValue);

// update the block with a new value. Decrease the value by 50

Status= ACR120_WriteValue(hReader, 0x09, BlockValue-50);

}


###################################### »
ACR120_WriteMasterKey

#include “acr120.h”

// Store a master key into the reader

// There are totally 32 Masterkey storage space in the reader.

// From location 0x00 to 0x1F

if(hReader>0)

{

UINT8 MasterKey[6]={0x00, 0x01, 0x02, 0x03, 0x04, 0x05};

KeyStored=0x01; // The MasterKey location in the reader.

Status= ACR120_WriteMasterKey(hReader, KeyStored, MasterKey);

If(Status== SUCCESS_READER_OP)

{

// Now the Masterkey is successfully stored at location 0x01

}

else

{

// The Masterkey is not stored!!

}

}

###############################################
ACR120_Inc

ACR120_Dec

ACR120_Copy

#include “acr120.h”

// Read & Write the Value Blocks if the USB connection is already established

if(hReader>0)

{

UINT8 Block; // the block number within the sector

UINT8 BlockValue; // the value stored in the “Value Block”

// Assume the sector 0x02 is authenticated already

// each sector contains 4 blocks

// Sector 0x02 consists of Blocks 0x08, 0x09, 0x0A & 0x0B

// Assume the Blocks 0x08 and 0x0A are “Value Block”, copy the value from block

0x08 to block 0x0A first.

INT16 Status= ACR120_Copy(hReader, 0x08, 0x09, &BlockValue);

// now the BlockValue contains the updated value of Block 0x0A

// update the block 0x0A with a new value. Decrease the value by 100 (decimal)

Status= ACR120_Dec(hReader, 0x0A, 100, &BlockValue);

// now the BlockValue contains the updated value of Block 0x09

// update the block 0x08 with a new value. Increase the value by 56 (decimal)

Status= ACR120_Inc(hReader, 0x08, 56, &BlockValue);

// now the BlockValue contains the updated value of Block 0x08

}
A voir également:

7 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
10 mars 2009 à 14:25
Salut.
Pour augmenter les chances de réponse :
1- utilise les balise de code pour conserver l'indentation (4ème bouton après souligné), et sépare bien tes différents fichier en spécifiant à quoi il sert;
2- explique mieux ton problème et ce que tu veux faire;
3- dit où tu coince exactement.
En C, on parle de code source, pas de script, ou alors tu ne dit pas tout.
1
ok.

en fait j'ai différents codes séparés par des ####### ; et donc je dois faire en sorte de faire fonctionner mon matériel sous linux avec ces codes, comme par exemple le connecter, le déconnecter, écrire , lire des cartes....


et je suppose qu'il faut les assembler où les compléter (les codes fournis) mais je ne sais pas du tout comment.
0
personne peut m'aider?
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
10 mars 2009 à 16:40
En gros, il suffit de remplacer les commentaires par ce que tu veux faire.
Tu n'as pas la doc allant avec tes sources ???
0
si , c'est à cette adresse:

https://www.acs.com.hk/en/drivers/?driver=ACR120
=> puis il faut descendre un peu, aller dans Manuals et cliquer sur "Application Programming Interface - USB Interface API driver manual for ACR120U contactless reader without using PC/SC"

c'est tous les codes de mon matériel.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
11 mars 2009 à 09:21
Ce ne sont que des exemples dans la documentation, et encore, incomplet.
Il y a le programme page 41 qui est à peu près complet.
0
mais il ne faut pas les assembler en fait ....

j'aimerais juste pouvoir le connecter, deconnecter, lire et écrire une carte....

je le comprends pas trop, il faut rajouté d'autres choses?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
11 mars 2009 à 09:30
J'ai pas regardé dans le détail, mais si tu copie colle tout, tu lira écrira sur ton truc, mais c'est tout. Tu ne verra rien.
Si tu préfères, si tu assemble tout, ça va te faire plein de truc, lire des machins des bidules, mais au final, ton écran restera noir et ta carte n'aura pas changé d'état. (Enfin, je pense)
Donc, il y a du boulot de programmation !
0
donc en fait si je veux faire une petite simulation je copie-colle la page 41 et sa devrait suffir...

mais si je peux écrire sur la carte, je peux après verifier sous windows que s'a la bien créée...

j'ai rien d'autre à rajouter?
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
11 mars 2009 à 10:17
Je ne sais pas, je n'ai pas regardé en détail. à toi de voir.
0
ok merci je verrais ça.
0