123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- /*
- * Copyright (C) 2023 Daniele Lacamera <root@danielinux.net>
- *
- * 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 <http://www.gnu.org/licenses/>.
- */
- #ifndef KSP_SERIAL_H
- #define KSP_SERIAL_H
- #include <stdint.h>
- 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
|