Implementation of 1-Wire with added Alarm Search Functionality

Dependents:   Max32630_One_Wire_Interface

Committer:
IanBenzMaxim
Date:
Fri May 13 07:48:35 2016 -0500
Revision:
74:23be10c32fa3
Parent:
73:2cecc1372acc
Child:
75:8b627804927c
Assimilated indentation and braces.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
j3 19:6d4c039a2d8e 1 /******************************************************************//**
j3 19:6d4c039a2d8e 2 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
j3 19:6d4c039a2d8e 3 *
j3 19:6d4c039a2d8e 4 * Permission is hereby granted, free of charge, to any person obtaining a
j3 19:6d4c039a2d8e 5 * copy of this software and associated documentation files (the "Software"),
j3 19:6d4c039a2d8e 6 * to deal in the Software without restriction, including without limitation
j3 19:6d4c039a2d8e 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
j3 19:6d4c039a2d8e 8 * and/or sell copies of the Software, and to permit persons to whom the
j3 19:6d4c039a2d8e 9 * Software is furnished to do so, subject to the following conditions:
j3 19:6d4c039a2d8e 10 *
j3 19:6d4c039a2d8e 11 * The above copyright notice and this permission notice shall be included
j3 19:6d4c039a2d8e 12 * in all copies or substantial portions of the Software.
j3 19:6d4c039a2d8e 13 *
j3 19:6d4c039a2d8e 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
j3 19:6d4c039a2d8e 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
j3 19:6d4c039a2d8e 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
j3 19:6d4c039a2d8e 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
j3 19:6d4c039a2d8e 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
j3 19:6d4c039a2d8e 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
j3 19:6d4c039a2d8e 20 * OTHER DEALINGS IN THE SOFTWARE.
j3 19:6d4c039a2d8e 21 *
j3 19:6d4c039a2d8e 22 * Except as contained in this notice, the name of Maxim Integrated
j3 19:6d4c039a2d8e 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
j3 19:6d4c039a2d8e 24 * Products, Inc. Branding Policy.
j3 19:6d4c039a2d8e 25 *
j3 19:6d4c039a2d8e 26 * The mere transfer of this software does not imply any licenses
j3 19:6d4c039a2d8e 27 * of trade secrets, proprietary technology, copyrights, patents,
j3 19:6d4c039a2d8e 28 * trademarks, maskwork rights, or any other form of intellectual
j3 19:6d4c039a2d8e 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
j3 19:6d4c039a2d8e 30 * ownership rights.
j3 19:6d4c039a2d8e 31 **********************************************************************/
j3 19:6d4c039a2d8e 32
IanBenzMaxim 73:2cecc1372acc 33 #include "DS2413.h"
IanBenzMaxim 73:2cecc1372acc 34 #include "Masters/OneWireMasters.h"
j3 19:6d4c039a2d8e 35
IanBenzMaxim 73:2cecc1372acc 36 using OneWire::Switches::DS2413;
IanBenzMaxim 73:2cecc1372acc 37 using OneWire::Masters::OneWireMaster;
j3 19:6d4c039a2d8e 38
IanBenzMaxim 74:23be10c32fa3 39 DS2413::DS2413(OneWireMaster &owm) : _owm(owm)
j3 19:6d4c039a2d8e 40 {
j3 19:6d4c039a2d8e 41 }
j3 19:6d4c039a2d8e 42
IanBenzMaxim 73:2cecc1372acc 43 DS2413::CmdResult DS2413::pio_access_read_chA(uint8_t & val)
j3 19:6d4c039a2d8e 44 {
IanBenzMaxim 74:23be10c32fa3 45 DS2413::CmdResult result = OpFailure;
IanBenzMaxim 74:23be10c32fa3 46
IanBenzMaxim 74:23be10c32fa3 47 result = pio_access_read(val);
IanBenzMaxim 74:23be10c32fa3 48
IanBenzMaxim 74:23be10c32fa3 49 val = (val & 0x01);
IanBenzMaxim 74:23be10c32fa3 50
IanBenzMaxim 74:23be10c32fa3 51 return result;
j3 19:6d4c039a2d8e 52 }
j3 19:6d4c039a2d8e 53
IanBenzMaxim 73:2cecc1372acc 54 DS2413::CmdResult DS2413::pio_access_read_chB(uint8_t & val)
j3 19:6d4c039a2d8e 55 {
IanBenzMaxim 74:23be10c32fa3 56 DS2413::CmdResult result = OpFailure;
IanBenzMaxim 74:23be10c32fa3 57
IanBenzMaxim 74:23be10c32fa3 58 result = pio_access_read(val);
IanBenzMaxim 74:23be10c32fa3 59
IanBenzMaxim 74:23be10c32fa3 60 val = ((val >> 2) & 0x01);
IanBenzMaxim 74:23be10c32fa3 61
IanBenzMaxim 74:23be10c32fa3 62 return result;
j3 19:6d4c039a2d8e 63 }
j3 19:6d4c039a2d8e 64
IanBenzMaxim 73:2cecc1372acc 65 DS2413::CmdResult DS2413::pio_access_write_chA(uint8_t val)
j3 19:6d4c039a2d8e 66 {
IanBenzMaxim 74:23be10c32fa3 67 DS2413::CmdResult result = OpFailure;
IanBenzMaxim 74:23be10c32fa3 68
IanBenzMaxim 74:23be10c32fa3 69 uint8_t local_val = 0;
IanBenzMaxim 74:23be10c32fa3 70
IanBenzMaxim 74:23be10c32fa3 71 //read current state of PIO
IanBenzMaxim 74:23be10c32fa3 72 result = pio_access_read(local_val);
IanBenzMaxim 74:23be10c32fa3 73
IanBenzMaxim 74:23be10c32fa3 74 if (result == DS2413::Success)
IanBenzMaxim 74:23be10c32fa3 75 {
IanBenzMaxim 74:23be10c32fa3 76 //modify
IanBenzMaxim 74:23be10c32fa3 77 //current state of pioB OR
IanBenzMaxim 74:23be10c32fa3 78 //desired state of pioA OR
IanBenzMaxim 74:23be10c32fa3 79 //bits[7:2] should all be 1, per datasheet
IanBenzMaxim 74:23be10c32fa3 80 val = (0xFC | (((local_val >> 1) & 0x02) | (0x01 & val)));
IanBenzMaxim 74:23be10c32fa3 81
IanBenzMaxim 74:23be10c32fa3 82 //write, bit[1:0] new state of pio
IanBenzMaxim 74:23be10c32fa3 83 result = pio_access_write(val);
IanBenzMaxim 74:23be10c32fa3 84 }
IanBenzMaxim 74:23be10c32fa3 85
IanBenzMaxim 74:23be10c32fa3 86 return result;
j3 19:6d4c039a2d8e 87 }
j3 19:6d4c039a2d8e 88
IanBenzMaxim 73:2cecc1372acc 89 DS2413::CmdResult DS2413::pio_access_write_chB(uint8_t val)
j3 19:6d4c039a2d8e 90 {
IanBenzMaxim 74:23be10c32fa3 91 DS2413::CmdResult result = OpFailure;
IanBenzMaxim 74:23be10c32fa3 92
IanBenzMaxim 74:23be10c32fa3 93 uint8_t local_val = 0;
IanBenzMaxim 74:23be10c32fa3 94
IanBenzMaxim 74:23be10c32fa3 95 //read current state of PIO
IanBenzMaxim 74:23be10c32fa3 96 result = pio_access_read(local_val);
IanBenzMaxim 74:23be10c32fa3 97
IanBenzMaxim 74:23be10c32fa3 98 if (result == DS2413::Success)
IanBenzMaxim 74:23be10c32fa3 99 {
IanBenzMaxim 74:23be10c32fa3 100 //modify
IanBenzMaxim 74:23be10c32fa3 101 //current state of pioA OR
IanBenzMaxim 74:23be10c32fa3 102 //desired state of pioB OR
IanBenzMaxim 74:23be10c32fa3 103 //bits[7:2] should all be 1, per datasheet
IanBenzMaxim 74:23be10c32fa3 104 val = (0xFC | ((local_val & 0x01) | (0x02 & (val << 1))));
IanBenzMaxim 74:23be10c32fa3 105
IanBenzMaxim 74:23be10c32fa3 106 //write, bit[1:0] new state of pio
IanBenzMaxim 74:23be10c32fa3 107 result = pio_access_write(val);
IanBenzMaxim 74:23be10c32fa3 108 }
IanBenzMaxim 74:23be10c32fa3 109
IanBenzMaxim 74:23be10c32fa3 110 return result;
j3 19:6d4c039a2d8e 111 }
j3 19:6d4c039a2d8e 112
IanBenzMaxim 73:2cecc1372acc 113 DS2413::CmdResult DS2413::pio_access_write_chAB(uint8_t val)
j3 54:08985bf69691 114 {
IanBenzMaxim 73:2cecc1372acc 115 return pio_access_write((0x03 & val) | 0xFC);
j3 54:08985bf69691 116 }
j3 54:08985bf69691 117
IanBenzMaxim 73:2cecc1372acc 118 DS2413::CmdResult DS2413::pio_access_read(uint8_t & val)
j3 19:6d4c039a2d8e 119 {
IanBenzMaxim 74:23be10c32fa3 120 DS2413::CmdResult result = DS2413::OpFailure;
IanBenzMaxim 74:23be10c32fa3 121
IanBenzMaxim 74:23be10c32fa3 122 OneWireMaster::CmdResult ow_result = _owm.OWMatchROM(romId);
IanBenzMaxim 74:23be10c32fa3 123
IanBenzMaxim 74:23be10c32fa3 124 if (ow_result == OneWireMaster::Success)
j3 19:6d4c039a2d8e 125 {
IanBenzMaxim 74:23be10c32fa3 126 ow_result = _owm.OWWriteByte(DS2413::PIO_ACCESS_READ);
IanBenzMaxim 74:23be10c32fa3 127
IanBenzMaxim 74:23be10c32fa3 128 if (ow_result == OneWireMaster::Success)
IanBenzMaxim 74:23be10c32fa3 129 {
IanBenzMaxim 74:23be10c32fa3 130 ow_result = _owm.OWReadByte(val);
IanBenzMaxim 74:23be10c32fa3 131
IanBenzMaxim 74:23be10c32fa3 132 if (ow_result == OneWireMaster::Success)
IanBenzMaxim 74:23be10c32fa3 133 {
IanBenzMaxim 74:23be10c32fa3 134 result = DS2413::Success;
IanBenzMaxim 74:23be10c32fa3 135 }
IanBenzMaxim 74:23be10c32fa3 136 else
IanBenzMaxim 74:23be10c32fa3 137 {
IanBenzMaxim 74:23be10c32fa3 138 result = DS2413::CommsReadError;
IanBenzMaxim 74:23be10c32fa3 139 }
IanBenzMaxim 74:23be10c32fa3 140 }
IanBenzMaxim 74:23be10c32fa3 141 else
IanBenzMaxim 74:23be10c32fa3 142 {
IanBenzMaxim 74:23be10c32fa3 143 result = DS2413::CommsWriteError;
IanBenzMaxim 74:23be10c32fa3 144 }
j3 19:6d4c039a2d8e 145 }
IanBenzMaxim 74:23be10c32fa3 146
IanBenzMaxim 74:23be10c32fa3 147 return result;
j3 19:6d4c039a2d8e 148 }
j3 19:6d4c039a2d8e 149
IanBenzMaxim 73:2cecc1372acc 150 DS2413::CmdResult DS2413::pio_access_write(uint8_t val)
j3 19:6d4c039a2d8e 151 {
IanBenzMaxim 74:23be10c32fa3 152 DS2413::CmdResult result = DS2413::OpFailure;
IanBenzMaxim 74:23be10c32fa3 153
IanBenzMaxim 74:23be10c32fa3 154 OneWireMaster::CmdResult ow_result = _owm.OWMatchROM(romId);
IanBenzMaxim 74:23be10c32fa3 155
IanBenzMaxim 74:23be10c32fa3 156 if (ow_result == OneWireMaster::Success)
j3 19:6d4c039a2d8e 157 {
IanBenzMaxim 74:23be10c32fa3 158 uint8_t send_block[] = { DS2413::PIO_ACCESS_WRITE, val, ~val };
IanBenzMaxim 74:23be10c32fa3 159
IanBenzMaxim 74:23be10c32fa3 160 ow_result = _owm.OWWriteBlock(send_block, 3);
IanBenzMaxim 74:23be10c32fa3 161 if (ow_result == OneWireMaster::Success)
j3 19:6d4c039a2d8e 162 {
IanBenzMaxim 74:23be10c32fa3 163 uint8_t expected_status = ((0x01 & val) | ((0x01 & val) << 1) |
IanBenzMaxim 74:23be10c32fa3 164 ((0x02 & val) << 1) | ((0x02 & val) << 2));
IanBenzMaxim 74:23be10c32fa3 165
IanBenzMaxim 74:23be10c32fa3 166 uint8_t rcv_block[2];
IanBenzMaxim 74:23be10c32fa3 167 ow_result = _owm.OWReadBlock(rcv_block, 2);
IanBenzMaxim 74:23be10c32fa3 168
IanBenzMaxim 74:23be10c32fa3 169 if (ow_result == OneWireMaster::Success)
IanBenzMaxim 74:23be10c32fa3 170 {
IanBenzMaxim 74:23be10c32fa3 171 if ((rcv_block[0] == 0xAA) && ((rcv_block[1] & 0x0F) == expected_status))
IanBenzMaxim 74:23be10c32fa3 172 {
IanBenzMaxim 74:23be10c32fa3 173 result = DS2413::Success;
IanBenzMaxim 74:23be10c32fa3 174 }
IanBenzMaxim 74:23be10c32fa3 175 }
IanBenzMaxim 74:23be10c32fa3 176 else
IanBenzMaxim 74:23be10c32fa3 177 {
IanBenzMaxim 74:23be10c32fa3 178 result = DS2413::CommsReadError;
IanBenzMaxim 74:23be10c32fa3 179 }
j3 19:6d4c039a2d8e 180 }
IanBenzMaxim 74:23be10c32fa3 181 else
IanBenzMaxim 74:23be10c32fa3 182 {
IanBenzMaxim 74:23be10c32fa3 183 result = DS2413::CommsWriteError;
IanBenzMaxim 74:23be10c32fa3 184 }
j3 19:6d4c039a2d8e 185 }
IanBenzMaxim 74:23be10c32fa3 186
IanBenzMaxim 74:23be10c32fa3 187 return result;
j3 19:6d4c039a2d8e 188 }