2022-06-30 11:16:29 -07:00
|
|
|
#include "config.h"
|
|
|
|
#include "debug.h"
|
|
|
|
|
2022-07-15 14:43:51 -07:00
|
|
|
#include "src/hid/hid.h"
|
|
|
|
#include "src/hid/keyboard.h"
|
2022-06-30 11:16:29 -07:00
|
|
|
#include "src/led/led.h"
|
|
|
|
#include "src/msc/msc.h"
|
|
|
|
#include "src/selector/selector.h"
|
2022-07-03 10:13:32 -07:00
|
|
|
#include "src/attack/attack.h"
|
2022-07-06 12:41:52 -07:00
|
|
|
#include "src/preferences/preferences.h"
|
2022-07-06 14:32:55 -07:00
|
|
|
#include "src/duckparser/duckparser.h"
|
2022-07-13 13:09:51 -07:00
|
|
|
#include "src/format/format.h"
|
2022-07-15 14:43:51 -07:00
|
|
|
#include "src/tasks/tasks.h"
|
2022-06-30 11:16:29 -07:00
|
|
|
|
|
|
|
void setup() {
|
2022-07-15 16:06:25 -07:00
|
|
|
// ===== Initialize the minimum required modules to start the USB device stack ===== //
|
2022-06-30 11:16:29 -07:00
|
|
|
debug_init();
|
2022-06-30 12:19:02 -07:00
|
|
|
selector::init();
|
2022-07-13 15:17:22 -07:00
|
|
|
// Initialize memory and ceck for problems
|
|
|
|
if (!msc::init()) {
|
|
|
|
format::start(); // Format the drive
|
|
|
|
|
|
|
|
// If it still fails, blink red LED
|
|
|
|
if (!msc::init()) {
|
|
|
|
while (true) {
|
|
|
|
led::setColor(255, 0, 0);
|
|
|
|
delay(500);
|
|
|
|
led::setColor(0, 0, 0);
|
|
|
|
delay(500);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
preferences::load();
|
2022-07-15 14:43:51 -07:00
|
|
|
hid::setID(preferences::getHidVid(), preferences::getHidPid(), preferences::getHidRev());
|
2022-07-06 14:21:07 -07:00
|
|
|
msc::setID(preferences::getMscVid().c_str(), preferences::getMscPid().c_str(), preferences::getMscRev().c_str());
|
2022-07-06 15:30:53 -07:00
|
|
|
|
2022-07-15 16:06:25 -07:00
|
|
|
// ===== Initialize the USB device stack ===== //
|
2022-07-06 14:03:33 -07:00
|
|
|
// Start Keyboard
|
2022-07-15 14:43:51 -07:00
|
|
|
hid::init();
|
2022-07-06 14:21:07 -07:00
|
|
|
// Start USB Drive
|
2022-07-15 15:36:31 -07:00
|
|
|
if (preferences::mscEnabled() || (selector::mode() == SETUP)) msc::enableDrive();
|
2022-07-06 14:21:07 -07:00
|
|
|
|
2022-07-15 16:06:25 -07:00
|
|
|
// ===== Initialize the remaining modules ===== //
|
|
|
|
led::init();
|
|
|
|
tasks::setCallback(loop);
|
|
|
|
led::setEnable(preferences::ledEnabled());
|
|
|
|
keyboard::setLocale(locale::get(preferences::getDefaultLayout().c_str()));
|
|
|
|
duckparser::setDefaultDelay(preferences::getDefaultDelay());
|
2022-07-14 13:30:00 -07:00
|
|
|
|
2022-07-15 16:06:25 -07:00
|
|
|
// ---
|
2022-07-14 13:30:00 -07:00
|
|
|
|
2022-07-13 13:09:51 -07:00
|
|
|
// Format Flash
|
2022-07-15 15:36:31 -07:00
|
|
|
if ((selector::mode() == SETUP) && preferences::getFormat()) {
|
2022-07-13 15:17:22 -07:00
|
|
|
led::setColor(255, 255, 255);
|
2022-07-13 13:09:51 -07:00
|
|
|
format::start(preferences::getDriveName().c_str());
|
2022-07-13 15:17:22 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
// Create preferences file if it doesn't exist yet
|
|
|
|
if (!msc::exists(PREFERENCES_PATH)) {
|
2022-07-13 13:58:16 -07:00
|
|
|
preferences::save();
|
2022-07-13 13:09:51 -07:00
|
|
|
}
|
2022-07-13 13:58:16 -07:00
|
|
|
|
2022-07-15 16:06:25 -07:00
|
|
|
// Wait 1s to give the computer time to initialize the keyboard
|
|
|
|
delay(1000);
|
|
|
|
|
|
|
|
// Disable capslock if needed
|
|
|
|
if (preferences::getDisableCapslock()) {
|
|
|
|
keyboard::disableCapslock();
|
|
|
|
delay(10);
|
|
|
|
hid::indicatorChanged();
|
|
|
|
}
|
|
|
|
|
2022-07-03 10:08:42 -07:00
|
|
|
// ========== Setup Mode ========== //
|
2022-07-15 15:36:31 -07:00
|
|
|
if (selector::mode() == SETUP) {
|
2022-07-06 15:56:20 -07:00
|
|
|
led::setColor(preferences::getSetupColor()); // Set LED to blue
|
2022-07-03 10:08:42 -07:00
|
|
|
|
|
|
|
while (true) {
|
2022-07-15 15:36:31 -07:00
|
|
|
if (selector::changed() && selector::read() == ATTACK) {
|
2022-07-15 16:06:25 -07:00
|
|
|
preferences::load(); // Reload the settings (in case the main script path changed)
|
|
|
|
attack::start(); // Start keystroke injection attack
|
|
|
|
led::setColor(preferences::getSetupColor()); // Set LED to blue
|
2022-07-03 10:08:42 -07:00
|
|
|
}
|
|
|
|
delay(100);
|
|
|
|
}
|
2022-07-01 15:18:33 -07:00
|
|
|
}
|
2022-07-03 10:08:42 -07:00
|
|
|
// ========== Setup Mode ========== //
|
2022-07-15 15:36:31 -07:00
|
|
|
else if (selector::mode() == ATTACK) {
|
2022-07-14 13:58:56 -07:00
|
|
|
// Run on capslock
|
2022-07-14 15:37:55 -07:00
|
|
|
if (preferences::getRunOnIndicator()) {
|
2022-07-15 14:43:51 -07:00
|
|
|
while (!hid::indicatorChanged()) {
|
2022-07-14 13:58:56 -07:00
|
|
|
delay(100);
|
|
|
|
}
|
|
|
|
keyboard::disableCapslock();
|
|
|
|
}
|
|
|
|
|
2022-07-15 16:06:25 -07:00
|
|
|
attack::start(); // Start keystroke injection attack
|
2022-07-06 15:05:17 -07:00
|
|
|
|
|
|
|
while (true) {
|
2022-07-15 15:36:31 -07:00
|
|
|
if (selector::changed() && selector::read() == ATTACK) {
|
2022-07-15 16:06:25 -07:00
|
|
|
attack::start(); // Start keystroke injection attack
|
2022-07-06 15:05:17 -07:00
|
|
|
}
|
|
|
|
delay(100);
|
|
|
|
}
|
2022-07-02 09:10:32 -07:00
|
|
|
}
|
2022-07-03 09:41:25 -07:00
|
|
|
|
2022-07-03 10:08:42 -07:00
|
|
|
debugln("[Finished]");
|
2022-06-30 11:16:29 -07:00
|
|
|
}
|
|
|
|
|
2022-07-15 14:43:51 -07:00
|
|
|
void loop() {
|
|
|
|
led::update();
|
|
|
|
}
|