mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			PSOC6: minor updates to Cypress HAL
							parent
							
								
									edb944abf0
								
							
						
					
					
						commit
						c97f742bd7
					
				| 
						 | 
				
			
			@ -44,7 +44,7 @@ const uint32_t SAR_BASE_CLOCK_HZ = 18000000;    // 18 MHz or less
 | 
			
		|||
    CY_SAR_CHAN_SAMPLE_TIME_0 \
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
#define CY_SAR_PORT_9   (9uL)  
 | 
			
		||||
#define CY_SAR_PORT_9   (9uL)
 | 
			
		||||
 | 
			
		||||
/** Global SAR configuration data, modified as channels are configured.
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			@ -173,11 +173,10 @@ uint16_t analogin_read_u16(analogin_t *obj)
 | 
			
		|||
    if (CY_SAR_PORT_9 != port) {
 | 
			
		||||
        /* Connect the SAR Vplus input to the pin directly */
 | 
			
		||||
        Cy_SAR_SetAnalogSwitch(obj->base, CY_SAR_MUX_SWITCH0, obj->channel_mask, CY_SAR_SWITCH_CLOSE);
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
    } else {
 | 
			
		||||
        /* Connect the SAR Vplus input to the AMUXA bus */
 | 
			
		||||
        Cy_SAR_SetAnalogSwitch(obj->base, CY_SAR_MUX_SWITCH0, SAR_MUX_SWITCH0_MUX_FW_AMUXBUSA_VPLUS_Msk, CY_SAR_SWITCH_CLOSE);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /* Connect the AMUXA bus to the pin */
 | 
			
		||||
        Cy_GPIO_SetHSIOM(portPrt, CY_PIN(obj->pin), HSIOM_SEL_AMUXA);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -188,15 +187,14 @@ uint16_t analogin_read_u16(analogin_t *obj)
 | 
			
		|||
    } else {
 | 
			
		||||
        error("ANALOG IN: measurement failed!");
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
    if (CY_SAR_PORT_9 != port) {
 | 
			
		||||
        /* Disconnect the SAR Vplus input from the pin */
 | 
			
		||||
        Cy_SAR_SetAnalogSwitch(obj->base, CY_SAR_MUX_SWITCH0, obj->channel_mask, CY_SAR_SWITCH_OPEN);
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
    } else {
 | 
			
		||||
        /* Disconnect the AMUXA bus from the pin */
 | 
			
		||||
        Cy_GPIO_SetHSIOM(portPrt, CY_PIN(obj->pin), HSIOM_SEL_GPIO);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /* Disconnect the SAR Vplus input from the AMUXA bus */
 | 
			
		||||
        Cy_SAR_SetAnalogSwitch(obj->base, CY_SAR_MUX_SWITCH0, SAR_MUX_SWITCH0_MUX_FW_AMUXBUSA_VPLUS_Msk, CY_SAR_SWITCH_OPEN);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,11 +26,11 @@
 | 
			
		|||
 | 
			
		||||
#include "cy_crypto_core_crc.h"
 | 
			
		||||
 | 
			
		||||
static uint32_t crcWidth = 0;
 | 
			
		||||
static uint32_t crcShift = 0;
 | 
			
		||||
static uint32_t crcWidth = 0UL;
 | 
			
		||||
static uint32_t crcShift = 0UL;
 | 
			
		||||
static uint32_t crcXorMask;
 | 
			
		||||
 | 
			
		||||
/* Cypress CRYPTO HW supports ANY CRC algorithms from CRC-3 to CRC-32 */
 | 
			
		||||
/* Cypress CRYPTO hardware supports any CRC algorithms from CRC-3 to CRC-32 */
 | 
			
		||||
bool hal_crc_is_supported(const crc_mbed_config_t *config)
 | 
			
		||||
{
 | 
			
		||||
    return (config != NULL);
 | 
			
		||||
| 
						 | 
				
			
			@ -38,20 +38,19 @@ bool hal_crc_is_supported(const crc_mbed_config_t *config)
 | 
			
		|||
 | 
			
		||||
void hal_crc_compute_partial_start(const crc_mbed_config_t *config)
 | 
			
		||||
{
 | 
			
		||||
    uint32_t myMask = 0;
 | 
			
		||||
    uint32_t myMask = 0UL;
 | 
			
		||||
 | 
			
		||||
    if (!hal_crc_is_supported(config) || (cy_reserve_crypto(CY_CRYPTO_CRC_HW) != 0))
 | 
			
		||||
    {
 | 
			
		||||
    if (!hal_crc_is_supported(config) || (cy_reserve_crypto(CY_CRYPTO_CRC_HW) != 0U)) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    crcWidth = config->width;
 | 
			
		||||
 | 
			
		||||
    crcShift = (uint32_t)(!config->reflect_out) * (crcWidth & 7u);
 | 
			
		||||
    if (crcShift) {
 | 
			
		||||
        crcShift = 8u - crcShift;
 | 
			
		||||
        for (uint32_t i = 0; i < crcShift; i++) {
 | 
			
		||||
            myMask |= 1 << i;
 | 
			
		||||
    crcShift = (uint32_t)(!config->reflect_out) * (crcWidth & 7U);
 | 
			
		||||
    if (0U != crcShift) {
 | 
			
		||||
        crcShift = 8U - crcShift;
 | 
			
		||||
        for (uint32_t i = 0U; i < crcShift; i++) {
 | 
			
		||||
            myMask |= 1U << i;
 | 
			
		||||
        }
 | 
			
		||||
        crcXorMask = config->final_xor & myMask;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -59,7 +58,7 @@ void hal_crc_compute_partial_start(const crc_mbed_config_t *config)
 | 
			
		|||
    Cy_Crypto_Core_Crc_CalcInit(CRYPTO, config->width,
 | 
			
		||||
                                config->polynomial,
 | 
			
		||||
                                config->reflect_in,
 | 
			
		||||
                                0,
 | 
			
		||||
                                0U,
 | 
			
		||||
                                config->reflect_out,
 | 
			
		||||
                                config->final_xor >> crcShift,
 | 
			
		||||
                                config->initial_xor);
 | 
			
		||||
| 
						 | 
				
			
			@ -67,7 +66,7 @@ void hal_crc_compute_partial_start(const crc_mbed_config_t *config)
 | 
			
		|||
 | 
			
		||||
void hal_crc_compute_partial(const uint8_t *data, const size_t size)
 | 
			
		||||
{
 | 
			
		||||
    if ((data == NULL) || (size <= 0) || (crcWidth == 0)) {
 | 
			
		||||
    if ((data == NULL) || (size <= 0U) || (crcWidth == 0U)) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -76,10 +75,10 @@ void hal_crc_compute_partial(const uint8_t *data, const size_t size)
 | 
			
		|||
 | 
			
		||||
uint32_t hal_crc_get_result(void)
 | 
			
		||||
{
 | 
			
		||||
    uint32_t result = 0;
 | 
			
		||||
    uint32_t result = 0UL;
 | 
			
		||||
 | 
			
		||||
    if (crcWidth == 0) {
 | 
			
		||||
        return 0xffffffffu;
 | 
			
		||||
    if (crcWidth == 0UL) {
 | 
			
		||||
        return 0xFFFFFFFFUL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Cy_Crypto_Core_Crc_CalcFinish(CRYPTO, crcWidth, &result);
 | 
			
		||||
| 
						 | 
				
			
			@ -89,7 +88,7 @@ uint32_t hal_crc_get_result(void)
 | 
			
		|||
        result = result ^  crcXorMask;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    crcWidth = 0;
 | 
			
		||||
    crcWidth = 0UL;
 | 
			
		||||
 | 
			
		||||
    cy_free_crypto(CY_CRYPTO_CRC_HW);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -360,9 +360,9 @@ static uint8_t  crypto_reservations[NUM_CRYPTO_HW] = { 0u };
 | 
			
		|||
static int cy_crypto_reserved_status(void)
 | 
			
		||||
{
 | 
			
		||||
    return ((int)(crypto_reservations[CY_CRYPTO_TRNG_HW] |
 | 
			
		||||
             crypto_reservations[CY_CRYPTO_CRC_HW]  |
 | 
			
		||||
             crypto_reservations[CY_CRYPTO_VU_HW]  |
 | 
			
		||||
             crypto_reservations[CY_CRYPTO_COMMON_HW]));
 | 
			
		||||
                  crypto_reservations[CY_CRYPTO_CRC_HW]  |
 | 
			
		||||
                  crypto_reservations[CY_CRYPTO_VU_HW]  |
 | 
			
		||||
                  crypto_reservations[CY_CRYPTO_COMMON_HW]));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -370,26 +370,20 @@ int cy_reserve_crypto(cy_en_crypto_submodule_t module_num)
 | 
			
		|||
{
 | 
			
		||||
    int result = (-1);
 | 
			
		||||
 | 
			
		||||
    if (module_num < NUM_CRYPTO_HW)
 | 
			
		||||
    {
 | 
			
		||||
    if (module_num < NUM_CRYPTO_HW) {
 | 
			
		||||
        core_util_critical_section_enter();
 | 
			
		||||
 | 
			
		||||
        if (cy_crypto_reserved_status() == 0)
 | 
			
		||||
        {
 | 
			
		||||
        if (cy_crypto_reserved_status() == 0) {
 | 
			
		||||
            /* Enable Crypto IP on demand */
 | 
			
		||||
            Cy_Crypto_Core_Enable(CRYPTO);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (module_num == CY_CRYPTO_COMMON_HW)
 | 
			
		||||
        {
 | 
			
		||||
            if (crypto_reservations[module_num] != 1)
 | 
			
		||||
            {
 | 
			
		||||
        if (module_num == CY_CRYPTO_COMMON_HW) {
 | 
			
		||||
            if (crypto_reservations[module_num] != 1) {
 | 
			
		||||
                crypto_reservations[module_num] = 1;
 | 
			
		||||
                result = 0;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
        } else {
 | 
			
		||||
            crypto_reservations[module_num] = 1;
 | 
			
		||||
            result = 0;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -405,16 +399,13 @@ void cy_free_crypto(cy_en_crypto_submodule_t module_num)
 | 
			
		|||
{
 | 
			
		||||
    int result = (-1);
 | 
			
		||||
 | 
			
		||||
    if (module_num < NUM_CRYPTO_HW)
 | 
			
		||||
    {
 | 
			
		||||
    if (module_num < NUM_CRYPTO_HW) {
 | 
			
		||||
        core_util_critical_section_enter();
 | 
			
		||||
 | 
			
		||||
        if (crypto_reservations[module_num] == 1)
 | 
			
		||||
        {
 | 
			
		||||
        if (crypto_reservations[module_num] == 1) {
 | 
			
		||||
            crypto_reservations[module_num] = 0;
 | 
			
		||||
 | 
			
		||||
            if (cy_crypto_reserved_status() == 0)
 | 
			
		||||
            {
 | 
			
		||||
            if (cy_crypto_reserved_status() == 0) {
 | 
			
		||||
                /* Crypto hardware is still in enabled state; to disable:
 | 
			
		||||
                   Cy_Crypto_Core_Disable(CRYPTO) */
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -215,8 +215,7 @@ static inline uint32_t gpio_get_cy_drive_mode(PinDirection dir, PinMode mode)
 | 
			
		|||
    return cymode;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
typedef enum
 | 
			
		||||
{
 | 
			
		||||
typedef enum {
 | 
			
		||||
    CY_CRYPTO_TRNG_HW,
 | 
			
		||||
    CY_CRYPTO_CRC_HW,
 | 
			
		||||
    CY_CRYPTO_VU_HW,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -73,7 +73,7 @@ static void pwm_start_32b(pwmout_t *obj, uint32_t new_period, uint32_t new_width
 | 
			
		|||
    Cy_TCPWM_PWM_SetPeriod0(obj->base, obj->counter_id, obj->period - 1);
 | 
			
		||||
    Cy_TCPWM_PWM_SetCompare0(obj->base, obj->counter_id, obj->pulse_width);
 | 
			
		||||
    Cy_TCPWM_PWM_Enable(obj->base, obj->counter_id);
 | 
			
		||||
    Cy_TCPWM_TriggerStart(obj->base, 1UL << obj->counter_id);
 | 
			
		||||
    Cy_TCPWM_TriggerReloadOrIndex(obj->base, 1UL << obj->counter_id);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void pwm_start_16b(pwmout_t *obj, uint32_t period, uint32_t width)
 | 
			
		||||
| 
						 | 
				
			
			@ -101,7 +101,7 @@ static void pwm_start_16b(pwmout_t *obj, uint32_t period, uint32_t width)
 | 
			
		|||
    Cy_TCPWM_PWM_SetPrescaler(obj->base, obj->counter_id, prescaler);
 | 
			
		||||
    Cy_TCPWM_PWM_SetCompare0(obj->base, obj->counter_id, width);
 | 
			
		||||
    Cy_TCPWM_PWM_Enable(obj->base, obj->counter_id);
 | 
			
		||||
    Cy_TCPWM_TriggerStart(obj->base, 1UL << obj->counter_id);
 | 
			
		||||
    Cy_TCPWM_TriggerReloadOrIndex(obj->base, 1UL << obj->counter_id);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void pwm_start(pwmout_t *obj, uint32_t new_period, uint32_t new_pulse_width)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -383,13 +383,16 @@ static void serial_init_peripheral(serial_obj_t *obj)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Callback function to handle into and out of deep sleep state transitions.
 | 
			
		||||
 */
 | 
			
		||||
#if DEVICE_SLEEP && DEVICE_LPTICKER && SERIAL_PM_CALLBACK_ENABLED
 | 
			
		||||
static cy_en_syspm_status_t serial_pm_callback(cy_stc_syspm_callback_params_t *params)
 | 
			
		||||
static cy_en_syspm_status_t serial_pm_callback(cy_stc_syspm_callback_params_t *callbackParams, cy_en_syspm_callback_mode_t mode)
 | 
			
		||||
{
 | 
			
		||||
    serial_obj_t *obj = (serial_obj_t *)params->context;
 | 
			
		||||
    serial_obj_t *obj = (serial_obj_t *) callbackParams->context;
 | 
			
		||||
    cy_en_syspm_status_t status = CY_SYSPM_FAIL;
 | 
			
		||||
 | 
			
		||||
    switch (params->mode) {
 | 
			
		||||
    switch (mode) {
 | 
			
		||||
        case CY_SYSPM_CHECK_READY:
 | 
			
		||||
            /* If all data elements are transmitted from the TX FIFO and
 | 
			
		||||
            * shifter and the RX FIFO is empty: the UART is ready to enter
 | 
			
		||||
| 
						 | 
				
			
			@ -432,7 +435,7 @@ static cy_en_syspm_status_t serial_pm_callback(cy_stc_syspm_callback_params_t *p
 | 
			
		|||
 | 
			
		||||
    return status;
 | 
			
		||||
}
 | 
			
		||||
#endif /* (DEVICE_SLEEP && DEVICE_LPTICKER && SERIAL_PM_CALLBACK_ENABLED) */
 | 
			
		||||
#endif /* DEVICE_SLEEP && DEVICE_LPTICKER && SERIAL_PM_CALLBACK_ENABLED */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void serial_init(serial_t *obj_in, PinName tx, PinName rx)
 | 
			
		||||
| 
						 | 
				
			
			@ -492,16 +495,16 @@ void serial_init(serial_t *obj_in, PinName tx, PinName rx)
 | 
			
		|||
#if DEVICE_SLEEP && DEVICE_LPTICKER && SERIAL_PM_CALLBACK_ENABLED
 | 
			
		||||
                /* Register callback once */
 | 
			
		||||
                obj->pm_callback_handler.callback = serial_pm_callback;
 | 
			
		||||
                obj->pm_callback_handler.type = CY_SYSPM_DEEPSLEEP;
 | 
			
		||||
                obj->pm_callback_handler.type     = CY_SYSPM_DEEPSLEEP;
 | 
			
		||||
                obj->pm_callback_handler.skipMode = 0;
 | 
			
		||||
                obj->pm_callback_handler.callbackParams = &obj->pm_callback_params;
 | 
			
		||||
                obj->pm_callback_params.base = obj->base;
 | 
			
		||||
                obj->pm_callback_params.base    = obj->base;
 | 
			
		||||
                obj->pm_callback_params.context = obj;
 | 
			
		||||
 | 
			
		||||
                if (!Cy_SysPm_RegisterCallback(&obj->pm_callback_handler)) {
 | 
			
		||||
                    error("PM callback registration failed!");
 | 
			
		||||
                }
 | 
			
		||||
#endif /* (DEVICE_SLEEP && DEVICE_LPTICKER && SERIAL_PM_CALLBACK_ENABLED) */
 | 
			
		||||
#endif /* DEVICE_SLEEP && DEVICE_LPTICKER && SERIAL_PM_CALLBACK_ENABLED */
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            /* Configure hardware resources */
 | 
			
		||||
| 
						 | 
				
			
			@ -666,9 +669,10 @@ void serial_set_flow_control(serial_t *obj_in, FlowControl type, PinName rxflow,
 | 
			
		|||
{
 | 
			
		||||
    serial_obj_t *obj = OBJ_P(obj_in);
 | 
			
		||||
 | 
			
		||||
    /* Do not perform pins reservation second time for the same pins */ 
 | 
			
		||||
    if ((obj->pin_rts == rxflow) && (obj->pin_cts == txflow))
 | 
			
		||||
    /* Do not perform pins reservation second time for the same pins */
 | 
			
		||||
    if ((obj->pin_rts == rxflow) && (obj->pin_cts == txflow)) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Cy_SCB_UART_Disable(obj->base, NULL);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -237,16 +237,16 @@ static void spi_init_peripheral(spi_obj_t *obj)
 | 
			
		|||
/* Callback function to handle into and out of deep sleep state transitions.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
#if DEVICE_SLEEP && DEVICE_LOWPOWERTIMER
 | 
			
		||||
static cy_en_syspm_status_t spi_pm_callback(cy_stc_syspm_callback_params_t *callback_params)
 | 
			
		||||
#if DEVICE_SLEEP && DEVICE_LPTICKER
 | 
			
		||||
static cy_en_syspm_status_t spi_pm_callback(cy_stc_syspm_callback_params_t *callback_params, cy_en_syspm_callback_mode_t mode)
 | 
			
		||||
{
 | 
			
		||||
    cy_stc_syspm_callback_params_t params = *callback_params;
 | 
			
		||||
    spi_obj_t *obj = (spi_obj_t *)params.context;
 | 
			
		||||
    params.context = &obj->context;
 | 
			
		||||
 | 
			
		||||
    return Cy_SCB_SPI_DeepSleepCallback(¶ms);
 | 
			
		||||
    return Cy_SCB_SPI_DeepSleepCallback(¶ms, mode);
 | 
			
		||||
}
 | 
			
		||||
#endif /* DEVICE_SLEEP && DEVICE_LOWPOWERTIMER */
 | 
			
		||||
#endif /* DEVICE_SLEEP && DEVICE_LPTICKER */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void spi_init(spi_t *obj_in, PinName mosi, PinName miso, PinName sclk, PinName ssel)
 | 
			
		||||
| 
						 | 
				
			
			@ -314,7 +314,7 @@ void spi_init(spi_t *obj_in, PinName mosi, PinName miso, PinName sclk, PinName s
 | 
			
		|||
            obj->div_num  = _FLD2VAL(CY_PERI_CLOCK_CTL_DIV_SEL,  map);
 | 
			
		||||
            obj->div_type = (cy_en_divider_types_t) _FLD2VAL(CY_PERI_CLOCK_CTL_TYPE_SEL, map);
 | 
			
		||||
        } else {
 | 
			
		||||
#if DEVICE_SLEEP && DEVICE_LOWPOWERTIMER
 | 
			
		||||
#if DEVICE_SLEEP && DEVICE_LPTICKER
 | 
			
		||||
            /* Register callback once */
 | 
			
		||||
            obj->pm_callback_handler.callback = spi_pm_callback;
 | 
			
		||||
            obj->pm_callback_handler.type     = CY_SYSPM_DEEPSLEEP;
 | 
			
		||||
| 
						 | 
				
			
			@ -326,7 +326,7 @@ void spi_init(spi_t *obj_in, PinName mosi, PinName miso, PinName sclk, PinName s
 | 
			
		|||
            if (!Cy_SysPm_RegisterCallback(&obj->pm_callback_handler)) {
 | 
			
		||||
                error("PM callback registration failed!");
 | 
			
		||||
            }
 | 
			
		||||
#endif /* DEVICE_SLEEP && DEVICE_LOWPOWERTIMER */
 | 
			
		||||
#endif /* DEVICE_SLEEP && DEVICE_LPTICKER */
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* Configure hardware resources */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,8 +24,8 @@
 | 
			
		|||
#include "cy_crypto_core_trng.h"
 | 
			
		||||
 | 
			
		||||
/* Initialization polynomial values fro True Random Generator */
 | 
			
		||||
#define GARO31_INITSTATE          (0x04c11db7u)
 | 
			
		||||
#define FIRO31_INITSTATE          (0x04c11db7u)
 | 
			
		||||
#define GARO31_INITSTATE          (0x04c11db7UL)
 | 
			
		||||
#define FIRO31_INITSTATE          (0x04c11db7UL)
 | 
			
		||||
 | 
			
		||||
#define MAX_TRNG_BIT_SIZE         (32UL)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -47,7 +47,7 @@ void trng_free(trng_t *obj)
 | 
			
		|||
int trng_get_bytes(trng_t *obj, uint8_t *output, size_t length, size_t *output_length)
 | 
			
		||||
{
 | 
			
		||||
    int ret = 0;
 | 
			
		||||
    *output_length = 0;
 | 
			
		||||
    *output_length = 0U;
 | 
			
		||||
 | 
			
		||||
    /* temporary random data buffer */
 | 
			
		||||
    uint32_t random;
 | 
			
		||||
| 
						 | 
				
			
			@ -59,13 +59,13 @@ int trng_get_bytes(trng_t *obj, uint8_t *output, size_t length, size_t *output_l
 | 
			
		|||
        if (Cy_Crypto_Core_Trng(CRYPTO, GARO31_INITSTATE, FIRO31_INITSTATE, MAX_TRNG_BIT_SIZE, &random) != CY_CRYPTO_SUCCESS) {
 | 
			
		||||
            ret = -1;
 | 
			
		||||
        } else {
 | 
			
		||||
            for (uint8_t i = 0; (i < 4) && (*output_length < length) ; i++) {
 | 
			
		||||
            for (uint8_t i = 0; (i < 4U) && (*output_length < length) ; i++) {
 | 
			
		||||
                *output++ = ((uint8_t *)&random)[i];
 | 
			
		||||
                *output_length += 1;
 | 
			
		||||
                *output_length += 1U;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    random = 0uL;
 | 
			
		||||
    random = 0UL;
 | 
			
		||||
 | 
			
		||||
    return (ret);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue