diff options
Diffstat (limited to 'tools/atmega324u_usbhid/rawhid_testinterface.c')
-rw-r--r-- | tools/atmega324u_usbhid/rawhid_testinterface.c | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/tools/atmega324u_usbhid/rawhid_testinterface.c b/tools/atmega324u_usbhid/rawhid_testinterface.c new file mode 100644 index 0000000..386fa9e --- /dev/null +++ b/tools/atmega324u_usbhid/rawhid_testinterface.c @@ -0,0 +1,75 @@ +#include <stdio.h> +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <sys/time.h> +#include <unistd.h> +#if defined(OS_LINUX) || defined(OS_MACOSX) +#include <sys/ioctl.h> +#include <termios.h> +#elif defined(OS_WINDOWS) +#include <conio.h> +#endif + +#include "hid.h" + + +void sendstr(char * tosend) +{ + rawhid_send(0, tosend, strlen(tosend),1000); +} + +int mtime_diff(struct timeval high,struct timeval low) +{ + int result=1000*(high.tv_sec-low.tv_sec); + result+=high.tv_usec/1000-low.tv_usec/1000; + return result; +} + +#define BUF_LEN 64 + +int main (int argc, char *argv[]) +{ + int r, num; + char buf[BUF_LEN]; + // C-based example is 16C0:0480:FFAB:0200 + unsigned int attemtps = 100; + while(attemtps--) + { + r = rawhid_open(1, 0x16C0, 0x0481, 0xFFAB, 0x0200); + if (r > 0) + break; + else + sleep(1.0); + } + if (r <= 0) + { + printf("no rawhid device found\n"); + return -1; + } + printf("found rawhid device\n\n"); + //~ printf("Clearing Buffer\n"); + //~ sendstr("c"); // clear the buffer + //~ struct timeval start_time,stop_time; + //~ gettimeofday(&start_time,NULL); + //~ gettimeofday(&stop_time,NULL); + //~ while (mtime_diff(stop_time,start_time)<1000) { + // check if any Raw HID packet has arrived + + while (1) + { + num = rawhid_recv(0, buf, BUF_LEN, 250); + if (num < 0) + { + printf("\nerror reading, device went offline\n"); + rawhid_close(0); + return 0; + } + if (num > 0) + { + buf[num]='\0'; + printf("%s\n",buf); + fflush(0); + } + } +} |