20 #define NEIGHBOR_PERIOD_DEFAULT 330
21 #define NEIGHBOR_TIMEOUT_ROUNDS 4
22 #define OBSTACLE_TIMEOUT_ROUNDS 2
23 #define NEIGHBOR_MAX 10
33 #define NEIGHBOR_XMIT_MIN_DELAY 50
35 #define ROBOT_ID_NULL 0
36 #define ROBOT_ID_MIN 1
37 #define ROBOT_ID_MAX 80
38 #define ROBOT_ID_ALL 0xFF
40 #define MAX_PARENT_ID 0x7F
43 #define NBR_RADIO_MESSAGES_MAX 16
44 #define NBR_RADIO_MESSAGES_SENDER_ID_IDX 0
45 #define NBR_RADIO_MESSAGES_LENGTH_IDX 1
46 #define NBR_RADIO_MESSAGES_DATA_IDX 2
47 #define NBR_RADIO_MESSAGE_DATA_LENGTH (RADIO_COMMAND_MESSAGE_DATA_LENGTH - NBR_RADIO_MESSAGES_DATA_IDX)
50 #define NBR_DATA_IR_IDX_MAX 7
51 #define NBR_DATA_IR_BITS_MAX (IR_COMMS_MESSAGE_BIT_LENGTH_MAX)
53 #define NBR_DATA_RF_PACKETS_MAX 4
54 #define NBR_DATA_RF_IDX_PER_PACKET NBR_RADIO_MESSAGE_DATA_LENGTH
55 #define NBR_DATA_RF_IDX_MAX (NBR_RADIO_MESSAGE_DATA_LENGTH * NBR_DATA_RF_PACKETS_MAX)
56 #define NBR_DATA_RF_BITS_MAX (NBR_DATA_RF_IDX_MAX * 8)
58 #define NBR_DATA_TYPE_IR 0
59 #define NBR_DATA_TYPE_RF 1
61 #define NBR_ANGLE_HISTORY 3
62 #define NBR_ANGLE_MAX_DELTA_PER_ROUND (MILLIRAD_PI / 4)
88 uint8 data[NBR_RADIO_MESSAGE_DATA_LENGTH];
99 uint8 data[NBR_RADIO_MESSAGE_DATA_LENGTH];
115 int16 bearingHistory[NBR_ANGLE_HISTORY];
116 int16 orientationHistory[NBR_ANGLE_HISTORY];
117 boolean orientationValid;
120 uint8 orientationsBitsMatrix[IR_COMMS_NUM_OF_RECEIVERS];
121 uint8 rangeBits[IR_COMMS_NUM_OF_RECEIVERS];
123 uint8 orientationBits;
126 uint8 messages[NBR_DATA_IR_IDX_MAX];
136 Nbr nbrs[NEIGHBOR_MAX];
139 char message[IR_COMMS_MESSAGE_LENGTH_MAX];
149 Nbr* nbrs[NEIGHBOR_MAX];
159 uint8 orientationsBitsMatrix[IR_COMMS_NUM_OF_RECEIVERS];
160 uint8 rangeBits[IR_COMMS_NUM_OF_RECEIVERS];
177 void neighborsInit(uint32 neighbor_period);
185 void neighborsDisable(
void);
194 void neighborsXmitEnable(
boolean neighbor_xmit_enable_arg);
203 void neighborsSetPeriod(uint32 neighbor_period_arg);
214 void neighborsSetTimeoutRounds(uint8 timeoutRounds, uint8 minActive, uint8 maxInactive);
222 uint32 neighborsGetPeriod(
void);
226 void neighborsAddReceiveCallback(
void(*receiveCallbackArg)(
NbrDatabase* ndPtr));
234 void neighborsGetMutex(
void);
242 void neighborsPutMutex(
void);
250 uint32 neighborsGetRound(
void);
259 boolean neighborsNewRoundCheck(uint32* roundOldPtr);
268 void neighborsIgnore(uint8 neighborID);
275 uint8 irObstaclesGetBits(
void);
283 uint8* irObstaclesGetRangeBits(
void);
291 uint8* irObstaclesGetBitMatrix(
void);
302 int16 irObstaclesGetBearing(
void);
306 int8 irObstaclesGetBearingBitVector(
void);
308 void obstacleExcludeNbrs(
NbrList* nbrListPtr, uint8* obstacleBitsGroupPtr, uint8* obstacleBitsCountPtr, int16* obstacleBearingPtr);
316 void obstaclePrint(
void);
318 uint32 pseudoRandNumGen(uint32 init, uint32 seed);
329 uint8 nbrGetID(
Nbr* nbrPtr);
338 int32 nbrGetBearing(
Nbr* nbrPtr);
347 int32 nbrGetOrientation(
Nbr* nbrPtr);
356 int32 nbrGetRange(
Nbr* nbrPtr);
365 boolean nbrGetOrientationValid(
Nbr* nbrPtr);
375 uint8 nbrGetRangeBits(
Nbr* nbrPtr);
386 uint8 nbrGetReceiverBits(
Nbr* nbrPtr);
397 uint8 nbrGetTransmitterBits(
Nbr* nbrPtr);
406 uint32 nbrGetUpdateTime(
Nbr* nbrPtr);
415 uint32 nbrGetUpdateRound(
Nbr* nbrPtr);
427 void nbrPrint(
Nbr* nbr);
441 void nbrPrintData(
Nbr* nbr, uint32 round);
450 boolean nbrIsRobot(
Nbr* nbrPtr);
459 boolean nbrIsBeacon(
Nbr* nbrPtr);
463 boolean nbrIsCharger(
Nbr* nbrPtr);
516 Nbr* nbrsGetWithID(uint8 nbrID);