00001
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
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
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
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 {
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