Forked repository for Analog Devices EVAL-TempSense-ARDZ

Dependencies:   platform_drivers

Committer:
Janani Sunil
Date:
Thu Sep 23 12:40:39 2021 +0530
Revision:
7:a3472d023b12
1.) Updated the project repository structure
2.) Made modifications in the code to align with the latest no-OS drivers and the platform drivers

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Janani Sunil 7:a3472d023b12 1 /*****************************************************************************
Janani Sunil 7:a3472d023b12 2 * @file main.cpp
Janani Sunil 7:a3472d023b12 3 * @brief EVAL-TempSense-ARDZ example program
Janani Sunil 7:a3472d023b12 4 * @author ssmith (sean.smith@analog.com)
Janani Sunil 7:a3472d023b12 5 ******************************************************************************
Janani Sunil 7:a3472d023b12 6 * Copyright (c) 2019, 2021 Analog Devices, Inc.
Janani Sunil 7:a3472d023b12 7 *
Janani Sunil 7:a3472d023b12 8 * All rights reserved.
Janani Sunil 7:a3472d023b12 9 *
Janani Sunil 7:a3472d023b12 10 * Redistribution and use in source and binary forms, with or without
Janani Sunil 7:a3472d023b12 11 * modification, are permitted provided that the following conditions are met:
Janani Sunil 7:a3472d023b12 12 * - Redistributions of source code must retain the above copyright notice,
Janani Sunil 7:a3472d023b12 13 * this list of conditions and the following disclaimer.
Janani Sunil 7:a3472d023b12 14 * - Redistributions in binary form must reproduce the above copyright notice,
Janani Sunil 7:a3472d023b12 15 * this list of conditions and the following disclaimer in the documentation
Janani Sunil 7:a3472d023b12 16 * and/or other materials provided with the distribution.
Janani Sunil 7:a3472d023b12 17 * - Modified versions of the software must be conspicuously marked as such.
Janani Sunil 7:a3472d023b12 18 * - This software is licensed solely and exclusively for use with
Janani Sunil 7:a3472d023b12 19 * processors/products manufactured by or for Analog Devices, Inc.
Janani Sunil 7:a3472d023b12 20 * - This software may not be combined or merged with other code in any manner
Janani Sunil 7:a3472d023b12 21 * that would cause the software to become subject to terms and
Janani Sunil 7:a3472d023b12 22 * conditions which differ from those listed here.
Janani Sunil 7:a3472d023b12 23 * - Neither the name of Analog Devices, Inc. nor the names of its
Janani Sunil 7:a3472d023b12 24 * contributors may be used to endorse or promote products derived
Janani Sunil 7:a3472d023b12 25 * from this software without specific prior written permission.
Janani Sunil 7:a3472d023b12 26 * - The use of this software may or may not infringe the patent rights
Janani Sunil 7:a3472d023b12 27 * of one or more patent holders. This license does not release you from
Janani Sunil 7:a3472d023b12 28 * the requirement that you obtain separate licenses from these patent
Janani Sunil 7:a3472d023b12 29 * holders to use this software.
Janani Sunil 7:a3472d023b12 30 *
Janani Sunil 7:a3472d023b12 31 * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES, INC. AND CONTRIBUTORS "AS IS"
Janani Sunil 7:a3472d023b12 32 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
Janani Sunil 7:a3472d023b12 33 * NON-INFRINGEMENT, TITLE, MERCHANTABILITY AND FITNESS FOR A
Janani Sunil 7:a3472d023b12 34 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANALOG DEVICES,
Janani Sunil 7:a3472d023b12 35 * INC. OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
Janani Sunil 7:a3472d023b12 36 * SPECIAL, EXEMPLARY, PUNITIVE OR CONSEQUENTIAL DAMAGES
Janani Sunil 7:a3472d023b12 37 * (INCLUDING, BUT NOT LIMITED TO, DAMAGES ARISING OUT OF CLAIMS OF
Janani Sunil 7:a3472d023b12 38 * INTELLECTUAL PROPERTY RIGHTS INFRINGEMENT; PROCUREMENT OF SUBSTITUTE
Janani Sunil 7:a3472d023b12 39 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
Janani Sunil 7:a3472d023b12 40 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
Janani Sunil 7:a3472d023b12 41 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
Janani Sunil 7:a3472d023b12 42 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
Janani Sunil 7:a3472d023b12 43 * POSSIBILITY OF SUCH DAMAGE.
Janani Sunil 7:a3472d023b12 44 *
Janani Sunil 7:a3472d023b12 45 * 20180927-7CBSD SLA
Janani Sunil 7:a3472d023b12 46 *****************************************************************************/
Janani Sunil 7:a3472d023b12 47 #include <cstdio>
Janani Sunil 7:a3472d023b12 48 #include <mbed.h>
Janani Sunil 7:a3472d023b12 49 #include <cmath>
Janani Sunil 7:a3472d023b12 50
Janani Sunil 7:a3472d023b12 51 #include "app_config.h"
Janani Sunil 7:a3472d023b12 52 #include "spi.h"
Janani Sunil 7:a3472d023b12 53 #include "i2c.h"
Janani Sunil 7:a3472d023b12 54 #include "error.h"
Janani Sunil 7:a3472d023b12 55 #include "i2c_extra.h"
Janani Sunil 7:a3472d023b12 56 #include "spi_extra.h"
Janani Sunil 7:a3472d023b12 57
Janani Sunil 7:a3472d023b12 58 #ifdef __cplusplus
Janani Sunil 7:a3472d023b12 59 extern "C"
Janani Sunil 7:a3472d023b12 60 {
Janani Sunil 7:a3472d023b12 61 #endif
Janani Sunil 7:a3472d023b12 62 #include "delay.h"
Janani Sunil 7:a3472d023b12 63 #include "platform_support.h"
Janani Sunil 7:a3472d023b12 64 #include "adt7420.h"
Janani Sunil 7:a3472d023b12 65 #include "adt7xxx_support.h"
Janani Sunil 7:a3472d023b12 66 #ifdef __cplusplus
Janani Sunil 7:a3472d023b12 67 }
Janani Sunil 7:a3472d023b12 68 #endif // __cplusplus
Janani Sunil 7:a3472d023b12 69
Janani Sunil 7:a3472d023b12 70 #define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt)))
Janani Sunil 7:a3472d023b12 71
Janani Sunil 7:a3472d023b12 72 #define TEMP_MIN -40
Janani Sunil 7:a3472d023b12 73 #define TEMP_MAX 150
Janani Sunil 7:a3472d023b12 74 #define MAX_HYST_TEMP 15
Janani Sunil 7:a3472d023b12 75 #define MIN_HYST_TEMP 0
Janani Sunil 7:a3472d023b12 76
Janani Sunil 7:a3472d023b12 77 #define RESET_DELAY 500
Janani Sunil 7:a3472d023b12 78 #define WAIT_MENU_TIME 1000
Janani Sunil 7:a3472d023b12 79 #define NOT_USED 0
Janani Sunil 7:a3472d023b12 80
Janani Sunil 7:a3472d023b12 81 static void print_title(void);
Janani Sunil 7:a3472d023b12 82 static void print_prompt(void);
Janani Sunil 7:a3472d023b12 83 static uint8_t select_device();
Janani Sunil 7:a3472d023b12 84 static void print_active_device(int ext_int_value);
Janani Sunil 7:a3472d023b12 85 static int get_menu_select(uint8_t *menu_select);
Janani Sunil 7:a3472d023b12 86 static uint8_t read_temperature();
Janani Sunil 7:a3472d023b12 87 static uint8_t set_resolution();
Janani Sunil 7:a3472d023b12 88 static uint8_t set_op_mode();
Janani Sunil 7:a3472d023b12 89 static uint8_t bunch_of_temps();
Janani Sunil 7:a3472d023b12 90 static uint8_t readback_reg();
Janani Sunil 7:a3472d023b12 91 static uint8_t reset_interface();
Janani Sunil 7:a3472d023b12 92 static uint8_t write_to_setpoint_reg();
Janani Sunil 7:a3472d023b12 93 static uint8_t set_fault_queue();
Janani Sunil 7:a3472d023b12 94 static uint8_t set_ct_int_config();
Janani Sunil 7:a3472d023b12 95 static void microcontroller_reset();
Janani Sunil 7:a3472d023b12 96 static int input_check(int input_val,
Janani Sunil 7:a3472d023b12 97 int lowest_accepted_val,
Janani Sunil 7:a3472d023b12 98 int highest_accepted_val,
Janani Sunil 7:a3472d023b12 99 int invalid_check);
Janani Sunil 7:a3472d023b12 100
Janani Sunil 7:a3472d023b12 101
Janani Sunil 7:a3472d023b12 102 /******************************************************************************/
Janani Sunil 7:a3472d023b12 103 /************************** Variables Declarations ****************************/
Janani Sunil 7:a3472d023b12 104 /******************************************************************************/
Janani Sunil 7:a3472d023b12 105
Janani Sunil 7:a3472d023b12 106 // Initialize the extra parameters for I2C initialization
Janani Sunil 7:a3472d023b12 107 mbed_i2c_init_param i2c_init_extra_params = {
Janani Sunil 7:a3472d023b12 108 .i2c_sda_pin = I2C_SDA,
Janani Sunil 7:a3472d023b12 109 .i2c_scl_pin = I2C_SCL
Janani Sunil 7:a3472d023b12 110 };
Janani Sunil 7:a3472d023b12 111
Janani Sunil 7:a3472d023b12 112 i2c_init_param i2c_params = {
Janani Sunil 7:a3472d023b12 113 .max_speed_hz = 100000, // i2c max speed (hz)
Janani Sunil 7:a3472d023b12 114 .slave_address = INT_I2C_ADDRESS, // i2c slave address
Janani Sunil 7:a3472d023b12 115 .extra = &i2c_init_extra_params // I2C extra init parameters
Janani Sunil 7:a3472d023b12 116 };
Janani Sunil 7:a3472d023b12 117
Janani Sunil 7:a3472d023b12 118 // Initialize the extra parameters for SPI initialization
Janani Sunil 7:a3472d023b12 119 mbed_spi_init_param spi_init_extra_params = {
Janani Sunil 7:a3472d023b12 120 .spi_miso_pin = SPI_MISO,
Janani Sunil 7:a3472d023b12 121 .spi_mosi_pin = SPI_MOSI,
Janani Sunil 7:a3472d023b12 122 .spi_clk_pin = SPI_SCK
Janani Sunil 7:a3472d023b12 123 };
Janani Sunil 7:a3472d023b12 124
Janani Sunil 7:a3472d023b12 125 spi_init_param spi_params = {
Janani Sunil 7:a3472d023b12 126 .max_speed_hz = 1000000, //SPI frequency (Hz)
Janani Sunil 7:a3472d023b12 127 .chip_select = SPI_CS, //Chip Select
Janani Sunil 7:a3472d023b12 128 .mode = SPI_MODE_3, //CPOL/CPHA settings for your device
Janani Sunil 7:a3472d023b12 129 .extra = &spi_init_extra_params // SPI extra init parameters
Janani Sunil 7:a3472d023b12 130 };
Janani Sunil 7:a3472d023b12 131
Janani Sunil 7:a3472d023b12 132 adt7420_init_param init_params = {
Janani Sunil 7:a3472d023b12 133 .resolution_setting = NOT_USED, //Resolution setting
Janani Sunil 7:a3472d023b12 134 .active_device = ACTIVE_DEVICE //Set this in app_config.h
Janani Sunil 7:a3472d023b12 135 };
Janani Sunil 7:a3472d023b12 136
Janani Sunil 7:a3472d023b12 137 adt7420_dev *device;
Janani Sunil 7:a3472d023b12 138
Janani Sunil 7:a3472d023b12 139 registers_e registers;
Janani Sunil 7:a3472d023b12 140
Janani Sunil 7:a3472d023b12 141 int32_t connected = -1;
Janani Sunil 7:a3472d023b12 142 uint8_t device_id = 0;
Janani Sunil 7:a3472d023b12 143
Janani Sunil 7:a3472d023b12 144
Janani Sunil 7:a3472d023b12 145 int main()
Janani Sunil 7:a3472d023b12 146 {
Janani Sunil 7:a3472d023b12 147 uint8_t menu_select = 0;
Janani Sunil 7:a3472d023b12 148
Janani Sunil 7:a3472d023b12 149 print_title();
Janani Sunil 7:a3472d023b12 150
Janani Sunil 7:a3472d023b12 151 device_id = select_device();
Janani Sunil 7:a3472d023b12 152
Janani Sunil 7:a3472d023b12 153 connected = adt7420_init(&device, init_params);
Janani Sunil 7:a3472d023b12 154
Janani Sunil 7:a3472d023b12 155 if (connected != SUCCESS) {
Janani Sunil 7:a3472d023b12 156 printf(EOL EOL " Connection to device failed :(" EOL);
Janani Sunil 7:a3472d023b12 157 printf(" ...Restarting application... " EOL);
Janani Sunil 7:a3472d023b12 158 mdelay(WAIT_MENU_TIME);
Janani Sunil 7:a3472d023b12 159 microcontroller_reset();
Janani Sunil 7:a3472d023b12 160 } else {
Janani Sunil 7:a3472d023b12 161 printf(EOL EOL " Connection to device succeeded!" EOL);
Janani Sunil 7:a3472d023b12 162 }
Janani Sunil 7:a3472d023b12 163
Janani Sunil 7:a3472d023b12 164 while (connected == SUCCESS) {
Janani Sunil 7:a3472d023b12 165 menu_select = 0;
Janani Sunil 7:a3472d023b12 166 print_active_device(device_id);
Janani Sunil 7:a3472d023b12 167 print_prompt();
Janani Sunil 7:a3472d023b12 168
Janani Sunil 7:a3472d023b12 169 if (get_menu_select(&menu_select) == FAILURE)
Janani Sunil 7:a3472d023b12 170 printf(EOL "***** Returning to main menu *****" EOL);
Janani Sunil 7:a3472d023b12 171 else {
Janani Sunil 7:a3472d023b12 172 switch (menu_select) {
Janani Sunil 7:a3472d023b12 173 case 1:
Janani Sunil 7:a3472d023b12 174 read_temperature();
Janani Sunil 7:a3472d023b12 175 break;
Janani Sunil 7:a3472d023b12 176 case 2:
Janani Sunil 7:a3472d023b12 177 set_resolution();
Janani Sunil 7:a3472d023b12 178 break;
Janani Sunil 7:a3472d023b12 179 case 3:
Janani Sunil 7:a3472d023b12 180 set_op_mode();
Janani Sunil 7:a3472d023b12 181 break;
Janani Sunil 7:a3472d023b12 182 case 4:
Janani Sunil 7:a3472d023b12 183 bunch_of_temps();
Janani Sunil 7:a3472d023b12 184 break;
Janani Sunil 7:a3472d023b12 185 case 5:
Janani Sunil 7:a3472d023b12 186 readback_reg();
Janani Sunil 7:a3472d023b12 187 break;
Janani Sunil 7:a3472d023b12 188 case 6:
Janani Sunil 7:a3472d023b12 189 reset_interface();
Janani Sunil 7:a3472d023b12 190 break;
Janani Sunil 7:a3472d023b12 191 case 7:
Janani Sunil 7:a3472d023b12 192 write_to_setpoint_reg();
Janani Sunil 7:a3472d023b12 193 break;
Janani Sunil 7:a3472d023b12 194 case 8:
Janani Sunil 7:a3472d023b12 195 set_fault_queue();
Janani Sunil 7:a3472d023b12 196 break;
Janani Sunil 7:a3472d023b12 197 case 9:
Janani Sunil 7:a3472d023b12 198 set_ct_int_config();
Janani Sunil 7:a3472d023b12 199 break;
Janani Sunil 7:a3472d023b12 200 case 10:
Janani Sunil 7:a3472d023b12 201 /*Restore device registers to default values before restarting microcontroller*/
Janani Sunil 7:a3472d023b12 202 reset_interface();
Janani Sunil 7:a3472d023b12 203 microcontroller_reset();
Janani Sunil 7:a3472d023b12 204 break;
Janani Sunil 7:a3472d023b12 205 default:
Janani Sunil 7:a3472d023b12 206 printf("Invalid option" EOL);
Janani Sunil 7:a3472d023b12 207 break;
Janani Sunil 7:a3472d023b12 208 }
Janani Sunil 7:a3472d023b12 209 }
Janani Sunil 7:a3472d023b12 210 mdelay(WAIT_MENU_TIME); //wait 1 second
Janani Sunil 7:a3472d023b12 211 }
Janani Sunil 7:a3472d023b12 212 }
Janani Sunil 7:a3472d023b12 213
Janani Sunil 7:a3472d023b12 214
Janani Sunil 7:a3472d023b12 215 /*******************************************************************************
Janani Sunil 7:a3472d023b12 216 * @brief Prints the title block.
Janani Sunil 7:a3472d023b12 217 *******************************************************************************/
Janani Sunil 7:a3472d023b12 218 void print_title()
Janani Sunil 7:a3472d023b12 219 {
Janani Sunil 7:a3472d023b12 220 printf("*****************************************************************" EOL);
Janani Sunil 7:a3472d023b12 221 printf("* EVAL-TempeSense-ARDZ Demonstration Program *" EOL);
Janani Sunil 7:a3472d023b12 222 printf("* *" EOL);
Janani Sunil 7:a3472d023b12 223 printf("* This program demonstrates communication with the ADT7xx *" EOL);
Janani Sunil 7:a3472d023b12 224 printf("* High-Accuracy digital temperature sensor family *" EOL);
Janani Sunil 7:a3472d023b12 225 printf("* It works with both SPI & I2C versions *" EOL);
Janani Sunil 7:a3472d023b12 226 printf("* *" EOL);
Janani Sunil 7:a3472d023b12 227 printf("*****************************************************************" EOL);
Janani Sunil 7:a3472d023b12 228 }
Janani Sunil 7:a3472d023b12 229
Janani Sunil 7:a3472d023b12 230 /*******************************************************************************
Janani Sunil 7:a3472d023b12 231 * @brief Prints the "main menu" prompt to the console.
Janani Sunil 7:a3472d023b12 232 *******************************************************************************/
Janani Sunil 7:a3472d023b12 233 void print_prompt()
Janani Sunil 7:a3472d023b12 234 {
Janani Sunil 7:a3472d023b12 235 printf(EOL EOL "Command Summary:" EOL);
Janani Sunil 7:a3472d023b12 236 printf(" 1 -Read temperature" EOL);
Janani Sunil 7:a3472d023b12 237 printf(" 2 -Set resolution" EOL);
Janani Sunil 7:a3472d023b12 238 printf(" 3 -Set operation mode" EOL);
Janani Sunil 7:a3472d023b12 239 printf(" 4 -Poll temperature" EOL);
Janani Sunil 7:a3472d023b12 240 printf(" 5 -Read a register" EOL);
Janani Sunil 7:a3472d023b12 241 printf(" 6 -Reset the interface" EOL);
Janani Sunil 7:a3472d023b12 242 printf(" 7 -Write to a setpoint register" EOL);
Janani Sunil 7:a3472d023b12 243 printf(" 8 -Set Fault Queue configuration" EOL);
Janani Sunil 7:a3472d023b12 244 printf(" 9 -Set CT/INT polarity and mode" EOL);
Janani Sunil 7:a3472d023b12 245 printf(" 10 -Full System Reset" EOL);
Janani Sunil 7:a3472d023b12 246 printf(EOL);
Janani Sunil 7:a3472d023b12 247 }
Janani Sunil 7:a3472d023b12 248
Janani Sunil 7:a3472d023b12 249 static int get_menu_select(uint8_t *menu_select)
Janani Sunil 7:a3472d023b12 250 {
Janani Sunil 7:a3472d023b12 251 int invalid_check = scanf("%d",(int *) menu_select);
Janani Sunil 7:a3472d023b12 252 return input_check(*menu_select, 1, 10, invalid_check);
Janani Sunil 7:a3472d023b12 253 }
Janani Sunil 7:a3472d023b12 254
Janani Sunil 7:a3472d023b12 255 /*******************************************************************************
Janani Sunil 7:a3472d023b12 256 * @brief - Select the serial interface (SPI/I2C) and device
Janani Sunil 7:a3472d023b12 257 * based on the part family.
Janani Sunil 7:a3472d023b12 258 * - Only one device and interface can be active.
Janani Sunil 7:a3472d023b12 259 * Example: ADT7320 - SPI (Internal or Remote device)
Janani Sunil 7:a3472d023b12 260 * ADT7420 - I2C (Internal or Remote device)
Janani Sunil 7:a3472d023b12 261 *
Janani Sunil 7:a3472d023b12 262 * @param None
Janani Sunil 7:a3472d023b12 263 *
Janani Sunil 7:a3472d023b12 264 * @return new_dev - Return device selected
Janani Sunil 7:a3472d023b12 265 * Example: 1 - Internal(Main PCB)
Janani Sunil 7:a3472d023b12 266 * 2 - Remote (External PCB)
Janani Sunil 7:a3472d023b12 267 *******************************************************************************/
Janani Sunil 7:a3472d023b12 268 uint8_t select_device()
Janani Sunil 7:a3472d023b12 269 {
Janani Sunil 7:a3472d023b12 270 printf("Please select interface by choosing a device:" EOL);
Janani Sunil 7:a3472d023b12 271 printf(" 1- ADT7320 (SPI)" EOL);
Janani Sunil 7:a3472d023b12 272 printf(" 2- ADT7420 (I2C)" EOL);
Janani Sunil 7:a3472d023b12 273 printf(" Select an option: ");
Janani Sunil 7:a3472d023b12 274
Janani Sunil 7:a3472d023b12 275 int invalid_check, new_interface = 0;
Janani Sunil 7:a3472d023b12 276 invalid_check = scanf("%d", &new_interface);
Janani Sunil 7:a3472d023b12 277
Janani Sunil 7:a3472d023b12 278 //Prompts for user input while correct interface is not selected
Janani Sunil 7:a3472d023b12 279 while (input_check(new_interface, 1, 2, invalid_check) == FAILURE) {
Janani Sunil 7:a3472d023b12 280 printf("Please select interface by choosing a device:" EOL);
Janani Sunil 7:a3472d023b12 281 printf(" 1- ADT7320 (SPI)" EOL);
Janani Sunil 7:a3472d023b12 282 printf(" 2- ADT7420 (I2C)" EOL);
Janani Sunil 7:a3472d023b12 283 printf(" Select an option: ");
Janani Sunil 7:a3472d023b12 284 invalid_check = scanf("%d", &new_interface);
Janani Sunil 7:a3472d023b12 285 }
Janani Sunil 7:a3472d023b12 286 printf("%d", new_interface);
Janani Sunil 7:a3472d023b12 287
Janani Sunil 7:a3472d023b12 288 switch (new_interface) {
Janani Sunil 7:a3472d023b12 289 case 1:
Janani Sunil 7:a3472d023b12 290 printf(" ADT7320 sensor selected!" EOL EOL);
Janani Sunil 7:a3472d023b12 291 init_params.active_device = ID_ADT7320;
Janani Sunil 7:a3472d023b12 292 init_params.interface_init.spi_init = spi_params;
Janani Sunil 7:a3472d023b12 293 break;
Janani Sunil 7:a3472d023b12 294 case 2:
Janani Sunil 7:a3472d023b12 295 printf(" ADT7420 sensor selected!" EOL EOL);
Janani Sunil 7:a3472d023b12 296 init_params.active_device = ID_ADT7420;
Janani Sunil 7:a3472d023b12 297 init_params.interface_init.i2c_init = i2c_params;
Janani Sunil 7:a3472d023b12 298 break;
Janani Sunil 7:a3472d023b12 299 }
Janani Sunil 7:a3472d023b12 300
Janani Sunil 7:a3472d023b12 301 printf("Available devices:" EOL);
Janani Sunil 7:a3472d023b12 302 printf(" 1- Internal (Main PCB)" EOL);
Janani Sunil 7:a3472d023b12 303 printf(" 2- Remote (External PCB)" EOL);
Janani Sunil 7:a3472d023b12 304 printf(" Select an option: ");
Janani Sunil 7:a3472d023b12 305
Janani Sunil 7:a3472d023b12 306 int new_dev = 0;
Janani Sunil 7:a3472d023b12 307 invalid_check = scanf("%d", &new_dev);
Janani Sunil 7:a3472d023b12 308
Janani Sunil 7:a3472d023b12 309 //Prompts for user input while correct device is not selected
Janani Sunil 7:a3472d023b12 310 while (input_check(new_dev, 1, 2, invalid_check) == FAILURE) {
Janani Sunil 7:a3472d023b12 311 printf("Device select:" EOL);
Janani Sunil 7:a3472d023b12 312 printf(" 1- Internal (Main PCB)" EOL);
Janani Sunil 7:a3472d023b12 313 printf(" 2- Remote (External PCB)" EOL);
Janani Sunil 7:a3472d023b12 314 printf(" Select an option: ");
Janani Sunil 7:a3472d023b12 315 invalid_check = scanf("%d", &new_dev);
Janani Sunil 7:a3472d023b12 316 }
Janani Sunil 7:a3472d023b12 317
Janani Sunil 7:a3472d023b12 318 printf("%d", new_dev);
Janani Sunil 7:a3472d023b12 319
Janani Sunil 7:a3472d023b12 320 switch (new_dev) {
Janani Sunil 7:a3472d023b12 321 case 1:
Janani Sunil 7:a3472d023b12 322 printf(" Internal sensor selected!");
Janani Sunil 7:a3472d023b12 323 init_params.interface_init.i2c_init.slave_address = INT_I2C_ADDRESS;
Janani Sunil 7:a3472d023b12 324 init_params.interface_init.spi_init.chip_select = SPI_CS;
Janani Sunil 7:a3472d023b12 325 break;
Janani Sunil 7:a3472d023b12 326 case 2:
Janani Sunil 7:a3472d023b12 327 printf(" External sensor selected!");
Janani Sunil 7:a3472d023b12 328 init_params.interface_init.i2c_init.slave_address = EXT_I2C_ADDRESS;
Janani Sunil 7:a3472d023b12 329 init_params.interface_init.spi_init.chip_select = SPI_CSE;
Janani Sunil 7:a3472d023b12 330 break;
Janani Sunil 7:a3472d023b12 331 }
Janani Sunil 7:a3472d023b12 332
Janani Sunil 7:a3472d023b12 333 return new_dev;
Janani Sunil 7:a3472d023b12 334 }
Janani Sunil 7:a3472d023b12 335
Janani Sunil 7:a3472d023b12 336 /*******************************************************************************
Janani Sunil 7:a3472d023b12 337 * @brief - Reads and prints the temperature in Celsius Degree
Janani Sunil 7:a3472d023b12 338 *
Janani Sunil 7:a3472d023b12 339 * @param None
Janani Sunil 7:a3472d023b12 340 *
Janani Sunil 7:a3472d023b12 341 * @return - Return SUCCESS flag - currently unused.
Janani Sunil 7:a3472d023b12 342 *******************************************************************************/
Janani Sunil 7:a3472d023b12 343 static uint8_t read_temperature()
Janani Sunil 7:a3472d023b12 344 {
Janani Sunil 7:a3472d023b12 345 float temp = adt7420_get_temperature(device);
Janani Sunil 7:a3472d023b12 346
Janani Sunil 7:a3472d023b12 347 printf("Current temperature:%.3f C", temp);
Janani Sunil 7:a3472d023b12 348 return SUCCESS;
Janani Sunil 7:a3472d023b12 349 }
Janani Sunil 7:a3472d023b12 350
Janani Sunil 7:a3472d023b12 351 /*******************************************************************************
Janani Sunil 7:a3472d023b12 352 * @brief -Set the device resolution for 13 or 16 bits
Janani Sunil 7:a3472d023b12 353 *
Janani Sunil 7:a3472d023b12 354 * @param None
Janani Sunil 7:a3472d023b12 355 *
Janani Sunil 7:a3472d023b12 356 * @return - Return SUCCESS/FAILURE flags
Janani Sunil 7:a3472d023b12 357 *******************************************************************************/
Janani Sunil 7:a3472d023b12 358 static uint8_t set_resolution()
Janani Sunil 7:a3472d023b12 359 {
Janani Sunil 7:a3472d023b12 360 printf(" Available resolutions:" EOL);
Janani Sunil 7:a3472d023b12 361 printf(" 1- 13-bit" EOL);
Janani Sunil 7:a3472d023b12 362 printf(" 2- 16-bit" EOL);
Janani Sunil 7:a3472d023b12 363 printf(" Select an option: ");
Janani Sunil 7:a3472d023b12 364
Janani Sunil 7:a3472d023b12 365 int new_res, invalid_check = 0;
Janani Sunil 7:a3472d023b12 366 invalid_check = scanf("%d", &new_res);
Janani Sunil 7:a3472d023b12 367
Janani Sunil 7:a3472d023b12 368 if (input_check(new_res, 1, 2, invalid_check) == FAILURE) {
Janani Sunil 7:a3472d023b12 369 return FAILURE;
Janani Sunil 7:a3472d023b12 370 } else {
Janani Sunil 7:a3472d023b12 371 printf("%d" EOL, new_res);
Janani Sunil 7:a3472d023b12 372 new_res = (new_res == 1) ? 0 : 1;
Janani Sunil 7:a3472d023b12 373 adt7420_set_resolution(device, new_res);
Janani Sunil 7:a3472d023b12 374 printf("Set resolution to %d-bit", (13 + 3 * new_res));
Janani Sunil 7:a3472d023b12 375 return SUCCESS;
Janani Sunil 7:a3472d023b12 376 }
Janani Sunil 7:a3472d023b12 377 }
Janani Sunil 7:a3472d023b12 378
Janani Sunil 7:a3472d023b12 379 /*******************************************************************************
Janani Sunil 7:a3472d023b12 380 * @brief - Set the device operation mode
Janani Sunil 7:a3472d023b12 381 * (Continuous conversion, One-shot, SPS, Shutdown).
Janani Sunil 7:a3472d023b12 382 * - Consult datasheet for more information.
Janani Sunil 7:a3472d023b12 383 *
Janani Sunil 7:a3472d023b12 384 * @param None
Janani Sunil 7:a3472d023b12 385 *
Janani Sunil 7:a3472d023b12 386 * @return - Return SUCCESS/FAILURE flags
Janani Sunil 7:a3472d023b12 387 *******************************************************************************/
Janani Sunil 7:a3472d023b12 388 static uint8_t set_op_mode()
Janani Sunil 7:a3472d023b12 389 {
Janani Sunil 7:a3472d023b12 390 printf(" Available operation modes:" EOL);
Janani Sunil 7:a3472d023b12 391 printf(" 1- Continuous conversion mode (default)" EOL);
Janani Sunil 7:a3472d023b12 392 printf(" 2- One-shot mode" EOL);
Janani Sunil 7:a3472d023b12 393 printf(" 3- 1 SPS mode" EOL);
Janani Sunil 7:a3472d023b12 394 printf(" 4- Shutdown" EOL);
Janani Sunil 7:a3472d023b12 395 printf(" Select a mode: ");
Janani Sunil 7:a3472d023b12 396
Janani Sunil 7:a3472d023b12 397 int new_mode, invalid_check = 0;
Janani Sunil 7:a3472d023b12 398 invalid_check = scanf("%d", &new_mode);
Janani Sunil 7:a3472d023b12 399 if (input_check(new_mode, 1, 4, invalid_check) == FAILURE) {
Janani Sunil 7:a3472d023b12 400 return FAILURE;
Janani Sunil 7:a3472d023b12 401 } else {
Janani Sunil 7:a3472d023b12 402 printf("%d" EOL, new_mode);
Janani Sunil 7:a3472d023b12 403 switch (new_mode) {
Janani Sunil 7:a3472d023b12 404 case 1:
Janani Sunil 7:a3472d023b12 405 adt7420_set_operation_mode(device, ADT7420_OP_MODE_CONT_CONV);
Janani Sunil 7:a3472d023b12 406 break;
Janani Sunil 7:a3472d023b12 407 case 2:
Janani Sunil 7:a3472d023b12 408 /*When One shot mode is set completes one conversion and immediately goes to shutdown mode*/
Janani Sunil 7:a3472d023b12 409 adt7420_set_operation_mode(device, ADT7420_OP_MODE_ONE_SHOT);
Janani Sunil 7:a3472d023b12 410 printf( EOL" One Shot mode enabled, device will enter shutdown mode once a conversion is complete."
Janani Sunil 7:a3472d023b12 411 EOL);
Janani Sunil 7:a3472d023b12 412 printf(" See page 10 in datasheet for details." EOL);
Janani Sunil 7:a3472d023b12 413 break;
Janani Sunil 7:a3472d023b12 414 case 3:
Janani Sunil 7:a3472d023b12 415 adt7420_set_operation_mode(device, ADT7420_OP_MODE_1_SPS);
Janani Sunil 7:a3472d023b12 416 break;
Janani Sunil 7:a3472d023b12 417 case 4:
Janani Sunil 7:a3472d023b12 418 adt7420_set_operation_mode(device, ADT7420_OP_MODE_SHUTDOWN);
Janani Sunil 7:a3472d023b12 419 break;
Janani Sunil 7:a3472d023b12 420 default:
Janani Sunil 7:a3472d023b12 421 printf("Invalid option" EOL);
Janani Sunil 7:a3472d023b12 422 break;
Janani Sunil 7:a3472d023b12 423 }
Janani Sunil 7:a3472d023b12 424 return SUCCESS;
Janani Sunil 7:a3472d023b12 425 }
Janani Sunil 7:a3472d023b12 426 }
Janani Sunil 7:a3472d023b12 427
Janani Sunil 7:a3472d023b12 428 /*******************************************************************************
Janani Sunil 7:a3472d023b12 429 * @brief - Prints poll of temperature based on the frequency of readings and
Janani Sunil 7:a3472d023b12 430 * number of samples.
Janani Sunil 7:a3472d023b12 431 *
Janani Sunil 7:a3472d023b12 432 *
Janani Sunil 7:a3472d023b12 433 * @param None
Janani Sunil 7:a3472d023b12 434 *
Janani Sunil 7:a3472d023b12 435 * @return - Return SUCCESS/FAILURE flags
Janani Sunil 7:a3472d023b12 436 *******************************************************************************/
Janani Sunil 7:a3472d023b12 437 static uint8_t bunch_of_temps()
Janani Sunil 7:a3472d023b12 438 {
Janani Sunil 7:a3472d023b12 439 printf(" Enter number of desired samples: ");
Janani Sunil 7:a3472d023b12 440 int num_samples, invalid_check = 1;
Janani Sunil 7:a3472d023b12 441
Janani Sunil 7:a3472d023b12 442 invalid_check = scanf("%d", &num_samples);
Janani Sunil 7:a3472d023b12 443 if (input_check(num_samples, 1, 2000000, invalid_check) == FAILURE) {
Janani Sunil 7:a3472d023b12 444 return FAILURE;
Janani Sunil 7:a3472d023b12 445 }
Janani Sunil 7:a3472d023b12 446 printf("%d" EOL, num_samples);
Janani Sunil 7:a3472d023b12 447
Janani Sunil 7:a3472d023b12 448 printf(" Enter a desired frequency in samples/sec (max 10): ");
Janani Sunil 7:a3472d023b12 449 int sample_freq = 1;
Janani Sunil 7:a3472d023b12 450 invalid_check = scanf("%d", &sample_freq);
Janani Sunil 7:a3472d023b12 451 if (input_check(sample_freq, 1, 10, invalid_check) == FAILURE) {
Janani Sunil 7:a3472d023b12 452 return FAILURE;
Janani Sunil 7:a3472d023b12 453 }
Janani Sunil 7:a3472d023b12 454 sample_freq = constrain(sample_freq, 1, 10);
Janani Sunil 7:a3472d023b12 455 printf("%d", sample_freq);
Janani Sunil 7:a3472d023b12 456
Janani Sunil 7:a3472d023b12 457 uint32_t delay_sec = 1000000 / sample_freq;
Janani Sunil 7:a3472d023b12 458
Janani Sunil 7:a3472d023b12 459 printf(" Gathering %d seconds of samples" EOL, num_samples/sample_freq);
Janani Sunil 7:a3472d023b12 460 printf("Press enter to continue and then press again to quit" EOL);
Janani Sunil 7:a3472d023b12 461 getchar();
Janani Sunil 7:a3472d023b12 462
Janani Sunil 7:a3472d023b12 463 for (int i = 0; i < num_samples; i++) {
Janani Sunil 7:a3472d023b12 464 if(getchar_noblock()) {
Janani Sunil 7:a3472d023b12 465 return SUCCESS;
Janani Sunil 7:a3472d023b12 466 } else {
Janani Sunil 7:a3472d023b12 467 printf(" Sample:%d: Temperature:", i + 1);
Janani Sunil 7:a3472d023b12 468 float temp = adt7420_get_temperature(device);
Janani Sunil 7:a3472d023b12 469 printf("%.4f" EOL, temp);
Janani Sunil 7:a3472d023b12 470 udelay(delay_sec);
Janani Sunil 7:a3472d023b12 471 }
Janani Sunil 7:a3472d023b12 472 }
Janani Sunil 7:a3472d023b12 473 return SUCCESS;
Janani Sunil 7:a3472d023b12 474 }
Janani Sunil 7:a3472d023b12 475
Janani Sunil 7:a3472d023b12 476 /*******************************************************************************
Janani Sunil 7:a3472d023b12 477 * @brief - Reads back data store in device registers
Janani Sunil 7:a3472d023b12 478 *
Janani Sunil 7:a3472d023b12 479 * @param None
Janani Sunil 7:a3472d023b12 480 *
Janani Sunil 7:a3472d023b12 481 * @return - Return SUCCESS/FAILURE flags
Janani Sunil 7:a3472d023b12 482 *******************************************************************************/
Janani Sunil 7:a3472d023b12 483
Janani Sunil 7:a3472d023b12 484 static uint8_t readback_reg()
Janani Sunil 7:a3472d023b12 485 {
Janani Sunil 7:a3472d023b12 486 printf(" Available registers:" EOL);
Janani Sunil 7:a3472d023b12 487 printf(" 1- Status" EOL);
Janani Sunil 7:a3472d023b12 488 printf(" 2- Configuration" EOL);
Janani Sunil 7:a3472d023b12 489 printf(" 3- Temperature" EOL);
Janani Sunil 7:a3472d023b12 490 printf(" 4- ID" EOL);
Janani Sunil 7:a3472d023b12 491 printf(" 5- Critical Temperature setpoint" EOL);
Janani Sunil 7:a3472d023b12 492 printf(" 6- Hysteresis Temperature setpoint" EOL);
Janani Sunil 7:a3472d023b12 493 printf(" 7- Temperature high setpoint" EOL);
Janani Sunil 7:a3472d023b12 494 printf(" 8- Temperature low setpoint" EOL);
Janani Sunil 7:a3472d023b12 495 printf(" Select a mode: ");
Janani Sunil 7:a3472d023b12 496
Janani Sunil 7:a3472d023b12 497 uint16_t read_value = 0;
Janani Sunil 7:a3472d023b12 498 int new_mode, invalid_check = 0;
Janani Sunil 7:a3472d023b12 499 invalid_check = scanf("%d", &new_mode);
Janani Sunil 7:a3472d023b12 500 if (input_check(new_mode, 1, 8, invalid_check) == FAILURE) {
Janani Sunil 7:a3472d023b12 501 return FAILURE;
Janani Sunil 7:a3472d023b12 502 }
Janani Sunil 7:a3472d023b12 503 printf("%d" EOL, new_mode);
Janani Sunil 7:a3472d023b12 504
Janani Sunil 7:a3472d023b12 505 switch (new_mode) {
Janani Sunil 7:a3472d023b12 506 case 1:
Janani Sunil 7:a3472d023b12 507 read_value = adt7420_get_register_address_and_value(device, REG_STATUS);
Janani Sunil 7:a3472d023b12 508 break;
Janani Sunil 7:a3472d023b12 509 case 2:
Janani Sunil 7:a3472d023b12 510 read_value = adt7420_get_register_address_and_value(device, REG_CONFIG);
Janani Sunil 7:a3472d023b12 511 break;
Janani Sunil 7:a3472d023b12 512 case 3:
Janani Sunil 7:a3472d023b12 513 read_value = adt7420_get_register_address_and_value(device, REG_TEMP);
Janani Sunil 7:a3472d023b12 514 break;
Janani Sunil 7:a3472d023b12 515 case 4:
Janani Sunil 7:a3472d023b12 516 read_value = adt7420_get_register_address_and_value(device, REG_ID);
Janani Sunil 7:a3472d023b12 517 break;
Janani Sunil 7:a3472d023b12 518 case 5:
Janani Sunil 7:a3472d023b12 519 read_value = adt7420_get_register_address_and_value(device, REG_T_CRIT);
Janani Sunil 7:a3472d023b12 520 break;
Janani Sunil 7:a3472d023b12 521 case 6:
Janani Sunil 7:a3472d023b12 522 read_value = adt7420_get_register_address_and_value(device, REG_HIST);
Janani Sunil 7:a3472d023b12 523 break;
Janani Sunil 7:a3472d023b12 524 case 7:
Janani Sunil 7:a3472d023b12 525 read_value = adt7420_get_register_address_and_value(device, REG_T_HIGH);
Janani Sunil 7:a3472d023b12 526 break;
Janani Sunil 7:a3472d023b12 527 case 8:
Janani Sunil 7:a3472d023b12 528 read_value = adt7420_get_register_address_and_value(device, REG_T_LOW);
Janani Sunil 7:a3472d023b12 529 break;
Janani Sunil 7:a3472d023b12 530 default:
Janani Sunil 7:a3472d023b12 531 break;
Janani Sunil 7:a3472d023b12 532 }
Janani Sunil 7:a3472d023b12 533 printf("Read value: 0x%x" EOL, read_value);
Janani Sunil 7:a3472d023b12 534
Janani Sunil 7:a3472d023b12 535 return SUCCESS;
Janani Sunil 7:a3472d023b12 536 }
Janani Sunil 7:a3472d023b12 537
Janani Sunil 7:a3472d023b12 538 /*******************************************************************************
Janani Sunil 7:a3472d023b12 539 * @brief - Resets device interface (SPI/I2C) (power-on reset)
Janani Sunil 7:a3472d023b12 540 *
Janani Sunil 7:a3472d023b12 541 * @param None
Janani Sunil 7:a3472d023b12 542 *
Janani Sunil 7:a3472d023b12 543 * @return - Return SUCCESS flag - currently unused.
Janani Sunil 7:a3472d023b12 544 *******************************************************************************/
Janani Sunil 7:a3472d023b12 545 static uint8_t reset_interface()
Janani Sunil 7:a3472d023b12 546 {
Janani Sunil 7:a3472d023b12 547 printf(" Resetting interface..." EOL);
Janani Sunil 7:a3472d023b12 548 adt7420_reset(device);
Janani Sunil 7:a3472d023b12 549 udelay(RESET_DELAY);
Janani Sunil 7:a3472d023b12 550 return SUCCESS;
Janani Sunil 7:a3472d023b12 551 }
Janani Sunil 7:a3472d023b12 552
Janani Sunil 7:a3472d023b12 553 /*******************************************************************************
Janani Sunil 7:a3472d023b12 554 * @brief - Write to setpoint registers THIGH, TLOW, TCRIT and THYST.
Janani Sunil 7:a3472d023b12 555 - Values entered in Celsius and rounded to a near integer value.
Janani Sunil 7:a3472d023b12 556 *
Janani Sunil 7:a3472d023b12 557 * @param None
Janani Sunil 7:a3472d023b12 558 *
Janani Sunil 7:a3472d023b12 559 * @return - Return SUCCESS/FAILURE flags
Janani Sunil 7:a3472d023b12 560 *******************************************************************************/
Janani Sunil 7:a3472d023b12 561 static uint8_t write_to_setpoint_reg()
Janani Sunil 7:a3472d023b12 562 {
Janani Sunil 7:a3472d023b12 563 printf(" Available registers:" EOL);
Janani Sunil 7:a3472d023b12 564 printf(" 1- Critical setpoint" EOL);
Janani Sunil 7:a3472d023b12 565 printf(" 2- Hystersis setpoint" EOL);
Janani Sunil 7:a3472d023b12 566 printf(" 3- Temperature high setpoint" EOL);
Janani Sunil 7:a3472d023b12 567 printf(" 4- Temperature low setpoint" EOL);
Janani Sunil 7:a3472d023b12 568 printf(" Select a mode: ");
Janani Sunil 7:a3472d023b12 569
Janani Sunil 7:a3472d023b12 570 int new_mode, invalid_check = 0;
Janani Sunil 7:a3472d023b12 571 invalid_check = scanf("%d", &new_mode);
Janani Sunil 7:a3472d023b12 572 if (input_check(new_mode, 1, 4, invalid_check) == FAILURE) {
Janani Sunil 7:a3472d023b12 573 return FAILURE;
Janani Sunil 7:a3472d023b12 574 }
Janani Sunil 7:a3472d023b12 575 printf("%d" EOL, new_mode);
Janani Sunil 7:a3472d023b12 576
Janani Sunil 7:a3472d023b12 577 float temp_c;
Janani Sunil 7:a3472d023b12 578
Janani Sunil 7:a3472d023b12 579 if(new_mode == 2) {
Janani Sunil 7:a3472d023b12 580 printf("Enter value to write (0 to 15) Celsius:");
Janani Sunil 7:a3472d023b12 581 invalid_check = scanf("%f", &temp_c);
Janani Sunil 7:a3472d023b12 582 if(input_check(temp_c, MIN_HYST_TEMP, MAX_HYST_TEMP,
Janani Sunil 7:a3472d023b12 583 invalid_check) == FAILURE) {
Janani Sunil 7:a3472d023b12 584 return FAILURE;
Janani Sunil 7:a3472d023b12 585 }
Janani Sunil 7:a3472d023b12 586 } else {
Janani Sunil 7:a3472d023b12 587 printf("Enter value to write (in Celsius):");
Janani Sunil 7:a3472d023b12 588 invalid_check = scanf("%f", &temp_c);
Janani Sunil 7:a3472d023b12 589 if(input_check(temp_c, TEMP_MIN, TEMP_MAX, invalid_check) == FAILURE) {
Janani Sunil 7:a3472d023b12 590 return FAILURE;
Janani Sunil 7:a3472d023b12 591 }
Janani Sunil 7:a3472d023b12 592 }
Janani Sunil 7:a3472d023b12 593
Janani Sunil 7:a3472d023b12 594 printf(" %.2f", temp_c);
Janani Sunil 7:a3472d023b12 595
Janani Sunil 7:a3472d023b12 596 int16_t write_value;
Janani Sunil 7:a3472d023b12 597
Janani Sunil 7:a3472d023b12 598 if(new_mode == 2)
Janani Sunil 7:a3472d023b12 599 write_value = round(temp_c);
Janani Sunil 7:a3472d023b12 600 else
Janani Sunil 7:a3472d023b12 601 write_value = round(128 * temp_c);
Janani Sunil 7:a3472d023b12 602
Janani Sunil 7:a3472d023b12 603 switch (new_mode) {
Janani Sunil 7:a3472d023b12 604 case 1:
Janani Sunil 7:a3472d023b12 605 if (adt7420_wr_setpoint_reg(device, REG_T_CRIT, write_value) == SUCCESS)
Janani Sunil 7:a3472d023b12 606 printf(EOL "0x%x successfuly written" EOL, write_value);
Janani Sunil 7:a3472d023b12 607 else
Janani Sunil 7:a3472d023b12 608 printf(EOL "0x%x NOT successfuly written" EOL, write_value);
Janani Sunil 7:a3472d023b12 609 break;
Janani Sunil 7:a3472d023b12 610 case 2:
Janani Sunil 7:a3472d023b12 611 if (adt7420_wr_setpoint_reg(device, REG_HIST, write_value) == SUCCESS)
Janani Sunil 7:a3472d023b12 612 printf(EOL "0x%x successfuly written (bits 7:4 are fixed at 0)" EOL,
Janani Sunil 7:a3472d023b12 613 write_value);
Janani Sunil 7:a3472d023b12 614 else
Janani Sunil 7:a3472d023b12 615 printf(EOL "0x%x NOT successfuly written" EOL, write_value);
Janani Sunil 7:a3472d023b12 616 break;
Janani Sunil 7:a3472d023b12 617 case 3:
Janani Sunil 7:a3472d023b12 618 if (adt7420_wr_setpoint_reg(device, REG_T_HIGH, write_value) == SUCCESS)
Janani Sunil 7:a3472d023b12 619 printf(EOL "0x%x successfuly written" EOL, write_value);
Janani Sunil 7:a3472d023b12 620 else
Janani Sunil 7:a3472d023b12 621 printf(EOL "0x%x NOT successfuly written" EOL, write_value);
Janani Sunil 7:a3472d023b12 622 break;
Janani Sunil 7:a3472d023b12 623 case 4:
Janani Sunil 7:a3472d023b12 624 if (adt7420_wr_setpoint_reg(device, REG_T_LOW, write_value) == SUCCESS)
Janani Sunil 7:a3472d023b12 625 printf(EOL "0x%x successfuly written" EOL, write_value);
Janani Sunil 7:a3472d023b12 626 else
Janani Sunil 7:a3472d023b12 627 printf(EOL "0x%x NOT successfuly written" EOL, write_value);
Janani Sunil 7:a3472d023b12 628 break;
Janani Sunil 7:a3472d023b12 629 default:
Janani Sunil 7:a3472d023b12 630 printf("Invalid selection - try again." EOL);
Janani Sunil 7:a3472d023b12 631 mdelay(2000);
Janani Sunil 7:a3472d023b12 632 break;
Janani Sunil 7:a3472d023b12 633 }
Janani Sunil 7:a3472d023b12 634 return SUCCESS;
Janani Sunil 7:a3472d023b12 635 }
Janani Sunil 7:a3472d023b12 636
Janani Sunil 7:a3472d023b12 637 /*******************************************************************************
Janani Sunil 7:a3472d023b12 638 * @brief - Set the number of undertemperature/overtemperature faults
Janani Sunil 7:a3472d023b12 639 * that can occur before setting the INT and CT output pins
Janani Sunil 7:a3472d023b12 640 *
Janani Sunil 7:a3472d023b12 641 * @param None
Janani Sunil 7:a3472d023b12 642 *
Janani Sunil 7:a3472d023b12 643 * @return - Return SUCCESS/FAILURE flags
Janani Sunil 7:a3472d023b12 644 *******************************************************************************/
Janani Sunil 7:a3472d023b12 645 static uint8_t set_fault_queue()
Janani Sunil 7:a3472d023b12 646 {
Janani Sunil 7:a3472d023b12 647 printf(" Available fault queue options:" EOL);
Janani Sunil 7:a3472d023b12 648 printf(" 1- 1 fault (default) " EOL);
Janani Sunil 7:a3472d023b12 649 printf(" 2- 2 faults" EOL);
Janani Sunil 7:a3472d023b12 650 printf(" 3- 3 faults" EOL);
Janani Sunil 7:a3472d023b12 651 printf(" 4- 4 faults" EOL);
Janani Sunil 7:a3472d023b12 652 printf(" Select a mode: ");
Janani Sunil 7:a3472d023b12 653
Janani Sunil 7:a3472d023b12 654 int new_fault, invalid_check = 0;
Janani Sunil 7:a3472d023b12 655 invalid_check = scanf("%d", &new_fault);
Janani Sunil 7:a3472d023b12 656 if (input_check(new_fault, 1, 4, invalid_check) == FAILURE) {
Janani Sunil 7:a3472d023b12 657 return FAILURE;
Janani Sunil 7:a3472d023b12 658 } else {
Janani Sunil 7:a3472d023b12 659 printf("%d" EOL, new_fault);
Janani Sunil 7:a3472d023b12 660
Janani Sunil 7:a3472d023b12 661 switch (new_fault) {
Janani Sunil 7:a3472d023b12 662 case 1:
Janani Sunil 7:a3472d023b12 663 adt7420_set_fault_queue(device, ADT7420_FAULT_QUEUE_1_FAULT);
Janani Sunil 7:a3472d023b12 664 break;
Janani Sunil 7:a3472d023b12 665 case 2:
Janani Sunil 7:a3472d023b12 666 adt7420_set_fault_queue(device, ADT7420_FAULT_QUEUE_2_FAULTS);
Janani Sunil 7:a3472d023b12 667 break;
Janani Sunil 7:a3472d023b12 668 case 3:
Janani Sunil 7:a3472d023b12 669 adt7420_set_fault_queue(device, ADT7420_FAULT_QUEUE_3_FAULTS);
Janani Sunil 7:a3472d023b12 670 break;
Janani Sunil 7:a3472d023b12 671 case 4:
Janani Sunil 7:a3472d023b12 672 adt7420_set_fault_queue(device, ADT7420_FAULT_QUEUE_4_FAULTS);
Janani Sunil 7:a3472d023b12 673 break;
Janani Sunil 7:a3472d023b12 674 default:
Janani Sunil 7:a3472d023b12 675 printf("Invalid option" EOL);
Janani Sunil 7:a3472d023b12 676 break;
Janani Sunil 7:a3472d023b12 677 }
Janani Sunil 7:a3472d023b12 678 return SUCCESS;
Janani Sunil 7:a3472d023b12 679 }
Janani Sunil 7:a3472d023b12 680 }
Janani Sunil 7:a3472d023b12 681
Janani Sunil 7:a3472d023b12 682 /*******************************************************************************
Janani Sunil 7:a3472d023b12 683 * @brief - Set INT/CT Outputs pins to Comparator or Interrupt mode
Janani Sunil 7:a3472d023b12 684 *
Janani Sunil 7:a3472d023b12 685 * @param None
Janani Sunil 7:a3472d023b12 686 *
Janani Sunil 7:a3472d023b12 687 * @return - Return SUCCESS/FAILURE flags
Janani Sunil 7:a3472d023b12 688 *******************************************************************************/
Janani Sunil 7:a3472d023b12 689 static uint8_t set_ct_int_config()
Janani Sunil 7:a3472d023b12 690 {
Janani Sunil 7:a3472d023b12 691 int new_polarity = 0;
Janani Sunil 7:a3472d023b12 692 int new_mode, invalid_check = 0;
Janani Sunil 7:a3472d023b12 693
Janani Sunil 7:a3472d023b12 694 printf(" Choose INT/CT mode:" EOL);
Janani Sunil 7:a3472d023b12 695 printf(" 1- Interrupt (default) " EOL);
Janani Sunil 7:a3472d023b12 696 printf(" 2- Comparator " EOL);
Janani Sunil 7:a3472d023b12 697 printf(" Select a mode: ");
Janani Sunil 7:a3472d023b12 698 invalid_check = scanf("%d", &new_mode);
Janani Sunil 7:a3472d023b12 699 if (input_check(new_mode, 1, 2, invalid_check) == FAILURE) {
Janani Sunil 7:a3472d023b12 700 return FAILURE;
Janani Sunil 7:a3472d023b12 701 } else {
Janani Sunil 7:a3472d023b12 702 printf("%d" EOL, new_mode);
Janani Sunil 7:a3472d023b12 703 new_mode = (new_mode == 1) ? 0 : 1;
Janani Sunil 7:a3472d023b12 704 adt7420_set_ct_int_mode(device, new_mode);
Janani Sunil 7:a3472d023b12 705 }
Janani Sunil 7:a3472d023b12 706
Janani Sunil 7:a3472d023b12 707 printf(EOL " Set output polarity for Critical and Over/Under Temperature pin:"
Janani Sunil 7:a3472d023b12 708 EOL);
Janani Sunil 7:a3472d023b12 709 printf(" (Feature available only for internal sensors)." EOL);
Janani Sunil 7:a3472d023b12 710
Janani Sunil 7:a3472d023b12 711 if(init_params.interface_init.i2c_init.slave_address == INT_I2C_ADDRESS ||
Janani Sunil 7:a3472d023b12 712 init_params.interface_init.spi_init.chip_select == SPI_CS) {
Janani Sunil 7:a3472d023b12 713
Janani Sunil 7:a3472d023b12 714 printf(" 1- Active Low (default) " EOL);
Janani Sunil 7:a3472d023b12 715 printf(" 2- Active High" EOL);
Janani Sunil 7:a3472d023b12 716 printf(" Select a mode: ");
Janani Sunil 7:a3472d023b12 717
Janani Sunil 7:a3472d023b12 718 invalid_check = scanf("%d", &new_polarity);
Janani Sunil 7:a3472d023b12 719 if (input_check(new_polarity, 1, 2, invalid_check) == FAILURE) {
Janani Sunil 7:a3472d023b12 720 return FAILURE;
Janani Sunil 7:a3472d023b12 721 } else {
Janani Sunil 7:a3472d023b12 722 printf("%d" EOL, new_polarity);
Janani Sunil 7:a3472d023b12 723 new_polarity = (new_polarity == 1) ? 0 : 1;
Janani Sunil 7:a3472d023b12 724 adt7420_set_ct_int_polarity(device, new_polarity);
Janani Sunil 7:a3472d023b12 725 }
Janani Sunil 7:a3472d023b12 726 }
Janani Sunil 7:a3472d023b12 727 return SUCCESS;
Janani Sunil 7:a3472d023b12 728 }
Janani Sunil 7:a3472d023b12 729
Janani Sunil 7:a3472d023b12 730 /*******************************************************************************
Janani Sunil 7:a3472d023b12 731 * @brief Reset microcontroller
Janani Sunil 7:a3472d023b12 732 *
Janani Sunil 7:a3472d023b12 733 * @param None
Janani Sunil 7:a3472d023b12 734 *
Janani Sunil 7:a3472d023b12 735 * @return None.
Janani Sunil 7:a3472d023b12 736 *******************************************************************************/
Janani Sunil 7:a3472d023b12 737 static void microcontroller_reset()
Janani Sunil 7:a3472d023b12 738 {
Janani Sunil 7:a3472d023b12 739 NVIC_SystemReset();
Janani Sunil 7:a3472d023b12 740 }
Janani Sunil 7:a3472d023b12 741
Janani Sunil 7:a3472d023b12 742 /*******************************************************************************
Janani Sunil 7:a3472d023b12 743 * @brief Prints the active device every time the main menu is redrawn
Janani Sunil 7:a3472d023b12 744 *
Janani Sunil 7:a3472d023b12 745 * @param external_internal_selection - External or Internal Chip Selected
Janani Sunil 7:a3472d023b12 746 *
Janani Sunil 7:a3472d023b12 747 * @return None.
Janani Sunil 7:a3472d023b12 748 *******************************************************************************/
Janani Sunil 7:a3472d023b12 749 static void print_active_device(int external_internal_selection)
Janani Sunil 7:a3472d023b12 750 {
Janani Sunil 7:a3472d023b12 751 const char* devices[7] = {EOL EOL " Active Device: ADT7410 I2C",
Janani Sunil 7:a3472d023b12 752 EOL EOL " Active Device: ADT7420 I2C",
Janani Sunil 7:a3472d023b12 753 EOL EOL " Active Device: ADT7422 I2C",
Janani Sunil 7:a3472d023b12 754 EOL EOL " Active Device: ADT7310 SPI",
Janani Sunil 7:a3472d023b12 755 EOL EOL " Active Device: ADT7311 SPI",
Janani Sunil 7:a3472d023b12 756 EOL EOL " Active Device: ADT7312 SPI",
Janani Sunil 7:a3472d023b12 757 EOL EOL " Active Device: ADT7320 SPI"
Janani Sunil 7:a3472d023b12 758 };
Janani Sunil 7:a3472d023b12 759
Janani Sunil 7:a3472d023b12 760 const char* external_internal_print[] = {" - Internal Chip " EOL,
Janani Sunil 7:a3472d023b12 761 " - External Chip " EOL
Janani Sunil 7:a3472d023b12 762 };
Janani Sunil 7:a3472d023b12 763
Janani Sunil 7:a3472d023b12 764 printf("%s %s", devices[init_params.active_device],
Janani Sunil 7:a3472d023b12 765 external_internal_print[external_internal_selection - 1]);
Janani Sunil 7:a3472d023b12 766 }
Janani Sunil 7:a3472d023b12 767
Janani Sunil 7:a3472d023b12 768 /*******************************************************************************
Janani Sunil 7:a3472d023b12 769 * @brief Checks is an input is a digit and within valid range
Janani Sunil 7:a3472d023b12 770 *
Janani Sunil 7:a3472d023b12 771 * @param input_val - Value inputed by user
Janani Sunil 7:a3472d023b12 772 * @param lowest_accepted_val - Lowest acceptable value
Janani Sunil 7:a3472d023b12 773 * @param highest_accepted_val - Highest acceptable value
Janani Sunil 7:a3472d023b12 774 * @param invalid_check - Checks if unexpected type of data was entered in scanf
Janani Sunil 7:a3472d023b12 775 *
Janani Sunil 7:a3472d023b12 776 * @return SUCCESS/FAILURE Flags.
Janani Sunil 7:a3472d023b12 777 *******************************************************************************/
Janani Sunil 7:a3472d023b12 778 static int input_check(int input_val,
Janani Sunil 7:a3472d023b12 779 int lowest_accepted_val,
Janani Sunil 7:a3472d023b12 780 int highest_accepted_val,
Janani Sunil 7:a3472d023b12 781 int invalid_check)
Janani Sunil 7:a3472d023b12 782 {
Janani Sunil 7:a3472d023b12 783 if(invalid_check == 0 || input_val < lowest_accepted_val
Janani Sunil 7:a3472d023b12 784 || input_val > highest_accepted_val) {
Janani Sunil 7:a3472d023b12 785 printf(EOL EOL "***** Invalid entry: No changes made *****" EOL );
Janani Sunil 7:a3472d023b12 786 mdelay(WAIT_MENU_TIME);
Janani Sunil 7:a3472d023b12 787 return FAILURE;
Janani Sunil 7:a3472d023b12 788 }
Janani Sunil 7:a3472d023b12 789 return SUCCESS;
Janani Sunil 7:a3472d023b12 790 }