RTE RBC 2oo2 Reference Application
0.1.0 build 0006685
SIL 4 2oo2 Dual-Site Fault-Tolerant ERTMS Radio Block Centre Reference Architecture
Toggle main menu visibility
Loading...
Searching...
No Matches
rbc_util_km114_relay.h
Go to the documentation of this file.
1
#ifndef RTE_EXAMPLE_RBC_UTIL_KM114_RELAY_H
2
#define RTE_EXAMPLE_RBC_UTIL_KM114_RELAY_H
3
27
28
#include <stdbool.h>
29
#include <stdint.h>
30
#include <string.h>
31
32
#include "
rbc_util_frame.h
"
33
34
#ifdef __cplusplus
35
extern
"C"
{
36
#endif
37
38
#define RBC_UTIL_KM114_RELAY_HEADER_SIZE 4U
39
#define RBC_UTIL_KM114_RELAY_CHUNK_MAX (RBC_UTIL_PAYLOAD_MAX - RBC_UTIL_KM114_RELAY_HEADER_SIZE)
/* 246 */
40
#define RBC_UTIL_KM114_RELAY_MAX_FRAGS 2U
41
#define RBC_UTIL_KM114_RELAY_FILE_MAX (RBC_UTIL_KM114_RELAY_CHUNK_MAX * RBC_UTIL_KM114_RELAY_MAX_FRAGS)
/* 492 */
42
55
static
inline
size_t
rbc_util_km114_relay_encode_chunk
(uint8_t *out, uint16_t total_len, uint8_t frag_index,
56
uint8_t frag_count,
const
uint8_t *chunk,
57
size_t
chunk_len)
58
{
59
if
(chunk_len > (
size_t
)
RBC_UTIL_KM114_RELAY_CHUNK_MAX
)
60
{
61
return
0U;
62
}
63
out[0] = (uint8_t)(total_len & 0xFFU);
64
out[1] = (uint8_t)((total_len >> 8) & 0xFFU);
65
out[2] = frag_index;
66
out[3] = frag_count;
67
if
(chunk_len > 0U)
68
{
69
(void)memcpy(&out[
RBC_UTIL_KM114_RELAY_HEADER_SIZE
], chunk, chunk_len);
70
}
71
return
RBC_UTIL_KM114_RELAY_HEADER_SIZE
+ chunk_len;
72
}
73
80
static
inline
bool
rbc_util_km114_relay_decode_chunk
(
const
uint8_t *payload, uint8_t payload_len,
81
uint16_t *out_total_len, uint8_t *out_frag_index,
82
uint8_t *out_frag_count,
const
uint8_t **out_chunk,
83
uint8_t *out_chunk_len)
84
{
85
if
(payload_len < (uint8_t)
RBC_UTIL_KM114_RELAY_HEADER_SIZE
)
86
{
87
return
false
;
88
}
89
*out_total_len = (uint16_t)((uint16_t)payload[0] | ((uint16_t)payload[1] << 8));
90
*out_frag_index = payload[2];
91
*out_frag_count = payload[3];
92
*out_chunk = &payload[
RBC_UTIL_KM114_RELAY_HEADER_SIZE
];
93
*out_chunk_len = (uint8_t)(payload_len - (uint8_t)
RBC_UTIL_KM114_RELAY_HEADER_SIZE
);
94
return
true
;
95
}
96
97
#ifdef __cplusplus
98
}
/* extern "C" */
99
#endif
100
101
#endif
/* RTE_EXAMPLE_RBC_UTIL_KM114_RELAY_H */
rbc_util_frame.h
ADR-038: the wire frame for the A/B<->C util side channel (RTE_EXAMPLE_RELAY_KIND_UTIL) and the C-sid...
RBC_UTIL_KM114_RELAY_CHUNK_MAX
#define RBC_UTIL_KM114_RELAY_CHUNK_MAX
Definition
rbc_util_km114_relay.h:39
rbc_util_km114_relay_decode_chunk
static bool rbc_util_km114_relay_decode_chunk(const uint8_t *payload, uint8_t payload_len, uint16_t *out_total_len, uint8_t *out_frag_index, uint8_t *out_frag_count, const uint8_t **out_chunk, uint8_t *out_chunk_len)
Decodes one chunk's header out of a received RBC_UTIL_TOPIC_KM114_FILE publish payload (payload_len b...
Definition
rbc_util_km114_relay.h:80
rbc_util_km114_relay_encode_chunk
static size_t rbc_util_km114_relay_encode_chunk(uint8_t *out, uint16_t total_len, uint8_t frag_index, uint8_t frag_count, const uint8_t *chunk, size_t chunk_len)
Encodes one chunk of a file relay transfer into a RBC_UTIL_TOPIC_KM114_FILE publish payload.
Definition
rbc_util_km114_relay.h:55
RBC_UTIL_KM114_RELAY_HEADER_SIZE
#define RBC_UTIL_KM114_RELAY_HEADER_SIZE
Definition
rbc_util_km114_relay.h:38
src
application
AB
common
rbc_util_km114_relay.h
Generated by
1.18.0