diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/drumgizmo.cc | 25 | ||||
-rw-r--r-- | src/drumgizmo.h | 15 | ||||
-rw-r--r-- | src/message.h | 47 |
3 files changed, 87 insertions, 0 deletions
diff --git a/src/drumgizmo.cc b/src/drumgizmo.cc index ec03d76..93426de 100644 --- a/src/drumgizmo.cc +++ b/src/drumgizmo.cc @@ -56,6 +56,31 @@ DrumGizmo::~DrumGizmo() */ } +/* + * Send a message to the engine. The engine takes over the memory. + */ +void DrumGizmo::sendMessage(Message *msg) +{ + message_mutex.lock(); + message_queue.push_back(msg); + message_mutex.unlock(); +} + +/* + * Receive message from the engine. The caller takes over the memory. + */ +Message *DrumGizmo::receiveMessage() +{ + Message *msg = NULL; + message_mutex.lock(); + if(message_queue.size()) { + msg = message_queue.front(); + message_queue.pop_front(); + } + message_mutex.unlock(); + return msg; +} + std::string DrumGizmo::drumkitfile() { return kitfile; diff --git a/src/drumgizmo.h b/src/drumgizmo.h index e79dad0..92faa3c 100644 --- a/src/drumgizmo.h +++ b/src/drumgizmo.h @@ -41,6 +41,8 @@ #include "mutex.h" +#include "message.h" + #define MAX_NUM_CHANNELS 512 class DrumGizmo { @@ -68,7 +70,20 @@ public: std::string midimapfile; std::string kitfile; + /* + * Send a message to the engine. The engine takes over the memory. + */ + void sendMessage(Message *msg); + + /* + * Receive message from the engine. The caller takes over the memory. + */ + Message *receiveMessage(); + private: + Mutex message_mutex; + std::list<Message *> message_queue; + DrumKitLoader loader; Mutex mutex; diff --git a/src/message.h b/src/message.h new file mode 100644 index 0000000..c9e630d --- /dev/null +++ b/src/message.h @@ -0,0 +1,47 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * message.h + * + * Wed Mar 20 15:50:57 CET 2013 + * Copyright 2013 Bent Bisballe Nyeng + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of DrumGizmo. + * + * DrumGizmo is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * DrumGizmo is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with DrumGizmo; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +#ifndef __DRUMGIZMO_MESSAGE_H__ +#define __DRUMGIZMO_MESSAGE_H__ + +class Message { +public: + typedef enum { + LoadStatus, + } type_t; + + virtual type_t type() = 0; +}; + +class LoadStatus : public Message { +public: + type_t type() { return Message::LoadStatus; } + unsigned int number_of_files; + unsigned int numer_of_files_loaded; + std::string current_file; +}; + +#endif/*__DRUMGIZMO_MESSAGE_H__*/ |