hello188
Joined: 02 Jun 2010 Posts: 74
|
HID USB question |
Posted: Fri Apr 13, 2012 2:47 am |
|
|
Hi, I am trying to exchange data between PIC18F Starter kit and PC using USB.
Currently, I managed to write embedded code so that my windows 7 recognize the Starter Kit as valid HID USB device.
below is my code
Code: |
#include <18F46J50.h>
#fuses NOWDT, NOXINST, NODEBUG, HSPLL, PLL3, NOCPUDIV
#use delay(clock = 48MHz)
#include <def_var.h>
#include <pic18_usb.h> //Microchip PIC18Fxx5x hardware layer for usb.c
#include <usb_desc_hid.h> //USB Configuration and Device descriptors for this UBS device
#include <usb.c> //handles usb setup tokens and get descriptor reports
#include <initialize.h>
void main(void)
{
int8 out_data[USB_CONFIG_HID_TX_SIZE];
int8 in_data[USB_CONFIG_HID_RX_SIZE];
int8 send_timer=0;
int16 buffer16 = 0;
setup_oscillator(OSC_PLL_ON);
delay_ms(50);
usb_init_cs();
setup_adc_ports(sAN4);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(4);
memset(in_data, 0x00, USB_CONFIG_HID_RX_SIZE);
memset(out_data, 0x00, USB_CONFIG_HID_TX_SIZE);
while (TRUE)
{
usb_task();//
if (usb_enumerated())
{
if (usb_kbhit(1))
{//information received from the host
// out_data[0]=buffer16&&0xFF;
//out_data[1]=buffer16>>8;
out_data[0] = 4;
out_data[1] = 5;
out_data[2] = 6;
out_data[3] = 7;
//endpoint = 1, send out_data, length = 2 bytes, and toggle between DATA0 and DATA1
usb_put_packet(1, out_data, USB_CONFIG_HID_TX_SIZE, USB_DTS_TOGGLE);
}
// buffer16 = read_adc(ADC_START_AND_READ);
buffer16 = 1004;
}
}
}
|
I changed buffer size to 4 just for debugging purposes.(changed value of USB_CONFIG_HID_TX_SIZE to 4)
This StarterKit, when connected to the PC, The host program I wrote is able to detect it's connection and disconnection.
However, it is not able to exchange any data.
I can not upload my actual source code, but it is based on the example code provided by following link
http://www.waitingforfriday.com/index.php/Open_Source_Framework_for_USB_Generic_HID_devices_based_on_the_PIC18F_and_Windows
This, and most other visual studio source code I found doesn't care "endpoint" in any of their source code. But the embedded side from CCS example does care about the end point in their functions. I think the host program should care about end point too, but I can not find any other library or example code online.
Does anyone have example Host program (in visual Studio) that can work with ex_usb_hid.c demo??
Thank you for reading. |
|