1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/**
* \file
* \brief FreeRTOS Hardware/OS Abstration Layer.
*
* \copyright (c) 2015-2020 Microchip Technology Inc. and its subsidiaries.
*
* \page License
*
* Subject to your compliance with these terms, you may use Microchip software
* and any derivatives exclusively with Microchip products. It is your
* responsibility to comply with third party license terms applicable to your
* use of third party software (including open source software) that may
* accompany Microchip software.
*
* THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
* EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY IMPLIED
* WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A
* PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT,
* SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE
* OF ANY KIND WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF
* MICROCHIP HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE
* FORESEEABLE. TO THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL
* LIABILITY ON ALL CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED
* THE AMOUNT OF FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR
* THIS SOFTWARE.
*/
#include "atca_hal.h"
#include "FreeRTOS.h"
#include "semphr.h"
#include "task.h"
#ifndef ATCA_MUTEX_TIMEOUT
#define ATCA_MUTEX_TIMEOUT portMAX_DELAY
#endif
/**
* \defgroup hal_ Hardware abstraction layer (hal_)
*
* \brief
* These methods define the hardware abstraction layer for communicating with a CryptoAuth device
*
@{ */
/**
* \brief This function delays for a number of milliseconds.
*
* You can override this function if you like to do
* something else in your system while delaying.
*
* \param[in] delay Number of milliseconds to delay
*/
#if INCLUDE_xTaskGetSchedulerState == 0
void hal_rtos_delay_ms(uint32_t delay)
{
#if ATCA_USE_RTOS_TIMER
vTaskDelay(pdMS_TO_TICKS(delay) + 1);
#else
hal_delay_ms(delay);
#endif
}
#else
void hal_rtos_delay_ms(uint32_t delay)
{
/* If the freeRTOS scheduler is running yield to other tasks */
if (taskSCHEDULER_RUNNING == xTaskGetSchedulerState())
{
vTaskDelay(pdMS_TO_TICKS(delay) + 1);
}
else
{
hal_delay_ms(delay);
}
}
#endif
ATCA_STATUS hal_create_mutex(void ** ppMutex, char* pName)
{
(void)pName;
if (!ppMutex)
{
return ATCA_BAD_PARAM;
}
(*ppMutex) = xSemaphoreCreateMutex();
if (!*ppMutex)
{
return ATCA_FUNC_FAIL;
}
return ATCA_SUCCESS;
}
ATCA_STATUS hal_destroy_mutex(void * pMutex)
{
if (!pMutex)
{
return ATCA_BAD_PARAM;
}
vSemaphoreDelete(pMutex);
return ATCA_SUCCESS;
}
ATCA_STATUS hal_lock_mutex(void * pMutex)
{
if (!pMutex)
{
return ATCA_BAD_PARAM;
}
if (!xSemaphoreTake((SemaphoreHandle_t)pMutex, ( TickType_t )ATCA_MUTEX_TIMEOUT))
{
return ATCA_GEN_FAIL;
}
else
{
return ATCA_SUCCESS;
}
}
ATCA_STATUS hal_unlock_mutex(void * pMutex)
{
if (!pMutex)
{
return ATCA_BAD_PARAM;
}
if (!xSemaphoreGive((SemaphoreHandle_t)pMutex))
{
return ATCA_GEN_FAIL;
}
else
{
return ATCA_SUCCESS;
}
}
/** @} */