diff --git a/cmaclient.cpp b/cmaclient.cpp index 364e6ff..19897d6 100644 --- a/cmaclient.cpp +++ b/cmaclient.cpp @@ -176,9 +176,8 @@ void CmaClient::enterEventLoop(vita_device_t *device) // this one shuold be processed inmediately } else if(event.Code == PTP_EC_VITA_RequestCancelTask) { - quint32 eventIdToCancel = event.Param2; - qDebug("Cancelling event %d", eventIdToCancel); - VitaMTP_CancelTask(device, eventIdToCancel); + eventLoop.vitaEventCancelTask(&event, event.Param1); + qDebug("Ended event, code: 0x%x, id: %d", event.Code, event.Param1); continue; } diff --git a/cmaevent.cpp b/cmaevent.cpp index e3b8489..c6f2119 100644 --- a/cmaevent.cpp +++ b/cmaevent.cpp @@ -298,8 +298,9 @@ void CmaEvent::vitaEventSendObjectMetadataItems(vita_event_t *event, int eventId metadata->next_metadata = NULL; qDebug("Sending metadata for OHFI %d (%s)", ohfi, metadata->path); - if(VitaMTP_SendObjectMetadata(device, eventId, metadata) != PTP_RC_OK) { - qWarning("Error sending metadata"); + quint16 ret = VitaMTP_SendObjectMetadata(device, eventId, metadata); + if(ret != PTP_RC_OK) { + qWarning("Error sending metadata. Code: %04X", ret); } else { VitaMTP_ReportResult(device, eventId, PTP_RC_OK); } @@ -318,6 +319,24 @@ void CmaEvent::vitaEventUnimplementated(vita_event_t *event, int eventId) qWarning("Param1: 0x%08X, Param2: 0x%08X, Param3: 0x%08X", event->Param1, event->Param2, event->Param3); } +void CmaEvent::vitaEventCancelTask(vita_event_t *event, int eventId) +{ + qDebug("Event recieved in %s, code: 0x%x, id: %d", Q_FUNC_INFO, event->Code, eventId); + + quint32 eventIdToCancel = event->Param2; + qDebug("Cancelling event %d", eventIdToCancel); + quint16 ret = VitaMTP_CancelTask(device, eventIdToCancel); + + // wait until the current event finishes so we can report the result to the device + + qDebug("Waiting for send event to finish"); + mutex.lock(); + if(ret == PTP_RC_OK) { + VitaMTP_ReportResult(device, eventId, PTP_RC_OK); + } + mutex.unlock(); +} + void CmaEvent::vitaEventSendNumOfObject(vita_event_t *event, int eventId) { qDebug("Event recieved in %s, code: 0x%x, id: %d", Q_FUNC_INFO, event->Code, eventId); @@ -409,8 +428,10 @@ void CmaEvent::vitaEventSendObject(vita_event_t *event, int eventId) qDebug("Sending %s of %lu bytes to device", object->metadata.name, len); qDebug("OHFI %d with handle 0x%08X", ohfi, parentHandle); - if(VitaMTP_SendObject(device, &parentHandle, &handle, &object->metadata, data) != PTP_RC_OK) { - qWarning("Sending of %s failed.", object->metadata.name); + VitaMTP_RegisterCancelEventId(eventId); + quint16 ret = VitaMTP_SendObject(device, &parentHandle, &handle, &object->metadata, data); + if(ret != PTP_RC_OK) { + qWarning("Sending of %s failed. Code: %04X", object->metadata.name, ret); file.unmap(data); return; } diff --git a/cmaevent.h b/cmaevent.h index d94f3b4..c0a93eb 100644 --- a/cmaevent.h +++ b/cmaevent.h @@ -34,6 +34,8 @@ class CmaEvent : public QObject public: explicit CmaEvent(vita_device_t *s_device); + void vitaEventCancelTask(vita_event_t *event, int eventId); + // don't make the db reference static static Database *db;