Implementar retorno tátil

Os fabricantes de dispositivos geralmente são considerados os proprietários dos recursos privados criados para cada dispositivo. Por isso, os esforços de engenharia geralmente são focados em uma base por dispositivo. Pouco ou nenhum esforço é feito para a consistência de outros dispositivos no ecossistema.

Em contraste direto, os desenvolvedores se esforçam para criar apps que funcionem em todos os smartphones Android no ecossistema, independentemente das especificações técnicas de cada dispositivo. Essa diferença na abordagem pode causar um problema de fragmentação. Por exemplo, os recursos de hardware de alguns smartphones não correspondem às expectativas definidas pelos desenvolvedores do app. Portanto, se as APIs de haptics funcionarem em alguns smartphones Android, mas não em outros, o resultado será um ecossistema inconsistente. É por isso que a configuração de hardware é fundamental para garantir que os fabricantes possam implementar APIs hapticas do Android em todos os dispositivos.

Esta página oferece uma lista de verificação detalhada para configurar a conformidade de hardware para o melhor uso das APIs de háptica do Android.

A figura a seguir ilustra a criação de conhecimento comum entre fabricantes de dispositivos e desenvolvedores, que é uma etapa essencial para criar um ecossistema coerente:

Diagrama de casos de uso de háptica para desenvolvedores de apps e fabricantes
de dispositivos

Figura 1. Criar conhecimento entre fabricantes de dispositivos e desenvolvedores

Lista de verificação para implementação de haptics

  1. Implementar constantes

    • Lista de constantes para implementar a resposta tátil.
  2. Implementar primitivos

    • Diretrizes de implementação para primitivas de composição HAL.
  3. Mapear constantes entre HAL e API

  4. Avaliar o hardware

    • Instruções sobre efeitos táteis de destino. Use estas instruções para realizar verificações rápidas no hardware.

A seguir, vamos analisar cada uma dessas etapas em mais detalhes.

Etapa 1: implementar constantes

Realize estas verificações para determinar se o dispositivo atende aos requisitos mínimos para implementar a resposta tátil:

Fluxograma do processo de implementação de
haptics

Figura 2. Implementar efeitos

Fluxograma de etapas para implementar
primitivas

Figura 3. Implementação de primitivos

Verifique o status de implementação das constantes táteis a seguir.

Constantes de retorno tátil Locais e resumos
EFFECT_TICK, EFFECT_CLICK, EFFECT_HEAVY_CLICK, EFFECT_DOUBLE_CLICK A classe VibrationEffect
As constantes hápticas em VibrationEffect não incluem nenhuma noção de eventos de entrada e não têm elementos de IU. As constantes incluem a noção de níveis de energia, como EFFECT_CLICK e EFFECT_HEAVY_CLICK, que são chamados por createPredefined().

As vibrações alternativas descritas abaixo são realizadas em dispositivos que não implementam as constantes VibrationEffect. Recomendamos atualizar essas configurações para ter um melhor desempenho nesses dispositivos.

  • EFFECT_CLICK

    Vibração de forma de onda criada com VibrationEffect.createWaveform e os tempos configurados em frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern.

  • EFFECT_HEAVY_CLICK

    Vibração de forma de onda criada com VibrationEffect.createWaveform e os tempos configurados em frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern.

    • EFFECT_DOUBLE_CLICK

    Vibração de forma de onda criada com VibrationEffect.createWaveform e os tempos (0, 30, 100, 30).

  • EFFECT_TICK

    Vibração de forma de onda criada com VibrationEffect.createWaveform e os tempos configurados em frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern.

Fluxograma de etapas para testar o feedback
táctil

Figura 4. Implementar constantes de feedback

Verifique o status das seguintes constantes de feedback público.

Constantes de retorno tátil Locais e resumos
CLOCK_TICK, CONTEXT_CLICK, KEYBOARD_PRESS, KEYBOARD_RELEASE, KEYBOARD_TAP, LONG_PRESS, TEXT_HANDLE_MOVE, VIRTUAL_KEY, VIRTUAL_KEY_RELEASE, CONFIRM, REJECT, GESTURE_START, GESTURE_END Classe HapticFeedbackConstants
As constantes hápticas em HapticFeedbackConstants auxiliam os eventos de entrada com determinados elementos da IU, como KEYBOARD_PRESS e KEYBOARD_RELEASE, que são chamados por performHapticFeedback().

