void fh_debug(FILE *stream, js_val *val, int indent, bool newline) { switch (val->type) { case T_BOOLEAN: fprintf(stream, "%s", !val->boolean.val ? "false" : "true"); break; case T_NUMBER: debug_num(stream, val); break; case T_STRING: if (fh->opt_interactive) cfprintf(stream, ANSI_YELLOW, "'%s'", val->string.ptr); else fprintf(stream, "%s", val->string.ptr); break; case T_NULL: cfprintf(stream, ANSI_GRAY, "null"); break; case T_UNDEF: cfprintf(stream, ANSI_GRAY, "undefined"); break; case T_OBJECT: if (IS_ARR(val)) debug_arr(stream, val, indent); else if (IS_FUNC(val)) cfprintf(stream, ANSI_BLUE, "[Function]"); else if (IS_DATE(val)) fprintf(stream, "[Date %ld]", (long)val->object.primitive->number.val); else debug_obj(stream, val, indent, false); break; } if (newline) fprintf(stream, "\n"); }
void read_pedals() { int r = 0, i = 0; unsigned char query[8] = {0x01, 0x82, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00}; unsigned char response[8]; for (i = 0 ; i < 3 ; i++) { query[3] = i + 1; usb_write(query); r = hid_read(dev, response, 8); if (r < 0) { fatal("error reading data (%ls)", hid_error(dev)); } printf("[switch %d]: ", i + 1); switch (response[1]) { case 0: printf("unconfigured"); break; case 1: case 0x81: print_key(response); break; case 2: print_mouse(response); break; case 3: print_key(response); printf(" "); print_mouse(response); break; case 4: print_string(response); break; default: fprintf(stderr, "Unknown response:\n"); debug_arr(response, 8); return; } printf("\n"); } }