OSDN Git Service

a8943aee020558e001870c5dcb89079eef63de4f
[nxt-jsp/lejos_nxj.git] / nxtOSEK / lejos_nxj / src / nxtvm / platform / nxt / sensors.c
1 #include "platform_config.h"
2
3 #include "types.h"
4 #include "stack.h"
5 #include "threads.h"
6 #include "classes.h"
7 #include "language.h"
8 #include "sensors.h"
9 #include "poll.h"
10 #include "at91sam7s256.h"
11 #include "nxt_avr.h"
12
13 extern int verbose;
14
15 sensor_t sensors[N_SENSORS] = {
16   {0, 0, 0, 0, 0},
17   {0, 0, 0, 0, 0},
18   {0, 0, 0, 0, 0},
19   {0, 0, 0, 0, 0}
20 };
21
22 void
23 init_sensors(void)
24 {
25   int i;
26
27   for (i = 0; i < N_SENSORS; i++) {
28     unset_digi0(i);
29     unset_digi1(i);
30     nxt_avr_set_input_power(i, 0);
31   }
32 }
33
34 /**
35  * Read sensor values
36  */
37 void
38 poll_sensors(void)
39 {
40   byte i;
41   sensor_t *pSensor = sensors;
42
43   for (i = 0; i < N_SENSORS; i++, pSensor++) {
44     pSensor->value = sensor_adc(i);
45   }
46 }
47
48 void
49 read_buttons(int dummy, short *output)
50 {
51   *output = (short) buttons_get();
52 }
53
54
55 void
56 check_for_data(char *valid, char **nextbyte)
57 {
58   *valid = 0;
59 }
60
61 void
62 set_digi0(int sensor)
63 {
64   /* Enable output on the pin */
65
66   int functions[] = { AT91C_PIO_PA23, AT91C_PIO_PA28,
67     AT91C_PIO_PA29, AT91C_PIO_PA30
68   };
69
70   *AT91C_PIOA_PER |= functions[sensor];
71
72   *AT91C_PIOA_OER |= functions[sensor];
73
74   /* Set high */
75
76   *AT91C_PIOA_SODR |= functions[sensor];
77
78 }
79
80 void
81 unset_digi0(int sensor)
82 {
83   /* Enable output on the pin */
84
85   int functions[] = { AT91C_PIO_PA23, AT91C_PIO_PA28,
86     AT91C_PIO_PA29, AT91C_PIO_PA30
87   };
88
89   *AT91C_PIOA_PER |= functions[sensor];
90
91   *AT91C_PIOA_OER |= functions[sensor];
92
93   /* Set low */
94
95   *AT91C_PIOA_CODR |= functions[sensor];
96
97 }
98
99 void
100 set_digi1(int sensor)
101 {
102   /* Enable output on the pin */
103
104   int functions[] = { AT91C_PIO_PA18, AT91C_PIO_PA19,
105     AT91C_PIO_PA20, AT91C_PIO_PA2
106   };
107
108   *AT91C_PIOA_PER |= functions[sensor];
109
110   *AT91C_PIOA_OER |= functions[sensor];
111
112   /* Set high */
113
114   *AT91C_PIOA_SODR |= functions[sensor];
115
116 }
117
118 void
119 unset_digi1(int sensor)
120 {
121   /* Enable output on the pin */
122
123   int functions[] = { AT91C_PIO_PA18, AT91C_PIO_PA19,
124     AT91C_PIO_PA20, AT91C_PIO_PA2
125   };
126
127   *AT91C_PIOA_PER |= functions[sensor];
128
129   *AT91C_PIOA_OER |= functions[sensor];
130
131   /* Set low */
132
133   *AT91C_PIOA_CODR |= functions[sensor];
134
135 }