Beispiel #1
0
        public void SharedMem_Wait()
        {
            sm1 = null;
            sm2 = null;

            try
            {
                a      = 0;
                b      = 0;
                thread = new Thread(new ThreadStart(WaitThread));

                sm1 = new SharedMem();
                sm1.Open("Shared", 100, SharedMem.OpenMode.CREATE_OPEN);
                sm1.Lock(true);

                thread.Start();
                Thread.Sleep(1000);

                a = 1;
                sm1.Unlock();
                thread.Join();

                Assert.IsTrue(locked);
                Assert.AreEqual(1, b);
            }
            finally
            {
                if (sm1 != null)
                {
                    sm1.Close();
                }
            }
        }
Beispiel #2
0
        private void sharedMemoryToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                ContextMenu menu  = new ContextMenu();
                NodeInfo[]  infos = SharedMem.GetNodeInfos();

                foreach (NodeInfo info in infos)
                {
                    MenuItem item = btnOpen_SharedMemoryCreateMenuItem(info.name, info.dstChan);
                    menu.MenuItems.Add(item);
                }

                if (infos.Length == 0)
                {
                    MenuItem item = new MenuItem("(No nodes found)");
                    item.Enabled = false;
                    menu.MenuItems.Add(item);
                }

                menu.Show(this, new System.Drawing.Point(10, 10));
            }
            catch (Exception ex)
            {
                MessageBox.Show("Failed to init shared memory. Is the correct shmemchain.dll in the program directory? (" + ex.ToString() + ")");
            }
        }
Beispiel #3
0
        public void SharedMem_Lock()
        {
            sm1 = null;
            sm2 = null;

            try
            {
                locked = false;
                thread = new Thread(new ThreadStart(LockThread));

                sm1 = new SharedMem();
                sm1.Open("Shared", 100, SharedMem.OpenMode.CREATE_OPEN);
                sm1.Lock(true);

                thread.Start();
                Thread.Sleep(1000);
                sm1.Unlock();
                thread.Join();

                Assert.IsTrue(locked);
            }
            finally
            {
                if (sm1 != null)
                {
                    sm1.Close();
                }
            }
        }
Beispiel #4
0
        public void SharedMem_CreateFail()
        {
            SharedMem mem1 = null;
            SharedMem mem2 = null;

            try
            {
                mem1 = new SharedMem();
                mem1.Open("Shared", 100, SharedMem.OpenMode.CREATE_ONLY);

                mem2 = new SharedMem();
                mem2.Open("Shared", 100, SharedMem.OpenMode.CREATE_ONLY);
                Assert.Fail();
            }
            catch
            {
                // This is supposed to throw an exception
            }
            finally
            {
                if (mem1 != null)
                {
                    mem1.Close();
                }

                if (mem2 != null)
                {
                    mem2.Close();
                }
            }
        }
    void Start()
    {
        Debug.Log("[ReadSharedMemory] initializing objects...");
        // only for .NET 4.0 and above
        //MemoryMappedFile mmf = MemoryMappedFile.CreateNew(TAG_NAME, SHARED_MEMORY_SIZE);

        // for all versions of .NET
        map = new SharedMem(TAG_NAME, true, SHARED_MEMORY_SIZE);
    }
Beispiel #6
0
        public SharedMemSink(Control displayControl)
        {
            Shmem            = new SharedMem(-2, 0, "Demodulator output", 8192);
            StatusLabel      = new Label();
            StatusLabel.Text = "Writer idle";
            StatusLabel.Dock = DockStyle.Fill;
            Status           = "";

            displayControl.Controls.Add(StatusLabel);
        }
Beispiel #7
0
        public NetworkDeviceControl()
        {
            InitializeComponent();

            NetShmemSink = new SharedMem(-2, 0, "Network Output Node");

            _SampleSource = new ShmemSampleSource("NetworkReader", NetShmemSink.DstChan, 1, 0);
            _SampleSource.InvertedSpectrum     = false;
            _SampleSource.SamplingRateChanged += new EventHandler(_SampleSource_SamplingRateChanged);
            _SampleSource.DataFormat           = SampleFormat;
            _SampleSource.SamplesPerBlock      = 8192;
        }
Beispiel #8
0
        public void ProcessData(byte[] dataBuffer, SharedMem outChan)
        {
            byte[] outBuffer    = null;
            int    outBufferPos = 0;

            if (outChan != null)
            {
                outBuffer = new byte[dataBuffer.Length / 2];
            }

            lock (SampleValues)
            {
                const int bytePerSamplePair = 4;

                for (int pos = 0; pos < dataBuffer.Length / bytePerSamplePair; pos++)
                {
                    double I = ByteUtil.getDoubleFromBytes(dataBuffer, bytePerSamplePair * pos);
                    double Q = ByteUtil.getDoubleFromBytes(dataBuffer, bytePerSamplePair * pos + 2);

                    double phase    = Math.Atan2(I, Q);
                    double strength = 20 * Math.Sqrt(I * I + Q * Q);

                    while (phase - lastPhase < -(Math.PI / 2))
                    {
                        phase += Math.PI;
                    }

                    while (phase - lastPhase > Math.PI / 2)
                    {
                        phase -= Math.PI;
                    }

                    double diff      = phase - lastPhase;
                    double finalDiff = diff * strength;
                    SampleValues.Add(finalDiff);

                    if (outBuffer != null)
                    {
                        ByteUtil.putBytesFromDouble(outBuffer, 2 * (outBufferPos++), finalDiff);
                    }

                    totalPhase += diff;
                    lastPhase   = phase % (2 * Math.PI);
                }
            }

            if (outChan != null)
            {
                outChan.Write(outBuffer, 0, outBufferPos * 2);
            }
        }
