2020TPC-SW/2020TPCApp1.cydsn/scps.c
2025-02-01 19:52:04 -06:00

141 lines
5 KiB
C

/*******************************************************************************
* File Name: scps.c
*
* Version: 1.0
*
* Description:
* This file contains the code for the SCPS.
*
* Hardware Dependency:
* CY8CKIT-062 PSoC6 BLE Pioneer Kit
*
********************************************************************************
* Copyright 2017, 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 "common.h"
#include "scps.h"
/* Static global variables */
static uint16_t scanInterval = 0u;
static uint16_t scanWindow = 0u;
static bool requestScanRefresh = true;
/*******************************************************************************
* Function Name: ScpsInit()
********************************************************************************
*
* Summary:
* Initializes the SCPS Service.
*
*******************************************************************************/
void ScpsInit(void)
{
/* Register service specific callback function */
Cy_BLE_SCPS_RegisterAttrCallback(ScpsCallBack);
requestScanRefresh = true;
}
/*******************************************************************************
* Function Name: ScpsCallBack()
********************************************************************************
*
* Summary:
* This is an event callback function to receive service specific events from
* SCPS Service.
*
* Parameters:
* event - the event code
* eventParam - the event parameters
*
********************************************************************************/
void ScpsCallBack (uint32_t event, void *eventParam)
{
DBG_PRINTF("SCPS event: %lx, ", event);
switch(event)
{
case CY_BLE_EVT_SCPSS_NOTIFICATION_ENABLED:
DBG_PRINTF("CY_BLE_EVT_SCPSS_NOTIFICATION_ENABLED %x %x \r\n",
((cy_stc_ble_scps_char_value_t *)eventParam)->connHandle.attId,
((cy_stc_ble_scps_char_value_t *)eventParam)->connHandle.bdHandle);
break;
case CY_BLE_EVT_SCPSS_NOTIFICATION_DISABLED:
DBG_PRINTF("CY_BLE_EVT_SCPSS_NOTIFICATION_DISABLED %x %x \r\n",
((cy_stc_ble_scps_char_value_t *)eventParam)->connHandle.attId,
((cy_stc_ble_scps_char_value_t *)eventParam)->connHandle.bdHandle);
break;
case CY_BLE_EVT_SCPSS_SCAN_INT_WIN_WRITE_CHAR:
scanInterval = Cy_BLE_Get16ByPtr(((cy_stc_ble_scps_char_value_t *)eventParam)->value->val);
scanWindow = Cy_BLE_Get16ByPtr(((cy_stc_ble_scps_char_value_t *)eventParam)->value->val +
sizeof(scanInterval));
DBG_PRINTF("CY_BLE_EVT_SCPSS_SCAN_INT_WIN_WRITE_CHAR scanInterval: %x, scanWindow: %x \r\n",
scanInterval, scanWindow);
break;
case CY_BLE_EVT_SCPSC_NOTIFICATION:
break;
case CY_BLE_EVT_SCPSC_READ_DESCR_RESPONSE:
break;
case CY_BLE_EVT_SCPSC_WRITE_DESCR_RESPONSE:
break;
default:
DBG_PRINTF("Not supported event\r\n");
break;
}
}
/*******************************************************************************
* Function Name: ScpsSendReqUpdateConnParam()
********************************************************************************
*
* Summary:
* Send notification to request update connection parameters
*
* Parameters:
* connHandle: The connection handle
*
********************************************************************************/
void ScpsSendReqUpdateConnParam(cy_stc_ble_conn_handle_t connHandle)
{
cy_en_ble_api_result_t apiResult;
uint8_t refresh = CY_BLE_SCAN_REFRESH_ENABLED;
uint16 cccd = CY_BLE_CCCD_DEFAULT;
if(requestScanRefresh == true)
{
apiResult = Cy_BLE_SCPSS_GetCharacteristicDescriptor(connHandle, CY_BLE_SCPS_SCAN_REFRESH,
CY_BLE_SCPS_SCAN_REFRESH_CCCD, CY_BLE_CCCD_LEN,
(uint8_t *)&cccd);
if((apiResult == CY_BLE_SUCCESS) && (cccd == CY_BLE_CCCD_NOTIFICATION))
{
/* Send notification to request update connection parameters */
apiResult = Cy_BLE_SCPSS_SendNotification(connHandle, CY_BLE_SCPS_SCAN_REFRESH, sizeof(refresh), &refresh);
if(apiResult != CY_BLE_SUCCESS)
{
DBG_PRINTF("Cy_BLE_SCPSS_SendNotification API Error: 0x%x \r\n", apiResult);
}
else
{
requestScanRefresh = false;
}
}
/* Cy_BLE_ProcessEvents() allows BLE stack to process pending events */
Cy_BLE_ProcessEvents();
}
}
/* [] END OF FILE */