From df0bae645ed5ef6f82bceae92d48f45097f3ac54 Mon Sep 17 00:00:00 2001 From: bytecod3 Date: Tue, 6 Aug 2024 10:37:40 +0000 Subject: [PATCH] deploy: df92d52e96300444ff7e8c28ffb5f24c621dac48 --- SystemLogLevels_8h_source.html | 115 + SystemLogger_8h_source.html | 119 + _system_log_levels_8h_source.html | 115 + _system_logger_8h_source.html | 119 + annotated.html | 115 + bc_s.png | Bin 0 -> 676 bytes bc_sd.png | Bin 0 -> 635 bytes classCustomGPS.html | 111 + classCustomGPS.png | Bin 0 -> 451 bytes classDataLogger-members.html | 110 + classDataLogger.html | 320 +++ classLoggerConsole-members.html | 104 + classLoggerConsole.html | 128 + classLoggerConsole.png | Bin 0 -> 532 bytes classMPU6050-members.html | 132 + classMPU6050.html | 309 +++ classState__machine-members.html | 110 + classState__machine.html | 134 + classSystemLogger-members.html | 103 + classSystemLogger.html | 125 + classSystemLogger.png | Bin 0 -> 535 bytes classTest-members.html | 103 + classTest.html | 118 + class_custom_g_p_s.html | 111 + class_custom_g_p_s.png | Bin 0 -> 451 bytes class_data_logger-members.html | 110 + class_data_logger.html | 320 +++ class_logger_console-members.html | 104 + class_logger_console.html | 128 + class_logger_console.png | Bin 0 -> 532 bytes class_m_p_u6050-members.html | 132 + class_m_p_u6050.html | 309 +++ class_state__machine-members.html | 110 + class_state__machine.html | 134 + class_system_logger-members.html | 103 + class_system_logger.html | 125 + class_system_logger.png | Bin 0 -> 535 bytes class_test-members.html | 103 + class_test.html | 118 + classes.html | 128 + clipboard.js | 61 + closed.png | Bin 0 -> 132 bytes cookie.js | 58 + custom-time_8h.html | 147 ++ custom-time_8h_source.html | 117 + data-types_8h_source.html | 163 ++ defs_8h_source.html | 171 ++ dir_13e138d54eb8818da29c3992edef070a.html | 112 + dir_223c149f86d1b3369d43d9ec6c6d367c.html | 114 + dir_68267d1309a1af8e8297ef4c3efbcdba.html | 122 + dir_7e35c193691ab641d32e52b2b4a47995.html | 116 + dir_c7dea9aec5351af29cf9782f17ca3e80.html | 112 + dir_cef54c92003fea6141f5cbd24377e67d.html | 110 + dir_d09072d1c94fe000833aa47d92501a74.html | 122 + dir_d44c64559bbebec7f509842c48db8b23.html | 116 + dir_f60075fce1cd53b9027038118d904c9d.html | 110 + doc.svg | 12 + docd.svg | 12 + doxygen.css | 2244 +++++++++++++++++ doxygen.svg | 28 + doxygen_crawl.html | 301 +++ dynsections.js | 198 ++ files.html | 124 + folderclosed.svg | 11 + folderclosedd.svg | 11 + folderopen.svg | 17 + folderopend.svg | 12 + functions.html | 113 + functions_func.html | 113 + globals.html | 228 ++ globals_defs.html | 106 + globals_enum.html | 98 + globals_eval.html | 99 + globals_func.html | 122 + globals_vars.html | 121 + gps_8h_source.html | 121 + hierarchy.html | 116 + include_2state__machine_8cpp.html | 155 ++ include_2state__machine_8h_source.html | 121 + index.html | 99 + jquery.js | 34 + kalman_8h_source.html | 117 + logger_8h_source.html | 150 ++ md_README.html | 343 +++ md__r_e_a_d_m_e.html | 342 +++ md_n4-flight-software_2README.html | 99 + md_n4-flight-software_2_r_e_a_d_m_e.html | 99 + ...-flight-software_2src_2pin-assignment.html | 99 + menu.js | 134 + menudata.js | 61 + minus.svg | 8 + minusd.svg | 8 + mpu_8h_source.html | 197 ++ nav_f.png | Bin 0 -> 153 bytes nav_fd.png | Bin 0 -> 169 bytes nav_g.png | Bin 0 -> 95 bytes nav_h.png | Bin 0 -> 98 bytes nav_hd.png | Bin 0 -> 114 bytes navtree.css | 149 ++ open.png | Bin 0 -> 123 bytes pages.html | 104 + plus.svg | 9 + plusd.svg | 9 + resize.js | 145 ++ search/all_0.js | 6 + search/all_1.js | 4 + search/all_10.js | 9 + search/all_11.js | 9 + search/all_12.js | 5 + search/all_13.js | 23 + search/all_14.js | 10 + search/all_15.js | 7 + search/all_16.js | 8 + search/all_17.js | 7 + search/all_18.js | 4 + search/all_19.js | 22 + search/all_1a.js | 26 + search/all_1b.js | 24 + search/all_1c.js | 5 + search/all_1d.js | 7 + search/all_2.js | 4 + search/all_3.js | 4 + search/all_4.js | 4 + search/all_5.js | 4 + search/all_6.js | 4 + search/all_7.js | 4 + search/all_8.js | 4 + search/all_9.js | 23 + search/all_a.js | 7 + search/all_b.js | 25 + search/all_c.js | 17 + search/all_d.js | 5 + search/all_e.js | 26 + search/all_f.js | 17 + search/classes_0.js | 5 + search/classes_1.js | 4 + search/classes_2.js | 4 + search/classes_3.js | 4 + search/classes_4.js | 5 + search/classes_5.js | 4 + search/classes_6.js | 4 + search/classes_7.js | 5 + search/classes_8.js | 5 + search/close.svg | 18 + search/defines_0.js | 4 + search/defines_1.js | 4 + search/defines_2.js | 4 + search/defines_3.js | 5 + search/defines_4.js | 5 + search/defines_5.js | 4 + search/defines_6.js | 4 + search/enums_0.js | 4 + search/enumvalues_0.js | 4 + search/enumvalues_1.js | 4 + search/files_0.js | 4 + search/files_1.js | 4 + search/files_2.js | 5 + search/functions_0.js | 6 + search/functions_1.js | 7 + search/functions_2.js | 6 + search/functions_3.js | 5 + search/functions_4.js | 7 + search/functions_5.js | 4 + search/functions_6.js | 5 + search/functions_7.js | 14 + search/functions_8.js | 4 + search/functions_9.js | 4 + search/functions_a.js | 10 + search/functions_b.js | 5 + search/mag.svg | 24 + search/mag_d.svg | 24 + search/mag_sel.svg | 31 + search/mag_seld.svg | 31 + search/pages_0.js | 4 + search/pages_1.js | 4 + search/pages_2.js | 4 + search/pages_3.js | 4 + search/pages_4.js | 4 + search/pages_5.js | 4 + search/pages_6.js | 4 + search/search.css | 291 +++ search/search.js | 694 +++++ search/searchdata.js | 39 + search/variables_0.js | 4 + search/variables_1.js | 6 + search/variables_2.js | 10 + search/variables_3.js | 4 + search/variables_4.js | 4 + search/variables_5.js | 4 + search/variables_6.js | 4 + search/variables_7.js | 4 + search/variables_8.js | 5 + search/variables_9.js | 7 + search/variables_a.js | 4 + search/variables_b.js | 4 + sensors_8h_source.html | 113 + splitbar.png | Bin 0 -> 314 bytes splitbard.png | Bin 0 -> 282 bytes src_2main_8cpp.html | 1561 ++++++++++++ states_8h.html | 127 + states_8h_source.html | 119 + structAcceleration__Data-members.html | 106 + structAcceleration__Data.html | 127 + structAltimeter__Data-members.html | 106 + structAltimeter__Data.html | 123 + structFiltered__Data-members.html | 102 + structFiltered__Data.html | 111 + structGPS__Data-members.html | 105 + structGPS__Data.html | 120 + structGyroscope__Data-members.html | 104 + structGyroscope__Data.html | 117 + structTelemetry__Data-members.html | 108 + structTelemetry__Data.html | 129 + struct_acceleration___data-members.html | 106 + struct_acceleration___data.html | 127 + struct_altimeter___data-members.html | 106 + struct_altimeter___data.html | 123 + struct_filtered___data-members.html | 102 + struct_filtered___data.html | 111 + struct_g_p_s___data-members.html | 105 + struct_g_p_s___data.html | 120 + struct_gyroscope___data-members.html | 104 + struct_gyroscope___data.html | 117 + struct_telemetry___data-members.html | 108 + struct_telemetry___data.html | 129 + sync_off.png | Bin 0 -> 853 bytes sync_on.png | Bin 0 -> 845 bytes tab_a.png | Bin 0 -> 142 bytes tab_ad.png | Bin 0 -> 135 bytes tab_b.png | Bin 0 -> 169 bytes tab_bd.png | Bin 0 -> 173 bytes tab_h.png | Bin 0 -> 177 bytes tab_hd.png | Bin 0 -> 180 bytes tab_s.png | Bin 0 -> 184 bytes tab_sd.png | Bin 0 -> 188 bytes tabs.css | 1 + test_2state__machine_8cpp.html | 110 + test_2state__machine_8h_source.html | 121 + test__class_8h_source.html | 115 + 239 files changed, 19684 insertions(+) create mode 100644 SystemLogLevels_8h_source.html create mode 100644 SystemLogger_8h_source.html create mode 100644 _system_log_levels_8h_source.html create mode 100644 _system_logger_8h_source.html create mode 100644 annotated.html create mode 100644 bc_s.png create mode 100644 bc_sd.png create mode 100644 classCustomGPS.html create mode 100644 classCustomGPS.png create mode 100644 classDataLogger-members.html create mode 100644 classDataLogger.html create mode 100644 classLoggerConsole-members.html create mode 100644 classLoggerConsole.html create mode 100644 classLoggerConsole.png create mode 100644 classMPU6050-members.html create mode 100644 classMPU6050.html create mode 100644 classState__machine-members.html create mode 100644 classState__machine.html create mode 100644 classSystemLogger-members.html create mode 100644 classSystemLogger.html create mode 100644 classSystemLogger.png create mode 100644 classTest-members.html create mode 100644 classTest.html create mode 100644 class_custom_g_p_s.html create mode 100644 class_custom_g_p_s.png create mode 100644 class_data_logger-members.html create mode 100644 class_data_logger.html create mode 100644 class_logger_console-members.html create mode 100644 class_logger_console.html create mode 100644 class_logger_console.png create mode 100644 class_m_p_u6050-members.html create mode 100644 class_m_p_u6050.html create mode 100644 class_state__machine-members.html create mode 100644 class_state__machine.html create mode 100644 class_system_logger-members.html create mode 100644 class_system_logger.html create mode 100644 class_system_logger.png create mode 100644 class_test-members.html create mode 100644 class_test.html create mode 100644 classes.html create mode 100644 clipboard.js create mode 100644 closed.png create mode 100644 cookie.js create mode 100644 custom-time_8h.html create mode 100644 custom-time_8h_source.html create mode 100644 data-types_8h_source.html create mode 100644 defs_8h_source.html create mode 100644 dir_13e138d54eb8818da29c3992edef070a.html create mode 100644 dir_223c149f86d1b3369d43d9ec6c6d367c.html create mode 100644 dir_68267d1309a1af8e8297ef4c3efbcdba.html create mode 100644 dir_7e35c193691ab641d32e52b2b4a47995.html create mode 100644 dir_c7dea9aec5351af29cf9782f17ca3e80.html create mode 100644 dir_cef54c92003fea6141f5cbd24377e67d.html create mode 100644 dir_d09072d1c94fe000833aa47d92501a74.html create mode 100644 dir_d44c64559bbebec7f509842c48db8b23.html create mode 100644 dir_f60075fce1cd53b9027038118d904c9d.html create mode 100644 doc.svg create mode 100644 docd.svg create mode 100644 doxygen.css create mode 100644 doxygen.svg create mode 100644 doxygen_crawl.html create mode 100644 dynsections.js create mode 100644 files.html create mode 100644 folderclosed.svg create mode 100644 folderclosedd.svg create mode 100644 folderopen.svg create mode 100644 folderopend.svg create mode 100644 functions.html create mode 100644 functions_func.html create mode 100644 globals.html create mode 100644 globals_defs.html create mode 100644 globals_enum.html create mode 100644 globals_eval.html create mode 100644 globals_func.html create mode 100644 globals_vars.html create mode 100644 gps_8h_source.html create mode 100644 hierarchy.html create mode 100644 include_2state__machine_8cpp.html create mode 100644 include_2state__machine_8h_source.html create mode 100644 index.html create mode 100644 jquery.js create mode 100644 kalman_8h_source.html create mode 100644 logger_8h_source.html create mode 100644 md_README.html create mode 100644 md__r_e_a_d_m_e.html create mode 100644 md_n4-flight-software_2README.html create mode 100644 md_n4-flight-software_2_r_e_a_d_m_e.html create mode 100644 md_n4-flight-software_2src_2pin-assignment.html create mode 100644 menu.js create mode 100644 menudata.js create mode 100644 minus.svg create mode 100644 minusd.svg create mode 100644 mpu_8h_source.html create mode 100644 nav_f.png create mode 100644 nav_fd.png create mode 100644 nav_g.png create mode 100644 nav_h.png create mode 100644 nav_hd.png create mode 100644 navtree.css create mode 100644 open.png create mode 100644 pages.html create mode 100644 plus.svg create mode 100644 plusd.svg create mode 100644 resize.js create mode 100644 search/all_0.js create mode 100644 search/all_1.js create mode 100644 search/all_10.js create mode 100644 search/all_11.js create mode 100644 search/all_12.js create mode 100644 search/all_13.js create mode 100644 search/all_14.js create mode 100644 search/all_15.js create mode 100644 search/all_16.js create mode 100644 search/all_17.js create mode 100644 search/all_18.js create mode 100644 search/all_19.js create mode 100644 search/all_1a.js create mode 100644 search/all_1b.js create mode 100644 search/all_1c.js create mode 100644 search/all_1d.js create mode 100644 search/all_2.js create mode 100644 search/all_3.js create mode 100644 search/all_4.js create mode 100644 search/all_5.js create mode 100644 search/all_6.js create mode 100644 search/all_7.js create mode 100644 search/all_8.js create mode 100644 search/all_9.js create mode 100644 search/all_a.js create mode 100644 search/all_b.js create mode 100644 search/all_c.js create mode 100644 search/all_d.js create mode 100644 search/all_e.js create mode 100644 search/all_f.js create mode 100644 search/classes_0.js create mode 100644 search/classes_1.js create mode 100644 search/classes_2.js create mode 100644 search/classes_3.js create mode 100644 search/classes_4.js create mode 100644 search/classes_5.js create mode 100644 search/classes_6.js create mode 100644 search/classes_7.js create mode 100644 search/classes_8.js create mode 100644 search/close.svg create mode 100644 search/defines_0.js create mode 100644 search/defines_1.js create mode 100644 search/defines_2.js create mode 100644 search/defines_3.js create mode 100644 search/defines_4.js create mode 100644 search/defines_5.js create mode 100644 search/defines_6.js create mode 100644 search/enums_0.js create mode 100644 search/enumvalues_0.js create mode 100644 search/enumvalues_1.js create mode 100644 search/files_0.js create mode 100644 search/files_1.js create mode 100644 search/files_2.js create mode 100644 search/functions_0.js create mode 100644 search/functions_1.js create mode 100644 search/functions_2.js create mode 100644 search/functions_3.js create mode 100644 search/functions_4.js create mode 100644 search/functions_5.js create mode 100644 search/functions_6.js create mode 100644 search/functions_7.js create mode 100644 search/functions_8.js create mode 100644 search/functions_9.js create mode 100644 search/functions_a.js create mode 100644 search/functions_b.js create mode 100644 search/mag.svg create mode 100644 search/mag_d.svg create mode 100644 search/mag_sel.svg create mode 100644 search/mag_seld.svg create mode 100644 search/pages_0.js create mode 100644 search/pages_1.js create mode 100644 search/pages_2.js create mode 100644 search/pages_3.js create mode 100644 search/pages_4.js create mode 100644 search/pages_5.js create mode 100644 search/pages_6.js create mode 100644 search/search.css create mode 100644 search/search.js create mode 100644 search/searchdata.js create mode 100644 search/variables_0.js create mode 100644 search/variables_1.js create mode 100644 search/variables_2.js create mode 100644 search/variables_3.js create mode 100644 search/variables_4.js create mode 100644 search/variables_5.js create mode 100644 search/variables_6.js create mode 100644 search/variables_7.js create mode 100644 search/variables_8.js create mode 100644 search/variables_9.js create mode 100644 search/variables_a.js create mode 100644 search/variables_b.js create mode 100644 sensors_8h_source.html create mode 100644 splitbar.png create mode 100644 splitbard.png create mode 100644 src_2main_8cpp.html create mode 100644 states_8h.html create mode 100644 states_8h_source.html create mode 100644 structAcceleration__Data-members.html create mode 100644 structAcceleration__Data.html create mode 100644 structAltimeter__Data-members.html create mode 100644 structAltimeter__Data.html create mode 100644 structFiltered__Data-members.html create mode 100644 structFiltered__Data.html create mode 100644 structGPS__Data-members.html create mode 100644 structGPS__Data.html create mode 100644 structGyroscope__Data-members.html create mode 100644 structGyroscope__Data.html create mode 100644 structTelemetry__Data-members.html create mode 100644 structTelemetry__Data.html create mode 100644 struct_acceleration___data-members.html create mode 100644 struct_acceleration___data.html create mode 100644 struct_altimeter___data-members.html create mode 100644 struct_altimeter___data.html create mode 100644 struct_filtered___data-members.html create mode 100644 struct_filtered___data.html create mode 100644 struct_g_p_s___data-members.html create mode 100644 struct_g_p_s___data.html create mode 100644 struct_gyroscope___data-members.html create mode 100644 struct_gyroscope___data.html create mode 100644 struct_telemetry___data-members.html create mode 100644 struct_telemetry___data.html create mode 100644 sync_off.png create mode 100644 sync_on.png create mode 100644 tab_a.png create mode 100644 tab_ad.png create mode 100644 tab_b.png create mode 100644 tab_bd.png create mode 100644 tab_h.png create mode 100644 tab_hd.png create mode 100644 tab_s.png create mode 100644 tab_sd.png create mode 100644 tabs.css create mode 100644 test_2state__machine_8cpp.html create mode 100644 test_2state__machine_8h_source.html create mode 100644 test__class_8h_source.html diff --git a/SystemLogLevels_8h_source.html b/SystemLogLevels_8h_source.html new file mode 100644 index 0000000..40d1377 --- /dev/null +++ b/SystemLogLevels_8h_source.html @@ -0,0 +1,115 @@ + + + + + + + +N4 Flight Software: n4-flight-software/system-logger/SystemLogLevels.h Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
SystemLogLevels.h
+
+
+
1
+
10#ifndef LEVELS_H
+
11#define LEVELS_H
+
12
+
13enum LOG_LEVEL {
+
14 DEBUG = 0,
+
15 INFO,
+
16 WARNING,
+
17 CRITICAL,
+
18 ERROR
+
19};
+
20
+
21#endif
+
+ + +
+ + diff --git a/SystemLogger_8h_source.html b/SystemLogger_8h_source.html new file mode 100644 index 0000000..1ca0751 --- /dev/null +++ b/SystemLogger_8h_source.html @@ -0,0 +1,119 @@ + + + + + + + +N4 Flight Software: n4-flight-software/system-logger/SystemLogger.h Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
SystemLogger.h
+
+
+
1#ifndef SYSTEMLOGGER_H
+
2#define SYSTEMLOGGER_H
+
3
+
4#include <cstdint>
+
5
+
6
+
+ +
8 public:
+
9 void writeToConsole (const uint32_t timestamp, const char* client, uint8_t log_level, const char* msg);
+
10 const char* getLogLevelString(uint8_t log_level);
+
11};
+
+
12
+
13#endif
+
Definition SystemLogger.h:7
+
const char * getLogLevelString(uint8_t log_level)
convert the log level to string
Definition SystemLogger.cpp:8
+
+ + +
+ + diff --git a/_system_log_levels_8h_source.html b/_system_log_levels_8h_source.html new file mode 100644 index 0000000..40d1377 --- /dev/null +++ b/_system_log_levels_8h_source.html @@ -0,0 +1,115 @@ + + + + + + + +N4 Flight Software: n4-flight-software/system-logger/SystemLogLevels.h Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
SystemLogLevels.h
+
+
+
1
+
10#ifndef LEVELS_H
+
11#define LEVELS_H
+
12
+
13enum LOG_LEVEL {
+
14 DEBUG = 0,
+
15 INFO,
+
16 WARNING,
+
17 CRITICAL,
+
18 ERROR
+
19};
+
20
+
21#endif
+
+ + +
+ + diff --git a/_system_logger_8h_source.html b/_system_logger_8h_source.html new file mode 100644 index 0000000..8a113b0 --- /dev/null +++ b/_system_logger_8h_source.html @@ -0,0 +1,119 @@ + + + + + + + +N4 Flight Software: n4-flight-software/system-logger/SystemLogger.h Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
SystemLogger.h
+
+
+
1#ifndef SYSTEMLOGGER_H
+
2#define SYSTEMLOGGER_H
+
3
+
4#include <cstdint>
+
5
+
6
+
+ +
8 public:
+
9 void writeToConsole (const uint32_t timestamp, const char* client, uint8_t log_level, const char* msg);
+
10 const char* getLogLevelString(uint8_t log_level);
+
11};
+
+
12
+
13#endif
+
Definition SystemLogger.h:7
+
const char * getLogLevelString(uint8_t log_level)
convert the log level to string
Definition SystemLogger.cpp:8
+
+ + +
+ + diff --git a/annotated.html b/annotated.html new file mode 100644 index 0000000..382590c --- /dev/null +++ b/annotated.html @@ -0,0 +1,115 @@ + + + + + + + +N4 Flight Software: Class List + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
+ + +
+ + diff --git a/bc_s.png b/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/bc_sd.png b/bc_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..31ca888dc71049713b35c351933a8d0f36180bf1 GIT binary patch literal 635 zcmV->0)+jEP)Jwi0r1~gdSq#w{Bu1q z`craw(p2!hu$4C_$Oc3X(sI6e=9QSTwPt{G) z=htT&^~&c~L2~e{r5_5SYe7#Is-$ln>~Kd%$F#tC65?{LvQ}8O`A~RBB0N~`2M+waajO;5>3B&-viHGJeEK2TQOiPRa zfDKyqwMc4wfaEh4jt>H`nW_Zidwk@Bowp`}(VUaj-pSI(-1L>FJVsX}Yl9~JsqgsZ zUD9(rMwf23Gez6KPa|wwInZodP-2}9@fK0Ga_9{8SOjU&4l`pH4@qlQp83>>HT$xW zER^U>)MyV%t(Lu=`d=Y?{k1@}&r7ZGkFQ%z%N+sE9BtYjovzxyxCPxN6&@wLK{soQ zSmkj$aLI}miuE^p@~4}mg9OjDfGEkgY4~^XzLRUBB*O{+&vq<3v(E%+k_i%=`~j%{ Vj14gnt9}3g002ovPDHLkV1n!oC4m3{ literal 0 HcmV?d00001 diff --git a/classCustomGPS.html b/classCustomGPS.html new file mode 100644 index 0000000..67359ad --- /dev/null +++ b/classCustomGPS.html @@ -0,0 +1,111 @@ + + + + + + + +N4 Flight Software: CustomGPS Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+
CustomGPS Class Reference
+
+
+ +

#include <gps.h>

+
+Inheritance diagram for CustomGPS:
+
+
+ +
+

Detailed Description

+

Implements GPS functions to get latitude and longitude

+

The documentation for this class was generated from the following file:
    +
  • n4-flight-software/src/gps.h
  • +
+
+ + +
+ + diff --git a/classCustomGPS.png b/classCustomGPS.png new file mode 100644 index 0000000000000000000000000000000000000000..204ffb7b8478c94c09728947d5294b040e70f20b GIT binary patch literal 451 zcmV;!0X+VRP)vTJr#LVva2S`&=-}Ys|Ns9r%~qrU000SeQchC<|NsC0|NsC0Hv*f~0003_ zNklHYxzDjvtYnWkBGueEa|a002ovPDHLkV1g5&(l`JB literal 0 HcmV?d00001 diff --git a/classDataLogger-members.html b/classDataLogger-members.html new file mode 100644 index 0000000..81ab8f1 --- /dev/null +++ b/classDataLogger-members.html @@ -0,0 +1,110 @@ + + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+
DataLogger Member List
+
+
+ +

This is the complete list of members for DataLogger, including all inherited members.

+ + + + + + + + + + +
DataLogger(uint8_t cs_pin, uint8_t led_pin, char *filename, SerialFlashFile file, uint32_t filesize)DataLogger
loggerEquals()DataLogger
loggerFormat()DataLogger
loggerInfo()DataLogger
loggerInit()DataLogger
loggerRead(uint8_t file_pointer, char buffer)DataLogger
loggerSpaces()DataLogger
loggerTest()DataLogger
loggerWrite(telemetry_type_t)DataLogger
+ + +
+ + diff --git a/classDataLogger.html b/classDataLogger.html new file mode 100644 index 0000000..e39239c --- /dev/null +++ b/classDataLogger.html @@ -0,0 +1,320 @@ + + + + + + + +N4 Flight Software: DataLogger Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+ +
DataLogger Class Reference
+
+
+ +

#include <logger.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 DataLogger (uint8_t cs_pin, uint8_t led_pin, char *filename, SerialFlashFile file, uint32_t filesize)
 class constructor pass the chip select pin as a parameter for that class instance
 
bool loggerInit ()
 Initialize the flash memory.
 
void loggerFormat ()
 format the flash memory
 
+void loggerInfo ()
 print the data about the flash memory
 
bool loggerTest ()
 test the flash memory write and read function by reading and writing a variable to it
 
void loggerWrite (telemetry_type_t)
 write the provided data to the file created
 
void loggerRead (uint8_t file_pointer, char buffer)
 Read data from the start of the file to the end of the file.
 
+void loggerSpaces ()
 helper function to print spaces for data formatting
 
+void loggerEquals ()
 helper function to print = for data formatting
 
+

Detailed Description

+

Author: Edwin Mwiti Email: emwit.nosp@m.i658.nosp@m.@gmai.nosp@m.l.co.nosp@m.m Date: 7/6/2024

+

This file implements the onboard logging functions for the flight computer We use the SerialFlash library by Paul, link to the library is provided in the references section

+

If you are using more than one SPI flash memory, create an instance for each SPI flash memory

+

Constructor & Destructor Documentation

+ +

◆ DataLogger()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
DataLogger::DataLogger (uint8_t cs_pin,
uint8_t led_pin,
char * filename,
SerialFlashFile file,
uint32_t filesize )
+
+ +

class constructor pass the chip select pin as a parameter for that class instance

+
Parameters
+ + + + + +
cs_pinchip select pin
flas_ledLED to show formatting status
filenamethe filename of the file being created
file_sizethe size of the file being created
+
+
+ +
+
+

Member Function Documentation

+ +

◆ loggerFormat()

+ +
+
+ + + + + + + +
void DataLogger::loggerFormat ()
+
+ +

format the flash memory

+
Parameters
+ + +
none
+
+
+ +
+
+ +

◆ loggerInit()

+ +
+
+ + + + + + + +
bool DataLogger::loggerInit ()
+
+ +

Initialize the flash memory.

+
Returns
true on success and false on fail
+ +
+
+ +

◆ loggerRead()

+ +
+
+ + + + + + + + + + + +
void DataLogger::loggerRead (uint8_t file_pointer,
char buffer )
+
+ +

Read data from the start of the file to the end of the file.

+
Parameters
+ + + +
_file_pointerpointer to where we want to start reading the file. By default, this value os 0
bufferchar array to read the data into
+
+
+ +
+
+ +

◆ loggerTest()

+ +
+
+ + + + + + + +
bool DataLogger::loggerTest ()
+
+ +

test the flash memory write and read function by reading and writing a variable to it

+
Parameters
+ + +
none
+
+
+
Returns
true if R/W OK, false otherwise
+ +
+
+ +

◆ loggerWrite()

+ +
+
+ + + + + + + +
void DataLogger::loggerWrite (telemetry_type_t packet)
+
+ +

write the provided data to the file created

+
Parameters
+ + +
datathis is a struct pointer to the struct that contains the data that needs to be written to the memory
+
+
+ +
+
+
The documentation for this class was generated from the following files:
    +
  • n4-flight-software/src/logger.h
  • +
  • n4-flight-software/src/logger.cpp
  • +
+
+ + +
+ + diff --git a/classLoggerConsole-members.html b/classLoggerConsole-members.html new file mode 100644 index 0000000..d88174c --- /dev/null +++ b/classLoggerConsole-members.html @@ -0,0 +1,104 @@ + + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+
LoggerConsole Member List
+
+
+ +

This is the complete list of members for LoggerConsole, including all inherited members.

+ + + + +
getLogLevelString(uint8_t log_level)SystemLogger
writeToConsole(const time_t timestamp, const char *client, uint8_t log_level, const char *msg) (defined in LoggerConsole)LoggerConsoleinline
writeToConsole(const uint32_t timestamp, const char *client, uint8_t log_level, const char *msg) (defined in SystemLogger)SystemLogger
+ + +
+ + diff --git a/classLoggerConsole.html b/classLoggerConsole.html new file mode 100644 index 0000000..2d303f9 --- /dev/null +++ b/classLoggerConsole.html @@ -0,0 +1,128 @@ + + + + + + + +N4 Flight Software: LoggerConsole Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+ +
LoggerConsole Class Reference
+
+
+
+Inheritance diagram for LoggerConsole:
+
+
+ + +SystemLogger + +
+ + + + + + + + + + +

+Public Member Functions

+void writeToConsole (const time_t timestamp, const char *client, uint8_t log_level, const char *msg)
 
- Public Member Functions inherited from SystemLogger
+void writeToConsole (const uint32_t timestamp, const char *client, uint8_t log_level, const char *msg)
 
+const char * getLogLevelString (uint8_t log_level)
 convert the log level to string
 
+
The documentation for this class was generated from the following file:
    +
  • n4-flight-software/system-logger/logger-console.cpp
  • +
