Statistics
| Branch: | Tag: | Revision:

amiro-os / modules / LightRing_1-2 / module.h @ ee884101

History | View | Annotate | Download (13.227 KB)

1
/*
2
AMiRo-OS is an operating system designed for the Autonomous Mini Robot (AMiRo) platform.
3
Copyright (C) 2016..2019  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
/**
20
 * @file
21
 * @brief   Structures and constant for the LightRing module.
22
 *
23
 * @addtogroup lightring_module
24
 * @{
25
 */
26

    
27
#ifndef AMIROOS_MODULE_H
28
#define AMIROOS_MODULE_H
29

    
30
#include <amiroos.h>
31

    
32
/*===========================================================================*/
33
/**
34
 * @name Module specific functions
35
 * @{
36
 */
37
/*===========================================================================*/
38

    
39
/** @} */
40

    
41
/*===========================================================================*/
42
/**
43
 * @name ChibiOS/HAL configuration
44
 * @{
45
 */
46
/*===========================================================================*/
47

    
48
/**
49
 * @brief   CAN driver to use.
50
 */
51
#define MODULE_HAL_CAN                          CAND1
52

    
53
/**
54
 * @brief   Configuration for the CAN driver.
55
 */
56
extern CANConfig moduleHalCanConfig;
57

    
58
/**
59
 * @brief   I2C driver to access the EEPROM, power monitor and the breakout header.
60
 */
61
#define MODULE_HAL_I2C_EEPROM_PWRMTR_BREAKOUT   I2CD2
62

    
63
/**
64
 * @brief   Configuration for the EEPROM, power monitor and breakout I2C driver.
65
 */
66
extern I2CConfig moduleHalI2cEepromPwrmtrBreakoutConfig;
67

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

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

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

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

    
88
/**
89
 * @brief   SPI interface driver for the breakout header.
90
 */
91
#define MODULE_HAL_SPI_BREAKOUT                 SPID2
92

    
93
/**
94
 * @brief   UART interface driver for the breakout header (alternative to serial).
95
 */
96
#define MODULE_HAL_UART_BREAKOUT                UARTD2
97

    
98
/**
99
 * @brief   Real-Time Clock driver.
100
 */
101
#define MODULE_HAL_RTC                          RTCD1
102

    
103
/** @} */
104

    
105
/*===========================================================================*/
106
/**
107
 * @name GPIO definitions
108
 * @{
109
 */
110
/*===========================================================================*/
111

    
112
/**
113
 * @brief   LIGHT_BANK output signal GPIO.
114
 */
115
extern ROMCONST apalControlGpio_t moduleGpioLightBlank;
116

    
117
/**
118
 * @brief   RS232_R_EN_N output signal GPIO.
119
 */
120
extern ROMCONST apalControlGpio_t moduleGpioRs232En;
121

    
122
/**
123
 * @brief   SW_V33_EN output signal GPIO.
124
 */
125
extern ROMCONST apalControlGpio_t moduleGpioSwV33En;
126

    
127
/**
128
 * @brief   SW_V42_EN output signal GPIO.
129
 */
130
extern ROMCONST apalControlGpio_t moduleGpioSwV42En;
131

    
132
/**
133
 * @brief   SW_V50_EN output signal GPIO.
134
 */
135
extern ROMCONST apalControlGpio_t moduleGpioSwV50En;
136

    
137
/**
138
 * @brief   IO_3 breakout signal GPIO.
139
 */
140
extern apalControlGpio_t moduleGpioBreakoutIo3;
141

    
142
/**
143
 * @brief   IO_5 breakout signal GPIO.
144
 */
145
extern apalControlGpio_t moduleGpioBreakoutIo5;
146

    
147
/**
148
 * @brief   IO_6 breakout signal GPIO.
149
 */
150
extern apalControlGpio_t moduleGpioBreakoutIo6;
151

    
152
/**
153
 * @brief   SYS_UART_DN bidirectional signal GPIO.
154
 */
155
extern ROMCONST apalControlGpio_t moduleGpioSysUartDn;
156

    
157
/**
158
 * @brief   IO_7 breakout signal GPIO.
159
 */
160
extern apalControlGpio_t moduleGpioBreakoutIo7;
161

    
162
/**
163
 * @brief   IO_8 breakout signal GPIO.
164
 */
165
extern apalControlGpio_t moduleGpioBreakoutIo8;
166

    
167
/**
168
 * @brief   IO_4 breakout signal GPIO.
169
 */
170
extern apalControlGpio_t moduleGpioBreakoutIo4;
171

    
172
/**
173
 * @brief   IO_1 breakout signal GPIO.
174
 */
