1/* ---------------------------------------------------------------------------- 2 * "THE BEER-WARE LICENSE" (Revision 42) (by Poul-Henning Kamp): 3 * <joerg@FreeBSD.ORG> wrote this file. As long as you retain this notice you 4 * can do whatever you want with this stuff. If we meet some day, and you think 5 * this stuff is worth it, you can buy me a beer in return. Joerg Wunsch 6 * ---------------------------------------------------------------------------- 7 * 8 * $FreeBSD$ 9 */ 10 11/* 12 * Helper functions common to all examples 13 */ 14 15#include <stdio.h> 16#include <stdint.h> 17#include <stdlib.h> 18 19#include <libusb20.h> 20#include <libusb20_desc.h> 21 22#include "aux.h" 23 24/* 25 * Return a textual description for error "r". 26 */ 27const char * 28usb_error(enum libusb20_error r) 29{ 30 const char *msg = "UNKNOWN"; 31 32 switch (r) 33 { 34 case LIBUSB20_SUCCESS: 35 msg = "success"; 36 break; 37 38 case LIBUSB20_ERROR_IO: 39 msg = "IO error"; 40 break; 41 42 case LIBUSB20_ERROR_INVALID_PARAM: 43 msg = "Invalid parameter"; 44 break; 45 46 case LIBUSB20_ERROR_ACCESS: 47 msg = "Access denied"; 48 break; 49 50 case LIBUSB20_ERROR_NO_DEVICE: 51 msg = "No such device"; 52 break; 53 54 case LIBUSB20_ERROR_NOT_FOUND: 55 msg = "Entity not found"; 56 break; 57 58 case LIBUSB20_ERROR_BUSY: 59 msg = "Resource busy"; 60 break; 61 62 case LIBUSB20_ERROR_TIMEOUT: 63 msg = "Operation timed out"; 64 break; 65 66 case LIBUSB20_ERROR_OVERFLOW: 67 msg = "Overflow"; 68 break; 69 70 case LIBUSB20_ERROR_PIPE: 71 msg = "Pipe error"; 72 break; 73 74 case LIBUSB20_ERROR_INTERRUPTED: 75 msg = "System call interrupted"; 76 break; 77 78 case LIBUSB20_ERROR_NO_MEM: 79 msg = "Insufficient memory"; 80 break; 81 82 case LIBUSB20_ERROR_NOT_SUPPORTED: 83 msg = "Operation not supported"; 84 break; 85 86 case LIBUSB20_ERROR_OTHER: 87 msg = "Other error"; 88 break; 89 } 90 91 return msg; 92} 93 94/* 95 * Print "len" bytes from "buf" in hex, followed by an ASCII 96 * representation (somewhat resembling the output of hd(1)). 97 */ 98void 99print_formatted(uint8_t *buf, uint32_t len) 100{ 101 int i, j; 102 103 for (j = 0; j < len; j += 16) 104 { 105 printf("%02x: ", j); 106 107 for (i = 0; i < 16 && i + j < len; i++) 108 printf("%02x ", buf[i + j]); 109 printf(" "); 110 for (i = 0; i < 16 && i + j < len; i++) 111 { 112 uint8_t c = buf[i + j]; 113 if(c >= ' ' && c <= '~') 114 printf("%c", (char)c); 115 else 116 putchar('.'); 117 } 118 putchar('\n'); 119 } 120} 121