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 // Define if you want to get a callback RF send 00051 // #define PKT_CALLBACK_ON_SEND 00052 // if you define it, you'll need to include this routine in your code: 00053 // void pkt_sendcallback(uns16 dest_addr, uns16 pkt_id) { 00054 // } 00055 00056 00057 // define one or other of these: 00058 #define PKT_USE_2401A 00059 //#define PKT_USE_24L01 00060 00061 // define if you want debug 00062 //#define PKT_DEBUG 00063 00064 // define if you want high amounts of debug 00065 //#define PKT_DEBUG_HIGH 00066 00067 00068 00069 00070 */ 00071 00072 00073 00074 #ifndef __pic_packet_h 00075 #define __pic_packet_h 00076 00077 #include "pic_utils.h" 00078 #include "pic_serial.h" 00079 #include "pic_tick.h" 00080 #include "pic_serial.h" 00081 #include "pic_tick.h" 00082 00083 #include "config.h" 00084 00085 #include <memory.h> 00086 00087 // Status results 00089 #define PKT_STATUS_SEEN_BEFORE 1 00090 00092 #define PKT_STATUS_I_AM_SENDER 2 00093 00095 #define PKT_STATUS_PKT_IS_FOR_ME 3 00096 00098 #define PKT_STATUS_PKT_IS_ACK_FOR_ME 4 00099 00101 #define PKT_STATUS_PKT_IS_FACK_FOR_ME 5 00102 00104 #define PKT_STATUS_DIRECT_SEND 6 00105 00107 #define PKT_STATUS_PREVIOUS_ROUTED_VIA_ME 7 00108 00110 #define PKT_STATUS_ROUTING_FULL 8 00111 00113 #define PKT_STATUS_NEED_TO_REBROADCAST 9 00114 00116 #define PKT_STATUS_QUEUED 10 00117 00119 #define PKT_STATUS_TX_QUEUE_FULL 11 00120 00122 #define PKT_STATUS_CHECK_FAIL 12 00123 00125 #define PKT_STATUS_PKT_FOR_ME_BUT_SEEN 13 00126 00127 // flags 00128 00130 #define PKT_FLAG_NO_RESEND 0 00131 00133 #define PKT_FLAG_RESEND 1 00134 00136 #define PKT_FLAG_BROADCAST 2 00137 00138 00140 #define PKT_CONFIG_ADDR 0xfffd 00141 00143 #define PKT_BROADCAST_ADDR 0xfffe 00144 00146 #define PKT_DIRECT_SEND_ADDR 0xffff 00147 00148 #ifdef PKT_USE_24L01 00149 #include "pic_rf_24l01.h" 00150 #else 00151 #include "pic_rf_2401a.h" 00152 #endif 00153 00154 #ifdef PKT_DEBUG_HIGH 00155 #ifndef PKT_DEBUG 00156 #define PKT_DEBUG 00157 #endif 00158 #endif 00159 00161 typedef struct _rf_packet_det { // 21 bytes 00162 uns16 source_addr; 00163 uns16 pkt_id; 00164 uns16 dest_addr; 00165 uns16 r1_addr; 00166 uns16 r2_addr; 00167 uns16 r3_addr; 00168 uns8 payload[PKT_PAYLOAD_SIZE]; 00169 uns8 check_byte; 00170 } rf_packet_det; 00171 00172 00173 #define PKT_PACKET_SIZE sizeof(rf_packet_det) 00174 00175 #define RF_RX_BUFFER_SIZE PKT_PACKET_SIZE 00176 00189 void pkt_init(uns16 my_addr, uns16 last_sent_pkt_id); 00190 00191 00203 uns8 pkt_process_rf_data(uns8* data_in); 00213 void pkt_process_tx_queue(); 00214 00231 uns8 pkt_send_payload(uns16 dest_addr, uns8 *payload, uns8 resend); 00232 00245 void pkt_payload_rx_callback(uns16 source_addr, uns16 pkt_id, uns8 *payload); 00246 00247 00248 void pkt_send_failed_callback(uns16 dest_addr, uns16 pkt_id); 00249 void pkt_send_succeeded_callback(uns16 dest_addr, uns16 pkt_id); 00250 void pkt_send_callback(uns16 dest_addr, uns16 pkt_id); 00251 00252 00253 #endif