@@ -85,45 +85,39 @@ void *safety_setter_thread(void *s) {
8585 libusb_control_transfer (dev_handle, 0x40 , 0xdc , (uint16_t )(cereal::CarParams::SafetyModel::ELM327), 0 , NULL , 0 , TIMEOUT);
8686 pthread_mutex_unlock (&usb_lock);
8787
88- char *value_vin;
89- size_t value_vin_sz = 0 ;
90-
9188 // switch to SILENT when CarVin param is read
9289 while (1 ) {
9390 if (do_exit) return NULL ;
94- const int result = read_db_value (" CarVin" , &value_vin, &value_vin_sz );
95- if (value_vin_sz > 0 ) {
91+ std::vector< char > value_vin = read_db_bytes (" CarVin" );
92+ if (value_vin. size () > 0 ) {
9693 // sanity check VIN format
97- assert (value_vin_sz == 17 );
94+ assert (value_vin.size () == 17 );
95+ std::string str_vin (value_vin.begin (), value_vin.end ());
96+ LOGW (" got CarVin %s" , str_vin.c_str ());
9897 break ;
9998 }
10099 usleep (100 *1000 );
101100 }
102- LOGW (" got CarVin %s" , value_vin);
103- free (value_vin);
104101
105102 // VIN query done, stop listening to OBDII
106103 pthread_mutex_lock (&usb_lock);
107104 libusb_control_transfer (dev_handle, 0x40 , 0xdc , (uint16_t )(cereal::CarParams::SafetyModel::NO_OUTPUT), 0 , NULL , 0 , TIMEOUT);
108105 pthread_mutex_unlock (&usb_lock);
109106
110- char *value;
111- size_t value_sz = 0 ;
112-
107+ std::vector<char > params;
113108 LOGW (" waiting for params to set safety model" );
114109 while (1 ) {
115110 if (do_exit) return NULL ;
116111
117- const int result = read_db_value (" CarParams" , &value, &value_sz );
118- if (value_sz > 0 ) break ;
112+ params = read_db_bytes (" CarParams" );
113+ if (params. size () > 0 ) break ;
119114 usleep (100 *1000 );
120115 }
121- LOGW (" got %d bytes CarParams" , value_sz );
116+ LOGW (" got %d bytes CarParams" , params. size () );
122117
123118 // format for board, make copy due to alignment issues, will be freed on out of scope
124- auto amsg = kj::heapArray<capnp::word>((value_sz / sizeof (capnp::word)) + 1 );
125- memcpy (amsg.begin (), value, value_sz);
126- free (value);
119+ auto amsg = kj::heapArray<capnp::word>((params.size () / sizeof (capnp::word)) + 1 );
120+ memcpy (amsg.begin (), params.data (), params.size ());
127121
128122 capnp::FlatArrayMessageReader cmsg (amsg);
129123 cereal::CarParams::Reader car_params = cmsg.getRoot <cereal::CarParams>();
@@ -407,18 +401,15 @@ void can_health(PubMaster &pm) {
407401 bool cdp_mode = health.usb_power_mode == (uint8_t )(cereal::HealthData::UsbPowerMode::CDP);
408402 bool no_ignition_exp = no_ignition_cnt > NO_IGNITION_CNT_MAX;
409403 if ((no_ignition_exp || (voltage_f < VBATT_PAUSE_CHARGING)) && cdp_mode && !ignition) {
410- char *disable_power_down = NULL ;
411- size_t disable_power_down_sz = 0 ;
412- const int result = read_db_value (" DisablePowerDown" , &disable_power_down, &disable_power_down_sz);
413- if (disable_power_down_sz != 1 || disable_power_down[0 ] != ' 1' ) {
404+ std::vector<char > disable_power_down = read_db_bytes (" DisablePowerDown" );
405+ if (disable_power_down.size () != 1 || disable_power_down[0 ] != ' 1' ) {
414406 printf (" TURN OFF CHARGING!\n " );
415407 pthread_mutex_lock (&usb_lock);
416408 libusb_control_transfer (dev_handle, 0xc0 , 0xe6 , (uint16_t )(cereal::HealthData::UsbPowerMode::CLIENT), 0 , NULL , 0 , TIMEOUT);
417409 pthread_mutex_unlock (&usb_lock);
418410 printf (" POWER DOWN DEVICE\n " );
419411 system (" service call power 17 i32 0 i32 1" );
420412 }
421- if (disable_power_down) free (disable_power_down);
422413 }
423414 if (!no_ignition_exp && (voltage_f > VBATT_START_CHARGING) && !cdp_mode) {
424415 printf (" TURN ON CHARGING!\n " );
0 commit comments