2024-02-17 09:10 AM
Default USB settings for command packet size is 8U (CDC_CMD_PACKET_SIZE), meanwhile, if we want to change "hardware flow control" flags, we need to send 10 bytes command packet. (for 32F103)
If CDC_CMD_PACKET_SIZE is redefined in cubeMX package, I receive lots of warnings:
In file included from USB_DEVICE/App/usb_device.c:26:
Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc/usbd_cdc.h:61: warning: "CDC_CMD_PACKET_SIZE" redefined
61 | #define CDC_CMD_PACKET_SIZE 8U /* Control Endpoint Packet size */
I suggest to add few lines in "usb_cdc.h":
#ifndef CDC_CMD_PACKET_SIZE
#define CDC_CMD_PACKET_SIZE 8U /* Control Endpoint Packet size */
#endif
Now I can change command packet size in CubeMX user constants.
Why I need this? To set serial port control pins status.
void USB_CDC_SerialStatus(unsigned char status)
{
unsigned char buf[10];
buf[0]=0b10100001; //request type.
buf[1]=0x20; //notification SERIAL STATE
buf[2]=0;
buf[3]=0;
buf[4]=0;
buf[5]=0;
buf[6]=2;
buf[7]=0;
buf[8]=status;
buf[9]=0;
USBD_LL_Transmit(&hUsbDeviceFS, 0x82, buf,10); // WARNING! default cubemx packet size is too small in endpoint descriptor
//#define CDC_CMD_PACKET_SIZE 10U /* Control Endpoint Packet size */
// file usbd_cdc.h
}
And here is description of whole buffer and particular bits of "status" byte:
// Class notifications:
// SERIAL_STATE 20h, returns the current state of the carrier detects, DSR, break, and ring signal
//
// bmRequestType: 10100001b, SERIAL STATE, wValue 0, wIndex interface, wLenght 2, UART_STATE_BITMAP:
// 15:7 reserved.
// 6 bOverRun - received data has been discarded due to overrun in the device.
// 5 bParity =parity error
// 4 bFraming = framing error
// 3 BRingSignal =RI
// 2 bBreak = break detection state
// 1 bTxCarrier = DATA SET READY (DSR)
// 0 bRxCarrier = DCD, carrier detect
//0: 0xA1 bmRequestType
//1: 0x20 bNotification (SERIAL_STATE)
//2: 0x00 wValue
//3: 0x00
//4: xx wIndex (Interface number, 16 bits, LSB first)
//5: xx
//6: 0x02 wLength (Data length = 2 bytes, LSB first)
//7: 0x00
//8: xx UART State Bitmap (16bits, LSB first)
//9: xx
If it is another way to tell host the status, please share.
2024-02-17 11:56 AM
See same issue reported here 8 years ago:
Reasonable request, but I wouldn't hold your breath on getting things changed.
2024-02-17 12:29 PM
Yeap, 8 years ago. But I proposed solution! :beaming_face_with_smiling_eyes:
Just add two lines around #define for "compatibility" or just replace 8U with 10U.
I think, that they added redefine option for other constants.
Maybe STM32Cube firmware package developers can look at it again! And we will not receive message from anon STM employee what it is impossible to change line in firmware package.
2024-03-06 02:30 AM
Hello @LLeva.1
An internal ticket 175368 is submitted to add the proposed solution for CDC_CMD_PACKET_SIZE in order to facilitate CubeMX code regeneration.
Thank you for reporting this issue.
To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.
2024-03-30 08:08 AM
When editing, it would be nice to add '#ifndef~#endif' for every '#define'.