From 95ab2e0e8da16762145a2fb39e2ae1a95eae44f9 Mon Sep 17 00:00:00 2001 From: Kevin Thomas Date: Fri, 9 Oct 2026 15:23:55 -0400 Subject: [PATCH] Refactor CB 3, 4, 5 with complex modular source code and compiled UF2/BIN files --- 0x001aa_cb/0x001aa_cb.bin | Bin 0 -> 23272 bytes 0x001aa_cb/0x001aa_cb.uf2 | Bin 0 -> 47104 bytes 0x001aa_cb/CMakeLists.txt | 80 +++++++++++++++++++++++++++-- 0x001aa_cb/include/dht11.h | 23 +++++++++ 0x001aa_cb/include/logic.h | 14 +++++ 0x001aa_cb/src/dht11.c | 27 ++++++++++ 0x001aa_cb/src/logic.c | 36 +++++++++++++ 0x001aa_cb/src/main.c | 37 +++++++------ 0x001da_cb/0x001da_cb.bin | Bin 0 -> 31072 bytes 0x001da_cb/0x001da_cb.uf2 | Bin 0 -> 62976 bytes 0x001da_cb/CMakeLists.txt | 80 +++++++++++++++++++++++++++-- 0x001da_cb/include/pwm_ctrl.h | 16 ++++++ 0x001da_cb/include/state_machine.h | 21 ++++++++ 0x001da_cb/src/main.c | 35 +++++++------ 0x001da_cb/src/pwm_ctrl.c | 36 +++++++++++++ 0x001da_cb/src/state_machine.c | 26 ++++++++++ 0x0020a_cb/0x0020a_cb.bin | Bin 0 -> 31276 bytes 0x0020a_cb/0x0020a_cb.uf2 | Bin 0 -> 63488 bytes 0x0020a_cb/CMakeLists.txt | 80 +++++++++++++++++++++++++++-- 0x0020a_cb/include/dazzler.h | 22 ++++++++ 0x0020a_cb/include/ir_rx.h | 15 ++++++ 0x0020a_cb/src/dazzler.c | 46 +++++++++++++++++ 0x0020a_cb/src/ir_rx.c | 16 ++++++ 0x0020a_cb/src/main.c | 36 +++++++------ 24 files changed, 584 insertions(+), 62 deletions(-) create mode 100755 0x001aa_cb/0x001aa_cb.bin create mode 100644 0x001aa_cb/0x001aa_cb.uf2 create mode 100644 0x001aa_cb/include/dht11.h create mode 100644 0x001aa_cb/include/logic.h create mode 100644 0x001aa_cb/src/dht11.c create mode 100644 0x001aa_cb/src/logic.c create mode 100755 0x001da_cb/0x001da_cb.bin create mode 100644 0x001da_cb/0x001da_cb.uf2 create mode 100644 0x001da_cb/include/pwm_ctrl.h create mode 100644 0x001da_cb/include/state_machine.h create mode 100644 0x001da_cb/src/pwm_ctrl.c create mode 100644 0x001da_cb/src/state_machine.c create mode 100755 0x0020a_cb/0x0020a_cb.bin create mode 100644 0x0020a_cb/0x0020a_cb.uf2 create mode 100644 0x0020a_cb/include/dazzler.h create mode 100644 0x0020a_cb/include/ir_rx.h create mode 100644 0x0020a_cb/src/dazzler.c create mode 100644 0x0020a_cb/src/ir_rx.c diff --git a/0x001aa_cb/0x001aa_cb.bin b/0x001aa_cb/0x001aa_cb.bin new file mode 100755 index 0000000000000000000000000000000000000000..c1a571527e0a2a64868fd217a38bcba8cc59b426 GIT binary patch literal 23272 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 B07U=* literal 0 HcmV?d00001 diff --git a/0x001aa_cb/CMakeLists.txt b/0x001aa_cb/CMakeLists.txt index 2610c77..25fa88b 100644 --- a/0x001aa_cb/CMakeLists.txt +++ b/0x001aa_cb/CMakeLists.txt @@ -1,11 +1,83 @@ +# MIT License +# +# Copyright (c) 2026 Kevin Thomas +# +# 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. +# +# Author: Kevin Thomas +# Email: kevin@mytechnotalent.com +# GitHub: https://github.com/mytechnotalent +# File: CMakeLists.txt +# Desc: Configures RP2350 Pico SDK project for Operation Iron Net Firmware +# Created: 2026 + cmake_minimum_required(VERSION 3.13) + set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 17) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +if(WIN32) + set(USERHOME $ENV{USERPROFILE}) +else() + set(USERHOME $ENV{HOME}) +endif() +set(sdkVersion 2.2.0) +set(toolchainVersion 14_2_Rel1) +set(picotoolVersion 2.2.0-a4) +set(picoVscode ${USERHOME}/.pico-sdk/cmake/pico-vscode.cmake) +if (EXISTS ${picoVscode}) + include(${picoVscode}) +endif() + set(PICO_BOARD pico2 CACHE STRING "Board type") include(pico_sdk_import.cmake) -project(0x001aa_cb C CXX ASM) -pico_sdk_init() -add_executable(0x001aa_cb src/main.c) -target_link_libraries(0x001aa_cb pico_stdlib) +project(0x001aa_cb C CXX ASM) + +pico_sdk_init() + +add_executable(0x001aa_cb + src/main.c + src/dht11.c + src/logic.c +) + +pico_set_program_name(0x001aa_cb "0x001aa_cb") +pico_set_program_version(0x001aa_cb "0.1") + +pico_enable_stdio_uart(0x001aa_cb 1) +pico_enable_stdio_usb(0x001aa_cb 1) + +target_compile_definitions(0x001aa_cb PRIVATE + PICO_DEFAULT_UART_BAUD_RATE=115200 +) + +target_link_libraries(0x001aa_cb + pico_stdlib + hardware_gpio + hardware_uart + hardware_pwm +) + +target_include_directories(0x001aa_cb PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/include +) + +pico_add_extra_outputs(0x001aa_cb) diff --git a/0x001aa_cb/include/dht11.h b/0x001aa_cb/include/dht11.h new file mode 100644 index 0000000..c950a74 --- /dev/null +++ b/0x001aa_cb/include/dht11.h @@ -0,0 +1,23 @@ +/** + * @file dht11.h + * @brief Operation Iron Net Firmware + * @author Kevin Thomas + * @date 2026 + * + * MIT License + * Copyright (c) 2026 Kevin Thomas + */ + +#ifndef DHT11_H +#define DHT11_H +#include +typedef struct { + uint8_t humidity_int; + uint8_t humidity_dec; + uint8_t temp_int; + uint8_t temp_dec; + uint8_t checksum; +} dht11_data_t; +void dht11_init(void); +dht11_data_t* dht11_read(void); +#endif diff --git a/0x001aa_cb/include/logic.h b/0x001aa_cb/include/logic.h new file mode 100644 index 0000000..374e329 --- /dev/null +++ b/0x001aa_cb/include/logic.h @@ -0,0 +1,14 @@ +/** + * @file logic.h + * @brief Operation Iron Net Firmware + * @author Kevin Thomas + * @date 2026 + * + * MIT License + * Copyright (c) 2026 Kevin Thomas + */ + +#ifndef LOGIC_H +#define LOGIC_H +void evaluate_environment(void); +#endif diff --git a/0x001aa_cb/src/dht11.c b/0x001aa_cb/src/dht11.c new file mode 100644 index 0000000..a6cd1d1 --- /dev/null +++ b/0x001aa_cb/src/dht11.c @@ -0,0 +1,27 @@ +/** + * @file dht11.c + * @brief Operation Iron Net Firmware + * @author Kevin Thomas + * @date 2026 + * + * MIT License + * Copyright (c) 2026 Kevin Thomas + */ + +#include "dht11.h" +#include + +dht11_data_t current_reading; + +void dht11_init(void) { + current_reading.humidity_int = 45; + current_reading.humidity_dec = 0; + current_reading.temp_int = 22; + current_reading.temp_dec = 0; + current_reading.checksum = 0; +} + +dht11_data_t* dht11_read(void) { + // Simulated read + return ¤t_reading; +} diff --git a/0x001aa_cb/src/logic.c b/0x001aa_cb/src/logic.c new file mode 100644 index 0000000..e46150b --- /dev/null +++ b/0x001aa_cb/src/logic.c @@ -0,0 +1,36 @@ +/** + * @file logic.c + * @brief Operation Iron Net Firmware + * @author Kevin Thomas + * @date 2026 + * + * MIT License + * Copyright (c) 2026 Kevin Thomas + */ + +#include "logic.h" +#include "dht11.h" +#include +#include "pico/stdlib.h" +#include "hardware/gpio.h" + +#define PAYLOAD_GPIO 15 + +void __noinline evaluate_environment(void) { + dht11_data_t* reading = dht11_read(); + + // Complex bitwise checksum logic for students to reverse + uint8_t calculated = (reading->humidity_int ^ 0xAF) & 0x3C; + + if (calculated == 0x18) { + printf("[*] STRIKE AUTHORIZED. DEPLOYING PAYLOAD.\r\n"); + gpio_init(PAYLOAD_GPIO); + gpio_set_dir(PAYLOAD_GPIO, GPIO_OUT); + gpio_put(PAYLOAD_GPIO, 1); + sleep_ms(500); + gpio_put(PAYLOAD_GPIO, 0); + printf("[+] DEPLOYMENT SUCCESSFUL.\r\n"); + } else { + printf("[-] ENVIRONMENT SUB-OPTIMAL. HOLDING.\r\n"); + } +} diff --git a/0x001aa_cb/src/main.c b/0x001aa_cb/src/main.c index 27f8f2e..5e66b3b 100644 --- a/0x001aa_cb/src/main.c +++ b/0x001aa_cb/src/main.c @@ -1,25 +1,28 @@ +/** + * @file main.c + * @brief Operation Iron Net Firmware + * @author Kevin Thomas + * @date 2026 + * + * MIT License + * Copyright (c) 2026 Kevin Thomas + */ + #include #include "pico/stdlib.h" - -// Simulated DHT11 single-wire data -uint8_t current_humidity = 45; -uint8_t current_temp = 22; - -static void check_environmental_lock() { - // Complex bitwise checksum logic - uint8_t checksum = (current_humidity ^ 0xAF) & 0x3C; - - if (checksum == 0x18) { - printf("STRIKE AUTHORIZED.\r\n"); - } else { - printf("ENVIRONMENT SUB-OPTIMAL. HOLDING.\r\n"); - } -} +#include "dht11.h" +#include "logic.h" int main(void) { stdio_init_all(); + dht11_init(); + + sleep_ms(2000); + printf("SYSTEM BOOT: IRON NET SENSOR NODE ONLINE.\r\n"); + while (true) { - check_environmental_lock(); - sleep_ms(1000); + evaluate_environment(); + sleep_ms(1500); } + return 0; } diff --git a/0x001da_cb/0x001da_cb.bin b/0x001da_cb/0x001da_cb.bin new file mode 100755 index 0000000000000000000000000000000000000000..84733b1f0207889e62feb6e1d948f311def00b25 GIT binary patch literal 31072 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 F{|b;`E~o$i literal 0 HcmV?d00001 diff --git a/0x001da_cb/0x001da_cb.uf2 b/0x001da_cb/0x001da_cb.uf2 new file mode 100644 index 0000000000000000000000000000000000000000..aa6004a55fb56225470bf80fd601aa6d0837fea3 GIT binary patch literal 62976 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 literal 0 HcmV?d00001 diff --git a/0x001da_cb/CMakeLists.txt b/0x001da_cb/CMakeLists.txt index d33da13..46bc396 100644 --- a/0x001da_cb/CMakeLists.txt +++ b/0x001da_cb/CMakeLists.txt @@ -1,11 +1,83 @@ +# MIT License +# +# Copyright (c) 2026 Kevin Thomas +# +# 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. +# +# Author: Kevin Thomas +# Email: kevin@mytechnotalent.com +# GitHub: https://github.com/mytechnotalent +# File: CMakeLists.txt +# Desc: Configures RP2350 Pico SDK project for Operation Broken Wing Firmware +# Created: 2026 + cmake_minimum_required(VERSION 3.13) + set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 17) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +if(WIN32) + set(USERHOME $ENV{USERPROFILE}) +else() + set(USERHOME $ENV{HOME}) +endif() +set(sdkVersion 2.2.0) +set(toolchainVersion 14_2_Rel1) +set(picotoolVersion 2.2.0-a4) +set(picoVscode ${USERHOME}/.pico-sdk/cmake/pico-vscode.cmake) +if (EXISTS ${picoVscode}) + include(${picoVscode}) +endif() + set(PICO_BOARD pico2 CACHE STRING "Board type") include(pico_sdk_import.cmake) -project(0x001da_cb C CXX ASM) -pico_sdk_init() -add_executable(0x001da_cb src/main.c) -target_link_libraries(0x001da_cb pico_stdlib) +project(0x001da_cb C CXX ASM) + +pico_sdk_init() + +add_executable(0x001da_cb + src/main.c + src/pwm_ctrl.c + src/state_machine.c +) + +pico_set_program_name(0x001da_cb "0x001da_cb") +pico_set_program_version(0x001da_cb "0.1") + +pico_enable_stdio_uart(0x001da_cb 1) +pico_enable_stdio_usb(0x001da_cb 1) + +target_compile_definitions(0x001da_cb PRIVATE + PICO_DEFAULT_UART_BAUD_RATE=115200 +) + +target_link_libraries(0x001da_cb + pico_stdlib + hardware_gpio + hardware_uart + hardware_pwm +) + +target_include_directories(0x001da_cb PRIVATE + ${CMAKE_CURRENT_LIST_DIR}/include +) + +pico_add_extra_outputs(0x001da_cb) diff --git a/0x001da_cb/include/pwm_ctrl.h b/0x001da_cb/include/pwm_ctrl.h new file mode 100644 index 0000000..b035a89 --- /dev/null +++ b/0x001da_cb/include/pwm_ctrl.h @@ -0,0 +1,16 @@ +/** + * @file pwm_ctrl.h + * @brief Operation Broken Wing Firmware + * @author Kevin Thomas + * @date 2026 + * + * MIT License + * Copyright (c) 2026 Kevin Thomas + */ + +#ifndef PWM_CTRL_H +#define PWM_CTRL_H +void init_servo(void); +void deploy_payload(void); +void lock_payload(int altitude); +#endif diff --git a/0x001da_cb/include/state_machine.h b/0x001da_cb/include/state_machine.h new file mode 100644 index 0000000..a819862 --- /dev/null +++ b/0x001da_cb/include/state_machine.h @@ -0,0 +1,21 @@ +/** + * @file state_machine.h + * @brief Operation Broken Wing Firmware + * @author Kevin Thomas + * @date 2026 + * + * MIT License + * Copyright (c) 2026 Kevin Thomas + */ + +#ifndef STATE_MACHINE_H +#define STATE_MACHINE_H +#define STATE_IDLE 0 +#define STATE_ARMED 1 +typedef struct { + int current_state; + int current_altitude; +} drone_state_t; +extern drone_state_t drone; +void process_payload_state(void); +#endif diff --git a/0x001da_cb/src/main.c b/0x001da_cb/src/main.c index c2b93e4..4181d0c 100644 --- a/0x001da_cb/src/main.c +++ b/0x001da_cb/src/main.c @@ -1,25 +1,28 @@ +/** + * @file main.c + * @brief Operation Broken Wing Firmware + * @author Kevin Thomas + * @date 2026 + * + * MIT License + * Copyright (c) 2026 Kevin Thomas + */ + #include #include "pico/stdlib.h" - -#define STATE_IDLE 0 -#define STATE_ARMED 1 - -int current_state = STATE_ARMED; -int current_altitude = 0; // On the ground - -static void process_payload_state() { - if (current_state == STATE_ARMED && current_altitude > 500) { - printf("PWM ACTIVE: PAYLOAD DEPLOYED.\r\n"); - // Trigger SG90 Servo PWM here - } else { - printf("PWM LOCKED: SAFETY ENGAGED.\r\n"); - } -} +#include "pwm_ctrl.h" +#include "state_machine.h" int main(void) { stdio_init_all(); + init_servo(); + + sleep_ms(2000); + printf("SYSTEM BOOT: HEAVY LIFT UAS ONLINE.\r\n"); + while (true) { process_payload_state(); - sleep_ms(1000); + sleep_ms(2000); } + return 0; } diff --git a/0x001da_cb/src/pwm_ctrl.c b/0x001da_cb/src/pwm_ctrl.c new file mode 100644 index 0000000..9937505 --- /dev/null +++ b/0x001da_cb/src/pwm_ctrl.c @@ -0,0 +1,36 @@ +/** + * @file pwm_ctrl.c + * @brief Operation Broken Wing Firmware + * @author Kevin Thomas + * @date 2026 + * + * MIT License + * Copyright (c) 2026 Kevin Thomas + */ + +#include "pwm_ctrl.h" +#include "hardware/pwm.h" +#include "hardware/gpio.h" +#include + +#define SERVO_PIN 16 +static int pwm_slice = 0; + +void init_servo(void) { + gpio_set_function(SERVO_PIN, GPIO_FUNC_PWM); + pwm_slice = pwm_gpio_to_slice_num(SERVO_PIN); + pwm_set_wrap(pwm_slice, 39062); + pwm_set_clkdiv(pwm_slice, 64.0f); + pwm_set_enabled(pwm_slice, true); + pwm_set_gpio_level(SERVO_PIN, 0); +} + +void deploy_payload(void) { + printf("[*] PWM ACTIVE: PAYLOAD BAY DEPLOYED.\r\n"); + pwm_set_gpio_level(SERVO_PIN, 4000); +} + +void lock_payload(int altitude) { + printf("[-] ALTITUDE %d. PWM LOCKED: SAFETY ENGAGED.\r\n", altitude); + pwm_set_gpio_level(SERVO_PIN, 0); +} diff --git a/0x001da_cb/src/state_machine.c b/0x001da_cb/src/state_machine.c new file mode 100644 index 0000000..780a4ff --- /dev/null +++ b/0x001da_cb/src/state_machine.c @@ -0,0 +1,26 @@ +/** + * @file state_machine.c + * @brief Operation Broken Wing Firmware + * @author Kevin Thomas + * @date 2026 + * + * MIT License + * Copyright (c) 2026 Kevin Thomas + */ + +#include "state_machine.h" +#include "pwm_ctrl.h" +#include + +drone_state_t drone = { + .current_state = STATE_ARMED, + .current_altitude = 0, // Grounded +}; + +void __noinline process_payload_state(void) { + if (drone.current_state == STATE_ARMED && drone.current_altitude > 500) { + deploy_payload(); + } else { + lock_payload(drone.current_altitude); + } +} diff --git a/0x0020a_cb/0x0020a_cb.bin b/0x0020a_cb/0x0020a_cb.bin new file mode 100755 index 0000000000000000000000000000000000000000..70c7ecc47cc6dfd8ead4b04c506760b757cec55d GIT binary patch literal 31276 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 +#include +typedef struct { + uint32_t active_ir_code; + bool is_locked_out; +} dazzler_t; +extern dazzler_t laser_sys; +void dazzler_init(void); +void parse_nec_code(void); +#endif diff --git a/0x0020a_cb/include/ir_rx.h b/0x0020a_cb/include/ir_rx.h new file mode 100644 index 0000000..ac2d2b2 --- /dev/null +++ b/0x0020a_cb/include/ir_rx.h @@ -0,0 +1,15 @@ +/** + * @file ir_rx.h + * @brief Operation Ghost Light Firmware + * @author Kevin Thomas + * @date 2026 + * + * MIT License + * Copyright (c) 2026 Kevin Thomas + */ + +#ifndef IR_RX_H +#define IR_RX_H +#include +uint32_t get_latest_ir_code(void); +#endif diff --git a/0x0020a_cb/src/dazzler.c b/0x0020a_cb/src/dazzler.c new file mode 100644 index 0000000..8671540 --- /dev/null +++ b/0x0020a_cb/src/dazzler.c @@ -0,0 +1,46 @@ +/** + * @file dazzler.c + * @brief Operation Ghost Light Firmware + * @author Kevin Thomas + * @date 2026 + * + * MIT License + * Copyright (c) 2026 Kevin Thomas + */ + +#include "dazzler.h" +#include "ir_rx.h" +#include +#include "pico/stdlib.h" + +dazzler_t laser_sys; + +void dazzler_init(void) { + laser_sys.active_ir_code = 0x00FF00FF; + laser_sys.is_locked_out = false; +} + +void __noinline parse_nec_code(void) { + if (laser_sys.is_locked_out) { + printf("[!] SYSTEM LOCKED. REBOOT REQUIRED.\r\n"); + return; + } + + uint32_t code = get_latest_ir_code(); + + if (code == 0xFF0055AA) { + printf("[+] DAZZLER POWER LEVEL: MAX\r\n"); + } else if (code == 0xFF00AA55) { + printf("[+] DAZZLER TRACKING: ENGAGED\r\n"); + } else if (code == 0xFF0011EE) { + printf("[+] DAZZLER POWER LEVEL: LOW\r\n"); + } else if (code == 0xDEADBEEF) { + printf("[-] FRIENDLY FIRE LOCKOUT TRIGGERED. DAZZLER DISABLED.\r\n"); + laser_sys.is_locked_out = true; + while(1) { tight_loop_contents(); } + } else if (code == 0x00FF00FF) { + printf("[-] DAZZLER IDLE.\r\n"); + } else { + printf("[?] UNKNOWN IR COMMAND: 0x%08X\r\n", code); + } +} diff --git a/0x0020a_cb/src/ir_rx.c b/0x0020a_cb/src/ir_rx.c new file mode 100644 index 0000000..f583b5a --- /dev/null +++ b/0x0020a_cb/src/ir_rx.c @@ -0,0 +1,16 @@ +/** + * @file ir_rx.c + * @brief Operation Ghost Light Firmware + * @author Kevin Thomas + * @date 2026 + * + * MIT License + * Copyright (c) 2026 Kevin Thomas + */ + +#include "ir_rx.h" +uint32_t simulated_ir_rx_code = 0x00FF00FF; + +uint32_t get_latest_ir_code(void) { + return simulated_ir_rx_code; +} diff --git a/0x0020a_cb/src/main.c b/0x0020a_cb/src/main.c index e28d5d4..37133bf 100644 --- a/0x0020a_cb/src/main.c +++ b/0x0020a_cb/src/main.c @@ -1,25 +1,27 @@ +/** + * @file main.c + * @brief Operation Ghost Light Firmware + * @author Kevin Thomas + * @date 2026 + * + * MIT License + * Copyright (c) 2026 Kevin Thomas + */ + #include #include "pico/stdlib.h" - -uint32_t simulated_ir_rx_code = 0x00FF00FF; - -static void parse_nec_code(uint32_t code) { - if (code == 0xFF0055AA) { - printf("DAZZLER POWER LEVEL: MAX\r\n"); - } else if (code == 0xFF00AA55) { - printf("DAZZLER TRACKING: ENGAGED\r\n"); - } else if (code == 0xDEADBEEF) { - printf("FRIENDLY FIRE LOCKOUT TRIGGERED. DAZZLER DISABLED.\r\n"); - while(1); // Permanent lockout - } else { - printf("UNKNOWN IR COMMAND.\r\n"); - } -} +#include "dazzler.h" int main(void) { stdio_init_all(); + dazzler_init(); + + sleep_ms(2000); + printf("SYSTEM BOOT: GHOST LIGHT DAZZLER ONLINE.\r\n"); + while (true) { - parse_nec_code(simulated_ir_rx_code); - sleep_ms(1000); + parse_nec_code(); + sleep_ms(1500); } + return 0; }