Etapa 2: implementar primitivas

As primitivas táteis em VibrationEffect.Composition têm intensidade escalonável que os desenvolvedores podem usar com addPrimitive(int primitiveId, float scale, int delay). As primitivas podem ser divididas em duas categorias:

  • Primitivas curtas:primitivas com duração curta, geralmente menos de 20 ms. São elas CLICK, TICK e LOW_TICK.

  • Primitivas de chiado:primitivas com amplitude e frequência variáveis, geralmente com uma duração maior do que as primitivas curtas. Eles são SLOW_RISE, QUICK_RISE, QUCK_FALL, THUD e SPIN.

Primitivos curtos

Primitivas curtas podem ser descritas pelo perfil de aceleração de saída do motor do vibrador. A frequência absoluta usada varia para cada primitivo, dependendo da frequência de ressonância do atuador. Consulte Configurar o equipamento de teste para mais informações sobre a configuração de hardware e as ferramentas para medir a saída.

Uma métrica de qualidade valiosa para vibrações curtas é a proporção de pulso para toque (PRR, na sigla em inglês), mostrada na Figura 5. A PRR é definida como a proporção entre o pulso principal, definido pelo sinal dentro da janela de duração em que a amplitude diminui para 10% da amplitude máxima, e o pulso do toque, definido pelo sinal em que a amplitude diminui de 10% para menos de 1% da amplitude máxima. Para mais informações sobre a PRR, consulte Analisar a forma de onda e, para mais informações sobre como analisar e comparar resultados, consulte Comparar resultados usando o mapa de desempenho.

Proporção de pulso para toque

Figura 5. Definição da proporção de pulso para toque

Aplique primitivas curtas como um feedback de entrada do usuário ou reproduzidas em composições mais longas para criar texturas suaves. Isso significa que eles geralmente são acionados com frequência e tocados em sucessão rápida. A intensidade percebida de uma única primitiva curta pode aumentar a intensidade do efeito maior. Por esse motivo, calibre uma única marcação ou uma marcação primitiva baixa com uma composição maior, por exemplo, 100 marcações consecutivas.

Primitiva de clique

A primitiva de clique é um efeito forte e nítido, geralmente operando perto da frequência de ressonância de um dispositivo para atingir a saída máxima em um curto período. Ele é mais forte e mais profundo do que as outras primitivas, com desempenho máximo.

Se disponível, use a aceleração do motor no início e a frenagem ativa no final para alcançar um tempo curto de subida e queda do motor. Para alguns motores, o uso de uma onda quadrada em vez de uma senoidal pode acelerar mais rápido. A Figura 6 mostra um exemplo de perfil de aceleração de saída para a primitiva de clique:

Clique no perfil de aceleração de saída do primitivo

Figura 6. Exemplo de perfil de aceleração de saída para a primitiva de clique

Parâmetro Diretriz
Duração

Meta: 12 ms

Limite: < 30 ms

Aceleração máxima de saída

Destino: 2G

Limite: > 1 GB

Frequência Aproximadamente na frequência de ressonância

Primitive de marcação (marcação leve)

A primitiva de marcação é um efeito curto e nítido, geralmente operando em um intervalo de frequência mais alto. Essa primitiva também pode ser descrita como um clique de média intensidade com uma frequência mais alta e uma cauda curta. A mesma orientação se aplica para atingir um tempo de subida curto usando o overdrive do motor ou uma onda quadrada para o início inicial e a frenagem ativa no deslocamento. A Figura 7 mostra um exemplo de perfil de aceleração de saída para a primitiva de marcação:

Marcar o perfil de aceleração de saída primitivo

Figura 7. Exemplo de perfil de aceleração de saída para a marcação primitiva

Parâmetro Diretriz
Duração

Meta: 5 ms

Limite: < 20 ms

Aceleração máxima de saída

Meta: metade de CLICK, 1 G

Limite: entre 0,5 GB e 1 GB

Frequência

Alvo: frequência de ressonância 2x

Limite: < 500 Hz

Primitiva de marcação baixa

