max20303 private fork

Fork of max20303 by Maxim Integrated

Revision:
2:39e05cf7ef7d
Parent:
1:d85b06dc60a3
--- a/MAX20303.cpp	Thu Jan 25 15:31:43 2018 +0300
+++ b/MAX20303.cpp	Thu Jan 03 11:03:10 2019 +0300
@@ -68,12 +68,23 @@
 	appdatainoutbuffer_[1] = 0x34;
 	AppWrite(2);
 
+	return ret;
+}
 
-
+//******************************************************************************
+int MAX20303::LDO2Config()
+{
+	int32_t ret = 0;
+	uint8_t val;
+	appcmdoutvalue_ = 0x42;
+	appdatainoutbuffer_[0] = 0x01;
+	appdatainoutbuffer_[1] = 0x15;     // 0.9V + (0.1V * number)   =  3V
+	AppWrite(2);
 
 	return ret;
 }
 
+
 //******************************************************************************
 int MAX20303::writeReg(registers_t reg, uint8_t value)
 {
@@ -177,6 +188,20 @@
 	return ret;
 }
 //******************************************************************************
+int MAX20303::PowerOffDelaythePMIC(){
+	int ret;
+	appdatainoutbuffer_[0] = 0xB2;
+	appcmdoutvalue_ = 0x84;
+	ret = AppWrite(1);
+
+	if(appcmdoutvalue_ != 0x80){
+		ret |= MAX20303_ERROR;
+	}
+
+	return ret;
+}
+
+//******************************************************************************
 int MAX20303::SoftResetthePMIC(){
 	int ret;
 	appdatainoutbuffer_[0] = 0xB3;
@@ -232,23 +257,90 @@
 	return MAX20303_NO_ERROR;
 }
 
+//******************************************************************************
+char MAX20303::CheckPMICHWID(){
+	int ret;
+	uint8_t value = 0x00;
+
+	ret = readReg(MAX20303::REG_HARDWARE_ID, value);
+	if(ret != MAX20303_NO_ERROR)
+		return false;
+
+	if(value == 0x02)
+		return true;
+	else
+		return false;
+}
+
+//******************************************************************************
+int MAX20303::CheckPMICStatusRegisters(unsigned char buf_results[5]){
+	int ret;
+	ret  = readReg(MAX20303::REG_STATUS0, buf_results[0]);
+	ret |= readReg(MAX20303::REG_STATUS1, buf_results[1]);
+	ret |= readReg(MAX20303::REG_STATUS2, buf_results[2]);
+	ret |= readReg(MAX20303::REG_STATUS3, buf_results[3]);
+	ret |= readReg(MAX20303::REG_SYSTEM_ERROR, buf_results[4]);
+	return ret;
+}
+
+//******************************************************************************
+int MAX20303::Max20303_BatteryGauge(unsigned char *batterylevel){
+    int ret;
+    char data[2];
+
+    data[0] = 0x04;
+    ret = m_i2c->write(MAX20303_I2C_ADDR_FUEL_GAUGE, data, 1);
+    if(ret != 0){
+        printf("Max20303_FuelGauge has failed\r\n");
+    }
+
+    ret = m_i2c->read(MAX20303_I2C_ADDR_FUEL_GAUGE | 1, data, 2);
+    if(ret != 0){
+        printf("Max20303_FuelGauge has failed\r\n");
+    }
+
+    // if the level is more than 100 assume the battery is not connected
+    if(data[0] > 100){
+        *batterylevel = 0;
+    } else{
+
+        *batterylevel = data[0];
+    }
+    return 0;
+}
 
 
 //******************************************************************************
-int MAX20303::led0on(void) {
+int MAX20303::led0on(char enable) {
 
-	writeReg(REG_LED0_DIRECT, 0x21);
-
-	return MAX20303_NO_ERROR;
+	if(enable)
+		return writeReg(REG_LED0_DIRECT, 0x21);
+	else
+		return writeReg(REG_LED0_DIRECT, 0x01);
 }
 
 //******************************************************************************
-int MAX20303::BoostEnable(void) {
+int MAX20303::led1on(char enable) {
+	if(enable)
+		return writeReg(REG_LED1_DIRECT, 0x21);
+	else
+		return writeReg(REG_LED1_DIRECT, 0x01);
+}
 
-	writeReg(REG_AP_CMDOUT, 0x30);
+//******************************************************************************
+int MAX20303::led2on(char enable) {
+	if(enable)
+		return writeReg(REG_LED2_DIRECT, 0x21);
+	else
+		return writeReg(REG_LED2_DIRECT, 0x01);
+}
+
+
+//******************************************************************************
+int MAX20303::BoostEnable(void) {
 	writeReg(REG_AP_DATOUT3, 0x00);	// 00 : 5V
 	writeReg(REG_AP_DATOUT0, 0x01);	// Boost Enabled
-
+	writeReg(REG_AP_CMDOUT, 0x30);
 	return MAX20303_NO_ERROR;
 }