/****************************************************************************** ##Function Name: CyBle_BascGetCharacteristicValue ******************************************************************************* Summary: This function is used to read the characteristic value from a server which is identified by charIndex. This function call can result in generation of the following events based on the response from the server device. * CYBLE_EVT_BASC_READ_CHAR_RESPONSE * CYBLE_EVT_GATTC_ERROR_RSP Parameters: connHandle: The BLE peer device connection handle. serviceIndex: Index of the service instance. e.g. If two Battery Services are supported in your design, then first service will be identified by serviceIndex of 0 and the second by serviceIndex of 1. charIndex: The index of a service characteristic of type CYBLE_BAS_CHAR_INDEX_T. Return: Return value is of type CYBLE_API_RESULT_T. * CYBLE_ERROR_OK - The read request was sent successfully * CYBLE_ERROR_INVALID_PARAMETER - Validation of the input parameters failed * CYBLE_ERROR_GATT_DB_INVALID_ATTR_HANDLE - The peer device doesn't have the particular characteristic * CYBLE_ERROR_MEMORY_ALLOCATION_FAILED - Memory allocation failed * CYBLE_ERROR_INVALID_STATE - Connection with the server is not established * CYBLE_ERROR_INVALID_OPERATION - Operation is invalid for this characteristic ******************************************************************************/ CYBLE_API_RESULT_T CyBle_BascGetCharacteristicValue(CYBLE_CONN_HANDLE_T connHandle, uint8 serviceIndex, CYBLE_BAS_CHAR_INDEX_T charIndex) { CYBLE_API_RESULT_T apiResult; if(CyBle_GetClientState() != CYBLE_CLIENT_STATE_DISCOVERED) { apiResult = CYBLE_ERROR_INVALID_STATE; } else if((serviceIndex >= CYBLE_BASC_SERVICE_COUNT) || (charIndex > CYBLE_BAS_BATTERY_LEVEL)) { apiResult = CYBLE_ERROR_INVALID_PARAMETER; } else if(cyBle_basc[serviceIndex].batteryLevel.valueHandle != CYBLE_GATT_INVALID_ATTR_HANDLE_VALUE) { apiResult = CyBle_GattcReadCharacteristicValue(connHandle, cyBle_basc[serviceIndex].batteryLevel.valueHandle); /* Save handle to support service specific read response from device */ if(apiResult == CYBLE_ERROR_OK) { cyBle_bascReqHandle = cyBle_basc[serviceIndex].batteryLevel.valueHandle; } } else { apiResult = CYBLE_ERROR_GATT_DB_INVALID_ATTR_HANDLE; } return (apiResult); }
/****************************************************************************** ##Function Name: CyBle_HrscGetCharacteristicValue ******************************************************************************* Summary: This function is used to read the characteristic Value from a server which is identified by charIndex. The Read Response returns the characteristic Value in the Attribute Value parameter. The Read Response only contains the characteristic Value that is less than or equal to (MTU - 1) octets in length. If the characteristic Value is greater than (MTU - 1) octets in length, the Read Long Characteristic Value procedure may be used if the rest of the characteristic Value is required. Parameters: connHandle: The connection handle. charIndex: The index of the service characteristic. Return: Return value is of type CYBLE_API_RESULT_T. * CYBLE_ERROR_OK - The read request was sent successfully * CYBLE_ERROR_INVALID_PARAMETER - Validation of the input parameters failed * CYBLE_ERROR_GATT_DB_INVALID_ATTR_HANDLE - The peer device doesn't have the particular characteristic * CYBLE_ERROR_MEMORY_ALLOCATION_FAILED - Memory allocation failed * CYBLE_ERROR_INVALID_STATE - Connection with the server is not established * CYBLE_ERROR_INVALID_OPERATION - Operation is invalid for this characteristic ******************************************************************************/ CYBLE_API_RESULT_T CyBle_HrscGetCharacteristicValue(CYBLE_CONN_HANDLE_T connHandle, CYBLE_HRS_CHAR_INDEX_T charIndex) { CYBLE_API_RESULT_T apiResult; if(CyBle_GetClientState() != CYBLE_CLIENT_STATE_DISCOVERED) { apiResult = CYBLE_ERROR_INVALID_STATE; } else if(charIndex >= CYBLE_HRS_CHAR_COUNT) { apiResult = CYBLE_ERROR_INVALID_PARAMETER; } else if(CYBLE_GATT_INVALID_ATTR_HANDLE_VALUE == cyBle_hrsc.charInfo[charIndex].valueHandle) { apiResult = CYBLE_ERROR_GATT_DB_INVALID_ATTR_HANDLE; } else if(0u == (CYBLE_CHAR_PROP_READ & cyBle_hrsc.charInfo[charIndex].properties)) { apiResult = CYBLE_ERROR_INVALID_OPERATION; } else { apiResult = CyBle_GattcReadCharacteristicValue(connHandle, cyBle_hrsc.charInfo[charIndex].valueHandle); if(apiResult == CYBLE_ERROR_OK) { cyBle_hrscReqHandle = cyBle_hrsc.charInfo[charIndex].valueHandle; } } return (apiResult); }
/****************************************************************************** ##Function Name: CyBle_WptscGetCharacteristicValue ******************************************************************************* Summary: This function is used to read a characteristic value, which is a value identified by charIndex, from the server. Parameters: connHandle: The connection handle. charIndex: The index of a service characteristic of type CYBLE_WPTS_CHAR_INDEX_T. Return: Return value is of type CYBLE_API_RESULT_T. * CYBLE_ERROR_OK - The read request was sent successfully. * CYBLE_ERROR_INVALID_PARAMETER - Validation of the input parameters failed. * CYBLE_ERROR_GATT_DB_INVALID_ATTR_HANDLE - The peer device doesn't have the particular characteristic. * CYBLE_ERROR_MEMORY_ALLOCATION_FAILED - Memory allocation failed. * CYBLE_ERROR_INVALID_STATE - Connection with the server is not established. * CYBLE_ERROR_INVALID_OPERATION - Operation is invalid for this characteristic. ******************************************************************************/ CYBLE_API_RESULT_T CyBle_WptscGetCharacteristicValue(CYBLE_CONN_HANDLE_T connHandle, CYBLE_WPTS_CHAR_INDEX_T charIndex) { CYBLE_API_RESULT_T apiResult; if(CyBle_GetClientState() != CYBLE_CLIENT_STATE_DISCOVERED) { apiResult = CYBLE_ERROR_INVALID_STATE; } else if(charIndex >= CYBLE_WPTS_CHAR_COUNT) { apiResult = CYBLE_ERROR_INVALID_PARAMETER; } else if(cyBle_wptsc.charInfo[charIndex].valueHandle != CYBLE_GATT_INVALID_ATTR_HANDLE_VALUE) { apiResult = CyBle_GattcReadCharacteristicValue(connHandle, cyBle_wptsc.charInfo[charIndex].valueHandle); /* Save handle to support service specific read response from device */ if(apiResult == CYBLE_ERROR_OK) { cyBle_wptscReqHandle = cyBle_wptsc.charInfo[charIndex].valueHandle; } } else { apiResult = CYBLE_ERROR_GATT_DB_INVALID_ATTR_HANDLE; } return (apiResult); }
/****************************************************************************** ##Function Name: CyBle_DiscGetCharacteristicValue ******************************************************************************* Summary: This function is used to read the characteristic Value from a server which is identified by charIndex. The Read Response returns the characteristic value in the Attribute Value parameter. The Read Response only contains the characteristic value that is less than or equal to (MTU - 1) octets in length. If the characteristic value is greater than (MTU - 1) octets in length, a Read Long Characteristic Value procedure may be used if the rest of the characteristic value is required. This function call can result in generation of the following events based on the response from the server device. * CYBLE_EVT_DISC_READ_CHAR_RESPONSE * CYBLE_EVT_GATTC_ERROR_RSP Parameters: connHandle: The connection handle. charIndex: The index of the service characteristic. Return: Return value is of type CYBLE_API_RESULT_T. * CYBLE_ERROR_OK - The read request was sent successfully * CYBLE_ERROR_INVALID_PARAMETER - Validation of the input parameters failed * CYBLE_ERROR_MEMORY_ALLOCATION_FAILED - Memory allocation failed * CYBLE_ERROR_INVALID_OPERATION - Operation is invalid for this characteristic ******************************************************************************/ CYBLE_API_RESULT_T CyBle_DiscGetCharacteristicValue(CYBLE_CONN_HANDLE_T connHandle, CYBLE_DIS_CHAR_INDEX_T charIndex) { CYBLE_API_RESULT_T apiResult; if(charIndex >= CYBLE_DIS_CHAR_COUNT) { apiResult = CYBLE_ERROR_INVALID_PARAMETER; } else { apiResult = CyBle_GattcReadCharacteristicValue(connHandle, cyBle_disc.charInfo[charIndex].valueHandle); /* Save handle to support service specific read response from device */ if(apiResult == CYBLE_ERROR_OK) { cyBle_discReqHandle = cyBle_disc.charInfo[charIndex].valueHandle; } } return (apiResult); }
/****************************************************************************** * Function Name: CyBle_AnscGetCharacteristicValue ***************************************************************************//** * * Sends a request to the peer device to get a characteristic value, as * identified by its charIndex. * * \param connHandle: The connection handle. * \param charIndex: The index of the service characteristic. * * \return * Return value is of type CYBLE_API_RESULT_T. * * CYBLE_ERROR_OK - The request was sent successfully; * * CYBLE_ERROR_INVALID_STATE - The component in in invalid state for current * operation. * * CYBLE_ERROR_INVALID_PARAMETER - Validation of the input parameters failed. * * CYBLE_ERROR_MEMORY_ALLOCATION_FAILED - Memory allocation failed. * * CYBLE_ERROR_INVALID_OPERATION - Operation is invalid for this * characteristic. * * \events * In case of successful execution (return value = CYBLE_ERROR_OK) * the next events can appear: \n * If the ANS service-specific callback is registered * (with CyBle_AnsRegisterAttrCallback): * * CYBLE_EVT_ANSC_READ_CHAR_RESPONSE - in case if the requested attribute is * successfully wrote on the peer device, * the details (char index , value, etc.) are * provided with event parameter structure * of type CYBLE_ANS_CHAR_VALUE_T. * . * Otherwise (if the ANS service-specific callback is not registered): * * CYBLE_EVT_GATTC_READ_RSP - in case if the requested attribute is * successfully read on the peer device, * the details (handle, value, etc.) are * provided with event parameters * structure (CYBLE_GATTC_READ_RSP_PARAM_T). * * CYBLE_EVT_GATTC_ERROR_RSP - in case if there some trouble with the * requested attribute on the peer device, * the details are provided with event parameters * structure (CYBLE_GATTC_ERR_RSP_PARAM_T). * ******************************************************************************/ CYBLE_API_RESULT_T CyBle_AnscGetCharacteristicValue(CYBLE_CONN_HANDLE_T connHandle, CYBLE_ANS_CHAR_INDEX_T charIndex) { CYBLE_GATT_DB_ATTR_HANDLE_T tmpCharHandle; CYBLE_API_RESULT_T apiResult = CYBLE_ERROR_OK; if(CyBle_GetClientState() != CYBLE_CLIENT_STATE_DISCOVERED) { apiResult = CYBLE_ERROR_INVALID_STATE; } else { /* Select characteristic */ switch(charIndex) { case CYBLE_ANS_SUPPORTED_NEW_ALERT_CAT: tmpCharHandle = cyBle_ansc.characteristics[CYBLE_ANS_SUPPORTED_NEW_ALERT_CAT].charInfo.valueHandle; break; case CYBLE_ANS_SUPPORTED_UNREAD_ALERT_CAT: tmpCharHandle = cyBle_ansc.characteristics[CYBLE_ANS_SUPPORTED_UNREAD_ALERT_CAT].charInfo.valueHandle; break; default: /* Characteristic wasn't found */ apiResult = CYBLE_ERROR_INVALID_PARAMETER; break; } if(apiResult == CYBLE_ERROR_OK) { /* Send request to read characteristic value */ apiResult = CyBle_GattcReadCharacteristicValue(connHandle, tmpCharHandle); if(apiResult == CYBLE_ERROR_OK) { cyBle_anscReqHandle = tmpCharHandle; } } } return(apiResult); }
/****************************************************************************** ##Function Name: CyBle_LlscGetCharacteristicValue ******************************************************************************* Summary: Sends a request to get characteristic value of the Link Loss Service, which is identified by charIndex. This function call can result in generation of the following events based on the response from the server device: * CYBLE_EVT_LLSC_READ_CHAR_RESPONSE * CYBLE_EVT_GATTC_ERROR_RSP Parameters: connHandle: The connection handle. charIndex: The index of the Link Loss Service characteristic. Return: Return value is of type CYBLE_API_RESULT_T. * CYBLE_ERROR_OK - The request was sent successfully * CYBLE_ERROR_INVALID_PARAMETER - Validation of the input parameters failed * CYBLE_ERROR_MEMORY_ALLOCATION_FAILED - Memory allocation failed. * CYBLE_ERROR_INVALID_STATE - Connection with the server is not established * CYBLE_ERROR_INVALID_OPERATION - Operation is invalid for this characteristic ******************************************************************************/ CYBLE_API_RESULT_T CyBle_LlscGetCharacteristicValue(CYBLE_CONN_HANDLE_T connHandle, CYBLE_LLS_CHAR_INDEX_T charIndex) { CYBLE_API_RESULT_T apiResult = CYBLE_ERROR_INVALID_PARAMETER; if(CyBle_GetClientState() != CYBLE_CLIENT_STATE_DISCOVERED) { apiResult = CYBLE_ERROR_INVALID_STATE; } else if((CYBLE_LLS_ALERT_LEVEL == charIndex)) { cyBle_llscReqHandle = cyBle_llsc.alertLevelChar.valueHandle; /* Send request to write Alert Level characteristic value */ apiResult = CyBle_GattcReadCharacteristicValue(connHandle, cyBle_llsc.alertLevelChar.valueHandle); } else { /* apiResult equals CYBLE_ERROR_INVALID_PARAMETER */ } /* Return status */ return(apiResult); }