dragonpilot - 基於 openpilot 的開源駕駛輔助系統
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

113 lines
3.4 KiB

#!/usr/bin/env python3
import os
import time
import numpy as np
from system.hardware.tici.hardware import Tici
from system.hardware.tici.pins import GPIO
from common.gpio import gpio_init, gpio_set
def read_power():
with open("/sys/bus/i2c/devices/0-0040/hwmon/hwmon1/in1_input") as f:
voltage_total = int(f.read()) / 1000.
with open("/sys/bus/i2c/devices/0-0040/hwmon/hwmon1/curr1_input") as f:
current_total = int(f.read())
with open("/sys/class/power_supply/bms/voltage_now") as f:
voltage = int(f.read()) / 1e6 # volts
with open("/sys/class/power_supply/bms/current_now") as f:
current = int(f.read()) / 1e3 # ma
power_som = voltage*current
power_total = voltage_total*current_total
return power_total, power_som
def read_power_avg():
pwrs = []
for _ in range(100):
pwrs.append(read_power())
time.sleep(0.01)
power_total, power_som = np.mean([x[0] for x in pwrs]), np.mean([x[1] for x in pwrs])
return "total %7.2f mW SOM %7.2f mW" % (power_total, power_som)
def gpio_export(pin):
try:
with open("/sys/class/gpio/export", 'w') as f:
f.write(str(pin))
except Exception:
print(f"Failed to export gpio {pin}")
if __name__ == "__main__":
gpio_export(GPIO.CAM0_AVDD_EN)
gpio_export(GPIO.CAM0_RSTN)
gpio_export(GPIO.CAM1_RSTN)
gpio_export(GPIO.CAM2_RSTN)
print("hello")
os.system('kill $(pgrep -f "manager.py")')
os.system('kill $(pgrep -f "python -m selfdrive.athena.manage_athenad")')
os.system('kill $(pgrep -f "selfdrive.athena.athenad")')
# stopping weston turns off lcd3v3
os.system("sudo service weston stop")
os.system("sudo service ModemManager stop")
print("services stopped")
t = Tici()
t.initialize_hardware()
t.set_power_save(True)
t.set_screen_brightness(0)
gpio_init(GPIO.STM_RST_N, True)
gpio_init(GPIO.HUB_RST_N, True)
gpio_init(GPIO.UBLOX_PWR_EN, True)
gpio_init(GPIO.LTE_RST_N, True)
gpio_init(GPIO.LTE_PWRKEY, True)
gpio_init(GPIO.CAM0_AVDD_EN, True)
gpio_init(GPIO.CAM0_RSTN, True)
gpio_init(GPIO.CAM1_RSTN, True)
gpio_init(GPIO.CAM2_RSTN, True)
os.system("sudo su -c 'echo 0 > /sys/kernel/debug/regulator/camera_rear_ldo/enable'") # cam 1v2 off
gpio_set(GPIO.CAM0_AVDD_EN, False) # cam 2v8 off
gpio_set(GPIO.LTE_RST_N, True) # quectel off
gpio_set(GPIO.UBLOX_PWR_EN, False) # gps off
gpio_set(GPIO.STM_RST_N, True) # panda off
gpio_set(GPIO.HUB_RST_N, False) # hub off
# cameras in reset
gpio_set(GPIO.CAM0_RSTN, False)
gpio_set(GPIO.CAM1_RSTN, False)
gpio_set(GPIO.CAM2_RSTN, False)
time.sleep(8)
print("baseline: ", read_power_avg())
gpio_set(GPIO.CAM0_AVDD_EN, True)
time.sleep(2)
print("cam avdd: ", read_power_avg())
os.system("sudo su -c 'echo 1 > /sys/kernel/debug/regulator/camera_rear_ldo/enable'")
time.sleep(2)
print("cam dvdd: ", read_power_avg())
gpio_set(GPIO.CAM0_RSTN, True)
gpio_set(GPIO.CAM1_RSTN, True)
gpio_set(GPIO.CAM2_RSTN, True)
time.sleep(2)
print("cams up: ", read_power_avg())
gpio_set(GPIO.HUB_RST_N, True)
time.sleep(2)
print("usb hub: ", read_power_avg())
gpio_set(GPIO.STM_RST_N, False)
time.sleep(5)
print("panda: ", read_power_avg())
gpio_set(GPIO.UBLOX_PWR_EN, True)
time.sleep(5)
print("gps: ", read_power_avg())
gpio_set(GPIO.LTE_RST_N, False)
time.sleep(1)
gpio_set(GPIO.LTE_PWRKEY, True)
time.sleep(1)
gpio_set(GPIO.LTE_PWRKEY, False)
time.sleep(5)
print("quectel: ", read_power_avg())