Interface: CfgManager Arquivos: cfgmanager.h Última atualização: 01/06/2003 Autor: Luiz Henrique Shigunov |
Descrição |
Funções para o sistema | |
0x00 - CloseGroup - Fecha um grupo 0x01 - EnumGroup - Enumera os grupos 0x02 - EnumKey - Enumera as chaves 0x03 - GetValue - Obtém o valor de uma chave |
0x04 - OpenGroup - Abre um grupo 0x05 - OpenGroupIndex - Abre um grupo 0x06 - SetSystemFile - Define o arquivo que deve ser usado para o grupo /system |
Esta página descreve a interface CfgManager que trata do acesso às configurações do sistema, centralizando e padronizando esse acesso.
As configurações do sistema são armazenadas em chaves e essas chaves são organizadas em grupos. Cada chave tem um valor associado a ela que pode ser lido em vários formatos diferentes (string, número hexadecimal, etc).
Para que o valor de uma chave possa ser lido, o grupo onde a chave se encontra tem que ser aberto com a função OpenGroup, o valor lido com GetValue e depois o grupo deve ser fechado com CloseGroup.
Um grupo é localizado através de seu caminho que é formado assim: /arquivo/interface ou módulo/grupo. Por exemplo: /system/SysModManager/modules ou /system/SysModManager/modules/sysmodmanager.
Estas funções são de uso exclusivo dos módulos do sistema.
int CfgManager_CloseGroup(CfgManager_Group *group);
Esta função fecha o grupo group que deve ter sido aberto com OpenGroup ou OpenGroupIndex.
Grupos devem ficar abertos somente pelo tempo necessário.
int CfgManager_EnumGroup(CfgManager_Group *group, unsigned int index, char *name, unsigned int *nameSize);
Esta função enumera os grupos de group que deve ter sido aberto com OpenGroup ou OpenGroupIndex.
index é o índice do grupo a ser obtido e deve ser 0 para a primeira vez que a função for chamada e incrementado nas chamadas seguintes. Os grupos podem ser retornados em qualquer ordem.
name é a área de memória que vai receber o nome do grupo, incluindo o caracter de finalização 0. Somente o nome do grupo é copiado e não todo o caminho.
Ao chamar a função, nameSize deve ter o tamanho da área de memória apontada por name e no retorno terá a quantidade de caracteres escritos em name, não incluindo o caracter de finalização 0.
int CfgManager_EnumKey(CfgManager_Group *group, unsigned int index, char *name, unsigned int *nameSize);
Esta função enumera as chaves do grupo group que deve ter sido aberto com OpenGroup ou OpenGroupIndex.
index é o índice da chave a ser obtida e deve ser 0 para a primeira vez que a função for chamada e incrementado nas chamadas seguintes. As chaves podem ser retornadas em qualquer ordem.
name é a área de memória que vai receber o nome da chave, incluindo o caracter de finalização 0. Somente o nome da chave é copiado e não todo o caminho.
Ao chamar a função, nameSize deve ter o tamanho da área de memória apontada por name e no retorno terá a quantidade de caracteres escritos em name, não incluindo o caracter de finalização 0.
int CfgManager_GetValue(CfgManager_Group *group, const char *key, int type, void *buf, unsigned int *bufSize);
Esta função obtém o valor da chave key do grupo group que deve ter sido aberto com OpenGroup ou OpenGroupIndex.
type diz o tipo de dado a ser lido e pode ser:
buf é a área de memória que vai receber o valor da chave.
Ao chamar a função, bufSize deve ter o tamanho da área de memória apontada por buf e no retorno terá a quantidade de bytes escritos em buf.
CfgManager_Group *CfgManager_OpenGroup(CfgManager_Group *base, const char *path);
Esta função abre o grupo path usando base, que deve ter sido aberto com OpenGroup ou OpenGroupIndex, como base. Se base for NULL, a raiz será usada.
path é sensível à letras maiúscula e minúscula, os nomes só podem ter letras (a-z, A-Z), números (0-9) ou sublinhado (_) e é estruturado da seguinte forma: /arquivo/interface ou módulo/grupo. Por exemplo: /system/SysModManager/modules ou apenas modules se base for usado.
Todo arquivo de configuração fica no diretório /system/config/.
A idéia por trás do uso de uma base é que um módulo pode abrir por exemplo /system/SysModManager/modules e depois abrir outros grupos a partir dessa base. Isso torna o processo de abertura dos grupos mais rápido, já que menos caminho precisa ser analisado e procurado.
CfgManager_Group *CfgManager_OpenGroupIndex(CfgManager_Group *base, unsigned int index);
Esta função abre o grupo index usando base, que deve ter sido aberto com OpenGroup ou OpenGroupIndex, como base. Se base for NULL, a raiz será usada.
index é o índice do grupo a ser aberto e deve ser 0 para a primeira vez que a função for chamada e incrementado nas chamadas seguintes. Os grupos podem ser abertos em qualquer ordem.
Esta função simplifica e acelera a abertura dos grupos. Sem esta função, EnumGroup e depois OpenGroup teriam que ser usadas.
int CfgManager_SetSystemFile(void *file, unsigned int size);
Esta função define o arquivo que deve ser usado para o grupo /system que contém as configurações do sistema. Esse grupo deve estar disponível logo no início do processo de iniciação.
file é onde os dados do arquivo estão e size é a quantidade de dados do arquivo.
Os dados em file devem ser copiados para outra área de memória para poderem ser usados.