일
udp_marvelmind.c#
Jooplayconsole
2023. 12. 5. 08:26
static void processStatPosData(MarvelmindUDP udp, byte[] bufferInput, bool highRes)
{
uni_8x2_16 v16;
uni_8x4_32 v32;
//uint8_t addressReceived= bufferInput[0];
byte n = bufferInput[5];
byte i;
byte ofs = 5 + 1;
int xc, yc, zc;
byte addr;
#ifdef WIN32
EnterCriticalSection(&udp.lock_);
#else
Monitor.Enter(udp.lock_);
#endif
for (i = 0; i < n; i++)
{
addr = bufferInput[ofs];
v32.b[0] = bufferInput[ofs + 1];
v32.b[1] = bufferInput[ofs + 2];
v32.b[2] = bufferInput[ofs + 3];
v32.b[3] = bufferInput[ofs + 4];
xc = v32.dwi;
v32.b[0] = bufferInput[ofs + 5];
v32.b[1] = bufferInput[ofs + 6];
v32.b[2] = bufferInput[ofs + 7];
v32.b[3] = bufferInput[ofs + 8];
yc = v32.dwi;
v32.b[0] = bufferInput[ofs + 9];
v32.b[1] = bufferInput[ofs + 10];
v32.b[2] = bufferInput[ofs + 11];
v32.b[3] = bufferInput[ofs + 12];
zc = v32.dwi;
ofs += 14;
udp.stationaryPos.items[i].address = addr;
udp.stationaryPos.items[i].x = xc;
udp.stationaryPos.items[i].y = yc;
udp.stationaryPos.items[i].z = zc;
}//for i
udp.stationaryPos.n = n;
udp.stationaryPos.updated = true;
#ifdef WIN32
LeaveCriticalSection(&udp.lock_);
#else
Monitor.Exit(udp.lock_);
#endif
}
void ProcessRawDistancesData(MarvelmindUDP udp, byte[] bufferInput)
{
byte[] v32 = new byte[4];
#if WIN32
EnterCriticalSection(ref udp.lock_);
#else
Monitor.Enter(udp.lock_);
#endif
udp.rawDistances.hedgeAddress = bufferInput[5];
byte ofs = 6;
byte i;
for (i = 0; i < 4; i++)
{
udp.rawDistances.items[i].address = bufferInput[ofs + 0];
v32[0] = bufferInput[ofs + 1];
v32[1] = bufferInput[ofs + 2];
v32[2] = bufferInput[ofs + 3];
v32[3] = bufferInput[ofs + 4];
udp.rawDistances.items[i].distance_mm = BitConverter.ToInt32(v32, 0);
ofs += 6;
}
udp.rawDistances.updated = true;
#if WIN32
LeaveCriticalSection(ref udp.lock_);
#else
Monitor.Exit(udp.lock_);
#endif
}
using System.Threading;
public static void ProcessTelemetryData(MarvelmindUDP udp, byte[] bufferInput)
{
ushort[] v16 = new ushort[8];
#if WIN32
Monitor.Enter(udp.lock_);
#else
Monitor.Enter(udp.lock_);
#endif
udp.telemetryPacket.address = bufferInput[0];
v16[0] = bufferInput[5];
v16[1] = bufferInput[6];
udp.telemetryPacket.vbat_mv = v16[0];
udp.telemetryPacket.rssi_dbm = (sbyte)bufferInput[7];
udp.telemetryPacket.updated = true;
#if WIN32
Monitor.Exit(udp.lock_);
#else
Monitor.Exit(udp.lock_);
#endif
}
public static void ProcessQualityData(MarvelmindUDP udp, byte[] bufferInput)
{
#if WIN32
Monitor.Enter(udp.lock_);
#else
Monitor.Enter(udp.lock_);
#endif
udp.qualityPacket.address = bufferInput[5];
udp.qualityPacket.quality = bufferInput[6];
udp.qualityPacket.updated = true;
#if WIN32
Monitor.Exit(udp.lock_);
#else
Monitor.Exit(udp.lock_);
#endif
}
static void processUserPayloadData(MarvelmindUDP udp, byte[] bufferInput)
{
byte dsize;
lock (udp.lock_)
{
dsize = bufferInput[4];
Buffer.BlockCopy(bufferInput, 5, udp.userPayloadData.timestamp.timestamp64, 0, sizeof(udp.userPayloadData.timestamp.timestamp64));
udp.userPayloadData.realTime = true;
udp.userPayloadData.address = bufferInput[0];
udp.userPayloadData.dataSize = (byte)(dsize - 8);
for (byte i = 0; i < udp.userPayloadData.dataSize; i++)
{
udp.userPayloadData.data[i] = bufferInput[5 + 8 + i];
}
udp.userPayloadData.updated = true;
}
}