]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - sub1ghz-sensor-to-cloud/tida01476.git/blobdiff - sensor_cc1310lp/Application/MAC/StartUp/macstack.c
initial commit, TIDA-01476 archive and hex
[sub1ghz-sensor-to-cloud/tida01476.git] / sensor_cc1310lp / Application / MAC / StartUp / macstack.c
diff --git a/sensor_cc1310lp/Application/MAC/StartUp/macstack.c b/sensor_cc1310lp/Application/MAC/StartUp/macstack.c
deleted file mode 100644 (file)
index d70d4c6..0000000
+++ /dev/null
@@ -1,579 +0,0 @@
-
-/******************************************************************************
-
- @file  macstack.c
-
- @brief Mac Stack interface function implementation
-
- Group: WCS LPC
- Target Device: CC13xx
-
- ******************************************************************************
- Copyright (c) 2013-2017, Texas Instruments Incorporated
- All rights reserved.
-
- IMPORTANT: Your use of this Software is limited to those specific rights
- granted under the terms of a software license agreement between the user
- who downloaded the software, his/her employer (which must be your employer)
- and Texas Instruments Incorporated (the "License"). You may not use this
- Software unless you agree to abide by the terms of the License. The License
- limits your use, and you acknowledge, that the Software may not be modified,
- copied or distributed unless embedded on a Texas Instruments microcontroller
- or used solely and exclusively in conjunction with a Texas Instruments radio
- frequency transceiver, which is integrated into your product. Other than for
- the foregoing purpose, you may not use, reproduce, copy, prepare derivative
- works of, modify, distribute, perform, display or sell this Software and/or
- its documentation for any purpose.
-
- YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
- PROVIDED \93AS IS\94 WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
- INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
- NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
- TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
- NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
- LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
- INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
- OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
- OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
- (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
-
- Should you have any questions regarding your right to use this Software,
- contact Texas Instruments Incorporated at www.TI.com.
-
- ******************************************************************************
- Release Name: simplelink_cc13x0_sdk_1_30_00_06"
- Release Date: 2017-03-08 14:43:30
- *****************************************************************************/
-
-#include "macstack.h"
-#include <icall.h>
-#include "osal.h"
-#include "mac_main.h"
-#include "mac_data.h"
-#include "mac_pib.h"
-#include "macs.h"
-#include "mac_mgmt.h"
-#include "mac_security.h"
-#include "mac_security_pib.h"
-#include "hal_mcu.h"
-#include "macwrapper.h"
-#include "icall_lite_translation.h"
-/* ------------------------------------------------------------------------------------------------
- *                                           Constants
- * ------------------------------------------------------------------------------------------------
- */
-#define TRUE 1
-#define FALSE 0
-
-/* ------------------------------------------------------------------------------------------------
- *                                           Typedefs
- * ------------------------------------------------------------------------------------------------
- */
-/* Size table for MAC structures */
-const uint8 msacbackSizeTable [] =
-{
-  0,                                   /* unused */
-  sizeof(macMlmeAssociateInd_t),       /* MAC_MLME_ASSOCIATE_IND */\
-  sizeof(macMlmeAssociateCnf_t),       /* MAC_MLME_ASSOCIATE_CNF */
-  sizeof(macMlmeDisassociateInd_t),    /* MAC_MLME_DISASSOCIATE_IND */
-  sizeof(macMlmeDisassociateCnf_t),    /* MAC_MLME_DISASSOCIATE_CNF */
-  sizeof(macMlmeBeaconNotifyInd_t),    /* MAC_MLME_BEACON_NOTIFY_IND */
-  sizeof(macMlmeOrphanInd_t),          /* MAC_MLME_ORPHAN_IND */
-  sizeof(macMlmeScanCnf_t),            /* MAC_MLME_SCAN_CNF */
-  sizeof(macMlmeStartCnf_t),           /* MAC_MLME_START_CNF */
-  sizeof(macMlmeSyncLossInd_t),        /* MAC_MLME_SYNC_LOSS_IND */
-  sizeof(macMlmePollCnf_t),            /* MAC_MLME_POLL_CNF */
-  sizeof(macMlmeCommStatusInd_t),      /* MAC_MLME_COMM_STATUS_IND */
-  sizeof(macMcpsDataCnf_t),            /* MAC_MCPS_DATA_CNF */
-  sizeof(macMcpsDataInd_t),            /* MAC_MCPS_DATA_IND */
-  sizeof(macMcpsPurgeCnf_t),           /* MAC_MCPS_PURGE_CNF */
-  sizeof(macEventHdr_t),               /* MAC_PWR_ON_CNF */
-  sizeof(macMlmePollInd_t),            /* MAC_MLME_POLL_IND */
-  sizeof(macMlmeWSAsyncCnf_t),         /* MAC_MLME_WS_ASYNC_CNF */
-  sizeof(macMlmeWSAsyncInd_t)          /* MAC_MLME_WS_ASYNC_IND */
-};
-
-/* ------------------------------------------------------------------------------------------------
- *                                         Local Variables
- * ------------------------------------------------------------------------------------------------
- */
-/* Save the AppTaskId, part of MAC_INIT message in this variable */
-uint8 AppTaskId;
-
-/* Holds the value for query transmit, passed by the application.
- * A value of 0 indicates no continuation of retry,
- * A value of 1 indicates continue retransmission.
- */
-static uint8 queryRetransmit = 0;
-
-/* Holds the value for pending indirect msgs, passed by the application.
- * A value of 0 indicates no pending indirect msg.
- */
-static uint8 checkPending = 0;
-
-/* The Application will send the address of the MAC_CbackQueryRetransmit()
- * as part of MAC_INIT message. Save to function pointer below
- */
-uint8 (*pMacCbackQueryRetransmit)() = NULL;
-
-/* The Application will send the address of the MAC_CbackCheckPending()
- * as part of MAC_INIT message. Save to function pointer below
- */
-uint8 (*pMacCbackCheckPending)() = NULL;
-
-/* ------------------------------------------------------------------------------------------------
- *                                           Functions
- * ------------------------------------------------------------------------------------------------
- */
-static void macApp(macCmd_t *pMsg);
-extern uint8 MAC_MlmeGetReqSize( uint8 pibAttribute );
-extern uint8 MAC_MlmeGetSecurityReqSize( uint8 pibAttribute );
-extern uint8 MAC_MlmeFHGetReqSize( uint16 pibAttribute );
-
-/*********************************************************************
- * @fn      icall_slimMsgParser
- *
- * @brief   parsing of the mac specific icall direct API message.
- *
- * @param   *msg - pointer to message receive
- *
- * @return  None
-*/
-void icall_slimMsgParser(void * msg)
-{
-  osal_msg_hdr_t *hdr;
-
-  hdr = (osal_msg_hdr_t *) msg - 1;
-
-  if (hdr->format == ICALL_MSG_FORMAT_DIRECT_API_ID)
-  {
-      icall_directAPIMsg_t* appMsg = msg;
-      icall_liteTranslation(appMsg);
-  }
-}
-
-/**************************************************************************************************
- * @fn          macStackTaskInit
- *
- * @brief       This function is called when OSAL is initialized.
- *
- * input parameters
- *
- * @param       taskId - OSAL task ID for MAC
- *
- * output parameters
- *
- * None.
- *
- * @return      None.
- **************************************************************************************************
- */
-void macStackTaskInit(uint8 taskId)
-{
-  ICall_EntityID entity;
-  ICall_Semaphore sem;
-
-  /* Enroll the service that this stack represents */
-  ICall_enrollService(ICALL_SERVICE_CLASS_TIMAC, NULL, &entity, &sem);
-
-  /* Enroll the obtained dispatcher entity and task ID to OSAL
-   * so that OSAL can route the dispatcher message into
-   * the appropriate OSAL task.
-   */
-  osal_enroll_dispatchid(taskId, entity);
-
-  /* Enroll the obtained service entity. This is to ensure
-   * that non-task (such as ISR) can route the dispatcher message
-   * into the appropriate alien task (application).
-   */
-  osal_enroll_notasksender(entity);
-
-  macTaskId = taskId;
-}
-
-/**************************************************************************************************
- * @fn          macStackEventLoop
- *
- * @brief       This function is the main event handling function of the MAC executing
- *              in task context.  This function is called by OSAL when an event or message
- *              is pending for the MAC.
- *
- * input parameters
- *
- * @param       taskId - OSAL task ID of this task.
- * @param       events - OSAL event mask.
- *
- * output parameters
- *
- * None.
- *
- * @return      None.
- **************************************************************************************************
- */
-uint16 macStackEventLoop(uint8 taskId, uint16 events)
-{
-  macEvent_t          *pMsg;
-  macEventHdr_t       hdr;
-  halIntState_t       intState;
-  uint8               status;
-
-  (void)taskId;  // Intentionally unreferenced parameter
-
-  /* handle events on rx queue */
-  if (events & MAC_RX_QUEUE_TASK_EVT)
-  {
-    while ((pMsg = (macEvent_t *) osal_msg_dequeue(&macData.rxQueue)) != NULL)
-    {
-      HAL_ENTER_CRITICAL_SECTION(intState);
-      macData.rxCount--;
-      HAL_EXIT_CRITICAL_SECTION(intState);
-
-      hdr.event = pMsg->hdr.event;
-
-      macMain.pBuf = (uint8 *)pMsg;
-
-      /* Check security processing result from the LMAC */
-      status = pMsg->hdr.status;
-
-      if (status == MAC_SUCCESS)
-      {
-        macExecute(pMsg);
-      }
-#ifdef FEATURE_MAC_SECURITY
-      else if ((status  == MAC_IMPROPER_KEY_TYPE) ||
-               (status  == MAC_IMPROPER_SECURITY_LEVEL) ||
-               (status  == MAC_SECURITY_ERROR) ||
-               (status  == MAC_UNAVAILABLE_KEY) ||
-               (status  == MAC_UNSUPPORTED_LEGACY) ||
-               (status  == MAC_UNSUPPORTED_SECURITY) ||
-               (status  == MAC_INVALID_PARAMETER) ||
-               (status  == MAC_COUNTER_ERROR))
-      {
-        macCommStatusInd(pMsg);
-
-        /* discard invalid DATA_IND frame */
-        if (hdr.event == MAC_RX_DATA_IND_EVT)
-        {
-          mac_msg_deallocate((uint8 **)&pMsg);
-        }
-      }
-#else
-      else
-      {
-        /* discard invalid DATA_IND frame */
-        if (hdr.event == MAC_RX_DATA_IND_EVT)
-        {
-          mac_msg_deallocate((uint8 **)&pMsg);
-        }
-      }
-#endif /* FEATURE_MAC_SECURITY */
-
-      /* discard all frames except DATA_IND.
-       * do not free data frames for app
-       */
-      if (hdr.event != MAC_RX_DATA_IND_EVT)
-      {
-        mac_msg_deallocate(&macMain.pBuf);
-      }
-    }
-  }
-
-  /* handle events on osal msg queue */
-  if (events & SYS_EVENT_MSG)
-  {
-    while ((pMsg = (macEvent_t *) osal_msg_receive(macTaskId)) != NULL)
-    {
-      if(pMsg->hdr.event >= 0xD0)
-      {
-        /* 0xE0 to 0xFF is reserved for App to send messages to TIMAC */
-        macApp((macCmd_t *)pMsg);
-      }
-      else
-      {
-        macMain.pBuf = (uint8 *)pMsg;
-        /* execute state machine */
-        macExecute(pMsg);
-        mac_msg_deallocate(&macMain.pBuf);
-      }
-    }
-  }
-
-  /* handle tx complete */
-  if (events & MAC_TX_COMPLETE_TASK_EVT)
-  {
-    hdr.event = MAC_INT_TX_COMPLETE_EVT;
-    macExecute((macEvent_t *) &hdr);
-  }
-
-  /* handle response wait timer */
-  if (events & MAC_RESPONSE_WAIT_TASK_EVT)
-  {
-    hdr.event = MAC_TIM_RESPONSE_WAIT_EVT;
-    macExecute((macEvent_t *) &hdr);
-  }
-
-  /* handle frame response timer */
-  if (events & MAC_FRAME_RESPONSE_TASK_EVT)
-  {
-    hdr.event = MAC_TIM_FRAME_RESPONSE_EVT;
-    macExecute((macEvent_t *) &hdr);
-  }
-
-  /* handle scan timer */
-  if (events & MAC_SCAN_TASK_EVT)
-  {
-    hdr.event = MAC_TIM_SCAN_EVT;
-    macExecute((macEvent_t *) &hdr);
-  }
-
-  /* handle indirect timer */
-  if (events & MAC_EXP_INDIRECT_TASK_EVT)
-  {
-    hdr.event = MAC_TIM_EXP_INDIRECT_EVT;
-    macExecute((macEvent_t *) &hdr);
-  }
-
-  /* handle start complete */
-  if (events & MAC_START_COMPLETE_TASK_EVT)
-  {
-    hdr.status = MAC_SUCCESS;
-    hdr.event = MAC_INT_START_COMPLETE_EVT;
-    macExecute((macEvent_t *) &hdr);
-  }
-
-  /* handle pending broadcast */
-  if (events & MAC_BROADCAST_PEND_TASK_EVT)
-  {
-    hdr.status = MAC_SUCCESS;
-    hdr.event = MAC_INT_BROADCAST_PEND_EVT;
-    macExecute((macEvent_t *) &hdr);
-  }
-
-  /* handle pending message, if any */
-  if (macMain.pPending != NULL)
-  {
-    /* Hold off interrupts */
-    HAL_ENTER_CRITICAL_SECTION(intState);
-
-    pMsg = macMain.pPending;
-    macMain.pPending = NULL;
-
-    /* Allow interrupts */
-    HAL_EXIT_CRITICAL_SECTION(intState);
-
-    macMain.pBuf = (uint8 *)pMsg;
-    /* execute state machine */
-    macExecute(pMsg);
-    mac_msg_deallocate(&macMain.pBuf);
-  }
-
-  return 0;
-}
-
-/**************************************************************************************************
- * @fn          macApp
- *
- * @brief       This function is called when Application sends MAC Stack a message.
- *
- * input parameters
- *
- * @param       pMsg - pointer to macCmd_t structure
- *
- * output parameters
- *
- * None.
- *
- * @return      None.
- **************************************************************************************************
- */
-void macApp(macCmd_t *pMsg)
-{
-  uint8 dealloc = TRUE;
-  /*
-   * Set this flag to TRUE to send the message back to the app at the end
-   * of the function.
-   */
-  uint8 sendMsg = FALSE;
-
-  switch (pMsg->hdr.event)
-  {
-  case MAC_STACK_INIT_PARAMS:
-   AppTaskId = pMsg->macInit.srctaskid;
-   queryRetransmit = pMsg->macInit.retransmit;
-   checkPending = pMsg->macInit.pendingMsg;
-   pMacCbackQueryRetransmit = pMsg->macInit.pMacCbackQueryRetransmit;
-   pMacCbackCheckPending = pMsg->macInit.pMacCbackCheckPending;
-   dealloc = TRUE;
-   break;
-  }
-
-  if(sendMsg == TRUE)
-  {
-    /* send message to App */
-    osal_msg_send(AppTaskId, (uint8 *)pMsg);
-  }
-
-  if(dealloc)
-  {
-    osal_msg_deallocate((uint8 *)pMsg);
-  }
-}
-
-/**************************************************************************************************
- *
- * @fn          MAC_CbackEvent
- *
- * @brief       This callback function sends MAC events to the application.
- *              The application must implement this function.  A typical
- *              implementation of this function would allocate an OSAL message,
- *              copy the event parameters to the message, and send the message
- *              to the application's OSAL event handler.  This function may be
- *              executed from task or interrupt context and therefore must
- *              be reentrant.
- *
- * @param       pData - Pointer to parameters structure.
- *
- * @return      None.
- *
- **************************************************************************************************
-*/
-void MAC_CbackEvent(macCbackEvent_t *pData)
-{
-  macCbackEvent_t *pMsg = NULL;
-
-  uint8 len = msacbackSizeTable[pData->hdr.event];
-
-  switch (pData->hdr.event)
-  {
-    case MAC_MLME_BEACON_NOTIFY_IND:
-      if ( MAC_BEACON_STANDARD == pData->beaconNotifyInd.beaconType )
-      {
-        len += sizeof(macPanDesc_t) + pData->beaconNotifyInd.info.beaconData.sduLength +
-             MAC_PEND_FIELDS_LEN(pData->beaconNotifyInd.info.beaconData.pendAddrSpec);
-        if ((pMsg = (macCbackEvent_t *) osal_msg_allocate(len)) != NULL)
-        {
-          /* Copy data over and pass them up */
-          osal_memcpy(pMsg, pData, sizeof(macMlmeBeaconNotifyInd_t));
-          pMsg->beaconNotifyInd.info.beaconData.pPanDesc = (macPanDesc_t *) ((uint8 *) pMsg + sizeof(macMlmeBeaconNotifyInd_t));
-          osal_memcpy(pMsg->beaconNotifyInd.info.beaconData.pPanDesc, pData->beaconNotifyInd.info.beaconData.pPanDesc, sizeof(macPanDesc_t));
-          pMsg->beaconNotifyInd.info.beaconData.pSdu = (uint8 *) (pMsg->beaconNotifyInd.info.beaconData.pPanDesc + 1);
-          osal_memcpy(pMsg->beaconNotifyInd.info.beaconData.pSdu, pData->beaconNotifyInd.info.beaconData.pSdu, pData->beaconNotifyInd.info.beaconData.sduLength);
-        }
-      }
-      else if ( MAC_BEACON_ENHANCED == pData->beaconNotifyInd.beaconType )
-      {
-        len += sizeof(macPanDesc_t);
-
-        if ((pMsg = (macCbackEvent_t *) osal_msg_allocate(len)) != NULL)
-        {
-          /* Copy data over and pass them up */
-          osal_memcpy(pMsg, pData, sizeof(macMlmeBeaconNotifyInd_t));
-          pMsg->beaconNotifyInd.info.eBeaconData.pPanDesc = (macPanDesc_t *) ((uint8 *) pMsg + sizeof(macMlmeBeaconNotifyInd_t));
-          osal_memcpy(pMsg->beaconNotifyInd.info.eBeaconData.pPanDesc, pData->beaconNotifyInd.info.eBeaconData.pPanDesc, sizeof(macPanDesc_t));
-        }
-      }
-      break;
-
-    case MAC_MCPS_DATA_IND:
-    case MAC_MLME_WS_ASYNC_IND:
-      pMsg = pData;
-      break;
-
-
-    default:
-      pMsg = (macCbackEvent_t *)osal_msg_allocate(len);
-      if ((pMsg == NULL) && (pData->hdr.event == MAC_MCPS_DATA_CNF)
-                      && (pData->dataCnf.pDataReq != NULL))
-      {
-        /*
-         * The allocation failed for the data confirm, so we will
-         * try to deallocate the memory used by the data request.
-         * [mac_msg_deallocate() will NULL pDataReq]
-         */
-        mac_msg_deallocate((uint8**)&(pData->dataCnf.pDataReq));
-
-        /* Then, try the allocation again */
-        pMsg = (macCbackEvent_t *) osal_msg_allocate(len);
-      }
-
-      if (pMsg != NULL)
-      {
-        osal_memcpy(pMsg, pData, len);
-      }
-      break;
-  }
-
-  if (pMsg != NULL)
-  {
-    osal_msg_send(AppTaskId, (uint8 *) pMsg);
-  }
-}
-
-/**************************************************************************************************
- * @fn          MAC_CbackQueryRetransmit
- *
- * @brief       This function callback function returns whether or not to continue MAC
- *              retransmission.
- *              A return value '0x00' will indicate no continuation of retry and a return value
- *              '0x01' will indicate to continue retransmission. This callback function shall be
- *              used to stop continuing retransmission for RF4CE.
- *              MAC shall call this callback function whenever it finishes transmitting a packet
- *              for macMaxFrameRetries times.
- *
- * input parameters
- *
- * None.
- *
- * output parameters
- *
- * None.
- *
- * @return      0x00 to stop retransmission, 0x01 to continue retransmission.
- **************************************************************************************************
-*/
-uint8 MAC_CbackQueryRetransmit(void)
-{
-  uint8 reTransmit = queryRetransmit;
-
-  if ( pMacCbackQueryRetransmit )
-  {
-    reTransmit = (*pMacCbackQueryRetransmit)();
-  }
-
-  return reTransmit;
-}
-
-/**************************************************************************************************
- * @fn          MAC_CbackCheckPending
- *
- * @brief       This callback function returns the number of pending indirect messages queued in
- *              the application. Most applications do not queue indirect data and can simply
- *              always return zero. The number of pending indirect messages only needs to be
- *              returned if macCfg.appPendingQueue to TRUE.
- *
- * input parameters
- *
- * None.
- *
- * output parameters
- *
- * None.
- *
- * @return      The number of indirect messages queued in the application or zero.
- **************************************************************************************************
-*/
-uint8 MAC_CbackCheckPending(void)
-{
-  uint8 pend = checkPending;
-
-  if ( pMacCbackCheckPending )
-  {
-    pend = (*pMacCbackCheckPending)();
-  }
-
-  return pend;
-}
-
-
-