Exemplo n.º 1
0
		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;
		}
Exemplo n.º 2
0
		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;
		}