custom for >5 resources
Fork of mbedConnectorInterface by
Diff: api/InstancePointerTableHelper.h
- Revision:
- 0:b438482ebbfc
- Child:
- 2:853f9ecc12df
diff -r 000000000000 -r b438482ebbfc api/InstancePointerTableHelper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/api/InstancePointerTableHelper.h Tue Jan 27 22:23:51 2015 +0000 @@ -0,0 +1,67 @@ +/** + * @file InstancePointerTableHelper.h + * @brief instance pointer table helper functions for DynamicResource + * @author Doug Anson + * @version 1.0 + * @see + * + * Copyright (c) 2014 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + #ifndef __INSTANCE_POINTER_TABLE_HELPER_H__ + #define __INSTANCE_POINTER_TABLE_HELPER_H__ + +// InstancePointerTable + #include "InstancePointerTable.h" + extern Logger logger; + InstancePointerTable __nsdl_lookup_table(&logger); // Instance Pointer Table + + + // lookup a DynamicResource instance indexed by our resource URI as the key + extern "C" DynamicResource *__lookup_instance_pointer(const char *uri,const int uri_length) { + if (uri != NULL && uri_length > 0) { + string key(uri,uri_length); + return (DynamicResource *)__nsdl_lookup_table.get(key); + } + return NULL; + } + + // callback function for NSDL library to call into... ASSUMPTION: 1 and only 1 DynamicResource<> instance per Resource URI... + extern "C" uint8_t ipt_helper_nsdl_callback_stub(sn_coap_hdr_s *received_coap_ptr, sn_nsdl_addr_s *address, sn_proto_info_s * proto) { + uint8_t status = 1; + if (received_coap_ptr != NULL) { + // retrieve our resource instance via lookup/index by our resource URI + DynamicResource *instance = __lookup_instance_pointer((const char *)received_coap_ptr->uri_path_ptr,received_coap_ptr->uri_path_len); + if (instance != NULL) { + std::printf("Instance retrieved.. processing callback...\r\n"); + status = instance->process(received_coap_ptr,address,proto); + } + else { + std::printf("Unable to process callback: unable to lookup DynamicResource<> instance pointer... ignorning...\r\n"); + } + } + else { + std::printf("Unable to process callback: received coap pointer is NULL... ignoring...\r\n"); + } + return status; + } + + // add a instance pointer to our lookup table keyed by the key + extern "C" void ipt_helper_add_instance_pointer(const string *key,DynamicResource *instance) { + __nsdl_lookup_table.add(*key,instance); + if (key != NULL) delete key; + } + + #endif // __INSTANCE_POINTER_TABLE_HELPER_H__ \ No newline at end of file