summaryrefslogtreecommitdiff
path: root/Libraries/WiShield/WiShield.cpp
blob: 4488a67e6d0078ad411b87b7260292b6c31836c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/******************************************************************************

  Filename:		WiShield.cpp
  Description:	WiShield library file for the WiShield 1.0

 ******************************************************************************

  TCP/IP stack and driver for the WiShield 1.0 wireless devices

  Copyright(c) 2009 Async Labs Inc. All rights reserved.

  This program is free software; you can redistribute it and/or modify it
  under the terms of version 2 of the GNU General Public License as
  published by the Free Software Foundation.

  This program is distributed in the hope that it will be useful, but WITHOUT
  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  more details.

  You should have received a copy of the GNU General Public License along with
  this program; if not, write to the Free Software Foundation, Inc., 59
  Temple Place - Suite 330, Boston, MA  02111-1307, USA.

  Contact Information:
  <asynclabs@asynclabs.com>

   Author               Date        Comment
  ---------------------------------------------------------------
   AsyncLabs			05/01/2009	Initial version
   AsyncLabs			05/29/2009	Adding support for new library

 *****************************************************************************/

extern "C" {
  #include "witypes.h"
  #include "global-conf.h"
  #include "network.h"
  #include "g2100.h"
  #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(int async)
{
	zg_init();

#ifdef USE_DIG0_INTR
	attachInterrupt(0, zg_isr, LOW);
#endif

#ifdef USE_DIG8_INTR
	// set digital pin 8 on Arduino
	// as ZG interrupt pin
	PCICR |= (1<<PCIE0);
	PCMSK0 |= (1<<PCINT0);
#endif

   if (async == 0)
   {
      while(zg_get_conn_state() != 1) {
         zg_drv_process();
      }

      stack_init();
   }
}

int WiShield::continueInit()
{
   if (zg_get_conn_state() != 1)
   {
      zg_drv_process();
      return 0;
   } else {
      stack_init();
      return 1;
   }
}

void WiShield::run()
{
	stack_process();
	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)
{
	zg_isr();
}

#endif

WiShield WiFi;