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:
Sat May 14 14:27:56 2016 -0500
Revision:
76:84e6c4994e29
Parent:
75:8b627804927c
Child:
77:529edb329ee0
Move ROM commands outside of OneWireMaster to increase cohesiveness of the class. Do not use subdivide OneWire namespace since it will likely not provide value on this project.

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