From 79177edfb2bb5e934c1630d723a0032c995942d7 Mon Sep 17 00:00:00 2001 From: Maurus Cuelenaere Date: Wed, 27 Aug 2008 23:07:08 +0000 Subject: [PATCH] MTP: * Add Win32 progress callback reporting support git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18355 a1c6a512-1295-4272-9138-f99709370657 --- utils/MTP/MTP_DLL.dll | Bin 90112 -> 90112 bytes utils/MTP/MTP_DLL/MTP_DLL.cpp | 2 +- utils/MTP/MTP_DLL/MTP_DLL.h | 6 +- utils/MTP/MTP_DLL/sendfirm_win.cpp | 230 +++++++++++++++++++---------- utils/MTP/MTP_DLL/stdafx.h | 18 +-- utils/MTP/sendfirm_win.c | 17 ++- 6 files changed, 178 insertions(+), 95 deletions(-) diff --git a/utils/MTP/MTP_DLL.dll b/utils/MTP/MTP_DLL.dll index 3f9b6c7a501e475d59d7171a091f4767e91d43dd..448dff430a7259f150040ad5acd74d7d038ad479 100755 GIT binary patch delta 9589 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 DAF+2C delta 8256 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, (BYTE*) abCert, sizeof(abCert), (BYTE*) abPVK, sizeof(abPVK)); - if SUCCEEDED(hr) - { - /* bind the authentication interface to the secure channel client */ - m_pSacClient->SetInterface(pICompAuth); + /* get an authentication interface */ + hr = CoCreateInstance(CLSID_MediaDevMgr, NULL, CLSCTX_ALL ,IID_IComponentAuthenticate, (void **)&pICompAuth); + if SUCCEEDED(hr) + { + /* create a secure channel client certificate */ + hr = m_pSacClient->SetCertificate(SAC_CERT_V1, (BYTE*) abCert, sizeof(abCert), (BYTE*) abPVK, sizeof(abPVK)); + if SUCCEEDED(hr) + { + /* bind the authentication interface to the secure channel client */ + m_pSacClient->SetInterface(pICompAuth); - /* trigger communication */ - hr = m_pSacClient->Authenticate(SAC_PROTOCOL_V1); - if SUCCEEDED(hr) - { - /* get main interface to media device manager */ - hr = pICompAuth->QueryInterface(IID_IWMDeviceManager2, (void**)&m_pIdvMgr); - if SUCCEEDED(hr) - { - /* enumerate devices... */ - IWMDMEnumDevice *pIEnumDev; - hr = m_pIdvMgr->EnumDevices2(&pIEnumDev); - if SUCCEEDED(hr) + /* trigger communication */ + hr = m_pSacClient->Authenticate(SAC_PROTOCOL_V1); + if SUCCEEDED(hr) + { + /* get main interface to media device manager */ + hr = pICompAuth->QueryInterface(IID_IWMDeviceManager2, (void**)&m_pIdvMgr); + if SUCCEEDED(hr) + { + /* enumerate devices... */ + IWMDMEnumDevice *pIEnumDev; + hr = m_pIdvMgr->EnumDevices2(&pIEnumDev); + if SUCCEEDED(hr) { - hr = pIEnumDev->Reset(); /* Next will now return the first device */ - if SUCCEEDED(hr) + hr = pIEnumDev->Reset(); /* Next will now return the first device */ + if SUCCEEDED(hr) { - IWMDMDevice3* pIDevice; - unsigned long ulNumFetched; - hr = pIEnumDev->Next(1, (IWMDMDevice **)&pIDevice, &ulNumFetched); - while (SUCCEEDED(hr) && (hr != S_FALSE)) + IWMDMDevice3* pIDevice; + unsigned long ulNumFetched; + hr = pIEnumDev->Next(1, (IWMDMDevice **)&pIDevice, &ulNumFetched); + while (SUCCEEDED(hr) && (hr != S_FALSE)) { -#if 0 - /* output device name */ - wchar_t pwsString[256]; - hr = pIDevice->GetName(pwsString, 256); - if SUCCEEDED(hr) - wprintf(L"Found device %s\n", pwsString); -#endif - - /* get storage info */ - DWORD tempDW; - pIDevice->GetType(&tempDW); - if (tempDW & WMDM_DEVICE_TYPE_STORAGE) + /* get storage info */ + DWORD tempDW; + pIDevice->GetType(&tempDW); + if (tempDW & WMDM_DEVICE_TYPE_STORAGE) { - IWMDMEnumStorage *pIEnumStorage = NULL; - IWMDMStorage *pIStorage = NULL; - IWMDMStorage3 *pIFileStorage = NULL; - hr = pIDevice->EnumStorage(&pIEnumStorage); - if SUCCEEDED(hr) + IWMDMEnumStorage *pIEnumStorage = NULL; + IWMDMStorage *pIStorage = NULL; + IWMDMStorage3 *pIFileStorage = NULL; + hr = pIDevice->EnumStorage(&pIEnumStorage); + if SUCCEEDED(hr) { - pIEnumStorage->Reset(); - hr = pIEnumStorage->Next(1, (IWMDMStorage **)&pIStorage, &ulNumFetched); - while (SUCCEEDED(hr) && (hr != S_FALSE)) + pIEnumStorage->Reset(); + hr = pIEnumStorage->Next(1, (IWMDMStorage **)&pIStorage, &ulNumFetched); + while (SUCCEEDED(hr) && (hr != S_FALSE)) { IWMDMStorage3 *pNewStorage; hr = pIStorage->QueryInterface(IID_IWMDMStorage3, (void **)&pNewStorage); @@ -113,14 +125,15 @@ __declspec(dllexport) bool send_fw(LPWSTR file, int filesize) if (SUCCEEDED(hr)) { IWMDMStorage *pNewObject = NULL; + CProgressHelper *progress = new CProgressHelper(callback); hr = pIWMDMStorageControl->Insert3( - WMDM_MODE_BLOCK | WMDM_CONTENT_FILE, + WMDM_MODE_BLOCK | WMDM_CONTENT_FILE | WMDM_MODE_PROGRESS, 0, file, NULL, NULL, - NULL, + (callback == NULL ? NULL : (IWMDMProgress*)progress), pIWMDMMetaData, NULL, (IWMDMStorage **)&pNewObject); @@ -135,27 +148,88 @@ __declspec(dllexport) bool send_fw(LPWSTR file, int filesize) } } } - } - } - pIEnumStorage->Release(); - } + } + } + pIEnumStorage->Release(); + } - /* move to next device */ - if(!return_value) - hr = pIEnumDev->Next(1, (IWMDMDevice **)&pIDevice, &ulNumFetched); - } - pIEnumDev->Release(); - } - m_pIdvMgr->Release(); - } - pICompAuth->Release(); - } - } - } - } + /* move to next device */ + if(!return_value) + hr = pIEnumDev->Next(1, (IWMDMDevice **)&pIDevice, &ulNumFetched); + } + pIEnumDev->Release(); + } + m_pIdvMgr->Release(); + } + pICompAuth->Release(); + } + } + } + } - CoUninitialize(); + CoUninitialize(); - return return_value; + return return_value; } } + + +CProgressHelper::CProgressHelper( void (*callback)(unsigned int progress, unsigned int max) ) +{ + m_cur_ticks = 0; + m_max_ticks = 0; + m_counter = 0; + + m_callback = callback; +} + +CProgressHelper::~CProgressHelper() +{ +} + +HRESULT CProgressHelper::Begin( DWORD dwEstimatedTicks ) +{ + m_max_ticks = dwEstimatedTicks; + + return S_OK; +} + +HRESULT CProgressHelper::Progress( DWORD dwTranspiredTicks ) +{ + m_cur_ticks = dwTranspiredTicks; + + if(m_callback != NULL) + m_callback(m_cur_ticks, max(m_max_ticks, m_cur_ticks)); + + return S_OK; +} + +HRESULT CProgressHelper::End() +{ + m_cur_ticks = m_max_ticks; + + return S_OK; +} + +HRESULT CProgressHelper::QueryInterface( REFIID riid, void __RPC_FAR *__RPC_FAR *ppvObject ) +{ + if(riid == IID_IWMDMProgress || riid == IID_IUnknown) + { + *ppvObject = this; + return S_OK; + } + else + { + *ppvObject = NULL; + return E_NOINTERFACE; + } +} + +ULONG CProgressHelper::AddRef() +{ + return m_counter++; +} +ULONG CProgressHelper::Release() +{ + return m_counter--; +} diff --git a/utils/MTP/MTP_DLL/stdafx.h b/utils/MTP/MTP_DLL/stdafx.h index a13982c634..1734058361 100644 --- a/utils/MTP/MTP_DLL/stdafx.h +++ b/utils/MTP/MTP_DLL/stdafx.h @@ -7,23 +7,23 @@ // Modify the following defines if you have to target a platform prior to the ones specified below. // Refer to MSDN for the latest info on corresponding values for different platforms. -#ifndef WINVER // Allow use of features specific to Windows XP or later. -#define WINVER 0x0501 // Change this to the appropriate value to target other versions of Windows. +#ifndef WINVER // Allow use of features specific to Windows XP or later. +#define WINVER 0x0501 // Change this to the appropriate value to target other versions of Windows. #endif -#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later. -#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows. -#endif +#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later. +#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows. +#endif -#ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later. +#ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later. #define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later. #endif -#ifndef _WIN32_IE // Allow use of features specific to IE 6.0 or later. -#define _WIN32_IE 0x0600 // Change this to the appropriate value to target other versions of IE. +#ifndef _WIN32_IE // Allow use of features specific to IE 6.0 or later. +#define _WIN32_IE 0x0600 // Change this to the appropriate value to target other versions of IE. #endif -#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers // Windows Header Files: #include diff --git a/utils/MTP/sendfirm_win.c b/utils/MTP/sendfirm_win.c index e605d47d0c..c16a7ab68b 100644 --- a/utils/MTP/sendfirm_win.c +++ b/utils/MTP/sendfirm_win.c @@ -28,7 +28,7 @@ #include #include -extern __declspec(dllimport) bool send_fw(LPWSTR file, int filesize); +extern __declspec(dllimport) bool send_fw(LPWSTR file, int filesize, void (*callback)(unsigned int progress, unsigned int max)); void usage(void) { @@ -37,9 +37,9 @@ void usage(void) int filesize(char* filename) { - FILE* fd; + FILE* fd; int tmp; - fd = fopen(filename, "r"); + fd = fopen(filename, "r"); if(fd == NULL) { fprintf(stderr, "Error while opening %s!\n", filename); @@ -47,10 +47,17 @@ int filesize(char* filename) } fseek(fd, 0, SEEK_END); tmp = ftell(fd); - fclose(fd); + fclose(fd); return tmp; } +void callback(unsigned int progress, unsigned int max) +{ + unsigned int normalized = progress*1000/max; + printf("Progress: %d.%d%%\r", normalized/10, normalized%10); + fflush(stdout); +} + int main(int argc, char **argv) { if (argc < 2) @@ -69,7 +76,7 @@ int main(int argc, char **argv) fprintf(stdout, "Sending firmware...\n"); - if(send_fw(tmp, filesize(argv[1]))) + if(send_fw(tmp, filesize(argv[1]), &callback)) fprintf(stdout, "Firmware sent successfully!\n"); else fprintf(stdout, "Error occured during sending!\n");