Exemplo n.º 1
0
        /// <summary>
        /// メッセージの表示を行います
        /// </summary>
        private void display()
        {
            //メッセージの書き込み
            if (MoniMesg.queue.Count > 0)
            {
                MoniMesg.qlock.WaitOne();
                {
                    BluetoothLEAdvertisementReceivedEventArgs args = (BluetoothLEAdvertisementReceivedEventArgs)MoniMesg.queue.Dequeue();

                    iBeacon bcon = new iBeacon(args);

                    //if (bcon.UUID != null && bcon.UUID=="UUID")
                    if (bcon.Name != null && bcon.Name == "EP")
                    {
                        // iBeacon
                        DateTimeOffset timestamp = args.Timestamp;
                        this.textBox1.AppendText(timestamp.ToString("HH\\:mm\\:ss\\.fff") + "\r\n");
                        this.textBox1.AppendText("Name= " + bcon.Name + "\r\n");
                        this.textBox1.AppendText("00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19\r\n");
                        this.textBox1.AppendText(bcon.mData + "\r\n");

                        this.textBox1.AppendText("温度= " + bcon.Temperature.ToString() + "\r\n");
                        this.textBox1.AppendText("湿度= " + bcon.Humidity.ToString() + "\r\n");
                        this.textBox1.AppendText("照度= " + bcon.Illuminance.ToString() + "\r\n");
                        this.textBox1.AppendText("気圧= " + bcon.Pressure.ToString() + "\r\n");

                        //DateTimeOffset timestamp = args.Timestamp;
                        string retBeaconData;
                        retBeaconData  = "{";
                        retBeaconData += string.Format("uuid:'{0}'\r\n", bcon.UUID);//"00000000-0000-0000-0000-000000000000"
                        retBeaconData += string.Format("major:{0}\r\n", bcon.Major.ToString("D"));
                        retBeaconData += string.Format("minor:{0}\r\n", bcon.Minor.ToString("D"));
                        retBeaconData += string.Format("measuredPower:{0}\r\n", bcon.MeasuredPower.ToString("D"));
                        retBeaconData += string.Format("rssi:{0}\r\n", bcon.Rssi.ToString("D"));
                        retBeaconData += string.Format("accuracy:{0}\r\n", bcon.Accuracy.ToString("F6"));
                        retBeaconData += string.Format("proximity:'{0}'\r\n", bcon.Proximity);
                        retBeaconData += "}";

                        //this.textBox1.AppendText(timestamp.ToString("HH\\:mm\\:ss\\.fff") + ":\r\n" + retBeaconData + "\r\n");

                        if (textBox1.TextLength >= 32000)
                        {
                            //string str = textBox1.Text;
                            //string word = "-----\r\n";
                            //int len = str.LastIndexOf(word);
                            //str = str.Substring(len + word.Length);
                            //textBox1.Text = str;
                            textBox1.Text = "";
                        }
                    }
                }
                MoniMesg.qlock.Set();
            }
            else
            {
                //if (!MoniMesg.AlertFlag)
                //{
                //    lblMessage.Text = "";
                //}
            }
            Application.DoEvents();
        }
Exemplo n.º 2
0
        //コンストラクタ2
        public iBeacon(BluetoothLEAdvertisementReceivedEventArgs eventArgs)
        {
            //出力されているbyteデータから各値を抽出する
            var manufacturerSections = eventArgs.Advertisement.ManufacturerData;

            Timestamp         = eventArgs.Timestamp;
            AdvertisementType = eventArgs.AdvertisementType;

            //var md = eventArgs.Advertisement.ManufacturerData.FirstOrDefault();
            //var data1 = new byte[md.Data.Length];
            //var manufacturerData1 = eventArgs.Advertisement.ManufacturerData[1];


            Debug.WriteLine("manufacturerSections.Count= " + manufacturerSections.Count.ToString());

            if (manufacturerSections.Count > 0)
            {
                var manufacturerData = manufacturerSections[0];
                var data             = new byte[manufacturerData.Data.Length];

                iBeacon bcon = new iBeacon();

                using (var reader = DataReader.FromBuffer(manufacturerData.Data))
                {
                    reader.ReadBytes(data);
                }

                Name = eventArgs.Advertisement.LocalName;
                Debug.WriteLine(Name);


                //長さをチェック
                if (data == null || data.Length < MinimumLengthInBytes + AdjustedLengthInBytes)
                {
                    if (Name == "EP")
                    {
                        mData = BitConverter.ToString(data);

                        Temperature = ((double)data[1] + (double)data[2] * 256.0) / 100.0;
                        Humidity    = ((double)data[3] + (double)data[4] * 256.0) / 100.0;
                        Illuminance = ((double)data[5] + (double)data[6] * 256.0);
                        Pressure    = ((double)data[9] + (double)data[10] * 256.0) / 10.0;
                    }
                    return;
                }

                //イベントから取得
                Rssi = eventArgs.RawSignalStrengthInDBm;
                //Name = eventArgs.Advertisement.LocalName;
                ManufacturerId = manufacturerData.CompanyId;

                //バイトデータから抽出
                //公式での出力値(Windowsでは2byteずれているので補正が必要)
                // Byte(s)  WinByte(s) Name
                // --------------------------
                // 0-1      none       Manufacturer ID (16-bit unsigned integer, big endian)
                // 2-3      0-1        Beacon code (two 8-bit unsigned integers, but can be considered as one 16-bit unsigned integer in little endian)
                // 4-19     2-17       ID1 (UUID)
                // 20-21    18-19      ID2 (16-bit unsigned integer, big endian)
                // 22-23    20-21      ID3 (16-bit unsigned integer, big endian)
                // 24       22         Measured Power (signed 8-bit integer)
                // 25       23         Reserved for use by the manufacturer to implement special features (optional)

                //BigEndianの値を取得
                UUID          = BitConverter.ToString(data, 4 + AdjustedLengthInBytes, 16);                      // Bytes 2-17
                MeasuredPower = Convert.ToSByte(BitConverter.ToString(data, 24 + AdjustedLengthInBytes, 1), 16); // Byte 22

                //もし追加データがあればここで取得
                if (data.Length >= MinimumLengthInBytes + AdjustedLengthInBytes + 1)
                {
                    ManufacturerReserved = data[25 + AdjustedLengthInBytes]; // Byte 23
                }

                //.NET FramewarkのEndianはCPUに依存するらしい
                if (BitConverter.IsLittleEndian)
                {
                    //LittleEndianの値を取得
                    byte[] revData;

                    revData = new byte[] { data[20 + AdjustedLengthInBytes], data[21 + AdjustedLengthInBytes] };// Bytes 18-19
                    Array.Reverse(revData);
                    Major = BitConverter.ToUInt16(revData, 0);

                    revData = new byte[] { data[22 + AdjustedLengthInBytes], data[23 + AdjustedLengthInBytes] };// Bytes 20-21
                    Array.Reverse(revData);
                    Minor = BitConverter.ToUInt16(revData, 0);
                }
                else
                {
                    //BigEndianの値を取得
                    Major = BitConverter.ToUInt16(data, 20 + AdjustedLengthInBytes); // Bytes 18-19
                    Minor = BitConverter.ToUInt16(data, 22 + AdjustedLengthInBytes); // Bytes 20-21
                }
            }
            else
            {
                new iBeacon();
            }
        }