using Cxx = import "./include/c++.capnp"; $Cxx.namespace("cereal"); @0xb526ba661d550a59; # custom.capnp: a home for empty structs reserved for custom forks # These structs are guaranteed to remain reserved and empty in mainline # cereal, so use these if you want custom events in your fork. # DO rename the structs # DON'T change the identifier (e.g. @0x81c2f05a394cf4af) struct ModularAssistiveDrivingSystem { state @0 :ModularAssistiveDrivingSystemState; enabled @1 :Bool; active @2 :Bool; available @3 :Bool; enum ModularAssistiveDrivingSystemState { disabled @0; paused @1; enabled @2; softDisabling @3; overriding @4; } } # Same struct as Log.RadarState.LeadData struct LeadData { dRel @0 :Float32; yRel @1 :Float32; vRel @2 :Float32; aRel @3 :Float32; vLead @4 :Float32; dPath @6 :Float32; vLat @7 :Float32; vLeadK @8 :Float32; aLeadK @9 :Float32; fcw @10 :Bool; status @11 :Bool; aLeadTau @12 :Float32; modelProb @13 :Float32; radar @14 :Bool; radarTrackId @15 :Int32 = -1; aLeadDEPRECATED @5 :Float32; } struct SelfdriveStateSP @0x81c2f05a394cf4af { mads @0 :ModularAssistiveDrivingSystem; } struct ModelManagerSP @0xaedffd8f31e7b55d { activeBundle @0 :ModelBundle; selectedBundle @1 :ModelBundle; availableBundles @2 :List(ModelBundle); struct DownloadUri { uri @0 :Text; sha256 @1 :Text; } enum DownloadStatus { notDownloading @0; downloading @1; downloaded @2; cached @3; failed @4; } struct DownloadProgress { status @0 :DownloadStatus; progress @1 :Float32; eta @2 :UInt32; } struct Artifact { fileName @0 :Text; downloadUri @1 :DownloadUri; downloadProgress @2 :DownloadProgress; } struct Model { type @0 :Type; artifact @1 :Artifact; # Main artifact metadata @2 :Artifact; # Metadata artifact enum Type { supercombo @0; navigation @1; vision @2; policy @3; } } enum Runner { snpe @0; tinygrad @1; stock @2; } struct Override { key @0 :Text; value @1 :Text; } struct ModelBundle { index @0 :UInt32; internalName @1 :Text; displayName @2 :Text; models @3 :List(Model); status @4 :DownloadStatus; generation @5 :UInt32; environment @6 :Text; runner @7 :Runner; is20hz @8 :Bool; ref @9 :Text; minimumSelectorVersion @10 :UInt32; overrides @11 :List(Override); } } struct LongitudinalPlanSP @0xf35cc4560bbf6ec2 { dec @0 :DynamicExperimentalControl; struct DynamicExperimentalControl { state @0 :DynamicExperimentalControlState; enabled @1 :Bool; active @2 :Bool; enum DynamicExperimentalControlState { acc @0; blended @1; } } } struct OnroadEventSP @0xda96579883444c35 { events @0 :List(Event); struct Event { name @0 :EventName; # event types enable @1 :Bool; noEntry @2 :Bool; warning @3 :Bool; # alerts presented only when enabled or soft disabling userDisable @4 :Bool; softDisable @5 :Bool; immediateDisable @6 :Bool; preEnable @7 :Bool; permanent @8 :Bool; # alerts presented regardless of openpilot state overrideLateral @10 :Bool; overrideLongitudinal @9 :Bool; } enum EventName { lkasEnable @0; lkasDisable @1; manualSteeringRequired @2; manualLongitudinalRequired @3; silentLkasEnable @4; silentLkasDisable @5; silentBrakeHold @6; silentWrongGear @7; silentReverseGear @8; silentDoorOpen @9; silentSeatbeltNotLatched @10; silentParkBrake @11; controlsMismatchLateral @12; hyundaiRadarTracksConfirmed @13; experimentalModeSwitched @14; wrongCarModeAlertOnly @15; pedalPressedAlertOnly @16; laneTurnLeft @17; laneTurnRight @18; } } struct CarParamsSP @0x80ae746ee2596b11 { flags @0 :UInt32; # flags for car specific quirks in sunnypilot safetyParam @1 : Int16; # flags for sunnypilot's custom safety flags neuralNetworkLateralControl @2 :NeuralNetworkLateralControl; struct NeuralNetworkLateralControl { model @0 :Model; fuzzyFingerprint @1 :Bool; struct Model { path @0 :Text; name @1 :Text; } } } struct CarControlSP @0xa5cd762cd951a455 { mads @0 :ModularAssistiveDrivingSystem; params @1 :List(Param); leadOne @2 :LeadData; leadTwo @3 :LeadData; struct Param { key @0 :Text; type @2 :ParamType; value @3 :Data; valueDEPRECATED @1 :Text; # The data type change may cause issues with backwards compatibility. } enum ParamType { string @0; bool @1; int @2; float @3; time @4; json @5; bytes @6; } } struct BackupManagerSP @0xf98d843bfd7004a3 { backupStatus @0 :Status; restoreStatus @1 :Status; backupProgress @2 :Float32; restoreProgress @3 :Float32; lastError @4 :Text; currentBackup @5 :BackupInfo; backupHistory @6 :List(BackupInfo); enum Status { idle @0; inProgress @1; completed @2; failed @3; } struct Version { major @0 :UInt16; minor @1 :UInt16; patch @2 :UInt16; build @3 :UInt16; branch @4 :Text; } struct MetadataEntry { key @0 :Text; value @1 :Text; tags @2 :List(Text); } struct BackupInfo { deviceId @0 :Text; version @1 :UInt32; config @2 :Text; isEncrypted @3 :Bool; createdAt @4 :Text; # ISO timestamp updatedAt @5 :Text; # ISO timestamp sunnypilotVersion @6 :Version; backupMetadata @7 :List(MetadataEntry); } } struct CarStateSP @0xb86e6369214c01c8 { } struct LiveMapDataSP @0xf416ec09499d9d19 { speedLimitValid @0 :Bool; speedLimit @1 :Float32; speedLimitAheadValid @2 :Bool; speedLimitAhead @3 :Float32; speedLimitAheadDistance @4 :Float32; roadName @5 :Text; } struct ModelDataV2SP @0xa1680744031fdb2d { laneTurnDirection @0 :TurnDirection; } enum TurnDirection { none @0; turnLeft @1; turnRight @2; } struct CustomReserved10 @0xcb9fd56c7057593a { } struct CustomReserved11 @0xc2243c65e0340384 { } struct CustomReserved12 @0x9ccdc8676701b412 { } struct CustomReserved13 @0xcd96dafb67a082d0 { } struct CustomReserved14 @0xb057204d7deadf3f { } struct CustomReserved15 @0xbd443b539493bc68 { } struct CustomReserved16 @0xfc6241ed8877b611 { } struct CustomReserved17 @0xa30662f84033036c { } struct CustomReserved18 @0xc86a3d38d13eb3ef { } struct CustomReserved19 @0xa4f1eb3323f5f582 { }