Beispiel #1
0
        public async static Task UpdateSensorData(SensorData data)
        {
            //Clear the textbox buffer when has MAX LINES (MAX_LINES).


            string dataStr = "";

            for (int i = 0; i < data.Values.Length; i++)
            {
                if (i == 0)
                {
                    dataStr = data.Values[i].ToString();
                }
                else
                {
                    dataStr += " ," + data.Values[i].ToString();
                }
            }
            string fmt;

            if (data.Sensor_Index != CC2650SensorTag.SensorServicesCls.SensorIndexes.BAROMETRIC_PRESSURE)
            {
                fmt = string.Format("{0}\t\t\t[ {1} ]", data.Sensor_Index, dataStr);
            }
            else
            {
                fmt = string.Format("{0}\t[ {1} ]", data.Sensor_Index, dataStr);
            }
            await CC2650SensorTag.PrependTextStatic(fmt);
        }
        public static async Task StartLogging(long numLoops, long period, byte config, bool iterate)
        {
            System.Threading.Interlocked.Exchange(ref AllEventCount, 0);
            await CC2650SensorTag.PrependTextStatic("cls");

            LogMsg     = "";
            SensorCntr = config;
            if (SensorCntr != 0)
            {
                SensorCntr--; //It gets incremented when first (and every time) ity is used.
            }
            Iterate        = iterate;
            SensorIsOn     = new Dictionary <CC2650SensorTag.SensorServicesCls.SensorIndexes, bool>();
            PeriodCounter  = 0;
            LastEventCount = 0;

            SensorPeriod = numLoops;
            UpdatePeriod = 1000 * period;

            StorageFolder storageFolder = KnownFolders.DocumentsLibrary;;
            var           sampleFile    = await storageFolder.CreateFileAsync("sensors.log",
                                                                              CreationCollisionOption.ReplaceExisting);

            await IterateEnableDisableSensors();

            System.Threading.Interlocked.Exchange(ref EventCount, 0);
            ContinueLogging();
        }
Beispiel #3
0
        public static async Task StartRunning(long numLoops, long period, byte sensorCntr)
        {
            await CC2650SensorTag.PrependTextStatic("cls");

            LogMsg     = "";
            SensorCntr = sensorCntr;
            if (SensorIsOn == null)
            {
                SensorIsOn = new Dictionary <CC2650SensorTag.SensorServicesCls.SensorIndexes, bool>();

                for (CC2650SensorTag.SensorServicesCls.SensorIndexes sensor = CC2650SensorTag.SensorServicesCls.SensorIndexes.IR_SENSOR; sensor < (CC2650SensorTag.SensorServicesCls.SensorIndexes.NOTFOUND); sensor++)
                {
                    SensorIsOn.Add(sensor, false);
                }
            }
            PeriodCounter  = 0;
            LastEventCount = 0;

            SensorPeriod = numLoops;
            UpdatePeriod = 1000 * period;

            CC2650SensorTag.TagSensorEvents.CallMeBack = UpdateSensorData;
            CC2650SensorTag.TagSensorEvents.doCallback = true;

            //StorageFolder storageFolder = KnownFolders.DocumentsLibrary; ;
            //var sampleFile = await storageFolder.CreateFileAsync("sensors.log",
            //        CreationCollisionOption.ReplaceExisting);
            await EnableDisableSensors();

            System.Threading.Interlocked.Exchange(ref EventCount, 0);
            ContinueRunning();
        }
