I am trying to get working a basic demo of using the SHELL module of SDK with the CDC USB interface for RT1010.
After merging the shell demo app with the hello world cdc demo app, I cannot receive correctly the data from serial interface.
The problem is the Shell demo alone works perfect but I need non blocking mode, then hello world cdc demo works perfect on non blocking mode. When merging I can debug the serial reception to the ISR of Serial Manager callback, such as i send some serial command and make a breakpoint in SerialManager_RxCallback function, but then I am seeing that the code never reach the function SerialManager_Task(handle); which is the point of non blocking, instead of calling SHELL_Task(s_shellHandle); from the main loop as this will block until exit. After getting the ISR and calling SerialManager_Task, this indeed whould call the registered callback , such as serialWriteHandle->callback.
Under SHELL_SerialManagerRxCallback, when non blocking is enable, the call to SHELL_Task is produced.
Now what I have found is that a consequence of something a I am probably missing, after hitting the Serial Manager ISR, there is a line that checks for some buffer existence, such as
if ((handle->openedReadHandleHead != NULL) && (handle->openedReadHandleHead->transfer.buffer != NULL))
This buffer is NULL in fact.
I have seen that the only place where this buffer is initialize is under the function SerialManager_ReadNonBlocking, I have try to call this function before hand but then I noticed that further down in the SerialManager_RxCallback, after I have received the data there is an if clause which enter to not do anything such as
if (handle->openedReadHandleHead->transfer.length > handle->openedReadHandleHead->transfer.soFar)
// HERE IS WHERE MY CODE ENDS
if (kSerialManager_TransmissionBlocking == handle->openedReadHandleHead->transfer.mode)
handle->openedReadHandleHead->transfer.buffer = NULL;
handle->openedReadHandleHead->transfer.status = kStatus_SerialManager_Success;
#if (defined(SERIAL_MANAGER_USE_COMMON_TASK) && (SERIAL_MANAGER_USE_COMMON_TASK > 0U))
handle->commontaskMsg.callback = SerialManager_Task;
handle->commontaskMsg.callbackParam = handle;
Does someone at NXP has experience working with this pieces of code that can help please?
Many thanks in advance,
If you need a professional solution for this requirement that works out-of-the-box on any 1010..1064 try the attached (with OTA and serial loading and complete AES256 code and clone protection built in) - guide at https://www.utasker.com/docs/iMX/uTaskerLoader_TestDrive.pdf
[Tip: press SW3 to enter loader or press SW9 to start application]
It has a command shell on the LPUART (debugger's VCOM by defaultat 115kBaud) and will move it to the USB-CDC interface when connected (and enter key hit - command "quit" on LPUART if used first). There are various additional features such as USB-CDC to LPUART bridging, USB-MSD or USB speed tests, SPI parameter and file system etc...
[uTasker project developer for Kinetis and i.MX RT]
! Out-of-the-box i.MX RT and Kinetis solution for professionals preferring to concentrate on product development and completion ! ! Project compatibility between Kinetis and i.MX RT parts (single library) and accurate i.MX RT simulation in Visual Studio ! ! Remote desktop training and remote debugging service on request !