A marcação baixa é uma versão mais suave e fraca de uma marcação leve, operando em um intervalo de frequência mais baixo para dar mais corpo ao efeito. Essa primitiva também pode ser descrita como um clique de intensidade média em uma frequência mais baixa, destinado a ser usado repetidamente para feedback dinâmico. A mesma orientação se aplica para atingir um tempo de subida curto usando a aceleração do motor ou uma onda quadrada para o início inicial. A Figura 8 mostra um exemplo de perfil de aceleração de saída para a primitiva de tic baixo:

Perfil de aceleração de saída de primitivas de marcação baixa

Figura 8. Exemplo de perfil de aceleração de saída para primitiva de tick baixo

Parâmetro Diretriz
Duração

Meta: 12 ms

Limite: < 30 ms

Aceleração máxima de saída

Meta: 1/4 de TICK, 0,25 G

Limite: entre 0,2 G e 0,5 G

Frequência

Meta: frequência de ressonância 2/3

Limite: < 100 Hz

Primitivas de chirp

As primitivas de chiado podem ser descritas pelos sinais de entrada para nível de tensão e frequência de vibração. A aceleração que o motor pode gerar em diferentes faixas de frequência varia de acordo com a curva de resposta de frequência do atuador. Os intervalos de frequência e os níveis de tensão precisam ser ajustados de acordo com o dispositivo.

Primitiva de aumento lento

O aumento lento é uma amplitude lenta e uma varredura de frequência para cima com início suave e aumento consistente da intensidade da vibração durante a varredura. Ele pode ser implementado por uma varredura consistente da amplitude e da frequência, usando um intervalo de frequência mais baixo que opera fora da ressonância. A Figura 9 mostra os parâmetros de entrada e um exemplo de perfil de aceleração de saída para essa implementação. A linha vermelha corresponde aos rótulos de amplitude à esquerda e representa como a amplitude da vibração varia com o tempo. A linha azul corresponde aos rótulos de frequência à direita e representa como a frequência da vibração varia com o tempo.

Parâmetros de entrada e perfil de aceleração de saída para a primitiva de aumento lento

Figura 9. Parâmetros de entrada e exemplo de perfil de aceleração de saída para primitiva de aumento lento

Se a resposta de frequência do motor for limitada (não forte o suficiente fora da frequência de ressonância), uma implementação alternativa será um varredura seno de 1/2x a 1x da frequência de ressonância. A ressonância do motor contribui para atingir o pico do sinal no final.

Parâmetro Diretriz
Duração

Meta: 500 ms

Tolerância: 20 ms

Aceleração máxima de saída

Meta: 0,5 GB

Limite: entre 0,5 GB e 1 GB

Frequência

Alvo: 1/2 a 2/3 da frequência de ressonância

Alternativa: 1/2 para frequência de ressonância

Primitiva de aumento rápido

O aumento rápido é uma amplitude mais rápida e uma varredura de frequência para cima com início suave e aumento constante da intensidade da vibração durante a varredura. As metas de aceleração de saída e de frequência de vibração precisam ser iguais às da primitiva de aumento lento, alcançadas em uma duração mais curta. A Figura 10 mostra os parâmetros de entrada de vibração e um exemplo de perfil de aceleração de saída para a primitiva de aumento lento. A linha vermelha corresponde aos rótulos de amplitude à esquerda e representa como a amplitude da vibração varia com o tempo. A linha azul corresponde aos rótulos de frequência à direita e representa como a frequência da vibração varia com o tempo.

Parâmetros de entrada e perfil de aceleração de saída para a primitiva de aumento rápido

Figura 10. Parâmetros de entrada e exemplo de perfil de aceleração de saída para a primitiva de aumento rápido

Parâmetro Diretriz
Duração

Meta: 150 ms

Tolerância: 20 ms

Aceleração máxima de saída

Meta: igual a SLOW_RISE

Limite: igual a SLOW_RISE

Frequência

Meta: igual a SLOW_RISE

Alternativa: igual a SLOW_RISE

Primitiva de queda rápida

A queda rápida é um movimento de amplitude e frequência rápida para baixo com um início suave. É possível usar uma frequência mais alta como ponto de partida enquanto o motor está aumentando para atingir a aceleração máxima de saída. A frequência precisa diminuir de forma consistente durante a varredura, mesmo durante o tempo de subida. A Figura 11 mostra os parâmetros de entrada e um exemplo de perfil de aceleração de saída para essa implementação. A linha vermelha corresponde aos rótulos de amplitude à esquerda e representa como a amplitude da vibração varia com o tempo. A linha azul corresponde aos rótulos de frequência à direita e representa como a frequência da vibração varia com o tempo.

