blob: 055a8106d346a6635474a6268e5f951eb2f118c0 [file] [log] [blame]
#ifndef PLUGIN_GOBI_SDK_WRAPPER_H_
#define PLUGIN_GOBI_SDK_WRAPPER_H_
/*===========================================================================
FILE:
gobi_sdk_wrapper.h,
derived from
QCWWANCMAPI2k.h
which has the following copyright notice:
DESCRIPTION:
QUALCOMM Wireless WAN Connection Manager API for Gobi 2000
Copyright (C) 2009 QUALCOMM Incorporated. All rights reserved.
QUALCOMM Proprietary/GTDR
All data and information contained in or disclosed by this document is
confidential and proprietary information of QUALCOMM Incorporated and all
rights therein are expressly reserved. By accepting this material the
recipient agrees that this material and the information contained therein
is held in confidence and in trust and will not be used, copied, reproduced
in whole or in part, nor its contents revealed in any manner to others
without the express written permission of QUALCOMM Incorporated.
==========================================================================*/
#include <stdlib.h>
#include <pthread.h>
#include <base/basictypes.h> // for DISALLOW_COPY_AND_ASSIGN
#include <base/memory/scoped_ptr.h>
#include <dbus/dbus.h> // for DBus::Path &
#include <gtest/gtest_prod.h> // for FRIEND_TEST
#include <map>
#include <string>
#include <vector>
#include "gobi/GobiConnectionMgmtAPI.h"
// Session state callback function
typedef void (* tFNSessionState)(
ULONG state,
ULONG sessionEndReason );
// RX/TX byte counts callback function
typedef void (* tFNByteTotals)(
ULONGLONG totalBytesTX,
ULONGLONG totalBytesRX );
// Dormancy status callback function
typedef void (* tFNDormancyStatus)( ULONG dormancyStatus );
// Mobile IP status callback function
typedef void (* tFNMobileIPStatus)( ULONG mipStatus );
// Activation status callback function
typedef void (* tFNActivationStatus)( ULONG activationStatus );
// Power operating mode callback function
typedef void (* tFNPower)( ULONG operatingMode );
// Serving system data capabilities callback function
typedef void (* tFNDataCapabilities)(
BYTE dataCapsSize,
BYTE * pDataCaps );
// Data bearer technology callback function
typedef void (* tFNDataBearer)( ULONG dataBearer );
// Roaming indicator callback function
typedef void (* tFNRoamingIndicator)( ULONG roaming );
// Signal strength callback function
typedef void (* tFNSignalStrength)(
INT8 signalStrength,
ULONG radioInterface );
// RF information callback function
typedef void (* tFNRFInfo)(
ULONG radioInterface,
ULONG activeBandClass,
ULONG activeChannel );
// LU reject callback function
typedef void (* tFNLUReject)(
ULONG serviceDomain,
ULONG rejectCause );
// New SMS message callback function
typedef void (* tFNNewSMS)(
ULONG storageType,
ULONG messageIndex );
// New NMEA sentence callback function
typedef void (* tFNNewNMEA)( LPCSTR pNMEA );
// New NMEA sentence plus mode callback function
typedef void (* tFNNewNMEAPlus)(
LPCSTR pNMEA,
ULONG mode );
// PDS session state callback function
typedef void (* tFNPDSState)(
ULONG enabledStatus,
ULONG trackingStatus );
// CAT event callback function
typedef void (* tFNCATEvent)(
ULONG eventID,
ULONG eventLen,
BYTE * pEventData );
// OMA-DM network initiated alert callback function
typedef void (* tFNOMADMAlert)(
ULONG sessionType,
USHORT sessionID );
// OMA-DM state callback function
typedef void (* tFNOMADMState)(
ULONG sessionState,
ULONG failureReason );
namespace gobi {
enum PowerMode {
kOnline = 0,
kLowPower = 1,
kFactoryTest = 2,
kOffline = 3,
kReset = 4,
kPowerOff = 5,
kPersistentLowPower = 6, // airplane mode
};
enum RegistrationState {
kUnregistered = 0,
kRegistered = 1,
kSearching = 2,
kRegistrationDenied = 3,
kRegistrationStateUnknown = 4
};
enum OmadmSessionType {
kConfigure = 0,
kPrlUpdate = 1,
kHandsFreeActivation = 2,
};
enum OmadmSessionState {
// Table 2-11 of QC WWAN CM API
kOmadmComplete = 0,
kOmadmUpdateInformationUnavailable = 1,
kOmadmFailed = 2,
// Artificial state: The last state that signifies that the OMADM
// session is over.
kOmadmMaxFinal = 2,
kOmadmRetrying = 3,
kOmadmConnecting = 4,
kOmadmConnected = 5,
kOmadmAuthenticated = 6,
kOmadmMdnDownloaded = 7,
kOmadmMsidDownloaded = 8,
kOmadmPrlDownloaded = 9,
kOmadmMipProfiledDownloaded = 10,
};
enum ActivationState {
kNotActivated = 0,
kActivated = 1,
kActivationConnecting = 2,
kActivationConnected = 3,
kOtaspAuthenticated = 4,
kOtaspNamDownloaded = 5,
kOtaspMdnDownloaded = 6,
kOtaspImsiDownloaded = 7,
kOtaspPrlDownloaded = 8,
kOtaspSpcDownloaded = 9,
kOtaspSettingsCommitted = 10,
};
enum GsmRegistrationType {
kRegistrationTypeAutomatic = 1,
kRegistrationTypeManual = 2
};
enum SessionState {
kDisconnected = 1,
kConnected = 2,
kSuspended = 3,
kAuthenticating = 4
};
enum RadioInterfaceTechnology {
kRfiNoService = 0,
kRfiCdma1xRtt = 1,
kRfiCdmaEvdo = 2,
kRfiAmps = 3,
kRfiGsm = 4,
kRfiUmts = 5
};
enum DataBearerTechnology {
kDataBearerCdma1xRtt = 1,
kDataBearerCdmaEvdo = 2,
kDataBearerGprs = 3,
kDataBearerWcdma = 4,
kDataBearerCdmaEvdoRevA = 5,
kDataBearerEdge = 6,
kDataBearerHsdpaDlWcdmaUl = 7,
kDataBearerWcdmaDlUsupaUl = 8,
kDataBearerHsdpaDlHsupaUl = 9
};
enum DataCapability {
kDataCapGprs = 1,
kDataCapEdge = 2,
kDataCapHsdpa = 3,
kDataCapHsupa = 4,
kDataCapWcdma = 5,
kDataCapCdma1xRtt = 6,
kDataCapCdmaEvdoRev0 = 7,
kDataCapCdmaEvdoRevA = 8,
kDataCapGsm = 9
};
enum ConfiguredTechnology {
kConfigurationCdma = 0,
kConfigurationUmts = 1,
kConfigurationUnknownTechnology = 0xffffffff
};
enum RoamingState {
kRoaming = 0,
kHome = 1,
kRoamingPartner = 2
};
// Selected return codes from table 2-3 of QC WWAN CM API
enum ReturnCode {
kGeneralError = 1,
kErrorSendingQmiRequest = 12,
kErrorReceivingQmiRequest = 13,
kTimeoutReceivingQmiRequest = 15,
kNoAvailableSignal = 29,
kErrorNeedsReset = 34,
kInvalidPinId = 1011,
kIncorrectPinId = 1012,
kCallFailed = 1014,
kNotProvisioned = 1016,
kNotSupportedByNetwork = 1024,
kNotSupportedByDevice = 1025,
kOperationHasNoEffect = 1026,
kPinBlocked = 1035,
kPinPermanentlyBlocked = 1036,
kNoTrackingSessionHasBeenStarted = 1065,
kInformationElementUnavailable = 1074,
kAccessToRequiredEntityNotAvailable = 1082,
kQMIHardwareRestricted = 1083,
// CrOS made-up code (31 random bits. Number does not appear in
// Gobi SDK sources in hex or decimal). Returned when a call is
// made to a Gobi subsystem that already has a call pending.
kCrosGobiSubsystemInUse = 0x74b97cc5,
};
enum DormancyStatus {
kDormant = 1,
kNotDormant = 2
};
enum SmsMessageStorageType {
kSmsUim = 0,
kSmsNonVolatileMemory = 1
};
enum SmsMessageTag {
kSmsRead = 0,
kSmsNotRead = 1,
kSmsMobileOrigAndSent = 2,
kSmsMobileOrigNotSent = 3
};
// Selected call failure reasons from table 2-4 "Call end reason codes"
enum CallEndReason {
kReasonClientEndedCall = 2,
kReasonNoService = 3,
kReasonBadApn = 1013,
kReasonNotSubscribed = 1018
};
enum PinId {
kPinId1 = 1,
kPinId2 = 2,
};
static const unsigned int kPinRetriesLeftUnknown = 0xffffffff;
enum PinStatus {
kPinStatusNotInitialized = 0,
kPinStatusEnabled = 1,
kPinStatusVerified = 2,
kPinStatusDisabled = 3,
kPinStatusBlocked = 4,
kPinStatusPermanentlyBlocked = 5
};
enum RegistrationTechnologyPreference {
kRegistrationTechnologyAutomatic = 0,
kRegistrationTechnologyCdma = 1,
kRegistrationTechnologyUmts = 2
};
enum RegistrationTechnologyPreferenceCdma {
kRegistrationTechnologyPreferenceCdma1xRtt = 2,
kRegistrationTechnologyPreferenceCdmaEvdo = 4
};
enum RegistrationTechnologyPreferenceUmts {
kRegistrationTechnologyPreferenceUmtsGsm = 1,
kRegistrationTechnologyPreferenceUmtsWcdma = 2
};
enum RegistrationPreferencePersistence {
kRegistrationPreferencePersistent = 0,
kRegistrationPreferencePowerCycleOnly = 1
};
typedef struct {
ULONG radioInterface;
ULONG activeBandClass;
ULONG activeChannel;
} RfInfoInstance;
static const unsigned int kGsmNetInfoUnknown = 0;
static const unsigned int kGsmNetInfoYes = 1;
static const unsigned int kGsmNetInfoNo = 2;
typedef struct __attribute__ ((__packed__)) {
WORD mcc;
WORD mnc;
ULONG inUse;
ULONG roaming;
ULONG forbidden;
ULONG preferred;
CHAR description[255];
} GsmNetworkInfoInstance;
typedef struct {
WORD mcc;
WORD mnc;
WORD radioAccessTech;
} GsmNetworkRATInfoInstance;
struct DeviceElement {
char deviceNode[256];
char deviceKey[16];
};
struct ReentrancyGroup;
struct CharStarCopier {
// Make a temporary, writable, copy of a char *, preserving the
// NULL-ness of the input.
public:
explicit CharStarCopier(const char *in) {
if (!in) {
// str_ is constructed as NULL
} else {
str_.reset(strdup(in));
}
}
~CharStarCopier() {
// We sometimes pass sensitive information
if (str_.get()) {
memset(str_.get(), '\0', strlen(str_.get()));
}
}
char *get() {
return str_.get();
}
private:
scoped_ptr_malloc<char> str_;
DISALLOW_COPY_AND_ASSIGN(CharStarCopier);
};
class Sdk {
public:
typedef void (*SdkErrorSink)(const std::string &modem_path,
const std::string &sdk_function,
ULONG error);
// SdkErrorSink is called if an SDK function returns an error.
// The GobiModem class uses this to decide if an error warrants
// resetting the modem
Sdk(SdkErrorSink sink) : sdk_error_sink_(sink) {}
virtual ~Sdk() {}
virtual void set_current_modem_path(const std::string &path) {
current_modem_path_ = path;
}
virtual void Init();
// Future calls to the sdk will return this error
virtual void InjectFaultSdkError(int error);
virtual ULONG QCWWANEnumerateDevices(
BYTE * pDevicesSize,
BYTE * pDevices);
virtual ULONG QCWWANConnect(
CHAR * pDeviceNode,
CHAR * pDeviceKey);
virtual ULONG QCWWANDisconnect();
virtual ULONG QCWWANGetConnectedDeviceID(
ULONG deviceNodeSize,
CHAR * pDeviceNode,
ULONG deviceKeySize,
CHAR * pDeviceKey);
virtual ULONG GetSessionState(ULONG * pState);
virtual ULONG GetSessionDuration(ULONGLONG * pDuration);
virtual ULONG GetDormancyState(ULONG * pState);
virtual ULONG GetAutoconnect(ULONG * pSetting);
virtual ULONG SetAutoconnect(ULONG setting);
virtual ULONG SetDefaultProfile(
ULONG profileType,
ULONG * pPDPType,
ULONG * pIPAddress,
ULONG * pPrimaryDNS,
ULONG * pSecondaryDNS,
ULONG * pAuthentication,
CHAR * pName,
CHAR * pAPNName,
CHAR * pUsername,
CHAR * pPassword);
virtual ULONG GetDefaultProfile(
ULONG profileType,
ULONG * pPDPType,
ULONG * pIPAddress,
ULONG * pPrimaryDNS,
ULONG * pSecondaryDNS,
ULONG * pAuthentication,
BYTE nameSize,
CHAR * pName,
BYTE apnSize,
CHAR * pAPNName,
BYTE userSize,
CHAR * pUsername);
virtual ULONG StartDataSession(
ULONG * pTechnology,
const CHAR * pAPNName,
ULONG * pAuthentication,
const CHAR * pUsername,
const CHAR * pPassword,
ULONG * pSessionId,
ULONG * pFailureReason);
// Calls QCWWANCancel and CancelDataSession.
virtual ULONG CancelStartDataSession();
virtual ULONG StopDataSession(ULONG sessionId);
virtual ULONG GetIPAddress(ULONG * pIPAddress);
virtual ULONG GetConnectionRate(
ULONG * pCurrentChannelTXRate,
ULONG * pCurrentChannelRXRate,
ULONG * pMaxChannelTXRate,
ULONG * pMaxChannelRXRate);
virtual ULONG GetPacketStatus(
ULONG * pTXPacketSuccesses,
ULONG * pRXPacketSuccesses,
ULONG * pTXPacketErrors,
ULONG * pRXPacketErrors,
ULONG * pTXPacketOverflows,
ULONG * pRXPacketOverflows);
virtual ULONG GetByteTotals(
ULONGLONG * pTXTotalBytes,
ULONGLONG * pRXTotalBytes);
virtual ULONG SetMobileIP(ULONG mode);
virtual ULONG GetMobileIP(ULONG * pMode);
virtual ULONG SetActiveMobileIPProfile(
CHAR * pSPC,
BYTE index);
virtual ULONG GetActiveMobileIPProfile(BYTE * pIndex);
virtual ULONG SetMobileIPProfile(
CHAR * pSPC,
BYTE index,
BYTE * pEnabled,
ULONG * pAddress,
ULONG * pPrimaryHA,
ULONG * pSecondaryHA,
BYTE * pRevTunneling,
CHAR * pNAI,
ULONG * pHASPI,
ULONG * pAAASPI,
CHAR * pMNHA,
CHAR * pMNAAA);
virtual ULONG GetMobileIPProfile(
BYTE index,
BYTE * pEnabled,
ULONG * pAddress,
ULONG * pPrimaryHA,
ULONG * pSecondaryHA,
BYTE * pRevTunneling,
BYTE naiSize,
CHAR * pNAI,
ULONG * pHASPI,
ULONG * pAAASPI,
ULONG * pHAState,
ULONG * pAAAState);
virtual ULONG SetMobileIPParameters(
CHAR * pSPC,
ULONG * pMode,
BYTE * pRetryLimit,
BYTE * pRetryInterval,
BYTE * pReRegPeriod,
BYTE * pReRegTraffic,
BYTE * pHAAuthenticator,
BYTE * pHA2002bis);
virtual ULONG GetMobileIPParameters(
ULONG * pMode,
BYTE * pRetryLimit,
BYTE * pRetryInterval,
BYTE * pReRegPeriod,
BYTE * pReRegTraffic,
BYTE * pHAAuthenticator,
BYTE * pHA2002bis);
virtual ULONG GetLastMobileIPError(ULONG * pError);
virtual ULONG GetANAAAAuthenticationStatus(ULONG * pStatus);
virtual ULONG GetSignalStrengths(
ULONG * pArraySizes,
INT8 * pSignalStrengths,
ULONG * pRadioInterfaces);
virtual ULONG GetRFInfo(
BYTE * pInstanceSize,
BYTE * pInstances);
virtual ULONG PerformNetworkScan(
BYTE * pInstanceSize,
BYTE * pInstances);
virtual ULONG PerformNetworkRATScan(
BYTE * pInstanceSize,
BYTE * pInstances,
BYTE * pRATSize,
BYTE * pRATInstances);
virtual ULONG InitiateNetworkRegistration(
ULONG regType,
WORD mcc,
WORD mnc,
ULONG rat);
virtual ULONG InitiateDomainAttach(ULONG action);
virtual ULONG GetServingNetwork(
ULONG * pRegistrationState,
ULONG * pRAN,
BYTE * pRadioIfacesSize,
BYTE * pRadioIfaces,
ULONG * pRoaming,
WORD * pMCC,
WORD * pMNC,
BYTE nameSize,
CHAR * pName);
virtual ULONG GetServingNetworkCapabilities(
BYTE * pDataCapsSize,
BYTE * pDataCaps);
virtual ULONG GetDataBearerTechnology(ULONG * pDataBearer);
virtual ULONG GetHomeNetwork(
WORD * pMCC,
WORD * pMNC,
BYTE nameSize,
CHAR * pName,
WORD * pSID,
WORD * pNID);
virtual ULONG SetNetworkPreference(
ULONG technologyPref,
ULONG duration);
virtual ULONG GetNetworkPreference(
ULONG * pTechnologyPref,
ULONG * pDuration,
ULONG * pPersistentTechnologyPref);
virtual ULONG SetCDMANetworkParameters(
CHAR * pSPC,
BYTE * pForceRev0,
BYTE * pCustomSCP,
ULONG * pProtocol,
ULONG * pBroadcast,
ULONG * pApplication,
ULONG * pRoaming);
virtual ULONG GetCDMANetworkParameters(
BYTE * pSCI,
BYTE * pSCM,
BYTE * pRegHomeSID,
BYTE * pRegForeignSID,
BYTE * pRegForeignNID,
BYTE * pForceRev0,
BYTE * pCustomSCP,
ULONG * pProtocol,
ULONG * pBroadcast,
ULONG * pApplication,
ULONG * pRoaming);
virtual ULONG GetACCOLC(BYTE * pACCOLC);
virtual ULONG SetACCOLC(
CHAR * pSPC,
BYTE accolc);
virtual ULONG GetPLMNName(
USHORT mcc,
USHORT mnc,
ULONG * pNamesSize,
BYTE * pNames);
virtual ULONG GetDeviceCapabilities(
ULONG * pMaxTXChannelRate,
ULONG * pMaxRXChannelRate,
ULONG * pDataServiceCapability,
ULONG * pSimCapability,
ULONG * pRadioIfacesSize,
BYTE * pRadioIfaces);
virtual ULONG GetManufacturer(
BYTE stringSize,
CHAR * pString);
virtual ULONG GetModelID(
BYTE stringSize,
CHAR * pString);
virtual ULONG GetFirmwareRevision(
BYTE stringSize,
CHAR * pString);
virtual ULONG GetFirmwareRevisions(
BYTE amssSize,
CHAR * pAMSSString,
BYTE bootSize,
CHAR * pBootString,
BYTE priSize,
CHAR * pPRIString);
virtual ULONG GetFirmwareInfo(
ULONG * pFirmwareID,
ULONG * pTechnology,
ULONG * pCarrier,
ULONG * pRegion,
ULONG * pGPSCapability);
virtual ULONG GetVoiceNumber(
BYTE voiceNumberSize,
CHAR * pVoiceNumber,
BYTE minSize,
CHAR * pMIN);
virtual ULONG GetIMSI(
BYTE stringSize,
CHAR * pString);
virtual ULONG GetSerialNumbers(
BYTE esnSize,
CHAR * pESNString,
BYTE imeiSize,
CHAR * pIMEIString,
BYTE meidSize,
CHAR * pMEIDString);
virtual ULONG SetLock(
ULONG state,
CHAR * pCurrentPIN);
virtual ULONG QueryLock(ULONG * pState);
virtual ULONG ChangeLockPIN(
CHAR * pCurrentPIN,
CHAR * pDesiredPIN);
virtual ULONG GetHardwareRevision(
BYTE stringSize,
CHAR * pString);
virtual ULONG GetPRLVersion(WORD * pPRLVersion);
virtual ULONG GetERIFile(
ULONG * pFileSize,
BYTE * pFile);
virtual ULONG ActivateAutomatic(const CHAR * pActivationCode);
virtual ULONG ActivateManual(
const CHAR * pSPC,
WORD sid,
const CHAR * pMDN,
const CHAR * pMIN,
ULONG prlSize,
BYTE * pPRL,
const CHAR * pMNHA,
const CHAR * pMNAAA);
virtual ULONG ResetToFactoryDefaults(CHAR * pSPC);
virtual ULONG GetActivationState(ULONG * pActivationState);
virtual ULONG SetPower(ULONG powerMode);
virtual ULONG GetPower(ULONG * pPowerMode);
virtual ULONG GetOfflineReason(
ULONG * pReasonMask,
ULONG * pbPlatform);
virtual ULONG GetNetworkTime(
ULONGLONG * pTimeCount,
ULONG * pTimeSource);
virtual ULONG ValidateSPC(CHAR * pSPC);
virtual ULONG DeleteSMS(
ULONG storageType,
ULONG * pMessageIndex,
ULONG * pMessageTag);
virtual ULONG GetSMSList(
ULONG storageType,
ULONG * pRequestedTag,
ULONG * pMessageListSize,
BYTE * pMessageList);
virtual ULONG GetSMS(
ULONG storageType,
ULONG messageIndex,
ULONG * pMessageTag,
ULONG * pMessageFormat,
ULONG * pMessageSize,
BYTE * pMessage);
virtual ULONG ModifySMSStatus(
ULONG storageType,
ULONG messageIndex,
ULONG messageTag);
virtual ULONG SaveSMS(
ULONG storageType,
ULONG messageFormat,
ULONG messageSize,
BYTE * pMessage,
ULONG * pMessageIndex);
virtual ULONG SendSMS(
ULONG messageFormat,
ULONG messageSize,
BYTE * pMessage,
ULONG * pMessageFailureCode);
virtual ULONG GetSMSCAddress(
BYTE addressSize,
CHAR * pSMSCAddress,
BYTE typeSize,
CHAR * pSMSCType);
virtual ULONG SetSMSCAddress(
CHAR * pSMSCAddress,
CHAR * pSMSCType);
virtual ULONG UIMSetPINProtection(
ULONG id,
ULONG bEnable,
CHAR * pValue,
ULONG * pVerifyRetriesLeft,
ULONG * pUnblockRetriesLeft);
virtual ULONG UIMVerifyPIN(
ULONG id,
CHAR * pValue,
ULONG * pVerifyRetriesLeft,
ULONG * pUnblockRetriesLeft);
virtual ULONG UIMUnblockPIN(
ULONG id,
CHAR * pPUKValue,
CHAR * pNewValue,
ULONG * pVerifyRetriesLeft,
ULONG * pUnblockRetriesLeft);
virtual ULONG UIMChangePIN(
ULONG id,
CHAR * pOldValue,
CHAR * pNewValue,
ULONG * pVerifyRetriesLeft,
ULONG * pUnblockRetriesLeft);
virtual ULONG UIMGetPINStatus(
ULONG id,
ULONG * pStatus,
ULONG * pVerifyRetriesLeft,
ULONG * pUnblockRetriesLeft);
virtual ULONG UIMGetICCID(
BYTE stringSize,
CHAR * pString);
virtual ULONG UIMGetControlKeyStatus(
ULONG id,
ULONG * pStatus,
ULONG * pVerifyRetriesLeft,
ULONG * pUnblockRetriesLeft);
virtual ULONG UIMSetControlKeyProtection(
ULONG id,
ULONG status,
CHAR * pValue,
ULONG * pVerifyRetriesLeft);
virtual ULONG UIMUnblockControlKey(
ULONG id,
CHAR * pValue,
ULONG * pUnblockRetriesLeft);
virtual ULONG GetPDSState(
ULONG * pEnabled,
ULONG * pTracking);
virtual ULONG SetPDSState(ULONG enable);
virtual ULONG PDSInjectTimeReference(
ULONGLONG systemTime,
USHORT systemDiscontinuities);
virtual ULONG GetPDSDefaults(
ULONG * pOperation,
BYTE * pTimeout,
ULONG * pInterval,
ULONG * pAccuracy);
virtual ULONG SetPDSDefaults(
ULONG operation,
BYTE timeout,
ULONG interval,
ULONG accuracy);
virtual ULONG GetXTRAAutomaticDownload(
ULONG * pbEnabled,
USHORT * pInterval);
virtual ULONG SetXTRAAutomaticDownload(
ULONG bEnabled,
USHORT interval);
virtual ULONG GetXTRANetwork(ULONG * pPreference);
virtual ULONG SetXTRANetwork(ULONG preference);
virtual ULONG GetXTRAValidity(
USHORT * pGPSWeek,
USHORT * pGPSWeekOffset,
USHORT * pDuration);
virtual ULONG ForceXTRADownload();
virtual ULONG GetAGPSConfig(
ULONG * pServerAddress,
ULONG * pServerPort);
virtual ULONG SetAGPSConfig(
ULONG serverAddress,
ULONG serverPort);
virtual ULONG GetServiceAutomaticTracking(ULONG * pbAuto);
virtual ULONG SetServiceAutomaticTracking(ULONG bAuto);
virtual ULONG GetPortAutomaticTracking(ULONG * pbAuto);
virtual ULONG SetPortAutomaticTracking(ULONG bAuto);
virtual ULONG ResetPDSData(
ULONG * pGPSDataMask,
ULONG * pCellDataMask);
virtual ULONG CATSendTerminalResponse(
ULONG refID,
ULONG dataLen,
BYTE * pData);
virtual ULONG CATSendEnvelopeCommand(
ULONG cmdID,
ULONG dataLen,
BYTE * pData);
virtual ULONG GetSMSWake(
ULONG * pbEnabled,
ULONG * pWakeMask);
virtual ULONG SetSMSWake(
ULONG bEnable,
ULONG wakeMask);
virtual ULONG OMADMStartSession(ULONG sessionType);
virtual ULONG OMADMCancelSession();
virtual ULONG OMADMGetSessionInfo(
ULONG * pSessionState,
ULONG * pSessionType,
ULONG * pFailureReason,
BYTE * pRetryCount,
WORD * pSessionPause,
WORD * pTimeRemaining);
virtual ULONG OMADMGetPendingNIA(
ULONG * pSessionType,
USHORT * pSessionID);
virtual ULONG OMADMSendSelection(
ULONG selection,
USHORT sessionID);
virtual ULONG OMADMGetFeatureSettings(
ULONG * pbProvisioning,
ULONG * pbPRLUpdate);
virtual ULONG OMADMSetProvisioningFeature(
ULONG bProvisioning);
virtual ULONG OMADMSetPRLUpdateFeature(
ULONG bPRLUpdate);
virtual ULONG UpgradeFirmware(CHAR * pDestinationPath);
virtual ULONG GetImageInfo(
CHAR * pPath,
ULONG * pFirmwareID,
ULONG * pTechnology,
ULONG * pCarrier,
ULONG * pRegion,
ULONG * pGPSCapability);
virtual ULONG GetImageStore(
WORD pathSize,
CHAR * pImageStorePath);
virtual ULONG SetSessionStateCallback(tFNSessionState pCallback);
virtual ULONG SetByteTotalsCallback(
tFNByteTotals pCallback,
BYTE interval);
virtual ULONG SetDataCapabilitiesCallback(
tFNDataCapabilities pCallback);
virtual ULONG SetDataBearerCallback(tFNDataBearer pCallback);
virtual ULONG SetDormancyStatusCallback(
tFNDormancyStatus pCallback);
virtual ULONG SetMobileIPStatusCallback(
tFNMobileIPStatus pCallback);
virtual ULONG SetActivationStatusCallback(
tFNActivationStatus pCallback);
virtual ULONG SetPowerCallback(tFNPower pCallback);
virtual ULONG SetRoamingIndicatorCallback(
tFNRoamingIndicator pCallback);
virtual ULONG SetSignalStrengthCallback(
tFNSignalStrength pCallback,
BYTE thresholdsSize,
INT8 * pThresholds);
virtual ULONG SetRFInfoCallback(tFNRFInfo pCallback);
virtual ULONG SetLURejectCallback(tFNLUReject pCallback);
virtual ULONG SetNewSMSCallback(tFNNewSMS pCallback);
virtual ULONG SetNMEACallback(tFNNewNMEA pCallback);
virtual ULONG SetPDSStateCallback(tFNPDSState pCallback);
virtual ULONG SetCATEventCallback(
tFNCATEvent pCallback,
ULONG eventMask,
ULONG * pErrorMask);
virtual ULONG SetOMADMAlertCallback(tFNOMADMAlert pCallback);
virtual ULONG SetOMADMStateCallback(tFNOMADMState pCallback);
virtual GobiType GetDeviceType();
protected:
class CallWrapper {
public:
CallWrapper(Sdk *sdk, const char *name);
ULONG CheckReturn(ULONG rc);
~CallWrapper();
Sdk *sdk_;
const char *function_name_;
bool sdk_locked_;
private:
DISALLOW_COPY_AND_ASSIGN(CallWrapper);
};
// The CMAPI is split into groups. Functions in multiple groups can
// be called simultaneously, but each group is nonreentrant against
// itself. This machinery takes care of this
// Returns kCrosGobiSubsystemInUse if it cannot get the lock for a subsystem
ULONG EnterSdk(const char *function_name);
void LeaveSdk(const char *function_name);
void InitGetServiceFromName(const char *service_map[]);
int GetServiceFromName(const char *name);
// Given a starting service of begin, what services should we cover?
// Returns max service if supplied with kServiceBase, else begin + 1
int GetServiceBound(int begin);
std::map<int, const char*> index_to_service_name_;
std::map<std::string, int> name_to_service_;
int service_index_upper_bound_;
// mutex-protected mapping from a service index to the
// currently-executing function in that service.
pthread_mutex_t service_to_function_mutex_;
std::vector<const char*> service_to_function_;
SdkErrorSink sdk_error_sink_;
std::string current_modem_path_;
// Always return this error if != 0
int fault_inject_sdk_error_;
friend class CallWrapper;
FRIEND_TEST(GobiSdkTest, BaseClosesAllDeathTest);
FRIEND_TEST(GobiSdkTest, EnterLeaveDeathTest);
FRIEND_TEST(GobiSdkTest, InitGetServiceFromNameDeathTest);
FRIEND_TEST(GobiSdkTest, InitGetServiceFromName);
FRIEND_TEST(GobiSdkTest, InterleavedSdkCalls);
FRIEND_TEST(GobiSdkTest, CharStarCopier);
private:
DISALLOW_COPY_AND_ASSIGN(Sdk);
}; // Class Sdk
} // Namespace Gobi
#endif /* PLUGIN_GOBI_SDK_WRAPPER_H_ */