Wiselib
wiselib.testing/algorithms/cluster/securehdlcluster/securehdlclusteringmessage.h
Go to the documentation of this file.
00001 /***************************************************************************
00002  ** This file is part of the generic algorithm library Wiselib.           **
00003  ** Copyright (C) 2008,2009 by the Wisebed (www.wisebed.eu) project.      **
00004  **                                                                       **
00005  ** The Wiselib is free software: you can redistribute it and/or modify   **
00006  ** it under the terms of the GNU Lesser General Public License as        **
00007  ** published by the Free Software Foundation, either version 3 of the    **
00008  ** License, or (at your option) any later version.                       **
00009  **                                                                       **
00010  ** The Wiselib is distributed in the hope that it will be useful,        **
00011  ** but WITHOUT ANY WARRANTY; without even the implied warranty of        **
00012  ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         **
00013  ** GNU Lesser General Public License for more details.                   **
00014  **                                                                       **
00015  ** You should have received a copy of the GNU Lesser General Public      **
00016  ** License along with the Wiselib.                                       **
00017  ** If not, see <http://www.gnu.org/licenses/>.                           **
00018  ***************************************************************************/
00019 
00020 #ifndef __ALGORITHMS_SECURE_HDL_CLUSTERING_MESSAGE__
00021 #define __ALGORITHMS_SECURE_HDL_CLUSTERING_MESSAGE__
00022 
00023 #include "securehdlclusteringtypes.h"
00024 
00025 namespace wiselib {
00026     template<typename OsModel_P,
00027             typename Radio_P>
00028     class SecureHdlMessage {
00029     public:
00030         typedef OsModel_P OsModel;
00031         typedef Radio_P Radio;
00032         typedef typename Radio::block_data_t block_data_t;
00033         typedef typename Radio::size_t size_t;
00034         inline SecureHdlMessage() {}
00035         inline uint8_t current_layer() {
00036             return read<OsModel, block_data_t, uint8_t>(buffer+CURRENT_LAYER_POS);
00037         }
00038         inline void set_current_layer(uint8_t layer) {
00039             write<OsModel, block_data_t, uint8_t>(buffer+CURRENT_LAYER_POS, layer);
00040         }
00041         inline uint8_t key_size() {
00042             return sizeof(HKCelement_t);
00043         }
00044         inline HKCelement_t* key() {
00045        return (HKCelement_t*) &(buffer[HKC_ELEMENT_POS]);
00046         }
00047         inline void set_key(HKCelement_t *key) {
00048             memcpy(buffer+HKC_ELEMENT_POS, key, key_size());
00049         }
00050         inline size_t buffer_size() {
00051             return HKC_ELEMENT_POS+sizeof(HKCelement_t);
00052         }
00053         
00054     private:
00055         enum data_positions {
00056             CURRENT_LAYER_POS   = 0,
00057             HKC_ELEMENT_POS     = 1
00058         };
00059         uint8_t buffer[Radio::MAX_MESSAGE_LENGTH];
00060     };
00061 }
00062 
00063 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines