aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2019-09-05 13:23:16 +0300
committerShlomo Hecht <shlomo@twine-s.com>2019-09-05 13:23:16 +0300
commit6bf0136ccdfa462247dc5e4ef5f4b2569ff21279 (patch)
tree3676e9d26c7fb6a14be13440ab644fc5b8e66adc /Software/Embedded_SW/Embedded
parent8aa8895ed7b0159c668aa0d0d71131ddd570ad6c (diff)
downloadTango-6bf0136ccdfa462247dc5e4ef5f4b2569ff21279.tar.gz
Tango-6bf0136ccdfa462247dc5e4ef5f4b2569ff21279.zip
EEPROM - midtanks and MCU serial number
Diffstat (limited to 'Software/Embedded_SW/Embedded')
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c29
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h6
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c26
3 files changed, 57 insertions, 4 deletions
diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c
index 4f0f0a827..1fa019d0d 100644
--- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c
+++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c
@@ -64,7 +64,7 @@ float MCU_E2PromReadMidtank_A(int MidtankId)
return ERROR;
}
EEPROMRead((uint32_t *)&Data,Address*4, 4);
- Report("MCU_E2PromRead",__FILE__,__LINE__,Address,RpWarning,(int)Data,0);
+ Report("MCU_E2PromRead",__FILE__,__LINE__,Address,RpWarning,(int)(Data*1000),0);
return (Data);
}
@@ -78,10 +78,35 @@ float MCU_E2PromReadMidtank_B(int MidtankId)
return ERROR;
}
EEPROMRead((uint32_t *)&Data,Address*4, 4);
- Report("MCU_E2PromRead",__FILE__,__LINE__,Address,RpWarning,(int)Data,0);
+ Report("MCU_E2PromRead",__FILE__,__LINE__,Address,RpWarning,(int)(Data*1000),0);
return (Data);
}
+uint32_t MCU_E2PromSerialNumProgram(char *Data)
+{
+ char * SerialNum = Data;
+ int len = strlen(SerialNum);
+ if (len > MAX_SERIAL_NUM_LEN)
+ {
+ Report("MCU_E2PromSerialNumProgram length error",__FILE__,__LINE__,len,RpWarning,(int)0,0);
+ return ERROR;
+ }
+ EEPROMProgram((uint32_t *)SerialNum, EEPROM_STORAGE_SERIAL_NUM*4, MAX_SERIAL_NUM_LEN);
+
+
+}
+uint32_t MCU_E2PromSerialNumRead(char* *Data)
+{
+ char SerialNum[MAX_SERIAL_NUM_LEN];
+ EEPROMRead((uint32_t *)SerialNum,EEPROM_STORAGE_SERIAL_NUM*4, MAX_SERIAL_NUM_LEN);
+
+ int len = strlen(SerialNum);
+ strcpy(Data,SerialNum);
+ Report("MCU_E2PromSerialNumRead length ",__FILE__,__LINE__,len,RpWarning,(int)0,0);
+
+ return len;
+
+}
//Each word may not be subject to more than a specific number of programming cycles before an
//erase cycle is required. In other words, for any given word, FlashProgram can only be called
diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h
index eb9993559..223f31005 100644
--- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h
+++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h
@@ -35,12 +35,18 @@ typedef enum {
EEPROM_STORAGE_MAC_ADDR,
MAX_EEPROM_STORAGE
}EEPROM_STORAGE_USAGE_ENUM;
+#define MAX_SERIAL_NUM_LEN 20
+#define SERIAL_NUM_ADDR EEPROM_STORAGE_SERIAL_NUM*4
+#define MAC_ADDR_ADDR (SERIAL_NUM_ADDR + MAX_SERIAL_NUM_LEN)
+
uint32_t MCU_E2PromProgram(int Address,uint32_t Data);
uint32_t MCU_E2PromRead(int Address,uint32_t *Data);
void MCU_E2PromProgramMidTank(int midtankId,float a,float b);
float MCU_E2PromReadMidtank_A(int MidtankId);
float MCU_E2PromReadMidtank_B(int MidtankId);
void MCU_E2PromInit(void);
+uint32_t MCU_E2PromSerialNumProgram(char *Data);
+uint32_t MCU_E2PromSerialNumRead(char* *Data);
diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
index c5f8c4df2..88dc96997 100644
--- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
+++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c
@@ -69,8 +69,12 @@ void *HWConfigurationLoadFromFile( uint32_t *NumOfBytes)
uint8_t* buffer = NULL;
*NumOfBytes = 0;
- Fresult = FileRead(HwConfigPath, NumOfBytes, &buffer);
- REPORT_IF_ERROR(Fresult, "HW Config File Read error", Fresult, RpError, buffer, 0);
+ Fresult = f_mkdir(SW_INFO_DIR);
+ if ((Fresult == FR_OK)||(Fresult == FR_EXIST))
+ {
+ Fresult = FileRead(HwConfigPath, NumOfBytes, &buffer);
+ REPORT_IF_ERROR(Fresult, "HW Config File Read error", Fresult, RpError, buffer, 0);
+ }
// if (Fresult)
// Report("HW Config File Read error", __FILE__,__LINE__, Fresult, RpError, buffer, 0);
@@ -481,6 +485,7 @@ uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest)
STATUS_RED_LED_OFF;
return OK;
}
+char Serial[21];
uint32_t MidTankDataSetupFunc(MessageContainer* requestContainer)
{
MessageContainer responseContainer;
@@ -491,6 +496,23 @@ uint32_t MidTankDataSetupFunc(MessageContainer* requestContainer)
Report("MidTankDataSetupFunc", __FILE__,request->midtankinfo[i]->midtankid,(int)(request->midtankinfo[i]->initialoffseta*1000), RpMessage, (int)(request->midtankinfo[i]->slopeb*1000), 0);
MCU_E2PromProgramMidTank(request->midtankinfo[i]->midtankid,request->midtankinfo[i]->initialoffseta,request->midtankinfo[i]->slopeb);
}
+ //debug only
+ Task_sleep(1000);
+ for (i = 0;i<8;i++)
+ {
+ float a=0,b=0;
+ a = MCU_E2PromReadMidtank_A(i);
+ b = MCU_E2PromReadMidtank_B(i);
+ Report("MidTankData Read", __FILE__,__LINE__,(int)(a*1000), RpMessage, (int)(b*1000), 0);
+ }
+ //debug only
+ Task_sleep(1000);
+ MCU_E2PromSerialNumProgram ("Take me to the sky");
+ memset (Serial,0,20);
+ MCU_E2PromSerialNumRead(&Serial);
+ Report(Serial, __FILE__,__LINE__,22, RpMessage, 21, 0);
+
+
MidTankDataSetupResponse response = MID_TANK_DATA_SETUP_RESPONSE__INIT;
responseContainer = createContainer(MESSAGE_TYPE__MidTankDataSetupResponse, requestContainer->token, true, &response, &mid_tank_data_setup_response__pack, &mid_tank_data_setup_response__get_packed_size);