blob: 89863dc1308c9fab95af6cf3dae581a40c4108e1 [file] [log] [blame]
/*
* Copyright (C) 2020 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_SETTINGS_TEST_MANAGER_H_
#define CHRE_SETTINGS_TEST_MANAGER_H_
#include "chre_settings_test.nanopb.h"
#include <cinttypes>
#include "chre/util/optional.h"
#include "chre/util/singleton.h"
#include "chre_api/chre.h"
namespace chre {
namespace settings_test {
/**
* A class to manage a CHRE settings test session.
*/
class Manager {
public:
enum class Feature : uint8_t {
WIFI_SCANNING = 0,
WIFI_RTT,
GNSS_LOCATION,
GNSS_MEASUREMENT,
WWAN_CELL_INFO,
AUDIO,
BLE_SCANNING,
};
enum class FeatureState : uint8_t {
DISABLED = 0,
ENABLED,
};
enum class TestStep : uint8_t {
SETUP = 0,
START,
};
/**
* Handles an event from CHRE. Semantics are the same as nanoappHandleEvent.
*/
void handleEvent(uint32_t senderInstanceId, uint16_t eventType,
const void *eventData);
private:
struct TestSession {
uint16_t hostEndpointId;
Feature feature;
FeatureState featureState;
TestStep step;
TestSession(uint16_t id, Feature currentFeature, FeatureState state,
TestStep currentStep) {
this->hostEndpointId = id;
this->feature = currentFeature;
this->featureState = state;
this->step = currentStep;
}
};
/**
* @return true if the provided feature is supported by CHRE.
*/
bool isFeatureSupported(Feature feature);
/**
* Handles a message from the host.
*
* @param senderInstanceId The sender instance ID of this message.
* @param hostData The data from the host.
*/
void handleMessageFromHost(uint32_t senderInstanceId,
const chreMessageFromHostData *hostData);
/**
* Initiates the test given a start command from the host. If a test was
* already in progress, a new start message will override and start a new
* test.
*
* @param hostEndpointId The test host endpoint ID.
* @param feature The feature to test.
* @param state The feature state.
* @param step The test step.
*/
void handleStartTestMessage(uint16_t hostEndpointId, Feature feature,
FeatureState state, TestStep step);
/**
* Processes data from CHRE.
*
* @param eventType The event type as defined by CHRE.
* @param eventData A pointer to the data.
*/
void handleDataFromChre(uint16_t eventType, const void *eventData);
/**
* Starts a test for a given feature.
*
* @param feature The feature to test.
*
* @return true if the test successfully began.
*/
bool startTestForFeature(Feature feature);
/**
* @param result The async result.
* @param expectedCookie The expected cookie value.
*
* @return true if the async result matches expected values.
*/
bool validateAsyncResult(const chreAsyncResult *result,
const void *expectedCookie);
/**
* @param result The async result provided by CHRE.
*/
void handleWifiAsyncResult(const chreAsyncResult *result);
void handleGnssAsyncResult(const chreAsyncResult *result);
/**
* @param result The cell info result from CHRE.
*/
void handleWwanCellInfoResult(const chreWwanCellInfoResult *result);
/**
* @param result The WiFi scan event result.
*/
void handleWifiScanResult(const chreWifiScanEvent *result);
/**
* @param event CHRE Audio Source Status Event
*/
void handleAudioSourceStatusEvent(
const struct chreAudioSourceStatusEvent *event);
/**
* @param event CHRE Audio Data Event
*/
void handleAudioDataEvent(const struct chreAudioDataEvent *event);
/*
* @param data CHRE event data containing the cookie used to set the timer.
*/
void handleTimeout(const void *data);
/**
* Handles the BLE async result
*
* @param result The BLE scan event result
*/
void handleBleAsyncResult(const chreAsyncResult *result);
/**
* End the current test session and sends result to host.
*
* @param hostEndpointId The host to send the result to.
* @param success True if the test succeeded.
*/
void sendTestResult(uint16_t hostEndpointId, bool success);
//! The current test session.
chre::Optional<TestSession> mTestSession;
//! The cached target to issue an RTT ranging request.
chre::Optional<chreWifiRangingTarget> mCachedRangingTarget;
//! The number of scan result received when after getting a wifi async result.
uint16_t mReceivedScanResults;
};
// The settings test manager singleton.
typedef chre::Singleton<Manager> ManagerSingleton;
} // namespace settings_test
} // namespace chre
#endif // CHRE_SETTINGS_TEST_MANAGER_H_