stat_t arcoOK_Macro(void) { uint32_t lRet = pdFALSE; // set initial state for new move // memset(&gp, 0, sizeof(gp)); // clear all parser values // memset(&cm.gf, 0, sizeof(GCodeInput_t)); // clear all next-state flags // memset(&cm.gn, 0, sizeof(GCodeInput_t)); // clear all next-state values // cm.gn.motion_mode = cm_get_motion_mode(MODEL); // get motion mode from previous block if (xMacroArcoOkSync == true) { switch (state) { case 0: pl_arcook_start(); lRet = xSemaphoreTake( xArcoOkSync, pdMS_TO_TICKS(3000) ); if (lRet == pdFALSE) { uint32_t qSend = ARCO_OK_FAILED; xQueueSend( qKeyboard, &qSend, 0 ); macro_func_ptr = command_idle; xMacroArcoOkSync = false; // isCuttingSet(true); return (STAT_OK); } else { cm_request_cycle_start(); stopDuringCut_Set(false); delay_thcStartStop(true); xMacroArcoOkSync = false; state = 0; macro_func_ptr = _command_dispatch; return (STAT_OK); } break; default: break; } _execute_gcode_block(); } return (STAT_OK); }
void emergencia_task(void) { uint32_t keyEntry = 0; uint8_t emergencyCount = 0; bool realease = false; while(1) { emergenciaFlag = false; realease = false; IR(ICU, IRQ8) = 0; //Clear any previously pending interrupts IEN(ICU, IRQ8) = 1; // Enable interrupt ulTaskNotifyTake( pdTRUE, portMAX_DELAY ); IR(ICU, IRQ8) = 0; //Clear any previously pending interrupts IEN(ICU, IRQ8) = 0; // Enable interrupt while(EMERGENCIA && !realease) { vTaskDelay(1 / portTICK_PERIOD_MS); emergencyCount++; if(emergencyCount == 100) { static mn_screen_event_t mn_emergencia; emergenciaFlag = true; if (isCuttingGet() == true) { stopDuringCut_Set(true); } //machine_pause(); mn_emergencia.event = EMERGENCIA_SIGNAL_EVENT; xQueueSend( menu.qEvent, &mn_emergencia, 0 ); ulTaskNotifyTake( pdTRUE, portMAX_DELAY ); realease = true; emergencyCount = 0; } } } }
void plasma_task(void) { uint8_t debounce; uint32_t qSend = 0; bool pinState; while(1) { ulTaskNotifyTake( pdTRUE, portMAX_DELAY ); ArcoOktaskIdle = true; debounce = 0; while(ArcoOktaskIdle) { pinState = ARCO_OK; vTaskDelay(pdMS_TO_TICKS(10)); if(pinState == ARCO_OK) { debounce++; } if(debounce == DEBOUNCE_COUNT) { if (!ARCO_OK) { if (!simTorch) { //xTaskNotifyGive(xCncTaskHandle); xSemaphoreGive( xArcoOkSync ); } } debounce = 0; do { if(ARCO_OK) { debounce++; arcoOkSet(false); } else { debounce = 0; arcoOkSet(true); } vTaskDelay(pdMS_TO_TICKS(10)); }while(debounce != ARCOOK_DELAY_COUNT && isCutting && ArcoOktaskIdle); if (isCutting && ArcoOktaskIdle) { // xTimerStop( swTimers[AUTO_MENU_TIMER], 0 ); stopDuringCut_Set(true); // vTaskPrioritySet( xCncTaskHandle, 3 ); // warm_stop(2); // vTaskPrioritySet( xCncTaskHandle, 1 ); // TORCH = FALSE; // if( uxTaskPriorityGet( xCncTaskHandle ) != 1 ) // { // // } // lstop = true; // ut_lcd_output_warning("PLASMA NÃO\nTRANSFERIDO\n"); // while(qSend != KEY_ESC){ // WDT_FEED // xQueueReceive( qKeyboard, &qSend, portMAX_DELAY ); // } mn_screen_event_t arcoOk_Fail; arcoOk_Fail.event = ARCO_OK_FAILED_EVENT; qSend = ARCO_OK_FAILED; xQueueSend( menu.qEvent, &arcoOk_Fail, 0 ); } } } } }