first commit

This commit is contained in:
Dana Markova
2025-07-28 13:21:36 +03:00
commit 0de214c9a1
547 changed files with 287132 additions and 0 deletions

73
dev/ibus.cpp Normal file
View File

@ -0,0 +1,73 @@
#include <string.h>
#include "uart.h"
#include "tick.h"
#include "ibus.h"
// IBUS: LEN(1)+CMD(1)+DATA(0..32)+CHSM(2)
#define IBUS_LEN_MAX 32 // DATA(0..32)
#define IBUS_LEN_PRO 3 // CMD(1)+CHSM(2)
void IBUS_Init(unsigned long Baud)
{
UART2_Init(Baud);
}
static const unsigned long Size = IBUS_LEN_MAX + IBUS_LEN_PRO;
static char Buffer[Size];
static char Pos = 0, Len = 0;
static unsigned long CheckSum;
static unsigned long Time;
static bool Parse(IBUS_Data& Data, char byte)
{
unsigned long wait = TICK_GetCount() - Time;
if (wait > 4) Len = 0; // Protocol synchronization lost !!!
if (!Len)
{
if (byte > IBUS_LEN_MAX || byte < IBUS_LEN_PRO) return false;
Pos = 0;
Len = byte - 1;
CheckSum = 0xFFFFUL - byte;
Time = TICK_GetCount();
return false;
}
Buffer[Pos++] = byte;
if (Pos <= Len - 2) CheckSum -= byte;
if (Pos < Len) return false;
unsigned long len = Len;
Len = 0;
unsigned short chsm = *(unsigned short*)(Buffer + (len - 2));
if (chsm != CheckSum) return false;
switch (Buffer[0])
{
case 0x40:
{
memcpy(&Data, Buffer + 1, len - 3 > sizeof(Data) ? sizeof(Data) : len - 3);
return true;
}
}
return false;
}
bool IBUS_Update(IBUS_Data& Data, bool& Off)
{
char buf[Size];
unsigned long size = UART2_Recv(buf, Size);
bool done = false;
for (long a = 0; a < size; a++) done = Parse(Data, buf[a]);
Off=Data.SWD<1000;
return done;
}