{"id":2832,"date":"2018-05-31T15:39:15","date_gmt":"2018-05-31T20:39:15","guid":{"rendered":"http:\/\/www.logikalsolutions.com\/wordpress\/?p=2832"},"modified":"2018-05-31T15:39:15","modified_gmt":"2018-05-31T20:39:15","slug":"qt-and-usb-pt-2-2","status":"publish","type":"post","link":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/qt-and-usb-pt-2-2\/","title":{"rendered":"Qt and USB &#8211; Pt. 2"},"content":{"rendered":"<p>Hopefully you can all see the featured image. It&#8217;s a screen shot of our little application so far. No, I didn&#8217;t make it pretty. That is not the purpose. Here is a slightly different shot of the same screen. This is the way it looks when the system is slow and the database is being created.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-2835 size-full\" src=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2018\/05\/usb_app_2-1.png\" alt=\"\" width=\"776\" height=\"672\" srcset=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2018\/05\/usb_app_2-1.png 776w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2018\/05\/usb_app_2-1-300x260.png 300w, https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2018\/05\/usb_app_2-1-768x665.png 768w\" sizes=\"(max-width: 776px) 100vw, 776px\" \/><\/p>\n<p>The little circle with bars is an animated gif I generated on <a href=\"http:\/\/www.ajaxload.info\/#preview\">this site<\/a>. When the main window catches the loading signal it executes this slot.<\/p>\n<pre>void MainWindow::loading()\r\n{\r\n    cout &lt;&lt; \"loading() slot called \" &lt;&lt; endl; ui-&gt;busyMovieLabel-&gt;setVisible(true);\r\n    ui-&gt;loadingLabel-&gt;setVisible(true);\r\n    ui-&gt;genDBReportBtn-&gt;hide();\r\n    movie = new QMovie(\":\/main\/graphics\/ajax-loader.gif\");\r\n    ui-&gt;busyMovieLabel-&gt;setMovie(movie);\r\n    movie-&gt;start();\r\n}\r\n<\/pre>\n<p>Since I&#8217;m not worried about resources this was the quick and easy method. In tiny resourced embedded systems I typically use a series of images and a timer in their own little class.<\/p>\n<p>Before we jump into the code, here is the output. I hand edited it down to just the minimum so we can discuss it.<\/p>\n<pre>Current device count: 9\r\n\r\nNumber of possible configurations: 1   \r\nDevice Class: 9  VendorID: 32903   ProductID: 36\r\nVendor:   Product:   Serial Number: \r\n\r\n\r\nNumber of possible configurations: 1   \r\nDevice Class: 9  VendorID: 7531   ProductID: 2\r\nVendor:   Product: EHCI Host Controller  Serial Number: 0000:00:1d.0\r\n\r\n\r\nNumber of possible configurations: 1   \r\nDevice Class: 0  VendorID: 2362   ProductID: 9488\r\nVendor:   Product:   Serial Number: \r\n\r\n\r\nNumber of possible configurations: 1   \r\nDevice Class: 0  VendorID: 1500   ProductID: 43037\r\nVendor:   Product:   Serial Number: AA8BF02FAUF8PRH6\r\n\r\n\r\nNumber of possible configurations: 1   \r\nDevice Class: 9  VendorID: 32903   ProductID: 36\r\nVendor:   Product:   Serial Number: \r\n\r\n\r\nNumber of possible configurations: 1   \r\nDevice Class: 9  VendorID: 7531   ProductID: 2\r\nVendor:   Product: EHCI Host Controller  Serial Number: 0000:00:1a.0\r\n\r\n\r\nNumber of possible configurations: 1   \r\nDevice Class: 9  VendorID: 7531   ProductID: 3\r\nVendor:   Product: Linux 4.13.0-43-generic xhci-hcd  Serial Number: 0000:00:14.0\r\n\r\n\r\nNumber of possible configurations: 1   \r\nDevice Class: 0  VendorID: 1309   ProductID: 2\r\nVendor:   Product: Back-UPS RS 1000G FW:869.L3 .D USB FW:L3   Serial Number: 3B1241X11465  \r\n\r\n\r\nNumber of possible configurations: 1   \r\nDevice Class: 9  VendorID: 7531   ProductID: 2\r\nVendor:   Product: xHCI Host Controller  Serial Number: 0000:00:14.0\r\n\r\n\r\n=============================\r\n\r\n\r\nNumber of possible configurations: 1   \r\nDevice Class: 9  \r\nVendorID: 32903   Intel Corp.\r\nProductID: 36   Integrated Rate Matching Hub\r\n\r\n\r\nNumber of possible configurations: 1   \r\nDevice Class: 9  \r\nVendorID: 7531   Linux Foundation\r\nProductID: 2   2.0 root hub\r\n\r\n\r\nNumber of possible configurations: 1   \r\nDevice Class: 0  \r\nVendorID: 2362   Pixart Imaging, Inc.\r\nProductID: 9488   Optical Mouse\r\n\r\n\r\nNumber of possible configurations: 1   \r\nDevice Class: 0  \r\nVendorID: 1500   Lexar Media, Inc.\r\nProductID: 43037   LJDTT16G [JumpDrive 16GB]\r\n\r\n\r\nNumber of possible configurations: 1   \r\nDevice Class: 9  \r\nVendorID: 32903   Intel Corp.\r\nProductID: 36   Integrated Rate Matching Hub\r\n\r\n\r\nNumber of possible configurations: 1   \r\nDevice Class: 9  \r\nVendorID: 7531   Linux Foundation\r\nProductID: 2   2.0 root hub\r\n\r\n\r\nNumber of possible configurations: 1   \r\nDevice Class: 9  \r\nVendorID: 7531   Linux Foundation\r\nProductID: 3   3.0 root hub\r\n\r\n\r\nNumber of possible configurations: 1   \r\nDevice Class: 0  \r\nVendorID: 1309   American Power Conversion\r\nProductID: 2   Uninterruptible Power Supply\r\n\r\n\r\nNumber of possible configurations: 1   \r\nDevice Class: 9  \r\nVendorID: 7531   Linux Foundation\r\nProductID: 2   2.0 root hub\r\n\r\n<\/pre>\n<p>Above the line of === is the trimmed output of our libusb code. Below that line is still using libusb to obtain the device descriptors, but looking up vendor and product information in a database this application creates. Yes, the file usb.ids is available on the Internet and locally on most Linux systems. Yes, there are various hashing techniques to locating values in it, but, most of those techniques are used by people who never learned how to use a database. Eventually I will get around to writing the code which pulls the file down to create the database from it, but, we aren&#8217;t there yet.<\/p>\n<p>Database access and creation is being provided by a singleton class. Yes, I know there is a deep religious cult against singleton classes, but they have their uses. In a production type environment a database would provide an external service your application simply connected with and used. This application needs to be self contained and is mostly for educational purposes.<\/p>\n<pre>#ifndef LOGIKALUSBINFO_H\r\n#define LOGIKALUSBINFO_H\r\n\r\n\/*\r\n *      Copyright (c) 2018 Roland Hughes and Logical Solutions  ALL RIGHTS RESERVED\r\n *\r\n *      This code is \"as-is\" without any warranty expressed or implied. You may not modify or distribute it\r\n *      without having purchased the right to do so from the copyright holder. This code is provided for\r\n *      demonstration purposes only. Usage of it implies your express agreement to hold both the author and\r\n *      copyright holder harmless from damages both real and perceived.\r\n *\/\r\n\r\n#include \r\n#include \r\n#include \r\n#include \r\n\r\nclass LogikalUSBInfo final : public QObject\r\n{\r\n    Q_OBJECT\r\npublic:\r\n    static LogikalUSBInfo* getInstance();\r\n\r\n    void initializeDatabase(QString destDir=\"\", QString destName=\"\", QString usbIdsPath=\"\");\r\n\r\n\r\n    QString fileName() { return QDir(databasePath).filePath(dbName);}\r\n\r\n    void setDatabasePath(QString nuPath) { databasePath = nuPath;}\r\n    void setDbName(QString nuName) { dbName = nuName;}\r\n\r\n    bool isDBReady()  {return (databaseInitialized &amp;&amp; databaseIsCurrent());}\r\n\r\n    QString vendorName(QString vendorID);\r\n    QString deviceName(QString vendorID, QString productID);\r\n\r\n    \/\/ Remove the no-nos for a singleton class\r\n    \/\/\r\n    LogikalUSBInfo(LogikalUSBInfo const&amp;) = delete;             \/\/ copy constructor\r\n    LogikalUSBInfo(LogikalUSBInfo&amp;&amp;) = delete;                  \/\/ move constructor\r\n    LogikalUSBInfo&amp; operator=(LogikalUSBInfo const&amp;) = delete;  \/\/ copy assign\r\n    LogikalUSBInfo&amp; operator=(LogikalUSBInfo &amp;&amp;) = delete;      \/\/ move assign\r\n\r\nsignals:\r\n    void loading();\r\n    void loadingComplete();\r\n    void databaseReady();\r\n\r\nprotected:\r\n    explicit LogikalUSBInfo(QObject *parent = nullptr);\r\n\r\nprotected slots:\r\n    void databaseLoaded();\r\n\r\nprivate:\r\n    bool idFileLocated( QString usbIdsPath=\"\");\r\n    bool databaseIsCurrent();\r\n    bool databaseExists();\r\n    void createNewDatabase();\r\n    void retrieveFileAndCreateDb();\r\n\r\n    bool databaseInitialized = false;\r\n    QString idFilePath;\r\n    QString databasePath;\r\n    QString dbName = QString(\"usb_id_db\");\r\n    const QString driverName = QString(\"QSQLITE\");\r\n    const QString connectionName = QString(\"usb_ids\");\r\n    QFutureWatcher watcher;\r\n\r\n};\r\n\r\n#endif \/\/ LOGIKALUSBINFO_H\r\n<\/pre>\n<p>By default, with no options passed to the iniatializeDatabase() method, the database will be created in the user&#8217;s home directory. I provided some &#8220;set&#8221; methods so you could configure the location and still call initializeDatabase with no parameters to create the database in a location of your choosing.<\/p>\n<p>Our isDBReady() method along with the 3 signals provide applications using this class with the ability to know the current state of the database. In our application I use the 3 signals to control what displays on the right side of our window. When the database is loading the &#8220;loading&#8221; text label and spinning wheel appear, but the button to generate the second report is hidden. When either loading completes or the database was located in a ready state during initialization we only see the button to generate the report.<\/p>\n<p>vendorName() and deviceName() provide the main API. The strings passed as parameters must be zero padded HEX values because that is how they come from usb.ids.<br \/>\n&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hopefully you can all see the featured image. It&#8217;s a screen shot of our little application so far. No, I didn&#8217;t make it pretty. That is not the purpose. Here is a slightly different shot of the same screen. This is the way it looks when the system is slow and the database is being created. The little circle with bars is an animated gif I generated on this site. When the main window catches &hellip; <a title=\"Qt and USB &#8211; Pt. 2\" class=\"bnm-read-more\" href=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/qt-and-usb-pt-2-2\/\"><span class=\"screen-reader-text\">Qt and USB &#8211; Pt. 2<\/span>Read more<\/a><\/p>\n","protected":false},"author":2,"featured_media":2833,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,1113],"tags":[1504,159,1494,1607],"class_list":["post-2832","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-information-technology","category-raspberry-pi","tag-c","tag-qt","tag-sqlite","tag-usb","bnm-entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Qt and USB - Pt. 2 &#8211; Logikal Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/qt-and-usb-pt-2-2\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Qt and USB - Pt. 2 &#8211; Logikal Blog\" \/>\n<meta property=\"og:description\" content=\"Hopefully you can all see the featured image. It&#8217;s a screen shot of our little application so far. No, I didn&#8217;t make it pretty. That is not the purpose. Here is a slightly different shot of the same screen. This is the way it looks when the system is slow and the database is being created. The little circle with bars is an animated gif I generated on this site. When the main window catches &hellip; Qt and USB &#8211; Pt. 2Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/qt-and-usb-pt-2-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Logikal Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-05-31T20:39:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2018\/05\/usb_app_shot_1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"776\" \/>\n\t<meta property=\"og:image:height\" content=\"672\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"seasoned_geek\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"seasoned_geek\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/qt-and-usb-pt-2-2\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/qt-and-usb-pt-2-2\\\/\"},\"author\":{\"name\":\"seasoned_geek\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\"},\"headline\":\"Qt and USB &#8211; Pt. 2\",\"datePublished\":\"2018-05-31T20:39:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/qt-and-usb-pt-2-2\\\/\"},\"wordCount\":479,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\"},\"image\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/qt-and-usb-pt-2-2\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2018\\\/05\\\/usb_app_shot_1.png\",\"keywords\":[\"C++\",\"Qt\",\"SQLite\",\"usb\"],\"articleSection\":[\"Information Technology\",\"Raspberry Pi\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/qt-and-usb-pt-2-2\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/qt-and-usb-pt-2-2\\\/\",\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/qt-and-usb-pt-2-2\\\/\",\"name\":\"Qt and USB - Pt. 2 &#8211; Logikal Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/qt-and-usb-pt-2-2\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/qt-and-usb-pt-2-2\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2018\\\/05\\\/usb_app_shot_1.png\",\"datePublished\":\"2018-05-31T20:39:15+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/qt-and-usb-pt-2-2\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/qt-and-usb-pt-2-2\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/qt-and-usb-pt-2-2\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2018\\\/05\\\/usb_app_shot_1.png\",\"contentUrl\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/wp-content\\\/uploads\\\/2018\\\/05\\\/usb_app_shot_1.png\",\"width\":776,\"height\":672,\"caption\":\"usb application screenshot\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/information-technology\\\/qt-and-usb-pt-2-2\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Qt and USB &#8211; Pt. 2\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#website\",\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/\",\"name\":\"Logikal Blog\",\"description\":\"For people with attention spans longer than a Tweet\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/#\\\/schema\\\/person\\\/c077f770ade13de7faaf616c3eac6842\",\"name\":\"seasoned_geek\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\",\"caption\":\"seasoned_geek\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r\"},\"description\":\"Roland Hughes started his IT career in the early 1980s. He quickly became a consultant and president of Logikal Solutions, a software consulting firm specializing in OpenVMS application and C++\\\/Qt touchscreen\\\/embedded Linux development. Early in his career he became involved in what is now called cross platform development. Given the dearth of useful books on the subject he ventured into the world of professional author in 1995 writing the first of the \\\"Zinc It!\\\" book series for John Gordon Burke Publisher, Inc. A decade later he released a massive (nearly 800 pages) tome \\\"The Minimum You Need to Know to Be an OpenVMS Application Developer\\\" which tried to encapsulate the essential skills gained over what was nearly a 20 year career at that point. From there \\\"The Minimum You Need to Know\\\" book series was born. Three years later he wrote his first novel \\\"Infinite Exposure\\\" which got much notice from people involved in the banking and financial security worlds. Some of the attacks predicted in that book have since come to pass. While it was not originally intended to be a trilogy, it became the first book of \\\"The Earth That Was\\\" trilogy: Infinite Exposure Lesedi - The Greatest Lie Ever Told John Smith - Last Known Survivor of the Microsoft Wars When he is not consulting Roland Hughes posts about technology and sometimes politics on his blog. He also has regularly scheduled Sunday posts appearing on the Interesting Authors blog.\",\"sameAs\":[\"https:\\\/\\\/theminimumyouneedtoknow.com\"],\"url\":\"https:\\\/\\\/www.logikalsolutions.com\\\/wordpress\\\/author\\\/seasoned_geek\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Qt and USB - Pt. 2 &#8211; Logikal Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/qt-and-usb-pt-2-2\/","og_locale":"en_US","og_type":"article","og_title":"Qt and USB - Pt. 2 &#8211; Logikal Blog","og_description":"Hopefully you can all see the featured image. It&#8217;s a screen shot of our little application so far. No, I didn&#8217;t make it pretty. That is not the purpose. Here is a slightly different shot of the same screen. This is the way it looks when the system is slow and the database is being created. The little circle with bars is an animated gif I generated on this site. When the main window catches &hellip; Qt and USB &#8211; Pt. 2Read more","og_url":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/qt-and-usb-pt-2-2\/","og_site_name":"Logikal Blog","article_published_time":"2018-05-31T20:39:15+00:00","og_image":[{"width":776,"height":672,"url":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2018\/05\/usb_app_shot_1.png","type":"image\/png"}],"author":"seasoned_geek","twitter_card":"summary_large_image","twitter_misc":{"Written by":"seasoned_geek","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/qt-and-usb-pt-2-2\/#article","isPartOf":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/qt-and-usb-pt-2-2\/"},"author":{"name":"seasoned_geek","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842"},"headline":"Qt and USB &#8211; Pt. 2","datePublished":"2018-05-31T20:39:15+00:00","mainEntityOfPage":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/qt-and-usb-pt-2-2\/"},"wordCount":479,"commentCount":0,"publisher":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842"},"image":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/qt-and-usb-pt-2-2\/#primaryimage"},"thumbnailUrl":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2018\/05\/usb_app_shot_1.png","keywords":["C++","Qt","SQLite","usb"],"articleSection":["Information Technology","Raspberry Pi"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/qt-and-usb-pt-2-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/qt-and-usb-pt-2-2\/","url":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/qt-and-usb-pt-2-2\/","name":"Qt and USB - Pt. 2 &#8211; Logikal Blog","isPartOf":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/qt-and-usb-pt-2-2\/#primaryimage"},"image":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/qt-and-usb-pt-2-2\/#primaryimage"},"thumbnailUrl":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2018\/05\/usb_app_shot_1.png","datePublished":"2018-05-31T20:39:15+00:00","breadcrumb":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/qt-and-usb-pt-2-2\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/qt-and-usb-pt-2-2\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/qt-and-usb-pt-2-2\/#primaryimage","url":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2018\/05\/usb_app_shot_1.png","contentUrl":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-content\/uploads\/2018\/05\/usb_app_shot_1.png","width":776,"height":672,"caption":"usb application screenshot"},{"@type":"BreadcrumbList","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/information-technology\/qt-and-usb-pt-2-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.logikalsolutions.com\/wordpress\/"},{"@type":"ListItem","position":2,"name":"Qt and USB &#8211; Pt. 2"}]},{"@type":"WebSite","@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#website","url":"https:\/\/www.logikalsolutions.com\/wordpress\/","name":"Logikal Blog","description":"For people with attention spans longer than a Tweet","publisher":{"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.logikalsolutions.com\/wordpress\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.logikalsolutions.com\/wordpress\/#\/schema\/person\/c077f770ade13de7faaf616c3eac6842","name":"seasoned_geek","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r","url":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r","caption":"seasoned_geek"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/ae9adac14079d84b909e635d7af986fe4568053af4fd9ff8d4109298c392493e?s=96&d=mm&r=r"},"description":"Roland Hughes started his IT career in the early 1980s. He quickly became a consultant and president of Logikal Solutions, a software consulting firm specializing in OpenVMS application and C++\/Qt touchscreen\/embedded Linux development. Early in his career he became involved in what is now called cross platform development. Given the dearth of useful books on the subject he ventured into the world of professional author in 1995 writing the first of the \"Zinc It!\" book series for John Gordon Burke Publisher, Inc. A decade later he released a massive (nearly 800 pages) tome \"The Minimum You Need to Know to Be an OpenVMS Application Developer\" which tried to encapsulate the essential skills gained over what was nearly a 20 year career at that point. From there \"The Minimum You Need to Know\" book series was born. Three years later he wrote his first novel \"Infinite Exposure\" which got much notice from people involved in the banking and financial security worlds. Some of the attacks predicted in that book have since come to pass. While it was not originally intended to be a trilogy, it became the first book of \"The Earth That Was\" trilogy: Infinite Exposure Lesedi - The Greatest Lie Ever Told John Smith - Last Known Survivor of the Microsoft Wars When he is not consulting Roland Hughes posts about technology and sometimes politics on his blog. He also has regularly scheduled Sunday posts appearing on the Interesting Authors blog.","sameAs":["https:\/\/theminimumyouneedtoknow.com"],"url":"https:\/\/www.logikalsolutions.com\/wordpress\/author\/seasoned_geek\/"}]}},"_links":{"self":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/posts\/2832","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/comments?post=2832"}],"version-history":[{"count":0,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/posts\/2832\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/media\/2833"}],"wp:attachment":[{"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/media?parent=2832"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/categories?post=2832"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.logikalsolutions.com\/wordpress\/wp-json\/wp\/v2\/tags?post=2832"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}