X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Flascar-el-usb%2Fprotocol.c;h=44f4be82f350cca5d1e33b4d03c5c5fef8cb3a20;hb=3782e57129fa661a773be337c9f548708f593eb0;hp=bda67b33eacfe21a851683722ccc80693e9a8177;hpb=612336970dcf03c07a826e90cc562bb506edd029;p=libsigrok.git diff --git a/src/hardware/lascar-el-usb/protocol.c b/src/hardware/lascar-el-usb/protocol.c index bda67b33..44f4be82 100644 --- a/src/hardware/lascar-el-usb/protocol.c +++ b/src/hardware/lascar-el-usb/protocol.c @@ -298,51 +298,53 @@ static struct sr_dev_inst *lascar_identify(unsigned char *config) modelid = config[0]; sdi = NULL; - if (modelid) { - profile = NULL; - for (i = 0; profiles[i].modelid; i++) { - if (profiles[i].modelid == modelid) { - profile = &profiles[i]; - break; - } - } - if (!profile) { - sr_dbg("unknown EL-USB modelid %d", modelid); - return NULL; - } - i = config[52] | (config[53] << 8); - memcpy(firmware, config + 0x30, 4); - firmware[4] = '\0'; - sr_dbg("found %s with firmware version %s serial %d", - profile->modelname, firmware, i); + if (!modelid) + return sdi; - if (profile->logformat == LOG_UNSUPPORTED) { - sr_dbg("unsupported EL-USB logformat for %s", profile->modelname); - return NULL; + profile = NULL; + for (i = 0; profiles[i].modelid; i++) { + if (profiles[i].modelid == modelid) { + profile = &profiles[i]; + break; } + } + if (!profile) { + sr_dbg("unknown EL-USB modelid %d", modelid); + return NULL; + } - sdi = g_malloc0(sizeof(struct sr_dev_inst)); - sdi->status = SR_ST_INACTIVE; - sdi->vendor = g_strdup("Lascar"); - sdi->model = g_strdup(profile->modelname); - sdi->version = g_strdup(firmware); - - if (profile->logformat == LOG_TEMP_RH) { - /* Model this as two channels: temperature and humidity. */ - sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "Temp"); - sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "Hum"); - } else if (profile->logformat == LOG_CO) { - sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "CO"); - } else { - sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "P1"); - } + i = config[52] | (config[53] << 8); + memcpy(firmware, config + 0x30, 4); + firmware[4] = '\0'; + sr_dbg("found %s with firmware version %s serial %d", + profile->modelname, firmware, i); - devc = g_malloc0(sizeof(struct dev_context)); - sdi->priv = devc; - devc->profile = profile; + if (profile->logformat == LOG_UNSUPPORTED) { + sr_dbg("unsupported EL-USB logformat for %s", profile->modelname); + return NULL; } + sdi = g_malloc0(sizeof(struct sr_dev_inst)); + sdi->status = SR_ST_INACTIVE; + sdi->vendor = g_strdup("Lascar"); + sdi->model = g_strdup(profile->modelname); + sdi->version = g_strdup(firmware); + + if (profile->logformat == LOG_TEMP_RH) { + /* Model this as two channels: temperature and humidity. */ + sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "Temp"); + sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "Hum"); + } else if (profile->logformat == LOG_CO) { + sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "CO"); + } else { + sr_channel_new(sdi, 0, SR_CHANNEL_ANALOG, TRUE, "P1"); + } + + devc = g_malloc0(sizeof(struct dev_context)); + sdi->priv = devc; + devc->profile = profile; + return sdi; }