Wiselib
|
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