Пример #1
0
float adt7310_read_float(adt7310_t *dev)
{
    int16_t raw = adt7310_read_raw(dev);
    if (raw == INT16_MIN) {
        return (0.0f / 0.0f); /* return NaN */
    }
    if (!dev->high_res) {
        /* filter out the flag bits */
        raw &= ADT7310_REG_VALUE_MASK_13BIT;
    }
    return (((float) raw) * ADT7310_TEMPERATURE_LSB_FLOAT);
}
Пример #2
0
int32_t adt7310_read(adt7310_t *dev)
{
    int16_t raw = adt7310_read_raw(dev);
    if (raw == INT16_MIN) {
        return INT32_MIN;
    }
    if (!dev->high_res) {
        /* filter out the flag bits */
        raw &= ADT7310_REG_VALUE_MASK_13BIT;
    }
    return ((((int32_t)raw) * 1000) >> ADT7310_VALUE_FRAC_BITS);
}
Пример #3
0
float adt7310_read_float(const adt7310_t *dev)
{
    int16_t raw = adt7310_read_raw(dev);
    if (raw == INT16_MIN) {
        /* cppcheck-suppress duplicateExpression
         * (reason: we want to create a NaN here) */
        return (0.0f / 0.0f); /* return NaN */
    }
    if (!dev->high_res) {
        /* filter out the flag bits */
        raw &= ADT7310_REG_VALUE_MASK_13BIT;
    }
    return (((float) raw) * ADT7310_TEMPERATURE_LSB_FLOAT);
}
Пример #4
0
int test_adt7310_sample_print(adt7310_t *dev)
{
    int16_t raw;
    float celsius_float;
    int32_t millicelsius;

    raw = adt7310_read_raw(dev);

    if (raw == INT16_MIN) {
        puts("Reading temperature data (adt7310_read_raw)... ");
        puts("[Failed]\n");
        return 1;
    }

    millicelsius = adt7310_read(dev);

    if (millicelsius == INT32_MIN) {
        puts("Reading temperature data (adt7310_read)... ");
        puts("[Failed]\n");
        return 1;
    };

    celsius_float = adt7310_read_float(dev);

    if (isnan(celsius_float)) {
        puts("Reading temperature data (adt7310_read_float)... ");
        puts("[Failed]\n");
        return 1;
    };

    /* Several platforms usually build with nano.specs, (without float printf) */
    /* Split value into two integer parts for printing. */
    float integral = 0;
    float fractional;
    fractional = modff(celsius_float, &integral);

    printf("0x%04" PRIx16 " %7" PRId32 " mC %4d.%07u C)\n", raw, millicelsius,
        (int)integral, abs(fractional * 10000000.f));
    return 0;
}