void incBusLoad (int channel, int flags, int load) { canHandle handle; unsigned char msg[8] = "Kvaser!"; int i, id = 100, dlc = sizeof(msg); canStatus stat = canERR_PARAM; handle = canOpenChannel(channel, flags); if (handle < 0) { check("canOpenChannel", handle); return; } stat = canBusOff(handle); check("canBusOff", stat); stat = canSetBusParams(handle, bitrate, 0, 0, 0, 0, 0); check("canSetBusParams", stat); canBusOn(handle); for (i = 0; i < load; i++) { stat = canWrite(handle, id, &msg, dlc, 0); check("canWrite", stat); } stat = canWriteWait(handle, id, &msg, dlc, 0, -1); check("canWriteWait", stat); canBusOff(handle); canClose(handle); }
/* Writes the given packet out on both channels * * returns: 0 on success, negative error code otherwise */ int CANIOKvaser::WritePacket(CanPacket &pkt) { int ret; //printf("CANIO: WRITE: pkt: %s\n", pkt.toString()); for (int i=0; i < DUALCAN_NR_CHANNELS; i++) { if ((ret = canWriteWait(channels[i], pkt.id, pkt.msg, pkt.dlc, pkt.flags, 1000)) < 0) { printf("CANIO: write wait error %d\n", ret); return ret; } if ((ret = canWriteSync(channels[i], 10000)) < 0) { printf("CANIO: error %d on write sync\n", ret); switch (ret) { case canERR_TIMEOUT: printf("CANIO: TIMEOUT error\n"); break; default: break; } return ret; } } return 0; }
static bool dbg_kavaser_can_send(uint32 ch, uint32 msg_id, uint8 *data, uint8 dlc) { int flag = 0; dbg_kvaser.status = canWriteWait(dbg_kvaser.handle, msg_id, data, dlc, flag, -1); if (dbg_kvaser.status != canOK) { printf("dbg_kavaser_can_send:canWriteWait err=%d\n", dbg_kvaser.status); fflush(stdout); return FALSE; } printf("dbg_kavaser_can_send:canWriteWait msg_id=0x%x err=%d\n", msg_id, dbg_kvaser.status); fflush(stdout); return TRUE; }
/** * * CAN_HANDLES must have value >=1 while CANLIB wants handles >= 0 * so fd0 needs to be decremented before use. * */ UNS8 canSend_driver(CAN_HANDLE fd0, Message const *m) { canStatus retval = canOK; unsigned flags = 0; fd0--; flags |= canMSG_STD; if (m->cob_id & 0x20000000) { /* TODO: is it correct to desume this info from cob_id? */ flags |= canMSG_EXT; } if (m->cob_id & 0x40000000) { flags |= canMSG_RTR; } /* * TODO: when should I set canMSG_ERROR_FRAME? */ retval = canWriteWait((int)fd0, m->cob_id, m->data, m->len, 10000, flags); if (retval != canOK) { fprintf(stderr, "canSend_driver (Kvaser) : canWriteWait() error, cob_id=%08X, len=%u, flags=%08X, returned value = %d\n", m->cob_id, m->len, flags, retval); canClose((int)fd0); return retval; } //fprintf(stderr, "canSend_driver (Kvaser) : canWriteWait() send packet, cob_id=%08X, len=%u, flags=%08X, returned value = %d\n", // m->cob_id, m->len, flags, retval); return retval; }