Beispiel #4
0
 public static async Task PrependTextStatic(string str)
 {
     if (msgCounter++ > CC2650SensorTag.MAX_LINES)
     {
         msgCounter = 0;
         await CC2650SensorTag.PrependTextStatic("cls");
     }
     await MP.PrependText(str);
 }
        static long UpdatePeriod = 15000; //15s

        static private async void EventTimerCallback(object state)
        {
            PeriodCounter++;

            //Log battery level
            byte batteryLevel = 0xff;
            var  res          = await Connectivity.TagServices.PropertyServices.GetBatteryLevel();

            if (res != null)
            {
                if (res.Length > 0)
                {
                    batteryLevel = res[0];
                }
            }
            string strnBatteryLevel = "";

            if (batteryLevel != 0xff)
            {
                strnBatteryLevel = "[" + batteryLevel.ToString() + "] ";
            }

            long currentCount;
            long diff;

            if (KeepCounting)
            {
                currentCount   = System.Threading.Interlocked.Read(ref EventCount);
                diff           = currentCount - LastEventCount;
                LastEventCount = currentCount;
            }
            else
            {
                diff = 0;
                diff = System.Threading.Interlocked.Exchange(ref EventCount, diff);
            }

            long AllCounts = System.Threading.Interlocked.Exchange(ref AllEventCount, 0);

            Debug.WriteLine(PeriodCounter);

            //Write log to UX
            string logMsg = SensorCntr.ToString() + " " + PeriodCounter.ToString() + " " + strnBatteryLevel
                            + " (" + AllCounts.ToString() + ") " + diff.ToString();
            await CC2650SensorTag.PrependTextStatic(logMsg);

            //Append log to Log
            LogMsg += logMsg + "\r\n";;

            //Write Log every SensorPeriod
            if ((PeriodCounter % SensorPeriod) == (SensorPeriod - 1))
            {
                StorageFolder storageFolder = KnownFolders.DocumentsLibrary;
                var           sampleFile    = await storageFolder.GetFileAsync("sensors.log");

                await Windows.Storage.FileIO.AppendTextAsync(sampleFile, LogMsg);

                LogMsg = "";

                if (Iterate)
                {
                    PeriodCounter = 0;
                    PauseLogging();


                    await IterateEnableDisableSensors();

                    ContinueLogging();
                }
            }
        }
        private static async Task IterateEnableDisableSensors()
        {
            SensorCntr++;
            //Skip any cntr which would have IO on.
            while (GetBit(SensorCntr, (int)CC2650SensorTag.SensorServicesCls.SensorIndexes.IO_SENSOR))
            {
                SensorCntr++;
            }
            string listActiveSensors = "";

            for (CC2650SensorTag.SensorServicesCls.SensorIndexes sensor = CC2650SensorTag.SensorServicesCls.SensorIndexes.IR_SENSOR; sensor < (CC2650SensorTag.SensorServicesCls.SensorIndexes.REGISTERS); sensor++)
            {
                if (sensor == CC2650SensorTag.SensorServicesCls.SensorIndexes.IO_SENSOR)
                {
                    continue;
                }
                //Skip IO

                if (!SensorIsOn.Keys.Contains(sensor))
                {
                    SensorIsOn.Add(sensor, false);
                }


                //else if (sensor == SensorUUIDs.SensorIndexes.KEYS)
                //    sen++;
                bool isToBeOn = GetBit(SensorCntr, (int)sensor); //Yes sensor here IS correct as its the sequential counter
                if (isToBeOn != SensorIsOn[sensor])
                {
                    if (SensorIsOn[sensor])
                    {
                        if (CC2650SensorTag.TagSensorServices.Sensors.Keys.Contains(sensor))
                        {
                            if (CC2650SensorTag.TagSensorServices.Sensors[sensor] != null)
                            {
                                await CC2650SensorTag.TagSensorServices.TurnOffSensor(CC2650SensorTag.TagSensorServices.Sensors[sensor]);
                            }
                        }
                    }
                    else
                    {
                        if (CC2650SensorTag.TagSensorServices.Sensors.Keys.Contains(sensor))
                        {
                            if (CC2650SensorTag.TagSensorServices.Sensors[sensor] != null)
                            {
                                await CC2650SensorTag.TagSensorServices.TurnOnSensor(CC2650SensorTag.TagSensorServices.Sensors[sensor]);
                            }
                        }
                    }

                    SensorIsOn[sensor] = isToBeOn;
                }
                if (SensorIsOn[sensor])
                {
                    if (listActiveSensors == "")
                    {
                        listActiveSensors = sensor.ToString();
                    }
                    else
                    {
                        listActiveSensors = sensor.ToString() + "," + listActiveSensors;
                    }
                }
                //else
                //    maxSensor = " " + maxSensor;
            }

            StorageFolder storageFolder = KnownFolders.DocumentsLibrary;;
            var           sampleFile    = await storageFolder.GetFileAsync("sensors.log");

            string hdr = string.Format("{0}   {1}\r\n", SensorCntr, listActiveSensors);

            Debug.WriteLine("{0}   {1}\r\n", SensorCntr, hdr);
            await Windows.Storage.FileIO.AppendTextAsync(sampleFile, hdr);

            await CC2650SensorTag.PrependTextStatic(hdr);
        }
            private async void Bleaw_Received(BluetoothLEAdvertisementWatcher sender, BluetoothLEAdvertisementReceivedEventArgs args)
            {
                if (sender == null)
                {
                    return;
                }
                bool OK = false;

                if (System.Threading.Interlocked.Increment(ref barrier) == 1)
                {
                    BLEAdvWatcher.Stop();
                    Guid  guidNotification;
                    ulong blAdress = args.BluetoothAddress;;

                    BluetoothLEDevice blDevice = await
                                                 Windows.Devices.Bluetooth.BluetoothLEDevice.FromBluetoothAddressAsync(blAdress);

                    if (!(blDevice == null))
                    {
                        var name = blDevice.Name;
                        System.Diagnostics.Debug.WriteLine("Device Name=:", name);
                        if ((blDevice.DeviceInformation.Kind ==
                             Windows.Devices.Enumeration.DeviceInformationKind.AssociationEndpoint) &&
                            (NameFilter == ""?true:name.ToLower().Contains(NameFilter.ToLower())))
                        {
                            System.Diagnostics.Debug.WriteLine("Bluetooth Address: {0}", blAdress);
                            await CC2650SensorTag.PrependTextStatic(string.Format("Bluetooth Address: {0}", blAdress));


                            byte[]
                                   bytes = BitConverter.GetBytes(blAdress);
                            string res   = System.Text.Encoding.UTF8.GetString(bytes);

                            string addrStr = bytes[bytes.Length - 3].ToString("X2");
                            for (int i = bytes.Length - 4; i > -1; i--)
                            {
                                addrStr += ":" + bytes[i].ToString("X2");
                            }

                            System.Diagnostics.Debug.WriteLine("Bluetooth Address: {0}", addrStr);
                            await CC2650SensorTag.PrependTextStatic(string.Format("Bluetooth Address: {0}", addrStr));

                            var scanresp = args.AdvertisementType;
                            Windows.Devices.Enumeration.DeviceAccessStatus result;
                            try
                            {
                                result = await blDevice.RequestAccessAsync();
                            }
                            catch (Exception ex)
                            {
                                result = Windows.Devices.Enumeration.DeviceAccessStatus.DeniedBySystem;
                            }
                            if (result == Windows.Devices.Enumeration.DeviceAccessStatus.Allowed)
                            {
                                name = blDevice.Name;
                                System.Diagnostics.Debug.WriteLine("Endpoint Device Name: {0}", name);
                                await CC2650SensorTag.PrependTextStatic(string.Format("Endpoint Device Name: {0}", name));

                                var services = await blDevice.GetGattServicesAsync();

                                var svcs = services.Services;
                                System.Diagnostics.Debug.WriteLine("Endpoint Device Id: {0}", blDevice.DeviceId);
                                await CC2650SensorTag.PrependTextStatic(string.Format("Endpoint Device Id: {0}", blDevice.DeviceId));

                                System.Diagnostics.Debug.WriteLine("Start");
                                string nm   = blDevice.Name;
                                string did  = blDevice.DeviceId;
                                string info = blDevice.DeviceInformation.Name;
                                if (svcs != null)
                                {
                                    int num = svcs.Count;

                                    if (num != 0)
                                    {
                                        foreach (var x in svcs)
                                        {
                                            string sdf   = x.Uuid.ToString();
                                            string asdcb = x.DeviceId;
                                            System.Diagnostics.Debug.WriteLine("{0} = {1}", sdf, asdcb);
                                        }
                                        await TagServices.InterogateServices(svcs);

                                        OK = true;
                                    }
                                    else
                                    {
                                        System.Diagnostics.Debug.WriteLine("No Services.");
                                        OK = false;
                                    }
                                }
                                else
                                {
                                    System.Diagnostics.Debug.WriteLine("ull Services.");
                                    OK = false;
                                }
                            }
                        }
                    }
                }
                if (!OK)
                {
                    System.Threading.Interlocked.Decrement(ref barrier);
                    BLEAdvWatcher.Start();
                }
            }
