Example Host software for integration of MAX3266x chips (, MAX32664GWEB) equipped with Heart Rate from Wrist Algorithm. This is “stand-alone” software that runs on the MAX32630 low-power microcontroller to display heart rate on the display of the MAXREFDES101 reference design. It is intended provide a simple example of how to initialize and communicate with the sensor hub. Windows and Android communications are not supported.

Dependencies:   Maxim_Sensor_Hub_Communications BMI160 whrmDemoUI max32630hsp3

Fork of Host_Software_MAX32664GWEB_HR_wrist by mehmet gok

Committer:
gmehmet
Date:
Mon Dec 17 10:34:32 2018 +0300
Revision:
0:ddc2fef69ef9
First Commit New Repo name

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gmehmet 0:ddc2fef69ef9 1 /*******************************************************************************
gmehmet 0:ddc2fef69ef9 2 * Copyright (C) 2018 Maxim Integrated Products, Inc., All Rights Reserved.
gmehmet 0:ddc2fef69ef9 3 *
gmehmet 0:ddc2fef69ef9 4 * Permission is hereby granted, free of charge, to any person obtaining a
gmehmet 0:ddc2fef69ef9 5 * copy of this software and associated documentation files (the "Software"),
gmehmet 0:ddc2fef69ef9 6 * to deal in the Software without restriction, including without limitation
gmehmet 0:ddc2fef69ef9 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
gmehmet 0:ddc2fef69ef9 8 * and/or sell copies of the Software, and to permit persons to whom the
gmehmet 0:ddc2fef69ef9 9 * Software is furnished to do so, subject to the following conditions:
gmehmet 0:ddc2fef69ef9 10 *
gmehmet 0:ddc2fef69ef9 11 * The above copyright notice and this permission notice shall be included
gmehmet 0:ddc2fef69ef9 12 * in all copies or substantial portions of the Software.
gmehmet 0:ddc2fef69ef9 13 *
gmehmet 0:ddc2fef69ef9 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
gmehmet 0:ddc2fef69ef9 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
gmehmet 0:ddc2fef69ef9 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
gmehmet 0:ddc2fef69ef9 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
gmehmet 0:ddc2fef69ef9 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
gmehmet 0:ddc2fef69ef9 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
gmehmet 0:ddc2fef69ef9 20 * OTHER DEALINGS IN THE SOFTWARE.
gmehmet 0:ddc2fef69ef9 21 *
gmehmet 0:ddc2fef69ef9 22 * Except as contained in this notice, the name of Maxim Integrated
gmehmet 0:ddc2fef69ef9 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
gmehmet 0:ddc2fef69ef9 24 * Products, Inc. Branding Policy.
gmehmet 0:ddc2fef69ef9 25 *
gmehmet 0:ddc2fef69ef9 26 * The mere transfer of this software does not imply any licenses
gmehmet 0:ddc2fef69ef9 27 * of trade secrets, proprietary technology, copyrights, patents,
gmehmet 0:ddc2fef69ef9 28 * trademarks, maskwork rights, or any other form of intellectual
gmehmet 0:ddc2fef69ef9 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
gmehmet 0:ddc2fef69ef9 30 * ownership rights.
gmehmet 0:ddc2fef69ef9 31 *******************************************************************************
gmehmet 0:ddc2fef69ef9 32 */
gmehmet 0:ddc2fef69ef9 33
gmehmet 0:ddc2fef69ef9 34
gmehmet 0:ddc2fef69ef9 35 #include "MAX20303.h"
gmehmet 0:ddc2fef69ef9 36
gmehmet 0:ddc2fef69ef9 37
gmehmet 0:ddc2fef69ef9 38
gmehmet 0:ddc2fef69ef9 39 //******************************************************************************
gmehmet 0:ddc2fef69ef9 40 MAX20303::MAX20303(I2C *i2c):
gmehmet 0:ddc2fef69ef9 41 m_i2c(i2c), m_writeAddress(MAX20303_SLAVE_WR_ADDR),
gmehmet 0:ddc2fef69ef9 42 m_readAddress(MAX20303_SLAVE_RD_ADDR)
gmehmet 0:ddc2fef69ef9 43 {
gmehmet 0:ddc2fef69ef9 44 }
gmehmet 0:ddc2fef69ef9 45
gmehmet 0:ddc2fef69ef9 46
gmehmet 0:ddc2fef69ef9 47 //******************************************************************************
gmehmet 0:ddc2fef69ef9 48 MAX20303::~MAX20303(void)
gmehmet 0:ddc2fef69ef9 49 {
gmehmet 0:ddc2fef69ef9 50 //empty block
gmehmet 0:ddc2fef69ef9 51 }
gmehmet 0:ddc2fef69ef9 52
gmehmet 0:ddc2fef69ef9 53
gmehmet 0:ddc2fef69ef9 54 //******************************************************************************
gmehmet 0:ddc2fef69ef9 55 int MAX20303::LDO1Config()
gmehmet 0:ddc2fef69ef9 56 {
gmehmet 0:ddc2fef69ef9 57 int32_t ret = 0;
gmehmet 0:ddc2fef69ef9 58 uint8_t val;
gmehmet 0:ddc2fef69ef9 59 // ret |= writeReg(MAX20303::REG_AP_CMDOUT, 0x40);
gmehmet 0:ddc2fef69ef9 60 // ret |= writeReg(MAX20303::REG_AP_DATOUT0, 0x05);
gmehmet 0:ddc2fef69ef9 61 // ret |= writeReg(MAX20303::REG_AP_DATOUT1, 0x34);
gmehmet 0:ddc2fef69ef9 62 //
gmehmet 0:ddc2fef69ef9 63 // readReg(MAX20303::REG_AP_CMDOUT, val);
gmehmet 0:ddc2fef69ef9 64 // readReg(MAX20303::REG_AP_DATOUT0, val);
gmehmet 0:ddc2fef69ef9 65 // readReg(MAX20303::REG_AP_DATOUT1, val);
gmehmet 0:ddc2fef69ef9 66 appcmdoutvalue_ = 0x40;
gmehmet 0:ddc2fef69ef9 67 appdatainoutbuffer_[0] = 0x05;
gmehmet 0:ddc2fef69ef9 68 appdatainoutbuffer_[1] = 0x34;
gmehmet 0:ddc2fef69ef9 69 AppWrite(2);
gmehmet 0:ddc2fef69ef9 70
gmehmet 0:ddc2fef69ef9 71 return ret;
gmehmet 0:ddc2fef69ef9 72 }
gmehmet 0:ddc2fef69ef9 73
gmehmet 0:ddc2fef69ef9 74 //******************************************************************************
gmehmet 0:ddc2fef69ef9 75 int MAX20303::LDO2Config()
gmehmet 0:ddc2fef69ef9 76 {
gmehmet 0:ddc2fef69ef9 77 int32_t ret = 0;
gmehmet 0:ddc2fef69ef9 78 uint8_t val;
gmehmet 0:ddc2fef69ef9 79 appcmdoutvalue_ = 0x42;
gmehmet 0:ddc2fef69ef9 80 appdatainoutbuffer_[0] = 0x01;
gmehmet 0:ddc2fef69ef9 81 appdatainoutbuffer_[1] = 0x15; // 0.9V + (0.1V * number) = 3V
gmehmet 0:ddc2fef69ef9 82 AppWrite(2);
gmehmet 0:ddc2fef69ef9 83
gmehmet 0:ddc2fef69ef9 84 return ret;
gmehmet 0:ddc2fef69ef9 85 }
gmehmet 0:ddc2fef69ef9 86
gmehmet 0:ddc2fef69ef9 87
gmehmet 0:ddc2fef69ef9 88 //******************************************************************************
gmehmet 0:ddc2fef69ef9 89 int MAX20303::writeReg(registers_t reg, uint8_t value)
gmehmet 0:ddc2fef69ef9 90 {
gmehmet 0:ddc2fef69ef9 91 int32_t ret;
gmehmet 0:ddc2fef69ef9 92
gmehmet 0:ddc2fef69ef9 93 char cmdData[2] = {reg, value};
gmehmet 0:ddc2fef69ef9 94
gmehmet 0:ddc2fef69ef9 95 ret = m_i2c->write(m_writeAddress, cmdData, sizeof(cmdData));
gmehmet 0:ddc2fef69ef9 96 //printf("MAX20303 write reg[0x%X]=0x%X, ret=%d\r\n", (uint32_t)reg, value, ret)
gmehmet 0:ddc2fef69ef9 97
gmehmet 0:ddc2fef69ef9 98 if (ret != 0)
gmehmet 0:ddc2fef69ef9 99 return MAX20303_ERROR;
gmehmet 0:ddc2fef69ef9 100
gmehmet 0:ddc2fef69ef9 101 return MAX20303_NO_ERROR;
gmehmet 0:ddc2fef69ef9 102 }
gmehmet 0:ddc2fef69ef9 103
gmehmet 0:ddc2fef69ef9 104
gmehmet 0:ddc2fef69ef9 105 //******************************************************************************
gmehmet 0:ddc2fef69ef9 106 int MAX20303::readReg(registers_t reg, uint8_t &value)
gmehmet 0:ddc2fef69ef9 107 {
gmehmet 0:ddc2fef69ef9 108 int32_t ret;
gmehmet 0:ddc2fef69ef9 109
gmehmet 0:ddc2fef69ef9 110 char data = reg;
gmehmet 0:ddc2fef69ef9 111
gmehmet 0:ddc2fef69ef9 112 ret = m_i2c->write(m_writeAddress, &data, sizeof(data));
gmehmet 0:ddc2fef69ef9 113 if (ret != 0) {
gmehmet 0:ddc2fef69ef9 114 printf("%s - failed - ret: %d\n", __func__);
gmehmet 0:ddc2fef69ef9 115 return MAX20303_ERROR;
gmehmet 0:ddc2fef69ef9 116 }
gmehmet 0:ddc2fef69ef9 117
gmehmet 0:ddc2fef69ef9 118 ret = m_i2c->read(m_readAddress, &data, sizeof(data));
gmehmet 0:ddc2fef69ef9 119 if (ret != 0) {
gmehmet 0:ddc2fef69ef9 120 printf("%s - failed - ret: %d\n", __func__);
gmehmet 0:ddc2fef69ef9 121 return MAX20303_ERROR;
gmehmet 0:ddc2fef69ef9 122 }
gmehmet 0:ddc2fef69ef9 123
gmehmet 0:ddc2fef69ef9 124 value = data;
gmehmet 0:ddc2fef69ef9 125 printf("MAX20303 read reg[0x%X]=0x%X, ret=%d\r\n", (uint32_t)reg, value, ret);
gmehmet 0:ddc2fef69ef9 126 return MAX20303_NO_ERROR;
gmehmet 0:ddc2fef69ef9 127 }
gmehmet 0:ddc2fef69ef9 128
gmehmet 0:ddc2fef69ef9 129 //******************************************************************************
gmehmet 0:ddc2fef69ef9 130 int MAX20303::readRegMulti(registers_t reg, uint8_t *value, uint8_t len){
gmehmet 0:ddc2fef69ef9 131 int32_t ret;
gmehmet 0:ddc2fef69ef9 132 char data = reg;
gmehmet 0:ddc2fef69ef9 133
gmehmet 0:ddc2fef69ef9 134 ret = m_i2c->write(m_writeAddress, &data, sizeof(data));
gmehmet 0:ddc2fef69ef9 135 if (ret != 0) {
gmehmet 0:ddc2fef69ef9 136 printf("%s - failed - ret: %d\n", __func__);
gmehmet 0:ddc2fef69ef9 137 return MAX20303_ERROR;
gmehmet 0:ddc2fef69ef9 138 }
gmehmet 0:ddc2fef69ef9 139
gmehmet 0:ddc2fef69ef9 140 ret = m_i2c->read(m_readAddress, (char *)value, len);
gmehmet 0:ddc2fef69ef9 141 if (ret != 0) {
gmehmet 0:ddc2fef69ef9 142 printf("%s - failed - ret: %d\n", __func__);
gmehmet 0:ddc2fef69ef9 143 return MAX20303_ERROR;
gmehmet 0:ddc2fef69ef9 144 }
gmehmet 0:ddc2fef69ef9 145
gmehmet 0:ddc2fef69ef9 146 printf("MAX20303 read reg[0x%X]=0x%X, ret=%d\r\n", (uint32_t)reg, value, ret);
gmehmet 0:ddc2fef69ef9 147 return MAX20303_NO_ERROR;
gmehmet 0:ddc2fef69ef9 148 }
gmehmet 0:ddc2fef69ef9 149
gmehmet 0:ddc2fef69ef9 150 //******************************************************************************
gmehmet 0:ddc2fef69ef9 151 int MAX20303::writeRegMulti(registers_t reg, uint8_t *value, uint8_t len){
gmehmet 0:ddc2fef69ef9 152 int32_t ret;
gmehmet 0:ddc2fef69ef9 153 i2cbuffer_[0] = reg;
gmehmet 0:ddc2fef69ef9 154 memcpy(&i2cbuffer_[1], value, len);
gmehmet 0:ddc2fef69ef9 155
gmehmet 0:ddc2fef69ef9 156 ret = m_i2c->write(m_writeAddress, (char *)i2cbuffer_, (len+1));
gmehmet 0:ddc2fef69ef9 157 //printf("MAX20303 write reg[0x%X]=0x%X, ret=%d\r\n", (uint32_t)reg, value, ret)
gmehmet 0:ddc2fef69ef9 158
gmehmet 0:ddc2fef69ef9 159 if (ret != 0)
gmehmet 0:ddc2fef69ef9 160 return MAX20303_ERROR;
gmehmet 0:ddc2fef69ef9 161
gmehmet 0:ddc2fef69ef9 162 return MAX20303_NO_ERROR;
gmehmet 0:ddc2fef69ef9 163 }
gmehmet 0:ddc2fef69ef9 164 //******************************************************************************
gmehmet 0:ddc2fef69ef9 165 int MAX20303::mv2bits(int mV)
gmehmet 0:ddc2fef69ef9 166 {
gmehmet 0:ddc2fef69ef9 167 int regBits;
gmehmet 0:ddc2fef69ef9 168
gmehmet 0:ddc2fef69ef9 169 if (( MAX20303_LDO_MIN_MV <= mV) && (mV <= MAX20303_LDO_MAX_MV)) {
gmehmet 0:ddc2fef69ef9 170 regBits = (mV - MAX20303_LDO_MIN_MV) / MAX20303_LDO_STEP_MV;
gmehmet 0:ddc2fef69ef9 171 } else {
gmehmet 0:ddc2fef69ef9 172 return -1;
gmehmet 0:ddc2fef69ef9 173 }
gmehmet 0:ddc2fef69ef9 174
gmehmet 0:ddc2fef69ef9 175 return regBits;
gmehmet 0:ddc2fef69ef9 176 }
gmehmet 0:ddc2fef69ef9 177 //******************************************************************************
gmehmet 0:ddc2fef69ef9 178 int MAX20303::PowerOffthePMIC(){
gmehmet 0:ddc2fef69ef9 179 int ret;
gmehmet 0:ddc2fef69ef9 180 appdatainoutbuffer_[0] = 0xB2;
gmehmet 0:ddc2fef69ef9 181 appcmdoutvalue_ = 0x80;
gmehmet 0:ddc2fef69ef9 182 ret = AppWrite(1);
gmehmet 0:ddc2fef69ef9 183
gmehmet 0:ddc2fef69ef9 184 if(appcmdoutvalue_ != 0x80){
gmehmet 0:ddc2fef69ef9 185 ret |= MAX20303_ERROR;
gmehmet 0:ddc2fef69ef9 186 }
gmehmet 0:ddc2fef69ef9 187
gmehmet 0:ddc2fef69ef9 188 return ret;
gmehmet 0:ddc2fef69ef9 189 }
gmehmet 0:ddc2fef69ef9 190 //******************************************************************************
gmehmet 0:ddc2fef69ef9 191 int MAX20303::PowerOffDelaythePMIC(){
gmehmet 0:ddc2fef69ef9 192 int ret;
gmehmet 0:ddc2fef69ef9 193 appdatainoutbuffer_[0] = 0xB2;
gmehmet 0:ddc2fef69ef9 194 appcmdoutvalue_ = 0x84;
gmehmet 0:ddc2fef69ef9 195 ret = AppWrite(1);
gmehmet 0:ddc2fef69ef9 196
gmehmet 0:ddc2fef69ef9 197 if(appcmdoutvalue_ != 0x80){
gmehmet 0:ddc2fef69ef9 198 ret |= MAX20303_ERROR;
gmehmet 0:ddc2fef69ef9 199 }
gmehmet 0:ddc2fef69ef9 200
gmehmet 0:ddc2fef69ef9 201 return ret;
gmehmet 0:ddc2fef69ef9 202 }
gmehmet 0:ddc2fef69ef9 203
gmehmet 0:ddc2fef69ef9 204 //******************************************************************************
gmehmet 0:ddc2fef69ef9 205 int MAX20303::SoftResetthePMIC(){
gmehmet 0:ddc2fef69ef9 206 int ret;
gmehmet 0:ddc2fef69ef9 207 appdatainoutbuffer_[0] = 0xB3;
gmehmet 0:ddc2fef69ef9 208 appcmdoutvalue_ = 0x81;
gmehmet 0:ddc2fef69ef9 209 ret = AppWrite(1);
gmehmet 0:ddc2fef69ef9 210
gmehmet 0:ddc2fef69ef9 211 if(appcmdoutvalue_ != 0x81){
gmehmet 0:ddc2fef69ef9 212 ret |= MAX20303_ERROR;
gmehmet 0:ddc2fef69ef9 213 }
gmehmet 0:ddc2fef69ef9 214
gmehmet 0:ddc2fef69ef9 215 return ret;
gmehmet 0:ddc2fef69ef9 216 }
gmehmet 0:ddc2fef69ef9 217 //******************************************************************************
gmehmet 0:ddc2fef69ef9 218 int MAX20303::HardResetthePMIC(){
gmehmet 0:ddc2fef69ef9 219 int ret;
gmehmet 0:ddc2fef69ef9 220 appdatainoutbuffer_[0] = 0xB4;
gmehmet 0:ddc2fef69ef9 221 appcmdoutvalue_ = 0x82;
gmehmet 0:ddc2fef69ef9 222 ret = AppWrite(1);
gmehmet 0:ddc2fef69ef9 223
gmehmet 0:ddc2fef69ef9 224 if(appcmdoutvalue_ != 0x82){
gmehmet 0:ddc2fef69ef9 225 ret |= MAX20303_ERROR;
gmehmet 0:ddc2fef69ef9 226 }
gmehmet 0:ddc2fef69ef9 227
gmehmet 0:ddc2fef69ef9 228 return ret;
gmehmet 0:ddc2fef69ef9 229 }
gmehmet 0:ddc2fef69ef9 230
gmehmet 0:ddc2fef69ef9 231 //******************************************************************************
gmehmet 0:ddc2fef69ef9 232 int MAX20303::AppWrite(uint8_t dataoutlen){
gmehmet 0:ddc2fef69ef9 233 int ret;
gmehmet 0:ddc2fef69ef9 234
gmehmet 0:ddc2fef69ef9 235 ret = writeRegMulti(MAX20303::REG_AP_DATOUT0, appdatainoutbuffer_, dataoutlen);
gmehmet 0:ddc2fef69ef9 236 ret |= writeReg(MAX20303::REG_AP_CMDOUT, appcmdoutvalue_);
gmehmet 0:ddc2fef69ef9 237 wait_ms(10);
gmehmet 0:ddc2fef69ef9 238 ret |= readReg(MAX20303::REG_AP_RESPONSE, appcmdoutvalue_);
gmehmet 0:ddc2fef69ef9 239
gmehmet 0:ddc2fef69ef9 240 if(ret != 0)
gmehmet 0:ddc2fef69ef9 241 return MAX20303_ERROR;
gmehmet 0:ddc2fef69ef9 242
gmehmet 0:ddc2fef69ef9 243 return MAX20303_NO_ERROR;
gmehmet 0:ddc2fef69ef9 244 }
gmehmet 0:ddc2fef69ef9 245
gmehmet 0:ddc2fef69ef9 246
gmehmet 0:ddc2fef69ef9 247 //******************************************************************************
gmehmet 0:ddc2fef69ef9 248 int MAX20303::AppRead(uint8_t datainlen){
gmehmet 0:ddc2fef69ef9 249 int ret;
gmehmet 0:ddc2fef69ef9 250
gmehmet 0:ddc2fef69ef9 251 ret = writeReg(MAX20303::REG_AP_CMDOUT, appcmdoutvalue_);
gmehmet 0:ddc2fef69ef9 252 wait_ms(10);
gmehmet 0:ddc2fef69ef9 253 ret |= readRegMulti(MAX20303::REG_AP_RESPONSE, i2cbuffer_, datainlen);
gmehmet 0:ddc2fef69ef9 254 if(ret != 0)
gmehmet 0:ddc2fef69ef9 255 return MAX20303_ERROR;
gmehmet 0:ddc2fef69ef9 256
gmehmet 0:ddc2fef69ef9 257 return MAX20303_NO_ERROR;
gmehmet 0:ddc2fef69ef9 258 }
gmehmet 0:ddc2fef69ef9 259
gmehmet 0:ddc2fef69ef9 260 //******************************************************************************
gmehmet 0:ddc2fef69ef9 261 char MAX20303::CheckPMICHWID(){
gmehmet 0:ddc2fef69ef9 262 int ret;
gmehmet 0:ddc2fef69ef9 263 uint8_t value = 0x00;
gmehmet 0:ddc2fef69ef9 264
gmehmet 0:ddc2fef69ef9 265 ret = readReg(MAX20303::REG_HARDWARE_ID, value);
gmehmet 0:ddc2fef69ef9 266 if(ret != MAX20303_NO_ERROR)
gmehmet 0:ddc2fef69ef9 267 return false;
gmehmet 0:ddc2fef69ef9 268
gmehmet 0:ddc2fef69ef9 269 if(value == 0x02)
gmehmet 0:ddc2fef69ef9 270 return true;
gmehmet 0:ddc2fef69ef9 271 else
gmehmet 0:ddc2fef69ef9 272 return false;
gmehmet 0:ddc2fef69ef9 273 }
gmehmet 0:ddc2fef69ef9 274
gmehmet 0:ddc2fef69ef9 275 //******************************************************************************
gmehmet 0:ddc2fef69ef9 276 int MAX20303::CheckPMICStatusRegisters(unsigned char buf_results[5]){
gmehmet 0:ddc2fef69ef9 277 int ret;
gmehmet 0:ddc2fef69ef9 278 ret = readReg(MAX20303::REG_STATUS0, buf_results[0]);
gmehmet 0:ddc2fef69ef9 279 ret |= readReg(MAX20303::REG_STATUS1, buf_results[1]);
gmehmet 0:ddc2fef69ef9 280 ret |= readReg(MAX20303::REG_STATUS2, buf_results[2]);
gmehmet 0:ddc2fef69ef9 281 ret |= readReg(MAX20303::REG_STATUS3, buf_results[3]);
gmehmet 0:ddc2fef69ef9 282 ret |= readReg(MAX20303::REG_SYSTEM_ERROR, buf_results[4]);
gmehmet 0:ddc2fef69ef9 283 return ret;
gmehmet 0:ddc2fef69ef9 284 }
gmehmet 0:ddc2fef69ef9 285
gmehmet 0:ddc2fef69ef9 286 //******************************************************************************
gmehmet 0:ddc2fef69ef9 287 int MAX20303::Max20303_BatteryGauge(unsigned char *batterylevel){
gmehmet 0:ddc2fef69ef9 288 int ret;
gmehmet 0:ddc2fef69ef9 289 char data[2];
gmehmet 0:ddc2fef69ef9 290
gmehmet 0:ddc2fef69ef9 291 data[0] = 0x04;
gmehmet 0:ddc2fef69ef9 292 ret = m_i2c->write(MAX20303_I2C_ADDR_FUEL_GAUGE, data, 1);
gmehmet 0:ddc2fef69ef9 293 if(ret != 0){
gmehmet 0:ddc2fef69ef9 294 printf("Max20303_FuelGauge has failed\r\n");
gmehmet 0:ddc2fef69ef9 295 }
gmehmet 0:ddc2fef69ef9 296
gmehmet 0:ddc2fef69ef9 297 ret = m_i2c->read(MAX20303_I2C_ADDR_FUEL_GAUGE | 1, data, 2);
gmehmet 0:ddc2fef69ef9 298 if(ret != 0){
gmehmet 0:ddc2fef69ef9 299 printf("Max20303_FuelGauge has failed\r\n");
gmehmet 0:ddc2fef69ef9 300 }
gmehmet 0:ddc2fef69ef9 301
gmehmet 0:ddc2fef69ef9 302 // if the level is more than 100 assume the battery is not connected
gmehmet 0:ddc2fef69ef9 303 if(data[0] > 100){
gmehmet 0:ddc2fef69ef9 304 *batterylevel = 0;
gmehmet 0:ddc2fef69ef9 305 } else{
gmehmet 0:ddc2fef69ef9 306
gmehmet 0:ddc2fef69ef9 307 *batterylevel = data[0];
gmehmet 0:ddc2fef69ef9 308 }
gmehmet 0:ddc2fef69ef9 309 return 0;
gmehmet 0:ddc2fef69ef9 310 }
gmehmet 0:ddc2fef69ef9 311
gmehmet 0:ddc2fef69ef9 312
gmehmet 0:ddc2fef69ef9 313 //******************************************************************************
gmehmet 0:ddc2fef69ef9 314 int MAX20303::led0on(char enable) {
gmehmet 0:ddc2fef69ef9 315
gmehmet 0:ddc2fef69ef9 316 if(enable)
gmehmet 0:ddc2fef69ef9 317 return writeReg(REG_LED0_DIRECT, 0x21);
gmehmet 0:ddc2fef69ef9 318 else
gmehmet 0:ddc2fef69ef9 319 return writeReg(REG_LED0_DIRECT, 0x01);
gmehmet 0:ddc2fef69ef9 320 }
gmehmet 0:ddc2fef69ef9 321
gmehmet 0:ddc2fef69ef9 322 //******************************************************************************
gmehmet 0:ddc2fef69ef9 323 int MAX20303::led1on(char enable) {
gmehmet 0:ddc2fef69ef9 324 if(enable)
gmehmet 0:ddc2fef69ef9 325 return writeReg(REG_LED1_DIRECT, 0x21);
gmehmet 0:ddc2fef69ef9 326 else
gmehmet 0:ddc2fef69ef9 327 return writeReg(REG_LED1_DIRECT, 0x01);
gmehmet 0:ddc2fef69ef9 328 }
gmehmet 0:ddc2fef69ef9 329
gmehmet 0:ddc2fef69ef9 330 //******************************************************************************
gmehmet 0:ddc2fef69ef9 331 int MAX20303::led2on(char enable) {
gmehmet 0:ddc2fef69ef9 332 if(enable)
gmehmet 0:ddc2fef69ef9 333 return writeReg(REG_LED2_DIRECT, 0x21);
gmehmet 0:ddc2fef69ef9 334 else
gmehmet 0:ddc2fef69ef9 335 return writeReg(REG_LED2_DIRECT, 0x01);
gmehmet 0:ddc2fef69ef9 336 }
gmehmet 0:ddc2fef69ef9 337
gmehmet 0:ddc2fef69ef9 338
gmehmet 0:ddc2fef69ef9 339 //******************************************************************************
gmehmet 0:ddc2fef69ef9 340 int MAX20303::BoostEnable(void) {
gmehmet 0:ddc2fef69ef9 341 writeReg(REG_AP_DATOUT3, 0x00); // 00 : 5V
gmehmet 0:ddc2fef69ef9 342 writeReg(REG_AP_DATOUT0, 0x01); // Boost Enabled
gmehmet 0:ddc2fef69ef9 343 writeReg(REG_AP_CMDOUT, 0x30);
gmehmet 0:ddc2fef69ef9 344 return MAX20303_NO_ERROR;
gmehmet 0:ddc2fef69ef9 345 }
gmehmet 0:ddc2fef69ef9 346
gmehmet 0:ddc2fef69ef9 347 //******************************************************************************
gmehmet 0:ddc2fef69ef9 348 int MAX20303::BuckBoostEnable(void)
gmehmet 0:ddc2fef69ef9 349 {
gmehmet 0:ddc2fef69ef9 350 int ret = 0;
gmehmet 0:ddc2fef69ef9 351
gmehmet 0:ddc2fef69ef9 352 ret |= writeReg( REG_AP_DATOUT0, 0x00); // Reserved = 0x00
gmehmet 0:ddc2fef69ef9 353 ret |= writeReg( REG_AP_DATOUT1, 0x04); // BBstlSet = 0b'100 Buck Boost Peak current Limit = 200mA
gmehmet 0:ddc2fef69ef9 354 ret |= writeReg( REG_AP_DATOUT2, 0x19); // BBstVSet = 0b'11001 Buck Boost Output Voltage = 5V
gmehmet 0:ddc2fef69ef9 355 ret |= writeReg( REG_AP_DATOUT3, 0x01); // BBstRipRed = 1 Ripple Reduction
gmehmet 0:ddc2fef69ef9 356 // BBstAct = 1 Actively discharged in Hard-Reset or Enable Low
gmehmet 0:ddc2fef69ef9 357 // BBstPas = 1 Passively discharged in Hard-Reset or Enable Low
gmehmet 0:ddc2fef69ef9 358 // BBstMd = 1 Damping Enabled
gmehmet 0:ddc2fef69ef9 359 // BBstInd = 0 Inductance is 4.7uH
gmehmet 0:ddc2fef69ef9 360 // BBstEn = 0b'01 Enabled
gmehmet 0:ddc2fef69ef9 361 ret |= writeReg( REG_AP_CMDOUT, 0x70);
gmehmet 0:ddc2fef69ef9 362 if (ret != 0)
gmehmet 0:ddc2fef69ef9 363 return MAX20303_ERROR;
gmehmet 0:ddc2fef69ef9 364
gmehmet 0:ddc2fef69ef9 365 return MAX20303_NO_ERROR;
gmehmet 0:ddc2fef69ef9 366 }