Wiselib
wiselib.testing/external_interface/shawn/shawn_stringtag_uart.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 CONNECTOR_SHAWN_STRINGTAG_UART_H
00020 #define CONNECTOR_SHAWN_STRINGTAG_UART_H
00021 
00022 #include "util/delegates/delegate.hpp"
00023 #include "util/base_classes/uart_base.h"
00024 #include "external_interface/shawn/shawn_types.h"
00025 #include "external_interface/shawn/shawn_timer.h"
00026 #include "external_interface/shawn/shawn_os.h"
00027 
00028 #include "sys/node.h"
00029 #include "sys/simulation/simulation_controller.h"
00030 #include "sys/simulation/simulation_environment.h"
00031 #include "sys/taggings/basic_tags.h"
00032 #include "sys/tag.h"
00033 
00034 #include <string>
00035 
00036 namespace wiselib
00037 {
00038 
00044    template<typename OsModel_P>
00045    class ShawnStringTagUartModel
00046       : public UartBase<OsModel_P, uint8_t, uint8_t>
00047    {
00048    public:
00049       typedef OsModel_P OsModel;
00050 
00051       typedef ShawnStringTagUartModel<OsModel> self_type;
00052       typedef self_type* self_pointer_t;
00053 
00054       typedef uint8_t block_data_t;
00055       typedef uint8_t size_t;
00056       // --------------------------------------------------------------------
00057       enum ErrorCodes
00058       {
00059          SUCCESS = OsModel::SUCCESS,
00060          ERR_UNSPEC = OsModel::ERR_UNSPEC
00061       };
00062       // -----------------------------------------------------------------------
00063       ShawnStringTagUartModel( ShawnOs& os )
00064          : os_      ( os ),
00065             enabled_( false ),
00066             tagname_( "wiselib_uart_out" )
00067       {
00068          os_.proc->owner_w().template write_simple_tag<std::string>( tagname_, "" );
00069       }
00070       // -----------------------------------------------------------------------
00071       int enable_serial_comm()
00072       {
00073           enabled_ = true;
00074           return SUCCESS;
00075       }
00076       // -----------------------------------------------------------------------
00077       int disable_serial_comm()
00078       {
00079           enabled_ = false;
00080           return SUCCESS;
00081       }
00082       // -----------------------------------------------------------------------
00083       int write( size_t len, block_data_t *buf )
00084       {
00085          std::string content( (char*)(buf + 19) );
00086          content = content.substr(0, content.size() - 1);
00087          os().proc->owner_w().template write_simple_tag<std::string>( tagname_, content );
00088          return SUCCESS;
00089       }
00090       // -----------------------------------------------------------------------
00091       void receive(size_t len, block_data_t *buf)
00092       {
00093           self_type::notify_receivers( len, buf );
00094       }
00095       // -----------------------------------------------------------------------
00096       void set_tagname( std::string tagname )
00097       {
00098           tagname_ = tagname;
00099       }
00100       // -----------------------------------------------------------------------
00101       std::string tagname()
00102       {
00103           return tagname_;
00104       }
00105 
00106    private:
00107       ShawnOs& os()
00108       { return os_; }
00109       // --------------------------------------------------------------------
00110       ShawnOs& os_;
00111       bool enabled_;
00112       std::string tagname_;
00113    };
00114 }
00115 
00116 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines