xref: /aosp_15_r20/external/libese/libese-cpp/include/esecpp/EseInterface.h (revision 5c4dab75aa57366379dce576b1a9e082a44e2b3a)
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