00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00041
00042
00043 #ifndef its_mode2_h
00044 #define its_mode2_h
00045
00046 #include "pic_utils.h"
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068 #define POS_KEY1 0x00
00069 #define POS_KEY2 0x01
00070 #define POS_LENGTH_HEADER 0x02
00071 #define POS_PKT_TYPE 0x03
00072 #define POS_SEQUENCE 0x04
00073 #define POS_NETWORK_L 0x05
00074 #define POS_NETWORK_H 0x06
00075 #define POS_SOURCE_L 0x07
00076 #define POS_SOURCE_H 0x08
00077 #define POS_DEST_L 0x09
00078 #define POS_DEST_H 0x0a
00079 #define POS_MAX_HOP_COUNT 0x0b
00080 #define POS_NUM_ROUTES 0x0c
00081 #define POS_HOP_COUNT 0x0d
00082 #define POS_ROUTE_START 0x0e
00083
00084
00085 #define QS_WAITING_ON_LOCAL_ADDR 0x00
00086 #define QS_WAITING_ON_NETWORK_ADDR 0x01
00087 #define QS_READY_TO_SEND 0x02
00088 #define QS_WAITING_ON_ACK 0x03
00089 #define QS_ACK_RECEIVED 0x04
00090 #define QS_SENT 0x05
00091 #define QS_ROUTING_FAILED 0x06
00092
00093
00094 #define REMOTE_DEVICE 0xffff
00095
00096 #define ITS2_TX_STATUS_SUCCESS 0x00
00097 #define ITS2_TX_STATUS_NO_ROUTE 0x01
00098 #define ITS2_TX_STATUS_NO_ACK 0x02
00099 #define ITS2_TX_STATUS_REMOTE_NO_ACK 0x03
00100 #define ITS2_TX_STATUS_NEXT_HOP_UNKNOWN 0x04
00101
00102
00103 #define ITS2_UPDATE_ROUTE_SUCCESS 0x00
00104 #define ITS2_UPDATE_ROUTE_FAIL 0x01
00105
00106
00107 #define ITS2_STATUS_QUEUED 0x00
00108 #define ITS2_STATUS_TX_QUEUE_FULL 0x01
00109 #define ITS2_NO_AVAILABLE_SLOTS 0xff
00110
00111
00112 #define ITS2_FLAG_ACK 0x01
00113 #define ITS2_FLAG_NO_ACK 0x02
00114 #define ITS2_FLAG_DELETED 0xff
00115
00116
00117 extern bit debug_module;
00118
00120 typedef struct _its2_packet {
00121 uns8 packet_type;
00122 uns8 sequence;
00123 uns16 its_network_id;
00124 uns16 its_source_id;
00125 uns16 its_dest_id;
00126 uns8 max_hop_count;
00127 uns8 num_routes;
00128 uns8 hop_count;
00129 uns16 routers[ITS2_MAX_HOP_COUNT];
00130 } its2_packet;
00131
00132 typedef struct _queued_item {
00133 its2_packet packet;
00134 uns8 *data;
00135 uns8 data_length;
00136 uns16 dest_its_device_id;
00137 uns8 dest_device_handle;
00138 uns16 tick_sent;
00139 uns8 sent_count;
00140 uns8 status;
00141 uns8 flag;
00142 } queued_item;
00143
00144 typedef struct _seen_packet {
00145 uns8 sequence;
00146 uns16 its_source_id;
00147 } seen_packet;
00148
00149
00150 enum _its2_result { RESULT_SUCCESSFUL, RESULT_FAILED, ITEM_QUEUED, QUEUE_FULL,
00151 ROUTING_TOO_MANY_HOPS, NEXT_HOP_NOT_LOCAL };
00152 typedef enum _its2_result its2_result;
00153
00154 enum _its2_state {
00155 STATE_STARTUP,
00156 STATE_RUNNING,
00157 STATE_SEARCHING,
00158 STATE_ASSOCIATED,
00159 STATE_UNASSOCIATED,
00160 };
00161
00162 typedef enum _its2_state its2_state;
00163
00164 extern its2_state state;
00165
00166
00167
00168 void its2_setup_io();
00169 its2_result its2_find_coordinator();
00170
00171
00172
00173
00174 uns8 its2_router_init(uns16 my_device_id, uns16 network_id);
00175 void its2_transmit_status_callback(its2_packet *pkt, uns8 status);
00176 void its2_router_receive_callback(uns16 device_id, uns8 *data, uns8 data_length);
00177 its2_result its2_router_queue_packet(uns16 device_id, uns8 packet_type, uns8 *data, uns8 data_length, uns8 ack);
00178
00179 void its2_router_process();
00180
00181
00182
00183 void its2_process_tx_queue();
00184 void its2_request_local_addr(uns16 device_id);
00185 void its2_respond_local_addr(uns16 device_id);
00186 void its2_request_net_addr(uns16 device_id);
00187 void its2_respond_net_addr(uns16 device_id);
00188 its2_result its2_rebroadcast_net_discover_req(its2_packet *pkt);
00189 its2_result its2_forward_routed_packet(its2_packet *pkt, uns8 *data, uns8 data_length);
00190 void its2_print_queue();
00191 void its2_delete_item_from_queue(queued_item *item);
00192 void its2_print_packet(its2_packet *pkt);
00193
00194
00195 its2_result its2_router_handle_association(uns16 pan_id, uns16 its_device_id);
00196 void its2_transmit(queued_item *item);
00197
00198
00199
00200 its2_result its2_device_init(uns16 my_device_id, uns16 network_id);
00201 void its2_device_receive_callback(uns8 *data, uns8 data_length);
00202 its2_result its2_device_transmit(uns16 device_id, uns8 *data, uns8 data_length);
00203 void its2_device_process();
00204
00205 #endif