1*5c4dab75SAndroid Build Coastguard Worker /* 2*5c4dab75SAndroid Build Coastguard Worker * Copyright (C) 2017 The Android Open Source Project 3*5c4dab75SAndroid Build Coastguard Worker * 4*5c4dab75SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*5c4dab75SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*5c4dab75SAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*5c4dab75SAndroid Build Coastguard Worker * 8*5c4dab75SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*5c4dab75SAndroid Build Coastguard Worker * 10*5c4dab75SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*5c4dab75SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*5c4dab75SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*5c4dab75SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*5c4dab75SAndroid Build Coastguard Worker * limitations under the License. 15*5c4dab75SAndroid Build Coastguard Worker */ 16*5c4dab75SAndroid Build Coastguard Worker 17*5c4dab75SAndroid Build Coastguard Worker #ifndef CPP_ESE_H_ 18*5c4dab75SAndroid Build Coastguard Worker #define CPP_ESE_H_ 19*5c4dab75SAndroid Build Coastguard Worker 20*5c4dab75SAndroid Build Coastguard Worker #include <vector> 21*5c4dab75SAndroid Build Coastguard Worker 22*5c4dab75SAndroid Build Coastguard Worker #include <ese/ese.h> 23*5c4dab75SAndroid Build Coastguard Worker 24*5c4dab75SAndroid Build Coastguard Worker namespace android { 25*5c4dab75SAndroid Build Coastguard Worker 26*5c4dab75SAndroid Build Coastguard Worker /** 27*5c4dab75SAndroid Build Coastguard Worker * Mockable wrapper for libese's C API. 28*5c4dab75SAndroid Build Coastguard Worker * 29*5c4dab75SAndroid Build Coastguard Worker * `init` and `open` must be implemented to select the appropriate HW implementation. 30*5c4dab75SAndroid Build Coastguard Worker */ 31*5c4dab75SAndroid Build Coastguard Worker class EseInterface { 32*5c4dab75SAndroid Build Coastguard Worker public: EseInterface()33*5c4dab75SAndroid Build Coastguard Worker EseInterface() : mEse(nullptr) {} 34*5c4dab75SAndroid Build Coastguard Worker virtual ~EseInterface() = default; 35*5c4dab75SAndroid Build Coastguard Worker 36*5c4dab75SAndroid Build Coastguard Worker virtual void init() = 0; 37*5c4dab75SAndroid Build Coastguard Worker virtual int open() = 0; 38*5c4dab75SAndroid Build Coastguard Worker virtual void close() = 0; 39*5c4dab75SAndroid Build Coastguard Worker name()40*5c4dab75SAndroid Build Coastguard Worker virtual const char* name() { return ese_name(mEse); } 41*5c4dab75SAndroid Build Coastguard Worker 42*5c4dab75SAndroid Build Coastguard Worker /** 43*5c4dab75SAndroid Build Coastguard Worker * Doesn't match the libese interface perfectly as this uses vectors instead 44*5c4dab75SAndroid Build Coastguard Worker * of raw C-style arrays but it makes it much easier to mock/test. 45*5c4dab75SAndroid Build Coastguard Worker */ transceive(const std::vector<uint8_t> & tx,std::vector<uint8_t> & rx)46*5c4dab75SAndroid Build Coastguard Worker virtual int transceive(const std::vector<uint8_t>& tx, std::vector<uint8_t>& rx) { 47*5c4dab75SAndroid Build Coastguard Worker return ese_transceive(mEse, 48*5c4dab75SAndroid Build Coastguard Worker tx.data(), static_cast<uint32_t>(tx.size()), 49*5c4dab75SAndroid Build Coastguard Worker rx.data(), static_cast<uint32_t>(rx.size())); 50*5c4dab75SAndroid Build Coastguard Worker } 51*5c4dab75SAndroid Build Coastguard Worker 52*5c4dab75SAndroid Build Coastguard Worker // TODO: overload transceive for ese_transceive_sg 53*5c4dab75SAndroid Build Coastguard Worker error()54*5c4dab75SAndroid Build Coastguard Worker virtual bool error() { return ese_error(mEse); } error_message()55*5c4dab75SAndroid Build Coastguard Worker virtual const char* error_message() { return ese_error_message(mEse); } error_code()56*5c4dab75SAndroid Build Coastguard Worker virtual int error_code() { return ese_error_code(mEse); } 57*5c4dab75SAndroid Build Coastguard Worker 58*5c4dab75SAndroid Build Coastguard Worker /** 59*5c4dab75SAndroid Build Coastguard Worker * This is needed in order to call the applet libraries written in C. We 60*5c4dab75SAndroid Build Coastguard Worker * should work out a better way to do this. 61*5c4dab75SAndroid Build Coastguard Worker */ ese_interface()62*5c4dab75SAndroid Build Coastguard Worker ::EseInterface* ese_interface() { return mEse; } 63*5c4dab75SAndroid Build Coastguard Worker 64*5c4dab75SAndroid Build Coastguard Worker protected: 65*5c4dab75SAndroid Build Coastguard Worker ::EseInterface* mEse; 66*5c4dab75SAndroid Build Coastguard Worker }; 67*5c4dab75SAndroid Build Coastguard Worker 68*5c4dab75SAndroid Build Coastguard Worker } // namespace android 69*5c4dab75SAndroid Build Coastguard Worker 70*5c4dab75SAndroid Build Coastguard Worker #endif // CPP_ESE_H_ 71