code ax12 petit robot 12/05/2017

Fork of command_AX12_petit_robot_V3 by CRAC Team

Committer:
ClementBreteau
Date:
Fri May 12 14:35:09 2017 +0000
Revision:
7:ad4a19e26b84
Parent:
2:99b1cb0d9f5e
position ax12

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SquirrelGod 2:99b1cb0d9f5e 1 /* mbed Microcontroller Library - RPC
SquirrelGod 2:99b1cb0d9f5e 2 * Copyright (c) 2008-2009 ARM Limited. All rights reserved.
SquirrelGod 2:99b1cb0d9f5e 3 */
SquirrelGod 2:99b1cb0d9f5e 4
SquirrelGod 2:99b1cb0d9f5e 5 #ifndef MBED_RPC_H
SquirrelGod 2:99b1cb0d9f5e 6 #define MBED_RPC_H
SquirrelGod 2:99b1cb0d9f5e 7
SquirrelGod 2:99b1cb0d9f5e 8 /* Section rpc
SquirrelGod 2:99b1cb0d9f5e 9 * Helpers for rpc handling.
SquirrelGod 2:99b1cb0d9f5e 10 */
SquirrelGod 2:99b1cb0d9f5e 11
SquirrelGod 2:99b1cb0d9f5e 12 #include <stdlib.h>
SquirrelGod 2:99b1cb0d9f5e 13 #include <stdio.h>
SquirrelGod 2:99b1cb0d9f5e 14 #include <string.h>
SquirrelGod 2:99b1cb0d9f5e 15 #include <ctype.h>
SquirrelGod 2:99b1cb0d9f5e 16 #include "Base.h"
SquirrelGod 2:99b1cb0d9f5e 17
SquirrelGod 2:99b1cb0d9f5e 18 #include "PinNames.h"
SquirrelGod 2:99b1cb0d9f5e 19 #include <stdint.h>
SquirrelGod 2:99b1cb0d9f5e 20
SquirrelGod 2:99b1cb0d9f5e 21 namespace mbed {
SquirrelGod 2:99b1cb0d9f5e 22
SquirrelGod 2:99b1cb0d9f5e 23 /* Function parse_arg
SquirrelGod 2:99b1cb0d9f5e 24 * Parses and returns a value from a string.
SquirrelGod 2:99b1cb0d9f5e 25 *
SquirrelGod 2:99b1cb0d9f5e 26 * Variable
SquirrelGod 2:99b1cb0d9f5e 27 * arg - The string to pase
SquirrelGod 2:99b1cb0d9f5e 28 * next - If not NULL a pointer to after the last
SquirrelGod 2:99b1cb0d9f5e 29 * character parsed is written here
SquirrelGod 2:99b1cb0d9f5e 30 */
SquirrelGod 2:99b1cb0d9f5e 31 template<typename T> T parse_arg(const char *arg, const char **next);
SquirrelGod 2:99b1cb0d9f5e 32
SquirrelGod 2:99b1cb0d9f5e 33 inline char parse_char(const char *arg, const char **next) {
SquirrelGod 2:99b1cb0d9f5e 34 char c = *arg++;
SquirrelGod 2:99b1cb0d9f5e 35 if(c == '\\') {
SquirrelGod 2:99b1cb0d9f5e 36 c = *arg++;
SquirrelGod 2:99b1cb0d9f5e 37 switch(c) {
SquirrelGod 2:99b1cb0d9f5e 38 case 'a': c = '\a'; break;
SquirrelGod 2:99b1cb0d9f5e 39 case 'b': c = '\b'; break;
SquirrelGod 2:99b1cb0d9f5e 40 case 't': c = '\t'; break;
SquirrelGod 2:99b1cb0d9f5e 41 case 'n': c = '\n'; break;
SquirrelGod 2:99b1cb0d9f5e 42 case 'v': c = '\v'; break;
SquirrelGod 2:99b1cb0d9f5e 43 case 'f': c = '\f'; break;
SquirrelGod 2:99b1cb0d9f5e 44 case 'r': c = '\r'; break;
SquirrelGod 2:99b1cb0d9f5e 45 case 'x':
SquirrelGod 2:99b1cb0d9f5e 46 {
SquirrelGod 2:99b1cb0d9f5e 47 /* two-character hexadecimal */
SquirrelGod 2:99b1cb0d9f5e 48 char buf[3];
SquirrelGod 2:99b1cb0d9f5e 49 buf[0] = *arg++;
SquirrelGod 2:99b1cb0d9f5e 50 buf[1] = *arg++;
SquirrelGod 2:99b1cb0d9f5e 51 buf[2] = 0;
SquirrelGod 2:99b1cb0d9f5e 52 c = strtol(buf, NULL, 16);
SquirrelGod 2:99b1cb0d9f5e 53 }
SquirrelGod 2:99b1cb0d9f5e 54 break;
SquirrelGod 2:99b1cb0d9f5e 55 default:
SquirrelGod 2:99b1cb0d9f5e 56 if(isdigit(c)) {
SquirrelGod 2:99b1cb0d9f5e 57 /* three-character octal */
SquirrelGod 2:99b1cb0d9f5e 58 char buf[4];
SquirrelGod 2:99b1cb0d9f5e 59 buf[0] = c;
SquirrelGod 2:99b1cb0d9f5e 60 buf[1] = *arg++;
SquirrelGod 2:99b1cb0d9f5e 61 buf[2] = *arg++;
SquirrelGod 2:99b1cb0d9f5e 62 buf[3] = 0;
SquirrelGod 2:99b1cb0d9f5e 63 c = strtol(buf, NULL, 8);
SquirrelGod 2:99b1cb0d9f5e 64 }
SquirrelGod 2:99b1cb0d9f5e 65 break;
SquirrelGod 2:99b1cb0d9f5e 66 }
SquirrelGod 2:99b1cb0d9f5e 67 }
SquirrelGod 2:99b1cb0d9f5e 68 *next = arg;
SquirrelGod 2:99b1cb0d9f5e 69 return c;
SquirrelGod 2:99b1cb0d9f5e 70 }
SquirrelGod 2:99b1cb0d9f5e 71
SquirrelGod 2:99b1cb0d9f5e 72 /* signed integer types */
SquirrelGod 2:99b1cb0d9f5e 73
SquirrelGod 2:99b1cb0d9f5e 74 template<> inline int parse_arg<int>(const char *arg, const char **next) {
SquirrelGod 2:99b1cb0d9f5e 75 if(arg[0] == '\'') {
SquirrelGod 2:99b1cb0d9f5e 76 char c = parse_char(arg+1, &arg);
SquirrelGod 2:99b1cb0d9f5e 77 if(next != NULL) *next = arg+1;
SquirrelGod 2:99b1cb0d9f5e 78 return c;
SquirrelGod 2:99b1cb0d9f5e 79 } else {
SquirrelGod 2:99b1cb0d9f5e 80 return strtol(arg, const_cast<char**>(next), 0);
SquirrelGod 2:99b1cb0d9f5e 81 }
SquirrelGod 2:99b1cb0d9f5e 82 }
SquirrelGod 2:99b1cb0d9f5e 83
SquirrelGod 2:99b1cb0d9f5e 84 template<> inline char parse_arg<char>(const char *arg, const char **next) {
SquirrelGod 2:99b1cb0d9f5e 85 return parse_arg<int>(arg,next);
SquirrelGod 2:99b1cb0d9f5e 86 }
SquirrelGod 2:99b1cb0d9f5e 87
SquirrelGod 2:99b1cb0d9f5e 88 template<> inline short int parse_arg<short int>(const char *arg, const char **next) {
SquirrelGod 2:99b1cb0d9f5e 89 return parse_arg<int>(arg,next);
SquirrelGod 2:99b1cb0d9f5e 90 }
SquirrelGod 2:99b1cb0d9f5e 91
SquirrelGod 2:99b1cb0d9f5e 92 template<> inline long int parse_arg<long int>(const char *arg, const char **next) {
SquirrelGod 2:99b1cb0d9f5e 93 return parse_arg<int>(arg,next);
SquirrelGod 2:99b1cb0d9f5e 94 }
SquirrelGod 2:99b1cb0d9f5e 95
SquirrelGod 2:99b1cb0d9f5e 96 template<> inline long long parse_arg<long long>(const char *arg, const char **next) {
SquirrelGod 2:99b1cb0d9f5e 97 return strtoll(arg, const_cast<char**>(next), 0);
SquirrelGod 2:99b1cb0d9f5e 98 }
SquirrelGod 2:99b1cb0d9f5e 99
SquirrelGod 2:99b1cb0d9f5e 100 /* unsigned integer types */
SquirrelGod 2:99b1cb0d9f5e 101
SquirrelGod 2:99b1cb0d9f5e 102 template<> inline unsigned int parse_arg<unsigned int>(const char *arg, const char **next) {
SquirrelGod 2:99b1cb0d9f5e 103 if(arg[0] == '\'') {
SquirrelGod 2:99b1cb0d9f5e 104 char c = parse_char(arg+1, &arg);
SquirrelGod 2:99b1cb0d9f5e 105 if(next != NULL) *next = arg+1;
SquirrelGod 2:99b1cb0d9f5e 106 return c;
SquirrelGod 2:99b1cb0d9f5e 107 } else {
SquirrelGod 2:99b1cb0d9f5e 108 return strtoul(arg, const_cast<char**>(next), 0);
SquirrelGod 2:99b1cb0d9f5e 109 }
SquirrelGod 2:99b1cb0d9f5e 110 }
SquirrelGod 2:99b1cb0d9f5e 111
SquirrelGod 2:99b1cb0d9f5e 112 template<> inline unsigned char parse_arg<unsigned char>(const char *arg, const char **next) {
SquirrelGod 2:99b1cb0d9f5e 113 return parse_arg<unsigned int>(arg,next);
SquirrelGod 2:99b1cb0d9f5e 114 }
SquirrelGod 2:99b1cb0d9f5e 115
SquirrelGod 2:99b1cb0d9f5e 116 template<> inline unsigned short int parse_arg<unsigned short int>(const char *arg, const char **next) {
SquirrelGod 2:99b1cb0d9f5e 117 return parse_arg<unsigned int>(arg,next);
SquirrelGod 2:99b1cb0d9f5e 118 }
SquirrelGod 2:99b1cb0d9f5e 119
SquirrelGod 2:99b1cb0d9f5e 120 template<> inline unsigned long int parse_arg<unsigned long int>(const char *arg, const char **next) {
SquirrelGod 2:99b1cb0d9f5e 121 return parse_arg<unsigned int>(arg,next);
SquirrelGod 2:99b1cb0d9f5e 122 }
SquirrelGod 2:99b1cb0d9f5e 123
SquirrelGod 2:99b1cb0d9f5e 124 template<> inline unsigned long long parse_arg<unsigned long long>(const char *arg, const char **next) {
SquirrelGod 2:99b1cb0d9f5e 125 return strtoull(arg, const_cast<char**>(next), 0);
SquirrelGod 2:99b1cb0d9f5e 126 }
SquirrelGod 2:99b1cb0d9f5e 127
SquirrelGod 2:99b1cb0d9f5e 128 /* floating types */
SquirrelGod 2:99b1cb0d9f5e 129
SquirrelGod 2:99b1cb0d9f5e 130 template<> inline float parse_arg<float>(const char *arg, const char **next) {
SquirrelGod 2:99b1cb0d9f5e 131 #if !defined(__ARMCC_VERSION) || __ARMCC_VERSION >= 410000
SquirrelGod 2:99b1cb0d9f5e 132 return strtof(arg,const_cast<char**>(next));
SquirrelGod 2:99b1cb0d9f5e 133 #elif __ARMCC_VERSION >= 310000
SquirrelGod 2:99b1cb0d9f5e 134 /* bug in header means no using declaration for strtof */
SquirrelGod 2:99b1cb0d9f5e 135 return std::strtof(arg,const_cast<char**>(next));
SquirrelGod 2:99b1cb0d9f5e 136 #else
SquirrelGod 2:99b1cb0d9f5e 137 /* strtof not supported */
SquirrelGod 2:99b1cb0d9f5e 138 return strtod(arg,const_cast<char**>(next));
SquirrelGod 2:99b1cb0d9f5e 139 #endif
SquirrelGod 2:99b1cb0d9f5e 140 }
SquirrelGod 2:99b1cb0d9f5e 141
SquirrelGod 2:99b1cb0d9f5e 142 template<> inline double parse_arg<double>(const char *arg, const char **next) {
SquirrelGod 2:99b1cb0d9f5e 143 return strtod(arg,const_cast<char**>(next));
SquirrelGod 2:99b1cb0d9f5e 144 }
SquirrelGod 2:99b1cb0d9f5e 145
SquirrelGod 2:99b1cb0d9f5e 146 template<> inline long double parse_arg<long double>(const char *arg, const char **next) {
SquirrelGod 2:99b1cb0d9f5e 147 return strtod(arg,const_cast<char**>(next));
SquirrelGod 2:99b1cb0d9f5e 148 }
SquirrelGod 2:99b1cb0d9f5e 149
SquirrelGod 2:99b1cb0d9f5e 150 /* string */
SquirrelGod 2:99b1cb0d9f5e 151
SquirrelGod 2:99b1cb0d9f5e 152 template<> inline char *parse_arg<char*>(const char *arg, const char **next) {
SquirrelGod 2:99b1cb0d9f5e 153 const char *ptr = arg;
SquirrelGod 2:99b1cb0d9f5e 154 char *res = NULL;
SquirrelGod 2:99b1cb0d9f5e 155 if(*arg == '"') {
SquirrelGod 2:99b1cb0d9f5e 156 /* quoted string */
SquirrelGod 2:99b1cb0d9f5e 157 ptr = ++arg;
SquirrelGod 2:99b1cb0d9f5e 158 int len = 0;
SquirrelGod 2:99b1cb0d9f5e 159 /* find the end (and length) of the quoted string */
SquirrelGod 2:99b1cb0d9f5e 160 for(char c = *ptr; c != 0 && c != '"'; c = *++ptr) {
SquirrelGod 2:99b1cb0d9f5e 161 len++;
SquirrelGod 2:99b1cb0d9f5e 162 if(c == '\\') {
SquirrelGod 2:99b1cb0d9f5e 163 ptr++;
SquirrelGod 2:99b1cb0d9f5e 164 }
SquirrelGod 2:99b1cb0d9f5e 165 }
SquirrelGod 2:99b1cb0d9f5e 166 /* copy the quoted string, and unescape characters */
SquirrelGod 2:99b1cb0d9f5e 167 if(len != 0) {
SquirrelGod 2:99b1cb0d9f5e 168 res = new char[len+1];
SquirrelGod 2:99b1cb0d9f5e 169 char *resptr = res;
SquirrelGod 2:99b1cb0d9f5e 170 while(arg != ptr) {
SquirrelGod 2:99b1cb0d9f5e 171 *resptr++ = parse_char(arg, &arg);
SquirrelGod 2:99b1cb0d9f5e 172 }
SquirrelGod 2:99b1cb0d9f5e 173 *resptr = 0;
SquirrelGod 2:99b1cb0d9f5e 174 }
SquirrelGod 2:99b1cb0d9f5e 175 } else {
SquirrelGod 2:99b1cb0d9f5e 176 /* unquoted string */
SquirrelGod 2:99b1cb0d9f5e 177 while(isalnum(*ptr) || *ptr=='_') {
SquirrelGod 2:99b1cb0d9f5e 178 ptr++;
SquirrelGod 2:99b1cb0d9f5e 179 }
SquirrelGod 2:99b1cb0d9f5e 180 int len = ptr-arg;
SquirrelGod 2:99b1cb0d9f5e 181 if(len!=0) {
SquirrelGod 2:99b1cb0d9f5e 182 res = new char[len+1];
SquirrelGod 2:99b1cb0d9f5e 183 memcpy(res, arg, len);
SquirrelGod 2:99b1cb0d9f5e 184 res[len] = 0;
SquirrelGod 2:99b1cb0d9f5e 185 }
SquirrelGod 2:99b1cb0d9f5e 186 }
SquirrelGod 2:99b1cb0d9f5e 187
SquirrelGod 2:99b1cb0d9f5e 188 if(next != NULL) {
SquirrelGod 2:99b1cb0d9f5e 189 *next = ptr;
SquirrelGod 2:99b1cb0d9f5e 190 }
SquirrelGod 2:99b1cb0d9f5e 191 return res;
SquirrelGod 2:99b1cb0d9f5e 192 }
SquirrelGod 2:99b1cb0d9f5e 193
SquirrelGod 2:99b1cb0d9f5e 194 template<> inline const char *parse_arg<const char*>(const char *arg, const char **next) {
SquirrelGod 2:99b1cb0d9f5e 195 return parse_arg<char*>(arg,next);
SquirrelGod 2:99b1cb0d9f5e 196 }
SquirrelGod 2:99b1cb0d9f5e 197
SquirrelGod 2:99b1cb0d9f5e 198 /* Pins */
SquirrelGod 2:99b1cb0d9f5e 199
SquirrelGod 2:99b1cb0d9f5e 200
SquirrelGod 2:99b1cb0d9f5e 201 inline PinName parse_pins(const char *str) {
SquirrelGod 2:99b1cb0d9f5e 202 const PinName pin_names[] = {p5, p6, p7, p8, p9, p10, p11, p12, p13, p14
SquirrelGod 2:99b1cb0d9f5e 203 , p15, p16, p17, p18, p19, p20, p21, p22, p23
SquirrelGod 2:99b1cb0d9f5e 204 , p24, p25, p26, p27, p28, p29, p30};
SquirrelGod 2:99b1cb0d9f5e 205
SquirrelGod 2:99b1cb0d9f5e 206 if(str[0] == 'P') { // Pn_n
SquirrelGod 2:99b1cb0d9f5e 207 uint32_t port = str[1] - '0';
SquirrelGod 2:99b1cb0d9f5e 208 uint32_t pin = str[3] - '0'; // Pn_n
SquirrelGod 2:99b1cb0d9f5e 209 uint32_t pin2 = str[4] - '0'; // Pn_nn
SquirrelGod 2:99b1cb0d9f5e 210 if(pin2 <= 9) {
SquirrelGod 2:99b1cb0d9f5e 211 pin = pin * 10 + pin2;
SquirrelGod 2:99b1cb0d9f5e 212 }
SquirrelGod 2:99b1cb0d9f5e 213 #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368)
SquirrelGod 2:99b1cb0d9f5e 214 return (PinName)(LPC_GPIO0_BASE + port * 32 + pin);
SquirrelGod 2:99b1cb0d9f5e 215 #elif defined(TARGET_LPC11U24)
SquirrelGod 2:99b1cb0d9f5e 216 return (PinName)(port * 32 + pin);
SquirrelGod 2:99b1cb0d9f5e 217 #endif
SquirrelGod 2:99b1cb0d9f5e 218 } else if(str[0] == 'p') { // pn
SquirrelGod 2:99b1cb0d9f5e 219 uint32_t pin = str[1] - '0'; // pn
SquirrelGod 2:99b1cb0d9f5e 220 uint32_t pin2 = str[2] - '0'; // pnn
SquirrelGod 2:99b1cb0d9f5e 221 if(pin2 <= 9) {
SquirrelGod 2:99b1cb0d9f5e 222 pin = pin * 10 + pin2;
SquirrelGod 2:99b1cb0d9f5e 223 }
SquirrelGod 2:99b1cb0d9f5e 224 if(pin < 5 || pin > 30) {
SquirrelGod 2:99b1cb0d9f5e 225 return NC;
SquirrelGod 2:99b1cb0d9f5e 226 }
SquirrelGod 2:99b1cb0d9f5e 227 return pin_names[pin - 5];
SquirrelGod 2:99b1cb0d9f5e 228 } else if(str[0] == 'L') { // LEDn
SquirrelGod 2:99b1cb0d9f5e 229 switch(str[3]) {
SquirrelGod 2:99b1cb0d9f5e 230 case '1' : return LED1;
SquirrelGod 2:99b1cb0d9f5e 231 case '2' : return LED2;
SquirrelGod 2:99b1cb0d9f5e 232 case '3' : return LED3;
SquirrelGod 2:99b1cb0d9f5e 233 case '4' : return LED4;
SquirrelGod 2:99b1cb0d9f5e 234 }
SquirrelGod 2:99b1cb0d9f5e 235 } else if(str[0] == 'U') { // USB?X
SquirrelGod 2:99b1cb0d9f5e 236 switch(str[3]) {
SquirrelGod 2:99b1cb0d9f5e 237 case 'T' : return USBTX;
SquirrelGod 2:99b1cb0d9f5e 238 case 'R' : return USBRX;
SquirrelGod 2:99b1cb0d9f5e 239 }
SquirrelGod 2:99b1cb0d9f5e 240 }
SquirrelGod 2:99b1cb0d9f5e 241 return NC;
SquirrelGod 2:99b1cb0d9f5e 242 }
SquirrelGod 2:99b1cb0d9f5e 243
SquirrelGod 2:99b1cb0d9f5e 244 template<> inline PinName parse_arg<PinName>(const char *arg, const char **next) {
SquirrelGod 2:99b1cb0d9f5e 245 const char *ptr = arg;
SquirrelGod 2:99b1cb0d9f5e 246 PinName pinname = NC;
SquirrelGod 2:99b1cb0d9f5e 247 while(isalnum(*ptr) || *ptr=='_') {
SquirrelGod 2:99b1cb0d9f5e 248 ptr++;
SquirrelGod 2:99b1cb0d9f5e 249 }
SquirrelGod 2:99b1cb0d9f5e 250 int len = ptr-arg;
SquirrelGod 2:99b1cb0d9f5e 251 if(len!=0) {
SquirrelGod 2:99b1cb0d9f5e 252 pinname = parse_pins(arg);
SquirrelGod 2:99b1cb0d9f5e 253
SquirrelGod 2:99b1cb0d9f5e 254 }
SquirrelGod 2:99b1cb0d9f5e 255 if(next != NULL) {
SquirrelGod 2:99b1cb0d9f5e 256 *next = ptr;
SquirrelGod 2:99b1cb0d9f5e 257 }
SquirrelGod 2:99b1cb0d9f5e 258 return pinname;
SquirrelGod 2:99b1cb0d9f5e 259 }
SquirrelGod 2:99b1cb0d9f5e 260
SquirrelGod 2:99b1cb0d9f5e 261
SquirrelGod 2:99b1cb0d9f5e 262 /* Function write_result
SquirrelGod 2:99b1cb0d9f5e 263 * Writes a value in to a result string in an appropriate manner
SquirrelGod 2:99b1cb0d9f5e 264 *
SquirrelGod 2:99b1cb0d9f5e 265 * Variable
SquirrelGod 2:99b1cb0d9f5e 266 * val - The value to write
SquirrelGod 2:99b1cb0d9f5e 267 * result - A pointer to the array to write the value into
SquirrelGod 2:99b1cb0d9f5e 268 */
SquirrelGod 2:99b1cb0d9f5e 269 template<typename T> void write_result(T val, char *result);
SquirrelGod 2:99b1cb0d9f5e 270
SquirrelGod 2:99b1cb0d9f5e 271 /* signed integer types */
SquirrelGod 2:99b1cb0d9f5e 272
SquirrelGod 2:99b1cb0d9f5e 273 template<> inline void write_result<char>(char val, char *result) {
SquirrelGod 2:99b1cb0d9f5e 274 result[0] = val;
SquirrelGod 2:99b1cb0d9f5e 275 result[1] = '\0';
SquirrelGod 2:99b1cb0d9f5e 276 }
SquirrelGod 2:99b1cb0d9f5e 277
SquirrelGod 2:99b1cb0d9f5e 278 template<> inline void write_result<short int>(short int val, char *result) {
SquirrelGod 2:99b1cb0d9f5e 279 sprintf(result, "%hi", val);
SquirrelGod 2:99b1cb0d9f5e 280 }
SquirrelGod 2:99b1cb0d9f5e 281
SquirrelGod 2:99b1cb0d9f5e 282 template<> inline void write_result<int>(int val, char *result) {
SquirrelGod 2:99b1cb0d9f5e 283 sprintf(result, "%i", val);
SquirrelGod 2:99b1cb0d9f5e 284 }
SquirrelGod 2:99b1cb0d9f5e 285
SquirrelGod 2:99b1cb0d9f5e 286 template<> inline void write_result<long int>(long int val, char *result) {
SquirrelGod 2:99b1cb0d9f5e 287 sprintf(result, "%li", val);
SquirrelGod 2:99b1cb0d9f5e 288 }
SquirrelGod 2:99b1cb0d9f5e 289
SquirrelGod 2:99b1cb0d9f5e 290 template<> inline void write_result<long long int>(long long int val, char *result) {
SquirrelGod 2:99b1cb0d9f5e 291 sprintf(result, "%lli", val);
SquirrelGod 2:99b1cb0d9f5e 292 }
SquirrelGod 2:99b1cb0d9f5e 293
SquirrelGod 2:99b1cb0d9f5e 294 /* unsigned integer types */
SquirrelGod 2:99b1cb0d9f5e 295
SquirrelGod 2:99b1cb0d9f5e 296 template<> inline void write_result<unsigned char>(unsigned char val, char *result) {
SquirrelGod 2:99b1cb0d9f5e 297 result[0] = val;
SquirrelGod 2:99b1cb0d9f5e 298 result[1] = '\0';
SquirrelGod 2:99b1cb0d9f5e 299 }
SquirrelGod 2:99b1cb0d9f5e 300
SquirrelGod 2:99b1cb0d9f5e 301 template<> inline void write_result<unsigned short int>(unsigned short int val, char *result) {
SquirrelGod 2:99b1cb0d9f5e 302 sprintf(result, "%hu", val);
SquirrelGod 2:99b1cb0d9f5e 303 }
SquirrelGod 2:99b1cb0d9f5e 304
SquirrelGod 2:99b1cb0d9f5e 305 template<> inline void write_result<unsigned int>(unsigned int val, char *result) {
SquirrelGod 2:99b1cb0d9f5e 306 sprintf(result, "%u", val);
SquirrelGod 2:99b1cb0d9f5e 307 }
SquirrelGod 2:99b1cb0d9f5e 308
SquirrelGod 2:99b1cb0d9f5e 309 template<> inline void write_result<unsigned long int>(unsigned long int val, char *result) {
SquirrelGod 2:99b1cb0d9f5e 310 sprintf(result, "%lu", val);
SquirrelGod 2:99b1cb0d9f5e 311 }
SquirrelGod 2:99b1cb0d9f5e 312
SquirrelGod 2:99b1cb0d9f5e 313 template<> inline void write_result<unsigned long long int>(unsigned long long int val, char *result) {
SquirrelGod 2:99b1cb0d9f5e 314 sprintf(result, "%llu", val);
SquirrelGod 2:99b1cb0d9f5e 315 }
SquirrelGod 2:99b1cb0d9f5e 316
SquirrelGod 2:99b1cb0d9f5e 317 /* floating types */
SquirrelGod 2:99b1cb0d9f5e 318
SquirrelGod 2:99b1cb0d9f5e 319 template<> inline void write_result<float>(float val, char *result) {
SquirrelGod 2:99b1cb0d9f5e 320 sprintf(result, "%.17g", val);
SquirrelGod 2:99b1cb0d9f5e 321 }
SquirrelGod 2:99b1cb0d9f5e 322
SquirrelGod 2:99b1cb0d9f5e 323 template<> inline void write_result<double>(double val, char *result) {
SquirrelGod 2:99b1cb0d9f5e 324 sprintf(result, "%.17g", val);
SquirrelGod 2:99b1cb0d9f5e 325 }
SquirrelGod 2:99b1cb0d9f5e 326
SquirrelGod 2:99b1cb0d9f5e 327 template<> inline void write_result<long double>(long double val, char *result) {
SquirrelGod 2:99b1cb0d9f5e 328 sprintf(result, "%.17Lg", val);
SquirrelGod 2:99b1cb0d9f5e 329 }
SquirrelGod 2:99b1cb0d9f5e 330
SquirrelGod 2:99b1cb0d9f5e 331
SquirrelGod 2:99b1cb0d9f5e 332 /* string */
SquirrelGod 2:99b1cb0d9f5e 333
SquirrelGod 2:99b1cb0d9f5e 334 template<> inline void write_result<char*>(char *val, char *result) {
SquirrelGod 2:99b1cb0d9f5e 335 if(val==NULL) {
SquirrelGod 2:99b1cb0d9f5e 336 result[0] = 0;
SquirrelGod 2:99b1cb0d9f5e 337 } else {
SquirrelGod 2:99b1cb0d9f5e 338 strcpy(result, val);
SquirrelGod 2:99b1cb0d9f5e 339 }
SquirrelGod 2:99b1cb0d9f5e 340 }
SquirrelGod 2:99b1cb0d9f5e 341
SquirrelGod 2:99b1cb0d9f5e 342 template<> inline void write_result<const char*>(const char *val, char *result) {
SquirrelGod 2:99b1cb0d9f5e 343 if(val==NULL) {
SquirrelGod 2:99b1cb0d9f5e 344 result[0] = 0;
SquirrelGod 2:99b1cb0d9f5e 345 } else {
SquirrelGod 2:99b1cb0d9f5e 346 strcpy(result, val);
SquirrelGod 2:99b1cb0d9f5e 347 }
SquirrelGod 2:99b1cb0d9f5e 348 }
SquirrelGod 2:99b1cb0d9f5e 349
SquirrelGod 2:99b1cb0d9f5e 350
SquirrelGod 2:99b1cb0d9f5e 351 inline const char *next_arg(const char* next) {
SquirrelGod 2:99b1cb0d9f5e 352 while(*next == ' ') next++;
SquirrelGod 2:99b1cb0d9f5e 353 if(*next == ',' || *next == '?') next++;
SquirrelGod 2:99b1cb0d9f5e 354 while(*next == ' ') next++;
SquirrelGod 2:99b1cb0d9f5e 355 return next;
SquirrelGod 2:99b1cb0d9f5e 356 }
SquirrelGod 2:99b1cb0d9f5e 357
SquirrelGod 2:99b1cb0d9f5e 358
SquirrelGod 2:99b1cb0d9f5e 359 /* Function rpc_method_caller
SquirrelGod 2:99b1cb0d9f5e 360 */
SquirrelGod 2:99b1cb0d9f5e 361 template<class T, void (T::*member)(const char *,char *)>
SquirrelGod 2:99b1cb0d9f5e 362 void rpc_method_caller(Base *this_ptr, const char *arguments, char *result) {
SquirrelGod 2:99b1cb0d9f5e 363 (static_cast<T*>(this_ptr)->*member)(arguments,result);
SquirrelGod 2:99b1cb0d9f5e 364 }
SquirrelGod 2:99b1cb0d9f5e 365
SquirrelGod 2:99b1cb0d9f5e 366
SquirrelGod 2:99b1cb0d9f5e 367 /* Function rpc_method_caller
SquirrelGod 2:99b1cb0d9f5e 368 */
SquirrelGod 2:99b1cb0d9f5e 369 template<class T, void (T::*member)()>
SquirrelGod 2:99b1cb0d9f5e 370 void rpc_method_caller(Base *this_ptr, const char *arguments, char *result) {
SquirrelGod 2:99b1cb0d9f5e 371 (static_cast<T*>(this_ptr)->*member)();
SquirrelGod 2:99b1cb0d9f5e 372 if(result != NULL) {
SquirrelGod 2:99b1cb0d9f5e 373 result[0] = '\0';
SquirrelGod 2:99b1cb0d9f5e 374 }
SquirrelGod 2:99b1cb0d9f5e 375 }
SquirrelGod 2:99b1cb0d9f5e 376
SquirrelGod 2:99b1cb0d9f5e 377
SquirrelGod 2:99b1cb0d9f5e 378 /* Function rpc_method_caller
SquirrelGod 2:99b1cb0d9f5e 379 */
SquirrelGod 2:99b1cb0d9f5e 380 template<class T, typename A1, void (T::*member)(A1)>
SquirrelGod 2:99b1cb0d9f5e 381 void rpc_method_caller(Base *this_ptr, const char *arguments, char *result) {
SquirrelGod 2:99b1cb0d9f5e 382
SquirrelGod 2:99b1cb0d9f5e 383 const char *next = arguments;
SquirrelGod 2:99b1cb0d9f5e 384 A1 arg1 = parse_arg<A1>(next_arg(next),NULL);
SquirrelGod 2:99b1cb0d9f5e 385
SquirrelGod 2:99b1cb0d9f5e 386 (static_cast<T*>(this_ptr)->*member)(arg1);
SquirrelGod 2:99b1cb0d9f5e 387 if(result != NULL) {
SquirrelGod 2:99b1cb0d9f5e 388 result[0] = '\0';
SquirrelGod 2:99b1cb0d9f5e 389 }
SquirrelGod 2:99b1cb0d9f5e 390 }
SquirrelGod 2:99b1cb0d9f5e 391
SquirrelGod 2:99b1cb0d9f5e 392
SquirrelGod 2:99b1cb0d9f5e 393 /* Function rpc_method_caller
SquirrelGod 2:99b1cb0d9f5e 394 */
SquirrelGod 2:99b1cb0d9f5e 395 template<class T, typename A1, typename A2, void (T::*member)(A1,A2)>
SquirrelGod 2:99b1cb0d9f5e 396 void rpc_method_caller(Base *this_ptr, const char *arguments, char *result) {
SquirrelGod 2:99b1cb0d9f5e 397
SquirrelGod 2:99b1cb0d9f5e 398 const char *next = arguments;
SquirrelGod 2:99b1cb0d9f5e 399 A1 arg1 = parse_arg<A1>(next_arg(next),&next);
SquirrelGod 2:99b1cb0d9f5e 400 A2 arg2 = parse_arg<A2>(next_arg(next),NULL);
SquirrelGod 2:99b1cb0d9f5e 401
SquirrelGod 2:99b1cb0d9f5e 402 (static_cast<T*>(this_ptr)->*member)(arg1,arg2);
SquirrelGod 2:99b1cb0d9f5e 403 if(result != NULL) {
SquirrelGod 2:99b1cb0d9f5e 404 result[0] = '\0';
SquirrelGod 2:99b1cb0d9f5e 405 }
SquirrelGod 2:99b1cb0d9f5e 406 }
SquirrelGod 2:99b1cb0d9f5e 407
SquirrelGod 2:99b1cb0d9f5e 408
SquirrelGod 2:99b1cb0d9f5e 409 /* Function rpc_method_caller
SquirrelGod 2:99b1cb0d9f5e 410 */
SquirrelGod 2:99b1cb0d9f5e 411 template<class T, typename A1, typename A2, typename A3, void (T::*member)(A1,A2,A3)>
SquirrelGod 2:99b1cb0d9f5e 412 void rpc_method_caller(Base *this_ptr, const char *arguments, char *result) {
SquirrelGod 2:99b1cb0d9f5e 413
SquirrelGod 2:99b1cb0d9f5e 414 const char *next = arguments;
SquirrelGod 2:99b1cb0d9f5e 415 A1 arg1 = parse_arg<A1>(next_arg(next),&next);
SquirrelGod 2:99b1cb0d9f5e 416 A2 arg2 = parse_arg<A2>(next_arg(next),&next);
SquirrelGod 2:99b1cb0d9f5e 417 A3 arg3 = parse_arg<A3>(next_arg(next),NULL);
SquirrelGod 2:99b1cb0d9f5e 418
SquirrelGod 2:99b1cb0d9f5e 419 (static_cast<T*>(this_ptr)->*member)(arg1,arg2,arg3);
SquirrelGod 2:99b1cb0d9f5e 420 if(result != NULL) {
SquirrelGod 2:99b1cb0d9f5e 421 result[0] = '\0';
SquirrelGod 2:99b1cb0d9f5e 422 }
SquirrelGod 2:99b1cb0d9f5e 423 }
SquirrelGod 2:99b1cb0d9f5e 424
SquirrelGod 2:99b1cb0d9f5e 425
SquirrelGod 2:99b1cb0d9f5e 426 /* Function rpc_method_caller
SquirrelGod 2:99b1cb0d9f5e 427 */
SquirrelGod 2:99b1cb0d9f5e 428 template<typename R, class T, R (T::*member)()>
SquirrelGod 2:99b1cb0d9f5e 429 void rpc_method_caller(Base *this_ptr, const char *arguments, char *result) {
SquirrelGod 2:99b1cb0d9f5e 430 R res = (static_cast<T*>(this_ptr)->*member)();
SquirrelGod 2:99b1cb0d9f5e 431 if(result != NULL) {
SquirrelGod 2:99b1cb0d9f5e 432 write_result<R>(res, result);
SquirrelGod 2:99b1cb0d9f5e 433 }
SquirrelGod 2:99b1cb0d9f5e 434 }
SquirrelGod 2:99b1cb0d9f5e 435
SquirrelGod 2:99b1cb0d9f5e 436
SquirrelGod 2:99b1cb0d9f5e 437 /* Function rpc_method_caller
SquirrelGod 2:99b1cb0d9f5e 438 */
SquirrelGod 2:99b1cb0d9f5e 439 template<typename R, class T, typename A1, R (T::*member)(A1)>
SquirrelGod 2:99b1cb0d9f5e 440 void rpc_method_caller(Base *this_ptr, const char *arguments, char *result) {
SquirrelGod 2:99b1cb0d9f5e 441
SquirrelGod 2:99b1cb0d9f5e 442 const char *next = arguments;
SquirrelGod 2:99b1cb0d9f5e 443 A1 arg1 = parse_arg<A1>(next_arg(next),NULL);
SquirrelGod 2:99b1cb0d9f5e 444
SquirrelGod 2:99b1cb0d9f5e 445 R res = (static_cast<T*>(this_ptr)->*member)(arg1);
SquirrelGod 2:99b1cb0d9f5e 446 if(result != NULL) {
SquirrelGod 2:99b1cb0d9f5e 447 write_result<R>(res, result);
SquirrelGod 2:99b1cb0d9f5e 448 }
SquirrelGod 2:99b1cb0d9f5e 449 }
SquirrelGod 2:99b1cb0d9f5e 450
SquirrelGod 2:99b1cb0d9f5e 451
SquirrelGod 2:99b1cb0d9f5e 452 /* Function rpc_method_caller
SquirrelGod 2:99b1cb0d9f5e 453 */
SquirrelGod 2:99b1cb0d9f5e 454 template<typename R, class T, typename A1, typename A2, R (T::*member)(A1,A2)>
SquirrelGod 2:99b1cb0d9f5e 455 void rpc_method_caller(Base *this_ptr, const char *arguments, char *result) {
SquirrelGod 2:99b1cb0d9f5e 456
SquirrelGod 2:99b1cb0d9f5e 457 const char *next = arguments;
SquirrelGod 2:99b1cb0d9f5e 458 A1 arg1 = parse_arg<A1>(next_arg(next),&next);
SquirrelGod 2:99b1cb0d9f5e 459 A2 arg2 = parse_arg<A2>(next_arg(next),NULL);
SquirrelGod 2:99b1cb0d9f5e 460
SquirrelGod 2:99b1cb0d9f5e 461 R res = (static_cast<T*>(this_ptr)->*member)(arg1,arg2);
SquirrelGod 2:99b1cb0d9f5e 462 if(result != NULL) {
SquirrelGod 2:99b1cb0d9f5e 463 write_result<R>(res, result);
SquirrelGod 2:99b1cb0d9f5e 464 }
SquirrelGod 2:99b1cb0d9f5e 465 }
SquirrelGod 2:99b1cb0d9f5e 466
SquirrelGod 2:99b1cb0d9f5e 467
SquirrelGod 2:99b1cb0d9f5e 468 /* Function rpc_method_caller
SquirrelGod 2:99b1cb0d9f5e 469 */
SquirrelGod 2:99b1cb0d9f5e 470 template<typename R, class T, typename A1, typename A2, typename A3, R (T::*member)(A1,A2,A3)>
SquirrelGod 2:99b1cb0d9f5e 471 void rpc_method_caller(Base *this_ptr, const char *arguments, char *result) {
SquirrelGod 2:99b1cb0d9f5e 472
SquirrelGod 2:99b1cb0d9f5e 473 const char *next = arguments;
SquirrelGod 2:99b1cb0d9f5e 474 A1 arg1 = parse_arg<A1>(next_arg(next),&next);
SquirrelGod 2:99b1cb0d9f5e 475 A2 arg2 = parse_arg<A2>(next_arg(next),&next);
SquirrelGod 2:99b1cb0d9f5e 476 A3 arg3 = parse_arg<A3>(next_arg(next),NULL);
SquirrelGod 2:99b1cb0d9f5e 477
SquirrelGod 2:99b1cb0d9f5e 478 R res = (static_cast<T*>(this_ptr)->*member)(arg1,arg2,arg3);
SquirrelGod 2:99b1cb0d9f5e 479 if(result != NULL) {
SquirrelGod 2:99b1cb0d9f5e 480 write_result<R>(res, result);
SquirrelGod 2:99b1cb0d9f5e 481 }
SquirrelGod 2:99b1cb0d9f5e 482 }
SquirrelGod 2:99b1cb0d9f5e 483
SquirrelGod 2:99b1cb0d9f5e 484
SquirrelGod 2:99b1cb0d9f5e 485 /* Function rpc_function caller
SquirrelGod 2:99b1cb0d9f5e 486 */
SquirrelGod 2:99b1cb0d9f5e 487 template<typename R, R (*func)()>
SquirrelGod 2:99b1cb0d9f5e 488 void rpc_function_caller(const char *arguments, char *result) {
SquirrelGod 2:99b1cb0d9f5e 489 R res = (*func)();
SquirrelGod 2:99b1cb0d9f5e 490 if(result != NULL) {
SquirrelGod 2:99b1cb0d9f5e 491 write_result<R>(res, result);
SquirrelGod 2:99b1cb0d9f5e 492 }
SquirrelGod 2:99b1cb0d9f5e 493 }
SquirrelGod 2:99b1cb0d9f5e 494
SquirrelGod 2:99b1cb0d9f5e 495
SquirrelGod 2:99b1cb0d9f5e 496 /* Function rpc_function caller
SquirrelGod 2:99b1cb0d9f5e 497 */
SquirrelGod 2:99b1cb0d9f5e 498 template<typename R, typename A1, R (*func)(A1)>
SquirrelGod 2:99b1cb0d9f5e 499 void rpc_function_caller(const char *arguments, char *result) {
SquirrelGod 2:99b1cb0d9f5e 500 A1 arg1 = parse_arg<A1>(next_arg(arguments),NULL);
SquirrelGod 2:99b1cb0d9f5e 501 R res = (*func)(arg1);
SquirrelGod 2:99b1cb0d9f5e 502 if(result != NULL) {
SquirrelGod 2:99b1cb0d9f5e 503 write_result<R>(res, result);
SquirrelGod 2:99b1cb0d9f5e 504 }
SquirrelGod 2:99b1cb0d9f5e 505 }
SquirrelGod 2:99b1cb0d9f5e 506
SquirrelGod 2:99b1cb0d9f5e 507
SquirrelGod 2:99b1cb0d9f5e 508 /* Function rpc_function caller
SquirrelGod 2:99b1cb0d9f5e 509 */
SquirrelGod 2:99b1cb0d9f5e 510 template<typename R, typename A1, typename A2, R (*func)(A1,A2)>
SquirrelGod 2:99b1cb0d9f5e 511 void rpc_function_caller(const char *arguments, char *result) {
SquirrelGod 2:99b1cb0d9f5e 512
SquirrelGod 2:99b1cb0d9f5e 513 const char *next = arguments;
SquirrelGod 2:99b1cb0d9f5e 514 A1 arg1 = parse_arg<A1>(next_arg(next),&next);
SquirrelGod 2:99b1cb0d9f5e 515 A2 arg2 = parse_arg<A2>(next_arg(next),NULL);
SquirrelGod 2:99b1cb0d9f5e 516
SquirrelGod 2:99b1cb0d9f5e 517 R res = (*func)(arg1,arg2);
SquirrelGod 2:99b1cb0d9f5e 518 if(result != NULL) {
SquirrelGod 2:99b1cb0d9f5e 519 write_result<R>(res, result);
SquirrelGod 2:99b1cb0d9f5e 520 }
SquirrelGod 2:99b1cb0d9f5e 521 }
SquirrelGod 2:99b1cb0d9f5e 522
SquirrelGod 2:99b1cb0d9f5e 523
SquirrelGod 2:99b1cb0d9f5e 524 /* Function rpc_function caller
SquirrelGod 2:99b1cb0d9f5e 525 */
SquirrelGod 2:99b1cb0d9f5e 526 template<typename R, typename A1, typename A2, typename A3, R (*func)(A1,A2,A3)>
SquirrelGod 2:99b1cb0d9f5e 527 void rpc_function_caller(const char *arguments, char *result) {
SquirrelGod 2:99b1cb0d9f5e 528
SquirrelGod 2:99b1cb0d9f5e 529 const char *next = arguments;
SquirrelGod 2:99b1cb0d9f5e 530 A1 arg1 = parse_arg<A1>(next_arg(next),&next);
SquirrelGod 2:99b1cb0d9f5e 531 A2 arg2 = parse_arg<A2>(next_arg(next),&next);
SquirrelGod 2:99b1cb0d9f5e 532 A3 arg3 = parse_arg<A3>(next_arg(next),NULL);
SquirrelGod 2:99b1cb0d9f5e 533
SquirrelGod 2:99b1cb0d9f5e 534 R res = (*func)(arg1,arg2,arg3);
SquirrelGod 2:99b1cb0d9f5e 535 if(result != NULL) {
SquirrelGod 2:99b1cb0d9f5e 536 write_result<R>(res, result);
SquirrelGod 2:99b1cb0d9f5e 537 }
SquirrelGod 2:99b1cb0d9f5e 538 }
SquirrelGod 2:99b1cb0d9f5e 539
SquirrelGod 2:99b1cb0d9f5e 540
SquirrelGod 2:99b1cb0d9f5e 541 /* Function rpc_function caller
SquirrelGod 2:99b1cb0d9f5e 542 */
SquirrelGod 2:99b1cb0d9f5e 543 template<typename R, typename A1, typename A2, typename A3, typename A4, R (*func)(A1,A2,A3,A4)>
SquirrelGod 2:99b1cb0d9f5e 544 void rpc_function_caller(const char *arguments, char *result) {
SquirrelGod 2:99b1cb0d9f5e 545
SquirrelGod 2:99b1cb0d9f5e 546 const char *next = arguments;
SquirrelGod 2:99b1cb0d9f5e 547 A1 arg1 = parse_arg<A1>(next_arg(next),&next);
SquirrelGod 2:99b1cb0d9f5e 548 A2 arg2 = parse_arg<A2>(next_arg(next),&next);
SquirrelGod 2:99b1cb0d9f5e 549 A3 arg3 = parse_arg<A3>(next_arg(next),&next);
SquirrelGod 2:99b1cb0d9f5e 550 A4 arg4 = parse_arg<A4>(next_arg(next),NULL);
SquirrelGod 2:99b1cb0d9f5e 551
SquirrelGod 2:99b1cb0d9f5e 552 R res = (*func)(arg1,arg2,arg3,arg4);
SquirrelGod 2:99b1cb0d9f5e 553 if(result != NULL) {
SquirrelGod 2:99b1cb0d9f5e 554 write_result<R>(res, result);
SquirrelGod 2:99b1cb0d9f5e 555 }
SquirrelGod 2:99b1cb0d9f5e 556 }
SquirrelGod 2:99b1cb0d9f5e 557
SquirrelGod 2:99b1cb0d9f5e 558
SquirrelGod 2:99b1cb0d9f5e 559 struct rpc_method {
SquirrelGod 2:99b1cb0d9f5e 560 const char *name;
SquirrelGod 2:99b1cb0d9f5e 561 typedef void (*caller_t)(Base*, const char*, char*);
SquirrelGod 2:99b1cb0d9f5e 562 typedef const struct rpc_method *(*super_t)(Base*);
SquirrelGod 2:99b1cb0d9f5e 563 union {
SquirrelGod 2:99b1cb0d9f5e 564 caller_t caller;
SquirrelGod 2:99b1cb0d9f5e 565 super_t super;
SquirrelGod 2:99b1cb0d9f5e 566 };
SquirrelGod 2:99b1cb0d9f5e 567 };
SquirrelGod 2:99b1cb0d9f5e 568
SquirrelGod 2:99b1cb0d9f5e 569 template<class C>
SquirrelGod 2:99b1cb0d9f5e 570 const struct rpc_method *rpc_super(Base *this_ptr) {
SquirrelGod 2:99b1cb0d9f5e 571 return static_cast<C*>(this_ptr)->C::get_rpc_methods();
SquirrelGod 2:99b1cb0d9f5e 572 }
SquirrelGod 2:99b1cb0d9f5e 573
SquirrelGod 2:99b1cb0d9f5e 574 #define RPC_METHOD_END { NULL, NULL }
SquirrelGod 2:99b1cb0d9f5e 575 #define RPC_METHOD_SUPER(C) { NULL, (rpc_method::caller_t)(rpc_method::super_t)rpc_super<C> }
SquirrelGod 2:99b1cb0d9f5e 576
SquirrelGod 2:99b1cb0d9f5e 577 /* Function rpc
SquirrelGod 2:99b1cb0d9f5e 578 * Parse a string describing a call and then do it
SquirrelGod 2:99b1cb0d9f5e 579 *
SquirrelGod 2:99b1cb0d9f5e 580 * Variables
SquirrelGod 2:99b1cb0d9f5e 581 * call - A pointer to a string describing the call, which has
SquirrelGod 2:99b1cb0d9f5e 582 * the form /object/method arg ... argn. Arguments are
SquirrelGod 2:99b1cb0d9f5e 583 * delimited by space characters, and the string is terminated
SquirrelGod 2:99b1cb0d9f5e 584 * by a null character.
SquirrelGod 2:99b1cb0d9f5e 585 * result - A pointer to an array to write the result into.
SquirrelGod 2:99b1cb0d9f5e 586 */
SquirrelGod 2:99b1cb0d9f5e 587 bool rpc(const char *buf, char *result = 0);
SquirrelGod 2:99b1cb0d9f5e 588
SquirrelGod 2:99b1cb0d9f5e 589
SquirrelGod 2:99b1cb0d9f5e 590 } // namespace mbed
SquirrelGod 2:99b1cb0d9f5e 591
SquirrelGod 2:99b1cb0d9f5e 592 #endif