18#ifndef TEEUI_COMMONMESSAGETYPES_H_
19#define TEEUI_COMMONMESSAGETYPES_H_
73template <
typename T>
inline const uint8_t*
copyField(T& field,
const uint8_t*(&pos)) {
75 std::copy(pos, pos +
sizeof(T), s);
76 return pos +
sizeof(T);
79template <
typename T>
inline uint8_t*
copyField(
const T& field, uint8_t*(&pos)) {
81 return std::copy(s, &s[
sizeof(T)], pos);
90 std::tuple<ReadStream, MsgVector<T>> result;
91 ReadStream::ptr_t pos =
nullptr;
93 std::tie(std::get<0>(result), pos, read_size) =
read(in);
94 if (!std::get<0>(result) || read_size %
sizeof(T)) {
95 std::get<0>(result).bad();
99 MsgVector<T>(
reinterpret_cast<T*
>(
const_cast<uint8_t*
>(pos)),
100 reinterpret_cast<T*
>(
const_cast<uint8_t*
>(pos)) + (read_size /
sizeof(T)));
105 return write(out,
reinterpret_cast<const uint8_t*
>(vec.
data()), vec.
size() *
sizeof(T));
110 return readSimpleType<ResponseCode>(in);
118 return readSimpleType<TestModeCommands>(in);
128 return readSimpleVecInPlace<uint8_t>(in);
136 return readSimpleVecInPlace<char>(in);
145 return readSimpleVecInPlace<UIOption>(in);
154template <
size_t size>
155inline std::tuple<teeui::ReadStream, teeui::Array<uint8_t, size>>
157 std::tuple<teeui::ReadStream, teeui::Array<uint8_t, size>> result;
159 auto& result_ = std::get<1>(result);
160 teeui::ReadStream::ptr_t pos =
nullptr;
161 size_t read_size = 0;
162 std::tie(in_, pos, read_size) =
read(in);
163 if (!in_)
return result;
164 if (read_size !=
size) {
168 std::copy(pos, pos +
size, result_.data());
171template <
size_t size>
constexpr size_t size() const
Definition: utils.h:59
T * data()
Definition: utils.h:57
Definition: msg_formatting.h:33
Definition: msg_formatting.h:53
Definition: static_vec.h:40
size_t size() const
Definition: static_vec.h:56
T * data()
Definition: static_vec.h:54
uint32_t size
Definition: io.h:2
std::tuple< ReadStream, MsgVector< uint8_t > > read(Message< MsgVector< uint8_t > >, ReadStream in)
Definition: common_message_types.h:127
WriteStream write(WriteStream out, const MsgVector< uint8_t > &v)
Definition: common_message_types.h:130
StreamState< const uint8_t > ReadStream
Definition: msg_formatting.h:110
StreamState< uint8_t > WriteStream
Definition: msg_formatting.h:109
std::tuple< ReadStream, ResponseCode > read(Message< ResponseCode >, ReadStream in)
Definition: common_message_types.h:109
ResponseCode
Definition: common_message_types.h:42
@ UIErrorMalformedUTF8Encoding
TestKeyBits
Definition: common_message_types.h:61
std::tuple< ReadStream, MsgVector< T > > readSimpleVecInPlace(ReadStream in)
Definition: common_message_types.h:89
WriteStream writeSimpleVec(WriteStream out, const MsgVector< T > &vec)
Definition: common_message_types.h:104
UIOption
Definition: common_message_types.h:37
WriteStream write(WriteStream out, const ResponseCode &v)
Definition: common_message_types.h:112
const uint8_t * copyField(T &field, const uint8_t *(&pos))
Definition: common_message_types.h:73
auto bytesCast(const T &v) -> const uint8_t(&)[sizeof(T)]
Definition: utils.h:78
MessageSize
Definition: common_message_types.h:57
TestModeCommands
Definition: common_message_types.h:65