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