function PrinterState_getCartridgeCode(&$code_cartridge, $abb_cartridge, $power_off = TRUE) { global $config; $arcontrol_fullpath = $config['arcontrol_c']; $command = ''; $output = array(); $ret_val = 0; switch ($abb_cartridge) { case 'l': $command = $arcontrol_fullpath . PRINTERSTATE_GET_CARTRIDGEL; break; case 'r': $command = $arcontrol_fullpath . PRINTERSTATE_GET_CARTRIDGER; break; default: return ERROR_WRONG_PRM; break; } exec($command, $output, $ret_val); if (!PrinterState_filterOutput($output)) { return ERROR_INTERNAL; } if ($ret_val != ERROR_NORMAL_RC_OK) { PrinterLog_logError('rfid read command error', __FILE__, __LINE__); return ERROR_INTERNAL; } else { $code_cartridge = $output ? $output[0] : NULL; } if ($power_off == TRUE) { $ret_val = PrinterState_setRFIDPower(FALSE); if ($ret_val != ERROR_OK) { return ERROR_INTERNAL; } } return ERROR_OK; }
public function changecartridge_ajax() { $template_data = array(); $body_page = NULL; $ret_val = 0; $abb_cartridge = $this->input->post('abb_cartridge'); $need_filament = $this->input->post('need_filament'); $id_model = $this->input->post('mid'); $next_phase = $this->input->post('next_phase'); $code_miss_cartridge = $abb_cartridge == 'r' ? ERROR_MISS_RIGT_CART : ERROR_MISS_LEFT_CART; $code_low_filament = $abb_cartridge == 'r' ? ERROR_LOW_RIGT_FILA : ERROR_LOW_LEFT_FILA; $code_miss_filament = $abb_cartridge == 'r' ? ERROR_MISS_RIGT_FILA : ERROR_MISS_LEFT_FILA; $low_hint = FALSE; $change_able = TRUE; // treat input data if (!$abb_cartridge && !in_array($abb_cartridge, array('l', 'r'))) { if (isset($_SERVER['HTTP_REFERER'])) { $this->output->set_header('Location: ' . $_SERVER['HTTP_REFERER']); } else { $this->output->set_header('Location: /'); } return; } if ($need_filament) { $need_filament = (int) $need_filament; } else { $need_filament = 0; } $this->load->helper(array('corestatus')); // detect status switch ($next_phase) { case PRINTERSTATE_CHANGECART_UNLOAD_F: // we call the page: wait unload filament, need checking status (first status page) $status_current = ''; $array_status = array(); // block any sending command to arduino when in unloading wait time if (CoreStatus_checkInIdle($status_current, $array_status) == FALSE) { if (in_array($status_current, array(CORESTATUS_VALUE_UNLOAD_FILA_L, CORESTATUS_VALUE_UNLOAD_FILA_R))) { if (!$this->_deal_with_unloading_wait_time($abb_cartridge, $array_status)) { $this->_display_changecartridge_in_unload_filament($abb_cartridge); break; } } else { if (in_array($status_current, array(CORESTATUS_VALUE_LOAD_FILA_L, CORESTATUS_VALUE_LOAD_FILA_R))) { $this->_display_changecartridge_in_load_filament(); break; } } } if (PrinterState_getFilamentStatus($abb_cartridge)) { // have filament $status_correct = $abb_cartridge == 'r' ? CORESTATUS_VALUE_UNLOAD_FILA_R : CORESTATUS_VALUE_UNLOAD_FILA_L; $status_changed = $abb_cartridge == 'r' ? CORESTATUS_VALUE_LOAD_FILA_R : CORESTATUS_VALUE_LOAD_FILA_L; if (CoreStatus_checkInIdle($status_current, $array_status)) { // in idle $ret_val = PrinterState_getTemperature($temp_data, 'e', $abb_cartridge); if ($ret_val != ERROR_OK) { $this->load->helper('printerlog'); PrinterLog_logError('can not get temperature: ' . $abb_cartridge, __FILE__, __LINE__); $this->output->set_status_header(202); // disable checking } else { $this->_display_changecartridge_wait_unload_filament($abb_cartridge, $id_model, $temp_data > PRINTERSTATE_VALUE_MAXTEMPER_BEFORE_UNLOAD); } } else { if ($status_current == $status_correct) { // in busy (normally only unloading is possible) $timeout_check = PRINTERSTATE_VALUE_TIMEOUT_TO_CHECK_UNLOAD; if (array_key_exists(CORESTATUS_TITLE_FILA_MAT, $array_status) && $array_status[CORESTATUS_TITLE_FILA_MAT] == PRINTERSTATE_DESP_MATERIAL_PVA) { $timeout_check = PRINTERSTATE_VALUE_TIMEOUT_TO_CHECK_UNLOAD_PVA; } if (!CoreStatus_checkInWaitTime($timeout_check)) { //TODO test me // already passed the timeout of changement // change status into idle $ret_val = CoreStatus_setInIdle(); if ($ret_val == FALSE) { $this->load->helper('printerlog'); PrinterLog_logError('can not set idle after unloading filament', __FILE__, __LINE__); $this->output->set_status_header(202); // disable checking } $this->_display_changecartridge_error_unloading(); break; } $this->_display_changecartridge_in_unload_filament($abb_cartridge); } else { if ($status_current == $status_changed) { // in busy (but in idle, status is changed in real) $ret_val = CoreStatus_setInIdle(); if ($ret_val == FALSE) { $this->load->helper('printerlog'); PrinterLog_logError('can not set idle after unloading filament', __FILE__, __LINE__); $this->output->set_status_header(202); // disable checking } } else { // in other busy status $this->load->helper('printerlog'); PrinterLog_logError('error status when changing filament', __FILE__, __LINE__); $this->_display_changecartridge_error_status($status_current); // $this->output->set_status_header(202); // disable checking } } } } else { // no filament $status_correct = $abb_cartridge == 'r' ? CORESTATUS_VALUE_LOAD_FILA_R : CORESTATUS_VALUE_LOAD_FILA_L; $status_changed = $abb_cartridge == 'r' ? CORESTATUS_VALUE_UNLOAD_FILA_R : CORESTATUS_VALUE_UNLOAD_FILA_L; if (CoreStatus_checkInIdle($status_current, $array_status)) { $ret_val = PrinterState_checkFilament($abb_cartridge, $need_filament); if ($ret_val == $code_miss_filament) { // have cartridge, enough filament $this->_display_changecartridge_wait_load_filament(TRUE, $id_model, $abb_cartridge); } else { if ($ret_val == $code_low_filament) { // have cartridge, low filament $this->_display_changecartridge_remove_cartridge(TRUE); } else { if ($ret_val == $code_miss_cartridge) { // no cartridge // raise the platform for first loading ajax page if (ERROR_OK != PrinterState_raisePlatform()) { $this->output->set_header('Location: /'); return; } $this->_display_changecartridge_insert_cartridge(); } else { // error status $this->load->helper('printerlog'); PrinterLog_logError('error checkfilament return status when changing filament (in starting)', __FILE__, __LINE__); $this->_display_changecartridge_remove_cartridge(); } } } } else { if ($status_current == $status_correct) { $timeout_check = PRINTERSTATE_VALUE_TIMEOUT_TO_CHECK_LOAD; if (array_key_exists(CORESTATUS_TITLE_FILA_MAT, $array_status) && $array_status[CORESTATUS_TITLE_FILA_MAT] == PRINTERSTATE_DESP_MATERIAL_PVA) { $timeout_check = PRINTERSTATE_VALUE_TIMEOUT_TO_CHECK_LOAD_PVA; } // in busy (normally only loading is possible) if (!CoreStatus_checkInWaitTime($timeout_check)) { // already passed the timeout of changement // change status into idle $ret_val = CoreStatus_setInIdle(); if ($ret_val == FALSE) { $this->load->helper('printerlog'); PrinterLog_logError('can not set idle after loading filament', __FILE__, __LINE__); $this->output->set_status_header(202); // disable checking } $this->_display_changecartridge_error_loading(); break; } $this->_display_changecartridge_in_load_filament(); } else { if ($status_current == $status_changed) { // in busy (but in idle, status is changed in real) $ret_val = CoreStatus_setInIdle(); if ($ret_val == FALSE) { $this->load->helper('printerlog'); PrinterLog_logError('can not set idle after loading filament', __FILE__, __LINE__); $this->output->set_status_header(202); // disable checking } } else { // in other busy status $this->load->helper('printerlog'); PrinterLog_logError('error status when changing filament', __FILE__, __LINE__); $this->_display_changecartridge_error_status($status_current); // $this->output->set_status_header(202); // disable checking } } } } break; case PRINTERSTATE_CHANGECART_REMOVE_C: // we call the page: in unload filament // $status_current = NULL; $array_status = array(); // CoreStatus_checkInIdle($status_current, $array_status); CoreStatus_getStatusArray($array_status); if (!$this->_deal_with_unloading_wait_time($abb_cartridge, $array_status)) { $this->_display_changecartridge_in_unload_filament($abb_cartridge); break; } if (PrinterState_getFilamentStatus($abb_cartridge)) { // have filament $timeout_check = PRINTERSTATE_VALUE_TIMEOUT_TO_CHECK_UNLOAD; if (array_key_exists(CORESTATUS_TITLE_FILA_MAT, $array_status) && $array_status[CORESTATUS_TITLE_FILA_MAT] == PRINTERSTATE_DESP_MATERIAL_PVA) { $timeout_check = PRINTERSTATE_VALUE_TIMEOUT_TO_CHECK_UNLOAD_PVA; } if (!CoreStatus_checkInWaitTime($timeout_check)) { // already passed the timeout of changement // change status into idle $ret_val = CoreStatus_setInIdle(); if ($ret_val == FALSE) { $this->load->helper('printerlog'); PrinterLog_logError('can not set idle after unloading filament', __FILE__, __LINE__); $this->output->set_status_header(202); // disable checking } $this->_display_changecartridge_error_unloading(); break; } $this->_display_changecartridge_in_unload_filament($abb_cartridge); } else { // no filament $ret_val = CoreStatus_setInIdle(); if ($ret_val == FALSE) { $this->load->helper('printerlog'); PrinterLog_logError('can not set idle after unloading filament', __FILE__, __LINE__); $this->output->set_status_header(202); // disable checking } $this->_display_changecartridge_remove_cartridge(); } break; case PRINTERSTATE_CHANGECART_REINST_C: // we use switch breakdown to continue the treatement $low_hint = TRUE; case PRINTERSTATE_CHANGECART_INSERT_C: // we call the page: remove / reinsert cartridge $temp_data = NULL; $ret_val = PrinterState_checkFilament($abb_cartridge, $need_filament, $temp_data, FALSE); if ($ret_val == $code_miss_cartridge) { // no cartridge $this->_display_changecartridge_insert_cartridge(); } else { if ($ret_val == $code_low_filament) { // have cartridge, low filament $this->_display_changecartridge_remove_cartridge(TRUE); } else { if ($ret_val == $code_miss_filament) { // have cartridge, no filemant $this->_display_changecartridge_remove_cartridge($low_hint); } else { // error status $this->load->helper('printerlog'); PrinterLog_logError('error checkfilament return status when changing filament (in removing)', __FILE__, __LINE__); $this->_display_changecartridge_remove_cartridge(); } } } break; case PRINTERSTATE_CHANGECART_LOAD_F: // we call the page: insert cartridge $temp_data = NULL; $ret_val = PrinterState_checkFilament($abb_cartridge, $need_filament, $temp_data, FALSE); if ($ret_val == $code_miss_filament) { //TODO added a new temporary page here, need to remove when not needed // $this->_display_changecartridge_wait_load_filament(FALSE); // if ($temp_data[PRINTERSTATE_TITLE_CARTRIDGE] == PRINTERSTATE_DESP_CARTRIDGE_REFILL) { // $this->_display_changecartridge_write_cartridge($abb_cartridge, PRINTERSTATE_CHANGECART_WAIT_F, $need_filament); // } // else { // $this->_display_changecartridge_wait_load_filament(FALSE); // } $this->_display_changecartridge_write_cartridge($abb_cartridge, PRINTERSTATE_CHANGECART_WAIT_F, $need_filament); //TODO a new filament quantity verification system // turn off RFID power after changing $ret_val = PrinterState_setRFIDPower(FALSE); if ($ret_val != ERROR_OK) { $this->load->helper('printerlog'); PrinterLog_logError('error in turning off RFID power', __FILE__, __LINE__); } } else { if ($ret_val == $code_low_filament) { $this->_display_changecartridge_remove_cartridge(TRUE); } else { if ($ret_val == $code_miss_cartridge) { // no cartridge $this->_display_changecartridge_insert_cartridge(); } else { // error status $this->load->helper('printerlog'); PrinterLog_logError('error checkfilament return status when changing filament (in inserting)', __FILE__, __LINE__); $this->_display_changecartridge_remove_cartridge(); } } } break; case PRINTERSTATE_CHANGECART_WAIT_F: // we use switch breakdown to continue the treatement $change_able = FALSE; case PRINTERSTATE_CHANGECART_WAIT_F_C: // we call the page: wait load filament / change cartridge if (CoreStatus_checkInIdle()) { // in idle $this->_display_changecartridge_wait_load_filament($change_able, $id_model, $abb_cartridge); } else { // in busy (normally only loading is possible) $this->_display_changecartridge_in_load_filament(); } break; case PRINTERSTATE_CHANGECART_NEED_P: // we call the page: in load filament // $status_current = NULL; $array_status = array(); $offset_check = PRINTERSTATE_VALUE_OFFSET_TO_CHECK_LOAD; // CoreStatus_checkInIdle($status_current, $array_status); CoreStatus_getStatusArray($array_status); if (array_key_exists(CORESTATUS_TITLE_FILA_MAT, $array_status) && $array_status[CORESTATUS_TITLE_FILA_MAT] == PRINTERSTATE_DESP_MATERIAL_PVA) { $offset_check = PRINTERSTATE_VALUE_OFFSET_TO_CHECK_LOAD_PVA; } // wait the time for arduino before checking filament when loading filament if (CoreStatus_checkInWaitTime($offset_check)) { $this->_display_changecartridge_in_load_filament(); break; } if (PrinterState_getFilamentStatus($abb_cartridge)) { // have filament $ret_val = CoreStatus_setInIdle(); if ($ret_val == FALSE) { $this->load->helper('printerlog'); PrinterLog_logError('can not set idle after loading filament', __FILE__, __LINE__); $this->output->set_status_header(202); // disable checking } $this->_display_changecartridge_need_prime($abb_cartridge, $id_model); } else { // no filament $timeout_check = PRINTERSTATE_VALUE_TIMEOUT_TO_CHECK_LOAD; if (array_key_exists(CORESTATUS_TITLE_FILA_MAT, $array_status) && $array_status[CORESTATUS_TITLE_FILA_MAT] == PRINTERSTATE_DESP_MATERIAL_PVA) { $timeout_check = PRINTERSTATE_VALUE_TIMEOUT_TO_CHECK_LOAD_PVA; } if (!CoreStatus_checkInWaitTime($timeout_check)) { // already passed the timeout of changement CoreStatus_setInIdle(); //TODO need test and error control here $this->_display_changecartridge_error_loading(); break; } $this->_display_changecartridge_in_load_filament(); } break; default: break; } $this->output->set_content_type('text/plain; charset=UTF-8'); return; }
function PrinterState_getCartridgeCode(&$code_cartridge, $abb_cartridge, $power_off = TRUE) { global $CFG; global $PRINTER; $command = $CFG->config['arcontrol_c']; $output = array(); $ret_val = 0; switch ($abb_cartridge) { case 'l': $command .= PRINTERSTATE_GET_CARTRIDGEL; break; case 'r': $command .= PRINTERSTATE_GET_CARTRIDGER; break; default: PrinterLog_logError('input parameter error, $abb_cartridge: "' . $abb_cartridge . '"', __FILE__, __LINE__); return ERROR_WRONG_PRM; break; } // check already read or not if (!is_array($PRINTER)) { $PRINTER = array(); } if (isset($PRINTER[$abb_cartridge][PRINTERSTATE_PRM_CARTRIDGE])) { $code_cartridge = $PRINTER[$abb_cartridge][PRINTERSTATE_PRM_CARTRIDGE]; } else { exec($command, $output, $ret_val); if (!PrinterState_filterOutput($output, $command)) { PrinterLog_logError('filter arduino output error', __FILE__, __LINE__); return ERROR_INTERNAL; } PrinterLog_logArduino($command, $output); if ($ret_val != ERROR_NORMAL_RC_OK) { return ERROR_INTERNAL; } else { $code_cartridge = $output ? $output[0] : NULL; // rewrite cartridge when necessary if (strlen($code_cartridge) == 32) { PrinterState__updateCartridge($code_cartridge, $abb_cartridge); } $PRINTER[$abb_cartridge][PRINTERSTATE_PRM_CARTRIDGE] = $code_cartridge; } } if ($power_off == TRUE) { $ret_val = PrinterState_setRFIDPower(FALSE); if ($ret_val != ERROR_OK) { return ERROR_INTERNAL; } } return ERROR_OK; }