Compare commits

...

11 Commits

Author SHA1 Message Date
Eiren Rain
bcb0c5e977 Remove unneded include 2026-03-23 18:32:39 +03:00
Eiren Rain
04a0229460 Remove loop tps limit 2026-03-23 18:30:45 +03:00
Eiren Rain
737350513c Fix wifi set sync 2026-03-20 10:29:47 +01:00
Eiren Rain
24c5f5b1a8 Sync wifi 2026-03-20 12:18:52 +03:00
Eiren Rain
95e839c5b4 experiment 1 2026-03-20 11:53:09 +03:00
dependabot[bot]
939ad705ce Bump actions/upload-artifact from 6 to 7 (#517)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-02 15:01:06 +03:00
Sapphire
7d800efdbf Don't set m_LastPacketTimestamp on handshake when we are connected (#513)
If another tracker is trying to find the server, they will send the
handshake packet to the whole network, which prevents us from realising
if the connection to server has timed out.
2026-01-25 07:07:30 +02:00
Butterscotch!
12f4b22dac Revert "Unfuck accelerometer" (#480)
* Revert "Unfuck accelerometer"

This reverts commit 0425f66561.

* Bump protocol version
2026-01-07 08:56:52 +03:00
dependabot[bot]
6cd29c7cea Bump actions/checkout from 5 to 6 (#497)
Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-15 11:09:31 +03:00
dependabot[bot]
33dc84c00b Bump actions/cache from 4 to 5 (#504)
Bumps [actions/cache](https://github.com/actions/cache) from 4 to 5.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-15 11:08:07 +03:00
dependabot[bot]
37658155c7 Bump actions/upload-artifact from 5 to 6 (#503)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 6.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-15 11:07:54 +03:00
4 changed files with 113 additions and 106 deletions

View File

@@ -14,7 +14,7 @@ jobs:
format:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v6
- uses: jidicula/clang-format-action@v4.14.0
with:
clang-format-version: "17"
@@ -33,8 +33,8 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/cache@v4
- uses: actions/checkout@v6
- uses: actions/cache@v5
with:
path: |
~/.cache/pip
@@ -58,7 +58,7 @@ jobs:
run: python ./ci/build.py
- name: Upload binaries
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: binaries
path: ./build/*.bin

View File

@@ -62,7 +62,7 @@
// Sleeping options
#define POWERSAVING_MODE POWER_SAVING_LEGACY // Minimum causes sporadic data pauses
#if POWERSAVING_MODE >= POWER_SAVING_MINIMUM
#define TARGET_LOOPTIME_MICROS (samplingRateInMillis * 1000)
//#define TARGET_LOOPTIME_MICROS (samplingRateInMillis * 1000)
#endif
// Packet bundling/aggregation
@@ -96,7 +96,7 @@
// Not recommended for production
#define ENABLE_INSPECTION false
#define PROTOCOL_VERSION 21
#define PROTOCOL_VERSION 22
#ifndef FIRMWARE_VERSION
#define FIRMWARE_VERSION "UNKNOWN"

View File

@@ -659,131 +659,137 @@ void Connection::update() {
return;
}
int packetSize = m_UDP.parsePacket();
if (!packetSize) {
return;
}
while(true) {
int packetSize = m_UDP.parsePacket();
if (!packetSize) {
return;
}
m_LastPacketTimestamp = millis();
int len = m_UDP.read(m_Packet, sizeof(m_Packet));
int len = m_UDP.read(m_Packet, sizeof(m_Packet));
#ifdef DEBUG_NETWORK
m_Logger.trace(
"Received %d bytes from %s, port %d",
packetSize,
m_UDP.remoteIP().toString().c_str(),
m_UDP.remotePort()
);
m_Logger.traceArray("UDP packet contents: ", m_Packet, len);
#else
(void)packetSize;
#endif
#ifdef DEBUG_NETWORK
m_Logger.trace(
"Received %d bytes from %s, port %d",
packetSize,
m_UDP.remoteIP().toString().c_str(),
m_UDP.remotePort()
);
m_Logger.traceArray("UDP packet contents: ", m_Packet, len);
#else
(void)packetSize;
#endif
switch (static_cast<ReceivePacketType>(m_Packet[3])) {
case ReceivePacketType::HeartBeat:
sendHeartbeat();
break;
case ReceivePacketType::Vibrate:
break;
case ReceivePacketType::Handshake:
// Assume handshake successful
if (static_cast<ReceivePacketType>(m_Packet[3]) == ReceivePacketType::Handshake) {
m_Logger.warn("Handshake received again, ignoring");
break;
return;
}
case ReceivePacketType::Command:
break;
case ReceivePacketType::Config:
break;
case ReceivePacketType::PingPong:
returnLastPacket(len);
break;
case ReceivePacketType::SensorInfo: {
if (len < 6) {
m_Logger.warn("Wrong sensor info packet");
m_LastPacketTimestamp = millis();
switch (static_cast<ReceivePacketType>(m_Packet[3])) {
case ReceivePacketType::HeartBeat:
sendHeartbeat();
break;
}
SensorInfoPacket sensorInfoPacket;
memcpy(&sensorInfoPacket, m_Packet + 4, sizeof(sensorInfoPacket));
case ReceivePacketType::Vibrate:
break;
for (int i = 0; i < (int)sensors.size(); i++) {
if (sensorInfoPacket.sensorId == sensors[i]->getSensorId()) {
m_AckedSensorState[i] = sensorInfoPacket.sensorState;
if (len < 12) {
case ReceivePacketType::Handshake:
// handled above
break;
case ReceivePacketType::Command:
break;
case ReceivePacketType::Config:
break;
case ReceivePacketType::PingPong:
returnLastPacket(len);
break;
case ReceivePacketType::SensorInfo: {
if (len < 6) {
m_Logger.warn("Wrong sensor info packet");
break;
}
SensorInfoPacket sensorInfoPacket;
memcpy(&sensorInfoPacket, m_Packet + 4, sizeof(sensorInfoPacket));
for (int i = 0; i < (int)sensors.size(); i++) {
if (sensorInfoPacket.sensorId == sensors[i]->getSensorId()) {
m_AckedSensorState[i] = sensorInfoPacket.sensorState;
if (len < 12) {
m_AckedSensorCalibration[i]
= sensors[i]->hasCompletedRestCalibration();
m_AckedSensorConfigData[i] = sensors[i]->getSensorConfigData();
break;
}
m_AckedSensorCalibration[i]
= sensors[i]->hasCompletedRestCalibration();
m_AckedSensorConfigData[i] = sensors[i]->getSensorConfigData();
= sensorInfoPacket.hasCompletedRestCalibration;
break;
}
m_AckedSensorCalibration[i]
= sensorInfoPacket.hasCompletedRestCalibration;
}
break;
}
case ReceivePacketType::FeatureFlags: {
// Packet type (4) + Packet number (8) + flags (len - 12)
if (len < 13) {
m_Logger.warn("Invalid feature flags packet: too short");
break;
}
}
break;
}
case ReceivePacketType::FeatureFlags: {
// Packet type (4) + Packet number (8) + flags (len - 12)
if (len < 13) {
m_Logger.warn("Invalid feature flags packet: too short");
break;
}
bool hadFlags = m_ServerFeatures.isAvailable();
bool hadFlags = m_ServerFeatures.isAvailable();
uint32_t flagsLength = len - 12;
m_ServerFeatures = ServerFeatures::from(&m_Packet[12], flagsLength);
uint32_t flagsLength = len - 12;
m_ServerFeatures = ServerFeatures::from(&m_Packet[12], flagsLength);
if (!hadFlags) {
#if PACKET_BUNDLING != PACKET_BUNDLING_DISABLED
if (m_ServerFeatures.has(ServerFeatures::PROTOCOL_BUNDLE_SUPPORT)) {
m_Logger.debug("Server supports packet bundling");
if (!hadFlags) {
#if PACKET_BUNDLING != PACKET_BUNDLING_DISABLED
if (m_ServerFeatures.has(ServerFeatures::PROTOCOL_BUNDLE_SUPPORT)) {
m_Logger.debug("Server supports packet bundling");
}
#endif
}
#endif
}
break;
}
case ReceivePacketType::SetConfigFlag: {
// Packet type (4) + Packet number (8) + sensor_id(1) + flag_id (2) + state
// (1)
if (len < 16) {
m_Logger.warn("Invalid sensor config flag packet: too short");
break;
}
SetConfigFlagPacket setConfigFlagPacket;
memcpy(&setConfigFlagPacket, m_Packet + 12, sizeof(SetConfigFlagPacket));
case ReceivePacketType::SetConfigFlag: {
// Packet type (4) + Packet number (8) + sensor_id(1) + flag_id (2) + state
// (1)
if (len < 16) {
m_Logger.warn("Invalid sensor config flag packet: too short");
break;
}
uint8_t sensorId = setConfigFlagPacket.sensorId;
SensorToggles flag = setConfigFlagPacket.flag;
bool newState = setConfigFlagPacket.newState;
if (sensorId == UINT8_MAX) {
for (auto& sensor : sensors) {
SetConfigFlagPacket setConfigFlagPacket;
memcpy(&setConfigFlagPacket, m_Packet + 12, sizeof(SetConfigFlagPacket));
uint8_t sensorId = setConfigFlagPacket.sensorId;
SensorToggles flag = setConfigFlagPacket.flag;
bool newState = setConfigFlagPacket.newState;
if (sensorId == UINT8_MAX) {
for (auto& sensor : sensors) {
sensor->setFlag(flag, newState);
}
} else {
auto& sensors = sensorManager.getSensors();
if (sensorId >= sensors.size()) {
m_Logger.warn("Invalid sensor config flag packet: invalid sensor id"
);
break;
}
auto& sensor = sensors[sensorId];
sensor->setFlag(flag, newState);
}
} else {
auto& sensors = sensorManager.getSensors();
if (sensorId >= sensors.size()) {
m_Logger.warn("Invalid sensor config flag packet: invalid sensor id"
);
break;
}
auto& sensor = sensors[sensorId];
sensor->setFlag(flag, newState);
sendAcknowledgeConfigChange(sensorId, flag);
configuration.save();
break;
}
sendAcknowledgeConfigChange(sensorId, flag);
configuration.save();
break;
}
}
}

View File

@@ -33,6 +33,7 @@ SensorStatus Sensor::getSensorState() {
void Sensor::setAcceleration(Vector3 a) {
acceleration = a;
sensorOffset.sandwich(acceleration);
newAcceleration = true;
}