HTTP SD Card File Server
Dependencies: SDFileSystem WIZnetInterface mbed
Fork of HTTP_SD_Server_K64F by
Prerequisite
This Program is the example how to show SD card file list with web-browser for WIZwiki-W7500.
To implement this function, you need a Platform board, network Interface board and SD card. Below are what we used.
- WIZwiki-W7500 from WIZnet (Platform board and Ethernet I/F board)
- SD card
Hardware Configuration
WIZwiki-W7500 Pin map

Software
SPI Initialization
main.cpp
SDFileSystem sd(PB_3, PB_2, PB_1, PB_0, "sd");
Refer to ....
- Wiki : /teams/WIZnet/code/HTTP_SDCard_File_Server_WIZwiki-W7500/wiki/HTTP_SDCard_File_Server_WIZwiki-W7500
- Korean Version : http://midnightcow.tistory.com/category/위즈네트/WIZwiki-W7500
muri.cpp
- Committer:
- gsteiert
- Date:
- 2013-09-07
- Revision:
- 0:28bc7ce77e20
- Child:
- 1:64f023138627
File content as of revision 0:28bc7ce77e20:
#include "mbed.h"
#include "muri.h"
I2C i2c(p28, p27);
void cmd_i2c_write(char* qry, char* data, char* resp)
{
int addr = 0;
int dlen = 0;
int dtmp = 0;
if (sscanf(qry, "?%2x", &addr) == 1) {
qry += 3;
while (sscanf(qry, "&%2x", &dtmp) == 1) {
data[dlen] = dtmp;
qry +=3;
dlen +=1;
}
} else {
dlen = -1;
}
if (dlen > 0 ) {
i2c.write(addr, data, dlen);
sprintf(resp,"200 %d\r\n", dlen);
} else {
if (dlen == 0) {
sprintf(resp,"204 No data to write: %s\r\n", qry);
} else {
sprintf(resp,"400 Invalid parameters: %s\r\n", qry);
}
}
}
void cmd_i2c_read(char* qry, char* data, char* resp)
{
int addr = 0;
int dlen = 0;
int dcnt = 0;
if (sscanf(qry, "?%2x", &addr) == 1) {
qry += 3;
if (sscanf(qry, "&%2x", &dlen) == 1) {
if (i2c.read(addr, data, dlen)!=0) {
dlen = -1;
sprintf(resp, "500 I2C read failed\r\n");
}
} else {
sprintf(resp, "400 Invalid data length: %s\r\n", qry);
}
} else {
dlen = -1;
sprintf(resp, "400 Invalid address: %s\r\n", qry);
}
if (dlen > 0) {
sprintf(resp,"200");
resp += 3;
for (dcnt = 0; dcnt < dlen; dcnt++) {
sprintf(resp," %02x", data[dcnt]);
resp +=3;
}
}
}
void cmd_i2c_addr_read(char* qry, char* data, char* resp)
{
int addr = 0;
int radd = 0;
int dlen = 0;
int dcnt = 0;
if (sscanf(qry, "?%2x", &addr) == 1) {
qry += 3;
if (sscanf(qry, "&%2x", &radd) == 1) {
qry += 3;
if (sscanf(qry, "&%2x", &dlen) == 1) {
data[0] = radd;
i2c.write(addr, data, 1, false);
if (i2c.read(addr, data, dlen)!=0) {
dlen = -1;
sprintf(resp, "500 I2C read failed\r\n");
}
} else {
sprintf(resp, "400 Invalid data length: %s\r\n", qry);
}
} else {
dlen = -1;
sprintf(resp, "400 Invalid register address: %s\r\n", qry);
}
} else {
dlen = -1;
sprintf(resp, "400 Invalid address: %s\r\n", qry);
}
if (dlen > 0) {
sprintf(resp,"200");
resp += 3;
for (dcnt = 0; dcnt < dlen; dcnt++) {
sprintf(resp," %02x", data[dcnt]);
resp +=3;
}
}
}
void muri(char* uri, char* data, char* resp)
{
// sprintf(resp, "501 %s", uri);
//}
//void get_cgi(char* uri, char* qry)
//{
char *qry;
printf("muri uri: %s\n", uri);
qry = strstr(uri, "?");
if (!strncmp(uri, "i2cw?", 5)) { // i2cW [addr] [data] [data] [data] ...
cmd_i2c_write(qry, data, resp);
} else if (!strncmp(uri, "i2cr?", 5)) { // i2cR [addr] [count]
cmd_i2c_read(qry, data, resp);
} else if (!strncmp(uri, "i2car?", 6)) { // i2cAR [addr] [radd] [count]
cmd_i2c_addr_read(qry, data, resp);
} else {
sprintf(resp, "501 %s", uri);
}
printf("muri resp: %s\n", resp);
}
