source: arduino-1-6-7/trunk/fuentes/arduino-ide-amd64/hardware/arduino/avr/firmwares/wifishield/wifiHD/src/ard_utils.h @ 4837

Last change on this file since 4837 was 4837, checked in by daduve, 2 years ago

Adding new version

File size: 8.3 KB
Line 
1/*
2 * ard_utils.h
3 *
4 *  Created on: Jul 4, 2010
5 *      Author: mlf by Metodo2 srl
6 */
7
8#ifndef ARD_UTILS_H_
9#define ARD_UTILS_H_
10
11#include "gpio.h"
12#include "debug.h"
13#include "ARDUINO/arduino.h"
14#define INIT_SIGNAL_FOR_SPI()   gpio_disable_pin_pull_up(ARDUINO_HANDSHAKE_PIN);
15#define BUSY_FOR_SPI()                  gpio_set_gpio_pin(ARDUINO_HANDSHAKE_PIN)
16#define AVAIL_FOR_SPI()                 gpio_clr_gpio_pin(ARDUINO_HANDSHAKE_PIN)
17
18#define LED0_UP()                               gpio_set_gpio_pin(LED0_GPIO)
19#define LED0_DN()                               gpio_clr_gpio_pin(LED0_GPIO)
20#define LED0_TL()                               gpio_tgl_gpio_pin(LED0_GPIO)
21#define LED1_UP()                               gpio_set_gpio_pin(LED1_GPIO)
22#define LED1_DN()                               gpio_clr_gpio_pin(LED1_GPIO)
23#define LED1_TL()                               gpio_tgl_gpio_pin(LED1_GPIO)
24#define LED2_UP()                               gpio_set_gpio_pin(LED2_GPIO)
25#define LED2_DN()                               gpio_clr_gpio_pin(LED2_GPIO)
26#define LED2_TL()                               gpio_tgl_gpio_pin(LED2_GPIO)
27
28#ifdef _DEBUG_
29#define SIGN0_UP                LED0_UP
30#define SIGN0_DN                LED0_DN
31#define SIGN0_TL                LED0_TL
32#define SIGN1_UP                LED1_UP
33#define SIGN1_DN                LED1_DN
34#define SIGN1_TL                LED1_TL
35#define SIGN2_UP                LED2_UP
36#define SIGN2_DN                LED2_DN
37#define SIGN2_TL                LED2_TL
38
39#define DEB_PIN_UP(X)                   gpio_set_gpio_pin(DEB##X##_PIN_GPIO)
40#define DEB_PIN_DN(X)                   gpio_clr_gpio_pin(DEB##X##_PIN_GPIO)
41#define DEB_PIN_ENA(X)                  gpio_enable_gpio_pin(DEB##X##_PIN_GPIO)
42#define DEB_PIN_TOGGLE(X)               gpio_tgl_gpio_pin(DEB##X##_PIN_GPIO)
43#define DEB_PIN_TRIGGER(X)              DEB_PIN_DN(X);  DEB_PIN_UP(X);
44
45
46#else
47#define SIGN0_UP()
48#define SIGN0_DN()
49#define SIGN0_TL()
50#define SIGN1_UP()
51#define SIGN1_DN()
52#define SIGN1_TL()
53#define SIGN2_UP()
54#define SIGN2_DN()
55#define SIGN2_TL()
56
57#define DEB_PIN_UP(X)
58#define DEB_PIN_DN(X)
59#define DEB_PIN_ENA(X)
60#define DEB_PIN_TOGGLE(X)
61#define DEB_PIN_TRIGGER(X)
62
63//#define TOGGLE_SIG0
64#endif
65
66#define DELAY_450NS asm volatile("nop")
67#define DELAY_1uS  DELAY_450NS; DELAY_450NS;
68#define TOGGLE_SIG0()   SIGN0_UP(); DELAY_450NS;SIGN0_DN();
69
70
71#define LINK_LED_OFF    LED0_UP
72#define ERROR_LED_OFF   LED1_UP
73#define DATA_LED_OFF    LED2_UP
74
75#define LINK_LED_ON             LED0_DN
76#define ERROR_LED_ON    LED1_DN
77#define DATA_LED_ON             LED2_DN
78
79#define LINK_LED_BL             LED0_TL
80#define ERROR_LED_BL    LED1_TL
81#define DATA_LED_BL             LED2_TL
82
83
84#define CREATE_HEADER_REPLY(REPLY, RECV, NUM_PARAMS)\
85    REPLY[0] = RECV[0];                           \
86        REPLY[1] = RECV[1] | REPLY_FLAG;            \
87        REPLY[2] = NUM_PARAMS;
88
89#define CREATE_HEADER_REPLY_WAIT(REPLY, RECV, NUM_PARAMS)\
90    REPLY[0] = RECV[0];                           \
91        REPLY[1] = RECV[1] | WAIT_FLAG;            \
92        REPLY[2] = NUM_PARAMS;
93
94
95#define END_HEADER_REPLY(REPLY, TOT_LEN, COUNT)\
96    REPLY[TOT_LEN] = END_CMD;           \
97    REPLY[TOT_LEN+1] = 0;               \
98    COUNT=TOT_LEN+1;
99
100#define RETURN_ERR_REPLY(RECV,REPLY,COUNT)  \
101    {uint8_t err = 0; return ack_reply_cb(RECV,REPLY,&err,COUNT);}
102
103#define CHECK_ARD_NETIF(RECV,REPLY,COUNT) \
104    if (ard_netif == NULL)  \
105    { uint8_t err = 0; return ack_reply_cb(RECV,REPLY,&err,COUNT); }
106
107#define PUT_LONG_IN_BYTE_HO(LONG, BYTE, IDX)   {           \
108    uint32_t _long = LONG;                              \
109    BYTE[IDX] = 4;                                      \
110    BYTE[IDX+1] = (uint8_t)(_long & 0xff);              \
111    BYTE[IDX+2] = (uint8_t)((_long & 0xff00)>>8);       \
112    BYTE[IDX+3] = (uint8_t)((_long & 0xff0000)>>16);    \
113    BYTE[IDX+4] = (uint8_t)((_long & 0xff000000)>>24);  \
114}
115
116#define PUT_LONG_IN_BYTE_NO(LONG, BYTE, IDX)   {           \
117    uint32_t _long = LONG;                              \
118    BYTE[IDX] = 4;                                      \
119    BYTE[IDX+4] = (uint8_t)(_long & 0xff);              \
120    BYTE[IDX+3] = (uint8_t)((_long & 0xff00)>>8);       \
121    BYTE[IDX+2] = (uint8_t)((_long & 0xff0000)>>16);    \
122    BYTE[IDX+1] = (uint8_t)((_long & 0xff000000)>>24);  \
123}
124
125
126#define PUT_DATA_INT(INT, BYTE, IDX)   {                        \
127    uint16_t _int = INT;                                                                \
128        BYTE[IDX] = 2;                                                  \
129    BYTE[IDX+1] = (uint8_t)((_int & 0xff00)>>8);        \
130    BYTE[IDX+2] = (uint8_t)(_int & 0xff);               \
131}
132
133#define PUT_DATA_INT_NO(INT, BYTE, IDX)   {                     \
134    uint16_t _int = INT;                                                                \
135        BYTE[IDX] = 2;                                                  \
136    BYTE[IDX+2] = (uint8_t)((_int & 0xff00)>>8);        \
137    BYTE[IDX+1] = (uint8_t)(_int & 0xff);               \
138}
139
140#define PUT_DATA_BYTE(DATA, BYTE, IDX)   {              \
141    BYTE[IDX] = 1;                                      \
142    BYTE[IDX+1] = (uint8_t)DATA;                                                \
143}
144
145#define PUT_BUFDATA_BYTE(BUF, BUFLEN, BYTE, IDX)        {       \
146    BYTE[IDX] = (uint8_t)(BUFLEN & 0xff);                       \
147        uint16_t i = 0;                                                                         \
148        for (; i<BUFLEN; ++i)                                                           \
149                BYTE[IDX+1+i]=BUF[i];                                                   \
150}
151
152#define PUT_BUFDATA_INT(BUF, BUFLEN, BYTE, IDX) {               \
153    BYTE[IDX] = (uint8_t)((BUFLEN & 0xff00)>>8);                \
154    BYTE[IDX+1] = (uint8_t)(BUFLEN & 0xff);                     \
155        uint16_t i = 0;                                                                         \
156        for (; i<BUFLEN; ++i)                                                           \
157                BYTE[IDX+2+i]=BUF[i];                                                   \
158}
159
160
161#define PUT_BUFDATA_BYTE_REV(BUF, BUFLEN, BYTE, IDX) {  \
162        BYTE[IDX] = (uint8_t)(BUFLEN & 0xff);                           \
163        uint16_t i = 0;                                                                         \
164        for (; i<BUFLEN; ++i)                                                           \
165                BYTE[IDX+1+i]=BUF[BUFLEN-i-1];                                  \
166}
167
168#define GET_DATA_LONG(INT32, BUF)       \
169                uint32_t INT32 = ((*(BUF))<<24) + ((*(BUF+1))<<16) + ((*(BUF+2))<<8) + (*(BUF+3));
170
171#define GET_DATA_INT(INT16, BUF)        \
172                uint16_t INT16 = ((*(BUF))<<8) + (*(BUF+1));
173
174#define GET_DATA_BYTE(BYTE, BUF)        \
175                uint8_t BYTE = (*(BUF));
176
177#define CHECK_PARAM_LEN(PARAM, LEN)     ((PARAM!=NULL)&&(PARAM->paramLen == LEN))
178
179#define NEXT_PARAM(PARAM)       \
180                do {                            \
181                if (PARAM!=NULL){       \
182                        PARAM=(tParam*)((uint8_t*)PARAM+PARAM->paramLen+1);     \
183                        GET_PARAM_BYTE(PARAM, end)                                                      \
184                        if (end == END_CMD)     WARN("End of cmd params", PARAM); \
185                }                                                                                                               \
186                }while(0);
187
188#define GET_PARAM_LONG(PARAM, LONG)                     \
189                uint32_t LONG = 0;                                      \
190                if CHECK_PARAM_LEN(PARAM, 4) {          \
191                tLongParam* s = (tLongParam*)PARAM;     \
192                LONG = s->param;                                        \
193                }
194
195#define GET_PARAM_INT(PARAM, INT)                       \
196                uint16_t INT = 0;                                       \
197                if CHECK_PARAM_LEN(PARAM, 2) {          \
198                tIntParam* s = (tIntParam*)PARAM;       \
199                INT = s->param;                                         \
200                }
201
202#define GET_PARAM_BYTE(PARAM, BYTE)                     \
203                uint8_t BYTE = 0;                                       \
204                if CHECK_PARAM_LEN(PARAM, 1) {          \
205                tByteParam* s = (tByteParam*)PARAM;     \
206                BYTE = s->param;                                        \
207                }
208
209#define GET_PARAM_NEXT(TYPE, PARAM, DATA)       \
210                GET_PARAM_##TYPE(PARAM, DATA)           \
211                NEXT_PARAM(PARAM)
212
213#ifdef _SPI_STATS_
214#define STATSPI_TIMEOUT_ERROR()         \
215                statSpi.timeoutIntErr++;        \
216                statSpi.rxErr++;                        \
217                statSpi.lastError = SPI_TIMEOUT_ERROR;  \
218                statSpi.status = spi_getStatus(ARD_SPI);
219
220#define STATSPI_DISALIGN_ERROR()                \
221                statSpi.frameDisalign++;        \
222                statSpi.rxErr++;                        \
223                statSpi.lastError = SPI_ALIGN_ERROR;    \
224                statSpi.status = spi_getStatus(ARD_SPI);
225
226#define STATSPI_OVERRIDE_ERROR()                \
227                statSpi.overrideFrame++;        \
228                statSpi.rxErr++;                        \
229                statSpi.lastError = SPI_OVERRIDE_ERROR; \
230                statSpi.status = spi_getStatus(ARD_SPI);
231
232#define STATSPI_TX_TIMEOUT_ERROR()      \
233                statSpi.timeoutErr++;           \
234                statSpi.txErr++;                        \
235                statSpi.lastError = SPI_ERROR_TIMEOUT;  \
236                statSpi.status = spi_getStatus(ARD_SPI);
237#else
238#define STATSPI_TIMEOUT_ERROR()
239#define STATSPI_TX_TIMEOUT_ERROR()
240#define STATSPI_DISALIGN_ERROR()
241#define STATSPI_OVERRIDE_ERROR()
242#endif
243
244#define DUMP_TCP_STATE(TTCP) do {\
245                int i = getCurrClientConnId(); \
246                INFO_TCP("%d] ttcp:%p tpcb:%p state:%d lpcb:%p state:%d left:%d sent:%d\n", \
247                        i, TTCP, TTCP->tpcb[i], (TTCP->tpcb[i])?TTCP->tpcb[i]->state:0, \
248                        TTCP->lpcb, (TTCP->lpcb)?TTCP->lpcb->state:0, \
249                        (TTCP->tpcb[i])?TTCP->left[i]:0, (TTCP->tpcb[i])?TTCP->buff_sent[i]:0); \
250                        } while(0);
251                       
252#define Mode2Str(_Mode) ((_Mode==0)?"TRANSMIT":"RECEIVE")                       
253#define ProtMode2Str(_protMode) ((_protMode==0)?"TCP":"UDP")
254
255typedef struct sData
256{
257        uint8_t*        data;
258        uint16_t        len;
259        uint16_t        idx;
260        void*   pcb;
261}tData;
262
263struct pbuf;
264
265void init_pBuf();
266
267uint8_t* insert_pBuf(struct pbuf* q, uint8_t sock, void* _pcb);
268
269uint8_t* insertBuf(uint8_t sock, uint8_t* buf, uint16_t len);
270
271uint8_t* mergeBuf(uint8_t sock, uint8_t** buf, uint16_t* _len);
272
273uint16_t clearBuf(uint8_t sock);
274
275tData* get_pBuf(uint8_t sock);
276
277void freetData(void * buf, uint8_t sock);
278
279void freetDataIdx(uint8_t idxBuf, uint8_t sock);
280
281bool isBufAvail();
282
283bool getTcpData(uint8_t sock, void** payload, uint16_t* len);
284
285bool getTcpDataByte(uint8_t sock, uint8_t* payload, uint8_t peek);
286
287uint16_t getAvailTcpDataByte(uint8_t sock);
288
289bool isAvailTcpDataByte(uint8_t sock);
290
291uint8_t freeTcpData(uint8_t sock);
292
293void freeAllTcpData(uint8_t sock);
294
295#endif /* ARD_UTILS_H_ */
Note: See TracBrowser for help on using the repository browser.