diff options
Diffstat (limited to 'Libraries/WiShield')
| -rw-r--r-- | Libraries/WiShield/WiShield.cpp | 32 | ||||
| -rw-r--r-- | Libraries/WiShield/WiShield.h | 4 | ||||
| -rw-r--r-- | Libraries/WiShield/config.h | 11 | ||||
| -rw-r--r-- | Libraries/WiShield/g2100.c | 24 | ||||
| -rw-r--r-- | Libraries/WiShield/psock.c | 2 | ||||
| -rw-r--r-- | Libraries/WiShield/stack.c | 8 | ||||
| -rw-r--r-- | Libraries/WiShield/uip-conf.h | 2 | ||||
| -rw-r--r-- | Libraries/WiShield/uip-neighbor.c | 3 | ||||
| -rw-r--r-- | Libraries/WiShield/uip.c | 11 | ||||
| -rw-r--r-- | Libraries/WiShield/uip.h | 1 |
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__ */ |
