/******************************************************************************* * File Name: main.c * * Version: 1.0 * * Description: * This is the source code for the PSoC 4 BLE Lab 1 - Setting up a Connection. * * Hardware Dependency: * CY8CKIT-042 BLE Pioneer Kit * ******************************************************************************** * Copyright 2014, Cypress Semiconductor Corporation. All rights reserved. * You may use this file only in accordance with the license, terms, conditions, * disclaimers, and limitations in the end user license agreement accompanying * the software package with which this file was provided. *******************************************************************************/ #include /*************************************** * API Constants ***************************************/ #define NO_ALERT (0u) #define MILD_ALERT (1u) #define HIGH_ALERT (2u) #define NO_ALERT_COMPARE (0u) #define MILD_ALERT_COMPARE (250u) #define HIGH_ALERT_COMPARE (500u) /*************************************** * Function Prototypes ***************************************/ void StackEventHandler(uint32 event, void* eventParam); void IasEventHandler(uint32 event, void* eventParam); void HandleAlertLEDs(uint8 status); /******************************************************************************* * Function Name: main ******************************************************************************** * * Summary: * Main function. * * Parameters: * None * * Return: * None * *******************************************************************************/ int main() { CyGlobalIntEnable; /* Start the BLE component and register StackEventHandler function */ CyBle_Start(StackEventHandler); /* Register IAS event handler function */ CyBle_IasRegisterAttrCallback(IasEventHandler); /* Start the PWM component */ PWM_Start(); while(1) { /* Process all the pending BLE tasks. This single API call to * will service all the BLE stack events. This API MUST be called at least once * in a BLE connection interval */ CyBle_ProcessEvents(); } } /******************************************************************************* * Function Name: StackEventHandler ******************************************************************************** * * Summary: * This is an event callback function to receive events from the BLE Component. * * Parameters: * uint8 event: Event from the CYBLE component * void* eventParams: A structure instance for corresponding event type. The * list of event structure is described in the component * datasheet. * * Return: * None * *******************************************************************************/ void StackEventHandler(uint32 event, void *eventParam) { uint8 alertLevel; switch(event) { /* Mandatory events to be handled by Find Me Target design */ case CYBLE_EVT_STACK_ON: case CYBLE_EVT_GAP_DEVICE_DISCONNECTED: case CYBLE_EVT_TIMEOUT: /* Start the BLE fast advertisement. */ CyBle_GappStartAdvertisement(CYBLE_ADVERTISING_FAST); /* Reset the alert level to NOALERT */ alertLevel = NO_ALERT; HandleAlertLEDs(alertLevel); break; default: break; } } /******************************************************************************* * Function Name: IasEventHandler ******************************************************************************** * * Summary: * This is an event callback function to receive events from the BLE Component, * which are specific to Immediate Alert Service. * * Parameters: * uint8 event: Write Command event from the CYBLE component. * void* eventParams: A structure instance of CYBLE_GATT_HANDLE_VALUE_PAIR_T * type. * * Return: * None * *******************************************************************************/ void IasEventHandler(uint32 event, void *eventParam) { uint8 alertLevel; /* Alert Level Characteristic write event */ if(event == CYBLE_EVT_IASS_WRITE_CHAR_CMD) { /* Extract Alert Level value from the GATT DB using the * CYBLE_IAS_ALERT_LEVEL as a parameter to CyBle_IassGetCharacteristicValue * routine. Store the Alert Level Characteristic value in "alertLevel" * variable */ CyBle_IassGetCharacteristicValue(CYBLE_IAS_ALERT_LEVEL, sizeof(alertLevel), &alertLevel); /*Based on alert Level level recieved, Drive LED*/ HandleAlertLEDs(alertLevel); } } /******************************************************************************* * Function Name: HandleAlertLEDs ******************************************************************************** * * Summary: * This function drives the LED based on the alert level * * Parameters: * uint8 status: Alert level * * Return: * None * *******************************************************************************/ void HandleAlertLEDs(uint8 status) { /* Update Alert LED status based on IAS Alert level characteristic. */ switch(status) { case NO_ALERT: PWM_WriteCompare(NO_ALERT_COMPARE); break; case MILD_ALERT: PWM_WriteCompare(MILD_ALERT_COMPARE); break; case HIGH_ALERT: PWM_WriteCompare(HIGH_ALERT_COMPARE); break; } } /* [] END OF FILE */