<p>Kévin Redon has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/13053">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">switch UART debug to SIM7<br><br>SERCOM7 will mainly be used for the SIM7 interface.<br>only if SIM7 is not present, the UART can be remapped to<br>UART_debug.<br><br>Change-Id: Idfbd067b4b0e2034337732da2ff5b7cfef8fe4ae<br>---<br>M sysmoOCTSIM/atmel_start_config.atstart<br>M sysmoOCTSIM/atmel_start_pins.h<br>M sysmoOCTSIM/config/hpl_sercom_config.h<br>M sysmoOCTSIM/driver_init.c<br>M sysmoOCTSIM/driver_init.h<br>M sysmoOCTSIM/examples/driver_examples.c<br>M sysmoOCTSIM/examples/driver_examples.h<br>M sysmoOCTSIM/main.c<br>8 files changed, 149 insertions(+), 190 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/53/13053/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/sysmoOCTSIM/atmel_start_config.atstart b/sysmoOCTSIM/atmel_start_config.atstart</span><br><span>index a301385..4590623 100644</span><br><span>--- a/sysmoOCTSIM/atmel_start_config.atstart</span><br><span>+++ b/sysmoOCTSIM/atmel_start_config.atstart</span><br><span>@@ -1274,9 +1274,9 @@</span><br><span>         configuration:</span><br><span>           core_gclk_selection: Generic clock generator 2</span><br><span>           slow_gclk_selection: Generic clock generator 3</span><br><span style="color: hsl(0, 100%, 40%);">-  UART_debug:</span><br><span style="color: hsl(0, 100%, 40%);">-    user_label: UART_debug</span><br><span style="color: hsl(0, 100%, 40%);">-    definition: Atmel:SAME54_Drivers:0.0.1::SAME54N19A-AF::SERCOM7::driver_config_definition::UART::HAL:Driver:USART.Async</span><br><span style="color: hsl(120, 100%, 40%);">+  SIM7:</span><br><span style="color: hsl(120, 100%, 40%);">+    user_label: SIM7</span><br><span style="color: hsl(120, 100%, 40%);">+    definition: Atmel:SAME54_Drivers:0.0.1::SAME54N19A-AF::SERCOM7::driver_config_definition::USART.with.ISO7816::HAL:Driver:USART.Async</span><br><span>     functionality: USART</span><br><span>     api: HAL:Driver:USART_Async</span><br><span>     configuration:</span><br><span>@@ -1285,30 +1285,28 @@</span><br><span>       usart_arch_cloden: false</span><br><span>       usart_arch_dbgstop: Keep running</span><br><span>       usart_arch_dord: LSB is transmitted first</span><br><span style="color: hsl(0, 100%, 40%);">-      usart_arch_enc: No encoding</span><br><span style="color: hsl(0, 100%, 40%);">-      usart_arch_fractional: 0</span><br><span>       usart_arch_ibon: false</span><br><span style="color: hsl(0, 100%, 40%);">-      usart_arch_lin_slave_enable: Disable</span><br><span>       usart_arch_runstdby: false</span><br><span style="color: hsl(0, 100%, 40%);">-      usart_arch_sampa: 7-8-9 (3-4-5 8-bit over-sampling)</span><br><span style="color: hsl(0, 100%, 40%);">-      usart_arch_sampr: 16x arithmetic</span><br><span>       usart_arch_sfde: false</span><br><span style="color: hsl(0, 100%, 40%);">-      usart_baud_rate: 921600</span><br><span style="color: hsl(120, 100%, 40%);">+      usart_baud_rate: 9600</span><br><span>       usart_character_size: 8 bits</span><br><span style="color: hsl(0, 100%, 40%);">-      usart_parity: No parity</span><br><span style="color: hsl(120, 100%, 40%);">+      usart_dsnack: The successive receive NACK is disable.</span><br><span style="color: hsl(120, 100%, 40%);">+      usart_gtime: 2-bit times</span><br><span style="color: hsl(120, 100%, 40%);">+      usart_inack: NACK is transmitted when a parity error is received.</span><br><span style="color: hsl(120, 100%, 40%);">+      usart_inverse_enabled: false</span><br><span style="color: hsl(120, 100%, 40%);">+      usart_iso7816_type: T=0</span><br><span style="color: hsl(120, 100%, 40%);">+      usart_maxiter: 7</span><br><span style="color: hsl(120, 100%, 40%);">+      usart_parity: Even parity</span><br><span>       usart_rx_enable: true</span><br><span>       usart_stop_bit: One stop bit</span><br><span>       usart_tx_enable: true</span><br><span>     optional_signals: []</span><br><span>     variant:</span><br><span style="color: hsl(0, 100%, 40%);">-      specification: TXPO=0, RXPO=1, CMODE=0</span><br><span style="color: hsl(120, 100%, 40%);">+      specification: TXPO=2, RXPO=0</span><br><span>       required_signals:</span><br><span>       - name: SERCOM7/PAD/0</span><br><span style="color: hsl(0, 100%, 40%);">-        pad: PB30</span><br><span style="color: hsl(0, 100%, 40%);">-        label: TX</span><br><span style="color: hsl(0, 100%, 40%);">-      - name: SERCOM7/PAD/1</span><br><span style="color: hsl(0, 100%, 40%);">-        pad: PB31</span><br><span style="color: hsl(0, 100%, 40%);">-        label: RX</span><br><span style="color: hsl(120, 100%, 40%);">+        pad: PB21</span><br><span style="color: hsl(120, 100%, 40%);">+        label: RX/TX</span><br><span>     clocks:</span><br><span>       domain_group:</span><br><span>         nodes:</span><br><span>@@ -1503,6 +1501,12 @@</span><br><span>     mode: Peripheral IO</span><br><span>     user_label: SIM3_IO</span><br><span>     configuration: null</span><br><span style="color: hsl(120, 100%, 40%);">+  SIM7_IO:</span><br><span style="color: hsl(120, 100%, 40%);">+    name: PB21</span><br><span style="color: hsl(120, 100%, 40%);">+    definition: Atmel:SAME54_Drivers:0.0.1::SAME54N19A-AF::pad::PB21</span><br><span style="color: hsl(120, 100%, 40%);">+    mode: Peripheral IO</span><br><span style="color: hsl(120, 100%, 40%);">+    user_label: SIM7_IO</span><br><span style="color: hsl(120, 100%, 40%);">+    configuration: null</span><br><span>   VB0:</span><br><span>     name: PA20</span><br><span>     definition: Atmel:SAME54_Drivers:0.0.1::SAME54N19A-AF::pad::PA20</span><br><span>@@ -1557,18 +1561,6 @@</span><br><span>     mode: Digital output</span><br><span>     user_label: SDA4</span><br><span>     configuration: null</span><br><span style="color: hsl(0, 100%, 40%);">-  UART_TX:</span><br><span style="color: hsl(0, 100%, 40%);">-    name: PB30</span><br><span style="color: hsl(0, 100%, 40%);">-    definition: Atmel:SAME54_Drivers:0.0.1::SAME54N19A-AF::pad::PB30</span><br><span style="color: hsl(0, 100%, 40%);">-    mode: Peripheral IO</span><br><span style="color: hsl(0, 100%, 40%);">-    user_label: UART_TX</span><br><span style="color: hsl(0, 100%, 40%);">-    configuration: null</span><br><span style="color: hsl(0, 100%, 40%);">-  UART_RX:</span><br><span style="color: hsl(0, 100%, 40%);">-    name: PB31</span><br><span style="color: hsl(0, 100%, 40%);">-    definition: Atmel:SAME54_Drivers:0.0.1::SAME54N19A-AF::pad::PB31</span><br><span style="color: hsl(0, 100%, 40%);">-    mode: Peripheral IO</span><br><span style="color: hsl(0, 100%, 40%);">-    user_label: UART_RX</span><br><span style="color: hsl(0, 100%, 40%);">-    configuration: null</span><br><span>   SCL2:</span><br><span>     name: PB02</span><br><span>     definition: Atmel:SAME54_Drivers:0.0.1::SAME54N19A-AF::pad::PB02</span><br><span>diff --git a/sysmoOCTSIM/atmel_start_pins.h b/sysmoOCTSIM/atmel_start_pins.h</span><br><span>index 60b70bb..c877d5e 100644</span><br><span>--- a/sysmoOCTSIM/atmel_start_pins.h</span><br><span>+++ b/sysmoOCTSIM/atmel_start_pins.h</span><br><span>@@ -50,8 +50,7 @@</span><br><span> #define SDA1 GPIO(GPIO_PORTB, 15)</span><br><span> #define SIM5_IO GPIO(GPIO_PORTB, 16)</span><br><span> #define SIM3_IO GPIO(GPIO_PORTB, 20)</span><br><span style="color: hsl(0, 100%, 40%);">-#define UART_TX GPIO(GPIO_PORTB, 30)</span><br><span style="color: hsl(0, 100%, 40%);">-#define UART_RX GPIO(GPIO_PORTB, 31)</span><br><span style="color: hsl(120, 100%, 40%);">+#define SIM7_IO GPIO(GPIO_PORTB, 21)</span><br><span> #define SIM0_INT GPIO(GPIO_PORTC, 0)</span><br><span> #define SIM1_INT GPIO(GPIO_PORTC, 1)</span><br><span> #define SIM2_INT GPIO(GPIO_PORTC, 2)</span><br><span>diff --git a/sysmoOCTSIM/config/hpl_sercom_config.h b/sysmoOCTSIM/config/hpl_sercom_config.h</span><br><span>index 735fdc2..64607bb 100644</span><br><span>--- a/sysmoOCTSIM/config/hpl_sercom_config.h</span><br><span>+++ b/sysmoOCTSIM/config/hpl_sercom_config.h</span><br><span>@@ -1931,13 +1931,11 @@</span><br><span> #endif</span><br><span> </span><br><span> // <o> Frame parity</span><br><span style="color: hsl(0, 100%, 40%);">-// <0x0=>No parity</span><br><span> // <0x1=>Even parity</span><br><span style="color: hsl(0, 100%, 40%);">-// <0x2=>Odd parity</span><br><span> // <i> Parity bit mode for USART frame</span><br><span> // <id> usart_parity</span><br><span> #ifndef CONF_SERCOM_7_USART_PARITY</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_PARITY 0x0</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_PARITY 1</span><br><span> #endif</span><br><span> </span><br><span> // <o> Character Size</span><br><span>@@ -1961,11 +1959,75 @@</span><br><span> #define CONF_SERCOM_7_USART_SBMODE 0</span><br><span> #endif</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-// <o> Baud rate <1-6250000></span><br><span style="color: hsl(120, 100%, 40%);">+// <o> Baud rate <1-3000000></span><br><span> // <i> USART baud rate setting</span><br><span> // <id> usart_baud_rate</span><br><span> #ifndef CONF_SERCOM_7_USART_BAUD</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_BAUD 921600</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_BAUD 9600</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+// </h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+// <h> ISO7816 configuration</span><br><span style="color: hsl(120, 100%, 40%);">+// <o> ISO7816 Protocol Type</span><br><span style="color: hsl(120, 100%, 40%);">+// <0x1=> T=0</span><br><span style="color: hsl(120, 100%, 40%);">+// <0x0=> T=1</span><br><span style="color: hsl(120, 100%, 40%);">+// <i> Define ISO7816 protocol type as 0.</span><br><span style="color: hsl(120, 100%, 40%);">+// <id> usart_iso7816_type</span><br><span style="color: hsl(120, 100%, 40%);">+#ifndef CONF_SERCOM_7_USART_ISO7816_PROTOCOL_T</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_ISO7816_PROTOCOL_T 0x1</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+// <o> ISO7816 Inhibit Not Acknowledge</span><br><span style="color: hsl(120, 100%, 40%);">+// <0x0=> NACK is transmitted when a parity error is received.</span><br><span style="color: hsl(120, 100%, 40%);">+// <0x1=> NACK is not transmitted when a parity error is received.</span><br><span style="color: hsl(120, 100%, 40%);">+// <i> Define whether a NACK is transmitted when a parity error is received.</span><br><span style="color: hsl(120, 100%, 40%);">+// <id> usart_inack</span><br><span style="color: hsl(120, 100%, 40%);">+#ifndef CONF_SERCOM_7_USART_INACK</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_INACK 0x0</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+// <o> ISO7816 Disable Successive Not Acknowledge</span><br><span style="color: hsl(120, 100%, 40%);">+// <0x0=> The successive receive NACK is disable.</span><br><span style="color: hsl(120, 100%, 40%);">+// <0x1=> The successive receive NACK is enable.</span><br><span style="color: hsl(120, 100%, 40%);">+// <i> Define whether NACK will be sent on parity error reception.</span><br><span style="color: hsl(120, 100%, 40%);">+// <id> usart_dsnack</span><br><span style="color: hsl(120, 100%, 40%);">+#ifndef CONF_SERCOM_7_USART_DSNACK</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_DSNACK 0x0</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+// <o> ISO7816 Maximum Iterations<0-7></span><br><span style="color: hsl(120, 100%, 40%);">+// <i> Define the maximum number of retransmit iterations.</span><br><span style="color: hsl(120, 100%, 40%);">+// <id> usart_maxiter</span><br><span style="color: hsl(120, 100%, 40%);">+#ifndef CONF_SERCOM_7_USART_MAXITER</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_MAXITER 0x7</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+// <o> ISO7816 Guard Time</span><br><span style="color: hsl(120, 100%, 40%);">+// <0x2=> 2-bit times</span><br><span style="color: hsl(120, 100%, 40%);">+// <0x3=> 3-bit times</span><br><span style="color: hsl(120, 100%, 40%);">+// <0x4=> 4-bit times</span><br><span style="color: hsl(120, 100%, 40%);">+// <0x5=> 5-bit times</span><br><span style="color: hsl(120, 100%, 40%);">+// <0x6=> 6-bit times</span><br><span style="color: hsl(120, 100%, 40%);">+// <0x7=> 7-bit times</span><br><span style="color: hsl(120, 100%, 40%);">+// <i> Define the guard time.</span><br><span style="color: hsl(120, 100%, 40%);">+// <id> usart_gtime</span><br><span style="color: hsl(120, 100%, 40%);">+#ifndef CONF_SERCOM_7_USART_GTIME</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_GTIME 0x2</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+// <q> Inverse transmission and reception enabled</span><br><span style="color: hsl(120, 100%, 40%);">+// <i> Define inverse transmission and reception enabled.</span><br><span style="color: hsl(120, 100%, 40%);">+// <id> usart_inverse_enabled</span><br><span style="color: hsl(120, 100%, 40%);">+#ifndef CONF_SERCOM_7_USART_INVERSE_ENABLED</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_INVERSE_ENABLED 0x0</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#if (CONF_SERCOM_7_USART_INVERSE_ENABLED == 1)</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_RXINV 0x1</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_TXINV 0x1</span><br><span style="color: hsl(120, 100%, 40%);">+#else</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_RXINV 0x0</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_TXINV 0x0</span><br><span> #endif</span><br><span> </span><br><span> // </h></span><br><span>@@ -2005,44 +2067,13 @@</span><br><span> #endif</span><br><span> </span><br><span> // <o> Operating Mode</span><br><span style="color: hsl(0, 100%, 40%);">-// <0x0=>USART with external clock</span><br><span> // <0x1=>USART with internal clock</span><br><span style="color: hsl(0, 100%, 40%);">-// <i> Drive the shift register by an internal clock generated by the baud rate generator or an external clock supplied on the XCK pin.</span><br><span style="color: hsl(120, 100%, 40%);">+// <i> Drive the shift register by an internal clock generated by the baud rate generator.</span><br><span> // <id> usart_arch_clock_mode</span><br><span> #ifndef CONF_SERCOM_7_USART_MODE</span><br><span> #define CONF_SERCOM_7_USART_MODE 0x1</span><br><span> #endif</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-// <o> Sample Rate</span><br><span style="color: hsl(0, 100%, 40%);">-// <0x0=>16x arithmetic</span><br><span style="color: hsl(0, 100%, 40%);">-// <0x1=>16x fractional</span><br><span style="color: hsl(0, 100%, 40%);">-// <0x2=>8x arithmetic</span><br><span style="color: hsl(0, 100%, 40%);">-// <0x3=>8x fractional</span><br><span style="color: hsl(0, 100%, 40%);">-// <0x4=>3x arithmetic</span><br><span style="color: hsl(0, 100%, 40%);">-// <i> How many over-sampling bits used when sampling data state</span><br><span style="color: hsl(0, 100%, 40%);">-// <id> usart_arch_sampr</span><br><span style="color: hsl(0, 100%, 40%);">-#ifndef CONF_SERCOM_7_USART_SAMPR</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_SAMPR 0x0</span><br><span style="color: hsl(0, 100%, 40%);">-#endif</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-// <o> Sample Adjustment</span><br><span style="color: hsl(0, 100%, 40%);">-// <0x0=>7-8-9 (3-4-5 8-bit over-sampling)</span><br><span style="color: hsl(0, 100%, 40%);">-// <0x1=>9-10-11 (4-5-6 8-bit over-sampling)</span><br><span style="color: hsl(0, 100%, 40%);">-// <0x2=>11-12-13 (5-6-7 8-bit over-sampling)</span><br><span style="color: hsl(0, 100%, 40%);">-// <0x3=>13-14-15 (6-7-8 8-bit over-sampling)</span><br><span style="color: hsl(0, 100%, 40%);">-// <i> Adjust which samples to use for data sampling in asynchronous mode</span><br><span style="color: hsl(0, 100%, 40%);">-// <id> usart_arch_sampa</span><br><span style="color: hsl(0, 100%, 40%);">-#ifndef CONF_SERCOM_7_USART_SAMPA</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_SAMPA 0x0</span><br><span style="color: hsl(0, 100%, 40%);">-#endif</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-// <o> Fractional Part <0-7></span><br><span style="color: hsl(0, 100%, 40%);">-// <i> Fractional part of the baud rate if baud rate generator is in fractional mode</span><br><span style="color: hsl(0, 100%, 40%);">-// <id> usart_arch_fractional</span><br><span style="color: hsl(0, 100%, 40%);">-#ifndef CONF_SERCOM_7_USART_FRACTIONAL</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_FRACTIONAL 0x0</span><br><span style="color: hsl(0, 100%, 40%);">-#endif</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> // <o> Data Order</span><br><span> // <0=>MSB is transmitted first</span><br><span> // <1=>LSB is transmitted first</span><br><span>@@ -2052,27 +2083,6 @@</span><br><span> #define CONF_SERCOM_7_USART_DORD 1</span><br><span> #endif</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-// Does not do anything in UART mode</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_CPOL 0</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-// <o> Encoding Format</span><br><span style="color: hsl(0, 100%, 40%);">-// <0=>No encoding</span><br><span style="color: hsl(0, 100%, 40%);">-// <1=>IrDA encoded</span><br><span style="color: hsl(0, 100%, 40%);">-// <id> usart_arch_enc</span><br><span style="color: hsl(0, 100%, 40%);">-#ifndef CONF_SERCOM_7_USART_ENC</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_ENC 0</span><br><span style="color: hsl(0, 100%, 40%);">-#endif</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-// <o> LIN Slave Enable</span><br><span style="color: hsl(0, 100%, 40%);">-// <i> Break Character Detection and Auto-Baud/LIN Slave Enable.</span><br><span style="color: hsl(0, 100%, 40%);">-// <i> Additional setting needed: 16x sample rate using fractional baud rate generation (CTRLA.SAMPR = 1).</span><br><span style="color: hsl(0, 100%, 40%);">-// <0=>Disable</span><br><span style="color: hsl(0, 100%, 40%);">-// <1=>Enable</span><br><span style="color: hsl(0, 100%, 40%);">-// <id> usart_arch_lin_slave_enable</span><br><span style="color: hsl(0, 100%, 40%);">-#ifndef CONF_SERCOM_7_USART_LIN_SLAVE_ENABLE</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_LIN_SLAVE_ENABLE 0</span><br><span style="color: hsl(0, 100%, 40%);">-#endif</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> // <o> Debug Stop Mode</span><br><span> // <i> Behavior of the baud-rate generator when CPU is halted by external debugger.</span><br><span> // <0=>Keep running</span><br><span>@@ -2082,58 +2092,38 @@</span><br><span> #define CONF_SERCOM_7_USART_DEBUG_STOP_MODE 0</span><br><span> #endif</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+// Does not do anything in USRT mode</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_SAMPR 0x0</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_SAMPA 0x0</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_FRACTIONAL 0x0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+// Does not do anything in UART mode</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_CPOL 0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+// Does not do anything in USRT mode</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_ENC 0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> // </e></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#ifndef CONF_SERCOM_7_USART_INACK</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_INACK 0x0</span><br><span style="color: hsl(0, 100%, 40%);">-#endif</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#ifndef CONF_SERCOM_7_USART_DSNACK</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_DSNACK 0x0</span><br><span style="color: hsl(0, 100%, 40%);">-#endif</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#ifndef CONF_SERCOM_7_USART_MAXITER</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_MAXITER 0x7</span><br><span style="color: hsl(0, 100%, 40%);">-#endif</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#ifndef CONF_SERCOM_7_USART_GTIME</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_GTIME 0x2</span><br><span style="color: hsl(0, 100%, 40%);">-#endif</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_RXINV 0x0</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_TXINV 0x0</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> #ifndef CONF_SERCOM_7_USART_CMODE</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_CMODE 0</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_CMODE CONF_SERCOM_7_USART_ISO7816_PROTOCOL_T</span><br><span> #endif</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* RX is on PIN_PB21 */</span><br><span> #ifndef CONF_SERCOM_7_USART_RXPO</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_RXPO 1 /* RX is on PIN_PB31 */</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_RXPO 0</span><br><span> #endif</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* TX uses the same pin with RX */</span><br><span> #ifndef CONF_SERCOM_7_USART_TXPO</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_TXPO 0 /* TX is on PIN_PB30 */</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_TXPO 2</span><br><span> #endif</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* Set correct parity settings in register interface based on PARITY setting */</span><br><span style="color: hsl(0, 100%, 40%);">-#if CONF_SERCOM_7_USART_LIN_SLAVE_ENABLE == 1</span><br><span style="color: hsl(0, 100%, 40%);">-#if CONF_SERCOM_7_USART_PARITY == 0</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_PMODE 0</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_FORM 4</span><br><span style="color: hsl(0, 100%, 40%);">-#else</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_PMODE CONF_SERCOM_7_USART_PARITY - 1</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_FORM 5</span><br><span style="color: hsl(0, 100%, 40%);">-#endif</span><br><span style="color: hsl(0, 100%, 40%);">-#else /* #if CONF_SERCOM_7_USART_LIN_SLAVE_ENABLE == 0 */</span><br><span style="color: hsl(0, 100%, 40%);">-#if CONF_SERCOM_7_USART_PARITY == 0</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_PMODE 0</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_FORM 0</span><br><span style="color: hsl(0, 100%, 40%);">-#else</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_PMODE CONF_SERCOM_7_USART_PARITY - 1</span><br><span style="color: hsl(0, 100%, 40%);">-#define CONF_SERCOM_7_USART_FORM 1</span><br><span style="color: hsl(0, 100%, 40%);">-#endif</span><br><span style="color: hsl(0, 100%, 40%);">-#endif</span><br><span style="color: hsl(120, 100%, 40%);">+/* Set iso7816 mode */</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_PMODE (CONF_SERCOM_7_USART_PARITY - 1)</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_FORM 7</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#if CONF_SERCOM_7_USART_CMODE == 0</span><br><span> // Calculate BAUD register value in UART mode</span><br><span> #if CONF_SERCOM_7_USART_SAMPR == 0</span><br><span> #ifndef CONF_SERCOM_7_USART_BAUD_RATE</span><br><span>@@ -2177,6 +2167,19 @@</span><br><span> #endif</span><br><span> #endif</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#elif CONF_SERCOM_7_USART_CMODE == 1</span><br><span style="color: hsl(120, 100%, 40%);">+#ifndef CONF_SERCOM_7_USART_BAUD_RATE</span><br><span style="color: hsl(120, 100%, 40%);">+// Calculate BAUD register value in USRT mode</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_BAUD_RATE (CONF_GCLK_SERCOM7_CORE_FREQUENCY) / (2 * CONF_SERCOM_7_USART_BAUD) - 1</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#ifndef CONF_SERCOM_7_USART_RECEIVE_PULSE_LENGTH</span><br><span style="color: hsl(120, 100%, 40%);">+#define CONF_SERCOM_7_USART_RECEIVE_PULSE_LENGTH 0</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+#else</span><br><span style="color: hsl(120, 100%, 40%);">+#error CMODE value for SERCOM 7 in USART mode not known</span><br><span style="color: hsl(120, 100%, 40%);">+#endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> // <<< end of configuration section >>></span><br><span> </span><br><span> #endif // HPL_SERCOM_CONFIG_H</span><br><span>diff --git a/sysmoOCTSIM/driver_init.c b/sysmoOCTSIM/driver_init.c</span><br><span>index 1a58ad9..e56ba0d 100644</span><br><span>--- a/sysmoOCTSIM/driver_init.c</span><br><span>+++ b/sysmoOCTSIM/driver_init.c</span><br><span>@@ -33,7 +33,7 @@</span><br><span> #define SIM6_BUFFER_SIZE 16</span><br><span> </span><br><span> /*! The buffer size for USART */</span><br><span style="color: hsl(0, 100%, 40%);">-#define UART_DEBUG_BUFFER_SIZE 16</span><br><span style="color: hsl(120, 100%, 40%);">+#define SIM7_BUFFER_SIZE 16</span><br><span> </span><br><span> struct usart_async_descriptor SIM0;</span><br><span> struct usart_async_descriptor SIM1;</span><br><span>@@ -42,7 +42,7 @@</span><br><span> struct usart_async_descriptor SIM4;</span><br><span> struct usart_async_descriptor SIM5;</span><br><span> struct usart_async_descriptor SIM6;</span><br><span style="color: hsl(0, 100%, 40%);">-struct usart_async_descriptor UART_debug;</span><br><span style="color: hsl(120, 100%, 40%);">+struct usart_async_descriptor SIM7;</span><br><span> </span><br><span> static uint8_t SIM0_buffer[SIM0_BUFFER_SIZE];</span><br><span> static uint8_t SIM1_buffer[SIM1_BUFFER_SIZE];</span><br><span>@@ -51,7 +51,7 @@</span><br><span> static uint8_t SIM4_buffer[SIM4_BUFFER_SIZE];</span><br><span> static uint8_t SIM5_buffer[SIM5_BUFFER_SIZE];</span><br><span> static uint8_t SIM6_buffer[SIM6_BUFFER_SIZE];</span><br><span style="color: hsl(0, 100%, 40%);">-static uint8_t UART_debug_buffer[UART_DEBUG_BUFFER_SIZE];</span><br><span style="color: hsl(120, 100%, 40%);">+static uint8_t SIM7_buffer[SIM7_BUFFER_SIZE];</span><br><span> </span><br><span> /**</span><br><span>  * \brief USART Clock initialization function</span><br><span>@@ -317,7 +317,7 @@</span><br><span>  *</span><br><span>  * Enables register interface and peripheral clock</span><br><span>  */</span><br><span style="color: hsl(0, 100%, 40%);">-void UART_debug_CLOCK_init()</span><br><span style="color: hsl(120, 100%, 40%);">+void SIM7_CLOCK_init()</span><br><span> {</span><br><span> </span><br><span>  hri_gclk_write_PCHCTRL_reg(GCLK, SERCOM7_GCLK_ID_CORE, CONF_GCLK_SERCOM7_CORE_SRC | (1 << GCLK_PCHCTRL_CHEN_Pos));</span><br><span>@@ -331,12 +331,10 @@</span><br><span>  *</span><br><span>  * Set each required pin to USART functionality</span><br><span>  */</span><br><span style="color: hsl(0, 100%, 40%);">-void UART_debug_PORT_init()</span><br><span style="color: hsl(120, 100%, 40%);">+void SIM7_PORT_init()</span><br><span> {</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     gpio_set_pin_function(UART_TX, PINMUX_PB30C_SERCOM7_PAD0);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      gpio_set_pin_function(UART_RX, PINMUX_PB31C_SERCOM7_PAD1);</span><br><span style="color: hsl(120, 100%, 40%);">+    gpio_set_pin_function(SIM7_IO, PINMUX_PB21D_SERCOM7_PAD0);</span><br><span> }</span><br><span> </span><br><span> /**</span><br><span>@@ -344,11 +342,11 @@</span><br><span>  *</span><br><span>  * Enables USART peripheral, clocks and initializes USART driver</span><br><span>  */</span><br><span style="color: hsl(0, 100%, 40%);">-void UART_debug_init(void)</span><br><span style="color: hsl(120, 100%, 40%);">+void SIM7_init(void)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-        UART_debug_CLOCK_init();</span><br><span style="color: hsl(0, 100%, 40%);">-        usart_async_init(&UART_debug, SERCOM7, UART_debug_buffer, UART_DEBUG_BUFFER_SIZE, (void *)NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-    UART_debug_PORT_init();</span><br><span style="color: hsl(120, 100%, 40%);">+       SIM7_CLOCK_init();</span><br><span style="color: hsl(120, 100%, 40%);">+    usart_async_init(&SIM7, SERCOM7, SIM7_buffer, SIM7_BUFFER_SIZE, (void *)NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+    SIM7_PORT_init();</span><br><span> }</span><br><span> </span><br><span> void USB_DEVICE_INSTANCE_PORT_init(void)</span><br><span>@@ -860,7 +858,7 @@</span><br><span>         SIM4_init();</span><br><span>         SIM5_init();</span><br><span>         SIM6_init();</span><br><span style="color: hsl(0, 100%, 40%);">-    UART_debug_init();</span><br><span style="color: hsl(120, 100%, 40%);">+    SIM7_init();</span><br><span> </span><br><span>     USB_DEVICE_INSTANCE_init();</span><br><span> }</span><br><span>diff --git a/sysmoOCTSIM/driver_init.h b/sysmoOCTSIM/driver_init.h</span><br><span>index a0fbb88..a38ccef 100644</span><br><span>--- a/sysmoOCTSIM/driver_init.h</span><br><span>+++ b/sysmoOCTSIM/driver_init.h</span><br><span>@@ -39,7 +39,7 @@</span><br><span> extern struct usart_async_descriptor SIM4;</span><br><span> extern struct usart_async_descriptor SIM5;</span><br><span> extern struct usart_async_descriptor SIM6;</span><br><span style="color: hsl(0, 100%, 40%);">-extern struct usart_async_descriptor UART_debug;</span><br><span style="color: hsl(120, 100%, 40%);">+extern struct usart_async_descriptor SIM7;</span><br><span> </span><br><span> void SIM0_PORT_init(void);</span><br><span> void SIM0_CLOCK_init(void);</span><br><span>@@ -69,9 +69,9 @@</span><br><span> void SIM6_CLOCK_init(void);</span><br><span> void SIM6_init(void);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void UART_debug_PORT_init(void);</span><br><span style="color: hsl(0, 100%, 40%);">-void UART_debug_CLOCK_init(void);</span><br><span style="color: hsl(0, 100%, 40%);">-void UART_debug_init(void);</span><br><span style="color: hsl(120, 100%, 40%);">+void SIM7_PORT_init(void);</span><br><span style="color: hsl(120, 100%, 40%);">+void SIM7_CLOCK_init(void);</span><br><span style="color: hsl(120, 100%, 40%);">+void SIM7_init(void);</span><br><span> </span><br><span> void USB_DEVICE_INSTANCE_CLOCK_init(void);</span><br><span> void USB_DEVICE_INSTANCE_init(void);</span><br><span>diff --git a/sysmoOCTSIM/examples/driver_examples.c b/sysmoOCTSIM/examples/driver_examples.c</span><br><span>index 14f1ae5..a8747bc 100644</span><br><span>--- a/sysmoOCTSIM/examples/driver_examples.c</span><br><span>+++ b/sysmoOCTSIM/examples/driver_examples.c</span><br><span>@@ -214,7 +214,7 @@</span><br><span> }</span><br><span> </span><br><span> /**</span><br><span style="color: hsl(0, 100%, 40%);">- * Example of using UART_debug to write "Hello World" using the IO abstraction.</span><br><span style="color: hsl(120, 100%, 40%);">+ * Example of using SIM7 to write "Hello World" using the IO abstraction.</span><br><span>  *</span><br><span>  * Since the driver is asynchronous we need to use statically allocated memory for string</span><br><span>  * because driver initiates transfer and then returns before the transmission is completed.</span><br><span>@@ -222,22 +222,22 @@</span><br><span>  * Once transfer has been completed the tx_cb function will be called.</span><br><span>  */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static uint8_t example_UART_debug[12] = "Hello World!";</span><br><span style="color: hsl(120, 100%, 40%);">+static uint8_t example_SIM7[12] = "Hello World!";</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void tx_cb_UART_debug(const struct usart_async_descriptor *const io_descr)</span><br><span style="color: hsl(120, 100%, 40%);">+static void tx_cb_SIM7(const struct usart_async_descriptor *const io_descr)</span><br><span> {</span><br><span>      /* Transfer completed */</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void UART_debug_example(void)</span><br><span style="color: hsl(120, 100%, 40%);">+void SIM7_example(void)</span><br><span> {</span><br><span>         struct io_descriptor *io;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   usart_async_register_callback(&UART_debug, USART_ASYNC_TXC_CB, tx_cb_UART_debug);</span><br><span style="color: hsl(0, 100%, 40%);">-   /*usart_async_register_callback(&UART_debug, USART_ASYNC_RXC_CB, rx_cb);</span><br><span style="color: hsl(0, 100%, 40%);">-    usart_async_register_callback(&UART_debug, USART_ASYNC_ERROR_CB, err_cb);*/</span><br><span style="color: hsl(0, 100%, 40%);">- usart_async_get_io_descriptor(&UART_debug, &io);</span><br><span style="color: hsl(0, 100%, 40%);">-        usart_async_enable(&UART_debug);</span><br><span style="color: hsl(120, 100%, 40%);">+  usart_async_register_callback(&SIM7, USART_ASYNC_TXC_CB, tx_cb_SIM7);</span><br><span style="color: hsl(120, 100%, 40%);">+     /*usart_async_register_callback(&SIM7, USART_ASYNC_RXC_CB, rx_cb);</span><br><span style="color: hsl(120, 100%, 40%);">+        usart_async_register_callback(&SIM7, USART_ASYNC_ERROR_CB, err_cb);*/</span><br><span style="color: hsl(120, 100%, 40%);">+     usart_async_get_io_descriptor(&SIM7, &io);</span><br><span style="color: hsl(120, 100%, 40%);">+    usart_async_enable(&SIM7);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      io_write(io, example_UART_debug, 12);</span><br><span style="color: hsl(120, 100%, 40%);">+ io_write(io, example_SIM7, 12);</span><br><span> }</span><br><span>diff --git a/sysmoOCTSIM/examples/driver_examples.h b/sysmoOCTSIM/examples/driver_examples.h</span><br><span>index 4f2ce98..76856f0 100644</span><br><span>--- a/sysmoOCTSIM/examples/driver_examples.h</span><br><span>+++ b/sysmoOCTSIM/examples/driver_examples.h</span><br><span>@@ -26,7 +26,7 @@</span><br><span> </span><br><span> void SIM6_example(void);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void UART_debug_example(void);</span><br><span style="color: hsl(120, 100%, 40%);">+void SIM7_example(void);</span><br><span> </span><br><span> #ifdef __cplusplus</span><br><span> }</span><br><span>diff --git a/sysmoOCTSIM/main.c b/sysmoOCTSIM/main.c</span><br><span>index 50e82c6..9500e08 100644</span><br><span>--- a/sysmoOCTSIM/main.c</span><br><span>+++ b/sysmoOCTSIM/main.c</span><br><span>@@ -27,21 +27,6 @@</span><br><span> #include "octsim_i2c.h"</span><br><span> #include "ncn8025.h"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-volatile static bool data_arrived = false;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static void tx_cb_UART_debug(const struct usart_async_descriptor *const io_descr)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-       /* Transfer completed */</span><br><span style="color: hsl(0, 100%, 40%);">-        //gpio_toggle_pin_level(LED_system);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static void rx_cb_UART_debug(const struct usart_async_descriptor *const io_descr)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- /* Receive completed */</span><br><span style="color: hsl(0, 100%, 40%);">- gpio_toggle_pin_level(USER_LED);</span><br><span style="color: hsl(0, 100%, 40%);">-        data_arrived = true;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> static void board_init()</span><br><span> {</span><br><span>       int i;</span><br><span>@@ -64,24 +49,6 @@</span><br><span> int main(void)</span><br><span> {</span><br><span>   atmel_start_init();</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-     usart_async_register_callback(&UART_debug, USART_ASYNC_TXC_CB, tx_cb_UART_debug);</span><br><span style="color: hsl(0, 100%, 40%);">-   usart_async_register_callback(&UART_debug, USART_ASYNC_RXC_CB, rx_cb_UART_debug);</span><br><span style="color: hsl(0, 100%, 40%);">-   usart_async_enable(&UART_debug);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    usb_start();</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>         board_init();</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   const char* welcome = "\r\n\r\nsysmocom sysmoOCTSIM\r\n";</span><br><span style="color: hsl(0, 100%, 40%);">-     while (io_write(&UART_debug.io, (const uint8_t*)welcome, strlen(welcome)) != strlen(welcome)); // print welcome message</span><br><span style="color: hsl(0, 100%, 40%);">-     while (true) { // main loop</span><br><span style="color: hsl(0, 100%, 40%);">-             if (data_arrived) { // input on UART debug</span><br><span style="color: hsl(0, 100%, 40%);">-                      data_arrived = false; // clear flag</span><br><span style="color: hsl(0, 100%, 40%);">-                     uint8_t recv_char; // to store the input</span><br><span style="color: hsl(0, 100%, 40%);">-                        while (io_read(&UART_debug.io, &recv_char, 1) == 1) { // read input</span><br><span style="color: hsl(0, 100%, 40%);">-                             while (io_write(&UART_debug.io, &recv_char, 1) != 1); // echo back to output</span><br><span style="color: hsl(0, 100%, 40%);">-                    }</span><br><span style="color: hsl(0, 100%, 40%);">-               }</span><br><span style="color: hsl(0, 100%, 40%);">-       }</span><br><span style="color: hsl(120, 100%, 40%);">+     usb_start();</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/13053">change 13053</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/13053"/><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-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Idfbd067b4b0e2034337732da2ff5b7cfef8fe4ae </div>
<div style="display:none"> Gerrit-Change-Number: 13053 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Kévin Redon <kredon@sysmocom.de> </div>