Beispiel #8
0
            public async Task InterogateServices(IReadOnlyList <GattDeviceService> svcs)
            {
                //With event data event an increment is added.
                //The increment is 100^(sensor)  so each sensor can be counted up to 100 times in each logging interval
                //ie Max of 1 minute 30 seconds to be safe.
                //Each sensor then uses 2 digits in this logged value.

                foreach (var gattService in svcs)
                {
                    var    uuid = gattService.Uuid;
                    string st   = uuid.ToString();
                    System.Diagnostics.Debug.WriteLine("Service: {0}\r\n", st);
                    await CC2650SensorTag.PrependTextStatic(string.Format("Service: {0}\r\n", st));

                    SensorChars sensorCharacteristics = null;

                    PropertyServiceCls.SensorTagProperties property = PropertyServiceCls.SensorTagProperties.NOTFOUND;

                    SensorServicesCls.SensorIndexes sensor = SensorServicesCls.SensorIndexes.NOTFOUND;
                    sensor = SensorServicesCls.GetSensor(st);
                    if (sensor != SensorServicesCls.SensorIndexes.NOTFOUND)
                    {
                        sensorCharacteristics = new SensorChars(sensor);
                        System.Diagnostics.Debug.WriteLine("Sensor: {0}", sensor);
                        await CC2650SensorTag.PrependTextStatic(string.Format("Sensor: {0}", sensor));
                    }
                    else
                    {
                        property = PropertyServices.GetProperty(st);
                        if (property == PropertyServiceCls.SensorTagProperties.NOTFOUND)
                        {
                            System.Diagnostics.Debug.WriteLine("Service Not Found: {0}", st);
                            await CC2650SensorTag.PrependTextStatic(string.Format("Service Not Found: {0}", st));

                            continue;
                        }
                        else
                        {
                            sensorCharacteristics = new SensorChars(property);
                            System.Diagnostics.Debug.WriteLine("Service: {0}", property);
                            await CC2650SensorTag.PrependTextStatic(string.Format("Service: {0}", property));
                        }
                    }


                    //if (sensor == CC2650SensorTag.SensorIndexes.REGISTERS)
                    //{
                    //    System.Diagnostics.Debug.WriteLine("Service Ignored: {0}", st);
                    //    continue;
                    //}



                    var res = await gattService.GetCharacteristicsAsync();

                    if (res.Status != GattCommunicationStatus.Success)
                    {
                        System.Diagnostics.Debug.WriteLine("Error getting Characteristics in {0}/{1}. Status: {2}", sensor, property, res.Status);


                        if (sensor != SensorServicesCls.SensorIndexes.NOTFOUND)
                        {
                            await CC2650SensorTag.PrependTextStatic(string.Format("Error getting Characteristics in {0}", sensor.ToString()));
                        }
                        else
                        {
                            await CC2650SensorTag.PrependTextStatic(string.Format("Error getting Characteristics in {0}", property.ToString()));
                        }

                        continue;
                    }
                    int count = res.Characteristics.Count();
                    var sensorCharacteristicList = res.Characteristics;
                    if (count == 0)
                    {
                        System.Diagnostics.Debug.WriteLine("No Characteristics in {0}/{1}", sensor, property);
                        if (sensor != SensorServicesCls.SensorIndexes.NOTFOUND)
                        {
                            await CC2650SensorTag.PrependTextStatic(string.Format("No Characteristics in {0}", sensor.ToString()));
                        }
                        else
                        {
                            await CC2650SensorTag.PrependTextStatic(string.Format("No Characteristics in {0}", property.ToString()));
                        }

                        continue;
                    }
                    var characteristic1 = sensorCharacteristicList.First();

                    foreach (var characteristic in sensorCharacteristicList)
                    {
                        SensorServicesCls.CharacteristicTypes  charType  = SensorServicesCls.CharacteristicTypes.NOTFOUND;
                        PropertyServiceCls.SensorTagProperties charPType = PropertyServiceCls.SensorTagProperties.NOTFOUND;

                        if (sensor != SensorServicesCls.SensorIndexes.NOTFOUND)
                        {
                            charType = SensorServicesCls.GetSensorCharacteristicType(characteristic.Uuid.ToString());
                            System.Diagnostics.Debug.WriteLine("{0} {1}", characteristic.Uuid, charType);
                            await CC2650SensorTag.PrependTextStatic(string.Format("{0} {1}", characteristic.Uuid, charType));
                        }
                        else
                        {
                            charPType = PropertyServices.GetPropertyCharacteristicType(characteristic.Uuid.ToString());
                            System.Diagnostics.Debug.WriteLine("{0} {1}", characteristic.Uuid, charPType);
                            await CC2650SensorTag.PrependTextStatic(string.Format("{0} {1}", characteristic.Uuid, charPType));
                        }
                        if (characteristic.CharacteristicProperties.HasFlag(flagNotify))
                        {
                            GattCharacteristic CharacteristicNotification = characteristic;
                            if (CharacteristicNotification != null)
                            {
                                CharacteristicNotification.ValueChanged += SensorEvents.Notification_ValueChanged;
                                if (CharacteristicNotification.CharacteristicProperties.HasFlag(flagNotify))
                                {
                                    await CharacteristicNotification.WriteClientCharacteristicConfigurationDescriptorAsync(GattClientCharacteristicConfigurationDescriptorValue.Notify);
                                }
                            }
                        }

                        if (sensor != SensorServicesCls.SensorIndexes.NOTFOUND)
                        {
                            if (!sensorCharacteristics.Charcteristics.Keys.Contains(charType))
                            {
                                switch (charType)
                                {
                                case SensorServicesCls.CharacteristicTypes.Notify:
                                    sensorCharacteristics.Charcteristics.Add(CC2650SensorTag.SensorServicesCls.CharacteristicTypes.Notify, characteristic);
                                    break;

                                case SensorServicesCls.CharacteristicTypes.Enable:
                                    sensorCharacteristics.Charcteristics.Add(CC2650SensorTag.SensorServicesCls.CharacteristicTypes.Enable, characteristic);
                                    break;

                                case SensorServicesCls.CharacteristicTypes.Period:
                                    sensorCharacteristics.Charcteristics.Add(CC2650SensorTag.SensorServicesCls.CharacteristicTypes.Period, characteristic);
                                    break;

                                case SensorServicesCls.CharacteristicTypes.Data:
                                    sensorCharacteristics.Charcteristics.Add(CC2650SensorTag.SensorServicesCls.CharacteristicTypes.Data, characteristic);
                                    break;

                                case SensorServicesCls.CharacteristicTypes.Configuration:
                                    sensorCharacteristics.Charcteristics.Add(CC2650SensorTag.SensorServicesCls.CharacteristicTypes.Configuration, characteristic);
                                    break;

                                case SensorServicesCls.CharacteristicTypes.Registers_Address:
                                    sensorCharacteristics.Charcteristics.Add(CC2650SensorTag.SensorServicesCls.CharacteristicTypes.Registers_Address, characteristic);
                                    break;

                                case SensorServicesCls.CharacteristicTypes.Registers_Device_Id:
                                    sensorCharacteristics.Charcteristics.Add(CC2650SensorTag.SensorServicesCls.CharacteristicTypes.Registers_Device_Id, characteristic);
                                    break;

                                case SensorServicesCls.CharacteristicTypes.NOTFOUND:
                                    break;
                                }
                            }
                        }
                        else
                        {
                            if (property != PropertyServiceCls.SensorTagProperties.NOTFOUND)
                            {
                                if (!sensorCharacteristics.CharcteristicsP.Keys.Contains(charPType))
                                {
                                    sensorCharacteristics.CharcteristicsP.Add(charPType, characteristic);
                                }
                            }
                        }
                    }

                    if (sensor != SensorServicesCls.SensorIndexes.NOTFOUND)
                    {
                        if (!Sensors.Keys.Contains(sensor))
                        {
                            Sensors.Add(sensor, sensorCharacteristics);
                        }
                    }
                    else if (property != PropertyServiceCls.SensorTagProperties.NOTFOUND)
                    {
                        if (!PropertyServices.Properties.Keys.Contains(property))
                        {
                            PropertyServices.Properties.Add(property, sensorCharacteristics);
                        }
                    }
                }
            }