Duy tran / Mbed OS iot_water_monitor_v2

Dependencies:   easy-connect-v16 Watchdog FP MQTTPacket RecordType-v-16 watersenor_and_temp_code

Revision:
33:5b90257d2d57
Parent:
32:8226837c56ae
Child:
34:601effb7b7fe
--- a/Flash/flash_programming.cpp	Mon Jan 08 18:07:56 2018 +0000
+++ b/Flash/flash_programming.cpp	Sun Jan 21 13:04:06 2018 +0000
@@ -38,9 +38,9 @@
     return ReturnValue;
 }
 
-int FP_WriteMode(uint32_t WriteModeValue) {
-    uint8_t  CurrentPage = FP_GetPage(MODE_BASE_ADDRESS);
-    uint32_t CurrentAddress = (MODE_BASE_ADDRESS + STEP_ADDRESS);
+int FP_WriteRelayStates(uint8_t RelayState1, uint8_t RelayState2) {
+    uint8_t  CurrentPage = FP_GetPage(RELAY_BASE_ADDRESS);
+    uint32_t CurrentAddress = RELAY1_ADDRESS;
     
     EraseInitStruct.TypeErase   = FLASH_TYPEERASE_PAGES;
     EraseInitStruct.Banks       = FLASH_BANK_1;
@@ -52,34 +52,68 @@
     }
     HAL_FLASH_Unlock();  
     
-    if (FP_ReadValue(CurrentAddress) == WriteModeValue) {
-        printf("Value does not change, no need to write\r\n");
+    if ((FP_ReadValue(RELAY1_ADDRESS) == RelayState1) &&
+        (FP_ReadValue(RELAY2_ADDRESS) == RelayState2)) {
+        printf("Relay values don't change, no need to write\r\n");
         HAL_FLASH_Lock();
         return PASSED;
     }
     if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK) {
         printf("Erase error, error num %d\r\n", HAL_FLASH_GetError());
     }  
-    if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, CurrentAddress, WriteModeValue) == HAL_OK) {
-        printf("Write OK\r\n");
-    }
-    else {
-        printf("Write failed, error num %d\r\n", HAL_FLASH_GetError());   
+    while (CurrentAddress < (RELAY2_ADDRESS + STEP_ADDRESS)) {
+        switch (CurrentAddress) {
+            case (RELAY1_ADDRESS): if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, CurrentAddress, RelayState1) == HAL_OK) {
+                                        printf("Write Relay 1 State OK\r\n");
+                                   }
+                                   else {
+                                        printf("Write Relay 1 State failed, error num %d\r\n", HAL_FLASH_GetError());
+                                   }
+            break;
+            case (RELAY2_ADDRESS): if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, CurrentAddress, RelayState2) == HAL_OK) {
+                                        printf("Write Relay 2 State OK\r\n");
+                                   }
+                                   else {
+                                        printf("Write Relay 2 State failed, error num %d\r\n", HAL_FLASH_GetError());
+                                   }
+            break;
+            default: break;   
+        }
+        CurrentAddress = CurrentAddress + STEP_ADDRESS;
     }
-    uint32_t readBack = FP_ReadValue(CurrentAddress);
-    printf("Read back: %d\r\n", readBack);   
-    if (readBack != WriteModeValue) {
-        printf("Write failed, wrong read back value\r\n");
-        HAL_FLASH_Lock();
-        return FAILED;
+
+    CurrentAddress = RELAY1_ADDRESS;
+    while (CurrentAddress < (RELAY2_ADDRESS + STEP_ADDRESS)) {
+        switch (CurrentAddress) {
+            case (RELAY1_ADDRESS): if (FP_ReadValue(CurrentAddress) == RelayState1) {
+                                    printf("Read back Relay 1 State: %d\r\n", FP_ReadValue(CurrentAddress));
+                                 }
+                                 else {
+                                    printf("Write Relay 1 State failed, wrong read back value\r\n"); 
+                                    HAL_FLASH_Lock();
+                                    return FAILED;
+                                 }
+            break;
+            case (RELAY2_ADDRESS): if (FP_ReadValue(CurrentAddress) == RelayState2) {
+                                        printf("Read back Relay 2 State: %d\r\n", FP_ReadValue(CurrentAddress));  
+                                    }
+                                    else {
+                                        printf("Write Relay 2 State failed, wrong read back value\r\n");
+                                        HAL_FLASH_Lock();
+                                        return FAILED;
+                                    }
+            break;
+            default: break;   
+        }
+        CurrentAddress = CurrentAddress + STEP_ADDRESS;
     }
     HAL_FLASH_Lock();
     return PASSED;
 }
 
