# HG changeset patch
# User Mychaela Falconia <falcon@freecalypso.org>
# Date 1648314216 0
# Node ID 4d203ef0eb4b564757116031a16aa6a9a39983d6
# Parent  25d3ee009d191177ae5ee13ec8aece663de18524
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.

diff -r 25d3ee009d19 -r 4d203ef0eb4b components/buzzer
--- 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
diff -r 25d3ee009d19 -r 4d203ef0eb4b src/cs/drivers/drv_app/buzzer/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;
+}
diff -r 25d3ee009d19 -r 4d203ef0eb4b src/cs/drivers/drv_app/buzzer/vibrator.h
--- /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);