| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673 |
- /***************************************************************************************************
- Filename: MT_UTIL.c
- Revised: $Date: 2009-03-31 13:02:19 -0700 (Tue, 31 Mar 2009) $
- Revision: $Revision: 19612 $
- Description: MonitorTest Utility Functions
- Copyright 2007 - 2009 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 "OnBoard.h" /* This is here because of the key reading */
- #include "hal_key.h"
- #include "hal_led.h"
- #include "OSAL_Nv.h"
- #include "NLMEDE.h"
- #include "ZDApp.h"
- #include "MT.h"
- #include "MT_UTIL.h"
- #include "MT_ZDO.h"
- #include "MT_SAPI.h"
- #include "MT_NWK.h"
- #include "MT_AF.h"
- #include "MT_MAC.h"
- /***************************************************************************************************
- * CONSTANTS
- ***************************************************************************************************/
- #define MT_UTIL_DEVICE_INFO_RESPONSE_LEN 14
- /***************************************************************************************************
- * LOCAL FUNCTIONS
- ***************************************************************************************************/
- #if defined (MT_UTIL_FUNC)
- void MT_UtilGetDeviceInfo(void);
- void MT_UtilGetNvInfo(void);
- void MT_UtilSetPanID(uint8 *pBuf);
- void MT_UtilSetChannels(uint8 *pBuf);
- void MT_UtilSetSecLevel(uint8 *pBuf);
- void MT_UtilSetPreCfgKey(uint8 *pBuf);
- void MT_UtilCallbackSub(uint8 *pData);
- void MT_UtilKeyEvent(uint8 *pBuf);
- void MT_UtilHeartBeat(uint8 *pBuf);
- void MT_UtilTimeAlive(void);
- void MT_UtilLedControl(uint8 *pBuf);
- #endif /* MT_UTIL_FUNC */
- #if defined (MT_UTIL_FUNC)
- /***************************************************************************************************
- * @fn MT_UtilProcessing
- *
- * @brief Process all the DEBUG commands that are issued by test tool
- *
- * @param pBuf - pointer to received SPI data message
- *
- * @return status
- ***************************************************************************************************/
- uint8 MT_UtilCommandProcessing(uint8 *pBuf)
- {
- uint8 status = MT_RPC_SUCCESS;
- switch (pBuf[MT_RPC_POS_CMD1])
- {
- case MT_UTIL_GET_DEVICE_INFO:
- MT_UtilGetDeviceInfo();
- break;
- case MT_UTIL_GET_NV_INFO:
- MT_UtilGetNvInfo();
- break;
- case MT_UTIL_SET_PANID:
- MT_UtilSetPanID(pBuf);
- break;
- case MT_UTIL_SET_CHANNELS:
- MT_UtilSetChannels(pBuf);
- break;
- case MT_UTIL_SET_SECLEVEL:
- MT_UtilSetSecLevel(pBuf);
- break;
- case MT_UTIL_SET_PRECFGKEY:
- MT_UtilSetPreCfgKey(pBuf);
- break;
- case MT_UTIL_CALLBACK_SUB_CMD:
- MT_UtilCallbackSub(pBuf);
- break;
- case MT_UTIL_KEY_EVENT:
- #if (defined HAL_KEY) && (HAL_KEY == TRUE)
- MT_UtilKeyEvent(pBuf);
- #endif
- break;
- case MT_UTIL_LED_CONTROL:
- #if (defined HAL_LED) && (HAL_LED == TRUE)
- MT_UtilLedControl(pBuf);
- #endif
- break;
- case MT_UTIL_HEARTBEAT:
- MT_UtilHeartBeat(pBuf);
- break;
- case MT_UTIL_TIME_ALIVE:
- MT_UtilTimeAlive();
- break;
- default:
- status = MT_RPC_ERR_COMMAND_ID;
- break;
- }
- return status;
- }
- /***************************************************************************************************
- * @fn MT_UtilGetDeviceInfo
- *
- * @brief The Get Device Info serial message.
- *
- * @param void
- *
- * @return void
- ***************************************************************************************************/
- void MT_UtilGetDeviceInfo(void)
- {
- uint8 *buf;
- uint8 *pBuf;
- uint8 bufLen = MT_UTIL_DEVICE_INFO_RESPONSE_LEN;
- #if defined( RTR_NWK ) && !defined( NONWK )
- uint8 assocCnt = 0;
- #endif
- uint16 *assocList = NULL;
- #if defined( RTR_NWK ) && !defined( NONWK )
- assocList = AssocMakeList( &assocCnt );
- bufLen += (assocCnt * sizeof(uint16));
- #endif
- buf = osal_mem_alloc( bufLen );
- if ( buf )
- {
- pBuf = buf;
- *pBuf++ = ZSUCCESS; // Status
- osal_nv_read( ZCD_NV_EXTADDR, 0, Z_EXTADDR_LEN, pBuf );
- pBuf += Z_EXTADDR_LEN;
- #if defined( NONWK )
- // Skip past ZStack only parameters for NONWK
- *pBuf++ = 0;
- *pBuf++ = 0;
- *pBuf++ = 0;
- *pBuf++ = 0;
- *pBuf = 0;
- #else
- {
- uint16 shortAddr = NLME_GetShortAddr();
- *pBuf++ = LO_UINT16( shortAddr );
- *pBuf++ = HI_UINT16( shortAddr );
- }
- /* Return device type */
- *pBuf++ = ZSTACK_DEVICE_BUILD;
- /*Return device state */
- *pBuf++ = (uint8)devState;
- #if defined( RTR_NWK )
- *pBuf++ = assocCnt;
- if ( assocCnt )
- {
- uint8 x;
- uint16 *puint16 = assocList;
- for ( x = 0; x < assocCnt; x++, puint16++ )
- {
- *pBuf++ = LO_UINT16( *puint16 );
- *pBuf++ = HI_UINT16( *puint16 );
- }
- }
- #else
- *pBuf++ = 0;
- #endif
- #endif
- MT_BuildAndSendZToolResponse( ((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_UTIL),
- MT_UTIL_GET_DEVICE_INFO,
- bufLen, buf );
- osal_mem_free( buf );
- }
- if ( assocList )
- {
- osal_mem_free( assocList );
- }
- }
- /***************************************************************************************************
- * @fn MT_UtilGetNvInfo
- *
- * @brief The Get NV Info serial message.
- *
- * @param byte *msg - pointer to the data
- *
- * @return void
- ***************************************************************************************************/
- void MT_UtilGetNvInfo(void)
- {
- uint8 len;
- uint8 stat;
- uint8 *buf;
- uint8 *pBuf;
- uint16 tmp16;
- uint32 tmp32;
- /*
- Get required length of buffer
- Status + ExtAddr + ChanList + PanID + SecLevel + PreCfgKey
- */
- len = 1 + Z_EXTADDR_LEN + 4 + 2 + 1 + SEC_KEY_LEN;
- buf = osal_mem_alloc( len );
- if ( buf )
- {
- /* Assume NV not available */
- osal_memset( buf, 0xFF, len );
- /* Skip over status */
- pBuf = buf + 1;
- /* Start with 64-bit extended address */
- stat = osal_nv_read( ZCD_NV_EXTADDR, 0, Z_EXTADDR_LEN, pBuf );
- if ( stat ) stat = 0x01;
- pBuf += Z_EXTADDR_LEN;
- /* Scan channel list (bit mask) */
- if ( osal_nv_read( ZCD_NV_CHANLIST, 0, sizeof( tmp32 ), &tmp32 ) )
- stat |= 0x02;
- else
- {
- pBuf[0] = BREAK_UINT32( tmp32, 3 );
- pBuf[1] = BREAK_UINT32( tmp32, 2 );
- pBuf[2] = BREAK_UINT32( tmp32, 1 );
- pBuf[3] = BREAK_UINT32( tmp32, 0 );
- }
- pBuf += sizeof( tmp32 );
- /* ZigBee PanID */
- if ( osal_nv_read( ZCD_NV_PANID, 0, sizeof( tmp16 ), &tmp16 ) )
- stat |= 0x04;
- else
- {
- pBuf[0] = LO_UINT16( tmp16 );
- pBuf[1] = HI_UINT16( tmp16 );
- }
- pBuf += sizeof( tmp16 );
- /* Security level */
- if ( osal_nv_read( ZCD_NV_SECURITY_LEVEL, 0, sizeof( uint8 ), pBuf++ ) )
- stat |= 0x08;
- /* Pre-configured security key */
- if ( osal_nv_read( ZCD_NV_PRECFGKEY, 0, SEC_KEY_LEN, pBuf ) )
- stat |= 0x10;
- /* Status bit mask - bit=1 indicates failure */
- *buf = stat;
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_UTIL), MT_UTIL_GET_NV_INFO,
- len, buf );
- osal_mem_free( buf );
- }
- }
- /***************************************************************************************************
- * @fn MT_UtilSetPanID
- *
- * @brief Set PanID message
- *
- * @param byte *msg - pointer to the data
- *
- * @return void
- ***************************************************************************************************/
- void MT_UtilSetPanID(uint8 *pBuf)
- {
- uint16 temp16;
- uint8 retValue = ZFailure;
- uint8 cmdId;
- /* parse header */
- cmdId = pBuf[MT_RPC_POS_CMD1];
- pBuf += MT_RPC_FRAME_HDR_SZ;
- temp16 = BUILD_UINT16(pBuf[0], pBuf[1]);
- pBuf += sizeof(uint16);
- retValue = osal_nv_write(ZCD_NV_PANID, 0, osal_nv_item_len( ZCD_NV_PANID ), &temp16);
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_UTIL), cmdId, 1, &retValue);
- }
- /***************************************************************************************************
- * @fn MT_UtilSetChannels
- *
- * @brief Set Channels
- *
- * @param byte *msg - pointer to the data
- *
- * @return void
- ***************************************************************************************************/
- void MT_UtilSetChannels(uint8 *pBuf)
- {
- uint32 tmp32;
- uint8 retValue = ZFailure;
- uint8 cmdId;
- /* parse header */
- cmdId = pBuf[MT_RPC_POS_CMD1];
- pBuf += MT_RPC_FRAME_HDR_SZ;
- tmp32 = BUILD_UINT32(pBuf[0], pBuf[1], pBuf[2], pBuf[3]);
- retValue = osal_nv_write(ZCD_NV_CHANLIST, 0, osal_nv_item_len( ZCD_NV_CHANLIST ), &tmp32);
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_UTIL), cmdId, 1, &retValue);
- }
- /***************************************************************************************************
- * @fn MT_UtilSetSecLevel
- *
- * @brief Set Sec Level
- *
- * @param byte *msg - pointer to the data
- *
- * @return void
- ***************************************************************************************************/
- void MT_UtilSetSecLevel(uint8 *pBuf)
- {
- uint8 retValue = ZFailure;
- uint8 cmdId;
- /* parse header */
- cmdId = pBuf[MT_RPC_POS_CMD1];
- pBuf += MT_RPC_FRAME_HDR_SZ;
- retValue = osal_nv_write( ZCD_NV_SECURITY_LEVEL, 0, osal_nv_item_len( ZCD_NV_SECURITY_LEVEL ), pBuf);
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_UTIL), cmdId, 1, &retValue );
- }
- /***************************************************************************************************
- * @fn MT_UtilSetPreCfgKey
- *
- * @brief Set Pre Cfg Key
- *
- * @param byte *msg - pointer to the data
- *
- * @return void
- ***************************************************************************************************/
- void MT_UtilSetPreCfgKey(uint8 *pBuf)
- {
- uint8 retValue = ZFailure;
- uint8 cmdId;
- /* parse header */
- cmdId = pBuf[MT_RPC_POS_CMD1];
- pBuf += MT_RPC_FRAME_HDR_SZ;
- retValue = osal_nv_write( ZCD_NV_PRECFGKEY, 0, osal_nv_item_len( ZCD_NV_PRECFGKEY ), pBuf);
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_UTIL), cmdId, 1, &retValue );
- }
- /***************************************************************************************************
- * @fn MT_UtilCallbackSub
- *
- * @brief The Callback subscribe.
- *
- * @param byte *msg - pointer to the data
- *
- * @return void
- ***************************************************************************************************/
- void MT_UtilCallbackSub(uint8 *pBuf)
- {
- uint8 cmdId = pBuf[MT_RPC_POS_CMD1];
- uint8 retValue = ZFailure;
- #if defined(MT_MAC_CB_FUNC) || defined(MT_NWK_CB_FUNC) || defined(MT_ZDO_CB_FUNC) || defined(MT_AF_CB_FUNC) || defined(MT_SAPI_CB_FUNC) || defined(MT_SAPI_CB_FUNC)
- uint8 subSystem;
- uint16 subscribed_command;
- // Move past header
- retValue = ZSuccess;
- pBuf += MT_RPC_FRAME_HDR_SZ;
- /* Command */
- subscribed_command = BUILD_UINT16(pBuf[0], pBuf[1]);
- pBuf += 2;
- /* Subsystem - 5 bits on the MSB of the command */
- subSystem = HI_UINT16(subscribed_command) & 0x1F ;
- /* What is the action - SUBSCRIBE or !SUBSCRIBE */
- if (*pBuf)
- {
- /* Turn ON */
- #if defined( MT_MAC_CB_FUNC )
- if ((subSystem == MT_RPC_SYS_MAC) || (subscribed_command == 0xFFFF))
- _macCallbackSub = 0xFFFF;
- #endif
- #if defined( MT_NWK_CB_FUNC )
- if ((subSystem == MT_RPC_SYS_NWK) || (subscribed_command == 0xFFFF))
- _nwkCallbackSub = 0xFFFF;
- #endif
- #if defined( MT_ZDO_CB_FUNC )
- if ((subSystem == MT_RPC_SYS_ZDO) || (subscribed_command == 0xFFFF))
- _zdoCallbackSub = 0xFFFFFFFF;
- #endif
- #if defined( MT_AF_CB_FUNC )
- if ((subSystem == MT_RPC_SYS_AF) || (subscribed_command == 0xFFFF))
- _afCallbackSub = 0xFFFF;
- #endif
- #if defined( MT_SAPI_CB_FUNC )
- if ((subSystem == MT_RPC_SYS_SAPI) || (subscribed_command == 0xFFFF))
- _sapiCallbackSub = 0xFFFF;
- #endif
- }
- else
- {
- /* Turn OFF */
- #if defined( MT_MAC_CB_FUNC )
- if ((subSystem == MT_RPC_SYS_MAC) || (subscribed_command == 0xFFFF))
- _macCallbackSub = 0x0000;
- #endif
- #if defined( MT_NWK_CB_FUNC )
- if ((subSystem == MT_RPC_SYS_NWK) || (subscribed_command == 0xFFFF))
- _nwkCallbackSub = 0x0000;
- #endif
- #if defined( MT_ZDO_CB_FUNC )
- if ((subSystem == MT_RPC_SYS_ZDO) || (subscribed_command == 0xFFFF))
- _zdoCallbackSub = 0x00000000;
- #endif
- #if defined( MT_AF_CB_FUNC )
- if ((subSystem == MT_RPC_SYS_AF) || (subscribed_command == 0xFFFF))
- _afCallbackSub = 0x0000;
- #endif
- #if defined( MT_SAPI_CB_FUNC )
- if ((subSystem == MT_RPC_SYS_SAPI) || (subscribed_command == 0xFFFF))
- _sapiCallbackSub = 0x0000;
- #endif
- }
- #endif // MT_MAC_CB_FUNC || MT_NWK_CB_FUNC || MT_ZDO_CB_FUNC || MT_AF_CB_FUNC || MT_SAPI_CB_FUNC || MT_SAPI_CB_FUNC
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_UTIL), cmdId, 1, &retValue );
- }
- #if (defined HAL_KEY) && (HAL_KEY == TRUE)
- /***************************************************************************************************
- * @fn MT_UtilKeyEvent
- *
- * @brief Process Key Event
- *
- * @param byte *msg - pointer to the data
- *
- * @return void
- ***************************************************************************************************/
- void MT_UtilKeyEvent(uint8 *pBuf)
- {
- uint8 x = 0;
- uint8 retValue = ZFailure;
- uint8 cmdId;
- /* parse header */
- cmdId = pBuf[MT_RPC_POS_CMD1];
- pBuf += MT_RPC_FRAME_HDR_SZ;
- /* Translate between SPI values to device values */
- if ( *pBuf & 0x01 )
- x |= HAL_KEY_SW_1;
- if ( *pBuf & 0x02 )
- x |= HAL_KEY_SW_2;
- if ( *pBuf & 0x04 )
- x |= HAL_KEY_SW_3;
- if ( *pBuf & 0x08 )
- x |= HAL_KEY_SW_4;
- #if defined ( HAL_KEY_SW_5 )
- if ( *pBuf & 0x10 )
- x |= HAL_KEY_SW_5;
- #endif
- #if defined ( HAL_KEY_SW_6 )
- if ( *pBuf & 0x20 )
- x |= HAL_KEY_SW_6;
- #endif
- #if defined ( HAL_KEY_SW_7 )
- if ( *pBuf & 0x40 )
- x |= HAL_KEY_SW_7;
- #endif
- #if defined ( HAL_KEY_SW_8 )
- if ( *pBuf & 0x80 )
- x |= HAL_KEY_SW_8;
- #endif
- pBuf++;
- retValue = OnBoard_SendKeys(x, *pBuf);
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_UTIL), cmdId, 1, &retValue );
- }
- #endif
- #if (defined HAL_LED) && (HAL_LED == TRUE)
- /***************************************************************************************************
- * @fn MT_UtilLedControl
- *
- * @brief Process the LED Control Message
- *
- * @param pBuf - pointer to the received data
- *
- * @return None
- ***************************************************************************************************/
- void MT_UtilLedControl(uint8 *pBuf)
- {
- uint8 iLed, Led, iMode, Mode, cmdId;
- uint8 retValue = ZFailure;
- /* parse header */
- cmdId = pBuf[MT_RPC_POS_CMD1];
- pBuf += MT_RPC_FRAME_HDR_SZ;
- /* LED and Mode */
- iLed = *pBuf++;
- iMode = *pBuf;
- if ( iLed == 1 )
- Led = HAL_LED_1;
- else if ( iLed == 2 )
- Led = HAL_LED_2;
- else if ( iLed == 3 )
- Led = HAL_LED_3;
- else if ( iLed == 4 )
- Led = HAL_LED_4;
- else if ( iLed == 0xFF )
- Led = HAL_LED_ALL;
- else
- Led = 0;
- if ( iMode == 0 )
- Mode = HAL_LED_MODE_OFF;
- else if ( iMode == 1 )
- Mode = HAL_LED_MODE_ON;
- else if ( iMode == 2 )
- Mode = HAL_LED_MODE_BLINK;
- else if ( iMode == 3 )
- Mode = HAL_LED_MODE_FLASH;
- else if ( iMode == 4 )
- Mode = HAL_LED_MODE_TOGGLE;
- else
- Led = 0;
- if ( Led != 0 )
- {
- HalLedSet (Led, Mode);
- retValue = ZSuccess;
- }
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_UTIL), cmdId, 1, &retValue );
- }
- #endif /* HAL_LED */
- /***************************************************************************************************
- * @fn MT_UtilHeartBeat
- *
- * @brief Process the Heart Beat
- *
- * @param pBuf - pointer to the received data
- *
- * @return None
- ***************************************************************************************************/
- void MT_UtilHeartBeat(uint8 *pBuf)
- {
- //TBD
- (void)pBuf; // Remove this when heart beat function is established.
- }
- /***************************************************************************************************
- * @fn MT_UtilTimeAlive
- *
- * @brief Process Time Alive
- *
- * @param pBuf - pointer to the received data
- *
- * @return None
- ***************************************************************************************************/
- void MT_UtilTimeAlive(void)
- {
- uint8 timeAlive[4];
- uint32 tmp32;
- /* Time since last reset (seconds) */
- tmp32 = osal_GetSystemClock() / 1000;
- /* Convert to high byte first into temp buffer */
- timeAlive[0] = BREAK_UINT32(tmp32, 0);
- timeAlive[1] = BREAK_UINT32(tmp32, 1);
- timeAlive[2] = BREAK_UINT32(tmp32, 2);
- timeAlive[3] = BREAK_UINT32(tmp32, 3);
- /* Build and send back the response */
- MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_UTIL), MT_UTIL_TIME_ALIVE,
- sizeof(tmp32), timeAlive );
- }
- #endif /* MT_UTIL_FUNC */
- /***************************************************************************************************
- ***************************************************************************************************/
|