Repository navigation
Updated Website - #82
Open
alexanderoster wants to merge 319 commits into
Open
alexanderoster wants to merge 319 commits into
alexanderoster wants to merge 319 commits into
Conversation
This reverts commit beeedcb.
…icrovector/recording timing (#58) ### feat(scanlabsmc): expose raw simulation data from SMC jobs - Added `LoadRawSimulationData` API to SMCJob (ACT, ABI, dynamic bindings, wrappers). - Implemented raw binary export from the SMC simulation working file and introduced `SIMULATIONWORKINGFILEISNOTINITIALIZED` error for missing simulation context. - Updated simulation-mode job startup to create a managed temp file and start module recording via `slsc_job_begin_module`. - Added SDK support for `slsc_cfg_register_callback_job_calculated` and `slsc_job_begin_module` with journal logging. ### fix(scanlab): correct microvector laser on/off delay conversion - Converted microvector laser delays from seconds to RTC ticks (100 kHz) when calling `n_micro_vector_abs`, keeping `-1` as "no delay" sentinel. ### fix(scanlab): improve RTC recording loop progress condition - Adjusted `executeListWithRecording` to use the card busy state for data-block reads and termination instead of measurement busy status to avoid missed blocks / early exit. These changes enable retrieving raw SMC simulation artifacts for downstream processing, while improving RTC replay correctness and recording reliability. Signed-off-by: Yury Rodzikau <y.rodzikau@c1-technologies.com>
Upstream's lib3mf update (f785669, 18521dc, 67af441, 1a16bc1) moved the headers in Libraries/lib3mf/, the lib3mf_win64.dll artifact and _githash_lib3mf.txt to lib3mf eaff2359, but not the linux64 and rpi shared libraries. The headers now load 879 lib3mf_* functions. The old .so files (built from f6a9bb36) lack 52 of them, for example lib3mf_toolpath_addlasersource and lib3mf_reader_settoolpathlaserreferencechecks. On Linux, amc_server therefore failed at startup with COULDNOTFINDLIBRARYEXPORT, whichever plugin was configured. Both libraries are rebuilt from lib3mf eaff23596f7a1d038922d4a1bf4244d8cc367495 (branch toolpath_squashed, "Toolpath Point Overrides Tests", 2026-11-03). Its Autogenerated/Bindings/CppDynamic lib3mf_dynamic.h, lib3mf_dynamic.hpp and lib3mf_types.hpp are byte-identical to the vendored headers. _githash_linux64_lib3mf.txt and _githash_rpi_lib3mf.txt now name eaff2359, matching _githash_lib3mf.txt. Build: the same way as f6ff5ec, in a debian:bookworm-slim container with build-essential, cmake and crossbuild-essential-arm64 installed. linux64 uses native gcc 12.2.0 and rpi is cross-compiled with aarch64-linux-gnu-gcc 12.2.0. Commands: cmake -DCMAKE_BUILD_TYPE=Release -DLIB3MF_TESTS=OFF <lib3mf source> cmake --build . --target lib3mf For rpi, the first command also gets: -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=aarch64 -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ Everything else uses lib3mf defaults: bundled zlib/libzip, stripped, and libstdc++ linked dynamically. Both libraries still need at most GLIBC 2.36 and GLIBCXX 3.4.29, and the NEEDED libraries and the SONAME (lib3mf.so.2) are unchanged. Verification: nm -D shows 879 of 879 referenced exports in both libraries. The 10 exports that disappeared are the lib3mf_binarystream_* and lib3mf_writer_{assign,create}binarystream functions, which lib3mf removed and which the new headers no longer reference. The linux64 build dlopens and reports version 2.4.0, and amc_server starts with it. The rpi build was not run, because the build host has no arm64 emulation.
* Run the upload finish request without a timeout /upload/finish makes the server hash the whole stream, so its duration grows with the file size; on slow hardware such as a Raspberry Pi a large file exceeds the default 10 s request timeout. axios then aborted the request, the rejection was swallowed, and the upload widget stayed at 100 % although the upload never completed. The finish request of build and image uploads now runs without a timeout, like the chunk POSTs. A failed init, chunk or finish request calls the new AMCUploadState.failUpload(), which invokes _onError, so the frontend shows the failure instead of hanging. * Fail only the active upload after a failed request An upload widget reuses one AMCUploadState, and the user can start a new upload while one is still running; the new upload takes over with a new upload ID. A failing request of the replaced upload (e.g. a finish for a 3MF that does not parse) then reset the upload ID and fired _onError, which silently stopped the newer upload. AMCUpload.failUpload() now only acts while its upload is the active one, as the chunk handlers already check.
A posted form value is written to the session client variable <entity>.value, which every content poll of a sync:value edit overwrites with the bound parameter. A poll that lands between the payload write and the handler's GetUIProperty hands the handler the stored parameter instead of the value the user submitted, so the event silently runs with the old value. handleEvent now also snapshots each posted form value into a per-event CUIEventFormValues, and CUIEnvironment's GetUIProperty* read "value" of a posted entity from that snapshot. The snapshot copies the parameter types from the client variables, so typed reads convert as before. Writing the value with SetUIProperty* during the event drops the snapshot, so a handler still reads back what it set. No ACT change.
* Add an execution list seeding and measurement tool DevTools/executionlist_perf seeds N build jobs and executions into a scratch MinimalSystem server and measures GET /api/executions: the full list, concurrent loads, ?since= deltas and the /api/frontend snapshot, with latency, response size and amc_server CPU. It gives repeatable before/after numbers for the following execution list changes. Standard library Python only. * Load build job execution list values in one query Every BuildJobExecution getter used by an execution list (status, description, end time stamp, elapsed time, and the job's thumbnail via RetrieveJob) runs its own query, so a list of N executions costs about 6N queries. The execution SELECT now also loads these values, and new getters return them without querying again: GetLoadedStatus, GetLoadedStatusString, GetLoadedDescription, GetLoadedEndTimeStampInMicroseconds, ComputeLoadedElapsedTimeInMicroseconds, JobHasThumbnailStream and GetJobThumbnailStreamUUID. The existing getters still read fresh, because long-lived plugin objects rely on that. The SELECT was copied into five queries that had to match the column order by hand. It now lives in CBuildJobExecution::selectQueryWithoutConditions(). A damaged job row (missing, unparseable status, malformed thumbnail UUID) used to make the whole list and every ?since= delta throw. It is now reported as job status Deleted or as no thumbnail, for its own entry only. Unit tests: LibMCData_BuildJobs/ListExecs*. * Build /api/executions entries without per-row queries /api/executions wrote each entry with fresh getters (GetStatus, GetStatusString, GetDescription, GetEndTimeStamp, ComputeElapsedTime) and a RetrieveJob for the thumbnail: about six queries per execution, for the full list and for every ?since= delta. Each entry is now written by writeExecutionListEntryToJSON from the values the list query already loaded, so a list request is one query whatever its length. The JSON is unchanged, and an execution whose job row is missing no longer fails the request. At 2000 executions (DevTools/executionlist_perf, debug build) one full list drops from 1.2 s to 63 ms, six concurrent loads from 8.3 s to 0.18 s, and a 100-row delta from 65 ms to 5 ms. The response bodies are byte-identical before and after. Unit test: LibMCData_BuildJobs/ListExecsJSONEntry.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.