-int FP_WriteConfigValues(uint8_t MinOxi, uint8_t MaxOxi, uint32_t UploadPeriod) {
+int FP_WriteConfigValues(uint8_t Mode, uint8_t MinOxi, uint8_t MaxOxi, uint32_t UploadPeriod) {
     uint8_t  CurrentPage    = FP_GetPage(CONF_BASE_ADDRESS);    
-    uint32_t CurrentAddress = MIN_OXI_ADDRESS;
+    uint32_t CurrentAddress = MODE_ADDRESS;
     EraseInitStruct.TypeErase   = FLASH_TYPEERASE_PAGES;
     EraseInitStruct.Banks       = FLASH_BANK_1;
     EraseInitStruct.Page        = CurrentPage;
@@ -90,18 +124,26 @@
     }
     HAL_FLASH_Unlock();  
     
-    if ((FP_ReadValue(MIN_OXI_ADDRESS) == MinOxi) &&
+    if ((FP_ReadValue(MODE_ADDRESS) == Mode) &&
+        (FP_ReadValue(MIN_OXI_ADDRESS) == MinOxi) &&
         (FP_ReadValue(MAX_OXI_ADDRESS) == MaxOxi) &&
-        (FP_ReadValue(UPLOAD_PERIOD_ARRESS) == UploadPeriod)) {
-        printf("Value does not change, no need to write\r\n");
+        (FP_ReadValue(UPLOAD_PERIOD_ADDRESS) == UploadPeriod)) {
+        printf("Configuration values don't change, no need to write\r\n");
         HAL_FLASH_Lock();
         return PASSED;
     }
     if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK) {
         printf("Erase error, error num %d\r\n", HAL_FLASH_GetError());
     }  
-    while (CurrentAddress < (UPLOAD_PERIOD_ARRESS + STEP_ADDRESS)) {
+    while (CurrentAddress < (UPLOAD_PERIOD_ADDRESS + STEP_ADDRESS)) {
         switch (CurrentAddress) {
+            case (MODE_ADDRESS): if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, CurrentAddress, Mode) == HAL_OK) {
+                                    printf("Write Mode OK\r\n");
+                                }
+                                else {
+                                    printf("Write Mode failed, error num %d\r\n", HAL_FLASH_GetError());
+                                }
+            break;
             case (MIN_OXI_ADDRESS): if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, CurrentAddress, MinOxi) == HAL_OK) {
                                         printf("Write MinOxi OK\r\n");
                                     }
@@ -116,7 +158,7 @@
                                         printf("Write MaxOxi failed, error num %d\r\n", HAL_FLASH_GetError());
                                     }
             break;
-            case (UPLOAD_PERIOD_ARRESS): if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, CurrentAddress, UploadPeriod) == HAL_OK) {
+            case (UPLOAD_PERIOD_ADDRESS): if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, CurrentAddress, UploadPeriod) == HAL_OK) {
                                         printf("Write UploadPeriod OK\r\n");
                                     }
                                     else {
@@ -128,9 +170,18 @@
         CurrentAddress = CurrentAddress + STEP_ADDRESS;
     }
     
-    CurrentAddress = MIN_OXI_ADDRESS;
-    while (CurrentAddress < (UPLOAD_PERIOD_ARRESS + STEP_ADDRESS)) {
+    CurrentAddress = MODE_ADDRESS;
+    while (CurrentAddress < (UPLOAD_PERIOD_ADDRESS + STEP_ADDRESS)) {
         switch (CurrentAddress) {
+            case (MODE_ADDRESS): if (FP_ReadValue(CurrentAddress) == Mode) {
+                                    printf("Read back Mode: %d\r\n", FP_ReadValue(CurrentAddress));
+                                 }
+                                 else {
+                                    printf("Write Mode failed, wrong read back value\r\n"); 
+                                    HAL_FLASH_Lock();
+                                    return FAILED;
+                                 }
+            break;
             case (MIN_OXI_ADDRESS): if (FP_ReadValue(CurrentAddress) == MinOxi) {
                                         printf("Read back MinOxi: %d\r\n", FP_ReadValue(CurrentAddress));  
                                     }
@@ -149,7 +200,7 @@
                                         return FAILED;
                                     }
             break;
-            case (UPLOAD_PERIOD_ARRESS): if (FP_ReadValue(CurrentAddress) == UploadPeriod) {
+            case (UPLOAD_PERIOD_ADDRESS): if (FP_ReadValue(CurrentAddress) == UploadPeriod) {
                                         printf("Read back UploadPeriod: %d\r\n", FP_ReadValue(CurrentAddress));  
                                     }
                                     else {