175
extern apalControlGpio_t moduleGpioBreakoutIo1;
176

    
177
/**
178
 * @brief   IO_2 breakout signal GPIO.
179
 */
180
extern apalControlGpio_t moduleGpioBreakoutIo2;
181

    
182
/**
183
 * @brief   LED output signal GPIO.
184
 */
185
extern ROMCONST apalControlGpio_t moduleGpioLed;
186

    
187
/**
188
 * @brief   LIGHT_XLAT output signal GPIO.
189
 */
190
extern ROMCONST apalControlGpio_t moduleGpioLightXlat;
191

    
192
/**
193
 * @brief   SW_V18_EN output signal GPIO.
194
 */
195
extern ROMCONST apalControlGpio_t moduleGpioSwV18En;
196

    
197
/**
198
 * @brief   SW_VSYS_EN output signal GPIO.
199
 */
200
extern ROMCONST apalControlGpio_t moduleGpioSwVsysEn;
201

    
202
/**
203
 * @brief   SYS_UART_UP bidirectional signal GPIO.
204
 */
205
extern ROMCONST apalControlGpio_t moduleGpioSysUartUp;
206

    
207
/**
208
 * @brief   SYS_PD bidirectional signal GPIO.
209
 */
210
extern ROMCONST apalControlGpio_t moduleGpioSysPd;
211

    
212
/**
213
 * @brief   SYS_SYNC bidirectional signal GPIO.
214
 */
215
extern ROMCONST apalControlGpio_t moduleGpioSysSync;
216

    
217
/** @} */
218

    
219
/*===========================================================================*/
220
/**
221
 * @name AMiRo-OS core configurations
222
 * @{
223
 */
224
/*===========================================================================*/
225

    
226
/**
227
 * @brief   Event flag to be set on a IO_4 (breakout) interrupt.
228
 */
229
#define MODULE_OS_IOEVENTFLAGS_BREAKOUTIO4      AOS_IOEVENT_FLAG(GPIOC_IO_4)
230

    
231
/**
232
 * @brief   Event flag to be set on a IO_1 (breakout) interrupt.
233
 */
234
#define MODULE_OS_IOEVENTFLAGS_BREAKOUTIO1      AOS_IOEVENT_FLAG(GPIOC_IO_1)
235

    
236
/**
237
 * @brief   Event flag to be set on a SYS_SYNC interrupt.
238
 */
239
#define MODULE_OS_IOEVENTFLAGS_SYSSYNC          AOS_IOEVENT_FLAG(GPIOD_SYS_INT_N)
240

    
241
/**
242
 * @brief   Event flag to be set on a IO_3 (breakout) interrupt.
243
 */
244
#define MODULE_OS_IOEVENTFLAGS_BREAKOUTIO3      AOS_IOEVENT_FLAG(GPIOB_IO_3)
245

    
246
/**
247
 * @brief   Event flag to be set on a IO_5 (breakout) interrupt.
248
 */
249
#define MODULE_OS_IOEVENTFLAGS_BREAKOUTIO5      AOS_IOEVENT_FLAG(GPIOB_IO_5)
250

    
251
/**
252
 * @brief   Event flag to be set on a IO_6 (breakout) interrupt.
253
 */
254
#define MODULE_OS_IOEVENTFLAGS_BREAKOUTIO6      AOS_IOEVENT_FLAG(GPIOB_IO_6)
255

    
256
/**
257
 * @brief   Event flag to be set on a SYS_UART_DN interrupt.
258
 */
259
#define MODULE_OS_IOEVENTFLAGS_SYSUARTDN        AOS_IOEVENT_FLAG(GPIOB_SYS_UART_DN)
260

    
261
/**
262
 * @brief   Event flag to be set on a SYS_UART_UP interrupt.
263
 */
264
#define MODULE_OS_IOEVENTFLAGS_SYSUARTUP        AOS_IOEVENT_FLAG(GPIOC_SYS_UART_UP)
265

    
266
/**
267
 * @brief   Event flag to be set on a IO_7 (breakout) interrupt.
268
 */
269
#define MODULE_OS_IOEVENTFLAGS_BREAKOUTIO7      AOS_IOEVENT_FLAG(GPIOB_IO_7)
270

    
271
/**
272
 * @brief   Event flag to be set on a IO_8 (breakout) interrupt.
273
 */
274
#define MODULE_OS_IOEVENTFLAGS_BREAKOUTIO8      AOS_IOEVENT_FLAG(GPIOB_IO_8)
275

    
276
/**
277
 * @brief   Event flag to be set on a SYS_PD interrupt.
278
 */
