/** * @brief MainWindow::on_pushButtonRefresh_clicked */ void MainWindow::on_pushButtonRefresh_clicked() { qDebug() debugprefix << "on_pushButtonRefresh_clicked() scanning channels" ; int c,i; treeWidgetItems.clear(); ui->treeWidgetInterfaces->clear(); canStatus stat = canGetNumberOfChannels(&c); if( canOK == stat ){ for (i=0; i < c; i++) { char tmp[255]; stat = canGetChannelData(i, canCHANNELDATA_DEVDESCR_ASCII, &tmp, sizeof(tmp)); if (stat < 0){ char buf[128]; canGetErrorText(stat,buf,128); qDebug() debugprefix << "canGetChannelData() " << buf ; }else{ QTreeWidgetItem *port = new QTreeWidgetItem(ui->treeWidgetInterfaces); QTreeWidgetItem *name = new QTreeWidgetItem(port); port->setText(0, QString().setNum(i,10)); name->setText(0, QString(tmp)); qDebug() debugprefix << "canGetChannelData("<< i << ") " << tmp; port->setExpanded(true); } } }else{ char buf[128]; canGetErrorText(stat,buf,128); qDebug() debugprefix << "canGetNumberOfChannels() " << buf ; } }
/** * \brief This function will create a single network with available single hardware. * \param void * \return returns defERR_OK (always) * \authors [email protected] * \date 05.29.2015 Created */ static int nCreateSingleHardwareNetwork() { /* Set the number of channels as 1 */ sg_ucNoOfHardware = (UCHAR)1; sg_nNoOfChannels = 1; sg_aodChannels[0].m_nChannel = 0; /* Update channel info */ //char acVendor[MAX_CHAR_LONG]; char chBuffer[512]; DWORD dwFirmWare[2]; canGetChannelData(0, canCHANNELDATA_CARD_SERIAL_NO, chBuffer, sizeof(chBuffer)); sscanf_s( chBuffer, "%ld", &sg_HardwareIntr[0].m_dwVendor ); canGetChannelData(0, canCHANNELDATA_CHANNEL_NAME, chBuffer, sizeof(chBuffer)); sg_HardwareIntr[0].m_acDescription = chBuffer; if(sg_HardwareIntr[0].m_acDescription.find(" LIN ",0)!=std::string::npos) { /* Get Firmware info */ canGetChannelData(0, canCHANNELDATA_CARD_FIRMWARE_REV, dwFirmWare, sizeof(dwFirmWare)); sprintf(chBuffer,"0x%08lx 0x%08lx", dwFirmWare[0], dwFirmWare[1]); sg_HardwareIntr[0].m_acDeviceName = chBuffer; sprintf(sg_aodChannels[0].m_strName , _("%s, Serial Number: %ld, Firmware: %s"), sg_HardwareIntr[0].m_acDescription.c_str(), sg_HardwareIntr[0].m_dwVendor, sg_HardwareIntr[0].m_acDeviceName.c_str()); } else { sg_ucNoOfHardware = (UCHAR)0; sg_nNoOfChannels = 0; return HW_INTERFACE_NO_SEL; } return defERR_OK; }
void main(int argc, char* argv[]) { canStatus stat; int i, chanCount; printf("Starting...\n"); canInitializeLibrary(); stat = canGetNumberOfChannels(&chanCount); Check("canGetNumberOfChannels", stat); if (chanCount<0 || chanCount > 1000) { printf("ChannelCount = %d but I don't believe it.\n", chanCount); exit(1); } else { printf("%d channels.\n", chanCount); } for (i=0; i<chanCount; i++) { DWORD tmp; DWORD quad[2]; char name[64]; unsigned long ean[2]; printf("== Channel %d ===============================\n", i); stat = canGetChannelData(i, canCHANNELDATA_CHANNEL_CAP, &tmp, sizeof(tmp)); Check("canGetChannelData", stat); printf("Channel Capabilities = 0x%08lx ", tmp); if (tmp & canCHANNEL_CAP_EXTENDED_CAN) printf("Ext "); if (tmp & canCHANNEL_CAP_BUS_STATISTICS) printf("Stat "); if (tmp & canCHANNEL_CAP_ERROR_COUNTERS) printf("ErrCnt "); if (tmp & canCHANNEL_CAP_CAN_DIAGNOSTICS) printf("Diag "); if (tmp & canCHANNEL_CAP_GENERATE_ERROR) printf("ErrGen "); if (tmp & canCHANNEL_CAP_GENERATE_OVERLOAD) printf("OvlGen "); if (tmp & canCHANNEL_CAP_TXREQUEST) printf("TxRq "); if (tmp & canCHANNEL_CAP_TXACKNOWLEDGE) printf("TxAck "); if (tmp & canCHANNEL_CAP_VIRTUAL) printf("Virt "); if (tmp & canCHANNEL_CAP_SIMULATED) printf("Simulated "); if (tmp & canCHANNEL_CAP_REMOTE) printf("Remote "); printf("\n"); stat = canGetChannelData(i, canCHANNELDATA_TRANS_CAP, &tmp, sizeof(tmp)); Check("canGetChannelData", stat); printf("DRVcan Capabilities = 0x%08lx ", tmp); if (tmp & canDRIVER_CAP_HIGHSPEED) printf("HiSpd "); printf("\n"); stat = canGetChannelData(i, canCHANNELDATA_CHANNEL_FLAGS, &tmp, sizeof(tmp)); Check("canGetChannelData", stat); printf("Channel Flags = 0x%08lx\n", tmp); stat = canGetChannelData(i, canCHANNELDATA_CARD_TYPE, &tmp, sizeof(tmp)); Check("canGetChannelData", stat); printf("Board type = 0x%08lx", tmp); switch (tmp) { case canHWTYPE_NONE: printf(" (Unknown)\n"); break; case canHWTYPE_VIRTUAL: printf(" (Virtual)\n"); break; case canHWTYPE_LAPCAN: printf(" (LAPcan family)\n"); break; case canHWTYPE_PCCAN: printf(" (PCcan Family)\n"); break; case canHWTYPE_PCICAN: printf(" (PCIcan Family)\n"); break; case canHWTYPE_USBCAN: printf(" (USBcan Family)\n"); break; case canHWTYPE_PCICAN_II: printf(" (PCIcan II Family)\n"); break; case canHWTYPE_USBCAN_II: printf(" (USBcan II Family (including Kvaser Memorator))\n"); break; case canHWTYPE_LEAF: printf(" (Kvaser Leaf Family)\n"); break; case canHWTYPE_PC104_PLUS: printf(" (PC104+ Family)\n"); break; case canHWTYPE_PCICANX_II: printf(" (PCIcanx II Family)\n"); break; case canHWTYPE_MEMORATOR_PRO: case canHWTYPE_UVP: printf(" (Kvaser Memorator Professional Family)\n"); break; case canHWTYPE_USBCAN_PRO: printf(" (Kvaser USBcan Professional Family)\n"); break; case canHWTYPE_IRIS: printf(" (Kvaser BlackBird)\n"); break; case canHWTYPE_EAGLE: printf(" (Kvaser Eagle)\n"); break; case canHWTYPE_MINIPCIE: printf(" (Kvaser Mini PCI Express)\n"); break; case canHWTYPE_USBCAN_LIGHT: printf(" (Kvaser USBcan Light)\n"); break; default: printf(" (Unsupported)\n"); break; } stat = canGetChannelData(i, canCHANNELDATA_CARD_NUMBER, &tmp, sizeof(tmp)); Check("canCHANNELDATA_CARD_NUMBER", stat); printf("Board Number = 0x%08lx\n", tmp); stat = canGetChannelData(i, canCHANNELDATA_CHAN_NO_ON_CARD, &tmp, sizeof(tmp)); Check("canCHANNELDATA_CHAN_NO_ON_CARD", stat); printf("Channel no on board = 0x%08lx\n", tmp); stat = canGetChannelData(i, canCHANNELDATA_CARD_SERIAL_NO, quad, sizeof(quad)); Check("canCHANNELDATA_CARD_SERIAL_NO", stat); printf("Board S/N = 0x%08lx 0x%08lx\n", quad[0], quad[1]); stat = canGetChannelData(i, canCHANNELDATA_TRANS_SERIAL_NO, quad, sizeof(quad)); Check("canCHANNELDATA_TRANS_SERIAL_NO", stat); printf("DRVcan S/N = 0x%08lx 0x%08lx\n", quad[0], quad[1]); stat = canGetChannelData(i, canCHANNELDATA_CARD_FIRMWARE_REV, quad, sizeof(quad)); Check("canCHANNELDATA_CARD_FIRMWARE_REV", stat); printf("Board F/W version = 0x%08lx 0x%08lx\n", quad[0], quad[1]); stat = canGetChannelData(i, canCHANNELDATA_CARD_HARDWARE_REV, quad, sizeof(quad)); Check("canCHANNELDATA_CARD_HARDWARE_REV", stat); printf("Board H/W version = 0x%08lx 0x%08lx\n", quad[0], quad[1]); stat = canGetChannelData(i, canCHANNELDATA_CARD_UPC_NO, ean, sizeof(ean)); Check("canCHANNELDATA_CARD_UPC_NO", stat); printf("Board UPC/EAN = 0x%08x 0x%08x\n", ean[1], ean[0]); stat = canGetChannelData(i, canCHANNELDATA_TRANS_UPC_NO, ean, sizeof(ean)); Check("canCHANNELDATA_TRANS_UPC_NO", stat); printf("DRVcan UPC/EAN = 0x%08x 0x%08x\n", ean[1], ean[0]); stat = canGetChannelData(i, canCHANNELDATA_CHANNEL_NAME, name, sizeof(name)); Check("canCHANNELDATA_CHANNEL_NAME", stat); printf("Channel name = '%s'\n", name); stat = canGetChannelData(i, canCHANNELDATA_REMOTE_OPERATIONAL_MODE, &tmp, sizeof(tmp)); if (stat != canERR_NOT_IMPLEMENTED) { Check("canCHANNELDATA_REMOTE_OPERATIONAL_MODE", stat); printf("Operational mode = %d (%s)\n", tmp, CANCHANNEL_OPMODE_TEXT[tmp]); stat = canGetChannelData(i, canCHANNELDATA_REMOTE_PROFILE_NAME, name, sizeof(name)); Check("canCHANNELDATA_REMOTE_PROFILE_NAME", stat); printf("Profile name = '%s'\n", name); stat = canGetChannelData(i, canCHANNELDATA_REMOTE_HOST_NAME, name, sizeof(name)); Check("canCHANNELDATA_REMOTE_HOST_NAME", stat); printf("Remote host name = '%s'\n", name); stat = canGetChannelData(i, canCHANNELDATA_REMOTE_MAC, name, sizeof(name)); Check("canCHANNELDATA_REMOTE_MAC", stat); printf("MAC = '%s'\n", name); } else { printf("Device is not capable of acting in remote operational mode\n"); } printf("\n"); } }
void main(int argc, char* argv[]) { int i; canStatus stat; char tmpS[256]; // Default values. First = 0; Second = 1; Bitrate = 1000000; LoopCount = 1; Verbose = 2; QuitOnError = 1; ErrorsFound = 0; FirstHardwareType = 0; SecondHardwareType = 0; if (argc <= 1) Usage(); // Parse the command line. for (i=1; i<argc; i++) { int tmp; char c; if (strcmp(argv[i], "-s") == 0) Verbose=0; else if (strcmp(argv[i], "-silent") == 0) Verbose=0; else if (strcmp(argv[i], "-i") == 0) QuitOnError = FALSE; else if (sscanf(argv[i], "-a%d%c", &tmp, &c) == 1) First = tmp; else if (sscanf(argv[i], "-b%d%c", &tmp, &c) == 1) Second = tmp; else if (sscanf(argv[i], "-B%d%c", &tmp, &c) == 1) Bitrate = tmp; else if (sscanf(argv[i], "-randomize=%d%c", &tmp, &c) == 1) srand(tmp); else if (sscanf(argv[i], "-r=%d%c", &tmp, &c) == 1) srand(tmp); else if (strcmp(argv[i], "-r") == 0) randomize(); else if (strcmp(argv[i], "-randomize") == 0) randomize(); else if (sscanf(argv[i], "-L%d%c", &tmp, &c) == 1) LoopCount = tmp; else if (sscanf(argv[i], "-L=%d%c", &tmp, &c) == 1) LoopCount = tmp; else Usage(); } printf("Starting test of time stamps with Kvaser CANLIB API.\n"); printf("Time stamp resolution: 10 us\n\n"); stat = canLocateHardware(); Check("canLocateHardware", stat); stat = canGetChannelData(First, canCHANNELDATA_CHANNEL_NAME, tmpS, sizeof(tmpS)); Check("canGetChannelData", stat); if (Verbose) printf("First channel: %s.\n", tmpS); stat = canGetChannelData(Second, canCHANNELDATA_CHANNEL_NAME, tmpS, sizeof(tmpS)); Check("canGetChannelData", stat); if (Verbose) printf("Second channel: %s.\n", tmpS); stat = canGetChannelData(First, canCHANNELDATA_CARD_TYPE, &FirstHardwareType, sizeof(FirstHardwareType)); Check("canLocateHardware", stat); stat = canGetChannelData(Second, canCHANNELDATA_CARD_TYPE, &SecondHardwareType, sizeof(SecondHardwareType)); Check("canLocateHardware", stat); PerformTest(argc, argv); if (ErrorsFound) { printf("\nTest completed with %d ERRORS.\n", ErrorsFound); } else { printf("\nTest SUCCESSFULLY completed.\n"); } exit(0); }
/** * \brief This function will get the hardware selection from the user * and will create essential networks. * \param unDefaultChannelCnt * \return returns defERR_OK (always) * \authors [email protected] * \date 05.29.2015 Created */ static int nCreateMultipleHardwareNetwork(UINT unDefaultChannelCnt = 0) { int nHwCount = sg_ucNoOfHardware; DWORD dwFirmWare[2]; char chBuffer[512] = ""; std::string name; int i = 0; // Get Hardware Network Map for (int nCount = 0; nCount < nHwCount; nCount++) { canGetChannelData(nCount, canCHANNELDATA_CHANNEL_NAME, chBuffer, sizeof(chBuffer)); name = chBuffer; if(name.find(" LIN ",0)!=std::string::npos) { sg_HardwareIntr[nCount].m_acDescription = chBuffer; sg_HardwareIntr[nCount].m_dwIdInterface = i; canGetChannelData(nCount, canCHANNELDATA_CARD_SERIAL_NO, chBuffer, sizeof(chBuffer)); sscanf_s( chBuffer, "%ld", &sg_HardwareIntr[nCount].m_dwVendor ); //Get Firmware info canGetChannelData(nCount, canCHANNELDATA_CARD_FIRMWARE_REV, dwFirmWare, sizeof(dwFirmWare)); sprintf_s(chBuffer, sizeof(chBuffer), "0x%08lx 0x%08lx", dwFirmWare[0], dwFirmWare[1]); sg_HardwareIntr[nCount].m_acDeviceName = chBuffer; //sprintf(sg_HardwareIntr[nCount].m_acDeviceName,"0x%08lx 0x%08lx", dwFirmWare[0], dwFirmWare[1]); canGetChannelData(nCount, canCHANNELDATA_CHANNEL_FLAGS, chBuffer, sizeof(chBuffer)); i++; } } nHwCount = i; /* If the default channel count parameter is set, prevent displaying the hardware selection dialog */ if ( unDefaultChannelCnt && nHwCount >= unDefaultChannelCnt ) { for (UINT i = 0; i < unDefaultChannelCnt; i++) { sg_anSelectedItems[i] = i; } nHwCount = unDefaultChannelCnt; } else if ( ListHardwareInterfaces(sg_hOwnerWnd, DRIVER_LIN_KVASER, sg_HardwareIntr, sg_anSelectedItems, nHwCount) != 0 ) { return HW_INTERFACE_NO_SEL; } sg_ucNoOfHardware = (UCHAR)nHwCount; sg_nNoOfChannels = (UINT)nHwCount; //Reorder hardware interface as per the user selection for (int nCount = 0; nCount < sg_ucNoOfHardware; nCount++) { sg_aodChannels[nCount].m_nChannel = sg_HardwareIntr[sg_anSelectedItems[nCount]].m_dwIdInterface; sprintf(sg_aodChannels[nCount].m_strName , _("Kvaser - %s, Serial Number- %ld, Firmware- %s"), sg_HardwareIntr[sg_anSelectedItems[nCount]].m_acDescription.c_str(), sg_HardwareIntr[sg_anSelectedItems[nCount]].m_dwVendor, sg_HardwareIntr[sg_anSelectedItems[nCount]].m_acDeviceName.c_str()); } return defERR_OK; }