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

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 */