1-Wire® library for mbed. Complete 1-Wire library that supports our silicon masters along with a bit-bang master on the MAX32600MBED platform with one common interface for mbed. Slave support has also been included and more slaves will be added as time permits.

Dependents:   MAXREFDES131_Qt_Demo MAX32630FTHR_iButton_uSD_Logger MAX32630FTHR_DS18B20_uSD_Logger MAXREFDES130_131_Demo ... more

Superseded by MaximInterface.

Committer:
IanBenzMaxim
Date:
Fri May 13 14:52:50 2016 -0500
Revision:
75:8b627804927c
Parent:
74:23be10c32fa3
Child:
76:84e6c4994e29
Code cleanup.

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 75:8b627804927c 39 enum DS2413_CMDS
IanBenzMaxim 75:8b627804927c 40 {
IanBenzMaxim 75:8b627804927c 41 PIO_ACCESS_READ = 0xF5,
IanBenzMaxim 75:8b627804927c 42 PIO_ACCESS_WRITE = 0x5A
IanBenzMaxim 75:8b627804927c 43 };
IanBenzMaxim 75:8b627804927c 44
IanBenzMaxim 75:8b627804927c 45 enum DS2413_PIO
IanBenzMaxim 75:8b627804927c 46 {
IanBenzMaxim 75:8b627804927c 47 PIOA,
IanBenzMaxim 75:8b627804927c 48 PIOB,
IanBenzMaxim 75:8b627804927c 49 PIOAB
IanBenzMaxim 75:8b627804927c 50 };
IanBenzMaxim 75:8b627804927c 51
IanBenzMaxim 74:23be10c32fa3 52 DS2413::DS2413(OneWireMaster &owm) : _owm(owm)
j3 19:6d4c039a2d8e 53 {
j3 19:6d4c039a2d8e 54 }
j3 19:6d4c039a2d8e 55
IanBenzMaxim 73:2cecc1372acc 56 DS2413::CmdResult DS2413::pio_access_read_chA(uint8_t & val)
j3 19:6d4c039a2d8e 57 {
IanBenzMaxim 74:23be10c32fa3 58 DS2413::CmdResult result = OpFailure;
IanBenzMaxim 74:23be10c32fa3 59
IanBenzMaxim 74:23be10c32fa3 60 result = pio_access_read(val);
IanBenzMaxim 74:23be10c32fa3 61
IanBenzMaxim 74:23be10c32fa3 62 val = (val & 0x01);
IanBenzMaxim 74:23be10c32fa3 63
IanBenzMaxim 74:23be10c32fa3 64 return result;
j3 19:6d4c039a2d8e 65 }
j3 19:6d4c039a2d8e 66
IanBenzMaxim 73:2cecc1372acc 67 DS2413::CmdResult DS2413::pio_access_read_chB(uint8_t & val)
j3 19:6d4c039a2d8e 68 {
IanBenzMaxim 74:23be10c32fa3 69 DS2413::CmdResult result = OpFailure;
IanBenzMaxim 74:23be10c32fa3 70
IanBenzMaxim 74:23be10c32fa3 71 result = pio_access_read(val);
IanBenzMaxim 74:23be10c32fa3 72
IanBenzMaxim 74:23be10c32fa3 73 val = ((val >> 2) & 0x01);
IanBenzMaxim 74:23be10c32fa3 74
IanBenzMaxim 74:23be10c32fa3 75 return result;
j3 19:6d4c039a2d8e 76 }
j3 19:6d4c039a2d8e 77
IanBenzMaxim 73:2cecc1372acc 78 DS2413::CmdResult DS2413::pio_access_write_chA(uint8_t val)
j3 19:6d4c039a2d8e 79 {
IanBenzMaxim 74:23be10c32fa3 80 DS2413::CmdResult result = OpFailure;
IanBenzMaxim 74:23be10c32fa3 81
IanBenzMaxim 74:23be10c32fa3 82 uint8_t local_val = 0;
IanBenzMaxim 74:23be10c32fa3 83
IanBenzMaxim 74:23be10c32fa3 84 //read current state of PIO
IanBenzMaxim 74:23be10c32fa3 85 result = pio_access_read(local_val);
IanBenzMaxim 74:23be10c32fa3 86
IanBenzMaxim 74:23be10c32fa3 87 if (result == DS2413::Success)
IanBenzMaxim 74:23be10c32fa3 88 {
IanBenzMaxim 74:23be10c32fa3 89 //modify
IanBenzMaxim 74:23be10c32fa3 90 //current state of pioB OR
IanBenzMaxim 74:23be10c32fa3 91 //desired state of pioA OR
IanBenzMaxim 74:23be10c32fa3 92 //bits[7:2] should all be 1, per datasheet
IanBenzMaxim 74:23be10c32fa3 93 val = (0xFC | (((local_val >> 1) & 0x02) | (0x01 & val)));
IanBenzMaxim 74:23be10c32fa3 94
IanBenzMaxim 74:23be10c32fa3 95 //write, bit[1:0] new state of pio
IanBenzMaxim 74:23be10c32fa3 96 result = pio_access_write(val);
IanBenzMaxim 74:23be10c32fa3 97 }
IanBenzMaxim 74:23be10c32fa3 98
IanBenzMaxim 74:23be10c32fa3 99 return result;
j3 19:6d4c039a2d8e 100 }
j3 19:6d4c039a2d8e 101
IanBenzMaxim 73:2cecc1372acc 102 DS2413::CmdResult DS2413::pio_access_write_chB(uint8_t val)
j3 19:6d4c039a2d8e 103 {
IanBenzMaxim 74:23be10c32fa3 104 DS2413::CmdResult result = OpFailure;
IanBenzMaxim 74:23be10c32fa3 105
IanBenzMaxim 74:23be10c32fa3 106 uint8_t local_val = 0;
IanBenzMaxim 74:23be10c32fa3 107
IanBenzMaxim 74:23be10c32fa3 108 //read current state of PIO
IanBenzMaxim 74:23be10c32fa3 109 result = pio_access_read(local_val);
IanBenzMaxim 74:23be10c32fa3 110
IanBenzMaxim 74:23be10c32fa3 111 if (result == DS2413::Success)
IanBenzMaxim 74:23be10c32fa3 112 {
IanBenzMaxim 74:23be10c32fa3 113 //modify
IanBenzMaxim 74:23be10c32fa3 114 //current state of pioA OR
IanBenzMaxim 74:23be10c32fa3 115 //desired state of pioB OR
IanBenzMaxim 74:23be10c32fa3 116 //bits[7:2] should all be 1, per datasheet
IanBenzMaxim 74:23be10c32fa3 117 val = (0xFC | ((local_val & 0x01) | (0x02 & (val << 1))));
IanBenzMaxim 74:23be10c32fa3 118
IanBenzMaxim 74:23be10c32fa3 119 //write, bit[1:0] new state of pio
IanBenzMaxim 74:23be10c32fa3 120 result = pio_access_write(val);
IanBenzMaxim 74:23be10c32fa3 121 }
IanBenzMaxim 74:23be10c32fa3 122
IanBenzMaxim 74:23be10c32fa3 123 return result;
j3 19:6d4c039a2d8e 124 }
j3 19:6d4c039a2d8e 125
IanBenzMaxim 73:2cecc1372acc 126 DS2413::CmdResult DS2413::pio_access_write_chAB(uint8_t val)
j3 54:08985bf69691 127 {
IanBenzMaxim 73:2cecc1372acc 128 return pio_access_write((0x03 & val) | 0xFC);
j3 54:08985bf69691 129 }
j3 54:08985bf69691 130
IanBenzMaxim 73:2cecc1372acc 131 DS2413::CmdResult DS2413::pio_access_read(uint8_t & val)
j3 19:6d4c039a2d8e 132 {
IanBenzMaxim 74:23be10c32fa3 133 DS2413::CmdResult result = DS2413::OpFailure;
IanBenzMaxim 74:23be10c32fa3 134
IanBenzMaxim 75:8b627804927c 135 OneWireMaster::CmdResult ow_result = _owm.OWMatchRom(romId);
IanBenzMaxim 74:23be10c32fa3 136
IanBenzMaxim 74:23be10c32fa3 137 if (ow_result == OneWireMaster::Success)
j3 19:6d4c039a2d8e 138 {
IanBenzMaxim 75:8b627804927c 139 ow_result = _owm.OWWriteByte(PIO_ACCESS_READ);
IanBenzMaxim 74:23be10c32fa3 140
IanBenzMaxim 74:23be10c32fa3 141 if (ow_result == OneWireMaster::Success)
IanBenzMaxim 74:23be10c32fa3 142 {
IanBenzMaxim 74:23be10c32fa3 143 ow_result = _owm.OWReadByte(val);
IanBenzMaxim 74:23be10c32fa3 144
IanBenzMaxim 74:23be10c32fa3 145 if (ow_result == OneWireMaster::Success)
IanBenzMaxim 74:23be10c32fa3 146 {
IanBenzMaxim 74:23be10c32fa3 147 result = DS2413::Success;
IanBenzMaxim 74:23be10c32fa3 148 }
IanBenzMaxim 74:23be10c32fa3 149 else
IanBenzMaxim 74:23be10c32fa3 150 {
IanBenzMaxim 74:23be10c32fa3 151 result = DS2413::CommsReadError;
IanBenzMaxim 74:23be10c32fa3 152 }
IanBenzMaxim 74:23be10c32fa3 153 }
IanBenzMaxim 74:23be10c32fa3 154 else
IanBenzMaxim 74:23be10c32fa3 155 {
IanBenzMaxim 74:23be10c32fa3 156 result = DS2413::CommsWriteError;
IanBenzMaxim 74:23be10c32fa3 157 }
j3 19:6d4c039a2d8e 158 }
IanBenzMaxim 74:23be10c32fa3 159
IanBenzMaxim 74:23be10c32fa3 160 return result;
j3 19:6d4c039a2d8e 161 }
j3 19:6d4c039a2d8e 162
IanBenzMaxim 73:2cecc1372acc 163 DS2413::CmdResult DS2413::pio_access_write(uint8_t val)
j3 19:6d4c039a2d8e 164 {
IanBenzMaxim 74:23be10c32fa3 165 DS2413::CmdResult result = DS2413::OpFailure;
IanBenzMaxim 74:23be10c32fa3 166
IanBenzMaxim 75:8b627804927c 167 OneWireMaster::CmdResult ow_result = _owm.OWMatchRom(romId);
IanBenzMaxim 74:23be10c32fa3 168
IanBenzMaxim 74:23be10c32fa3 169 if (ow_result == OneWireMaster::Success)
j3 19:6d4c039a2d8e 170 {
IanBenzMaxim 75:8b627804927c 171 uint8_t send_block[] = { PIO_ACCESS_WRITE, val, ~val };
IanBenzMaxim 74:23be10c32fa3 172
IanBenzMaxim 74:23be10c32fa3 173 ow_result = _owm.OWWriteBlock(send_block, 3);
IanBenzMaxim 74:23be10c32fa3 174 if (ow_result == OneWireMaster::Success)
j3 19:6d4c039a2d8e 175 {
IanBenzMaxim 74:23be10c32fa3 176 uint8_t expected_status = ((0x01 & val) | ((0x01 & val) << 1) |
IanBenzMaxim 74:23be10c32fa3 177 ((0x02 & val) << 1) | ((0x02 & val) << 2));
IanBenzMaxim 74:23be10c32fa3 178
IanBenzMaxim 74:23be10c32fa3 179 uint8_t rcv_block[2];
IanBenzMaxim 74:23be10c32fa3 180 ow_result = _owm.OWReadBlock(rcv_block, 2);
IanBenzMaxim 74:23be10c32fa3 181
IanBenzMaxim 74:23be10c32fa3 182 if (ow_result == OneWireMaster::Success)
IanBenzMaxim 74:23be10c32fa3 183 {
IanBenzMaxim 74:23be10c32fa3 184 if ((rcv_block[0] == 0xAA) && ((rcv_block[1] & 0x0F) == expected_status))
IanBenzMaxim 74:23be10c32fa3 185 {
IanBenzMaxim 74:23be10c32fa3 186 result = DS2413::Success;
IanBenzMaxim 74:23be10c32fa3 187 }
IanBenzMaxim 74:23be10c32fa3 188 }
IanBenzMaxim 74:23be10c32fa3 189 else
IanBenzMaxim 74:23be10c32fa3 190 {
IanBenzMaxim 74:23be10c32fa3 191 result = DS2413::CommsReadError;
IanBenzMaxim 74:23be10c32fa3 192 }
j3 19:6d4c039a2d8e 193 }
IanBenzMaxim 74:23be10c32fa3 194 else
IanBenzMaxim 74:23be10c32fa3 195 {
IanBenzMaxim 74:23be10c32fa3 196 result = DS2413::CommsWriteError;
IanBenzMaxim 74:23be10c32fa3 197 }
j3 19:6d4c039a2d8e 198 }
IanBenzMaxim 74:23be10c32fa3 199
IanBenzMaxim 74:23be10c32fa3 200 return result;
j3 19:6d4c039a2d8e 201 }