| /* |
| * Copyright (C) 2017 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 ESED_LIBESE_H_ |
| #define ESED_LIBESE_H_ |
| |
| #include <vector> |
| |
| #include <android-base/logging.h> |
| |
| #include <ese/ese.h> |
| |
| namespace android { |
| namespace esed { |
| |
| /** |
| * Mockable wrapper for libese's C API. |
| * |
| * `init` and `open` must be implemented to select the appropriate HW implementation. |
| */ |
| class EseInterface { |
| public: |
| EseInterface() : mEse(nullptr) {} |
| virtual ~EseInterface() = default; |
| |
| virtual void init() = 0; |
| virtual int open() = 0; |
| virtual void close() = 0; |
| |
| virtual const char* name() { return ese_name(mEse); } |
| |
| /** |
| * Doesn't match the libese interface perfectly as this uses vectors instead |
| * of raw C-style arrays but it makes it much easier to mock/test. |
| */ |
| virtual int transceive(const std::vector<uint8_t>& tx, std::vector<uint8_t>& rx) { |
| return ese_transceive(mEse, |
| tx.data(), static_cast<uint32_t>(tx.size()), |
| rx.data(), static_cast<uint32_t>(rx.size())); |
| } |
| |
| virtual bool error() { return ese_error(mEse); } |
| virtual const char* error_message() { return ese_error_message(mEse); } |
| virtual int error_code() { return ese_error_code(mEse); } |
| |
| protected: |
| ::EseInterface* mEse; |
| }; |
| |
| } // namespace esed |
| } // namespace android |
| |
| #endif // ESED_LIBESE_H_ |