Esempio n. 1
0
 public function cancelslicing()
 {
     $ret_val = 0;
     $status_current = '';
     if (CoreStatus_checkInIdle($status_current)) {
         $this->_return_cr(ERROR_NO_SLICING);
         return;
     }
     if ($status_current == CORESTATUS_VALUE_SLICE) {
         $this->load->helper('slicer');
         $ret_val = Slicer_sliceHalt();
         if ($ret_val == ERROR_OK) {
             $this->_return_cr(ERROR_OK);
         } else {
             $this->load->helper('printerlog');
             PrinterLog_logError('can not stop slicing by REST', __FILE__, __LINE__);
             $this->_return_cr($ret_val);
         }
     } else {
         $this->_return_cr(ERROR_NO_SLICING);
     }
     return;
 }
Esempio n. 2
0
function Slicer_checkSlice(&$progress, &$message = NULL, &$array_extruder = array())
{
    $cr = 0;
    $ret_val = 0;
    if (file_exists(SLICER_FILE_REMOTE_STATUS)) {
        // remote slicing case
        $tmp_array = array();
        $CI =& get_instance();
        // read remote slicing status
        $CI->load->helper('json');
        $tmp_array = json_read(SLICER_FILE_REMOTE_STATUS, TRUE);
        if (!file_exists(SLICER_FILE_REMOTE_STATUS)) {
            $progress = 99;
            $message = 'state_finalize_remote';
            $cr = ERROR_OK;
        } else {
            if (isset($tmp_array['error'])) {
                $CI->load->helper('printerlog');
                PrinterLog_logError('read json error: ' . json_encode($tmp_array), __FILE__, __LINE__);
                Slicer_sliceHalt(TRUE);
                // force to cancel remote slicing
                $cr = ERROR_INTERNAL;
            } else {
                $status_array = $tmp_array['json'];
                // check state
                if (!isset($status_array[SLICER_TITLE_REMOTE_STATE])) {
                    $CI->load->helper('printerlog');
                    PrinterLog_logError('unknown remote slicing status json format', __FILE__, __LINE__);
                    return ERROR_INTERNAL;
                }
                $cr = ERROR_OK;
                switch ($status_array[SLICER_TITLE_REMOTE_STATE]) {
                    case SLICER_VALUE_REMOTE_STATE_INITIAL:
                        $progress = 0;
                        $message = 'state_initialize_remote';
                        break;
                    case SLICER_VALUE_REMOTE_STATE_REQUEST:
                        $progress = 0;
                        $message = 'state_request_remote';
                        break;
                    case SLICER_VALUE_REMOTE_STATE_UPLOAD:
                        $progress = 0;
                        $message = 'state_upload_remote';
                        break;
                    case SLICER_VALUE_REMOTE_STATE_WORKING:
                        // use default value for error cases (phrasing extended failed, etc.)
                        $progress = 0;
                        $message = 'state_working_remote';
                        $CI->load->helper('printerlog');
                        if (!file_exists(PRINTERLOG_STATS_TMPFILE_SLICE_UPLOAD_END)) {
                            $stats_info = array();
                            $fp = fopen(PRINTERLOG_STATS_TMPFILE_SLICE_UPLOAD_END, 'w');
                            if ($fp) {
                                fwrite($fp, 'upload_end');
                                fclose($fp);
                            }
                            // stats info
                            $stats_info[PRINTERLOG_STATS_SLICE_SERVER] = isset($status_array[SLICER_TITLE_REMOTE_URL]) ? $status_array[SLICER_TITLE_REMOTE_URL] : PRINTERLOG_STATS_VALUE_REMOTE;
                            PrinterLog_statsSlice(PRINTERLOG_STATS_ACTION_UPLOADED, $stats_info);
                        }
                        if (isset($status_array[SLICER_TITLE_REMOTE_EXTENDED])) {
                            if ($status_array[SLICER_TITLE_REMOTE_EXTENDED] == SLICER_MSG_REMOTE_INITIAL) {
                                // remote slicing initialization case
                                $message = 'state_loading_remote';
                                break;
                            }
                            $explode_array = explode("=", $status_array[SLICER_TITLE_REMOTE_EXTENDED]);
                            if (count($explode_array) >= 2) {
                                $progress = (int) trim($explode_array[0]);
                                $message = trim($explode_array[1]);
                                // blind model path
                                if (strpos($message, SLICER_MSG_EXPORTING_MODEL) !== FALSE) {
                                    $message = SLICER_MSG_EXPORTING_MODEL;
                                }
                            }
                        }
                        break;
                    case SLICER_VALUE_REMOTE_STATE_DOWNLOAD:
                        $progress = 99;
                        $message = 'state_download_remote';
                        $CI->load->helper('printerlog');
                        if (!file_exists(PRINTERLOG_STATS_TMPFILE_SLICE_DOWNLOAD_START)) {
                            $stats_info = array();
                            $fp = fopen(PRINTERLOG_STATS_TMPFILE_SLICE_DOWNLOAD_START, 'w');
                            if ($fp) {
                                fwrite($fp, 'download_start');
                                fclose($fp);
                            }
                            // stats info
                            $stats_info[PRINTERLOG_STATS_SLICE_SERVER] = isset($status_array[SLICER_TITLE_REMOTE_URL]) ? $status_array[SLICER_TITLE_REMOTE_URL] : PRINTERLOG_STATS_VALUE_REMOTE;
                            PrinterLog_statsSlice(PRINTERLOG_STATS_ACTION_DOWNLOAD, $stats_info);
                        }
                        break;
                    case SLICER_VALUE_REMOTE_STATE_LOCAL:
                        $progress = 0;
                        $message = 'state_local_remote';
                        break;
                    case SLICER_VALUE_REMOTE_STATE_ERROR:
                    default:
                        $progress = -2;
                        // 					$message = 'state_error_remote';
                        if ($status_array[SLICER_TITLE_REMOTE_STATE] != SLICER_VALUE_REMOTE_STATE_ERROR) {
                            $CI->load->helper('printerlog');
                            PrinterLog_logError('unknown remote slicing status', __FILE__, __LINE__);
                        }
                        // use message as remote server url
                        $message = isset($status_array[SLICER_TITLE_REMOTE_URL]) ? $status_array[SLICER_TITLE_REMOTE_URL] : PRINTERLOG_STATS_VALUE_REMOTE;
                        $cr = ERROR_REMOTE_SLICE;
                        break;
                }
            }
        }
        return $cr;
    }
    // local slicing case
    $ret_val = Slicer__requestSlicer(SLICER_URL_SLICE_STATUS, TRUE, $response);
    if ($ret_val == SLICER_RESPONSE_OK) {
        if ((int) $response < 0) {
            $cr = ERROR_NO_SLICING;
            $progress = -1;
        } else {
            $cr = ERROR_OK;
            $progress = (int) $response;
            if ($progress == 100) {
                $CI =& get_instance();
                $CI->load->helper('printerstate');
                $explode_array = explode("\n", $response);
                if (isset($explode_array[1])) {
                    $explode_array = explode(';', $explode_array[1]);
                    foreach ($explode_array as $key_value) {
                        $tmp_array = explode(':', $key_value);
                        $abb_filament = PrinterState_cartridgeNumber2Abbreviate((int) $tmp_array[0]);
                        $array_extruder[$abb_filament] = ceil($tmp_array[1]);
                    }
                } else {
                    $cr = ERROR_INTERNAL;
                }
            } else {
                $explode_array = explode("\n", $response);
                if (isset($explode_array[1])) {
                    $message = $explode_array[1];
                    // blind model path
                    if (strpos($message, SLICER_MSG_EXPORTING_MODEL) !== FALSE) {
                        $message = SLICER_MSG_EXPORTING_MODEL;
                    }
                }
            }
        }
    } else {
        if ($ret_val == SLICER_RESPONSE_ERROR) {
            if (strpos($response, "InitalError") !== FALSE) {
                $cr = ERROR_WRONG_PRM;
            } else {
                if (strpos($response, "ExportError") !== FALSE) {
                    $cr = ERROR_UNKNOWN_MODEL;
                } else {
                    $cr = ERROR_INTERNAL;
                }
            }
            $progress = -1;
            $message = $response;
            $CI =& get_instance();
            $CI->load->helper('printerlog');
            PrinterLog_logError('slicer error: ' . $response);
        } else {
            $cr = ERROR_INTERNAL;
        }
    }
    return $cr;
}