diff --git a/Moteur/Moteur.c b/Moteur/Moteur.c index 345bd5e..ae36c4e 100644 --- a/Moteur/Moteur.c +++ b/Moteur/Moteur.c @@ -3,8 +3,8 @@ #include "serial.h" #include -#define LED_ON 0x01 -#define LED_OFF 0x02 +#define LED_ON 0x21 +#define LED_OFF 0x22 #define MOVE_RIGHT 0x04 #define MOVE_LEFT 0x08 #define MOVE_STOP 0x10 diff --git a/Moteur/Moteur.o b/Moteur/Moteur.o new file mode 100644 index 0000000..4400a26 Binary files /dev/null and b/Moteur/Moteur.o differ diff --git a/Moteur/eeprom.hex b/Moteur/eeprom.hex new file mode 100644 index 0000000..1996e8f --- /dev/null +++ b/Moteur/eeprom.hex @@ -0,0 +1 @@ +:00000001FF diff --git a/Moteur/serial.o b/Moteur/serial.o new file mode 100644 index 0000000..6bbfc2a Binary files /dev/null and b/Moteur/serial.o differ diff --git a/Moteur/usb.elf b/Moteur/usb.elf new file mode 100755 index 0000000..c8590d2 Binary files /dev/null and b/Moteur/usb.elf differ diff --git a/Moteur/usb.hex b/Moteur/usb.hex new file mode 100644 index 0000000..3c155c0 --- /dev/null +++ b/Moteur/usb.hex @@ -0,0 +1,33 @@ +:100000000C9434000C943E000C943E000C943E0082 +:100010000C943E000C943E000C943E000C943E0068 +:100020000C943E000C943E000C943E000C943E0058 +:100030000C943E000C943E000C943E000C943E0048 +:100040000C943E000C943E000C943E000C943E0038 +:100050000C943E000C943E000C943E000C943E0028 +:100060000C943E000C943E0011241FBECFEFD8E04C +:10007000DEBFCDBF0E94A5000C94FC000C940000D4 +:10008000F894219A81E880938000E1E8F0E08DE027 +:1000900080838FEF90E0909389008093880084B1F3 +:1000A000866084B98081816080837894089580E837 +:1000B00090E09093890080938800089588E090E014 +:1000C000909389008093880008958FEF90E090933B +:1000D0008900809388000895579A1BB808955F9A05 +:1000E00008955F9808959B01AC0184E0220F331FAF +:1000F000441F551F8A95D1F760E074E284EF90E0C9 +:100100000E94DA00215031093093C5002093C400C9 +:1001100088E18093C10086E08093C200E0ECF0E0CB +:1001200080818D7F808308959091C00095FFFCCFE2 +:100130008093C60008958091C00087FFFCCF809116 +:10014000C600089581E00C9494000E946C0060E861 +:1001500075E280E090E00E9473000E94400000E899 +:1001600010E088E0E82EF12CCFEFD0E00E949B0059 +:100170008031C9F048F4843089F08830B9F7F092C2 +:100180008900E092880013C0813229F0823271F731 +:100190000E9471000CC00E946F0009C0109389007A +:1001A0000093880004C0D0938900C09388000E9407 +:1001B000A200DCCFA1E21A2EAA1BBB1BFD010DC0C1 +:1001C000AA1FBB1FEE1FFF1FA217B307E407F50707 +:1001D00020F0A21BB30BE40BF50B661F771F881FE3 +:1001E000991F1A9469F760957095809590959B0179 +:0C01F000AC01BD01CF010895F894FFCFD1 +:00000001FF diff --git a/USB/usb_driver b/USB/usb_driver index 8f28cb7..00ca27a 100755 Binary files a/USB/usb_driver and b/USB/usb_driver differ diff --git a/USB/usb_driver.c b/USB/usb_driver.c index fae9656..c6e7975 100644 --- a/USB/usb_driver.c +++ b/USB/usb_driver.c @@ -7,49 +7,26 @@ #include +#define LED_ON 0x21 +#define LED_OFF 0x22 +#define MOVE_RIGHT 0x04 +#define MOVE_LEFT 0x08 +#define MOVE_STOP 0x10 + + +#define ACM_CTRL_DTR 0x01 +#define ACM_CTRL_RTS 0x02 + +static int ep_in_addr = 0x83; +static int ep_out_addr = 0x04; + libusb_device **list; libusb_device_handle *handle = NULL; libusb_device *device; -struct termios termios_p; - - -int init_serial(char *device,int speed) //Initialisation du port série -{ -int fd=open(device,O_RDWR); -if(fd<0){perror(device); exit(-1);} -//Lecture des parametres courants -tcgetattr(fd,&termios_p); -//On ignore les BREAK et les caracteres avec erreurs de parite -termios_p.c_iflag = IGNBRK | IGNPAR; -//Pas de mode de sortie particulier -termios_p.c_oflag = 0; -//Liaison a 9600 bps avec 7 bits de donnees et une parite paire -termios_p.c_cflag = B9600 | CS7 | PARENB; -//Mode non-canonique avec echo -termios_p.c_lflag = ECHO; -//Caracteres immediatement disponibles -termios_p.c_cc[VMIN] = 1; -termios_p.c_cc[VTIME] = 0; -//Sauvegarde des nouveaux parametres -tcsetattr(fd,TCSANOW,&termios_p); -return fd; -} -void close_serial(int fd) //Fermeture du port série -{ -tcsetattr(fd,TCSANOW,&termios_p); -close(fd); -} -void callback(struct libusb_transfer *transf) //Fonction pour le transfert des instructions à la tourelle -{ - libusb_fill_control_setup(transf->buffer, 0xa1, 0x01, 0x300, 0x00, 0); - libusb_fill_control_transfer(transf, transf->dev_handle, transf->buffer, NULL, NULL, 1000); - fflush(stdout); - libusb_free_transfer(transf); //on libere la structure de transfert -} void configuration_periph(libusb_device *device) //Configuration de la tourelle { @@ -59,6 +36,7 @@ void configuration_periph(libusb_device *device) //Configuration de la tourelle { perror("libusb_open"); exit(-1); } + //Recuperation de la configuration d'indice 0 du périphérique struct libusb_config_descriptor *config; @@ -72,31 +50,31 @@ void configuration_periph(libusb_device *device) //Configuration de la tourelle int i; int interface; - //Probleme noyau + //On détache le noyau de notre périphérique for(i=0;i<(config->bNumInterfaces);i++) { + interface=config->interface[i].altsetting[0].bInterfaceNumber; if(libusb_kernel_driver_active(handle,interface)) - { - status=libusb_detach_kernel_driver(handle,interface); - if(status!=0) - { - perror("libusb_detach_kernel_driver"); exit(-1); - } - } + { + status=libusb_detach_kernel_driver(handle,interface); + if(status!=0) + { + perror("libusb_detach_kernel_driver"); exit(-1); + } + } } + //Utilisation d'une configuration du périphérique int configuration=config->bConfigurationValue; - printf("%d\n", configuration); -/* - status=libusb_set_configuration(handle,configuration); - + status=libusb_set_configuration(handle,configuration); if(status!=0) { perror("libusb_set_configuration"); exit(-1); } - + + //Claim interfaces for(i=0;i<(config->bNumInterfaces);i++) { @@ -104,10 +82,10 @@ void configuration_periph(libusb_device *device) //Configuration de la tourelle printf("Numero d'interface : %d\n", interface); status=libusb_claim_interface(handle,interface); if(status!=0) - { - perror("libusb_claim_interface"); exit(-1); - } - }*/ + { + perror("libusb_claim_interface"); exit(-1); + } + } } @@ -147,6 +125,7 @@ void enumeration(libusb_context *context) //Enumération des périphériques USB { perror("libusb_get_device_list"); exit(-1); } + ssize_t i=0; for(i=0;i 0x80, 0x25 in little endian + */ + //Configuration du port série. + unsigned char encoding[] = { 0x80, 0x25, 0x00, 0x00, 0x00, 0x00, 0x08 }; + status = libusb_control_transfer(handle, 0x21, 0x20, 0, 0, encoding, + sizeof(encoding), 0); + if (status < 0) { + fprintf(stderr, "Error during control transfer: %s\n", + libusb_error_name(status)); + } - if(choix=='0') - { - printf("\nPilotage au clavier\n"); - printf("Taper d pour droite, g pour gauche, h pour haut, b pour bas, t pour tirer, s pour sortir du programme :\n"); - } - if(choix=='1') - { - printf("\nPilotage avec l'arduino\n"); - printf("Pour diriger la tourelle, utiliser le joystick, pour tirer appuyer dessus et pour sortir du programme appuyer sur D3.\n"); - } + - for(;;) //Boucle d'éxécution + //Menu de commande + char action; + for(;;) { - if(choix=='0') //Pilotage au clavier - { - while(getchar() != '\n'); - scanf("%c",&action); - switch (action) + + printf("s=fermer / d=allumer led / g=eteindre led / h=moteur gauche / b=moteur droit / t=moteur éteint \n"); + scanf("%c",&action); + + switch (action) { case 's': fermeture(handle); - close_serial(fd); libusb_free_device_list(list,1); libusb_exit(context); return 0; break; case 'd': - commande(action, handle); + envoie(LED_ON); sleep(1); - commande('a',handle); + //len = read_chars(buf, 1); + break; case 'g': - commande(action, handle); + envoie(LED_OFF); sleep(1); - commande('a',handle); break; case 'h': - commande(action, handle); - sleep(1); - commande('a',handle); + envoie(MOVE_LEFT); + sleep(1); break; case 'b': - commande(action, handle); - sleep(1); - commande('a',handle); + envoie(MOVE_RIGHT); + sleep(1); break; case 't' : - commande(action, handle); - sleep(1); - commande('a',handle); - commande(action, handle); - sleep(1); - commande('a',handle); - commande(action, handle); - sleep(1); - commande('a',handle); + envoie(MOVE_STOP); + sleep(1); break; default : printf("Commande invalide ! Retaper :\n"); @@ -368,36 +266,6 @@ int main() } } - if(choix=='1') //Pilotage avec l'arduino - { - read(fd,&action,1); //On lit sur le port série - printf("%c\n",action); - write(fd,"o",1); //On envoie le caractère 'o' sur le port série en réponse - commande(action,handle); //Permet de déplacer la tourelle ou d'arreter ses mouvements selon le caractère reçu (d,g,b,h ou a) - if(action=='t') //Si l'on reçoit l'ordre de tirer - { - commande(action, handle); - sleep(1); - commande('a',handle); - commande(action, handle); - sleep(1); - commande('a',handle); - commande(action, handle); - sleep(1); - commande('a',handle); - } - if(action=='s') //Si l'on reçoit le caractère 's' on ferme le programme - { - fermeture(handle); - close_serial(fd); - libusb_free_device_list(list,1); - libusb_exit(context); - return 0; - } - - } - - } return 0; } diff --git a/gadget/Descriptors.c b/gadget/Descriptors.c index 1ebf8e2..c8a13df 100644 --- a/gadget/Descriptors.c +++ b/gadget/Descriptors.c @@ -54,8 +54,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, - .VendorID = 0x03EB, - .ProductID = 0x204B, + .VendorID = 0x0010, + .ProductID = 0x1010, .ReleaseNumber = VERSION_BCD(0,0,1), .ManufacturerStrIndex = STRING_ID_Manufacturer, @@ -191,7 +191,7 @@ const USB_Descriptor_String_t PROGMEM ManufacturerString = USB_STRING_DESCRIPTOR * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device * Descriptor. */ -const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"USB Gadget"); +const USB_Descriptor_String_t PROGMEM ProductString = USB_STRING_DESCRIPTOR(L"LUFA USB-RS232 Adapter"); /** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors" * documentation) by the application code so that the address and size of a requested descriptor can be given -- libgit2 0.21.2