www.pudn.com > Usb_Project.rar > RF_USB_MAC.h


 
#ifndef _RF_USB_MAC_H_ 
#define _RF_USB_MAC_H_ 
 
 
/*  
*  rf_mac_hdr (7bytes) 
* 
*  RFD must program all fields to 0 
* 
*  FFD provides part of Relay function. it's relay aware 
*    
*/ 
struct rf_mac_hdr 
{ 
    /* to limit to a specific group 
    *  use grp==hop, dst!=0 
    */ 
    /* grp_hop 
    *  grp_hop in relay route 
    */ 
    unsigned char grp_hop; 
 
    /*  
    * group to limit localcast to a subset of relays 
    * 0 is anycast. Only RFD can use anycast 
    * 1-254 unicast 
    * 255 is localcast. 
    */ 
    unsigned char grp; 
     
    /* destination of frame, 0-254 
    *   255 is groupcast 
    *   0 is center 
    */ 
    unsigned char dst; 
 
    /* source of frame, 0-254 
    *   255 is forbidden 
    *   0 is center 
    */ 
    unsigned char src; 
 
    /* relay - current relay in this group 
    * 
    *  0-254 
    *  255 is reserved 
    */ 
    unsigned char relay; 
     
    /* index and length 
    */ 
    unsigned char idx_len; 
 
    /* command 
    *  bit 7-4 define header. 0 is this header 
    *  bit 3-0 define protocol 
    */ 
    unsigned char cmd; 
     
}; 
 
/* position of frame header 
*/ 
#define RF_MAC_FRM_HEAD  40 
 
//frame control byte 
/* 
*  0x0  ---- to and from meter 
* 
*/ 
#define RF_MAC_FRM_FCB  46 
 
//data length 
#define RF_MAC_FRM_DATA_LEN  49 
#define RF_MAC_FRM_FEC_LEN    (RF_MAC_FRM_DATA_LEN/7) 
 
#define RF_MAC_FRM_FEC_START  RF_MAC_FRM_DATA_LEN 
 
#define RF_MAC_FRM_LEN    (RF_MAC_FRM_DATA_LEN+RF_MAC_FRM_FEC_LEN) 
 
/* header 
*/ 
#define RF_MAC_HDR(frm)   ((struct rf_mac_hdr *)(((unsigned char *)(frm))+RF_MAC_FRM_HEAD)) 
 
 
int RF_USB_MAC_Init(void); 
 
 
/* protocol version < 0x80 meter report 
*/ 
#define PROTO_REPORT_VER1   0x01 
 
/* protocol version > 0x80 meter config 
*/ 
#define PROTO_CONFIRM_VER1   0x81 
 
/* 
*  FCB -- refer to CJ/T 188-2004 
* 
*  0x10  ----  cold water meter 
*  0x11  ----  warm water meter 
*  0x12  ----  drinkable water meter 
*  0x13  ----  recycle water meter 
* 
*  0x20  ----  thermometer 
* 
*  0x30  ---- gas meter 
* 
*  -> propritery type <- 
* 
*  0xF0  ---- router simple 
*  0xF1  ---- router multiframe 
* 
*/ 
#define MTYPE_COLDWATER   0x10 
 
/*  
*  rf_cwm_rpt_data (28bytes) 
*  cold water meter 
*/ 
struct rf_cwm_rpt_data 
{ 
    unsigned char id[6]; 
    unsigned short mver; 
    unsigned short fact_base; 
 
    unsigned char run_exp; 
    unsigned char stored_exp; 
 
    unsigned char attack_alarm_times; 
    unsigned char cpu_reset_times; 
 
    unsigned short flash_erase_times; 
    unsigned short RF_oper_times; 
     
    unsigned short accumulated[2]; 
     
    unsigned char memo[6]; 
     
}; 
 
/*  
*  rf_cwm_rpt_hdr (12 bytes) 
*  cold water meter 
*/ 
struct rf_cwm_rpt_hdr 
{ 
    //encryption key 64bit for enhanced strength 
    unsigned char key[8]; 
 
    //data 
    struct rf_cwm_rpt_data data; 
     
    //meter type 0 
    unsigned char meter_type; 
    //protocol version 
    unsigned char proto_ver; 
    //CRC  38 39 
    unsigned char crc[2]; 
}; 
 
/*  
*  rf_cwm_cfg_data (28bytes) 
*  cold water meter 
*/ 
struct rf_cwm_cfg_data 
{ 
    unsigned char id[6]; 
 
    unsigned char cmd[2]; 
     
    unsigned short flag; 
    unsigned short fact_base; 
 
    unsigned short accumulated[2]; 
     
    unsigned char memo[6]; 
 
    unsigned char reserved[6]; 
}; 
 
/*  
*  rf_cwm_cfg_hdr (12 bytes) 
*  cold water meter 
*/ 
struct rf_cwm_cfg_hdr 
{ 
    //encryption key 64bit for enhanced strength 
    unsigned char key[8]; 
 
    //data 
    struct rf_cwm_cfg_data data; 
     
    //meter type 0 
    unsigned char meter_type; 
    //protocol version 
    unsigned char proto_ver; 
    //CRC  38 39 
    unsigned char crc[2]; 
}; 
 
void _memcpy(unsigned char * dst, const unsigned char * src, unsigned short len); 
int  _memcmp(const unsigned char * dst, const unsigned char * src, unsigned short len); 
void _device_ID_inc(unsigned char * deviceID); 
extern void *memset(void *s, int c, unsigned int n); 
 
#endif