values.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. from collections import defaultdict, namedtuple
  2. from dataclasses import dataclass
  3. from enum import Enum
  4. from typing import Dict, List, Union
  5. from cereal import car
  6. from selfdrive.car import dbc_dict
  7. from selfdrive.car.docs_definitions import CarInfo, Harness
  8. from selfdrive.car.fw_query_definitions import FwQueryConfig, Request, StdQueries
  9. Ecu = car.CarParams.Ecu
  10. TransmissionType = car.CarParams.TransmissionType
  11. GearShifter = car.CarState.GearShifter
  12. AngleRateLimit = namedtuple('AngleRateLimit', ['speed_points', 'max_angle_diff_points'])
  13. class CarControllerParams:
  14. # Messages: Lane_Assist_Data1, LateralMotionControl
  15. LKAS_STEER_STEP = 5
  16. # Message: IPMA_Data
  17. LKAS_UI_STEP = 100
  18. # Message: ACCDATA_3
  19. ACC_UI_STEP = 5
  20. # Message: Steering_Data_FD1, but send twice as fast
  21. BUTTONS_STEP = 10 / 2
  22. LKAS_STEER_RATIO = 2.75 # Approximate ratio between LatCtlPath_An_Actl and steering angle in radians
  23. # TODO: remove this once we understand how the EPS calculates the steering angle better
  24. STEER_DRIVER_ALLOWANCE = 0.8 # Driver intervention threshold in Nm
  25. RATE_LIMIT_UP = AngleRateLimit(speed_points=[0., 5., 15.], max_angle_diff_points=[5., .8, .15])
  26. RATE_LIMIT_DOWN = AngleRateLimit(speed_points=[0., 5., 15.], max_angle_diff_points=[5., 3.5, 0.4])
  27. class CANBUS:
  28. main = 0
  29. radar = 1
  30. camera = 2
  31. class CAR:
  32. ESCAPE_MK4 = "FORD ESCAPE 4TH GEN"
  33. EXPLORER_MK6 = "FORD EXPLORER 6TH GEN"
  34. FOCUS_MK4 = "FORD FOCUS 4TH GEN"
  35. class RADAR:
  36. DELPHI_ESR = 'ford_fusion_2018_adas'
  37. DELPHI_MRR = 'FORD_CADS'
  38. DBC: Dict[str, Dict[str, str]] = defaultdict(lambda: dbc_dict("ford_lincoln_base_pt", RADAR.DELPHI_MRR))
  39. @dataclass
  40. class FordCarInfo(CarInfo):
  41. package: str = "Co-Pilot360 Assist+"
  42. harness: Enum = Harness.ford_q3
  43. CAR_INFO: Dict[str, Union[CarInfo, List[CarInfo]]] = {
  44. CAR.ESCAPE_MK4: [
  45. FordCarInfo("Ford Escape 2020-21"),
  46. FordCarInfo("Ford Kuga 2020-21", "Driver Assistance Pack"),
  47. ],
  48. CAR.EXPLORER_MK6: FordCarInfo("Ford Explorer 2020-22"),
  49. CAR.FOCUS_MK4: FordCarInfo("Ford Focus EU 2019", "Driver Assistance Pack"),
  50. }
  51. FW_QUERY_CONFIG = FwQueryConfig(
  52. requests=[
  53. Request(
  54. [StdQueries.TESTER_PRESENT_REQUEST, StdQueries.MANUFACTURER_SOFTWARE_VERSION_REQUEST],
  55. [StdQueries.TESTER_PRESENT_RESPONSE, StdQueries.MANUFACTURER_SOFTWARE_VERSION_RESPONSE],
  56. whitelist_ecus=[Ecu.engine],
  57. ),
  58. Request(
  59. [StdQueries.TESTER_PRESENT_REQUEST, StdQueries.MANUFACTURER_SOFTWARE_VERSION_REQUEST],
  60. [StdQueries.TESTER_PRESENT_RESPONSE, StdQueries.MANUFACTURER_SOFTWARE_VERSION_RESPONSE],
  61. bus=0,
  62. whitelist_ecus=[Ecu.eps, Ecu.abs, Ecu.fwdRadar, Ecu.fwdCamera, Ecu.shiftByWire],
  63. ),
  64. ],
  65. )
  66. FW_VERSIONS = {
  67. CAR.ESCAPE_MK4: {
  68. (Ecu.eps, 0x730, None): [
  69. b'LX6C-14D003-AF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  70. b'LX6C-14D003-AH\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  71. ],
  72. (Ecu.abs, 0x760, None): [
  73. b'LX6C-2D053-NS\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  74. b'LX6C-2D053-NY\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  75. b'LX6C-2D053-SA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  76. ],
  77. (Ecu.fwdRadar, 0x764, None): [
  78. b'LB5T-14D049-AB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  79. ],
  80. (Ecu.fwdCamera, 0x706, None): [
  81. b'LJ6T-14F397-AD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  82. b'LJ6T-14F397-AE\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  83. ],
  84. (Ecu.engine, 0x7E0, None): [
  85. b'LX6A-14C204-BJV\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  86. b'LX6A-14C204-ESG\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  87. b'MX6A-14C204-BEF\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  88. ],
  89. (Ecu.shiftByWire, 0x732, None): [
  90. b'LX6P-14G395-AB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  91. b'LX6P-14G395-AD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  92. ],
  93. },
  94. CAR.EXPLORER_MK6: {
  95. (Ecu.eps, 0x730, None): [
  96. b'L1MC-14D003-AK\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  97. b'L1MC-14D003-AL\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  98. b'M1MC-14D003-AB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  99. ],
  100. (Ecu.abs, 0x760, None): [
  101. b'L1MC-2D053-BB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  102. b'L1MC-2D053-BF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  103. b'L1MC-2D053-KB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  104. ],
  105. (Ecu.fwdRadar, 0x764, None): [
  106. b'LB5T-14D049-AB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  107. ],
  108. (Ecu.fwdCamera, 0x706, None): [
  109. b'LB5T-14F397-AE\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  110. b'LB5T-14F397-AF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  111. ],
  112. (Ecu.engine, 0x7E0, None): [
  113. b'LB5A-14C204-EAC\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  114. b'MB5A-14C204-MD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  115. b'NB5A-14C204-HB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  116. ],
  117. (Ecu.shiftByWire, 0x732, None): [
  118. b'L1MP-14G395-AD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  119. b'L1MP-14G395-AE\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  120. b'L1MP-14G395-JB\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  121. ],
  122. },
  123. CAR.FOCUS_MK4: {
  124. (Ecu.eps, 0x730, None): [
  125. b'JX6C-14D003-AH\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  126. ],
  127. (Ecu.abs, 0x760, None): [
  128. b'JX61-2D053-CJ\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  129. ],
  130. (Ecu.fwdRadar, 0x764, None): [
  131. b'JX7T-14D049-AC\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  132. ],
  133. (Ecu.fwdCamera, 0x706, None): [
  134. b'JX7T-14F397-AH\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  135. ],
  136. (Ecu.engine, 0x7E0, None): [
  137. b'JX6A-14C204-BPL\x00\x00\x00\x00\x00\x00\x00\x00\x00',
  138. ],
  139. (Ecu.shiftByWire, 0x732, None): [
  140. ],
  141. },
  142. }