max20303 private fork

Fork of max20303 by Maxim Integrated

Committer:
seyhmuscacina
Date:
Thu Jan 03 11:03:10 2019 +0300
Revision:
2:39e05cf7ef7d
Parent:
1:d85b06dc60a3
updates Max20303 code for HSP2.0 P2

Who changed what in which revision?

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