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