Merge branch 'wifishield-bugfix'

This commit is contained in:
Cristian Maglie 2013-03-28 12:27:11 +01:00
commit c6dcde62af
24 changed files with 19739 additions and 778 deletions

View File

@ -1,8 +1,11 @@
#!/bin/sh
WIFI_FW_PATH="/hardware/arduino/firmwares/wifi-shield"
WIFI_FW_PATH="/hardware/arduino/firmwares/wifishield/binary"
AVR_TOOLS_PATH="/hardware/tools/avr/bin"
TARGET_MICRO="at32uc3a1256"
progname=$0
usage () {
@ -20,28 +23,49 @@ EOF
upgradeHDmodule () {
sleep 1 # Give time to the shield to end the boot
echo "****Upgrade HD WiFi module firmware****\n"
dfu-programmer at32uc3a1256 erase
dfu-programmer at32uc3a1256 flash --suppress-bootloader-mem $WIFI_FW_PATH/wifi_dnld.hex
dfu-programmer at32uc3a1256 start
echo -n "\nRemove the J3 jumper then press the RESET button on the shield then type [ENTER] to upgrade the firmware of the shield..\n"
dfu-programmer $TARGET_MICRO erase
dfu-programmer $TARGET_MICRO flash --suppress-bootloader-mem $WIFI_FW_PATH/wifi_dnld.hex
dfu-programmer $TARGET_MICRO start
if [ $? != 0 ] ; then
echo "\nError during device initialization, please close the J3 jumper and press the reset button.\nTry -h for help\n"
exit 1 # if the device is not recognized exit
fi
echo -n "\nPress the RESET button on the shield then type [ENTER] to upgrade the firmware of the shield..\n"
read readEnter
}
upgradeShield () {
sleep 1 # Give time to the shield to end the boot
echo "****Upgrade WiFi Shield firmware****\n"
dfu-programmer at32uc3a1256 erase
dfu-programmer at32uc3a1256 flash --suppress-bootloader-mem $WIFI_FW_PATH/wifiHD.hex
dfu-programmer at32uc3a1256 start
dfu-programmer $TARGET_MICRO erase
dfu-programmer $TARGET_MICRO flash --suppress-bootloader-mem $WIFI_FW_PATH/wifiHD.hex
dfu-programmer $TARGET_MICRO start
if [ $? != 0 ] ; then
echo "\nError during device initialization, please close the J3 jumper and press the reset button.\nTry -h for help\n"
exit 1 # if the device is not recognized exit
fi
echo "\nDone. Remove the J3 jumper and press the RESET button on the shield."
echo "Thank you!\n"
}
cat <<EOF
Arduino WiFi Shield upgrade
=========================================
Disclaimer: to access to the USB devices correctly, the dfu-programmer needs to be used as root. Run this script as root.
Instructions:
To access to the USB devices correctly, the dfu-programmer needs to have the root permissions.
You can upgrade the firmware of the antenna togheter with the shield firmware or only the shield firmware
if there aren't changes on the antenna firmware.
Use the '-h' parameter for help
=========================================
EOF
@ -90,7 +114,7 @@ if [ $USER = 'root' ] ; then #check if the current user is root
esac
done
else
echo "You are not root!\n"
echo "Please retry running the script as root.\n"
fi
shift $(($OPTIND - 1))

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

@ -46,6 +46,7 @@
#include "compiler.h"
#include "debug.h"
#include "util.h"
#if (defined __GNUC__)
@ -117,3 +118,16 @@ void uc3_round_trace(U32 val)
//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,9 @@
#include "timer.h"
#include "lwip/dns.h"
#include <board_init.h>
#include "util.h"
#include "lwip/udp.h"
#include "lwip_setup.h"
extern const char* fwVersion;
@ -92,7 +95,7 @@ bool end_write = false; //TODO only for debug
// Signal indicating a new command is coming from SPI interface
static volatile Bool startRecvCmdSignal = FALSE;
#define MAX_CMD_NUM 30
#define MAX_CMD_NUM 36
typedef struct sCmd_spi_list{
cmd_spi_cb_t cb;
char cmd_id;
@ -136,6 +139,7 @@ void initStatSpi()
void printStatSpi()
{
printk("totSpiCmds\t: 0x%x\n", cmdCorr);
printk("lastCmd \t: 0x%x\n", statSpi.lastCmd);
printk("lastErr \t: 0x%x\n", statSpi.lastError);
printk("spiStatus\t: 0x%X\n", statSpi.status);
@ -169,7 +173,28 @@ cmd_resetStatSpi(int argc, char* argv[], void* ctx)
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;
@ -180,10 +205,10 @@ struct ip_addr _hostIpAddr;
static bool hostIpAddrFound = false;
void* getTTCP(uint8_t sock)
void* getTTCP(uint8_t sock, uint8_t mode)
{
if (sock < MAX_SOCK_NUM)
return mapSockTCP[sock];
return mapSockTCP[sock][mode];
return NULL;
}
@ -194,26 +219,31 @@ int getSock(void * _ttcp)
int i = 0;
for (; i<MAX_SOCK_NUM; i++)
{
if (_ttcp == mapSockTCP[i])
if (_ttcp == mapSockTCP[i][GET_TCP_MODE(_ttcp)])
return i;
}
}
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)
mapSockTCP[sock]=_ttcp;
INFO_TCP("Map [%d, %p]\n", sock, _ttcp);
if ((IS_VALID_SOCK(sock))&&(_ttcp!=NULL))
mapSockTCP[sock][_tcp_mode]=_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)
{
//printk("UnMap [%d, %p]\n", sock, mapSockTCP[sock]);
mapSockTCP[sock] = NULL;
mapSockTCP[sock][mode] = NULL;
}
}
@ -223,6 +253,7 @@ void initMapSockTcp()
memset(mapSockTCP, 0, sizeof(mapSockTCP));
}
#if 0
/**
* Calculate bitrate based on number of bytes transmitted and elapsed time
*/
@ -235,10 +266,10 @@ static void ard_tcp_print_stats(struct ttcp *ttcp) {
printk("\n");
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
== TTCP_MODE_TRANSMIT ? "tx" : "rx");
bytes / ms, bytes % ms, ProtMode2Str(ttcp->udp),
Mode2Str(ttcp->mode));
}
#endif
void showTTCPstatus()
{
@ -248,19 +279,45 @@ void showTTCPstatus()
int i = 0;
for (; i<MAX_SOCK_NUM; i++)
{
void* p = getTTCP(i);
if (p)
int ii=0;
for (; ii<MAX_MODE_NUM; ii++)
{
ttcp_t* _ttcp = (ttcp_t* )p;
printk("Socket n.:%d addr:0x%x port:%d\n", i, _ttcp->addr, _ttcp->port);
if (_ttcp->tpcb){
printk("[tpcp-%p]-Status:%d\n", _ttcp->tpcb, _ttcp->tpcb->state);
void* p = getTTCP(i, ii);
if (p)
{
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();
@ -270,12 +327,8 @@ int write_stream(volatile avr32_spi_t *spi, const char *stream, uint16_t len)
{
uint16_t _len = 0;
unsigned short dummy=0;
bool streamExit = false;
do {
if (*stream == END_CMD)
streamExit = true;
//SIGN1_DN();
if (spi_write(spi, *stream) == SPI_ERROR_TIMEOUT)
{
@ -294,16 +347,7 @@ int write_stream(volatile avr32_spi_t *spi, const char *stream, uint16_t len)
spi_read(spi,&dummy);
}
//SIGN1_UP();
}while ((!streamExit)&&(_len <= len));
if (!streamExit)
{
#ifdef _SPI_STATS_
statSpi.wrongFrame++;
statSpi.lastError = SPI_ERROR_ARGUMENT;
#endif
return SPI_ERROR_ARGUMENT;
}
}while (_len < len);
return SPI_OK;
}
@ -323,8 +367,7 @@ void sendError()
volatile avr32_spi_t *spi = ARD_SPI; \
Bool global_interrupt_enabled = Is_global_interrupt_enabled(); \
if (global_interrupt_enabled) Disable_global_interrupt(); \
spi->IER.rdrf = 1; \
spi->IER.rxbuff = 1; spi->IER.endrx = 1; \
spi->IER.rdrf = 1; spi->IER.rxbuff = 1; spi->IER.endrx = 1; \
if (global_interrupt_enabled) Enable_global_interrupt(); \
}while(0);
@ -340,54 +383,6 @@ void sendError()
eic_clear_interrupt_line(&AVR32_EIC, AVR32_SPI0_IRQ); \
}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,
char flag) {
U32 i;
@ -541,6 +536,114 @@ int set_passphrase_cmd_cb(int numParam, char* buf, void* ctx) {
RETURN_ERR(err)
}
int set_ip_config_cmd_cb(int numParam, char* buf, void* ctx) {
struct ip_addr lwip_addr;
struct ctx_server *hs = ctx;
struct net_cfg *ncfg = &(hs->net_cfg);
struct netif *nif = ncfg->netif;
uint8_t parmsToChange=0;
const uint8_t MAX_IP_CONFIG_PARAMS = 3;
wl_err_t err = WL_SUCCESS;
tParam* params = (tParam*) buf;
if (params->paramLen == 1)
{
GET_PARAM_NEXT(BYTE, params, _parmsToChange);
parmsToChange = _parmsToChange;
}
else
RETURN_ERR(WL_FAILURE)
INFO_SPI("%p numParam=%d parmsToChange=%d\n", ctx, numParam, parmsToChange);
if (parmsToChange <= MAX_IP_CONFIG_PARAMS)
{
int i=0;
for (; i<parmsToChange; ++i)
{
if (params->paramLen == 4)
{
GET_PARAM_NEXT(LONG, params, _ip_addr);
lwip_addr.addr = _ip_addr;
INFO_SPI("%d] nif:%p lwip_addr=0x%x\n", i, nif, lwip_addr.addr);
switch (i)
{
case 0: // local_ip
{
netif_set_ipaddr(nif, &lwip_addr);
break;
}
case 1: // gateway
{
netif_set_gw(nif, &lwip_addr);
break;
}
case 2: // subnet
{
netif_set_netmask(nif, &lwip_addr);
break;
}
}
}else{
RETURN_ERR(WL_FAILURE)
}
}
/* Disable DHCP */
ncfg->dhcp_enabled = STATIC_IP_CONFIG;
}else
RETURN_ERR(WL_FAILURE)
RETURN_ERR(err)
}
int set_dns_config_cmd_cb(int numParam, char* buf, void* ctx) {
struct ip_addr lwip_addr;
struct ctx_server *hs = ctx;
struct net_cfg *ncfg = &(hs->net_cfg);
struct netif *nif = ncfg->netif;
uint8_t parmsToChange=0;
const uint8_t MAX_DNS_CONFIG_PARAMS = 2;
wl_err_t err = WL_SUCCESS;
tParam* params = (tParam*) buf;
if (params->paramLen == 1)
{
GET_PARAM_NEXT(BYTE, params, _parmsToChange);
parmsToChange = _parmsToChange;
}
else
RETURN_ERR(WL_FAILURE)
INFO_SPI("%p numParam=%d parmsToChange=%d\n", ctx, numParam, parmsToChange);
if (parmsToChange <= MAX_DNS_CONFIG_PARAMS)
{
int i=0;
for (; i<parmsToChange; ++i)
{
if (params->paramLen == 4)
{
GET_PARAM_NEXT(LONG, params, _ip_addr);
lwip_addr.addr = _ip_addr;
INFO_SPI("%d] nif:%p lwip_addr=0x%x\n", i, nif, lwip_addr.addr);
dns_setserver(i, &lwip_addr);
}else{
RETURN_ERR(WL_FAILURE)
}
}
/* Disable DHCP */
ncfg->dhcp_enabled = STATIC_IP_CONFIG;
}else
RETURN_ERR(WL_FAILURE)
RETURN_ERR(err)
}
void set_result(wl_status_t _status)
{
result = _status;
@ -578,7 +681,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);
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 };
uint16_t buflen = 1024;
@ -590,7 +693,7 @@ int start_server_tcp(uint16_t port, uint8_t sock)
#else
int verbose = 0;
#endif
int udp = 0;
int udp = protMode;
int mode = 1; //RECEIVE
void* _ttcp = NULL;
@ -605,20 +708,20 @@ int start_server_tcp(uint16_t port, uint8_t sock)
if (!ifStatus)
{
WARN("IF down...wait\n");
WARN_VER("IF down...wait\n");
return WIFI_SPI_ERR;
}
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);
err = WL_SUCCESS;
}else{
WARN("Start Server [%d, %d] FAILED!\n", port, sock);
clearMapSockTcp(sock);
WARN("Start Server %s [%d, %d] FAILED!\n", ProtMode2Str(protMode), port, sock);
clearMapSockTcp(sock, TTCP_MODE_RECEIVE);
}
return err;
}
@ -627,59 +730,72 @@ int start_server_tcp(uint16_t port, uint8_t sock)
int start_server_tcp_cmd_cb(int numParam, char* buf, void* ctx) {
wl_err_t err = WL_FAILURE;
tParam* params = (tParam*) buf;
if (numParam == 2)
if (numParam == 3)
{
GET_PARAM_NEXT(INT, params, port);
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;
}
int start_client_tcp_cmd_cb(int numParam, char* buf, void* ctx) {
wl_err_t err = WL_FAILURE;
tParam* params = (tParam*) buf;
if (numParam == 3)
{
GET_PARAM_NEXT(LONG, params, _addr);
GET_PARAM_NEXT(INT, params, port);
GET_PARAM_NEXT(BYTE, params, sock);
int start_client_tcp(uint32_t _addr, uint16_t port, uint8_t sock, uint8_t protMode)
{
uint16_t buflen = 1024;
uint16_t nbuf = 1024;
wl_err_t err = WL_FAILURE;
struct ip_addr addr = { .addr = _addr};
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;
uint16_t nbuf = 1024;
struct ip_addr addr = { .addr = _addr};
#ifdef _APP_DEBUG_
int verbose = 1;
#else
int verbose = 0;
#endif
int udp = 0;
int mode = 0; //TRANSMIT
void* _ttcp = NULL;
#ifdef _APP_DEBUG_
int verbose = 1;
#else
int verbose = 0;
#endif
int udp = protMode;
int mode = 0; //TRANSMIT
void* _ttcp = NULL;
if (sock >= MAX_SOCK_NUM)
return WIFI_SPI_ERR;
// Check previous connection
_ttcp = getTTCP(sock);
if (_ttcp != NULL)
{
WARN("Previous client %p not stopped !\n", _ttcp);
ard_tcp_stop(_ttcp);
clearMapSockTcp(sock);
}
// Check previous connection
_ttcp = getTTCP(sock, TTCP_MODE_TRANSMIT);
if (_ttcp != NULL)
{
WARN("Previous client %p not stopped !\n", _ttcp);
ard_tcp_stop(_ttcp);
clearMapSockTcp(sock, TTCP_MODE_TRANSMIT);
}
if (ard_tcp_start((struct ip_addr)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);
setMapSock(sock, _ttcp);
err = WL_SUCCESS;
}else{
INFO_SPI("Start Client [0x%x, %d, %d] FAILED!\n", addr, port, sock);
clearMapSockTcp(sock);
}
if (ard_tcp_start(addr, port, NULL, NULL, mode, nbuf, buflen, udp, verbose, sock, &_ttcp) == 0)
{
INFO_SPI("Start Client %s %p [0x%x, %d, %d] OK!\n", ProtMode2Str(protMode),
_ttcp, addr, port, sock);
setMapSock(sock, _ttcp);
err = WL_SUCCESS;
}else{
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;
}
@ -697,7 +813,7 @@ int stop_client_tcp_cmd_cb(int numParam, char* buf, void* ctx) {
if (sock < MAX_SOCK_NUM)
{
_ttcp = getTTCP(sock);
_ttcp = getTTCP(sock, TTCP_MODE_TRANSMIT);
ard_tcp_stop(_ttcp);
err = WL_SUCCESS;
}
@ -705,6 +821,37 @@ int stop_client_tcp_cmd_cb(int numParam, char* buf, void* ctx) {
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) {
wl_err_t err = WL_FAILURE;
DATA_LED_ON();
@ -714,7 +861,7 @@ int send_data_tcp_cmd_cb(int numParam, char* buf, void* ctx) {
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);
err = sendTcpData(getTTCP(sock), (uint8_t*)(buf+5), len);
err = sendTcpData(getTTCP(sock, TTCP_MODE_TRANSMIT), (uint8_t*)(buf+5), len);
}
DATA_LED_OFF();
return (err==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR;
@ -726,7 +873,6 @@ int ack_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);
*buf=(ifStatus)?WL_CONNECTED:result;
return WIFI_SPI_ACK;
}
@ -744,7 +890,7 @@ cmd_spi_state_t get_reply_cb(char* recv, char* reply, void* ctx, uint16_t* count
if (ctx != NULL) {
reply[4] = (*(uint8_t*)ctx); //param
} else {
reply[4] = result; //param
reply[4] = (ifStatus)?WL_CONNECTED:result; //param
}
END_HEADER_REPLY(reply, 5, *count);
@ -784,6 +930,51 @@ cmd_spi_state_t get_reply_ipaddr_cb(char* recv, char* reply, void* ctx, uint16_t
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)
{
_hostIpAddr.addr = (ipaddr)?ipaddr->addr:0xffffffff;
@ -1071,11 +1262,11 @@ cmd_spi_state_t get_state_tcp_cmd_cb(char* recv, char* reply, void* ctx, uint16_
uint8_t _state = CLOSED;
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);
END_HEADER_REPLY(reply, 5, *count);
INFO_SPI("state:%d\n", _state);
INFO_SPI_POLL("state:%d\n", _state);
return SPI_CMD_DONE;
}
@ -1087,33 +1278,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);
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)
{
// get if we are in server or Transmit mode (0)
if (getModeTcp(p) == TTCP_MODE_TRANSMIT)
{
_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);
}
_state = getStateTcp(p, 1);
}else{
WARN_VER("TTCP not found for sock:%d\n", _sock);
}
}
PUT_DATA_BYTE(_state, reply, 3);
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;
}
@ -1123,15 +1301,15 @@ cmd_spi_state_t avail_data_tcp_cmd_cb(char* recv, char* reply, void* ctx, uint16
CHECK_ARD_NETIF(recv, reply, count);
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))
{
dataAvail = isAvailTcpDataByte((uint8_t)recv[4]) ? 1 : 0;
dataAvail = getAvailTcpDataByte((uint8_t)recv[4]);
}
PUT_DATA_BYTE(dataAvail, reply, 3);
END_HEADER_REPLY(reply, 5, *count);
PUT_DATA_INT_NO(dataAvail, reply, 3);
END_HEADER_REPLY(reply, 6, *count);
INFO_SPI("dataAvail:%d\n", dataAvail);
INFO_SPI_POLL("dataAvail:%d\n", dataAvail);
return SPI_CMD_DONE;
}
@ -1155,7 +1333,7 @@ cmd_spi_state_t data_sent_tcp_cmd_cb(char* recv, char* reply, void* ctx, uint16_
uint8_t dataSent = 0;
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);
END_HEADER_REPLY(reply, 5, *count);
@ -1199,14 +1377,15 @@ cmd_spi_state_t get_databuf_tcp_cmd_cb(char* recv, char* reply, void* ctx, uint1
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);
PUT_BUFDATA_INT(data, len, reply, 3);
END_HEADER_REPLY(reply, 3+len+2+1, *count);
freeTcpData((uint8_t)recv[4]);
END_HEADER_REPLY(reply, 3+len+2, *count);
freeTcpData((uint8_t)sock);
}else{
CREATE_HEADER_REPLY(reply, recv, PARAM_NUMS_0);
END_HEADER_REPLY(reply, 3, *count);
@ -1264,16 +1443,17 @@ int sendReply(int cmdIdx, char* recv, char* reply, void* resultCmd)
AVAIL_FOR_SPI();
_result = write_stream(ARD_SPI, &reply[0], _count);
#ifdef _SPI_STATS_
if ( result != SPI_OK)
if ( _result != SPI_OK)
{
statSpi.lastCmd = cmd_spi_list[cmdIdx].cmd_id;
}
#endif
BUSY_FOR_SPI();
//unsigned char status = spi_getStatus(ARD_SPI);
//INFO_SPI("Status after write: 0x%x\n",status);
IF_SPI_DUMP(printk("==>"));
DUMP_SPI(recv, count);
IF_SPI_DUMP(printk("<=="));
DUMP_SPI(reply, _count);
replyCount = _count;
return _result;
}
@ -1282,21 +1462,22 @@ unsigned char* getStartCmdSeq(unsigned char* _recv, int len, int *offset)
{
int i = 0;
*offset = 0;
DEB_PIN_UP();
//DEB_PIN_UP();
for (; i<len; ++i)
{
if (_recv[i]==START_CMD)
{
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]);
}
*offset = i;
return &_recv[i];
}
}
DEB_PIN_DN();
//DEB_PIN_DN();
WARN("%d] Disall. %d\n", cmdCorr, i);
return NULL;
@ -1330,12 +1511,12 @@ int call_reply_cb(char* recv, char* reply) {
{
tSpiMsg* spiMsg = (tSpiMsg*) recv;
_result = cmd_spi_list[i].cb(spiMsg->nParam,
(char*) &(spiMsg->params[0]), NULL);
(char*) &(spiMsg->params[0]), cmd_spi_list[i].ctx);
}else
{
tSpiMsgData* spiMsg = (tSpiMsgData*) recv;
_result = cmd_spi_list[i].cb(spiMsg->nParam,
(char*) &(spiMsg->params[0]), NULL);
(char*) &(spiMsg->params[0]), cmd_spi_list[i].ctx);
}
if (_result != WIFI_SPI_ACK)
@ -1380,10 +1561,12 @@ int call_reply_cb(char* recv, char* reply) {
return REPLY_NO_ERR;
}
void init_spi_cmds() {
void init_spi_cmds(void* ctx) {
spi_add_cmd(SET_NET_CMD, set_net_cmd_cb, ack_reply_cb, NULL, CMD_SET_FLAG);
spi_add_cmd(SET_PASSPHRASE_CMD, set_passphrase_cmd_cb, ack_reply_cb, NULL, CMD_SET_FLAG);
spi_add_cmd(SET_KEY_CMD, set_key_cmd_cb, ack_reply_cb, NULL, CMD_SET_FLAG);
spi_add_cmd(SET_IP_CONFIG_CMD, set_ip_config_cmd_cb, ack_reply_cb, ctx, CMD_SET_FLAG);
spi_add_cmd(SET_DNS_CONFIG_CMD, set_dns_config_cmd_cb, ack_reply_cb, ctx, CMD_SET_FLAG);
spi_add_cmd(GET_CONN_STATUS_CMD, get_result_cmd_cb, get_reply_cb, NULL, CMD_GET_FLAG);
spi_add_cmd(GET_IPADDR_CMD, ack_cmd_cb, get_reply_ipaddr_cb, NULL, CMD_GET_FLAG);
spi_add_cmd(GET_MACADDR_CMD, ack_cmd_cb, get_reply_mac_cb, NULL, CMD_GET_FLAG);
@ -1411,6 +1594,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_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(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 +1638,9 @@ bool checkMsgFormat(uint8_t* _recv, int len, int* offset)
unsigned char* recv = getStartCmdSeq(_recv, len, offset);
if ((recv == NULL)||(recv!=_recv))
{
if ((enableDebug & INFO_WARN_FLAG)&&(len < 20)) //TODO stamp only short messages wrong
dump((char*)_recv, len);
DEB_PIN_TRIGGER();
IF_WARN_VER(DUMP((char*)_recv, len));
STATSPI_DISALIGN_ERROR();
@ -1468,7 +1655,7 @@ bool checkMsgFormat(uint8_t* _recv, int len, int* offset)
paramLenTot = checkMsgParam8(recv);
else
{
DUMP_SPI_DATA(_recv, len);
DUMP_SPI(_recv, len);
paramLenTot = checkMsgParam16(recv);
}
@ -1512,8 +1699,8 @@ void spi_poll(struct netif* netif) {
int err = call_reply_cb(buf, &reply[0]);
if (err != REPLY_NO_ERR)
{
DUMP_SPI_DATA(buf, count);
DUMP_SPI_DATA(reply, replyCount);
DUMP_SPI(buf, count);
DUMP_SPI(reply, replyCount);
}
receivedChars = 0;
count = 0;
@ -1523,8 +1710,7 @@ void spi_poll(struct netif* netif) {
{
sendError();
WARN("%d] Check format msg failed!\n", cmdCorr);
if (enableDebug & INFO_WARN_FLAG)
dump((char*)_receiveBuffer, receivedChars);
IF_WARN_VER(dump((char*)_receiveBuffer, receivedChars));
state = SPI_CMD_IDLE;
count=0;
//mark as buffer used
@ -1552,11 +1738,7 @@ inline int spi_slaveReceiveInt(volatile avr32_spi_t *spi)
int index = 0;
int err = SPI_OK;
state = SPI_CMD_INPUT;
if (_receiveBuffer[0] != 0)
{
STATSPI_OVERRIDE_ERROR();
}
bool endOfFrame = false;
do {
unsigned int timeout = SPI_TIMEOUT;
@ -1569,8 +1751,20 @@ inline int spi_slaveReceiveInt(volatile avr32_spi_t *spi)
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) {
_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;
++receivedChars;
}else{
@ -1585,7 +1779,35 @@ inline int spi_slaveReceiveInt(volatile avr32_spi_t *spi)
err = SPI_ERROR_OVERRUN_AND_MODE_FAULT;
break;
}
} while (_receiveBuffer[index - 1] != END_CMD);
if (_receiveBuffer[index - 1] == END_CMD)
{
int8_t numParams = 0;
int idx = PARAM_LEN_POS+1;
bool islen16bit = ((_receiveBuffer[CMD_POS] & DATA_FLAG) == DATA_FLAG);
if (index >= idx)
{
numParams = _receiveBuffer[PARAM_LEN_POS];
while (((index-1) > idx)&&(numParams>0))
{
if (islen16bit)
idx += (_receiveBuffer[idx]<<8) + _receiveBuffer[idx+1]+2;
else
idx += _receiveBuffer[idx]+1;
--numParams;
}
if (((index-1) == idx) && (numParams == 0))
endOfFrame = true;
}
if (!endOfFrame){
WARN("Wrong termination index:%d nParam:%d idx:%d 16bit:%d\n", index, numParams, idx, islen16bit);
#ifdef _DEBUG_
dump((char*)_receiveBuffer, receivedChars);
while(0);
#endif
}
}
} while (!endOfFrame);
return err;
}
@ -1597,8 +1819,7 @@ __interrupt
static void spi_int_handler(void)
{
volatile avr32_spi_t *spi = ARD_SPI;
//DEB_PIN_DN();
//AVAIL_FOR_SPI();
DEB_PIN_DN(2);
DISABLE_SPI_INT();
if ((spi->sr & AVR32_SPI_SR_RDRF_MASK) != 0)
@ -1610,12 +1831,10 @@ static void spi_int_handler(void)
startReply=true;
++cmdCorr;
//maintain disable interrupt to send the reply command
//DEB_PIN_UP();
return;
}
}
ENABLE_SPI_INT();
//DEB_PIN_UP();
}
inline spi_status_t spi_read8(volatile avr32_spi_t *spi, unsigned char *data)
@ -1682,7 +1901,7 @@ void initExtInt()
Enable_global_interrupt();
}
int initSpi()
int initSpi(void* ctx)
{
volatile avr32_spi_t *spi = &AVR32_SPI0;
gpio_map_t spi_piomap = { \
@ -1734,7 +1953,7 @@ int initSpi()
#ifdef _SPI_STATS_
initStatSpi();
#endif
init_spi_cmds();
init_spi_cmds(ctx);
memset(_receiveBuffer, 0, sizeof(_receiveBuffer));
memset(buf, 0, sizeof(buf));

View File

@ -37,19 +37,27 @@ typedef enum {
CMD_IMM_SET_FLAG = 0x04,
}cmd_flags;
typedef enum eProtMode {TCP_MODE, UDP_MODE}tProtMode;
#define TIMEOUT_SPI 200
#define SPI_ALIGN_ERROR 0xF0
#define SPI_OVERRIDE_ERROR 0xF1
#define SPI_TIMEOUT_ERROR 0xF2
#define DUMMY_DATA 0xFF
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 struct eRemoteClient{
uint32_t ipaddr;
uint16_t port;
}tRemoteClient;
void set_result_cmd(int err) ;
void set_result(wl_status_t _status);
int initSpi(void);
int initSpi(void* ctx);
void initExtInt();
@ -61,10 +69,20 @@ void showTTCPstatus();
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_ */

File diff suppressed because it is too large Load Diff

View File

@ -15,6 +15,41 @@ typedef void (ard_tcp_done_cb_t)(void *opaque, int result);
#define TTCP_MODE_TRANSMIT 0
#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 0xff
#define GET_FIRST_CLIENT_TCP(TTCP) getFirstClient(TTCP, 1)
#define GET_FIRST_CLIENT_TCP_NV(TTCP) getFirstClient(TTCP, 0)
#define GET_CLIENT_TCP(TTCP,ID) (((TTCP!=NULL)&&(ID>=0)&&(ID<MAX_CLIENT_ACCEPTED))?TTCP->tpcb[ID] : NULL)
#define GET_CLIENT_ID(TTCP, PCB) uint8_t id = NO_VALID_ID; do { \
id = getNewClientConnId(TTCP, PCB); \
if (id == NO_VALID_ID) return ERR_MEM; \
}while(0);
#define GET_IDX_CONN(I) ((I+currConnId)<MAX_CLIENT_ACCEPTED ? (I+currConnId) : (I+currConnId-MAX_CLIENT_ACCEPTED))
#define GET_CURR_PCB(TTCP) GET_CLIENT_TCP(TTCP,getCurrClientConnId())
#define FREE_PAYLOAD(TTCP) do { \
int id = getCurrClientConnId(); \
INFO_TCP("Freeing payload %d-%p\n", id, TTCP->payload[id]); \
if (TTCP->payload[id]) { \
free(TTCP->payload[id]); \
TTCP->payload[id] = NULL; } \
}while(0);
#define FREE_PAYLOAD_ID(TTCP,ID) do { \
INFO_TCP("Freeing payload %d-%p\n", ID, TTCP->payload[ID]); \
if (TTCP->payload[ID]) { \
free(TTCP->payload[ID]); \
TTCP->payload[ID] = NULL; } \
}while(0);
typedef struct ttcp {
@ -26,12 +61,12 @@ typedef struct ttcp {
int verbose; /* -v */
int udp; /* -u */
uint8_t sock;
uint8_t buff_sent;
uint8_t buff_sent[MAX_CLIENT_ACCEPTED];
/* common */
uint16_t print_cnt;
uint32_t start_time;
uint32_t left;
uint32_t left[MAX_CLIENT_ACCEPTED];
uint32_t recved;
ard_tcp_done_cb_t* done_cb;
void* opaque;
@ -39,9 +74,11 @@ typedef struct ttcp {
uint32_t tid;
/* TCP specific */
struct tcp_pcb* tpcb;
struct tcp_pcb* tpcb[MAX_CLIENT_ACCEPTED];
struct tcp_pcb* lpcb;
char* payload;
char* payload[MAX_CLIENT_ACCEPTED];
uint8_t tcp_poll_retries[MAX_CLIENT_ACCEPTED];
bool pending_close[MAX_CLIENT_ACCEPTED];
/* UDP specific */
int udp_started;
@ -62,10 +99,26 @@ uint8_t getModeTcp(void* p);
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 );
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);
int8_t getCurrClientConnId();
struct tcp_pcb * getFirstClient(struct ttcp* _ttcp, bool verbose);
void closeConnections();
#endif

View File

@ -4,38 +4,144 @@
* Created on: Jul 4, 2010
* Author: mlf by Metodo2 srl
*/
#undef _APP_DEBUG_
//#define _APP_DEBUG_
#include "lwip/pbuf.h"
#include "wifi_spi.h"
#include "ard_utils.h"
#include "debug.h"
#include "ard_spi.h"
#include "ard_tcp.h"
#define MAX_PBUF_STORED 30
tData pBufStore[MAX_PBUF_STORED][MAX_SOCK_NUM];
unsigned char headBuf = 0;
unsigned char tailBuf = 0;
unsigned char headBuf[MAX_SOCK_NUM] = {0};
unsigned char tailBuf[MAX_SOCK_NUM] = {0};
#define IS_BUF_AVAIL() (tailBuf!=headBuf)
#define IS_BUF_EMPTY() ((tailBuf == 0) && (headBuf == 0))
#define IS_BUF_AVAIL(x) (tailBuf[x] != headBuf[x])
#define IS_BUF_EMPTY(x) ((tailBuf[x] == 0) && (headBuf[x] == 0))
void init_pBuf()
{
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;
len -= pBufStore[index][sock].idx;
INFO_UTIL_VER(" [%d]: len:%d idx:%d tot:%d\n", sock, pBufStore[index][sock].len, pBufStore[index][sock].idx, 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)
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
freetDataIdx(headBuf, sock);
freetDataIdx(headBuf[sock], sock);
}
u8_t* p = (u8_t*)calloc(q->tot_len,sizeof(u8_t));
@ -44,32 +150,55 @@ 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);
free(p);
p = NULL;
return;
return p;
}
pBufStore[headBuf][sock].data = p;
pBufStore[headBuf][sock].len = q->tot_len;
pBufStore[headBuf][sock].idx = 0;
pBufStore[headBuf][sock].pcb = _pcb;
headBuf++;
pBufStore[headBuf[sock]][sock].data = p;
pBufStore[headBuf[sock]][sock].len = q->tot_len;
pBufStore[headBuf[sock]][sock].idx = 0;
pBufStore[headBuf[sock]][sock].pcb = _pcb;
headBuf[sock]++;
if (headBuf == MAX_PBUF_STORED)
headBuf = 0;
if (headBuf == tailBuf)
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);
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, 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("%d] pcb:%p Buf: %p Len:%d\n", pBufStore[index][sock].idx, pBufStore[index][sock].pcb,
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)
{
if (IS_BUF_EMPTY())
if (IS_BUF_EMPTY(sock))
return NULL;
if (IS_BUF_AVAIL())
if (IS_BUF_AVAIL(sock))
{
tData* p = &(pBufStore[tailBuf][sock]);
INFO_UTIL_VER("%p [%d,%d]\n", p, headBuf, tailBuf);
tData* p = &(pBufStore[tailBuf[sock]][sock]);
INFO_UTIL_VER("%p [%d,%d]\n", p, headBuf[sock], tailBuf[sock]);
return p;
}
return NULL;
@ -83,14 +212,14 @@ void freetData(void * buf, uint8_t sock)
return;
}
pBufStore[tailBuf][sock].data = NULL;
pBufStore[tailBuf][sock].len = 0;
pBufStore[tailBuf][sock].idx = 0;
pBufStore[tailBuf][sock].pcb = 0;
pBufStore[tailBuf[sock]][sock].data = NULL;
pBufStore[tailBuf[sock]][sock].len = 0;
pBufStore[tailBuf[sock]][sock].idx = 0;
pBufStore[tailBuf[sock]][sock].pcb = 0;
if (++tailBuf == MAX_PBUF_STORED)
tailBuf = 0;
INFO_UTIL("%p [%d,%d]\n", buf, headBuf, tailBuf);
if (++tailBuf[sock] == MAX_PBUF_STORED)
tailBuf[sock] = 0;
INFO_UTIL("%p [%d,%d]\n", buf, headBuf[sock], tailBuf[sock]);
free(buf);
}
@ -117,6 +246,16 @@ void freetDataIdx(uint8_t idxBuf, uint8_t sock)
void ack_recved(void* pcb, int len);
void ackAndFreeData(void* pcb, int len, uint8_t sock, uint8_t* data)
{
INFO_TCP("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)
{
tData* p = get_pBuf(sock);
@ -126,11 +265,10 @@ bool isAvailTcpDataByte(uint8_t sock)
INFO_UTIL_VER("check:%d %d %p\n",p->idx, p->len, p->data);
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",
p->data, IS_BUF_AVAIL(), tailBuf, headBuf);
return (IS_BUF_AVAIL());
p->data, IS_BUF_AVAIL(sock), tailBuf[sock], headBuf[sock]);
ackAndFreeData(p->pcb, p->len, sock, p->data);
return (IS_BUF_AVAIL(sock));
}else{
return true;
}
@ -138,6 +276,12 @@ bool isAvailTcpDataByte(uint8_t sock)
return false;
}
uint16_t getAvailTcpDataByte(uint8_t sock)
{
uint16_t len = calcMergeLen(sock);
INFO_UTIL_VER("Availabled data: %d\n", len);
return len;
}
bool getTcpDataByte(uint8_t sock, uint8_t* payload, uint8_t peek)
@ -155,12 +299,11 @@ bool getTcpDataByte(uint8_t sock, uint8_t* payload, uint8_t peek)
else
*payload = buf[p->idx++];
INFO_UTIL_VER("get:%d %p %d\n",p->idx, p->data, *payload);
if (p->idx == p->len)
ackAndFreeData(p->pcb, p->len, sock, p->data);
return true;
}else{
//dealloc current buffer
INFO_UTIL("Free %p\n", p->data);
freetData(p->data, sock);
ack_recved(p->pcb, p->len);
ackAndFreeData(p->pcb, p->len, sock, p->data);
}
}
return false;
@ -185,12 +328,20 @@ bool freeTcpData(uint8_t sock)
p = get_pBuf(sock);
if (p != NULL)
{
freetData(p->data, sock);
ack_recved(p->pcb, p->len);
ackAndFreeData(p->pcb, p->len, sock, p->data);
return true;
}
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_TL LED2_TL
#define DEB_PIN_UP() gpio_set_gpio_pin(DEB_PIN_GPIO)
#define DEB_PIN_DN() gpio_clr_gpio_pin(DEB_PIN_GPIO)
#define DEB_PIN_ENA() gpio_enable_gpio_pin(DEB_PIN_GPIO);
#define DEB_PIN_UP(X) gpio_set_gpio_pin(DEB##X##_PIN_GPIO)
#define DEB_PIN_DN(X) gpio_clr_gpio_pin(DEB##X##_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
#define SIGN0_UP()
@ -51,9 +54,11 @@
#define SIGN2_DN()
#define SIGN2_TL()
#define DEB_PIN_UP()
#define DEB_PIN_DN()
#define DEB_PIN_ENA()
#define DEB_PIN_UP(X)
#define DEB_PIN_DN(X)
#define DEB_PIN_ENA(X)
#define DEB_PIN_TOGGLE(X)
#define DEB_PIN_TRIGGER(X)
//#define TOGGLE_SIG0
#endif
@ -119,8 +124,16 @@
#define PUT_DATA_INT(INT, BYTE, IDX) { \
uint16_t _int = INT; \
BYTE[IDX] = (uint8_t)((_int & 0xff00)>>8); \
uint16_t _int = INT; \
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); \
}
@ -201,7 +214,7 @@
#define STATSPI_TIMEOUT_ERROR() \
statSpi.timeoutIntErr++; \
statSpi.rxErr++; \
statSpi.lastError = err; \
statSpi.lastError = SPI_TIMEOUT_ERROR; \
statSpi.status = spi_getStatus(ARD_SPI);
#define STATSPI_DISALIGN_ERROR() \
@ -228,11 +241,16 @@
#define STATSPI_OVERRIDE_ERROR()
#endif
#define DUMP_TCP_STATE(TTCP) \
INFO_TCP("ttcp:%p tpcb:%p state:%d lpcb:%p state:%d\n", \
TTCP, TTCP->tpcb, (TTCP->tpcb)?TTCP->tpcb->state:0, \
TTCP->lpcb, (TTCP->lpcb)?TTCP->lpcb->state:0);
#define DUMP_TCP_STATE(TTCP) do {\
int i = getCurrClientConnId(); \
INFO_TCP("%d] ttcp:%p tpcb:%p state:%d lpcb:%p state:%d left:%d sent:%d\n", \
i, TTCP, TTCP->tpcb[i], (TTCP->tpcb[i])?TTCP->tpcb[i]->state:0, \
TTCP->lpcb, (TTCP->lpcb)?TTCP->lpcb->state:0, \
(TTCP->tpcb[i])?TTCP->left[i]:0, (TTCP->tpcb[i])?TTCP->buff_sent[i]:0); \
} while(0);
#define Mode2Str(_Mode) ((_Mode==0)?"TRANSMIT":"RECEIVE")
#define ProtMode2Str(_protMode) ((_protMode==0)?"TCP":"UDP")
typedef struct sData
{
@ -246,7 +264,13 @@ struct 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);
@ -260,8 +284,12 @@ bool getTcpData(uint8_t sock, void** payload, uint16_t* len);
bool getTcpDataByte(uint8_t sock, uint8_t* payload, uint8_t peek);
uint16_t getAvailTcpDataByte(uint8_t sock);
bool isAvailTcpDataByte(uint8_t sock);
uint8_t freeTcpData(uint8_t sock);
void freeAllTcpData(uint8_t sock);
#endif /* ARD_UTILS_H_ */

