From 019d2a03a4188b0e68396767e67e3c124ce924dc Mon Sep 17 00:00:00 2001 From: codestation Date: Tue, 7 Jan 2014 18:33:21 -0430 Subject: [PATCH] Send PTP_RC_GeneralError when cancelling object transfers. Moved back uint64 to unsigned long to avoid variable truncation with the vitamtp library. Astyle format dds.cpp. --- src/cmaclient.cpp | 4 +- src/cmaevent.cpp | 18 ++++-- src/cmaevent.h | 5 +- src/dds.cpp | 126 ++++++++++++++++++++++------------------- src/httpdownloader.cpp | 6 +- src/httpdownloader.h | 6 +- 6 files changed, 90 insertions(+), 75 deletions(-) diff --git a/src/cmaclient.cpp b/src/cmaclient.cpp index d65dabc..3d4725a 100644 --- a/src/cmaclient.cpp +++ b/src/cmaclient.cpp @@ -61,7 +61,8 @@ void CmaClient::connectUsb() usbwait.lock(); do { - if((vita = VitaMTP_Get_First_USB_Vita()) !=NULL) { + if((vita = VitaMTP_Get_First_USB_Vita()) != NULL) { + qDebug("Starting new USB connection"); processNewConnection(vita); } else { //TODO: replace this with an event-driven setup @@ -93,6 +94,7 @@ void CmaClient::connectWireless() do { if((vita = VitaMTP_Get_First_Wireless_Vita(&host, 0, CC::deviceRegistered, CC::generatePin, CC::registrationComplete)) != NULL) { + qDebug("Starting new wireless connection"); processNewConnection(vita); } else { mutex.lock(); diff --git a/src/cmaevent.cpp b/src/cmaevent.cpp index 80e18dc..b643246 100644 --- a/src/cmaevent.cpp +++ b/src/cmaevent.cpp @@ -446,6 +446,9 @@ void CmaEvent::vitaEventSendObject(vita_event_t *event, int eventId) quint16 ret = VitaMTP_SendObject_Callback(device, &parentHandle, &handle, &object->metadata, &CmaEvent::readCallback); if(ret != PTP_RC_OK) { qWarning("Sending of %s failed. Code: %04X", object->metadata.name, ret); + if(ret == PTP_ERROR_CANCEL) { + VitaMTP_ReportResult(device, eventId, PTP_RC_GeneralError); + } m_file->close(); delete m_file; return; @@ -945,23 +948,26 @@ void CmaEvent::vitaEventCheckExistance(vita_event_t *event, int eventId) VitaMTP_ReportResult(device, eventId, PTP_RC_OK); } -int CmaEvent::readCallback(unsigned char *data, int64_t wantlen, int64_t *gotlen) +int CmaEvent::readCallback(unsigned char *data, unsigned long wantlen, unsigned long *gotlen) { - *gotlen = m_file->read((char *)data, wantlen); + int ret = m_file->read((char *)data, wantlen); - if(*gotlen == -1) { - return -1; + if(ret != -1) { + *gotlen = ret; + ret = PTP_RC_OK; } - return PTP_RC_OK; + return ret; } -int CmaEvent::writeCallback(const unsigned char *data, int64_t size, int64_t *written) +int CmaEvent::writeCallback(const unsigned char *data, unsigned long size, unsigned long *written) { int ret = m_file->write((const char *)data, size); + if(ret != -1) { *written = ret; ret = PTP_RC_OK; } + return ret; } diff --git a/src/cmaevent.h b/src/cmaevent.h index 6e21aea..e2f1d98 100644 --- a/src/cmaevent.h +++ b/src/cmaevent.h @@ -63,9 +63,8 @@ private: void vitaEventSendObjectMetadataItems(vita_event_t *event, int eventId); void vitaEventSendNPAccountInfo(vita_event_t *event, int eventId); - static int readCallback(unsigned char *data, int64_t wantlen, int64_t *gotlen); - static int writeCallback(const unsigned char *data, int64_t size, int64_t *written); - static int readHTTPCallback(unsigned char *data, int64_t wantlen, int64_t *gotlen); + static int readCallback(unsigned char *data, unsigned long wantlen, unsigned long *gotlen); + static int writeCallback(const unsigned char *data, unsigned long size, unsigned long *written); void processEvent(); bool isActive(); diff --git a/src/dds.cpp b/src/dds.cpp index 9089a37..58d70b0 100644 --- a/src/dds.cpp +++ b/src/dds.cpp @@ -1,5 +1,5 @@ /* This file is part of the KDE project - Copyright (C) 2003 Ignacio Castaño + Copyright (C) 2003 Ignacio Castaño This program is free software; you can redistribute it and/or modify it under the terms of the Lesser GNU General Public @@ -49,13 +49,11 @@ typedef quint8 uchar; #define VERTICAL 2 #define CUBE_LAYOUT HORIZONTAL -struct Color8888 -{ +struct Color8888 { uchar r, g, b, a; }; -union Color565 -{ +union Color565 { struct { ushort b : 5; ushort g : 6; @@ -223,7 +221,7 @@ static bool IsValid( const DDSHeader & header ) } - // Get supported type. We currently support 10 different types. +// Get supported type. We currently support 10 different types. static DDSType GetType( const DDSHeader & header ) { if( header.pf.flags & DDPF_RGB ) { @@ -234,8 +232,7 @@ static DDSType GetType( const DDSHeader & header ) case 32: return DDS_A8R8G8B8; } - } - else { + } else { switch( header.pf.bitcount ) { case 16: return DDS_R5G6B5; @@ -243,8 +240,7 @@ static DDSType GetType( const DDSHeader & header ) return DDS_R8G8B8; } } - } - else if( header.pf.flags & DDPF_FOURCC ) { + } else if( header.pf.flags & DDPF_FOURCC ) { switch( header.pf.fourcc ) { case FOURCC_DXT1: return DDS_DXT1; @@ -388,14 +384,12 @@ static QDataStream & operator>> ( QDataStream & s, Color565 & c ) } -struct BlockDXT -{ +struct BlockDXT { Color565 col0; Color565 col1; uchar row[4]; - void GetColors( Color8888 color_array[4] ) - { + void GetColors( Color8888 color_array[4] ) { color_array[0].r = (col0.c.r << 3) | (col0.c.r >> 2); color_array[0].g = (col0.c.g << 2) | (col0.c.g >> 4); color_array[0].b = (col0.c.b << 3) | (col0.c.b >> 2); @@ -417,8 +411,7 @@ struct BlockDXT color_array[3].g = (2 * color_array[1].g + color_array[0].g) / 3; color_array[3].b = (2 * color_array[1].b + color_array[0].b) / 3; color_array[3].a = 0xFF; - } - else { + } else { // Three-color block: derive the other color. color_array[2].r = (color_array[0].r + color_array[1].r) / 2; color_array[2].g = (color_array[0].g + color_array[1].g) / 2; @@ -454,14 +447,12 @@ struct BlockDXTAlphaLinear { uchar alpha1; uchar bits[6]; - void GetAlphas( uchar alpha_array[8] ) - { + void GetAlphas( uchar alpha_array[8] ) { alpha_array[0] = alpha0; alpha_array[1] = alpha1; // 8-alpha or 6-alpha block? - if( alpha_array[0] > alpha_array[1] ) - { + if( alpha_array[0] > alpha_array[1] ) { // 8-alpha block: derive the other 6 alphas. // 000 = alpha_0, 001 = alpha_1, others are interpolated @@ -471,9 +462,7 @@ struct BlockDXTAlphaLinear { alpha_array[5] = ( 3 * alpha0 + 4 * alpha1) / 7; // Bit code 101 alpha_array[6] = ( 2 * alpha0 + 5 * alpha1) / 7; // Bit code 110 alpha_array[7] = ( alpha0 + 6 * alpha1) / 7; // Bit code 111 - } - else - { + } else { // 6-alpha block: derive the other alphas. // 000 = alpha_0, 001 = alpha_1, others are interpolated @@ -486,27 +475,40 @@ struct BlockDXTAlphaLinear { } } - void GetBits( uchar bit_array[16] ) - { + void GetBits( uchar bit_array[16] ) { // Split 24 packed bits into 8 bytes, 3 bits at a time. uint b = bits[0] | bits[1] << 8 | bits[2] << 16; - bit_array[0] = uchar(b & 0x07); b >>= 3; - bit_array[1] = uchar(b & 0x07); b >>= 3; - bit_array[2] = uchar(b & 0x07); b >>= 3; - bit_array[3] = uchar(b & 0x07); b >>= 3; - bit_array[4] = uchar(b & 0x07); b >>= 3; - bit_array[5] = uchar(b & 0x07); b >>= 3; - bit_array[6] = uchar(b & 0x07); b >>= 3; + bit_array[0] = uchar(b & 0x07); + b >>= 3; + bit_array[1] = uchar(b & 0x07); + b >>= 3; + bit_array[2] = uchar(b & 0x07); + b >>= 3; + bit_array[3] = uchar(b & 0x07); + b >>= 3; + bit_array[4] = uchar(b & 0x07); + b >>= 3; + bit_array[5] = uchar(b & 0x07); + b >>= 3; + bit_array[6] = uchar(b & 0x07); + b >>= 3; bit_array[7] = uchar(b & 0x07); b = bits[3] | bits[4] << 8 | bits[5] << 16; - bit_array[8] = uchar(b & 0x07); b >>= 3; - bit_array[9] = uchar(b & 0x07); b >>= 3; - bit_array[10] = uchar(b & 0x07); b >>= 3; - bit_array[11] = uchar(b & 0x07); b >>= 3; - bit_array[12] = uchar(b & 0x07); b >>= 3; - bit_array[13] = uchar(b & 0x07); b >>= 3; - bit_array[14] = uchar(b & 0x07); b >>= 3; + bit_array[8] = uchar(b & 0x07); + b >>= 3; + bit_array[9] = uchar(b & 0x07); + b >>= 3; + bit_array[10] = uchar(b & 0x07); + b >>= 3; + bit_array[11] = uchar(b & 0x07); + b >>= 3; + bit_array[12] = uchar(b & 0x07); + b >>= 3; + bit_array[13] = uchar(b & 0x07); + b >>= 3; + bit_array[14] = uchar(b & 0x07); + b >>= 3; bit_array[15] = uchar(b & 0x07); } }; @@ -603,7 +605,9 @@ static bool LoadDXT3( QDataStream & s, const DDSHeader & header, QImage & img ) static bool LoadDXT2( QDataStream & s, const DDSHeader & header, QImage & img ) { - if( !LoadDXT3(s, header, img) ) return false; + if( !LoadDXT3(s, header, img) ) { + return false; + } //UndoPremultiplyAlpha(img); return true; } @@ -658,7 +662,9 @@ static bool LoadDXT5( QDataStream & s, const DDSHeader & header, QImage & img ) } static bool LoadDXT4( QDataStream & s, const DDSHeader & header, QImage & img ) { - if( !LoadDXT5(s, header, img) ) return false; + if( !LoadDXT5(s, header, img) ) { + return false; + } //UndoPremultiplyAlpha(img); return true; } @@ -771,7 +777,8 @@ static bool LoadATI2( QDataStream & s, const DDSHeader & header, QImage & img ) typedef bool (* TextureLoader)( QDataStream & s, const DDSHeader & header, QImage & img ); // Get an appropriate texture loader for the given type. -static TextureLoader GetTextureLoader( DDSType type ) { +static TextureLoader GetTextureLoader( DDSType type ) +{ switch( type ) { case DDS_A8R8G8B8: return LoadA8R8G8B8; @@ -826,7 +833,8 @@ static bool LoadTexture( QDataStream & s, const DDSHeader & header, QImage & img } -static int FaceOffset( const DDSHeader & header ) { +static int FaceOffset( const DDSHeader & header ) +{ DDSType type = GetType( header ); @@ -843,8 +851,7 @@ static int FaceOffset( const DDSHeader & header ) { w >>= 1; h >>= 1; } while( --mipmap ); - } - else { + } else { int multiplier = header.pf.bitcount / 8; do { int face_size = w * h * multiplier; @@ -858,18 +865,18 @@ static int FaceOffset( const DDSHeader & header ) { } #if CUBE_LAYOUT == HORIZONTAL - static int face_offset[6][2] = { {2, 1}, {0, 1}, {1, 0}, {1, 2}, {1, 1}, {3, 1} }; +static int face_offset[6][2] = { {2, 1}, {0, 1}, {1, 0}, {1, 2}, {1, 1}, {3, 1} }; #elif CUBE_LAYOUT == VERTICAL - static int face_offset[6][2] = { {2, 1}, {0, 1}, {1, 0}, {1, 2}, {1, 1}, {1, 3} }; +static int face_offset[6][2] = { {2, 1}, {0, 1}, {1, 0}, {1, 2}, {1, 1}, {1, 3} }; #endif - static int face_flags[6] = { - DDSCAPS2_CUBEMAP_POSITIVEX, - DDSCAPS2_CUBEMAP_NEGATIVEX, - DDSCAPS2_CUBEMAP_POSITIVEY, - DDSCAPS2_CUBEMAP_NEGATIVEY, - DDSCAPS2_CUBEMAP_POSITIVEZ, - DDSCAPS2_CUBEMAP_NEGATIVEZ - }; +static int face_flags[6] = { + DDSCAPS2_CUBEMAP_POSITIVEX, + DDSCAPS2_CUBEMAP_NEGATIVEX, + DDSCAPS2_CUBEMAP_POSITIVEY, + DDSCAPS2_CUBEMAP_NEGATIVEY, + DDSCAPS2_CUBEMAP_POSITIVEZ, + DDSCAPS2_CUBEMAP_NEGATIVEZ +}; // Load unwrapped cube map. static bool LoadCubeMap( QDataStream & s, const DDSHeader & header, QImage & img ) @@ -956,8 +963,9 @@ bool canReadDDS(QIODevice *device) qint64 readBytes = device->read(head, sizeof(head)); if (readBytes != sizeof(head)) { if (device->isSequential()) { - while (readBytes > 0) + while (readBytes > 0) { device->ungetChar(head[readBytes-- - 1]); + } } else { device->seek(oldPos); } @@ -965,8 +973,9 @@ bool canReadDDS(QIODevice *device) } if (device->isSequential()) { - while (readBytes > 0) + while (readBytes > 0) { device->ungetChar(head[readBytes-- - 1]); + } } else { device->seek(oldPos); } @@ -1018,8 +1027,7 @@ bool loadDDS(const QString &filename, QImage *image) if( IsCubeMap( header ) ) { result = LoadCubeMap( s, header, *image ); - } - else { + } else { result = LoadTexture( s, header, *image ); } diff --git a/src/httpdownloader.cpp b/src/httpdownloader.cpp index c28672d..41c2510 100644 --- a/src/httpdownloader.cpp +++ b/src/httpdownloader.cpp @@ -30,8 +30,8 @@ QMutex HTTPDownloader::dataAvailable; QMutex HTTPDownloader::dataRead; char *HTTPDownloader::buffer = NULL; -qint64 HTTPDownloader::bufferSize = 0; -qint64 HTTPDownloader::downloadLeft = 0; +unsigned long HTTPDownloader::bufferSize = 0; +unsigned long HTTPDownloader::downloadLeft = 0; HTTPDownloader::HTTPDownloader(const QString &url, QObject *parent) : QObject(parent), remote_url(url), firstRead(true) @@ -111,7 +111,7 @@ void HTTPDownloader::readyRead() dataRead.unlock(); } -int HTTPDownloader::readCallback(unsigned char *data, int64_t wantlen, int64_t *gotlen) +int HTTPDownloader::readCallback(unsigned char *data, unsigned long wantlen, unsigned long *gotlen) { if(!dataAvailable.tryLock(30000)) { qWarning("Connection timeout while receiving data from network, aborting"); diff --git a/src/httpdownloader.h b/src/httpdownloader.h index f859bc0..2dd585b 100644 --- a/src/httpdownloader.h +++ b/src/httpdownloader.h @@ -40,7 +40,7 @@ signals: public slots: void downloadFile(); - static int readCallback(unsigned char *data, int64_t wantlen, int64_t *gotlen); + static int readCallback(unsigned char *data, unsigned long wantlen, unsigned long *gotlen); void metadataChanged(); void readyRead(); void error(QNetworkReply::NetworkError); @@ -58,8 +58,8 @@ private: volatile static qint64 m_contentLength; static char *buffer; - static qint64 bufferSize; - static qint64 downloadLeft; + static unsigned long bufferSize; + static unsigned long downloadLeft; }; #endif // HTTPDOWNLOADER_H