mbed client

Fork of simple-mbed-client by sandbox

Committer:
janjongboom
Date:
Sun May 15 20:28:07 2016 +0000
Revision:
1:75015f627e89
Parent:
0:9fa3f3028773
Child:
2:0a015df677a4
Add some overloads for update callbacks

Who changed what in which revision?

UserRevisionLine numberNew contents of line
janjongboom 0:9fa3f3028773 1 /*
janjongboom 0:9fa3f3028773 2 * Copyright (c) 2015 ARM Limited. All rights reserved.
janjongboom 0:9fa3f3028773 3 * SPDX-License-Identifier: Apache-2.0
janjongboom 0:9fa3f3028773 4 * Licensed under the Apache License, Version 2.0 (the License); you may
janjongboom 0:9fa3f3028773 5 * not use this file except in compliance with the License.
janjongboom 0:9fa3f3028773 6 * You may obtain a copy of the License at
janjongboom 0:9fa3f3028773 7 *
janjongboom 0:9fa3f3028773 8 * http://www.apache.org/licenses/LICENSE-2.0
janjongboom 0:9fa3f3028773 9 *
janjongboom 0:9fa3f3028773 10 * Unless required by applicable law or agreed to in writing, software
janjongboom 0:9fa3f3028773 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
janjongboom 0:9fa3f3028773 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
janjongboom 0:9fa3f3028773 13 * See the License for the specific language governing permissions and
janjongboom 0:9fa3f3028773 14 * limitations under the License.
janjongboom 0:9fa3f3028773 15 */
janjongboom 0:9fa3f3028773 16
janjongboom 0:9fa3f3028773 17 #ifndef __SIMPLE_MBED_CLIENT_H__
janjongboom 0:9fa3f3028773 18 #define __SIMPLE_MBED_CLIENT_H__
janjongboom 0:9fa3f3028773 19
janjongboom 0:9fa3f3028773 20 #include <map>
janjongboom 0:9fa3f3028773 21 #include <string>
janjongboom 0:9fa3f3028773 22 #include <sstream>
janjongboom 0:9fa3f3028773 23 #include <vector>
janjongboom 0:9fa3f3028773 24 #include "mbed-client-classic/m2mnetwork.h"
janjongboom 0:9fa3f3028773 25 #include "mbed-client-wrapper.h"
janjongboom 0:9fa3f3028773 26
janjongboom 0:9fa3f3028773 27 using namespace std;
janjongboom 0:9fa3f3028773 28
janjongboom 0:9fa3f3028773 29 class SimpleMbedClientBase {
janjongboom 0:9fa3f3028773 30 public:
janjongboom 0:9fa3f3028773 31 SimpleMbedClientBase() : output(USBTX, USBRX) {
janjongboom 0:9fa3f3028773 32
janjongboom 0:9fa3f3028773 33 }
janjongboom 0:9fa3f3028773 34 ~SimpleMbedClientBase() {}
janjongboom 0:9fa3f3028773 35
janjongboom 0:9fa3f3028773 36 struct MbedClientOptions get_default_options() {
janjongboom 0:9fa3f3028773 37 struct MbedClientOptions options;
janjongboom 0:9fa3f3028773 38 options.Manufacturer = "Manufacturer_String";
janjongboom 0:9fa3f3028773 39 options.Type = "Type_String";
janjongboom 0:9fa3f3028773 40 options.ModelNumber = "ModelNumber_String";
janjongboom 0:9fa3f3028773 41 options.SerialNumber = "SerialNumber_String";
janjongboom 0:9fa3f3028773 42 options.DeviceType = "test";
janjongboom 0:9fa3f3028773 43 options.SocketMode = M2MInterface::UDP;
janjongboom 0:9fa3f3028773 44 options.ServerAddress = "coap://api.connector.mbed.com:5684";
janjongboom 0:9fa3f3028773 45
janjongboom 0:9fa3f3028773 46 return options;
janjongboom 0:9fa3f3028773 47 }
janjongboom 0:9fa3f3028773 48
janjongboom 0:9fa3f3028773 49 bool init(NetworkInterface* iface) {
janjongboom 0:9fa3f3028773 50 // does this automatically handle everything? weird yo.
janjongboom 0:9fa3f3028773 51 M2MNetwork network(iface);
janjongboom 0:9fa3f3028773 52
janjongboom 0:9fa3f3028773 53 output.printf("[SMC] Device name %s\r\n", MBED_ENDPOINT_NAME);
janjongboom 0:9fa3f3028773 54
janjongboom 0:9fa3f3028773 55 // Create endpoint interface to manage register and unregister
janjongboom 0:9fa3f3028773 56 client->create_interface();
janjongboom 0:9fa3f3028773 57
janjongboom 0:9fa3f3028773 58 // Create Objects of varying types, see simpleclient.h for more details on implementation.
janjongboom 0:9fa3f3028773 59 M2MSecurity* register_object = client->create_register_object(); // server object specifying connector info
janjongboom 0:9fa3f3028773 60 M2MDevice* device_object = client->create_device_object(); // device resources object
janjongboom 0:9fa3f3028773 61
janjongboom 0:9fa3f3028773 62 // Create list of Objects to register
janjongboom 0:9fa3f3028773 63 M2MObjectList object_list;
janjongboom 0:9fa3f3028773 64
janjongboom 0:9fa3f3028773 65 // Add objects to list
janjongboom 0:9fa3f3028773 66 object_list.push_back(device_object);
janjongboom 0:9fa3f3028773 67
janjongboom 0:9fa3f3028773 68 map<string, M2MObject*>::iterator it;
janjongboom 0:9fa3f3028773 69 for (it = objects.begin(); it != objects.end(); it++)
janjongboom 0:9fa3f3028773 70 {
janjongboom 0:9fa3f3028773 71 object_list.push_back(it->second);
janjongboom 0:9fa3f3028773 72 }
janjongboom 0:9fa3f3028773 73
janjongboom 0:9fa3f3028773 74 // Set endpoint registration object
janjongboom 0:9fa3f3028773 75 client->set_register_object(register_object);
janjongboom 0:9fa3f3028773 76
janjongboom 0:9fa3f3028773 77 // Issue register command.
janjongboom 0:9fa3f3028773 78 client->test_register(register_object, object_list);
janjongboom 0:9fa3f3028773 79
janjongboom 0:9fa3f3028773 80 // @todo: no idea if this works
janjongboom 0:9fa3f3028773 81 Ticker updateRegister;
janjongboom 0:9fa3f3028773 82 updateRegister.attach(client, &MbedClient::test_update_register, 25.0f);
janjongboom 0:9fa3f3028773 83
janjongboom 0:9fa3f3028773 84 return true;
janjongboom 0:9fa3f3028773 85 }
janjongboom 0:9fa3f3028773 86
janjongboom 0:9fa3f3028773 87 bool setup(NetworkInterface* iface) {
janjongboom 0:9fa3f3028773 88 output.printf("[SMC] In mbed_client_setup\r\n");
janjongboom 0:9fa3f3028773 89 if (client) {
janjongboom 0:9fa3f3028773 90 output.printf("[SMC] [ERROR] mbed_client_setup called, but mbed_client is already instantiated\r\n");
janjongboom 0:9fa3f3028773 91 return false;
janjongboom 0:9fa3f3028773 92 }
janjongboom 0:9fa3f3028773 93
janjongboom 0:9fa3f3028773 94 struct MbedClientOptions options = get_default_options();
janjongboom 0:9fa3f3028773 95
janjongboom 0:9fa3f3028773 96 client = new MbedClient(options);
janjongboom 0:9fa3f3028773 97 return init(iface);
janjongboom 0:9fa3f3028773 98 }
janjongboom 0:9fa3f3028773 99
janjongboom 0:9fa3f3028773 100 bool setup(MbedClientOptions options, NetworkInterface* iface) {
janjongboom 0:9fa3f3028773 101 if (client) {
janjongboom 0:9fa3f3028773 102 output.printf("[SMC] [ERROR] mbed_client_setup called, but mbed_client is already instantiated\r\n");
janjongboom 0:9fa3f3028773 103 return false;
janjongboom 0:9fa3f3028773 104 }
janjongboom 0:9fa3f3028773 105 client = new MbedClient(options);
janjongboom 0:9fa3f3028773 106 return init(iface);
janjongboom 0:9fa3f3028773 107 }
janjongboom 0:9fa3f3028773 108
janjongboom 0:9fa3f3028773 109 void on_registered(void(*fn)(void)) {
janjongboom 0:9fa3f3028773 110 FunctionPointer fp(fn);
janjongboom 0:9fa3f3028773 111 client->set_registered_function(fp);
janjongboom 0:9fa3f3028773 112 }
janjongboom 0:9fa3f3028773 113
janjongboom 0:9fa3f3028773 114 template<typename T>
janjongboom 0:9fa3f3028773 115 void on_registered(T *object, void (T::*member)(void)) {
janjongboom 0:9fa3f3028773 116 FunctionPointer fp(object, member);
janjongboom 0:9fa3f3028773 117 client->set_registered_function(fp);
janjongboom 0:9fa3f3028773 118 }
janjongboom 0:9fa3f3028773 119
janjongboom 0:9fa3f3028773 120 void on_unregistered(void(*fn)(void)) {
janjongboom 0:9fa3f3028773 121 FunctionPointer fp(fn);
janjongboom 0:9fa3f3028773 122 client->set_unregistered_function(fp);
janjongboom 0:9fa3f3028773 123 }
janjongboom 0:9fa3f3028773 124
janjongboom 0:9fa3f3028773 125 template<typename T>
janjongboom 0:9fa3f3028773 126 void on_unregistered(T *object, void (T::*member)(void)) {
janjongboom 0:9fa3f3028773 127 FunctionPointer fp(object, member);
janjongboom 0:9fa3f3028773 128 client->set_unregistered_function(fp);
janjongboom 0:9fa3f3028773 129 }
janjongboom 0:9fa3f3028773 130
janjongboom 0:9fa3f3028773 131 bool define_function(const char* route, void(*fn)(void*)) {
janjongboom 0:9fa3f3028773 132 if (!define_resource_internal(route, string(), M2MBase::POST_ALLOWED, false)) {
janjongboom 0:9fa3f3028773 133 return false;
janjongboom 0:9fa3f3028773 134 }
janjongboom 0:9fa3f3028773 135
janjongboom 0:9fa3f3028773 136 string route_str(route);
janjongboom 0:9fa3f3028773 137 if (!resources.count(route_str)) {
janjongboom 0:9fa3f3028773 138 output.printf("[SMC] [ERROR] Should be created, but no such route (%s)\r\n", route);
janjongboom 0:9fa3f3028773 139 return false;
janjongboom 0:9fa3f3028773 140 }
janjongboom 0:9fa3f3028773 141
janjongboom 0:9fa3f3028773 142 FunctionPointerArg1<void, void*>* fp = new FunctionPointerArg1<void, void*>(fn);
janjongboom 0:9fa3f3028773 143 resources[route_str]->set_execute_function(execute_callback(fp, &FunctionPointerArg1<void, void*>::call));
janjongboom 0:9fa3f3028773 144 return true;
janjongboom 0:9fa3f3028773 145 }
janjongboom 0:9fa3f3028773 146
janjongboom 0:9fa3f3028773 147 bool define_function(const char* route, execute_callback fn) {
janjongboom 0:9fa3f3028773 148 if (!define_resource_internal(route, string(), M2MBase::POST_ALLOWED, false)) {
janjongboom 0:9fa3f3028773 149 return false;
janjongboom 0:9fa3f3028773 150 }
janjongboom 0:9fa3f3028773 151
janjongboom 0:9fa3f3028773 152 string route_str(route);
janjongboom 0:9fa3f3028773 153 if (!resources.count(route_str)) {
janjongboom 0:9fa3f3028773 154 output.printf("[SMC] [ERROR] Should be created, but no such route (%s)\r\n", route);
janjongboom 0:9fa3f3028773 155 return false;
janjongboom 0:9fa3f3028773 156 }
janjongboom 0:9fa3f3028773 157 // No clue why this is not working?! It works with class member, but not with static function...
janjongboom 0:9fa3f3028773 158 resources[route_str]->set_execute_function(fn);
janjongboom 0:9fa3f3028773 159 return true;
janjongboom 0:9fa3f3028773 160 }
janjongboom 0:9fa3f3028773 161 //
janjongboom 0:9fa3f3028773 162 string get(string route_str) {
janjongboom 0:9fa3f3028773 163 if (!resources.count(route_str)) {
janjongboom 0:9fa3f3028773 164 output.printf("[SMC] [ERROR] No such route (%s)\r\n", route_str.c_str());
janjongboom 0:9fa3f3028773 165 return string();
janjongboom 0:9fa3f3028773 166 }
janjongboom 0:9fa3f3028773 167
janjongboom 0:9fa3f3028773 168 uint8_t* buffIn;
janjongboom 0:9fa3f3028773 169 uint32_t sizeIn;
janjongboom 0:9fa3f3028773 170 resources[route_str]->get_value(buffIn, sizeIn);
janjongboom 0:9fa3f3028773 171
janjongboom 0:9fa3f3028773 172 std::string s((char*)buffIn, sizeIn);
janjongboom 0:9fa3f3028773 173 return s;
janjongboom 0:9fa3f3028773 174 }
janjongboom 0:9fa3f3028773 175
janjongboom 0:9fa3f3028773 176 bool set(string route_str, string v) {
janjongboom 0:9fa3f3028773 177 if (!resources.count(route_str)) {
janjongboom 0:9fa3f3028773 178 output.printf("[SMC] [ERROR] No such route (%s)\r\n", route_str.c_str());
janjongboom 0:9fa3f3028773 179 return false;
janjongboom 0:9fa3f3028773 180 }
janjongboom 0:9fa3f3028773 181 resources[route_str]->set_value((uint8_t*)v.c_str(), v.length());
janjongboom 0:9fa3f3028773 182 return true;
janjongboom 0:9fa3f3028773 183 }
janjongboom 0:9fa3f3028773 184
janjongboom 0:9fa3f3028773 185 bool set(string route, const int& v) {
janjongboom 0:9fa3f3028773 186 stringstream ss;
janjongboom 0:9fa3f3028773 187 ss << v;
janjongboom 0:9fa3f3028773 188 std::string stringified = ss.str();
janjongboom 0:9fa3f3028773 189
janjongboom 0:9fa3f3028773 190 return set(route, stringified);
janjongboom 0:9fa3f3028773 191 }
janjongboom 0:9fa3f3028773 192
janjongboom 0:9fa3f3028773 193 bool define_resource_internal(const char* route, std::string v, M2MBase::Operation opr, bool observable) {
janjongboom 0:9fa3f3028773 194 if (client) {
janjongboom 0:9fa3f3028773 195 output.printf("[SMC] [ERROR] mbed_client_define_resource, Can only define resources before mbed_client_setup is called!\r\n");
janjongboom 0:9fa3f3028773 196 return false;
janjongboom 0:9fa3f3028773 197 }
janjongboom 0:9fa3f3028773 198
janjongboom 0:9fa3f3028773 199 vector<string> segments = parse_route(route);
janjongboom 0:9fa3f3028773 200 if (segments.size() != 3) {
janjongboom 0:9fa3f3028773 201 output.printf("[SMC] [ERROR] mbed_client_define_resource, Route needs to have three segments, split by '/' (%s)\r\n", route);
janjongboom 0:9fa3f3028773 202 return false;
janjongboom 0:9fa3f3028773 203 }
janjongboom 0:9fa3f3028773 204
janjongboom 0:9fa3f3028773 205 int inst_id = 0;
janjongboom 0:9fa3f3028773 206 // try {
janjongboom 0:9fa3f3028773 207 // inst_id = stoi(segments.at(1));
janjongboom 0:9fa3f3028773 208 // }
janjongboom 0:9fa3f3028773 209 // catch (const std::invalid_argument& ia) {
janjongboom 0:9fa3f3028773 210 // output.printf("[SMC] [ERROR] mbed_client_define_resource, second route segment should be numeric, but was not (%s)\r\n", route);
janjongboom 0:9fa3f3028773 211 // return false;
janjongboom 0:9fa3f3028773 212 // }
janjongboom 0:9fa3f3028773 213
janjongboom 0:9fa3f3028773 214
janjongboom 0:9fa3f3028773 215 M2MObjectInstance* inst;
janjongboom 0:9fa3f3028773 216 if (objectInstances.count(segments.at(0))) {
janjongboom 0:9fa3f3028773 217 output.printf("Found object... %s\r\n", segments.at(0).c_str());
janjongboom 0:9fa3f3028773 218 inst = objectInstances[segments.at(0)];
janjongboom 0:9fa3f3028773 219 }
janjongboom 0:9fa3f3028773 220 else {
janjongboom 0:9fa3f3028773 221 output.printf("Create new object... %s\r\n", segments.at(0).c_str());
janjongboom 0:9fa3f3028773 222 M2MObject* obj = M2MInterfaceFactory::create_object(segments.at(0).c_str());
janjongboom 0:9fa3f3028773 223 inst = obj->create_object_instance(inst_id);
janjongboom 0:9fa3f3028773 224 objects.insert(std::pair<string, M2MObject*>(segments.at(0), obj));
janjongboom 0:9fa3f3028773 225 objectInstances.insert(std::pair<string, M2MObjectInstance*>(segments.at(0), inst));
janjongboom 0:9fa3f3028773 226 }
janjongboom 0:9fa3f3028773 227
janjongboom 0:9fa3f3028773 228 // @todo check if the resource exists yet
janjongboom 0:9fa3f3028773 229 M2MResource* res = inst->create_dynamic_resource(segments.at(2).c_str(), "",
janjongboom 0:9fa3f3028773 230 M2MResourceInstance::STRING, observable);
janjongboom 0:9fa3f3028773 231 res->set_operation(opr);
janjongboom 0:9fa3f3028773 232 res->set_value((uint8_t*)v.c_str(), v.length());
janjongboom 0:9fa3f3028773 233
janjongboom 0:9fa3f3028773 234 string route_str(route);
janjongboom 0:9fa3f3028773 235 resources.insert(std::pair<string, M2MResource*>(route_str, res));
janjongboom 0:9fa3f3028773 236
janjongboom 0:9fa3f3028773 237 return true;
janjongboom 0:9fa3f3028773 238 }
janjongboom 0:9fa3f3028773 239
janjongboom 0:9fa3f3028773 240 private:
janjongboom 0:9fa3f3028773 241 vector<string> parse_route(const char* route) {
janjongboom 0:9fa3f3028773 242 string s(route);
janjongboom 0:9fa3f3028773 243 vector<string> v;
janjongboom 0:9fa3f3028773 244 stringstream ss(s);
janjongboom 0:9fa3f3028773 245 string item;
janjongboom 0:9fa3f3028773 246 while (getline(ss, item, '/')) {
janjongboom 0:9fa3f3028773 247 v.push_back(item);
janjongboom 0:9fa3f3028773 248 }
janjongboom 0:9fa3f3028773 249 return v;
janjongboom 0:9fa3f3028773 250 }
janjongboom 0:9fa3f3028773 251
janjongboom 0:9fa3f3028773 252 Serial output;
janjongboom 0:9fa3f3028773 253
janjongboom 0:9fa3f3028773 254 MbedClient* client;
janjongboom 0:9fa3f3028773 255 map<string, M2MObject*> objects;
janjongboom 0:9fa3f3028773 256 map<string, M2MObjectInstance*> objectInstances;
janjongboom 0:9fa3f3028773 257 map<string, M2MResource*> resources;
janjongboom 1:75015f627e89 258 // @todo: write this
janjongboom 1:75015f627e89 259 // map<string, FunctionPointerArg1<void, void*> updateValues;
janjongboom 0:9fa3f3028773 260 };
janjongboom 0:9fa3f3028773 261
janjongboom 0:9fa3f3028773 262 class SimpleResourceString {
janjongboom 0:9fa3f3028773 263 public:
janjongboom 0:9fa3f3028773 264 SimpleResourceString(SimpleMbedClientBase* aSimpleClient, string aRoute) :
janjongboom 0:9fa3f3028773 265 simpleClient(aSimpleClient), route(aRoute) {}
janjongboom 0:9fa3f3028773 266
janjongboom 0:9fa3f3028773 267 string operator=(const string& newValue) {
janjongboom 0:9fa3f3028773 268 simpleClient->set(route, newValue);
janjongboom 0:9fa3f3028773 269 return newValue;
janjongboom 0:9fa3f3028773 270 };
janjongboom 0:9fa3f3028773 271 operator string() const {
janjongboom 0:9fa3f3028773 272 return simpleClient->get(route);
janjongboom 0:9fa3f3028773 273 };
janjongboom 0:9fa3f3028773 274
janjongboom 0:9fa3f3028773 275 private:
janjongboom 0:9fa3f3028773 276 SimpleMbedClientBase* simpleClient;
janjongboom 0:9fa3f3028773 277 string route;
janjongboom 0:9fa3f3028773 278 };
janjongboom 0:9fa3f3028773 279
janjongboom 0:9fa3f3028773 280 class SimpleResourceInt {
janjongboom 0:9fa3f3028773 281 public:
janjongboom 0:9fa3f3028773 282 SimpleResourceInt(SimpleMbedClientBase* aSimpleClient, string aRoute) :
janjongboom 0:9fa3f3028773 283 simpleClient(aSimpleClient), route(aRoute) {}
janjongboom 0:9fa3f3028773 284
janjongboom 0:9fa3f3028773 285 int operator=(int newValue) {
janjongboom 0:9fa3f3028773 286 // printf("newValue %s = %d\n", route.c_str(), newValue);
janjongboom 0:9fa3f3028773 287 simpleClient->set(route, newValue);
janjongboom 0:9fa3f3028773 288 return newValue;
janjongboom 0:9fa3f3028773 289 };
janjongboom 0:9fa3f3028773 290 operator int() const {
janjongboom 0:9fa3f3028773 291 // printf("receiving a value for %s\n", route.c_str());
janjongboom 0:9fa3f3028773 292 string v = simpleClient->get(route);
janjongboom 0:9fa3f3028773 293 // printf("string value is %s\n", v.c_str());
janjongboom 0:9fa3f3028773 294 if (v.empty()) return 0;
janjongboom 0:9fa3f3028773 295
janjongboom 0:9fa3f3028773 296 return atoi((const char*)v.c_str());
janjongboom 0:9fa3f3028773 297 };
janjongboom 0:9fa3f3028773 298
janjongboom 0:9fa3f3028773 299 private:
janjongboom 0:9fa3f3028773 300 SimpleMbedClientBase* simpleClient;
janjongboom 0:9fa3f3028773 301 string route;
janjongboom 0:9fa3f3028773 302 };
janjongboom 0:9fa3f3028773 303
janjongboom 0:9fa3f3028773 304 class SimpleMbedClient : public SimpleMbedClientBase {
janjongboom 0:9fa3f3028773 305 public:
janjongboom 1:75015f627e89 306
janjongboom 1:75015f627e89 307 // @todo: macro this up
janjongboom 1:75015f627e89 308
janjongboom 1:75015f627e89 309 SimpleResourceString define_resource(
janjongboom 1:75015f627e89 310 const char* route,
janjongboom 1:75015f627e89 311 string v,
janjongboom 1:75015f627e89 312 M2MBase::Operation opr = M2MBase::GET_PUT_ALLOWED,
janjongboom 1:75015f627e89 313 bool observable = true,
janjongboom 1:75015f627e89 314 FunctionPointerArg1<void, string> onUpdate = NULL)
janjongboom 1:75015f627e89 315 {
janjongboom 0:9fa3f3028773 316 bool res = define_resource_internal(route, v, opr, observable);
janjongboom 0:9fa3f3028773 317 if (!res) printf("Error while creating %s\n", route);
janjongboom 0:9fa3f3028773 318 return *(new SimpleResourceString(this, route));
janjongboom 0:9fa3f3028773 319 }
janjongboom 1:75015f627e89 320
janjongboom 1:75015f627e89 321 SimpleResourceString define_resource(
janjongboom 1:75015f627e89 322 const char* route,
janjongboom 1:75015f627e89 323 string v,
janjongboom 1:75015f627e89 324 M2MBase::Operation opr,
janjongboom 1:75015f627e89 325 bool observable,
janjongboom 1:75015f627e89 326 void(*onUpdate)(string))
janjongboom 1:75015f627e89 327 {
janjongboom 1:75015f627e89 328 FunctionPointerArg1<void, string> fp;
janjongboom 1:75015f627e89 329 fp.attach(onUpdate);
janjongboom 1:75015f627e89 330 return define_resource(route, v, opr, observable, fp);
janjongboom 1:75015f627e89 331 }
janjongboom 0:9fa3f3028773 332
janjongboom 1:75015f627e89 333 SimpleResourceString define_resource(
janjongboom 1:75015f627e89 334 const char* route,
janjongboom 1:75015f627e89 335 string v,
janjongboom 1:75015f627e89 336 FunctionPointerArg1<void, string> onUpdate = NULL)
janjongboom 1:75015f627e89 337 {
janjongboom 1:75015f627e89 338 return define_resource(route, v, M2MBase::GET_PUT_ALLOWED, true, onUpdate);
janjongboom 1:75015f627e89 339 }
janjongboom 1:75015f627e89 340
janjongboom 1:75015f627e89 341 SimpleResourceString define_resource(
janjongboom 1:75015f627e89 342 const char* route,
janjongboom 1:75015f627e89 343 string v,
janjongboom 1:75015f627e89 344 void(*onUpdate)(string))
janjongboom 1:75015f627e89 345 {
janjongboom 1:75015f627e89 346 FunctionPointerArg1<void, string> fp;
janjongboom 1:75015f627e89 347 fp.attach(onUpdate);
janjongboom 1:75015f627e89 348 return define_resource(route, v, M2MBase::GET_PUT_ALLOWED, true, fp);
janjongboom 1:75015f627e89 349 }
janjongboom 1:75015f627e89 350
janjongboom 1:75015f627e89 351 SimpleResourceInt define_resource(
janjongboom 1:75015f627e89 352 const char* route,
janjongboom 1:75015f627e89 353 int v,
janjongboom 1:75015f627e89 354 M2MBase::Operation opr = M2MBase::GET_PUT_ALLOWED,
janjongboom 1:75015f627e89 355 bool observable = true,
janjongboom 1:75015f627e89 356 FunctionPointerArg1<void, int> onUpdate = NULL)
janjongboom 1:75015f627e89 357 {
janjongboom 0:9fa3f3028773 358 stringstream ss;
janjongboom 0:9fa3f3028773 359 ss << v;
janjongboom 0:9fa3f3028773 360 std::string stringified = ss.str();
janjongboom 0:9fa3f3028773 361 bool res = define_resource_internal(route, stringified, opr, observable);
janjongboom 0:9fa3f3028773 362 if (!res) printf("Error while creating %s\n", route);
janjongboom 0:9fa3f3028773 363 return *(new SimpleResourceInt(this, route));
janjongboom 0:9fa3f3028773 364 }
janjongboom 1:75015f627e89 365
janjongboom 1:75015f627e89 366 SimpleResourceInt define_resource(
janjongboom 1:75015f627e89 367 const char* route,
janjongboom 1:75015f627e89 368 int v,
janjongboom 1:75015f627e89 369 M2MBase::Operation opr,
janjongboom 1:75015f627e89 370 bool observable,
janjongboom 1:75015f627e89 371 void(*onUpdate)(int))
janjongboom 1:75015f627e89 372 {
janjongboom 1:75015f627e89 373 FunctionPointerArg1<void, int> fp;
janjongboom 1:75015f627e89 374 fp.attach(onUpdate);
janjongboom 1:75015f627e89 375 return define_resource(route, v, opr, observable, fp);
janjongboom 1:75015f627e89 376 }
janjongboom 1:75015f627e89 377
janjongboom 1:75015f627e89 378 SimpleResourceInt define_resource(
janjongboom 1:75015f627e89 379 const char* route,
janjongboom 1:75015f627e89 380 int v,
janjongboom 1:75015f627e89 381 FunctionPointerArg1<void, int> onUpdate = NULL)
janjongboom 1:75015f627e89 382 {
janjongboom 1:75015f627e89 383 return define_resource(route, v, M2MBase::GET_PUT_ALLOWED, true, onUpdate);
janjongboom 1:75015f627e89 384 }
janjongboom 1:75015f627e89 385
janjongboom 1:75015f627e89 386 SimpleResourceInt define_resource(
janjongboom 1:75015f627e89 387 const char* route,
janjongboom 1:75015f627e89 388 int v,
janjongboom 1:75015f627e89 389 void(*onUpdate)(int))
janjongboom 1:75015f627e89 390 {
janjongboom 1:75015f627e89 391 FunctionPointerArg1<void, int> fp;
janjongboom 1:75015f627e89 392 fp.attach(onUpdate);
janjongboom 1:75015f627e89 393 return define_resource(route, v, M2MBase::GET_PUT_ALLOWED, true, fp);
janjongboom 1:75015f627e89 394 }
janjongboom 0:9fa3f3028773 395 };
janjongboom 0:9fa3f3028773 396
janjongboom 0:9fa3f3028773 397 #endif // __SIMPLE_MBED_CLIENT_H__