public async Task<byte[]> GetWriteSeizureBlocksDataCommand(SeizureBlocksParameters seizureBlocksParamWrite) { await Task.Run(() => { this._rawData = new byte[COMMAND_SIZE_WRITE + 2]; int seizureBlockToUpdate = 1; if (!seizureBlocksParamWrite.sbIsNewest) seizureBlockToUpdate = 2; this.seizureRecordToUpdateRaw = BitConverter.GetBytes(seizureBlockToUpdate); this.seizureBlockRaw = BitConverter.GetBytes(seizureBlocksParamWrite.sbSeizureBlock); Buffer.BlockCopy(this.seizureRecordToUpdateRaw, INDEX_ZERO, this._rawData, SEIZURE_REC_TO_READ_LOC, SEIZURE_REC_TO_READ_BYTE_SIZE); Buffer.BlockCopy(this.seizureBlockRaw, INDEX_ZERO, this._rawData, SEIZURE_BLOCK_LOC, SEIZURE_BLOCK_BYTE_SIZE); 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 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] == 0x35) { 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)); } else //(rawData[1] == 0x34) { this.seizureBlocksData = new List<SeizureBlocksParameters>(); if (this.trioDevInfo.ModelNumber == 961) { int dataLen = 9; int currentIndex = 2; for (int i = 0; i < 2; i++) { SeizureBlocksParameters stepParams = new SeizureBlocksParameters(); 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.hourDataRaw = new byte[HOUR_NUM_BYTE_SIZE]; this.recordStatusDataRaw = new byte[RECORD_STATUS_BYTE_SIZE]; this.seizureBlockRaw = new byte[SEIZURE_BLOCK_BYTE_SIZE]; Array.Copy(this._rawData, currentIndex, this.yrDataRaw, INDEX_ZERO, YEAR_DATA_BYTE_SIZE); Array.Copy(this._rawData, currentIndex + YEAR_DATA_BYTE_SIZE, this.monthDataRaw, INDEX_ZERO, MONTH_DATA_BYTE_SIZE); Array.Copy(this._rawData, currentIndex + MONTH_DATA_BYTE_SIZE, this.dayDataRaw, INDEX_ZERO, DAY_DATA_BYTE_SIZE); Array.Copy(this._rawData, currentIndex + DAY_DATA_BYTE_SIZE, this.hourDataRaw, INDEX_ZERO, HOUR_NUM_BYTE_SIZE); Array.Copy(this._rawData, currentIndex + HOUR_NUM_BYTE_SIZE, this.recordStatusDataRaw, INDEX_ZERO, RECORD_STATUS_BYTE_SIZE); Array.Copy(this._rawData, currentIndex + RECORD_STATUS_BYTE_SIZE, this.seizureBlockRaw, INDEX_ZERO, SEIZURE_BLOCK_BYTE_SIZE); stepParams.sbYear = Convert.ToInt32( (Utils.getDecimalValue(this.yrDataRaw)) & 0x3F); stepParams.sbMonth = Convert.ToInt32( (Utils.getDecimalValue(this.monthDataRaw)) & 0x3F); stepParams.sbDay = Convert.ToInt32( (Utils.getDecimalValue(this.dayDataRaw)) & 0x3F); stepParams.sbHour = Convert.ToInt32( (Utils.getDecimalValue(this.hourDataRaw)) & 0x3F); stepParams.sbSeizureBlock = Convert.ToInt32(Utils.getDecimalValue(this.seizureBlockRaw)); int byteValue = Convert.ToInt32(Utils.getDecimalValue(this.recordStatusDataRaw)); stepParams.sbMinute = Convert.ToInt32(byteValue & 0x3F); stepParams.sbRecordStatus = Convert.ToInt32(byteValue >> 6); stepParams.sbRecordNo = i + 1; currentIndex = currentIndex + dataLen; if (stepParams.sbYear != 0) { stepParams.tableDate = new DateTime(stepParams.sbYear + 2000, stepParams.sbMonth, stepParams.sbDay); seizureBlocksData.Add(stepParams); } } seizureBlocksData.Sort((a, b) => a.tableDate.CompareTo(b.tableDate)); parsingStatus = BLEParsingStatus.SUCCESS; } else { if (rawData[2] > 0) { int max = rawData[2]; int dataLen = 4; int currentIndex = 3; for (int i = 0; i < max; i++) { SeizureBlocksParameters stepParams = new SeizureBlocksParameters(); this.seizureBlockRaw = new byte[SEIZURE_BLOCK_BYTE_SIZE]; Array.Copy(this._rawData, currentIndex , this.seizureBlockRaw, INDEX_ZERO, SEIZURE_BLOCK_BYTE_SIZE); stepParams.sbSeizureBlock = Convert.ToInt32(Utils.getDecimalValue(this.seizureBlockRaw)); currentIndex = currentIndex + dataLen; seizureBlocksData.Add(stepParams); } parsingStatus = BLEParsingStatus.SUCCESS; } } } }); return parsingStatus; }