Compare commits

...

4 Commits

Author SHA1 Message Date
Vehicle Researcher a64b9aa9b8 openpilot v0.2.2 release 2017-01-10 11:10:04 -08:00
George Hotz 0138eca61d Merge pull request #40 from TheMutley/master
DBC modified to match the Vector format
2017-01-09 20:47:52 -08:00
Mutley 139a40de29 DBC modified to match the Vector format 2017-01-05 16:55:54 -05:00
Vehicle Researcher 17d9becd3c openpilot v0.2.1 release 2016-12-14 21:29:12 -08:00
45 changed files with 1521 additions and 1140 deletions
+21
View File
@@ -0,0 +1,21 @@
.DS_Store
.tags
*.pyc
.*.swp
.*.swo
.*.un~
*.o
*.d
*.so
*.a
*.clb
config.json
clcache
board/obj/
selfdrive/boardd/boardd
selfdrive/logcatd/logcatd
selfdrive/sensord/sensord
selfdrive/ui/ui
+1 -1
View File
@@ -1,4 +1,4 @@
Copyright (c) 2016, comma.ai Copyright (c) 2016, Comma.ai, Inc.
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: 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:
+12
View File
@@ -1,3 +1,15 @@
Version 0.2.2 (2017-01-10)
===========================
* Board triggers started signal on CAN messages
* Improved autoexposure
* Handle out of space, improve upload status
Version 0.2.1 (2016-12-14)
===========================
* Performance improvements, removal of more numpy
* Fix boardd process priority
* Make counter timer reset on use of steering wheel
Version 0.2 (2016-12-12) Version 0.2 (2016-12-12)
========================= =========================
* Car/Radar abstraction layers have shipped, see cereal/car.capnp * Car/Radar abstraction layers have shipped, see cereal/car.capnp
+25 -3
View File
@@ -25,7 +25,12 @@ USB_OTG_GlobalTypeDef *USBx = USB_OTG_FS;
// debug safety check: is controls allowed? // debug safety check: is controls allowed?
int controls_allowed = 0; int controls_allowed = 0;
int started = 0;
int can_live = 0, pending_can_live = 0;
// optional features
int gas_interceptor_detected = 0; int gas_interceptor_detected = 0;
int started_signal_detected = 0;
// ********************* instantiate queues ********************* // ********************* instantiate queues *********************
@@ -147,6 +152,9 @@ void CAN2_TX_IRQHandler() {
// CAN receive handlers // CAN receive handlers
void can_rx(CAN_TypeDef *CAN, int can_number) { void can_rx(CAN_TypeDef *CAN, int can_number) {
while (CAN->RF0R & CAN_RF0R_FMP0) { while (CAN->RF0R & CAN_RF0R_FMP0) {
// can is live
pending_can_live = 1;
// add to my fifo // add to my fifo
CAN_FIFOMailBox_TypeDef to_push; CAN_FIFOMailBox_TypeDef to_push;
to_push.RIR = CAN->sFIFOMailBox[0].RIR; to_push.RIR = CAN->sFIFOMailBox[0].RIR;
@@ -256,6 +264,7 @@ int get_health_pkt(void *dat) {
uint8_t started; uint8_t started;
uint8_t controls_allowed; uint8_t controls_allowed;
uint8_t gas_interceptor_detected; uint8_t gas_interceptor_detected;
uint8_t started_signal_detected;
} *health = dat; } *health = dat;
health->voltage = adc_get(ADCCHAN_VOLTAGE); health->voltage = adc_get(ADCCHAN_VOLTAGE);
#ifdef ENABLE_CURRENT_SENSOR #ifdef ENABLE_CURRENT_SENSOR
@@ -263,9 +272,12 @@ int get_health_pkt(void *dat) {
#else #else
health->current = 0; health->current = 0;
#endif #endif
health->started = (GPIOC->IDR & (1 << 13)) != 0; health->started = started;
health->controls_allowed = controls_allowed; health->controls_allowed = controls_allowed;
health->gas_interceptor_detected = gas_interceptor_detected; health->gas_interceptor_detected = gas_interceptor_detected;
health->started_signal_detected = started_signal_detected;
return sizeof(*health); return sizeof(*health);
} }
@@ -468,6 +480,9 @@ int main() {
// LED should keep on blinking all the time // LED should keep on blinking all the time
while (1) { while (1) {
can_live = pending_can_live;
pending_can_live = 0;
#ifdef DEBUG #ifdef DEBUG
puts("** blink "); puts("** blink ");
puth(can_rx_q.r_ptr); puts(" "); puth(can_rx_q.w_ptr); puts(" "); puth(can_rx_q.r_ptr); puts(" "); puth(can_rx_q.w_ptr); puts(" ");
@@ -489,14 +504,21 @@ int main() {
GPIOB->ODR &= ~(1 << 10); GPIOB->ODR &= ~(1 << 10);
delay(1000000); delay(1000000);
if (GPIOC->IDR & (1 << 13)) { // started logic
int started_signal = (GPIOC->IDR & (1 << 13)) != 0;
if (started_signal) { started_signal_detected = 1; }
if (started_signal || (!started_signal_detected && can_live)) {
started = 1;
// turn on fan at half speed // turn on fan at half speed
set_fan_speed(32768); set_fan_speed(32768);
} else { } else {
started = 0;
// turn off fan // turn off fan
set_fan_speed(0); set_fan_speed(0);
} }
} }
return 0; return 0;
+20 -16
View File
@@ -235,12 +235,12 @@ void cereal_set_CanData(const struct cereal_CanData *s, cereal_CanData_list l, i
cereal_ThermalData_ptr cereal_new_ThermalData(struct capn_segment *s) { cereal_ThermalData_ptr cereal_new_ThermalData(struct capn_segment *s) {
cereal_ThermalData_ptr p; cereal_ThermalData_ptr p;
p.p = capn_new_struct(s, 16, 0); p.p = capn_new_struct(s, 24, 0);
return p; return p;
} }
cereal_ThermalData_list cereal_new_ThermalData_list(struct capn_segment *s, int len) { cereal_ThermalData_list cereal_new_ThermalData_list(struct capn_segment *s, int len) {
cereal_ThermalData_list p; cereal_ThermalData_list p;
p.p = capn_new_list(s, len, 16, 0); p.p = capn_new_list(s, len, 24, 0);
return p; return p;
} }
void cereal_read_ThermalData(struct cereal_ThermalData *s, cereal_ThermalData_ptr p) { void cereal_read_ThermalData(struct cereal_ThermalData *s, cereal_ThermalData_ptr p) {
@@ -252,6 +252,7 @@ void cereal_read_ThermalData(struct cereal_ThermalData *s, cereal_ThermalData_pt
s->mem = capn_read16(p.p, 8); s->mem = capn_read16(p.p, 8);
s->gpu = capn_read16(p.p, 10); s->gpu = capn_read16(p.p, 10);
s->bat = capn_read32(p.p, 12); s->bat = capn_read32(p.p, 12);
s->freeSpace = capn_to_f32(capn_read32(p.p, 16));
} }
void cereal_write_ThermalData(const struct cereal_ThermalData *s, cereal_ThermalData_ptr p) { void cereal_write_ThermalData(const struct cereal_ThermalData *s, cereal_ThermalData_ptr p) {
capn_resolve(&p.p); capn_resolve(&p.p);
@@ -262,6 +263,7 @@ void cereal_write_ThermalData(const struct cereal_ThermalData *s, cereal_Thermal
capn_write16(p.p, 8, s->mem); capn_write16(p.p, 8, s->mem);
capn_write16(p.p, 10, s->gpu); capn_write16(p.p, 10, s->gpu);
capn_write32(p.p, 12, s->bat); capn_write32(p.p, 12, s->bat);
capn_write32(p.p, 16, capn_from_f32(s->freeSpace));
} }
void cereal_get_ThermalData(struct cereal_ThermalData *s, cereal_ThermalData_list l, int i) { void cereal_get_ThermalData(struct cereal_ThermalData *s, cereal_ThermalData_list l, int i) {
cereal_ThermalData_ptr p; cereal_ThermalData_ptr p;
@@ -291,6 +293,7 @@ void cereal_read_HealthData(struct cereal_HealthData *s, cereal_HealthData_ptr p
s->started = (capn_read8(p.p, 8) & 1) != 0; s->started = (capn_read8(p.p, 8) & 1) != 0;
s->controlsAllowed = (capn_read8(p.p, 8) & 2) != 0; s->controlsAllowed = (capn_read8(p.p, 8) & 2) != 0;
s->gasInterceptorDetected = (capn_read8(p.p, 8) & 4) != 0; s->gasInterceptorDetected = (capn_read8(p.p, 8) & 4) != 0;
s->startedSignalDetected = (capn_read8(p.p, 8) & 8) != 0;
} }
void cereal_write_HealthData(const struct cereal_HealthData *s, cereal_HealthData_ptr p) { void cereal_write_HealthData(const struct cereal_HealthData *s, cereal_HealthData_ptr p) {
capn_resolve(&p.p); capn_resolve(&p.p);
@@ -299,6 +302,7 @@ void cereal_write_HealthData(const struct cereal_HealthData *s, cereal_HealthDat
capn_write1(p.p, 64, s->started != 0); capn_write1(p.p, 64, s->started != 0);
capn_write1(p.p, 65, s->controlsAllowed != 0); capn_write1(p.p, 65, s->controlsAllowed != 0);
capn_write1(p.p, 66, s->gasInterceptorDetected != 0); capn_write1(p.p, 66, s->gasInterceptorDetected != 0);
capn_write1(p.p, 67, s->startedSignalDetected != 0);
} }
void cereal_get_HealthData(struct cereal_HealthData *s, cereal_HealthData_list l, int i) { void cereal_get_HealthData(struct cereal_HealthData *s, cereal_HealthData_list l, int i) {
cereal_HealthData_ptr p; cereal_HealthData_ptr p;
@@ -361,11 +365,11 @@ void cereal_read_Live20Data(struct cereal_Live20Data *s, cereal_Live20Data_ptr p
s->canMonoTimes.p = capn_getp(p.p, 3, 0); s->canMonoTimes.p = capn_getp(p.p, 3, 0);
s->mdMonoTime = capn_read64(p.p, 16); s->mdMonoTime = capn_read64(p.p, 16);
s->ftMonoTime = capn_read64(p.p, 24); s->ftMonoTime = capn_read64(p.p, 24);
s->warpMatrix.p = capn_getp(p.p, 0, 0); s->warpMatrixDEPRECATED.p = capn_getp(p.p, 0, 0);
s->angleOffset = capn_to_f32(capn_read32(p.p, 0)); s->angleOffsetDEPRECATED = capn_to_f32(capn_read32(p.p, 0));
s->calStatus = (int8_t) ((int8_t)capn_read8(p.p, 4)); s->calStatusDEPRECATED = (int8_t) ((int8_t)capn_read8(p.p, 4));
s->calCycle = (int32_t) ((int32_t)capn_read32(p.p, 12)); s->calCycleDEPRECATED = (int32_t) ((int32_t)capn_read32(p.p, 12));
s->calPerc = (int8_t) ((int8_t)capn_read8(p.p, 5)); s->calPercDEPRECATED = (int8_t) ((int8_t)capn_read8(p.p, 5));
s->leadOne.p = capn_getp(p.p, 1, 0); s->leadOne.p = capn_getp(p.p, 1, 0);
s->leadTwo.p = capn_getp(p.p, 2, 0); s->leadTwo.p = capn_getp(p.p, 2, 0);
s->cumLagMs = capn_to_f32(capn_read32(p.p, 8)); s->cumLagMs = capn_to_f32(capn_read32(p.p, 8));
@@ -375,11 +379,11 @@ void cereal_write_Live20Data(const struct cereal_Live20Data *s, cereal_Live20Dat
capn_setp(p.p, 3, s->canMonoTimes.p); capn_setp(p.p, 3, s->canMonoTimes.p);
capn_write64(p.p, 16, s->mdMonoTime); capn_write64(p.p, 16, s->mdMonoTime);
capn_write64(p.p, 24, s->ftMonoTime); capn_write64(p.p, 24, s->ftMonoTime);
capn_setp(p.p, 0, s->warpMatrix.p); capn_setp(p.p, 0, s->warpMatrixDEPRECATED.p);
capn_write32(p.p, 0, capn_from_f32(s->angleOffset)); capn_write32(p.p, 0, capn_from_f32(s->angleOffsetDEPRECATED));
capn_write8(p.p, 4, (uint8_t) (s->calStatus)); capn_write8(p.p, 4, (uint8_t) (s->calStatusDEPRECATED));
capn_write32(p.p, 12, (uint32_t) (s->calCycle)); capn_write32(p.p, 12, (uint32_t) (s->calCycleDEPRECATED));
capn_write8(p.p, 5, (uint8_t) (s->calPerc)); capn_write8(p.p, 5, (uint8_t) (s->calPercDEPRECATED));
capn_setp(p.p, 1, s->leadOne.p); capn_setp(p.p, 1, s->leadOne.p);
capn_setp(p.p, 2, s->leadTwo.p); capn_setp(p.p, 2, s->leadTwo.p);
capn_write32(p.p, 8, capn_from_f32(s->cumLagMs)); capn_write32(p.p, 8, capn_from_f32(s->cumLagMs));
@@ -545,7 +549,7 @@ void cereal_read_Live100Data(struct cereal_Live100Data *s, cereal_Live100Data_pt
s->l20MonoTime = capn_read64(p.p, 72); s->l20MonoTime = capn_read64(p.p, 72);
s->mdMonoTime = capn_read64(p.p, 80); s->mdMonoTime = capn_read64(p.p, 80);
s->vEgo = capn_to_f32(capn_read32(p.p, 0)); s->vEgo = capn_to_f32(capn_read32(p.p, 0));
s->aEgo = capn_to_f32(capn_read32(p.p, 4)); s->aEgoDEPRECATED = capn_to_f32(capn_read32(p.p, 4));
s->vPid = capn_to_f32(capn_read32(p.p, 8)); s->vPid = capn_to_f32(capn_read32(p.p, 8));
s->vTargetLead = capn_to_f32(capn_read32(p.p, 12)); s->vTargetLead = capn_to_f32(capn_read32(p.p, 12));
s->upAccelCmd = capn_to_f32(capn_read32(p.p, 16)); s->upAccelCmd = capn_to_f32(capn_read32(p.p, 16));
@@ -558,7 +562,7 @@ void cereal_read_Live100Data(struct cereal_Live100Data *s, cereal_Live100Data_pt
s->aTargetMax = capn_to_f32(capn_read32(p.p, 44)); s->aTargetMax = capn_to_f32(capn_read32(p.p, 44));
s->jerkFactor = capn_to_f32(capn_read32(p.p, 48)); s->jerkFactor = capn_to_f32(capn_read32(p.p, 48));
s->angleSteers = capn_to_f32(capn_read32(p.p, 52)); s->angleSteers = capn_to_f32(capn_read32(p.p, 52));
s->hudLead = (int32_t) ((int32_t)capn_read32(p.p, 56)); s->hudLeadDEPRECATED = (int32_t) ((int32_t)capn_read32(p.p, 56));
s->cumLagMs = capn_to_f32(capn_read32(p.p, 60)); s->cumLagMs = capn_to_f32(capn_read32(p.p, 60));
s->enabled = (capn_read8(p.p, 88) & 1) != 0; s->enabled = (capn_read8(p.p, 88) & 1) != 0;
s->steerOverride = (capn_read8(p.p, 88) & 2) != 0; s->steerOverride = (capn_read8(p.p, 88) & 2) != 0;
@@ -575,7 +579,7 @@ void cereal_write_Live100Data(const struct cereal_Live100Data *s, cereal_Live100
capn_write64(p.p, 72, s->l20MonoTime); capn_write64(p.p, 72, s->l20MonoTime);
capn_write64(p.p, 80, s->mdMonoTime); capn_write64(p.p, 80, s->mdMonoTime);
capn_write32(p.p, 0, capn_from_f32(s->vEgo)); capn_write32(p.p, 0, capn_from_f32(s->vEgo));
capn_write32(p.p, 4, capn_from_f32(s->aEgo)); capn_write32(p.p, 4, capn_from_f32(s->aEgoDEPRECATED));
capn_write32(p.p, 8, capn_from_f32(s->vPid)); capn_write32(p.p, 8, capn_from_f32(s->vPid));
capn_write32(p.p, 12, capn_from_f32(s->vTargetLead)); capn_write32(p.p, 12, capn_from_f32(s->vTargetLead));
capn_write32(p.p, 16, capn_from_f32(s->upAccelCmd)); capn_write32(p.p, 16, capn_from_f32(s->upAccelCmd));
@@ -588,7 +592,7 @@ void cereal_write_Live100Data(const struct cereal_Live100Data *s, cereal_Live100
capn_write32(p.p, 44, capn_from_f32(s->aTargetMax)); capn_write32(p.p, 44, capn_from_f32(s->aTargetMax));
capn_write32(p.p, 48, capn_from_f32(s->jerkFactor)); capn_write32(p.p, 48, capn_from_f32(s->jerkFactor));
capn_write32(p.p, 52, capn_from_f32(s->angleSteers)); capn_write32(p.p, 52, capn_from_f32(s->angleSteers));
capn_write32(p.p, 56, (uint32_t) (s->hudLead)); capn_write32(p.p, 56, (uint32_t) (s->hudLeadDEPRECATED));
capn_write32(p.p, 60, capn_from_f32(s->cumLagMs)); capn_write32(p.p, 60, capn_from_f32(s->cumLagMs));
capn_write1(p.p, 704, s->enabled != 0); capn_write1(p.p, 704, s->enabled != 0);
capn_write1(p.p, 705, s->steerOverride != 0); capn_write1(p.p, 705, s->steerOverride != 0);
+11 -9
View File
@@ -193,13 +193,14 @@ struct cereal_ThermalData {
uint16_t mem; uint16_t mem;
uint16_t gpu; uint16_t gpu;
uint32_t bat; uint32_t bat;
float freeSpace;
}; };
static const size_t cereal_ThermalData_word_count = 2; static const size_t cereal_ThermalData_word_count = 3;
static const size_t cereal_ThermalData_pointer_count = 0; static const size_t cereal_ThermalData_pointer_count = 0;
static const size_t cereal_ThermalData_struct_bytes_count = 16; static const size_t cereal_ThermalData_struct_bytes_count = 24;
struct cereal_HealthData { struct cereal_HealthData {
uint32_t voltage; uint32_t voltage;
@@ -207,6 +208,7 @@ struct cereal_HealthData {
unsigned started : 1; unsigned started : 1;
unsigned controlsAllowed : 1; unsigned controlsAllowed : 1;
unsigned gasInterceptorDetected : 1; unsigned gasInterceptorDetected : 1;
unsigned startedSignalDetected : 1;
}; };
static const size_t cereal_HealthData_word_count = 2; static const size_t cereal_HealthData_word_count = 2;
@@ -232,11 +234,11 @@ struct cereal_Live20Data {
capn_list64 canMonoTimes; capn_list64 canMonoTimes;
uint64_t mdMonoTime; uint64_t mdMonoTime;
uint64_t ftMonoTime; uint64_t ftMonoTime;
capn_list32 warpMatrix; capn_list32 warpMatrixDEPRECATED;
float angleOffset; float angleOffsetDEPRECATED;
int8_t calStatus; int8_t calStatusDEPRECATED;
int32_t calCycle; int32_t calCycleDEPRECATED;
int8_t calPerc; int8_t calPercDEPRECATED;
cereal_Live20Data_LeadData_ptr leadOne; cereal_Live20Data_LeadData_ptr leadOne;
cereal_Live20Data_LeadData_ptr leadTwo; cereal_Live20Data_LeadData_ptr leadTwo;
float cumLagMs; float cumLagMs;
@@ -307,7 +309,7 @@ struct cereal_Live100Data {
uint64_t l20MonoTime; uint64_t l20MonoTime;
uint64_t mdMonoTime; uint64_t mdMonoTime;
float vEgo; float vEgo;
float aEgo; float aEgoDEPRECATED;
float vPid; float vPid;
float vTargetLead; float vTargetLead;
float upAccelCmd; float upAccelCmd;
@@ -320,7 +322,7 @@ struct cereal_Live100Data {
float aTargetMax; float aTargetMax;
float jerkFactor; float jerkFactor;
float angleSteers; float angleSteers;
int32_t hudLead; int32_t hudLeadDEPRECATED;
float cumLagMs; float cumLagMs;
unsigned enabled : 1; unsigned enabled : 1;
unsigned steerOverride : 1; unsigned steerOverride : 1;
+254 -212
View File
@@ -641,73 +641,80 @@ const ::capnp::_::RawSchema s_8785009a964c7c59 = {
0, 4, i_8785009a964c7c59, nullptr, nullptr, { &s_8785009a964c7c59, nullptr, nullptr, 0, 0, nullptr } 0, 4, i_8785009a964c7c59, nullptr, nullptr, { &s_8785009a964c7c59, nullptr, nullptr, 0, 0, nullptr }
}; };
#endif // !CAPNP_LITE #endif // !CAPNP_LITE
static const ::capnp::_::AlignedData<122> b_8d8231a40b7fe6e0 = { static const ::capnp::_::AlignedData<138> b_8d8231a40b7fe6e0 = {
{ 0, 0, 0, 0, 5, 0, 6, 0, { 0, 0, 0, 0, 5, 0, 6, 0,
224, 230, 127, 11, 164, 49, 130, 141, 224, 230, 127, 11, 164, 49, 130, 141,
10, 0, 0, 0, 1, 0, 2, 0, 10, 0, 0, 0, 1, 0, 3, 0,
91, 40, 164, 37, 126, 241, 177, 243, 91, 40, 164, 37, 126, 241, 177, 243,
0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
21, 0, 0, 0, 178, 0, 0, 0, 21, 0, 0, 0, 178, 0, 0, 0,
29, 0, 0, 0, 7, 0, 0, 0, 29, 0, 0, 0, 7, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
25, 0, 0, 0, 143, 1, 0, 0, 25, 0, 0, 0, 199, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
108, 111, 103, 46, 99, 97, 112, 110, 108, 111, 103, 46, 99, 97, 112, 110,
112, 58, 84, 104, 101, 114, 109, 97, 112, 58, 84, 104, 101, 114, 109, 97,
108, 68, 97, 116, 97, 0, 0, 0, 108, 68, 97, 116, 97, 0, 0, 0,
0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0,
28, 0, 0, 0, 3, 0, 4, 0, 32, 0, 0, 0, 3, 0, 4, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
181, 0, 0, 0, 42, 0, 0, 0, 209, 0, 0, 0, 42, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
176, 0, 0, 0, 3, 0, 1, 0, 204, 0, 0, 0, 3, 0, 1, 0,
188, 0, 0, 0, 2, 0, 1, 0, 216, 0, 0, 0, 2, 0, 1, 0,
1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
185, 0, 0, 0, 42, 0, 0, 0, 213, 0, 0, 0, 42, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
180, 0, 0, 0, 3, 0, 1, 0, 208, 0, 0, 0, 3, 0, 1, 0,
192, 0, 0, 0, 2, 0, 1, 0, 220, 0, 0, 0, 2, 0, 1, 0,
2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0,
0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
189, 0, 0, 0, 42, 0, 0, 0, 217, 0, 0, 0, 42, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
184, 0, 0, 0, 3, 0, 1, 0, 212, 0, 0, 0, 3, 0, 1, 0,
196, 0, 0, 0, 2, 0, 1, 0, 224, 0, 0, 0, 2, 0, 1, 0,
3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0,
0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
193, 0, 0, 0, 42, 0, 0, 0, 221, 0, 0, 0, 42, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
188, 0, 0, 0, 3, 0, 1, 0, 216, 0, 0, 0, 3, 0, 1, 0,
200, 0, 0, 0, 2, 0, 1, 0, 228, 0, 0, 0, 2, 0, 1, 0,
4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0,
0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
197, 0, 0, 0, 34, 0, 0, 0, 225, 0, 0, 0, 34, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
192, 0, 0, 0, 3, 0, 1, 0, 220, 0, 0, 0, 3, 0, 1, 0,
204, 0, 0, 0, 2, 0, 1, 0, 232, 0, 0, 0, 2, 0, 1, 0,
5, 0, 0, 0, 5, 0, 0, 0, 5, 0, 0, 0, 5, 0, 0, 0,
0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
201, 0, 0, 0, 34, 0, 0, 0, 229, 0, 0, 0, 34, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
196, 0, 0, 0, 3, 0, 1, 0, 224, 0, 0, 0, 3, 0, 1, 0,
208, 0, 0, 0, 2, 0, 1, 0, 236, 0, 0, 0, 2, 0, 1, 0,
6, 0, 0, 0, 3, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 0,
0, 0, 1, 0, 6, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
205, 0, 0, 0, 34, 0, 0, 0, 233, 0, 0, 0, 34, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
200, 0, 0, 0, 3, 0, 1, 0, 228, 0, 0, 0, 3, 0, 1, 0,
212, 0, 0, 0, 2, 0, 1, 0, 240, 0, 0, 0, 2, 0, 1, 0,
7, 0, 0, 0, 4, 0, 0, 0,
0, 0, 1, 0, 7, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
237, 0, 0, 0, 82, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
236, 0, 0, 0, 3, 0, 1, 0,
248, 0, 0, 0, 2, 0, 1, 0,
99, 112, 117, 48, 0, 0, 0, 0, 99, 112, 117, 48, 0, 0, 0, 0,
7, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -762,19 +769,28 @@ static const ::capnp::_::AlignedData<122> b_8d8231a40b7fe6e0 = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
102, 114, 101, 101, 83, 112, 97, 99,
101, 0, 0, 0, 0, 0, 0, 0,
10, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
10, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, } 0, 0, 0, 0, 0, 0, 0, 0, }
}; };
::capnp::word const* const bp_8d8231a40b7fe6e0 = b_8d8231a40b7fe6e0.words; ::capnp::word const* const bp_8d8231a40b7fe6e0 = b_8d8231a40b7fe6e0.words;
#if !CAPNP_LITE #if !CAPNP_LITE
static const uint16_t m_8d8231a40b7fe6e0[] = {6, 0, 1, 2, 3, 5, 4}; static const uint16_t m_8d8231a40b7fe6e0[] = {6, 0, 1, 2, 3, 7, 5, 4};
static const uint16_t i_8d8231a40b7fe6e0[] = {0, 1, 2, 3, 4, 5, 6}; static const uint16_t i_8d8231a40b7fe6e0[] = {0, 1, 2, 3, 4, 5, 6, 7};
const ::capnp::_::RawSchema s_8d8231a40b7fe6e0 = { const ::capnp::_::RawSchema s_8d8231a40b7fe6e0 = {
0x8d8231a40b7fe6e0, b_8d8231a40b7fe6e0.words, 122, nullptr, m_8d8231a40b7fe6e0, 0x8d8231a40b7fe6e0, b_8d8231a40b7fe6e0.words, 138, nullptr, m_8d8231a40b7fe6e0,
0, 7, i_8d8231a40b7fe6e0, nullptr, nullptr, { &s_8d8231a40b7fe6e0, nullptr, nullptr, 0, 0, nullptr } 0, 8, i_8d8231a40b7fe6e0, nullptr, nullptr, { &s_8d8231a40b7fe6e0, nullptr, nullptr, 0, 0, nullptr }
}; };
#endif // !CAPNP_LITE #endif // !CAPNP_LITE
static const ::capnp::_::AlignedData<95> b_cfa2b0c2c82af1e4 = { static const ::capnp::_::AlignedData<112> b_cfa2b0c2c82af1e4 = {
{ 0, 0, 0, 0, 5, 0, 6, 0, { 0, 0, 0, 0, 5, 0, 6, 0,
228, 241, 42, 200, 194, 176, 162, 207, 228, 241, 42, 200, 194, 176, 162, 207,
10, 0, 0, 0, 1, 0, 2, 0, 10, 0, 0, 0, 1, 0, 2, 0,
@@ -784,49 +800,56 @@ static const ::capnp::_::AlignedData<95> b_cfa2b0c2c82af1e4 = {
21, 0, 0, 0, 170, 0, 0, 0, 21, 0, 0, 0, 170, 0, 0, 0,
29, 0, 0, 0, 7, 0, 0, 0, 29, 0, 0, 0, 7, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
25, 0, 0, 0, 31, 1, 0, 0, 25, 0, 0, 0, 87, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
108, 111, 103, 46, 99, 97, 112, 110, 108, 111, 103, 46, 99, 97, 112, 110,
112, 58, 72, 101, 97, 108, 116, 104, 112, 58, 72, 101, 97, 108, 116, 104,
68, 97, 116, 97, 0, 0, 0, 0, 68, 97, 116, 97, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0,
20, 0, 0, 0, 3, 0, 4, 0, 24, 0, 0, 0, 3, 0, 4, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
125, 0, 0, 0, 66, 0, 0, 0, 153, 0, 0, 0, 66, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
120, 0, 0, 0, 3, 0, 1, 0,
132, 0, 0, 0, 2, 0, 1, 0,
1, 0, 0, 0, 1, 0, 0, 0,
0, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
129, 0, 0, 0, 66, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
124, 0, 0, 0, 3, 0, 1, 0,
136, 0, 0, 0, 2, 0, 1, 0,
2, 0, 0, 0, 64, 0, 0, 0,
0, 0, 1, 0, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
133, 0, 0, 0, 66, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
128, 0, 0, 0, 3, 0, 1, 0,
140, 0, 0, 0, 2, 0, 1, 0,
3, 0, 0, 0, 65, 0, 0, 0,
0, 0, 1, 0, 3, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
137, 0, 0, 0, 130, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
136, 0, 0, 0, 3, 0, 1, 0,
148, 0, 0, 0, 2, 0, 1, 0,
4, 0, 0, 0, 66, 0, 0, 0,
0, 0, 1, 0, 4, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
145, 0, 0, 0, 186, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
148, 0, 0, 0, 3, 0, 1, 0, 148, 0, 0, 0, 3, 0, 1, 0,
160, 0, 0, 0, 2, 0, 1, 0, 160, 0, 0, 0, 2, 0, 1, 0,
1, 0, 0, 0, 1, 0, 0, 0,
0, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
157, 0, 0, 0, 66, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
152, 0, 0, 0, 3, 0, 1, 0,
164, 0, 0, 0, 2, 0, 1, 0,
2, 0, 0, 0, 64, 0, 0, 0,
0, 0, 1, 0, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
161, 0, 0, 0, 66, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
156, 0, 0, 0, 3, 0, 1, 0,
168, 0, 0, 0, 2, 0, 1, 0,
3, 0, 0, 0, 65, 0, 0, 0,
0, 0, 1, 0, 3, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
165, 0, 0, 0, 130, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
164, 0, 0, 0, 3, 0, 1, 0,
176, 0, 0, 0, 2, 0, 1, 0,
4, 0, 0, 0, 66, 0, 0, 0,
0, 0, 1, 0, 4, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
173, 0, 0, 0, 186, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
176, 0, 0, 0, 3, 0, 1, 0,
188, 0, 0, 0, 2, 0, 1, 0,
5, 0, 0, 0, 67, 0, 0, 0,
0, 0, 1, 0, 5, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
185, 0, 0, 0, 178, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
188, 0, 0, 0, 3, 0, 1, 0,
200, 0, 0, 0, 2, 0, 1, 0,
118, 111, 108, 116, 97, 103, 101, 0, 118, 111, 108, 116, 97, 103, 101, 0,
8, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -863,6 +886,16 @@ static const ::capnp::_::AlignedData<95> b_cfa2b0c2c82af1e4 = {
103, 97, 115, 73, 110, 116, 101, 114, 103, 97, 115, 73, 110, 116, 101, 114,
99, 101, 112, 116, 111, 114, 68, 101, 99, 101, 112, 116, 111, 114, 68, 101,
116, 101, 99, 116, 101, 100, 0, 0, 116, 101, 99, 116, 101, 100, 0, 0,
1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
115, 116, 97, 114, 116, 101, 100, 83,
105, 103, 110, 97, 108, 68, 101, 116,
101, 99, 116, 101, 100, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -873,11 +906,11 @@ static const ::capnp::_::AlignedData<95> b_cfa2b0c2c82af1e4 = {
}; };
::capnp::word const* const bp_cfa2b0c2c82af1e4 = b_cfa2b0c2c82af1e4.words; ::capnp::word const* const bp_cfa2b0c2c82af1e4 = b_cfa2b0c2c82af1e4.words;
#if !CAPNP_LITE #if !CAPNP_LITE
static const uint16_t m_cfa2b0c2c82af1e4[] = {3, 1, 4, 2, 0}; static const uint16_t m_cfa2b0c2c82af1e4[] = {3, 1, 4, 2, 5, 0};
static const uint16_t i_cfa2b0c2c82af1e4[] = {0, 1, 2, 3, 4}; static const uint16_t i_cfa2b0c2c82af1e4[] = {0, 1, 2, 3, 4, 5};
const ::capnp::_::RawSchema s_cfa2b0c2c82af1e4 = { const ::capnp::_::RawSchema s_cfa2b0c2c82af1e4 = {
0xcfa2b0c2c82af1e4, b_cfa2b0c2c82af1e4.words, 95, nullptr, m_cfa2b0c2c82af1e4, 0xcfa2b0c2c82af1e4, b_cfa2b0c2c82af1e4.words, 112, nullptr, m_cfa2b0c2c82af1e4,
0, 5, i_cfa2b0c2c82af1e4, nullptr, nullptr, { &s_cfa2b0c2c82af1e4, nullptr, nullptr, 0, 0, nullptr } 0, 6, i_cfa2b0c2c82af1e4, nullptr, nullptr, { &s_cfa2b0c2c82af1e4, nullptr, nullptr, 0, 0, nullptr }
}; };
#endif // !CAPNP_LITE #endif // !CAPNP_LITE
static const ::capnp::_::AlignedData<81> b_c08240f996aefced = { static const ::capnp::_::AlignedData<81> b_c08240f996aefced = {
@@ -972,7 +1005,7 @@ const ::capnp::_::RawSchema s_c08240f996aefced = {
0, 4, i_c08240f996aefced, nullptr, nullptr, { &s_c08240f996aefced, nullptr, nullptr, 0, 0, nullptr } 0, 4, i_c08240f996aefced, nullptr, nullptr, { &s_c08240f996aefced, nullptr, nullptr, 0, 0, nullptr }
}; };
#endif // !CAPNP_LITE #endif // !CAPNP_LITE
static const ::capnp::_::AlignedData<202> b_9a185389d6fdd05f = { static const ::capnp::_::AlignedData<208> b_9a185389d6fdd05f = {
{ 0, 0, 0, 0, 5, 0, 6, 0, { 0, 0, 0, 0, 5, 0, 6, 0,
95, 208, 253, 214, 137, 83, 24, 154, 95, 208, 253, 214, 137, 83, 24, 154,
10, 0, 0, 0, 1, 0, 4, 0, 10, 0, 0, 0, 1, 0, 4, 0,
@@ -997,82 +1030,83 @@ static const ::capnp::_::AlignedData<202> b_9a185389d6fdd05f = {
3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
37, 1, 0, 0, 90, 0, 0, 0, 37, 1, 0, 0, 170, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
36, 1, 0, 0, 3, 0, 1, 0, 40, 1, 0, 0, 3, 0, 1, 0,
64, 1, 0, 0, 2, 0, 1, 0, 68, 1, 0, 0, 2, 0, 1, 0,
4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
61, 1, 0, 0, 98, 0, 0, 0, 65, 1, 0, 0, 178, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
60, 1, 0, 0, 3, 0, 1, 0,
72, 1, 0, 0, 2, 0, 1, 0,
5, 0, 0, 0, 4, 0, 0, 0,
0, 0, 1, 0, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
69, 1, 0, 0, 82, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
68, 1, 0, 0, 3, 0, 1, 0, 68, 1, 0, 0, 3, 0, 1, 0,
80, 1, 0, 0, 2, 0, 1, 0, 80, 1, 0, 0, 2, 0, 1, 0,
5, 0, 0, 0, 4, 0, 0, 0,
0, 0, 1, 0, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
77, 1, 0, 0, 162, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
80, 1, 0, 0, 3, 0, 1, 0,
92, 1, 0, 0, 2, 0, 1, 0,
8, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0,
0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
77, 1, 0, 0, 66, 0, 0, 0, 89, 1, 0, 0, 66, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
72, 1, 0, 0, 3, 0, 1, 0,
84, 1, 0, 0, 2, 0, 1, 0,
9, 0, 0, 0, 2, 0, 0, 0,
0, 0, 1, 0, 4, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
81, 1, 0, 0, 66, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
76, 1, 0, 0, 3, 0, 1, 0,
88, 1, 0, 0, 2, 0, 1, 0,
10, 0, 0, 0, 2, 0, 0, 0,
0, 0, 1, 0, 5, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
85, 1, 0, 0, 74, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
84, 1, 0, 0, 3, 0, 1, 0, 84, 1, 0, 0, 3, 0, 1, 0,
96, 1, 0, 0, 2, 0, 1, 0, 96, 1, 0, 0, 2, 0, 1, 0,
9, 0, 0, 0, 2, 0, 0, 0,
0, 0, 1, 0, 4, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
93, 1, 0, 0, 66, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
88, 1, 0, 0, 3, 0, 1, 0,
100, 1, 0, 0, 2, 0, 1, 0,
10, 0, 0, 0, 2, 0, 0, 0,
0, 0, 1, 0, 5, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
97, 1, 0, 0, 74, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
96, 1, 0, 0, 3, 0, 1, 0,
108, 1, 0, 0, 2, 0, 1, 0,
1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0,
0, 0, 1, 0, 6, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
93, 1, 0, 0, 90, 0, 0, 0, 105, 1, 0, 0, 90, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
92, 1, 0, 0, 3, 0, 1, 0, 104, 1, 0, 0, 3, 0, 1, 0,
104, 1, 0, 0, 2, 0, 1, 0, 116, 1, 0, 0, 2, 0, 1, 0,
2, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0,
0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
101, 1, 0, 0, 90, 0, 0, 0, 113, 1, 0, 0, 90, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
100, 1, 0, 0, 3, 0, 1, 0,
112, 1, 0, 0, 2, 0, 1, 0,
6, 0, 0, 0, 3, 0, 0, 0,
0, 0, 1, 0, 8, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
109, 1, 0, 0, 74, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
108, 1, 0, 0, 3, 0, 1, 0,
120, 1, 0, 0, 2, 0, 1, 0,
7, 0, 0, 0, 5, 0, 0, 0,
0, 0, 1, 0, 9, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
117, 1, 0, 0, 66, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
112, 1, 0, 0, 3, 0, 1, 0, 112, 1, 0, 0, 3, 0, 1, 0,
124, 1, 0, 0, 2, 0, 1, 0, 124, 1, 0, 0, 2, 0, 1, 0,
6, 0, 0, 0, 3, 0, 0, 0,
0, 0, 1, 0, 8, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
121, 1, 0, 0, 154, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
124, 1, 0, 0, 3, 0, 1, 0,
136, 1, 0, 0, 2, 0, 1, 0,
7, 0, 0, 0, 5, 0, 0, 0,
0, 0, 1, 0, 9, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
133, 1, 0, 0, 146, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
136, 1, 0, 0, 3, 0, 1, 0,
148, 1, 0, 0, 2, 0, 1, 0,
0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,
0, 0, 1, 0, 10, 0, 0, 0, 0, 0, 1, 0, 10, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
121, 1, 0, 0, 106, 0, 0, 0, 145, 1, 0, 0, 106, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
120, 1, 0, 0, 3, 0, 1, 0, 144, 1, 0, 0, 3, 0, 1, 0,
148, 1, 0, 0, 2, 0, 1, 0, 172, 1, 0, 0, 2, 0, 1, 0,
119, 97, 114, 112, 77, 97, 116, 114, 119, 97, 114, 112, 77, 97, 116, 114,
105, 120, 0, 0, 0, 0, 0, 0, 105, 120, 68, 69, 80, 82, 69, 67,
65, 84, 69, 68, 0, 0, 0, 0,
14, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1085,7 +1119,8 @@ static const ::capnp::_::AlignedData<202> b_9a185389d6fdd05f = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
97, 110, 103, 108, 101, 79, 102, 102, 97, 110, 103, 108, 101, 79, 102, 102,
115, 101, 116, 0, 0, 0, 0, 0, 115, 101, 116, 68, 69, 80, 82, 69,
67, 65, 84, 69, 68, 0, 0, 0,
10, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1094,7 +1129,8 @@ static const ::capnp::_::AlignedData<202> b_9a185389d6fdd05f = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
99, 97, 108, 83, 116, 97, 116, 117, 99, 97, 108, 83, 116, 97, 116, 117,
115, 0, 0, 0, 0, 0, 0, 0, 115, 68, 69, 80, 82, 69, 67, 65,
84, 69, 68, 0, 0, 0, 0, 0,
2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1146,7 +1182,8 @@ static const ::capnp::_::AlignedData<202> b_9a185389d6fdd05f = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
99, 97, 108, 67, 121, 99, 108, 101, 99, 97, 108, 67, 121, 99, 108, 101,
0, 0, 0, 0, 0, 0, 0, 0, 68, 69, 80, 82, 69, 67, 65, 84,
69, 68, 0, 0, 0, 0, 0, 0,
4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1154,7 +1191,9 @@ static const ::capnp::_::AlignedData<202> b_9a185389d6fdd05f = {
4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
99, 97, 108, 80, 101, 114, 99, 0, 99, 97, 108, 80, 101, 114, 99, 68,
69, 80, 82, 69, 67, 65, 84, 69,
68, 0, 0, 0, 0, 0, 0, 0,
2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1184,7 +1223,7 @@ static const ::capnp::_::RawSchema* const d_9a185389d6fdd05f[] = {
static const uint16_t m_9a185389d6fdd05f[] = {1, 8, 9, 2, 10, 5, 7, 3, 4, 6, 0}; static const uint16_t m_9a185389d6fdd05f[] = {1, 8, 9, 2, 10, 5, 7, 3, 4, 6, 0};
static const uint16_t i_9a185389d6fdd05f[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; static const uint16_t i_9a185389d6fdd05f[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
const ::capnp::_::RawSchema s_9a185389d6fdd05f = { const ::capnp::_::RawSchema s_9a185389d6fdd05f = {
0x9a185389d6fdd05f, b_9a185389d6fdd05f.words, 202, d_9a185389d6fdd05f, m_9a185389d6fdd05f, 0x9a185389d6fdd05f, b_9a185389d6fdd05f.words, 208, d_9a185389d6fdd05f, m_9a185389d6fdd05f,
1, 11, i_9a185389d6fdd05f, nullptr, nullptr, { &s_9a185389d6fdd05f, nullptr, nullptr, 0, 0, nullptr } 1, 11, i_9a185389d6fdd05f, nullptr, nullptr, { &s_9a185389d6fdd05f, nullptr, nullptr, 0, 0, nullptr }
}; };
#endif // !CAPNP_LITE #endif // !CAPNP_LITE
@@ -1675,7 +1714,7 @@ const ::capnp::_::RawSchema s_8faa644732dec251 = {
0, 10, i_8faa644732dec251, nullptr, nullptr, { &s_8faa644732dec251, nullptr, nullptr, 0, 0, nullptr } 0, 10, i_8faa644732dec251, nullptr, nullptr, { &s_8faa644732dec251, nullptr, nullptr, 0, 0, nullptr }
}; };
#endif // !CAPNP_LITE #endif // !CAPNP_LITE
static const ::capnp::_::AlignedData<443> b_97ff69c53601abf1 = { static const ::capnp::_::AlignedData<446> b_97ff69c53601abf1 = {
{ 0, 0, 0, 0, 5, 0, 6, 0, { 0, 0, 0, 0, 5, 0, 6, 0,
241, 171, 1, 54, 197, 105, 255, 151, 241, 171, 1, 54, 197, 105, 255, 151,
10, 0, 0, 0, 1, 0, 13, 0, 10, 0, 0, 0, 1, 0, 13, 0,
@@ -1703,185 +1742,185 @@ static const ::capnp::_::AlignedData<443> b_97ff69c53601abf1 = {
5, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 1, 0, 0, 0,
0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
233, 2, 0, 0, 42, 0, 0, 0, 233, 2, 0, 0, 122, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
228, 2, 0, 0, 3, 0, 1, 0,
240, 2, 0, 0, 2, 0, 1, 0,
6, 0, 0, 0, 2, 0, 0, 0,
0, 0, 1, 0, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
237, 2, 0, 0, 42, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
232, 2, 0, 0, 3, 0, 1, 0, 232, 2, 0, 0, 3, 0, 1, 0,
244, 2, 0, 0, 2, 0, 1, 0, 244, 2, 0, 0, 2, 0, 1, 0,
6, 0, 0, 0, 2, 0, 0, 0,
0, 0, 1, 0, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
241, 2, 0, 0, 42, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
236, 2, 0, 0, 3, 0, 1, 0,
248, 2, 0, 0, 2, 0, 1, 0,
7, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0, 3, 0, 0, 0,
0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
241, 2, 0, 0, 98, 0, 0, 0, 245, 2, 0, 0, 98, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
240, 2, 0, 0, 3, 0, 1, 0, 244, 2, 0, 0, 3, 0, 1, 0,
252, 2, 0, 0, 2, 0, 1, 0, 0, 3, 0, 0, 2, 0, 1, 0,
8, 0, 0, 0, 4, 0, 0, 0, 8, 0, 0, 0, 4, 0, 0, 0,
0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
249, 2, 0, 0, 90, 0, 0, 0, 253, 2, 0, 0, 90, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
248, 2, 0, 0, 3, 0, 1, 0, 252, 2, 0, 0, 3, 0, 1, 0,
4, 3, 0, 0, 2, 0, 1, 0, 8, 3, 0, 0, 2, 0, 1, 0,
9, 0, 0, 0, 5, 0, 0, 0, 9, 0, 0, 0, 5, 0, 0, 0,
0, 0, 1, 0, 5, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 3, 0, 0, 90, 0, 0, 0, 5, 3, 0, 0, 90, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 3, 0, 0, 3, 0, 1, 0,
12, 3, 0, 0, 2, 0, 1, 0,
10, 0, 0, 0, 6, 0, 0, 0,
0, 0, 1, 0, 6, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
9, 3, 0, 0, 66, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
4, 3, 0, 0, 3, 0, 1, 0, 4, 3, 0, 0, 3, 0, 1, 0,
16, 3, 0, 0, 2, 0, 1, 0, 16, 3, 0, 0, 2, 0, 1, 0,
11, 0, 0, 0, 7, 0, 0, 0, 10, 0, 0, 0, 6, 0, 0, 0,
0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
13, 3, 0, 0, 42, 0, 0, 0, 13, 3, 0, 0, 66, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8, 3, 0, 0, 3, 0, 1, 0, 8, 3, 0, 0, 3, 0, 1, 0,
20, 3, 0, 0, 2, 0, 1, 0, 20, 3, 0, 0, 2, 0, 1, 0,
12, 0, 0, 0, 8, 0, 0, 0, 11, 0, 0, 0, 7, 0, 0, 0,
0, 0, 1, 0, 8, 0, 0, 0, 0, 0, 1, 0, 7, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
17, 3, 0, 0, 66, 0, 0, 0, 17, 3, 0, 0, 42, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
12, 3, 0, 0, 3, 0, 1, 0, 12, 3, 0, 0, 3, 0, 1, 0,
24, 3, 0, 0, 2, 0, 1, 0, 24, 3, 0, 0, 2, 0, 1, 0,
13, 0, 0, 0, 9, 0, 0, 0, 12, 0, 0, 0, 8, 0, 0, 0,
0, 0, 1, 0, 9, 0, 0, 0, 0, 0, 1, 0, 8, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
21, 3, 0, 0, 66, 0, 0, 0, 21, 3, 0, 0, 66, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
16, 3, 0, 0, 3, 0, 1, 0, 16, 3, 0, 0, 3, 0, 1, 0,
28, 3, 0, 0, 2, 0, 1, 0, 28, 3, 0, 0, 2, 0, 1, 0,
13, 0, 0, 0, 9, 0, 0, 0,
0, 0, 1, 0, 9, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
25, 3, 0, 0, 66, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
20, 3, 0, 0, 3, 0, 1, 0,
32, 3, 0, 0, 2, 0, 1, 0,
14, 0, 0, 0, 10, 0, 0, 0, 14, 0, 0, 0, 10, 0, 0, 0,
0, 0, 1, 0, 10, 0, 0, 0, 0, 0, 1, 0, 10, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
25, 3, 0, 0, 90, 0, 0, 0, 29, 3, 0, 0, 90, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
24, 3, 0, 0, 3, 0, 1, 0, 28, 3, 0, 0, 3, 0, 1, 0,
36, 3, 0, 0, 2, 0, 1, 0, 40, 3, 0, 0, 2, 0, 1, 0,
15, 0, 0, 0, 11, 0, 0, 0, 15, 0, 0, 0, 11, 0, 0, 0,
0, 0, 1, 0, 11, 0, 0, 0, 0, 0, 1, 0, 11, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
33, 3, 0, 0, 90, 0, 0, 0, 37, 3, 0, 0, 90, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
32, 3, 0, 0, 3, 0, 1, 0, 36, 3, 0, 0, 3, 0, 1, 0,
44, 3, 0, 0, 2, 0, 1, 0, 48, 3, 0, 0, 2, 0, 1, 0,
16, 0, 0, 0, 12, 0, 0, 0, 16, 0, 0, 0, 12, 0, 0, 0,
0, 0, 1, 0, 12, 0, 0, 0, 0, 0, 1, 0, 12, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
41, 3, 0, 0, 90, 0, 0, 0, 45, 3, 0, 0, 90, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
40, 3, 0, 0, 3, 0, 1, 0, 44, 3, 0, 0, 3, 0, 1, 0,
52, 3, 0, 0, 2, 0, 1, 0, 56, 3, 0, 0, 2, 0, 1, 0,
17, 0, 0, 0, 13, 0, 0, 0, 17, 0, 0, 0, 13, 0, 0, 0,
0, 0, 1, 0, 13, 0, 0, 0, 0, 0, 1, 0, 13, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
49, 3, 0, 0, 98, 0, 0, 0, 53, 3, 0, 0, 98, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
48, 3, 0, 0, 3, 0, 1, 0,
60, 3, 0, 0, 2, 0, 1, 0,
18, 0, 0, 0, 14, 0, 0, 0,
0, 0, 1, 0, 14, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
57, 3, 0, 0, 66, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
52, 3, 0, 0, 3, 0, 1, 0, 52, 3, 0, 0, 3, 0, 1, 0,
64, 3, 0, 0, 2, 0, 1, 0, 64, 3, 0, 0, 2, 0, 1, 0,
18, 0, 0, 0, 14, 0, 0, 0,
0, 0, 1, 0, 14, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
61, 3, 0, 0, 146, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
64, 3, 0, 0, 3, 0, 1, 0,
76, 3, 0, 0, 2, 0, 1, 0,
19, 0, 0, 0, 15, 0, 0, 0, 19, 0, 0, 0, 15, 0, 0, 0,
0, 0, 1, 0, 15, 0, 0, 0, 0, 0, 1, 0, 15, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
61, 3, 0, 0, 74, 0, 0, 0, 73, 3, 0, 0, 74, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
60, 3, 0, 0, 3, 0, 1, 0, 72, 3, 0, 0, 3, 0, 1, 0,
72, 3, 0, 0, 2, 0, 1, 0, 84, 3, 0, 0, 2, 0, 1, 0,
0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0,
0, 0, 1, 0, 16, 0, 0, 0, 0, 0, 1, 0, 16, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
69, 3, 0, 0, 98, 0, 0, 0, 81, 3, 0, 0, 98, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
68, 3, 0, 0, 3, 0, 1, 0, 80, 3, 0, 0, 3, 0, 1, 0,
80, 3, 0, 0, 2, 0, 1, 0, 92, 3, 0, 0, 2, 0, 1, 0,
2, 0, 0, 0, 9, 0, 0, 0, 2, 0, 0, 0, 9, 0, 0, 0,
0, 0, 1, 0, 17, 0, 0, 0, 0, 0, 1, 0, 17, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
77, 3, 0, 0, 98, 0, 0, 0, 89, 3, 0, 0, 98, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
76, 3, 0, 0, 3, 0, 1, 0,
88, 3, 0, 0, 2, 0, 1, 0,
3, 0, 0, 0, 10, 0, 0, 0,
0, 0, 1, 0, 18, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
85, 3, 0, 0, 90, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
84, 3, 0, 0, 3, 0, 1, 0,
96, 3, 0, 0, 2, 0, 1, 0,
20, 0, 0, 0, 192, 2, 0, 0,
0, 0, 1, 0, 19, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
93, 3, 0, 0, 66, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
88, 3, 0, 0, 3, 0, 1, 0, 88, 3, 0, 0, 3, 0, 1, 0,
100, 3, 0, 0, 2, 0, 1, 0, 100, 3, 0, 0, 2, 0, 1, 0,
21, 0, 0, 0, 193, 2, 0, 0, 3, 0, 0, 0, 10, 0, 0, 0,
0, 0, 1, 0, 20, 0, 0, 0, 0, 0, 1, 0, 18, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
97, 3, 0, 0, 114, 0, 0, 0, 97, 3, 0, 0, 90, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
96, 3, 0, 0, 3, 0, 1, 0, 96, 3, 0, 0, 3, 0, 1, 0,
108, 3, 0, 0, 2, 0, 1, 0, 108, 3, 0, 0, 2, 0, 1, 0,
20, 0, 0, 0, 192, 2, 0, 0,
0, 0, 1, 0, 19, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
105, 3, 0, 0, 66, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
100, 3, 0, 0, 3, 0, 1, 0,
112, 3, 0, 0, 2, 0, 1, 0,
21, 0, 0, 0, 193, 2, 0, 0,
0, 0, 1, 0, 20, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
109, 3, 0, 0, 114, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
108, 3, 0, 0, 3, 0, 1, 0,
120, 3, 0, 0, 2, 0, 1, 0,
1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 21, 0, 0, 0, 0, 0, 1, 0, 21, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
105, 3, 0, 0, 106, 0, 0, 0, 117, 3, 0, 0, 106, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
104, 3, 0, 0, 3, 0, 1, 0, 116, 3, 0, 0, 3, 0, 1, 0,
132, 3, 0, 0, 2, 0, 1, 0, 144, 3, 0, 0, 2, 0, 1, 0,
22, 0, 0, 0, 23, 0, 0, 0, 22, 0, 0, 0, 23, 0, 0, 0,
0, 0, 1, 0, 22, 0, 0, 0, 0, 0, 1, 0, 22, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
129, 3, 0, 0, 66, 0, 0, 0, 141, 3, 0, 0, 66, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
124, 3, 0, 0, 3, 0, 1, 0, 136, 3, 0, 0, 3, 0, 1, 0,
136, 3, 0, 0, 2, 0, 1, 0, 148, 3, 0, 0, 2, 0, 1, 0,
23, 0, 0, 0, 194, 2, 0, 0, 23, 0, 0, 0, 194, 2, 0, 0,
0, 0, 1, 0, 23, 0, 0, 0, 0, 0, 1, 0, 23, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
133, 3, 0, 0, 98, 0, 0, 0, 145, 3, 0, 0, 98, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
132, 3, 0, 0, 3, 0, 1, 0, 144, 3, 0, 0, 3, 0, 1, 0,
144, 3, 0, 0, 2, 0, 1, 0, 156, 3, 0, 0, 2, 0, 1, 0,
24, 0, 0, 0, 1, 0, 0, 0, 24, 0, 0, 0, 1, 0, 0, 0,
0, 0, 1, 0, 24, 0, 0, 0, 0, 0, 1, 0, 24, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
141, 3, 0, 0, 90, 0, 0, 0, 153, 3, 0, 0, 90, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
140, 3, 0, 0, 3, 0, 1, 0, 152, 3, 0, 0, 3, 0, 1, 0,
152, 3, 0, 0, 2, 0, 1, 0, 164, 3, 0, 0, 2, 0, 1, 0,
25, 0, 0, 0, 2, 0, 0, 0, 25, 0, 0, 0, 2, 0, 0, 0,
0, 0, 1, 0, 25, 0, 0, 0, 0, 0, 1, 0, 25, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
149, 3, 0, 0, 90, 0, 0, 0, 161, 3, 0, 0, 90, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
148, 3, 0, 0, 3, 0, 1, 0, 160, 3, 0, 0, 3, 0, 1, 0,
160, 3, 0, 0, 2, 0, 1, 0, 172, 3, 0, 0, 2, 0, 1, 0,
26, 0, 0, 0, 24, 0, 0, 0, 26, 0, 0, 0, 24, 0, 0, 0,
0, 0, 1, 0, 26, 0, 0, 0, 0, 0, 1, 0, 26, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
157, 3, 0, 0, 130, 0, 0, 0, 169, 3, 0, 0, 130, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
156, 3, 0, 0, 3, 0, 1, 0, 168, 3, 0, 0, 3, 0, 1, 0,
168, 3, 0, 0, 2, 0, 1, 0, 180, 3, 0, 0, 2, 0, 1, 0,
118, 69, 103, 111, 0, 0, 0, 0, 118, 69, 103, 111, 0, 0, 0, 0,
10, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1890,7 +1929,8 @@ static const ::capnp::_::AlignedData<443> b_97ff69c53601abf1 = {
10, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
97, 69, 103, 111, 0, 0, 0, 0, 97, 69, 103, 111, 68, 69, 80, 82,
69, 67, 65, 84, 69, 68, 0, 0,
10, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -2001,7 +2041,9 @@ static const ::capnp::_::AlignedData<443> b_97ff69c53601abf1 = {
10, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
104, 117, 100, 76, 101, 97, 100, 0, 104, 117, 100, 76, 101, 97, 100, 68,
69, 80, 82, 69, 67, 65, 84, 69,
68, 0, 0, 0, 0, 0, 0, 0,
4, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -2125,7 +2167,7 @@ static const ::capnp::_::AlignedData<443> b_97ff69c53601abf1 = {
static const uint16_t m_97ff69c53601abf1[] = {1, 11, 10, 24, 25, 13, 26, 16, 21, 15, 19, 14, 12, 17, 18, 23, 20, 5, 9, 4, 8, 22, 0, 2, 3, 6, 7}; static const uint16_t m_97ff69c53601abf1[] = {1, 11, 10, 24, 25, 13, 26, 16, 21, 15, 19, 14, 12, 17, 18, 23, 20, 5, 9, 4, 8, 22, 0, 2, 3, 6, 7};
static const uint16_t i_97ff69c53601abf1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26}; static const uint16_t i_97ff69c53601abf1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26};
const ::capnp::_::RawSchema s_97ff69c53601abf1 = { const ::capnp::_::RawSchema s_97ff69c53601abf1 = {
0x97ff69c53601abf1, b_97ff69c53601abf1.words, 443, nullptr, m_97ff69c53601abf1, 0x97ff69c53601abf1, b_97ff69c53601abf1.words, 446, nullptr, m_97ff69c53601abf1,
0, 27, i_97ff69c53601abf1, nullptr, nullptr, { &s_97ff69c53601abf1, nullptr, nullptr, 0, 0, nullptr } 0, 27, i_97ff69c53601abf1, nullptr, nullptr, { &s_97ff69c53601abf1, nullptr, nullptr, 0, 0, nullptr }
}; };
#endif // !CAPNP_LITE #endif // !CAPNP_LITE
+93 -55
View File
@@ -158,7 +158,7 @@ struct ThermalData {
class Pipeline; class Pipeline;
struct _capnpPrivate { struct _capnpPrivate {
CAPNP_DECLARE_STRUCT_HEADER(8d8231a40b7fe6e0, 2, 0) CAPNP_DECLARE_STRUCT_HEADER(8d8231a40b7fe6e0, 3, 0)
#if !CAPNP_LITE #if !CAPNP_LITE
static constexpr ::capnp::_::RawBrandedSchema const* brand = &schema->defaultBrand; static constexpr ::capnp::_::RawBrandedSchema const* brand = &schema->defaultBrand;
#endif // !CAPNP_LITE #endif // !CAPNP_LITE
@@ -1109,6 +1109,8 @@ public:
inline ::uint32_t getBat() const; inline ::uint32_t getBat() const;
inline float getFreeSpace() const;
private: private:
::capnp::_::StructReader _reader; ::capnp::_::StructReader _reader;
template <typename, ::capnp::Kind> template <typename, ::capnp::Kind>
@@ -1158,6 +1160,9 @@ public:
inline ::uint32_t getBat(); inline ::uint32_t getBat();
inline void setBat( ::uint32_t value); inline void setBat( ::uint32_t value);
inline float getFreeSpace();
inline void setFreeSpace(float value);
private: private:
::capnp::_::StructBuilder _builder; ::capnp::_::StructBuilder _builder;
template <typename, ::capnp::Kind> template <typename, ::capnp::Kind>
@@ -1211,6 +1216,8 @@ public:
inline bool getGasInterceptorDetected() const; inline bool getGasInterceptorDetected() const;
inline bool getStartedSignalDetected() const;
private: private:
::capnp::_::StructReader _reader; ::capnp::_::StructReader _reader;
template <typename, ::capnp::Kind> template <typename, ::capnp::Kind>
@@ -1254,6 +1261,9 @@ public:
inline bool getGasInterceptorDetected(); inline bool getGasInterceptorDetected();
inline void setGasInterceptorDetected(bool value); inline void setGasInterceptorDetected(bool value);
inline bool getStartedSignalDetected();
inline void setStartedSignalDetected(bool value);
private: private:
::capnp::_::StructBuilder _builder; ::capnp::_::StructBuilder _builder;
template <typename, ::capnp::Kind> template <typename, ::capnp::Kind>
@@ -1398,12 +1408,12 @@ public:
} }
#endif // !CAPNP_LITE #endif // !CAPNP_LITE
inline bool hasWarpMatrix() const; inline bool hasWarpMatrixDEPRECATED() const;
inline ::capnp::List<float>::Reader getWarpMatrix() const; inline ::capnp::List<float>::Reader getWarpMatrixDEPRECATED() const;
inline float getAngleOffset() const; inline float getAngleOffsetDEPRECATED() const;
inline ::int8_t getCalStatus() const; inline ::int8_t getCalStatusDEPRECATED() const;
inline bool hasLeadOne() const; inline bool hasLeadOne() const;
inline ::cereal::Live20Data::LeadData::Reader getLeadOne() const; inline ::cereal::Live20Data::LeadData::Reader getLeadOne() const;
@@ -1417,9 +1427,9 @@ public:
inline ::uint64_t getFtMonoTime() const; inline ::uint64_t getFtMonoTime() const;
inline ::int32_t getCalCycle() const; inline ::int32_t getCalCycleDEPRECATED() const;
inline ::int8_t getCalPerc() const; inline ::int8_t getCalPercDEPRECATED() const;
inline bool hasCanMonoTimes() const; inline bool hasCanMonoTimes() const;
inline ::capnp::List< ::uint64_t>::Reader getCanMonoTimes() const; inline ::capnp::List< ::uint64_t>::Reader getCanMonoTimes() const;
@@ -1452,19 +1462,19 @@ public:
inline ::kj::StringTree toString() const { return asReader().toString(); } inline ::kj::StringTree toString() const { return asReader().toString(); }
#endif // !CAPNP_LITE #endif // !CAPNP_LITE
inline bool hasWarpMatrix(); inline bool hasWarpMatrixDEPRECATED();
inline ::capnp::List<float>::Builder getWarpMatrix(); inline ::capnp::List<float>::Builder getWarpMatrixDEPRECATED();
inline void setWarpMatrix( ::capnp::List<float>::Reader value); inline void setWarpMatrixDEPRECATED( ::capnp::List<float>::Reader value);
inline void setWarpMatrix(::kj::ArrayPtr<const float> value); inline void setWarpMatrixDEPRECATED(::kj::ArrayPtr<const float> value);
inline ::capnp::List<float>::Builder initWarpMatrix(unsigned int size); inline ::capnp::List<float>::Builder initWarpMatrixDEPRECATED(unsigned int size);
inline void adoptWarpMatrix(::capnp::Orphan< ::capnp::List<float>>&& value); inline void adoptWarpMatrixDEPRECATED(::capnp::Orphan< ::capnp::List<float>>&& value);
inline ::capnp::Orphan< ::capnp::List<float>> disownWarpMatrix(); inline ::capnp::Orphan< ::capnp::List<float>> disownWarpMatrixDEPRECATED();
inline float getAngleOffset(); inline float getAngleOffsetDEPRECATED();
inline void setAngleOffset(float value); inline void setAngleOffsetDEPRECATED(float value);
inline ::int8_t getCalStatus(); inline ::int8_t getCalStatusDEPRECATED();
inline void setCalStatus( ::int8_t value); inline void setCalStatusDEPRECATED( ::int8_t value);
inline bool hasLeadOne(); inline bool hasLeadOne();
inline ::cereal::Live20Data::LeadData::Builder getLeadOne(); inline ::cereal::Live20Data::LeadData::Builder getLeadOne();
@@ -1489,11 +1499,11 @@ public:
inline ::uint64_t getFtMonoTime(); inline ::uint64_t getFtMonoTime();
inline void setFtMonoTime( ::uint64_t value); inline void setFtMonoTime( ::uint64_t value);
inline ::int32_t getCalCycle(); inline ::int32_t getCalCycleDEPRECATED();
inline void setCalCycle( ::int32_t value); inline void setCalCycleDEPRECATED( ::int32_t value);
inline ::int8_t getCalPerc(); inline ::int8_t getCalPercDEPRECATED();
inline void setCalPerc( ::int8_t value); inline void setCalPercDEPRECATED( ::int8_t value);
inline bool hasCanMonoTimes(); inline bool hasCanMonoTimes();
inline ::capnp::List< ::uint64_t>::Builder getCanMonoTimes(); inline ::capnp::List< ::uint64_t>::Builder getCanMonoTimes();
@@ -1899,7 +1909,7 @@ public:
inline float getVEgo() const; inline float getVEgo() const;
inline float getAEgo() const; inline float getAEgoDEPRECATED() const;
inline float getVPid() const; inline float getVPid() const;
@@ -1925,7 +1935,7 @@ public:
inline float getAngleSteers() const; inline float getAngleSteers() const;
inline ::int32_t getHudLead() const; inline ::int32_t getHudLeadDEPRECATED() const;
inline float getCumLagMs() const; inline float getCumLagMs() const;
@@ -1985,8 +1995,8 @@ public:
inline float getVEgo(); inline float getVEgo();
inline void setVEgo(float value); inline void setVEgo(float value);
inline float getAEgo(); inline float getAEgoDEPRECATED();
inline void setAEgo(float value); inline void setAEgoDEPRECATED(float value);
inline float getVPid(); inline float getVPid();
inline void setVPid(float value); inline void setVPid(float value);
@@ -2024,8 +2034,8 @@ public:
inline float getAngleSteers(); inline float getAngleSteers();
inline void setAngleSteers(float value); inline void setAngleSteers(float value);
inline ::int32_t getHudLead(); inline ::int32_t getHudLeadDEPRECATED();
inline void setHudLead( ::int32_t value); inline void setHudLeadDEPRECATED( ::int32_t value);
inline float getCumLagMs(); inline float getCumLagMs();
inline void setCumLagMs(float value); inline void setCumLagMs(float value);
@@ -4106,6 +4116,20 @@ inline void ThermalData::Builder::setBat( ::uint32_t value) {
3 * ::capnp::ELEMENTS, value); 3 * ::capnp::ELEMENTS, value);
} }
inline float ThermalData::Reader::getFreeSpace() const {
return _reader.getDataField<float>(
4 * ::capnp::ELEMENTS);
}
inline float ThermalData::Builder::getFreeSpace() {
return _builder.getDataField<float>(
4 * ::capnp::ELEMENTS);
}
inline void ThermalData::Builder::setFreeSpace(float value) {
_builder.setDataField<float>(
4 * ::capnp::ELEMENTS, value);
}
inline ::uint32_t HealthData::Reader::getVoltage() const { inline ::uint32_t HealthData::Reader::getVoltage() const {
return _reader.getDataField< ::uint32_t>( return _reader.getDataField< ::uint32_t>(
0 * ::capnp::ELEMENTS); 0 * ::capnp::ELEMENTS);
@@ -4176,6 +4200,20 @@ inline void HealthData::Builder::setGasInterceptorDetected(bool value) {
66 * ::capnp::ELEMENTS, value); 66 * ::capnp::ELEMENTS, value);
} }
inline bool HealthData::Reader::getStartedSignalDetected() const {
return _reader.getDataField<bool>(
67 * ::capnp::ELEMENTS);
}
inline bool HealthData::Builder::getStartedSignalDetected() {
return _builder.getDataField<bool>(
67 * ::capnp::ELEMENTS);
}
inline void HealthData::Builder::setStartedSignalDetected(bool value) {
_builder.setDataField<bool>(
67 * ::capnp::ELEMENTS, value);
}
inline bool LiveUI::Reader::getRearViewCam() const { inline bool LiveUI::Reader::getRearViewCam() const {
return _reader.getDataField<bool>( return _reader.getDataField<bool>(
0 * ::capnp::ELEMENTS); 0 * ::capnp::ELEMENTS);
@@ -4268,66 +4306,66 @@ inline void LiveUI::Builder::setAwarenessStatus(float value) {
1 * ::capnp::ELEMENTS, value); 1 * ::capnp::ELEMENTS, value);
} }
inline bool Live20Data::Reader::hasWarpMatrix() const { inline bool Live20Data::Reader::hasWarpMatrixDEPRECATED() const {
return !_reader.getPointerField(0 * ::capnp::POINTERS).isNull(); return !_reader.getPointerField(0 * ::capnp::POINTERS).isNull();
} }
inline bool Live20Data::Builder::hasWarpMatrix() { inline bool Live20Data::Builder::hasWarpMatrixDEPRECATED() {
return !_builder.getPointerField(0 * ::capnp::POINTERS).isNull(); return !_builder.getPointerField(0 * ::capnp::POINTERS).isNull();
} }
inline ::capnp::List<float>::Reader Live20Data::Reader::getWarpMatrix() const { inline ::capnp::List<float>::Reader Live20Data::Reader::getWarpMatrixDEPRECATED() const {
return ::capnp::_::PointerHelpers< ::capnp::List<float>>::get( return ::capnp::_::PointerHelpers< ::capnp::List<float>>::get(
_reader.getPointerField(0 * ::capnp::POINTERS)); _reader.getPointerField(0 * ::capnp::POINTERS));
} }
inline ::capnp::List<float>::Builder Live20Data::Builder::getWarpMatrix() { inline ::capnp::List<float>::Builder Live20Data::Builder::getWarpMatrixDEPRECATED() {
return ::capnp::_::PointerHelpers< ::capnp::List<float>>::get( return ::capnp::_::PointerHelpers< ::capnp::List<float>>::get(
_builder.getPointerField(0 * ::capnp::POINTERS)); _builder.getPointerField(0 * ::capnp::POINTERS));
} }
inline void Live20Data::Builder::setWarpMatrix( ::capnp::List<float>::Reader value) { inline void Live20Data::Builder::setWarpMatrixDEPRECATED( ::capnp::List<float>::Reader value) {
::capnp::_::PointerHelpers< ::capnp::List<float>>::set( ::capnp::_::PointerHelpers< ::capnp::List<float>>::set(
_builder.getPointerField(0 * ::capnp::POINTERS), value); _builder.getPointerField(0 * ::capnp::POINTERS), value);
} }
inline void Live20Data::Builder::setWarpMatrix(::kj::ArrayPtr<const float> value) { inline void Live20Data::Builder::setWarpMatrixDEPRECATED(::kj::ArrayPtr<const float> value) {
::capnp::_::PointerHelpers< ::capnp::List<float>>::set( ::capnp::_::PointerHelpers< ::capnp::List<float>>::set(
_builder.getPointerField(0 * ::capnp::POINTERS), value); _builder.getPointerField(0 * ::capnp::POINTERS), value);
} }
inline ::capnp::List<float>::Builder Live20Data::Builder::initWarpMatrix(unsigned int size) { inline ::capnp::List<float>::Builder Live20Data::Builder::initWarpMatrixDEPRECATED(unsigned int size) {
return ::capnp::_::PointerHelpers< ::capnp::List<float>>::init( return ::capnp::_::PointerHelpers< ::capnp::List<float>>::init(
_builder.getPointerField(0 * ::capnp::POINTERS), size); _builder.getPointerField(0 * ::capnp::POINTERS), size);
} }
inline void Live20Data::Builder::adoptWarpMatrix( inline void Live20Data::Builder::adoptWarpMatrixDEPRECATED(
::capnp::Orphan< ::capnp::List<float>>&& value) { ::capnp::Orphan< ::capnp::List<float>>&& value) {
::capnp::_::PointerHelpers< ::capnp::List<float>>::adopt( ::capnp::_::PointerHelpers< ::capnp::List<float>>::adopt(
_builder.getPointerField(0 * ::capnp::POINTERS), kj::mv(value)); _builder.getPointerField(0 * ::capnp::POINTERS), kj::mv(value));
} }
inline ::capnp::Orphan< ::capnp::List<float>> Live20Data::Builder::disownWarpMatrix() { inline ::capnp::Orphan< ::capnp::List<float>> Live20Data::Builder::disownWarpMatrixDEPRECATED() {
return ::capnp::_::PointerHelpers< ::capnp::List<float>>::disown( return ::capnp::_::PointerHelpers< ::capnp::List<float>>::disown(
_builder.getPointerField(0 * ::capnp::POINTERS)); _builder.getPointerField(0 * ::capnp::POINTERS));
} }
inline float Live20Data::Reader::getAngleOffset() const { inline float Live20Data::Reader::getAngleOffsetDEPRECATED() const {
return _reader.getDataField<float>( return _reader.getDataField<float>(
0 * ::capnp::ELEMENTS); 0 * ::capnp::ELEMENTS);
} }
inline float Live20Data::Builder::getAngleOffset() { inline float Live20Data::Builder::getAngleOffsetDEPRECATED() {
return _builder.getDataField<float>( return _builder.getDataField<float>(
0 * ::capnp::ELEMENTS); 0 * ::capnp::ELEMENTS);
} }
inline void Live20Data::Builder::setAngleOffset(float value) { inline void Live20Data::Builder::setAngleOffsetDEPRECATED(float value) {
_builder.setDataField<float>( _builder.setDataField<float>(
0 * ::capnp::ELEMENTS, value); 0 * ::capnp::ELEMENTS, value);
} }
inline ::int8_t Live20Data::Reader::getCalStatus() const { inline ::int8_t Live20Data::Reader::getCalStatusDEPRECATED() const {
return _reader.getDataField< ::int8_t>( return _reader.getDataField< ::int8_t>(
4 * ::capnp::ELEMENTS); 4 * ::capnp::ELEMENTS);
} }
inline ::int8_t Live20Data::Builder::getCalStatus() { inline ::int8_t Live20Data::Builder::getCalStatusDEPRECATED() {
return _builder.getDataField< ::int8_t>( return _builder.getDataField< ::int8_t>(
4 * ::capnp::ELEMENTS); 4 * ::capnp::ELEMENTS);
} }
inline void Live20Data::Builder::setCalStatus( ::int8_t value) { inline void Live20Data::Builder::setCalStatusDEPRECATED( ::int8_t value) {
_builder.setDataField< ::int8_t>( _builder.setDataField< ::int8_t>(
4 * ::capnp::ELEMENTS, value); 4 * ::capnp::ELEMENTS, value);
} }
@@ -4448,30 +4486,30 @@ inline void Live20Data::Builder::setFtMonoTime( ::uint64_t value) {
3 * ::capnp::ELEMENTS, value); 3 * ::capnp::ELEMENTS, value);
} }
inline ::int32_t Live20Data::Reader::getCalCycle() const { inline ::int32_t Live20Data::Reader::getCalCycleDEPRECATED() const {
return _reader.getDataField< ::int32_t>( return _reader.getDataField< ::int32_t>(
3 * ::capnp::ELEMENTS); 3 * ::capnp::ELEMENTS);
} }
inline ::int32_t Live20Data::Builder::getCalCycle() { inline ::int32_t Live20Data::Builder::getCalCycleDEPRECATED() {
return _builder.getDataField< ::int32_t>( return _builder.getDataField< ::int32_t>(
3 * ::capnp::ELEMENTS); 3 * ::capnp::ELEMENTS);
} }
inline void Live20Data::Builder::setCalCycle( ::int32_t value) { inline void Live20Data::Builder::setCalCycleDEPRECATED( ::int32_t value) {
_builder.setDataField< ::int32_t>( _builder.setDataField< ::int32_t>(
3 * ::capnp::ELEMENTS, value); 3 * ::capnp::ELEMENTS, value);
} }
inline ::int8_t Live20Data::Reader::getCalPerc() const { inline ::int8_t Live20Data::Reader::getCalPercDEPRECATED() const {
return _reader.getDataField< ::int8_t>( return _reader.getDataField< ::int8_t>(
5 * ::capnp::ELEMENTS); 5 * ::capnp::ELEMENTS);
} }
inline ::int8_t Live20Data::Builder::getCalPerc() { inline ::int8_t Live20Data::Builder::getCalPercDEPRECATED() {
return _builder.getDataField< ::int8_t>( return _builder.getDataField< ::int8_t>(
5 * ::capnp::ELEMENTS); 5 * ::capnp::ELEMENTS);
} }
inline void Live20Data::Builder::setCalPerc( ::int8_t value) { inline void Live20Data::Builder::setCalPercDEPRECATED( ::int8_t value) {
_builder.setDataField< ::int8_t>( _builder.setDataField< ::int8_t>(
5 * ::capnp::ELEMENTS, value); 5 * ::capnp::ELEMENTS, value);
} }
@@ -4912,16 +4950,16 @@ inline void Live100Data::Builder::setVEgo(float value) {
0 * ::capnp::ELEMENTS, value); 0 * ::capnp::ELEMENTS, value);
} }
inline float Live100Data::Reader::getAEgo() const { inline float Live100Data::Reader::getAEgoDEPRECATED() const {
return _reader.getDataField<float>( return _reader.getDataField<float>(
1 * ::capnp::ELEMENTS); 1 * ::capnp::ELEMENTS);
} }
inline float Live100Data::Builder::getAEgo() { inline float Live100Data::Builder::getAEgoDEPRECATED() {
return _builder.getDataField<float>( return _builder.getDataField<float>(
1 * ::capnp::ELEMENTS); 1 * ::capnp::ELEMENTS);
} }
inline void Live100Data::Builder::setAEgo(float value) { inline void Live100Data::Builder::setAEgoDEPRECATED(float value) {
_builder.setDataField<float>( _builder.setDataField<float>(
1 * ::capnp::ELEMENTS, value); 1 * ::capnp::ELEMENTS, value);
} }
@@ -5094,16 +5132,16 @@ inline void Live100Data::Builder::setAngleSteers(float value) {
13 * ::capnp::ELEMENTS, value); 13 * ::capnp::ELEMENTS, value);
} }
inline ::int32_t Live100Data::Reader::getHudLead() const { inline ::int32_t Live100Data::Reader::getHudLeadDEPRECATED() const {
return _reader.getDataField< ::int32_t>( return _reader.getDataField< ::int32_t>(
14 * ::capnp::ELEMENTS); 14 * ::capnp::ELEMENTS);
} }
inline ::int32_t Live100Data::Builder::getHudLead() { inline ::int32_t Live100Data::Builder::getHudLeadDEPRECATED() {
return _builder.getDataField< ::int32_t>( return _builder.getDataField< ::int32_t>(
14 * ::capnp::ELEMENTS); 14 * ::capnp::ELEMENTS);
} }
inline void Live100Data::Builder::setHudLead( ::int32_t value) { inline void Live100Data::Builder::setHudLeadDEPRECATED( ::int32_t value) {
_builder.setDataField< ::int32_t>( _builder.setDataField< ::int32_t>(
14 * ::capnp::ELEMENTS, value); 14 * ::capnp::ELEMENTS, value);
} }
+4
View File
@@ -61,6 +61,9 @@ struct ThermalData {
mem @4 :UInt16; mem @4 :UInt16;
gpu @5 :UInt16; gpu @5 :UInt16;
bat @6 :UInt32; bat @6 :UInt32;
# not thermal
freeSpace @7 :Float32;
} }
struct HealthData { struct HealthData {
@@ -70,6 +73,7 @@ struct HealthData {
started @2 :Bool; started @2 :Bool;
controlsAllowed @3 :Bool; controlsAllowed @3 :Bool;
gasInterceptorDetected @4 :Bool; gasInterceptorDetected @4 :Bool;
startedSignalDetected @5 :Bool;
} }
struct LiveUI { struct LiveUI {
+4 -3
View File
@@ -1,6 +1,7 @@
import re import re
from collections import namedtuple
import bitstring import bitstring
from binascii import hexlify
from collections import namedtuple
def int_or_float(s): def int_or_float(s):
# return number, trying to maintain int format # return number, trying to maintain int format
@@ -148,8 +149,8 @@ class dbc(object):
if debug: if debug:
print name print name
blen = (len(x[2])/2)*8 blen = 8*len(x[2])
x2_int = int(x[2], 16) x2_int = int(hexlify(x[2]), 16)
for s in msg[1]: for s in msg[1]:
if arr is not None and s[0] not in arr: if arr is not None and s[0] not in arr:
+23
View File
@@ -1,2 +1,25 @@
def clip(x, lo, hi): def clip(x, lo, hi):
return max(lo, min(hi, x)) return max(lo, min(hi, x))
def interp(x, xp, fp):
N = len(xp)
if not hasattr(x, '__iter__'):
hi = 0
while hi < N and x > xp[hi]:
hi += 1
low = hi - 1
return fp[-1] if hi == N and x > xp[low] else (
fp[0] if hi == 0 else
(x - xp[low]) * (fp[hi] - fp[low]) / (xp[hi] - xp[low]) + fp[low])
result = []
for v in x:
hi = 0
while hi < N and v > xp[hi]:
hi += 1
low = hi - 1
result.append(fp[-1] if hi == N and v > xp[low] else (fp[
0] if hi == 0 else (v - xp[low]) * (fp[hi] - fp[low]) / (xp[hi] - xp[low]
) + fp[low]))
return result
+26
View File
@@ -0,0 +1,26 @@
from common.realtime import sec_since_boot
class Profiler(object):
def __init__(self, enabled=False):
self.enabled = enabled
self.cp = []
self.start_time = sec_since_boot()
self.last_time = self.start_time
def checkpoint(self, name):
if not self.enabled:
return
tt = sec_since_boot()
self.cp.append((name, tt - self.last_time))
self.last_time = tt
def display(self):
if not self.enabled:
return
print "******* Profiling *******"
tot = 0.0
for n, ms in self.cp:
print "%30s: %7.2f" % (n, ms*1000.0)
tot += ms
print " TOTAL: %7.2f" % (tot*1000.0)
+8 -4
View File
@@ -28,7 +28,7 @@ if libc is not None:
libc.clock_gettime.argtypes = [ctypes.c_int, ctypes.POINTER(timespec)] libc.clock_gettime.argtypes = [ctypes.c_int, ctypes.POINTER(timespec)]
def clock_gettime(clk_id): def clock_gettime(clk_id):
if platform.system() == "darwin": if platform.system().lower() == "darwin":
# TODO: fix this # TODO: fix this
return time.time() return time.time()
else: else:
@@ -47,7 +47,7 @@ def sec_since_boot():
def set_realtime_priority(level): def set_realtime_priority(level):
if os.getuid() != 0: if os.getuid() != 0:
print "not setting priority, not root" print("not setting priority, not root")
return return
if platform.machine() == "x86_64": if platform.machine() == "x86_64":
NR_gettid = 186 NR_gettid = 186
@@ -80,15 +80,19 @@ class Ratekeeper(object):
# Maintain loop rate by calling this at the end of each loop # Maintain loop rate by calling this at the end of each loop
def keep_time(self): def keep_time(self):
self.monitor_time() lagged = self.monitor_time()
if self._remaining > 0: if self._remaining > 0:
time.sleep(self._remaining) time.sleep(self._remaining)
return lagged
# this only monitor the cumulative lag, but does not enforce a rate # this only monitor the cumulative lag, but does not enforce a rate
def monitor_time(self): def monitor_time(self):
lagged = False
remaining = self._next_frame_time - sec_since_boot() remaining = self._next_frame_time - sec_since_boot()
self._next_frame_time += self._interval self._next_frame_time += self._interval
if remaining < -self._print_delay_threshold: if remaining < -self._print_delay_threshold:
print self._process_name, "lagging by", round(-remaining * 1000, 2), "ms" print(self._process_name, "lagging by", round(-remaining * 1000, 2), "ms")
lagged = True
self._frame += 1 self._frame += 1
self._remaining = remaining self._remaining = remaining
return lagged
+283 -254
View File
@@ -15,7 +15,7 @@ NS_ :
ENVVAR_DATA_ ENVVAR_DATA_
SGTYPE_ SGTYPE_
SGTYPE_VAL_ SGTYPE_VAL_
BA_DEF_SGTYPE_ BA_DEF_SGTYPE_
BA_SGTYPE_ BA_SGTYPE_
SIG_TYPE_REF_ SIG_TYPE_REF_
VAL_TABLE_ VAL_TABLE_
@@ -33,263 +33,292 @@ NS_ :
BS_: BS_:
BO_ 0x039 XXX: 3 XXX BU_: INTERCEPTOR EBCM NEO ADAS PCM EPS VSA SCM BDY XXX
BO_ 0x091 XXX: 8 XXX
SG_ LAT_ACCEL : 0|10@1+ (0.02,-512) [-20|20] "m/s2" Vector__XXX
BO_ 0x0E4 STEERING_CONTROL: 5 ADAS
SG_ STEER_TORQUE : 0|16@1- (1,0) [-3840|3840] "" Vector__XXX
SG_ STEER_TORQUE_REQUEST : 16|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ SET_ME_X00 : 17|7@1+ (1,0) [0|127] "" Vector__XXX
SG_ SET_ME_X00 : 24|8@1+ (1,0) [0|0] "" Vector__XXX
SG_ COUNTER : 34|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 36|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x130 GAS_PEDAL2: 8 PCM
SG_ ENGINE_TORQUE_ESTIMATE : 0|16@1- (1,0) [-1000|1000] "Nm" Vector__XXX
SG_ ENGINE_TORQUE_REQUEST : 16|16@1- (1,0) [-1000|1000] "Nm" Vector__XXX
SG_ CAR_GAS : 32|8@1+ (1,0) [0|255] "" Vector__XXX
BO_ 0x13C GAS_PEDAL: 8 PCM
SG_ CAR_GAS : 32|8@1+ (1,0) [0|255] "" Vector__XXX
BO_ 0x156 STEERING_SENSORS: 6 EPS
SG_ STEER_ANGLE : 0|16@1- (-0.1,0) [-500|500] "deg" Vector__XXX
SG_ STEER_ANGLE_RATE : 16|16@1- (1,0) [-3000|3000] "deg/s" Vector__XXX
SG_ COUNTER : 42|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 44|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x158 POWERTRAIN_DATA: 8 PCM
SG_ XMISSION_SPEED : 0|16@1+ (0.002759506,0) [0|70] "m/s" Vector__XXX
SG_ ENGINE_RPM : 16|16@1+ (1,0) [0|15000] "rpm" Vector__XXX
SG_ XMISSION_SPEED2 : 32|16@1+ (0.002759506,0) [0|70] "m/s" Vector__XXX
SG_ COUNTER : 58|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 60|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x17C POWERTRAIN_DATA2: 8 PCM
SG_ PEDAL_GAS : 0|8@1+ (1,0) [0|255] "" Vector__XXX
SG_ ENGINE_RPM : 16|16@1+ (1,0) [0|15000] "rpm" Vector__XXX
SG_ GAS_PRESSED : 32|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ ACC_STATUS : 33|1@1+ (1,0) [0|1] "rpm" Vector__XXX
SG_ BOH_17C : 34|5@1+ (1,0) [0|1] "rpm" Vector__XXX
SG_ BRAKE_LIGHTS_ON : 39|1@1+ (1,0) [0|1] "rpm" Vector__XXX
SG_ BOH2_17C : 40|10@1+ (1,0) [0|1] "rpm" Vector__XXX
SG_ BRAKE_PRESSED : 50|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ BOH3_17C : 51|5@1+ (1,0) [0|1] "rpm" Vector__XXX
SG_ COUNTER : 58|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 60|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x18E XXX: 3 XXX
BO_ 0x18F STEER_STATUS: 7 EPS
SG_ STEER_TORQUE_SENSOR : 0|16@1- (1,0) [-31000|31000] "tbd" Vector__XXX
SG_ STEER_TORQUE_MOTOR : 16|16@1- (1,0) [-31000|31000] "tbd" Vector__XXX
SG_ STEER_STATUS : 32|4@1+ (1,0) [0|15] "" Vector__XXX
SG_ STEER_CONTROL_ACTIVE : 36|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ COUNTER : 50|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 52|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x1A3 GEARBOX: 8 PCM
SG_ GEAR : 0|8@1+ (1,0) [0|256] "" Vector__XXX
SG_ GEAR_SHIFTER : 36|4@1+ (1,0) [0|15] "" Vector__XXX
SG_ COUNTER : 58|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 60|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x1A4 VSA_STATUS: 8 VSA
SG_ USER_BRAKE : 0|16@1+ (0.015625,-103) [0|1000] "" Vector__XXX
SG_ ESP_DISABLED : 27|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ COUNTER : 58|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 60|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x1A6 SCM_BUTTONS: 8 SCM
SG_ CRUISE_BUTTONS : 0|3@1+ (1,0) [0|7] "" Vector__XXX
SG_ LIGHTS_SETTING : 6|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ MAIN_ON : 40|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ CRUISE_SETTING : 44|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ COUNTER : 58|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 60|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x1AC XXX: 8 XXX
BO_ 0x1B0 STANDSTILL: 7 VSA
SG_ WHEELS_MOVING : 11|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ BRAKE_ERROR_1 : 12|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ BRAKE_ERROR_2 : 14|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ COUNTER : 50|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 52|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x1D0 WHEEL_SPEEDS: 8 VSA
SG_ WHEEL_SPEED_FL : 0|15@1+ (0.002759506,0) [0|70] "m/s" Vector__XXX
SG_ WHEEL_SPEED_FR : 15|15@1+ (0.002759506,0) [0|70] "m/s" Vector__XXX
SG_ WHEEL_SPEED_RL : 30|15@1+ (0.002759506,0) [0|70] "m/s" Vector__XXX
SG_ WHEEL_SPEED_RR : 45|15@1+ (0.002759506,0) [0|70] "m/s" Vector__XXX
SG_ CHECKSUM : 60|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x1DC XXX: 4 XXX
BO_ 0x1EA VEHICLE_DYNAMICS: 8 VSA
SG_ LONG_ACCEL : 16|16@1- (0.0015384,0) [-20|20] "m/s2" Vector__XXX
BO_ 0x1FA BRAKE_COMMAND: 8 ADAS
SG_ COMPUTER_BRAKE : 0|10@1+ (0.003906248,0) [0|1] "" Vector__XXX
SG_ ZEROS_BOH : 10|5@1+ (1,0) [0|1] "" Vector__XXX
SG_ COMPUTER_BRAKE_REQUEST : 15|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ CRUISE_BOH2 : 16|3@1+ (1,0) [0|1] "" Vector__XXX
SG_ CRUISE_OVERRIDE : 19|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ CRUISE_BOH3 : 20|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ CRUISE_FAULT_CMD : 21|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ CRUISE_CANCEL_CMD : 22|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ COMPUTER_BRAKE_REQUEST_2 : 23|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ CRUISE_BOH4 : 24|8@1+ (1,0) [0|1] "" Vector__XXX
SG_ BRAKE_LIGHTS : 32|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ CRUISE_BOH5 : 33|7@1+ (1,0) [0|1] "" Vector__XXX
SG_ CHIME : 40|3@1+ (1,0) [0|7] "" Vector__XXX
SG_ CRUISE_BOH6 : 43|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ FCW : 44|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CRUISE_BOH7 : 46|10@1+ (1,0) [0|0] "" Vector__XXX
SG_ COUNTER : 58|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 60|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x200 GAS_COMMAND: 3 ADAS
SG_ GAS_COMMAND : 0|16@1+ (0.253984064,-328) [0|1] "" Vector__XXX
SG_ COUNTER : 18|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 20|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x201 GAS_SENSOR: 5 ADAS
SG_ INTERCEPTOR_GAS : 0|16@1+ (0.253984064,-328) [0|1] "" Vector__XXX
SG_ INTERCEPTOR_GAS2 : 16|16@1+ (0.126992032,-656) [0|1] "" Vector__XXX
SG_ COUNTER : 34|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 36|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x21E XXX: 7 XXX
BO_ 0x221 XXX: 4 XXX
BO_ 0x255 ROUGH_WHEEL_SPEED: 8 VSA
SG_ WHEEL_SPEED_FL : 0|8@1+ (1,0) [0|255] "mph" Vector__XXX
SG_ WHEEL_SPEED_FR : 8|8@1+ (1,0) [0|255] "mph" Vector__XXX
SG_ WHEEL_SPEED_RL : 16|8@1+ (1,0) [0|255] "mph" Vector__XXX
SG_ WHEEL_SPEED_RR : 24|8@1+ (1,0) [0|255] "mph" Vector__XXX
SG_ SET_TO_X55 : 32|8@1+ (1,0) [0|255] "" Vector__XXX
SG_ SET_TO_X55 : 40|8@1+ (1,0) [0|255] "" Vector__XXX
BO_ 0x294 SCM_COMMANDS: 8 SCM
SG_ RIGHT_BLINKER : 1|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ LEFT_BLINKER : 2|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ WIPERS_SPEED : 3|2@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x305 SEATBELT_STATUS: 7 BDY
SG_ SEATBELT_DRIVER_LAMP : 0|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ SEATBELT_DRIVER_LATCHED : 10|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ COUNTER : 50|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 52|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x309 XXX: 8 XXX
BO_ 0x30C ACC_HUD: 8 ADAS
SG_ PCM_SPEED : 0|16@1+ (0.002763889,0) [0|100] "m/s" Vector__XXX
SG_ PCM_GAS : 16|7@1+ (1,0) [0|127] "" Vector__XXX
SG_ ZEROS_BOH : 23|1@1+ (1,0) [0|255] "" Vector__XXX
SG_ CRUISE_SPEED : 24|8@1+ (1,0) [0|255] "" Vector__XXX
SG_ DTC_MODE : 32|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ BOH : 33|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ ACC_PROBLEM : 34|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ FCM_OFF : 35|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ BOH_2 : 36|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ FCM_PROBLEM : 37|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ RADAR_OBSTRUCTED : 38|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ ENABLE_MINI_CAR : 39|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ SET_ME_X03 : 40|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ HUD_LEAD : 42|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ BOH_3 : 44|1@1+ (1,0) [0|3] "" Vector__XXX
SG_ BOH_4 : 45|1@1+ (1,0) [0|3] "" Vector__XXX
SG_ BOH_5 : 46|1@1+ (1,0) [0|3] "" Vector__XXX
SG_ CRUISE_CONTROL_LABEL : 47|1@1+ (1,0) [0|3] "" Vector__XXX
SG_ HUD_DISTANCE_3 : 51|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ COUNTER : 58|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 60|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x320 XXX: 8 XXX
BO_ 0x324 CRUISE: 8 PCM
SG_ ENGINE_TEMPERATURE : 0|8@1+ (1,0) [0|255] "" Vector__XXX
SG_ BOH : 8|8@1+ (1,0) [0|255] "" Vector__XXX
SG_ TRIP_FUEL_CONSUMED : 16|16@1+ (1,0) [0|255] "" Vector__XXX
SG_ CRUISE_SPEED_PCM : 32|8@1+ (1,0) [0|255] "" Vector__XXX
SG_ BOH2 : 40|8@1- (1,0) [0|255] "" Vector__XXX
SG_ BOH3 : 48|8@1+ (1,0) [0|255] "" Vector__XXX
SG_ COUNTER : 58|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 60|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x328 XXX: 8 XXX
BO_ 0x333 XXX: 7 XXX
BO_ 0x335 XXX: 5 XXX
BO_ 0x33D LKAS_HUD_2: 5 ADAS
SG_ CAM_TEMP_HIGH : 0|1@1+ (1,0) [0|255] "" Vector__XXX
SG_ BOH : 1|7@1+ (1,0) [0|127] "" Vector__XXX
SG_ DASHED_LANES : 9|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ DTC : 10|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ LKAS_PROBLEM : 11|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ LKAS_OFF : 12|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ SOLID_LANES : 13|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ LDW_RIGHT : 14|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ STEERING_REQUIRED : 15|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ BOH : 16|2@1+ (1,0) [0|4] "" Vector__XXX
SG_ LDW_PROBLEM : 18|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ BEEP : 22|2@1+ (1,0) [0|1] "" Vector__XXX
SG_ LDW_ON : 27|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ LDW_OFF : 28|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ CLEAN_WINDSHIELD : 29|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ SET_ME_X48 : 24|8@1+ (1,0) [0|255] "" Vector__XXX
SG_ COUNTER : 34|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 36|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x372 XXX: 2 XXX BO_ 57 XXX_1: 3 XXX
BO_ 0x374 XXX: 7 XXX BO_ 145 XXX_2: 8 XXX
BO_ 0x377 XXX: 8 XXX SG_ LAT_ACCEL : 7|10@0+ (0.02,-512) [-20|20] "m/s2" NEO
BO_ 0x378 XXX: 8 XXX
BO_ 0x37C XXX: 8 XXX
BO_ 0x39B XXX: 2 XXX
BO_ 0x3A1 XXX: 4 XXX
BO_ 0x3D7 XXX: 8 XXX
BO_ 0x3D9 XXX: 3 XXX
BO_ 0x400 XXX: 5 XXX
BO_ 0x403 XXX: 5 XXX
BO_ 0x405 DOORS_STATUS: 8 BDY BO_ 228 STEERING_CONTROL: 5 ADAS
SG_ DOOR_OPEN_FL : 34|1@1+ (1,0) [0|1] "" Vector__XXX SG_ STEER_TORQUE : 7|16@0- (1,0) [-3840|3840] "" EPS
SG_ DOOR_OPEN_FR : 33|1@1+ (1,0) [0|1] "" Vector__XXX SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
SG_ DOOR_OPEN_RL : 32|1@1+ (1,0) [0|1] "" Vector__XXX SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS
SG_ DOOR_OPEN_RR : 47|1@1+ (1,0) [0|1] "" Vector__XXX SG_ SET_ME_X00 : 31|8@0+ (1,0) [0|0] "" EPS
SG_ COUNTER : 58|2@1+ (1,0) [0|3] "" Vector__XXX SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" EPS
SG_ CHECKSUM : 60|4@1+ (1,0) [0|3] "" Vector__XXX SG_ CHECKSUM : 35|4@0+ (1,0) [0|3] "" EPS
BO_ 0x406 XXX: 5 VSA BO_ 304 GAS_PEDAL2: 8 PCM
BO_ 0x40A XXX: 5 XXX SG_ ENGINE_TORQUE_ESTIMATE : 7|16@0- (1,0) [-1000|1000] "Nm" NEO
BO_ 0x40C XXX: 8 XXX SG_ ENGINE_TORQUE_REQUEST : 23|16@0- (1,0) [-1000|1000] "Nm" NEO
BO_ 0x40F XXX: 8 XXX SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" NEO
BO_ 0x421 XXX: 5 EPS
BO_ 0x428 XXX: 7 XXX
BO_ 0x454 XXX: 8 XXX
BO_ 0x555 XXX: 5 XXX
BO_ 0x640 XXX: 5 XXX
BO_ 0x641 XXX: 8 XXX
VAL_ 0x1A6 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none"; BO_ 316 GAS_PEDAL: 8 PCM
VAL_ 0x1A6 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none"; SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" NEO
VAL_ 0x30C HUD_LEAD 3 "no_car" 2 "solid_car" 1 "dashed_car" 0 "no_car";
VAL_ 0x1A6 LIGHTS_SETTING 3 "high_beam" 2 "low_beam" 1 "position" 0 "no_lights"; BO_ 342 STEERING_SENSORS: 6 EPS
VAL_ 0x18F STEER_STATUS 5 "fault" 4 "no_torque_alert_2" 2 "no_torque_alert_1" 0 "normal"; SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" NEO
VAL_ 0x1A3 GEAR_SHIFTER 10 "S" 4 "D" 3 "N" 2 "R" 1 "P"; SG_ STEER_ANGLE_RATE : 23|16@0- (1,0) [-3000|3000] "deg/s" NEO
VAL_ 0x33D BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep"; SG_ COUNTER : 45|2@0+ (1,0) [0|3] "" NEO
VAL_ 0x1FA CHIME 4 "double_chime" 3 "single_chime" 2 "continuous_chime" 1 "repeating_chime" 0 "no_chime"; SG_ CHECKSUM : 43|4@0+ (1,0) [0|3] "" NEO
VAL_ 0x1FA FCW 3 "fcw" 2 "fcw" 1 "fcw" 0 "no_fcw";
BO_ 344 POWERTRAIN_DATA: 8 PCM
SG_ XMISSION_SPEED : 7|16@0+ (0.002759506,0) [0|70] "m/s" NEO
SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" NEO
SG_ XMISSION_SPEED2 : 39|16@0+ (0.002759506,0) [0|70] "m/s" NEO
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
BO_ 380 POWERTRAIN_DATA2: 8 PCM
SG_ PEDAL_GAS : 7|8@0+ (1,0) [0|255] "" NEO
SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" NEO
SG_ GAS_PRESSED : 39|1@0+ (1,0) [0|1] "" NEO
SG_ ACC_STATUS : 38|1@0+ (1,0) [0|1] "rpm" NEO
SG_ BOH_17C : 37|5@0+ (1,0) [0|1] "rpm" NEO
SG_ BRAKE_LIGHTS_ON : 32|1@0+ (1,0) [0|1] "rpm" NEO
SG_ BOH2_17C : 47|10@0+ (1,0) [0|1] "rpm" NEO
SG_ BRAKE_PRESSED : 53|1@0+ (1,0) [0|1] "" NEO
SG_ BOH3_17C : 52|5@0+ (1,0) [0|1] "rpm" NEO
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
BO_ 398 XXX_3: 3 XXX
BO_ 399 STEER_STATUS: 7 EPS
SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [-31000|31000] "tbd" NEO
SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" NEO
SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" NEO
SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" NEO
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" NEO
SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" NEO
BO_ 419 GEARBOX: 8 PCM
SG_ GEAR : 7|8@0+ (1,0) [0|256] "" NEO
SG_ GEAR_SHIFTER : 35|4@0+ (1,0) [0|15] "" NEO
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
BO_ 420 VSA_STATUS: 8 VSA
SG_ USER_BRAKE : 7|16@0+ (0.015625,-103) [0|1000] "" NEO
SG_ ESP_DISABLED : 28|1@0+ (1,0) [0|1] "" NEO
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
BO_ 422 SCM_BUTTONS: 8 SCM
SG_ CRUISE_BUTTONS : 7|3@0+ (1,0) [0|7] "" NEO
SG_ LIGHTS_SETTING : 1|2@0+ (1,0) [0|3] "" NEO
SG_ MAIN_ON : 47|1@0+ (1,0) [0|1] "" NEO
SG_ CRUISE_SETTING : 43|2@0+ (1,0) [0|3] "" NEO
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
BO_ 428 XXX_4: 8 XXX
BO_ 432 STANDSTILL: 7 VSA
SG_ WHEELS_MOVING : 12|1@0+ (1,0) [0|1] "" NEO
SG_ BRAKE_ERROR_1 : 11|1@0+ (1,0) [0|1] "" NEO
SG_ BRAKE_ERROR_2 : 9|1@0+ (1,0) [0|1] "" NEO
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" NEO
SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" NEO
BO_ 464 WHEEL_SPEEDS: 8 VSA
SG_ WHEEL_SPEED_FL : 7|15@0+ (0.002759506,0) [0|70] "m/s" NEO
SG_ WHEEL_SPEED_FR : 8|15@0+ (0.002759506,0) [0|70] "m/s" NEO
SG_ WHEEL_SPEED_RL : 25|15@0+ (0.002759506,0) [0|70] "m/s" NEO
SG_ WHEEL_SPEED_RR : 42|15@0+ (0.002759506,0) [0|70] "m/s" NEO
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
BO_ 476 XXX_5: 4 XXX
BO_ 490 VEHICLE_DYNAMICS: 8 VSA
SG_ LONG_ACCEL : 23|16@0- (0.0015384,0) [-20|20] "m/s2" NEO
BO_ 506 BRAKE_COMMAND: 8 ADAS
SG_ COMPUTER_BRAKE : 7|10@0+ (0.003906248,0) [0|1] "" EBCM
SG_ ZEROS_BOH : 13|5@0+ (1,0) [0|1] "" EBCM
SG_ COMPUTER_BRAKE_REQUEST : 8|1@0+ (1,0) [0|1] "" EBCM
SG_ CRUISE_BOH2 : 23|3@0+ (1,0) [0|1] "" EBCM
SG_ CRUISE_OVERRIDE : 20|1@0+ (1,0) [0|1] "" EBCM
SG_ CRUISE_BOH3 : 19|1@0+ (1,0) [0|1] "" EBCM
SG_ CRUISE_FAULT_CMD : 18|1@0+ (1,0) [0|1] "" EBCM
SG_ CRUISE_CANCEL_CMD : 17|1@0+ (1,0) [0|1] "" EBCM
SG_ COMPUTER_BRAKE_REQUEST_2 : 16|1@0+ (1,0) [0|1] "" EBCM
SG_ CRUISE_BOH4 : 31|8@0+ (1,0) [0|1] "" EBCM
SG_ BRAKE_LIGHTS : 39|1@0+ (1,0) [0|1] "" EBCM
SG_ CRUISE_BOH5 : 38|7@0+ (1,0) [0|1] "" EBCM
SG_ CHIME : 47|3@0+ (1,0) [0|7] "" EBCM
SG_ CRUISE_BOH6 : 44|1@0+ (1,0) [0|1] "" EBCM
SG_ FCW : 43|2@0+ (1,0) [0|3] "" EBCM
SG_ CRUISE_BOH7 : 41|10@0+ (1,0) [0|0] "" EBCM
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EBCM
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EBCM
BO_ 512 GAS_COMMAND: 3 NEO
SG_ GAS_COMMAND : 7|16@0+ (0.253984064,-328) [0|1] "" INTERCEPTOR
SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" INTERCEPTOR
SG_ CHECKSUM : 19|4@0+ (1,0) [0|3] "" INTERCEPTOR
BO_ 513 GAS_SENSOR: 5 INTERCEPTOR
SG_ INTERCEPTOR_GAS : 7|16@0+ (0.253984064,-328) [0|1] "" NEO
SG_ INTERCEPTOR_GAS2 : 23|16@0+ (0.126992032,-656) [0|1] "" NEO
SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" NEO
SG_ CHECKSUM : 35|4@0+ (1,0) [0|3] "" NEO
BO_ 542 XXX_6: 7 XXX
BO_ 545 XXX_7: 4 XXX
BO_ 597 ROUGH_WHEEL_SPEED: 8 VSA
SG_ WHEEL_SPEED_FL : 7|8@0+ (1,0) [0|255] "mph" NEO
SG_ WHEEL_SPEED_FR : 15|8@0+ (1,0) [0|255] "mph" NEO
SG_ WHEEL_SPEED_RL : 23|8@0+ (1,0) [0|255] "mph" NEO
SG_ WHEEL_SPEED_RR : 31|8@0+ (1,0) [0|255] "mph" NEO
SG_ SET_TO_X55 : 39|8@0+ (1,0) [0|255] "" NEO
SG_ SET_TO_X55 : 47|8@0+ (1,0) [0|255] "" NEO
BO_ 660 SCM_COMMANDS: 8 SCM
SG_ RIGHT_BLINKER : 6|1@0+ (1,0) [0|1] "" NEO
SG_ LEFT_BLINKER : 5|1@0+ (1,0) [0|1] "" NEO
SG_ WIPERS_SPEED : 4|2@0+ (1,0) [0|3] "" NEO
BO_ 773 SEATBELT_STATUS: 7 BDY
SG_ SEATBELT_DRIVER_LAMP : 7|1@0+ (1,0) [0|1] "" NEO
SG_ SEATBELT_DRIVER_LATCHED : 13|1@0+ (1,0) [0|1] "" NEO
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" NEO
SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" NEO
BO_ 777 XXX_8: 8 XXX
BO_ 780 ACC_HUD: 8 ADAS
SG_ PCM_SPEED : 7|16@0+ (0.002763889,0) [0|100] "m/s" BDY
SG_ PCM_GAS : 23|7@0+ (1,0) [0|127] "" BDY
SG_ ZEROS_BOH : 16|1@0+ (1,0) [0|255] "" BDY
SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "" BDY
SG_ DTC_MODE : 39|1@0+ (1,0) [0|1] "" BDY
SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_OFF : 36|1@0+ (1,0) [0|1] "" BDY
SG_ BOH_2 : 35|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
SG_ RADAR_OBSTRUCTED : 33|1@0+ (1,0) [0|1] "" BDY
SG_ ENABLE_MINI_CAR : 32|1@0+ (1,0) [0|1] "" BDY
SG_ SET_ME_X03 : 47|2@0+ (1,0) [0|3] "" BDY
SG_ HUD_LEAD : 45|2@0+ (1,0) [0|3] "" BDY
SG_ BOH_3 : 43|1@0+ (1,0) [0|3] "" BDY
SG_ BOH_4 : 42|1@0+ (1,0) [0|3] "" BDY
SG_ BOH_5 : 41|1@0+ (1,0) [0|3] "" BDY
SG_ CRUISE_CONTROL_LABEL : 40|1@0+ (1,0) [0|3] "" BDY
SG_ HUD_DISTANCE_3 : 52|1@0+ (1,0) [0|1] "" BDY
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" BDY
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" BDY
BO_ 800 XXX_9: 8 XXX
BO_ 804 CRUISE: 8 PCM
SG_ ENGINE_TEMPERATURE : 7|8@0+ (1,0) [0|255] "" NEO
SG_ BOH : 15|8@0+ (1,0) [0|255] "" NEO
SG_ TRIP_FUEL_CONSUMED : 23|16@0+ (1,0) [0|255] "" NEO
SG_ CRUISE_SPEED_PCM : 39|8@0+ (1,0) [0|255] "" NEO
SG_ BOH2 : 47|8@0- (1,0) [0|255] "" NEO
SG_ BOH3 : 55|8@0+ (1,0) [0|255] "" NEO
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
BO_ 808 XXX_10: 8 XXX
BO_ 819 XXX_11: 7 XXX
BO_ 821 XXX_12: 5 XXX
BO_ 829 LKAS_HUD_2: 5 ADAS
SG_ CAM_TEMP_HIGH : 7|1@0+ (1,0) [0|255] "" BDY
SG_ BOH : 6|7@0+ (1,0) [0|127] "" BDY
SG_ DASHED_LANES : 14|1@0+ (1,0) [0|1] "" BDY
SG_ DTC : 13|1@0+ (1,0) [0|1] "" BDY
SG_ LKAS_PROBLEM : 12|1@0+ (1,0) [0|1] "" BDY
SG_ LKAS_OFF : 11|1@0+ (1,0) [0|1] "" BDY
SG_ SOLID_LANES : 10|1@0+ (1,0) [0|1] "" BDY
SG_ LDW_RIGHT : 9|1@0+ (1,0) [0|1] "" BDY
SG_ STEERING_REQUIRED : 8|1@0+ (1,0) [0|1] "" BDY
SG_ BOH : 23|2@0+ (1,0) [0|4] "" BDY
SG_ LDW_PROBLEM : 21|1@0+ (1,0) [0|1] "" BDY
SG_ BEEP : 17|2@0+ (1,0) [0|1] "" BDY
SG_ LDW_ON : 28|1@0+ (1,0) [0|1] "" BDY
SG_ LDW_OFF : 27|1@0+ (1,0) [0|1] "" BDY
SG_ CLEAN_WINDSHIELD : 26|1@0+ (1,0) [0|1] "" BDY
SG_ SET_ME_X48 : 31|8@0+ (1,0) [0|255] "" BDY
SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" BDY
SG_ CHECKSUM : 35|4@0+ (1,0) [0|3] "" BDY
BO_ 882 XXX_13: 2 XXX
BO_ 884 XXX_14: 7 XXX
BO_ 887 XXX_15: 8 XXX
BO_ 888 XXX_16: 8 XXX
BO_ 892 XXX_17: 8 XXX
BO_ 923 XXX_18: 2 XXX
BO_ 929 XXX_19: 4 XXX
BO_ 983 XXX_20: 8 XXX
BO_ 985 XXX_21: 3 XXX
BO_ 1024 XXX_22: 5 XXX
BO_ 1027 XXX_23: 5 XXX
BO_ 1029 DOORS_STATUS: 8 BDY
SG_ DOOR_OPEN_FL : 37|1@0+ (1,0) [0|1] "" NEO
SG_ DOOR_OPEN_FR : 38|1@0+ (1,0) [0|1] "" NEO
SG_ DOOR_OPEN_RL : 39|1@0+ (1,0) [0|1] "" NEO
SG_ DOOR_OPEN_RR : 40|1@0+ (1,0) [0|1] "" NEO
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
BO_ 1030 XXX_24: 5 VSA
BO_ 1034 XXX_25: 5 XXX
BO_ 1036 XXX_26: 8 XXX
BO_ 1039 XXX_27: 8 XXX
BO_ 1057 XXX_28: 5 EPS
BO_ 1064 XXX_29: 7 XXX
BO_ 1108 XXX_30: 8 XXX
BO_ 1365 XXX_31: 5 XXX
BO_ 1600 XXX_32: 5 XXX
BO_ 1601 XXX_33: 8 XXX
BO_TX_BU_ 228 : NEO,ADAS;
BO_TX_BU_ 506 : NEO,ADAS;
BO_TX_BU_ 780 : NEO,ADAS;
BO_TX_BU_ 829 : NEO,ADAS;
CM_ SG_ 419 GEAR "10 = reverse, 11 = transition";
CM_ SG_ 490 LONG_ACCEL "wheel speed derivative, noisy and zero snapping";
CM_ SG_ 780 CRUISE_SPEED "255 = no speed";
CM_ SG_ 804 CRUISE_SPEED_PCM "255 = no speed";
CM_ SG_ 829 BEEP "beeps are pleasant, chimes are for warnngs etc...";
VAL_ 399 STEER_STATUS 5 "fault" 4 "no_torque_alert_2" 2 "no_torque_alert_1" 0 "normal" ;
VAL_ 419 GEAR_SHIFTER 10 "S" 4 "D" 3 "N" 2 "R" 1 "P" ;
VAL_ 422 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
VAL_ 422 LIGHTS_SETTING 3 "high_beam" 2 "low_beam" 1 "position" 0 "no_lights" ;
VAL_ 422 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none" ;
VAL_ 506 CHIME 4 "double_chime" 3 "single_chime" 2 "continuous_chime" 1 "repeating_chime" 0 "no_chime" ;
VAL_ 506 FCW 3 "fcw" 2 "fcw" 1 "fcw" 0 "no_fcw" ;
VAL_ 780 HUD_LEAD 3 "no_car" 2 "solid_car" 1 "dashed_car" 0 "no_car" ;
VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
CM_ SG_ 0x1A3 GEAR "10 = reverse, 11 = transition";
CM_ SG_ 0x324 CRUISE_SPEED_ECHO "255 = no speed";
CM_ SG_ 0x33D CRUISE_SPEED "255 = no speed";
CM_ SG_ 0x1EA LONG_ACCEL "wheel speed derivative, noisy and zero snapping";
CM_ SG_ 0x33D BEEP "beeps are pleasant, chimes are for warnngs etc...";
+113 -105
View File
@@ -15,7 +15,7 @@ NS_ :
ENVVAR_DATA_ ENVVAR_DATA_
SGTYPE_ SGTYPE_
SGTYPE_VAL_ SGTYPE_VAL_
BA_DEF_SGTYPE_ BA_DEF_SGTYPE_
BA_SGTYPE_ BA_SGTYPE_
SIG_TYPE_REF_ SIG_TYPE_REF_
VAL_TABLE_ VAL_TABLE_
@@ -33,143 +33,151 @@ NS_ :
BS_: BS_:
BU_: ADAS RADAR NEO XXX
BO_ 0x300 VEHICLE_STATE: 8 ADAS
SG_ SET_ME_XF9 : 0|8@1+ (1,0) [0|255] "" Vector__XXX
SG_ VEHICLE_SPEED : 8|8@1+ (1,0) [0|255] "kph" Vector__XXX
BO_ 0x301 VEHICLE_STATE2: 8 ADAS BO_ 768 VEHICLE_STATE: 8 ADAS
SG_ SET_ME_0F18510 : 0|28@1+ (1,0) [0|268435455] "" Vector__XXX SG_ SET_ME_XF9 : 7|8@0+ (1,0) [0|255] "" Vector__XXX
SG_ SET_ME_25A0000 : 28|28@1+ (1,0) [0|268435455] "" Vector__XXX SG_ VEHICLE_SPEED : 15|8@0+ (1,0) [0|255] "kph" Vector__XXX
BO_ 0x400 XXX: 8 RADAR BO_ 769 VEHICLE_STATE2: 8 ADAS
SG_ SET_ME_0F18510 : 7|28@0+ (1,0) [0|268435455] "" Vector__XXX
SG_ SET_ME_25A0000 : 27|28@0+ (1,0) [0|268435455] "" Vector__XXX
BO_ 0x410 XXX: 8 RADAR BO_ 1024 XXX_100: 8 RADAR
BO_ 0x411 XXX: 8 RADAR BO_ 1040 XXX_101: 8 RADAR
BO_ 0x412 XXX: 8 RADAR BO_ 1041 XXX_102: 8 RADAR
BO_ 0x413 XXX: 8 RADAR BO_ 1042 XXX_103: 8 RADAR
BO_ 0x414 XXX: 8 RADAR BO_ 1043 XXX_104: 8 RADAR
BO_ 0x415 XXX: 8 RADAR BO_ 1044 XXX_105: 8 RADAR
BO_ 0x416 XXX: 8 RADAR BO_ 1045 XXX_106: 8 RADAR
BO_ 0x417 XXX: 8 RADAR BO_ 1046 XXX_107: 8 RADAR
BO_ 0x420 XXX: 8 RADAR BO_ 1047 XXX_108: 8 RADAR
BO_ 0x421 XXX: 8 RADAR BO_ 1056 XXX_109: 8 RADAR
BO_ 0x422 XXX: 8 RADAR BO_ 1057 XXX_110: 8 RADAR
BO_ 0x423 XXX: 8 RADAR BO_ 1058 XXX_111: 8 RADAR
BO_ 0x424 XXX: 8 RADAR BO_ 1059 XXX_112: 8 RADAR
BO_ 0x430 TRACK_0: 8 RADAR BO_ 1060 XXX_113: 8 RADAR
SG_ LONG_DIST : 0|12@1+ (0.0625,0) [0|255.5] "m" Vector__XXX
SG_ NEW_TRACK : 12|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ LAT_DIST : 14|10@1- (0.0625,0) [0|63.5] "m" Vector__XXX
SG_ REL_SPEED : 24|12@1- (0.03125,0) [0|127.5] "m/s" Vector__XXX
BO_ 0x431 TRACK_1: 8 RADAR BO_ 1072 TRACK_0: 8 RADAR
SG_ LONG_DIST : 0|12@1+ (0.0625,0) [0|255.5] "m" Vector__XXX SG_ LONG_DIST : 7|12@0+ (0.0625,0) [0|255.5] "m" NEO
SG_ NEW_TRACK : 12|1@1+ (1,0) [0|1] "" Vector__XXX SG_ NEW_TRACK : 11|1@0+ (1,0) [0|1] "" NEO
SG_ LAT_DIST : 14|10@1- (0.0625,0) [0|63.5] "m" Vector__XXX SG_ LAT_DIST : 9|10@0- (0.0625,0) [0|63.5] "m" NEO
SG_ REL_SPEED : 24|12@1- (0.03125,0) [0|127.5] "m/s" Vector__XXX SG_ REL_SPEED : 31|12@0- (0.03125,0) [0|127.5] "m/s" NEO
BO_ 0x432 TRACK_2: 8 RADAR BO_ 1073 TRACK_1: 8 RADAR
SG_ LONG_DIST : 0|12@1+ (0.0625,0) [0|255.5] "m" Vector__XXX SG_ LONG_DIST : 7|12@0+ (0.0625,0) [0|255.5] "m" NEO
SG_ NEW_TRACK : 12|1@1+ (1,0) [0|1] "" Vector__XXX SG_ NEW_TRACK : 11|1@0+ (1,0) [0|1] "" NEO
SG_ LAT_DIST : 14|10@1- (0.0625,0) [0|63.5] "m" Vector__XXX SG_ LAT_DIST : 9|10@0- (0.0625,0) [0|63.5] "m" NEO
SG_ REL_SPEED : 24|12@1- (0.03125,0) [0|127.5] "m/s" Vector__XXX SG_ REL_SPEED : 31|12@0- (0.03125,0) [0|127.5] "m/s" NEO
BO_ 0x433 TRACK_3: 8 RADAR BO_ 1074 TRACK_2: 8 RADAR
SG_ LONG_DIST : 0|12@1+ (0.0625,0) [0|255.5] "m" Vector__XXX SG_ LONG_DIST : 7|12@0+ (0.0625,0) [0|255.5] "m" NEO
SG_ NEW_TRACK : 12|1@1+ (1,0) [0|1] "" Vector__XXX SG_ NEW_TRACK : 11|1@0+ (1,0) [0|1] "" NEO
SG_ LAT_DIST : 14|10@1- (0.0625,0) [0|63.5] "m" Vector__XXX SG_ LAT_DIST : 9|10@0- (0.0625,0) [0|63.5] "m" NEO
SG_ REL_SPEED : 24|12@1- (0.03125,0) [0|127.5] "m/s" Vector__XXX SG_ REL_SPEED : 31|12@0- (0.03125,0) [0|127.5] "m/s" NEO
BO_ 0x434 TRACK_4: 8 RADAR BO_ 1075 TRACK_3: 8 RADAR
SG_ LONG_DIST : 0|12@1+ (0.0625,0) [0|255.5] "m" Vector__XXX SG_ LONG_DIST : 7|12@0+ (0.0625,0) [0|255.5] "m" NEO
SG_ NEW_TRACK : 12|1@1+ (1,0) [0|1] "" Vector__XXX SG_ NEW_TRACK : 11|1@0+ (1,0) [0|1] "" NEO
SG_ LAT_DIST : 14|10@1- (0.0625,0) [0|63.5] "m" Vector__XXX SG_ LAT_DIST : 9|10@0- (0.0625,0) [0|63.5] "m" NEO
SG_ REL_SPEED : 24|12@1- (0.03125,0) [0|127.5] "m/s" Vector__XXX SG_ REL_SPEED : 31|12@0- (0.03125,0) [0|127.5] "m/s" NEO
BO_ 0x435 TRACK_5: 8 RADAR BO_ 1076 TRACK_4: 8 RADAR
SG_ LONG_DIST : 0|12@1+ (0.0625,0) [0|255.5] "m" Vector__XXX SG_ LONG_DIST : 7|12@0+ (0.0625,0) [0|255.5] "m" NEO
SG_ NEW_TRACK : 12|1@1+ (1,0) [0|1] "" Vector__XXX SG_ NEW_TRACK : 11|1@0+ (1,0) [0|1] "" NEO
SG_ LAT_DIST : 14|10@1- (0.0625,0) [0|63.5] "m" Vector__XXX SG_ LAT_DIST : 9|10@0- (0.0625,0) [0|63.5] "m" NEO
SG_ REL_SPEED : 24|12@1- (0.03125,0) [0|127.5] "m/s" Vector__XXX SG_ REL_SPEED : 31|12@0- (0.03125,0) [0|127.5] "m/s" NEO
BO_ 0x436 TRACK_6: 8 RADAR BO_ 1077 TRACK_5: 8 RADAR
SG_ LONG_DIST : 0|12@1+ (0.0625,0) [0|255.5] "m" Vector__XXX SG_ LONG_DIST : 7|12@0+ (0.0625,0) [0|255.5] "m" NEO
SG_ NEW_TRACK : 12|1@1+ (1,0) [0|1] "" Vector__XXX SG_ NEW_TRACK : 11|1@0+ (1,0) [0|1] "" NEO
SG_ LAT_DIST : 14|10@1- (0.0625,0) [0|63.5] "m" Vector__XXX SG_ LAT_DIST : 9|10@0- (0.0625,0) [0|63.5] "m" NEO
SG_ REL_SPEED : 24|12@1- (0.03125,0) [0|127.5] "m/s" Vector__XXX SG_ REL_SPEED : 31|12@0- (0.03125,0) [0|127.5] "m/s" NEO
BO_ 0x437 TRACK_7: 8 RADAR BO_ 1078 TRACK_6: 8 RADAR
SG_ LONG_DIST : 0|12@1+ (0.0625,0) [0|255.5] "m" Vector__XXX SG_ LONG_DIST : 7|12@0+ (0.0625,0) [0|255.5] "m" NEO
SG_ NEW_TRACK : 12|1@1+ (1,0) [0|1] "" Vector__XXX SG_ NEW_TRACK : 11|1@0+ (1,0) [0|1] "" NEO
SG_ LAT_DIST : 14|10@1- (0.0625,0) [0|63.5] "m" Vector__XXX SG_ LAT_DIST : 9|10@0- (0.0625,0) [0|63.5] "m" NEO
SG_ REL_SPEED : 24|12@1- (0.03125,0) [0|127.5] "m/s" Vector__XXX SG_ REL_SPEED : 31|12@0- (0.03125,0) [0|127.5] "m/s" NEO
BO_ 0x438 TRACK_8: 8 RADAR BO_ 1079 TRACK_7: 8 RADAR
SG_ LONG_DIST : 0|12@1+ (0.0625,0) [0|255.5] "m" Vector__XXX SG_ LONG_DIST : 7|12@0+ (0.0625,0) [0|255.5] "m" NEO
SG_ NEW_TRACK : 12|1@1+ (1,0) [0|1] "" Vector__XXX SG_ NEW_TRACK : 11|1@0+ (1,0) [0|1] "" NEO
SG_ LAT_DIST : 14|10@1- (0.0625,0) [0|63.5] "m" Vector__XXX SG_ LAT_DIST : 9|10@0- (0.0625,0) [0|63.5] "m" NEO
SG_ REL_SPEED : 24|12@1- (0.03125,0) [0|127.5] "m/s" Vector__XXX SG_ REL_SPEED : 31|12@0- (0.03125,0) [0|127.5] "m/s" NEO
BO_ 0x439 TRACK_9: 8 RADAR BO_ 1080 TRACK_8: 8 RADAR
SG_ LONG_DIST : 0|12@1+ (0.0625,0) [0|255.5] "m" Vector__XXX SG_ LONG_DIST : 7|12@0+ (0.0625,0) [0|255.5] "m" NEO
SG_ NEW_TRACK : 12|1@1+ (1,0) [0|1] "" Vector__XXX SG_ NEW_TRACK : 11|1@0+ (1,0) [0|1] "" NEO
SG_ LAT_DIST : 14|10@1- (0.0625,0) [0|63.5] "m" Vector__XXX SG_ LAT_DIST : 9|10@0- (0.0625,0) [0|63.5] "m" NEO
SG_ REL_SPEED : 24|12@1- (0.03125,0) [0|127.5] "m/s" Vector__XXX SG_ REL_SPEED : 31|12@0- (0.03125,0) [0|127.5] "m/s" NEO
BO_ 0x440 TRACK_10: 8 RADAR BO_ 1081 TRACK_9: 8 RADAR
SG_ LONG_DIST : 0|12@1+ (0.0625,0) [0|255.5] "m" Vector__XXX SG_ LONG_DIST : 7|12@0+ (0.0625,0) [0|255.5] "m" NEO
SG_ NEW_TRACK : 12|1@1+ (1,0) [0|1] "" Vector__XXX SG_ NEW_TRACK : 11|1@0+ (1,0) [0|1] "" NEO
SG_ LAT_DIST : 14|10@1- (0.0625,0) [0|63.5] "m" Vector__XXX SG_ LAT_DIST : 9|10@0- (0.0625,0) [0|63.5] "m" NEO
SG_ REL_SPEED : 24|12@1- (0.03125,0) [0|127.5] "m/s" Vector__XXX SG_ REL_SPEED : 31|12@0- (0.03125,0) [0|127.5] "m/s" NEO
BO_ 0x441 TRACK_11: 8 RADAR BO_ 1088 TRACK_10: 8 RADAR
SG_ LONG_DIST : 0|12@1+ (0.0625,0) [0|255.5] "m" Vector__XXX SG_ LONG_DIST : 7|12@0+ (0.0625,0) [0|255.5] "m" NEO
SG_ NEW_TRACK : 12|1@1+ (1,0) [0|1] "" Vector__XXX SG_ NEW_TRACK : 11|1@0+ (1,0) [0|1] "" NEO
SG_ LAT_DIST : 14|10@1- (0.0625,0) [0|63.5] "m" Vector__XXX SG_ LAT_DIST : 9|10@0- (0.0625,0) [0|63.5] "m" NEO
SG_ REL_SPEED : 24|12@1- (0.03125,0) [0|127.5] "m/s" Vector__XXX SG_ REL_SPEED : 31|12@0- (0.03125,0) [0|127.5] "m/s" NEO
BO_ 0x442 TRACK_12: 8 RADAR BO_ 1089 TRACK_11: 8 RADAR
SG_ LONG_DIST : 0|12@1+ (0.0625,0) [0|255.5] "m" Vector__XXX SG_ LONG_DIST : 7|12@0+ (0.0625,0) [0|255.5] "m" NEO
SG_ NEW_TRACK : 12|1@1+ (1,0) [0|1] "" Vector__XXX SG_ NEW_TRACK : 11|1@0+ (1,0) [0|1] "" NEO
SG_ LAT_DIST : 14|10@1- (0.0625,0) [0|63.5] "m" Vector__XXX SG_ LAT_DIST : 9|10@0- (0.0625,0) [0|63.5] "m" NEO
SG_ REL_SPEED : 24|12@1- (0.03125,0) [0|127.5] "m/s" Vector__XXX SG_ REL_SPEED : 31|12@0- (0.03125,0) [0|127.5] "m/s" NEO
BO_ 0x443 TRACK_13: 8 RADAR BO_ 1090 TRACK_12: 8 RADAR
SG_ LONG_DIST : 0|12@1+ (0.0625,0) [0|255.5] "m" Vector__XXX SG_ LONG_DIST : 7|12@0+ (0.0625,0) [0|255.5] "m" NEO
SG_ NEW_TRACK : 12|1@1+ (1,0) [0|1] "" Vector__XXX SG_ NEW_TRACK : 11|1@0+ (1,0) [0|1] "" NEO
SG_ LAT_DIST : 14|10@1- (0.0625,0) [0|63.5] "m" Vector__XXX SG_ LAT_DIST : 9|10@0- (0.0625,0) [0|63.5] "m" NEO
SG_ REL_SPEED : 24|12@1- (0.03125,0) [0|127.5] "m/s" Vector__XXX SG_ REL_SPEED : 31|12@0- (0.03125,0) [0|127.5] "m/s" NEO
BO_ 0x444 TRACK_14: 8 RADAR BO_ 1091 TRACK_13: 8 RADAR
SG_ LONG_DIST : 0|12@1+ (0.0625,0) [0|255.5] "m" Vector__XXX SG_ LONG_DIST : 7|12@0+ (0.0625,0) [0|255.5] "m" NEO
SG_ NEW_TRACK : 12|1@1+ (1,0) [0|1] "" Vector__XXX SG_ NEW_TRACK : 11|1@0+ (1,0) [0|1] "" NEO
SG_ LAT_DIST : 14|10@1- (0.0625,0) [0|63.5] "m" Vector__XXX SG_ LAT_DIST : 9|10@0- (0.0625,0) [0|63.5] "m" NEO
SG_ REL_SPEED : 24|12@1- (0.03125,0) [0|127.5] "m/s" Vector__XXX SG_ REL_SPEED : 31|12@0- (0.03125,0) [0|127.5] "m/s" NEO
BO_ 0x445 TRACK_15: 8 RADAR BO_ 1092 TRACK_14: 8 RADAR
SG_ LONG_DIST : 0|12@1+ (0.0625,0) [0|255.5] "m" Vector__XXX SG_ LONG_DIST : 7|12@0+ (0.0625,0) [0|255.5] "m" NEO
SG_ NEW_TRACK : 12|1@1+ (1,0) [0|1] "" Vector__XXX SG_ NEW_TRACK : 11|1@0+ (1,0) [0|1] "" NEO
SG_ LAT_DIST : 14|10@1- (0.0625,0) [0|63.5] "m" Vector__XXX SG_ LAT_DIST : 9|10@0- (0.0625,0) [0|63.5] "m" NEO
SG_ REL_SPEED : 24|12@1- (0.03125,0) [0|127.5] "m/s" Vector__XXX SG_ REL_SPEED : 31|12@0- (0.03125,0) [0|127.5] "m/s" NEO
BO_ 0x4FF XXX: 8 RADAR BO_ 1093 TRACK_15: 8 RADAR
SG_ LONG_DIST : 7|12@0+ (0.0625,0) [0|255.5] "m" NEO
SG_ NEW_TRACK : 11|1@0+ (1,0) [0|1] "" NEO
SG_ LAT_DIST : 9|10@0- (0.0625,0) [0|63.5] "m" NEO
SG_ REL_SPEED : 31|12@0- (0.03125,0) [0|127.5] "m/s" NEO
BO_ 1279 XXX_114: 8 RADAR
BO_ 1280 XXX_115: 8 RADAR
BO_ 1296 XXX_116: 8 RADAR
BO_ 1297 XXX_117: 8 RADAR
BO_TX_BU_ 768 : NEO,ADAS;
BO_TX_BU_ 769 : NEO,ADAS;
BO_ 0x500 XXX: 8 RADAR
BO_ 0x510 XXX: 8 RADAR
BO_ 0x511 XXX: 8 RADAR
+267 -243
View File
@@ -15,7 +15,7 @@ NS_ :
ENVVAR_DATA_ ENVVAR_DATA_
SGTYPE_ SGTYPE_
SGTYPE_VAL_ SGTYPE_VAL_
BA_DEF_SGTYPE_ BA_DEF_SGTYPE_
BA_SGTYPE_ BA_SGTYPE_
SIG_TYPE_REF_ SIG_TYPE_REF_
VAL_TABLE_ VAL_TABLE_
@@ -33,287 +33,311 @@ NS_ :
BS_: BS_:
BO_ 0x039 XXX: 3 XXX BU_: INTERCEPTOR EBCM NEO ADAS PCM EPS VSA SCM BDY XXX EPB
BO_ 0x94 XXX: 8 XXX
SG_ LAT_ACCEL : 0|10@1+ (0.02,-512) [-20|20] "m/s2" Vector__XXX
SG_ LONG_ACCEL : 31|9@1- (-0.02,0) [-20|20] "m/s2" Vector__XXX
BO_ 0x0E4 STEERING_CONTROL: 5 ADAS BO_ 57 XXX_1: 3 XXX
SG_ STEER_TORQUE : 0|16@1- (1,0) [-3840|3840] "" Vector__XXX
SG_ STEER_TORQUE_REQUEST : 16|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ SET_ME_X00 : 17|7@1+ (1,0) [0|127] "" Vector__XXX
SG_ SET_ME_X00_2 : 24|8@1+ (1,0) [0|0] "" Vector__XXX
SG_ CHECKSUM : 32|4@1+ (1,0) [0|15] "" Vector__XXX
SG_ COUNTER : 38|2@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x130 GAS_PEDAL2: 8 PCM BO_ 148 XXX_2: 8 XXX
SG_ ENGINE_TORQUE_ESTIMATE : 0|16@1- (1,0) [-1000|1000] "Nm" Vector__XXX SG_ LAT_ACCEL : 7|10@0+ (0.02,-512) [-20|20] "m/s2" NEO
SG_ ENGINE_TORQUE_REQUEST : 16|16@1- (1,0) [-1000|1000] "Nm" Vector__XXX SG_ LONG_ACCEL : 24|9@0- (-0.02,0) [-20|20] "m/s2" NEO
SG_ CAR_GAS : 32|8@1+ (1,0) [0|255] "" Vector__XXX
BO_ 0x14A STEERING_SENSORS: 8 EPS BO_ 228 STEERING_CONTROL: 5 ADAS
SG_ STEER_ANGLE : 0|16@1- (-0.1,0) [-500|500] "deg" Vector__XXX SG_ STEER_TORQUE : 7|16@0- (1,0) [-3840|3840] "" EPS
SG_ STEER_ANGLE_RATE : 16|16@1- (-1,0) [-3000|3000] "deg/s" Vector__XXX SG_ STEER_TORQUE_REQUEST : 23|1@0+ (1,0) [0|1] "" EPS
SG_ STEER_ANGLE_OFFSET : 32|8@1- (-0.1,0) [-128|127] "deg" Vector__XXX SG_ SET_ME_X00 : 22|7@0+ (1,0) [0|127] "" EPS
SG_ STEER_WHEEL_ANGLE : 40|16@1- (-0.1,0) [-500|500] "deg" Vector__XXX SG_ SET_ME_X00_2 : 31|8@0+ (1,0) [0|0] "" EPS
SG_ COUNTER : 58|2@1+ (1,0) [0|3] "" Vector__XXX SG_ CHECKSUM : 39|4@0+ (1,0) [0|15] "" EPS
SG_ CHECKSUM : 60|4@1+ (1,0) [0|3] "" Vector__XXX SG_ COUNTER : 33|2@0+ (1,0) [0|3] "" EPS
BO_ 0x158 POWERTRAIN_DATA: 8 PCM BO_ 304 GAS_PEDAL2: 8 PCM
SG_ XMISSION_SPEED : 0|16@1+ (0.002759506,0) [0|70] "m/s" Vector__XXX SG_ ENGINE_TORQUE_ESTIMATE : 7|16@0- (1,0) [-1000|1000] "Nm" NEO
SG_ ENGINE_RPM : 16|16@1+ (1,0) [0|15000] "rpm" Vector__XXX SG_ ENGINE_TORQUE_REQUEST : 23|16@0- (1,0) [-1000|1000] "Nm" NEO
SG_ XMISSION_SPEED2 : 32|16@1+ (0.002759506,0) [0|70] "m/s" Vector__XXX SG_ CAR_GAS : 39|8@0+ (1,0) [0|255] "" NEO
SG_ COUNTER : 58|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 60|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x17C POWERTRAIN_DATA2: 8 PCM BO_ 330 STEERING_SENSORS: 8 EPS
SG_ PEDAL_GAS : 0|8@1+ (1,0) [0|255] "" Vector__XXX SG_ STEER_ANGLE : 7|16@0- (-0.1,0) [-500|500] "deg" NEO
SG_ ENGINE_RPM : 16|16@1+ (1,0) [0|15000] "rpm" Vector__XXX SG_ STEER_ANGLE_RATE : 23|16@0- (-1,0) [-3000|3000] "deg/s" NEO
SG_ GAS_PRESSED : 32|1@1+ (1,0) [0|1] "" Vector__XXX SG_ STEER_ANGLE_OFFSET : 39|8@0- (-0.1,0) [-128|127] "deg" NEO
SG_ ACC_STATUS : 33|1@1+ (1,0) [0|1] "rpm" Vector__XXX SG_ STEER_WHEEL_ANGLE : 47|16@0- (-0.1,0) [-500|500] "deg" NEO
SG_ BOH_17C : 34|5@1+ (1,0) [0|1] "rpm" Vector__XXX SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
SG_ BRAKE_LIGHTS_ON : 39|1@1+ (1,0) [0|1] "rpm" Vector__XXX SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
SG_ BOH2_17C : 40|10@1+ (1,0) [0|1] "rpm" Vector__XXX
SG_ BRAKE_PRESSED : 50|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ BOH3_17C : 51|5@1+ (1,0) [0|1] "rpm" Vector__XXX
SG_ COUNTER : 58|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 60|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x18F STEER_STATUS: 7 EPS BO_ 344 POWERTRAIN_DATA: 8 PCM
SG_ STEER_TORQUE_SENSOR : 0|16@1- (1,0) [-31000|31000] "tbd" Vector__XXX SG_ XMISSION_SPEED : 7|16@0+ (0.002759506,0) [0|70] "m/s" NEO
SG_ STEER_TORQUE_MOTOR : 16|16@1- (1,0) [-31000|31000] "tbd" Vector__XXX SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" NEO
SG_ STEER_STATUS : 32|4@1+ (1,0) [0|15] "" Vector__XXX SG_ XMISSION_SPEED2 : 39|16@0+ (0.002759506,0) [0|70] "m/s" NEO
SG_ STEER_CONTROL_ACTIVE : 36|1@1+ (1,0) [0|1] "" Vector__XXX SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
SG_ COUNTER : 50|2@1+ (1,0) [0|3] "" Vector__XXX SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
SG_ CHECKSUM : 52|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x191 GEARBOX: 8 PCM BO_ 380 POWERTRAIN_DATA2: 8 PCM
SG_ GEAR_SHIFTER : 2|6@1+ (1,0) [0|63] "" Vector__XXX SG_ PEDAL_GAS : 7|8@0+ (1,0) [0|255] "" NEO
SG_ GEAR : 36|4@1+ (1,0) [0|15] "" Vector__XXX SG_ ENGINE_RPM : 23|16@0+ (1,0) [0|15000] "rpm" NEO
SG_ COUNTER : 58|2@1+ (1,0) [0|3] "" Vector__XXX SG_ GAS_PRESSED : 39|1@0+ (1,0) [0|1] "" NEO
SG_ CHECKSUM : 60|4@1+ (1,0) [0|3] "" Vector__XXX SG_ ACC_STATUS : 38|1@0+ (1,0) [0|1] "rpm" NEO
SG_ BOH_17C : 37|5@0+ (1,0) [0|1] "rpm" NEO
SG_ BRAKE_LIGHTS_ON : 32|1@0+ (1,0) [0|1] "rpm" NEO
SG_ BOH2_17C : 47|10@0+ (1,0) [0|1] "rpm" NEO
SG_ BRAKE_PRESSED : 53|1@0+ (1,0) [0|1] "" NEO
SG_ BOH3_17C : 52|5@0+ (1,0) [0|1] "rpm" NEO
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
BO_ 0x1A4 VSA_STATUS: 8 VSA BO_ 399 STEER_STATUS: 7 EPS
SG_ USER_BRAKE : 0|16@1+ (0.015625,-103) [0|1000] "" Vector__XXX SG_ STEER_TORQUE_SENSOR : 7|16@0- (1,0) [-31000|31000] "tbd" NEO
SG_ ESP_DISABLED : 27|1@1+ (1,0) [0|1] "" Vector__XXX SG_ STEER_TORQUE_MOTOR : 23|16@0- (1,0) [-31000|31000] "tbd" NEO
SG_ COUNTER : 58|2@1+ (1,0) [0|3] "" Vector__XXX SG_ STEER_STATUS : 39|4@0+ (1,0) [0|15] "" NEO
SG_ CHECKSUM : 60|4@1+ (1,0) [0|3] "" Vector__XXX SG_ STEER_CONTROL_ACTIVE : 35|1@0+ (1,0) [0|1] "" NEO
SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" NEO
SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" NEO
BO_ 0x1AB XXX: 3 VSA BO_ 401 GEARBOX: 8 PCM
SG_ GEAR_SHIFTER : 5|6@0+ (1,0) [0|63] "" NEO
SG_ GEAR : 35|4@0+ (1,0) [0|15] "" NEO
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
BO_ 0x1AC XXX: 8 XXX BO_ 420 VSA_STATUS: 8 VSA
SG_ USER_BRAKE : 7|16@0+ (0.015625,-103) [0|1000] "" NEO
SG_ ESP_DISABLED : 28|1@0+ (1,0) [0|1] "" NEO
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
BO_ 0x1B0 STANDSTILL: 7 VSA BO_ 427 XXX_3: 3 VSA
SG_ WHEELS_MOVING : 11|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ BRAKE_ERROR_1 : 12|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ BRAKE_ERROR_2 : 14|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ COUNTER : 50|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 52|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x1C2 XXX: 8 EPB BO_ 428 XXX_4: 8 XXX
SG_ EPB_ACTIVE : 4|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ EPB_STATE : 26|2@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x1D0 WHEEL_SPEEDS: 8 VSA BO_ 432 STANDSTILL: 7 VSA
SG_ WHEEL_SPEED_FL : 0|15@1+ (0.002759506,0) [0|70] "m/s" Vector__XXX SG_ WHEELS_MOVING : 12|1@0+ (1,0) [0|1] "" NEO
SG_ WHEEL_SPEED_FR : 15|15@1+ (0.002759506,0) [0|70] "m/s" Vector__XXX SG_ BRAKE_ERROR_1 : 11|1@0+ (1,0) [0|1] "" NEO
SG_ WHEEL_SPEED_RL : 30|15@1+ (0.002759506,0) [0|70] "m/s" Vector__XXX SG_ BRAKE_ERROR_2 : 9|1@0+ (1,0) [0|1] "" NEO
SG_ WHEEL_SPEED_RR : 45|15@1+ (0.002759506,0) [0|70] "m/s" Vector__XXX SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" NEO
SG_ CHECKSUM : 60|4@1+ (1,0) [0|3] "" Vector__XXX SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" NEO
BO_ 0x1D6 XXX: 2 VSA BO_ 450 XXX_5: 8 EPB
SG_ EPB_ACTIVE : 3|1@0+ (1,0) [0|1] "" NEO
SG_ EPB_STATE : 29|2@0+ (1,0) [0|3] "" NEO
BO_ 0x1DC XXX: 7 XXX BO_ 464 WHEEL_SPEEDS: 8 VSA
SG_ WHEEL_SPEED_FL : 7|15@0+ (0.002759506,0) [0|70] "m/s" NEO
SG_ WHEEL_SPEED_FR : 8|15@0+ (0.002759506,0) [0|70] "m/s" NEO
SG_ WHEEL_SPEED_RL : 25|15@0+ (0.002759506,0) [0|70] "m/s" NEO
SG_ WHEEL_SPEED_RR : 42|15@0+ (0.002759506,0) [0|70] "m/s" NEO
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
BO_ 0x1E7 XXX: 4 VSA BO_ 470 XXX_6: 2 VSA
SG_ BRAKE_PRESSURE1 : 0|10@1+ (0.015625,-103) [0|1000] "" Vector__XXX
SG_ BRAKE_PRESSURE2 : 14|10@1+ (0.015625,-103) [0|1000] "" Vector__XXX
BO_ 0x1EA VEHICLE_DYNAMICS: 8 VSA BO_ 476 XXX_7: 7 XXX
SG_ LONG_ACCEL : 16|16@1- (0.0015384,0) [-20|20] "m/s2" Vector__XXX
BO_ 0x1ED XXX: 5 VSA BO_ 487 XXX_8: 4 VSA
SG_ BRAKE_PRESSURE1 : 7|10@0+ (0.015625,-103) [0|1000] "" NEO
SG_ BRAKE_PRESSURE2 : 9|10@0+ (0.015625,-103) [0|1000] "" NEO
BO_ 0x1FA BRAKE_COMMAND: 8 ADAS BO_ 490 VEHICLE_DYNAMICS: 8 VSA
SG_ COMPUTER_BRAKE : 0|10@1+ (0.003906248,0) [0|1.0] "" Vector__XXX SG_ LONG_ACCEL : 23|16@0- (0.0015384,0) [-20|20] "m/s2" NEO
SG_ ZEROS_BOH : 10|5@1+ (1,0) [0|1] "" Vector__XXX
SG_ COMPUTER_BRAKE_REQUEST : 15|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ CRUISE_BOH2 : 16|3@1+ (1,0) [0|1] "" Vector__XXX
SG_ CRUISE_OVERRIDE : 19|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ CRUISE_BOH3 : 20|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ CRUISE_FAULT_CMD : 21|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ CRUISE_CANCEL_CMD : 22|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ COMPUTER_BRAKE_REQUEST_2 : 23|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ SET_ME_0X80 : 24|8@1+ (1,0) [0|1] "" Vector__XXX
SG_ BRAKE_LIGHTS : 32|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ CRUISE_STATES : 33|7@1+ (1,0) [0|1] "" Vector__XXX
SG_ CHIME : 40|3@1+ (1,0) [0|7] "" Vector__XXX
SG_ ZEROS_BOH6 : 43|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ FCW : 44|1@1+ (1,0) [0|3] "" Vector__XXX
SG_ ZEROS_BOH3 : 45|2@1+ (1,0) [0|0] "" Vector__XXX
SG_ FCW2 : 47|1@1+ (1,0) [0|0] "" Vector__XXX
SG_ ZEROS_BOH4 : 48|8@1+ (1,0) [0|0] "" Vector__XXX
SG_ COUNTER : 58|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 60|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x200 GAS_COMMAND: 3 ADAS BO_ 493 XXX_9: 5 VSA
SG_ GAS_COMMAND : 0|16@1+ (0.253984064,-328) [0|1] "" Vector__XXX
SG_ COUNTER : 18|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 20|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x201 GAS_SENSOR: 5 ADAS BO_ 506 BRAKE_COMMAND: 8 ADAS
SG_ INTERCEPTOR_GAS : 0|16@1+ (0.253984064,-328) [0|1] "" Vector__XXX SG_ COMPUTER_BRAKE : 7|10@0+ (0.003906248,0) [0|1] "" EBCM
SG_ INTERCEPTOR_GAS2 : 16|16@1+ (0.126992032,-656) [0|1] "" Vector__XXX SG_ ZEROS_BOH : 13|5@0+ (1,0) [0|1] "" EBCM
SG_ COUNTER : 34|2@1+ (1,0) [0|3] "" Vector__XXX SG_ COMPUTER_BRAKE_REQUEST : 8|1@0+ (1,0) [0|1] "" EBCM
SG_ CHECKSUM : 36|4@1+ (1,0) [0|3] "" Vector__XXX SG_ CRUISE_BOH2 : 23|3@0+ (1,0) [0|1] "" EBCM
SG_ CRUISE_OVERRIDE : 20|1@0+ (1,0) [0|1] "" EBCM
SG_ CRUISE_BOH3 : 19|1@0+ (1,0) [0|1] "" EBCM
SG_ CRUISE_FAULT_CMD : 18|1@0+ (1,0) [0|1] "" EBCM
SG_ CRUISE_CANCEL_CMD : 17|1@0+ (1,0) [0|1] "" EBCM
SG_ COMPUTER_BRAKE_REQUEST_2 : 16|1@0+ (1,0) [0|1] "" EBCM
SG_ SET_ME_0X80 : 31|8@0+ (1,0) [0|1] "" EBCM
SG_ BRAKE_LIGHTS : 39|1@0+ (1,0) [0|1] "" EBCM
SG_ CRUISE_STATES : 38|7@0+ (1,0) [0|1] "" EBCM
SG_ CHIME : 47|3@0+ (1,0) [0|7] "" EBCM
SG_ ZEROS_BOH6 : 44|1@0+ (1,0) [0|1] "" EBCM
SG_ FCW : 43|1@0+ (1,0) [0|3] "" EBCM
SG_ ZEROS_BOH3 : 42|2@0+ (1,0) [0|0] "" EBCM
SG_ FCW2 : 40|1@0+ (1,0) [0|0] "" EBCM
SG_ ZEROS_BOH4 : 55|8@0+ (1,0) [0|0] "" EBCM
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" EBCM
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" EBCM
BO_ 0x221 XXX: 6 XXX BO_ 512 GAS_COMMAND: 3 NEO
SG_ GAS_COMMAND : 7|16@0+ (0.253984064,-328) [0|1] "" INTERCEPTOR
SG_ COUNTER : 21|2@0+ (1,0) [0|3] "" INTERCEPTOR
SG_ CHECKSUM : 19|4@0+ (1,0) [0|3] "" INTERCEPTOR
BO_ 0x255 ROUGH_WHEEL_SPEED: 8 VSA BO_ 513 GAS_SENSOR: 5 INTERCEPTOR
SG_ WHEEL_SPEED_FL : 0|8@1+ (1,0) [0|255] "mph" Vector__XXX SG_ INTERCEPTOR_GAS : 7|16@0+ (0.253984064,-328) [0|1] "" NEO
SG_ WHEEL_SPEED_FR : 8|8@1+ (1,0) [0|255] "mph" Vector__XXX SG_ INTERCEPTOR_GAS2 : 23|16@0+ (0.126992032,-656) [0|1] "" NEO
SG_ WHEEL_SPEED_RL : 16|8@1+ (1,0) [0|255] "mph" Vector__XXX SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" NEO
SG_ WHEEL_SPEED_RR : 24|8@1+ (1,0) [0|255] "mph" Vector__XXX SG_ CHECKSUM : 35|4@0+ (1,0) [0|3] "" NEO
SG_ SET_TO_X55 : 32|8@1+ (1,0) [0|255] "" Vector__XXX
SG_ SET_TO_X55 : 40|8@1+ (1,0) [0|255] "" Vector__XXX
BO_ 0x296 CRUISE_BUTTONS: 4 SCM BO_ 545 XXX_10: 6 XXX
SG_ CRUISE_BUTTONS : 0|3@1+ (1,0) [0|7] "" Vector__XXX
SG_ CRUISE_SETTING : 4|2@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x305 SEATBELT_STATUS: 7 BDY BO_ 597 ROUGH_WHEEL_SPEED: 8 VSA
SG_ SEATBELT_DRIVER_LAMP : 0|1@1+ (1,0) [0|1] "" Vector__XXX SG_ WHEEL_SPEED_FL : 7|8@0+ (1,0) [0|255] "mph" NEO
SG_ SEATBELT_DRIVER_LATCHED : 10|1@1+ (1,0) [0|1] "" Vector__XXX SG_ WHEEL_SPEED_FR : 15|8@0+ (1,0) [0|255] "mph" NEO
SG_ COUNTER : 50|2@1+ (1,0) [0|3] "" Vector__XXX SG_ WHEEL_SPEED_RL : 23|8@0+ (1,0) [0|255] "mph" NEO
SG_ CHECKSUM : 52|4@1+ (1,0) [0|3] "" Vector__XXX SG_ WHEEL_SPEED_RR : 31|8@0+ (1,0) [0|255] "mph" NEO
SG_ SET_TO_X55 : 39|8@0+ (1,0) [0|255] "" NEO
SG_ SET_TO_X55 : 47|8@0+ (1,0) [0|255] "" NEO
BO_ 0x309 XXX: 8 XXX BO_ 662 CRUISE_BUTTONS: 4 SCM
SG_ CRUISE_BUTTONS : 7|3@0+ (1,0) [0|7] "" NEO
SG_ CRUISE_SETTING : 3|2@0+ (1,0) [0|3] "" NEO
BO_ 0x30C ACC_HUD: 8 ADAS BO_ 773 SEATBELT_STATUS: 7 BDY
SG_ PCM_SPEED : 0|16@1+ (0.002763889,0) [0|100] "m/s" Vector__XXX SG_ SEATBELT_DRIVER_LAMP : 7|1@0+ (1,0) [0|1] "" NEO
SG_ PCM_GAS : 16|7@1+ (1,0) [0|127] "" Vector__XXX SG_ SEATBELT_DRIVER_LATCHED : 13|1@0+ (1,0) [0|1] "" NEO
SG_ ZEROS_BOH : 23|1@1+ (1,0) [0|255] "" Vector__XXX SG_ COUNTER : 53|2@0+ (1,0) [0|3] "" NEO
SG_ CRUISE_SPEED : 24|8@1+ (1,0) [0|255] "" Vector__XXX SG_ CHECKSUM : 51|4@0+ (1,0) [0|3] "" NEO
SG_ DTC_MODE : 32|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ BOH : 33|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ ACC_PROBLEM : 34|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ FCM_OFF : 35|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ BOH_2 : 36|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ FCM_PROBLEM : 37|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ RADAR_OBSTRUCTED : 38|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ ENABLE_MINI_CAR : 39|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ HUD_DISTANCE : 40|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ HUD_LEAD : 42|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ BOH_3 : 44|1@1+ (1,0) [0|3] "" Vector__XXX
SG_ BOH_4 : 45|1@1+ (1,0) [0|3] "" Vector__XXX
SG_ BOH_5 : 46|1@1+ (1,0) [0|3] "" Vector__XXX
SG_ CRUISE_CONTROL_LABEL : 47|1@1+ (1,0) [0|3] "" Vector__XXX
SG_ COUNTER : 58|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 60|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x31B XXX: 8 XXX BO_ 777 XXX_11: 8 XXX
BO_ 0x320 XXX: 8 XXX BO_ 780 ACC_HUD: 8 ADAS
SG_ PCM_SPEED : 7|16@0+ (0.002763889,0) [0|100] "m/s" BDY
SG_ PCM_GAS : 23|7@0+ (1,0) [0|127] "" BDY
SG_ ZEROS_BOH : 16|1@0+ (1,0) [0|255] "" BDY
SG_ CRUISE_SPEED : 31|8@0+ (1,0) [0|255] "" BDY
SG_ DTC_MODE : 39|1@0+ (1,0) [0|1] "" BDY
SG_ BOH : 38|1@0+ (1,0) [0|1] "" BDY
SG_ ACC_PROBLEM : 37|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_OFF : 36|1@0+ (1,0) [0|1] "" BDY
SG_ BOH_2 : 35|1@0+ (1,0) [0|1] "" BDY
SG_ FCM_PROBLEM : 34|1@0+ (1,0) [0|1] "" BDY
SG_ RADAR_OBSTRUCTED : 33|1@0+ (1,0) [0|1] "" BDY
SG_ ENABLE_MINI_CAR : 32|1@0+ (1,0) [0|1] "" BDY
SG_ HUD_DISTANCE : 47|2@0+ (1,0) [0|3] "" BDY
SG_ HUD_LEAD : 45|2@0+ (1,0) [0|3] "" BDY
SG_ BOH_3 : 43|1@0+ (1,0) [0|3] "" BDY
SG_ BOH_4 : 42|1@0+ (1,0) [0|3] "" BDY
SG_ BOH_5 : 41|1@0+ (1,0) [0|3] "" BDY
SG_ CRUISE_CONTROL_LABEL : 40|1@0+ (1,0) [0|3] "" BDY
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" BDY
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" BDY
BO_ 0x324 CRUISE: 8 PCM BO_ 795 XXX_12: 8 XXX
SG_ ENGINE_TEMPERATURE : 0|8@1+ (1,0) [0|255] "" Vector__XXX
SG_ BOH : 8|8@1+ (1,0) [0|255] "" Vector__XXX
SG_ TRIP_FUEL_CONSUMED : 16|16@1+ (1,0) [0|255] "" Vector__XXX
SG_ CRUISE_SPEED_PCM : 32|8@1+ (1,0) [0|255] "" Vector__XXX
SG_ BOH2 : 40|8@1- (1,0) [0|255] "" Vector__XXX
SG_ BOH3 : 48|8@1+ (1,0) [0|255] "" Vector__XXX
SG_ COUNTER : 58|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 60|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x326 SCM_FEEDBACK: 8 SCM BO_ 800 XXX_13: 8 XXX
SG_ CMBS_BUTTON : 17|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ MAIN_ON : 27|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ RIGHT_BLINKER : 28|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ LEFT_BLINKER : 29|1@1+ (1,0) [0|1] "" Vector__XXX
BO_ 0x328 XXX: 8 XXX BO_ 804 CRUISE: 8 PCM
SG_ ENGINE_TEMPERATURE : 7|8@0+ (1,0) [0|255] "" NEO
SG_ BOH : 15|8@0+ (1,0) [0|255] "" NEO
SG_ TRIP_FUEL_CONSUMED : 23|16@0+ (1,0) [0|255] "" NEO
SG_ CRUISE_SPEED_PCM : 39|8@0+ (1,0) [0|255] "" NEO
SG_ BOH2 : 47|8@0- (1,0) [0|255] "" NEO
SG_ BOH3 : 55|8@0+ (1,0) [0|255] "" NEO
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
BO_ 0x33D LKAS_HUD_2: 5 ADAS BO_ 806 SCM_FEEDBACK: 8 SCM
SG_ CAM_TEMP_HIGH : 0|1@1+ (1,0) [0|255] "" Vector__XXX SG_ CMBS_BUTTON : 22|2@0+ (1,0) [0|3] "" NEO
SG_ BOH : 1|7@1+ (1,0) [0|127] "" Vector__XXX SG_ MAIN_ON : 28|1@0+ (1,0) [0|1] "" NEO
SG_ DASHED_LANES : 9|1@1+ (1,0) [0|1] "" Vector__XXX SG_ RIGHT_BLINKER : 27|1@0+ (1,0) [0|1] "" NEO
SG_ DTC : 10|1@1+ (1,0) [0|1] "" Vector__XXX SG_ LEFT_BLINKER : 26|1@0+ (1,0) [0|1] "" NEO
SG_ LKAS_PROBLEM : 11|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ LKAS_OFF : 12|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ SOLID_LANES : 13|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ LDW_RIGHT : 14|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ STEERING_REQUIRED : 15|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ BOH : 16|2@1+ (1,0) [0|4] "" Vector__XXX
SG_ LDW_PROBLEM : 18|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ BEEP : 22|2@1+ (1,0) [0|1] "" Vector__XXX
SG_ LDW_ON : 27|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ LDW_OFF : 28|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ CLEAN_WINDSHIELD : 29|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ SET_ME_X48 : 24|8@1+ (1,0) [0|255] "" Vector__XXX
SG_ COUNTER : 34|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 36|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x35E XXX: 8 ADAS BO_ 808 XXX_14: 8 XXX
SG_ UI_ALERTS : 0|56@1+ (1,0) [0|127] "" Vector__XXX
BO_ 0x374 XXX: 8 XXX BO_ 829 LKAS_HUD_2: 5 ADAS
BO_ 0x37B XXX: 8 XXX SG_ CAM_TEMP_HIGH : 7|1@0+ (1,0) [0|255] "" BDY
BO_ 0x37C XXX: 8 XXX SG_ BOH : 6|7@0+ (1,0) [0|127] "" BDY
SG_ DASHED_LANES : 14|1@0+ (1,0) [0|1] "" BDY
SG_ DTC : 13|1@0+ (1,0) [0|1] "" BDY
SG_ LKAS_PROBLEM : 12|1@0+ (1,0) [0|1] "" BDY
SG_ LKAS_OFF : 11|1@0+ (1,0) [0|1] "" BDY
SG_ SOLID_LANES : 10|1@0+ (1,0) [0|1] "" BDY
SG_ LDW_RIGHT : 9|1@0+ (1,0) [0|1] "" BDY
SG_ STEERING_REQUIRED : 8|1@0+ (1,0) [0|1] "" BDY
SG_ BOH : 23|2@0+ (1,0) [0|4] "" BDY
SG_ LDW_PROBLEM : 21|1@0+ (1,0) [0|1] "" BDY
SG_ BEEP : 17|2@0+ (1,0) [0|1] "" BDY
SG_ LDW_ON : 28|1@0+ (1,0) [0|1] "" BDY
SG_ LDW_OFF : 27|1@0+ (1,0) [0|1] "" BDY
SG_ CLEAN_WINDSHIELD : 26|1@0+ (1,0) [0|1] "" BDY
SG_ SET_ME_X48 : 31|8@0+ (1,0) [0|255] "" BDY
SG_ COUNTER : 37|2@0+ (1,0) [0|3] "" BDY
SG_ CHECKSUM : 35|4@0+ (1,0) [0|3] "" BDY
BO_ 0x39F XXX: 8 ADAS BO_ 862 XXX_15: 8 ADAS
SG_ ZEROS_BOH : 0|17@1+ (1,0) [0|127] "" Vector__XXX SG_ UI_ALERTS : 7|56@0+ (1,0) [0|127] "" BDY
SG_ APPLY_BRAKES_FOR_CANC : 16|1@1+ (1,0) [0|15] "" Vector__XXX
SG_ ZEROS_BOH2 : 17|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ RESUME_INSTRUCTION : 18|1@1+ (1,0) [0|15] "" Vector__XXX
SG_ ACC_ALERTS : 19|5@1+ (1,0) [0|15] "" Vector__XXX
SG_ ZEROS_BOH2 : 24|8@1+ (1,0) [0|127] "" Vector__XXX
SG_ LEAD_SPEED : 32|9@1+ (1,0) [0|127] "" Vector__XXX
SG_ LEAD_STATE : 41|3@1+ (1,0) [0|127] "" Vector__XXX
SG_ LEAD_DISTANCE : 44|5@1+ (1,0) [0|31] "" Vector__XXX
SG_ ZEROS_BOH3 : 49|7@1+ (1,0) [0|127] "" Vector__XXX
BO_ 0x3A1 XXX: 8 XXX BO_ 884 XXX_16: 8 XXX
BO_ 0x3D9 XXX: 3 XXX
BO_ 0x400 XXX: 5 XXX
BO_ 0x403 XXX: 5 XXX
BO_ 0x405 DOORS_STATUS: 8 BDY BO_ 891 XXX_17: 8 XXX
SG_ DOOR_OPEN_FL : 34|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ DOOR_OPEN_FR : 33|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ DOOR_OPEN_RL : 32|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ DOOR_OPEN_RR : 47|1@1+ (1,0) [0|1] "" Vector__XXX
SG_ COUNTER : 58|2@1+ (1,0) [0|3] "" Vector__XXX
SG_ CHECKSUM : 60|4@1+ (1,0) [0|3] "" Vector__XXX
BO_ 0x40C XXX: 8 XXX BO_ 892 XXX_18: 8 XXX
BO_ 0x40F XXX: 8 XXX
BO_ 0x454 XXX: 8 XXX
BO_ 0x516 XXX: 8 XXX
BO_ 0x52A XXX: 5 XXX
BO_ 0x551 XXX: 5 XXX
BO_ 0x555 XXX: 5 XXX
BO_ 0x590 XXX: 5 XXX
BO_ 0x640 XXX: 5 XXX
BO_ 0x641 XXX: 8 XXX
BO_ 0x661 XXX: 8 XXX
VAL_ 0x296 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none"; BO_ 927 XXX_19: 8 ADAS
VAL_ 0x296 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none"; SG_ ZEROS_BOH : 7|17@0+ (1,0) [0|127] "" BDY
VAL_ 0x33D HUD_LEAD 3 "acc_off" 2 "solid_car" 1 "dashed_car" 0 "no_car"; SG_ APPLY_BRAKES_FOR_CANC : 23|1@0+ (1,0) [0|15] "" BDY
VAL_ 0x1A6 LIGHTS_SETTING 3 "high_beam" 2 "low_beam" 1 "position" 0 "no_lights"; SG_ ZEROS_BOH2 : 22|1@0+ (1,0) [0|1] "" BDY
VAL_ 0x18F STEER_STATUS 5 "fault" 4 "no_torque_alert_2" 2 "no_torque_alert_1" 0 "normal"; SG_ RESUME_INSTRUCTION : 21|1@0+ (1,0) [0|15] "" BDY
VAL_ 0x191 GEAR_SHIFTER 32 "L" 16 "S" 8 "D" 4 "N" 2 "R" 1 "P"; SG_ ACC_ALERTS : 20|5@0+ (1,0) [0|15] "" BDY
VAL_ 0x33D BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep"; SG_ ZEROS_BOH2 : 31|8@0+ (1,0) [0|127] "" BDY
VAL_ 0x1FA CHIME 4 "double_chime" 3 "single_chime" 2 "continuous_chime" 1 "repeating_chime" 0 "no_chime"; SG_ LEAD_SPEED : 39|9@0+ (1,0) [0|127] "" BDY
VAL_ 0x1C2 EPB_STATE 3 "engaged" 2 "disengaging" 1 "engaging" 0 "disengaged"; SG_ LEAD_STATE : 46|3@0+ (1,0) [0|127] "" BDY
VAL_ 0x326 CMBS_BUTTON 3 "pressed" 0 "released"; SG_ LEAD_DISTANCE : 43|5@0+ (1,0) [0|31] "" BDY
VAL_ 0x39F ACC_ALERTS 29 "esp_active_acc_canceled" 10 "b_pedal_applied" 9 "speed_too_low" 8 "speed_too_high" 7 "p_brake_applied" 6 "gear_no_d" 5 "seatbelt" 4 "too_steep_downhill" 3 "too_steep_uphill" 2 "too_close" 1 "no_vehicle_ahead"; SG_ ZEROS_BOH3 : 54|7@0+ (1,0) [0|127] "" BDY
VAL_ 0x30C CRUISE_SPEED 255 "no_speed" 252 "stopped";
BO_ 929 XXX_20: 8 XXX
BO_ 985 XXX_21: 3 XXX
BO_ 1024 XXX_22: 5 XXX
BO_ 1027 XXX_23: 5 XXX
BO_ 1029 DOORS_STATUS: 8 BDY
SG_ DOOR_OPEN_FL : 37|1@0+ (1,0) [0|1] "" NEO
SG_ DOOR_OPEN_FR : 38|1@0+ (1,0) [0|1] "" NEO
SG_ DOOR_OPEN_RL : 39|1@0+ (1,0) [0|1] "" NEO
SG_ DOOR_OPEN_RR : 40|1@0+ (1,0) [0|1] "" NEO
SG_ COUNTER : 61|2@0+ (1,0) [0|3] "" NEO
SG_ CHECKSUM : 59|4@0+ (1,0) [0|3] "" NEO
BO_ 1036 XXX_24: 8 XXX
BO_ 1039 XXX_25: 8 XXX
BO_ 1108 XXX_26: 8 XXX
BO_ 1302 XXX_27: 8 XXX
BO_ 1322 XXX_28: 5 XXX
BO_ 1361 XXX_29: 5 XXX
BO_ 1365 XXX_30: 5 XXX
BO_ 1424 XXX_31: 5 XXX
BO_ 1600 XXX_32: 5 XXX
BO_ 1601 XXX_33: 8 XXX
BO_ 1633 XXX_34: 8 XXX
BO_TX_BU_ 228 : NEO,ADAS;
BO_TX_BU_ 506 : NEO,ADAS;
BO_TX_BU_ 780 : NEO,ADAS;
BO_TX_BU_ 829 : NEO,ADAS;
BO_TX_BU_ 862 : NEO,ADAS;
BO_TX_BU_ 927 : NEO,ADAS;
CM_ SG_ 401 GEAR "10 = reverse, 11 = transition";
CM_ SG_ 490 LONG_ACCEL "wheel speed derivative, noisy and zero snapping";
CM_ SG_ 780 CRUISE_SPEED "255 = no speed";
CM_ SG_ 804 CRUISE_SPEED_PCM "255 = no speed";
CM_ SG_ 829 BEEP "beeps are pleasant, chimes are for warnngs etc...";
VAL_ 399 STEER_STATUS 5 "fault" 4 "no_torque_alert_2" 2 "no_torque_alert_1" 0 "normal" ;
VAL_ 401 GEAR_SHIFTER 32 "L" 16 "S" 8 "D" 4 "N" 2 "R" 1 "P" ;
VAL_ 450 EPB_STATE 3 "engaged" 2 "disengaging" 1 "engaging" 0 "disengaged" ;
VAL_ 506 CHIME 4 "double_chime" 3 "single_chime" 2 "continuous_chime" 1 "repeating_chime" 0 "no_chime" ;
VAL_ 662 CRUISE_BUTTONS 7 "tbd" 6 "tbd" 5 "tbd" 4 "accel_res" 3 "decel_set" 2 "cancel" 1 "main" 0 "none" ;
VAL_ 662 CRUISE_SETTING 3 "distance_adj" 2 "tbd" 1 "lkas_button" 0 "none" ;
VAL_ 780 CRUISE_SPEED 255 "no_speed" 252 "stopped" ;
VAL_ 780 HUD_LEAD 3 "acc_off" 2 "solid_car" 1 "dashed_car" 0 "no_car" ;
VAL_ 806 CMBS_BUTTON 3 "pressed" 0 "released" ;
VAL_ 829 BEEP 3 "single_beep" 2 "triple_beep" 1 "repeated_beep" 0 "no_beep" ;
VAL_ 927 ACC_ALERTS 29 "esp_active_acc_canceled" 10 "b_pedal_applied" 9 "speed_too_low" 8 "speed_too_high" 7 "p_brake_applied" 6 "gear_no_d" 5 "seatbelt" 4 "too_steep_downhill" 3 "too_steep_uphill" 2 "too_close" 1 "no_vehicle_ahead" ;
CM_ SG_ 0x1A3 GEAR "10 = reverse, 11 = transition";
CM_ SG_ 0x324 CRUISE_SPEED_PCM "255 = no speed";
CM_ SG_ 0x30C CRUISE_SPEED "255 = no speed";
CM_ SG_ 0x1EA LONG_ACCEL "wheel speed derivative, noisy and zero snapping";
CM_ SG_ 0x33D BEEP "beeps are pleasant, chimes are for warnngs etc...";
+3 -6
View File
@@ -3,21 +3,18 @@
# enable wifi access point for debugging only! # enable wifi access point for debugging only!
#service call wifi 37 i32 0 i32 1 # WifiService.setWifiApEnabled(null, true) #service call wifi 37 i32 0 i32 1 # WifiService.setWifiApEnabled(null, true)
# use the openpilot ro key
export GIT_SSH_COMMAND="ssh -i /data/data/com.termux/files/id_rsa_openpilot_ro"
# check out the openpilot repo # check out the openpilot repo
if [ ! -d /data/openpilot ]; then if [ ! -d /data/openpilot ]; then
cd /tmp cd /tmp
git clone git@github.com:commaai/openpilot.git -b release git clone https://github.com/commaai/openpilot.git -b release
mv /tmp/openpilot /data/openpilot mv /tmp/openpilot /data/openpilot
fi fi
# enter openpilot directory # enter openpilot directory
cd /data/openpilot cd /data/openpilot
# removed automatic update from openpilot # automatic update
#git pull git pull
# start manager # start manager
cd selfdrive cd selfdrive
-27
View File
@@ -1,27 +0,0 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAy/ZlYE/iHHjhbSvCnBm5Zsq5GPpVugLXFHai/doqyfRxErop
/g1TIRhzK3mkHRYRN7H0L9whogwoIVr5CldoxU49FDnNbVHNimScNrL4LprRWjq6
dRmCVoxMpLHZTyX1jIkcHsMr7klcUnssyeQO2pWvZv0ZC67wM7G20r7+ZLdEa0Ck
MBh8JYhDaZx2xvYtTnt6vKMmFVE5+zW/+wDVma3a4r9pG9s0+r0wCl8CUuJ+yDhR
mzNkPJ5mJCMx99AI6k4Gq9Vsng8/35b6Azh3TucPaXOLK7yPnL3YBKUa0PpR7IRH
+OKkVCH+LL7tcPFSqPPVy/pUTBdEUROjJdSHxwIDAQABAoIBAQCxBgUM56h3T89Q
AoghFg6dkdu/Ox8GmAp231UuAJncuMUfHObvcj8xXVgwZp4zBIEjFte6ZlPmoqh9
8sht2lm7zeEjWdvbQwGjWRlgPEs9n++OYaSNl/tRBOpMk3Ppxydst1/prznE0nVH
vVKtU7w0qXAYchm30zj1lQv5s/12CTGmnpQatbo5X488RfCfv2zFX1h+lEWF8ycL
eZRi8z6l8h2Y+JLyEwPCmR+gR6XtosZ/ECQcTknavqLqdr7NbYYfOo3JfHCUtpJa
8s7m0VFhMuxFFCl1sV0eMzAynJYNVz45DyaKpr2b/2YAGY8fn96FxaWv1xw1xTkK
c5+wStwJAoGBAOjQpLZ1qGa4GwXzeHoDsGFpGgY9ug6af0M23c8O42fJHAwYkk7r
Qeo4SSBddoSfo3jdchFLo59+m3qyTKpjkph7NBBCEwaCvX3heStDIMZEWX0IOV5y
iJD/D6EXSqFmXCUUaudX2OxlaHguA0yOEx9s/5uUJrvaIHbBAOpYyar1AoGBAOBG
MJp+EA3e1Zx/VszD2Tdxn8V0DAwvy9WIEqZuG689S/Sk5GnA4m2L8Txv0xAHFvLv
JpF7Zn9AoFXGpjf9P0FF53cpjEYn9f+uK84j1HOL/6R7Nj9rcS5yL2PCP1ZHymw6
xOXl3oZa1YtYE6jfvXUaOb8Z7y8gaStP763sXmpLAoGBAM1WSBANUcvXES58gIPN
ASHJGwTqKFF8/kV//L4EuZjuDWi1u0UTxX0Yy5ZaGI/8ZKfTWCnc9qFTfzoGTAvz
6nXGJDM6s6EIaqy90qrPd/amje7y8/ZTOhP4ggZojpAvwZGKoocMOey1vCBTJOG+
ZStQbVkAn/EK/5r9uxr12FiJAoGAH9UWlPcLpExamWnhkhLCRAJWoRoFk708+0Pj
EchTGZ5jp4e3++KqwM26Ic/lb0LyWOzk1oVjWPB9UW9urEe/sK4RWnKFPHfzjKTW
Bt5DC1t1n4z1eC7x05vVah1qC/8IljAJPnBQE1XVNX/82l1XcMWWKK+vqUq6YrFn
3ZHNHN0CgYA3uUVWqW37vfJuk0MJBkQSqMo5Y5TPlCt4b1ebkdhlM4v/N+iuiPiC
PBhjP1MLeudkJvzllt4YvNWLerCKpMWuw7Zvy5uzFEsqOrVlzfnyWqqqYbYjHe9f
Ef0/yXKuGJajs54Ts6Xrm0+elVUu//pEuf6NI96Ehctqz8/BqGqAtw==
-----END RSA PRIVATE KEY-----
-4
View File
@@ -1,10 +1,6 @@
#!/bin/bash #!/bin/bash
set -e set -e
# move files into place
adb push files/id_rsa_openpilot_ro /tmp/id_rsa_openpilot_ro
adb shell mv /tmp/id_rsa_openpilot_ro /data/data/com.termux/files/
# moving continue into place runs the continue script # moving continue into place runs the continue script
adb push files/continue.sh /tmp/continue.sh adb push files/continue.sh /tmp/continue.sh
adb shell mv /tmp/continue.sh /data/data/com.termux/files/ adb shell mv /tmp/continue.sh /data/data/com.termux/files/
-1
View File
@@ -1,7 +1,6 @@
Cython==0.24.1 Cython==0.24.1
bitstring==3.1.5 bitstring==3.1.5
fastcluster==1.1.21 fastcluster==1.1.21
h5py==2.6.0
libusb1==1.5.0 libusb1==1.5.0
pycapnp==0.5.9 pycapnp==0.5.9
pyzmq==15.4.0 pyzmq==15.4.0
+15 -4
View File
@@ -4,6 +4,7 @@
#include <string.h> #include <string.h>
#include <signal.h> #include <signal.h>
#include <unistd.h> #include <unistd.h>
#include <sched.h>
#include <sys/time.h> #include <sys/time.h>
#include <sys/cdefs.h> #include <sys/cdefs.h>
#include <sys/types.h> #include <sys/types.h>
@@ -35,7 +36,7 @@ bool spoofing_started = false;
#define DEBUG_BOARDD #define DEBUG_BOARDD
#ifdef DEBUG_BOARDD #ifdef DEBUG_BOARDD
#define DPRINTF(fmt, ...) printf("boardd: " fmt, ## __VA_ARGS__) #define DPRINTF(fmt, ...) printf("boardd(%lu): " fmt, time(NULL), ## __VA_ARGS__)
#else #else
#define DPRINTF(fmt, ...) #define DPRINTF(fmt, ...)
#endif #endif
@@ -128,6 +129,7 @@ void can_health(void *s) {
uint8_t started; uint8_t started;
uint8_t controls_allowed; uint8_t controls_allowed;
uint8_t gas_interceptor_detected; uint8_t gas_interceptor_detected;
uint8_t started_signal_detected;
} health; } health;
// recv from board // recv from board
@@ -156,6 +158,7 @@ void can_health(void *s) {
} }
healthData.setControlsAllowed(health.controls_allowed); healthData.setControlsAllowed(health.controls_allowed);
healthData.setGasInterceptorDetected(health.gas_interceptor_detected); healthData.setGasInterceptorDetected(health.gas_interceptor_detected);
healthData.setStartedSignalDetected(health.started_signal_detected);
// send to health // send to health
auto words = capnp::messageToFlatArray(msg); auto words = capnp::messageToFlatArray(msg);
@@ -268,13 +271,21 @@ void *can_health_thread(void *crap) {
return NULL; return NULL;
} }
int set_realtime_priority(int level) {
// should match python using chrt
struct sched_param sa;
memset(&sa, 0, sizeof(sa));
sa.sched_priority = level;
return sched_setscheduler(getpid(), SCHED_FIFO, &sa);
}
int main() { int main() {
int err; int err;
printf("boardd: starting boardd\n"); DPRINTF("starting boardd\n");
// set process priority // set process priority
err = setpriority(PRIO_PROCESS, 0, -4); err = set_realtime_priority(4);
printf("boardd: setpriority returns %d\n", err); DPRINTF("setpriority returns %d\n", err);
// check the environment // check the environment
if (getenv("STARTED")) { if (getenv("STARTED")) {
+6 -12
View File
@@ -32,17 +32,11 @@ def can_list_to_can_capnp(can_msgs, msgtype='can'):
cc.src = can_msg[3] cc.src = can_msg[3]
return dat return dat
def can_capnp_to_can_list_old(dat, src_filter=[]): def can_capnp_to_can_list(can, src_filter=None):
ret = [] ret = []
for msg in dat: for msg in can:
if msg.src in src_filter: if src_filter is None or msg.src in src_filter:
ret.append([msg.address, msg.busTime, msg.dat.encode("hex")]) ret.append((msg.address, msg.busTime, msg.dat, msg.src))
return ret
def can_capnp_to_can_list(dat):
ret = []
for msg in dat.can:
ret.append([msg.address, msg.busTime, msg.dat, msg.src])
return ret return ret
# *** can driver *** # *** can driver ***
@@ -115,7 +109,7 @@ def boardd_mock_loop():
while 1: while 1:
tsc = messaging.drain_sock(logcan, wait_for_one=True) tsc = messaging.drain_sock(logcan, wait_for_one=True)
snds = map(can_capnp_to_can_list, tsc) snds = map(lambda x: can_capnp_to_can_list(x.can), tsc)
snd = [] snd = []
for s in snds: for s in snds:
snd += s snd += s
@@ -168,7 +162,7 @@ def boardd_loop(rate=200):
# send can if we have a packet # send can if we have a packet
tsc = messaging.recv_sock(sendcan) tsc = messaging.recv_sock(sendcan)
if tsc is not None: if tsc is not None:
can_send_many(can_capnp_to_can_list(tsc)) can_send_many(can_capnp_to_can_list(tsc.sendcan))
rk.keep_time() rk.keep_time()
+7 -6
View File
@@ -59,22 +59,22 @@ class CANParser(object):
cn_vl_max = 5 # no more than 5 wrong counter checks cn_vl_max = 5 # no more than 5 wrong counter checks
# we are subscribing to PID_XXX, else data from USB # we are subscribing to PID_XXX, else data from USB
for msg, ts, cdat in can_recv: for msg, ts, cdat, _ in can_recv:
idxs = self._message_indices[msg] idxs = self._message_indices[msg]
if idxs: if idxs:
self.msgs_upd += [msg] self.msgs_upd.append(msg)
# read the entire message # read the entire message
out = self.can_dbc.decode([msg, 0, cdat])[1] out = self.can_dbc.decode((msg, 0, cdat))[1]
# checksum check # checksum check
self.ck[msg] = True self.ck[msg] = True
if "CHECKSUM" in out.keys() and msg in self.msgs_ck: if "CHECKSUM" in out.keys() and msg in self.msgs_ck:
# remove checksum (half byte) # remove checksum (half byte)
ck_portion = (''.join((cdat[:-1], '0'))).decode('hex') ck_portion = cdat[:-1] + chr(ord(cdat[-1]) & 0xF0)
# recalculate checksum # recalculate checksum
msg_vl = fix(ck_portion, msg) msg_vl = fix(ck_portion, msg)
# compare recalculated vs received checksum # compare recalculated vs received checksum
if msg_vl != cdat.decode('hex'): if msg_vl != cdat:
print hex(msg), "CHECKSUM FAIL" print "CHECKSUM FAIL: " + hex(msg)
self.ck[msg] = False self.ck[msg] = False
self.ok[msg] = False self.ok[msg] = False
# counter check # counter check
@@ -89,6 +89,7 @@ class CANParser(object):
self.cn_vl[msg] -= 1 # counter check passed self.cn_vl[msg] -= 1 # counter check passed
# message status is invalid if we received too many wrong counter values # message status is invalid if we received too many wrong counter values
if self.cn_vl[msg] >= cn_vl_max: if self.cn_vl[msg] >= cn_vl_max:
print "COUNTER WRONG: " + hex(msg)
self.ok[msg] = False self.ok[msg] = False
# update msg time stamps and counter value # update msg time stamps and counter value
+2 -2
View File
@@ -1,7 +1,7 @@
import numpy as np import numpy as np
import selfdrive.messaging as messaging import selfdrive.messaging as messaging
from selfdrive.boardd.boardd import can_capnp_to_can_list_old, can_capnp_to_can_list from selfdrive.boardd.boardd import can_capnp_to_can_list
from selfdrive.config import VehicleParams from selfdrive.config import VehicleParams
from common.realtime import sec_since_boot from common.realtime import sec_since_boot
@@ -132,7 +132,7 @@ def fingerprint(logcan):
for a in messaging.drain_sock(logcan, wait_for_one=True): for a in messaging.drain_sock(logcan, wait_for_one=True):
if st is None: if st is None:
st = sec_since_boot() st = sec_since_boot()
for adr, _, msg, idx in can_capnp_to_can_list(a): for adr, _, msg, idx in can_capnp_to_can_list(a.can):
# pedal # pedal
if adr == 0x201 and idx == 0: if adr == 0x201 and idx == 0:
brake_only = False brake_only = False
+8 -3
View File
@@ -5,7 +5,7 @@ import numpy as np
from selfdrive.config import Conversions as CV from selfdrive.config import Conversions as CV
from selfdrive.car.honda.carstate import CarState from selfdrive.car.honda.carstate import CarState
from selfdrive.car.honda.carcontroller import CarController, AH from selfdrive.car.honda.carcontroller import CarController, AH
from selfdrive.boardd.boardd import can_capnp_to_can_list_old from selfdrive.boardd.boardd import can_capnp_to_can_list
from cereal import car from cereal import car
@@ -42,6 +42,7 @@ class CarInterface(object):
self.logcan = messaging.sub_sock(context, service_list['can'].port) self.logcan = messaging.sub_sock(context, service_list['can'].port)
self.frame = 0 self.frame = 0
self.can_invalid_count = 0
# *** init the major players *** # *** init the major players ***
self.CS = CarState(self.logcan) self.CS = CarState(self.logcan)
@@ -61,7 +62,7 @@ class CarInterface(object):
canMonoTimes = [] canMonoTimes = []
for a in messaging.drain_sock(self.logcan): for a in messaging.drain_sock(self.logcan):
canMonoTimes.append(a.logMonoTime) canMonoTimes.append(a.logMonoTime)
can_pub_main.extend(can_capnp_to_can_list_old(a.can, [0,2])) can_pub_main.extend(can_capnp_to_can_list(a.can, [0,2]))
self.CS.update(can_pub_main) self.CS.update(can_pub_main)
# create message # create message
@@ -149,7 +150,11 @@ class CarInterface(object):
# These strings aren't checked at compile time # These strings aren't checked at compile time
errors = [] errors = []
if not self.CS.can_valid: if not self.CS.can_valid:
errors.append('commIssue') self.can_invalid_count += 1
if self.can_invalid_count >= 5:
errors.append('commIssue')
else:
self.can_invalid_count = 0
if self.CS.steer_error: if self.CS.steer_error:
errors.append('steerUnavailable') errors.append('steerUnavailable')
elif self.CS.steer_not_allowed: elif self.CS.steer_not_allowed:
+1
View File
@@ -0,0 +1 @@
const char *openpilot_version = "0.2.2";
+49 -12
View File
@@ -6,9 +6,12 @@ import selfdrive.messaging as messaging
from cereal import car from cereal import car
from common.numpy_fast import clip
from selfdrive.config import Conversions as CV from selfdrive.config import Conversions as CV
from common.services import service_list from common.services import service_list
from common.realtime import sec_since_boot, set_realtime_priority, Ratekeeper from common.realtime import sec_since_boot, set_realtime_priority, Ratekeeper
from common.profiler import Profiler
from selfdrive.controls.lib.drive_helpers import learn_angle_offset from selfdrive.controls.lib.drive_helpers import learn_angle_offset
@@ -70,16 +73,23 @@ def controlsd_thread(gctx, rate=100): #rate in Hz
soft_disable_timer = None soft_disable_timer = None
# Is cpu temp too high to enable?
overtemp = False
free_space = 1.0
# start the loop # start the loop
set_realtime_priority(2) set_realtime_priority(2)
rk = Ratekeeper(rate) rk = Ratekeeper(rate, print_delay_threshold=2./1000)
while 1: while 1:
prof = Profiler()
cur_time = sec_since_boot() cur_time = sec_since_boot()
# read CAN # read CAN
CS = CI.update() CS = CI.update()
prof.checkpoint("CarInterface")
# did it request to enable? # did it request to enable?
enable_request, enable_condition = False, False enable_request, enable_condition = False, False
@@ -89,6 +99,10 @@ def controlsd_thread(gctx, rate=100): #rate in Hz
if awareness_status <= 0.: if awareness_status <= 0.:
AM.add("driverDistracted", enabled) AM.add("driverDistracted", enabled)
# reset awareness status on steering
if CS.steeringPressed:
awareness_status = 1.0
# handle button presses # handle button presses
for b in CS.buttonEvents: for b in CS.buttonEvents:
print b print b
@@ -111,15 +125,17 @@ def controlsd_thread(gctx, rate=100): #rate in Hz
v_cruise_kph = v_cruise_kph - (v_cruise_kph % V_CRUISE_DELTA) + V_CRUISE_DELTA v_cruise_kph = v_cruise_kph - (v_cruise_kph % V_CRUISE_DELTA) + V_CRUISE_DELTA
elif b.type == "decelCruise": elif b.type == "decelCruise":
v_cruise_kph = v_cruise_kph - (v_cruise_kph % V_CRUISE_DELTA) - V_CRUISE_DELTA v_cruise_kph = v_cruise_kph - (v_cruise_kph % V_CRUISE_DELTA) - V_CRUISE_DELTA
v_cruise_kph = np.clip(v_cruise_kph, V_CRUISE_MIN, V_CRUISE_MAX) v_cruise_kph = clip(v_cruise_kph, V_CRUISE_MIN, V_CRUISE_MAX)
if not enabled and b.type in ["accelCruise", "decelCruise"] and not b.pressed: if not enabled and b.type in ["accelCruise", "decelCruise"] and not b.pressed:
enable_request = True enable_request = True
# do disable on button down # do disable on button down
if b.type == "cancel" and b.pressed: if b.type == "cancel" and b.pressed:
AM.add("disable", enabled) AM.add("disable", enabled)
prof.checkpoint("Buttons")
# *** health checking logic *** # *** health checking logic ***
hh = messaging.recv_sock(health) hh = messaging.recv_sock(health)
if hh is not None: if hh is not None:
@@ -132,11 +148,15 @@ def controlsd_thread(gctx, rate=100): #rate in Hz
# thermal data, checked every second # thermal data, checked every second
td = messaging.recv_sock(thermal) td = messaging.recv_sock(thermal)
if td is not None: if td is not None:
cpu_temps = [td.thermal.cpu0, td.thermal.cpu1, td.thermal.cpu2, # Check temperature.
td.thermal.cpu3, td.thermal.mem, td.thermal.gpu] overtemp = any(
# check overtemp t > 950
if any(t > 950 for t in cpu_temps): for t in (td.thermal.cpu0, td.thermal.cpu1, td.thermal.cpu2,
AM.add("overheat", enabled) td.thermal.cpu3, td.thermal.mem, td.thermal.gpu))
# under 15% of space free
free_space = td.thermal.freeSpace
prof.checkpoint("Health")
# *** getting model logic *** # *** getting model logic ***
PP.update(cur_time, CS.vEgo) PP.update(cur_time, CS.vEgo)
@@ -159,6 +179,11 @@ def controlsd_thread(gctx, rate=100): #rate in Hz
print "enabled pressed at", cur_time print "enabled pressed at", cur_time
last_enable_request = cur_time last_enable_request = cur_time
# don't engage with less than 15% free
if free_space < 0.15:
AM.add("outOfSpace", enabled)
enable_request = False
if VP.brake_only: if VP.brake_only:
enable_condition = ((cur_time - last_enable_request) < 0.2) and CS.cruiseState.enabled enable_condition = ((cur_time - last_enable_request) < 0.2) and CS.cruiseState.enabled
else: else:
@@ -175,6 +200,11 @@ def controlsd_thread(gctx, rate=100): #rate in Hz
if PP.dead: if PP.dead:
AM.add("modelCommIssue", enabled) AM.add("modelCommIssue", enabled)
if overtemp:
AM.add("overheat", enabled)
prof.checkpoint("Model")
if enable_condition and not enabled and not AM.alertPresent(): if enable_condition and not enabled and not AM.alertPresent():
print "*** enabling controls" print "*** enabling controls"
@@ -185,7 +215,7 @@ def controlsd_thread(gctx, rate=100): #rate in Hz
enabled = True enabled = True
# on activation, let's always set v_cruise from where we are, even if PCM ACC is active # on activation, let's always set v_cruise from where we are, even if PCM ACC is active
v_cruise_kph = int(round(np.maximum(CS.vEgo * CV.MS_TO_KPH * VP.ui_speed_fudge, V_CRUISE_ENABLE_MIN))) v_cruise_kph = int(round(max(CS.vEgo * CV.MS_TO_KPH * VP.ui_speed_fudge, V_CRUISE_ENABLE_MIN)))
# 6 minutes driver you're on # 6 minutes driver you're on
awareness_status = 1.0 awareness_status = 1.0
@@ -201,12 +231,16 @@ def controlsd_thread(gctx, rate=100): #rate in Hz
# *** put the adaptive in adaptive cruise control *** # *** put the adaptive in adaptive cruise control ***
AC.update(cur_time, CS.vEgo, CS.steeringAngle, LoC.v_pid, awareness_status, VP) AC.update(cur_time, CS.vEgo, CS.steeringAngle, LoC.v_pid, awareness_status, VP)
prof.checkpoint("AdaptiveCruise")
# *** gas/brake PID loop *** # *** gas/brake PID loop ***
final_gas, final_brake = LoC.update(enabled, CS.vEgo, v_cruise_kph, AC.v_target_lead, AC.a_target, AC.jerk_factor, VP) final_gas, final_brake = LoC.update(enabled, CS.vEgo, v_cruise_kph, AC.v_target_lead, AC.a_target, AC.jerk_factor, VP)
# *** steering PID loop *** # *** steering PID loop ***
final_steer, sat_flag = LaC.update(enabled, CS.vEgo, CS.steeringAngle, CS.steeringPressed, PP.d_poly, angle_offset, VP) final_steer, sat_flag = LaC.update(enabled, CS.vEgo, CS.steeringAngle, CS.steeringPressed, PP.d_poly, angle_offset, VP)
prof.checkpoint("PID")
# ***** handle alerts **** # ***** handle alerts ****
# send a "steering required alert" if saturation count has reached the limit # send a "steering required alert" if saturation count has reached the limit
if sat_flag: if sat_flag:
@@ -226,7 +260,6 @@ def controlsd_thread(gctx, rate=100): #rate in Hz
soft_disable_timer -= 1 soft_disable_timer -= 1
else: else:
soft_disable_timer = None soft_disable_timer = None
# *** push the alerts to current *** # *** push the alerts to current ***
alert_text_1, alert_text_2, visual_alert, audible_alert = AM.process_alerts(cur_time) alert_text_1, alert_text_2, visual_alert, audible_alert = AM.process_alerts(cur_time)
@@ -257,6 +290,8 @@ def controlsd_thread(gctx, rate=100): #rate in Hz
if not CI.apply(CC): if not CI.apply(CC):
AM.add("controlsFailed", enabled) AM.add("controlsFailed", enabled)
prof.checkpoint("CarControl")
# ***** publish state to logger ***** # ***** publish state to logger *****
# publish controls state at 100Hz # publish controls state at 100Hz
@@ -305,12 +340,14 @@ def controlsd_thread(gctx, rate=100): #rate in Hz
live100.send(dat.to_bytes()) live100.send(dat.to_bytes())
prof.checkpoint("Live100")
# *** run loop at fixed rate *** # *** run loop at fixed rate ***
rk.keep_time() if rk.keep_time():
prof.display()
def main(gctx=None): def main(gctx=None):
controlsd_thread(gctx, 100) controlsd_thread(gctx, 100)
if __name__ == "__main__": if __name__ == "__main__":
main() main()
+59 -56
View File
@@ -1,41 +1,41 @@
import selfdrive.messaging as messaging import math
import numpy as np import numpy as np
from common.numpy_fast import clip, interp
import selfdrive.messaging as messaging
# lookup tables VS speed to determine min and max accels in cruise # lookup tables VS speed to determine min and max accels in cruise
_A_CRUISE_MIN_V = np.asarray([-1.0, -.8, -.67, -.5, -.30]) _A_CRUISE_MIN_V = [-1.0, -.8, -.67, -.5, -.30]
_A_CRUISE_MIN_BP = np.asarray([ 0., 5., 10., 20., 40.]) _A_CRUISE_MIN_BP = [ 0., 5., 10., 20., 40.]
# need fast accel at very low speed for stop and go # need fast accel at very low speed for stop and go
_A_CRUISE_MAX_V = np.asarray([1., 1., .8, .5, .30]) _A_CRUISE_MAX_V = [1., 1., .8, .5, .30]
_A_CRUISE_MAX_BP = np.asarray([0., 5., 10., 20., 40.]) _A_CRUISE_MAX_BP = [0., 5., 10., 20., 40.]
def calc_cruise_accel_limits(v_ego): def calc_cruise_accel_limits(v_ego):
a_cruise_min = np.interp(v_ego, _A_CRUISE_MIN_BP, _A_CRUISE_MIN_V) a_cruise_min = interp(v_ego, _A_CRUISE_MIN_BP, _A_CRUISE_MIN_V)
a_cruise_max = np.interp(v_ego, _A_CRUISE_MAX_BP, _A_CRUISE_MAX_V) a_cruise_max = interp(v_ego, _A_CRUISE_MAX_BP, _A_CRUISE_MAX_V)
return np.vstack([a_cruise_min, a_cruise_max])
a_pcm = 1. # always 1 for now _A_TOTAL_MAX_V = [1.5, 1.9, 3.2]
return np.vstack([a_cruise_min, a_cruise_max]), a_pcm _A_TOTAL_MAX_BP = [0., 20., 40.]
_A_TOTAL_MAX_V = np.asarray([1.5, 1.9, 3.2])
_A_TOTAL_MAX_BP = np.asarray([0., 20., 40.])
def limit_accel_in_turns(v_ego, angle_steers, a_target, a_pcm, VP): def limit_accel_in_turns(v_ego, angle_steers, a_target, a_pcm, VP):
#*** this function returns a limited long acceleration allowed, depending on the existing lateral acceleration #*** this function returns a limited long acceleration allowed, depending on the existing lateral acceleration
# this should avoid accelerating when losing the target in turns # this should avoid accelerating when losing the target in turns
deg_to_rad = np.pi / 180. # from can reading to rad deg_to_rad = np.pi / 180. # from can reading to rad
a_total_max = np.interp(v_ego, _A_TOTAL_MAX_BP, _A_TOTAL_MAX_V) a_total_max = interp(v_ego, _A_TOTAL_MAX_BP, _A_TOTAL_MAX_V)
a_y = v_ego**2 * angle_steers * deg_to_rad / (VP.steer_ratio * VP.wheelbase) a_y = v_ego**2 * angle_steers * deg_to_rad / (VP.steer_ratio * VP.wheelbase)
a_x_allowed = np.sqrt(np.maximum(a_total_max**2 - a_y**2, 0.)) a_x_allowed = math.sqrt(max(a_total_max**2 - a_y**2, 0.))
a_target[1] = np.minimum(a_target[1], a_x_allowed) a_target[1] = min(a_target[1], a_x_allowed)
a_pcm = np.minimum(a_pcm, a_x_allowed) a_pcm = min(a_pcm, a_x_allowed)
return a_target, a_pcm return a_target, a_pcm
def process_a_lead(a_lead): def process_a_lead(a_lead):
# soft threshold of 0.5m/s^2 applied to a_lead to reject noise, also not considered positive a_lead # soft threshold of 0.5m/s^2 applied to a_lead to reject noise, also not considered positive a_lead
a_lead_threshold = 0.5 a_lead_threshold = 0.5
a_lead = np.minimum(a_lead + a_lead_threshold, 0) a_lead = min(a_lead + a_lead_threshold, 0)
return a_lead return a_lead
def calc_desired_distance(v_lead): def calc_desired_distance(v_lead):
@@ -46,12 +46,12 @@ def calc_desired_distance(v_lead):
#linear slope #linear slope
_L_SLOPE_V = np.asarray([0.40, 0.10]) _L_SLOPE_V = [0.40, 0.10]
_L_SLOPE_BP = np.asarray([0., 40]) _L_SLOPE_BP = [0., 40]
# parabola slope # parabola slope
_P_SLOPE_V = np.asarray([1.0, 0.25]) _P_SLOPE_V = [1.0, 0.25]
_P_SLOPE_BP = np.asarray([0., 40]) _P_SLOPE_BP = [0., 40]
def calc_desired_speed(d_lead, d_des, v_lead, a_lead): def calc_desired_speed(d_lead, d_des, v_lead, a_lead):
#*** compute desired speed *** #*** compute desired speed ***
@@ -64,8 +64,8 @@ def calc_desired_speed(d_lead, d_des, v_lead, a_lead):
max_runaway_speed = -2. # no slower than 2m/s over the lead max_runaway_speed = -2. # no slower than 2m/s over the lead
# interpolate the lookups to find the slopes for a give lead speed # interpolate the lookups to find the slopes for a give lead speed
l_slope = np.interp(v_lead, _L_SLOPE_BP, _L_SLOPE_V) l_slope = interp(v_lead, _L_SLOPE_BP, _L_SLOPE_V)
p_slope = np.interp(v_lead, _P_SLOPE_BP, _P_SLOPE_V) p_slope = interp(v_lead, _P_SLOPE_BP, _P_SLOPE_V)
# this is where parabola and linear curves are tangents # this is where parabola and linear curves are tangents
x_linear_to_parabola = p_slope / l_slope**2 x_linear_to_parabola = p_slope / l_slope**2
@@ -79,41 +79,41 @@ def calc_desired_speed(d_lead, d_des, v_lead, a_lead):
# calculate v_rel_des on one third of the linear slope # calculate v_rel_des on one third of the linear slope
v_rel_des_2 = (d_lead - d_des) * l_slope / 3. v_rel_des_2 = (d_lead - d_des) * l_slope / 3.
# take the min of the 2 above # take the min of the 2 above
v_rel_des = np.minimum(v_rel_des_1, v_rel_des_2) v_rel_des = min(v_rel_des_1, v_rel_des_2)
v_rel_des = np.maximum(v_rel_des, max_runaway_speed) v_rel_des = max(v_rel_des, max_runaway_speed)
elif d_lead < d_des + x_linear_to_parabola: elif d_lead < d_des + x_linear_to_parabola:
v_rel_des = (d_lead - d_des) * l_slope v_rel_des = (d_lead - d_des) * l_slope
v_rel_des = np.maximum(v_rel_des, max_runaway_speed) v_rel_des = max(v_rel_des, max_runaway_speed)
else: else:
v_rel_des = np.sqrt(2 * (d_lead - d_des - x_parabola_offset) * p_slope) v_rel_des = math.sqrt(2 * (d_lead - d_des - x_parabola_offset) * p_slope)
# compute desired speed # compute desired speed
v_target = v_rel_des + v_lead v_target = v_rel_des + v_lead
# compute v_coast: above this speed we want to coast # compute v_coast: above this speed we want to coast
t_lookahead = 1. # how far in time we consider a_lead to anticipate the coast region t_lookahead = 1. # how far in time we consider a_lead to anticipate the coast region
v_coast_shift = np.maximum(a_lead * t_lookahead, - v_lead) # don't consider projections that would make v_lead<0 v_coast_shift = max(a_lead * t_lookahead, - v_lead) # don't consider projections that would make v_lead<0
v_coast = (v_lead + v_target)/2 + v_coast_shift # no accel allowed above this line v_coast = (v_lead + v_target)/2 + v_coast_shift # no accel allowed above this line
v_coast = np.minimum(v_coast, v_target) v_coast = min(v_coast, v_target)
return v_target, v_coast return v_target, v_coast
def calc_critical_decel(d_lead, v_rel, d_offset, v_offset): def calc_critical_decel(d_lead, v_rel, d_offset, v_offset):
# this function computes the required decel to avoid crashing, given safety offsets # this function computes the required decel to avoid crashing, given safety offsets
a_critical = - np.maximum(0., v_rel + v_offset)**2/np.maximum(2*(d_lead - d_offset), 0.5) a_critical = - max(0., v_rel + v_offset)**2/max(2*(d_lead - d_offset), 0.5)
return a_critical return a_critical
# maximum acceleration adjustment # maximum acceleration adjustment
_A_CORR_BY_SPEED_V = np.asarray([0.4, 0.4, 0]) _A_CORR_BY_SPEED_V = [0.4, 0.4, 0]
# speeds # speeds
_A_CORR_BY_SPEED_BP = np.asarray([0., 5., 20.]) _A_CORR_BY_SPEED_BP = [0., 5., 20.]
def calc_positive_accel_limit(d_lead, d_des, v_ego, v_rel, v_ref, v_rel_ref, v_coast, v_target, a_lead_contr, a_max): def calc_positive_accel_limit(d_lead, d_des, v_ego, v_rel, v_ref, v_rel_ref, v_coast, v_target, a_lead_contr, a_max):
a_coast_min = -1.0 # never coast faster then -1m/s^2 a_coast_min = -1.0 # never coast faster then -1m/s^2
# coasting behavior above v_coast. Forcing a_max to be negative will force the pid_speed to decrease, # coasting behavior above v_coast. Forcing a_max to be negative will force the pid_speed to decrease,
# regardless v_target # regardless v_target
if v_ref > np.minimum(v_coast, v_target): if v_ref > min(v_coast, v_target):
# for smooth coast we can be agrressive and target a point where car would actually crash # for smooth coast we can be agrressive and target a point where car would actually crash
v_offset_coast = 0. v_offset_coast = 0.
d_offset_coast = d_des/2. - 4. d_offset_coast = d_des/2. - 4.
@@ -123,31 +123,31 @@ def calc_positive_accel_limit(d_lead, d_des, v_ego, v_rel, v_ref, v_rel_ref, v_c
a_coast = calc_critical_decel(d_lead, v_rel_ref, d_offset_coast, v_offset_coast) a_coast = calc_critical_decel(d_lead, v_rel_ref, d_offset_coast, v_offset_coast)
# if lead is decelerating, then offset the coast decel # if lead is decelerating, then offset the coast decel
a_coast += a_lead_contr a_coast += a_lead_contr
a_max = np.maximum(a_coast, a_coast_min) a_max = max(a_coast, a_coast_min)
else: else:
a_max = a_coast_min a_max = a_coast_min
else: else:
# same as cruise accel, but add a small correction based on lead acceleration at low speeds # same as cruise accel, but add a small correction based on lead acceleration at low speeds
# when lead car accelerates faster, we can do the same, and vice versa # when lead car accelerates faster, we can do the same, and vice versa
a_max = a_max + np.interp(v_ego, _A_CORR_BY_SPEED_BP, _A_CORR_BY_SPEED_V) \ a_max = a_max + interp(v_ego, _A_CORR_BY_SPEED_BP, _A_CORR_BY_SPEED_V) \
* np.clip(-v_rel / 4., -.5, 1) * clip(-v_rel / 4., -.5, 1)
return a_max return a_max
# arbitrary limits to avoid too high accel being computed # arbitrary limits to avoid too high accel being computed
_A_SAT = np.asarray([-10., 5.]) _A_SAT = [-10., 5.]
# do not consider a_lead at 0m/s, fully consider it at 10m/s # do not consider a_lead at 0m/s, fully consider it at 10m/s
_A_LEAD_LOW_SPEED_V = np.asarray([0., 1.]) _A_LEAD_LOW_SPEED_V = [0., 1.]
# speed break points # speed break points
_A_LEAD_LOW_SPEED_BP = np.asarray([0., 10.]) _A_LEAD_LOW_SPEED_BP = [0., 10.]
# add a small offset to the desired decel, just for safety margin # add a small offset to the desired decel, just for safety margin
_DECEL_OFFSET_V = np.asarray([-0.3, -0.5, -0.5, -0.4, -0.3]) _DECEL_OFFSET_V = [-0.3, -0.5, -0.5, -0.4, -0.3]
# speed bp: different offset based on the likelyhood that lead decels abruptly # speed bp: different offset based on the likelyhood that lead decels abruptly
_DECEL_OFFSET_BP = np.asarray([0., 4., 15., 30, 40.]) _DECEL_OFFSET_BP = [0., 4., 15., 30, 40.]
def calc_acc_accel_limits(d_lead, d_des, v_ego, v_pid, v_lead, v_rel, a_lead, def calc_acc_accel_limits(d_lead, d_des, v_ego, v_pid, v_lead, v_rel, a_lead,
@@ -159,8 +159,8 @@ def calc_acc_accel_limits(d_lead, d_des, v_ego, v_pid, v_lead, v_rel, a_lead,
v_rel_pid = v_pid - v_lead v_rel_pid = v_pid - v_lead
# this is how much lead accel we consider in assigning the desired decel # this is how much lead accel we consider in assigning the desired decel
a_lead_contr = a_lead * np.interp(v_lead, _A_LEAD_LOW_SPEED_BP, a_lead_contr = a_lead * interp(v_lead, _A_LEAD_LOW_SPEED_BP,
_A_LEAD_LOW_SPEED_V) * 0.8 _A_LEAD_LOW_SPEED_V) * 0.8
# first call of calc_positive_accel_limit is used to shape v_pid # first call of calc_positive_accel_limit is used to shape v_pid
a_target[1] = calc_positive_accel_limit(d_lead, d_des, v_ego, v_rel, v_pid, a_target[1] = calc_positive_accel_limit(d_lead, d_des, v_ego, v_rel, v_pid,
@@ -178,15 +178,15 @@ def calc_acc_accel_limits(d_lead, d_des, v_ego, v_pid, v_lead, v_rel, a_lead,
pass # acc target speed is above vehicle speed, so we can use the cruise limits pass # acc target speed is above vehicle speed, so we can use the cruise limits
elif d_lead > d_offset + 0.01: # add small value to avoid by zero divisions elif d_lead > d_offset + 0.01: # add small value to avoid by zero divisions
# compute needed accel to get to 1m distance with -1m/s rel speed # compute needed accel to get to 1m distance with -1m/s rel speed
decel_offset = np.interp(v_lead, _DECEL_OFFSET_BP, _DECEL_OFFSET_V) decel_offset = interp(v_lead, _DECEL_OFFSET_BP, _DECEL_OFFSET_V)
critical_decel = calc_critical_decel(d_lead, v_rel, d_offset, v_offset) critical_decel = calc_critical_decel(d_lead, v_rel, d_offset, v_offset)
a_target[0] = np.minimum(decel_offset + critical_decel + a_lead_contr, a_target[0] = min(decel_offset + critical_decel + a_lead_contr,
a_target[0]) a_target[0])
else: else:
a_target[0] = _A_SAT[0] a_target[0] = _A_SAT[0]
# a_min can't be higher than a_max # a_min can't be higher than a_max
a_target[0] = np.minimum(a_target[0], a_target[1]) a_target[0] = min(a_target[0], a_target[1])
# final check on limits # final check on limits
a_target = np.clip(a_target, _A_SAT[0], _A_SAT[1]) a_target = np.clip(a_target, _A_SAT[0], _A_SAT[1])
a_target = a_target.tolist() a_target = a_target.tolist()
@@ -208,8 +208,8 @@ def calc_jerk_factor(d_lead, v_rel):
else: else:
a_critical = - calc_critical_decel(d_lead, -v_rel, d_offset, v_offset) a_critical = - calc_critical_decel(d_lead, -v_rel, d_offset, v_offset)
# increase Kp and Ki by 20% for every 1m/s2 of decel required above 1m/s2 # increase Kp and Ki by 20% for every 1m/s2 of decel required above 1m/s2
jerk_factor = np.maximum(a_critical - a_offset, 0.)/5. jerk_factor = max(a_critical - a_offset, 0.)/5.
jerk_factor = np.minimum(jerk_factor, jerk_factor_max) jerk_factor = min(jerk_factor, jerk_factor_max)
return jerk_factor return jerk_factor
@@ -223,27 +223,27 @@ def calc_ttc(d_rel, v_rel, a_rel, v_lead):
# assuming that closing gap a_rel comes from lead vehicle decel, then limit a_rel so that v_lead will get to zero in no sooner than t_decel # assuming that closing gap a_rel comes from lead vehicle decel, then limit a_rel so that v_lead will get to zero in no sooner than t_decel
# this helps overweighting a_rel when v_lead is close to zero. # this helps overweighting a_rel when v_lead is close to zero.
t_decel = 2. t_decel = 2.
a_rel = np.minimum(a_rel, v_lead/t_decel) a_rel = min(a_rel, v_lead/t_decel)
delta = v_rel**2 + 2 * d_rel * a_rel delta = v_rel**2 + 2 * d_rel * a_rel
# assign an arbitrary high ttc value if there is no solution to ttc # assign an arbitrary high ttc value if there is no solution to ttc
if delta < 0.1: if delta < 0.1:
ttc = 5. ttc = 5.
elif np.sqrt(delta) + v_rel < 0.1: elif math.sqrt(delta) + v_rel < 0.1:
ttc = 5. ttc = 5.
else: else:
ttc = 2 * d_rel / (np.sqrt(delta) + v_rel) ttc = 2 * d_rel / (math.sqrt(delta) + v_rel)
return ttc return ttc
def limit_accel_driver_awareness(v_ego, a_target, a_pcm, awareness_status): def limit_accel_driver_awareness(v_ego, a_target, a_pcm, awareness_status):
decel_bp = [0. , 40.] decel_bp = [0. , 40.]
decel_v = [-0.3, -0.2] decel_v = [-0.3, -0.2]
decel = np.interp(v_ego, decel_bp, decel_v) decel = interp(v_ego, decel_bp, decel_v)
# gives 18 seconds before decel begins (w 6 minute timeout) # gives 18 seconds before decel begins (w 6 minute timeout)
if awareness_status < -0.05: if awareness_status < -0.05:
a_target[1] = np.minimum(a_target[1], decel) a_target[1] = min(a_target[1], decel)
a_target[0] = np.minimum(a_target[1], a_target[0]) a_target[0] = min(a_target[1], a_target[0])
a_pcm = 0. a_pcm = 0.
return a_target, a_pcm return a_target, a_pcm
@@ -258,7 +258,10 @@ def compute_speed_with_leads(v_ego, angle_steers, v_pid, l1, l2, awareness_statu
v_target_lead = MAX_SPEED_POSSIBLE v_target_lead = MAX_SPEED_POSSIBLE
#*** set accel limits as cruise accel/decel limits *** #*** set accel limits as cruise accel/decel limits ***
a_target, a_pcm = calc_cruise_accel_limits(v_ego) a_target = calc_cruise_accel_limits(v_ego)
# Always 1 for now.
a_pcm = 1
#*** limit max accel in sharp turns #*** limit max accel in sharp turns
a_target, a_pcm = limit_accel_in_turns(v_ego, angle_steers, a_target, a_pcm, VP) a_target, a_pcm = limit_accel_in_turns(v_ego, angle_steers, a_target, a_pcm, VP)
jerk_factor = 0. jerk_factor = 0.
+3 -1
View File
@@ -54,7 +54,9 @@ class AlertManager(object):
"doorOpen": alert("Take Control Immediately","Door Open", ET.SOFT_DISABLE, "steerRequired", "chimeRepeated", 1., 3., 3.), "doorOpen": alert("Take Control Immediately","Door Open", ET.SOFT_DISABLE, "steerRequired", "chimeRepeated", 1., 3., 3.),
"seatbeltNotLatched": alert("Take Control Immediately","Seatbelt Unlatched", ET.SOFT_DISABLE, "steerRequired", "chimeRepeated", 1., 3., 3.), "seatbeltNotLatched": alert("Take Control Immediately","Seatbelt Unlatched", ET.SOFT_DISABLE, "steerRequired", "chimeRepeated", 1., 3., 3.),
"espDisabled": alert("Take Control Immediately","ESP Off", ET.SOFT_DISABLE, "steerRequired", "chimeRepeated", 1., 3., 3.), "espDisabled": alert("Take Control Immediately","ESP Off", ET.SOFT_DISABLE, "steerRequired", "chimeRepeated", 1., 3., 3.),
"wrongCarMode": alert("Comma Unavailable","Main Switch Off", ET.NO_ENTRY, None, None, .4, 0., 3.), "wrongCarMode": alert("Comma Unavailable","Main Switch Off", ET.NO_ENTRY, None, "chimeDouble", .4, 0., 3.),
"outOfSpace": alert("Comma Unavailable","Out of Space", ET.NO_ENTRY, None, "chimeDouble", .4, 0., 3.),
"ethicalDilemma": alert("Take Control Immediately","Ethical Dilemma Detected", ET.IMMEDIATE_DISABLE, "steerRequired", "chimeRepeated", 1., 3., 3.),
} }
def __init__(self): def __init__(self):
self.activealerts = [] self.activealerts = []
+5 -4
View File
@@ -1,7 +1,8 @@
import numpy as np import numpy as np
from common.numpy_fast import clip, interp
def rate_limit(new_value, last_value, dw_step, up_step): def rate_limit(new_value, last_value, dw_step, up_step):
return np.clip(new_value, last_value + dw_step, last_value + up_step) return clip(new_value, last_value + dw_step, last_value + up_step)
def learn_angle_offset(lateral_control, v_ego, angle_offset, d_poly, y_des, steer_override): def learn_angle_offset(lateral_control, v_ego, angle_offset, d_poly, y_des, steer_override):
# simple integral controller that learns how much steering offset to put to have the car going straight # simple integral controller that learns how much steering offset to put to have the car going straight
@@ -11,12 +12,12 @@ def learn_angle_offset(lateral_control, v_ego, angle_offset, d_poly, y_des, stee
min_learn_speed = 1. min_learn_speed = 1.
# learn less at low speed or when turning # learn less at low speed or when turning
alpha_v = alpha*(np.maximum(v_ego - min_learn_speed, 0.))/(1. + 0.5*abs(y_des)) alpha_v = alpha*(max(v_ego - min_learn_speed, 0.))/(1. + 0.5*abs(y_des))
# only learn if lateral control is active and if driver is not overriding: # only learn if lateral control is active and if driver is not overriding:
if lateral_control and not steer_override: if lateral_control and not steer_override:
angle_offset += d_poly[3] * alpha_v angle_offset += d_poly[3] * alpha_v
angle_offset = np.clip(angle_offset, min_offset, max_offset) angle_offset = clip(angle_offset, min_offset, max_offset)
return angle_offset return angle_offset
@@ -44,7 +45,7 @@ def actuator_hystereses(final_brake, braking, brake_steady, v_ego, civic):
brake_on_offset_v = [.25, .15] # min brake command on brake activation. below this no decel is perceived brake_on_offset_v = [.25, .15] # min brake command on brake activation. below this no decel is perceived
brake_on_offset_bp = [15., 30.] # offset changes VS speed to not have too abrupt decels at high speeds brake_on_offset_bp = [15., 30.] # offset changes VS speed to not have too abrupt decels at high speeds
# offset the brake command for threshold in the brake system. no brake torque perceived below it # offset the brake command for threshold in the brake system. no brake torque perceived below it
brake_on_offset = np.interp(v_ego, brake_on_offset_bp, brake_on_offset_v) brake_on_offset = interp(v_ego, brake_on_offset_bp, brake_on_offset_v)
brake_offset = brake_on_offset - brake_hyst_on brake_offset = brake_on_offset - brake_hyst_on
if final_brake > 0.0: if final_brake > 0.0:
final_brake += brake_offset final_brake += brake_offset
+7 -5
View File
@@ -1,4 +1,6 @@
import math
import numpy as np import numpy as np
from common.numpy_fast import clip
def calc_curvature(v_ego, angle_steers, VP, angle_offset=0): def calc_curvature(v_ego, angle_steers, VP, angle_offset=0):
deg_to_rad = np.pi/180. deg_to_rad = np.pi/180.
@@ -14,7 +16,7 @@ def calc_d_lookahead(v_ego):
# sqrt on speed is needed to keep, for a given curvature, the y_offset # sqrt on speed is needed to keep, for a given curvature, the y_offset
# proportional to speed. Indeed, y_offset is prop to d_lookahead^2 # proportional to speed. Indeed, y_offset is prop to d_lookahead^2
# 26m at 25m/s # 26m at 25m/s
d_lookahead = offset_lookahead + np.sqrt(np.maximum(v_ego, 0)) * coeff_lookahead d_lookahead = offset_lookahead + math.sqrt(max(v_ego, 0)) * coeff_lookahead
return d_lookahead return d_lookahead
def calc_lookahead_offset(v_ego, angle_steers, d_lookahead, VP, angle_offset): def calc_lookahead_offset(v_ego, angle_steers, d_lookahead, VP, angle_offset):
@@ -53,7 +55,7 @@ def pid_lateral_control(v_ego, y_actual, y_des, Ui_steer, steer_max,
Ui_steer -= Ui_unwind_speed * np.sign(Ui_steer) Ui_steer -= Ui_unwind_speed * np.sign(Ui_steer)
# still, intergral term should not be bigger then limits # still, intergral term should not be bigger then limits
Ui_steer = np.clip(Ui_steer, -steer_max, steer_max) Ui_steer = clip(Ui_steer, -steer_max, steer_max)
output_steer = Up_steer + Ui_steer output_steer = Up_steer + Ui_steer
@@ -67,7 +69,7 @@ def pid_lateral_control(v_ego, y_actual, y_des, Ui_steer, steer_max,
if abs(output_steer) > steer_max: if abs(output_steer) > steer_max:
lateral_control_sat = True lateral_control_sat = True
output_steer = np.clip(output_steer, -steer_max, steer_max) output_steer = clip(output_steer, -steer_max, steer_max)
# if lateral control is saturated for a certain period of time, send an alert for taking control of the car # if lateral control is saturated for a certain period of time, send an alert for taking control of the car
# wind # wind
@@ -81,7 +83,7 @@ def pid_lateral_control(v_ego, y_actual, y_des, Ui_steer, steer_max,
if sat_count >= sat_count_limit: if sat_count >= sat_count_limit:
sat_flag = True sat_flag = True
sat_count = np.clip(sat_count, 0, 1) sat_count = clip(sat_count, 0, 1)
return output_steer, Up_steer, Ui_steer, lateral_control_sat, sat_count, sat_flag return output_steer, Up_steer, Ui_steer, lateral_control_sat, sat_count, sat_flag
@@ -116,5 +118,5 @@ class LatControl(object):
v_ego, self.y_actual, self.y_des, self.Ui_steer, steer_max, v_ego, self.y_actual, self.y_des, self.Ui_steer, steer_max,
steer_override, self.sat_count, enabled, VP.torque_mod, rate) steer_override, self.sat_count, enabled, VP.torque_mod, rate)
final_steer = np.clip(output_steer, -steer_max, steer_max) final_steer = clip(output_steer, -steer_max, steer_max)
return final_steer, sat_flag return final_steer, sat_flag
+32 -27
View File
@@ -1,4 +1,5 @@
import numpy as np import numpy as np
from common.numpy_fast import clip, interp
from selfdrive.config import Conversions as CV from selfdrive.config import Conversions as CV
class LongCtrlState: class LongCtrlState:
@@ -82,15 +83,18 @@ def get_compute_gb():
# takes in [desired_accel, current_speed] -> [-1.0, 1.0] where -1.0 is max brake and 1.0 is max gas # takes in [desired_accel, current_speed] -> [-1.0, 1.0] where -1.0 is max brake and 1.0 is max gas
compute_gb = get_compute_gb() compute_gb = get_compute_gb()
_KP_BP = [0., 5., 35.]
_KP_V = [1.2, 0.8, 0.5]
_kI_BP = [0., 35.]
_kI_V = [0.18, 0.12]
def pid_long_control(v_ego, v_pid, Ui_accel_cmd, gas_max, brake_max, jerk_factor, gear, rate): def pid_long_control(v_ego, v_pid, Ui_accel_cmd, gas_max, brake_max, jerk_factor, gear, rate):
#*** This function compute the gb pedal positions in order to track the desired speed #*** This function compute the gb pedal positions in order to track the desired speed
# proportional and integral terms. More precision at low speed # proportional and integral terms. More precision at low speed
Kp_v = [1.2, 0.8, 0.5] Kp = interp(v_ego, _KP_BP, _KP_V)
Kp_bp = [0., 5., 35.] Ki = interp(v_ego, _kI_BP, _kI_V)
Kp = np.interp(v_ego, Kp_bp, Kp_v)
Ki_v = [0.18, 0.12]
Ki_bp = [0., 35.]
Ki = np.interp(v_ego, Ki_bp, Ki_v)
# scle Kp and Ki by jerk factor drom drive_thread # scle Kp and Ki by jerk factor drom drive_thread
Kp = (1. + jerk_factor)*Kp Kp = (1. + jerk_factor)*Kp
@@ -98,7 +102,7 @@ def pid_long_control(v_ego, v_pid, Ui_accel_cmd, gas_max, brake_max, jerk_factor
# this is ugly but can speed reports 0 when speed<0.3m/s and we can't have that jump # this is ugly but can speed reports 0 when speed<0.3m/s and we can't have that jump
v_ego_min = 0.3 v_ego_min = 0.3
v_ego = np.maximum(v_ego, v_ego_min) v_ego = max(v_ego, v_ego_min)
v_error = v_pid - v_ego v_error = v_pid - v_ego
@@ -126,7 +130,7 @@ def pid_long_control(v_ego, v_pid, Ui_accel_cmd, gas_max, brake_max, jerk_factor
if output_gb > gas_max or output_gb < -brake_max: if output_gb > gas_max or output_gb < -brake_max:
long_control_sat = True long_control_sat = True
output_gb = np.clip(output_gb, -brake_max, gas_max) output_gb = clip(output_gb, -brake_max, gas_max)
return output_gb, Up_accel_cmd, Ui_accel_cmd, long_control_sat return output_gb, Up_accel_cmd, Ui_accel_cmd, long_control_sat
@@ -136,8 +140,8 @@ starting_brake_rate = 0.6 # brake_travel/s while releasing on restart
starting_Ui = 0.5 # Since we don't have much info about acceleration at this point, be conservative starting_Ui = 0.5 # Since we don't have much info about acceleration at this point, be conservative
brake_stopping_target = 0.5 # apply at least this amount of brake to maintain the vehicle stationary brake_stopping_target = 0.5 # apply at least this amount of brake to maintain the vehicle stationary
max_speed_error_v = [1.5, .8] # max positive v_pid error VS actual speed; this avoids controls windup due to slow pedal resp _MAX_SPEED_ERROR_BP = [0., 30.] # speed breakpoints
max_speed_error_bp = [0., 30.] # speed breakpoints _MAX_SPEED_ERROR_V = [1.5, .8] # max positive v_pid error VS actual speed; this avoids controls windup due to slow pedal resp
class LongControl(object): class LongControl(object):
def __init__(self): def __init__(self):
@@ -152,18 +156,19 @@ class LongControl(object):
self.v_pid = v_pid self.v_pid = v_pid
def update(self, enabled, v_ego, v_cruise, v_target_lead, a_target, jerk_factor, VP): def update(self, enabled, v_ego, v_cruise, v_target_lead, a_target, jerk_factor, VP):
# TODO: not every time
if VP.brake_only:
gas_max_v = [0, 0] # values
else:
gas_max_v = [0.6, 0.6] # values
gas_max_bp = [0., 100.] # speeds
brake_max_v = [1.0, 1.0, 0.8, 0.8] # values
brake_max_bp = [0., 5., 20., 100.] # speeds brake_max_bp = [0., 5., 20., 100.] # speeds
brake_max_v = [1.0, 1.0, 0.8, 0.8] # values
# brake and gas limits # brake and gas limits
brake_max = np.interp(v_ego, brake_max_bp, brake_max_v) brake_max = interp(v_ego, brake_max_bp, brake_max_v)
gas_max = np.interp(v_ego, gas_max_bp, gas_max_v)
# TODO: not every time
if VP.brake_only:
gas_max = 0
else:
gas_max_bp = [0., 100.] # speeds
gas_max_v = [0.6, 0.6] # values
gas_max = interp(v_ego, gas_max_bp, gas_max_v)
overshoot_allowance = 2.0 # overshoot allowed when changing accel sign overshoot_allowance = 2.0 # overshoot allowed when changing accel sign
@@ -172,7 +177,7 @@ class LongControl(object):
# limit max target speed based on cruise setting: # limit max target speed based on cruise setting:
v_cruise_mph = round(v_cruise * CV.KPH_TO_MPH) # what's displayed in mph on the IC v_cruise_mph = round(v_cruise * CV.KPH_TO_MPH) # what's displayed in mph on the IC
v_target = np.minimum(v_target_lead, v_cruise_mph * CV.MPH_TO_MS / VP.ui_speed_fudge) v_target = min(v_target_lead, v_cruise_mph * CV.MPH_TO_MS / VP.ui_speed_fudge)
max_speed_delta_up = a_target[1]*1.0/rate max_speed_delta_up = a_target[1]*1.0/rate
max_speed_delta_down = a_target[0]*1.0/rate max_speed_delta_down = a_target[0]*1.0/rate
@@ -192,10 +197,10 @@ class LongControl(object):
#reset v_pid close to v_ego if it was too far and new v_target is closer to v_ego #reset v_pid close to v_ego if it was too far and new v_target is closer to v_ego
if ((self.v_pid > v_ego + overshoot_allowance) and if ((self.v_pid > v_ego + overshoot_allowance) and
(v_target < self.v_pid)): (v_target < self.v_pid)):
self.v_pid = np.maximum(v_target, v_ego + overshoot_allowance) self.v_pid = max(v_target, v_ego + overshoot_allowance)
elif ((self.v_pid < v_ego - overshoot_allowance) and elif ((self.v_pid < v_ego - overshoot_allowance) and
(v_target > self.v_pid)): (v_target > self.v_pid)):
self.v_pid = np.minimum(v_target, v_ego - overshoot_allowance) self.v_pid = min(v_target, v_ego - overshoot_allowance)
# move v_pid no faster than allowed accel limits # move v_pid no faster than allowed accel limits
if (v_target > self.v_pid + max_speed_delta_up): if (v_target > self.v_pid + max_speed_delta_up):
@@ -207,8 +212,8 @@ class LongControl(object):
# to avoid too much wind up on acceleration, limit positive speed error # to avoid too much wind up on acceleration, limit positive speed error
if not VP.brake_only: if not VP.brake_only:
max_speed_error = np.interp(v_ego, max_speed_error_bp, max_speed_error_v) max_speed_error = interp(v_ego, _MAX_SPEED_ERROR_BP, _MAX_SPEED_ERROR_V)
self.v_pid = np.minimum(self.v_pid, v_ego + max_speed_error) self.v_pid = min(self.v_pid, v_ego + max_speed_error)
# TODO: removed anti windup on gear change, does it matter? # TODO: removed anti windup on gear change, does it matter?
output_gb, self.Up_accel_cmd, self.Ui_accel_cmd, self.long_control_sat = pid_long_control(v_ego, self.v_pid, \ output_gb, self.Up_accel_cmd, self.Ui_accel_cmd, self.long_control_sat = pid_long_control(v_ego, self.v_pid, \
@@ -217,7 +222,7 @@ class LongControl(object):
elif self.long_control_state == LongCtrlState.stopping: elif self.long_control_state == LongCtrlState.stopping:
if v_ego > 0. or output_gb > -brake_stopping_target: if v_ego > 0. or output_gb > -brake_stopping_target:
output_gb -= stopping_brake_rate/rate output_gb -= stopping_brake_rate/rate
output_gb = np.clip(output_gb, -brake_max, gas_max) output_gb = clip(output_gb, -brake_max, gas_max)
self.v_pid = v_ego self.v_pid = v_ego
self.Ui_accel_cmd = 0. self.Ui_accel_cmd = 0.
# intention is to move again, release brake fast before handling control to PID # intention is to move again, release brake fast before handling control to PID
@@ -228,7 +233,7 @@ class LongControl(object):
self.Ui_accel_cmd = starting_Ui self.Ui_accel_cmd = starting_Ui
self.last_output_gb = output_gb self.last_output_gb = output_gb
final_gas = np.clip(output_gb, 0., gas_max) final_gas = clip(output_gb, 0., gas_max)
final_brake = -np.clip(output_gb, -brake_max, 0.) final_brake = -clip(output_gb, -brake_max, 0.)
return final_gas, final_brake return final_gas, final_brake
+27 -15
View File
@@ -1,26 +1,36 @@
import selfdrive.messaging as messaging import math
import numpy as np import numpy as np
X_PATH = np.arange(0.0, 50.0)
def model_polyfit(points): from common.numpy_fast import interp
return np.polyfit(X_PATH, map(float, points), 3) import selfdrive.messaging as messaging
def compute_path_pinv():
deg = 3
x = np.arange(50.0)
X = np.vstack(tuple(x**n for n in range(deg, -1, -1))).T
pinv = np.linalg.pinv(X)
return pinv
def model_polyfit(points, path_pinv):
return np.dot(path_pinv, map(float, points))
# lane width http://safety.fhwa.dot.gov/geometric/pubs/mitigationstrategies/chapter3/3_lanewidth.cfm # lane width http://safety.fhwa.dot.gov/geometric/pubs/mitigationstrategies/chapter3/3_lanewidth.cfm
_LANE_WIDTH_V = np.asarray([3., 3.8]) _LANE_WIDTH_V = [3., 3.8]
# break points of speed # break points of speed
_LANE_WIDTH_BP = np.asarray([0., 31.]) _LANE_WIDTH_BP = [0., 31.]
def calc_desired_path(l_poly, r_poly, p_poly, l_prob, r_prob, p_prob, speed): def calc_desired_path(l_poly, r_poly, p_poly, l_prob, r_prob, p_prob, speed):
#*** this function computes the poly for the center of the lane, averaging left and right polys #*** this function computes the poly for the center of the lane, averaging left and right polys
lane_width = np.interp(speed, _LANE_WIDTH_BP, _LANE_WIDTH_V) lane_width = interp(speed, _LANE_WIDTH_BP, _LANE_WIDTH_V)
# lanes in US are ~3.6m wide # lanes in US are ~3.6m wide
half_lane_poly = np.array([0., 0., 0., lane_width / 2.]) half_lane_poly = np.array([0., 0., 0., lane_width / 2.])
if l_prob + r_prob > 0.01: if l_prob + r_prob > 0.01:
c_poly = ((l_poly - half_lane_poly) * l_prob + c_poly = ((l_poly - half_lane_poly) * l_prob +
(r_poly + half_lane_poly) * r_prob) / (l_prob + r_prob) (r_poly + half_lane_poly) * r_prob) / (l_prob + r_prob)
c_prob = np.sqrt((l_prob**2 + r_prob**2) / 2.) c_prob = math.sqrt((l_prob**2 + r_prob**2) / 2.)
else: else:
c_poly = np.zeros(4) c_poly = np.zeros(4)
c_prob = 0. c_prob = 0.
@@ -37,24 +47,26 @@ class PathPlanner(object):
self.last_model = 0. self.last_model = 0.
self.logMonoTime = 0 self.logMonoTime = 0
self.lead_dist, self.lead_prob, self.lead_var = 0, 0, 1 self.lead_dist, self.lead_prob, self.lead_var = 0, 0, 1
self._path_pinv = compute_path_pinv()
def update(self, cur_time, v_ego): def update(self, cur_time, v_ego):
md = messaging.recv_sock(self.model) md = messaging.recv_sock(self.model)
if md is not None: if md is not None:
self.logMonoTime = md.logMonoTime self.logMonoTime = md.logMonoTime
p_poly = model_polyfit(md.model.path.points) # predicted path p_poly = model_polyfit(md.model.path.points, self._path_pinv) # predicted path
p_prob = 1. # model does not tell this probability yet, so set to 1 for now l_poly = model_polyfit(md.model.leftLane.points, self._path_pinv) # left line
l_poly = model_polyfit(md.model.leftLane.points) # left line r_poly = model_polyfit(md.model.rightLane.points, self._path_pinv) # right line
l_prob = md.model.leftLane.prob # left line prob
r_poly = model_polyfit(md.model.rightLane.points) # right line p_prob = 1. # model does not tell this probability yet, so set to 1 for now
r_prob = md.model.rightLane.prob # right line prob l_prob = md.model.leftLane.prob # left line prob
r_prob = md.model.rightLane.prob # right line prob
self.lead_dist = md.model.lead.dist self.lead_dist = md.model.lead.dist
self.lead_prob = md.model.lead.prob self.lead_prob = md.model.lead.prob
self.lead_var = md.model.lead.std**2 self.lead_var = md.model.lead.std**2
#*** compute target path *** # compute target path
self.d_poly, _, _ = calc_desired_path(l_poly, r_poly, p_poly, l_prob, r_prob, p_prob, v_ego) self.d_poly, _, _ = calc_desired_path(l_poly, r_poly, p_poly, l_prob, r_prob, p_prob, v_ego)
self.last_model = cur_time self.last_model = cur_time
+9 -7
View File
@@ -1,8 +1,10 @@
import numpy as np
import platform
import os import os
import sys import sys
import math
import platform
import numpy as np
from common.numpy_fast import clip, interp
from common.kalman.ekf import FastEKF1D, SimpleSensor from common.kalman.ekf import FastEKF1D, SimpleSensor
# radar tracks # radar tracks
@@ -51,14 +53,14 @@ class Track(object):
else: else:
# estimate acceleration # estimate acceleration
a_rel_unfilt = (self.vRel - self.vRelPrev) / ts a_rel_unfilt = (self.vRel - self.vRelPrev) / ts
a_rel_unfilt = np.clip(a_rel_unfilt, -10., 10.) a_rel_unfilt = clip(a_rel_unfilt, -10., 10.)
self.aRel = k_a_lead * a_rel_unfilt + (1 - k_a_lead) * self.aRel self.aRel = k_a_lead * a_rel_unfilt + (1 - k_a_lead) * self.aRel
v_lat_unfilt = (self.dPath - self.dPathPrev) / ts v_lat_unfilt = (self.dPath - self.dPathPrev) / ts
self.vLat = k_v_lat * v_lat_unfilt + (1 - k_v_lat) * self.vLat self.vLat = k_v_lat * v_lat_unfilt + (1 - k_v_lat) * self.vLat
a_lead_unfilt = (self.vLead - self.vLeadPrev) / ts a_lead_unfilt = (self.vLead - self.vLeadPrev) / ts
a_lead_unfilt = np.clip(a_lead_unfilt, -10., 10.) a_lead_unfilt = clip(a_lead_unfilt, -10., 10.)
self.aLead = k_a_lead * a_lead_unfilt + (1 - k_a_lead) * self.aLead self.aLead = k_a_lead * a_lead_unfilt + (1 - k_a_lead) * self.aLead
if self.stationary: if self.stationary:
@@ -232,12 +234,12 @@ class Cluster(object):
d_path = self.dPath d_path = self.dPath
if enabled: if enabled:
t_lookahead = np.interp(self.dRel, t_lookahead_bp, t_lookahead_v) t_lookahead = interp(self.dRel, t_lookahead_bp, t_lookahead_v)
# correct d_path for lookahead time, considering only cut-ins and no more than 1m impact # correct d_path for lookahead time, considering only cut-ins and no more than 1m impact
lat_corr = np.clip(t_lookahead * self.vLat, -1, 0) lat_corr = clip(t_lookahead * self.vLat, -1, 0)
else: else:
lat_corr = 0. lat_corr = 0.
d_path = np.maximum(d_path + lat_corr, 0) d_path = max(d_path + lat_corr, 0)
if d_path < 1.5 and not self.stationary and not self.oncoming: if d_path < 1.5 and not self.stationary and not self.oncoming:
return True return True
-2
View File
@@ -8,7 +8,6 @@ from collections import defaultdict
from fastcluster import linkage_vector from fastcluster import linkage_vector
import selfdrive.messaging as messaging import selfdrive.messaging as messaging
from selfdrive.boardd.boardd import can_capnp_to_can_list_old
from selfdrive.controls.lib.latcontrol import calc_lookahead_offset from selfdrive.controls.lib.latcontrol import calc_lookahead_offset
from selfdrive.controls.lib.pathplanner import PathPlanner from selfdrive.controls.lib.pathplanner import PathPlanner
from selfdrive.config import VehicleParams from selfdrive.config import VehicleParams
@@ -37,7 +36,6 @@ class EKFV1D(EKF):
self.var_init = 1e2 # ~ model variance when probability is 70%, so good starting point self.var_init = 1e2 # ~ model variance when probability is 70%, so good starting point
self.covar = self.identity * self.var_init self.covar = self.identity * self.var_init
# self.process_noise = np.asmatrix(np.diag([100, 10]))
self.process_noise = np.matlib.diag([0.5, 1]) self.process_noise = np.matlib.diag([0.5, 1])
def calc_transfer_fun(self, dt): def calc_transfer_fun(self, dt):
+31
View File
@@ -0,0 +1,31 @@
#!/usr/bin/env python
import sys
import argparse
import zmq
from hexdump import hexdump
import selfdrive.messaging as messaging
from common.services import service_list
if __name__ == "__main__":
context = zmq.Context()
poller = zmq.Poller()
parser = argparse.ArgumentParser(description='Sniff a communcation socket')
parser.add_argument('--raw', action='store_true')
parser.add_argument("socket", type=str,
help="socket name")
args = parser.parse_args()
messaging.sub_sock(context, service_list[args.socket].port, poller)
while 1:
polld = poller.poll(timeout=1000)
for sock, mode in polld:
if mode != zmq.POLLIN:
continue
if args.raw:
hexdump(sock.recv())
else:
print messaging.recv_sock(sock)
+2 -2
View File
@@ -1,8 +1,8 @@
import os import os
# fetch from environment # fetch from environment
DONGLE_ID = os.getenv("DONGLE_ID") def get_dongle_id_and_secret():
DONGLE_SECRET = os.getenv("DONGLE_SECRET") return os.getenv("DONGLE_ID"), os.getenv("DONGLE_SECRET")
ROOT = '/sdcard/realdata/' ROOT = '/sdcard/realdata/'
+9 -2
View File
@@ -75,10 +75,17 @@ def main(gctx=None):
rotate_msg = messaging.log.LogRotate.new_message() rotate_msg = messaging.log.LogRotate.new_message()
rotate_msg.segmentNum = cur_part rotate_msg.segmentNum = cur_part
rotate_msg.path = cur_dir rotate_msg.path = cur_dir
vision_control_sock.send(rotate_msg.to_bytes()) vision_control_sock.send(rotate_msg.to_bytes())
finally: finally:
cloudlog.info("loggerd exiting...")
# tell visiond to stop logging
rotate_msg = messaging.log.LogRotate.new_message()
rotate_msg.segmentNum = -1
rotate_msg.path = "/dev/null"
vision_control_sock.send(rotate_msg.to_bytes())
# stop logging
logger.stop() logger.stop()
if __name__ == "__main__": if __name__ == "__main__":
+8 -2
View File
@@ -10,7 +10,7 @@ import traceback
import threading import threading
from selfdrive.swaglog import cloudlog from selfdrive.swaglog import cloudlog
from selfdrive.loggerd.config import DONGLE_ID, DONGLE_SECRET, ROOT from selfdrive.loggerd.config import get_dongle_id_and_secret, ROOT
from common.api import api_get from common.api import api_get
@@ -205,7 +205,13 @@ class Uploader(object):
def uploader_fn(exit_event): def uploader_fn(exit_event):
cloudlog.info("uploader_fn") cloudlog.info("uploader_fn")
uploader = Uploader(DONGLE_ID, DONGLE_SECRET, ROOT) dongle_id, dongle_secret = get_dongle_id_and_secret()
if dongle_id is None or dongle_secret is None:
cloudlog.info("uploader MISSING DONGLE_ID or DONGLE_SECRET")
raise Exception("uploader can't start without dongle id and secret")
uploader = Uploader(dongle_id, dongle_secret, ROOT)
while True: while True:
backoff = 0.1 backoff = 0.1
+31 -11
View File
@@ -21,6 +21,8 @@ from selfdrive.registration import register
import common.crash import common.crash
from selfdrive.loggerd.config import ROOT
# comment out anything you don't want to run # comment out anything you don't want to run
managed_processes = { managed_processes = {
"uploader": "selfdrive.loggerd.uploader", "uploader": "selfdrive.loggerd.uploader",
@@ -49,10 +51,6 @@ car_started_processes = ['controlsd', 'loggerd', 'sensord', 'radard', 'calibrati
# ****************** process management functions ****************** # ****************** process management functions ******************
def launcher(proc, gctx): def launcher(proc, gctx):
try: try:
# unset the signals
signal.signal(signal.SIGINT, signal.SIG_DFL)
signal.signal(signal.SIGTERM, signal.SIG_DFL)
# import the process # import the process
mod = importlib.import_module(proc) mod = importlib.import_module(proc)
@@ -61,6 +59,8 @@ def launcher(proc, gctx):
# exec the process # exec the process
mod.main(gctx) mod.main(gctx)
except KeyboardInterrupt:
cloudlog.info("child %s got ctrl-c" % proc)
except Exception: except Exception:
# can't install the crash handler becuase sys.excepthook doesn't play nice # can't install the crash handler becuase sys.excepthook doesn't play nice
# with threads, so catch it here. # with threads, so catch it here.
@@ -156,10 +156,6 @@ def manager_init():
} }
} }
# hook to kill all processes
signal.signal(signal.SIGINT, cleanup_all_processes)
signal.signal(signal.SIGTERM, cleanup_all_processes)
def manager_thread(): def manager_thread():
# now loop # now loop
context = zmq.Context() context = zmq.Context()
@@ -188,6 +184,8 @@ def manager_thread():
for p in car_started_processes: for p in car_started_processes:
start_managed_process(p) start_managed_process(p)
logger_dead = False
while 1: while 1:
# get health of board, log this in "thermal" # get health of board, log this in "thermal"
td = messaging.recv_sock(health_sock, wait=True) td = messaging.recv_sock(health_sock, wait=True)
@@ -195,6 +193,13 @@ def manager_thread():
# replace thermald # replace thermald
msg = read_thermal() msg = read_thermal()
# loggerd is gated based on free space
statvfs = os.statvfs(ROOT)
avail = (statvfs.f_bavail * 1.0)/statvfs.f_blocks
# thermal message now also includes free space
msg.thermal.freeSpace = avail
thermal_sock.send(msg.to_bytes()) thermal_sock.send(msg.to_bytes())
print msg print msg
@@ -209,18 +214,26 @@ def manager_thread():
elif max_temp < 70.0: elif max_temp < 70.0:
start_managed_process("uploader") start_managed_process("uploader")
if avail < 0.05:
logger_dead = True
# start constellation of processes when the car starts # start constellation of processes when the car starts
if not os.getenv("STARTALL"): if not os.getenv("STARTALL"):
if td.health.started: # with 2% left, we killall, otherwise the phone is bricked
if td.health.started and avail > 0.02:
for p in car_started_processes: for p in car_started_processes:
start_managed_process(p) if p == "loggerd" and logger_dead:
kill_managed_process(p)
else:
start_managed_process(p)
else: else:
logger_dead = False
for p in car_started_processes: for p in car_started_processes:
kill_managed_process(p) kill_managed_process(p)
# check the status of all processes, did any of them die? # check the status of all processes, did any of them die?
for p in running: for p in running:
cloudlog.info(" running %s %s" % (p, running[p])) cloudlog.debug(" running %s %s" % (p, running[p]))
# optional, build the c++ binaries and preimport the python for speed # optional, build the c++ binaries and preimport the python for speed
@@ -282,8 +295,15 @@ def main():
del managed_processes['loggerd'] del managed_processes['loggerd']
if os.getenv("NOUPLOAD") is not None: if os.getenv("NOUPLOAD") is not None:
del managed_processes['uploader'] del managed_processes['uploader']
if os.getenv("NOVISION") is not None:
del managed_processes['visiond']
if os.getenv("NOBOARD") is not None: if os.getenv("NOBOARD") is not None:
del managed_processes['boardd'] del managed_processes['boardd']
if os.getenv("LEAN") is not None:
del managed_processes['uploader']
del managed_processes['loggerd']
del managed_processes['logmessaged']
del managed_processes['logcatd']
manager_init() manager_init()
+2 -2
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
import numpy as np import numpy as np
from selfdrive.car.honda.can_parser import CANParser from selfdrive.car.honda.can_parser import CANParser
from selfdrive.boardd.boardd import can_capnp_to_can_list_old from selfdrive.boardd.boardd import can_capnp_to_can_list
from cereal import car from cereal import car
@@ -39,7 +39,7 @@ class RadarInterface(object):
while 1: while 1:
for a in messaging.drain_sock(self.logcan, wait_for_one=True): for a in messaging.drain_sock(self.logcan, wait_for_one=True):
canMonoTimes.append(a.logMonoTime) canMonoTimes.append(a.logMonoTime)
can_pub_radar.extend(can_capnp_to_can_list_old(a.can, [1, 3])) can_pub_radar.extend(can_capnp_to_can_list(a.can, [1, 3]))
# only run on the 0x445 packets, used for timing # only run on the 0x445 packets, used for timing
if any(x[0] == 0x445 for x in can_pub_radar): if any(x[0] == 0x445 for x in can_pub_radar):
+1
View File
@@ -59,6 +59,7 @@ class ManeuverPlot(object):
self.a_target_min_array.append(a_target_min) self.a_target_min_array.append(a_target_min)
self.a_target_max_array.append(a_target_max) self.a_target_max_array.append(a_target_max)
def write_plot(self, path, maneuver_name): def write_plot(self, path, maneuver_name):
title = self.title or maneuver_name title = self.title or maneuver_name
# TODO: Missing plots from the old one: # TODO: Missing plots from the old one:
+2 -3
View File
@@ -14,7 +14,7 @@ import selfdrive.messaging as messaging
from selfdrive.config import CruiseButtons from selfdrive.config import CruiseButtons
from selfdrive.car.honda.hondacan import fix from selfdrive.car.honda.hondacan import fix
from selfdrive.car.honda.carstate import get_can_parser from selfdrive.car.honda.carstate import get_can_parser
from selfdrive.boardd.boardd import can_capnp_to_can_list_old, can_capnp_to_can_list, can_list_to_can_capnp from selfdrive.boardd.boardd import can_capnp_to_can_list, can_list_to_can_capnp
from selfdrive.car.honda.can_parser import CANParser from selfdrive.car.honda.can_parser import CANParser
@@ -141,8 +141,7 @@ class Plant(object):
# ******** get messages sent to the car ******** # ******** get messages sent to the car ********
can_msgs = [] can_msgs = []
for a in messaging.drain_sock(Plant.sendcan): for a in messaging.drain_sock(Plant.sendcan):
can_msgs += can_capnp_to_can_list_old(a.sendcan, [0,2]) can_msgs.extend(can_capnp_to_can_list(a.sendcan, [0,2]))
#print can_msgs
self.cp.update_can(can_msgs) self.cp.update_can(can_msgs)
# ******** get live100 messages for plotting *** # ******** get live100 messages for plotting ***
+37 -19
View File
@@ -25,6 +25,8 @@
#include "common/visionipc.h" #include "common/visionipc.h"
#include "common/modeldata.h" #include "common/modeldata.h"
#include "common/version.h"
#include "cereal/gen/c/log.capnp.h" #include "cereal/gen/c/log.capnp.h"
#include "touch.h" #include "touch.h"
@@ -95,7 +97,6 @@ typedef struct UIState {
// base ui // base ui
uint64_t last_base_update; uint64_t last_base_update;
uint64_t last_rx_bytes;
uint64_t last_tx_bytes; uint64_t last_tx_bytes;
char serial[4096]; char serial[4096];
const char* dongle_id; const char* dongle_id;
@@ -861,6 +862,11 @@ static void ui_draw_vision(UIState *s) {
} }
} }
static void ui_draw_blank(UIState *s) {
glClearColor(0.1, 0.1, 0.1, 1.0);
glClear(GL_STENCIL_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
}
static void ui_draw_base(UIState *s) { static void ui_draw_base(UIState *s) {
glClearColor(0.1, 0.1, 0.1, 1.0); glClearColor(0.1, 0.1, 0.1, 1.0);
glClear(GL_STENCIL_BUFFER_BIT | GL_COLOR_BUFFER_BIT); glClear(GL_STENCIL_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
@@ -910,8 +916,10 @@ static void ui_draw(UIState *s) {
if (s->vision_connected) { if (s->vision_connected) {
ui_draw_vision(s); ui_draw_vision(s);
} else { } else if (s->awake) {
ui_draw_base(s); ui_draw_base(s);
} else {
ui_draw_blank(s);
} }
eglSwapBuffers(s->display, s->surface); eglSwapBuffers(s->display, s->surface);
@@ -987,9 +995,20 @@ static int pending_uploads() {
int cnt = 0; int cnt = 0;
struct dirent *entry = NULL; struct dirent *entry = NULL;
while ((entry = readdir(dirp))) { while ((entry = readdir(dirp))) {
if (entry->d_name[0] != '.') { if (entry->d_name[0] == '.') continue;
char subdirn[255];
snprintf(subdirn, 255, "/sdcard/realdata/%s", entry->d_name);
DIR *subdirp = opendir(subdirn);
if (!subdirp) continue;
struct dirent *subentry = NULL;
while ((subentry = readdir(subdirp))) {
if (subentry->d_name[0] == '.') continue;
//snprintf(subdirn, 255, "/sdcard/realdata/%s/%s", entry->d_name, subentry->d_name);
cnt++; cnt++;
} }
closedir(subdirp);
} }
closedir(dirp); closedir(dirp);
return cnt; return cnt;
@@ -1206,20 +1225,19 @@ static void ui_update(UIState *s) {
char* bat_stat = read_file("/sys/class/power_supply/battery/status"); char* bat_stat = read_file("/sys/class/power_supply/battery/status");
int tx_rate = 0; int tx_rate = 0;
int rx_rate = 0; uint64_t tx_bytes_n = 0;
char* rx_bytes = read_file("/sys/class/net/rmnet_data0/statistics/rx_bytes"); char *tx_bytes;
char* tx_bytes = read_file("/sys/class/net/rmnet_data0/statistics/tx_bytes");
if (rx_bytes && tx_bytes) {
uint64_t rx_bytes_n = atoll(rx_bytes);
rx_rate = rx_bytes_n - s->last_rx_bytes;
s->last_rx_bytes = rx_bytes_n;
uint64_t tx_bytes_n = atoll(tx_bytes); // cellular bytes
tx_rate = tx_bytes_n - s->last_tx_bytes; tx_bytes = read_file("/sys/class/net/rmnet_data0/statistics/tx_bytes");
s->last_tx_bytes = tx_bytes_n; if (tx_bytes) { tx_bytes_n += atoll(tx_bytes); free(tx_bytes); }
}
if (rx_bytes) free(rx_bytes); // wifi bytes
if (tx_bytes) free(tx_bytes); tx_bytes = read_file("/sys/class/net/wlan0/statistics/tx_bytes");
if (tx_bytes) { tx_bytes_n += atoll(tx_bytes); free(tx_bytes); }
tx_rate = tx_bytes_n - s->last_tx_bytes;
s->last_tx_bytes = tx_bytes_n;
// TODO: do this properly // TODO: do this properly
system("git rev-parse --abbrev-ref HEAD > /tmp/git_branch"); system("git rev-parse --abbrev-ref HEAD > /tmp/git_branch");
@@ -1240,10 +1258,10 @@ static void ui_update(UIState *s) {
s->board_connected = !system("lsusb | grep bbaa > /dev/null"); s->board_connected = !system("lsusb | grep bbaa > /dev/null");
snprintf(s->base_text, sizeof(s->base_text), snprintf(s->base_text, sizeof(s->base_text),
"version: %s (%s)\nserial: %s\n dongle id: %s\n battery: %s %s\npending: %d\nrx %.1fkiB/s tx %.1fkiB/s\nboard: %s", "version: v%s %s (%s)\nserial: %s\n dongle id: %s\n battery: %s %s\npending: %d -> %.1f kb/s\nboard: %s",
git_commit, git_branch, openpilot_version, git_commit, git_branch,
s->serial, s->dongle_id, bat_cap ? bat_cap : "(null)", bat_stat ? bat_stat : "(null)", s->serial, s->dongle_id, bat_cap ? bat_cap : "(null)", bat_stat ? bat_stat : "(null)",
pending, rx_rate / 1024.0, tx_rate / 1024.0, s->board_connected ? "found" : "NOT FOUND"); pending, tx_rate / 1024.0, s->board_connected ? "found" : "NOT FOUND");
if (bat_cap) free(bat_cap); if (bat_cap) free(bat_cap);
if (bat_stat) free(bat_stat); if (bat_stat) free(bat_stat);
Binary file not shown.