Rename
This commit is contained in:
+14
-14
@@ -1,4 +1,4 @@
|
||||
name: Compile FrogPilot
|
||||
name: Compile StarPilot
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
@@ -13,18 +13,18 @@ on:
|
||||
type: string
|
||||
default: ""
|
||||
required: false
|
||||
publish_frogpilot:
|
||||
description: "Push to FrogPilot"
|
||||
publish_starpilot:
|
||||
description: "Push to StarPilot"
|
||||
type: boolean
|
||||
default: false
|
||||
required: false
|
||||
publish_staging:
|
||||
description: "Push to FrogPilot-Staging"
|
||||
description: "Push to StarPilot-Staging"
|
||||
type: boolean
|
||||
default: false
|
||||
required: false
|
||||
publish_testing:
|
||||
description: "Push to FrogPilot-Testing"
|
||||
description: "Push to StarPilot-Testing"
|
||||
type: boolean
|
||||
default: false
|
||||
required: false
|
||||
@@ -88,7 +88,7 @@ jobs:
|
||||
with:
|
||||
ref: ${{ needs.get_branch.outputs.branch }}
|
||||
sparse-checkout: |
|
||||
frogpilot/ui/
|
||||
starpilot/ui/
|
||||
selfdrive/controls/lib/alerts_offroad.json
|
||||
selfdrive/ui/
|
||||
selfdrive/ui/translations/
|
||||
@@ -151,7 +151,7 @@ jobs:
|
||||
git config http.postBuffer 104857600
|
||||
git config user.name "$GIT_NAME"
|
||||
git config user.email "$GIT_EMAIL"
|
||||
git remote set-url origin "https://${{ secrets.PERSONAL_ACCESS_TOKEN }}@github.com/FrogAi/FrogPilot.git"
|
||||
git remote set-url origin "https://${{ secrets.PERSONAL_ACCESS_TOKEN }}@github.com/FrogAi/StarPilot.git"
|
||||
|
||||
- name: Sync Translation Updates
|
||||
if: inputs.update_translations
|
||||
@@ -181,7 +181,7 @@ jobs:
|
||||
find .github -mindepth 1 -maxdepth 1 ! -name 'workflows' -exec rm -rf {} +
|
||||
find .github/workflows -mindepth 1 ! \( \
|
||||
-type f \( \
|
||||
-name 'compile_frogpilot.yaml' -o \
|
||||
-name 'compile_starpilot.yaml' -o \
|
||||
-name 'review_pull_request.yaml' -o \
|
||||
-name 'schedule_update.yaml' -o \
|
||||
-name 'update_pr_branch.yaml' -o \
|
||||
@@ -214,24 +214,24 @@ jobs:
|
||||
if: inputs.publish_staging
|
||||
continue-on-error: true
|
||||
run: |
|
||||
curl -fLsS https://raw.githubusercontent.com/FrogAi/FrogPilot/FrogPilot-Staging/.github/update_date -o .github/update_date || echo "No update_date found, skipping..."
|
||||
curl -fLsS https://raw.githubusercontent.com/FrogAi/StarPilot/StarPilot-Staging/.github/update_date -o .github/update_date || echo "No update_date found, skipping..."
|
||||
|
||||
- name: Commit and Push Build
|
||||
run: |
|
||||
git add -f .
|
||||
git commit -m "Compile FrogPilot"
|
||||
git commit -m "Compile StarPilot"
|
||||
git push --force origin HEAD
|
||||
|
||||
if [ "${{ inputs.publish_frogpilot }}" = "true" ]; then
|
||||
git push --force origin HEAD:FrogPilot
|
||||
if [ "${{ inputs.publish_starpilot }}" = "true" ]; then
|
||||
git push --force origin HEAD:StarPilot
|
||||
fi
|
||||
|
||||
if [ "${{ inputs.publish_staging }}" = "true" ]; then
|
||||
git push --force origin HEAD:FrogPilot-Staging
|
||||
git push --force origin HEAD:StarPilot-Staging
|
||||
fi
|
||||
|
||||
if [ "${{ inputs.publish_testing }}" = "true" ]; then
|
||||
git push --force origin HEAD:FrogPilot-Testing
|
||||
git push --force origin HEAD:StarPilot-Testing
|
||||
fi
|
||||
|
||||
if [ -n "$CUSTOM_BRANCH" ]; then
|
||||
@@ -34,5 +34,5 @@ jobs:
|
||||
echo "Valid target branch."
|
||||
|
||||
gh pr comment "$PR_NUMBER" --repo "$REPO" \
|
||||
--body "Thank you for your PR! If you're not already in the FrogPilot Discord, [feel free to join](https://discord.FrogPilot.com) and let me know you've opened a PR!"
|
||||
--body "Thank you for your PR! If you're not already in the StarPilot Discord, [feel free to join](https://discord.StarPilot.com) and let me know you've opened a PR!"
|
||||
fi
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
name: Schedule FrogPilot Update
|
||||
name: Schedule StarPilot Update
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
scheduled_date:
|
||||
description: "Enter the date to update the \"FrogPilot\" branch (YYYY-MM-DD)"
|
||||
description: "Enter the date to update the \"StarPilot\" branch (YYYY-MM-DD)"
|
||||
required: true
|
||||
|
||||
env:
|
||||
GIT_EMAIL: "91348155+FrogAi@users.noreply.github.com"
|
||||
GIT_NAME: "James"
|
||||
TARGET_BRANCH: "FrogPilot-Staging"
|
||||
TARGET_BRANCH: "StarPilot-Staging"
|
||||
UPDATE_FILE_PATH: ".github/update_date"
|
||||
|
||||
jobs:
|
||||
|
||||
@@ -4,13 +4,13 @@ run-name: Update MAKE-PRS-HERE
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- FrogPilot-Testing
|
||||
- StarPilot-Testing
|
||||
|
||||
env:
|
||||
GIT_EMAIL: "91348155+FrogAi@users.noreply.github.com"
|
||||
GIT_NAME: "James"
|
||||
GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
|
||||
SOURCE_BRANCH: FrogPilot-Testing
|
||||
SOURCE_BRANCH: StarPilot-Testing
|
||||
TARGET_BRANCH: MAKE-PRS-HERE
|
||||
TZ: America/Phoenix
|
||||
|
||||
@@ -33,13 +33,13 @@ jobs:
|
||||
git config --global user.name "$GIT_NAME"
|
||||
git config --global user.email "$GIT_EMAIL"
|
||||
|
||||
- name: Revert "Compile FrogPilot"
|
||||
- name: Revert "Compile StarPilot"
|
||||
id: prepare_source
|
||||
run: |
|
||||
COMPILE_COMMIT=$(git rev-list HEAD -n 1 --grep="Compile FrogPilot" || true)
|
||||
COMPILE_COMMIT=$(git rev-list HEAD -n 1 --grep="Compile StarPilot" || true)
|
||||
|
||||
if [ -n "$COMPILE_COMMIT" ]; then
|
||||
echo "Found 'Compile FrogPilot' at $COMPILE_COMMIT. Reverting..."
|
||||
echo "Found 'Compile StarPilot' at $COMPILE_COMMIT. Reverting..."
|
||||
git revert --no-edit "$COMPILE_COMMIT"
|
||||
else
|
||||
echo "Compile commit not found. Proceeding with current source state."
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
name: Update FrogPilot Branch
|
||||
name: Update StarPilot Branch
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 18 * * 6"
|
||||
|
||||
env:
|
||||
BRANCH_FROGPILOT: FrogPilot
|
||||
BRANCH_PREVIOUS: FrogPilot-Previous
|
||||
BRANCH_STAGING: FrogPilot-Staging
|
||||
BRANCH_STARPILOT: StarPilot
|
||||
BRANCH_PREVIOUS: StarPilot-Previous
|
||||
BRANCH_STAGING: StarPilot-Staging
|
||||
GIT_EMAIL: "91348155+FrogAi@users.noreply.github.com"
|
||||
GIT_NAME: "James"
|
||||
GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
|
||||
@@ -102,6 +102,6 @@ jobs:
|
||||
- name: Push and Sync Branches
|
||||
run: |
|
||||
git push origin "$BRANCH_STAGING" --force
|
||||
git fetch origin "$BRANCH_FROGPILOT:$BRANCH_FROGPILOT"
|
||||
git push origin "$BRANCH_FROGPILOT:$BRANCH_PREVIOUS" --force
|
||||
git push origin "$BRANCH_STAGING:$BRANCH_FROGPILOT" --force
|
||||
git fetch origin "$BRANCH_STARPILOT:$BRANCH_STARPILOT"
|
||||
git push origin "$BRANCH_STARPILOT:$BRANCH_PREVIOUS" --force
|
||||
git push origin "$BRANCH_STAGING:$BRANCH_STARPILOT" --force
|
||||
|
||||
@@ -15,8 +15,8 @@ on:
|
||||
env:
|
||||
GIT_EMAIL: "91348155+FrogAi@users.noreply.github.com"
|
||||
GIT_NAME: "James"
|
||||
GITLAB_REPO_DIR: "FrogPilot-Resources"
|
||||
GITLAB_URL: "gitlab.com/FrogAi/FrogPilot-Resources.git"
|
||||
GITLAB_REPO_DIR: "StarPilot-Resources"
|
||||
GITLAB_URL: "gitlab.com/FrogAi/StarPilot-Resources.git"
|
||||
OPENPILOT_DIR: "/data/openpilot"
|
||||
|
||||
jobs:
|
||||
@@ -26,7 +26,7 @@ jobs:
|
||||
- name: Get Version
|
||||
id: get_version
|
||||
run: |
|
||||
VERSION=$(grep -oP '^VERSION\s*=\s*"\K[^"]+' "$OPENPILOT_DIR/frogpilot/assets/model_manager.py")
|
||||
VERSION=$(grep -oP '^VERSION\s*=\s*"\K[^"]+' "$OPENPILOT_DIR/starpilot/assets/model_manager.py")
|
||||
echo "VERSION=$VERSION"
|
||||
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
||||
|
||||
@@ -35,7 +35,7 @@ jobs:
|
||||
env:
|
||||
GITLAB_TOKEN: ${{ secrets.GITLAB_TOKEN }}
|
||||
run: |
|
||||
WORK_DIR="$RUNNER_TEMP/frogpilot_tinygrad"
|
||||
WORK_DIR="$RUNNER_TEMP/starpilot_tinygrad"
|
||||
rm -rf "$WORK_DIR" && mkdir -p "$WORK_DIR"
|
||||
echo "work_dir=$WORK_DIR" >> "$GITHUB_OUTPUT"
|
||||
|
||||
|
||||
@@ -17,8 +17,8 @@ Openpilot provides
|
||||
StarPilot adds support for many GM vehicles along with improved tuning,
|
||||
especially for radar-less (camera only) vehicles.
|
||||
|
||||
StarPilot is built off of [FrogPilot](https://github.com/FrogAi/FrogPilot)
|
||||
and supports the major features FrogPilot offers.
|
||||
StarPilot is built off of [StarPilot](https://github.com/FrogAi/StarPilot)
|
||||
and supports the major features StarPilot offers.
|
||||
|
||||
StarPilot has a vibrant, welcoming community [discord](https://firestar.link/discord).
|
||||
Stop by to chat or ask questions!
|
||||
@@ -48,7 +48,7 @@ Download models, change settings, update software, visualize live model outputs
|
||||
* High quality dashcam recordings*
|
||||
* Enhanced tuning for CEM (dynamic experimental mode switching)
|
||||
|
||||
\* [Inherited from FrogPilot](https://github.com/FrogAi/FrogPilot#openpilot-vs-frogpilot)
|
||||
\* [Inherited from StarPilot](https://github.com/FrogAi/StarPilot#openpilot-vs-starpilot)
|
||||
|
||||
## GM-only Features
|
||||
|
||||
|
||||
+6
-6
@@ -637,7 +637,7 @@ Legend: ✅ = Full | 🟡 = Structure/stub | 🔴 = Not started
|
||||
#### Completed (March 17, 2026)
|
||||
- **Created `StarPilotState` singleton** (`selfdrive/ui/lib/starpilot_state.py`) with:
|
||||
- `StarPilotCarState` dataclass with all car type, capability, and value fields
|
||||
- Reads `CarParamsPersistent`, `FrogPilotCarParamsPersistent`, `LiveTorqueParameters`, `FrogPilotToggles` from Params
|
||||
- Reads `CarParamsPersistent`, `StarPilotCarParamsPersistent`, `LiveTorqueParameters`, `StarPilotToggles` from Params
|
||||
- Throttled updates (2.0s interval) to avoid slowing UI
|
||||
- PC/desktop fallback mode with configurable car make/model
|
||||
- Global import: `from openpilot.selfdrive.ui.lib.starpilot_state import starpilot_state`
|
||||
@@ -1270,7 +1270,7 @@ emit closeSubSubSubPanel(); // Back from Level 4 → Level 3
|
||||
|
||||
**Longitudinal Panel Structure** (17 sub-panels, ~80 controls):
|
||||
```
|
||||
FROGPILOT LONGITUDINAL LAYOUT (top level - MANAGE buttons)
|
||||
STARPILOT LONGITUDINAL LAYOUT (top level - MANAGE buttons)
|
||||
├── Advanced Longitudinal Tuning → StarPilotAdvancedLongLayout
|
||||
│ └── 8 value controls
|
||||
├── Conditional Experimental Mode → StarPilotConditionalExpLayout
|
||||
@@ -1741,7 +1741,7 @@ KM_TO_MILE = 0.621371
|
||||
| Rainbow Path | Toggle | | |
|
||||
| Random Events | Toggle | | |
|
||||
| Random Themes | TOGGLE+TOGGLE | - | Includes "Include Holiday Themes" |
|
||||
| Startup Alert | BUTTON | STOCK, FROGPILOT, CUSTOM, CLEAR | |
|
||||
| Startup Alert | BUTTON | STOCK, STARPILOT, CUSTOM, CLEAR | |
|
||||
| Download Status | LABEL | - | Shows download progress |
|
||||
|
||||
**Custom Themes Sub-Panel** (7 theme types, each with DELETE/DOWNLOAD/SELECT):
|
||||
@@ -1973,7 +1973,7 @@ Acura, Audi, Buick, Cadillac, Chevrolet, Chrysler, CUPRA, Dodge, Ford, Genesis,
|
||||
| Debug Mode | Toggle | |
|
||||
| Flash Panda | BUTTON | FLASH |
|
||||
| Force Drive State | BUTTONS | OFFROAD / ONROAD / OFF |
|
||||
| Pair to "The Pond" | BUTTON | PAIR/UNPAIR |
|
||||
| Galaxy | BUTTON | PAIR/UNPAIR |
|
||||
| Report a Bug | BUTTON | REPORT |
|
||||
| Reset Toggles to Default | BUTTON | RESET |
|
||||
| Reset Toggles to Stock | BUTTON | RESET |
|
||||
@@ -2613,9 +2613,9 @@ ensures that if the car state changes (e.g. from a CarParams update), the UI ref
|
||||
|
||||
**Data sources parsed:**
|
||||
1. `CarParamsPersistent` — Car fingerprint, lateral tuning, capabilities
|
||||
2. `FrogPilotCarParamsPersistent` — canUsePedal, canUseSDSU, openpilotLongitudinalControlDisabled
|
||||
2. `StarPilotCarParamsPersistent` — canUsePedal, canUseSDSU, openpilotLongitudinalControlDisabled
|
||||
3. `LiveTorqueParameters` — hasAutoTune (useParams)
|
||||
4. `FrogPilotToggles` — JSON blob with supplementary toggles
|
||||
4. `StarPilotToggles` — JSON blob with supplementary toggles
|
||||
|
||||
**Update throttling:** 2.0s minimum interval between heavy param parsing
|
||||
|
||||
|
||||
+12
-12
@@ -12,7 +12,7 @@ using Car = import "car.capnp";
|
||||
# DO rename the structs
|
||||
# DON'T change the identifier (e.g. @0x81c2f05a394cf4af)
|
||||
|
||||
struct FrogPilotCarControl @0x81c2f05a394cf4af {
|
||||
struct StarPilotCarControl @0x81c2f05a394cf4af {
|
||||
hudControl @0 :HUDControl;
|
||||
|
||||
struct HUDControl {
|
||||
@@ -51,7 +51,7 @@ struct FrogPilotCarControl @0x81c2f05a394cf4af {
|
||||
}
|
||||
}
|
||||
|
||||
struct FrogPilotCarParams @0xaedffd8f31e7b55d {
|
||||
struct StarPilotCarParams @0xaedffd8f31e7b55d {
|
||||
alternativeExperience @0 :Int16;
|
||||
canUsePedal @1 :Bool;
|
||||
canUseSDSU @2 :Bool;
|
||||
@@ -65,7 +65,7 @@ struct FrogPilotCarParams @0xaedffd8f31e7b55d {
|
||||
}
|
||||
}
|
||||
|
||||
struct FrogPilotCarState @0xf35cc4560bbf6ec2 {
|
||||
struct StarPilotCarState @0xf35cc4560bbf6ec2 {
|
||||
accelPressed @0 :Bool;
|
||||
alwaysOnLateralEnabled @1 :Bool;
|
||||
brakeLights @2 :Bool;
|
||||
@@ -84,12 +84,12 @@ struct FrogPilotCarState @0xf35cc4560bbf6ec2 {
|
||||
gasStack @15 :Bool; # Compatibility with older StarPilot payloads
|
||||
}
|
||||
|
||||
struct FrogPilotDeviceState @0xda96579883444c35 {
|
||||
struct StarPilotDeviceState @0xda96579883444c35 {
|
||||
freeSpace @0 :Int16;
|
||||
usedSpace @1 :Int16;
|
||||
}
|
||||
|
||||
struct FrogPilotModelDataV2 @0x80ae746ee2596b11 {
|
||||
struct StarPilotModelDataV2 @0x80ae746ee2596b11 {
|
||||
turnDirection @0 :TurnDirection;
|
||||
|
||||
enum TurnDirection {
|
||||
@@ -99,7 +99,7 @@ struct FrogPilotModelDataV2 @0x80ae746ee2596b11 {
|
||||
}
|
||||
}
|
||||
|
||||
struct FrogPilotOnroadEvent @0xa5cd762cd951a455 {
|
||||
struct StarPilotOnroadEvent @0xa5cd762cd951a455 {
|
||||
name @0 :EventName;
|
||||
|
||||
enable @1 :Bool;
|
||||
@@ -148,7 +148,7 @@ struct FrogPilotOnroadEvent @0xa5cd762cd951a455 {
|
||||
}
|
||||
}
|
||||
|
||||
struct FrogPilotPlan @0xf98d843bfd7004a3 {
|
||||
struct StarPilotPlan @0xf98d843bfd7004a3 {
|
||||
accelerationJerk @0 :Float32;
|
||||
cscControllingSpeed @1 :Bool;
|
||||
cscSpeed @2 :Float32;
|
||||
@@ -159,8 +159,8 @@ struct FrogPilotPlan @0xf98d843bfd7004a3 {
|
||||
experimentalMode @7 :Bool;
|
||||
forcingStop @8 :Bool;
|
||||
forcingStopLength @9 :Float32;
|
||||
frogpilotEvents @10 :List(FrogPilotOnroadEvent);
|
||||
frogpilotToggles @11 :Text;
|
||||
starpilotEvents @10 :List(StarPilotOnroadEvent);
|
||||
starpilotToggles @11 :Text;
|
||||
increasedStoppedDistance @12 :Float32;
|
||||
lateralCheck @13 :Bool;
|
||||
laneWidthLeft @14 :Float32;
|
||||
@@ -188,7 +188,7 @@ struct FrogPilotPlan @0xf98d843bfd7004a3 {
|
||||
trackingLead @36 :Bool;
|
||||
}
|
||||
|
||||
struct FrogPilotRadarState @0xb86e6369214c01c8 {
|
||||
struct StarPilotRadarState @0xb86e6369214c01c8 {
|
||||
leadLeft @0 :LeadData;
|
||||
leadRight @1 :LeadData;
|
||||
|
||||
@@ -213,7 +213,7 @@ struct FrogPilotRadarState @0xb86e6369214c01c8 {
|
||||
}
|
||||
}
|
||||
|
||||
struct FrogPilotSelfdriveState @0xf416ec09499d9d19 {
|
||||
struct StarPilotSelfdriveState @0xf416ec09499d9d19 {
|
||||
alertText1 @0 :Text;
|
||||
alertText2 @1 :Text;
|
||||
alertStatus @2 :AlertStatus;
|
||||
@@ -225,7 +225,7 @@ struct FrogPilotSelfdriveState @0xf416ec09499d9d19 {
|
||||
normal @0;
|
||||
userPrompt @1;
|
||||
critical @2;
|
||||
frogpilot @3;
|
||||
starpilot @3;
|
||||
}
|
||||
|
||||
enum AlertSize {
|
||||
|
||||
Binary file not shown.
Binary file not shown.
+9
-9
@@ -2625,15 +2625,15 @@ struct Event {
|
||||
# DO change the name of the field and struct
|
||||
# DON'T change the ID (e.g. @107)
|
||||
# DON'T change which struct it points to
|
||||
frogpilotCarControl @107 :Custom.FrogPilotCarControl;
|
||||
frogpilotCarParams @108 :Custom.FrogPilotCarParams;
|
||||
frogpilotCarState @109 :Custom.FrogPilotCarState;
|
||||
frogpilotDeviceState @110 :Custom.FrogPilotDeviceState;
|
||||
frogpilotModelV2 @111 :Custom.FrogPilotModelDataV2;
|
||||
frogpilotOnroadEvents @112 :List(Custom.FrogPilotOnroadEvent);
|
||||
frogpilotPlan @113 :Custom.FrogPilotPlan;
|
||||
frogpilotRadarState @114 :Custom.FrogPilotRadarState;
|
||||
frogpilotSelfdriveState @115 :Custom.FrogPilotSelfdriveState;
|
||||
starpilotCarControl @107 :Custom.StarPilotCarControl;
|
||||
starpilotCarParams @108 :Custom.StarPilotCarParams;
|
||||
starpilotCarState @109 :Custom.StarPilotCarState;
|
||||
starpilotDeviceState @110 :Custom.StarPilotDeviceState;
|
||||
starpilotModelV2 @111 :Custom.StarPilotModelDataV2;
|
||||
starpilotOnroadEvents @112 :List(Custom.StarPilotOnroadEvent);
|
||||
starpilotPlan @113 :Custom.StarPilotPlan;
|
||||
starpilotRadarState @114 :Custom.StarPilotRadarState;
|
||||
starpilotSelfdriveState @115 :Custom.StarPilotSelfdriveState;
|
||||
customReserved9 @116 :Custom.CustomReserved9;
|
||||
customReserved10 @136 :Custom.CustomReserved10;
|
||||
customReserved11 @137 :Custom.CustomReserved11;
|
||||
|
||||
@@ -197,7 +197,7 @@ class SubMaster:
|
||||
self.data[s] = getattr(data.as_reader(), s)
|
||||
self.freq_tracker[s] = FrequencyTracker(SERVICE_LIST[s].frequency, self.update_freq, s == poll)
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
self.addr = addr
|
||||
self.poll = poll
|
||||
|
||||
@@ -252,7 +252,7 @@ class SubMaster:
|
||||
def all_checks(self, service_list: Optional[List[str]] = None) -> bool:
|
||||
return self.all_alive(service_list) and self.all_freq_ok(service_list) and self.all_valid(service_list)
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
def extend(self, new_services: List[str]):
|
||||
return SubMaster(
|
||||
self.services + new_services,
|
||||
@@ -286,7 +286,7 @@ class PubMaster:
|
||||
def all_readers_updated(self, s: str) -> bool:
|
||||
return self.sock[s].all_readers_updated() # type: ignore
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
def extend(self, new_services: List[str]):
|
||||
for service in new_services:
|
||||
if service not in self.sock:
|
||||
|
||||
Binary file not shown.
+9
-9
@@ -83,15 +83,15 @@ static std::map<std::string, service> services = {
|
||||
{ "customReservedRawData0", {"customReservedRawData0", true, 0.000000, -1, 256000}},
|
||||
{ "customReservedRawData1", {"customReservedRawData1", true, 0.000000, -1, 256000}},
|
||||
{ "customReservedRawData2", {"customReservedRawData2", true, 0.000000, -1, 256000}},
|
||||
{ "frogpilotCarControl", {"frogpilotCarControl", true, 100.000000, 10, 256000}},
|
||||
{ "frogpilotCarParams", {"frogpilotCarParams", true, 0.020000, 1, 256000}},
|
||||
{ "frogpilotCarState", {"frogpilotCarState", true, 100.000000, 10, 256000}},
|
||||
{ "frogpilotDeviceState", {"frogpilotDeviceState", true, 2.000000, 1, 256000}},
|
||||
{ "frogpilotModelV2", {"frogpilotModelV2", true, 20.000000, -1, 256000}},
|
||||
{ "frogpilotOnroadEvents", {"frogpilotOnroadEvents", true, 1.000000, 1, 256000}},
|
||||
{ "frogpilotPlan", {"frogpilotPlan", true, 20.000000, 10, 256000}},
|
||||
{ "frogpilotRadarState", {"frogpilotRadarState", true, 20.000000, 5, 256000}},
|
||||
{ "frogpilotSelfdriveState", {"frogpilotSelfdriveState", true, 100.000000, 10, 256000}},
|
||||
{ "starpilotCarControl", {"starpilotCarControl", true, 100.000000, 10, 256000}},
|
||||
{ "starpilotCarParams", {"starpilotCarParams", true, 0.020000, 1, 256000}},
|
||||
{ "starpilotCarState", {"starpilotCarState", true, 100.000000, 10, 256000}},
|
||||
{ "starpilotDeviceState", {"starpilotDeviceState", true, 2.000000, 1, 256000}},
|
||||
{ "starpilotModelV2", {"starpilotModelV2", true, 20.000000, -1, 256000}},
|
||||
{ "starpilotOnroadEvents", {"starpilotOnroadEvents", true, 1.000000, 1, 256000}},
|
||||
{ "starpilotPlan", {"starpilotPlan", true, 20.000000, 10, 256000}},
|
||||
{ "starpilotRadarState", {"starpilotRadarState", true, 20.000000, 5, 256000}},
|
||||
{ "starpilotSelfdriveState", {"starpilotSelfdriveState", true, 100.000000, 10, 256000}},
|
||||
{ "mapdExtendedOut", {"mapdExtendedOut", true, 1.000000, 1, 2097152}},
|
||||
{ "mapdIn", {"mapdIn", true, 1.000000, 1, 2097152}},
|
||||
{ "mapdOut", {"mapdOut", true, 20.000000, 20, 2097152}},
|
||||
|
||||
+10
-10
@@ -103,16 +103,16 @@ _services: dict[str, tuple] = {
|
||||
"customReservedRawData1": (True, 0.),
|
||||
"customReservedRawData2": (True, 0.),
|
||||
|
||||
# FrogPilot variables
|
||||
"frogpilotCarControl": (True, 100., 10),
|
||||
"frogpilotCarParams": (True, 0.02, 1),
|
||||
"frogpilotCarState": (True, 100., 10),
|
||||
"frogpilotDeviceState": (True, 2., 1),
|
||||
"frogpilotModelV2": (True, 20.),
|
||||
"frogpilotOnroadEvents": (True, 1., 1),
|
||||
"frogpilotPlan": (True, 20., 10),
|
||||
"frogpilotRadarState": (True, 20., 5),
|
||||
"frogpilotSelfdriveState": (True, 100., 10),
|
||||
# StarPilot variables
|
||||
"starpilotCarControl": (True, 100., 10),
|
||||
"starpilotCarParams": (True, 0.02, 1),
|
||||
"starpilotCarState": (True, 100., 10),
|
||||
"starpilotDeviceState": (True, 2., 1),
|
||||
"starpilotModelV2": (True, 20.),
|
||||
"starpilotOnroadEvents": (True, 1., 1),
|
||||
"starpilotPlan": (True, 20., 10),
|
||||
"starpilotRadarState": (True, 20., 5),
|
||||
"starpilotSelfdriveState": (True, 100., 10),
|
||||
"mapdExtendedOut": (True, 1., 1, QueueSize.MEDIUM),
|
||||
"mapdIn": (True, 1., 1, QueueSize.MEDIUM),
|
||||
"mapdOut": (True, 20., 20, QueueSize.MEDIUM),
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ from datetime import datetime, timedelta, UTC
|
||||
from openpilot.system.hardware.hw import Paths
|
||||
from openpilot.system.version import get_version
|
||||
|
||||
from openpilot.frogpilot.common.frogpilot_utilities import use_konik_server
|
||||
from openpilot.starpilot.common.starpilot_utilities import use_konik_server
|
||||
|
||||
API_HOST = os.getenv('API_HOST', f"https://api.{'konik.ai' if use_konik_server() else 'commadotai.com'}")
|
||||
|
||||
|
||||
+1
-1
@@ -70,7 +70,7 @@ std::string resolve_program_path(const char *path) {
|
||||
}
|
||||
|
||||
// Recover from build-path-embedded absolute paths like "/work/selfdrive/...".
|
||||
for (const char *marker : {"/selfdrive/", "/frogpilot/", "/common/"}) {
|
||||
for (const char *marker : {"/selfdrive/", "/starpilot/", "/common/"}) {
|
||||
if (const size_t idx = resolved_path.find(marker); idx != std::string::npos) {
|
||||
const std::string candidate = basedir + "/" + resolved_path.substr(idx + 1);
|
||||
if (util::file_exists(candidate)) {
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ class CV:
|
||||
# Mass
|
||||
LB_TO_KG = 0.453592
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
METER_TO_FOOT = 3.28084
|
||||
FOOT_TO_METER = 1. / METER_TO_FOOT
|
||||
CM_TO_INCH = 1. / 2.54
|
||||
|
||||
Binary file not shown.
+4
-4
@@ -94,7 +94,7 @@ private:
|
||||
Params::Params(const std::string &path, bool memory) {
|
||||
params_prefix = "/" + util::getenv("OPENPILOT_PREFIX", "d");
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
std::string params_folder;
|
||||
if (memory) {
|
||||
params_folder = Path::shm_path() + "/params";
|
||||
@@ -179,7 +179,7 @@ int Params::remove(const std::string &key) {
|
||||
FileLock file_lock(params_path + "/.lock");
|
||||
int result = unlink(getParamPath(key).c_str());
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
if (!cache_path.empty()) {
|
||||
unlink((cache_path + key).c_str());
|
||||
}
|
||||
@@ -231,7 +231,7 @@ void Params::clearAll(ParamKeyFlag key_flag) {
|
||||
if (it == keys.end() || (it->second.flags & key_flag)) {
|
||||
unlink(getParamPath(de->d_name).c_str());
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
if (!cache_path.empty()) {
|
||||
unlink((cache_path + de->d_name).c_str());
|
||||
}
|
||||
@@ -261,7 +261,7 @@ void Params::asyncWriteThread() {
|
||||
}
|
||||
}
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
int Params::getTuningLevel(const std::string &key) {
|
||||
return keys[key].tuning_level;
|
||||
}
|
||||
|
||||
+3
-3
@@ -36,7 +36,7 @@ struct ParamKeyAttributes {
|
||||
ParamKeyType type;
|
||||
std::optional<std::string> default_value = std::nullopt;
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
std::optional<std::string> stock_value = std::nullopt;
|
||||
|
||||
int tuning_level = 0;
|
||||
@@ -83,7 +83,7 @@ public:
|
||||
putNonBlocking(key, val ? "1" : "0");
|
||||
}
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
int getInt(const std::string &key, bool block = false) {
|
||||
std::string value = get(key, block);
|
||||
return value.empty() ? 0 : std::stoi(value);
|
||||
@@ -122,6 +122,6 @@ private:
|
||||
std::future<void> future;
|
||||
SafeQueue<std::pair<std::string, std::string>> queue;
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
std::string cache_path;
|
||||
};
|
||||
|
||||
@@ -135,7 +135,7 @@ inline static std::unordered_map<std::string, ParamKeyAttributes> keys = {
|
||||
{"UptimeOnroad", {PERSISTENT, FLOAT, "0.0"}},
|
||||
{"Version", {PERSISTENT, STRING}},
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
{"AccelerationPath", {PERSISTENT, BOOL, "1", "0", 2}},
|
||||
{"AccelerationProfile", {PERSISTENT, INT, "2", "0", 0}},
|
||||
{"AdjacentLeadsUI", {PERSISTENT, BOOL, "1", "0", 3}},
|
||||
@@ -261,12 +261,12 @@ inline static std::unordered_map<std::string, ParamKeyAttributes> keys = {
|
||||
{"ForceStops", {PERSISTENT, BOOL, "0", "0", 2}},
|
||||
{"ForceTorqueController", {PERSISTENT, BOOL, "0", "0", 3}},
|
||||
{"FPSCounter", {PERSISTENT, BOOL, "1", "0", 3}},
|
||||
{"FrogPilotApiToken", {PERSISTENT | DONT_LOG, STRING, "", "", 0}},
|
||||
{"FrogPilotCarParams", {CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION, BYTES, "", ""}},
|
||||
{"FrogPilotCarParamsPersistent", {PERSISTENT, BYTES, "", ""}},
|
||||
{"FrogPilotDongleId", {PERSISTENT | DONT_LOG, STRING, "", "", 0}},
|
||||
{"FrogPilotStats", {PERSISTENT | DONT_LOG, JSON, "{}", "{}"}},
|
||||
{"FrogPilotTogglesUpdated", {CLEAR_ON_MANAGER_START, BOOL, "0", "0"}},
|
||||
{"StarPilotApiToken", {PERSISTENT | DONT_LOG, STRING, "", "", 0}},
|
||||
{"StarPilotCarParams", {CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION, BYTES, "", ""}},
|
||||
{"StarPilotCarParamsPersistent", {PERSISTENT, BYTES, "", ""}},
|
||||
{"StarPilotDongleId", {PERSISTENT | DONT_LOG, STRING, "", "", 0}},
|
||||
{"StarPilotStats", {PERSISTENT | DONT_LOG, JSON, "{}", "{}"}},
|
||||
{"StarPilotTogglesUpdated", {CLEAR_ON_MANAGER_START, BOOL, "0", "0"}},
|
||||
{"FrogsGoMoosTweak", {PERSISTENT, BOOL, "1", "0", 2}},
|
||||
{"GoatScream", {PERSISTENT, BOOL, "0", "0", 1}},
|
||||
{"GreenLightAlert", {PERSISTENT, BOOL, "0", "0", 0}},
|
||||
|
||||
@@ -6097,7 +6097,7 @@ static int __pyx_pf_6common_10params_pyx_6Params___cinit__(struct __pyx_obj_6com
|
||||
* def __cinit__(self, d="", *, memory=False, return_defaults=False):
|
||||
* cdef string path = <string>d.encode() # <<<<<<<<<<<<<<
|
||||
*
|
||||
* # FrogPilot variables
|
||||
* # StarPilot variables
|
||||
*/
|
||||
__pyx_t_2 = __pyx_v_d;
|
||||
__Pyx_INCREF(__pyx_t_2);
|
||||
@@ -6115,7 +6115,7 @@ static int __pyx_pf_6common_10params_pyx_6Params___cinit__(struct __pyx_obj_6com
|
||||
|
||||
/* "common/params_pyx.pyx":119
|
||||
*
|
||||
* # FrogPilot variables
|
||||
* # StarPilot variables
|
||||
* cdef bool c_memory = memory # <<<<<<<<<<<<<<
|
||||
*
|
||||
* with nogil:
|
||||
@@ -6182,7 +6182,7 @@ static int __pyx_pf_6common_10params_pyx_6Params___cinit__(struct __pyx_obj_6com
|
||||
* self.p = new c_Params(path, c_memory)
|
||||
* self.d = d # <<<<<<<<<<<<<<
|
||||
*
|
||||
* # FrogPilot variables
|
||||
* # StarPilot variables
|
||||
*/
|
||||
__pyx_t_1 = __pyx_v_d;
|
||||
__Pyx_INCREF(__pyx_t_1);
|
||||
@@ -6195,7 +6195,7 @@ static int __pyx_pf_6common_10params_pyx_6Params___cinit__(struct __pyx_obj_6com
|
||||
|
||||
/* "common/params_pyx.pyx":126
|
||||
*
|
||||
* # FrogPilot variables
|
||||
* # StarPilot variables
|
||||
* self.m = memory # <<<<<<<<<<<<<<
|
||||
*
|
||||
* self.return_defaults = return_defaults or memory
|
||||
@@ -10127,7 +10127,7 @@ static PyObject *__pyx_pf_6common_10params_pyx_6Params_38cpp2python(struct __pyx
|
||||
* cdef ParamKeyType t = self.p.getKeyType(k)
|
||||
* return self._cpp2python(t, value, None, key) # <<<<<<<<<<<<<<
|
||||
*
|
||||
* # FrogPilot variables
|
||||
* # StarPilot variables
|
||||
*/
|
||||
__Pyx_XDECREF(__pyx_r);
|
||||
__pyx_t_2 = ((PyObject *)__pyx_v_self);
|
||||
@@ -10170,7 +10170,7 @@ static PyObject *__pyx_pf_6common_10params_pyx_6Params_38cpp2python(struct __pyx
|
||||
|
||||
/* "common/params_pyx.pyx":245
|
||||
*
|
||||
* # FrogPilot variables
|
||||
* # StarPilot variables
|
||||
* def get_key_flag(self, key): # <<<<<<<<<<<<<<
|
||||
* return self.p.getKeyFlag(self.check_key(key))
|
||||
*
|
||||
@@ -10274,7 +10274,7 @@ static PyObject *__pyx_pf_6common_10params_pyx_6Params_40get_key_flag(struct __p
|
||||
__Pyx_RefNannySetupContext("get_key_flag", 0);
|
||||
|
||||
/* "common/params_pyx.pyx":246
|
||||
* # FrogPilot variables
|
||||
* # StarPilot variables
|
||||
* def get_key_flag(self, key):
|
||||
* return self.p.getKeyFlag(self.check_key(key)) # <<<<<<<<<<<<<<
|
||||
*
|
||||
@@ -10301,7 +10301,7 @@ static PyObject *__pyx_pf_6common_10params_pyx_6Params_40get_key_flag(struct __p
|
||||
|
||||
/* "common/params_pyx.pyx":245
|
||||
*
|
||||
* # FrogPilot variables
|
||||
* # StarPilot variables
|
||||
* def get_key_flag(self, key): # <<<<<<<<<<<<<<
|
||||
* return self.p.getKeyFlag(self.check_key(key))
|
||||
*
|
||||
@@ -12347,7 +12347,7 @@ __Pyx_RefNannySetupContext("PyInit_params_pyx", 0);
|
||||
|
||||
/* "common/params_pyx.pyx":245
|
||||
*
|
||||
* # FrogPilot variables
|
||||
* # StarPilot variables
|
||||
* def get_key_flag(self, key): # <<<<<<<<<<<<<<
|
||||
* return self.p.getKeyFlag(self.check_key(key))
|
||||
*
|
||||
|
||||
@@ -20,7 +20,7 @@ cdef extern from "common/params.h":
|
||||
CLEAR_ON_IGNITION_ON
|
||||
ALL
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
DONT_LOG
|
||||
|
||||
cpdef enum ParamKeyType:
|
||||
@@ -48,7 +48,7 @@ cdef extern from "common/params.h":
|
||||
void clearAll(ParamKeyFlag)
|
||||
vector[string] allKeys()
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
ParamKeyFlag getKeyFlag(string) nogil
|
||||
|
||||
optional[string] getStockValue(string) nogil
|
||||
@@ -108,21 +108,21 @@ cdef class Params:
|
||||
cdef c_Params* p
|
||||
cdef str d
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
cdef bool m
|
||||
cdef bool return_defaults
|
||||
|
||||
def __cinit__(self, d="", *, memory=False, return_defaults=False):
|
||||
cdef string path = <string>d.encode()
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
cdef bool c_memory = memory
|
||||
|
||||
with nogil:
|
||||
self.p = new c_Params(path, c_memory)
|
||||
self.d = d
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
self.m = memory
|
||||
|
||||
self.return_defaults = return_defaults or memory
|
||||
@@ -241,7 +241,7 @@ cdef class Params:
|
||||
cdef ParamKeyType t = self.p.getKeyType(k)
|
||||
return self._cpp2python(t, value, None, key)
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
def get_key_flag(self, key):
|
||||
return self.p.getKeyFlag(self.check_key(key))
|
||||
|
||||
|
||||
Binary file not shown.
+1
-1
@@ -37,7 +37,7 @@ const double MS_TO_MPH = MS_TO_KPH * KM_TO_MILE;
|
||||
const double METER_TO_MILE = KM_TO_MILE / 1000.0;
|
||||
const double METER_TO_FOOT = 3.28084;
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
const double FOOT_TO_METER = 1. / METER_TO_FOOT;
|
||||
const double CM_TO_INCH = 1. / 2.54;
|
||||
const double INCH_TO_CM = 1. / CM_TO_INCH;
|
||||
|
||||
@@ -17,7 +17,7 @@ For the full StarPilot branch workflow, including host-native shorthand tools su
|
||||
Fast path (no physical comma):
|
||||
|
||||
```bash
|
||||
cd /path/to/frogpilot
|
||||
cd /path/to/starpilot
|
||||
scripts/laptop_device_build.sh setup
|
||||
```
|
||||
|
||||
@@ -30,7 +30,7 @@ scripts/starpilot_build_flow.sh laptop-setup
|
||||
### Option A: no physical comma (AGNOS-based)
|
||||
|
||||
```bash
|
||||
cd /path/to/frogpilot
|
||||
cd /path/to/starpilot
|
||||
scripts/laptop_device_build.sh build-image
|
||||
scripts/laptop_device_build.sh setup-sysroot-agnos
|
||||
```
|
||||
@@ -38,7 +38,7 @@ scripts/laptop_device_build.sh setup-sysroot-agnos
|
||||
### Option B: copy sysroot from a comma device
|
||||
|
||||
```bash
|
||||
cd /path/to/frogpilot
|
||||
cd /path/to/starpilot
|
||||
scripts/laptop_device_build.sh setup-sysroot <device-ip> comma 22
|
||||
scripts/laptop_device_build.sh build-image
|
||||
```
|
||||
@@ -52,7 +52,7 @@ scripts/laptop_device_build.sh setup <device-ip> comma 22
|
||||
## Build device-compatible artifacts
|
||||
|
||||
```bash
|
||||
cd /path/to/frogpilot
|
||||
cd /path/to/starpilot
|
||||
scripts/laptop_device_build.sh build
|
||||
```
|
||||
|
||||
|
||||
@@ -1,203 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
import json
|
||||
|
||||
import cereal.messaging as messaging
|
||||
|
||||
from openpilot.common.constants import CV
|
||||
from openpilot.common.filter_simple import FirstOrderFilter
|
||||
from openpilot.common.gps import get_gps_location_service
|
||||
from openpilot.common.params import Params
|
||||
from openpilot.common.realtime import DT_MDL
|
||||
from openpilot.selfdrive.car.cruise import V_CRUISE_MAX, V_CRUISE_UNSET
|
||||
from openpilot.selfdrive.controls.lib.longitudinal_mpc_lib.long_mpc import A_CHANGE_COST, DANGER_ZONE_COST, J_EGO_COST, STOP_DISTANCE
|
||||
|
||||
from openpilot.frogpilot.common.frogpilot_utilities import calculate_lane_width, calculate_road_curvature
|
||||
from openpilot.frogpilot.common.frogpilot_variables import CRUISING_SPEED, MINIMUM_LATERAL_ACCELERATION, PLANNER_TIME, THRESHOLD
|
||||
from openpilot.frogpilot.controls.lib.conditional_experimental_mode import ConditionalExperimentalMode
|
||||
from openpilot.frogpilot.controls.lib.frogpilot_acceleration import FrogPilotAcceleration
|
||||
from openpilot.frogpilot.controls.lib.frogpilot_events import FrogPilotEvents
|
||||
from openpilot.frogpilot.controls.lib.frogpilot_following import FrogPilotFollowing
|
||||
from openpilot.frogpilot.controls.lib.frogpilot_vcruise import FrogPilotVCruise
|
||||
from openpilot.frogpilot.controls.lib.weather_checker import WeatherChecker
|
||||
|
||||
|
||||
class FrogPilotPlanner:
|
||||
def __init__(self, error_log, ThemeManager):
|
||||
self.params = Params(return_defaults=True)
|
||||
self.params_memory = Params(memory=True)
|
||||
|
||||
self.frogpilot_acceleration = FrogPilotAcceleration(self)
|
||||
self.frogpilot_cem = ConditionalExperimentalMode(self)
|
||||
self.frogpilot_events = FrogPilotEvents(self, error_log, ThemeManager)
|
||||
self.frogpilot_following = FrogPilotFollowing(self)
|
||||
self.frogpilot_vcruise = FrogPilotVCruise(self)
|
||||
self.frogpilot_weather = WeatherChecker(self)
|
||||
|
||||
self.driving_in_curve = False
|
||||
self.gps_valid = False
|
||||
self.lateral_check = False
|
||||
self.model_stopped = False
|
||||
self.road_curvature_detected = False
|
||||
self.tracking_lead = False
|
||||
|
||||
self.lane_width_left = 0
|
||||
self.lane_width_right = 0
|
||||
self.lateral_acceleration = 0
|
||||
self.model_length = 0
|
||||
self.road_curvature = 0
|
||||
self.time_to_curve = 0
|
||||
self.v_cruise = 0
|
||||
|
||||
self.gps_position = None
|
||||
|
||||
self.gps_location_service = get_gps_location_service(self.params)
|
||||
|
||||
self.tracking_lead_filter = FirstOrderFilter(0, 0.5, DT_MDL)
|
||||
|
||||
def shutdown(self):
|
||||
self.frogpilot_vcruise.slc.executor.shutdown(wait=False, cancel_futures=True)
|
||||
self.frogpilot_weather.executor.shutdown(wait=False, cancel_futures=True)
|
||||
|
||||
def update(self, now, time_validated, sm, frogpilot_toggles):
|
||||
self.lead_one = sm["radarState"].leadOne
|
||||
|
||||
controls_enabled = sm["selfdriveState"].enabled
|
||||
|
||||
v_cruise_kph = min(sm["carState"].vCruise, V_CRUISE_MAX)
|
||||
if 0 < v_cruise_kph < V_CRUISE_UNSET and frogpilot_toggles.set_speed_offset > 0:
|
||||
v_cruise_kph += frogpilot_toggles.set_speed_offset
|
||||
v_cruise = v_cruise_kph * CV.KPH_TO_MS
|
||||
v_ego = max(sm["carState"].vEgo, 0)
|
||||
|
||||
if controls_enabled:
|
||||
self.frogpilot_acceleration.update(v_ego, sm, frogpilot_toggles)
|
||||
else:
|
||||
self.frogpilot_acceleration.max_accel = 0
|
||||
self.frogpilot_acceleration.min_accel = 0
|
||||
|
||||
if controls_enabled and frogpilot_toggles.conditional_experimental_mode:
|
||||
self.frogpilot_cem.update(v_ego, sm, frogpilot_toggles)
|
||||
else:
|
||||
self.frogpilot_cem.curve_detected = False
|
||||
self.frogpilot_cem.stop_sign_and_light(v_ego, sm, PLANNER_TIME - 2)
|
||||
|
||||
self.driving_in_curve = abs(self.lateral_acceleration) >= MINIMUM_LATERAL_ACCELERATION
|
||||
|
||||
self.frogpilot_events.update(controls_enabled, v_cruise, sm, frogpilot_toggles)
|
||||
|
||||
self.frogpilot_following.update(controls_enabled, v_ego, sm, frogpilot_toggles)
|
||||
|
||||
gps_location = sm[self.gps_location_service]
|
||||
self.gps_position = {
|
||||
"latitude": gps_location.latitude,
|
||||
"longitude": gps_location.longitude,
|
||||
"bearing": gps_location.bearingDeg,
|
||||
}
|
||||
self.gps_valid = self.gps_position["latitude"] != 0 or self.gps_position["longitude"] != 0
|
||||
self.params_memory.put("LastGPSPosition", json.dumps(self.gps_position))
|
||||
|
||||
if v_ego >= frogpilot_toggles.minimum_lane_change_speed:
|
||||
self.lane_width_left = calculate_lane_width(sm["modelV2"].laneLines[0], sm["modelV2"].laneLines[1], sm["modelV2"].roadEdges[0])
|
||||
self.lane_width_right = calculate_lane_width(sm["modelV2"].laneLines[3], sm["modelV2"].laneLines[2], sm["modelV2"].roadEdges[1])
|
||||
else:
|
||||
self.lane_width_left = 0
|
||||
self.lane_width_right = 0
|
||||
|
||||
self.lateral_acceleration = v_ego**2 * sm["controlsState"].curvature
|
||||
|
||||
self.lateral_check = v_ego >= frogpilot_toggles.pause_lateral_below_speed
|
||||
self.lateral_check |= not (sm["carState"].leftBlinker or sm["carState"].rightBlinker) and frogpilot_toggles.pause_lateral_below_signal
|
||||
self.lateral_check |= sm["carState"].standstill
|
||||
self.lateral_check &= not sm["frogpilotCarState"].pauseLateral
|
||||
|
||||
self.model_length = sm["modelV2"].position.x[-1]
|
||||
|
||||
self.model_stopped = self.model_length < CRUISING_SPEED * PLANNER_TIME
|
||||
self.model_stopped |= self.frogpilot_vcruise.forcing_stop
|
||||
|
||||
self.road_curvature, self.time_to_curve = calculate_road_curvature(sm["modelV2"])
|
||||
|
||||
self.road_curvature_detected = (1 / abs(self.road_curvature))**0.5 < v_ego > CRUISING_SPEED and not (sm["carState"].leftBlinker or sm["carState"].rightBlinker)
|
||||
|
||||
if not sm["carState"].standstill:
|
||||
self.tracking_lead = self.update_lead_status(frogpilot_toggles.stop_distance)
|
||||
|
||||
self.v_cruise = self.frogpilot_vcruise.update(controls_enabled, now, time_validated, v_cruise, v_ego, sm, frogpilot_toggles)
|
||||
|
||||
if self.gps_valid and time_validated and frogpilot_toggles.weather_presets:
|
||||
self.frogpilot_weather.update_weather(now, frogpilot_toggles)
|
||||
else:
|
||||
self.frogpilot_weather.weather_id = 0
|
||||
|
||||
def update_lead_status(self, stop_distance=STOP_DISTANCE):
|
||||
following_lead = self.lead_one.status
|
||||
following_lead &= self.lead_one.dRel < self.model_length + max(float(stop_distance), 4.0)
|
||||
|
||||
self.tracking_lead_filter.update(following_lead)
|
||||
return self.tracking_lead_filter.x >= THRESHOLD
|
||||
|
||||
def publish(self, theme_updated, sm, pm, frogpilot_toggles):
|
||||
frogpilot_plan_send = messaging.new_message("frogpilotPlan")
|
||||
frogpilot_plan_send.valid = sm.all_checks(service_list=["carState", "controlsState", "selfdriveState", "radarState"])
|
||||
frogpilotPlan = frogpilot_plan_send.frogpilotPlan
|
||||
|
||||
frogpilotPlan.accelerationJerk = float(A_CHANGE_COST * self.frogpilot_following.acceleration_jerk)
|
||||
frogpilotPlan.dangerFactor = float(self.frogpilot_following.danger_factor)
|
||||
frogpilotPlan.dangerJerk = float(DANGER_ZONE_COST * self.frogpilot_following.danger_jerk)
|
||||
frogpilotPlan.speedJerk = float(J_EGO_COST * self.frogpilot_following.speed_jerk)
|
||||
frogpilotPlan.tFollow = float(self.frogpilot_following.t_follow)
|
||||
|
||||
frogpilotPlan.cscControllingSpeed = self.frogpilot_vcruise.csc_controlling_speed
|
||||
frogpilotPlan.cscSpeed = float(self.frogpilot_vcruise.csc_target)
|
||||
frogpilotPlan.cscTraining = self.frogpilot_vcruise.csc.enable_training
|
||||
|
||||
frogpilotPlan.desiredFollowDistance = int(self.frogpilot_following.desired_follow_distance)
|
||||
frogpilotPlan.disableThrottle = self.frogpilot_following.disable_throttle
|
||||
frogpilotPlan.trackingLead = self.tracking_lead
|
||||
|
||||
frogpilotPlan.experimentalMode = self.frogpilot_cem.experimental_mode or self.frogpilot_vcruise.slc.experimental_mode
|
||||
|
||||
frogpilotPlan.forcingStop = self.frogpilot_vcruise.forcing_stop
|
||||
frogpilotPlan.forcingStopLength = self.frogpilot_vcruise.tracked_model_length
|
||||
|
||||
frogpilotPlan.frogpilotEvents = self.frogpilot_events.events.to_msg()
|
||||
|
||||
frogpilotPlan.frogpilotToggles = json.dumps(vars(frogpilot_toggles))
|
||||
|
||||
if sm["frogpilotCarState"].trafficModeEnabled:
|
||||
frogpilotPlan.increasedStoppedDistance = 0
|
||||
else:
|
||||
frogpilotPlan.increasedStoppedDistance = frogpilot_toggles.increase_stopped_distance
|
||||
if self.frogpilot_weather.weather_id != 0:
|
||||
frogpilotPlan.increasedStoppedDistance += self.frogpilot_weather.increase_stopped_distance
|
||||
|
||||
frogpilotPlan.laneWidthLeft = self.lane_width_left
|
||||
frogpilotPlan.laneWidthRight = self.lane_width_right
|
||||
|
||||
frogpilotPlan.lateralCheck = self.lateral_check
|
||||
|
||||
frogpilotPlan.maxAcceleration = float(self.frogpilot_acceleration.max_accel)
|
||||
frogpilotPlan.minAcceleration = float(self.frogpilot_acceleration.min_accel)
|
||||
|
||||
frogpilotPlan.redLight = self.frogpilot_cem.stop_light_detected
|
||||
|
||||
frogpilotPlan.roadCurvature = self.road_curvature
|
||||
|
||||
frogpilotPlan.slcMapSpeedLimit = self.frogpilot_vcruise.slc.map_speed_limit
|
||||
frogpilotPlan.slcMapboxSpeedLimit = self.frogpilot_vcruise.slc.mapbox_limit
|
||||
frogpilotPlan.slcNextSpeedLimit = self.frogpilot_vcruise.slc.next_speed_limit
|
||||
frogpilotPlan.slcOverriddenSpeed = self.frogpilot_vcruise.slc.overridden_speed
|
||||
frogpilotPlan.slcSpeedLimit = self.frogpilot_vcruise.slc_target
|
||||
frogpilotPlan.slcSpeedLimitOffset = self.frogpilot_vcruise.slc_offset
|
||||
frogpilotPlan.slcSpeedLimitSource = self.frogpilot_vcruise.slc.source
|
||||
frogpilotPlan.speedLimitChanged = self.frogpilot_vcruise.slc.speed_limit_changed_timer > DT_MDL
|
||||
frogpilotPlan.unconfirmedSlcSpeedLimit = self.frogpilot_vcruise.slc.unconfirmed_speed_limit
|
||||
|
||||
frogpilotPlan.themeUpdated = theme_updated
|
||||
|
||||
frogpilotPlan.vCruise = float(self.v_cruise)
|
||||
|
||||
frogpilotPlan.weatherDaytime = self.frogpilot_weather.is_daytime
|
||||
frogpilotPlan.weatherId = self.frogpilot_weather.weather_id
|
||||
|
||||
pm.send("frogpilotPlan", frogpilot_plan_send)
|
||||
@@ -1,175 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
from openpilot.common.constants import CV
|
||||
from openpilot.common.realtime import DT_MDL
|
||||
from openpilot.selfdrive.car.cruise import V_CRUISE_MAX
|
||||
from openpilot.selfdrive.selfdrived.events import FROGPILOT_EVENT_NAME
|
||||
from openpilot.selfdrive.selfdrived.selfdrived import LONGITUDINAL_PERSONALITY_MAP, State
|
||||
from openpilot.selfdrive.selfdrived.state import ACTIVE_STATES
|
||||
from openpilot.selfdrive.ui.soundd import FrogPilotAudibleAlert
|
||||
|
||||
from openpilot.frogpilot.common.frogpilot_utilities import clean_model_name
|
||||
from openpilot.frogpilot.controls.lib.frogpilot_events import RANDOM_EVENT_END, RANDOM_EVENT_START
|
||||
from openpilot.frogpilot.controls.lib.weather_checker import WEATHER_CATEGORIES
|
||||
|
||||
class FrogPilotTracking:
|
||||
def __init__(self, frogpilot_planner, frogpilot_toggles):
|
||||
self.params = frogpilot_planner.params
|
||||
|
||||
self.frogpilot_events = frogpilot_planner.frogpilot_events
|
||||
self.frogpilot_weather = frogpilot_planner.frogpilot_weather
|
||||
|
||||
self.frogpilot_stats = self.params.get("FrogPilotStats")
|
||||
self.frogpilot_stats.pop("CurrentMonthsKilometers", None)
|
||||
self.frogpilot_stats.pop("ResetStats", None)
|
||||
|
||||
self.drive_added = False
|
||||
self.previously_enabled = False
|
||||
|
||||
self.distance_since_override = 0
|
||||
self.tracked_time = 0
|
||||
|
||||
self.previous_random_events = set()
|
||||
|
||||
self.previous_alert = None
|
||||
self.previous_sound = FrogPilotAudibleAlert.none
|
||||
self.previous_state = State.disabled
|
||||
|
||||
self.model_name = clean_model_name(frogpilot_toggles.model_name)
|
||||
|
||||
def update(self, now, time_validated, sm, frogpilot_toggles):
|
||||
v_cruise = min(sm["carState"].vCruiseCluster, V_CRUISE_MAX) * CV.KPH_TO_MS
|
||||
v_ego = max(sm["carState"].vEgo, 0)
|
||||
|
||||
distance_driven = v_ego * DT_MDL
|
||||
self.previously_enabled |= sm["selfdriveState"].enabled or sm["frogpilotCarState"].alwaysOnLateralEnabled
|
||||
self.tracked_time += DT_MDL
|
||||
|
||||
if sm["selfdriveState"].alertType not in (self.previous_alert, ""):
|
||||
alert_name = sm["selfdriveState"].alertType.split('/')[0]
|
||||
total_events = self.frogpilot_stats.get("TotalEvents", {})
|
||||
total_events[alert_name] = total_events.get(alert_name, 0) + 1
|
||||
self.frogpilot_stats["TotalEvents"] = total_events
|
||||
self.previous_alert = sm["selfdriveState"].alertType
|
||||
|
||||
if sm["selfdriveState"].enabled:
|
||||
key = str(round(v_cruise, 2))
|
||||
total_cruise_speed_times = self.frogpilot_stats.get("CruiseSpeedTimes", {})
|
||||
total_cruise_speed_times[key] = total_cruise_speed_times.get(key, 0) + DT_MDL
|
||||
self.frogpilot_stats["CruiseSpeedTimes"] = total_cruise_speed_times
|
||||
|
||||
self.frogpilot_stats["CurrentMonthsMeters"] = self.frogpilot_stats.get("CurrentMonthsMeters", 0) + distance_driven
|
||||
|
||||
if self.frogpilot_weather.sunrise != 0 and self.frogpilot_weather.sunset != 0:
|
||||
if self.frogpilot_weather.is_daytime:
|
||||
self.frogpilot_stats["DayTime"] = self.frogpilot_stats.get("DayTime", 0) + DT_MDL
|
||||
else:
|
||||
self.frogpilot_stats["NightTime"] = self.frogpilot_stats.get("NightTime", 0) + DT_MDL
|
||||
|
||||
if sm["selfdriveState"].state != self.previous_state:
|
||||
if sm["selfdriveState"].state in ACTIVE_STATES and self.previous_state not in ACTIVE_STATES:
|
||||
self.frogpilot_stats["Engages"] = self.frogpilot_stats.get("Engages", 0) + 1
|
||||
if frogpilot_toggles.sound_pack == "frog":
|
||||
self.frogpilot_stats["FrogChirps"] = self.frogpilot_stats.get("FrogChirps", 0) + 1
|
||||
|
||||
elif sm["selfdriveState"].state == State.disabled and self.previous_state in ACTIVE_STATES:
|
||||
self.frogpilot_stats["Disengages"] = self.frogpilot_stats.get("Disengages", 0) + 1
|
||||
if frogpilot_toggles.sound_pack == "frog":
|
||||
self.frogpilot_stats["FrogSqueaks"] = self.frogpilot_stats.get("FrogSqueaks", 0) + 1
|
||||
|
||||
if sm["selfdriveState"].state == State.overriding and self.previous_state != State.overriding:
|
||||
self.frogpilot_stats["Overrides"] = self.frogpilot_stats.get("Overrides", 0) + 1
|
||||
|
||||
self.previous_state = sm["selfdriveState"].state
|
||||
|
||||
if sm["selfdriveState"].experimentalMode:
|
||||
self.frogpilot_stats["ExperimentalModeTime"] = self.frogpilot_stats.get("ExperimentalModeTime", 0) + DT_MDL
|
||||
|
||||
self.frogpilot_stats["FrogPilotMeters"] = self.frogpilot_stats.get("FrogPilotMeters", 0) + distance_driven
|
||||
|
||||
if sm["frogpilotSelfdriveState"].alertSound != self.previous_sound:
|
||||
if sm["frogpilotSelfdriveState"].alertSound == FrogPilotAudibleAlert.goat:
|
||||
self.frogpilot_stats["GoatScreams"] = self.frogpilot_stats.get("GoatScreams", 0) + 1
|
||||
|
||||
self.previous_sound = sm["frogpilotSelfdriveState"].alertSound
|
||||
|
||||
self.frogpilot_stats["MaxAcceleration"] = max(self.frogpilot_events.max_acceleration, self.frogpilot_stats.get("MaxAcceleration", 0))
|
||||
|
||||
if sm["carControl"].latActive:
|
||||
self.frogpilot_stats["LateralTime"] = self.frogpilot_stats.get("LateralTime", 0) + DT_MDL
|
||||
if sm["carControl"].longActive:
|
||||
self.frogpilot_stats["LongitudinalTime"] = self.frogpilot_stats.get("LongitudinalTime", 0) + DT_MDL
|
||||
|
||||
personality_name = LONGITUDINAL_PERSONALITY_MAP.get(sm["selfdriveState"].personality, "Unknown").capitalize()
|
||||
total_personality_times = self.frogpilot_stats.get("PersonalityTimes", {})
|
||||
total_personality_times[personality_name] = total_personality_times.get(personality_name, 0) + DT_MDL
|
||||
self.frogpilot_stats["PersonalityTimes"] = total_personality_times
|
||||
elif sm["frogpilotCarState"].alwaysOnLateralEnabled:
|
||||
self.frogpilot_stats["AOLTime"] = self.frogpilot_stats.get("AOLTime", 0) + DT_MDL
|
||||
|
||||
if sm["selfdriveState"].state in (State.disabled, State.overriding):
|
||||
self.distance_since_override = 0
|
||||
self.frogpilot_stats["OverrideTime"] = self.frogpilot_stats.get("OverrideTime", 0) + DT_MDL
|
||||
else:
|
||||
self.distance_since_override += distance_driven
|
||||
self.frogpilot_stats["LongestDistanceWithoutOverride"] = max(self.distance_since_override, self.frogpilot_stats.get("LongestDistanceWithoutOverride", 0))
|
||||
|
||||
current_random_events = {event for event in self.frogpilot_events.events.names if RANDOM_EVENT_START <= event <= RANDOM_EVENT_END}
|
||||
if len(current_random_events) > 0:
|
||||
new_events = current_random_events - self.previous_random_events
|
||||
if new_events:
|
||||
total_random_events = self.frogpilot_stats.get("RandomEvents", {})
|
||||
for event in new_events:
|
||||
event_name = FROGPILOT_EVENT_NAME[event]
|
||||
total_random_events[event_name] = total_random_events.get(event_name, 0) + 1
|
||||
self.frogpilot_stats["RandomEvents"] = total_random_events
|
||||
|
||||
self.previous_random_events = current_random_events
|
||||
|
||||
if sm["carState"].standstill:
|
||||
self.frogpilot_stats["StandstillTime"] = self.frogpilot_stats.get("StandstillTime", 0) + DT_MDL
|
||||
if self.frogpilot_events.stopped_for_light:
|
||||
self.frogpilot_stats["StopLightTime"] = self.frogpilot_stats.get("StopLightTime", 0) + DT_MDL
|
||||
|
||||
weather_api_calls = self.frogpilot_stats.get("WeatherAPICalls", {})
|
||||
weather_api_calls["2.5"] = weather_api_calls.get("2.5", 0) + self.frogpilot_weather.api_25_calls
|
||||
weather_api_calls["3.0"] = weather_api_calls.get("3.0", 0) + self.frogpilot_weather.api_3_calls
|
||||
self.frogpilot_stats["WeatherAPICalls"] = weather_api_calls
|
||||
|
||||
self.frogpilot_weather.api_25_calls = 0
|
||||
self.frogpilot_weather.api_3_calls = 0
|
||||
|
||||
suffix = "unknown"
|
||||
for category in WEATHER_CATEGORIES.values():
|
||||
if any(start <= self.frogpilot_weather.weather_id <= end for start, end in category["ranges"]):
|
||||
suffix = category["suffix"]
|
||||
break
|
||||
|
||||
weather_times = self.frogpilot_stats.get("WeatherTimes", {})
|
||||
weather_times[suffix] = weather_times.get(suffix, 0) + DT_MDL
|
||||
self.frogpilot_stats["WeatherTimes"] = weather_times
|
||||
|
||||
if self.tracked_time >= 60 and sm["carState"].standstill and self.previously_enabled:
|
||||
if time_validated:
|
||||
current_month = now.month
|
||||
if current_month != self.frogpilot_stats.get("Month"):
|
||||
self.frogpilot_stats.update({
|
||||
"CurrentMonthsMeters": 0,
|
||||
"Month": current_month
|
||||
})
|
||||
|
||||
self.frogpilot_stats["FrogPilotSeconds"] = self.frogpilot_stats.get("FrogPilotSeconds", 0) + self.tracked_time
|
||||
|
||||
current_model = self.model_name
|
||||
total_model_times = self.frogpilot_stats.get("ModelTimes", {})
|
||||
total_model_times[current_model] = total_model_times.get(current_model, 0) + self.tracked_time
|
||||
self.frogpilot_stats["ModelTimes"] = total_model_times
|
||||
|
||||
self.frogpilot_stats["TrackedTime"] = self.frogpilot_stats.get("TrackedTime", 0) + self.tracked_time
|
||||
|
||||
self.tracked_time = 0
|
||||
|
||||
if not self.drive_added:
|
||||
self.frogpilot_stats["FrogPilotDrives"] = self.frogpilot_stats.get("FrogPilotDrives", 0) + 1
|
||||
self.drive_added = True
|
||||
|
||||
self.params.put_nonblocking("FrogPilotStats", dict(sorted(self.frogpilot_stats.items())))
|
||||
@@ -1,23 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "frogpilot/ui/qt/offroad/frogpilot_settings.h"
|
||||
|
||||
class FrogPilotDataPanel : public FrogPilotListWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit FrogPilotDataPanel(FrogPilotSettingsWindow *parent, bool forceOpen = false);
|
||||
|
||||
signals:
|
||||
void openSubPanel();
|
||||
|
||||
private:
|
||||
void updateStatsLabels(FrogPilotListWidget *labelsList);
|
||||
|
||||
bool forceOpenDescriptions;
|
||||
bool isMetric;
|
||||
|
||||
FrogPilotSettingsWindow *parent;
|
||||
|
||||
Params params;
|
||||
};
|
||||
@@ -1,369 +0,0 @@
|
||||
#include "frogpilot/ui/qt/offroad/utilities.h"
|
||||
|
||||
FrogPilotUtilitiesPanel::FrogPilotUtilitiesPanel(FrogPilotSettingsWindow *parent, bool forceOpen) : FrogPilotListWidget(parent), parent(parent) {
|
||||
networkManager = new QNetworkAccessManager(this);
|
||||
pairingPollTimer = new QTimer(this);
|
||||
|
||||
forceOpenDescriptions = forceOpen;
|
||||
|
||||
ParamControl *debugModeToggle = new ParamControl("DebugMode", tr("Debug Mode"), tr("<b>Use all of FrogPilot's developer metrics on your next drive</b> to diagnose issues and improve bug reports."), "");
|
||||
if (forceOpenDescriptions) {
|
||||
debugModeToggle->showDescription();
|
||||
}
|
||||
addItem(debugModeToggle);
|
||||
|
||||
ButtonControl *flashPandaButton = new ButtonControl(tr("Flash Panda"), tr("FLASH"), tr("<b>Flash the latest, official firmware onto your Panda device</b> to restore core functionality, fix bugs, or ensure you have the most up-to-date software."));
|
||||
QObject::connect(flashPandaButton, &ButtonControl::clicked, [parent, flashPandaButton, this]() {
|
||||
if (ConfirmationDialog::confirm(tr("Are you sure you want to flash the Panda firmware?"), tr("Flash"), this)) {
|
||||
std::thread([parent, flashPandaButton, this]() {
|
||||
parent->keepScreenOn = true;
|
||||
|
||||
flashPandaButton->setEnabled(false);
|
||||
flashPandaButton->setValue(tr("Flashing..."));
|
||||
|
||||
params_memory.putBool("FlashPanda", true);
|
||||
while (params_memory.getBool("FlashPanda")) {
|
||||
util::sleep_for(UI_FREQ);
|
||||
}
|
||||
|
||||
flashPandaButton->setValue(tr("Flashed!"));
|
||||
|
||||
util::sleep_for(2500);
|
||||
|
||||
flashPandaButton->setValue(tr("Rebooting..."));
|
||||
|
||||
util::sleep_for(2500);
|
||||
|
||||
Hardware::reboot();
|
||||
}).detach();
|
||||
}
|
||||
});
|
||||
if (forceOpenDescriptions) {
|
||||
flashPandaButton->showDescription();
|
||||
}
|
||||
addItem(flashPandaButton);
|
||||
|
||||
FrogPilotButtonsControl *forceStartedButton = new FrogPilotButtonsControl(tr("Force Drive State"), tr("<b>Force openpilot to be offroad or onroad.</b>"), "", {tr("OFFROAD"), tr("ONROAD"), tr("OFF")}, true);
|
||||
QObject::connect(forceStartedButton, &FrogPilotButtonsControl::buttonClicked, [this](int id) {
|
||||
if (id == 0) {
|
||||
params.putBool("ForceOffroad", true);
|
||||
params.putBool("ForceOnroad", false);
|
||||
|
||||
updateFrogPilotToggles();
|
||||
} else if (id == 1) {
|
||||
params.put("CarParams", params.get("CarParamsPersistent"));
|
||||
params.put("FrogPilotCarParams", params.get("FrogPilotCarParamsPersistent"));
|
||||
|
||||
params.putBool("ForceOffroad", false);
|
||||
params.putBool("ForceOnroad", true);
|
||||
|
||||
updateFrogPilotToggles();
|
||||
} else if (id == 2) {
|
||||
params.putBool("ForceOffroad", false);
|
||||
params.putBool("ForceOnroad", false);
|
||||
|
||||
updateFrogPilotToggles();
|
||||
}
|
||||
});
|
||||
forceStartedButton->setCheckedButton(2);
|
||||
if (forceOpenDescriptions) {
|
||||
forceStartedButton->showDescription();
|
||||
}
|
||||
addItem(forceStartedButton);
|
||||
|
||||
bool paired = params.getBool("PondPaired");
|
||||
pondButton = new ButtonControl(
|
||||
tr("Pair to \"The Pond\""),
|
||||
paired ? tr("UNPAIR") : tr("PAIR"),
|
||||
tr("<b>Pair this device with your frogpilot.com account</b> to remotely manage settings from anywhere.")
|
||||
);
|
||||
QObject::connect(pondButton, &ButtonControl::clicked, [this]() {
|
||||
if (!frogpilotUIState()->frogpilot_scene.online) {
|
||||
ConfirmationDialog::alert(tr("Please connect to the internet first!"), this);
|
||||
return;
|
||||
}
|
||||
|
||||
bool isPaired = params.getBool("PondPaired");
|
||||
|
||||
if (isPaired && !ConfirmationDialog::confirm(tr("Are you sure you want to unpair from \"The Pond\"?"), tr("Unpair"), this)) {
|
||||
return;
|
||||
}
|
||||
|
||||
pondButton->setEnabled(false);
|
||||
pondButton->setValue(isPaired ? tr("Unpairing...") : tr("Requesting code..."));
|
||||
|
||||
QJsonObject payload;
|
||||
payload["api_token"] = QString::fromStdString(params.get("FrogPilotApiToken"));
|
||||
payload["device"] = QString::fromStdString(Hardware::get_name()).trimmed().remove(QChar('\0'));
|
||||
payload["frogpilot_dongle_id"] = QString::fromStdString(params.get("FrogPilotDongleId"));
|
||||
|
||||
QString buildMetadataStr = QString::fromStdString(params.get("BuildMetadata"));
|
||||
if (!buildMetadataStr.isEmpty()) {
|
||||
QJsonDocument bmDoc = QJsonDocument::fromJson(buildMetadataStr.toUtf8());
|
||||
if (!bmDoc.isNull()) {
|
||||
payload["build_metadata"] = bmDoc.object();
|
||||
}
|
||||
}
|
||||
|
||||
QNetworkRequest request(QUrl(QString("https://www.frogpilot.com/api/pond/pair/") + (isPaired ? "unpair" : "request")));
|
||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
||||
request.setRawHeader("User-Agent", "frogpilot-api/1.0");
|
||||
|
||||
QByteArray postData = QJsonDocument(payload).toJson(QJsonDocument::Compact);
|
||||
|
||||
QNetworkReply *reply = networkManager->post(request, postData);
|
||||
QObject::connect(reply, &QNetworkReply::finished, [this, reply, isPaired, payload]() {
|
||||
QByteArray responseBody = reply->readAll();
|
||||
|
||||
reply->deleteLater();
|
||||
|
||||
pondButton->setEnabled(true);
|
||||
pondButton->setValue("");
|
||||
|
||||
if (reply->error() != QNetworkReply::NoError) {
|
||||
QString errorDetail;
|
||||
QString serverError = QJsonDocument::fromJson(responseBody).object().value("error").toString();
|
||||
|
||||
int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
||||
if (statusCode == 401) {
|
||||
errorDetail = tr("Authentication failed. Please restart your device.");
|
||||
} else if (statusCode == 403) {
|
||||
errorDetail = serverError.contains("build", Qt::CaseInsensitive)
|
||||
? tr("Unofficial or modified build detected.")
|
||||
: tr("Access denied: %1").arg(serverError);
|
||||
} else if (statusCode == 429) {
|
||||
errorDetail = tr("Too many attempts. Please wait and try again.");
|
||||
} else if (statusCode == 503) {
|
||||
errorDetail = tr("Server is temporarily unavailable. Please try again later.");
|
||||
} else if (statusCode > 0) {
|
||||
errorDetail = tr("Server error (%1): %2").arg(statusCode).arg(serverError.isEmpty() ? tr("Unknown error") : serverError);
|
||||
} else {
|
||||
errorDetail = tr("Network error: %1").arg(reply->errorString());
|
||||
}
|
||||
|
||||
if (isPaired) {
|
||||
pondButton->setValue(tr("Failed to unpair"));
|
||||
|
||||
QTimer::singleShot(2500, [this]() {
|
||||
pondButton->setValue("");
|
||||
});
|
||||
} else {
|
||||
ConfirmationDialog::alert(tr("Failed to get pairing code.\n\n%1").arg(errorDetail), this);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (isPaired) {
|
||||
params.putBool("PondPaired", false);
|
||||
|
||||
pondButton->setText(tr("PAIR"));
|
||||
pondButton->setValue(tr("Unpaired!"));
|
||||
|
||||
QTimer::singleShot(2500, [this]() {
|
||||
pondButton->setValue("");
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
QString code = QJsonDocument::fromJson(responseBody).object().value("code").toString();
|
||||
if (code.isEmpty()) {
|
||||
ConfirmationDialog::alert(tr("Failed to get pairing code. Please try again."), this);
|
||||
return;
|
||||
}
|
||||
|
||||
pondButton->setValue(tr("Code: %1").arg(code));
|
||||
|
||||
ConfirmationDialog::alert(tr("Go to \"frogpilot.com/the_pond\" and enter this code: %1").arg(code), this);
|
||||
|
||||
QString dongleId = payload["frogpilot_dongle_id"].toString();
|
||||
QString apiToken = payload["api_token"].toString();
|
||||
|
||||
pairingPollTimer->disconnect();
|
||||
|
||||
int pollCount = 0;
|
||||
QObject::connect(pairingPollTimer, &QTimer::timeout, [this, code, dongleId, apiToken, pollCount]() mutable {
|
||||
if (++pollCount > 200) {
|
||||
pairingPollTimer->stop();
|
||||
|
||||
pondButton->setValue(tr("Code expired"));
|
||||
|
||||
QTimer::singleShot(2500, [this]() {
|
||||
pondButton->setValue("");
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
QNetworkRequest statusRequest{QUrl(QString("https://www.frogpilot.com/api/pond/pair/status?code=%1&dongle_id=%2&api_token=%3").arg(code, dongleId, apiToken))};
|
||||
statusRequest.setRawHeader("User-Agent", "frogpilot-api/1.0");
|
||||
|
||||
QNetworkReply *statusReply = networkManager->get(statusRequest);
|
||||
QObject::connect(statusReply, &QNetworkReply::finished, [this, statusReply]() {
|
||||
statusReply->deleteLater();
|
||||
if (statusReply->error() != QNetworkReply::NoError) {
|
||||
return;
|
||||
}
|
||||
|
||||
QString status = QJsonDocument::fromJson(statusReply->readAll()).object().value("status").toString();
|
||||
if (status == "paired") {
|
||||
pairingPollTimer->stop();
|
||||
|
||||
params.putBool("PondPaired", true);
|
||||
|
||||
pondButton->setText(tr("UNPAIR"));
|
||||
pondButton->setValue(tr("Paired!"));
|
||||
|
||||
ConfirmationDialog::alert(tr("Device successfully paired to \"The Pond\"!"), this);
|
||||
|
||||
QTimer::singleShot(2500, [this]() {
|
||||
pondButton->setValue("");
|
||||
});
|
||||
} else if (status == "expired") {
|
||||
pairingPollTimer->stop();
|
||||
|
||||
pondButton->setValue(tr("Code expired"));
|
||||
|
||||
QTimer::singleShot(2500, [this]() {
|
||||
pondButton->setValue("");
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
pairingPollTimer->start(3000);
|
||||
});
|
||||
});
|
||||
if (forceOpenDescriptions) {
|
||||
pondButton->showDescription();
|
||||
}
|
||||
addItem(pondButton);
|
||||
pondButton->setVisible(true);
|
||||
|
||||
ButtonControl *reportIssueButton = new ButtonControl(tr("Report a Bug or an Issue"), tr("REPORT"), tr("<b>Send a bug report</b> so we can help fix the problem!"));
|
||||
QObject::connect(reportIssueButton, &ButtonControl::clicked, [this]() {
|
||||
if (!frogpilotUIState()->frogpilot_scene.online) {
|
||||
ConfirmationDialog::alert(tr("Please connect to the internet before sending a report!"), this);
|
||||
return;
|
||||
}
|
||||
|
||||
QStringList report_messages = {
|
||||
tr("Acceleration feels harsh or jerky"),
|
||||
tr("An alert was unclear and I'm not sure what it meant"),
|
||||
tr("Braking is too sudden or uncomfortable"),
|
||||
tr("I'm not sure if this is normal or a bug:"),
|
||||
tr("My steering wheel buttons aren't working"),
|
||||
tr("openpilot disengages when I don't expect it"),
|
||||
tr("openpilot feels sluggish or slow to respond"),
|
||||
tr("Something else (please describe)")
|
||||
};
|
||||
|
||||
if (QFile::exists("/data/error_logs/error.txt")) {
|
||||
report_messages.prepend(tr("I saw an alert that said \"openpilot crashed\""));
|
||||
}
|
||||
|
||||
QString selected_issue = MultiOptionDialog::getSelection(tr("What's going on?"), report_messages, "", this);
|
||||
if (selected_issue.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (selected_issue.contains("crashed") || selected_issue.contains("not sure") || selected_issue.contains("Something else")) {
|
||||
QString extra_input = InputDialog::getText(tr("Please describe what's happening"), this, tr("Send Report"), false, 10, "", 300).trimmed();
|
||||
if (extra_input.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
selected_issue += " — " + extra_input;
|
||||
}
|
||||
|
||||
QString discord_user = InputDialog::getText(tr("What's your Discord username?"), this, tr("Send Report"), false, -1, QString::fromStdString(params.get("DiscordUsername"))).trimmed();
|
||||
|
||||
QJsonObject reportData;
|
||||
reportData["DiscordUser"] = discord_user;
|
||||
reportData["Issue"] = selected_issue;
|
||||
|
||||
params.putNonBlocking("DiscordUsername", discord_user.toStdString());
|
||||
params_memory.put("IssueReported", QJsonDocument(reportData).toJson(QJsonDocument::Compact).toStdString());
|
||||
|
||||
ConfirmationDialog::alert(tr("Report Sent! Thanks for letting us know!"), this);
|
||||
});
|
||||
if (forceOpenDescriptions) {
|
||||
reportIssueButton->showDescription();
|
||||
}
|
||||
addItem(reportIssueButton);
|
||||
reportIssueButton->setVisible(true);
|
||||
|
||||
ButtonControl *resetTogglesButton = new ButtonControl(tr("Reset Toggles to Default"), tr("RESET"), tr("<b>Reset all toggles to their default values.</b>"));
|
||||
QObject::connect(resetTogglesButton, &ButtonControl::clicked, [parent, resetTogglesButton, this]() {
|
||||
if (ConfirmationDialog::confirm(tr("Are you sure you want to reset all toggles to their default values?"), tr("Reset"), this)) {
|
||||
std::thread([parent, resetTogglesButton, this]() {
|
||||
parent->keepScreenOn = true;
|
||||
|
||||
resetTogglesButton->setEnabled(false);
|
||||
resetTogglesButton->setValue(tr("Resetting..."));
|
||||
|
||||
std::vector<std::string> all_keys = params.allKeys();
|
||||
for (const std::string &key : all_keys) {
|
||||
if (excluded_keys.count(key)) {
|
||||
continue;
|
||||
}
|
||||
std::optional<std::string> default_value = params.getKeyDefaultValue(key);
|
||||
if (default_value.has_value()) {
|
||||
params.put(key, default_value.value());
|
||||
}
|
||||
}
|
||||
|
||||
updateFrogPilotToggles();
|
||||
|
||||
resetTogglesButton->setValue(tr("Reset!"));
|
||||
|
||||
util::sleep_for(2500);
|
||||
|
||||
resetTogglesButton->setValue("");
|
||||
}).detach();
|
||||
}
|
||||
});
|
||||
if (forceOpenDescriptions) {
|
||||
resetTogglesButton->showDescription();
|
||||
}
|
||||
addItem(resetTogglesButton);
|
||||
|
||||
ButtonControl *resetTogglesButtonStock = new ButtonControl(tr("Reset Toggles to Stock openpilot"), tr("RESET"), tr("<b>Reset all toggles to match stock openpilot.</b>"));
|
||||
QObject::connect(resetTogglesButtonStock, &ButtonControl::clicked, [parent, resetTogglesButtonStock, this]() {
|
||||
if (ConfirmationDialog::confirm(tr("Are you sure you want to reset all toggles to match stock openpilot?"), tr("Reset"), this)) {
|
||||
std::thread([parent, resetTogglesButtonStock, this]() {
|
||||
parent->keepScreenOn = true;
|
||||
|
||||
resetTogglesButtonStock->setEnabled(false);
|
||||
resetTogglesButtonStock->setValue(tr("Resetting..."));
|
||||
|
||||
std::vector<std::string> all_keys = params.allKeys();
|
||||
for (const std::string &key : all_keys) {
|
||||
if (excluded_keys.count(key)) {
|
||||
continue;
|
||||
}
|
||||
std::optional<std::string> stock_value = params.getStockValue(key);
|
||||
if (stock_value.has_value()) {
|
||||
params.put(key, stock_value.value());
|
||||
}
|
||||
}
|
||||
|
||||
updateFrogPilotToggles();
|
||||
|
||||
resetTogglesButtonStock->setValue(tr("Reset!"));
|
||||
|
||||
util::sleep_for(2500);
|
||||
|
||||
resetTogglesButtonStock->setValue("");
|
||||
}).detach();
|
||||
}
|
||||
});
|
||||
if (forceOpenDescriptions) {
|
||||
resetTogglesButtonStock->showDescription();
|
||||
}
|
||||
addItem(resetTogglesButtonStock);
|
||||
}
|
||||
|
||||
void FrogPilotUtilitiesPanel::showEvent(QShowEvent *event) {
|
||||
FrogPilotListWidget::showEvent(event);
|
||||
|
||||
bool isPaired = params.getBool("PondPaired");
|
||||
pondButton->setText(isPaired ? tr("UNPAIR") : tr("PAIR"));
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "frogpilot/ui/qt/offroad/frogpilot_settings.h"
|
||||
|
||||
class FrogPilotUtilitiesPanel : public FrogPilotListWidget {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit FrogPilotUtilitiesPanel(FrogPilotSettingsWindow *parent, bool forceOpen = false);
|
||||
|
||||
protected:
|
||||
void showEvent(QShowEvent *event) override;
|
||||
|
||||
private:
|
||||
bool forceOpenDescriptions;
|
||||
|
||||
ButtonControl *pondButton;
|
||||
|
||||
FrogPilotSettingsWindow *parent;
|
||||
|
||||
Params params;
|
||||
Params params_memory{"", true};
|
||||
|
||||
QNetworkAccessManager *networkManager;
|
||||
|
||||
QTimer *pairingPollTimer;
|
||||
|
||||
std::set<std::string> excluded_keys = {
|
||||
"AvailableModels", "AvailableModelNames", "FrogPilotStats",
|
||||
"GithubSshKeys", "GithubUsername", "MapBoxRequests",
|
||||
"ModelDrivesAndScores", "OverpassRequests", "SpeedLimits",
|
||||
"SpeedLimitsFiltered", "UpdaterAvailableBranches",
|
||||
};
|
||||
};
|
||||
+2
-2
@@ -30,7 +30,7 @@ function agnos_init {
|
||||
sudo chgrp gpu /dev/adsprpc-smd /dev/ion /dev/kgsl-3d0
|
||||
sudo chmod 660 /dev/adsprpc-smd /dev/ion /dev/kgsl-3d0
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
sudo chmod 0777 /cache
|
||||
|
||||
# Check if AGNOS update is required
|
||||
@@ -85,7 +85,7 @@ function launch {
|
||||
# handle pythonpath
|
||||
ln -sfn $(pwd) /data/pythonpath
|
||||
export BASEDIR="$DIR"
|
||||
export PYTHONPATH="$DIR/frogpilot/third_party:$PWD"
|
||||
export PYTHONPATH="$DIR/starpilot/third_party:$PWD"
|
||||
|
||||
# hardware specific init
|
||||
if [ -f /AGNOS ]; then
|
||||
|
||||
+3
-3
@@ -26,7 +26,7 @@ fi
|
||||
|
||||
export STAGING_ROOT="/data/safe_staging"
|
||||
|
||||
# FrogPilot variables (only available after StarPilot is installed to /data/openpilot)
|
||||
if [ -x /data/openpilot/frogpilot/system/environment_variables ]; then
|
||||
eval "$(/data/openpilot/frogpilot/system/environment_variables)"
|
||||
# StarPilot variables (only available after StarPilot is installed to /data/openpilot)
|
||||
if [ -x /data/openpilot/starpilot/system/environment_variables ]; then
|
||||
eval "$(/data/openpilot/starpilot/system/environment_variables)"
|
||||
fi
|
||||
|
||||
@@ -34,7 +34,7 @@ class CarController(CarControllerBase):
|
||||
torque -= deadband
|
||||
return torque
|
||||
|
||||
def update(self, CC, CS, now_nanos, frogpilot_toggles):
|
||||
def update(self, CC, CS, now_nanos, starpilot_toggles):
|
||||
|
||||
torque_l = 0
|
||||
torque_r = 0
|
||||
|
||||
@@ -6,7 +6,7 @@ from opendbc.car.body.values import DBC
|
||||
|
||||
|
||||
class CarState(CarStateBase):
|
||||
def update(self, can_parsers, frogpilot_toggles) -> structs.CarState:
|
||||
def update(self, can_parsers, starpilot_toggles) -> structs.CarState:
|
||||
cp = can_parsers[Bus.main]
|
||||
ret = structs.CarState()
|
||||
|
||||
@@ -29,8 +29,8 @@ class CarState(CarStateBase):
|
||||
ret.cruiseState.enabled = True
|
||||
ret.cruiseState.available = True
|
||||
|
||||
# FrogPilot variables
|
||||
fp_ret = custom.FrogPilotCarState.new_message()
|
||||
# StarPilot variables
|
||||
fp_ret = custom.StarPilotCarState.new_message()
|
||||
|
||||
return ret, fp_ret
|
||||
|
||||
|
||||
@@ -11,15 +11,15 @@ from opendbc.car.structs import CarParams, CarParamsT
|
||||
from opendbc.car.fingerprints import eliminate_incompatible_cars, all_legacy_fingerprint_cars
|
||||
from opendbc.car.fw_versions import ObdCallback, get_fw_versions_ordered, get_present_ecus, match_fw_to_car
|
||||
from opendbc.car.mock.values import CAR as MOCK
|
||||
from opendbc.car.toyota.values import ToyotaFrogPilotFlags
|
||||
from opendbc.car.toyota.values import ToyotaStarPilotFlags
|
||||
from opendbc.car.values import BRANDS
|
||||
from opendbc.car.vin import get_vin, is_valid_vin, VIN_UNKNOWN
|
||||
from openpilot.common.params import Params
|
||||
|
||||
FRAME_FINGERPRINT = 100 # 1s
|
||||
|
||||
# FrogPilot variables
|
||||
FrogPilotCarParams = custom.FrogPilotCarParams
|
||||
# StarPilot variables
|
||||
StarPilotCarParams = custom.StarPilotCarParams
|
||||
|
||||
|
||||
def load_interfaces(brand_names):
|
||||
@@ -212,15 +212,15 @@ def fingerprint(can_recv: CanRecvCallable, can_send: CanSendCallable, set_obd_mu
|
||||
|
||||
|
||||
def get_car(can_recv: CanRecvCallable, can_send: CanSendCallable, set_obd_multiplexing: ObdCallback, alpha_long_allowed: bool,
|
||||
is_release: bool, params: Params, num_pandas: int = 1, cached_params: CarParamsT | None = None, frogpilot_toggles: SimpleNamespace = None):
|
||||
is_release: bool, params: Params, num_pandas: int = 1, cached_params: CarParamsT | None = None, starpilot_toggles: SimpleNamespace = None):
|
||||
candidate, fingerprints, vin, car_fw, source, exact_match = fingerprint(can_recv, can_send, set_obd_multiplexing, num_pandas, cached_params)
|
||||
candidate = _normalize_gm_bolt_candidate(candidate, fingerprints)
|
||||
candidate = _normalize_forced_candidate(candidate)
|
||||
fingerprinted_candidate = candidate
|
||||
|
||||
if candidate is None or frogpilot_toggles.force_fingerprint:
|
||||
if frogpilot_toggles.force_fingerprint:
|
||||
forced_candidate = _normalize_forced_candidate(frogpilot_toggles.car_model)
|
||||
if candidate is None or starpilot_toggles.force_fingerprint:
|
||||
if starpilot_toggles.force_fingerprint:
|
||||
forced_candidate = _normalize_forced_candidate(starpilot_toggles.car_model)
|
||||
candidate = forced_candidate
|
||||
if candidate not in interfaces and fingerprinted_candidate in interfaces:
|
||||
carlog.error({
|
||||
@@ -236,7 +236,7 @@ def get_car(can_recv: CanRecvCallable, can_send: CanSendCallable, set_obd_multip
|
||||
params.put_nonblocking("CarMake", candidate.split('_')[0].title())
|
||||
params.put_nonblocking("CarModel", str(candidate))
|
||||
|
||||
if frogpilot_toggles.block_user:
|
||||
if starpilot_toggles.block_user:
|
||||
candidate = "MOCK"
|
||||
|
||||
# Legacy branch migration guard: normalize stale platform names from any source
|
||||
@@ -251,20 +251,20 @@ def get_car(can_recv: CanRecvCallable, can_send: CanSendCallable, set_obd_multip
|
||||
candidate = fingerprinted_candidate
|
||||
|
||||
CarInterface = interfaces[candidate]
|
||||
CP: CarParams = CarInterface.get_params(candidate, fingerprints, car_fw, alpha_long_allowed, is_release, docs=False, frogpilot_toggles=frogpilot_toggles)
|
||||
CP: CarParams = CarInterface.get_params(candidate, fingerprints, car_fw, alpha_long_allowed, is_release, docs=False, starpilot_toggles=starpilot_toggles)
|
||||
CP.carVin = vin
|
||||
CP.carFw = car_fw
|
||||
CP.fingerprintSource = source
|
||||
CP.fuzzyFingerprint = not exact_match
|
||||
|
||||
# FrogPilot variables
|
||||
FPCP: FrogPilotCarParams = CarInterface.get_frogpilot_params(candidate, fingerprints, car_fw, CP, frogpilot_toggles)
|
||||
# StarPilot variables
|
||||
FPCP: StarPilotCarParams = CarInterface.get_starpilot_params(candidate, fingerprints, car_fw, CP, starpilot_toggles)
|
||||
|
||||
if CP.brand == "toyota" and FPCP.flags & ToyotaFrogPilotFlags.SMART_DSU.value:
|
||||
if CP.brand == "toyota" and FPCP.flags & ToyotaStarPilotFlags.SMART_DSU.value:
|
||||
CP.minEnableSpeed = -1
|
||||
CP.openpilotLongitudinalControl = True
|
||||
|
||||
if not CP.alphaLongitudinalAvailable and frogpilot_toggles.disable_openpilot_long:
|
||||
if not CP.alphaLongitudinalAvailable and starpilot_toggles.disable_openpilot_long:
|
||||
CP.openpilotLongitudinalControl = False
|
||||
FPCP.openpilotLongitudinalControlDisabled = True
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ class CarController(CarControllerBase):
|
||||
self.packer = CANPacker(dbc_names[Bus.pt])
|
||||
self.params = CarControllerParams(CP)
|
||||
|
||||
def update(self, CC, CS, now_nanos, frogpilot_toggles):
|
||||
def update(self, CC, CS, now_nanos, starpilot_toggles):
|
||||
can_sends = []
|
||||
|
||||
lkas_active = CC.latActive and self.lkas_control_bit_prev
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from cereal import custom
|
||||
from opendbc.can import CANDefine, CANParser
|
||||
from opendbc.car import Bus, create_button_events, structs
|
||||
from opendbc.car.chrysler.values import DBC, STEER_THRESHOLD, RAM_CARS, ChryslerFrogPilotFlags
|
||||
from opendbc.car.chrysler.values import DBC, STEER_THRESHOLD, RAM_CARS, ChryslerStarPilotFlags
|
||||
from opendbc.car.common.conversions import Conversions as CV
|
||||
from opendbc.car.interfaces import CarStateBase
|
||||
|
||||
@@ -26,12 +26,12 @@ class CarState(CarStateBase):
|
||||
self.distance_button = 0
|
||||
|
||||
# RealFast variables
|
||||
self.button_message = "CRUISE_BUTTONS_ALT" if FPCP.flags & ChryslerFrogPilotFlags.RAM_HD_ALT_BUTTONS else "CRUISE_BUTTONS"
|
||||
self.button_message = "CRUISE_BUTTONS_ALT" if FPCP.flags & ChryslerStarPilotFlags.RAM_HD_ALT_BUTTONS else "CRUISE_BUTTONS"
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
self.lkas_button = 0
|
||||
|
||||
def update(self, can_parsers, frogpilot_toggles) -> structs.CarState:
|
||||
def update(self, can_parsers, starpilot_toggles) -> structs.CarState:
|
||||
cp = can_parsers[Bus.pt]
|
||||
cp_cam = can_parsers[Bus.cam]
|
||||
|
||||
@@ -104,8 +104,8 @@ class CarState(CarStateBase):
|
||||
|
||||
buttonEvents = create_button_events(self.distance_button, prev_distance_button, {1: ButtonType.gapAdjustCruise})
|
||||
|
||||
# FrogPilot variables
|
||||
fp_ret = custom.FrogPilotCarState.new_message()
|
||||
# StarPilot variables
|
||||
fp_ret = custom.StarPilotCarState.new_message()
|
||||
|
||||
self.prev_lkas_button = self.lkas_button
|
||||
if self.CP.carFingerprint in RAM_CARS:
|
||||
|
||||
@@ -19,8 +19,8 @@ class ChryslerFlags(IntFlag):
|
||||
HIGHER_MIN_STEERING_SPEED = 1
|
||||
|
||||
|
||||
# FrogPilot variables
|
||||
class ChryslerFrogPilotFlags(IntFlag):
|
||||
# StarPilot variables
|
||||
class ChryslerStarPilotFlags(IntFlag):
|
||||
RAM_HD_ALT_BUTTONS = 1
|
||||
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@ class CarController(CarControllerBase):
|
||||
self.lead_distance_bars_last = None
|
||||
self.distance_bar_frame = 0
|
||||
|
||||
def update(self, CC, CS, now_nanos, frogpilot_toggles):
|
||||
def update(self, CC, CS, now_nanos, starpilot_toggles):
|
||||
can_sends = []
|
||||
|
||||
actuators = CC.actuators
|
||||
|
||||
@@ -21,7 +21,7 @@ class CarState(CarStateBase):
|
||||
self.distance_button = 0
|
||||
self.lc_button = 0
|
||||
|
||||
def update(self, can_parsers, frogpilot_toggles) -> structs.CarState:
|
||||
def update(self, can_parsers, starpilot_toggles) -> structs.CarState:
|
||||
cp = can_parsers[Bus.pt]
|
||||
cp_cam = can_parsers[Bus.cam]
|
||||
|
||||
@@ -114,8 +114,8 @@ class CarState(CarStateBase):
|
||||
*create_button_events(self.lc_button, prev_lc_button, {1: ButtonType.lkas}),
|
||||
]
|
||||
|
||||
# FrogPilot variables
|
||||
fp_ret = custom.FrogPilotCarState.new_message()
|
||||
# StarPilot variables
|
||||
fp_ret = custom.StarPilotCarState.new_message()
|
||||
|
||||
return ret, fp_ret
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ from opendbc.car.common.conversions import Conversions as CV
|
||||
from opendbc.car.gm.values import ASCM_INT, CAR, CC_ONLY_CAR, CC_REGEN_PADDLE_CAR, DBC, EV_CAR, SDGM_CAR, AccState, CanBus, CarControllerParams, CruiseButtons, GMFlags
|
||||
from opendbc.car.interfaces import CarControllerBase
|
||||
from openpilot.common.params import Params, UnknownKeyName
|
||||
from openpilot.frogpilot.common.testing_grounds import testing_ground
|
||||
from openpilot.starpilot.common.testing_grounds import testing_ground
|
||||
|
||||
VisualAlert = structs.CarControl.HUDControl.VisualAlert
|
||||
NetworkLocation = structs.CarParams.NetworkLocation
|
||||
@@ -213,7 +213,7 @@ class CarController(CarControllerBase):
|
||||
self.malibu_cancel_phase = phase
|
||||
self.malibu_button_phase = phase
|
||||
|
||||
def update(self, CC, CS, now_nanos, frogpilot_toggles):
|
||||
def update(self, CC, CS, now_nanos, starpilot_toggles):
|
||||
actuators = CC.actuators
|
||||
self.aego = CS.out.aEgo
|
||||
accel = actuators.accel
|
||||
@@ -366,11 +366,11 @@ class CarController(CarControllerBase):
|
||||
self.regen_min_on_frames = 0
|
||||
self.regen_min_off_frames = 0
|
||||
elif near_stop and stopping and not CC.cruiseControl.resume:
|
||||
stop_accel = getattr(frogpilot_toggles, "stopAccel", self.CP.stopAccel)
|
||||
stop_accel = getattr(starpilot_toggles, "stopAccel", self.CP.stopAccel)
|
||||
self.apply_gas = self.params.INACTIVE_REGEN
|
||||
self.apply_brake = int(min(-100 * stop_accel, self.params.MAX_BRAKE))
|
||||
else:
|
||||
long_pitch_enabled = bool(getattr(frogpilot_toggles, "long_pitch", True))
|
||||
long_pitch_enabled = bool(getattr(starpilot_toggles, "long_pitch", True))
|
||||
pedal_long_path = bool(self.CP.enableGasInterceptorDEPRECATED and (self.CP.flags & GMFlags.PEDAL_LONG.value))
|
||||
long_pitch_for_powertrain = long_pitch_enabled and not pedal_long_path
|
||||
|
||||
@@ -453,7 +453,7 @@ class CarController(CarControllerBase):
|
||||
if self.CP.flags & GMFlags.CC_LONG.value:
|
||||
if CC.longActive and CS.out.cruiseState.enabled and CS.out.vEgo > self.CP.minEnableSpeed:
|
||||
# Using extend instead of append since the message is only sent intermittently
|
||||
can_sends.extend(gmcan.create_gm_cc_spam_command(self.packer_pt, self, CS, actuators, frogpilot_toggles))
|
||||
can_sends.extend(gmcan.create_gm_cc_spam_command(self.packer_pt, self, CS, actuators, starpilot_toggles))
|
||||
elif (CS.out.cruiseState.enabled and CC.enabled and self.frame % 52 == 0 and
|
||||
CS.cruise_buttons == CruiseButtons.UNPRESS and CS.out.gasPressed and CS.out.cruiseState.speed < CS.out.vEgo < hud_v_cruise):
|
||||
if self.CP.carFingerprint == CAR.CHEVROLET_MALIBU_HYBRID_CC:
|
||||
@@ -479,8 +479,8 @@ class CarController(CarControllerBase):
|
||||
resume = actuators.longControlState != LongCtrlState.starting or CC.cruiseControl.resume
|
||||
at_full_stop = at_full_stop and not resume
|
||||
|
||||
# FrogPilot variables
|
||||
if CC.cruiseControl.resume and CS.pcm_acc_status == AccState.STANDSTILL and frogpilot_toggles.volt_sng:
|
||||
# StarPilot variables
|
||||
if CC.cruiseControl.resume and CS.pcm_acc_status == AccState.STANDSTILL and starpilot_toggles.volt_sng:
|
||||
acc_engaged = False
|
||||
else:
|
||||
acc_engaged = CC.enabled
|
||||
|
||||
@@ -78,7 +78,7 @@ class CarState(CarStateBase):
|
||||
return True
|
||||
return False
|
||||
|
||||
def update(self, can_parsers, frogpilot_toggles) -> structs.CarState:
|
||||
def update(self, can_parsers, starpilot_toggles) -> structs.CarState:
|
||||
pt_cp = can_parsers[Bus.pt]
|
||||
cam_cp = can_parsers[Bus.cam]
|
||||
loopback_cp = can_parsers[Bus.loopback]
|
||||
@@ -133,7 +133,7 @@ class CarState(CarStateBase):
|
||||
pt_cp.vl["EBCMWheelSpdRear"]["RLWheelSpd"],
|
||||
pt_cp.vl["EBCMWheelSpdRear"]["RRWheelSpd"],
|
||||
)
|
||||
ret.vEgoCluster = ret.vEgo * getattr(frogpilot_toggles, "cluster_offset", 1.0)
|
||||
ret.vEgoCluster = ret.vEgo * getattr(starpilot_toggles, "cluster_offset", 1.0)
|
||||
# standstill=True if ECM allows engagement with brake.
|
||||
ret.standstill = abs(pt_cp.vl["EBCMWheelSpdRear"]["RLWheelSpd"]) <= STANDSTILL_THRESHOLD and \
|
||||
abs(pt_cp.vl["EBCMWheelSpdRear"]["RRWheelSpd"]) <= STANDSTILL_THRESHOLD
|
||||
@@ -283,7 +283,7 @@ class CarState(CarStateBase):
|
||||
remap_cancel_to_distance = bool(self.CP.alternativeExperience & ALTERNATIVE_EXPERIENCE.GM_REMAP_CANCEL_TO_DISTANCE)
|
||||
if not remap_cancel_to_distance:
|
||||
remap_cancel_to_distance = (
|
||||
getattr(frogpilot_toggles, "remap_cancel_to_distance", False) and
|
||||
getattr(starpilot_toggles, "remap_cancel_to_distance", False) and
|
||||
self.CP.openpilotLongitudinalControl and
|
||||
bool(self.CP.flags & GMFlags.PEDAL_LONG.value) and
|
||||
self.CP.carFingerprint in (BOLT_GEN1_CANCEL_PERSONALITY_CARS | {CAR.CHEVROLET_MALIBU_HYBRID_CC})
|
||||
@@ -342,7 +342,7 @@ class CarState(CarStateBase):
|
||||
if ret.vEgo < self.CP.minSteerSpeed:
|
||||
ret.lowSpeedAlert = True
|
||||
|
||||
fp_ret = custom.FrogPilotCarState.new_message()
|
||||
fp_ret = custom.StarPilotCarState.new_message()
|
||||
if bolt_cancel_personality and self.cruise_buttons == CruiseButtons.CANCEL:
|
||||
# Feed long-press personality logic as if distance is held while CANCEL is held.
|
||||
fp_ret.distancePressed = True
|
||||
|
||||
@@ -191,7 +191,7 @@ FINGERPRINTS = {
|
||||
{
|
||||
190: 6, 193: 8, 197: 8, 199: 4, 201: 8, 208: 8, 209: 7, 211: 2, 241: 6, 249: 8, 288: 5, 298: 8, 304: 1, 309: 8, 313: 8, 320: 3, 322: 7, 328: 1, 352: 5, 353: 3, 381: 6, 384: 4, 386: 8, 388: 8, 393: 7, 398: 8, 407: 7, 413: 8, 417: 7, 419: 1, 422: 4, 426: 7, 431: 8, 442: 8, 451: 8, 452: 8, 453: 6, 454: 8, 455: 7, 462: 4, 463: 3, 479: 3, 481: 7, 485: 8, 487: 8, 489: 8, 495: 4, 497: 8, 499: 3, 500: 6, 501: 8, 503: 1, 508: 8, 510: 8, 532: 6, 554: 3, 560: 8, 562: 8, 563: 5, 564: 5, 567: 5, 647: 3, 707: 8, 717: 5, 723: 2, 753: 5, 761: 7, 800: 6, 840: 5, 842: 5, 844: 8, 866: 4, 869: 4, 872: 1, 961: 8, 967: 4, 969: 8, 977: 8, 979: 8, 985: 5, 1001: 8, 1005: 6, 1009: 8, 1011: 6, 1013: 3, 1017: 8, 1019: 2, 1020: 8, 1022: 1, 1105: 6, 1217: 8, 1221: 5, 1223: 3, 1225: 7, 1233: 8, 1243: 3, 1249: 8, 1257: 6, 1259: 8, 1261: 7, 1263: 4, 1265: 8, 1267: 1, 1280: 4, 1300: 8, 1322: 6, 1328: 4, 1417: 8, 1904: 7, 1906: 7, 1907: 7, 1912: 7, 1913: 7, 1914: 7, 1919: 7, 1920: 7
|
||||
}],
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
CAR.CHEVROLET_TRAX: [
|
||||
{
|
||||
190: 6, 193: 8, 197: 8, 201: 8, 209: 7, 211: 2, 241: 6, 249: 8, 288: 5, 298: 8, 304: 3, 309: 8, 311: 8, 313: 8, 320: 4, 322: 7, 328: 1, 352: 5, 381: 8, 384: 4, 386: 8, 388: 8, 413: 8, 451: 8, 452: 8, 453: 6, 455: 7, 479: 3, 481: 7, 485: 8, 489: 8, 497: 8, 500: 6, 501: 8, 532: 6, 560: 8, 562: 8, 563: 5, 565: 5, 587: 8, 608: 8, 609: 6, 610: 6, 611: 6, 612: 8, 613: 8, 707: 8, 715: 8, 717: 5, 761: 7, 789: 5, 800: 6, 810: 8, 840: 5, 842: 5, 844: 8, 869: 4, 880: 6, 977: 8, 1001: 8, 1011: 6, 1017: 8, 1020: 8, 1217: 8, 1221: 5, 1233: 8, 1249: 8, 1259: 8, 1261: 7, 1263: 4, 1265: 8, 1267: 1, 1271: 8, 1280: 4, 1296: 4, 1300: 8, 1611: 8, 1930: 7
|
||||
|
||||
@@ -273,12 +273,12 @@ def create_lka_icon_command(bus, active, critical, steer):
|
||||
return CanData(0x104c006c, dat, bus)
|
||||
|
||||
|
||||
def create_gm_cc_spam_command(packer, controller, CS, actuators, frogpilot_toggles):
|
||||
def create_gm_cc_spam_command(packer, controller, CS, actuators, starpilot_toggles):
|
||||
accel = actuators.accel
|
||||
v_ego = CS.out.vEgo
|
||||
cruise_btn = CruiseButtons.INIT
|
||||
rate = 1 if abs(accel) <= 0.15 else 0.2
|
||||
ms_convert = CV.MS_TO_KPH if getattr(frogpilot_toggles, "is_metric", False) else CV.MS_TO_MPH
|
||||
ms_convert = CV.MS_TO_KPH if getattr(starpilot_toggles, "is_metric", False) else CV.MS_TO_MPH
|
||||
speed_setpoint = int(round(CS.out.cruiseState.speed * ms_convert))
|
||||
desired_setpoint = int(round((v_ego * 1.01 + 3 * accel) * ms_convert))
|
||||
|
||||
|
||||
@@ -627,7 +627,7 @@ class CarInterface(CarInterfaceBase):
|
||||
if remap_cancel_to_distance or malibu_cancel_passthrough:
|
||||
ret.alternativeExperience |= ALTERNATIVE_EXPERIENCE.GM_REMAP_CANCEL_TO_DISTANCE
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
if candidate == CAR.CHEVROLET_TRAX:
|
||||
CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning)
|
||||
|
||||
|
||||
@@ -567,5 +567,5 @@ STEER_THRESHOLD = 1.0
|
||||
|
||||
DBC = CAR.create_dbc_map()
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
CAMERA_ACC_CAR.update({CAR.CHEVROLET_TRAX})
|
||||
|
||||
@@ -109,7 +109,7 @@ class CarController(CarControllerBase):
|
||||
self.brake = 0.0
|
||||
self.last_torque = 0.0
|
||||
|
||||
def update(self, CC, CS, now_nanos, frogpilot_toggles):
|
||||
def update(self, CC, CS, now_nanos, starpilot_toggles):
|
||||
actuators = CC.actuators
|
||||
hud_control = CC.hudControl
|
||||
hud_v_cruise = hud_control.setSpeed / CS.v_cruise_factor if hud_control.speedVisible else 255
|
||||
|
||||
@@ -50,7 +50,7 @@ class CarState(CarStateBase):
|
||||
# However, on cars without a digital speedometer this is not always present (HRV, FIT, CRV 2016, ILX and RDX)
|
||||
self.dash_speed_seen = False
|
||||
|
||||
def update(self, can_parsers, frogpilot_toggles) -> structs.CarState:
|
||||
def update(self, can_parsers, starpilot_toggles) -> structs.CarState:
|
||||
cp = can_parsers[Bus.pt]
|
||||
cp_cam = can_parsers[Bus.cam]
|
||||
if self.CP.enableBsm:
|
||||
@@ -220,8 +220,8 @@ class CarState(CarStateBase):
|
||||
*create_button_events(self.cruise_setting, prev_cruise_setting, SETTINGS_BUTTONS_DICT),
|
||||
]
|
||||
|
||||
# FrogPilot variables
|
||||
fp_ret = custom.FrogPilotCarState.new_message()
|
||||
# StarPilot variables
|
||||
fp_ret = custom.StarPilotCarState.new_message()
|
||||
|
||||
return ret, fp_ret
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ class CarController(CarControllerBase):
|
||||
self.car_fingerprint = CP.carFingerprint
|
||||
self.last_button_frame = 0
|
||||
|
||||
def update(self, CC, CS, now_nanos, frogpilot_toggles):
|
||||
def update(self, CC, CS, now_nanos, starpilot_toggles):
|
||||
actuators = CC.actuators
|
||||
hud_control = CC.hudControl
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ class CarState(CarStateBase):
|
||||
# Main button also can trigger an engagement on these cars
|
||||
return any(btn in ENABLE_BUTTONS for btn in self.cruise_buttons) or any(self.main_buttons)
|
||||
|
||||
def update(self, can_parsers, frogpilot_toggles) -> structs.CarState:
|
||||
def update(self, can_parsers, starpilot_toggles) -> structs.CarState:
|
||||
cp = can_parsers[Bus.pt]
|
||||
cp_cam = can_parsers[Bus.cam]
|
||||
|
||||
@@ -203,8 +203,8 @@ class CarState(CarStateBase):
|
||||
self.low_speed_alert = False
|
||||
ret.lowSpeedAlert = self.low_speed_alert
|
||||
|
||||
# FrogPilot variables
|
||||
fp_ret = custom.FrogPilotCarState.new_message()
|
||||
# StarPilot variables
|
||||
fp_ret = custom.StarPilotCarState.new_message()
|
||||
|
||||
return ret, fp_ret
|
||||
|
||||
@@ -301,8 +301,8 @@ class CarState(CarStateBase):
|
||||
|
||||
ret.blockPcmEnable = not self.recent_button_interaction()
|
||||
|
||||
# FrogPilot variables
|
||||
fp_ret = custom.FrogPilotCarState.new_message()
|
||||
# StarPilot variables
|
||||
fp_ret = custom.StarPilotCarState.new_message()
|
||||
|
||||
return ret, fp_ret
|
||||
|
||||
|
||||
@@ -68,8 +68,8 @@ class HyundaiSafetyFlags(IntFlag):
|
||||
ALT_LIMITS_2 = 512
|
||||
|
||||
|
||||
# FrogPilot variables
|
||||
class HyundaiFrogPilotSafetyFlags(IntFlag):
|
||||
# StarPilot variables
|
||||
class HyundaiStarPilotSafetyFlags(IntFlag):
|
||||
HAS_LDA_BUTTON = 1024
|
||||
|
||||
|
||||
|
||||
@@ -13,16 +13,16 @@ from cereal import custom
|
||||
from opendbc.car import DT_CTRL, apply_hysteresis, create_button_events, gen_empty_fingerprint, scale_rot_inertia, scale_tire_stiffness, STD_CARGO_KG
|
||||
from opendbc.car import structs
|
||||
from opendbc.car.can_definitions import CanData, CanRecvCallable, CanSendCallable
|
||||
from opendbc.car.chrysler.values import CAR as CHRYSLER, ChryslerFrogPilotFlags
|
||||
from opendbc.car.chrysler.values import CAR as CHRYSLER, ChryslerStarPilotFlags
|
||||
from opendbc.car.common.basedir import BASEDIR
|
||||
from opendbc.car.common.conversions import Conversions as CV
|
||||
from opendbc.car.common.simple_kalman import KF1D, get_kalman_gain
|
||||
from opendbc.car.gm.values import CAR as GM
|
||||
from opendbc.car.honda.values import CAR as HONDA, HONDA_BOSCH, HondaSafetyFlags
|
||||
from opendbc.car.hyundai.hyundaicanfd import CanBus
|
||||
from opendbc.car.hyundai.values import CAR as HYUNDAI, CANFD_CAR, HyundaiFlags, HyundaiFrogPilotSafetyFlags
|
||||
from opendbc.car.hyundai.values import CAR as HYUNDAI, CANFD_CAR, HyundaiFlags, HyundaiStarPilotSafetyFlags
|
||||
from opendbc.car.mock.values import CAR as MOCK
|
||||
from opendbc.car.toyota.values import CAR as TOYOTA, NO_DSU_CAR, TSS2_CAR, UNSUPPORTED_DSU_CAR, ToyotaFrogPilotFlags, ToyotaSafetyFlags
|
||||
from opendbc.car.toyota.values import CAR as TOYOTA, NO_DSU_CAR, TSS2_CAR, UNSUPPORTED_DSU_CAR, ToyotaStarPilotFlags, ToyotaSafetyFlags
|
||||
from opendbc.car.values import PLATFORMS
|
||||
from opendbc.can import CANParser
|
||||
from openpilot.common.params import Params
|
||||
@@ -30,7 +30,7 @@ from openpilot.common.params import Params
|
||||
GearShifter = structs.CarState.GearShifter
|
||||
ButtonType = structs.CarState.ButtonEvent.Type
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
Ecu = structs.CarParams.Ecu
|
||||
|
||||
V_CRUISE_MAX = 145
|
||||
@@ -121,7 +121,7 @@ class CarInterfaceBase(ABC):
|
||||
CarController: 'CarControllerBase'
|
||||
RadarInterface: 'RadarInterfaceBase' = RadarInterfaceBase
|
||||
|
||||
def __init__(self, CP: structs.CarParams, FPCP: custom.FrogPilotCarParams):
|
||||
def __init__(self, CP: structs.CarParams, FPCP: custom.StarPilotCarParams):
|
||||
self.CP = CP
|
||||
|
||||
self.frame = 0
|
||||
@@ -133,17 +133,17 @@ class CarInterfaceBase(ABC):
|
||||
dbc_names = {bus: cp.dbc_name for bus, cp in self.can_parsers.items()}
|
||||
self.CC: CarControllerBase = self.CarController(dbc_names, CP)
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
self.FPCP = FPCP
|
||||
|
||||
self.params_memory = Params(memory=True)
|
||||
|
||||
self.distance_button = 0
|
||||
|
||||
def apply(self, c: structs.CarControl, now_nanos: int | None = None, frogpilot_toggles: SimpleNamespace = None) -> tuple[structs.CarControl.Actuators, list[CanData]]:
|
||||
def apply(self, c: structs.CarControl, now_nanos: int | None = None, starpilot_toggles: SimpleNamespace = None) -> tuple[structs.CarControl.Actuators, list[CanData]]:
|
||||
if now_nanos is None:
|
||||
now_nanos = int(time.monotonic() * 1e9)
|
||||
return self.CC.update(c, self.CS, now_nanos, frogpilot_toggles)
|
||||
return self.CC.update(c, self.CS, now_nanos, starpilot_toggles)
|
||||
|
||||
@staticmethod
|
||||
def get_pid_accel_limits(CP, current_speed, cruise_speed):
|
||||
@@ -158,7 +158,7 @@ class CarInterfaceBase(ABC):
|
||||
|
||||
@classmethod
|
||||
def get_params(cls, candidate: str, fingerprint: dict[int, dict[int, int]], car_fw: list[structs.CarParams.CarFw],
|
||||
alpha_long: bool, is_release: bool, docs: bool, frogpilot_toggles: SimpleNamespace) -> structs.CarParams:
|
||||
alpha_long: bool, is_release: bool, docs: bool, starpilot_toggles: SimpleNamespace) -> structs.CarParams:
|
||||
ret = CarInterfaceBase.get_std_params(candidate)
|
||||
|
||||
platform = PLATFORMS[candidate]
|
||||
@@ -181,28 +181,28 @@ class CarInterfaceBase(ABC):
|
||||
ret.rotationalInertia = scale_rot_inertia(ret.mass, ret.wheelbase)
|
||||
ret.tireStiffnessFront, ret.tireStiffnessRear = scale_tire_stiffness(ret.mass, ret.wheelbase, ret.centerToFront, ret.tireStiffnessFactor)
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
toggles_to_check = ("force_torque_controller", "nnff", "nnff_lite")
|
||||
if ret.steerControlType != structs.CarParams.SteerControlType.angle and any(getattr(frogpilot_toggles, toggle, False) for toggle in toggles_to_check):
|
||||
if ret.steerControlType != structs.CarParams.SteerControlType.angle and any(getattr(starpilot_toggles, toggle, False) for toggle in toggles_to_check):
|
||||
CarInterfaceBase.configure_torque_tune(candidate, ret.lateralTuning)
|
||||
|
||||
return ret
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
@classmethod
|
||||
def get_frogpilot_params(cls, candidate: str, fingerprint: dict[int, dict[int, int]], car_fw: list[structs.CarParams.CarFw], CP: structs.CarParams, frogpilot_toggles: SimpleNamespace):
|
||||
fp_ret = custom.FrogPilotCarParams.new_message()
|
||||
def get_starpilot_params(cls, candidate: str, fingerprint: dict[int, dict[int, int]], car_fw: list[structs.CarParams.CarFw], CP: structs.CarParams, starpilot_toggles: SimpleNamespace):
|
||||
fp_ret = custom.StarPilotCarParams.new_message()
|
||||
|
||||
platform = PLATFORMS[candidate]
|
||||
|
||||
fp_ret.flags |= int(platform.config.flags)
|
||||
fp_ret.safetyConfigs = [custom.FrogPilotCarParams.SafetyConfig.new_message(safetyParam=config.safetyParam) for config in CP.safetyConfigs]
|
||||
fp_ret.safetyConfigs = [custom.StarPilotCarParams.SafetyConfig.new_message(safetyParam=config.safetyParam) for config in CP.safetyConfigs]
|
||||
|
||||
if platform not in MOCK:
|
||||
if platform in CHRYSLER:
|
||||
if candidate == CHRYSLER.RAM_HD_5TH_GEN:
|
||||
if 570 not in fingerprint[0]:
|
||||
fp_ret.flags |= ChryslerFrogPilotFlags.RAM_HD_ALT_BUTTONS.value
|
||||
fp_ret.flags |= ChryslerStarPilotFlags.RAM_HD_ALT_BUTTONS.value
|
||||
|
||||
elif platform in GM:
|
||||
fp_ret.canUsePedal = True
|
||||
@@ -217,7 +217,7 @@ class CarInterfaceBase(ABC):
|
||||
fp_ret.isHDA2 = hda2
|
||||
|
||||
if CP.flags & HyundaiFlags.HAS_LDA_BUTTON:
|
||||
fp_ret.safetyConfigs[-1].safetyParam |= HyundaiFrogPilotSafetyFlags.HAS_LDA_BUTTON.value
|
||||
fp_ret.safetyConfigs[-1].safetyParam |= HyundaiStarPilotSafetyFlags.HAS_LDA_BUTTON.value
|
||||
|
||||
elif platform in TOYOTA:
|
||||
fp_ret.canUsePedal = not CP.autoResumeSng
|
||||
@@ -227,11 +227,11 @@ class CarInterfaceBase(ABC):
|
||||
fp_ret.flags |= ToyotaFlags.RADAR_CAN_FILTER.value
|
||||
|
||||
if 0x2FF in fingerprint[0] or (0x2AA in fingerprint[0] and candidate in NO_DSU_CAR):
|
||||
fp_ret.flags |= ToyotaFrogPilotFlags.SMART_DSU.value
|
||||
fp_ret.flags |= ToyotaStarPilotFlags.SMART_DSU.value
|
||||
|
||||
if candidate == TOYOTA.TOYOTA_PRIUS:
|
||||
if 0x23 in fingerprint[0]:
|
||||
fp_ret.flags |= ToyotaFrogPilotFlags.ZSS.value
|
||||
fp_ret.flags |= ToyotaStarPilotFlags.ZSS.value
|
||||
|
||||
return fp_ret
|
||||
|
||||
@@ -313,14 +313,14 @@ class CarInterfaceBase(ABC):
|
||||
tune.torque.latAccelOffset = 0.0
|
||||
tune.torque.steeringAngleDeadzoneDeg = steering_angle_deadzone_deg
|
||||
|
||||
def update(self, can_packets: list[tuple[int, list[CanData]]], frogpilot_toggles: SimpleNamespace) -> structs.CarState:
|
||||
def update(self, can_packets: list[tuple[int, list[CanData]]], starpilot_toggles: SimpleNamespace) -> structs.CarState:
|
||||
# parse can
|
||||
for cp in self.can_parsers.values():
|
||||
if cp is not None:
|
||||
cp.update(can_packets)
|
||||
|
||||
# get CarState
|
||||
ret, fp_ret = self.CS.update(self.can_parsers, frogpilot_toggles)
|
||||
ret, fp_ret = self.CS.update(self.can_parsers, starpilot_toggles)
|
||||
|
||||
ret.canValid = all(cp.can_valid for cp in self.can_parsers.values())
|
||||
ret.canTimeout = any(cp.bus_timeout for cp in self.can_parsers.values())
|
||||
@@ -343,7 +343,7 @@ class CarInterfaceBase(ABC):
|
||||
# save for next iteration
|
||||
self.CS.out = ret
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
prev_distance_button = self.distance_button
|
||||
self.distance_button = self.params_memory.get_bool("OnroadDistanceButtonPressed")
|
||||
if self.distance_button != prev_distance_button:
|
||||
@@ -359,7 +359,7 @@ class CarInterfaceBase(ABC):
|
||||
|
||||
|
||||
class CarStateBase(ABC):
|
||||
def __init__(self, CP: structs.CarParams, FPCP: custom.FrogPilotCarParams):
|
||||
def __init__(self, CP: structs.CarParams, FPCP: custom.StarPilotCarParams):
|
||||
self.CP = CP
|
||||
self.car_fingerprint = CP.carFingerprint
|
||||
self.out = structs.CarState()
|
||||
@@ -383,7 +383,7 @@ class CarStateBase(ABC):
|
||||
K = get_kalman_gain(DT_CTRL, np.array(A), np.array(C), np.array(Q), R)
|
||||
self.v_ego_kf = KF1D(x0=x0, A=A, C=C[0], K=K)
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
self.FPCP = FPCP
|
||||
|
||||
self.CC: structs.CarControl = structs.CarControl.new_message()
|
||||
@@ -391,7 +391,7 @@ class CarStateBase(ABC):
|
||||
self.distance_button = False
|
||||
|
||||
@abstractmethod
|
||||
def update(self, can_parsers, frogpilot_toggles) -> structs.CarState:
|
||||
def update(self, can_parsers, starpilot_toggles) -> structs.CarState:
|
||||
pass
|
||||
|
||||
def parse_wheel_speeds(self, cs, fl, fr, rl, rr, unit=CV.KPH_TO_MS):
|
||||
|
||||
@@ -15,7 +15,7 @@ class CarController(CarControllerBase):
|
||||
self.packer = CANPacker(dbc_names[Bus.pt])
|
||||
self.brake_counter = 0
|
||||
|
||||
def update(self, CC, CS, now_nanos, frogpilot_toggles):
|
||||
def update(self, CC, CS, now_nanos, starpilot_toggles):
|
||||
can_sends = []
|
||||
|
||||
apply_torque = 0
|
||||
|
||||
@@ -21,7 +21,7 @@ class CarState(CarStateBase):
|
||||
|
||||
self.distance_button = 0
|
||||
|
||||
def update(self, can_parsers, frogpilot_toggles) -> structs.CarState:
|
||||
def update(self, can_parsers, starpilot_toggles) -> structs.CarState:
|
||||
cp = can_parsers[Bus.pt]
|
||||
cp_cam = can_parsers[Bus.cam]
|
||||
|
||||
@@ -116,8 +116,8 @@ class CarState(CarStateBase):
|
||||
# TODO: add button types for inc and dec
|
||||
ret.buttonEvents = create_button_events(self.distance_button, prev_distance_button, {1: ButtonType.gapAdjustCruise})
|
||||
|
||||
# FrogPilot variables
|
||||
fp_ret = custom.FrogPilotCarState.new_message()
|
||||
# StarPilot variables
|
||||
fp_ret = custom.StarPilotCarState.new_message()
|
||||
|
||||
return ret, fp_ret
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ class CarInterface(CarInterfaceBase):
|
||||
|
||||
ret.centerToFront = ret.wheelbase * 0.41
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
ret.enableBsm = True
|
||||
|
||||
return ret
|
||||
|
||||
@@ -2,5 +2,5 @@ from opendbc.car.interfaces import CarControllerBase
|
||||
|
||||
|
||||
class CarController(CarControllerBase):
|
||||
def update(self, CC, CS, now_nanos, frogpilot_toggles):
|
||||
def update(self, CC, CS, now_nanos, starpilot_toggles):
|
||||
return CC.actuators.as_builder(), []
|
||||
|
||||
@@ -5,4 +5,4 @@ from opendbc.car.interfaces import CarStateBase
|
||||
|
||||
class CarState(CarStateBase):
|
||||
def update(self, *_) -> structs.CarState:
|
||||
return structs.CarState(), custom.FrogPilotCarState()
|
||||
return structs.CarState(), custom.StarPilotCarState()
|
||||
|
||||
@@ -17,7 +17,7 @@ class CarController(CarControllerBase):
|
||||
|
||||
self.packer = CANPacker(dbc_names[Bus.pt])
|
||||
|
||||
def update(self, CC, CS, now_nanos, frogpilot_toggles):
|
||||
def update(self, CC, CS, now_nanos, starpilot_toggles):
|
||||
actuators = CC.actuators
|
||||
hud_control = CC.hudControl
|
||||
pcm_cancel_cmd = CC.cruiseControl.cancel
|
||||
|
||||
@@ -25,10 +25,10 @@ class CarState(CarStateBase):
|
||||
|
||||
self.distance_button = 0
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
self.lkas_button = 0
|
||||
|
||||
def update(self, can_parsers, frogpilot_toggles) -> structs.CarState:
|
||||
def update(self, can_parsers, starpilot_toggles) -> structs.CarState:
|
||||
cp = can_parsers[Bus.pt]
|
||||
cp_cam = can_parsers[Bus.cam]
|
||||
cp_adas = can_parsers[Bus.adas]
|
||||
@@ -132,8 +132,8 @@ class CarState(CarStateBase):
|
||||
|
||||
buttonEvents = create_button_events(self.distance_button, prev_distance_button, {1: ButtonType.gapAdjustCruise})
|
||||
|
||||
# FrogPilot variables
|
||||
fp_ret = custom.FrogPilotCarState.new_message()
|
||||
# StarPilot variables
|
||||
fp_ret = custom.StarPilotCarState.new_message()
|
||||
|
||||
self.prev_lkas_button = self.lkas_button
|
||||
self.lkas_button = ret.invalidLkasSetting
|
||||
|
||||
@@ -13,7 +13,7 @@ class CarController(CarControllerBase):
|
||||
self.apply_angle_last = 0
|
||||
self.status = 2
|
||||
|
||||
def update(self, CC, CS, now_nanos, frogpilot_toggles):
|
||||
def update(self, CC, CS, now_nanos, starpilot_toggles):
|
||||
can_sends = []
|
||||
actuators = CC.actuators
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ TransmissionType = structs.CarParams.TransmissionType
|
||||
|
||||
|
||||
class CarState(CarStateBase):
|
||||
def update(self, can_parsers, frogpilot_toggles) -> structs.CarState:
|
||||
def update(self, can_parsers, starpilot_toggles) -> structs.CarState:
|
||||
cp = can_parsers[Bus.main]
|
||||
cp_adas = can_parsers[Bus.adas]
|
||||
cp_cam = can_parsers[Bus.cam]
|
||||
@@ -64,8 +64,8 @@ class CarState(CarStateBase):
|
||||
ret.doorOpen = any((cp_cam.vl['Dat_BSI']['DRIVER_DOOR'], cp_cam.vl['Dat_BSI']['PASSENGER_DOOR']))
|
||||
ret.seatbeltUnlatched = cp_cam.vl['RESTRAINTS']['DRIVER_SEATBELT'] != 2
|
||||
|
||||
# FrogPilot variables
|
||||
fp_ret = custom.FrogPilotCarState.new_message()
|
||||
# StarPilot variables
|
||||
fp_ret = custom.StarPilotCarState.new_message()
|
||||
|
||||
return ret, fp_ret
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ class CarController(CarControllerBase):
|
||||
|
||||
self.cancel_frames = 0
|
||||
|
||||
def update(self, CC, CS, now_nanos, frogpilot_toggles):
|
||||
def update(self, CC, CS, now_nanos, starpilot_toggles):
|
||||
actuators = CC.actuators
|
||||
can_sends = []
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ class CarState(CarStateBase):
|
||||
self.sccm_wheel_touch = None
|
||||
self.vdm_adas_status = None
|
||||
|
||||
def update(self, can_parsers, frogpilot_toggles) -> structs.CarState:
|
||||
def update(self, can_parsers, starpilot_toggles) -> structs.CarState:
|
||||
cp = can_parsers[Bus.pt]
|
||||
cp_cam = can_parsers[Bus.cam]
|
||||
cp_adas = can_parsers[Bus.adas]
|
||||
@@ -93,8 +93,8 @@ class CarState(CarStateBase):
|
||||
self.sccm_wheel_touch = copy.copy(cp.vl["SCCM_WheelTouch"])
|
||||
self.vdm_adas_status = copy.copy(cp.vl["VDM_AdasSts"])
|
||||
|
||||
# FrogPilot variables
|
||||
fp_ret = custom.FrogPilotCarState.new_message()
|
||||
# StarPilot variables
|
||||
fp_ret = custom.StarPilotCarState.new_message()
|
||||
|
||||
return ret, fp_ret
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ from opendbc.car.subaru.values import DBC, GLOBAL_ES_ADDR, CanBus, CarController
|
||||
MAX_STEER_RATE = 25 # deg/s
|
||||
MAX_STEER_RATE_FRAMES = 7 # tx control frames needed before torque can be cut
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
_SNG_ACC_MIN_DIST = 3
|
||||
_SNG_ACC_MAX_DIST = 4.5
|
||||
|
||||
@@ -27,7 +27,7 @@ class CarController(CarControllerBase):
|
||||
self.p = CarControllerParams(CP)
|
||||
self.packer = CANPacker(DBC[CP.carFingerprint][Bus.pt])
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
self.manual_hold = False
|
||||
self.prev_standstill = False
|
||||
self.sng_acc_resume = False
|
||||
@@ -37,7 +37,7 @@ class CarController(CarControllerBase):
|
||||
self.sng_acc_resume_cnt = 0
|
||||
self.standstill_start = 0
|
||||
|
||||
def update(self, CC, CS, now_nanos, frogpilot_toggles):
|
||||
def update(self, CC, CS, now_nanos, starpilot_toggles):
|
||||
actuators = CC.actuators
|
||||
hud_control = CC.hudControl
|
||||
pcm_cancel_cmd = CC.cruiseControl.cancel
|
||||
@@ -71,9 +71,9 @@ class CarController(CarControllerBase):
|
||||
|
||||
self.apply_torque_last = apply_torque
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
# *** stop and go ***
|
||||
if frogpilot_toggles.subaru_sng:
|
||||
if starpilot_toggles.subaru_sng:
|
||||
throttle_cmd, speed_cmd = self.stop_and_go(CC, CS)
|
||||
|
||||
# *** longitudinal ***
|
||||
@@ -112,8 +112,8 @@ class CarController(CarControllerBase):
|
||||
|
||||
can_sends.append(subarucan.create_preglobal_es_distance(self.packer, cruise_button, CS.es_distance_msg))
|
||||
|
||||
# FrogPilot variables
|
||||
if frogpilot_toggles.subaru_sng:
|
||||
# StarPilot variables
|
||||
if starpilot_toggles.subaru_sng:
|
||||
can_sends.append(subarucan.create_preglobal_throttle(self.packer, CS.throttle_msg["COUNTER"] + 1, CS.throttle_msg, throttle_cmd))
|
||||
else:
|
||||
if self.frame % 10 == 0:
|
||||
@@ -127,8 +127,8 @@ class CarController(CarControllerBase):
|
||||
if self.CP.flags & SubaruFlags.SEND_INFOTAINMENT:
|
||||
can_sends.append(subarucan.create_es_infotainment(self.packer, self.frame // 10, CS.es_infotainment_msg, hud_control.visualAlert))
|
||||
|
||||
# FrogPilot variables
|
||||
if frogpilot_toggles.subaru_sng:
|
||||
# StarPilot variables
|
||||
if starpilot_toggles.subaru_sng:
|
||||
can_sends.append(subarucan.create_throttle(self.packer, CS.throttle_msg["COUNTER"] + 1, CS.throttle_msg, throttle_cmd))
|
||||
if self.frame % 2 == 0:
|
||||
can_sends.append(subarucan.create_brake_pedal(self.packer, self.frame // 2, CS.brake_pedal_msg, speed_cmd, pcm_cancel_cmd))
|
||||
@@ -171,7 +171,7 @@ class CarController(CarControllerBase):
|
||||
self.frame += 1
|
||||
return new_actuators, can_sends
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
def stop_and_go(self, CC, CS, speed_cmd=False, throttle_cmd=False):
|
||||
if self.CP.flags & SubaruFlags.PREGLOBAL:
|
||||
trigger_resume = CC.enabled
|
||||
|
||||
@@ -16,7 +16,7 @@ class CarState(CarStateBase):
|
||||
|
||||
self.angle_rate_calulator = CanSignalRateCalculator(50)
|
||||
|
||||
def update(self, can_parsers, frogpilot_toggles) -> structs.CarState:
|
||||
def update(self, can_parsers, starpilot_toggles) -> structs.CarState:
|
||||
cp = can_parsers[Bus.pt]
|
||||
cp_cam = can_parsers[Bus.cam]
|
||||
cp_alt = can_parsers[Bus.alt]
|
||||
@@ -124,10 +124,10 @@ class CarState(CarStateBase):
|
||||
if self.CP.flags & SubaruFlags.SEND_INFOTAINMENT:
|
||||
self.es_infotainment_msg = copy.copy(cp_cam.vl["ES_Infotainment"])
|
||||
|
||||
# FrogPilot variables
|
||||
fp_ret = custom.FrogPilotCarState.new_message()
|
||||
# StarPilot variables
|
||||
fp_ret = custom.StarPilotCarState.new_message()
|
||||
|
||||
if frogpilot_toggles.subaru_sng:
|
||||
if starpilot_toggles.subaru_sng:
|
||||
self.brake_pedal_msg = copy.copy(cp.vl["Brake_Pedal"])
|
||||
self.car_follow = cp_es_distance.vl["ES_Distance"]["Car_Follow"]
|
||||
self.close_distance = cp_es_distance.vl["ES_Distance"]["Close_Distance"]
|
||||
|
||||
@@ -336,7 +336,7 @@ def subaru_checksum(address: int, sig, d: bytearray) -> int:
|
||||
return s & 0xFF
|
||||
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
def create_brake_pedal(packer, frame, brake_pedal_msg, speed_cmd, brake_cmd):
|
||||
values = {s: brake_pedal_msg[s] for s in sorted([
|
||||
"Brake_Lights",
|
||||
|
||||
@@ -26,7 +26,7 @@ class CarControllerParams:
|
||||
elif CP.carFingerprint == CAR.SUBARU_IMPREZA_2020:
|
||||
self.STEER_DELTA_UP = 35
|
||||
self.STEER_MAX = 1439
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
elif CP.carFingerprint == CAR.SUBARU_IMPREZA:
|
||||
self.STEER_MAX = 3071
|
||||
else:
|
||||
|
||||
@@ -25,7 +25,7 @@ class CarController(CarControllerBase):
|
||||
# Vehicle model used for lateral limiting
|
||||
self.VM = VehicleModel(get_safety_CP())
|
||||
|
||||
def update(self, CC, CS, now_nanos, frogpilot_toggles):
|
||||
def update(self, CC, CS, now_nanos, starpilot_toggles):
|
||||
actuators = CC.actuators
|
||||
can_sends = []
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ class CarState(CarStateBase):
|
||||
self.autopark_prev = autopark_now
|
||||
self.cruise_enabled_prev = cruise_enabled
|
||||
|
||||
def update(self, can_parsers, frogpilot_toggles) -> structs.CarState:
|
||||
def update(self, can_parsers, starpilot_toggles) -> structs.CarState:
|
||||
cp_party = can_parsers[Bus.party]
|
||||
cp_ap_party = can_parsers[Bus.ap_party]
|
||||
ret = structs.CarState()
|
||||
@@ -118,8 +118,8 @@ class CarState(CarStateBase):
|
||||
# Messages needed by carcontroller
|
||||
self.das_control = copy.copy(cp_ap_party.vl["DAS_control"])
|
||||
|
||||
# FrogPilot variables
|
||||
fp_ret = custom.FrogPilotCarState.new_message()
|
||||
# StarPilot variables
|
||||
fp_ret = custom.StarPilotCarState.new_message()
|
||||
|
||||
return ret, fp_ret
|
||||
|
||||
|
||||
@@ -81,4 +81,4 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"]
|
||||
"VOLKSWAGEN_PASSAT_MK8" = [1.3432120736752917, 1.7087275587362314, 0.19444383787326647]
|
||||
"VOLKSWAGEN_TIGUAN_MK2" = [0.9711965500094828, 1.0001565939459098, 0.1465626137072916]
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
|
||||
@@ -103,5 +103,5 @@ legend = ["LAT_ACCEL_FACTOR", "MAX_LAT_ACCEL_MEASURED", "FRICTION"]
|
||||
"GMC_YUKON_CC" = "CHEVROLET_SILVERADO"
|
||||
"CHEVROLET_TRAILBLAZER_CC" = "CHEVROLET_TRAILBLAZER"
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
"CHEVROLET_TRAX" = "CHEVROLET_VOLT"
|
||||
|
||||
@@ -35,7 +35,7 @@ MAX_STEER_RATE_FRAMES = 18 # tx control frames needed before torque can be cut
|
||||
# EPS allows user torque above threshold for 50 frames before permanently faulting
|
||||
MAX_USER_TORQUE = 500
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
PARK = structs.CarState.GearShifter.park
|
||||
|
||||
# Lock / unlock door commands - Credit goes to AlexandreSato!
|
||||
@@ -86,10 +86,10 @@ class CarController(CarControllerBase):
|
||||
self.secoc_acc_message_counter = 0
|
||||
self.secoc_prev_reset_counter = 0
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
self.doors_locked = False
|
||||
|
||||
def update(self, CC, CS, now_nanos, frogpilot_toggles):
|
||||
def update(self, CC, CS, now_nanos, starpilot_toggles):
|
||||
actuators = CC.actuators
|
||||
stopping = actuators.longControlState == LongCtrlState.stopping
|
||||
hud_control = CC.hudControl
|
||||
@@ -183,7 +183,7 @@ class CarController(CarControllerBase):
|
||||
|
||||
# on entering standstill, send standstill request for older TSS-P cars that aren't designed to stay engaged at a stop
|
||||
if self.CP.carFingerprint not in NO_STOP_TIMER_CAR:
|
||||
if CS.out.standstill and not self.last_standstill and not frogpilot_toggles.sng_hack:
|
||||
if CS.out.standstill and not self.last_standstill and not starpilot_toggles.sng_hack:
|
||||
self.standstill_req = True
|
||||
if CS.pcm_acc_status != 8:
|
||||
# pcm entered standstill or it's disabled
|
||||
@@ -194,7 +194,7 @@ class CarController(CarControllerBase):
|
||||
# brakes can take a while to ramp up causing a lurch forward. prevent resume press until planner wants to move.
|
||||
# don't use CC.cruiseControl.resume since it is gated on CS.cruiseState.standstill which goes false for 3s after resume press
|
||||
# TODO: hybrids do not have this issue and can stay stopped after resume press, whitelist them
|
||||
should_resume = actuators.accel > 0 or frogpilot_toggles.sng_hack
|
||||
should_resume = actuators.accel > 0 or starpilot_toggles.sng_hack
|
||||
if should_resume:
|
||||
self.standstill_req = False
|
||||
|
||||
@@ -241,7 +241,7 @@ class CarController(CarControllerBase):
|
||||
self.aego.update(a_ego_blended)
|
||||
j_ego = (self.aego.x - prev_aego) / (DT_CTRL * 3)
|
||||
|
||||
if frogpilot_toggles.frogsgomoo_tweak:
|
||||
if starpilot_toggles.frogsgomoo_tweak:
|
||||
future_t = float(np.interp(CS.out.vEgo, [2., 5.], [0.35, 1.0]))
|
||||
else:
|
||||
future_t = float(np.interp(CS.out.vEgo, [2., 5.], [0.25, 0.5]))
|
||||
@@ -279,7 +279,7 @@ class CarController(CarControllerBase):
|
||||
|
||||
main_accel_cmd = 0. if self.CP.flags & ToyotaFlags.SECOC.value else pcm_accel_cmd
|
||||
can_sends.append(toyotacan.create_accel_command(self.packer, main_accel_cmd, pcm_cancel_cmd, self.permit_braking, self.standstill_req, lead,
|
||||
CS.acc_type, fcw_alert, self.distance_button, frogpilot_toggles.reverse_cruise_increase))
|
||||
CS.acc_type, fcw_alert, self.distance_button, starpilot_toggles.reverse_cruise_increase))
|
||||
if self.CP.flags & ToyotaFlags.SECOC.value:
|
||||
acc_cmd_2 = toyotacan.create_accel_command_2(self.packer, pcm_accel_cmd)
|
||||
acc_cmd_2 = add_mac(self.secoc_key,
|
||||
@@ -298,7 +298,7 @@ class CarController(CarControllerBase):
|
||||
if self.CP.carFingerprint in UNSUPPORTED_DSU_CAR:
|
||||
can_sends.append(toyotacan.create_acc_cancel_command(self.packer))
|
||||
else:
|
||||
can_sends.append(toyotacan.create_accel_command(self.packer, 0, pcm_cancel_cmd, True, False, lead, CS.acc_type, False, self.distance_button, frogpilot_toggles.reverse_cruise_increase))
|
||||
can_sends.append(toyotacan.create_accel_command(self.packer, 0, pcm_cancel_cmd, True, False, lead, CS.acc_type, False, self.distance_button, starpilot_toggles.reverse_cruise_increase))
|
||||
|
||||
# *** hud ui ***
|
||||
if self.CP.carFingerprint != CAR.TOYOTA_PRIUS_V:
|
||||
@@ -334,13 +334,13 @@ class CarController(CarControllerBase):
|
||||
|
||||
self.frame += 1
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
if not self.doors_locked and CS.out.gearShifter != PARK:
|
||||
if frogpilot_toggles.lock_doors:
|
||||
if starpilot_toggles.lock_doors:
|
||||
can_sends.append(CanData(0x750, LOCK_CMD, 0))
|
||||
self.doors_locked = True
|
||||
elif self.doors_locked and CS.out.gearShifter == PARK:
|
||||
if frogpilot_toggles.unlock_doors:
|
||||
if starpilot_toggles.unlock_doors:
|
||||
can_sends.append(CanData(0x750, UNLOCK_CMD, 0))
|
||||
self.doors_locked = False
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ from opendbc.car import Bus, DT_CTRL, create_button_events, structs
|
||||
from opendbc.car.common.conversions import Conversions as CV
|
||||
from opendbc.car.common.filter_simple import FirstOrderFilter
|
||||
from opendbc.car.interfaces import CarStateBase
|
||||
from opendbc.car.toyota.values import ToyotaFlags, ToyotaFrogPilotFlags, CAR, DBC, STEER_THRESHOLD, NO_STOP_TIMER_CAR, \
|
||||
from opendbc.car.toyota.values import ToyotaFlags, ToyotaStarPilotFlags, CAR, DBC, STEER_THRESHOLD, NO_STOP_TIMER_CAR, \
|
||||
TSS2_CAR, RADAR_ACC_CAR, EPS_SCALE, UNSUPPORTED_DSU_CAR, \
|
||||
SECOC_CAR
|
||||
|
||||
@@ -67,17 +67,17 @@ class CarState(CarStateBase):
|
||||
self.gvc = 0.0
|
||||
self.secoc_synchronization = None
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
self.latActive_previous = False
|
||||
self.needs_angle_offset_zss = False
|
||||
|
||||
self.angle_offset_zss = 0
|
||||
|
||||
self.has_can_filter = self.FPCP.flags & ToyotaFrogPilotFlags.RADAR_CAN_FILTER.value
|
||||
self.has_SDSU = self.FPCP.flags & ToyotaFrogPilotFlags.SMART_DSU.value
|
||||
self.has_ZSS = self.FPCP.flags & ToyotaFrogPilotFlags.ZSS.value
|
||||
self.has_can_filter = self.FPCP.flags & ToyotaStarPilotFlags.RADAR_CAN_FILTER.value
|
||||
self.has_SDSU = self.FPCP.flags & ToyotaStarPilotFlags.SMART_DSU.value
|
||||
self.has_ZSS = self.FPCP.flags & ToyotaStarPilotFlags.ZSS.value
|
||||
|
||||
def update(self, can_parsers, frogpilot_toggles) -> structs.CarState:
|
||||
def update(self, can_parsers, starpilot_toggles) -> structs.CarState:
|
||||
cp = can_parsers[Bus.pt]
|
||||
cp_cam = can_parsers[Bus.cam]
|
||||
|
||||
@@ -111,7 +111,7 @@ class CarState(CarStateBase):
|
||||
cp.vl["WHEEL_SPEEDS"]["WHEEL_SPEED_RL"],
|
||||
cp.vl["WHEEL_SPEEDS"]["WHEEL_SPEED_RR"],
|
||||
)
|
||||
ret.vEgoCluster = ret.vEgo * frogpilot_toggles.cluster_offset
|
||||
ret.vEgoCluster = ret.vEgo * starpilot_toggles.cluster_offset
|
||||
|
||||
ret.standstill = abs(ret.vEgoRaw) < 1e-3
|
||||
|
||||
@@ -222,8 +222,8 @@ class CarState(CarStateBase):
|
||||
|
||||
buttonEvents += create_button_events(self.distance_button, prev_distance_button, {1: ButtonType.gapAdjustCruise})
|
||||
|
||||
# FrogPilot variables
|
||||
fp_ret = custom.FrogPilotCarState.new_message()
|
||||
# StarPilot variables
|
||||
fp_ret = custom.StarPilotCarState.new_message()
|
||||
|
||||
if self.has_SDSU and not self.has_can_filter:
|
||||
prev_distance_button = self.distance_button
|
||||
|
||||
@@ -80,8 +80,8 @@ class ToyotaFlags(IntFlag):
|
||||
SNG_WITHOUT_DSU_DEPRECATED = 512
|
||||
|
||||
|
||||
# FrogPilot variables
|
||||
class ToyotaFrogPilotFlags(IntFlag):
|
||||
# StarPilot variables
|
||||
class ToyotaStarPilotFlags(IntFlag):
|
||||
RADAR_CAN_FILTER = 1
|
||||
SMART_DSU = 2
|
||||
ZSS = 4
|
||||
|
||||
@@ -32,7 +32,7 @@ class CarController(CarControllerBase):
|
||||
self.hca_frame_timer_running = 0
|
||||
self.hca_frame_same_torque = 0
|
||||
|
||||
def update(self, CC, CS, now_nanos, frogpilot_toggles):
|
||||
def update(self, CC, CS, now_nanos, starpilot_toggles):
|
||||
actuators = CC.actuators
|
||||
hud_control = CC.hudControl
|
||||
can_sends = []
|
||||
@@ -88,7 +88,7 @@ class CarController(CarControllerBase):
|
||||
acc_control = self.CCS.acc_control_value(CS.out.cruiseState.available, CS.out.accFaulted, CC.longActive)
|
||||
accel = float(np.clip(actuators.accel, self.CCP.ACCEL_MIN, self.CCP.ACCEL_MAX) if CC.longActive else 0)
|
||||
stopping = actuators.longControlState == LongCtrlState.stopping
|
||||
starting = actuators.longControlState == LongCtrlState.pid and (CS.esp_hold_confirmation or CS.out.vEgo < frogpilot_toggles.vEgoStopping)
|
||||
starting = actuators.longControlState == LongCtrlState.pid and (CS.esp_hold_confirmation or CS.out.vEgo < starpilot_toggles.vEgoStopping)
|
||||
can_sends.extend(self.CCS.create_acc_accel_control(self.packer_pt, self.CAN.pt, CS.acc_type, CC.longActive, accel,
|
||||
acc_control, stopping, starting, CS.esp_hold_confirmation))
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ class CarState(CarStateBase):
|
||||
|
||||
return button_events
|
||||
|
||||
def update(self, can_parsers, frogpilot_toggles) -> structs.CarState:
|
||||
def update(self, can_parsers, starpilot_toggles) -> structs.CarState:
|
||||
pt_cp = can_parsers[Bus.pt]
|
||||
cam_cp = can_parsers[Bus.cam]
|
||||
ext_cp = pt_cp if self.CP.networkLocation == NetworkLocation.fwdCamera else cam_cp
|
||||
@@ -139,8 +139,8 @@ class CarState(CarStateBase):
|
||||
|
||||
self.frame += 1
|
||||
|
||||
# FrogPilot variables
|
||||
fp_ret = custom.FrogPilotCarState.new_message()
|
||||
# StarPilot variables
|
||||
fp_ret = custom.StarPilotCarState.new_message()
|
||||
|
||||
return ret, fp_ret
|
||||
|
||||
@@ -234,8 +234,8 @@ class CarState(CarStateBase):
|
||||
|
||||
self.frame += 1
|
||||
|
||||
# FrogPilot variables
|
||||
fp_ret = custom.FrogPilotCarState.new_message()
|
||||
# StarPilot variables
|
||||
fp_ret = custom.StarPilotCarState.new_message()
|
||||
|
||||
return ret, fp_ret
|
||||
|
||||
|
||||
@@ -9,6 +9,6 @@ class ALTERNATIVE_EXPERIENCE:
|
||||
RAISE_LONGITUDINAL_LIMITS_TO_ISO_MAX = 8
|
||||
ALLOW_AEB = 16
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
ALWAYS_ON_LATERAL = 32
|
||||
GM_REMAP_CANCEL_TO_DISTANCE = 64
|
||||
|
||||
@@ -268,7 +268,7 @@ extern bool acc_main_on; // referred to as "ACC off" in ISO 15622:2018
|
||||
extern int cruise_button_prev;
|
||||
extern bool safety_rx_checks_invalid;
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
extern bool aol_allowed;
|
||||
extern bool lkas_button_prev;
|
||||
extern bool lkas_on;
|
||||
@@ -317,7 +317,7 @@ extern bool gm_remote_start_boots_comma;
|
||||
// This flag allows AEB to be commanded from openpilot.
|
||||
#define ALT_EXP_ALLOW_AEB 16
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
#define ALT_EXP_ALWAYS_ON_LATERAL 32
|
||||
#define ALT_EXP_GM_REMAP_CANCEL_TO_DISTANCE 64
|
||||
|
||||
|
||||
@@ -79,7 +79,7 @@ static void chrysler_rx_hook(const CANPacket_t *msg) {
|
||||
bool cruise_engaged = GET_BIT(msg, 21U);
|
||||
pcm_cruise_check(cruise_engaged);
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
acc_main_on = GET_BIT(msg, 20U);
|
||||
}
|
||||
|
||||
|
||||
@@ -159,7 +159,7 @@ static void ford_rx_hook(const CANPacket_t *msg) {
|
||||
bool cruise_engaged = (cruise_state == 4U) || (cruise_state == 5U);
|
||||
pcm_cruise_check(cruise_engaged);
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
acc_main_on = (cruise_state == 3U) || cruise_engaged;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,7 +350,7 @@ static void gm_rx_hook(const CANPacket_t *msg) {
|
||||
}
|
||||
}
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
if (msg->addr == 0xC9U) {
|
||||
acc_main_on = GET_BIT(msg, 29U);
|
||||
}
|
||||
|
||||
@@ -52,7 +52,7 @@ const LongitudinalLimits HYUNDAI_LONG_LIMITS = {
|
||||
#define HYUNDAI_FCEV_GAS_ADDR_CHECK \
|
||||
{.msg = {{0x91, 0, 8, 100U, .ignore_checksum = true, .ignore_counter = true, .ignore_quality_flag = true}, { 0 }, { 0 }}}, \
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
#define HYUNDAI_LDA_BUTTON_ADDR_CHECK \
|
||||
{.msg = {{0x391, 0, 8, 100U, .ignore_checksum = true, .ignore_counter = true, .ignore_quality_flag = true}, { 0 }, { 0 }}}, \
|
||||
|
||||
@@ -178,7 +178,7 @@ static void hyundai_rx_hook(const CANPacket_t *msg) {
|
||||
brake_pressed = ((msg->data[5] >> 5U) & 0x3U) == 0x2U;
|
||||
}
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
if (msg->addr == 0x391U) {
|
||||
hyundai_lkas_button_check(GET_BIT(msg, 4U));
|
||||
}
|
||||
@@ -288,7 +288,7 @@ static safety_config hyundai_init(uint16_t param) {
|
||||
HYUNDAI_FCEV_GAS_ADDR_CHECK
|
||||
};
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
static RxCheck hyundai_long_rx_checks_lda[] = {
|
||||
HYUNDAI_COMMON_RX_CHECKS(false)
|
||||
HYUNDAI_LDA_BUTTON_ADDR_CHECK
|
||||
@@ -325,7 +325,7 @@ static safety_config hyundai_init(uint16_t param) {
|
||||
HYUNDAI_SCC12_ADDR_CHECK(2)
|
||||
};
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
static RxCheck hyundai_cam_scc_rx_checks_lda[] = {
|
||||
HYUNDAI_COMMON_RX_CHECKS(false)
|
||||
HYUNDAI_SCC12_ADDR_CHECK(2)
|
||||
@@ -349,7 +349,7 @@ static safety_config hyundai_init(uint16_t param) {
|
||||
HYUNDAI_FCEV_GAS_ADDR_CHECK
|
||||
};
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
static RxCheck hyundai_rx_checks_lda[] = {
|
||||
HYUNDAI_COMMON_RX_CHECKS(false)
|
||||
HYUNDAI_SCC12_ADDR_CHECK(0)
|
||||
|
||||
@@ -89,13 +89,13 @@ static void hyundai_canfd_rx_hook(const CANPacket_t *msg) {
|
||||
cruise_button = msg->data[2] & 0x7U;
|
||||
main_button = GET_BIT(msg, 19U);
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
hyundai_lkas_button_check(GET_BIT(msg, 23U));
|
||||
} else {
|
||||
cruise_button = (msg->data[4] >> 4) & 0x7U;
|
||||
main_button = GET_BIT(msg, 34U);
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
hyundai_lkas_button_check(GET_BIT(msg, 39U));
|
||||
}
|
||||
hyundai_common_cruise_buttons_check(cruise_button, main_button);
|
||||
|
||||
@@ -42,7 +42,7 @@ bool hyundai_fcev_gas_signal = false;
|
||||
extern bool hyundai_alt_limits_2;
|
||||
bool hyundai_alt_limits_2 = false;
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
extern bool hyundai_has_lda_button;
|
||||
bool hyundai_has_lda_button = false;
|
||||
|
||||
@@ -57,7 +57,7 @@ void hyundai_common_init(uint16_t param) {
|
||||
const uint16_t HYUNDAI_PARAM_FCEV_GAS = 256;
|
||||
const uint16_t HYUNDAI_PARAM_ALT_LIMITS_2 = 512;
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
const int HYUNDAI_PARAM_HAS_LDA_BUTTON = 1024;
|
||||
|
||||
hyundai_ev_gas_signal = GET_FLAG(param, HYUNDAI_PARAM_EV_GAS);
|
||||
@@ -68,7 +68,7 @@ void hyundai_common_init(uint16_t param) {
|
||||
hyundai_fcev_gas_signal = GET_FLAG(param, HYUNDAI_PARAM_FCEV_GAS);
|
||||
hyundai_alt_limits_2 = GET_FLAG(param, HYUNDAI_PARAM_ALT_LIMITS_2);
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
hyundai_has_lda_button = GET_FLAG(param, HYUNDAI_PARAM_HAS_LDA_BUTTON);
|
||||
|
||||
hyundai_last_button_interaction = HYUNDAI_PREV_BUTTON_SAMPLES;
|
||||
@@ -121,7 +121,7 @@ void hyundai_common_cruise_buttons_check(const int cruise_button, const bool mai
|
||||
cruise_button_prev = cruise_button;
|
||||
}
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
if (main_button && !main_button_prev) {
|
||||
acc_main_on = !acc_main_on;
|
||||
}
|
||||
@@ -155,7 +155,7 @@ uint32_t hyundai_common_canfd_compute_checksum(const CANPacket_t *msg) {
|
||||
}
|
||||
#endif
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
void hyundai_lkas_button_check(const bool lkas_button) {
|
||||
if (lkas_button && !lkas_button_prev) {
|
||||
lkas_on = !lkas_on;
|
||||
|
||||
@@ -35,7 +35,7 @@ static void mazda_rx_hook(const CANPacket_t *msg) {
|
||||
bool cruise_engaged = msg->data[0] & 0x8U;
|
||||
pcm_cruise_check(cruise_engaged);
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
acc_main_on = GET_BIT(msg, 17U);
|
||||
}
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ static void nissan_rx_hook(const CANPacket_t *msg) {
|
||||
pcm_cruise_check(cruise_engaged);
|
||||
}
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
if ((msg->addr == 0x1B6U) && (msg->bus == (nissan_alt_eps ? 2U : 1U))) {
|
||||
acc_main_on = GET_BIT(msg, 36U);
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
#define PSA_DAT_BSI 1042U // RX from BSI, brake
|
||||
#define PSA_LANE_KEEP_ASSIST 1010U // TX from OP, EPS
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
#define PSA_HS2_DYN1_MDD_ETAT_2B6 694U // RX from BSI, ACC status
|
||||
|
||||
// CAN bus
|
||||
@@ -24,7 +24,7 @@ static uint8_t psa_get_counter(const CANPacket_t *msg) {
|
||||
cnt = (msg->data[3] >> 4) & 0xFU;
|
||||
} else if (msg->addr == PSA_HS2_DYN_ABR_38D) {
|
||||
cnt = (msg->data[5] >> 4) & 0xFU;
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
} else if (msg->addr == PSA_HS2_DYN1_MDD_ETAT_2B6) {
|
||||
cnt = (msg->data[7] >> 4) & 0xFU;
|
||||
} else {
|
||||
@@ -38,7 +38,7 @@ static uint32_t psa_get_checksum(const CANPacket_t *msg) {
|
||||
chksum = msg->data[5] & 0xFU;
|
||||
} else if (msg->addr == PSA_HS2_DYN_ABR_38D) {
|
||||
chksum = msg->data[5] & 0xFU;
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
} else if (msg->addr == PSA_HS2_DYN1_MDD_ETAT_2B6) {
|
||||
chksum = msg->data[7] & 0xFU;
|
||||
} else {
|
||||
@@ -68,7 +68,7 @@ static uint32_t psa_compute_checksum(const CANPacket_t *msg) {
|
||||
chk = _psa_compute_checksum(msg, 0x4, 5);
|
||||
} else if (msg->addr == PSA_HS2_DYN_ABR_38D) {
|
||||
chk = _psa_compute_checksum(msg, 0x7, 5);
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
} else if (msg->addr == PSA_HS2_DYN1_MDD_ETAT_2B6) {
|
||||
chk = _psa_compute_checksum(msg, 0x3, 7);
|
||||
} else {
|
||||
@@ -96,7 +96,7 @@ static void psa_rx_hook(const CANPacket_t *msg) {
|
||||
if (msg->addr == PSA_HS2_DAT_MDD_CMD_452) {
|
||||
pcm_cruise_check((msg->data[2U] >> 7U) & 1U); // RVV_ACC_ACTIVATION_REQ
|
||||
}
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
if (msg->addr == PSA_HS2_DYN1_MDD_ETAT_2B6) {
|
||||
acc_main_on = (msg->data[3] & 0x0FU) > 2;
|
||||
}
|
||||
@@ -153,7 +153,7 @@ static safety_config psa_init(uint16_t param) {
|
||||
{.msg = {{PSA_DYN_CMM, PSA_MAIN_BUS, 8, 100U, .ignore_checksum = true, .ignore_counter = true, .ignore_quality_flag = true}, { 0 }, { 0 }}}, // gas pedal
|
||||
{.msg = {{PSA_DAT_BSI, PSA_CAM_BUS, 8, 20U, .ignore_checksum = true, .ignore_counter = true, .ignore_quality_flag = true}, { 0 }, { 0 }}}, // brake
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
{.msg = {{PSA_HS2_DYN1_MDD_ETAT_2B6, PSA_ADAS_BUS, 8, 20U, .max_counter = 15U, .ignore_quality_flag = true}, { 0 }, { 0 }}}, // ACC status
|
||||
};
|
||||
|
||||
|
||||
@@ -98,7 +98,7 @@ static void rivian_rx_hook(const CANPacket_t *msg) {
|
||||
const int feature_status = msg->data[2] >> 5U;
|
||||
pcm_cruise_check(feature_status == 1);
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
acc_main_on = (feature_status == 0) || (feature_status == 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,7 +110,7 @@ static void subaru_rx_hook(const CANPacket_t *msg) {
|
||||
bool cruise_engaged = (msg->data[5] >> 1) & 1U;
|
||||
pcm_cruise_check(cruise_engaged);
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
acc_main_on = GET_BIT(msg, 40U);
|
||||
}
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ static void subaru_preglobal_rx_hook(const CANPacket_t *msg) {
|
||||
bool cruise_engaged = (msg->data[6] >> 1) & 1U;
|
||||
pcm_cruise_check(cruise_engaged);
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
acc_main_on = GET_BIT(msg, 48U);
|
||||
}
|
||||
|
||||
|
||||
@@ -160,7 +160,7 @@ static void tesla_rx_hook(const CANPacket_t *msg) {
|
||||
|
||||
pcm_cruise_check(cruise_engaged);
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
acc_main_on = ((cruise_state == 1) || cruise_engaged) && !tesla_autopark;
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
#define TOYOTA_COMMON_RX_CHECKS(lta) \
|
||||
{.msg = {{ 0xaa, 0, 8, 83U, .ignore_checksum = true, .ignore_counter = true, .ignore_quality_flag = true}, { 0 }, { 0 }}}, \
|
||||
{.msg = {{0x260, 0, 8, 50U, .ignore_counter = true, .ignore_quality_flag=!(lta)}, { 0 }, { 0 }}}, \
|
||||
/* FrogPilot Variables */ \
|
||||
/* StarPilot Variables */ \
|
||||
{.msg = {{0x1D3, 0, 8, 33U, .ignore_checksum = true, .ignore_counter = true, .ignore_quality_flag = true}, { 0 }, { 0 }}}, \
|
||||
|
||||
#define TOYOTA_RX_CHECKS(lta) \
|
||||
@@ -162,7 +162,7 @@ static void toyota_rx_hook(const CANPacket_t *msg) {
|
||||
UPDATE_VEHICLE_SPEED(speed / 4.0 * 0.01 * KPH_TO_MS);
|
||||
}
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
if (msg->addr == 0x1D3U) {
|
||||
acc_main_on = GET_BIT(msg, 15U);
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ bool acc_main_on = false; // referred to as "ACC off" in ISO 15622:2018
|
||||
int cruise_button_prev = 0;
|
||||
bool safety_rx_checks_invalid = false;
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
bool aol_allowed = false;
|
||||
bool lkas_button_prev = false;
|
||||
bool lkas_on = false;
|
||||
@@ -375,7 +375,7 @@ static void generic_rx_checks(void) {
|
||||
}
|
||||
steering_disengage_prev = steering_disengage;
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
aol_allowed = (acc_main_on || lkas_on) && (alternative_experience & ALT_EXP_ALWAYS_ON_LATERAL);
|
||||
}
|
||||
|
||||
@@ -501,7 +501,7 @@ int set_safety_hooks(uint16_t mode, uint16_t param) {
|
||||
enable_gas_interceptor = false;
|
||||
gas_interceptor_prev = 0;
|
||||
|
||||
// FrogPilot variables
|
||||
// StarPilot variables
|
||||
aol_allowed = false;
|
||||
lkas_button_prev = false;
|
||||
lkas_on = false;
|
||||
|
||||
@@ -310,7 +310,7 @@ class TorqueSteeringSafetyTestBase(SafetyTestBase, abc.ABC):
|
||||
for _ in range(10):
|
||||
self.assertFalse(self._tx(self._torque_cmd_msg(self.MAX_TORQUE, 1)))
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
def _toggle_aol(self, toggle_on):
|
||||
"""Toggles "Always On Lateral" On/Off"""
|
||||
pass
|
||||
@@ -851,7 +851,7 @@ class AngleSteeringSafetyTest(VehicleSpeedSafetyTest):
|
||||
for _ in range(5):
|
||||
self.assertTrue(self._tx(self._angle_cmd_msg(0, True, increment_timer=False)))
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
def _toggle_aol(self, toggle_on):
|
||||
"""Toggles "Always On Lateral" on/off"""
|
||||
pass
|
||||
|
||||
@@ -71,7 +71,7 @@ class HyundaiButtonBase:
|
||||
self.assertEqual(controls_allowed, self.safety.get_controls_allowed())
|
||||
self._rx(self._button_msg(Buttons.NONE))
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
def _toggle_aol(self, toggle_on):
|
||||
"""
|
||||
Simulates toggling the main cruise button. The safety model requires a
|
||||
|
||||
@@ -71,7 +71,7 @@ class TestChryslerSafety(common.CarSafetyTest, common.MotorTorqueSteeringSafetyT
|
||||
self.assertFalse(self._tx(self._button_msg(cancel=True, resume=True)))
|
||||
self.assertFalse(self._tx(self._button_msg(cancel=False, resume=False)))
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
def _toggle_aol(self, toggle_on):
|
||||
# DAS_3, bit 20 is ACC_AVAILABLE
|
||||
values = {"ACC_AVAILABLE": 1 if toggle_on else 0}
|
||||
|
||||
@@ -378,7 +378,7 @@ class TestFordSafetyBase(common.CarSafetyTest):
|
||||
for bus in (0, 2):
|
||||
self.assertEqual(enabled, self._tx(self._acc_button_msg(Buttons.CANCEL, bus)))
|
||||
|
||||
# FrogPilot variables
|
||||
# StarPilot variables
|
||||
def _toggle_aol(self, toggle_on):
|
||||
# EngBrakeData, CcStat_D_Actl is the cruise state
|
||||
# 3 is standby (main on), 5 is active (engaged)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user