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.
Masters/DS2465/DS2465.h@76:84e6c4994e29, 2016-05-14 (annotated)
- Committer:
- IanBenzMaxim
- Date:
- Sat May 14 14:27:56 2016 -0500
- Revision:
- 76:84e6c4994e29
- Parent:
- 75:8b627804927c
- Child:
- 78:0cbbac7f2016
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?
User | Revision | Line number | New contents of line |
---|---|---|---|
IanBenzMaxim | 75:8b627804927c | 1 | /******************************************************************//** |
IanBenzMaxim | 75:8b627804927c | 2 | * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved. |
IanBenzMaxim | 75:8b627804927c | 3 | * |
IanBenzMaxim | 75:8b627804927c | 4 | * Permission is hereby granted, free of charge, to any person obtaining a |
IanBenzMaxim | 75:8b627804927c | 5 | * copy of this software and associated documentation files (the "Software"), |
IanBenzMaxim | 75:8b627804927c | 6 | * to deal in the Software without restriction, including without limitation |
IanBenzMaxim | 75:8b627804927c | 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, |
IanBenzMaxim | 75:8b627804927c | 8 | * and/or sell copies of the Software, and to permit persons to whom the |
IanBenzMaxim | 75:8b627804927c | 9 | * Software is furnished to do so, subject to the following conditions: |
IanBenzMaxim | 75:8b627804927c | 10 | * |
IanBenzMaxim | 75:8b627804927c | 11 | * The above copyright notice and this permission notice shall be included |
IanBenzMaxim | 75:8b627804927c | 12 | * in all copies or substantial portions of the Software. |
IanBenzMaxim | 75:8b627804927c | 13 | * |
IanBenzMaxim | 75:8b627804927c | 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
IanBenzMaxim | 75:8b627804927c | 15 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
IanBenzMaxim | 75:8b627804927c | 16 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
IanBenzMaxim | 75:8b627804927c | 17 | * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES |
IanBenzMaxim | 75:8b627804927c | 18 | * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |
IanBenzMaxim | 75:8b627804927c | 19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
IanBenzMaxim | 75:8b627804927c | 20 | * OTHER DEALINGS IN THE SOFTWARE. |
IanBenzMaxim | 75:8b627804927c | 21 | * |
IanBenzMaxim | 75:8b627804927c | 22 | * Except as contained in this notice, the name of Maxim Integrated |
IanBenzMaxim | 75:8b627804927c | 23 | * Products, Inc. shall not be used except as stated in the Maxim Integrated |
IanBenzMaxim | 75:8b627804927c | 24 | * Products, Inc. Branding Policy. |
IanBenzMaxim | 75:8b627804927c | 25 | * |
IanBenzMaxim | 75:8b627804927c | 26 | * The mere transfer of this software does not imply any licenses |
IanBenzMaxim | 75:8b627804927c | 27 | * of trade secrets, proprietary technology, copyrights, patents, |
IanBenzMaxim | 75:8b627804927c | 28 | * trademarks, maskwork rights, or any other form of intellectual |
IanBenzMaxim | 75:8b627804927c | 29 | * property whatsoever. Maxim Integrated Products, Inc. retains all |
IanBenzMaxim | 75:8b627804927c | 30 | * ownership rights. |
IanBenzMaxim | 75:8b627804927c | 31 | **********************************************************************/ |
IanBenzMaxim | 75:8b627804927c | 32 | |
IanBenzMaxim | 73:2cecc1372acc | 33 | #ifndef OneWire_Masters_DS2465 |
IanBenzMaxim | 73:2cecc1372acc | 34 | #define OneWire_Masters_DS2465 |
IanBenzMaxim | 21:00c94aeb533e | 35 | |
IanBenzMaxim | 73:2cecc1372acc | 36 | #include "Masters/OneWireMaster.h" |
IanBenzMaxim | 73:2cecc1372acc | 37 | #include "Authenticators/ISha256MacCoproc.h" |
IanBenzMaxim | 21:00c94aeb533e | 38 | |
IanBenzMaxim | 47:307dc45952db | 39 | namespace mbed { class I2C; } |
IanBenzMaxim | 27:d5aaefa252f1 | 40 | |
IanBenzMaxim | 73:2cecc1372acc | 41 | namespace OneWire |
IanBenzMaxim | 21:00c94aeb533e | 42 | { |
IanBenzMaxim | 76:84e6c4994e29 | 43 | /// Interface to the DS2465 1-Wire master and SHA-256 coprocessor. |
IanBenzMaxim | 76:84e6c4994e29 | 44 | class DS2465 : public OneWireMaster, public ISha256MacCoproc |
IanBenzMaxim | 73:2cecc1372acc | 45 | { |
IanBenzMaxim | 76:84e6c4994e29 | 46 | public: |
IanBenzMaxim | 76:84e6c4994e29 | 47 | /// Delay required after writing an EEPROM segment. |
IanBenzMaxim | 76:84e6c4994e29 | 48 | static const unsigned int eepromSegmentWriteDelayMs = 10; |
IanBenzMaxim | 76:84e6c4994e29 | 49 | /// Delay required after writing an EEPROM page such as the secret memory. |
IanBenzMaxim | 76:84e6c4994e29 | 50 | static const unsigned int eepromPageWriteDelayMs = 8 * eepromSegmentWriteDelayMs; |
IanBenzMaxim | 76:84e6c4994e29 | 51 | /// Delay required for a SHA computation to complete. |
IanBenzMaxim | 76:84e6c4994e29 | 52 | static const unsigned int shaComputationDelayMs = 2; |
IanBenzMaxim | 76:84e6c4994e29 | 53 | |
IanBenzMaxim | 76:84e6c4994e29 | 54 | /// Page region to use for swapping. |
IanBenzMaxim | 76:84e6c4994e29 | 55 | enum PageRegion |
IanBenzMaxim | 76:84e6c4994e29 | 56 | { |
IanBenzMaxim | 76:84e6c4994e29 | 57 | REGION_FULL_PAGE = 0x03, |
IanBenzMaxim | 76:84e6c4994e29 | 58 | REGION_FIRST_HALF = 0x01, |
IanBenzMaxim | 76:84e6c4994e29 | 59 | REGION_SECOND_HALF = 0x02 |
IanBenzMaxim | 76:84e6c4994e29 | 60 | }; |
IanBenzMaxim | 76:84e6c4994e29 | 61 | |
IanBenzMaxim | 76:84e6c4994e29 | 62 | /// Starting memory addresses. |
IanBenzMaxim | 76:84e6c4994e29 | 63 | enum MemoryAddr |
IanBenzMaxim | 76:84e6c4994e29 | 64 | { |
IanBenzMaxim | 76:84e6c4994e29 | 65 | ADDR_SPAD = 0x00, |
IanBenzMaxim | 76:84e6c4994e29 | 66 | ADDR_CMD_REG = 0x60, |
IanBenzMaxim | 76:84e6c4994e29 | 67 | ADDR_STATUS_REG = 0x61, |
IanBenzMaxim | 76:84e6c4994e29 | 68 | ADDR_DATA_REG = 0x62, |
IanBenzMaxim | 76:84e6c4994e29 | 69 | ADDR_MAC_READ = 0x63, |
IanBenzMaxim | 76:84e6c4994e29 | 70 | ADDR_SHA_SELECT_REG = 0x66, |
IanBenzMaxim | 76:84e6c4994e29 | 71 | ADDR_WCFG_REG = 0x67, |
IanBenzMaxim | 76:84e6c4994e29 | 72 | ADDR_TRSTL_REG = 0x68, |
IanBenzMaxim | 76:84e6c4994e29 | 73 | ADDR_TMSP_REG = 0x69, |
IanBenzMaxim | 76:84e6c4994e29 | 74 | ADDR_TW0L_REG = 0x6A, |
IanBenzMaxim | 76:84e6c4994e29 | 75 | ADDR_TREC0_REG = 0x6B, |
IanBenzMaxim | 76:84e6c4994e29 | 76 | ADDR_RWPU_REG = 0x6C, |
IanBenzMaxim | 76:84e6c4994e29 | 77 | ADDR_TW1L_REG = 0x6D, |
IanBenzMaxim | 76:84e6c4994e29 | 78 | ADDR_USER_MEM_PAGE_0 = 0x80, |
IanBenzMaxim | 76:84e6c4994e29 | 79 | ADDR_USER_MEM_PAGE_1 = 0xA0 |
IanBenzMaxim | 76:84e6c4994e29 | 80 | }; |
IanBenzMaxim | 76:84e6c4994e29 | 81 | |
IanBenzMaxim | 76:84e6c4994e29 | 82 | /// Represents a DS2465 configuration. |
IanBenzMaxim | 76:84e6c4994e29 | 83 | class Config |
IanBenzMaxim | 74:23be10c32fa3 | 84 | { |
IanBenzMaxim | 74:23be10c32fa3 | 85 | public: |
IanBenzMaxim | 76:84e6c4994e29 | 86 | /// @{ |
IanBenzMaxim | 76:84e6c4994e29 | 87 | /// 1-Wire Speed |
IanBenzMaxim | 76:84e6c4994e29 | 88 | bool get1WS() const { return m_1WS; } |
IanBenzMaxim | 76:84e6c4994e29 | 89 | void set1WS(bool new1WS) { m_1WS = new1WS; } |
IanBenzMaxim | 76:84e6c4994e29 | 90 | /// @} |
IanBenzMaxim | 21:00c94aeb533e | 91 | |
IanBenzMaxim | 76:84e6c4994e29 | 92 | /// @{ |
IanBenzMaxim | 76:84e6c4994e29 | 93 | /// Strong Pullup |
IanBenzMaxim | 76:84e6c4994e29 | 94 | bool getSPU() const { return m_SPU; } |
IanBenzMaxim | 76:84e6c4994e29 | 95 | void setSPU(bool newSPU) { m_SPU = newSPU; } |
IanBenzMaxim | 76:84e6c4994e29 | 96 | /// @} |
IanBenzMaxim | 74:23be10c32fa3 | 97 | |
IanBenzMaxim | 76:84e6c4994e29 | 98 | /// @{ |
IanBenzMaxim | 76:84e6c4994e29 | 99 | /// 1-Wire Power Down |
IanBenzMaxim | 76:84e6c4994e29 | 100 | bool getPDN() const { return m_PDN; } |
IanBenzMaxim | 76:84e6c4994e29 | 101 | void setPDN(bool newPDN) { m_PDN = newPDN; } |
IanBenzMaxim | 76:84e6c4994e29 | 102 | /// @} |
IanBenzMaxim | 74:23be10c32fa3 | 103 | |
IanBenzMaxim | 76:84e6c4994e29 | 104 | /// @{ |
IanBenzMaxim | 76:84e6c4994e29 | 105 | /// Active Pullup |
IanBenzMaxim | 76:84e6c4994e29 | 106 | bool getAPU() const { return m_APU; } |
IanBenzMaxim | 76:84e6c4994e29 | 107 | void setAPU(bool newAPU) { m_APU = newAPU; } |
IanBenzMaxim | 76:84e6c4994e29 | 108 | /// @} |
IanBenzMaxim | 21:00c94aeb533e | 109 | |
IanBenzMaxim | 76:84e6c4994e29 | 110 | /// Byte representation that is read from the DS2465. |
IanBenzMaxim | 76:84e6c4994e29 | 111 | uint8_t readByte() const; |
IanBenzMaxim | 76:84e6c4994e29 | 112 | /// Byte respresentation that is written to the DS2465. |
IanBenzMaxim | 76:84e6c4994e29 | 113 | uint8_t writeByte() const; |
IanBenzMaxim | 74:23be10c32fa3 | 114 | |
IanBenzMaxim | 76:84e6c4994e29 | 115 | /// Reset to the power-on default config. |
IanBenzMaxim | 76:84e6c4994e29 | 116 | void reset(); |
IanBenzMaxim | 76:84e6c4994e29 | 117 | Config() { reset(); } |
IanBenzMaxim | 74:23be10c32fa3 | 118 | |
IanBenzMaxim | 74:23be10c32fa3 | 119 | private: |
IanBenzMaxim | 76:84e6c4994e29 | 120 | bool m_1WS, m_SPU, m_PDN, m_APU; |
IanBenzMaxim | 76:84e6c4994e29 | 121 | }; |
IanBenzMaxim | 76:84e6c4994e29 | 122 | |
IanBenzMaxim | 76:84e6c4994e29 | 123 | /// @param I2C_interface Configured I2C communication interface for DS2465. |
IanBenzMaxim | 76:84e6c4994e29 | 124 | /// @param I2C_address I2C bus address of the DS2465 in mbed format. |
IanBenzMaxim | 76:84e6c4994e29 | 125 | DS2465(mbed::I2C & I2C_interface, uint8_t I2C_address); |
IanBenzMaxim | 76:84e6c4994e29 | 126 | |
IanBenzMaxim | 76:84e6c4994e29 | 127 | // Const member functions should not change the settings of the DS2465 or affect the state of the 1-Wire bus. |
IanBenzMaxim | 76:84e6c4994e29 | 128 | // Read pointer, scratchpad, MAC output register, and command register on the DS2465 are considered mutable. |
IanBenzMaxim | 76:84e6c4994e29 | 129 | |
IanBenzMaxim | 76:84e6c4994e29 | 130 | /// Performs a soft reset on the DS2465. |
IanBenzMaxim | 76:84e6c4994e29 | 131 | /// @note This is note a 1-Wire Reset. |
IanBenzMaxim | 76:84e6c4994e29 | 132 | OneWireMaster::CmdResult reset(); |
IanBenzMaxim | 76:84e6c4994e29 | 133 | |
IanBenzMaxim | 76:84e6c4994e29 | 134 | /// Write a new configuration to the DS2465. |
IanBenzMaxim | 76:84e6c4994e29 | 135 | /// @param[in] config New configuration to write. |
IanBenzMaxim | 76:84e6c4994e29 | 136 | /// @param verify Verify that the configuration was written successfully. |
IanBenzMaxim | 76:84e6c4994e29 | 137 | OneWireMaster::CmdResult writeConfig(const Config & config, bool verify); |
IanBenzMaxim | 76:84e6c4994e29 | 138 | |
IanBenzMaxim | 76:84e6c4994e29 | 139 | /// Read the current DS2465 configuration. |
IanBenzMaxim | 76:84e6c4994e29 | 140 | /// @returns The cached current configuration. |
IanBenzMaxim | 76:84e6c4994e29 | 141 | Config currentConfig() const { return m_curConfig; } |
IanBenzMaxim | 76:84e6c4994e29 | 142 | |
IanBenzMaxim | 76:84e6c4994e29 | 143 | // DS2465 Memory Commands |
IanBenzMaxim | 76:84e6c4994e29 | 144 | |
IanBenzMaxim | 76:84e6c4994e29 | 145 | /// Read memory from the DS2465. |
IanBenzMaxim | 76:84e6c4994e29 | 146 | /// @param addr Address to begin reading from. |
IanBenzMaxim | 76:84e6c4994e29 | 147 | /// @param[out] buf Buffer to hold read data. |
IanBenzMaxim | 76:84e6c4994e29 | 148 | /// @param bufLen Length of buffer, buf, and number of bytes to read. |
IanBenzMaxim | 76:84e6c4994e29 | 149 | /// @param skipSetPointer Assume that the read pointer is already set to the correct address. |
IanBenzMaxim | 76:84e6c4994e29 | 150 | OneWireMaster::CmdResult readMemory(uint8_t addr, uint8_t * buf, size_t bufLen, bool skipSetPointer = false) const; |
IanBenzMaxim | 74:23be10c32fa3 | 151 | |
IanBenzMaxim | 76:84e6c4994e29 | 152 | /// Write to SRAM memory on the DS2465. |
IanBenzMaxim | 76:84e6c4994e29 | 153 | /// @param addr Address to begin writing to. |
IanBenzMaxim | 76:84e6c4994e29 | 154 | /// @param[in] buf Buffer containing the data to write. |
IanBenzMaxim | 76:84e6c4994e29 | 155 | /// @param bufLen Length of buffer, buf, and number of bytes to write. |
IanBenzMaxim | 76:84e6c4994e29 | 156 | OneWireMaster::CmdResult writeMemory(uint8_t addr, const uint8_t * buf, size_t bufLen) { return cWriteMemory(addr, buf, bufLen); } |
IanBenzMaxim | 76:84e6c4994e29 | 157 | |
IanBenzMaxim | 76:84e6c4994e29 | 158 | /// Write data to the scratchpad area of the DS2465. |
IanBenzMaxim | 76:84e6c4994e29 | 159 | /// @param[in] buf Buffer containing the data to write. |
IanBenzMaxim | 76:84e6c4994e29 | 160 | /// @param bufLen Length of buffer, buf, and the number of bytes to write. |
IanBenzMaxim | 76:84e6c4994e29 | 161 | OneWireMaster::CmdResult writeScratchpad(const uint8_t * buf, size_t bufLen) const { return cWriteMemory(ADDR_SPAD, buf, bufLen); } |
IanBenzMaxim | 76:84e6c4994e29 | 162 | |
IanBenzMaxim | 76:84e6c4994e29 | 163 | /// Copy the scratchpad contents to an EEPROM memory page. |
IanBenzMaxim | 76:84e6c4994e29 | 164 | /// @param pageNum Page number to copy to. |
IanBenzMaxim | 76:84e6c4994e29 | 165 | OneWireMaster::CmdResult copyScratchpadToPage(unsigned int pageNum) { return copyScratchpad(false, pageNum, false, 0); } |
IanBenzMaxim | 74:23be10c32fa3 | 166 | |
IanBenzMaxim | 76:84e6c4994e29 | 167 | /// Copy the scratchpad contents to an EEPROM memory segment. |
IanBenzMaxim | 76:84e6c4994e29 | 168 | /// @param pageNum Page number to copy to. |
IanBenzMaxim | 76:84e6c4994e29 | 169 | /// @param segmentNum Segment number to copy to. |
IanBenzMaxim | 76:84e6c4994e29 | 170 | OneWireMaster::CmdResult copyScratchpadToSegment(unsigned int pageNum, unsigned int segmentNum) { return copyScratchpad(false, pageNum, true, segmentNum); } |
IanBenzMaxim | 76:84e6c4994e29 | 171 | |
IanBenzMaxim | 76:84e6c4994e29 | 172 | /// Copy the scratchpad contents to the secret EEPROM memory page. |
IanBenzMaxim | 76:84e6c4994e29 | 173 | OneWireMaster::CmdResult copyScratchpadToSecret() { return copyScratchpad(true, 0, false, 0); } |
IanBenzMaxim | 76:84e6c4994e29 | 174 | |
IanBenzMaxim | 76:84e6c4994e29 | 175 | // 1-Wire Master Commands |
IanBenzMaxim | 76:84e6c4994e29 | 176 | virtual OneWireMaster::CmdResult OWInitMaster(); |
IanBenzMaxim | 76:84e6c4994e29 | 177 | virtual OneWireMaster::CmdResult OWReset(); |
IanBenzMaxim | 76:84e6c4994e29 | 178 | virtual OneWireMaster::CmdResult OWTouchBitSetLevel(uint8_t & sendRecvBit, OWLevel afterLevel); |
IanBenzMaxim | 76:84e6c4994e29 | 179 | virtual OneWireMaster::CmdResult OWReadByteSetLevel(uint8_t & recvByte, OWLevel afterLevel); |
IanBenzMaxim | 76:84e6c4994e29 | 180 | virtual OneWireMaster::CmdResult OWWriteByteSetLevel(uint8_t sendByte, OWLevel afterLevel); |
IanBenzMaxim | 76:84e6c4994e29 | 181 | virtual OneWireMaster::CmdResult OWReadBlock(uint8_t *recvBuf, uint8_t recvLen); |
IanBenzMaxim | 76:84e6c4994e29 | 182 | virtual OneWireMaster::CmdResult OWWriteBlock(const uint8_t *sendBuf, uint8_t sendLen); |
IanBenzMaxim | 76:84e6c4994e29 | 183 | virtual OneWireMaster::CmdResult OWSetSpeed(OWSpeed newSpeed); |
IanBenzMaxim | 76:84e6c4994e29 | 184 | /// @note The DS2465 only supports enabling strong pullup following a 1-Wire read or write operation. |
IanBenzMaxim | 76:84e6c4994e29 | 185 | virtual OneWireMaster::CmdResult OWSetLevel(OWLevel newLevel); |
IanBenzMaxim | 76:84e6c4994e29 | 186 | virtual OneWireMaster::CmdResult OWTriplet(SearchDirection & searchDirection, uint8_t & sbr, uint8_t & tsb); |
IanBenzMaxim | 74:23be10c32fa3 | 187 | |
IanBenzMaxim | 76:84e6c4994e29 | 188 | /// Write the last computed MAC to the 1-Wire bus |
IanBenzMaxim | 76:84e6c4994e29 | 189 | OneWireMaster::CmdResult OWWriteBlockMac(); |
IanBenzMaxim | 76:84e6c4994e29 | 190 | |
IanBenzMaxim | 76:84e6c4994e29 | 191 | // DS2465 Coprocessor Commands |
IanBenzMaxim | 76:84e6c4994e29 | 192 | |
IanBenzMaxim | 76:84e6c4994e29 | 193 | /// Compute Next Master Secret with scratchpad data. |
IanBenzMaxim | 76:84e6c4994e29 | 194 | OneWireMaster::CmdResult computeNextMasterSecret() { return computeNextMasterSecret(false, 0, REGION_FULL_PAGE); } |
IanBenzMaxim | 76:84e6c4994e29 | 195 | |
IanBenzMaxim | 76:84e6c4994e29 | 196 | /// Compute Next Master Secret with page swapping. |
IanBenzMaxim | 76:84e6c4994e29 | 197 | /// @param pageNum Page number to swap in. |
IanBenzMaxim | 76:84e6c4994e29 | 198 | /// @param region Region of the page to swap in. |
IanBenzMaxim | 76:84e6c4994e29 | 199 | OneWireMaster::CmdResult computeNextMasterSecretSwap(unsigned int pageNum, PageRegion region) { return computeNextMasterSecret(true, pageNum, region); } |
IanBenzMaxim | 76:84e6c4994e29 | 200 | |
IanBenzMaxim | 76:84e6c4994e29 | 201 | /// Compute Write MAC with scratchpad data. |
IanBenzMaxim | 76:84e6c4994e29 | 202 | /// @param regwrite True if writing to a register or false if regular memory. |
IanBenzMaxim | 76:84e6c4994e29 | 203 | OneWireMaster::CmdResult computeWriteMac(bool regwrite) const { return computeWriteMac(regwrite, false, 0, 0); } |
IanBenzMaxim | 76:84e6c4994e29 | 204 | |
IanBenzMaxim | 76:84e6c4994e29 | 205 | /// Compute Write MAC with page swapping. |
IanBenzMaxim | 76:84e6c4994e29 | 206 | /// @param regwrite True if writing to a register or false if regular memory. |
IanBenzMaxim | 76:84e6c4994e29 | 207 | /// @param pageNum Page number to swap in. |
IanBenzMaxim | 76:84e6c4994e29 | 208 | /// @param segmentNum Segment number to swap in. |
IanBenzMaxim | 76:84e6c4994e29 | 209 | OneWireMaster::CmdResult computeWriteMacSwap(bool regwrite, unsigned int pageNum, unsigned int segmentNum) const { return computeWriteMac(regwrite, true, pageNum, segmentNum); } |
IanBenzMaxim | 76:84e6c4994e29 | 210 | |
IanBenzMaxim | 76:84e6c4994e29 | 211 | /// Compute Slave Secret (S-Secret) with scratchpad data. |
IanBenzMaxim | 76:84e6c4994e29 | 212 | OneWireMaster::CmdResult computeSlaveSecret() { return computeSlaveSecret(false, 0, REGION_FULL_PAGE); } |
IanBenzMaxim | 76:84e6c4994e29 | 213 | |
IanBenzMaxim | 76:84e6c4994e29 | 214 | /// Compute Slave Secret (S-Secret) with page swapping. |
IanBenzMaxim | 76:84e6c4994e29 | 215 | /// @param pageNum Page number to swap in. |
IanBenzMaxim | 76:84e6c4994e29 | 216 | /// @param region Region of the page to swap in. |
IanBenzMaxim | 76:84e6c4994e29 | 217 | OneWireMaster::CmdResult computeSlaveSecretSwap(unsigned int pageNum, PageRegion region) { return computeSlaveSecret(true, pageNum, region); } |
IanBenzMaxim | 76:84e6c4994e29 | 218 | |
IanBenzMaxim | 76:84e6c4994e29 | 219 | /// Compute Authentication MAC with scratchpad data. |
IanBenzMaxim | 76:84e6c4994e29 | 220 | OneWireMaster::CmdResult computeAuthMac() const { return computeAuthMac(false, 0, REGION_FULL_PAGE); } |
IanBenzMaxim | 74:23be10c32fa3 | 221 | |
IanBenzMaxim | 76:84e6c4994e29 | 222 | /// Compute Authentication MAC with page swapping. |
IanBenzMaxim | 76:84e6c4994e29 | 223 | /// @param pageNum Page number to swap in. |
IanBenzMaxim | 76:84e6c4994e29 | 224 | /// @param region Region of the page to swap in. |
IanBenzMaxim | 76:84e6c4994e29 | 225 | OneWireMaster::CmdResult computeAuthMacSwap(unsigned int pageNum, PageRegion region) const { return computeAuthMac(true, pageNum, region); } |
IanBenzMaxim | 76:84e6c4994e29 | 226 | |
IanBenzMaxim | 76:84e6c4994e29 | 227 | // ISha256MacCoproc Commands |
IanBenzMaxim | 76:84e6c4994e29 | 228 | virtual ISha256MacCoproc::CmdResult setMasterSecret(const Secret & masterSecret); |
IanBenzMaxim | 76:84e6c4994e29 | 229 | virtual ISha256MacCoproc::CmdResult computeSlaveSecret(const DevicePage & devicePage, const DeviceScratchpad & deviceScratchpad, const SlaveSecretData & slaveSecretData); |
IanBenzMaxim | 76:84e6c4994e29 | 230 | virtual ISha256MacCoproc::CmdResult computeWriteMac(const WriteMacData & writeMacData, Mac & mac) const; |
IanBenzMaxim | 76:84e6c4994e29 | 231 | virtual ISha256MacCoproc::CmdResult computeAuthMac(const DevicePage & devicePage, const DeviceScratchpad & challenge, const AuthMacData & authMacData, Mac & mac) const; |
IanBenzMaxim | 76:84e6c4994e29 | 232 | |
IanBenzMaxim | 76:84e6c4994e29 | 233 | private: |
IanBenzMaxim | 76:84e6c4994e29 | 234 | mbed::I2C & m_I2C_interface; |
IanBenzMaxim | 76:84e6c4994e29 | 235 | uint8_t m_I2C_address; |
IanBenzMaxim | 76:84e6c4994e29 | 236 | Config m_curConfig; |
IanBenzMaxim | 76:84e6c4994e29 | 237 | |
IanBenzMaxim | 76:84e6c4994e29 | 238 | /// Polls the DS2465 status waiting for the 1-Wire Busy bit (1WB) to be cleared. |
IanBenzMaxim | 76:84e6c4994e29 | 239 | /// @param[out] pStatus Optionally retrive the status byte when 1WB cleared. |
IanBenzMaxim | 76:84e6c4994e29 | 240 | /// @returns Success or TimeoutError if poll limit reached. |
IanBenzMaxim | 76:84e6c4994e29 | 241 | OneWireMaster::CmdResult pollBusy(uint8_t * pStatus = NULL); |
IanBenzMaxim | 76:84e6c4994e29 | 242 | |
IanBenzMaxim | 76:84e6c4994e29 | 243 | /// Ensure that the desired 1-Wire level is set in the configuration. |
IanBenzMaxim | 76:84e6c4994e29 | 244 | /// @param level Desired 1-Wire level. |
IanBenzMaxim | 76:84e6c4994e29 | 245 | OneWireMaster::CmdResult configureLevel(OWLevel level); |
IanBenzMaxim | 76:84e6c4994e29 | 246 | |
IanBenzMaxim | 76:84e6c4994e29 | 247 | /// Const version of writeMemory() for internal use. |
IanBenzMaxim | 76:84e6c4994e29 | 248 | OneWireMaster::CmdResult cWriteMemory(uint8_t addr, const uint8_t * buf, size_t bufLen) const; |
IanBenzMaxim | 76:84e6c4994e29 | 249 | |
IanBenzMaxim | 76:84e6c4994e29 | 250 | // Legacy implementations |
IanBenzMaxim | 76:84e6c4994e29 | 251 | OneWireMaster::CmdResult OWWriteBlock(bool tx_mac, const uint8_t *tran_buf, uint8_t tran_len); |
IanBenzMaxim | 76:84e6c4994e29 | 252 | OneWireMaster::CmdResult copyScratchpad(bool destSecret, unsigned int pageNum, bool notFull, unsigned int segmentNum); |
IanBenzMaxim | 76:84e6c4994e29 | 253 | OneWireMaster::CmdResult computeNextMasterSecret(bool swap, unsigned int pageNum, PageRegion region); |
IanBenzMaxim | 76:84e6c4994e29 | 254 | OneWireMaster::CmdResult computeWriteMac(bool regwrite, bool swap, unsigned int pageNum, unsigned int segmentNum) const; |
IanBenzMaxim | 76:84e6c4994e29 | 255 | OneWireMaster::CmdResult computeSlaveSecret(bool swap, unsigned int pageNum, PageRegion region); |
IanBenzMaxim | 76:84e6c4994e29 | 256 | OneWireMaster::CmdResult computeAuthMac(bool swap, unsigned int pageNum, PageRegion region) const; |
IanBenzMaxim | 76:84e6c4994e29 | 257 | }; |
IanBenzMaxim | 73:2cecc1372acc | 258 | } |
IanBenzMaxim | 21:00c94aeb533e | 259 | |
IanBenzMaxim | 21:00c94aeb533e | 260 | #endif |