Exemplo n.º 1
0
 /// <summary>
 /// Function to set all values of a pointer
 /// </summary>
 /// <param name="nr">number of pointer to set</param>
 /// <param name="id">id of section</param>
 /// <param name="length">length of section</param>
 /// <param name="index">index of section</param>
 public void setPointer(int nr, ushort id, int length, int index)
 {
     if (nr >= 0)
     {
         if (nr < _NrMandatory)
         {
             if (_MandatoryPointers[nr] == null)
             {
                 _MandatoryPointers[nr] = new SCPPointer();
             }
             _MandatoryPointers[nr].Nr     = id;
             _MandatoryPointers[nr].Length = length;
             _MandatoryPointers[nr].Index  = index;
         }
         else if ((_OptionalPointers != null) &&
                  ((nr - _NrMandatory) < _OptionalPointers.Length))
         {
             nr -= _NrMandatory;
             if (_OptionalPointers[nr] == null)
             {
                 _OptionalPointers[nr] = new SCPPointer();
             }
             _OptionalPointers[nr].Nr     = id;
             _OptionalPointers[nr].Length = length;
             _OptionalPointers[nr].Index  = index;
         }
     }
 }
Exemplo n.º 2
0
        protected override int _Read(byte[] buffer, int offset)
        {
            /* Very stange, but most SCP files I got didn't seem to be live up to this law.
             * the check will now only be doen when the Protocol Version Nr is greator equal
             * to 14. This value might need changes in future.
             *
             *	Reference 5.3.1 of the "Standard Communications protocol for computer-assisted
             *	 electrocardiography".
             */
            if ((ProtocolVersionNr >= 13) &&
                ((Reserved[0] != _Reserved[0]) ||
                 (Reserved[1] != _Reserved[1]) ||
                 (Reserved[2] != _Reserved[2]) ||
                 (Reserved[3] != _Reserved[3]) ||
                 (Reserved[4] != _Reserved[4]) ||
                 (Reserved[5] != _Reserved[5])))
            {
                return(0x1);
            }

            int nrPointers = (Length - Size) / SCPPointer.Size;

            if (nrPointers < 12)
            {
                return(0x2);
            }
            for (int loper = 0; loper < _NrMandatory; loper++)
            {
                _MandatoryPointers[loper] = new SCPPointer();
                int err = _MandatoryPointers[loper].Read(buffer, offset);
                if (err != 0)
                {
                    return(err << 2);
                }
                offset += SCPPointer.Size;
            }
            nrPointers -= _NrMandatory;
            if (nrPointers > 0)
            {
                _OptionalPointers = new SCPPointer[nrPointers];
                for (int loper = 0; loper < nrPointers; loper++)
                {
                    _OptionalPointers[loper] = new SCPPointer();
                    int err = _OptionalPointers[loper].Read(buffer, offset);
                    if (err != 0)
                    {
                        return(err << 3);
                    }
                    offset += SCPPointer.Size;
                }
            }
            return(0x0);
        }