+
+ + +
+ + diff --git a/classLoggerConsole.png b/classLoggerConsole.png new file mode 100644 index 0000000000000000000000000000000000000000..f7dddb752714675148cdb994e50db60db9a91502 GIT binary patch literal 532 zcmeAS@N?(olHy`uVBq!ia0vp^NkAOH!3-p?o(z};q@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SR%c<=xyZhAIs2~du+B*-tA0mugfbEer>7#JAmd%8G=R4~4s8=H4Tfv2V2 zG3xAJ|2uyeOgUA~g}pgEt*dkQk!OdGJ&`m#W)aq*Vi_dtIEk-TN^qL}q^lObCd)lG zsdwLS>i@_ra567SE;_EdC~@wY_d%C-pS-u*(^^;BQsk7-gMl z(P8TZ#3Fak?a_UT@N|c_V!!vVO%_{@us$jgi*YbJd?{j$5y2(^yYEgP(oS9&+)810CZHxVO@38NV={eoE z>H8wRd5agTti1NvTGNxaRA9N2_odmdQUgVuC*8aLXNLDA=lEuza~A$$TrL=J=7+AT RD=_{TJYD@<);T3K0RS&#<`e(` literal 0 HcmV?d00001 diff --git a/classMPU6050-members.html b/classMPU6050-members.html new file mode 100644 index 0000000..6ee5380 --- /dev/null +++ b/classMPU6050-members.html @@ -0,0 +1,132 @@ + + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+
MPU6050 Member List
+
+
+ +

This is the complete list of members for MPU6050, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
acc_x (defined in MPU6050)MPU6050
acc_x_ms (defined in MPU6050)MPU6050
acc_x_real (defined in MPU6050)MPU6050
acc_y (defined in MPU6050)MPU6050
acc_y_ms (defined in MPU6050)MPU6050
acc_y_real (defined in MPU6050)MPU6050
acc_z (defined in MPU6050)MPU6050
acc_z_ms (defined in MPU6050)MPU6050
acc_z_real (defined in MPU6050)MPU6050
ang_vel_x (defined in MPU6050)MPU6050
ang_vel_x_real (defined in MPU6050)MPU6050
ang_vel_y (defined in MPU6050)MPU6050
ang_vel_y_real (defined in MPU6050)MPU6050
ang_vel_z (defined in MPU6050)MPU6050
ang_vel_z_real (defined in MPU6050)MPU6050
filterImu()MPU6050
getPitch()MPU6050
getRoll()MPU6050
init() (defined in MPU6050)MPU6050
MPU6050(uint8_t address, uint32_t accel_fs_range, uint32_t gyro_fs_range) (defined in MPU6050)MPU6050
pitch_angle (defined in MPU6050)MPU6050
readTemperature() (defined in MPU6050)MPU6050
readXAcceleration()MPU6050
readXAngularVelocity() (defined in MPU6050)MPU6050
readYAcceleration()MPU6050
readYAngularVelocity() (defined in MPU6050)MPU6050
readZAcceleration()MPU6050
readZAngularVelocity() (defined in MPU6050)MPU6050
roll_angle (defined in MPU6050)MPU6050
temp (defined in MPU6050)MPU6050
temp_real (defined in MPU6050)MPU6050
+ + +
+ + diff --git a/classMPU6050.html b/classMPU6050.html new file mode 100644 index 0000000..6ac2dd4 --- /dev/null +++ b/classMPU6050.html @@ -0,0 +1,309 @@ + + + + + + + +N4 Flight Software: MPU6050 Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+ +
MPU6050 Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

MPU6050 (uint8_t address, uint32_t accel_fs_range, uint32_t gyro_fs_range)
 
+void init ()
 
float readXAcceleration ()
 
float readYAcceleration ()
 
float readZAcceleration ()
 
+float readXAngularVelocity ()
 
+float readYAngularVelocity ()
 
+float readZAngularVelocity ()
 
+float readTemperature ()
 
void filterImu ()
 
float getRoll ()
 
float getPitch ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+int16_t acc_x
 
+int16_t acc_y
 
+int16_t acc_z
 
+float acc_x_real
 
+float acc_y_real
 
+float acc_z_real
 
+int16_t ang_vel_x
 
+int16_t ang_vel_y
 
+int16_t ang_vel_z
 
+float ang_vel_x_real
 
+float ang_vel_y_real
 
+float ang_vel_z_real
 
+int16_t temp
 
+float temp_real
 
+float pitch_angle
 
+float roll_angle
 
+float acc_x_ms
 
+float acc_y_ms
 
+float acc_z_ms
 
+

Member Function Documentation

+ +

◆ filterImu()

+ +
+
+ + + + + + + +
void MPU6050::filterImu ()
+
+

perform sensor fusion perfom complementary filter to remove accelerometer high frequrecny noise remove low frequency noise from gyroscope and fuse the sensors

+ +
+
+ +

◆ getPitch()

+ +
+
+ + + + + + + +
float MPU6050::getPitch ()
+
+

compute the roll angle angle along the longitudinal axis return pitch angle in degrees

+ +
+
+ +

◆ getRoll()

+ +
+
+ + + + + + + +
float MPU6050::getRoll ()
+
+

compute the pitch angle angle along the transverse axis return roll angle in degrees

+ +
+
+ +

◆ readXAcceleration()

+ +
+
+ + + + + + + +
float MPU6050::readXAcceleration ()
+
+

Read X axiS acceleration

+ +
+
+ +

◆ readYAcceleration()

+ +
+
+ + + + + + + +
float MPU6050::readYAcceleration ()
+
+

Read Y acceleration

+ +
+
+ +

◆ readZAcceleration()

+ +
+
+ + + + + + + +
float MPU6050::readZAcceleration ()
+
+

Read Z acceleration

+ +
+
+
The documentation for this class was generated from the following files:
    +
  • n4-flight-software/src/mpu.h
  • +
  • n4-flight-software/src/mpu.cpp
  • +
+
+ + +
+ + diff --git a/classState__machine-members.html b/classState__machine-members.html new file mode 100644 index 0000000..c683028 --- /dev/null +++ b/classState__machine-members.html @@ -0,0 +1,110 @@ + + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+
State_machine Member List
+
+
+ +

This is the complete list of members for State_machine, including all inherited members.

+ + + + + + + + + + +
apogee() (defined in State_machine)State_machine
ballistic_descent() (defined in State_machine)State_machine
checkState(float, float) (defined in State_machine)State_machine
coasting() (defined in State_machine)State_machine
parachute_deploy() (defined in State_machine)State_machine
post_flight() (defined in State_machine)State_machine
powered_flight() (defined in State_machine)State_machine
pre_flight() (defined in State_machine)State_machine
State_machine() (defined in State_machine)State_machine
+ + +
+ + diff --git a/classState__machine.html b/classState__machine.html new file mode 100644 index 0000000..9fbdbc5 --- /dev/null +++ b/classState__machine.html @@ -0,0 +1,134 @@ + + + + + + + +N4 Flight Software: State_machine Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+ +
State_machine Class Reference
+
+
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

+int32_t checkState (float, float)
 
+int pre_flight ()
 
+int powered_flight ()
 
+int coasting ()
 
+int apogee ()
 
+int ballistic_descent ()
 
+int parachute_deploy ()
 
+int post_flight ()
 
+
The documentation for this class was generated from the following files: +
+ + +
+ + diff --git a/classSystemLogger-members.html b/classSystemLogger-members.html new file mode 100644 index 0000000..3883a37 --- /dev/null +++ b/classSystemLogger-members.html @@ -0,0 +1,103 @@ + + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+
SystemLogger Member List
+
+
+ +

This is the complete list of members for SystemLogger, including all inherited members.

+ + + +
getLogLevelString(uint8_t log_level)SystemLogger
writeToConsole(const uint32_t timestamp, const char *client, uint8_t log_level, const char *msg) (defined in SystemLogger)SystemLogger
+ + +
+ + diff --git a/classSystemLogger.html b/classSystemLogger.html new file mode 100644 index 0000000..fc24f28 --- /dev/null +++ b/classSystemLogger.html @@ -0,0 +1,125 @@ + + + + + + + +N4 Flight Software: SystemLogger Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+ +
SystemLogger Class Reference
+
+
+
+Inheritance diagram for SystemLogger:
+
+
+ + +LoggerConsole + +
+ + + + + + + +

+Public Member Functions

+void writeToConsole (const uint32_t timestamp, const char *client, uint8_t log_level, const char *msg)
 
+const char * getLogLevelString (uint8_t log_level)
 convert the log level to string
 
+
The documentation for this class was generated from the following files:
    +
  • n4-flight-software/system-logger/SystemLogger.h
  • +
  • n4-flight-software/system-logger/SystemLogger.cpp
  • +
+
+ + +
+ + diff --git a/classSystemLogger.png b/classSystemLogger.png new file mode 100644 index 0000000000000000000000000000000000000000..1b129b9d2452ae94df3ddac48ad1be9dd261e9a3 GIT binary patch literal 535 zcmV+y0_gpTP)vTJr#LVva2S`&=-}Ys|Ns9r%~qrU000SeQchC<|NsC0|NsC0Hv*f~0004^ zNklR6PRdu8$LRHnF zPb0SSt7z)#25q9imot81B zTVe9{>gA5x%_|oOi!9wP#wPR9QD&9I+rI*;Vn!PgTc&}?<<5ybFX@Zo)Dky{OD&p+ zS}mT=MZ6YmWe_PDw;lCxx_eK&iAznEOG^kL^az0@M`|KS(xFcxgd|;(^+%Fzm9P5|yW_q010rs5y>2#}xbX4U zdah5>1oJFUsUV`qHVTt~zlh{1q#fnmJ>qKYyqe3O5V68Hh$B%p2RT#jD9p<$qLQdr zwXhv^*~N1$QZjBk%ASidd5(@E$x + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+
Test Member List
+
+
+ +

This is the complete list of members for Test, including all inherited members.

+ + + +
foo() (defined in Test)Test
y (defined in Test)Test
+ + +
+ + diff --git a/classTest.html b/classTest.html new file mode 100644 index 0000000..67fdc4f --- /dev/null +++ b/classTest.html @@ -0,0 +1,118 @@ + + + + + + + +N4 Flight Software: Test Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
+ + + + +

+Public Member Functions

+int foo ()
 
+ + + +

+Public Attributes

+int y
 
+
The documentation for this class was generated from the following file: +
+ + +
+ + diff --git a/class_custom_g_p_s.html b/class_custom_g_p_s.html new file mode 100644 index 0000000..cab3dc2 --- /dev/null +++ b/class_custom_g_p_s.html @@ -0,0 +1,111 @@ + + + + + + + +N4 Flight Software: CustomGPS Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+
CustomGPS Class Reference
+
+
+ +

#include <gps.h>

+
+Inheritance diagram for CustomGPS:
+
+
+ +
+

Detailed Description

+

Implements GPS functions to get latitude and longitude

+

The documentation for this class was generated from the following file:
    +
  • n4-flight-software/src/gps.h
  • +
+
+ + +
+ + diff --git a/class_custom_g_p_s.png b/class_custom_g_p_s.png new file mode 100644 index 0000000000000000000000000000000000000000..204ffb7b8478c94c09728947d5294b040e70f20b GIT binary patch literal 451 zcmV;!0X+VRP)vTJr#LVva2S`&=-}Ys|Ns9r%~qrU000SeQchC<|NsC0|NsC0Hv*f~0003_ zNklHYxzDjvtYnWkBGueEa|a002ovPDHLkV1g5&(l`JB literal 0 HcmV?d00001 diff --git a/class_data_logger-members.html b/class_data_logger-members.html new file mode 100644 index 0000000..86aa10e --- /dev/null +++ b/class_data_logger-members.html @@ -0,0 +1,110 @@ + + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+
DataLogger Member List
+
+
+ +

This is the complete list of members for DataLogger, including all inherited members.

+ + + + + + + + + + +
DataLogger(uint8_t cs_pin, uint8_t led_pin, char *filename, SerialFlashFile file, uint32_t filesize)DataLogger
loggerEquals()DataLogger
loggerFormat()DataLogger
loggerInfo()DataLogger
loggerInit()DataLogger
loggerRead(uint8_t file_pointer, char buffer)DataLogger
loggerSpaces()DataLogger
loggerTest()DataLogger
loggerWrite(telemetry_type_t)DataLogger
+ + +
+ + diff --git a/class_data_logger.html b/class_data_logger.html new file mode 100644 index 0000000..020fcd6 --- /dev/null +++ b/class_data_logger.html @@ -0,0 +1,320 @@ + + + + + + + +N4 Flight Software: DataLogger Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+ +
DataLogger Class Reference
+
+
+ +

#include <logger.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 DataLogger (uint8_t cs_pin, uint8_t led_pin, char *filename, SerialFlashFile file, uint32_t filesize)
 class constructor pass the chip select pin as a parameter for that class instance
 
bool loggerInit ()
 Initialize the flash memory.
 
void loggerFormat ()
 format the flash memory
 
+void loggerInfo ()
 print the data about the flash memory
 
bool loggerTest ()
 test the flash memory write and read function by reading and writing a variable to it
 
void loggerWrite (telemetry_type_t)
 write the provided data to the file created
 
void loggerRead (uint8_t file_pointer, char buffer)
 Read data from the start of the file to the end of the file.
 
+void loggerSpaces ()
 helper function to print spaces for data formatting
 
+void loggerEquals ()
 helper function to print = for data formatting
 
+

Detailed Description

+

Author: Edwin Mwiti Email: emwit.nosp@m.i658.nosp@m.@gmai.nosp@m.l.co.nosp@m.m Date: 7/6/2024

+

This file implements the onboard logging functions for the flight computer We use the SerialFlash library by Paul, link to the library is provided in the references section

+

If you are using more than one SPI flash memory, create an instance for each SPI flash memory

+

Constructor & Destructor Documentation

+ +

◆ DataLogger()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
DataLogger::DataLogger (uint8_t cs_pin,
uint8_t led_pin,
char * filename,
SerialFlashFile file,
uint32_t filesize )
+
+ +

class constructor pass the chip select pin as a parameter for that class instance

+
Parameters
+ + + + + +
cs_pinchip select pin
flas_ledLED to show formatting status
filenamethe filename of the file being created
file_sizethe size of the file being created
+
+
+ +
+
+

Member Function Documentation

+ +

◆ loggerFormat()

+ +
+
+ + + + + + + +
void DataLogger::loggerFormat ()
+
+ +

format the flash memory

+
Parameters
+ + +
none
+
+
+ +
+
+ +

◆ loggerInit()

+ +
+
+ + + + + + + +
bool DataLogger::loggerInit ()
+
+ +

Initialize the flash memory.

+
Returns
true on success and false on fail
+ +
+
+ +

◆ loggerRead()

+ +
+
+ + + + + + + + + + + +
void DataLogger::loggerRead (uint8_t file_pointer,
char buffer )
+
+ +

Read data from the start of the file to the end of the file.

+
Parameters
+ + + +
_file_pointerpointer to where we want to start reading the file. By default, this value os 0
bufferchar array to read the data into
+
+
+ +
+
+ +

◆ loggerTest()

+ +
+
+ + + + + + + +
bool DataLogger::loggerTest ()
+
+ +

test the flash memory write and read function by reading and writing a variable to it

+
Parameters
+ + +
none
+
+
+
Returns
true if R/W OK, false otherwise
+ +
+
+ +

◆ loggerWrite()

+ +
+
+ + + + + + + +
void DataLogger::loggerWrite (telemetry_type_t packet)
+
+ +

write the provided data to the file created

+
Parameters
+ + +
datathis is a struct pointer to the struct that contains the data that needs to be written to the memory
+
+
+ +
+
+
The documentation for this class was generated from the following files:
    +
  • n4-flight-software/src/logger.h
  • +
  • n4-flight-software/src/logger.cpp
  • +
+
+ + +
+ + diff --git a/class_logger_console-members.html b/class_logger_console-members.html new file mode 100644 index 0000000..773dd81 --- /dev/null +++ b/class_logger_console-members.html @@ -0,0 +1,104 @@ + + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+
LoggerConsole Member List
+
+
+ +

This is the complete list of members for LoggerConsole, including all inherited members.

+ + + + +
getLogLevelString(uint8_t log_level)SystemLogger
writeToConsole(const time_t timestamp, const char *client, uint8_t log_level, const char *msg) (defined in LoggerConsole)LoggerConsoleinline
writeToConsole(const uint32_t timestamp, const char *client, uint8_t log_level, const char *msg) (defined in SystemLogger)SystemLogger
+ + +
+ + diff --git a/class_logger_console.html b/class_logger_console.html new file mode 100644 index 0000000..52a9b0e --- /dev/null +++ b/class_logger_console.html @@ -0,0 +1,128 @@ + + + + + + + +N4 Flight Software: LoggerConsole Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+ +
LoggerConsole Class Reference
+
+
+
+Inheritance diagram for LoggerConsole:
+
+
+ + +SystemLogger + +
+ + + + + + + + + + +

+Public Member Functions

+void writeToConsole (const time_t timestamp, const char *client, uint8_t log_level, const char *msg)
 
- Public Member Functions inherited from SystemLogger
+void writeToConsole (const uint32_t timestamp, const char *client, uint8_t log_level, const char *msg)
 
+const char * getLogLevelString (uint8_t log_level)
 convert the log level to string
 
+
The documentation for this class was generated from the following file:
    +
  • n4-flight-software/system-logger/logger-console.cpp
  • +
+
+ + +
+ + diff --git a/class_logger_console.png b/class_logger_console.png new file mode 100644 index 0000000000000000000000000000000000000000..f7dddb752714675148cdb994e50db60db9a91502 GIT binary patch literal 532 zcmeAS@N?(olHy`uVBq!ia0vp^NkAOH!3-p?o(z};q@)9ULR|m<{|{uoc=NTi|Il&^ z1I+@7>1SR%c<=xyZhAIs2~du+B*-tA0mugfbEer>7#JAmd%8G=R4~4s8=H4Tfv2V2 zG3xAJ|2uyeOgUA~g}pgEt*dkQk!OdGJ&`m#W)aq*Vi_dtIEk-TN^qL}q^lObCd)lG zsdwLS>i@_ra567SE;_EdC~@wY_d%C-pS-u*(^^;BQsk7-gMl z(P8TZ#3Fak?a_UT@N|c_V!!vVO%_{@us$jgi*YbJd?{j$5y2(^yYEgP(oS9&+)810CZHxVO@38NV={eoE z>H8wRd5agTti1NvTGNxaRA9N2_odmdQUgVuC*8aLXNLDA=lEuza~A$$TrL=J=7+AT RD=_{TJYD@<);T3K0RS&#<`e(` literal 0 HcmV?d00001 diff --git a/class_m_p_u6050-members.html b/class_m_p_u6050-members.html new file mode 100644 index 0000000..646f3ad --- /dev/null +++ b/class_m_p_u6050-members.html @@ -0,0 +1,132 @@ + + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+
MPU6050 Member List
+
+
+ +

This is the complete list of members for MPU6050, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
acc_x (defined in MPU6050)MPU6050
acc_x_ms (defined in MPU6050)MPU6050
acc_x_real (defined in MPU6050)MPU6050
acc_y (defined in MPU6050)MPU6050
acc_y_ms (defined in MPU6050)MPU6050
acc_y_real (defined in MPU6050)MPU6050
acc_z (defined in MPU6050)MPU6050
acc_z_ms (defined in MPU6050)MPU6050
acc_z_real (defined in MPU6050)MPU6050
ang_vel_x (defined in MPU6050)MPU6050
ang_vel_x_real (defined in MPU6050)MPU6050
ang_vel_y (defined in MPU6050)MPU6050
ang_vel_y_real (defined in MPU6050)MPU6050
ang_vel_z (defined in MPU6050)MPU6050
ang_vel_z_real (defined in MPU6050)MPU6050
filterImu()MPU6050
getPitch()MPU6050
getRoll()MPU6050
init() (defined in MPU6050)MPU6050
MPU6050(uint8_t address, uint32_t accel_fs_range, uint32_t gyro_fs_range) (defined in MPU6050)MPU6050
pitch_angle (defined in MPU6050)MPU6050
readTemperature() (defined in MPU6050)MPU6050
readXAcceleration()MPU6050
readXAngularVelocity() (defined in MPU6050)MPU6050
readYAcceleration()MPU6050
readYAngularVelocity() (defined in MPU6050)MPU6050
readZAcceleration()MPU6050
readZAngularVelocity() (defined in MPU6050)MPU6050
roll_angle (defined in MPU6050)MPU6050
temp (defined in MPU6050)MPU6050
temp_real (defined in MPU6050)MPU6050
+ + +
+ + diff --git a/class_m_p_u6050.html b/class_m_p_u6050.html new file mode 100644 index 0000000..db360cd --- /dev/null +++ b/class_m_p_u6050.html @@ -0,0 +1,309 @@ + + + + + + + +N4 Flight Software: MPU6050 Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+ +
MPU6050 Class Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

MPU6050 (uint8_t address, uint32_t accel_fs_range, uint32_t gyro_fs_range)
 
+void init ()
 
float readXAcceleration ()
 
float readYAcceleration ()
 
float readZAcceleration ()
 
+float readXAngularVelocity ()
 
+float readYAngularVelocity ()
 
+float readZAngularVelocity ()
 
+float readTemperature ()
 
void filterImu ()
 
float getRoll ()
 
float getPitch ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

+int16_t acc_x
 
+int16_t acc_y
 
+int16_t acc_z
 
+float acc_x_real
 
+float acc_y_real
 
+float acc_z_real
 
+int16_t ang_vel_x
 
+int16_t ang_vel_y
 
+int16_t ang_vel_z
 
+float ang_vel_x_real
 
+float ang_vel_y_real
 
+float ang_vel_z_real
 
+int16_t temp
 
+float temp_real
 
+float pitch_angle
 
+float roll_angle
 
+float acc_x_ms
 
+float acc_y_ms
 
+float acc_z_ms
 
+

Member Function Documentation

+ +

◆ filterImu()

+ +
+
+ + + + + + + +
void MPU6050::filterImu ()
+
+

perform sensor fusion perfom complementary filter to remove accelerometer high frequrecny noise remove low frequency noise from gyroscope and fuse the sensors

+ +
+
+ +

◆ getPitch()

+ +
+
+ + + + + + + +
float MPU6050::getPitch ()
+
+

compute the roll angle angle along the longitudinal axis return pitch angle in degrees

+ +
+
+ +

◆ getRoll()

+ +
+
+ + + + + + + +
float MPU6050::getRoll ()
+
+

compute the pitch angle angle along the transverse axis return roll angle in degrees

+ +
+
+ +

◆ readXAcceleration()

+ +
+
+ + + + + + + +
float MPU6050::readXAcceleration ()
+
+

Read X axix acceleration

+ +
+
+ +

◆ readYAcceleration()

+ +
+
+ + + + + + + +
float MPU6050::readYAcceleration ()
+
+

Read Y acceleration

+ +
+
+ +

◆ readZAcceleration()

+ +
+
+ + + + + + + +
float MPU6050::readZAcceleration ()
+
+

Read Z acceleration

+ +
+
+
The documentation for this class was generated from the following files:
    +
  • n4-flight-software/src/mpu.h
  • +
  • n4-flight-software/src/mpu.cpp
  • +
+
+ + +
+ + diff --git a/class_state__machine-members.html b/class_state__machine-members.html new file mode 100644 index 0000000..d48a1b6 --- /dev/null +++ b/class_state__machine-members.html @@ -0,0 +1,110 @@ + + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+
State_machine Member List
+
+
+ +

This is the complete list of members for State_machine, including all inherited members.

+ + + + + + + + + + +
apogee() (defined in State_machine)State_machine
ballistic_descent() (defined in State_machine)State_machine
checkState(float, float) (defined in State_machine)State_machine
coasting() (defined in State_machine)State_machine
parachute_deploy() (defined in State_machine)State_machine
post_flight() (defined in State_machine)State_machine
powered_flight() (defined in State_machine)State_machine
pre_flight() (defined in State_machine)State_machine
State_machine() (defined in State_machine)State_machine
+ + +
+ + diff --git a/class_state__machine.html b/class_state__machine.html new file mode 100644 index 0000000..a584b6a --- /dev/null +++ b/class_state__machine.html @@ -0,0 +1,134 @@ + + + + + + + +N4 Flight Software: State_machine Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+ +
State_machine Class Reference
+
+
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

+int32_t checkState (float, float)
 
+int pre_flight ()
 
+int powered_flight ()
 
+int coasting ()
 
+int apogee ()
 
+int ballistic_descent ()
 
+int parachute_deploy ()
 
+int post_flight ()
 
+
The documentation for this class was generated from the following files: +
+ + +
+ + diff --git a/class_system_logger-members.html b/class_system_logger-members.html new file mode 100644 index 0000000..5a42764 --- /dev/null +++ b/class_system_logger-members.html @@ -0,0 +1,103 @@ + + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+
SystemLogger Member List
+
+
+ +

This is the complete list of members for SystemLogger, including all inherited members.

+ + + +
getLogLevelString(uint8_t log_level)SystemLogger
writeToConsole(const uint32_t timestamp, const char *client, uint8_t log_level, const char *msg) (defined in SystemLogger)SystemLogger
+ + +
+ + diff --git a/class_system_logger.html b/class_system_logger.html new file mode 100644 index 0000000..115c1fb --- /dev/null +++ b/class_system_logger.html @@ -0,0 +1,125 @@ + + + + + + + +N4 Flight Software: SystemLogger Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+ +
SystemLogger Class Reference
+
+
+
+Inheritance diagram for SystemLogger:
+
+
+ + +LoggerConsole + +
+ + + + + + + +

+Public Member Functions

+void writeToConsole (const uint32_t timestamp, const char *client, uint8_t log_level, const char *msg)
 
+const char * getLogLevelString (uint8_t log_level)
 convert the log level to string
 
+
The documentation for this class was generated from the following files:
    +
  • n4-flight-software/system-logger/SystemLogger.h
  • +
  • n4-flight-software/system-logger/SystemLogger.cpp
  • +
+
+ + +
+ + diff --git a/class_system_logger.png b/class_system_logger.png new file mode 100644 index 0000000000000000000000000000000000000000..1b129b9d2452ae94df3ddac48ad1be9dd261e9a3 GIT binary patch literal 535 zcmV+y0_gpTP)vTJr#LVva2S`&=-}Ys|Ns9r%~qrU000SeQchC<|NsC0|NsC0Hv*f~0004^ zNklR6PRdu8$LRHnF zPb0SSt7z)#25q9imot81B zTVe9{>gA5x%_|oOi!9wP#wPR9QD&9I+rI*;Vn!PgTc&}?<<5ybFX@Zo)Dky{OD&p+ zS}mT=MZ6YmWe_PDw;lCxx_eK&iAznEOG^kL^az0@M`|KS(xFcxgd|;(^+%Fzm9P5|yW_q010rs5y>2#}xbX4U zdah5>1oJFUsUV`qHVTt~zlh{1q#fnmJ>qKYyqe3O5V68Hh$B%p2RT#jD9p<$qLQdr zwXhv^*~N1$QZjBk%ASidd5(@E$x + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+
Test Member List
+
+
+ +

This is the complete list of members for Test, including all inherited members.

+ + + +
foo() (defined in Test)Test
y (defined in Test)Test
+ + +
+ + diff --git a/class_test.html b/class_test.html new file mode 100644 index 0000000..bf9d77e --- /dev/null +++ b/class_test.html @@ -0,0 +1,118 @@ + + + + + + + +N4 Flight Software: Test Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+ +
+ + + + +

+Public Member Functions

+int foo ()
 
+ + + +

+Public Attributes

+int y
 
+
The documentation for this class was generated from the following file: +
+ + +
+ + diff --git a/classes.html b/classes.html new file mode 100644 index 0000000..aca5f87 --- /dev/null +++ b/classes.html @@ -0,0 +1,128 @@ + + + + + + + +N4 Flight Software: Class Index + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Index
+
+ + + +
+ + diff --git a/clipboard.js b/clipboard.js new file mode 100644 index 0000000..42c1fb0 --- /dev/null +++ b/clipboard.js @@ -0,0 +1,61 @@ +/** + +The code below is based on the Doxygen Awesome project, see +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +let clipboard_title = "Copy to clipboard" +let clipboard_icon = `` +let clipboard_successIcon = `` +let clipboard_successDuration = 1000 + +$(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const clipboard_div = document.createElement("div") + clipboard_div.classList.add("clipboard") + clipboard_div.innerHTML = clipboard_icon + clipboard_div.title = clipboard_title + $(clipboard_div).click(function() { + const content = this.parentNode.cloneNode(true) + // filter out line number and folded fragments from file listings + content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() }) + let text = content.textContent + // remove trailing newlines and trailing spaces from empty lines + text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'') + navigator.clipboard.writeText(text); + this.classList.add("success") + this.innerHTML = clipboard_successIcon + window.setTimeout(() => { // switch back to normal icon after timeout + this.classList.remove("success") + this.innerHTML = clipboard_icon + }, clipboard_successDuration); + }) + fragment.insertBefore(clipboard_div, fragment.firstChild) + } + } +}) diff --git a/closed.png b/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/cookie.js b/cookie.js new file mode 100644 index 0000000..53ad21d --- /dev/null +++ b/cookie.js @@ -0,0 +1,58 @@ +/*! + Cookie helper functions + Copyright (c) 2023 Dimitri van Heesch + Released under MIT license. +*/ +let Cookie = { + cookie_namespace: 'doxygen_', + + readSetting(cookie,defVal) { + if (window.chrome) { + const val = localStorage.getItem(this.cookie_namespace+cookie) || + sessionStorage.getItem(this.cookie_namespace+cookie); + if (val) return val; + } else { + let myCookie = this.cookie_namespace+cookie+"="; + if (document.cookie) { + const index = document.cookie.indexOf(myCookie); + if (index != -1) { + const valStart = index + myCookie.length; + let valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + return document.cookie.substring(valStart, valEnd); + } + } + } + return defVal; + }, + + writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete + if (window.chrome) { + if (days==0) { + sessionStorage.setItem(this.cookie_namespace+cookie,val); + } else { + localStorage.setItem(this.cookie_namespace+cookie,val); + } + } else { + let date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + const expiration = days!=0 ? "expires="+date.toGMTString()+";" : ""; + document.cookie = this.cookie_namespace + cookie + "=" + + val + "; SameSite=Lax;" + expiration + "path=/"; + } + }, + + eraseSetting(cookie) { + if (window.chrome) { + if (localStorage.getItem(this.cookie_namespace+cookie)) { + localStorage.removeItem(this.cookie_namespace+cookie); + } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) { + sessionStorage.removeItem(this.cookie_namespace+cookie); + } + } else { + this.writeSetting(cookie,'',-1); + } + }, +} diff --git a/custom-time_8h.html b/custom-time_8h.html new file mode 100644 index 0000000..73d77c6 --- /dev/null +++ b/custom-time_8h.html @@ -0,0 +1,147 @@ + + + + + + + +N4 Flight Software: n4-flight-software/src/custom-time.h File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
custom-time.h File Reference
+
+
+ +

This file defeines functions needed for time conversions for data logging. +More...

+
#include <Arduino.h>
+
+

Go to the source code of this file.

+ + + + + +

+Functions

char * convertTimestamp (unsigned long)
 convert time in millisecsonds to minutes, seconds and time that are human readable
 
+

Detailed Description

+

This file defeines functions needed for time conversions for data logging.

+
+

Function Documentation

+ +

◆ convertTimestamp()

+ +
+
+ + + + + + + +
char * convertTimestamp (unsigned long msec)
+
+ +

convert time in millisecsonds to minutes, seconds and time that are human readable

