Exemple #1
0
/**
 * \return S_OK for success, S_FALSE for failure
 *
 * Registers the buffer pBufObj to the client ClientID
 */
HRESULT CDIL_CAN_MHS::CAN_ManageMsgBuf(BYTE bAction, DWORD ClientID, CBaseCANBufFSE* pBufObj)
{
HRESULT hResult = S_FALSE;
UINT unClientIndex;
UINT i;

if (ClientID != 0)
  {
  if (bGetClientObj(ClientID, unClientIndex))
    {
    SCLIENTBUFMAP &sClientObj = sg_asClientToBufMap[unClientIndex];
    if (bAction == MSGBUF_ADD)
      {  // **** Add msg buffer
      if (pBufObj)
        {
        if (sClientObj.m_unBufCount < MAX_BUFF_ALLOWED)
          {
          if (bIsBufferExists(sClientObj, pBufObj) == FALSE)
            {
            sClientObj.m_pClientBuf[sClientObj.m_unBufCount++] = pBufObj;
            hResult = S_OK;
            }
          else
            hResult = ERR_BUFFER_EXISTS;
          }
        }
      }
    else if (bAction == MSGBUF_CLEAR)
      {  // **** Clear msg buffer
      if (pBufObj != NULL) //REmove only buffer mentioned
        bRemoveClientBuffer(sClientObj.m_pClientBuf, sClientObj.m_unBufCount, pBufObj);
      else // Remove all
        {
        for (i = 0; i < sClientObj.m_unBufCount; i++)
          sClientObj.m_pClientBuf[i] = NULL;
        sClientObj.m_unBufCount = 0;
        }
      hResult = S_OK;
      }
    ////else
    ////  ASSERT(FALSE);
    }
  else
    hResult = ERR_NO_CLIENT_EXIST;
  }
else
  {
  if (bAction == MSGBUF_CLEAR)
    {  // **** clear msg buffer
    for (UINT i = 0; i < sg_unClientCnt; i++)
      CAN_ManageMsgBuf(MSGBUF_CLEAR, sg_asClientToBufMap[i].m_dwClientID, NULL);
    }
  hResult = S_OK;
  }
return(hResult);
}
/**
* \brief         Registers the buffer pBufObj to the client ClientID
* \param[in]     bAction, contains one of the values MSGBUF_ADD or MSGBUF_CLEAR
* \param[in]     ClientID, is the client ID
* \param[in]     pBufObj, is pointer to CBaseCANBufFSE object
* \return        S_OK for success, S_FALSE for failure
* \authors       Arunkumar Karri
* \date          07.10.2011 Created
*/
HRESULT CDIL_ISOLAR_EVE_VCAN::CAN_ManageMsgBuf(BYTE bAction, DWORD ClientID, CBaseCANBufFSE* pBufObj)
{
    HRESULT hResult = S_FALSE;
    if (ClientID != 0)
    {
        UINT unClientIndex;
        if (bGetClientObj(ClientID, unClientIndex))
        {
            SCLIENTBUFMAP& sClientObj = sg_asClientToBufMap[unClientIndex];
            if (bAction == MSGBUF_ADD)
            {
                /* Add msg buffer */
                if (pBufObj != nullptr)
                {
                    if (sClientObj.unBufCount < MAX_BUFF_ALLOWED)
                    {
                        if (bIsBufferExists(sClientObj, pBufObj) == FALSE)
                        {
                            sClientObj.pClientBuf[sClientObj.unBufCount++] = pBufObj;
                            hResult = S_OK;
                        }
                        else
                        {
                            hResult = ERR_BUFFER_EXISTS;
                        }
                    }
                }
            }
            else if (bAction == MSGBUF_CLEAR)
            {
                /* clear msg buffer */
                if (pBufObj != nullptr)
                {
                    /* Remove only buffer mentioned */
                    bRemoveClientBuffer(sClientObj.pClientBuf, sClientObj.unBufCount, pBufObj);
                }
                else
                {
                    /* Remove all */
                    for (UINT i = 0; i < sClientObj.unBufCount; i++)
                    {
                        sClientObj.pClientBuf[i] = nullptr;
                    }
                    sClientObj.unBufCount = 0;
                }
                hResult = S_OK;
            }
        }
        else
        {
            hResult = ERR_NO_CLIENT_EXIST;
        }
    }
    else
    {
        if (bAction == MSGBUF_CLEAR)
        {
            /* clear msg buffer */
            for (UINT i = 0; i < sg_unClientCnt; i++)
            {
                CAN_ManageMsgBuf(MSGBUF_CLEAR, sg_asClientToBufMap[i].dwClientID, nullptr);
            }
            hResult = S_OK;
        }
    }

    return hResult;
}