Exemple #1
0
        static public long SamplePosition(long sampleIndex,
                                          CaptureMask captureDataMask)
        {
            long result = sampleOffset +
                          BytesPerSample(captureDataMask) * sampleIndex;

            return(result);
        }
Exemple #2
0
        static public long SamplePosition(double seconds,
                                          CaptureMask captureDataMask,
                                          ref StatusPacket statusPacket)
        {
            seconds = Math.Max(0, seconds);
            long bytesPerSample = BytesPerSample(captureDataMask);
            long freq           = 1000 * statusPacket.sampleRate;
            long result         = (long)(seconds * freq * bytesPerSample);
            long err            = result % bytesPerSample;

            if (err > 0) // must fall on boundary
            {
                result += (bytesPerSample - err);
            }
            result += sampleOffset;
            return(result);
        }
Exemple #3
0
        static public long BytesPerSample(CaptureMask captureDataMask)
        {
            long result = sizeof(ushort); // voltage always present

            if ((captureDataMask & CaptureMask.chanMain) != 0)
            {
                result += sizeof(short);
            }
            if ((captureDataMask & CaptureMask.chanUsb) != 0)
            {
                result += sizeof(short);
            }
            if ((captureDataMask & CaptureMask.chanAux) != 0)
            {
                result += sizeof(short);
            }
            return(result);
        }
Exemple #4
0
 public static long SamplePosition(double seconds,
 CaptureMask captureDataMask,
 ref StatusPacket statusPacket)
 {
     seconds = Math.Max(0, seconds);
     long bytesPerSample = BytesPerSample(captureDataMask);
     long freq = 1000 * statusPacket.sampleRate;
     long result = (long)(seconds * freq * bytesPerSample);
     long err = result % bytesPerSample;
     if (err > 0) // must fall on boundary
         result += (bytesPerSample - err);
     result += sampleOffset;
     return result;
 }
Exemple #5
0
 public static long SamplePosition(long sampleIndex,
 CaptureMask captureDataMask)
 {
     long result = sampleOffset +
     BytesPerSample(captureDataMask) * sampleIndex;
     return result;
 }
Exemple #6
0
 public static long SampleCount(BinaryReader reader,
 CaptureMask captureDataMask)
 {
     return (reader.BaseStream.Length - sampleOffset)
     / BytesPerSample(captureDataMask);
 }