+
+
Parameters
+ + +
msectime in milliseconds, got from millis() function
+
+
+ +
+
+
+ + +
+ + diff --git a/custom-time_8h_source.html b/custom-time_8h_source.html new file mode 100644 index 0000000..9c421b6 --- /dev/null +++ b/custom-time_8h_source.html @@ -0,0 +1,117 @@ + + + + + + + +N4 Flight Software: n4-flight-software/src/custom-time.h Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
custom-time.h
+
+
+Go to the documentation of this file.
1/*!****************************************************************************
+
2 * @file custom-time.h
+
3 * @brief This file defeines functions needed for time conversions
+
4 * for data logging
+
5 *******************************************************************************/
+
6
+
7#ifndef CUSTOM_TIME_H
+
8#define CUSTOM_TIME_H
+
9
+
10#include <Arduino.h>
+
11
+
12char* convertTimestamp(unsigned long);
+
13
+
14#endif
+
char * convertTimestamp(unsigned long)
convert time in millisecsonds to minutes, seconds and time that are human readable
Definition custom-time.cpp:17
+
+ + +
+ + diff --git a/data-types_8h_source.html b/data-types_8h_source.html new file mode 100644 index 0000000..b41c863 --- /dev/null +++ b/data-types_8h_source.html @@ -0,0 +1,163 @@ + + + + + + + +N4 Flight Software: n4-flight-software/src/data-types.h Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
data-types.h
+
+
+
1
+
6#ifndef DATA_TYPES_H
+
7#define DATA_TYPES_H
+
8
+
9#include <Arduino.h>
+
10
+
+
11typedef struct Acceleration_Data{
+
12 float ax;
+
13 float ay;
+
14 float az;
+
15 float pitch;
+
16 float roll;
+ +
+
18
+
+
19typedef struct Gyroscope_Data {
+
20 double gx;
+
21 double gy;
+
22 double gz;
+ +
+
24
+
+
25typedef struct GPS_Data{
+
26 double latitude;
+
27 double longitude;
+
28 uint16_t gps_altitude;
+
29 uint time;
+ +
+
31
+
+
32typedef struct Altimeter_Data{
+
33 double pressure;
+
34 double altitude;
+
35 double velocity;
+
36 double temperature;
+
37 double AGL; /* altitude above ground level */
+ +
+
39
+
+
40typedef struct Telemetry_Data {
+
41 uint32_t record_number;
+
42 uint8_t operation_mode;
+
43 uint8_t state;
+
44 accel_type_t acc_data;
+
45 gyro_type_t gyro_data;
+
46 gps_type_t gps_data;
+
47 altimeter_type_t alt_data;
+ +
+
49
+
50#endif
+
Definition data-types.h:11
+
Definition data-types.h:32
+
Definition data-types.h:25
+
Definition data-types.h:19
+
Definition data-types.h:40
+
+ + +
+ + diff --git a/defs_8h_source.html b/defs_8h_source.html new file mode 100644 index 0000000..6047fd9 --- /dev/null +++ b/defs_8h_source.html @@ -0,0 +1,171 @@ + + + + + + + +N4 Flight Software: n4-flight-software/include/defs.h Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
defs.h
+
+
+
1#ifndef DEFS_H
+
2#define DEFS_H
+
3
+
4#include <Arduino.h>
+
5
+
6// to select the telemetry transfer method used
+
7#define MQTT 1 // set this to 1 if using MQTT for telemetry transfer
+
8#define XBEE 1 // set to 1 if using XBEE for telemetry transfer
+
9
+
10#define GPS_BAUD_RATE 9600
+
11#define XBEE_BAUD_RATE // TODO: set to XBEE baud rate
+
12
+
13/* debug parameters for use during testing - set to 0 for production */
+
14#define DEBUG 1
+
15#define LOG_TO_MEMORY 0 // set to 1 during live testing
+
16#define DEBUG_TO_TERMINAL 1 // set to 0 for production
+
17
+
18#if DEBUG
+
19#define debug(x) Serial.print(x)
+
20#define debugln(x) Serial.println(x)
+
21#define debugf(x, y) Serial.printf(x, y)
+
22
+
23#else
+
24
+
25#define debug(x)
+
26#define debugln(x)
+
27#define debugf(x, y)
+
28#endif // DEBUG
+
29
+
30/* end of debug parameters */
+
31
+
32/* timing constant */
+
33#define SETUP_DELAY 300
+
34#define TASK_DELAY 10
+
35
+
36/* flight constants */
+
37#define EJECTION_HEIGHT 1000 // eject at 1000m AGL
+
38#define SEA_LEVEL_PRESSURE 101325 // Assume the sea level pressure is 101325 Pascals - this can change with weather
+
39#define BASE_ALTITUDE 1417 /* this value is the altitude at rocket launch site */
+
40
+
41/* tasks constants */
+
42#define STACK_SIZE 2048
+
43#define ALTIMETER_QUEUE_LENGTH 10 // todo: change to 2 items
+
44#define GYROSCOPE_QUEUE_LENGTH 10
+
45#define GPS_QUEUE_LENGTH 24
+
46#define TELEMETRY_DATA_QUEUE_LENGTH 10
+
47#define FILTERED_DATA_QUEUE_LENGTH 10
+
48#define FLIGHT_STATES_QUEUE_LENGTH 1
+
49
+
50/* MQTT constants */
+
51#define MQTT_SERVER "192.168.78.19"
+
52#define MQTT_PORT 1882
+
53
+
54/* WIFI credentials */
+
55// const char* SSID = "Galaxy";
+
56// const char* PASSWORD = "luwa2131";
+
57
+
58#define EJECTION_PIN 12
+
59/* LEDs for testing - remove on production */
+
60#define PRE_FLIGHT_LED 4
+
61
+
62// number of readings to take while callibrating the sensor
+
63#define CALLIBRATION_READINGS 200
+
64
+
65#define TX 17
+
66#define RX 16
+
67
+
68#endif // DEFS_H
+
69
+
+ + +
+ + diff --git a/dir_13e138d54eb8818da29c3992edef070a.html b/dir_13e138d54eb8818da29c3992edef070a.html new file mode 100644 index 0000000..84eda7e --- /dev/null +++ b/dir_13e138d54eb8818da29c3992edef070a.html @@ -0,0 +1,112 @@ + + + + + + + +N4 Flight Software: test Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
test Directory Reference
+
+
+ + + + + + + + +

+Files

 state_machine.cpp
 
 state_machine.h
 
 test_class.h
 
+
+ + +
+ + diff --git a/dir_223c149f86d1b3369d43d9ec6c6d367c.html b/dir_223c149f86d1b3369d43d9ec6c6d367c.html new file mode 100644 index 0000000..f77cd3a --- /dev/null +++ b/dir_223c149f86d1b3369d43d9ec6c6d367c.html @@ -0,0 +1,114 @@ + + + + + + + +N4 Flight Software: n4-flight-software Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
n4-flight-software Directory Reference
+
+
+ + + + + + + + + + +

+Directories

 include
 
 src
 
 system-logger
 
 test
 
+
+ + +
+ + diff --git a/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/dir_68267d1309a1af8e8297ef4c3efbcdba.html new file mode 100644 index 0000000..a6877f9 --- /dev/null +++ b/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -0,0 +1,122 @@ + + + + + + + +N4 Flight Software: src Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
src Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + +

+Files

 custom-time.h
 This file defeines functions needed for time conversions for data logging.
 
 data-types.h
 
 gps.h
 
 logger.h
 
 main.cpp
 This contains the main driver code for the flight computer.
 
 mpu.h
 
 states.h
 
+
+ + +
+ + diff --git a/dir_7e35c193691ab641d32e52b2b4a47995.html b/dir_7e35c193691ab641d32e52b2b4a47995.html new file mode 100644 index 0000000..ba9e18d --- /dev/null +++ b/dir_7e35c193691ab641d32e52b2b4a47995.html @@ -0,0 +1,116 @@ + + + + + + + +N4 Flight Software: n4-flight-software/include Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
include Directory Reference
+
+
+ + + + + + + + + + + + +

+Files

 defs.h
 
 kalman.h
 
 sensors.h
 
 state_machine.cpp
 
 state_machine.h
 
+
+ + +
+ + diff --git a/dir_c7dea9aec5351af29cf9782f17ca3e80.html b/dir_c7dea9aec5351af29cf9782f17ca3e80.html new file mode 100644 index 0000000..740543e --- /dev/null +++ b/dir_c7dea9aec5351af29cf9782f17ca3e80.html @@ -0,0 +1,112 @@ + + + + + + + +N4 Flight Software: n4-flight-software/test Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
test Directory Reference
+
+
+ + + + + + + + +

+Files

 state_machine.cpp
 
 state_machine.h
 
 test_class.h
 
+
+ + +
+ + diff --git a/dir_cef54c92003fea6141f5cbd24377e67d.html b/dir_cef54c92003fea6141f5cbd24377e67d.html new file mode 100644 index 0000000..03a62bf --- /dev/null +++ b/dir_cef54c92003fea6141f5cbd24377e67d.html @@ -0,0 +1,110 @@ + + + + + + + +N4 Flight Software: system-logger Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
system-logger Directory Reference
+
+
+ + + + + + +

+Files

 SystemLogger.h
 
 SystemLogLevels.h
 
+
+ + +
+ + diff --git a/dir_d09072d1c94fe000833aa47d92501a74.html b/dir_d09072d1c94fe000833aa47d92501a74.html new file mode 100644 index 0000000..244d7bc --- /dev/null +++ b/dir_d09072d1c94fe000833aa47d92501a74.html @@ -0,0 +1,122 @@ + + + + + + + +N4 Flight Software: n4-flight-software/src Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
src Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + +

+Files

 custom-time.h
 This file defeines functions needed for time conversions for data logging.
 
 data-types.h
 
 gps.h
 
 logger.h
 
 main.cpp
 This contains the main driver code for the flight computer.
 
 mpu.h
 
 states.h
 
+
+ + +
+ + diff --git a/dir_d44c64559bbebec7f509842c48db8b23.html b/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 0000000..2dae5b0 --- /dev/null +++ b/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,116 @@ + + + + + + + +N4 Flight Software: include Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
include Directory Reference
+
+
+ + + + + + + + + + + + +

+Files

 defs.h
 
 kalman.h
 
 sensors.h
 
 state_machine.cpp
 
 state_machine.h
 
+
+ + +
+ + diff --git a/dir_f60075fce1cd53b9027038118d904c9d.html b/dir_f60075fce1cd53b9027038118d904c9d.html new file mode 100644 index 0000000..1967017 --- /dev/null +++ b/dir_f60075fce1cd53b9027038118d904c9d.html @@ -0,0 +1,110 @@ + + + + + + + +N4 Flight Software: n4-flight-software/system-logger Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
system-logger Directory Reference
+
+
+ + + + + + +

+Files

 SystemLogger.h
 
 SystemLogLevels.h
 
+
+ + +
+ + diff --git a/doc.svg b/doc.svg new file mode 100644 index 0000000..0b928a5 --- /dev/null +++ b/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docd.svg b/docd.svg new file mode 100644 index 0000000..ac18b27 --- /dev/null +++ b/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/doxygen.css b/doxygen.css new file mode 100644 index 0000000..209912c --- /dev/null +++ b/doxygen.css @@ -0,0 +1,2244 @@ +/* The standard CSS for doxygen 1.11.0*/ + +html { +/* page base colors */ +--page-background-color: white; +--page-foreground-color: black; +--page-link-color: #3D578C; +--page-visited-link-color: #4665A2; + +/* index */ +--index-odd-item-bg-color: #F8F9FC; +--index-even-item-bg-color: white; +--index-header-color: black; +--index-separator-color: #A0A0A0; + +/* header */ +--header-background-color: #F9FAFC; +--header-separator-color: #C4CFE5; +--header-gradient-image: url('nav_h.png'); +--group-header-separator-color: #879ECB; +--group-header-color: #354C7B; +--inherit-header-color: gray; + +--footer-foreground-color: #2A3D61; +--footer-logo-width: 104px; +--citation-label-color: #334975; +--glow-color: cyan; + +--title-background-color: white; +--title-separator-color: #5373B4; +--directory-separator-color: #9CAFD4; +--separator-color: #4A6AAA; + +--blockquote-background-color: #F7F8FB; +--blockquote-border-color: #9CAFD4; + +--scrollbar-thumb-color: #9CAFD4; +--scrollbar-background-color: #F9FAFC; + +--icon-background-color: #728DC1; +--icon-foreground-color: white; +--icon-doc-image: url('doc.svg'); +--icon-folder-open-image: url('folderopen.svg'); +--icon-folder-closed-image: url('folderclosed.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #F9FAFC; +--memdecl-separator-color: #DEE4F0; +--memdecl-foreground-color: #555; +--memdecl-template-color: #4665A2; + +/* detailed member list */ +--memdef-border-color: #A8B8D9; +--memdef-title-background-color: #E2E8F2; +--memdef-title-gradient-image: url('nav_f.png'); +--memdef-proto-background-color: #DFE5F1; +--memdef-proto-text-color: #253555; +--memdef-proto-text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--memdef-doc-background-color: white; +--memdef-param-name-color: #602020; +--memdef-template-color: #4665A2; + +/* tables */ +--table-cell-border-color: #2D4068; +--table-header-background-color: #374F7F; +--table-header-foreground-color: #FFFFFF; + +/* labels */ +--label-background-color: #728DC1; +--label-left-top-border-color: #5373B4; +--label-right-bottom-border-color: #C4CFE5; +--label-foreground-color: white; + +/** navigation bar/tree/menu */ +--nav-background-color: #F9FAFC; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_b.png'); +--nav-gradient-hover-image: url('tab_h.png'); +--nav-gradient-active-image: url('tab_a.png'); +--nav-gradient-active-image-parent: url("../tab_a.png"); +--nav-separator-image: url('tab_s.png'); +--nav-breadcrumb-image: url('bc_s.png'); +--nav-breadcrumb-border-color: #C2CDE4; +--nav-splitbar-image: url('splitbar.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #283A5D; +--nav-text-hover-color: white; +--nav-text-active-color: white; +--nav-text-normal-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #364D7C; +--nav-menu-background-color: white; +--nav-menu-foreground-color: #555555; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.5); +--nav-arrow-color: #9CAFD4; +--nav-arrow-selected-color: #9CAFD4; + +/* table of contents */ +--toc-background-color: #F4F6FA; +--toc-border-color: #D8DFEE; +--toc-header-color: #4665A2; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: white; +--search-foreground-color: #909090; +--search-magnification-image: url('mag.svg'); +--search-magnification-select-image: url('mag_sel.svg'); +--search-active-color: black; +--search-filter-background-color: #F9FAFC; +--search-filter-foreground-color: black; +--search-filter-border-color: #90A5CE; +--search-filter-highlight-text-color: white; +--search-filter-highlight-bg-color: #3D578C; +--search-results-foreground-color: #425E97; +--search-results-background-color: #EEF1F7; +--search-results-border-color: black; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #555; + +/** code fragments */ +--code-keyword-color: #008000; +--code-type-keyword-color: #604020; +--code-flow-keyword-color: #E08000; +--code-comment-color: #800000; +--code-preprocessor-color: #806020; +--code-string-literal-color: #002080; +--code-char-literal-color: #008080; +--code-xml-cdata-color: black; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #4665A2; +--code-external-link-color: #4665A2; +--fragment-foreground-color: black; +--fragment-background-color: #FBFCFD; +--fragment-border-color: #C4CFE5; +--fragment-lineno-border-color: #00FF00; +--fragment-lineno-background-color: #E8E8E8; +--fragment-lineno-foreground-color: black; +--fragment-lineno-link-fg-color: #4665A2; +--fragment-lineno-link-bg-color: #D8D8D8; +--fragment-lineno-link-hover-fg-color: #4665A2; +--fragment-lineno-link-hover-bg-color: #C8C8C8; +--fragment-copy-ok-color: #2EC82E; +--tooltip-foreground-color: black; +--tooltip-background-color: white; +--tooltip-border-color: gray; +--tooltip-doc-color: grey; +--tooltip-declaration-color: #006318; +--tooltip-link-color: #4665A2; +--tooltip-shadow: 1px 1px 7px gray; +--fold-line-color: #808080; +--fold-minus-image: url('minus.svg'); +--fold-plus-image: url('plus.svg'); +--fold-minus-image-relpath: url('../../minus.svg'); +--fold-plus-image-relpath: url('../../plus.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +/** special sections */ +--warning-color-bg: #f8d1cc; +--warning-color-hl: #b61825; +--warning-color-text: #75070f; +--note-color-bg: #faf3d8; +--note-color-hl: #f3a600; +--note-color-text: #5f4204; +--todo-color-bg: #e4f3ff; +--todo-color-hl: #1879C4; +--todo-color-text: #274a5c; +--test-color-bg: #e8e8ff; +--test-color-hl: #3939C4; +--test-color-text: #1a1a5c; +--deprecated-color-bg: #ecf0f3; +--deprecated-color-hl: #5b6269; +--deprecated-color-text: #43454a; +--bug-color-bg: #e4dafd; +--bug-color-hl: #5b2bdd; +--bug-color-text: #2a0d72; +--invariant-color-bg: #d8f1e3; +--invariant-color-hl: #44b86f; +--invariant-color-text: #265532; +} + +@media (prefers-color-scheme: dark) { + html:not(.dark-mode) { + color-scheme: dark; + +/* page base colors */ +--page-background-color: black; +--page-foreground-color: #C9D1D9; +--page-link-color: #90A5CE; +--page-visited-link-color: #A3B4D7; + +/* index */ +--index-odd-item-bg-color: #0B101A; +--index-even-item-bg-color: black; +--index-header-color: #C4CFE5; +--index-separator-color: #334975; + +/* header */ +--header-background-color: #070B11; +--header-separator-color: #141C2E; +--header-gradient-image: url('nav_hd.png'); +--group-header-separator-color: #283A5D; +--group-header-color: #90A5CE; +--inherit-header-color: #A0A0A0; + +--footer-foreground-color: #5B7AB7; +--footer-logo-width: 60px; +--citation-label-color: #90A5CE; +--glow-color: cyan; + +--title-background-color: #090D16; +--title-separator-color: #354C79; +--directory-separator-color: #283A5D; +--separator-color: #283A5D; + +--blockquote-background-color: #101826; +--blockquote-border-color: #283A5D; + +--scrollbar-thumb-color: #283A5D; +--scrollbar-background-color: #070B11; + +--icon-background-color: #334975; +--icon-foreground-color: #C4CFE5; +--icon-doc-image: url('docd.svg'); +--icon-folder-open-image: url('folderopend.svg'); +--icon-folder-closed-image: url('folderclosedd.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #0B101A; +--memdecl-separator-color: #2C3F65; +--memdecl-foreground-color: #BBB; +--memdecl-template-color: #7C95C6; + +/* detailed member list */ +--memdef-border-color: #233250; +--memdef-title-background-color: #1B2840; +--memdef-title-gradient-image: url('nav_fd.png'); +--memdef-proto-background-color: #19243A; +--memdef-proto-text-color: #9DB0D4; +--memdef-proto-text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.9); +--memdef-doc-background-color: black; +--memdef-param-name-color: #D28757; +--memdef-template-color: #7C95C6; + +/* tables */ +--table-cell-border-color: #283A5D; +--table-header-background-color: #283A5D; +--table-header-foreground-color: #C4CFE5; + +/* labels */ +--label-background-color: #354C7B; +--label-left-top-border-color: #4665A2; +--label-right-bottom-border-color: #283A5D; +--label-foreground-color: #CCCCCC; + +/** navigation bar/tree/menu */ +--nav-background-color: #101826; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_bd.png'); +--nav-gradient-hover-image: url('tab_hd.png'); +--nav-gradient-active-image: url('tab_ad.png'); +--nav-gradient-active-image-parent: url("../tab_ad.png"); +--nav-separator-image: url('tab_sd.png'); +--nav-breadcrumb-image: url('bc_sd.png'); +--nav-breadcrumb-border-color: #2A3D61; +--nav-splitbar-image: url('splitbard.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #B6C4DF; +--nav-text-hover-color: #DCE2EF; +--nav-text-active-color: #DCE2EF; +--nav-text-normal-shadow: 0px 1px 1px black; +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #B6C4DF; +--nav-menu-background-color: #05070C; +--nav-menu-foreground-color: #BBBBBB; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.2); +--nav-arrow-color: #334975; +--nav-arrow-selected-color: #90A5CE; + +/* table of contents */ +--toc-background-color: #151E30; +--toc-border-color: #202E4A; +--toc-header-color: #A3B4D7; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: black; +--search-foreground-color: #C5C5C5; +--search-magnification-image: url('mag_d.svg'); +--search-magnification-select-image: url('mag_seld.svg'); +--search-active-color: #C5C5C5; +--search-filter-background-color: #101826; +--search-filter-foreground-color: #90A5CE; +--search-filter-border-color: #7C95C6; +--search-filter-highlight-text-color: #BCC9E2; +--search-filter-highlight-bg-color: #283A5D; +--search-results-background-color: #101826; +--search-results-foreground-color: #90A5CE; +--search-results-border-color: #7C95C6; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #2F436C; + +/** code fragments */ +--code-keyword-color: #CC99CD; +--code-type-keyword-color: #AB99CD; +--code-flow-keyword-color: #E08000; +--code-comment-color: #717790; +--code-preprocessor-color: #65CABE; +--code-string-literal-color: #7EC699; +--code-char-literal-color: #00E0F0; +--code-xml-cdata-color: #C9D1D9; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #C0C0C0; +--code-vhdl-keyword-color: #CF53C9; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #79C0FF; +--code-external-link-color: #79C0FF; +--fragment-foreground-color: #C9D1D9; +--fragment-background-color: #090D16; +--fragment-border-color: #30363D; +--fragment-lineno-border-color: #30363D; +--fragment-lineno-background-color: black; +--fragment-lineno-foreground-color: #6E7681; +--fragment-lineno-link-fg-color: #6E7681; +--fragment-lineno-link-bg-color: #303030; +--fragment-lineno-link-hover-fg-color: #8E96A1; +--fragment-lineno-link-hover-bg-color: #505050; +--fragment-copy-ok-color: #0EA80E; +--tooltip-foreground-color: #C9D1D9; +--tooltip-background-color: #202020; +--tooltip-border-color: #C9D1D9; +--tooltip-doc-color: #D9E1E9; +--tooltip-declaration-color: #20C348; +--tooltip-link-color: #79C0FF; +--tooltip-shadow: none; +--fold-line-color: #808080; +--fold-minus-image: url('minusd.svg'); +--fold-plus-image: url('plusd.svg'); +--fold-minus-image-relpath: url('../../minusd.svg'); +--fold-plus-image-relpath: url('../../plusd.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +/** special sections */ +--warning-color-bg: #2e1917; +--warning-color-hl: #ad2617; +--warning-color-text: #f5b1aa; +--note-color-bg: #3b2e04; +--note-color-hl: #f1b602; +--note-color-text: #ceb670; +--todo-color-bg: #163750; +--todo-color-hl: #1982D2; +--todo-color-text: #dcf0fa; +--test-color-bg: #121258; +--test-color-hl: #4242cf; +--test-color-text: #c0c0da; +--deprecated-color-bg: #2e323b; +--deprecated-color-hl: #738396; +--deprecated-color-text: #abb0bd; +--bug-color-bg: #2a2536; +--bug-color-hl: #7661b3; +--bug-color-text: #ae9ed6; +--invariant-color-bg: #303a35; +--invariant-color-hl: #76ce96; +--invariant-color-text: #cceed5; +}} +body { + background-color: var(--page-background-color); + color: var(--page-foreground-color); +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-family: var(--font-family-normal); + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid var(--group-header-separator-color); + color: var(--group-header-color); + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--glow-color); +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: var(--nav-gradient-active-image); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: var(--index-separator-color); +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: var(--index-header-color); +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: var(--index-even-item-bg-color); +} + +.classindex dl.odd { + background-color: var(--index-odd-item-bg-color); +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: var(--page-link-color); + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: var(--page-visited-link-color); +} + +a:hover { + text-decoration: none; + background: linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%); +} + +a:hover > span.arrow { + text-decoration: none; + background : var(--nav-background-color); +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: var(--code-link-color); +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: var(--code-external-link-color); +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul.check { + list-style:none; + text-indent: -16px; + padding-left: 38px; +} +li.unchecked:before { + content: "\2610\A0"; +} +li.checked:before { + content: "\2611\A0"; +} + +ol { + text-indent: 0px; +} + +ul { + text-indent: 0px; + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; + overflow-y: hidden; + position: relative; + min-height: 12px; + margin: 10px 0px; + padding: 10px 10px; + border: 1px solid var(--fragment-border-color); + border-radius: 4px; + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); +} + +pre.fragment { + word-wrap: break-word; + font-size: 10pt; + line-height: 125%; + font-family: var(--font-family-monospace); +} + +.clipboard { + width: 24px; + height: 24px; + right: 5px; + top: 5px; + opacity: 0; + position: absolute; + display: inline; + overflow: auto; + fill: var(--fragment-foreground-color); + justify-content: center; + align-items: center; + cursor: pointer; +} + +.clipboard.success { + border: 1px solid var(--fragment-foreground-color); + border-radius: 4px; +} + +.fragment:hover .clipboard, .clipboard.success { + opacity: .28; +} + +.clipboard:hover, .clipboard.success { + opacity: 1 !important; +} + +.clipboard:active:not([class~=success]) svg { + transform: scale(.91); +} + +.clipboard.success svg { + fill: var(--fragment-copy-ok-color); +} + +.clipboard.success { + border-color: var(--fragment-copy-ok-color); +} + +div.line { + font-family: var(--font-family-monospace); + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: var(--glow-color); + box-shadow: 0 0 10px var(--glow-color); +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid var(--fragment-lineno-border-color); + color: var(--fragment-lineno-foreground-color); + background-color: var(--fragment-lineno-background-color); + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: var(--fragment-lineno-link-fg-color); + background-color: var(--fragment-lineno-link-bg-color); +} + +span.lineno a:hover { + color: var(--fragment-lineno-link-hover-fg-color); + background-color: var(--fragment-lineno-link-hover-bg-color); +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: var(--page-foreground-color); + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: var(--footer-logo-width); +} + +.compoundTemplParams { + color: var(--memdecl-template-color); + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: var(--code-keyword-color); +} + +span.keywordtype { + color: var(--code-type-keyword-color); +} + +span.keywordflow { + color: var(--code-flow-keyword-color); +} + +span.comment { + color: var(--code-comment-color); +} + +span.preprocessor { + color: var(--code-preprocessor-color); +} + +span.stringliteral { + color: var(--code-string-literal-color); +} + +span.charliteral { + color: var(--code-char-literal-color); +} + +span.xmlcdata { + color: var(--code-xml-cdata-color); +} + +span.vhdldigit { + color: var(--code-vhdl-digit-color); +} + +span.vhdlchar { + color: var(--code-vhdl-char-color); +} + +span.vhdlkeyword { + color: var(--code-vhdl-keyword-color); +} + +span.vhdllogic { + color: var(--code-vhdl-logic-color); +} + +blockquote { + background-color: var(--blockquote-background-color); + border-left: 2px solid var(--blockquote-border-color); + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid var(--table-cell-border-color); +} + +th.dirtab { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid var(--separator-color); +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--glow-color); + box-shadow: 0 0 15px var(--glow-color); +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: var(--memdecl-background-color); + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: var(--memdecl-foreground-color); +} + +.memSeparator { + border-bottom: 1px solid var(--memdecl-separator-color); + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: var(--memdecl-template-color); + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: var(--memdef-title-gradient-image); + background-repeat: repeat-x; + background-color: var(--memdef-title-background-color); + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: var(--memdef-template-color); + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px var(--glow-color); +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 0px 6px 0px; + color: var(--memdef-proto-text-color); + font-weight: bold; + text-shadow: var(--memdef-proto-text-shadow); + background-color: var(--memdef-proto-background-color); + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: var(--font-family-monospace); + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: var(--memdef-doc-background-color); + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; +} + +.paramname { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; + margin-left: 2px; +} + +.paramname em { + color: var(--memdef-param-name-color); + font-style: normal; + margin-right: 1px; +} + +.paramname .paramdefval { + font-family: var(--font-family-monospace); +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: var(--font-family-monospace); + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: var(--label-background-color); + border-top:1px solid var(--label-left-top-border-color); + border-left:1px solid var(--label-left-top-border-color); + border-right:1px solid var(--label-right-bottom-border-color); + border-bottom:1px solid var(--label-right-bottom-border-color); + text-shadow: none; + color: var(--label-foreground-color); + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid var(--directory-separator-color); + border-bottom: 1px solid var(--directory-separator-color); + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: var(--index-odd-item-bg-color); +} + +.directory tr.even { + padding-left: 6px; + background-color: var(--index-even-item-bg-color); +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: var(--page-link-color); +} + +.arrow { + color: var(--nav-arrow-color); + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: var(--font-family-icon); + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: var(--icon-background-color); + color: var(--icon-foreground-color); + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-open-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-closed-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-doc-image); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: var(--footer-foreground-color); +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid var(--memdef-border-color); + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid var(--memdef-border-color); + border-bottom: 1px solid var(--memdef-border-color); + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid var(--memdef-border-color); +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: var(--memdef-title-gradient-image); + background-repeat:repeat-x; + background-color: var(--memdef-title-background-color); + font-size: 90%; + color: var(--memdef-proto-text-color); + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid var(--memdef-border-color); +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: var(--nav-gradient-image); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: var(--nav-gradient-image); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:var(--nav-text-normal-color); + border:solid 1px var(--nav-breadcrumb-border-color); + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:var(--nav-breadcrumb-image); + background-repeat:no-repeat; + background-position:right; + color: var(--nav-foreground-color); +} + +.navpath li.navelem a +{ + height:32px; + display:block; + outline: none; + color: var(--nav-text-normal-color); + font-family: var(--font-family-nav); + text-shadow: var(--nav-text-normal-shadow); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: var(--footer-foreground-color); + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: var(--header-gradient-image); + background-repeat:repeat-x; + background-color: var(--header-background-color); + margin: 0px; + border-bottom: 1px solid var(--header-separator-color); +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* + +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention, dl.important { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +*/ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.important, dl.note, dl.deprecated, dl.bug, +dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention, dl.important { + background: var(--warning-color-bg); + border-left: 8px solid var(--warning-color-hl); + color: var(--warning-color-text); +} + +dl.warning dt, dl.attention dt, dl.important dt { + color: var(--warning-color-hl); +} + +dl.note, dl.remark { + background: var(--note-color-bg); + border-left: 8px solid var(--note-color-hl); + color: var(--note-color-text); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-hl); +} + +dl.todo { + background: var(--todo-color-bg); + border-left: 8px solid var(--todo-color-hl); + color: var(--todo-color-text); +} + +dl.todo dt { + color: var(--todo-color-hl); +} + +dl.test { + background: var(--test-color-bg); + border-left: 8px solid var(--test-color-hl); + color: var(--test-color-text); +} + +dl.test dt { + color: var(--test-color-hl); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.bug { + background: var(--bug-color-bg); + border-left: 8px solid var(--bug-color-hl); + color: var(--bug-color-text); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.deprecated { + background: var(--deprecated-color-bg); + border-left: 8px solid var(--deprecated-color-hl); + color: var(--deprecated-color-text); +} + +dl.deprecated dt a { + color: var(--deprecated-color-hl) !important; +} + +dl.note dd, dl.warning dd, dl.pre dd, dl.post dd, +dl.remark dd, dl.attention dd, dl.important dd, dl.invariant dd, +dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color-bg); + border-left: 8px solid var(--invariant-color-hl); + color: var(--invariant-color-text); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-hl); +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: var(--font-family-title); + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid var(--title-separator-color); + background-color: var(--title-background-color); +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:var(--citation-label-color); + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: var(--toc-background-color); + border: 1px solid var(--toc-border-color); + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: var(--toc-down-arrow-image) no-repeat scroll 0 5px transparent; + font: 10px/1.2 var(--font-family-toc); + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 var(--font-family-toc); + color: var(--toc-header-color); + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 15px; +} + +div.toc li.level4 { + margin-left: 15px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: var(--inherit-header-color); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: var(--tooltip-foreground-color); + background-color: var(--tooltip-background-color); + border: 1px solid var(--tooltip-border-color); + border-radius: 4px 4px 4px 4px; + box-shadow: var(--tooltip-shadow); + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: var(--tooltip-doc-color); + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: var(--tooltip-link-color); +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: var(--tooltip-declaration-color); +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: var(--font-family-tooltip); + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + +body { + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-background-color); +} + +::-webkit-scrollbar { + background-color: var(--scrollbar-background-color); + height: 12px; + width: 12px; +} +::-webkit-scrollbar-thumb { + border-radius: 6px; + box-shadow: inset 0 0 12px 12px var(--scrollbar-thumb-color); + border: solid 2px transparent; +} +::-webkit-scrollbar-corner { + background-color: var(--scrollbar-background-color); +} + diff --git a/doxygen.svg b/doxygen.svg new file mode 100644 index 0000000..79a7635 --- /dev/null +++ b/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen_crawl.html b/doxygen_crawl.html new file mode 100644 index 0000000..6f6e76e --- /dev/null +++ b/doxygen_crawl.html @@ -0,0 +1,301 @@ + + + +Validator / crawler helper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dynsections.js b/dynsections.js new file mode 100644 index 0000000..b05f4c8 --- /dev/null +++ b/dynsections.js @@ -0,0 +1,198 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function toggleVisibility(linkObj) { + return dynsection.toggleVisibility(linkObj); +} + +let dynsection = { + + // helper function + updateStripes : function() { + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); + }, + + toggleVisibility : function(linkObj) { + const base = $(linkObj).attr('id'); + const summary = $('#'+base+'-summary'); + const content = $('#'+base+'-content'); + const trigger = $('#'+base+'-trigger'); + const src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; + }, + + toggleLevel : function(level) { + $('table.directory tr').each(function() { + const l = this.id.split('_').length-1; + const i = $('#img'+this.id.substring(3)); + const a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + const id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + const start = $(this).attr('data-start'); + const end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + const line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',codefold.plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); + }, +}; +/* @license-end */ diff --git a/files.html b/files.html new file mode 100644 index 0000000..42c16fb --- /dev/null +++ b/files.html @@ -0,0 +1,124 @@ + + + + + + + +N4 Flight Software: File List + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + +
  n4-flight-software
  include
 defs.h
 kalman.h
 sensors.h
 state_machine.cpp
 state_machine.h
  src
 custom-time.hThis file defeines functions needed for time conversions for data logging
 data-types.h
 gps.h
 logger.h
 main.cppThis contains the main driver code for the flight computer
 mpu.h
 states.h
  system-logger
 SystemLogger.h
 SystemLogLevels.h
  test
 state_machine.cpp
 state_machine.h
 test_class.h
+
+
+ + +
+ + diff --git a/folderclosed.svg b/folderclosed.svg new file mode 100644 index 0000000..b04bed2 --- /dev/null +++ b/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/folderclosedd.svg b/folderclosedd.svg new file mode 100644 index 0000000..52f0166 --- /dev/null +++ b/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/folderopen.svg b/folderopen.svg new file mode 100644 index 0000000..f6896dd --- /dev/null +++ b/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/folderopend.svg b/folderopend.svg new file mode 100644 index 0000000..2d1f06e --- /dev/null +++ b/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/functions.html b/functions.html new file mode 100644 index 0000000..fa30639 --- /dev/null +++ b/functions.html @@ -0,0 +1,113 @@ + + + + + + + +N4 Flight Software: Class Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+
+ + +
+ + diff --git a/functions_func.html b/functions_func.html new file mode 100644 index 0000000..43ba2c4 --- /dev/null +++ b/functions_func.html @@ -0,0 +1,113 @@ + + + + + + + +N4 Flight Software: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the class documentation for each member:
+
+ + +
+ + diff --git a/globals.html b/globals.html new file mode 100644 index 0000000..6b69741 --- /dev/null +++ b/globals.html @@ -0,0 +1,228 @@ + + + + + + + +N4 Flight Software: File Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented file members with links to the documentation:
+ +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- v -

+
+ + +
+ + diff --git a/globals_defs.html b/globals_defs.html new file mode 100644 index 0000000..39a89a0 --- /dev/null +++ b/globals_defs.html @@ -0,0 +1,106 @@ + + + + + + + +N4 Flight Software: File Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented macros with links to the documentation:
+
+ + +
+ + diff --git a/globals_enum.html b/globals_enum.html new file mode 100644 index 0000000..67bb3fd --- /dev/null +++ b/globals_enum.html @@ -0,0 +1,98 @@ + + + + + + + +N4 Flight Software: File Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented enums with links to the documentation:
+
+ + +
+ + diff --git a/globals_eval.html b/globals_eval.html new file mode 100644 index 0000000..6f8787c --- /dev/null +++ b/globals_eval.html @@ -0,0 +1,99 @@ + + + + + + + +N4 Flight Software: File Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented enum values with links to the documentation:
+
+ + +
+ + diff --git a/globals_func.html b/globals_func.html new file mode 100644 index 0000000..4ece01e --- /dev/null +++ b/globals_func.html @@ -0,0 +1,122 @@ + + + + + + + +N4 Flight Software: File Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented functions with links to the documentation:
+
+ + +
+ + diff --git a/globals_vars.html b/globals_vars.html new file mode 100644 index 0000000..8d37e67 --- /dev/null +++ b/globals_vars.html @@ -0,0 +1,121 @@ + + + + + + + +N4 Flight Software: File Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all documented variables with links to the documentation:
+
+ + +
+ + diff --git a/gps_8h_source.html b/gps_8h_source.html new file mode 100644 index 0000000..da8a13e --- /dev/null +++ b/gps_8h_source.html @@ -0,0 +1,121 @@ + + + + + + + +N4 Flight Software: n4-flight-software/src/gps.h Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
gps.h
+
+
+
1
+
5#ifndef GPS_H
+
6#define GPS_H
+
7
+
8// longitude
+
9// latitude
+
10// time
+
11#include <Arduino.h>
+
12#include <TinyGPSPlus.h>
+
13
+
+
14class CustomGPS : public TinyGPSPlus {
+
15
+
16};
+
+
17
+
18
+
19#endif
+
Definition gps.h:14
+
+ + +
+ + diff --git a/hierarchy.html b/hierarchy.html new file mode 100644 index 0000000..9f29aa7 --- /dev/null +++ b/hierarchy.html @@ -0,0 +1,116 @@ + + + + + + + +N4 Flight Software: Class Hierarchy + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 12]
+ + + + + + + + + + + + + + +
 CAcceleration_Data
 CAltimeter_Data
 CDataLogger
 CFiltered_Data
 CGPS_Data
 CGyroscope_Data
 CMPU6050
 CState_machine
 CSystemLogger
 CLoggerConsole
 CTelemetry_Data
 CTest
 CTinyGPSPlus
 CCustomGPS
+
+
+ + +
+ + diff --git a/include_2state__machine_8cpp.html b/include_2state__machine_8cpp.html new file mode 100644 index 0000000..5fd8124 --- /dev/null +++ b/include_2state__machine_8cpp.html @@ -0,0 +1,155 @@ + + + + + + + +N4 Flight Software: n4-flight-software/include/state_machine.cpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+ +
state_machine.cpp File Reference
+
+
+
#include <Arduino.h>
+#include "state_machine.h"
+#include "defs.h"
+
+ + + + + + + + + + + + + + + +

+Functions

+bool pre_flight (float altitude)
 
+bool powered_flight (float altitude)
 
+bool apogee (float altitude)
 
+bool post_flight (float altitude)
 
+bool ballistic_descent (float velocity)
 
+bool parachute_descent (float velocity)
 
+int checkState (float altitude, float velocity)
 
+ + + + + + + + + + + +

+Variables

+float MAX_ALTITUDE = 0
 
+float PREVIOUS_ALTITUDE = 0
 
+float ALTITUDE_BUFFER [5]
 
+int ALTITUDE_INDEX = 0
 
+int PREVIOUS_STATE = 0
 
+

Detailed Description

+
Author
Edwin Mwiti
+
Version
0.1
+
Date
2023-03-28
+
+ + +
+ + diff --git a/include_2state__machine_8h_source.html b/include_2state__machine_8h_source.html new file mode 100644 index 0000000..aa80d42 --- /dev/null +++ b/include_2state__machine_8h_source.html @@ -0,0 +1,121 @@ + + + + + + + +N4 Flight Software: n4-flight-software/include/state_machine.h Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
state_machine.h
+
+
+
1#ifndef STATE_MACHINE_H
+
2#define STATE_MACHINE_H
+
3
+
4#include "defs.h"
+
5
+
+ +
7
+
8 public:
+
9 int32_t checkState(float, float);
+
10};
+
+
11
+
12int32_t State_machine::checkState(float, float){
+
13 return PRE_FLIGHT;
+
14}
+
15
+
16#endif
+
Definition state_machine.h:6
+
+ + +
+ + diff --git a/index.html b/index.html new file mode 100644 index 0000000..8551fce --- /dev/null +++ b/index.html @@ -0,0 +1,99 @@ + + + + + + + +N4 Flight Software: Main Page + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + +
+
+ + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
N4 Flight Software Documentation
+
+
+ +
+ + +
+ + diff --git a/jquery.js b/jquery.js new file mode 100644 index 0000000..1dffb65 --- /dev/null +++ b/jquery.js @@ -0,0 +1,34 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/kalman_8h_source.html b/kalman_8h_source.html new file mode 100644 index 0000000..db3bf9c --- /dev/null +++ b/kalman_8h_source.html @@ -0,0 +1,117 @@ + + + + + + + +N4 Flight Software: n4-flight-software/include/kalman.h Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
kalman.h
+
+
+
1
+
2#pragma once
+
3
+
4/* define struct to hold filtered data*/
+
+ +
6 float x_acceleration;
+
7};
+
+
8
+
9
+
10/* this function returns Kalman-filtered data */
+
11struct Filtered_Data filterData(float);
+
12
+
Definition kalman.h:5
+
+ + +
+ + diff --git a/logger_8h_source.html b/logger_8h_source.html new file mode 100644 index 0000000..037b0db --- /dev/null +++ b/logger_8h_source.html @@ -0,0 +1,150 @@ + + + + + + + +N4 Flight Software: n4-flight-software/src/logger.h Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+
+
+
logger.h
+
+
+
1
+
14#ifndef LOGGER_H
+
15#define LOGGER_H
+
16
+
17#include <Arduino.h>
+
18#include <SerialFlash.h>
+
19#include "data-types.h"
+
20
+
+ +
22 private:
+
23 uint8_t _cs_pin; // Chip select pin for the SPI flash memory
+
24 uint8_t _led_pin; // this LED flashes at a 10Hz frequency when the SPI flash chip is foramtting
+
25 char _filename[20]; // filename of the log file
+
26 SerialFlashFile _file;
+
27 uint32_t _file_size; // how large do you want the file
+
28 uint8_t _flash_delay = 100; // 100ms delay gives a frequency of 20Hz
+
29 uint8_t _file_pointer = 0; // pointer to the start of the file- to be used when reading the file
+
30
+
31
+
32 public:
+
33 DataLogger(uint8_t cs_pin, uint8_t led_pin, char* filename, SerialFlashFile file, uint32_t filesize); // constructor
+
34 bool loggerInit();
+
35 void loggerFormat();
+
36 void loggerInfo();
+
37 bool loggerTest();
+ +
39 void loggerRead(uint8_t file_pointer, char buffer);
+
40 void loggerSpaces();
+
41 void loggerEquals();
+
42};
+
+
43
+
44
+
45#endif
+
Definition logger.h:21
+
bool loggerInit()
Initialize the flash memory.
Definition logger.cpp:75
+
void loggerWrite(telemetry_type_t)
write the provided data to the file created
Definition logger.cpp:159
+
void loggerRead(uint8_t file_pointer, char buffer)
Read data from the start of the file to the end of the file.
Definition logger.cpp:228
+
void loggerFormat()
format the flash memory
Definition logger.cpp:35
+
void loggerInfo()
print the data about the flash memory
Definition logger.cpp:239
+
DataLogger(uint8_t cs_pin, uint8_t led_pin, char *filename, SerialFlashFile file, uint32_t filesize)
class constructor pass the chip select pin as a parameter for that class instance
Definition logger.cpp:21
+
void loggerSpaces()
helper function to print spaces for data formatting
Definition logger.cpp:252
+
void loggerEquals()
helper function to print = for data formatting
Definition logger.cpp:261
+
bool loggerTest()
test the flash memory write and read function by reading and writing a variable to it
Definition logger.cpp:142
+
char filename[]
Definition main.cpp:518
+
SerialFlashFile file
Definition main.cpp:522
+
Definition data-types.h:40
+
+ + +
+ + diff --git a/md_README.html b/md_README.html new file mode 100644 index 0000000..d540065 --- /dev/null +++ b/md_README.html @@ -0,0 +1,343 @@ + + + + + + + +N4 Flight Software: N4 Flight Software Documentation + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+
N4 Flight Software Documentation
+
+
+

Static Badge Static Badge Static Badge

+

+Code documentation

+

The complete code documentation can be found here ()[]

+

+N4 Flight software requirements

+
+

+1. Rocket kinematics (acceleration, velocity)

+

a) Perform accurate calculation of acceleration and velocity from sensor data

+

b) Perform data filtering to get close to ideal simulated data

