public async Task<byte[]> GetWriteStepTableDataCommand(StepsTableParameters stepsParamWrite) { await Task.Run(() => { if (this.trioDevInfo.ModelNumber == 961 && this.trioDevInfo.FirmwareVersion >= 5.0f) this._rawData = new byte[COMMAND_SIZE_WRITE + 2]; else this._rawData = new byte[COMMAND_SIZE_WRITE_OLD + 2]; this.yrDataRaw = BitConverter.GetBytes(stepsParamWrite.dbYear); this.monthDataRaw = BitConverter.GetBytes(stepsParamWrite.dbMonth); this.dayDataRaw = BitConverter.GetBytes(stepsParamWrite.dbDay); this.sentHourFlagRaw = BitConverter.GetBytes(stepsParamWrite.sentHourFlag); Buffer.BlockCopy(this.yrDataRaw, INDEX_ZERO, this._rawData, YEAR_DATA_BYTE_WRITE_LOC, 1); Buffer.BlockCopy(this.monthDataRaw, INDEX_ZERO, this._rawData, MONTH_DATA_BYTE_WRITE_LOC, 1); Buffer.BlockCopy(this.dayDataRaw, INDEX_ZERO, this._rawData, DAY_DATA_BYTE_WRITE_LOC, 1); Buffer.BlockCopy(this.sentHourFlagRaw, INDEX_ZERO, this._rawData, SENTHOUR_BYTE_WRITE_LOC, 3); if (this.trioDevInfo.ModelNumber == 961 && this.trioDevInfo.FirmwareVersion >= 5.0f) { this.fraudTableRaw = BitConverter.GetBytes(stepsParamWrite.fraudTable); Buffer.BlockCopy(this.fraudTableRaw, INDEX_ZERO, this._rawData, FRAUD_BYTE_WRITE_LOC, 1); } byte[] commandPrefix = BitConverter.GetBytes(COMMAND_PREFIX); byte[] commandID = BitConverter.GetBytes(COMMAND_ID_WRITE); Buffer.BlockCopy(commandID, INDEX_ZERO, this._rawData, INDEX_ZERO + 1, 1); Buffer.BlockCopy(commandPrefix, INDEX_ZERO, this._rawData, INDEX_ZERO, 1); }); return this._rawData; }
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 async Task<BLEParsingStatus> ParseData(byte[] rawData) { BLEParsingStatus parsingStatus = BLEParsingStatus.ERROR; await Task.Run(() => { this._rawData = new byte[rawData.Length]; Array.Copy(rawData, this._rawData, rawData.Length); this.IsReadCommand = true; if (rawData[1] == 0x25) { this.IsReadCommand = false; this.writeCommandResponseCodeRaw = new byte[WRITE_COMMAND_RESPONSE_CODE_BYTE_SIZE]; Array.Copy(this._rawData, 2, this.writeCommandResponseCodeRaw, INDEX_ZERO, WRITE_COMMAND_RESPONSE_CODE_BYTE_SIZE); this.WriteCommandResponseCode = Convert.ToInt32(Utils.getDecimalValue(this.writeCommandResponseCodeRaw)); if ((this.trioDevInfo.ModelNumber == 961 && this.trioDevInfo.FirmwareVersion >= 5.0f)) { this.fraudTableRaw = new byte[FRAUD_TABLE_BYTE_SIZE]; Array.Copy(this._rawData, 3, this.fraudTableRaw, INDEX_ZERO, FRAUD_TABLE_BYTE_SIZE); this.FraudTableCommandValue = Convert.ToInt32(Utils.getDecimalValue(this.fraudTableRaw)); } parsingStatus = BLEParsingStatus.SUCCESS; } else //(rawData[1] == 0x22) { this.stepsDataTable = new List<StepsTableParameters>(); int byteTotalPerResponse = 19; if ((this.trioDevInfo.ModelNumber == 961 && this.trioDevInfo.FirmwareVersion >= 5.0f)) byteTotalPerResponse = 20; int len = (this._rawData.Length / byteTotalPerResponse) * 2; int currentIndex = 0; for (int i = 0; i < len; i++) { StepsTableParameters stepParams = new StepsTableParameters(); if (i % 2 == 0) { currentIndex = currentIndex + 3; } this.yrDataRaw = new byte[YEAR_DATA_BYTE_SIZE]; this.monthDataRaw = new byte[MONTH_DATA_BYTE_SIZE]; this.dayDataRaw = new byte[DAY_DATA_BYTE_SIZE]; this.hrNumberRaw = new byte[HOUR_NUM_BYTE_SIZE]; this.sentHourFlagRaw = new byte[SENT_HOUR_BYTE_SIZE]; this.profileGeneratedRaw = new byte[PROFILE_GENERATED_BYTE_SIZE]; Array.Copy(this._rawData, currentIndex, this.yrDataRaw, INDEX_ZERO, YEAR_DATA_BYTE_SIZE); currentIndex = currentIndex + YEAR_DATA_BYTE_SIZE; Array.Copy(this._rawData, currentIndex, this.monthDataRaw, INDEX_ZERO, MONTH_DATA_BYTE_SIZE); currentIndex = currentIndex + MONTH_DATA_BYTE_SIZE; Array.Copy(this._rawData, currentIndex, this.dayDataRaw, INDEX_ZERO, DAY_DATA_BYTE_SIZE); currentIndex += DAY_DATA_BYTE_SIZE; Array.Copy(this._rawData, currentIndex, this.hrNumberRaw, INDEX_ZERO, HOUR_NUM_BYTE_SIZE); currentIndex += HOUR_NUM_BYTE_SIZE; Array.Copy(this._rawData, currentIndex, this.sentHourFlagRaw, INDEX_ZERO, SENT_HOUR_BYTE_SIZE); currentIndex += SENT_HOUR_BYTE_SIZE; Array.Copy(this._rawData, currentIndex, this.profileGeneratedRaw, INDEX_ZERO, PROFILE_GENERATED_BYTE_SIZE); currentIndex += PROFILE_GENERATED_BYTE_SIZE; // use 3F since bit 6 and 7 us turned on, need to turn it back off stepParams.dbYear = Convert.ToInt32(Utils.getDecimalValue(this.yrDataRaw)) & 0x3F; stepParams.dbMonth = Convert.ToInt32(Utils.getDecimalValue(this.monthDataRaw)) & 0x3F; stepParams.dbDay = Convert.ToInt32(Utils.getDecimalValue(this.dayDataRaw)) & 0x3F; stepParams.dbHourNumber = Convert.ToInt32(Utils.getDecimalValue(this.hrNumberRaw)) & 0x3F; stepParams.sentHourFlag = Convert.ToInt32(Utils.getDecimalValue(this.sentHourFlagRaw)); int flagValue = Convert.ToInt32(Utils.getDecimalValue(this.profileGeneratedRaw)); stepParams.signatureGenerated = Convert.ToInt32(flagValue & 0xFF); stepParams.signatureSent = Convert.ToInt32(flagValue & 0xF0); if (this.trioDevInfo.ModelNumber == 961 && this.trioDevInfo.FirmwareVersion >= 5.0f) //stepsDataTable { this.fraudTableRaw = new byte[FRAUD_TABLE_BYTE_SIZE]; Array.Copy(this._rawData, currentIndex, this.fraudTableRaw, INDEX_ZERO, FRAUD_TABLE_BYTE_SIZE); currentIndex += FRAUD_TABLE_BYTE_SIZE; stepParams.fraudTable = Convert.ToInt32(Utils.getDecimalValue(this.fraudTableRaw)); } stepParams.allFlagged = false; if (stepParams.sentHourFlag == 16777215) // or 'FFFFFF' stepParams.allFlagged = true; if (stepParams.dbYear != 0) { stepParams.tableDate = new DateTime(stepParams.dbYear+ 2000, stepParams.dbMonth, stepParams.dbDay); stepsDataTable.Add(stepParams); } } stepsDataTable.Sort((a, b) => a.tableDate.CompareTo(b.tableDate)); parsingStatus = BLEParsingStatus.SUCCESS; } }); return parsingStatus; }
private void ProcessWriteTableHeaderResponse() { if (StepsDataInstance.dailyData.Count > 0) { StepsDataInstance.dailyData.RemoveAt(0); StepTableParamInstance = this.UpdateStepDataTable(); this.ProcessQeueue.Enqueue(Constants.SyncHandlerSequence.WriteStepsHeader); this.ProcessCommands(); } else { bool hasDataToSync = false; bool shouldExitLoop = false; foreach (StepsTableParameters tableData in StepsTableDataInstance.stepsDataTable) { bool willContinueOuterLoop = true; if (!tableData.allFlagged) { hasDataToSync = true; if (tableData.dbYear != 0 && tableData.dbMonth != 0 && tableData.dbDay != 0) { int flagHourCount = 0; bool shouldStopCounter = false; int currentHourValue = 0; for (int j = 0; j < tableData.dbHourNumber; j++) { currentHourValue |= (int)Math.Pow(2, j); //Debug.WriteLine("CurrentFlag Value " + currentHourValue + " sentHourFlag " + stp.sentHourFlag); if ((tableData.sentHourFlag == currentHourValue) || shouldStopCounter) { shouldStopCounter = true; } else flagHourCount++; } if (tableData.dbHourNumber == 0 && tableData.sentHourFlag == 0) { hasDataToSync = false; } else if (tableData.sentHourFlag > 0 && tableData.sentHourFlag == currentHourValue) { hasDataToSync = false; } else if (flagHourCount > 0 && tableData.dbHourNumber == 0) { hasDataToSync = false; } else if (flagHourCount > tableData.dbHourNumber) { hasDataToSync = false; } shouldExitLoop = true; } } if (shouldExitLoop) break; } if (!hasDataToSync) { this.isReadingCurrentHour = true; this.ProcessQeueue.Enqueue(Constants.SyncHandlerSequence.ReadCurrentHour); this.ProcessCommands(); //self.stepsDataReadTimer TO DO } else { this.ReadStepsData(); } } }