Parâmetros de entrada e perfil de aceleração de saída para a primitiva de queda rápida

Figura 11. Parâmetros de entrada e exemplo de perfil de aceleração de saída para a primitiva de queda rápida

Parâmetro Diretriz
Duração

Objetivo: 100 ms

Tolerância: 20 ms

Aceleração máxima de saída

Meta: 1 GB

Limite: entre 0,5 G e 2 G

Frequência

Meta: 2x a 1x a frequência de ressonância

Primitiva Thud

O som é um efeito de percussão baixo e ressonante que simula a sensação física de bater em madeira ocas. Essa primitiva opera em um intervalo de baixa frequência, semelhante à primitiva de marcação baixa, para dar mais corpo ao efeito. É possível implementar a primitiva thud como um varredura para baixo de amplitude e frequência em um intervalo de frequência mais baixo (de preferência, menos de 100 Hz). A Figura 12 mostra os parâmetros de entrada e um exemplo de perfil de aceleração de saída para essa implementação. A linha vermelha corresponde aos rótulos de amplitude à esquerda e representa como a amplitude da vibração varia com o tempo. A linha azul corresponde aos rótulos de frequência à direita e representa como a frequência da vibração varia com o tempo.

Parâmetros de entrada e perfil de aceleração de saída para a primitiva thud

Figura 12. Parâmetros de entrada e exemplo de perfil de aceleração de saída para a primitiva thud

Se a resposta de frequência do motor for limitada, uma implementação alternativa é começar com um sinal de acionamento de intensidade total na frequência ressonante e cair para a frequência mais baixa possível que ainda possa ser percebida. Essa abordagem pode exigir um aumento da intensidade do sinal de acionamento na menor frequência para que a vibração seja sentida.

Parâmetro Diretriz
Duração

Meta: 300 ms

Tolerância: 20 ms

Aceleração máxima de saída

Meta: 0,25 g

Limite: entre 0,2 G e 0,5 G

Frequência

Alvo: 1/2 a 1/3 da frequência de ressonância

Alternativa: 1x a 1/2 da frequência de ressonância

Primitiva de giro

A rotação simula um momento de rotação rápida para cima e para baixo com um ligeiro destaque no centro. A rotação pode ser implementada varrendo a amplitude e a frequência de forma independente, em direções opostas e seguida pelo movimento inverso. É importante usar um intervalo de frequência menor (de preferência menos de 100 Hz). A Figura 13 mostra os parâmetros de entrada e um exemplo de perfil de aceleração de saída para essa implementação. A linha vermelha corresponde aos rótulos de amplitude à esquerda e representa como a amplitude da vibração varia com o tempo. A linha azul corresponde aos rótulos de frequência à direita e representa como a frequência da vibração varia com o tempo.

Recomendamos que a primitiva de giro seja chamada duas vezes em sucessão ou três vezes em composições para ter uma sensação de giro e instabilidade.

Se a resposta de frequência do motor for limitada, uma implementação alternativa é fazer uma varredura de seno rápida de 1/2x a 1x a frequência de ressonância e vice-versa. A ressonância do motor dá automaticamente ao sinal um sotaque no meio.

Parâmetros de entrada e perfil de aceleração de saída para a primitiva de giro

Figura 13. Parâmetros de entrada e exemplo de perfil de aceleração de saída para a primitiva de giro

Parâmetro Diretriz
Duração

Meta: 150 ms

Tolerância: 20 ms

Aceleração máxima de saída

Meta: 0,5 GB

Limite: entre 0,25 G e 0,75 G

Frequência

Alvo: 2/3 a 1/3, depois de volta para 1/2 da frequência de ressonância

Alternativa: 2/3 para 1x e depois de volta para 1/2 da frequência de ressonância

Etapa 3: mapear constantes entre HAL e API

