A collection of Analog Devices drivers for the mbed platform

For additional information check out the mbed page of the Analog Devices wiki: https://wiki.analog.com/resources/tools-software/mbed-drivers-all

Committer:
Adrian Suciu
Date:
Wed May 18 16:57:57 2016 +0300
Revision:
24:dae7123d432a
Improved compatibility with Linux systems

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Adrian Suciu 24:dae7123d432a 1 /**
Adrian Suciu 24:dae7123d432a 2 * @file ADXL362.cpp
Adrian Suciu 24:dae7123d432a 3 * @brief Source file for ADXL362
Adrian Suciu 24:dae7123d432a 4 * @author Analog Devices Inc.
Adrian Suciu 24:dae7123d432a 5 *
Adrian Suciu 24:dae7123d432a 6 * For support please go to:
Adrian Suciu 24:dae7123d432a 7 * Github: https://github.com/analogdevicesinc/mbed-adi
Adrian Suciu 24:dae7123d432a 8 * Support: https://ez.analog.com/community/linux-device-drivers/microcontroller-no-os-drivers
Adrian Suciu 24:dae7123d432a 9 * Product: http://www.analog.com/adxl362
Adrian Suciu 24:dae7123d432a 10 * More: https://wiki.analog.com/resources/tools-software/mbed-drivers-all
Adrian Suciu 24:dae7123d432a 11
Adrian Suciu 24:dae7123d432a 12 ********************************************************************************
Adrian Suciu 24:dae7123d432a 13 * Copyright 2016(c) Analog Devices, Inc.
Adrian Suciu 24:dae7123d432a 14 *
Adrian Suciu 24:dae7123d432a 15 * All rights reserved.
Adrian Suciu 24:dae7123d432a 16 *
Adrian Suciu 24:dae7123d432a 17 * Redistribution and use in source and binary forms, with or without
Adrian Suciu 24:dae7123d432a 18 * modification, are permitted provided that the following conditions are met:
Adrian Suciu 24:dae7123d432a 19 * - Redistributions of source code must retain the above copyright
Adrian Suciu 24:dae7123d432a 20 * notice, this list of conditions and the following disclaimer.
Adrian Suciu 24:dae7123d432a 21 * - Redistributions in binary form must reproduce the above copyright
Adrian Suciu 24:dae7123d432a 22 * notice, this list of conditions and the following disclaimer in
Adrian Suciu 24:dae7123d432a 23 * the documentation and/or other materials provided with the
Adrian Suciu 24:dae7123d432a 24 * distribution.
Adrian Suciu 24:dae7123d432a 25 * - Neither the name of Analog Devices, Inc. nor the names of its
Adrian Suciu 24:dae7123d432a 26 * contributors may be used to endorse or promote products derived
Adrian Suciu 24:dae7123d432a 27 * from this software without specific prior written permission.
Adrian Suciu 24:dae7123d432a 28 * - The use of this software may or may not infringe the patent rights
Adrian Suciu 24:dae7123d432a 29 * of one or more patent holders. This license does not release you
Adrian Suciu 24:dae7123d432a 30 * from the requirement that you obtain separate licenses from these
Adrian Suciu 24:dae7123d432a 31 * patent holders to use this software.
Adrian Suciu 24:dae7123d432a 32 * - Use of the software either in source or binary form, must be run
Adrian Suciu 24:dae7123d432a 33 * on or directly connected to an Analog Devices Inc. component.
Adrian Suciu 24:dae7123d432a 34 *
Adrian Suciu 24:dae7123d432a 35 * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
Adrian Suciu 24:dae7123d432a 36 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
Adrian Suciu 24:dae7123d432a 37 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
Adrian Suciu 24:dae7123d432a 38 * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
Adrian Suciu 24:dae7123d432a 39 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
Adrian Suciu 24:dae7123d432a 40 * LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
Adrian Suciu 24:dae7123d432a 41 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Adrian Suciu 24:dae7123d432a 42 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Adrian Suciu 24:dae7123d432a 43 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Adrian Suciu 24:dae7123d432a 44 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Adrian Suciu 24:dae7123d432a 45 *
Adrian Suciu 24:dae7123d432a 46 ********************************************************************************/
Adrian Suciu 24:dae7123d432a 47
Adrian Suciu 24:dae7123d432a 48 #include <stdint.h>
Adrian Suciu 24:dae7123d432a 49 #include "mbed.h"
Adrian Suciu 24:dae7123d432a 50 #include "ADXL362.h"
Adrian Suciu 24:dae7123d432a 51
Adrian Suciu 24:dae7123d432a 52 /**
Adrian Suciu 24:dae7123d432a 53 * ADXL362 constructor. Sets CS and SPI bus
Adrian Suciu 24:dae7123d432a 54 * @param CS - CS pin of the ADXL362
Adrian Suciu 24:dae7123d432a 55 * @param MOSI - MOSI pin of the ADXL362
Adrian Suciu 24:dae7123d432a 56 * @param MISO - MISO pin of the ADXL362
Adrian Suciu 24:dae7123d432a 57 * @param SCK- SCK pin of the ADXL362
Adrian Suciu 24:dae7123d432a 58 */
Adrian Suciu 24:dae7123d432a 59 ADXL362::ADXL362(PinName CS, PinName MOSI, PinName MISO, PinName SCK) :
Adrian Suciu 24:dae7123d432a 60 adxl362(MOSI, MISO, SCK), cs(CS), _int1(NULL), _int2(NULL), _int1_poll(NC), _int2_poll(
Adrian Suciu 24:dae7123d432a 61 NC)
Adrian Suciu 24:dae7123d432a 62 {
Adrian Suciu 24:dae7123d432a 63 cs = true; // cs is active low
Adrian Suciu 24:dae7123d432a 64 adxl362.format(8, _SPI_MODE);
Adrian Suciu 24:dae7123d432a 65 _temp_stored_in_fifo = false;
Adrian Suciu 24:dae7123d432a 66 _int1_act_low = true;
Adrian Suciu 24:dae7123d432a 67 _int2_act_low = true;
Adrian Suciu 24:dae7123d432a 68 }
Adrian Suciu 24:dae7123d432a 69
Adrian Suciu 24:dae7123d432a 70 /**
Adrian Suciu 24:dae7123d432a 71 * Sets ADXL362 SPI bus frequency
Adrian Suciu 24:dae7123d432a 72 * @param hz - frequency in hz
Adrian Suciu 24:dae7123d432a 73 */
Adrian Suciu 24:dae7123d432a 74 void ADXL362::frequency(int hz)
Adrian Suciu 24:dae7123d432a 75 {
Adrian Suciu 24:dae7123d432a 76 adxl362.frequency(hz);
Adrian Suciu 24:dae7123d432a 77 }
Adrian Suciu 24:dae7123d432a 78
Adrian Suciu 24:dae7123d432a 79 /**
Adrian Suciu 24:dae7123d432a 80 * Resets the ADXL362
Adrian Suciu 24:dae7123d432a 81 * A latency of approximately 0.5 ms is required after soft reset.
Adrian Suciu 24:dae7123d432a 82 */
Adrian Suciu 24:dae7123d432a 83 void ADXL362::reset()
Adrian Suciu 24:dae7123d432a 84 {
Adrian Suciu 24:dae7123d432a 85 adxl362.format(8, _SPI_MODE);
Adrian Suciu 24:dae7123d432a 86 cs = false;
Adrian Suciu 24:dae7123d432a 87 // Writing Code 0x52 (representing the letter, R, in ASCII or unicode) to this register immediately resets the ADXL362.
Adrian Suciu 24:dae7123d432a 88 write_reg(SOFT_RESET, 0x52);
Adrian Suciu 24:dae7123d432a 89 cs = true;
Adrian Suciu 24:dae7123d432a 90
Adrian Suciu 24:dae7123d432a 91 }
Adrian Suciu 24:dae7123d432a 92
Adrian Suciu 24:dae7123d432a 93 /**
Adrian Suciu 24:dae7123d432a 94 * Writes the reg register with data
Adrian Suciu 24:dae7123d432a 95 * @param reg - ADXL362_register_t register to be written
Adrian Suciu 24:dae7123d432a 96 * @param data - data to be written
Adrian Suciu 24:dae7123d432a 97 */
Adrian Suciu 24:dae7123d432a 98 void ADXL362::write_reg(ADXL362_register_t reg, uint8_t data)
Adrian Suciu 24:dae7123d432a 99 {
Adrian Suciu 24:dae7123d432a 100 adxl362.format(8, _SPI_MODE);
Adrian Suciu 24:dae7123d432a 101 cs = false;
Adrian Suciu 24:dae7123d432a 102 adxl362.write(_WRITE_REG_CMD);
Adrian Suciu 24:dae7123d432a 103 adxl362.write(static_cast<uint8_t>(reg));
Adrian Suciu 24:dae7123d432a 104 adxl362.write(static_cast<uint8_t>(data));
Adrian Suciu 24:dae7123d432a 105 cs = true;
Adrian Suciu 24:dae7123d432a 106 }
Adrian Suciu 24:dae7123d432a 107
Adrian Suciu 24:dae7123d432a 108 /**
Adrian Suciu 24:dae7123d432a 109 * Reads the reg register
Adrian Suciu 24:dae7123d432a 110 * @param reg - ADXL362_register_t register to be read
Adrian Suciu 24:dae7123d432a 111 * @return - data read from the register
Adrian Suciu 24:dae7123d432a 112 */
Adrian Suciu 24:dae7123d432a 113 uint8_t ADXL362::read_reg(ADXL362_register_t reg)
Adrian Suciu 24:dae7123d432a 114 {
Adrian Suciu 24:dae7123d432a 115 uint8_t ret_val;
Adrian Suciu 24:dae7123d432a 116 adxl362.format(8, _SPI_MODE);
Adrian Suciu 24:dae7123d432a 117 cs = false;
Adrian Suciu 24:dae7123d432a 118 adxl362.write(_READ_REG_CMD);
Adrian Suciu 24:dae7123d432a 119 adxl362.write(static_cast<uint8_t>(reg));
Adrian Suciu 24:dae7123d432a 120 ret_val = adxl362.write(_DUMMY_BYTE);
Adrian Suciu 24:dae7123d432a 121 cs = true;
Adrian Suciu 24:dae7123d432a 122 return ret_val;
Adrian Suciu 24:dae7123d432a 123 }
Adrian Suciu 24:dae7123d432a 124
Adrian Suciu 24:dae7123d432a 125 /**
Adrian Suciu 24:dae7123d432a 126 * Writes 16 bit registers to the ADXL362. Performs conversion from Intel to Motorola byte order
Adrian Suciu 24:dae7123d432a 127 * @param reg - ADXL362_register_t register to be written
Adrian Suciu 24:dae7123d432a 128 * @param data - data to be written
Adrian Suciu 24:dae7123d432a 129 */
Adrian Suciu 24:dae7123d432a 130 void ADXL362::write_reg_u16(ADXL362_register_t reg, uint16_t data)
Adrian Suciu 24:dae7123d432a 131 {
Adrian Suciu 24:dae7123d432a 132 adxl362.format(8, _SPI_MODE);
Adrian Suciu 24:dae7123d432a 133
Adrian Suciu 24:dae7123d432a 134 cs = false;
Adrian Suciu 24:dae7123d432a 135 adxl362.write(_WRITE_REG_CMD);
Adrian Suciu 24:dae7123d432a 136 adxl362.write(static_cast<uint8_t>(reg));
Adrian Suciu 24:dae7123d432a 137 adxl362.write(static_cast<uint8_t>(data & 0xff));
Adrian Suciu 24:dae7123d432a 138 adxl362.write(static_cast<uint8_t>((data & 0xff00) >> 8));
Adrian Suciu 24:dae7123d432a 139
Adrian Suciu 24:dae7123d432a 140 cs = true;
Adrian Suciu 24:dae7123d432a 141 }
Adrian Suciu 24:dae7123d432a 142
Adrian Suciu 24:dae7123d432a 143 /**
Adrian Suciu 24:dae7123d432a 144 * Reads 16 bit registers from the ADXL362. Performs conversion from Motorola to Intel Byte order
Adrian Suciu 24:dae7123d432a 145 * @param reg - ADXL362_register_t register to be read
Adrian Suciu 24:dae7123d432a 146 * @return - data read from the ADXL362
Adrian Suciu 24:dae7123d432a 147 */
Adrian Suciu 24:dae7123d432a 148 uint16_t ADXL362::read_reg_u16(ADXL362_register_t reg)
Adrian Suciu 24:dae7123d432a 149 {
Adrian Suciu 24:dae7123d432a 150 uint16_t ret_val = 0;
Adrian Suciu 24:dae7123d432a 151 adxl362.format(8, _SPI_MODE);
Adrian Suciu 24:dae7123d432a 152
Adrian Suciu 24:dae7123d432a 153 cs = false;
Adrian Suciu 24:dae7123d432a 154 adxl362.write(_READ_REG_CMD);
Adrian Suciu 24:dae7123d432a 155 adxl362.write(static_cast<uint8_t>(reg));
Adrian Suciu 24:dae7123d432a 156 ret_val = adxl362.write(_DUMMY_BYTE);
Adrian Suciu 24:dae7123d432a 157 ret_val = ret_val | (adxl362.write(_DUMMY_BYTE) << 8);
Adrian Suciu 24:dae7123d432a 158 cs = true;
Adrian Suciu 24:dae7123d432a 159
Adrian Suciu 24:dae7123d432a 160 return ret_val;
Adrian Suciu 24:dae7123d432a 161 }
Adrian Suciu 24:dae7123d432a 162
Adrian Suciu 24:dae7123d432a 163 /**
Adrian Suciu 24:dae7123d432a 164 * Scans the X,Y,Z,T registers for data.
Adrian Suciu 24:dae7123d432a 165 * ADXL362 needs to be in measurement mode to read data
Adrian Suciu 24:dae7123d432a 166 * ADXL362 is set in measurement mode using ADXL362::set_mode(ADXL362::MEASUREMENT)
Adrian Suciu 24:dae7123d432a 167 * @return a 64 bit integer with the following format 0xXXYYZZTT
Adrian Suciu 24:dae7123d432a 168 */
Adrian Suciu 24:dae7123d432a 169 uint64_t ADXL362::scan()
Adrian Suciu 24:dae7123d432a 170 {
Adrian Suciu 24:dae7123d432a 171 uint64_t ret_val = 0;
Adrian Suciu 24:dae7123d432a 172 uint16_t x, y, z, t = 0;
Adrian Suciu 24:dae7123d432a 173
Adrian Suciu 24:dae7123d432a 174 adxl362.format(8, _SPI_MODE);
Adrian Suciu 24:dae7123d432a 175 cs = false;
Adrian Suciu 24:dae7123d432a 176 adxl362.write(_READ_REG_CMD);
Adrian Suciu 24:dae7123d432a 177 adxl362.write(static_cast<uint8_t>(XDATA_L));
Adrian Suciu 24:dae7123d432a 178
Adrian Suciu 24:dae7123d432a 179 x = adxl362.write(_DUMMY_BYTE);
Adrian Suciu 24:dae7123d432a 180 x = x | static_cast<uint16_t>(adxl362.write(_DUMMY_BYTE) << 8);
Adrian Suciu 24:dae7123d432a 181 y = adxl362.write(_DUMMY_BYTE);
Adrian Suciu 24:dae7123d432a 182 y = y | static_cast<uint16_t>(adxl362.write(_DUMMY_BYTE) << 8);
Adrian Suciu 24:dae7123d432a 183 z = adxl362.write(_DUMMY_BYTE);
Adrian Suciu 24:dae7123d432a 184 z = z | static_cast<uint16_t>(adxl362.write(_DUMMY_BYTE) << 8);
Adrian Suciu 24:dae7123d432a 185 t = adxl362.write(_DUMMY_BYTE);
Adrian Suciu 24:dae7123d432a 186 t = t | static_cast<uint16_t>(adxl362.write(_DUMMY_BYTE) << 8);
Adrian Suciu 24:dae7123d432a 187
Adrian Suciu 24:dae7123d432a 188 ret_val = static_cast<uint64_t>(x) << 48;
Adrian Suciu 24:dae7123d432a 189 ret_val |= static_cast<uint64_t>(y) << 32;
Adrian Suciu 24:dae7123d432a 190 ret_val |= static_cast<uint64_t>(z) << 16;
Adrian Suciu 24:dae7123d432a 191 ret_val |= static_cast<uint64_t>(t);
Adrian Suciu 24:dae7123d432a 192 cs = true;
Adrian Suciu 24:dae7123d432a 193 return ret_val;
Adrian Suciu 24:dae7123d432a 194 }
Adrian Suciu 24:dae7123d432a 195
Adrian Suciu 24:dae7123d432a 196 /**
Adrian Suciu 24:dae7123d432a 197 * Reads the X 8 bit register from the ADXL362
Adrian Suciu 24:dae7123d432a 198 * ADXL362 is set in measurement mode using ADXL362::set_mode(ADXL362::MEASUREMENT)
Adrian Suciu 24:dae7123d432a 199 * @return 8 bit X data
Adrian Suciu 24:dae7123d432a 200 */
Adrian Suciu 24:dae7123d432a 201 uint8_t ADXL362::scanx_u8()
Adrian Suciu 24:dae7123d432a 202 {
Adrian Suciu 24:dae7123d432a 203 return read_reg(XDATA);
Adrian Suciu 24:dae7123d432a 204 }
Adrian Suciu 24:dae7123d432a 205
Adrian Suciu 24:dae7123d432a 206 /**
Adrian Suciu 24:dae7123d432a 207 * Reads the X 16 bit register from the ADXL362
Adrian Suciu 24:dae7123d432a 208 * ADXL362 is set in measurement mode using ADXL362::set_mode(ADXL362::MEASUREMENT)
Adrian Suciu 24:dae7123d432a 209 * @return 16 bit X data
Adrian Suciu 24:dae7123d432a 210 */
Adrian Suciu 24:dae7123d432a 211 uint16_t ADXL362::scanx()
Adrian Suciu 24:dae7123d432a 212 {
Adrian Suciu 24:dae7123d432a 213 return read_reg_u16(XDATA_L);
Adrian Suciu 24:dae7123d432a 214 }
Adrian Suciu 24:dae7123d432a 215
Adrian Suciu 24:dae7123d432a 216 /**
Adrian Suciu 24:dae7123d432a 217 * Reads the Y 8 bit register from the ADXL362
Adrian Suciu 24:dae7123d432a 218 * ADXL362 is set in measurement mode using ADXL362::set_mode(ADXL362::MEASUREMENT)
Adrian Suciu 24:dae7123d432a 219 * @return 8 bit Y data
Adrian Suciu 24:dae7123d432a 220 */
Adrian Suciu 24:dae7123d432a 221 uint8_t ADXL362::scany_u8()
Adrian Suciu 24:dae7123d432a 222 {
Adrian Suciu 24:dae7123d432a 223 return read_reg(YDATA);
Adrian Suciu 24:dae7123d432a 224 }
Adrian Suciu 24:dae7123d432a 225
Adrian Suciu 24:dae7123d432a 226 /**
Adrian Suciu 24:dae7123d432a 227 * Reads the Y 16 bit register from the ADXL362
Adrian Suciu 24:dae7123d432a 228 * ADXL362 is set in measurement mode using ADXL362::set_mode(ADXL362::MEASUREMENT)
Adrian Suciu 24:dae7123d432a 229 * @return 16 bit Y data
Adrian Suciu 24:dae7123d432a 230 */
Adrian Suciu 24:dae7123d432a 231 uint16_t ADXL362::scany()
Adrian Suciu 24:dae7123d432a 232 {
Adrian Suciu 24:dae7123d432a 233 return read_reg_u16(YDATA_L);
Adrian Suciu 24:dae7123d432a 234 }
Adrian Suciu 24:dae7123d432a 235
Adrian Suciu 24:dae7123d432a 236 /**
Adrian Suciu 24:dae7123d432a 237 * Reads the Z 8 bit register from the ADXL362
Adrian Suciu 24:dae7123d432a 238 * ADXL362 is set in measurement mode using ADXL362::set_mode(ADXL362::MEASUREMENT)
Adrian Suciu 24:dae7123d432a 239 * @return 8 bit Z data
Adrian Suciu 24:dae7123d432a 240 */
Adrian Suciu 24:dae7123d432a 241 uint8_t ADXL362::scanz_u8()
Adrian Suciu 24:dae7123d432a 242 {
Adrian Suciu 24:dae7123d432a 243 return read_reg(ZDATA);
Adrian Suciu 24:dae7123d432a 244 }
Adrian Suciu 24:dae7123d432a 245
Adrian Suciu 24:dae7123d432a 246 /**
Adrian Suciu 24:dae7123d432a 247 * Reads the Z 16 bit register from the ADXL362
Adrian Suciu 24:dae7123d432a 248 * ADXL362 is set in measurement mode using ADXL362::set_mode(ADXL362::MEASUREMENT)
Adrian Suciu 24:dae7123d432a 249 * @return 16 bit Z data
Adrian Suciu 24:dae7123d432a 250 */
Adrian Suciu 24:dae7123d432a 251 uint16_t ADXL362::scanz()
Adrian Suciu 24:dae7123d432a 252 {
Adrian Suciu 24:dae7123d432a 253 return read_reg_u16(ZDATA_L);
Adrian Suciu 24:dae7123d432a 254 }
Adrian Suciu 24:dae7123d432a 255
Adrian Suciu 24:dae7123d432a 256 /**
Adrian Suciu 24:dae7123d432a 257 * Reads the T 16 bit register from the ADXL362
Adrian Suciu 24:dae7123d432a 258 * ADXL362 is set in measurement mode using ADXL362::set_mode(ADXL362::MEASUREMENT)
Adrian Suciu 24:dae7123d432a 259 * @return 16 bit T data
Adrian Suciu 24:dae7123d432a 260 */
Adrian Suciu 24:dae7123d432a 261 uint16_t ADXL362::scant()
Adrian Suciu 24:dae7123d432a 262 {
Adrian Suciu 24:dae7123d432a 263 return read_reg_u16(TEMP_L);
Adrian Suciu 24:dae7123d432a 264 }
Adrian Suciu 24:dae7123d432a 265
Adrian Suciu 24:dae7123d432a 266 /**
Adrian Suciu 24:dae7123d432a 267 * Sets the STANDBY/MEASUREMENT mode of the ADXL362
Adrian Suciu 24:dae7123d432a 268 * @param mode - ADXL362_modes_t STANDBY/MEASUREMENT mode
Adrian Suciu 24:dae7123d432a 269 */
Adrian Suciu 24:dae7123d432a 270 void ADXL362::set_mode(ADXL362_modes_t mode)
Adrian Suciu 24:dae7123d432a 271 {
Adrian Suciu 24:dae7123d432a 272 uint8_t reg_val;
Adrian Suciu 24:dae7123d432a 273 reg_val = read_reg(POWER_CTL);
Adrian Suciu 24:dae7123d432a 274 reg_val = reg_val | static_cast<uint8_t>(mode);
Adrian Suciu 24:dae7123d432a 275 write_reg(POWER_CTL, reg_val);
Adrian Suciu 24:dae7123d432a 276 }
Adrian Suciu 24:dae7123d432a 277
Adrian Suciu 24:dae7123d432a 278 /**
Adrian Suciu 24:dae7123d432a 279 * Sets the activity threshold registers
Adrian Suciu 24:dae7123d432a 280 * To enable activity/inactivity, the ACT_INACT_CTL reg must also be set
Adrian Suciu 24:dae7123d432a 281 * using the ADXL362::set_act_inact_ctl_reg(uint8_t data) method
Adrian Suciu 24:dae7123d432a 282 * @param threshold - activity threshold in natural format
Adrian Suciu 24:dae7123d432a 283 */
Adrian Suciu 24:dae7123d432a 284 void ADXL362::set_activity_threshold(uint16_t threshold)
Adrian Suciu 24:dae7123d432a 285 {
Adrian Suciu 24:dae7123d432a 286 write_reg_u16(THRESH_ACT_L, threshold);
Adrian Suciu 24:dae7123d432a 287 }
Adrian Suciu 24:dae7123d432a 288
Adrian Suciu 24:dae7123d432a 289 /**
Adrian Suciu 24:dae7123d432a 290 * Sets the activity time register
Adrian Suciu 24:dae7123d432a 291 * To enable activity/inactivity, the ACT_INACT_CTL reg must also be set
Adrian Suciu 24:dae7123d432a 292 * using the ADXL362::set_act_inact_ctl_reg(uint8_t data) method
Adrian Suciu 24:dae7123d432a 293 * @param time - activity time
Adrian Suciu 24:dae7123d432a 294 */
Adrian Suciu 24:dae7123d432a 295 void ADXL362::set_activity_time(uint8_t time)
Adrian Suciu 24:dae7123d432a 296 {
Adrian Suciu 24:dae7123d432a 297 write_reg(TIME_ACT, time);
Adrian Suciu 24:dae7123d432a 298 }
Adrian Suciu 24:dae7123d432a 299
Adrian Suciu 24:dae7123d432a 300 /**
Adrian Suciu 24:dae7123d432a 301 * Sets the inactivity threshold register
Adrian Suciu 24:dae7123d432a 302 * To enable activity/inactivity, the ACT_INACT_CTL reg must also be set
Adrian Suciu 24:dae7123d432a 303 * using the ADXL362::set_act_inact_ctl_reg(uint8_t data) method
Adrian Suciu 24:dae7123d432a 304 * @param threshold - inactivity threshold in natural format
Adrian Suciu 24:dae7123d432a 305 */
Adrian Suciu 24:dae7123d432a 306 void ADXL362::set_inactivity_threshold(uint16_t threshold)
Adrian Suciu 24:dae7123d432a 307 {
Adrian Suciu 24:dae7123d432a 308 write_reg_u16(THRESH_INACT_L, threshold);
Adrian Suciu 24:dae7123d432a 309 }
Adrian Suciu 24:dae7123d432a 310
Adrian Suciu 24:dae7123d432a 311 /**
Adrian Suciu 24:dae7123d432a 312 * Sets the inactivity time register
Adrian Suciu 24:dae7123d432a 313 * To enable activity/inactivity, the ACT_INACT_CTL reg must also be set
Adrian Suciu 24:dae7123d432a 314 * using the ADXL362::set_act_inact_ctl_reg(uint8_t data) method
Adrian Suciu 24:dae7123d432a 315 * @param time - inactivity time in natural format
Adrian Suciu 24:dae7123d432a 316 */
Adrian Suciu 24:dae7123d432a 317 void ADXL362::set_inactivity_time(uint16_t time)
Adrian Suciu 24:dae7123d432a 318 {
Adrian Suciu 24:dae7123d432a 319 write_reg_u16(TIME_INACT_L, time);
Adrian Suciu 24:dae7123d432a 320 }
Adrian Suciu 24:dae7123d432a 321
Adrian Suciu 24:dae7123d432a 322 /**
Adrian Suciu 24:dae7123d432a 323 * Sets the ACT_INACT_CTL register of the ADXL362
Adrian Suciu 24:dae7123d432a 324 * @param data - data to be written to the register
Adrian Suciu 24:dae7123d432a 325 */
Adrian Suciu 24:dae7123d432a 326 void ADXL362::set_act_inact_ctl_reg(uint8_t data)
Adrian Suciu 24:dae7123d432a 327 {
Adrian Suciu 24:dae7123d432a 328 write_reg(ACT_INACT_CTL, data);
Adrian Suciu 24:dae7123d432a 329 }
Adrian Suciu 24:dae7123d432a 330
Adrian Suciu 24:dae7123d432a 331 /**
Adrian Suciu 24:dae7123d432a 332 * Configures INT1 output of the ADXL362 for polling use
Adrian Suciu 24:dae7123d432a 333 * @param in - uC pin connected to ADXL362's INT1
Adrian Suciu 24:dae7123d432a 334 * @param data - data to be written to INTMAP1
Adrian Suciu 24:dae7123d432a 335 * @param pull - (optional) configures pullup on In pin
Adrian Suciu 24:dae7123d432a 336 */
Adrian Suciu 24:dae7123d432a 337 void ADXL362::set_polling_interrupt1_pin(PinName in, uint8_t data,
Adrian Suciu 24:dae7123d432a 338 PinMode pull)
Adrian Suciu 24:dae7123d432a 339 {
Adrian Suciu 24:dae7123d432a 340 if ((data & 0x7F) != 0) {
Adrian Suciu 24:dae7123d432a 341 write_reg(INTMAP1, data);
Adrian Suciu 24:dae7123d432a 342 _int1_poll = DigitalIn(in);
Adrian Suciu 24:dae7123d432a 343 _int1_poll.mode(pull);
Adrian Suciu 24:dae7123d432a 344 if (data & 0x80) {
Adrian Suciu 24:dae7123d432a 345 _int1_act_low = true;
Adrian Suciu 24:dae7123d432a 346 } else {
Adrian Suciu 24:dae7123d432a 347 _int1_act_low = false;
Adrian Suciu 24:dae7123d432a 348 }
Adrian Suciu 24:dae7123d432a 349 }
Adrian Suciu 24:dae7123d432a 350 }
Adrian Suciu 24:dae7123d432a 351
Adrian Suciu 24:dae7123d432a 352 /**
Adrian Suciu 24:dae7123d432a 353 * Configures INT2 output of the ADXL362 for polling use
Adrian Suciu 24:dae7123d432a 354 * @param in - uC pin connected to ADXL362's INT2
Adrian Suciu 24:dae7123d432a 355 * @param data - data to be written to INTMAP2
Adrian Suciu 24:dae7123d432a 356 * @param pull - (optional) configures pullup on In pin
Adrian Suciu 24:dae7123d432a 357 */
Adrian Suciu 24:dae7123d432a 358 void ADXL362::set_polling_interrupt2_pin(PinName in, uint8_t data,
Adrian Suciu 24:dae7123d432a 359 PinMode pull)
Adrian Suciu 24:dae7123d432a 360 {
Adrian Suciu 24:dae7123d432a 361 if ((data & 0x7F) != 0) {
Adrian Suciu 24:dae7123d432a 362 write_reg(INTMAP2, data);
Adrian Suciu 24:dae7123d432a 363 _int2_poll = DigitalIn(in);
Adrian Suciu 24:dae7123d432a 364 _int2_poll.mode(pull);
Adrian Suciu 24:dae7123d432a 365 if (data & 0x80) {
Adrian Suciu 24:dae7123d432a 366 _int2_act_low = true;
Adrian Suciu 24:dae7123d432a 367 } else {
Adrian Suciu 24:dae7123d432a 368 _int2_act_low = false;
Adrian Suciu 24:dae7123d432a 369 }
Adrian Suciu 24:dae7123d432a 370 }
Adrian Suciu 24:dae7123d432a 371 }
Adrian Suciu 24:dae7123d432a 372
Adrian Suciu 24:dae7123d432a 373 /**
Adrian Suciu 24:dae7123d432a 374 * Gets the active state of the INT1 pin
Adrian Suciu 24:dae7123d432a 375 * @return true if active, false if not active
Adrian Suciu 24:dae7123d432a 376 */
Adrian Suciu 24:dae7123d432a 377 bool ADXL362::get_int1()
Adrian Suciu 24:dae7123d432a 378 {
Adrian Suciu 24:dae7123d432a 379 if(_int1_poll != NC) return (_int1_poll.read() != _int1_act_low); // boolean XOR
Adrian Suciu 24:dae7123d432a 380 else return (_int1->read() != _int1_act_low);
Adrian Suciu 24:dae7123d432a 381 }
Adrian Suciu 24:dae7123d432a 382
Adrian Suciu 24:dae7123d432a 383 /**
Adrian Suciu 24:dae7123d432a 384 * Gets the active state of the INT2 pin
Adrian Suciu 24:dae7123d432a 385 * @return true if active, false if not active
Adrian Suciu 24:dae7123d432a 386 */
Adrian Suciu 24:dae7123d432a 387 bool ADXL362::get_int2()
Adrian Suciu 24:dae7123d432a 388 {
Adrian Suciu 24:dae7123d432a 389 if(_int2_poll != NC) return (_int1_poll.read() != _int1_act_low); // boolean XOR
Adrian Suciu 24:dae7123d432a 390 else return (_int2->read() != _int2_act_low);
Adrian Suciu 24:dae7123d432a 391 }
Adrian Suciu 24:dae7123d432a 392
Adrian Suciu 24:dae7123d432a 393
Adrian Suciu 24:dae7123d432a 394 /**
Adrian Suciu 24:dae7123d432a 395 * Configures the INT1 pin of the ADXL362 to be used in interrupt mode
Adrian Suciu 24:dae7123d432a 396 * @param in - uC pin connected to ADXL362's INT1
Adrian Suciu 24:dae7123d432a 397 * @param data - data to be written to INTMAP1
Adrian Suciu 24:dae7123d432a 398 * @param callback_rising - rising edge interrupt callback - can be set to NULL if no callback is required for rising edge
Adrian Suciu 24:dae7123d432a 399 * @param callback_falling - falling edge interrupt callback - can be set to NULL if no callback is required for falling edge
Adrian Suciu 24:dae7123d432a 400 * @param pull - (optional) configures pullup on In pin
Adrian Suciu 24:dae7123d432a 401 */
Adrian Suciu 24:dae7123d432a 402 void ADXL362::set_interrupt1_pin(PinName in, uint8_t data,
Adrian Suciu 24:dae7123d432a 403 void (*callback_rising)(void), void (*callback_falling)(void), PinMode pull)
Adrian Suciu 24:dae7123d432a 404 {
Adrian Suciu 24:dae7123d432a 405 if ((data & 0x7F) != 0) {
Adrian Suciu 24:dae7123d432a 406 write_reg(INTMAP1, data);
Adrian Suciu 24:dae7123d432a 407 delete _int1;
Adrian Suciu 24:dae7123d432a 408 _int1 = new InterruptIn(in);
Adrian Suciu 24:dae7123d432a 409 _int1->mode(pull);
Adrian Suciu 24:dae7123d432a 410 if(callback_falling != NULL) _int1->fall(callback_falling);
Adrian Suciu 24:dae7123d432a 411 if(callback_rising != NULL) _int1->rise(callback_rising);
Adrian Suciu 24:dae7123d432a 412 if (data & 0x80) {
Adrian Suciu 24:dae7123d432a 413 _int1_act_low = true;
Adrian Suciu 24:dae7123d432a 414 } else {
Adrian Suciu 24:dae7123d432a 415 _int1_act_low = false;
Adrian Suciu 24:dae7123d432a 416 }
Adrian Suciu 24:dae7123d432a 417 }
Adrian Suciu 24:dae7123d432a 418 }
Adrian Suciu 24:dae7123d432a 419
Adrian Suciu 24:dae7123d432a 420
Adrian Suciu 24:dae7123d432a 421 /**
Adrian Suciu 24:dae7123d432a 422 * Configures the INT2 pin of the ADXL362 to be used in interrupt mode
Adrian Suciu 24:dae7123d432a 423 * @param in - uC pin connected to ADXL362's INT2
Adrian Suciu 24:dae7123d432a 424 * @param data - data to be written to INTMAP2
Adrian Suciu 24:dae7123d432a 425 * @param callback_rising - rising edge interrupt callback - can be set to NULL if no callback is required for rising edge
Adrian Suciu 24:dae7123d432a 426 * @param callback_falling - falling edge interrupt callback - can be set to NULL if no callback is required for falling edge
Adrian Suciu 24:dae7123d432a 427 * @param pull - (optional) configures pullup on In pin
Adrian Suciu 24:dae7123d432a 428 */
Adrian Suciu 24:dae7123d432a 429 void ADXL362::set_interrupt2_pin(PinName in, uint8_t data,
Adrian Suciu 24:dae7123d432a 430 void (*callback_rising)(void), void (*callback_falling)(void), PinMode pull)
Adrian Suciu 24:dae7123d432a 431 {
Adrian Suciu 24:dae7123d432a 432 if ((data & 0x7F) != 0) {
Adrian Suciu 24:dae7123d432a 433 write_reg(INTMAP2, data);
Adrian Suciu 24:dae7123d432a 434 delete _int2;
Adrian Suciu 24:dae7123d432a 435 _int2 = new InterruptIn(in);
Adrian Suciu 24:dae7123d432a 436 _int2->mode(pull);
Adrian Suciu 24:dae7123d432a 437 if(callback_falling != NULL) _int2->fall(callback_falling);
Adrian Suciu 24:dae7123d432a 438 if(callback_rising != NULL) _int2->rise(callback_rising);
Adrian Suciu 24:dae7123d432a 439 if (data & 0x80) {
Adrian Suciu 24:dae7123d432a 440 _int2_act_low = true;
Adrian Suciu 24:dae7123d432a 441 } else {
Adrian Suciu 24:dae7123d432a 442 _int2_act_low = false;
Adrian Suciu 24:dae7123d432a 443 }
Adrian Suciu 24:dae7123d432a 444 }
Adrian Suciu 24:dae7123d432a 445 }
Adrian Suciu 24:dae7123d432a 446
Adrian Suciu 24:dae7123d432a 447 /**
Adrian Suciu 24:dae7123d432a 448 * Enables external interrupt registration for pin configured as INT1
Adrian Suciu 24:dae7123d432a 449 * To enable this interrupt, it must first be configured using ADXL362::set_interrupt1_pin()
Adrian Suciu 24:dae7123d432a 450 */
Adrian Suciu 24:dae7123d432a 451 void ADXL362::enable_interrupt1()
Adrian Suciu 24:dae7123d432a 452 {
Adrian Suciu 24:dae7123d432a 453 _int1->enable_irq();
Adrian Suciu 24:dae7123d432a 454 }
Adrian Suciu 24:dae7123d432a 455
Adrian Suciu 24:dae7123d432a 456 /**
Adrian Suciu 24:dae7123d432a 457 * Enables external interrupt registration for pin configured as INT2
Adrian Suciu 24:dae7123d432a 458 * * To enable this interrupt, it must first be configured using ADXL362::set_interrupt2_pin()
Adrian Suciu 24:dae7123d432a 459 */
Adrian Suciu 24:dae7123d432a 460 void ADXL362::enable_interrupt2()
Adrian Suciu 24:dae7123d432a 461 {
Adrian Suciu 24:dae7123d432a 462 _int2->enable_irq();
Adrian Suciu 24:dae7123d432a 463 }
Adrian Suciu 24:dae7123d432a 464
Adrian Suciu 24:dae7123d432a 465 /**
Adrian Suciu 24:dae7123d432a 466 * Disables external interrupt registration for pin configured as INT1
Adrian Suciu 24:dae7123d432a 467 */
Adrian Suciu 24:dae7123d432a 468 void ADXL362::disable_interrupt1()
Adrian Suciu 24:dae7123d432a 469 {
Adrian Suciu 24:dae7123d432a 470 _int1->disable_irq();
Adrian Suciu 24:dae7123d432a 471 }
Adrian Suciu 24:dae7123d432a 472
Adrian Suciu 24:dae7123d432a 473 /**
Adrian Suciu 24:dae7123d432a 474 * Disables external interrupt registration for pin configured as INT2
Adrian Suciu 24:dae7123d432a 475 */
Adrian Suciu 24:dae7123d432a 476 void ADXL362::disable_interrupt2()
Adrian Suciu 24:dae7123d432a 477 {
Adrian Suciu 24:dae7123d432a 478 _int2->disable_irq();
Adrian Suciu 24:dae7123d432a 479 }
Adrian Suciu 24:dae7123d432a 480
Adrian Suciu 24:dae7123d432a 481 /**
Adrian Suciu 24:dae7123d432a 482 * Sets the POWER_CTL register
Adrian Suciu 24:dae7123d432a 483 * @param data - data to be written to the register
Adrian Suciu 24:dae7123d432a 484 */
Adrian Suciu 24:dae7123d432a 485 void ADXL362::set_power_ctl_reg(uint8_t data)
Adrian Suciu 24:dae7123d432a 486 {
Adrian Suciu 24:dae7123d432a 487 write_reg(POWER_CTL, data);
Adrian Suciu 24:dae7123d432a 488 }
Adrian Suciu 24:dae7123d432a 489
Adrian Suciu 24:dae7123d432a 490 /**
Adrian Suciu 24:dae7123d432a 491 * Sets the FILTER_CTL register
Adrian Suciu 24:dae7123d432a 492 * @param data - data to be written to the register
Adrian Suciu 24:dae7123d432a 493 */
Adrian Suciu 24:dae7123d432a 494 void ADXL362::set_filter_ctl_reg(uint8_t data)
Adrian Suciu 24:dae7123d432a 495 {
Adrian Suciu 24:dae7123d432a 496 write_reg(FILTER_CTL, data);
Adrian Suciu 24:dae7123d432a 497 }
Adrian Suciu 24:dae7123d432a 498
Adrian Suciu 24:dae7123d432a 499 /**
Adrian Suciu 24:dae7123d432a 500 * Reads the STATUS register of the ADXL362
Adrian Suciu 24:dae7123d432a 501 * @return - data in the status register
Adrian Suciu 24:dae7123d432a 502 */
Adrian Suciu 24:dae7123d432a 503 uint8_t ADXL362::read_status()
Adrian Suciu 24:dae7123d432a 504 {
Adrian Suciu 24:dae7123d432a 505 return read_reg(STATUS);
Adrian Suciu 24:dae7123d432a 506 }
Adrian Suciu 24:dae7123d432a 507
Adrian Suciu 24:dae7123d432a 508 /**
Adrian Suciu 24:dae7123d432a 509 * Reads the FIFO_ENTRIES_L and FIFO_ENTRIES_H register
Adrian Suciu 24:dae7123d432a 510 * @return the number of entries in the FIFO
Adrian Suciu 24:dae7123d432a 511 */
Adrian Suciu 24:dae7123d432a 512 uint16_t ADXL362::fifo_read_nr_of_entries()
Adrian Suciu 24:dae7123d432a 513 {
Adrian Suciu 24:dae7123d432a 514 return read_reg_u16(FIFO_ENTRIES_L);
Adrian Suciu 24:dae7123d432a 515 }
Adrian Suciu 24:dae7123d432a 516
Adrian Suciu 24:dae7123d432a 517 /**
Adrian Suciu 24:dae7123d432a 518 * Setup for the FIFO
Adrian Suciu 24:dae7123d432a 519 * @param store_temp - boolean, true - temperature will be stored in the fifo. false otherwise
Adrian Suciu 24:dae7123d432a 520 * @param mode - ADXL362_FIFO_modes_t fifo mode
Adrian Suciu 24:dae7123d432a 521 * @param nr_of_entries - number of entries in the FIFO
Adrian Suciu 24:dae7123d432a 522 */
Adrian Suciu 24:dae7123d432a 523 void ADXL362::fifo_setup(bool store_temp, ADXL362_FIFO_modes_t mode, uint16_t nr_of_entries)
Adrian Suciu 24:dae7123d432a 524 {
Adrian Suciu 24:dae7123d432a 525 uint8_t fifo_ctl = static_cast<uint8_t>(mode);
Adrian Suciu 24:dae7123d432a 526 _temp_stored_in_fifo = store_temp;
Adrian Suciu 24:dae7123d432a 527
Adrian Suciu 24:dae7123d432a 528 fifo_ctl = fifo_ctl | (static_cast<uint8_t>(_temp_stored_in_fifo) << 2);
Adrian Suciu 24:dae7123d432a 529
Adrian Suciu 24:dae7123d432a 530 if (nr_of_entries > 0xff) {
Adrian Suciu 24:dae7123d432a 531 fifo_ctl = fifo_ctl | static_cast<uint8_t>(AH);
Adrian Suciu 24:dae7123d432a 532 }
Adrian Suciu 24:dae7123d432a 533 write_reg(FIFO_CONTROL, fifo_ctl);
Adrian Suciu 24:dae7123d432a 534 write_reg(FIFO_SAMPLES, static_cast<uint8_t>(nr_of_entries & 0xff));
Adrian Suciu 24:dae7123d432a 535
Adrian Suciu 24:dae7123d432a 536 }
Adrian Suciu 24:dae7123d432a 537
Adrian Suciu 24:dae7123d432a 538 /**
Adrian Suciu 24:dae7123d432a 539 * Reads a FIFO entry
Adrian Suciu 24:dae7123d432a 540 * @return FIFO entry
Adrian Suciu 24:dae7123d432a 541 */
Adrian Suciu 24:dae7123d432a 542 uint16_t ADXL362::fifo_read_u16()
Adrian Suciu 24:dae7123d432a 543 {
Adrian Suciu 24:dae7123d432a 544 uint16_t ret_val = 0;
Adrian Suciu 24:dae7123d432a 545 adxl362.format(8, _SPI_MODE);
Adrian Suciu 24:dae7123d432a 546
Adrian Suciu 24:dae7123d432a 547 cs = false;
Adrian Suciu 24:dae7123d432a 548 adxl362.write(_READ_FIFO_CMD);
Adrian Suciu 24:dae7123d432a 549 ret_val = adxl362.write(_DUMMY_BYTE);
Adrian Suciu 24:dae7123d432a 550 ret_val = (ret_val) | static_cast<uint16_t>(adxl362.write(_DUMMY_BYTE) << 8);
Adrian Suciu 24:dae7123d432a 551 cs = true;
Adrian Suciu 24:dae7123d432a 552
Adrian Suciu 24:dae7123d432a 553 return ret_val;
Adrian Suciu 24:dae7123d432a 554 }
Adrian Suciu 24:dae7123d432a 555
Adrian Suciu 24:dae7123d432a 556 /**
Adrian Suciu 24:dae7123d432a 557 * Reads 3(4) bytes from the FIFO(if store_temp was set), assembles the data in the format used by the scan method
Adrian Suciu 24:dae7123d432a 558 * ADXL362::fifo_setup() needs to be called before calling fifo_scan to ensure correct fifo operation
Adrian Suciu 24:dae7123d432a 559 * fifo_scan and fifo_read_u16 should not be used as fifo_read_u16 disaligns the fifo therefore
Adrian Suciu 24:dae7123d432a 560 * fifo_scan will return data from multiple samples
Adrian Suciu 24:dae7123d432a 561 * @return scanned data from the fifo in the 0xXXYYZZTT format
Adrian Suciu 24:dae7123d432a 562 */
Adrian Suciu 24:dae7123d432a 563 uint64_t ADXL362::fifo_scan()
Adrian Suciu 24:dae7123d432a 564 {
Adrian Suciu 24:dae7123d432a 565
Adrian Suciu 24:dae7123d432a 566 uint64_t ret_val = 0;
Adrian Suciu 24:dae7123d432a 567 uint16_t x = 0, y = 0, z = 0, dummy, t = 0, sample_type;
Adrian Suciu 24:dae7123d432a 568
Adrian Suciu 24:dae7123d432a 569 adxl362.format(8, _SPI_MODE);
Adrian Suciu 24:dae7123d432a 570 cs = false;
Adrian Suciu 24:dae7123d432a 571 adxl362.write(_READ_FIFO_CMD);
Adrian Suciu 24:dae7123d432a 572 uint8_t samples = (_temp_stored_in_fifo) ? 4 : 3;
Adrian Suciu 24:dae7123d432a 573 for(uint8_t i = 0; i < samples; i++) {
Adrian Suciu 24:dae7123d432a 574 dummy = adxl362.write(_DUMMY_BYTE);
Adrian Suciu 24:dae7123d432a 575 dummy = dummy | static_cast<uint16_t>(adxl362.write(_DUMMY_BYTE) << 8);
Adrian Suciu 24:dae7123d432a 576 sample_type = (dummy & 0xc000) >> 14;
Adrian Suciu 24:dae7123d432a 577 dummy = dummy & 0x3fff;
Adrian Suciu 24:dae7123d432a 578 switch(sample_type) {
Adrian Suciu 24:dae7123d432a 579 case 0: // x
Adrian Suciu 24:dae7123d432a 580 x = dummy;
Adrian Suciu 24:dae7123d432a 581 break;
Adrian Suciu 24:dae7123d432a 582 case 1: // y
Adrian Suciu 24:dae7123d432a 583 y = dummy;
Adrian Suciu 24:dae7123d432a 584 break;
Adrian Suciu 24:dae7123d432a 585 case 2: // z
Adrian Suciu 24:dae7123d432a 586 z = dummy;
Adrian Suciu 24:dae7123d432a 587 break;
Adrian Suciu 24:dae7123d432a 588 case 3: // temp
Adrian Suciu 24:dae7123d432a 589 t = dummy;
Adrian Suciu 24:dae7123d432a 590 break;
Adrian Suciu 24:dae7123d432a 591 }
Adrian Suciu 24:dae7123d432a 592
Adrian Suciu 24:dae7123d432a 593 }
Adrian Suciu 24:dae7123d432a 594
Adrian Suciu 24:dae7123d432a 595 // format xxyyzztt
Adrian Suciu 24:dae7123d432a 596 ret_val = static_cast<uint64_t> (x) << 48;
Adrian Suciu 24:dae7123d432a 597 ret_val |= static_cast<uint64_t>(y) << 32;
Adrian Suciu 24:dae7123d432a 598 ret_val |= static_cast<uint64_t>(z) << 16;
Adrian Suciu 24:dae7123d432a 599 ret_val |= static_cast<uint64_t>(t);
Adrian Suciu 24:dae7123d432a 600 cs = true;
Adrian Suciu 24:dae7123d432a 601 return ret_val;
Adrian Suciu 24:dae7123d432a 602 }