コード例 #1
0
ファイル: can_cpc.c プロジェクト: uqs/avalon
/* Init CAN Hardware */
void can_init(const char* dev) {
  bzero(&message, sizeof(can_message_t));

  /* ... add your code here ... */
  btr0=0x00;
  btr1=0x14;

  /* Using Interface cpc_usb0 */
  strcpy(interface, dev);
  // strcpy(interface, "/dev/cpc_usb0");

  /*Open the CAN*/
  if ((handle = CPC_OpenChannel(interface)) < 0) {
      fprintf(stderr, "ERROR: %s\n", CPC_DecodeErrorMsg(handle));
      exit(1);
  }
  PDEBUG("%s is CAN interface -> handle %d\n", interface, handle);

  /* ############################# Init Parameters ######################*/

  /*Define Handlers*/
  CPC_AddHandler(handle, cpc_read_message_handler);
  /*CPC_AddHandler(handle, get_steering_msg_handler);
  CPC_AddHandler(handle, get_yaw_msg_handler);*/


  /* This sets up the parameters used to initialize the CAN controller */
  PDEBUG("Initializing CAN-Controller ... ");

  CPCInitParamsPtr = CPC_GetInitParamsPtr(handle);
  CPCInitParamsPtr->canparams.cc_type                      = SJA1000;
  CPCInitParamsPtr->canparams.cc_params.sja1000.btr0       = btr0;
  CPCInitParamsPtr->canparams.cc_params.sja1000.btr1       = btr1;
  CPCInitParamsPtr->canparams.cc_params.sja1000.outp_contr = 0xda;
  CPCInitParamsPtr->canparams.cc_params.sja1000.acc_code0  = 0xff;
  CPCInitParamsPtr->canparams.cc_params.sja1000.acc_code1  = 0xff;
  CPCInitParamsPtr->canparams.cc_params.sja1000.acc_code2  = 0xff;
  CPCInitParamsPtr->canparams.cc_params.sja1000.acc_code3  = 0xff;
  CPCInitParamsPtr->canparams.cc_params.sja1000.acc_mask0  = 0xff;
  CPCInitParamsPtr->canparams.cc_params.sja1000.acc_mask1  = 0xff;
  CPCInitParamsPtr->canparams.cc_params.sja1000.acc_mask2  = 0xff;
  CPCInitParamsPtr->canparams.cc_params.sja1000.acc_mask3  = 0xff;
  CPCInitParamsPtr->canparams.cc_params.sja1000.mode       = 0;

  CPC_CANInit(handle, 0);
  PDEBUG("Done!\n\n");

  cpcfd = CPC_GetFdByHandle(handle);

  PDEBUG("Switch ON transimssion of CAN messages from CPC to PC\n");

  /* switch on transmission of CAN messages from CPC to PC */
  CPC_Control(handle, CONTR_CAN_Message | CONTR_CONT_ON);
  PDEBUG("Initialization finished...\n");
}
コード例 #2
0
ファイル: can_cpc.c プロジェクト: ptroja/libcan
int can_cpc_setup(can_cpc_device_p dev, int bitrate, int quanta_per_bit,
  double sampling_point, double timeout) {
  CPC_INIT_PARAMS_T* parameters;

  double t = 1.0/(8*bitrate*1e3);
  int brp = round(4*t*CAN_CPC_CLOCK_FREQUENCY/quanta_per_bit);
  int tseg1 = round(quanta_per_bit*sampling_point);
  int tseg2 = quanta_per_bit-tseg1;

  parameters = CPC_GetInitParamsPtr(dev->handle);
  parameters->canparams.cc_type = SJA1000;
  parameters->canparams.cc_params.sja1000.btr0 =
    ((CAN_CPC_SYNC_JUMP_WIDTH-1) << 6)+(brp-1);
  parameters->canparams.cc_params.sja1000.btr1 =
    (CAN_CPC_TRIPLE_SAMPLING << 7)+((tseg2-1) << 4)+(tseg1-2);
  parameters->canparams.cc_params.sja1000.outp_contr = 0xda;
  parameters->canparams.cc_params.sja1000.acc_code0 = 0xff;
  parameters->canparams.cc_params.sja1000.acc_code1 = 0xff;
  parameters->canparams.cc_params.sja1000.acc_code2 = 0xff;
  parameters->canparams.cc_params.sja1000.acc_code3 = 0xff;
  parameters->canparams.cc_params.sja1000.acc_mask0 = 0xff;
  parameters->canparams.cc_params.sja1000.acc_mask1 = 0xff;
  parameters->canparams.cc_params.sja1000.acc_mask2 = 0xff;
  parameters->canparams.cc_params.sja1000.acc_mask3 = 0xff;
  parameters->canparams.cc_params.sja1000.mode = 0;
  if (CPC_CANInit(dev->handle, 0))
    return CAN_CPC_ERROR_SETUP;

  dev->fd = CPC_GetFdByHandle(dev->handle);

  dev->bitrate = bitrate;
  dev->quanta_per_bit = quanta_per_bit;
  dev->sampling_point = sampling_point;
  dev->timeout = timeout;

  if (CPC_Control(dev->handle, CONTR_CAN_Message | CONTR_CONT_ON))
    return CAN_CPC_ERROR_SETUP;

  return CAN_CPC_ERROR_NONE;
}