Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
eaab570
wip kestrel testing on dirty submods
zradlicz Mar 26, 2025
640e641
bunch of random testing
zradlicz Mar 27, 2025
c1dad84
submodule changes
zradlicz Mar 27, 2025
58bdf24
wip still not working
zradlicz Mar 27, 2025
731be60
refactored the paricle Time dependencies out of Kestrel, changed to c…
zradlicz Mar 28, 2025
33b1cba
updated submods
zradlicz Mar 28, 2025
3582800
missed a few Time.s
zradlicz Mar 28, 2025
4259af8
fixed connection problem hopefully
zradlicz Mar 28, 2025
a7c7b30
removed comma
zradlicz Mar 28, 2025
d585314
started getting rid of gpio dependency
zradlicz Mar 31, 2025
d220fd6
gpio abstraction compiles
zradlicz Apr 1, 2025
a3cee36
updated gpio submods
zradlicz Apr 1, 2025
ced8205
added ISystem
zradlicz Apr 1, 2025
1066b4e
modified sleep
zradlicz Apr 1, 2025
772db28
added Iwire refactoring
zradlicz Apr 2, 2025
9ba64ac
added cloud interface
zradlicz Apr 3, 2025
62bd27c
added Serial abstraction refactoring
zradlicz Apr 3, 2025
b4e05b1
added mocks for hardware dependencies
zradlicz Apr 3, 2025
1f4bc89
wip on refactoring
zradlicz Apr 3, 2025
fde3f27
adedd PCAL refactoring
zradlicz Apr 8, 2025
45f6c6f
refactored li710 for unit testing
zradlicz Apr 9, 2025
ad0ac03
added PAC1934 absraction
zradlicz Apr 23, 2025
127dd95
abstracted LED
zradlicz Apr 23, 2025
4bfda31
abstracted rtc
zradlicz Apr 24, 2025
13acbfe
abstracted ambient light sensor
zradlicz Apr 24, 2025
1070c7f
wip gps refactoring
zradlicz Apr 29, 2025
c0e6bf3
fixed gps refactoring
zradlicz Apr 29, 2025
c8ce135
added haar
zradlicz Apr 29, 2025
ce62556
refactored temp/humididty adafruit sensor
zradlicz Apr 30, 2025
0a79101
forgot to added temp/humididty files
zradlicz Apr 30, 2025
42952b0
accelerometer refactor
zradlicz Apr 30, 2025
0693d59
refactored kestrel BMA456 dep
zradlicz May 1, 2025
f4616ae
modifications for testing
zradlicz May 1, 2025
c055521
updated submods
zradlicz May 1, 2025
a7900b8
made a bunch of misc changesd to get teh unit tests to build while in…
zradlicz May 2, 2025
04d5fa6
added many tests, wip on getting them to be valuable
zradlicz May 7, 2025
555b92c
first round of passing tests for kestrel.cpp!
zradlicz May 8, 2025
2c3034f
resolving merge conflicts
zradlicz May 8, 2025
ab57946
resolving more merge conflicts
zradlicz May 8, 2025
c390552
changed last gemsiot reference
zradlicz May 9, 2025
558834c
changed VEML reference to master
zradlicz May 9, 2025
d11e258
reference PCAL master
zradlicz May 9, 2025
5681641
referenced MXC to master
zradlicz May 9, 2025
966deb3
referenced platform dependencies to master
zradlicz May 9, 2025
e2822a4
updated hardware deps to reference master
zradlicz May 9, 2025
9d74883
updated mcp to master
zradlicz May 9, 2025
56cacde
moved kestrel to master
zradlicz May 9, 2025
f3c594d
updated LI710 to master
zradlicz May 9, 2025
7e843c8
moved sensor submod to master
zradlicz May 9, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -128,12 +128,9 @@
[submodule "test/external/googletest"]
path = test/external/googletest
url = https://github.com/google/googletest.git
[submodule "test/external/fff"]
path = test/external/fff
url = https://github.com/meekrosoft/fff.git
[submodule "lib/FlightControl-platform-dependencies"]
path = lib/FlightControl-platform-dependencies
url = https://github.com/gemsiot/FlightControl-platform-dependencies
url = https://github.com/RTGS-Lab/FlightControl-platform-dependencies.git
[submodule "lib/FlightControl-hardware-dependencies"]
path = lib/FlightControl-hardware-dependencies
url = https://github.com/gemsiot/FlightControl-hardware-dependencies
url = https://github.com/RTGS-Lab/FlightControl-hardware-dependencies
2 changes: 1 addition & 1 deletion lib/Driver_-_Kestrel
Submodule Driver_-_Kestrel updated 2 files
+684 −613 src/Kestrel.cpp
+65 −23 src/Kestrel.h
2 changes: 1 addition & 1 deletion lib/Driver_-_Li710
Submodule Driver_-_Li710 updated 0 files
2 changes: 1 addition & 1 deletion lib/Driver_-_Sensor
Submodule Driver_-_Sensor updated 0 files
2 changes: 1 addition & 1 deletion lib/FlightControl-platform-dependencies
2 changes: 1 addition & 1 deletion lib/PCAL9535A_Library
76 changes: 64 additions & 12 deletions src/FlightControl_Demo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,23 @@ int configurePowerSave(int desiredPowerSaveMode);
#include <vector>
#include <memory>

