changeset 437:6c824f902934

Merged in Ideenmodellierer/ostc4/Improve_BatteryGasGauge (pull request #40) Improve BatteryGasGauge
author heinrichsweikamp <bitbucket@heinrichsweikamp.com>
date Mon, 24 Feb 2020 07:58:37 +0000
parents 2b4440f75434 (current diff) 079f32a8e68c (diff)
children 597243c68849
files
diffstat 6 files changed, 32 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/Discovery/Src/data_exchange_main.c	Tue Feb 18 12:41:45 2020 +0100
+++ b/Discovery/Src/data_exchange_main.c	Mon Feb 24 07:58:37 2020 +0000
@@ -416,14 +416,6 @@
 		
 		settingsHelperButtonSens_keepPercentageValues(settingsGetPointerStandard()->ButtonResponsiveness[3], settings->ButtonResponsiveness);
 		setButtonResponsiveness(settings->ButtonResponsiveness);
-		
-		// hw 160720 new lastKnownBatteryPercentage
-		if(!wasUpdateNotPowerOn)
-		{
-//			dataOut.data.newBatteryGaugePercentageFloat = settingsGetPointer()->lastKnownBatteryPercentage;
-			dataOut.data.newBatteryGaugePercentageFloat = 0;
-			dataOut.setBatteryGaugeNow = 1;
-		}
 	}
 }
 
--- a/Discovery/Src/tComm.c	Tue Feb 18 12:41:45 2020 +0100
+++ b/Discovery/Src/tComm.c	Mon Feb 24 07:58:37 2020 +0000
@@ -106,6 +106,7 @@
 #define BYTE_DOWNLOAD_MODE			(0xBB)
 #define BYTE_SERVICE_MODE			(0xAA)
 
+#define UART_OPERATION_TIMEOUT		(500u)		/* Timeout for common read / write operations (ms) */
 #define UART_TIMEOUT_SECONDS		(120u)		/* Timeout for keeping connection open and waiting for data */
 #define UART_TIMEOUT_LARGE_BLOCK 	(6000u)		/* Timeout (ms) for reception of an 16K data block (typical RX time ~4,5seconds) */
 
@@ -444,7 +445,7 @@
 	do
 	{
 		HAL_Delay(200);
-		if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBufferEscapeSequence, 3, 1000)== HAL_OK)
+		if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBufferEscapeSequence, 3, UART_OPERATION_TIMEOUT)== HAL_OK)
 		{
 			answer = tComm_CheckAnswerOK();
 		}
@@ -455,13 +456,13 @@
 	if(answer == HAL_OK)
 	{
 		answer = HAL_ERROR;
-		if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxDisconnect,sizeDisconnect , 1000)== HAL_OK)
+		if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxDisconnect,sizeDisconnect , UART_OPERATION_TIMEOUT)== HAL_OK)
 		{
 			answer = HAL_ERROR;
 			if(tComm_CheckAnswerOK() == HAL_OK)
 			{
 				answer = HAL_ERROR;
-				if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBufferEnd, 4, 1000) == HAL_OK)	/* exit terminal mode */
+				if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBufferEnd, 4, UART_OPERATION_TIMEOUT) == HAL_OK)	/* exit terminal mode */
 				{
 					answer = tComm_CheckAnswerOK();
 				}
@@ -536,7 +537,7 @@
 
     while((answer == prompt4D4C(receiveStartByteUart)) && (timeoutCounter < UART_TIMEOUT_SECONDS)) 	/* try receive once a second */
     {
-    	if(HAL_UART_Receive(&UartHandle, (uint8_t*)&localRx, 1, 1000)!= HAL_OK) 							
+    	if(HAL_UART_Receive(&UartHandle, (uint8_t*)&localRx, 1, UART_OPERATION_TIMEOUT)!= HAL_OK)
     	{
     		timeoutCounter++;
     		get_globalStateList(&status);
@@ -666,7 +667,7 @@
 
 #endif
         case 0xC1: // 	Start low-level bootloader
-            if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBuffer, 1, 1000)!= HAL_OK)
+            if(HAL_UART_Transmit(&UartHandle, (uint8_t*)aTxBuffer, 1, UART_OPERATION_TIMEOUT)!= HAL_OK)
                 return 0;
             break;
         default:
@@ -1926,7 +1927,7 @@
 	uint8_t answer;
 
 	memset(aRxBuffer,0,UART_CMD_BUF_SIZE);
