Wiselib
wiselib.testing/algorithms/tracking/PLTT_message.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 #ifndef __PLTT_MESSAGE_H__
00020 #define __PLTT_MESSAGE_H__
00021 
00022 namespace wiselib
00023 {
00024    template<   typename OsModel_P,
00025             typename Radio_P>
00026    class PLTT_MessageType
00027    {
00028    public:
00029       typedef OsModel_P OsModel;
00030       typedef Radio_P Radio;
00031       typedef typename Radio::block_data_t block_data_t;
00032       typedef typename Radio::size_t size_t;
00033       typedef typename Radio::message_id_t message_id_t;
00034       // --------------------------------------------------------------------
00035       inline PLTT_MessageType();
00036       // --------------------------------------------------------------------
00037       inline message_id_t msg_id()
00038       {
00039          return read<OsModel, block_data_t, message_id_t>( buffer );
00040       };
00041       // --------------------------------------------------------------------
00042       inline void set_msg_id( message_id_t id )
00043       {
00044          write<OsModel, block_data_t, message_id_t>( buffer, id ); 
00045       }
00046       // --------------------------------------------------------------------
00047       inline size_t payload_size()
00048       {
00049          return read<OsModel, block_data_t, size_t>(buffer + PAYLOAD_POS); 
00050       }
00051       // --------------------------------------------------------------------
00052       inline block_data_t* payload()
00053       { 
00054          return buffer + PAYLOAD_POS + sizeof(size_t); 
00055       }
00056       // --------------------------------------------------------------------
00057       inline void set_payload( size_t len, block_data_t *buf )
00058       {
00059          write<OsModel, block_data_t, size_t>(buffer + PAYLOAD_POS, len);
00060          memcpy( buffer + PAYLOAD_POS + sizeof(size_t), buf, len);
00061       }
00062       // --------------------------------------------------------------------
00063       inline size_t buffer_size()
00064       { return PAYLOAD_POS + sizeof(size_t) + payload_size(); }
00065    private:
00066       enum data_positions
00067       {
00068          PAYLOAD_POS = sizeof(message_id_t)
00069       };
00070       block_data_t buffer[Radio::MAX_MESSAGE_LENGTH];
00071    };
00072    // -----------------------------------------------------------------------
00073    template<typename OsModel_P,
00074       typename Radio_P>
00075    PLTT_MessageType<OsModel_P, Radio_P>::
00076 	PLTT_MessageType()
00077    {
00078       set_msg_id( 0 );
00079       size_t len = 0;
00080       write<OsModel, block_data_t, size_t>(buffer + PAYLOAD_POS, len);
00081    }
00082 }
00083 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines