summaryrefslogtreecommitdiff
path: root/Libraries/WiShield
diff options
context:
space:
mode:
Diffstat (limited to 'Libraries/WiShield')
-rw-r--r--Libraries/WiShield/WiShield.cpp32
-rw-r--r--Libraries/WiShield/WiShield.h4
-rw-r--r--Libraries/WiShield/config.h11
-rw-r--r--Libraries/WiShield/g2100.c24
-rw-r--r--Libraries/WiShield/psock.c2
-rw-r--r--Libraries/WiShield/stack.c8
-rw-r--r--Libraries/WiShield/uip-conf.h2
-rw-r--r--Libraries/WiShield/uip-neighbor.c3
-rw-r--r--Libraries/WiShield/uip.c11
-rw-r--r--Libraries/WiShield/uip.h1
10 files changed, 68 insertions, 30 deletions
diff --git a/Libraries/WiShield/WiShield.cpp b/Libraries/WiShield/WiShield.cpp
index 2e61afa..4488a67 100644
--- a/Libraries/WiShield/WiShield.cpp
+++ b/Libraries/WiShield/WiShield.cpp
@@ -41,12 +41,13 @@ extern "C" {
#include "spi.h"
void stack_init(void);
void stack_process(void);
+ void stack_send_udp(void);
}
#include "WProgram.h"
#include "WiShield.h"
-void WiShield::init()
+void WiShield::init(int async)
{
zg_init();
@@ -61,11 +62,26 @@ void WiShield::init()
PCMSK0 |= (1<<PCINT0);
#endif
- while(zg_get_conn_state() != 1) {
- zg_drv_process();
- }
+ if (async == 0)
+ {
+ while(zg_get_conn_state() != 1) {
+ zg_drv_process();
+ }
- stack_init();
+ stack_init();
+ }
+}
+
+int WiShield::continueInit()
+{
+ if (zg_get_conn_state() != 1)
+ {
+ zg_drv_process();
+ return 0;
+ } else {
+ stack_init();
+ return 1;
+ }
}
void WiShield::run()
@@ -74,6 +90,12 @@ void WiShield::run()
zg_drv_process();
}
+void WiShield::sendUdp()
+{
+ stack_send_udp();
+ zg_drv_process();
+}
+
#if defined USE_DIG8_INTR && !defined APP_WISERVER
// PCINT0 interrupt vector
ISR(PCINT0_vect)
diff --git a/Libraries/WiShield/WiShield.h b/Libraries/WiShield/WiShield.h
index 85d6648..51e143b 100644
--- a/Libraries/WiShield/WiShield.h
+++ b/Libraries/WiShield/WiShield.h
@@ -44,8 +44,10 @@ extern "C" {
class WiShield {
public:
- void init();
+ void init(int async);
+ int continueInit();
void run();
+ void sendUdp();
};
extern WiShield WiFi;
diff --git a/Libraries/WiShield/config.h b/Libraries/WiShield/config.h
index 2897503..d3adab9 100644
--- a/Libraries/WiShield/config.h
+++ b/Libraries/WiShield/config.h
@@ -41,15 +41,14 @@
extern U8 local_ip[];
extern U8 gateway_ip[];
extern U8 subnet_mask[];
-extern const prog_char ssid[];
-extern U8 ssid_len;
-extern const prog_char security_passphrase[];
-extern U8 security_passphrase_len;
+
+extern void return_ssid(U8* ssid, U8* ssid_len);
+extern void return_passphrase(U8* passphare, U8* passsphrase_len);
+extern void return_wepkeys(U8* keys);
+
extern U8 security_type;
extern U8 wireless_mode;
-extern prog_uchar wep_keys[];
-
extern const prog_char webpage[];
extern const prog_char twitter[];
extern unsigned char mfg_id[4];
diff --git a/Libraries/WiShield/g2100.c b/Libraries/WiShield/g2100.c
index a721d87..e420f1c 100644
--- a/Libraries/WiShield/g2100.c
+++ b/Libraries/WiShield/g2100.c
@@ -77,9 +77,6 @@ void zg_init()
zg_interrupt2_reg();
zg_interrupt_reg(0xff, 0);
zg_interrupt_reg(0x80|0x40, 1);
-
- ssid_len = (U8)strlen_P(ssid);
- security_passphrase_len = (U8)strlen_P(security_passphrase);
}
void spi_transfer(volatile U8* buf, U16 len, U8 toggle_cs)
@@ -339,10 +336,10 @@ void zg_write_wep_key(U8* cmd_buf)
cmd->slot = 3; // WEP key slot
cmd->keyLen = 13; // Key length: 5 bytes (64-bit WEP); 13 bytes (128-bit WEP)
cmd->defID = 0; // Default key ID: Key 0, 1, 2, 3
- cmd->ssidLen = ssid_len;
memset(cmd->ssid, 0x00, 32);
- memcpy_P(cmd->ssid, ssid, ssid_len);
- memcpy_P(cmd->key, wep_keys, ZG_MAX_ENCRYPTION_KEYS * ZG_MAX_ENCRYPTION_KEY_SIZE);
+
+ return_ssid(cmd->ssid, &cmd->ssidLen);
+ return_wepkeys(cmd->key);
return;
}
@@ -352,13 +349,13 @@ static void zg_calc_psk_key(U8* cmd_buf)
zg_psk_calc_req_t* cmd = (zg_psk_calc_req_t*)cmd_buf;
cmd->configBits = 0;
- cmd->phraseLen = security_passphrase_len;
- cmd->ssidLen = ssid_len;
cmd->reserved = 0;
+
memset(cmd->ssid, 0x00, 32);
- memcpy_P(cmd->ssid, ssid, ssid_len);
memset(cmd->passPhrase, 0x00, 64);
- memcpy_P(cmd->passPhrase, security_passphrase, security_passphrase_len);
+
+ return_ssid(cmd->ssid, &cmd->ssidLen);
+ return_passphrase(cmd->passPhrase, &cmd->phraseLen);
return;
}
@@ -368,9 +365,9 @@ static void zg_write_psk_key(U8* cmd_buf)
zg_pmk_key_req_t* cmd = (zg_pmk_key_req_t*)cmd_buf;
cmd->slot = 0; // WPA/WPA2 PSK slot
- cmd->ssidLen = ssid_len;
memset(cmd->ssid, 0x00, 32);
- memcpy_P(cmd->ssid, ssid, cmd->ssidLen);
+ return_ssid(cmd->ssid, &cmd->ssidLen);
+
memcpy(cmd->keyData, wpa_psk_key, ZG_MAX_PMK_LEN);
return;
@@ -563,9 +560,8 @@ void zg_drv_process()
cmd->secType = security_type;
- cmd->ssidLen = ssid_len;
memset(cmd->ssid, 0, 32);
- memcpy_P(cmd->ssid, ssid, ssid_len);
+ return_ssid(cmd->ssid, &cmd->ssidLen);
// units of 100 milliseconds
cmd->sleepDuration = 0;
diff --git a/Libraries/WiShield/psock.c b/Libraries/WiShield/psock.c
index 731e8e0..0735fe7 100644
--- a/Libraries/WiShield/psock.c
+++ b/Libraries/WiShield/psock.c
@@ -308,7 +308,9 @@ PT_THREAD(psock_readbuf(register struct psock *psock))
do {
if(psock->readlen == 0) {
PT_WAIT_UNTIL(&psock->psockpt, psock_newdata(psock));
+#if 0
printf("Waited for newdata\n");
+#endif
psock->state = STATE_READ;
psock->readptr = (u8_t *)uip_appdata;
psock->readlen = uip_datalen();
diff --git a/Libraries/WiShield/stack.c b/Libraries/WiShield/stack.c
index 85675f5..e95ba25 100644
--- a/Libraries/WiShield/stack.c
+++ b/Libraries/WiShield/stack.c
@@ -159,7 +159,15 @@ void stack_process(void)
return;
}
+void stack_send_udp()
+{
+ uip_process(UIP_UDP_SEND_CONN);
+ uip_arp_out();
+ network_send();
+}
+
void uip_log(char *m)
{
+ // printf(m);
//TODO: Get debug information out here somehow, does anybody know a smart way to do that?
}
diff --git a/Libraries/WiShield/uip-conf.h b/Libraries/WiShield/uip-conf.h
index f35c895..6485416 100644
--- a/Libraries/WiShield/uip-conf.h
+++ b/Libraries/WiShield/uip-conf.h
@@ -135,7 +135,7 @@ typedef unsigned short uip_stats_t;
*
* \hideinitializer
*/
-#define UIP_CONF_UDP_CONNS 1
+#define UIP_CONF_UDP_CONNS 10
//Include app configuration
#include "apps-conf.h"
diff --git a/Libraries/WiShield/uip-neighbor.c b/Libraries/WiShield/uip-neighbor.c
index 739c03e..28f8956 100644
--- a/Libraries/WiShield/uip-neighbor.c
+++ b/Libraries/WiShield/uip-neighbor.c
@@ -87,10 +87,11 @@ uip_neighbor_add(uip_ipaddr_t ipaddr, struct uip_neighbor_addr *addr)
int i, oldest;
u8_t oldest_time;
+#if 0
printf("Adding neighbor with link address %02x:%02x:%02x:%02x:%02x:%02x\n",
addr->addr.addr[0], addr->addr.addr[1], addr->addr.addr[2], addr->addr.addr[3],
addr->addr.addr[4], addr->addr.addr[5]);
-
+#endif
/* Find the first unused entry or the oldest used entry. */
oldest_time = 0;
oldest = 0;
diff --git a/Libraries/WiShield/uip.c b/Libraries/WiShield/uip.c
index 6af0271..164bafe 100644
--- a/Libraries/WiShield/uip.c
+++ b/Libraries/WiShield/uip.c
@@ -32,7 +32,7 @@
*****************************************************************************/
-#define DEBUG_PRINTF(...) /*printf(__VA_ARGS__)*/
+#define DEBUG_PRINTF(...) /* printf(__VA_ARGS__) */
/**
* \defgroup uip The uIP TCP/IP stack
@@ -1149,7 +1149,8 @@ uip_process(u8_t flag)
udp_found:
if (uip_udp_conn->rport == 0) {
- uip_udp_conn->rport = UDPBUF->srcport;
+ uip_udp_conn->rport = UDPBUF->srcport;
+ uip_ipaddr_copy(uip_udp_conn->ripaddr, BUF->srcipaddr);
}
uip_conn = NULL;
uip_flags = UIP_NEWDATA;
@@ -1913,6 +1914,12 @@ htons(u16_t val)
{
return HTONS(val);
}
+
+void uip_udp_prep_buffer()
+{
+ uip_sappdata = uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN];
+}
+
/*---------------------------------------------------------------------------*/
void
uip_send(const void *data, int len)
diff --git a/Libraries/WiShield/uip.h b/Libraries/WiShield/uip.h
index 9f2d843..4912ff0 100644
--- a/Libraries/WiShield/uip.h
+++ b/Libraries/WiShield/uip.h
@@ -1627,6 +1627,7 @@ u16_t uip_tcpchksum(void);
*/
u16_t uip_udpchksum(void);
+void uip_udp_prep_buffer();
#endif /* __UIP_H__ */