Statistics
| Branch: | Tag: | Revision:

amiro-os / modules / LightRing_1-0 / module.h @ 6b53f6bf

History | View | Annotate | Download (9.835 KB)

1 e545e620 Thomas Schöpping
/*
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 8399aeae Thomas Schöpping
/**
90
 * @brief   Real-Time Clock driver.
91
 */
92
#define MODULE_HAL_RTC                          RTCD1
93
94 e545e620 Thomas Schöpping
/** @} */
95
96
/*===========================================================================*/
97
/**
98
 * @name GPIO definitions
99
 * @{
100
 */
101
/*===========================================================================*/
102
#include <amiro-lld.h>
103
104
/**
105
 * @brief   Interrupt channel for the SYS_SYNC signal.
106
 */
107
#define MODULE_GPIO_EXTCHANNEL_SYSSYNC          ((expchannel_t)2)
108
109
/**
110
 * @brief   Interrupt channel for the LASER_OC signal.
111
 */
112
#define MODULE_GPIO_EXTCHANNEL_LASEROC          ((expchannel_t)5)
113
114
/**
115
 * @brief   Interrupt channel for the SYS_UART_DN signal.
116
 */
117
#define MODULE_GPIO_EXTCHANNEL_SYSUARTDN        ((expchannel_t)6)
118
119
/**
120
 * @brief   Interrupt channel for the WL_GDO2 signal.
121
 */
122
#define MODULE_GPIO_EXTCHANNEL_WLGDO2           ((expchannel_t)8)
123
124
/**
125
 * @brief   Interrupt channel for the WL_GDO0 signal.
126
 */
127
#define MODULE_GPIO_EXTCHANNEL_WLGDO0           ((expchannel_t)9)
128
129
/**
130
 * @brief   Interrupt channel for the SYS_PD signal.
131
 */
132
#define MODULE_GPIO_EXTCHANNEL_SYSPD            ((expchannel_t)14)
133
134
/**
135
 * @brief   LIGHT_BANK output signal GPIO.
136
 */
137
extern apalGpio_t moduleGpioLightBlank;
138
139
/**
140
 * @brief   LASER_EN output signal GPIO.
141
 */
142
extern apalGpio_t moduleGpioLaserEn;
143
144
/**
145
 * @brief   LASER_OC input signal GPIO.
146
 */
147
extern apalGpio_t moduleGpioLaserOc;
148
149
/**
150
 * @brief   SYS_UART_DN bidirectional signal GPIO.
151
 */
152
extern apalGpio_t moduleGpioSysUartDn;
153
154
/**
155
 * @brief   WL_GDO2 input signal GPIO.
156
 */
157
extern apalGpio_t moduleGpioWlGdo2;
158
159
/**
160
 * @brief   WL_GDO0 input signal GPIO.
161
 */
162
extern apalGpio_t moduleGpioWlGdo0;
163
164
/**
165
 * @brief   LIGHT_XLAT output signal GPIO.
166
 */
167
extern apalGpio_t moduleGpioLightXlat;
168
169
/**
170
 * @brief   SYS_PD bidirectional signal GPIO.
171
 */
172
extern apalGpio_t moduleGpioSysPd;
173
174
/**
175
 * @brief   SYS_SYNC bidirectional signal GPIO.
176
 */
177
extern apalGpio_t moduleGpioSysSync;
178
179
/** @} */
180
181
/*===========================================================================*/
182
/**
183
 * @name AMiRo-OS core configurations
184
 * @{
185
 */
186
/*===========================================================================*/
187
188
/**
189
 * @brief   Event flag to be set on a LASER_OC interrupt.
190
 */
191
#define MODULE_OS_IOEVENTFLAGS_LASEROC          ((eventflags_t)(1 << MODULE_GPIO_EXTCHANNEL_LASEROC))
192
193
/**
194
 * @brief   Event flag to be set on a SYS_UART_DN interrupt.
195
 */
196
#define MODULE_OS_IOEVENTFLAGS_SYSUARTDN        ((eventflags_t)(1 << MODULE_GPIO_EXTCHANNEL_SYSUARTDN))
197
198
/**
199
 * @brief   Event flag to be set on a WL_GDO2 interrupt.
200
 */
201
#define MODULE_OS_IOEVENTFLAGS_WLGDO2           ((eventflags_t)(1 << MODULE_GPIO_EXTCHANNEL_WLGDO2))
202
203
/**
204
 * @brief   Event flag to be set on a WL_GDO0 interrupt.
205
 */
206
#define MODULE_OS_IOEVENTFLAGS_WLGDO0           ((eventflags_t)(1 << MODULE_GPIO_EXTCHANNEL_WLGDO0))
207
208
/**
209
 * @brief   Event flag to be set on a SYS_PD interrupt.
210
 */
211
#define MODULE_OS_IOEVENTFLAGS_SYSPD            ((eventflags_t)(1 << MODULE_GPIO_EXTCHANNEL_SYSPD))
212
213
/**
214
 * @brief   Event flag to be set on a SYS_SYNC interrupt.
215
 */
216
#define MODULE_OS_IOEVENTFLAGS_SYSSYNC          ((eventflags_t)(1 << MODULE_GPIO_EXTCHANNEL_SYSSYNC))
217
218 6b53f6bf Thomas Schöpping
#if (AMIROOS_CFG_SHELL_ENABLE == true) || defined(__DOXYGEN__)
219 e545e620 Thomas Schöpping
/**
220
 * @brief   Shell prompt text.
221
 */