-	if(HAL_UART_Receive(&UartHandle, (uint8_t*)aRxBuffer, sizeAnswer, 1000) == HAL_OK)
+	if(HAL_UART_Receive(&UartHandle, (uint8_t*)aRxBuffer, sizeAnswer, UART_OPERATION_TIMEOUT) == HAL_OK)
 	{
 		do
 		{
@@ -2098,7 +2099,7 @@
 		{
 			if(BmTmpConfig == BM_CONFIG_ECHO)	/* echo is not yet turned off => read and discard echo */
 			{
-				HAL_UART_Receive(&UartHandle, (uint8_t*)TxBuffer, CmdSize, 1000);
+				HAL_UART_Receive(&UartHandle, (uint8_t*)TxBuffer, CmdSize, UART_OPERATION_TIMEOUT);
 			}
 
 			result = tComm_CheckAnswerOK();
--- a/Discovery/Src/tMenuEditSystem.c	Tue Feb 18 12:41:45 2020 +0100
+++ b/Discovery/Src/tMenuEditSystem.c	Mon Feb 24 07:58:37 2020 +0000
@@ -1521,8 +1521,8 @@
         text[1] = TXT2BYTE_WarnBatteryLow;
         text[2] = 0;
         snprintf(&text[2],10,": %01.2fV",stateRealGetPointer()->lifeData.battery_voltage);
-        write_label_var(  30, 800, ME_Y_LINE4, &FontT42, text);
-
+        write_label_var(  30, 800, ME_Y_LINE5, &FontT42, text);
+        
         snprintf(&text[0],30,"Code: %X",getLicence());
         write_label_var(  30, 800, ME_Y_LINE6, &FontT42, text);
         break;
--- a/Small_CPU/CPU2-RTE.ld	Tue Feb 18 12:41:45 2020 +0100
+++ b/Small_CPU/CPU2-RTE.ld	Mon Feb 24 07:58:37 2020 +0000
@@ -181,7 +181,15 @@
 		*(.heap*)
 		__HeapLimit = .;
 	} > RAM
-
+	
+	/* .noinit section contains data which will not be change during startup */
+   .noinit  :
+   {
+     . = ALIGN(4);
+     *(.noinit*)
+     _end = . ;
+   }  > RAM
+  
 	/* .stack_dummy section doesn't contains any symbols. It is only
 	 * used for linker to calculate size of stack sections, and assign
 	 * values to stack symbols later */
--- a/Small_CPU/Src/baseCPU2.c	Tue Feb 18 12:41:45 2020 +0100
+++ b/Small_CPU/Src/baseCPU2.c	Mon Feb 24 07:58:37 2020 +0000
@@ -151,6 +151,8 @@
 #include "stm32f4xx_hal.h"
 #include <stdio.h>
 
+uint8_t coldstart __attribute__((section (".noinit")));
+
 uint8_t hasExternalClock(void) {
 	if ((TM_OTP_Read(0, 0) > 0) && (TM_OTP_Read(0, 0) < 0xFF))
 		return 1;
@@ -181,7 +183,9 @@
 		/* for safety reasons and coming functions */
 		.magic[0] = FIRMWARE_MAGIC_FIRST, .magic[1] = FIRMWARE_MAGIC_SECOND,
 		.magic[2] = FIRMWARE_MAGIC_CPU2_RTE, /* the magic byte for RTE */
-		.magic[3] = FIRMWARE_MAGIC_END };
+		.magic[3] = FIRMWARE_MAGIC_END
+};
+
 
 uint8_t firmwareVersionHigh(void) {
 	return cpu2_FirmwareData.versionFirst;
@@ -339,7 +343,11 @@
 	init_battery_gas_gauge();
 	HAL_Delay(10);
 	battery_gas_gauge_get_data();
-//	battery_gas_gauge_set(0);
+	if(coldstart != 0xA5)
+	{
+		coldstart = 0xA5;
+		battery_gas_gauge_set(0);
+	}
 
 	global.lifeData.battery_voltage = get_voltage();
 	global.lifeData.battery_charge = get_charge();
--- a/Small_CPU/Src/batteryGasGauge.c	Tue Feb 18 12:41:45 2020 +0100
+++ b/Small_CPU/Src/batteryGasGauge.c	Mon Feb 24 07:58:37 2020 +0000
@@ -64,7 +64,7 @@
 	buffer[0] = 0x01;
 
 	// F8 = 11111000:
-	// Vbat 3.0V (11)
+	// ADC auto mode (11)
 	// Prescale M = 128 (111)
 	// AL/CC pin disable (0)
 	// Shutdown (0)
@@ -127,8 +127,8 @@
 		// max/full: 0.085 mAh * 1 * 65535 = 5570 mAh
 		battery_f_charge_percent_local =  (float)(bufferReceive[2] * 256);
 		battery_f_charge_percent_local += (float)(bufferReceive[3]);
-		battery_f_charge_percent_local -= BGG_BATTERY_OFFSET;
-		battery_f_charge_percent_local /= BGG_BATTERY_DIVIDER;
+		battery_f_charge_percent_local -= BGG_BATTERY_OFFSET;		/* Because of the prescalar 128 the counter assumes a max value of 5570mAh => normalize to 3350mAh*/
+		battery_f_charge_percent_local /= BGG_BATTERY_DIVIDER;		/* transform to percentage */
 
 		if(battery_f_charge_percent_local < 0)
 			battery_f_charge_percent_local = 0;