Rationalisation des messages batterie, la tension n'est plus envoyé que pour test

This commit is contained in:
dimercur 2023-10-10 17:31:35 +02:00
parent 7d9e38f3ef
commit c5250eb3f4
7 changed files with 203 additions and 126 deletions

View file

@ -327,17 +327,6 @@
<outputType id="org.eclipse.cdt.managedbuilder.ui.rcbs.outputtype.1151842665.1610208999" name="Resource Custom Build Step Output Type"/>
</tool>
</fileInfo>
<fileInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1504381080.727722516.584766423" name="moteurs.c" rcbsApplicability="disable" resourcePath="Application/moteurs.c" toolsToInvoke="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985.1839636316">
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985.1839636316" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985">
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.422540263" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
</tool>
<tool customBuildStep="true" id="org.eclipse.cdt.managedbuilder.ui.rcbs.1811836732" name="Resource Custom Build Step">
<inputType id="org.eclipse.cdt.managedbuilder.ui.rcbs.inputtype.1316072342" name="Resource Custom Build Step Input Type">
<additionalInput kind="additionalinputdependency"/>
</inputType>
<outputType id="org.eclipse.cdt.managedbuilder.ui.rcbs.outputtype.861774528" name="Resource Custom Build Step Output Type"/>
</tool>
</fileInfo>
<fileInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1504381080.727722516.Application/application.c" name="application.c" rcbsApplicability="disable" resourcePath="Application/application.c" toolsToInvoke="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.983087978">
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.983087978" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985">
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.606614377" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.o0" valueType="enumerated"/>
@ -350,6 +339,18 @@
<outputType id="org.eclipse.cdt.managedbuilder.ui.rcbs.outputtype.1700687045.61103792" name="Resource Custom Build Step Output Type"/>
</tool>
</fileInfo>
<fileInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1504381080.727722516.200947957" name="leds.c" rcbsApplicability="disable" resourcePath="Application/leds.c" toolsToInvoke="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985.155574165">
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985.155574165" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985">
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.301013410" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.o0" valueType="enumerated"/>
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.1898228332" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
</tool>
<tool customBuildStep="true" id="org.eclipse.cdt.managedbuilder.ui.rcbs.2113983486" name="Resource Custom Build Step">
<inputType id="org.eclipse.cdt.managedbuilder.ui.rcbs.inputtype.1308025369" name="Resource Custom Build Step Input Type">
<additionalInput kind="additionalinputdependency" paths=""/>
</inputType>
<outputType id="org.eclipse.cdt.managedbuilder.ui.rcbs.outputtype.555839812" name="Resource Custom Build Step Output Type"/>
</tool>
</fileInfo>
<fileInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1504381080.727722516.53808517" name="batterie.c" rcbsApplicability="disable" resourcePath="Application/batterie.c" toolsToInvoke="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985.1171631638">
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985.1171631638" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1017015985">
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.2016549754" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.o0" valueType="enumerated"/>

View file

