Everything works except AMPM and snooze

Dependencies:   4DGL-uLCD-SE EthernetInterface HTTPClient NTPClient PinDetect SDFileSystem mbed-rpc mbed-rtos mbed wave_player

Fork of ECE4180_FinalProject by Paul Rabbat

Committer:
adaruna3
Date:
Wed Dec 03 17:59:07 2014 +0000
Revision:
9:add6ce18f1b7
Parent:
0:0a99e3fc2a46
All features working

Who changed what in which revision?

UserRevisionLine numberNew contents of line
prabbat3 0:0a99e3fc2a46 1 #include "RPCCommand.h"
prabbat3 0:0a99e3fc2a46 2 #include "mbed.h"
prabbat3 0:0a99e3fc2a46 3 #include "RPCType.h"
prabbat3 0:0a99e3fc2a46 4
prabbat3 0:0a99e3fc2a46 5
prabbat3 0:0a99e3fc2a46 6 RPCCommand::RPCCommand():
prabbat3 0:0a99e3fc2a46 7 cmd(),
prabbat3 0:0a99e3fc2a46 8 obj_name(NULL),
prabbat3 0:0a99e3fc2a46 9 func_name(NULL)
prabbat3 0:0a99e3fc2a46 10 {
prabbat3 0:0a99e3fc2a46 11
prabbat3 0:0a99e3fc2a46 12 }
prabbat3 0:0a99e3fc2a46 13
prabbat3 0:0a99e3fc2a46 14 bool RPCCommand::decode(char *buffer)
prabbat3 0:0a99e3fc2a46 15 {
prabbat3 0:0a99e3fc2a46 16 if(buffer == NULL)
prabbat3 0:0a99e3fc2a46 17 return false;
prabbat3 0:0a99e3fc2a46 18 if(buffer[0] != '/')
prabbat3 0:0a99e3fc2a46 19 return false;
prabbat3 0:0a99e3fc2a46 20
prabbat3 0:0a99e3fc2a46 21 ++buffer;
prabbat3 0:0a99e3fc2a46 22 char *tmp = strchr(buffer ,'/');
prabbat3 0:0a99e3fc2a46 23
prabbat3 0:0a99e3fc2a46 24 if(tmp == NULL)
prabbat3 0:0a99e3fc2a46 25 return false;
prabbat3 0:0a99e3fc2a46 26 if(tmp == buffer)
prabbat3 0:0a99e3fc2a46 27 return false;
prabbat3 0:0a99e3fc2a46 28
prabbat3 0:0a99e3fc2a46 29 tmp[0] = '\0';
prabbat3 0:0a99e3fc2a46 30 obj_name = buffer;
prabbat3 0:0a99e3fc2a46 31
prabbat3 0:0a99e3fc2a46 32 buffer = tmp+1;
prabbat3 0:0a99e3fc2a46 33
prabbat3 0:0a99e3fc2a46 34 if(buffer[0] == '\0' || buffer[0] == '?')
prabbat3 0:0a99e3fc2a46 35 return false;
prabbat3 0:0a99e3fc2a46 36
prabbat3 0:0a99e3fc2a46 37 func_name = buffer;
prabbat3 0:0a99e3fc2a46 38
prabbat3 0:0a99e3fc2a46 39 tmp = strchr(buffer, '?');
prabbat3 0:0a99e3fc2a46 40 if(tmp != NULL)
prabbat3 0:0a99e3fc2a46 41 {
prabbat3 0:0a99e3fc2a46 42 if(tmp[1] == '\0')
prabbat3 0:0a99e3fc2a46 43 return false;
prabbat3 0:0a99e3fc2a46 44 tmp[0] = '\0';
prabbat3 0:0a99e3fc2a46 45 }
prabbat3 0:0a99e3fc2a46 46
prabbat3 0:0a99e3fc2a46 47 cmd[0] = '\0';
prabbat3 0:0a99e3fc2a46 48 strcat(cmd, "/");
prabbat3 0:0a99e3fc2a46 49 strcat(cmd, obj_name);
prabbat3 0:0a99e3fc2a46 50 strcat(cmd, "/");
prabbat3 0:0a99e3fc2a46 51 strcat(cmd, func_name);
prabbat3 0:0a99e3fc2a46 52
prabbat3 0:0a99e3fc2a46 53 if(tmp == NULL)
prabbat3 0:0a99e3fc2a46 54 return true;
prabbat3 0:0a99e3fc2a46 55
prabbat3 0:0a99e3fc2a46 56 buffer = tmp+1;
prabbat3 0:0a99e3fc2a46 57 do
prabbat3 0:0a99e3fc2a46 58 {
prabbat3 0:0a99e3fc2a46 59 tmp = strchr(buffer, '&');
prabbat3 0:0a99e3fc2a46 60
prabbat3 0:0a99e3fc2a46 61 if(tmp != NULL)
prabbat3 0:0a99e3fc2a46 62 {
prabbat3 0:0a99e3fc2a46 63 if(tmp[1] == '\0' || buffer == tmp)
prabbat3 0:0a99e3fc2a46 64 return false;
prabbat3 0:0a99e3fc2a46 65 tmp[0] = '\0';
prabbat3 0:0a99e3fc2a46 66 }
prabbat3 0:0a99e3fc2a46 67
prabbat3 0:0a99e3fc2a46 68 char *sep = strchr(buffer, '=');
prabbat3 0:0a99e3fc2a46 69 if(sep == NULL)
prabbat3 0:0a99e3fc2a46 70 return false;
prabbat3 0:0a99e3fc2a46 71 if(sep == buffer)
prabbat3 0:0a99e3fc2a46 72 return false;
prabbat3 0:0a99e3fc2a46 73 if(sep[1] == '\0' || sep[1] == '&')
prabbat3 0:0a99e3fc2a46 74 return false;
prabbat3 0:0a99e3fc2a46 75
prabbat3 0:0a99e3fc2a46 76 strcat(cmd, " ");
prabbat3 0:0a99e3fc2a46 77 strcat(cmd, sep+1);
prabbat3 0:0a99e3fc2a46 78
prabbat3 0:0a99e3fc2a46 79 if(tmp != NULL)
prabbat3 0:0a99e3fc2a46 80 buffer = tmp+1;
prabbat3 0:0a99e3fc2a46 81 else
prabbat3 0:0a99e3fc2a46 82 buffer = NULL;
prabbat3 0:0a99e3fc2a46 83 }while(buffer);
prabbat3 0:0a99e3fc2a46 84
prabbat3 0:0a99e3fc2a46 85 return true;
prabbat3 0:0a99e3fc2a46 86 }
prabbat3 0:0a99e3fc2a46 87
prabbat3 0:0a99e3fc2a46 88
prabbat3 0:0a99e3fc2a46 89
prabbat3 0:0a99e3fc2a46 90 char* RPCCommand::get_cmd() const
prabbat3 0:0a99e3fc2a46 91 {
prabbat3 0:0a99e3fc2a46 92 return (char*)cmd;
prabbat3 0:0a99e3fc2a46 93 }
prabbat3 0:0a99e3fc2a46 94
prabbat3 0:0a99e3fc2a46 95 RPC_COMMAND_TYPE RPCCommand::get_type() const
prabbat3 0:0a99e3fc2a46 96 {
prabbat3 0:0a99e3fc2a46 97 if(!strcmp(func_name, "new") && RPCType::instance().is_supported_type(obj_name))
prabbat3 0:0a99e3fc2a46 98 return CREATE;
prabbat3 0:0a99e3fc2a46 99
prabbat3 0:0a99e3fc2a46 100 RPC* r = RPC::lookup(obj_name);
prabbat3 0:0a99e3fc2a46 101 if(r == NULL)
prabbat3 0:0a99e3fc2a46 102 return INVALID;
prabbat3 0:0a99e3fc2a46 103
prabbat3 0:0a99e3fc2a46 104 if(!strcmp(func_name, "delete"))
prabbat3 0:0a99e3fc2a46 105 return DELETE;
prabbat3 0:0a99e3fc2a46 106
prabbat3 0:0a99e3fc2a46 107 const struct rpc_method *methods = r->get_rpc_methods();
prabbat3 0:0a99e3fc2a46 108 int i = 0;
prabbat3 0:0a99e3fc2a46 109 while(methods[i].name != NULL)
prabbat3 0:0a99e3fc2a46 110 {
prabbat3 0:0a99e3fc2a46 111 if(!strcmp(func_name, methods[i].name))
prabbat3 0:0a99e3fc2a46 112 {
prabbat3 0:0a99e3fc2a46 113 return FUNCTION_CALL;
prabbat3 0:0a99e3fc2a46 114 }
prabbat3 0:0a99e3fc2a46 115 ++i;
prabbat3 0:0a99e3fc2a46 116 }
prabbat3 0:0a99e3fc2a46 117
prabbat3 0:0a99e3fc2a46 118 return INVALID;
prabbat3 0:0a99e3fc2a46 119 }
prabbat3 0:0a99e3fc2a46 120
prabbat3 0:0a99e3fc2a46 121 char* RPCCommand::get_obj_name() const
prabbat3 0:0a99e3fc2a46 122 {
prabbat3 0:0a99e3fc2a46 123 return obj_name;
prabbat3 0:0a99e3fc2a46 124 }
prabbat3 0:0a99e3fc2a46 125
prabbat3 0:0a99e3fc2a46 126 char* RPCCommand::get_func_name() const
prabbat3 0:0a99e3fc2a46 127 {
prabbat3 0:0a99e3fc2a46 128 return func_name;
prabbat3 0:0a99e3fc2a46 129 }
prabbat3 0:0a99e3fc2a46 130