222
extern const char* moduleShellPrompt;
223 6b53f6bf Thomas Schöpping
#endif
224 e545e620 Thomas Schöpping
225
/**
226
 * @brief   Unit test initialization hook.
227
 */
228
#define MODULE_INIT_TESTS() {                                                 \
229
  /* add unit-test shell commands */                                          \
230 6b53f6bf Thomas Schöpping
  aosShellAddCommand(&aos.shell, &moduleUtAlldAt24c01bn.shellcmd);            \
231
  aosShellAddCommand(&aos.shell, &moduleUtAlldTlc5947.shellcmd);              \
232
  aosShellAddCommand(&aos.shell, &moduleUtAlldTps2051bdbv.shellcmd);          \
233 e545e620 Thomas Schöpping
}
234
235
/**
236
 * @brief   Periphery communication interfaces initialization hook.
237
 */
238
#define MODULE_INIT_PERIPHERY_COMM() {                                        \
239
  /* serial driver */                                                         \
240
  sdStart(&MODULE_HAL_PROGIF, &moduleHalProgIfConfig);                        \
241
  /* I2C */                                                                   \
242
  moduleHalI2cEepromConfig.clock_speed = (AT24C01BN_LLD_I2C_MAXFREQUENCY < moduleHalI2cEepromConfig.clock_speed) ? AT24C01BN_LLD_I2C_MAXFREQUENCY : moduleHalI2cEepromConfig.clock_speed; \
243
  moduleHalI2cEepromConfig.duty_cycle = (moduleHalI2cEepromConfig.clock_speed <= 100000) ? STD_DUTY_CYCLE : FAST_DUTY_CYCLE_2;  \
244
  i2cStart(&MODULE_HAL_I2C_EEPROM, &moduleHalI2cEepromConfig);                \
245
  /* SPI */                                                                   \
246
  spiStart(&MODULE_HAL_SPI_LIGHT, &moduleHalSpiLightConfig);                  \
247
}
248
249
/**
250
 * @brief   Periphery communication interface deinitialization hook.
251
 */
252
#define MODULE_SHUTDOWN_PERIPHERY_COMM() {                                    \
253
  /* SPI */                                                                   \
254
  spiStop(&MODULE_HAL_SPI_LIGHT);                                             \
255
  /* I2C */                                                                   \
256
  i2cStop(&MODULE_HAL_I2C_EEPROM);                                            \
257
  /* don't stop the serial driver so messages can still be printed */         \
258
}
259
260
/** @} */
261
262
/*===========================================================================*/
263
/**
264 6b53f6bf Thomas Schöpping
 * @name Startup Shutdown Synchronization Protocol (SSSP)
265
 * @{
266
 */
267
/*===========================================================================*/
268
269
/**
270
 * @brief   PD signal GPIO.
271
 */
272
extern apalControlGpio_t moduleSsspGpioPd;
273
274
/**
275
 * @brief   SYNC signal GPIO.
276
 */
277
extern apalControlGpio_t moduleSsspGpioSync;
278
279
/**
280
 * @brief   Event flags for PD signal events.
281
 */
282
#define MODULE_SSSP_EVENTFLAGS_PD               MODULE_OS_IOEVENTFLAGS_SYSPD
283
284
/**
285
 * @brief   Event flags for Sync signal events.
286
 */
287
#define MODULE_SSSP_EVENTFLAGS_SYNC             MODULE_OS_IOEVENTFLAGS_SYSSYNC
288
289
/**
290
 * @brief   Hook to handle IO events during SSSP startup synchronization.
291
 */
292
#define MODULE_SSSP_STARTUP_OSINIT_OUTRO_IOEVENT_HOOK(mask, flags) {          \
293
  /* ignore all events */                                                     \
294
  (void)mask;                                                                 \
295
  (void)flags;                                                                \
296
}
297
298
/** @} */
299
300
/*===========================================================================*/
301
/**
302 e545e620 Thomas Schöpping
 * @name Low-level drivers
303
 * @{
304
 */
305
/*===========================================================================*/
306
#include <alld_at24c01bn-sh-b.h>
307
#include <alld_tlc5947.h>
308
#include <alld_tps2051bdbv.h>
309
310
/**
311
 * @brief   EEPROM driver.
312
 */
313
extern AT24C01BNDriver moduleLldEeprom;
314
315
/**
316
 * @brief   LED PWM driver.
317
 */
318
extern TLC5947Driver moduleLldLedPwm;
319
320
/**
321
 * @brief   Power switch driver for the laser supply power.
322
 */
323
extern TPS2051BDriver moduleLldPowerSwitchLaser;
324
325
/** @} */
326
327
/*===========================================================================*/
328
/**
329
 * @name Unit tests (UT)
330
 * @{
331
 */
332
/*===========================================================================*/
333
#if (AMIROOS_CFG_TESTS_ENABLE == true) || defined(__DOXYGEN__)
334
#include <ut_alld_at24c01bn-sh-b.h>
335
#include <ut_alld_tlc5947.h>
336
#include <ut_alld_tps2051bdbv.h>
337
338
/**
339
 * @brief   EEPROM unit test object.
340
 */
341
extern aos_unittest_t moduleUtAlldAt24c01bn;
342
343
/**
344
 * @brief   LED PWM driver unit test object.
345
 */
346
extern aos_unittest_t moduleUtAlldTlc5947;
347
348
/**
349
 * @brief   Current-limited power switch (Laser output)
350
 */
351
extern aos_unittest_t moduleUtAlldTps2051bdbv;
352
353
#endif /* AMIROOS_CFG_TESTS_ENABLE == true */
354
355
/** @} */
356
357
#endif /* _AMIROOS_MODULE_H_ */