#define bitn(n) (1<<(n))
#define mask(n) (~(1<<(n)))
#define vbitn(var,n) ((var)&(1<<(n)))
#define boolbit(var,n) (vbitn(var,n)?True:False)
#define setbit(var,n) ((var)|(1<<(n)))
#define invbit(var,n) ( vbitn(var,n)?(var&mask((n))):((var)|bitn((n))) )
#define Ver_ID(a,b,c,d) ( (U32)( (((U32)(a)&0xff)<<24)|(((U32)(b)&0xff)<<16)|(((U32)(c)&0xff)<<8)|(((U32)(d)&0xff)<<0) ) )
#define Ver_Str(host,sub,beta_ok) "Ver:"#host"."#sub##beta_ok
//#define Make_Ver(a,b,c,d) "Ver:"#a"."#b"."#c"."#d
//--------------------------------------------------------------------------------------------
//MAKE_RGB888,24位,8--11111111, 8--11111111, 8--11111111
//#define MAKE_RGB888(r,g,b) ((U32)r<<16)|((U32)g<<8)|((U32)b)
#define RGB888(r,g,b) ((U32)r<<16)|((U32)g<<8)|((U32)b)
#define rgb888(r,g,b) ((U32)r<<16)|((U32)g<<8)|((U32)b)
#define Get888R(rgb) (U8)((rgb>>16) & 0xff)
#define Get888G(rgb) (U8)((rgb>>8) & 0xff)
#define Get888B(rgb) (U8)((rgb) & 0xff)
//MAKE_RGB565,16位,5--11111, 6--111111, 5--11111
//#define MAKE_RGB565(r,g,b) (U16)((((U16)r&0xf8)<<8)|(((U16)g&0xfc)<<3)|(((U16)b&0xf8)>>3))
#define RGB565(r,g,b) (U16)((((U16)r&0xf8)<<8)|(((U16)g&0xfc)<<3)|(((U16)b&0xf8)>>3))
#define rgb565(r,g,b) (U16)((((U16)r&0xf8)<<8)|(((U16)g&0xfc)<<3)|(((U16)b&0xf8)>>3))
#define Get565R(rgb) (U8)((rgb>>16) & 0xff)
#define Get565G(rgb) (U8)((rgb>>8) & 0xff)
#define Get565B(rgb) (U8)((rgb) & 0xff)
//--------------------------------------------------------------------------------------------
#define RotateMLefts(data,bits,bitwidth) ((bits)>=(bitwidth))? /
0: /
( /
( /
( /
(data)<<abs(bits) /
) /
| /
( /
(data)>>(abs(bitwidth)-abs(bits)) /
) /
) /
)
#define RotateMRights(data,bits,bitwidth) ((bits)>=(bitwidth))? /
0: /
( /
( /
( /
(data)>>abs(bits) /
) /
| /
( /
(data)<<(abs(bitwidth)-abs(bits)) /
) /
) /
)
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
#define RotateMLefts(data,bits,bitwidth) ((bits)>=(bitwidth))? 0: ((((data)<<abs(bits))|((data)>>(abs(bitwidth)-abs(bits)))))
#define RotateMRights(data,bits,bitwidth) ((bits)>=(bitwidth))? 0: ((((data)>>abs(bits))|((data)<<(abs(bitwidth)-abs(bits)))))
//--------------------------------------------------------------------------------------------
//移动1位
#define RotateLeft(data,bitwidth) (((data)<<1)|((data)>>(abs(bitwidth)-1)))
#define RotateRight(data,bitwidth) (((data)>>1)|((data)<<(abs(bitwidth)-1)))
#define RotateMoveBit(data,bitwidth) (((bitwidth)>=0?RotateLeft(data,bitwidth):RotateRight(data,bitwidth)))
//移动多位
#define RotateLefts(data,bits,bitwidth) (((data)<<abs(bits))|((data)>>abs((abs(bitwidth)-abs(bits)))))
#define RotateRights(data,bits,bitwidth) (((data)>>abs(bits))|((data)<<abs((abs(bitwidth)-abs(bits)))))
#define RotateMoves(data,bits,bitwidth) (((bits)>=0?(((data)<<abs(bits))|((data)>>abs((abs(bitwidth)-abs(bits))))):(((data)>>abs(bits))|((data)<<abs((abs(bitwidth)-abs(bits)))))))