changeset 289:4d203ef0eb4b

implement vibrator on/off control driver The piece implemented here is just the HW on/off driver; on top of this driver there will be a VIBR service (to be implemented in RiViera land) that will implement vibration pulse trains.
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 26 Mar 2022 17:03:36 +0000
parents 25d3ee009d19
children 0e5ccb343284
files components/buzzer src/cs/drivers/drv_app/buzzer/vibrator.c src/cs/drivers/drv_app/buzzer/vibrator.h
diffstat 3 files changed, 51 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/components/buzzer	Sat Nov 13 05:02:57 2021 +0000
+++ b/components/buzzer	Sat Mar 26 17:03:36 2022 +0000
@@ -36,3 +36,4 @@
 SRCDIR=$SRC/cs/drivers/drv_app/buzzer
 
 cfile_plain $SRCDIR/buzzer.c
+cfile_plain $SRCDIR/vibrator.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cs/drivers/drv_app/buzzer/vibrator.c	Sat Mar 26 17:03:36 2022 +0000
@@ -0,0 +1,43 @@
+/*
+ * This C module is a FreeCalypso addition: it implements hardware vibrator
+ * control as appropriate for different hw targets.
+ */
+
+#include "main/sys_types.h"
+#include "memif/mem.h"
+#include "armio/armio.h"
+#include "buzzer.h"
+#include "vibrator.h"
+#include "abb/abb.h"
+
+#include "board.cfg"
+#include "fc-target.h"
+
+/* flag tells L1 to suppress deep sleep */
+SYS_BOOL HW_vibrator_is_on;
+
+void HW_vibrator_on(SYS_UWORD8 level)
+{
+    HW_vibrator_is_on = 1;
+    #ifdef CONFIG_TARGET_PIRELLI
+	/* vibrator is controlled via BU output */
+	BZ_Tone(0);
+	BZ_Volume(level >> 2);
+	BZ_Enable();
+    #elif defined(CONFIG_TARGET_COMPAL)
+	/* vibrator is controlled via Iota AUX DAC */
+	ABB_Write_Register_on_page(PAGE0, TOGBR1, 0x20);
+	ABB_Write_Register_on_page(PAGE0, AUXDAC, (level << 2) | 3);
+    #endif
+}
+
+void HW_vibrator_off(void)
+{
+    #ifdef CONFIG_TARGET_PIRELLI
+	BZ_Disable();
+    #elif defined(CONFIG_TARGET_COMPAL)
+	ABB_Write_Register_on_page(PAGE0, AUXDAC, 0);
+	ABB_Write_Register_on_page(PAGE0, TOGBR1, 0x10);
+    #endif
+    HW_vibrator_is_on = 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cs/drivers/drv_app/buzzer/vibrator.h	Sat Mar 26 17:03:36 2022 +0000
@@ -0,0 +1,7 @@
+/*
+ * This header file is a FreeCalypso addition: it defines the functional
+ * interface to the hardware vibrator driver.
+ */
+
+void HW_vibrator_on(SYS_UWORD8 level);
+void HW_vibrator_off(void);