Revision 1991
Updated some random number generators to have more entropy.
trunk/code/projects/traffic_navigation/validTurns.c | ||
---|---|---|
22 | 22 |
#define SHIFT(s)( (s)<<1) |
23 | 23 |
#define RESEED(s)( (s)=( ( ((GET16(s)^GET14(s))^GET13(s))^GET11(s) ) | SHIFT(s) ) )/*reseeding the first bit of the number with bits from the number*/ |
24 | 24 |
|
25 |
unsigned int seed = 0xC0DE; |
|
26 |
int randomNumGen(int max){ |
|
27 |
//int a = 0; // not currently in use |
|
28 |
//int b = 0xBEEF; |
|
29 |
seed++; |
|
30 |
return seed%4; |
|
25 |
unsigned int turnseed = 0xC0DE; |
|
26 |
int resolvRandomNumberGen(int max){ |
|
27 |
turnseed *= (rtc_get() + encoder_read(LEFT))%9; |
|
28 |
return turnseed % max; |
|
31 | 29 |
} |
32 | 30 |
|
33 | 31 |
/* |
34 |
int randomNumGen(int max){ |
|
35 |
return rtc_get() % max; |
|
36 |
} |
|
37 |
int randomNumGen(int max){ |
|
38 |
int a = 1337; |
|
39 |
int b = 0xDEADBEEF; |
|
40 |
seed++; |
|
41 |
return seed%max; |
|
42 |
} |
|
43 |
*/ |
|
44 |
|
|
45 |
/* |
|
46 | 32 |
int getIntersectType(int barcode) |
47 | 33 |
{ |
48 | 34 |
return randomNumGen(5); |
... | ... | |
54 | 40 |
} |
55 | 41 |
*/ |
56 | 42 |
|
57 |
int getTurnType(int barcode)
|
|
43 |
char getTurnType(char barcode)
|
|
58 | 44 |
{ |
59 | 45 |
return randomNumGen(4); |
60 | 46 |
} |
trunk/code/projects/traffic_navigation/main-new.c | ||
---|---|---|
9 | 9 |
|
10 | 10 |
#include "traffic_navigation.h" |
11 | 11 |
#include "../linefollowing/lineDrive.h" |
12 |
#define ORB_INTERSECTION |
|
13 |
#define DEBUG_INTERSECTION |
|
12 | 14 |
#ifdef MAIN_NEW |
13 | 15 |
|
14 | 16 |
#ifdef ORB_INTERSECTION |
... | ... | |
50 | 52 |
id = get_robotid(); |
51 | 53 |
sign = 0; |
52 | 54 |
ORB1_DBG_CLR(GREEN); |
53 |
delay_ms(1000);
|
|
55 |
delay_ms(500);
|
|
54 | 56 |
ORB1_DBG_CLR(ORB_OFF); |
55 | 57 |
|
56 | 58 |
//Test code |
... | ... | |
89 | 91 |
default: |
90 | 92 |
//we have a barcode! |
91 | 93 |
state = SINTERSECTION_ENTER; |
94 |
usb_puts("Read Barcode #:"); |
|
95 |
usb_puti(sign); |
|
96 |
usb_putc('\n'); |
|
92 | 97 |
done = true; |
93 | 98 |
break; |
94 | 99 |
|
... | ... | |
117 | 122 |
intersectionNum = getIntersectNum(sign); |
118 | 123 |
if(intersectionNum == (char) -1){ //invalid |
119 | 124 |
state = SROAD; |
125 |
usb_puts("Barcode has invalid intersectionNum\n"); |
|
120 | 126 |
break; |
121 | 127 |
} |
122 | 128 |
turnDir = validateTurn(sign, getTurnType(sign)); |
123 | 129 |
if(turnDir == (char) -1){ //invalid |
124 | 130 |
state = SROAD; |
131 |
usb_puts("Barcode has invalid turn\n"); |
|
125 | 132 |
break; |
126 | 133 |
} |
127 | 134 |
|
... | ... | |
487 | 494 |
} |
488 | 495 |
|
489 | 496 |
unsigned char resolvRandomNumberGen(){ |
490 |
if ((resolvSeed *= (rtc_get())%9) == 0){ |
|
497 |
if ((resolvSeed *= (rtc_get() + encoder_read(LEFT))%9) == 0){
|
|
491 | 498 |
return resolvSeed + 1; //0 is a reseved priority value for the last |
492 | 499 |
//bot that is already in the queue. |
493 | 500 |
} |
Also available in: Unified diff