WP_Query Object
(
    [query] => Array
        (
            [paged] => 27
            [pagename] => about-us/news
        )

    [query_vars] => Array
        (
            [paged] => 27
            [pagename] => about-us/news
            [error] => 
            [m] => 
            [p] => 0
            [post_parent] => 
            [subpost] => 
            [subpost_id] => 
            [attachment] => 
            [attachment_id] => 0
            [name] => 
            [page_id] => 0
            [second] => 
            [minute] => 
            [hour] => 
            [day] => 0
            [monthnum] => 0
            [year] => 0
            [w] => 0
            [category_name] => 
            [tag] => 
            [cat] => 
            [tag_id] => 
            [author] => 
            [author_name] => 
            [feed] => 
            [tb] => 
            [meta_key] => 
            [meta_value] => 
            [preview] => 
            [s] => 
            [sentence] => 
            [title] => 
            [fields] => 
            [menu_order] => 
            [embed] => 
            [category__in] => Array
                (
                )

            [category__not_in] => Array
                (
                    [0] => 1047
                )

            [category__and] => Array
                (
                )

            [post__in] => Array
                (
                )

            [post__not_in] => Array
                (
                )

            [post_name__in] => Array
                (
                )

            [tag__in] => Array
                (
                )

            [tag__not_in] => Array
                (
                )

            [tag__and] => Array
                (
                )

            [tag_slug__in] => Array
                (
                )

            [tag_slug__and] => Array
                (
                )

            [post_parent__in] => Array
                (
                )

            [post_parent__not_in] => Array
                (
                )

            [author__in] => Array
                (
                )

            [author__not_in] => Array
                (
                )

            [orderby] => date
            [post_type] => Array
                (
                    [0] => post
                    [1] => developer_blog
                )

            [post_status] => publish
            [order] => DESC
            [tax_query] => Array
                (
                    [0] => Array
                        (
                            [taxonomy] => blog-group
                            [field] => slug
                            [terms] => Array
                                (
                                    [0] => public
                                )

                            [operator] => IN
                        )

                    [1] => Array
                        (
                            [taxonomy] => blog-group
                            [field] => slug
                            [terms] => Array
                                (
                                    [0] => general-user
                                    [1] => technical-asociate
                                    [2] => qualified-sales-representative
                                    [3] => kvaser-internal
                                )

                            [operator] => NOT IN
                        )

                )

            [ignore_sticky_posts] => 
            [suppress_filters] => 
            [cache_results] => 1
            [update_post_term_cache] => 1
            [lazy_load_term_meta] => 1
            [update_post_meta_cache] => 1
            [posts_per_page] => 10
            [nopaging] => 
            [comments_per_page] => 50
            [no_found_rows] => 
            [taxonomy] => blog-group
            [term] => public
        )

    [tax_query] => WP_Tax_Query Object
        (
            [queries] => Array
                (
                    [0] => Array
                        (
                            [taxonomy] => blog-group
                            [terms] => Array
                                (
                                    [0] => public
                                )

                            [field] => slug
                            [operator] => IN
                            [include_children] => 1
                        )

                    [1] => Array
                        (
                            [taxonomy] => blog-group
                            [terms] => Array
                                (
                                    [0] => general-user
                                    [1] => technical-asociate
                                    [2] => qualified-sales-representative
                                    [3] => kvaser-internal
                                )

                            [field] => slug
                            [operator] => NOT IN
                            [include_children] => 1
                        )

                    [2] => Array
                        (
                            [taxonomy] => category
                            [terms] => Array
                                (
                                    [0] => 1047
                                )

                            [field] => term_id
                            [operator] => NOT IN
                            [include_children] => 
                        )

                )

            [relation] => AND
            [table_aliases:protected] => Array
                (
                    [0] => wp_term_relationships
                )

            [queried_terms] => Array
                (
                    [blog-group] => Array
                        (
                            [terms] => Array
                                (
                                    [0] => public
                                )

                            [field] => slug
                        )

                )

            [primary_table] => wp_posts
            [primary_id_column] => ID
        )

    [meta_query] => WP_Meta_Query Object
        (
            [queries] => Array
                (
                )

            [relation] => 
            [meta_table] => 
            [meta_id_column] => 
            [primary_table] => 
            [primary_id_column] => 
            [table_aliases:protected] => Array
                (
                )

            [clauses:protected] => Array
                (
                )

            [has_or_relation:protected] => 
        )

    [date_query] => 
    [queried_object] => WP_Post Object
        (
            [ID] => 1277
            [post_author] => 38
            [post_date] => 2014-11-21 12:03:40
            [post_date_gmt] => 2013-12-19 15:28:51
            [post_content] => 
            [post_title] => News
            [post_excerpt] => 
            [post_status] => publish
            [comment_status] => open
            [ping_status] => open
            [post_password] => 
            [post_name] => news
            [to_ping] => 
            [pinged] => 
            [post_modified] => 2021-08-12 09:14:30
            [post_modified_gmt] => 2021-08-12 09:14:30
            [post_content_filtered] => 
            [post_parent] => 23
            [guid] => https://www.kvaser.com/?page_id=1277
            [menu_order] => 5
            [post_type] => page
            [post_mime_type] => 
            [comment_count] => 0
            [filter] => raw
        )

    [queried_object_id] => 1277
    [request] => SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) WHERE 1=1  AND ( 
  wp_term_relationships.term_taxonomy_id IN (1026) 
  AND 
  wp_posts.ID NOT IN (
				SELECT object_id
				FROM wp_term_relationships
				WHERE term_taxonomy_id IN (1025,1027,1028,1029)
			) 
  AND 
  wp_posts.ID NOT IN (
				SELECT object_id
				FROM wp_term_relationships
				WHERE term_taxonomy_id IN (1058)
			)
) AND wp_posts.post_type IN ('post', 'developer_blog') AND ((wp_posts.post_status = 'publish')) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 260, 10
    [posts] => Array
        (
            [0] => WP_Post Object
                (
                    [ID] => 22202
                    [post_author] => 5
                    [post_date] => 2018-10-16 20:17:43
                    [post_date_gmt] => 2018-10-16 20:17:43
                    [post_content] => [vc_row][vc_column][vc_single_image image="22241"][vc_column_text]We like to keep up-to-date on applications of CAN in the fields of autonomous vehicles and agricultural machinery, but we’re really excited about one of our university partners who is working at the intersection of both fields, using the CAN bus to develop autonomous agricultural vehicles.[/vc_column_text][vc_column_text]Santosh K. Pitla, Ph.D., is Assistant Professor of Advanced Machinery Systems at the University of NebraskaLincoln, a school well known for its agriculture and land management programs. His research has focused on improving efficiencies within agricultural machinery, specifically in tractors.[/vc_column_text][vc_column_text]In a new case study, we review two of Dr. Pitla’s research projects and how he is using Kvaser devices to advance the possibilities of agricultural technology to meet demands for increased efficiency on large-scale industrial farming operations.[/vc_column_text][vc_column_text]For one project, Dr. Pitla and his team have developed and built a field-ready 40-horsepower robotic tractor, nicknamed the “Flex-Ro,” using a Kvaser Leaf Light HS v2 to establish communication between the high-level software and the distributed CAN controllers within the autonomous vehicle platform.[/vc_column_text][vc_column_text]Another of Dr. Pitla’s projects uses a Kvaser USBcan Pro 2xHS v2 to collect operational data from tractors in the field to determine the real-time load demands of the vehicles depending on different tasks, terrains, implements used, times of the year and operators. Analyzing the data collected from the tractor’s CAN bus will create a better understanding of actual tractor power consumption in varying conditions, and can be used to create more accurate estimates of average load conditions.[/vc_column_text][vc_column_text]Read the full case study here.[/vc_column_text][vc_column_text]To learn how Kvaser supports the work of students and university teams working on CAN-related projects, read about our university sponsorship program.[/vc_column_text][/vc_column][/vc_row]
                    [post_title] => CAN-Enabled Autonomous Agricultural Machinery at the University of Nebraska–Lincoln
                    [post_excerpt] => 
                    [post_status] => publish
                    [comment_status] => open
                    [ping_status] => open
                    [post_password] => 
                    [post_name] => can-enabled-autonomous-agricultural-machinery-at-the-university-of-nebraska-lincoln
                    [to_ping] => 
                    [pinged] => 
                    [post_modified] => 2018-10-11 20:47:15
                    [post_modified_gmt] => 2018-10-11 20:47:15
                    [post_content_filtered] => 
                    [post_parent] => 0
                    [guid] => https://www.kvaser.com/?p=22202
                    [menu_order] => 0
                    [post_type] => post
                    [post_mime_type] => 
                    [comment_count] => 0
                    [filter] => raw
                )

            [1] => WP_Post Object
                (
                    [ID] => 22271
                    [post_author] => 6080
                    [post_date] => 2018-10-16 10:46:20
                    [post_date_gmt] => 2018-10-16 10:46:20
                    [post_content] => 
                    [post_title] => Infineon Technologies launches two first SBCs to support ISO CAN FD at 5 Mbit/s
                    [post_excerpt] => 
                    [post_status] => publish
                    [comment_status] => open
                    [ping_status] => open
                    [post_password] => 
                    [post_name] => infineon-technologies-launches-two-first-sbcs-to-support-iso-can-fd-at-5-mbit-s
                    [to_ping] => 
                    [pinged] => 
                    [post_modified] => 2022-04-04 10:19:05
                    [post_modified_gmt] => 2022-04-04 10:19:05
                    [post_content_filtered] => 
                    [post_parent] => 0
                    [guid] => https://www.kvaser.com/?p=22271
                    [menu_order] => 0
                    [post_type] => post
                    [post_mime_type] => 
                    [comment_count] => 0
                    [filter] => raw
                )

            [2] => WP_Post Object
                (
                    [ID] => 22333
                    [post_author] => 22955
                    [post_date] => 2018-10-15 19:40:45
                    [post_date_gmt] => 2018-10-15 19:40:45
                    [post_content] =>  

Kvaser announces a series of new Mini PCI Express interfaces with extremely low latency designed for real-time environments.

Both single- and dual-channel interfaces communicate with the PC over the PCI Express system bus, allowing for excellent real-time performance and 1µs time-stamping.

Supports both CAN and CAN FD. Available for sale now.

Click through to the product pages to access datasheets, user guides, and more info.

Kvaser Mini PCI Express HS v2 (EAN: 73-30130-01038-3)

View Product >>

Kvaser Mini PCI Express 2xHS v2 (EAN: 73-30130-01029-1)

View Product >>


Note: Kvaser's already-existing Kvaser Mini PCI Express HS and Kvaser Mini PCI Express 2xHS products will remain available for sale. The primary difference is that these previous versions utilize the USB system bus for communication with the PC. [post_title] => Product Release: New Mini PCI Express Boards for Real-Time CAN & CAN FD Performance [post_excerpt] => [post_status] => publish [comment_status] => open [ping_status] => open [post_password] => [post_name] => product-release-new-mini-pci-express-boards-for-real-time-can-can-fd-performance [to_ping] => [pinged] => [post_modified] => 2022-07-11 10:48:17 [post_modified_gmt] => 2022-07-11 10:48:17 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?p=22333 [menu_order] => 0 [post_type] => post [post_mime_type] => [comment_count] => 0 [filter] => raw ) [3] => WP_Post Object ( [ID] => 22216 [post_author] => 5 [post_date] => 2018-10-09 20:35:33 [post_date_gmt] => 2018-10-09 20:35:33 [post_content] => [vc_row][vc_column][vc_single_image image="22219"][vc_column_text]Kvaser Technical Associate Miroslav Macháček from Mach Systems s.r.o. will be speaking at CAN in Automation’s CAN FD day in Prague on 11th October 2018. His presentation, entitled ‘A Practical Bandwidth Comparison of CAN/CAN FD and Ethernet’, is part of a comprehensive introduction into CAN FD that is free for attendees – click here for more details and to register for the event. For more information on Mach Systems s.r.o., please click here To learn more about this topic, watch Kent Lennartsson’s video “CAN vs. CAN FD vs. Ethernet?”. Kent is Kvaser’s Research Manager, responsible for CAN development and related communication protocols.[/vc_column_text][/vc_column][/vc_row] [post_title] => CAN FD technology day in Prague [post_excerpt] => [post_status] => publish [comment_status] => open [ping_status] => open [post_password] => [post_name] => can-fd-technology-day-in-prague [to_ping] => [pinged] => [post_modified] => 2018-10-09 20:35:33 [post_modified_gmt] => 2018-10-09 20:35:33 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?p=22216 [menu_order] => 0 [post_type] => post [post_mime_type] => [comment_count] => 0 [filter] => raw ) [4] => WP_Post Object ( [ID] => 22145 [post_author] => 5 [post_date] => 2018-10-09 20:30:31 [post_date_gmt] => 2018-10-09 20:30:31 [post_content] => [vc_row][vc_column][vc_single_image image="22198"][vc_column_text]CAN FD interfaces and data loggers come in two variants: products that implement Bosch's original protocol, which are referred to as ‘non-ISO CAN FD’, and those that comply with ISO standard 11898-2:2015, referred to as ‘CAN FD’. The difference between the protocols is that non-ISO CAN FD has no stuff-bit counter bits in the CAN-frame. To increase the robustness of the CRC, CAN FD adds a stuff-bit counter value after the data and before the CRC-segment. This reduces the probability of errors not detected by the CRC-calculation. Some silicon was already available to buy before the final ISO 11898-1 standard was settled, which is now classed as ‘non-ISO CAN FD’. The same issue was experienced by various CAN tool suppliers. [/vc_column_text][vc_column_text]Whomever your CAN tool supplier, one question to ask is whether they provide support for both CAN FD and non-ISO CAN FD, if that is important to you. Check whether the supplier’s API supports both variants of CAN FD and be aware that you may need to adjust the hardware or the software to handle the protocol you use in your CAN-system.[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column width="1/3"][vc_column_text]Kvaser supports CAN FD and non-ISO CAN FD (as tested against the Bosch reference model) in our hardware and software products. In CANlib, Kvaser’s free-of-charge SDK, both CAN FD and Non-ISO CAN FD can be configured in just a few simple steps. No separate API or driver is required: simply download Kvaser CANlib SDK and you’ll find this feature as part of the standard download. CANlib works across all Kvaser hardware platforms and includes virtual hardware. Free and with a file size of just 60MB, the SDK compares favourably with competitor drivers and APIs – yet another reason to choose Kvaser! [/vc_column_text][/vc_column][vc_column width="2/3" css=".vc_custom_1538512261085{border-top-width: 1px !important;border-right-width: 1px !important;border-bottom-width: 1px !important;border-left-width: 1px !important;border-left-color: #000000 !important;border-left-style: solid !important;border-right-color: #000000 !important;border-right-style: solid !important;border-top-color: #000000 !important;border-top-style: solid !important;border-bottom-color: #000000 !important;border-bottom-style: solid !important;border-radius: 2px !important;}"][vc_header_raket header_type="h4" header="Switching between CAN FD and Non-ISO CAN FD"][vc_column_text]Switching between CAN FD and Non-ISO CAN FD is simple within Kvaser’s CANlib API. During the API function call canOpenChannel(), in which a CAN channel is opened and a handle returned that is used in subsequent calls to CANlib, you will need to identify the flags as follows: #define  canOPEN_CAN_FD   0x0400  #define  canOPEN_CAN_FD_NONISO   0x0800 All you need to do next is to set the correct bitrate, which is identical for CAN FD and non-ISO CAN FD. You can use our Bit Timing Calculator here.[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]A word of note regarding non-ISO CAN FD: Kvaser’s non-ISO CAN FD implementation has been tested against the Bosch reference model. This should be true for all other non-ISO CAN FD controllers. However, it is possible that two different non-ISO CAN FD controllers don’t communicate with each other in all conditions, as non-ISO CAN FD controllers have not been validated against a standard such as ISO 16845-1:2016. [/vc_column_text][vc_button_raket title="Find out more about CAN FD" text="" page_id="https://www.kvaser.com/about-can/can-fd/"][/vc_column][/vc_row] [post_title] => Supporting CAN FD and the non-ISO version [post_excerpt] => [post_status] => publish [comment_status] => open [ping_status] => open [post_password] => [post_name] => supporting-can-fd-and-the-non-iso-version [to_ping] => [pinged] => [post_modified] => 2018-10-08 17:34:31 [post_modified_gmt] => 2018-10-08 17:34:31 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?p=22145 [menu_order] => 0 [post_type] => post [post_mime_type] => [comment_count] => 0 [filter] => raw ) [5] => WP_Post Object ( [ID] => 22057 [post_author] => 811 [post_date] => 2018-10-02 10:00:23 [post_date_gmt] => 2018-10-02 10:00:23 [post_content] => [vc_row][vc_column][vc_single_image image="21662" img_size=""][vc_column_text]Kvaser’s latest software release continues to expand Kvaser’s Python and Linux resources. Notable changes and additions include: Python canlib package (pycanlib): Continuous improvements and additions, such as event count estimation, script status and an API to access information about reader formats. Kvaser Driver for Windows SDK (kvlclib): Adds an API to access information about reader formats and compatibility with the MDF .log input format. Kvaser Linux driver and SDK (canlib): Clock behaviour differs in Windows and Linux. Kvaser has changed the default clock behaviour in Linux to automatically reset at ‘buson’, in the same way as Windows. The clock reset feature is useful when conducting experiments in which timing will be compared. However, if you would prefer Linux’ old clock behaviour, you can choose to override it. For the full release notes, click here. All files are available for download now on the Kvaser Downloads page.[/vc_column_text][/vc_column][/vc_row] [post_title] => Kvaser Software Release September 2018: Continued Python and Linux updates [post_excerpt] => [post_status] => publish [comment_status] => open [ping_status] => open [post_password] => [post_name] => kvaser-software-release-september-2018-continued-python-and-linux-updates [to_ping] => [pinged] => [post_modified] => 2022-04-04 10:19:05 [post_modified_gmt] => 2022-04-04 10:19:05 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?p=22057 [menu_order] => 0 [post_type] => post [post_mime_type] => [comment_count] => 0 [filter] => raw ) [6] => WP_Post Object ( [ID] => 22014 [post_author] => 14 [post_date] => 2018-09-20 21:28:56 [post_date_gmt] => 2018-09-20 21:28:56 [post_content] => [vc_row][vc_column][vc_column_text] This is an update of an older blog post and is now taking advantage of the Python canlib package v1.6 and later. [/vc_column_text][vc_column_text] Today we take a look at how to setup and send a CAN message using Kvasers Python package canlib. For this example we use the Kvaser USBcan Pro 2xHS v2, but any Kvaser interface can be used. First step is to download and install Kvaser Linux Driver and SDK, linuxcan, note that the URL is within quotation marks (the current version of CANlib is v5.24): [/vc_column_text][vc_code_raket code="JTI0JTIwY2QlMjB+JTBBJTI0JTIwJTIzJTIwV2UlMjBuZWVkJTIwdG9vbHMlMjBmb3IlMjBidWlsZGluZyUyMCUyOGdjYyUyMGNvbXBpbGVyJTJDJTIwbWFrZSUyQyUyMGV0YyUyOSUwQSUyNCUyMHN1ZG8lMjBhcHQlMjBpbnN0YWxsJTIwYnVpbGQtZXNzZW50aWFsJTBBJTI0JTIwJTIzJTIwRG93bmxvYWQlMjBsYXRlc3QlMjB2ZXJzaW9uJTIwb2YlMjBsaW51eGNhbiUyQyUyMEt2YXNlciUyMExpbnV4JTIwRHJpdmVyJTIwYW5kJTIwU0RLJTBBJTI0JTIwd2dldCUyMC0tY29udGVudC1kaXNwb3NpdGlvbiUyMCUyMmh0dHBzJTNBJTJGJTJGd3d3Lmt2YXNlci5jb20lMkZkb3dubG9hZHMta3Zhc2VyJTJGJTNGdXRtX3NvdXJjZSUzRHNvZnR3YXJlJTI2dXRtX2VhbiUzRDczMzAxMzA5ODA3NTQlMjZ1dG1fc3RhdHVzJTNEbGF0ZXN0JTIyJTBBJTI0JTIwdGFyJTIweGYlMjBsaW51eGNhbi50YXIuZ3olMEElMjQlMjBjZCUyMGxpbnV4Y2FuJTBBJTI0JTIwbWFrZSUwQSUyNCUyMHN1ZG8lMjBtYWtlJTIwaW5zdGFsbA=="][vc_column_text] Now we insert the Kvaser interface into a USB port and run the listChannels example program to verify that the driver loaded correctly and our device is recognized: [/vc_column_text][vc_code_raket code="JTI0JTIwY2QlMjBjYW5saWIlMkZleGFtcGxlcyUwQSUyNCUyMC4lMkZsaXN0Q2hhbm5lbHMlMEFGb3VuZCUyMDIlMjBjaGFubmVsJTI4cyUyOS4lMEFjaCUyMCUyMDAlM0ElMjBLdmFzZXIlMjBVU0JjYW4lMjBQcm8lMjAyeEhTJTIwdjIlMjAlMjA3My0zMDEzMC0wMDc1Mi05JTJDJTIwcyUyRm4lMjAxMDE0JTJDJTIwdjMuMTAuMC40OTYlMjAlMjAlMjhtaHlkcmElMjB2OC4yNC41MzMlMjklMEFjaCUyMCUyMDElM0ElMjBLdmFzZXIlMjBVU0JjYW4lMjBQcm8lMjAyeEhTJTIwdjIlMjAlMjA3My0zMDEzMC0wMDc1Mi05JTJDJTIwcyUyRm4lMjAxMDE0JTJDJTIwdjMuMTAuMC40OTYlMjAlMjAlMjhtaHlkcmElMjB2OC4yNC41MzMlMjk="][vc_column_text]The Kvaser Linux Driver and SDK only contains drivers, canlib and LINlib, the rest of the libraries (kvaMemoLibXML, kvmlib, kvlclib and kvaDbLib) 1 are placed in the Kvaser Linux SDK Library, kvlibsdk. We build and install these in a similar manner to Kvaser Linux Driver and SDK, but we first need to install some dependency packages.[/vc_column_text][vc_code_raket code="JTI0JTIwY2QlMjB+JTBBJTI0JTIwJTIzJTIwVGhlJTIwcGFja2FnZSUyMGxpYnhtbDItZGV2JTIwaXMlMjBuZWVkZWQlMjBpbiUyMG9yZGVyJTIwdG8lMjBidWlsZCUyMGt2YW1lbW9saWJ4bWwuJTBBJTI0JTIwc3VkbyUyMGFwdCUyMGluc3RhbGwlMjBsaWJ4bWwyLWRldiUwQSUyNCUyMCUyMyUyMFRoZSUyMHBhY2thZ2VzJTIwbGlic3NsLWRldiUyMGFuZCUyMHpsaWIxZy1kZXYlMjBhcmUlMjBuZWVkZWQlMjB0byUyMGJ1aWxkJTIwa3ZsY2xpYi4lMEElMjQlMjBzdWRvJTIwYXB0JTIwaW5zdGFsbCUyMGxpYnNzbC1kZXYlMjB6bGliMWctZGV2JTBBJTI0JTIwJTIzJTIwRG93bmxvYWQlMjBsYXRlc3QlMjB2ZXJzaW9uJTIwb2YlMjBrdmxpYnNkayUyQyUyMEt2YXNlciUyMExpbnV4JTIwU0RLJTIwTGlicmFyeSUwQSUyNCUyMHdnZXQlMjAtLWNvbnRlbnQtZGlzcG9zaXRpb24lMjAlMjJodHRwcyUzQSUyRiUyRnd3dy5rdmFzZXIuY29tJTJGZG93bmxvYWRzLWt2YXNlciUyRiUzRnV0bV9zb3VyY2UlM0Rzb2Z0d2FyZSUyNnV0bV9lYW4lM0Q3MzMwMTMwOTgxOTY2JTI2dXRtX3N0YXR1cyUzRGxhdGVzdCUyMiUwQSUyNCUyMHRhciUyMHhmJTIwa3ZsaWJzZGsudGFyLmd6JTBBJTI0JTIwY2QlMjBrdmxpYnNkayUwQSUyNCUyMG1ha2UlMEElMjQlMjBzdWRvJTIwbWFrZSUyMGluc3RhbGw="][vc_column_text] The next step is to download and install the Python canlib package (current version is v1.6): [/vc_column_text][vc_code_raket code="JTI0JTIwY2QlMjB+JTBBJTI0JTIwd2dldCUyMC0tY29udGVudC1kaXNwb3NpdGlvbiUyMCUyMmh0dHBzJTNBJTJGJTJGd3d3Lmt2YXNlci5jb20lMkZkb3dubG9hZHMta3Zhc2VyJTJGJTNGdXRtX3NvdXJjZSUzRHNvZnR3YXJlJTI2dXRtX2VhbiUzRDczMzAxMzA5ODE5MTElMjZ1dG1fc3RhdHVzJTNEbGF0ZXN0JTIyJTBBJTI0JTIwdW56aXAlMjAtcSUyMHB5Y2FubGliLnppcCUwQSUyNCUyMGNkJTIwcHljYW5saWIlMEElMjQlMjBwaXAlMjBpbnN0YWxsJTIwY2FubGliLTEuNi42MTUlMkEud2hs"][vc_column_text] Depending on your Linux distribution, if you are using Python v3, you would perhaps be using pip3 instead of pip in order to install the Python package in the correct place. Now we can write a small Python program, sendReceiveSingleCanMsg.py, that sends a CAN message on channel 1 and receives the same CAN message on channel 0: [/vc_column_text][vc_code_raket language="python" code="JTIzJTIwMDFfc2VuZFJlY2VpdmVTaW5nbGVDYW5Nc2cucHklMEFmcm9tJTIwY2FubGliJTIwaW1wb3J0JTIwY2FubGliJTJDJTIwRnJhbWUlMEElMEElMEFkZWYlMjBzZXRVcENoYW5uZWwlMjhjaGFubmVsJTNEMCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9wZW5GbGFncyUzRGNhbmxpYi5PcGVuLkFDQ0VQVF9WSVJUVUFMJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYml0cmF0ZSUzRGNhbmxpYi5jYW5CSVRSQVRFXzUwMEslMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvdXRwdXRDb250cm9sJTNEY2FubGliLkRyaXZlci5OT1JNQUwlMjklM0ElMEElMjAlMjAlMjAlMjBjaCUyMCUzRCUyMGNhbmxpYi5vcGVuQ2hhbm5lbCUyOGNoYW5uZWwlMkMlMjBvcGVuRmxhZ3MlMjklMEElMjAlMjAlMjAlMjBwcmludCUyOCUyMlVzaW5nJTIwY2hhbm5lbCUzQSUyMCUyNXMlMkMlMjBFQU4lM0ElMjAlMjVzJTIyJTIwJTI1JTIwJTI4JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY2FubGliLkNoYW5uZWxEYXRhJTI4Y2hhbm5lbCUyOS5kZXZpY2VfbmFtZSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNhbmxpYi5DaGFubmVsRGF0YSUyOGNoYW5uZWwlMjkuY2FyZF91cGNfbm8lMjklMjklMEElMjAlMjAlMjAlMjBjaC5zZXRCdXNPdXRwdXRDb250cm9sJTI4b3V0cHV0Q29udHJvbCUyOSUwQSUyMCUyMCUyMCUyMGNoLnNldEJ1c1BhcmFtcyUyOGJpdHJhdGUlMjklMEElMjAlMjAlMjAlMjBjaC5idXNPbiUyOCUyOSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMGNoJTBBJTBBJTBBZGVmJTIwdGVhckRvd25DaGFubmVsJTI4Y2glMjklM0ElMEElMjAlMjAlMjAlMjBjaC5idXNPZmYlMjglMjklMEElMjAlMjAlMjAlMjBjaC5jbG9zZSUyOCUyOSUwQSUwQSUwQXByaW50JTI4JTIyY2FubGliJTIwZGxsJTIwdmVyc2lvbiUzQSUyMiUyQyUyMGNhbmxpYi5kbGx2ZXJzaW9uJTI4JTI5JTI5JTBBJTBBY2gwJTIwJTNEJTIwc2V0VXBDaGFubmVsJTI4Y2hhbm5lbCUzRDAlMjklMEFjaDElMjAlM0QlMjBzZXRVcENoYW5uZWwlMjhjaGFubmVsJTNEMSUyOSUwQSUwQWZyYW1lJTIwJTNEJTIwRnJhbWUlMjhpZF8lM0QxMDAlMkMlMjBkYXRhJTNEJTVCMSUyQyUyMDIlMkMlMjAzJTJDJTIwNCU1RCUyQyUyMGZsYWdzJTNEY2FubGliLk1lc3NhZ2VGbGFnLkVYVCUyOSUwQWNoMS53cml0ZSUyOGZyYW1lJTI5JTBBJTBBd2hpbGUlMjBUcnVlJTNBJTBBJTIwJTIwJTIwJTIwdHJ5JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZnJhbWUlMjAlM0QlMjBjaDAucmVhZCUyOCUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4ZnJhbWUlMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBicmVhayUwQSUyMCUyMCUyMCUyMGV4Y2VwdCUyMCUyOGNhbmxpYi5jYW5Ob01zZyUyOSUyMGFzJTIwZXglM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwYXNzJTBBJTIwJTIwJTIwJTIwZXhjZXB0JTIwJTI4Y2FubGliLmNhbkVycm9yJTI5JTIwYXMlMjBleCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4ZXglMjklMEElMEF0ZWFyRG93bkNoYW5uZWwlMjhjaDAlMjklMEF0ZWFyRG93bkNoYW5uZWwlMjhjaDElMjk="][vc_column_text] Running the above Python program results in the following: [/vc_column_text][vc_code_raket code="JTI0JTIwcHl0aG9uJTIwc2VuZFJlY2VpdmVTaW5nbGVDYW5Nc2cucHklMEFjYW5saWIlMjBkbGwlMjB2ZXJzaW9uJTNBJTIwOC4yNCUwQVVzaW5nJTIwY2hhbm5lbCUzQSUyMEt2YXNlciUyMFVTQmNhbiUyMFBybyUyMDJ4SFMlMjB2MiUyMCUyOGNoYW5uZWwlMjAwJTI5JTJDJTIwRUFOJTNBJTIwNzMtMzAxMzAtMDA3NTItOSUwQVVzaW5nJTIwY2hhbm5lbCUzQSUyMEt2YXNlciUyMFVTQmNhbiUyMFBybyUyMDJ4SFMlMjB2MiUyMCUyOGNoYW5uZWwlMjAxJTI5JTJDJTIwRUFOJTNBJTIwNzMtMzAxMzAtMDA3NTItOSUwQUZyYW1lJTI4aWQlM0QxMDAlMkMlMjBkYXRhJTNEYnl0ZWFycmF5JTI4YiUyNyU1Q3gwMSU1Q3gwMiU1Q3gwMyU1Q3gwNCUyNyUyOSUyQyUyMGRsYyUzRDQlMkMlMEFmbGFncyUzRCUyNmx0JTNCTWVzc2FnZUZsYWcuRVhUJTNBJTIwNCUyNmd0JTNCJTJDJTIwdGltZXN0YW1wJTNENzkxODg5NSUyOQ=="][vc_column_text] Depending on your Linux distribution, if you are using Python v3, you would perhaps be using the python3 command, instead of python. And thus we have successfully sent and received a CAN message using the Python canlib package. The documentation is also available in the downloaded .zip file at pycanlib/docs/index.html. Bug reports, contributions, suggestions for improvements, and similar things are much appreciated and can be sent by e-mail to [email protected]. [/vc_column_text][vc_raw_html]JTNDZGl2JTIwaWQlM0QlMjJmb290bm90ZXMlMjIlM0UlMEElM0NoMiUyMGNsYXNzJTNEJTIyZm9vdG5vdGVzJTIyJTNFRm9vdG5vdGVzJTNBJTIwJTNDJTJGaDIlM0UlMEElM0NkaXYlMjBpZCUzRCUyMnRleHQtZm9vdG5vdGVzJTIyJTNFJTBBJTBBJTNDZGl2JTIwY2xhc3MlM0QlMjJmb290ZGVmJTIyJTNFJTNDc3VwJTNFJTNDYSUyMGlkJTNEJTIyZm4uMSUyMiUyMGNsYXNzJTNEJTIyZm9vdG51bSUyMiUyMGhyZWYlM0QlMjIlMjNmbnIuMSUyMiUyMG5hbWUlM0QlMjJmbi4xJTIyJTNFMSUzQyUyRmElM0UlM0MlMkZzdXAlM0UlMEElM0NwJTNFU2VlJTIwdGhlJTIwYmxvZyUyMGFydGljbGUlMjAlM0NhJTIwaHJlZiUzRCUyMmh0dHBzJTNBJTJGJTJGd3d3Lmt2YXNlci5jb20lMkZkZXZlbG9wZXItYmxvZyUyRmdldC1oYXJkd2FyZS1rdmFzZXItc2RrLWxpYnJhcmllcyUyRiUyMiUzRUdldCUyMG1vcmUlMjBmcm9tJTIweW91ciUyMGhhcmR3YXJlJTIwd2l0aCUyMEt2YXNlciUyMFNESyUyMGxpYnJhcmllcyUzQyUyRmElM0UlMjBmb3IlMjBhbiUyMG92ZXJ2aWV3JTIwb2YlMjB0aGUlMjBkaWZmZXJlbnQlMjBTREslMjBsaWJyYXJpZXMuJTNDJTJGcCUzRSUzQyUyRmRpdiUzRQ==[/vc_raw_html][/vc_column][/vc_row] [post_title] => Running Python wrapper on Linux [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => running-python-wrapper-linux [to_ping] => [pinged] => [post_modified] => 2018-11-28 14:35:04 [post_modified_gmt] => 2018-11-28 14:35:04 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?post_type=developer_blog&p=22014 [menu_order] => 0 [post_type] => developer_blog [post_mime_type] => [comment_count] => 0 [filter] => raw ) [7] => WP_Post Object ( [ID] => 11603 [post_author] => 14 [post_date] => 2018-09-19 11:00:27 [post_date_gmt] => 2018-09-19 11:00:27 [post_content] => [vc_row][vc_column][vc_column_text]This is the final post in a 4-part series about configuring and reading logged data using a Kvaser Memorator 2nd Generation device through kvmlib:[/vc_column_text][/vc_column][/vc_row][vc_row el_class="indented"][vc_column][vc_column_text]

1 Getting started with kvmlib

2 Adding script and triggers to a configuration 3 Digging deeper into kvmlib 4 Configure an SD card using kvmlib[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]Earlier we interacted with kvmlib to configure a device and to retrieve both the configuration and logged data for further analysis. Now we will look at what steps that need to be performed differently if we only have access to the SD card that will be inserted into the device. The scenario is where the SD card is shipped between the physical logging location and us. For the purpose of this exercise, we will take a 16 GB SD card that has been formatted in Windows, initialize and configure this SD card so that we later can insert the SD card into our Kvaser Memorator Pro 2xHS (EAN 00819-9), which is running firmware version 3.11. After running our logging session, we will remove the SD card from the device, read and reset the log files.[/vc_column_text][vc_header_raket header_type="h3" header="4.1 Initialize SD card"][vc_column_text]If we do not have our device at hand, we can still initialize the SD card using our Windows computer and the mhydraformat.exe program. This will however be more time consuming than using the device, as initializing a 16 GB card takes approximately 3 minutes. The mhydraformat.exe program can be found in the installation directory of Kvaser Memorator Config Tool.1 You can run the formatting program with the --help argument to see the usage help text.[/vc_column_text][vc_code_raket code="JTVCQyUzQSU1QyU1RG1oeWRyYWZvcm1hdC5leGUlMjAtLWhlbHAlMEFEaXNrJTIwZm9ybWF0dGluZyUyMHByb2dyYW0lMjBmb3IlMjBLdmFzZXIlMjBNZW1vcmF0b3IlMjAlMjgybmQlMjBnZW5lcmF0aW9uJTI5JTIwZGV2aWNlcy4lMEElMEEtaCUyMCUyMCUyMCUyMCUyMCUyMCUyMC0taGVscCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU3QyUyMFByaW50JTIwdGhpcyUyMGluZm9ybWF0aW9uLiUwQS1kJTNERFJJVkUlMjAtLWRyaXZlJTNERFJJVkUlMjAlMjAlMjAlMjAlMjAlN0MlMjBUaGUlMjBkcml2ZSUyMHRvJTIwZm9ybWF0JTJDJTIwZS5nLiUyMEYlM0ElMEEtciUzRFglMjAlMjAlMjAlMjAlMjAtLXJlc2VydmUlM0RYJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdDJTIwVGhlJTIwbnVtYmVyJTIwb2YlMjBNQiUyMHRvJTIwcmVzZXJ2ZSUyMGZvciUyMHVzZXIlMjBmaWxlcy4lMEEtYyUzRFglMjAlMjAlMjAlMjAlMjAtLWNvbmZpZyUzRFglMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlN0MlMjBUaGUlMjBudW1iZXIlMjBvZiUyME1CJTIwdG8lMjByZXNlcnZlJTIwZm9yJTIwY29uZmlndXJhdGlvbnMuJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLS1mYXQxNiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU3QyUyMEZvcm1hdCUyMHRoZSUyMGRpc2slMjB3aXRoJTIwRkFUMTYuJTIwRGVmYXVsdCUyMGlzJTIwRkFUMzIuJTBBLWklMjAlMjAlMjAlMjAlMjAlMjAlMjAtLWludGVyYWN0aXZlJTIwJTIwJTIwJTIwJTIwJTdDJTIwUmVxdWlyZSUyMHRoZSUyMHVzZXIlMjB0byUyMGNvbmZpcm0lMjBiZWZvcmUlMjBmb3JtYXQuJTBBLXElMjAlMjAlMjAlMjAlMjAlMjAlMjAtLXF1aWV0JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdDJTIwU3RvcCUyMGFsbCUyMG91dHB1dHMuJTIwT3ZlcnJpZGVzJTIwLWkuJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLS1iaW41JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdDJTIwVXNlJTIwdGhlJTIwb2xkZXIlMkMlMjBzbWFsbGVyJTIwdmVyc2lvbiUyMDUlMjBvZiUyMFBBUkFNLkxJRi4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAtLWxpbzMlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlN0MlMjBVc2UlMjB0aGUlMjBvbGRlciUyMExJTyUyMGRhdGElMjBmb3JtYXQlMjAzJTIwZm9yJTIwS01GJTIwZmlsZXMuJTBBJTBBRXhhbXBsZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG1oeWRyYWZvcm1hdCUyMC1kJTNERiUzQSUyMC1yJTNEMTAwJTIwLWMlM0QxMCUyMC0taW50ZXJhY3RpdmU="][vc_column_text]Connect your SD card to the computer and note the drive letter. For me, the SD card was assigned to J:. We now run mhydraformat.exe to initialize the card. Note that the command line switch to specify the space to be allocated to DATABASE.BIN is here named --config. We also take a look at the contents of the card after the initialization using the Windows dir command.[/vc_column_text][vc_code_raket code="QyUzQSUzRSUyMG1oeWRyYWZvcm1hdC5leGUlMjAtZCUzREolM0ElMjAtciUzRDEwMDAwJTIwLWMlM0QxMCUwQUZvcm1hdHRpbmcuLi5kb25lLiUwQSUwQUMlM0ElM0UlMjBkaXIlMjBqJTNBJTBBJTBBJTIwVm9sdW1lJTIwaW4lMjBkcml2ZSUyMEolMjBoYXMlMjBubyUyMGxhYmVsLiUwQSUyMERpcmVjdG9yeSUyMG9mJTIwJTIwSiUzQSU1QyUwQSUwQTIwMTgtMDgtMTAlMjAlMjAxMCUzQTM5JTIwJTIwJTIwJTIwJTIwJTIwMTAlMjAwMTAlMjA2MjQlMjAlMjBEQVRBQkFTRS5CSU4lMEEyMDE4LTA4LTEwJTIwJTIwMTAlM0EzOSUyMCUyMCUyMDElMjAwNzMlMjA3NDElMjA4MjQlMjAlMjBMT0cwMDAwMC5LTUYlMEEyMDE4LTA4LTEwJTIwJTIwMTAlM0EzOSUyMCUyMCUyMDElMjAwNzMlMjA3NDElMjA4MjQlMjAlMjBMT0cwMDAwMS5LTUYlMEEyMDE4LTA4LTEwJTIwJTIwMTAlM0EzOSUyMCUyMCUyMDElMjAwNzMlMjA3NDElMjA4MjQlMjAlMjBMT0cwMDAwMi5LTUYlMEEyMDE4LTA4LTEwJTIwJTIwMTAlM0EzOSUyMCUyMCUyMDElMjAwNzMlMjA3NDElMjA4MjQlMjAlMjBMT0cwMDAwMy5LTUYlMEEyMDE4LTA4LTEwJTIwJTIwMTAlM0EzOSUyMCUyMCUyMDElMjAwNzMlMjA3NDElMjA4MjQlMjAlMjBMT0cwMDAwNC5LTUYlMEEyMDE4LTA4LTEwJTIwJTIwMTAlM0EzOSUyMCUyMCUyMCUyMCUyMDUxNCUyMDc4NSUyMDI4MCUyMCUyMExPRzAwMDA1LktNRiUwQTIwMTgtMDgtMTAlMjAlMjAxMCUzQTM5JTIwJTIwJTIwJTIwJTIwJTIwMTAlMjA0ODUlMjA3NjAlMjAlMjBQQVJBTS5MSUYlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjA4JTIwRmlsZSUyOHMlMjklMjAlMjA1JTIwOTAzJTIwOTkwJTIwNzg0JTIwYnl0ZXMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAwJTIwRGlyJTI4cyUyOSUyMCUyMDEwJTIwMDA0JTIwNDU1JTIwNDI0JTIwYnl0ZXMlMjBmcmVl"][vc_column_text]
Here we see the binary configuration file (PARAM.LIF), the log file container (LOG00000.KMF through LOG00005.KMF) and the configuration file reserved for Kvaser Memorator Config Tool (10 MB DATABASE.BIN). We also see 10000 MB of free space as we requested.
[/vc_column_text][vc_header_raket header_type="h3" header="4.2 Save configuration to disk"][vc_column_text]To download the configuration directly to the SD card, we need to open the file system instead of the device as we did in the previous posts. We also need to inform kvmlib about where our SD card was mounted. This is done by calling the function kmfOpen() and supply the full path to the file LOG00000.KMF, which always exists on a correctly initialized SD card.2 We are now also using kvaMemoLibXml to write the binary configuration file directly to the SD card. As previously stated we also need to supply the correct device type.[/vc_column_text][vc_code_raket language="python" header="Writing binary configuration to SD card." code="JTIzJTIwMTJfY29uZmlndXJlU2QucHklMEFmcm9tJTIwY2FubGliJTIwaW1wb3J0JTIwa3ZhbWVtb2xpYnhtbCUwQSUwQXByaW50JTI4JTI3a3ZhbWVtb2xpYiUyMHZlcnNpb24lM0ElMjAlMjclMkMlMjBrdmFtZW1vbGlieG1sLmRsbHZlcnNpb24lMjglMjklMjklMEElMEElMjMlMjBPdXIlMjBTRCUyMGNhcmQlMjBpcyUyMG1vdW50ZWQlMjB1bmRlciUyMEolM0ElMkMlMjBzbyUyMHRoYXQlMjBpcyUyMHdoZXJlJTIwb3VyJTBBJTIzJTIwYmluYXJ5JTIwY29uZmlndXJhdGlvbiUyMHNob3VsZCUyMGJlJTIwcGxhY2VkLiUwQWZpbGVuYW1lJTIwJTNEJTIwJTI3SiUzQSUyRlBBUkFNLkxJRiUyNyUwQSUwQSUyMyUyMENvbnZlcnQlMjB0aGUlMjBwcmV2aW91c2x5JTIwdmFsaWRhdGVkJTIwWE1MJTIwY29uZmlndXJhdGlvbiUyMGZpbGUlMEElMjMlMjBhbmQlMjB3cml0ZSUyMHRoZSUyMHJlc3VsdGluZyUyMGJpbmFyeSUyMGNvbmZpZ3VyYXRpb24lMjB0byUyMFNEJTIwY2FyZCUwQWt2YW1lbW9saWJ4bWwua3ZhWG1sVG9GaWxlJTI4JTIyY29uZmlnLnhtbCUyMiUyQyUyMGZpbGVuYW1lJTI5"][vc_column_text]

Listing 15: Writing binary configuration to SD card.

[/vc_column_text][vc_column_text]To download the configuration in clear text, we do just like we did in the previous post, but write the zip file to the SD card directly through the Windows mount point.[/vc_column_text][vc_code_raket language="python" header="Writing clear text configurations using a zip archive." code="JTIzJTIwMTNfY29weV9maWxlc190b19jYXJkLnB5JTBBaW1wb3J0JTIwemlwZmlsZSUwQSUwQSUyMyUyME91ciUyMFNEJTIwY2FyZCUyMGlzJTIwbW91bnRlZCUyMHVuZGVyJTIwSiUzQSUwQWZpbGVuYW1lJTIwJTNEJTIwJTI3SiUzQSUyRmNvbmZpZy56aXAlMjclMEElMEElMjMlMjBDcmVhdGluZyUyMHppcCUyMGFyY2hpdmUlMEF3aXRoJTIwemlwZmlsZS5aaXBGaWxlJTI4ZmlsZW5hbWUlMkMlMjBtb2RlJTNEJTI3dyUyNyUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNvbXByZXNzaW9uJTNEemlwZmlsZS5aSVBfREVGTEFURUQlMjklMjBhcyUyMHppcGYlM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBBZGRpbmclMjBmaWxlcyUyMHRvJTIwemlwJTIwYXJjaGl2ZSUwQSUyMCUyMCUyMCUyMHppcGYud3JpdGUlMjglMjdjb25maWcueG1sJTI3JTI5JTBBJTIwJTIwJTIwJTIwemlwZi53cml0ZSUyOCUyN215Q2FuR2VuZXJhdG9yLnR4ZSUyNyUyOQ=="][vc_column_text]

Listing 16: Writing clear text configurations using a zip archive.

[/vc_column_text][vc_column_text]If we now look at the contents of our SD card we have the following.[/vc_column_text][vc_code_raket header="Writing clear text configurations using a zip archive." code="QyUzQSUzRWRpciUyMEolM0ElMEElMjBWb2x1bWUlMjBpbiUyMGRyaXZlJTIwSiUyMGhhcyUyMG5vJTIwbGFiZWwuJTBBJTIwRGlyZWN0b3J5JTIwb2YlMjBKJTNBJTVDJTBBJTBBMjAxOC0wOC0xMCUyMCUyMDExJTNBMTYlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjA0MCUyMDYwNCUyMFBBUkFNLkxJRiUwQTIwMTgtMDgtMTAlMjAlMjAxMCUzQTM5JTIwJTIwJTIwJTIwJTIwMSUyMDA3MyUyMDc0MSUyMDgyNCUyMExPRzAwMDAwLktNRiUwQTIwMTgtMDgtMTAlMjAlMjAxMCUzQTM5JTIwJTIwJTIwJTIwJTIwMSUyMDA3MyUyMDc0MSUyMDgyNCUyMExPRzAwMDAxLktNRiUwQTIwMTgtMDgtMTAlMjAlMjAxMCUzQTM5JTIwJTIwJTIwJTIwJTIwMSUyMDA3MyUyMDc0MSUyMDgyNCUyMExPRzAwMDAyLktNRiUwQTIwMTgtMDgtMTAlMjAlMjAxMCUzQTM5JTIwJTIwJTIwJTIwJTIwMSUyMDA3MyUyMDc0MSUyMDgyNCUyMExPRzAwMDAzLktNRiUwQTIwMTgtMDgtMTAlMjAlMjAxMCUzQTM5JTIwJTIwJTIwJTIwJTIwMSUyMDA3MyUyMDc0MSUyMDgyNCUyMExPRzAwMDA0LktNRiUwQTIwMTgtMDgtMTAlMjAlMjAxMCUzQTM5JTIwJTIwJTIwJTIwJTIwJTIwJTIwNTE0JTIwNzg1JTIwMjgwJTIwTE9HMDAwMDUuS01GJTBBMjAxOC0wOC0xMCUyMCUyMDEwJTNBMzklMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAxMCUyMDAxMCUyMDYyNCUyMERBVEFCQVNFLkJJTiUwQTIwMTgtMDgtMTAlMjAlMjAxMSUzQTIxJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwMiUyMDUxNiUyMGNvbmZpZy56aXAlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjA5JTIwRmlsZSUyOHMlMjklMjAlMjA1JTIwODkzJTIwNTQ4JTIwMTQ0JTIwYnl0ZXMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAwJTIwRGlyJTI4cyUyOSUyMCUyMDEwJTIwMDE0JTIwODkyJTIwMDMyJTIwYnl0ZXMlMjBmcmVl"][vc_header_raket header_type="h3" header="4.3 Read result from SD card"][vc_column_text]When we get the SD card back from the field, we reconnect the SD card to our computer and begin by verifying the LIO data format version on the SD card.[/vc_column_text][vc_code_raket language="python" header="Verify LIO data format on SD card" code="JTIzJTIwMTRfdmVyaWZ5TGlvRm9ybWF0U2QucHklMEFmcm9tJTIwY2FubGliJTIwaW1wb3J0JTIwa3ZtbGliJTBBJTBBJTIzJTIwT3VyJTIwU0QlMjBjYXJkJTIwaXMlMjBtb3VudGVkJTIwdW5kZXIlMjBKJTNBJTJDJTIwc28lMjBvdXIlMjBMT0cwMDAwMC5LTUYlMjBjYW4lMEElMjMlMjBiZSUyMG9wZW5lZCUyMGZyb20lMjBoZXJlJTBBZmlsZW5hbWUlMjAlM0QlMjAlMjdKJTNBJTJGTE9HMDAwMDAuS01GJTI3JTBBJTBBJTIzJTIwT3BlbiUyMHRoZSUyMFNEJTIwY2FyZCUyMGFuZCUyMHJlYWQlMjBMSU8lMjBkYXRhJTIwZm9ybWF0JTIwdmVyc2lvbiUwQSUyMyUyMFdlJTIwaGF2ZSUyMGZpcm13YXJlJTIwdmVyc2lvbiUyMDMuMCUyMGluJTIwdGhlJTIwZGV2aWNlJTIwdGhpcyUyMFNEJTIwY2FyZCUyMHdpbGwlMEElMjMlMjBiZSUyMGluc2VydGVkJTIwaW50byUyQyUyMHRoaXMlMjBtZWFucyUyMHRoYXQlMjB0aGUlMjBGVyUyMGlzJTIwdXNpbmclMjBMaW8lMjBEYXRhJTBBJTIzJTIwRm9ybWF0JTIwdjUuMCUyMGFuZCUyMHdlJTIwc2hvdWxkJTIwdXNlJTIwa3ZtREVWSUNFX01IWURSQV9FWFQlMjBhcyUwQSUyMyUyMHRoZSUyMGRldmljZVR5cGUlMEF3aXRoJTIwa3ZtbGliLm9wZW5LbWYlMjglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmaWxlbmFtZSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGRldmljZV90eXBlJTNEa3ZtbGliLkRldmljZS5NSFlEUkFfRVhUJTI5JTIwYXMlMjBrbWYlM0ElMEElMjAlMjAlMjAlMjBsZGZfdmVyc2lvbiUyMCUzRCUyMGttZi5sb2cubGRmX3ZlcnNpb24lMEElMEFwcmludCUyOCUyN0xpbyUyMERhdGElMjBGb3JtYXQlMjB2ZXJzaW9uJTNBJTI3JTJDJTIwbGRmX3ZlcnNpb24lMjklMEElMEElMjMlMjBWZXJpZnklMjB0aGF0JTIwdGhlJTIwTElPJTIwZGF0YSUyMGZvcm1hdCUyMHZlcnNpb24lMjBvZiUyMHRoZSUyMGNhcmQlMjBjb3JyZXNwb25kcyUwQSUyMyUyMHRvJTIwdGhlJTIwZGV2aWNlJTIwdHlwZSUyMHdlJTIwdXNlZCUyMHdoZW4lMjBvcGVuaW5nJTIwdGhlJTIwZGV2aWNlJTBBaWYlMjBsZGZfdmVyc2lvbiUyMCUyMSUzRCUyMCUyODUlMkMlMjAwJTI5JTNBJTBBJTIwJTIwJTIwJTIwcHJpbnQlMjglMjdVbmV4cGVjdGVkJTIwTGlvJTIwRGF0YSUyMEZvcm1hdCUzQSUyNyUyQyUyMGxkZl92ZXJzaW9uJTI5JTBBJTIwJTIwJTIwJTIwaWYlMjBsZGZfdmVyc2lvbiUyMCUzRCUzRCUyMCUyODMlMkMlMjAwJTI5JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjJUaGlzJTIwbG9nJTIwZmlsZSUyMGNhbiUyMGJlJTIwcmVhZCUyMGlmJTIweW91JTIwcmVvcGVuJTIwdGhlJTIyJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIyJTIwZGV2aWNlJTIwYXMlMjBrdm1ERVZJQ0VfTUhZRFJBLiUyMiUyOQ=="][vc_column_text]

Listing 17: Verify LIO data format on SD card.

[/vc_column_text][vc_column_text]The next step is to read out the logged data. The only difference from our previous post using a connected device is opening the SD card instead of the device. Go back to the previous post for a more detailed description of what happens here.[/vc_column_text][vc_code_raket language="python" header="Read logged data from SD card and save to .kme50" code="JTIzJTIwMTVfcmVhZFJlc3VsdEZyb21TZC5weSUwQWltcG9ydCUyMGdsb2IlMEFpbXBvcnQlMjBvcyUwQSUwQWZyb20lMjBjYW5saWIlMjBpbXBvcnQlMjBFQU4lMkMlMjBWZXJzaW9uTnVtYmVyJTBBZnJvbSUyMGNhbmxpYiUyMGltcG9ydCUyMGt2bWxpYiUwQSUwQSUyMyUyME91ciUyMFNEJTIwY2FyZCUyMGlzJTIwbW91bnRlZCUyMHVuZGVyJTIwSiUzQSUyQyUyMHNvJTIwb3VyJTIwTE9HMDAwMDAuS01GJTIwY2FuJTBBJTIzJTIwYmUlMjBvcGVuZWQlMjBmcm9tJTIwaGVyZSUwQWZpbGVuYW1lJTIwJTNEJTIwJTI3SiUzQSUyRkxPRzAwMDAwLktNRiUyNyUwQSUwQSUyMyUyMERpcmVjdG9yeSUyMHRvJTIwcHV0JTIwdGhlJTIwcmVzdWx0aW5nJTIwZmlsZXMlMjBpbiUwQXJlc3VsdERpciUyMCUzRCUyMCUyMnJlc3VsdCUyMiUwQSUwQSUyMyUyME1ha2UlMjBzdXJlJTIwdGhlJTIwcmVzdWx0JTIwZGlyZWN0b3J5JTIwZXhpc3RzJTIwYW5kJTIwaXMlMjBlbXB0eSUwQWlmJTIwb3MucGF0aC5pc2RpciUyOHJlc3VsdERpciUyOSUzQSUwQSUyMCUyMCUyMCUyMGZpbGVzJTIwJTNEJTIwZ2xvYi5nbG9iJTI4b3MucGF0aC5qb2luJTI4cmVzdWx0RGlyJTJDJTIwJTIyJTJBJTIyJTI5JTI5JTBBJTIwJTIwJTIwJTIwZm9yJTIwZiUyMGluJTIwZmlsZXMlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvcy5yZW1vdmUlMjhmJTI5JTBBZWxzZSUzQSUwQSUyMCUyMCUyMCUyMG9zLm1rZGlyJTI4cmVzdWx0RGlyJTI5JTBBb3MuY2hkaXIlMjhyZXN1bHREaXIlMjklMEElMEElMjMlMjBPcGVuJTIwdGhlJTIwU0QlMjBjYXJkJTBBJTIzJTIwV2UlMjBoYXZlJTIwZWFybGllciUyMHZlcmlmaWVkJTIwdGhhdCUyMHRoZSUyMFNEJTIwY2FyZCUyMGlzJTIwdXNpbmclMjBMaW8lMjBEYXRhJTIwRm9ybWF0JTIwdjUuMCUwQSUyMyUyMGFuZCUyMHdlJTIwc2hvdWxkJTIwdXNlJTIwa3ZtREVWSUNFX01IWURSQV9FWFQlMjBhcyUyMHRoZSUyMGRldmljZVR5cGUlMEF3aXRoJTIwa3ZtbGliLm9wZW5LbWYlMjhmaWxlbmFtZSUyOSUyMGFzJTIwa21mJTNBJTBBJTIwJTIwJTIwJTIwbGRmX3ZlcnNpb24lMjAlM0QlMjBrbWYubG9nLmxkZl92ZXJzaW9uJTBBJTIwJTIwJTIwJTIwJTIzJTIwVmVyaWZ5JTIwdGhhdCUyMHRoZSUyMExJTyUyMGRhdGElMjBmb3JtYXQlMjBvZiUyMHRoZSUyMGNhcmQlMjBjb3JyZXNwb25kcyUyMHRvJTBBJTIwJTIwJTIwJTIwJTIzJTIwdGhlJTIwZGV2aWNlJTIwdHlwZSUyMHdlJTIwdXNlZCUyMHdoZW4lMjBvcGVuaW5nJTIwdGhlJTIwZGV2aWNlJTBBJTIwJTIwJTIwJTIwaWYlMjBsZGZfdmVyc2lvbiUyMCUyMSUzRCUyMFZlcnNpb25OdW1iZXIlMjhtYWpvciUzRDUlMkMlMjBtaW5vciUzRDAlMjklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMGxkZl92ZXJzaW9uJTIwJTNEJTNEJTIwVmVyc2lvbk51bWJlciUyOG1ham9yJTNEMyUyQyUyMG1pbm9yJTNEMCUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJhaXNlJTIwVmFsdWVFcnJvciUyOCUyN1RoaXMlMjBsb2clMjBmaWxlJTIwY2FuJTIwYmUlMjByZWFkJTIwaWYlMjB5b3UlMjByZW9wZW4lMjB0aGUlMjclMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjclMjBkZXZpY2UlMjBhcyUyMGt2bURFVklDRV9NSFlEUkEuJTI3JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmFpc2UlMjBWYWx1ZUVycm9yJTI4JTI3VW5leHBlY3RlZCUyMExpbyUyMERhdGElMjBGb3JtYXQlM0ElMjAlMjclMjAlMkIlMjBzdHIlMjhsZGZfdmVyc2lvbiUyOSUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMFJlYWQlMjBudW1iZXIlMjBvZiUyMHJlY29yZGVkJTIwbG9nZmlsZXMlMEElMjAlMjAlMjAlMjBudW1fbG9nX2ZpbGVzJTIwJTNEJTIwbGVuJTI4a21mLmxvZyUyOSUwQSUyMCUyMCUyMCUyMHByaW50JTI4JTIyRm91bmQlMjAlN0JudW0lN0QlMjBmaWxlJTIwb24lMjBjYXJkJTNBJTIwJTIyLmZvcm1hdCUyOG51bSUzRG51bV9sb2dfZmlsZXMlMjklMjklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBMb29wJTIwdGhyb3VnaCUyMGFsbCUyMGxvZ2ZpbGVzJTIwYW5kJTIwd3JpdGUlMjB0aGVpciUyMGNvbnRlbnRzJTIwdG8lMjAua21lNTAlMjBmaWxlcyUwQSUyMCUyMCUyMCUyMGZvciUyMGklMkMlMjBsb2dfZmlsZSUyMGluJTIwZW51bWVyYXRlJTI4a21mLmxvZyUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4JTIyJTVDbiUzRCUzRCUzRCUzRCUyMEZpbGUlMjAlN0JpbmRleCU3RCUzQSUyMCU3QnN0YXJ0JTdEJTIwLSUyMCU3QmVuZCU3RCUyQyUyMGFwcHJveCUyMCU3Qm51bSU3RCUyMGV2ZW50cyUyMi4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3JtYXQlMjhpbmRleCUzRGklMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdGFydCUzRGxvZ19maWxlLnN0YXJ0X3RpbWUlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmQlM0Rsb2dfZmlsZS5lbmRfdGltZSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bSUzRGxvZ19maWxlLmV2ZW50X2NvdW50X2VzdGltYXRpb24lMjglMjklMjklMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBUaGUlMjBmaXJzdCUyMGxvZ0V2ZW50JTIwY29udGFpbnMlMjBkZXZpY2UlMjBpbmZvcm1hdGlvbiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGV2ZW50X2l0ZXJhdG9yJTIwJTNEJTIwaXRlciUyOGxvZ19maWxlJTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZmlyc3RfZXZlbnQlMjAlM0QlMjBuZXh0JTI4ZXZlbnRfaXRlcmF0b3IlMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlYW4lMjAlM0QlMjBFQU4uZnJvbV9oaWxvJTI4JTVCZmlyc3RfZXZlbnQuZWFuSGklMkMlMjBmaXJzdF9ldmVudC5lYW5MbyU1RCUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNlcmlhbCUyMCUzRCUyMGZpcnN0X2V2ZW50LnNlcmlhbE51bWJlciUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMEFkZCUyMEVBTiUyMGFuZCUyMHNlcmlhbCUyMG51bWJlciUyMGluZm8lMjB0byUyMGZpbGVuYW1lJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbG9nZmlsZV9uYW1lJTIwJTNEJTIwJTI4JTI3bG9nXyU3QmVhbiU3RF8lN0JzbiU3RF8lN0JpbmRleCUzQTAzJTdELmttZTUwJTI3LiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvcm1hdCUyOGVhbiUzRHN0ciUyOGVhbiUyOSUyQyUyMHNuJTNEc2VyaWFsJTJDJTIwaW5kZXglM0RpJTI5JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjdTYXZpbmclMjB0byUzQSUyNyUyQyUyMGxvZ2ZpbGVfbmFtZSUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHdpdGglMjBrdm1saWIuY3JlYXRlS21lJTI4bG9nZmlsZV9uYW1lJTI5JTIwYXMlMjBrbWUlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOGZpcnN0X2V2ZW50JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwa21lLndyaXRlX2V2ZW50JTI4Zmlyc3RfZXZlbnQlMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjBldmVudCUyMGluJTIwZXZlbnRfaXRlcmF0b3IlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBXcml0ZSUyMGV2ZW50JTIwdG8lMjBzdGRvdXQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOGV2ZW50JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwa21lLndyaXRlX2V2ZW50JTI4ZXZlbnQlMjklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBEZWxldGUlMjBhbGwlMjBsb2dmaWxlcyUwQSUyMCUyMCUyMCUyMCUyMyUyMGttZi5sb2cuZGVsZXRlX2FsbCUyOCUyOQ=="][vc_column_text]

Listing 18: Read logged data from SD card and save to .kme50 files.

[/vc_column_text][vc_column_text]Running the above code we can see that six messages from each channel turns up inside the log.[/vc_column_text][vc_code_raket header="Read logged data from SD card and save to .kme50" code="Rm91bmQlMjAxJTIwZmlsZSUyMG9uJTIwY2FyZCUzQSUwQSUwQSUzRCUzRCUzRCUzRCUyMEZpbGUlMjAwJTNBJTIwMjAxOC0wOC0xMCUyMDEyJTNBMjYlM0EzOCUyMC0lMjAyMDE4LTA4LTEwJTIwMTIlM0EyNiUzQTQ0JTJDJTIwYXBwcm94JTIwMjAlMjBldmVudHMlMEFTYXZpbmclMjB0byUzQSUyMGxvZ183My0zMDEzMC0wMDgxOS05XzExNTczXzAwMC5rbWU1MCUwQSUyQXQlM0ElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAtJTIwRUFOJTNBNzMtMzAxMzAtMDA4MTktOSUyMCUyMHMlMkZuJTNBMTE1NzMlMjAlMjBGVyUzQXYzLjExLjU1NyUyMCUyMExJTyUzQXY1LjAlMEElMjB0JTNBJTIwJTIwJTIwMi43MDE3MzgyNzUlMjAlMjBEYXRlVGltZSUzQSUyMDIwMTgtMDgtMTAlMjAxMiUzQTI2JTNBMzglMEElMjB0JTNBJTIwJTIwJTIwMi43MDE3MzgyNzUlMjBMb2clMjBUcmlnZ2VyJTIwRXZlbnQlMjAlMjh0eXBlJTNBJTIwMHgyJTJDJTIwdHJpZ25vJTNBJTIwMHgwMSUyQyUyMHByZS10cmlnZ2VyJTNBJTIwMCUyQyUyMHBvc3QtdHJpZ2dlciUzQSUyMDAlMjklMEElMEElMjB0JTNBJTIwJTIwJTIwMi43MDE3MzgyNzUlMjAlMjBjaCUzQTElMjBmJTNBJTIwJTIwJTIwJTIwMiUyMGlkJTNBJTIwJTIwJTIwMyUyMGRsYyUzQSUyMDglMjBkJTNBMTIlMjAyMSUyMDEzJTIwMzElMjAyMiUyMDM0JTIwNDElMjAxNSUwQSUyMHQlM0ElMjAlMjAlMjAyLjcwMTczODMzNyUyMExvZyUyMFRyaWdnZXIlMjBFdmVudCUyMCUyOHR5cGUlM0ElMjAweDIlMkMlMjB0cmlnbm8lM0ElMjAweDAxJTJDJTIwcHJlLXRyaWdnZXIlM0ElMjAwJTJDJTIwcG9zdC10cmlnZ2VyJTNBJTIwMCUyOSUwQSUwQSUyMHQlM0ElMjAlMjAlMjAyLjcwMTczODMzNyUyMCUyMGNoJTNBMCUyMGYlM0ElMjAlMjAlMjA0MiUyMGlkJTNBJTIwJTIwJTIwMyUyMGRsYyUzQSUyMDglMjBkJTNBMTIlMjAyMSUyMDEzJTIwMzElMjAyMiUyMDM0JTIwNDElMjAxNSUwQSUyMHQlM0ElMjAlMjAlMjAlMjAlMjAzLjcwMTc1ODQlMjAlMjBjaCUzQTElMjBmJTNBJTIwJTIwJTIwJTIwMiUyMGlkJTNBJTIwJTIwJTIwNCUyMGRsYyUzQSUyMDglMjBkJTNBMTIlMjAyMSUyMDEzJTIwMzElMjAyMiUyMDM0JTIwNDElMjAxNSUwQSUyMHQlM0ElMjAlMjAlMjAzLjcwMTc1ODQ2MiUyMCUyMGNoJTNBMCUyMGYlM0ElMjAlMjAlMjA0MiUyMGlkJTNBJTIwJTIwJTIwNCUyMGRsYyUzQSUyMDglMjBkJTNBMTIlMjAyMSUyMDEzJTIwMzElMjAyMiUyMDM0JTIwNDElMjAxNSUwQSUyMHQlM0ElMjAlMjAlMjA0LjcwMTc3NDUyNSUyMCUyMGNoJTNBMSUyMGYlM0ElMjAlMjAlMjAlMjAyJTIwaWQlM0ElMjAlMjAlMjA1JTIwZGxjJTNBJTIwOCUyMGQlM0ExMiUyMDIxJTIwMTMlMjAzMSUyMDIyJTIwMzQlMjA0MSUyMDE1JTBBJTIwdCUzQSUyMCUyMCUyMDQuNzAxNzc0NTg3JTIwJTIwY2glM0EwJTIwZiUzQSUyMCUyMCUyMDQyJTIwaWQlM0ElMjAlMjAlMjA1JTIwZGxjJTNBJTIwOCUyMGQlM0ExMiUyMDIxJTIwMTMlMjAzMSUyMDIyJTIwMzQlMjA0MSUyMDE1JTBBJTIwdCUzQSUyMCUyMCUyMCUyMDUuNzAxNzkxNjUlMjBMb2clMjBUcmlnZ2VyJTIwRXZlbnQlMjAlMjh0eXBlJTNBJTIwMHgyJTJDJTIwdHJpZ25vJTNBJTIwMHgwMSUyQyUyMHByZS10cmlnZ2VyJTNBJTIwMCUyQyUyMHBvc3QtdHJpZ2dlciUzQSUyMDI1MDAlMjklMEElMEElMjB0JTNBJTIwJTIwJTIwJTIwNS43MDE3OTE2NSUyMCUyMGNoJTNBMSUyMGYlM0ElMjAlMjAlMjAlMjAyJTIwaWQlM0ElMjAlMjAlMjA2JTIwZGxjJTNBJTIwOCUyMGQlM0ExMiUyMDIxJTIwMTMlMjAzMSUyMDIyJTIwMzQlMjA0MSUyMDE1JTBBJTIwdCUzQSUyMCUyMCUyMDUuNzAxNzkxNzEyJTIwJTIwY2glM0EwJTIwZiUzQSUyMCUyMCUyMDQyJTIwaWQlM0ElMjAlMjAlMjA2JTIwZGxjJTNBJTIwOCUyMGQlM0ExMiUyMDIxJTIwMTMlMjAzMSUyMDIyJTIwMzQlMjA0MSUyMDE1JTBBJTIwdCUzQSUyMCUyMCUyMDYuNzAxODA5Nzc1JTIwJTIwY2glM0ExJTIwZiUzQSUyMCUyMCUyMCUyMDIlMjBpZCUzQSUyMCUyMCUyMDclMjBkbGMlM0ElMjA4JTIwZCUzQTEyJTIwMjElMjAxMyUyMDMxJTIwMjIlMjAzNCUyMDQxJTIwMTUlMEElMjB0JTNBJTIwJTIwJTIwNi43MDE4MDk4MzclMjAlMjBjaCUzQTAlMjBmJTNBJTIwJTIwJTIwNDIlMjBpZCUzQSUyMCUyMCUyMDclMjBkbGMlM0ElMjA4JTIwZCUzQTEyJTIwMjElMjAxMyUyMDMxJTIwMjIlMjAzNCUyMDQxJTIwMTUlMEElMjB0JTNBJTIwJTIwJTIwJTIwJTIwNy43MDE4MzU5JTIwJTIwY2glM0ExJTIwZiUzQSUyMCUyMCUyMCUyMDIlMjBpZCUzQSUyMCUyMCUyMDglMjBkbGMlM0ElMjA4JTIwZCUzQTEyJTIwMjElMjAxMyUyMDMxJTIwMjIlMjAzNCUyMDQxJTIwMTUlMEElMjB0JTNBJTIwJTIwJTIwNy43MDE4MzU5NjIlMjAlMjBjaCUzQTAlMjBmJTNBJTIwJTIwJTIwNDIlMjBpZCUzQSUyMCUyMCUyMDglMjBkbGMlM0ElMjA4JTIwZCUzQTEyJTIwMjElMjAxMyUyMDMxJTIwMjIlMjAzNCUyMDQxJTIwMTU="][vc_header_raket header_type="h3" header="4.4 Read configuration from SD card"][vc_column_text]For completeness, the only thing left is to show how to read back our compressed configuration that we placed on the SD card earlier using the Windows mount point.[/vc_column_text][vc_code_raket language="python" header="Copy of all user files from the SD card." code="JTIzJTIwMTZfcmVhZENvbmZpZ0Zyb21TZC5weSUwQWltcG9ydCUyMGdsb2IlMEFpbXBvcnQlMjBvcyUwQWltcG9ydCUyMHNodXRpbCUwQSUwQSUyMyUyME91ciUyMFNEJTIwY2FyZCUyMGlzJTIwbW91bnRlZCUyMHVuZGVyJTIwSiUzQSUyQyUyMHNvJTIwb3VyJTIwTE9HMDAwMDAuS01GJTIwY2FuJTBBJTIzJTIwYmUlMjBvcGVuZWQlMjBmcm9tJTIwaGVyZSUwQWZpbGVuYW1lJTIwJTNEJTIwJTI3SiUzQSUyRkxPRzAwMDAwLktNRiUyNyUwQSUwQWZvciUyMGZpbGUlMjBpbiUyMGdsb2IuZ2xvYiUyOG9zLnBhdGguam9pbiUyOG9zLnBhdGguZGlybmFtZSUyOGZpbGVuYW1lJTI5JTJDJTIwJTIyJTJBLiUyQSUyMiUyOSUyOSUzQSUwQSUyMCUyMCUyMCUyMGlmJTI4b3MucGF0aC5zcGxpdGV4dCUyOGZpbGUlMjklNUIxJTVELmxvd2VyJTI4JTI5JTIwJTNEJTNEJTIwJTI3LmttZiUyNyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMG9yJTIwZmlsZS5sb3dlciUyOCUyOSUyMCUzRCUzRCUyMCUyN3BhcmFtLmxpZiUyNyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMG9yJTIwZmlsZS5sb3dlciUyOCUyOSUyMCUzRCUzRCUyMCUyN2RhdGFiYXNlLmJpbiUyNyUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4JTI3U2tpcHBpbmclM0ElMjclMkMlMjBmaWxlJTI5JTBBJTIwJTIwJTIwJTIwZWxzZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4JTI3Q29weWluZyUzQSUyNyUyQyUyMGZpbGUlMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzaHV0aWwuY29weSUyOGZpbGUlMkMlMjAlMjIuJTIyJTI5"][vc_column_text]

Listing 19: Copy of all user files from the SD card.

[/vc_column_text][vc_column_text]Now everything from this run is placed inside the result directory.[/vc_column_text][vc_code_raket header="Copy of all user files from the SD card." code="QyUzQSUzRSUyMGRpciUyMHJlc3VsdCUwQSUwQSUyMERpcmVjdG9yeSUyMG9mJTIwcmVzdWx0JTBBJTBBMjAxOC0wOC0xMCUyMCUyMDEzJTNBMjglMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAyJTIwNTE2JTIwY29uZmlnLnppcCUwQTIwMTgtMDgtMTAlMjAlMjAxMyUzQTI4JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwMTAlMjAwMTAlMjA2MjQlMjBEQVRBQkFTRS5CSU4lMEEyMDE4LTA4LTEwJTIwJTIwMTMlM0ExNiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMDQ1MiUyMGxvZ183My0zMDEzMC0wMDgxOS05XzExNTczXzAwMC5rbWU1MCUwQTIwMTgtMDgtMTAlMjAlMjAxMyUzQTI4JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwNDAlMjA2MDQlMjBQQVJBTS5MSUYlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjA0JTIwRmlsZSUyOHMlMjklMjAlMjAlMjAlMjAlMjAxMCUyMDA1NCUyMDE5NiUyMGJ5dGVzJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwMiUyMERpciUyOHMlMjklMjAlMjA3ODYlMjA1MjUlMjA5OTAlMjA5MTIlMjBieXRlcyUyMGZyZWU="][vc_column_text]
This was all for now, hopefully this blog series has helped you getting to know more about kvmlib and showed what the library can do for you when managing Kvaser logger devices.
[/vc_column_text][vc_header_raket header_type="h3" header="Footnotes"][vc_column_text]1 Default installation location form Kvaser Memorator Config Tool is
 C:\Program Files (x86)\Kvaser\MemoratorConfigTool\mhydraformat.exe
2 We only supply the filename for the first of the log file container files, as the rest will follow immediately after this first file on the card.[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column width="1/4"][/vc_column][vc_column width="1/2"][vc_button_raket title="Digging deeper into kvmlib" text="Part Three" page_id="https://www.kvaser.com/developer-blog/digging-deeper-into-kvmlib/"][/vc_column][vc_column width="1/4"][/vc_column][/vc_row][vc_row][vc_column][vc_raw_html]JTNDYnIlMjAlMkYlM0U=[/vc_raw_html][vc_separator_raket][vc_message]This article has been updated. To view the original, click on the box below.[/vc_message][vc_accordion active_tab="0" collapsible="yes"][vc_accordion_tab title="Original Article"][vc_column_text]Original article published April 19, 2016.[/vc_column_text][vc_message]This blog uses now deprecated functions, see blog "Improved API in Python canlib v1.5" for more information.[/vc_message][vc_column_text]This is the final post in a 4-part series about configuring and reading logged data using a Kvaser Memorator 2nd Generation device through kvmlib:[/vc_column_text][vc_column_text]

1 Getting started with kvmlib

2 Adding script and triggers to a configuration 3 Digging deeper into kvmlib 4 Configure an SD card using kvmlib[/vc_column_text][vc_column_text]Earlier we interacted with kvmlib to configure a device and to retrieve both the configuration and logged data for further analysis. Now we will look at what steps that need to be performed differently if we only have access to the SD card that will be inserted into the device. The scenario is where the SD card is shipped between the physical logging location and us. For the purpose of this exercise, we will take a 16 GB SD card that has been formatted in Windows, initialize and configure this SD card so that we later can insert the SD card into our Kvaser Memorator Pro 5xHS (EAN 00778-9), which is running firmware version 3.0. After running our logging session, we will remove the SD card from the device, read and reset the log files. Full program listings are available on GitHub.[/vc_column_text][vc_column_text]Update 2017-03-21: Updated sample code to work with Python 3 as well as using the Python canlib package introduced in CANlib SDK v5.17. Update 2017-03-28: Added the now preferred usage of kmfWriteConfig() over letting kvaXmlToFile() write directly to the SD Card.[/vc_column_text][vc_header_raket header_type="h3" header="4.1 Initialize SD card"][vc_column_text]If you do not have your device at hand, you can still initialize the SD card using your computer and the mhydraformat.exe program. This will however be more time consuming than using the device, as initializing a 16 GB card takes approximately 3 minutes. The mhydraformat.exe program can be found in the installation directory of Kvaser Memorator Config Tool.1 You can run the formatting program with the --help argument to see the usage help text.[/vc_column_text][vc_column_text]
[C:\]mhydraformat.exe --help
Disk formatting program for Kvaser Memorator (2nd generation) devices.
-h       --help            | Print this information.
-d=DRIVE --drive=DRIVE     | The drive to format, e.g. F:
-r=X     --reserve=X       | The number of MB to reserve for user files.
-c=X     --config=X        | The number of MB to reserve for configurations.
         --fat16           | Format the disk with FAT16. Default is FAT32.
-i       --interactive     | Require the user to confirm before format.
-q       --quiet           | Stop all outputs. Overrides -i.
         --bin5            | Use the older, smaller version 5 of PARAM.LIF.
         --lio3            | Use the older LIO data format 3 for KMF files.

Example:
         mhydraformat -d=F: -r=100 -c=10 --interactive
[/vc_column_text][vc_column_text] Connect your SD card to the computer and note the drive letter. For me, the SD card was assigned to E:. After inspecting the contents of the SD card, we run mhydraformat.exe to initialize the card. Note that the command line switch to specify the space to be allocated to DATABASE.BIN is here named --config. We also take a look at the contents of the card after the initialization using the Windows dir command. [/vc_column_text][vc_column_text]
dir E:
 Volume in drive E has no label.
 Volume Serial Number is 5C92-4738

 Directory of E:\

2016-02-23 08:41                  0 dummy_file
              1 File(s)               0 bytes
              0 Dir(s)   16 129 335 296 bytes free
mhydraformat.exe -d=E: -r=10000 -c=10
Formatting...done.
dir E:
 Volume in drive E has no label.

 Directory of E:\

2016-02-23 08:45 10 485 760 PARAM.LIF
2016-02-23 08:45 1 073 741 824 LOG00000.KMF
2016-02-23 08:45 1 073 741 824 LOG00001.KMF
2016-02-23 08:45 1 073 741 824 LOG00002.KMF
2016-02-23 08:45 1 073 741 824 LOG00003.KMF
2016-02-23 08:45 1 073 741 824 LOG00004.KMF
2016-02-23 08:45 736 649 216 LOG00005.KMF
2016-02-23 08:45 10 010 624 DATABASE.BIN
8 File(s) 6 125 854 720 bytes
0 Dir(s) 10 004 480 000 bytes free
echo
ECHO is on.
[/vc_column_text][vc_column_text] Here we see the binary configuration file (PARAM.LIF), the log file container (LOG00000.KMF through LOG00005.KMF) and the configuration file reserved for Kvaser Memorator Config Tool (10 MB DATABASE.BIN). We also see 10000 MB of free space as we requested. [/vc_column_text][vc_header_raket header_type="h3" header="4.2 Save configuration to disk"][vc_column_text]To download the configuration directly to the SD card, we need to open the file system instead of the device as we did in one of the previous posts. We also need to inform kvmlib about where our SD card was mounted. This is done by calling the function kmfOpen() and supply the full path to the file LOG00000.KMF, which always exists on a correctly initialized SD card.2 We are now also using kvaMemoLibXml to write the binary configuration file directly to the SD card. As previously stated we also need to supply the correct device type.[/vc_column_text][vc_code_raket language="python" header="Writing binary configuration to SD card." code="aW1wb3J0JTIwY2FubGliLmt2YU1lbW9MaWJYbWwlMjBhcyUyMGt2YU1lbW9MaWJYbWwlMEFpbXBvcnQlMjBjYW5saWIua3ZtbGliJTIwYXMlMjBrdm1saWIlMEElMEElMjMlMjBPdXIlMjBTRCUyMGNhcmQlMjBpcyUyMG1vdW50ZWQlMjB1bmRlciUyMEUlM0ElMkMlMjBzbyUyMHRoYXQlMjBpcyUyMHdoZXJlJTIwb3VyJTBBJTIzJTIwYmluYXJ5JTIwY29uZmlndXJhdGlvbiUyMHNob3VsZCUyMGJlJTIwcGxhY2VkLiUwQWttZkZpbGVuYW1lJTIwJTNEJTIwJTIyRSUzQSU1QyU1Q0xPRzAwMDAwLktNRiUyMiUwQSUwQW1sJTIwJTNEJTIwa3ZtbGliLmt2bWxpYiUyOCUyOSUwQXhsJTIwJTNEJTIwa3ZhTWVtb0xpYlhtbC5rdmFNZW1vTGliWG1sJTI4JTI5JTBBcHJpbnQlMjglMjJrdmFNZW1vTGliWG1sJTIwdmVyc2lvbiUzQSUyMHYlMjVzJTIyJTIwJTI1JTIweGwuZ2V0VmVyc2lvbiUyOCUyOSUyOSUwQSUwQSUyMyUyMENvbnZlcnQlMjB0aGUlMjBwcmV2aW91c2x5JTIwdmFsaWRhdGVkJTIwWE1MJTIwY29uZmlndXJhdGlvbiUyMGZpbGUlMEElMjMlMjBhbmQlMjB3cml0ZSUyMHRoZSUyMHJlc3VsdGluZyUyMGJpbmFyeSUyMGNvbmZpZ3VyYXRpb24lMjB0byUyMFNEJTIwY2FyZCUwQSUyMyUyMEl0JTIwaXMlMjBubyUyMGxvbmdlciUyMHJlY29tbWVuZGVkJTIwdG8lMjB3cml0ZSUyMGRpcmVjdGx5JTIwdG8lMjB0aGUlMjBTRCUyMENhcmQlMEElMjMlMjB1c2luZyUyMGt2YVhtbFRvRmlsZSUyOCUyOSUyMGJ1dCUyMHVzZSUyMHRoZSUyMGttZldyaXRlQ29uZmlnJTI4JTI5JTBBJTIzJTIwZnVuY3Rpb24lMjBpbnN0ZWFkLiUwQSUwQXdpdGglMjBvcGVuJTI4JTIyY29uZmlnLnhtbCUyMiUyQyUyMCUyN3IlMjclMjklMjBhcyUyMG15ZmlsZSUzQSUwQSUyMCUyMCUyMCUyMGNvbmZpZ1htbCUyMCUzRCUyMG15ZmlsZS5yZWFkJTI4JTI5JTBBJTBBdHJ5JTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwQ29udmVydCUyMHRoZSUyMHByZXZpb3VzbHklMjB2YWxpZGF0ZWQlMjBYTUwlMjBjb25maWd1cmF0aW9uJTIwZmlsZSUwQSUyMCUyMCUyMCUyMGNvbmZpZ0J1ZiUyMCUzRCUyMHhsLmt2YVhtbFRvQnVmZmVyJTI4Y29uZmlnWG1sJTI5JTBBZXhjZXB0JTIwa3ZhTWVtb0xpYlhtbC5rdmFFcnJvciUzQSUwQSUyMCUyMCUyMCUyMHByaW50JTI4JTIyRXJyb3IlMjBpbiUyMGNvbmZpZ3VyYXRpb24uJTIyJTI5JTBBJTIwJTIwJTIwJTIwZXhpdCUyODElMjklMEElMEF0cnklM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBXcml0ZSUyMHRoZSUyMHJlc3VsdGluZyUyMGJpbmFyeSUyMGNvbmZpZ3VyYXRpb24lMjB0byUyMFNEJTIwY2FyZCUwQSUyMCUyMCUyMCUyMGRldmljZVR5cGUlMjAlM0QlMjBrdm1saWIua3ZtREVWSUNFX01IWURSQV9FWFQlMEElMjAlMjAlMjAlMjBtbC5rbWZPcGVuJTI4ZmlsZW5hbWUlM0RrbWZGaWxlbmFtZSUyQyUyMGRldmljZVR5cGUlM0RkZXZpY2VUeXBlJTI5JTBBJTIwJTIwJTIwJTIwbWwua21mV3JpdGVDb25maWclMjhjb25maWdCdWYlMjklMEElMjAlMjAlMjAlMjBtbC5jbG9zZSUwQWV4Y2VwdCUyMGt2bWxpYi5rdm1EaXNrTm90Rm9ybWF0ZWQlM0ElMEElMjAlMjAlMjAlMjBwcmludCUyOCUyMlNEJTIwY2FyZCUyMGlzJTIwbm90JTIwaW5pdGlhbGl6ZWQuJTIyJTI5JTBBJTIwJTIwJTIwJTIwZXhpdCUyODElMjklMEE="][vc_column_text]

Listing 18: Writing binary configuration to SD card.

[/vc_column_text][vc_column_text] To download the configuration in clear text, we do just like we did in the previous post, but write the zip file to the SD card directly through the Windows mount point. [/vc_column_text][vc_code_raket language="python" header="Writing clear text configurations using a zip archive." code="aW1wb3J0JTIwemlwZmlsZSUwQSUyMCUwQSUyMyUyME91ciUyMFNEJTIwY2FyZCUyMGlzJTIwbW91bnRlZCUyMHVuZGVyJTIwRSUzQSUwQWZpbGVuYW1lJTIwJTNEJTIwJTIyRSUzQSU1QyU1Q2NvbmZpZy56aXAlMjIlMEElMEElMjMlMjBDcmVhdGluZyUyMHppcCUyMGFyY2hpdmUlMEF3aXRoJTIwemlwZmlsZS5aaXBGaWxlJTI4ZmlsZW5hbWUlMkMlMjBtb2RlJTNEJTI3dyUyNyUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNvbXByZXNzaW9uJTNEemlwZmlsZS5aSVBfREVGTEFURUQlMjklMjBhcyUyMHppcGYlM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBBZGRpbmclMjBmaWxlcyUyMHRvJTIwemlwJTIwYXJjaGl2ZSUwQSUyMCUyMCUyMCUyMHppcGYud3JpdGUlMjglMjJjb25maWcueG1sJTIyJTI5JTBBJTIwJTIwJTIwJTIwemlwZi53cml0ZSUyOCUyMm15Q2FuR2VuZXJhdG9yLnR4ZSUyMiUyOQ=="][vc_column_text]

Listing 19: Writing clear text configurations using a zip archive.

[/vc_column_text][vc_column_text] If we now look at the contents of our SD card we have the following. [/vc_column_text][vc_column_text]
d:\temp\blog>dir E:
 Volume in drive E has no label.

 Directory of E:\

2016-02-19 07:58 40 308 PARAM.LIF
2016-02-11 14:43 1 073 741 824 LOG00000.KMF
2016-02-11 14:43 1 073 741 824 LOG00001.KMF
2016-02-11 14:43 1 073 741 824 LOG00002.KMF
2016-02-11 14:43 1 073 741 824 LOG00003.KMF
2016-02-11 14:43 1 073 741 824 LOG00004.KMF
2016-02-11 14:43 744 030 208 LOG00005.KMF
2016-02-11 14:43 10 002 432 DATABASE.BIN
2016-02-19 10:10 2 406 config.zip
              9 File(s) 6 122 784 474 bytes
              0 Dir(s) 10 010 435 584 bytes free
[/vc_column_text][vc_header_raket header_type="h3" header="4.3 Read result from SD card"][vc_column_text] When we get the SD card back from the field, we reconnect the SD card to our computer and begin by verifying the LIO data format version on the SD card. [/vc_column_text][vc_code_raket language="python" header="Verify LIO data format on SD card" code="aW1wb3J0JTIwY2FubGliLmt2bWxpYiUyMGFzJTIwa3ZtbGliJTBBJTBBbWwlMjAlM0QlMjBrdm1saWIua3ZtbGliJTI4JTI5JTBBJTBBJTIzJTIwT3VyJTIwU0QlMjBjYXJkJTIwaXMlMjBtb3VudGVkJTIwdW5kZXIlMjBFJTNBJTJDJTIwc28lMjBvdXIlMjBMT0cwMDAwMC5LTUYlMjBjYW4lMEElMjMlMjBiZSUyMG9wZW5lZCUyMGZyb20lMjBoZXJlJTBBZmlsZW5hbWUlMjAlM0QlMjAlMjJFJTNBJTVDJTVDTE9HMDAwMDAuS01GJTIyJTBBJTBBdHJ5JTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwT3BlbiUyMHRoZSUyMFNEJTIwY2FyZCUwQSUyMCUyMCUyMCUyMCUyMyUyMFdlJTIwaGF2ZSUyMGZpcm13YXJlJTIwdmVyc2lvbiUyMDMuMCUyMGluJTIwdGhlJTIwZGV2aWNlJTIwdGhpcyUyMFNEJTIwY2FyZCUyMHdpbGwlMEElMjAlMjAlMjAlMjAlMjMlMjBiZSUyMGluc2VydGVkJTIwaW50byUyQyUyMHRoaXMlMjBtZWFucyUyMHRoYXQlMjB0aGUlMjBGVyUyMGlzJTIwdXNpbmclMjBMaW8lMjBEYXRhJTBBJTIwJTIwJTIwJTIwJTIzJTIwRm9ybWF0JTIwdjUuMCUyMGFuZCUyMHdlJTIwc2hvdWxkJTIwdXNlJTIwa3ZtREVWSUNFX01IWURSQV9FWFQlMjBhcyUwQSUyMCUyMCUyMCUyMCUyMyUyMHRoZSUyMGRldmljZVR5cGUlMEElMjAlMjAlMjAlMjBsaW9EYXRhRm9ybWF0JTIwJTNEJTIwbWwua21mT3BlbkV4JTI4ZmlsZW5hbWUlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBkZXZpY2VUeXBlJTNEa3ZtbGliLmt2bURFVklDRV9NSFlEUkFfRVhUJTI5JTBBJTIwJTIwJTIwJTIwcHJpbnQlMjglMjJMaW8lMjBEYXRhJTIwRm9ybWF0JTIwdiUyNXMlMjIlMjAlMjUlMjBsaW9EYXRhRm9ybWF0JTI5JTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwQ2xvc2UlMjBTRCUyMGNhcmQlMEElMjAlMjAlMjAlMjBtbC5jbG9zZSUyOCUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMFZlcmlmeSUyMHRoYXQlMjB0aGUlMjBMSU8lMjBkYXRhJTIwZm9ybWF0JTIwb2YlMjB0aGUlMjBjYXJkJTIwY29ycmVzcG9uZHMlMjB0byUwQSUyMCUyMCUyMCUyMCUyMyUyMHRoZSUyMGRldmljZSUyMHR5cGUlMjB3ZSUyMHVzZWQlMjB3aGVuJTIwb3BlbmluZyUyMHRoZSUyMGRldmljZSUwQSUyMCUyMCUyMCUyMGlmJTIwbGlvRGF0YUZvcm1hdCUyMCUyMSUzRCUyMCUyNzUuMCUyNyUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4JTIyVW5leHBlY3RlZCUyMExpbyUyMERhdGElMjBGb3JtYXQlM0ElMjIlMkMlMjBsaW9EYXRhRm9ybWF0JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBsaW9EYXRhRm9ybWF0JTIwJTNEJTNEJTIwJTI3My4wJTI3JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjJUaGlzJTIwbG9nJTIwZmlsZSUyMGNhbiUyMGJlJTIwcmVhZCUyMGlmJTIweW91JTIwcmVvcGVuJTIwdGhlJTIyJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIyJTIwZGV2aWNlJTIwYXMlMjBrdm1ERVZJQ0VfTUhZRFJBLiUyMiUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGV4aXQlMjgxJTI5JTBBZXhjZXB0JTIwa3ZtbGliLmt2bURpc2tOb3RGb3JtYXRlZCUzQSUwQSUyMCUyMCUyMCUyMHByaW50JTI4JTIyU0QlMjBjYXJkJTIwaXMlMjBub3QlMjBpbml0aWFsaXplZC4uLiUyMiUyOSUwQSUyMCUyMCUyMCUyMGV4aXQlMjgxJTI5"][vc_column_text]

Listing 20: Verify LIO data format on SD card.

[/vc_column_text][vc_column_text] The next step is to read out the logged data. The only difference from our previous post using a connected device is opening the SD card instead of the device. Go back to the previous post for a more detailed description of what happens here. [/vc_column_text][vc_code_raket language="python" header="Read logged data from SD card and save to .kme50 files." code="aW1wb3J0JTIwZ2xvYiUwQWltcG9ydCUyMG9zJTBBJTBBaW1wb3J0JTIwY2FubGliLmt2bWxpYiUyMGFzJTIwa3ZtbGliJTBBJTBBbWwlMjAlM0QlMjBrdm1saWIua3ZtbGliJTI4JTI5JTBBJTBBJTIzJTIwT3VyJTIwU0QlMjBjYXJkJTIwaXMlMjBtb3VudGVkJTIwdW5kZXIlMjBFJTNBJTJDJTIwc28lMjBvdXIlMjBMT0cwMDAwMC5LTUYlMjBjYW4lMEElMjMlMjBiZSUyMG9wZW5lZCUyMGZyb20lMjBoZXJlJTBBZmlsZW5hbWUlMjAlM0QlMjAlMjJFJTNBJTVDJTVDTE9HMDAwMDAuS01GJTIyJTBBJTBBJTIzJTIwRGlyZWN0b3J5JTIwdG8lMjBwdXQlMjB0aGUlMjByZXN1bHRpbmclMjBmaWxlcyUyMGluJTBBcmVzdWx0RGlyJTIwJTNEJTIwJTIycmVzdWx0JTIyJTBBJTBBJTIzJTIwTWFrZSUyMHN1cmUlMjB0aGUlMjByZXN1bHQlMjBkaXJlY3RvcnklMjBleGlzdHMlMjBhbmQlMjBpcyUyMGVtcHR5JTBBaWYlMjBvcy5wYXRoLmlzZGlyJTI4cmVzdWx0RGlyJTI5JTNBJTBBJTIwJTIwJTIwJTIwZmlsZXMlMjAlM0QlMjBnbG9iLmdsb2IlMjhvcy5wYXRoLmpvaW4lMjhyZXN1bHREaXIlMkMlMjAlMjIlMkElMjIlMjklMjklMEElMjAlMjAlMjAlMjBmb3IlMjBmJTIwaW4lMjBmaWxlcyUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9zLnJlbW92ZSUyOGYlMjklMEFlbHNlJTNBJTBBJTIwJTIwJTIwJTIwb3MubWtkaXIlMjhyZXN1bHREaXIlMjklMEFvcy5jaGRpciUyOHJlc3VsdERpciUyOSUwQSUwQSUyMyUyME9wZW4lMjB0aGUlMjBTRCUyMGNhcmQlMEElMjMlMjBXZSUyMGhhdmUlMjBlYXJsaWVyJTIwdmVyaWZpZWQlMjB0aGF0JTIwdGhlJTIwU0QlMjBjYXJkJTIwaXMlMjB1c2luZyUyMExpbyUyMERhdGElMjBGb3JtYXQlMjB2NS4wJTBBJTIzJTIwYW5kJTIwd2UlMjBzaG91bGQlMjB1c2UlMjBrdm1ERVZJQ0VfTUhZRFJBX0VYVCUyMGFzJTIwdGhlJTIwZGV2aWNlVHlwZSUwQW1sLmttZk9wZW4lMjhmaWxlbmFtZSUyQyUyMGRldmljZVR5cGUlM0Rrdm1saWIua3ZtREVWSUNFX01IWURSQV9FWFQlMjklMEElMEElMjMlMjBSZWFkJTIwbnVtYmVyJTIwb2YlMjByZWNvcmRlZCUyMGxvZ2ZpbGVzJTBBZmlsZUNvdW50JTIwJTNEJTIwbWwubG9nRmlsZUdldENvdW50JTI4JTI5JTBBcHJpbnQlMjglMjJGb3VuZCUyMCUyNWQlMjBmaWxlJTI1cyUyMG9uJTIwY2FyZCUzQSUyMiUyMCUyNSUyMCUyOGZpbGVDb3VudCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMnMlMjIlMjBpZiUyMGZpbGVDb3VudCUyMCUzRSUyMDElMjBlbHNlJTIwJTIyJTIyJTI5JTI5JTBBJTBBJTIzJTIwTG9vcCUyMHRocm91Z2glMjBhbGwlMjBsb2dmaWxlcyUyMGFuZCUyMHdyaXRlJTIwdGhlaXIlMjBjb250ZW50cyUyMHRvJTIwLmttZTUwJTIwZmlsZXMlMEFmb3IlMjBmaWxlSW5keCUyMGluJTIwcmFuZ2UlMjhmaWxlQ291bnQlMjklM0ElMEElMjAlMjAlMjAlMjBldmVudENvdW50JTIwJTNEJTIwbWwubG9nRmlsZU1vdW50JTI4ZmlsZUluZHglMjklMEElMjAlMjAlMjAlMjBwcmludCUyOCUyMiU1Q3RGaWxlJTIwJTI1M2QlM0ElMjAlMjUxMGQlMjBldmVudHMlMjIlMjAlMjUlMjAlMjhmaWxlSW5keCUyQyUyMGV2ZW50Q291bnQlMjklMjklMEElMjAlMjAlMjAlMjBsb2dFdmVudCUyMCUzRCUyMG1sLmxvZ0ZpbGVSZWFkRXZlbnRMb2dGb3JtYXQlMjglMjklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBUaGUlMjBmaXJzdCUyMGxvZ0V2ZW50JTIwY29udGFpbnMlMjBkZXZpY2UlMjBpbmZvcm1hdGlvbiUwQSUyMCUyMCUyMCUyMG1lbW9FdmVudCUyMCUzRCUyMGxvZ0V2ZW50LmNyZWF0ZU1lbW9FdmVudCUyOCUyOSUwQSUyMCUyMCUyMCUyMHNuJTIwJTNEJTIwbWVtb0V2ZW50LnNlcmlhbE51bWJlciUwQSUyMCUyMCUyMCUyMGVhbl9sbyUyMCUzRCUyMG1lbW9FdmVudC5lYW5MbyUwQSUyMCUyMCUyMCUyMGVhbl9zbiUyMCUzRCUyMCUyMiUyNTA1eC0lMjV4XyUyNWQlMjIlMjAlMjUlMjAlMjglMjhlYW5fbG8lMjAlM0UlM0UlMjA0JTI5JTIwJTI2JTIwMHhmZmZmZiUyQyUyMGVhbl9sbyUyMCUyNiUyMDB4ZiUyQyUyMHNuJTI5JTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwQWRkJTIwRUFOJTIwYW5kJTIwc2VyaWFsJTIwbnVtYmVyJTIwaW5mbyUyMHRvJTIwZmlsZW5hbWUlMEElMjAlMjAlMjAlMjBsb2dmaWxlTmFtZSUyMCUzRCUyMCUyMmxvZ18lMjVzXyUyNWQua21lNTAlMjIlMjAlMjUlMjAlMjhlYW5fc24lMkMlMjBmaWxlSW5keCUyOSUwQSUyMCUyMCUyMCUyMG1sLmttZUNyZWF0ZUZpbGUlMjhsb2dmaWxlTmFtZSUyQyUyMGt2bWxpYi5rdm1GSUxFX0tNRTUwJTI5JTBBJTIwJTIwJTIwJTIwd2hpbGUlMjBsb2dFdmVudCUyMGlzJTIwbm90JTIwTm9uZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMFdyaXRlJTIwZXZlbnQlMjB0byUyMHN0ZG91dCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4bG9nRXZlbnQlMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtbC5rbWVXcml0ZUV2ZW50JTI4bG9nRXZlbnQlMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBSZWFkJTIwbmV4dCUyMGV2ZW50JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbG9nRXZlbnQlMjAlM0QlMjBtbC5sb2dGaWxlUmVhZEV2ZW50TG9nRm9ybWF0JTI4JTI5JTBBJTIwJTIwJTIwJTIwbWwua21lQ2xvc2VGaWxlJTI4JTI5JTBBJTBBJTIzJTIwRGVsZXRlJTIwYWxsJTIwbG9nZmlsZXMlMEFtbC5sb2dGaWxlRGVsZXRlQWxsJTI4JTI5JTBBJTBBJTIzJTIwQ2xvc2UlMjBkZXZpY2UlMEFtbC5jbG9zZSUyOCUyOQ=="][vc_column_text]

Listing 21: Read logged data from SD card and save to .kme50 files.

[/vc_column_text][vc_header_raket header_type="h3" header="4.4 Read configuration from SD card"][vc_column_text] For completeness, the only thing left is to show how to read back our compressed configuration that we placed on the SD card earlier using the Windows mount point. [/vc_column_text][vc_code_raket language="python" header="Copy of all user files from the SD card." code="aW1wb3J0JTIwZ2xvYiUwQWltcG9ydCUyMG9zJTBBaW1wb3J0JTIwc2h1dGlsJTBBJTBBJTIzJTIwT3VyJTIwU0QlMjBjYXJkJTIwaXMlMjBtb3VudGVkJTIwdW5kZXIlMjBFJTNBJTJDJTIwc28lMjBvdXIlMjBMT0cwMDAwMC5LTUYlMjBjYW4lMEElMjMlMjBiZSUyMG9wZW5lZCUyMGZyb20lMjBoZXJlJTBBZmlsZW5hbWUlMjAlM0QlMjAlMjJFJTNBJTVDJTVDTE9HMDAwMDAuS01GJTIyJTBBJTBBZm9yJTIwZmlsZSUyMGluJTIwZ2xvYi5nbG9iJTI4b3MucGF0aC5qb2luJTI4b3MucGF0aC5kaXJuYW1lJTI4ZmlsZW5hbWUlMjklMkMlMjAlMjIlMkElMjIlMjklMjklM0ElMEElMjAlMjAlMjAlMjBpZiUyOG9zLnBhdGguc3BsaXRleHQlMjhmaWxlJTI5JTVCMSU1RC5sb3dlciUyOCUyOSUyMCUzRCUzRCUyMCUyNy5rbWYlMjclMEElMjAlMjAlMjAlMjAlMjAlMjAlMjBvciUyMGZpbGUubG93ZXIlMjglMjklMjAlM0QlM0QlMjAlMjdwYXJhbS5saWYlMjclMEElMjAlMjAlMjAlMjAlMjAlMjAlMjBvciUyMGZpbGUubG93ZXIlMjglMjklMjAlM0QlM0QlMjAlMjdkYXRhYmFzZS5iaW4lMjclMjklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOCUyMlNraXBwaW5nJTIwJTI1cyUyMiUyMCUyNSUyMGZpbGUlMjklMEElMjAlMjAlMjAlMjBlbHNlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjJDb3B5aW5nJTIwJTI1cyUyMiUyMCUyNSUyMGZpbGUlMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzaHV0aWwuY29weSUyOGZpbGUlMkMlMjAlMjIuJTIyJTI5"][vc_column_text]

Listing 22: Copy of all user files from the SD card.

[/vc_column_text][vc_column_text]
Copying E:\\PARAM.LIF
Skipping E:\\LOG00000.KMF
Skipping E:\\LOG00001.KMF
Skipping E:\\LOG00002.KMF
Skipping E:\\LOG00003.KMF
Skipping E:\\LOG00004.KMF
Skipping E:\\LOG00005.KMF
Copying E:\\DATABASE.BIN
Copying E:\\config.zip
[/vc_column_text][vc_column_text] Now everything from this run is placed inside the result directory. [/vc_column_text][vc_column_text]
d:\temp\blog>dir result
 Volume in drive D is HDD
 Volume Serial Number is 26E3-B474

 Directory of d:\temp\blog\result

2016-02-22 16:06     <DIR>          .
2016-02-22 16:06     <DIR>          ..
2016-02-22 16:06              2 406 CONFIG.ZIP
2016-02-22 16:06         10 002 432 DATABASE.BIN
2016-02-22 16:06             40 308 PARAM.LIF
              3 File(s)      10 045 146 bytes
              2 Dir(s)   961 850 183 680 bytes free

d:\temp\blog>More?
[/vc_column_text][vc_column_text] This was all for now, hopefully this blog series has helped you getting to know more about kvmlib and showed what the library can do for you when managing Kvaser logger devices. [/vc_column_text][vc_header_raket header_type="h3" header="Footnotes"][vc_column_text]1 Default installation location form Kvaser Memorator Config Tool is
 C:\Program Files (x86)\Kvaser\MemoratorConfigTool\mhydraformat.exe
2 We only supply the filename for the first of the log file container files, as the rest will follow immediately after this first file on the card.[/vc_column_text][/vc_accordion_tab][/vc_accordion][/vc_column][/vc_row] [post_title] => Configure an SD card using kvmlib [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => configure-an-sd-card-using-kvmlib [to_ping] => [pinged] => [post_modified] => 2022-12-21 23:25:50 [post_modified_gmt] => 2022-12-21 23:25:50 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?post_type=developer_blog&p=11603 [menu_order] => 0 [post_type] => developer_blog [post_mime_type] => [comment_count] => 0 [filter] => raw ) [8] => WP_Post Object ( [ID] => 11599 [post_author] => 14 [post_date] => 2018-09-18 11:00:24 [post_date_gmt] => 2018-09-18 11:00:24 [post_content] => [vc_row][vc_column][vc_column_text]This is the third post in a 4-part series about configuring and reading logged data using a Kvaser Memorator 2nd Generation device through kvmlib:[/vc_column_text][/vc_column][/vc_row][vc_row el_class="indented"][vc_column][vc_column_text]

1 Getting started with kvmlib

2 Adding script and triggers to a configuration 3 Digging deeper into kvmlib 4 Configure an SD card using kvmlib[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]In the first part we showed how to use kvmlib to configure a device and read the logged messages using Python. In this part we will be revisiting the configuring we did in the second part while showing some more things you can do with kvmlib, including saving and restoring your configuration on the Kvaser Memorator's SD-card. There's also a blog series about Setting Up CANlib for Visual Studio which might be useful.[/vc_column_text][vc_header_raket header_type="h3" header="3.1 Opening the device"][vc_column_text]Opening a device using kvmlib requires knowledge about more than just the EAN number. When connecting to a device using the Python canlib Device module, the code internally looks though all devices connected to our computer and returns the first one that match our search criteria, in our case the EAN number.[/vc_column_text][vc_code_raket language="python" header="Printing information about a connected Kvaser device." code="JTIzJTIwMDVfcmVwb3J0X2RldmljZS5weSUwQWZyb20lMjBjYW5saWIlMjBpbXBvcnQlMjBEZXZpY2UlMkMlMjBFQU4lMEElMEElMEElMjMlMjBDcmVhdGUlMjBhbiUyMEVBTiUyMG9iamVjdCUyMGZvciUyMG91ciUyMGRldmljZSUyMGJ5JTIwc3BlY2lmeWluZyUyMHRoZSUyMGxhc3QlMjBzaXglMjBudW1iZXJzJTBBZWFuJTIwJTNEJTIwRUFOJTI4JTI3MDA4MTktOSUyNyUyOSUwQXByaW50JTI4JTI3RnVsbCUyMEVBTiUzQSUyMCU3QiU3RCU1Q24lMjcuZm9ybWF0JTI4ZWFuJTI5JTI5JTBBJTBBJTIzJTIwRmluZCUyMG91ciUyMEt2YXNlciUyME1lbW9yYXRvciUyMFBybyUyMDJ4SFMlMjB3aXRoJTIwRUFOJTIwMDA4MTktOSUwQWRldiUyMCUzRCUyMERldmljZS5maW5kJTI4ZWFuJTNEZWFuJTJDJTIwc2VyaWFsJTNETm9uZSUyOSUwQSUwQSUyMyUyMFByaW50JTIwaW5mb3JtYXRpb24lMjBhYm91dCUyMHRoZSUyMGRldmljZSUwQXByaW50JTI4ZGV2LnByb2JlX2luZm8lMjglMjklMjk="][vc_code_raket code="RnVsbCUyMEVBTiUzQSUyMDczLTMwMTMwLTAwODE5LTklMEElMEFDQU5saWIlMjBDaGFubmVsJTNBJTIwMCUwQUNhcmQlMjBOdW1iZXIlMjAlMjAlMjAlM0ElMjAwJTBBRGV2aWNlJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNBJTIwS3Zhc2VyJTIwTWVtb3JhdG9yJTIwUHJvJTIwMnhIUyUyMHYyJTIwJTI4Y2hhbm5lbCUyMDAlMjklMEFEcml2ZXIlMjBOYW1lJTIwJTIwJTIwJTNBJTIwa2NhbnkwYSUwQUVBTiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQSUyMDczLTMwMTMwLTAwODE5LTklMEFGaXJtd2FyZSUyMCUyMCUyMCUyMCUyMCUyMCUzQSUyMDMuMTEuMC41NTclMEFTZXJpYWwlMjBOdW1iZXIlMjAlM0ElMjAxMTU3Mw=="][vc_raw_html]JTNDU3BhbiUyMGlkJTNEJTIyZm5yLjElMjIlM0UlM0MlMkZzcGFuJTNFJTNDYnIlM0U=[/vc_raw_html][vc_column_text]

Listing 8: Printing information about a connected Kvaser device.

[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][vc_column_text]Here we note that our device is connected to CANlib channel 0 , the CANlib channel number is used when opening the device from CANlib.1 If we had opened a second device, those numbers would be different on the second device. When opening our device using kvmlib, beside specifying the CANlib channel, we may also specify a device type. The device type is used to decide what version of LIO data format the device is using.2 Firmware v3.0 uses device type kvmDEVICE_MHYDRA_EXT, which is the default in v1.7 of the python canlib module. The last argument to kvmlib.openDevice is mount, which indicates whether the Memorator log area should be mounted or not (default is False). Let us take a look on how to set the device clock using kvmlib.[/vc_column_text][vc_code_raket language="python" header="Setting the real time clock of a Kvaser device using kvmlib" code="JTIzJTIwMDZfc2V0X2Nsb2NrLnB5JTBBZnJvbSUyMGNhbmxpYiUyMGltcG9ydCUyMGt2bWxpYiUwQWltcG9ydCUyMGRhdGV0aW1lJTBBJTBBJTBBJTIzJTIwV2UlMjBrbm93JTIwdGhhdCUyMG91ciUyMGRldmljZSUyMGlzJTIwY29ubmVjdGVkJTIwdG8lMjBDQU5saWIlMjBjaGFubmVsJTIwbnVtYmVyJTIwMCUwQWNoYW5uZWwlMjAlM0QlMjAwJTBBJTBBJTIzJTIwV2UlMjBhbHNvJTIwa25vdyUyMHRoYXQlMjBvdXIlMjBkZXZpY2UlMjBpcyUyMG9mJTIwdHlwZSUyMGt2bURFVklDRV9NSFlEUkFfRVhUJTBBd2l0aCUyMGt2bWxpYi5vcGVuRGV2aWNlJTI4JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY2hhbm5lbF9udW1iZXIlM0RjaGFubmVsJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZGV2aWNlX3R5cGUlM0Rrdm1saWIuRGV2aWNlLk1IWURSQV9FWFQlMjklMjBhcyUyMGRldmljZSUzQSUwQSUyMCUyMCUyMCUyMCUyMyUyMEhhdmluZyUyMG9idGFpbmVkJTIwdGhlJTIwZGV2aWNlJTJDJTIwd2UlMjBjYW4lMjBub3clMjBlLmcuJTIwY2hlY2slMjB0aGUlMEElMjAlMjAlMjAlMjAlMjMlMjBzZXJpYWwlMjBudW1iZXIlMEElMjAlMjAlMjAlMjBwcmludCUyOCUyMlNlcmlhbCUyMG51bWJlciUzQSUyMiUyQyUyMGRldmljZS5zZXJpYWxfbnVtYmVyJTI5JTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwUmVhZCUyMHRoZSUyMGRldmljZSUyMHRpbWUlMEElMjAlMjAlMjAlMjBwcmludCUyOCUyMkN1cnJlbnQlMjBkZXZpY2UlMjB0aW1lJTIwaXMlMjIlMkMlMjBkZXZpY2UucnRjJTI5JTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwU2V0JTIwdGhlJTIwcmVhbCUyMHRpbWUlMjBjbG9jayUyMG9mJTIwdGhlJTIwZGV2aWNlJTBBJTIwJTIwJTIwJTIwZGV2aWNlLnJ0YyUyMCUzRCUyMGRhdGV0aW1lLmRhdGV0aW1lLm5vdyUyOCUyOSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMFJlYWQlMjB0aGUlMjBkZXZpY2UlMjB0aW1lJTBBJTIwJTIwJTIwJTIwcHJpbnQlMjglMjJOZXclMjBkZXZpY2UlMjB0aW1lJTIwaXMlMjIlMkMlMjBkZXZpY2UucnRjJTI5"][vc_column_text]

Listing 9: Setting the real time clock of a Kvaser device using kvmlib.

[/vc_column_text][vc_code_raket header="Setting the real time clock of a Kvaser device using kvmlib" code="U2VyaWFsJTIwbnVtYmVyJTNBJTIwMTE1NzMlMEFDdXJyZW50JTIwZGV2aWNlJTIwdGltZSUyMGlzJTIwMjAxOC0wOC0xMCUyMDA3JTNBNDclM0E0NiUwQU5ldyUyMGRldmljZSUyMHRpbWUlMjBpcyUyMDIwMTgtMDgtMTAlMjAwNyUzQTUyJTNBNDg="][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][vc_column_text]

Running the above code gives the following output:

[/vc_column_text][vc_header_raket header_type="h3" header="3.2 Initialize the SD card"][vc_column_text]As stated earlier, using the correct device type when opening a device is very important. If we open a device using the wrong LIO data format (as specified using the device type), we will not be able to see any log messages during reading. Using the correct device type when initializing the SD card is even more important since the firmware will not be able to access an SD card that has been initialized using an incorrect LIO data format. In order to initialize the SD card, we first open the device using kvmlib.openDevice where we need to supply our device type, which on a Kvaser Memorator 2nd Generation device (running on fw v3.0) is kvmDEVICE_MHYDRA_EXT 3. Then we initialize the SD card by calling format_disk. Most of the SD card is allocated for recording log messages during initialization, but there are two sizes that we can affect by passing two different arguments to the initialization command. The first argument is specifying “space to reserve for user files”, which means that this amount of the SD card will be free for use by the user. We could have a tprogram running in the device that generates text files, or we may have other user files that we would like to copy to the SD card. The second argument affects the size of a file called DATABASE.BIN which is used by the Kvaser Memorator Config Tool and may contain the configuration and database files that a user optionally can save to the SD card. After mounting the Memorator’s newly formatted log area, we check that we got the expected LIO data format, and thus verify that we supplied the correct device type.
[/vc_column_text][vc_code_raket language="python" code="JTIzJTIwMDdfdmVyaWZ5X2xpb19pbml0X3NkY2FyZC5weSUwQWZyb20lMjBjYW5saWIlMjBpbXBvcnQlMjBrdm1saWIlMEFmcm9tJTIwY2FubGliJTIwaW1wb3J0JTIwVmVyc2lvbk51bWJlciUwQSUwQSUyMyUyMFdlJTIwc2F3JTIwZWFybGllciUyMHRoYXQlMjBvdXIlMjBkZXZpY2UlMjBpcyUyMGNvbm5lY3RlZCUyMHRvJTIwQ0FObGliJTIwY2hhbm5lbCUyMG51bWJlciUyMDAlMEFjaGFubmVsJTIwJTNEJTIwMCUwQSUwQSUyMyUyMFdlJTIwYWxzbyUyMGtub3clMjB0aGF0JTIwb3VyJTIwZGV2aWNlJTIwaXMlMjBvZiUyMHR5cGUlMjBrdm1ERVZJQ0VfTUhZRFJBX0VYVCUwQWRldmljZV90eXBlJTIwJTNEJTIwa3ZtbGliLmt2bURFVklDRV9NSFlEUkFfRVhUJTBBJTBBJTIzJTIwT3BlbiUyMHRoZSUyMGRldmljZSUwQXdpdGglMjBrdm1saWIub3BlbkRldmljZSUyOGNoYW5uZWxfbnVtYmVyJTNEY2hhbm5lbCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGRldmljZV90eXBlJTNEZGV2aWNlX3R5cGUlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtb3VudCUzREZhbHNlJTI5JTIwYXMlMjBtZW1vcmF0b3IlM0ElMEElMEElMjAlMjAlMjAlMjAlMjMlMjBGb3JtYXQlMjB0aGUlMjBTRCUyMENhcmQlMjBhbmQlMjByZXNlcnZlJTIwMTAlMjBNQiUyMGZvciUyMGNvbmZpZ3VyYXRpb24lMjBmaWxlcyUwQSUyMCUyMCUyMCUyMCUyMyUyMCUyOGkuZS4lMjBEQVRBQkFTRS5CSU4lMjklMjBhbmQlMjAxMDAwJTIwTUIlMjBmb3IlMjBvdXIlMjBvd24lMjBmaWxlcy4lMEElMjAlMjAlMjAlMjBwcmludCUyOCUyN0luaXRpYWxpemluZyUyMFNEJTIwY2FyZC4uLiUyNyUyOSUwQSUyMCUyMCUyMCUyMG1lbW9yYXRvci5mb3JtYXRfZGlzayUyOHJlc2VydmVkX3NwYWNlJTNEMTAwMDAlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBkYXRhYmFzZV9zcGFjZSUzRDEwJTI5JTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwTW91bnQlMjB0aGUlMjBsb2clMjBhcmVhJTBBJTIwJTIwJTIwJTIwbWVtb3JhdG9yLm1vdW50JTI4JTI5JTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwUmVhZCUyMExJTyUyMGRhdGElMjBmb3JtYXQlMjB2ZXJzaW9uJTBBJTIwJTIwJTIwJTIwbGlvX2RhdGFfZm9ybWF0JTIwJTNEJTIwbWVtb3JhdG9yLmxvZy5sZGZfdmVyc2lvbiUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMFZlcmlmeSUyMHRoYXQlMjB0aGUlMjBMSU8lMjBkYXRhJTIwZm9ybWF0JTIwb2YlMjB0aGUlMjBjYXJkJTIwY29ycmVzcG9uZHMlMjB0byUwQSUyMCUyMCUyMCUyMCUyMyUyMHRoZSUyMGRldmljZSUyMHR5cGUlMjB3ZSUyMHVzZWQlMjB3aGVuJTIwb3BlbmluZyUyMHRoZSUyMGRldmljZSUwQSUyMCUyMCUyMCUyMGlmJTIwbGlvX2RhdGFfZm9ybWF0JTIwJTIxJTNEJTIwVmVyc2lvbk51bWJlciUyOG1ham9yJTNENSUyQyUyMG1pbm9yJTNEMCUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwbGlvX2RhdGFfZm9ybWF0JTIwJTNEJTNEJTIwVmVyc2lvbk51bWJlciUyOG1ham9yJTNEMyUyQyUyMG1pbm9yJTNEMCUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJhaXNlJTIwVmFsdWVFcnJvciUyOCUyN1RoaXMlMjBsb2clMjBmaWxlJTIwY2FuJTIwYmUlMjByZWFkJTIwaWYlMjB5b3UlMjByZW9wZW4lMjB0aGUlMjclMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjclMjBkZXZpY2UlMjBhcyUyMGt2bURFVklDRV9NSFlEUkEuJTI3JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmFpc2UlMjBWYWx1ZUVycm9yJTI4JTI3VW5leHBlY3RlZCUyMExpbyUyMERhdGElMjBGb3JtYXQlM0ElMjAlMjclMjAlMkIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdHIlMjhsaW9fZGF0YV9mb3JtYXQlMjklMjklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBSZXBvcnQlMjBpbmZvJTIwYWJvdXQlMjB0aGUlMjBkaXNrJTIwYXJlYSUyMGFsbG9jYXRlZCUyMGZvciUyMGxvZ2dpbmclMEElMjAlMjAlMjAlMjBwcmludCUyOCUyN0Rpc2slMjBzaXplJTNBJTIwJTdCZGlzayUzQS4wZiU3RCUyME1CJTVDbiUyNyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyNyUyMCUyMExvZyUyMHNpemUlM0ElMjAlN0Jsb2clM0EuMGYlN0QlMjBNQi4lMjBVc2VkJTNBJTIwJTdCdXNlZCUzQS4wZiU3RCUyME1CJTI3LiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvcm1hdCUyOGRpc2slM0RtZW1vcmF0b3IuZGlza19zaXplJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbG9nJTNEbWVtb3JhdG9yLmRpc2tfdXNhZ2UudG90YWwlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB1c2VkJTNEbWVtb3JhdG9yLmRpc2tfdXNhZ2UudXNlZCUyOSUyOQ=="][vc_column_text]

Listing 10: Verify LIO data format and initialize disk of a Kvaser device.

[/vc_column_text][vc_code_raket code="SW5pdGlhbGl6aW5nJTIwU0QlMjBjYXJkLi4uJTBBRGlzayUyMHNpemUlM0ElMjAxNTkzMiUyME1CJTBBJTIwJTIwTG9nJTIwc2l6ZSUzQSUyMDU4OTUlMjBNQi4lMjBVc2VkJTNBJTIwMCUyME1C"][vc_column_text]Our Kvaser Memorator device has a 16 GB SD card, and when we now reserved 10 MB for DATABASE.BIN and 10 GB as free space we are left with 5895 MB for logging data. Since we have just initialized the SD card, we also have 0 MB (used) logged data. The device and it’s SD card is now initialized and ready to be configured.[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][vc_header_raket header_type="h3" header="3.3 Save configuration"][vc_column_text]To save the configuration to the device’s SD-card, we convert the validated XML configuration to a binary configuration and download this binary configuration to the device (just as we did in the first post of this blog series).[/vc_column_text][vc_code_raket language="python" header="Converting and downloading the configuration to a Kvaser device." code="JTIzJTIwMDhfc2F2ZV9jb25maWcucHklMEFmcm9tJTIwY2FubGliJTIwaW1wb3J0JTIwa3ZhbWVtb2xpYnhtbCUwQWZyb20lMjBjYW5saWIlMjBpbXBvcnQlMjBrdm1saWIlMEElMEElMEElMjMlMjBXZSUyMHNhdyUyMGVhcmxpZXIlMjB0aGF0JTIwb3VyJTIwZGV2aWNlJTIwaXMlMjBjb25uZWN0ZWQlMjB0byUyMENBTmxpYiUyMGNoYW5uZWwlMjBudW1iZXIlMjAwJTBBY2hhbm5lbCUyMCUzRCUyMDAlMEElMjMlMjBSZWFkJTIwaW4lMjB0aGUlMjBYTUwlMjBjb25maWd1cmF0aW9uJTIwZmlsZSUwQXdpdGglMjBvcGVuJTI4JTIyY29uZmlnLnhtbCUyMiUyQyUyMCUyN3IlMjclMjklMjBhcyUyMG15ZmlsZSUzQSUwQSUyMCUyMCUyMCUyMHByaW50JTI4JTI3UmVhZGluZyUyMHhtbCUyNyUyOSUwQSUyMCUyMCUyMCUyMGNvbmZpZ194bWwlMjAlM0QlMjBteWZpbGUucmVhZCUyOCUyOSUwQSUwQSUyMyUyMENvbnZlcnQlMjB0aGUlMjBYTUwlMjBjb25maWd1cmF0aW9uJTIwdG8lMjBhJTIwYmluYXJ5JTIwY29uZmlndXJhdGlvbiUwQWNvbmZpZ19saWYlMjAlM0QlMjBrdmFtZW1vbGlieG1sLmt2YVhtbFRvQnVmZmVyJTI4Y29uZmlnX3htbCUyOSUwQSUwQSUyMyUyME9wZW4lMjB0aGUlMjBtZW1vcmF0b3IlMjBkZXZpY2UlMjBhbmQlMjB3cml0ZSUyMHRoZSUyMGNvbmZpZ3VyYXRpb24lMEElMjMlMjBEZXZpY2UlMjB0eXBlJTIwa3ZtREVWSUNFX01IWURSQV9FWFQlMjBpcyUyMGRlZmF1bHQlMEF3aXRoJTIwa3ZtbGliLm9wZW5EZXZpY2UlMjhjaGFubmVsX251bWJlciUzRGNoYW5uZWwlMjklMjBhcyUyMG1lbW9yYXRvciUzQSUwQSUyMCUyMCUyMCUyMHByaW50JTI4JTI3V3JpdGluZyUyMGNvbmZpZyUyNyUyOSUwQSUyMCUyMCUyMCUyMG1lbW9yYXRvci53cml0ZV9jb25maWclMjhjb25maWdfbGlmJTI5"][vc_column_text]

Listing 11: Converting and downloading the configuration to a Kvaser device.

[/vc_column_text][vc_column_text]In order to later be able to retrieve the configuration in clear text, we create a zip file (config.zip) of the files we have used and download onto the device.4 Since we earlier used the argument -addsrc when we compiled the t program5, we only need the compiled .txe file and our XML configuration. If we had used any databases, we would add those to the zip archive as well.[/vc_column_text][vc_code_raket language="python" header="Downloading clear text configurations using a zip archive." code="JTIzJTIwMDlfY29weV9maWxlc190b19kZXZpY2UucHklMEFpbXBvcnQlMjB6aXBmaWxlJTBBZnJvbSUyMGNhbmxpYiUyMGltcG9ydCUyMGNhbmxpYiUwQSUwQSUyMyUyMENyZWF0ZSUyMFppcCUyMGFyY2hpdmUlMEF3aXRoJTIwemlwZmlsZS5aaXBGaWxlJTI4JTIyY29uZmlnLnppcCUyMiUyQyUyMG1vZGUlM0QlMjd3JTI3JTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY29tcHJlc3Npb24lM0R6aXBmaWxlLlpJUF9ERUZMQVRFRCUyOSUyMGFzJTIwemlwZiUzQSUwQSUyMCUyMCUyMCUyMCUyMyUyMEFkZGluZyUyMGZpbGVzJTIwdG8lMjB6aXAlMjBhcmNoaXZlJTBBJTIwJTIwJTIwJTIwemlwZi53cml0ZSUyOCUyMmNvbmZpZy54bWwlMjIlMjklMEElMjAlMjAlMjAlMjB6aXBmLndyaXRlJTI4JTIybXlDYW5HZW5lcmF0b3IudHhlJTIyJTI5JTBBJTBBJTIzJTIwV2UlMjBrbm93JTIwdGhhdCUyMG91ciUyMGRldmljZSUyMHdhcyUyMGNvbm5lY3RlZCUyMHRvJTIwQ0FObGliJTIwY2hhbm5lbCUyMG51bWJlciUyMDAlMEFjaGFubmVsJTIwJTNEJTIwMCUwQSUwQSUyMyUyME9wZW4lMjB0aGUlMjBkZXZpY2UlMjBhbmQlMjB3cml0ZSUyMHRoZSUyMHppcCUyMGFyY2hpdmUlMEF3aXRoJTIwY2FubGliLm9wZW5DaGFubmVsJTI4Y2hhbm5lbCUzRGNoYW5uZWwlMjklMjBhcyUyMGNoJTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwU2luY2UlMjB0aGUlMjBTRCUyMGNhcmQlMjBpcyUyMGZvcm1hdGVkJTIwdXNpbmclMjBGQVQlMkMlMjB3ZSUyMHNob3VsZCUyMHVzZSUwQSUyMCUyMCUyMCUyMCUyMyUyMGElMjA4LjMlMjBmb3JtYXRlZCUyMGZpbGVuYW1lJTIwYXMlMjB0aGUlMjB0YXJnZXQlMjBmaWxlbmFtZSUwQSUyMCUyMCUyMCUyMGNoLmZpbGVDb3B5VG9EZXZpY2UlMjglMjJjb25maWcuemlwJTIyJTJDJTIwJTIyY29uZmlnLnppcCUyMiUyOQ=="][vc_column_text]

Listing 12: Downloading clear text configurations using a zip archive.

[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][vc_header_raket header_type="h3" header="3.4 Read result and save to file"][vc_column_text]After the device has been out in the field (i.e. we have applied power through the CAN connector and let the script run), we can once again connect our device to our computer and read out the logged data.6 In order to save the data for the future, we now write the data to a file using the kme50 format. This format can later be converted to a number of formats using the converter that is included in the Kvaser Memorator Config Tool. The first entry in all log files contain information about the logged device. We take advantage of this here and place part of the EAN and serial number in the name of the resulting .kme50 files. When all log files have been read from the device, we delete the log files on the device in order to be ready for a new logging run (reusing the same configuration).[/vc_column_text][vc_code_raket language="python" header="Read logged data and save to .kme50 files." code="JTIzJTIwMTBfcmVhZF9sb2dnZWRfZGF0YS5weSUwQWltcG9ydCUyMGdsb2IlMEFpbXBvcnQlMjBvcyUwQSUwQWZyb20lMjBjYW5saWIlMjBpbXBvcnQlMjBFQU4lMkMlMjBWZXJzaW9uTnVtYmVyJTBBZnJvbSUyMGNhbmxpYiUyMGltcG9ydCUyMGt2bWxpYiUwQSUwQSUyMyUyMFdlJTIwc2F3JTIwZWFybGllciUyMHRoYXQlMjBvdXIlMjBkZXZpY2UlMjBpcyUyMGNvbm5lY3RlZCUyMHRvJTIwQ0FObGliJTIwY2hhbm5lbCUyMG51bWJlciUyMDAlMEFjaGFubmVsJTIwJTNEJTIwMCUwQSUwQSUyMyUyMERpcmVjdG9yeSUyMHRvJTIwcHV0JTIwdGhlJTIwcmVzdWx0aW5nJTIwZmlsZXMlMjBpbiUwQXJlc3VsdERpciUyMCUzRCUyMCUyMnJlc3VsdCUyMiUwQSUwQSUyMyUyME1ha2UlMjBzdXJlJTIwdGhlJTIwcmVzdWx0JTIwZGlyZWN0b3J5JTIwZXhpc3RzJTIwYW5kJTIwaXMlMjBlbXB0eSUwQWlmJTIwb3MucGF0aC5pc2RpciUyOHJlc3VsdERpciUyOSUzQSUwQSUyMCUyMCUyMCUyMGZpbGVzJTIwJTNEJTIwZ2xvYi5nbG9iJTI4b3MucGF0aC5qb2luJTI4cmVzdWx0RGlyJTJDJTIwJTIyJTJBJTIyJTI5JTI5JTBBJTIwJTIwJTIwJTIwZm9yJTIwZiUyMGluJTIwZmlsZXMlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvcy5yZW1vdmUlMjhmJTI5JTBBZWxzZSUzQSUwQSUyMCUyMCUyMCUyMG9zLm1rZGlyJTI4cmVzdWx0RGlyJTI5JTBBb3MuY2hkaXIlMjhyZXN1bHREaXIlMjklMEElMEElMjMlMjBPcGVuJTIwdGhlJTIwZGV2aWNlJTIwYW5kJTIwbW91bnQlMjB0aGUlMjBsb2clMjBhcmVhJTBBJTIzJTIwRGV2aWNlJTIwdHlwZSUyMGt2bURFVklDRV9NSFlEUkFfRVhUJTIwaXMlMjBkZWZhdWx0JTBBJTIzJTIwTm90ZSUyMHRoYXQlMjBvcGVuRGV2aWNlJTI4JTI5JTIwbWF5JTIwcmFpc2UlMjBLdm1EaXNrTm90Rm9ybWF0ZWQlMEF3aXRoJTIwa3ZtbGliLm9wZW5EZXZpY2UlMjhjaGFubmVsX251bWJlciUzRGNoYW5uZWwlMkMlMjBtb3VudCUzRFRydWUlMjklMjBhcyUyMG1lbW9yYXRvciUzQSUwQSUyMCUyMCUyMCUyMGxpb19kYXRhX2Zvcm1hdCUyMCUzRCUyMG1lbW9yYXRvci5sb2cubGRmX3ZlcnNpb24lMEElMjAlMjAlMjAlMjAlMjMlMjBWZXJpZnklMjB0aGF0JTIwdGhlJTIwTElPJTIwZGF0YSUyMGZvcm1hdCUyMG9mJTIwdGhlJTIwY2FyZCUyMGNvcnJlc3BvbmRzJTIwdG8lMEElMjAlMjAlMjAlMjAlMjMlMjB0aGUlMjBkZXZpY2UlMjB0eXBlJTIwd2UlMjB1c2VkJTIwd2hlbiUyMG9wZW5pbmclMjB0aGUlMjBkZXZpY2UlMEElMjAlMjAlMjAlMjBpZiUyMGxpb19kYXRhX2Zvcm1hdCUyMCUyMSUzRCUyMFZlcnNpb25OdW1iZXIlMjhtYWpvciUzRDUlMkMlMjBtaW5vciUzRDAlMjklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMGxpb19kYXRhX2Zvcm1hdCUyMCUzRCUzRCUyMFZlcnNpb25OdW1iZXIlMjhtYWpvciUzRDMlMkMlMjBtaW5vciUzRDAlMjklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByYWlzZSUyMFZhbHVlRXJyb3IlMjglMjdUaGlzJTIwbG9nJTIwZmlsZSUyMGNhbiUyMGJlJTIwcmVhZCUyMGlmJTIweW91JTIwcmVvcGVuJTIwdGhlJTI3JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTI3JTIwZGV2aWNlJTIwYXMlMjBrdm1ERVZJQ0VfTUhZRFJBLiUyNyUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJhaXNlJTIwVmFsdWVFcnJvciUyOCUyN1VuZXhwZWN0ZWQlMjBMaW8lMjBEYXRhJTIwRm9ybWF0JTNBJTIwJTI3JTIwJTJCJTIwc3RyJTI4bGlvX2RhdGFfZm9ybWF0JTI5JTI5JTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwUmVhZCUyMG51bWJlciUyMG9mJTIwcmVjb3JkZWQlMjBsb2dmaWxlcyUwQSUyMCUyMCUyMCUyMG51bV9sb2dfZmlsZXMlMjAlM0QlMjBsZW4lMjhtZW1vcmF0b3IubG9nJTI5JTBBJTIwJTIwJTIwJTIwcHJpbnQlMjglMjJGb3VuZCUyMCU3Qm51bSU3RCUyMGZpbGUlMjhzJTI5JTIwb24lMjBjYXJkJTNBJTIwJTIyLmZvcm1hdCUyOG51bSUzRG51bV9sb2dfZmlsZXMlMjklMjklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBMb29wJTIwdGhyb3VnaCUyMGFsbCUyMGxvZ2ZpbGVzJTIwYW5kJTIwd3JpdGUlMjB0aGVpciUyMGNvbnRlbnRzJTIwdG8lMjAua21lNTAlMjBmaWxlcyUwQSUyMCUyMCUyMCUyMGZvciUyMGklMkMlMjBsb2dfZmlsZSUyMGluJTIwZW51bWVyYXRlJTI4bWVtb3JhdG9yLmxvZyUyOSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4JTIyJTVDbiUzRCUzRCUzRCUzRCUyMEZpbGUlMjAlN0JpbmRleCU3RCUzQSUyMCU3QnN0YXJ0JTdEJTIwLSUyMCU3QmVuZCU3RCUyQyUyMGFwcHJveCUyMCU3Qm51bSU3RCUyMGV2ZW50cyUyMi4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3JtYXQlMjhpbmRleCUzRGklMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdGFydCUzRGxvZ19maWxlLnN0YXJ0X3RpbWUlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmQlM0Rsb2dfZmlsZS5lbmRfdGltZSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bSUzRGxvZ19maWxlLmV2ZW50X2NvdW50X2VzdGltYXRpb24lMjglMjklMjklMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBUaGUlMjBmaXJzdCUyMGxvZ0V2ZW50JTIwY29udGFpbnMlMjBkZXZpY2UlMjBpbmZvcm1hdGlvbiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGV2ZW50X2l0ZXJhdG9yJTIwJTNEJTIwaXRlciUyOGxvZ19maWxlJTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZmlyc3RfZXZlbnQlMjAlM0QlMjBuZXh0JTI4ZXZlbnRfaXRlcmF0b3IlMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlYW4lMjAlM0QlMjBFQU4uZnJvbV9oaWxvJTI4JTVCZmlyc3RfZXZlbnQuZWFuSGklMkMlMjBmaXJzdF9ldmVudC5lYW5MbyU1RCUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNlcmlhbCUyMCUzRCUyMGZpcnN0X2V2ZW50LnNlcmlhbE51bWJlciUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMEFkZCUyMEVBTiUyMGFuZCUyMHNlcmlhbCUyMG51bWJlciUyMGluZm8lMjB0byUyMGZpbGVuYW1lJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbG9nZmlsZV9uYW1lJTIwJTNEJTIwJTI4JTI3bG9nXyU3QmVhbiU3RF8lN0JzbiU3RF8lN0JpbmRleCUzQTAzJTdELmttZTUwJTI3LiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvcm1hdCUyOGVhbiUzRHN0ciUyOGVhbiUyOSUyQyUyMHNuJTNEc2VyaWFsJTJDJTIwaW5kZXglM0RpJTI5JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjdTYXZpbmclMjB0byUzQSUyNyUyQyUyMGxvZ2ZpbGVfbmFtZSUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHdpdGglMjBrdm1saWIuY3JlYXRlS21lJTI4bG9nZmlsZV9uYW1lJTI5JTIwYXMlMjBrbWUlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOGZpcnN0X2V2ZW50JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwa21lLndyaXRlX2V2ZW50JTI4Zmlyc3RfZXZlbnQlMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjBldmVudCUyMGluJTIwZXZlbnRfaXRlcmF0b3IlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBXcml0ZSUyMGV2ZW50JTIwdG8lMjBzdGRvdXQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOGV2ZW50JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwa21lLndyaXRlX2V2ZW50JTI4ZXZlbnQlMjklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBEZWxldGUlMjBhbGwlMjBsb2dmaWxlcyUwQSUyMCUyMCUyMCUyMCUyMyUyMG1lbW9yYXRvci5sb2cuZGVsZXRlX2FsbCUyOCUyOQ=="][vc_column_text]

Listing 13: Read logged data and save to .kme50 files.

[/vc_column_text][vc_column_text]

Running the above code we can see that six messages from each channel turns up inside the log.

[/vc_column_text][vc_code_raket header="Read logged data and save to .kme50 files." code="Rm91bmQlMjAxJTIwZmlsZSUyMG9uJTIwY2FyZCUzQSUyMCUwQSUwQSUzRCUzRCUzRCUzRCUyMEZpbGUlMjAwJTNBJTIwMjAxOC0wOC0wOSUyMDE1JTNBMTklM0E0NSUyMC0lMjAyMDE4LTA4LTA5JTIwMTUlM0ExOSUzQTUxJTJDJTIwYXBwcm94JTIwMjAlMjBldmVudHMlMEFTYXZpbmclMjB0byUzQSUyMGxvZ183My0zMDEzMC0wMDgxOS05XzExNTczXzAwMC5rbWU1MCUwQSUyQXQlM0ElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAtJTIwRUFOJTNBNzMtMzAxMzAtMDA4MTktOSUyMCUyMHMlMkZuJTNBMTE1NzMlMjAlMjBGVyUzQXYzLjExLjU1NyUyMCUyMExJTyUzQXY1LjAlMEElMjB0JTNBJTIwJTIwJTIwMi44MjQ3NDYxMTIlMjAlMjBEYXRlVGltZSUzQSUyMDIwMTgtMDgtMDklMjAxNSUzQTE5JTNBNDUlMEElMjB0JTNBJTIwJTIwJTIwMi44MjQ3NDYxMTIlMjBMb2clMjBUcmlnZ2VyJTIwRXZlbnQlMjAlMjh0eXBlJTNBJTIwMHgyJTJDJTIwdHJpZ25vJTNBJTIwMHgwMSUyQyUyMHByZS10cmlnZ2VyJTNBJTIwMCUyQyUyMHBvc3QtdHJpZ2dlciUzQSUyMDAlMjklMEElMEElMjB0JTNBJTIwJTIwJTIwMi44MjQ3NDYxMTIlMjAlMjBjaCUzQTElMjBmJTNBJTIwJTIwJTIwJTIwMiUyMGlkJTNBJTIwJTIwJTIwMyUyMGRsYyUzQSUyMDglMjBkJTNBMTIlMjAyMSUyMDEzJTIwMzElMjAyMiUyMDM0JTIwNDElMjAxNSUwQSUyMHQlM0ElMjAlMjAlMjAyLjgyNDc0NjEzNyUyMExvZyUyMFRyaWdnZXIlMjBFdmVudCUyMCUyOHR5cGUlM0ElMjAweDIlMkMlMjB0cmlnbm8lM0ElMjAweDAxJTJDJTIwcHJlLXRyaWdnZXIlM0ElMjAwJTJDJTIwcG9zdC10cmlnZ2VyJTNBJTIwMCUyOSUwQSUwQSUyMHQlM0ElMjAlMjAlMjAyLjgyNDc0NjEzNyUyMCUyMGNoJTNBMCUyMGYlM0ElMjAlMjAlMjA0MiUyMGlkJTNBJTIwJTIwJTIwMyUyMGRsYyUzQSUyMDglMjBkJTNBMTIlMjAyMSUyMDEzJTIwMzElMjAyMiUyMDM0JTIwNDElMjAxNSUwQSUyMHQlM0ElMjAlMjAlMjAzLjgyNDc3MDIzNyUyMCUyMGNoJTNBMSUyMGYlM0ElMjAlMjAlMjAlMjAyJTIwaWQlM0ElMjAlMjAlMjA0JTIwZGxjJTNBJTIwOCUyMGQlM0ExMiUyMDIxJTIwMTMlMjAzMSUyMDIyJTIwMzQlMjA0MSUyMDE1JTBBJTIwdCUzQSUyMCUyMCUyMDMuODI0NzcwMjYyJTIwJTIwY2glM0EwJTIwZiUzQSUyMCUyMCUyMDQyJTIwaWQlM0ElMjAlMjAlMjA0JTIwZGxjJTNBJTIwOCUyMGQlM0ExMiUyMDIxJTIwMTMlMjAzMSUyMDIyJTIwMzQlMjA0MSUyMDE1JTBBJTIwdCUzQSUyMCUyMCUyMDQuODI0Nzg4MzYyJTIwJTIwY2glM0ExJTIwZiUzQSUyMCUyMCUyMCUyMDIlMjBpZCUzQSUyMCUyMCUyMDUlMjBkbGMlM0ElMjA4JTIwZCUzQTEyJTIwMjElMjAxMyUyMDMxJTIwMjIlMjAzNCUyMDQxJTIwMTUlMEElMjB0JTNBJTIwJTIwJTIwNC44MjQ3ODgzODclMjAlMjBjaCUzQTAlMjBmJTNBJTIwJTIwJTIwNDIlMjBpZCUzQSUyMCUyMCUyMDUlMjBkbGMlM0ElMjA4JTIwZCUzQTEyJTIwMjElMjAxMyUyMDMxJTIwMjIlMjAzNCUyMDQxJTIwMTUlMEElMjB0JTNBJTIwJTIwJTIwNS44MjQ4MTA0ODclMjBMb2clMjBUcmlnZ2VyJTIwRXZlbnQlMjAlMjh0eXBlJTNBJTIwMHgyJTJDJTIwdHJpZ25vJTNBJTIwMHgwMSUyQyUyMHByZS10cmlnZ2VyJTNBJTIwMCUyQyUyMHBvc3QtdHJpZ2dlciUzQSUyMDI1MDAlMjklMEElMEElMjB0JTNBJTIwJTIwJTIwNS44MjQ4MTA0ODclMjAlMjBjaCUzQTElMjBmJTNBJTIwJTIwJTIwJTIwMiUyMGlkJTNBJTIwJTIwJTIwNiUyMGRsYyUzQSUyMDglMjBkJTNBMTIlMjAyMSUyMDEzJTIwMzElMjAyMiUyMDM0JTIwNDElMjAxNSUwQSUyMHQlM0ElMjAlMjAlMjA1LjgyNDgxMDUxMiUyMCUyMGNoJTNBMCUyMGYlM0ElMjAlMjAlMjA0MiUyMGlkJTNBJTIwJTIwJTIwNiUyMGRsYyUzQSUyMDglMjBkJTNBMTIlMjAyMSUyMDEzJTIwMzElMjAyMiUyMDM0JTIwNDElMjAxNSUwQSUyMHQlM0ElMjAlMjAlMjA2LjgyNDgyNjYxMiUyMCUyMGNoJTNBMSUyMGYlM0ElMjAlMjAlMjAlMjAyJTIwaWQlM0ElMjAlMjAlMjA3JTIwZGxjJTNBJTIwOCUyMGQlM0ExMiUyMDIxJTIwMTMlMjAzMSUyMDIyJTIwMzQlMjA0MSUyMDE1JTBBJTIwdCUzQSUyMCUyMCUyMDYuODI0ODI2NjM3JTIwJTIwY2glM0EwJTIwZiUzQSUyMCUyMCUyMDQyJTIwaWQlM0ElMjAlMjAlMjA3JTIwZGxjJTNBJTIwOCUyMGQlM0ExMiUyMDIxJTIwMTMlMjAzMSUyMDIyJTIwMzQlMjA0MSUyMDE1JTBBJTIwdCUzQSUyMCUyMCUyMDcuODI0ODUxNzM3JTIwJTIwY2glM0ExJTIwZiUzQSUyMCUyMCUyMCUyMDIlMjBpZCUzQSUyMCUyMCUyMDglMjBkbGMlM0ElMjA4JTIwZCUzQTEyJTIwMjElMjAxMyUyMDMxJTIwMjIlMjAzNCUyMDQxJTIwMTUlMEElMjB0JTNBJTIwJTIwJTIwNy44MjQ4NTE3NjIlMjAlMjBjaCUzQTAlMjBmJTNBJTIwJTIwJTIwNDIlMjBpZCUzQSUyMCUyMCUyMDglMjBkbGMlM0ElMjA4JTIwZCUzQTEyJTIwMjElMjAxMyUyMDMxJTIwMjIlMjAzNCUyMDQxJTIwMTU="][vc_column_text]Read the blog post Examining logged data with kvmlib and Python for another example on how to read data from a device using kvmlib.[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][vc_header_raket header_type="h3" header="3.5 Read configurations from device."][vc_column_text]Earlier we put a copy of our configuration in a config.zip file on the SD card, we may now read all the user files back using CANlib. The resulting file may then be opened using e.g. 7-zip.7[/vc_column_text][vc_code_raket language="python" header="Copy user files from Kvaser device." code="JTIzJTIwMTFfcmVhZF9jb25maWdfZnJvbV9kZXZpY2UucHklMEFpbXBvcnQlMjBvcyUwQSUwQWZyb20lMjBjYW5saWIlMjBpbXBvcnQlMjBjYW5saWIlMEElMEElMjMlMjBPdXIlMjBkZXZpY2UlMjBpcyUyMGNvbm5lY3RlZCUyMHRvJTIwQ0FObGliJTIwY2hhbm5lbCUyMG51bWJlciUyMDAlMEFjaGFubmVsJTIwJTNEJTIwMCUwQSUwQSUyMyUyME9wZW4lMjB0aGUlMjBkZXZpY2UlMEF3aXRoJTIwY2FubGliLm9wZW5DaGFubmVsJTI4Y2hhbm5lbCUzRGNoYW5uZWwlMjklMjBhcyUyMGNoJTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwTGlzdCUyMGZpbGVzJTIwb24lMjBkZXZpY2UlMEElMjAlMjAlMjAlMjBudW1GaWxlcyUyMCUzRCUyMGNoLmZpbGVHZXRDb3VudCUyOCUyOSUwQSUwQSUyMCUyMCUyMCUyMGlmJTIwbnVtRmlsZXMlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjBpJTIwaW4lMjByYW5nZSUyOG51bUZpbGVzJTI5JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbmFtZSUyMCUzRCUyMGNoLmZpbGVHZXROYW1lJTI4aSUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMFNraXAlMjBrbm93biUyMHN5c3RlbSUyMGZpbGVzJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjAlMjhvcy5wYXRoLnNwbGl0ZXh0JTI4bmFtZSUyOSU1QjElNUQubG93ZXIlMjglMjklMjAlM0QlM0QlMjAlMjcua21mJTI3JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3IlMjBuYW1lLmxvd2VyJTI4JTI5JTIwJTNEJTNEJTIwJTI3cGFyYW0ubGlmJTI3JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3IlMjBuYW1lLmxvd2VyJTI4JTI5JTIwJTNEJTNEJTIwJTI3ZGF0YWJhc2UuYmluJTI3JTI5JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjdTa2lwcGluZyUyNyUyQyUyMG5hbWUlMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbHNlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwQ29weSUyMHVzZXIlMjBmaWxlcyUyMHRvJTIwUEMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOCUyN0NvcHlpbmclM0ElMjAlMjclMkMlMjBuYW1lJTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY2guZmlsZUNvcHlGcm9tRGV2aWNlJTI4bmFtZSUyQyUyMG5hbWUlMjk="][vc_column_text]

Listing 14: Copy user files from Kvaser device.

[/vc_column_text][vc_column_text]Thus ends this post about kvmlib calls to set time and configure our Kvaser Memorator device. We will in the next, and last, part of this series take a look at what steps that needs to be done if we only have access to the bare SD card that later will be inserted into the Kvaser Memorator device.[/vc_column_text][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][vc_header_raket header_type="h3" header="Footnotes"][vc_column_text]1 Read more in the post Was that the CANlib channel number or Card Number? 2 The LIO data format is the specification on how to store data on the SD card. The latest LIO data format, v5.0, is capable of handling the larger data frames that can be generated by CAN FD. 3 Firmware earlier than 3.0 should use device type kvmDEVICE.MHYDRA. 4 This is similar to what the Kvaser Memorator Config Tool does when you tick "Save Configuration and Databases on the Disk". The tool will then insert the used configuration and database files into the file DATABASE.BIN. 5 In the previous post, Adding script and triggers to a configuration. 6 We should probably check the LIO data format version here as well, refer to our earlier initialization code on how to do that. 7 7-zip is an open source Windows utility for manipulating archives, see www.7-zip.org for more information.[/vc_column_text][/vc_column][/vc_row][vc_row el_class="full_width" eq_heights="1" no_inner_margin="1"][vc_column width="1/2"][vc_button_raket title="Adding script and triggers" text="Part Two" page_id="https://www.kvaser.com/developer-blog/adding-script-and-triggers-to-a-configuration/"][/vc_column][vc_column width="1/2"][vc_button_raket title="Configure an SD card using kvmlib" text="Part Four" align="align_right" page_id="https://www.kvaser.com/developer-blog/configure-an-sd-card-using-kvmlib/"][/vc_column][/vc_row][vc_row][vc_column][vc_raw_html]JTNDYnIlM0U=[/vc_raw_html][vc_separator_raket][vc_message]This article has been updated. To view the original, click on the box below.[/vc_message][vc_accordion active_tab="0" collapsible="yes"][vc_accordion_tab title="Original Article"][vc_column_text]Original article published April 12, 2016.[/vc_column_text][vc_message]This blog uses now deprecated functions, see blog "Improved API in Python canlib v1.5" for more information.[/vc_message][vc_column_text]

1 Getting started with kvmlib

2 Adding script and triggers to a configuration 3 Digging deeper into kvmlib 4 Configure an SD card using kvmlib[/vc_column_text][vc_column_text]In the first part we showed how to use kvmlib to configure a device and read the logged messages using Python. In this part we will be revisiting the configuring we did in the first part while using the low level functions. These low level functions share their names with the native C API, so you should not have any problem using the C API instead of Python. There's also a blog series about Setting Up CANlib for Visual Studio which might be useful. Full program listings are available on GitHub.[/vc_column_text][vc_column_text]Update 2017-03-21: Updated sample code to work with Python 3 as well as using the Python canlib package introduced in CANlib SDK v5.17.[/vc_column_text][vc_header_raket header_type="h3" header="3.1 Opening the device"][vc_column_text] Opening a device using CANlib requires knowledge about more than just the EAN number. When connecting to a device using Pythons kvDevice module, the code internally looks though all devices connected to our computer and returns the first one that match our search criteria, in our case the EAN number. [/vc_column_text][vc_code_raket language="python" header="Printing information about a connected Kvaser device." code="aW1wb3J0JTIwY2FubGliLmt2RGV2aWNlJTIwYXMlMjBrdkRldmljZSUwQSUwQSUyMyUyMENvbm5lY3QlMjB0byUyMG91ciUyMEt2YXNlciUyME1lbW9yYXRvciUyMFBybyUyMDV4SFMlMjB3aXRoJTIwRUFOJTIwMDA3NzgtOSUwQWRldiUyMCUzRCUyMGt2RGV2aWNlLmt2RGV2aWNlJTI4ZWFuJTNEJTIyNzMtMzAxMzAtMDA3NzgtOSUyMiUyOSUwQXByaW50JTI4ZGV2JTI5"][vc_column_text]

Listing 11: Printing information about a connected Kvaser device.

[/vc_column_text][vc_column_text]
 >>> Device: Kvaser Memorator Pro 5xHS (channel 0)
EAN : 73-30130-00778-9
S/N : 1023
FW : v3.0.546
Card : 0
Drv : kcany0a
Card channel : 0
Canlib channel: 0
[/vc_column_text][vc_column_text]Here we note that our device is connected to CANlib channel 0 and Card channel number 0. The CANlib channel number is used when opening the device from CANlib and the Card number is used in the corresponding way when opening the device in kvmlib.1 If we had opened a second device, those numbers would be different on the second device. When opening our device using kvmlib, beside specifying the device with Card channel, we also need to specify a device type. The device type is used to decide what version of LIO data format the device is using.2 Firmware v3.0 uses device type `kvmDEVICE_MHYDRA_EXT'. Let us take a look on how to set the device clock using kvmlib directly, which corresponds to how you would do the same thing using the C API.[/vc_column_text][vc_code_raket language="python" header="Setting the real time clock of a Kvaser device using kvmlib" code="aW1wb3J0JTIwY2FubGliLmt2bWxpYiUyMGFzJTIwa3ZtbGliJTBBJTBBbWwlMjAlM0QlMjBrdm1saWIua3ZtbGliJTI4JTI5JTBBJTBBJTIzJTIwU2luY2UlMjBvdXIlMjBmaXJtd2FyZSUyMGlzJTIwdjMuMCUyMHdlJTIwc2hvdWxkJTIwYmUlMjB1c2luZyUyMGt2bURFVklDRV9NSFlEUkFfRVhUJTBBJTIzJTIwYXMlMjB0aGUlMjBkZXZpY2UlMjB0eXBlLiUwQWRldmljZVR5cGUlMjAlM0QlMjBrdm1saWIua3ZtREVWSUNFX01IWURSQV9FWFQlMEElMEElMjMlMjBXZSUyMGtub3clMjB0aGF0JTIwb3VyJTIwZGV2aWNlJTIwaXMlMjBjb25uZWN0ZWQlMjB0byUyMENhcmQlMjBjaGFubmVsJTIwbnVtYmVyJTIwMCUwQWNhcmRDaGFubmVsJTIwJTNEJTIwMCUwQSUyMCUwQSUyMyUyMFdlJTIwaGF2ZSUyMGZpcm13YXJlJTIwdmVyc2lvbiUyMDMuMCUyMGluJTIwb3VyJTIwZGV2aWNlJTJDJTIwdGhpcyUyMG1lYW5zJTIwdGhhdCUwQSUyMyUyMHRoZSUyMEZXJTIwaXMlMjB1c2luZyUyMExpbyUyMERhdGElMjBGb3JtYXQlMjB2NS4wJTIwYW5kJTIwd2UlMjBzaG91bGQlMjB1c2UlMEElMjMlMjBrdm1ERVZJQ0VfTUhZRFJBX0VYVCUyMGFzJTIwdGhlJTIwZGV2aWNlVHlwZSUwQW1sLmRldmljZU9wZW4lMjhtZW1vTnIlM0RjYXJkQ2hhbm5lbCUyQyUyMGRldmljZXR5cGUlM0RkZXZpY2VUeXBlJTI5JTBBJTBBJTIzJTIwSGF2aW5nJTIwb2J0YWluZWQlMjBhJTIwa3ZtSGFuZGxlJTJDJTIwd2UlMjBjYW4lMjBub3clMjBlLmcuJTIwY2hlY2slMjB0aGUlMEElMjMlMjBkZXZpY2UlMjBzZXJpYWwlMjBudW1iZXIlMEFwcmludCUyOCUyMlNlcmlhbCUyMG51bWJlciUzQSUyNWQlMjIlMjAlMjUlMjBtbC5kZXZpY2VHZXRTZXJpYWxOdW1iZXIlMjglMjklMjklMEElMEElMjMlMjBTZXQlMjB0aGUlMjByZWFsJTIwdGltZSUyMGNsb2NrJTIwb2YlMjB0aGUlMjBkZXZpY2UlMEFtbC5kZXZpY2VTZXRSVEMlMjhkYXRldGltZS5kYXRldGltZS5ub3clMjglMjklMjklMEElMEElMjMlMjBSZWFkJTIwdGhlJTIwZGV2aWNlJTIwdGltZSUwQXByaW50JTI4JTIyQ3VycmVudCUyMGRldmljZSUyMHRpbWUlMjBpcyUyMCUyNXMlMjIlMjAlMjUlMjBtbC5kZXZpY2VHZXRSVEMlMjglMjklMjklMEElMEElMjMlMjBDbG9zZSUyMGRldmljZSUwQW1sLmNsb3NlJTI4JTI5"][vc_column_text]

Listing 12: Setting the real time clock of a Kvaser device using kvmlib.

[/vc_column_text][vc_column_text]
Serial number:1023
Current time is 2016-02-11 13:01:00.509000
Setting time...
Current device time is 2016-02-11 13:01:00
[/vc_column_text][vc_header_raket header_type="h3" header="3.2 Initialize the SD card"][vc_column_text]As stated earlier, using the correct device type when opening a device is very important. If we open a device using the wrong LIO data format (as specified using the device type), we will not be able to see any log messages during reading. Using the correct device type when initializing the SD card is even more important since the firmware will not be able to access an SD card that has been initialized using an incorrect LIO data format. In order to initialize the SD card, we open a kvmHandle using kvmlib where we need to supply our device type, which on a Kvaser Memorator 2nd Generation device (running on fw v3.0) is kvmDEVICE_MHYDRA_EXT.3 The call to deviceMountKmf() returns the LIO data format, so we can conveniently check that we supplied the correct device type. In the code below, we also take the opportunity to catch the case were the SD card was not already initialized. Most of the SD card is allocated for recording log messages during initialization, but there are two sizes that we can affect by passing two different arguments to the initialization command. The first argument is specifying "space to reserve for user files", which means that this amount of the SD card will be free for use by the user. We could have a /t/ program running in the device that generates text files, or we may have other user files that we would like to copy to the SD card. The second argument affects the size of a file called DATABASE.BIN which is used by the Kvaser Memorator Config Tool and may contain the configuration and database files that a user optionally can save to the SD card.[/vc_column_text][vc_code_raket language="python" code="aW1wb3J0JTIwY2FubGliLmt2bWxpYiUyMGFzJTIwa3ZtbGliJTBBJTBBbWwlMjAlM0QlMjBrdm1saWIua3ZtbGliJTI4JTI5JTBBJTBBJTIzJTIwU2luY2UlMjBvdXIlMjBmaXJtd2FyZSUyMGlzJTIwdjMuMCUyMHdlJTIwc2hvdWxkJTIwYmUlMjB1c2luZyUyMGt2bURFVklDRV9NSFlEUkFfRVhUJTBBJTIzJTIwYXMlMjB0aGUlMjBkZXZpY2UlMjB0eXBlLiUwQWRldmljZVR5cGUlMjAlM0QlMjBrdm1saWIua3ZtREVWSUNFX01IWURSQV9FWFQlMEElMEElMjMlMjBXZSUyMHNhdyUyMGVhcmxpZXIlMjB0aGF0JTIwb3VyJTIwZGV2aWNlJTIwaXMlMjBjb25uZWN0ZWQlMjB0byUyMENhcmQlMjBjaGFubmVsJTIwbnVtYmVyJTIwMCUwQWNhcmRDaGFubmVsJTIwJTNEJTIwMCUwQSUwQSUyMyUyME9wZW4lMjB0aGUlMjBkZXZpY2UlMEFtbC5kZXZpY2VPcGVuJTI4bWVtb05yJTNEY2FyZENoYW5uZWwlMkMlMjBkZXZpY2V0eXBlJTNEZGV2aWNlVHlwZSUyOSUwQSUwQXRyeSUzQSUwQSUyMCUyMCUyMCUyMCUyMyUyME1vdW50JTIwdGhlJTIwbG9nJTIwYXJlYSUwQSUyMCUyMCUyMCUyMGxpb0RhdGFGb3JtYXQlMjAlM0QlMjBtbC5kZXZpY2VNb3VudEttZiUyOCUyOSUwQSUyMCUyMCUyMCUyMHByaW50JTI4JTIyTGlvJTIwRGF0YSUyMEZvcm1hdCUyMHYlMjVzJTIyJTIwJTI1JTIwbGlvRGF0YUZvcm1hdCUyOSUwQSUyMCUyMCUyMCUyMCUyMyUyMFZlcmlmeSUyMHRoYXQlMjB0aGUlMjBMSU8lMjBkYXRhJTIwZm9ybWF0JTIwb2YlMjB0aGUlMjBjYXJkJTIwY29ycmVzcG9uZHMlMjB0byUwQSUyMCUyMCUyMCUyMCUyMyUyMHRoZSUyMGRldmljZSUyMHR5cGUlMjB3ZSUyMHVzZWQlMjB3aGVuJTIwb3BlbmluZyUyMHRoZSUyMGRldmljZSUwQSUyMCUyMCUyMCUyMGlmJTIwbGlvRGF0YUZvcm1hdCUyMCUyMSUzRCUyMCUyNzUuMCUyNyUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4JTIyVW5leHBlY3RlZCUyMExpbyUyMERhdGElMjBGb3JtYXQlM0ElMjIlMkMlMjBsaW9EYXRhRm9ybWF0JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBsaW9EYXRhRm9ybWF0JTIwJTNEJTNEJTIwJTI3My4wJTI3JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjJUaGlzJTIwbG9nJTIwZmlsZSUyMGNhbiUyMGJlJTIwcmVhZCUyMGlmJTIweW91JTIwcmVvcGVuJTIwdGhlJTIyJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIyJTIwZGV2aWNlJTIwYXMlMjBrdm1ERVZJQ0VfTUhZRFJBLiUyMiUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGV4aXQlMjgxJTI5JTBBZXhjZXB0JTIwa3ZtbGliLmt2bURpc2tOb3RGb3JtYXRlZCUzQSUwQSUyMCUyMCUyMCUyMHByaW50JTI4JTIyU0QlMjBjYXJkJTIwaXMlMjBub3QlMjBpbml0aWFsaXplZC4uLiUyMiUyOSUwQSUyMCUyMCUyMCUyMGV4aXQlMjgxJTI5JTBBJTBBJTIzJTIwRm9ybWF0JTIwdGhlJTIwU0QlMjBDYXJkJTIwYW5kJTIwcmVzZXJ2ZSUyMDEwJTIwTUIlMjBmb3IlMjBjb25maWd1cmF0aW9uJTIwZmlsZXMlMEElMjMlMjAlMjhpLmUuJTIwREFUQUJBU0UuQklOJTI5JTIwYW5kJTIwMTAwMCUyME1CJTIwZm9yJTIwb3VyJTIwb3duJTIwZmlsZXMuJTBBcHJpbnQlMjglMjJJbml0aWFsaXppbmclMjBTRCUyMGNhcmQuLi4lMjIlMjklMEFtbC5kZXZpY2VGb3JtYXREaXNrJTI4cmVzZXJ2ZVNwYWNlJTNEMTAwMDAlMkMlMjBkYmFzZVNwYWNlJTNEMTAlMjklMEElMEElMjMlMjBSZXBvcnQlMjBpbmZvJTIwYWJvdXQlMjB0aGUlMjBkaXNrJTIwYXJlYSUyMGFsbG9jYXRlZCUyMGZvciUyMGxvZ2dpbmclMEElMjhkaXNrU2l6ZSUyQyUyMHVzZWREaXNrU2l6ZSUyOSUyMCUzRCUyMG1sLmttZkdldFVzYWdlJTI4JTI5JTBBcHJpbnQlMjglMjJMb2clMjBzaXplJTNBJTIwJTI1ZCUyME1CJTVDblVzZWQlM0ElMjAlMjVkJTIwTUIlMjIlMjAlMjUlMjAlMjhkaXNrU2l6ZSUyQyUyMHVzZWREaXNrU2l6ZSUyOSUyOSUwQSUwQSUyMyUyMENsb3NlJTIwdGhlJTIwZGV2aWNlJTBBbWwuY2xvc2UlMjglMjk="][vc_column_text]

Listing 13: Verify LIO data format and initialize disk of a Kvaser device.

[/vc_column_text][vc_column_text]
Lio Data Format v5.0
 Initializing SD card...
 Log size: 6112 MB
 Used: 0 MB
[/vc_column_text][vc_column_text]Our device has a 16 GB SD card, and when we now reserved 10 MB for DATABASE.BIN and 10 GB as free space we are left with 6112 MB for logging data. Since we have just initialized the SD card, we also have 0 MB (used) logged data. The device SD card is now initialized and ready to be configured.[/vc_column_text][vc_header_raket header_type="h3" header="3.3 Save configuration"][vc_column_text]To configure the device, we convert the validated XML configuration to a binary configuration and download this binary configuration to the device. This is just as we did in the first post in this blog series, but here we call kvmlib directly and thus needs to expose the usage of deviceType and cardChannel.[/vc_column_text][vc_code_raket language="python" header="Converting and downloading the configuration to a Kvaser device." code="aW1wb3J0JTIwY2FubGliLmt2bWxpYiUyMGFzJTIwa3ZtbGliJTBBaW1wb3J0JTIwY2FubGliLmt2YU1lbW9MaWJYbWwlMjBhcyUyMGt2YU1lbW9MaWJYbWwlMEElMEFtbCUyMCUzRCUyMGt2bWxpYi5rdm1saWIlMjglMjklMEF4bCUyMCUzRCUyMGt2YU1lbW9MaWJYbWwua3ZhTWVtb0xpYlhtbCUyOCUyOSUwQSUwQSUyMyUyMFNpbmNlJTIwb3VyJTIwZmlybXdhcmUlMjBpcyUyMHYzLjAlMjB3ZSUyMHNob3VsZCUyMGJlJTIwdXNpbmclMjBrdm1ERVZJQ0VfTUhZRFJBX0VYVCUwQSUyMyUyMGFzJTIwdGhlJTIwZGV2aWNlJTIwdHlwZS4lMEFkZXZpY2VUeXBlJTIwJTNEJTIwa3ZtbGliLmt2bURFVklDRV9NSFlEUkFfRVhUJTBBJTBBJTIzJTIwV2UlMjBzYXclMjBlYXJsaWVyJTIwdGhhdCUyMG91ciUyMGRldmljZSUyMGlzJTIwY29ubmVjdGVkJTIwdG8lMjBDYXJkJTIwY2hhbm5lbCUyMG51bWJlciUyMDAlMEFjYXJkQ2hhbm5lbCUyMCUzRCUyMDAlMEElMEElMjMlMjBSZWFkJTIwaW4lMjB0aGUlMjBYTUwlMjBjb25maWd1cmF0aW9uJTIwZmlsZSUwQXdpdGglMjBvcGVuJTI4JTIyY29uZmlnLnhtbCUyMiUyQyUyMCUyN3IlMjclMjklMjBhcyUyMG15ZmlsZSUzQSUwQSUyMCUyMCUyMCUyMGNvbmZpZ194bWwlMjAlM0QlMjBteWZpbGUucmVhZCUyOCUyOSUwQSUwQSUyMyUyMENvbnZlcnQlMjB0aGUlMjBYTUwlMjBjb25maWd1cmF0aW9uJTIwdG8lMjBhJTIwYmluYXJ5JTIwY29uZmlndXJhdGlvbiUwQWNvbmZpZ19saWYlMjAlM0QlMjB4bC5rdmFYbWxUb0J1ZmZlciUyOGNvbmZpZ194bWwlMjklMEElMEElMjMlMjBPcGVuJTIwdGhlJTIwZGV2aWNlJTIwYW5kJTIwd3JpdGUlMjB0aGUlMjBjb25maWd1cmF0aW9uJTBBbWwuZGV2aWNlT3BlbiUyOG1lbW9OciUzRGNhcmRDaGFubmVsJTJDJTIwZGV2aWNldHlwZSUzRGRldmljZVR5cGUlMjklMEFtbC5rbWZXcml0ZUNvbmZpZyUyOGNvbmZpZ19saWYlMjklMEElMEElMjMlMjBDbG9zZSUyMHRoZSUyMGRldmljZSUwQW1sLmNsb3NlJTI4JTI5"][vc_column_text]

Listing 14: Converting and downloading the configuration to a Kvaser device.

[/vc_column_text][vc_column_text]In order to later be able to retrieve the configuration in clear text, we create a zip file (config.zip) of the files we have used and download onto the device.4 Since we earlier used the argument -addsrc when we compiled the t program, we only need the compiled .txe file and our XML configuration.5 If we had used any databases, we would add those to the zip archive as well.[/vc_column_text][vc_code_raket language="python" header="Downloading clear text configurations using a zip archive." code="aW1wb3J0JTIwemlwZmlsZSUwQWltcG9ydCUyMGNhbmxpYi5jYW5saWIlMjBhcyUyMGNhbmxpYiUwQSUwQSUyMyUyMENyZWF0ZSUyMFppcCUyMGFyY2hpdmUlMEF3aXRoJTIwemlwZmlsZS5aaXBGaWxlJTI4JTIyY29uZmlnLnppcCUyMiUyQyUyMG1vZGUlM0QlMjd3JTI3JTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY29tcHJlc3Npb24lM0R6aXBmaWxlLlpJUF9ERUZMQVRFRCUyOSUyMGFzJTIwemlwZiUzQSUwQSUyMCUyMCUyMCUyMCUyMyUyMEFkZGluZyUyMGZpbGVzJTIwdG8lMjB6aXAlMjBhcmNoaXZlJTBBJTIwJTIwJTIwJTIwemlwZi53cml0ZSUyOCUyMmNvbmZpZy54bWwlMjIlMjklMEElMjAlMjAlMjAlMjB6aXBmLndyaXRlJTI4JTIybXlDYW5HZW5lcmF0b3IudHhlJTIyJTI5JTBBJTBBY2wlMjAlM0QlMjBjYW5saWIuY2FubGliJTI4JTI5JTBBJTBBJTIzJTIwV2UlMjBrbm93JTIwdGhhdCUyMG91ciUyMGRldmljZSUyMHdhcyUyMGNvbm5lY3RlZCUyMHRvJTIwQ0FObGliJTIwY2hhbm5lbCUyMG51bWJlciUyMDAlMEFjYW5saWJDaGFubmVsJTIwJTNEJTIwMCUwQSUwQSUyMyUyME9wZW4lMjB0aGUlMjBkZXZpY2UlMjBhbmQlMjB3cml0ZSUyMHRoZSUyMHppcCUyMGFyY2hpdmUlMEFjaCUyMCUzRCUyMGNsLm9wZW5DaGFubmVsJTI4Y2hhbm5lbCUzRGNhbmxpYkNoYW5uZWwlMjklMEElMjMlMjBTaW5jZSUyMHRoZSUyMFNEJTIwY2FyZCUyMGlzJTIwZm9ybWF0ZWQlMjB1c2luZyUyMEZBVCUyQyUyMHdlJTIwc2hvdWxkJTIwdXNlJTBBJTIzJTIwYSUyMDguMyUyMGZpbGVuYW1lJTIwYXMlMjB0aGUlMjB0YXJnZXQlMjBmaWxlbmFtZSUwQWNoLmZpbGVDb3B5VG9EZXZpY2UlMjglMjJjb25maWcuemlwJTIyJTJDJTIwJTIyY29uZmlnLnppcCUyMiUyOSUwQSUyMCUwQWNoLmNsb3NlJTI4JTI5"][vc_column_text]

Listing 15: Downloading clear text configurations using a zip archive.

[/vc_column_text][vc_header_raket header_type="h3" header="3.4 Read result and save to file"][vc_column_text]After the device has been out in the field (i.e. we have applied power through the CAN connector and let the script run), we can once again connect our device to our computer and read out the logged data.6 In order to save the data for the future, we now write the data to a file using the kme50 format. This format can later be converted to a number of formats using the converter that is included in the Kvaser Memorator Config Tool. The first entry in all log files contain information about the logged device. We take advantage of this here and place part of the EAN and serial number in the name of the resulting .kme50 files. When all log files have been read from the device, we delete the log files on the device in order to be ready for a new logging run (reusing the same configuration).[/vc_column_text][vc_code_raket language="python" header="Read logged data and save to .kme50 files." code="aW1wb3J0JTIwZ2xvYiUwQWltcG9ydCUyMG9zJTBBJTBBaW1wb3J0JTIwY2FubGliLmt2bWxpYiUyMGFzJTIwa3ZtbGliJTBBJTBBbWwlMjAlM0QlMjBrdm1saWIua3ZtbGliJTI4JTI5JTBBJTBBJTIzJTIwU2luY2UlMjBvdXIlMjBmaXJtd2FyZSUyMGlzJTIwdjMuMCUyMHdlJTIwc2hvdWxkJTIwYmUlMjB1c2luZyUyMGt2bURFVklDRV9NSFlEUkFfRVhUJTBBJTIzJTIwYXMlMjB0aGUlMjBkZXZpY2UlMjB0eXBlLiUwQWRldmljZVR5cGUlMjAlM0QlMjBrdm1saWIua3ZtREVWSUNFX01IWURSQV9FWFQlMEElMEElMjMlMjBXZSUyMHNhdyUyMGVhcmxpZXIlMjB0aGF0JTIwb3VyJTIwZGV2aWNlJTIwaXMlMjBjb25uZWN0ZWQlMjB0byUyMENhcmQlMjBjaGFubmVsJTIwbnVtYmVyJTIwMCUwQWNhcmRDaGFubmVsJTIwJTNEJTIwMCUwQSUwQSUyMyUyMERpcmVjdG9yeSUyMHRvJTIwcHV0JTIwdGhlJTIwcmVzdWx0aW5nJTIwZmlsZXMlMjBpbiUwQXJlc3VsdERpciUyMCUzRCUyMCUyMnJlc3VsdCUyMiUwQSUwQSUyMyUyME1ha2UlMjBzdXJlJTIwdGhlJTIwcmVzdWx0JTIwZGlyZWN0b3J5JTIwZXhpc3RzJTIwYW5kJTIwaXMlMjBlbXB0eSUwQWlmJTIwb3MucGF0aC5pc2RpciUyOHJlc3VsdERpciUyOSUzQSUwQSUyMCUyMCUyMCUyMGZpbGVzJTIwJTNEJTIwZ2xvYi5nbG9iJTI4b3MucGF0aC5qb2luJTI4cmVzdWx0RGlyJTJDJTIwJTIyJTJBJTIyJTI5JTI5JTBBJTIwJTIwJTIwJTIwZm9yJTIwZiUyMGluJTIwZmlsZXMlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvcy5yZW1vdmUlMjhmJTI5JTBBZWxzZSUzQSUwQSUyMCUyMCUyMCUyMG9zLm1rZGlyJTI4cmVzdWx0RGlyJTI5JTBBb3MuY2hkaXIlMjhyZXN1bHREaXIlMjklMEElMEElMjMlMjBPcGVuJTIwdGhlJTIwZGV2aWNlJTBBbWwuZGV2aWNlT3BlbiUyOG1lbW9OciUzRGNhcmRDaGFubmVsJTJDJTIwZGV2aWNldHlwZSUzRGRldmljZVR5cGUlMjklMEElMEF0cnklM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBNb3VudCUyMHRoZSUyMGxvZyUyMGFyZWElMEElMjAlMjAlMjAlMjBsaW9EYXRhRm9ybWF0JTIwJTNEJTIwbWwuZGV2aWNlTW91bnRLbWYlMjglMjklMEElMjAlMjAlMjAlMjBwcmludCUyOCUyMkxpbyUyMERhdGElMjBGb3JtYXQlMjB2JTI1cyUyMiUyMCUyNSUyMGxpb0RhdGFGb3JtYXQlMjklMEElMjAlMjAlMjAlMjAlMjMlMjBWZXJpZnklMjB0aGF0JTIwdGhlJTIwTElPJTIwZGF0YSUyMGZvcm1hdCUyMG9mJTIwdGhlJTIwY2FyZCUyMGNvcnJlc3BvbmRzJTIwdG8lMEElMjAlMjAlMjAlMjAlMjMlMjB0aGUlMjBkZXZpY2UlMjB0eXBlJTIwd2UlMjB1c2VkJTIwd2hlbiUyMG9wZW5pbmclMjB0aGUlMjBkZXZpY2UlMEElMjAlMjAlMjAlMjBpZiUyMGxpb0RhdGFGb3JtYXQlMjAlMjElM0QlMjAlMjc1LjAlMjclM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOCUyMlVuZXhwZWN0ZWQlMjBMaW8lMjBEYXRhJTIwRm9ybWF0JTNBJTIyJTJDJTIwbGlvRGF0YUZvcm1hdCUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwbGlvRGF0YUZvcm1hdCUyMCUzRCUzRCUyMCUyNzMuMCUyNyUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50JTI4JTIyVGhpcyUyMGxvZyUyMGZpbGUlMjBjYW4lMjBiZSUyMHJlYWQlMjBpZiUyMHlvdSUyMHJlb3BlbiUyMHRoZSUyMiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMiUyMGRldmljZSUyMGFzJTIwa3ZtREVWSUNFX01IWURSQS4lMjIlMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBleGl0JTI4MSUyOSUwQWV4Y2VwdCUyMGt2bWxpYi5rdm1EaXNrTm90Rm9ybWF0ZWQlM0ElMEElMjAlMjAlMjAlMjBwcmludCUyOCUyMlNEJTIwY2FyZCUyMGlzJTIwbm90JTIwaW5pdGlhbGl6ZWQuLi4lMjIlMjklMEElMjAlMjAlMjAlMjBleGl0JTI4MSUyOSUwQSUwQSUyMyUyMFJlYWQlMjBudW1iZXIlMjBvZiUyMHJlY29yZGVkJTIwbG9nZmlsZXMlMEFmaWxlQ291bnQlMjAlM0QlMjBtbC5sb2dGaWxlR2V0Q291bnQlMjglMjklMEFwcmludCUyOCUyMkZvdW5kJTIwJTI1ZCUyMGZpbGUlMjVzJTIwb24lMjBjYXJkJTNBJTIyJTIwJTI1JTIwJTI4ZmlsZUNvdW50JTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIycyUyMiUyMGlmJTIwZmlsZUNvdW50JTIwJTNFJTIwMSUyMGVsc2UlMjAlMjIlMjIlMjklMjklMEElMEElMjMlMjBMb29wJTIwdGhyb3VnaCUyMGFsbCUyMGxvZ2ZpbGVzJTIwYW5kJTIwd3JpdGUlMjB0aGVpciUyMGNvbnRlbnRzJTIwdG8lMjAua21lNTAlMjBmaWxlcyUwQWZvciUyMGZpbGVJbmR4JTIwaW4lMjByYW5nZSUyOGZpbGVDb3VudCUyOSUzQSUwQSUyMCUyMCUyMCUyMGV2ZW50Q291bnQlMjAlM0QlMjBtbC5sb2dGaWxlTW91bnQlMjhmaWxlSW5keCUyOSUwQSUyMCUyMCUyMCUyMHByaW50JTI4JTIyJTVDdEZpbGUlMjAlMjUzZCUzQSUyMCUyNTEwZCUyMGV2ZW50cyUyMiUyMCUyNSUyMCUyOGZpbGVJbmR4JTJDJTIwZXZlbnRDb3VudCUyOSUyOSUwQSUyMCUyMCUyMCUyMGxvZ0V2ZW50JTIwJTNEJTIwbWwubG9nRmlsZVJlYWRFdmVudExvZ0Zvcm1hdCUyOCUyOSUwQSUyMCUyMCUyMCUyMCUyMyUwQSUyMCUyMCUyMCUyMCUyMyUyMFRoZSUyMGZpcnN0JTIwbG9nRXZlbnQlMjBjb250YWlucyUyMGRldmljZSUyMGluZm9ybWF0aW9uJTBBJTIwJTIwJTIwJTIwbWVtb0V2ZW50JTIwJTNEJTIwbG9nRXZlbnQuY3JlYXRlTWVtb0V2ZW50JTI4JTI5JTBBJTIwJTIwJTIwJTIwc24lMjAlM0QlMjBtZW1vRXZlbnQuc2VyaWFsTnVtYmVyJTBBJTIwJTIwJTIwJTIwZWFuX2xvJTIwJTNEJTIwbWVtb0V2ZW50LmVhbkxvJTBBJTIwJTIwJTIwJTIwZWFuX3NuJTIwJTNEJTIwJTIyJTI1MDV4LSUyNXhfJTI1ZCUyMiUyMCUyNSUyMCUyOCUyOGVhbl9sbyUyMCUzRSUzRSUyMDQlMjklMjAlMjYlMjAweGZmZmZmJTJDJTIwZWFuX2xvJTIwJTI2JTIwMHhmJTJDJTIwc24lMjklMEElMjAlMjAlMjAlMjAlMjMlMjBBZGQlMjBFQU4lMjBhbmQlMjBzZXJpYWwlMjBudW1iZXIlMjBpbmZvJTIwdG8lMjBmaWxlbmFtZSUwQSUyMCUyMCUyMCUyMGxvZ2ZpbGVOYW1lJTIwJTNEJTIwJTIybG9nXyUyNXNfJTI1ZC5rbWU1MCUyMiUyMCUyNSUyMCUyOGVhbl9zbiUyQyUyMGZpbGVJbmR4JTI5JTBBJTIwJTIwJTIwJTIwbWwua21lQ3JlYXRlRmlsZSUyOGxvZ2ZpbGVOYW1lJTJDJTIwa3ZtbGliLmt2bUZJTEVfS01FNTAlMjklMEElMjAlMjAlMjAlMjB3aGlsZSUyMGxvZ0V2ZW50JTIwaXMlMjBub3QlMjBOb25lJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwV3JpdGUlMjBldmVudCUyMHRvJTIwc3Rkb3V0JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjhsb2dFdmVudCUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG1sLmttZVdyaXRlRXZlbnQlMjhsb2dFdmVudCUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMFJlYWQlMjBuZXh0JTIwZXZlbnQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsb2dFdmVudCUyMCUzRCUyMG1sLmxvZ0ZpbGVSZWFkRXZlbnRMb2dGb3JtYXQlMjglMjklMEElMjAlMjAlMjAlMjBtbC5rbWVDbG9zZUZpbGUlMjglMjklMEElMEElMjMlMjBEZWxldGUlMjBhbGwlMjBsb2dmaWxlcyUwQW1sLmxvZ0ZpbGVEZWxldGVBbGwlMjglMjklMEElMEElMjMlMjBDbG9zZSUyMGRldmljZSUwQW1sLmNsb3NlJTI4JTI5"][vc_column_text]

Listing 16: Read logged data and save to .kme50 files.

[/vc_column_text][vc_column_text] Read the blog post Examining logged data with kvmlib and Python for another example on how to read data from a device using kvmlib. [/vc_column_text][vc_header_raket header_type="h3" header="3.5 Read configurations from device."][vc_column_text] Earlier we put a copy of our configuration in a config.zip file on the SD card, we may now read all the user files back using CANlib. The resulting file may then be opened using e.g. 7-zip.7 [/vc_column_text][vc_code_raket language="python" header="Copy user files from Kvaser device." code="aW1wb3J0JTIwb3MlMEElMEFpbXBvcnQlMjBjYW5saWIuY2FubGliJTIwYXMlMjBjYW5saWIlMEElMEFjbCUyMCUzRCUyMGNhbmxpYi5jYW5saWIlMjglMjklMEElMEElMjMlMjBXZSUyMGFscmVhZHklMjBrbmV3JTIwdGhhdCUyMG91ciUyMGRldmljZSUyMHdhcyUyMGNvbm5lY3RlZCUyMHRvJTIwQ0FObGliJTIwY2hhbm5lbCUyMG51bWJlciUyMDAlMEFjYW5saWJDaGFubmVsJTIwJTNEJTIwMCUwQSUyMyUyME9wZW4lMjB0aGUlMjBkZXZpY2UlMEFjaCUyMCUzRCUyMGNsLm9wZW5DaGFubmVsJTI4Y2hhbm5lbCUzRGNhbmxpYkNoYW5uZWwlMjklMEElMEElMjMlMjBMaXN0JTIwZmlsZXMlMjBvbiUyMGRldmljZSUwQW51bUZpbGVzJTIwJTNEJTIwY2guZmlsZUdldENvdW50JTI4JTI5JTBBJTBBaWYlMjBudW1GaWxlcyUzQSUwQSUyMCUyMCUyMCUyMGZvciUyMGklMjBpbiUyMHJhbmdlJTI4bnVtRmlsZXMlMjklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBuYW1lJTIwJTNEJTIwY2guZmlsZUdldE5hbWUlMjhpJTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwU2tpcCUyMGtub3duJTIwc3lzdGVtJTIwZmlsZXMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMCUyOG9zLnBhdGguc3BsaXRleHQlMjhuYW1lJTI5JTVCMSU1RC5sb3dlciUyOCUyOSUyMCUzRCUzRCUyMCUyNy5rbWYlMjclMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvciUyMG5hbWUubG93ZXIlMjglMjklMjAlM0QlM0QlMjAlMjdwYXJhbS5saWYlMjclMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvciUyMG5hbWUubG93ZXIlMjglMjklMjAlM0QlM0QlMjAlMjdkYXRhYmFzZS5iaW4lMjclMjklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOCUyMlNraXBwaW5nJTIwJTI1cyUyMiUyMCUyNSUyMG5hbWUlMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbHNlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwQ29weSUyMHVzZXIlMjBmaWxlcyUyMHRvJTIwUEMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOCUyMkNvcHlpbmclMjAlMjVzJTIyJTIwJTI1JTIwbmFtZSUyOSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNoLmZpbGVDb3B5RnJvbURldmljZSUyOG5hbWUlMkMlMjBuYW1lJTI5JTBBJTBBY2guY2xvc2UlMjglMjk="][vc_column_text]

Listing 17: Copy user files from Kvaser device.

[/vc_column_text][vc_column_text]
Skipping PARAM.LIF
Skipping LOG00000.KMF
Skipping LOG00001.KMF
Skipping LOG00002.KMF
Skipping LOG00003.KMF
Skipping LOG00004.KMF
Skipping LOG00005.KMF
Skipping DATABASE.BIN
Copying CONFIG.ZIP
[/vc_column_text][vc_column_text] Thus ends this post about using low level kvmlib calls to configure our Kvaser Memorator device. We will in the next, and last, part of this series take a look at what steps that needs to be done if we only have access to the SD card that will be inserted into the device. [/vc_column_text][vc_header_raket header_type="h3" header="Footnotes"][vc_column_text]1 Read more in the post Was that the CANlib channel number or Card Number? 2 The LIO data format is the specification on how to store data on the SD card. The latest LIO data format, v5.0, is capable of handling the larger data frames that can be generated by CAN FD. 3 Firmware earlier than 3.0 should use device type kvmDEVICE.MHYDRA. 4 This is similar to what the Kvaser Memorator Config Tool does when you tick "Save Configuration and Databases on the Disk". The tool will then insert the used configuration and database files into the file DATABASE.BIN. 5 In the previous post, Adding script and triggers to a configuration. 6 We should probably check the LIO data format version here as well, refer to our earlier initialization code on how to do that. 7 7-zip is an open source Windows utility for manipulating archives, see www.7-zip.org for more information.[/vc_column_text][/vc_accordion_tab][/vc_accordion][/vc_column][/vc_row] [post_title] => Digging deeper into kvmlib [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => digging-deeper-into-kvmlib [to_ping] => [pinged] => [post_modified] => 2022-11-18 22:31:37 [post_modified_gmt] => 2022-11-18 22:31:37 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?post_type=developer_blog&p=11599 [menu_order] => 0 [post_type] => developer_blog [post_mime_type] => [comment_count] => 0 [filter] => raw ) [9] => WP_Post Object ( [ID] => 11509 [post_author] => 14 [post_date] => 2018-09-17 11:00:20 [post_date_gmt] => 2018-09-17 11:00:20 [post_content] => [vc_row][vc_column][vc_column_text]This is the second post in a 4-part series about configuring and reading logged data using a Kvaser Memorator 2nd Generation device through kvmlib:[/vc_column_text][/vc_column][/vc_row][vc_row el_class="indented"][vc_column][vc_column_text]

1 Getting started with kvmlib

2 Adding script and triggers to a configuration 3 Digging deeper into kvmlib 4 Configure an SD card using kvmlib[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text] In the first part we showed how to use kvmlib to configure a device using a simple configuration that logged everything. Let us now increase the complexity of our configuration by adding a t program and some triggers. Full program listings are available on GitHub. [/vc_column_text][vc_header_raket header_type="h3" header="2.1 Prepare a t program to be included in the configuration"][vc_column_text] Let's take a t program that generates some CAN traffic and add that to the configuration for testing purposes. This script is actually part of a test where we verify that start and stop of logging can be controlled using triggers. The script itself sends a CAN message every second, starting at 0.5 s from the time the script was started. The CAN message id is incremented by one for each sent CAN message. In total, 11 CAN messages are sent on the CAN bus. [/vc_column_text][vc_code_raket code="JTJGJTJGJTIwVGhpcyUyMHNjcmlwdCUyMGlzJTIwaW50ZW5kZWQlMjB0byUyMGJlJTIwdXNlZCUyMHRvJTIwY2hlY2slMjBhJTIwY29uZmlndXJhdGlvbiUyMHNldCUyMGFzJTNBJTBBJTJGJTJGJTBBJTJGJTJGJTIwJTVCJTIwJTVEJTIwTG9nJTIwZXZlcnl0aGluZyUwQSUyRiUyRiUyMCU1QiUyMCU1RCUyMEZJRk8lMjBtb2RlJTBBJTJGJTJGJTIwUG93ZXIlMjBzZXR0aW5ncyUzQSUyMDUlMjBUaW1lJTIwdG8lMjBsaXZlJTIwYWZ0ZXIlMjBDQU4lMjBwb3dlciUyMGRpc2Nvbm5lY3RlZCUyQyUyMGluJTIwc2Vjb25kcyUwQSUyRiUyRiUwQSUyRiUyRiUyMENBTiUyMDElMjBzaG91bGQlMjBiZSUyMGNvbm5lY3RlZCUyMHRvJTIwQ0FOJTIwMiUwQSUyRiUyRiUwQSUyRiUyRiUyMFRyaWdnZXJzJTNBJTBBJTJGJTJGJTIwQ0FOMSUyMFRyaWdnZXIxJTIwVGltZXIlMjAlNUI0cyU1RCUyMCUzQSUyMFN0YXJ0JTIwbG9nZ2luZyUyQyUyMHBvc3QtdHJpZ2dlciUzRDAlMEElMkYlMkYlMjBDQU4xJTIwVHJpZ2dlcjIlMjBUaW1lciUyMCU1QjdzJTVEJTIwJTNBJTIwU3RvcCUyMGxvZ2dpbmclMkMlMjBwb3N0LXRyaWdnZXIlM0QzMDAwJTBBJTJGJTJGJTBBJTJGJTJGJTIwU2NyaXB0JTIwc2VuZHMlMjBtc2clMjBpZCUzQSUwQSUyRiUyRiUyMElkJTIwMSUyMGF0JTIwMC41cyUwQSUyRiUyRiUyMElkJTIwMiUyMGF0JTIwMS41cyUwQSUyRiUyRiUyMElkJTIwMyUyMGF0JTIwMi41cyUwQSUyRiUyRiUyMElkJTIwNCUyMGF0JTIwMy41cyUwQSUyRiUyRiUyMElkJTIwNSUyMGF0JTIwNC41cyUwQSUyRiUyRiUyMC4uLiUyMGFuZCUyMHNvJTIwb24lMjB1bnRpbCUwQSUyRiUyRiUyMElkJTIwMTElMjBhdCUyMDEwLjVzJTBBJTBBdmFyaWFibGVzJTIwJTdCJTBBJTIwJTIwJTJGJTJGJTIwQmFzZSUyMGNoYW5uZWwuJTIwQ0FOJTIwbWVzc2FnZXMlMjB3aWxsJTIwYmUlMjBzZW50JTIwb24lMjBjaGFubmVsJTIwY2glMjBhbmQlMjByZWNlaXZlZCUyMG9uJTBBJTIwJTIwJTJGJTJGJTIwY2hhbm5lbCUyMGNoJTIwJTJCJTIwMSUwQSUyMCUyMGNvbnN0JTIwaW50JTIwY2glMjAlM0QlMjAwJTNCJTBBJTBBJTIwJTIwJTJGJTJGJTIwVGhlJTIwc2luZ2xlc2hvdCUyMHRpbWVyJTIwaXMlMjB1c2VkJTIwdG8lMjBnZXQlMjBhJTIwZGVsYXklMjBiZWZvcmUlMjB0aGUlMjBmaXJzdCUyMENBTiUyMG1lc3NhZ2UlMEElMjAlMjAlMkYlMkYlMjBpcyUyMHNlbnQuJTBBJTIwJTIwVGltZXIlMjBzaW5nbGVzaG90JTNCJTBBJTBBJTIwJTIwJTJGJTJGJTIwVGhlJTIwcGVyaW9kaWMlMjB0aW1lciUyMGlzJTIwdGhlbiUyMHVzZWQlMjBiZXR3ZWVuJTIwZWFjaCUyMENBTiUyMG1lc3NhZ2UlMEElMjAlMjBUaW1lciUyMHBlcmlvZGljJTNCJTBBJTBBJTIwJTIwJTJGJTJGJTIwVGhlJTIwbWVzc2FnZSUyMGlkJTIwb2YlMjB0aGUlMjBzZW50JTIwQ0FOJTIwbWVzc2FnZXMlMkMlMjB3aWxsJTIwYmUlMjBpbmNyZW1lbnRlZCUwQSUyMCUyMGludCUyMG1zZ0lkJTIwJTNEJTIwMSUzQiUwQSUwQSUyMCUyMCUyRiUyRiUyMFRoZSUyMENBTiUyMG1lc3NhZ2UlMjB0byUyMGJlJTIwc2VudCUwQSUyMCUyMENhbk1lc3NhZ2UlMjBtc2clM0IlMEElN0QlMEElMEFvbiUyMFRpbWVyJTIwc2luZ2xlc2hvdCUyMCU3QiUwQSUyMCUyMCUyRiUyRiUyMFN0YXJ0JTIwdGhlJTIwcGVyaW9kaWMlMjB0aW1lciUyMHRvJTIwc2VuZCUyMDEwJTIwbW9yZSUyMENBTiUyMG1lc3NhZ2VzJTBBJTIwJTIwdGltZXJTdGFydCUyOHBlcmlvZGljJTJDJTIwMTAlMjklM0IlMEElMEElMjAlMjAlMkYlMkYlMjBBZnRlciUyMHVzaW5nJTIwdGhlJTIwY3VycmVudCUyMENBTiUyMG1lc3NhZ2UlMjBpZCUyQyUyMGluY3JlbWVudCUyMGJlZm9yZSUyMG5leHQlMjB1c2UlMEElMjAlMjBtc2cuaWQlMjAlM0QlMjBtc2dJZCUyQiUyQiUzQiUwQSUyMCUyMG1zZy5mbGFncyUyMCUzRCUyMDAlM0IlMEElMjAlMjBtc2cuZGxjJTIwJTNEJTIwOCUzQiUwQSUyMCUyMG1zZy5kYXRhJTIwJTNEJTIwJTIyJTVDeDEyJTVDeDIxJTVDeDEzJTVDeDMxJTVDeDIyJTVDeDM0JTVDeDQxJTVDeDE1JTIyJTNCJTBBJTBBJTIwJTIwJTJGJTJGJTIwU2VuZCUyMENBTiUyMG1lc3NhZ2UlMEElMjAlMjBjYW5Xcml0ZSUyOGNoJTJDJTIwbXNnJTI5JTNCJTBBJTIwJTIwcHJpbnRmJTI4JTIyU2luZ2xlJTIwc2hvdCUyME1zZ0lkJTNBJTIwJTI1ZCU1Q24lMjIlMkMlMjBtc2cuaWQlMjklM0IlMEElN0QlMEElMEFvbiUyMFRpbWVyJTIwcGVyaW9kaWMlMjAlN0IlMEElMjAlMjAlMkYlMkYlMjBBZnRlciUyMHVzaW5nJTIwdGhlJTIwY3VycmVudCUyMENBTiUyMG1lc3NhZ2UlMjBpZCUyQyUyMGluY3JlbWVudCUyMGJlZm9yZSUyMG5leHQlMjB1c2UlMEElMjAlMjBtc2cuaWQlMjAlM0QlMjBtc2dJZCUyQiUyQiUzQiUwQSUwQSUyMCUyMCUyRiUyRiUyMFNlbmQlMjBDQU4lMjBtZXNzYWdlJTBBJTIwJTIwY2FuV3JpdGUlMjhjaCUyQyUyMG1zZyUyOSUzQiUwQSUyMCUyMHByaW50ZiUyOCUyMlBlcmlvZGljJTIwTXNnSWQlM0ElMjAlMjVkJTVDbiUyMiUyQyUyMG1zZy5pZCUyOSUzQiUwQSUyMCUyMGlmJTIwJTI4JTIxdGltZXJJc1BlbmRpbmclMjhwZXJpb2RpYyUyOSUyOSUyMCU3QiUwQSUyMCUyMCUyMCUyMHByaW50ZiUyOCUyMlRpbWVyJTIwZG9uZSUyMSUyMiUyOSUzQiUwQSUyMCUyMCU3RCUwQSU3RCUwQSUwQW9uJTIwc3RhcnQlMjAlN0IlMEElMjAlMjBwcmludGYlMjglMjJTdGFydGluZyUyMHRlc3Rsb2dnZXIlMjBjb21wYW5pb24lMjBzY3JpcHQlNUNuJTIyJTI5JTNCJTBBJTBBJTIwJTIwJTJGJTJGJTIwU2V0dXAlMjB0aGUlMjB0d28lMjBDQU4lMjBjaGFubmVscyUyMGFuZCUyMGdvJTIwYnVzJTIwb24uJTBBJTIwJTIwJTJGJTJGJTIwVGhpcyUyMHdpbGwlMjBvdmVycmlkZSUyMHRoZSUyMHNldHRpbmdzJTIwaW4lMjB0aGUlMjBiaW5hcnklMjBjb25maWd1cmF0aW9uJTJDJTBBJTIwJTIwJTJGJTJGJTIwbW9zdCUyMG5vdGFibHklMjB0aGUlMjBjaGFubmVscyUyMHdpbGwlMjBubyUyMGxvbmdlciUyMGJlJTIwaW4lMjBzaWxlbnQlMjBtb2RlLiUwQSUyMCUyMGNhbkJ1c09mZiUyOGNoJTI5JTNCJTBBJTIwJTIwY2FuQnVzT2ZmJTI4Y2glMjAlMkIlMjAxJTI5JTNCJTBBJTIwJTIwY2FuU2V0Qml0cmF0ZSUyOGNoJTJDJTIwY2FuQklUUkFURV8xTSUyOSUzQiUwQSUyMCUyMGNhblNldEJpdHJhdGUlMjhjaCUyMCUyQiUyMDElMkMlMjBjYW5CSVRSQVRFXzFNJTI5JTNCJTBBJTIwJTIwY2FuU2V0QnVzT3V0cHV0Q29udHJvbCUyOGNoJTJDJTIwY2FuRFJJVkVSX05PUk1BTCUyOSUzQiUwQSUyMCUyMGNhblNldEJ1c091dHB1dENvbnRyb2wlMjhjaCUyMCUyQiUyMDElMkMlMjBjYW5EUklWRVJfTk9STUFMJTI5JTNCJTBBJTIwJTIwY2FuQnVzT24lMjhjaCUyOSUzQiUwQSUyMCUyMGNhbkJ1c09uJTI4Y2glMjAlMkIlMjAxJTI5JTNCJTBBJTBBJTIwJTIwc2luZ2xlc2hvdC50aW1lb3V0JTIwJTNEJTIwNTAwJTNCJTIwJTJGJTJGJTIwV2FpdCUyMGhhbGYlMjBhJTIwc2Vjb25kJTBBJTIwJTIwcGVyaW9kaWMudGltZW91dCUyMCUzRCUyMDEwMDAlM0IlMjAlMkYlMkYlMjBPbmUlMjBzZWNvbmQlMjBwZXJpb2QlMEElMEElMjAlMjAlMkYlMkYlMjBTdGFydCUyMHRoZSUyMHNpbmdsZXNob3QlMjB0aW1lciUyMHRvJTIwc2VuZCUyMHRoZSUyMGZpcnN0JTIwQ0FOJTIwbWVzc2FnZSUwQSUyMCUyMHRpbWVyU3RhcnQlMjhzaW5nbGVzaG90JTI5JTNCJTBBJTIwJTIwcHJpbnRmJTI4JTIyU3RhcnQlMjBwZXJpb2RpYyUyMHRyYW5zbWlzc2lvbiU1Q24lMjIlMjklM0IlMEElN0QlMEElMEFvbiUyMHN0b3AlMjAlN0IlMEElMjAlMjBwcmludGYlMjglMjJTdG9wcGluZyUyMHNjcmlwdCU1Q24lMjIlMjklM0IlMEElMjAlMjBjYW5CdXNPZmYlMjhjaCUyOSUzQiUwQSUyMCUyMGNhbkJ1c09mZiUyOGNoJTIwJTJCJTIwMSUyOSUzQiUwQSU3RA=="][vc_column_text]

Listing 5: A sample t program that generates CAN messages.

[/vc_column_text][vc_column_text]The t program needs to be compiled before being added to the configuration. The t compiler is called `scc.exe' and is normally placed at `C:\Program Files (x86)\Kvaser\Canlib\Bin\scc.exe' when CANlib SDK is installed. The usage help will be printed if invoked without any arguments.[/vc_column_text][vc_code_raket code="c2NjLmV4ZSUwQU5vJTIwaW5wdXQlMjBmaWxlJTIwZm91bmQuJTBBU2NyaXB0JTIwY29tcGlsZXIlMjBmb3IlMjBLdmFzZXIlMjB0LXNjcmlwdC4lMEFUaGlzJTIwaXMlMjB2ZXJzaW9uJTIwMy4zLjMwNSUyMGJ1aWx0JTIwb24lMjBTdW4lMjBEZWMlMjAxMyUyMDE5JTNBMzglM0E1MyUyMDIwMTUuJTBBVXNhZ2UlM0ElMEFzY2MlMjAlNUItdiUyMC12ZXJib3NlJTVEJTIwJTVCLWMlNUQlMjAlNUItZyU1RCUyMCU1Qi1keCU1RCUyMCU1Qi1kZXZsaW5lcyU1RCUwQSU1Qi1hZGRzcmMlNUQlMjAlNUItY29tbWVudCUzRFhYWCU1RCUwQSU1Qi1wa2V5JTNETiU1RCUyMCU1Qi1za2V5JTNESyU1RCUwQSU0MCUyNmx0JTNCZmlsZW5hbWUlMjZndCUzQiU1RCUyMCU1Qi1kYmFzZSUzRCUyNmx0JTNCZmlsZW5hbWUlMjZndCUzQiU1RCUyMCUyNmx0JTNCZmlsZW5hbWUlMjZndCUzQiUwQXdoZXJlJTBBLWMlMjBDb21waWxlJTIwb25seS4lMjBObyUyMG91dHB1dCUyMGlzJTIwcHJvZHVjZWQuJTBBLWRiYXNlJTNEWFhYLmRiYyUyMFVzZSUyMHRoZSUyMGRhdGFiYXNlJTIwWFhYLmRiYyUyMHRvJTIwZGVmaW5lJTIwQ0FOJTIwbWVzc2FnZXMlMEFpbiUyMHRoZSUyMHNjcmlwdC4lMEEtZGV2bGluZXMlMjBTdXByZXNzJTIwbGluZSUyMG51bWJlcnMlMjBpbiUyMGdlbmVyYXRlZCUyMGNvZGUuJTIwR2VuZXJhdGVzJTIwZmFzdGVyJTIwYW5kJTBBc21hbGxlciUyMGNvZGUlMkMlMjBidXQlMjBsaW5lJTIwbnVtYmVycyUyMGNhbm5vdCUyMGJlJTIwcmVwb3J0ZWQlMjBpbiUyMGV4Y2VwdGlvbnMuJTBBLWclMjBHZW5lcmF0ZSUyMHN5bWJvbCUyMHRhYmxlcyUyMGZvciUyMGRlYnVnLiUwQS1hZGRzcmMlMjBJbmNsdWRlJTIwdGhlJTIwc291cmNlJTIwY29kZS4lMEEtY29tbWVudCUzRFhYWCUyMEluY2x1ZGUlMjB0aGUlMjBjb21tZW50JTIwWFhYLiUwQU5vdGUlMjB0aGF0JTIwc3BhY2VzJTIwY2FuJTIwYmUlMjB1c2VkJTIwaW4lMjBhcmd1bWVudHMlMjAlMjJsaWtlJTIwdGhpcyUyMi4lMEFFbmNyeXB0aW9uJTIwb2YlMjBzY3JpcHQlMjBhbmQlMjBzb3VyY2UlMjBjb2RlJTNBJTBBU2NyaXB0JTIwYW5kJTIwc291cmNlJTIwYXJlJTIwcHJvdGVjdGVkJTIwYnklMjBhJTIwc3ltbWV0cmljJTIwY3J5cHRvJTIwJTI4LXNrZXklMjkuJTIwVGhlJTBBc3ltbWV0cmljJTIwa2V5JTIwaXMlMjB0aGVuJTIwcHJvdGVjdGVkJTIwYnklMjBhJTIwcHVibGljJTIwa2V5JTIwY3J5cHRvJTIwJTI4LXBrZXklMjkuJTBBLXBrZXklM0ROJTIwVXNlJTIwS3Zhc2VyJTIwcHVibGljJTIwa2V5JTIwbnVtYmVyJTIwTi4lMEFEZWZhdWx0JTNBJTBBMCUyMC0lMjAlMjhubyUyMGVuY3J5cHRpb24lMjklMjBpZiUyMG5vJTIwc2tleSUyMGlzJTIwZW50ZXJlZCUwQTIlMjAtJTIwJTI4MTAyNCUyMGJpdCUyMFJTQSUyOSUyMGlmJTIwYSUyMHNrZXklMjBpcyUyMGVudGVyZWQlMEEtc2tleSUzREslMjBVc2UlMjB0aGUlMjBzeW1tZXRyaWMlMjBrZXklMjBLLiUwQUlmJTIwbm8lMjBLJTIwaXMlMjBlbnRlcmVkJTIwYW5kJTIwYSUyMHBrZXklMjBpcyUyQyUyMGElMjByYW5kb20lMjBrZXklMjBLJTIwJTI4aGV4JTI5JTBBd2lsbCUyMGJlJTIwZ2VuZXJhdGVkJTIwZm9yJTIweW91JTBBS2V5JTIwSyUyMGZvcm1hdHMlM0ElMEEtc2tleSUzRDB4MTEyMjMzNDRGRkFDQUMlMjAtJTIwSGV4YWRlY2ltYWwlMjBmb3JtYXQuJTBBLXNrZXklM0RteXNlY3JldGtleSUyMC0lMjBBU0NJSSUyMGZvcm1hdC4lMEFDb250YWlucyUyMG11bHRpcGxlLXByZWNpc2lvbiUyMGFyaXRobWV0aWMlMjBjb2RlJTIwb3JpZ2luYWxseSUyMHdyaXR0ZW4lMjBieSUwQURhdmlkJTIwSXJlbGFuZCUyQyUyMGNvcHlyaWdodCUyMCUyOGMlMjklMjAyMDAxLTglMjBieSUyMEQuSS4lMjBNYW5hZ2VtZW50JTIwU2VydmljZXMlMjBQdHklMjBMaW1pdGVkJTBBJTJDJTIwYW5kJTIwaXMlMjB1c2VkJTIwd2l0aCUyMHBlcm1pc3Npb24u"][vc_raw_html]JTNDc3BhbiUyMGlkJTNEJTIyZm5yLjElMjIlM0UlM0MlMkZzcGFuJTNFJTNDYnIlMkYlM0U=[/vc_raw_html][vc_raw_html]JTNDYnIlMkYlM0U=[/vc_raw_html][vc_raw_html]JTNDYnIlMkYlM0U=[/vc_raw_html][vc_column_text]I would recommend that you always compile with the -comment argument (holding your programs version number beside the descriptive text), and optionally -addsrc which attaches the source t program to the resulting .txe file. A .txe file may be opened using Kvaser TRX1, our lightweight IDE for developing t programs for Kvaser devices, and if the compilation was done using the -addsrc argument, the source code will be shown under the Source tab in the Kvaser TRX built-in .txe Inspector. If you would like to hide your script, you can use encryption to do so.[/vc_column_text][vc_code_raket header="Listing 8: Compiling the t program while adding comment and source code." code="c2NjLmV4ZSUyMG15Q2FuR2VuZXJhdG9yLnQlMjAtYWRkc3JjJTIwLWNvbW1lbnQlM0QlMjJNeSUyMENBTiUyMGdlbmVyYXRvciUyMHByb2dyYW0lMjB2MS4wJTIy"][vc_header_raket header_type="h3" header="2.2 Create a configuration"][vc_column_text]Now that we have the compiled t program, `myCanGenerator.txe', let us create a configuration that includes the compiled t program and also sets up two triggers. The configuration is written in XML format as specified in the document Specification of Kvaser Memorator Device configuration XML format. We create a configuration that sets the bitrate to 1 Mbit/s on channel 0 and 1, adds a trigger statement for CAN message id 3 on CAN channel 0 or 1, and a second trigger statement for CAN message id 6 on CAN channel 1. We specify that the first statement should start logging directly, and the second statement should stop logging after a delay of 2.5 seconds (by using a posttrigger). With this setup, connecting CAN 1 to CAN 2 and having in mind that our script sends one CAN message per second, the expected result is to catch CAN message 3 through 8. The logging starts at CAN message id 3, and stops at CAN message id 6, but since we have a posttrigger of 2.5 seconds, CAN message id 7 and 8 are also expected to end up in the log file. One tag of special note in the XML configuration is the tag BINARY_VERSION, which is used by the conversion library when creating the binary configuration for downloading to the device. Our device (running firmware version 3.0) should use Binary Configuration Format v6.0. For more information about the XML format, please read the Specification of Kvaser Memorator Device configuration XML format.[/vc_column_text][vc_code_raket language="python" code="JTNDJTNGeG1sJTIwdmVyc2lvbiUzRCUyMjEuMCUyMiUyMCUzRiUzRSUwQSUzQyUyMURPQ1RZUEUlMjBLVkFTRVIlM0UlMEElM0NLVkFTRVIlM0UlMEElMjAlMjAlM0NWRVJTSU9OJTNFMi4wJTNDJTJGVkVSU0lPTiUzRSUwQSUyMCUyMCUzQ0JJTkFSWV9WRVJTSU9OJTNFNi4wJTNDJTJGQklOQVJZX1ZFUlNJT04lM0UlMEElMjAlMjAlM0NTRVRUSU5HUyUzRSUwQSUyMCUyMCUyMCUyMCUzQ01PREUlMjBmaWZvX21vZGUlM0QlMjJOTyUyMiUyMGxvZ19hbGwlM0QlMjJOTyUyMiUyRiUzRSUwQSUyMCUyMCUyMCUyMCUzQ0NBTlBPV0VSJTIwdGltZW91dCUzRCUyMjUwMDAlMjIlMkYlM0UlMEElMjAlMjAlM0MlMkZTRVRUSU5HUyUzRSUwQSUyMCUyMCUzQ0NBTl9CVVMlM0UlMEElMjAlMjAlMjAlMjAlM0NQQVJBTUVURVJTJTIwYml0cmF0ZSUzRCUyMjEwMDAwMDAlMjIlMjBjaGFubmVsJTNEJTIyMCUyMiUyMHNpbGVudCUzRCUyMllFUyUyMiUyMHNqdyUzRCUyMjElMjIlMjB0c2VnMSUzRCUyMjUlMjIlMjB0c2VnMiUzRCUyMjIlMjIlMkYlM0UlMEElMjAlMjAlMjAlMjAlM0NQQVJBTUVURVJTJTIwYml0cmF0ZSUzRCUyMjEwMDAwMDAlMjIlMjBjaGFubmVsJTNEJTIyMSUyMiUyMHNpbGVudCUzRCUyMllFUyUyMiUyMHNqdyUzRCUyMjElMjIlMjB0c2VnMSUzRCUyMjUlMjIlMjB0c2VnMiUzRCUyMjIlMjIlMkYlM0UlMEElMjAlMjAlM0MlMkZDQU5fQlVTJTNFJTBBJTIwJTIwJTNDVFJJR0dFUkJMT0NLJTNFJTBBJTIwJTIwJTIwJTIwJTNDVFJJR0dFUlMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlM0NUUklHR0VSX01TR19JRCUyMGNhbl9leHQlM0QlMjJOTyUyMiUyMGNhbl9mZCUzRCUyMk5PJTIyJTIwY2hhbm5lbCUzRCUyMjAlMjIlMjBtc2dpZCUzRCUyMjMlMjIlMjBtc2dpZF9taW4lM0QlMjIzJTIyJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwbmFtZSUzRCUyMnRyaWdnZXJfMCUyMiUyMHByb3RvY29sJTNEJTIyTk9ORSUyMiUyMHRpbWVvdXQlM0QlMjIwJTIyJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTNDVFJJR0dFUl9NU0dfSUQlMjBjYW5fZXh0JTNEJTIyTk8lMjIlMjBjYW5fZmQlM0QlMjJOTyUyMiUyMGNoYW5uZWwlM0QlMjIxJTIyJTIwbXNnaWQlM0QlMjI2JTIyJTIwbXNnaWRfbWluJTNEJTIyNiUyMiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMG5hbWUlM0QlMjJ0cmlnZ2VyXzElMjIlMjBwcm90b2NvbCUzRCUyMk5PTkUlMjIlMjB0aW1lb3V0JTNEJTIyMCUyMiUyRiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUzQ1RSSUdHRVJfTVNHX0lEJTIwY2FuX2V4dCUzRCUyMk5PJTIyJTIwY2FuX2ZkJTNEJTIyTk8lMjIlMjBjaGFubmVsJTNEJTIyMSUyMiUyMG1zZ2lkJTNEJTIyMyUyMiUyMG1zZ2lkX21pbiUzRCUyMjMlMjIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjBuYW1lJTNEJTIydHJpZ2dlcl8yJTIyJTIwcHJvdG9jb2wlM0QlMjJOT05FJTIyJTIwdGltZW91dCUzRCUyMjAlMjIlMkYlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZUUklHR0VSUyUzRSUwQSUyMCUyMCUyMCUyMCUzQ1NUQVRFTUVOVFMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlM0NTVEFURU1FTlQlMjBwb3N0dHJpZ2dlciUzRCUyMjAlMjIlMjBwcmV0cmlnZ2VyJTNEJTIyMCUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ0VYUFJFU1NJT04lM0V0cmlnZ2VyXzAlMjBPUiUyMHRyaWdnZXJfMiUzQyUyRkVYUFJFU1NJT04lM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NBQ1RJT05TJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDQUNUSU9OX1NUQVJUX0xPRyUyRiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRkFDVElPTlMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZTVEFURU1FTlQlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlM0NTVEFURU1FTlQlMjBwb3N0dHJpZ2dlciUzRCUyMjI1MDAlMjIlMjBwcmV0cmlnZ2VyJTNEJTIyMCUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ0VYUFJFU1NJT04lM0V0cmlnZ2VyXzElM0MlMkZFWFBSRVNTSU9OJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDQUNUSU9OUyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ0FDVElPTl9TVE9QX0xPRyUyRiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRkFDVElPTlMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZTVEFURU1FTlQlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZTVEFURU1FTlRTJTNFJTBBJTIwJTIwJTNDJTJGVFJJR0dFUkJMT0NLJTNFJTBBJTIwJTIwJTNDU0NSSVBUUyUzRSUwQSUyMCUyMCUyMCUyMCUzQ1NDUklQVCUyMGRlZmF1bHRfY2hhbm5lbCUzRCUyMjAlMjIlMjBwcmltYXJ5JTNEJTIyWUVTJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTNDRklMRU5BTUUlM0VteUNhbkdlbmVyYXRvci50eGUlM0MlMkZGSUxFTkFNRSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUzQ1BBVEglM0UlM0MlMkZQQVRIJTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGU0NSSVBUJTNFJTBBJTIwJTIwJTNDJTJGU0NSSVBUUyUzRSUwQSUzQyUyRktWQVNFUiUzRQ=="][vc_column_text]

Listing 6: Sample XML configuration.

[/vc_column_text][vc_header_raket header_type="h3" header="2.3 Validating the configuration"][vc_column_text] Even though the conversion from XML configuration to binary configuration will fail if any errors are found, I'd still recommended to do an explicit validation of the XML configuration using kvaMemoLibXml. This validation will give you warnings when you e.g. create a configuration that does not contain any expression to start logging. After the call to validation, we can read out the number of errors and warnings detected, together with a code and text summary of each. [/vc_column_text][vc_code_raket language="python" header="Listing 10: Validating the XML configuration." code="aW1wb3J0JTIwY2FubGliLmt2YU1lbW9MaWJYbWwlMjBhcyUyMGt2YU1lbW9MaWJYbWwlMEElMEF4bCUyMCUzRCUyMGt2YU1lbW9MaWJYbWwua3ZhTWVtb0xpYlhtbCUyOCUyOSUwQXByaW50JTI4JTIya3ZhTWVtb0xpYlhtbCUyMHZlcnNpb24lM0ElMjB2JTIyJTIwJTJCJTIweGwuZ2V0VmVyc2lvbiUyOCUyOSUyOSUwQSUwQSUyMyUyMFJlYWQlMjBpbiUyMHRoZSUyMFhNTCUyMGNvbmZpZ3VyYXRpb24lMjBmaWxlJTBBd2l0aCUyMG9wZW4lMjglMjJjb25maWcueG1sJTIyJTJDJTIwJTI3ciUyNyUyOSUyMGFzJTIwbXlmaWxlJTNBJTBBJTIwJTIwJTIwJTIwY29uZmlnX3htbCUyMCUzRCUyMG15ZmlsZS5yZWFkJTI4JTI5JTBBJTBBJTIzJTIwVmFsaWRhdGUlMjB0aGUlMjBYTUwlMjBjb25maWd1cmF0aW9uJTBBeGwua3ZhWG1sVmFsaWRhdGUlMjhjb25maWdfeG1sJTI5JTBBJTBBJTIzJTIwR2V0JTIwbnVtYmVyJTIwb2YlMjB2YWxpZGF0aW9uJTIwbWVzc2FnZXMlMEElMjhjb3VudEVyciUyQyUyMGNvdW50V2FybiUyOSUyMCUzRCUyMHhsLnhtbEdldFZhbGlkYXRpb25TdGF0dXNDb3VudCUyOCUyOSUwQXByaW50JTI4JTIyRXJyb3JzJTNBJTIwJTI1ZCUyQyUyMFdhcm5pbmdzJTNBJTIwJTI1ZCUyMiUyMCUyNSUyMCUyOGNvdW50RXJyJTJDJTIwY291bnRXYXJuJTI5JTI5JTBBJTBBJTIzJTIwSWYlMjB3ZSUyMGhhdmUlMjBhbnklMjB2YWxpZGF0aW9uJTIwZXJyb3JzJTJDJTIwcHJpbnQlMjB0aG9zZSUwQWlmJTIwY291bnRFcnIlMjAlMjElM0QlMjAwJTNBJTBBJTIwJTIwJTIwJTIwY29kZSUyMCUzRCUyMC0xJTBBJTIwJTIwJTIwJTIwd2hpbGUlMjBjb2RlJTIwJTIxJTNEJTIwMCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyOGNvZGUlMkMlMjB0ZXh0JTI5JTIwJTNEJTIweGwueG1sR2V0VmFsaWRhdGlvbkVycm9yJTI4JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjIlMjVkJTNBJTIwJTI1cyUyMiUyMCUyNSUyMCUyOGNvZGUlMkMlMjB0ZXh0JTI5JTI5JTBBJTBBJTIzJTIwSWYlMjB3ZSUyMGhhdmUlMjBhbnklMjB2YWxpZGF0aW9uJTIwd2FybmluZ3MlMkMlMjBwcmludCUyMHRob3NlJTBBaWYlMjBjb3VudFdhcm4lMjAlMjElM0QlMjAwJTNBJTBBJTIwJTIwJTIwJTIwY29kZSUyMCUzRCUyMC0xJTBBJTIwJTIwJTIwJTIwd2hpbGUlMjBjb2RlJTIwJTIxJTNEJTIwMCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyOGNvZGUlMkMlMjB0ZXh0JTI5JTIwJTNEJTIweGwueG1sR2V0VmFsaWRhdGlvbldhcm5pbmclMjglMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOCUyMiUyNWQlM0ElMjAlMjVzJTIyJTIwJTI1JTIwJTI4Y29kZSUyQyUyMHRleHQlMjklMjklMEElMEElMjMlMjBFeGl0JTIwaWYlMjB3ZSUyMGhhZCUyMGFueSUyMHZhbGlkYXRpb24lMjBlcnJvcnMlMjBvciUyMHdhcm5pbmdzJTBBaWYlMjBjb3VudEVyciUyMCUyMSUzRCUyMDAlMjBvciUyMGNvdW50V2FybiUyMCUyMSUzRCUyMDAlM0ElMEElMjAlMjAlMjAlMjByYWlzZSUyMEV4Y2VwdGlvbiUyOCUyN1BsZWFzZSUyMGZpeCUyMHZhbGlkYXRpb24lMjBFcnJvcnMlMkZXYXJuaW5ncy4lMjclMjk="][vc_column_text]

Listing 7: Validating the XML configuration.

[/vc_column_text][vc_column_text]This post added some complexity to the configuration, in the next part we will go back into kvmlib and see how calling kvmlib works in depth.[/vc_column_text][vc_header_raket header_type="h3" header="Footnotes"][vc_column_text]1 The Kvaser TRX tool is a light weight IDE for developing t programs for Kvaser devices.[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column width="1/2"][vc_button_raket title="Getting started with kvmlib" text="Part One" page_id="https://www.kvaser.com/developer-blog/getting-started-with-kvmlib/ "][/vc_column][vc_column width="1/2"][vc_button_raket title="Digging deeper into kvmlib" text="Part Three" page_id="https://www.kvaser.com/developer-blog/digging-deeper-into-kvmlib/"][/vc_column][/vc_row][vc_row][vc_column][vc_raw_html]JTNDYnIlMjAlMkYlM0U=[/vc_raw_html][vc_separator_raket][vc_message]This article has been updated. To view the original, click on the box below.[/vc_message][vc_accordion active_tab="0" collapsible="yes"][vc_accordion_tab title="Original Article"][vc_column_text]Original article published April 5, 2016[/vc_column_text][vc_message]This blog uses now deprecated functions, see blog "Improved API in Python canlib v1.5" for more information.[/vc_message][vc_column_text]

1 Getting started with kvmlib

2 Adding script and triggers to a configuration 3 Digging deeper into kvmlib 4 Configure an SD card using kvmlib[/vc_column_text][vc_column_text]In the first part we showed how to use kvmlib to configure a device using a simple configuration that logged everything. Let us now increase the complexity of our configuration by adding a t program and some triggers.[/vc_column_text][vc_raw_html]JTNDYnIlMjAlMkYlM0U=[/vc_raw_html][vc_header_raket header_type="h3" header="2.1 Prepare a t program to be included in the configuration"][vc_column_text]Let’s take a t program that generates some CAN traffic and add that to the configuration for testing purposes. This script is actually part of a test where we verify that start and stop of logging can be controlled using triggers. The script itself sends a CAN message every second, starting at 0.5 s from the time the script was started. The CAN message id is incremented by one for each sent CAN message. In total, 11 CAN messages are sent on the CAN bus.[/vc_column_text][vc_code_raket code="JTJGJTJGJTIwVGhpcyUyMHNjcmlwdCUyMGlzJTIwaW50ZW5kZWQlMjB0byUyMGJlJTIwdXNlZCUyMHRvJTIwY2hlY2slMjBhJTIwY29uZmlndXJhdGlvbiUyMHNldCUyMGFzJTNBJTBBJTJGJTJGJTBBJTJGJTJGJTIwJTVCJTIwJTVEJTIwTG9nJTIwZXZlcnl0aGluZyUwQSUyRiUyRiUyMCU1QiUyMCU1RCUyMEZJRk8lMjBtb2RlJTBBJTJGJTJGJTIwUG93ZXIlMjBzZXR0aW5ncyUzQSUyMDUlMjBUaW1lJTIwdG8lMjBsaXZlJTIwYWZ0ZXIlMjBDQU4lMjBwb3dlciUyMGRpc2Nvbm5lY3RlZCUyQyUyMGluJTIwc2Vjb25kcyUwQSUyRiUyRiUwQSUyRiUyRiUyMENBTiUyMDElMjBzaG91bGQlMjBiZSUyMGNvbm5lY3RlZCUyMHRvJTIwQ0FOJTIwMiUwQSUyRiUyRiUwQSUyRiUyRiUyMFRyaWdnZXJzJTNBJTBBJTJGJTJGJTIwQ0FOMSUyMFRyaWdnZXIxJTIwVGltZXIlMjAlNUI0cyU1RCUyMCUzQSUyMFN0YXJ0JTIwbG9nZ2luZyUyQyUyMHBvc3QtdHJpZ2dlciUzRDAlMEElMkYlMkYlMjBDQU4xJTIwVHJpZ2dlcjIlMjBUaW1lciUyMCU1QjdzJTVEJTIwJTNBJTIwU3RvcCUyMGxvZ2dpbmclMkMlMjBwb3N0LXRyaWdnZXIlM0QzMDAwJTBBJTJGJTJGJTBBJTJGJTJGJTIwU2NyaXB0JTIwc2VuZHMlMjBtc2clMjBpZCUzQSUwQSUyRiUyRiUyMElkJTIwMSUyMGF0JTIwMC41cyUwQSUyRiUyRiUyMElkJTIwMiUyMGF0JTIwMS41cyUwQSUyRiUyRiUyMElkJTIwMyUyMGF0JTIwMi41cyUwQSUyRiUyRiUyMElkJTIwNCUyMGF0JTIwMy41cyUwQSUyRiUyRiUyMElkJTIwNSUyMGF0JTIwNC41cyUwQSUyRiUyRiUyMC4uLiUyMGFuZCUyMHNvJTIwb24lMjB1bnRpbCUwQSUyRiUyRiUyMElkJTIwMTElMjBhdCUyMDEwLjVzJTBBJTBBdmFyaWFibGVzJTIwJTdCJTBBJTIwJTIwJTJGJTJGJTIwQmFzZSUyMGNoYW5uZWwuJTIwQ0FOJTIwbWVzc2FnZXMlMjB3aWxsJTIwYmUlMjBzZW50JTIwb24lMjBjaGFubmVsJTIwY2glMjBhbmQlMjByZWNlaXZlZCUyMG9uJTBBJTIwJTIwJTJGJTJGJTIwY2hhbm5lbCUyMGNoJTIwJTJCJTIwMSUwQSUyMCUyMGNvbnN0JTIwaW50JTIwY2glMjAlM0QlMjAwJTNCJTBBJTBBJTIwJTIwJTJGJTJGJTIwVGhlJTIwc2luZ2xlc2hvdCUyMHRpbWVyJTIwaXMlMjB1c2VkJTIwdG8lMjBnZXQlMjBhJTIwZGVsYXklMjBiZWZvcmUlMjB0aGUlMjBmaXJzdCUyMENBTiUyMG1lc3NhZ2UlMEElMjAlMjAlMkYlMkYlMjBpcyUyMHNlbnQuJTBBJTIwJTIwVGltZXIlMjBzaW5nbGVzaG90JTNCJTBBJTBBJTIwJTIwJTJGJTJGJTIwVGhlJTIwcGVyaW9kaWMlMjB0aW1lciUyMGlzJTIwdGhlbiUyMHVzZWQlMjBiZXR3ZWVuJTIwZWFjaCUyMENBTiUyMG1lc3NhZ2UlMEElMjAlMjBUaW1lciUyMHBlcmlvZGljJTNCJTBBJTBBJTIwJTIwJTJGJTJGJTIwVGhlJTIwbWVzc2FnZSUyMGlkJTIwb2YlMjB0aGUlMjBzZW50JTIwQ0FOJTIwbWVzc2FnZXMlMkMlMjB3aWxsJTIwYmUlMjBpbmNyZW1lbnRlZCUwQSUyMCUyMGludCUyMG1zZ0lkJTIwJTNEJTIwMSUzQiUwQSUwQSUyMCUyMCUyRiUyRiUyMFRoZSUyMENBTiUyMG1lc3NhZ2UlMjB0byUyMGJlJTIwc2VudCUwQSUyMCUyMENhbk1lc3NhZ2UlMjBtc2clM0IlMEElN0QlMEElMEFvbiUyMFRpbWVyJTIwc2luZ2xlc2hvdCUyMCU3QiUwQSUyMCUyMCUyRiUyRiUyMFN0YXJ0JTIwdGhlJTIwcGVyaW9kaWMlMjB0aW1lciUyMHRvJTIwc2VuZCUyMDEwJTIwbW9yZSUyMENBTiUyMG1lc3NhZ2VzJTBBJTIwJTIwdGltZXJTdGFydCUyOHBlcmlvZGljJTJDJTIwMTAlMjklM0IlMEElMEElMjAlMjAlMkYlMkYlMjBBZnRlciUyMHVzaW5nJTIwdGhlJTIwY3VycmVudCUyMENBTiUyMG1lc3NhZ2UlMjBpZCUyQyUyMGluY3JlbWVudCUyMGJlZm9yZSUyMG5leHQlMjB1c2UlMEElMjAlMjBtc2cuaWQlMjAlM0QlMjBtc2dJZCUyQiUyQiUzQiUwQSUyMCUyMG1zZy5mbGFncyUyMCUzRCUyMDAlM0IlMEElMjAlMjBtc2cuZGxjJTIwJTNEJTIwOCUzQiUwQSUyMCUyMG1zZy5kYXRhJTIwJTNEJTIwJTIyJTVDeDEyJTVDeDIxJTVDeDEzJTVDeDMxJTVDeDIyJTVDeDM0JTVDeDQxJTVDeDE1JTIyJTNCJTBBJTBBJTIwJTIwJTJGJTJGJTIwU2VuZCUyMENBTiUyMG1lc3NhZ2UlMEElMjAlMjBjYW5Xcml0ZSUyOGNoJTJDJTIwbXNnJTI5JTNCJTBBJTIwJTIwcHJpbnRmJTI4JTIyU2luZ2xlJTIwc2hvdCUyME1zZ0lkJTNBJTIwJTI1ZCU1Q24lMjIlMkMlMjBtc2cuaWQlMjklM0IlMEElN0QlMEElMEFvbiUyMFRpbWVyJTIwcGVyaW9kaWMlMjAlN0IlMEElMjAlMjAlMkYlMkYlMjBBZnRlciUyMHVzaW5nJTIwdGhlJTIwY3VycmVudCUyMENBTiUyMG1lc3NhZ2UlMjBpZCUyQyUyMGluY3JlbWVudCUyMGJlZm9yZSUyMG5leHQlMjB1c2UlMEElMjAlMjBtc2cuaWQlMjAlM0QlMjBtc2dJZCUyQiUyQiUzQiUwQSUwQSUyMCUyMCUyRiUyRiUyMFNlbmQlMjBDQU4lMjBtZXNzYWdlJTBBJTIwJTIwY2FuV3JpdGUlMjhjaCUyQyUyMG1zZyUyOSUzQiUwQSUyMCUyMHByaW50ZiUyOCUyMlBlcmlvZGljJTIwTXNnSWQlM0ElMjAlMjVkJTVDbiUyMiUyQyUyMG1zZy5pZCUyOSUzQiUwQSUyMCUyMGlmJTIwJTI4JTIxdGltZXJJc1BlbmRpbmclMjhwZXJpb2RpYyUyOSUyOSUyMCU3QiUwQSUyMCUyMCUyMCUyMHByaW50ZiUyOCUyMlRpbWVyJTIwZG9uZSUyMSUyMiUyOSUzQiUwQSUyMCUyMCU3RCUwQSU3RCUwQSUwQW9uJTIwc3RhcnQlMjAlN0IlMEElMjAlMjBwcmludGYlMjglMjJTdGFydGluZyUyMHRlc3Rsb2dnZXIlMjBjb21wYW5pb24lMjBzY3JpcHQlNUNuJTIyJTI5JTNCJTBBJTBBJTIwJTIwJTJGJTJGJTIwU2V0dXAlMjB0aGUlMjB0d28lMjBDQU4lMjBjaGFubmVscyUyMGFuZCUyMGdvJTIwYnVzJTIwb24uJTBBJTIwJTIwJTJGJTJGJTIwVGhpcyUyMHdpbGwlMjBvdmVycmlkZSUyMHRoZSUyMHNldHRpbmdzJTIwaW4lMjB0aGUlMjBiaW5hcnklMjBjb25maWd1cmF0aW9uJTJDJTBBJTIwJTIwJTJGJTJGJTIwbW9zdCUyMG5vdGFibHklMjB0aGUlMjBjaGFubmVscyUyMHdpbGwlMjBubyUyMGxvbmdlciUyMGJlJTIwaW4lMjBzaWxlbnQlMjBtb2RlLiUwQSUyMCUyMGNhbkJ1c09mZiUyOGNoJTI5JTNCJTBBJTIwJTIwY2FuQnVzT2ZmJTI4Y2glMjAlMkIlMjAxJTI5JTNCJTBBJTIwJTIwY2FuU2V0Qml0cmF0ZSUyOGNoJTJDJTIwY2FuQklUUkFURV8xTSUyOSUzQiUwQSUyMCUyMGNhblNldEJpdHJhdGUlMjhjaCUyMCUyQiUyMDElMkMlMjBjYW5CSVRSQVRFXzFNJTI5JTNCJTBBJTIwJTIwY2FuU2V0QnVzT3V0cHV0Q29udHJvbCUyOGNoJTJDJTIwY2FuRFJJVkVSX05PUk1BTCUyOSUzQiUwQSUyMCUyMGNhblNldEJ1c091dHB1dENvbnRyb2wlMjhjaCUyMCUyQiUyMDElMkMlMjBjYW5EUklWRVJfTk9STUFMJTI5JTNCJTBBJTIwJTIwY2FuQnVzT24lMjhjaCUyOSUzQiUwQSUyMCUyMGNhbkJ1c09uJTI4Y2glMjAlMkIlMjAxJTI5JTNCJTBBJTBBJTIwJTIwc2luZ2xlc2hvdC50aW1lb3V0JTIwJTNEJTIwNTAwJTNCJTIwJTJGJTJGJTIwV2FpdCUyMGhhbGYlMjBhJTIwc2Vjb25kJTBBJTIwJTIwcGVyaW9kaWMudGltZW91dCUyMCUzRCUyMDEwMDAlM0IlMjAlMkYlMkYlMjBPbmUlMjBzZWNvbmQlMjBwZXJpb2QlMEElMEElMjAlMjAlMkYlMkYlMjBTdGFydCUyMHRoZSUyMHNpbmdsZXNob3QlMjB0aW1lciUyMHRvJTIwc2VuZCUyMHRoZSUyMGZpcnN0JTIwQ0FOJTIwbWVzc2FnZSUwQSUyMCUyMHRpbWVyU3RhcnQlMjhzaW5nbGVzaG90JTI5JTNCJTBBJTIwJTIwcHJpbnRmJTI4JTIyU3RhcnQlMjBwZXJpb2RpYyUyMHRyYW5zbWlzc2lvbiU1Q24lMjIlMjklM0IlMEElN0QlMEElMEFvbiUyMHN0b3AlMjAlN0IlMEElMjAlMjBwcmludGYlMjglMjJTdG9wcGluZyUyMHNjcmlwdCU1Q24lMjIlMjklM0IlMEElMjAlMjBjYW5CdXNPZmYlMjhjaCUyOSUzQiUwQSUyMCUyMGNhbkJ1c09mZiUyOGNoJTIwJTJCJTIwMSUyOSUzQiUwQSU3RA=="][vc_column_text]

Listing 7: A sample t program that generates CAN messages.

[/vc_column_text][vc_column_text]The t program needs to be compiled before being added to the configuration. The t compiler is called scc.exe 5 and is normally placed at C:\Program Files (x86)\Kvaser\Canlib\Bin\scc.exe when the Kvaser CANlib SDK is installed. The usage help will be printed if invoked without any arguments.[/vc_column_text][vc_column_text]
scc.exe
No input file found.

Script compiler for Kvaser t-script.
This is version 3.8.505 (BETA) built on Tue Jun 05 10:19:55 2018.

Usage:

scc [-v -verbose] [-c] [-g] [-dx] [-devlines]
    [-addsrc] [-comment=XXX]
]
    [-pkey=N] [-skey=K]
@] [-dbase=] 

 where
  -c              Compile only. No output is produced.
  -dbase=XXX.dbc  Use the database XXX.dbc to define CAN messages
                  in the script.
  -devlines       Supress line numbers in generated code. Generates faster and
                  smaller code, but line numbers cannot be reported in exceptions.
  -g              Generate symbol tables for debug.
  -addsrc         Include the source code.
  -comment=XXX    Include the comment XXX.
Search for <> include files in .

Note that spaces can be used in arguments "like this".

  Encryption of script and source code:

  Script and source are protected by a symmetric crypto (-skey). The
  symmetric key is then protected by a public key crypto (-pkey).

  -pkey=N         Use Kvaser public key number N.
                  Default:
                  0 - (no encryption) if no skey is entered
                  2 - (1024 bit RSA) if a skey is entered
  -skey=K         Use the symmetric key K.
                  If no K is entered and a pkey is, a random key K (hex)
                  will be generated for you
                  Key K formats:
                  -skey=0x11223344FFACAC  - Hexadecimal format.
                  -skey=mysecretkey       - ASCII format.

  Contains multiple-precision arithmetic code originally written by
  David Ireland, copyright (c) 2001-8 by D.I. Management Services Pty Limited
, and is used with permission.
[/vc_column_text][vc_column_text]I would recommend that you always compile with the -comment argument (holding your programs version number beside the descriptive text), and optionally -addsrcwhich attaches the source t program to the resulting .txe file. A .txe file may be opened using Kvaser TRX 1 and if the compilation was done using the -addsrcargument, the source code will be shown under the Source tab in the Kvaser TRX built-in .txe Inspector. If you would like to hide your script, you can use encryption to do so.[/vc_column_text][vc_column_text]
scc.exe myCanGenerator.t -addsrc -comment="My CAN generator program v1.0"
Source size: 2516 bytes
Compilation succeeded
[/vc_column_text][vc_header_raket header_type="h3" header="2.2 Create a configuration"][vc_column_text]Now that we have the compiled t program, myCanGenerator.txe, let us create a configuration that includes this compiled t program and also sets up two triggers. The configuration is written in XML format as specified in the document Specification of Kvaser Memorator Device configuration XML format.7 We create a configuration that sets the bitrate to 1 Mbit/s on channel 0 and 1, adds a trigger statement for CAN message id 3 on CAN channel 0 or 1, and a second trigger statement for CAN message id 6 on CAN channel 1. We specify that the first statement should start logging directly, and the second statement should stop logging after a delay of 2.5 seconds (by using a posttrigger). With this setup, connecting CAN 1 to CAN 2 and having in mind that our script sends one CAN message per second, the expected result is to catch CAN message 3 through 8. The logging starts at CAN message id 3, and stops at CAN message id 6, but since we have a posttrigger of 2.5 seconds, CAN message id 7 and 8 are also expected to end up in the log file. One tag of special note in the XML configuration is the tag BINARY_VERSION, which is used by the conversion library when creating the binary configuration for downloading to the device. Our device (running firmware version 3.11) should use Binary Configuration Format v6.0. For more information about the XML format, please read the Specification of Kvaser Memorator Device configuration XML format.[/vc_column_text][vc_code_raket language="python" code="JTNDJTNGeG1sJTIwdmVyc2lvbiUzRCUyMjEuMCUyMiUyMCUzRiUzRSUwQSUzQyUyMS0tJTIwY29uZmlnLnhtbCUyMC0tJTNFJTBBJTNDJTIxRE9DVFlQRSUyMEtWQVNFUiUzRSUwQSUzQ0tWQVNFUiUzRSUwQSUyMCUyMCUzQ1ZFUlNJT04lM0UyLjAlM0MlMkZWRVJTSU9OJTNFJTBBJTIwJTIwJTNDQklOQVJZX1ZFUlNJT04lM0U2LjAlM0MlMkZCSU5BUllfVkVSU0lPTiUzRSUwQSUyMCUyMCUzQ1NFVFRJTkdTJTNFJTBBJTIwJTIwJTIwJTIwJTNDTU9ERSUyMGZpZm9fbW9kZSUzRCUyMk5PJTIyJTIwbG9nX2FsbCUzRCUyMk5PJTIyJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTNDQ0FOUE9XRVIlMjB0aW1lb3V0JTNEJTIyMCUyMiUyRiUzRSUwQSUyMCUyMCUzQyUyRlNFVFRJTkdTJTNFJTBBJTIwJTIwJTNDQ0FOX0JVUyUzRSUwQSUyMCUyMCUyMCUyMCUzQ1BBUkFNRVRFUlMlMjBiaXRyYXRlJTNEJTIyMTAwMDAwMCUyMiUyMGNoYW5uZWwlM0QlMjIwJTIyJTIwc2lsZW50JTNEJTIyWUVTJTIyJTIwc2p3JTNEJTIyMSUyMiUyMHRzZWcxJTNEJTIyNSUyMiUyMHRzZWcyJTNEJTIyMiUyMiUyRiUzRSUwQSUyMCUyMCUyMCUyMCUzQ1BBUkFNRVRFUlMlMjBiaXRyYXRlJTNEJTIyMTAwMDAwMCUyMiUyMGNoYW5uZWwlM0QlMjIxJTIyJTIwc2lsZW50JTNEJTIyWUVTJTIyJTIwc2p3JTNEJTIyMSUyMiUyMHRzZWcxJTNEJTIyNSUyMiUyMHRzZWcyJTNEJTIyMiUyMiUyRiUzRSUwQSUyMCUyMCUzQyUyRkNBTl9CVVMlM0UlMEElMjAlMjAlM0NUUklHR0VSQkxPQ0slM0UlMEElMjAlMjAlMjAlMjAlM0NUUklHR0VSUyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUzQ1RSSUdHRVJfTVNHX0lEJTIwY2FuX2V4dCUzRCUyMk5PJTIyJTIwY2FuX2ZkJTNEJTIyTk8lMjIlMjBjaGFubmVsJTNEJTIyMCUyMiUyMG1zZ2lkJTNEJTIyMyUyMiUyMG1zZ2lkX21pbiUzRCUyMjMlMjIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjBuYW1lJTNEJTIydHJpZ2dlcl8wJTIyJTIwcHJvdG9jb2wlM0QlMjJOT05FJTIyJTIwdGltZW91dCUzRCUyMjAlMjIlMkYlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlM0NUUklHR0VSX01TR19JRCUyMGNhbl9leHQlM0QlMjJOTyUyMiUyMGNhbl9mZCUzRCUyMk5PJTIyJTIwY2hhbm5lbCUzRCUyMjElMjIlMjBtc2dpZCUzRCUyMjYlMjIlMjBtc2dpZF9taW4lM0QlMjI2JTIyJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwbmFtZSUzRCUyMnRyaWdnZXJfMSUyMiUyMHByb3RvY29sJTNEJTIyTk9ORSUyMiUyMHRpbWVvdXQlM0QlMjIwJTIyJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTNDVFJJR0dFUl9NU0dfSUQlMjBjYW5fZXh0JTNEJTIyTk8lMjIlMjBjYW5fZmQlM0QlMjJOTyUyMiUyMGNoYW5uZWwlM0QlMjIxJTIyJTIwbXNnaWQlM0QlMjIzJTIyJTIwbXNnaWRfbWluJTNEJTIyMyUyMiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMG5hbWUlM0QlMjJ0cmlnZ2VyXzIlMjIlMjBwcm90b2NvbCUzRCUyMk5PTkUlMjIlMjB0aW1lb3V0JTNEJTIyMCUyMiUyRiUzRSUwQSUyMCUyMCUyMCUyMCUzQyUyRlRSSUdHRVJTJTNFJTBBJTIwJTIwJTIwJTIwJTNDU1RBVEVNRU5UUyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUzQ1NUQVRFTUVOVCUyMHBvc3R0cmlnZ2VyJTNEJTIyMCUyMiUyMHByZXRyaWdnZXIlM0QlMjIwJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDRVhQUkVTU0lPTiUzRXRyaWdnZXJfMCUyME9SJTIwdHJpZ2dlcl8yJTNDJTJGRVhQUkVTU0lPTiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ0FDVElPTlMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NBQ1RJT05fU1RBUlRfTE9HJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGQUNUSU9OUyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRlNUQVRFTUVOVCUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUzQ1NUQVRFTUVOVCUyMHBvc3R0cmlnZ2VyJTNEJTIyMjUwMCUyMiUyMHByZXRyaWdnZXIlM0QlMjIwJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDRVhQUkVTU0lPTiUzRXRyaWdnZXJfMSUzQyUyRkVYUFJFU1NJT04lM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NBQ1RJT05TJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDQUNUSU9OX1NUT1BfTE9HJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGQUNUSU9OUyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRlNUQVRFTUVOVCUzRSUwQSUyMCUyMCUyMCUyMCUzQyUyRlNUQVRFTUVOVFMlM0UlMEElMjAlMjAlM0MlMkZUUklHR0VSQkxPQ0slM0UlMEElMjAlMjAlM0NTQ1JJUFRTJTNFJTBBJTIwJTIwJTIwJTIwJTNDU0NSSVBUJTIwZGVmYXVsdF9jaGFubmVsJTNEJTIyMCUyMiUyMHByaW1hcnklM0QlMjJZRVMlMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlM0NGSUxFTkFNRSUzRW15Q2FuR2VuZXJhdG9yLnR4ZSUzQyUyRkZJTEVOQU1FJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTNDUEFUSCUzRSUzQyUyRlBBVEglM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZTQ1JJUFQlM0UlMEElMjAlMjAlM0MlMkZTQ1JJUFRTJTNFJTBBJTNDJTJGS1ZBU0VSJTNF"][vc_column_text]

Listing 9: Sample XML configuration.

[/vc_column_text][vc_header_raket header_type="h3" header="2.3 Validating the configuration"][vc_column_text]Even though the conversion from XML configuration to binary configuration will fail if any errors are found, I’d still recommended to do an explicit validation of the XML configuration using kvaMemoLibXml. This validation will give you warnings when you e.g. create a configuration that does not contain any expression to start logging. After the call to validation, we can read out the number of errors and warnings detected, together with a code and text summary of each.[/vc_column_text][vc_code_raket language="python" header="Listing 10: Validating the XML confi" code="JTIzJTIwMDRfdmFsaWRhdGVfeG1sLnB5JTBBZnJvbSUyMGNhbmxpYiUyMGltcG9ydCUyMGt2YW1lbW9saWJ4bWwlMjBhcyUyMHhsJTBBJTBBcHJpbnQlMjglMjdrdmFNZW1vTGliWG1sJTIwdmVyc2lvbiUzQSUyMHYlN0IlN0QlMjcuZm9ybWF0JTI4eGwuZGxsdmVyc2lvbiUyOCUyOSUyOSUyOSUwQSUwQSUyMyUyMFJlYWQlMjBpbiUyMHRoZSUyMFhNTCUyMGNvbmZpZ3VyYXRpb24lMjBmaWxlJTBBd2l0aCUyMG9wZW4lMjglMjJjb25maWcueG1sJTIyJTJDJTIwJTI3ciUyNyUyOSUyMGFzJTIwbXlmaWxlJTNBJTBBJTIwJTIwJTIwJTIwY29uZmlnX3htbCUyMCUzRCUyMG15ZmlsZS5yZWFkJTI4JTI5JTBBJTBBJTIzJTIwVmFsaWRhdGUlMjB0aGUlMjBYTUwlMjBjb25maWd1cmF0aW9uJTBBeGwua3ZhWG1sVmFsaWRhdGUlMjhjb25maWdfeG1sJTI5JTBBJTBBJTIzJTIwR2V0JTIwbnVtYmVyJTIwb2YlMjB2YWxpZGF0aW9uJTIwbWVzc2FnZXMlMEElMjhjb3VudEVyciUyQyUyMGNvdW50V2FybiUyOSUyMCUzRCUyMHhsLnhtbEdldFZhbGlkYXRpb25TdGF0dXNDb3VudCUyOCUyOSUwQXByaW50JTI4JTI3RXJyb3JzJTNBJTIwJTdCJTdEJTJDJTIwV2FybmluZ3MlM0ElMjAlN0IlN0QlMjcuZm9ybWF0JTI4Y291bnRFcnIlMkMlMjBjb3VudFdhcm4lMjklMjklMEElMEElMjMlMjBJZiUyMHdlJTIwaGF2ZSUyMGFueSUyMHZhbGlkYXRpb24lMjBlcnJvcnMlMkMlMjBwcmludCUyMHRob3NlJTBBaWYlMjBjb3VudEVyciUyMCUyMSUzRCUyMDAlM0ElMEElMjAlMjAlMjAlMjBjb2RlJTIwJTNEJTIwLTElMEElMjAlMjAlMjAlMjB3aGlsZSUyMGNvZGUlMjAlMjElM0QlMjAwJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTI4Y29kZSUyQyUyMHRleHQlMjklMjAlM0QlMjB4bC54bWxHZXRWYWxpZGF0aW9uRXJyb3IlMjglMjklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmludCUyOCUyNyU3QiU3RCUzQSUyMCU3QiU3RCUyNy5mb3JtYXQlMjhjb2RlJTJDJTIwdGV4dCUyOSUyOSUwQSUwQSUyMyUyMElmJTIwd2UlMjBoYXZlJTIwYW55JTIwdmFsaWRhdGlvbiUyMHdhcm5pbmdzJTJDJTIwcHJpbnQlMjB0aG9zZSUwQWlmJTIwY291bnRXYXJuJTIwJTIxJTNEJTIwMCUzQSUwQSUyMCUyMCUyMCUyMGNvZGUlMjAlM0QlMjAtMSUwQSUyMCUyMCUyMCUyMHdoaWxlJTIwY29kZSUyMCUyMSUzRCUyMDAlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjhjb2RlJTJDJTIwdGV4dCUyOSUyMCUzRCUyMHhsLnhtbEdldFZhbGlkYXRpb25XYXJuaW5nJTI4JTI5JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJpbnQlMjglMjclN0IlN0QlM0ElMjAlN0IlN0QlMjcuZm9ybWF0JTI4Y29kZSUyQyUyMHRleHQlMjklMjklMEElMEElMjMlMjBFeGl0JTIwaWYlMjB3ZSUyMGhhZCUyMGFueSUyMHZhbGlkYXRpb24lMjBlcnJvcnMlMjBvciUyMHdhcm5pbmdzJTBBaWYlMjBjb3VudEVyciUyMCUyMSUzRCUyMDAlMjBvciUyMGNvdW50V2FybiUyMCUyMSUzRCUyMDAlM0ElMEElMjAlMjAlMjAlMjAlMjMlMjByYWlzZSUyMEV4Y2VwdGlvbiUyOCUyN1BsZWFzZSUyMGZpeCUyMHZhbGlkYXRpb24lMjBFcnJvcnMlMkZXYXJuaW5ncy4lMjclMjklMEElMjAlMjAlMjAlMjBwcmludCUyOCUyN1BsZWFzZSUyMGZpeCUyMHZhbGlkYXRpb24lMjBFcnJvcnMlMkZXYXJuaW5ncy4lMjclMjk="][vc_column_text]

Listing 10: Validating the XML configuration.

[/vc_column_text][vc_column_text] This post added some complexity to the configuration, in the next part we will go back into kvmlib and see how calling kvmlib works at the C API level. [/vc_column_text][vc_header_raket header_type="h3" header="Footnotes"][vc_column_text]1 The Kvaser TRX tool is a light weight IDE for developing t programs for Kvaser devices.[/vc_column_text][vc_button_raket title="Getting started with kvmlib" text="Part One" page_id="https://www.kvaser.com/developer-blog/getting-started-with-kvmlib/ "][vc_button_raket title="Digging deeper into kvmlib" text="Part Three" page_id="https://www.kvaser.com/developer-blog/digging-deeper-into-kvmlib/"][/vc_accordion_tab][/vc_accordion][/vc_column][/vc_row] [post_title] => Adding script and triggers to a configuration [post_excerpt] => [post_status] => publish [comment_status] => closed [ping_status] => closed [post_password] => [post_name] => adding-script-and-triggers-to-a-configuration [to_ping] => [pinged] => [post_modified] => 2019-01-24 10:34:11 [post_modified_gmt] => 2019-01-24 10:34:11 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?post_type=developer_blog&p=11509 [menu_order] => 0 [post_type] => developer_blog [post_mime_type] => [comment_count] => 0 [filter] => raw ) ) [post_count] => 10 [current_post] => -1 [in_the_loop] => [post] => WP_Post Object ( [ID] => 22202 [post_author] => 5 [post_date] => 2018-10-16 20:17:43 [post_date_gmt] => 2018-10-16 20:17:43 [post_content] => [vc_row][vc_column][vc_single_image image="22241"][vc_column_text]We like to keep up-to-date on applications of CAN in the fields of autonomous vehicles and agricultural machinery, but we’re really excited about one of our university partners who is working at the intersection of both fields, using the CAN bus to develop autonomous agricultural vehicles.[/vc_column_text][vc_column_text]Santosh K. Pitla, Ph.D., is Assistant Professor of Advanced Machinery Systems at the University of NebraskaLincoln, a school well known for its agriculture and land management programs. His research has focused on improving efficiencies within agricultural machinery, specifically in tractors.[/vc_column_text][vc_column_text]In a new case study, we review two of Dr. Pitla’s research projects and how he is using Kvaser devices to advance the possibilities of agricultural technology to meet demands for increased efficiency on large-scale industrial farming operations.[/vc_column_text][vc_column_text]For one project, Dr. Pitla and his team have developed and built a field-ready 40-horsepower robotic tractor, nicknamed the “Flex-Ro,” using a Kvaser Leaf Light HS v2 to establish communication between the high-level software and the distributed CAN controllers within the autonomous vehicle platform.[/vc_column_text][vc_column_text]Another of Dr. Pitla’s projects uses a Kvaser USBcan Pro 2xHS v2 to collect operational data from tractors in the field to determine the real-time load demands of the vehicles depending on different tasks, terrains, implements used, times of the year and operators. Analyzing the data collected from the tractor’s CAN bus will create a better understanding of actual tractor power consumption in varying conditions, and can be used to create more accurate estimates of average load conditions.[/vc_column_text][vc_column_text]Read the full case study here.[/vc_column_text][vc_column_text]To learn how Kvaser supports the work of students and university teams working on CAN-related projects, read about our university sponsorship program.[/vc_column_text][/vc_column][/vc_row] [post_title] => CAN-Enabled Autonomous Agricultural Machinery at the University of Nebraska–Lincoln [post_excerpt] => [post_status] => publish [comment_status] => open [ping_status] => open [post_password] => [post_name] => can-enabled-autonomous-agricultural-machinery-at-the-university-of-nebraska-lincoln [to_ping] => [pinged] => [post_modified] => 2018-10-11 20:47:15 [post_modified_gmt] => 2018-10-11 20:47:15 [post_content_filtered] => [post_parent] => 0 [guid] => https://www.kvaser.com/?p=22202 [menu_order] => 0 [post_type] => post [post_mime_type] => [comment_count] => 0 [filter] => raw ) [comment_count] => 0 [current_comment] => -1 [found_posts] => 469 [max_num_pages] => 47 [max_num_comment_pages] => 0 [is_single] => [is_preview] => [is_page] => [is_archive] => [is_date] => [is_year] => [is_month] => [is_day] => [is_time] => [is_author] => [is_category] => [is_tag] => [is_tax] => [is_search] => [is_feed] => [is_comment_feed] => [is_trackback] => [is_home] => 1 [is_privacy_policy] => [is_404] => [is_embed] => [is_paged] => 1 [is_admin] => [is_attachment] => [is_singular] => [is_robots] => [is_favicon] => [is_posts_page] => 1 [is_post_type_archive] => [query_vars_hash:WP_Query:private] => baf3ffb13f20011297ac72ffcf281c45 [query_vars_changed:WP_Query:private] => 1 [thumbnails_cached] => [stopwords:WP_Query:private] => [compat_fields:WP_Query:private] => Array ( [0] => query_vars_hash [1] => query_vars_changed ) [compat_methods:WP_Query:private] => Array ( [0] => init_query_flags [1] => parse_tax_query ) )

News and Events

CAN-Enabled Autonomous Agricultural Machinery at the University of Nebraska–Lincoln

CAN-Enabled Autonomous Agricultural Machinery at the University of Nebraska–Lincoln

16/10/2018

We like to keep up-to-date on applications of CAN in the fields of autonomous vehicles and agricultural machinery, but we’re… Read More

Read More

Infineon Technologies launches two first SBCs to support ISO CAN FD at 5 Mbit/s

16/10/2018

Read More

Read More

Product Release: New Mini PCI Express Boards for Real-Time CAN & CAN FD Performance

15/10/2018

  Kvaser announces a series of new Mini PCI Express interfaces with extremely low latency designed for real-time environments. Both… Read More

Read More

CAN FD technology day in Prague

09/10/2018

Kvaser Technical Associate Miroslav Macháček from Mach Systems s.r.o. will be speaking at CAN in Automation’s CAN FD day in… Read More

Read More
Supporting CAN FD and the non-ISO version

Supporting CAN FD and the non-ISO version

09/10/2018

CAN FD interfaces and data loggers come in two variants: products that implement Bosch’s original protocol, which are referred to… Read More

Read More

Kvaser Software Release September 2018: Continued Python and Linux updates

02/10/2018

Kvaser’s latest software release continues to expand Kvaser’s Python and Linux resources. Notable changes and additions include: Python canlib package… Read More

Read More
Running Python wrapper on Linux

Running Python wrapper on Linux

20/09/2018

This is an update of an older blog post and is now taking advantage of the Python canlib package v1.6… Read More

Read More
Configure an SD card using kvmlib

Configure an SD card using kvmlib

19/09/2018

This is the final post in a 4-part series about configuring and reading logged data using a Kvaser Memorator 2nd… Read More

Read More
Digging deeper into kvmlib

Digging deeper into kvmlib

18/09/2018

This is the third post in a 4-part series about configuring and reading logged data using a Kvaser Memorator 2nd… Read More

Read More
Adding script and triggers to a configuration

Adding script and triggers to a configuration

17/09/2018

This is the second post in a 4-part series about configuring and reading logged data using a Kvaser Memorator 2nd Generation… Read More

Read More