mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-08-21 20:03:46 +08:00
remove tici-specific code (#36078)
* remove tici-specific code * lil more * update those
This commit is contained in:
@@ -42,10 +42,10 @@ Using openpilot in a car
|
|||||||
------
|
------
|
||||||
|
|
||||||
To use openpilot in a car, you need four things:
|
To use openpilot in a car, you need four things:
|
||||||
1. **Supported Device:** a comma 3/3X, available at [comma.ai/shop](https://comma.ai/shop/comma-3x).
|
1. **Supported Device:** a comma 3X, available at [comma.ai/shop](https://comma.ai/shop/comma-3x).
|
||||||
2. **Software:** The setup procedure for the comma 3/3X allows users to enter a URL for custom software. Use the URL `openpilot.comma.ai` to install the release version.
|
2. **Software:** The setup procedure for the comma 3X allows users to enter a URL for custom software. Use the URL `openpilot.comma.ai` to install the release version.
|
||||||
3. **Supported Car:** Ensure that you have one of [the 275+ supported cars](docs/CARS.md).
|
3. **Supported Car:** Ensure that you have one of [the 275+ supported cars](docs/CARS.md).
|
||||||
4. **Car Harness:** You will also need a [car harness](https://comma.ai/shop/car-harness) to connect your comma 3/3X to your car.
|
4. **Car Harness:** You will also need a [car harness](https://comma.ai/shop/car-harness) to connect your comma 3X to your car.
|
||||||
|
|
||||||
We have detailed instructions for [how to install the harness and device in a car](https://comma.ai/setup). Note that it's possible to run openpilot on [other hardware](https://blog.comma.ai/self-driving-car-for-free/), although it's not plug-and-play.
|
We have detailed instructions for [how to install the harness and device in a car](https://comma.ai/setup). Note that it's possible to run openpilot on [other hardware](https://blog.comma.ai/self-driving-car-for-free/), although it's not plug-and-play.
|
||||||
|
|
||||||
|
|||||||
@@ -94,7 +94,6 @@ inline static std::unordered_map<std::string, ParamKeyAttributes> keys = {
|
|||||||
{"Offroad_NeosUpdate", {CLEAR_ON_MANAGER_START, JSON}},
|
{"Offroad_NeosUpdate", {CLEAR_ON_MANAGER_START, JSON}},
|
||||||
{"Offroad_NoFirmware", {CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION, JSON}},
|
{"Offroad_NoFirmware", {CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION, JSON}},
|
||||||
{"Offroad_Recalibration", {CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION, JSON}},
|
{"Offroad_Recalibration", {CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION, JSON}},
|
||||||
{"Offroad_StorageMissing", {CLEAR_ON_MANAGER_START, JSON}},
|
|
||||||
{"Offroad_TemperatureTooHigh", {CLEAR_ON_MANAGER_START, JSON}},
|
{"Offroad_TemperatureTooHigh", {CLEAR_ON_MANAGER_START, JSON}},
|
||||||
{"Offroad_UnregisteredHardware", {CLEAR_ON_MANAGER_START, JSON}},
|
{"Offroad_UnregisteredHardware", {CLEAR_ON_MANAGER_START, JSON}},
|
||||||
{"Offroad_UpdateFailed", {CLEAR_ON_MANAGER_START, JSON}},
|
{"Offroad_UpdateFailed", {CLEAR_ON_MANAGER_START, JSON}},
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ All of these are examples of good PRs:
|
|||||||
### First contribution
|
### First contribution
|
||||||
|
|
||||||
[Projects / openpilot bounties](https://github.com/orgs/commaai/projects/26/views/1?pane=info) is the best place to get started and goes in-depth on what's expected when working on a bounty.
|
[Projects / openpilot bounties](https://github.com/orgs/commaai/projects/26/views/1?pane=info) is the best place to get started and goes in-depth on what's expected when working on a bounty.
|
||||||
There's lot of bounties that don't require a comma 3/3X or a car.
|
There's lot of bounties that don't require a comma 3X or a car.
|
||||||
|
|
||||||
## Pull Requests
|
## Pull Requests
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
# connect to a comma 3/3X
|
# connect to a comma 3X
|
||||||
|
|
||||||
A comma 3/3X is a normal [Linux](https://github.com/commaai/agnos-builder) computer that exposes [SSH](https://wiki.archlinux.org/title/Secure_Shell) and a [serial console](https://wiki.archlinux.org/title/Working_with_the_serial_console).
|
A comma 3X is a normal [Linux](https://github.com/commaai/agnos-builder) computer that exposes [SSH](https://wiki.archlinux.org/title/Secure_Shell) and a [serial console](https://wiki.archlinux.org/title/Working_with_the_serial_console).
|
||||||
|
|
||||||
## Serial Console
|
## Serial Console
|
||||||
|
|
||||||
On both the comma three and 3X, the serial console is accessible from the main OBD-C port.
|
On both the comma three and 3X, the serial console is accessible from the main OBD-C port.
|
||||||
Connect the comma 3/3X to your computer with a normal USB C cable, or use a [comma serial](https://comma.ai/shop/comma-serial) for steady 12V power.
|
Connect the comma 3X to your computer with a normal USB C cable, or use a [comma serial](https://comma.ai/shop/comma-serial) for steady 12V power.
|
||||||
|
|
||||||
On the comma three, the serial console is exposed through a UART-to-USB chip, and `tools/scripts/serial.sh` can be used to connect.
|
On the comma three, the serial console is exposed through a UART-to-USB chip, and `tools/scripts/serial.sh` can be used to connect.
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@ In order to use ADB on your device, you'll need to perform the following steps u
|
|||||||
* Here's an example command for connecting to your device using its tethered connection: `adb connect 192.168.43.1:5555`
|
* Here's an example command for connecting to your device using its tethered connection: `adb connect 192.168.43.1:5555`
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> The default port for ADB is 5555 on the comma 3/3X.
|
> The default port for ADB is 5555 on the comma 3X.
|
||||||
|
|
||||||
For more info on ADB, see the [Android Debug Bridge (ADB) documentation](https://developer.android.com/tools/adb).
|
For more info on ADB, see the [Android Debug Bridge (ADB) documentation](https://developer.android.com/tools/adb).
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ Replaying is a critical tool for openpilot development and debugging.
|
|||||||
Just run `tools/replay/replay --demo`.
|
Just run `tools/replay/replay --demo`.
|
||||||
|
|
||||||
## Replaying CAN data
|
## Replaying CAN data
|
||||||
*Hardware required: jungle and comma 3/3X*
|
*Hardware required: jungle and comma 3X*
|
||||||
|
|
||||||
1. Connect your PC to a jungle.
|
1. Connect your PC to a jungle.
|
||||||
2.
|
2.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
In 30 minutes, we'll get an openpilot development environment set up on your computer and make some changes to openpilot's UI.
|
In 30 minutes, we'll get an openpilot development environment set up on your computer and make some changes to openpilot's UI.
|
||||||
|
|
||||||
And if you have a comma 3/3X, we'll deploy the change to your device for testing.
|
And if you have a comma 3X, we'll deploy the change to your device for testing.
|
||||||
|
|
||||||
## 1. Set up your development environment
|
## 1. Set up your development environment
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -21,7 +21,7 @@ nav:
|
|||||||
- What is openpilot?: getting-started/what-is-openpilot.md
|
- What is openpilot?: getting-started/what-is-openpilot.md
|
||||||
- How-to:
|
- How-to:
|
||||||
- Turn the speed blue: how-to/turn-the-speed-blue.md
|
- Turn the speed blue: how-to/turn-the-speed-blue.md
|
||||||
- Connect to a comma 3/3X: how-to/connect-to-comma.md
|
- Connect to a comma 3X: how-to/connect-to-comma.md
|
||||||
# - Make your first pull request: how-to/make-first-pr.md
|
# - Make your first pull request: how-to/make-first-pr.md
|
||||||
#- Replay a drive: how-to/replay-a-drive.md
|
#- Replay a drive: how-to/replay-a-drive.md
|
||||||
- Concepts:
|
- Concepts:
|
||||||
|
|||||||
@@ -85,11 +85,6 @@ def main() -> None:
|
|||||||
cloudlog.event("pandad.flash_and_connect", count=count)
|
cloudlog.event("pandad.flash_and_connect", count=count)
|
||||||
params.remove("PandaSignatures")
|
params.remove("PandaSignatures")
|
||||||
|
|
||||||
# TODO: remove this in the next AGNOS
|
|
||||||
# wait until USB is up before counting
|
|
||||||
if time.monotonic() < 60.:
|
|
||||||
no_internal_panda_count = 0
|
|
||||||
|
|
||||||
# Handle missing internal panda
|
# Handle missing internal panda
|
||||||
if no_internal_panda_count > 0:
|
if no_internal_panda_count > 0:
|
||||||
if no_internal_panda_count == 3:
|
if no_internal_panda_count == 3:
|
||||||
|
|||||||
Binary file not shown.
@@ -22,8 +22,6 @@ class TestPandad:
|
|||||||
if len(Panda.list()) == 0:
|
if len(Panda.list()) == 0:
|
||||||
self._run_test(60)
|
self._run_test(60)
|
||||||
|
|
||||||
self.spi = HARDWARE.get_device_type() != 'tici'
|
|
||||||
|
|
||||||
def teardown_method(self):
|
def teardown_method(self):
|
||||||
managed_processes['pandad'].stop()
|
managed_processes['pandad'].stop()
|
||||||
|
|
||||||
@@ -106,11 +104,9 @@ class TestPandad:
|
|||||||
# - 0.2s pandad -> pandad
|
# - 0.2s pandad -> pandad
|
||||||
# - plus some buffer
|
# - plus some buffer
|
||||||
print("startup times", ts, sum(ts) / len(ts))
|
print("startup times", ts, sum(ts) / len(ts))
|
||||||
assert 0.1 < (sum(ts)/len(ts)) < (0.7 if self.spi else 5.0)
|
assert 0.1 < (sum(ts)/len(ts)) < 0.7
|
||||||
|
|
||||||
def test_protocol_version_check(self):
|
def test_protocol_version_check(self):
|
||||||
if not self.spi:
|
|
||||||
pytest.skip("SPI test")
|
|
||||||
# flash old fw
|
# flash old fw
|
||||||
fn = os.path.join(HERE, "bootstub.panda_h7_spiv0.bin")
|
fn = os.path.join(HERE, "bootstub.panda_h7_spiv0.bin")
|
||||||
self._flash_bootstub_and_test(fn, expect_mismatch=True)
|
self._flash_bootstub_and_test(fn, expect_mismatch=True)
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import random
|
|||||||
|
|
||||||
import cereal.messaging as messaging
|
import cereal.messaging as messaging
|
||||||
from cereal.services import SERVICE_LIST
|
from cereal.services import SERVICE_LIST
|
||||||
from openpilot.system.hardware import HARDWARE
|
|
||||||
from openpilot.selfdrive.test.helpers import with_processes
|
from openpilot.selfdrive.test.helpers import with_processes
|
||||||
from openpilot.selfdrive.pandad.tests.test_pandad_loopback import setup_pandad, send_random_can_messages
|
from openpilot.selfdrive.pandad.tests.test_pandad_loopback import setup_pandad, send_random_can_messages
|
||||||
|
|
||||||
@@ -16,8 +15,6 @@ JUNGLE_SPAM = "JUNGLE_SPAM" in os.environ
|
|||||||
class TestBoarddSpi:
|
class TestBoarddSpi:
|
||||||
@classmethod
|
@classmethod
|
||||||
def setup_class(cls):
|
def setup_class(cls):
|
||||||
if HARDWARE.get_device_type() == 'tici':
|
|
||||||
pytest.skip("only for spi pandas")
|
|
||||||
os.environ['STARTED'] = '1'
|
os.environ['STARTED'] = '1'
|
||||||
os.environ['SPI_ERR_PROB'] = '0.001'
|
os.environ['SPI_ERR_PROB'] = '0.001'
|
||||||
if not JUNGLE_SPAM:
|
if not JUNGLE_SPAM:
|
||||||
|
|||||||
@@ -29,10 +29,6 @@
|
|||||||
"text": "Device failed to register with the comma.ai backend. It will not connect or upload to comma.ai servers, and receives no support from comma.ai. If this is a device purchased at comma.ai/shop, open a ticket at https://comma.ai/support.",
|
"text": "Device failed to register with the comma.ai backend. It will not connect or upload to comma.ai servers, and receives no support from comma.ai. If this is a device purchased at comma.ai/shop, open a ticket at https://comma.ai/support.",
|
||||||
"severity": 1
|
"severity": 1
|
||||||
},
|
},
|
||||||
"Offroad_StorageMissing": {
|
|
||||||
"text": "NVMe drive not mounted.",
|
|
||||||
"severity": 1
|
|
||||||
},
|
|
||||||
"Offroad_CarUnrecognized": {
|
"Offroad_CarUnrecognized": {
|
||||||
"text": "openpilot was unable to identify your car. Your car is either unsupported or its ECUs are not recognized. Please submit a pull request to add the firmware versions to the proper vehicle. Need help? Join discord.comma.ai.",
|
"text": "openpilot was unable to identify your car. Your car is either unsupported or its ECUs are not recognized. Please submit a pull request to add the firmware versions to the proper vehicle. Need help? Join discord.comma.ai.",
|
||||||
"severity": 0
|
"severity": 0
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ from openpilot.selfdrive.selfdrived.helpers import ExcessiveActuationCheck
|
|||||||
from openpilot.selfdrive.selfdrived.state import StateMachine
|
from openpilot.selfdrive.selfdrived.state import StateMachine
|
||||||
from openpilot.selfdrive.selfdrived.alertmanager import AlertManager, set_offroad_alert
|
from openpilot.selfdrive.selfdrived.alertmanager import AlertManager, set_offroad_alert
|
||||||
|
|
||||||
from openpilot.system.hardware import HARDWARE
|
|
||||||
from openpilot.system.version import get_build_metadata
|
from openpilot.system.version import get_build_metadata
|
||||||
|
|
||||||
REPLAY = "REPLAY" in os.environ
|
REPLAY = "REPLAY" in os.environ
|
||||||
@@ -122,13 +121,6 @@ class SelfdriveD:
|
|||||||
self.state_machine = StateMachine()
|
self.state_machine = StateMachine()
|
||||||
self.rk = Ratekeeper(100, print_delay_threshold=None)
|
self.rk = Ratekeeper(100, print_delay_threshold=None)
|
||||||
|
|
||||||
# some comma three with NVMe experience NVMe dropouts mid-drive that
|
|
||||||
# cause loggerd to crash on write, so ignore it only on that platform
|
|
||||||
self.ignored_processes = set()
|
|
||||||
nvme_expected = os.path.exists('/dev/nvme0n1') or (not os.path.isfile("/persist/comma/living-in-the-moment"))
|
|
||||||
if HARDWARE.get_device_type() == 'tici' and nvme_expected:
|
|
||||||
self.ignored_processes = {'loggerd', }
|
|
||||||
|
|
||||||
# Determine startup event
|
# Determine startup event
|
||||||
self.startup_event = EventName.startup if build_metadata.openpilot.comma_remote and build_metadata.tested_channel else EventName.startupMaster
|
self.startup_event = EventName.startup if build_metadata.openpilot.comma_remote and build_metadata.tested_channel else EventName.startupMaster
|
||||||
if not car_recognized:
|
if not car_recognized:
|
||||||
@@ -299,7 +291,7 @@ class SelfdriveD:
|
|||||||
if not_running != self.not_running_prev:
|
if not_running != self.not_running_prev:
|
||||||
cloudlog.event("process_not_running", not_running=not_running, error=True)
|
cloudlog.event("process_not_running", not_running=not_running, error=True)
|
||||||
self.not_running_prev = not_running
|
self.not_running_prev = not_running
|
||||||
if self.sm.recv_frame['managerState'] and (not_running - self.ignored_processes):
|
if self.sm.recv_frame['managerState'] and not_running:
|
||||||
self.events.add(EventName.processNotRunning)
|
self.events.add(EventName.processNotRunning)
|
||||||
else:
|
else:
|
||||||
if not SIMULATION and not self.rk.lagging:
|
if not SIMULATION and not self.rk.lagging:
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ UI_DELAY = 0.1 # may be slower on CI?
|
|||||||
TEST_ROUTE = "a2a0ccea32023010|2023-07-27--13-01-19"
|
TEST_ROUTE = "a2a0ccea32023010|2023-07-27--13-01-19"
|
||||||
|
|
||||||
STREAMS: list[tuple[VisionStreamType, CameraConfig, bytes]] = []
|
STREAMS: list[tuple[VisionStreamType, CameraConfig, bytes]] = []
|
||||||
OFFROAD_ALERTS = ['Offroad_StorageMissing', 'Offroad_IsTakingSnapshot']
|
OFFROAD_ALERTS = ['Offroad_IsTakingSnapshot', ]
|
||||||
DATA: dict[str, capnp.lib.capnp._DynamicStructBuilder] = dict.fromkeys(
|
DATA: dict[str, capnp.lib.capnp._DynamicStructBuilder] = dict.fromkeys(
|
||||||
["carParams", "deviceState", "pandaStates", "controlsState", "selfdriveState",
|
["carParams", "deviceState", "pandaStates", "controlsState", "selfdriveState",
|
||||||
"liveCalibration", "modelV2", "radarState", "driverMonitoringState", "carState",
|
"liveCalibration", "modelV2", "radarState", "driverMonitoringState", "carState",
|
||||||
|
|||||||
+1
-2
@@ -54,8 +54,7 @@ static void update_state(UIState *s) {
|
|||||||
}
|
}
|
||||||
if (sm.updated("wideRoadCameraState")) {
|
if (sm.updated("wideRoadCameraState")) {
|
||||||
auto cam_state = sm["wideRoadCameraState"].getWideRoadCameraState();
|
auto cam_state = sm["wideRoadCameraState"].getWideRoadCameraState();
|
||||||
float scale = (cam_state.getSensor() == cereal::FrameData::ImageSensor::AR0231) ? 6.0f : 1.0f;
|
scene.light_sensor = std::max(100.0f - cam_state.getExposureValPercent(), 0.0f);
|
||||||
scene.light_sensor = std::max(100.0f - scale * cam_state.getExposureValPercent(), 0.0f);
|
|
||||||
} else if (!sm.allAliveAndValid({"wideRoadCameraState"})) {
|
} else if (!sm.allAliveAndValid({"wideRoadCameraState"})) {
|
||||||
scene.light_sensor = -1;
|
scene.light_sensor = -1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -105,10 +105,7 @@ class UIState:
|
|||||||
# Handle wide road camera state updates
|
# Handle wide road camera state updates
|
||||||
if self.sm.updated["wideRoadCameraState"]:
|
if self.sm.updated["wideRoadCameraState"]:
|
||||||
cam_state = self.sm["wideRoadCameraState"]
|
cam_state = self.sm["wideRoadCameraState"]
|
||||||
|
self.light_sensor = max(100.0 - cam_state.exposureValPercent, 0.0)
|
||||||
# Scale factor based on sensor type
|
|
||||||
scale = 6.0 if cam_state.sensor == 'ar0231' else 1.0
|
|
||||||
self.light_sensor = max(100.0 - scale * cam_state.exposureValPercent, 0.0)
|
|
||||||
elif not self.sm.alive["wideRoadCameraState"] or not self.sm.valid["wideRoadCameraState"]:
|
elif not self.sm.alive["wideRoadCameraState"] or not self.sm.valid["wideRoadCameraState"]:
|
||||||
self.light_sensor = -1
|
self.light_sensor = -1
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ typedef enum {
|
|||||||
ISP_BPS_PROCESSED, // fully processed image through the BPS
|
ISP_BPS_PROCESSED, // fully processed image through the BPS
|
||||||
} SpectraOutputType;
|
} SpectraOutputType;
|
||||||
|
|
||||||
// For the comma 3/3X three camera platform
|
// For the comma 3X three camera platform
|
||||||
|
|
||||||
struct CameraConfig {
|
struct CameraConfig {
|
||||||
int camera_num;
|
int camera_num;
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import struct
|
|||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
from collections import OrderedDict, namedtuple
|
from collections import OrderedDict, namedtuple
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
import psutil
|
import psutil
|
||||||
|
|
||||||
@@ -334,12 +333,6 @@ def hardware_thread(end_event, hw_queue) -> None:
|
|||||||
# to make a different decision in your software
|
# to make a different decision in your software
|
||||||
startup_conditions["registered_device"] = PC or (params.get("DongleId") != UNREGISTERED_DONGLE_ID)
|
startup_conditions["registered_device"] = PC or (params.get("DongleId") != UNREGISTERED_DONGLE_ID)
|
||||||
|
|
||||||
# TODO: this should move to TICI.initialize_hardware, but we currently can't import params there
|
|
||||||
if TICI and HARDWARE.get_device_type() == "tici":
|
|
||||||
if not os.path.isfile("/persist/comma/living-in-the-moment"):
|
|
||||||
if not Path("/data/media").is_mount():
|
|
||||||
set_offroad_alert_if_changed("Offroad_StorageMissing", True)
|
|
||||||
|
|
||||||
# Handle offroad/onroad transition
|
# Handle offroad/onroad transition
|
||||||
should_start = all(onroad_conditions.values())
|
should_start = all(onroad_conditions.values())
|
||||||
if started_ts is None:
|
if started_ts is None:
|
||||||
|
|||||||
@@ -61,18 +61,6 @@ BASE_CONFIG = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
CONFIGS = {
|
CONFIGS = {
|
||||||
"tici": [
|
|
||||||
AmpConfig("Right speaker output from right DAC", 0b1, 0x2C, 0, 0b11111111),
|
|
||||||
AmpConfig("Right Speaker Mixer Gain", 0b00, 0x2D, 2, 0b00001100),
|
|
||||||
AmpConfig("Right speaker output volume", 0x1c, 0x3E, 0, 0b00011111),
|
|
||||||
AmpConfig("DAI2 EQ enable", 0b1, 0x49, 1, 0b00000010),
|
|
||||||
|
|
||||||
*configs_from_eq_params(0x84, EQParams(0x274F, 0xC0FF, 0x3BF9, 0x0B3C, 0x1656)),
|
|
||||||
*configs_from_eq_params(0x8E, EQParams(0x1009, 0xC6BF, 0x2952, 0x1C97, 0x30DF)),
|
|
||||||
*configs_from_eq_params(0x98, EQParams(0x0F75, 0xCBE5, 0x0ED2, 0x2528, 0x3E42)),
|
|
||||||
*configs_from_eq_params(0xA2, EQParams(0x091F, 0x3D4C, 0xCE11, 0x1266, 0x2807)),
|
|
||||||
*configs_from_eq_params(0xAC, EQParams(0x0A9E, 0x3F20, 0xE573, 0x0A8B, 0x3A3B)),
|
|
||||||
],
|
|
||||||
"tizi": [
|
"tizi": [
|
||||||
AmpConfig("Left speaker output from left DAC", 0b1, 0x2B, 0, 0b11111111),
|
AmpConfig("Left speaker output from left DAC", 0b1, 0x2B, 0, 0b11111111),
|
||||||
AmpConfig("Right speaker output from right DAC", 0b1, 0x2C, 0, 0b11111111),
|
AmpConfig("Right speaker output from right DAC", 0b1, 0x2C, 0, 0b11111111),
|
||||||
|
|||||||
@@ -425,9 +425,6 @@ class Tici(HardwareBase):
|
|||||||
|
|
||||||
# pandad core
|
# pandad core
|
||||||
affine_irq(3, "spi_geni") # SPI
|
affine_irq(3, "spi_geni") # SPI
|
||||||
if "tici" in self.get_device_type():
|
|
||||||
affine_irq(3, "xhci-hcd:usb3") # aux panda USB (or potentially anything else on USB)
|
|
||||||
affine_irq(3, "xhci-hcd:usb1") # internal panda USB (also modem)
|
|
||||||
try:
|
try:
|
||||||
pid = subprocess.check_output(["pgrep", "-f", "spi0"], encoding='utf8').strip()
|
pid = subprocess.check_output(["pgrep", "-f", "spi0"], encoding='utf8').strip()
|
||||||
subprocess.call(["sudo", "chrt", "-f", "-p", "1", pid])
|
subprocess.call(["sudo", "chrt", "-f", "-p", "1", pid])
|
||||||
@@ -446,22 +443,20 @@ class Tici(HardwareBase):
|
|||||||
|
|
||||||
cmds = []
|
cmds = []
|
||||||
|
|
||||||
if self.get_device_type() in ("tici", "tizi"):
|
if self.get_device_type() in ("tizi", ):
|
||||||
# clear out old blue prime initial APN
|
# clear out old blue prime initial APN
|
||||||
os.system('mmcli -m any --3gpp-set-initial-eps-bearer-settings="apn="')
|
os.system('mmcli -m any --3gpp-set-initial-eps-bearer-settings="apn="')
|
||||||
|
|
||||||
cmds += [
|
cmds += [
|
||||||
|
# SIM hot swap
|
||||||
|
'AT+QSIMDET=1,0',
|
||||||
|
'AT+QSIMSTAT=1',
|
||||||
|
|
||||||
# configure modem as data-centric
|
# configure modem as data-centric
|
||||||
'AT+QNVW=5280,0,"0102000000000000"',
|
'AT+QNVW=5280,0,"0102000000000000"',
|
||||||
'AT+QNVFW="/nv/item_files/ims/IMS_enable",00',
|
'AT+QNVFW="/nv/item_files/ims/IMS_enable",00',
|
||||||
'AT+QNVFW="/nv/item_files/modem/mmode/ue_usage_setting",01',
|
'AT+QNVFW="/nv/item_files/modem/mmode/ue_usage_setting",01',
|
||||||
]
|
]
|
||||||
if self.get_device_type() == "tizi":
|
|
||||||
# SIM hot swap, not routed on tici
|
|
||||||
cmds += [
|
|
||||||
'AT+QSIMDET=1,0',
|
|
||||||
'AT+QSIMSTAT=1',
|
|
||||||
]
|
|
||||||
elif manufacturer == 'Cavli Inc.':
|
elif manufacturer == 'Cavli Inc.':
|
||||||
cmds += [
|
cmds += [
|
||||||
'AT^SIMSWAP=1', # use SIM slot, instead of internal eSIM
|
'AT^SIMSWAP=1', # use SIM slot, instead of internal eSIM
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
# TODO: these are also defined in a header
|
|
||||||
|
|
||||||
# GPIO pin definitions
|
# GPIO pin definitions
|
||||||
class GPIO:
|
class GPIO:
|
||||||
# both GPIO_STM_RST_N and GPIO_LTE_RST_N are misnamed, they are high to reset
|
# both GPIO_STM_RST_N and GPIO_LTE_RST_N are misnamed, they are high to reset
|
||||||
@@ -26,7 +24,4 @@ class GPIO:
|
|||||||
CAM2_RSTN = 12
|
CAM2_RSTN = 12
|
||||||
|
|
||||||
# Sensor interrupts
|
# Sensor interrupts
|
||||||
BMX055_ACCEL_INT = 21
|
|
||||||
BMX055_GYRO_INT = 23
|
|
||||||
BMX055_MAGN_INT = 87
|
|
||||||
LSM_INT = 84
|
LSM_INT = 84
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ from openpilot.system.ui.widgets import Widget
|
|||||||
from openpilot.system.ui.widgets.button import Button, ButtonStyle
|
from openpilot.system.ui.widgets.button import Button, ButtonStyle
|
||||||
from openpilot.system.ui.widgets.label import gui_label, gui_text_box
|
from openpilot.system.ui.widgets.label import gui_label, gui_text_box
|
||||||
|
|
||||||
NVME = "/dev/nvme0n1"
|
|
||||||
USERDATA = "/dev/disk/by-partlabel/userdata"
|
USERDATA = "/dev/disk/by-partlabel/userdata"
|
||||||
TIMEOUT = 3*60
|
TIMEOUT = 3*60
|
||||||
|
|
||||||
@@ -49,10 +48,6 @@ class Reset(Widget):
|
|||||||
if PC:
|
if PC:
|
||||||
return
|
return
|
||||||
|
|
||||||
# Best effort to wipe NVME
|
|
||||||
os.system(f"sudo umount {NVME}")
|
|
||||||
os.system(f"yes | sudo mkfs.ext4 {NVME}")
|
|
||||||
|
|
||||||
# Removing data and formatting
|
# Removing data and formatting
|
||||||
rm = os.system("sudo rm -rf /data/*")
|
rm = os.system("sudo rm -rf /data/*")
|
||||||
os.system(f"sudo umount {USERDATA}")
|
os.system(f"sudo umount {USERDATA}")
|
||||||
|
|||||||
@@ -243,12 +243,6 @@ class Updater:
|
|||||||
if b is None:
|
if b is None:
|
||||||
b = self.get_branch(BASEDIR)
|
b = self.get_branch(BASEDIR)
|
||||||
b = {
|
b = {
|
||||||
("tici", "release3"): "release-tici",
|
|
||||||
("tici", "release3-staging"): "release-tici",
|
|
||||||
("tici", "master"): "master-tici",
|
|
||||||
("tici", "nightly"): "release-tici",
|
|
||||||
("tici", "nightly-dev"): "release-tici",
|
|
||||||
|
|
||||||
("tizi", "release3"): "release-tizi",
|
("tizi", "release3"): "release-tizi",
|
||||||
}.get((HARDWARE.get_device_type(), b), b)
|
}.get((HARDWARE.get_device_type(), b), b)
|
||||||
return b
|
return b
|
||||||
|
|||||||
Reference in New Issue
Block a user