You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							71 lines
						
					
					
						
							2.8 KiB
						
					
					
				
			
		
		
	
	
							71 lines
						
					
					
						
							2.8 KiB
						
					
					
				| #!/usr/bin/env python3
 | |
| import cereal.messaging as messaging
 | |
| from openpilot.common.params import Params
 | |
| from openpilot.common.swaglog import cloudlog
 | |
| from cereal import car
 | |
| from openpilot.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', 'carState'])
 | |
|   should_record_audio = False
 | |
|   block_num = 0
 | |
|   waiting_for_release = False
 | |
|   early_stop_triggered = False
 | |
| 
 | |
|   while True:
 | |
|     sm.update()
 | |
|     should_send_bookmark = False
 | |
| 
 | |
|     # TODO: https://github.com/commaai/openpilot/issues/36015
 | |
|     if False and sm.updated['carState'] and sm['carState'].canValid:
 | |
|       for be in sm['carState'].buttonEvents:
 | |
|         if be.type == ButtonType.lkas:
 | |
|           if be.pressed:
 | |
|             if not should_record_audio:
 | |
|               if params.get_bool("RecordAudioFeedback"):  # Start recording on first press if toggle set
 | |
|                 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  # immediately send bookmark if toggle false
 | |
|                 cloudlog.info("LKAS button pressed - bookmarking")
 | |
|             elif should_record_audio and not waiting_for_release:  # Wait for release of second press to stop recording early
 | |
|               waiting_for_release = True
 | |
|           elif waiting_for_release:  # Second press released
 | |
|             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:  # Check for timeout or early stop
 | |
|         should_send_bookmark = True  # send bookmark at end of audio segment
 | |
|         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()
 | |
| 
 |