NNN40 change mode from AP to STA by HTTP server
Dependencies: WIFI_API_32kRAM mbed
How to use Demo code
- Step1: Prepare a router, and set the SSID and Password as follow
- SSID: "SSID"
- Password: "0123456789"
- Step2: Burn demo code to NNN40 module.
You can drag and drop the sample code to NNN40 module.
- Step3: Login module from Http server (192.168.2.1) by PC.
You can set SSID and password by browser. After clicking "confirm" button, the module will change mode from AP to STA, get IP from router
- DEMO video:
RPCCommand.cpp@14:b007595028e2, 2015-10-21 (annotated)
- Committer:
- lester0507
- Date:
- Wed Oct 21 05:54:02 2015 +0000
- Revision:
- 14:b007595028e2
- Parent:
- 12:eca9b56155c7
fix bug for ssid underline.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
feb11 | 0:9e4bcb10b3e3 | 1 | #include "RPCCommand.h" |
feb11 | 0:9e4bcb10b3e3 | 2 | #include "mbed.h" |
feb11 | 0:9e4bcb10b3e3 | 3 | #include "RPCType.h" |
feb11 | 0:9e4bcb10b3e3 | 4 | |
feb11 | 0:9e4bcb10b3e3 | 5 | |
feb11 | 0:9e4bcb10b3e3 | 6 | RPCCommand::RPCCommand(): |
feb11 | 0:9e4bcb10b3e3 | 7 | cmd(), |
feb11 | 0:9e4bcb10b3e3 | 8 | obj_name(NULL), |
feb11 | 0:9e4bcb10b3e3 | 9 | func_name(NULL) |
feb11 | 0:9e4bcb10b3e3 | 10 | { |
feb11 | 0:9e4bcb10b3e3 | 11 | |
feb11 | 0:9e4bcb10b3e3 | 12 | } |
feb11 | 0:9e4bcb10b3e3 | 13 | |
feb11 | 0:9e4bcb10b3e3 | 14 | bool RPCCommand::decode(char *buffer) |
feb11 | 0:9e4bcb10b3e3 | 15 | { |
feb11 | 0:9e4bcb10b3e3 | 16 | if(buffer == NULL) |
feb11 | 0:9e4bcb10b3e3 | 17 | return false; |
feb11 | 0:9e4bcb10b3e3 | 18 | if(buffer[0] != '/') |
feb11 | 0:9e4bcb10b3e3 | 19 | return false; |
feb11 | 0:9e4bcb10b3e3 | 20 | |
feb11 | 0:9e4bcb10b3e3 | 21 | ++buffer; |
feb11 | 0:9e4bcb10b3e3 | 22 | char *tmp = strchr(buffer ,'/'); |
feb11 | 0:9e4bcb10b3e3 | 23 | |
feb11 | 0:9e4bcb10b3e3 | 24 | if(tmp == NULL) |
feb11 | 0:9e4bcb10b3e3 | 25 | return false; |
feb11 | 0:9e4bcb10b3e3 | 26 | if(tmp == buffer) |
feb11 | 0:9e4bcb10b3e3 | 27 | return false; |
feb11 | 0:9e4bcb10b3e3 | 28 | |
feb11 | 0:9e4bcb10b3e3 | 29 | tmp[0] = '\0'; |
feb11 | 0:9e4bcb10b3e3 | 30 | obj_name = buffer; |
feb11 | 0:9e4bcb10b3e3 | 31 | |
feb11 | 0:9e4bcb10b3e3 | 32 | buffer = tmp+1; |
feb11 | 0:9e4bcb10b3e3 | 33 | |
feb11 | 0:9e4bcb10b3e3 | 34 | if(buffer[0] == '\0' || buffer[0] == '?') |
feb11 | 0:9e4bcb10b3e3 | 35 | return false; |
feb11 | 0:9e4bcb10b3e3 | 36 | |
feb11 | 0:9e4bcb10b3e3 | 37 | func_name = buffer; |
feb11 | 0:9e4bcb10b3e3 | 38 | |
feb11 | 0:9e4bcb10b3e3 | 39 | tmp = strchr(buffer, '?'); |
feb11 | 0:9e4bcb10b3e3 | 40 | if(tmp != NULL) |
feb11 | 0:9e4bcb10b3e3 | 41 | { |
feb11 | 0:9e4bcb10b3e3 | 42 | if(tmp[1] == '\0') |
feb11 | 0:9e4bcb10b3e3 | 43 | return false; |
feb11 | 0:9e4bcb10b3e3 | 44 | tmp[0] = '\0'; |
feb11 | 0:9e4bcb10b3e3 | 45 | } |
feb11 | 0:9e4bcb10b3e3 | 46 | |
feb11 | 0:9e4bcb10b3e3 | 47 | cmd[0] = '\0'; |
feb11 | 0:9e4bcb10b3e3 | 48 | strcat(cmd, "/"); |
feb11 | 0:9e4bcb10b3e3 | 49 | strcat(cmd, obj_name); |
feb11 | 0:9e4bcb10b3e3 | 50 | strcat(cmd, "/"); |
feb11 | 0:9e4bcb10b3e3 | 51 | strcat(cmd, func_name); |
feb11 | 0:9e4bcb10b3e3 | 52 | |
feb11 | 0:9e4bcb10b3e3 | 53 | if(tmp == NULL) |
feb11 | 0:9e4bcb10b3e3 | 54 | return true; |
feb11 | 0:9e4bcb10b3e3 | 55 | |
feb11 | 0:9e4bcb10b3e3 | 56 | buffer = tmp+1; |
feb11 | 0:9e4bcb10b3e3 | 57 | do |
feb11 | 0:9e4bcb10b3e3 | 58 | { |
feb11 | 0:9e4bcb10b3e3 | 59 | tmp = strchr(buffer, '&'); |
feb11 | 0:9e4bcb10b3e3 | 60 | |
feb11 | 0:9e4bcb10b3e3 | 61 | if(tmp != NULL) |
feb11 | 0:9e4bcb10b3e3 | 62 | { |
feb11 | 0:9e4bcb10b3e3 | 63 | if(tmp[1] == '\0' || buffer == tmp) |
feb11 | 0:9e4bcb10b3e3 | 64 | return false; |
feb11 | 0:9e4bcb10b3e3 | 65 | tmp[0] = '\0'; |
feb11 | 0:9e4bcb10b3e3 | 66 | } |
feb11 | 0:9e4bcb10b3e3 | 67 | |
feb11 | 0:9e4bcb10b3e3 | 68 | char *sep = strchr(buffer, '='); |
feb11 | 0:9e4bcb10b3e3 | 69 | if(sep == NULL) |
feb11 | 0:9e4bcb10b3e3 | 70 | return false; |
feb11 | 0:9e4bcb10b3e3 | 71 | if(sep == buffer) |
feb11 | 0:9e4bcb10b3e3 | 72 | return false; |
feb11 | 0:9e4bcb10b3e3 | 73 | if(sep[1] == '\0' || sep[1] == '&') |
feb11 | 0:9e4bcb10b3e3 | 74 | return false; |
feb11 | 0:9e4bcb10b3e3 | 75 | |
feb11 | 0:9e4bcb10b3e3 | 76 | strcat(cmd, " "); |
feb11 | 0:9e4bcb10b3e3 | 77 | strcat(cmd, sep+1); |
feb11 | 0:9e4bcb10b3e3 | 78 | |
feb11 | 0:9e4bcb10b3e3 | 79 | if(tmp != NULL) |
feb11 | 0:9e4bcb10b3e3 | 80 | buffer = tmp+1; |
feb11 | 0:9e4bcb10b3e3 | 81 | else |
feb11 | 0:9e4bcb10b3e3 | 82 | buffer = NULL; |
feb11 | 0:9e4bcb10b3e3 | 83 | }while(buffer); |
feb11 | 0:9e4bcb10b3e3 | 84 | |
feb11 | 0:9e4bcb10b3e3 | 85 | return true; |
feb11 | 0:9e4bcb10b3e3 | 86 | } |
feb11 | 0:9e4bcb10b3e3 | 87 | |
feb11 | 0:9e4bcb10b3e3 | 88 | char* RPCCommand::get_cmd() const |
feb11 | 0:9e4bcb10b3e3 | 89 | { |
feb11 | 0:9e4bcb10b3e3 | 90 | return (char*)cmd; |
feb11 | 0:9e4bcb10b3e3 | 91 | } |
feb11 | 0:9e4bcb10b3e3 | 92 | |
feb11 | 0:9e4bcb10b3e3 | 93 | RPC_COMMAND_TYPE RPCCommand::get_type() const |
feb11 | 0:9e4bcb10b3e3 | 94 | { |
feb11 | 0:9e4bcb10b3e3 | 95 | if(!strcmp(func_name, "new") && RPCType::instance().is_supported_type(obj_name)) |
feb11 | 0:9e4bcb10b3e3 | 96 | return CREATE; |
feb11 | 0:9e4bcb10b3e3 | 97 | |
feb11 | 0:9e4bcb10b3e3 | 98 | RPC* r = RPC::lookup(obj_name); |
feb11 | 0:9e4bcb10b3e3 | 99 | if(r == NULL) |
feb11 | 0:9e4bcb10b3e3 | 100 | return INVALID; |
feb11 | 0:9e4bcb10b3e3 | 101 | |
feb11 | 0:9e4bcb10b3e3 | 102 | if(!strcmp(func_name, "delete")) |
feb11 | 0:9e4bcb10b3e3 | 103 | return DELETE; |
feb11 | 0:9e4bcb10b3e3 | 104 | |
feb11 | 0:9e4bcb10b3e3 | 105 | const struct rpc_method *methods = r->get_rpc_methods(); |
feb11 | 0:9e4bcb10b3e3 | 106 | int i = 0; |
feb11 | 0:9e4bcb10b3e3 | 107 | while(methods[i].name != NULL) |
feb11 | 0:9e4bcb10b3e3 | 108 | { |
feb11 | 0:9e4bcb10b3e3 | 109 | if(!strcmp(func_name, methods[i].name)) |
feb11 | 0:9e4bcb10b3e3 | 110 | { |
feb11 | 0:9e4bcb10b3e3 | 111 | return FUNCTION_CALL; |
feb11 | 0:9e4bcb10b3e3 | 112 | } |
feb11 | 0:9e4bcb10b3e3 | 113 | ++i; |
feb11 | 0:9e4bcb10b3e3 | 114 | } |
feb11 | 0:9e4bcb10b3e3 | 115 | |
feb11 | 0:9e4bcb10b3e3 | 116 | return INVALID; |
feb11 | 0:9e4bcb10b3e3 | 117 | } |
feb11 | 0:9e4bcb10b3e3 | 118 | |
feb11 | 0:9e4bcb10b3e3 | 119 | char* RPCCommand::get_obj_name() const |
feb11 | 0:9e4bcb10b3e3 | 120 | { |
feb11 | 0:9e4bcb10b3e3 | 121 | return obj_name; |
feb11 | 0:9e4bcb10b3e3 | 122 | } |
feb11 | 0:9e4bcb10b3e3 | 123 | |
feb11 | 0:9e4bcb10b3e3 | 124 | char* RPCCommand::get_func_name() const |
feb11 | 0:9e4bcb10b3e3 | 125 | { |
feb11 | 0:9e4bcb10b3e3 | 126 | return func_name; |
feb11 | 0:9e4bcb10b3e3 | 127 | } |
feb11 | 0:9e4bcb10b3e3 | 128 |