Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: EthernetInterface SDFileSystem mbed-rtos mbed
Fork of HTTP_SD_Server_K64F by
Diff: muri.cpp
- Revision:
- 0:28bc7ce77e20
- Child:
- 1:64f023138627
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/muri.cpp Sat Sep 07 04:43:57 2013 +0000
@@ -0,0 +1,124 @@
+#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);
+}
+
+
