123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710 |
- #include "ZComDef.h"
- #include "OSAL.h"
- #include "ZMAC.h"
- #include "mac_main.h"
- #include "ssp.h"
- #if !defined NONWK
- #include "ZGlobals.h"
- #endif
- uint32 _ScanChannels;
- extern uint8 aExtendedAddress[];
- extern void MAC_SetRandomSeedCB(macRNGFcn_t pCBFcn);
- void *ZMac_ScanBuf = NULL;
- uint8 ZMacInit( void )
- {
- uint8 stat;
- #if defined( ZCL_KEY_ESTABLISH )
-
- MAC_SetRandomSeedCB( SSP_StoreRandomSeedNV);
- #endif
- MAC_Init();
- MAC_InitDevice();
- #if !defined NONWK
- if ( ZG_BUILD_RTR_TYPE )
- {
- MAC_InitCoord();
- }
- #endif
-
- stat = ZMacReset( TRUE );
-
- osal_int_disable( INTS_ALL );
- return ( stat );
- }
- uint8 ZMacReset( bool SetDefaultPIB )
- {
- byte stat;
- byte value;
- stat = MAC_MlmeResetReq( SetDefaultPIB );
-
- value = FALSE;
- MAC_MlmeSetReq( MAC_ASSOCIATED_PAN_COORD, &value );
- MAC_MlmeSetReq( MAC_EXTENDED_ADDRESS, &aExtendedAddress );
- if (ZMac_ScanBuf)
- {
- osal_mem_free(ZMac_ScanBuf);
- ZMac_ScanBuf = NULL;
- }
- return ( stat );
- }
- uint8 ZMacGetReq( uint8 attr, uint8 *value )
- {
- if ( attr == ZMacExtAddr )
- {
- osal_cpyExtAddr( value, &aExtendedAddress );
- return ZMacSuccess;
- }
- return (ZMacStatus_t) MAC_MlmeGetReq( attr, value );
- }
- uint8 ZMacSetReq( uint8 attr, byte *value )
- {
- if ( attr == ZMacExtAddr )
- {
- osal_cpyExtAddr( aExtendedAddress, value );
- }
- return (ZMacStatus_t) MAC_MlmeSetReq( attr, value );
- }
- #ifdef MAC_SECURITY
- uint8 ZMacSecurityGetReq( uint8 attr, uint8 *value )
- {
- return (ZMacStatus_t) MAC_MlmeGetSecurityReq( attr, value );
- }
- uint8 ZMacSecuritySetReq( uint8 attr, byte *value )
- {
- return (ZMacStatus_t) MAC_MlmeSetSecurityReq( attr, value );
- }
- #endif
- uint8 ZMacAssociateReq( ZMacAssociateReq_t *pData )
- {
-
- pData->Sec.SecurityLevel = false;
- MAC_MlmeAssociateReq ( (macMlmeAssociateReq_t *)pData);
- return ( ZMacSuccess );
- }
- uint8 ZMacAssociateRsp( ZMacAssociateRsp_t *pData )
- {
-
- pData->Sec.SecurityLevel = false;
- return ( MAC_MlmeAssociateRsp( (macMlmeAssociateRsp_t *) pData ) );
- }
- uint8 ZMacDisassociateReq( ZMacDisassociateReq_t *pData )
- {
-
- pData->Sec.SecurityLevel = false;
- MAC_MlmeDisassociateReq( (macMlmeDisassociateReq_t *)pData);
- return ( ZMacSuccess );
- }
- uint8 ZMacOrphanRsp( ZMacOrphanRsp_t *pData )
- {
-
- pData->Sec.SecurityLevel = false;
- MAC_MlmeOrphanRsp( (macMlmeOrphanRsp_t *)pData);
- return ( ZMacSuccess );
- }
- uint8 ZMacScanReq( ZMacScanReq_t *pData )
- {
- _ScanChannels = pData->ScanChannels;
-
- if (ZMac_ScanBuf != NULL)
- {
- return MAC_SCAN_IN_PROGRESS;
- }
- if (pData->ScanType != ZMAC_ORPHAN_SCAN)
- {
-
- if (pData->ScanType == ZMAC_ED_SCAN)
- {
- if ((ZMac_ScanBuf = osal_mem_alloc(ZMAC_ED_SCAN_MAXCHANNELS)) == NULL)
- {
- return MAC_NO_RESOURCES;
- }
- osal_memset(ZMac_ScanBuf, 0, ZMAC_ED_SCAN_MAXCHANNELS);
- pData->Result.pEnergyDetect = ((uint8*)ZMac_ScanBuf) + MAC_CHAN_11;
- }
- else if (pData->MaxResults > 0)
- {
- if ((ZMac_ScanBuf = pData->Result.pPanDescriptor =
- osal_mem_alloc( sizeof( ZMacPanDesc_t ) * pData->MaxResults )) == NULL)
- {
- return MAC_NO_RESOURCES;
- }
- }
- }
-
- pData->ChannelPage = 0x00;
- MAC_MlmeScanReq ((macMlmeScanReq_t *)pData);
- return ZMacSuccess;
- }
- uint8 ZMacStartReq( ZMacStartReq_t *pData )
- {
- uint8 stat;
-
- stat = true;
- MAC_MlmeSetReq( MAC_RX_ON_WHEN_IDLE, &stat );
-
- pData->RealignSec.SecurityLevel = false;
- pData->BeaconSec.SecurityLevel = false;
- MAC_MlmeStartReq((macMlmeStartReq_t *) pData);
-
-
- return ZMacSuccess;
- }
- uint8 ZMacSyncReq( ZMacSyncReq_t *pData )
- {
- MAC_MlmeSyncReq( (macMlmeSyncReq_t *)pData);
- return ZMacSuccess;
- }
- uint8 ZMacPollReq( ZMacPollReq_t *pData )
- {
-
- pData->Sec.SecurityLevel = false;
- MAC_MlmePollReq ((macMlmePollReq_t *)pData);
- return ( ZMacSuccess );
- }
- uint8 ZMacDataReqSec( ZMacDataReq_t *pData, applySecCB_t secCB )
- {
- macMcpsDataReq_t *pBuf;
-
- pBuf = MAC_McpsDataAlloc( pData->msduLength, pData->Sec.SecurityLevel, pData->Sec.KeyIdMode );
- if ( pBuf )
- {
-
- osal_memcpy( &pBuf->mac, pData, sizeof (macDataReq_t) );
-
- osal_memcpy( pBuf->msdu.p, pData->msdu, pData->msduLength );
-
- osal_memcpy( &pBuf->sec, &pData->Sec, sizeof (macSec_t));
-
- if ( secCB && pBuf->msdu.len && pBuf->msdu.p )
- {
- if ( secCB( pBuf->msdu.len, pBuf->msdu.p ) != ZSuccess )
- {
-
-
- osal_msg_deallocate( (uint8 *)pBuf );
- return ( MAC_NO_RESOURCES );
- }
- }
-
- MAC_McpsDataReq( pBuf );
- return ( ZMacSuccess );
- }
- return ( MAC_NO_RESOURCES );
- }
- uint8 ZMacDataReq( ZMacDataReq_t *pData )
- {
- return ZMacDataReqSec( pData, NULL );
- }
- uint8 ZMacPurgeReq( byte Handle )
- {
- MAC_McpsPurgeReq( Handle );
- return ZMacSuccess;
- }
- ZMacStatus_t ZMacSrcMatchEnable (uint8 addrType, uint8 numEntries)
- {
- return (MAC_SrcMatchEnable(addrType, numEntries));
- }
- ZMacStatus_t ZMacSrcMatchAddEntry (zAddrType_t *addr, uint16 panID)
- {
- return (MAC_SrcMatchAddEntry ((sAddr_t*)addr, panID));
- }
- ZMacStatus_t ZMacSrcMatchDeleteEntry (zAddrType_t *addr, uint16 panID)
- {
- return (MAC_SrcMatchDeleteEntry ((sAddr_t*)addr, panID));
- }
- ZMacStatus_t ZMacSrcMatchAckAllPending (uint8 option)
- {
- MAC_SrcMatchAckAllPending (option);
- return ZMacSuccess;
- }
- ZMacStatus_t ZMacSrcMatchCheckAllPending (void)
- {
- return (MAC_SrcMatchCheckAllPending ());
- }
- void ZMacPwrOnReq ( void )
- {
- MAC_PwrOnReq();
- }
- uint8 ZMac_PwrMode(void)
- {
- return (MAC_PwrMode());
- }
- uint8 ZMacSetTransmitPower( ZMacTransmitPower_t level )
- {
- return MAC_MlmeSetReq( ZMacPhyTransmitPowerSigned, &level );
- }
- void ZMacSendNoData ( uint16 DstAddr, uint16 DstPANId )
- {
- macMcpsDataReq_t *pBuf;
-
- pBuf = MAC_McpsDataAlloc(0, MAC_SEC_LEVEL_NONE, MAC_KEY_ID_MODE_NONE);
- if (pBuf)
- {
-
- pBuf->mac.srcAddrMode = SADDR_MODE_SHORT;
-
- pBuf->mac.dstAddr.addr.shortAddr = DstAddr;
- pBuf->mac.dstAddr.addrMode = SADDR_MODE_SHORT;
- pBuf->mac.dstPanId = DstPANId;
-
- pBuf->mac.msduHandle = 0;
- pBuf->mac.txOptions = ZMAC_TXOPTION_ACK | ZMAC_TXOPTION_NO_RETRANS | ZMAC_TXOPTION_NO_CNF;
-
- pBuf->sec.securityLevel = false;
-
- MAC_McpsDataReq(pBuf);
- }
- }
- uint8 ZMacStateIdle( void )
- {
- return macStateIdle();
- }
|