Project

General

Profile

/*******************************************************************************
* 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 <project.h>

/***************************************
* 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 */
(1-1/3)