Divided into HAL and APP