asrt
Automated System Runtime Testing library
Loading...
Searching...
No Matches
core_proto.h
1
11#ifndef ASRT_PROTO_H
12#define ASRT_PROTO_H
13
14#ifdef __cplusplus
15extern "C" {
16#endif
17
18#include "../asrtl/chann.h"
19#include "./status.h"
20#include "util.h"
21
22#include <stdint.h>
23
24enum asrt_message_id_e
25{
26 ASRT_MSG_PROTO_VERSION = 0x01, // reactor <-> controller
27 ASRT_MSG_DESC = 0x02, // reactor <-> controller
28 ASRT_MSG_TEST_COUNT = 0x03, // reactor <-> controller
29 ASRT_MSG_TEST_INFO = 0x04, // reactor <-> controller
30 ASRT_MSG_TEST_START = 0x05, // reactor <-> controller
31 ASRT_MSG_TEST_RESULT = 0x06, // reactor -> controller
32};
33
34typedef uint16_t asrt_message_id;
35
36static inline struct asrt_send_req* asrt_msg_u16( struct asrt_u8d2msg* msg, uint16_t val )
37{
38 uint8_t* p = msg->buff;
39 asrt_add_u16( &p, val );
40 msg->req.buff = ( struct asrt_span_span ){
41 .b = msg->buff,
42 .e = msg->buff + sizeof msg->buff,
43 .rest = NULL,
44 .rest_count = 0,
45 };
46 return &msg->req;
47}
48
49static inline struct asrt_send_req* asrt_msg_rtoc_proto_version(
50 struct asrt_u8d8msg* msg,
51 uint16_t major,
52 uint16_t minor,
53 uint16_t patch )
54{
55 uint8_t* p = msg->buff;
56 asrt_add_u16( &p, ASRT_MSG_PROTO_VERSION );
57 asrt_add_u16( &p, major );
58 asrt_add_u16( &p, minor );
59 asrt_add_u16( &p, patch );
60 msg->req.buff = ( struct asrt_span_span ){
61 .b = msg->buff,
62 .e = msg->buff + sizeof msg->buff,
63 .rest = NULL,
64 .rest_count = 0,
65 };
66 return &msg->req;
67}
68static inline struct asrt_send_req* asrt_msg_ctor_proto_version( struct asrt_u8d2msg* msg )
69{
70 return asrt_msg_u16( msg, ASRT_MSG_PROTO_VERSION );
71}
72
74{
75 struct asrt_span str_span;
76 uint8_t hdr[2];
77 struct asrt_send_req req;
78};
79
80static inline struct asrt_send_req* asrt_msg_rtoc_desc(
81 struct asrt_core_desc_msg* msg,
82 char const* desc,
83 uint32_t desc_size )
84{
85 uint8_t* h = msg->hdr;
86 asrt_add_u16( &h, ASRT_MSG_DESC );
87 msg->str_span =
88 ( struct asrt_span ){ .b = (uint8_t*) desc, .e = (uint8_t*) desc + desc_size };
89 msg->req.buff = ( struct asrt_span_span ){
90 .b = msg->hdr,
91 .e = msg->hdr + sizeof msg->hdr,
92 .rest = &msg->str_span,
93 .rest_count = 1,
94 };
95 return &msg->req;
96}
97
98static inline struct asrt_send_req* asrt_msg_ctor_desc( struct asrt_u8d2msg* msg )
99{
100 return asrt_msg_u16( msg, ASRT_MSG_DESC );
101}
102
103static inline struct asrt_send_req* asrt_msg_rtoc_test_count(
104 struct asrt_u8d4msg* msg,
105 uint16_t count )
106{
107 uint8_t* p = msg->buff;
108 asrt_add_u16( &p, ASRT_MSG_TEST_COUNT );
109 asrt_add_u16( &p, count );
110
111 msg->req.buff = ( struct asrt_span_span ){
112 .b = msg->buff,
113 .e = msg->buff + sizeof msg->buff,
114 .rest = NULL,
115 .rest_count = 0,
116 };
117 return &msg->req;
118}
119
120static inline struct asrt_send_req* asrt_msg_ctor_test_count( struct asrt_u8d2msg* msg )
121{
122 return asrt_msg_u16( msg, ASRT_MSG_TEST_COUNT );
123}
124
125enum asrt_test_info_result_e
126{
127 ASRT_TEST_INFO_SUCCESS = 0x01,
128 ASRT_TEST_INFO_MISSING_TEST_ERR = 0x02,
129};
130typedef uint8_t asrt_test_info_result;
131
133{
134 struct asrt_span str_span;
135 uint8_t hdr[5];
136 struct asrt_send_req req;
137};
138
139static inline struct asrt_send_req* asrt_msg_rtoc_test_info(
140 struct asrt_core_test_info_msg* msg,
141 uint16_t id,
142 asrt_test_info_result res,
143 char const* desc,
144 uint32_t desc_size )
145{
146 uint8_t* h = msg->hdr;
147 asrt_add_u16( &h, ASRT_MSG_TEST_INFO );
148 asrt_add_u16( &h, id );
149 *h++ = (uint8_t) res;
150 msg->str_span =
151 ( struct asrt_span ){ .b = (uint8_t*) desc, .e = (uint8_t*) desc + desc_size };
152 msg->req.buff = ( struct asrt_span_span ){
153 .b = msg->hdr,
154 .e = msg->hdr + sizeof msg->hdr,
155 .rest = &msg->str_span,
156 .rest_count = 1,
157 };
158 return &msg->req;
159}
160
161static inline struct asrt_send_req* asrt_msg_ctor_test_info( struct asrt_u8d4msg* msg, uint16_t id )
162{
163 uint8_t* p = msg->buff;
164 asrt_add_u16( &p, ASRT_MSG_TEST_INFO );
165 asrt_add_u16( &p, id );
166 msg->req.buff = ( struct asrt_span_span ){
167 .b = msg->buff,
168 .e = msg->buff + sizeof msg->buff,
169 .rest = NULL,
170 .rest_count = 0,
171 };
172 return &msg->req;
173}
174
175
176static inline struct asrt_send_req* asrt_msg_rtoc_test_start(
177 struct asrt_u8d8msg* msg,
178 uint16_t test_id,
179 uint32_t run_id )
180{
181 uint8_t* p = msg->buff;
182 asrt_add_u16( &p, ASRT_MSG_TEST_START );
183 asrt_add_u16( &p, test_id );
184 asrt_add_u32( &p, run_id );
185 msg->req.buff = ( struct asrt_span_span ){
186 .b = msg->buff,
187 .e = msg->buff + sizeof msg->buff,
188 .rest = NULL,
189 .rest_count = 0,
190 };
191 return &msg->req;
192}
193
194static inline struct asrt_send_req* asrt_msg_ctor_test_start(
195 struct asrt_u8d8msg* msg,
196 uint16_t test_id,
197 uint32_t run_id )
198{
199 uint8_t* p = msg->buff;
200 asrt_add_u16( &p, ASRT_MSG_TEST_START );
201 asrt_add_u16( &p, test_id );
202 asrt_add_u32( &p, run_id );
203 msg->req.buff = ( struct asrt_span_span ){
204 .b = msg->buff,
205 .e = msg->buff + sizeof msg->buff,
206 .rest = NULL,
207 .rest_count = 0,
208 };
209 return &msg->req;
210}
211
212enum asrt_test_result_e
213{
214 ASRT_TEST_RESULT_SUCCESS = 0x01, // Test executed successfully
215 ASRT_TEST_RESULT_ERROR =
216 0x02, // Test execution resulted in an error (e.g. test code crashed, or
217 // test start was requested for non-existing test)
218 ASRT_TEST_RESULT_FAILURE = 0x03, // Test executed and did not pass (e.g. assertion failure)
219};
220typedef uint16_t asrt_test_result;
221
222static inline struct asrt_send_req* asrt_msg_rtoc_test_result(
223 struct asrt_u8d8msg* msg,
224 uint32_t run_id,
225 asrt_test_result res )
226{
227 uint8_t* p = msg->buff;
228 asrt_add_u16( &p, ASRT_MSG_TEST_RESULT );
229 asrt_add_u32( &p, run_id );
230 asrt_add_u16( &p, res );
231 msg->req.buff = ( struct asrt_span_span ){
232 .b = msg->buff,
233 .e = msg->buff + sizeof msg->buff,
234 .rest = NULL,
235 .rest_count = 0,
236 };
237 return &msg->req;
238}
239
240#ifdef __cplusplus
241}
242#endif
243
244#endif
Definition: core_proto.h:74
Definition: core_proto.h:133
An outgoing message request placed in a module's send queue.
Definition: chann.h:64
struct asrt_span_span buff
Message payload (scatter-gather).
Definition: chann.h:65
Scatter-gather buffer: a primary byte range [b, e) followed by rest_count additional spans.
Definition: span.h:37
uint8_t * b
Primary buffer start.
Definition: span.h:38
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee ...
Definition: span.h:23
uint8_t * b
Pointer to the first byte.
Definition: span.h:24
uint8_t * e
One-past-the-end pointer.
Definition: span.h:25
Definition: chann.h:196
Definition: chann.h:201
Definition: chann.h:216