diff --git a/src/data.c b/src/data.c index 1f7efa5..82e99f0 100644 --- a/src/data.c +++ b/src/data.c @@ -228,10 +228,9 @@ int ptp_parse_prop_value(struct PtpRuntime *r) { type = PTP_TC_UINT16; break; case 4: type = PTP_TC_UINT32; break; - case 0: - return -1; default: - ptp_panic("ptp_parse_prop_value: unknown data type size %d", ptp_get_payload_length(r)); + ptp_verbose_log("%s: unknown data type size %d - returning -1\n", __func__, ptp_get_payload_length(r)); + return -1; } int out; diff --git a/src/stuff.c b/src/stuff.c index 151ec31..3df4fd5 100644 --- a/src/stuff.c +++ b/src/stuff.c @@ -22,5 +22,42 @@ int ptp_list_devices(void) { printf("Model friendly name: '%s'\n", list->name); } + ptp_close(r); + + return 0; +} + +static struct PtpRuntime *ptp_connect_id(int id) { + struct PtpRuntime *r = ptp_new(PTP_USB); + struct PtpDeviceEntry *list = ptpusb_device_list(r); + + if (list == NULL) { + printf("No devices found\n"); + return 0; + } + + int i = 0; + for (; list != NULL; list = list->next) { + if (i == id) { + int rc = ptp_device_open(r, list); + if (rc) return NULL; + return r; + } + i++; + } + + ptp_close(r); + return NULL; +} + +int ptp_dump_device(void) { + struct PtpRuntime *r = ptp_connect_id(0); + + struct PtpDeviceInfo di; + char buffer[4096]; + ptp_get_device_info(r, &di); + ptp_device_info_json(&di, buffer, sizeof(buffer)); + printf("%s\n", (char*)buffer); + return 0; -} \ No newline at end of file +} diff --git a/src/transport.c b/src/transport.c index fd5868a..fa8c320 100644 --- a/src/transport.c +++ b/src/transport.c @@ -13,9 +13,15 @@ int ptp_send_packet(struct PtpRuntime *r, int length) { int sent = 0; while (1) { int max = length - sent; - if (r->max_packet_size != 512) ptp_panic("max packet size is not 512, %d", r->max_packet_size); if (max > r->max_packet_size) max = r->max_packet_size; - int rc = ptp_cmd_write(r, r->data + sent, max); + int rc; + if (r->connection_type == PTP_USB) { + rc = ptp_cmd_write(r, r->data + sent, max); + } else if (r->connection_type == PTP_IP_USB) { + rc = ptpip_cmd_write(r, r->data + sent, max); + } else { + ptp_panic("illegal connection_type"); + } if (rc < 0) { ptp_verbose_log("%s: %d\n", __func__, rc);