#include <18f2550.h> //archivo de cabecera
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,NOPBADEN // fuses configurados
#use delay(clock=20000000) // el clock que tendremos a la entrada del CPU compatible con USB 2.0
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, BITS=8) //para debuguear las salidas del printf,puts etc.
#DEFINE USB_HID_DEVICE TRUE // Si usar HID
//Habilitar la Transferencia
#define USB_EP1_TX_ENABLE USB_ENABLE_INTERRUPT //Activa el punto final 1 para transferencias por bloque
#define USB_EP1_TX_SIZE 8 //8 bytes para envio
#define USB_CONFIG_HID_TX_SIZE 8
//Habilitar la Recepcion
#define USB_EP1_RX_ENABLE USB_ENABLE_INTERRUPT //Activa el punto final 1 para recepcion por bloque
#define USB_EP1_RX_SIZE 8 //8 bytes para recepcion
#define USB_CONFIG_HID_RX_SIZE 8
#include <pic18_usb.h> //Funciones de bajo nivel(hardware) para la serie PIC 18Fxx5x que serviran en usb.c
#include "Descriptor_easyHID.h" //Aqui es donde van las descripciones de este dispositivo (como lo reconocera windows)
#include <usb.c> //libreria para el manejo del usb
#define LCD_ENABLE_PIN PIN_B5 ////
#define LCD_RS_PIN PIN_B6 ////
#define LCD_RW_PIN PIN_B7 ////
#define LCD_DATA4 PIN_B0 ////
#define LCD_DATA5 PIN_B1 ////
#define LCD_DATA6 PIN_B2 ////
#define LCD_DATA7 PIN_B3
#include <lcd.c>
void main() {
int8 datai[USB_EP1_RX_SIZE]; // Declaramos la variable recibe de 32 bytes.
int8 datao[USB_EP1_TX_SIZE]={'E','n','u','m',' ',' ','O','K'}; // Declaramos la variable envía de 32 bytes.
char Mensaje[8]={'R','E','C','I','B','I','D','O'};
setup_adc_ports(NO_ANALOGS); // desactivando puertos analogicos
set_tris_a (0x0); // configurando los puertos como salidas
output_a (0); // saca un nivel bajo de salida en los puertos
lcd_init();
lcd_putc("\fConectando\n");
usb_init(); //inicializa y espera a ser encendido
usb_wait_for_enumeration(); //ahora espera hasta ser enumerado (reconocido por la PC)
lcd_putc("\fEsperando orden\n");
usb_task();
//usb_puts(1,datao,8,0);
usb_put_packet(1,datao,USB_EP1_TX_SIZE ,USB_DTS_TOGGLE);
delay_ms(50);
while(TRUE){
if (usb_kbhit(1)) // Si hay un paquete de datos del host.. en el buffer lo tomamos y guardamos en la variable data.
{
usb_get_packet(1, datai, USB_CONFIG_HID_RX_SIZE); // En el buffer lo tomamos del EP1 y lo guardamos en la variable datai....
if (datai[0]==1){
lcd_putc ("\f Recibido 1 \n"); }
if (datai[0]==2){
lcd_putc ("\f Recibido 2 \n"); }
if (datai[0]==3){
lcd_putc ("\f Recibido 3 \n"); }
if (datai[0]==4){
lcd_putc ("\f Recibido 4 \n"); }
if (datai[0]==5){
lcd_putc ("\f Recibido 5 \n"); }
}
}
}