From 2fb4421e0d771ea84e744856dc56ebc7b713cd86 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Sun, 27 Jan 2019 12:34:09 +0200 Subject: Activate/Validate version support. buttons. --- .../Embedded/Common/SWUpdate/FileSystem.c | 42 +- .../Embedded/Common/SWUpdate/FileSystem.h | 3 + .../Embedded/Common/SWUpdate/FirmwareUpgrade.c | 97 +++- .../Embedded_SW/Embedded/Communication/Container.c | 7 + .../Drivers/FPGA/Full_Vme/FPGA_Programming_Up.h | 7 +- Software/Embedded_SW/Embedded/Main.c | 14 - .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 18 +- .../Embedded_SW/Embedded/Modules/General/buttons.c | 537 +++++++++++++++++++++ .../Embedded_SW/Embedded/Modules/General/buttons.h | 8 + 9 files changed, 690 insertions(+), 43 deletions(-) create mode 100644 Software/Embedded_SW/Embedded/Modules/General/buttons.c create mode 100644 Software/Embedded_SW/Embedded/Modules/General/buttons.h (limited to 'Software') 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 #include #include +#include +#include +#include +#include #include #include #include +#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_in_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 2aaa12b38..2a4db5e3c 100644 --- a/Software/Embedded_SW/Embedded/Main.c +++ b/Software/Embedded_SW/Embedded/Main.c @@ -30,8 +30,6 @@ #include #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" @@ -206,18 +204,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 +#include +#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 +#include +#include +#include +#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 -- cgit v1.3.1