blob: bcb611cf4ee71cc55a2daa96d0f5d4e212a98606 [file] [log] [blame]
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef CHRE_PAL_WWAN_H_
#define CHRE_PAL_WWAN_H_
/**
* @file
* Defines the interface between the common CHRE core system and the
* platform-specific WWAN module.
*/
#include <stdbool.h>
#include <stdint.h>
#include "chre_api/chre/wwan.h"
#include "chre/pal/system.h"
#include "chre/pal/version.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* Initial version of the CHRE WWAN PAL, tied to CHRE API v1.1.
*/
#define CHRE_PAL_WWAN_API_V1_0 CHRE_PAL_CREATE_API_VERSION(1, 0)
/**
* The version of the CHRE WWAN PAL defined in this header file.
*/
#define CHRE_PAL_WWAN_API_CURRENT_VERSION CHRE_PAL_WWAN_API_V1_0
struct chrePalWwanCallbacks {
/**
* Callback invoked to provide the result of a prior request to
* requestCellInfo in struct chrePalWwanApi.
*
* This function call passes ownership of the result's memory to the core
* CHRE system, i.e. the PAL module must not modify or free the provided
* data until the associated API function is called to release the memory.
*
* @param result
*
* @see #requestCellInfo
* @see #releaseCellInfoResult
*/
void (*cellInfoResultCallback)(struct chreWwanCellInfoResult *result);
};
struct chrePalWwanApi {
/**
* Version of the module providing this API. This value should be
* constructed from CHRE_PAL_CREATE_MODULE_VERSION using the supported
* API version constant (CHRE_PAL_WWAN_API_*) and the module-specific patch
* version.
*/
uint32_t moduleVersion;
/**
* Initializes the WWAN module. Initialization must complete synchronously.
*
* @param systemApi Structure containing CHRE system function pointers which
* the PAL implementation should prefer to use over equivalent
* functionality exposed by the underlying platform. The module does
* not need to deep-copy this structure; its memory remains
* accessible at least until after close() is called.
* @param callbacks Structure containing entry points to the core CHRE
* system. The module does not need to deep-copy this structure; its
* memory remains accessible at least until after close() is called.
*
* @return true if initialization was successful, false otherwise
*/
bool (*open)(const struct chrePalSystemApi *systemApi,
const struct chrePalWwanCallbacks *callbacks);
/**
* Performs clean shutdown of the WWAN module, usually done in preparation
* for stopping the CHRE. The WWAN module must ensure that it will not
* invoke any callbacks past this point, and complete any relevant teardown
* activities before returning from this function.
*/
void (*close)(void);
/**
* Retrieves information about the features supported by this module. The
* value returned from this function must not change for the duration of
* execution.
*
* @return See chreWwanGetCapabilities()
*
* @see chreWwanGetCapabilities()
*/
uint32_t (*getCapabilities)(void);
/**
* Initiates a request for information about the current serving cell and
* its neighbors.
*
* @return true if the request was accepted, in which case a subsequent call
* to cellInfoResultCallback will be used to communicate the result
*
* @see chreWwanGetCellInfoAsync()
* @see #cellInfoResultCallback
*/
bool (*requestCellInfo)(void);
/**
* Invoked when the core CHRE system no longer needs a raw measurement event
* structure that was provided to it via measurementEventCallback(). The
* GNSS module may use this to free associated memory, etc.
*
* @param result Result data to release
*/
void (*releaseCellInfoResult)(struct chreWwanCellInfoResult *result);
};
/**
* Retrieve a handle for the CHRE WWAN PAL.
*
* @param requestedApiVersion The implementation of this function must return a
* pointer to a structure with the same major version as requested.
*
* @return Pointer to API handle, or NULL if a compatible API version is not
* supported by the module, or the API as a whole is not implemented. If
* non-NULL, the returned API handle must be valid as long as this
* module is loaded.
*/
const struct chrePalWwanApi *chrePalWwanGetApi(uint32_t requestedApiVersion);
#ifdef __cplusplus
}
#endif
#endif // CHRE_PAL_WWAN_H_