<p>laforge has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ccid-firmware/+/16050">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Add 'check_ccid_config.py' to test for USB VID/PID in libccid_Info.plist<br><br>Change-Id: I0399f03400b49d814825ca156ddb4824ec76ce0a<br>---<br>A sysmoOCTSIM/check_libccid_config.py<br>1 file changed, 60 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ccid-firmware refs/changes/50/16050/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/sysmoOCTSIM/check_libccid_config.py b/sysmoOCTSIM/check_libccid_config.py</span><br><span>new file mode 100755</span><br><span>index 0000000..93cd202</span><br><span>--- /dev/null</span><br><span>+++ b/sysmoOCTSIM/check_libccid_config.py</span><br><span>@@ -0,0 +1,60 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#!/usr/bin/python3</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# This script checks your libccid configuration file if it contains a matching entry</span><br><span style="color: hsl(120, 100%, 40%);">+# for the sysmoOCTSIM reader.  If not, it will generate a modified config file</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+import plistlib, sys</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+INFILE="/etc/libccid_Info.plist"</span><br><span style="color: hsl(120, 100%, 40%);">+OUTFILE="/tmp/libccid_Info.plist"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+VENDOR_ID=0x1d50</span><br><span style="color: hsl(120, 100%, 40%);">+PRODUCT_ID=0x6141</span><br><span style="color: hsl(120, 100%, 40%);">+NAME='sysmocom sysmoOCTSIM'</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+def gen_reader_dictlist(prod_id, vend_id, names):</span><br><span style="color: hsl(120, 100%, 40%);">+    readers = []</span><br><span style="color: hsl(120, 100%, 40%);">+    for i in range(0,len(prod_id)):</span><br><span style="color: hsl(120, 100%, 40%);">+        reader = {'vendor_id': vend_id[i], 'product_id': prod_id[i], 'name': names[i]}</span><br><span style="color: hsl(120, 100%, 40%);">+        readers.append(reader)</span><br><span style="color: hsl(120, 100%, 40%);">+    return readers</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+def find_reader(readers, vend_id, prod_id):</span><br><span style="color: hsl(120, 100%, 40%);">+    for r in readers:</span><br><span style="color: hsl(120, 100%, 40%);">+        if int(r['vendor_id'], 16) == vend_id and int(r['product_id'], 16) == prod_id:</span><br><span style="color: hsl(120, 100%, 40%);">+            return r</span><br><span style="color: hsl(120, 100%, 40%);">+    return None</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+def plist_add_reader(pl, vend_id, prod_id, name):</span><br><span style="color: hsl(120, 100%, 40%);">+    pl['ifdVendorID'].append(hex(vend_id))</span><br><span style="color: hsl(120, 100%, 40%);">+    pl['ifdProductID'].append(hex(prod_id))</span><br><span style="color: hsl(120, 100%, 40%);">+    pl['ifdFriendlyName'].append(name)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+if len(sys.argv) > 1:</span><br><span style="color: hsl(120, 100%, 40%);">+    INFILE = sys.argv[1]</span><br><span style="color: hsl(120, 100%, 40%);">+if len(sys.argv) > 2:</span><br><span style="color: hsl(120, 100%, 40%);">+    OUTFILE = sys.argv[2]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# read the property list</span><br><span style="color: hsl(120, 100%, 40%);">+print("Reading libccid config file at '%s'" % (INFILE))</span><br><span style="color: hsl(120, 100%, 40%);">+with open(INFILE, 'rb') as fp:</span><br><span style="color: hsl(120, 100%, 40%);">+    pl = plistlib.load(fp)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# consistency check</span><br><span style="color: hsl(120, 100%, 40%);">+if len(pl['ifdProductID']) != len(pl['ifdVendorID']) or len(pl['ifdProductID']) != len(pl['ifdFriendlyName']):</span><br><span style="color: hsl(120, 100%, 40%);">+    print("input file is corrupt", file=sys.stderr)</span><br><span style="color: hsl(120, 100%, 40%);">+    sys.exit(2)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# convert into a better sorted form (one list of dicts; each dict one reader)</span><br><span style="color: hsl(120, 100%, 40%);">+readers = gen_reader_dictlist(pl['ifdProductID'], pl['ifdVendorID'], pl['ifdFriendlyName'])</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+if find_reader(readers, VENDOR_ID, PRODUCT_ID):</span><br><span style="color: hsl(120, 100%, 40%);">+    print("Matching reader already in libccid_Info.plist; no action required", file=sys.stderr)</span><br><span style="color: hsl(120, 100%, 40%);">+else:</span><br><span style="color: hsl(120, 100%, 40%);">+    print("Reader not found in config file, it needs to be updated...")</span><br><span style="color: hsl(120, 100%, 40%);">+    plist_add_reader(pl, VENDOR_ID, PRODUCT_ID, NAME)</span><br><span style="color: hsl(120, 100%, 40%);">+    with open(OUTFILE, 'wb') as fp:</span><br><span style="color: hsl(120, 100%, 40%);">+        plistlib.dump(pl, fp)</span><br><span style="color: hsl(120, 100%, 40%);">+    print("Generated new config file stored as '%s'" % (OUTFILE))</span><br><span style="color: hsl(120, 100%, 40%);">+    print("\tWARNING: The generated file doesn't preserve comments!")</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ccid-firmware/+/16050">change 16050</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-ccid-firmware/+/16050"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ccid-firmware </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I0399f03400b49d814825ca156ddb4824ec76ce0a </div>
<div style="display:none"> Gerrit-Change-Number: 16050 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>