279
#define MODULE_OS_IOEVENTFLAGS_SYSPD            AOS_IOEVENT_FLAG(GPIOC_SYS_PD_N)
280

    
281
#if (AMIROOS_CFG_SHELL_ENABLE == true) || (AMIROOS_CFG_TESTS_ENABLE == true) || defined(__DOXYGEN__)
282
/**
283
 * @brief   Shell prompt text.
284
 */
285
extern ROMCONST char* moduleShellPrompt;
286
#endif /* (AMIROOS_CFG_SHELL_ENABLE == true) || (AMIROOS_CFG_TESTS_ENABLE == true) */
287

    
288
/**
289
 * @brief   Interrupt initialization macro.
290
 * @note    SSSP related interrupt signals are already initialized in 'aos_system.c'.
291
 */
292
#define MODULE_INIT_INTERRUPTS() {                                            \
293
  /* breakout interrupts must be enabled explicitely */                       \
294
}
295

    
296
/**
297
 * @brief   Unit test initialization hook.
298
 */
299
#define MODULE_INIT_TESTS() {                                                 \
300
  /* add unit-test shell commands */                                          \
301
  aosShellAddCommand(&aos.shell, &moduleUtAlldAt24c01b.shellcmd);             \
302
  aosShellAddCommand(&aos.shell, &moduleUtAlldIna219.shellcmd);               \
303
  aosShellAddCommand(&aos.shell, &moduleUtAlldLed.shellcmd);                  \
304
  aosShellAddCommand(&aos.shell, &moduleUtAlldMic9404x.shellcmd);             \
305
  aosShellAddCommand(&aos.shell, &moduleUtAlldTlc5947.shellcmd);              \
306
}
307

    
308
/**
309
 * @brief   Periphery communication interfaces initialization hook.
310
 */
311
#define MODULE_INIT_PERIPHERY_COMM() {                                        \
312
  /* serial driver */                                                         \
313
  sdStart(&MODULE_HAL_PROGIF, &moduleHalProgIfConfig);                        \
314
  /* I2C */                                                                   \
315
  moduleHalI2cEepromPwrmtrBreakoutConfig.clock_speed = (AT24C01B_LLD_I2C_MAXFREQUENCY < moduleHalI2cEepromPwrmtrBreakoutConfig.clock_speed) ? AT24C01B_LLD_I2C_MAXFREQUENCY : moduleHalI2cEepromPwrmtrBreakoutConfig.clock_speed; \
316
  moduleHalI2cEepromPwrmtrBreakoutConfig.clock_speed = (INA219_LLD_I2C_MAXFREQUENCY < moduleHalI2cEepromPwrmtrBreakoutConfig.clock_speed) ? INA219_LLD_I2C_MAXFREQUENCY : moduleHalI2cEepromPwrmtrBreakoutConfig.clock_speed; \
317
  moduleHalI2cEepromPwrmtrBreakoutConfig.duty_cycle = (moduleHalI2cEepromPwrmtrBreakoutConfig.clock_speed <= 100000) ? STD_DUTY_CYCLE : FAST_DUTY_CYCLE_2;  \
318
  i2cStart(&MODULE_HAL_I2C_EEPROM_PWRMTR_BREAKOUT, &moduleHalI2cEepromPwrmtrBreakoutConfig);  \
319
  /* SPI */                                                                   \
320
  spiStart(&MODULE_HAL_SPI_LIGHT, &moduleHalSpiLightConfig);                  \
321
}
322

    
323
/**
324
 * @brief   Periphery communication interface deinitialization hook.
325
 */
326
#define MODULE_SHUTDOWN_PERIPHERY_COMM() {                                    \
327
  /* SPI */                                                                   \
328
  spiStop(&MODULE_HAL_SPI_LIGHT);                                             \
329
  /* I2C */                                                                   \
330
  i2cStop(&MODULE_HAL_I2C_EEPROM_PWRMTR_BREAKOUT);                            \
331
  /* don't stop the serial driver so messages can still be printed */         \
332
}
333

    
334
/** @} */
335

    
336
/*===========================================================================*/
337
/**
338
 * @name Startup Shutdown Synchronization Protocol (SSSP)
339
 * @{
340
 */
341
/*===========================================================================*/
342

    
343
/**
344
 * @brief   PD signal GPIO.
345
 */
346
#define moduleSsspGpioPd                        moduleGpioSysPd
347

    
348
/**
349
 * @brief   SYNC signal GPIO.
350
 */
351
#define moduleSsspGpioSync                      moduleGpioSysSync
352

    
353
/**
354
 * @brief   UP signal GPIO.
355
 */
