Esempio n. 1
0
        private void ReadData()
        {
            dataCollection = new Dictionary <string, List <GsrPpgPacket> >()
            {
                ["GSR"] = new List <GsrPpgPacket>(),
                ["PPG"] = new List <GsrPpgPacket>()
            };

            int  data_rx       = 0;
            bool receivingData = false;
            bool wasPPG        = false;
            int  byteCount     = 0;
            int  data          = 0;

            var stopwatch = new Stopwatch();

            stopwatch.Start();

            while (reading)
            {
                data_rx = base.ReadByte();

                // start bit detected. ready to receive data
                if (!receivingData && (data_rx & 0x1) == 0x0)
                {
                    byteCount     = 0;
                    receivingData = true;
                }
                // receiving data
                else if (receivingData && (data_rx & 0x1) == 0x1)
                {
                    switch (byteCount)
                    {
                    case 0:
                        // check if this data is PPG
                        wasPPG     = (data_rx & 0x02) != 0;
                        data       = (data_rx & 0xfc) >> 2;
                        byteCount += 1;
                        break;

                    case 1:
                        // check if data is continuous. if not, it's an error
                        if (wasPPG != ((data_rx & 0x02) != 0))
                        {
                            byteCount     = 0;
                            receivingData = false;
                            break;
                        }
                        data      += (data_rx & 0xfc) << 4;
                        byteCount += 1;
                        break;

                    case 2:
                        // check if data is continuous. if not, it's an error
                        if (wasPPG != ((data_rx & 0x02) != 0))
                        {
                            byteCount     = 0;
                            receivingData = false;
                            break;
                        }
                        data += (data_rx & 0xfc) << 10;
                        var packetReceivedTickCount = stopwatch.ElapsedTicks;
                        DataArrivedEventArgs args   = new DataArrivedEventArgs {
                            Timestamp = packetReceivedTickCount, Data = data
                        };
                        if (wasPPG)
                        {
                            dataCollection["PPG"].Add(new GsrPpgPacket(data, packetReceivedTickCount));
                            OnPpgDataArrived(args);
                        }
                        else
                        {
                            dataCollection["GSR"].Add(new GsrPpgPacket(data, packetReceivedTickCount));
                            OnGsrDataArrived(args);
                        }
                        // clean up
                        byteCount     = 0;
                        receivingData = false;
                        break;
                    }
                }
                // dirty data, ready for receive new data
                else
                {
                    byteCount     = 0;
                    receivingData = false;
                }
            }
        }
Esempio n. 2
0
 protected virtual void OnPpgDataArrived(DataArrivedEventArgs e)
 {
     PpgDataArrived?.Invoke(this, e);
 }