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@0:28bc7ce77e20, 2013-09-07 (annotated)
- Committer:
- gsteiert
- Date:
- Sat Sep 07 04:43:57 2013 +0000
- Revision:
- 0:28bc7ce77e20
- Child:
- 1:64f023138627
Basic I2C functionality
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| gsteiert | 0:28bc7ce77e20 | 1 | #include "mbed.h" |
| gsteiert | 0:28bc7ce77e20 | 2 | #include "muri.h" |
| gsteiert | 0:28bc7ce77e20 | 3 | |
| gsteiert | 0:28bc7ce77e20 | 4 | I2C i2c(p28, p27); |
| gsteiert | 0:28bc7ce77e20 | 5 | |
| gsteiert | 0:28bc7ce77e20 | 6 | |
| gsteiert | 0:28bc7ce77e20 | 7 | void cmd_i2c_write(char* qry, char* data, char* resp) |
| gsteiert | 0:28bc7ce77e20 | 8 | { |
| gsteiert | 0:28bc7ce77e20 | 9 | int addr = 0; |
| gsteiert | 0:28bc7ce77e20 | 10 | int dlen = 0; |
| gsteiert | 0:28bc7ce77e20 | 11 | int dtmp = 0; |
| gsteiert | 0:28bc7ce77e20 | 12 | if (sscanf(qry, "?%2x", &addr) == 1) { |
| gsteiert | 0:28bc7ce77e20 | 13 | qry += 3; |
| gsteiert | 0:28bc7ce77e20 | 14 | while (sscanf(qry, "&%2x", &dtmp) == 1) { |
| gsteiert | 0:28bc7ce77e20 | 15 | data[dlen] = dtmp; |
| gsteiert | 0:28bc7ce77e20 | 16 | qry +=3; |
| gsteiert | 0:28bc7ce77e20 | 17 | dlen +=1; |
| gsteiert | 0:28bc7ce77e20 | 18 | } |
| gsteiert | 0:28bc7ce77e20 | 19 | } else { |
| gsteiert | 0:28bc7ce77e20 | 20 | dlen = -1; |
| gsteiert | 0:28bc7ce77e20 | 21 | } |
| gsteiert | 0:28bc7ce77e20 | 22 | if (dlen > 0 ) { |
| gsteiert | 0:28bc7ce77e20 | 23 | i2c.write(addr, data, dlen); |
| gsteiert | 0:28bc7ce77e20 | 24 | sprintf(resp,"200 %d\r\n", dlen); |
| gsteiert | 0:28bc7ce77e20 | 25 | } else { |
| gsteiert | 0:28bc7ce77e20 | 26 | if (dlen == 0) { |
| gsteiert | 0:28bc7ce77e20 | 27 | sprintf(resp,"204 No data to write: %s\r\n", qry); |
| gsteiert | 0:28bc7ce77e20 | 28 | } else { |
| gsteiert | 0:28bc7ce77e20 | 29 | sprintf(resp,"400 Invalid parameters: %s\r\n", qry); |
| gsteiert | 0:28bc7ce77e20 | 30 | |
| gsteiert | 0:28bc7ce77e20 | 31 | } |
| gsteiert | 0:28bc7ce77e20 | 32 | } |
| gsteiert | 0:28bc7ce77e20 | 33 | } |
| gsteiert | 0:28bc7ce77e20 | 34 | |
| gsteiert | 0:28bc7ce77e20 | 35 | void cmd_i2c_read(char* qry, char* data, char* resp) |
| gsteiert | 0:28bc7ce77e20 | 36 | { |
| gsteiert | 0:28bc7ce77e20 | 37 | int addr = 0; |
| gsteiert | 0:28bc7ce77e20 | 38 | int dlen = 0; |
| gsteiert | 0:28bc7ce77e20 | 39 | int dcnt = 0; |
| gsteiert | 0:28bc7ce77e20 | 40 | if (sscanf(qry, "?%2x", &addr) == 1) { |
| gsteiert | 0:28bc7ce77e20 | 41 | qry += 3; |
| gsteiert | 0:28bc7ce77e20 | 42 | if (sscanf(qry, "&%2x", &dlen) == 1) { |
| gsteiert | 0:28bc7ce77e20 | 43 | if (i2c.read(addr, data, dlen)!=0) { |
| gsteiert | 0:28bc7ce77e20 | 44 | dlen = -1; |
| gsteiert | 0:28bc7ce77e20 | 45 | sprintf(resp, "500 I2C read failed\r\n"); |
| gsteiert | 0:28bc7ce77e20 | 46 | } |
| gsteiert | 0:28bc7ce77e20 | 47 | } else { |
| gsteiert | 0:28bc7ce77e20 | 48 | sprintf(resp, "400 Invalid data length: %s\r\n", qry); |
| gsteiert | 0:28bc7ce77e20 | 49 | } |
| gsteiert | 0:28bc7ce77e20 | 50 | } else { |
| gsteiert | 0:28bc7ce77e20 | 51 | dlen = -1; |
| gsteiert | 0:28bc7ce77e20 | 52 | sprintf(resp, "400 Invalid address: %s\r\n", qry); |
| gsteiert | 0:28bc7ce77e20 | 53 | } |
| gsteiert | 0:28bc7ce77e20 | 54 | if (dlen > 0) { |
| gsteiert | 0:28bc7ce77e20 | 55 | sprintf(resp,"200"); |
| gsteiert | 0:28bc7ce77e20 | 56 | resp += 3; |
| gsteiert | 0:28bc7ce77e20 | 57 | for (dcnt = 0; dcnt < dlen; dcnt++) { |
| gsteiert | 0:28bc7ce77e20 | 58 | sprintf(resp," %02x", data[dcnt]); |
| gsteiert | 0:28bc7ce77e20 | 59 | resp +=3; |
| gsteiert | 0:28bc7ce77e20 | 60 | } |
| gsteiert | 0:28bc7ce77e20 | 61 | } |
| gsteiert | 0:28bc7ce77e20 | 62 | } |
| gsteiert | 0:28bc7ce77e20 | 63 | |
| gsteiert | 0:28bc7ce77e20 | 64 | void cmd_i2c_addr_read(char* qry, char* data, char* resp) |
| gsteiert | 0:28bc7ce77e20 | 65 | { |
| gsteiert | 0:28bc7ce77e20 | 66 | int addr = 0; |
| gsteiert | 0:28bc7ce77e20 | 67 | int radd = 0; |
| gsteiert | 0:28bc7ce77e20 | 68 | int dlen = 0; |
| gsteiert | 0:28bc7ce77e20 | 69 | int dcnt = 0; |
| gsteiert | 0:28bc7ce77e20 | 70 | if (sscanf(qry, "?%2x", &addr) == 1) { |
| gsteiert | 0:28bc7ce77e20 | 71 | qry += 3; |
| gsteiert | 0:28bc7ce77e20 | 72 | if (sscanf(qry, "&%2x", &radd) == 1) { |
| gsteiert | 0:28bc7ce77e20 | 73 | qry += 3; |
| gsteiert | 0:28bc7ce77e20 | 74 | if (sscanf(qry, "&%2x", &dlen) == 1) { |
| gsteiert | 0:28bc7ce77e20 | 75 | data[0] = radd; |
| gsteiert | 0:28bc7ce77e20 | 76 | i2c.write(addr, data, 1, false); |
| gsteiert | 0:28bc7ce77e20 | 77 | if (i2c.read(addr, data, dlen)!=0) { |
| gsteiert | 0:28bc7ce77e20 | 78 | dlen = -1; |
| gsteiert | 0:28bc7ce77e20 | 79 | sprintf(resp, "500 I2C read failed\r\n"); |
| gsteiert | 0:28bc7ce77e20 | 80 | } |
| gsteiert | 0:28bc7ce77e20 | 81 | } else { |
| gsteiert | 0:28bc7ce77e20 | 82 | sprintf(resp, "400 Invalid data length: %s\r\n", qry); |
| gsteiert | 0:28bc7ce77e20 | 83 | } |
| gsteiert | 0:28bc7ce77e20 | 84 | } else { |
| gsteiert | 0:28bc7ce77e20 | 85 | dlen = -1; |
| gsteiert | 0:28bc7ce77e20 | 86 | sprintf(resp, "400 Invalid register address: %s\r\n", qry); |
| gsteiert | 0:28bc7ce77e20 | 87 | } |
| gsteiert | 0:28bc7ce77e20 | 88 | } else { |
| gsteiert | 0:28bc7ce77e20 | 89 | dlen = -1; |
| gsteiert | 0:28bc7ce77e20 | 90 | sprintf(resp, "400 Invalid address: %s\r\n", qry); |
| gsteiert | 0:28bc7ce77e20 | 91 | } |
| gsteiert | 0:28bc7ce77e20 | 92 | if (dlen > 0) { |
| gsteiert | 0:28bc7ce77e20 | 93 | sprintf(resp,"200"); |
| gsteiert | 0:28bc7ce77e20 | 94 | resp += 3; |
| gsteiert | 0:28bc7ce77e20 | 95 | for (dcnt = 0; dcnt < dlen; dcnt++) { |
| gsteiert | 0:28bc7ce77e20 | 96 | sprintf(resp," %02x", data[dcnt]); |
| gsteiert | 0:28bc7ce77e20 | 97 | resp +=3; |
| gsteiert | 0:28bc7ce77e20 | 98 | } |
| gsteiert | 0:28bc7ce77e20 | 99 | } |
| gsteiert | 0:28bc7ce77e20 | 100 | } |
| gsteiert | 0:28bc7ce77e20 | 101 | |
| gsteiert | 0:28bc7ce77e20 | 102 | |
| gsteiert | 0:28bc7ce77e20 | 103 | void muri(char* uri, char* data, char* resp) |
| gsteiert | 0:28bc7ce77e20 | 104 | { |
| gsteiert | 0:28bc7ce77e20 | 105 | // sprintf(resp, "501 %s", uri); |
| gsteiert | 0:28bc7ce77e20 | 106 | //} |
| gsteiert | 0:28bc7ce77e20 | 107 | //void get_cgi(char* uri, char* qry) |
| gsteiert | 0:28bc7ce77e20 | 108 | //{ |
| gsteiert | 0:28bc7ce77e20 | 109 | char *qry; |
| gsteiert | 0:28bc7ce77e20 | 110 | printf("muri uri: %s\n", uri); |
| gsteiert | 0:28bc7ce77e20 | 111 | qry = strstr(uri, "?"); |
| gsteiert | 0:28bc7ce77e20 | 112 | if (!strncmp(uri, "i2cw?", 5)) { // i2cW [addr] [data] [data] [data] ... |
| gsteiert | 0:28bc7ce77e20 | 113 | cmd_i2c_write(qry, data, resp); |
| gsteiert | 0:28bc7ce77e20 | 114 | } else if (!strncmp(uri, "i2cr?", 5)) { // i2cR [addr] [count] |
| gsteiert | 0:28bc7ce77e20 | 115 | cmd_i2c_read(qry, data, resp); |
| gsteiert | 0:28bc7ce77e20 | 116 | } else if (!strncmp(uri, "i2car?", 6)) { // i2cAR [addr] [radd] [count] |
| gsteiert | 0:28bc7ce77e20 | 117 | cmd_i2c_addr_read(qry, data, resp); |
| gsteiert | 0:28bc7ce77e20 | 118 | } else { |
| gsteiert | 0:28bc7ce77e20 | 119 | sprintf(resp, "501 %s", uri); |
| gsteiert | 0:28bc7ce77e20 | 120 | } |
| gsteiert | 0:28bc7ce77e20 | 121 | printf("muri resp: %s\n", resp); |
| gsteiert | 0:28bc7ce77e20 | 122 | } |
| gsteiert | 0:28bc7ce77e20 | 123 | |
| gsteiert | 0:28bc7ce77e20 | 124 |
