Statistics
| Branch: | Tag: | Revision:

amiro-os / modules / LightRing_1-0 / module.h @ 5b0a8e7b

History | View | Annotate | Download (9.17 KB)

1
/*
2
AMiRo-OS is an operating system designed for the Autonomous Mini Robot (AMiRo) platform.
3
Copyright (C) 2016..2018  Thomas Schöpping et al.
4

5
This program is free software: you can redistribute it and/or modify
6
it under the terms of the GNU General Public License as published by
7
the Free Software Foundation, either version 3 of the License, or
8
(at your option) any later version.
9

10
This program is distributed in the hope that it will be useful,
11
but WITHOUT ANY WARRANTY; without even the implied warranty of
12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
GNU General Public License for more details.
14

15
You should have received a copy of the GNU General Public License
16
along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
*/
18

    
19
#ifndef _AMIROOS_MODULE_H_
20
#define _AMIROOS_MODULE_H_
21

    
22
/*===========================================================================*/
23
/**
24
 * @name Module specific functions
25
 * @{
26
 */
27
/*===========================================================================*/
28

    
29
/** @} */
30

    
31
/*===========================================================================*/
32
/**
33
 * @name ChibiOS/HAL configuration
34
 * @{
35
 */
36
/*===========================================================================*/
37
#include <hal.h>
38

    
39
/**
40
 * @brief   CAN driver to use.
41
 */
42
#define MODULE_HAL_CAN                          CAND1
43

    
44
/**
45
 * @brief   Configuration for the CAN driver.
46
 */
47
extern CANConfig moduleHalCanConfig;
48

    
49
/**
50
 * @brief   Interrupt driver to use.
51
 */
52
#define MODULE_HAL_EXT                          EXTD1
53

    
54
/**
55
 * @brief   Interrupt driver configuration.
56
 */
57
extern EXTConfig moduleHalExtConfig;
58

    
59
/**
60
 * @brief   I2C driver to access the EEPROM.
61
 */
62
#define MODULE_HAL_I2C_EEPROM                   I2CD2
63

    
64
/**
65
 * @brief   Configuration for the EEPROM I2C driver.
66
 */
67
extern I2CConfig moduleHalI2cEepromConfig;
68

    
69
/**
70
 * @brief   Serial driver of the programmer interface.
71
 */
72
#define MODULE_HAL_PROGIF                       SD1
73

    
74
/**
75
 * @brief   Configuration for the programmer serial interface driver.
76
 */
77
extern SerialConfig moduleHalProgIfConfig;
78

    
79
/**
80
 * @brief   SPI interface driver for the motion sensors (gyroscope and accelerometer).
81
 */
82
#define MODULE_HAL_SPI_LIGHT                    SPID1
83

    
84
/**
85
 * @brief   Configuration for the SPI interface driver to communicate with the LED driver.
86
 */
87
extern SPIConfig moduleHalSpiLightConfig;
88

    
89
/** @} */
90

    
91
/*===========================================================================*/
92
/**
93
 * @name GPIO definitions
94
 * @{
95
 */
96
/*===========================================================================*/
97
#include <amiro-lld.h>
98

    
99
/**
100
 * @brief   Interrupt channel for the SYS_SYNC signal.
101
 */
102
#define MODULE_GPIO_EXTCHANNEL_SYSSYNC          ((expchannel_t)2)
103

    
104
/**
105
 * @brief   Interrupt channel for the LASER_OC signal.
106
 */
107
#define MODULE_GPIO_EXTCHANNEL_LASEROC          ((expchannel_t)5)
108

    
109
/**
110
 * @brief   Interrupt channel for the SYS_UART_DN signal.
111
 */
112
#define MODULE_GPIO_EXTCHANNEL_SYSUARTDN        ((expchannel_t)6)
113

    
114
/**
115
 * @brief   Interrupt channel for the WL_GDO2 signal.
116
 */
117
#define MODULE_GPIO_EXTCHANNEL_WLGDO2           ((expchannel_t)8)
118

    
119
/**
120
 * @brief   Interrupt channel for the WL_GDO0 signal.
121
 */
122
#define MODULE_GPIO_EXTCHANNEL_WLGDO0           ((expchannel_t)9)
123

    
124
/**
125
 * @brief   Interrupt channel for the SYS_PD signal.
126
 */
