1
0
mirror of https://github.com/arduino/Arduino.git synced 2025-02-21 15:54:39 +01:00

Updates to WiFi shield firmware.

This commit is contained in:
Mimmo La Fauci 2013-03-10 22:55:21 +01:00
parent 8862a7d54e
commit 271d74d7c3
20 changed files with 3031 additions and 591 deletions

View File

@ -93,6 +93,7 @@
#define LED1_GPIO AVR32_PIN_PB20 #define LED1_GPIO AVR32_PIN_PB20
#define LED2_GPIO AVR32_PIN_PB21 #define LED2_GPIO AVR32_PIN_PB21
#define DEB_PIN_GPIO AVR32_PIN_PA20 #define DEB_PIN_GPIO AVR32_PIN_PA20
#define DEB2_PIN_GPIO AVR32_PIN_PB00
//! @} //! @}
/*! \name PWM Channels of LEDs /*! \name PWM Channels of LEDs

View File

@ -1226,7 +1226,7 @@
* in seconds. (does not require sockets.c, and will affect tcp.c) * in seconds. (does not require sockets.c, and will affect tcp.c)
*/ */
#ifndef LWIP_TCP_KEEPALIVE #ifndef LWIP_TCP_KEEPALIVE
#define LWIP_TCP_KEEPALIVE 0 #define LWIP_TCP_KEEPALIVE 1
#endif #endif
/** /**

View File

@ -46,6 +46,7 @@
#include "compiler.h" #include "compiler.h"
#include "debug.h" #include "debug.h"
#include "util.h"
#if (defined __GNUC__) #if (defined __GNUC__)
@ -117,3 +118,16 @@ void uc3_round_trace(U32 val)
//Enable_global_interrupt(); //Enable_global_interrupt();
} }
void dump(char* _buf, uint16_t _count) {
int i;
for (i = 0; i < _count; ++i)
{
printk("0x%x ", _buf[i]);
if ((i!=0)&&(i % 10 == 0))
printk("\n\t");
}
printk("\n");
}

View File

@ -24,6 +24,8 @@
#include "timer.h" #include "timer.h"
#include "lwip/dns.h" #include "lwip/dns.h"
#include <board_init.h> #include <board_init.h>
#include "util.h"
#include "lwip/udp.h"
extern const char* fwVersion; extern const char* fwVersion;
@ -92,7 +94,7 @@ bool end_write = false; //TODO only for debug
// Signal indicating a new command is coming from SPI interface // Signal indicating a new command is coming from SPI interface
static volatile Bool startRecvCmdSignal = FALSE; static volatile Bool startRecvCmdSignal = FALSE;
#define MAX_CMD_NUM 30 #define MAX_CMD_NUM 34
typedef struct sCmd_spi_list{ typedef struct sCmd_spi_list{
cmd_spi_cb_t cb; cmd_spi_cb_t cb;
char cmd_id; char cmd_id;
@ -136,6 +138,7 @@ void initStatSpi()
void printStatSpi() void printStatSpi()
{ {
printk("totSpiCmds\t: 0x%x\n", cmdCorr);
printk("lastCmd \t: 0x%x\n", statSpi.lastCmd); printk("lastCmd \t: 0x%x\n", statSpi.lastCmd);
printk("lastErr \t: 0x%x\n", statSpi.lastError); printk("lastErr \t: 0x%x\n", statSpi.lastError);
printk("spiStatus\t: 0x%X\n", statSpi.status); printk("spiStatus\t: 0x%X\n", statSpi.status);
@ -169,7 +172,28 @@ cmd_resetStatSpi(int argc, char* argv[], void* ctx)
int result = WL_CONNECT_FAILED; //Store the result of the last operation int result = WL_CONNECT_FAILED; //Store the result of the last operation
void* mapSockTCP[MAX_SOCK_NUM]; void* mapSockTCP[MAX_SOCK_NUM][MAX_MODE_NUM];
//Udp RemoteIp and remote Port
static tRemoteClient remoteClients[MAX_SOCK_NUM] = {{0,0}};
void setRemoteClient(uint16_t sock, uint32_t _ipaddr, uint16_t _port)
{
if (sock < MAX_SOCK_NUM)
{
remoteClients[sock].ipaddr = _ipaddr;
remoteClients[sock].port = _port;
}
}
tRemoteClient* getRemoteClient(uint16_t sock)
{
if (sock < MAX_SOCK_NUM)
{
return &remoteClients[sock];
}
return NULL;
}
struct netif* ard_netif = NULL; struct netif* ard_netif = NULL;
@ -180,10 +204,10 @@ struct ip_addr _hostIpAddr;
static bool hostIpAddrFound = false; static bool hostIpAddrFound = false;
void* getTTCP(uint8_t sock) void* getTTCP(uint8_t sock, uint8_t mode)
{ {
if (sock < MAX_SOCK_NUM) if (sock < MAX_SOCK_NUM)
return mapSockTCP[sock]; return mapSockTCP[sock][mode];
return NULL; return NULL;
} }
@ -194,26 +218,31 @@ int getSock(void * _ttcp)
int i = 0; int i = 0;
for (; i<MAX_SOCK_NUM; i++) for (; i<MAX_SOCK_NUM; i++)
{ {
if (_ttcp == mapSockTCP[i]) if (_ttcp == mapSockTCP[i][GET_TCP_MODE(_ttcp)])
return i; return i;
} }
} }
return -1; return -1;
} }
void setMapSock(uint8_t sock, void* _ttcp) void setMapSockMode(uint8_t sock, void* _ttcp, uint8_t _tcp_mode)
{ {
if (sock < MAX_SOCK_NUM) if ((IS_VALID_SOCK(sock))&&(_ttcp!=NULL))
mapSockTCP[sock]=_ttcp; mapSockTCP[sock][_tcp_mode]=_ttcp;
INFO_TCP("Map [%d, %p]\n", sock, _ttcp); INFO_TCP("Map [%d, %p, %s]\n", sock, _ttcp, Mode2Str(_tcp_mode));
} }
void clearMapSockTcp(uint8_t sock) void setMapSock(uint8_t sock, void* _ttcp)
{
setMapSockMode(sock, _ttcp, GET_TCP_MODE(_ttcp));
}
void clearMapSockTcp(uint8_t sock, uint8_t mode)
{ {
if (sock < MAX_SOCK_NUM) if (sock < MAX_SOCK_NUM)
{ {
//printk("UnMap [%d, %p]\n", sock, mapSockTCP[sock]); //printk("UnMap [%d, %p]\n", sock, mapSockTCP[sock]);
mapSockTCP[sock] = NULL; mapSockTCP[sock][mode] = NULL;
} }
} }
@ -223,6 +252,7 @@ void initMapSockTcp()
memset(mapSockTCP, 0, sizeof(mapSockTCP)); memset(mapSockTCP, 0, sizeof(mapSockTCP));
} }
#if 0
/** /**
* Calculate bitrate based on number of bytes transmitted and elapsed time * Calculate bitrate based on number of bytes transmitted and elapsed time
*/ */
@ -235,10 +265,10 @@ static void ard_tcp_print_stats(struct ttcp *ttcp) {
printk("\n"); printk("\n");
printk("TTCP [%p]: %d bytes processed, %d.%d KB/s (%s/%s)\n", ttcp, bytes, printk("TTCP [%p]: %d bytes processed, %d.%d KB/s (%s/%s)\n", ttcp, bytes,
bytes / ms, bytes % ms, ttcp->udp ? "udp" : "tcp", ttcp->mode bytes / ms, bytes % ms, ProtMode2Str(ttcp->udp),
== TTCP_MODE_TRANSMIT ? "tx" : "rx"); Mode2Str(ttcp->mode));
} }
#endif
void showTTCPstatus() void showTTCPstatus()
{ {
@ -248,19 +278,45 @@ void showTTCPstatus()
int i = 0; int i = 0;
for (; i<MAX_SOCK_NUM; i++) for (; i<MAX_SOCK_NUM; i++)
{ {
void* p = getTTCP(i); int ii=0;
if (p) for (; ii<MAX_MODE_NUM; ii++)
{ {
ttcp_t* _ttcp = (ttcp_t* )p; void* p = getTTCP(i, ii);
printk("Socket n.:%d addr:0x%x port:%d\n", i, _ttcp->addr, _ttcp->port); if (p)
if (_ttcp->tpcb){ {
printk("[tpcp-%p]-Status:%d\n", _ttcp->tpcb, _ttcp->tpcb->state); ttcp_t* _ttcp = (ttcp_t* )p;
printk("Socket n.:%d(%d) [0x%x] %s %s addr:%s port:%d\n", i, ii, _ttcp,
ProtMode2Str(_ttcp->udp), Mode2Str(_ttcp->mode), ip2str(_ttcp->addr), _ttcp->port);
if (_ttcp->udp == TCP_MODE)
{
int j = 0;
for (; j<MAX_CLIENT_ACCEPTED; ++j)
{
if (_ttcp->tpcb[j]){
printk("[%d tpcp-%p]-Status:%d\n", j, _ttcp->tpcb[j], _ttcp->tpcb[j]->state);
}
}
if (_ttcp->lpcb){
printk("[tlcp-%p]-Status:%d\n", _ttcp->lpcb, _ttcp->lpcb->state);
}
}else{
if (_ttcp->upcb){
struct ip_addr loc = _ttcp->upcb->local_ip;
printk("[upcp-%p] flags:0x%x local:%s[0x%x]-%d\n",
_ttcp->upcb, _ttcp->upcb->flags,
ip2str(loc), loc, _ttcp->upcb->local_port);
tRemoteClient remote = {0,0};;
getRemoteData(i, ii, &remote);
struct ip_addr ipaddr = { remote.ipaddr };
printk("remote:%s(0x%x)-%d\n", ip2str(ipaddr), remote.ipaddr, remote.port);
}
}
//ard_tcp_print_stats(_ttcp);
printk("Data avail:%s\n", isAvailTcpDataByte(i)?"YES":"NO");
printk("------------------------------\n");
} }
if (_ttcp->lpcb){ }
printk("[tlcp-%p]-Status:%d\n", _ttcp->lpcb, _ttcp->lpcb->state);
}
ard_tcp_print_stats(_ttcp);
}
} }
tcp_debug_print_pcbs(); tcp_debug_print_pcbs();
@ -323,8 +379,7 @@ void sendError()
volatile avr32_spi_t *spi = ARD_SPI; \ volatile avr32_spi_t *spi = ARD_SPI; \
Bool global_interrupt_enabled = Is_global_interrupt_enabled(); \ Bool global_interrupt_enabled = Is_global_interrupt_enabled(); \
if (global_interrupt_enabled) Disable_global_interrupt(); \ if (global_interrupt_enabled) Disable_global_interrupt(); \
spi->IER.rdrf = 1; \ spi->IER.rdrf = 1; spi->IER.rxbuff = 1; spi->IER.endrx = 1; \
spi->IER.rxbuff = 1; spi->IER.endrx = 1; \
if (global_interrupt_enabled) Enable_global_interrupt(); \ if (global_interrupt_enabled) Enable_global_interrupt(); \
}while(0); }while(0);
@ -340,54 +395,6 @@ void sendError()
eic_clear_interrupt_line(&AVR32_EIC, AVR32_SPI0_IRQ); \ eic_clear_interrupt_line(&AVR32_EIC, AVR32_SPI0_IRQ); \
}while(0); }while(0);
void dump(char* _buf, uint16_t _count) {
int i;
for (i = 0; i < _count; ++i)
printk("0x%x ", _buf[i]);
printk("\n");
}
#ifdef _APP_DEBUG_
#define DUMP dump
#endif
#ifdef _APP_DEBUG_
#define DUMP_SPI_DATA(BUF, COUNT) do { \
if (verboseDebug & INFO_SPI_FLAG) { \
int i = 0; \
for (; i < COUNT; ++i) \
{ \
printk("0x%x ", BUF[i]); \
if (i % 20 == 0) \
printk("\n"); \
} \
printk("\n"); \
} \
}while(0);
#else
#define DUMP_SPI_DATA(BUF, COUNT) do {}while(0);
#endif
#ifdef _APP_DEBUG_
#define DUMP_SPI_CMD(BUF) do { \
if (verboseDebug & INFO_SPI_FLAG) { \
int i = 0; \
for (; i < CMD_MAX_LEN; ++i) \
{ \
printk("0x%x ", BUF[i]); \
if (BUF[i] == END_CMD) \
break; \
} \
printk("\n"); \
} \
}while(0);
#else
#define DUMP_SPI_CMD(BUF) do {}while(0);
#endif
int spi_add_cmd(char _cmd_id, cmd_spi_cb_t cb, cmd_spi_rcb_t rcb, void* ctx, int spi_add_cmd(char _cmd_id, cmd_spi_cb_t cb, cmd_spi_rcb_t rcb, void* ctx,
char flag) { char flag) {
U32 i; U32 i;
@ -578,7 +585,7 @@ extern int ttcp_start(struct ip_addr addr, uint16_t port, void *opaque,
void *done_cb, int mode, uint16_t nbuf, uint16_t buflen, int udp, int verbose); void *done_cb, int mode, uint16_t nbuf, uint16_t buflen, int udp, int verbose);
int start_server_tcp(uint16_t port, uint8_t sock) int start_server_tcp(uint16_t port, uint8_t sock, uint8_t protMode)
{ {
struct ip_addr addr = { 0 }; struct ip_addr addr = { 0 };
uint16_t buflen = 1024; uint16_t buflen = 1024;
@ -590,7 +597,7 @@ int start_server_tcp(uint16_t port, uint8_t sock)
#else #else
int verbose = 0; int verbose = 0;
#endif #endif
int udp = 0; int udp = protMode;
int mode = 1; //RECEIVE int mode = 1; //RECEIVE
void* _ttcp = NULL; void* _ttcp = NULL;
@ -605,20 +612,20 @@ int start_server_tcp(uint16_t port, uint8_t sock)
if (!ifStatus) if (!ifStatus)
{ {
WARN("IF down...wait\n"); WARN_VER("IF down...wait\n");
return WIFI_SPI_ERR; return WIFI_SPI_ERR;
} }
if (ard_tcp_start(addr, port, NULL, NULL, mode, nbuf, buflen, udp, verbose, sock, &_ttcp) == 0) if (ard_tcp_start(addr, port, NULL, NULL, mode, nbuf, buflen, udp, verbose, sock, &_ttcp) == 0)
{ {
INFO_SPI("Start Server [%d, %d] OK!\n", port, sock); INFO_SPI("Start Server %s [%d, %d] OK!\n", ProtMode2Str(protMode), port, sock);
setMapSock(sock, _ttcp); setMapSock(sock, _ttcp);
err = WL_SUCCESS; err = WL_SUCCESS;
}else{ }else{
WARN("Start Server [%d, %d] FAILED!\n", port, sock); WARN("Start Server %s [%d, %d] FAILED!\n", ProtMode2Str(protMode), port, sock);
clearMapSockTcp(sock); clearMapSockTcp(sock, TTCP_MODE_RECEIVE);
} }
return err; return err;
} }
@ -627,59 +634,72 @@ int start_server_tcp(uint16_t port, uint8_t sock)
int start_server_tcp_cmd_cb(int numParam, char* buf, void* ctx) { int start_server_tcp_cmd_cb(int numParam, char* buf, void* ctx) {
wl_err_t err = WL_FAILURE; wl_err_t err = WL_FAILURE;
tParam* params = (tParam*) buf; tParam* params = (tParam*) buf;
if (numParam == 2) if (numParam == 3)
{ {
GET_PARAM_NEXT(INT, params, port); GET_PARAM_NEXT(INT, params, port);
GET_PARAM_NEXT(BYTE, params, sock); GET_PARAM_NEXT(BYTE, params, sock);
err = start_server_tcp(port, sock); GET_PARAM_NEXT(BYTE, params, protMode);
err = start_server_tcp(port, sock, protMode);
} }
return (err==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR; return (err==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR;
} }
int start_client_tcp_cmd_cb(int numParam, char* buf, void* ctx) { int start_client_tcp(uint32_t _addr, uint16_t port, uint8_t sock, uint8_t protMode)
wl_err_t err = WL_FAILURE; {
tParam* params = (tParam*) buf; uint16_t buflen = 1024;
if (numParam == 3) uint16_t nbuf = 1024;
{ wl_err_t err = WL_FAILURE;
GET_PARAM_NEXT(LONG, params, _addr); struct ip_addr addr = { .addr = _addr};
GET_PARAM_NEXT(INT, params, port);
GET_PARAM_NEXT(BYTE, params, sock);
INFO_SPI("Addr:0x%x, port:%d, sock:%d\n", _addr, port, sock); INFO_SPI("Addr:0x%x, port:%d, sock:%d, prot:%s\n", _addr, port, sock, ProtMode2Str(protMode));
uint16_t buflen = 1024; #ifdef _APP_DEBUG_
uint16_t nbuf = 1024; int verbose = 1;
struct ip_addr addr = { .addr = _addr}; #else
#ifdef _APP_DEBUG_ int verbose = 0;
int verbose = 1; #endif
#else
int verbose = 0; int udp = protMode;
#endif int mode = 0; //TRANSMIT
int udp = 0; void* _ttcp = NULL;
int mode = 0; //TRANSMIT
void* _ttcp = NULL;
if (sock >= MAX_SOCK_NUM) if (sock >= MAX_SOCK_NUM)
return WIFI_SPI_ERR; return WIFI_SPI_ERR;
// Check previous connection // Check previous connection
_ttcp = getTTCP(sock); _ttcp = getTTCP(sock, TTCP_MODE_TRANSMIT);
if (_ttcp != NULL) if (_ttcp != NULL)
{ {
WARN("Previous client %p not stopped !\n", _ttcp); WARN("Previous client %p not stopped !\n", _ttcp);
ard_tcp_stop(_ttcp); ard_tcp_stop(_ttcp);
clearMapSockTcp(sock); clearMapSockTcp(sock, TTCP_MODE_TRANSMIT);
} }
if (ard_tcp_start((struct ip_addr)addr, port, NULL, NULL, mode, nbuf, buflen, udp, verbose, sock, &_ttcp) == 0) if (ard_tcp_start(addr, port, NULL, NULL, mode, nbuf, buflen, udp, verbose, sock, &_ttcp) == 0)
{ {
INFO_SPI("Start Client [0x%x, %d, %d] OK!\n", addr, port, sock); INFO_SPI("Start Client %s %p [0x%x, %d, %d] OK!\n", ProtMode2Str(protMode),
setMapSock(sock, _ttcp); _ttcp, addr, port, sock);
err = WL_SUCCESS; setMapSock(sock, _ttcp);
}else{ err = WL_SUCCESS;
INFO_SPI("Start Client [0x%x, %d, %d] FAILED!\n", addr, port, sock); }else{
clearMapSockTcp(sock); INFO_SPI("Start Client %s %p [0x%x, %d, %d] FAILED!\n", ProtMode2Str(protMode),
} _ttcp, addr, port, sock);
clearMapSockTcp(sock, TTCP_MODE_TRANSMIT);
}
return err;
}
int start_client_tcp_cmd_cb(int numParam, char* buf, void* ctx) {
wl_err_t err = WL_FAILURE;
tParam* params = (tParam*) buf;
if (numParam == 4)
{
GET_PARAM_NEXT(LONG, params, _addr);
GET_PARAM_NEXT(INT, params, port);
GET_PARAM_NEXT(BYTE, params, sock);
GET_PARAM_NEXT(BYTE, params, protMode);
err = start_client_tcp(_addr, port, sock, protMode);
} }
return (err==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR; return (err==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR;
} }
@ -697,7 +717,7 @@ int stop_client_tcp_cmd_cb(int numParam, char* buf, void* ctx) {
if (sock < MAX_SOCK_NUM) if (sock < MAX_SOCK_NUM)
{ {
_ttcp = getTTCP(sock); _ttcp = getTTCP(sock, TTCP_MODE_TRANSMIT);
ard_tcp_stop(_ttcp); ard_tcp_stop(_ttcp);
err = WL_SUCCESS; err = WL_SUCCESS;
} }
@ -705,6 +725,37 @@ int stop_client_tcp_cmd_cb(int numParam, char* buf, void* ctx) {
return (err==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR; return (err==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR;
} }
int insert_data_cmd_cb(int numParam, char* buf, void* ctx) {
tDataParam* msg = (tDataParam*) buf;
if ((numParam == 2)&&(msg->dataLen == 1))
{
GET_DATA_BYTE(sock, buf+2);
GET_DATA_INT(len, buf+3);
//printk("tcp:%p buf:%p len:%d\n", getTTCP(sock), (uint8_t*)(buf+5), len);
insertBuf(sock, (uint8_t*)(buf+5), len);
}
return WIFI_SPI_ACK;
}
int send_data_udp_cmd_cb(int numParam, char* buf, void* ctx) {
wl_err_t err = WL_FAILURE;
tParam* params = (tParam*) buf;
if ((numParam == 1)&&(params->paramLen == 1))
{
GET_PARAM_NEXT(BYTE, params, sock);
uint16_t len = 0;
uint8_t* p = mergeBuf(sock, NULL, &len);
err = sendUdpData(getTTCP(sock, TTCP_MODE_TRANSMIT), p, len);
clearBuf(sock);
free(p);
}
return (err==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR;
}
int send_data_tcp_cmd_cb(int numParam, char* buf, void* ctx) { int send_data_tcp_cmd_cb(int numParam, char* buf, void* ctx) {
wl_err_t err = WL_FAILURE; wl_err_t err = WL_FAILURE;
DATA_LED_ON(); DATA_LED_ON();
@ -714,7 +765,7 @@ int send_data_tcp_cmd_cb(int numParam, char* buf, void* ctx) {
GET_DATA_BYTE(sock, buf+2); GET_DATA_BYTE(sock, buf+2);
GET_DATA_INT(len, buf+3); GET_DATA_INT(len, buf+3);
//printk("tcp:%p buf:%p len:%d\n", getTTCP(sock), (uint8_t*)(buf+5), len); //printk("tcp:%p buf:%p len:%d\n", getTTCP(sock), (uint8_t*)(buf+5), len);
err = sendTcpData(getTTCP(sock), (uint8_t*)(buf+5), len); err = sendTcpData(getTTCP(sock, TTCP_MODE_TRANSMIT), (uint8_t*)(buf+5), len);
} }
DATA_LED_OFF(); DATA_LED_OFF();
return (err==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR; return (err==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR;
@ -726,7 +777,6 @@ int ack_cmd_cb(int numParam, char* buf, void* ctx) {
int get_result_cmd_cb(int numParam, char* buf, void* ctx) { int get_result_cmd_cb(int numParam, char* buf, void* ctx) {
INFO_SPI("ifStatus:%d result:%d\n", ifStatus, result); INFO_SPI("ifStatus:%d result:%d\n", ifStatus, result);
*buf=(ifStatus)?WL_CONNECTED:result;
return WIFI_SPI_ACK; return WIFI_SPI_ACK;
} }
@ -744,7 +794,7 @@ cmd_spi_state_t get_reply_cb(char* recv, char* reply, void* ctx, uint16_t* count
if (ctx != NULL) { if (ctx != NULL) {
reply[4] = (*(uint8_t*)ctx); //param reply[4] = (*(uint8_t*)ctx); //param
} else { } else {
reply[4] = result; //param reply[4] = (ifStatus)?WL_CONNECTED:result; //param
} }
END_HEADER_REPLY(reply, 5, *count); END_HEADER_REPLY(reply, 5, *count);
@ -784,6 +834,51 @@ cmd_spi_state_t get_reply_ipaddr_cb(char* recv, char* reply, void* ctx, uint16_t
return SPI_CMD_DONE; return SPI_CMD_DONE;
} }
void getRemoteData(uint8_t sock, uint8_t mode, tRemoteClient* remoteData)
{
if ((sock>=0) && (sock<MAX_SOCK_NUM))
{
void* p = getTTCP(sock, mode);
if (p)
{
ttcp_t* _ttcp = (ttcp_t* )p;
if ((_ttcp->udp == UDP_MODE))
{
if (_ttcp->mode == TTCP_MODE_RECEIVE)
{
remoteData->ipaddr = getRemoteClient(sock)->ipaddr;
remoteData->port = getRemoteClient(sock)->port;
}else{
remoteData->ipaddr = (_ttcp->upcb) ? _ttcp->upcb->remote_ip.addr : 0;
remoteData->port = (_ttcp->upcb) ? _ttcp->upcb->remote_port : 0;
}
}
}
}
}
cmd_spi_state_t get_reply_remote_data_cb(char* recv, char* reply, void* ctx, uint16_t* count) {
CHECK_ARD_NETIF(recv, reply, count);
DUMP_SPI_CMD(recv);
GET_DATA_BYTE(sock, recv+4);
CREATE_HEADER_REPLY(reply, recv, 2);
tRemoteClient remoteData = {0,0};
//TODO pass the mode
getRemoteData(sock, TTCP_MODE_RECEIVE, &remoteData);
PUT_LONG_IN_BYTE_NO(remoteData.ipaddr, reply, 3);
PUT_DATA_INT(remoteData.port, reply, 8);
END_HEADER_REPLY(reply, 11, *count);
return SPI_CMD_DONE;
}
void foundHostByName(const char *name, struct ip_addr *ipaddr, void *callback_arg) void foundHostByName(const char *name, struct ip_addr *ipaddr, void *callback_arg)
{ {
_hostIpAddr.addr = (ipaddr)?ipaddr->addr:0xffffffff; _hostIpAddr.addr = (ipaddr)?ipaddr->addr:0xffffffff;
@ -1071,11 +1166,11 @@ cmd_spi_state_t get_state_tcp_cmd_cb(char* recv, char* reply, void* ctx, uint16_
uint8_t _state = CLOSED; uint8_t _state = CLOSED;
if ((recv[3]==1)&&(recv[4]>=0)&&(recv[4]<MAX_SOCK_NUM)) if ((recv[3]==1)&&(recv[4]>=0)&&(recv[4]<MAX_SOCK_NUM))
{ {
_state = getStateTcp(getTTCP((uint8_t)recv[4]), 0); _state = getStateTcp(getTTCP((uint8_t)recv[4], TTCP_MODE_RECEIVE), 0);
} }
PUT_DATA_BYTE(_state, reply, 3); PUT_DATA_BYTE(_state, reply, 3);
END_HEADER_REPLY(reply, 5, *count); END_HEADER_REPLY(reply, 5, *count);
INFO_SPI("state:%d\n", _state); INFO_SPI_POLL("state:%d\n", _state);
return SPI_CMD_DONE; return SPI_CMD_DONE;
} }
@ -1087,33 +1182,20 @@ cmd_spi_state_t get_client_state_tcp_cmd_cb(char* recv, char* reply, void* ctx,
CREATE_HEADER_REPLY(reply, recv, PARAM_NUMS_1); CREATE_HEADER_REPLY(reply, recv, PARAM_NUMS_1);
uint8_t _state = CLOSED; uint8_t _state = CLOSED;
if ((recv[3]==1)&&(recv[4]>=0)&&(recv[4]<MAX_SOCK_NUM)) uint8_t _sock = recv[4];
if ((recv[3]==1)&&(_sock>=0)&&(_sock<MAX_SOCK_NUM))
{ {
void * p= getTTCP((uint8_t)recv[4]); void * p= getTTCP(_sock, TTCP_MODE_TRANSMIT);
if (p!=NULL) if (p!=NULL)
{ {
// get if we are in server or Transmit mode (0) _state = getStateTcp(p, 1);
if (getModeTcp(p) == TTCP_MODE_TRANSMIT) }else{
{ WARN_VER("TTCP not found for sock:%d\n", _sock);
_state = getStateTcp(p, 1);
INFO_SPI_VER("CLI> p=%p _ttcp=%p state(tpcb):%d state:%d\n",
p, ((struct ttcp*) p)->tpcb,
((struct ttcp*) p)->tpcb->state,
_state);
}else {
_state = getStateTcp(p, 1);
INFO_SPI_VER("SER> p=%p _ttcp=%p state(tpcb):%d state(lpcb):%d state:%d\n",
p, ((struct ttcp*) p)->tpcb,
((struct ttcp*) p)->tpcb->state,
((struct ttcp*) p)->lpcb->state,
_state);
}
} }
} }
PUT_DATA_BYTE(_state, reply, 3); PUT_DATA_BYTE(_state, reply, 3);
END_HEADER_REPLY(reply, 5, *count); END_HEADER_REPLY(reply, 5, *count);
INFO_SPI("state:%d\n", _state); INFO_SPI_POLL("sock:%d state:%d\n", _sock, _state);
return SPI_CMD_DONE; return SPI_CMD_DONE;
} }
@ -1123,15 +1205,15 @@ cmd_spi_state_t avail_data_tcp_cmd_cb(char* recv, char* reply, void* ctx, uint16
CHECK_ARD_NETIF(recv, reply, count); CHECK_ARD_NETIF(recv, reply, count);
CREATE_HEADER_REPLY(reply, recv, PARAM_NUMS_1); CREATE_HEADER_REPLY(reply, recv, PARAM_NUMS_1);
uint8_t dataAvail = 0; uint16_t dataAvail = 0;
if ((recv[3]==1)&&(recv[4]>=0)&&(recv[4]<MAX_SOCK_NUM)) if ((recv[3]==1)&&(recv[4]>=0)&&(recv[4]<MAX_SOCK_NUM))
{ {
dataAvail = isAvailTcpDataByte((uint8_t)recv[4]) ? 1 : 0; dataAvail = getAvailTcpDataByte((uint8_t)recv[4]);
} }
PUT_DATA_BYTE(dataAvail, reply, 3); PUT_DATA_INT_NO(dataAvail, reply, 3);
END_HEADER_REPLY(reply, 5, *count); END_HEADER_REPLY(reply, 6, *count);
INFO_SPI("dataAvail:%d\n", dataAvail); INFO_SPI_POLL("dataAvail:%d\n", dataAvail);
return SPI_CMD_DONE; return SPI_CMD_DONE;
} }
@ -1155,7 +1237,7 @@ cmd_spi_state_t data_sent_tcp_cmd_cb(char* recv, char* reply, void* ctx, uint16_
uint8_t dataSent = 0; uint8_t dataSent = 0;
if ((recv[3]==1)&&(recv[4]>=0)&&(recv[4]<MAX_SOCK_NUM)) if ((recv[3]==1)&&(recv[4]>=0)&&(recv[4]<MAX_SOCK_NUM))
{ {
dataSent = isDataSent(getTTCP((uint8_t)recv[4])); dataSent = isDataSent(getTTCP((uint8_t)recv[4], TTCP_MODE_TRANSMIT));
} }
PUT_DATA_BYTE(dataSent, reply, 3); PUT_DATA_BYTE(dataSent, reply, 3);
END_HEADER_REPLY(reply, 5, *count); END_HEADER_REPLY(reply, 5, *count);
@ -1199,14 +1281,15 @@ cmd_spi_state_t get_databuf_tcp_cmd_cb(char* recv, char* reply, void* ctx, uint1
CHECK_ARD_NETIF(recv, reply, count); CHECK_ARD_NETIF(recv, reply, count);
if ((recv[3]==1)&&(recv[4]>=0)&&(recv[4]<MAX_SOCK_NUM)) GET_DATA_BYTE(sock, buf+5);
if ((sock>=0)&&(sock<MAX_SOCK_NUM))
{ {
if (getTcpData((uint8_t)recv[4], (void**)&data, &len)) if (getTcpData((uint8_t)sock, (void**)&data, &len))
{ {
CREATE_HEADER_REPLY(reply, recv, PARAM_NUMS_1); CREATE_HEADER_REPLY(reply, recv, PARAM_NUMS_1);
PUT_BUFDATA_INT(data, len, reply, 3); PUT_BUFDATA_INT(data, len, reply, 3);
END_HEADER_REPLY(reply, 3+len+2+1, *count); END_HEADER_REPLY(reply, 3+len+2, *count);
freeTcpData((uint8_t)recv[4]); freeTcpData((uint8_t)sock);
}else{ }else{
CREATE_HEADER_REPLY(reply, recv, PARAM_NUMS_0); CREATE_HEADER_REPLY(reply, recv, PARAM_NUMS_0);
END_HEADER_REPLY(reply, 3, *count); END_HEADER_REPLY(reply, 3, *count);
@ -1264,16 +1347,17 @@ int sendReply(int cmdIdx, char* recv, char* reply, void* resultCmd)
AVAIL_FOR_SPI(); AVAIL_FOR_SPI();
_result = write_stream(ARD_SPI, &reply[0], _count); _result = write_stream(ARD_SPI, &reply[0], _count);
#ifdef _SPI_STATS_ #ifdef _SPI_STATS_
if ( result != SPI_OK) if ( _result != SPI_OK)
{ {
statSpi.lastCmd = cmd_spi_list[cmdIdx].cmd_id; statSpi.lastCmd = cmd_spi_list[cmdIdx].cmd_id;
} }
#endif #endif
BUSY_FOR_SPI(); BUSY_FOR_SPI();
//unsigned char status = spi_getStatus(ARD_SPI); IF_SPI_DUMP(printk("==>"));
//INFO_SPI("Status after write: 0x%x\n",status); DUMP_SPI(recv, count);
IF_SPI_DUMP(printk("<=="));
DUMP_SPI(reply, _count);
replyCount = _count; replyCount = _count;
return _result; return _result;
} }
@ -1282,21 +1366,22 @@ unsigned char* getStartCmdSeq(unsigned char* _recv, int len, int *offset)
{ {
int i = 0; int i = 0;
*offset = 0; *offset = 0;
DEB_PIN_UP(); //DEB_PIN_UP();
for (; i<len; ++i) for (; i<len; ++i)
{ {
if (_recv[i]==START_CMD) if (_recv[i]==START_CMD)
{ {
if (i!=0) if (i!=0)
{ {
DEB_PIN_DN(); DEB_PIN_TRIGGER();
IF_WARN_VER(dump((char*)_recv, (uint16_t)len));
WARN("%d] Disall. %d/%d cmd:%d\n", cmdCorr, i, len,_recv[i+1]); WARN("%d] Disall. %d/%d cmd:%d\n", cmdCorr, i, len,_recv[i+1]);
} }
*offset = i; *offset = i;
return &_recv[i]; return &_recv[i];
} }
} }
DEB_PIN_DN(); //DEB_PIN_DN();
WARN("%d] Disall. %d\n", cmdCorr, i); WARN("%d] Disall. %d\n", cmdCorr, i);
return NULL; return NULL;
@ -1411,6 +1496,9 @@ void init_spi_cmds() {
spi_add_cmd(GET_CLIENT_STATE_TCP_CMD, ack_cmd_cb, get_client_state_tcp_cmd_cb, NULL, CMD_GET_FLAG); spi_add_cmd(GET_CLIENT_STATE_TCP_CMD, ack_cmd_cb, get_client_state_tcp_cmd_cb, NULL, CMD_GET_FLAG);
spi_add_cmd(GET_FW_VERSION_CMD, ack_cmd_cb, get_firmware_version_cmd_cb, NULL, CMD_GET_FLAG); spi_add_cmd(GET_FW_VERSION_CMD, ack_cmd_cb, get_firmware_version_cmd_cb, NULL, CMD_GET_FLAG);
spi_add_cmd(GET_TEST_CMD, ack_cmd_cb, get_test_cmd_cb, NULL, CMD_GET_FLAG); spi_add_cmd(GET_TEST_CMD, ack_cmd_cb, get_test_cmd_cb, NULL, CMD_GET_FLAG);
spi_add_cmd(INSERT_DATABUF_CMD, insert_data_cmd_cb, ack_reply_cb, NULL, CMD_IMM_SET_FLAG);
spi_add_cmd(SEND_DATA_UDP_CMD, send_data_udp_cmd_cb, ack_reply_cb, NULL, CMD_SET_FLAG);
spi_add_cmd(GET_REMOTE_DATA_CMD, ack_cmd_cb, get_reply_remote_data_cb, NULL, CMD_GET_FLAG);
} }
@ -1452,8 +1540,9 @@ bool checkMsgFormat(uint8_t* _recv, int len, int* offset)
unsigned char* recv = getStartCmdSeq(_recv, len, offset); unsigned char* recv = getStartCmdSeq(_recv, len, offset);
if ((recv == NULL)||(recv!=_recv)) if ((recv == NULL)||(recv!=_recv))
{ {
if ((enableDebug & INFO_WARN_FLAG)&&(len < 20)) //TODO stamp only short messages wrong DEB_PIN_TRIGGER();
dump((char*)_recv, len);
IF_WARN_VER(DUMP((char*)_recv, len));
STATSPI_DISALIGN_ERROR(); STATSPI_DISALIGN_ERROR();
@ -1468,7 +1557,7 @@ bool checkMsgFormat(uint8_t* _recv, int len, int* offset)
paramLenTot = checkMsgParam8(recv); paramLenTot = checkMsgParam8(recv);
else else
{ {
DUMP_SPI_DATA(_recv, len); DUMP_SPI(_recv, len);
paramLenTot = checkMsgParam16(recv); paramLenTot = checkMsgParam16(recv);
} }
@ -1512,8 +1601,8 @@ void spi_poll(struct netif* netif) {
int err = call_reply_cb(buf, &reply[0]); int err = call_reply_cb(buf, &reply[0]);
if (err != REPLY_NO_ERR) if (err != REPLY_NO_ERR)
{ {
DUMP_SPI_DATA(buf, count); DUMP_SPI(buf, count);
DUMP_SPI_DATA(reply, replyCount); DUMP_SPI(reply, replyCount);
} }
receivedChars = 0; receivedChars = 0;
count = 0; count = 0;
@ -1523,8 +1612,7 @@ void spi_poll(struct netif* netif) {
{ {
sendError(); sendError();
WARN("%d] Check format msg failed!\n", cmdCorr); WARN("%d] Check format msg failed!\n", cmdCorr);
if (enableDebug & INFO_WARN_FLAG) IF_WARN_VER(dump((char*)_receiveBuffer, receivedChars));
dump((char*)_receiveBuffer, receivedChars);
state = SPI_CMD_IDLE; state = SPI_CMD_IDLE;
count=0; count=0;
//mark as buffer used //mark as buffer used
@ -1553,11 +1641,6 @@ inline int spi_slaveReceiveInt(volatile avr32_spi_t *spi)
int err = SPI_OK; int err = SPI_OK;
state = SPI_CMD_INPUT; state = SPI_CMD_INPUT;
if (_receiveBuffer[0] != 0)
{
STATSPI_OVERRIDE_ERROR();
}
do { do {
unsigned int timeout = SPI_TIMEOUT; unsigned int timeout = SPI_TIMEOUT;
err = SPI_OK; err = SPI_OK;
@ -1569,8 +1652,20 @@ inline int spi_slaveReceiveInt(volatile avr32_spi_t *spi)
break; break;
} }
} }
_receiveBuffer[index] = (spi->rdr >> AVR32_SPI_RDR_RD_OFFSET) & 0x00ff; //DEB_PIN_TG();
#if 0
#ifdef _SPI_STATS_
if (spi->sr & AVR32_SPI_SR_OVRES_MASK)
{
STATSPI_OVERRIDE_ERROR();
}
#endif
#endif
if (err == SPI_OK) { if (err == SPI_OK) {
_receiveBuffer[index] = (spi->rdr >> AVR32_SPI_RDR_RD_OFFSET) & 0x00ff;
DEB_PIN_UP(2);
if ((index==0) && (_receiveBuffer[index] != START_CMD))
DEB_PIN_TRIGGER();
++index; ++index;
++receivedChars; ++receivedChars;
}else{ }else{
@ -1597,8 +1692,7 @@ __interrupt
static void spi_int_handler(void) static void spi_int_handler(void)
{ {
volatile avr32_spi_t *spi = ARD_SPI; volatile avr32_spi_t *spi = ARD_SPI;
//DEB_PIN_DN(); DEB_PIN_DN(2);
//AVAIL_FOR_SPI();
DISABLE_SPI_INT(); DISABLE_SPI_INT();
if ((spi->sr & AVR32_SPI_SR_RDRF_MASK) != 0) if ((spi->sr & AVR32_SPI_SR_RDRF_MASK) != 0)
@ -1610,12 +1704,10 @@ static void spi_int_handler(void)
startReply=true; startReply=true;
++cmdCorr; ++cmdCorr;
//maintain disable interrupt to send the reply command //maintain disable interrupt to send the reply command
//DEB_PIN_UP();
return; return;
} }
} }
ENABLE_SPI_INT(); ENABLE_SPI_INT();
//DEB_PIN_UP();
} }
inline spi_status_t spi_read8(volatile avr32_spi_t *spi, unsigned char *data) inline spi_status_t spi_read8(volatile avr32_spi_t *spi, unsigned char *data)

View File

@ -37,14 +37,22 @@ typedef enum {
CMD_IMM_SET_FLAG = 0x04, CMD_IMM_SET_FLAG = 0x04,
}cmd_flags; }cmd_flags;
typedef enum eProtMode {TCP_MODE, UDP_MODE}tProtMode;
#define TIMEOUT_SPI 200 #define TIMEOUT_SPI 200
#define SPI_ALIGN_ERROR 0xF0 #define SPI_ALIGN_ERROR 0xF0
#define SPI_OVERRIDE_ERROR 0xF1 #define SPI_OVERRIDE_ERROR 0xF1
#define SPI_TIMEOUT_ERROR 0xF2
#define DUMMY_DATA 0xFF #define DUMMY_DATA 0xFF
typedef int (*cmd_spi_cb_t)(int numParam, char* buf, void* ctx); typedef int (*cmd_spi_cb_t)(int numParam, char* buf, void* ctx);
typedef cmd_spi_state_t (*cmd_spi_rcb_t)(char* recv, char* reply, void* ctx, uint16_t* _count); typedef cmd_spi_state_t (*cmd_spi_rcb_t)(char* recv, char* reply, void* ctx, uint16_t* _count);
typedef struct eRemoteClient{
uint32_t ipaddr;
uint16_t port;
}tRemoteClient;
void set_result_cmd(int err) ; void set_result_cmd(int err) ;
void set_result(wl_status_t _status); void set_result(wl_status_t _status);
@ -61,10 +69,20 @@ void showTTCPstatus();
int getSock(void * _ttcp); int getSock(void * _ttcp);
void* getTTCP(uint8_t sock); void* getTTCP(uint8_t sock, uint8_t mode);
void clearMapSockTcp(uint8_t sock); void setMapSockMode(uint8_t sock, void* _ttcp, uint8_t _tcp_mode);
int start_server_tcp(uint16_t port, uint8_t sock); void clearMapSockTcp(uint8_t sock, uint8_t mode);
int start_server_tcp(uint16_t port, uint8_t sock, uint8_t protMode);
int start_client_tcp(uint32_t _addr, uint16_t port, uint8_t sock, uint8_t protMode);
void setRemoteClient(uint16_t sock, uint32_t _ipaddr, uint16_t _port);
tRemoteClient* getRemoteClient(uint16_t sock);
void getRemoteData(uint8_t sock, uint8_t mode, tRemoteClient* remoteData);
#endif /* ARD_SPI_H_ */ #endif /* ARD_SPI_H_ */

View File

@ -30,17 +30,20 @@
unsigned int startTime = 0; unsigned int startTime = 0;
extern bool ifStatus; extern bool ifStatus;
static uint8_t tcp_poll_retries = 0;
static int isDataSentCount = 0; static int isDataSentCount = 0;
bool pending_close = false;
bool pending_accept = false; bool pending_accept = false;
static err_t tcp_data_sent(void *arg, struct tcp_pcb *pcb, u16_t len); static err_t tcp_data_sent(void *arg, struct tcp_pcb *pcb, u16_t len);
static void atcp_init_pend_flags() static void atcp_init_pend_flags(struct ttcp* _ttcp)
{ {
pending_close = false; int i = 0;
for (; i<MAX_CLIENT_ACCEPTED; ++i)
{
if (_ttcp) _ttcp->pending_close[i] = false;
}
pending_accept = false; pending_accept = false;
} }
@ -51,17 +54,23 @@ static void ard_tcp_destroy(struct ttcp* ttcp) {
err_t err = ERR_OK; err_t err = ERR_OK;
DUMP_TCP_STATE(ttcp); DUMP_TCP_STATE(ttcp);
if (getSock(ttcp)==-1) uint8_t sock = getSock(ttcp);
if (sock == -1)
WARN("ttcp already deallocated!\n"); WARN("ttcp already deallocated!\n");
if (ttcp->tpcb) { freeAllTcpData(sock);
tcp_arg(ttcp->tpcb, NULL); int i = 0;
tcp_sent(ttcp->tpcb, NULL); for (; i<MAX_CLIENT_ACCEPTED; ++i)
tcp_recv(ttcp->tpcb, NULL); {
tcp_err(ttcp->tpcb, NULL); if (ttcp->tpcb[i]) {
//TEMPORAQARY tcp_arg(ttcp->tpcb[i], NULL);
//err = tcp_close(ttcp->tpcb); tcp_sent(ttcp->tpcb[i], NULL);
INFO_TCP("Closing tpcb: state:0x%x err:%d\n", ttcp->tpcb->state, err); tcp_recv(ttcp->tpcb[i], NULL);
tcp_err(ttcp->tpcb[i], NULL);
//TEMPORAQARY
//err = tcp_close(ttcp->tpcb);
INFO_TCP("Closing tpcb: state:0x%x err:%d\n", ttcp->tpcb[i]->state, err);
}
} }
if (ttcp->lpcb) { if (ttcp->lpcb) {
@ -82,38 +91,6 @@ static void ard_tcp_destroy(struct ttcp* ttcp) {
free(ttcp); free(ttcp);
} }
/**
* Clean up and free the ttcp structure
*/
static void ard_tcp_abort(struct ttcp* ttcp) {
INFO_TCP("Abort ttcb:%p tpcb:%p lpcb:%p\n", ttcp, ttcp->tpcb, ttcp->lpcb);
if (ttcp->tpcb) {
tcp_arg(ttcp->tpcb, NULL);
tcp_sent(ttcp->tpcb, NULL);
tcp_recv(ttcp->tpcb, NULL);
tcp_err(ttcp->tpcb, NULL);
tcp_abort(ttcp->tpcb);
}
if (ttcp->lpcb) {
tcp_arg(ttcp->lpcb, NULL);
tcp_accept(ttcp->lpcb, NULL);
tcp_abort(ttcp->lpcb);
}
if (ttcp->upcb) {
udp_disconnect(ttcp->upcb);
udp_remove(ttcp->upcb);
}
if (ttcp->payload)
free(ttcp->payload);
free(ttcp);
}
/** /**
* Invoked when transfer is done or aborted (non-zero result). * Invoked when transfer is done or aborted (non-zero result).
*/ */
@ -125,26 +102,25 @@ static void ard_tcp_done(struct ttcp* ttcp, int result) {
ttcp->done_cb(ttcp->opaque, result); ttcp->done_cb(ttcp->opaque, result);
ard_tcp_destroy(ttcp); ard_tcp_destroy(ttcp);
clearMapSockTcp(getSock(ttcp)); clearMapSockTcp(getSock(ttcp), GET_TCP_MODE(ttcp));
} }
static void
tcp_timeout_cb(void *ctx);
/** /**
* Only used in TCP mode. * Only used in TCP mode.
* Will transmit a maximum of pbuf->tot_len bytes. * Will transmit a maximum of pbuf->tot_len bytes.
* Called upon connect and when there's space available in the TCP send window * Called upon connect and when there's space available in the TCP send window
* *
*/ */
static void tcp_send_data(struct ttcp *ttcp) { static err_t tcp_send_data(struct ttcp *ttcp) {
err_t err = ERR_OK; err_t err = ERR_OK;
uint32_t len, orig_len; uint32_t len, orig_len;
len = ttcp->left; len = ttcp->left;
ttcp->buff_sent = 0; ttcp->buff_sent = 0;
INFO_TCP_VER("left=%d len:%d tcp_sndbuf:%d\n", ttcp->left, len, tcp_sndbuf(ttcp->tpcb));
if (len == 0) return;
INFO_TCP_VER("left=%d len:%d\n", ttcp->left, len);
/* don't send more than we have in the payload */ /* don't send more than we have in the payload */
if (len > ttcp->buflen) if (len > ttcp->buflen)
@ -152,91 +128,92 @@ static void tcp_send_data(struct ttcp *ttcp) {
/* We cannot send more data than space available in the send /* We cannot send more data than space available in the send
buffer. */ buffer. */
if (len > tcp_sndbuf(ttcp->tpcb)) if (len > tcp_sndbuf(GET_FIRST_CLIENT_TCP(ttcp)))
len = tcp_sndbuf(ttcp->tpcb); len = tcp_sndbuf(GET_FIRST_CLIENT_TCP(ttcp));
orig_len = len; orig_len = len;
uint8_t count = 0;
do {
startTime = timer_get_ms();
err = tcp_write(ttcp->tpcb, ttcp->payload, len, TCP_WRITE_FLAG_COPY);
INFO_TCP_VER("%d) tcp_write %p state:%d len:%d err:%d\n", count++, ttcp->tpcb, ttcp->tpcb->state, len, err);
if (err == ERR_MEM)
{
len /= 2;
ttcp->buff_sent = 0;
}else if (err == ERR_OK){
ttcp->buff_sent = 1;
isDataSentCount = 0;
}
} while (err == ERR_MEM && len > 1);
if (err == ERR_OK){ IF_TCP(startTime = timer_get_ms());
//tcp_output(ttcp->tpcb); err = tcp_write(GET_FIRST_CLIENT_TCP(ttcp), ttcp->payload, len, TCP_WRITE_FLAG_COPY);
INFO_TCP_VER("tcp_output: left=%d new left:%d\n", if (err != ERR_OK)
ttcp->left, ttcp->left-len); {
INFO_TCP("tcp_write failed %p state:%d len:%d err:%d\n",
GET_FIRST_CLIENT_TCP(ttcp), GET_FIRST_CLIENT_TCP(ttcp)->state, len, err);
ttcp->buff_sent = 0;
}else{
ttcp->buff_sent = 1;
isDataSentCount = 0;
ttcp->left -= len; ttcp->left -= len;
} }
else
WARN("TTCP [%p-%p]: tcp_write failed err:%d origLen:%d len:%d\n", return err;
ttcp, ttcp->tpcb, err, orig_len, len);
//
// ttcp->tid = timer_sched_timeout_cb(0, TIMEOUT_ONESHOT,
// tcp_timeout_cb, ttcp);
} }
/** /**
* Only used in TCP mode. * Only used in TCP mode.
*/ */
static err_t tcp_connect_cb(void *arg, struct tcp_pcb *tpcb, err_t err) { static err_t tcp_connect_cb(void *arg, struct tcp_pcb *tpcb, err_t err) {
struct ttcp* ttcp = arg; struct ttcp* _ttcp = arg;
INFO_TCP("TTCP [%p-%p]: connect %d %d\n", ttcp, tpcb, err, ttcp->tpcb->state); if (_ttcp == NULL) return ERR_ARG;
_connected = ( ttcp->tpcb->state == ESTABLISHED) ? 1 : 0; INFO_TCP("TTCP [%p-%p]: connect %d %d\n", _ttcp, tpcb, err, tpcb->state);
tcp_poll_retries = 0;
ttcp->start_time = timer_get_ms(); _connected = ( tpcb->state == ESTABLISHED) ? 1 : 0;
_ttcp->tcp_poll_retries = 0;
_ttcp->start_time = timer_get_ms();
return ERR_OK; return ERR_OK;
} }
static void cleanSockState_cb(void *ctx) { static void cleanSockState_cb(void *ctx) {
struct ttcp* ttcp = ctx; struct ttcp* _ttcp = ctx;
int sock = getSock(ttcp); if (_ttcp == NULL) return;
int sock = getSock(_ttcp);
if (sock != -1) if (sock != -1)
clearMapSockTcp(sock); clearMapSockTcp(sock, GET_TCP_MODE(_ttcp));
INFO_TCP("TTCP [%p]: cleanSockState_cb %d\n", ttcp, sock); INFO_TCP("TTCP [%p]: cleanSockState_cb %d\n", _ttcp, sock);
_connected = false; _connected = false;
} }
static void cleanSockStateDelayed(void * arg)
{
INFO_TCP("arg %p\n", arg);
timer_sched_timeout_cb(1000, TIMEOUT_ONESHOT,
cleanSockState_cb, arg);
}
/** /**
* Only used in TCP mode. * Only used in TCP mode.
*/ */
static err_t close_conn_pcb(struct tcp_pcb* tpcb) {
err_t err = tcp_close(tpcb);
if (err== ERR_OK)
{
tcp_arg(tpcb, NULL);
tcp_sent(tpcb, NULL);
tcp_recv(tpcb, NULL);
}
INFO_TCP("Closing tpcb[%p]: state:0x%x err:%d\n", tpcb, tpcb->state, err);
return err;
}
static void atcp_conn_err_cb(void *arg, err_t err) { static void atcp_conn_err_cb(void *arg, err_t err) {
struct ttcp* _ttcp = arg; struct ttcp* _ttcp = arg;
WARN("TTCP [%p]: connection error: %d arg:%p\n", WARN("TTCP [%p]: connection error: %d\n",
_ttcp, err, arg); _ttcp, err);
if (ifStatus == false) if (ifStatus == false)
printk("Abort connection\n"); printk("Abort connection\n");
cleanSockState_cb(_ttcp);
atcp_init_pend_flags(); atcp_init_pend_flags(_ttcp);
} }
static void atcp_conn_cli_err_cb(void *arg, err_t err) { static void atcp_conn_cli_err_cb(void *arg, err_t err) {
struct ttcp* _ttcp = arg; struct ttcp* _ttcp = arg;
if (_ttcp == NULL) return;
WARN("TTCP [%p]: connection error: %d arg:%p\n", WARN("TTCP [%p]: connection error: %d arg:%p\n",
_ttcp, err, arg); _ttcp, err, arg);
@ -246,47 +223,52 @@ static void atcp_conn_cli_err_cb(void *arg, err_t err) {
if ((_ttcp)&&(err == ERR_ABRT)) if ((_ttcp)&&(err == ERR_ABRT))
{ {
WARN("TTCP [%p]: free memory\n", _ttcp); WARN("TTCP [%p]: free memory\n", _ttcp);
tcp_poll_retries = 0; _ttcp->tcp_poll_retries = 0;
cleanSockState_cb(_ttcp); cleanSockState_cb(_ttcp);
if (_ttcp->payload) if (_ttcp->payload)
free(_ttcp->payload); free(_ttcp->payload);
free(_ttcp); free(_ttcp);
} }
atcp_init_pend_flags(); atcp_init_pend_flags(_ttcp);
} }
static err_t close_conn(struct ttcp *_ttcp, struct tcp_pcb* tpcb) {
static void close_conn(struct ttcp *_ttcp) { if (_ttcp == NULL) return;
tcp_arg(_ttcp->tpcb, NULL);
tcp_sent(_ttcp->tpcb, NULL); int8_t id = getNewClientConnId(_ttcp, tpcb);
tcp_recv(_ttcp->tpcb, NULL); if (id == NO_VALID_ID) return;
err_t err = tcp_close(_ttcp->tpcb); err_t err = close_conn_pcb(_ttcp->tpcb[id]);
INFO_TCP("Closing tpcb[%p]: state:0x%x err:%d\n",_ttcp->tpcb, _ttcp->tpcb->state, err);
if (err == ERR_MEM) if (err == ERR_MEM)
pending_close = true; _ttcp->pending_close[id] = true;
else{ else{
atcp_init_pend_flags(); atcp_init_pend_flags(_ttcp);
removeNewClientConn(_ttcp, _ttcp->tpcb[id]);
WARN("----------------------\n"); WARN("----------------------\n");
} }
return err;
} }
void closeConnections() void closeConnections()
{ {
int i = 0; int ii=0;
for (; i<MAX_SOCK_NUM; i++) for (; ii<MAX_MODE_NUM; ii++)
{ {
void* p = getTTCP(i); int i = 0;
if (p) for (; i<MAX_SOCK_NUM; i++)
{ {
ttcp_t* _ttcp = (ttcp_t* )p; void* p = getTTCP(i, ii);
if (p)
INFO_TCP("Closing connections tpcb[%p] state:0x%x - lpcb[%p] state: 0x%x\n", {
_ttcp->tpcb, _ttcp->tpcb->state, _ttcp->lpcb, _ttcp->lpcb->state); ttcp_t* _ttcp = (ttcp_t* )p;
//tcp_close(_ttcp->tpcb); if (_ttcp->udp == TCP_MODE)
ard_tcp_destroy(_ttcp); {
clearMapSockTcp(getSock(_ttcp)); ard_tcp_destroy(_ttcp);
clearMapSockTcp(getSock(_ttcp), GET_TCP_MODE(_ttcp));
}
}
} }
} }
} }
@ -299,7 +281,6 @@ static err_t atcp_recv_cb(void *arg, struct tcp_pcb *pcb, struct pbuf *p,
struct ttcp* ttcp = arg; struct ttcp* ttcp = arg;
if (err == ERR_OK && p != NULL) { if (err == ERR_OK && p != NULL) {
INFO_TCP("pcb:%p pbuf: %p err:%d len:%d\n", pcb, p, err, p->tot_len);
DATA_LED_ON(); DATA_LED_ON();
/* for print_stats() */ /* for print_stats() */
ttcp->recved += p->tot_len; ttcp->recved += p->tot_len;
@ -310,16 +291,17 @@ static err_t atcp_recv_cb(void *arg, struct tcp_pcb *pcb, struct pbuf *p,
ttcp->print_cnt++; ttcp->print_cnt++;
} }
insert_pBuf(p, ttcp->sock, (void*) pcb); uint8_t* pBufferStore = insert_pBuf(p, ttcp->sock, (void*) pcb);
tcp_recved(pcb, p->tot_len); INFO_TCP("sock:%d pcb:%p pbuf:%p err:%d bufStore:%p len:%d\n",
ttcp->sock, pcb, p, err, pBufferStore, p->tot_len);
pbuf_free(p); pbuf_free(p);
DATA_LED_OFF(); DATA_LED_OFF();
} }
/* p will be NULL when remote end is done */ /* p will be NULL when remote end is done */
if (err == ERR_OK && p == NULL) { if (err == ERR_OK && p == NULL) {
INFO_TCP("atcp_recv_cb p=NULL\n"); INFO_TCP("atcp_recv_cb p=NULL on sock:%d pcb:%p\n", ttcp->sock, pcb);
close_conn(ttcp); close_conn(ttcp, pcb);
} }
if (err!=ERR_OK) if (err!=ERR_OK)
@ -329,67 +311,90 @@ static err_t atcp_recv_cb(void *arg, struct tcp_pcb *pcb, struct pbuf *p,
void ack_recved(void* pcb, int len) { void ack_recved(void* pcb, int len) {
// Comment the call because it is activated on atcp_recv_cb // Comment the call because it is activated on atcp_recv_cb
//tcp_recved(pcb, len); INFO_TCP("Received %p len:%d\n", pcb, len);
tcp_recved(pcb, len);
} }
static err_t atcp_poll(void *arg, struct tcp_pcb *pcb) { static err_t atcp_poll(void *arg, struct tcp_pcb *pcb) {
struct ttcp* _ttcp = arg; struct ttcp* _ttcp = arg;
if ((_ttcp) && (_ttcp->left>0))
++tcp_poll_retries;
if (tcp_poll_retries > 4) { if (_ttcp == NULL) return ERR_ARG;
if (_ttcp->left>0)
++_ttcp->tcp_poll_retries;
if (_ttcp->tcp_poll_retries > 4) {
WARN("ARD TCP [%p] arg=%p retries=%d\n", WARN("ARD TCP [%p] arg=%p retries=%d\n",
pcb, arg, tcp_poll_retries); pcb, arg, _ttcp->tcp_poll_retries);
tcp_poll_retries = 0; _ttcp->tcp_poll_retries = 0;
tcp_abort(pcb); tcp_abort(pcb);
atcp_init_pend_flags(); atcp_init_pend_flags(_ttcp);
return ERR_ABRT; return ERR_ABRT;
} }
if (pcb)
INFO_TCP_POLL("keepAliveCnt:%d keep_idle:%d persist_cnt:%d\n",
pcb->keep_cnt_sent, pcb->keep_idle, pcb->persist_cnt);
WARN("ARD TCP [%p-%p] arg=%p retries=%d pend.close:%d\n", (_ttcp)?_ttcp->tpcb:0, pcb, arg, if (_ttcp->left > 0)
tcp_poll_retries, pending_close); INFO_TCP("ARD TCP [%p-%p] arg=%p retries=%d pend.close:%d len:%d\n",
if (_ttcp) tcp_send_data(_ttcp); (_ttcp)?GET_FIRST_CLIENT_TCP(_ttcp):0, pcb, arg,
_ttcp->tcp_poll_retries, _ttcp->pending_close, (_ttcp)?_ttcp->left:0);
tcp_send_data(_ttcp);
if (pending_close) int8_t id = getNewClientConnId(_ttcp, pcb);
{ if ((id != NO_VALID_ID) && (_ttcp->pending_close[id]))
err_t err = tcp_close(pcb); {
if (err == ERR_MEM) err_t err = ERR_OK;
{ if (id >=0){
pending_close = true; err = tcp_close(pcb);
} if (err == ERR_MEM)
else {
{ _ttcp->pending_close[id] = true;
atcp_init_pend_flags(); }
} else
{
INFO_TCP("ARD TCP [%p-%p] try to close pending:%d\n", pcb, (_ttcp)?_ttcp->tpcb:0, pending_close); atcp_init_pend_flags(_ttcp);
}
}
INFO_TCP("ARD TCP [%p-%p] try to close pending:%d err:%d id:%d\n", pcb,
(_ttcp)?GET_FIRST_CLIENT_TCP(_ttcp):0, _ttcp->pending_close[id], err, id);
} }
return ERR_OK; return ERR_OK;
} }
static err_t atcp_poll_conn(void *arg, struct tcp_pcb *pcb) { static err_t atcp_poll_conn(void *arg, struct tcp_pcb *pcb) {
struct ttcp* _ttcp = arg; struct ttcp* _ttcp = arg;
++tcp_poll_retries;
if (tcp_poll_retries > 8) { if (_ttcp == NULL) return ERR_ARG;
int8_t id = getNewClientConnId(_ttcp, pcb);
if (id != NO_VALID_ID)
{
if (_ttcp->pending_close[id])
++(_ttcp->tcp_poll_retries);
}
if (_ttcp->tcp_poll_retries > 8) {
WARN("ARD TCP [%p-%p] arg=%p retries=%d\n", WARN("ARD TCP [%p-%p] arg=%p retries=%d\n",
pcb, _ttcp->tpcb, arg, tcp_poll_retries); pcb, GET_FIRST_CLIENT_TCP(_ttcp), arg, _ttcp->tcp_poll_retries);
tcp_poll_retries = 0; _ttcp->tcp_poll_retries = 0;
tcp_abort(pcb); tcp_abort(pcb);
return ERR_ABRT; return ERR_ABRT;
} }
WARN("ARD TCP [%p-%p] arg=%p retries=%d pend.close:%d conn:%d\n", (_ttcp)?_ttcp->tpcb:0, pcb, arg, INFO_TCP_POLL("ARD TCP [%p-%p] arg=%p retries=%d pend.close:%d conn:%d\n",
tcp_poll_retries, pending_close, _connected); (_ttcp)?GET_FIRST_CLIENT_TCP(_ttcp):0, pcb, arg,
_ttcp->tcp_poll_retries, _ttcp->pending_close[id], _connected);
if ((_ttcp)&&(_connected)) tcp_send_data(_ttcp); if ((_ttcp)&&(_connected)) tcp_send_data(_ttcp);
if (pending_close) if ((id != NO_VALID_ID) && (_ttcp->pending_close[id]))
{ {
err_t err = tcp_close(pcb); err_t err = tcp_close(pcb);
if (err == ERR_MEM) if (err == ERR_MEM)
{ {
pending_close = true; _ttcp->pending_close[id] = true;
} }
else else
{ {
@ -397,25 +402,99 @@ static err_t atcp_poll_conn(void *arg, struct tcp_pcb *pcb) {
if (_ttcp->payload) if (_ttcp->payload)
free(_ttcp->payload); free(_ttcp->payload);
free(_ttcp); free(_ttcp);
pending_close = false; _ttcp->pending_close[id] = false;
} }
INFO_TCP("ARD TCP [%p-%p] try to close pending:%d\n", pcb, (_ttcp)?_ttcp->tpcb:0, pending_close); INFO_TCP("ARD TCP [%p-%p] try to close pending:%d\n", pcb, (_ttcp)?GET_FIRST_CLIENT_TCP(_ttcp):0, _ttcp->pending_close[id]);
} }
return ERR_OK; return ERR_OK;
} }
int8_t getNewClientConnId(struct ttcp* _ttcp, struct tcp_pcb *newpcb)
{
if (_ttcp != NULL){
int i = 0;
for (; i<MAX_CLIENT_ACCEPTED; ++i)
{
if (_ttcp->tpcb[i] == newpcb)
{
INFO_TCP("ttcp:%p id=%d, tpcb=%p\n", _ttcp, i, newpcb);
return i;
}
}
}
WARN("No Valid Id for ttcp:%p pcb:%p\n");
return NO_VALID_ID;
}
int8_t setNewClientConn(struct ttcp* _ttcp, struct tcp_pcb *newpcb, uint8_t id)
{
if ((_ttcp != NULL)&&(id>=0)&&(id<MAX_CLIENT_ACCEPTED)){
INFO_TCP("ttcp:%p id=%d, tpcb=%p\n", _ttcp, id, newpcb);
_ttcp->tpcb[id] = newpcb;
return id;
}
return NO_VALID_ID;
}
int8_t insertNewClientConn(struct ttcp* _ttcp, struct tcp_pcb *newpcb)
{
if (_ttcp != NULL){
int i = 0;
for (; i<MAX_CLIENT_ACCEPTED; ++i)
{
if ((_ttcp->tpcb[i] == NULL)||(_ttcp->tpcb[i] == newpcb))
{
INFO_TCP("ttcp:%p id=%d, tpcb=%p\n", _ttcp, i, newpcb);
_ttcp->tpcb[i] = newpcb;
return i;
}
}
}
return NO_VALID_ID;
}
int8_t removeNewClientConn(struct ttcp* _ttcp, struct tcp_pcb *newpcb)
{
if (_ttcp != NULL){
int i = 0;
for (; i<MAX_CLIENT_ACCEPTED; ++i)
{
if (_ttcp->tpcb[i] == newpcb)
{
INFO_TCP("ttcp:%p id=%d, tpcb=%p\n", _ttcp, i, newpcb);
_ttcp->tpcb[i] = NULL;
return i;
}
}
}
return NO_VALID_ID;
}
bool cleanNewClientConn(struct ttcp* _ttcp)
{
if (_ttcp != NULL){
int i = 0;
for (; i<MAX_CLIENT_ACCEPTED; ++i)
_ttcp->tpcb[i] = NULL;
return true;
}
return false;
}
/** /**
* Only used in TCP mode. * Only used in TCP mode.
*/ */
static err_t atcp_accept_cb(void *arg, struct tcp_pcb *newpcb, err_t err) { static err_t atcp_accept_cb(void *arg, struct tcp_pcb *newpcb, err_t err) {
struct ttcp* ttcp = arg; struct ttcp* _ttcp = arg;
INFO_TCP("ARD TCP [%p]: accept new [%p]\n", ttcp, newpcb); if (_ttcp == NULL) return ERR_ARG;
INFO_TCP("ARD TCP [%p]: accept new [%p]\n", _ttcp, newpcb);
INFO_TCP("local:%d remote:%d state:%d\n", newpcb->local_port, newpcb->remote_port, newpcb->state); INFO_TCP("local:%d remote:%d state:%d\n", newpcb->local_port, newpcb->remote_port, newpcb->state);
/*
if (pending_accept) if (pending_accept)
{ {
WARN("Accepting another connection: %p-%p\n", ttcp->tpcb, newpcb); WARN("Accepting another connection: %p-%p\n", ttcp->tpcb, newpcb);
@ -429,7 +508,23 @@ static err_t atcp_accept_cb(void *arg, struct tcp_pcb *newpcb, err_t err) {
tcp_err(ttcp->tpcb, atcp_conn_err_cb); tcp_err(ttcp->tpcb, atcp_conn_err_cb);
tcp_poll(ttcp->tpcb, atcp_poll, 4); tcp_poll(ttcp->tpcb, atcp_poll, 4);
ttcp->start_time = timer_get_ms(); _ttcp->tcp_poll_retries = 0;
/*
if (_ttcp->tpcb == NULL)
{
WARN("Replace previous tpcb=0x%x with the new one 0x%x\n", _ttcp->tpcb, newpcb);
}
*/
int8_t id = insertNewClientConn(_ttcp, newpcb);
tcp_arg(_ttcp->tpcb[id], _ttcp);
tcp_recv(_ttcp->tpcb[id], atcp_recv_cb);
tcp_err(_ttcp->tpcb[id], atcp_conn_err_cb);
tcp_poll(_ttcp->tpcb[id], atcp_poll, 4);
// Copy the pointer to ttcp also to TRANSMIT mode for the clients connected to the server
int _sock = getSock(_ttcp);
if ((_sock != -1)&&(IS_VALID_SOCK(_sock)))
setMapSockMode(_sock, _ttcp, TTCP_MODE_TRANSMIT);
_ttcp->start_time = timer_get_ms();
return ERR_OK; return ERR_OK;
} }
@ -439,8 +534,9 @@ static err_t atcp_accept_cb(void *arg, struct tcp_pcb *newpcb, err_t err) {
static int atcp_start(struct ttcp* ttcp) { static int atcp_start(struct ttcp* ttcp) {
err_t err = ERR_OK; err_t err = ERR_OK;
ttcp->tpcb = tcp_new(); struct tcp_pcb * p = tcp_new();
if (ttcp->tpcb == NULL) {
if (p == NULL) {
WARN("TTCP [%p]: could not allocate pcb\n", ttcp); WARN("TTCP [%p]: could not allocate pcb\n", ttcp);
return -1; return -1;
} }
@ -451,43 +547,38 @@ static int atcp_start(struct ttcp* ttcp) {
return -1; return -1;
} }
tcp_arg(ttcp->tpcb, ttcp); tcp_arg(p, ttcp);
atcp_init_pend_flags(); atcp_init_pend_flags(ttcp);
if (ttcp->mode == TTCP_MODE_TRANSMIT) { if (ttcp->mode == TTCP_MODE_TRANSMIT) {
tcp_err(ttcp->tpcb, atcp_conn_cli_err_cb); setNewClientConn(ttcp, p, 0);
tcp_recv(ttcp->tpcb, atcp_recv_cb); tcp_err(GET_FIRST_CLIENT_TCP(ttcp), atcp_conn_cli_err_cb);
tcp_sent(ttcp->tpcb, tcp_data_sent); tcp_recv(GET_FIRST_CLIENT_TCP(ttcp), atcp_recv_cb);
tcp_poll(ttcp->tpcb, atcp_poll_conn, 4); tcp_sent(GET_FIRST_CLIENT_TCP(ttcp), tcp_data_sent);
tcp_poll(GET_FIRST_CLIENT_TCP(ttcp), atcp_poll_conn, 4);
_connected = false; _connected = false;
INFO_TCP("[tpcb]-%p payload:%p\n", ttcp->tpcb, ttcp->payload); INFO_TCP("[tpcb]-%p payload:%p\n", GET_FIRST_CLIENT_TCP(ttcp), ttcp->payload);
DUMP_TCP_STATE(ttcp); DUMP_TCP_STATE(ttcp);
if (tcp_connect(ttcp->tpcb, &ttcp->addr, ttcp->port, tcp_connect_cb) if (tcp_connect(GET_FIRST_CLIENT_TCP(ttcp), &ttcp->addr, ttcp->port, tcp_connect_cb)
!= ERR_OK) { != ERR_OK) {
WARN("TTCP [%p]: tcp connect failed\n", ttcp); WARN("TTCP [%p]: tcp connect failed\n", ttcp);
return -1; return -1;
} }
} else { } else {
INFO_TCP("BEFORE BIND ttcp:%p lpcb:%p pcb:%p\n", ttcp, ttcp->lpcb, ttcp->tpcb); INFO_TCP("BEFORE BIND ttcp:%p lpcb:%p pcb:%p\n", ttcp, ttcp->lpcb, GET_FIRST_CLIENT_TCP(ttcp));
INFO_TCP("[tpcb]-local:%d remote:%d state:%d\n", ttcp->tpcb->local_port,
ttcp->tpcb->remote_port, ttcp->tpcb->state);
err = tcp_bind(ttcp->tpcb, IP_ADDR_ANY, ttcp->port); err = tcp_bind(p, IP_ADDR_ANY, ttcp->port);
if (err != ERR_OK){ if (err != ERR_OK){
WARN("TTCP [%p]: bind failed err=%d Port already used\n", ttcp, err); WARN("TTCP [%p]: bind failed err=%d Port already used\n", ttcp, err);
return -1; return -1;
} }
ttcp->lpcb = tcp_listen(ttcp->tpcb); ttcp->lpcb = tcp_listen(p);
if (ttcp->lpcb == NULL) { if (ttcp->lpcb == NULL) {
WARN("TTCP [%p]: listen failed\n", ttcp); WARN("TTCP [%p]: listen failed\n", ttcp);
return -1; return -1;
} }
if (ttcp->lpcb == ttcp->tpcb ) {
WARN("TTCP [%p]: listen failed tpcb [%p] in listen mode\n", ttcp, ttcp->tpcb);
return -1;
}
DUMP_TCP_STATE(ttcp); DUMP_TCP_STATE(ttcp);
tcp_accept(ttcp->lpcb, atcp_accept_cb); tcp_accept(ttcp->lpcb, atcp_accept_cb);
@ -566,60 +657,59 @@ static void udp_send_data(struct ttcp* ttcp) {
* Only used in UDP mode. Will finalize the ttcp process when an end marker * Only used in UDP mode. Will finalize the ttcp process when an end marker
* is seen. * is seen.
*/ */
static void udp_recv_cb(void *arg, struct udp_pcb *upcb, struct pbuf *p, static void audp_recv_cb(void *arg, struct udp_pcb *upcb, struct pbuf *p,
struct ip_addr *addr, u16_t port) { struct ip_addr *addr, u16_t port) {
struct ttcp* ttcp = arg; struct ttcp* ttcp = arg;
/* got start marker? we might lose this so if we get it just reset
* the timer
*/
if (!ttcp->udp_started && p->tot_len <= 4) {
ttcp->start_time = timer_get_ms();
ttcp->udp_started = 1;
goto out;
}
/* after receiving at least 1 byte, check end marker
* don't check udp_started since we might have lost the start marker
*/
if (ttcp->recved && p->tot_len <= 4) {
ard_tcp_done(ttcp, 0);
goto out;
}
/* for print_stats() */ /* for print_stats() */
ttcp->recved += p->tot_len; ttcp->recved += p->tot_len;
DUMP(p->payload,p->tot_len);
if (ttcp->verbose) { if (ttcp->verbose) {
printk("."); printk(".");
if (ttcp->print_cnt % 80 == 0) if (ttcp->print_cnt % 80 == 0)
printk("\n"); printk("\n");
ttcp->print_cnt++; ttcp->print_cnt++;
} }
INFO_TCP("UDP Insert %p sock:%d addr:%s port:%d\n", p, ttcp->sock,
ip2str(*addr), port);
insert_pBuf(p, ttcp->sock, (void*) upcb);
setRemoteClient(ttcp->sock, addr->addr, port);
out: pbuf_free(p); pbuf_free(p);
} }
/** /**
* Start UDP transfer. * Start UDP transfer.
*/ */
static int udp_start(struct ttcp* ttcp) { static int udp_start(struct ttcp* ttcp) {
err_t err = ERR_OK;
ttcp->udp_end_marker_left = 5; ttcp->udp_end_marker_left = 5;
ttcp->upcb = udp_new(); ttcp->upcb = udp_new();
if (ttcp->upcb == NULL) { if (ttcp->upcb == NULL) {
printk("TTCP [%p]: could not allocate pcb\n", ttcp); WARN("TTCP [%p]: could not allocate pcb\n", ttcp);
return -1; return -1;
} }
printk("%s, upcb:%p %s:%d\n", __FUNCTION__, ttcp->upcb, ip2str(ttcp->addr), ttcp->port);
if (ttcp->mode == TTCP_MODE_TRANSMIT) { if (ttcp->mode == TTCP_MODE_TRANSMIT) {
if (udp_connect(ttcp->upcb, &ttcp->addr, ttcp->port) != ERR_OK) { if (udp_connect(ttcp->upcb, &(ttcp->addr), ttcp->port) != ERR_OK) {
printk("TTCP [%p]: udp connect failed\n", ttcp); WARN("TTCP [%p]: udp connect failed\n", ttcp);
return -1; return -1;
} }
udp_send_data(ttcp);
} else { } else {
udp_recv(ttcp->upcb, udp_recv_cb, ttcp); /* bind to any IP address on port specified */
err = udp_bind(ttcp->upcb, IP_ADDR_ANY, ttcp->port);
if (err!= ERR_OK) {
WARN("TTCP [%p]: bind failed err=%d Port already used\n", ttcp, err);
return -1;
}
// clear remote client data
setRemoteClient(ttcp->sock, 0, 0);
udp_recv(ttcp->upcb, audp_recv_cb, ttcp);
} }
printk("%s, loc:0x%x-%d rem:0x%x-%d\n", __FUNCTION__,
ttcp->upcb->local_ip.addr, ttcp->upcb->local_port,
ttcp->upcb->remote_ip.addr, ttcp->upcb->remote_port);
return 0; return 0;
} }
@ -660,12 +750,13 @@ int ard_tcp_start(struct ip_addr addr, uint16_t port, void *opaque,
ttcp->port = port; ttcp->port = port;
ttcp->nbuf = nbuf; ttcp->nbuf = nbuf;
ttcp->mode = mode; ttcp->mode = mode;
ttcp->left = nbuf * buflen; ttcp->left = 0;
ttcp->done_cb = done_cb; ttcp->done_cb = done_cb;
ttcp->opaque = opaque; ttcp->opaque = opaque;
ttcp->udp = udp; ttcp->udp = udp;
ttcp->verbose = verbose; ttcp->verbose = verbose;
ttcp->buflen = buflen; ttcp->buflen = buflen;
cleanNewClientConn(ttcp);
if (ttcp->udp) if (ttcp->udp)
status = udp_start(ttcp); status = udp_start(ttcp);
@ -677,8 +768,8 @@ int ard_tcp_start(struct ip_addr addr, uint16_t port, void *opaque,
goto fail; goto fail;
} }
INFO_TCP("TTCP [%p-%p]: nbuf=%d, buflen=%d, port=%d (%s/%s)\n", ttcp, INFO_TCP("TTCP [%p-%p]: nbuf=%d, buflen=%d, port=%d (%s/%s)\n", ttcp,
ttcp->tpcb, ttcp->nbuf, ttcp->buflen, ttcp->port, ttcp->udp ? "udp" ((ttcp->udp==1)?(void*)ttcp->upcb:GET_FIRST_CLIENT_TCP(ttcp)), ttcp->nbuf, ttcp->buflen,
: "tcp", ttcp->mode == TTCP_MODE_TRANSMIT ? "tx" : "rx"); ttcp->port, ProtMode2Str(ttcp->udp), Mode2Str(ttcp->mode));
*_ttcp = (void*) ttcp; *_ttcp = (void*) ttcp;
ttcp->sock = sock; ttcp->sock = sock;
@ -699,17 +790,25 @@ void ard_tcp_stop(void* ttcp) {
return; return;
} }
if (_ttcp->mode == TTCP_MODE_TRANSMIT) { if (_ttcp->mode == TTCP_MODE_TRANSMIT) {
INFO_TCP("Destroy TCP connection...state:%d\n", _ttcp->tpcb->state);
ard_tcp_destroy(_ttcp); ard_tcp_destroy(_ttcp);
clearMapSockTcp(getSock(_ttcp)); clearMapSockTcp(getSock(_ttcp), GET_TCP_MODE(_ttcp));
tcp_poll_retries = 0; _ttcp->tcp_poll_retries = 0;
}else{ }else{
INFO_TCP("Closing connection...state:%d\n", _ttcp->tpcb->state);
DUMP_TCP_STATE(_ttcp); DUMP_TCP_STATE(_ttcp);
if ((_ttcp)&&(_ttcp->tpcb)&&(_ttcp->tpcb->state!=LAST_ACK)&&(_ttcp->tpcb->state!=CLOSED))
int i = 0;
for (; i<MAX_CLIENT_ACCEPTED; ++i)
{ {
close_conn(_ttcp); if ((_ttcp)&&(_ttcp->tpcb[i])&&(_ttcp->tpcb[i]->state!=LAST_ACK)&&(_ttcp->tpcb[i]->state!=CLOSED))
{
// Flush all the data
err_t err=tcp_output(_ttcp->tpcb[i]);
INFO_TCP("flush data: tpcb:%p err:%d\n", _ttcp->tpcb[i], err);
// if any socket cannot be close stop the close connection
if (close_conn(_ttcp, _ttcp->tpcb[i]) != ERR_OK) break;
}
} }
pending_accept = false; pending_accept = false;
} }
} }
@ -719,15 +818,15 @@ uint8_t getStateTcp(void* p, bool client) {
if (ifStatus == false) if (ifStatus == false)
return CLOSED; return CLOSED;
if ((_ttcp != NULL) && (_ttcp->tpcb != NULL)) { if ((_ttcp != NULL) && ((GET_FIRST_CLIENT_TCP(_ttcp) != NULL) || (client==0))) {
//DUMP_TCP_STATE(_ttcp); IF_SPI_POLL(DUMP_TCP_STATE(_ttcp));
if (client) if (client)
return _ttcp->tpcb->state; return GET_FIRST_CLIENT_TCP(_ttcp)->state;
else else
return _ttcp->lpcb->state; return _ttcp->lpcb->state;
} else { } else {
INFO_TCP_VER("TCP not initialized ttcp:%p tpcb:%p lpcb:%p\n", WARN_POLL("TCP not initialized ttcp:%p tpcb:%p lpcb:%p\n",
_ttcp, ((_ttcp)?_ttcp->tpcb:0), ((_ttcp)?_ttcp->lpcb:0)); _ttcp, ((_ttcp)?GET_FIRST_CLIENT_TCP(_ttcp):0), ((_ttcp)?_ttcp->lpcb:0));
} }
return CLOSED; return CLOSED;
} }
@ -759,7 +858,9 @@ static err_t tcp_data_sent(void *arg, struct tcp_pcb *pcb, u16_t len) {
_ttcp = arg; _ttcp = arg;
tcp_poll_retries = 0; if (_ttcp == NULL) return ERR_ARG;
_ttcp->tcp_poll_retries = 0;
if (_ttcp) _ttcp->buff_sent = 1; if (_ttcp) _ttcp->buff_sent = 1;
@ -775,10 +876,8 @@ static err_t tcp_data_sent(void *arg, struct tcp_pcb *pcb, u16_t len) {
return ERR_OK; return ERR_OK;
} }
int sendTcpData(void* p, uint8_t* buf, uint16_t len) { int sendTcpData(void* p, uint8_t* buf, uint16_t len)
INFO_TCP("buf:%p len:%d\n", buf, len); {
DUMP_TCP(buf,len);
struct ttcp* _ttcp = (struct ttcp*) p; struct ttcp* _ttcp = (struct ttcp*) p;
if (_ttcp==NULL) if (_ttcp==NULL)
@ -786,24 +885,24 @@ int sendTcpData(void* p, uint8_t* buf, uint16_t len) {
WARN("ttcp == NULL!\n"); WARN("ttcp == NULL!\n");
return WL_FAILURE; return WL_FAILURE;
} }
INFO_TCP_VER("ttcp:%p pcb:%p buf:%p len:%d\n", _ttcp,
GET_FIRST_CLIENT_TCP(_ttcp), buf, len);
DUMP_TCP(buf,len);
IF_TCP_VER(DUMP_TCP_STATE(_ttcp));
INFO_TCP_VER("CLI> p=%p _ttcp=%p state(tpcb):%d state(lpcb):%d\n", if ((_ttcp != NULL) && (GET_FIRST_CLIENT_TCP(_ttcp) != NULL) &&
p, ((struct ttcp*) p)->tpcb,
((struct ttcp*) p)->tpcb->state,
((struct ttcp*) p)->lpcb->state);
if ((_ttcp != NULL) && (_ttcp->tpcb != NULL) &&
(buf != NULL) && (len != 0) && (_ttcp->payload != NULL)) { (buf != NULL) && (len != 0) && (_ttcp->payload != NULL)) {
if (_ttcp->tpcb->state == ESTABLISHED || if (GET_FIRST_CLIENT_TCP(_ttcp)->state == ESTABLISHED ||
_ttcp->tpcb->state == CLOSE_WAIT || GET_FIRST_CLIENT_TCP(_ttcp)->state == CLOSE_WAIT ||
_ttcp->tpcb->state == SYN_SENT || GET_FIRST_CLIENT_TCP(_ttcp)->state == SYN_SENT ||
_ttcp->tpcb->state == SYN_RCVD) { GET_FIRST_CLIENT_TCP(_ttcp)->state == SYN_RCVD) {
memcpy(_ttcp->payload, buf, len); memcpy(_ttcp->payload, buf, len);
_ttcp->payload[len]='\0'; _ttcp->payload[len]='\0';
INFO_TCP_VER("%s\n", _ttcp->payload); INFO_TCP_VER("'%s'\n", _ttcp->payload);
_ttcp->left = len; _ttcp->left = len;
tcp_sent(_ttcp->tpcb, tcp_data_sent); tcp_sent(GET_FIRST_CLIENT_TCP(_ttcp), tcp_data_sent);
tcp_send_data(_ttcp); tcp_send_data(_ttcp);
return WL_SUCCESS; return WL_SUCCESS;
@ -813,6 +912,34 @@ int sendTcpData(void* p, uint8_t* buf, uint16_t len) {
return WL_FAILURE; return WL_FAILURE;
} }
int sendUdpData(void* ttcp, uint8_t* buf, uint16_t len) {
struct ttcp* _ttcp = (struct ttcp*) ttcp;
if ((_ttcp != NULL) && (buf != NULL) && (len != 0))
{
INFO_TCP("buf:%p len:%d\n", buf, len);
DUMP_TCP(buf,len);
}else{
return WL_FAILURE;
}
struct pbuf* p = pbuf_alloc(PBUF_TRANSPORT, len, PBUF_RAM);
if (p == NULL) {
WARN("TTCP [%p]: could not allocate pbuf\n", ttcp);
return WL_FAILURE;
}
memcpy(p->payload, buf, len);
if (udp_send(_ttcp->upcb, p) != ERR_OK) {
WARN("TTCP [%p]: udp_send() failed\n", _ttcp);
pbuf_free(p);
return WL_FAILURE;
}
pbuf_free(p);
return WL_SUCCESS;
}
char char
usage[] = usage[] =
"Usage: ttcp -t/-r [-options] host\n\ "Usage: ttcp -t/-r [-options] host\n\

View File

@ -15,6 +15,18 @@ typedef void (ard_tcp_done_cb_t)(void *opaque, int result);
#define TTCP_MODE_TRANSMIT 0 #define TTCP_MODE_TRANSMIT 0
#define TTCP_MODE_RECEIVE 1 #define TTCP_MODE_RECEIVE 1
#define MAX_MODE_NUM 2
#define GET_TCP_MODE(X) ((X!=NULL)?((struct ttcp*)(X))->mode:0)
#define IS_VALID_SOCK(SOCK) ((SOCK>=0)&&(SOCK<MAX_SOCK_NUM))
#define IS_UDP_SOCK(SOCK) ((getTTCP(SOCK, TTCP_MODE_RECEIVE)!=NULL)?((struct ttcp*)(getTTCP(SOCK, TTCP_MODE_RECEIVE)))->udp:0)
// Maximum number of client connection accepted by server
#define MAX_CLIENT_ACCEPTED 4
#define NO_VALID_ID -1
#define GET_FIRST_CLIENT_TCP(TTCP) ((TTCP!=NULL)?TTCP->tpcb[0] : NULL)
#define GET_CLIENT_TCP(TTCP,ID) (((TTCP!=NULL)&&(ID>=0)&&(ID<MAX_CLIENT_ACCEPTED))?TTCP->tpcb[ID] : NULL)
typedef struct ttcp { typedef struct ttcp {
@ -39,9 +51,11 @@ typedef struct ttcp {
uint32_t tid; uint32_t tid;
/* TCP specific */ /* TCP specific */
struct tcp_pcb* tpcb; struct tcp_pcb* tpcb[MAX_CLIENT_ACCEPTED];
struct tcp_pcb* lpcb; struct tcp_pcb* lpcb;
char* payload; char* payload;
uint8_t tcp_poll_retries;
bool pending_close[MAX_CLIENT_ACCEPTED];
/* UDP specific */ /* UDP specific */
int udp_started; int udp_started;
@ -62,10 +76,22 @@ uint8_t getModeTcp(void* p);
int sendTcpData(void* p, uint8_t* buf, uint16_t len); int sendTcpData(void* p, uint8_t* buf, uint16_t len);
int sendUdpData(void* p, uint8_t* buf, uint16_t len);
uint8_t isDataSent(void* p ); uint8_t isDataSent(void* p );
cmd_state_t cmd_ttcp(int argc, char* argv[], void* ctx); cmd_state_t cmd_ttcp(int argc, char* argv[], void* ctx);
int8_t setNewClientConn(struct ttcp* _ttcp, struct tcp_pcb *newpcb, uint8_t id);
int8_t insertNewClientConn(struct ttcp* _ttcp, struct tcp_pcb *newpcb);
int8_t removeNewClientConn(struct ttcp* _ttcp, struct tcp_pcb *newpcb);
bool cleanNewClientConn(struct ttcp* _ttcp);
int8_t getNewClientConnId(struct ttcp* _ttcp, struct tcp_pcb *newpcb);
void closeConnections(); void closeConnections();
#endif #endif

View File

@ -4,38 +4,142 @@
* Created on: Jul 4, 2010 * Created on: Jul 4, 2010
* Author: mlf by Metodo2 srl * Author: mlf by Metodo2 srl
*/ */
#undef _APP_DEBUG_ //#define _APP_DEBUG_
#include "lwip/pbuf.h" #include "lwip/pbuf.h"
#include "wifi_spi.h" #include "wifi_spi.h"
#include "ard_utils.h" #include "ard_utils.h"
#include "debug.h" #include "debug.h"
#include "ard_spi.h"
#include "ard_tcp.h"
#define MAX_PBUF_STORED 30 #define MAX_PBUF_STORED 30
tData pBufStore[MAX_PBUF_STORED][MAX_SOCK_NUM]; tData pBufStore[MAX_PBUF_STORED][MAX_SOCK_NUM];
unsigned char headBuf = 0; unsigned char headBuf[MAX_SOCK_NUM] = {0};
unsigned char tailBuf = 0; unsigned char tailBuf[MAX_SOCK_NUM] = {0};
#define IS_BUF_AVAIL() (tailBuf!=headBuf) #define IS_BUF_AVAIL(x) (tailBuf[x] != headBuf[x])
#define IS_BUF_EMPTY() ((tailBuf == 0) && (headBuf == 0)) #define IS_BUF_EMPTY(x) ((tailBuf[x] == 0) && (headBuf[x] == 0))
void init_pBuf() void init_pBuf()
{ {
memset(pBufStore, 0, sizeof(pBufStore)); memset(pBufStore, 0, sizeof(pBufStore));
} }
void insert_pBuf(struct pbuf* q, uint8_t sock, void* _pcb) uint8_t* insertBuf(uint8_t sock, uint8_t* buf, uint16_t len)
{
DUMP(buf,len);
if (sock>= MAX_SOCK_NUM)
{
WARN("Sock out of range: sock=%d", sock);
return NULL;
}
if (pBufStore[headBuf[sock]][sock].data != NULL)
{
WARN("Overwriting buffer %p idx:%d!\n", pBufStore[headBuf[sock]][sock].data, headBuf[sock]);
// to avoid memory leak free the oldest buffer
freetDataIdx(headBuf[sock], sock);
}
u8_t* p = (u8_t*)calloc(len,sizeof(u8_t));
if(p != NULL) {
memcpy(p, buf, len);
pBufStore[headBuf[sock]][sock].data = p;
pBufStore[headBuf[sock]][sock].len = len;
pBufStore[headBuf[sock]][sock].idx = 0;
pBufStore[headBuf[sock]][sock].pcb = getTTCP(sock, TTCP_MODE_TRANSMIT);
headBuf[sock]++;
if (headBuf[sock] == MAX_PBUF_STORED)
headBuf[sock] = 0;
if (headBuf[sock] == tailBuf[sock])
{
WARN("Avoid to Overwrite data [%d-%d]!\n", headBuf[sock], tailBuf[sock]);
if (headBuf[sock] != 0)
--headBuf[sock];
else
headBuf[sock] = MAX_PBUF_STORED-1;
}
INFO_UTIL("Insert[%d]: %p:%d-%d [%d,%d]\n", sock, p, len, p[0], headBuf[sock], tailBuf[sock]);
}
return p;
}
uint16_t calcMergeLen(uint8_t sock)
{
uint16_t len = 0;
unsigned char index = tailBuf[sock];
do {
if (pBufStore[index][sock].data != NULL)
{
len += pBufStore[index][sock].len;
}
++index;
if (index == MAX_PBUF_STORED)
index = 0;
}while (index!=headBuf[sock]);
return len;
}
uint16_t clearBuf(uint8_t sock)
{
uint16_t len = 0;
unsigned char index = tailBuf[sock];
do {
if (pBufStore[index][sock].data != NULL)
{
freetDataIdx(index,sock);
}
++index;
if (index == MAX_PBUF_STORED)
index = 0;
}while (index!=headBuf[sock]);
tailBuf[sock]=index;
return len;
}
uint8_t* mergeBuf(uint8_t sock, uint8_t** buf, uint16_t* _len)
{
uint16_t len = calcMergeLen(sock);
uint8_t* p = (u8_t*)calloc(len,sizeof(u8_t));
uint8_t* _p = p;
if(p != NULL) {
unsigned char index = tailBuf[sock];
do {
if (pBufStore[index][sock].data != NULL)
{
memcpy(p, pBufStore[index][sock].data, pBufStore[index][sock].len);
p += pBufStore[index][sock].len;
}
++index;
if (index == MAX_PBUF_STORED)
index = 0;
}while (index!=headBuf[sock]);
}
DUMP(_p,len);
if (buf != NULL)
*buf = _p;
if (_len != NULL)
*_len = len;
return _p;
}
uint8_t* insert_pBuf(struct pbuf* q, uint8_t sock, void* _pcb)
{ {
if (q == NULL) if (q == NULL)
return; return NULL;
if (pBufStore[headBuf][sock].data != NULL) if (pBufStore[headBuf[sock]][sock].data != NULL)
{ {
WARN("Overwriting buffer %p idx:%d!\n", pBufStore[headBuf][sock].data, headBuf); WARN("Overwriting buffer %p idx:%d!\n", pBufStore[headBuf[sock]][sock].data, headBuf[sock]);
// to avoid memory leak free the oldest buffer // to avoid memory leak free the oldest buffer
freetDataIdx(headBuf, sock); freetDataIdx(headBuf[sock], sock);
} }
u8_t* p = (u8_t*)calloc(q->tot_len,sizeof(u8_t)); u8_t* p = (u8_t*)calloc(q->tot_len,sizeof(u8_t));
@ -44,32 +148,54 @@ void insert_pBuf(struct pbuf* q, uint8_t sock, void* _pcb)
WARN("pbuf_copy_partial failed: src:%p, dst:%p, len:%d\n", q, p, q->tot_len); WARN("pbuf_copy_partial failed: src:%p, dst:%p, len:%d\n", q, p, q->tot_len);
free(p); free(p);
p = NULL; p = NULL;
return; return p;
} }
pBufStore[headBuf][sock].data = p; pBufStore[headBuf[sock]][sock].data = p;
pBufStore[headBuf][sock].len = q->tot_len; pBufStore[headBuf[sock]][sock].len = q->tot_len;
pBufStore[headBuf][sock].idx = 0; pBufStore[headBuf[sock]][sock].idx = 0;
pBufStore[headBuf][sock].pcb = _pcb; pBufStore[headBuf[sock]][sock].pcb = _pcb;
headBuf++; headBuf[sock]++;
if (headBuf == MAX_PBUF_STORED) if (headBuf[sock] == MAX_PBUF_STORED)
headBuf = 0; headBuf[sock] = 0;
if (headBuf == tailBuf) if (headBuf[sock] == tailBuf[sock])
WARN("Overwriting data [%d-%d]!\n", headBuf, tailBuf); {
INFO_UTIL("Insert: %p:%d-%d [%d,%d]\n", p, q->tot_len, p[0], headBuf, tailBuf); WARN("Avoid to Overwrite data [%d-%d]!\n", headBuf[sock], tailBuf[sock]);
if (headBuf[sock] != 0)
--headBuf[sock];
else
headBuf[sock] = MAX_PBUF_STORED-1;
}
INFO_UTIL("Insert[%d]: %p:%d-%d [%d,%d]\n", sock, p, q->tot_len, p[0], headBuf[sock], tailBuf[sock]);
} }
return p;
}
void dumpPbuf(uint8_t sock)
{
unsigned char index = tailBuf[sock];
printk("headBuf=%d tailBuf=%d\n", headBuf[sock], tailBuf[sock]);
do {
if (pBufStore[index][sock].data != NULL)
{
printk("Buf: %p Len:%d\n", pBufStore[index][sock].data, pBufStore[index][sock].len);
}
++index;
if (index == MAX_PBUF_STORED)
index = 0;
}while (index!=headBuf[sock]);
} }
tData* get_pBuf(uint8_t sock) tData* get_pBuf(uint8_t sock)
{ {
if (IS_BUF_EMPTY()) if (IS_BUF_EMPTY(sock))
return NULL; return NULL;
if (IS_BUF_AVAIL()) if (IS_BUF_AVAIL(sock))
{ {
tData* p = &(pBufStore[tailBuf][sock]); tData* p = &(pBufStore[tailBuf[sock]][sock]);
INFO_UTIL_VER("%p [%d,%d]\n", p, headBuf, tailBuf); INFO_UTIL_VER("%p [%d,%d]\n", p, headBuf[sock], tailBuf[sock]);
return p; return p;
} }
return NULL; return NULL;
@ -83,14 +209,14 @@ void freetData(void * buf, uint8_t sock)
return; return;
} }
pBufStore[tailBuf][sock].data = NULL; pBufStore[tailBuf[sock]][sock].data = NULL;
pBufStore[tailBuf][sock].len = 0; pBufStore[tailBuf[sock]][sock].len = 0;
pBufStore[tailBuf][sock].idx = 0; pBufStore[tailBuf[sock]][sock].idx = 0;
pBufStore[tailBuf][sock].pcb = 0; pBufStore[tailBuf[sock]][sock].pcb = 0;
if (++tailBuf == MAX_PBUF_STORED) if (++tailBuf[sock] == MAX_PBUF_STORED)
tailBuf = 0; tailBuf[sock] = 0;
INFO_UTIL("%p [%d,%d]\n", buf, headBuf, tailBuf); INFO_UTIL("%p [%d,%d]\n", buf, headBuf[sock], tailBuf[sock]);
free(buf); free(buf);
} }
@ -117,6 +243,16 @@ void freetDataIdx(uint8_t idxBuf, uint8_t sock)
void ack_recved(void* pcb, int len); void ack_recved(void* pcb, int len);
void ackAndFreeData(void* pcb, int len, uint8_t sock, uint8_t* data)
{
INFO_UTIL("Ack pcb:%p len:%d sock:%d data:%p\n", pcb, len, sock, data);
if (!IS_UDP_SOCK(sock))
ack_recved(pcb, len);
if (data != NULL)
freetData(data, sock);
}
bool isAvailTcpDataByte(uint8_t sock) bool isAvailTcpDataByte(uint8_t sock)
{ {
tData* p = get_pBuf(sock); tData* p = get_pBuf(sock);
@ -126,11 +262,10 @@ bool isAvailTcpDataByte(uint8_t sock)
INFO_UTIL_VER("check:%d %d %p\n",p->idx, p->len, p->data); INFO_UTIL_VER("check:%d %d %p\n",p->idx, p->len, p->data);
if (p->idx == p->len) if (p->idx == p->len)
{ {
freetData(p->data, sock);
ack_recved(p->pcb, p->len);
INFO_UTIL("Free %p other buf %d tail:%d head:%d\n", INFO_UTIL("Free %p other buf %d tail:%d head:%d\n",
p->data, IS_BUF_AVAIL(), tailBuf, headBuf); p->data, IS_BUF_AVAIL(sock), tailBuf[sock], headBuf[sock]);
return (IS_BUF_AVAIL()); ackAndFreeData(p->pcb, p->len, sock, p->data);
return (IS_BUF_AVAIL(sock));
}else{ }else{
return true; return true;
} }
@ -138,6 +273,12 @@ bool isAvailTcpDataByte(uint8_t sock)
return false; return false;
} }
uint16_t getAvailTcpDataByte(uint8_t sock)
{
uint16_t len = calcMergeLen(sock);
INFO_UTIL("Availabled data: %d\n", len);
return len;
}
bool getTcpDataByte(uint8_t sock, uint8_t* payload, uint8_t peek) bool getTcpDataByte(uint8_t sock, uint8_t* payload, uint8_t peek)
@ -157,10 +298,7 @@ bool getTcpDataByte(uint8_t sock, uint8_t* payload, uint8_t peek)
INFO_UTIL_VER("get:%d %p %d\n",p->idx, p->data, *payload); INFO_UTIL_VER("get:%d %p %d\n",p->idx, p->data, *payload);
return true; return true;
}else{ }else{
//dealloc current buffer ackAndFreeData(p->pcb, p->len, sock, p->data);
INFO_UTIL("Free %p\n", p->data);
freetData(p->data, sock);
ack_recved(p->pcb, p->len);
} }
} }
return false; return false;
@ -185,12 +323,20 @@ bool freeTcpData(uint8_t sock)
p = get_pBuf(sock); p = get_pBuf(sock);
if (p != NULL) if (p != NULL)
{ {
freetData(p->data, sock); ackAndFreeData(p->pcb, p->len, sock, p->data);
ack_recved(p->pcb, p->len);
return true; return true;
} }
return false; return false;
} }
void freeAllTcpData(uint8_t sock)
{
tData* p = NULL;
do{
p = get_pBuf(sock);
if (p != NULL)
freetData(p->data, sock);
}while(p!=NULL);
}

View File

@ -36,9 +36,12 @@
#define SIGN2_DN LED2_DN #define SIGN2_DN LED2_DN
#define SIGN2_TL LED2_TL #define SIGN2_TL LED2_TL
#define DEB_PIN_UP() gpio_set_gpio_pin(DEB_PIN_GPIO) #define DEB_PIN_UP(X) gpio_set_gpio_pin(DEB##X##_PIN_GPIO)
#define DEB_PIN_DN() gpio_clr_gpio_pin(DEB_PIN_GPIO) #define DEB_PIN_DN(X) gpio_clr_gpio_pin(DEB##X##_PIN_GPIO)
#define DEB_PIN_ENA() gpio_enable_gpio_pin(DEB_PIN_GPIO); #define DEB_PIN_ENA(X) gpio_enable_gpio_pin(DEB##X##_PIN_GPIO)
#define DEB_PIN_TOGGLE(X) gpio_tgl_gpio_pin(DEB##X##_PIN_GPIO)
#define DEB_PIN_TRIGGER(X) DEB_PIN_DN(X); DEB_PIN_UP(X);
#else #else
#define SIGN0_UP() #define SIGN0_UP()
@ -51,9 +54,11 @@
#define SIGN2_DN() #define SIGN2_DN()
#define SIGN2_TL() #define SIGN2_TL()
#define DEB_PIN_UP() #define DEB_PIN_UP(X)
#define DEB_PIN_DN() #define DEB_PIN_DN(X)
#define DEB_PIN_ENA() #define DEB_PIN_ENA(X)
#define DEB_PIN_TOGGLE(X)
#define DEB_PIN_TRIGGER(X)
//#define TOGGLE_SIG0 //#define TOGGLE_SIG0
#endif #endif
@ -119,8 +124,16 @@
#define PUT_DATA_INT(INT, BYTE, IDX) { \ #define PUT_DATA_INT(INT, BYTE, IDX) { \
uint16_t _int = INT; \ uint16_t _int = INT; \
BYTE[IDX] = (uint8_t)((_int & 0xff00)>>8); \ BYTE[IDX] = 2; \
BYTE[IDX+1] = (uint8_t)((_int & 0xff00)>>8); \
BYTE[IDX+2] = (uint8_t)(_int & 0xff); \
}
#define PUT_DATA_INT_NO(INT, BYTE, IDX) { \
uint16_t _int = INT; \
BYTE[IDX] = 2; \
BYTE[IDX+2] = (uint8_t)((_int & 0xff00)>>8); \
BYTE[IDX+1] = (uint8_t)(_int & 0xff); \ BYTE[IDX+1] = (uint8_t)(_int & 0xff); \
} }
@ -201,7 +214,7 @@
#define STATSPI_TIMEOUT_ERROR() \ #define STATSPI_TIMEOUT_ERROR() \
statSpi.timeoutIntErr++; \ statSpi.timeoutIntErr++; \
statSpi.rxErr++; \ statSpi.rxErr++; \
statSpi.lastError = err; \ statSpi.lastError = SPI_TIMEOUT_ERROR; \
statSpi.status = spi_getStatus(ARD_SPI); statSpi.status = spi_getStatus(ARD_SPI);
#define STATSPI_DISALIGN_ERROR() \ #define STATSPI_DISALIGN_ERROR() \
@ -228,11 +241,15 @@
#define STATSPI_OVERRIDE_ERROR() #define STATSPI_OVERRIDE_ERROR()
#endif #endif
#define DUMP_TCP_STATE(TTCP) \ #define DUMP_TCP_STATE(TTCP) do {\
INFO_TCP("ttcp:%p tpcb:%p state:%d lpcb:%p state:%d\n", \ INFO_TCP("ttcp:%p tpcb:%p state:%d lpcb:%p state:%d left:%d sent:%d\n", \
TTCP, TTCP->tpcb, (TTCP->tpcb)?TTCP->tpcb->state:0, \ TTCP, TTCP->tpcb[0], (TTCP->tpcb[0])?TTCP->tpcb[0]->state:0, \
TTCP->lpcb, (TTCP->lpcb)?TTCP->lpcb->state:0); TTCP->lpcb, (TTCP->lpcb)?TTCP->lpcb->state:0, \
(TTCP)?TTCP->left:0, (TTCP)?TTCP->buff_sent:0); \
} while(0);
#define Mode2Str(_Mode) ((_Mode==0)?"TRANSMIT":"RECEIVE")
#define ProtMode2Str(_protMode) ((_protMode==0)?"TCP":"UDP")
typedef struct sData typedef struct sData
{ {
@ -246,7 +263,13 @@ struct pbuf;
void init_pBuf(); void init_pBuf();
void insert_pBuf(struct pbuf* q, uint8_t sock, void* _pcb); uint8_t* insert_pBuf(struct pbuf* q, uint8_t sock, void* _pcb);
uint8_t* insertBuf(uint8_t sock, uint8_t* buf, uint16_t len);
uint8_t* mergeBuf(uint8_t sock, uint8_t** buf, uint16_t* _len);
uint16_t clearBuf(uint8_t sock);
tData* get_pBuf(uint8_t sock); tData* get_pBuf(uint8_t sock);
@ -260,8 +283,12 @@ bool getTcpData(uint8_t sock, void** payload, uint16_t* len);
bool getTcpDataByte(uint8_t sock, uint8_t* payload, uint8_t peek); bool getTcpDataByte(uint8_t sock, uint8_t* payload, uint8_t peek);
uint16_t getAvailTcpDataByte(uint8_t sock);
bool isAvailTcpDataByte(uint8_t sock); bool isAvailTcpDataByte(uint8_t sock);
uint8_t freeTcpData(uint8_t sock); uint8_t freeTcpData(uint8_t sock);
void freeAllTcpData(uint8_t sock);
#endif /* ARD_UTILS_H_ */ #endif /* ARD_UTILS_H_ */

View File

@ -43,24 +43,11 @@
#include "lwip/dns.h" #include "lwip/dns.h"
#include "debug.h" #include "debug.h"
#include "ard_spi.h" #include "ard_spi.h"
#include "ard_tcp.h"
#include "ard_utils.h"
extern void showTTCPstatus(); extern void showTTCPstatus();
#define ENABLE_DEBUG_LEVEL 1
#define VERBOSE_DEBUG_LEVEL 2
#define CHECK_ENA_DEBUG(LEVEL, FLAG) \
do{ \
if (LEVEL >= ENABLE_DEBUG_LEVEL) enableDebug |= FLAG; \
else enableDebug &= ~FLAG; \
}while(0);
#define CHECK_VERB_DEBUG(LEVEL, FLAG) \
do{ \
if (LEVEL >= VERBOSE_DEBUG_LEVEL) verboseDebug |= FLAG; \
else verboseDebug &= ~FLAG; \
}while(0);
#define _DNS_CMD_ #define _DNS_CMD_
/** /**
@ -373,14 +360,15 @@ cmd_setDnsServer(int argc, char* argv[], void* ctx)
* *
*/ */
cmd_state_t cmd_state_t
cmd_startTcpSrv(int argc, char* argv[], void* ctx) cmd_startSrv(int argc, char* argv[], void* ctx)
{ {
const char *usage = "usage: startTcpSrv <port> <sock>\n"; const char *usage = "usage: startSrv <port> <sock> <tcp(0)/udp(1)>\n";
int port = 0; int port = 0;
int sock = 0; int sock = 0;
int protMode = 0;
if (argc < 3) { if (argc < 4) {
printk(usage); printk(usage);
return CMD_DONE; return CMD_DONE;
} }
@ -389,15 +377,50 @@ cmd_startTcpSrv(int argc, char* argv[], void* ctx)
port = atoi(argv[1]); port = atoi(argv[1]);
/* socket index */ /* socket index */
sock = atoi(argv[2]); sock = atoi(argv[2]);
/* Protocol Mode */
protMode = atoi(argv[3]);
printk("Start TCP server on port %d sock %d\n", port, sock); printk("Start %s server on port %d sock %d\n", ProtMode2Str(protMode), port, sock);
if (start_server_tcp(port, sock) != -1) if (start_server_tcp(port, sock, protMode) == -1)
{ {
printk("Start TCP server on port %d sock %d FAILED\n", port, sock); WARN("Start %s server on port %d sock %d FAILED\n", ProtMode2Str(protMode), port, sock);
} }
return CMD_DONE; return CMD_DONE;
} }
/**
*
*/
cmd_state_t
cmd_startCli(int argc, char* argv[], void* ctx)
{
const char *usage = "usage: startCli <ipaddr> <port> <sock> <tcp(0)/udp(1)>\n";
struct ip_addr addr = {0};
int port = 0;
int sock = 0;
int protMode = 0;
if (argc < 5) {
printk(usage);
return CMD_DONE;
}
/* IP address */
addr = str2ip(argv[1]);
/* TCP port */
port = atoi(argv[2]);
/* socket index */
sock = atoi(argv[3]);
/* Protocol Mode */
protMode = atoi(argv[4]);
printk("Start client on addr 0x%x, port %d sock %d mode %d\n", addr, port, sock, protMode);
if (start_client_tcp(addr.addr, port, sock, protMode) == -1)
{
WARN("Start client on port %d sock %d prot %d mode %d FAILED\n", port, sock, protMode);
}
return CMD_DONE;
}
#endif #endif
@ -595,16 +618,14 @@ cmd_debug(int argc, char* argv[], void* ctx)
if (argc == 2 && strcmp(argv[1], "off") == 0) { if (argc == 2 && strcmp(argv[1], "off") == 0) {
printk("Debug OFF\n"); printk("Debug OFF\n");
enableDebug = DEFAULT_INFO_FLAG; INIT_DEBUG_VARIABLES()
verboseDebug = 0;
return CMD_DONE; return CMD_DONE;
}else if (argc == 2 && strcmp(argv[1], "print") == 0) { }else if (argc == 2 && strcmp(argv[1], "print") == 0) {
printk("Debug enabled: 0x%x\n", enableDebug); PRINT_DEBUG_VARIABLES()
printk("Verbose enabled: 0x%x\n", verboseDebug);
return CMD_DONE; return CMD_DONE;
}else if (argc == 2 && strcmp(argv[1], "on") == 0) { }else if (argc == 2 && strcmp(argv[1], "on") == 0) {
printk("Debug ON\n"); printk("Debug ON\n");
enableDebug = 0xff; TURNON_DEBUG_VARIABLES();
return CMD_DONE; return CMD_DONE;
} }
if (argc < 3) { if (argc < 3) {
@ -613,23 +634,91 @@ cmd_debug(int argc, char* argv[], void* ctx)
} }
level = atoi(argv[2]); level = atoi(argv[2]);
if (argc == 3 && strcmp(argv[1], "init") == 0) { if (argc == 3 && strcmp(argv[1], "init") == 0) {
CHECK_ENA_DEBUG(level, INFO_INIT_FLAG); CHECK_DEBUG_LEVEL(level, INFO_INIT_FLAG);
CHECK_VERB_DEBUG(level, INFO_INIT_FLAG);
}else if (argc == 3 && strcmp(argv[1], "spi") == 0) { }else if (argc == 3 && strcmp(argv[1], "spi") == 0) {
CHECK_ENA_DEBUG(level, INFO_SPI_FLAG); CHECK_DEBUG_LEVEL(level, INFO_SPI_FLAG);
CHECK_VERB_DEBUG(level, INFO_SPI_FLAG);
}else if (argc == 3 && strcmp(argv[1], "tcp") == 0) { }else if (argc == 3 && strcmp(argv[1], "tcp") == 0) {
CHECK_ENA_DEBUG(level, INFO_TCP_FLAG); CHECK_DEBUG_LEVEL(level, INFO_TCP_FLAG);
CHECK_VERB_DEBUG(level, INFO_TCP_FLAG);
}else if (argc == 3 && strcmp(argv[1], "cm") == 0) { }else if (argc == 3 && strcmp(argv[1], "cm") == 0) {
CHECK_ENA_DEBUG(level, INFO_CM_FLAG); CHECK_DEBUG_LEVEL(level, INFO_CM_FLAG);
CHECK_VERB_DEBUG(level, INFO_CM_FLAG);
}else if (argc == 3 && strcmp(argv[1], "util") == 0) { }else if (argc == 3 && strcmp(argv[1], "util") == 0) {
CHECK_ENA_DEBUG(level, INFO_UTIL_FLAG); CHECK_DEBUG_LEVEL(level, INFO_UTIL_FLAG);
CHECK_VERB_DEBUG(level, INFO_UTIL_FLAG);
}else if (argc == 3 && strcmp(argv[1], "warn") == 0) { }else if (argc == 3 && strcmp(argv[1], "warn") == 0) {
CHECK_ENA_DEBUG(level, INFO_WARN_FLAG); CHECK_DEBUG_LEVEL(level, INFO_WARN_FLAG);
CHECK_VERB_DEBUG(level, INFO_WARN_FLAG);
} }
return CMD_DONE; return CMD_DONE;
} }
extern void dumpPbuf(uint8_t sock);
/**
*
*/
cmd_state_t
cmd_dumpBuf(int argc, char* argv[], void* ctx)
{
const char *usage = "usage: dumpPbuf [sock]\n\t"\
"sock: socket Number\n";
if (argc == 2 && strcmp(argv[1], "all") == 0) {
printk("Dump All Buffers\n");
int i = 0;
for (; i<MAX_SOCK_NUM; ++i)
{
printk("Socket: %d\n", i);
dumpPbuf(i);
}
}else if (argc == 2) {
uint8_t sock = atoi(argv[1]);
printk("Socket: %d\n", sock);
dumpPbuf(sock);
}else {
printk(usage);
}
return CMD_DONE;
}
/**
*
*/
cmd_state_t
cmd_sendUdpData(int argc, char* argv[], void* ctx)
{
const char pattern[]={'M', 'I', 'M', 'L', 'F', 'D'};
const char* pattern2[]={"Prova", "1234567890","FineTest"};
const char *usage = "usage: sendUdp [sock]\n\t"\
"sock: socket Number\n";
if (argc < 2)
printk(usage);
if (argc >= 2) {
uint8_t sock = atoi(argv[1]);
printk("Socket: %d\n", sock);
if (argc >= 3) {
uint8_t patternType = atoi(argv[2]);
printk("PatternType: %d\n", patternType);
if (patternType == 1)
{
insertBuf(sock, (uint8_t*)pattern2[0], strlen(pattern2[0]));
insertBuf(sock, (uint8_t*)pattern2[1], strlen(pattern2[1]));
insertBuf(sock, (uint8_t*)pattern2[2], strlen(pattern2[2]));
}
if (patternType == 2)
{
mergeBuf(sock, NULL, NULL);
}
}else{
if (sock < MAX_SOCK_NUM)
{
sendUdpData(getTTCP(sock, TTCP_MODE_TRANSMIT), (uint8_t*)pattern, sizeof(pattern)/sizeof(char));
}
}
}
return CMD_DONE;
}

View File

@ -54,7 +54,10 @@ cmd_state_t cmd_statSpi(int argc, char* argv[], void* ctx);
cmd_state_t cmd_resetStatSpi(int argc, char* argv[], void* ctx); cmd_state_t cmd_resetStatSpi(int argc, char* argv[], void* ctx);
cmd_state_t cmd_gethostbyname(int argc, char* argv[], void* ctx); cmd_state_t cmd_gethostbyname(int argc, char* argv[], void* ctx);
cmd_state_t cmd_setDnsServer(int argc, char* argv[], void* ctx); cmd_state_t cmd_setDnsServer(int argc, char* argv[], void* ctx);
cmd_state_t cmd_startTcpSrv(int argc, char* argv[], void* ctx); cmd_state_t cmd_startSrv(int argc, char* argv[], void* ctx);
cmd_state_t cmd_startCli(int argc, char* argv[], void* ctx);
cmd_state_t cmd_dumpBuf(int argc, char* argv[], void* ctx);
cmd_state_t cmd_sendUdpData(int argc, char* argv[], void* ctx);
#ifdef WFE_6_12 #ifdef WFE_6_12
cmd_state_t cmd_ibss(int argc, char* argv[], void* ctx); cmd_state_t cmd_ibss(int argc, char* argv[], void* ctx);
#endif #endif

View File

@ -35,7 +35,7 @@
#include <board_init.h> #include <board_init.h>
#include <usart.h> #include <usart.h>
#define MAX_CMD_CONSOLE_NUM 12 #define MAX_CMD_CONSOLE_NUM 15
struct { struct {
cmd_cb_t cb; cmd_cb_t cb;
const char* str; const char* str;

View File

@ -18,92 +18,169 @@
#define INFO_SPI_FLAG 4 #define INFO_SPI_FLAG 4
#define INFO_CM_FLAG 8 #define INFO_CM_FLAG 8
#define INFO_UTIL_FLAG 16 #define INFO_UTIL_FLAG 16
#define INFO_5 32
#define INFO_D (1<<0xD) // Debug #define INFO_D (1<<0xD) // Debug
#define INFO_E (1<<0xE) // Error #define INFO_E (1<<0xE) // Error
#define INFO_WARN_FLAG (1<<0xF) // Warning #define INFO_WARN_FLAG (1<<0xF) // Warning
#define DEFAULT_INFO_FLAG 0 //INFO_WARN_FLAG #define DEFAULT_INFO_FLAG 0 //INFO_WARN_FLAG
#ifdef _DEBUG_
#define DEFINE_DEBUG_VARIABLES() \
uint16_t enableDebug = DEFAULT_INFO_FLAG | INFO_WARN_FLAG; \
uint16_t verboseDebug = 0; \
uint16_t dumpDebug = 0; \
uint16_t pollDebug = 0;
#else
#define DEFINE_DEBUG_VARIABLES() \
uint16_t enableDebug = DEFAULT_INFO_FLAG; \
uint16_t verboseDebug = 0; \
uint16_t dumpDebug = 0; \
uint16_t pollDebug = 0;
#endif
#define INIT_DEBUG_VARIABLES() \
enableDebug = DEFAULT_INFO_FLAG | INFO_WARN_FLAG; \
verboseDebug = 0; \
dumpDebug = 0; pollDebug = 0;
#define PRINT_DEBUG_VARIABLES() \
printk("Debug enabled: 0x%x\n", enableDebug); \
printk("Verbose enabled: 0x%x\n", verboseDebug); \
printk("Dump enabled: 0x%x\n", dumpDebug); \
printk("POoll enabled: 0x%x\n", pollDebug);
#define TURNON_DEBUG_VARIABLES() \
enableDebug = 0xff;
extern uint16_t enableDebug; extern uint16_t enableDebug;
extern uint16_t verboseDebug; extern uint16_t verboseDebug;
extern uint16_t dumpDebug;
extern uint16_t pollDebug;
#define ENABLE_DEBUG_LEVEL 1
#define VERBOSE_DEBUG_LEVEL 2
#define DUMP_DEBUG_LEVEL 3
#define POLL_DEBUG_LEVEL 4
#define CHECK_DEBUG(VAR, LEVEL, LEVEL_LIMIT, FLAG) \
do{ \
if (LEVEL >= LEVEL_LIMIT) VAR |= FLAG; \
else VAR &= ~FLAG; \
}while(0);
#define CHECK_ENA_DEBUG(LEVEL, FLAG) \
CHECK_DEBUG(enableDebug, LEVEL, ENABLE_DEBUG_LEVEL, FLAG)
#define CHECK_VERB_DEBUG(LEVEL, FLAG) \
CHECK_DEBUG(verboseDebug, LEVEL, VERBOSE_DEBUG_LEVEL, FLAG)
#define CHECK_DUMP_DEBUG(LEVEL, FLAG) \
CHECK_DEBUG(dumpDebug, LEVEL, DUMP_DEBUG_LEVEL, FLAG)
#define CHECK_POLL_DEBUG(LEVEL, FLAG) \
CHECK_DEBUG(pollDebug, LEVEL, POLL_DEBUG_LEVEL, FLAG)
#define CHECK_DEBUG_LEVEL(LEVEL, INFO_FLAG) \
CHECK_ENA_DEBUG(LEVEL, INFO_FLAG) \
CHECK_VERB_DEBUG(LEVEL, INFO_FLAG) \
CHECK_DUMP_DEBUG(LEVEL, INFO_FLAG) \
CHECK_POLL_DEBUG(LEVEL, INFO_FLAG)
#ifdef _INFO_DEBUG_ #ifdef _INFO_DEBUG_
#define INFO_INIT(msg, args...) do { \ #define PRINT_DEBUG(msg, args...) do { \
if (enableDebug & INFO_INIT_FLAG) printk("I-[%s] " msg , __func__ , ##args ); \ printk("[%s] " msg , __func__ , ##args ); \
} while (0) } while (0)
#define INFO_TCP(msg, args...) do { \ #define INFO_DEBUG(msg, args...) do { \
if (enableDebug & INFO_TCP_FLAG) printk("I-[%s] " msg , __func__ , ##args ); \
} while (0)
#define INFO_TCP_VER(msg, args...) do { \
if ((enableDebug & INFO_TCP_FLAG)&&(verboseDebug & INFO_TCP_FLAG)) \
printk("I-[%s] " msg , __func__ , ##args ); \ printk("I-[%s] " msg , __func__ , ##args ); \
} while (0) } while (0)
#define WARN_DEBUG(msg, args...) do { \
#define INFO_SPI(msg, args...) do { \ printk("W-[%s] " msg , __func__ , ##args ); \
if (enableDebug & INFO_SPI_FLAG) printk("I-[%s] " msg , __func__ , ##args ); \
} while (0) } while (0)
#define INFO_SPI_VER(msg, args...) do { \
if ((enableDebug & INFO_SPI_FLAG)&&(verboseDebug & INFO_SPI_FLAG)) \
printk("I-[%s] " msg , __func__ , ##args ); \
} while (0)
#define INFO_UTIL(msg, args...) do { \
if (enableDebug & INFO_UTIL_FLAG) printk("I-[%s] " msg , __func__ , ##args ); \
} while (0)
#define INFO_UTIL_VER(msg, args...) do { \
if ((enableDebug & INFO_UTIL_FLAG)&&(verboseDebug & INFO_UTIL_FLAG)) \
printk("I-[%s] " msg , __func__ , ##args ); \
} while (0)
#else #else
#define INFO_INIT(msg, args...) do {}while(0); do { }while(0);
#define INFO_TCP(msg, args...) do {}while(0);
#define INFO_TCP_VER(msg, args...) do { }while(0);
#define INFO_SPI(msg, args...) do {}while(0);
#define INFO_SPI_VER(msg, args...) do { }while(0);
#define INFO_UTIL(msg, args...) do {}while(0);
#define INFO_UTIL_VER(msg, args...) do { }while(0);
#endif #endif
#ifdef _APP_DEBUG_ #define IF_DEBUG(X,Y) do { \
#define INFO(msg, args...) do { \ if (enableDebug & INFO_##X##_FLAG) \
printk("I-[%s] " msg , __func__ , ##args ); \ Y; \
} while (0) } while (0)
#else /* !defined(_DEBUG_) */ #define IF_DEBUG_VER(X,Y) do { \
//#define INFO(msg, args...) do {} while (0) if (verboseDebug & INFO_##X##_FLAG) \
#endif /* !defined(_DEBUG_) */ Y; \
} while (0)
#if 1 #define IF_DEBUG_DUMP(X,Y) do { \
#define WARN(msg, args...) do { \ if (dumpDebug & INFO_##X##_FLAG) \
if (enableDebug & INFO_WARN_FLAG) printk("W-[%s] " msg , __func__ , ##args ); \ Y; \
} while (0) } while (0)
#else
#define WARN(msg, args...) do { } while (0) #define IF_DEBUG_POLL(X,Y) do { \
#endif if (pollDebug & INFO_##X##_FLAG) {\
Y; \
}} while (0)
#define IF_WARN(Y) IF_DEBUG(WARN,Y)
#define IF_WARN_VER(Y) IF_DEBUG_VER(WARN,Y)
#define IF_TCP(Y) IF_DEBUG(TCP,Y)
#define IF_TCP_VER(Y) IF_DEBUG_VER(TCP,Y)
#define IF_TCP_POLL(Y) IF_DEBUG_POLL(TCP,Y)
#define IF_TCP_DUMP(Y) IF_DEBUG_DUMP(TCP,Y)
#define IF_SPI(Y) IF_DEBUG(SPI,Y)
#define IF_SPI_VER(Y) IF_DEBUG_VER(SPI,Y)
#define IF_SPI_DUMP(Y) IF_DEBUG_DUMP(SPI,Y)
#define IF_SPI_POLL(Y) IF_DEBUG_POLL(SPI,Y)
#define IF_UTIL(Y) IF_DEBUG(UTIL,Y)
#define IF_UTIL_VER(Y) IF_DEBUG_VER(UTIL,Y)
#define WARN(msg, args...) IF_DEBUG(WARN,WARN_DEBUG(msg, ##args))
#define WARN_VER(msg, args...) IF_DEBUG_VER(WARN,WARN_DEBUG(msg, ##args))
#define WARN_POLL(msg, args...) IF_DEBUG_POLL(WARN,WARN_DEBUG(msg, ##args))
#define INFO_INIT(msg, args...) IF_DEBUG(INIT,PRINT_DEBUG(msg, ##args))
#define INFO_INIT_VER(msg, args...) IF_DEBUG_VER(INIT,PRINT_DEBUG(msg, ##args))
#define INFO_TCP(msg, args...) IF_DEBUG(TCP,PRINT_DEBUG(msg, ##args))
#define INFO_TCP_VER(msg, args...) IF_DEBUG_VER(TCP,PRINT_DEBUG(msg, ##args))
#define INFO_TCP_DUMP(msg, args...) IF_DEBUG_DUMP(TCP,PRINT_DEBUG(msg, ##args))
#define INFO_TCP_POLL(msg, args...) IF_DEBUG_POLL(TCP,PRINT_DEBUG(msg, ##args))
#define INFO_SPI(msg, args...) IF_DEBUG(SPI,PRINT_DEBUG(msg, ##args))
#define INFO_SPI_VER(msg, args...) IF_DEBUG_VER(SPI,PRINT_DEBUG(msg, ##args))
#define INFO_SPI_DUMP(msg, args...) IF_DEBUG_DUMP(SPI,PRINT_DEBUG(msg, ##args))
#define INFO_SPI_POLL(msg, args...) IF_DEBUG_POLL(SPI,PRINT_DEBUG(msg, ##args))
#define INFO_UTIL(msg, args...) IF_DEBUG(UTIL,PRINT_DEBUG(msg, ##args))
#define INFO_UTIL_VER(msg, args...) IF_DEBUG_VER(UTIL,PRINT_DEBUG(msg, ##args))
#define CM_DPRINTF(msg, args...) IF_DEBUG(CM,PRINT_DEBUG(msg, ##args))
extern void dump(char* _buf, uint16_t _count); extern void dump(char* _buf, uint16_t _count);
#ifdef _APP_DEBUG_ #define _DUMP(BUF, COUNT) do { \
#define DUMP(BUF, COUNT) do { \ printk("[%s]: ", __func__); \
printk("[%s]\n", __func__); \
dump((char*)BUF, COUNT); \ dump((char*)BUF, COUNT); \
} while (0) } while (0)
#ifdef _APP_DEBUG_
#define DUMP(BUF, COUNT) _DUMP(BUF, COUNT)
#else #else
#define DUMP(BUF, COUNT) do {} while (0) #define DUMP(BUF, COUNT) do {} while (0)
#endif #endif
#endif #endif
#define DUMP_TCP(BUF, COUNT) do { \ #define DUMP_TCP(BUF, COUNT) IF_TCP_DUMP(_DUMP(BUF, COUNT))
if (verboseDebug & INFO_TCP_FLAG) { \ #define DUMP_SPI(BUF, COUNT) IF_SPI_DUMP(_DUMP(BUF, COUNT))
printk("[%s]\n", __func__); \
dump((char*)BUF, COUNT); \ #define DUMP_SPI_CMD(BUF) do { \
}} while (0) if (dumpDebug & INFO_SPI_FLAG) { \
int i = 0; \
for (; i < CMD_MAX_LEN; ++i) \
{ \
printk("0x%x ", BUF[i]); \
if (BUF[i] == END_CMD) \
break; \
} \
printk("\n"); \
} \
}while(0);

View File

@ -111,7 +111,7 @@
* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP connections. * MEMP_NUM_TCP_PCB: the number of simulatenously active TCP connections.
* (requires the LWIP_TCP option) * (requires the LWIP_TCP option)
*/ */
#define MEMP_NUM_TCP_PCB 2 #define MEMP_NUM_TCP_PCB 4
/** /**
* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP connections. * MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP connections.

View File

@ -39,7 +39,7 @@
#include <lwip_setup.h> #include <lwip_setup.h>
/* FIRMWARE version */ /* FIRMWARE version */
const char* fwVersion = "1.0.0"; const char* fwVersion = "1.1.0";
#if BOARD == ARDUINO #if BOARD == ARDUINO
#if !defined(DATAFLASH) #if !defined(DATAFLASH)
@ -89,14 +89,7 @@ bool scanNetCompleted = false;
static bool initSpiComplete = false; static bool initSpiComplete = false;
// variable used as enable flag for debug prints // variable used as enable flag for debug prints
#ifdef _DEBUG_ DEFINE_DEBUG_VARIABLES();
uint16_t enableDebug = DEFAULT_INFO_FLAG | INFO_WARN_FLAG;// | INFO_SPI_FLAG;
uint16_t verboseDebug = 0;
#else
uint16_t enableDebug = DEFAULT_INFO_FLAG;
uint16_t verboseDebug = 0;
#endif
/** /**
* *
@ -287,6 +280,7 @@ void initShell()
console_add_cmd("setkey", cmd_setkey, NULL); console_add_cmd("setkey", cmd_setkey, NULL);
console_add_cmd("status", cmd_status, NULL); console_add_cmd("status", cmd_status, NULL);
console_add_cmd("debug", cmd_debug, NULL); console_add_cmd("debug", cmd_debug, NULL);
console_add_cmd("dumpBuf", cmd_dumpBuf, NULL);
#ifdef ADD_CMDS #ifdef ADD_CMDS
console_add_cmd("powersave", cmd_power, NULL); console_add_cmd("powersave", cmd_power, NULL);
@ -307,8 +301,11 @@ void initShell()
#ifdef _DNS_CMD_ #ifdef _DNS_CMD_
console_add_cmd("getHost", cmd_gethostbyname, NULL); console_add_cmd("getHost", cmd_gethostbyname, NULL);
console_add_cmd("setDNS", cmd_setDnsServer, NULL); console_add_cmd("setDNS", cmd_setDnsServer, NULL);
console_add_cmd("startTcpSrv", cmd_startTcpSrv, NULL);
#endif #endif
console_add_cmd("startSrv", cmd_startSrv, NULL);
console_add_cmd("startCli", cmd_startCli, NULL);
console_add_cmd("sendUdp", cmd_sendUdpData, NULL);
} }
/** /**
@ -359,7 +356,9 @@ void startup_init(void)
// if DEBUG enabled use DEB_PIN_GPIO for debug purposes // if DEBUG enabled use DEB_PIN_GPIO for debug purposes
DEB_PIN_ENA(); DEB_PIN_ENA();
DEB_PIN_ENA(2);
DEB_PIN_UP(); DEB_PIN_UP();
DEB_PIN_UP(2);
} }
/** /**

View File

@ -56,11 +56,14 @@ enum {
START_SCAN_NETWORKS = 0x36, START_SCAN_NETWORKS = 0x36,
GET_FW_VERSION_CMD = 0x37, GET_FW_VERSION_CMD = 0x37,
GET_TEST_CMD = 0x38, GET_TEST_CMD = 0x38,
SEND_DATA_UDP_CMD = 0x39,
GET_REMOTE_DATA_CMD = 0x3A,
// All command with DATA_FLAG 0x40 send a 16bit Len // All command with DATA_FLAG 0x40 send a 16bit Len
SEND_DATA_TCP_CMD = 0x44, SEND_DATA_TCP_CMD = 0x44,
GET_DATABUF_TCP_CMD = 0x45, GET_DATABUF_TCP_CMD = 0x45,
INSERT_DATABUF_CMD = 0x46,
}; };

View File

@ -59,15 +59,9 @@
*/ */
#define ROAMING_RSSI_DIFF 10 #define ROAMING_RSSI_DIFF 10
#if 1
# include "printf-stdarg.h" # include "printf-stdarg.h"
#include "ard_utils.h" #include "ard_utils.h"
# define CM_DPRINTF(fmt...) if (enableDebug & INFO_CM_FLAG) printk(fmt) #include "debug.h"
#else
# define CM_DPRINTF(fmt...)
#endif
/** \defgroup wl_cm Connection Manager /** \defgroup wl_cm Connection Manager
* *

View File

@ -0,0 +1,1293 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
<ProjectVersion>6.0</ProjectVersion>
<ToolchainName>com.Atmel.AVRGCC32</ToolchainName>
<ProjectGuid>417e15db-488a-4b56-8d4e-fbe832b2b649</ProjectGuid>
<Name>wifiHD</Name>
<avrdevice>AT32uc3a1256</avrdevice>
<avrdeviceseries>none</avrdeviceseries>
<AvrProjectType>Importer</AvrProjectType>
<OutputType>Executable</OutputType>
<Language>C</Language>
<OutputFileName>wifiHD</OutputFileName>
<OutputFileExtension>.elf</OutputFileExtension>
<OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>
<ToolchainFlavour>Native</ToolchainFlavour>
<avrtool>com.atmel.avrdbg.tool.jtagicemk3</avrtool>
<KeepTimersRunning>true</KeepTimersRunning>
<AsfFrameworkConfig>
<framework-data>
<options />
<configurations>
<configuration key="config.avr32.utils.trampoline" value="yes" default="yes" content-id="Atmel.ASF" />
<configuration key="config.avr32.utils.gccstartup" value="yes" default="yes" content-id="Atmel.ASF" />
<configuration key="config.utils.interrupt.intc" value="yes" default="yes" content-id="Atmel.ASF" />
<configuration key="config.avr32.drivers.intc.exception" value="yes" default="yes" content-id="Atmel.ASF" />
</configurations>
<files />
<documentation help="" />
</framework-data>
</AsfFrameworkConfig>
<avrtoolinterface>JTAG</avrtoolinterface>
<com_atmel_avrdbg_tool_jtagicemk3>
<ToolType>com.atmel.avrdbg.tool.jtagicemk3</ToolType>
<ToolName>JTAGICE3</ToolName>
<ToolNumber>J30200003078</ToolNumber>
<KeepTimersRunning>true</KeepTimersRunning>
<OverrideVtor>false</OverrideVtor>
<OverrideVtorValue>
</OverrideVtorValue>
<Channel>
<host>127.0.0.1</host>
<port>51464</port>
<ssl>False</ssl>
</Channel>
<ToolOptions>
<InterfaceName>JTAG</InterfaceName>
<InterfaceProperties>
<JtagDbgClock>7500000</JtagDbgClock>
<JtagProgClock>1000000</JtagProgClock>
<IspClock>150000</IspClock>
<JtagInChain>false</JtagInChain>
<JtagEnableExtResetOnStartSession>false</JtagEnableExtResetOnStartSession>
<JtagDevicesBefore>0</JtagDevicesBefore>
<JtagDevicesAfter>0</JtagDevicesAfter>
<JtagInstrBitsBefore>0</JtagInstrBitsBefore>
<JtagInstrBitsAfter>0</JtagInstrBitsAfter>
</InterfaceProperties>
</ToolOptions>
</com_atmel_avrdbg_tool_jtagicemk3>
<AsfVersion>3.5.0</AsfVersion>
<OverrideVtor>false</OverrideVtor>
<OverrideVtorValue />
<eraseonlaunchrule>0</eraseonlaunchrule>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<ToolchainSettings>
<Avr32Gcc>
<avr32gcc.common.outputfiles.hex>True</avr32gcc.common.outputfiles.hex>
<avr32gcc.common.outputfiles.lss>True</avr32gcc.common.outputfiles.lss>
<avr32gcc.common.outputfiles.eep>True</avr32gcc.common.outputfiles.eep>
<avr32gcc.common.outputfiles.srec>True</avr32gcc.common.outputfiles.srec>
<avr32gcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>BOARD=ARDUINO</Value>
<Value>_ASSERT_ENABLE_</Value>
<Value>EXT_BOARD=SPB104</Value>
<Value>WITH_KEY</Value>
<Value>WITH_WPA</Value>
<Value>WITH_NO_DMA</Value>
<Value>DATAFLASH=1</Value>
<Value>_INFO_DEBUG_=1</Value>
</ListValues>
</avr32gcc.compiler.symbols.DefSymbols>
<avr32gcc.compiler.directories.IncludePaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/TC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/USART</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PM</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC</Value>
<Value>../src/CONFIG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
<Value>../src</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD</Value>
</ListValues>
</avr32gcc.compiler.directories.IncludePaths>
<avr32gcc.compiler.optimization.level>Optimize for size (-Os)</avr32gcc.compiler.optimization.level>
<avr32gcc.compiler.optimization.OtherFlags>-fdata-sections</avr32gcc.compiler.optimization.OtherFlags>
<avr32gcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</avr32gcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
<avr32gcc.compiler.optimization.UseAssemblerForPseudoInstructions>True</avr32gcc.compiler.optimization.UseAssemblerForPseudoInstructions>
<avr32gcc.compiler.optimization.ForceDoubleWordAlignment>True</avr32gcc.compiler.optimization.ForceDoubleWordAlignment>
<avr32gcc.compiler.warnings.AllWarnings>True</avr32gcc.compiler.warnings.AllWarnings>
<avr32gcc.compiler.miscellaneous.OtherFlags>-c -fmessage-length=0</avr32gcc.compiler.miscellaneous.OtherFlags>
<avr32gcc.linker.general.DoNotUseStandardStartFiles>True</avr32gcc.linker.general.DoNotUseStandardStartFiles>
<avr32gcc.linker.libraries.Libraries>
<ListValues>
<Value>newlib_addons-at32ucr2-speed_opt</Value>
<Value>_ucr2_hd_wl_sta_intwpa_v2.7.0</Value>
<Value>_ucr2_hd_spi_v2.7.0</Value>
</ListValues>
</avr32gcc.linker.libraries.Libraries>
<avr32gcc.linker.libraries.LibrarySearchPaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC</Value>
</ListValues>
</avr32gcc.linker.libraries.LibrarySearchPaths>
<avr32gcc.linker.optimization.GarbageCollectUnusedSections>True</avr32gcc.linker.optimization.GarbageCollectUnusedSections>
<avr32gcc.linker.optimization.PutReadOnlyDataInWritableDataSection>True</avr32gcc.linker.optimization.PutReadOnlyDataInWritableDataSection>
<avr32gcc.linker.optimization.AllowDirectReferencesToDataSection>True</avr32gcc.linker.optimization.AllowDirectReferencesToDataSection>
<avr32gcc.linker.miscellaneous.LinkerFlags>-Wl,--gc-sections -Wl,-e,_trampoline -T../src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/1256/GCC/link_uc3a1256.lds</avr32gcc.linker.miscellaneous.LinkerFlags>
<avr32gcc.assembler.general.IncludePaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/TC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/USART</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PM</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC</Value>
<Value>../src/CONFIG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
</ListValues>
</avr32gcc.assembler.general.IncludePaths>
<avr32gcc.preprocessingassembler.general.AssemblerFlags>-Wa,-g</avr32gcc.preprocessingassembler.general.AssemblerFlags>
<avr32gcc.preprocessingassembler.general.IncludePaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/TC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/USART</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PM</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC</Value>
<Value>../src/CONFIG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
</ListValues>
</avr32gcc.preprocessingassembler.general.IncludePaths>
</Avr32Gcc>
</ToolchainSettings>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<ToolchainSettings>
<Avr32Gcc>
<avr32gcc.common.outputfiles.hex>True</avr32gcc.common.outputfiles.hex>
<avr32gcc.common.outputfiles.lss>True</avr32gcc.common.outputfiles.lss>
<avr32gcc.common.outputfiles.eep>True</avr32gcc.common.outputfiles.eep>
<avr32gcc.common.outputfiles.srec>True</avr32gcc.common.outputfiles.srec>
<avr32gcc.compiler.preprocessor.DoNotSearchSystemDirectories>false</avr32gcc.compiler.preprocessor.DoNotSearchSystemDirectories>
<avr32gcc.compiler.preprocessor.PreprocessOnly>false</avr32gcc.compiler.preprocessor.PreprocessOnly>
<avr32gcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>BOARD=ARDUINO</Value>
<Value>NO_SYS</Value>
<Value>_DEBUG_</Value>
<Value>_ASSERT_ENABLE_</Value>
<Value>WITH_KEY</Value>
<Value>WITH_WPA</Value>
<Value>WITH_NO_DMA</Value>
<Value>DATAFLASH=1</Value>
<Value>_INFO_DEBUG_=1</Value>
</ListValues>
</avr32gcc.compiler.symbols.DefSymbols>
<avr32gcc.compiler.directories.IncludePaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/TC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/USART</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PM</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC</Value>
<Value>../src/CONFIG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
<Value>../src</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD</Value>
</ListValues>
</avr32gcc.compiler.directories.IncludePaths>
<avr32gcc.compiler.optimization.level>Optimize (-O1)</avr32gcc.compiler.optimization.level>
<avr32gcc.compiler.optimization.OtherFlags>-fdata-sections -ffunction-sections</avr32gcc.compiler.optimization.OtherFlags>
<avr32gcc.compiler.optimization.PrepareFunctionsForGarbageCollection>true</avr32gcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
<avr32gcc.compiler.optimization.EnableFastFloatingPointLibrary>false</avr32gcc.compiler.optimization.EnableFastFloatingPointLibrary>
<avr32gcc.compiler.optimization.EnableUnsafeMatchOptimizations>false</avr32gcc.compiler.optimization.EnableUnsafeMatchOptimizations>
<avr32gcc.compiler.optimization.EnableFastMath>false</avr32gcc.compiler.optimization.EnableFastMath>
<avr32gcc.compiler.optimization.GeneratePositionIndependentCode>false</avr32gcc.compiler.optimization.GeneratePositionIndependentCode>
<avr32gcc.compiler.optimization.UseAssemblerForPseudoInstructions>true</avr32gcc.compiler.optimization.UseAssemblerForPseudoInstructions>
<avr32gcc.compiler.optimization.ForceDoubleWordAlignment>true</avr32gcc.compiler.optimization.ForceDoubleWordAlignment>
<avr32gcc.compiler.optimization.PutLargeImmediatesInConstPool>false</avr32gcc.compiler.optimization.PutLargeImmediatesInConstPool>
<avr32gcc.compiler.optimization.DoNotInitializeGotRegisterBeforeUsing>false</avr32gcc.compiler.optimization.DoNotInitializeGotRegisterBeforeUsing>
<avr32gcc.compiler.optimization.UseSectionRoDataForReadOnlyData>false</avr32gcc.compiler.optimization.UseSectionRoDataForReadOnlyData>
<avr32gcc.compiler.optimization.DebugLevel>Maximum (-g3)</avr32gcc.compiler.optimization.DebugLevel>
<avr32gcc.compiler.optimization.GenerateGprofInformation>false</avr32gcc.compiler.optimization.GenerateGprofInformation>
<avr32gcc.compiler.optimization.GenerateProfInformation>false</avr32gcc.compiler.optimization.GenerateProfInformation>
<avr32gcc.compiler.warnings.AllWarnings>true</avr32gcc.compiler.warnings.AllWarnings>
<avr32gcc.compiler.warnings.CheckSyntaxOnly>false</avr32gcc.compiler.warnings.CheckSyntaxOnly>
<avr32gcc.compiler.warnings.Pedantic>false</avr32gcc.compiler.warnings.Pedantic>
<avr32gcc.compiler.warnings.PedanticWarningsAsErrors>false</avr32gcc.compiler.warnings.PedanticWarningsAsErrors>
<avr32gcc.compiler.warnings.InhibitAllWarnings>false</avr32gcc.compiler.warnings.InhibitAllWarnings>
<avr32gcc.compiler.miscellaneous.OtherFlags>-c -fmessage-length=0</avr32gcc.compiler.miscellaneous.OtherFlags>
<avr32gcc.compiler.miscellaneous.SupportAnsiPrograms>false</avr32gcc.compiler.miscellaneous.SupportAnsiPrograms>
<avr32gcc.linker.general.DoNotUseStandardStartFiles>true</avr32gcc.linker.general.DoNotUseStandardStartFiles>
<avr32gcc.linker.general.DoNotUseDefaultLibraries>false</avr32gcc.linker.general.DoNotUseDefaultLibraries>
<avr32gcc.linker.general.NoStartupOrDefaultLibs>false</avr32gcc.linker.general.NoStartupOrDefaultLibs>
<avr32gcc.linker.general.OmitAllSymbolInformation>false</avr32gcc.linker.general.OmitAllSymbolInformation>
<avr32gcc.linker.general.NoSharedLibraries>false</avr32gcc.linker.general.NoSharedLibraries>
<avr32gcc.linker.libraries.Libraries>
<ListValues>
<Value>newlib_addons-at32ucr2-speed_opt</Value>
<Value>_ucr2_hd_spi_v2.7.0</Value>
<Value>_ucr2_hd_wl_sta_intwpa_v2.7.0</Value>
</ListValues>
</avr32gcc.linker.libraries.Libraries>
<avr32gcc.linker.libraries.LibrarySearchPaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC</Value>
</ListValues>
</avr32gcc.linker.libraries.LibrarySearchPaths>
<avr32gcc.linker.optimization.GarbageCollectUnusedSections>true</avr32gcc.linker.optimization.GarbageCollectUnusedSections>
<avr32gcc.linker.optimization.EnableFastFloatingPointLibrary>false</avr32gcc.linker.optimization.EnableFastFloatingPointLibrary>
<avr32gcc.linker.optimization.EnableUnsafeMatchOptimizations>false</avr32gcc.linker.optimization.EnableUnsafeMatchOptimizations>
<avr32gcc.linker.optimization.EnableFastMath>false</avr32gcc.linker.optimization.EnableFastMath>
<avr32gcc.linker.optimization.GeneratePositionIndependentCode>false</avr32gcc.linker.optimization.GeneratePositionIndependentCode>
<avr32gcc.linker.optimization.PutReadOnlyDataInWritableDataSection>true</avr32gcc.linker.optimization.PutReadOnlyDataInWritableDataSection>
<avr32gcc.linker.optimization.AllowDirectReferencesToDataSection>true</avr32gcc.linker.optimization.AllowDirectReferencesToDataSection>
<avr32gcc.assembler.general.IncludePaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/TC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/USART</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PM</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC</Value>
<Value>../src/CONFIG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
</ListValues>
</avr32gcc.assembler.general.IncludePaths>
<avr32gcc.assembler.general.AnounceVersion>false</avr32gcc.assembler.general.AnounceVersion>
<avr32gcc.assembler.debugging.DebugLevel>Default (-g)</avr32gcc.assembler.debugging.DebugLevel>
<avr32gcc.preprocessingassembler.general.AssemblerFlags>-Wa,-g</avr32gcc.preprocessingassembler.general.AssemblerFlags>
<avr32gcc.preprocessingassembler.general.IncludePaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/TC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/USART</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PM</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC</Value>
<Value>../src/CONFIG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
</ListValues>
</avr32gcc.preprocessingassembler.general.IncludePaths>
<avr32gcc.preprocessingassembler.general.SuppressWarnings>false</avr32gcc.preprocessingassembler.general.SuppressWarnings>
<avr32gcc.preprocessingassembler.general.AnounceVersion>false</avr32gcc.preprocessingassembler.general.AnounceVersion>
<avr32gcc.preprocessingassembler.debugging.DebugLevel>Default (-Wa,-g)</avr32gcc.preprocessingassembler.debugging.DebugLevel>
</Avr32Gcc>
</ToolchainSettings>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug_512' ">
<OutputPath>bin\Debug_512\</OutputPath>
<ToolchainSettings>
<Avr32Gcc>
<avr32gcc.common.outputfiles.hex>True</avr32gcc.common.outputfiles.hex>
<avr32gcc.common.outputfiles.lss>True</avr32gcc.common.outputfiles.lss>
<avr32gcc.common.outputfiles.eep>True</avr32gcc.common.outputfiles.eep>
<avr32gcc.common.outputfiles.srec>True</avr32gcc.common.outputfiles.srec>
<avr32gcc.compiler.preprocessor.DoNotSearchSystemDirectories>false</avr32gcc.compiler.preprocessor.DoNotSearchSystemDirectories>
<avr32gcc.compiler.preprocessor.PreprocessOnly>false</avr32gcc.compiler.preprocessor.PreprocessOnly>
<avr32gcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>BOARD=ARDUINO</Value>
<Value>_APP_DEBUG_</Value>
<Value>_DEBUG_</Value>
<Value>_ASSERT_ENABLE_</Value>
<Value>EXT_BOARD=SPB104</Value>
<Value>WITH_KEY</Value>
<Value>WITH_WPA</Value>
<Value>WITH_NO_DMA</Value>
<Value>LWIP_DEBUG</Value>
<Value>_INFO_DEBUG_=1</Value>
</ListValues>
</avr32gcc.compiler.symbols.DefSymbols>
<avr32gcc.compiler.directories.IncludePaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/TC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/USART</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PM</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC</Value>
<Value>../src/CONFIG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
<Value>../src</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD</Value>
</ListValues>
</avr32gcc.compiler.directories.IncludePaths>
<avr32gcc.compiler.optimization.level>Optimize (-O1)</avr32gcc.compiler.optimization.level>
<avr32gcc.compiler.optimization.OtherFlags>-fdata-sections</avr32gcc.compiler.optimization.OtherFlags>
<avr32gcc.compiler.optimization.PrepareFunctionsForGarbageCollection>true</avr32gcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
<avr32gcc.compiler.optimization.EnableFastFloatingPointLibrary>false</avr32gcc.compiler.optimization.EnableFastFloatingPointLibrary>
<avr32gcc.compiler.optimization.EnableUnsafeMatchOptimizations>false</avr32gcc.compiler.optimization.EnableUnsafeMatchOptimizations>
<avr32gcc.compiler.optimization.EnableFastMath>false</avr32gcc.compiler.optimization.EnableFastMath>
<avr32gcc.compiler.optimization.GeneratePositionIndependentCode>false</avr32gcc.compiler.optimization.GeneratePositionIndependentCode>
<avr32gcc.compiler.optimization.UseAssemblerForPseudoInstructions>true</avr32gcc.compiler.optimization.UseAssemblerForPseudoInstructions>
<avr32gcc.compiler.optimization.ForceDoubleWordAlignment>false</avr32gcc.compiler.optimization.ForceDoubleWordAlignment>
<avr32gcc.compiler.optimization.PutLargeImmediatesInConstPool>false</avr32gcc.compiler.optimization.PutLargeImmediatesInConstPool>
<avr32gcc.compiler.optimization.DoNotInitializeGotRegisterBeforeUsing>false</avr32gcc.compiler.optimization.DoNotInitializeGotRegisterBeforeUsing>
<avr32gcc.compiler.optimization.UseSectionRoDataForReadOnlyData>false</avr32gcc.compiler.optimization.UseSectionRoDataForReadOnlyData>
<avr32gcc.compiler.optimization.DebugLevel>Maximum (-g3)</avr32gcc.compiler.optimization.DebugLevel>
<avr32gcc.compiler.optimization.GenerateGprofInformation>false</avr32gcc.compiler.optimization.GenerateGprofInformation>
<avr32gcc.compiler.optimization.GenerateProfInformation>false</avr32gcc.compiler.optimization.GenerateProfInformation>
<avr32gcc.compiler.warnings.AllWarnings>true</avr32gcc.compiler.warnings.AllWarnings>
<avr32gcc.compiler.warnings.CheckSyntaxOnly>false</avr32gcc.compiler.warnings.CheckSyntaxOnly>
<avr32gcc.compiler.warnings.Pedantic>false</avr32gcc.compiler.warnings.Pedantic>
<avr32gcc.compiler.warnings.PedanticWarningsAsErrors>false</avr32gcc.compiler.warnings.PedanticWarningsAsErrors>
<avr32gcc.compiler.warnings.InhibitAllWarnings>false</avr32gcc.compiler.warnings.InhibitAllWarnings>
<avr32gcc.compiler.miscellaneous.OtherFlags>-c -fmessage-length=0</avr32gcc.compiler.miscellaneous.OtherFlags>
<avr32gcc.compiler.miscellaneous.SupportAnsiPrograms>false</avr32gcc.compiler.miscellaneous.SupportAnsiPrograms>
<avr32gcc.linker.general.DoNotUseStandardStartFiles>true</avr32gcc.linker.general.DoNotUseStandardStartFiles>
<avr32gcc.linker.general.DoNotUseDefaultLibraries>false</avr32gcc.linker.general.DoNotUseDefaultLibraries>
<avr32gcc.linker.general.NoStartupOrDefaultLibs>false</avr32gcc.linker.general.NoStartupOrDefaultLibs>
<avr32gcc.linker.general.OmitAllSymbolInformation>false</avr32gcc.linker.general.OmitAllSymbolInformation>
<avr32gcc.linker.general.NoSharedLibraries>false</avr32gcc.linker.general.NoSharedLibraries>
<avr32gcc.linker.libraries.Libraries>
<ListValues>
<Value>newlib_addons-at32ucr2-speed_opt</Value>
<Value>_ucr2_hd_spi_standalone_v2.1.1</Value>
<Value>_ucr2_hd_wl_standalone_v2.1.1</Value>
</ListValues>
</avr32gcc.linker.libraries.Libraries>
<avr32gcc.linker.libraries.LibrarySearchPaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.1.1/UCR2/GCC</Value>
</ListValues>
</avr32gcc.linker.libraries.LibrarySearchPaths>
<avr32gcc.linker.optimization.GarbageCollectUnusedSections>true</avr32gcc.linker.optimization.GarbageCollectUnusedSections>
<avr32gcc.linker.optimization.EnableFastFloatingPointLibrary>false</avr32gcc.linker.optimization.EnableFastFloatingPointLibrary>
<avr32gcc.linker.optimization.EnableUnsafeMatchOptimizations>false</avr32gcc.linker.optimization.EnableUnsafeMatchOptimizations>
<avr32gcc.linker.optimization.EnableFastMath>false</avr32gcc.linker.optimization.EnableFastMath>
<avr32gcc.linker.optimization.GeneratePositionIndependentCode>false</avr32gcc.linker.optimization.GeneratePositionIndependentCode>
<avr32gcc.linker.optimization.PutReadOnlyDataInWritableDataSection>true</avr32gcc.linker.optimization.PutReadOnlyDataInWritableDataSection>
<avr32gcc.linker.optimization.AllowDirectReferencesToDataSection>true</avr32gcc.linker.optimization.AllowDirectReferencesToDataSection>
<avr32gcc.assembler.general.IncludePaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/TC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/USART</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PM</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC</Value>
<Value>../src/CONFIG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
</ListValues>
</avr32gcc.assembler.general.IncludePaths>
<avr32gcc.assembler.general.AnounceVersion>false</avr32gcc.assembler.general.AnounceVersion>
<avr32gcc.assembler.debugging.DebugLevel>Default (-g)</avr32gcc.assembler.debugging.DebugLevel>
<avr32gcc.preprocessingassembler.general.AssemblerFlags>-Wa,-g</avr32gcc.preprocessingassembler.general.AssemblerFlags>
<avr32gcc.preprocessingassembler.general.IncludePaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/TC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/USART</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PM</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC</Value>
<Value>../src/CONFIG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
</ListValues>
</avr32gcc.preprocessingassembler.general.IncludePaths>
<avr32gcc.preprocessingassembler.general.SuppressWarnings>false</avr32gcc.preprocessingassembler.general.SuppressWarnings>
<avr32gcc.preprocessingassembler.general.AnounceVersion>false</avr32gcc.preprocessingassembler.general.AnounceVersion>
<avr32gcc.preprocessingassembler.debugging.DebugLevel>Default (-Wa,-g)</avr32gcc.preprocessingassembler.debugging.DebugLevel>
</Avr32Gcc>
</ToolchainSettings>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release_512' ">
<OutputPath>bin\Release_512\</OutputPath>
<ToolchainSettings>
<Avr32Gcc>
<avr32gcc.common.outputfiles.hex>True</avr32gcc.common.outputfiles.hex>
<avr32gcc.common.outputfiles.lss>True</avr32gcc.common.outputfiles.lss>
<avr32gcc.common.outputfiles.eep>True</avr32gcc.common.outputfiles.eep>
<avr32gcc.common.outputfiles.srec>True</avr32gcc.common.outputfiles.srec>
<avr32gcc.compiler.preprocessor.DoNotSearchSystemDirectories>false</avr32gcc.compiler.preprocessor.DoNotSearchSystemDirectories>
<avr32gcc.compiler.preprocessor.PreprocessOnly>false</avr32gcc.compiler.preprocessor.PreprocessOnly>
<avr32gcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>BOARD=ARDUINO</Value>
<Value>_ASSERT_ENABLE_</Value>
<Value>EXT_BOARD=SPB104</Value>
<Value>WITH_KEY</Value>
<Value>WITH_WPA</Value>
<Value>WITH_NO_DMA</Value>
<Value>LWIP_DEBUG</Value>
<Value>_INFO_DEBUG_=1</Value>
</ListValues>
</avr32gcc.compiler.symbols.DefSymbols>
<avr32gcc.compiler.directories.IncludePaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/TC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/USART</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PM</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC</Value>
<Value>../src/CONFIG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
<Value>../src</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD</Value>
</ListValues>
</avr32gcc.compiler.directories.IncludePaths>
<avr32gcc.compiler.optimization.OtherFlags>-fdata-sections</avr32gcc.compiler.optimization.OtherFlags>
<avr32gcc.compiler.optimization.PrepareFunctionsForGarbageCollection>true</avr32gcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
<avr32gcc.compiler.optimization.EnableFastFloatingPointLibrary>false</avr32gcc.compiler.optimization.EnableFastFloatingPointLibrary>
<avr32gcc.compiler.optimization.EnableUnsafeMatchOptimizations>false</avr32gcc.compiler.optimization.EnableUnsafeMatchOptimizations>
<avr32gcc.compiler.optimization.EnableFastMath>false</avr32gcc.compiler.optimization.EnableFastMath>
<avr32gcc.compiler.optimization.GeneratePositionIndependentCode>false</avr32gcc.compiler.optimization.GeneratePositionIndependentCode>
<avr32gcc.compiler.optimization.UseAssemblerForPseudoInstructions>true</avr32gcc.compiler.optimization.UseAssemblerForPseudoInstructions>
<avr32gcc.compiler.optimization.ForceDoubleWordAlignment>false</avr32gcc.compiler.optimization.ForceDoubleWordAlignment>
<avr32gcc.compiler.optimization.PutLargeImmediatesInConstPool>false</avr32gcc.compiler.optimization.PutLargeImmediatesInConstPool>
<avr32gcc.compiler.optimization.DoNotInitializeGotRegisterBeforeUsing>false</avr32gcc.compiler.optimization.DoNotInitializeGotRegisterBeforeUsing>
<avr32gcc.compiler.optimization.UseSectionRoDataForReadOnlyData>false</avr32gcc.compiler.optimization.UseSectionRoDataForReadOnlyData>
<avr32gcc.compiler.optimization.GenerateGprofInformation>false</avr32gcc.compiler.optimization.GenerateGprofInformation>
<avr32gcc.compiler.optimization.GenerateProfInformation>false</avr32gcc.compiler.optimization.GenerateProfInformation>
<avr32gcc.compiler.warnings.AllWarnings>true</avr32gcc.compiler.warnings.AllWarnings>
<avr32gcc.compiler.warnings.CheckSyntaxOnly>false</avr32gcc.compiler.warnings.CheckSyntaxOnly>
<avr32gcc.compiler.warnings.Pedantic>false</avr32gcc.compiler.warnings.Pedantic>
<avr32gcc.compiler.warnings.PedanticWarningsAsErrors>false</avr32gcc.compiler.warnings.PedanticWarningsAsErrors>
<avr32gcc.compiler.warnings.InhibitAllWarnings>false</avr32gcc.compiler.warnings.InhibitAllWarnings>
<avr32gcc.compiler.miscellaneous.OtherFlags>-c -fmessage-length=0</avr32gcc.compiler.miscellaneous.OtherFlags>
<avr32gcc.compiler.miscellaneous.SupportAnsiPrograms>false</avr32gcc.compiler.miscellaneous.SupportAnsiPrograms>
<avr32gcc.linker.general.DoNotUseStandardStartFiles>true</avr32gcc.linker.general.DoNotUseStandardStartFiles>
<avr32gcc.linker.general.DoNotUseDefaultLibraries>false</avr32gcc.linker.general.DoNotUseDefaultLibraries>
<avr32gcc.linker.general.NoStartupOrDefaultLibs>false</avr32gcc.linker.general.NoStartupOrDefaultLibs>
<avr32gcc.linker.general.OmitAllSymbolInformation>false</avr32gcc.linker.general.OmitAllSymbolInformation>
<avr32gcc.linker.general.NoSharedLibraries>false</avr32gcc.linker.general.NoSharedLibraries>
<avr32gcc.linker.libraries.Libraries>
<ListValues>
<Value>newlib_addons-at32ucr2-speed_opt</Value>
<Value>_ucr2_hd_spi_standalone_v2.1.1</Value>
<Value>_ucr2_hd_wl_standalone_v2.1.1</Value>
</ListValues>
</avr32gcc.linker.libraries.Libraries>
<avr32gcc.linker.libraries.LibrarySearchPaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.1.1/UCR2/GCC</Value>
</ListValues>
</avr32gcc.linker.libraries.LibrarySearchPaths>
<avr32gcc.linker.optimization.GarbageCollectUnusedSections>true</avr32gcc.linker.optimization.GarbageCollectUnusedSections>
<avr32gcc.linker.optimization.EnableFastFloatingPointLibrary>false</avr32gcc.linker.optimization.EnableFastFloatingPointLibrary>
<avr32gcc.linker.optimization.EnableUnsafeMatchOptimizations>false</avr32gcc.linker.optimization.EnableUnsafeMatchOptimizations>
<avr32gcc.linker.optimization.EnableFastMath>false</avr32gcc.linker.optimization.EnableFastMath>
<avr32gcc.linker.optimization.GeneratePositionIndependentCode>false</avr32gcc.linker.optimization.GeneratePositionIndependentCode>
<avr32gcc.linker.optimization.PutReadOnlyDataInWritableDataSection>true</avr32gcc.linker.optimization.PutReadOnlyDataInWritableDataSection>
<avr32gcc.linker.optimization.AllowDirectReferencesToDataSection>true</avr32gcc.linker.optimization.AllowDirectReferencesToDataSection>
<avr32gcc.assembler.general.IncludePaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/TC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/USART</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PM</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC</Value>
<Value>../src/CONFIG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
</ListValues>
</avr32gcc.assembler.general.IncludePaths>
<avr32gcc.assembler.general.AnounceVersion>false</avr32gcc.assembler.general.AnounceVersion>
<avr32gcc.preprocessingassembler.general.AssemblerFlags>-Wa,-g</avr32gcc.preprocessingassembler.general.AssemblerFlags>
<avr32gcc.preprocessingassembler.general.IncludePaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/TC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/DELAY</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/USART</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PM</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC</Value>
<Value>../src/CONFIG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
</ListValues>
</avr32gcc.preprocessingassembler.general.IncludePaths>
<avr32gcc.preprocessingassembler.general.SuppressWarnings>false</avr32gcc.preprocessingassembler.general.SuppressWarnings>
<avr32gcc.preprocessingassembler.general.AnounceVersion>false</avr32gcc.preprocessingassembler.general.AnounceVersion>
</Avr32Gcc>
</ToolchainSettings>
</PropertyGroup>
<Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />
<ItemGroup>
<Folder Include="src" />
<Compile Include="src\ard_spi.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\ard_spi.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\ard_tcp.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\ard_tcp.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\ard_utils.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\ard_utils.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\avr32_spi.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\board_init.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\board_init.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\cmd_wl.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\cmd_wl.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\CONFIG\conf_access.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\CONFIG\conf_at45dbx.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\console.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\console.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\debug.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\fw_download.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\fw_download_extflash.c">
<SubType>compile</SubType>
</Compile>
<None Include="src\license.txt">
<SubType>compile</SubType>
</None>
<Compile Include="src\lwipopts.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\lwip_setup.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\lwip_setup.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\main.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\nvram.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\nvram.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\owl_os.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\ping.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\ping.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\printf-stdarg.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\printf-stdarg.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\MEMORY\DATA_FLASH\AT45DBX\at45dbx.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\MEMORY\DATA_FLASH\AT45DBX\at45dbx_mem.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\timer.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\timer.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\top_defs.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\trace.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\util.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\util.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\wifi_spi.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\wl_cm.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\wl_cm.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\wl_definitions.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\CONFIG" />
<Compile Include="src\CONFIG\conf_ebi.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\CONFIG\conf_sd_mmc_spi.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK" />
<Folder Include="src\SOFTWARE_FRAMEWORK\ASM" />
<Compile Include="src\SOFTWARE_FRAMEWORK\ASM\trampoline.x">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\BOARDS" />
<Compile Include="src\SOFTWARE_FRAMEWORK\BOARDS\board.h">
<SubType>compile</SubType>
</Compile>
<None Include="src\SOFTWARE_FRAMEWORK\BOARDS\board.h.my">
<SubType>compile</SubType>
</None>
<Folder Include="src\SOFTWARE_FRAMEWORK\BOARDS\ARDUINO" />
<Compile Include="src\SOFTWARE_FRAMEWORK\BOARDS\ARDUINO\arduino.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\BOARDS\ARDUINO\led.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\BOARDS\ARDUINO\led.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\COMPONENTS" />
<Folder Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\MEMORY" />
<Folder Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\MEMORY\DATA_FLASH" />
<Folder Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\MEMORY\DATA_FLASH\AT45DBX" />
<Folder Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\WIFI" />
<Folder Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\WIFI\HD" />
<Compile Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\WIFI\HD\wlap_api.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\WIFI\HD\wl_api.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\WIFI\HD\wl_os.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\WIFI\HD\wl_sdio.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\WIFI\HD\wl_spi.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\WIFI\HD\v2.7.0" />
<Compile Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\MEMORY\DATA_FLASH\AT45DBX\at45dbx.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\MEMORY\DATA_FLASH\AT45DBX\at45dbx_mem.c">
<SubType>compile</SubType>
</Compile>
<None Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\WIFI\HD\v2.7.0\revision.txt">
<SubType>compile</SubType>
</None>
<Folder Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\WIFI\HD\v2.7.0\UCR1" />
<Folder Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\WIFI\HD\v2.7.0\UCR1\GCC" />
<None Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\WIFI\HD\v2.7.0\UCR1\GCC\lib_ucr1_hd_sdio_v2.7.0.a">
<SubType>compile</SubType>
</None>
<None Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\WIFI\HD\v2.7.0\UCR1\GCC\lib_ucr1_hd_spi_v2.7.0.a">
<SubType>compile</SubType>
</None>
<None Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\WIFI\HD\v2.7.0\UCR1\GCC\lib_ucr1_hd_wl_sta_intwpa_v2.7.0.a">
<SubType>compile</SubType>
</None>
<Folder Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\WIFI\HD\v2.7.0\UCR2" />
<Folder Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\WIFI\HD\v2.7.0\UCR2\GCC" />
<None Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\WIFI\HD\v2.7.0\UCR2\GCC\lib_ucr2_hd_sdio_v2.7.0.a">
<SubType>compile</SubType>
</None>
<None Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\WIFI\HD\v2.7.0\UCR2\GCC\lib_ucr2_hd_spi_v2.7.0.a">
<SubType>compile</SubType>
</None>
<None Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\WIFI\HD\v2.7.0\UCR2\GCC\lib_ucr2_hd_wl_sta_intwpa_v2.7.0.a">
<SubType>compile</SubType>
</None>
<Folder Include="src\SOFTWARE_FRAMEWORK\DRIVERS" />
<Folder Include="src\SOFTWARE_FRAMEWORK\DRIVERS\CPU" />
<Folder Include="src\SOFTWARE_FRAMEWORK\DRIVERS\CPU\CYCLE_COUNTER" />
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\CPU\CYCLE_COUNTER\cycle_counter.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\DRIVERS\EBI" />
<Folder Include="src\SOFTWARE_FRAMEWORK\DRIVERS\EIC" />
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\EIC\eic.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\EIC\eic.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\DRIVERS\FLASHC" />
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\FLASHC\flashc.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\FLASHC\flashc.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\DRIVERS\GPIO" />
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\GPIO\gpio.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\GPIO\gpio.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\DRIVERS\INTC" />
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\INTC\exception.x">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\INTC\intc.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\INTC\intc.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\DRIVERS\PDCA" />
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\PDCA\pdca.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\PDCA\pdca.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\DRIVERS\PM" />
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\PM\pm.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\PM\pm.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\PM\pm_conf_clocks.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\PM\power_clocks_lib.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\PM\power_clocks_lib.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\DRIVERS\RTC" />
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\RTC\rtc.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\RTC\rtc.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\DRIVERS\SPI" />
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\SPI\spi.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\SPI\spi.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\DRIVERS\TC" />
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\TC\tc.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\TC\tc.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\DRIVERS\USART" />
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\USART\usart.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\USART\usart.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES" />
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES\DELAY" />
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\DELAY\delay.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\DELAY\delay.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP" />
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2" />
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src" />
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\core" />
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\core\dhcp.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\core\dns.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\core\init.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\core\mem.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\core\memp.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\core\netif.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\core\pbuf.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\core\raw.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\core\stats.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\core\tcp.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\core\tcp_in.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\core\tcp_out.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\core\udp.c">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\core\ipv4" />
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\core\ipv4\autoip.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\core\ipv4\icmp.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\core\ipv4\igmp.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\core\ipv4\inet.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\core\ipv4\inet_chksum.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\core\ipv4\ip.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\core\ipv4\ip_addr.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\core\ipv4\ip_frag.c">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include" />
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\ipv4" />
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\ipv4\lwip" />
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\ipv4\lwip\autoip.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\ipv4\lwip\icmp.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\ipv4\lwip\igmp.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\ipv4\lwip\inet.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\ipv4\lwip\inet_chksum.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\ipv4\lwip\ip.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\ipv4\lwip\ip_addr.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\ipv4\lwip\ip_frag.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip" />
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\api.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\api_msg.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\arch.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\debug.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\def.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\dhcp.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\dns.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\err.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\init.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\mem.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\memp.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\memp_std.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\netbuf.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\netdb.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\netif.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\netifapi.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\opt.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\pbuf.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\raw.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\sio.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\snmp.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\snmp_asn1.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\snmp_msg.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\snmp_structs.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\sockets.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\stats.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\sys.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\tcp.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\tcpip.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\lwip\udp.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\netif" />
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\netif\etharp.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\netif\loopif.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\netif\ppp_oe.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\include\netif\slipif.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\netif" />
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\netif\etharp.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-1.3.2\src\netif\loopif.c">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-port-1.3.2" />
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-port-1.3.2\HD" />
<None Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-port-1.3.2\HD\readme.txt">
<SubType>compile</SubType>
</None>
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-port-1.3.2\HD\if" />
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-port-1.3.2\HD\if\include" />
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-port-1.3.2\HD\if\include\lwipopts.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-port-1.3.2\HD\if\include\arch" />
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-port-1.3.2\HD\if\include\arch\cc.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-port-1.3.2\HD\if\include\arch\perf.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-port-1.3.2\HD\if\include\netif" />
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-port-1.3.2\HD\if\include\netif\wlif.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-port-1.3.2\HD\if\netif" />
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\LWIP\lwip-port-1.3.2\HD\if\netif\wlif.c">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES\MEMORY" />
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES\MEMORY\CTRL_ACCESS" />
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\MEMORY\CTRL_ACCESS\ctrl_access.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\MEMORY\CTRL_ACCESS\ctrl_access.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS" />
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\compiler.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\conf_isp.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\parts.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\DEBUG" />
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\DEBUG\debug.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\DEBUG\debug.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\DEBUG\print_funcs.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\DEBUG\print_funcs.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\LIBS" />
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\LIBS\NEWLIB_ADDONS" />
<None Include="src\SOFTWARE_FRAMEWORK\UTILS\LIBS\NEWLIB_ADDONS\libnewlib_addons-at32ucr2-speed_opt.a">
<SubType>compile</SubType>
</None>
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\LIBS\NEWLIB_ADDONS\INCLUDE" />
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\LIBS\NEWLIB_ADDONS\INCLUDE\nlao_cpu.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\LIBS\NEWLIB_ADDONS\INCLUDE\nlao_exceptions.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\LIBS\NEWLIB_ADDONS\INCLUDE\nlao_interrupts.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\LIBS\NEWLIB_ADDONS\INCLUDE\nlao_io.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\LIBS\NEWLIB_ADDONS\INCLUDE\nlao_usart.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\LINKER_SCRIPTS" />
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\LINKER_SCRIPTS\AT32UC3A" />
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\LINKER_SCRIPTS\AT32UC3A\0512" />
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\LINKER_SCRIPTS\AT32UC3A\0512\GCC" />
<None Include="src\SOFTWARE_FRAMEWORK\UTILS\LINKER_SCRIPTS\AT32UC3A\0512\GCC\link_uc3a0512.lds">
<SubType>compile</SubType>
</None>
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\LINKER_SCRIPTS\AT32UC3A\1256" />
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\LINKER_SCRIPTS\AT32UC3A\1256\GCC" />
<None Include="src\SOFTWARE_FRAMEWORK\UTILS\LINKER_SCRIPTS\AT32UC3A\1256\GCC\link_uc3a1256.lds">
<SubType>compile</SubType>
</None>
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\PREPROCESSOR" />
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\PREPROCESSOR\mrepeat.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\PREPROCESSOR\preprocessor.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\PREPROCESSOR\stringz.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\PREPROCESSOR\tpaste.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\STARTUP_FILES" />
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\STARTUP_FILES\GCC" />
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\STARTUP_FILES\GCC\crt0.x">
<SubType>compile</SubType>
</Compile>
</ItemGroup>
</Project>

View File

@ -0,0 +1,495 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
<ProjectVersion>6.0</ProjectVersion>
<ToolchainName>com.Atmel.AVRGCC32</ToolchainName>
<ProjectGuid>eb9606bc-de32-4edd-9cda-ae3bf36977a2</ProjectGuid>
<Name>wifi_dnld</Name>
<avrdevice>AT32uc3a1256</avrdevice>
<avrdeviceseries>none</avrdeviceseries>
<AvrProjectType>Importer</AvrProjectType>
<OutputType>Executable</OutputType>
<Language>C</Language>
<OutputFileName>wifi_dnld</OutputFileName>
<OutputFileExtension>.elf</OutputFileExtension>
<OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>
<ToolchainFlavour>Native</ToolchainFlavour>
<avrtool />
<KeepTimersRunning>true</KeepTimersRunning>
<OverrideVtor>false</OverrideVtor>
<OverrideVtorValue />
<eraseonlaunchrule>0</eraseonlaunchrule>
<AsfVersion>3.5.0</AsfVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<ToolchainSettings>
<Avr32Gcc>
<avr32gcc.common.outputfiles.hex>True</avr32gcc.common.outputfiles.hex>
<avr32gcc.common.outputfiles.lss>True</avr32gcc.common.outputfiles.lss>
<avr32gcc.common.outputfiles.eep>True</avr32gcc.common.outputfiles.eep>
<avr32gcc.common.outputfiles.srec>True</avr32gcc.common.outputfiles.srec>
<avr32gcc.compiler.preprocessor.DoNotSearchSystemDirectories>false</avr32gcc.compiler.preprocessor.DoNotSearchSystemDirectories>
<avr32gcc.compiler.preprocessor.PreprocessOnly>false</avr32gcc.compiler.preprocessor.PreprocessOnly>
<avr32gcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>BOARD=ARDUINO</Value>
</ListValues>
</avr32gcc.compiler.symbols.DefSymbols>
<avr32gcc.compiler.directories.IncludePaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS</Value>
<Value>../src/CONFIG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/USART</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PM</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
<Value>../src</Value>
</ListValues>
</avr32gcc.compiler.directories.IncludePaths>
<avr32gcc.compiler.optimization.OtherFlags>-fdata-sections</avr32gcc.compiler.optimization.OtherFlags>
<avr32gcc.compiler.optimization.PrepareFunctionsForGarbageCollection>true</avr32gcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
<avr32gcc.compiler.optimization.EnableFastFloatingPointLibrary>false</avr32gcc.compiler.optimization.EnableFastFloatingPointLibrary>
<avr32gcc.compiler.optimization.EnableUnsafeMatchOptimizations>false</avr32gcc.compiler.optimization.EnableUnsafeMatchOptimizations>
<avr32gcc.compiler.optimization.EnableFastMath>false</avr32gcc.compiler.optimization.EnableFastMath>
<avr32gcc.compiler.optimization.GeneratePositionIndependentCode>false</avr32gcc.compiler.optimization.GeneratePositionIndependentCode>
<avr32gcc.compiler.optimization.UseAssemblerForPseudoInstructions>true</avr32gcc.compiler.optimization.UseAssemblerForPseudoInstructions>
<avr32gcc.compiler.optimization.ForceDoubleWordAlignment>false</avr32gcc.compiler.optimization.ForceDoubleWordAlignment>
<avr32gcc.compiler.optimization.PutLargeImmediatesInConstPool>false</avr32gcc.compiler.optimization.PutLargeImmediatesInConstPool>
<avr32gcc.compiler.optimization.DoNotInitializeGotRegisterBeforeUsing>false</avr32gcc.compiler.optimization.DoNotInitializeGotRegisterBeforeUsing>
<avr32gcc.compiler.optimization.UseSectionRoDataForReadOnlyData>false</avr32gcc.compiler.optimization.UseSectionRoDataForReadOnlyData>
<avr32gcc.compiler.optimization.OtherDebuggingFlags />
<avr32gcc.compiler.optimization.GenerateGprofInformation>false</avr32gcc.compiler.optimization.GenerateGprofInformation>
<avr32gcc.compiler.optimization.GenerateProfInformation>false</avr32gcc.compiler.optimization.GenerateProfInformation>
<avr32gcc.compiler.warnings.AllWarnings>true</avr32gcc.compiler.warnings.AllWarnings>
<avr32gcc.compiler.warnings.CheckSyntaxOnly>false</avr32gcc.compiler.warnings.CheckSyntaxOnly>
<avr32gcc.compiler.warnings.Pedantic>false</avr32gcc.compiler.warnings.Pedantic>
<avr32gcc.compiler.warnings.PedanticWarningsAsErrors>false</avr32gcc.compiler.warnings.PedanticWarningsAsErrors>
<avr32gcc.compiler.warnings.InhibitAllWarnings>false</avr32gcc.compiler.warnings.InhibitAllWarnings>
<avr32gcc.compiler.miscellaneous.OtherFlags>-c -fmessage-length=0</avr32gcc.compiler.miscellaneous.OtherFlags>
<avr32gcc.compiler.miscellaneous.SupportAnsiPrograms>false</avr32gcc.compiler.miscellaneous.SupportAnsiPrograms>
<avr32gcc.linker.general.DoNotUseStandardStartFiles>true</avr32gcc.linker.general.DoNotUseStandardStartFiles>
<avr32gcc.linker.general.DoNotUseDefaultLibraries>false</avr32gcc.linker.general.DoNotUseDefaultLibraries>
<avr32gcc.linker.general.NoStartupOrDefaultLibs>false</avr32gcc.linker.general.NoStartupOrDefaultLibs>
<avr32gcc.linker.general.OmitAllSymbolInformation>false</avr32gcc.linker.general.OmitAllSymbolInformation>
<avr32gcc.linker.general.NoSharedLibraries>false</avr32gcc.linker.general.NoSharedLibraries>
<avr32gcc.linker.libraries.Libraries>
<ListValues>
<Value>newlib_addons-at32ucr2-speed_opt</Value>
</ListValues>
</avr32gcc.linker.libraries.Libraries>
<avr32gcc.linker.libraries.LibrarySearchPaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
</ListValues>
</avr32gcc.linker.libraries.LibrarySearchPaths>
<avr32gcc.linker.optimization.GarbageCollectUnusedSections>true</avr32gcc.linker.optimization.GarbageCollectUnusedSections>
<avr32gcc.linker.optimization.EnableFastFloatingPointLibrary>false</avr32gcc.linker.optimization.EnableFastFloatingPointLibrary>
<avr32gcc.linker.optimization.EnableUnsafeMatchOptimizations>false</avr32gcc.linker.optimization.EnableUnsafeMatchOptimizations>
<avr32gcc.linker.optimization.EnableFastMath>false</avr32gcc.linker.optimization.EnableFastMath>
<avr32gcc.linker.optimization.GeneratePositionIndependentCode>false</avr32gcc.linker.optimization.GeneratePositionIndependentCode>
<avr32gcc.linker.optimization.PutReadOnlyDataInWritableDataSection>true</avr32gcc.linker.optimization.PutReadOnlyDataInWritableDataSection>
<avr32gcc.linker.optimization.AllowDirectReferencesToDataSection>true</avr32gcc.linker.optimization.AllowDirectReferencesToDataSection>
<avr32gcc.assembler.general.IncludePaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS</Value>
<Value>../src/CONFIG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/USART</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PM</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
</ListValues>
</avr32gcc.assembler.general.IncludePaths>
<avr32gcc.assembler.general.AnounceVersion>false</avr32gcc.assembler.general.AnounceVersion>
<avr32gcc.preprocessingassembler.general.AssemblerFlags>-Wa,-g</avr32gcc.preprocessingassembler.general.AssemblerFlags>
<avr32gcc.preprocessingassembler.general.IncludePaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS</Value>
<Value>../src/CONFIG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/USART</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PM</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
</ListValues>
</avr32gcc.preprocessingassembler.general.IncludePaths>
<avr32gcc.preprocessingassembler.general.SuppressWarnings>false</avr32gcc.preprocessingassembler.general.SuppressWarnings>
<avr32gcc.preprocessingassembler.general.AnounceVersion>false</avr32gcc.preprocessingassembler.general.AnounceVersion>
</Avr32Gcc>
</ToolchainSettings>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<ToolchainSettings>
<Avr32Gcc>
<avr32gcc.common.outputfiles.hex>True</avr32gcc.common.outputfiles.hex>
<avr32gcc.common.outputfiles.lss>True</avr32gcc.common.outputfiles.lss>
<avr32gcc.common.outputfiles.eep>True</avr32gcc.common.outputfiles.eep>
<avr32gcc.common.outputfiles.srec>True</avr32gcc.common.outputfiles.srec>
<avr32gcc.compiler.preprocessor.DoNotSearchSystemDirectories>false</avr32gcc.compiler.preprocessor.DoNotSearchSystemDirectories>
<avr32gcc.compiler.preprocessor.PreprocessOnly>false</avr32gcc.compiler.preprocessor.PreprocessOnly>
<avr32gcc.compiler.symbols.DefSymbols>
<ListValues>
<Value>BOARD=ARDUINO</Value>
</ListValues>
</avr32gcc.compiler.symbols.DefSymbols>
<avr32gcc.compiler.directories.IncludePaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS</Value>
<Value>../src/CONFIG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/USART</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PM</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
<Value>../src</Value>
</ListValues>
</avr32gcc.compiler.directories.IncludePaths>
<avr32gcc.compiler.optimization.OtherFlags>-fdata-sections</avr32gcc.compiler.optimization.OtherFlags>
<avr32gcc.compiler.optimization.PrepareFunctionsForGarbageCollection>true</avr32gcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
<avr32gcc.compiler.optimization.EnableFastFloatingPointLibrary>false</avr32gcc.compiler.optimization.EnableFastFloatingPointLibrary>
<avr32gcc.compiler.optimization.EnableUnsafeMatchOptimizations>false</avr32gcc.compiler.optimization.EnableUnsafeMatchOptimizations>
<avr32gcc.compiler.optimization.EnableFastMath>false</avr32gcc.compiler.optimization.EnableFastMath>
<avr32gcc.compiler.optimization.GeneratePositionIndependentCode>false</avr32gcc.compiler.optimization.GeneratePositionIndependentCode>
<avr32gcc.compiler.optimization.UseAssemblerForPseudoInstructions>true</avr32gcc.compiler.optimization.UseAssemblerForPseudoInstructions>
<avr32gcc.compiler.optimization.ForceDoubleWordAlignment>false</avr32gcc.compiler.optimization.ForceDoubleWordAlignment>
<avr32gcc.compiler.optimization.PutLargeImmediatesInConstPool>false</avr32gcc.compiler.optimization.PutLargeImmediatesInConstPool>
<avr32gcc.compiler.optimization.DoNotInitializeGotRegisterBeforeUsing>false</avr32gcc.compiler.optimization.DoNotInitializeGotRegisterBeforeUsing>
<avr32gcc.compiler.optimization.UseSectionRoDataForReadOnlyData>false</avr32gcc.compiler.optimization.UseSectionRoDataForReadOnlyData>
<avr32gcc.compiler.optimization.DebugLevel>Maximum (-g3)</avr32gcc.compiler.optimization.DebugLevel>
<avr32gcc.compiler.optimization.OtherDebuggingFlags />
<avr32gcc.compiler.optimization.GenerateGprofInformation>false</avr32gcc.compiler.optimization.GenerateGprofInformation>
<avr32gcc.compiler.optimization.GenerateProfInformation>false</avr32gcc.compiler.optimization.GenerateProfInformation>
<avr32gcc.compiler.warnings.AllWarnings>true</avr32gcc.compiler.warnings.AllWarnings>
<avr32gcc.compiler.warnings.CheckSyntaxOnly>false</avr32gcc.compiler.warnings.CheckSyntaxOnly>
<avr32gcc.compiler.warnings.Pedantic>false</avr32gcc.compiler.warnings.Pedantic>
<avr32gcc.compiler.warnings.PedanticWarningsAsErrors>false</avr32gcc.compiler.warnings.PedanticWarningsAsErrors>
<avr32gcc.compiler.warnings.InhibitAllWarnings>false</avr32gcc.compiler.warnings.InhibitAllWarnings>
<avr32gcc.compiler.miscellaneous.OtherFlags>-c -fmessage-length=0</avr32gcc.compiler.miscellaneous.OtherFlags>
<avr32gcc.compiler.miscellaneous.SupportAnsiPrograms>false</avr32gcc.compiler.miscellaneous.SupportAnsiPrograms>
<avr32gcc.linker.general.DoNotUseStandardStartFiles>true</avr32gcc.linker.general.DoNotUseStandardStartFiles>
<avr32gcc.linker.general.DoNotUseDefaultLibraries>false</avr32gcc.linker.general.DoNotUseDefaultLibraries>
<avr32gcc.linker.general.NoStartupOrDefaultLibs>false</avr32gcc.linker.general.NoStartupOrDefaultLibs>
<avr32gcc.linker.general.OmitAllSymbolInformation>false</avr32gcc.linker.general.OmitAllSymbolInformation>
<avr32gcc.linker.general.NoSharedLibraries>false</avr32gcc.linker.general.NoSharedLibraries>
<avr32gcc.linker.libraries.Libraries>
<ListValues>
<Value>newlib_addons-at32ucr2-speed_opt</Value>
</ListValues>
</avr32gcc.linker.libraries.Libraries>
<avr32gcc.linker.libraries.LibrarySearchPaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
</ListValues>
</avr32gcc.linker.libraries.LibrarySearchPaths>
<avr32gcc.linker.optimization.GarbageCollectUnusedSections>true</avr32gcc.linker.optimization.GarbageCollectUnusedSections>
<avr32gcc.linker.optimization.EnableFastFloatingPointLibrary>false</avr32gcc.linker.optimization.EnableFastFloatingPointLibrary>
<avr32gcc.linker.optimization.EnableUnsafeMatchOptimizations>false</avr32gcc.linker.optimization.EnableUnsafeMatchOptimizations>
<avr32gcc.linker.optimization.EnableFastMath>false</avr32gcc.linker.optimization.EnableFastMath>
<avr32gcc.linker.optimization.GeneratePositionIndependentCode>false</avr32gcc.linker.optimization.GeneratePositionIndependentCode>
<avr32gcc.linker.optimization.PutReadOnlyDataInWritableDataSection>true</avr32gcc.linker.optimization.PutReadOnlyDataInWritableDataSection>
<avr32gcc.linker.optimization.AllowDirectReferencesToDataSection>true</avr32gcc.linker.optimization.AllowDirectReferencesToDataSection>
<avr32gcc.assembler.general.IncludePaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS</Value>
<Value>../src/CONFIG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/USART</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PM</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
</ListValues>
</avr32gcc.assembler.general.IncludePaths>
<avr32gcc.assembler.general.AnounceVersion>false</avr32gcc.assembler.general.AnounceVersion>
<avr32gcc.assembler.debugging.DebugLevel>Default (-g)</avr32gcc.assembler.debugging.DebugLevel>
<avr32gcc.preprocessingassembler.general.AssemblerFlags>-Wa,-g</avr32gcc.preprocessingassembler.general.AssemblerFlags>
<avr32gcc.preprocessingassembler.general.IncludePaths>
<ListValues>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/DEBUG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS</Value>
<Value>../src/CONFIG</Value>
<Value>../src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/USART</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/PM</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR</Value>
<Value>../src/SOFTWARE_FRAMEWORK/UTILS</Value>
<Value>../src/SOFTWARE_FRAMEWORK/DRIVERS/INTC</Value>
<Value>../src/SOFTWARE_FRAMEWORK/BOARDS</Value>
</ListValues>
</avr32gcc.preprocessingassembler.general.IncludePaths>
<avr32gcc.preprocessingassembler.general.SuppressWarnings>false</avr32gcc.preprocessingassembler.general.SuppressWarnings>
<avr32gcc.preprocessingassembler.general.AnounceVersion>false</avr32gcc.preprocessingassembler.general.AnounceVersion>
<avr32gcc.preprocessingassembler.debugging.DebugLevel>Default (-Wa,-g)</avr32gcc.preprocessingassembler.debugging.DebugLevel>
</Avr32Gcc>
</ToolchainSettings>
</PropertyGroup>
<Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />
<ItemGroup>
<Folder Include="src" />
<Compile Include="src\clocks.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\clocks.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\flash_fw.c">
<SubType>compile</SubType>
</Compile>
<None Include="src\license.txt">
<SubType>compile</SubType>
</None>
<Compile Include="src\nor_flash.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\nor_flash.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\printf-stdarg.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\printf-stdarg.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\startup.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\startup.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\wl_fw.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\CONFIG" />
<Compile Include="src\CONFIG\conf_access.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\CONFIG\conf_at45dbx.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\Doc" />
<None Include="src\Doc\gettingstarted.pdf">
<SubType>compile</SubType>
</None>
<None Include="src\Doc\SPB104 product brief.pdf">
<SubType>compile</SubType>
</None>
<Folder Include="src\SOFTWARE_FRAMEWORK" />
<Folder Include="src\SOFTWARE_FRAMEWORK\ASM" />
<Compile Include="src\SOFTWARE_FRAMEWORK\ASM\trampoline.x">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\BOARDS" />
<Compile Include="src\SOFTWARE_FRAMEWORK\BOARDS\board.h">
<SubType>compile</SubType>
</Compile>
<None Include="src\SOFTWARE_FRAMEWORK\BOARDS\board.h.ori">
<SubType>compile</SubType>
</None>
<Folder Include="src\SOFTWARE_FRAMEWORK\BOARDS\ARDUINO" />
<Compile Include="src\SOFTWARE_FRAMEWORK\BOARDS\ARDUINO\arduino.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\BOARDS\ARDUINO\led.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\BOARDS\ARDUINO\led.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\COMPONENTS" />
<Folder Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\MEMORY" />
<Folder Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\MEMORY\DATA_FLASH" />
<Folder Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\MEMORY\DATA_FLASH\AT45DBX" />
<Compile Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\MEMORY\DATA_FLASH\AT45DBX\at45dbx.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\MEMORY\DATA_FLASH\AT45DBX\at45dbx.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\MEMORY\DATA_FLASH\AT45DBX\at45dbx_mem.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\COMPONENTS\MEMORY\DATA_FLASH\AT45DBX\at45dbx_mem.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\DRIVERS" />
<Folder Include="src\SOFTWARE_FRAMEWORK\DRIVERS\FLASHC" />
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\FLASHC\flashc.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\FLASHC\flashc.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\DRIVERS\GPIO" />
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\GPIO\gpio.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\GPIO\gpio.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\DRIVERS\INTC" />
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\INTC\exception.x">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\INTC\intc.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\INTC\intc.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\DRIVERS\PM" />
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\PM\pm.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\PM\pm.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\PM\pm_conf_clocks.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\PM\power_clocks_lib.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\PM\power_clocks_lib.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\DRIVERS\SPI" />
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\SPI\spi.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\SPI\spi.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\DRIVERS\USART" />
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\USART\usart.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\DRIVERS\USART\usart.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES" />
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES\MEMORY" />
<Folder Include="src\SOFTWARE_FRAMEWORK\SERVICES\MEMORY\CTRL_ACCESS" />
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\MEMORY\CTRL_ACCESS\ctrl_access.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\SERVICES\MEMORY\CTRL_ACCESS\ctrl_access.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS" />
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\compiler.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\conf_isp.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\parts.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\DEBUG" />
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\DEBUG\debug.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\DEBUG\debug.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\DEBUG\print_funcs.c">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\DEBUG\print_funcs.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\LIBS" />
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\LIBS\NEWLIB_ADDONS" />
<None Include="src\SOFTWARE_FRAMEWORK\UTILS\LIBS\NEWLIB_ADDONS\libnewlib_addons-at32ucr2-speed_opt.a">
<SubType>compile</SubType>
</None>
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\LIBS\NEWLIB_ADDONS\INCLUDE" />
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\LIBS\NEWLIB_ADDONS\INCLUDE\nlao_cpu.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\LIBS\NEWLIB_ADDONS\INCLUDE\nlao_exceptions.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\LIBS\NEWLIB_ADDONS\INCLUDE\nlao_interrupts.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\LIBS\NEWLIB_ADDONS\INCLUDE\nlao_io.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\LIBS\NEWLIB_ADDONS\INCLUDE\nlao_usart.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\LINKER_SCRIPTS" />
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\LINKER_SCRIPTS\AT32UC3A" />
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\LINKER_SCRIPTS\AT32UC3A\0512" />
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\LINKER_SCRIPTS\AT32UC3A\0512\GCC" />
<None Include="src\SOFTWARE_FRAMEWORK\UTILS\LINKER_SCRIPTS\AT32UC3A\0512\GCC\link_uc3a0512.lds">
<SubType>compile</SubType>
</None>
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\LINKER_SCRIPTS\AT32UC3A\1256" />
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\LINKER_SCRIPTS\AT32UC3A\1256\GCC" />
<None Include="src\SOFTWARE_FRAMEWORK\UTILS\LINKER_SCRIPTS\AT32UC3A\1256\GCC\link_uc3a1256.lds">
<SubType>compile</SubType>
</None>
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\PREPROCESSOR" />
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\PREPROCESSOR\mrepeat.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\PREPROCESSOR\preprocessor.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\PREPROCESSOR\stringz.h">
<SubType>compile</SubType>
</Compile>
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\PREPROCESSOR\tpaste.h">
<SubType>compile</SubType>
</Compile>
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\STARTUP_FILES" />
<Folder Include="src\SOFTWARE_FRAMEWORK\UTILS\STARTUP_FILES\GCC" />
<Compile Include="src\SOFTWARE_FRAMEWORK\UTILS\STARTUP_FILES\GCC\crt0.x">
<SubType>compile</SubType>
</Compile>
</ItemGroup>
</Project>

View File

@ -0,0 +1,36 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Atmel Studio Solution File, Format Version 11.00
Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "wifi_dnld", "wifi_dnld\wifi_dnld.cproj", "{EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}"
EndProject
Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "wifiHD", "wifiHD\wifiHD.cproj", "{417E15DB-488A-4B56-8D4E-FBE832B2B649}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug_512|AVR = Debug_512|AVR
Debug|AVR = Debug|AVR
Release_512|AVR = Release_512|AVR
Release|AVR = Release|AVR
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Debug_512|AVR.ActiveCfg = Debug|AVR
{EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Debug_512|AVR.Build.0 = Debug|AVR
{EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Debug|AVR.ActiveCfg = Debug|AVR
{EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Debug|AVR.Build.0 = Debug|AVR
{EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Release_512|AVR.ActiveCfg = Release|AVR
{EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Release_512|AVR.Build.0 = Release|AVR
{EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Release|AVR.ActiveCfg = Release|AVR
{EB9606BC-DE32-4EDD-9CDA-AE3BF36977A2}.Release|AVR.Build.0 = Release|AVR
{417E15DB-488A-4B56-8D4E-FBE832B2B649}.Debug_512|AVR.ActiveCfg = Debug_512|AVR
{417E15DB-488A-4B56-8D4E-FBE832B2B649}.Debug_512|AVR.Build.0 = Debug_512|AVR
{417E15DB-488A-4B56-8D4E-FBE832B2B649}.Debug|AVR.ActiveCfg = Debug|AVR
{417E15DB-488A-4B56-8D4E-FBE832B2B649}.Debug|AVR.Build.0 = Debug|AVR
{417E15DB-488A-4B56-8D4E-FBE832B2B649}.Release_512|AVR.ActiveCfg = Release_512|AVR
{417E15DB-488A-4B56-8D4E-FBE832B2B649}.Release_512|AVR.Build.0 = Release_512|AVR
{417E15DB-488A-4B56-8D4E-FBE832B2B649}.Release|AVR.ActiveCfg = Release|AVR
{417E15DB-488A-4B56-8D4E-FBE832B2B649}.Release|AVR.Build.0 = Release|AVR
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal