<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>CDC ACM USBD Binary Mode</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/95691/cdc-acm-usbd-binary-mode</link><description>Hello All, 
 Thanks in advance for looking at this. 
 We have implemented the CDC / ADC / USBD code into our product. It is fast, stable, and seems to be working well... 
 ... until we want to send 8 bit (as opposed to 7 bit ASCII) data. The lower levels</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Mon, 30 Jan 2023 18:55:42 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/95691/cdc-acm-usbd-binary-mode" /><item><title>RE: CDC ACM USBD Binary Mode</title><link>https://devzone.nordicsemi.com/thread/407180?ContentTypeID=1</link><pubDate>Mon, 30 Jan 2023 18:55:42 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:d1c45196-6fd5-4a7e-a2fa-13754d223659</guid><dc:creator>Susheel Nuguru</dc:creator><description>&lt;p&gt;Sorry for late reply, I did not see that you tested with 7th bit set high when you brute force it in the array. Then I am confused, isn&amp;#39;t it the snprintf that is doing the escaping? Can you please check the uartTxBuffer after snprintf?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I am asking to do this even though you think that it is not necessary, because I do not see anything in the usbd code that uses any other external libraries other than memset. And I am confident with the memset behavior but not very confident on how the formatting in snprintf.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: CDC ACM USBD Binary Mode</title><link>https://devzone.nordicsemi.com/thread/406528?ContentTypeID=1</link><pubDate>Wed, 25 Jan 2023 16:53:07 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:4dd4de88-eafb-46c4-9ff1-4c0efd7cf04a</guid><dc:creator>DDGGOO</dc:creator><description>&lt;p&gt;Please see code snippet above... that combination is in there.&lt;/p&gt;
