/** * cd_sensor_munki_refresh_state_transfer_cb: **/ static void cd_sensor_munki_refresh_state_transfer_cb (struct libusb_transfer *transfer) { CdSensor *sensor = CD_SENSOR (transfer->user_data); guint8 *reply = transfer->buffer + LIBUSB_CONTROL_SETUP_SIZE; if (transfer->status != LIBUSB_TRANSFER_COMPLETED) { g_warning ("did not succeed"); goto out; } /* sensor position and button task */ switch (reply[0]) { case MUNKI_DIAL_POSITION_PROJECTOR: cd_sensor_set_mode (sensor, CD_SENSOR_CAP_PROJECTOR); break; case MUNKI_DIAL_POSITION_SURFACE: cd_sensor_set_mode (sensor, CD_SENSOR_CAP_PRINTER); break; case MUNKI_DIAL_POSITION_CALIBRATION: cd_sensor_set_mode (sensor, CD_SENSOR_CAP_CALIBRATION); break; case MUNKI_DIAL_POSITION_AMBIENT: cd_sensor_set_mode (sensor, CD_SENSOR_CAP_AMBIENT); break; case MUNKI_DIAL_POSITION_UNKNOWN: cd_sensor_set_mode (sensor, CD_SENSOR_CAP_UNKNOWN); break; default: break; } g_debug ("dial now %s, button now %s", cd_sensor_cap_to_string (cd_sensor_get_mode (sensor)), munki_button_state_to_string (reply[1])); cd_sensor_debug_data (CD_SENSOR_DEBUG_MODE_RESPONSE, transfer->buffer + LIBUSB_CONTROL_SETUP_SIZE, transfer->actual_length); out: g_free (transfer->buffer); }
/** * cd_parse_beagle_process_entry_colormunki: **/ static void cd_parse_beagle_process_entry_colormunki (CdParseEntry *entry) { gchar **tok; guint j; guint8 cmd; guint tok_len; GString *output; /* set ep description */ entry->ep_description = munki_endpoint_to_string (entry->ep); output = g_string_new (""); /* only know how to parse 8 bytes */ tok = g_strsplit (entry->summary, " ", -1); tok_len = g_strv_length (tok); /* status */ if (entry->ep == MUNKI_EP_CONTROL && entry->direction == CD_PARSE_ENTRY_DIRECTION_REPLY && tok_len == 2) { /* dial position */ cmd = g_ascii_strtoll (tok[0], NULL, 16); g_string_append_printf (output, "%s(dial-position-%s) ", tok[0], munki_dial_position_to_string (cmd)); /* button value */ cmd = g_ascii_strtoll (tok[1], NULL, 16); g_string_append_printf (output, "%s(button-state-%s)", tok[1], munki_button_state_to_string (cmd)); goto out; } /* event */ if (entry->ep == MUNKI_EP_EVENT && entry->direction == CD_PARSE_ENTRY_DIRECTION_REPLY && tok_len == 8) { g_print ("process 8: %s\n", entry->summary); /* cmd */ cmd = g_ascii_strtoll (tok[0], NULL, 16); g_string_append_printf (output, "%s(%s) ", tok[0], munki_command_value_to_string (cmd)); for (j=1; j<8; j++) { cmd = g_ascii_strtoll (tok[j], NULL, 16); g_string_append_printf (output, "%02x ", cmd); } if (output->len > 1) g_string_set_size (output, output->len - 1); goto out; } /* unknown command */ for (j = 0; j < tok_len; j++) { cmd = g_ascii_strtoll (tok[j], NULL, 16); g_string_append_printf (output, "%02x ", cmd); } if (output->len > 1) g_string_set_size (output, output->len - 1); out: if (output != NULL) entry->summary_pretty = g_string_free (output, FALSE); g_strfreev (tok); }