1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef _GTS_NANOAPPS_GENERAL_TEST_BASIC_SENSOR_TEST_BASE_H_ 18 #define _GTS_NANOAPPS_GENERAL_TEST_BASIC_SENSOR_TEST_BASE_H_ 19 20 #include <general_test/test.h> 21 22 #include <chre.h> 23 24 namespace general_test { 25 26 /** 27 * Abstract base class for basic sensor tests. 28 * 29 * This repeats a similar test for several different sensor types. Children 30 * classes must implement the abstract methods to define details about the 31 * sensor. 32 * 33 * This uses a Simple Protocol between the Host and Nanoapp. 34 */ 35 class BasicSensorTestBase : public Test { 36 public: 37 BasicSensorTestBase(); 38 39 protected: 40 void handleEvent(uint32_t senderInstanceId, uint16_t eventType, 41 const void* eventData) override; 42 void setUp(uint32_t messageSize, const void *message) override; 43 44 /** 45 * Abstract method indicating which sensor type this is. 46 * 47 * @returns One of the CHRE_SENSOR_TYPE_* constants. 48 */ 49 virtual uint8_t getSensorType() const = 0; 50 51 /** 52 * Abstract method indicating if this sensor is required for a valid 53 * CHRE implementation. 54 * 55 * A CHRE isn't useful without certain sensors available. 56 * 57 * @returns true if this is sensor is required; false otherwise. 58 */ 59 virtual bool isRequiredSensor() const = 0; 60 61 /** 62 * Abstract method indicating if this is an on-change sensor. 63 * 64 * @returns true if this sensor is on-change; false otherwise. 65 */ 66 virtual bool isOnChangeSensor() const = 0; 67 68 /** 69 * Abstract method indicating if this is a one-shot sensor. 70 * 71 * @returns true if this sensor is one-shot; false otherwise. 72 */ 73 virtual bool isOneShotSensor() const = 0; 74 75 /** 76 * Abstract method which makes sure the given data is sane. 77 * 78 * This is a very loose test, and some sensors may provide no checking 79 * at all here. But some sensor might be able to provide a basic check 80 * (for example, a barometer claiming 0 hPa is broken (assuming the tests 81 * aren't running in outer space)). 82 * 83 * @returns If the data is absurd, this function will not return (it 84 * will trigger a fatal error report). This function returning 85 * is evidence the data is sane. 86 */ 87 virtual void confirmDataIsSane(const void* eventData) = 0; 88 89 private: 90 enum State { 91 kPreStart, 92 kPreConfigure, 93 kExpectingInitialDataEvent, 94 kExpectingLastDataEvent, 95 kFinished 96 }; 97 98 // Catch if CHRE performs reentrant calls for handleEvent() 99 bool mInMethod; 100 // If some external user changes the sampling status of our sensor, 101 // we shouldn't perform some of the checking, because it will be flaky. 102 bool mExternalSamplingStatusChange; 103 State mState; 104 uint32_t mInstanceId; 105 uint32_t mSensorHandle; 106 uint64_t mPreTimestamp; 107 uint64_t mFirstEventTimestamp; 108 uint64_t mLastEventTimestamp; 109 uint64_t mDoneTimestamp; 110 chreSensorSamplingStatus mOriginalStatus; 111 chreSensorSamplingStatus mNewStatus; 112 113 void startTest(); 114 void finishTest(); 115 void checkPassiveConfigure(); 116 void handleBiasEvent(uint16_t eventType, 117 const chreSensorThreeAxisData* eventData); 118 void handleSamplingChangeEvent( 119 const chreSensorSamplingStatusEvent* eventData); 120 void handleSensorDataEvent(const void* eventData); 121 void sanityCheckHeader(const chreSensorDataHeader* header, 122 bool modifyTimestamps, 123 uint64_t eventDuration); 124 }; 125 126 } // namespace general_test 127 128 129 #endif // _GTS_NANOAPPS_GENERAL_TEST_BASIC_SENSOR_TEST_BASE_H_ 130