&lt;p&gt;Or are you asking something else?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: CDC ACM USBD Binary Mode</title><link>https://devzone.nordicsemi.com/thread/406180?ContentTypeID=1</link><pubDate>Tue, 24 Jan 2023 09:09:12 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:011a7ef9-aa25-4b34-a885-4187dd04a276</guid><dc:creator>Susheel Nuguru</dc:creator><description>&lt;p&gt;There is nothiing in the USB drivers that I can see which differentiates the data between ASCII and non-ASCII. Could it be the snprintf that is doing this? Can you please do a quick test to manually write the buffer with characters with bit 7 set to high and not use snprintf?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: CDC ACM USBD Binary Mode</title><link>https://devzone.nordicsemi.com/thread/406062?ContentTypeID=1</link><pubDate>Mon, 23 Jan 2023 14:36:55 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:814380db-061a-4803-9019-24490349a295</guid><dc:creator>DDGGOO</dc:creator><description>&lt;p&gt;Thank you for your response, and good that you are able to reproduce this.&lt;/p&gt;
&lt;p&gt;Outstanding / unanswered questions from my previous post here:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;It appears that something in the stack is trying to figure out if this is ASCII or not... is this somehow expected behavior?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;If we send pure binary via this API, are there any likelihood that this would be escaped?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Perhaps you could pose these questions to the USB driver experts and let us know the answers?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: CDC ACM USBD Binary Mode</title><link>https://devzone.nordicsemi.com/thread/406029?ContentTypeID=1</link><pubDate>Mon, 23 Jan 2023 12:45:23 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:acf88f17-464e-49e9-bcdf-ae4f2e1a10fd</guid><dc:creator>Susheel Nuguru</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Sorry for late reply, I am able to reproduce what you tested. It could be a side affect of the use of macros to copy the buffer data into driver storage but I can see the same thing that you see.&lt;/p&gt;
&lt;p&gt;Have you have a workaround in mind? If not, I can try to contact the usb driver experts to shed some light on how to have a workaround for this.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: CDC ACM USBD Binary Mode</title><link>https://devzone.nordicsemi.com/thread/405544?ContentTypeID=1</link><pubDate>Wed, 18 Jan 2023 18:10:54 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:ba0fef3e-72a7-435b-a85e-1465c2d32bfb</guid><dc:creator>DDGGOO</dc:creator><description>&lt;p&gt;Hello Susheel,&lt;br /&gt;&lt;br /&gt;Thank you in advance for your attention.&lt;br /&gt;&lt;br /&gt;Apologies for the delay in responding, have been running various experiments to get additional information on this.&lt;br /&gt;Same ASCII &amp;#39;escaping&amp;#39; behavior is observed with either nRF5_SDK_17.0.2 or nRF5_SDK_17.1.0.&lt;br /&gt;&lt;br /&gt;Here is a code fragment which works perfectly:&lt;br /&gt;&lt;br /&gt;// Generic 7 bit ASCII:&lt;br /&gt;snprintf(usbTxBuf, sizeof(usbTxBuf),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;HDT, %05d\r\n&amp;quot;, ourTxCount);&lt;br /&gt;// Invoke transport:&lt;br /&gt;nrfRetVal = app_usbd_cdc_acm_write(&amp;amp;_actAppCdcAcm,&amp;nbsp;&amp;nbsp; // Instance&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Tx buffer&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ourTxCount);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Number of bytes to Tx&lt;/p&gt;
&lt;p&gt;This generates &amp;quot;escaping&amp;quot;:&lt;br /&gt;&lt;br /&gt;// UTF-8 / ISO 8859 / mixed bit 7 set / clear transmission:&lt;br /&gt;snprintf(usbTxBuf, sizeof(usbTxBuf),&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;HDT, &amp;#39;&amp;Agrave;&amp;#39; &amp;#39;&amp;Auml;&amp;#39; &amp;#39;&amp;Ouml;&amp;#39; &amp;#39;&amp;auml;&amp;#39; &amp;#39;&amp;ouml;&amp;#39;: %05d\r\n&amp;quot;, ourTxCount);&lt;br /&gt;// Invoke transport:&lt;br /&gt;nrfRetVal = app_usbd_cdc_acm_write(&amp;amp;_actAppCdcAcm,&amp;nbsp;&amp;nbsp; // Instance&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Tx buffer&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ourTxCount);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Number of bytes to Tx&lt;br /&gt;&lt;br /&gt;Always nominal return values from app_usbd_cdc_acm_write().&lt;br /&gt;&lt;br /&gt;We have confirmed this with binary dumps on the host... this &amp;#39;escaping&amp;#39; is happening in the Nordic USB stack.&lt;br /&gt;&lt;br /&gt;After further experimentation, any character with bit 7 set high is escaped with:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0xC3 (original char &amp;amp; 0xBF), so &amp;quot;&amp;Auml;&amp;quot;, 0xC4, becomes: 0xC3 0x84&lt;br /&gt;&lt;br /&gt;However, sending a pure binary such as:&lt;br /&gt;&lt;br /&gt;// Brute force fill in buffer:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf[0] = 0x01;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf[1] = 0x02;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf[2] = 0x03;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf[3] = 0x81;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf[4] = 0x82;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf[5] = 0x83;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf[6] = 0x84;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf[7] = 0x84;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf[8] = 0x00;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf[9] = 0x0D;&lt;br /&gt;// Invoke transport:&lt;br /&gt;nrfRetVal = app_usbd_cdc_acm_write(&amp;amp;_actAppCdcAcm,&amp;nbsp;&amp;nbsp; // Instance&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Tx buffer&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Number of bytes to Tx&lt;br /&gt;&lt;br /&gt;results in correct, unescaped transmission from Nordic system and correct reception on the USB host.&lt;br /&gt;&lt;br /&gt;Even mixed transmission such as:&lt;br /&gt;&lt;br /&gt;// Brute force fill in buffer:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf[0] = &amp;#39;A&amp;#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf[1] = &amp;#39;B&amp;#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf[2] = 0x02;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf[3] = 0x03;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf[4] = 0x82;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf[5] = 0x83;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf[6] = 0xC3;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf[7] = 0xC3;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf[8] = 0x00;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf[9] = 0x0D;&lt;br /&gt;// Invoke transport:&lt;br /&gt;nrfRetVal = app_usbd_cdc_acm_write(&amp;amp;_actAppCdcAcm,&amp;nbsp;&amp;nbsp; // Instance&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; usbTxBuf,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Tx buffer&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Number of bytes to Tx&lt;br /&gt;&lt;br /&gt;results in unescaped transmission and correct reception on the USB host.&lt;br /&gt;&lt;br /&gt;It appears that something in the stack is trying to figure out if this is ASCII or not... is this somehow expected behavior?&lt;/p&gt;
&lt;p&gt;If we send pure binary via this API, are there any likelihood that this would be escaped?&lt;/p&gt;
&lt;p&gt;Regards, David&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: CDC ACM USBD Binary Mode</title><link>https://devzone.nordicsemi.com/thread/405222?ContentTypeID=1</link><pubDate>Tue, 17 Jan 2023 12:02:20 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:334ac730-cee2-4546-a4d0-700de0d89bb2</guid><dc:creator>Susheel Nuguru</dc:creator><description>&lt;p&gt;Can you please upload some code snippets on how you are doing the 8 bit transfers instead of 7-bit? I can try to replicate it at my end to be able to debug. Which SDK version are you using?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>