1f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan/* 2f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan * Copyright (C) 2018 The Android Open Source Project 3f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan * 4f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan * Licensed under the Apache License, Version 2.0 (the "License"); 5f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan * you may not use this file except in compliance with the License. 6f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan * You may obtain a copy of the License at 7f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan * 8f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan * http://www.apache.org/licenses/LICENSE-2.0 9f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan * 10f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan * Unless required by applicable law or agreed to in writing, software 11f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan * distributed under the License is distributed on an "AS IS" BASIS, 12f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan * See the License for the specific language governing permissions and 14f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan * limitations under the License. 15f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan */ 16f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yanpackage com.android.car.vehiclehal.test; 17f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan 18f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yanimport static org.junit.Assert.assertEquals; 19f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan 20f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yanimport android.hardware.automotive.vehicle.V2_0.IVehicle; 21f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yanimport android.hardware.automotive.vehicle.V2_0.StatusCode; 22f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yanimport android.hardware.automotive.vehicle.V2_0.VehiclePropValue; 23f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yanimport android.os.RemoteException; 24f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan 25f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yanimport com.android.car.vehiclehal.VehiclePropValueBuilder; 26f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan 27f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yanimport java.time.Duration; 28f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan 29f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yanclass LinearVhalEventGenerator implements VhalEventGenerator { 30f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan 31f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan private final IVehicle mVehicle; 32f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan 33f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan private int mProp; 34f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan private Duration mInterval; 35f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan private float mInitialValue; 36f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan private float mDispersion; 37f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan private float mIncrement; 38f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan 39f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan LinearVhalEventGenerator(IVehicle vehicle) { 40f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan mVehicle = vehicle; 41f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan reset(); 42f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan } 43f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan 44f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan LinearVhalEventGenerator reset() { 45f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan mProp = 0; 46f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan mInterval = Duration.ofSeconds(1); 47f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan mInitialValue = 1000; 48f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan mDispersion = 0; 49f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan mInitialValue = 0; 50f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan return this; 51f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan } 52f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan 53f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan LinearVhalEventGenerator setIntervalMs(long intervalMs) { 54f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan mInterval = Duration.ofMillis(intervalMs); 55f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan return this; 56f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan } 57f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan 58f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan LinearVhalEventGenerator setInitialValue(float initialValue) { 59f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan mInitialValue = initialValue; 60f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan return this; 61f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan } 62f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan 63f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan LinearVhalEventGenerator setDispersion(float dispersion) { 64f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan mDispersion = dispersion; 65f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan return this; 66f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan } 67f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan 68f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan LinearVhalEventGenerator setIncrement(float increment) { 69f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan mIncrement = increment; 70f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan return this; 71f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan } 72f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan 73f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan LinearVhalEventGenerator setProp(int prop) { 74f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan mProp = prop; 75f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan return this; 76f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan } 77f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan 78f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan @Override 79f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan public void start() throws RemoteException { 80f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan VehiclePropValue request = 81f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan VehiclePropValueBuilder.newBuilder(GENERATE_FAKE_DATA_CONTROLLING_PROPERTY) 82f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan .addIntValue(CMD_START_LINEAR, mProp) 83f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan .setInt64Value(mInterval.toNanos()) 84f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan .addFloatValue(mInitialValue, mDispersion, mIncrement) 85f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan .build(); 86f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan assertEquals(StatusCode.OK, mVehicle.set(request)); 87f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan } 88f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan 89f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan @Override 90f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan public void stop() throws RemoteException { 91f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan VehiclePropValue request = 92f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan VehiclePropValueBuilder.newBuilder(GENERATE_FAKE_DATA_CONTROLLING_PROPERTY) 93f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan .addIntValue(CMD_STOP_LINEAR, mProp) 94f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan .build(); 95f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan assertEquals(StatusCode.OK, mVehicle.set(request)); 96f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan } 97f2c109c14bfb74d209a8bd070b873d2cfe2ab0a4Chao Yan} 98