Esempio n. 1
0
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;
}
Esempio n. 2
0
 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;
 }
Esempio n. 3
0
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;
}