SignalLoggerManager.hpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:5k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. //****************************************************************************
  14. //
  15. // .NAME
  16. //      SignalLoggerManager - Handle signal loggers
  17. //
  18. //****************************************************************************
  19. #ifndef SignalLoggerManager_H
  20. #define SignalLoggerManager_H
  21. #include <kernel_types.h>
  22. #include <BlockNumbers.h>
  23. #include <TransporterDefinitions.hpp>
  24. class SignalLoggerManager
  25. {
  26. public:
  27.   SignalLoggerManager();
  28.   virtual ~SignalLoggerManager();
  29.   /**
  30.    * Sets output
  31.    * @Returns old output stream
  32.    */
  33.   FILE * setOutputStream(FILE * output);
  34.   
  35.   /**
  36.    * Gets current output
  37.    */
  38.   FILE * getOutputStream() const;
  39.   void flushSignalLog();
  40.   
  41.   /**
  42.    * For direct signals
  43.    * @See also SimulatedBlock EXECUTE_DIRECT
  44.    */   
  45.   void executeDirect(const SignalHeader&, 
  46.      Uint8 prio, const Uint32 * theData, Uint32 node);
  47.   
  48.   /**
  49.    * For input signals
  50.    */
  51.   void executeSignal(const SignalHeader&, Uint8 prio,
  52.                      const Uint32 * theData, Uint32 node,
  53.                      const SegmentedSectionPtr ptr[3], Uint32 secs);
  54.   void executeSignal(const SignalHeader&, Uint8 prio,
  55.                      const Uint32 * theData, Uint32 node,
  56.                      const LinearSectionPtr ptr[3], Uint32 secs);
  57.   /**
  58.    * For output signals
  59.    */
  60.   void sendSignal(const SignalHeader&, Uint8 prio, 
  61.   const Uint32 * theData, Uint32 node,
  62.                   const SegmentedSectionPtr ptr[3], Uint32 secs);
  63.   void sendSignal(const SignalHeader&, Uint8 prio, 
  64.   const Uint32 * theData, Uint32 node,
  65.                   const LinearSectionPtr ptr[3], Uint32 secs);
  66.   
  67.   /**
  68.    * For output signals
  69.    */
  70.   void sendSignalWithDelay(Uint32 delayInMilliSeconds, 
  71.    const SignalHeader&, 
  72.    Uint8 prio, const Uint32 * data, Uint32 node,
  73.                            const SegmentedSectionPtr ptr[3], Uint32 secs);
  74.   
  75.   /**
  76.    * Generic messages in the signal log
  77.    */
  78.   void log(BlockNumber bno, const char * msg);
  79.   
  80.   /**
  81.    * LogModes
  82.    */
  83.   enum LogMode {
  84.     LogOff   = 0,
  85.     LogIn    = 1,
  86.     LogOut   = 2,
  87.     LogInOut = 3
  88.   };
  89.   /**
  90.    * Returns no of loggers affected
  91.    */
  92.   int log(LogMode logMode, const char * params);
  93.   int logOn(bool allBlocks, BlockNumber bno, LogMode logMode);
  94.   int logOff(bool allBlocks, BlockNumber bno, LogMode logMode);
  95.   int logToggle(bool allBlocks, BlockNumber bno, LogMode logMode);
  96.   
  97.   void setTrace(unsigned long trace);   
  98.   unsigned long getTrace() const;
  99.   void setOwnNodeId(int nodeId);
  100.   void setLogDistributed(bool val);
  101.   /**
  102.    * Print header
  103.    */
  104.   static void printSignalHeader(FILE * output, 
  105. const SignalHeader & sh,
  106. Uint8 prio, 
  107. Uint32 node,
  108. bool printReceiversSignalId);
  109.   
  110.   /**
  111.    * Function for printing the Signal Data
  112.    */
  113.   static void printSignalData(FILE * out, 
  114.       const SignalHeader & sh, const Uint32 *);
  115.   /**
  116.    * Print linear section.
  117.    */
  118.   static void printLinearSection(FILE * output,
  119.                                  const SignalHeader & sh,
  120.                                  const LinearSectionPtr ptr[3],
  121.                                  unsigned i);
  122.   /**
  123.    * Print segmented section.
  124.    */
  125.   static void printSegmentedSection(FILE * output,
  126.                                     const SignalHeader & sh,
  127.                                     const SegmentedSectionPtr ptr[3],
  128.                                     unsigned i);
  129.   /**
  130.    * Print data word in hex.  Adds line break before the word
  131.    * when pos > 0 && pos % 7 == 0.  Increments pos.
  132.    */
  133.   static void printDataWord(FILE * output, Uint32 & pos, const Uint32 data);
  134. private:
  135.   bool m_logDistributed;
  136.   Uint32 m_ownNodeId;
  137.   FILE * outputStream;
  138.   int log(int cmd, BlockNumber bno, LogMode logMode);
  139.   
  140.   Uint32        traceId;
  141.   Uint8         logModes[NO_OF_BLOCKS];
  142.   
  143.   inline bool
  144.   logMatch(BlockNumber bno, LogMode mask)
  145.   {
  146.     // avoid addressing outside logModes
  147.     return
  148.       bno < MIN_BLOCK_NO || bno > MAX_BLOCK_NO ||
  149.       (logModes[bno-MIN_BLOCK_NO] & mask);
  150.   }
  151. };
  152. #endif // SignalLoggerManager_H