2020TPC-SW/2020TPCAppNoDFU.cydsn/HW/HW_CapSense.c
2025-02-01 19:52:04 -06:00

125 lines
3.6 KiB
C

/* Include Files */
#include "KTag.h"
/* Local Definitions and Constants */
#define CAPSENSE_TASK_PERIOD_IN_ms 50
/* Public Variables */
TaskHandle_t HW_CapSense_Task_Handle;
/* Private Variables */
static const TickType_t CapSense_Task_Delay = CAPSENSE_TASK_PERIOD_IN_ms / portTICK_PERIOD_MS;
static bool CapSense_One_Pressed = false;
static bool CapSense_Two_Pressed = false;
/* Private Function Prototypes */
/* Public Functions */
//! Initializes the capacitive touch sensing.
void HW_CapSense_Init(void)
{
}
//! Capacitive touch sensing task: Manages the capsense, using the PSoC API functions.
/*!
*
*/
void HW_CapSense_Task(void * pvParameters)
{
TickType_t xLastWakeTime;
// Initialize the xLastWakeTime variable with the current time.
xLastWakeTime = xTaskGetTickCount();
// Start up the capsense component, and initiate the first scan.
// Note that this can't be done in HW_CapSense_Init(), since it requires interrupts to be enabled.
CapSense_Start();
CapSense_ScanAllWidgets();
vTaskDelayUntil(&xLastWakeTime, CapSense_Task_Delay);
while (true)
{
// Check to see if the CapSense hardware is still busy with a previous scan.
if (CapSense_IsBusy() == CapSense_NOT_BUSY)
{
// Process all the widgets and read the touch information.
CapSense_ProcessAllWidgets();
// Perform the on-change logic for "Button One".
if (CapSense_IsSensorActive(CapSense_BUTTON0_WDGT_ID, CapSense_BUTTON0_SNS0_ID))
{
if (CapSense_One_Pressed == false)
{
KEvent_T switch_event = {.ID = KEVENT_CAPSENSE_ONE_PRESSED, .Data = NULL};
Post_KEvent(&switch_event);
}
CapSense_One_Pressed = true;
}
else
{
if (CapSense_One_Pressed == true)
{
KEvent_T switch_event = {.ID = KEVENT_CAPSENSE_ONE_RELEASED, .Data = NULL};
Post_KEvent(&switch_event);
}
CapSense_One_Pressed = false;
}
// Perform the on-change logic for "Button Two".
if (CapSense_IsSensorActive(CapSense_BUTTON0_WDGT_ID, CapSense_BUTTON0_SNS1_ID))
{
if (CapSense_Two_Pressed == false)
{
KEvent_T switch_event = {.ID = KEVENT_CAPSENSE_TWO_PRESSED, .Data = NULL};
Post_KEvent(&switch_event);
}
CapSense_Two_Pressed = true;
}
else
{
if (CapSense_Two_Pressed == true)
{
KEvent_T switch_event = {.ID = KEVENT_CAPSENSE_TWO_RELEASED, .Data = NULL};
Post_KEvent(&switch_event);
}
CapSense_Two_Pressed = false;
}
// Initiate the next scan.
CapSense_ScanAllWidgets();
}
vTaskDelayUntil(&xLastWakeTime, CapSense_Task_Delay);
}
}
//! Gets the state of the given CapSense button.
/*!
* \param button the button in question
* \return true if the button was pressed last time it was checked; false otherwise
*/
bool HW_IsCapsenseButtonPressed(HW_CapSenseButton_T button)
{
bool pressed = false;
if ((button == HW_CAPSENSE_BUTTON_ONE) && (CapSense_One_Pressed == true))
{
pressed = true;
}
else if ((button == HW_CAPSENSE_BUTTON_TWO) && (CapSense_Two_Pressed == true))
{
pressed = true;
}
return pressed;
}
/* Private Functions */