127
#define MODULE_GPIO_EXTCHANNEL_SYSPD            ((expchannel_t)14)
128

    
129
/**
130
 * @brief   LIGHT_BANK output signal GPIO.
131
 */
132
extern apalGpio_t moduleGpioLightBlank;
133

    
134
/**
135
 * @brief   LASER_EN output signal GPIO.
136
 */
137
extern apalGpio_t moduleGpioLaserEn;
138

    
139
/**
140
 * @brief   LASER_OC input signal GPIO.
141
 */
142
extern apalGpio_t moduleGpioLaserOc;
143

    
144
/**
145
 * @brief   SYS_UART_DN bidirectional signal GPIO.
146
 */
147
extern apalGpio_t moduleGpioSysUartDn;
148

    
149
/**
150
 * @brief   WL_GDO2 input signal GPIO.
151
 */
152
extern apalGpio_t moduleGpioWlGdo2;
153

    
154
/**
155
 * @brief   WL_GDO0 input signal GPIO.
156
 */
157
extern apalGpio_t moduleGpioWlGdo0;
158

    
159
/**
160
 * @brief   LIGHT_XLAT output signal GPIO.
161
 */
162
extern apalGpio_t moduleGpioLightXlat;
163

    
164
/**
165
 * @brief   SYS_PD bidirectional signal GPIO.
166
 */
167
extern apalGpio_t moduleGpioSysPd;
168

    
169
/**
170
 * @brief   SYS_SYNC bidirectional signal GPIO.
171
 */
172
extern apalGpio_t moduleGpioSysSync;
173

    
174
/** @} */
175

    
176
/*===========================================================================*/
177
/**
178
 * @name AMiRo-OS core configurations
179
 * @{
180
 */
181
/*===========================================================================*/
182

    
183
/**
184
 * @brief   Event flag to be set on a LASER_OC interrupt.
185
 */
186
#define MODULE_OS_IOEVENTFLAGS_LASEROC          ((eventflags_t)(1 << MODULE_GPIO_EXTCHANNEL_LASEROC))
187

    
188
/**
189
 * @brief   Event flag to be set on a SYS_UART_DN interrupt.
190
 */
191
#define MODULE_OS_IOEVENTFLAGS_SYSUARTDN        ((eventflags_t)(1 << MODULE_GPIO_EXTCHANNEL_SYSUARTDN))
192

    
193
/**
194
 * @brief   Event flag to be set on a WL_GDO2 interrupt.
195
 */
196
#define MODULE_OS_IOEVENTFLAGS_WLGDO2           ((eventflags_t)(1 << MODULE_GPIO_EXTCHANNEL_WLGDO2))
197

    
198
/**
199
 * @brief   Event flag to be set on a WL_GDO0 interrupt.
200
 */
201
#define MODULE_OS_IOEVENTFLAGS_WLGDO0           ((eventflags_t)(1 << MODULE_GPIO_EXTCHANNEL_WLGDO0))
202

    
203
/**
204
 * @brief   Event flag to be set on a SYS_PD interrupt.
205
 */
206
#define MODULE_OS_IOEVENTFLAGS_SYSPD            ((eventflags_t)(1 << MODULE_GPIO_EXTCHANNEL_SYSPD))
207

    
208
/**
209
 * @brief   Event flag to be set on a SYS_SYNC interrupt.
210
 */
211
#define MODULE_OS_IOEVENTFLAGS_SYSSYNC          ((eventflags_t)(1 << MODULE_GPIO_EXTCHANNEL_SYSSYNC))
212

    
213
/**
214
 * @brief   PD signal for SSSP.
215
 */
216
extern apalControlGpio_t moduleSsspPd;
217

    
218
/**
219
 * @brief   SYNC signal for SSSP.
220
 */
221
extern apalControlGpio_t moduleSsspSync;
222

    
223
/**
224
 * @brief   Shell prompt text.
225
 */
226
extern const char* moduleShellPrompt;
227

    
228
/**
229
 * @brief   Unit test initialization hook.
230
 */
231
#define MODULE_INIT_TESTS() {                                                 \
232
  /* add unit-test shell commands */                                          \
233
  aosShellAddCommand(aos.shell, &moduleUtAlldAt24c01bn.shellcmd);             \
