Ejemplo n.º 1
0
CAN_HANDLE canOpen_driver(s_BOARD *board)
{
  VSCAN_HANDLE fd0 = 0;
  char busname[64];
  char* pEnd;
  int i;  
  int baudrate;
  
  printf("bus %s ", board->busname);
  fd0 = VSCAN_Open(board->busname, VSCAN_MODE_NORMAL);
  if(fd0 <= 0)
  {
    fprintf(stderr, "canOpen_driver (VScom): error opening %s\n", board->busname);
    return (CAN_HANDLE)fd0;
  }
  printf("(fd = %d)\n", fd0);
  baudrate = TranslateBaudeRate(board->baudrate);
  if(baudrate == 0)
    return 0;

  if (VSCAN_Ioctl((VSCAN_HANDLE)fd0, VSCAN_IOCTL_SET_SPEED, (void *)baudrate) != VSCAN_ERR_OK)
  {
    fprintf(stderr, "canOpen_driver (VScom): IOCTL set speed failed\n");
    return 0;
  }

   return (CAN_HANDLE)fd0;
}
Ejemplo n.º 2
0
/**
* \brief Default constructor
*/
CanBus::CanBus(QString device, int baudRate)
{
	printf("CanBus::CanBus:  %s %d\n", device.toStdString().c_str(), baudRate);
	rDebug("CanBus initialize");
	// Open and initialize the device
	devHandler = VSCAN_Open(device.toAscii().data(),  VSCAN_MODE_NORMAL);
	if(devHandler < 0)
	{
		qFatal("Failed to open Can device ");
		return;
	}
	rDebug("Can device "+device+" oppened correctly");
	
	if(setBaudRate(baudRate) != 0)
		rDebug("Failed setting baudRate");
}
Ejemplo n.º 3
-1
/**
* @brief         connects to the channels and initiates read thread.
* @param         void
* @return        S_OK for success, S_FALSE for failure
*/
HRESULT CDIL_CAN_VSCOM::startHardware(void)
{
    USES_CONVERSION;
    HRESULT hResult = S_FALSE;

    //VALIDATE_VALUE_RETURN_VAL(sg_bCurrState, STATE_HW_INTERFACE_SELECTED, ERR_IMPROPER_STATE);

    /* If no device available, exit */
    if (strcmp(sg_VSCanCfg.szLocation, "") == NULL ||
            strcmp(sg_VSCanCfg.szLocation, "\\\\.\\") == NULL  )
    {
        return S_FALSE;
    }

    if (sg_VSCanCfg.bDebug)
    {
        VSCAN_Ioctl(0, VSCAN_IOCTL_SET_DEBUG_MODE, VSCAN_DEBUG_MODE_FILE);
        VSCAN_Ioctl(0, VSCAN_IOCTL_SET_DEBUG, VSCAN_DEBUG_HIGH);
    }
    else
    {
        VSCAN_Ioctl(0, VSCAN_IOCTL_SET_DEBUG, VSCAN_DEBUG_NONE);
    }

    sg_VSCanCfg.hCan = VSCAN_Open(sg_VSCanCfg.szLocation, sg_VSCanCfg.dwMode);
    if (sg_VSCanCfg.hCan > 0)
    {
        if (VSCAN_Ioctl(sg_VSCanCfg.hCan, VSCAN_IOCTL_SET_TIMESTAMP, sg_VSCanCfg.bTimestamps?VSCAN_TIMESTAMP_ON:VSCAN_TIMESTAMP_OFF) != VSCAN_ERR_OK)
        {
            sg_pIlog->logMessage(A2T(__FILE__), __LINE__, _("set timestamp ioctl failed"));
            return (S_FALSE);
        }

        if (VSCAN_Ioctl(sg_VSCanCfg.hCan, VSCAN_IOCTL_SET_FILTER_MODE, sg_VSCanCfg.bDualFilter?VSCAN_FILTER_MODE_DUAL:VSCAN_FILTER_MODE_SINGLE) != VSCAN_ERR_OK)
        {
            sg_pIlog->logMessage(A2T(__FILE__), __LINE__, _("set filter mode ioctl failed"));
            return (S_FALSE);
        }

        if (VSCAN_Ioctl(sg_VSCanCfg.hCan, VSCAN_IOCTL_SET_ACC_CODE_MASK, &sg_VSCanCfg.codeMask) != VSCAN_ERR_OK)
        {
            sg_pIlog->logMessage(A2T(__FILE__), __LINE__, _("set acceptance code mask ioctl failed"));
            return (S_FALSE);
        }

        if (sg_VSCanCfg.vSpeed)
        {
            if (VSCAN_Ioctl(sg_VSCanCfg.hCan, VSCAN_IOCTL_SET_SPEED, (void*)sg_VSCanCfg.vSpeed) != VSCAN_ERR_OK)
            {
                sg_pIlog->logMessage(A2T(__FILE__), __LINE__, _("set speed ioctl failed"));
                return (S_FALSE);
            }
        }
        else
        {
            if (VSCAN_Ioctl(sg_VSCanCfg.hCan, VSCAN_IOCTL_SET_BTR, &sg_VSCanCfg.btr) != VSCAN_ERR_OK)
            {
                sg_pIlog->logMessage(A2T(__FILE__), __LINE__, _("set btr ioctl failed"));
                return (S_FALSE);
            }
        }

        sg_hEventRecv = CreateEvent(NULL, FALSE, FALSE, NULL);
        if (sg_hEventRecv == NULL)
        {
            sg_pIlog->logMessage(A2T(__FILE__), __LINE__, _("could not create the receive event"));
            hResult = S_FALSE;
        }

        if (VSCAN_SetRcvEvent(sg_VSCanCfg.hCan, sg_hEventRecv) != VSCAN_ERR_OK)
        {
            sg_pIlog->logMessage(A2T(__FILE__), __LINE__, _("VSCAN_SetRcvEvent failed"));
            hResult = S_FALSE;
        }

        sg_hReadThread = CreateThread(NULL, 0, CanRxEvent, NULL, 0, &sg_dwReadThreadId);
        if (sg_hReadThread == NULL)
        {
            sg_pIlog->logMessage(A2T(__FILE__), __LINE__, _("could not create the receive thread"));
            hResult = S_FALSE;
        }

        hResult = S_OK;

        sg_bCurrState = STATE_CONNECTED;
    }
    else
    {
        //log the error for open port failure
        sg_pIlog->logMessage(A2T(__FILE__), __LINE__, _("error opening \"VScom CAN\" interface"));
        hResult = ERR_LOAD_HW_INTERFACE;
    }

    return(hResult);
}