Hi Ed
The limit of 8 endpoints is a "physical" limit and not a configuration one. With 8 physical endpoints one can have 15 operational endpoints (as long as each physical (non-control) one does both IN and OUT operations)
To use IN and OUT on a single endpoint should just be a case of editing the descriptors accordingly: Instead of defining two endpoints, one as IN on endpoint X and one as OUT on endpoint Y, specify one as IN on endpoint X and one as OUT on endpoint X. The host will then uses the same (physical) endpoint for both IN and OUT on the two operational endpoints.
If you use a VCOM just for Rx/TX data you don't need an interrupt endpoint (that is used for modem signals like RTS, CTS) and so you only need one physical endpoint (you can have 7 x VCOMs on the HSUSB of the i.MX RT and 15 on the FSUSB of the Kinetis parts).
This means that for your development you actually need
0 - control
1- CTRL
2. IN + OUT spkrphone
3. FDBK
4. IN mic
5. VCOM IN + OUT
and then you have still 2 left for further features - eg. an RNDIS interface for monitoring and configuration via web browser
6. RNDIS data
7. RNDIS interrupt
In the uTasker project I have two defines:
#define USB_SIMPLEX_ENDPOINTS
#define CDC_WITHOUT_INTERRUPT_ENDPOINT
which allow switching between simplex and separate endpoints (although generally I leave USB_SIMPLEX_ENDPOINTS on because there are no disadvantages of sharing physical endpoints between IN and OUT usage).
When CDC_WITHOUT_INTERRUPT_ENDPOINT is enabled it removes the interrupt endpoints from each VCOM to free up additional physical endpoints.
There is a thread somewhere about VCOMs without interrupt endpoint so it can also be done by modifying SDK examples appropriately. IN/OUT sharing is almost certainly supported by the SDK but if not it is in fact simply a case of ensuring that when an endpoint is configured for IN or OUT it doesn't "touch" any configuration that may have already been set for OUT or IN utilisation (the registers have flags for both IN and OUT usage so only 'touch' the ones that are relevant when activating the endpoint and setting its type of operation).
Regards
Mark
[uTasker project developer for Kinetis and i.MX RT - developer of uTasker USB device/host library]
Contact me by personal message or on the uTasker web site to discuss professional training, solutions to problems or rapid product development requirements
For professionals searching for faster, problem-free Kinetis and i.MX RT 10xx developments the uTasker project holds the key: https://www.utasker.com/iMX/RT1064.html