Beispiel #9
0
        private void LockThread()
        {
            sm2 = new SharedMem();

            try
            {
                sm2.Open("Shared", 100, SharedMem.OpenMode.CREATE_OPEN);
                locked = sm2.Lock(false) == null;
            }
            finally
            {
                sm2.Close();
            }
        }
Beispiel #10
0
        private void btnOpen_Click(object sender, EventArgs e)
        {
            if (ShmemChannel != null)
            {
                ShmemChannel.Unregister();
                ShmemChannel = null;

                btnOpen.Text = "Open";
            }
            else
            {
                ShmemChannel = new SharedMem(0, -1, "Gauss Generator");
                btnOpen.Text = "Close";
            }
        }
Beispiel #11
0
        private void WaitThread()
        {
            sm2 = new SharedMem();

            try
            {
                sm2.Open("Shared", 100, SharedMem.OpenMode.CREATE_OPEN);
                locked = sm2.Lock() != null;
                b      = a;
                sm2.Unlock();
            }
            finally
            {
                sm2.Close();
            }
        }
Beispiel #12
0
        public ShmemSampleSource(string name, int srcChan, int oversampling, double samplingRate, long bufferSize)
            : base(oversampling)
        {
            ShmemChannel             = new SharedMem(srcChan, -1, name, bufferSize);
            ShmemChannel.ReadTimeout = 100;
            ShmemChannel.ReadMode    = eReadMode.TimeLimitedNoPartial;

            InvertedSpectrum = false;
            DataFormat       = ByteUtil.eSampleFormat.Direct16BitIQFixedPointLE;

            SamplesPerBlock = 1024;

            if (samplingRate > 0)
            {
                InputSamplingRate = samplingRate;
            }
        }
Beispiel #13
0
        public HiQSDRDeviceControl()
        {
            InitializeComponent();

            NetShmemSink = new SharedMem(-2, 0, "Network Output Node");

            _SampleSource = new ShmemSampleSource("NetworkReader", NetShmemSink.DstChan, 1, 0);
            _SampleSource.InvertedSpectrum     = false;
            _SampleSource.SamplingRateChanged += new EventHandler(_SampleSource_SamplingRateChanged);
            _SampleSource.DataFormat           = DataFormat;
            _SampleSource.ForceInputRate(CurrentRate);

            Endpoint = new IPEndPoint(IPAddress.Any, 0);

            TransferThread = new Thread(TransferThreadMain);
            TransferThread.Start();

            radioAcqOff.Checked = true;
        }
Beispiel #14
0
        public void SharedMem_CreateOpen()
        {
            SharedMem mem1 = null;
            SharedMem mem2 = null;
            byte *    pBuf;

            try
            {
                mem1 = new SharedMem();
                mem2 = new SharedMem();

                mem1.Open("Shared", 100, SharedMem.OpenMode.CREATE_OPEN);
                mem2.Open("Shared", 100, SharedMem.OpenMode.CREATE_OPEN);

                pBuf = mem1.Lock(true);
                for (int i = 0; i < 100; i++)
                {
                    Assert.AreEqual(0, pBuf[i]);
                }

                pBuf[0]  = 77;
                pBuf[99] = 99;

                mem1.Unlock();

                pBuf = mem2.Lock(true);

                Assert.AreEqual(77, pBuf[0]);
                Assert.AreEqual(99, pBuf[99]);
            }
            finally
            {
                if (mem1 != null)
                {
                    mem1.Close();
                }

                if (mem2 != null)
                {
                    mem2.Close();
                }
            }
        }
Beispiel #15
0
        private void btnOpen_SharedMemory(object sender, EventArgs e)
        {
            ContextMenu menu = new ContextMenu();

            NodeInfo[] infos = SharedMem.GetNodeInfos();

            foreach (NodeInfo info in infos)
            {
                MenuItem item = btnOpen_SharedMemoryCreateMenuItem(info.name, info.dstChan);
                menu.MenuItems.Add(item);
            }

            if (infos.Length == 0)
            {
                MenuItem item = new MenuItem("(No nodes found)");
                item.Enabled = false;
                menu.MenuItems.Add(item);
            }

            btnOpen.ContextMenu = menu;
            btnOpen.ContextMenu.Show(btnOpen, new Point(10, 10));
        }
Beispiel #16
0
        private void btnOpen_Click(object sender, EventArgs e)
        {
            if (ShmemChannel != null)
            {
                ThreadActive = false;
                Thread.Sleep(10);
                ReadThread.Abort();
                ShmemChannel.Unregister();
                ShmemChannel = null;

                btnOpen.Text = "Open";
            }
            else
            {
                ShmemChannel = new SharedMem(0, -1, "C# Test");
                ThreadActive = true;
                ReadThread   = new Thread(new ThreadStart(FFTReadFunc));
                ReadThread.Start();

                btnOpen.Text = "Close";
            }
        }