/*******************************************************************************
*
*    Copyright(C) 2012 WANG XIBING All rights reserved.
*
* 文件：libbase.h
* 作者：wxb
* 版本：V1.00
* 日期：2012-1-1
* 描述：基本的数据类型和函数库
* 属性：RL78
* 修改：V1.00, 2012-1-1, wxb, 创建本文件
*
* 声明：本程序所有权归作者所有。
*       本程序仅用于实现特定产品的功能，任何修改或其它目的的应用均不作保证，
*       任何人未经作者同意不得将本程序的全部或部分用于商业目的。
*******************************************************************************/
#ifndef __LIBBASE_H__
#define __LIBBASE_H__

#include "type.h"
#include "ddl.h"

#include "wdt.h"
#define CHECK_OFFSET  0x5A

#define b2_to_bcd(b2)       ((u16)bytes_to_bcd((b2), 2))
#define bcd_to_b2(bcd, b2)  bcd_to_byte((bcd), (b2), 2)
#define b3_to_bcd(b3)       bytes_to_bcd((b3), 3)
#define bcd_to_b3(bcd, b3)  bcd_to_byte((bcd), (b3), 3)
#define b4_to_bcd(b4)       bytes_to_bcd((b4), 4)
#define bcd_to_b4(bcd, b4)  bcd_to_byte((bcd), (b4), 4)
#define abs(x)  (((x)<0) ? (-(x)):(x))



#define ei()            __enable_irq()
#define di()            __disable_irq()
#define nop()           __NOP()
#define halt()          __WFI();
// Interrupt
#define enable_int()    ei()
#define disable_int()   di()
#define stop()          halt()
// WDT
#define wdt_reset()     Wdt_Feed();

u8  add_check(void *buffer, u8  len);
#define add_offset_check(buffer, len) ((u8)(add_check(buffer, len) + CHECK_OFFSET))
u8  xor_check(void *buffer, u8  len);
#define xor_offset_check(buffer, len) ((u8)(xor_check(buffer, len) + CHECK_OFFSET))
#define b2_to_hex(b2)       ((u16)bytes_to_hex((b2), 2))
#define hex_to_b2(hex, b2)  hex_to_byte((hex), (b2), 2)
#define b3_to_hex(b3)       bytes_to_hex((b3), 3)
#define hex_to_b3(hex, b3)  hex_to_byte((hex), (b3), 3)
#define b4_to_hex(b4)       bytes_to_hex((b4), 4)
#define hex_to_b4(hex, b4)  hex_to_byte((hex), (b4), 4)
#define hex_to_b2_5_high(hex, high) \
    hex_to_b2(hex>>4, (high));
#define hex_to_b2_5_low(hex, low)   \
    low = hex & 0x0F;
#define b2_5_to_hex(high, low)  \
    ((b2_to_hex(high)<<4)|low)

void memcpyinv(void *des, void* src, char len);
u8  u8_to_bcd(u8  n);
u8  bcd_to_u8(u8  b);
u8  u32_to_bcd(u32 n, PU8  bcd, u8  len);
u32 bcd_to_u32(PU8  bcd, u8  len);
u32 bytes_to_hex(const u8  *bytes, u8  len);
void hex_to_byte(u32 hex, u8  *bytes, u8  len);
u32 bytes_to_bcd(const u8  *bytes, u8  len);
void bcd_to_byte(u32 bcd, u8  *bytes, u8  len);
//void u32_to_time(u32 t, DATE_TIME *time);
//u32 time_to_u32(DATE_TIME *time);
void delay_us(u16 us);
void delay_ms(u16 ms);


#endif /*__LIBBASE_H__*/
