You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
457 lines
14 KiB
457 lines
14 KiB
/* |
|
* iav_common.h |
|
* |
|
* History: |
|
* 2013/09/04 - [Cao Rongrong] Created file |
|
* |
|
* Copyright (c) 2016 Ambarella, Inc. |
|
* |
|
* This file and its contents ("Software") are protected by intellectual |
|
* property rights including, without limitation, U.S. and/or foreign |
|
* copyrights. This Software is also the confidential and proprietary |
|
* information of Ambarella, Inc. and its licensors. You may not use, reproduce, |
|
* disclose, distribute, modify, or otherwise prepare derivative works of this |
|
* Software or any portion thereof except pursuant to a signed license agreement |
|
* or nondisclosure agreement with Ambarella, Inc. or its authorized affiliates. |
|
* In the absence of such an agreement, you agree to promptly notify and return |
|
* this Software to Ambarella, Inc. |
|
* |
|
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, |
|
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, |
|
* MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
|
* IN NO EVENT SHALL AMBARELLA, INC. OR ITS AFFILIATES BE LIABLE FOR ANY DIRECT, |
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
|
* LOSS OF USE, DATA, OR PROFITS; COMPUTER FAILURE OR MALFUNCTION; OR BUSINESS |
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
|
* POSSIBILITY OF SUCH DAMAGE. |
|
* |
|
*/ |
|
|
|
#ifndef __IAV_COMMON_H__ |
|
#define __IAV_COMMON_H__ |
|
/*! @file iav_common.h |
|
* @brief This file defines common enumerations used in all IAV driver and header files |
|
*/ |
|
|
|
#ifdef __cplusplus |
|
extern "C" { |
|
#endif |
|
|
|
/*! @addtogroup iav-common-helper |
|
* @{ |
|
*/ |
|
|
|
/** @enum amba_chip_arch |
|
* @brief AMBA CHIP ARCH definition |
|
*/ |
|
enum amba_chip_arch { |
|
AMBA_CHIP_ARCH_UNKNOWN = 0xFFFF, /*!< 0xFFFF */ |
|
AMBA_CHIP_ARCH_S5 = 11000, /*!< 11000 */ |
|
AMBA_CHIP_ARCH_S2L = 12000, /*!< 12000 */ |
|
AMBA_CHIP_ARCH_S3L = 13000, /*!< 13000 */ |
|
AMBA_CHIP_ARCH_S5L = 16000, /*!< 16000 */ |
|
AMBA_CHIP_ARCH_S6LM = 17000, /*!< 17000 */ |
|
AMBA_CHIP_ARCH_CV1 = 20000, /*!< 20000 */ |
|
AMBA_CHIP_ARCH_CV2 = 21000, /*!< 21000 */ |
|
AMBA_CHIP_ARCH_CV22 = 22000, /*!< 22000 */ |
|
AMBA_CHIP_ARCH_CV25 = 25000, /*!< 25000 */ |
|
}; |
|
|
|
/*! @enum amba_video_format |
|
* @brief AMBA Video Format Enumerations |
|
*/ |
|
enum amba_video_format { |
|
AMBA_VIDEO_FORMAT_AUTO = 0, /*!< 0 */ |
|
AMBA_VIDEO_FORMAT_INTERLACE = 1, /*!< 1 */ |
|
AMBA_VIDEO_FORMAT_PROGRESSIVE = 2, /*!< 2 */ |
|
}; |
|
|
|
/*! @enum amba_video_type |
|
* @brief AMBA Video Type Enumerations |
|
*/ |
|
enum amba_video_type { |
|
AMBA_VIDEO_TYPE_AUTO = 0, /*!< 0 */ |
|
AMBA_VIDEO_TYPE_YUV_601 = 1, /*!< 1 */ |
|
AMBA_VIDEO_TYPE_YUV_656 = 2, /*!< 2 */ |
|
AMBA_VIDEO_TYPE_RGB_601 = 3, /*!< 3 */ |
|
AMBA_VIDEO_TYPE_RGB_656 = 4, /*!< 4 */ |
|
AMBA_VIDEO_TYPE_RGB_RAW = 5, /*!< 5 */ |
|
AMBA_VIDEO_TYPE_YUV_BT1120 = 6, /*!< 6 */ |
|
AMBA_VIDEO_TYPE_RGB_BT1120 = 7, /*!< 7 */ |
|
}; |
|
|
|
/*! @macros AMBA_VIDEO_FPS(fps) |
|
* @brief Formula of video fps.Input fps would be in enum amba_video_fps |
|
*/ |
|
#define AMBA_VIDEO_FPS(fps) (512000000 / fps) |
|
|
|
/*! @enum amba_video_fps |
|
* @brief AMBA Video FPS Enumerations |
|
*/ |
|
enum amba_video_fps { |
|
AMBA_VIDEO_FPS_AUTO = 0, /*!< 0 */ |
|
AMBA_VIDEO_FPS_1 = 512000000, /*!< 512000000 */ |
|
AMBA_VIDEO_FPS_2 = 256000000, /*!< 256000000 */ |
|
AMBA_VIDEO_FPS_3 = 170666667, /*!< 170666667 */ |
|
AMBA_VIDEO_FPS_4 = 128000000, /*!< 128000000 */ |
|
AMBA_VIDEO_FPS_5 = 102400000, /*!< 102400000 */ |
|
AMBA_VIDEO_FPS_6 = 85333333, /*!< 85333333 */ |
|
AMBA_VIDEO_FPS_10 = 51200000, /*!< 51200000 */ |
|
AMBA_VIDEO_FPS_12 = 42666667, /*!< 42666667 */ |
|
AMBA_VIDEO_FPS_13 = 39384615, /*!< 39384615 */ |
|
AMBA_VIDEO_FPS_14 = 36571428, /*!< 36571428 */ |
|
AMBA_VIDEO_FPS_15 = 34133333, /*!< 34133333 */ |
|
AMBA_VIDEO_FPS_20 = 25600000, /*!< 25600000 */ |
|
AMBA_VIDEO_FPS_24 = 21333333, /*!< 21333333 */ |
|
AMBA_VIDEO_FPS_25 = 20480000, /*!< 20480000 */ |
|
AMBA_VIDEO_FPS_30 = 17066667, /*!< 17066667 */ |
|
AMBA_VIDEO_FPS_50 = 10240000, /*!< 10240000 */ |
|
AMBA_VIDEO_FPS_60 = 8533333, /*!< 8533333 */ |
|
AMBA_VIDEO_FPS_120 = 4266667, /*!< 4266667 */ |
|
AMBA_VIDEO_FPS_29_97 = 17083750, /*!< 17083750 */ |
|
AMBA_VIDEO_FPS_59_94 = 8541875, /*!< 8541875 */ |
|
AMBA_VIDEO_FPS_23_976 = 21354688, /*!< 21354688 */ |
|
AMBA_VIDEO_FPS_12_5 = 40960000, /*!< 40960000 */ |
|
AMBA_VIDEO_FPS_6_25 = 81920000, /*!< 81920000 */ |
|
AMBA_VIDEO_FPS_3_125 = 163840000, /*!< 163840000 */ |
|
AMBA_VIDEO_FPS_7_5 = 68266667, /*!< 68266667 */ |
|
AMBA_VIDEO_FPS_3_75 = 136533333, /*!< 136533333 */ |
|
}; |
|
|
|
/*! @enum amba_video_mode |
|
* @brief AMBA Video Mode Enumerations |
|
*/ |
|
enum amba_video_mode { |
|
AMBA_VIDEO_MODE_AUTO = 0, /*!< 0, default mode*/ |
|
|
|
AMBA_VIDEO_MODE_240_400, |
|
AMBA_VIDEO_MODE_320_240, |
|
AMBA_VIDEO_MODE_320_288, |
|
AMBA_VIDEO_MODE_320_480, |
|
AMBA_VIDEO_MODE_360_240, |
|
AMBA_VIDEO_MODE_360_288, |
|
AMBA_VIDEO_MODE_480_240, |
|
AMBA_VIDEO_MODE_480_640, |
|
AMBA_VIDEO_MODE_480_800, |
|
AMBA_VIDEO_MODE_640_480, |
|
AMBA_VIDEO_MODE_640_512, |
|
AMBA_VIDEO_MODE_720_240, |
|
AMBA_VIDEO_MODE_720_480, |
|
AMBA_VIDEO_MODE_720_576, |
|
AMBA_VIDEO_MODE_800_480, |
|
AMBA_VIDEO_MODE_848_480, |
|
AMBA_VIDEO_MODE_800_600, |
|
AMBA_VIDEO_MODE_960_240, |
|
AMBA_VIDEO_MODE_960_540, |
|
AMBA_VIDEO_MODE_1024_600, |
|
AMBA_VIDEO_MODE_1024_768, |
|
AMBA_VIDEO_MODE_1152_576, |
|
AMBA_VIDEO_MODE_1152_648, |
|
AMBA_VIDEO_MODE_1280_320, |
|
AMBA_VIDEO_MODE_1280_720, |
|
AMBA_VIDEO_MODE_1280_800, |
|
AMBA_VIDEO_MODE_1280_960, |
|
AMBA_VIDEO_MODE_1280_1024, |
|
AMBA_VIDEO_MODE_1296_1032, |
|
AMBA_VIDEO_MODE_1400_1050, |
|
AMBA_VIDEO_MODE_1440_900, |
|
AMBA_VIDEO_MODE_1600_1200, |
|
AMBA_VIDEO_MODE_1600_1600, |
|
AMBA_VIDEO_MODE_1632_1632, |
|
AMBA_VIDEO_MODE_1640_1232, |
|
AMBA_VIDEO_MODE_1680_1050, |
|
AMBA_VIDEO_MODE_1728_486, |
|
AMBA_VIDEO_MODE_1920_1080, |
|
AMBA_VIDEO_MODE_1920_1200, |
|
AMBA_VIDEO_MODE_1920_1440, |
|
AMBA_VIDEO_MODE_1920_1920, |
|
AMBA_VIDEO_MODE_2048_1080, |
|
AMBA_VIDEO_MODE_2048_1152, |
|
AMBA_VIDEO_MODE_2048_1536, |
|
AMBA_VIDEO_MODE_2048_2048, |
|
AMBA_VIDEO_MODE_2208_1242, |
|
AMBA_VIDEO_MODE_2304_1296, |
|
AMBA_VIDEO_MODE_2304_1536, |
|
AMBA_VIDEO_MODE_2304_1728, |
|
AMBA_VIDEO_MODE_2432_2048, |
|
AMBA_VIDEO_MODE_2520_1424, |
|
AMBA_VIDEO_MODE_2560_1440, |
|
AMBA_VIDEO_MODE_2560_2048, |
|
AMBA_VIDEO_MODE_2592_1944, |
|
AMBA_VIDEO_MODE_2688_1512, |
|
AMBA_VIDEO_MODE_2688_1520, |
|
AMBA_VIDEO_MODE_2688_1944, |
|
AMBA_VIDEO_MODE_3072_1728, |
|
AMBA_VIDEO_MODE_3072_2048, |
|
AMBA_VIDEO_MODE_3280_1852, |
|
AMBA_VIDEO_MODE_3280_2464, |
|
AMBA_VIDEO_MODE_3840_2160, |
|
AMBA_VIDEO_MODE_4000_3000, |
|
AMBA_VIDEO_MODE_4016_3016, |
|
AMBA_VIDEO_MODE_4096_2160, |
|
AMBA_VIDEO_MODE_5472_3648, |
|
AMBA_VIDEO_MODE_7680_4320, |
|
AMBA_VIDEO_MODE_1920_2160, |
|
AMBA_VIDEO_MODE_3008_3000, |
|
AMBA_VIDEO_MODE_1792_1792, |
|
AMBA_VIDEO_MODE_2000_1118, |
|
AMBA_VIDEO_MODE_1312_996, |
|
AMBA_VIDEO_MODE_1920_480, |
|
AMBA_VIDEO_MODE_1920_640, |
|
AMBA_VIDEO_MODE_1920_720, |
|
AMBA_VIDEO_MODE_3264_2448, |
|
AMBA_VIDEO_MODE_1856_1856, |
|
AMBA_VIDEO_MODE_3008_3008, |
|
AMBA_VIDEO_MODE_1536_1536, |
|
AMBA_VIDEO_MODE_2176_2160, |
|
AMBA_VIDEO_MODE_2880_1856, |
|
AMBA_VIDEO_MODE_2448_2064, |
|
AMBA_VIDEO_MODE_1952_1112, |
|
AMBA_VIDEO_MODE_1200_1920, |
|
AMBA_VIDEO_MODE_1824_944, |
|
AMBA_VIDEO_MODE_1280_1080, |
|
AMBA_VIDEO_MODE_6016_4008, |
|
AMBA_VIDEO_MODE_4768_3184, |
|
AMBA_VIDEO_MODE_1280_1000, |
|
AMBA_VIDEO_MODE_2592_1440, |
|
AMBA_VIDEO_MODE_2880_1080, |
|
|
|
AMBA_VIDEO_MODE_NUM, |
|
|
|
/* alias name */ |
|
AMBA_VIDEO_MODE_HVGA = AMBA_VIDEO_MODE_320_480, /*!< AMBA_VIDEO_MODE_320_480 */ |
|
AMBA_VIDEO_MODE_VGA = AMBA_VIDEO_MODE_640_480, /*!< AMBA_VIDEO_MODE_640_480 */ |
|
AMBA_VIDEO_MODE_WVGA = AMBA_VIDEO_MODE_800_480, /*!< AMBA_VIDEO_MODE_800_480 */ |
|
AMBA_VIDEO_MODE_SVGA = AMBA_VIDEO_MODE_800_600, /*!< AMBA_VIDEO_MODE_800_600 */ |
|
AMBA_VIDEO_MODE_WSVGA = AMBA_VIDEO_MODE_1024_600, /*!< AMBA_VIDEO_MODE_1024_600 */ |
|
AMBA_VIDEO_MODE_XGA = AMBA_VIDEO_MODE_1024_768, /*!< AMBA_VIDEO_MODE_1024_768 */ |
|
AMBA_VIDEO_MODE_WXGA = AMBA_VIDEO_MODE_1280_800, /*!< AMBA_VIDEO_MODE_1280_800 */ |
|
AMBA_VIDEO_MODE_SXGA = AMBA_VIDEO_MODE_1280_1024, /*!< AMBA_VIDEO_MODE_1280_1024 */ |
|
AMBA_VIDEO_MODE_SXGAP = AMBA_VIDEO_MODE_1400_1050, /*!< AMBA_VIDEO_MODE_1400_1050 */ |
|
AMBA_VIDEO_MODE_WSXGA = AMBA_VIDEO_MODE_1440_900, /*!< AMBA_VIDEO_MODE_1440_900 */ |
|
AMBA_VIDEO_MODE_UXGA = AMBA_VIDEO_MODE_1600_1200, /*!< AMBA_VIDEO_MODE_1600_1200 */ |
|
AMBA_VIDEO_MODE_WSXGAP = AMBA_VIDEO_MODE_1680_1050, /*!< AMBA_VIDEO_MODE_1680_1050 */ |
|
AMBA_VIDEO_MODE_WUXGA = AMBA_VIDEO_MODE_1920_1200, /*!< AMBA_VIDEO_MODE_1920_1200 */ |
|
AMBA_VIDEO_MODE_QXGA = AMBA_VIDEO_MODE_2048_1536, /*!< AMBA_VIDEO_MODE_2048_1536 */ |
|
AMBA_VIDEO_MODE_QSXGA = AMBA_VIDEO_MODE_2592_1944, /*!< AMBA_VIDEO_MODE_2592_1944 */ |
|
AMBA_VIDEO_MODE_1080P = AMBA_VIDEO_MODE_1920_1080, /*!< AMBA_VIDEO_MODE_1920_1080 */ |
|
AMBA_VIDEO_MODE_1080I = AMBA_VIDEO_MODE_1920_1080, /*!< AMBA_VIDEO_MODE_1920_1080 */ |
|
AMBA_VIDEO_MODE_720P = AMBA_VIDEO_MODE_1280_720, /*!< AMBA_VIDEO_MODE_1280_720 */ |
|
AMBA_VIDEO_MODE_576P = AMBA_VIDEO_MODE_720_576, /*!< AMBA_VIDEO_MODE_720_576 */ |
|
AMBA_VIDEO_MODE_480P = AMBA_VIDEO_MODE_720_480, /*!< AMBA_VIDEO_MODE_720_480 */ |
|
AMBA_VIDEO_MODE_576I = AMBA_VIDEO_MODE_720_576, /*!< AMBA_VIDEO_MODE_720_576 */ |
|
AMBA_VIDEO_MODE_480I = AMBA_VIDEO_MODE_720_480, /*!< AMBA_VIDEO_MODE_720_480 */ |
|
AMBA_VIDEO_MODE_D1_PAL = AMBA_VIDEO_MODE_720_576, /*!< AMBA_VIDEO_MODE_720_576 */ |
|
AMBA_VIDEO_MODE_D1_NTSC = AMBA_VIDEO_MODE_720_480, /*!< AMBA_VIDEO_MODE_720_480 */ |
|
|
|
/* misc */ |
|
AMBA_VIDEO_MODE_OFF = 0xF000, /*!< 0xF000 */ |
|
AMBA_VIDEO_MODE_NOT_SUPPORT = -1, /*!< -1 */ |
|
AMBA_VIDEO_MODE_CURRENT = -2, /*!< -2 */ |
|
AMBA_VIDEO_MODE_INVALID = AMBA_VIDEO_MODE_NUM + 1, /*!< AMBA_VIDEO_MODE_NUM + 1 */ |
|
}; |
|
|
|
/*! @enum amba_video_bits |
|
* @brief AMBA Video Bits Enumerations |
|
*/ |
|
enum amba_video_bits { |
|
AMBA_VIDEO_BITS_AUTO = 0, /*!< 0 */ |
|
AMBA_VIDEO_BITS_8 = 8, /*!< 8 */ |
|
AMBA_VIDEO_BITS_10 = 10, /*!< 10 */ |
|
AMBA_VIDEO_BITS_12 = 12, /*!< 12 */ |
|
AMBA_VIDEO_BITS_14 = 14, /*!< 14 */ |
|
AMBA_VIDEO_BITS_16 = 16, /*!< 16 */ |
|
}; |
|
|
|
/*! @enum amba_video_ratio |
|
* @brief AMBA Video Ration Enumerations |
|
*/ |
|
enum amba_video_ratio { |
|
AMBA_VIDEO_RATIO_AUTO = 0x0, /*!< 0x0 */ |
|
AMBA_VIDEO_RATIO_4_3 = 0x1, /*!< 0x1 */ |
|
AMBA_VIDEO_RATIO_16_9 = 0x2, /*!< 0x2 */ |
|
AMBA_VIDEO_RATIO_1_1 = 0x4, /*!< 0x4 */ |
|
}; |
|
|
|
/*! @enum amba_video_system |
|
* @brief AMBA Video Ration Enumerations |
|
*/ |
|
enum amba_video_system { |
|
AMBA_VIDEO_SYSTEM_AUTO = 0x0, /*!< 0x0 */ |
|
AMBA_VIDEO_SYSTEM_NTSC = 0x1, /*!< 0x1 */ |
|
AMBA_VIDEO_SYSTEM_PAL = 0x2, /*!< 0x2 */ |
|
AMBA_VIDEO_SYSTEM_SECAM = 0x4, /*!< 0x4 */ |
|
AMBA_VIDEO_SYSTEM_ALL = 0xf, /*!< 0xf */ |
|
}; |
|
|
|
enum amba_video_hdr_mode { |
|
AMBA_VIDEO_LINEAR_MODE = 0, /*!< 0 */ |
|
AMBA_VIDEO_2X_HDR_MODE, |
|
AMBA_VIDEO_3X_HDR_MODE, |
|
AMBA_VIDEO_4X_HDR_MODE, |
|
|
|
AMBA_VIDEO_INT_HDR_MODE = 15, /*!< 15 */ |
|
|
|
AMBA_VIDEO_MODE_TOTAL_NUM, |
|
|
|
AMBA_VIDEO_HDR_MODE_INVALID = 0xFF, /*!< 0xFF */ |
|
|
|
AMBA_VIDEO_MODE_FIRST = 0,/*!< 0 */ |
|
AMBA_VIDEO_MODE_LAST = AMBA_VIDEO_MODE_TOTAL_NUM, /*!< AMBA_VIDEO_MODE_TOTAL_NUM */ |
|
}; |
|
/*! @} */ /* iav-common-helper */ |
|
|
|
|
|
/*! @addtogroup iav-common-struct |
|
* @{ |
|
*/ |
|
|
|
/*! @struct amba_video_info |
|
* @brief Amba video info |
|
*/ |
|
struct amba_video_info { |
|
u32 mode; /*!< Video mode, @sa amba_video_mode */ |
|
u32 width; /*!< Window width */ |
|
u32 height; /*!< Window height */ |
|
u32 max_fps; /*!< Video max fps */ |
|
u32 fps; /*!< Video fps */ |
|
u8 format; /*!< Video format */ |
|
u8 type; /*!< Video type */ |
|
u8 bits; /*!< Video encode bit width */ |
|
u8 ratio; /*!< Width-height ratio */ |
|
u8 system; /*!< Video system type */ |
|
u8 flip; /*!< Video flip */ |
|
u8 rotate; /*!< Video rotate */ |
|
u8 hdr_mode; /*!< Video rotate */ |
|
u32 rev; /*!< Struct definition revision */ |
|
}; |
|
/*! @} */ /* iav-common-struct */ |
|
|
|
/*! |
|
* @addtogroup iav-common-helper |
|
* @{ |
|
*/ |
|
/*! @macros DIV_ROUND(x,d) |
|
* @brief div_round in 32-bit. |
|
*/ |
|
#ifndef DIV_ROUND |
|
#define DIV_ROUND(x, d) (((x) + ((d) - 1)) / (d)) |
|
#endif |
|
|
|
/*! @macros DIV_CLOSEST(x,d) |
|
* @brief div_closest in 32-bit. |
|
*/ |
|
#ifndef DIV_CLOSEST |
|
#define DIV_CLOSEST(x, d) (((x) + ((d) / 2)) / (d)) |
|
#endif |
|
|
|
/*! |
|
* @macros DIV64_ROUND(x,d) |
|
* @brief div_round in 64-bit. |
|
*/ |
|
#ifndef DIV64_ROUND |
|
#define DIV64_ROUND(x, d) ({u64 _tmp = (x)+((d) - 1); do_div(_tmp, d); _tmp;}) |
|
#endif |
|
|
|
/*! |
|
* @macros DIV64_CLOSEST(x,d) |
|
* @brief div_closet in 64-bit. |
|
*/ |
|
#ifndef DIV64_CLOSEST |
|
#define DIV64_CLOSEST(x, d) ({u64 _tmp = (x)+((d)/2); do_div(_tmp, d); _tmp;}) |
|
#endif |
|
|
|
/*! |
|
* @macros ROUND_UP(x,d) |
|
* @brief round up func. |
|
*/ |
|
#ifndef ROUND_UP |
|
#define ROUND_UP(x, n) ( ((x)+(n)-1u) & ~((n)-1u) ) |
|
#endif |
|
|
|
/*! |
|
* @macros ROUND_DOWN(x,d) |
|
* @brief round down func. |
|
*/ |
|
#ifndef ROUND_DOWN |
|
#define ROUND_DOWN(x, n) ((x) & ~((n) - 1)) |
|
#endif |
|
|
|
/*! |
|
* @macros MIN(a, b) |
|
* @brief return minimum value of a and b. |
|
*/ |
|
#ifndef MIN |
|
#define MIN(a, b) (((a) < (b)) ? (a) : (b)) |
|
#endif |
|
|
|
/*! |
|
* @macros MAX(a, b) |
|
* @brief return maximum value of a and b. |
|
*/ |
|
#ifndef MAX |
|
#define MAX(a, b) (((a) > (b)) ? (a) : (b)) |
|
#endif |
|
|
|
/*! |
|
* @macros ABS(x) |
|
* @brief return absolute value of x. |
|
*/ |
|
#ifndef ABS |
|
#define ABS(x) ({ \ |
|
int __x = (x); \ |
|
(__x < 0) ? -__x : __x; \ |
|
}) |
|
#endif |
|
|
|
/*! |
|
* @macros ARRAY_SIZE(array) |
|
* @brief return array_size of input array. |
|
*/ |
|
#ifndef ARRAY_SIZE |
|
#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0])) |
|
#endif |
|
|
|
/*! |
|
* @macros BIT(n) |
|
* @brief bit n. |
|
*/ |
|
#ifndef BIT |
|
#define BIT(n) (1 << (n)) |
|
#endif |
|
|
|
/*! |
|
* @macros TEST_BIT(x, n) |
|
* @brief test if the (n) th bit of (x) is 1. |
|
*/ |
|
#ifndef TEST_BIT |
|
#define TEST_BIT(x, n) ((x) & (1 << (n))) |
|
#endif |
|
|
|
/*! |
|
* @macros SET_BIT(x, n) |
|
* @brief set the (n)th bit of (x) to 1. |
|
*/ |
|
#ifndef SET_BIT |
|
#define SET_BIT(x, n) do {x = (x | (1 << (n)));} while(0); |
|
#endif |
|
|
|
/*! |
|
* @macros CLEAR_BIT(x, n) |
|
* @brief set the (n)th bit of (x) to 0. |
|
*/ |
|
#ifndef CLEAR_BIT |
|
#define CLEAR_BIT(x, n) do {x = (x & (~(1 << (n))));} while(0); |
|
#endif |
|
/*! @} */ /* End of iav-common-helper */ |
|
|
|
|
|
#ifdef __cplusplus |
|
} |
|
#endif |
|
|
|
#endif |
|
|
|
|