View File

@ -43,24 +43,11 @@
#include "lwip/dns.h"
#include "debug.h"
#include "ard_spi.h"
#include "ard_tcp.h"
#include "ard_utils.h"
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_
/**
@ -195,23 +182,26 @@ cmd_ibss(int argc, char* argv[], void* ctx)
cmd_state_t
cmd_set_ip(int argc, char* argv[], void* ctx)
{
struct net_cfg *ncfg = ctx;
struct ctx_server *hs = ctx;
struct net_cfg *ncfg = &(hs->net_cfg);
struct ip_addr lwip_addr;
struct netif *nif = ncfg->netif;
if (argc == 2 &&
(strncmp(argv[1], "none", 4) == 0)) {
ncfg->dhcp_enabled = 1;
ncfg->dhcp_enabled = DYNAMIC_IP_CONFIG;
return CMD_DONE;
}
else if (argc != 4 ) {
printk("usage: ip <ip> <netmask> <gateway-ip>\n");
printk(" or : ip none (to enable DHCP)\n");
printk("usage: ipconfig <ip> <netmask> <gateway-ip>\n");
printk(" or : ipconfig none (to enable DHCP)\n");
return CMD_DONE;
}
/* IP address */
lwip_addr = str2ip(argv[1]);
INFO_SPI("nif:%p lwip_addr=0x%x\n", nif, lwip_addr.addr);
netif_set_ipaddr(nif, &lwip_addr);
/* Netmask */
lwip_addr = str2ip(argv[2]);
@ -220,7 +210,7 @@ cmd_set_ip(int argc, char* argv[], void* ctx)
lwip_addr = str2ip(argv[3]);
netif_set_gw(nif, &lwip_addr);
/* Disable DHCP */
ncfg->dhcp_enabled = 0;
ncfg->dhcp_enabled = STATIC_IP_CONFIG;
return CMD_DONE;
}
@ -373,14 +363,15 @@ cmd_setDnsServer(int argc, char* argv[], void* ctx)
*
*/
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 sock = 0;
int protMode = 0;
if (argc < 3) {
if (argc < 4) {
printk(usage);
return CMD_DONE;
}
@ -389,15 +380,50 @@ cmd_startTcpSrv(int argc, char* argv[], void* ctx)
port = atoi(argv[1]);
/* socket index */
sock = atoi(argv[2]);
/* Protocol Mode */
protMode = atoi(argv[3]);
printk("Start TCP server on port %d sock %d\n", port, sock);
if (start_server_tcp(port, sock) != -1)
printk("Start %s server on port %d sock %d\n", ProtMode2Str(protMode), port, sock);
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;
}
/**
*
*/
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
@ -432,11 +458,15 @@ cmd_status(int argc, char* argv[], void* ctx)
/* print ip address */
if (netif_is_up(netif_default))
printk("ip addr: %s\n", ip2str(netif_default->ip_addr));
{
printk("ip addr: %s - ", ip2str(netif_default->ip_addr));
printk("netmask: %s - ", ip2str(netif_default->netmask));
printk("gateway: %s\n", ip2str(netif_default->gw));
}
else
printk("ip interface is down\n");
printk("dhcp : ");
if (ncfg->dhcp_enabled) {
if (ncfg->dhcp_enabled == DYNAMIC_IP_CONFIG) {
printk("enabled\n");
}
else {
@ -445,8 +475,8 @@ cmd_status(int argc, char* argv[], void* ctx)
struct ip_addr addr1 = dns_getserver(0);
struct ip_addr addr2 = dns_getserver(1);
printk("==> DNS1: %s\n", ip2str(addr1), addr1);
printk("==> DNS2: %s\n", ip2str(addr2), addr2);
printk("DNS: %s - ", ip2str(addr1));
printk("%s\n", ip2str(addr2));
showTTCPstatus();
return CMD_DONE;
@ -595,16 +625,14 @@ cmd_debug(int argc, char* argv[], void* ctx)
if (argc == 2 && strcmp(argv[1], "off") == 0) {
printk("Debug OFF\n");
enableDebug = DEFAULT_INFO_FLAG;
verboseDebug = 0;
INIT_DEBUG_VARIABLES()
return CMD_DONE;
}else if (argc == 2 && strcmp(argv[1], "print") == 0) {
printk("Debug enabled: 0x%x\n", enableDebug);
printk("Verbose enabled: 0x%x\n", verboseDebug);
PRINT_DEBUG_VARIABLES()
return CMD_DONE;
}else if (argc == 2 && strcmp(argv[1], "on") == 0) {
printk("Debug ON\n");
enableDebug = 0xff;
TURNON_DEBUG_VARIABLES();
return CMD_DONE;
}
if (argc < 3) {
@ -613,23 +641,91 @@ cmd_debug(int argc, char* argv[], void* ctx)
}
level = atoi(argv[2]);
if (argc == 3 && strcmp(argv[1], "init") == 0) {
CHECK_ENA_DEBUG(level, INFO_INIT_FLAG);
CHECK_VERB_DEBUG(level, INFO_INIT_FLAG);
CHECK_DEBUG_LEVEL(level, INFO_INIT_FLAG);
}else if (argc == 3 && strcmp(argv[1], "spi") == 0) {
CHECK_ENA_DEBUG(level, INFO_SPI_FLAG);
CHECK_VERB_DEBUG(level, INFO_SPI_FLAG);
CHECK_DEBUG_LEVEL(level, INFO_SPI_FLAG);
}else if (argc == 3 && strcmp(argv[1], "tcp") == 0) {
CHECK_ENA_DEBUG(level, INFO_TCP_FLAG);
CHECK_VERB_DEBUG(level, INFO_TCP_FLAG);
CHECK_DEBUG_LEVEL(level, INFO_TCP_FLAG);
}else if (argc == 3 && strcmp(argv[1], "cm") == 0) {
CHECK_ENA_DEBUG(level, INFO_CM_FLAG);
CHECK_VERB_DEBUG(level, INFO_CM_FLAG);
CHECK_DEBUG_LEVEL(level, INFO_CM_FLAG);
}else if (argc == 3 && strcmp(argv[1], "util") == 0) {
CHECK_ENA_DEBUG(level, INFO_UTIL_FLAG);
CHECK_VERB_DEBUG(level, INFO_UTIL_FLAG);
CHECK_DEBUG_LEVEL(level, INFO_UTIL_FLAG);
}else if (argc == 3 && strcmp(argv[1], "warn") == 0) {
CHECK_ENA_DEBUG(level, INFO_WARN_FLAG);
CHECK_VERB_DEBUG(level, INFO_WARN_FLAG);
CHECK_DEBUG_LEVEL(level, INFO_WARN_FLAG);
}
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_gethostbyname(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
cmd_state_t cmd_ibss(int argc, char* argv[], void* ctx);
#endif

View File

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

View File

@ -18,92 +18,174 @@
#define INFO_SPI_FLAG 4
#define INFO_CM_FLAG 8
#define INFO_UTIL_FLAG 16
#define INFO_5 32
#define INFO_D (1<<0xD) // Debug
#define INFO_E (1<<0xE) // Error
#define INFO_WARN_FLAG (1<<0xF) // Warning
#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 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_
#define INFO_INIT(msg, args...) do { \
if (enableDebug & INFO_INIT_FLAG) printk("I-[%s] " msg , __func__ , ##args ); \
#define PRINT_DEBUG(msg, args...) do { \
printk("[%s] " msg , __func__ , ##args ); \
} while (0)
#define INFO_TCP(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)) \
#define INFO_DEBUG(msg, args...) do { \
printk("I-[%s] " msg , __func__ , ##args ); \
} while (0)
#define INFO_SPI(msg, args...) do { \
if (enableDebug & INFO_SPI_FLAG) printk("I-[%s] " msg , __func__ , ##args ); \
#define WARN_DEBUG(msg, args...) do { \
printk("W-[%s] " msg , __func__ , ##args ); \
} 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
#define INFO_INIT(msg, args...) 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);
do { }while(0);
#endif
#ifdef _APP_DEBUG_
#define INFO(msg, args...) do { \
printk("I-[%s] " msg , __func__ , ##args ); \
#define IF_DEBUG(X,Y) do { \
if (enableDebug & INFO_##X##_FLAG) \
Y; \
} while (0)
#else /* !defined(_DEBUG_) */
//#define INFO(msg, args...) do {} while (0)
#endif /* !defined(_DEBUG_) */
#define IF_DEBUG_VER(X,Y) do { \
if (verboseDebug & INFO_##X##_FLAG) \
Y; \
} while (0)
#if 1
#define WARN(msg, args...) do { \
if (enableDebug & INFO_WARN_FLAG) printk("W-[%s] " msg , __func__ , ##args ); \
} while (0)
#define IF_DEBUG_DUMP(X,Y) do { \
if (dumpDebug & INFO_##X##_FLAG) \
Y; \
} while (0)
#define IF_DEBUG_POLL(X,Y) do { \
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))
#if 0 // disable to reduce the size of binary
#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))
#else
#define WARN(msg, args...) do { } while (0)
#define INFO_INIT(msg, args...)
#define INFO_INIT_VER(msg, args...)
#endif
#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);
#ifdef _APP_DEBUG_
#define DUMP(BUF, COUNT) do { \
printk("[%s]\n", __func__); \
#define _DUMP(BUF, COUNT) do { \
printk("[%s]: ", __func__); \
dump((char*)BUF, COUNT); \
} while (0)
#ifdef _APP_DEBUG_
#define DUMP(BUF, COUNT) _DUMP(BUF, COUNT)
#else
#define DUMP(BUF, COUNT) do {} while (0)
#endif
#endif
#define DUMP_TCP(BUF, COUNT) do { \
if (verboseDebug & INFO_TCP_FLAG) { \
printk("[%s]\n", __func__); \
dump((char*)BUF, COUNT); \
}} while (0)
#define DUMP_TCP(BUF, COUNT) IF_TCP_DUMP(_DUMP(BUF, COUNT))
#define DUMP_SPI(BUF, COUNT) IF_SPI_DUMP(_DUMP(BUF, COUNT))
#define DUMP_SPI_CMD(BUF) do { \
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

@ -1,12 +1,21 @@
#ifndef _LWIP_SETUP_H
#define _LWIP_SETUP_H
#define INIT_IP_CONFIG 0xff
#define STATIC_IP_CONFIG 0
#define DYNAMIC_IP_CONFIG 1
struct net_cfg {
struct netif *netif; /* lwip network interface */
uint8_t dhcp_enabled;
uint8_t dhcp_running;
};
struct ctx_server {
struct net_cfg net_cfg;
uint8_t wl_init_complete;
};
/*! Start the IP stack.
* If cfg->netif must have been allocated and lwip_init()
* must have been called before this function is called

View File

@ -111,7 +111,7 @@
* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP connections.
* (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.

View File

@ -39,7 +39,7 @@
#include <lwip_setup.h>
/* FIRMWARE version */
const char* fwVersion = "1.0.0";
const char* fwVersion = "1.1.0";
#if BOARD == ARDUINO
#if !defined(DATAFLASH)
@ -78,25 +78,13 @@ void fw_download_cb(void* ctx, uint8_t** buf, uint32_t* len)
#endif
#endif
struct ctx_server {
struct net_cfg net_cfg;
uint8_t wl_init_complete;
};
bool ifStatus = false;
bool scanNetCompleted = false;
static bool initSpiComplete = false;
// variable used as enable flag for debug prints
#ifdef _DEBUG_
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
DEFINE_DEBUG_VARIABLES();
/**
*
@ -121,7 +109,7 @@ wl_cm_conn_cb(struct wl_network_t* net, void* ctx)
INFO_INIT("Connection cb...\n");
printk("link up, connected to \"%s\"\n", ssid2str(&net->ssid));
if ( hs->net_cfg.dhcp_enabled ) {
if ( hs->net_cfg.dhcp_enabled == DYNAMIC_IP_CONFIG ) {
INFO_INIT("Start DHCP...\n");
printk("requesting dhcp ... ");
int8_t result = dhcp_start(hs->net_cfg.netif);
@ -129,7 +117,7 @@ wl_cm_conn_cb(struct wl_network_t* net, void* ctx)
hs->net_cfg.dhcp_running = 1;
}
else {
netif_set_up(hs->net_cfg.netif);
netif_set_up(hs->net_cfg.netif);
}
INFO_INIT("Start DNS...\n");
@ -277,7 +265,7 @@ poll(struct ctx_server* hs)
#endif
}
void initShell()
void initShell(void* ctx)
{
/* initialize shell */
INFO_INIT("Shell init...\n");
@ -285,9 +273,10 @@ void initShell()
console_add_cmd("scan", cmd_scan, NULL);
console_add_cmd("connect", cmd_connect, NULL);
console_add_cmd("setkey", cmd_setkey, NULL);
console_add_cmd("status", cmd_status, NULL);
console_add_cmd("status", cmd_status, ctx);
console_add_cmd("debug", cmd_debug, NULL);
console_add_cmd("dumpBuf", cmd_dumpBuf, NULL);
console_add_cmd("ipconfig", cmd_set_ip, ctx);
#ifdef ADD_CMDS
console_add_cmd("powersave", cmd_power, NULL);
console_add_cmd("psconf", cmd_psconf, NULL);
@ -307,8 +296,11 @@ void initShell()
#ifdef _DNS_CMD_
console_add_cmd("getHost", cmd_gethostbyname, NULL);
console_add_cmd("setDNS", cmd_setDnsServer, NULL);
console_add_cmd("startTcpSrv", cmd_startTcpSrv, NULL);
#endif
console_add_cmd("startSrv", cmd_startSrv, NULL);
console_add_cmd("startCli", cmd_startCli, NULL);
console_add_cmd("sendUdp", cmd_sendUdpData, NULL);
}
/**
@ -321,12 +313,16 @@ wl_init_complete_cb(void* ctx)
struct ip_addr ipaddr, netmask, gw;
wl_err_t wl_status;
IP4_ADDR(&gw, 0,0,0,0);
IP4_ADDR(&ipaddr, 0,0,0,0);
IP4_ADDR(&netmask, 0,0,0,0);
/* default is dhcp enabled */
hs->net_cfg.dhcp_enabled = 1;
if (hs->net_cfg.dhcp_enabled == INIT_IP_CONFIG)
{
IP4_ADDR(&gw, 0,0,0,0);
IP4_ADDR(&ipaddr, 0,0,0,0);
IP4_ADDR(&netmask, 0,0,0,0);
/* default is dhcp enabled */
hs->net_cfg.dhcp_enabled = DYNAMIC_IP_CONFIG;
}
start_ip_stack(&hs->net_cfg,
ipaddr,
netmask,
@ -341,7 +337,7 @@ wl_init_complete_cb(void* ctx)
wl_scan();
if (initSpi()){
if (initSpi(hs)){
WARN("Spi not initialized\n");
}else
{
@ -359,9 +355,13 @@ void startup_init(void)
// if DEBUG enabled use DEB_PIN_GPIO for debug purposes
DEB_PIN_ENA();
DEB_PIN_ENA(2);
DEB_PIN_UP();
DEB_PIN_UP(2);
}
const char timestamp[] = __TIMESTAMP__;
/**
*
*/
@ -381,8 +381,6 @@ main(void)
tc_init();
initShell();
delay_init(FOSC0);
#ifdef _TEST_SPI_
@ -396,7 +394,7 @@ main(void)
}
#else
printk("Arduino Wifi Startup... [%s]\n", __TIMESTAMP__);
printk("Arduino Wifi Startup... [%s]\n", timestamp);
size_t size_ctx_server = sizeof(struct ctx_server);
hs = calloc(1, size_ctx_server);
@ -405,10 +403,11 @@ main(void)
size_t size_netif = sizeof(struct netif);
hs->net_cfg.netif = calloc(1, size_netif);
ASSERT(hs->net_cfg.netif, "out of memory");
hs->net_cfg.dhcp_enabled = INIT_IP_CONFIG;
INFO_INIT("hs:%p size:0x%x netif:%p size:0x%x\n", hs, size_ctx_server,
hs->net_cfg.netif, size_netif);
initShell(hs);
timer_init(NULL, NULL);
lwip_init();

View File

@ -24,12 +24,16 @@
#define START_CMD 0xE0
#define END_CMD 0xEE
#define ERR_CMD 0xEF
#define CMD_POS 1 // Position of Command OpCode on SPI stream
#define PARAM_LEN_POS 2 // Position of Param len on SPI stream
enum {
SET_NET_CMD = 0x10,
SET_PASSPHRASE_CMD = 0x11,
SET_KEY_CMD = 0x12,
TEST_CMD = 0x13,
SET_IP_CONFIG_CMD = 0x14,
SET_DNS_CONFIG_CMD = 0x15,
GET_CONN_STATUS_CMD = 0x20,
GET_IPADDR_CMD = 0x21,
@ -56,11 +60,14 @@ enum {
START_SCAN_NETWORKS = 0x36,
GET_FW_VERSION_CMD = 0x37,
GET_TEST_CMD = 0x38,
SEND_DATA_UDP_CMD = 0x39,
GET_REMOTE_DATA_CMD = 0x3A,
// All command with DATA_FLAG 0x40 send a 16bit Len
SEND_DATA_TCP_CMD = 0x44,
GET_DATABUF_TCP_CMD = 0x45,
INSERT_DATABUF_CMD = 0x46,
};
@ -150,3 +157,4 @@ typedef struct __attribute__((__packed__))
}tByteParam;
#endif
uint8_t param;

View File

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

File diff suppressed because it is too large Load Diff

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