cancel
Showing results for 
Search instead for 
Did you mean: 

Trying to find expressions within a part of a class when in debugger

OIp.1
Associate III

Hi. I am using the debugger, and sometimes I hover over the objects to see their values, like so.

0693W00000YAZrLQAX.pngOne of the issues I've run into is this.

0693W00000YAZruQAH.pngOn many of the expressions, I cannot expand the details of the expressions, even though I am sure there are further information in there. For example, pClassDataCmsit. In this screen, there is no further details to this element of the class. However, in this other code, the further details to this element can be seen.

0693W00000YAZuAQAX.pngI am unsure how to see the details of elements like these at all times, I only know that I would quite like to have these details available at all times. This is the code in question:

/**
  * @brief  CDC_Transmit_FS
  *         Data to send over USB IN endpoint are sent over CDC interface
  *         through this function.
  *         @note
  *
  *
  * @param  Buf: Buffer of data to be sent
  * @param  Len: Number of data to be sent (in bytes)
  * @retval USBD_OK if all operations are OK else USBD_FAIL or USBD_BUSY
  */
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
{
  uint8_t result = USBD_OK;
  /* USER CODE BEGIN 7 */
  USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData;	//hcdc is given the data of pClassData. What is pClassData?
  if (hcdc->TxState != 0){	//If TxState in hcdc is not 0, return USBD_BUSY.
    return USBD_BUSY;
  }
  USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf, Len);	//SetTxBuffer sets the size of the buffer, as well as the buffer itself.
  result = USBD_CDC_TransmitPacket(&hUsbDeviceFS);	//USBD_CDC_TransmitPacket(&hUsbDeviceFS) transmits
  /* USER CODE END 7 */
  return result;
}
 
 
/**
  * @brief  USBD_CDC_SetTxBuffer
  * @param  pdev: device instance
  * @param  pbuff: Tx Buffer
  * @param  length: length of data to be sent
  * @param  ClassId: The Class ID
  * @retval status
  */
#ifdef USE_USBD_COMPOSITE	//If USE_USBD_COMPOSITE is defined, hcdc will take ClassID.
uint8_t USBD_CDC_SetTxBuffer(USBD_HandleTypeDef *pdev,
                             uint8_t *pbuff, uint32_t length, uint8_t ClassId)
{
  USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef *)pdev->pClassDataCmsit[ClassId];
#else						//Else, hcdc will take pdev->ClassID. I have no idea what these things respectively are.
uint8_t USBD_CDC_SetTxBuffer(USBD_HandleTypeDef *pdev,
                             uint8_t *pbuff, uint32_t length)
{
  USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef *)pdev->pClassDataCmsit[pdev->classId];
#endif /* USE_USBD_COMPOSITE */
 
  if (hcdc == NULL)		//hcdc is part of the input of USBD_CDC_SetTxBuffer related to pClass
  {
    return (uint8_t)USBD_FAIL;
  }
 
  hcdc->TxBuffer = pbuff;
  hcdc->TxLength = length;
 
  return (uint8_t)USBD_OK;
}

Please let me know if more information is required.

0 REPLIES 0