356
#define moduleSsspGpioUp                        moduleGpioSysUartUp
357

    
358
/**
359
 * @brief   DN signal GPIO.
360
 */
361
#define moduleSsspGpioDn                        moduleGpioSysUartDn
362

    
363
/**
364
 * @brief   Event flags for PD signal events.
365
 */
366
#define MODULE_SSSP_EVENTFLAGS_PD               MODULE_OS_IOEVENTFLAGS_SYSPD
367

    
368
/**
369
 * @brief   Event flags for SYNC signal events.
370
 */
371
#define MODULE_SSSP_EVENTFLAGS_SYNC             MODULE_OS_IOEVENTFLAGS_SYSSYNC
372

    
373
/**
374
 * @brief   Event flags for UP signal events.
375
 */
376
#define MODULE_SSSP_EVENTFLAGS_UP               MODULE_OS_IOEVENTFLAGS_SYSUARTUP
377

    
378
/**
379
 * @brief   Event flags for DN signal events.
380
 */
381
#define MODULE_SSSP_EVENTFLAGS_DN               MODULE_OS_IOEVENTFLAGS_SYSUARTDN
382

    
383
/** @} */
384

    
385
/*===========================================================================*/
386
/**
387
 * @name Low-level drivers
388
 * @{
389
 */
390
/*===========================================================================*/
391
#include <alld_AT24C01B.h>
392
#include <alld_INA219.h>
393
#include <alld_LED.h>
394
#include <alld_MIC9404x.h>
395
//#include <alld_SNx5C3221E.h>
396
#include <alld_TLC5947.h>
397

    
398
/**
399
 * @brief   EEPROM driver.
400
 */
401
extern AT24C01BDriver moduleLldEeprom;
402

    
403
/**
404
 * @brief   Power monitor (VLED 4.2) driver.
405
 */
406
extern INA219Driver moduleLldPowerMonitorVled;
407

    
408
/**
409
 * @brief   Status LED driver.
410
 */
411
extern LEDDriver moduleLldStatusLed;
412

    
413
/**
414
 * @brief   Power switch driver (1.8V).
415
 */
416
extern MIC9404xDriver moduleLldPowerSwitchV18;
417

    
418
/**
419
 * @brief   Power switch driver (3.3V).
420
 */
421
extern MIC9404xDriver moduleLldPowerSwitchV33;
422

    
423
/**
424
 * @brief   Power switch driver (4.2V).
425
 */
426
extern MIC9404xDriver moduleLldPowerSwitchV42;
427

    
428
/**
429
 * @brief   Power switch driver (5.0V).
430
 */
431
extern MIC9404xDriver moduleLldPowerSwitchV50;
432

    
433
/**
434
 * @brief   Pseudo power switch driver (VSYS).
435
 * @details There is no actual MIC9040x device, but the swicthable circuit behaves analogous.
436
 */
437
extern MIC9404xDriver moduleLldPowerSwitchVsys;
438

    
439
/**
440
 * @brief   LED PWM driver.
441
 */
442
extern TLC5947Driver moduleLldLedPwm;
443

    
444
/** @} */
445

    
446
/*===========================================================================*/
447
/**
448
 * @name Unit tests (UT)
449
 * @{
450
 */
451
/*===========================================================================*/
452
#if (AMIROOS_CFG_TESTS_ENABLE == true) || defined(__DOXYGEN__)
453
#include <ut_alld_AT24C01B_v1.h>
454
#include <ut_alld_INA219_v1.h>
455
#include <ut_alld_LED_v1.h>
456
#include <ut_alld_MIC9404x_v1.h>
457
//#include <ut_alld_SNx5C3221E_v1.h>
458
#include <ut_alld_TLC5947_v1.h>
459

    
460
/**
461
 * @brief   EEPROM unit test object.
462
 */
463
extern aos_unittest_t moduleUtAlldAt24c01b;
464

    
465
/**
466
 * @brief   INA219 (power monitor) unit test object.
467
 */
468
extern aos_unittest_t moduleUtAlldIna219;
469

    
470
/**
471
 * @brief   Status LED unit test object.
472
 */
473
extern aos_unittest_t moduleUtAlldLed;
474

    
475
/**
476
 * @brief   Power switch unit test object.
477
 */
478
extern aos_unittest_t moduleUtAlldMic9404x;
479

    
480
/**
481
 * @brief   LED PWM driver unit test object.
482
 */
483
extern aos_unittest_t moduleUtAlldTlc5947;
484

    
485
#endif /* (AMIROOS_CFG_TESTS_ENABLE == true) */
486

    
487
/** @} */
488

    
489
#endif /* AMIROOS_MODULE_H */
490

    
491
/** @} */