14d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro/*
24d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * Copyright (C) 2016 The Android Open Source Project
34d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro *
44d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * Licensed under the Apache License, Version 2.0 (the "License");
54d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * you may not use this file except in compliance with the License.
64d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * You may obtain a copy of the License at
74d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro *
84d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro *      http://www.apache.org/licenses/LICENSE-2.0
94d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro *
104d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * Unless required by applicable law or agreed to in writing, software
114d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * distributed under the License is distributed on an "AS IS" BASIS,
124d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * See the License for the specific language governing permissions and
144d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * limitations under the License.
154d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro */
164d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro
174d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro#ifndef _GTS_NANOAPPS_GENERAL_TEST_TIMER_CANCEL_TEST_H_
184d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro#define _GTS_NANOAPPS_GENERAL_TEST_TIMER_CANCEL_TEST_H_
194d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro
204d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro#include <general_test/test.h>
214d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro#include <chre.h>
224d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro
234d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguronamespace general_test {
244d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro
254d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro/**
264d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * Checks that chreTimerCancel() works by trying various usages.
274d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro *
284d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro * Simple Protocol.
294d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro */
304d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguroclass TimerCancelTest : public Test {
314d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro public:
324d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro  TimerCancelTest();
334d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro
344d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro protected:
354d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro  void handleEvent(uint32_t senderInstanceId, uint16_t eventType,
364d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro                   const void* eventData) override;
374d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro  void setUp(uint32_t messageSize, const void *message) override;
384d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro
394d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro private:
404d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro  struct Stage {
414d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro    uint32_t stage;
424d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro    uint32_t timerId;
434d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro    bool oneShot;
444d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro    bool expectCallback;
454d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro
464d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro    // Leave timerId invalid.
474d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro    Stage(uint32_t stage_, bool oneShot_, bool expectCallback_) :
484d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro      stage(stage_), timerId(CHRE_TIMER_INVALID), oneShot(oneShot_),
494d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro      expectCallback(expectCallback_) {}
504d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro  };
514d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro
524d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro  bool mInMethod;
534d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro
544d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro  static constexpr size_t kStageCount = 4;
554d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro  Stage mStages[kStageCount];
564d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro
574d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro  static constexpr uint32_t kAllFinished = (1 << kStageCount) - 1;
584d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro  uint32_t mFinishedBitmask;
594d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro
604d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro  void startStages();
614d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro  void handleStageEvent(Stage *stage);
624d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro  void markSuccess(uint32_t stage);
634d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro};
644d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro
654d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro}  // namespace general_test
664d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro
674d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro
684d04a937b1bf7a949dfb00650b2640a9ed0c8acaArthur Ishiguro#endif  // _GTS_NANOAPPS_GENERAL_TEST_TIMER_CANCEL_TEST_H_
69