aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Common
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2020-10-29 15:55:21 +0200
committerShlomo Hecht <shlomo@twine-s.com>2020-10-29 15:55:21 +0200
commit4b789f33eadfc5cc1d937a80ce03ea8425955ffe (patch)
tree7dbbd0529a24f9ca064cab688a0d6d2b8b762ea1 /Software/Embedded_SW/Embedded/Common
parent8f3baa0d9097aa6ed800863a4680608e867c809a (diff)
parent11fb700fcbc4627162a9c3f84b03b5016248bd97 (diff)
downloadTango-4b789f33eadfc5cc1d937a80ce03ea8425955ffe.tar.gz
Tango-4b789f33eadfc5cc1d937a80ce03ea8425955ffe.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
Diffstat (limited to 'Software/Embedded_SW/Embedded/Common')
-rw-r--r--Software/Embedded_SW/Embedded/Common/CheckSum/Checksum.c78
-rw-r--r--Software/Embedded_SW/Embedded/Common/CheckSum/Checksum.h14
-rw-r--r--Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c97
-rw-r--r--Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c50
-rw-r--r--Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c9
-rw-r--r--Software/Embedded_SW/Embedded/Common/Software_CRC/sw_crc.c723
-rw-r--r--Software/Embedded_SW/Embedded/Common/Software_CRC/sw_crc.h40
-rw-r--r--Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/Pin_config.c3
-rw-r--r--Software/Embedded_SW/Embedded/Common/Utilities/ASCII.c78
-rw-r--r--Software/Embedded_SW/Embedded/Common/Utilities/ASCII.h16
-rw-r--r--Software/Embedded_SW/Embedded/Common/Utilities/RFIDTagHandling.c286
-rw-r--r--Software/Embedded_SW/Embedded/Common/Utilities/RFIDTagHandling.h16
-rw-r--r--Software/Embedded_SW/Embedded/Common/Utilities/RfidTagContent.h57
-rw-r--r--Software/Embedded_SW/Embedded/Common/Utilities/delay.c42
-rw-r--r--Software/Embedded_SW/Embedded/Common/Utilities/delay.h17
-rw-r--r--Software/Embedded_SW/Embedded/Common/Utilities/idle_task.c22
-rw-r--r--Software/Embedded_SW/Embedded/Common/Utilities/ustdlib.c52
-rw-r--r--Software/Embedded_SW/Embedded/Common/report/report.h3
-rw-r--r--Software/Embedded_SW/Embedded/Common/report/reportInit.c70
19 files changed, 525 insertions, 1148 deletions
diff --git a/Software/Embedded_SW/Embedded/Common/CheckSum/Checksum.c b/Software/Embedded_SW/Embedded/Common/CheckSum/Checksum.c
deleted file mode 100644
index 391946698..000000000
--- a/Software/Embedded_SW/Embedded/Common/CheckSum/Checksum.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Checksum.c
- *
- * Created on: May 7, 2020
- * Author: avi
- */
-
-#include <stdint.h>
-#include <stdbool.h>
-#include "Include.h"
-
-//*****************************************************************************
-//
-//! CheckSum() Calculates an 8 bit checksum
-//!
-//! \param pui8Data is a pointer to an array of 8 bit data of size ui8Size.
-//! \param ui8Size is the size of the array that will run through the checksum
-//! algorithm.
-//!
-//! This function simply calculates an 8 bit checksum on the data passed in.
-//!
-//! \return The function returns the calculated checksum.
-//
-//*****************************************************************************
-uint8_t
-CheckSum8bit(uint8_t *pui8Data, uint8_t ui8Size)
-{
- int32_t i;
- uint8_t ui8CheckSum;
-
- ui8CheckSum = 0;
-
- for(i = 0; i < ui8Size; ++i)
- {
- ui8CheckSum += pui8Data[i];
- }
- return(ui8CheckSum);
-}
-
-
-//*****************************************************************************
-//
-//! Calculates an 8-bit checksum
-//!
-//! \param pui8Data is a pointer to an array of 8-bit data of size ui32Size.
-//! \param ui32Size is the size of the array that will run through the checksum
-//! algorithm.
-//!
-//! This function simply calculates an 8-bit checksum on the data passed in.
-//!
-//! \return Returns the calculated checksum.
-//
-//*****************************************************************************
-uint32_t
-CheckSum32bit(const uint8_t *pui8Data, uint32_t ui32Size)
-{
- uint32_t ui32CheckSum;
-
- //
- // Initialize the checksum to zero.
- //
- ui32CheckSum = 0;
-
- //
- // Add up all the bytes, do not do anything for an overflow.
- //
- while(ui32Size--)
- {
- ui32CheckSum += *pui8Data++;
- }
-
- //
- // Return the calculated check sum.
- //
- return(ui32CheckSum & 0xff);
-}
-
-
diff --git a/Software/Embedded_SW/Embedded/Common/CheckSum/Checksum.h b/Software/Embedded_SW/Embedded/Common/CheckSum/Checksum.h
deleted file mode 100644
index 2d245f81a..000000000
--- a/Software/Embedded_SW/Embedded/Common/CheckSum/Checksum.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Checksum.h
- *
- * Created on: May 7, 2020
- * Author: avi
- */
-
-#ifndef CHECKSUM_H_
-#define CHECKSUM_H_
-
-uint8_t CheckSum8bit(uint8_t *pui8Data, uint8_t ui8Size);
-uint32_t CheckSum32bit(const uint8_t *pui8Data, uint32_t ui32Size);
-
-#endif /* CHECKSUM_H_ */
diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
index 84d8fa725..10f33c62b 100644
--- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
+++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
@@ -31,10 +31,11 @@
#include <Communication/PMR/IO/GetFilesResponse.pb-c.h>
#include <Communication/PMR/IO/FileAttribute.pb-c.h>
-#include "drivers/Flash_Memory/Flash_Memory.h"
+
#include "drivers/Flash_Memory/fatfs/ff.h"
#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h"
+#include "Modules/Control/Control.h"
#include "StateMachines/Printing/PrintingSTM.h"
@@ -59,6 +60,7 @@ uint32_t ReadBytes = 0;
Task_Handle CommRxTaskHandle;
extern Semaphore_Handle FFS_Sem;
+extern Semaphore_Handle FileUpload_sem_param;
ErrorCode getErrorCode(FRESULT Fresult)
{
@@ -75,12 +77,14 @@ bool FileUploadGetState(void)
{
return FileDone;
}
+int CommRxpri;
+
uint32_t FileUploadRequestFunc(MessageContainer* requestContainer)
{
//uint32_t status = OK;
FRESULT Fresult = FR_OK;
-
+ bool sem_ok = false;
MessageContainer responseContainer;
FileUploadRequest* request = file_upload_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data);
@@ -100,11 +104,22 @@ uint32_t FileUploadRequestFunc(MessageContainer* requestContainer)
Fresult = FR_DENIED;
else
{
- if (Semaphore_pend(FFS_Sem, BIOS_NO_WAIT))
+ if (1)//(Semaphore_pend(FileUpload_sem_param, BIOS_NO_WAIT))
+ {
+ sem_ok = true;
+ }
+ else
+ {
+ Semaphore_post(FileUpload_sem_param);
+ Report("semaphore was not free", __FILE__, __LINE__, request->length, RpWarning, (int)MAX_CHUNK_LENGTH, 0);
+ sem_ok = true;
+ }
+ if (sem_ok == true)
{
CommRxTaskHandle = Task_self();
- Task_setPri(CommRxTaskHandle, 2);
- // Report("Task_setPri", __FILE__, __LINE__, 4, RpWarning, (int)CommRxTaskHandle, 0);
+ CommRxpri = Task_getPri(CommRxTaskHandle);
+ Task_setPri(CommRxTaskHandle, 11);
+ Report("Task_setPri", __FILE__, __LINE__, 4, RpWarning, (int)CommRxTaskHandle, 0);
//Report("FileUploadRequestFunc 2", __FILE__, __LINE__, msec_millisecondCounter, RpWarning, (int)0, 0);
Fresult = f_open(UploadFileHandle,request->path,FA_READ | FA_WRITE | FA_OPEN_ALWAYS | FA_CREATE_ALWAYS);
if (Fresult == FR_OK)
@@ -124,7 +139,7 @@ uint32_t FileUploadRequestFunc(MessageContainer* requestContainer)
{
my_free (UploadFileHandle);
UploadFileHandle = 0;
- Semaphore_post(FFS_Sem);
+ Semaphore_post(FileUpload_sem_param);
}
}
else
@@ -152,6 +167,25 @@ uint32_t FileUploadRequestFunc(MessageContainer* requestContainer)
return OK;
}
FRESULT lFresult = FR_OK;
+uint32_t Chunk_ControlId = 0xFF;
+uint32_t FileChunkUploadCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag)
+{
+ Report("chunk timeout error",__FILE__,IfIndex,FileReceivedLength,RpWarning,BusyFlag,0);
+ f_close(UploadFileHandle);
+ my_free (UploadFileHandle);
+ UploadFileHandle = 0;
+ FileReceivedLength = 0;
+ FileDone = true;
+ Task_setPri(CommRxTaskHandle, CommRxpri);
+ Semaphore_post(FileUpload_sem_param);
+ Report("Task_setPri", __FILE__, __LINE__, CommRxpri, RpWarning, (int)CommRxTaskHandle, 0);
+ if (SafeRemoveControlCallback(Chunk_ControlId, FileChunkUploadCallBackFunction )==OK)
+ Chunk_ControlId = 0xFF;
+
+ return OK;
+
+}
+
uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer)
{
//uint32_t status = OK;
@@ -177,13 +211,15 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer)
if (ReceivedFileHandle==NULL)
{
Fresult = FR_DENIED;
- Report("file chunk uplad rejected - file not created", __FILE__, __LINE__, 4, RpWarning, (int)0, 0);
+ Report("file chunk upload rejected - file not created", __FILE__, __LINE__, 4, RpWarning, (int)0, 0);
FileDone = true;
}
else
{
KeepAliveOneSecondCounter = 0;
save_milisec = msec_millisecondCounter;
+ Chunk_ControlId = AddControlCallback("chunk", FileChunkUploadCallBackFunction, eOneSecond, TemplateDataReadCBFunction,0,request->buffer.len, WrittenBytes );
+
Fresult = f_write(ReceivedFileHandle,request->buffer.data,request->buffer.len,&WrittenBytes );
lFresult = Fresult;
if(Fresult != FR_OK)
@@ -195,6 +231,8 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer)
{
FileReceivedLength += WrittenBytes;
ReportWithPackageFilter(CommFilter,"Chunk received", __FILE__,FileLength,FileReceivedLength, RpMessage,msec_millisecondCounter-save_milisec, 0);
+ RemoveControlCallback(Chunk_ControlId, FileChunkUploadCallBackFunction );
+ Chunk_ControlId = 0xFF;
//REPORT_MSG (FileReceivedLength,"file upload chunk");
if (FileReceivedLength == FileLength)
@@ -237,9 +275,9 @@ uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer)
SendCharsWithType(container_buffer, container_size,MESSAGE_TYPE__FileChunkUploadResponse);
if (FileDone == true)
{
- Task_setPri(CommRxTaskHandle, 9);
- Semaphore_post(FFS_Sem);
- //Report("Task_setPri", __FILE__, __LINE__, 9, RpWarning, (int)CommRxTaskHandle, 0);
+ Task_setPri(CommRxTaskHandle, CommRxpri);
+ Semaphore_post(FileUpload_sem_param);
+ Report("Task_setPri", __FILE__, __LINE__, CommRxpri, RpWarning, (int)CommRxTaskHandle, 0);
}
return OK;
}
@@ -249,12 +287,12 @@ void FileChunkUploadError(void)
{
REPORT_MSG (FileReceivedLength,"file upload too much data!");
f_close(UploadFileHandle);
- my_free (UploadFileHandle);
+ //my_free (UploadFileHandle); CAN NOT CALL FREE() FROM INTERRUPT
UploadFileHandle = 0;
FileReceivedLength = 0;
FileDone = true;
- Task_setPri(CommRxTaskHandle, 9);
- Semaphore_post(FFS_Sem);
+ Task_setPri(CommRxTaskHandle, CommRxpri);
+ Semaphore_post(FileUpload_sem_param);
}
}
uint32_t FileDownloadRequestFunc(MessageContainer* requestContainer)
@@ -286,7 +324,7 @@ uint32_t FileDownloadRequestFunc(MessageContainer* requestContainer)
Fresult = FR_DENIED;
else
{
- if (Semaphore_pend(FFS_Sem, BIOS_NO_WAIT))
+ if (1)//(Semaphore_pend(FFS_Sem, BIOS_NO_WAIT))
{
Fresult = f_open(DownloadFileHandle,request->filename,FA_READ );
if (Fresult == FR_OK)
@@ -470,7 +508,7 @@ uint32_t CreateRequestFunc(MessageContainer* requestContainer)
Fresult = FR_DENIED;
else
{
- if (Semaphore_pend(FFS_Sem, BIOS_NO_WAIT))
+ if (1)//(Semaphore_pend(FFS_Sem, BIOS_NO_WAIT))
{
Fresult = f_open(UploadFileHandle,request->path,FA_READ | FA_WRITE | FA_OPEN_ALWAYS | FA_CREATE_ALWAYS);
if (Fresult == FR_OK)
@@ -528,7 +566,7 @@ uint32_t DeleteRequestFunc(MessageContainer* requestContainer)
//int NumOfFiles = 0;
FRESULT Fresult = FR_OK;
- if (Semaphore_pend(FFS_Sem, BIOS_NO_WAIT))
+ if (1)//(Semaphore_pend(FFS_Sem, BIOS_NO_WAIT))
{
Fresult = f_unlink(request->path);
Semaphore_post(FFS_Sem);
@@ -624,17 +662,8 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer)
FRESULT Fresult = FR_OK;
FileInfo **FilesInfo = (FileInfo**)my_malloc(sizeof(FileInfo *)*(MAX_NUM_OF_FILES));
FileInfo Data[MAX_NUM_OF_FILES];
- /*
- time_t t;
- struct tm *ltm;
- char *curTime;
- t = time(NULL);
- ltm = localtime(&t);
- curTime = asctime(ltm);
- Report(curTime, __FILE__, ltm->tm_hour,ltm->tm_min , RpWarning, ltm->tm_sec, 0);
- */
- if (Semaphore_pend(FFS_Sem, BIOS_NO_WAIT))
+ if (1)//(Semaphore_pend(FFS_Sem, BIOS_NO_WAIT))
{
Fresult |= f_opendir(&dir, g_cCwdBuf);
if(Fresult != FR_OK)
@@ -689,14 +718,6 @@ uint32_t GetFilesRequestFunc(MessageContainer* requestContainer)
Data[i].lastmodifieddate = fno[i]->fdate;
Data[i].has_lastmodifiedtime = true;
Data[i].lastmodifiedtime = fno[i]->ftime;
- /*
- t = (fno[i]->fdate<<16)+fno[i]->ftime;
- ltm = localtime(&t);
- curTime = asctime(ltm);
- usnprintf(&Datestr, 100, "File info %s %s",fno[i]->fname, curTime);
- Report(Datestr, __FILE__, __LINE__, t, RpWarning, (int)Data[i].lastmodifiedtime, 0);
- Task_sleep(50);
- */
if (i==0)
usnprintf(&FullPath[i], 50, "%s", request->path);
@@ -756,7 +777,7 @@ FRESULT FileWrite(void * buffer, uint16_t size,char *path, uint32_t timeout)
Fresult = FR_DENIED;
else
{
- if (Semaphore_pend(FFS_Sem, BIOS_NO_WAIT))
+ if (1)//(Semaphore_pend(FFS_Sem, BIOS_NO_WAIT))
{
Fresult = f_open(FileHandle,path,FA_WRITE | FA_OPEN_ALWAYS|FA_CREATE_ALWAYS);
if (Fresult == FR_OK)
@@ -811,7 +832,7 @@ FRESULT FileRead(char *path, uint32_t *Size, void **Buffer)
Fresult = FR_DENIED;
else
{
- if (Semaphore_pend(FFS_Sem, BIOS_NO_WAIT))
+ if (1)//(Semaphore_pend(FFS_Sem, BIOS_NO_WAIT))
{
Fresult = f_open(FileHandle,path,FA_READ);
if (Fresult == FR_OK)
@@ -874,7 +895,7 @@ FRESULT FileOpen(char *path, uint32_t *Size, FIL *FileHandle)
if (FileHandle == 0)
Fresult = FR_DENIED;
else
- if (Semaphore_pend(FFS_Sem, BIOS_NO_WAIT))
+ if (1)//(Semaphore_pend(FFS_Sem, BIOS_NO_WAIT))
{
Fresult = f_open(FileHandle,path,FA_READ);
Semaphore_post(FFS_Sem); //will be closed with the f_close, in the job
@@ -887,7 +908,7 @@ FRESULT FileOpen(char *path, uint32_t *Size, FIL *FileHandle)
}
else
{
- LOG_ERROR (Fresult,"f_stat error");
+ Report("f_stat error", __FILE__, __LINE__,Fresult, RpWarning, (int)0, 0);
}
my_free(fno);
return Fresult;
diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c
index 7f57083fc..2d39d25ec 100644
--- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c
+++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c
@@ -32,7 +32,6 @@
#include "Modules/AlarmHandling/AlarmHandling.h"
#include "modules/General/process.h"
-extern Semaphore_Handle FFS_Sem;
int NumberOfFiles = 0,CurrentRunningFile;
int CurrentFileSize = 0;
@@ -57,14 +56,21 @@ uint32_t ActivateVersionCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag)
MessageContainer responseContainer;
bool last = true;
- usnprintf(activateString, 1000, "file %d of %d bytes %d of %d",CurrentRunningFile+1,NumberOfFiles,vme_index,CurrentFileSize);
-
- Report(activateString,__FILE__,__LINE__,(int)CurrentRunningFile,RpWarning,CurrentFileSize,0);
-
if (CurrentRunningFile<NumberOfFiles)
{
last = false;
}
+ response.has_progress = true;
+ response.has_total = true;
+ response.progress = CurrentRunningFile+(vme_index/CurrentFileSize);
+ response.total = NumberOfFiles;
+
+
+ usnprintf(activateString, 1000, "file %d of %d bytes %d of %d last %d progress*1000 %d",
+ CurrentRunningFile+1,NumberOfFiles,vme_index,CurrentFileSize,last,(int)(response.progress*1000));
+
+ Report(activateString,__FILE__,__LINE__,(int)CurrentRunningFile,RpWarning,CurrentFileSize,0);
+
responseContainer = createContainer(MESSAGE_TYPE__ActivateVersionResponse, ActivateToken, last, &response, &activate_version_response__pack, &activate_version_response__get_packed_size);
responseContainer.has_continuous = true;
responseContainer.continuous = true;
@@ -100,7 +106,7 @@ uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer)
uint32_t Bytes = 0;
char SWUpgradePath[100];
char FullPath[50];
- FRESULT Fresult = FR_OK;
+ FRESULT Fresult = FR_OK , FFresult = FR_OK;
FILINFO* fno = 0;
fno = my_malloc(sizeof(FILINFO));
@@ -157,22 +163,29 @@ uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer)
break;
case VERSION_FILE_DESTINATION__ConfigParams:
usnprintf(FullPath, 50, "%s%s%s", request->path,"/", VersionPackage->filedescriptors[File_i]->filename);
- Fresult = f_unlink("//SYSINFO//EMBPARAM.CFG");
- Fresult |= f_rename (FullPath, "//SYSINFO//EMBPARAM.CFG");
+ FFresult = f_unlink("//SYSINFO//EMBPARAM.CFG");
+ FFresult |= f_rename (FullPath, "//SYSINFO//EMBPARAM.CFG");
+ FlashInit();
+ Reboot = true;
LoadConfigurationParamsFromFile(true);
+ Report("ConfigParams",__FILE__,FFresult,(int)NumberOfFiles,RpWarning,CurrentRunningFile,0);
CurrentRunningFile++;
break;
case VERSION_FILE_DESTINATION__ProcessParams:
usnprintf(FullPath, 50, "%s%s%s", request->path,"/", VersionPackage->filedescriptors[File_i]->filename);
- Fresult = f_unlink("//SYSINFO//PROCESSP.CFG");
- Fresult |= f_rename (FullPath, "//SYSINFO//PROCESSP.CFG");
- LoadProcessParamsFromFile();
+ FFresult = f_unlink("//SYSINFO//PROCESSP.CFG");
+ FFresult |= f_rename (FullPath, "//SYSINFO//PROCESSP.CFG");
+ //LoadProcessParamsFromFile();
+ FlashInit();
+ Reboot = true;
+ Report("ProcessParams",__FILE__,FFresult,(int)NumberOfFiles,RpWarning,CurrentRunningFile,0);
CurrentRunningFile++;
break;
case VERSION_FILE_DESTINATION__AlarmParams:
usnprintf(FullPath, 50, "%s%s%s", request->path,"/", VersionPackage->filedescriptors[File_i]->filename);
- Fresult = f_unlink("//SYSINFO//ALARM.CFG");
- Fresult |= f_rename (FullPath, "//SYSINFO//ALARM.CFG");
+ FFresult = f_unlink("//SYSINFO//ALARM.CFG");
+ FFresult |= f_rename (FullPath, "//SYSINFO//ALARM.CFG");
+ Report("AlarmParams",__FILE__,FFresult,(int)NumberOfFiles,RpWarning,CurrentRunningFile,0);
//AlarmHandlingLoadFile();
FlashInit();
Reboot = true;
@@ -180,8 +193,9 @@ uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer)
break;
case VERSION_FILE_DESTINATION__GeneralHWConfigParams:
usnprintf(FullPath, 50, "%s%s%s", request->path,"/", VersionPackage->filedescriptors[File_i]->filename);
- Fresult = f_unlink("//SYSINFO//GENHWCFG.CFG");
- Fresult |= f_rename (FullPath, "//SYSINFO//GENHWCFG.CFG");
+ FFresult = f_unlink("//SYSINFO//GENHWCFG.CFG");
+ FFresult |= f_rename (FullPath, "//SYSINFO//GENHWCFG.CFG");
+ Report("GeneralHWConfigParams",__FILE__,FFresult,(int)NumberOfFiles,RpWarning,CurrentRunningFile,0);
HWConfigurationLoadFile();
CurrentRunningFile++;
break;
@@ -192,6 +206,11 @@ uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer)
}
}
}
+ response.has_progress = true;
+ response.has_total = true;
+ response.progress = CurrentRunningFile;
+ response.total = NumberOfFiles;
+ Report("Activate Version Request progress",__FILE__,__LINE__,(int)NumberOfFiles,RpWarning,CurrentRunningFile,0);
responseContainer = createContainer(MESSAGE_TYPE__ActivateVersionResponse, requestContainer->token, false, &response, &activate_version_response__pack, &activate_version_response__get_packed_size);
responseContainer.has_continuous = true;
responseContainer.continuous = true;
@@ -201,6 +220,7 @@ uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer)
responseContainer.error = FileError_to_ErrorCode[Fresult];
responseContainer.errormessage = "Activate Version Request error";
responseContainer.continuous = false;
+ Report("Activate Version Request error",__FILE__,__LINE__,(int)NumberOfFiles,RpWarning,Fresult,0);
}
uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer));
size_t container_size = message_container__pack(&responseContainer, container_buffer);
diff --git a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c
index 3e84bd761..08dc68781 100644
--- a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c
+++ b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c
@@ -20,10 +20,15 @@ typedef struct
} TangoVersion_t;
-TangoVersion_t _gTangoVersion = {1,4,6,26};
+TangoVersion_t _gTangoVersion = {1,5,1,1};
#define BUILD_DATE __DATE__
char Dat[50] = BUILD_DATE;
- char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d
+
+#ifdef RUN_AS_MAIN_JIG
+char _gTangoName [MAX_STRING_LEN] = "TestJig";
+#else
+ char _gTangoName [MAX_STRING_LEN] = "Tango01 ";
+#endif
uint16_t GetTangoVersion(uint8_t* _buffer)
{
diff --git a/Software/Embedded_SW/Embedded/Common/Software_CRC/sw_crc.c b/Software/Embedded_SW/Embedded/Common/Software_CRC/sw_crc.c
deleted file mode 100644
index 76f9c0398..000000000
--- a/Software/Embedded_SW/Embedded/Common/Software_CRC/sw_crc.c
+++ /dev/null
@@ -1,723 +0,0 @@
-
-//*****************************************************************************
-//
-//! \addtogroup sw_crc_api
-//! @{
-//
-//*****************************************************************************
-#include "Common/Software_CRC/sw_crc.h"
-
-//*****************************************************************************
-//
-// The CRC table for the polynomial C(x) = x^8 + x^2 + x + 1 (CRC-8-CCITT).
-//
-//*****************************************************************************
-static const uint8_t g_pui8Crc8CCITT[256] =
-{
- 0x00, 0x07, 0x0E, 0x09, 0x1C, 0x1B, 0x12, 0x15,
- 0x38, 0x3F, 0x36, 0x31, 0x24, 0x23, 0x2A, 0x2D,
- 0x70, 0x77, 0x7E, 0x79, 0x6C, 0x6B, 0x62, 0x65,
- 0x48, 0x4F, 0x46, 0x41, 0x54, 0x53, 0x5A, 0x5D,
- 0xE0, 0xE7, 0xEE, 0xE9, 0xFC, 0xFB, 0xF2, 0xF5,
- 0xD8, 0xDF, 0xD6, 0xD1, 0xC4, 0xC3, 0xCA, 0xCD,
- 0x90, 0x97, 0x9E, 0x99, 0x8C, 0x8B, 0x82, 0x85,
- 0xA8, 0xAF, 0xA6, 0xA1, 0xB4, 0xB3, 0xBA, 0xBD,
- 0xC7, 0xC0, 0xC9, 0xCE, 0xDB, 0xDC, 0xD5, 0xD2,
- 0xFF, 0xF8, 0xF1, 0xF6, 0xE3, 0xE4, 0xED, 0xEA,
- 0xB7, 0xB0, 0xB9, 0xBE, 0xAB, 0xAC, 0xA5, 0xA2,
- 0x8F, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9D, 0x9A,
- 0x27, 0x20, 0x29, 0x2E, 0x3B, 0x3C, 0x35, 0x32,
- 0x1F, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0D, 0x0A,
- 0x57, 0x50, 0x59, 0x5E, 0x4B, 0x4C, 0x45, 0x42,
- 0x6F, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7D, 0x7A,
- 0x89, 0x8E, 0x87, 0x80, 0x95, 0x92, 0x9B, 0x9C,
- 0xB1, 0xB6, 0xBF, 0xB8, 0xAD, 0xAA, 0xA3, 0xA4,
- 0xF9, 0xFE, 0xF7, 0xF0, 0xE5, 0xE2, 0xEB, 0xEC,
- 0xC1, 0xC6, 0xCF, 0xC8, 0xDD, 0xDA, 0xD3, 0xD4,
- 0x69, 0x6E, 0x67, 0x60, 0x75, 0x72, 0x7B, 0x7C,
- 0x51, 0x56, 0x5F, 0x58, 0x4D, 0x4A, 0x43, 0x44,
- 0x19, 0x1E, 0x17, 0x10, 0x05, 0x02, 0x0B, 0x0C,
- 0x21, 0x26, 0x2F, 0x28, 0x3D, 0x3A, 0x33, 0x34,
- 0x4E, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5C, 0x5B,
- 0x76, 0x71, 0x78, 0x7F, 0x6A, 0x6D, 0x64, 0x63,
- 0x3E, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2C, 0x2B,
- 0x06, 0x01, 0x08, 0x0F, 0x1A, 0x1D, 0x14, 0x13,
- 0xAE, 0xA9, 0xA0, 0xA7, 0xB2, 0xB5, 0xBC, 0xBB,
- 0x96, 0x91, 0x98, 0x9F, 0x8A, 0x8D, 0x84, 0x83,
- 0xDE, 0xD9, 0xD0, 0xD7, 0xC2, 0xC5, 0xCC, 0xCB,
- 0xE6, 0xE1, 0xE8, 0xEF, 0xFA, 0xFD, 0xF4, 0xF3
-};
-
-//*****************************************************************************
-//
-// The CRC-16 table for the polynomial C(x) = x^16 + x^15 + x^2 + 1 (standard
-// CRC-16, also known as CRC-16-IBM and CRC-16-ANSI).
-//
-//*****************************************************************************
-static const uint16_t g_pui16Crc16[256] =
-{
- 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,
- 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440,
- 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40,
- 0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841,
- 0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40,
- 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41,
- 0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641,
- 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040,
- 0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240,
- 0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441,
- 0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41,
- 0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840,
- 0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41,
- 0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40,
- 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640,
- 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041,
- 0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240,
- 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441,
- 0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41,
- 0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840,
- 0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41,
- 0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40,
- 0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640,
- 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041,
- 0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241,
- 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440,
- 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40,
- 0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841,
- 0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40,
- 0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41,
- 0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,
- 0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040
-};
-
-//*****************************************************************************
-//
-// The CRC-32 table for the polynomial C(x) = x^32 + x^26 + x^23 + x^22 +
-// x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1 (standard
-// CRC32 as used in Ethernet, MPEG-2, PNG, etc.).
-//
-//*****************************************************************************
-static const uint32_t g_pui32Crc32[] =
-{
- 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
- 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
- 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
- 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
- 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
- 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
- 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
- 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
- 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
- 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
- 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
- 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
- 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
- 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
- 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
- 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
- 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
- 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
- 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
- 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
- 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
- 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
- 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
- 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
- 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
- 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
- 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
- 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
- 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
- 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
- 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
- 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
- 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
- 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
- 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
- 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
- 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
- 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
- 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
- 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
- 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
- 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
- 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
- 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
- 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
- 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
- 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
- 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
- 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
- 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
- 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
- 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
- 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
- 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
- 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
- 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
- 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
- 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
- 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
- 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
- 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
- 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
- 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
- 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
-};
-
-//*****************************************************************************
-//
-// This macro executes one iteration of the CRC-8-CCITT.
-//
-//*****************************************************************************
-#define CRC8_ITER(crc, data) g_pui8Crc8CCITT[(uint8_t)((crc) ^ (data))]
-
-//*****************************************************************************
-//
-// This macro executes one iteration of the CRC-16.
-//
-//*****************************************************************************
-#define CRC16_ITER(crc, data) (((crc) >> 8) ^ \
- g_pui16Crc16[(uint8_t)((crc) ^ (data))])
-
-//*****************************************************************************
-//
-// This macro executes one iteration of the CRC-32.
-//
-//*****************************************************************************
-#define CRC32_ITER(crc, data) (((crc) >> 8) ^ \
- g_pui32Crc32[(uint8_t)((crc & 0xFF) ^ \
- (data))])
-
-//*****************************************************************************
-//
-//! Calculates the CRC-8-CCITT of an array of bytes.
-//!
-//! \param ui8Crc is the starting CRC-8-CCITT value.
-//! \param pui8Data is a pointer to the data buffer.
-//! \param ui32Count is the number of bytes in the data buffer.
-//!
-//! This function is used to calculate the CRC-8-CCITT of the input buffer.
-//! The CRC-8-CCITT is computed in a running fashion, meaning that the entire
-//! data block that is to have its CRC-8-CCITT computed does not need to be
-//! supplied all at once. If the input buffer contains the entire block of
-//! data, then \b ui8Crc should be set to 0. If, however, the entire block of
-//! data is not available, then \b ui8Crc should be set to 0 for the first
-//! portion of the data, and then the returned value should be passed back in
-//! as \b ui8Crc for the next portion of the data.
-//!
-//! For example, to compute the CRC-8-CCITT of a block that has been split into
-//! three pieces, use the following:
-//!
-//! \verbatim
-//! ui8Crc = Crc8CCITT(0, pui8Data1, ui32Len1);
-//! ui8Crc = Crc8CCITT(ui8Crc, pui8Data2, ui32Len2);
-//! ui8Crc = Crc8CCITT(ui8Crc, pui8Data3, ui32Len3);
-//! \endverbatim
-//!
-//! Computing a CRC-8-CCITT in a running fashion is useful in cases where the
-//! data is arriving via a serial link (for example) and is therefore not all
-//! available at one time.
-//!
-//! \return The CRC-8-CCITT of the input data.
-//
-//*****************************************************************************
-uint8_t
-Crc8CCITT(uint8_t ui8Crc, const uint8_t *pui8Data, uint32_t ui32Count)
-{
- uint32_t ui32Temp;
-
- //
- // If the data buffer is not 16 bit-aligned, then perform a single step of
- // the CRC to make it 16 bit-aligned.
- //
- if((uint32_t)pui8Data & 1)
- {
- //
- // Perform the CRC on this input byte.
- //
- ui8Crc = CRC8_ITER(ui8Crc, *pui8Data);
-
- //
- // Skip this input byte.
- //
- pui8Data++;
- ui32Count--;
- }
-
- //
- // If the data buffer is not word-aligned and there are at least two bytes
- // of data left, then perform two steps of the CRC to make it word-aligned.
- //
- if(((uint32_t)pui8Data & 2) && (ui32Count > 1))
- {
- //
- // Read the next 16 bits.
- //
- ui32Temp = *(uint16_t *)pui8Data;
-
- //
- // Perform the CRC on these two bytes.
- //
- ui8Crc = CRC8_ITER(ui8Crc, ui32Temp);
- ui8Crc = CRC8_ITER(ui8Crc, ui32Temp >> 8);
-
- //
- // Skip these input bytes.
- //
- pui8Data += 2;
- ui32Count -= 2;
- }
-
- //
- // While there is at least a word remaining in the data buffer, perform
- // four steps of the CRC to consume a word.
- //
- while(ui32Count > 3)
- {
- //
- // Read the next word.
- //
- ui32Temp = *(uint32_t *)pui8Data;
-
- //
- // Perform the CRC on these four bytes.
- //
- ui8Crc = CRC8_ITER(ui8Crc, ui32Temp);
- ui8Crc = CRC8_ITER(ui8Crc, ui32Temp >> 8);
- ui8Crc = CRC8_ITER(ui8Crc, ui32Temp >> 16);
- ui8Crc = CRC8_ITER(ui8Crc, ui32Temp >> 24);
-
- //
- // Skip these input bytes.
- //
- pui8Data += 4;
- ui32Count -= 4;
- }
-
- //
- // If there are 16 bits left in the input buffer, then perform two steps of
- // the CRC.
- //
- if(ui32Count > 1)
- {
- //
- // Read the 16 bits.
- //
- ui32Temp = *(uint16_t *)pui8Data;
-
- //
- // Perform the CRC on these two bytes.
- //
- ui8Crc = CRC8_ITER(ui8Crc, ui32Temp);
- ui8Crc = CRC8_ITER(ui8Crc, ui32Temp >> 8);
-
- //
- // Skip these input bytes.
- //
- pui8Data += 2;
- ui32Count -= 2;
- }
-
- //
- // If there is a final byte remaining in the input buffer, then perform a
- // single step of the CRC.
- //
- if(ui32Count != 0)
- {
- ui8Crc = CRC8_ITER(ui8Crc, *pui8Data);
- }
-
- //
- // Return the resulting CRC-8-CCITT value.
- //
- return(ui8Crc);
-}
-
-//*****************************************************************************
-//
-//! Calculates the CRC-16 of an array of bytes.
-//!
-//! \param ui16Crc is the starting CRC-16 value.
-//! \param pui8Data is a pointer to the data buffer.
-//! \param ui32Count is the number of bytes in the data buffer.
-//!
-//! This function is used to calculate the CRC-16 of the input buffer. The
-//! CRC-16 is computed in a running fashion, meaning that the entire data block
-//! that is to have its CRC-16 computed does not need to be supplied all at
-//! once. If the input buffer contains the entire block of data, then
-//! \b ui16Crc should be set to 0. If, however, the entire block of data is
-//! not available, then \b ui16Crc should be set to 0 for the first portion of
-//! the data, and then the returned value should be passed back in as
-//! \b ui16Crc for the next portion of the data.
-//!
-//! For example, to compute the CRC-16 of a block that has been split into
-//! three pieces, use the following:
-//!
-//! \verbatim
-//! ui16Crc = Crc16(0, pui8Data1, ui32Len1);
-//! ui16Crc = Crc16(ui16Crc, pui8Data2, ui32Len2);
-//! ui16Crc = Crc16(ui16Crc, pui8Data3, ui32Len3);
-//! \endverbatim
-//!
-//! Computing a CRC-16 in a running fashion is useful in cases where the data
-//! is arriving via a serial link (for example) and is therefore not all
-//! available at one time.
-//!
-//! \return The CRC-16 of the input data.
-//
-//*****************************************************************************
-uint16_t
-Crc16(uint16_t ui16Crc, const uint8_t *pui8Data, uint32_t ui32Count)
-{
- uint32_t ui32Temp;
-
- //
- // If the data buffer is not 16 bit-aligned, then perform a single step of
- // the CRC to make it 16 bit-aligned.
- //
- if((uint32_t)pui8Data & 1)
- {
- //
- // Perform the CRC on this input byte.
- //
- ui16Crc = CRC16_ITER(ui16Crc, *pui8Data);
-
- //
- // Skip this input byte.
- //
- pui8Data++;
- ui32Count--;
- }
-
- //
- // If the data buffer is not word-aligned and there are at least two bytes
- // of data left, then perform two steps of the CRC to make it word-aligned.
- //
- if(((uint32_t)pui8Data & 2) && (ui32Count > 1))
- {
- //
- // Read the next 16 bits.
- //
- ui32Temp = *(uint16_t *)pui8Data;
-
- //
- // Perform the CRC on these two bytes.
- //
- ui16Crc = CRC16_ITER(ui16Crc, ui32Temp);
- ui16Crc = CRC16_ITER(ui16Crc, ui32Temp >> 8);
-
- //
- // Skip these input bytes.
- //
- pui8Data += 2;
- ui32Count -= 2;
- }
-
- //
- // While there is at least a word remaining in the data buffer, perform
- // four steps of the CRC to consume a word.
- //
- while(ui32Count > 3)
- {
- //
- // Read the next word.
- //
- ui32Temp = *(uint32_t *)pui8Data;
-
- //
- // Perform the CRC on these four bytes.
- //
- ui16Crc = CRC16_ITER(ui16Crc, ui32Temp);
- ui16Crc = CRC16_ITER(ui16Crc, ui32Temp >> 8);
- ui16Crc = CRC16_ITER(ui16Crc, ui32Temp >> 16);
- ui16Crc = CRC16_ITER(ui16Crc, ui32Temp >> 24);
-
- //
- // Skip these input bytes.
- //
- pui8Data += 4;
- ui32Count -= 4;
- }
-
- //
- // If there are two bytes left in the input buffer, then perform two steps
- // of the CRC.
- //
- if(ui32Count > 1)
- {
- //
- // Read the two bytes.
- //
- ui32Temp = *(uint16_t *)pui8Data;
-
- //
- // Perform the CRC on these two bytes.
- //
- ui16Crc = CRC16_ITER(ui16Crc, ui32Temp);
- ui16Crc = CRC16_ITER(ui16Crc, ui32Temp >> 8);
-
- //
- // Skip these input bytes.
- //
- pui8Data += 2;
- ui32Count -= 2;
- }
-
- //
- // If there is a final byte remaining in the input buffer, then perform a
- // single step of the CRC.
- //
- if(ui32Count != 0)
- {
- ui16Crc = CRC16_ITER(ui16Crc, *pui8Data);
- }
-
- //
- // Return the resulting CRC-16 value.
- //
- return(ui16Crc);
-}
-
-//*****************************************************************************
-//
-//! Calculates the CRC-16 of an array of words.
-//!
-//! \param ui32WordLen is the length of the array in words (the number of bytes
-//! divided by 4).
-//! \param pui32Data is a pointer to the data buffer.
-//!
-//! This function is a wrapper around the running CRC-16 function, providing
-//! the CRC-16 for a single block of data.
-//!
-//! \return The CRC-16 of the input data.
-//
-//*****************************************************************************
-uint16_t
-Crc16Array(uint32_t ui32WordLen, const uint32_t *pui32Data)
-{
- //
- // Calculate and return the CRC-16 of this array of words.
- //
- return(Crc16(0, (const uint8_t *)pui32Data, ui32WordLen * 4));
-}
-
-//*****************************************************************************
-//
-//! Calculates three CRC-16s of an array of words.
-//!
-//! \param ui32WordLen is the length of the array in words (the number of bytes
-//! divided by 4).
-//! \param pui32Data is a pointer to the data buffer.
-//! \param pui16Crc3 is a pointer to an array in which to place the three
-//! CRC-16 values.
-//!
-//! This function is used to calculate three CRC-16s of the input buffer; the
-//! first uses every byte from the array, the second uses only the even-index
-//! bytes from the array (in other words, bytes 0, 2, 4, etc.), and the third
-//! uses only the odd-index bytes from the array (in other words, bytes 1, 3,
-//! 5, etc.).
-//!
-//! \return None
-//
-//*****************************************************************************
-void
-Crc16Array3(uint32_t ui32WordLen, const uint32_t *pui32Data,
- uint16_t *pui16Crc3)
-{
- uint16_t ui16Crc, ui16Cri8Odd, ui16Cri8Even;
-
- //
- // Initialize the CRC values to zero.
- //
- ui16Crc = 0;
- ui16Cri8Odd = 0;
- ui16Cri8Even = 0;
-
- //
- // Loop while there are more words in the data buffer.
- //
- while(ui32WordLen--)
- {
- //
- // Read the next word.
- //
- uint32_t ui32Temp = *pui32Data++;
-
- //
- // Perform the first CRC on all four data bytes.
- //
- ui16Crc = CRC16_ITER(ui16Crc, ui32Temp);
- ui16Crc = CRC16_ITER(ui16Crc, ui32Temp >> 8);
- ui16Crc = CRC16_ITER(ui16Crc, ui32Temp >> 16);
- ui16Crc = CRC16_ITER(ui16Crc, ui32Temp >> 24);
-
- //
- // Perform the second CRC on only the even-index data bytes.
- //
- ui16Cri8Even = CRC16_ITER(ui16Cri8Even, ui32Temp);
- ui16Cri8Even = CRC16_ITER(ui16Cri8Even, ui32Temp >> 16);
-
- //
- // Perform the third CRC on only the odd-index data bytes.
- //
- ui16Cri8Odd = CRC16_ITER(ui16Cri8Odd, ui32Temp >> 8);
- ui16Cri8Odd = CRC16_ITER(ui16Cri8Odd, ui32Temp >> 24);
- }
-
- //
- // Return the resulting CRC-16 values.
- //
- pui16Crc3[0] = ui16Crc;
- pui16Crc3[1] = ui16Cri8Even;
- pui16Crc3[2] = ui16Cri8Odd;
-}
-
-//*****************************************************************************
-//
-//! Calculates the CRC-32 of an array of bytes.
-//!
-//! \param ui32Crc is the starting CRC-32 value.
-//! \param pui8Data is a pointer to the data buffer.
-//! \param ui32Count is the number of bytes in the data buffer.
-//!
-//! This function is used to calculate the CRC-32 of the input buffer. The
-//! CRC-32 is computed in a running fashion, meaning that the entire data block
-//! that is to have its CRC-32 computed does not need to be supplied all at
-//! once. If the input buffer contains the entire block of data, then
-//! \b ui32Crc should be set to 0xFFFFFFFF. If, however, the entire block of
-//! data is not available, then \b ui32Crc should be set to 0xFFFFFFFF for the
-//! first portion of the data, and then the returned value should be passed
-//! back in as \b ui32Crc for the next portion of the data. Once all data has
-//! been passed to the function, the final CRC-32 can be obtained by inverting
-//! the last returned value.
-//!
-//! For example, to compute the CRC-32 of a block that has been split into
-//! three pieces, use the following:
-//!
-//! \verbatim
-//! ui32Crc = Crc32(0xFFFFFFFF, pui8Data1, ui32Len1);
-//! ui32Crc = Crc32(ui32Crc, pui8Data2, ui32Len2);
-//! ui32Crc = Crc32(ui32Crc, pui8Data3, ui32Len3);
-//! ui32Crc ^= 0xFFFFFFFF;
-//! \endverbatim
-//!
-//! Computing a CRC-32 in a running fashion is useful in cases where the data
-//! is arriving via a serial link (for example) and is therefore not all
-//! available at one time.
-//!
-//! \return The accumulated CRC-32 of the input data.
-//
-//*****************************************************************************
-uint32_t
-Crc32(uint32_t ui32Crc, const uint8_t *pui8Data, uint32_t ui32Count)
-{
- uint32_t ui32Temp;
-
- //
- // If the data buffer is not 16 bit-aligned, then perform a single step
- // of the CRC to make it 16 bit-aligned.
- //
- if((uint32_t)pui8Data & 1)
- {
- //
- // Perform the CRC on this input byte.
- //
- ui32Crc = CRC32_ITER(ui32Crc, *pui8Data);
-
- //
- // Skip this input byte.
- //
- pui8Data++;
- ui32Count--;
- }
-
- //
- // If the data buffer is not word-aligned and there are at least two bytes
- // of data left, then perform two steps of the CRC to make it word-aligned.
- //
- if(((uint32_t)pui8Data & 2) && (ui32Count > 1))
- {
- //
- // Read the next int16_t.
- //
- ui32Temp = *(uint16_t *)pui8Data;
-
- //
- // Perform the CRC on these two bytes.
- //
- ui32Crc = CRC32_ITER(ui32Crc, ui32Temp);
- ui32Crc = CRC32_ITER(ui32Crc, ui32Temp >> 8);
-
- //
- // Skip these input bytes.
- //
- pui8Data += 2;
- ui32Count -= 2;
- }
-
- //
- // While there is at least a word remaining in the data buffer, perform
- // four steps of the CRC to consume a word.
- //
- while(ui32Count > 3)
- {
- //
- // Read the next word.
- //
- ui32Temp = *(uint32_t *)pui8Data;
-
- //
- // Perform the CRC on these four bytes.
- //
- ui32Crc = CRC32_ITER(ui32Crc, ui32Temp);
- ui32Crc = CRC32_ITER(ui32Crc, ui32Temp >> 8);
- ui32Crc = CRC32_ITER(ui32Crc, ui32Temp >> 16);
- ui32Crc = CRC32_ITER(ui32Crc, ui32Temp >> 24);
-
- //
- // Skip these input bytes.
- //
- pui8Data += 4;
- ui32Count -= 4;
- }
-
- //
- // If there are 16 bits left in the input buffer, then perform two steps of
- // the CRC.
- //
- if(ui32Count > 1)
- {
- //
- // Read the two bytes.
- //
- ui32Temp = *(uint16_t *)pui8Data;
-
- //
- // Perform the CRC on these two bytes.
- //
- ui32Crc = CRC32_ITER(ui32Crc, ui32Temp);
- ui32Crc = CRC32_ITER(ui32Crc, ui32Temp >> 8);
-
- //
- // Skip these input bytes.
- //
- pui8Data += 2;
- ui32Count -= 2;
- }
-
- //
- // If there is a final byte remaining in the input buffer, then perform a
- // single step of the CRC.
- //
- if(ui32Count != 0)
- {
- ui32Crc = CRC32_ITER(ui32Crc, *pui8Data);
- }
-
- //
- // Return the resulting CRC-32 value.
- //
- return(ui32Crc);
-}
-
diff --git a/Software/Embedded_SW/Embedded/Common/Software_CRC/sw_crc.h b/Software/Embedded_SW/Embedded/Common/Software_CRC/sw_crc.h
deleted file mode 100644
index 92f4c1ee7..000000000
--- a/Software/Embedded_SW/Embedded/Common/Software_CRC/sw_crc.h
+++ /dev/null
@@ -1,40 +0,0 @@
-
-#ifndef COMMON_SW_CRC_H_
-#define COMMON_SW_CRC_H_
-//*****************************************************************************
-//
-// If building with a C++ compiler, make all of the definitions in this header
-// have a C binding.
-//
-//*****************************************************************************
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-#include <stdint.h>
-
-//*****************************************************************************
-//
-// Prototypes for the functions.
-//
-//*****************************************************************************
-extern uint8_t Crc8CCITT(uint8_t ui8Crc, const uint8_t *pui8Data,
- uint32_t ui32Count);
-extern uint16_t Crc16(uint16_t ui16Crc, const uint8_t *pui8Data,
- uint32_t ui32Count);
-extern uint16_t Crc16Array(uint32_t ui32WordLen, const uint32_t *pui32Data);
-extern void Crc16Array3(uint32_t ui32WordLen, const uint32_t *pui32Data,
- uint16_t *pui16Crc3);
-extern uint32_t Crc32(uint32_t ui32Crc, const uint8_t *pui8Data,
- uint32_t ui32Count);
-
-//*****************************************************************************
-//
-// Mark the end of the C bindings section for C++ compilers.
-//
-//*****************************************************************************
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* COMMON_SW_CRC_H_ */
diff --git a/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/Pin_config.c b/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/Pin_config.c
index abf773090..10fbdfafa 100644
--- a/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/Pin_config.c
+++ b/Software/Embedded_SW/Embedded/Common/Sys_PinOut_Config/Pin_config.c
@@ -4,6 +4,8 @@
#include <driverlib/gpio.h>
#include <inc/hw_memmap.h>
+#ifdef EVALUATION_BOARD
+
void InitPinOutPullUps(void)
{
GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_INT_PIN_0,GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD_WPU);
@@ -47,6 +49,7 @@ void InitPinOutPullUps(void)
GPIOPadConfigSet(GPIO_PORTT_BASE, GPIO_INT_PIN_2,GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD_WPU);
}
+#endif
diff --git a/Software/Embedded_SW/Embedded/Common/Utilities/ASCII.c b/Software/Embedded_SW/Embedded/Common/Utilities/ASCII.c
new file mode 100644
index 000000000..80035b588
--- /dev/null
+++ b/Software/Embedded_SW/Embedded/Common/Utilities/ASCII.c
@@ -0,0 +1,78 @@
+/*
+ * ASCII.c
+ *
+ * Created on: 31 Aug 2020
+ * Author: avi
+ */
+#include "include.h"
+#include <stdint.h>
+#include <stdbool.h>
+#include <DataDef.h>
+
+// Convert ASCII HEX to decimal
+int ASCII_Hex_To_Decimal(char hexVal[], int len)
+{
+ int i = 0;
+
+ // Initializing base value to 1, i.e 16^0
+ int base = 1;
+
+ int dec_val = 0;
+
+ // Extracting characters as digits from last character
+ for (i = 0; i < len - 1; i++)
+ {
+ // if character lies in '0'-'9', converting
+ // it to integral 0-9 by subtracting 48 from
+ // ASCII value.
+ if (hexVal[i] >= '0' && hexVal[i] <= '9')
+ {
+ dec_val += (hexVal[i] - 48)*base;
+
+ // incrementing base by power
+ base = base * 16;
+ }
+
+ // if character lies in 'A'-'F' , converting
+ // it to integral 10 - 15 by subtracting 55
+ // from ASCII value
+ else if (hexVal[i] >= 'A' && hexVal[i] <= 'F')
+ {
+ dec_val += (hexVal[i] - 55)*base;
+
+ // incrementing base by power
+ base = base * 16;
+ }
+ }
+
+ return dec_val;
+}
+
+// function to convert decimal to ASCII hexadecimal
+uint32_t Decimal_To_ASCII_Hex(int n)
+{
+ Word_to_Bytes Word2Bytes;
+
+ // counter for hexadecimal number array
+ int i = 0;
+ while (n != 0)
+ {
+ // temporary variable to store remainder
+ int temp = 0;
+
+ // storing remainder in temp variable.
+ temp = n % 16;
+
+ Word2Bytes.Byte[i] = temp + 0x30;
+ i++;
+
+ n = n / 16;
+ }
+
+ for( ;i<4 ;i++)
+ Word2Bytes.Byte[i] = 0x30;
+
+ return Word2Bytes.Word;
+}
+
+
diff --git a/Software/Embedded_SW/Embedded/Common/Utilities/ASCII.h b/Software/Embedded_SW/Embedded/Common/Utilities/ASCII.h
new file mode 100644
index 000000000..2c3ad1a55
--- /dev/null
+++ b/Software/Embedded_SW/Embedded/Common/Utilities/ASCII.h
@@ -0,0 +1,16 @@
+/*
+ * ASCII.h
+ *
+ * Created on: 31 Aug 2020
+ * Author: avi
+ */
+
+#ifndef COMMON_UTILITIES_ASCII_H_
+#define COMMON_UTILITIES_ASCII_H_
+
+int ASCII_Hex_To_Decimal(char hexVal[], int len);
+uint32_t Decimal_To_ASCII_Hex(int n);
+
+
+
+#endif /* COMMON_UTILITIES_ASCII_H_ */
diff --git a/Software/Embedded_SW/Embedded/Common/Utilities/RFIDTagHandling.c b/Software/Embedded_SW/Embedded/Common/Utilities/RFIDTagHandling.c
index 1e6550da4..7bc1c2e54 100644
--- a/Software/Embedded_SW/Embedded/Common/Utilities/RFIDTagHandling.c
+++ b/Software/Embedded_SW/Embedded/Common/Utilities/RFIDTagHandling.c
@@ -5,22 +5,37 @@
* Author: shlomo
*/
#include "include.h"
-
-#include "Modules/Waste/Waste.h"
#include "Modules/IFS/ifs.h"
#include "Modules/AlarmHandling/AlarmHandling.h"
#include "PMR/Diagnostics/CartridgeValidationRequest.pb-c.h"
#include "PMR/Diagnostics/CartridgeValidationResponse.pb-c.h"
#include "PMR/Diagnostics/CartridgeTagContent.pb-c.h"
#include <PMR/Diagnostics/EventType.pb-c.h>
-#include <Utilities/RfidTagContent.h>
+#include <Utilities/RfidTagHandling.h>
#include <Drivers/I2C_Communication/RFID_NFC/RFIDTagInfo.h>
#include "drivers/Valves/Valve.h"
-#include "Modules/Waste/Waste.h"
#include "CartridgeSlot.pb-c.h"
#include "CartridgeTagContent.pb-c.h"
#include "Cartridge.pb-c.h"
+uint32_t LoadCartridgeData(PANEL_BUTTON_OR_CRAT_ID Cart,void *CartridgePtr)
+{
+ if (CartridgePtr == NULL) return ERROR;
+ if (Cart>CART_3) return ERROR;
+ Cartridge *Cartridge = CartridgePtr;
+ /*
+ ProtobufCMessage base;
+ protobuf_c_boolean has_slot;
+ CartridgeSlot slot;
+ CartridgeTagContent *tag;
+ protobuf_c_boolean has_index;
+ int32_t index;
+ * */
+ Cartridge->has_slot = true;
+ Cartridge->slot = Cart-1;
+ //Cartridge->tag = NFCTag_Tag2PPC(NFC_TagRead[Cart-1].Struct);
+ return OK;
+}
/*
typedef struct
{
@@ -88,51 +103,62 @@ typedef struct
uint32_t Checksum_CRC16:16;
}NFCTag_t;
- struct _CartridgeTagContent
+struct _CartridgeTagContent
{
ProtobufCMessage base;
- protobuf_c_boolean has_uniqueid;
- uint32_t uniqueid;
- char *serialnumber;
- char *factoryid;
- protobuf_c_boolean has_fillingsystemid;
- int32_t fillingsystemid;
+ char *taguniqueid;
+ char *cartsn;
+ protobuf_c_boolean has_inkfactoryid;
+ uint32_t inkfactoryid;
+ protobuf_c_boolean has_fillsysid;
+ uint32_t fillsysid;
+ char *workorder;
char *colorname;
- protobuf_c_boolean has_colorcategory;
- int32_t colorcategory;
- protobuf_c_boolean has_colortyperevision;
- int32_t colortyperevision;
+ protobuf_c_boolean has_inkcategory;
+ uint32_t inkcategory;
+ protobuf_c_boolean has_type_rev;
+ uint32_t type_rev;
protobuf_c_boolean has_cartridgesize;
- int32_t cartridgesize;
- protobuf_c_boolean has_filledinkvolume;
- int32_t filledinkvolume;
- char *inkbatchnum;
+ uint32_t cartridgesize;
+ protobuf_c_boolean has_filedinkvol;
+ uint32_t filedinkvol;
+ char *inkbatchno;
char *inkmfgdate;
char *inkeoldate;
- char *cartridgefillingdate;
- char *wastefilleddate;
+ char *cartfilldate;
+ char *wastefilldate;
+ protobuf_c_boolean has_misc;
+ uint32_t misc;
protobuf_c_boolean has_plugincounter;
- int32_t plugincounter;
- protobuf_c_boolean has_inkfill;
- protobuf_c_boolean inkfill;
- protobuf_c_boolean has_inkused;
- protobuf_c_boolean inkused;
- protobuf_c_boolean has_inkempty;
- protobuf_c_boolean inkempty;
- protobuf_c_boolean has_wasteempty;
- protobuf_c_boolean wasteempty;
- protobuf_c_boolean has_wastefilling;
- protobuf_c_boolean wastefilling;
- protobuf_c_boolean has_wastefull;
- protobuf_c_boolean wastefull;
+ uint32_t plugincounter;
+ protobuf_c_boolean has_inkfillstatus;
+ protobuf_c_boolean inkfillstatus;
+ protobuf_c_boolean has_inkusedstatus;
+ protobuf_c_boolean inkusedstatus;
+ protobuf_c_boolean has_inkemptystatus;
+ protobuf_c_boolean inkemptystatus;
+ protobuf_c_boolean has_wasteemptystatus;
+ protobuf_c_boolean wasteemptystatus;
+ protobuf_c_boolean has_wastefillingstatus;
+ protobuf_c_boolean wastefillingstatus;
+ protobuf_c_boolean has_wastefullstatus;
+ protobuf_c_boolean wastefullstatus;
protobuf_c_boolean has_blocked;
protobuf_c_boolean blocked;
protobuf_c_boolean has_fail;
protobuf_c_boolean fail;
protobuf_c_boolean has_wastecounter;
- int32_t wastecounter;
- char *machineidinkused;
- char *machineidwasteused;
+ uint32_t wastecounter;
+ char *machineidinl;
+ char *machineidwst;
+ char *spare;
+ protobuf_c_boolean has_counter;
+ uint32_t counter;
+ protobuf_c_boolean has_tagvalid;
+ protobuf_c_boolean tagvalid;
+ char *hashvalue;
+ protobuf_c_boolean has_checksum_crc16;
+ uint32_t checksum_crc16;
};
*/
CartridgeTagContent * NFCTag_Tag2PPC(NFCTag_t *Tag)
@@ -144,50 +170,56 @@ CartridgeTagContent * NFCTag_Tag2PPC(NFCTag_t *Tag)
cartridge_tag_content__init(PpcTag);
- PpcTag->uniqueid = Tag->TagUniqueID;
- PpcTag->serialnumber = Tag->CartSN;
- PpcTag->has_factoryid = true;
- PpcTag->factoryid = Tag->InkFactoryID;
+ strncpy(PpcTag->taguniqueid , Tag->tagId,sizeof(Tag->tagId));
+ strncpy(PpcTag->cartsn , Tag->Serial,sizeof(Tag->Serial));
+ strncpy(PpcTag->workorder , Tag->workOrder,sizeof(Tag->workOrder));
+ strncpy(PpcTag->colorname , Tag->colorName,sizeof(Tag->colorName));
+ strncpy(PpcTag->inkbatchno , Tag->inkBatch,sizeof(Tag->inkBatch));
+ strncpy(PpcTag->inkmfgdate , Tag->inkMfgDate,sizeof(Tag->inkMfgDate));
+ strncpy(PpcTag->inkeoldate , Tag->inkEolDate,sizeof(Tag->inkEolDate));
+ strncpy(PpcTag->cartfilldate , Tag->CartFillDate,sizeof(Tag->CartFillDate));
+ strncpy(PpcTag->wastefilldate , Tag->WasteFillDate,sizeof(Tag->WasteFillDate));
+ strncpy(PpcTag->machineidinl , Tag->MachineIdInl,sizeof(Tag->MachineIdInl));
+ strncpy(PpcTag->machineidwst , Tag->MachineIdWst,sizeof(Tag->MachineIdWst));
+ strncpy(PpcTag->spare , Tag->reserved,sizeof(Tag->reserved));
+ strncpy(PpcTag->hashvalue , Tag->HashValue,sizeof(Tag->HashValue));
- PpcTag->has_fillingsystemid = true;
- PpcTag->fillingsystemid = Tag->FillSysID;
- PpcTag->workorder = Tag->WorkOrder;
- PpcTag->colorname = Tag->ColorName;
- PpcTag->has_colorcategory = true;
- PpcTag->colorcategory = Tag->InkCategory;
- PpcTag->has_colortyperevision = true;
- PpcTag->colortyperevision = Tag->Type_Rev;
+
+
+ PpcTag->has_inkfactoryid = true;
+ PpcTag->inkfactoryid = (uint32_t)Tag->factoryID;
+ PpcTag->has_fillsysid = true;
+ PpcTag->fillsysid = Tag->fillingSystem;
+ PpcTag->has_inkcategory = true;
+ PpcTag->inkcategory = Tag->catagory;
+ PpcTag->has_type_rev = true;
+ PpcTag->type_rev = Tag->type;
PpcTag->has_cartridgesize = true;
- PpcTag->cartridgesize = Tag->CartridgeSize;
- PpcTag->has_filledinkvolume = true;
- PpcTag->filledinkvolume = Tag->FiledInkVol;
- PpcTag->inkbatchnum = Tag->InkBatchNo;
- PpcTag->inkmfgdate = Tag->InkMFGDate;
- PpcTag->inkeoldate = Tag->InkEOLDate;
- PpcTag->cartridgefillingdate = Tag->CartFillDate;
- PpcTag->wastefilleddate = Tag->WasteFillDate;
+ PpcTag->cartridgesize = Tag->cartSize;
+ PpcTag->has_filedinkvol = true;
+ PpcTag->filedinkvol = Tag->inkVolume;
+ PpcTag->has_misc = true;
+ PpcTag->misc = Tag->Misc;
PpcTag->has_plugincounter = true;
- PpcTag->plugincounter = Tag->PluginCounter;
- PpcTag->has_inkfill = true;
- PpcTag->inkfill = Tag->InkFillStatus;
- PpcTag->has_inkused = true;
- PpcTag->inkused = Tag->InkUsedStatus;
- PpcTag->has_inkempty = true;
- PpcTag->inkempty = Tag->InkEmptyStatus;
- PpcTag->has_wasteempty = true;
- PpcTag->wasteempty = Tag->WasteEmptyStatus;
- PpcTag->has_wastefilling = true;
- PpcTag->wastefilling = Tag->WasteFillingStatus;
- PpcTag->has_wastefull = true;
- PpcTag->wastefull = Tag->WasteFullStatus;
+ PpcTag->plugincounter = Tag->pluginCounter;
+ PpcTag->has_inkfillstatus = true;
+ PpcTag->inkfillstatus = Tag->inkFill;
+ PpcTag->has_inkusedstatus = true;
+ PpcTag->inkusedstatus = Tag->inkUsed;
+ PpcTag->has_inkemptystatus = true;
+ PpcTag->inkemptystatus = Tag->inkEmpty;
+ PpcTag->has_inkemptystatus = true;
+ PpcTag->inkemptystatus = Tag->wasteEmpty;
+ PpcTag->has_wastefillingstatus = true;
+ PpcTag->wastefillingstatus = Tag->wasteFilling;
+ PpcTag->has_wastefullstatus = true;
+ PpcTag->wastefullstatus = Tag->wasteFull;
PpcTag->has_blocked = true;
- PpcTag->blocked = Tag->Blocked;
+ PpcTag->blocked = Tag->blocked;
PpcTag->has_fail = true;
- PpcTag->fail = Tag->Fail;
+ PpcTag->fail = Tag->fail;
PpcTag->has_wastecounter = true;
- PpcTag->wastecounter = Tag->WasteCounter;
- PpcTag->machineidinkused = Tag->MachineIdINL;
- PpcTag->machineidwasteused = Tag->MachineIdWST;
+ PpcTag->wastecounter = Tag->counter;
return PpcTag;
}
@@ -198,53 +230,56 @@ CartridgeTagContent * NFCTag_Tag2PPC(NFCTag_t *Tag)
return NULL;
memset (Tag,0,sizeof(Tag));
- memcpy(Tag->TagUniqueID , PpcTag->uniqueid,sizeof(Tag->TagUniqueID));
- memcpy(Tag->CartSN , PpcTag->serialnumber,sizeof(Tag->CartSN));
- if (PpcTag->has_factoryid == true)
- Tag->InkFactoryID = PpcTag->factoryid;
- if (PpcTag->has_fillingsystemid == true)
- Tag->FillSysID = PpcTag->fillingsystemid;
- memcpy(Tag->ColorName , PpcTag->colorname,sizeof(Tag->ColorName));
- if (PpcTag->has_colorcategory == true)
- Tag->InkCategory = PpcTag->colorcategory;
- if (PpcTag->has_colortyperevision == true)
- Tag->Type_Rev = PpcTag->colortyperevision;
+ strncpy(Tag->tagId , PpcTag->taguniqueid,sizeof(Tag->tagId));
+ strncpy(Tag->Serial , PpcTag->cartsn,sizeof(Tag->Serial));
+ if (PpcTag->has_inkfactoryid == true)
+ memcpy(Tag->factoryID,PpcTag->inkfactoryid,3);
+ if (PpcTag->has_fillsysid == true)
+ Tag->fillingSystem = PpcTag->fillsysid;
+ strncpy(Tag->colorName , PpcTag->colorname,sizeof(Tag->colorName));
+ strncpy(Tag->workOrder , PpcTag->workorder ,sizeof(Tag->workOrder));
+ if (PpcTag->has_inkcategory == true)
+ memcpy( Tag->catagory, PpcTag->inkcategory,sizeof(Tag->catagory));
+ if (PpcTag->has_type_rev == true)
+ Tag->type = PpcTag->type_rev;
if (PpcTag->has_cartridgesize == true)
- Tag->CartridgeSize = PpcTag->cartridgesize;
- if (PpcTag->has_filledinkvolume == true)
- Tag->FiledInkVol = PpcTag->filledinkvolume;
- memcpy(Tag->InkBatchNo , PpcTag->inkbatchnum,sizeof(Tag->InkBatchNo));
- memcpy(Tag->InkMFGDate , PpcTag->inkmfgdate,sizeof(Tag->InkMFGDate));
- memcpy(Tag->InkEOLDate , PpcTag->inkeoldate,sizeof(Tag->InkEOLDate));
- memcpy(Tag->CartFillDate , PpcTag->cartridgefillingdate,sizeof(Tag->CartFillDate));
- memcpy(Tag->WasteFillDate , PpcTag->wastefilleddate,sizeof(Tag->WasteFillDate));
+ Tag->cartSize = PpcTag->cartridgesize;
+ if (PpcTag->has_filedinkvol == true)
+ Tag->inkVolume = PpcTag->filedinkvol;
+ strncpy(Tag->inkBatch , PpcTag->inkbatchno,sizeof(Tag->inkBatch));
+ strncpy(Tag->inkMfgDate , PpcTag->inkmfgdate,sizeof(Tag->inkMfgDate));
+ strncpy(Tag->inkEolDate , PpcTag->inkeoldate,sizeof(Tag->inkEolDate));
+ strncpy(Tag->CartFillDate , PpcTag->cartfilldate,sizeof(Tag->CartFillDate));
+ strncpy(Tag->WasteFillDate , PpcTag->wastefilldate,sizeof(Tag->WasteFillDate));
if (PpcTag->has_plugincounter == true)
- Tag->PluginCounter = PpcTag->plugincounter;
- if (PpcTag->has_inkfill == true)
- Tag->InkFillStatus = PpcTag->inkfill;
- if (PpcTag->has_inkused == true)
- Tag->InkUsedStatus = PpcTag->inkused;
- if (PpcTag->has_inkempty == true)
- Tag->InkEmptyStatus = PpcTag->inkempty;
- if (PpcTag->has_wasteempty == true)
- Tag->WasteEmptyStatus = PpcTag->wasteempty;
- if (PpcTag->has_wastefilling == true)
- Tag->WasteFillingStatus = PpcTag->wastefilling;
- if (PpcTag->has_wastefull == true)
- Tag->WasteFullStatus = PpcTag->wastefull;
+ Tag->pluginCounter = PpcTag->plugincounter;
+ if (PpcTag->has_inkfillstatus == true)
+ Tag->inkFill = PpcTag->inkfillstatus;
+ if (PpcTag->has_inkusedstatus == true)
+ Tag->inkUsed = PpcTag->inkusedstatus;
+ if (PpcTag->has_inkemptystatus == true)
+ Tag->inkEmpty = PpcTag->inkemptystatus;
+ if (PpcTag->has_wasteemptystatus == true)
+ Tag->wasteEmpty = PpcTag->wasteemptystatus;
+ if (PpcTag->has_wastefillingstatus == true)
+ Tag->wasteFilling = PpcTag->wastefillingstatus;
+ if (PpcTag->has_wastefullstatus == true)
+ Tag->wasteFull = PpcTag->wastefullstatus;
if (PpcTag->has_blocked == true)
- Tag->Blocked = PpcTag->blocked;
+ Tag->blocked = PpcTag->blocked;
if (PpcTag->has_fail == true)
- Tag->Fail = PpcTag->fail;
+ Tag->fail = PpcTag->fail;
if (PpcTag->has_wastecounter == true)
- Tag->WasteCounter = PpcTag->wastecounter;
- memcpy(Tag->MachineIdINL , PpcTag->machineidinkused,sizeof(Tag->MachineIdINL));
- memcpy(Tag->MachineIdWST , PpcTag->machineidwasteused,sizeof(Tag->MachineIdWST));
+ Tag->wasteCounter = PpcTag->wastecounter;
+ strncpy(Tag->MachineIdInl , PpcTag->machineidinl,sizeof(Tag->MachineIdInl));
+ strncpy(Tag->MachineIdWst , PpcTag->machineidwst,sizeof(Tag->MachineIdWst));
+ strncpy(Tag->reserved,PpcTag->spare ,sizeof(Tag->reserved));
+ strncpy(Tag->HashValue,PpcTag->hashvalue ,sizeof(Tag->HashValue));
return Tag;
}
-CartridgeTagContent * RFID_Tag2PPC(RfidTagContent *Tag)
+/*CartridgeTagContent * RFID_Tag2PPC(RfidTagContent *Tag)
{
CartridgeTagContent *PpcTag = my_malloc(sizeof(CartridgeTagContent));
@@ -305,13 +340,13 @@ RfidTagContent * RFID_PPC2Tag( CartridgeTagContent *PpcTag)
return NULL;
memset (Tag,0,sizeof(Tag));
- memcpy(Tag->uniqueid , PpcTag->uniqueid,sizeof(Tag->uniqueid));
- memcpy(Tag->serialnumber , PpcTag->serialnumber,sizeof(Tag->serialnumber));
- memcpy(Tag->factoryid , PpcTag->factoryid,sizeof(Tag->factoryid));
+ strncpy(Tag->uniqueid , PpcTag->uniqueid,sizeof(Tag->uniqueid));
+ strncpy(Tag->serialnumber , PpcTag->serialnumber,sizeof(Tag->serialnumber));
+ strncpy(Tag->factoryid , PpcTag->factoryid,sizeof(Tag->factoryid));
if (PpcTag->has_fillingsystemid == true)
Tag->fillingsystemid = PpcTag->fillingsystemid;
- memcpy(Tag->colorname , PpcTag->colorname,sizeof(Tag->colorname));
+ strncpy(Tag->colorname , PpcTag->colorname,sizeof(Tag->colorname));
if (PpcTag->has_colorcategory == true)
Tag->colorcategory = PpcTag->colorcategory;
if (PpcTag->has_colortyperevision == true)
@@ -320,11 +355,11 @@ RfidTagContent * RFID_PPC2Tag( CartridgeTagContent *PpcTag)
Tag->cartridgesize = PpcTag->cartridgesize;
if (PpcTag->has_filledinkvolume == true)
Tag->filledinkvolume = PpcTag->filledinkvolume;
- memcpy(Tag->inkbatchnum , PpcTag->inkbatchnum,sizeof(Tag->inkbatchnum));
- memcpy(Tag->inkmfgdate , PpcTag->inkmfgdate,sizeof(Tag->inkmfgdate));
- memcpy(Tag->inkeoldate , PpcTag->inkeoldate,sizeof(Tag->inkeoldate));
- memcpy(Tag->cartridgefillingdate , PpcTag->cartridgefillingdate,sizeof(Tag->cartridgefillingdate));
- memcpy(Tag->wastefilleddate , PpcTag->wastefilleddate,sizeof(Tag->wastefilleddate));
+ strncpy(Tag->inkbatchnum , PpcTag->inkbatchnum,sizeof(Tag->inkbatchnum));
+ strncpy(Tag->inkmfgdate , PpcTag->inkmfgdate,sizeof(Tag->inkmfgdate));
+ strncpy(Tag->inkeoldate , PpcTag->inkeoldate,sizeof(Tag->inkeoldate));
+ strncpy(Tag->cartridgefillingdate , PpcTag->cartridgefillingdate,sizeof(Tag->cartridgefillingdate));
+ strncpy(Tag->wastefilleddate , PpcTag->wastefilleddate,sizeof(Tag->wastefilleddate));
if (PpcTag->has_plugincounter == true)
Tag->plugincounter = PpcTag->plugincounter;
if (PpcTag->has_inkfill == true)
@@ -345,9 +380,10 @@ RfidTagContent * RFID_PPC2Tag( CartridgeTagContent *PpcTag)
Tag->fail = PpcTag->fail;
if (PpcTag->has_wastecounter == true)
Tag->wastecounter = PpcTag->wastecounter;
- memcpy(Tag->machineidinkused , PpcTag->machineidinkused,sizeof(Tag->machineidinkused));
- memcpy(Tag->machineidwasteused , PpcTag->machineidwasteused,sizeof(Tag->machineidwasteused));
+ strncpy(Tag->machineidinkused , PpcTag->machineidinkused,sizeof(Tag->machineidinkused));
+ strncpy(Tag->machineidwasteused , PpcTag->machineidwasteused,sizeof(Tag->machineidwasteused));
return Tag;
-}
+}*/
+
diff --git a/Software/Embedded_SW/Embedded/Common/Utilities/RFIDTagHandling.h b/Software/Embedded_SW/Embedded/Common/Utilities/RFIDTagHandling.h
new file mode 100644
index 000000000..0eee787f4
--- /dev/null
+++ b/Software/Embedded_SW/Embedded/Common/Utilities/RFIDTagHandling.h
@@ -0,0 +1,16 @@
+/*
+ * RFIDTagHandling.h
+ *
+ * Created on: May 8, 2020
+ * Author: shlomo
+ */
+#include "include.h"
+
+#include "PMR/Diagnostics/CartridgeTagContent.pb-c.h"
+#include <Drivers/I2C_Communication/RFID_NFC/RFIDTagInfo.h>
+
+CartridgeTagContent * NFCTag_Tag2PPC(NFCTag_t *Tag);
+ NFCTag_t * NFCTag_PPC2Tag( CartridgeTagContent *PpcTag);
+ uint32_t LoadCartridgeData(PANEL_BUTTON_OR_CRAT_ID Cart,void *CartridgePtr);
+
+
diff --git a/Software/Embedded_SW/Embedded/Common/Utilities/RfidTagContent.h b/Software/Embedded_SW/Embedded/Common/Utilities/RfidTagContent.h
deleted file mode 100644
index daebf8e68..000000000
--- a/Software/Embedded_SW/Embedded/Common/Utilities/RfidTagContent.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * RfidTagContent.h
- *
- * Created on: Jul 8, 2019
- * Author: shlomo
- */
-
-#ifndef MODULES_IFS_RFIDTAGCONTENT_H_
-#define MODULES_IFS_RFIDTAGCONTENT_H_
-
-#include "PMR/Diagnostics/CartridgeSlot.pb-c.h"
-#include "PMR/Diagnostics/CartridgeTagContent.pb-c.h"
-#include <Drivers/I2C_Communication/RFID_NFC/RFIDTagInfo.h>
-
-#include <DataDef.h>
-#include "include.h"
-
-
-#define MAX_CARTRIDGES (CARTRIDGE_SLOT__WasteLower+1)
-typedef struct
-{
- char uniqueid[8];
- char serialnumber[16];
- int32_t factoryid;
- int32_t fillingsystemid;
- char colorname[12];
- int32_t colorcategory;
- int32_t colortyperevision;
- int32_t cartridgesize;
- int32_t filledinkvolume;
- char inkbatchnum[10];
- char inkmfgdate[6];
- char inkeoldate[6];
- char cartridgefillingdate[6];
- char wastefilleddate[6];
- int32_t plugincounter;
- bool inkfill;
- bool inkused;
- bool inkempty;
- bool wasteempty;
- bool wastefilling;
- bool wastefull;
- bool blocked;
- bool fail;
- int32_t wastecounter;
- char machineidinkused[16];
- char machineidwasteused[16];
-}RfidTagContent;
-
-CartridgeTagContent * RFID_Tag2PPC(RfidTagContent *Tag);
-RfidTagContent * RFID_PPC2Tag( CartridgeTagContent *PpcTag);
-
-NFCTag_t * NFCTag_PPC2Tag( CartridgeTagContent *PpcTag);
-CartridgeTagContent * NFCTag_Tag2PPC(NFCTag_t *Tag);
-
-
-#endif /* MODULES_IFS_RFIDTAGCONTENT_H_ */
diff --git a/Software/Embedded_SW/Embedded/Common/Utilities/delay.c b/Software/Embedded_SW/Embedded/Common/Utilities/delay.c
new file mode 100644
index 000000000..ef095fe5b
--- /dev/null
+++ b/Software/Embedded_SW/Embedded/Common/Utilities/delay.c
@@ -0,0 +1,42 @@
+/*
+ * delay.c - Delay in millisecond and microsecond functions
+ *
+ * Convert from SysCtlDelay in TivaWare library to milliseconds and microseconds delay.
+ *
+ * Created on: Dec 13, 2018
+ * Author: avi
+ */
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "driverlib/sysctl.h"
+#include "Include.h"
+
+
+
+void delayms(uint32_t ui32ms)
+{
+ //SysCtlClockGet();
+ // 1 clock cycle = 1 / SysCtlClockGet() second
+ // 1 SysCtlDelay = 3 clock cycle = 3 / SysCtlClockGet() second
+ // 1 second = SysCtlClockGet() / 3
+ // 0.001 second = 1 ms = SysCtlClockGet() / 3 / 1000
+ //int i;
+
+ //for(i=0;i<(ui32ms);i++)
+
+ //if(ui32ms == 10)
+ // ui32ms = 20;
+
+ SysCtlDelay( ui32ms * (SYS_CLK_FREQ / 3 / 1000));
+}
+
+void delayUs(uint32_t ui32Us)
+{
+ SysCtlDelay(ui32Us * (SYS_CLK_FREQ / 3 / 1000000));
+}
+
+
+
+
+
diff --git a/Software/Embedded_SW/Embedded/Common/Utilities/delay.h b/Software/Embedded_SW/Embedded/Common/Utilities/delay.h
new file mode 100644
index 000000000..a070cae1d
--- /dev/null
+++ b/Software/Embedded_SW/Embedded/Common/Utilities/delay.h
@@ -0,0 +1,17 @@
+/*
+ * delay.h
+ *
+ * Created on: Dec 13, 2018
+ * Author: avi
+ */
+
+#ifndef COMMON_UTILITIES_DELAY_H_
+#define COMMON_UTILITIES_DELAY_H_
+
+void delayms(uint32_t ui32ms);
+
+void delayUs(uint32_t ui32Us);
+
+
+
+#endif /* COMMON_UTILITIES_DELAY_H_ */
diff --git a/Software/Embedded_SW/Embedded/Common/Utilities/idle_task.c b/Software/Embedded_SW/Embedded/Common/Utilities/idle_task.c
index 86c030dc0..7ba28bbe0 100644
--- a/Software/Embedded_SW/Embedded/Common/Utilities/idle_task.c
+++ b/Software/Embedded_SW/Embedded/Common/Utilities/idle_task.c
@@ -26,8 +26,8 @@
#include "Modules/Control/Control.h"
#include "Modules/Control/MillisecTask.h"
-#define MAX_PRIORITY 15
-#define SECOND_MAX_PRIORITY 14
+#define MAX_PRIORITY 24
+#define SECOND_MAX_PRIORITY 23
#define MIN_PRIORITY 0
#define SECOND_MIN_PRIORITY 1
#define TICKS_IN_SECOND 1000
@@ -51,7 +51,7 @@ static uint32_t idle_counter;
static long next_interval; /*by ticks*/
static bool first_time_after_init;
static int system_load;
-static int load;
+static int Load;
static int max_system_load;
static int max_load;
static uint32_t idle_load_table[101];
@@ -188,14 +188,14 @@ uint32_t unload_max_count=0;
calculate_system_load(current_load);
old_idle_counter = idle_counter;
time_interval = next_interval;
- load=current_load;
+ Load=current_load;
prev_load = current_load / 10;
- idle_load_table[load]++;
- if(load > max_load) max_load = load;
- //REPORT_MSG(load,"Real time load");
+ idle_load_table[Load]++;
+ if(Load > max_load) max_load = Load;
+ //REPORT_MSG(Load,"Real time load");
#ifdef DEBUG
- printf("c_ld=%d\n",load);
+ printf("c_ld=%d\n",Load);
#endif
}
}
@@ -239,7 +239,7 @@ static uint32_t number_of_load_samples;
first_time_after_init = FALSE;
system_load = current_load;
max_system_load = system_load;
- max_load = load;
+ max_load = Load;
number_of_load_samples = 1;
sum_of_previous_load = current_load;
}
@@ -299,7 +299,7 @@ extern int IDLE_TASK_get_load(void)
/***********************************************************/
extern int IDLE_TASK_get_current_load(void)
{
- return load;
+ return Load;
}
/***********************************************************/
@@ -320,7 +320,7 @@ extern int IDLE_TASK_get_load(void)
/***********************************************************/
/*export MN_uint32_t mn_get_curent_load(char *pParams)
{
- MN_printf("\n\rload=%d,max load=%d", load, max_load);
+ MN_printf("\n\rload=%d,max Load=%d", Load, max_load);
return(RET_OK);
}
*/
diff --git a/Software/Embedded_SW/Embedded/Common/Utilities/ustdlib.c b/Software/Embedded_SW/Embedded/Common/Utilities/ustdlib.c
index efee94611..420e1dbc3 100644
--- a/Software/Embedded_SW/Embedded/Common/Utilities/ustdlib.c
+++ b/Software/Embedded_SW/Embedded/Common/Utilities/ustdlib.c
@@ -1100,7 +1100,7 @@ umktime(struct tm *timeptr)
//! \return Returns the result of the conversion.
//
//*****************************************************************************
-unsigned long
+/*unsigned long
ustrtoul(const char * restrict nptr, const char ** restrict endptr, int base)
{
unsigned long ulRet, ulDigit, ulNeg, ulValid;
@@ -1274,7 +1274,7 @@ ustrtoul(const char * restrict nptr, const char ** restrict endptr, int base)
//
return(ulNeg ? (0 - ulRet) : ulRet);
}
-
+*/
//*****************************************************************************
//
// An array of the value of ten raised to the power-of-two exponents. This is
@@ -1282,7 +1282,7 @@ ustrtoul(const char * restrict nptr, const char ** restrict endptr, int base)
// 10^exp.
//
//*****************************************************************************
-static const float g_pfExponents[] =
+/*static const float g_pfExponents[] =
{
1.0e+01,
1.0e+02,
@@ -1290,7 +1290,7 @@ static const float g_pfExponents[] =
1.0e+08,
1.0e+16,
1.0e+32,
-};
+};*/
//*****************************************************************************
//
@@ -1309,7 +1309,7 @@ static const float g_pfExponents[] =
//! \return Returns the result of the conversion.
//
//*****************************************************************************
-float
+/*float
ustrtof(const char *nptr, const char **endptr)
{
unsigned long ulNeg, ulValid;
@@ -1482,7 +1482,7 @@ ustrtof(const char *nptr, const char **endptr)
return(ulNeg ? (0 - fRet) : fRet);
}
-//*****************************************************************************
+//\*****************************************************************************
//
//! Returns the length of a null-terminated string.
//!
@@ -1497,7 +1497,7 @@ ustrtof(const char *nptr, const char **endptr)
//!
//! \return Returns the length of the string pointed to by \e s.
//
-//*****************************************************************************
+//\*****************************************************************************
size_t
ustrlen(const char *s)
{
@@ -1527,7 +1527,7 @@ ustrlen(const char *s)
return(len);
}
-//*****************************************************************************
+//\*****************************************************************************
//
//! Finds a substring within a string.
//!
@@ -1543,7 +1543,7 @@ ustrlen(const char *s)
//! \return Returns a pointer to the first occurrence of \e s2 within
//! \e s1 or NULL if no match is found.
//
-//*****************************************************************************
+//\*****************************************************************************
char *
ustrstr(const char *s1, const char *s2)
{
@@ -1583,7 +1583,7 @@ ustrstr(const char *s1, const char *s2)
return((char *)0);
}
-//*****************************************************************************
+//\*****************************************************************************
//
//! Compares two strings without regard to case.
//!
@@ -1600,7 +1600,7 @@ ustrstr(const char *s1, const char *s2)
//! \return Returns 0 if the two strings are equal, -1 if \e s1 is less
//! than \e s2 and 1 if \e s1 is greater than \e s2.
//
-//*****************************************************************************
+//\*****************************************************************************
int
ustrncasecmp(const char *s1, const char *s2, size_t n)
{
@@ -1652,7 +1652,7 @@ ustrncasecmp(const char *s1, const char *s2, size_t n)
return(0);
}
-//*****************************************************************************
+//\*****************************************************************************
//
//! Compares two strings without regard to case.
//!
@@ -1667,7 +1667,7 @@ ustrncasecmp(const char *s1, const char *s2, size_t n)
//! \return Returns 0 if the two strings are equal, -1 if \e s1 is less
//! than \e s2 and 1 if \e s1 is greater than \e s2.
//
-//*****************************************************************************
+//\*****************************************************************************
int
ustrcasecmp(const char *s1, const char *s2)
{
@@ -1677,7 +1677,7 @@ ustrcasecmp(const char *s1, const char *s2)
return(ustrncasecmp(s1, s2, (size_t)-1));
}
-//*****************************************************************************
+//\*****************************************************************************
//
//! Compares two strings.
//!
@@ -1694,7 +1694,7 @@ ustrcasecmp(const char *s1, const char *s2)
//! \return Returns 0 if the two strings are equal, -1 if \e s1 is less
//! than \e s2 and 1 if \e s1 is greater than \e s2.
//
-//*****************************************************************************
+//\*****************************************************************************
int
ustrncmp(const char *s1, const char *s2, size_t n)
{
@@ -1740,7 +1740,7 @@ ustrncmp(const char *s1, const char *s2, size_t n)
return(0);
}
-//*****************************************************************************
+//\*****************************************************************************
//
//! Compares two strings.
//!
@@ -1755,7 +1755,7 @@ ustrncmp(const char *s1, const char *s2, size_t n)
//! \return Returns 0 if the two strings are equal, -1 if \e s1 is less
//! than \e s2 and 1 if \e s1 is greater than \e s2.
//
-//*****************************************************************************
+//\*****************************************************************************
int
ustrcmp(const char *s1, const char *s2)
{
@@ -1765,14 +1765,14 @@ ustrcmp(const char *s1, const char *s2)
return(ustrncmp(s1, s2, (size_t)-1));
}
-//*****************************************************************************
+//\*****************************************************************************
//
// Random Number Generator Seed Value
//
-//*****************************************************************************
+//\*****************************************************************************
static unsigned int g_iRandomSeed = 1;
-//*****************************************************************************
+//\*****************************************************************************
//
//! Set the random number generator seed.
//!
@@ -1784,14 +1784,14 @@ static unsigned int g_iRandomSeed = 1;
//!
//! \return None
//
-//*****************************************************************************
+//\*****************************************************************************
void
usrand(unsigned int seed)
{
g_iRandomSeed = seed;
}
-//*****************************************************************************
+//\*****************************************************************************
//
//! Generate a new (pseudo) random number
//!
@@ -1800,7 +1800,7 @@ usrand(unsigned int seed)
//!
//! \return A pseudo-random number will be returned.
//
-//*****************************************************************************
+//\*****************************************************************************
int
urand(void)
{
@@ -1816,10 +1816,10 @@ urand(void)
//
return((int)g_iRandomSeed);
}
-
-//*****************************************************************************
+*/
+//\*****************************************************************************
//
// Close the Doxygen group.
//! @}
//
-//*****************************************************************************
+//\*****************************************************************************
diff --git a/Software/Embedded_SW/Embedded/Common/report/report.h b/Software/Embedded_SW/Embedded/Common/report/report.h
index a267bfc6b..84063fb0f 100644
--- a/Software/Embedded_SW/Embedded/Common/report/report.h
+++ b/Software/Embedded_SW/Embedded/Common/report/report.h
@@ -394,6 +394,9 @@ extern STATUS ReportRemoveFilterPackage(const char *filterName);
**************************************************************************/
extern STATUS ReportSwitchPackageFilter(PackageHandle ReportPackageHandle, uint32_t SwitchOnOff);
+bool ReportFilterTest(uint8_t filterHandle);
+
+
/*----------------------------------------------------------------------------*/
/*---------------------------- Distributor -----------------------------------*/
/*----------------------------------------------------------------------------*/
diff --git a/Software/Embedded_SW/Embedded/Common/report/reportInit.c b/Software/Embedded_SW/Embedded/Common/report/reportInit.c
index 818e0d938..2778943f3 100644
--- a/Software/Embedded_SW/Embedded/Common/report/reportInit.c
+++ b/Software/Embedded_SW/Embedded/Common/report/reportInit.c
@@ -43,6 +43,8 @@
#include "PMR/debugging/SetupDebugDisributorsRequest.pb-c.h"
#include "PMR/debugging/SetupDebugDisributorsResponse.pb-c.h"
+#include "Drivers/I2C_Communication/Main_Board_EEPROM/Main_EEPROM.h"
+
#include "modules/General/process.h"
#include "AlarmHandling/AlarmHandling.h"
@@ -62,11 +64,15 @@ PackageHandle FPGAFilter;
PackageHandle LoadFilter;
PackageHandle InitFilter;
PackageHandle MaintFilter;
+PackageHandle IFSFilter;
+PackageHandle FilesFilter;
+PackageHandle I2CFilter;
+PackageHandle MotorFilter;
char LogPath[50] = "0://ErrFile.txt";
char protobufToken[36+1] = {0};
-char message[300];
+char RepMessage[300];
FRESULT LogFresult = FR_OK;
FIL *LogFileHandle = 0; //the system supports a single active file
bool isReportActive(void)
@@ -79,23 +85,36 @@ bool isReportActive(void)
}
uint32_t OpenLogFile(void)
{
- /*int len;
- uint32_t Bytes = 0;
- LogFresult = f_open(LogFileHandle,LogPath,FA_OPEN_ALWAYS | FA_WRITE | FA_READ);
- if (LogFresult == FR_OK)
+ int len;
+ uint32_t Bytes = 0;
+ LogFileHandle = my_malloc(sizeof(FIL));
+ if (LogFileHandle)
{
- if (LogFileHandle->fsize < 100000)
- f_lseek(LogFileHandle, LogFileHandle->fsize);
- len = usnprintf(message, 80, "Log File %s %s",__DATE__, __TIME__);
- LogFresult = f_write(LogFileHandle,message,len,&Bytes );
- }*/
+ LogFresult = f_open(LogFileHandle,LogPath,FA_READ | FA_WRITE | FA_OPEN_ALWAYS);
+ if (LogFresult == FR_OK)
+ {
+ if (LogFileHandle->fsize < 50000)
+ f_lseek(LogFileHandle, LogFileHandle->fsize);
+ else
+ f_lseek(LogFileHandle, 0);
+ len = usnprintf(RepMessage, 80, "Log File %s %s",__DATE__, __TIME__);
+ LogFresult = f_write(LogFileHandle,RepMessage,len,&Bytes );
+ }
+ }
+ else
+ LogFresult = FR_INT_ERR;
+
return LogFresult;
}
uint32_t CloseLogFile(void)
{
/* perform default error output */
- //LogFresult = f_close(LogFileHandle);
-
+ int len;
+ uint32_t Bytes = 0;
+ len = usnprintf(RepMessage, 80, "Closing Log File %s %s",__DATE__, __TIME__);
+ LogFresult = f_write(LogFileHandle,RepMessage,len,&Bytes );
+ LogFresult = f_close(LogFileHandle);
+ LogFileHandle = NULL;
return LogFresult;
}
uint32_t LogToFile(char *message, /* The formatted message */
@@ -107,13 +126,15 @@ uint32_t LogToFile(char *message, /* The formatted message
{
/* print user supplied error code */
- /* uint32_t Bytes = 0;
+ uint32_t Bytes = 0;
int len;
+ if (LogFileHandle == NULL)
+ return OK;
- len = usnprintf(message, 300, "%s, file %s line %d code %d sev %d,param %d",message,FileName, LineNumber,errorCode, Severity, parameter);
- LogFresult = f_write(LogFileHandle,message,len,&Bytes );*/
+ len = usnprintf(RepMessage, 300, "\r\n%s, file %s line %d code %d sev %d,param %d",message,FileName, LineNumber,errorCode, Severity, parameter);
+ LogFresult = f_write(LogFileHandle,RepMessage,len,&Bytes );
- return LogFresult;
+ return LogFresult;
}
int ReportResponseFunc(char *message, /* The formatted message */
char *FileName,
@@ -254,7 +275,7 @@ void SetupDebugDisributorsRequestFunc(MessageContainer* requestContainer)
setup_debug_disributors_request__free_unpacked(request,NULL);
}
-
+char SerMessage[50];
uint32_t ReportResetReason(void)
{
/*
@@ -312,9 +333,12 @@ uint32_t ReportInitMessage(MessageContainer* requestContainer)
// ReportInitParams InitParams;
StartDebugLogRequest* request = start_debug_log_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data);
+ Report("==============Saving file=================", __FILE__, __LINE__, _gTangoVersion.m_patch, RpWarning, _gTangoVersion.m_build, 0);
ustrncpy (protobufToken, requestContainer->token,36);
+ if (LogFileHandle != NULL)
+ f_sync(LogFileHandle);
DistributorHandle ReportHandle = ReportAddDistributor("ProtoBuf");
- CloseLogFile();
+ //CloseLogFile();
if (ReportHandle == NULL) status |= 0x8;
status |= ReportFunc(ReportResponseFunc , REPORT_ADD, ReportHandle);
start_debug_log_request__free_unpacked(request,NULL);
@@ -332,6 +356,9 @@ uint32_t ReportInitMessage(MessageContainer* requestContainer)
Task_sleep (100);
ReportEmbeddedVersion();
+ usnprintf(SerMessage, 50, "MCU serial %s",Main_EEPROM_Data.bytes.Main_card_SN);
+ Report(SerMessage, __FILE__, __LINE__, _gTangoVersion.m_patch, RpWarning, _gTangoVersion.m_build, 0);
+
/*SysCtlResetCauseClear(RESC);*/
#ifdef TEST_PID_THREAD
Task_sleep(1000);
@@ -423,7 +450,7 @@ return OK;
void ReportStopReporting(void)
{
protobufToken[0] = 0;
- OpenLogFile();
+ //OpenLogFile();
}
@@ -480,7 +507,12 @@ STATUS ReportInit(ReportInitParams InitParams)
LoadFilter = ReportAddFilterPackage("Load");
InitFilter = ReportAddFilterPackage("Init");
MaintFilter = ReportAddFilterPackage("Maint");
+ IFSFilter = ReportAddFilterPackage("IFS");
+ FilesFilter = ReportAddFilterPackage("Files");
+ I2CFilter = ReportAddFilterPackage("I2C");
+ MotorFilter = ReportAddFilterPackage("Motor");
// Filter = ReportAddFilterPackage("");
+ //ReportSwitchPackageFilter(IDSFilter,REPORT_OFF);
ReportSwitchPackageFilter(WasteFilter,REPORT_OFF);
return status;
}