Referência da estrutura vehicle_hw_device
#include <
vehicle.h
>
Campos de dados |
|
struct hw_device_t | comum |
int(* | init )(struct vehicle_hw_device *device, vehicle_event_callback_fn event_fn, vehicle_error_callback_fn err_fn) |
int(* | release )(struct vehicle_hw_device *device) |
vehicle_prop_config_t const *(* | list_properties )(struct vehicle_hw_device *device, int *num_properties) |
int(* | get )(struct vehicle_hw_device *device, vehicle_prop_value_t *data) |
void(* | release_memory_from_get )(struct vehicle_hw_device *device, vehicle_prop_value_t *data) |
int(* | set )(struct vehicle_hw_device *device, const vehicle_prop_value_t *data) |
int(* | subscribe )(struct vehicle_hw_device *device, int32_t prop, float sample_rate, int32_t zones) |
int(* | unsubscribe )(struct vehicle_hw_device *device, int32_t prop) |
int(* | dump )(struct vehicle_hw_device *device, int fd) |
Descrição detalhada
Documentação do campo
struct hw_device_t common |
int(* dump)(struct vehicle_hw_device *device, int fd) |
Imprime o estado de depuração do HAL do veículo. Ele será chamado pelo serviço de rede do veículo e incluído no dump do serviço.
O descritor de arquivo transmitido pode ser usado para gravar texto de depuração usando dprintf() ou write(). O texto precisa estar apenas na codificação ASCII.
Requisitos de desempenho:
Essa precisa ser uma chamada que não bloqueia. O HAL precisa retornar desta chamada em 1ms e em 10ms. Essa chamada precisa evitar deadlocks, já que pode ser chamada em qualquer ponto da operação. Todas as primitivas de sincronização usadas (como bloqueios de mutex ou semáforos) precisam ser adquiridas com um tempo limite.
int(* get)(struct vehicle_hw_device *device, vehicle_prop_value_t *data) |
Receba um valor de propriedade do veículo imediatamente. Os dados precisam ser alocados corretamente. O autor da chamada da API É DONO do campo de dados. O autor da chamada vai definir data->prop, data->value_type e, opcionalmente, o valor da zona para a propriedade zonificada. Mas a implementação do HAL precisa preencher todas as entradas corretamente ao retornar. Para o tipo de ponteiro, a implementação da HAL precisa alocar a memória necessária, e o autor da chamada é responsável por chamar release_memory_from_get, que permite que a HAL libere a memória alocada. Para o tipo de propriedade VEHICLE_PROP_CHANGE_MODE_STATIC, o método get precisa retornar sempre o mesmo valor. Para o tipo de propriedade VEHICLE_PROP_CHANGE_MODE_ON_CHANGE, ele precisa retornar o valor mais recente. Se ainda não houver dados disponíveis, o que pode acontecer durante a fase inicial, essa chamada será retornada imediatamente com o código de erro -EAGAIN.
int(* init)(struct vehicle_hw_device *device, vehicle_event_callback_fn event_fn, vehicle_error_callback_fn err_fn) |
vehicle_prop_config_t const*(* list_properties)(struct vehicle_hw_device *device, int *num_properties) |
Enumere todas as propriedades disponíveis. A lista é retornada em "list".
- Parâmetros
-
num_properties número de propriedades contidas na matriz ajustada.
- Retorna
- matriz de configurações de propriedade aceitas por este carro. Os dados retornados são constantes, e o autor da chamada não pode modificá-los. A implementação do HAL precisa manter essa memória até que o HAL seja liberado para evitar que ela seja copiada novamente.
int(* release)(struct vehicle_hw_device *device) |
Antes de chamar close, o usuário precisa destruir as funções de callback registradas. Caso a chamada unsubscribe() não seja chamada em todas as propriedades antes de release() , então release() vai cancelar a inscrição das propriedades.
void(* release_memory_from_get)(struct vehicle_hw_device *device, vehicle_prop_value_t *data) |
Libere a memória alocada para dados na chamada de recebimento anterior. A chamada de recebimento para byte ou string envolve a alocação da memória necessária do HAL do veículo. Para garantir a segurança, a memória alocada pelo HAL do veículo precisa ser liberada pelo HAL do veículo, e o serviço de rede do veículo vai chamar isso quando os dados do HAL do veículo não forem mais necessários. A implementação do HAL do veículo só precisa liberar o membro de vehicle_prop_value_t, como data->str_value.data ou data->bytes_value.data, mas não os dados em si, já que eles são alocados pelo serviço de rede do veículo. Depois que a memória for liberada, o ponteiro correspondente precisa ser definido como NULL pelo HAL do veículo.
int(* set)(struct vehicle_hw_device *device, const vehicle_prop_value_t *data) |
Defina um valor de propriedade do veículo. Os dados precisam ser alocados corretamente e não NULL. O autor da chamada da API POSSUI o campo de dados. O carimbo de data/hora dos dados será ignorado para a operação de definição. A configuração de algumas propriedades exige que o estado inicial esteja disponível. Dependendo do HAL do veículo, esses dados iniciais podem não estar disponíveis por um curto período após a inicialização. Nesse caso, a chamada de configuração pode retornar -EAGAIN como a chamada de recebimento. Para uma propriedade com controle de energia separado, a definição pode falhar se a propriedade não estiver ativada. Nesse caso, o HAL precisa retornar o erro -ESHUTDOWN.
int(* subscribe)(struct vehicle_hw_device *device, int32_t prop, float sample_rate, int32_t zones) |
Inscreva-se em eventos. Dependendo da saída de list_properties, se a propriedade for: a) on-change: sample_rate precisa ser definida como 0. b) suporta frequência: sample_rate precisa ser definida de min_sample_rate para max_sample_rate. Para propriedades do tipo "on-change", o serviço de rede do veículo faz outra chamada de recebimento para verificar o estado inicial. Por isso, a implementação do HAL do veículo não precisa enviar o estado inicial para o tipo de propriedade de mudança.
- Parâmetros
-
dispositivo prop sample_rate zonas Todas as zonas de propriedade com assinatura podem ser ignoradas para propriedades não zoneadas. 0 significa que todas as zonas têm suporte, e não nenhuma.
int(* unsubscribe)(struct vehicle_hw_device *device, int32_t prop) |
A documentação desse struct foi gerada com base no seguinte arquivo:
- hardware/libhardware/include/hardware/ vehicle.h