#!/usr/bin/env python3 import iqpilot.cereal.messaging as messaging from iqpilot.common.params import Params from iqpilot.common.swaglog import cloudlog from iqpilot.cereal import car from iqpilot.system.micd import SAMPLE_RATE, SAMPLE_BUFFER FEEDBACK_MAX_DURATION = 10.0 ButtonType = car.CarState.ButtonEvent.Type def main(): params = Params() pm = messaging.PubMaster(['userBookmark', 'audioFeedback']) sm = messaging.SubMaster(['rawAudioData', 'bookmarkButton']) should_record_audio = False block_num = 0 waiting_for_release = False early_stop_triggered = False while True: sm.update() should_send_bookmark = False if False and sm.updated['carState'] and sm['carState'].canValid and not sm['iqState'].aol.available: for be in sm['carState'].buttonEvents: if be.type == ButtonType.lkas: if be.pressed: if not should_record_audio: if params.get_bool("RecordAudioFeedback"): should_record_audio = True block_num = 0 waiting_for_release = False early_stop_triggered = False cloudlog.info("LKAS button pressed - starting 10-second audio feedback") else: should_send_bookmark = True cloudlog.info("LKAS button pressed - bookmarking") elif should_record_audio and not waiting_for_release: waiting_for_release = True elif waiting_for_release: waiting_for_release = False early_stop_triggered = True cloudlog.info("LKAS button released - ending recording early") if should_record_audio and sm.updated['rawAudioData']: raw_audio = sm['rawAudioData'] msg = messaging.new_message('audioFeedback', valid=True) msg.audioFeedback.audio.data = raw_audio.data msg.audioFeedback.audio.sampleRate = raw_audio.sampleRate msg.audioFeedback.blockNum = block_num block_num += 1 if (block_num * SAMPLE_BUFFER / SAMPLE_RATE) >= FEEDBACK_MAX_DURATION or early_stop_triggered: should_send_bookmark = True should_record_audio = False early_stop_triggered = False cloudlog.info("10-second recording completed or second button press - stopping audio feedback") pm.send('audioFeedback', msg) if sm.updated['bookmarkButton']: cloudlog.info("Bookmark button pressed!") should_send_bookmark = True if should_send_bookmark: msg = messaging.new_message('userBookmark', valid=True) pm.send('userBookmark', msg) if __name__ == '__main__': main()