Skip to content

CP21xx driver, does not work on it's own when there are multiple interfaces/ports #58

Description

@ameyav21

So far it worked fine and there were no issues with FTDI. Now, I’m trying to work with a device which uses CP21xx driver which has two ports - “standard” and “enhanced”, my messages work on “standard” and I have changed the part of code in Android/drivers/CP21xx…cs to set the interface to the one with “Standard”, but my messages don’t get a response from the device.

Now, if I use a 3rd party app “Serial usb terminal” https://play.google.com/store/apps/details?id=de.kai_morich.serial_usb_terminal&hl=en_CA&gl=US

, whose source code I don’t have,and thensend my messages, get the reply from the device, and then use the UsbSerialForAndroid example app again, I now get responses to all my messages.

I tried setting it to always the "standard" interface by checking the name but that still doesn't work unless I use the third party app. I have also tried using a usb to ttl to see what the third party app sends as a message and what my app sends and they are identical.

Note that the code or configuration doesn’t change for the UsbSerialForAndroid. Also, once working, even if I close the app or send messages after a very long time , I still get replies, till the time I don’t remove the physical usb connection.

If I unplug and reply the usb or power cycle the device that uses the CP21x driver, then I again have to use the third party app first to get the UsbSerialForAndroid sample app working again. I don’t know why it needs that third party app to connect and send the messages first although I don’t change anything in the UsbSerialForAndroid app between those two scenarios.

this is the open function for the cp21xx driver, I edited it to not use enhanced port

public override void Open(UsbDeviceConnection connection)
{
if (mConnection != null)
{
throw new IOException("Already opened.");
}

mConnection = connection;
Boolean opened = false;
try
{
    for (int i = 0; i < mDevice.InterfaceCount; i++)
    {
        UsbInterface usbIface = mDevice.GetInterface(i);
        if (mConnection.ClaimInterface(usbIface, true))
        {
            Log.Debug(TAG, $"claimInterface {i} SUCCESS");
        }
        else
        {
            Log.Debug(TAG, $"claimInterface {i} FAIL");
        }
    }

    UsbInterface dataIface = mDevice.GetInterface(mDevice.InterfaceCount - 1);
    if (dataIface.Name.Contains("Enhanced"))
    {
        dataIface = mDevice.GetInterface(mDevice.InterfaceCount - 2); ;
    }
    for (int i = 0; i < dataIface.EndpointCount; i++)
    {
        UsbEndpoint ep = dataIface.GetEndpoint(i);
        if (ep.Type == (UsbAddressing)UsbSupport.UsbEndpointXferBulk)
        {
            if (ep.Direction == (UsbAddressing)UsbSupport.UsbDirIn)
            {
                mReadEndpoint = ep;
            }
            else
            {
                mWriteEndpoint = ep;
            }
        }
    }

    SetConfigSingle(SILABSER_IFC_ENABLE_REQUEST_CODE, UART_ENABLE);
    SetConfigSingle(SILABSER_SET_MHS_REQUEST_CODE, MCR_ALL | CONTROL_WRITE_DTR | CONTROL_WRITE_RTS);
    SetConfigSingle(SILABSER_SET_BAUDDIV_REQUEST_CODE, BAUD_RATE_GEN_FREQ / DEFAULT_BAUD_RATE);
    //            setParameters(DEFAULT_BAUD_RATE, DEFAULT_DATA_BITS, DEFAULT_STOP_BITS, DEFAULT_PARITY);
    opened = true;
}
finally
{
    if (!opened)
    {
        try
        {
            Close();
        }
        catch (IOException e)
        {
            // Ignore IOExceptions during close()
        }
    }
}

}

I don't know if there's anywhere else to set it to one of two interfaces in the UsbSerialForAndroid "UsbSerialForAndroid" app.

Has anyone ever worked with CP21xx drivers that have multiple ports/ interfaces with Android and usb serial ? Or anything similar that has two ports/ interfaces ?

looking for how to work with xamarin android usb serial to work with a port driver having two interfaces/ ports

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions