Skip to content

Commit d599b9e

Browse files
committed
2016.10.13.
0 parents  commit d599b9e

29 files changed

+6402
-0
lines changed

README.md

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
## PHPoC Shield
2+
PHPoC source codes to use [PHPoC (WiFi) Shield for Arduino](http://www.phpoc.com/phpoc_shield_for_arduino.php).
3+
4+
## Available Web Applications
5+
* Setup
6+
* Serial Monitor
7+
* Remote Control / Push
8+
* Remote Control / Slide
9+
10+
## References
11+
* [PHPoC Shield for Arduino](http://www.phpoc.com/support/manual/phpoc_shield_for_arduino/)
12+
* [PHPoC WiFi Shield for Arduino](http://www.phpoc.com/support/manual/phpoc_wifi_shield_for_arduino/)
13+
14+
PHPoC Shield 15

cmd.php

+148
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
<?php
2+
3+
define("ERR_OK", 0);
4+
define("ERR_CMD_WAIT", 10);
5+
define("ERR_CMD_UND", 11);
6+
define("ERR_CMD_ARG", 12);
7+
define("ERR_CMD_DATA", 13);
8+
define("ERR_EPIPE", 14);
9+
10+
define("TCP_ID_SSL", 0);
11+
define("TCP_ID_SSH", 1);
12+
define("TCP_ID_SMTP", 0);
13+
define("UDP_ID_DNS", 4);
14+
15+
function err2str($err)
16+
{
17+
switch($err)
18+
{
19+
case ERR_OK:
20+
return "";
21+
case ERR_CMD_UND:
22+
return "unknown command";
23+
case ERR_CMD_ARG:
24+
return "invalid argument";
25+
case ERR_CMD_DATA:
26+
return "invalid command data";
27+
case ERR_EPIPE:
28+
return "broken pipe";
29+
default:
30+
return "error $err";
31+
}
32+
}
33+
34+
function slave_write($err, $data = "")
35+
{
36+
global $spi_pid;
37+
38+
if($err)
39+
{
40+
$head32 = 0xa0000000; // data & NAK bit set, csum bit clear
41+
42+
if($err == ERR_CMD_WAIT)
43+
{
44+
$wait = (int)$data;
45+
if($wait < 1)
46+
$wait = 1;
47+
if($wait > 30)
48+
$wait = 30;
49+
50+
$data = sprintf("W%03u", $wait);
51+
//echo "cmd_wait: $wait\r\n";
52+
}
53+
else
54+
{
55+
$data = sprintf("E%03u%s", $err, err2str($err));
56+
echo "cmd_error: ", err2str($err), "\r\n";
57+
}
58+
}
59+
else
60+
$head32 = 0x80000000; // data bit set, csum bit clear
61+
62+
$head32 |= (strlen($data) << 16);
63+
$wbuf = int2bin($head32, 4, true) . $data;
64+
65+
return pid_write($spi_pid, $wbuf);
66+
}
67+
68+
function slave_rxlen_wait($rxlen, $wait_ms)
69+
{
70+
global $spi_pid;
71+
72+
if($rxlen && $wait_ms)
73+
{
74+
while(pid_ioctl($spi_pid, "get rxlen") < $rxlen)
75+
{
76+
usleep(1000);
77+
$wait_ms--;
78+
79+
if(!$wait_ms)
80+
{
81+
echo "slave_read: rxlen wait timeout\r\n";
82+
return 0;
83+
}
84+
}
85+
}
86+
87+
return pid_ioctl($spi_pid, "get rxlen");
88+
}
89+
90+
function slave_read(&$rbuf, $wait_ms, $is_cmd)
91+
{
92+
global $spi_pid;
93+
94+
if($wait_ms && !slave_rxlen_wait(4, $wait_ms))
95+
return 0;
96+
97+
if(pid_ioctl($spi_pid, "get rxlen") < 4)
98+
return 0;
99+
100+
pid_peek($spi_pid, $rbuf, 4);
101+
102+
$head32 = bin2int($rbuf, 0, 4, true);
103+
$len12 = ($head32 >> 16) & 0x0fff;
104+
105+
if(!$is_cmd && !($head32 & 0x80000000))
106+
{
107+
// skip reading data if command head is received when we read data.
108+
echo "slave_read: skip read data\r\n";
109+
return 0;
110+
}
111+
112+
pid_read($spi_pid, $rbuf, 4); // drop head
113+
114+
if($len12)
115+
{
116+
if($wait_ms && !slave_rxlen_wait($len12, $wait_ms))
117+
return 0;
118+
119+
pid_read($spi_pid, $rbuf, $len12);
120+
121+
if($is_cmd && ($head32 & 0x80000000))
122+
{
123+
// drop data if data head is received when we read command.
124+
echo "slave_read: drop data\r\n";
125+
$rbuf = "";
126+
return 0;
127+
}
128+
else
129+
return $len12;
130+
}
131+
else
132+
{
133+
$rbuf = "";
134+
return 0;
135+
}
136+
}
137+
138+
function slave_read_command(&$rbuf, $wait_ms)
139+
{
140+
return slave_read($rbuf, $wait_ms, true);
141+
}
142+
143+
function slave_read_data(&$rbuf, $wait_ms)
144+
{
145+
return slave_read($rbuf, $wait_ms, false);
146+
}
147+
148+
?>

cmd_dns.php

+98
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
<?php
2+
3+
$dns_setup_server = "";
4+
5+
function cmd_dns_server($cmd)
6+
{
7+
global $dns_setup_server;
8+
9+
if(count($cmd) < 3)
10+
return slave_write(ERR_CMD_ARG);
11+
12+
$addr = $cmd[2];
13+
14+
if(inet_pton($addr) === false)
15+
return slave_write(ERR_CMD_ARG);
16+
17+
$dns_setup_server = $addr;
18+
return slave_write(ERR_OK);
19+
}
20+
21+
function cmd_dns_query($cmd)
22+
{
23+
global $dns_setup_server;
24+
25+
if(count($cmd) < 4)
26+
return slave_write(ERR_CMD_ARG);
27+
28+
switch(strtoupper($cmd[2]))
29+
{
30+
case "A":
31+
$rr_type = RR_A;
32+
break;
33+
case "AAAA":
34+
$rr_type = RR_AAAA;
35+
break;
36+
default:
37+
return slave_write(ERR_CMD_ARG);
38+
}
39+
40+
$query_name = $cmd[3];
41+
42+
if(inet_pton($query_name) !== false)
43+
return slave_write(ERR_OK, $query_name);
44+
else
45+
{
46+
if(count($cmd) > 4)
47+
{
48+
$wait_ms = (int)$cmd[4];
49+
if(!$wait_ms)
50+
return slave_write(ERR_CMD_ARG);
51+
}
52+
else
53+
$wait_ms = 2000;
54+
55+
slave_write(ERR_CMD_WAIT, (string)($wait_ms / 1000 + 1));
56+
57+
if($rr_type == RR_A)
58+
{
59+
dns_setup(UDP_ID_DNS, $dns_setup_server, false);
60+
61+
$rr = dns_lookup($query_name, RR_A, $wait_ms);
62+
63+
if($rr == $query_name)
64+
return slave_write(ERR_OK, "0.0.0.0");
65+
else
66+
return slave_write(ERR_OK, $rr);
67+
}
68+
else
69+
{
70+
dns_setup(UDP_ID_DNS, $dns_setup_server, true);
71+
72+
$rr = dns_lookup($query_name, RR_AAAA, $wait_ms);
73+
74+
if($rr == $query_name)
75+
return slave_write(ERR_OK, "::0");
76+
else
77+
return slave_write(ERR_OK, $rr);
78+
}
79+
}
80+
}
81+
82+
function cmd_dns($cmd)
83+
{
84+
if(count($cmd) < 2)
85+
return slave_write(ERR_CMD_ARG);
86+
87+
switch($cmd[1])
88+
{
89+
case "server":
90+
return cmd_dns_server($cmd);
91+
case "query":
92+
return cmd_dns_query($cmd);
93+
default:
94+
return slave_write(ERR_CMD_ARG);
95+
}
96+
}
97+
98+
?>

0 commit comments

Comments
 (0)