/* ********************************************************************************************************* * IAR Development Kits * on the * * Nano100 * * Filename : uart_RFModule.h * Version : V1.00 * Programmer(s) : Qian Xianghong ********************************************************************************************************* */ #ifndef USER_UART_RFMODULE_PRESENT #define USER_UART_RFMODULE_PRESENT #include "type.h" //// ³õʼ»¯ //void RF_Init(); //void RF_Open(); //// ·´³õʼ»¯ //void RF_UnInit(); //// Ä£¿éÉϵ磬ÉèÖÃÓ²¼þ²ÎÊý //void RF_PowerOn(); //void RF_PowerOff(); //// ÖÕ¶ËÄ£¿éËÑÑ°Íø¹Ø£º·¢ËÍËÑѰÃüÁµÈ´ý»ØÓ¦¡£ //// ËÑѰ5´Î£¬È¡»ØÓ¦´ÎÊý×î¶àµÄ×÷ΪͨÐÅÍø¹Ø¡£ //// ×î¶à½ÓÊÕ10¸öÍø¹Ø //uint8_t rf_check_gateway(); //// ¼ì²éµ±Ç°ÊÇ·ñÒѾ­ÉèÖÃÁËÍø¹Ø //uint8_t rf_has_gateway(); //// Çå³ýÍø¹Ø //void rf_clear_gateway(); //// Ó¦Óò㷢ËÍ£ºÊý¾Ý uint8_t rf_app_send_data(uint8_t payload_len, uint8_t *payload);// //// ´¢¹Þ·¢Ëͳä×°Æ¥ÅäÃüÁ²¢µÈ´ýÓ¦´ð //uint8_t rf_charge_match(uint8_t charging); //// Åжϲ۳µÊÇ·ñÀ뿪ԭµØ //uint32_t rf_is_truck_leave(); #define RF_MIN_FRAME_LEN (13) #define RF_MAX_FRAME_LEN (61) #define RF_MIN_PAYLOAD_LEN (0) #define RF_MAX_PAYLOAD_LEN (RF_MAX_FRAME_LEN - RF_MIN_FRAME_LEN) #define RF_DIR_UP (0) // ÉÏÐÐ #define RF_DIR_DOWN (1) // ÏÂÐÐ #define RF_MAC_TYPE_DATA (0) // macÖ¡-Êý¾Ý #define RF_MAC_TYPE_ACK (1) // macÖ¡-ACK #define RF_NET_TYPE_DATA (0) // netÖ¡-Êý¾Ý #define RF_NET_TYPE_FIND_RELAY (1) // netÖ¡-ѰÕÒÖÐ¼ÌÆ÷ #define RF_NET_TYPE_RESP_RELAY (2) // netÖ¡-Ó¦´ðÖÐ¼ÌÆ÷ #define RF_NET_TYPE_CHARGE_MATCH (3) // netÖ¡-³ä×°Æ¥Åä #define RF_NET_TYPE_REMOTE_CTRL (4) // netÖ¡-Ò£¿ØÃüÁî #define RF_FRAME_SOF (0x1B) // ±êʶһ¸öÖ¡µÄ¿ªÊ¼ #define RF_MARK_LS (('S' << 8) | 'L') #define RF_APP_AJH ('A') // data.idatatank.com:8088 #define RF_APP_PRAX ('P') // tts.praxair.com.cn:7005 #define RF_APP_LANSHI ('L') // data.cd-ls.cn:8088 #define RF_PROTOCOL_VER_1 (1) // É䯵³õʼ»¯×´Ì¬ extern uint8_t RF_initStatus; // ÔÊÐíÄäÃû½á¹¹ #pragma anon_unions #pragma pack(push, 1) //typedef struct // size = RF_MAX_FRAME_LEN //{ // uint8_t sof; // RF_FRMAE_SOF // uint8_t len; // bytes from sof to crc£¨RF_MIN_FRAME_LEN~RF_MAX_FRAME_LEN£© // uint16_t vendor_id; // RF_MARK_LS // uint8_t app_id; // RF_APP_AJH or RF_APP_PRAX or RF_APP_LANSHI // uint8_t protocol_ver; // RF_PROTOCOL // unsigned dir : 1; // RF_DIR_UP or RF_DIR_DOWN // unsigned mac_type : 2; // RF_MAC_TYPE_DATA or RF_MAC_TYPE_ACK // unsigned mac_ack_req : 1; // is ack requested? // unsigned net_type : 3; // RF_NET_TYPE_DATA or RF_NET_TYPE_FIND_RELAY or RF_NET_TYPE_RESP_RELAY or RF_NET_TYPE_REMOTE_CTRL // unsigned : 1; // reserved // uint8_t mac_fn; // mac frame number // uint8_t destPSN[6]; // uint8_t srcPSN[6]; // uint8_t app_pn; // package number // unsigned app_idx : 7; // frame number in package // unsigned app_tbc : 1; // to be continue? // uint8_t app_payload[RF_MAX_PAYLOAD_LEN]; // uint16_t crc; // ռλÖã¬Êµ¼Êcrc¿ÉÄܸü¿¿Ç° //} rf_frame_t; typedef struct // size = RF_MAX_FRAME_LEN { //uint8_t sof; // RF_FRMAE_SOF uint16_t vendor_id; // RF_MARK_LS uint8_t len; // bytes from sof to crc£¨RF_MIN_FRAME_LEN~RF_MAX_FRAME_LEN£ // uint8_t app_id; // RF_APP_AJH or RF_APP_PRAX or RF_APP_LANSHI // uint8_t protocol_ver; // RF_PROTOCOL unsigned dir : 1; // RF_DIR_UP or RF_DIR_DOWN unsigned mac_ack_req : 1; // is ack requested? unsigned mac_type : 2; // RF_MAC_TYPE_DATA or RF_MAC_TYPE_ACK unsigned net_type : 3; // RF_NET_TYPE_DATA or RF_NET_TYPE_FIND_RELAY or RF_NET_TYPE_RESP_RELAY or RF_NET_TYPE_REMOTE_CTRL unsigned : 1; // ack uint8_t mac_fn; // mac frame number // uint8_t destPSN[6]; uint8_t srcPSN[6]; // uint8_t app_pn; // package number // unsigned app_idx : 7; // frame number in package // unsigned app_tbc : 1; // to be continue? uint8_t app_payload[15]; uint16_t crc; // ռλÖã¬Êµ¼Êcrc¿ÉÄܸü¿¿Ç° } rf_frame_t; // mac²ãackÐÅÏ¢ typedef struct { uint8_t srcPSN[6]; uint8_t mac_fn; } rf_ack_t; // Ó¦ÓòãÓ¦´ðÐÅÏ¢ typedef struct { uint8_t srcPSN[6]; uint8_t app_pn; uint8_t payload_len; uint8_t payload[RF_MAX_PAYLOAD_LEN]; } rf_resp_t; typedef struct { unsigned staDiff : 2; unsigned staPress : 2; unsigned staETempr1 : 2; unsigned charging : 1; unsigned bat_low : 1; unsigned measure_type : 2; unsigned bottle_type : 2; unsigned L_source : 3; unsigned location_type : 1; // 0-GPS,1-»ùÕ¾ } rf_sensor_t; typedef struct // size = 37 { uint16_t diff; uint16_t press; int16_t tempr; rf_sensor_t Sensor; uint16_t density; uint32_t longitude; uint32_t latitude; uint16_t voltage; uint8_t batPct; int8_t batCurrent; uint32_t relative_time; uint8_t hardVer; uint8_t softVer; uint32_t L; uint32_t d; uint8_t chargePct; } rf_app_data_t; typedef struct // size = 11 { uint8_t posState; uint32_t longitude; uint32_t latitude; uint8_t source; uint8_t charging; } rf_charge_match_t; typedef struct // size = 43 { char frame_header[4]; // LNGC for master; TANK for slave. char tank_psn[13]; uint8_t send_mod; // 0x00 for normal; 0x5A for quick. unsigned level_conn : 1;// 0-Á¬½Ó£¬1-δÁ¬½Ó unsigned tempr_conn : 1;// 0-Á¬½Ó£¬1-δÁ¬½Ó unsigned press_conn : 1;// 0-Á¬½Ó£¬1-δÁ¬½Ó unsigned vacuu_conn : 1;// 0-Á¬½Ó£¬1-δÁ¬½Ó unsigned level_fault : 1;// 0-Õý³££¬1-¹ÊÕÏ unsigned tempr_fault : 1;// 0-Õý³££¬1-¹ÊÕÏ unsigned press_fault : 1;// 0-Õý³££¬1-¹ÊÕÏ unsigned vacuu_fault : 1;// 0-Õý³££¬1-¹ÊÕÏ float liquid_level; // mmWC float temp; // ¡æ float pressure; // MPa float vacuum; // Pa uint32_t volume; // L uint16_t volumePct; // % uint16_t crc; // Modbus-rtu crc } rf_lng_lora_t; #pragma pack(pop) // ¶àÏîʽΪx16+x15+x2+1£¬LSB˳Ðò // ͬibuttonµÄcrcËã·¨£¬²»Í¬ÓÚmodbusµÄcrcËã·¨ uint16_t rf_crc_16(uint8_t *message, int16_t len); // ¼ÆËã×ÔÆô¶¯ÒÔÀ´¾­¹ýµÄÃëÊý //uint32_t rf_get_seconds(); void LNG_LORA_Task(void *p_arg); void rf_set_gateway(uint8_t PSN[6]); #endif