/* * Copyright (C) 2023 Daniele Lacamera * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . */ #ifndef KSP_SERIAL_H #define KSP_SERIAL_H #include typedef struct __attribute__((packed)) vesselData { uint8_t id; //1 float AP; //2 float PE; //3 float SemiMajorAxis; //4 float SemiMinorAxis; //5 float VVI; //6 float e; //7 float inc; //8 float G; //9 int32_t TAp; //10 int32_t TPe; //11 float TrueAnomaly; //12 float Density; //13 int32_t period; //14 float RAlt; //15 float Alt; //16 float Vsurf; //17 float Lat; //18 float Lon; //19 float LiquidFuelTot; //20 float LiquidFuel; //21 float OxidizerTot; //22 float Oxidizer; //23 float EChargeTot; //24 float ECharge; //25 float MonoPropTot; //26 float MonoProp; //27 float IntakeAirTot; //28 float IntakeAir; //29 float SolidFuelTot; //30 float SolidFuel; //31 float XenonGasTot; //32 float XenonGas; //33 float LiquidFuelTotS; //34 float LiquidFuelS; //35 float OxidizerTotS; //36 float OxidizerS; //37 uint32_t MissionTime; //38 float deltaTime; //39 float VOrbit; //40 uint32_t MNTime; //41 float MNDeltaV; //42 float Pitch; //43 float Roll; //44 float Heading; //45 uint16_t ActionGroups; //46 status bit order:SAS, RCS, Light, Gear, Brakes, Abort, Custom01 - 10 uint8_t SOINumber; //47 SOI Number (decimal format: sun-planet-moon e.g. 130 = kerbin, 131 = mun) uint8_t MaxOverHeat; //48 Max part overheat (% percent) float MachNumber; //49 float IAS; //50 Indicated Air Speed uint8_t CurrentStage; //51 Current stage number uint8_t TotalStage; //52 TotalNumber of stages float TargetDist; //53 Distance to targeted vessel (m) float TargetV; //54 Target vessel relative velocity (m/s) uint8_t NavballSASMode; //55 Combined byte for navball target mode and SAS mode // First four bits indicate AutoPilot mode: // 0 SAS is off //1 = Regular Stability Assist //2 = Prograde // 3 = RetroGrade //4 = Normal //5 = Antinormal //6 = Radial In // 7 = Radial Out //8 = Target //9 = Anti-Target //10 = Maneuver node // Last 4 bits set navball mode. (0=ignore,1=ORBIT,2=SURFACE,3=TARGET) } vesselData_t; typedef struct __attribute__((packed)) handShakePacket { uint8_t id; uint8_t M1; uint8_t M2; uint8_t M3; } handShakePacket_t; typedef struct __attribute__((packed)) controlPacket { uint8_t id; uint8_t MainControls; // SAS RCS Lights Gear Brakes Precision Abort Stage uint8_t Mode; // 0 = stage, 1 = docking, 2 = map uint16_t ControlGroup; // control groups 1-10 in 2 bytes uint8_t NavBallSASMode; // other stuff uint8_t AdditionalControlByte1; int16_t Pitch; // -1000 -> 1000 int16_t Roll; // -1000 -> 1000 int16_t Yaw; // -1000 -> 1000 int16_t TX; // -1000 -> 1000 int16_t TY; // -1000 -> 1000 int16_t TZ; // -1000 -> 1000 int16_t WheelSteer; // -1000 -> 1000 int16_t Throttle; // 0 -> 1000 int16_t WheelThrottle; // 0 -> 1000 } controlPacket_t; extern vesselData_t *cur_vdata; void ksp_serial_send(const void *data, uint8_t len); #endif