123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- /**************************************************************************************************
-
- Phyplus Microelectronics Limited confidential and proprietary.
- All rights reserved.
- IMPORTANT: All rights of this software belong to Phyplus Microelectronics
- Limited ("Phyplus"). Your use of this Software is limited to those
- specific rights granted under the terms of the business contract, the
- confidential agreement, the non-disclosure agreement and any other forms
- of agreements as a customer or a partner of Phyplus. You may not use this
- Software unless you agree to abide by the terms of these agreements.
- You acknowledge that the Software may not be modified, copied,
- distributed or disclosed unless embedded on a Phyplus Bluetooth Low Energy
- (BLE) integrated circuit, either as a product or is integrated into your
- products. Other than for the aforementioned purposes, you may not use,
- reproduce, copy, prepare derivative works of, modify, distribute, perform,
- display or sell this Software and/or its documentation for any purposes.
- 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
- PHYPLUS OR ITS SUBSIDIARIES 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.
-
- **************************************************************************************************/
- /**************************************************************************************************
- Filename: hal_defs.h
- Revised:
- Revision:
- Description: This file contains useful macros and data types
- **************************************************************************************************/
- #ifndef HAL_DEFS_H
- #define HAL_DEFS_H
- /* ------------------------------------------------------------------------------------------------
- * Macros
- * ------------------------------------------------------------------------------------------------
- */
- #ifndef BV
- #define BV(n) (1 << (n))
- #endif
- #ifndef BF
- #define BF(x,b,s) (((x) & (b)) >> (s))
- #endif
- #ifndef MIN
- #define MIN(n,m) (((n) < (m)) ? (n) : (m))
- #endif
- #ifndef MAX
- #define MAX(n,m) (((n) < (m)) ? (m) : (n))
- #endif
- #ifndef ABS
- #define ABS(n) (((n) < 0) ? -(n) : (n))
- #endif
- /* takes a byte out of a uint32 : var - uint32, ByteNum - byte to take out (0 - 3) */
- #define BREAK_UINT32( var, ByteNum ) \
- (uint8)((uint32)(((var) >>((ByteNum) * 8)) & 0x00FF))
- #define BUILD_UINT32(Byte0, Byte1, Byte2, Byte3) \
- ((uint32)((uint32)((Byte0) & 0x00FF) \
- + ((uint32)((Byte1) & 0x00FF) << 8) \
- + ((uint32)((Byte2) & 0x00FF) << 16) \
- + ((uint32)((Byte3) & 0x00FF) << 24)))
- #define BUILD_UINT16(loByte, hiByte) \
- ((uint16)(((loByte) & 0x00FF) + (((hiByte) & 0x00FF) << 8)))
- #define HI_UINT16(a) (((a) >> 8) & 0xFF)
- #define LO_UINT16(a) ((a) & 0xFF)
- #define BUILD_UINT8(hiByte, loByte) \
- ((uint8)(((loByte) & 0x0F) + (((hiByte) & 0x0F) << 4)))
- #define HI_UINT8(a) (((a) >> 4) & 0x0F)
- #define LO_UINT8(a) ((a) & 0x0F)
- // Write the 32bit value of 'val' in little endian format to the buffer pointed
- // to by pBuf, and increment pBuf by 4
- #define UINT32_TO_BUF_LITTLE_ENDIAN(pBuf,val) \
- do { \
- *(pBuf)++ = (((val) >> 0) & 0xFF); \
- *(pBuf)++ = (((val) >> 8) & 0xFF); \
- *(pBuf)++ = (((val) >> 16) & 0xFF); \
- *(pBuf)++ = (((val) >> 24) & 0xFF); \
- } while (0)
- // Return the 32bit little-endian formatted value pointed to by pBuf, and increment pBuf by 4
- #define BUF_TO_UINT32_LITTLE_ENDIAN(pBuf) (((pBuf) += 4), BUILD_UINT32((pBuf)[-4], (pBuf)[-3], (pBuf)[-2], (pBuf)[-1]))
- #ifndef GET_BIT
- #define GET_BIT(DISCS, IDX) (((DISCS)[((IDX) / 8)] & BV((IDX) % 8)) ? TRUE : FALSE)
- #endif
- #ifndef SET_BIT
- #define SET_BIT(DISCS, IDX) (((DISCS)[((IDX) / 8)] |= BV((IDX) % 8)))
- #endif
- #ifndef CLR_BIT
- #define CLR_BIT(DISCS, IDX) (((DISCS)[((IDX) / 8)] &= (BV((IDX) % 8) ^ 0xFF)))
- #endif
- /*
- * This macro is for use by other macros to form a fully valid C statement.
- * Without this, the if/else conditionals could show unexpected behavior.
- *
- * For example, use...
- * #define SET_REGS() st( ioreg1 = 0; ioreg2 = 0; )
- * instead of ...
- * #define SET_REGS() { ioreg1 = 0; ioreg2 = 0; }
- * or
- * #define SET_REGS() ioreg1 = 0; ioreg2 = 0;
- * The last macro would not behave as expected in the if/else construct.
- * The second to last macro will cause a compiler error in certain uses
- * of if/else construct
- *
- * It is not necessary, or recommended, to use this macro where there is
- * already a valid C statement. For example, the following is redundant...
- * #define CALL_FUNC() st( func(); )
- * This should simply be...
- * #define CALL_FUNC() func()
- *
- * (The while condition below evaluates false without generating a
- * constant-controlling-loop type of warning on most compilers.)
- */
- #define st(x) do { x } while (__LINE__ == -1)
- #define HAL_WAIT_CONDITION(condition) {while(!(condition)){}}
- #define HAL_WAIT_CONDITION_TIMEOUT(condition, timeout) {\
- volatile int val = 0;\
- while(!(condition)){\
- if(val ++ > timeout)\
- return PPlus_ERR_TIMEOUT;\
- }\
- }
- #define HAL_WAIT_CONDITION_TIMEOUT_WO_RETURN(condition, timeout) {\
- volatile int val = 0;\
- while(!(condition)){\
- if(val ++ > timeout)\
- break;\
- }\
- }
- /**************************************************************************************************
- */
- #endif
|