Kvaser Ab Driver

Kvaser ab driver jobs
  • About Kvaser AB. With over 24 years of CAN development experience and more than 30 CAN-related products to their name, Kvaser AB is the CAN expert, bringing their deep knowledge in the field of CAN to industries that include Automotive, Avionics, Building Automation, Domestic Appliances, Hydraulic Equipment, Industrial Automation, Maritime, Medical, Military, Railway, Telecoms.
  • Generated on 2019-Mar-29 from project linux revision v5.1-rc2 Powered by Code Browser 2.1 Generator usage only permitted with license.
  • We develop firmware, drivers and applications to support Kvaser's hardware. The hardware is designed in-house by our hardware department. We work close together with the hardware departement to create new products. Firmware is written in C, drivers in C/C and APIs in C, C, C#, Python and Delphi. We use Delphi and Qt for our GUI applications.

Kvaser Ab Driver Test

1/* SPDX-License-Identifier: GPL-2.0 */
2/* Parts of this driver are based on the following:
3 * - Kvaser linux leaf driver (version 4.78)
4 * - CAN driver for esd CAN-USB/2
5 * - Kvaser linux usbcanII driver (version 5.3)
6 * - Kvaser linux mhydra driver (version 5.24)
7 *
8 * Copyright (C) 2002-2018 KVASER AB, Sweden. All rights reserved.
9 * Copyright (C) 2010 Matthias Fuchs <[email protected]>, esd gmbh
10 * Copyright (C) 2012 Olivier Sobrie <[email protected]>
11 * Copyright (C) 2015 Valeo S.A.
12 */
13
14#ifndefKVASER_USB_H
15#define KVASER_USB_H
16
17/* Kvaser USB CAN dongles are divided into three major platforms:
18 * - Hydra: Running firmware labeled as 'mhydra'
19 * - Leaf: Based on Renesas M32C or Freescale i.MX28, running firmware labeled
20 * as 'filo'
21 * - UsbcanII: Based on Renesas M16C, running firmware labeled as 'helios'
22 */
23
24#include <linux/completion.h>
25#include <linux/spinlock.h>
26#include <linux/types.h>
27#include <linux/usb.h>
28
29#include <linux/can.h>
30#include <linux/can/dev.h>
31
32#define KVASER_USB_MAX_RX_URBS 4
33#define KVASER_USB_MAX_TX_URBS 128
34#define KVASER_USB_TIMEOUT 1000 /* msecs */
35#define KVASER_USB_RX_BUFFER_SIZE 3072
36#define KVASER_USB_MAX_NET_DEVICES 5
37
38/* USB devices features */
39#define KVASER_USB_HAS_SILENT_MODE BIT(0)
40#define KVASER_USB_HAS_TXRX_ERRORS BIT(1)
41
42/* Device capabilities */
43#define KVASER_USB_CAP_BERR_CAP 0x01
44#define KVASER_USB_CAP_EXT_CAP 0x02
45#define KVASER_USB_HYDRA_CAP_EXT_CMD 0x04
46
47structkvaser_usb_dev_cfg;
48
49enumkvaser_usb_leaf_family {
50KVASER_LEAF,
51KVASER_USBCAN,
52};
53
54#define KVASER_USB_HYDRA_MAX_CMD_LEN 128
55structkvaser_usb_dev_card_data_hydra {
56u8channel_to_he[KVASER_USB_MAX_NET_DEVICES];
57u8sysdbg_he;
58spinlock_ttransid_lock; /* lock for transid */
59u16transid;
60/* lock for usb_rx_leftover and usb_rx_leftover_len */
61spinlock_tusb_rx_leftover_lock;
62u8usb_rx_leftover[KVASER_USB_HYDRA_MAX_CMD_LEN];
63u8usb_rx_leftover_len;
64};
65structkvaser_usb_dev_card_data {
66u32ctrlmode_supported;
67u32capabilities;
68union {
69struct {
70enumkvaser_usb_leaf_familyfamily;
71 } leaf;
72structkvaser_usb_dev_card_data_hydrahydra;
73 };
74};
75
76/* Context for an outstanding, not yet ACKed, transmission */
77structkvaser_usb_tx_urb_context {
78structkvaser_usb_net_priv *priv;
79u32echo_index;
80intdlc;
81};
82
83structkvaser_usb {
84structusb_device *udev;
85structusb_interface *intf;
86structkvaser_usb_net_priv *nets[KVASER_USB_MAX_NET_DEVICES];
87conststructkvaser_usb_dev_ops *ops;
88conststructkvaser_usb_dev_cfg *cfg;
89
90structusb_endpoint_descriptor *bulk_in, *bulk_out;
91structusb_anchorrx_submitted;
92
93/* @max_tx_urbs: Firmware-reported maximum number of outstanding,
94 * not yet ACKed, transmissions on this device. This value is
95 * also used as a sentinel for marking free tx contexts.
96 */
97u32fw_version;
98unsignedintnchannels;
99unsignedintmax_tx_urbs;
100structkvaser_usb_dev_card_datacard_data;
101
102boolrxinitdone;
103void *rxbuf[KVASER_USB_MAX_RX_URBS];
104dma_addr_trxbuf_dma[KVASER_USB_MAX_RX_URBS];
105};
106
107structkvaser_usb_net_priv {
108structcan_privcan;
109structcan_berr_counterbec;
110
111structkvaser_usb *dev;
112structnet_device *netdev;
113intchannel;
114
115structcompletionstart_comp, stop_comp, flush_comp;
116structusb_anchortx_submitted;
117
118spinlock_ttx_contexts_lock; /* lock for active_tx_contexts */
119intactive_tx_contexts;
120structkvaser_usb_tx_urb_contexttx_contexts[];
121};
122
123/**
124 * struct kvaser_usb_dev_ops - Device specific functions
125 * @dev_set_mode: used for can.do_set_mode
126 * @dev_set_bittiming: used for can.do_set_bittiming
127 * @dev_set_data_bittiming: used for can.do_set_data_bittiming
128 * @dev_get_berr_counter: used for can.do_get_berr_counter
129 *
130 * @dev_setup_endpoints: setup USB in and out endpoints
131 * @dev_init_card: initialize card
132 * @dev_get_software_info: get software info
133 * @dev_get_software_details: get software details
134 * @dev_get_card_info: get card info
135 * @dev_get_capabilities: discover device capabilities
136 *
137 * @dev_set_opt_mode: set ctrlmod
138 * @dev_start_chip: start the CAN controller
139 * @dev_stop_chip: stop the CAN controller
140 * @dev_reset_chip: reset the CAN controller
141 * @dev_flush_queue: flush outstanding CAN messages
142 * @dev_read_bulk_callback: handle incoming commands
143 * @dev_frame_to_cmd: translate struct can_frame into device command
144 */
145structkvaser_usb_dev_ops {
146int (*dev_set_mode)(structnet_device *netdev, enumcan_modemode);
147int (*dev_set_bittiming)(structnet_device *netdev);
148int (*dev_set_data_bittiming)(structnet_device *netdev);
149int (*dev_get_berr_counter)(conststructnet_device *netdev,
150structcan_berr_counter *bec);
151int (*dev_setup_endpoints)(structkvaser_usb *dev);
152int (*dev_init_card)(structkvaser_usb *dev);
153int (*dev_get_software_info)(structkvaser_usb *dev);
154int (*dev_get_software_details)(structkvaser_usb *dev);
155int (*dev_get_card_info)(structkvaser_usb *dev);
156int (*dev_get_capabilities)(structkvaser_usb *dev);
157int (*dev_set_opt_mode)(conststructkvaser_usb_net_priv *priv);
158int (*dev_start_chip)(structkvaser_usb_net_priv *priv);
159int (*dev_stop_chip)(structkvaser_usb_net_priv *priv);
160int (*dev_reset_chip)(structkvaser_usb *dev, intchannel);
161int (*dev_flush_queue)(structkvaser_usb_net_priv *priv);
162void (*dev_read_bulk_callback)(structkvaser_usb *dev, void *buf,
163intlen);
164void *(*dev_frame_to_cmd)(conststructkvaser_usb_net_priv *priv,
165conststructsk_buff *skb, int *frame_len,
166int *cmd_len, u16transid);
167};
168
169structkvaser_usb_dev_cfg {
170conststructcan_clockclock;
171constunsignedinttimestamp_freq;
172conststructcan_bittiming_const * constbittiming_const;
173conststructcan_bittiming_const * constdata_bittiming_const;
174};
175
176externconststructkvaser_usb_dev_opskvaser_usb_hydra_dev_ops;
177externconststructkvaser_usb_dev_opskvaser_usb_leaf_dev_ops;
178
179intkvaser_usb_recv_cmd(conststructkvaser_usb *dev, void *cmd, intlen,
180int *actual_len);
181
182intkvaser_usb_send_cmd(conststructkvaser_usb *dev, void *cmd, intlen);
183
184intkvaser_usb_send_cmd_async(structkvaser_usb_net_priv *priv, void *cmd,
185intlen);
186
187intkvaser_usb_can_rx_over_error(structnet_device *netdev);
188#endif /* KVASER_USB_H */
189

Kvaser Ab Driver License Test

Kvaser PCIcanx product family is a family of CAN/PCI interface boards and comprises three members: Kvaser PCIcanx 4xHS, PCIcanx HS/HS and PCIcanx HS. The Kvaser PCIcanx boards fits in both PCI-X and PCI bus systems. Galvanically isolated CAN bus drivers to protect the hardware. Hardware Compliant with PCI 2.3 The board fits in both 3.3V PCI-X.