Exemple #7
0
 public static void GetSample(long sampleIndex,
 CaptureMask captureDataMask,
 StatusPacket statusPacket,
 BinaryReader reader,
 ref Sample sample)
 {
     // remember the index and time
     sample.sampleIndex = sampleIndex;
     sample.timeStamp = sampleIndex
     / (1000.0 * statusPacket.sampleRate);
     // intial settings for all flags
     sample.mainPresent =
     (captureDataMask & CaptureMask.chanMain) != 0;
     sample.usbPresent =
     (captureDataMask & CaptureMask.chanUsb) != 0;
     sample.auxPresent =
     (captureDataMask & CaptureMask.chanAux) != 0;
     sample.markerPresent = true;
     sample.missing = false;
     // abort if no data was selected
     long bytesPerSample = BytesPerSample(captureDataMask);
     if (bytesPerSample == 0)
         return;
     // remember original position
     long oldPos = reader.BaseStream.Position;
     // position the file to the start of the desired sample
     long newPos = SamplePosition(sampleIndex, captureDataMask);
     if (oldPos != newPos)
         reader.BaseStream.Position = newPos;
     // get default voltages (V) for the three channels
     sample.mainVoltage =
     2.0 + statusPacket.outputVoltageSetting * 0.01;
     sample.usbVoltage =
     (double)statusPacket.initialUsbVoltage * 125 / 1e6f;
     if (statusPacket.hardwareRevision < HardwareRev.revB)
         sample.usbVoltage /= 2;
     sample.auxVoltage =
     (double)statusPacket.initialAuxVoltage * 125 / 1e6f;
     if (statusPacket.hardwareRevision < HardwareRev.revC)
         sample.auxVoltage /= 2;
     // Main current (mA)
     if (sample.mainPresent)
     {
         short raw = reader.ReadInt16();
         sample.missing = sample.missing ||
         raw == missingRawCurrent;
         if (!sample.missing)
         {
             bool coarse = (raw & coarseMask) != 0;
             raw &= ~coarseMask;
             sample.mainCurrent = raw / 1000f; // uA -> mA
             if (coarse)
                 sample.mainCurrent *= 250;
         }
     }
     // Aux1 current (mA)
     if (sample.usbPresent)
     {
         short raw = reader.ReadInt16();
         sample.missing = sample.missing ||
         raw == missingRawCurrent;
         if (!sample.missing)
         {
             bool coarse = (raw & coarseMask) != 0;
             raw &= ~coarseMask;
             sample.usbCurrent = raw / 1000f; // uA -> mA
             if (coarse)
                 sample.usbCurrent *= 250;
         }
     }
     // Aux2 current (mA)
     if (sample.auxPresent)
     {
         short raw = reader.ReadInt16();
         sample.missing = sample.missing ||
         raw == missingRawCurrent;
         if (!sample.missing)
         {
             bool coarse = (raw & coarseMask) != 0;
             raw &= ~coarseMask;
             sample.auxCurrent = raw / 1000f; // uA -> mA
             if (coarse)
                 sample.auxCurrent *= 250;
         }
     }
     // Markers and Voltage (V)
     {
         ushort uraw = reader.ReadUInt16();
         sample.missing = sample.missing ||
         uraw == missingRawVoltage;
         if (!sample.missing)
         {
             // strip out marker bits
             sample.marker0 = (uraw & marker0Mask) != 0;
             sample.marker1 = (uraw & marker1Mask) != 0;
             uraw &= unchecked((ushort)~markerMask);
             // calculate voltage
             double voltage = (double)uraw * 125 / 1e6f;
             // assign the high-res voltage, as appropriate
             if ((statusPacket.leds & Leds.voltageIsAux) != 0)
             {
                 sample.auxVoltage = voltage;
                 if (statusPacket.hardwareRevision
                 < HardwareRev.revC)
                 {
                     sample.auxVoltage /= 2;
                 }
             }
             else
             {
                 sample.mainVoltage = voltage;
                 if (statusPacket.hardwareRevision
                 < HardwareRev.revB)
                 {
                     sample.mainVoltage /= 2;
                 }
             }
         }
     }
     // restore original position, if we moved it earlier
     if (oldPos != newPos)
         reader.BaseStream.Position = oldPos;
 }
Exemple #8
0
 public static long BytesPerSample(CaptureMask captureDataMask)
 {
     long result = sizeof(ushort); // voltage always present
     if ((captureDataMask & CaptureMask.chanMain) != 0)
         result += sizeof(short);
     if ((captureDataMask & CaptureMask.chanUsb) != 0)
         result += sizeof(short);
     if ((captureDataMask & CaptureMask.chanAux) != 0)
         result += sizeof(short);
     return result;
 }
