14#include <system_error>
26 static class metee_category_t :
public std::error_category {
28 virtual const char* name() const noexcept {
return "MeTee"; }
29 virtual std::string message(
int ev)
const {
30#define TEE_ERR_STATE(state) case TEE_##state: return #state
46 return std::to_string(ev);
65 metee_exception(
int err,
const std::error_category& cat) : std::system_error(err, cat) {}
72 : std::system_error(err, cat, what) {}
79 0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);
134 other._handle.handle =
nullptr;
146 _handle = other._handle;
147 other._handle.handle =
nullptr;
172 std::vector<uint8_t>
read(uint32_t timeout)
178 status =
TeeRead(&_handle, buffer.data(), buffer.size(), &size, timeout);
184 return std::move(buffer);
192 size_t write(
const std::vector<uint8_t> &buffer, uint32_t timeout)
197 status =
TeeWrite(&_handle, buffer.data(), buffer.size(), &size, timeout);
212 uint32_t fwStatus = 0;
214 status =
TeeFWStatus(&_handle, fwStatusNum, &fwStatus);
228 uint32_t trc_val = 0;
244 const size_t KIND_SIZE = 32;
245 char kind[KIND_SIZE];
246 size_t kind_size = KIND_SIZE;
324 std::stringstream ss;
325 ss << driverVersion.
major <<
"."
326 << driverVersion.
minor <<
"."
327 << driverVersion.
hotfix <<
"."
328 << driverVersion.
build;
metee_exception(const std::string &what, int err=TEE_INTERNAL_ERROR)
virtual ~metee_exception() noexcept
metee_exception(int err, const std::error_category &cat, const std::string &what)
metee_exception(int err, const std::error_category &cat)
metee(const GUID &guid, const struct tee_device_address &device, uint32_t log_level=TEE_LOG_LEVEL_VERBOSE, TeeLogCallback log_callback=nullptr)
metee(const GUID &guid, uint32_t log_level=TEE_LOG_LEVEL_VERBOSE, TeeLogCallback log_callback=nullptr)
void log_callback(TeeLogCallback log_callback)
metee(metee &&other) noexcept
metee(const metee &other)=delete
size_t write(const std::vector< uint8_t > &buffer, uint32_t timeout)
TEE_DEVICE_HANDLE device_handle()
uint32_t fw_status(uint32_t fwStatusNum)
metee & operator=(metee &&other) noexcept
metee & operator=(const metee &other)=delete
std::string driver_version()
uint32_t log_level(uint32_t log_level)
std::vector< uint8_t > read(uint32_t timeout)
void(* TeeLogCallback)(bool is_error, const char *fmt,...)
TEESTATUS TEEAPI TeeSetLogCallback(IN const PTEEHANDLE handle, TeeLogCallback log_callback)
#define TEE_IS_SUCCESS(Status)
TEESTATUS TEEAPI GetDriverVersion(IN PTEEHANDLE handle, IN OUT teeDriverVersion_t *driverVersion)
TEESTATUS TEEAPI TeeRead(IN PTEEHANDLE handle, IN OUT void *buffer, IN size_t bufferSize, OUT OPTIONAL size_t *pNumOfBytesRead, IN OPTIONAL uint32_t timeout)
TEE_DEVICE_HANDLE TEEAPI TeeGetDeviceHandle(IN PTEEHANDLE handle)
TEESTATUS TEEAPI TeeFWStatus(IN PTEEHANDLE handle, IN uint32_t fwStatusNum, OUT uint32_t *fwStatus)
uint32_t TEEAPI TeeGetLogLevel(IN const PTEEHANDLE handle)
TEESTATUS TEEAPI TeeGetTRC(IN PTEEHANDLE handle, OUT uint32_t *trc_val)
TEESTATUS TEEAPI TeeGetKind(IN PTEEHANDLE handle, IN OUT char *kind, IN OUT size_t *kindSize)
TEESTATUS TEEAPI TeeInit(IN OUT PTEEHANDLE handle, IN const GUID *guid, IN OPTIONAL const char *device)
uint32_t TEEAPI TeeGetMaxMsgLen(IN const PTEEHANDLE handle)
void TEEAPI TeeDisconnect(IN PTEEHANDLE handle)
TEESTATUS TEEAPI TeeConnect(OUT PTEEHANDLE handle)
TEESTATUS TEEAPI TeeInitFull(IN OUT PTEEHANDLE handle, IN const GUID *guid, IN const struct tee_device_address device, IN uint32_t log_level, IN OPTIONAL TeeLogCallback log_callback)
TEESTATUS TEEAPI TeeWrite(IN PTEEHANDLE handle, IN const void *buffer, IN size_t bufferSize, OUT OPTIONAL size_t *numberOfBytesWritten, IN OPTIONAL uint32_t timeout)
#define TEE_INTERNAL_ERROR
uint32_t TEEAPI TeeSetLogLevel(IN PTEEHANDLE handle, IN uint32_t log_level)
uint8_t TEEAPI TeeGetProtocolVer(IN const PTEEHANDLE handle)
#define TEE_ERR_STATE(state)
DEFINE_GUID(METEE_GUID_ZERO, 0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)