openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
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.
 
 
 
 
 
 

47 lines
1.4 KiB

#include "cdm.h"
#include "stddef.h"
int write_dmi(uint8_t *dst, uint64_t *addr, uint32_t length, uint32_t dmi_addr, uint8_t sel) {
struct cdm_dmi_cmd *cmd = (struct cdm_dmi_cmd*)dst;
cmd->cmd = CAM_CDM_CMD_DMI_32;
cmd->length = length - 1;
cmd->reserved = 0;
cmd->addr = 0; // gets patched in
cmd->DMIAddr = dmi_addr;
cmd->DMISel = sel;
*addr = (uint64_t)(dst + offsetof(struct cdm_dmi_cmd, addr));
return sizeof(struct cdm_dmi_cmd);
}
int write_cont(uint8_t *dst, uint32_t reg, const std::vector<uint32_t> &vals) {
struct cdm_regcontinuous_cmd *cmd = (struct cdm_regcontinuous_cmd*)dst;
cmd->cmd = CAM_CDM_CMD_REG_CONT;
cmd->count = vals.size();
cmd->offset = reg;
cmd->reserved0 = 0;
cmd->reserved1 = 0;
uint32_t *vd = (uint32_t*)(dst + sizeof(struct cdm_regcontinuous_cmd));
for (int i = 0; i < vals.size(); i++) {
*vd = vals[i];
vd++;
}
return sizeof(struct cdm_regcontinuous_cmd) + vals.size()*sizeof(uint32_t);
}
int write_random(uint8_t *dst, const std::vector<uint32_t> &vals) {
struct cdm_regrandom_cmd *cmd = (struct cdm_regrandom_cmd*)dst;
cmd->cmd = CAM_CDM_CMD_REG_RANDOM;
cmd->count = vals.size() / 2;
cmd->reserved = 0;
uint32_t *vd = (uint32_t*)(dst + sizeof(struct cdm_regrandom_cmd));
for (int i = 0; i < vals.size(); i++) {
*vd = vals[i];
vd++;
}
return sizeof(struct cdm_regrandom_cmd) + vals.size()*sizeof(uint32_t);
}