private bool ReceiveData() { var received = false; var recv = client.GetData(); if (recv != null && recv.Length > 0) { Logger.LogInformation($"ReceiveData(): Drive: '{Config.Driver}'. Device: '{Config.Name}'. Received: '{recv}'.\tString: '{ASCIIEncoding.ASCII.GetString(recv)}'\t ByteArray: '{string.Join(", ", recv)}'"); var tempBuffer = new byte[receiveBuffer.Length + recv.Length]; receiveBuffer.CopyTo(tempBuffer, 0); recv.CopyTo(tempBuffer, receiveBuffer.Length); receiveBuffer = tempBuffer; } if (receiveBuffer.Length > 0) { //var strRcvd = Encoding.ASCII.GetString(receiveBuffer); var strRcvd = receiveBuffer; /// TODO: falta processar os bytes recebidos var stxLcPos = SearchBytes(strRcvd, STX_LC); var etxLcPos = SearchBytes(strRcvd, ETX_LC); var stxAtPos = SearchBytes(strRcvd, STX_AT); var stxAtMasterPos12 = SearchBytes(strRcvd, STX_AT_MASTER_DISP12); var stxAtMasterPos8 = SearchBytes(strRcvd, STX_AT_MASTER_DISP08); var posicoesRelevantesEncontradas = new List <int>() { stxLcPos, stxAtPos, stxAtMasterPos12, stxAtMasterPos8 } .Where(x => x >= 0) .OrderBy(x => x) .ToList(); //Se encontrou algo relevante processa, senĂ£o zera... if (posicoesRelevantesEncontradas.Count > 0) { received = true; var primeiraPosRelevante = posicoesRelevantesEncontradas.First(); //Filtra o array para remover o lixo do inicio //receiveBuffer = receiveBuffer[primeiraPosRelevante..]; //Se for uma leitura, verifica se ja tem o STX if (primeiraPosRelevante == stxLcPos) { //Aguarda encontrar o ETX if (stxLcPos < etxLcPos) { //Processa se o ReadGate estiver aberto e fecha-o em seguida if ((!hasReadGate) || (hasReadGate && readGateOpen)) { var cmdLC = Encoding.ASCII.GetString(strRcvd[(stxLcPos + STX_LC.Length)..etxLcPos]);