mbed code for MAXREFDES131 Qt GUI demo

Dependencies:   OWGridEye OneWire mbed

Committer:
j3
Date:
Thu Jul 21 23:12:13 2016 +0000
Revision:
0:bd523ea97465
Child:
4:7c61c45e12ee
init commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
j3 0:bd523ea97465 1 /**********************************************************************
j3 0:bd523ea97465 2 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
j3 0:bd523ea97465 3 *
j3 0:bd523ea97465 4 * Permission is hereby granted, free of charge, to any person obtaining a
j3 0:bd523ea97465 5 * copy of this software and associated documentation files (the "Software"),
j3 0:bd523ea97465 6 * to deal in the Software without restriction, including without limitation
j3 0:bd523ea97465 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
j3 0:bd523ea97465 8 * and/or sell copies of the Software, and to permit persons to whom the
j3 0:bd523ea97465 9 * Software is furnished to do so, subject to the following conditions:
j3 0:bd523ea97465 10 *
j3 0:bd523ea97465 11 * The above copyright notice and this permission notice shall be included
j3 0:bd523ea97465 12 * in all copies or substantial portions of the Software.
j3 0:bd523ea97465 13 *
j3 0:bd523ea97465 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
j3 0:bd523ea97465 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
j3 0:bd523ea97465 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
j3 0:bd523ea97465 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
j3 0:bd523ea97465 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
j3 0:bd523ea97465 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
j3 0:bd523ea97465 20 * OTHER DEALINGS IN THE SOFTWARE.
j3 0:bd523ea97465 21 *
j3 0:bd523ea97465 22 * Except as contained in this notice, the name of Maxim Integrated
j3 0:bd523ea97465 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
j3 0:bd523ea97465 24 * Products, Inc. Branding Policy.
j3 0:bd523ea97465 25 *
j3 0:bd523ea97465 26 * The mere transfer of this software does not imply any licenses
j3 0:bd523ea97465 27 * of trade secrets, proprietary technology, copyrights, patents,
j3 0:bd523ea97465 28 * trademarks, maskwork rights, or any other form of intellectual
j3 0:bd523ea97465 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
j3 0:bd523ea97465 30 * ownership rights.
j3 0:bd523ea97465 31 **********************************************************************/
j3 0:bd523ea97465 32
j3 0:bd523ea97465 33
j3 0:bd523ea97465 34 #include "maxrefdes131_demo.h"
j3 0:bd523ea97465 35
j3 0:bd523ea97465 36
j3 0:bd523ea97465 37 //*********************************************************************
j3 0:bd523ea97465 38 void print_rom_id(Serial & comms, RomId & romId)
j3 0:bd523ea97465 39 {
j3 0:bd523ea97465 40 //print the rom number
j3 0:bd523ea97465 41 for(uint8_t idx = 0; idx < RomId::byteLen; idx++)
j3 0:bd523ea97465 42 {
j3 0:bd523ea97465 43 comms.printf("0x%2x ", romId[idx]);
j3 0:bd523ea97465 44 }
j3 0:bd523ea97465 45 comms.printf("\n");
j3 0:bd523ea97465 46 }
j3 0:bd523ea97465 47
j3 0:bd523ea97465 48
j3 0:bd523ea97465 49 //*********************************************************************
j3 0:bd523ea97465 50 uint8_t init_sensor_state(OneWireMaster & owm, Serial & comms)
j3 0:bd523ea97465 51 {
j3 0:bd523ea97465 52 OneWireMaster::CmdResult ow_result = owm.OWReset();
j3 0:bd523ea97465 53 SearchState search_state;
j3 0:bd523ea97465 54 MultidropRomIterator selector(owm);
j3 0:bd523ea97465 55
j3 0:bd523ea97465 56 DS2413 * p_ow_switch;
j3 0:bd523ea97465 57
j3 0:bd523ea97465 58 uint8_t num_sensors = 0;
j3 0:bd523ea97465 59 uint8_t num_sensors_old = 0;
j3 0:bd523ea97465 60
j3 0:bd523ea97465 61 if(ow_result == OneWireMaster::Success)
j3 0:bd523ea97465 62 {
j3 0:bd523ea97465 63 /*this loop will run at least twice. Each time a branch is closed
j3 0:bd523ea97465 64 OWFirst is called in order to make sure all sensors are found.
j3 0:bd523ea97465 65 When num_sensors == num_sensors_old, all sensors should have been found
j3 0:bd523ea97465 66 */
j3 0:bd523ea97465 67 do
j3 0:bd523ea97465 68 {
j3 0:bd523ea97465 69 num_sensors_old = num_sensors;
j3 0:bd523ea97465 70 num_sensors = 0;
j3 0:bd523ea97465 71
j3 0:bd523ea97465 72 ow_result = OWFirst(owm, search_state);
j3 0:bd523ea97465 73
j3 0:bd523ea97465 74 while(ow_result == OneWireMaster::Success)
j3 0:bd523ea97465 75 {
j3 0:bd523ea97465 76 if(search_state.romId.familyCode() == OWGridEye::DS2413_FAMILY_CODE)
j3 0:bd523ea97465 77 {
j3 0:bd523ea97465 78 num_sensors++;
j3 0:bd523ea97465 79
j3 0:bd523ea97465 80 p_ow_switch = new DS2413(selector);
j3 0:bd523ea97465 81
j3 0:bd523ea97465 82 p_ow_switch->setRomId(search_state.romId);
j3 0:bd523ea97465 83
j3 0:bd523ea97465 84 p_ow_switch->pioAccessWriteChAB(0);
j3 0:bd523ea97465 85
j3 0:bd523ea97465 86 delete p_ow_switch;
j3 0:bd523ea97465 87 }
j3 0:bd523ea97465 88
j3 0:bd523ea97465 89 ow_result = OWNext(owm, search_state);
j3 0:bd523ea97465 90 }
j3 0:bd523ea97465 91 }
j3 0:bd523ea97465 92 while(num_sensors > num_sensors_old);
j3 0:bd523ea97465 93
j3 0:bd523ea97465 94 //Disconnect all branches and GridEYE sensors for proper enumeration
j3 0:bd523ea97465 95 if(num_sensors > 0)
j3 0:bd523ea97465 96 {
j3 0:bd523ea97465 97 //set all sensors to default state
j3 0:bd523ea97465 98 uint8_t write_val = 0xFD;
j3 0:bd523ea97465 99 uint8_t send_block[] = {0x5A, write_val, ~write_val};
j3 0:bd523ea97465 100
j3 0:bd523ea97465 101 //ow_result = OWOverdriveSkipRom(owm);
j3 0:bd523ea97465 102 ow_result = OWSkipRom(owm);
j3 0:bd523ea97465 103 if(ow_result == OneWireMaster::Success)
j3 0:bd523ea97465 104 {
j3 0:bd523ea97465 105 ow_result = owm.OWWriteBlock(send_block, 3);
j3 0:bd523ea97465 106 }
j3 0:bd523ea97465 107
j3 0:bd523ea97465 108 if(ow_result != OneWireMaster::Success)
j3 0:bd523ea97465 109 {
j3 0:bd523ea97465 110 comms.printf("MBED: Failed to init sensors\n");
j3 0:bd523ea97465 111 }
j3 0:bd523ea97465 112 }
j3 0:bd523ea97465 113 }
j3 0:bd523ea97465 114
j3 0:bd523ea97465 115 return num_sensors;
j3 0:bd523ea97465 116 }
j3 0:bd523ea97465 117
j3 0:bd523ea97465 118
j3 0:bd523ea97465 119 //*********************************************************************
j3 0:bd523ea97465 120 uint8_t enumerate_sensors(Serial & comms, OneWireMaster & owm, RandomAccessRomIterator & selector, OWGridEye * array[])
j3 0:bd523ea97465 121 {
j3 0:bd523ea97465 122 OWGridEye * p_sensor;
j3 0:bd523ea97465 123 OWGridEye::CmdResult sensor_result;
j3 0:bd523ea97465 124
j3 0:bd523ea97465 125 RomId temp_rom;
j3 0:bd523ea97465 126
j3 0:bd523ea97465 127 uint8_t num_sensors = 0;
j3 0:bd523ea97465 128 uint8_t num_sensors_old = 0;
j3 0:bd523ea97465 129
j3 0:bd523ea97465 130 uint8_t array_idx = 0;
j3 0:bd523ea97465 131
j3 0:bd523ea97465 132 uint8_t idx;
j3 0:bd523ea97465 133
j3 0:bd523ea97465 134 bool sensor_exists = false;
j3 0:bd523ea97465 135
j3 0:bd523ea97465 136 OneWireMaster::CmdResult ow_result = owm.OWReset();
j3 0:bd523ea97465 137 SearchState search_state;
j3 0:bd523ea97465 138
j3 0:bd523ea97465 139 if(ow_result == OneWireMaster::Success)
j3 0:bd523ea97465 140 {
j3 0:bd523ea97465 141 do
j3 0:bd523ea97465 142 {
j3 0:bd523ea97465 143 num_sensors_old = num_sensors;
j3 0:bd523ea97465 144 num_sensors = 0;
j3 0:bd523ea97465 145
j3 0:bd523ea97465 146 ow_result = OWFirst(owm, search_state);
j3 0:bd523ea97465 147
j3 0:bd523ea97465 148 while(ow_result == OneWireMaster::Success)
j3 0:bd523ea97465 149 {
j3 0:bd523ea97465 150 num_sensors++;
j3 0:bd523ea97465 151
j3 0:bd523ea97465 152 if(search_state.romId.familyCode() == OWGridEye::DS2413_FAMILY_CODE)
j3 0:bd523ea97465 153 {
j3 0:bd523ea97465 154 //check if sensor already exists
j3 0:bd523ea97465 155 sensor_exists = false;
j3 0:bd523ea97465 156 for(idx = 0; idx < array_idx; idx++)
j3 0:bd523ea97465 157 {
j3 0:bd523ea97465 158 p_sensor = array[idx];
j3 0:bd523ea97465 159
j3 0:bd523ea97465 160 if(p_sensor->getOWSwitchRomId() == search_state.romId)
j3 0:bd523ea97465 161 {
j3 0:bd523ea97465 162 sensor_exists = true;
j3 0:bd523ea97465 163 }
j3 0:bd523ea97465 164 }
j3 0:bd523ea97465 165
j3 0:bd523ea97465 166 //if sensor doesn't already exist add to array
j3 0:bd523ea97465 167 if(!sensor_exists)
j3 0:bd523ea97465 168 {
j3 0:bd523ea97465 169 p_sensor = new OWGridEye(selector);
j3 0:bd523ea97465 170
j3 0:bd523ea97465 171 p_sensor->setOWSwitchRomId(search_state.romId);
j3 0:bd523ea97465 172
j3 0:bd523ea97465 173 sensor_result = p_sensor->connectGridEye();
j3 0:bd523ea97465 174 if(sensor_result == OWGridEye::Success)
j3 0:bd523ea97465 175 {
j3 0:bd523ea97465 176 search_state.findFamily(OWGridEye::DS28E17_FAMILY_CODE);
j3 0:bd523ea97465 177 ow_result = OWNext(owm, search_state);
j3 0:bd523ea97465 178 if(ow_result == OneWireMaster::Success)
j3 0:bd523ea97465 179 {
j3 0:bd523ea97465 180 p_sensor->setI2CBridgeRomId(search_state.romId);
j3 0:bd523ea97465 181
j3 0:bd523ea97465 182 array[array_idx++] = p_sensor;
j3 0:bd523ea97465 183
j3 0:bd523ea97465 184 comms.printf("MBED: DS2413 romId = ");
j3 0:bd523ea97465 185 temp_rom = p_sensor->getOWSwitchRomId();
j3 0:bd523ea97465 186 print_rom_id(comms,temp_rom);
j3 0:bd523ea97465 187 comms.printf("MBED: DS28E17 romId = ");
j3 0:bd523ea97465 188 temp_rom = p_sensor->getI2CBridgeRomId();
j3 0:bd523ea97465 189 print_rom_id(comms, temp_rom);
j3 0:bd523ea97465 190
j3 0:bd523ea97465 191 sensor_result = p_sensor->disconnectGridEye();
j3 0:bd523ea97465 192 if(sensor_result == OWGridEye::OpFailure)
j3 0:bd523ea97465 193 {
j3 0:bd523ea97465 194 comms.printf("MBED: Failed to disconnect sensor\n");
j3 0:bd523ea97465 195 mbed_die();
j3 0:bd523ea97465 196 }
j3 0:bd523ea97465 197
j3 0:bd523ea97465 198 sensor_result = p_sensor->connectOWbus();
j3 0:bd523ea97465 199 if(sensor_result == OWGridEye::OpFailure)
j3 0:bd523ea97465 200 {
j3 0:bd523ea97465 201 comms.printf("MBED: Failed to connect ow branch %d\n", array_idx);
j3 0:bd523ea97465 202 mbed_die();
j3 0:bd523ea97465 203 }
j3 0:bd523ea97465 204 }
j3 0:bd523ea97465 205 else
j3 0:bd523ea97465 206 {
j3 0:bd523ea97465 207 comms.printf("MBED: Failed to find DS28E17\n", array_idx);
j3 0:bd523ea97465 208 }
j3 0:bd523ea97465 209 }
j3 0:bd523ea97465 210 else
j3 0:bd523ea97465 211 {
j3 0:bd523ea97465 212 comms.printf("MBED: Failed to connect GridEye\n", array_idx);
j3 0:bd523ea97465 213 }
j3 0:bd523ea97465 214 }
j3 0:bd523ea97465 215 }
j3 0:bd523ea97465 216
j3 0:bd523ea97465 217 ow_result = OWNext(owm, search_state);
j3 0:bd523ea97465 218 }
j3 0:bd523ea97465 219 }
j3 0:bd523ea97465 220 while(num_sensors > num_sensors_old);
j3 0:bd523ea97465 221 }
j3 0:bd523ea97465 222
j3 0:bd523ea97465 223
j3 0:bd523ea97465 224 return array_idx;
j3 0:bd523ea97465 225 }
j3 0:bd523ea97465 226
j3 0:bd523ea97465 227
j3 0:bd523ea97465 228 //*********************************************************************
j3 0:bd523ea97465 229 void send_data(Serial & comms, float * data_buffer, float therm_temp)
j3 0:bd523ea97465 230 {
j3 0:bd523ea97465 231 comms.printf("DATA: ");
j3 0:bd523ea97465 232 wait_us(1000);
j3 0:bd523ea97465 233 for(uint8_t idx = 0; idx < 64; idx++)
j3 0:bd523ea97465 234 {
j3 0:bd523ea97465 235 comms.printf("%.3f ", data_buffer[idx]);
j3 0:bd523ea97465 236 wait_us(1000);
j3 0:bd523ea97465 237
j3 0:bd523ea97465 238 if(((idx+1) % 8) == 0)
j3 0:bd523ea97465 239 {
j3 0:bd523ea97465 240 comms.printf("\nDATA: ");
j3 0:bd523ea97465 241 wait_us(1000);
j3 0:bd523ea97465 242 }
j3 0:bd523ea97465 243 }
j3 0:bd523ea97465 244 comms.printf("%.3f \n", therm_temp);
j3 0:bd523ea97465 245 wait_us(1000);
j3 0:bd523ea97465 246 }