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(); }
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(); }
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(); } }
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); } } } }