<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: USB data stream stops in LPCXpresso IDE</title>
    <link>https://community.nxp.com/t5/LPCXpresso-IDE/USB-data-stream-stops/m-p/587008#M27472</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by mattes on Sat Mar 08 11:05:48 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I am using LPCOpen 2. Not sure how what the USB stack version is. But it is using the software stack 'lpcusblib' that comes with lpcOpen2.x. The 11u14 does not offer USB ROM support to my undertstanding.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The project is based on what is shown in&amp;nbsp; nxp_lpcxpresso_11u14_lpcusblib_VirtualSerialDevice, which implements a CDC-ACM class driver,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;SPAN&gt;Started looking at &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fdocs.lpcware.com%2Fnxpusblib%2Fv0.98%2Fgroup___group___events.html" rel="nofollow" target="_blank"&gt;http://docs.lpcware.com/nxpusblib/v0.98/group___group___events.html&lt;/A&gt;&lt;SPAN&gt; for more details&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;on this matter, and there is a lot of information. just haven't found yet anything on detecting a listening PC application (open/close socket). &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I am currently using Linux for development, though I like to support Win and Mac platform as well.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Currently I am watching incoming bytes (CDC_Device_BytesReceived). The moment I received one char I assume that someone is listening and send out my data stream. And would be nice to know when the other end&amp;nbsp; stops listening (close socket) to stop sending.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; I think i could treat is like a serial device to manage DTR if that would make it work.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Though&amp;nbsp; do I really have to stop sending data when nobody is listening? &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I wouldn't mind if the data just gets lost.&amp;nbsp; All I care about is that once the PC app reconnects (open socket)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;that it is able to get the data again.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;And that is currently not happening. the moment the pc app&amp;nbsp; disconnect and reconnect there is&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;no data getting accross any longer.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;thanx for all your advice.&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 16 Jun 2016 01:21:44 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-16T01:21:44Z</dc:date>
    <item>
      <title>USB data stream stops</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/USB-data-stream-stops/m-p/587006#M27470</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by mattes on Fri Mar 07 18:08:56 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Working on the 11u14 and try to keep the USB communication (CDC) sane.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Start sending out data&amp;nbsp; to the PC and I use a simple 'cat /dev/TTYACM0' (or terminal program)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;to display/receive the data.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Once the program stops and restarts it will not receive any more data.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The debugger says it is somewhere in the USB stack.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am currently do not have any event controls built on the 11u14&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Looking into that I noticed that:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Event_USB_Device_Connect and Event_USB_Device_Disconnect are never firing&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I see other event coming though, like&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; Event_USB_Device_Device_Configuration&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; Event_USB_Device_ControlRequest&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; Event_CDC_Device_LineEncodingChanged.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Any explanation why _connect and _disconnect are not seen.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;What is the recommended way to keep the USB stack healthy and allow the PC software to&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;close the serial device and reopen it.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;How do i know on the 11u14 side when the PC side is opening the device?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Sorry for all the Q, but I am kinda noob with USB stuff.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:21:42 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/USB-data-stream-stops/m-p/587006#M27470</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:21:42Z</dc:date>
    </item>
    <item>
      <title>Re: USB data stream stops</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/USB-data-stream-stops/m-p/587007#M27471</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Tsuneo on Sat Mar 08 08:51:22 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Unless you would specify "the USB stack", you should get just vague general answer.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Sound like one of LPCOpen (or LPCUSBlib) version, but which one?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: &lt;/STRONG&gt;&lt;BR /&gt;Any explanation why _connect and _disconnect are not seen.&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Because these functions aren't implemented.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The function names appear just in comments.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Using "global search" of your editor, confirm it.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: &lt;/STRONG&gt;&lt;BR /&gt;What is the recommended way to keep the USB stack healthy and allow the PC software to&lt;BR /&gt;close the serial device and reopen it.&lt;BR /&gt;&lt;BR /&gt;How do i know on the 11u14 side when the PC side is opening the device?&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;SPAN&gt;On major platform (Linux, Windows and MacOS), nothing is sent to USB device implicitly, when PC application opens/closes a COM port (**1). Therefore, your PC application has to send a signal explicitly.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;DTR signaling is often applied for this purpose.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;On a terminal app, you may enable "hardware handshake (DTR-DSR)".&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Of course, a little customization is required on "the USB stack"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;If you would give the exact version of "the USB stack", we may discuss on the implementation details.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;(**1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;As an exception, Windows CloseHandle() drops DTR by sending SetControlLineState.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;But CreateFile() puts nothing.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Tsuneo&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:21:43 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/USB-data-stream-stops/m-p/587007#M27471</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:21:43Z</dc:date>
    </item>
    <item>
      <title>Re: USB data stream stops</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/USB-data-stream-stops/m-p/587008#M27472</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by mattes on Sat Mar 08 11:05:48 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I am using LPCOpen 2. Not sure how what the USB stack version is. But it is using the software stack 'lpcusblib' that comes with lpcOpen2.x. The 11u14 does not offer USB ROM support to my undertstanding.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The project is based on what is shown in&amp;nbsp; nxp_lpcxpresso_11u14_lpcusblib_VirtualSerialDevice, which implements a CDC-ACM class driver,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;SPAN&gt;Started looking at &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=http%3A%2F%2Fdocs.lpcware.com%2Fnxpusblib%2Fv0.98%2Fgroup___group___events.html" rel="nofollow" target="_blank"&gt;http://docs.lpcware.com/nxpusblib/v0.98/group___group___events.html&lt;/A&gt;&lt;SPAN&gt; for more details&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;on this matter, and there is a lot of information. just haven't found yet anything on detecting a listening PC application (open/close socket). &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I am currently using Linux for development, though I like to support Win and Mac platform as well.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Currently I am watching incoming bytes (CDC_Device_BytesReceived). The moment I received one char I assume that someone is listening and send out my data stream. And would be nice to know when the other end&amp;nbsp; stops listening (close socket) to stop sending.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; I think i could treat is like a serial device to manage DTR if that would make it work.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Though&amp;nbsp; do I really have to stop sending data when nobody is listening? &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I wouldn't mind if the data just gets lost.&amp;nbsp; All I care about is that once the PC app reconnects (open socket)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;that it is able to get the data again.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;And that is currently not happening. the moment the pc app&amp;nbsp; disconnect and reconnect there is&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;no data getting accross any longer.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;thanx for all your advice.&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:21:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/USB-data-stream-stops/m-p/587008#M27472</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:21:44Z</dc:date>
    </item>
    <item>
      <title>Re: USB data stream stops</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/USB-data-stream-stops/m-p/587009#M27473</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by mattes on Wed Mar 12 11:35:37 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I found a solution to my problem.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;When closing the device/socket from the PC app,&amp;nbsp; (e.g. 'cat /dev/TTYACM0') and the reopen it later,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;caused not to receive data from the usb device any longer.&amp;nbsp; See it as a sort of flow control to keep the USB stack happy. Not sure why this is necessary, (couldn't the usb stack do this itself?) but it does the trick.&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I added the following code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;