234
  aosShellAddCommand(aos.shell, &moduleUtAlldTlc5947.shellcmd);               \
235
  aosShellAddCommand(aos.shell, &moduleUtAlldTps2051bdbv.shellcmd);           \
236
}
237

    
238
/**
239
 * @brief   Periphery communication interfaces initialization hook.
240
 */
241
#define MODULE_INIT_PERIPHERY_COMM() {                                        \
242
  /* serial driver */                                                         \
243
  sdStart(&MODULE_HAL_PROGIF, &moduleHalProgIfConfig);                        \
244
  /* I2C */                                                                   \
245
  moduleHalI2cEepromConfig.clock_speed = (AT24C01BN_LLD_I2C_MAXFREQUENCY < moduleHalI2cEepromConfig.clock_speed) ? AT24C01BN_LLD_I2C_MAXFREQUENCY : moduleHalI2cEepromConfig.clock_speed; \
246
  moduleHalI2cEepromConfig.duty_cycle = (moduleHalI2cEepromConfig.clock_speed <= 100000) ? STD_DUTY_CYCLE : FAST_DUTY_CYCLE_2;  \
247
  i2cStart(&MODULE_HAL_I2C_EEPROM, &moduleHalI2cEepromConfig);                \
248
  /* SPI */                                                                   \
249
  spiStart(&MODULE_HAL_SPI_LIGHT, &moduleHalSpiLightConfig);                  \
250
}
251

    
252
/**
253
 * @brief   Hook to handle IO events during SSSP startup synchronization.
254
 */
255
#define MODULE_SSP_STARTUP_OUTRO_IO_EVENT(mask, flags) {                      \
256
  /* ignore all events */                                                     \
257
  (void)mask;                                                                 \
258
  (void)flags;                                                                \
259
}
260

    
261
/**
262
 * @brief   Periphery communication interface deinitialization hook.
263
 */
264
#define MODULE_SHUTDOWN_PERIPHERY_COMM() {                                    \
265
  /* SPI */                                                                   \
266
  spiStop(&MODULE_HAL_SPI_LIGHT);                                             \
267
  /* I2C */                                                                   \
268
  i2cStop(&MODULE_HAL_I2C_EEPROM);                                            \
269
  /* don't stop the serial driver so messages can still be printed */         \
270
}
271

    
272
/** @} */
273

    
274
/*===========================================================================*/
275
/**
276
 * @name Low-level drivers
277
 * @{
278
 */
279
/*===========================================================================*/
280
#include <alld_at24c01bn-sh-b.h>
281
#include <alld_tlc5947.h>
282
#include <alld_tps2051bdbv.h>
283

    
284
/**
285
 * @brief   EEPROM driver.
286
 */
287
extern AT24C01BNDriver moduleLldEeprom;
288

    
289
/**
290
 * @brief   LED PWM driver.
291
 */
292
extern TLC5947Driver moduleLldLedPwm;
293

    
294
/**
295
 * @brief   Power switch driver for the laser supply power.
296
 */
297
extern TPS2051BDriver moduleLldPowerSwitchLaser;
298

    
299
/** @} */
300

    
301
/*===========================================================================*/
302
/**
303
 * @name Unit tests (UT)
304
 * @{
305
 */
306
/*===========================================================================*/
307
#if (AMIROOS_CFG_TESTS_ENABLE == true) || defined(__DOXYGEN__)
308
#include <ut_alld_at24c01bn-sh-b.h>
309
#include <ut_alld_tlc5947.h>
310
#include <ut_alld_tps2051bdbv.h>
311

    
312
/**
313
 * @brief   EEPROM unit test object.
314
 */
315
extern aos_unittest_t moduleUtAlldAt24c01bn;
316

    
317
/**
318
 * @brief   LED PWM driver unit test object.
319
 */
320
extern aos_unittest_t moduleUtAlldTlc5947;
321

    
322
/**
323
 * @brief   Current-limited power switch (Laser output)
324
 */
325
extern aos_unittest_t moduleUtAlldTps2051bdbv;
326

    
327
#endif /* AMIROOS_CFG_TESTS_ENABLE == true */
328

    
329
/** @} */
330

    
331
#endif /* _AMIROOS_MODULE_H_ */