From 45aded1213ff37e679449a52a3028c6565af7303 Mon Sep 17 00:00:00 2001 From: Ronen Sberlo Date: Tue, 5 Jan 2021 13:27:35 +0200 Subject: eeprom float read/write --- .../Embedded/Drivers/flash_ram/MCU_E2Prom.c | 70 +++++++++++++++++----- .../Embedded/Drivers/flash_ram/MCU_E2Prom.h | 4 +- .../Embedded/Modules/Stubs_Handler/Procedure.c | 48 ++++++++++++++- 3 files changed, 106 insertions(+), 16 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 20c6d5a00..5cf4f5872 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.c @@ -45,6 +45,7 @@ uint32_t MCU_E2PromProgram(int Address,uint32_t Data) return (EEPROMProgram((uint32_t *)&Buffer, Address*4, 4)); #endif } + uint32_t MCU_E2PromRead(int Address,uint32_t *Data) { if (Address>=MAX_EEPROM_STORAGE) @@ -60,6 +61,44 @@ uint32_t MCU_E2PromRead(int Address,uint32_t *Data) return OK; } + +uint32_t MCU_E2PromProgramFloat(int Address,float Data) +{ + float Buffer = Data; + if (Address>=MAX_EEPROM_STORAGE) + { + Report("MCU_E2PromProgram Error",__FILE__,__LINE__,Address,RpWarning,Data,0); + return ERROR; + } + if ((Address>=EEPROM_STORAGE_DANCER_0)&&(Address<=EEPROM_STORAGE_DANCER_2)) + { + Report("~~~~~~Store dancers eeprom ",__FILE__,__LINE__,(int)Address,RpWarning,(int)Data,0); + + } + Report("MCU_E2PromProgram",__FILE__,__LINE__,Address,RpWarning,(int)Data*1000,0); +#ifdef EVALUATION_BOARD + return 0; +#else + return (EEPROMProgram((float *)&Buffer, Address*4, 4)); +#endif +} + +uint32_t MCU_E2PromReadFloat(int Address,float *Data) +{ + if (Address>=MAX_EEPROM_STORAGE) + { + Report("MCU_E2PromRead Error",__FILE__,__LINE__,Address,RpWarning,(int)(*Data)*1000,0); + //return ERROR; + } +#ifndef EVALUATION_BOARD + EEPROMRead((float *)Data,Address*4, 4); +#endif + Report("MCU_E2PromRead",__FILE__,__LINE__,Address,RpWarning,(int)(*Data)*1000,0); + + return OK; + +} + /**************************************************/ uint32_t MCU_E2PromProgramChunk(int Address,uint16_t Length,uint32_t Data) { @@ -362,6 +401,7 @@ void MainCardEEpromWriteRequestFunc(MessageContainer* requestContainer) stub_main_card_eeprom_write_request__free_unpacked(request,NULL); } + uint32_t BtsrSaveParamsToEeprom(void *Data) { BTSRParameters* BtsrPrameters = Data; @@ -373,17 +413,17 @@ uint32_t BtsrSaveParamsToEeprom(void *Data) if (memcmp(BtsrPrameters,&ExistingBtsrPrameters,sizeof(ExistingBtsrPrameters))) { data = BtsrPrameters->feedingtension; - status |= MCU_E2PromProgram(EEPROM_BTSR_FEEDING_TENSION, data); + status |= MCU_E2PromProgramFloat(EEPROM_BTSR_FEEDING_TENSION, data); status |= MCU_E2PromProgram(EEPROM_BTSR_TYPE, BtsrPrameters->btsryarntype); status |= MCU_E2PromProgram(EEPROM_BTSR_APPLICATION, BtsrPrameters->btsrapplicationtype); data = BtsrPrameters->threadlengthfactor; - status |= MCU_E2PromProgram(EEPROM_BTSR_LENGTH_OFFSET, data); + status |= MCU_E2PromProgramFloat(EEPROM_BTSR_LENGTH_OFFSET, data); data = BtsrPrameters->tensionerror; - status |= MCU_E2PromProgram(EEPROM_BTSR_TENSION_ERROR, data); + status |= MCU_E2PromProgramFloat(EEPROM_BTSR_TENSION_ERROR, data); data = BtsrPrameters->spooltension; - status |= MCU_E2PromProgram(EEPROM_BTSR_SPOOL_TENSION, data); + status |= MCU_E2PromProgramFloat(EEPROM_BTSR_SPOOL_TENSION, data); data = BtsrPrameters->exittension; - status |= MCU_E2PromProgram(EEPROM_BTSR_EXIT_TENSION, data); + status |= MCU_E2PromProgramFloat(EEPROM_BTSR_EXIT_TENSION, data); } return status; } @@ -393,19 +433,21 @@ uint32_t BtsrReadParamsFromEeprom(void *Data) BTSRParameters* BtsrPrameters = Data; uint32_t status = 0; float data; - status |= MCU_E2PromRead(EEPROM_BTSR_FEEDING_TENSION, &data); + uint32_t value; + + status |= MCU_E2PromReadFloat(EEPROM_BTSR_FEEDING_TENSION, &data); BtsrPrameters->feedingtension = data; - status |= MCU_E2PromRead(EEPROM_BTSR_TYPE, &data); - BtsrPrameters->btsryarntype = data; - status |= MCU_E2PromRead(EEPROM_BTSR_APPLICATION, &data); - BtsrPrameters->btsrapplicationtype = data; - status |= MCU_E2PromRead(EEPROM_BTSR_LENGTH_OFFSET, &data); + status |= MCU_E2PromRead(EEPROM_BTSR_TYPE, &value); + BtsrPrameters->btsryarntype = value; + status |= MCU_E2PromRead(EEPROM_BTSR_APPLICATION, &value); + BtsrPrameters->btsrapplicationtype = value; + status |= MCU_E2PromReadFloat(EEPROM_BTSR_LENGTH_OFFSET, &data); BtsrPrameters->threadlengthfactor = data; - status |= MCU_E2PromRead(EEPROM_BTSR_TENSION_ERROR, &data); + status |= MCU_E2PromReadFloat(EEPROM_BTSR_TENSION_ERROR, &data); BtsrPrameters->tensionerror = data; - status |= MCU_E2PromRead(EEPROM_BTSR_SPOOL_TENSION, &data); + status |= MCU_E2PromReadFloat(EEPROM_BTSR_SPOOL_TENSION, &data); BtsrPrameters->spooltension = data; - status |= MCU_E2PromRead(EEPROM_BTSR_EXIT_TENSION, &data); + status |= MCU_E2PromReadFloat(EEPROM_BTSR_EXIT_TENSION, &data); BtsrPrameters->exittension = data; Report("BtsrReadParamsFromEeprom",__FILE__,__LINE__,(int)(BtsrPrameters->feedingtension*1000),RpWarning,(int)(BtsrPrameters->tensionerror*1000),(int)(BtsrPrameters->exittension*1000)); Report("BtsrReadParamsFromEeprom",__FILE__,__LINE__,(int)(BtsrPrameters->btsrapplicationtype),RpWarning,(int)(BtsrPrameters->btsryarntype),(int)(BtsrPrameters->threadlengthfactor*1000)); 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 24f229b2c..297ce1efe 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h @@ -68,7 +68,7 @@ typedef enum { ORIFICE3_ZERO_VALUE_ADDR, }EEPROM_ADDRESSES;*/ -#define EEPROM_RESET_REASON_HEAD_ADDRESS 160 +#define EEPROM_RESET_REASON_HEAD_ADDRESS 300 #define EEPROM_RESET_REASON_MAX_DATA 80 #define DISPENSERS_MAP_IN_EEPROM 0x200 @@ -82,6 +82,8 @@ void MCU_E2PromUpdateResetReason(int i); uint32_t MCU_E2PromProgram(int Address,uint32_t Data); uint32_t MCU_E2PromRead(int Address,uint32_t *Data); +uint32_t MCU_E2PromProgramFloat(int Address,float Data); +uint32_t MCU_E2PromReadFloat(int Address,float *Data); void MCU_E2PromProgramMidTank(int midtankId,float a,float b); float MCU_E2PromReadMidtank_A(int MidtankId); float MCU_E2PromReadMidtank_B(int MidtankId); diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Procedure.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Procedure.c index c84dc5fb5..d1ba28d7e 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Procedure.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Procedure.c @@ -72,8 +72,10 @@ void Stub_ProcedureRequest(MessageContainer* requestContainer) bool ResetNeeded = false; ProcedureRequest* request = procedure_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); - int i,n_param = request->n_param; + int rc, i,n_param = request->n_param; ProcedureResponse response = PROCEDURE_RESPONSE__INIT; + BTSRParameters *BtsrPrameters = NULL; + char str[200]; /* protobuf_c_boolean has_type; int32_t type; protobuf_c_boolean has_timeout; @@ -89,6 +91,50 @@ void Stub_ProcedureRequest(MessageContainer* requestContainer) { switch (request->type) { + case 1: + BtsrPrameters = my_malloc(sizeof(BTSRParameters)); + BtsrPrameters->btsryarntype = request->param[0]; + BtsrPrameters->btsrapplicationtype = request->param[1]; + BtsrPrameters->feedingtension = request->param[2]; + BtsrPrameters->exittension = request->param[3]; + BtsrPrameters->tensionerror = request->param[4]; + BtsrPrameters->threadlengthfactor = request->param[5]; + rc = BtsrSaveParamsToEeprom(BtsrPrameters); + free(BtsrPrameters); + response.replymessage = request->testname; + if (n_param) + { + response.replyvalue = (float*)my_malloc(sizeof(float *)*(request->n_param)); + response.n_replyvalue = request->n_param; + for(i=0;itestname,__FILE__,__LINE__,(int)request->type,RpWarning,(int) request->n_param,0); + response.replyvalue[i] = request->param[i]; + } + } + response.time = msec_millisecondCounter; + response.type = request->type; + break; + case 2: + BtsrPrameters = my_malloc(sizeof(BTSRParameters)); + rc = BtsrReadParamsFromEeprom(BtsrPrameters); + sprintf(str, "type = %d, app = %d, tension = %f, exittension = %f, tensionerror = %f, lengthfactor = %f", BtsrPrameters->btsryarntype, + BtsrPrameters->btsrapplicationtype, BtsrPrameters->feedingtension, BtsrPrameters->exittension, BtsrPrameters->tensionerror, BtsrPrameters->threadlengthfactor); + response.replymessage = str; + if (n_param) + { + response.replyvalue = (float*)my_malloc(sizeof(float *)*(request->n_param)); + response.n_replyvalue = request->n_param; + for(i=0;itestname,__FILE__,__LINE__,(int)request->type,RpWarning,(int) request->n_param,0); + response.replyvalue[i] = request->param[i]; + } + } + response.time = msec_millisecondCounter; + response.type = request->type; + free(BtsrPrameters); + break; default: response.replymessage = request->testname; if (n_param) -- cgit v1.3.1