diff options
Diffstat (limited to 'gobi-api/GobiAPI_1.0.40/GobiImageMgmt/GobiImageMgmt.cpp')
-rwxr-xr-x | gobi-api/GobiAPI_1.0.40/GobiImageMgmt/GobiImageMgmt.cpp | 315 |
1 files changed, 315 insertions, 0 deletions
diff --git a/gobi-api/GobiAPI_1.0.40/GobiImageMgmt/GobiImageMgmt.cpp b/gobi-api/GobiAPI_1.0.40/GobiImageMgmt/GobiImageMgmt.cpp new file mode 100755 index 0000000..8769be0 --- /dev/null +++ b/gobi-api/GobiAPI_1.0.40/GobiImageMgmt/GobiImageMgmt.cpp @@ -0,0 +1,315 @@ +/*=========================================================================== +FILE: + GobiQMIImageMgmt.cpp + +DESCRIPTION: + QUALCOMM Image Management API for Gobi 3000 + +PUBLIC CLASSES AND FUNCTIONS: + cGobiImageMgmtDLL + cGobiImageMgmt + +Copyright (c) 2011, Code Aurora Forum. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Code Aurora Forum nor + the names of its contributors may be used to endorse or promote + products derived from this software without specific prior written + permission. + + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +==========================================================================*/ + +//--------------------------------------------------------------------------- +// Include Files +//--------------------------------------------------------------------------- +#include "StdAfx.h" +#include "GobiImageMgmt.h" + +#include "QMIBuffers.h" +#include "QDLBuffers.h" + + +// Global object +cGobiImageMgmtDLL gImageDLL; + +/*=========================================================================*/ +// cGobiImageMgmtDLL Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + cGobiImageMgmtDLL (Public Method) + +DESCRIPTION: + Constructor + +RETURN VALUE: + None +===========================================================================*/ +cGobiImageMgmtDLL::cGobiImageMgmtDLL() + : mpAPI( 0 ), + mbAllocated( false ) +{ + // Create sync CS + pthread_mutex_init( &mSyncSection, NULL ); +} + +/*=========================================================================== +METHOD: + ~cGobiImageMgmtDLL (Public Method) + +DESCRIPTION: + Destructor + +RETURN VALUE: + None +===========================================================================*/ +cGobiImageMgmtDLL::~cGobiImageMgmtDLL() +{ + // Just in case + if (mpAPI != 0) + { + mpAPI->Cleanup(); + delete mpAPI; + mpAPI = 0; + } + + pthread_mutex_destroy( &mSyncSection ); +} + +/*=========================================================================== +METHOD: + GetAPI (Public Method) + +DESCRIPTION: + Return the cGobiImageMgmt object + +RETURN VALUE: + cGobiImageMgmt * +===========================================================================*/ +cGobiImageMgmt * cGobiImageMgmtDLL::GetAPI() +{ + pthread_mutex_lock( &mSyncSection ); + + bool bAlloc = mbAllocated; + + pthread_mutex_unlock( &mSyncSection ); + + if (bAlloc == true) + { + return mpAPI; + } + + pthread_mutex_lock( &mSyncSection ); + + mpAPI = new cGobiImageMgmt; + if (mpAPI != 0) + { + bool bAPI = mpAPI->Initialize(); + if (bAPI == false) + { + delete mpAPI; + mpAPI = 0; + } + } + + // We have tried to allocate/initialize the object + mbAllocated = true; + + pthread_mutex_unlock( &mSyncSection ); + return mpAPI; +} + +/*=========================================================================*/ +// cGobiImageMgmt Methods +/*=========================================================================*/ + +/*=========================================================================== +METHOD: + cGobiImageMgmt (Public Method) + +DESCRIPTION: + Constructor + +RETURN VALUE: + None +===========================================================================*/ +cGobiImageMgmt::cGobiImageMgmt() + : cGobiQMICore(), + mTargetDeviceNode( "" ), + mTargetDeviceKey( "" ), + mQDL() +{ + // We require a DMS server + tServerConfig dmsSvr( eQMI_SVC_DMS, true ); + mServerConfig.insert( dmsSvr ); +} + +/*=========================================================================== +METHOD: + ~cGobiImageMgmt (Public Method) + +DESCRIPTION: + Destructor + +RETURN VALUE: + None +===========================================================================*/ +cGobiImageMgmt::~cGobiImageMgmt() +{ + // Nothing to do +} + +/*=========================================================================== +METHOD: + Initialize (Public Method) + +DESCRIPTION: + Initialize the object + +RETURN VALUE: + bool +===========================================================================*/ +bool cGobiImageMgmt::Initialize() +{ + bool bRC = cGobiQMICore::Initialize(); + if (bRC == false) + { + return bRC; + } + + bRC = mQDL.Initialize(); + return bRC; +} + +/*=========================================================================== +METHOD: + Cleanup (Public Method) + +DESCRIPTION: + Cleanup the object + +RETURN VALUE: + bool +===========================================================================*/ +bool cGobiImageMgmt::Cleanup() +{ + mQDL.Cleanup(); + return cGobiQMICore::Cleanup(); +} + +/*=========================================================================== +METHOD: + GetDeviceID (Public Method) + +DESCRIPTION: + Set the ID of the device to target + +PARAMETERS: + deviceID [ I ] - The device ID as reported by Windows + deviceKey [ I ] - The device key (unique, stored on-device) + +RETURN VALUE: + void +===========================================================================*/ +void cGobiImageMgmt::GetDeviceID( + std::string & deviceID, + std::string & deviceKey ) +{ + deviceID = mTargetDeviceNode; + deviceKey = mTargetDeviceKey; +} + +/*=========================================================================== +METHOD: + SetDeviceID (Public Method) + +DESCRIPTION: + Set the ID of the device to target + +PARAMETERS: + pDeviceID [ I ] - The device ID as reported by Windows + pDeviceKey [ I ] - The device key (unique, stored on-device) + +RETURN VALUE: + bool +===========================================================================*/ +bool cGobiImageMgmt::SetDeviceID( + LPCSTR pDeviceID, + LPCSTR pDeviceKey ) +{ + // Clear last error recorded + ClearLastError(); + + // If you specify a device key then you have to specify a device ID + if (pDeviceID == 0 && pDeviceKey != 0) + { + mLastError = eGOBI_ERR_INVALID_ARG; + return false; + } + + if (pDeviceID == 0 || pDeviceID[0] == 0) + { + mTargetDeviceNode.clear(); + mTargetDeviceKey.clear(); + } + else + { + mTargetDeviceNode = pDeviceID; + if (pDeviceKey == 0 || pDeviceKey[0] == 0) + { + mTargetDeviceKey.clear(); + } + else + { + mTargetDeviceKey = pDeviceKey; + } + } + + return true; +} + +/*=========================================================================== +METHOD: + ResetDevice (Public Method) + +DESCRIPTION: + This function resets the device + +RETURN VALUE: + eGobiError - Return code +===========================================================================*/ +eGobiError cGobiImageMgmt::ResetDevice() +{ + WORD msgID = (WORD)eQMI_DMS_SET_OPERATING_MODE; + std::vector <sDB2PackingInput> piv; + + sProtocolEntityKey pek( eDB2_ET_QMI_DMS_REQ, msgID, 1 ); + sDB2PackingInput pi( pek, "5" ); + piv.push_back( pi ); + + // Pack up the QMI request + const cCoreDatabase & db = GetDatabase(); + sSharedBuffer * pRequest = DB2PackQMIBuffer( db, piv ); + + // Send the QMI request, check result, and return + return SendAndCheckReturn( eQMI_SVC_DMS, pRequest ); +} |