FRONTPANEL: Improve validation of register existence

Initialize register bit data with current registers are added with bit
summary data specified.
This commit is contained in:
Mark Pizzolato 2017-12-06 10:38:18 -08:00
parent b681f0d850
commit e2cccb78d1

View file

@ -1085,7 +1085,8 @@ _panel_add_register (PANEL *panel,
size_t bit_count) size_t bit_count)
{ {
REG *regs, *reg; REG *regs, *reg;
char *response = NULL; char *response = NULL, *c;
unsigned long long data;
size_t i; size_t i;
int cmd_stat; int cmd_stat;
@ -1172,13 +1173,14 @@ for (i=0; i<panel->reg_count; i++) {
} }
pthread_mutex_unlock (&panel->io_lock); pthread_mutex_unlock (&panel->io_lock);
/* Validate existence of requested register/array */ /* Validate existence of requested register/array */
if (_panel_sendf (panel, &cmd_stat, &response, "EXAMINE %s %s%s\r", device_name? device_name : "", name, (element_count > 0) ? "[0]" : "")) { if (_panel_sendf (panel, &cmd_stat, &response, "EXAMINE -H %s %s%s\r", device_name? device_name : "", name, (element_count > 0) ? "[0]" : "")) {
free (reg->name); free (reg->name);
free (reg->device_name); free (reg->device_name);
free (regs); free (regs);
return -1; return -1;
} }
if (!strcmp ("Invalid argument\r\n", response)) { c = strchr (response, ':');
if ((!strcmp ("Invalid argument\r\n", response)) || (!c)) {
sim_panel_set_error ("Invalid Register: %s %s", device_name? device_name : "", name); sim_panel_set_error ("Invalid Register: %s %s", device_name? device_name : "", name);
free (response); free (response);
free (reg->name); free (reg->name);
@ -1186,6 +1188,7 @@ if (!strcmp ("Invalid argument\r\n", response)) {
free (regs); free (regs);
return -1; return -1;
} }
data = strtoull (c + 1, NULL, 16);
free (response); free (response);
if (element_count > 0) { if (element_count > 0) {
if (_panel_sendf (panel, &cmd_stat, &response, "EXAMINE %s %s[%d]\r", device_name? device_name : "", name, element_count-1)) { if (_panel_sendf (panel, &cmd_stat, &response, "EXAMINE %s %s[%d]\r", device_name? device_name : "", name, element_count-1)) {
@ -1214,7 +1217,8 @@ pthread_mutex_unlock (&panel->io_lock);
if (_panel_register_query_string (panel, &panel->reg_query, &panel->reg_query_size)) if (_panel_register_query_string (panel, &panel->reg_query, &panel->reg_query_size))
return -1; return -1;
if (bits) { if (bits) {
memset (bits, 0, sizeof (*bits) * bit_count); for (i=0; i<bit_count; i++)
bits[i] = (data & (1LL<<i)) ? panel->sample_depth : 0;
if (_panel_establish_register_bits_collection (panel)) if (_panel_establish_register_bits_collection (panel))
return -1; return -1;
} }