00001 00016 // You'll need to define this routine in your own code: 00017 00018 /* 00019 void pkt_payload_rx_callback(uns16 source_addr, uns16 pkt_id, uns8 *payload) {} 00020 */ 00021 00022 // This will get called when a packet is received 00023 00024 // Put this in your config.h: 00025 00026 /* 00027 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 00028 // pic_packet defines 00029 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 00030 00031 #define PKT_TX_QUEUE_SIZE 5 00032 #define PKT_SEEN_LIST_SIZE 5 00033 #define PKT_SEND_MAX_TRIES 10 00034 #define PKT_RESEND_TICK_DELAY 500 00035 00036 #define PKT_PAYLOAD_SIZE 8 00037 00038 // Define if you want to get a callback on send failure 00039 // #define PKT_CALLBACK_ON_SEND_FAILED 00040 // if you define it, you'll need to include this routine in your code: 00041 // void pkt_send_failed_callback(uns16 dest_addr, uns16 pkt_id) { 00042 // } 00043 00044 // Define if you want to get a callback on send success 00045 // #define PKT_CALLBACK_ON_SEND_SUCCEEDED 00046 // if you define it, you'll need to include this routine in your code: 00047 // void pkt_send_succeeded_callback(uns16 dest_addr, uns16 pkt_id) { 00048 // } 00049 00050 00051 // define one or other of these: 00052 #define PKT_USE_2401A 00053 //#define PKT_USE_24L01 00054 00055 // define if you want debug 00056 //#define PKT_DEBUG 00057 00058 // define if you want high amounts of debug 00059 //#define PKT_DEBUG_HIGH 00060 00061 00062 00063 00064 */ 00065 00066 00067 00068 #ifndef __pic_packet_h 00069 #define __pic_packet_h 00070 00071 #include "pic_utils.h" 00072 #include "pic_serial.h" 00073 #include "pic_tick.h" 00074 #include "pic_serial.h" 00075 #include "pic_tick.h" 00076 00077 #include "config.h" 00078 00079 #include <memory.h> 00080 00081 // Status results 00083 #define PKT_STATUS_SEEN_BEFORE 1 00084 00086 #define PKT_STATUS_I_AM_SENDER 2 00087 00089 #define PKT_STATUS_PKT_IS_FOR_ME 3 00090 00092 #define PKT_STATUS_PKT_IS_ACK_FOR_ME 4 00093 00095 #define PKT_STATUS_PKT_IS_FACK_FOR_ME 5 00096 00098 #define PKT_STATUS_DIRECT_SEND 6 00099 00101 #define PKT_STATUS_PREVIOUS_ROUTED_VIA_ME 7 00102 00104 #define PKT_STATUS_ROUTING_FULL 8 00105 00107 #define PKT_STATUS_NEED_TO_REBROADCAST 9 00108 00110 #define PKT_STATUS_QUEUED 10 00111 00113 #define PKT_STATUS_TX_QUEUE_FULL 11 00114 00116 #define PKT_STATUS_CHECK_FAIL 12 00117 00118 // flags 00119 00121 #define PKT_FLAG_NO_RESEND 0 00122 00124 #define PKT_FLAG_RESEND 1 00125 00126 00127 00129 #define PKT_CONFIG_ADDR 0xfffe 00130 00132 #define PKT_BROADCAST_ADDR 0xffff 00133 00135 #define PKT_DIRECT_SEND_ADDR 0xffff 00136 00137 #ifdef PKT_USE_24L01 00138 #include "pic_rf_24l01.h" 00139 #else 00140 #include "pic_rf_2401a.h" 00141 #endif 00142 00143 #ifdef PKT_DEBUG_HIGH 00144 #ifndef PKT_DEBUG 00145 #define PKT_DEBUG 00146 #endif 00147 #endif 00148 00150 typedef struct _rf_packet_det { // 21 bytes 00151 uns16 source_addr; 00152 uns16 pkt_id; 00153 uns16 dest_addr; 00154 uns16 r1_addr; 00155 uns16 r2_addr; 00156 uns16 r3_addr; 00157 uns8 payload[PKT_PAYLOAD_SIZE]; 00158 uns8 check_byte; 00159 } rf_packet_det; 00160 00161 00162 #define PKT_PACKET_SIZE sizeof(rf_packet_det) 00163 00164 #define RF_RX_BUFFER_SIZE PKT_PACKET_SIZE 00165 00178 void pkt_init(uns16 my_addr, uns16 last_sent_pkt_id); 00179 00180 00192 uns8 pkt_process_rf_data(uns8* data_in); 00202 void pkt_process_tx_queue(); 00203 00220 uns8 pkt_send_payload(uns16 dest_addr, uns8 *payload, uns8 resend); 00221 00234 void pkt_payload_rx_callback(uns16 source_addr, uns16 pkt_id, uns8 *payload); 00235 00236 00237 void pkt_send_failed_callback(uns16 dest_addr, uns16 pkt_id); 00238 void pkt_send_succeeded_callback(uns16 dest_addr, uns16 pkt_id); 00239 00240 00241 #endif