Long Distance EV Routing
The TomTom Digital Cockpit SDK is not available for general use.
Please contact us for more information.
TomTom’s Long-Distance Electrical Vehicle Routing (LDEVR) algorithm uses the vehicle characteristics together with map data and live data services, such as TomTom Traffic, to reliably calculate the range and to select the most convenient charging stations along the way.
For the algorithm to work as accurately as possible, it needs to access data from the vehicle. Some data is more dynamic and can change while driving, per session or over the lifetime of the vehicle. Other data is typically static, such as vehicle dimensions. User behavior can also change the data, such as controlling HVAC or changing the drive mode from normal to sport.
To provide the data necessary for routing, the following two interfaces need to be implemented:
The Stock implementation of these interfaces in the TTDC platform provide static data that are read from the vehicle profile set in the The Debug Menu, which contains a number of pre-defined vehicle profiles. Optionally, some of the values can also dynamically be read from the Android Automotive Platform VHAL layer, set by the VehiclePropertyIds:
batteryChargeLevel
is composed ofINFO_EV_BATTERY_CAPACITY
andEV_BATTERY_LEVEL
isChargingConnectorConnected
is set byEV_CHARGE_PORT_CONNECTED
remainingRange
is set byRANGE_REMAINING
Integrating Long Distance EV Routing in the vehicle
As the Stock implementation only provides debug values, it needs to be replaced by a custom one that can supply the data needed.
For more details on how to create an IVI service, see the Create an IVI Service page.
Depending on the OEM's implementation of the Android Automotive Platform and the hardware supplier,
some of this data can be available in the
VHAL. For example, battery level,
battery capacity, and remaining range.
Other data structures are more complex. The charging connectors, for example, are stored in a
nested Set<>
, and the charging curve is a data structure in a Set<>
. Therefore, this data is
unsuitable to be written/read through the Car API which only supports List<>
and single values.
This is better retrieved from other data providers.
In the VehicleSpecificationService
the engineType
needs to be set to
VehicleEngineType.ELECTRIC
to enable the EV features. The exteriorDimensions
and the weight
need to be set to the vehicle's physical dimensions and weight respectively.
The VehicleElectricEngineService
interface requires the battery level and
capacity to be set in the batteryChargeLevel
property.
Notably, most of the data can change while driving, for example the consumptionModel
will change
with the driving mode that the car is set to, for example eco drive, or sport drive. Note that
the charging connectors that the car can utilize are necessary to be able to find suitable charging
stations along the route. This data also needs to match the connectors available for the country
map currently in use. The attributes required for this service are further documented in the API
documentation for the interface: VehicleElectricEngineService
.
Replacing the Stock implementation
When the custom service hosts have been implemented, the stock variants need to be replaced in the Gradle files:
build.gradle.kts:
1import com.tomtom.ivi.platform.gradle.api.defaults.config.vehicleSpecificationServiceHost2import com.tomtom.ivi.platform.gradle.api.defaults.config.vehicleElectricEngineServiceHost34ivi {5 application {6 enabled = true7 services {8 removeHost(vehicleSpecificationServiceHost)9 removeHost(vehicleElectricEngineServiceHost)10 // Add your own service hosts11 // ...1213 addHost( /* your own vehicle specification host */ )14 addHost( /* your own vehicle electric engine host */ )1516 // etc...