kvmlib.h
Go to the documentation of this file.
1 /*
2 * Copyright 2017 by Kvaser AB, Molndal, Sweden
3 * http://www.kvaser.com
4 *
5 * This software is dual licensed under the following two licenses:
6 * BSD-new and GPLv2. You may use either one. See the included
7 * COPYING file for details.
8 *
9 * License: BSD-new
10 * ==============================================================================
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions are met:
13 * * Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * * Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
18 * * Neither the name of the <organization> nor the
19 * names of its contributors may be used to endorse or promote products
20 * derived from this software without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
26 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
29 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
30 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
33 *
34 *
35 * License: GPLv2
36 * ==============================================================================
37 * This program is free software; you can redistribute it and/or modify
38 * it under the terms of the GNU General Public License as published by
39 * the Free Software Foundation; either version 2 of the License, or
40 * (at your option) any later version.
41 *
42 * This program is distributed in the hope that it will be useful,
43 * but WITHOUT ANY WARRANTY; without even the implied warranty of
44 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
45 * GNU General Public License for more details.
46 *
47 * You should have received a copy of the GNU General Public License
48 * along with this program; if not, write to the Free Software
49 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
50 *
51 *
52 * IMPORTANT NOTICE:
53 * ==============================================================================
54 * This source code is made available for free, as an open license, by Kvaser AB,
55 * for use with its applications. Kvaser AB does not accept any liability
56 * whatsoever for any third party patent or other immaterial property rights
57 * violations that may result from any usage of this source code, regardless of
58 * the combination of source code and various applications that it can be used
59 * in, or with.
60 *
61 * -----------------------------------------------------------------------------
62 */
63 
64 #ifndef KVMLIB_H
65 #define KVMLIB_H
66 
101 #define WINAPI
102 #define INVALID_HANDLE_VALUE NULL
103 typedef void* HANDLE;
104 #include <stdint.h>
105 #include <stdio.h>
106 
107 typedef int8_t int8;
108 typedef uint8_t uint8;
109 typedef int16_t int16;
110 typedef uint16_t uint16;
111 typedef int32_t int32;
112 typedef uint32_t uint32;
113 typedef int64_t int64;
114 
115 
116 #ifdef __cplusplus
117 extern "C" {
118 #endif
119 
128 #define kvmDEVICE_MHYDRA 0
129 #define kvmDEVICE_MHYDRA_EXT 1
130 
140 #define kvmLDF_MAJOR_CAN 3
141 #define kvmLDF_MAJOR_CAN64 5
142 
147 typedef HANDLE kmeFileHandle;
148 
157 #define kvmFS_FAT16 0
158 #define kvmFS_FAT32 1
159 
169 #define kvmFILE_KME24 0
170 #define kvmFILE_KME25 1
171 #define kvmFILE_KME40 2
172 #define kvmFILE_KME50 3
173 #define kvmFILE_KME60 4
174 
179 typedef HANDLE kvmHandle;
180 
181 
192  // If you change here, remember to also change kvmlib.cpp and kvmlibtest...
193 typedef enum {
194  kvmOK = 0,
195  kvmFail = -1,
201  kvmEOF = -12,
228 
229 } kvmStatus;
240 #define kvmLogFileType_ERR 0
241 #define kvmLogFileType_ALL 1
242 
253 #define kvm_SWINFO_KVMLIB 1
254 #define kvm_SWINFO_DRIVER 2
255 #define kvm_SWINFO_FIRMWARE 3
256 #define kvm_SWINFO_DRIVER_PRODUCT 4
257 #define kvm_SWINFO_CONFIG_VERSION_NEEDED 5
258 #define kvm_SWINFO_CPLD_VERSION 6
259 
261 #pragma pack(push, 1)
262 
263 #ifndef canMSG_RTR
264 
273 # define canMSG_RTR 0x0001
274 # define canMSG_STD 0x0002
275 # define canMSG_EXT 0x0004
276 # define canMSG_ERROR_FRAME 0x0020
277 # define canMSG_TXACK 0x0040
278 # define canMSG_TXRQ 0x0080
279 # define canMSGERR_OVERRUN 0x0600
280 # define canFDMSG_EDL 0x010000
281 # define canFDMSG_FDF 0x010000
282 # define canFDMSG_BRS 0x020000
283 # define canFDMSG_ESI 0x040000
284 
285 #endif
286 
287 #ifndef LIN_TX
288 
297 # define LIN_TX 1
298 # define LIN_RX 2
299 # define LIN_WAKEUP_FRAME 4
300 # define LIN_NODATA 8
301 # define LIN_CSUM_ERROR 16
302 # define LIN_PARITY_ERROR 32
303 # define LIN_SYNCH_ERROR 64
304 # define LIN_BIT_ERROR 128
305 
306 #endif
307 
316 #define TRIGVAR_TYPE_MSG_ID 0
317 #define TRIGVAR_TYPE_MSG_DLC 1
318 #define TRIGVAR_TYPE_MSG_FLAG 2
319 #define TRIGVAR_TYPE_SIGVAL 3
320 #define TRIGVAR_TYPE_EXTERNAL 4
321 #define TRIGVAR_TYPE_TIMER 5
322 #define TRIGVAR_TYPE_DISK_FULL 6
323 #define TRIGVAR_TYPE_STARTUP 9
324 
329 typedef struct {
335  uint8 data[64];
336 } kvmLogMsgEx;
337 
341 typedef struct {
345 
346 
350 typedef struct {
357 
361 typedef struct
362 {
363  uint32 lioMajor; // Lio major version
364  uint32 lioMinor; // Lio minor version
365  uint32 fwMajor; // Firmware major version
366  uint32 fwMinor; // Firmware major version
367  uint32 fwBuild; // Firmware build version
368  uint32 serialNumber; // Serial number
369  uint32 eanHi; // EAN high bytes
370  uint32 eanLo; // EAN low bytes
372 
373 
381 #define kvmLOG_TYPE_INVALID 0
382 #define kvmLOG_TYPE_CLOCK 1
383 #define kvmLOG_TYPE_MSG 2
384 #define kvmLOG_TYPE_TRIGGER 3
385 #define kvmLOG_TYPE_VERSION 4
386 #define kvmLOG_TYPE_LINMSG 5
387 
392 typedef struct {
394  union {
399  uint8 raw[128];
400  } eventUnion;
401 } kvmLogEventEx;
402 
403 #pragma pack(pop)
404 
414 void WINAPI kvmInitialize(void);
415 
431 kvmStatus WINAPI kvmGetVersion(int *major, int *minor, int *build);
432 
445 kvmStatus WINAPI kvmGetErrorText(kvmStatus error, char *buf, size_t len);
446 
464 
485  kvmStatus *status,
486  int32 deviceType);
487 
507 
529 kvmStatus WINAPI kvmDeviceMountKmfEx(kvmHandle h, int *ldfMajor, int *ldfMinor);
530 
555 kvmHandle WINAPI kvmKmfOpen(const char *filename,
556  kvmStatus *status,
557  int32 deviceType);
558 
586 kvmHandle WINAPI kvmKmfOpenEx(const char *filename,
587  kvmStatus *status,
588  int32 deviceType,
589  int *ldfMajor,
590  int *ldfMinor);
591 
606 
631  int fileSystem,
632  uint32 reserveSpace,
633  uint32 dbaseSpace);
634 
650 
666 kvmStatus WINAPI kvmLogFileGetType(kvmHandle h, uint32 fileIndx, int32 *logFileType);
667 
692  uint32 *eventCount);
693 
713  int64 *eventCount);
714 
727 
744  uint32 *startTime);
745 
762  uint32 *endTime);
763 
780  uint32 *serialNumber);
781 
799 
800 
815 
833 
851  uint32 *totalSectorCount,
852  uint32 *usedSectorCount);
853 
870 
885 kvmStatus WINAPI kvmDeviceGetSerialNumber(kvmHandle h, unsigned int *serial);
886 
906  int32 itemCode,
907  unsigned int *major,
908  unsigned int *minor,
909  unsigned int *build,
910  unsigned int *flags);
925 
926 
944 
962 
980  size_t buflen, size_t *actual_len);
981 
997 kvmStatus WINAPI kvmKmfWriteConfig(kvmHandle h, void *buf, size_t buflen);
998 
999 
1019 kvmStatus WINAPI kvmKmfGetDbaseFile(kvmHandle h, char *path, char *filenamebuf, size_t buflen);
1020 
1038 kvmStatus WINAPI kvmKmfPutDbaseFile(kvmHandle h, char *filename);
1039 
1054 
1073 kmeFileHandle WINAPI kvmKmeOpenFile (const char *filename,
1074  kvmStatus *status,
1075  int32 fileType);
1076 
1094 kvmStatus WINAPI kvmKmeScanFileType (const char *filename,
1095  int32 *fileType);
1096 
1118 kmeFileHandle WINAPI kvmKmeCreateFile (const char *filename,
1119  kvmStatus *status,
1120  int32 fileType);
1121 
1141 
1160 
1184 
1203 
1222 
1256 #ifdef __cplusplus
1257 }
1258 #endif
1259 
1260 #endif //KVMLIB_H
int32 postTrigger
Posttrigger time in milliseconds.
Definition: kvmlib.h:353
kvmStatus kvmClose(kvmHandle h)
Unsupported version.
Definition: kvmlib.h:213
Error writing log file.
Definition: kvmlib.h:200
Disk full (data).
Definition: kvmlib.h:210
uint32 eanLo
Definition: kvmlib.h:370
uint32 calendarTime
RTC date, seconds since 1970-01-01T00:00:00+00:00 (UTC)
Definition: kvmlib.h:342
kvmStatus kvmLogFileGetCount(kvmHandle h, uint32 *fileCount)
kmeFileHandle kvmKmeOpenFile(const char *filename, kvmStatus *status, int32 fileType)
kvmStatus kvmKmeCloseFile(kmeFileHandle h)
kvmStatus kvmDeviceDiskStatus(kvmHandle h, int *present)
uint32 channel
The device channel on which the message arrived, 0,1,...
Definition: kvmlib.h:332
#define WINAPI
Definition: kvmlib.h:101
Queue is full.
Definition: kvmlib.h:204
File not found.
Definition: kvmlib.h:217
HANDLE kvmHandle
A handle to a Memorator or equivalent KMF file.
Definition: kvmlib.h:179
uint32 id
The message identifier.
Definition: kvmlib.h:330
Configuration error.
Definition: kvmlib.h:225
kvmStatus kvmLogFileMount(kvmHandle h, uint32 fileIndx, uint32 *eventCount)
uint16_t uint16
Definition: kvmlib.h:110
A trigger message.
Definition: kvmlib.h:350
No log message found.
Definition: kvmlib.h:199
kvmStatus kvmDeviceGetRTC(kvmHandle h, uint32 *t)
kvmStatus kvmKmeWriteEvent(kmeFileHandle h, kvmLogEventEx *e)
HANDLE kmeFileHandle
A handle to a KME file.
Definition: kvmlib.h:147
kvmStatus kvmKmfGetUsage(kvmHandle h, uint32 *totalSectorCount, uint32 *usedSectorCount)
uint32 serialNumber
Definition: kvmlib.h:368
User abort.
Definition: kvmlib.h:223
kmeFileHandle kvmKmeCreateFile(const char *filename, kvmStatus *status, int32 fileType)
File system corrupt.
Definition: kvmlib.h:212
void * HANDLE
Definition: kvmlib.h:103
A version message.
Definition: kvmlib.h:361
uint32 trigMask
Bitmask with all active triggers.
Definition: kvmlib.h:354
Error while reading log file.
Definition: kvmlib.h:203
OK!
Definition: kvmlib.h:194
Timeout.
Definition: kvmlib.h:220
kvmStatus kvmDeviceFormatDisk(kvmHandle h, int fileSystem, uint32 reserveSpace, uint32 dbaseSpace)
kvmStatus kvmKmfEraseDbaseFile(kvmHandle h)
Disk is write protected.
Definition: kvmlib.h:226
kvmStatus kvmKmeCountEventsEx(kmeFileHandle h, int64 *eventCount)
Wrong disk type.
Definition: kvmlib.h:219
kvmStatus kvmKmfWriteConfig(kvmHandle h, void *buf, size_t buflen)
uint32 fwBuild
Definition: kvmlib.h:367
kvmStatus kvmDeviceFlashLeds(kvmHandle h)
End of file found.
Definition: kvmlib.h:201
kvmStatus kvmLogFileDismount(kvmHandle h)
kvmStatus kvmLogFileDeleteAll(kvmHandle h)
int64 timeStamp
The timestamp in units of 1 nanosecond.
Definition: kvmlib.h:355
int8_t int8
Definition: kvmlib.h:107
kvmStatus kvmKmfReadConfig(kvmHandle h, void *buf, size_t buflen, size_t *actual_len)
File I/O error.
Definition: kvmlib.h:207
int32 type
The type of trigger TRIGVAR_TYPE_xxx.
Definition: kvmlib.h:351
Disk not formatted.
Definition: kvmlib.h:218
uint32 flags
Message flags canMSG_xxx or LIN_xxx.
Definition: kvmlib.h:334
uint32 eanHi
Definition: kvmlib.h:369
kvmStatus kvmKmeScanFileType(const char *filename, int32 *fileType)
uint32 fwMajor
Definition: kvmlib.h:365
A RTC clock message.
Definition: kvmlib.h:341
Illegal request.
Definition: kvmlib.h:216
uint32 type
kvmLOG_TYPE_xxx, Event types in log
Definition: kvmlib.h:393
int64 timeStamp
The timestamp in units of 1 nanosecond.
Definition: kvmlib.h:343
A CAN/LIN message.
Definition: kvmlib.h:329
kvmStatus kvmLogFileGetType(kvmHandle h, uint32 fileIndx, int32 *logFileType)
int16_t int16
Definition: kvmlib.h:109
The union of events used by kvmKmeReadEvent().
Definition: kvmlib.h:392
kvmStatus kvmDeviceGetSoftwareInfo(kvmHandle h, int32 itemCode, unsigned int *major, unsigned int *minor, unsigned int *build, unsigned int *flags)
kvmStatus kvmDeviceMountKmfEx(kvmHandle h, int *ldfMajor, int *ldfMinor)
kvmStatus kvmGetErrorText(kvmStatus error, char *buf, size_t len)
kvmStatus kvmLogFileReadEvent(kvmHandle h, kvmLogEventEx *e)
uint32 lioMajor
Definition: kvmlib.h:363
kvmStatus kvmDeviceMountKmf(kvmHandle h)
CRC check failed.
Definition: kvmlib.h:205
kvmStatus kvmLogFileGetCreatorSerial(kvmHandle h, uint32 *serialNumber)
Firmware error.
Definition: kvmlib.h:224
kvmStatus kvmLogFileMountEx(kvmHandle h, uint32 fileIndx, int64 *eventCount)
int64_t int64
Definition: kvmlib.h:113
int64 timeStamp
The timestamp in units of 1 nanosecond.
Definition: kvmlib.h:331
Generic error.
Definition: kvmlib.h:195
kvmStatus kvmKmfValidate(kvmHandle h)
Fatal error.
Definition: kvmlib.h:215
kvmStatus kvmLogFileGetEndTime(kvmHandle h, uint32 *endTime)
Disk full (directory).
Definition: kvmlib.h:209
Not implemented.
Definition: kvmlib.h:214
kvmStatus kvmKmeReadEvent(kmeFileHandle h, kvmLogEventEx *e)
Device occupied.
Definition: kvmlib.h:222
General disk error.
Definition: kvmlib.h:208
kvmLogVersionEx ver
A version message.
Definition: kvmlib.h:398
uint32_t uint32
Definition: kvmlib.h:112
No disk found.
Definition: kvmlib.h:202
Device communication error.
Definition: kvmlib.h:221
kvmStatus
Definition: kvmlib.h:193
Sector unexpectadly erased.
Definition: kvmlib.h:206
uint32 dlc
The length of the message.
Definition: kvmlib.h:333
Error in supplied parameters.
Definition: kvmlib.h:196
Can&#39;t find/open log file.
Definition: kvmlib.h:197
uint32 lioMinor
Definition: kvmlib.h:364
kvmLogTriggerEx trig
A trigger message.
Definition: kvmlib.h:397
kvmStatus kvmLogFileGetStartTime(kvmHandle h, uint32 *startTime)
int64_t int64
Definition: kvlclib.h:122
uint8_t uint8
Definition: kvmlib.h:108
int32_t int32
Definition: kvmlib.h:111
kvmStatus kvmKmfGetDbaseFile(kvmHandle h, char *path, char *filenamebuf, size_t buflen)
Result is too big for an out-parameter.
Definition: kvmlib.h:227
kvmLogRtcClockEx rtc
An RTC message.
Definition: kvmlib.h:396
kvmStatus kvmDeviceSetRTC(kvmHandle h, uint32 t)
kvmStatus kvmDeviceDiskSize(kvmHandle h, uint32 *diskSize)
kvmHandle kvmKmfOpenEx(const char *filename, kvmStatus *status, int32 deviceType, int *ldfMajor, int *ldfMinor)
uint32 fwMinor
Definition: kvmlib.h:366
kvmHandle kvmKmfOpen(const char *filename, kvmStatus *status, int32 deviceType)
kvmStatus kvmKmeCountEvents(kmeFileHandle h, uint32 *eventCount)
kvmHandle kvmDeviceOpen(int32 cardNr, kvmStatus *status, int32 deviceType)
Start time not found.
Definition: kvmlib.h:198
void kvmInitialize(void)
Unexpected sequence.
Definition: kvmlib.h:211
kvmStatus kvmKmfPutDbaseFile(kvmHandle h, char *filename)
kvmLogMsgEx msg
A CAN/LIN message.
Definition: kvmlib.h:395
kvmStatus kvmGetVersion(int *major, int *minor, int *build)
int32 preTrigger
Pretrigger time in milliseconds.
Definition: kvmlib.h:352
kvmStatus kvmDeviceGetSerialNumber(kvmHandle h, unsigned int *serial)