mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-08-31 13:13:44 +08:00
AHHHH
This commit is contained in:
@@ -265,6 +265,7 @@ struct StarPilotSelfdriveState @0xf416ec09499d9d19 {
|
||||
alertSize @3 :AlertSize;
|
||||
alertType @4 :Text;
|
||||
alertSound @5 :Car.CarControl.HUDControl.AudibleAlert;
|
||||
vEgo @6 :Float32;
|
||||
|
||||
enum AlertStatus {
|
||||
normal @0;
|
||||
|
||||
Binary file not shown.
@@ -926,6 +926,7 @@ class SelfdriveD:
|
||||
fpss.alertSize = self.starpilot_AM.current_alert.alert_size
|
||||
fpss.alertStatus = self.starpilot_AM.current_alert.alert_status
|
||||
fpss.alertType = self.starpilot_AM.current_alert.alert_type
|
||||
fpss.vEgo = self.sm["carState"].vEgo
|
||||
fpss.alertSound, self.forcing_stop_chime_played = filter_forcing_stop_alert_sound(
|
||||
fpss.alertType,
|
||||
self.starpilot_AM.current_alert.audible_alert,
|
||||
|
||||
@@ -2,50 +2,24 @@
|
||||
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
|
||||
FEEDBACKD_SERVICES = ('rawAudioData', 'bookmarkButton', 'visionSpeedLimitBookmark')
|
||||
|
||||
|
||||
def main():
|
||||
params = Params()
|
||||
params_memory = Params(memory=True)
|
||||
pm = messaging.PubMaster(['userBookmark', 'audioFeedback'])
|
||||
sm = messaging.SubMaster(['rawAudioData', 'bookmarkButton', 'visionSpeedLimitBookmark', 'carState'])
|
||||
sm = messaging.SubMaster(list(FEEDBACKD_SERVICES))
|
||||
should_record_audio = False
|
||||
block_num = 0
|
||||
waiting_for_release = False
|
||||
early_stop_triggered = False
|
||||
last_wheel_bookmark_counter = params_memory.get_int("WheelButtonBookmarkCounter")
|
||||
|
||||
while True:
|
||||
sm.update()
|
||||
bookmark_requests = 0
|
||||
|
||||
# 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:
|
||||
bookmark_requests += 1 # 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)
|
||||
@@ -53,11 +27,10 @@ def main():
|
||||
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
|
||||
if (block_num * SAMPLE_BUFFER / SAMPLE_RATE) >= FEEDBACK_MAX_DURATION:
|
||||
bookmark_requests += 1 # 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")
|
||||
cloudlog.info("10-second recording completed - stopping audio feedback")
|
||||
pm.send('audioFeedback', msg)
|
||||
|
||||
if sm.updated['bookmarkButton']:
|
||||
|
||||
@@ -5,7 +5,7 @@ import wave
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from cereal import car, custom, log, messaging
|
||||
from cereal import custom, log, messaging
|
||||
from openpilot.common.basedir import BASEDIR
|
||||
from openpilot.common.filter_simple import FirstOrderFilter
|
||||
from openpilot.common.params import Params
|
||||
@@ -41,6 +41,8 @@ StarPilotAudibleAlert = custom.StarPilotCarControl.HUDControl.AudibleAlert
|
||||
STARPILOT_CUSTOM_ALERT_OFFSET = 1000
|
||||
STARPILOT_CUSTOM_ALERT_START = int(StarPilotAudibleAlert.angry)
|
||||
TURN_STEERING_LIMIT_ALERT_SUFFIX = "steersaturated"
|
||||
# Keep carState out of this list; C4's onroad stack is near msgq's 15-reader limit.
|
||||
SOUNDD_SERVICES = ('selfdriveState', 'soundPressure', 'starpilotSelfdriveState', 'starpilotPlan')
|
||||
|
||||
|
||||
def starpilot_alert_key(alert):
|
||||
@@ -301,9 +303,7 @@ class Soundd:
|
||||
# sounddevice must be imported after forking processes
|
||||
import sounddevice as sd
|
||||
|
||||
sm = messaging.SubMaster(['selfdriveState', 'soundPressure', 'carState'])
|
||||
|
||||
sm = sm.extend(['starpilotSelfdriveState', 'starpilotPlan'])
|
||||
sm = messaging.SubMaster(list(SOUNDD_SERVICES))
|
||||
|
||||
while True:
|
||||
stream = None
|
||||
@@ -330,7 +330,7 @@ class Soundd:
|
||||
self.get_audible_alert(sm)
|
||||
|
||||
if self.current_alert != AudibleAlert.none:
|
||||
v_ego = max(float(getattr(sm["carState"], "vEgo", 0.0)), 0.0)
|
||||
v_ego = max(float(getattr(sm["starpilotSelfdriveState"], "vEgo", 0.0)), 0.0)
|
||||
if should_mute_turn_steering_limit_alert(
|
||||
self.current_alert_type,
|
||||
v_ego,
|
||||
|
||||
@@ -3,6 +3,11 @@ import cereal.messaging as messaging
|
||||
from cereal import car
|
||||
from openpilot.common.params import Params
|
||||
from openpilot.system.manager.process_config import managed_processes
|
||||
from openpilot.selfdrive.ui.feedback.feedbackd import FEEDBACKD_SERVICES
|
||||
|
||||
|
||||
def test_feedbackd_does_not_consume_car_state_reader():
|
||||
assert "carState" not in FEEDBACKD_SERVICES
|
||||
|
||||
|
||||
@pytest.mark.skip("tmp disabled")
|
||||
|
||||
@@ -3,6 +3,7 @@ from cereal import messaging
|
||||
from cereal.messaging import SubMaster, PubMaster
|
||||
from openpilot.selfdrive.ui.soundd import (
|
||||
SELFDRIVE_STATE_TIMEOUT,
|
||||
SOUNDD_SERVICES,
|
||||
check_selfdrive_timeout_alert,
|
||||
is_turn_steering_limit_alert,
|
||||
should_mute_turn_steering_limit_alert,
|
||||
@@ -14,6 +15,10 @@ AudibleAlert = log.SelfdriveState.AudibleAlert
|
||||
|
||||
|
||||
class TestSoundd:
|
||||
def test_does_not_consume_car_state_reader(self):
|
||||
assert "carState" not in SOUNDD_SERVICES
|
||||
assert "starpilotSelfdriveState" in SOUNDD_SERVICES
|
||||
|
||||
def test_turn_steering_limit_alert_detection(self):
|
||||
assert is_turn_steering_limit_alert("steerSaturated/warning")
|
||||
assert is_turn_steering_limit_alert("goatSteerSaturated/warning")
|
||||
|
||||
Reference in New Issue
Block a user