view src/cs/drivers/drv_app/buzzer/vibrator.c @ 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
children
line wrap: on
line source

/*
 * 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;
}