#include "hardware/SDI12TalonAdapter.h"
#include "platform/ParticleTimeProvider.h"
#include "platform/ParticleGpio.h"
#include "platform/ParticleSystem.h"
#include "platform/ParticleWire.h"
#include "platform/ParticleCloud.h"
#include "platform/ParticleSerial.h"

#include "hardware/IOExpanderPCAL9535A.h"
#include "hardware/SDI12TalonAdapter.h"
#include "hardware/CurrentSenseAmplifierPAC1934.h"
#include "hardware/LedPCA9634.h"
#include "hardware/RtcMCP79412.h"
#include "hardware/AmbientLightVEML3328.h"
#include "hardware/GpsSFE_UBLOX_GNSS.h"
#include "hardware/HumidityTemperatureAdafruit_SHT4X.h"
#include "hardware/AccelerometerMXC6655.h"
#include "hardware/AccelerometerBMA456.h"

const String firmwareVersion = "2.9.11";
const String schemaVersion = "2.2.9";
Expand All @@ -70,16 +85,53 @@ const unsigned long indicatorTimeout = 60000; //Wait for up to 1 minute with ind
const uint64_t balancedDiagnosticPeriod = 3600000; //Report diagnostics once an hour //DEBUG!
int powerSaveMode = 0; //Default to 0, update when configure power save mode is called

Kestrel logger(true);
ParticleTimeProvider realTimeProvider;
ParticleGpio realGpio;
ParticleSystem realSystem;
ParticleWire realWire;
ParticleCloud realCloud;
ParticleUSBSerial realSerialDebug;
ParticleHardwareSerial realSerialSdi12;

IOExpanderPCAL9535A realIoOB(0x20); //0x20 is the PCAL Base address
IOExpanderPCAL9535A realIoTalon(0x21);
CurrentSenseAmplifierPAC1934 realCsaAlpha(2,2,2,2,0x18);
CurrentSenseAmplifierPAC1934 realCsaBeta(2,10,10,10,0x14);
LedPCA9634 realLed(0x52);
RtcMCP79412 realRtc;
AmbientLightVEML3328 realAls;
GpsSFE_UBLOX_GNSS realGps;
HumidityTemperatureAdafruit_SHT4X realTempHumidity;
AccelerometerMXC6655 realAccel;
AccelerometerBMA456 realBackupAccel;

Kestrel logger(realTimeProvider,
realGpio,
realSystem,
realWire,
realCloud,
realSerialDebug,
realSerialSdi12,
realIoOB,
realIoTalon,
realCsaAlpha,
realCsaBeta,
realLed,
realRtc,
realAls,
realGps,
realTempHumidity,
realAccel,
realBackupAccel,
true);
KestrelFileHandler fileSys(logger);
Gonk battery(5); //Instantiate with defaults, manually set to port 5
AuxTalon aux(0, 0x14); //Instantiate AUX talon with deaults - null port and hardware v1.4
I2CTalon i2c(0, 0x21); //Instantiate I2C talon with alt - null port and hardware v2.1
SDI12Talon sdi12(0, 0x14); //Instantiate SDI12 talon with alt - null port and hardware v1.4
PCAL9535A ioAlpha(0x20);
PCAL9535A ioBeta(0x21);
SDI12TalonAdapter realSdi12(sdi12);
ParticleTimeProvider realTimeProvider;
IOExpanderPCAL9535A ioAlpha(0x20);
IOExpanderPCAL9535A ioBeta(0x21);

