public IEnumerable <EngraverPosition> StartEngraving() { _serialComm.Write(NejeDk8KzConstants.StartCommand); while (true) { var response = _serialComm.ReadOne(); if (response == NejeDk8KzConstants.EngravingFinishedResponse) { //Read machine response is engravingFinished break; } if (response == NejeDk8KzConstants.PositionUpdatedResponse) { //Read machine response is position update byte[] bytes = _serialComm.ReadMany(4); var x = bytes[0] * 100 + bytes[1]; var y = bytes[2] * 100 + bytes[3]; yield return(new EngraverPosition() { X = x, Y = y }); } else { //Read machine response is unexpected response //Unexpected response, abort! break; } } }