A etapa 3 apresenta mapeamentos recomendados entre constantes públicas do HAL e constantes da API. Se o hardware avaliado na etapa 1 não implementar as constantes HAL, use a etapa 3 para atualizar os padrões de fallback descritos na etapa 1 para gerar saídas semelhantes. O mapeamento é auxiliado por dois modelos padrão diferentes:

  • Modelo discreto (simples)

    • A amplitude é a variável principal desse modelo. Cada entidade no HAL representa uma amplitude tátil diferente.
    • Esse modelo é um requisito mínimo necessário para implementar a UX táctil básica.
    • Uma UX háptica mais avançada requer hardware e um modelo avançados (modelo contínuo).
  • Modelo contínuo (avançado)

    • Textura e amplitude são as principais variáveis desse modelo. Cada entidade no HAL representa diferentes texturas táteis. A amplitude de cada entidade HAL é controlada pelo fator de escala (S).
    • Esse modelo requer hardware avançado. Se os OEMs quiserem usar uma UX háptica avançada com VibrationEffect.Composition (para aproveitar melhor as APIs de háptica mais recentes), é recomendável implementar o hardware usando esse modelo.

Modelo discreto

É recomendável mapear todas as constantes públicas fornecidas na API com constantes HAL adequadas. Para iniciar esse processo, descubra quantas formas de onda táteis com amplitude discreta o dispositivo pode definir no HAL. Uma pergunta específica estruturada em torno dessa noção é mais ou menos assim: Quantos efeitos hápticos de impulso único com diferenças de amplitude perceptíveis pelo ser humano podem ser definidos no meu smartphone? A resposta a essa pergunta determina o mapeamento.

A definição de constantes do HAL é um processo dependente do hardware. Por exemplo, um smartphone básico pode ter apenas os recursos de hardware para produzir uma única forma de onda háptica. Dispositivos com componentes de hardware mais avançados produzem uma gama mais ampla de níveis de amplitude discretos e podem definir várias formas de onda táteis na HAL. O mapeamento de constantes da API HAL usa a constante HAL (usando a amplitude média como referência) e organiza efeitos mais fortes ou mais fracos a partir daí.

Diagrama do intervalo constante e das amplitudes de
feedback da HAL

Figura 14. Faixa constante de HAL por amplitude

Quando o número de constantes HAL com amplitude discreta é definido, é hora de mapear as constantes HAL e API pelo número de constantes HAL. Esse processo de mapeamento pode segmentar uma única constante da API de impulso em até três grupos discretos de níveis de amplitude. A forma como as constantes da API são segmentadas é baseada em princípios de UX para acompanhar eventos de entrada. Para mais informações, consulte Design de UX de retorno tátil.

Modelo discreto para mapeamento de constante
HAL-API

Figura 15. Mapeamento de constante HAL-API: modelo discreto

Se o dispositivo oferecer suporte apenas a duas constantes HAL com amplitudes discretas, considere mesclar as constantes HAL de nível de amplitude Média e Alta. Um exemplo dessa noção na prática seria mapear EFFECT_CLICK e EFFECT_HEAVY_CLICK para a mesma constante HAL, que seria a constante HAL do nível de amplitude média. Se o dispositivo oferecer suporte apenas a uma constante HAL com amplitude discreta, considere mesclar os três níveis em um.

Modelo contínuo

O modelo contínuo com escalonamento de amplitude pode ser aplicado para definir constantes HAL. Um fator de escala (S) pode ser aplicado às constantes HAL (por exemplo, HAL_H0, HAL_H1) para produzir o HAL dimensionado (HAL_H0 x S). Nesse caso, o HAL dimensionado é mapeado para definir constantes da API (HAL_H0 x S1 = H0S1 = EFFECT_TICK), conforme mostrado na Figura 16. Ao usar a escalabilidade de amplitude do modelo contínuo, um dispositivo pode armazenar um pequeno número de constantes HAL com texturas distintas e adicionar variações de amplitude ajustando o fator de escala (S). Os fabricantes de dispositivos podem definir o número de constantes HAL com base no número de texturas hápticas diferentes que querem oferecer.

Faixa constante de HAL por textura e
amplitude

Figura 16. Faixa de constante HAL por textura (HAL_H0) e escala de amplitude (S)

Modelo contínuo para mapeamento de constantes
HAL-API

Figura 17. Mapeamento de constante de API HAL: modelo contínuo