Exemple #9
0
        static public void GetSample(long sampleIndex,
                                     CaptureMask captureDataMask,
                                     StatusPacket statusPacket,
                                     BinaryReader reader,
                                     ref Sample sample)
        {
            // remember the index and time
            sample.sampleIndex = sampleIndex;
            sample.timeStamp   = sampleIndex
                                 / (1000.0 * statusPacket.sampleRate);
            // intial settings for all flags
            sample.mainPresent =
                (captureDataMask & CaptureMask.chanMain) != 0;
            sample.usbPresent =
                (captureDataMask & CaptureMask.chanUsb) != 0;
            sample.auxPresent =
                (captureDataMask & CaptureMask.chanAux) != 0;
            sample.markerPresent = true;
            sample.missing       = false;
            // abort if no data was selected
            long bytesPerSample = BytesPerSample(captureDataMask);

            if (bytesPerSample == 0)
            {
                return;
            }
            // remember original position
            long oldPos = reader.BaseStream.Position;
            // position the file to the start of the desired sample
            long newPos = SamplePosition(sampleIndex, captureDataMask);

            if (oldPos != newPos)
            {
                reader.BaseStream.Position = newPos;
            }
            // get default voltages (V) for the three channels
            sample.mainVoltage =
                2.0 + statusPacket.outputVoltageSetting * 0.01;
            sample.usbVoltage =
                (double)statusPacket.initialUsbVoltage * 125 / 1e6f;
            if (statusPacket.hardwareRevision < HardwareRev.revB)
            {
                sample.usbVoltage /= 2;
            }
            sample.auxVoltage =
                (double)statusPacket.initialAuxVoltage * 125 / 1e6f;
            if (statusPacket.hardwareRevision < HardwareRev.revC)
            {
                sample.auxVoltage /= 2;
            }
            // Main current (mA)
            if (sample.mainPresent)
            {
                short raw = reader.ReadInt16();
                sample.missing = sample.missing ||
                                 raw == missingRawCurrent;
                if (!sample.missing)
                {
                    bool coarse = (raw & coarseMask) != 0;
                    raw &= ~coarseMask;
                    sample.mainCurrent = raw / 1000f; // uA -> mA
                    if (coarse)
                    {
                        sample.mainCurrent *= 250;
                    }
                }
            }
            // Aux1 current (mA)
            if (sample.usbPresent)
            {
                short raw = reader.ReadInt16();
                sample.missing = sample.missing ||
                                 raw == missingRawCurrent;
                if (!sample.missing)
                {
                    bool coarse = (raw & coarseMask) != 0;
                    raw &= ~coarseMask;
                    sample.usbCurrent = raw / 1000f; // uA -> mA
                    if (coarse)
                    {
                        sample.usbCurrent *= 250;
                    }
                }
            }
            // Aux2 current (mA)
            if (sample.auxPresent)
            {
                short raw = reader.ReadInt16();
                sample.missing = sample.missing ||
                                 raw == missingRawCurrent;
                if (!sample.missing)
                {
                    bool coarse = (raw & coarseMask) != 0;
                    raw &= ~coarseMask;
                    sample.auxCurrent = raw / 1000f; // uA -> mA
                    if (coarse)
                    {
                        sample.auxCurrent *= 250;
                    }
                }
            }
            // Markers and Voltage (V)
            {
                ushort uraw = reader.ReadUInt16();
                sample.missing = sample.missing ||
                                 uraw == missingRawVoltage;
                if (!sample.missing)
                {
                    // strip out marker bits
                    sample.marker0 = (uraw & marker0Mask) != 0;
                    sample.marker1 = (uraw & marker1Mask) != 0;
                    uraw          &= unchecked ((ushort)~markerMask);
                    // calculate voltage
                    double voltage = (double)uraw * 125 / 1e6f;
                    // assign the high-res voltage, as appropriate
                    if ((statusPacket.leds & Leds.voltageIsAux) != 0)
                    {
                        sample.auxVoltage = voltage;
                        if (statusPacket.hardwareRevision
                            < HardwareRev.revC)
                        {
                            sample.auxVoltage /= 2;
                        }
                    }
                    else
                    {
                        sample.mainVoltage = voltage;
                        if (statusPacket.hardwareRevision
                            < HardwareRev.revB)
                        {
                            sample.mainVoltage /= 2;
                        }
                    }
                }
            }
            // restore original position, if we moved it earlier
            if (oldPos != newPos)
            {
                reader.BaseStream.Position = oldPos;
            }
        }
Exemple #10
0
 static public long SampleCount(BinaryReader reader,
                                CaptureMask captureDataMask)
 {
     return((reader.BaseStream.Length - sampleOffset)
            / BytesPerSample(captureDataMask));
 }