@ -177,20 +177,23 @@ void APPLICATION_MainThread(void* params) {
break;
case MSG_ID_BAT_CHARGE_OFF:
case MSG_ID_BAT_CHARGE_COMPLETE:
systemInfos.batteryVoltage = *((uint16_t*)msg.data);
systemInfos.batteryUpdate = 1;
if (msg.id == MSG_ID_BAT_CHARGE_COMPLETE)
systemInfos.inCharge =1;
else
systemInfos.inCharge =0;
break;
case MSG_ID_BAT_CHARGE_ON:
systemInfos.inCharge =1;
break;
/* TODO
* Revoir la gestion de la batterie ici
*/
// case MSG_ID_BAT_CHARGE_OFF:
// case MSG_ID_BAT_CHARGE_COMPLETE:
// systemInfos.batteryVoltage = *((uint16_t*)msg.data);
// systemInfos.batteryUpdate = 1;
//
// if (msg.id == MSG_ID_BAT_CHARGE_COMPLETE)
// systemInfos.inCharge =1;
// else
// systemInfos.inCharge =0;
// break;
//
// case MSG_ID_BAT_CHARGE_ON:
// systemInfos.inCharge =1;
// break;
case MSG_ID_MOTEURS_STOP:
systemInfos.endOfMouvement= 1;
@ -215,15 +218,18 @@ void APPLICATION_StateMachine() {
APPLICATION_TransitionToNewState(stateInCharge);
}
if (systemInfos.batteryUpdate) {
ledState = APPLICATION_BatteryLevel(systemInfos.batteryVoltage, systemInfos.state);
if (ledState == leds_niveau_bat_0)
APPLICATION_TransitionToNewState(stateLowBatDisable);
else if (systemInfos.state==stateStartup) {
MESSAGE_SendMailbox(LEDS_Mailbox, MSG_ID_LED_ETAT, APPLICATION_Mailbox, (void*)&ledState);
}
}
/* TODO
* Revoir la gestion de la batterie ici
*/
// if (systemInfos.batteryUpdate) {
// ledState = APPLICATION_BatteryLevel(systemInfos.batteryVoltage, systemInfos.state);
//
// if (ledState == leds_niveau_bat_0)
// APPLICATION_TransitionToNewState(stateLowBatDisable);
// else if (systemInfos.state==stateStartup) {
// MESSAGE_SendMailbox(LEDS_Mailbox, MSG_ID_LED_ETAT, APPLICATION_Mailbox, (void*)&ledState);
// }
// }
if (systemInfos.cmd != CMD_NONE) {
/* a newer command just arrived, process it
@ -353,8 +359,9 @@ void APPLICATION_TransitionToNewState(APPLICATION_State new_state) {
systemTimeout.watchdogEnabled=0;
break;
case stateLowBatDisable:
ledState = leds_charge_bat_0;
MESSAGE_SendMailbox(LEDS_Mailbox, MSG_ID_LED_ETAT, APPLICATION_Mailbox, (void*)&ledState);
ledState = leds_bat_critical_low;
LEDS_Set(ledState);
//MESSAGE_SendMailbox(LEDS_Mailbox, MSG_ID_LED_ETAT, APPLICATION_Mailbox, (void*)&ledState);
systemTimeout.watchdogEnabled=0;
vTaskDelay(pdMS_TO_TICKS(4000)); // wait 4s
@ -369,24 +376,6 @@ void APPLICATION_TransitionToNewState(APPLICATION_State new_state) {
systemInfos.state = new_state;
}
const uint8_t APPLICATION_NiveauBatteryNormal[5] = {
0
};
const uint8_t APPLICATION_NiveauBatteryCharge[5] = {
0
};
LEDS_State APPLICATION_BatteryLevel(uint8_t voltage, APPLICATION_State state) {
LEDS_State ledState=leds_niveau_bat_0;
/* TODO: A faire
* Pour l'instant, testons les niveaux de batterie
*/
ledState = leds_niveau_bat_5;
return ledState;
}
void APPLICATION_PowerOff() {
/*
* TODO: a decommenter quand le code sera debuggé

View file

@ -117,9 +117,28 @@ int BATTERIE_LireTension(uint16_t *val) {
return 0;
}
const uint8_t BATTERIE_NiveauBatteryNormal[5] = {
0
};
const uint8_t BATTERIE_NiveauBatteryCharge[5] = {
0
};
uint16_t BATTERIE_BatteryLevel(uint8_t voltage, BATTERIE_StatusChargerTypedef chargerStatus) {
uint16_t msgId=0;
/* TODO: A faire
* Pour l'instant, testons les niveaux de batterie
*/
return msgId;
}
void BATTERIE_VoltageThread(void* params) {
static uint16_t tension;
BATTERIE_StatusChargerTypedef currentStatus;
uint16_t messageID;
TickType_t xLastWakeTime;
@ -128,16 +147,21 @@ void BATTERIE_VoltageThread(void* params) {
while (1) {
if (BATTERIE_LireTension(&tension) ==0) {
currentStatus = BATTERIE_LireStatusChargeur();
if (currentStatus == CHARGEUR_ERROR)
MESSAGE_SendMailbox(APPLICATION_Mailbox, MSG_ID_BAT_CHARGE_ERR, (QueueHandle_t)0x0, (void*)NULL);
else if (currentStatus == CHARGEUR_IN_CHARGE)
/*else if (currentStatus == CHARGEUR_IN_CHARGE)
MESSAGE_SendMailbox(APPLICATION_Mailbox, MSG_ID_BAT_CHARGE_ON, (QueueHandle_t)0x0, (void*)&tension);
else if (currentStatus == CHARGEUR_CHARGE_COMPLETE)
MESSAGE_SendMailbox(APPLICATION_Mailbox, MSG_ID_BAT_CHARGE_COMPLETE, (QueueHandle_t)0x0, (void*)&tension);
else
MESSAGE_SendMailbox(APPLICATION_Mailbox, MSG_ID_BAT_CHARGE_OFF, (QueueHandle_t)0x0, (void*)&tension);
MESSAGE_SendMailbox(APPLICATION_Mailbox, MSG_ID_BAT_CHARGE_OFF, (QueueHandle_t)0x0, (void*)&tension);*/
messageID = BATTERIE_BatteryLevel(tension, currentStatus);
MESSAGE_SendMailbox(APPLICATION_Mailbox, messageID, (QueueHandle_t)0x0, (void*)NULL);
#ifdef TESTS
MESSAGE_SendMailbox(APPLICATION_Mailbox, MSG_ID_BAT_LEVEL, (QueueHandle_t)0x0, (void*)&tension);
#endif /* TESTS*/
} else {
MESSAGE_SendMailbox(APPLICATION_Mailbox, MSG_ID_BAT_ADC_ERR, (QueueHandle_t)0x0, (void*)0x0);
}

View file

@ -65,9 +65,35 @@
#define LED_PATTERN_DIGIT_7 28
#define LED_PATTERN_DIGIT_8 29
#define LED_PATTERN_DIGIT_9 30
#define LED_PATTERN_DIGIT_UNKNOWN 31
#define LED_PATTERN_DIGIT_C 31
#define LED_PATTERN_DIGIT_L 32
#define LED_PATTERN_DIGIT_B 33
#define LED_PATTERN_DIGIT_UNKNOWN 34
#define LED_MAX_PATTERNS 32
#define LED_MAX_PATTERNS 35
/*
* Relation entre segment et nom
*
* Avant du robot
*
*
* D
* -----
* | |
* C | | E
* | G |
* -----
* | |
* B | | F
* | |
* -----
* A
*
*
* Arriere du robot
*
*/
uint16_t LEDS_Patterns [LED_MAX_PATTERNS][4]= {
// GPIOA ON / GPIOB ON / GPIOA OFF / GPIOB OFF
@ -102,7 +128,10 @@ uint16_t LEDS_Patterns [LED_MAX_PATTERNS][4]= {
{ LED_SEG_D_Pin|LED_SEG_E_Pin|LED_SEG_F_Pin, 0, LED_SEG_G_Pin|LED_SEG_DP_Pin, LED_SEG_A_Pin|LED_SEG_B_Pin|LED_SEG_C_Pin}, // 7
{ LED_SEG_D_Pin|LED_SEG_E_Pin|LED_SEG_F_Pin|LED_SEG_G_Pin, LED_SEG_A_Pin|LED_SEG_B_Pin|LED_SEG_C_Pin, LED_SEG_DP_Pin, 0}, // 8
{ LED_SEG_D_Pin|LED_SEG_E_Pin|LED_SEG_F_Pin|LED_SEG_G_Pin, LED_SEG_A_Pin|LED_SEG_C_Pin, LED_SEG_DP_Pin, LED_SEG_B_Pin}, // 9
{ LED_SEG_D_Pin|LED_SEG_E_Pin|LED_SEG_G_Pin, LED_SEG_B_Pin, LED_SEG_G_Pin|LED_SEG_DP_Pin, LED_SEG_A_Pin|LED_SEG_C_Pin} // ?
{ LED_SEG_D_Pin, LED_SEG_A_Pin|LED_SEG_B_Pin|LED_SEG_C_Pin, LED_SEG_E_Pin|LED_SEG_F_Pin|LED_SEG_G_Pin|LED_SEG_DP_Pin, 0}, // C
{ 0, LED_SEG_A_Pin|LED_SEG_B_Pin|LED_SEG_C_Pin, LED_SEG_D_Pin|LED_SEG_E_Pin|LED_SEG_F_Pin|LED_SEG_G_Pin|LED_SEG_DP_Pin, 0},// L
{ LED_SEG_F_Pin|LED_SEG_G_Pin, LED_SEG_A_Pin|LED_SEG_B_Pin|LED_SEG_C_Pin, LED_SEG_D_Pin|LED_SEG_E_Pin|LED_SEG_DP_Pin, 0}, // b
{ LED_SEG_D_Pin|LED_SEG_E_Pin|LED_SEG_G_Pin, LED_SEG_B_Pin, LED_SEG_F_Pin|LED_SEG_DP_Pin, LED_SEG_A_Pin|LED_SEG_C_Pin} // ?
};
LEDS_State LEDS_Animation;
@ -150,6 +179,16 @@ void LEDS_Init(void) {
vTaskResume(xHandleLedsHandler);
}
void LEDS_Set(LEDS_State state) {
static LEDS_State leds_state;
if ((state>=leds_off) && (state <=leds_state_unknown)) {
leds_state = state;
MESSAGE_SendMailbox(LEDS_Mailbox, MSG_ID_LED_ETAT,
(QueueHandle_t)0x0, (void*) &leds_state);
}
}
void LEDS_ShowPattern(uint8_t pattern) {
if (pattern < LED_MAX_PATTERNS) {
HAL_GPIO_WritePin(GPIOA, LEDS_Patterns[pattern][2], GPIO_PIN_RESET);
@ -240,16 +279,25 @@ void LEDS_ActionThread(void* params) {
if (cnt>5) cnt=0;
LEDS_ShowPattern(LED_PATTERN_RUN_WITH_WATCHDOG_0+cnt);
break;
case leds_niveau_bat_0:
case leds_bat_critical_low:
if (cnt<3)
LEDS_ShowPattern(LED_PATTERN_DIGIT_C);
else if (cnt<6)
LEDS_ShowPattern(LED_PATTERN_DIGIT_L);
else if (cnt <9)
LEDS_ShowPattern(LED_PATTERN_DIGIT_B);
else if (cnt <12)
LEDS_ShowPattern(LED_PATTERN_ALL_OFF);
else
cnt=0;
break;
case leds_bat_low:
if (!(cnt%2))
LEDS_ShowPattern(LED_PATTERN_BAT_SPRITE_1);
else
LEDS_ShowPattern(LED_PATTERN_ALL_OFF);
break;
case leds_niveau_bat_1:
LEDS_ShowPattern(LED_PATTERN_BAT_SPRITE_1);
break;
case leds_niveau_bat_2:
case leds_bat_med:
if (cnt<3)
LEDS_ShowPattern(LED_PATTERN_BAT_SPRITE_1);
else if (cnt<6)
@ -257,15 +305,7 @@ void LEDS_ActionThread(void* params) {
else
cnt=0;
break;
case leds_niveau_bat_3:
if (cnt<3)
LEDS_ShowPattern(LED_PATTERN_BAT_SPRITE_1);
else if (cnt<6)
LEDS_ShowPattern(LED_PATTERN_BAT_SPRITE_2);
else
cnt=7; // on maintient l'affichage de deux barres
break;
case leds_niveau_bat_4:
case leds_bat_high:
if (cnt<3)
LEDS_ShowPattern(LED_PATTERN_BAT_SPRITE_1);
else if (cnt<6)
@ -275,18 +315,7 @@ void LEDS_ActionThread(void* params) {
else
cnt=3;
break;
case leds_niveau_bat_5:
if (cnt<3)
LEDS_ShowPattern(LED_PATTERN_BAT_SPRITE_1);
else if (cnt<6)
LEDS_ShowPattern(LED_PATTERN_BAT_SPRITE_2);
else if (cnt <9)
LEDS_ShowPattern(LED_PATTERN_BAT_SPRITE_3);
else
cnt=10;
break;
case leds_charge_bat_0:
case leds_charge_bat_1:
case leds_bat_charge_low:
if (cnt<3)
LEDS_ShowPattern(LED_PATTERN_BAT_SPRITE_1);
else if (cnt<6)
@ -298,8 +327,7 @@ void LEDS_ActionThread(void* params) {
else
cnt=0;
break;
case leds_charge_bat_2:
case leds_charge_bat_3:
case leds_bat_charge_med:
if (cnt<3)
LEDS_ShowPattern(LED_PATTERN_BAT_SPRITE_2);
else if (cnt<6)
@ -309,8 +337,7 @@ void LEDS_ActionThread(void* params) {
else
cnt=0;
break;
case leds_charge_bat_4:
case leds_charge_bat_5:
case leds_bat_charge_high:
if (cnt<3)
LEDS_ShowPattern(LED_PATTERN_BAT_SPRITE_3);
else if (cnt<6)
@ -318,6 +345,11 @@ void LEDS_ActionThread(void* params) {
else
cnt=0;
break;
case leds_bat_charge_complete:
LEDS_ShowPattern(LED_PATTERN_BAT_SPRITE_3);
cnt=0;
break;
case leds_erreur_1:
if (cnt<5)
LEDS_ShowPattern(LED_PATTERN_ERROR);

View file

@ -15,18 +15,14 @@ typedef enum {
leds_idle,
leds_run,
leds_run_with_watchdog,
leds_niveau_bat_0,
leds_niveau_bat_1,
leds_niveau_bat_2,
leds_niveau_bat_3,
leds_niveau_bat_4,
leds_niveau_bat_5,
leds_charge_bat_0,
leds_charge_bat_1,
leds_charge_bat_2,
leds_charge_bat_3,
leds_charge_bat_4,
leds_charge_bat_5,
leds_bat_critical_low,
leds_bat_low,
leds_bat_med,
leds_bat_high,
leds_bat_charge_low,
leds_bat_charge_med,
leds_bat_charge_high,
leds_bat_charge_complete,
leds_erreur_1,
leds_erreur_2,
leds_erreur_3,
@ -36,4 +32,6 @@ typedef enum {
} LEDS_State;
void LEDS_Init(void);
void LEDS_Set(LEDS_State state);
#endif /* INC_LEDS_H_ */

View file

@ -26,11 +26,20 @@ extern QueueHandle_t XBEE_Mailbox;
#define MSG_ID_LED_ETAT 0x10
#define MSG_ID_BAT_CHARGE_COMPLETE 0x20
#define MSG_ID_BAT_CHARGE_ON 0x21
#define MSG_ID_BAT_CHARGE_OFF 0x22
#define MSG_ID_BAT_CHARGE_ERR 0x23
#define MSG_ID_BAT_ADC_ERR 0x24
#define MSG_ID_BAT_CHARGE_ERR 0x20
#define MSG_ID_BAT_ADC_ERR 0x21
#define MSG_ID_BAT_LEVEL 0x22
#define MSG_ID_BAT_CRITICAL_LOW 0x23
#define MSG_ID_BAT_LOW 0x24
#define MSG_ID_BAT_MED 0x25
#define MSG_ID_BAT_HIGH 0x26
#define MSG_ID_BAT_CHARGE_LOW 0x27
#define MSG_ID_BAT_CHARGE_MED 0x28
#define MSG_ID_BAT_CHARGE_HIGH 0x29
#define MSG_ID_BAT_CHARGE_COMPLETE 0x2A
//#define MSG_ID_BAT_CHARGE_ON 0x23
//#define MSG_ID_BAT_CHARGE_OFF 0x24
#define MSG_ID_BUTTON_PRESSED 0x30

View file

@ -27,7 +27,7 @@ StackType_t xStackBasicTests[ STACK_SIZE ];
TaskHandle_t xHandleBasicTests = NULL;
typedef enum {
LED_Tests=1,
LEDS_Tests=1,
XBEE_Tests,
COMMANDS_Tests,
BATTERY_Tests,
@ -35,7 +35,7 @@ typedef enum {
MISC_Tests
} TESTS_Type;
TESTS_Type TESTS_Nbr=MOTEURS_Tests; // Number indicating which test is being run
TESTS_Type TESTS_Nbr=LEDS_Tests; // Number indicating which test is being run
void TESTS_BasicTests(void* params);
@ -67,24 +67,24 @@ void TESTS_Init(void) {
}
void TESTS_BasicTests(void* params) {
static LEDS_State ledsStates = leds_off;
static LEDS_State ledsState = leds_off;
MESSAGE_Typedef msg;
CMD_Generic* cmd;
char* ans;
char str[100];
ledsStates = leds_run;
MESSAGE_SendMailbox(LEDS_Mailbox, MSG_ID_LED_ETAT, APPLICATION_Mailbox, (void*)&ledsStates); // show program is running
ledsState = leds_run;
MESSAGE_SendMailbox(LEDS_Mailbox, MSG_ID_LED_ETAT, APPLICATION_Mailbox, (void*)&ledsState); // show program is running
switch (TESTS_Nbr) {
case LED_Tests: //Leds tests
case LEDS_Tests: //Leds tests
while (ledsStates<=leds_state_unknown) {
ledsStates++;
MESSAGE_SendMailbox(LEDS_Mailbox, MSG_ID_LED_ETAT, APPLICATION_Mailbox, (void*)&ledsStates);
while (ledsState<=leds_state_unknown) {
//MESSAGE_SendMailbox(LEDS_Mailbox, MSG_ID_LED_ETAT, APPLICATION_Mailbox, (void*)&ledsState);
LEDS_Set(ledsState);
vTaskDelay(pdMS_TO_TICKS(TESTS_PERIODE)); // wait 10s
ledsState++;
}
break;
case XBEE_Tests: // Xbee tests
@ -220,32 +220,56 @@ void TESTS_BasicTests(void* params) {
}
break;
case BATTERY_Tests:
LEDS_Set(leds_off);
while (1) {
//char* str;
msg = MESSAGE_ReadMailbox(APPLICATION_Mailbox); // Wait for a message from Xbee
//str = (char*)malloc(100); /* allocate a buffer of 100 bytes */
str[0]=0;
switch (msg.id) {
case MSG_ID_BAT_LEVEL:
snprintf(str, 99, "Bat level %u\r", *((uint16_t*)msg.data));
break;
case MSG_ID_BAT_ADC_ERR:
snprintf(str, 99, "ADC error received\r");
break;
case MSG_ID_BAT_CHARGE_COMPLETE:
snprintf(str, 99, "Charge complete (plug in) [Level = %u]\r", *((uint16_t*)msg.data));
snprintf(str, 99, "Charge complete (plug in)\r");
LEDS_Set(leds_bat_charge_complete);
break;
case MSG_ID_BAT_CHARGE_ON:
snprintf(str, 99, "Charging (plug in) [Level = %u]\r", *((uint16_t*)msg.data));
case MSG_ID_BAT_CHARGE_HIGH:
snprintf(str, 99, "Charge high (plug in)\r");
LEDS_Set(leds_bat_charge_high);
break;
case MSG_ID_BAT_CHARGE_OFF:
snprintf(str, 99, "Not in charge (plug removed) [Level = %u]\r", *((uint16_t*)msg.data));
case MSG_ID_BAT_CHARGE_MED:
snprintf(str, 99, "Charge med (plug in)\r");
LEDS_Set(leds_bat_charge_med);
break;
case MSG_ID_BAT_CHARGE_LOW:
snprintf(str, 99, "Charge low (plug in)\r");
LEDS_Set(leds_bat_charge_low);
break;
case MSG_ID_BAT_HIGH:
snprintf(str, 99, "Battery high (unplugged)\r");
LEDS_Set(leds_bat_high);
break;
case MSG_ID_BAT_MED:
snprintf(str, 99, "Battery med (unplugged)\r");
LEDS_Set(leds_bat_med);
break;
case MSG_ID_BAT_LOW:
snprintf(str, 99, "Battery low (unplugged)\r");
LEDS_Set(leds_bat_low);
break;
case MSG_ID_BAT_CRITICAL_LOW:
snprintf(str, 99, "Battery critical low (unplugged)\r");
LEDS_Set(leds_bat_critical_low);
break;
case MSG_ID_BAT_CHARGE_ERR:
snprintf(str, 99, "Charge error (plug in)\r");
LEDS_Set(leds_erreur_2);
break;
default:
//free(str); // buffer alloué non utilisé
break;
}