Statistics
| Branch: | Tag: | Revision:

amiro-os / modules / LightRing_1-2 / module.c @ c930aa01

History | View | Annotate | Download (17.03 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 v1.2 module.
22
 *
23
 * @addtogroup lightring_module
24
 * @{
25
 */
26

    
27
#include "module.h"
28

    
29
/*===========================================================================*/
30
/**
31
 * @name Module specific functions
32
 * @{
33
 */
34
/*===========================================================================*/
35

    
36
/** @} */
37

    
38
/*===========================================================================*/
39
/**
40
 * @name ChibiOS/HAL configuration
41
 * @{
42
 */
43
/*===========================================================================*/
44

    
45
CANConfig moduleHalCanConfig = {
46
  /* mcr  */ CAN_MCR_ABOM | CAN_MCR_AWUM | CAN_MCR_TXFP,
47
  /* btr  */ CAN_BTR_SJW(1) | CAN_BTR_TS2(2) | CAN_BTR_TS1(13) | CAN_BTR_BRP(1),
48
};
49

    
50
I2CConfig moduleHalI2cEepromPwrmtrBreakoutConfig = {
51
  /* I²C mode   */ OPMODE_I2C,
52
  /* frequency  */ 400000, // TODO: replace with some macro (-> ChibiOS/HAL)
53
  /* duty cycle */ FAST_DUTY_CYCLE_2,
54
};
55

    
56
SerialConfig moduleHalProgIfConfig = {
57
  /* bit rate */ 115200,
58
  /* CR1      */ 0,
59
  /* CR1      */ 0,
60
  /* CR1      */ 0,
61
};
62

    
63
SPIConfig moduleHalSpiLightConfig = {
64
  /* circular buffer mode        */ false,
65
  /* callback function pointer   */ NULL,
66
  /* chip select line port       */ PAL_PORT(LINE_LIGHT_XLAT),
67
  /* chip select line pad number */ PAL_PAD(LINE_LIGHT_XLAT),
68
  /* CR1                         */ SPI_CR1_BR_0 | SPI_CR1_BR_1,
69
  /* CR2                         */ SPI_CR2_RXDMAEN | SPI_CR2_TXDMAEN,
70
};
71

    
72

    
73
/*===========================================================================*/
74
/**
75
 * @name GPIO definitions
76
 * @{
77
 */
78
/*===========================================================================*/
79

    
80
/**
81
 * @brief   LIGHT_BANK output signal GPIO.
82
 */
83
static apalGpio_t _gpioLightBlank = {
84
  /* line */ LINE_LIGHT_BLANK,
85
};
86
ROMCONST apalControlGpio_t moduleGpioLightBlank = {
87
  /* GPIO */ &_gpioLightBlank,
88
  /* meta */ {
89
    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
90
    /* active state   */ TLC5947_LLD_BLANK_ACTIVE_STATE,
91
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
92
  },
93
};
94

    
95
/**
96
 * @brief   RS232_R_EN_N output signal GPIO.
97
 */
98
static apalGpio_t _gpioRs232En = {
99
  /* line */ LINE_RS232_R_EN_N,
100
};
101
ROMCONST apalControlGpio_t moduleGpioRs232En = {
102
  /* GPIO */ &_gpioRs232En,
103
  /* meta */ {
104
    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
105
    /* active state   */ APAL_GPIO_ACTIVE_LOW, //TODO
106
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
107
  },
108
};
109

    
110
/**
111
 * @brief   SW_V33_EN output signal GPIO.
112
 */
113
static apalGpio_t _gpioSwV33En = {
114
  /* line */ LINE_SW_V33_EN,
115
};
116
ROMCONST apalControlGpio_t moduleGpioSwV33En = {
117
  /* GPIO */ &_gpioSwV33En,
118
  /* meta */ {
119
    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
120
    /* active state   */ MIC9404x_LLD_EN_ACTIVE_STATE,
121
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
122
  },
123
};
124

    
125
/**
126
 * @brief   SW_V42_EN output signal GPIO.
127
 */
128
static apalGpio_t _gpioSwV42En = {
129
  /* line */ LINE_SW_V42_EN,
130
};
131
ROMCONST apalControlGpio_t moduleGpioSwV42En = {
132
  /* GPIO */ &_gpioSwV42En,
133
  /* meta */ {
134
    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
135
    /* active state   */ MIC9404x_LLD_EN_ACTIVE_STATE,
136
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
137
  },
138
};
139

    
140
/**
141
 * @brief   SW_V50_EN output signal GPIO.
142
 */
143
static apalGpio_t _gpioSwV50En = {
144
  /* line */ LINE_SW_V50_EN,
145
};
146
ROMCONST apalControlGpio_t moduleGpioSwV50En = {
147
  /* GPIO */ &_gpioSwV50En,
148
  /* meta */ {
149
    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
150
    /* active state   */ MIC9404x_LLD_EN_ACTIVE_STATE,
151
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
152
  },
153
};
154

    
155
/**
156
 * @brief   IO_3 breakout signal GPIO.
157
 */
158
static apalGpio_t _gpioBreakoutIo3 = {
159
  /* line */ LINE_IO_3,
160
};
161
apalControlGpio_t moduleGpioBreakoutIo3 = {
162
  /* GPIO */ &_gpioBreakoutIo3,
163
  /* meta */ {
164
    /* direction      */ APAL_GPIO_DIRECTION_UNDEFINED,
165
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
166
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
167
  },
168
};
169

    
170
/**
171
 * @brief   IO_5 breakout signal GPIO.
172
 */
173
static apalGpio_t _gpioBreakoutIo5 = {
174
  /* line */ LINE_IO_5,
175
};
176
apalControlGpio_t moduleGpioBreakoutIo5 = {
177
  /* GPIO */ &_gpioBreakoutIo5,
178
  /* meta */ {
179
    /* direction      */ APAL_GPIO_DIRECTION_UNDEFINED,
180
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
181
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
182
  },
183
};
184

    
185
/**
186
 * @brief   IO_6 breakout signal GPIO.
187
 */
188
static apalGpio_t _gpioBreakoutIo6 = {
189
  /* line */ LINE_IO_6,
190
};
191
apalControlGpio_t moduleGpioBreakoutIo6 = {
192
  /* GPIO */ &_gpioBreakoutIo6,
193
  /* meta */ {
194
    /* direction      */ APAL_GPIO_DIRECTION_UNDEFINED,
195
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
196
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
197
  },
198
};
199

    
200
/**
201
 * @brief   SYS_UART_DN bidirectional signal GPIO.
202
 */
203
static apalGpio_t _gpioSysUartDn = {
204
  /* line */ LINE_SYS_UART_DN,
205
};
206
ROMCONST apalControlGpio_t moduleGpioSysUartDn = {
207
  /* GPIO */ &_gpioSysUartDn,
208
  /* meta */ {
209
    /* direction      */ APAL_GPIO_DIRECTION_BIDIRECTIONAL,
210
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
211
    /* interrupt edge */ APAL_GPIO_EDGE_BOTH,
212
  },
213
};
214

    
215
/**
216
 * @brief   IO_7 breakout signal GPIO.
217
 */
218
static apalGpio_t _gpioBreakoutIo7 = {
219
  /* line */ LINE_IO_7,
220
};
221
apalControlGpio_t moduleGpioBreakoutIo7 = {
222
  /* GPIO */ &_gpioBreakoutIo7,
223
  /* meta */ {
224
    /* direction      */ APAL_GPIO_DIRECTION_UNDEFINED,
225
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
226
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
227
  },
228
};
229

    
230
/**
231
 * @brief   IO_8 breakout signal GPIO.
232
 */
233
static apalGpio_t _gpioBreakoutIo8 = {
234
  /* line */ LINE_IO_8,
235
};
236
apalControlGpio_t moduleGpioBreakoutIo8 = {
237
  /* GPIO */ &_gpioBreakoutIo8,
238
  /* meta */ {
239
    /* direction      */ APAL_GPIO_DIRECTION_UNDEFINED,
240
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
241
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
242
  },
243
};
244

    
245
/**
246
 * @brief   IO_4 breakout signal GPIO.
247
 */
248
static apalGpio_t _gpioBreakoutIo4 = {
249
  /* line */ LINE_IO_4,
250
};
251
apalControlGpio_t moduleGpioBreakoutIo4 = {
252
  /* GPIO */ &_gpioBreakoutIo4,
253
  /* meta */ {
254
    /* direction      */ APAL_GPIO_DIRECTION_UNDEFINED,
255
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
256
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
257
  },
258
};
259

    
260
/**
261
 * @brief   IO_1 breakout signal GPIO.
262
 */
263
static apalGpio_t _gpioBreakoutIo1 = {
264
  /* line */ LINE_IO_1,
265
};
266
apalControlGpio_t moduleGpioBreakoutIo1 = {
267
  /* GPIO */ &_gpioBreakoutIo1,
268
  /* meta */ {
269
    /* direction      */ APAL_GPIO_DIRECTION_UNDEFINED,
270
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
271
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
272
  },
273
};
274

    
275
/**
276
 * @brief   IO_2 breakout signal GPIO.
277
 */
278
static apalGpio_t _gpioBreakoutIo2 = {
279
  /* line */ LINE_IO_2,
280
};
281
apalControlGpio_t moduleGpioBreakoutIo2 = {
282
  /* GPIO */ &_gpioBreakoutIo2,
283
  /* meta */ {
284
    /* direction      */ APAL_GPIO_DIRECTION_UNDEFINED,
285
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
286
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
287
  },
288
};
289

    
290
/**
291
 * @brief   LED output signal GPIO.
292
 */
293
static apalGpio_t _gpioLed = {
294
  /* line */ LINE_LED,
295
};
296
ROMCONST apalControlGpio_t moduleGpioLed = {
297
  /* GPIO */ &_gpioLed,
298
  /* meta */ {
299
    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
300
    /* active state   */ LED_LLD_GPIO_ACTIVE_STATE,
301
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
302
  },
303
};
304

    
305
/**
306
 * @brief   LIGHT_XLAT output signal GPIO.
307
 */
308
static apalGpio_t _gpioLightXlat = {
309
  /* line */ LINE_LIGHT_XLAT,
310
};
311
ROMCONST apalControlGpio_t moduleGpioLightXlat = {
312
  /* GPIO */ &_gpioLightXlat,
313
  /* meta */ {
314
    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
315
    /* active state   */ (TLC5947_LLD_XLAT_UPDATE_EDGE == APAL_GPIO_EDGE_RISING) ? APAL_GPIO_ACTIVE_HIGH : APAL_GPIO_ACTIVE_LOW,
316
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
317
  },
318
};
319

    
320
/**
321
 * @brief   SW_V18_EN output signal GPIO.
322
 */
323
static apalGpio_t _gpioSwV18En = {
324
  /* line */ LINE_SW_V18_EN,
325
};
326
ROMCONST apalControlGpio_t moduleGpioSwV18En = {
327
  /* GPIO */ &_gpioSwV18En,
328
  /* meta */ {
329
    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
330
    /* active state   */ MIC9404x_LLD_EN_ACTIVE_STATE,
331
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
332
  },
333
};
334

    
335
/**
336
 * @brief   SW_VSYS_EN output signal GPIO.
337
 */
338
static apalGpio_t _gpioSwVsysEn = {
339
  /* line */ LINE_SW_VSYS_EN,
340
};
341
ROMCONST apalControlGpio_t moduleGpioSwVsysEn = {
342
  /* GPIO */ &_gpioSwVsysEn,
343
  /* meta */ {
344
    /* direction      */ APAL_GPIO_DIRECTION_OUTPUT,
345
    /* active state   */ APAL_GPIO_ACTIVE_HIGH,
346
    /* interrupt edge */ APAL_GPIO_EDGE_NONE,
347
  },
348
};
349

    
350
/**
351
 * @brief   SYS_UART_UP bidirectional signal GPIO.
352
 */
353
static apalGpio_t _gpioSysUartUp = {
354
  /* line */ LINE_SYS_UART_UP,
355
};
356
ROMCONST apalControlGpio_t moduleGpioSysUartUp = {
357
  /* GPIO */ &_gpioSysUartUp,
358
  /* meta */ {
359
    /* direction      */ APAL_GPIO_DIRECTION_BIDIRECTIONAL,
360
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
361
    /* interrupt edge */ APAL_GPIO_EDGE_BOTH,
362
  },
363
};
364

    
365
/**
366
 * @brief   SYS_PD bidirectional signal GPIO.
367
 */
368
static apalGpio_t _gpioSysPd = {
369
  /* line */ LINE_SYS_PD_N,
370
};
371
ROMCONST apalControlGpio_t moduleGpioSysPd = {
372
  /* GPIO */ &_gpioSysPd,
373
  /* meta */ {
374
    /* direction      */ APAL_GPIO_DIRECTION_BIDIRECTIONAL,
375
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
376
    /* interrupt edge */ APAL_GPIO_EDGE_BOTH,
377
  },
378
};
379

    
380
/**
381
 * @brief   SYS_SYNC bidirectional signal GPIO.
382
 */
383
static apalGpio_t _gpioSysSync = {
384
  /* line */ LINE_SYS_INT_N,
385
};
386
ROMCONST apalControlGpio_t moduleGpioSysSync = {
387
  /* GPIO */ &_gpioSysSync,
388
  /* meta */ {
389
    /* direction      */ APAL_GPIO_DIRECTION_BIDIRECTIONAL,
390
    /* active state   */ APAL_GPIO_ACTIVE_LOW,
391
    /* interrupt edge */ APAL_GPIO_EDGE_BOTH,
392
  },
393
};
394

    
395
/** @} */
396

    
397
/*===========================================================================*/
398
/**
399
 * @name AMiRo-OS core configurations
400
 * @{
401
 */
402
/*===========================================================================*/
403

    
404
#if (AMIROOS_CFG_SHELL_ENABLE == true) || (AMIROOS_CFG_TESTS_ENABLE == true) || defined(__DOXYGEN__)
405
ROMCONST char* moduleShellPrompt = "LightRing";
406
#endif /* (AMIROOS_CFG_SHELL_ENABLE == true) || (AMIROOS_CFG_TESTS_ENABLE == true) */
407

    
408
/** @} */
409

    
410
/*===========================================================================*/
411
/**
412
 * @name Startup Shutdown Synchronization Protocol (SSSP)
413
 * @{
414
 */
415
/*===========================================================================*/
416

    
417
/** @} */
418

    
419
/*===========================================================================*/
420
/**
421
 * @name Low-level drivers
422
 * @{
423
 */
424
/*===========================================================================*/
425

    
426
AT24C01BDriver moduleLldEeprom = {
427
  /* I2C driver   */ &MODULE_HAL_I2C_EEPROM_PWRMTR_BREAKOUT,
428
  /* I2C address  */ 0x00u,
429
};
430

    
431
INA219Driver moduleLldPowerMonitorVled = {
432
  /* I2C Driver       */ &MODULE_HAL_I2C_EEPROM_PWRMTR_BREAKOUT,
433
  /* I²C address      */ INA219_LLD_I2C_ADDR_FIXED,
434
  /* current LSB (uA) */ 0x00u,
435
  /* configuration    */ NULL,
436
};
437

    
438
LEDDriver moduleLldStatusLed = {
439
  /* LED enable Gpio */ &moduleGpioLed,
440
};
441

    
442
MIC9404xDriver moduleLldPowerSwitchV18 = {
443
  /* power enable GPIO  */ &moduleGpioSwV18En,
444
};
445

    
446
MIC9404xDriver moduleLldPowerSwitchV33 = {
447
  /* power enable GPIO  */ &moduleGpioSwV33En,
448
};
449

    
450
MIC9404xDriver moduleLldPowerSwitchV42 = {
451
  /* power enable GPIO  */ &moduleGpioSwV42En,
452
};
453

    
454
MIC9404xDriver moduleLldPowerSwitchV50 = {
455
  /* power enable GPIO  */ &moduleGpioSwV50En,
456
};
457

    
458
MIC9404xDriver moduleLldPowerSwitchVsys = {
459
  /* power enable GPIO  */ &moduleGpioSwVsysEn,
460
};
461

    
462
TLC5947Driver moduleLldLedPwm = {
463
  /* SPI driver         */ &MODULE_HAL_SPI_LIGHT,
464
  /* BLANK signal GPIO  */ &moduleGpioLightBlank,
465
  /* XLAT signal GPIO   */ &moduleGpioLightXlat,
466
};
467

    
468
/** @} */
469

    
470
/*===========================================================================*/
471
/**
472
 * @name Unit tests (UT)
473
 * @{
474
 */
475
/*===========================================================================*/
476
#if (AMIROOS_CFG_TESTS_ENABLE == true) || defined(__DOXYGEN__)
477
#include <string.h>
478

    
479
/*
480
 * EEPROM (AT24C01B)
481
 */
482
static int _utShellCmdCb_AlldAt24c01b(BaseSequentialStream* stream, int argc, char* argv[])
483
{
484
  (void)argc;
485
  (void)argv;
486
  aosUtRun(stream, &moduleUtAlldAt24c01b, NULL);
487
  return AOS_OK;
488
}
489
static ut_at24c01bdata_t _utAlldAt24c01bData = {
490
  /* driver   */ &moduleLldEeprom,
491
  /* timeout  */ MICROSECONDS_PER_SECOND,
492
};
493
aos_unittest_t moduleUtAlldAt24c01b = {
494
  /* name           */ "AT24C01B",
495
  /* info           */ "1kbit EEPROM",
496
  /* test function  */ utAlldAt24c01bFunc,
497
  /* shell command  */ {
498
    /* name     */ "unittest:EEPROM",
499
    /* callback */ _utShellCmdCb_AlldAt24c01b,
500
    /* next     */ NULL,
501
  },
502
  /* data           */ &_utAlldAt24c01bData,
503
};
504

    
505
/*
506
 * INA219 (power monitor)
507
 */
508
static int _utShellCmdCb_AlldIna219(BaseSequentialStream* stream, int argc, char* argv[])
509
{
510
  (void)argc;
511
  (void)argv;
512
  aosUtRun(stream, &moduleUtAlldIna219, "VLED (4.2V)");
513
  return AOS_OK;
514
}
515
static ut_ina219data_t _utIna219Data = {
516
  /* driver           */ &moduleLldPowerMonitorVled,
517
  /* expected voltage */ 4.2f,
518
  /* tolerance        */ 0.2f,
519
  /* timeout */ MICROSECONDS_PER_SECOND,
520
};
521
aos_unittest_t moduleUtAlldIna219 = {
522
  /* name           */ "INA219",
523
  /* info           */ "power monitor",
524
  /* test function  */ utAlldIna219Func,
525
  /* shell command  */ {
526
    /* name     */ "unittest:PowerMonitor",
527
    /* callback */ _utShellCmdCb_AlldIna219,
528
    /* next     */ NULL,
529
  },
530
  /* data           */ &_utIna219Data,
531
};
532

    
533
/*
534
 * Status LED
535
 */
536
static int _utShellCmdCb_AlldLed(BaseSequentialStream* stream, int argc, char* argv[])
537
{
538
  (void)argc;
539
  (void)argv;
540
  aosUtRun(stream, &moduleUtAlldLed, NULL);
541
  return AOS_OK;
542
}
543
aos_unittest_t moduleUtAlldLed = {
544
  /* name           */ "LED",
545
  /* info           */ NULL,
546
  /* test function  */ utAlldLedFunc,
547
  /* shell command  */ {
548
    /* name     */ "unittest:StatusLED",
549
    /* callback */ _utShellCmdCb_AlldLed,
550
    /* next     */ NULL,
551
  },
552
  /* data           */ &moduleLldStatusLed,
553
};
554

    
555
/*
556
 * Power switch driver (MIC9404x)
557
 */
558
static int _utShellCmdCb_Mic9404x(BaseSequentialStream* stream, int argc, char* argv[])
559
{
560
  // evaluate arguments
561
  if (argc == 2) {
562
    if (strcmp(argv[1], "1.8V") == 0) {
563
      moduleUtAlldMic9404x.data = &moduleLldPowerSwitchV18;
564
      aosUtRun(stream, &moduleUtAlldMic9404x, "1.8V");
565
      moduleUtAlldMic9404x.data = NULL;
566
      return AOS_OK;
567
    }
568
    else if (strcmp(argv[1], "3.3V") == 0) {
569
      moduleUtAlldMic9404x.data = &moduleLldPowerSwitchV33;
570
      aosUtRun(stream, &moduleUtAlldMic9404x, "3.3V");
571
      moduleUtAlldMic9404x.data = NULL;
572
      return AOS_OK;
573
    }
574
    else if (strcmp(argv[1], "4.2V") == 0) {
575
      moduleUtAlldMic9404x.data = &moduleLldPowerSwitchV42;
576
      aosUtRun(stream, &moduleUtAlldMic9404x, "4.2V");
577
      moduleUtAlldMic9404x.data = NULL;
578
      return AOS_OK;
579
    }
580
    else if (strcmp(argv[1], "5.0V") == 0) {
581
      moduleUtAlldMic9404x.data = &moduleLldPowerSwitchV50;
582
      aosUtRun(stream, &moduleUtAlldMic9404x, "5.0V");
583
      moduleUtAlldMic9404x.data = NULL;
584
      return AOS_OK;
585
    }
586
    else if (strcmp(argv[1], "VSYS") == 0) {
587
      moduleUtAlldMic9404x.data = &moduleLldPowerSwitchVsys;
588
      aosUtRun(stream, &moduleUtAlldMic9404x, "VSYS");
589
      moduleUtAlldMic9404x.data = NULL;
590
      return AOS_OK;
591
    }
592
  }
593
  // print help
594
  chprintf(stream, "Usage: %s OPTION\n", argv[0]);
595
  chprintf(stream, "Options:\n");
596
  chprintf(stream, "  1.8V\n");
597
  chprintf(stream, "    Test power switch for 1.8V supply.\n");
598
  chprintf(stream, "  3.3V\n");
599
  chprintf(stream, "    Test power switch for 3.3V supply.\n");
600
  chprintf(stream, "  4.2V\n");
601
  chprintf(stream, "    Test power switch for 4.2V supply.\n");
602
  chprintf(stream, "  5.0V\n");
603
  chprintf(stream, "    Test power switch for 5.0V supply.\n");
604
  chprintf(stream, "  VSYS\n");
605
  chprintf(stream, "    Test power switch for VSYS supply.\n");
606
  return AOS_INVALIDARGUMENTS;
607
}
608
aos_unittest_t moduleUtAlldMic9404x = {
609
  /* info           */ "MIC9404x",
610
  /* name           */ "power swicth driver",
611
  /* test function  */ utAlldMic9404xFunc,
612
  /* shell command  */ {
613
    /* name     */ "unittest:PowerSwitch",
614
    /* callback */ _utShellCmdCb_Mic9404x,
615
    /* next     */ NULL,
616
  },
617
  /* data           */ NULL,
618
};
619

    
620
/*
621
 * LED PWM driver (TLC5947)
622
 */
623
static int _utShellCmdCb_Tlc5947(BaseSequentialStream* stream, int argc, char* argv[])
624
{
625
  (void)argc;
626
  (void)argv;
627
  aosUtRun(stream, &moduleUtAlldTlc5947, NULL);
628
  return AOS_OK;
629
}
630
aos_unittest_t moduleUtAlldTlc5947 = {
631
  /* info           */ "TLC5947",
632
  /* name           */ "LED PWM driver",
633
  /* test function  */ utAlldTlc5947Func,
634
  /* shell command  */ {
635
    /* name     */ "unittest:Lights",
636
    /* callback */ _utShellCmdCb_Tlc5947,
637
    /* next     */ NULL,
638
  },
639
  /* data           */ &moduleLldLedPwm,
640
};
641

    
642
#endif /* (AMIROOS_CFG_TESTS_ENABLE == true) */
643

    
644
/** @} */
645
/** @} */