297 lines
7.4 KiB
C
297 lines
7.4 KiB
C
/*******************************************************************************
|
|
* File Name: debug.c
|
|
*
|
|
* Version: 1.0
|
|
*
|
|
* Description:
|
|
* This file contains functions for printf functionality.
|
|
*
|
|
* 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 "user_interface.h"
|
|
|
|
#if (DEBUG_UART_ENABLED == ENABLED)
|
|
|
|
#if defined(__ARMCC_VERSION)
|
|
|
|
/* For MDK/RVDS compiler revise fputc function for printf functionality */
|
|
struct __FILE
|
|
{
|
|
int handle;
|
|
};
|
|
|
|
enum
|
|
{
|
|
STDIN_HANDLE,
|
|
STDOUT_HANDLE,
|
|
STDERR_HANDLE
|
|
};
|
|
|
|
FILE __stdin = {STDIN_HANDLE};
|
|
FILE __stdout = {STDOUT_HANDLE};
|
|
FILE __stderr = {STDERR_HANDLE};
|
|
|
|
int fputc(int ch, FILE *file)
|
|
{
|
|
int ret = EOF;
|
|
|
|
switch( file->handle )
|
|
{
|
|
case STDOUT_HANDLE:
|
|
UART_DEB_PUT_CHAR(ch);
|
|
ret = ch ;
|
|
break ;
|
|
|
|
case STDERR_HANDLE:
|
|
ret = ch ;
|
|
break ;
|
|
|
|
default:
|
|
file = file;
|
|
break ;
|
|
}
|
|
return ret ;
|
|
}
|
|
|
|
#elif defined (__ICCARM__) /* IAR */
|
|
|
|
/* For IAR compiler revise __write() function for printf functionality */
|
|
size_t __write(int handle, const unsigned char * buffer, size_t size)
|
|
{
|
|
size_t nChars = 0;
|
|
|
|
if (buffer == 0)
|
|
{
|
|
/*
|
|
* This means that we should flush internal buffers. Since we
|
|
* don't we just return. (Remember, "handle" == -1 means that all
|
|
* handles should be flushed.)
|
|
*/
|
|
return (0);
|
|
}
|
|
|
|
for (/* Empty */; size != 0; --size)
|
|
{
|
|
UART_DEB_PUT_CHAR(*buffer);
|
|
++buffer;
|
|
++nChars;
|
|
}
|
|
|
|
return (nChars);
|
|
}
|
|
|
|
#else /* (__GNUC__) GCC */
|
|
|
|
/* For GCC compiler revise _write() function for printf functionality */
|
|
int _write(int file, char *ptr, int len)
|
|
{
|
|
int i;
|
|
file = file;
|
|
for (i = 0; i < len; i++)
|
|
{
|
|
UART_DEB_PUT_CHAR(*ptr);
|
|
++ptr;
|
|
}
|
|
return len;
|
|
}
|
|
|
|
|
|
#endif /* (__ARMCC_VERSION) */
|
|
|
|
#endif /* DEBUG_UART_ENABLED == ENABLED */
|
|
|
|
void ShowValue(cy_stc_ble_gatt_value_t *value)
|
|
{
|
|
int16_t i;
|
|
|
|
for(i = 0; i < value->len; i++)
|
|
{
|
|
DBG_PRINTF("%2.2x ", value->val[i]);
|
|
}
|
|
DBG_PRINTF("\r\n");
|
|
}
|
|
|
|
|
|
void Set32ByPtr(uint8_t ptr[], uint32_t value)
|
|
{
|
|
ptr[0u] = (uint8_t) value;
|
|
ptr[1u] = (uint8_t) (value >> 8u);
|
|
ptr[2u] = (uint8_t) (value >> 16u);
|
|
ptr[3u] = (uint8_t) (value >> 24u);
|
|
}
|
|
|
|
|
|
/*******************************************************************************
|
|
* Function Name: ShowError
|
|
********************************************************************************
|
|
*
|
|
* Summary:
|
|
* Shows error condition: Turn On all LEDs - white color will indicate error.
|
|
*
|
|
*******************************************************************************/
|
|
void ShowError(void)
|
|
{
|
|
EnableAllLeds();
|
|
|
|
/* Halt CPU in Debug mode */
|
|
CY_ASSERT(0u != 0u);
|
|
}
|
|
|
|
|
|
/*******************************************************************************
|
|
* Function Name: HexToAscii
|
|
********************************************************************************
|
|
*
|
|
* Summary:
|
|
* Hexadecimal to ASCII converter
|
|
*
|
|
* Parameters:
|
|
* value: Hexadecimal value
|
|
* digit: Which nibble to be obtained
|
|
*
|
|
* Return:
|
|
* char: the ASCII equivalent of that nibble
|
|
*
|
|
* Theory:
|
|
* Converts hexadecimal to ASCII
|
|
*
|
|
*******************************************************************************/
|
|
char HexToAscii(uint8_t value, uint8_t nibble)
|
|
{
|
|
if(nibble == 1)
|
|
{
|
|
value = value & 0xf0;
|
|
value = value >> 4;
|
|
|
|
/* bit-shift the result to the right by four bits (i.e. quickly divides by 16) */
|
|
if (value > 9)
|
|
{
|
|
value = value - 10 + 'A';
|
|
}
|
|
else
|
|
{
|
|
value = value + '0';
|
|
}
|
|
}
|
|
else if (nibble == 0)
|
|
{
|
|
/* means use a bitwise AND to take the bottom four bits from the byte,
|
|
0x0F is 00001111 in binary */
|
|
value = value & 0x0F;
|
|
if (value > 9)
|
|
{
|
|
value = value - 10 + 'A';
|
|
}
|
|
else
|
|
{
|
|
value = value + '0';
|
|
}
|
|
}
|
|
else
|
|
{
|
|
value = ' ';
|
|
}
|
|
|
|
return value;
|
|
}
|
|
|
|
/*******************************************************************************
|
|
* Function Name: PrintStackVersion
|
|
********************************************************************************
|
|
*
|
|
* Summary:
|
|
* Prints the BLE Stack version if the PRINT_STACK_VERSION is defined.
|
|
*
|
|
*******************************************************************************/
|
|
void PrintStackVersion(void)
|
|
{
|
|
cy_stc_ble_stack_lib_version_t stackVersion;
|
|
cy_en_ble_api_result_t apiResult;
|
|
|
|
apiResult = Cy_BLE_GetStackLibraryVersion(&stackVersion);
|
|
if(apiResult != CY_BLE_SUCCESS)
|
|
{
|
|
DBG_PRINTF("Cy_BLE_GetStackLibraryVersion API Error: ");
|
|
PrintApiResult(apiResult);
|
|
}
|
|
else
|
|
{
|
|
DBG_PRINTF("BLE Stack Version: %d.%d.%d.%d\r\n", stackVersion.majorVersion,
|
|
stackVersion.minorVersion,
|
|
stackVersion.patch,
|
|
stackVersion.buildNumber);
|
|
}
|
|
}
|
|
|
|
/*******************************************************************************
|
|
* Function Name: PrintApiResult
|
|
********************************************************************************
|
|
*
|
|
* Summary:
|
|
* Decodes and prints the apiResult global variable value.
|
|
*
|
|
*******************************************************************************/
|
|
void PrintApiResult(cy_en_ble_api_result_t apiResult)
|
|
{
|
|
DBG_PRINTF("0x%2.2x ", apiResult);
|
|
|
|
switch(apiResult)
|
|
{
|
|
case CY_BLE_SUCCESS:
|
|
DBG_PRINTF("ok\r\n");
|
|
break;
|
|
|
|
case CY_BLE_ERROR_INVALID_PARAMETER:
|
|
DBG_PRINTF("invalid parameter\r\n");
|
|
break;
|
|
|
|
case CY_BLE_ERROR_INVALID_OPERATION:
|
|
DBG_PRINTF("invalid operation\r\n");
|
|
break;
|
|
|
|
case CY_BLE_ERROR_NO_DEVICE_ENTITY:
|
|
DBG_PRINTF("no device entity\r\n");
|
|
break;
|
|
|
|
case CY_BLE_ERROR_NTF_DISABLED:
|
|
DBG_PRINTF("notification is disabled\r\n");
|
|
break;
|
|
|
|
case CY_BLE_ERROR_IND_DISABLED:
|
|
DBG_PRINTF("indication is disabled\r\n");
|
|
break;
|
|
|
|
case CY_BLE_ERROR_CHAR_IS_NOT_DISCOVERED:
|
|
DBG_PRINTF("characteristic is not discovered\r\n");
|
|
break;
|
|
|
|
case CY_BLE_ERROR_INVALID_STATE:
|
|
DBG_PRINTF("invalid state");
|
|
break;
|
|
|
|
case CY_BLE_ERROR_GATT_DB_INVALID_ATTR_HANDLE:
|
|
DBG_PRINTF("invalid attribute handle\r\n");
|
|
break;
|
|
|
|
case CY_BLE_ERROR_FLASH_WRITE_NOT_PERMITED:
|
|
DBG_PRINTF("flash write not permitted\r\n");
|
|
break;
|
|
|
|
default:
|
|
DBG_PRINTF("other api result\r\n");
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
/* [] END OF FILE */
|