// *********************************************************************
// *                       E08 - TEMPERATURE                           *
// *                          TEMPERATURE                              *
// *********************************************************************
// Temperature measurement.
//
// Intended for:
//   HW: - TR-72GT + CK-USB-04x development kit
//
//   OS: - v4.06G
//
// Description:
//   Temperature is measured and sent via SPI in 5s period.
//
// ---------------------------------------------------------------------
// Online IQRF OS Reference Guide: https://doc.iqrf.org/IQRF-OS-Reference-guide
//
// Copyright (c) IQRF Tech s.r.o.
//
// File:    E08-TEMPERATURE.c
// Version: v3.00                                   Revision: 11/06/2021
//
// Revision history:
//   v3.00: 11/06/2021  First release for TR-7xG.
//
// *********************************************************************
// Default IQRF include (modify the path according to your setup)
#include "IQRF.h"

// *********************************************************************

void APPLICATION()
{
uns16 temperature, tmp;
uns8 i, tenths;

    enableSPI();
    waitMS(100);                                // Temperature sensor requires some delay after reset

    while (1)
    {
        if (getTemperature() != -128)           // -128 indicates an error in communication with temperature sensor
        {                                       // Temperature reading OK
            temperature = param3;
            
            bufferCOM[0] = 'T';                 // Prepare data for RF
            bufferCOM[1] = '=';
            bufferCOM[2] = ' ';
            bufferCOM[5] = '.';
            bufferCOM[7] = 0xB0;                // '°'
            bufferCOM[8] = 'C';

            if (temperature.high8 & 0x08)       // Is it negative?
            {                                   // Yes
                temperature  = ~temperature;
                temperature++;
                bufferCOM[2] = '-';
            }

            tenths = temperature.low8 & 0x0F;   // Save bits 0 - 3 (tenths)
            temperature >>= 4;

            i = temperature.low8 / 10;
            bufferCOM[3] = i + '0';             // Tens

            i = temperature.low8 % 10;
            bufferCOM[4] = i + '0';             // Ones

            tmp = tenths * 625;
            i = tmp / 1000;
            tmp %= 1000;

            if ((tmp >= 500) && (i < 9))        // Rounding
                i++;
            
            bufferCOM[6] = i +'0';              // Tenths
            
            startSPI(9);
        }
        else
        {                                       // Temperature reading error
            bufferCOM[0] = 'T';                 
            bufferCOM[1] = '-';
            bufferCOM[2] = 'e';
            bufferCOM[3] = 'r';
            bufferCOM[4] = 'r';
            startSPI(5);
        }
        
        waitDelay(250);
        waitDelay(250);
    }
}

// *********************************************************************
