Diretrizes do driver de localização para energia e desempenho
As seções a seguir descrevem as diretrizes para garantir que o driver de localização economize energia e forneça dados com eficiência.
Rastrear o número de clientes conectados e o estado do rádio
Os sensores de localização devem rastrear o número de aplicativos conectados e devem rastrear o valor das propriedades SENSOR_PROPERTY_LOCATION_DESIRED_ACCURACY e SENSOR_PROPERTY_CURRENT_REPORT_INTERVAL para cada aplicativo inscrito.
Quando o número de clientes conectados for zero, o sensor de localização deverá inserir o estado de energia mais baixo possível, preferencialmente D3. Quando um evento indicar que um cliente está conectado, o sensor deverá sair do estado de baixa energia e obter dados.
Além disso, se o dispositivo de localização contiver um rádio, como um sensor de localização GPS, o estado do rádio também deverá ser rastreado usando o Gerenciamento de Rádio. O gravador de driver deve criar uma implementação de Gerenciamento de Rádio que se comunique com o driver para definir o estado do rádio. Veja um exemplo da implementação do Gerenciamento de Rádio e como se comunicar com o driver no Exemplo de driver de geolocalização de sensores.
Ao rastrear clientes conectados e o estado do rádio, o sensor de localização deverá inserir o estado de energia mais baixo possível, preferencialmente D3, a qualquer momento em que não houver um cliente conectado enquanto o rádio estiver ligado. O diagrama a seguir ilustra uma máquina de estado para clientes conectados, o estado do rádio e o estado do dispositivo correspondente sugerido.
A tabela a seguir fornece outra exibição das várias combinações de entrada e as saídas resultantes (incluindo o estado de energia).
O cliente existe (entrada) | Estado do rádio (entrada) | CRI (entrada) | Posição relatada (entrada) | Estado ASIC (saída) | Estado do sensor (saída) | Estado de energia (saída) |
---|---|---|---|---|---|---|
Não | Qualquer | Qualquer | Qualquer | Desativado | N/D | D3 |
Sim | Ativado | <=120 segundos | Não | Ativado | Inicializando | D0 |
Sim | Ativado | <=120 segundos | Sim | Ativado | Preparar | D0 |
Sim | Desativado | Qualquer | Qualquer | Desativado | Não disponível | D3 |
Sim | Ativado | >120 segundos | Qualquer | Desativado | Preparar | D3 |
Sim | Ativado | >120 segundos | Qualquer | Ativado | Preparar | D0 |
O Exemplo de driver de geolocalização de sensores no WDK fornece um exemplo de um driver que rastreia o número de clientes conectados e o estado do rádio.
Intervalos de relatório de rastreamento
Os aplicativos que consomem dados de localização assinando eventos solicitam a frequência máxima para eventos atualizados por dados definindo a propriedade SENSOR_PROPERTY_CURRENT_REPORT_INTERVAL. Para economizar energia, o driver não deve enviar relatórios de dados com mais frequência do que o intervalo de relatório solicitado mais baixo.
Para obter mais informações sobre como controlar valores para cada aplicativo, consulte Filtrar dados. Você também pode encontrar um exemplo de intervalos de relatório de rastreamento no Exemplo de driver de geolocalização de sensores no WDK.
Rastrear a precisão desejada
Assim como os intervalos de relatório são rastreados por cliente, o nível de precisão solicitado por cada cliente deve ser rastreado.
O Exemplo de driver de geolocalização de sensores no WDK fornece um exemplo de um driver que rastreia a precisão desejada solicitada pelos clientes.
Os drivers do sensor de localização devem oferecer suporte ao SENSOR_PROPERTY_LOCATION_DESIRED_ACCURACY como uma propriedade configurável. O driver deve monitorar a propriedade de precisão desejada dos clientes conectados e definir SENSOR_PROPERTY_LOCATION_DESIRED_ACCURACY com base na maior precisão desejada solicitada.
Se a maior precisão solicitada por um aplicativo for DESIRED_ACCURACY_DEFAULT, o sensor de localização deverá otimizar a energia e outras considerações de custo. A API de Localização não usará sensores de GPS se os dados de localização estiverem disponíveis de outros provedores no sistema e a precisão dos dados for de 500 m ou melhor.
Se algum aplicativo solicitar DESIRED_ACCURACY_HIGH, o sensor deverá fornecer o relatório de maior precisão possível. A API de Localização sempre se conectará a todos os sensores de localização (incluindo GPS) para obter a posição mais precisa possível.
Detectar estados ociosos
O driver deve detectar um estado ocioso e entrar em um estado de baixa energia. Por exemplo, um estado ocioso poderá ocorrer quando a localização de um dispositivo GPS não estiver mudando, não houver solicitações de E/S pendentes ou os dados não estiverem disponíveis. Se o dispositivo GPS ou GNSS (Sistema Global de Navegação por Satélite) for implementado por USB, ele deverá oferecer suporte à suspensão seletiva. Consulte Oferecer suporte para desligamento por inatividade para drivers baseados em UMDF para obter mais informações.
Injeção de posição para GPS e GNSS (Sistema Global de Navegação por Satélite)
Os sensores GPS ou GNSS (Sistema Global de Navegação por Satélite) podem usar dados de sensores de triangulação no sistema para reduzir o tempo para a primeira posição. Isso é chamado de injeção de posição.
Esse uso de comunicação sensor a sensor tem suporte apenas durante a fase de obtenção. Um driver GNSS (Sistema Global de Navegação por Satélite) pode abrir uma conexão com qualquer sensor de triangulação, incluindo o Provedor de Localização do Windows, por meio da API do Sensor. Se os dados de posição estiverem disponíveis, o driver poderá obter uma posição aproximada. O driver deve encerrar a conexão imediatamente após obter a posição.
Se o driver GNSS (Sistema Global de Navegação por Satélite) não obtiver uma posição da API do Sensor em 15 segundos, ele deverá atingir o tempo limite e encerrar a conexão com a API do Sensor. Não continue assinando eventos.
Uma conexão persistente com o Provedor de Localização do Windows (ou qualquer outro sensor por meio da API do Sensor) não deve ser mantida aberta.
Não instancie ILocation para obter dados de outros sensores de localização. Em vez disso, use a API do Sensor (ISensorManager).
Os sensores não devem obter dados de sensores de localização do mesmo tipo. Por exemplo, um sensor de triangulação não deve usar dados de outros sensores de triangulação.
Para acessar sensores de triangulação, chame ISensorManager::GetSensorByType com o tipo SENSOR_TYPE_LOCATION_TRIANGULATION. Isso retornará todos os sensores de triangulação, incluindo o Localizador do Windows integrado ao Windows 8. Seu driver de GPS deve ser capaz de lidar com qualquer número, desde zero sensores retornados até vários sensores. Consulte Recuperar um objeto de sensor para obter mais informações sobre o uso de GetSensorsByType.
O Provedor de Localização do Windows não fornece garantias de precisão ou disponibilidade.
Não há suporte para o uso da API do Sensor para comunicação entre sensores para permitir a fusão de localização (por exemplo, o uso de dados do acelerômetro ou do magnetômetro giroscópio para estimar a localização física).