Index: trunk/BNC/src/GPSDecoder.h
===================================================================
--- trunk/BNC/src/GPSDecoder.h	(revision 8187)
+++ trunk/BNC/src/GPSDecoder.h	(revision 8197)
@@ -43,5 +43,5 @@
   virtual ~GPSDecoder();
 
-  virtual t_irc Decode(char* buffer, int bufLen, 
+  virtual t_irc Decode(char* buffer, int bufLen,
                        std::vector<std::string>& errmsg) = 0;
 
@@ -50,5 +50,5 @@
 
   void initRinex(const QByteArray& staID, const QUrl& mountPoint,
-                 const QByteArray& latitude, const QByteArray& longitude, 
+                 const QByteArray& latitude, const QByteArray& longitude,
                  const QByteArray& nmea, const QByteArray& ntripVersion);
 
@@ -80,4 +80,5 @@
   QList<int>       _typeList;  // RTCM message types
   QStringList      _antType;   // RTCM antenna descriptor
+  QStringList      _recType;   // RTCM receiver descriptor
   QList<t_antInfo> _antList;   // RTCM antenna XYZ
   QString          _gloFrq;    // GLONASS slot
Index: trunk/BNC/src/RTCM3/RTCM3Decoder.cpp
===================================================================
--- trunk/BNC/src/RTCM3/RTCM3Decoder.cpp	(revision 8187)
+++ trunk/BNC/src/RTCM3/RTCM3Decoder.cpp	(revision 8197)
@@ -1379,13 +1379,13 @@
 }
 
-//
-////////////////////////////////////////////////////////////////////////////
-bool RTCM3Decoder::DecodeAntenna(unsigned char* data, int size) {
+/*
+////////////////////////////////////////////////////////////////////////////
+bool RTCM3Decoder::DecodeAntennaReceiver(unsigned char* data, int size) {
   char *antenna, type[256];
   int antnum = -1;
   uint64_t numbits = 0, bitfield = 0;
 
-  data += 4; /* header */
-  size -= 6; /* header + crc */
+  data += 4;
+  size -= 6;
 
   SKIPBITS(12)
@@ -1396,4 +1396,46 @@
     if (!_antType.contains(type)) {
       _antType.push_back(type);
+    }
+  }
+  return true;
+}*/
+
+//
+////////////////////////////////////////////////////////////////////////////
+bool RTCM3Decoder::DecodeAntennaReceiver(unsigned char* data, int size) {
+  char *antenna, anttype[256];
+  char *dummy;
+  char *receiver, rectype[256];
+
+  int type;
+
+  int dnum = -1;
+  int antnum = -1;
+  int recnum = -1;
+  uint64_t numbits = 0, bitfield = 0;
+
+  data += 3; /* header*/
+  size -= 6; /* header + crc */
+
+  GETBITS(type, 12)  qDebug() << "Type: " << type;
+  SKIPBITS(12)
+  GETSTRING(antnum, antenna)
+  if (antnum > -1 && antnum < 265) {
+    memcpy(anttype, antenna, antnum);
+    anttype[antnum] = 0;
+    if (!_antType.contains(anttype)) {
+      _antType.push_back(anttype);
+    }
+  }
+  if (type == 1033) {
+    SKIPBITS(8)
+    GETSTRING(dnum, dummy)
+    GETSTRING(recnum, receiver)
+    if (recnum > -1 && recnum < 265) {
+      memcpy(rectype, receiver, recnum);
+      rectype[recnum] = 0;
+      if (!_recType.contains(rectype)) {
+        _recType.push_back(rectype);
+      }
     }
   }
@@ -1526,5 +1568,5 @@
           case 1008:
           case 1033:
-            DecodeAntenna(_Message, _BlockSize);
+            DecodeAntennaReceiver(_Message, _BlockSize);
             break;
           case 1005:
Index: trunk/BNC/src/RTCM3/RTCM3Decoder.h
===================================================================
--- trunk/BNC/src/RTCM3/RTCM3Decoder.h	(revision 8187)
+++ trunk/BNC/src/RTCM3/RTCM3Decoder.h	(revision 8197)
@@ -64,5 +64,5 @@
    * {@link _MessageSize}: contains to current amount of bytes in the buffer<br>
    * {@link _SkipBytes}: amount of bytes to skip at the beginning of the buffer
-   * 
+   *
    * The functions sets following variables:<br>
    * {@link _NeedBytes}: Minimum number of bytes needed on next call<br>
@@ -146,10 +146,11 @@
   bool DecodeBDSEphemeris(unsigned char* buffer, int bufLen);
   /**
-   * Extract antenna type from 1007, 1008 or 1033 RTCM3 messages.
-   * @param buffer the buffer containing an antenna RTCM block
+   * Extract antenna type from 1007, 1008 or 1033 RTCM3 messages
+   * and extract receiver type from 1033 RTCM3 messages
+   * @param buffer the buffer containing an antenna (and receiver) RTCM block
    * @param bufLen the length of the buffer (the message length including header+crc)
    * @return <code>true</code> when data block was decodable
    */
-  bool DecodeAntenna(unsigned char* buffer, int bufLen);
+  bool DecodeAntennaReceiver(unsigned char* buffer, int bufLen);
   /**
    * Extract antenna type from 1005 or 1006 RTCM3 messages.
@@ -166,5 +167,5 @@
 
   /** List of decoders for Clock and Orbit data */
-  QMap<QByteArray, RTCM3coDecoder*> _coDecoders; 
+  QMap<QByteArray, RTCM3coDecoder*> _coDecoders;
 
   /** Message buffer for input parsing */
Index: trunk/BNC/src/bncgetthread.cpp
===================================================================
--- trunk/BNC/src/bncgetthread.cpp	(revision 8187)
+++ trunk/BNC/src/bncgetthread.cpp	(revision 8197)
@@ -893,4 +893,11 @@
       }
 
+      // RTCMv3 receiver descriptor
+      // --------------------------
+      for (int ii = 0; ii < decoder()->_recType.size(); ii++) {
+        QString rec1 = QString("%1 ").arg(decoder()->_recType[ii]);
+        emit(newMessage(_staID + ": Receiver descriptor " + rec1.toLatin1(), true));
+      }
+
       // RTCM GLONASS slots
       // ------------------
@@ -939,4 +946,5 @@
   decoder()->_typeList.clear();
   decoder()->_antType.clear();
+  decoder()->_recType.clear();
   decoder()->_antList.clear();
 }
