feat(protocol): derive wire size and airtime at compile time

This commit is contained in:
2026-08-28 14:53:55 +03:00
parent 96ffb91b97
commit 36f234739a
5 changed files with 298 additions and 21 deletions

View File

@ -1183,26 +1183,10 @@ uint8_t IR_Encoder::bitLow[2] = {
uint32_t IR_Encoder::calculateSendTime(uint8_t packSize) const
{
// Расчет времени отправки пакета в миллисекундах
// Время преамбулы: preambPulse * 2 фронта * bitTakts тактов
uint32_t preambTime = preambPulse * 2 * bitTakts;
// Время данных: количество бит * bitTakts тактов
uint32_t dataTime = packSize * 8 * bitTakts;
// Время синхронизации: syncBits * 2 фронта * bitTakts тактов
uint32_t syncTime = syncBits * 2 * bitTakts;
// Общее время в тактах
uint32_t totalTakts = preambTime + dataTime + syncTime;
// Конвертируем в миллисекунды
// carrierPeriod - период несущей в микросекундах
// totalTakts * carrierPeriod / 1000 = время в миллисекундах
uint32_t sendTimeMs = (totalTakts * carrierPeriod) / 1000;
return sendTimeMs;
// The TX FSM emits syncBits after every wire byte (including the last)
// and its preamble runs are preambToggle+1 logical ticks long. The old
// approximation omitted the per-byte sync and shortened the preamble.
return irproto::wireAirtimeMsCeil(packSize);
}
// Функции для тестирования времени отправки без фактической отправки