public void CleanUp()
 {
     this.ProcessQeueue.Clear();
     this.Command        = Constants.SyncHandlerSequence.Default;
     this.CommandRequest = new byte[] { };
     this.PacketsReceived.Clear();
     this.Device = null;
     this.StartIncrementProgress = false;
 }
		public void CleanUp()
		{
			this.ProcessQeueue.Clear();
			this.Command = Constants.SyncHandlerSequence.Default;
			this.CommandRequest = new byte[] { };
			this.PacketsReceived.Clear();
			this.Device = null;
			this.StartIncrementProgress = false;
		}
		public async void ProcessCommands()
		{
			Debug.WriteLine("SyncHandler: ProcessCommands");

			if (this.ProcessQeueue.Count > 0)
			{
				Command = this.ProcessQeueue.Dequeue();

			}
			else {
				Debug.WriteLine("No more commands to be processed!");
				return;
			}

			ICharacteristic chr = null;

			switch (Command)
			{
				case Constants.SyncHandlerSequence.EnableFF07:
					Debug.WriteLine("SyncDeviceHandler936: Enabling FF07 characteristic");
					Ff07Char = GetServicesCharacteristic(Constants.CharacteristicsUUID._FF07);
					if (Ff07Char == null)
					{
						Debug.WriteLine("FF07 is NULL. Disconnecting device.");
						this.Adapter.DisconnectDevice(Device);
					}
					else {
						Ff07Char.StartUpdates();
					}
					break;
				case Constants.SyncHandlerSequence.EnableFF08:
					Debug.WriteLine("SyncDeviceHandler936: Enabling FF08 characteristic");
					Ff08Char = GetServicesCharacteristic(Constants.CharacteristicsUUID._FF08);
					if (Ff08Char == null)
					{
						Debug.WriteLine("FF08 is NULL. Disconnecting device.");
						this.Adapter.DisconnectDevice(Device);
					}
					else {
						Ff08Char.StartUpdates();
					}
					break;
				case Constants.SyncHandlerSequence.ReadModel:
					Debug.WriteLine("SyncDeviceHandler936: Reading model from characteristic.");
					ReadChar = GetServicesCharacteristic(Constants.CharacteristicsUUID._2A24);
					chr = await ReadChar.ReadAsync();
					Debug.WriteLine("Model: " + System.Text.Encoding.UTF8.GetString(chr.Value, 0, chr.Value.Length));
					ProcessCommands();
					break;
				case Constants.SyncHandlerSequence.ReadSerial:
					Debug.WriteLine("SyncDeviceHandler936: Reading serial from characterisitic.");
					ReadChar = GetServicesCharacteristic(Constants.CharacteristicsUUID._2A25);
					chr = await ReadChar.ReadAsync();
					Debug.WriteLine("Serial: " + System.Text.Encoding.UTF8.GetString(chr.Value, 0, chr.Value.Length));
					ProcessCommands();
					break;
				case Constants.SyncHandlerSequence.ReadFwVersion:
					Debug.WriteLine("SyncDeviceHandler936: Reading fw version from characteristic.");
					ReadChar = GetServicesCharacteristic(Constants.CharacteristicsUUID._2A26);
					chr = await ReadChar.ReadAsync();
					Debug.WriteLine("Firmware Version: " + System.Text.Encoding.UTF8.GetString(chr.Value, 0, chr.Value.Length));
					ProcessCommands();
					break;
				case Constants.SyncHandlerSequence.ReadManufacturer:
					Debug.WriteLine("SyncDeviceHandler936: Reading manufacturer from characteristic.");
					this.StartIncrementProgress = true;
					ReadChar = GetServicesCharacteristic(Constants.CharacteristicsUUID._2A29);
					chr = await ReadChar.ReadAsync();
					Debug.WriteLine("Manufacturer: " + System.Text.Encoding.UTF8.GetString(chr.Value, 0, chr.Value.Length));
					ProcessCommands();
					break;
				case Constants.SyncHandlerSequence.ReadBatteryLevel:
					Debug.WriteLine("SyncDeviceHandler936: Reading battery level from characteristic.");
					ReadChar = GetServicesCharacteristic(Constants.CharacteristicsUUID._2A19);
					chr = await ReadChar.ReadAsync();
					Debug.WriteLine("Battery Level: " + (int)chr.Value[0]);
					ProcessCommands();
					break;
				case Constants.SyncHandlerSequence.ReadDeviceStatus:
					Debug.WriteLine(": Read Device Status");
					CommandRequest = new byte[] { 0x1B, 0x13 };
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.ReadDeviceSettings:
					Debug.WriteLine("SyncDeviceHandler936: Read Device Settings");
					CommandRequest = new byte[] { 0x1B, 0x17 };
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.ReadUserSettings:
					Debug.WriteLine("SyncDeviceHandler936: Read User Settings");
					CommandRequest = new byte[] { 0x1B, 0x19 };
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.ReadStepsHeader:
					Debug.WriteLine("SyncDeviceHandler936: Read Steps Header");
					CommandRequest = new byte[] { 0x1B, 0x22 };
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.ReadSeizureTable:
					Debug.WriteLine("SyncDeviceHandler936: Read Seizure Table");
					break;
				case Constants.SyncHandlerSequence.ReadHourlySteps:
					Debug.WriteLine("SyncDeviceHandler936: Read Steps Header");
					//CommandRequest = new byte[] { 0x1B, 0x24, 0x };
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.ReadCurrentHour:
					Debug.WriteLine("SyncDeviceHandler936: Read Current Hour");
					CommandRequest = new byte[] { 0x1B, 0x27 };
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.ReadSignature:
					Debug.WriteLine("SyncDeviceHandler936: Read Signature Data");
					//CommandRequest = new byte[] { 0x1B, 0x27 };
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.ReadSeizure:
					Debug.WriteLine("SyncDeviceHandler936: Read seizure Data");
					break;
				case Constants.SyncHandlerSequence.WriteStepsHeader:
					Debug.WriteLine("SyncDeviceHandler936: Writing steps header");
					break;
				case Constants.SyncHandlerSequence.WriteDeviceSettings:
					Debug.WriteLine("SyncDeviceHandler936: Writing device settings");
					break;
				case Constants.SyncHandlerSequence.WriteUserSettings:
					Debug.WriteLine("SyncDeviceHandler936: Writing user settings");
					break;
				case Constants.SyncHandlerSequence.WriteExerciseSettings:
					Debug.WriteLine("SyncDeviceHandler936: Writing exercise settings");
					break;
				case Constants.SyncHandlerSequence.WriteCompanySettings:
					Debug.WriteLine("SyncDeviceHandler936: Writing company settings");
					break;
				case Constants.SyncHandlerSequence.WriteSignatureSettings:
					Debug.WriteLine("SyncDeviceHandler936: Writing signature settings");
					break;
				case Constants.SyncHandlerSequence.WriteSeizureSettings:
					Debug.WriteLine("SyncDeviceHandler936: Writing seizure settings");
					break;
				case Constants.SyncHandlerSequence.WriteScreenFlow:
					Debug.WriteLine("SyncDeviceHandler936: Writing screenflow settings");
					break;
				case Constants.SyncHandlerSequence.WriteDeviceSensitivity:
					Debug.WriteLine("SyncDeviceHandler936: Writing device sensitivity settings");
					break;
				case Constants.SyncHandlerSequence.WriteDeviceStatus:
					Debug.WriteLine("SyncDeviceHandler936: Writing device status settings");
					break;
				case Constants.SyncHandlerSequence.WriteScreenDisplay:
					Debug.WriteLine("SyncDeviceHandler936: Writing screen display");
					break;
				case Constants.SyncHandlerSequence.ClearEEProm:
					Debug.WriteLine("SyncDeviceHandler936: Clear eeprom");
					break;
				case Constants.SyncHandlerSequence.WsGetDeviceInfo:
					Debug.WriteLine("SyncDeviceHandler936: WS Request GetDeviceInfo");
					/*Dictionary<String, object> parameter = new Dictionary<String, object>();
					parameter.Add("serno", "9999999894");
					parameter.Add("fwver", "4.3");
					parameter.Add("mdl", "961");
					parameter.Add("aid", 16781);
					parameter.Add("ddtm", "16-08-12 14:15");
					await WebService.PostData("https://test.savvysherpa.com/DeviceServices/api/Pedometer/GetDeviceInfo", parameter);
					*/
					break;
				default:
					Debug.WriteLine("SyncDeviceHandler936: Unable to identify command.");
					break;
			}

			if (this.ProcessQeueue.Count == 0)
			{
				Debug.WriteLine("Queue is already empty. Device will be disconnected.");
				this.Adapter.DisconnectDevice(this.Device);
				this.SyncDone(this, new SyncDoneEventArgs { Status = true });
			}
		}
        public void ProcessCommands()
        {
            Debug.WriteLine("SyncHandler: ProcessCommands");

            if (this.processQeueue.Count > 0)
            {
                command = this.processQeueue.Dequeue();
            }
            else {
                Debug.WriteLine("No more commands to be processed!");
                return;
            }

            switch (command)
            {
                case Constants.SyncHandlerSequence.EnableFF07:
                    Debug.WriteLine("SyncDeviceHandler961: Enabling FF07 characteristic");
                    ff07Char = GetServicesCharacterisitic(Constants.CharacteristicsUUID._FF07);
                    ff07Char.StartUpdates();
                    Task.Delay(500);
                    ProcessCommands();
                    break;
                case Constants.SyncHandlerSequence.EnableFF08:
                    Debug.WriteLine("SyncDeviceHandler961: Enabling FF08 characteristic");
                    ff08Char = GetServicesCharacterisitic(Constants.CharacteristicsUUID._FF08);
                    ff08Char.StartUpdates();
                    Task.Delay(500);
                    ProcessCommands();
                    break;
                case Constants.SyncHandlerSequence.ReadModel:
                    Debug.WriteLine("SyncDeviceHandler961: Reading model from characteristic.");
                    readChar = GetServicesCharacterisitic(Constants.CharacteristicsUUID._2A24);
                    readChar.ReadAsync();
                    break;
                case Constants.SyncHandlerSequence.ReadSerial:
                    Debug.WriteLine("SyncDeviceHandler961: Reading serial from characterisitic.");
                    readChar = GetServicesCharacterisitic(Constants.CharacteristicsUUID._2A25);
                    readChar.ReadAsync();
                    break;
                case Constants.SyncHandlerSequence.ReadFwVersion:
                    Debug.WriteLine("SyncDeviceHandler961: Reading fw version from characteristic.");
                    readChar = GetServicesCharacterisitic(Constants.CharacteristicsUUID._2A26);
                    readChar.ReadAsync();
                    break;
                case Constants.SyncHandlerSequence.ReadManufacturer:
                    Debug.WriteLine("SyncDeviceHandler961: Reading manufacturer from characteristic.");
                    readChar = GetServicesCharacterisitic(Constants.CharacteristicsUUID._2A29);
                    readChar.ReadAsync();
                    break;
                case Constants.SyncHandlerSequence.ReadBatteryLevel:
                    Debug.WriteLine("SyncDeviceHandler961: Reading battery level from characteristic.");
                    readChar = GetServicesCharacterisitic(Constants.CharacteristicsUUID._2A19);
                    readChar.ReadAsync();
                    break;
                default:
                    Debug.WriteLine("SyncDeviceHandler961: Unable to identify command.");
                    break;
            }
        }
        public async void ProcessCommands()
        {
            Debug.WriteLine("SyncHandler: ProcessCommands");

            if (this.ProcessQeueue.Count > 0)
            {
                Command = this.ProcessQeueue.Dequeue();
            }
            else
            {
                Debug.WriteLine("No more commands to be processed!");
                return;
            }

            ICharacteristic chr = null;

            switch (Command)
            {
            case Constants.SyncHandlerSequence.EnableFF07:
                Debug.WriteLine("SyncDeviceHandler939: Enabling FF07 characteristic");
                Ff07Char = GetServicesCharacteristic(Constants.CharacteristicsUUID._FF07);
                if (Ff07Char == null)
                {
                    Debug.WriteLine("FF07 is NULL. Disconnecting device.");
                    this.Adapter.DisconnectDevice(Device);
                }
                else
                {
                    Ff07Char.StartUpdates();
                }
                break;

            case Constants.SyncHandlerSequence.EnableFF08:
                Debug.WriteLine("SyncDeviceHandler939: Enabling FF08 characteristic");
                Ff08Char = GetServicesCharacteristic(Constants.CharacteristicsUUID._FF08);
                if (Ff08Char == null)
                {
                    Debug.WriteLine("FF08 is NULL. Disconnecting device.");
                    this.Adapter.DisconnectDevice(Device);
                }
                else
                {
                    Ff08Char.StartUpdates();
                }
                break;

            case Constants.SyncHandlerSequence.ReadModel:
                Debug.WriteLine("SyncDeviceHandler939: Reading model from characteristic.");
                ReadChar = GetServicesCharacteristic(Constants.CharacteristicsUUID._2A24);
                chr      = await ReadChar.ReadAsync();

                Debug.WriteLine("Model: " + System.Text.Encoding.UTF8.GetString(chr.Value, 0, chr.Value.Length));
                ProcessCommands();
                break;

            case Constants.SyncHandlerSequence.ReadSerial:
                Debug.WriteLine("SyncDeviceHandler939: Reading serial from characterisitic.");
                ReadChar = GetServicesCharacteristic(Constants.CharacteristicsUUID._2A25);
                chr      = await ReadChar.ReadAsync();

                Debug.WriteLine("Serial: " + System.Text.Encoding.UTF8.GetString(chr.Value, 0, chr.Value.Length));
                ProcessCommands();
                break;

            case Constants.SyncHandlerSequence.ReadFwVersion:
                Debug.WriteLine("SyncDeviceHandler939: Reading fw version from characteristic.");
                ReadChar = GetServicesCharacteristic(Constants.CharacteristicsUUID._2A26);
                chr      = await ReadChar.ReadAsync();

                Debug.WriteLine("Firmware Version: " + System.Text.Encoding.UTF8.GetString(chr.Value, 0, chr.Value.Length));
                ProcessCommands();
                break;

            case Constants.SyncHandlerSequence.ReadManufacturer:
                Debug.WriteLine("SyncDeviceHandler939: Reading manufacturer from characteristic.");
                this.StartIncrementProgress = true;
                ReadChar = GetServicesCharacteristic(Constants.CharacteristicsUUID._2A29);
                chr      = await ReadChar.ReadAsync();

                Debug.WriteLine("Manufacturer: " + System.Text.Encoding.UTF8.GetString(chr.Value, 0, chr.Value.Length));
                ProcessCommands();
                break;

            case Constants.SyncHandlerSequence.ReadBatteryLevel:
                Debug.WriteLine("SyncDeviceHandler939: Reading battery level from characteristic.");
                ReadChar = GetServicesCharacteristic(Constants.CharacteristicsUUID._2A19);
                chr      = await ReadChar.ReadAsync();

                Debug.WriteLine("Battery Level: " + (int)chr.Value[0]);
                ProcessCommands();
                break;

            case Constants.SyncHandlerSequence.ReadDeviceStatus:
                Debug.WriteLine("SyncDeviceHandler939: Read Device Status");
                CommandRequest = new byte[] { 0x1B, 0x13 };
                this.Adapter.SendCommand(Ff07Char, CommandRequest);
                break;

            case Constants.SyncHandlerSequence.ReadDeviceSettings:
                Debug.WriteLine("SyncDeviceHandler939: Read Device Settings");
                CommandRequest = new byte[] { 0x1B, 0x17 };
                this.Adapter.SendCommand(Ff07Char, CommandRequest);
                break;

            case Constants.SyncHandlerSequence.ReadUserSettings:
                Debug.WriteLine("SyncDeviceHandler939: Read User Settings");
                CommandRequest = new byte[] { 0x1B, 0x19 };
                this.Adapter.SendCommand(Ff07Char, CommandRequest);
                break;

            case Constants.SyncHandlerSequence.ReadStepsHeader:
                Debug.WriteLine("SyncDeviceHandler939: Read Steps Header");
                CommandRequest = new byte[] { 0x1B, 0x22 };
                this.Adapter.SendCommand(Ff07Char, CommandRequest);
                break;

            case Constants.SyncHandlerSequence.ReadSeizureTable:
                Debug.WriteLine("SyncDeviceHandler939: Read Seizure Table");
                break;

            case Constants.SyncHandlerSequence.ReadHourlySteps:
                Debug.WriteLine("SyncDeviceHandler939: Read Steps Header");
                //CommandRequest = new byte[] { 0x1B, 0x24, 0x };
                this.Adapter.SendCommand(Ff07Char, CommandRequest);
                break;

            case Constants.SyncHandlerSequence.ReadCurrentHour:
                Debug.WriteLine("SyncDeviceHandler939: Read Current Hour");
                CommandRequest = new byte[] { 0x1B, 0x27 };
                this.Adapter.SendCommand(Ff07Char, CommandRequest);
                break;

            case Constants.SyncHandlerSequence.ReadSignature:
                Debug.WriteLine("SyncDeviceHandler939: Read Signature Data");
                //CommandRequest = new byte[] { 0x1B, 0x27 };
                this.Adapter.SendCommand(Ff07Char, CommandRequest);
                break;

            case Constants.SyncHandlerSequence.ReadSeizure:
                Debug.WriteLine("SyncDeviceHandler939: Read seizure Data");
                break;

            case Constants.SyncHandlerSequence.WriteStepsHeader:
                Debug.WriteLine("SyncDeviceHandler939: Writing steps header");
                break;

            case Constants.SyncHandlerSequence.WriteDeviceSettings:
                Debug.WriteLine("SyncDeviceHandler939: Writing device settings");
                break;

            case Constants.SyncHandlerSequence.WriteUserSettings:
                Debug.WriteLine("SyncDeviceHandler939: Writing user settings");
                break;

            case Constants.SyncHandlerSequence.WriteExerciseSettings:
                Debug.WriteLine("SyncDeviceHandler939: Writing exercise settings");
                break;

            case Constants.SyncHandlerSequence.WriteCompanySettings:
                Debug.WriteLine("SyncDeviceHandler939: Writing company settings");
                break;

            case Constants.SyncHandlerSequence.WriteSignatureSettings:
                Debug.WriteLine("SyncDeviceHandler939: Writing signature settings");
                break;

            case Constants.SyncHandlerSequence.WriteSeizureSettings:
                Debug.WriteLine("SyncDeviceHandler939: Writing seizure settings");
                break;

            case Constants.SyncHandlerSequence.WriteScreenFlow:
                Debug.WriteLine("SyncDeviceHandler939: Writing screenflow settings");
                break;

            case Constants.SyncHandlerSequence.WriteDeviceSensitivity:
                Debug.WriteLine("SyncDeviceHandler936: Writing device sensitivity settings");
                break;

            case Constants.SyncHandlerSequence.WriteDeviceStatus:
                Debug.WriteLine("SyncDeviceHandler939: Writing device status settings");
                break;

            case Constants.SyncHandlerSequence.WriteScreenDisplay:
                Debug.WriteLine("SyncDeviceHandler939: Writing screen display");
                break;

            case Constants.SyncHandlerSequence.ClearEEProm:
                Debug.WriteLine("SyncDeviceHandler939: Clear eeprom");
                break;

            case Constants.SyncHandlerSequence.WsGetDeviceInfo:
                Debug.WriteLine("SyncDeviceHandler939: WS Request GetDeviceInfo");
                Dictionary <String, object> parameter = new Dictionary <String, object>();
                parameter.Add("serno", "9999999894");
                parameter.Add("fwver", "4.3");
                parameter.Add("mdl", "961");
                parameter.Add("aid", 16781);
                parameter.Add("ddtm", "16-08-12 14:15");
                await WebService.PostData("https://test.savvysherpa.com/DeviceServices/api/Pedometer/GetDeviceInfo", parameter);

                break;

            default:
                Debug.WriteLine("SyncDeviceHandler939: Unable to identify command.");
                break;
            }

            if (this.ProcessQeueue.Count == 0)
            {
                Debug.WriteLine("Queue is already empty. Device will be disconnected.");
                this.Adapter.DisconnectDevice(this.Device);
                this.SyncDone(this, new SyncDoneEventArgs {
                    Status = true
                });
            }
        }
        public async void ProcessCommands()
        {
            Debug.WriteLine("SyncHandler: ProcessCommands");

            if (this.ProcessQeueue.Count > 0)
            {
                Command = this.ProcessQeueue.Dequeue();
            }
            else
            {
                Debug.WriteLine("No more commands to be processed! Disconnecting device.");
                this.Adapter.DisconnectDevice(this.Device);
                return;
            }

            ICharacteristic chr = null;

            switch (Command)
            {
            case Constants.SyncHandlerSequence.EnableFF07:
                Debug.WriteLine("SyncDeviceHandler961: Enabling FF07 characteristic");
                Ff07Char = GetServicesCharacteristic(Constants.CharacteristicsUUID._FF07);
                if (Ff07Char == null)
                {
                    Debug.WriteLine("FF07 is NULL. Disconnecting device.");
                    this.Adapter.DisconnectDevice(Device);
                }
                else
                {
                    Ff07Char.StartUpdates();
                }
                break;

            case Constants.SyncHandlerSequence.EnableFF08:
                Debug.WriteLine("SyncDeviceHandler961: Enabling FF08 characteristic");
                Ff08Char = GetServicesCharacteristic(Constants.CharacteristicsUUID._FF08);
                if (Ff08Char == null)
                {
                    Debug.WriteLine("FF08 is NULL. Disconnecting device.");
                    this.Adapter.DisconnectDevice(Device);
                }
                else
                {
                    Ff08Char.StartUpdates();
                }
                break;

            case Constants.SyncHandlerSequence.ReadModel:
                Debug.WriteLine("SyncDeviceHandler961: Reading model from characteristic.");
                ReadChar = GetServicesCharacteristic(Constants.CharacteristicsUUID._2A24);
                chr      = await ReadChar.ReadAsync();

                int num = 0;
                Debug.WriteLine("Model: " + num);
                int.TryParse(System.Text.Encoding.UTF8.GetString(chr.Value, 0, chr.Value.Length).Replace("PE", "").Replace("FT", ""), out num);
                this.TrioDeviceInformationInstance.ModelNumber = num;
                ProcessCommands();
                break;

            case Constants.SyncHandlerSequence.ReadSerial:
                Debug.WriteLine("SyncDeviceHandler961: Reading serial from characterisitic.");
                ReadChar = GetServicesCharacteristic(Constants.CharacteristicsUUID._2A25);
                chr      = await ReadChar.ReadAsync();

                long serial = 0;
                long.TryParse(System.Text.Encoding.UTF8.GetString(chr.Value, 0, chr.Value.Length), out serial);
                Debug.WriteLine("Serial: " + serial);
                this.TrioDeviceInformationInstance.SerialNumber = serial;
                ProcessCommands();
                break;

            case Constants.SyncHandlerSequence.ReadFwVersion:
                Debug.WriteLine("SyncDeviceHandler961: Reading fw version from characteristic.");
                ReadChar = GetServicesCharacteristic(Constants.CharacteristicsUUID._2A26);
                chr      = await ReadChar.ReadAsync();

                float fwVer = 0;
                float.TryParse(System.Text.Encoding.UTF8.GetString(chr.Value, 0, chr.Value.Length), out fwVer);
                Debug.WriteLine("Firmware Version: " + fwVer);
                this.TrioDeviceInformationInstance.FirmwareVersion = fwVer;
                ProcessCommands();
                break;

            case Constants.SyncHandlerSequence.ReadManufacturer:
                Debug.WriteLine("SyncDeviceHandler961: Reading manufacturer from characteristic.");
                this.StartIncrementProgress = true;
                ReadChar = GetServicesCharacteristic(Constants.CharacteristicsUUID._2A29);
                chr      = await ReadChar.ReadAsync();

                Debug.WriteLine("Manufacturer: " + System.Text.Encoding.UTF8.GetString(chr.Value, 0, chr.Value.Length));
                ProcessCommands();
                break;

            case Constants.SyncHandlerSequence.ReadBatteryLevel:
                Debug.WriteLine("SyncDeviceHandler961: Reading battery level from characteristic.");
                ReadChar = GetServicesCharacteristic(Constants.CharacteristicsUUID._2A19);
                chr      = await ReadChar.ReadAsync();

                int battery = (int)chr.Value[0];
                Debug.WriteLine("Battery Level: " + battery);
                this.TrioDeviceInformationInstance.BatteryLevel = battery;
                ProcessCommands();
                break;

            case Constants.SyncHandlerSequence.ReadTallies:
                Debug.WriteLine("SyncDeviceHandler961: Read Device Tallies");
                CommandRequest = new byte[] { 0x1B, 0x5D };
                this.Adapter.SendCommand(Ff07Char, CommandRequest);
                break;

            case Constants.SyncHandlerSequence.ReadDeviceInformation:
                Debug.WriteLine("SyncDeviceHandler961: Read Device Information");
                CommandRequest = new byte[] { 0x1B, 0x40 };
                this.Adapter.SendCommand(Ff07Char, CommandRequest);
                break;

            case Constants.SyncHandlerSequence.ReadDeviceStatus:
                Debug.WriteLine("SyncDeviceHandler961: Read Device Status");
                CommandRequest = new byte[] { 0x1B, 0x13 };
                this.Adapter.SendCommand(Ff07Char, CommandRequest);
                break;

            case Constants.SyncHandlerSequence.ReadDeviceSettings:
                Debug.WriteLine("SyncDeviceHandler961: Read Device Settings");
                CommandRequest = new byte[] { 0x1B, 0x17 };
                this.Adapter.SendCommand(Ff07Char, CommandRequest);
                break;

            case Constants.SyncHandlerSequence.ReadUserSettings:
                Debug.WriteLine("SyncDeviceHandler961: Read User Settings");
                //CommandRequest = new byte[] { 0x1B, 0x19 };
                CommandRequest = await UserSettingsInstance.GetReadCommand();

                Debug.WriteLine("Read User Settings: " + Motion.Mobile.Utilities.Utils.ByteArrayToHexString(CommandRequest));
                this.Adapter.SendCommand(Ff07Char, CommandRequest);
                break;

            case Constants.SyncHandlerSequence.ReadStepsHeader:
                Debug.WriteLine("SyncDeviceHandler961: Read Steps Header");
                CommandRequest = new byte[] { 0x1B, 0x22 };
                this.Adapter.SendCommand(Ff07Char, CommandRequest);
                break;

            case Constants.SyncHandlerSequence.ReadSeizureTable:
                Debug.WriteLine("SyncDeviceHandler961: Read Seizure Table");
                break;

            case Constants.SyncHandlerSequence.ReadHourlySteps:
                Debug.WriteLine("SyncDeviceHandler961: Read Steps Header");
                //CommandRequest = new byte[] { 0x1B, 0x24, 0x };
                this.Adapter.SendCommand(Ff07Char, CommandRequest);
                break;

            case Constants.SyncHandlerSequence.ReadCurrentHour:
                Debug.WriteLine("SyncDeviceHandler961: Read Current Hour");
                CommandRequest = new byte[] { 0x1B, 0x27 };
                this.Adapter.SendCommand(Ff07Char, CommandRequest);
                break;

            case Constants.SyncHandlerSequence.ReadSignature:
                Debug.WriteLine("SyncDeviceHandler961: Read Signature Data");
                //CommandRequest = new byte[] { 0x1B, 0x27 };
                this.Adapter.SendCommand(Ff07Char, CommandRequest);
                break;

            case Constants.SyncHandlerSequence.ReadSeizure:
                Debug.WriteLine("SyncDeviceHandler961: Read seizure Data");
                break;

            case Constants.SyncHandlerSequence.WriteStepsHeader:
                Debug.WriteLine("SyncDeviceHandler961: Writing steps header");
                break;

            case Constants.SyncHandlerSequence.WriteDeviceSettings:
                Debug.WriteLine("SyncDeviceHandler961: Writing device settings");
                break;

            case Constants.SyncHandlerSequence.WriteUserSettings:
                Debug.WriteLine("SyncDeviceHandler961: Writing user settings");
                break;

            case Constants.SyncHandlerSequence.WriteExerciseSettings:
                Debug.WriteLine("SyncDeviceHandler961: Writing exercise settings");
                break;

            case Constants.SyncHandlerSequence.WriteCompanySettings:
                Debug.WriteLine("SyncDeviceHandler961: Writing company settings");
                break;

            case Constants.SyncHandlerSequence.WriteSignatureSettings:
                Debug.WriteLine("SyncDeviceHandler961: Writing signature settings");
                break;

            case Constants.SyncHandlerSequence.WriteSeizureSettings:
                Debug.WriteLine("SyncDeviceHandler961: Writing seizure settings");
                break;

            case Constants.SyncHandlerSequence.WriteScreenFlow:
                Debug.WriteLine("SyncDeviceHandler961: Writing screenflow settings");
                break;

            case Constants.SyncHandlerSequence.WriteDeviceSensitivity:
                Debug.WriteLine("SyncDeviceHandler961: Writing device sensitivity settings");
                break;

            case Constants.SyncHandlerSequence.WriteDeviceStatus:
                Debug.WriteLine("SyncDeviceHandler961: Writing device status settings");
                break;

            case Constants.SyncHandlerSequence.WriteScreenDisplay:
                Debug.WriteLine("SyncDeviceHandler961: Writing screen display");
                break;

            case Constants.SyncHandlerSequence.ClearEEProm:
                Debug.WriteLine("SyncDeviceHandler961: Clear eeprom");
                break;

            case Constants.SyncHandlerSequence.WsGetDeviceInfo:
                Debug.WriteLine("SyncDeviceHandler961: WS Request GetDeviceInfo");
                //to be replaced - start
                Dictionary <String, object> parameter = new Dictionary <String, object>();
                parameter.Add("serno", "9999999894");
                parameter.Add("fwver", "4.3");
                parameter.Add("mdl", "961");
                parameter.Add("aid", 16781);
                parameter.Add("ddtm", "16-08-12 14:15");
                Dictionary <string, object> dictionary = await WebService.PostData("https://test.savvysherpa.com/DeviceServices/api/Pedometer/GetDeviceInfo", parameter);

                //to be replaced - end
                string status = null;
                if (dictionary.ContainsKey("status"))
                {
                    status = dictionary["status"].ToString();
                }

                if (status != null && status.ToUpper().CompareTo("OK") == 0)
                {
                    Debug.WriteLine("Device is paired");
                    this.ProcessQeueue.Enqueue(Constants.SyncHandlerSequence.ReadTallies);
                    this.ProcessCommands();
                }
                else
                {
                    Debug.WriteLine("Device is not paired");
                    this.Adapter.DisconnectDevice(this.Device);
                }

                break;

            case Constants.SyncHandlerSequence.WsUploadTallies:
                break;

            case Constants.SyncHandlerSequence.WsUploadSteps:
                break;

            case Constants.SyncHandlerSequence.WsUploadSignature:
                break;

            case Constants.SyncHandlerSequence.WsUploadProfile:
                break;

            case Constants.SyncHandlerSequence.WsUnpairDevice:
                break;

            case Constants.SyncHandlerSequence.WsUploadSeizure:
                break;

            case Constants.SyncHandlerSequence.WsSendNotifySettingsUpdate:
                break;

            default:
                Debug.WriteLine("SyncDeviceHandler961: Unable to identify command.");
                break;
            }
        }
        public void ProcessCommands()
        {
            Debug.WriteLine("SyncHandler: ProcessCommands");

            if (this.processQeueue.Count > 0)
            {
                command = this.processQeueue.Dequeue();
            }
            else
            {
                Debug.WriteLine("No more commands to be processed!");
                return;
            }

            switch (command)
            {
            case Constants.SyncHandlerSequence.EnableFF07:
                Debug.WriteLine("SyncDeviceHandler961: Enabling FF07 characteristic");
                ff07Char = GetServicesCharacterisitic(Constants.CharacteristicsUUID._FF07);
                ff07Char.StartUpdates();
                Task.Delay(500);
                ProcessCommands();
                break;

            case Constants.SyncHandlerSequence.EnableFF08:
                Debug.WriteLine("SyncDeviceHandler961: Enabling FF08 characteristic");
                ff08Char = GetServicesCharacterisitic(Constants.CharacteristicsUUID._FF08);
                ff08Char.StartUpdates();
                Task.Delay(500);
                ProcessCommands();
                break;

            case Constants.SyncHandlerSequence.ReadModel:
                Debug.WriteLine("SyncDeviceHandler961: Reading model from characteristic.");
                readChar = GetServicesCharacterisitic(Constants.CharacteristicsUUID._2A24);
                readChar.ReadAsync();
                break;

            case Constants.SyncHandlerSequence.ReadSerial:
                Debug.WriteLine("SyncDeviceHandler961: Reading serial from characterisitic.");
                readChar = GetServicesCharacterisitic(Constants.CharacteristicsUUID._2A25);
                readChar.ReadAsync();
                break;

            case Constants.SyncHandlerSequence.ReadFwVersion:
                Debug.WriteLine("SyncDeviceHandler961: Reading fw version from characteristic.");
                readChar = GetServicesCharacterisitic(Constants.CharacteristicsUUID._2A26);
                readChar.ReadAsync();
                break;

            case Constants.SyncHandlerSequence.ReadManufacturer:
                Debug.WriteLine("SyncDeviceHandler961: Reading manufacturer from characteristic.");
                readChar = GetServicesCharacterisitic(Constants.CharacteristicsUUID._2A29);
                readChar.ReadAsync();
                break;

            case Constants.SyncHandlerSequence.ReadBatteryLevel:
                Debug.WriteLine("SyncDeviceHandler961: Reading battery level from characteristic.");
                readChar = GetServicesCharacterisitic(Constants.CharacteristicsUUID._2A19);
                readChar.ReadAsync();
                break;

            default:
                Debug.WriteLine("SyncDeviceHandler961: Unable to identify command.");
                break;
            }
        }
		public async void ProcessCommands()
		{
			Debug.WriteLine("SyncHandler: ProcessCommands");

			if (this.ProcessQeueue.Count > 0)
			{
				Command = this.ProcessQeueue.Dequeue();

			}
			else {
				Debug.WriteLine("No more commands to be processed! Disconnecting device.");
				this.Adapter.DisconnectDevice(this.Device);
				return;
			}

			ICharacteristic chr = null;

			switch (Command)
			{
				case Constants.SyncHandlerSequence.EnableFF07:
					Debug.WriteLine("SyncDeviceHandler961: Enabling FF07 characteristic");
					Ff07Char = GetServicesCharacteristic(Constants.CharacteristicsUUID._FF07);
					if (Ff07Char == null)
					{
						Debug.WriteLine("FF07 is NULL. Disconnecting device.");
						this.Adapter.DisconnectDevice(Device);
					}
					else {
						Ff07Char.StartUpdates();
					}
					break;
				case Constants.SyncHandlerSequence.EnableFF08:
					Debug.WriteLine("SyncDeviceHandler961: Enabling FF08 characteristic");
					Ff08Char = GetServicesCharacteristic(Constants.CharacteristicsUUID._FF08);
					if (Ff08Char == null)
					{
						Debug.WriteLine("FF08 is NULL. Disconnecting device.");
						this.Adapter.DisconnectDevice(Device);
					}
					else {
						Ff08Char.StartUpdates();
					}
					break;
				case Constants.SyncHandlerSequence.ReadModel:
					Debug.WriteLine("SyncDeviceHandler961: Reading model from characteristic.");
					ReadChar = GetServicesCharacteristic(Constants.CharacteristicsUUID._2A24);
					chr = await ReadChar.ReadAsync();
					int num = 0;
					int.TryParse(System.Text.Encoding.UTF8.GetString(chr.Value, 0, chr.Value.Length).Replace("PE", "").Replace("FT", ""), out num);
					Debug.WriteLine("Model: " + num);
					this.TrioDeviceInformationInstance.ModelNumber = num;
					string[] deviceNameComponents = this.Device.Name.Split(new Char[] {'-'});
					if ( deviceNameComponents.Count() == 3)
						this.TrioDeviceInformationInstance.BroadcastType = deviceNameComponents[1];
					else
						this.TrioDeviceInformationInstance.BroadcastType = "";

					ProcessCommands();
					break;
				case Constants.SyncHandlerSequence.ReadSerial:
					Debug.WriteLine("SyncDeviceHandler961: Reading serial from characterisitic.");
					ReadChar = GetServicesCharacteristic(Constants.CharacteristicsUUID._2A25);
					chr = await ReadChar.ReadAsync();
					long serial = 0;
					long.TryParse(System.Text.Encoding.UTF8.GetString(chr.Value, 0, chr.Value.Length), out serial);
					Debug.WriteLine("Serial: " + serial);
					this.TrioDeviceInformationInstance.SerialNumber = serial;
					ProcessCommands();
					break;
				case Constants.SyncHandlerSequence.ReadFwVersion:
					Debug.WriteLine("SyncDeviceHandler961: Reading fw version from characteristic.");
					ReadChar = GetServicesCharacteristic(Constants.CharacteristicsUUID._2A26);
					chr = await ReadChar.ReadAsync();
					float fwVer = 0;
					float.TryParse(System.Text.Encoding.UTF8.GetString(chr.Value, 0, chr.Value.Length), out fwVer);
					Debug.WriteLine("Firmware Version: " + fwVer);
					this.TrioDeviceInformationInstance.FirmwareVersion = fwVer;
					ProcessCommands();
					break;
				case Constants.SyncHandlerSequence.ReadManufacturer:
					Debug.WriteLine("SyncDeviceHandler961: Reading manufacturer from characteristic.");
					ReadChar = GetServicesCharacteristic(Constants.CharacteristicsUUID._2A29);
					chr = await ReadChar.ReadAsync();
					Debug.WriteLine("Manufacturer: " + System.Text.Encoding.UTF8.GetString(chr.Value, 0, chr.Value.Length));
					this.Adapter.CommandResponse += ReceiveResponse;
					//this.isGettingDeviceInformation = false;
					//if (this.ScanType == Constants.ScanType.SYNCING)
					//	this.isGettingDeviceInformation = true;
					ProcessCommands();
					break;
				case Constants.SyncHandlerSequence.ReadBatteryLevel:
					Debug.WriteLine("SyncDeviceHandler961: Reading battery level from characteristic.");
					ReadChar = GetServicesCharacteristic(Constants.CharacteristicsUUID._2A19);
					chr = await ReadChar.ReadAsync();
					int battery = (int) chr.Value[0];
					Debug.WriteLine("Battery Level: " + battery);
					this.TrioDeviceInformationInstance.BatteryLevel = battery;
					ProcessCommands();
					break;
				case Constants.SyncHandlerSequence.ReadTallies:
					Debug.WriteLine("SyncDeviceHandler961: Read Device Tallies");
					CommandRequest = new byte[] { 0x1B, 0x5D };
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.ReadDeviceInformation:
					Debug.WriteLine("SyncDeviceHandler961: Read Device Information");
					CommandRequest = new byte[] { 0x1B, 0x40 };
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.ReadDeviceStatus:
					Debug.WriteLine("SyncDeviceHandler961: Read Device Status");
					CommandRequest = await DeviceStatusInstance.GetReadCommand();
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.ReadDeviceSettings:
					Debug.WriteLine("SyncDeviceHandler961: Read Device Settings");
					CommandRequest = await DeviceSettingsInstance.GetReadCommand();
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.ReadSeizureSettings:
					Debug.WriteLine("SyncDeviceHandler961: Read Seizure Settings");
					CommandRequest = await SeizureSettingsInstance.GetReadCommand();
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;	
				case Constants.SyncHandlerSequence.ReadUserSettings:
					Debug.WriteLine("SyncDeviceHandler961: Read User Settings");
					CommandRequest = await UserSettingsInstance.GetReadCommand();
					Debug.WriteLine("Read User Settings: " + Motion.Mobile.Utilities.Utils.ByteArrayToHexString(CommandRequest));
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.ReadStepsHeader:
					Debug.WriteLine("SyncDeviceHandler961: Read Steps Header");
					CommandRequest = await StepsTableDataInstance.GetReadStepTableDataCommand();
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.ReadSeizureBlocks:
					Debug.WriteLine("SyncDeviceHandler961: Read Seizure Table");
					CommandRequest = await SeizureBlocksDataInstance.GetReadSeizureBlocksDataCommand();
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.ReadHourlySteps:
					Debug.WriteLine("SyncDeviceHandler961: Read Hourly Steps");
					DateTime dt = this.currentDateForStepTable;
					CommandRequest = await StepsDataInstance.getReadHourRangeCommand(dt, this.currentStartTimeForStepTable, currentEndTimeForStepTable);
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					Debug.WriteLine("Read Hour Range Settings: " + Motion.Mobile.Utilities.Utils.ByteArrayToHexString(CommandRequest));
					break;
				case Constants.SyncHandlerSequence.ReadCurrentHour:
					Debug.WriteLine("SyncDeviceHandler961: Read Current Hour");
					CommandRequest = await StepsDataInstance.getReadCurrentHourCommand();
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.ReadSignature:
					Debug.WriteLine("SyncDeviceHandler961: Read Signature Data");
					StepsTableParameters sigData = this.SignatureToBeUploadedTableList.ElementAt(0);
					SignatureDataInstance.SDYear = sigData.dbYear;
					SignatureDataInstance.SDMonth = sigData.dbMonth;
					SignatureDataInstance.SDDay = sigData.dbDay;
					CommandRequest = await SignatureDataInstance.GetReadSignDataCommand();
					this.Adapter.SendCommand(Ff07Char, CommandRequest);

					// insert timer here
					break;
				case Constants.SyncHandlerSequence.ReadSeizure:
					Debug.WriteLine("SyncDeviceHandler961: Read seizure Data");
					SeizureBlockInfo seizureBlock = this.SeizureToBeUploadedList.ElementAt(0);
					SeizureDataInstance.SeizureRecToRead = seizureBlock.sbseizureRecordNo;
					SeizureDataInstance.BlockNumber = seizureBlock.sbSeizureBlock;
					CommandRequest = await SeizureDataInstance.GetReadCommand();
					this.Adapter.SendCommand(Ff07Char, CommandRequest);

					// insert timer here
					break;
				case Constants.SyncHandlerSequence.WriteStepsHeader:
					Debug.WriteLine("SyncDeviceHandler961: Writing steps header");
					CommandRequest = await StepsTableDataInstance.GetWriteStepTableDataCommand(StepTableParamInstance);
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.WriteDeviceSettings:
					Debug.WriteLine("SyncDeviceHandler961: Writing device settings");
					CommandRequest = await DeviceSettingsInstance.GetWriteCommand();
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.WriteUserSettings:
					Debug.WriteLine("SyncDeviceHandler961: Writing user settings");
					CommandRequest = await UserSettingsInstance.GetWriteCommand();
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.WriteExerciseSettings:
					Debug.WriteLine("SyncDeviceHandler961: Writing exercise settings");
					CommandRequest = await ExerciseSettingsInstance.GetWriteCommand();
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.WriteCompanySettings:
					Debug.WriteLine("SyncDeviceHandler961: Writing company settings");
					CommandRequest = await CompanySettingsInstance.GetWriteCommand();
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.WriteSignatureSettings:
					Debug.WriteLine("SyncDeviceHandler961: Writing signature settings");
					CommandRequest = await SignatureSettingsInstance.GetWriteCommand();
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.WriteSeizureSettings:
					Debug.WriteLine("SyncDeviceHandler961: Writing seizure settings");
					CommandRequest = await SeizureSettingsInstance.GetWriteCommand();
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
		          	break;
				case Constants.SyncHandlerSequence.WriteScreenFlow:
					Debug.WriteLine("SyncDeviceHandler961: Writing screenflow settings");
					CommandRequest = await FirmwareDisplaySequenceInstance.GetWriteCommand(this.ScreenFlowList);
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.WriteDeviceSensitivity:
					Debug.WriteLine("SyncDeviceHandler961: Writing device sensitivity settings");
					SensitivitySettingsInstance.SensitivityOld = DeviceDataInstance.TrackerSensitivity;
					CommandRequest = await SensitivitySettingsInstance.GetWriteCommand();
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.WriteDeviceStatus:
					Debug.WriteLine("SyncDeviceHandler961: Writing device status settings");
					CommandRequest = await DeviceStatusInstance.GetWriteCommand();
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.WriteDeviceMode:
					Debug.WriteLine("SyncDeviceHandler961: Writing device mode settings");
					DeviceModeInstance.EnableBroadcastAlways = DeviceDataInstance.AdvertiseMode;
					CommandRequest = await DeviceModeInstance.GetWriteCommand();
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;	
				case Constants.SyncHandlerSequence.WriteScreenDisplay:
					Debug.WriteLine("SyncDeviceHandler961: Writing screen display");
					this.ActivationCode = Utils.GetRandomDigits(4); //4 random digits to be generated
					// For testing purposes only
					this.ActivationCode[0] = 0x31;
					this.ActivationCode[1] = 0x32;
					this.ActivationCode[2] = 0x33;
					this.ActivationCode[3] = 0x34;
					// For testing purposes only
					Debug.WriteLine("Random digits: " + Motion.Mobile.Utilities.Utils.ByteArrayToHexString(this.ActivationCode));
					CommandRequest = await DisplayOnScreenInstance.GetWriteCommand(this.ActivationCode);
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.ClearEEProm:
					Debug.WriteLine("SyncDeviceHandler961: Clear eeprom");
					ClearEEPROMInstance.ExerciseData = this.clearMessagesOnly?false:true;
					ClearEEPROMInstance.SettingsData = false;
					ClearEEPROMInstance.SurveyQuestions = true;
					ClearEEPROMInstance.Tallies = true;
					ClearEEPROMInstance.MedicineAlarm = true;
					ClearEEPROMInstance.MotivationalQuotes = true;
					CommandRequest = await ClearEEPROMInstance.GetWriteCommand();
					this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;

				case Constants.SyncHandlerSequence.WsActivateDeviceWithMember:
					Debug.WriteLine("SyncDeviceHandler961: WS Activate Device With Member");
					WSActivateDeviceWithMemberInstance.request.TrackerModel = TrioDeviceInformationInstance.ModelNumber;
					WSActivateDeviceWithMemberInstance.request.TrackerSerialNumber = TrioDeviceInformationInstance.SerialNumber;
					WSActivateDeviceWithMemberInstance.request.TrackerBtAdd = "";
					WSActivateDeviceWithMemberInstance.request.ApplicationID = UserInformationInstance.ApplicationID;
					WSActivateDeviceWithMemberInstance.request.MemberDermID = UserInformationInstance.MemberID;
					WSActivateDeviceWithMemberInstance.request.TrackerFirmwareVersion = TrioDeviceInformationInstance.FirmwareVersion;
					this.status = await WSActivateDeviceWithMemberInstance.PostRequest();

					if (this.status == WebServiceRequestStatus.SUCCESS)
					{
						Debug.WriteLine("Success");
						if (WSActivateDeviceWithMemberInstance.response != null)
						{
							this.SetSettingsFromActivateDeviceWithMemberResponseWS(WSActivateDeviceWithMemberInstance.response);
							ProcessCommands();
						}


					}
					else
					{
						Debug.WriteLine("ActivateDeviceWithMemeber Response is " + WSActivateDeviceWithMemberInstance.response.ResponseMessage);
						this.Adapter.DisconnectDevice(this.Device);
					}
					//this.Adapter.SendCommand(Ff07Char, CommandRequest);
					break;
				case Constants.SyncHandlerSequence.WsGetDeviceInfo:
					Debug.WriteLine("SyncDeviceHandler961: WS Request GetDeviceInfo");
					WSGetDeviceInformationInstance.request.TrackerModel = TrioDeviceInformationInstance.ModelNumber;
					WSGetDeviceInformationInstance.request.TrackerSerialNumber = TrioDeviceInformationInstance.SerialNumber;
					WSGetDeviceInformationInstance.request.DeviceDateTime = Motion.Mobile.Utilities.Utils.GetDeviceDateTimeWithFormat(DateTime.Now);
					WSGetDeviceInformationInstance.request.ApplicationID = UserInformationInstance.ApplicationID;
					WSGetDeviceInformationInstance.request.DevicePairingStatus = 1;
					WSGetDeviceInformationInstance.request.TrackerFirmwareVersion = TrioDeviceInformationInstance.FirmwareVersion;
					this.status = await WSGetDeviceInformationInstance.PostRequest();

					this.ServerReadTimeDuration = 0;
					if (this.status == WebServiceRequestStatus.SUCCESS)
					{
						Debug.WriteLine("Success");
						if (WSGetDeviceInformationInstance.response != null)
						{
							this.isResettingTrio = false;
							timerForServer = new Timer(timerCallBack, new object(), 0, 1000);
							timerForServer.Increment += TimerForServer_Increment;
							this.SetSettingsFromGetDeviceInfoResponseWS(WSGetDeviceInformationInstance.response);
							ProcessCommands();
						}
						else
						{
							Debug.WriteLine("WS Request GetDeviceInfo Response is " + WSGetDeviceInformationInstance.response.ResponseMessage);
							this.Adapter.DisconnectDevice(this.Device);
						}

					}
					//else if  Tobe Added?
					else if (string.Equals(WSGetDeviceInformationInstance.response.ResponseStatus, "reset"))
					{
						this.isResettingTrio = true;
						DeviceStatusInstance.PairingStatus = 1;
						this.ProcessQeueue.Enqueue(Constants.SyncHandlerSequence.WriteDeviceStatus);
						this.ProcessCommands();
						Debug.WriteLine("Device Not Paired...");
					}
					else
					{ 
						Debug.WriteLine("Get Device Info Failed :(");
					}
						


					break;

				case Constants.SyncHandlerSequence.WsUploadTallies:
					Debug.WriteLine("SyncDeviceHandler961: WS Upload Tallies");

					WSUploadTalliesDataInstance.request.DeviceModel = TrioDeviceInformationInstance.ModelNumber;
					WSUploadTalliesDataInstance.request.DeviceSerial = TrioDeviceInformationInstance.SerialNumber;
					WSUploadTalliesDataInstance.request.MemberDeviceID = UserInformationInstance.MemberDeviceId;
					WSUploadTalliesDataInstance.request.ApplicationID = UserInformationInstance.ApplicationID;
					WSUploadTalliesDataInstance.request.PlatformID = UserInformationInstance.PlatformID;
					WSUploadTalliesDataInstance.request.DeviceDateTime = Motion.Mobile.Utilities.Utils.GetServerDateTimeFromString(MemberServerProfileInstance.ServerDateTime);
					WSUploadTalliesDataInstance.request.talliesData = TalliesDataInstance;

					this.status = await WSUploadTalliesDataInstance.PostRequest();

					if (this.status == WebServiceRequestStatus.SUCCESS)
					{
						Debug.WriteLine("Success");

						if (ApplicationInfoInstance.ApplicationID > 0 && ApplicationInfoInstance.PlatformID > 0)
						{
							if ((AppUpdateSettingsInstance.UpdateFlag && AppUpdateSettingsInstance.UpdateType != 2) || !AppUpdateSettingsInstance.UpdateFlag)
							{
								if (!this.clearTracker)
								{
									this.ProcessQeueue.Enqueue(Constants.SyncHandlerSequence.ReadSeizureSettings);
									this.ProcessCommands();
								}

							}

						}

						else
						{
							this.isValidateAppInfo = true;
							this.ProcessQeueue.Enqueue(Constants.SyncHandlerSequence.WsSendAppInfo);
							this.ProcessCommands();
						}


					}
					else
					{
						Debug.WriteLine("Upload Tallies Response is " + WSUploadTalliesDataInstance.response.ResponseStatus);
						this.Adapter.DisconnectDevice(this.Device);
					}
					break;
				case Constants.SyncHandlerSequence.WsUploadSteps:
					Debug.WriteLine("SyncDeviceHandler961: WS Upload Steps");
					this.CreateUploadStepsDataRequest(WSUploadStepsDataInstance.request);
					this.status = await WSUploadStepsDataInstance.PostRequest();
					if (this.status == WebServiceRequestStatus.SUCCESS)
					{
						Debug.WriteLine("Success");
						if (this.isReadingCurrentHour)
						{
							//READ_DEVICE_SETTING
							this.checkTimeDifferenceAndUpdateDeviceTime();
						}
						else
						{
							//UpdateStepDataTable
							StepTableParamInstance = this.UpdateStepDataTable();
							this.ProcessQeueue.Enqueue(Constants.SyncHandlerSequence.WriteStepsHeader);
							this.ProcessCommands();

						}

					}
					else
					{
						Debug.WriteLine("Upload Steps Response is " + WSUploadStepsDataInstance.response.ResponseMessage);
						this.Adapter.DisconnectDevice(this.Device);
					}
					break;
				case Constants.SyncHandlerSequence.WsUploadSignature:
					Debug.WriteLine("SyncDeviceHandler961: WS Upload Signature");
					this.CreateUploadSignatureRequestData(WSUploadSignatureDataInstance.request);
					this.status = await WSUploadSignatureDataInstance.PostRequest();
					if (this.status == WebServiceRequestStatus.SUCCESS)
					{
						Debug.WriteLine("Success");
						if (this.SignatureToBeUploadedTableList.Count() > 0)
						{
							this.ProcessQeueue.Enqueue(Constants.SyncHandlerSequence.ReadSignature);
							this.ProcessCommands();
						}
						else
						{
							if (this.MemberServerProfileInstance.UpdateFlag > 0)
							{
								this.UpdateSettingsFlag(Utils.USER_SETTINGS_BIT_LOC);
							}
							else
							{
								//if(READ SURVEY)
								//else
								// update settings 
								//CLEAR_MESSAGES_SETTINGS_BIT_LOC
								this.UpdateSettingsFlag(Utils.CLEAR_MESSAGES_SETTINGS_BIT_LOC);
							}
						}
							

					}
					else
					{
						Debug.WriteLine("Upload Signature Response is " + WSUploadSignatureDataInstance.response.ResponseMessage);
						this.Adapter.DisconnectDevice(this.Device);
					}
					break;
				case Constants.SyncHandlerSequence.WsUploadProfile:
					break;
				case Constants.SyncHandlerSequence.WsUnpairDevice:
					Debug.WriteLine("SyncDeviceHandler961: WS Unpair Device");
					WSUnpairMemberDeviceInstance.request.DeviceID = WSActivateDeviceWithMemberInstance.response.DeviceID;
					WSUnpairMemberDeviceInstance.request.MemberID = UserInformationInstance.MemberID;
					WSUnpairMemberDeviceInstance.request.MemberDeviceID = UserInformationInstance.MemberDeviceId;
					this.status = await WSUploadSeiureDataInstance.PostRequest();
					if (this.status == WebServiceRequestStatus.SUCCESS)
					{
						Debug.WriteLine("Deactivating Device Successful");
					}
					break;
				case Constants.SyncHandlerSequence.WsUploadSeizure:
					Debug.WriteLine("SyncDeviceHandler961: WS Upload Seizure");
					this.CreateUploadSeizureRequestData(WSUploadSeiureDataInstance.request);
					this.status = await WSUploadSeiureDataInstance.PostRequest();
					if (this.status == WebServiceRequestStatus.SUCCESS)
					{
						Debug.WriteLine("Success");
						if (this.SeizureToBeUploadedList.Count() > 0)
						{
							this.ProcessQeueue.Enqueue(Constants.SyncHandlerSequence.ReadSeizure);
							this.ProcessCommands();
						}
						else
						{
							if (this.SignatureToBeUploadedTableList.Count() > 0)
							{
								this.ProcessQeueue.Enqueue(Constants.SyncHandlerSequence.ReadSignature);
								this.ProcessCommands();
							}
							else
							{
								if (this.MemberServerProfileInstance.UpdateFlag > 0)
								{
									this.UpdateSettingsFlag(Utils.USER_SETTINGS_BIT_LOC);
								}
								else
								{
									//if(READ SURVEY)
									//else
									// update settings 
									//CLEAR_MESSAGES_SETTINGS_BIT_LOC
									this.UpdateSettingsFlag(Utils.CLEAR_MESSAGES_SETTINGS_BIT_LOC);
								}
							}
						}


					}
					else
					{
						Debug.WriteLine("Upload Seizure Response is " + WSUploadSeiureDataInstance.response.ResponseMessage);
						this.Adapter.DisconnectDevice(this.Device);
					}
					break;
				case Constants.SyncHandlerSequence.WsSendNotifySettingsUpdate:
					Debug.WriteLine("SyncDeviceHandler961: WS Notify Settings Update");

					DateTime currentDateTime = DateTime.Now;

					long dateTimeInUnix = (long)Motion.Mobile.Utilities.Utils.DateTimeToUnixTimestamp(currentDateTime);

					DateTime dateTime = new DateTime(DeviceSettingsInstance.Year + 2000, DeviceSettingsInstance.Month, DeviceSettingsInstance.Day, DeviceSettingsInstance.Hour, DeviceSettingsInstance.Minute, DeviceSettingsInstance.Second);
					dateTime.AddSeconds(this.DeviceReadTimeDuration);

					WSNotifySettingsUpdateInstance.request.MemberID = UserInformationInstance.MemberID;
					WSNotifySettingsUpdateInstance.request.MemberDeviceID = UserInformationInstance.MemberDeviceId;
					WSNotifySettingsUpdateInstance.request.LastSyncSettingDateTime = dateTimeInUnix;
					WSNotifySettingsUpdateInstance.request.TrackerModel = TrioDeviceInformationInstance.ModelNumber;
					WSNotifySettingsUpdateInstance.request.UpdateFlag = MemberServerProfileInstance.UpdateFlag;
					WSNotifySettingsUpdateInstance.request.SettingType = MemberServerProfileInstance.UpdateFlagChanges;
					WSNotifySettingsUpdateInstance.request.DevicePairingStatus = DeviceStatusInstance.PairingStatus;
					WSNotifySettingsUpdateInstance.request.DeviceDateTime = Motion.Mobile.Utilities.Utils.GetDeviceDateTimeWithFormat(dateTime);
					WSNotifySettingsUpdateInstance.request.BatteryLevel = TrioDeviceInformationInstance.BatteryLevel;


					this.status = await WSNotifySettingsUpdateInstance.PostRequest();
					if (this.status == WebServiceRequestStatus.SUCCESS)
					{
						Debug.WriteLine("WS Notify Settings Update Successful");
					}
					else
					{
						Debug.WriteLine("WS Notify Settings Update Response is " + WSNotifySettingsUpdateInstance.response.ResponseMessage);
						this.Adapter.DisconnectDevice(this.Device);
					}
					break;
				case Constants.SyncHandlerSequence.WsUploadCommandResponse:
					Debug.WriteLine("SyncDeviceHandler961: WS Upload Command Response");
					WSUploadCommandResponseInstance.request.commandRespData.UploadCommand = 0x58;
					WSUploadCommandResponseInstance.request.DeviceModel = TrioDeviceInformationInstance.ModelNumber;
					WSUploadCommandResponseInstance.request.DeviceSerial = TrioDeviceInformationInstance.SerialNumber;
					WSUploadCommandResponseInstance.request.MemberDeviceID = UserInformationInstance.MemberDeviceId;
					WSUploadCommandResponseInstance.request.ApplicationID = UserInformationInstance.ApplicationID;
					WSUploadCommandResponseInstance.request.PlatformID = UserInformationInstance.PlatformID;
					WSUploadCommandResponseInstance.request.SynchronizationID = this.MemberServerProfileInstance.SynchronizationID;
					this.status = await WSUploadCommandResponseInstance.PostRequest();
					if (this.status == WebServiceRequestStatus.SUCCESS)
					{
						Debug.WriteLine("WS Upload Command Successful!");
					}
					else
					{
						Debug.WriteLine("WS Upload Command Response is " + WSUploadCommandResponseInstance.response.ResponseMessage);
						this.Adapter.DisconnectDevice(this.Device);
					}
					break;	
				case Constants.SyncHandlerSequence.WsSendAppInfo:
					Debug.WriteLine("SyncDeviceHandler961: WS Validate App Info");
					WSSendAppInfoInstance.request.ApplicationName = ApplicationInfoInstance.ApplicationName;
					WSSendAppInfoInstance.request.ApplicationVersion = ApplicationInfoInstance.ApplicationVersion;
					WSSendAppInfoInstance.request.OperatingSystem = ApplicationInfoInstance.OperatingSystem;
					WSSendAppInfoInstance.request.OperatingSystemVersion = ApplicationInfoInstance.OperatingSystemVersion;
					WSSendAppInfoInstance.request.PlatformType = ApplicationInfoInstance.PlatformType;
					WSSendAppInfoInstance.request.Brand = ApplicationInfoInstance.Brand;
					WSSendAppInfoInstance.request.Model = ApplicationInfoInstance.Model;
					WSSendAppInfoInstance.request.Manufacturer = ApplicationInfoInstance.Manufacturer;
					WSSendAppInfoInstance.request.CommunicationType = ApplicationInfoInstance.CommunicationType;
					this.status = await WSSendAppInfoInstance.PostRequest();
					if (this.status == WebServiceRequestStatus.SUCCESS)
					{
						Debug.WriteLine("WS Validate App Info Successful");

						this.UserInformationInstance.ApplicationID = WSSendAppInfoInstance.response.ApplicationID;
						this.UserInformationInstance.PlatformID = WSSendAppInfoInstance.response.PlatformID;
						if (this.isValidateAppInfo)
						{
							this.ApplicationInfoInstance.ApplicationID = WSSendAppInfoInstance.response.ApplicationID;
							this.ApplicationInfoInstance.PlatformID = WSSendAppInfoInstance.response.PlatformID;
							if ((AppUpdateSettingsInstance.UpdateFlag && AppUpdateSettingsInstance.UpdateType != 2) || !AppUpdateSettingsInstance.UpdateFlag)
							{
								if (!this.clearTracker)
									this.ProcessCommands();
								else
								{
									this.ProcessQeueue.Enqueue(Constants.SyncHandlerSequence.WriteDeviceSettings);
									this.ProcessCommands();
								}
							}

						}
						else
						{ 
							this.AppUpdateSettingsInstance.UpdateType = WSSendAppInfoInstance.response.appUpdateInfo.UpdateType;
						}

					}
					else
					{
						Debug.WriteLine("WS Validate App Info Response is " + WSUploadCommandResponseInstance.response.ResponseMessage);
						this.Adapter.DisconnectDevice(this.Device);
					}
					break;	
				default:
					Debug.WriteLine("SyncDeviceHandler961: Unable to identify command.");
					break;
			}

		}
		public void CleanUp()
		{
			this.ProcessQeueue.Clear();
			this.Command = Constants.SyncHandlerSequence.Default;
			this.CommandRequest = new byte[]{ };
			this.PacketsReceived.Clear();
			this.Device = null;
			this.StartIncrementProgress = false;


			if (this.timerForDevice != null)
			{
				this.timerForDevice.Cancel();
				this.timerForDevice = null;
			}

			if (this.timerForServer != null)
			{
				this.timerForServer.Cancel();
				this.timerForServer = null;
			}
		}