- if (analog->encoding->scale.p != 1
- || analog->encoding->scale.q != 1)
- outbuf[i] = (outbuf[i] * analog->encoding->scale.p) / analog->encoding->scale.q;
- float offset = ((float)analog->encoding->offset.p / (float)analog->encoding->offset.q);
- outbuf[i] += offset;
+
+ if (analog->encoding->unitsize == sizeof(float)) {
+ if (analog->encoding->scale.p != 1
+ || analog->encoding->scale.q != 1)
+ *conv_f = (*conv_f * analog->encoding->scale.p) / analog->encoding->scale.q;
+ float offset = ((float)analog->encoding->offset.p / (float)analog->encoding->offset.q);
+ *conv_f += offset;
+
+ outbuf[i] = *conv_f;
+ }
+ else if (analog->encoding->unitsize == sizeof(double)) {
+ if (analog->encoding->scale.p != 1
+ || analog->encoding->scale.q != 1)
+ *conv_d = (*conv_d * analog->encoding->scale.p) / analog->encoding->scale.q;
+ double offset = ((double)analog->encoding->offset.p / (double)analog->encoding->offset.q);
+ *conv_d += offset;
+
+ outbuf[i] = *conv_d;
+ }
+ else {
+ sr_err("Unsupported floating-point unit size '%d' for analog-to-float"
+ " conversion.", analog->encoding->unitsize);
+ return SR_ERR;
+ }