FreeCalypso > hg > fc-tourmaline
annotate src/cs/drivers/drv_app/buzzer/vibrator.c @ 290:0e5ccb343284
implement PWT buzzer driver
The piece implemented here is the low-level driver component; there will
also be a higher-level buzzer melody player service, to be implemented
in RiViera land, that will be the sole caller of PWT API functions
provided by the present driver.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 26 Mar 2022 18:23:50 +0000 |
parents | 4d203ef0eb4b |
children |
rev | line source |
---|---|
289
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * This C module is a FreeCalypso addition: it implements hardware vibrator |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * control as appropriate for different hw targets. |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 */ |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 #include "main/sys_types.h" |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include "memif/mem.h" |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include "armio/armio.h" |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include "buzzer.h" |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include "vibrator.h" |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include "abb/abb.h" |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 #include "board.cfg" |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 #include "fc-target.h" |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 /* flag tells L1 to suppress deep sleep */ |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 SYS_BOOL HW_vibrator_is_on; |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 void HW_vibrator_on(SYS_UWORD8 level) |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 { |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 HW_vibrator_is_on = 1; |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 #ifdef CONFIG_TARGET_PIRELLI |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 /* vibrator is controlled via BU output */ |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 BZ_Tone(0); |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 BZ_Volume(level >> 2); |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 BZ_Enable(); |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 #elif defined(CONFIG_TARGET_COMPAL) |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 /* vibrator is controlled via Iota AUX DAC */ |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 ABB_Write_Register_on_page(PAGE0, TOGBR1, 0x20); |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 ABB_Write_Register_on_page(PAGE0, AUXDAC, (level << 2) | 3); |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 #endif |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 } |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 void HW_vibrator_off(void) |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 { |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 #ifdef CONFIG_TARGET_PIRELLI |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 BZ_Disable(); |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 #elif defined(CONFIG_TARGET_COMPAL) |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 ABB_Write_Register_on_page(PAGE0, AUXDAC, 0); |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 ABB_Write_Register_on_page(PAGE0, TOGBR1, 0x10); |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 #endif |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 HW_vibrator_is_on = 0; |
4d203ef0eb4b
implement vibrator on/off control driver
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 } |