GCC Code Coverage Report


Directory: ../../
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 0.0% 0 / 0 / 45
Functions: 0.0% 0 / 0 / 1
Branches: 0.0% 0 / 0 / 18

app/rev2/fin_calib.c
Line Branch Exec Source
1 /*******************************************************************************
2 * *
3 * FILE: *
4 * fin_calib.c *
5 * *
6 * DESCRIPTION: *
7 * Calibrates left and right fin individually. *
8 * *
9 * CRITICALITY: *
10 * NFQ - Non-Flight Qualified *
11 * *
12 * COPYRIGHT: *
13 * Copyright (c) 2025 Sun Devil Rocketry. *
14 * All rights reserved. *
15 * *
16 * This software is licensed under terms that can be found in the LICENSE *
17 * file in the root directory of this software component. *
18 * If no LICENSE file comes with this software, it is covered under the *
19 * BSD-3-Clause. *
20 * *
21 * https://opensource.org/license/bsd-3-clause *
22 * *
23 *******************************************************************************/
24
25 #include <stdint.h>
26 #include "main.h"
27 #include "usb.h"
28 #include "servo.h"
29 #include "led.h"
30
31 #define SERVO_1_POS 0x10
32 #define SERVO_1_NEG 0x11
33 #define SERVO_2_POS 0x12
34 #define SERVO_2_NEG 0x13
35 #define SERVO_3_POS 0x30
36 #define SERVO_3_NEG 0x31
37 #define SERVO_4_POS 0x32
38 #define SERVO_4_NEG 0x33
39 #define SET_REF 0x14
40 #define EXIT 0x15
41
42 /*------------------------------------------------------------------------------
43 Global Variables
44 ------------------------------------------------------------------------------*/
45 extern PRESET_DATA preset_data;
46
47
48 /*******************************************************************************
49 * *
50 * PROCEDURE: *
51 * finCalibration *
52 * *
53 * DESCRIPTION: *
54 * Allow SDEC to send commands to change servo reference points. *
55 * *
56 *******************************************************************************/
57 ✗ USB_STATUS finCalibration(uint8_t *signalIn)
58 {
59 ✗ uint8_t exit_calib = 0;
60 ✗ USB_STATUS usb_status = USB_OK;
61 ✗ uint8_t max_deflection_angle = preset_data.config_settings.control_max_deflection_angle;
62 ✗ while ( !exit_calib )
63 {
64 ✗ usb_status = usb_receive(signalIn, 1, HAL_DEFAULT_TIMEOUT);
65 ✗ led_set_color(LED_WHITE);
66 ✗ if ( usb_status == USB_OK && usb_detect() )
67 {
68 ✗ switch(*signalIn)
69 {
70 ✗ case SERVO_1_POS:
71 {
72 ✗ preset_data.servo_preset.rp_servo1 = preset_data.servo_preset.rp_servo1 + 1;
73 ✗ break;
74 }
75 ✗ case SERVO_1_NEG:
76 {
77 ✗ preset_data.servo_preset.rp_servo1 = preset_data.servo_preset.rp_servo1 - 1;
78 ✗ break;
79 }
80 ✗ case SERVO_2_POS:
81 {
82 ✗ preset_data.servo_preset.rp_servo2 = preset_data.servo_preset.rp_servo2 + 1;
83 ✗ break;
84 }
85 ✗ case SERVO_2_NEG:
86 {
87 ✗ preset_data.servo_preset.rp_servo2 = preset_data.servo_preset.rp_servo2 - 1;
88 ✗ break;
89 }
90 ✗ case SERVO_3_POS:
91 {
92 ✗ preset_data.servo_preset.rp_servo3 = preset_data.servo_preset.rp_servo3 + 1;
93 ✗ break;
94 }
95 ✗ case SERVO_3_NEG:
96 {
97 ✗ preset_data.servo_preset.rp_servo3 = preset_data.servo_preset.rp_servo3 - 1;
98 ✗ break;
99 }
100 ✗ case SERVO_4_POS:
101 {
102 ✗ preset_data.servo_preset.rp_servo4 = preset_data.servo_preset.rp_servo4 + 1;
103 ✗ break;
104 }
105 ✗ case SERVO_4_NEG:
106 {
107 ✗ preset_data.servo_preset.rp_servo4 = preset_data.servo_preset.rp_servo4 - 1;
108 ✗ break;
109 }
110 case SET_REF:
111 /* Unused */
112 break;
113 ✗ case EXIT:
114 {
115 ✗ exit_calib = 1;
116 ✗ break;
117 }
118 default:
119 break;
120 }
121
122 /* Set a hard boundary for servo preset angle and consider max deflection angle */
123
124 ✗ preset_data.servo_preset.rp_servo1 = motor_snap_to_bound( preset_data.servo_preset.rp_servo1, 180 - max_deflection_angle, 0 + max_deflection_angle );
125 ✗ preset_data.servo_preset.rp_servo2 = motor_snap_to_bound( preset_data.servo_preset.rp_servo2, 180 - max_deflection_angle, 0 + max_deflection_angle );
126 ✗ preset_data.servo_preset.rp_servo3 = motor_snap_to_bound( preset_data.servo_preset.rp_servo3, 180 - max_deflection_angle, 0 + max_deflection_angle );
127 ✗ preset_data.servo_preset.rp_servo4 = motor_snap_to_bound( preset_data.servo_preset.rp_servo4, 180 - max_deflection_angle, 0 + max_deflection_angle );
128
129 ✗ motor_drive( SERVO_1, preset_data.servo_preset.rp_servo1 );
130 ✗ motor_drive( SERVO_2, preset_data.servo_preset.rp_servo2 );
131 ✗ motor_drive( SERVO_3, preset_data.servo_preset.rp_servo3 );
132 ✗ motor_drive( SERVO_4, preset_data.servo_preset.rp_servo4 );
133
134 }
135 ✗ else if ( usb_status == USB_FAIL )
136 {
137 return USB_FAIL;
138 }
139 }
140 return usb_status;
141
142 } /* finCalibration */
143
144 /*******************************************************************************
145 * END OF FILE *
146 *******************************************************************************/
147