Kvaser Linux CANLIB

Hello, CAN!

Let's start with a simple example.

    #include <canlib.h>
    #include <stdio.h>

    void main(void)
    {
      canHandle h;

      canInitializeLibrary();
      h = canOpenChannel(0, canOPEN_EXCLUSIVE);
      if (h < 0) {
        char msg[64];
        canGetErrorText((canStatus)h, msg, sizeof(msg));
        fprintf(stderr, "canOpenChannel failed (%s)\n", msg);
        exit(1);
      }
      canSetBusParams(h, BAUD_250K, 0, 0, 0, 0, 0);
      canSetBusOutputControl(h, canDRIVER_NORMAL);
      canBusOn(h);
      canWrite(h, 123, "HELLO!", 6, 0);
      canWriteSync(h, 500);
      canBusOff(h);
      canClose(h);
    }

What does it do?

  1. The CANLIB library is initialized by a call to canInitializeLibrary().
  2. A channel to a CAN circuit is opened. In this case we open channel 0 which should be the first channel on the CAN interface. canOPEN_EXCLUSIVE means we don't want to share this channel with any other currently executing program.
  3. The CAN bus bit rate is set 250 kBit/s, using a set of predefined bus parameters.
  4. The CAN bus driver type is set.
  5. The CAN chip is activated.
  6. A message with (11-bit) CAN id = 123, length 6 and contents (decimal) 72, 69, 76, 76, 79, 31 is transmitted.
  7. Wait until the message is sent or at most 500 ms.
  8. Inactivate the CAN chip.
  9. Close the channel.

What does it not do? Almost all error checking is omitted for brevity.