aboutsummaryrefslogtreecommitdiffstats
path: root/Software
diff options
context:
space:
mode:
authorAvi Levkovich <avi@twine-s.com>2019-01-27 14:41:51 +0200
committerAvi Levkovich <avi@twine-s.com>2019-01-27 14:41:51 +0200
commitc64b07d93d944a294df08cee553800a09757d6ec (patch)
tree71ab5b00aa977d5848058d2ed65cfd5f0782062f /Software
parent9f678962afca4568589680a897f9f358a2b163d2 (diff)
parent2fb4421e0d771ea84e744856dc56ebc7b713cd86 (diff)
downloadTango-c64b07d93d944a294df08cee553800a09757d6ec.tar.gz
Tango-c64b07d93d944a294df08cee553800a09757d6ec.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/_git/Tango
Diffstat (limited to 'Software')
-rw-r--r--Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c42
-rw-r--r--Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.h3
-rw-r--r--Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c97
-rw-r--r--Software/Embedded_SW/Embedded/Communication/Container.c7
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.h7
-rw-r--r--Software/Embedded_SW/Embedded/Main.c14
-rw-r--r--Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c18
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/buttons.c537
-rw-r--r--Software/Embedded_SW/Embedded/Modules/General/buttons.h8
9 files changed, 690 insertions, 43 deletions
diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
index 3d4404f99..49f65a764 100644
--- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
+++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.c
@@ -36,6 +36,14 @@
#include "drivers/Flash_Memory/fatfs/ff.h"
#include "third_party/fatfs/src/ffconf.h"
+
+ErrorCode FileError_to_ErrorCode[FR_INVALID_PARAMETER+1] = {ERROR_CODE__NONE,ERROR_CODE__FILE_REQUEST_DISK_ERR,ERROR_CODE__FILE_REQUEST_INT_ERR,ERROR_CODE__FILE_REQUEST_NOT_READY,ERROR_CODE__FILE_REQUEST_NO_FILE,
+ ERROR_CODE__FILE_REQUEST_NO_PATH,ERROR_CODE__FILE_REQUEST_INVALID_NAME,ERROR_CODE__FILE_REQUEST_DENIED,ERROR_CODE__FILE_REQUEST_EXIST,ERROR_CODE__FILE_REQUEST_INVALID_OBJECT,
+ ERROR_CODE__FILE_REQUEST_WRITE_PROTECTED,ERROR_CODE__FILE_REQUEST_INVALID_DRIVE,ERROR_CODE__FILE_REQUEST_NOT_ENABLED,ERROR_CODE__FILE_REQUEST_NO_FILESYSTEM,
+ ERROR_CODE__FILE_REQUEST_MKFS_ABORTED,ERROR_CODE__FILE_REQUEST_TIMEOUT,ERROR_CODE__FILE_REQUEST_LOCKED,ERROR_CODE__FILE_REQUEST_NOT_ENOUGH_CORE,ERROR_CODE__FILE_REQUEST_TOO_MANY_OPEN_FILES,
+ ERROR_CODE__FILE_REQUEST_INVALID_PARAMETER};
+
+
FIL *FileHandle = 0; //the system supports a single active file
char FileHandleChar[5];
char ErrorMsg[100];
@@ -45,13 +53,6 @@ int FileReceivedLength = 0;
static char g_cCwdBuf[50] = "/";
uint32_t WrittenBytes = 0;
-ErrorCode FileError_to_ErrorCode[FR_INVALID_PARAMETER+1] = {ERROR_CODE__NONE,ERROR_CODE__FILE_REQUEST_DISK_ERR,ERROR_CODE__FILE_REQUEST_INT_ERR,ERROR_CODE__FILE_REQUEST_NOT_READY,ERROR_CODE__FILE_REQUEST_NO_FILE,
- ERROR_CODE__FILE_REQUEST_NO_PATH,ERROR_CODE__FILE_REQUEST_INVALID_NAME,ERROR_CODE__FILE_REQUEST_DENIED,ERROR_CODE__FILE_REQUEST_EXIST,ERROR_CODE__FILE_REQUEST_INVALID_OBJECT,
- ERROR_CODE__FILE_REQUEST_WRITE_PROTECTED,ERROR_CODE__FILE_REQUEST_INVALID_DRIVE,ERROR_CODE__FILE_REQUEST_NOT_ENABLED,ERROR_CODE__FILE_REQUEST_NO_FILESYSTEM,
- ERROR_CODE__FILE_REQUEST_MKFS_ABORTED,ERROR_CODE__FILE_REQUEST_TIMEOUT,ERROR_CODE__FILE_REQUEST_LOCKED,ERROR_CODE__FILE_REQUEST_NOT_ENOUGH_CORE,ERROR_CODE__FILE_REQUEST_TOO_MANY_OPEN_FILES,
- ERROR_CODE__FILE_REQUEST_INVALID_PARAMETER};
-
-
ErrorCode getErrorCode(FRESULT Fresult)
{
return FileError_to_ErrorCode[Fresult];
@@ -696,3 +697,30 @@ FRESULT FileRead(char *path, uint32_t *Size, void **Buffer)
my_free(fno);
return Fresult;
}
+FRESULT FileOpen(char *path, uint32_t *Size, FIL *FileHandle)
+{
+ FRESULT Fresult = FR_OK;
+ FILINFO* fno = 0;
+ void* buffer = NULL;
+ uint32_t Bytes = 0;
+ uint32_t status = 0;
+
+ fno = my_malloc(sizeof(FILINFO));
+ if (fno == 0)
+ return ERROR;
+ memset (fno,0,sizeof(FILINFO));
+ Fresult = f_stat(path,fno);
+ *Size = (uint32_t)fno->fsize;
+ if (Fresult == FR_OK)
+ {
+ FileHandle = my_malloc(sizeof(FIL));
+ if (FileHandle == 0)
+ Fresult = FR_DENIED;
+ }
+ else
+ {
+ LOG_ERROR (Fresult,"f_stat error");
+ }
+ my_free(fno);
+ return Fresult;
+}
diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.h b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.h
index a54b72b66..605b4a475 100644
--- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.h
+++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FileSystem.h
@@ -9,6 +9,8 @@
#define COMMON_SWUPDATE_FILESYSTEM_H_
#include "drivers/Flash_Memory/fatfs/ff.h"
+extern ErrorCode FileError_to_ErrorCode[FR_INVALID_PARAMETER+1];
+
uint32_t FileUploadRequestFunc(MessageContainer* requestContainer);
uint32_t FileChunkUploadRequestFunc(MessageContainer* requestContainer);
uint32_t ExecuteProcessRequestFunc(MessageContainer* requestContainer);
@@ -22,5 +24,6 @@ uint32_t FileChunkDownloadRequestFunc(MessageContainer* requestContainer);
FRESULT FileWrite(void * buffer, uint16_t size,char *path);
FRESULT FileRead(char *path, uint32_t *Size, void **Buffer);
+FRESULT FileOpen(char *path, uint32_t *Size, FIL *FileHandle);
#endif /* COMMON_SWUPDATE_FILESYSTEM_H_ */
diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c
index 4c18131f4..424c7f11f 100644
--- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c
+++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c
@@ -13,10 +13,103 @@
#include <Communication/PMR/FirmwareUpgrade/ActivateVersionResponse.pb-c.h>
#include <Communication/PMR/FirmwareUpgrade/ActivateVersionRequest.pb-c.h>
#include <Communication/PMR/FirmwareUpgrade/ActivateVersionResponse.pb-c.h>
+#include <Communication/PMR/FirmwareUpgrade/ValidateVersionRequest.pb-c.h>
+#include <Communication/PMR/FirmwareUpgrade/ValidateVersionResponse.pb-c.h>
+#include <Communication/PMR/FirmwareUpgrade/ValidateVersionRequest.pb-c.h>
+#include <Communication/PMR/FirmwareUpgrade/ValidateVersionResponse.pb-c.h>
#include <Communication/PMR/FirmwareUpgrade/VersionFileDestination.pb-c.h>
#include <Communication/PMR/FirmwareUpgrade/VersionFileDescriptor.pb-c.h>
#include <Communication/PMR/FirmwareUpgrade/VersionPackageDescriptor.pb-c.h>
+#include "drivers/FPGA/Full_Vme/FPGA_Programming_Up.h"
+#include "Common/SWUpdate/FileSystem.h"
+
+
+uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer)
+{
+ uint32_t status = OK;
+ void* buffer = NULL;
+ uint32_t Bytes = 0;
+ char SWINFOPath[100];
+ FRESULT Fresult = FR_OK;
+ int File_i;
+
+ MessageContainer responseContainer;
+
+ ActivateVersionRequest* request = activate_version_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data);
+
+ ActivateVersionResponse response = ACTIVATE_VERSION_RESPONSE__INIT;
+ VersionPackageDescriptor* VersionPackage;// = VERSION_PACKAGE_DESCRIPTOR__INIT;
+
+
+ strcpy (SWINFOPath,request->path);
+ strcat(SWINFOPath,"//SWINFO.DAT");
+
+ Fresult = FileRead(SWINFOPath, &Bytes, &buffer);
+
+ if (Fresult == FR_OK)
+ {
+ VersionPackage = version_package_descriptor__unpack(NULL,Bytes,buffer);
+ for (File_i = 0;File_i<VersionPackage->n_filedescriptors;File_i++)
+ {
+ switch(VersionPackage->filedescriptors[File_i]->destination)
+ {
+ case VERSION_FILE_DESTINATION__MCU:
+ break;
+ case VERSION_FILE_DESTINATION__FPGA1:
+ case VERSION_FILE_DESTINATION__FPGA2:
+ case VERSION_FILE_DESTINATION__FPGA3:
+ //validate
+ //update
+ Fresult = FPGA_Programming_Up( VersionPackage->filedescriptors[File_i]->destination, VersionPackage->filedescriptors[File_i]->filename, false);
+ break;
+ default:
+ LOG_ERROR (VersionPackage->filedescriptors[File_i]->destination,"wrong fule update Destination");
+ Fresult = ERROR_CODE__FILE_REQUEST_INVALID_NAME;
+ break;
+ }
+ }
+ }
+ responseContainer = createContainer(MESSAGE_TYPE__ActivateVersionResponse, requestContainer->token, false, &response, &activate_version_response__pack, &activate_version_response__get_packed_size);
+ if (status!= OK)
+ {
+ responseContainer.error = FileError_to_ErrorCode[Fresult];
+ responseContainer.errormessage = "Activate Version Request error";
+ }
+ responseContainer.continuous = false;
+ uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer));
+ size_t container_size = message_container__pack(&responseContainer, container_buffer);
+ my_free(responseContainer.data.data);
+ activate_version_request__free_unpacked(request,NULL);
+ SendChars(container_buffer, container_size);
+
+ return OK;
+}
+
+uint32_t ValidateVersionRequestFunc(MessageContainer* requestContainer)
+{
+ uint32_t status = OK;
+
+ MessageContainer responseContainer;
+
+ ValidateVersionRequest* request = validate_version_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data);
+
+ ValidateVersionResponse response = VALIDATE_VERSION_RESPONSE__INIT;
+
+
+ responseContainer = createContainer(MESSAGE_TYPE__ValidateVersionResponse, requestContainer->token, false, &response, &validate_version_response__pack, &validate_version_response__get_packed_size);
+ if (status!= OK)
+ {
+ responseContainer.error = getErrorCode(status);
+ responseContainer.errormessage = "Validate Version Request error";
+ }
+ responseContainer.continuous = false;
+ uint8_t* container_buffer = my_malloc(message_container__get_packed_size(&responseContainer));
+ size_t container_size = message_container__pack(&responseContainer, container_buffer);
+ my_free(responseContainer.data.data);
+ validate_version_request__free_unpacked(request,NULL);
+ SendChars(container_buffer, container_size);
+
+ return OK;
+}
-uint32_t ActivateVersionRequestFunc(MessageContainer* requestContainer);
-uint32_t ValidateVersionRequestFunc(MessageContainer* requestContainer);
diff --git a/Software/Embedded_SW/Embedded/Communication/Container.c b/Software/Embedded_SW/Embedded/Communication/Container.c
index d8379fa6b..ba1f8eea9 100644
--- a/Software/Embedded_SW/Embedded/Communication/Container.c
+++ b/Software/Embedded_SW/Embedded/Communication/Container.c
@@ -39,6 +39,7 @@
#include "Modules/Thread/Thread_ex.h"
#include "Common/SWUpdate/FileSystem.h"
+#include "Common/SWUpdate/FirmwareUpgrade.h"
#include "Communication/CommunicationTask.h"
#include "StateMachines/Printing/PrintingSTM.h"
@@ -400,6 +401,12 @@ void receive_callback(char* buffer, size_t length)
case MESSAGE_TYPE__GetFilesRequest:
GetFilesRequestFunc(requestContainer);
break;
+ case MESSAGE_TYPE__ActivateVersionRequest:
+ ActivateVersionRequestFunc(requestContainer);
+ break;
+ case MESSAGE_TYPE__ValidateVersionRequest:
+ ValidateVersionRequestFunc(requestContainer);
+ break;
case MESSAGE_TYPE__StubMidTankPressureSensorRequest:
Stub_MidTankPressureSensorRequest(requestContainer);
break;
diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.h b/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.h
index a6d3b265e..91ad2a61a 100644
--- a/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.h
+++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/Full_Vme/FPGA_Programming_Up.h
@@ -12,9 +12,10 @@
typedef enum
{
- FPGA1 = 0,
- FPGA2 = 1,
- FPGA3 = 2,
+ FPGA1,
+ FPGA2,
+ FPGA3,
+ MAX_FPGA
}FPGA_ID;
typedef struct
diff --git a/Software/Embedded_SW/Embedded/Main.c b/Software/Embedded_SW/Embedded/Main.c
index 3700fc371..34a72cbe7 100644
--- a/Software/Embedded_SW/Embedded/Main.c
+++ b/Software/Embedded_SW/Embedded/Main.c
@@ -30,8 +30,6 @@
#include <DataDef.h>
#include "Sys_PinOut_Config/MCU_MAIN_pinout.h"
-#include "Drivers/FPGA/Full_vme/FPGA_Programming_Up.h"
-
/*
#include "Drivers/SPI_SDCARD/SDSPI.h"
#include "Drivers/SPI_SDCARD/SDCardSPI.h"
@@ -205,18 +203,6 @@ int main(void)
//GetFiles(); - to start jtag
//GetVmeByte();
- FRESULT fresult;
-
- //char FullPath[] = "0://FPGAJTAG//F1TangoF.vme";
- //fresult = FPGA_Programming_Up(FPGA1, FullPath, FALSE);
-
- //char FullPath[] = "0://FPGAJTAG//F2TangoF.vme";
- //fresult = FPGA_Programming_Up(FPGA2, FullPath, FALSE);
-
- //char FullPath[] = "0://FPGAJTAG//F3TangoF.vme";
- //fresult = FPGA_Programming_Up(FPGA3, FullPath, FALSE);
-
-
////////////////////////////
// Enable interrupts to the processor.
diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
index 7600e6547..475a623f0 100644
--- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
+++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c
@@ -219,6 +219,7 @@ const AlarmHandlingItemStruc AlarmItem[MAX_SYSTEM_ALARMS]={
{eOneSecond,DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__THREAD_TENSION_CONTROL_FAILURE,"Thread Tension Control Failure"},
{eOneSecond,DoNotPollAlarm,0,0,0,0,DEBUG_LOG_CATEGORY__Warning,0xFF,0,EVENT_TYPE__WINDER_CONE_DOES_NOT_EXIST,"No cone in winder"}
};
+
char TestMessage[5]="Test";
bool DispenserInUse[MAX_SYSTEM_DISPENSERS] = {false,false,false,false,false,false,false,false};
bool EventsNotificationRequestAccepted = false;
@@ -477,23 +478,6 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob)
return JobEndReason;
}
-/*
-uint32_t AlarmHandling_CalculateTemperatures(uint32_t SensorId, uint32_t Data)
-{
- AlarmHandlingMessageStruc Message;
-
- //send message to the Millisec task
- Message.messageId = AlarmHandlingCalculateTemperature;
- Message.msglen = sizeof(AlarmHandlingMessageStruc);
- Message.SensorId = SensorId;
- Message.Data = Data;
- if (AlarmHandlingMsgQ != NULL)
- Mailbox_post(AlarmHandlingMsgQ , &Message, BIOS_NO_WAIT);
-
-
- return OK;
-}
-*/
uint32_t AlarmHandling_ControlTrigger(uint32_t IfIndex, uint32_t ReadValue)
{
AlarmHandlingMessageStruc Message;
diff --git a/Software/Embedded_SW/Embedded/Modules/General/buttons.c b/Software/Embedded_SW/Embedded/Modules/General/buttons.c
new file mode 100644
index 000000000..075e0f009
--- /dev/null
+++ b/Software/Embedded_SW/Embedded/Modules/General/buttons.c
@@ -0,0 +1,537 @@
+/************************************************************************************************************************
+ * buttons.c
+ * buttons behaver
+ *
+************************************************************************************************************************/
+#include <Container.h>
+#include <DataDef.h>
+#include "include.h"
+
+#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h"//#include "FPGA_GPIO.h" // use for FPGA IO
+#include "DataDef.h" // use for FPGA IO
+#include "Modules/Control/control.h" // use for FPGA IO
+
+#include "StateMachines/Printing/PrintingSTM.h"
+
+#include <stdlib.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include <driverlib/gpio.h>
+#include "Common/report/report.h"
+
+#include "Modules/General/buttons.h"
+
+int MachineOnOff();
+int ch_to_power_down();
+int ch_to_power_up();
+int thredJog();
+
+typedef enum
+{
+ colorOFF = 0,
+ BLUE,
+ BLINK,
+ fastBILNK,
+ BREATHING
+} PBcolor;
+
+typedef enum
+{
+ OFFPB = 0,
+ COUNTPB ,
+ SHORTPB ,
+ LONGPB ,
+ REPLONGPB //repeat long PB
+}PBstat;
+
+typedef enum
+{
+ MSEC = 0,
+ lESS200 ,
+ LESS500 ,
+ LESS5000 ,
+ MORE5000
+}timems;
+
+typedef enum
+{
+ sttOFF = 0,
+ sttON,
+ sttDISABLE,
+ sttENABLE,
+ sttIDLE,
+ sttJOGGING,
+ sttRDY,
+ sttPRELOAD,
+ sttLOADING,
+ sttLOADSUCSESS,
+ sttLOADFAIL
+} PBmachinState;
+
+//enum PBstat OnOffPBstate = OFFPB;
+//enum PBstat ret
+//enum PBstat threadPB = OFFPB;
+
+struct button
+{
+ char bttn_name[10]; //option
+ int bttn_status; // 0=release 1=press
+ /* enum */ PBstat Action; //offPB,shortPB,longPB,countPB,replongPB
+ /* enum */ PBcolor color; //off, blue, blink, bithing
+ /* enum */ PBmachinState state; //sttOFF, sttON, sttDISABLE, sttENABLE, sttIDLE, sttJOGGING
+ uint32_t count;
+};
+
+struct button power , jog, load;
+uint32_t ButtonsCallBackFunction(uint32_t IfIndex, uint32_t ReadValue);
+uint32_t ButtonsCBFunction(uint32_t IfIndex, uint32_t ReadValue);
+uint32_t ShortLongOffPB(uint8_t OnOffPB, struct button *pBtn);
+uint32_t StateMachine(struct button *pBtn);
+
+
+uint32_t ButtonJogCallBackFunction(uint32_t IfIndex, uint32_t ReadValue);
+uint32_t ButtonJogCBFunction(uint32_t IfIndex, uint32_t ReadValue);
+uint8_t thraedJogging(uint8_t off);
+uint32_t setJoggingEnableCondition(struct button *pBtn);
+uint32_t joggingMachine(uint8_t OnOffPB, struct button *pBtn);
+
+
+uint32_t ButtonLoadCallBackFunction(uint32_t IfIndex, uint32_t ReadValue);
+uint32_t ButtonLoadCBFunction(uint32_t IfIndex, uint32_t ReadValue);
+
+/*
+void Power_Reset();
+uint8_t Buttons_LEDS(BUTTON Button, OPERATION_MODE LED_Mode);
+uint8_t Buzzer(OPERATION_MODE Buzzer_Mode);
+bool Read_PWR_Button();//TODO move to GPIO folder
+*/
+
+
+
+/*
+ * read GPIO status
+ * port: GPIO_PORTN_BASE
+ * pin : GPIO_PIN_7
+ *
+ * return !GPIOstatus
+ */
+uint32_t ButtonsCallBackFunction(uint32_t IfIndex, uint32_t ReadValue)
+{
+ if(ROM_GPIOPinRead(GPIO_PORTN_BASE, GPIO_PIN_7))
+ return 0x00;
+ else
+ return 0x01;
+}
+uint32_t ButtonJogCallBackFunction(uint32_t IfIndex, uint32_t ReadValue)
+{
+ if(ROM_GPIOPinRead(GPIO_PORTN_BASE, GPIO_PIN_7))
+ return 0x00;
+ else
+ return 0x01;
+}
+
+uint32_t ButtonLoadCallBackFunction(uint32_t IfIndex, uint32_t ReadValue)
+{
+ if(ROM_GPIOPinRead(GPIO_PORTN_BASE, GPIO_PIN_7))
+ return 0x00;
+ else
+ return 0x01;
+}
+
+//uint32_t AddControlCallback( ControlCBFunction Callback, CTRL_TIMING_ENUM CtrlFrequency, DataReadCBFunction DriverfPtr, uint16_t IfIndex, uint32_t Parameter1, uint32_t Parameter2 );
+//Power_Reset()// Resets the MCU
+
+#define BUTTOMS_SAMPLE_TIME 50
+
+uint32_t Buttons_Init(void)
+{
+
+ power.bttn_status = 0 ;
+// power.bttn_name = "power"; //option
+ power.bttn_status = 0; // 0=release 1=press
+ power.Action = OFFPB ; //off,short,long,count,replong
+ power.color = colorOFF; //off, blue, blink, bithing
+ power.state = sttOFF; //sttOFF, sttON, sttDISABLE, sttENABLE, sttIDLE, sttJOGGING
+ power.count = 0;
+
+ AddControlCallback( ButtonsCBFunction, BUTTOMS_SAMPLE_TIME, ButtonsCallBackFunction, 0,0,0 ); // eFiftyMillisecond
+
+ jog.bttn_status = 0 ;
+// power.bttn_name = "power"; //option
+ jog.bttn_status = 0; // 0=release 1=press
+ jog.Action = OFFPB ; //OFFPB,short,long,count,replong
+ jog.color = colorOFF; //colorOFF, BLUE, BLINK,
+ jog.state = sttOFF; // sttDISABLE, sttENABLE, sttJOGGING
+ jog.count = 0;
+ AddControlCallback( ButtonJogCBFunction, BUTTOMS_SAMPLE_TIME, ButtonJogCallBackFunction, 0,0,0 ); //
+
+ load.bttn_status = 0 ;
+// power.bttn_name = "power"; //option
+ load.bttn_status = 0; // 0=release 1=press
+ load.Action = OFFPB ; //OFFPB,short,long,count,replong
+ load.color = colorOFF; //colorOFF, BLUE, BLINK,
+ load.state = sttOFF; // sttDISABLE, sttENABLE, sttJOGGING
+ load.count = 0;
+
+ AddControlCallback( ButtonLoadCBFunction, BUTTOMS_SAMPLE_TIME, ButtonLoadCallBackFunction, 0,0,0 ); //
+}
+
+
+//read the buttons data here and handle
+uint32_t ButtonsCBFunction(uint32_t IfIndex, uint32_t ReadValue)
+{
+ ShortLongOffPB(ReadValue,&power);
+ return 0;
+}
+
+uint32_t ButtonJogCBFunction(uint32_t IfIndex, uint32_t ReadValue)
+{
+ setJoggingEnableCondition(&jog);
+ joggingMachine(ReadValue, &jog);
+ return 0;
+}
+
+
+uint32_t ButtonLoadCBFunction(uint32_t IfIndex, uint32_t ReadValue)
+{
+ // ShortLongOffPB(ReadValue,&load);
+ return 0;
+}
+
+/*---------------------------------------------------------------------------------*/
+
+
+
+//OnOffPB = getPBstatus(POWER_PB);
+
+
+
+/*
+ *
+ *
+ */
+int Get_timer()
+{
+ // to go timer
+ return 0;
+}
+
+int ClearTimer()
+{
+ //to do clear timer
+ return 0;
+}
+int StartTimer()
+{
+ // to do start timer
+ return 0;
+}
+int StopTimer()
+{
+ // to do start timer
+ return 0;
+}
+
+/* ---------------------------------------------------------
+ * --- ShortLongOffPB(int OnOffPB, enum PBstat *ret) ----
+ * input: OnOffPB status(0(pressed) or 1(relesed)
+ *
+ * output: offPB, countPB, shortPB, longPB, replongPB
+ *
+ * that func get :
+ * OnOffPB status (
+ * 0=release,
+ * 1=pressed
+ * )
+ *
+ ------------------------------------------------------------*/
+
+
+//ShortLongOffPB( OnOffPB, &ret)
+
+
+uint32_t ShortLongOffPB(uint8_t OnOffPB, struct button *pBtn)
+{
+ uint8_t parameter = 0 ; // why we need it!!!!
+
+
+ pBtn->count += OnOffPB;
+ switch( pBtn->Action )
+ {
+ case OFFPB: // last OnOffPBstate was OFF
+ if( OnOffPB )
+ {
+ pBtn->Action = COUNTPB ;
+ }
+ break;
+ case COUNTPB: // last OnOffPBstate was COUNTPB
+ if (OnOffPB)
+ {
+ if( pBtn->count > 5 ) //250ms
+ {
+ pBtn->Action = SHORTPB ;
+ }
+ }
+ else
+ {
+ pBtn->Action = OFFPB ;
+ pBtn->count = 0;
+ }
+ break;
+ case SHORTPB: // last OnOffPBstate was SHORTPB
+ if (OnOffPB)
+ {
+ if (pBtn->count > 100) //5000ms
+ {
+ pBtn->Action = LONGPB ;
+ REPORT_MSG(parameter,"Long PB ");
+ StateMachine(pBtn);
+ pBtn->count = 0;
+ }
+ }
+ else
+ {
+ REPORT_MSG(parameter,"Short PB ");
+ StateMachine(pBtn);
+ pBtn->count = 0;
+ pBtn->Action = OFFPB ;
+ };
+ break;
+ case LONGPB:
+ if (OnOffPB)
+ {
+ REPORT_MSG(parameter," ------------ Please release the PB ----------------- ");
+ }
+ else
+ {
+ pBtn->Action = OFFPB ;
+ pBtn->count = 0;
+ }
+ break;
+ default:
+ break;
+ }
+ return 0;
+}
+
+
+
+
+
+
+
+
+
+/* --- StateMachine(enum PBstat PBAction) ----
+ * input:
+ *
+ * output: offPB, countPB, shortPB, longPB, replong
+ *
+ *
+ */
+
+
+
+uint32_t StateMachine(struct button *pBtn) //short press(=0)/long press(=1)
+{
+ uint8_t parameter = 1;
+
+ switch (pBtn->state)// sttON/sttOFF/sttIDLE
+ {
+ case sttON:
+ switch (pBtn->Action)
+ {
+ case LONGPB: //Power Down
+ pBtn->state = sttOFF; // todo
+ REPORT_MSG(parameter,"Power state is OFF ");
+ break;
+// case SHORTPB: //idle ?????
+// setMachineStatus = IDLE; // ????/
+// break;
+ default:
+ break;
+ }
+ break;
+ case sttOFF:
+ switch (pBtn->Action)
+ {
+// case LONGPB: //Idle?
+// // todo
+// break;
+ case SHORTPB: //powerup?
+ // to do ?
+ pBtn->state = sttON; //todo
+ REPORT_MSG(parameter,"Power state is ON ");
+ break;
+ default:
+ break;
+ }
+ break;
+ case sttIDLE:
+ switch (pBtn->Action)
+ {
+ case LONGPB: //Power off from idle
+ pBtn->state = sttOFF; // todo
+ REPORT_MSG(parameter,"Power state is OFF ");
+ break;
+ case SHORTPB: //Wake up from idle
+ pBtn->state = sttON;// to do ?
+ REPORT_MSG(parameter,"Power state is ON ");
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+return 0;
+}
+
+
+
+
+
+ /*-----------------------------------------------------------------------------------*/
+
+
+ /* int rdJoggingEnableCondition()
+ * read if we can enabl the thraed jogging
+ *
+ * return 0 or 1
+ * disable OFF(0) - the machine is working now you cannot jogging the thread.
+ * enable ON(1) - joggin thread is enable
+ */
+
+
+
+uint32_t setJoggingEnableCondition(struct button *pBtn)
+{
+ if (0
+// 1.
+// 2.
+// 3.
+// ...
+ )
+ {
+ pBtn->state = sttDISABLE;
+ REPORT_MSG(pBtn->state,"Jogging : sttDISABLE ");
+ ThreadAbortJoggingFunc();
+ }
+
+ else
+ {
+ pBtn->state = sttENABLE;
+ REPORT_MSG(pBtn->state,"Jogging : sttENABLE ");
+ ThreadJoggingFunc(40);
+ }
+
+return 0;
+}
+
+
+
+
+
+/*int joggingMachine()
+ * state machine for thread jogging button:
+ * 1. OFF - when the machine is working
+ * 2. blue - when the machin is not workig so we can jog thread
+ * 3. blink - when pushing the jog thread button and jogigthread
+ *
+ */
+
+
+uint32_t joggingMachine(uint8_t OnOffPB, struct button *pBtn)
+{
+ if (sttDISABLE == pBtn->state)
+ {
+ // jogging is disable
+ pBtn->color = colorOFF;
+ }
+ else
+ {
+ if (!OnOffPB)
+ {
+ ThreadAbortJoggingFunc(); // to do!!!!
+ pBtn->color = BLUE;
+ }
+ else
+ {
+ pBtn->color = BLINK;
+ ThreadJoggingFunc(40);
+ }
+ }
+return 0;
+}
+
+
+/*------------------------------------------------------------------------------*/
+
+/*------ THREAD LOAD/UNLOAD ----------*/
+
+/*
+int LoadStatMachine(enum PBstat PBAction, struct button *pBtn)
+{
+
+ switch (pBtn->PBstate)
+ {
+ case sttRDY :
+ switch (pBtn->PBAction)
+ {
+ case (SHORTPB):
+ case (LONGPB):
+ case (REPLONGPB):
+ pBtn->PBstate = sttPRELOAD;
+ pBtn->PBcolor = BLINK;
+ if (doPreloading())
+ {
+ pBtn->PBstate = sttPRELOAD ; // to do
+ pBtn->PBcolor = BLUE;
+ }
+ else pBtn->PBstate = sttDISABLE ;
+ break;
+ default :
+ break;
+ }
+ break;
+ case sttPRELOAD:
+ switch (pBtn->PBAction)
+ {
+ case (SHORTPB):
+ case (LONGPB):
+ case (REPLONGPB):
+ if (doLoading())
+ {
+ pBtn->PBstate = sttLOADSUCSESS ; // to do
+ pBtn->PBcolor = BLUE;
+ }
+ else
+ {
+ pBtn->PBstate = sttLOADFAIL ;
+ pBtn->PBcolor = fastBILNK ; // to do
+ }
+ break;
+ default :
+ break;
+ }
+ break;
+ case sttLOADING:
+ break;
+// case sttLOADSUCSESS ?????
+// break;
+// case sttLOADFAIL: ?????
+// break;
+
+ default: //sttDISABLE
+ pBtn->PBcolor = colorOFF;
+ break;
+ }
+ShortLongOffPB( threadPB, ret,struct button *pBtn);
+
+
+}
+*/
+
+
+
diff --git a/Software/Embedded_SW/Embedded/Modules/General/buttons.h b/Software/Embedded_SW/Embedded/Modules/General/buttons.h
new file mode 100644
index 000000000..897fb6031
--- /dev/null
+++ b/Software/Embedded_SW/Embedded/Modules/General/buttons.h
@@ -0,0 +1,8 @@
+#ifndef BUTTONS_H
+#define BUTTONS_H
+
+uint32_t Buttons_Init(void);
+uint32_t Button_load_Init(void);
+uint32_t Button_JOG_Init(void);
+
+#endif