diff --git a/src/Lora.cpp b/src/Lora.cpp
@@ -1,5 +1,4 @@
-#include <RadioLib.h>
-#include "pins.h"
+#include "Lora.h"
SX1262 radio = new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN);
@@ -14,7 +13,7 @@ bool setupRadio() {
if (state == RADIOLIB_ERR_NONE) {
Serial.println("Start Radio success!");
} else {
- Serial.print("Start Radio failed,code:");
+ Serial.print("Start Radio failed, code: ");
Serial.println(state);
return false;
}
@@ -44,19 +43,19 @@ bool setupRadio() {
return false;
}
- // set output power to 10 dBm (accepted range is -17 - 22 dBm)
+ // Set output power to 17 dBm (accepted range is -17 - 22 dBm)
if (radio.setOutputPower(17) == RADIOLIB_ERR_INVALID_OUTPUT_POWER) {
Serial.println(F("Selected output power is invalid for this module!"));
return false;
}
- // set over current protection limit to 140 mA (accepted range is 45 - 140 mA) (set value to 0 to disable overcurrent protection)
+ // Set over current protection limit to 140 mA (accepted range is 45 - 140 mA)
if (radio.setCurrentLimit(140) == RADIOLIB_ERR_INVALID_CURRENT_LIMIT) {
Serial.println(F("Selected current limit is invalid for this module!"));
return false;
}
- // set LoRa preamble length to 15 symbols (accepted range is 0 - 65535)
+ // Set LoRa preamble length to 15 symbols (accepted range is 0 - 65535)
if (radio.setPreambleLength(15) == RADIOLIB_ERR_INVALID_PREAMBLE_LENGTH) {
Serial.println(F("Selected preamble length is invalid for this module!"));
return false;
@@ -67,9 +66,6 @@ bool setupRadio() {
return false;
}
- // set the function that will be called when new packet is received
- //radio.setDio1Action(setFlag);
-
return true;
}
@@ -77,14 +73,8 @@ bool setupRadio() {
bool transmit() {
int state = radio.transmit("Hello World!");
- // you can also transmit byte array up to 256 bytes long
- /*
- byte byteArr[] = {0x01, 0x23, 0x45, 0x56, 0x78, 0xAB, 0xCD, 0xEF};
- int state = radio.transmit(byteArr, 8);
- */
-
if (state == RADIOLIB_ERR_NONE) {
- Serial.println(F("Radio tramsmittion successful!"));
+ Serial.println(F("Radio transmission successful!"));
Serial.print(F("[SX1262] Datarate:\t"));
Serial.print(radio.getDataRate());
Serial.println(F(" bps"));
@@ -112,22 +102,18 @@ void recvLoop() {
if (state == RADIOLIB_ERR_NONE) {
Serial.print(F("[RADIO] Received packet!"));
-
Serial.print(F(" Data:"));
Serial.print(recv);
-
Serial.print(F(" RSSI:"));
Serial.print(radio.getRSSI());
Serial.print(F(" dBm"));
- // snprintf(dispRecvicerBuff[1], sizeof(dispRecvicerBuff[1]), "RSSI:%.2f dBm", radio.getRSSI());
-
Serial.print(F(" SNR:"));
Serial.print(radio.getSNR());
Serial.println(F(" dB"));
- } else if (state == RADIOLIB_ERR_CRC_MISMATCH) {
+ } else if (state == RADIOLIB_ERR_CRC_MISMATCH) {
Serial.println(F("CRC error!"));
} else {
- Serial.print(F("failed, code "));
+ Serial.print(F("Failed, code "));
Serial.println(state);
}
} else {
@@ -135,4 +121,4 @@ void recvLoop() {
break;
}
}
-}
-\ No newline at end of file
+}
diff --git a/src/Lora.h b/src/Lora.h
@@ -0,0 +1,11 @@
+#pragma once
+
+#include <RadioLib.h>
+
+#include "pins.h"
+
+extern SX1262 radio;
+
+bool setupRadio();
+bool transmit();
+void recvLoop();
diff --git a/src/Speaker.cpp b/src/Speaker.cpp
@@ -0,0 +1,75 @@
+#include "Speaker.h"
+
+
+void setupI2S() {
+ i2s_config_t i2s_config = {
+ .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX),
+ .sample_rate = SAMPLE_RATE,
+ .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
+ .channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,
+ .communication_format = I2S_COMM_FORMAT_STAND_I2S,
+ .intr_alloc_flags = 0,
+ .dma_buf_count = 8,
+ .dma_buf_len = 64,
+ .use_apll = false,
+ .tx_desc_auto_clear = true,
+ .fixed_mclk = 0
+ };
+
+ i2s_pin_config_t pin_config = {
+ .bck_io_num = BOARD_I2S_BCK,
+ .ws_io_num = BOARD_I2S_WS,
+ .data_out_num = BOARD_I2S_DOUT,
+ .data_in_num = I2S_PIN_NO_CHANGE
+ };
+
+ i2s_driver_install(BOARD_I2S_PORT, &i2s_config, 0, NULL);
+ i2s_set_pin(BOARD_I2S_PORT, &pin_config);
+ i2s_set_clk(BOARD_I2S_PORT, SAMPLE_RATE, I2S_BITS_PER_SAMPLE_16BIT, I2S_CHANNEL_MONO);
+}
+
+
+void playTone(float frequency, int duration, int volume) {
+ volume = constrain(volume, 0, 32767);
+ const int wave_period = SAMPLE_RATE / frequency;
+ int16_t sample_buffer[wave_period];
+
+ for (int i = 0; i < wave_period; ++i)
+ sample_buffer[i] = (i < wave_period / 2) ? volume : -volume;
+
+ int total_samples = SAMPLE_RATE * duration / 1000;
+ int samples_written = 0;
+
+ while (samples_written < total_samples) {
+ int to_write = min(wave_period, total_samples - samples_written);
+ i2s_write(BOARD_I2S_PORT, sample_buffer, to_write * sizeof(int16_t), (size_t *)&to_write, portMAX_DELAY);
+ samples_written += to_write;
+ }
+}
+
+
+void playRTTTL(const char* rtttl) {
+ static AudioGeneratorRTTTL *rtttlGenerator = new AudioGeneratorRTTTL();
+ static AudioOutputI2S *audioOutput = new AudioOutputI2S();
+ static AudioFileSourcePROGMEM *fileSource = new AudioFileSourcePROGMEM(rtttl, strlen(rtttl));
+
+ audioOutput->begin();
+ rtttlGenerator->begin(fileSource, audioOutput);
+
+ while (rtttlGenerator->isRunning())
+ rtttlGenerator->loop();
+
+ rtttlGenerator->stop();
+ fileSource->close();
+}
+
+
+void playNotificationSound() {
+ playTone(1000, 150);
+ delay(100);
+ playTone(1500, 150);
+ delay(100);
+ playTone(2000, 150);
+ delay(100);
+ playTone(500, 150);
+}
diff --git a/src/Speaker.h b/src/Speaker.h
@@ -8,80 +8,10 @@
#include "pins.h"
-
#define BOARD_I2S_PORT I2S_NUM_0
#define SAMPLE_RATE 44100
-
-void setupI2S() {
- i2s_config_t i2s_config = {
- .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX),
- .sample_rate = SAMPLE_RATE,
- .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
- .channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,
- .communication_format = I2S_COMM_FORMAT_STAND_I2S,
- .intr_alloc_flags = 0,
- .dma_buf_count = 8,
- .dma_buf_len = 64,
- .use_apll = false,
- .tx_desc_auto_clear = true,
- .fixed_mclk = 0
- };
-
- i2s_pin_config_t pin_config = {
- .bck_io_num = BOARD_I2S_BCK,
- .ws_io_num = BOARD_I2S_WS,
- .data_out_num = BOARD_I2S_DOUT,
- .data_in_num = I2S_PIN_NO_CHANGE
- };
-
- i2s_driver_install(BOARD_I2S_PORT, &i2s_config, 0, NULL);
- i2s_set_pin(BOARD_I2S_PORT, &pin_config);
- i2s_set_clk(BOARD_I2S_PORT, SAMPLE_RATE, I2S_BITS_PER_SAMPLE_16BIT, I2S_CHANNEL_MONO);
-}
-
-
-void playTone(float frequency, int duration, int volume = 16383) {
- volume = constrain(volume, 0, 32767);
- const int wave_period = SAMPLE_RATE / frequency;
- int16_t sample_buffer[wave_period];
-
- for (int i = 0; i < wave_period; ++i)
- sample_buffer[i] = (i < wave_period / 2) ? volume : -volume;
-
- int total_samples = SAMPLE_RATE * duration / 1000;
- int samples_written = 0;
-
- while (samples_written < total_samples) {
- int to_write = min(wave_period, total_samples - samples_written);
- i2s_write(BOARD_I2S_PORT, sample_buffer, to_write * sizeof(int16_t), (size_t *)&to_write, portMAX_DELAY);
- samples_written += to_write;
- }
-}
-
-
-void playRTTTL(const char* rtttl) {
- static AudioGeneratorRTTTL *rtttlGenerator = new AudioGeneratorRTTTL();
- static AudioOutputI2S *audioOutput = new AudioOutputI2S();
- static AudioFileSourcePROGMEM *fileSource = new AudioFileSourcePROGMEM(rtttl, strlen(rtttl));
-
- audioOutput->begin();
- rtttlGenerator->begin(fileSource, audioOutput);
-
- while (rtttlGenerator->isRunning())
- rtttlGenerator->loop();
-
- rtttlGenerator->stop();
- fileSource->close();
-}
-
-
-void playNotificationSound() {
- playTone(1000, 150);
- delay(100);
- playTone(1500, 150);
- delay(100);
- playTone(2000, 150);
- delay(100);
- playTone(500, 150);
-}
+void setupI2S();
+void playTone(float frequency, int duration, int volume = 16383);
+void playRTTTL(const char* rtttl);
+void playNotificationSound();
diff --git a/src/Storage.cpp b/src/Storage.cpp
@@ -0,0 +1,120 @@
+#include "Storage.h"
+
+
+Preferences preferences;
+
+String irc_nickname;
+String irc_username;
+String irc_realname;
+String irc_server;
+int irc_port;
+bool irc_tls;
+String irc_channel;
+String irc_nickserv;
+String wifi_ssid;
+String wifi_password;
+
+
+void loadPreferences() {
+ preferences.begin("config", false);
+
+ // IRC preferences
+ if (!preferences.isKey("irc_nickname"))
+ preferences.putString("irc_nickname", "ACID_" + String(random(1000, 10000)));
+ irc_nickname = preferences.getString("irc_nickname");
+
+ if (!preferences.isKey("irc_username"))
+ preferences.putString("irc_username", "tdeck");
+ irc_username = preferences.getString("irc_username");
+
+ if (!preferences.isKey("irc_realname"))
+ preferences.putString("irc_realname", "ACID DROP Firmware");
+ irc_realname = preferences.getString("irc_realname");
+
+ if (!preferences.isKey("irc_server"))
+ preferences.putString("irc_server", "irc.supernets.org");
+ irc_server = preferences.getString("irc_server");
+
+ if (!preferences.isKey("irc_port"))
+ preferences.putInt("irc_port", 6667);
+ irc_port = preferences.getInt("irc_port");
+
+ if (!preferences.isKey("irc_tls"))
+ preferences.putBool("irc_tls", false);
+ irc_tls = preferences.getBool("irc_tls");
+
+ if (!preferences.isKey("irc_channel"))
+ preferences.putString("irc_channel", "#comms");
+ irc_channel = preferences.getString("irc_channel");
+
+ if (!preferences.isKey("irc_nickserv"))
+ preferences.putString("irc_nickserv", "");
+ irc_nickserv = preferences.getString("irc_nickserv");
+
+ // WiFi preferences
+ if (!preferences.isKey("wifi_ssid"))
+ preferences.putString("wifi_ssid", "");
+ wifi_ssid = preferences.getString("wifi_ssid");
+
+ if (!preferences.isKey("wifi_password"))
+ preferences.putString("wifi_password", "");
+ wifi_password = preferences.getString("wifi_password");
+
+ preferences.end();
+}
+
+
+bool mountSD() {
+ if (SD.begin(BOARD_SDCARD_CS, SPI, 800000U)) {
+ uint8_t cardType = SD.cardType();
+
+ if (cardType == CARD_NONE) {
+ Serial.println("No SD card attached");
+ return false;
+ } else {
+ Serial.print("SD Card Type: ");
+ if (cardType == CARD_MMC)
+ Serial.println("MMC");
+ else if (cardType == CARD_SD)
+ Serial.println("SDSC");
+ else if (cardType == CARD_SDHC)
+ Serial.println("SDHC");
+ else
+ Serial.println("UNKNOWN");
+
+ uint32_t cardSize = SD.cardSize() / (1024 * 1024);
+ uint32_t cardTotal = SD.totalBytes() / (1024 * 1024);
+ uint32_t cardUsed = SD.usedBytes() / (1024 * 1024);
+ Serial.printf("SD Card Size: %lu MB\n", cardSize);
+ Serial.printf("Total space: %lu MB\n", cardTotal);
+ Serial.printf("Used space: %lu MB\n", cardUsed);
+
+ return true;
+ }
+ }
+
+ return false;
+}
+
+
+void setupSD() {
+ pinMode(BOARD_SDCARD_CS, OUTPUT);
+ digitalWrite(BOARD_SDCARD_CS, HIGH);
+ pinMode(BOARD_SPI_MISO, INPUT_PULLUP);
+ SPI.begin(BOARD_SPI_SCK, BOARD_SPI_MISO, BOARD_SPI_MOSI);
+}
+
+
+void wipeNVS() {
+ esp_err_t err = nvs_flash_erase();
+ if (err == ESP_OK)
+ Serial.println("NVS flash erase successful.");
+ else
+ Serial.println("Error erasing NVS flash!");
+
+ err = nvs_flash_init();
+ if (err == ESP_OK)
+ Serial.println("NVS flash init successful.");
+ else
+ Serial.println("Error initializing NVS flash!");
+}
+\ No newline at end of file
diff --git a/src/Storage.h b/src/Storage.h
@@ -0,0 +1,26 @@
+#pragma once
+
+#include <Arduino.h>
+#include <Preferences.h>
+#include "nvs_flash.h"
+#include <SD.h>
+
+#include "pins.h"
+
+extern Preferences preferences;
+
+extern String irc_nickname;
+extern String irc_username;
+extern String irc_realname;
+extern String irc_server;
+extern int irc_port;
+extern bool irc_tls;
+extern String irc_channel;
+extern String irc_nickserv;
+extern String wifi_ssid;
+extern String wifi_password;
+
+void loadPreferences();
+bool mountSD();
+void setupSD();
+void wipeNVS();
diff --git a/src/main.ino b/src/main.ino
@@ -5,7 +5,6 @@
// Aurduino includes
#include <esp_wifi.h> // Needed for Mac spoofing
-#include "nvs_flash.h"
#include <Pangodream_18650_CL.h> // Power management
#include <Preferences.h>
#include <SD.h>
@@ -17,7 +16,9 @@
// Local includes
#include "bootScreen.h"
+#include "Lora.h"
#include "pins.h"
+#include "Storage.h"
#include "Speaker.h"
@@ -39,7 +40,6 @@ struct WiFiNetwork {
// Initialize components and objects
Pangodream_18650_CL BL(BOARD_BAT_ADC, CONV_FACTOR, READS);
-Preferences preferences;
TFT_eSPI tft = TFT_eSPI();
WiFiClient* client;
@@ -50,16 +50,7 @@ std::vector<bool> mentions;
std::vector<WiFiNetwork> wifiNetworks;
// Global variables to cache preferences and buffers
-String irc_nickname;
-String irc_username;
-String irc_realname;
-String irc_server;
-int irc_port;
-bool irc_tls;
-String irc_channel;
-String irc_nickserv;
-String wifi_ssid;
-String wifi_password;
+
String inputBuffer = "";
// Leftover crack variables (will be removed when preferences are done)
@@ -141,14 +132,11 @@ void setup() {
setBrightness(8); // Set the screen brightness to 50%)
// Give power to the SD card
- pinMode(BOARD_SDCARD_CS, OUTPUT);
- digitalWrite(BOARD_SDCARD_CS, HIGH);
- pinMode(BOARD_SPI_MISO, INPUT_PULLUP);
- SPI.begin(BOARD_SPI_SCK, BOARD_SPI_MISO, BOARD_SPI_MOSI);
+ //setupSD();
+ //mountSD();
// Turn on power to the radio
- pinMode(RADIO_CS_PIN, OUTPUT);
- digitalWrite(RADIO_CS_PIN, HIGH);
+ //setupRadio();
// Start the I2C bus for the keyboard
Wire.begin(BOARD_I2C_SDA, BOARD_I2C_SCL);
@@ -263,55 +251,6 @@ void loop() {
}
}
-
-void loadPreferences() {
- preferences.begin("config", false);
-
- // IRC preferences
- if (!preferences.isKey("irc_nickname"))
- preferences.putString("irc_nickname", "ACID_" + String(random(1000, 10000)));
- irc_nickname = preferences.getString("irc_nickname");
-
- if (!preferences.isKey("irc_username"))
- preferences.putString("irc_username", "tdeck");
- irc_username = preferences.getString("irc_username");
-
- if (!preferences.isKey("irc_realname"))
- preferences.putString("irc_realname", "ACID DROP Firmware");
- irc_realname = preferences.getString("irc_realname");
-
- if (!preferences.isKey("irc_server"))
- preferences.putString("irc_server", "irc.supernets.org");
- irc_server = preferences.getString("irc_server");
-
- if (!preferences.isKey("irc_port"))
- preferences.putInt("irc_port", 6667);
- irc_port = preferences.getInt("irc_port");
-
- if (!preferences.isKey("irc_tls"))
- preferences.putBool("irc_tls", false);
- irc_tls = preferences.getBool("irc_tls");
-
- if (!preferences.isKey("irc_channel"))
- preferences.putString("irc_channel", "#comms");
- irc_channel = preferences.getString("irc_channel");
-
- if (!preferences.isKey("irc_nickserv"))
- preferences.putString("irc_nickserv", "");
- irc_nickserv = preferences.getString("irc_nickserv");
-
- // WiFi preferences
- if (!preferences.isKey("wifi_ssid"))
- preferences.putString("wifi_ssid", "");
- wifi_ssid = preferences.getString("wifi_ssid");
-
- if (!preferences.isKey("wifi_password"))
- preferences.putString("wifi_password", "");
- wifi_password = preferences.getString("wifi_password");
-
- preferences.end();
-}
-
// ------------------------------------------------------------------------------------------------
@@ -866,43 +805,6 @@ void setBrightness(uint8_t value) {
}
-bool setupSD() {
- digitalWrite(BOARD_SDCARD_CS, HIGH);
- digitalWrite(RADIO_CS_PIN, HIGH);
- digitalWrite(BOARD_TFT_CS, HIGH);
-
- if (SD.begin(BOARD_SDCARD_CS, SPI, 800000U)) {
- uint8_t cardType = SD.cardType();
-
- if (cardType == CARD_NONE) {
- Serial.println("No SD_MMC card attached");
- return false;
- } else {
- Serial.print("SD_MMC Card Type: ");
- if (cardType == CARD_MMC)
- Serial.println("MMC");
- else if (cardType == CARD_SD)
- Serial.println("SDSC");
- else if (cardType == CARD_SDHC)
- Serial.println("SDHC");
- else
- Serial.println("UNKNOWN");
-
- uint32_t cardSize = SD.cardSize() / (1024 * 1024);
- uint32_t cardTotal = SD.totalBytes() / (1024 * 1024);
- uint32_t cardUsed = SD.usedBytes() / (1024 * 1024);
- Serial.printf("SD Card Size: %lu MB\n", cardSize);
- Serial.printf("Total space: %lu MB\n", cardTotal);
- Serial.printf("Used space: %lu MB\n", cardUsed);
-
- return true;
- }
- }
-
- return false;
-}
-
-
void turnOffScreen() {
Serial.println("Screen turned off");
tft.writecommand(TFT_DISPOFF);
@@ -1538,19 +1440,4 @@ void printDeviceInfo() {
} else {
tft.setCursor(0, line * 16); tft.setTextColor(TFT_CYAN); tft.print("WiFi Info: "); tft.setTextColor(TFT_WHITE); tft.println("Not connected"); line++;
}
-}
-
-
-void wipeNVS() {
- esp_err_t err = nvs_flash_erase();
- if (err == ESP_OK)
- Serial.println("NVS flash erase successful.");
- else
- Serial.println("Error erasing NVS flash!");
-
- err = nvs_flash_init();
- if (err == ESP_OK)
- Serial.println("NVS flash init successful.");
- else
- Serial.println("Error initializing NVS flash!");
}
\ No newline at end of file
| | | | | | |