1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087 |
- /******************************************************************************
- Filename: MT_SYS.c
- Revised: $Date: 2012-03-07 01:04:58 -0800 (Wed, 07 Mar 2012) $
- Revision: $Revision: 29656 $
- Description: MonitorTest functions for SYS commands.
- Copyright 2007-2012 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 “AS IS” 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.
- *****************************************************************************/
- /***************************************************************************************************
- * INCLUDES
- ***************************************************************************************************/
- #include "ZComDef.h"
- #include "MT.h"
- #include "MT_SYS.h"
- #include "MT_VERSION.h"
- #include "nwk_util.h"
- #include "OSAL.h"
- #include "OSAL_NV.h"
- #include "Onboard.h" /* This is here because RAM read/write macros need it */
- #include "hal_adc.h"
- #include "ZGlobals.h"
- #include "OSAL_Clock.h"
- #include "mac_low_level.h"
- /***************************************************************************************************
- * MACROS
- ***************************************************************************************************/
- #define MT_SYS_DEVICE_INFO_RESPONSE_LEN 14
- #define MT_NV_ITEM_MAX_LENGTH 250
- #if !defined HAL_GPIO || !HAL_GPIO
- #define GPIO_DIR_IN(IDX)
- #define GPIO_DIR_OUT(IDX)
- #define GPIO_TRI(IDX)
- #define GPIO_PULL_UP(IDX)
- #define GPIO_PULL_DN(IDX)
- #define GPIO_SET(IDX)
- #define GPIO_CLR(IDX)
- #define GPIO_TOG(IDX)
- #define GPIO_GET(IDX) 0
- #define GPIO_HiD_SET() (val = 0)
- #define GPIO_HiD_CLR() (val = 0)
- #endif
- /***************************************************************************************************
- * CONSTANTS
- ***************************************************************************************************/
- #if !defined MT_SYS_OSAL_NV_READ_CERTIFICATE_DATA
- #define MT_SYS_OSAL_NV_READ_CERTIFICATE_DATA FALSE
- #endif
- const uint16 MT_SysOsalEventId [] = {
- MT_SYS_OSAL_EVENT_0,
- MT_SYS_OSAL_EVENT_1,
- MT_SYS_OSAL_EVENT_2,
- MT_SYS_OSAL_EVENT_3
- };
- typedef enum {
- GPIO_DIR,
- GPIO_TRI,
- GPIO_SET,
- GPIO_CLR,
- GPIO_TOG,
- GPIO_GET,
- GPIO_HiD = 0x12
- } GPIO_Op_t;
- /***************************************************************************************************
- * LOCAL FUNCTIONS
- ***************************************************************************************************/
- #if defined (MT_SYS_FUNC)
- void MT_SysReset(uint8 *pBuf);
- void MT_SysPing(void);
- void MT_SysVersion(void);
- void MT_SysSetExtAddr(uint8 *pBuf);
- void MT_SysGetExtAddr(void);
- void MT_SysOsalNVItemInit(uint8 *pBuf);
- void MT_SysOsalNVDelete(uint8 *pBuf);
- void MT_SysOsalNVLength(uint8 *pBuf);
- void MT_SysOsalNVRead(uint8 *pBuf);
- void MT_SysOsalNVWrite(uint8 *pBuf);
- void MT_SysOsalStartTimer(uint8 *pBuf);
- void MT_SysOsalStopTimer(uint8 *pBuf);
- void MT_SysRandom(void);
- void MT_SysAdcRead(uint8 *pBuf);
- void MT_SysGpio(uint8 *pBuf);
- void MT_SysStackTune(uint8 *pBuf);
- void MT_SysGetDeviceInfo(uint8 *pBuf);
- void MT_SysSetUtcTime(uint8 *pBuf);
- void MT_SysGetUtcTime(void);
- void MT_SysSetTxPower(uint8 *pBuf);
- #endif /* MT_SYS_FUNC */
- #if defined (MT_SYS_FUNC)
- /***************************************************************************************************
- * @fn MT_SysProcessing
- *
- * @brief Process all the SYS commands that are issued by test tool
- *
- * @param pBuf - pointer to the msg buffer
- *
- * | LEN | CMD0 | CMD1 | DATA |
- * | 1 | 1 | 1 | 0-255 |
- *
- * @return status
- ***************************************************************************************************/
- uint8 MT_SysCommandProcessing(uint8 *pBuf)
- {
- uint8 status = MT_RPC_SUCCESS;
- switch (pBuf[MT_RPC_POS_CMD1])
- {
- case MT_SYS_RESET_REQ:
- MT_SysReset(pBuf);
- break;
- case MT_SYS_PING:
- MT_SysPing();
- break;
- case MT_SYS_VERSION:
- MT_SysVersion();
- break;
- case MT_SYS_SET_EXTADDR:
- MT_SysSetExtAddr(pBuf);
- break;
- case MT_SYS_GET_EXTADDR:
- MT_SysGetExtAddr();
- break;
- // CC253X MAC Network Processor does not have NV support
- #if !defined(CC253X_MACNP)
- case MT_SYS_OSAL_NV_DELETE:
- MT_SysOsalNVDelete(pBuf);
- break;
- case MT_SYS_OSAL_NV_ITEM_INIT:
- MT_SysOsalNVItemInit(pBuf);
- break;
- case MT_SYS_OSAL_NV_LENGTH:
- MT_SysOsalNVLength(pBuf);
- break;
- case MT_SYS_OSAL_NV_READ:
- MT_SysOsalNVRead(pBuf);
- break;
- case MT_SYS_OSAL_NV_WRITE:
- MT_SysOsalNVWrite(pBuf);
- break;
- #endif
- case MT_SYS_OSAL_START_TIMER:
- MT_SysOsalStartTimer(pBuf);
- break;
- case MT_SYS_OSAL_STOP_TIMER:
- MT_SysOsalStopTimer(pBuf);
- break;
- case MT_SYS_RANDOM:
- MT_SysRandom();
- break;
- case MT_SYS_ADC_READ:
- MT_SysAdcRead(pBuf);
- break;
- case MT_SYS_GPIO:
- MT_SysGpio(pBuf);
- break;
- case MT_SYS_STACK_TUNE:
- MT_SysStackTune(pBuf);
- break;
- case MT_SYS_SET_TIME:
- MT_SysSetUtcTime(pBuf);
- break;
- case MT_SYS_GET_TIME:
- MT_SysGetUtcTime();
- break;
- case MT_SYS_SET_TX_POWER:
- MT_SysSetTxPower(pBuf);
- break;
- default:
- status = MT_RPC_ERR_COMMAND_ID;
- break;
- }
- return status;
- }
- /**************************************************************************************************
- * @fn MT_SysReset
- *
- * @brief Reset the device.
- * @param typID: 0=reset, 1=serial bootloader
- *
- * @return None
- *************************************************************************************************/
- void MT_SysReset(uint8 *pBuf)
- {
- if (pBuf[MT_RPC_POS_DAT0] == 0)
- {
- SystemReset();
- }
- #if !(defined(HAL_BOARD_F2618) || defined(HAL_BOARD_F5438) || defined(HAL_BOARD_LM3S))
- else
- {
- SystemResetSoft(); // Especially useful for CC2531 to not break comm with USB Host.
- }
- #endif
- }
- /***************************************************************************************************
- * @fn MT_SysPing
- *
- * @brief Process the Ping command
- *
- * @param None
- *
- * @return None
- ***************************************************************************************************/
- void MT_SysPing(void)
- {
- uint16 tmp16;
- uint8 retArray[2];
- /* Build Capabilities */
- tmp16 = MT_CAP_SYS | MT_CAP_MAC | MT_CAP_NWK | MT_CAP_AF | MT_CAP_ZDO |
- MT_CAP_SAPI | MT_CAP_UTIL | MT_CAP_DEBUG | MT_CAP_APP | MT_CAP_ZOAD;
- /* Convert to high byte first into temp buffer */
- retArray[0] = LO_UINT16( tmp16 );
- retArray[1] = HI_UINT16( tmp16 );
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_SYS), MT_SYS_PING,
- sizeof (tmp16), retArray );
- }
- /***************************************************************************************************
- * @fn MT_SysVersion
- *
- * @brief Process the Version command
- *
- * @param None
- *
- * @return None
- ***************************************************************************************************/
- void MT_SysVersion(void)
- {
- byte *verStr = (byte *)MTVersionString;
- uint8 respLen = sizeof(MTVersionString);
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_SYS), MT_SYS_VERSION,
- respLen, verStr);
- }
- /***************************************************************************************************
- * @fn MT_SysSetExtAddr
- *
- * @brief Set the Extended Address
- *
- * @param pBuf
- *
- * @return None
- ***************************************************************************************************/
- void MT_SysSetExtAddr(uint8 *pBuf)
- {
- uint8 retValue = ZFailure;
- uint8 cmdId;
- /* parse header */
- cmdId = pBuf[MT_RPC_POS_CMD1];
- pBuf += MT_RPC_FRAME_HDR_SZ;
- if ( ZMacSetReq(ZMacExtAddr, pBuf) == ZMacSuccess )
- {
- // CC253X MAC Network Processor does not have NV support
- #if !defined(CC253X_MACNP)
- retValue = osal_nv_write(ZCD_NV_EXTADDR, 0, Z_EXTADDR_LEN, pBuf);
- #endif
- }
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_SYS), cmdId, 1, &retValue);
- }
- /***************************************************************************************************
- * @fn MT_SysGetExtAddr
- *
- * @brief Get the Extended Address
- *
- * @param None
- *
- * @return None
- ***************************************************************************************************/
- void MT_SysGetExtAddr(void)
- {
- uint8 extAddr[Z_EXTADDR_LEN];
- ZMacGetReq( ZMacExtAddr, extAddr );
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_SYS), MT_SYS_GET_EXTADDR,
- Z_EXTADDR_LEN, extAddr);
- }
- /***************************************************************************************************
- * @fn MT_SysOsalNVRead
- *
- * @brief Read a NV value
- *
- * @param uint8 pBuf - pointer to the data
- *
- * @return None
- ***************************************************************************************************/
- void MT_SysOsalNVRead(uint8 *pBuf)
- {
- uint16 nvId;
- uint8 nvItemLen=0, nvItemOffset=0;
- uint8 *pRetBuf=NULL;
- uint8 respLen;
- /* Skip over RPC header */
- pBuf += MT_RPC_FRAME_HDR_SZ;
- /* Get the ID */
- nvId = BUILD_UINT16(pBuf[0], pBuf[1]);
- /* Get the offset */
- nvItemOffset = pBuf[2];
- #if !MT_SYS_OSAL_NV_READ_CERTIFICATE_DATA
- if ((ZCD_NV_IMPLICIT_CERTIFICATE == nvId) ||
- (ZCD_NV_CA_PUBLIC_KEY == nvId) ||
- (ZCD_NV_DEVICE_PRIVATE_KEY == nvId))
- {
- uint8 tmp[2] = { INVALIDPARAMETER, 0 };
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_SYS),
- MT_SYS_OSAL_NV_READ, 2, tmp);
- return;
- }
- #endif
- #if !MT_SYS_KEY_MANAGEMENT
- if ( (nvId == ZCD_NV_NWK_ACTIVE_KEY_INFO) ||
- (nvId == ZCD_NV_NWK_ALTERN_KEY_INFO) ||
- ((nvId >= ZCD_NV_TCLK_TABLE_START) && (nvId <= ZCD_NV_TCLK_TABLE_END)) ||
- ((nvId >= ZCD_NV_APS_LINK_KEY_DATA_START) && (nvId <= ZCD_NV_APS_LINK_KEY_DATA_END)) ||
- ((nvId >= ZCD_NV_MASTER_KEY_DATA_START) && (nvId <= ZCD_NV_MASTER_KEY_DATA_END)) ||
- (nvId == ZCD_NV_PRECFGKEY) )
- {
- uint8 tmp1[2] = { INVALIDPARAMETER, 0 };
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_SYS),
- MT_SYS_OSAL_NV_READ, 2, tmp1);
- return;
- }
- #endif //!MT_SYS_KEY_MANAGEMENT
- nvItemLen = osal_nv_item_len(nvId);
- /* Return only 250 bytes max */
- if (nvItemLen > MT_NV_ITEM_MAX_LENGTH)
- {
- nvItemLen = MT_NV_ITEM_MAX_LENGTH;
- }
- if ((nvItemLen > 0) && ((nvItemLen - nvItemOffset) > 0))
- {
- respLen = nvItemLen - nvItemOffset + 2;
- }
- else
- {
- respLen = 2;
- }
- pRetBuf = osal_mem_alloc(respLen);
- if (pRetBuf != NULL)
- {
- osal_memset(pRetBuf, 0, respLen);
- /* Default to ZFailure */
- pRetBuf[0] = ZFailure;
- if (respLen > 2)
- {
- if (((osal_nv_read( nvId, (uint16)nvItemOffset, (uint16)nvItemLen, &pRetBuf[2])) == ZSUCCESS) && (respLen > 2))
- {
- pRetBuf[0] = ZSuccess;
- }
- pRetBuf[1] = nvItemLen - nvItemOffset;
- }
- else
- {
- pRetBuf[1] = 0;
- }
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_SYS),
- MT_SYS_OSAL_NV_READ, respLen, pRetBuf );
- osal_mem_free(pRetBuf);
- }
- }
- /***************************************************************************************************
- * @fn MT_SysOsalNVWrite
- *
- * @brief
- *
- * @param uint8 pData - pointer to the data
- *
- * @return None
- ***************************************************************************************************/
- void MT_SysOsalNVWrite(uint8 *pBuf)
- {
- uint16 nvId;
- uint8 nvItemLen=0, nvItemOffset=0;
- uint8 rtrn;
- /* Skip over RPC header */
- pBuf += MT_RPC_FRAME_HDR_SZ;
- /* Get the ID */
- nvId = BUILD_UINT16(pBuf[0], pBuf[1]);
- /* Get the offset */
- nvItemOffset = pBuf[2];
- /* Get the length */
- nvItemLen = pBuf[3];
- pBuf += 4;
- /* Default to ZFailure */
- rtrn = ZFailure;
- /* Set the Z-Globals value of this NV item. */
- zgSetItem( nvId, (uint16)nvItemLen, pBuf );
- if ((osal_nv_write(nvId, (uint16)nvItemOffset, (uint16)nvItemLen, pBuf)) == ZSUCCESS)
- {
- if (nvId == ZCD_NV_EXTADDR)
- {
- rtrn = ZMacSetReq(ZMacExtAddr, pBuf);
- }
- else
- {
- rtrn = ZSuccess;
- }
- }
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_SYS),
- MT_SYS_OSAL_NV_WRITE, 1, &rtrn);
- }
- /***************************************************************************************************
- * @fn MT_SysOsalNVItemInit
- *
- * @brief Attempt to create an NV item
- *
- * @param uint8 pData - pointer to the data
- *
- * @return None
- ***************************************************************************************************/
- void MT_SysOsalNVItemInit(uint8 *pBuf)
- {
- uint8 ret;
- uint8 idLen;
- uint16 nvId;
- uint16 nvLen;
- /* Skip over RPC header */
- pBuf += MT_RPC_FRAME_HDR_SZ;
- /* NV item ID */
- nvId = BUILD_UINT16(pBuf[0], pBuf[1]);
- /* NV item length */
- nvLen = BUILD_UINT16(pBuf[2], pBuf[3]);
- /* Initialization data length */
- idLen = pBuf[4];
- pBuf += 5;
- if ( idLen < nvLen )
- {
- /* Attempt to create a new NV item */
- ret = osal_nv_item_init( nvId, nvLen, NULL );
- if ( (ret == NV_ITEM_UNINIT) && (idLen > 0) )
- {
- /* Write initialization data to first part of new item */
- (void) osal_nv_write( nvId, 0, (uint16)idLen, pBuf );
- }
- }
- else
- {
- /* Attempt to create/initialize a new NV item */
- ret = osal_nv_item_init( nvId, nvLen, pBuf );
- }
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_SYS),
- MT_SYS_OSAL_NV_ITEM_INIT, 1, &ret);
- }
- /***************************************************************************************************
- * @fn MT_SysOsalNVDelete
- *
- * @brief Attempt to delete an NV item
- *
- * @param uint8 pData - pointer to the data
- *
- * @return None
- ***************************************************************************************************/
- void MT_SysOsalNVDelete(uint8 *pBuf)
- {
- uint16 nvId;
- uint16 nvLen;
- uint8 ret;
- /* Skip over RPC header */
- pBuf += MT_RPC_FRAME_HDR_SZ;
- /* Get the ID */
- nvId = BUILD_UINT16(pBuf[0], pBuf[1]);
- /* Get the length */
- nvLen = BUILD_UINT16(pBuf[2], pBuf[3]);
- /* Attempt to delete the NV item */
- ret = osal_nv_delete( nvId, nvLen );
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_SYS),
- MT_SYS_OSAL_NV_DELETE, 1, &ret);
- }
- /***************************************************************************************************
- * @fn MT_SysOsalNVLength
- *
- * @brief Attempt to get the length to an NV item
- *
- * @param uint8 pData - pointer to the data
- *
- * @return None
- ***************************************************************************************************/
- void MT_SysOsalNVLength(uint8 *pBuf)
- {
- uint16 nvId;
- uint16 nvLen;
- uint8 rsp[2];
- /* Skip over RPC header */
- pBuf += MT_RPC_FRAME_HDR_SZ;
- /* Get the ID */
- nvId = BUILD_UINT16(pBuf[0], pBuf[1]);
- /* Attempt to get NV item length */
- nvLen = osal_nv_item_len( nvId );
- rsp[0] = LO_UINT16( nvLen );
- rsp[1] = HI_UINT16( nvLen );
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_SYS),
- MT_SYS_OSAL_NV_LENGTH, 2, rsp);
- }
- /***************************************************************************************************
- * @fn MT_SysOsalStartTimer
- *
- * @brief
- *
- * @param uint8 pData - pointer to the data
- *
- * @return None
- ***************************************************************************************************/
- void MT_SysOsalStartTimer(uint8 *pBuf)
- {
- uint16 eventId;
- uint8 retValue = ZFailure;
- uint8 cmdId;
- /* parse header */
- cmdId = pBuf[MT_RPC_POS_CMD1];
- pBuf += MT_RPC_FRAME_HDR_SZ;
- if (*pBuf <= 3)
- {
- eventId = (uint16) MT_SysOsalEventId[*pBuf];
- retValue = osal_start_timerEx(MT_TaskID, eventId, BUILD_UINT16(pBuf[1], pBuf[2]));
- }
- else
- {
- retValue = ZInvalidParameter;
- }
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_SYS), cmdId, 1, &retValue);
- }
- /***************************************************************************************************
- * @fn MT_SysOsalStopTimer
- *
- * @brief
- *
- * @param uint8 pData - pointer to the data
- *
- * @return None
- ***************************************************************************************************/
- void MT_SysOsalStopTimer(uint8 *pBuf)
- {
- uint16 eventId;
- uint8 retValue = ZFailure;
- uint8 cmdId;
- /* parse header */
- cmdId = pBuf[MT_RPC_POS_CMD1];
- pBuf += MT_RPC_FRAME_HDR_SZ;
- if (*pBuf <= 3)
- {
- eventId = (uint16) MT_SysOsalEventId[*pBuf];
- retValue = osal_stop_timerEx(MT_TaskID, eventId);
- }
- else
- {
- retValue = ZInvalidParameter;
- }
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_SYS), cmdId, 1, &retValue );
- }
- /***************************************************************************************************
- * @fn MT_SysRandom
- *
- * @brief
- *
- * @param uint8 pData - pointer to the data
- *
- * @return None
- ***************************************************************************************************/
- void MT_SysRandom()
- {
- uint16 randValue = Onboard_rand();
- uint8 retArray[2];
- retArray[0] = LO_UINT16(randValue);
- retArray[1] = HI_UINT16(randValue);
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_SYS), MT_SYS_RANDOM, 2, retArray );
- }
- /***************************************************************************************************
- * @fn MT_SysAdcRead
- *
- * @brief Reading ADC value, temperature sensor and voltage
- *
- * @param uint8 pData - pointer to the data
- *
- * @return None
- ***************************************************************************************************/
- void MT_SysAdcRead(uint8 *pBuf)
- {
- #ifndef HAL_BOARD_LM3S
- uint8 channel, resolution;
- uint16 tempValue;
- uint8 retArray[2];
- uint8 cmdId;
- /* parse header */
- cmdId = pBuf[MT_RPC_POS_CMD1];
- pBuf += MT_RPC_FRAME_HDR_SZ;
- /* Channel */
- channel = *pBuf++;
- /* Resolution */
- resolution = *pBuf++;
- /* Voltage reading */
- switch (channel)
- {
- /* Analog input channel */
- case HAL_ADC_CHANNEL_0:
- case HAL_ADC_CHANNEL_1:
- case HAL_ADC_CHANNEL_2:
- case HAL_ADC_CHANNEL_3:
- case HAL_ADC_CHANNEL_4:
- case HAL_ADC_CHANNEL_5:
- case HAL_ADC_CHANNEL_6:
- case HAL_ADC_CHANNEL_7:
- tempValue = HalAdcRead(channel, resolution);
- break;
- /* Temperature sensor */
- case(HAL_ADC_CHANNEL_TEMP):
- tempValue = HalAdcRead(HAL_ADC_CHANNEL_TEMP, HAL_ADC_RESOLUTION_14);
- break;
- /* Voltage reading */
- case(HAL_ADC_CHANNEL_VDD):
- tempValue = HalAdcRead(HAL_ADC_CHANNEL_VDD, HAL_ADC_RESOLUTION_14);
- break;
- /* Undefined channels */
- default:
- tempValue = 0x00;
- break;
- }
- retArray[0] = LO_UINT16(tempValue);
- retArray[1] = HI_UINT16(tempValue);
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_SYS), cmdId, 2, retArray);
- #endif /* #ifndef HAL_BOARD_LM3S */
- }
- /**************************************************************************************************
- * @fn MT_SysGpio
- *
- * @brief ZAccel RPC interface for controlling the available GPIO pins.
- *
- * @param uint8 pData - Pointer to the data.
- *
- * @return None
- *************************************************************************************************/
- void MT_SysGpio(uint8 *pBuf)
- {
- uint8 cmd, val;
- GPIO_Op_t op;
- cmd = pBuf[MT_RPC_POS_CMD1];
- pBuf += MT_RPC_FRAME_HDR_SZ;
- op = (GPIO_Op_t)(*pBuf++);
- val = *pBuf;
- switch (op)
- {
- case GPIO_DIR:
- if (val & BV(0)) {GPIO_DIR_OUT(0);} else {GPIO_DIR_IN(0);}
- if (val & BV(1)) {GPIO_DIR_OUT(1);} else {GPIO_DIR_IN(1);}
- if (val & BV(2)) {GPIO_DIR_OUT(2);} else {GPIO_DIR_IN(2);}
- if (val & BV(3)) {GPIO_DIR_OUT(3);} else {GPIO_DIR_IN(3);}
- break;
- case GPIO_TRI:
- if(val & BV(0)) {GPIO_TRI(0);} else if(val & BV(4)) {GPIO_PULL_DN(0);} else {GPIO_PULL_UP(0);}
- if(val & BV(1)) {GPIO_TRI(1);} else if(val & BV(5)) {GPIO_PULL_DN(1);} else {GPIO_PULL_UP(1);}
- if(val & BV(2)) {GPIO_TRI(2);} else if(val & BV(6)) {GPIO_PULL_DN(2);} else {GPIO_PULL_UP(2);}
- if(val & BV(3)) {GPIO_TRI(3);} else if(val & BV(7)) {GPIO_PULL_DN(3);} else {GPIO_PULL_UP(3);}
- break;
- case GPIO_SET:
- if (val & BV(0)) {GPIO_SET(0);}
- if (val & BV(1)) {GPIO_SET(1);}
- if (val & BV(2)) {GPIO_SET(2);}
- if (val & BV(3)) {GPIO_SET(3);}
- break;
- case GPIO_CLR:
- if (val & BV(0)) {GPIO_CLR(0);}
- if (val & BV(1)) {GPIO_CLR(1);}
- if (val & BV(2)) {GPIO_CLR(2);}
- if (val & BV(3)) {GPIO_CLR(3);}
- break;
- case GPIO_TOG:
- if (val & BV(0)) {GPIO_TOG(0);}
- if (val & BV(1)) {GPIO_TOG(1);}
- if (val & BV(2)) {GPIO_TOG(2);}
- if (val & BV(3)) {GPIO_TOG(3);}
- break;
- case GPIO_GET:
- break;
- case GPIO_HiD:
- (val) ? GPIO_HiD_SET() : GPIO_HiD_CLR();
- break;
- default:
- break;
- }
- val = (GPIO_GET(0)) ? BV(0) : 0;
- val |= (GPIO_GET(1)) ? BV(1) : 0;
- val |= (GPIO_GET(2)) ? BV(2) : 0;
- val |= (GPIO_GET(3)) ? BV(3) : 0;
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_SYS), cmd, 1, &val);
- }
- /**************************************************************************************************
- * @fn MT_SysStackTune
- *
- * @brief ZAccel RPC interface for tuning the stack parameters to adjust performance
- *
- * @param uint8 pData - Pointer to the data.
- *
- * @return None
- *************************************************************************************************/
- void MT_SysStackTune(uint8 *pBuf)
- {
- uint8 cmd, rtrn;
- cmd = pBuf[MT_RPC_POS_CMD1];
- pBuf += MT_RPC_FRAME_HDR_SZ;
- switch (*pBuf++)
- {
- case STK_TX_PWR:
- rtrn = ZMacSetReq(ZMacPhyTransmitPowerSigned, pBuf);
- break;
- case STK_RX_ON_IDLE:
- if ((*pBuf != TRUE) && (*pBuf != FALSE))
- {
- (void)ZMacGetReq(ZMacRxOnIdle, &rtrn);
- }
- else
- {
- rtrn = ZMacSetReq(ZMacRxOnIdle, pBuf);
- }
- break;
- default:
- rtrn = ZInvalidParameter;
- break;
- }
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_SYS), cmd, 1, &rtrn);
- }
- /***************************************************************************************************
- * @fn MT_SysSetUtcTime
- *
- * @brief Set the OSAL UTC Time. UTC rollover is: 06:28:16 02/07/2136
- *
- * @param pBuf - pointer to time parameters
- *
- * @return None
- ***************************************************************************************************/
- void MT_SysSetUtcTime(uint8 *pBuf)
- {
- uint8 cmdId;
- uint8 retStat;
- UTCTime utcSecs;
- /* Parse header */
- cmdId = pBuf[MT_RPC_POS_CMD1];
- pBuf += MT_RPC_FRAME_HDR_SZ;
- utcSecs = osal_build_uint32( pBuf, 4 );
- if ( utcSecs == 0 )
- {
- UTCTimeStruct utc;
- /* Skip past UTC time */
- pBuf += 4;
- /* Get time and date parameters */
- utc.hour = *pBuf++;
- utc.minutes = *pBuf++;
- utc.seconds = *pBuf++;
- utc.month = (*pBuf++) - 1;
- utc.day = (*pBuf++) - 1;
- utc.year = osal_build_uint16 ( pBuf );
- if ((utc.hour < 24) && (utc.minutes < 60) && (utc.seconds < 60) &&
- (utc.month < 12) && (utc.day < 31) && (utc.year > 1999) && (utc.year < 2136))
- {
- /* Got past the course filter, now check for leap year */
- if ((utc.month != 1) || (utc.day < (IsLeapYear( utc.year ) ? 29 : 28)))
- {
- /* Numbers look reasonable, convert to UTC */
- utcSecs = osal_ConvertUTCSecs( &utc );
- }
- }
- }
- if ( utcSecs == 0 )
- {
- /* Bad parameter(s) */
- retStat = ZInvalidParameter;
- }
- else
- {
- /* Parameters accepted, set the time */
- osal_setClock( utcSecs );
- retStat = ZSuccess;
- }
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_SYS),
- cmdId, 1, &retStat);
- }
- /***************************************************************************************************
- * @fn MT_SysGetUtcTime
- *
- * @brief Get the OSAL UTC time
- *
- * @param None
- *
- * @return 32-bit and Parsed UTC time
- ***************************************************************************************************/
- void MT_SysGetUtcTime(void)
- {
- uint8 len;
- uint8 *buf;
- len = sizeof( UTCTime ) + sizeof( UTCTimeStruct );
- buf = osal_mem_alloc( len );
- if ( buf )
- {
- uint8 *pBuf;
- UTCTime utcSecs;
- UTCTimeStruct utcTime;
- // Get current 32-bit UTC time and parse it
- utcSecs = osal_getClock();
- osal_ConvertUTCTime( &utcTime, utcSecs );
- // Start with 32-bit UTC time
- pBuf = osal_buffer_uint32( buf, utcSecs );
- // Concatenate parsed UTC time fields
- *pBuf++ = utcTime.hour;
- *pBuf++ = utcTime.minutes;
- *pBuf++ = utcTime.seconds;
- *pBuf++ = utcTime.month + 1; // Convert to human numbers
- *pBuf++ = utcTime.day + 1;
- *pBuf++ = LO_UINT16( utcTime.year );
- *pBuf++ = HI_UINT16( utcTime.year );
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_SYS),
- MT_SYS_GET_TIME, (uint8)(pBuf-buf), buf);
- osal_mem_free( buf );
- }
- }
- /***************************************************************************************************
- * @fn MT_SysSetTxPower
- *
- * @brief Set the transmit power.
- *
- * @param pBuf - MT message containing the ZMacTransmitPower_t power level to set.
- *
- * @return None
- ***************************************************************************************************/
- void MT_SysSetTxPower(uint8 *pBuf)
- {
- /* A local variable to hold the signed dBm value of TxPower that is being requested. */
- uint8 signed_dBm_of_TxPower_requeseted;
- /*
- * A local variable to hold the signed dBm value of TxPower that can be set which is closest to
- * the requested dBm value of TxPower, but which is also valid according to a complex set of
- * compile-time and run-time configuration which is interpreted by the macRadioSetTxPower()
- * function.
- */
- uint8 signed_dBm_of_TxPower_range_corrected;
- /* Parse the requested dBm from the RPC message. */
- signed_dBm_of_TxPower_requeseted = pBuf[MT_RPC_POS_DAT0];
- /*
- * MAC_MlmeSetReq() will store an out-of-range dBm parameter value into the NIB. So it is not
- * possible to learn the actual dBm value that will be set by invoking MACMlmeGetReq().
- * But this actual dBm value is a required return value in the SRSP to this SREQ. Therefore,
- * it is necessary to make this redundant pre-call to macRadioSetTxPower() here in order to run
- * the code that will properly constrain the requested dBm to a valid range based on both the
- * compile-time and the run-time configurations that affect the available valid ranges
- * (i.e. MAC_MlmeSetReq() itself will invoke for a second time the macRadioSetTxPower() function).
- */
- signed_dBm_of_TxPower_range_corrected = macRadioSetTxPower(signed_dBm_of_TxPower_requeseted);
- /*
- * Call the function to store the requested dBm in the MAC PIB and to set the TxPower as closely
- * as possible within the TxPower range that is valid for the compile-time and run-time
- * configuration.
- */
- (void)MAC_MlmeSetReq(MAC_PHY_TRANSMIT_POWER_SIGNED, &signed_dBm_of_TxPower_requeseted);
- /* Build and send back the response that includes the actual dBm TxPower that can be set. */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_SYS),
- MT_SYS_SET_TX_POWER, 1,
- &signed_dBm_of_TxPower_range_corrected);
- }
- #endif /* MT_SYS_FUNC */
- /***************************************************************************************************
- * SUPPORT
- ***************************************************************************************************/
- /***************************************************************************************************
- * @fn MT_SysResetInd()
- *
- * @brief Sends a ZTOOL "reset response" message.
- *
- * @param None
- *
- * @return None
- *
- ***************************************************************************************************/
- void MT_SysResetInd(void)
- {
- uint8 retArray[6];
- retArray[0] = ResetReason(); /* Reason */
- osal_memcpy( &retArray[1], MTVersionString, 5 ); /* Revision info */
- /* Send out Reset Response message */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_AREQ | (uint8)MT_RPC_SYS_SYS), MT_SYS_RESET_IND,
- sizeof(retArray), retArray);
- }
- /***************************************************************************************************
- * @fn MT_SysOsalTimerExpired()
- *
- * @brief Sends a SYS Osal Timer Expired
- *
- * @param None
- *
- * @return None
- *
- ***************************************************************************************************/
- void MT_SysOsalTimerExpired(uint8 Id)
- {
- uint8 retValue;
- retValue = Id;
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_AREQ | (uint8)MT_RPC_SYS_SYS), MT_SYS_OSAL_TIMER_EXPIRED, 1, &retValue);
- }
- /***************************************************************************************************
- ***************************************************************************************************/
|