-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHAL.c
202 lines (183 loc) · 3.56 KB
/
HAL.c
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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
/**
* \file HAL.c
* \brief implémantation de la couche d'abstraction matérielle
* \details This file include all driver header or wrapper but not hardware file
*/
#include <stdlib.h>
#include <string.h>
#include "include/globaletypedef.h"
#include "include/PeriphMaster.h"
#include "include/HAL.h"
#include "include/init.h"
#include "include/DALI2C.h" //wrapper for driver I2C come fram atmel
#include "include/isr.h" //driver of interruption
#include "include/pwm.h"
#include "include/utility.h" //wrapper
sPort* initCom(const ePortType porttype,const uchar PortNum,const sParam param)
{
sPort* pPort = malloc(sizeof(sPort));
pPort->statu = IDLE;
pPort->num = newNumCom();
pPort->data.id = PortNum;
pPort->data.rw = READ;
pPort->data.DataType = PINGI2C;
pPort->data.pData = malloc(1); //on aloue 1 octet par defaut
switch(porttype)
{
case I2CSLAVE :
initComI2CSlave(PortNum); //general call always activated
break;
default:
break;
}
return pPort;
}
/**
* \brief ferme le port
*
* \param [in] spData pointeur vers les donnes du port
* \return rien
*
* \details Details
*/
void closeCom(sPort * port )
{
}
/**
* \brief récuopére les données du port
*
* \param [in] port pointeur sur le port
* \return pointeur sur les données
*
* \details Details
*/
uchar* getData(const sPort *port)
{
switch(port->type)
{
case I2CSLAVE :
return getDataI2CSlave(port); //general call always activated
default:
break;
}
return NULL;
}
/**
* \brief set data on port
*
* \param [in] port pointer on port
* \return status of port
*
* \details Details
*/eStatus setData(const sPort *port)
{
switch(port->type)
{
case I2CSLAVE :
setDataI2CSlave(port); //general call always activated
break;
default:
break;
}
return (getStatus(port));
}
/**
* \brief renvoie la longueur de la donnée
*
* \param [in] port pointeur sur le port
* \return longueur des donnees
*
* \details Details
*/
uint getDataLength(const sPort *port)
{
uint len;
switch(port->data.DataType)
{
case PINGI2C :
len = PINGLENGHT;
break;
case GPIOBIT :
len = GPIOBITLENGTH;
break;
case GPIOPORT :
len = GPIOPORTLENGTH;
break;
case CURRENTCHANNEL :
len = CURRENTCHANNELLENGTH;
break;
default:
len = 0;
break;
}
return len;
}
/**
* \brief renvoi le statu du port
*
* \param [in] port pointeur sur le port
* \return statu
*
* \details Details
*/
eStatus getStatus(const sPort *port)
{
return port->statu;
}
/**
* \brief return unique id for a new port
*
* \return unique id
*
* \details limited to 254 device from 1 to 254 return 0 if fail
*/
uchar newNumCom()
{
static uchar id = 0;
if (id==255)
id = 0;
else
id++;
return id;
}
/**
* \brief give num of port
*
* \param [in] port pointer to port
* \return num port
*
* \details Details
*/
uchar numCom(const sPort *port)
{
return port->num;
}
/**
* \brief Brief
*
* \param [in] port port to change
* \param [in] bit bit in port to change
* \return nothing
*
* \details Details
*/void setGpioBit(const uchar numgpio,eBool val)
{
switch(numgpio)
{
case 0 :
GPIO(0,val); //c'est une macro
break;
case 1 :
GPIO(1,val); //c'est une macro le premier caractére est substituer et ne peut donc par etre variable
break;
case 2 :
GPIO(2,val); //c'est une macro
break;
default:
break;
}
/*if (val==true)
setGPIO(numgpio);
else
resetGPIO(numgpio);*/
}