| #ifndef GOBI_CROMO_PLUGIN_GOBI_SDK_WRAPPER_H_ |
| #define GOBI_CROMO_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 <pthread.h> |
| #include <stdlib.h> |
| #include <string.h> |
| |
| #include <map> |
| #include <memory> |
| #include <string> |
| #include <vector> |
| |
| #include <base/macros.h> // for DISALLOW_COPY_AND_ASSIGN |
| #include <base/memory/free_deleter.h> |
| #include <dbus/dbus.h> // for DBus::Path & |
| #include <gtest/gtest_prod.h> // for FRIEND_TEST |
| |
| #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 nullptr |
| } 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: |
| std::unique_ptr<char, base::FreeDeleter> 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 |
| explicit 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 // GOBI_CROMO_PLUGIN_GOBI_SDK_WRAPPER_H_ |