String globalNodeID = ""; //Store current node ID

Expand Down Expand Up @@ -122,7 +174,7 @@ Hedorah gas(0, 0, 0x10); //Instantiate CO2 sensor with default ports and v1.0 ha
LI710 et(realTimeProvider, realSdi12, 0, 0); //Instantiate ET sensor with default ports and unknown version, pass over SDI12 Talon interface
BaroVue10 campPressure(sdi12, 0, 0x00); // Instantiate Barovue10 with default ports and v0.0 hardware

const uint8_t numSensors = 7; //Number must match the number of objects defined in `sensors` array
const uint8_t numSensors = 8; //Number must match the number of objects defined in `sensors` array

Sensor* const sensors[numSensors] = {
&fileSys,
Expand All @@ -131,8 +183,8 @@ Sensor* const sensors[numSensors] = {
&sdi12,
&battery,
&logger, //Add sensors after this line
&et
// &haar,
&et,
&haar
// &soil1,
// &apogeeSolar,

Expand Down Expand Up @@ -289,13 +341,13 @@ void setup() {
// fileSys.writeToSD(initDiagnostic, "Dummy.txt");

#ifndef RAPID_START //Only do this if not rapid starting
while((!Particle.connected() || logger.gps.getFixType() == 0) && (millis() - startTime) < maxConnectTime) { //Wait while at least one of the remote systems is not connected
while((!Particle.connected() || logger.m_gps.getFixType() == 0) && (millis() - startTime) < maxConnectTime) { //Wait while at least one of the remote systems is not connected
if(Particle.connected()) {
logger.setIndicatorState(IndicatorLight::CELL, IndicatorMode::PASS); //If cell is connected, set to PASS state
if(WAIT_GPS == false) break; //If not told to wait for GPS, break out after cell is connected
}
if(logger.gps.getTimeValid() == true) {
if(logger.gps.getFixType() >= 2 && logger.gps.getFixType() <= 4 && logger.gps.getGnssFixOk()) { //If you get a 2D fix or better, pass GPS
if(logger.m_gps.getTimeValid() == true) {
if(logger.m_gps.getFixType() >= 2 && logger.m_gps.getFixType() <= 4 && logger.m_gps.getGnssFixOk()) { //If you get a 2D fix or better, pass GPS
logger.setIndicatorState(IndicatorLight::GPS, IndicatorMode::PASS);
}
else {
Expand All @@ -312,7 +364,7 @@ void setup() {
logger.setIndicatorState(IndicatorLight::CELL, IndicatorMode::ERROR); //If cell still not connected, display error
// Particle.disconnect(); //DEBUG!
}
if(logger.gps.getFixType() >= 2 && logger.gps.getFixType() <= 4 && logger.gps.getGnssFixOk()) { //Make fix report is in range and fix is OK
if(logger.m_gps.getFixType() >= 2 && logger.m_gps.getFixType() <= 4 && logger.m_gps.getGnssFixOk()) { //Make fix report is in range and fix is OK
logger.setIndicatorState(IndicatorLight::GPS, IndicatorMode::PASS); //Catches connection of GPS is second device to connect
}
else {
Expand Down
52 changes: 52 additions & 0 deletions src/hardware/AccelerometerBMA456.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/**
* @file AccelerometerBMA456.cpp
* @brief Implementation of the AccelerometerBMA456 class.
*
* © 2025 Regents of the University of Minnesota. All rights reserved.
*/

#include "AccelerometerBMA456.h"

AccelerometerBMA456::AccelerometerBMA456() : accel() {
// Default constructor, nothing to initialize here
}

int AccelerometerBMA456::begin() {
return accel.begin();
}

float AccelerometerBMA456::getAccel(uint8_t axis, uint8_t range) {
float x, y, z;
accel.getAcceleration(&x, &y, &z);
switch(axis)
{
case 0:
return x;
case 1:
return y;
case 2:
return z;
default:
return x;
}
}

int AccelerometerBMA456::updateAccelAll() {
accel.initialize();
return 0;
}

float AccelerometerBMA456::getTemp() {
return accel.getTemperature();
}

float* AccelerometerBMA456::getData() { //unimplemented
return 0;
}

float* AccelerometerBMA456::getOffset() { //unimplemented
return 0;
}

void AccelerometerBMA456::setOffset(float offsetX, float offsetY, float offsetZ) { //unimplemented
}
40 changes: 40 additions & 0 deletions src/hardware/AccelerometerBMA456.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/**
* @file AccelerometerBMA456.h
* @brief Concrete implementation of IAccelerometer using BMA456
*
* Adapts the BMA456 accelerometer to the IAccelerometer interface
* for dependency injection and testing.
*
* © 2025 Regents of the University of Minnesota. All rights reserved.
*/

#ifndef ACCELEROMETER_BMA456_H
#define ACCELEROMETER_BMA456_H

#include "IAccelerometer.h"
#include "arduino_bma456.h"

/**
* @brief Concrete implementation of IAccelerometer using BMA456
*/
class AccelerometerBMA456 : public IAccelerometer {
public:
/**
* @brief Constructor
*/
AccelerometerBMA456();
~AccelerometerBMA456() override = default;

int begin() override;
float getAccel(uint8_t axis, uint8_t range = 0) override;
int updateAccelAll() override;
float getTemp() override;
float* getData() override;
float* getOffset() override;
void setOffset(float offsetX, float offsetY, float offsetZ) override;

private:
BMA456 accel; // The concrete BMA456 instance
};

#endif // ACCELEROMETER_BMA456_H
42 changes: 42 additions & 0 deletions src/hardware/AccelerometerMXC6655.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/**
* @file AccelerometerMXC6655.cpp
* @brief Implementation of the AccelerometerMXC6655 class.
*
* © 2025 Regents of the University of Minnesota. All rights reserved.
*/

#include "AccelerometerMXC6655.h"

AccelerometerMXC6655::AccelerometerMXC6655() : accel() {
// Default constructor, nothing to initialize here
}

int AccelerometerMXC6655::begin() {
return accel.begin();
}

float AccelerometerMXC6655::getAccel(uint8_t axis, uint8_t range) {
return accel.getAccel(axis, range);
}

int AccelerometerMXC6655::updateAccelAll() {
return accel.updateAccelAll();
}

float AccelerometerMXC6655::getTemp() {
return accel.getTemp();
}

float* AccelerometerMXC6655::getData() {
return accel.data;
}

float* AccelerometerMXC6655::getOffset() {
return accel.offset;
}

void AccelerometerMXC6655::setOffset(float offsetX, float offsetY, float offsetZ) {
accel.offset[0] = offsetX;
accel.offset[1] = offsetY;
accel.offset[2] = offsetZ;
}
40 changes: 40 additions & 0 deletions src/hardware/AccelerometerMXC6655.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/**
* @file AccelerometerMXC6655.h
* @brief Concrete implementation of IAccelerometer using MXC6655
*
* Adapts the MXC6655 accelerometer to the IAccelerometer interface
* for dependency injection and testing.
*
* © 2025 Regents of the University of Minnesota. All rights reserved.
*/

#ifndef ACCELEROMETER_MXC6655_H
#define ACCELEROMETER_MXC6655_H

#include "IAccelerometer.h"
#include "MXC6655.h"

/**
* @brief Concrete implementation of IAccelerometer using MXC6655
*/
class AccelerometerMXC6655 : public IAccelerometer {
public:
/**
* @brief Constructor
*/
AccelerometerMXC6655();
~AccelerometerMXC6655() override = default;

int begin() override;
float getAccel(uint8_t axis, uint8_t range = 0) override;
int updateAccelAll() override;
float getTemp() override;
float* getData() override;
float* getOffset() override;
void setOffset(float offsetX, float offsetY, float offsetZ) override;

private:
MXC6655 accel; // The concrete MXC6655 instance
};

#endif // ACCELEROMETER_MXC6655_H
Loading
Loading