git-subtree-dir: cereal git-subtree-split: 9f2076eefd6f71c9b640d26d29ed33a6bbcbf4capull/718/head
commit
24e096d9f0
10 changed files with 2408 additions and 0 deletions
@ -0,0 +1,6 @@ |
|||||||
|
gen |
||||||
|
node_modules |
||||||
|
package-lock.json |
||||||
|
*.pyc |
||||||
|
__pycache__ |
||||||
|
|
@ -0,0 +1,62 @@ |
|||||||
|
PWD := $(shell pwd)
|
||||||
|
|
||||||
|
SRCS := log.capnp car.capnp
|
||||||
|
|
||||||
|
GENS := gen/cpp/car.capnp.c++ gen/cpp/log.capnp.c++
|
||||||
|
JS := gen/js/car.capnp.js gen/js/log.capnp.js
|
||||||
|
|
||||||
|
UNAME_M ?= $(shell uname -m)
|
||||||
|
|
||||||
|
GENS += gen/c/car.capnp.c gen/c/log.capnp.c gen/c/include/c++.capnp.h gen/c/include/java.capnp.h
|
||||||
|
|
||||||
|
ifeq ($(UNAME_M),x86_64) |
||||||
|
|
||||||
|
ifneq (, $(shell which capnpc-java)) |
||||||
|
GENS += gen/java/Car.java gen/java/Log.java
|
||||||
|
else |
||||||
|
$(warning capnpc-java not found, skipping java build) |
||||||
|
endif |
||||||
|
|
||||||
|
endif |
||||||
|
|
||||||
|
|
||||||
|
ifeq ($(UNAME_M),aarch64) |
||||||
|
CAPNPC=PATH=$(PWD)/../phonelibs/capnp-cpp/aarch64/bin/:$$PATH capnpc
|
||||||
|
else |
||||||
|
CAPNPC=capnpc
|
||||||
|
endif |
||||||
|
|
||||||
|
.PHONY: all |
||||||
|
all: $(GENS) |
||||||
|
js: $(JS) |
||||||
|
|
||||||
|
.PHONY: clean |
||||||
|
clean: |
||||||
|
rm -rf gen
|
||||||
|
rm -rf node_modules
|
||||||
|
rm -rf package-lock.json
|
||||||
|
|
||||||
|
gen/c/%.capnp.c: %.capnp |
||||||
|
@echo "[ CAPNPC C ] $@"
|
||||||
|
mkdir -p gen/c/
|
||||||
|
$(CAPNPC) '$<' -o c:gen/c/
|
||||||
|
|
||||||
|
gen/js/%.capnp.js: %.capnp |
||||||
|
@echo "[ CAPNPC JavaScript ] $@"
|
||||||
|
mkdir -p gen/js/
|
||||||
|
sh ./generate_javascript.sh
|
||||||
|
|
||||||
|
gen/cpp/%.capnp.c++: %.capnp |
||||||
|
@echo "[ CAPNPC C++ ] $@"
|
||||||
|
mkdir -p gen/cpp/
|
||||||
|
$(CAPNPC) '$<' -o c++:gen/cpp/
|
||||||
|
|
||||||
|
gen/java/Car.java gen/java/Log.java: $(SRCS) |
||||||
|
@echo "[ CAPNPC java ] $@"
|
||||||
|
mkdir -p gen/java/
|
||||||
|
$(CAPNPC) $^ -o java:gen/java
|
||||||
|
|
||||||
|
# c-capnproto needs some empty headers
|
||||||
|
gen/c/include/c++.capnp.h gen/c/include/java.capnp.h: |
||||||
|
mkdir -p gen/c/include
|
||||||
|
touch '$@'
|
@ -0,0 +1,8 @@ |
|||||||
|
import os |
||||||
|
import capnp |
||||||
|
|
||||||
|
CEREAL_PATH = os.path.dirname(os.path.abspath(__file__)) |
||||||
|
capnp.remove_import_hook() |
||||||
|
|
||||||
|
log = capnp.load(os.path.join(CEREAL_PATH, "log.capnp")) |
||||||
|
car = capnp.load(os.path.join(CEREAL_PATH, "car.capnp")) |
@ -0,0 +1,387 @@ |
|||||||
|
using Cxx = import "./include/c++.capnp"; |
||||||
|
$Cxx.namespace("cereal"); |
||||||
|
|
||||||
|
using Java = import "./include/java.capnp"; |
||||||
|
$Java.package("ai.comma.openpilot.cereal"); |
||||||
|
$Java.outerClassname("Car"); |
||||||
|
|
||||||
|
@0x8e2af1e708af8b8d; |
||||||
|
|
||||||
|
# ******* events causing controls state machine transition ******* |
||||||
|
|
||||||
|
struct CarEvent @0x9b1657f34caf3ad3 { |
||||||
|
name @0 :EventName; |
||||||
|
enable @1 :Bool; |
||||||
|
noEntry @2 :Bool; |
||||||
|
warning @3 :Bool; |
||||||
|
userDisable @4 :Bool; |
||||||
|
softDisable @5 :Bool; |
||||||
|
immediateDisable @6 :Bool; |
||||||
|
preEnable @7 :Bool; |
||||||
|
permanent @8 :Bool; |
||||||
|
|
||||||
|
enum EventName @0xbaa8c5d505f727de { |
||||||
|
# TODO: copy from error list |
||||||
|
canError @0; |
||||||
|
steerUnavailable @1; |
||||||
|
brakeUnavailable @2; |
||||||
|
gasUnavailable @3; |
||||||
|
wrongGear @4; |
||||||
|
doorOpen @5; |
||||||
|
seatbeltNotLatched @6; |
||||||
|
espDisabled @7; |
||||||
|
wrongCarMode @8; |
||||||
|
steerTempUnavailable @9; |
||||||
|
reverseGear @10; |
||||||
|
buttonCancel @11; |
||||||
|
buttonEnable @12; |
||||||
|
pedalPressed @13; |
||||||
|
cruiseDisabled @14; |
||||||
|
radarCanError @15; |
||||||
|
dataNeeded @16; |
||||||
|
speedTooLow @17; |
||||||
|
outOfSpace @18; |
||||||
|
overheat @19; |
||||||
|
calibrationIncomplete @20; |
||||||
|
calibrationInvalid @21; |
||||||
|
controlsMismatch @22; |
||||||
|
pcmEnable @23; |
||||||
|
pcmDisable @24; |
||||||
|
noTarget @25; |
||||||
|
radarFault @26; |
||||||
|
modelCommIssueDEPRECATED @27; |
||||||
|
brakeHold @28; |
||||||
|
parkBrake @29; |
||||||
|
manualRestart @30; |
||||||
|
lowSpeedLockout @31; |
||||||
|
plannerError @32; |
||||||
|
ipasOverride @33; |
||||||
|
debugAlert @34; |
||||||
|
steerTempUnavailableMute @35; |
||||||
|
resumeRequired @36; |
||||||
|
preDriverDistracted @37; |
||||||
|
promptDriverDistracted @38; |
||||||
|
driverDistracted @39; |
||||||
|
geofence @40; |
||||||
|
driverMonitorOn @41; |
||||||
|
driverMonitorOff @42; |
||||||
|
preDriverUnresponsive @43; |
||||||
|
promptDriverUnresponsive @44; |
||||||
|
driverUnresponsive @45; |
||||||
|
belowSteerSpeed @46; |
||||||
|
calibrationProgress @47; |
||||||
|
lowBattery @48; |
||||||
|
invalidGiraffeHonda @49; |
||||||
|
vehicleModelInvalid @50; |
||||||
|
controlsFailed @51; |
||||||
|
sensorDataInvalid @52; |
||||||
|
commIssue @53; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
# ******* main car state @ 100hz ******* |
||||||
|
# all speeds in m/s |
||||||
|
|
||||||
|
struct CarState { |
||||||
|
errorsDEPRECATED @0 :List(CarEvent.EventName); |
||||||
|
events @13 :List(CarEvent); |
||||||
|
|
||||||
|
# car speed |
||||||
|
vEgo @1 :Float32; # best estimate of speed |
||||||
|
aEgo @16 :Float32; # best estimate of acceleration |
||||||
|
vEgoRaw @17 :Float32; # unfiltered speed from CAN sensors |
||||||
|
yawRate @22 :Float32; # best estimate of yaw rate |
||||||
|
standstill @18 :Bool; |
||||||
|
wheelSpeeds @2 :WheelSpeeds; |
||||||
|
|
||||||
|
# gas pedal, 0.0-1.0 |
||||||
|
gas @3 :Float32; # this is user + computer |
||||||
|
gasPressed @4 :Bool; # this is user pedal only |
||||||
|
|
||||||
|
# brake pedal, 0.0-1.0 |
||||||
|
brake @5 :Float32; # this is user pedal only |
||||||
|
brakePressed @6 :Bool; # this is user pedal only |
||||||
|
brakeLights @19 :Bool; |
||||||
|
|
||||||
|
# steering wheel |
||||||
|
steeringAngle @7 :Float32; # deg |
||||||
|
steeringRate @15 :Float32; # deg/s |
||||||
|
steeringTorque @8 :Float32; # TODO: standardize units |
||||||
|
steeringPressed @9 :Bool; # if the user is using the steering wheel |
||||||
|
|
||||||
|
# cruise state |
||||||
|
cruiseState @10 :CruiseState; |
||||||
|
|
||||||
|
# gear |
||||||
|
gearShifter @14 :GearShifter; |
||||||
|
|
||||||
|
# button presses |
||||||
|
buttonEvents @11 :List(ButtonEvent); |
||||||
|
leftBlinker @20 :Bool; |
||||||
|
rightBlinker @21 :Bool; |
||||||
|
genericToggle @23 :Bool; |
||||||
|
|
||||||
|
# lock info |
||||||
|
doorOpen @24 :Bool; |
||||||
|
seatbeltUnlatched @25 :Bool; |
||||||
|
canValid @26 :Bool; |
||||||
|
|
||||||
|
# which packets this state came from |
||||||
|
canMonoTimes @12: List(UInt64); |
||||||
|
|
||||||
|
struct WheelSpeeds { |
||||||
|
# optional wheel speeds |
||||||
|
fl @0 :Float32; |
||||||
|
fr @1 :Float32; |
||||||
|
rl @2 :Float32; |
||||||
|
rr @3 :Float32; |
||||||
|
} |
||||||
|
|
||||||
|
struct CruiseState { |
||||||
|
enabled @0 :Bool; |
||||||
|
speed @1 :Float32; |
||||||
|
available @2 :Bool; |
||||||
|
speedOffset @3 :Float32; |
||||||
|
standstill @4 :Bool; |
||||||
|
} |
||||||
|
|
||||||
|
enum GearShifter { |
||||||
|
unknown @0; |
||||||
|
park @1; |
||||||
|
drive @2; |
||||||
|
neutral @3; |
||||||
|
reverse @4; |
||||||
|
sport @5; |
||||||
|
low @6; |
||||||
|
brake @7; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
# send on change |
||||||
|
struct ButtonEvent { |
||||||
|
pressed @0 :Bool; |
||||||
|
type @1 :Type; |
||||||
|
|
||||||
|
enum Type { |
||||||
|
unknown @0; |
||||||
|
leftBlinker @1; |
||||||
|
rightBlinker @2; |
||||||
|
accelCruise @3; |
||||||
|
decelCruise @4; |
||||||
|
cancel @5; |
||||||
|
altButton1 @6; |
||||||
|
altButton2 @7; |
||||||
|
altButton3 @8; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
# ******* radar state @ 20hz ******* |
||||||
|
|
||||||
|
struct RadarData @0x888ad6581cf0aacb { |
||||||
|
errors @0 :List(Error); |
||||||
|
points @1 :List(RadarPoint); |
||||||
|
|
||||||
|
# which packets this state came from |
||||||
|
canMonoTimes @2 :List(UInt64); |
||||||
|
|
||||||
|
enum Error { |
||||||
|
canError @0; |
||||||
|
fault @1; |
||||||
|
wrongConfig @2; |
||||||
|
} |
||||||
|
|
||||||
|
# similar to LiveTracks |
||||||
|
# is one timestamp valid for all? I think so |
||||||
|
struct RadarPoint { |
||||||
|
trackId @0 :UInt64; # no trackId reuse |
||||||
|
|
||||||
|
# these 3 are the minimum required |
||||||
|
dRel @1 :Float32; # m from the front bumper of the car |
||||||
|
yRel @2 :Float32; # m |
||||||
|
vRel @3 :Float32; # m/s |
||||||
|
|
||||||
|
# these are optional and valid if they are not NaN |
||||||
|
aRel @4 :Float32; # m/s^2 |
||||||
|
yvRel @5 :Float32; # m/s |
||||||
|
|
||||||
|
# some radars flag measurements VS estimates |
||||||
|
measured @6 :Bool; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
# ******* car controls @ 100hz ******* |
||||||
|
|
||||||
|
struct CarControl { |
||||||
|
# must be true for any actuator commands to work |
||||||
|
enabled @0 :Bool; |
||||||
|
active @7 :Bool; |
||||||
|
|
||||||
|
gasDEPRECATED @1 :Float32; |
||||||
|
brakeDEPRECATED @2 :Float32; |
||||||
|
steeringTorqueDEPRECATED @3 :Float32; |
||||||
|
|
||||||
|
actuators @6 :Actuators; |
||||||
|
|
||||||
|
cruiseControl @4 :CruiseControl; |
||||||
|
hudControl @5 :HUDControl; |
||||||
|
|
||||||
|
struct Actuators { |
||||||
|
# range from 0.0 - 1.0 |
||||||
|
gas @0: Float32; |
||||||
|
brake @1: Float32; |
||||||
|
# range from -1.0 - 1.0 |
||||||
|
steer @2: Float32; |
||||||
|
steerAngle @3: Float32; |
||||||
|
} |
||||||
|
|
||||||
|
struct CruiseControl { |
||||||
|
cancel @0: Bool; |
||||||
|
override @1: Bool; |
||||||
|
speedOverride @2: Float32; |
||||||
|
accelOverride @3: Float32; |
||||||
|
} |
||||||
|
|
||||||
|
struct HUDControl { |
||||||
|
speedVisible @0: Bool; |
||||||
|
setSpeed @1: Float32; |
||||||
|
lanesVisible @2: Bool; |
||||||
|
leadVisible @3: Bool; |
||||||
|
visualAlert @4: VisualAlert; |
||||||
|
audibleAlert @5: AudibleAlert; |
||||||
|
rightLaneVisible @6: Bool; |
||||||
|
leftLaneVisible @7: Bool; |
||||||
|
rightLaneDepart @8: Bool; |
||||||
|
leftLaneDepart @9: Bool; |
||||||
|
|
||||||
|
enum VisualAlert { |
||||||
|
# these are the choices from the Honda |
||||||
|
# map as good as you can for your car |
||||||
|
none @0; |
||||||
|
fcw @1; |
||||||
|
steerRequired @2; |
||||||
|
brakePressed @3; |
||||||
|
wrongGear @4; |
||||||
|
seatbeltUnbuckled @5; |
||||||
|
speedTooHigh @6; |
||||||
|
} |
||||||
|
|
||||||
|
enum AudibleAlert { |
||||||
|
# these are the choices from the Honda |
||||||
|
# map as good as you can for your car |
||||||
|
none @0; |
||||||
|
chimeEngage @1; |
||||||
|
chimeDisengage @2; |
||||||
|
chimeError @3; |
||||||
|
chimeWarning1 @4; |
||||||
|
chimeWarning2 @5; |
||||||
|
chimeWarningRepeat @6; |
||||||
|
chimePrompt @7; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
# ****** car param ****** |
||||||
|
|
||||||
|
struct CarParams { |
||||||
|
carName @0 :Text; |
||||||
|
carFingerprint @1 :Text; |
||||||
|
|
||||||
|
enableGasInterceptor @2 :Bool; |
||||||
|
enableCruise @3 :Bool; |
||||||
|
enableCamera @4 :Bool; |
||||||
|
enableDsu @5 :Bool; # driving support unit |
||||||
|
enableApgs @6 :Bool; # advanced parking guidance system |
||||||
|
|
||||||
|
minEnableSpeed @7 :Float32; |
||||||
|
minSteerSpeed @8 :Float32; |
||||||
|
safetyModel @9 :SafetyModel; |
||||||
|
safetyParam @10 :Int16; |
||||||
|
|
||||||
|
steerMaxBP @11 :List(Float32); |
||||||
|
steerMaxV @12 :List(Float32); |
||||||
|
gasMaxBP @13 :List(Float32); |
||||||
|
gasMaxV @14 :List(Float32); |
||||||
|
brakeMaxBP @15 :List(Float32); |
||||||
|
brakeMaxV @16 :List(Float32); |
||||||
|
|
||||||
|
|
||||||
|
# things about the car in the manual |
||||||
|
mass @17 :Float32; # [kg] running weight |
||||||
|
wheelbase @18 :Float32; # [m] distance from rear to front axle |
||||||
|
centerToFront @19 :Float32; # [m] GC distance to front axle |
||||||
|
steerRatio @20 :Float32; # [] ratio between front wheels and steering wheel angles |
||||||
|
steerRatioRear @21 :Float32; # [] rear steering ratio wrt front steering (usually 0) |
||||||
|
|
||||||
|
# things we can derive |
||||||
|
rotationalInertia @22 :Float32; # [kg*m2] body rotational inertia |
||||||
|
tireStiffnessFront @23 :Float32; # [N/rad] front tire coeff of stiff |
||||||
|
tireStiffnessRear @24 :Float32; # [N/rad] rear tire coeff of stiff |
||||||
|
|
||||||
|
longitudinalTuning @25 :LongitudinalPIDTuning; |
||||||
|
lateralTuning :union { |
||||||
|
pid @26 :LateralPIDTuning; |
||||||
|
indi @27 :LateralINDITuning; |
||||||
|
} |
||||||
|
|
||||||
|
steerLimitAlert @28 :Bool; |
||||||
|
|
||||||
|
vEgoStopping @29 :Float32; # Speed at which the car goes into stopping state |
||||||
|
directAccelControl @30 :Bool; # Does the car have direct accel control or just gas/brake |
||||||
|
stoppingControl @31 :Bool; # Does the car allows full control even at lows speeds when stopping |
||||||
|
startAccel @32 :Float32; # Required acceleraton to overcome creep braking |
||||||
|
steerRateCost @33 :Float32; # Lateral MPC cost on steering rate |
||||||
|
steerControlType @34 :SteerControlType; |
||||||
|
radarOffCan @35 :Bool; # True when radar objects aren't visible on CAN |
||||||
|
|
||||||
|
steerActuatorDelay @36 :Float32; # Steering wheel actuator delay in seconds |
||||||
|
openpilotLongitudinalControl @37 :Bool; # is openpilot doing the longitudinal control? |
||||||
|
carVin @38 :Text; # VIN number queried during fingerprinting |
||||||
|
|
||||||
|
struct LateralPIDTuning { |
||||||
|
kpBP @0 :List(Float32); |
||||||
|
kpV @1 :List(Float32); |
||||||
|
kiBP @2 :List(Float32); |
||||||
|
kiV @3 :List(Float32); |
||||||
|
kf @4 :Float32; |
||||||
|
} |
||||||
|
|
||||||
|
struct LongitudinalPIDTuning { |
||||||
|
kpBP @0 :List(Float32); |
||||||
|
kpV @1 :List(Float32); |
||||||
|
kiBP @2 :List(Float32); |
||||||
|
kiV @3 :List(Float32); |
||||||
|
deadzoneBP @4 :List(Float32); |
||||||
|
deadzoneV @5 :List(Float32); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
struct LateralINDITuning { |
||||||
|
outerLoopGain @0 :Float32; |
||||||
|
innerLoopGain @1 :Float32; |
||||||
|
timeConstant @2 :Float32; |
||||||
|
actuatorEffectiveness @3 :Float32; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
enum SafetyModel { |
||||||
|
# does NOT match board setting |
||||||
|
noOutput @0; |
||||||
|
honda @1; |
||||||
|
toyota @2; |
||||||
|
elm327 @3; |
||||||
|
gm @4; |
||||||
|
hondaBosch @5; |
||||||
|
ford @6; |
||||||
|
cadillac @7; |
||||||
|
hyundai @8; |
||||||
|
chrysler @9; |
||||||
|
tesla @10; |
||||||
|
subaru @11; |
||||||
|
} |
||||||
|
|
||||||
|
enum SteerControlType { |
||||||
|
torque @0; |
||||||
|
angle @1; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,26 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
rm -r gen/ts |
||||||
|
rm -r gen/js |
||||||
|
|
||||||
|
mkdir gen/ts |
||||||
|
mkdir gen/js |
||||||
|
|
||||||
|
echo "Installing needed npm modules" |
||||||
|
npm i capnpc-ts capnp-ts |
||||||
|
|
||||||
|
capnpc -o node_modules/.bin/capnpc-ts:gen/ts log.capnp car.capnp |
||||||
|
capnpc -o node_modules/.bin/capnpc-ts:gen/ts car.capnp |
||||||
|
|
||||||
|
cat log.capnp | egrep '\([a-zA-Z]*\.[^\s]+\.[^s]+\)' | sed 's/^.*([a-zA-Z]*\.\([a-zA-Z.]*\)).*/\1/' | while read line |
||||||
|
do |
||||||
|
TOKEN=`echo $line | sed 's/\./_/g'` |
||||||
|
ROOT=`echo $line | sed 's/\..*$//g'` |
||||||
|
cat gen/ts/log.capnp.ts | grep '^import.*'${TOKEN} |
||||||
|
if [[ "$?" == "1" ]] |
||||||
|
then |
||||||
|
sed -i 's/^\(import {.*\)'${ROOT}'\(,*\) \(.*\)$/\1'${ROOT}', '${TOKEN}'\2 \3/' ./gen/ts/log.capnp.ts |
||||||
|
fi |
||||||
|
done |
||||||
|
|
||||||
|
tsc ./gen/ts/* --lib es2015 --outDir ./gen/js |
@ -0,0 +1,26 @@ |
|||||||
|
# Copyright (c) 2013-2014 Sandstorm Development Group, Inc. and contributors |
||||||
|
# Licensed under the MIT License: |
||||||
|
# |
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a copy |
||||||
|
# of this software and associated documentation files (the "Software"), to deal |
||||||
|
# in the Software without restriction, including without limitation the rights |
||||||
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||||
|
# copies of the Software, and to permit persons to whom the Software is |
||||||
|
# furnished to do so, subject to the following conditions: |
||||||
|
# |
||||||
|
# The above copyright notice and this permission notice shall be included in |
||||||
|
# all copies or substantial portions of the Software. |
||||||
|
# |
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||||
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||||
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||||
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||||
|
# THE SOFTWARE. |
||||||
|
|
||||||
|
@0xbdf87d7bb8304e81; |
||||||
|
$namespace("capnp::annotations"); |
||||||
|
|
||||||
|
annotation namespace(file): Text; |
||||||
|
annotation name(field, enumerant, struct, enum, interface, method, param, group, union): Text; |
@ -0,0 +1,28 @@ |
|||||||
|
# Copyright (c) 2013-2015 Sandstorm Development Group, Inc. and contributors |
||||||
|
# Licensed under the MIT License: |
||||||
|
# |
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a copy |
||||||
|
# of this software and associated documentation files (the "Software"), to deal |
||||||
|
# in the Software without restriction, including without limitation the rights |
||||||
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||||
|
# copies of the Software, and to permit persons to whom the Software is |
||||||
|
# furnished to do so, subject to the following conditions: |
||||||
|
# |
||||||
|
# The above copyright notice and this permission notice shall be included in |
||||||
|
# all copies or substantial portions of the Software. |
||||||
|
# |
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||||
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||||
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||||
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||||
|
# THE SOFTWARE. |
||||||
|
|
||||||
|
@0xc5f1af96651f70ea; |
||||||
|
|
||||||
|
annotation package @0x9ee4c8f803b3b596 (file) : Text; |
||||||
|
# Name of the package, such as "org.example.foo", in which the generated code will reside. |
||||||
|
|
||||||
|
annotation outerClassname @0x9b066bb4881f7cd3 (file) : Text; |
||||||
|
# Name of the outer class that will wrap the generated code. |
@ -0,0 +1,39 @@ |
|||||||
|
set -e |
||||||
|
echo "Installing capnp" |
||||||
|
|
||||||
|
cd /tmp |
||||||
|
VERSION=0.6.1 |
||||||
|
wget https://capnproto.org/capnproto-c++-${VERSION}.tar.gz |
||||||
|
tar xvf capnproto-c++-${VERSION}.tar.gz |
||||||
|
cd capnproto-c++-${VERSION} |
||||||
|
CXXFLAGS="-fPIC" ./configure |
||||||
|
|
||||||
|
make -j4 |
||||||
|
|
||||||
|
# manually build binaries statically |
||||||
|
g++ -std=gnu++11 -I./src -I./src -DKJ_HEADER_WARNINGS -DCAPNP_HEADER_WARNINGS -DCAPNP_INCLUDE_DIR=\"/usr/local/include\" -pthread -O2 -DNDEBUG -pthread -pthread -o .libs/capnp src/capnp/compiler/module-loader.o src/capnp/compiler/capnp.o ./.libs/libcapnpc.a ./.libs/libcapnp.a ./.libs/libkj.a -lpthread -pthread |
||||||
|
|
||||||
|
g++ -std=gnu++11 -I./src -I./src -DKJ_HEADER_WARNINGS -DCAPNP_HEADER_WARNINGS -DCAPNP_INCLUDE_DIR=\"/usr/local/include\" -pthread -O2 -DNDEBUG -pthread -pthread -o .libs/capnpc-c++ src/capnp/compiler/capnpc-c++.o ./.libs/libcapnp.a ./.libs/libkj.a -lpthread -pthread |
||||||
|
|
||||||
|
g++ -std=gnu++11 -I./src -I./src -DKJ_HEADER_WARNINGS -DCAPNP_HEADER_WARNINGS -DCAPNP_INCLUDE_DIR=\"/usr/local/include\" -pthread -O2 -DNDEBUG -pthread -pthread -o .libs/capnpc-capnp src/capnp/compiler/capnpc-capnp.o ./.libs/libcapnp.a ./.libs/libkj.a -lpthread -pthread |
||||||
|
|
||||||
|
cp .libs/capnp /usr/local/bin/ |
||||||
|
ln -s /usr/local/bin/capnp /usr/local/bin/capnpc |
||||||
|
cp .libs/capnpc-c++ /usr/local/bin/ |
||||||
|
cp .libs/capnpc-capnp /usr/local/bin/ |
||||||
|
cp .libs/*.a /usr/local/lib |
||||||
|
|
||||||
|
cd /tmp |
||||||
|
echo "Installing c-capnp" |
||||||
|
git clone https://github.com/commaai/c-capnproto.git |
||||||
|
cd c-capnproto |
||||||
|
git submodule update --init --recursive |
||||||
|
autoreconf -f -i -s |
||||||
|
CXXFLAGS="-fPIC" ./configure |
||||||
|
make -j4 |
||||||
|
|
||||||
|
# manually build binaries statically |
||||||
|
gcc -fPIC -o .libs/capnpc-c compiler/capnpc-c.o compiler/schema.capnp.o compiler/str.o ./.libs/libcapnp_c.a |
||||||
|
|
||||||
|
cp .libs/capnpc-c /usr/local/bin/ |
||||||
|
cp .libs/*.a /usr/local/lib |
@ -0,0 +1,53 @@ |
|||||||
|
using Cxx = import "./include/c++.capnp"; |
||||||
|
$Cxx.namespace("cereal"); |
||||||
|
|
||||||
|
using Java = import "./include/java.capnp"; |
||||||
|
$Java.package("ai.comma.openpilot.cereal"); |
||||||
|
$Java.outerClassname("Map"); |
||||||
|
|
||||||
|
@0xa086df597ef5d7a0; |
||||||
|
|
||||||
|
# Geometry |
||||||
|
struct Point { |
||||||
|
x @0: Float64; |
||||||
|
y @1: Float64; |
||||||
|
z @2: Float64; |
||||||
|
} |
||||||
|
|
||||||
|
struct PolyLine { |
||||||
|
points @0: List(Point); |
||||||
|
} |
||||||
|
|
||||||
|
# Map features |
||||||
|
struct Lane { |
||||||
|
id @0 :Text; |
||||||
|
|
||||||
|
leftBoundary @1 :LaneBoundary; |
||||||
|
rightBoundary @2 :LaneBoundary; |
||||||
|
|
||||||
|
leftAdjacentId @3 :Text; |
||||||
|
rightAdjacentId @4 :Text; |
||||||
|
|
||||||
|
inboundIds @5 :List(Text); |
||||||
|
outboundIds @6 :List(Text); |
||||||
|
|
||||||
|
struct LaneBoundary { |
||||||
|
polyLine @0 :PolyLine; |
||||||
|
startHeading @1 :Float32; # WRT north |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
# Map tiles |
||||||
|
struct TileSummary { |
||||||
|
version @0 :Text; |
||||||
|
updatedAt @1 :UInt64; # Millis since epoch |
||||||
|
|
||||||
|
level @2 :UInt8; |
||||||
|
x @3 :UInt16; |
||||||
|
y @4 :UInt16; |
||||||
|
} |
||||||
|
|
||||||
|
struct MapTile { |
||||||
|
summary @0 :TileSummary; |
||||||
|
lanes @1 :List(Lane); |
||||||
|
} |
Loading…
Reference in new issue