float SHT15::get (unsigned short int mode) { unsigned short int error; unsigned short int hraw, traw; float h, hq, t, d, ld; if ((error = getraw (&traw, 0)) != 0) return (float) error; if ((error = getraw (&hraw, 1)) != 0) return (float) error; h = (float) hraw; t = -40.1 + 0.01 * ((float) traw); // 14 bit, 'C if (mode == 0) return t; hq = -2.0468 + 0.0367 * h - 1.5955E-6 * h * h; h = (t - 25) * (0.01 + 0.00008 * h) + hq; h = h < 0.1 ? 0.1 : (h > 100 ? 100 : h); if (mode == 1) return h; ld = (log10(h) - 2) / 0.4343 + (17.62 * t) / (243.12 + t); d = 243.12 * ld / (17.62 - ld); return d; }
static fn_t *fn_realize(struct fnparse *fnparse, eh_t *eh) { // this is a bit tricky since fn and p->fn share memory fn_t *fn = (fn_t *)fnparse; tbl_t *vars = fnparse->vars; tbl_t *fns = fnparse->fns; fn->vcount = vars->len; fn->fcount = fns->len; fn->stack = 25; // TODO make this reasonable fn->vars = mu_alloc(fn->vcount*sizeof(var_t) + fn->fcount*sizeof(fn_t *), eh); tbl_for_begin (k, v, vars) { fn->vars[getraw(v)] = k; } tbl_for_end; int i = 0; fn->fns = (fn_t**)&fn->vars[fn->vcount]; tbl_for_begin (k, v, fns) { fn->fns[i++] = (fn_t*)getraw(v); } tbl_for_end;
bool get_temperature(const char *ds_name, double *temp) { char pathbuf[BUFSIZ]; char *eptr, *chp; snprintf(pathbuf, sizeof pathbuf, "/sys/bus/w1/devices/%s/w1_slave", ds_name); if ((chp = getraw(pathbuf)) == NULL) { MQTT_log("Failed to read %s %s\n", pathbuf, strerror(errno)); return (false); } *temp = (double) ((double)strtol(chp, &eptr, 10)/1000.00); return (true); }