#define VERSION 123
#define CDC_SET_CONTROL_LINE_STATE 0x22

volatile int32_t usbDeviceOpen = 0;
volatile int32_t promptFlag = 0;


void EVENT_USB_Device_ControlRequest(void)
{
&amp;nbsp;&amp;nbsp; CDC_Device_ProcessControlRequest(&amp;amp;VirtualSerial_CDC_Interface);

&amp;nbsp;&amp;nbsp; switch ( USB_ControlRequest.bRequest )
&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case CDC_SET_CONTROL_LINE_STATE:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( USB_ControlRequest.wValue ) {
&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; usbDeviceOpen = 1;
&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; promptFlag = 1;
&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; else {
&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; usbDeviceOpen = 0;
&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; break;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
}

main()
{
&amp;nbsp;&amp;nbsp; init()

&amp;nbsp;&amp;nbsp; while( 1 ) {

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( usbDeviceOpen &amp;amp;&amp;amp; promptFlag ) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // say hello
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf((char*)tiBuffer,"\nhello, you are connected %s\n\n", VERSION );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; len = strlen((char*)tBuffer);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CDC_Device_SendData(&amp;amp;VirtualSerial_CDC_Interface, (char *)tBuffer, len);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; promptFlag = 0;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( usbDeviceOpen &amp;amp;&amp;amp; (counter %100000) ) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // make some noise
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf((char*)tiBuffer,"\ncounter %d ", counter );
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; len = strlen((char*)tBuffer);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CDC_Device_SendData(&amp;amp;VirtualSerial_CDC_Interface, (char *)tBuffer, len);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp; }

&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Now I can start and stop my application any time without having the 11U14 hangup on me.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The app (cat /dev/ttyACM0) sets DTR when opening the device and resets DTR when closing the device.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;On the lpc11u14 side this is recognized by CDC_SET_CONTROL_LINE_STATE request send to the&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;usb device.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;hope that help other to figure it out faster then I did.&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 01:21:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/USB-data-stream-stops/m-p/587009#M27473</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T01:21:44Z</dc:date>
    </item>
  </channel>
</rss>