+

+2. Rocket altitude above ground level (AGL)

+

a) Determine the rocket's instantaneous AGL during flight

+

+3. Flight state transitions

+

a) Accurately switch to the corresponding flight state based on evaluated sensor data

+

+4. Data logging and storage

+

a) Collect and aggregate all sensor data and store it in an external flash memory for post-flight data recovery

+

b) Perform onboard system logging to indicate all events that occur during flight and store this in a separate system log file

+

+5. Onboard systems diagnostics

+

a) Troubleshoot onboard subsystems such as the sensors, batteries etc. and log to the system file

+

b) Package the system diagnostics results into telemetry packets for transmission to ground

+

+6. GPS location

+

a) Accurately determine the latitude, longitude and timestamp of the rocket using GPS for post flight recovery

+

+7. Rocket attitude (orientation ) determination

+

a) Calculate the roll and pitch of the rocket in space during flight

+

+8. Command and data handling

+

a) Receive commands sent from ground station

+

b) Decode commands sent from ground station

+

c) Acknowledge and perform command sent from the ground station

+

+9. Telemetry transmission

+

a) Reliably transmit the rocket's data to the ground station

+

b) Perform error detection and correction on the telemetry packets

+

+10. Video capture and streaming**

+

a) Capture video stream during flight

+

b) Record video stream to an onboard SD card for post-flight analysis

+

b) Transmit video stream to ground**

+

+Tasks and task creation

+
+

+autotoc_md16

+

+Data queues and task communication

+
+

+Telemetry and transmission to ground

+
+

+Link budget calculation

+

+Telemetry packet structure

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Data Data type Size (bytes) Description
record_number uint32_t 4 record number count
state uint8_t 1 current flight state
operation_mode uint8_t 1 current flight mode, whether SAFE or ARMED
ax float 4 acceleration in the x-axis (m/s^2)
ay float 4 acceleration in the y-axis (m/s^2)
az float 4 acceleration in the z-axis (m/s^2)
pitch float 4 pitch angle (deg)
roll float 4 roll angle (deg)
gx float 4 angular velocity along the x-axis (deg/sec)
gy float 4 angular velocity along the y-axis (deg/sec)
gz float 4 angular velocity along the z-axis (deg/sec)
latitude double 8 geographical distance N or S of equator (deg)
longitude double 8 geographical distance E or W of Greenwich Meridian (deg)
gps_altitude uint16_t 2 altitude read by the onboard GPS (m)
gps_time time_t 4 current time from the GPS (UTC)
pressure float 4 pressure from the altimeter (mb)
temperature uint8_t 1 temperature from the altimeter (deg C)
altitude_agl uint16_t 2 height above ground level
velocity float 4 velocity derived from the altimeter
pyro1_state uint8_t 1 state of main chute pyro (whether ejected or active)
pyro2_state uint8_t 1 state of drogue chute pyro (whether ejected or active)
battery_voltage uint8_t 1 voltage of the battery during flight
Total packet size 74 BYTES
+

+Data Logging and storage

+
+

For logging and storage, we use two methods to ensure redundancy.

+

One is logging to an external SPI flash memory during flight, the WINBOND W25Q32JVSIQ2135, which is a 32Mbits(4 MB) storage chip. For redundancy, we add a microSD card into which data is dumped from the external SPI flash memory POST-FLIGHT.

+

The logging flowchart is shown below:

+

logger-flowchart

+

+Flash chip hardware tests

+

Using this library SerialFlashLib, we carried out flash chip hardware tests to make sure the MCU communicates as desired with the memory chip. The circuit diagram is shown below:

+

flash-cct

+

+PCB layout for the flash memory

+

To ensure maximum reliability of the flash memory on the PCB, follow the following techniques during layout:

+

The following snapshot from serial monitor shows that ESP32 was able to recognize the chip over the SPI channel.

+

flash-test

+

However, there is a discrepancy when we use this library to recognize this memory chip. This may be because the chip is a fake and therefore not recognized by this library. By default, the lib shows the size of the chip as 1MB, which is wrong.

+

If we use the SparkFun_SPI_SerialFlashChip library, we are able to recognize the chip as shown below.

+

flash-SFE

+

The flash chip is working okay from the tests above.

+

Now, since we want to access the flash memory in a file-system kind of way, where we can read and write FILES, we use the SerialFlash Library, even if the flash memory is not recognized by it. This will make it easier for us to access huge blocks of memory in chunks and avoid accessing the memory directly. In addition, we can erase files and use SD-like methods to access data.

+

The demonstration below received data from the serial monitor, and writes it to a file inside the flash memory.

+

First we test for file R/W.

+

+Known issue

+

When using SPI protocol on breadboard, it might fail to communicate with the peripheral device. This is because SPI is high-speed and is expected to be used with short traces on PCB. When testing this part, I experienced errors before i realized this issue. To correct this, I reduced the SPI communication speed from 50MHz to 20MHz so that I could access the R/W functions using the breadboard. More details are in reference #8 below.

+

Note: Make sure you change the speed to 20MHz for your files to be created. Change the speed in the SerialFlashChip.cpp near the top of the file (SPICONFIG)

+

The image below shows the response after I reduced the SPI speed: flash

+

Testing method

    +
  1. I created a file 4KB in size and named it test.csv.
  2. +
  3. Then generated dummy data using random() functions in Arduino.
  4. +
  5. I then appended this random data to the file, while checking the size being occupied by the file
  6. +
  7. Running the flash_read.ino file after data is done recording displays all the recorded data on the flash memory
  8. +
+

+How to recover the data

+

Use Nakuja Flight Data Recovery Tool to dump the recorded data as follows:

+

The image below shows the response after I reduced the SPI speed: flash

+

+GPS Operations

+

GPS is used to give us accurate location in terms of longitude, latitude, time and altitude. This data is useful for post-flight recovery and for apogee detection and verification. However, because of the low sample rate of GPS modules (1 Hz), we cannot use it reliably to log altitude data since rocketry is high speed.

+

gps

+

+Reading GPS data algorithm

+

We read GPS data using the TinyGPSPlus Library. The data of interest is the latitude, longitude, time and altitude. The algorithm is as follows:

+
    +
  1. Create GPS data queue
  2. +
  3. Create the readGPS task
  4. +
  5. Inside the task, create a local gps_type_t variable to hold the sampled data
  6. +
  7. Read the latitude, longitude, time and altitude into the gps_type_t variable
  8. +
  9. Send this data to telemetry_queue
  10. +
+

+GPS fix time issues

+

The start of GPS can be cold or warm. Cold start means the GPS is starting from scratch, no prior satellite data exists, and here it takes much time to lock satellites and download satellite data. Once you initially download satellite data, the following connections take less time, referred to as warm-starts.

+

When using GPS, you will find that the time it takes to acquire a fix to GPS satellites depends on the cloud cover. If the cloud cover is too high, it takes longer to acquire a signal and vice-versa. During one of the tests of the GPS, it took ~2 min at 45% cloud cover to acquire signal.

+

During launch, we do not want to wait for infinity to get a GPS lock, so we implement a timeout as follows:

+
Consider the GPS_WAIT_TIME as 2 minutes (2000ms):
+
+
1. Initialize a timeout variable and a lock_acquired boolean value
+
2. Check the value of the timeout_variable
+
3. Is it less than the GPS_WAIT_TIME?
+
4. If less than the wait time, continue waiting for GPS fix, if more than the GPS_WAIT_TIME, stop waiting for fix and return false
+
5. If the GPS data is available and successfully encoded via serial, set the lock_acquired booelan value to true
+
int value
Parse the received serial command if it is a string.
Definition main.cpp:388
+

This timeout will ensure we do not delay other sub-systems of the flight software from starting.

+

+Flowchart

+

gps-flowchart

+

+GPS tests

+

The following screenshots show the results of GPS tests during development. In the image below, the raw GPS coordinates are read and printed on the serial debugger:

+

gps-data

+

+State machine logic and operation

+
+

+States

+

+State transition conditions

+

+State functions handling

+

+IMU

+

+Calculating acceleration from accelerometer

+

+Calculating velocity from accelerometer

+

The initial idea is to use integration. Since velocity is the first integral of acceleration. From the equation:

v = u + at
+

So what we do to calculate the velocity is keep track of time, acceleration in the requires axis and then update the initial velocity. Consider the X axis:

+
Vx = Ux + ACCx*Sample_time
+
Ux = Vx
+

(Let the sample tme be 1ms (0.001 s))

+

Known issue is velocity drift: where the velocity does not get to zero even when the sensor is stationary. small errors in the measurement of acceleration and angular velocity are integrated into progressively larger errors in velocity, which are compounded into still greater errors in position

+

Article: IMU Velocity drift

+

However, after extensive research online, it was concluded that getting velocity from accelerometer is very innacurate and unreliable. Check out this reddit thread: Acceleration & velocity with MPU6050

+

Check this arduinoForum article too (ArduinForum) [https://forum.arduino.cc/t/integrating-acceleration-to-get-velocity/954731/8]

+

Following this, we decide to keep the accelerometer for measuring the acceleration and the rocket orientation.

+

+Data Filtering

+
+

+Complementary filter

+

+Utility scripts

+

During development the following scripts might (and will) be useful.

+

+1. HEX converter

+

Converts string to HEX string and back. Built with python

+
+Requirements
+
    +
  1. Python > 3.10
  2. +
+

The screenshot below shows the program running: hex-converter

+
+Usage
+

Open a terminal window in the folder containing the hex-converter.py file and run the following command:

+
python hex-converter.py
+

The screenshot above appears. Select your option and proceed. The program will output your string in HEX format.

+

+References and Error fixes

+
    +
  1. (Wire LIbrary Device Lock) Confusing overload of Wire::begin · Issue #6616 · espressif/arduino-esp32 · GitHub
  2. +
  3. (Estimating velocity and altitude) [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4179067/]
  4. +
  5. [rocket orientation and velocity] (https://www.reddit.com/r/rocketry/comments/10q7j8m/using_accelerometers_for_rocket_attitude/)
  6. +
  7. https://cdn.shopify.com/s/files/1/1014/5789/files/Standard-ASCII-Table_large.jpg?10669400161723642407
  8. +
  9. https://www.codeproject.com/Articles/99547/Hex-strings-to-raw-data-and-back
  10. +
  11. https://cdn.shopify.com/s/files/1/1014/5789/files/Standard-ASCII-Table_large.jpg?10669400161723642407
  12. +
  13. https://www.geeksforgeeks.org/convert-a-string-to-hexadecimal-ascii-values/
  14. +
  15. (SPI Flash memory file creation issue on breadboard) https://forum.arduino.cc/t/esp32-and-winbond-w25q128jv-serial-flash-memory/861315/3
  16. +
+
+
+ + +
+ + diff --git a/md__r_e_a_d_m_e.html b/md__r_e_a_d_m_e.html new file mode 100644 index 0000000..824c9e1 --- /dev/null +++ b/md__r_e_a_d_m_e.html @@ -0,0 +1,342 @@ + + + + + + + +N4 Flight Software: N4 Flight Software Documentation + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+
N4 Flight Software Documentation
+
+
+

Static Badge Static Badge Static Badge

+

+Code documentation

+

The complete code documentation can be found here ()[]

+

+N4 Flight software requirements

+
+

+1. Rocket kinematics (acceleration, velocity)

+

a) Perform accurate calculation of acceleration and velocity from sensor data

+

b) Perform data filtering to get close to ideal simulated data

+

+2. Rocket altitude above ground level (AGL)

+

a) Determine the rocket's instantaneous AGL during flight

+

+3. Flight state transitions

+

a) Accurately switch to the corresponding flight state based on evaluated sensor data

+

+4. Data logging and storage

+

a) Collect and aggregate all sensor data and store it in an external flash memory for post-flight data recovery

+

b) Perform onboard system logging to indicate all events that occur during flight and store this in a separate system log file

+

+5. Onboard systems diagnostics

+

a) Troubleshoot onboard subsystems such as the sensors, batteries etc. and log to the system file

+

b) Package the system diagnostics results into telemetry packets for transmission to ground

+

+6. GPS location

+

a) Accurately determine the latitude, longitude and timestamp of the rocket using GPS for post flight recovery

+

+7. Rocket attitude (orientation ) determination

+

a) Calculate the roll and pitch of the rocket in space during flight

+

+8. Command and data handling

+

a) Receive commands sent from ground station

+

b) Decode commands sent from ground station

+

c) Acknowledge and perform command sent from the ground station

+

+9. Telemetry transmission

+

a) Reliably transmit the rocket's data to the ground station

+

b) Perform error detection and correction on the telemetry packets

+

+10. Video capture and streaming**

+

a) Capture video stream during flight

+

b) Record video stream to an onboard SD card for post-flight analysis

+

b) Transmit video stream to ground**

+

+Tasks and task creation

+
+

+autotoc_md16

+

+Data queues and task communication

+
+

+Telemetry and transmission to ground

+
+

+Link budget calculation

+

+Telemetry packet structure

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Data Data type Size (bytes) Description
record_number uint32_t 4 record number count
state uint8_t 1 current flight state
operation_mode uint8_t 1 current flight mode, whether SAFE or ARMED
ax float 4 acceleration in the x-axis (m/s^2)
ay float 4 acceleration in the y-axis (m/s^2)
az float 4 acceleration in the z-axis (m/s^2)
pitch float 4 pitch angle (deg)
roll float 4 roll angle (deg)
gx float 4 angular velocity along the x-axis (deg/sec)
gy float 4 angular velocity along the y-axis (deg/sec)
gz float 4 angular velocity along the z-axis (deg/sec)
latitude double 8 geographical distance N or S of equator (deg)
longitude double 8 geographical distance E or W of Greenwich Meridian (deg)
gps_altitude uint16_t 2 altitude read by the onboard GPS (m)
gps_time time_t 4 current time from the GPS (UTC)
pressure float 4 pressure from the altimeter (mb)
temperature uint8_t 1 temperature from the altimeter (deg C)
altitude_agl uint16_t 2 height above ground level
velocity float 4 velocity derived from the altimeter
pyro1_state uint8_t 1 state of main chute pyro (whether ejected or active)
pyro2_state uint8_t 1 state of drogue chute pyro (whether ejected or active)
battery_voltage uint8_t 1 voltage of the battery during flight
Total packet size 74 BYTES
+

+Data Logging and storage

+
+

For logging and storage, we use two methods to ensure redundancy.

+

One is logging to an external SPI flash memory during flight, the WINBOND W25Q32JVSIQ2135, which is a 32Mbits(4 MB) storage chip. For redundancy, we add a microSD card into which data is dumped from the external SPI flash memory POST-FLIGHT.

+

The logging flowchart is shown below:

+

logger-flowchart

+

+Flash chip hardware tests

+

Using this library SerialFlashLib, we carried out flash chip hardware tests to make sure the MCU communicates as desired with the memory chip. The circuit diagram is shown below:

+

flash-cct

+

+PCB layout for the flash memory

+

To ensure maximum reliability of the flash memory on the PCB, follow the following techniques during layout:

+

The following snapshot from serial monitor shows that ESP32 was able to recognize the chip over the SPI channel.

+

flash-test

+

However, there is a discrepancy when we use this library to recognize this memory chip. This may be because the chip is a fake and therefore not recognized by this library. By default, the lib shows the size of the chip as 1MB, which is wrong.

+

If we use the SparkFun_SPI_SerialFlashChip library, we are able to recognize the chip as shown below.

+

flash-SFE

+

The flash chip is working okay from the tests above.

+

Now, since we want to access the flash memory in a file-system kind of way, where we can read and write FILES, we use the SerialFlash Library, even if the flash memory is not recognized by it. This will make it easier for us to access huge blocks of memory in chunks and avoid accessing the memory directly. In addition, we can erase files and use SD-like methods to access data.

+

The demonstration below received data from the serial monitor, and writes it to a file inside the flash memory.

+

First we test for file R/W.

+

+Known issue

+

When using SPI protocol on breadboard, it might fail to communicate with the peripheral device. This is because SPI is high-speed and is expected to be used with short traces on PCB. When testing this part, I experienced errors before i realized this issue. To correct this, I reduced the SPI communication speed from 50MHz to 20MHz so that I could access the R/W functions using the breadboard. More details are in reference #8 below.

+

Note: Make sure you change the speed to 20MHz for your files to be created. Change the speed in the SerialFlashChip.cpp near the top of the file (SPICONFIG)

+

The image below shows the response after I reduced the SPI speed: flash

+

Testing method

    +
  1. I created a file 4KB in size and named it test.csv.
  2. +
  3. Then generated dummy data using random() functions in Arduino.
  4. +
  5. I then appended this random data to the file, while checking the size being occupied by the file
  6. +
  7. Running the flash_read.ino file after data is done recording displays all the recorded data on the flash memory
  8. +
+

+How to recover the data

+

Use Nakuja Flight Data Recovery Tool to dump the recorded data as follows:

+

The image below shows the response after I reduced the SPI speed: flash

+

+GPS Operations

+

GPS is used to give us accurate location in terms of longitude, latitude, time and altitude. This data is useful for post-flight recovery and for apogee detection and verification. However, because of the low sample rate of GPS modules (1 Hz), we cannot use it reliably to log altitude data since rocketry is high speed.

+

gps

+

+Reading GPS data algorithm

+

We read GPS data using the TinyGPSPlus Library. The data of interest is the latitude, longitude, time and altitude. The algorithm is as follows:

+
    +
  1. Create GPS data queue
  2. +
  3. Create the readGPS task
  4. +
  5. Inside the task, create a local gps_type_t variable to hold the sampled data
  6. +
  7. Read the latitude, longitude, time and altitude into the gps_type_t variable
  8. +
  9. Send this data to telemetry_queue
  10. +
+

+GPS fix time issues

+

The start of GPS can be cold or warm. Cold start means the GPS is starting from scratch, no prior satellite data exists, and here it takes much time to lock satellites and download satellite data. Once you initially download satellite data, the following connections take less time, referred to as warm-starts.

