コード例 #1
0
ファイル: CAN_MHS.cpp プロジェクト: Conti-Meissner/busmaster
/**
* \brief         connects to the channels and initiates read thread.
* \param         void
* \return        S_OK for success, S_FALSE for failure
*/
HRESULT CDIL_CAN_MHS::CAN_StartHardware(void)
{
USES_CONVERSION;
HRESULT hResult;
char str[100];

//VALIDATE_VALUE_RETURN_VAL(sg_bCurrState, STATE_HW_INTERFACE_SELECTED, ERR_IMPROPER_STATE);
if (!str_has_char(sg_MhsCanCfg.CanSnrStr))
  sprintf(str, "Snr=%s", sg_MhsCanCfg.CanSnrStr);
else
  str[0]='\0';
if (!CanDeviceOpen(0, str))
  {
  (void)CanSetOptions("CanTxAckEnable=1");
  // **** CAN Bus Start
  if (CanSetMode(0, OP_CAN_START, CAN_CMD_FIFOS_ERROR_CLEAR) >= 0)
    hResult = S_OK;
  else
    {
    hResult = S_FALSE;
    sg_pIlog->vLogAMessage(A2T(__FILE__), __LINE__, _T("could not start the controller in running mode"));
    }
  sg_bCurrState = STATE_CONNECTED;
  }
else
  {
  //log the error for open port failure
  sg_pIlog->vLogAMessage(A2T(__FILE__), __LINE__, _T("error opening \"Tiny-CAN\" interface"));
  hResult = ERR_LOAD_HW_INTERFACE;
  }
return(hResult);
}
コード例 #2
0
tCanDeviceT<TCanDescriptor>::tCanDeviceT(const char *device_name, int flags,
    unsigned char acceptance_code, unsigned char acceptance_mask, unsigned int baud_rate,
    unsigned send_fifo_size, unsigned receive_fifo_size)
    : m_can_user(-1)
{
  m_can_device = InvalidCanDescriptor();
  bool success = false;
#ifdef _SYSTEM_LXRT_
  if (m_canlxrt_available && icl_core::os::IsThisLxrtTask() && CanDriverLxrtSupport())
  {
    char *check_pointer;
    const char *convert_string = device_name + strlen(device_name) - 1;
    m_can_device = (TCanDescriptor)strtol(convert_string, &check_pointer, 10);
    if (check_pointer == convert_string)
    {
      LOGGING_ERROR_CO(CAN, tCanDevice, CanDriverName(), "Error converting given device name '" << device_name << "' to LXRT-device id" << endl);
    }
    else
    {
      LOGGING_INFO_CO(CAN, tCanDevice, CanDriverName(), "Using LXRT extension for accessing can device " << (int)m_can_device << endl);
      m_can_user = CreateCanFifoUser(m_can_device, acceptance_code, acceptance_mask, baud_rate, send_fifo_size, receive_fifo_size);
      if (m_can_user >= 0)
      {
        success = true;
        LOGGING_INFO_CO(CAN, tCanDevice, CanDriverName(), "Can User: "******"Error creating can fifo of LXRT-CAN-device " << (int)m_can_device << endl);
      }
    }
  }
  else
#endif
  {
    // Achtung, falls wir nicht lxrt-task sind oder kein lxrt can
    // interface zur Verf¸gung steht, wird der folgende code ausgef¸hrt:
    m_can_device = CanDeviceOpen(device_name, flags, acceptance_code, acceptance_mask, baud_rate, send_fifo_size, receive_fifo_size);
    if (CanDescriptorValid(m_can_device))
    {
      success = true;
      LOGGING_INFO_CO(CAN, tCanDevice, CanDriverName(), "Opened device " << device_name << " -> " << (uint64_t)m_can_device << endl);
    }
    else
    {
      LOGGING_ERROR_CO(CAN, tCanDevice, CanDriverName(), "Error open CAN-device '" << device_name << "' (errno=" << strerror(errno) << ")" << endl);
    }
  }

  if (!success)
    m_can_device = InvalidCanDescriptor();
}
コード例 #3
0
ファイル: CAN_MHS.cpp プロジェクト: JiteshPatel/busmaster
/**
* \brief         Lists the hardware interface available.
* \param[out]    asSelHwInterface, is INTERFACE_HW_LIST structure
* \param[out]    nCount , is INT contains the selected channel count.
* \return        S_OK for success, S_FALSE for failure
*/
HRESULT CDIL_CAN_MHS::CAN_ListHwInterfaces(INTERFACE_HW_LIST& asSelHwInterface, INT& nCount)
{
    USES_CONVERSION;

    char str[2];
    str[0] = '\0';
    if (CanDeviceOpen(0, str) == CAN_STATUS_OK)
    {
        (void)CanDeviceClose(0);

        nCount = 1;
        //set the current number of channels
        sg_nNoOfChannels = 1;
        asSelHwInterface[0].m_dwIdInterface = 0;
        asSelHwInterface[0].m_acDescription = "0";
        sg_bCurrState = STATE_HW_INTERFACE_LISTED;
    }
    else
    {
        nCount = 0;
        return (S_FALSE);
    }
    return(S_OK);
}