aboutsummaryrefslogtreecommitdiffstats
path: root/gobi-api/GobiAPI_1.0.40/GobiImageMgmt/GobiImageMgmt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gobi-api/GobiAPI_1.0.40/GobiImageMgmt/GobiImageMgmt.cpp')
-rwxr-xr-xgobi-api/GobiAPI_1.0.40/GobiImageMgmt/GobiImageMgmt.cpp315
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 );
+}