Branch data MC/DC data Line data Source code
1 : : : #include <stdbool.h>
2 : : : #include <stdint.h>
3 : : :
4 : : : #include "common.h"
5 : : :
6 : : : #include "can.h"
7 : : : #include "message_types.h"
8 : : : #include "msg_common.h"
9 : : : #include "msg_recovery.h"
10 : : :
11 : : 1 : bool build_alt_arm_cmd_msg(can_msg_prio_t prio, uint16_t timestamp, can_altimeter_id_t alt_id,
12 : : : can_alt_arm_state_t arm_cmd, can_msg_t *output) {
13 [ + - ]: [ T f ]: 1 : w_assert(output);
14 : : :
15 : : 1 : output->sid = build_sid(prio, MSG_ALT_ARM_CMD, alt_id);
16 : : 1 : write_timestamp(timestamp, output);
17 : : :
18 : : 1 : output->data[2] = arm_cmd;
19 : : 1 : output->data_len = 3;
20 : : :
21 : : 1 : return true;
22 : : : }
23 : : :
24 : : 1 : bool build_alt_arm_status_msg(can_msg_prio_t prio, uint16_t timestamp, can_altimeter_id_t alt_id,
25 : : : can_alt_arm_state_t arm_state, uint16_t v_drogue, uint16_t v_main,
26 : : : can_msg_t *output) {
27 [ + - ]: [ T f ]: 1 : w_assert(output);
28 : : :
29 : : 1 : output->sid = build_sid(prio, MSG_ALT_ARM_STATUS, alt_id);
30 : : 1 : write_timestamp(timestamp, output);
31 : : :
32 : : 1 : output->data[2] = arm_state;
33 : : : // drogue voltage
34 : : 1 : output->data[3] = v_drogue >> 8; // 8 msb
35 : : 1 : output->data[4] = v_drogue & 0x00FF; // 8 lsb
36 : : : // main voltage
37 : : 1 : output->data[5] = v_main >> 8; // 8 msb
38 : : 1 : output->data[6] = v_main & 0x00FF; // 8 lsb
39 : : :
40 : : 1 : output->data_len = 7;
41 : : :
42 : : 1 : return true;
43 : : : }
44 : : :
45 : : 2 : bool get_alt_arm_state(const can_msg_t *msg, can_altimeter_id_t *alt_id,
46 : : : can_alt_arm_state_t *arm_state) {
47 [ + - ]: [ T f ]: 2 : w_assert(msg);
48 [ + - ]: [ T f ]: 2 : w_assert(alt_id);
49 [ + - ]: [ T f ]: 2 : w_assert(arm_state);
50 : : :
51 [ + + + - ]:[ t F t F ]: 3 : if ((get_message_type(msg) != MSG_ALT_ARM_CMD) &&
52 : : 1 : (get_message_type(msg) != MSG_ALT_ARM_STATUS)) {
53 : : : return false;
54 : : : }
55 : : 2 : *alt_id = get_message_metadata(msg);
56 : : 2 : *arm_state = msg->data[2];
57 : : :
58 : : 2 : return true;
59 : : : }
60 : : :
61 : : 1 : bool get_pyro_voltage_data(const can_msg_t *msg, uint16_t *v_drogue, uint16_t *v_main) {
62 [ + - ]: [ T f ]: 1 : w_assert(msg);
63 [ + - ]: [ T f ]: 1 : w_assert(v_drogue);
64 [ + - ]: [ T f ]: 1 : w_assert(v_main);
65 : : :
66 [ + - ]: [ t F ]: 1 : if (get_message_type(msg) != MSG_ALT_ARM_STATUS) {
67 : : : return false;
68 : : : }
69 : : :
70 : : 1 : *v_drogue = (msg->data[3] << 8);
71 : : 1 : *v_drogue += msg->data[4];
72 : : 1 : *v_main = (msg->data[5] << 8);
73 : : 1 : *v_main += msg->data[6];
74 : : :
75 : : 1 : return true;
76 : : : }
77 : : :
|