No modelo contínuo, diferentes constantes HAL representam diferentes texturas hápticas em vez de diferentes amplitudes. O fator de escala (S) pode configurar a amplitude. No entanto, como a percepção da textura (por exemplo, nitidez) está relacionada à percepção da duração e da amplitude, é recomendável combinar a textura e o fator de escala (no processo de design do mapeamento HAL-API).

A Figura 18 ilustra o mapeamento constante aumentando a variação de um HAL para muitas constantes de API com escalonamento de amplitude.

Aumento da variação
1

Aumento da variação
2

Figura 18. Como aumentar a variação com a escalonabilidade de amplitude

Para todas as constantes de API escalonáveis, como PRIMITIVE_TICK e PRIMITIVE_CLICK em VibrationEffect.Composition, o nível de energia da constante da API depende do parâmetro float scale quando a constante da API é declarada por addPrimitive(int primitiveID, float scale, int delay). PRIMITIVE_TICK e PRIMITIVE_CLICK podem ser projetados com uma distinção clara usando diferentes constantes do HAL. Essa abordagem é recomendada se você quiser adicionar variação à textura.

Etapa 4: avaliar o hardware

A avaliação de hardware envolve a definição de três efeitos hápticos, rotulados como Efeitos 1, 2 e 3 para essa avaliação específica.

Efeito 1: constantes táteis curtas predefinidas

A constante VibrationEffect.EFFECT_CLICK é o efeito de referência ou denominador comum no mapeamento da API HAL fornecido na etapa 2. Ele é mapeado com o efeito mais usado, HapticFeedbackConstants.KEYBOARD_PRESS. Avaliar esse efeito ajuda a determinar se o dispositivo de destino está pronto para háptica clara.

Efeito 2: efeito tátil personalizado curto

A constante VibrationEffect.createOneShot(20,255) é para efeitos táteis personalizados. Para impulsos personalizados curtos e únicos, 20 ms é o limite máximo recomendado para definir a duração. Um único impulso maior que 20 ms não é recomendado porque é percebido como uma vibração barulhenta.

Forma de onda de um efeito tátil
curto personalizado

Figura 19. Efeito tátil personalizado curto

Efeito 3: efeito tátil personalizado longo com variação de amplitude

A constante VibrationEffect.createWaveform(timings[], amplitudes[], int repeat) é para efeitos personalizados longos com variação de amplitude. A capacidade de produzir amplitudes variadas para efeitos hápticos personalizados é um dos indicadores para avaliar os recursos do dispositivo para háptica avançada. O timings [] e o amplitudes [] recomendados são {500, 500} e {128, 255}, respectivamente, o que apresenta uma tendência crescente de amplitude de 50% a 100%, com uma taxa de amostragem de 500 ms.

Forma de onda do efeito tátil com variação
de amplitude

Figura 20. Efeito tátil longo personalizado com variação de amplitude

Para verificar os recursos de hardware do controle de amplitude do Efeito 3, use o método Vibrator.hasAmplitudeControl(). O resultado precisa ser true para executar VibrationEffect.createWaveform com amplitude variável, conforme o esperado.

Fluxograma de avaliação subjetiva do efeito tátil

Figura 21. Avaliação do sujeito do efeito tátil 1, 2 e 3

Fazer uma avaliação subjetiva

Para uma verificação rápida de coerência, faça primeiro uma avaliação subjetiva. O objetivo da avaliação subjetiva é observar a amplitude dos efeitos hápticos para determinar se o dispositivo pode gerar háptica com amplitudes perceptíveis pelo ser humano.

Uma pergunta específica estruturada em torno dessa noção é assim: O dispositivo pode produzir efeitos hápticos perceptíveis para os usuários conforme o esperado? Responder a essa pergunta ajuda a evitar falhas na resposta tátil, incluindo respostas tátil imperceptíveis que os usuários não conseguem sentir ou respostas tátil indesejadas em que as formas de onda não produzem padrões como pretendido.

Fazer uma avaliação avançada

É altamente recomendável fazer avaliações de qualidade avançadas. As avaliações de qualidade avançadas caracterizam atributos quantificáveis de efeitos hápticos para implementar háptica de qualidade. Ao terminar, os fabricantes de dispositivos poderão diagnosticar o status atual da resposta tátil, o que significa que eles podem definir metas para melhorar a qualidade geral. Consulte Avaliação de hardware.