from selfdrive.car.mazda.values import CAR, Buttons def create_steering_control(packer, car_fingerprint, frame, apply_steer, lkas): tmp = apply_steer + 2048 lo = tmp & 0xFF hi = tmp >> 8 b1 = int(lkas["BIT_1"]) ldw = int(lkas["LDW"]) er1= int(lkas["ERR_BIT_1"]) lnv = 0 er2= int(lkas["ERR_BIT_2"]) steering_angle = int(lkas["STEERING_ANGLE"]) b2 = int(lkas["ANGLE_ENABLED"]) tmp = steering_angle + 2048 ahi = tmp >> 10 amd = (tmp & 0x3FF) >> 2 amd = (amd >> 4) | (( amd & 0xF) << 4) alo = (tmp & 0x3) << 2 ctr = frame % 16 # bytes: [ 1 ] [ 2 ] [ 3 ] [ 4 ] csum = 249 - ctr - hi - lo - (lnv << 3) - er1 - (ldw << 7) - ( er2 << 4) - (b1 << 5) #bytes [ 5 ] [ 6 ] [ 7 ] csum = csum - ahi - amd - alo - b2 if ahi == 1: csum = csum + 15 if csum < 0: if csum < -256: csum = csum + 512 else: csum = csum + 256 csum = csum % 256 if car_fingerprint == CAR.CX5: values = { "LKAS_REQUEST" : apply_steer, "CTR" : ctr, "ERR_BIT_1" : er1, "LINE_NOT_VISIBLE" : lnv, "LDW" : ldw, "BIT_1" : b1, "ERR_BIT_2" : er2, "STEERING_ANGLE" : steering_angle, "ANGLE_ENABLED" : b2, "CHKSUM" : csum } return packer.make_can_msg("CAM_LKAS", 0, values) def create_button_cmd(packer, car_fingerprint, button): if button == Buttons.CANCEL: can = 1 res = 0 elif button == Buttons.RESUME: can = 0 res = 1 else: can = 0 res = 0 if car_fingerprint == CAR.CX5: values = { "CAN_OFF" : can, "CAN_OFF_INV" : (can + 1) % 2, "SET_P" : 0, "SET_P_INV" : 1, "RES" : res, "RES_INV" : (res + 1) % 2, "SET_M" : 0, "SET_M_INV" : 1, "DISTANCE_LESS" : 0, "DISTANCE_LESS_INV" : 1, "DISTANCE_MORE" : 0, "DISTANCE_MORE_INV" : 1, "MODE_X" : 0, "MODE_X_INV" : 1, "MODE_Y" : 0, "MODE_Y_INV" : 1, "BIT1" : 1, "BIT2" : 1, "BIT3" : 1, "CTR" : 0 } return packer.make_can_msg("CRZ_BTNS", 0, values)