125 lines
3.6 KiB
C
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 */
|
|
|