summaryrefslogtreecommitdiff
path: root/ndb/include/kernel/signaldata/TestOrd.hpp
diff options
context:
space:
mode:
authorunknown <magnus@neptunus.(none)>2004-04-14 10:53:21 +0200
committerunknown <magnus@neptunus.(none)>2004-04-14 10:53:21 +0200
commit6386c55cee50bad6a9979d1fab28e03bb8612ca7 (patch)
tree3fbbacf704304b69228474b9f03549ccd585a017 /ndb/include/kernel/signaldata/TestOrd.hpp
parent0ba6cb48d84f1ff951d09871a96be6cdef3f2c3c (diff)
downloadmariadb-git-6386c55cee50bad6a9979d1fab28e03bb8612ca7.tar.gz
Initial revision of NDB Cluster files
BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted
Diffstat (limited to 'ndb/include/kernel/signaldata/TestOrd.hpp')
-rw-r--r--ndb/include/kernel/signaldata/TestOrd.hpp229
1 files changed, 229 insertions, 0 deletions
diff --git a/ndb/include/kernel/signaldata/TestOrd.hpp b/ndb/include/kernel/signaldata/TestOrd.hpp
new file mode 100644
index 00000000000..1600df08884
--- /dev/null
+++ b/ndb/include/kernel/signaldata/TestOrd.hpp
@@ -0,0 +1,229 @@
+/* Copyright (C) 2003 MySQL AB
+
+ This program 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.
+
+ This program 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 this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#ifndef TEST_ORD_H
+#define TEST_ORD_H
+
+#include "SignalData.hpp"
+
+/**
+ * Send by API to preform TEST ON / TEST OFF
+ *
+ * SENDER: API
+ * RECIVER: SimBlockCMCtrBlck
+ */
+class TestOrd {
+ friend class Ndb;
+ friend class Cmvmi;
+ friend class MgmtSrvr;
+public:
+
+ enum Command {
+ KeepUnchanged = 0,
+ On = 1,
+ Off = 2,
+ Toggle = 3,
+ COMMAND_MASK = 3
+ };
+
+ enum SignalLoggerSpecification {
+ InputSignals = 1,
+ OutputSignals = 2,
+ InputOutputSignals = 3,
+ LOG_MASK = 3
+ };
+
+ enum TraceSpecification {
+ TraceALL = 0,
+ TraceAPI = 1,
+ TraceGlobalCheckpoint = 2,
+ TraceLocalCheckpoint = 4,
+ TraceDisconnect = 8,
+ TRACE_MASK = 15
+ };
+
+private:
+ STATIC_CONST( SignalLength = 25 );
+
+ /**
+ * Clear Signal
+ */
+ void clear();
+
+ /**
+ * Set/Get test command
+ */
+ void setTestCommand(Command);
+ void getTestCommand(Command&) const;
+
+ /**
+ * Set trace command
+ */
+ void setTraceCommand(Command, TraceSpecification);
+
+ /**
+ * Get trace command
+ */
+ void getTraceCommand(Command&, TraceSpecification&) const;
+
+ /**
+ * Return no of signal logger commands
+ *
+ * -1 Means apply command(0) to all blocks
+ *
+ */
+ UintR getNoOfSignalLoggerCommands() const;
+
+ /**
+ * Add a signal logger command to a specific block
+ */
+ void addSignalLoggerCommand(BlockNumber, Command, SignalLoggerSpecification);
+
+ /**
+ * Add a signal logger command to all blocks
+ *
+ * Note removes all previously added commands
+ *
+ */
+ void addSignalLoggerCommand(Command, SignalLoggerSpecification);
+
+ /**
+ * Get Signal logger command
+ */
+ void getSignalLoggerCommand(int no, BlockNumber&, Command&, SignalLoggerSpecification&) const;
+
+ UintR testCommand; // DATA 0
+ UintR traceCommand; // DATA 1
+ UintR noOfSignalLoggerCommands; // DATA 2
+ UintR signalLoggerCommands[22]; // DATA 3 - 25
+};
+
+#define COMMAND_SHIFT (0)
+#define TRACE_SHIFT (2)
+#define LOG_SHIFT (2)
+
+#define BLOCK_NO_SHIFT (16)
+#define BLOCK_NO_MASK 65535
+
+/**
+ * Clear Signal
+ */
+inline
+void
+TestOrd::clear(){
+ setTestCommand(KeepUnchanged);
+ setTraceCommand(KeepUnchanged, TraceAPI); //
+ noOfSignalLoggerCommands = 0;
+}
+
+/**
+ * Set/Get test command
+ */
+inline
+void
+TestOrd::setTestCommand(Command cmd){
+ ASSERT_RANGE(cmd, 0, COMMAND_MASK, "TestOrd::setTestCommand");
+ testCommand = cmd;
+}
+
+inline
+void
+TestOrd::getTestCommand(Command & cmd) const{
+ cmd = (Command)(testCommand >> COMMAND_SHIFT);
+}
+
+/**
+ * Set trace command
+ */
+inline
+void
+TestOrd::setTraceCommand(Command cmd, TraceSpecification spec){
+ ASSERT_RANGE(cmd, 0, COMMAND_MASK, "TestOrd::setTraceCommand");
+ ASSERT_RANGE(spec, 0, TRACE_MASK, "TestOrd::setTraceCommand");
+ traceCommand = (cmd << COMMAND_SHIFT) | (spec << TRACE_SHIFT);
+}
+
+/**
+ * Get trace command
+ */
+inline
+void
+TestOrd::getTraceCommand(Command & cmd, TraceSpecification & spec) const{
+ cmd = (Command)((traceCommand >> COMMAND_SHIFT) & COMMAND_MASK);
+ spec = (TraceSpecification)((traceCommand >> TRACE_SHIFT) & TRACE_MASK);
+}
+
+/**
+ * Return no of signal logger commands
+ *
+ * -1 Means apply command(0) to all blocks
+ *
+ */
+inline
+UintR
+TestOrd::getNoOfSignalLoggerCommands() const{
+ return noOfSignalLoggerCommands;
+}
+
+/**
+ * Add a signal logger command to a specific block
+ */
+inline
+void
+TestOrd::addSignalLoggerCommand(BlockNumber bnr,
+ Command cmd, SignalLoggerSpecification spec){
+ ASSERT_RANGE(cmd, 0, COMMAND_MASK, "TestOrd::addSignalLoggerCommand");
+ ASSERT_RANGE(spec, 0, LOG_MASK, "TestOrd::addSignalLoggerCommand");
+ //ASSERT_MAX(bnr, BLOCK_NO_MASK, "TestOrd::addSignalLoggerCommand");
+
+ signalLoggerCommands[noOfSignalLoggerCommands] =
+ (bnr << BLOCK_NO_SHIFT) | (cmd << COMMAND_SHIFT) | (spec << LOG_SHIFT);
+ noOfSignalLoggerCommands ++;
+}
+
+/**
+ * Add a signal logger command to all blocks
+ *
+ * Note removes all previously added commands
+ *
+ */
+inline
+void
+TestOrd::addSignalLoggerCommand(Command cmd, SignalLoggerSpecification spec){
+ ASSERT_RANGE(cmd, 0, COMMAND_MASK, "TestOrd::addSignalLoggerCommand");
+ ASSERT_RANGE(spec, 0, LOG_MASK, "TestOrd::addSignalLoggerCommand");
+
+ noOfSignalLoggerCommands = ~0;
+ signalLoggerCommands[0] = (cmd << COMMAND_SHIFT) | (spec << LOG_SHIFT);
+}
+
+/**
+ * Get Signal logger command
+ */
+inline
+void
+TestOrd::getSignalLoggerCommand(int no, BlockNumber & bnr,
+ Command & cmd,
+ SignalLoggerSpecification & spec) const{
+ bnr = (BlockNumber)((signalLoggerCommands[no] >> BLOCK_NO_SHIFT)
+ & BLOCK_NO_MASK);
+ cmd = (Command)((signalLoggerCommands[no] >> COMMAND_SHIFT)
+ & COMMAND_MASK);
+ spec = (SignalLoggerSpecification)((signalLoggerCommands[no] >> LOG_SHIFT)
+ & LOG_MASK);
+}
+
+#endif