#!/usr/bin/env python3 # flake8: noqa # pylint: skip-file # type: ignore import time from cereal import car import cereal.messaging as messaging from selfdrive.car.honda.interface import CarInterface from selfdrive.controls.lib.events import ET, EVENTS, Events from selfdrive.controls.lib.alertmanager import AlertManager EventName = car.CarEvent.EventName def cycle_alerts(duration=2000, is_metric=False): alerts = list(EVENTS.keys()) print(alerts) #alerts = [EventName.preDriverDistracted, EventName.promptDriverDistracted, EventName.driverDistracted] alerts = [EventName.preLaneChangeLeft, EventName.preLaneChangeRight] CP = CarInterface.get_params("HONDA CIVIC 2016") sm = messaging.SubMaster(['deviceState', 'pandaState', 'roadCameraState', 'modelV2', 'liveCalibration', 'driverMonitoringState', 'longitudinalPlan', 'lateralPlan', 'liveLocationKalman']) pm = messaging.PubMaster(['controlsState', 'pandaState', 'deviceState']) events = Events() AM = AlertManager() frame = 0 idx, last_alert_millis = 0, 0 while 1: if frame % duration == 0: idx = (idx + 1) % len(alerts) events.clear() events.add(alerts[idx]) current_alert_types = [ET.PERMANENT, ET.USER_DISABLE, ET.IMMEDIATE_DISABLE, ET.SOFT_DISABLE, ET.PRE_ENABLE, ET.NO_ENTRY, ET.ENABLE, ET.WARNING] a = events.create_alerts(current_alert_types, [CP, sm, is_metric]) AM.add_many(frame, a) AM.process_alerts(frame) dat = messaging.new_message() dat.init('controlsState') dat.controlsState.alertText1 = AM.alert_text_1 dat.controlsState.alertText2 = AM.alert_text_2 dat.controlsState.alertSize = AM.alert_size dat.controlsState.alertStatus = AM.alert_status dat.controlsState.alertBlinkingRate = AM.alert_rate dat.controlsState.alertType = AM.alert_type dat.controlsState.alertSound = AM.audible_alert pm.send('controlsState', dat) dat = messaging.new_message() dat.init('deviceState') dat.deviceState.started = True pm.send('deviceState', dat) dat = messaging.new_message() dat.init('pandaState') dat.pandaState.ignitionLine = True pm.send('pandaState', dat) time.sleep(0.01) if __name__ == '__main__': cycle_alerts()