# Customize Your Own HMI

HMIWorker is a standalone singleton which processes HMI actions. If you want to
have a customized HMI instead the one integrated with Apollo Dreamview, just
develope a frontend and send operations to the backend which delegates to
HMIWorker.

## HMI Config

See modules/dreamview/proto/hmi_config.proto. It defines all supported modes,
modules, hardware and tools.

## HMI Worker

According to the HMIConfig, HMI Worker could trigger actions like:
- Change mode, map, vehicle and driving mode.
- Register event handler for changing mode, map and vehicle.
- Start, stop or execute other registered commands for modules.
- Execute registered tools.
- Submit DriveEvent which will be recorded as a ROS message.
- Get current HMIConfig and HMIStatus, which could be used for UI update.

## Vehicle Manager

VehicleManager is the one to actually config everything when changing vehicles.
The major thing is to copy all vehicle-wised parameter files to right place. The
source and destination mappings are defined by
modules/dreamview/conf/vehicle_data.pb.txt.