Bonjour.
Je suis en stage en Ecosse (desole pour les accents ), et je dois programmer un USB Brick. Seulement je ne sais pas comment lire un signal pour que l'interface dise 'Oh, je vois un signal sur tel port'. Par contre, j'arrive a ecrire sur un port (allumer et eteindre une LED en somme). Voici le code qui me permet de faire ca :
#include <vcl.h>
#pragma hdrstop
#include "AwusbAPI.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#include <stdio.h>
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
HINSTANCE hDll;
int Awusb_status;
unsigned char data[2], data_image[2];
//
// function type declaration to use with pointer declaration
//
typedef DWORD ( * FARPROCP_AwusbOpen) (DWORD devnum);
typedef DWORD ( * FARPROCP_AwusbClose) ();
typedef DWORD ( * FARPROCP_AwusbEnablePort) (BYTE *data, DWORD count);
typedef DWORD ( * FARPROCP_AwusbOutPort) (BYTE *data, DWORD count);
typedef DWORD ( * FARPROCP_AwusbInPort) (BYTE *data, DWORD count);
typedef char * ( * FARPROCP_AwusbErrorMessage) (DWORD ret);
//
// create pointer to functions in DLL to access USB parallel interface unit.
//
FARPROCP_AwusbOpen Dll_AwusbOpen;
FARPROCP_AwusbClose Dll_AwusbClose;
FARPROCP_AwusbEnablePort Dll_AwusbEnablePort;
FARPROCP_AwusbOutPort Dll_AwusbOutPort;
FARPROCP_AwusbInPort Dll_AwusbInPort;
FARPROCP_AwusbErrorMessage Dll_AwusbErrorMessage;
//
// init_USB_DLL : function to initialise "awusb.dll" to allow access to USB I/O
// ==========
void init_USB_DLL(void)
{
hDll = LoadLibrary("awusb.dll");
if (hDll == 0) {
printf("ERROR : awusb.dll LoadLibrary failed");
exit(0);
}
Dll_AwusbOpen = (FARPROCP_AwusbOpen) GetProcAddress (hDll, "AwusbOpen");
Dll_AwusbClose = (FARPROCP_AwusbClose) GetProcAddress (hDll, "AwusbClose");
Dll_AwusbEnablePort = (FARPROCP_AwusbEnablePort) GetProcAddress (hDll, "AwusbEnablePort");
Dll_AwusbOutPort = (FARPROCP_AwusbOutPort) GetProcAddress (hDll, "AwusbOutPort");
Dll_AwusbInPort = (FARPROCP_AwusbInPort) GetProcAddress (hDll, "AwusbInPort");
Dll_AwusbErrorMessage = (FARPROCP_AwusbErrorMessage) GetProcAddress (hDll, "AwusbErrorMessage");
Awusb_status = Dll_AwusbOpen(0);
if (Awusb_status != AWUSB_OK) {
printf("ERROR : awusb.dll Open failed");
exit(0);
}
data[0] = 0x00;
data[1] = 0x00; /* data[0] and data[1] form a 16-bit value */
Dll_AwusbEnablePort(data,2);
Awusb_status = Dll_AwusbClose();
}
void write_USB_DLL(void)
{
hDll = LoadLibrary("awusb.dll");
if (hDll == 0) {
printf("ERROR : awusb.dll LoadLibrary failed");
exit(0);
}
Dll_AwusbOpen = (FARPROCP_AwusbOpen) GetProcAddress (hDll, "AwusbOpen");
Dll_AwusbClose = (FARPROCP_AwusbClose) GetProcAddress (hDll, "AwusbClose");
Dll_AwusbEnablePort = (FARPROCP_AwusbEnablePort) GetProcAddress (hDll, "AwusbEnablePort");
Dll_AwusbOutPort = (FARPROCP_AwusbOutPort) GetProcAddress (hDll, "AwusbOutPort");
Dll_AwusbInPort = (FARPROCP_AwusbInPort) GetProcAddress (hDll, "AwusbInPort");
Dll_AwusbErrorMessage = (FARPROCP_AwusbErrorMessage) GetProcAddress (hDll, "AwusbErrorMessage");
Awusb_status = Dll_AwusbOpen(0);
if (Awusb_status != AWUSB_OK) {
printf("ERROR : awusb.dll Open failed");
exit(0);
}
data[0] = 0x00; //les 8 premiers ports sont en entree
data[1] = 0x80; //la pin 15 est en out, la LED est branchee dessus.
Dll_AwusbEnablePort(data,2);
Dll_AwusbOutPort(data,2); //J'ecris
Awusb_status = Dll_AwusbClose(); //Je ferme
}
Ce sont ces 5 dernieres lignes aui changent tout. Pour lire, il faut utiliser la fonction Dll_AwusbInPort(data,2); mais je ne sais pas comment on accede au port qu'on veut lire. Je veux faire un label qui change de couleur quand le bit est a 0 ou 1. Je veux donc faire une 3eme fonction avec Inport au lieu de outport.
La fonction Inport est expliquee sur cette page : http://www.activewireinc.com/docs/AwUsb_SwRef.htm
Je dois pas etre loin de la solution, please help !
-----