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