+

When using GPS, you will find that the time it takes to acquire a fix to GPS satellites depends on the cloud cover. If the cloud cover is too high, it takes longer to acquire a signal and vice-versa. During one of the tests of the GPS, it took ~2 min at 45% cloud cover to acquire signal.

+

During launch, we do not want to wait for infinity to get a GPS lock, so we implement a timeout as follows:

+
Consider the GPS_WAIT_TIME as 2 minutes (2000ms):
+
+
1. Initialize a timeout variable and a lock_acquired boolean value
+
2. Check the value of the timeout_variable
+
3. Is it less than the GPS_WAIT_TIME?
+
4. If less than the wait time, continue waiting for GPS fix, if more than the GPS_WAIT_TIME, stop waiting for fix and return false
+
5. If the GPS data is available and successfully encoded via serial, set the lock_acquired booelan value to true
+

This timeout will ensure we do not delay other sub-systems of the flight software from starting.

+

+Flowchart

+

gps-flowchart

+

+GPS tests

+

The following screenshots show the results of GPS tests during development. In the image below, the raw GPS coordinates are read and printed on the serial debugger:

+

gps-data

+

+State machine logic and operation

+
+

+States

+

+State transition conditions

+

+State functions handling

+

+IMU

+

+Calculating acceleration from accelerometer

+

+Calculating velocity from accelerometer

+

The initial idea is to use integration. Since velocity is the first integral of acceleration. From the equation:

v = u + at
+

So what we do to calculate the velocity is keep track of time, acceleration in the requires axis and then update the initial velocity. Consider the X axis:

+
Vx = Ux + ACCx*Sample_time
+
Ux = Vx
+

(Let the sample tme be 1ms (0.001 s))

+

Known issue is velocity drift: where the velocity does not get to zero even when the sensor is stationary. small errors in the measurement of acceleration and angular velocity are integrated into progressively larger errors in velocity, which are compounded into still greater errors in position

+

Article: IMU Velocity drift

+

However, after extensive research online, it was concluded that getting velocity from accelerometer is very innacurate and unreliable. Check out this reddit thread: Acceleration & velocity with MPU6050

+

