Ejemplo n.º 1
0
hid_return hid_dump_tree(FILE* const out, HIDInterface* const hidif)
{
  if (!hid_is_opened(hidif)) {
    ERROR("cannot dump tree of unopened HIDinterface.");
    return HID_RET_DEVICE_NOT_OPENED;
  }

  if (!out) {
    ERROR("cannot dump HIDinterface tree of USB device %s to NULL output stream.",
        hidif->id);
    return HID_RET_INVALID_PARAMETER;
  }
  
  hid_reset_parser(hidif);
  
  TRACE("iterating the parse tree for USB device %s...", hidif->id);
      
  unsigned int i = 0;

  fprintf(out, "parse tree of HIDInterface %s:\n", hidif->id);

  while (HIDParse(hidif->hid_parser, hidif->hid_data)) {
    fprintf(out, "  path: ");
    for (i = 0; i < hidif->hid_data->Path.Size; ++i) {
      fprintf(out, "0x%08x", (hidif->hid_data->Path.Node[i].UPage << 16)
          | hidif->hid_data->Path.Node[i].Usage);
      if ((signed)i < hidif->hid_data->Path.Size - 1) fputc('.', out);
    }
    fprintf(out, "; type: 0x%02x\n", hidif->hid_data->Type);
  }

  hid_reset_parser(hidif);

  return HID_RET_SUCCESS;
}
Ejemplo n.º 2
0
/* -------------------------------------------------------------------------- */
static void usbhid_get_descriptor(t_usbhid *x)
{
	if(x->debug_level) post("usbhid_get");
	unsigned int i = 0;
	t_int input_size = 0;
	t_int output_size = 0;
	t_int feature_size = 0;
    char buf[MAXPDSTRING];

	if (!hid_is_opened(x->x_hidinterface)) {
		error("[usbget] cannot dump tree of unopened HIDinterface.");
	}
	else 
	{
		post("[usbhid] parse tree of HIDInterface %s:\n", x->x_hidinterface->id);
//		reset_output(x);
		while (HIDParse(x->x_hidinterface->hid_parser, x->x_hidinterface->hid_data)) {
            reset_output(x);
//			add_symbol_to_output(x, gensym("path"));
			switch(x->x_hidinterface->hid_data->Type)
			{
			case 0x80: 
				add_symbol_to_output(x, gensym("input")); 
				input_size = input_size + x->x_hidinterface->hid_data->Size;
				break;
			case 0x90: 
				add_symbol_to_output(x, gensym("output")); 
				output_size = output_size + x->x_hidinterface->hid_data->Size;
				break;
			case 0xb0: 
				add_symbol_to_output(x, gensym("feature")); 
				feature_size = feature_size + x->x_hidinterface->hid_data->Size;
				break;
			default: add_symbol_to_output(x, gensym("UNKNOWN_TYPE"));
			}
			add_float_to_output(x, x->x_hidinterface->hid_data->Size);
			add_float_to_output(x, x->x_hidinterface->hid_data->Offset);
            add_symbol_to_output(x, gensym("path"));
			for (i = 0; i < x->x_hidinterface->hid_data->Path.Size; ++i) {
//                sprintf(buf, "0x%04x", x->x_hidinterface->hid_data->Path.Node[i].UPage);
//				add_symbol_to_output(x, gensym(buf));
//                sprintf(buf, "0x%04x", x->x_hidinterface->hid_data->Path.Node[i].Usage);
//				add_symbol_to_output(x, gensym(buf));
//                post("0x%04x%04x",x->x_hidinterface->hid_data->Path.Node[i].UPage,
//                     x->x_hidinterface->hid_data->Path.Node[i].Usage);
			}
			add_symbol_to_output(x, gensym("logical"));
			add_float_to_output(x, x->x_hidinterface->hid_data->LogMin);
			add_float_to_output(x, x->x_hidinterface->hid_data->LogMax);
            outlet_anything(x->x_status_outlet, gensym("element"), 
                            x->output_count, x->output);
		}
		reset_output(x);
//		add_symbol_to_output(x, gensym("totalSize"));
		add_float_to_output(x, input_size);
		add_float_to_output(x, output_size);
		add_float_to_output(x, feature_size);
		outlet_anything(x->x_status_outlet, gensym("totalSize"), 
						x->output_count, x->output);
//		outlet_anything(x->x_status_outlet, gensym("device"), 
//						x->output_count, x->output);
	}
}