--- /dev/null
+#ifndef SCD_COMMAND_H
+#define SCD_COMMAND_H
+
+#include <stdint.h>
+#include <sys/types.h>
+#include <string>
+
+#include "systemc"
+
+
+const size_t SCD_CM_MAXLEN = 512;
+const size_t SCD_CM_HEADER = 3*2;
+
+/* command types */
+const uint16_t SCD_CM_REGISTER = 1;
+const uint16_t SCD_CM_CONFIG = 2;
+const uint16_t SCD_CM_CONTROL = 3;
+
+/* command subtypes */
+// register
+const uint16_t SCD_CM_NETSIM = 1;
+const uint16_t SCD_CM_CHANNEL = 2;
+// control
+const uint16_t SCD_CM_BUSY = 1;
+const uint16_t SCD_CM_IDLE = 2;
+const uint16_t SCD_CM_DONE = 3;
+const uint16_t SCD_CM_FAILED = 4;
+const uint16_t SCD_CM_TIME_REQ = 5;
+const uint16_t SCD_CM_TIME_ACK = 6;
+const uint16_t SCD_CM_TIME_NACK = 7;
+const uint16_t SCD_CM_TIME = 8;
+const uint16_t SCD_CM_TERM_REQ = 9;
+const uint16_t SCD_CM_TERM_ACK = 10;
+const uint16_t SCD_CM_TERM_NACK = 11;
+const uint16_t SCD_CM_TERM = 12;
+
+/* forward declarations */
+class scd_command_reader;
+class scd_command_writer;
+
+
+/**
+ * Command class. Commands are control messages that are sent between
+ * the different simulators. A command has a type, a subtype and a potential
+ * message part.
+ */
+class scd_command
+{
+friend class scd_command_reader;
+friend class scd_command_writer;
+
+public:
+ /**
+ * Default constructor. Creates an empty command.
+ */
+ scd_command();
+
+ /*
+ * Constructor. Creates a command with no message part.
+ * \param type the type of this command
+ * \param subtype the subtype of this command
+ */
+ scd_command(uint16_t type, uint16_t subtype);
+
+ /**
+ * Constructor. Creates a new command with a string as message
+ * part.
+ */
+ scd_command(uint16_t type, uint16_t subtype, const std::string& msg);
+
+ /**
+ * Constructor. Creates a new command with a SystemC time value as
+ * message part.
+ */
+ scd_command(uint16_t type, uint16_t subtype, const sc_core::sc_time& time);
+
+ virtual ~scd_command();
+
+ /**
+ * Returns the type of the command.
+ */
+ uint16_t get_type() const;
+
+ /**
+ * Returns the subtype of the command.
+ */
+ uint16_t get_subtype() const;
+
+ /**
+ * Returns the message part interpreted as a string.
+ */
+ std::string get_string() const;
+
+ /**
+ * Returns the message part interpreted as a SystemC time.
+ * If the message part does not have the correct size SC_ZERO_TIME
+ * is returned instead.
+ */
+ sc_core::sc_time get_time() const;
+
+private:
+ uint16_t _type;
+ uint16_t _subtype;
+ uint16_t _msglen;
+ char* _msg;
+};
+
+#endif