Check this arduinoForum article too (ArduinForum) [https://forum.arduino.cc/t/integrating-acceleration-to-get-velocity/954731/8]

+

Following this, we decide to keep the accelerometer for measuring the acceleration and the rocket orientation.

+

+Data Filtering

+
+

+Complementary filter

+

+Utility scripts

+

During development the following scripts might (and will) be useful.

+

+1. HEX converter

+

Converts string to HEX string and back. Built with python

+
+Requirements
+
    +
  1. Python > 3.10
  2. +
+

The screenshot below shows the program running: hex-converter

+
+Usage
+

Open a terminal window in the folder containing the hex-converter.py file and run the following command:

+
python hex-converter.py
+

The screenshot above appears. Select your option and proceed. The program will output your string in HEX format.

+

+References and Error fixes

+
    +
  1. (Wire LIbrary Device Lock) Confusing overload of Wire::begin · Issue #6616 · espressif/arduino-esp32 · GitHub
  2. +
  3. (Estimating velocity and altitude) [https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4179067/]
  4. +
  5. [rocket orientation and velocity] (https://www.reddit.com/r/rocketry/comments/10q7j8m/using_accelerometers_for_rocket_attitude/)
  6. +
  7. https://cdn.shopify.com/s/files/1/1014/5789/files/Standard-ASCII-Table_large.jpg?10669400161723642407
  8. +
  9. https://www.codeproject.com/Articles/99547/Hex-strings-to-raw-data-and-back
  10. +
  11. https://cdn.shopify.com/s/files/1/1014/5789/files/Standard-ASCII-Table_large.jpg?10669400161723642407
  12. +
  13. https://www.geeksforgeeks.org/convert-a-string-to-hexadecimal-ascii-values/
  14. +
  15. (SPI Flash memory file creation issue on breadboard) https://forum.arduino.cc/t/esp32-and-winbond-w25q128jv-serial-flash-memory/861315/3
  16. +
+
+
+ + +
+ + diff --git a/md_n4-flight-software_2README.html b/md_n4-flight-software_2README.html new file mode 100644 index 0000000..40189e1 --- /dev/null +++ b/md_n4-flight-software_2README.html @@ -0,0 +1,99 @@ + + + + + + + +N4 Flight Software: README + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+
README
+
+
+
+
+ + +
+ + diff --git a/md_n4-flight-software_2_r_e_a_d_m_e.html b/md_n4-flight-software_2_r_e_a_d_m_e.html new file mode 100644 index 0000000..40189e1 --- /dev/null +++ b/md_n4-flight-software_2_r_e_a_d_m_e.html @@ -0,0 +1,99 @@ + + + + + + + +N4 Flight Software: README + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+
README
+
+
+
+
+ + +
+ + diff --git a/md_n4-flight-software_2src_2pin-assignment.html b/md_n4-flight-software_2src_2pin-assignment.html new file mode 100644 index 0000000..6d12e9f --- /dev/null +++ b/md_n4-flight-software_2src_2pin-assignment.html @@ -0,0 +1,99 @@ + + + + + + + +N4 Flight Software: pin-assignment + + + + + + + + + + + + + +
+
+ + + + + + +
+
N4 Flight Software +
+
Flight software used on N4 flight computers for the Nakuja Project
+
+
+ + + + + + + + + + +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+
pin-assignment
+
+
+
+
+ + +
+ + diff --git a/menu.js b/menu.js new file mode 100644 index 0000000..0fd1e99 --- /dev/null +++ b/menu.js @@ -0,0 +1,134 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search,treeview) { + function makeTree(data,relPath) { + let result=''; + if ('children' in data) { + result+='
    '; + for (let i in data.children) { + let url; + const link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + let searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + const $mainMenuState = $('#main-menu-state'); + let prevWidth = 0; + if ($mainMenuState.length) { + const initResizableIfExists = function() { + if (typeof initResizable==='function') initResizable(treeview); + } + // animate mobile menu + $mainMenuState.change(function() { + const $menu = $('#main-menu'); + let options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = () => $menu.css('display', 'block'); + $menu.hide().slideDown(options); + } else { + options['complete'] = () => $menu.css('display', 'none'); + $menu.show().slideUp(options); + } + }); + // set default menu visibility + const resetState = function() { + const $menu = $('#main-menu'); + const newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/menudata.js b/menudata.js new file mode 100644 index 0000000..71668bb --- /dev/null +++ b/menudata.js @@ -0,0 +1,61 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Related Pages",url:"pages.html"}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"hierarchy.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html"}, +{text:"Functions",url:"functions_func.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"File Members",url:"globals.html",children:[ +{text:"All",url:"globals.html",children:[ +{text:"a",url:"globals.html#index_a"}, +{text:"b",url:"globals.html#index_b"}, +{text:"c",url:"globals.html#index_c"}, +{text:"d",url:"globals.html#index_d"}, +{text:"e",url:"globals.html#index_e"}, +{text:"f",url:"globals.html#index_f"}, +{text:"g",url:"globals.html#index_g"}, +{text:"h",url:"globals.html#index_h"}, +{text:"i",url:"globals.html#index_i"}, +{text:"l",url:"globals.html#index_l"}, +{text:"m",url:"globals.html#index_m"}, +{text:"n",url:"globals.html#index_n"}, +{text:"o",url:"globals.html#index_o"}, +{text:"p",url:"globals.html#index_p"}, +{text:"r",url:"globals.html#index_r"}, +{text:"s",url:"globals.html#index_s"}, +{text:"t",url:"globals.html#index_t"}, +{text:"v",url:"globals.html#index_v"}]}, +{text:"Functions",url:"globals_func.html"}, +{text:"Variables",url:"globals_vars.html"}, +{text:"Enumerations",url:"globals_enum.html"}, +{text:"Enumerator",url:"globals_eval.html"}, +{text:"Macros",url:"globals_defs.html"}]}]}]} diff --git a/minus.svg b/minus.svg new file mode 100644 index 0000000..f70d0c1 --- /dev/null +++ b/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/minusd.svg b/minusd.svg new file mode 100644 index 0000000..5f8e879 --- /dev/null +++ b/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/mpu_8h_source.html b/mpu_8h_source.html new file mode 100644 index 0000000..c5dfcc4 --- /dev/null +++ b/mpu_8h_source.html @@ -0,0 +1,197 @@ + + + + + + + +N4 Flight Software: n4-flight-software/src/mpu.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    mpu.h
    +
    +
    +
    1// MPU6050 class
    +
    2#ifndef MPU_H
    +
    3#define MPU_H
    +
    4
    +
    5#include "Arduino.h"
    +
    6#include <Wire.h>
    +
    7#include <math.h>
    +
    8#include "defs.h"
    +
    9
    +
    10
    +
    11// divisor factors based on full scale ranges
    +
    12#define ACCEL_FACTOR_2G 16384
    +
    13#define ACCEL_FACTOR_4G 8192
    +
    14#define ACCEL_FACTOR_8G 4096
    +
    15#define ACCEL_FACTOR_16G 2048
    +
    16#define GYRO_FACTOR_250 131
    +
    17#define GYRO_FACTOR_500 65.5
    +
    18#define GYRO_FACTOR_1000 32.8
    +
    19#define GYRO_FACTOR_2000 16.4
    +
    20
    +
    21// MPU6050 addresses definitions
    +
    22#define MPU6050_ADDRESS 0x68
    +
    23#define GYRO_CONFIG 0x1B
    +
    24#define ACCEL_CONFIG 0x1C
    +
    25#define PWR_MNGMT_1 0x6B
    +
    26#define RESET 0x00
    +
    27#define SET_GYRO_FS_250 0x00
    +
    28#define SET_GYRO_FS_500 0x01
    +
    29#define SET_GYRO_FS_1000 0x02
    +
    30#define SET_GYRO_FS_2000 0x18
    +
    31#define SET_ACCEL_FS_2G 0x00
    +
    32#define SET_ACCEL_FS_4G 0x01
    +
    33#define SET_ACCEL_FS_8G 0x02
    +
    34#define SET_ACCEL_FS_16G 0x18
    +
    35#define ACCEL_XOUT_H 0x3B
    +
    36#define ACCEL_XOUT_L 0x3C
    +
    37#define ACCEL_YOUT_H 0x3D
    +
    38#define ACCEL_YOUT_L 0x3E
    +
    39#define ACCEL_ZOUT_H 0x3F
    +
    40#define ACCEL_ZOUT_L 0x40
    +
    41#define GYRO_XOUT_H 0x43
    +
    42#define GYRO_XOUT_L 0x44
    +
    43#define GYRO_YOUT_H 0x45
    +
    44#define GYRO_YOUT_L 0x46
    +
    45#define GYRO_ZOUT_H 0x47
    +
    46#define GYRO_ZOUT_L 0x48
    +
    47#define TEMP_OUT_H 0x41
    +
    48#define TEMP_OUT_L 0x42
    +
    49#define ONE_G 9.80665
    +
    50#define TO_DEG_FACTOR 57.32
    +
    51
    +
    +
    52class MPU6050 {
    +
    53 private:
    +
    54 uint8_t _address;
    +
    55 uint32_t _accel_fs_range;
    +
    56 uint32_t _gyro_fs_range;
    +
    57
    +
    58 public:
    +
    59 // sensor data
    +
    60 int16_t acc_x, acc_y, acc_z; // raw acceleration values
    +
    61 float acc_x_real, acc_y_real, acc_z_real; // converted acceleration values
    +
    62 int16_t ang_vel_x, ang_vel_y, ang_vel_z;
    +
    63 float ang_vel_x_real, ang_vel_y_real, ang_vel_z_real; // converted angular velocity values
    +
    64 int16_t temp;
    +
    65 float temp_real;
    +
    66
    +
    67 float pitch_angle, roll_angle;
    +
    68 float acc_x_ms, acc_y_ms, acc_z_ms; // acceleration in m/s^2
    +
    69
    +
    70
    +
    71 MPU6050(uint8_t address, uint32_t accel_fs_range, uint32_t gyro_fs_range);
    +
    72 void init();
    +
    73 float readXAcceleration();
    +
    74 float readYAcceleration();
    +
    75 float readZAcceleration();
    +
    76 float readXAngularVelocity();
    +
    77 float readYAngularVelocity();
    +
    78 float readZAngularVelocity();
    +
    79 float readTemperature();
    +
    80 void filterImu();
    +
    81 float getRoll();
    +
    82 float getPitch();
    +
    83
    +
    84};
    +
    +
    85
    +
    86#endif
    +
    Definition mpu.h:52
    +
    float readZAcceleration()
    Definition mpu.cpp:109
    +
    float readXAcceleration()
    Definition mpu.cpp:57
    +
    float getPitch()
    Definition mpu.cpp:153
    +
    float readYAcceleration()
    Definition mpu.cpp:83
    +
    float getRoll()
    Definition mpu.cpp:137
    +
    void filterImu()
    Definition mpu.cpp:169
    +
    + + +
    + + diff --git a/nav_f.png b/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/nav_fd.png b/nav_fd.png new file mode 100644 index 0000000000000000000000000000000000000000..032fbdd4c54f54fa9a2e6423b94ef4b2ebdfaceb GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQU#tajv*C{Z|C~*H7f|XvG1G8 zt7aS*L7xwMeS}!z6R#{C5tIw-s~AJ==F^i}x3XyJseHR@yF& zerFf(Zf;Dd{+(0lDIROL@Sj-Ju2JQ8&-n%4%q?>|^bShc&lR?}7HeMo@BDl5N(aHY Uj$gdr1MOz;boFyt=akR{0D!zeaR2}S literal 0 HcmV?d00001 diff --git a/nav_g.png b/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL6W-eg#Jd_@e6*DPn)w;=|1H}Zvm9l6xXXB%>yL=NQU;mg M>FVdQ&MBb@0Bdt1Qvd(} literal 0 HcmV?d00001 diff --git a/navtree.css b/navtree.css new file mode 100644 index 0000000..69211d4 --- /dev/null +++ b/navtree.css @@ -0,0 +1,149 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: var(--nav-text-active-color); + text-shadow: var(--nav-text-active-shadow); +} + +#nav-tree .selected .arrow { + color: var(--nav-arrow-selected-color); + text-shadow: none; +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px var(--font-family-nav); +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:var(--nav-text-active-color); +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: $width; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:var(--nav-splitbar-image); + background-size:100%; + background-repeat:repeat-y; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-repeat:repeat-x; + background-color: var(--nav-background-color); + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/open.png b/open.png new file mode 100644 index 0000000000000000000000000000000000000000..30f75c7efe2dd0c9e956e35b69777a02751f048b GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + + +N4 Flight Software: Related Pages + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Related Pages
    +
    +
    +
    Here is a list of all related documentation pages:
    +
    + + +
    + + diff --git a/plus.svg b/plus.svg new file mode 100644 index 0000000..0752016 --- /dev/null +++ b/plus.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/plusd.svg b/plusd.svg new file mode 100644 index 0000000..0c65bfe --- /dev/null +++ b/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resize.js b/resize.js new file mode 100644 index 0000000..7d8cdc7 --- /dev/null +++ b/resize.js @@ -0,0 +1,145 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initResizable(treeview) { + let sidenav,navtree,content,header,footer,barWidth=6; + const RESIZE_COOKIE_NAME = ''+'width'; + + function resizeWidth() { + const sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); + } + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + function restoreWidth(navWidth) { + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + } + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight(treeview) { + const headerHeight = header.outerHeight(); + const windowHeight = $(window).height(); + let contentHeight; + if (treeview) + { + const footerHeight = footer.outerHeight(); + let navtreeHeight,sideNavHeight; + if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ + contentHeight = windowHeight - headerHeight - footerHeight; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (page_layout==1) { /* DISABLE_INDEX=YES */ + contentHeight = windowHeight - footerHeight; + navtreeHeight = windowHeight - headerHeight; + sideNavHeight = windowHeight; + } + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + } + else + { + contentHeight = windowHeight - headerHeight; + } + content.css({height:contentHeight + "px"}); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + function collapseExpand() { + let newWidth; + if (sidenav.width()>0) { + newWidth=0; + } else { + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + newWidth = (width>250 && width<$(window).width()) ? width : 250; + } + restoreWidth(newWidth); + const sidenavWidth = $(sidenav).outerWidth(); + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + header = $("#top"); + content = $("#doc-content"); + footer = $("#nav-path"); + sidenav = $("#side-nav"); + if (!treeview) { +// title = $("#titlearea"); +// titleH = $(title).height(); +// let animating = false; +// content.on("scroll", function() { +// slideOpts = { duration: 200, +// step: function() { +// contentHeight = $(window).height() - header.outerHeight(); +// content.css({ height : contentHeight + "px" }); +// }, +// done: function() { animating=false; } +// }; +// if (content.scrollTop()>titleH && title.css('display')!='none' && !animating) { +// title.slideUp(slideOpts); +// animating=true; +// } else if (content.scrollTop()<=titleH && title.css('display')=='none' && !animating) { +// title.slideDown(slideOpts); +// animating=true; +// } +// }); + } else { + navtree = $("#nav-tree"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + } + $(window).resize(function() { resizeHeight(treeview); }); + if (treeview) + { + const device = navigator.userAgent.toLowerCase(); + const touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + if (width) { restoreWidth(width); } else { resizeWidth(); } + } + resizeHeight(treeview); + const url = location.href; + const i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + const _preventDefault = function(evt) { evt.preventDefault(); }; + if (treeview) + { + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + } + $(window).on('load',resizeHeight); +} +/* @license-end */ diff --git a/search/all_0.js b/search/all_0.js new file mode 100644 index 0000000..e1c9529 --- /dev/null +++ b/search/all_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['1_20hex_20converter_0',['1. HEX converter',['../md_README.html#autotoc_md46',1,'']]], + ['1_20rocket_20kinematics_20acceleration_20velocity_1',['1. Rocket kinematics (acceleration, velocity)',['../md_README.html#autotoc_md4',1,'']]], + ['10_20video_20capture_20and_20streaming_2',['10. Video capture and streaming**',['../md_README.html#autotoc_md13',1,'']]] +]; diff --git a/search/all_1.js b/search/all_1.js new file mode 100644 index 0000000..c7e9d81 --- /dev/null +++ b/search/all_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['2_20rocket_20altitude_20above_20ground_20level_20agl_0',['2. Rocket altitude above ground level (AGL)',['../md_README.html#autotoc_md5',1,'']]] +]; diff --git a/search/all_10.js b/search/all_10.js new file mode 100644 index 0000000..db46e12 --- /dev/null +++ b/search/all_10.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['handling_0',['handling',['../md_README.html#autotoc_md11',1,'8. Command and data handling'],['../md_README.html#autotoc_md38',1,'State functions handling']]], + ['handshake_1',['HANDSHAKE',['../src_2main_8cpp.html#a7010bdd588d627529b5948acb89dc09dacc6ddcaa36bd57e5aec12749cb5ce29c',1,'main.cpp']]], + ['handshakeserialevent_2',['handshakeSerialEvent',['../src_2main_8cpp.html#a41453ccb33ef6b57e513b16e92dd130e',1,'main.cpp']]], + ['hardware_20tests_3',['Flash chip hardware tests',['../md_README.html#autotoc_md25',1,'']]], + ['hex_20converter_4',['1. HEX converter',['../md_README.html#autotoc_md46',1,'']]], + ['how_20to_20recover_20the_20data_5',['How to recover the data',['../md_README.html#autotoc_md28',1,'']]] +]; diff --git a/search/all_11.js b/search/all_11.js new file mode 100644 index 0000000..b6767ea --- /dev/null +++ b/search/all_11.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['imu_0',['IMU',['../md_README.html#autotoc_md39',1,'']]], + ['imu_1',['imu',['../src_2main_8cpp.html#aea39bb6bc24075cef46a6b4d55071082',1,'main.cpp']]], + ['initgpio_2',['initGPIO',['../src_2main_8cpp.html#ae8297bf2b99a2ad67af6f9a421ea4b16',1,'main.cpp']]], + ['initxmodem_3',['InitXMODEM',['../src_2main_8cpp.html#abf447a0860a5fec74fecf8654172fec0',1,'main.cpp']]], + ['issue_4',['Known issue',['../md_README.html#autotoc_md27',1,'']]], + ['issues_5',['GPS fix time issues',['../md_README.html#autotoc_md31',1,'']]] +]; diff --git a/search/all_12.js b/search/all_12.js new file mode 100644 index 0000000..b0c5654 --- /dev/null +++ b/search/all_12.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['kinematics_20acceleration_20velocity_0',['1. Rocket kinematics (acceleration, velocity)',['../md_README.html#autotoc_md4',1,'']]], + ['known_20issue_1',['Known issue',['../md_README.html#autotoc_md27',1,'']]] +]; diff --git a/search/all_13.js b/search/all_13.js new file mode 100644 index 0000000..ff2097a --- /dev/null +++ b/search/all_13.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['layout_20for_20the_20flash_20memory_0',['PCB layout for the flash memory',['../md_README.html#autotoc_md26',1,'']]], + ['level_20agl_1',['2. Rocket altitude above ground level (AGL)',['../md_README.html#autotoc_md5',1,'']]], + ['link_20budget_20calculation_2',['Link budget calculation',['../md_README.html#autotoc_md21',1,'']]], + ['listdir_3',['listDir',['../src_2main_8cpp.html#a8841578fe91cace6206676f0e751cab5',1,'main.cpp']]], + ['location_4',['6. GPS location',['../md_README.html#autotoc_md9',1,'']]], + ['log_5fsample_5finterval_5',['log_sample_interval',['../src_2main_8cpp.html#affaa6e6cce540b233b04e558e3d164b2',1,'main.cpp']]], + ['loggerconsole_6',['LoggerConsole',['../classLoggerConsole.html',1,'']]], + ['loggerequals_7',['loggerEquals',['../classDataLogger.html#acb9bf3c62db1f28016d68d51efe25d43',1,'DataLogger']]], + ['loggerformat_8',['loggerFormat',['../classDataLogger.html#a5e9756481c9c74167ba32ad7a479e8b3',1,'DataLogger']]], + ['loggerinfo_9',['loggerInfo',['../classDataLogger.html#a9a968317a7e3bb763d8cd551063e7348',1,'DataLogger']]], + ['loggerinit_10',['loggerInit',['../classDataLogger.html#a0cf2853582b7f2194eb0024d3d6d4944',1,'DataLogger']]], + ['loggerread_11',['loggerRead',['../classDataLogger.html#a5a0deefb9372f1577636014a59025e6f',1,'DataLogger']]], + ['loggerspaces_12',['loggerSpaces',['../classDataLogger.html#aa2e189964fbebc28dc2a327fdccc5684',1,'DataLogger']]], + ['loggertest_13',['loggerTest',['../classDataLogger.html#ae8a69bf0cc965365057e93a164ca9239',1,'DataLogger']]], + ['loggerwrite_14',['loggerWrite',['../classDataLogger.html#a411ac6fd751d3a87cef0375fccaad028',1,'DataLogger']]], + ['logging_20and_20storage_15',['Data Logging and storage',['../md_README.html#autotoc_md23',1,'']]], + ['logging_20and_20storage_16',['4. Data logging and storage',['../md_README.html#autotoc_md7',1,'']]], + ['logic_20and_20operation_17',['State machine logic and operation',['../md_README.html#autotoc_md34',1,'']]], + ['logtomemory_18',['logToMemory',['../src_2main_8cpp.html#a7df146b43e503e23146e698154d5096d',1,'main.cpp']]], + ['loop_19',['loop',['../src_2main_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'main.cpp']]] +]; diff --git a/search/all_14.js b/search/all_14.js new file mode 100644 index 0000000..b4e31f9 --- /dev/null +++ b/search/all_14.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['machine_20logic_20and_20operation_0',['State machine logic and operation',['../md_README.html#autotoc_md34',1,'']]], + ['main_2ecpp_1',['main.cpp',['../src_2main_8cpp.html',1,'']]], + ['mainchutedeploy_2',['mainChuteDeploy',['../src_2main_8cpp.html#a9074d493ccf55d0cfa3acd2d173f665a',1,'main.cpp']]], + ['max_5fcmd_5flength_3',['MAX_CMD_LENGTH',['../src_2main_8cpp.html#a2e69b1ee7e19bfbe378c886f88e60fac',1,'main.cpp']]], + ['max_5fcsv_5flength_4',['MAX_CSV_LENGTH',['../src_2main_8cpp.html#a3aad00c42368296b28f72f623c446925',1,'main.cpp']]], + ['memory_5',['PCB layout for the flash memory',['../md_README.html#autotoc_md26',1,'']]], + ['mpu6050_6',['MPU6050',['../classMPU6050.html',1,'']]] +]; diff --git a/search/all_15.js b/search/all_15.js new file mode 100644 index 0000000..d8cdcf3 --- /dev/null +++ b/search/all_15.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['n4_20flight_20software_20documentation_0',['N4 Flight Software Documentation',['../md_README.html',1,'']]], + ['n4_20flight_20software_20requirements_1',['N4 Flight software requirements',['../md_README.html#autotoc_md2',1,'']]], + ['nak_2',['NAK',['../src_2main_8cpp.html#a7ff3e502ffb5d509612c6c6741de45cc',1,'main.cpp']]], + ['nak_5finterval_3',['NAK_INTERVAL',['../src_2main_8cpp.html#a394162e74bbeb9bf67d3009cc38e0466',1,'main.cpp']]] +]; diff --git a/search/all_16.js b/search/all_16.js new file mode 100644 index 0000000..4453a41 --- /dev/null +++ b/search/all_16.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['onboard_20systems_20diagnostics_0',['5. Onboard systems diagnostics',['../md_README.html#autotoc_md8',1,'']]], + ['operation_1',['State machine logic and operation',['../md_README.html#autotoc_md34',1,'']]], + ['operation_5fmode_2',['operation_mode',['../src_2main_8cpp.html#a59b33f351d47779eaaff510227075be1',1,'main.cpp']]], + ['operations_3',['GPS Operations',['../md_README.html#autotoc_md29',1,'']]], + ['orientation_20determination_4',['7. Rocket attitude (orientation ) determination',['../md_README.html#autotoc_md10',1,'']]] +]; diff --git a/search/all_17.js b/search/all_17.js new file mode 100644 index 0000000..0b303c7 --- /dev/null +++ b/search/all_17.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['packet_20structure_0',['Telemetry packet structure',['../md_README.html#autotoc_md22',1,'']]], + ['parseserialnumeric_1',['ParseSerialNumeric',['../src_2main_8cpp.html#a102c6561be41c1aafb3bd6da443deed7',1,'main.cpp']]], + ['pcb_20layout_20for_20the_20flash_20memory_2',['PCB layout for the flash memory',['../md_README.html#autotoc_md26',1,'']]], + ['previous_5flog_5ftime_3',['previous_log_time',['../src_2main_8cpp.html#ac03f1f50d9e1452593353033c5b2b1b0',1,'main.cpp']]] +]; diff --git a/search/all_18.js b/search/all_18.js new file mode 100644 index 0000000..2421294 --- /dev/null +++ b/search/all_18.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['queues_20and_20task_20communication_0',['Data queues and task communication',['../md_README.html#autotoc_md17',1,'']]] +]; diff --git a/search/all_19.js b/search/all_19.js new file mode 100644 index 0000000..8b71198 --- /dev/null +++ b/search/all_19.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['readaccelerationtask_0',['readAccelerationTask',['../src_2main_8cpp.html#a64be9ebbabd58a9b6d32b92ce607f2a6',1,'main.cpp']]], + ['readaltimetertask_1',['readAltimeterTask',['../src_2main_8cpp.html#a5947e71102388e9d5bfd09f8e97d668c',1,'main.cpp']]], + ['readgpstask_2',['readGPSTask',['../src_2main_8cpp.html#aa8ea491ed98b16bb5292ad184537f0b5',1,'main.cpp']]], + ['reading_20gps_20data_20algorithm_3',['Reading GPS data algorithm',['../md_README.html#autotoc_md30',1,'']]], + ['readme_4',['README',['../md_n4-flight-software_2README.html',1,'']]], + ['readxacceleration_5',['readXAcceleration',['../classMPU6050.html#a63bb7b9f83eca4c2debdd0dfa7991865',1,'MPU6050']]], + ['readyacceleration_6',['readYAcceleration',['../classMPU6050.html#ab34bd3131afe39a6f5178f46ec63a0e7',1,'MPU6050']]], + ['readzacceleration_7',['readZAcceleration',['../classMPU6050.html#a18bf4368cc536ba0da3d41bdd4241be8',1,'MPU6050']]], + ['receive_5ftest_5fdata_8',['RECEIVE_TEST_DATA',['../src_2main_8cpp.html#a7010bdd588d627529b5948acb89dc09da078eb5ef5383567cdf7a9b36f49289d6',1,'main.cpp']]], + ['receivetestdataserialevent_9',['receiveTestDataSerialEvent',['../src_2main_8cpp.html#a61040c538622d7ad222068e37d96b52a',1,'main.cpp']]], + ['recover_20the_20data_10',['How to recover the data',['../md_README.html#autotoc_md28',1,'']]], + ['recv_5fdata_5fled_11',['recv_data_led',['../src_2main_8cpp.html#a7047c2926a0671d98c6f80a4015f2c14',1,'main.cpp']]], + ['red_5fled_12',['red_led',['../src_2main_8cpp.html#a450aab1d5c2ac17dd8a8fd346a47cf16',1,'main.cpp']]], + ['references_20and_20error_20fixes_13',['References and Error fixes',['../md_README.html#autotoc_md49',1,'']]], + ['requirements_14',['Requirements',['../md_README.html#autotoc_md47',1,'']]], + ['requirements_15',['N4 Flight software requirements',['../md_README.html#autotoc_md2',1,'']]], + ['rocket_20altitude_20above_20ground_20level_20agl_16',['2. Rocket altitude above ground level (AGL)',['../md_README.html#autotoc_md5',1,'']]], + ['rocket_20attitude_20orientation_20determination_17',['7. Rocket attitude (orientation ) determination',['../md_README.html#autotoc_md10',1,'']]], + ['rocket_20kinematics_20acceleration_20velocity_18',['1. Rocket kinematics (acceleration, velocity)',['../md_README.html#autotoc_md4',1,'']]] +]; diff --git a/search/all_1a.js b/search/all_1a.js new file mode 100644 index 0000000..a35bab7 --- /dev/null +++ b/search/all_1a.js @@ -0,0 +1,26 @@ +var searchData= +[ + ['scripts_0',['Utility scripts',['../md_README.html#autotoc_md45',1,'']]], + ['sd_5fcs_5fpin_1',['SD_CS_PIN',['../src_2main_8cpp.html#adcf3e4d2276ee4d10b23c05e4e7da0c3',1,'main.cpp']]], + ['set_5frun_5fmode_5fpin_2',['SET_RUN_MODE_PIN',['../src_2main_8cpp.html#abea45f8bc016d99f82b468ae77916e64',1,'main.cpp']]], + ['set_5ftest_5fmode_5fpin_3',['SET_TEST_MODE_PIN',['../src_2main_8cpp.html#ac0121f71eae2488320c2cd36a4843976',1,'main.cpp']]], + ['setup_4',['setup',['../src_2main_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'main.cpp']]], + ['software_20documentation_5',['N4 Flight Software Documentation',['../md_README.html',1,'']]], + ['software_20requirements_6',['N4 Flight software requirements',['../md_README.html#autotoc_md2',1,'']]], + ['soh_7',['SOH',['../src_2main_8cpp.html#ab3796cca360697d3658162dba5965e28',1,'main.cpp']]], + ['soh_5frecvd_5fflag_8',['SOH_recvd_flag',['../src_2main_8cpp.html#a6a02e76e786465c8d2fe8ba9ad3393da',1,'main.cpp']]], + ['state_20functions_20handling_9',['State functions handling',['../md_README.html#autotoc_md38',1,'']]], + ['state_20machine_20logic_20and_20operation_10',['State machine logic and operation',['../md_README.html#autotoc_md34',1,'']]], + ['state_20transition_20conditions_11',['State transition conditions',['../md_README.html#autotoc_md37',1,'']]], + ['state_20transitions_12',['3. Flight state transitions',['../md_README.html#autotoc_md6',1,'']]], + ['state_5fmachine_13',['State_machine',['../classState__machine.html',1,'']]], + ['state_5fmachine_2ecpp_14',['state_machine.cpp',['../include_2state__machine_8cpp.html',1,'(Global Namespace)'],['../test_2state__machine_8cpp.html',1,'(Global Namespace)']]], + ['states_15',['States',['../md_README.html#autotoc_md36',1,'']]], + ['states_2eh_16',['states.h',['../states_8h.html',1,'']]], + ['storage_17',['storage',['../md_README.html#autotoc_md7',1,'4. Data logging and storage'],['../md_README.html#autotoc_md23',1,'Data Logging and storage']]], + ['streaming_18',['10. Video capture and streaming**',['../md_README.html#autotoc_md13',1,'']]], + ['structure_19',['Telemetry packet structure',['../md_README.html#autotoc_md22',1,'']]], + ['switchleds_20',['SwitchLEDs',['../src_2main_8cpp.html#a5f3e40ff0b3b6f2c247fadc41b0a5896',1,'main.cpp']]], + ['systemlogger_21',['SystemLogger',['../classSystemLogger.html',1,'']]], + ['systems_20diagnostics_22',['5. Onboard systems diagnostics',['../md_README.html#autotoc_md8',1,'']]] +]; diff --git a/search/all_1b.js b/search/all_1b.js new file mode 100644 index 0000000..6eac4b4 --- /dev/null +++ b/search/all_1b.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['task_20communication_0',['Data queues and task communication',['../md_README.html#autotoc_md17',1,'']]], + ['task_20creation_1',['Tasks and task creation',['../md_README.html#autotoc_md14',1,'']]], + ['tasks_20and_20task_20creation_2',['Tasks and task creation',['../md_README.html#autotoc_md14',1,'']]], + ['telemetry_20and_20transmission_20to_20ground_3',['Telemetry and transmission to ground',['../md_README.html#autotoc_md19',1,'']]], + ['telemetry_20packet_20structure_4',['Telemetry packet structure',['../md_README.html#autotoc_md22',1,'']]], + ['telemetry_20transmission_5',['9. Telemetry transmission',['../md_README.html#autotoc_md12',1,'']]], + ['telemetry_5fdata_6',['Telemetry_Data',['../structTelemetry__Data.html',1,'']]], + ['telemetry_5fdata_5fqhandle_7',['telemetry_data_qHandle',['../src_2main_8cpp.html#a0ed5ea94df7417ea494d69ca56aab490',1,'main.cpp']]], + ['test_8',['Test',['../classTest.html',1,'']]], + ['test_5fstate_9',['TEST_STATE',['../src_2main_8cpp.html#a7010bdd588d627529b5948acb89dc09d',1,'main.cpp']]], + ['tests_10',['tests',['../md_README.html#autotoc_md25',1,'Flash chip hardware tests'],['../md_README.html#autotoc_md33',1,'GPS tests']]], + ['the_20data_11',['How to recover the data',['../md_README.html#autotoc_md28',1,'']]], + ['the_20flash_20memory_12',['PCB layout for the flash memory',['../md_README.html#autotoc_md26',1,'']]], + ['time_20issues_13',['GPS fix time issues',['../md_README.html#autotoc_md31',1,'']]], + ['to_20ground_14',['Telemetry and transmission to ground',['../md_README.html#autotoc_md19',1,'']]], + ['to_20recover_20the_20data_15',['How to recover the data',['../md_README.html#autotoc_md28',1,'']]], + ['transition_20conditions_16',['State transition conditions',['../md_README.html#autotoc_md37',1,'']]], + ['transitions_17',['3. Flight state transitions',['../md_README.html#autotoc_md6',1,'']]], + ['transmission_18',['9. Telemetry transmission',['../md_README.html#autotoc_md12',1,'']]], + ['transmission_20to_20ground_19',['Telemetry and transmission to ground',['../md_README.html#autotoc_md19',1,'']]], + ['transmit_5ftelemetry_5fbit_20',['TRANSMIT_TELEMETRY_BIT',['../src_2main_8cpp.html#a3101d6fdbdc9f9b1d5395471a32e23c9',1,'main.cpp']]] +]; diff --git a/search/all_1c.js b/search/all_1c.js new file mode 100644 index 0000000..e6eb054 --- /dev/null +++ b/search/all_1c.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['usage_0',['Usage',['../md_README.html#autotoc_md48',1,'']]], + ['utility_20scripts_1',['Utility scripts',['../md_README.html#autotoc_md45',1,'']]] +]; diff --git a/search/all_1d.js b/search/all_1d.js new file mode 100644 index 0000000..c8e5db2 --- /dev/null +++ b/search/all_1d.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['value_0',['value',['../src_2main_8cpp.html#ac4f474c82e82cbb89ca7c36dd52be0ed',1,'main.cpp']]], + ['velocity_1',['1. Rocket kinematics (acceleration, velocity)',['../md_README.html#autotoc_md4',1,'']]], + ['velocity_20from_20accelerometer_2',['Calculating velocity from accelerometer',['../md_README.html#autotoc_md41',1,'']]], + ['video_20capture_20and_20streaming_3',['10. Video capture and streaming**',['../md_README.html#autotoc_md13',1,'']]] +]; diff --git a/search/all_2.js b/search/all_2.js new file mode 100644 index 0000000..98c78cd --- /dev/null +++ b/search/all_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['3_20flight_20state_20transitions_0',['3. Flight state transitions',['../md_README.html#autotoc_md6',1,'']]] +]; diff --git a/search/all_3.js b/search/all_3.js new file mode 100644 index 0000000..46c1374 --- /dev/null +++ b/search/all_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['4_20data_20logging_20and_20storage_0',['4. Data logging and storage',['../md_README.html#autotoc_md7',1,'']]] +]; diff --git a/search/all_4.js b/search/all_4.js new file mode 100644 index 0000000..11ee109 --- /dev/null +++ b/search/all_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['5_20onboard_20systems_20diagnostics_0',['5. Onboard systems diagnostics',['../md_README.html#autotoc_md8',1,'']]] +]; diff --git a/search/all_5.js b/search/all_5.js new file mode 100644 index 0000000..183d073 --- /dev/null +++ b/search/all_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['6_20gps_20location_0',['6. GPS location',['../md_README.html#autotoc_md9',1,'']]] +]; diff --git a/search/all_6.js b/search/all_6.js new file mode 100644 index 0000000..12072f3 --- /dev/null +++ b/search/all_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['7_20rocket_20attitude_20orientation_20determination_0',['7. Rocket attitude (orientation ) determination',['../md_README.html#autotoc_md10',1,'']]] +]; diff --git a/search/all_7.js b/search/all_7.js new file mode 100644 index 0000000..6597d11 --- /dev/null +++ b/search/all_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['8_20command_20and_20data_20handling_0',['8. Command and data handling',['../md_README.html#autotoc_md11',1,'']]] +]; diff --git a/search/all_8.js b/search/all_8.js new file mode 100644 index 0000000..1b8babb --- /dev/null +++ b/search/all_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['9_20telemetry_20transmission_0',['9. Telemetry transmission',['../md_README.html#autotoc_md12',1,'']]] +]; diff --git a/search/all_9.js b/search/all_9.js new file mode 100644 index 0000000..3dd9eb8 --- /dev/null +++ b/search/all_9.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['above_20ground_20level_20agl_0',['2. Rocket altitude above ground level (AGL)',['../md_README.html#autotoc_md5',1,'']]], + ['acc_5fdata_1',['acc_data',['../src_2main_8cpp.html#a5db507f1ef37ed2d76f24c064e4e6a85',1,'main.cpp']]], + ['acceleration_20from_20accelerometer_2',['Calculating acceleration from accelerometer',['../md_README.html#autotoc_md40',1,'']]], + ['acceleration_20velocity_3',['1. Rocket kinematics (acceleration, velocity)',['../md_README.html#autotoc_md4',1,'']]], + ['acceleration_5fdata_4',['Acceleration_Data',['../structAcceleration__Data.html',1,'']]], + ['accelerometer_5',['accelerometer',['../md_README.html#autotoc_md40',1,'Calculating acceleration from accelerometer'],['../md_README.html#autotoc_md41',1,'Calculating velocity from accelerometer']]], + ['ack_6',['ACK',['../src_2main_8cpp.html#a6f6489887e08bff4887d0bc5dcf214d8',1,'main.cpp']]], + ['agl_7',['2. Rocket altitude above ground level (AGL)',['../md_README.html#autotoc_md5',1,'']]], + ['algorithm_8',['Reading GPS data algorithm',['../md_README.html#autotoc_md30',1,'']]], + ['altimeter_5fdata_9',['Altimeter_Data',['../structAltimeter__Data.html',1,'']]], + ['altitude_20above_20ground_20level_20agl_10',['2. Rocket altitude above ground level (AGL)',['../md_README.html#autotoc_md5',1,'']]], + ['and_20data_20handling_11',['8. Command and data handling',['../md_README.html#autotoc_md11',1,'']]], + ['and_20error_20fixes_12',['References and Error fixes',['../md_README.html#autotoc_md49',1,'']]], + ['and_20operation_13',['State machine logic and operation',['../md_README.html#autotoc_md34',1,'']]], + ['and_20storage_14',['and storage',['../md_README.html#autotoc_md7',1,'4. Data logging and storage'],['../md_README.html#autotoc_md23',1,'Data Logging and storage']]], + ['and_20streaming_15',['10. Video capture and streaming**',['../md_README.html#autotoc_md13',1,'']]], + ['and_20task_20communication_16',['Data queues and task communication',['../md_README.html#autotoc_md17',1,'']]], + ['and_20task_20creation_17',['Tasks and task creation',['../md_README.html#autotoc_md14',1,'']]], + ['and_20transmission_20to_20ground_18',['Telemetry and transmission to ground',['../md_README.html#autotoc_md19',1,'']]], + ['attitude_20orientation_20determination_19',['7. Rocket attitude (orientation ) determination',['../md_README.html#autotoc_md10',1,'']]] +]; diff --git a/search/all_a.js b/search/all_a.js new file mode 100644 index 0000000..31c3066 --- /dev/null +++ b/search/all_a.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['blink_5f200ms_0',['blink_200ms',['../src_2main_8cpp.html#a4139203bf745c4d38fd73bab228d571e',1,'main.cpp']]], + ['bmpinit_1',['BMPInit',['../src_2main_8cpp.html#a80d57b1ee5cb9d474465d3f8485f5bbc',1,'main.cpp']]], + ['budget_20calculation_2',['Link budget calculation',['../md_README.html#autotoc_md21',1,'']]], + ['buzz_3',['buzz',['../src_2main_8cpp.html#a28b1eb955e6e2f5e83599536f6bf4d2f',1,'main.cpp']]] +]; diff --git a/search/all_b.js b/search/all_b.js new file mode 100644 index 0000000..9dd1a57 --- /dev/null +++ b/search/all_b.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['calculating_20acceleration_20from_20accelerometer_0',['Calculating acceleration from accelerometer',['../md_README.html#autotoc_md40',1,'']]], + ['calculating_20velocity_20from_20accelerometer_1',['Calculating velocity from accelerometer',['../md_README.html#autotoc_md41',1,'']]], + ['calculation_2',['Link budget calculation',['../md_README.html#autotoc_md21',1,'']]], + ['can_3',['CAN',['../src_2main_8cpp.html#a427a40e102258055c72607bf7b604549',1,'main.cpp']]], + ['capture_20and_20streaming_4',['10. Video capture and streaming**',['../md_README.html#autotoc_md13',1,'']]], + ['checkflightstate_5',['checkFlightState',['../src_2main_8cpp.html#a152aa3ad3c21993eb70968de75219174',1,'main.cpp']]], + ['checkruntesttoggle_6',['checkRunTestToggle',['../src_2main_8cpp.html#a36d26be00724540c08411ce54b01a49b',1,'main.cpp']]], + ['chip_20hardware_20tests_7',['Flash chip hardware tests',['../md_README.html#autotoc_md25',1,'']]], + ['cleartelemetryqueuetask_8',['clearTelemetryQueueTask',['../src_2main_8cpp.html#a2eee545cf4af91a694e63ac4940276a4',1,'main.cpp']]], + ['code_20documentation_9',['Code documentation',['../md_README.html#autotoc_md1',1,'']]], + ['command_20and_20data_20handling_10',['8. Command and data handling',['../md_README.html#autotoc_md11',1,'']]], + ['communication_11',['Data queues and task communication',['../md_README.html#autotoc_md17',1,'']]], + ['complementary_20filter_12',['Complementary filter',['../md_README.html#autotoc_md44',1,'']]], + ['conditions_13',['State transition conditions',['../md_README.html#autotoc_md37',1,'']]], + ['converter_14',['1. HEX converter',['../md_README.html#autotoc_md46',1,'']]], + ['converttimestamp_15',['convertTimestamp',['../custom-time_8h.html#a3e93bbd5d89dde887f93f6264db8a49f',1,'custom-time.cpp']]], + ['creation_16',['Tasks and task creation',['../md_README.html#autotoc_md14',1,'']]], + ['current_5flog_5ftime_17',['current_log_time',['../src_2main_8cpp.html#a318b23db9cedde5ea8466af114f0c203',1,'main.cpp']]], + ['current_5fstate_18',['current_state',['../src_2main_8cpp.html#ac559654865b2d48ea0b77b1a1f4a097b',1,'main.cpp']]], + ['current_5ftest_5fstate_19',['current_test_state',['../src_2main_8cpp.html#a9dc783a2c139e60a49e643aed8b741b9',1,'main.cpp']]], + ['custom_2dtime_2eh_20',['custom-time.h',['../custom-time_8h.html',1,'']]], + ['customgps_21',['CustomGPS',['../classCustomGPS.html',1,'']]] +]; diff --git a/search/all_c.js b/search/all_c.js new file mode 100644 index 0000000..364d653 --- /dev/null +++ b/search/all_c.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['data_0',['How to recover the data',['../md_README.html#autotoc_md28',1,'']]], + ['data_20algorithm_1',['Reading GPS data algorithm',['../md_README.html#autotoc_md30',1,'']]], + ['data_20filtering_2',['Data Filtering',['../md_README.html#autotoc_md42',1,'']]], + ['data_20handling_3',['8. Command and data handling',['../md_README.html#autotoc_md11',1,'']]], + ['data_20logging_20and_20storage_4',['Data Logging and storage',['../md_README.html#autotoc_md23',1,'']]], + ['data_20logging_20and_20storage_5',['4. Data logging and storage',['../md_README.html#autotoc_md7',1,'']]], + ['data_20queues_20and_20task_20communication_6',['Data queues and task communication',['../md_README.html#autotoc_md17',1,'']]], + ['datalogger_7',['DataLogger',['../classDataLogger.html',1,'DataLogger'],['../classDataLogger.html#a9ddfc501b4bd4f004f11854c3552d574',1,'DataLogger::DataLogger()']]], + ['debugtoterminaltask_8',['debugToTerminalTask',['../src_2main_8cpp.html#aaa1a5716bd567e8c37465dabe33e6396',1,'main.cpp']]], + ['determination_9',['7. Rocket attitude (orientation ) determination',['../md_README.html#autotoc_md10',1,'']]], + ['diagnostics_10',['5. Onboard systems diagnostics',['../md_README.html#autotoc_md8',1,'']]], + ['documentation_11',['N4 Flight Software Documentation',['../md_README.html',1,'']]], + ['documentation_12',['Code documentation',['../md_README.html#autotoc_md1',1,'']]], + ['droguechutedeploy_13',['drogueChuteDeploy',['../src_2main_8cpp.html#aee373e9d6ea48f0b376bdaa1c2970510',1,'main.cpp']]] +]; diff --git a/search/all_d.js b/search/all_d.js new file mode 100644 index 0000000..d044f55 --- /dev/null +++ b/search/all_d.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['eot_0',['EOT',['../src_2main_8cpp.html#aa3210a5256085e136fed7897ae93a756',1,'main.cpp']]], + ['error_20fixes_1',['References and Error fixes',['../md_README.html#autotoc_md49',1,'']]] +]; diff --git a/search/all_e.js b/search/all_e.js new file mode 100644 index 0000000..2218272 --- /dev/null +++ b/search/all_e.js @@ -0,0 +1,26 @@ +var searchData= +[ + ['file_0',['file',['../src_2main_8cpp.html#ada14cbbf98490eb3cb49b5d1cb0c0056',1,'main.cpp']]], + ['file_5fsize_5f1m_1',['FILE_SIZE_1M',['../src_2main_8cpp.html#a1ba4fed8e0dad7fbe3e7de830a2e9f6c',1,'main.cpp']]], + ['file_5fsize_5f4m_2',['FILE_SIZE_4M',['../src_2main_8cpp.html#aef692c53edfa11997d3470f8ed1d6a26',1,'main.cpp']]], + ['file_5fsize_5f512k_3',['FILE_SIZE_512K',['../src_2main_8cpp.html#aa9614a793fcf876f8e55a118d21d2d77',1,'main.cpp']]], + ['filename_4',['filename',['../src_2main_8cpp.html#a6c2affe0788e6ba12dce7a51e1bd35c3',1,'main.cpp']]], + ['filter_5',['Complementary filter',['../md_README.html#autotoc_md44',1,'']]], + ['filtered_5fdata_6',['Filtered_Data',['../structFiltered__Data.html',1,'']]], + ['filterimu_7',['filterImu',['../classMPU6050.html#aed4696b264b467844771ef28b274541b',1,'MPU6050']]], + ['filtering_8',['Data Filtering',['../md_README.html#autotoc_md42',1,'']]], + ['fix_20time_20issues_9',['GPS fix time issues',['../md_README.html#autotoc_md31',1,'']]], + ['fixes_10',['References and Error fixes',['../md_README.html#autotoc_md49',1,'']]], + ['flash_20chip_20hardware_20tests_11',['Flash chip hardware tests',['../md_README.html#autotoc_md25',1,'']]], + ['flash_20memory_12',['PCB layout for the flash memory',['../md_README.html#autotoc_md26',1,'']]], + ['flash_5fcs_5fpin_13',['flash_cs_pin',['../src_2main_8cpp.html#a974c70ac5c2f6156bf0e7fafd973d803',1,'main.cpp']]], + ['flash_5fled_5fpin_14',['flash_led_pin',['../src_2main_8cpp.html#ab506410443108766020e011a3c9293af',1,'main.cpp']]], + ['flight_20software_20documentation_15',['N4 Flight Software Documentation',['../md_README.html',1,'']]], + ['flight_20software_20requirements_16',['N4 Flight software requirements',['../md_README.html#autotoc_md2',1,'']]], + ['flight_20state_20transitions_17',['3. Flight state transitions',['../md_README.html#autotoc_md6',1,'']]], + ['flightstatecallback_18',['flightStateCallback',['../src_2main_8cpp.html#a6648d201a9f47aa836d36e5339e78ef3',1,'main.cpp']]], + ['flowchart_19',['Flowchart',['../md_README.html#autotoc_md32',1,'']]], + ['for_20the_20flash_20memory_20',['PCB layout for the flash memory',['../md_README.html#autotoc_md26',1,'']]], + ['from_20accelerometer_21',['from accelerometer',['../md_README.html#autotoc_md40',1,'Calculating acceleration from accelerometer'],['../md_README.html#autotoc_md41',1,'Calculating velocity from accelerometer']]], + ['functions_20handling_22',['State functions handling',['../md_README.html#autotoc_md38',1,'']]] +]; diff --git a/search/all_f.js b/search/all_f.js new file mode 100644 index 0000000..47a5064 --- /dev/null +++ b/search/all_f.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['getloglevelstring_0',['getLogLevelString',['../classSystemLogger.html#ad6feeadde357832516761347ff4cf25c',1,'SystemLogger']]], + ['getpitch_1',['getPitch',['../classMPU6050.html#aa8d0edd31d2892d6703b4dce77d4dfc7',1,'MPU6050']]], + ['getroll_2',['getRoll',['../classMPU6050.html#adcecd29f4445b6670aafa2452a26f197',1,'MPU6050']]], + ['gps_20data_20algorithm_3',['Reading GPS data algorithm',['../md_README.html#autotoc_md30',1,'']]], + ['gps_20fix_20time_20issues_4',['GPS fix time issues',['../md_README.html#autotoc_md31',1,'']]], + ['gps_20location_5',['6. GPS location',['../md_README.html#autotoc_md9',1,'']]], + ['gps_20operations_6',['GPS Operations',['../md_README.html#autotoc_md29',1,'']]], + ['gps_20tests_7',['GPS tests',['../md_README.html#autotoc_md33',1,'']]], + ['gps_5fdata_8',['GPS_Data',['../structGPS__Data.html',1,'']]], + ['gpsinit_9',['GPSInit',['../src_2main_8cpp.html#a6f220446b54026b1217f93a3a9c04c1f',1,'main.cpp']]], + ['green_5fled_10',['green_led',['../src_2main_8cpp.html#ac4026e93b77dbb4130e8114a3ce0f669',1,'main.cpp']]], + ['ground_11',['Telemetry and transmission to ground',['../md_README.html#autotoc_md19',1,'']]], + ['ground_20level_20agl_12',['2. Rocket altitude above ground level (AGL)',['../md_README.html#autotoc_md5',1,'']]], + ['gyroscope_5fdata_13',['Gyroscope_Data',['../structGyroscope__Data.html',1,'']]] +]; diff --git a/search/classes_0.js b/search/classes_0.js new file mode 100644 index 0000000..c9f6dc3 --- /dev/null +++ b/search/classes_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['acceleration_5fdata_0',['Acceleration_Data',['../structAcceleration__Data.html',1,'']]], + ['altimeter_5fdata_1',['Altimeter_Data',['../structAltimeter__Data.html',1,'']]] +]; diff --git a/search/classes_1.js b/search/classes_1.js new file mode 100644 index 0000000..a4375be --- /dev/null +++ b/search/classes_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['customgps_0',['CustomGPS',['../classCustomGPS.html',1,'']]] +]; diff --git a/search/classes_2.js b/search/classes_2.js new file mode 100644 index 0000000..bcc6aeb --- /dev/null +++ b/search/classes_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['datalogger_0',['DataLogger',['../classDataLogger.html',1,'']]] +]; diff --git a/search/classes_3.js b/search/classes_3.js new file mode 100644 index 0000000..c6adf96 --- /dev/null +++ b/search/classes_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['filtered_5fdata_0',['Filtered_Data',['../structFiltered__Data.html',1,'']]] +]; diff --git a/search/classes_4.js b/search/classes_4.js new file mode 100644 index 0000000..f47f53d --- /dev/null +++ b/search/classes_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['gps_5fdata_0',['GPS_Data',['../structGPS__Data.html',1,'']]], + ['gyroscope_5fdata_1',['Gyroscope_Data',['../structGyroscope__Data.html',1,'']]] +]; diff --git a/search/classes_5.js b/search/classes_5.js new file mode 100644 index 0000000..797c200 --- /dev/null +++ b/search/classes_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['loggerconsole_0',['LoggerConsole',['../classLoggerConsole.html',1,'']]] +]; diff --git a/search/classes_6.js b/search/classes_6.js new file mode 100644 index 0000000..659b4b7 --- /dev/null +++ b/search/classes_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['mpu6050_0',['MPU6050',['../classMPU6050.html',1,'']]] +]; diff --git a/search/classes_7.js b/search/classes_7.js new file mode 100644 index 0000000..39da071 --- /dev/null +++ b/search/classes_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['state_5fmachine_0',['State_machine',['../classState__machine.html',1,'']]], + ['systemlogger_1',['SystemLogger',['../classSystemLogger.html',1,'']]] +]; diff --git a/search/classes_8.js b/search/classes_8.js new file mode 100644 index 0000000..a7a0221 --- /dev/null +++ b/search/classes_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['telemetry_5fdata_0',['Telemetry_Data',['../structTelemetry__Data.html',1,'']]], + ['test_1',['Test',['../classTest.html',1,'']]] +]; diff --git a/search/close.svg b/search/close.svg new file mode 100644 index 0000000..337d6cc --- /dev/null +++ b/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/search/defines_0.js b/search/defines_0.js new file mode 100644 index 0000000..da972c8 --- /dev/null +++ b/search/defines_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['ack_0',['ACK',['../src_2main_8cpp.html#a6f6489887e08bff4887d0bc5dcf214d8',1,'main.cpp']]] +]; diff --git a/search/defines_1.js b/search/defines_1.js new file mode 100644 index 0000000..62b1d10 --- /dev/null +++ b/search/defines_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['can_0',['CAN',['../src_2main_8cpp.html#a427a40e102258055c72607bf7b604549',1,'main.cpp']]] +]; diff --git a/search/defines_2.js b/search/defines_2.js new file mode 100644 index 0000000..b880d48 --- /dev/null +++ b/search/defines_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['eot_0',['EOT',['../src_2main_8cpp.html#aa3210a5256085e136fed7897ae93a756',1,'main.cpp']]] +]; diff --git a/search/defines_3.js b/search/defines_3.js new file mode 100644 index 0000000..52dae1d --- /dev/null +++ b/search/defines_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['max_5fcmd_5flength_0',['MAX_CMD_LENGTH',['../src_2main_8cpp.html#a2e69b1ee7e19bfbe378c886f88e60fac',1,'main.cpp']]], + ['max_5fcsv_5flength_1',['MAX_CSV_LENGTH',['../src_2main_8cpp.html#a3aad00c42368296b28f72f623c446925',1,'main.cpp']]] +]; diff --git a/search/defines_4.js b/search/defines_4.js new file mode 100644 index 0000000..5d90669 --- /dev/null +++ b/search/defines_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['nak_0',['NAK',['../src_2main_8cpp.html#a7ff3e502ffb5d509612c6c6741de45cc',1,'main.cpp']]], + ['nak_5finterval_1',['NAK_INTERVAL',['../src_2main_8cpp.html#a394162e74bbeb9bf67d3009cc38e0466',1,'main.cpp']]] +]; diff --git a/search/defines_5.js b/search/defines_5.js new file mode 100644 index 0000000..3494f56 --- /dev/null +++ b/search/defines_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['soh_0',['SOH',['../src_2main_8cpp.html#ab3796cca360697d3658162dba5965e28',1,'main.cpp']]] +]; diff --git a/search/defines_6.js b/search/defines_6.js new file mode 100644 index 0000000..027bd90 --- /dev/null +++ b/search/defines_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['transmit_5ftelemetry_5fbit_0',['TRANSMIT_TELEMETRY_BIT',['../src_2main_8cpp.html#a3101d6fdbdc9f9b1d5395471a32e23c9',1,'main.cpp']]] +]; diff --git a/search/enums_0.js b/search/enums_0.js new file mode 100644 index 0000000..f5ced8d --- /dev/null +++ b/search/enums_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['test_5fstate_0',['TEST_STATE',['../src_2main_8cpp.html#a7010bdd588d627529b5948acb89dc09d',1,'main.cpp']]] +]; diff --git a/search/enumvalues_0.js b/search/enumvalues_0.js new file mode 100644 index 0000000..505c520 --- /dev/null +++ b/search/enumvalues_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['handshake_0',['HANDSHAKE',['../src_2main_8cpp.html#a7010bdd588d627529b5948acb89dc09dacc6ddcaa36bd57e5aec12749cb5ce29c',1,'main.cpp']]] +]; diff --git a/search/enumvalues_1.js b/search/enumvalues_1.js new file mode 100644 index 0000000..732942f --- /dev/null +++ b/search/enumvalues_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['receive_5ftest_5fdata_0',['RECEIVE_TEST_DATA',['../src_2main_8cpp.html#a7010bdd588d627529b5948acb89dc09da078eb5ef5383567cdf7a9b36f49289d6',1,'main.cpp']]] +]; diff --git a/search/files_0.js b/search/files_0.js new file mode 100644 index 0000000..9539b86 --- /dev/null +++ b/search/files_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['custom_2dtime_2eh_0',['custom-time.h',['../custom-time_8h.html',1,'']]] +]; diff --git a/search/files_1.js b/search/files_1.js new file mode 100644 index 0000000..a28c15c --- /dev/null +++ b/search/files_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['main_2ecpp_0',['main.cpp',['../src_2main_8cpp.html',1,'']]] +]; diff --git a/search/files_2.js b/search/files_2.js new file mode 100644 index 0000000..67ab91a --- /dev/null +++ b/search/files_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['state_5fmachine_2ecpp_0',['state_machine.cpp',['../include_2state__machine_8cpp.html',1,'(Global Namespace)'],['../test_2state__machine_8cpp.html',1,'(Global Namespace)']]], + ['states_2eh_1',['states.h',['../states_8h.html',1,'']]] +]; diff --git a/search/functions_0.js b/search/functions_0.js new file mode 100644 index 0000000..649b112 --- /dev/null +++ b/search/functions_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['blink_5f200ms_0',['blink_200ms',['../src_2main_8cpp.html#a4139203bf745c4d38fd73bab228d571e',1,'main.cpp']]], + ['bmpinit_1',['BMPInit',['../src_2main_8cpp.html#a80d57b1ee5cb9d474465d3f8485f5bbc',1,'main.cpp']]], + ['buzz_2',['buzz',['../src_2main_8cpp.html#a28b1eb955e6e2f5e83599536f6bf4d2f',1,'main.cpp']]] +]; diff --git a/search/functions_1.js b/search/functions_1.js new file mode 100644 index 0000000..83b1274 --- /dev/null +++ b/search/functions_1.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['checkflightstate_0',['checkFlightState',['../src_2main_8cpp.html#a152aa3ad3c21993eb70968de75219174',1,'main.cpp']]], + ['checkruntesttoggle_1',['checkRunTestToggle',['../src_2main_8cpp.html#a36d26be00724540c08411ce54b01a49b',1,'main.cpp']]], + ['cleartelemetryqueuetask_2',['clearTelemetryQueueTask',['../src_2main_8cpp.html#a2eee545cf4af91a694e63ac4940276a4',1,'main.cpp']]], + ['converttimestamp_3',['convertTimestamp',['../custom-time_8h.html#a3e93bbd5d89dde887f93f6264db8a49f',1,'custom-time.cpp']]] +]; diff --git a/search/functions_2.js b/search/functions_2.js new file mode 100644 index 0000000..76f1a51 --- /dev/null +++ b/search/functions_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['datalogger_0',['DataLogger',['../classDataLogger.html#a9ddfc501b4bd4f004f11854c3552d574',1,'DataLogger']]], + ['debugtoterminaltask_1',['debugToTerminalTask',['../src_2main_8cpp.html#aaa1a5716bd567e8c37465dabe33e6396',1,'main.cpp']]], + ['droguechutedeploy_2',['drogueChuteDeploy',['../src_2main_8cpp.html#aee373e9d6ea48f0b376bdaa1c2970510',1,'main.cpp']]] +]; diff --git a/search/functions_3.js b/search/functions_3.js new file mode 100644 index 0000000..6b0792b --- /dev/null +++ b/search/functions_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['filterimu_0',['filterImu',['../classMPU6050.html#aed4696b264b467844771ef28b274541b',1,'MPU6050']]], + ['flightstatecallback_1',['flightStateCallback',['../src_2main_8cpp.html#a6648d201a9f47aa836d36e5339e78ef3',1,'main.cpp']]] +]; diff --git a/search/functions_4.js b/search/functions_4.js new file mode 100644 index 0000000..39353b5 --- /dev/null +++ b/search/functions_4.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['getloglevelstring_0',['getLogLevelString',['../classSystemLogger.html#ad6feeadde357832516761347ff4cf25c',1,'SystemLogger']]], + ['getpitch_1',['getPitch',['../classMPU6050.html#aa8d0edd31d2892d6703b4dce77d4dfc7',1,'MPU6050']]], + ['getroll_2',['getRoll',['../classMPU6050.html#adcecd29f4445b6670aafa2452a26f197',1,'MPU6050']]], + ['gpsinit_3',['GPSInit',['../src_2main_8cpp.html#a6f220446b54026b1217f93a3a9c04c1f',1,'main.cpp']]] +]; diff --git a/search/functions_5.js b/search/functions_5.js new file mode 100644 index 0000000..e5e81d2 --- /dev/null +++ b/search/functions_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['handshakeserialevent_0',['handshakeSerialEvent',['../src_2main_8cpp.html#a41453ccb33ef6b57e513b16e92dd130e',1,'main.cpp']]] +]; diff --git a/search/functions_6.js b/search/functions_6.js new file mode 100644 index 0000000..0b601d5 --- /dev/null +++ b/search/functions_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['initgpio_0',['initGPIO',['../src_2main_8cpp.html#ae8297bf2b99a2ad67af6f9a421ea4b16',1,'main.cpp']]], + ['initxmodem_1',['InitXMODEM',['../src_2main_8cpp.html#abf447a0860a5fec74fecf8654172fec0',1,'main.cpp']]] +]; diff --git a/search/functions_7.js b/search/functions_7.js new file mode 100644 index 0000000..c73da26 --- /dev/null +++ b/search/functions_7.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['listdir_0',['listDir',['../src_2main_8cpp.html#a8841578fe91cace6206676f0e751cab5',1,'main.cpp']]], + ['loggerequals_1',['loggerEquals',['../classDataLogger.html#acb9bf3c62db1f28016d68d51efe25d43',1,'DataLogger']]], + ['loggerformat_2',['loggerFormat',['../classDataLogger.html#a5e9756481c9c74167ba32ad7a479e8b3',1,'DataLogger']]], + ['loggerinfo_3',['loggerInfo',['../classDataLogger.html#a9a968317a7e3bb763d8cd551063e7348',1,'DataLogger']]], + ['loggerinit_4',['loggerInit',['../classDataLogger.html#a0cf2853582b7f2194eb0024d3d6d4944',1,'DataLogger']]], + ['loggerread_5',['loggerRead',['../classDataLogger.html#a5a0deefb9372f1577636014a59025e6f',1,'DataLogger']]], + ['loggerspaces_6',['loggerSpaces',['../classDataLogger.html#aa2e189964fbebc28dc2a327fdccc5684',1,'DataLogger']]], + ['loggertest_7',['loggerTest',['../classDataLogger.html#ae8a69bf0cc965365057e93a164ca9239',1,'DataLogger']]], + ['loggerwrite_8',['loggerWrite',['../classDataLogger.html#a411ac6fd751d3a87cef0375fccaad028',1,'DataLogger']]], + ['logtomemory_9',['logToMemory',['../src_2main_8cpp.html#a7df146b43e503e23146e698154d5096d',1,'main.cpp']]], + ['loop_10',['loop',['../src_2main_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'main.cpp']]] +]; diff --git a/search/functions_8.js b/search/functions_8.js new file mode 100644 index 0000000..c9f7166 --- /dev/null +++ b/search/functions_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['mainchutedeploy_0',['mainChuteDeploy',['../src_2main_8cpp.html#a9074d493ccf55d0cfa3acd2d173f665a',1,'main.cpp']]] +]; diff --git a/search/functions_9.js b/search/functions_9.js new file mode 100644 index 0000000..9ba8c01 --- /dev/null +++ b/search/functions_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['parseserialnumeric_0',['ParseSerialNumeric',['../src_2main_8cpp.html#a102c6561be41c1aafb3bd6da443deed7',1,'main.cpp']]] +]; diff --git a/search/functions_a.js b/search/functions_a.js new file mode 100644 index 0000000..c54f5cf --- /dev/null +++ b/search/functions_a.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['readaccelerationtask_0',['readAccelerationTask',['../src_2main_8cpp.html#a64be9ebbabd58a9b6d32b92ce607f2a6',1,'main.cpp']]], + ['readaltimetertask_1',['readAltimeterTask',['../src_2main_8cpp.html#a5947e71102388e9d5bfd09f8e97d668c',1,'main.cpp']]], + ['readgpstask_2',['readGPSTask',['../src_2main_8cpp.html#aa8ea491ed98b16bb5292ad184537f0b5',1,'main.cpp']]], + ['readxacceleration_3',['readXAcceleration',['../classMPU6050.html#a63bb7b9f83eca4c2debdd0dfa7991865',1,'MPU6050']]], + ['readyacceleration_4',['readYAcceleration',['../classMPU6050.html#ab34bd3131afe39a6f5178f46ec63a0e7',1,'MPU6050']]], + ['readzacceleration_5',['readZAcceleration',['../classMPU6050.html#a18bf4368cc536ba0da3d41bdd4241be8',1,'MPU6050']]], + ['receivetestdataserialevent_6',['receiveTestDataSerialEvent',['../src_2main_8cpp.html#a61040c538622d7ad222068e37d96b52a',1,'main.cpp']]] +]; diff --git a/search/functions_b.js b/search/functions_b.js new file mode 100644 index 0000000..17240f1 --- /dev/null +++ b/search/functions_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['setup_0',['setup',['../src_2main_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'main.cpp']]], + ['switchleds_1',['SwitchLEDs',['../src_2main_8cpp.html#a5f3e40ff0b3b6f2c247fadc41b0a5896',1,'main.cpp']]] +]; diff --git a/search/mag.svg b/search/mag.svg new file mode 100644 index 0000000..ffb6cf0 --- /dev/null +++ b/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/search/mag_d.svg b/search/mag_d.svg new file mode 100644 index 0000000..4122773 --- /dev/null +++ b/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/search/mag_sel.svg b/search/mag_sel.svg new file mode 100644 index 0000000..553dba8 --- /dev/null +++ b/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/search/mag_seld.svg b/search/mag_seld.svg new file mode 100644 index 0000000..c906f84 --- /dev/null +++ b/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/search/pages_0.js b/search/pages_0.js new file mode 100644 index 0000000..9c27d34 --- /dev/null +++ b/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['documentation_0',['N4 Flight Software Documentation',['../md_README.html',1,'']]] +]; diff --git a/search/pages_1.js b/search/pages_1.js new file mode 100644 index 0000000..33b030f --- /dev/null +++ b/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['flight_20software_20documentation_0',['N4 Flight Software Documentation',['../md_README.html',1,'']]] +]; diff --git a/search/pages_2.js b/search/pages_2.js new file mode 100644 index 0000000..c505f5d --- /dev/null +++ b/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['n4_20flight_20software_20documentation_0',['N4 Flight Software Documentation',['../md_README.html',1,'']]] +]; diff --git a/search/pages_3.js b/search/pages_3.js new file mode 100644 index 0000000..ddc8d19 --- /dev/null +++ b/search/pages_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['readme_0',['README',['../md_n4-flight-software_2README.html',1,'']]] +]; diff --git a/search/pages_4.js b/search/pages_4.js new file mode 100644 index 0000000..65d1c27 --- /dev/null +++ b/search/pages_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['software_20documentation_0',['N4 Flight Software Documentation',['../md_README.html',1,'']]] +]; diff --git a/search/pages_5.js b/search/pages_5.js new file mode 100644 index 0000000..f60a18e --- /dev/null +++ b/search/pages_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['readme_0',['README',['../md_n4-flight-software_2_r_e_a_d_m_e.html',1,'']]] +]; diff --git a/search/pages_6.js b/search/pages_6.js new file mode 100644 index 0000000..f831d08 --- /dev/null +++ b/search/pages_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['software_20documentation_0',['N4 Flight Software Documentation',['../md__r_e_a_d_m_e.html',1,'']]] +]; diff --git a/search/search.css b/search/search.css new file mode 100644 index 0000000..19f76f9 --- /dev/null +++ b/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: var(--search-background-color); + border-radius: 0.65em; + box-shadow: var(--search-box-shadow); + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: var(--search-magnification-select-image); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: var(--search-magnification-image); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: var(--search-foreground-color); + outline: none; + font-family: var(--font-family-search); + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: var(--search-active-color); +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-filter-border-color); + background-color: var(--search-filter-background-color); + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt var(--font-family-search); + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: var(--font-family-monospace); + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: var(--search-filter-foreground-color); + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: var(--search-filter-foreground-color); + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: var(--search-filter-highlight-text-color); + background-color: var(--search-filter-highlight-bg-color); + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-results-border-color); + background-color: var(--search-results-background-color); + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: var(--search-results-background-color); +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: var(--font-family-search); +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: var(--font-family-search); +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: var(--nav-gradient-active-image-parent); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/search/search.js b/search/search.js new file mode 100644 index 0000000..666af01 --- /dev/null +++ b/search/search.js @@ -0,0 +1,694 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +const SEARCH_COOKIE_NAME = ''+'search_grp'; + +const searchResults = new SearchResults(); + +/* A class handling everything associated with the search panel. + + Parameters: + name - The name of the global variable that will be + storing this instance. Is needed to be able to set timeouts. + resultPath - path to use for external files +*/ +function SearchBox(name, resultsPath, extension) { + if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } + if (!extension || extension == "") { extension = ".html"; } + + function getXPos(item) { + let x = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + x += item.offsetLeft; + item = item.offsetParent; + } + } + return x; + } + + function getYPos(item) { + let y = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + y += item.offsetTop; + item = item.offsetParent; + } + } + return y; + } + + // ---------- Instance variables + this.name = name; + this.resultsPath = resultsPath; + this.keyTimeout = 0; + this.keyTimeoutLength = 500; + this.closeSelectionTimeout = 300; + this.lastSearchValue = ""; + this.lastResultsPage = ""; + this.hideTimeout = 0; + this.searchIndex = 0; + this.searchActive = false; + this.extension = extension; + + // ----------- DOM Elements + + this.DOMSearchField = () => document.getElementById("MSearchField"); + this.DOMSearchSelect = () => document.getElementById("MSearchSelect"); + this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow"); + this.DOMPopupSearchResults = () => document.getElementById("MSearchResults"); + this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow"); + this.DOMSearchClose = () => document.getElementById("MSearchClose"); + this.DOMSearchBox = () => document.getElementById("MSearchBox"); + + // ------------ Event Handlers + + // Called when focus is added or removed from the search field. + this.OnSearchFieldFocus = function(isActive) { + this.Activate(isActive); + } + + this.OnSearchSelectShow = function() { + const searchSelectWindow = this.DOMSearchSelectWindow(); + const searchField = this.DOMSearchSelect(); + + const left = getXPos(searchField); + const top = getYPos(searchField) + searchField.offsetHeight; + + // show search selection popup + searchSelectWindow.style.display='block'; + searchSelectWindow.style.left = left + 'px'; + searchSelectWindow.style.top = top + 'px'; + + // stop selection hide timer + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout=0; + } + return false; // to avoid "image drag" default event + } + + this.OnSearchSelectHide = function() { + this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), + this.closeSelectionTimeout); + } + + // Called when the content of the search field is changed. + this.OnSearchFieldChange = function(evt) { + if (this.keyTimeout) { // kill running timer + clearTimeout(this.keyTimeout); + this.keyTimeout = 0; + } + + const e = evt ? evt : window.event; // for IE + if (e.keyCode==40 || e.keyCode==13) { + if (e.shiftKey==1) { + this.OnSearchSelectShow(); + const win=this.DOMSearchSelectWindow(); + for (let i=0;i do a search + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) { // Up + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } else if (e.keyCode==13 || e.keyCode==27) { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() { + this.keyTimeout = 0; + + // strip leading whitespace + const searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + const code = searchValue.toLowerCase().charCodeAt(0); + let idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair + idxChar = searchValue.substr(0, 2); + } + + let jsFile; + let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) { + const hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + const loadJS = function(url, impl, loc) { + const scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + const domSearchBox = this.DOMSearchBox(); + const domPopupSearchResults = this.DOMPopupSearchResults(); + const domSearchClose = this.DOMSearchClose(); + const resultsPath = this.resultsPath; + + const handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') { + domSearchClose.style.display = 'inline-block'; + let left = getXPos(domSearchBox) + 150; + let top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + const maxWidth = document.body.clientWidth; + const maxHeight = document.body.clientHeight; + let width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + let height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } else if (!isActive) { // directly remove the panel + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults() { + + function convertToId(search) { + let result = ''; + for (let i=0;i. + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) { + const parentElement = document.getElementById(id); + let element = parentElement.firstChild; + + while (element && element!=parentElement) { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { + element = element.firstChild; + } else if (element.nextSibling) { + element = element.nextSibling; + } else { + do { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) { + const element = this.FindChildElement(id); + if (element) { + if (element.style.display == 'block') { + element.style.display = 'none'; + } else { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) { + if (!search) { // get search word from URL + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + const resultRows = document.getElementsByTagName("div"); + let matches = 0; + + let i = 0; + while (i < resultRows.length) { + const row = resultRows.item(i); + if (row.className == "SRResult") { + let rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) { + row.style.display = 'block'; + matches++; + } else { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) { // no results + document.getElementById("NoMatches").style.display='block'; + } else { // at least one result + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) { + if (e.type == "keydown") { + this.repeatOn = false; + this.lastKey = e.keyCode; + } else if (e.type == "keypress") { + if (!this.repeatOn) { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } else if (e.type == "keyup") { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + const newIndex = itemIndex-1; + let focusItem = this.NavPrev(newIndex); + if (focusItem) { + let child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') { // children visible + let n=0; + let tmpElem; + for (;;) { // search for last child + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) { + focusItem = tmpElem; + } else { // found it! + break; + } + n++; + } + } + } + if (focusItem) { + focusItem.focus(); + } else { // return focus to search field + document.getElementById("MSearchField").focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = itemIndex+1; + let focusItem; + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') { // children visible + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } else if (this.lastKey==39) { // Right + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } else if (this.lastKey==37) { // Left + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + if (childIndex>0) { + const newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } else { // already at first child, jump to parent + document.getElementById('Item'+itemIndex).focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = childIndex+1; + let elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) { // last child, jump to parent next parent + elem = this.NavNext(itemIndex+1); + } + if (elem) { + elem.focus(); + } + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } +} + +function createResults(resultsPath) { + + function setKeyActions(elem,action) { + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); + } + + function setClassAttr(elem,attr) { + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); + } + + const results = document.getElementById("SRResults"); + results.innerHTML = ''; + searchData.forEach((elem,index) => { + const id = elem[0]; + const srResult = document.createElement('div'); + srResult.setAttribute('id','SR_'+id); + setClassAttr(srResult,'SRResult'); + const srEntry = document.createElement('div'); + setClassAttr(srEntry,'SREntry'); + const srLink = document.createElement('a'); + srLink.setAttribute('id','Item'+index); + setKeyActions(srLink,'return searchResults.Nav(event,'+index+')'); + setClassAttr(srLink,'SRSymbol'); + srLink.innerHTML = elem[1][0]; + srEntry.appendChild(srLink); + if (elem[1].length==2) { // single result + srLink.setAttribute('href',resultsPath+elem[1][1][0]); + srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); + if (elem[1][1][1]) { + srLink.setAttribute('target','_parent'); + } else { + srLink.setAttribute('target','_blank'); + } + const srScope = document.createElement('span'); + setClassAttr(srScope,'SRScope'); + srScope.innerHTML = elem[1][1][2]; + srEntry.appendChild(srScope); + } else { // multiple results + srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); + const srChildren = document.createElement('div'); + setClassAttr(srChildren,'SRChildren'); + for (let c=0; c + + + + + + +N4 Flight Software: n4-flight-software/include/sensors.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    sensors.h
    +
    +
    +
    1//
    +
    2// Created by Edwin Miwiri on 3/6/2023.
    +
    3//
    +
    4
    +
    5#ifndef SENSORS_H
    +
    6#define SENSORS_H
    +
    7
    +
    8void initialize_gyroscope();
    +
    9void initialize_altimeter();
    +
    10
    +
    11#endif
    +
    + + +
    + + diff --git a/splitbar.png b/splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/splitbard.png b/splitbard.png new file mode 100644 index 0000000000000000000000000000000000000000..8367416d757fd7b6dc4272b6432dc75a75abd068 GIT binary patch literal 282 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf@VhhFKy35^fiT zT~&lUj3=cDh^%3HDY9k5CEku}PHXNoNC(_$U3XPb&Q*ME25pT;2(*BOgAf<+R$lzakPG`kF31()Fx{L5Wrac|GQzjeE= zueY1`Ze{#x<8=S|`~MgGetGce)#vN&|J{Cd^tS%;tBYTo?+^d68<#n_Y_xx`J||4O V@QB{^CqU0Kc)I$ztaD0e0svEzbJzd? literal 0 HcmV?d00001 diff --git a/src_2main_8cpp.html b/src_2main_8cpp.html new file mode 100644 index 0000000..bbd2420 --- /dev/null +++ b/src_2main_8cpp.html @@ -0,0 +1,1561 @@ + + + + + + + +N4 Flight Software: n4-flight-software/src/main.cpp File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    main.cpp File Reference
    +
    +
    + +

    This contains the main driver code for the flight computer. +More...

    +
    #include <Arduino.h>
    +#include <Wire.h>
    +#include <WiFi.h>
    +#include <PubSubClient.h>
    +#include <TinyGPSPlus.h>
    +#include <SFE_BMP180.h>
    +#include <FS.h>
    +#include <SD.h>
    +#include <SPIFFS.h>
    +#include "sensors.h"
    +#include "defs.h"
    +#include "mpu.h"
    +#include "SerialFlash.h"
    +#include "logger.h"
    +#include "data-types.h"
    +#include "custom-time.h"
    +#include "states.h"
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Macros

    +#define BAUDRATE   115200
     
    #define NAK_INTERVAL   4000
     
    #define SOH   0x01
     
    #define EOT   0x04
     
    #define ACK   0x06
     
    #define NAK   0x15
     
    #define CAN   0x18
     
    #define MAX_CMD_LENGTH   10
     
    #define MAX_CSV_LENGTH   256
     
    +#define FORMAT_SPIFFS_IF_FAILED   1
     
    #define TRANSMIT_TELEMETRY_BIT   ((EventBits_t) 0x01 << 0)
     
    +#define CHECK_FLIGHT_STATE_BIT   ((EventBits_t) 0x01 << 1)
     
    +#define LOG_TO_MEMORY_BIT   ((EventBits_t) 0x01 << 2)
     
    +#define TRANSMIT_XBEE_BIT   ((EventBits_t) 0x01 << 3)
     
    +#define DEBUG_TO_TERM_BIT   ((EventBits_t) 0x01 << 4)
     
    +#define ALTITUDE   1525.0
     
    + + + + +

    +Enumerations

    enum  TEST_STATE { HANDSHAKE = 0 +, RECEIVE_TEST_DATA +, CONFIRM_TEST_DATA + }
     This enum holds the states during flight computer test mode. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    void drogueChuteDeploy ()
     fires the pyro-charge to deploy the drogue chute Turn on the drogue chute ejection circuit by running the GPIO HIGH for a preset No. of seconds.
    + Default no. of seconds to remain HIGH is 5
     
    void mainChuteDeploy ()
     fires the pyro-charge to deploy the main chute Turn on the main chute ejection circuit by running the GPIO HIGH for a preset No. of seconds.
    + Default no. of seconds to remain HIGH is 5
     
    +PubSubClient mqtt_client (wifi_client)
     
    void listDir (fs::FS &fs, const char *dirname, uint8_t levels)
     
    void initGPIO ()
     Inititialize the GPIOs.
     
    +void InitSPIFFS ()
     
    +void initSD ()
     
    void SwitchLEDs (uint8_t red_state, uint8_t green_state)
     Switch the LEDS states.
     
    void InitXMODEM ()
     Initiate XMODEM protocol by sending a NAK command every 4 seconds until the transmitter returns an ACK signal.
     
    +void SerialEvent ()
     
    +void ParseSerial (char *)
     
    void checkRunTestToggle ()
     Sample the RUN/TEST toggle pins to check whether the fligh tcomputer is in test mode or run mode. If in TEST mode, define the TEST flag If in RUN mode, define the RUN flag TEST_MODE Pin and RUN_MODE pin are both pulled HIGH. When you set the jumper, you pull that pin to LOW.
     
    +void readFile (fs::FS &fs, const char *path)
     
    +void writeFile (fs::FS &fs, const char *path, const char *message)
     
    +void appendFile (fs::FS &fs, const char *path, const char *message)
     
    +void deleteFile (fs::FS &fs, const char *path)
     
    +void readTestDataFile ()
     
    void buzz ()
     Buzz the buzzer for a given buzz_interval This function is non-blocking.
     
    void blink_200ms (uint8_t led_pin)
     implements non-blocking blink
     
    +void ParseSerialBuffer (char *buffer)
     
    void ParseSerialNumeric (int value)
     Parse the received serial command if it is a digit We are only interested in numeric values being sent by the transmitter to us, the receiver.
     
    void handshakeSerialEvent ()
     Receive serial message during handshake.
     
    void receiveTestDataSerialEvent ()
     Receive serial message during RECEIVE_TEST_DATA state Data received in this state is the actual test data. It is saved into the test flash memory.
     
    void BMPInit ()
     Initialize BMP180 barometric sensor.
     
    void GPSInit ()
     Initialize the GPS connected on Serial2.
     
    void readAccelerationTask (void *pvParameter)
     Read acceleration data from the accelerometer.
     
    void readAltimeterTask (void *pvParameters)
     Read ar pressure data from the barometric sensor onboard.
     
    void readGPSTask (void *pvParameters)
     Read the GPS location data and altitude and append to telemetry packet for transmission.
     
    void clearTelemetryQueueTask (void *pvParameters)
     dequeue data from telemetry queue after all the tasks have consumed the data
     
    void checkFlightState (void *pvParameters)
     Check and update the current state of flight - refer to states.h.
     
    void flightStateCallback (void *pvParameters)
     performs flight actions based on the current flight state If the flight state neccessisates an operation, we perfom it here For example if the flight state is apogee, we perfom MAIN_CHUTE ejection
     
    void debugToTerminalTask (void *pvParameters)
     debug flight/test data to terminal, this task is called if the DEBUG_TO_TERMINAL is set to 1 (see defs.h)
     
    void logToMemory (void *pvParameter)
     log the data to the external flash memory
     
    void setup ()
     Setup - perfom initialization of all hardware subsystems, create queues, create queue handles initialize system check table.
     
    void loop ()
     Main loop.
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

    uint8_t operation_mode = 0
     
    uint8_t current_state = FLIGHT_STATE::PRE_FLIGHT_GROUND
     
    +WiFiClient wifi_client
     
    +TinyGPSPlus gps
     
    +uint8_t RUN_MODE = 0
     
    +uint8_t TEST_MODE = 0
     
    uint8_t SOH_recvd_flag = 0
     
    +unsigned long last_NAK_time = 0
     
    +unsigned long current_NAK_time = 0
     
    +char SOH_CHR [6] = "SOH"
     
    +char serial_buffer [MAX_CMD_LENGTH]
     
    +int16_t serial_index = 0
     
    +char test_data_buffer [MAX_CSV_LENGTH]
     
    +int16_t test_data_serial_index = 0
     
    uint8_t recv_data_led = 2
     
    uint8_t red_led = 15
     
    uint8_t green_led = 4
     
    +uint8_t buzzer = 33
     
    uint8_t SET_TEST_MODE_PIN = 14
     
    uint8_t SET_RUN_MODE_PIN = 13
     
    uint8_t SD_CS_PIN = 26
     
    uint8_t current_test_state = TEST_STATE::HANDSHAKE
     
    +const char * test_data_file = "/data.csv"
     
    +unsigned long last_buzz = 0
     
    +unsigned long current_buzz = 0
     
    +unsigned long buzz_interval = 200
     
    +uint8_t buzzer_state = LOW
     
    +unsigned long last_blink = 0
     
    +unsigned long current_blink = 0
     
    +unsigned long blink_interval = 200
     
    +uint8_t led_state = LOW
     
    int value = 0
     Parse the received serial command if it is a string.
     
    +uint8_t drogue_pyro = 25
     
    +uint8_t main_pyro = 12
     
    uint8_t flash_cs_pin = 5
     
    +uint8_t remote_switch = 27
     
    uint8_t flash_led_pin = 39
     
    char filename [] = "flight.bin"
     
    uint32_t FILE_SIZE_512K = 524288L
     
    uint32_t FILE_SIZE_1M = 1048576L
     
    uint32_t FILE_SIZE_4M = 4194304L
     
    SerialFlashFile file
     
    unsigned long long previous_log_time = 0
     
    unsigned long long current_log_time = 0
     
    uint16_t log_sample_interval = 10
     
    +DataLogger data_logger (flash_cs_pin, flash_led_pin, filename, file, FILE_SIZE_4M)
     
    +long long current_time = 0
     
    +long long previous_time = 0
     
    +EventGroupHandle_t tasksDataReceiveEventGroup
     
    accel_type_t acc_data
     
    +gyro_type_t gyro_data
     
    +gps_type_t gps_data
     
    +altimeter_type_t altimeter_data
     
    +telemetry_type_t telemetry_packet
     
    MPU6050 imu (0x68, 16, 1000)
     
    +SFE_BMP180 altimeter
     
    +char status
     
    +double T
     
    +double P
     
    +double p0
     
    +double a
     
    QueueHandle_t telemetry_data_qHandle
     
    +QueueHandle_t accel_data_qHandle
     
    +QueueHandle_t altimeter_data_qHandle
     
    +QueueHandle_t gps_data_qHandle
     
    +

    Detailed Description

    +

    This contains the main driver code for the flight computer.

    +
    Author
    Edwin Mwiti
    +
    Version
    0.1
    +
    Date
    July 15 2024
    +

    0x5765206D6179206D616B65206F757220706C616E73202C 0x62757420476F642068617320746865206C61737420776F7264

    +

    Macro Definition Documentation

    + +

    ◆ ACK

    + +
    +
    + + + + +
    #define ACK   0x06
    +
    +

    positive acknowledgement

    + +
    +
    + +

    ◆ CAN

    + +
    +
    + + + + +
    #define CAN   0x18
    +
    +

    cancel

    + +
    +
    + +

    ◆ EOT

    + +
    +
    + + + + +
    #define EOT   0x04
    +
    +

    end of transmission

    + +
    +
    + +

    ◆ MAX_CMD_LENGTH

    + +
    +
    + + + + +
    #define MAX_CMD_LENGTH   10
    +
    +

    Maximum length of the XMODEM command string that can be received

    + +
    +
    + +

    ◆ MAX_CSV_LENGTH

    + +
    +
    + + + + +
    #define MAX_CSV_LENGTH   256
    +
    +

    Maximum length of the csv string that can be received

    + +
    +
    + +

    ◆ NAK

    + +
    +
    + + + + +
    #define NAK   0x15
    +
    +

    negative acknowledgement

    + +
    +
    + +

    ◆ NAK_INTERVAL

    + +
    +
    + + + + +
    #define NAK_INTERVAL   4000
    +
    +

    Interval in which to send the NAK command to the transmitter

    + +
    +
    + +

    ◆ SOH

    + +
    +
    + + + + +
    #define SOH   0x01
    +
    +

    start of header

    + +
    +
    + +

    ◆ TRANSMIT_TELEMETRY_BIT

    + +
    +
    + + + + +
    #define TRANSMIT_TELEMETRY_BIT   ((EventBits_t) 0x01 << 0)
    +
    +

    Task synchronization variables

    + +
    +
    +

    Enumeration Type Documentation

    + +

    ◆ TEST_STATE

    + +
    +
    + + + + +
    enum TEST_STATE
    +
    + +

    This enum holds the states during flight computer test mode.

    +
    + + + +
    Enumerator
    HANDSHAKE 

    state to establish initial communication with transmitter

    +
    RECEIVE_TEST_DATA 

    sets the flight computer to receive test data over serial

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ blink_200ms()

    + +
    +
    + + + + + + + +
    void blink_200ms (uint8_t led_pin)
    +
    + +

    implements non-blocking blink

    +
    + +
    +
    + +

    ◆ BMPInit()

    + +
    +
    + + + + + + + +
    void BMPInit ()
    +
    + +

    Initialize BMP180 barometric sensor.

    +
    +
    Returns
    TODO: 1 if init OK, 0 otherwise
    + +
    +
    + +

    ◆ buzz()

    + +
    +
    + + + + + + + +
    void buzz ()
    +
    + +

    Buzz the buzzer for a given buzz_interval This function is non-blocking.

    +
    + +
    +
    + +

    ◆ checkFlightState()

    + +
    +
    + + + + + + + +
    void checkFlightState (void * pvParameters)
    +
    + +

    Check and update the current state of flight - refer to states.h.

    +
    +
    Parameters
    + + +
    pvParameters- A value that is passed as the paramater to the created task. If pvParameters is set to the address of a variable then the variable must still exist when the created task executes - so it is not valid to pass the address of a stack variable.
    +
    +
    +
    Returns
    Updates the telemetry data flight state value
    + +
    +
    + +

    ◆ checkRunTestToggle()

    + +
    +
    + + + + + + + +
    void checkRunTestToggle ()
    +
    + +

    Sample the RUN/TEST toggle pins to check whether the fligh tcomputer is in test mode or run mode. If in TEST mode, define the TEST flag If in RUN mode, define the RUN flag TEST_MODE Pin and RUN_MODE pin are both pulled HIGH. When you set the jumper, you pull that pin to LOW.

    +
    + +
    +
    + +

    ◆ clearTelemetryQueueTask()

    + +
    +
    + + + + + + + +
    void clearTelemetryQueueTask (void * pvParameters)
    +
    + +

    dequeue data from telemetry queue after all the tasks have consumed the data

    +
    +
    Parameters
    + + +
    pvParameters- A value that is passed as the paramater to the created task. If pvParameters is set to the address of a variable then the variable must still exist when the created task executes - so it is not valid to pass the address of a stack variable.
    +
    +
    +
    Returns
    none
    + +
    +
    + +

    ◆ debugToTerminalTask()

    + +
    +
    + + + + + + + +
    void debugToTerminalTask (void * pvParameters)
    +
    + +

    debug flight/test data to terminal, this task is called if the DEBUG_TO_TERMINAL is set to 1 (see defs.h)

    +
    +
    Parameters
    + + +
    pvParameter- A value that is passed as the paramater to the created task. If pvParameter is set to the address of a variable then the variable must still exist when the created task executes - so it is not valid to pass the address of a stack variable.
    +
    +
    + +
    +
    + +

    ◆ drogueChuteDeploy()

    + +
    +
    + + + + + + + +
    void drogueChuteDeploy ()
    +
    + +

    fires the pyro-charge to deploy the drogue chute Turn on the drogue chute ejection circuit by running the GPIO HIGH for a preset No. of seconds.
    + Default no. of seconds to remain HIGH is 5

    +
    + +
    +
    + +

    ◆ flightStateCallback()

    + +
    +
    + + + + + + + +
    void flightStateCallback (void * pvParameters)
    +
    + +

    performs flight actions based on the current flight state If the flight state neccessisates an operation, we perfom it here For example if the flight state is apogee, we perfom MAIN_CHUTE ejection

    +
    +
    Parameters
    + + +
    pvParameter- A value that is passed as the paramater to the created task. If pvParameter is set to the address of a variable then the variable must still exist when the created task executes - so it is not valid to pass the address of a stack variable.
    +
    +
    + +
    +
    + +

    ◆ GPSInit()

    + +
    +
    + + + + + + + +
    void GPSInit ()
    +
    + +

    Initialize the GPS connected on Serial2.

    +
    +
    Returns
    1 if init OK, 0 otherwise
    + +
    +
    + +

    ◆ handshakeSerialEvent()

    + +
    +
    + + + + + + + +
    void handshakeSerialEvent ()
    +
    + +

    Receive serial message during handshake.

    +
    + +
    +
    + +

    ◆ initGPIO()

    + +
    +
    + + + + + + + +
    void initGPIO ()
    +
    + +

    Inititialize the GPIOs.

    +
    + +
    +
    + +

    ◆ InitXMODEM()

    + +
    +
    + + + + + + + +
    void InitXMODEM ()
    +
    + +

    Initiate XMODEM protocol by sending a NAK command every 4 seconds until the transmitter returns an ACK signal.

    +

    XMODEM serial function definition

    +
    +
    Parameters
    + + +
    none
    +
    +
    + +
    +
    + +

    ◆ listDir()

    + +
    +
    + + + + + + + + + + + + + + + + +
    void listDir (fs::FS & fs,
    const char * dirname,
    uint8_t levels )
    +
    +

    XMODEM serial function prototypes

    + +
    +
    + +

    ◆ logToMemory()

    + +
    +
    + + + + + + + +
    void logToMemory (void * pvParameter)
    +
    + +

    log the data to the external flash memory

    +
    +
    Parameters
    + + +
    pvParameter- A value that is passed as the paramater to the created task. If pvParameter is set to the address of a variable then the variable must still exist when the created task executes - so it is not valid to pass the address of a stack variable.
    +
    +
    + +
    +
    + +

    ◆ loop()

    + +
    +
    + + + + + + + +
    void loop ()
    +
    + +

    Main loop.

    +
    + +
    +
    + +

    ◆ mainChuteDeploy()

    + +
    +
    + + + + + + + +
    void mainChuteDeploy ()
    +
    + +

    fires the pyro-charge to deploy the main chute Turn on the main chute ejection circuit by running the GPIO HIGH for a preset No. of seconds.
    + Default no. of seconds to remain HIGH is 5

    +
    + +
    +
    + +

    ◆ ParseSerialNumeric()

    + +
    +
    + + + + + + + +
    void ParseSerialNumeric (int value)
    +
    + +

    Parse the received serial command if it is a digit We are only interested in numeric values being sent by the transmitter to us, the receiver.

    +
    + +
    +
    + +

    ◆ readAccelerationTask()

    + +
    +
    + + + + + + + +
    void readAccelerationTask (void * pvParameter)
    +
    + +

    Read acceleration data from the accelerometer.

    +
    +
    Parameters
    + + +
    pvParameters- A value that is passed as the paramater to the created task. If pvParameters is set to the address of a variable then the variable must still exist when the created task executes - so it is not valid to pass the address of a stack variable.
    +
    +
    +
    Returns
    Updates accelerometer data struct on the telemetry queue
    + +
    +
    + +

    ◆ readAltimeterTask()

    + +
    +
    + + + + + + + +
    void readAltimeterTask (void * pvParameters)
    +
    + +

    Read ar pressure data from the barometric sensor onboard.

    +
    +
    Parameters
    + + +
    pvParameters- A value that is passed as the paramater to the created task. If pvParameters is set to the address of a variable then the variable must still exist when the created task executes - so it is not valid to pass the address of a stack variable.
    +
    +
    +
    Returns
    Sends altimeter data to altimeter queue
    + +
    +
    + +

    ◆ readGPSTask()

    + +
    +
    + + + + + + + +
    void readGPSTask (void * pvParameters)
    +
    + +

    Read the GPS location data and altitude and append to telemetry packet for transmission.

    +
    +
    Parameters
    + + +
    pvParameters- A value that is passed as the paramater to the created task. If pvParameters is set to the address of a variable then the variable must still exist when the created task executes - so it is not valid to pass the address of a stack variable.
    +
    +
    + +
    +
    + +

    ◆ receiveTestDataSerialEvent()

    + +
    +
    + + + + + + + +
    void receiveTestDataSerialEvent ()
    +
    + +

    Receive serial message during RECEIVE_TEST_DATA state Data received in this state is the actual test data. It is saved into the test flash memory.

    +
    + +
    +
    + +

    ◆ setup()

    + +
    +
    + + + + + + + +
    void setup ()
    +
    + +

    Setup - perfom initialization of all hardware subsystems, create queues, create queue handles initialize system check table.

    +
    + +
    +
    + +

    ◆ SwitchLEDs()

    + +
    +
    + + + + + + + + + + + +
    void SwitchLEDs (uint8_t red_state,
    uint8_t green_state )
    +
    + +

    Switch the LEDS states.

    +
    + +
    +
    +

    Variable Documentation

    + +

    ◆ acc_data

    + +
    +
    + + + + +
    accel_type_t acc_data
    +
    +

    ///////////////////////// DATA TYPES /////////////////////////

    + +
    +
    + +

    ◆ current_log_time

    + +
    +
    + + + + +
    unsigned long long current_log_time = 0
    +
    +

    What is the processor time right now?

    + +
    +
    + +

    ◆ current_state

    + +
    +
    + + + + +
    uint8_t current_state = FLIGHT_STATE::PRE_FLIGHT_GROUND
    +
    +

    The starting state - we start at PRE_FLIGHT_GROUND state

    + +
    +
    + +

    ◆ current_test_state

    + +
    +
    + + + + +
    uint8_t current_test_state = TEST_STATE::HANDSHAKE
    +
    +

    Define current state the flight computer is in

    + +
    +
    + +

    ◆ file

    + +
    +
    + + + + +
    SerialFlashFile file
    +
    +

    object representing file object for flash memory

    + +
    +
    + +

    ◆ FILE_SIZE_1M

    + +
    +
    + + + + +
    uint32_t FILE_SIZE_1M = 1048576L
    +
    +

    1MB

    + +
    +
    + +

    ◆ FILE_SIZE_4M

    + +
    +
    + + + + +
    uint32_t FILE_SIZE_4M = 4194304L
    +
    +

    4MB

    + +
    +
    + +

    ◆ FILE_SIZE_512K

    + +
    +
    + + + + +
    uint32_t FILE_SIZE_512K = 524288L
    +
    +

    512KB

    + +
    +
    + +

    ◆ filename

    + +
    +
    + + + + +
    char filename[] = "flight.bin"
    +
    +

    data log filename - Filename must be less than 20 chars, including the file extension

    + +
    +
    + +

    ◆ flash_cs_pin

    + +
    +
    + + + + +
    uint8_t flash_cs_pin = 5
    +
    +

    External flash memory chip select pin

    + +
    +
    + +

    ◆ flash_led_pin

    + +
    +
    + + + + +
    uint8_t flash_led_pin = 39
    +
    +

    LED pin connected to indicate flash memory formatting
    +

    + +
    +
    + +

    ◆ green_led

    + +
    +
    + + + + +
    uint8_t green_led = 4
    +
    +

    Green LED pin

    + +
    +
    + +

    ◆ imu

    + +
    +
    + + + + + + + + + + + + + + + + +
    MPU6050 imu(0x68, 16, 1000) (0x68 ,
    16 ,
    1000  )
    +
    +

    ///////////////////////// END OF DATA VARIABLES ///////////////////////// create an MPU6050 object 0x68 is the address of the MPU set gyro to max deg to 1000 deg/sec set accel fs reading to 16g

    + +
    +
    + +

    ◆ log_sample_interval

    + +
    +
    + + + + +
    uint16_t log_sample_interval = 10
    +
    +

    After how long should we sample and log data to flash memory?

    + +
    +
    + +

    ◆ operation_mode

    + +
    +
    + + + + +
    uint8_t operation_mode = 0
    +
    +

    Tells whether software is in safe or flight mode - FLIGHT_MODE=1, SAFE_MODE=0

    + +
    +
    + +

    ◆ previous_log_time

    + +
    +
    + + + + +
    unsigned long long previous_log_time = 0
    +
    +

    The last time we logged data to memory

    + +
    +
    + +

    ◆ recv_data_led

    + +
    +
    + + + + +
    uint8_t recv_data_led = 2
    +
    +

    External flash memory chip select pin

    + +
    +
    + +

    ◆ red_led

    + +
    +
    + + + + +
    uint8_t red_led = 15
    +
    +

    Red LED pin

    + +
    +
    + +

    ◆ SD_CS_PIN

    + +
    +
    + + + + +
    uint8_t SD_CS_PIN = 26
    +
    +

    Chip select pin for SD card

    + +
    +
    + +

    ◆ SET_RUN_MODE_PIN

    + +
    +
    + + + + +
    uint8_t SET_RUN_MODE_PIN = 13
    +
    +

    Pin to set the flight computer to RUN mode

    + +
    +
    + +

    ◆ SET_TEST_MODE_PIN

    + +
    +
    + + + + +
    uint8_t SET_TEST_MODE_PIN = 14
    +
    +

    Pin to set the flight computer to TEST mode

    + +
    +
    + +

    ◆ SOH_recvd_flag

    + +
    +
    + + + + +
    uint8_t SOH_recvd_flag = 0
    +
    +

    Transmitter acknowledged?
    +

    + +
    +
    + +

    ◆ telemetry_data_qHandle

    + +
    +
    + + + + +
    QueueHandle_t telemetry_data_qHandle
    +
    +

    ///////////////////////// END OF PERIPHERALS INIT /////////////////////////

    + +
    +
    + +

    ◆ value

    + +
    +
    + + + + +
    int value = 0
    +
    + +

    Parse the received serial command if it is a string.

    +
    + +
    +
    +
    + + +
    + + diff --git a/states_8h.html b/states_8h.html new file mode 100644 index 0000000..77b23ea --- /dev/null +++ b/states_8h.html @@ -0,0 +1,127 @@ + + + + + + + +N4 Flight Software: n4-flight-software/src/states.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    + +
    states.h File Reference
    +
    +
    + +

    Go to the source code of this file.

    + + + + +

    +Enumerations

    enum  FLIGHT_STATE {
    +  PRE_FLIGHT_GROUND = 0 +, POWERED_FLIGHT +, COASTING +, APOGEE +,
    +  DROGUE_DEPLOY +, DROGUE_DESCENT +, MAIN_DEPLOY +, MAIN_DESCENT +,
    +  POST_FLIGHT_GROUND +
    + }
     
    +

    Detailed Description

    +

    This file describes the flight states

    +
    + + +
    + + diff --git a/states_8h_source.html b/states_8h_source.html new file mode 100644 index 0000000..eaa8406 --- /dev/null +++ b/states_8h_source.html @@ -0,0 +1,119 @@ + + + + + + + +N4 Flight Software: n4-flight-software/src/states.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    states.h
    +
    +
    +Go to the documentation of this file.
    1
    +
    6#ifndef STATES_H
    +
    7#define STATES_H
    +
    8
    +
    9typedef enum {
    +
    10 PRE_FLIGHT_GROUND = 0,
    +
    11 POWERED_FLIGHT,
    +
    12 COASTING,
    +
    13 APOGEE,
    +
    14 DROGUE_DEPLOY,
    +
    15 DROGUE_DESCENT,
    +
    16 MAIN_DEPLOY,
    +
    17 MAIN_DESCENT,
    +
    18 POST_FLIGHT_GROUND
    +
    19} FLIGHT_STATE;
    +
    20
    +
    21#endif
    +
    + + +
    + + diff --git a/structAcceleration__Data-members.html b/structAcceleration__Data-members.html new file mode 100644 index 0000000..08dd10d --- /dev/null +++ b/structAcceleration__Data-members.html @@ -0,0 +1,106 @@ + + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    +
    Acceleration_Data Member List
    +
    +
    + +

    This is the complete list of members for Acceleration_Data, including all inherited members.

    + + + + + + +
    ax (defined in Acceleration_Data)Acceleration_Data
    ay (defined in Acceleration_Data)Acceleration_Data
    az (defined in Acceleration_Data)Acceleration_Data
    pitch (defined in Acceleration_Data)Acceleration_Data
    roll (defined in Acceleration_Data)Acceleration_Data
    + + +
    + + diff --git a/structAcceleration__Data.html b/structAcceleration__Data.html new file mode 100644 index 0000000..a09024f --- /dev/null +++ b/structAcceleration__Data.html @@ -0,0 +1,127 @@ + + + + + + + +N4 Flight Software: Acceleration_Data Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    Acceleration_Data Struct Reference
    +
    +
    + +

    #include <data-types.h>

    + + + + + + + + + + + + +

    +Public Attributes

    +float ax
     
    +float ay
     
    +float az
     
    +float pitch
     
    +float roll
     
    +

    Detailed Description

    +

    ///////////////////////// DATA TYPES /////////////////////////

    +

    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/structAltimeter__Data-members.html b/structAltimeter__Data-members.html new file mode 100644 index 0000000..485ddce --- /dev/null +++ b/structAltimeter__Data-members.html @@ -0,0 +1,106 @@ + + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    +
    Altimeter_Data Member List
    +
    +
    + +

    This is the complete list of members for Altimeter_Data, including all inherited members.

    + + + + + + +
    AGL (defined in Altimeter_Data)Altimeter_Data
    altitude (defined in Altimeter_Data)Altimeter_Data
    pressure (defined in Altimeter_Data)Altimeter_Data
    temperature (defined in Altimeter_Data)Altimeter_Data
    velocity (defined in Altimeter_Data)Altimeter_Data
    + + +
    + + diff --git a/structAltimeter__Data.html b/structAltimeter__Data.html new file mode 100644 index 0000000..8276bbb --- /dev/null +++ b/structAltimeter__Data.html @@ -0,0 +1,123 @@ + + + + + + + +N4 Flight Software: Altimeter_Data Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    Altimeter_Data Struct Reference
    +
    +
    + + + + + + + + + + + + +

    +Public Attributes

    +double pressure
     
    +double altitude
     
    +double velocity
     
    +double temperature
     
    +double AGL
     
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/structFiltered__Data-members.html b/structFiltered__Data-members.html new file mode 100644 index 0000000..602ebd8 --- /dev/null +++ b/structFiltered__Data-members.html @@ -0,0 +1,102 @@ + + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    +
    Filtered_Data Member List
    +
    +
    + +

    This is the complete list of members for Filtered_Data, including all inherited members.

    + + +
    x_acceleration (defined in Filtered_Data)Filtered_Data
    + + +
    + + diff --git a/structFiltered__Data.html b/structFiltered__Data.html new file mode 100644 index 0000000..8712cc8 --- /dev/null +++ b/structFiltered__Data.html @@ -0,0 +1,111 @@ + + + + + + + +N4 Flight Software: Filtered_Data Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    Filtered_Data Struct Reference
    +
    +
    + + + + +

    +Public Attributes

    +float x_acceleration
     
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/structGPS__Data-members.html b/structGPS__Data-members.html new file mode 100644 index 0000000..092852b --- /dev/null +++ b/structGPS__Data-members.html @@ -0,0 +1,105 @@ + + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    +
    GPS_Data Member List
    +
    +
    + +

    This is the complete list of members for GPS_Data, including all inherited members.

    + + + + + +
    gps_altitude (defined in GPS_Data)GPS_Data
    latitude (defined in GPS_Data)GPS_Data
    longitude (defined in GPS_Data)GPS_Data
    time (defined in GPS_Data)GPS_Data
    + + +
    + + diff --git a/structGPS__Data.html b/structGPS__Data.html new file mode 100644 index 0000000..a05dada --- /dev/null +++ b/structGPS__Data.html @@ -0,0 +1,120 @@ + + + + + + + +N4 Flight Software: GPS_Data Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    GPS_Data Struct Reference
    +
    +
    + + + + + + + + + + +

    +Public Attributes

    +double latitude
     
    +double longitude
     
    +uint16_t gps_altitude
     
    +uint time
     
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/structGyroscope__Data-members.html b/structGyroscope__Data-members.html new file mode 100644 index 0000000..7d1a546 --- /dev/null +++ b/structGyroscope__Data-members.html @@ -0,0 +1,104 @@ + + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    +
    Gyroscope_Data Member List
    +
    +
    + +

    This is the complete list of members for Gyroscope_Data, including all inherited members.

    + + + + +
    gx (defined in Gyroscope_Data)Gyroscope_Data
    gy (defined in Gyroscope_Data)Gyroscope_Data
    gz (defined in Gyroscope_Data)Gyroscope_Data
    + + +
    + + diff --git a/structGyroscope__Data.html b/structGyroscope__Data.html new file mode 100644 index 0000000..bab75ea --- /dev/null +++ b/structGyroscope__Data.html @@ -0,0 +1,117 @@ + + + + + + + +N4 Flight Software: Gyroscope_Data Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    Gyroscope_Data Struct Reference
    +
    +
    + + + + + + + + +

    +Public Attributes

    +double gx
     
    +double gy
     
    +double gz
     
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/structTelemetry__Data-members.html b/structTelemetry__Data-members.html new file mode 100644 index 0000000..f42bf82 --- /dev/null +++ b/structTelemetry__Data-members.html @@ -0,0 +1,108 @@ + + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    +
    Telemetry_Data Member List
    +
    +
    + +

    This is the complete list of members for Telemetry_Data, including all inherited members.

    + + + + + + + + +
    acc_data (defined in Telemetry_Data)Telemetry_Data
    alt_data (defined in Telemetry_Data)Telemetry_Data
    gps_data (defined in Telemetry_Data)Telemetry_Data
    gyro_data (defined in Telemetry_Data)Telemetry_Data
    operation_mode (defined in Telemetry_Data)Telemetry_Data
    record_number (defined in Telemetry_Data)Telemetry_Data
    state (defined in Telemetry_Data)Telemetry_Data
    + + +
    + + diff --git a/structTelemetry__Data.html b/structTelemetry__Data.html new file mode 100644 index 0000000..6af20b4 --- /dev/null +++ b/structTelemetry__Data.html @@ -0,0 +1,129 @@ + + + + + + + +N4 Flight Software: Telemetry_Data Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    Telemetry_Data Struct Reference
    +
    +
    + + + + + + + + + + + + + + + + +

    +Public Attributes

    +uint32_t record_number
     
    +uint8_t operation_mode
     
    +uint8_t state
     
    +accel_type_t acc_data
     
    +gyro_type_t gyro_data
     
    +gps_type_t gps_data
     
    +altimeter_type_t alt_data
     
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/struct_acceleration___data-members.html b/struct_acceleration___data-members.html new file mode 100644 index 0000000..24ee2ff --- /dev/null +++ b/struct_acceleration___data-members.html @@ -0,0 +1,106 @@ + + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    +
    Acceleration_Data Member List
    +
    +
    + +

    This is the complete list of members for Acceleration_Data, including all inherited members.

    + + + + + + +
    ax (defined in Acceleration_Data)Acceleration_Data
    ay (defined in Acceleration_Data)Acceleration_Data
    az (defined in Acceleration_Data)Acceleration_Data
    pitch (defined in Acceleration_Data)Acceleration_Data
    roll (defined in Acceleration_Data)Acceleration_Data
    + + +
    + + diff --git a/struct_acceleration___data.html b/struct_acceleration___data.html new file mode 100644 index 0000000..f46f966 --- /dev/null +++ b/struct_acceleration___data.html @@ -0,0 +1,127 @@ + + + + + + + +N4 Flight Software: Acceleration_Data Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    Acceleration_Data Struct Reference
    +
    +
    + +

    #include <data-types.h>

    + + + + + + + + + + + + +

    +Public Attributes

    +float ax
     
    +float ay
     
    +float az
     
    +float pitch
     
    +float roll
     
    +

    Detailed Description

    +

    ///////////////////////// DATA TYPES /////////////////////////

    +

    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/struct_altimeter___data-members.html b/struct_altimeter___data-members.html new file mode 100644 index 0000000..fd5ea52 --- /dev/null +++ b/struct_altimeter___data-members.html @@ -0,0 +1,106 @@ + + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    +
    Altimeter_Data Member List
    +
    +
    + +

    This is the complete list of members for Altimeter_Data, including all inherited members.

    + + + + + + +
    AGL (defined in Altimeter_Data)Altimeter_Data
    altitude (defined in Altimeter_Data)Altimeter_Data
    pressure (defined in Altimeter_Data)Altimeter_Data
    temperature (defined in Altimeter_Data)Altimeter_Data
    velocity (defined in Altimeter_Data)Altimeter_Data
    + + +
    + + diff --git a/struct_altimeter___data.html b/struct_altimeter___data.html new file mode 100644 index 0000000..7e05d26 --- /dev/null +++ b/struct_altimeter___data.html @@ -0,0 +1,123 @@ + + + + + + + +N4 Flight Software: Altimeter_Data Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    Altimeter_Data Struct Reference
    +
    +
    + + + + + + + + + + + + +

    +Public Attributes

    +double pressure
     
    +double altitude
     
    +double velocity
     
    +double temperature
     
    +double AGL
     
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/struct_filtered___data-members.html b/struct_filtered___data-members.html new file mode 100644 index 0000000..4eae6bd --- /dev/null +++ b/struct_filtered___data-members.html @@ -0,0 +1,102 @@ + + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    +
    Filtered_Data Member List
    +
    +
    + +

    This is the complete list of members for Filtered_Data, including all inherited members.

    + + +
    x_acceleration (defined in Filtered_Data)Filtered_Data
    + + +
    + + diff --git a/struct_filtered___data.html b/struct_filtered___data.html new file mode 100644 index 0000000..fccadf9 --- /dev/null +++ b/struct_filtered___data.html @@ -0,0 +1,111 @@ + + + + + + + +N4 Flight Software: Filtered_Data Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    Filtered_Data Struct Reference
    +
    +
    + + + + +

    +Public Attributes

    +float x_acceleration
     
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/struct_g_p_s___data-members.html b/struct_g_p_s___data-members.html new file mode 100644 index 0000000..85a2cda --- /dev/null +++ b/struct_g_p_s___data-members.html @@ -0,0 +1,105 @@ + + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    +
    GPS_Data Member List
    +
    +
    + +

    This is the complete list of members for GPS_Data, including all inherited members.

    + + + + + +
    gps_altitude (defined in GPS_Data)GPS_Data
    latitude (defined in GPS_Data)GPS_Data
    longitude (defined in GPS_Data)GPS_Data
    time (defined in GPS_Data)GPS_Data
    + + +
    + + diff --git a/struct_g_p_s___data.html b/struct_g_p_s___data.html new file mode 100644 index 0000000..ded885f --- /dev/null +++ b/struct_g_p_s___data.html @@ -0,0 +1,120 @@ + + + + + + + +N4 Flight Software: GPS_Data Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    GPS_Data Struct Reference
    +
    +
    + + + + + + + + + + +

    +Public Attributes

    +double latitude
     
    +double longitude
     
    +uint16_t gps_altitude
     
    +uint time
     
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/struct_gyroscope___data-members.html b/struct_gyroscope___data-members.html new file mode 100644 index 0000000..18b7bf5 --- /dev/null +++ b/struct_gyroscope___data-members.html @@ -0,0 +1,104 @@ + + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    +
    Gyroscope_Data Member List
    +
    +
    + +

    This is the complete list of members for Gyroscope_Data, including all inherited members.

    + + + + +
    gx (defined in Gyroscope_Data)Gyroscope_Data
    gy (defined in Gyroscope_Data)Gyroscope_Data
    gz (defined in Gyroscope_Data)Gyroscope_Data
    + + +
    + + diff --git a/struct_gyroscope___data.html b/struct_gyroscope___data.html new file mode 100644 index 0000000..9050597 --- /dev/null +++ b/struct_gyroscope___data.html @@ -0,0 +1,117 @@ + + + + + + + +N4 Flight Software: Gyroscope_Data Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    Gyroscope_Data Struct Reference
    +
    +
    + + + + + + + + +

    +Public Attributes

    +double gx
     
    +double gy
     
    +double gz
     
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/struct_telemetry___data-members.html b/struct_telemetry___data-members.html new file mode 100644 index 0000000..abdbab6 --- /dev/null +++ b/struct_telemetry___data-members.html @@ -0,0 +1,108 @@ + + + + + + + +N4 Flight Software: Member List + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    +
    Telemetry_Data Member List
    +
    +
    + +

    This is the complete list of members for Telemetry_Data, including all inherited members.

    + + + + + + + + +
    acc_data (defined in Telemetry_Data)Telemetry_Data
    alt_data (defined in Telemetry_Data)Telemetry_Data
    gps_data (defined in Telemetry_Data)Telemetry_Data
    gyro_data (defined in Telemetry_Data)Telemetry_Data
    operation_mode (defined in Telemetry_Data)Telemetry_Data
    record_number (defined in Telemetry_Data)Telemetry_Data
    state (defined in Telemetry_Data)Telemetry_Data
    + + +
    + + diff --git a/struct_telemetry___data.html b/struct_telemetry___data.html new file mode 100644 index 0000000..5884116 --- /dev/null +++ b/struct_telemetry___data.html @@ -0,0 +1,129 @@ + + + + + + + +N4 Flight Software: Telemetry_Data Struct Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + +
    Telemetry_Data Struct Reference
    +
    +
    + + + + + + + + + + + + + + + + +

    +Public Attributes

    +uint32_t record_number
     
    +uint8_t operation_mode
     
    +uint8_t state
     
    +accel_type_t acc_data
     
    +gyro_type_t gyro_data
     
    +gps_type_t gps_data
     
    +altimeter_type_t alt_data
     
    +
    The documentation for this struct was generated from the following file: +
    + + +
    + + diff --git a/sync_off.png b/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/sync_on.png b/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/tab_a.png b/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/tab_ad.png b/tab_ad.png new file mode 100644 index 0000000000000000000000000000000000000000..e34850acfc24be58da6d2fd1ccc6b29cc84fe34d GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QhuH;jv*C{Z|5d*H3V=pKi{In zd2jxLclDRPylmD}^l7{QOtL{vUjO{-WqItb5sQp2h-99b8^^Scr-=2mblCdZuUm?4 jzOJvgvt3{(cjKLW5(A@0qPS@<&}0TrS3j3^P6y&q2{!U5bk+Tso_B!YCpDh>v z{CM*1U8YvQRyBUHt^Ju0W_sq-?;9@_4equ-bavTs=gk796zopr0EBT&m;e9( literal 0 HcmV?d00001 diff --git a/tab_s.png b/tab_s.png new file mode 100644 index 0000000000000000000000000000000000000000..ab478c95b67371d700a20869f7de1ddd73522d50 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QuUrLjv*C{Z|^p8HaRdjTwH7) zC?wLlL}}I{)n%R&r+1}IGmDnq;&J#%V6)9VsYhS`O^BVBQlxOUep0c$RENLq#g8A$ z)z7%K_bI&n@J+X_=x}fJoEKed-$<>=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/tab_sd.png b/tab_sd.png new file mode 100644 index 0000000000000000000000000000000000000000..757a565ced4730f85c833fb2547d8e199ae68f19 GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!Qq7(&jv*C{Z|_!fH5o7*c=%9% zcILh!EA=pAQKdx-Cdiev=v{eg{8Ht<{e8_NAN~b=)%W>-WDCE0PyDHGemi$BoXwcK z{>e9^za6*c1ilttWw&V+U;WCPlV9{LdC~Ey%_H(qj`xgfES(4Yz5jSTZfCt`4E$0YRsR*S^mTCR^;V&sxC8{l_Cp7w8-YPgg&ebxsLQ00$vXK>z>% literal 0 HcmV?d00001 diff --git a/tabs.css b/tabs.css new file mode 100644 index 0000000..fe4854a --- /dev/null +++ b/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} \ No newline at end of file diff --git a/test_2state__machine_8cpp.html b/test_2state__machine_8cpp.html new file mode 100644 index 0000000..77a14ad --- /dev/null +++ b/test_2state__machine_8cpp.html @@ -0,0 +1,110 @@ + + + + + + + +N4 Flight Software: n4-flight-software/test/state_machine.cpp File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    state_machine.cpp File Reference
    +
    +
    +
    #include <Arduino.h>
    +#include "state_machine.h"
    +#include "defs.h"
    +

    Detailed Description

    +
    Author
    Edwin Mwiti
    +
    Version
    0.1
    +
    Date
    2023-03-28
    + +
    + + +
    + + diff --git a/test_2state__machine_8h_source.html b/test_2state__machine_8h_source.html new file mode 100644 index 0000000..93fdd80 --- /dev/null +++ b/test_2state__machine_8h_source.html @@ -0,0 +1,121 @@ + + + + + + + +N4 Flight Software: n4-flight-software/test/state_machine.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    state_machine.h
    +
    +
    +
    1#ifndef STATE_MACHINE_H
    +
    2#define STATE_MACHINE_H
    +
    3
    +
    4class State_machine{
    +
    5 private:
    +
    6
    +
    7 public:
    + +
    9 int pre_flight();
    +
    10 int powered_flight();
    +
    11 int coasting();
    +
    12 int apogee();
    +
    13 int ballistic_descent();
    +
    14 int parachute_deploy();
    +
    15 int post_flight();
    +
    16};
    +
    17
    +
    18#endif
    +
    Definition state_machine.h:6
    +
    + + +
    + + diff --git a/test__class_8h_source.html b/test__class_8h_source.html new file mode 100644 index 0000000..8f6151f --- /dev/null +++ b/test__class_8h_source.html @@ -0,0 +1,115 @@ + + + + + + + +N4 Flight Software: n4-flight-software/test/test_class.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    N4 Flight Software +
    +
    Flight software used on N4 flight computers for the Nakuja Project
    +
    +
    + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + + +
    +
    +
    +
    test_class.h
    +
    +
    +
    +
    1class Test{
    +
    2 public:
    +
    3 int y;
    +
    4 int foo();
    +
    5};
    +
    +
    6
    +
    7int Test::foo(){
    +
    8 int x = 9;
    +
    9 return x;
    +
    10}
    +
    Definition test_class.h:1
    +
    + + +
    + +