예제 #1
0
int device_db_info(FILE * f)
{
	struct db_info * inf;

	if ((inf = db_info_get()) == NULL)
		return -1;

	db_info_dump(f, inf);

	return 0;
}
예제 #2
0
uint8_t * db_js_lookup(const char * model, const char * jstag)
{
	struct db_dev_model * mdl;
	struct cmd_list * lst;
	struct db_info * inf;
	int tagid;
	int nmid;
	int idx;
	int j;

	if ((inf = db_info_get()) == NULL)
		return NULL;

	DCC_LOG(LOG_TRACE, "1. str_lookup()");

	if ((tagid = str_lookup(jstag, strlen(jstag))) < 0) {
		DCC_LOG(LOG_WARNING, "tag not found!");
		return NULL;
	}	

	DCC_LOG(LOG_TRACE, "2. str_lookup()");

	if ((nmid = str_lookup(model, strlen(model))) < 0) {
		DCC_LOG(LOG_WARNING, "model name not found!");
		return NULL;
	}	

	DCC_LOG(LOG_TRACE, "3. db_dev_model_index_by_name()");

	idx = db_dev_model_index_by_name(inf, nmid);

	if ((mdl = db_dev_model_by_index(inf, idx)) == NULL) {
		DCC_LOG(LOG_WARNING, "device not found!");
		return NULL;
	}

	if ((lst = mdl->cmd) == NULL) {
		DCC_LOG(LOG_WARNING, "command list empty!");
		return NULL;
	}

	DCC_LOG(LOG_TRACE, "4. lookup...");

	for (j = 0; j < lst->cnt; ++j) {
		struct cmd_entry * cmd = &lst->cmd[j];
		if (cmd->tag == tagid)
			return cmd->code;
	}

	DCC_LOG(LOG_WARNING, "command not found!");
	return NULL;
} 
예제 #3
0
void device_db_init(void)
{
	struct db_info * inf;

	if ((inf = db_info_get()) == NULL) {
		/* initialize an empty symbol table */
		symtab_init(slcdev_symbuf, sizeof(slcdev_symbuf));
		return;
	}

	/* initialize the sybol table from the database */
	memcpy(slcdev_symbuf, inf->symbuf, inf->symbuf_sz);
}
예제 #4
0
/* check JSON file against database */
bool device_db_need_update(struct fs_file * json)
{
	struct db_info * inf;

	if ((inf = db_info_get()) == NULL)
		return true;

	if ((inf->json.txt != (const char *)json->data) ||
		(inf->json.crc != json->crc) ||
		(inf->json.len != json->size)) {
		return true;
	}

	return false;
}
예제 #5
0
int device_db_dump(FILE * f)
{
	struct db_info * inf;
	int i;

	if ((inf = db_info_get()) == NULL)
		return -1;

	db_info_dump(f, inf);

	for (i = 0 ; i < inf->obj_cnt; ++i) {
		struct db_dev_model * obj = inf->obj[i];

		fprintf(f, "%2d - ", i);
		model_dump(f, obj); 
	}

	return 0;
} 
예제 #6
0
파일: shell.c 프로젝트: powertang/yard-ice
static int shell_pw_sel(FILE * f, int argc, char ** argv, int n)
{
	struct db_dev_model * mod;
	struct ss_device * dev;
	int addr;
	int sel;

	if (argc < 3)
		return SHELL_ERR_ARG_MISSING;

	addr = strtoul(argv[1], NULL, 0);
	if (addr > 160)
		return SHELL_ERR_ARG_INVALID;

	sel = strtoul(argv[2], NULL, 0);
	if (sel > 16)
		return SHELL_ERR_ARG_INVALID;

	dev = sensor(addr);

	if ((mod = db_dev_model_by_index(db_info_get(), dev->model)) == NULL)
		return SHELL_ERR_ARG_INVALID;

	switch (n) { 
	case 1:
		dev->pw1 = device_db_pw_lookup(mod->pw1, sel);
		break;
	case 2:
		dev->pw2 = device_db_pw_lookup(mod->pw2, sel);
		break;
	case 3:
		dev->pw3 = device_db_pw_lookup(mod->pw3, sel);
		break;
	case 4:
		dev->pw4 = device_db_pw_lookup(mod->pw4, sel);
		break;
	case 5:
		dev->pw5 = device_db_pw_lookup(mod->pw5, sel);
		break;
	}

	return 0;
}
예제 #7
0
/* check database integrity */
bool device_db_is_sane(void)
{
	return (db_info_get() == NULL) ? false : true;
}