kopia lustrzana https://github.com/OpenBuilds/OpenBuilds-CONTROL
Porównaj commity
84 Commity
24dd12d2b2
...
607deda463
Autor | SHA1 | Data |
---|---|---|
tippfehlr | 607deda463 | |
Peter van der Walt | cec1a70a90 | |
unknown | 64536498a0 | |
unknown | 44a6ca38fa | |
unknown | 2582dc83cd | |
unknown | 3f1a0f77a1 | |
unknown | 4794ef75f7 | |
unknown | 53b7f58d6d | |
unknown | a7d06e9fca | |
unknown | 25a4b944c6 | |
unknown | 4800540ffa | |
unknown | 83781e8df5 | |
unknown | 0c4b906db0 | |
unknown | 6de833b222 | |
unknown | 47cefafd02 | |
unknown | f3316da6dc | |
unknown | a77a99023f | |
unknown | e1982e260d | |
unknown | 95bf3723e2 | |
unknown | 9eebf5680e | |
unknown | 43cf823210 | |
unknown | 8b012e234d | |
unknown | 5f8dff0941 | |
unknown | c52fb04059 | |
unknown | 1b5f2af272 | |
unknown | 07da06bdc9 | |
unknown | 3545b5213d | |
unknown | e6a1be5844 | |
unknown | 317b6541f2 | |
unknown | b568b91ace | |
unknown | 97b008cf89 | |
unknown | 8ed574dd0d | |
unknown | d0754760ce | |
unknown | 0bff353d5b | |
unknown | dd09860885 | |
unknown | d6072adaaf | |
unknown | a95b83c312 | |
unknown | 1e77fc38ed | |
unknown | cff2fe1fd6 | |
unknown | 3b2fded429 | |
unknown | a2f56f97d3 | |
unknown | e769dba2f2 | |
unknown | 8de3acec1f | |
unknown | e945001961 | |
unknown | 358b86d838 | |
unknown | 9e05ddc603 | |
unknown | 20dfc43235 | |
unknown | 8e4d605c3b | |
unknown | 5fc950b63c | |
unknown | 17bcadfcea | |
Peter van der Walt | d35f2fe987 | |
unknown | 32279044e4 | |
unknown | f220872ffa | |
unknown | 3f0f6b8a1c | |
unknown | 3de1cf00fe | |
unknown | 116c275c68 | |
unknown | cdb077bab4 | |
unknown | 76190e3571 | |
unknown | 6134e804c5 | |
unknown | f67c20f258 | |
unknown | 70567aa8b9 | |
unknown | 9327926e75 | |
unknown | 39c9768108 | |
unknown | d2dd8edcde | |
unknown | 9f1f57e393 | |
unknown | a340fa3a22 | |
unknown | f32ee75b78 | |
unknown | ec494c14c4 | |
unknown | d671e97670 | |
unknown | 8050321b67 | |
unknown | 1f3aa54d36 | |
unknown | e182b666b2 | |
unknown | d539d60d8c | |
unknown | b33205067f | |
unknown | fc49ae166c | |
unknown | d707fb1e0d | |
unknown | 40746f42cc | |
unknown | 2dd6e5fb94 | |
unknown | a9a89926e5 | |
unknown | 2ae3943393 | |
Shawn | 9eecfed210 | |
Shawn | 291ca3cdba | |
stefan.kramer | 83286a3b6c | |
Shawn | 94f86b9785 |
|
@ -8,23 +8,64 @@ jobs:
|
|||
|
||||
strategy:
|
||||
matrix:
|
||||
#os: [macos-latest, ubuntu-latest, windows-latest]
|
||||
os: [macos-latest, windows-latest, ubuntu-20.04]
|
||||
#os: [macos-latest, ubuntu-latest]
|
||||
|
||||
steps:
|
||||
- name: Check out Git repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Install Node.js, NPM and Yarn
|
||||
uses: actions/setup-node@v3
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 18
|
||||
node-version: 20
|
||||
|
||||
- name: Install Node gyp
|
||||
run: npm install -g node-gyp@latest
|
||||
# new Windows Signing (2024)
|
||||
- name: Setup Certificate (Windows)
|
||||
if: startsWith(matrix.os, 'windows')
|
||||
run: |
|
||||
echo "${{secrets.SM_CLIENT_CERT_FILE_B64 }}" | base64 --decode > /d/Certificate_pkcs12.p12
|
||||
cat /d/Certificate_pkcs12.p12
|
||||
shell: bash
|
||||
|
||||
- name: Prepare for app notarization
|
||||
# new Windows Signing (2024)
|
||||
- name: Set variables (Windows)
|
||||
if: startsWith(matrix.os, 'windows')
|
||||
id: variables
|
||||
run: |
|
||||
echo "::set-output name=version::${GITHUB_REF#refs/tags/v}"
|
||||
echo "SM_CODE_SIGNING_CERT_SHA1_HASH=${{ secrets.SM_CODE_SIGNING_CERT_SHA1_HASH }}" >> "$GITHUB_ENV"
|
||||
echo "SM_HOST=${{ secrets.SM_HOST }}" >> "$GITHUB_ENV"
|
||||
echo "SM_API_KEY=${{ secrets.SM_API_KEY }}" >> "$GITHUB_ENV"
|
||||
echo "SM_CLIENT_CERT_FILE=D:\\Certificate_pkcs12.p12" >> "$GITHUB_ENV"
|
||||
echo "SM_CLIENT_CERT_PASSWORD=${{ secrets.SM_CLIENT_CERT_PASSWORD }}" >> "$GITHUB_ENV"
|
||||
echo "C:\Program Files (x86)\Windows Kits\10\App Certification Kit" >> $GITHUB_PATH
|
||||
echo "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools" >> $GITHUB_PATH
|
||||
echo "C:\Program Files\DigiCert\DigiCert One Signing Manager Tools" >> $GITHUB_PATH
|
||||
shell: bash
|
||||
|
||||
# new Windows Signing (2024)
|
||||
- name: Setup SSM KSP on windows latest (Windows)
|
||||
if: startsWith(matrix.os, 'windows')
|
||||
run: |
|
||||
curl -X GET https://one.digicert.com/signingmanager/api-ui/v1/releases/smtools-windows-x64.msi/download -H "x-api-key:%SM_API_KEY%" -o smtools-windows-x64.msi
|
||||
msiexec /i smtools-windows-x64.msi /quiet /qn
|
||||
smksp_registrar.exe list
|
||||
smctl.exe keypair ls
|
||||
C:\Windows\System32\certutil.exe -csp "DigiCert Signing Manager KSP" -key -user
|
||||
smksp_cert_sync.exe
|
||||
shell: cmd
|
||||
|
||||
- name: Certificates Sync
|
||||
if: startsWith(matrix.os, 'windows')
|
||||
run: |
|
||||
smctl windows certsync
|
||||
shell: cmd
|
||||
|
||||
- name: Install setuptools (macos)
|
||||
if: startsWith(matrix.os, 'macos')
|
||||
run: sudo -H pip install setuptools
|
||||
|
||||
- name: Prepare for app notarization (macos)
|
||||
if: startsWith(matrix.os, 'macos')
|
||||
# Import Apple API key for app notarization on macOS
|
||||
run: |
|
||||
|
@ -32,22 +73,30 @@ jobs:
|
|||
echo '${{ secrets.api_key }}' > ~/private_keys/AuthKey_${{ secrets.api_key_id }}.p8
|
||||
|
||||
- name: Electron Builder Action
|
||||
uses: OpenBuilds/action-electron-build@v1.8.0
|
||||
uses: OpenBuilds/action-electron-build@v1.9.0
|
||||
with:
|
||||
# GitHub token, automatically provided to the action
|
||||
# (No need to define this secret in the repo settings)
|
||||
github_token: ${{ secrets.github_token }}
|
||||
windows_certs: ${{ secrets.WIN_CSC_LINK }}
|
||||
windows_certs_password: ${{ secrets.WIN_CSC_PASSWORD }}
|
||||
mac_certs: ${{ secrets.mac_certs }}
|
||||
mac_certs_password: ${{ secrets.mac_certs_password }}
|
||||
release: true
|
||||
#debugElectron: true // to enable debug=electron-builder
|
||||
debugElectron: true
|
||||
# release: ${{ startsWith(github.ref, 'refs/tags/v') }}
|
||||
|
||||
debugElectron: false
|
||||
env:
|
||||
# macOS notarization API key
|
||||
API_KEY_ID: ${{ secrets.api_key_id }}
|
||||
API_KEY_ISSUER_ID: ${{ secrets.api_key_issuer_id }}
|
||||
#USE_HARD_LINKS: false
|
||||
# new MacOS notarize secrets (2024)
|
||||
DEBUG: electron-builder # To debug electron-builder
|
||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
||||
|
||||
# # new Windows Signing (2024)
|
||||
# - name: Signing using Signtool
|
||||
# if: startsWith(matrix.os, 'windows')
|
||||
# run: |
|
||||
# signtool.exe sign /sha1 ${{ secrets.SM_CODE_SIGNING_CERT_SHA1_HASH }} /tr http://timestamp.digicert.com /td SHA256 /fd SHA256 "D:\a\OpenBuilds-CONTROL\OpenBuilds-CONTROL\dist\*.exe"
|
||||
# signtool.exe verify /v /pa "D:\a\OpenBuilds-CONTROL\OpenBuilds-CONTROL\dist\*.exe"
|
||||
#
|
||||
# - name: Upload artifacts
|
||||
# uses: actions/upload-artifact@v2
|
||||
# with:
|
||||
# name: ${{ matrix.os }}
|
||||
# path: |
|
||||
# dist/*.exe
|
||||
|
|
|
@ -1,3 +1,25 @@
|
|||
v1.0.371: (Unreleased):
|
||||
- Updated Build environment to Node 20
|
||||
- Fixed Issue #285 Updated ACRO with Pen servo default Grbl profile PWM parameters
|
||||
- Fixed Issue #299 Change of settings numbering for grblHAL Station parameters
|
||||
- Fixed Issue #308 Improvement: Remember last used COM port
|
||||
- Fixed Issue #313 Reworded recovery wizard menu item
|
||||
- Fixed Issue #321 Switched Windows CodeSigning to new EAL4+ / FIPS140-2 compliant workflow
|
||||
- Fixed Issue #322 Switched to new Notarizing workflow for MacOS per Apple Technote TN3147
|
||||
- Fixed Issue #323 Merged fix for Macro Sorting issue
|
||||
- Fixed Issue #327 Show correct fields in Steps per mm Calculator Utility in default state
|
||||
- Fixed Issue #328 Improved Flashing Wizard and added warning to backup
|
||||
- Fixed Issue #330 Experimental $40=1 in Machine Profiles to see if that resolves Soft Limits issue
|
||||
- Fixed Issue #332 Merged fix for Center Probing Offset calculation bug
|
||||
- Fixed Issue #343 Fixed SiLabs USB descriptor
|
||||
- Fixed Issue #344 Added Reset prompt to end of Calibration routine
|
||||
- Fixed Issue #345 Merged fix for Update Grbl Settings for if settings are changed from macro/terminal/etc
|
||||
- Fixed Issue #346 Updated included grblHAL firmware binaries to v20240402 from 20230501
|
||||
- Fixed Issue #348 Merged fix for Dark Mode CSS Improvement
|
||||
- Removed BlackBox X32 advertisement from Splash Screen
|
||||
- Changed DROs to use 3 decimal places per grblHAL standards
|
||||
- Updated Grbl Settings Descriptions for newer firmware builds
|
||||
- Reworded 'firmware not found' error messages to clarify
|
||||
v1.0.370: Fixed typo in an error message, Updated SSL Certificates
|
||||
v1.0.369: Fixed bug in firmware flashing tool
|
||||
v1.0.368: Updated grblHAL firmware images to 20230501, updated grblHAL Settings templates, added 3-Axes with Door firmware, Fixed bug in Firmware flashing tool for Interface > Firmware Version when offline, Updated included Interface firmware version
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
.waviy {
|
||||
position: relative;
|
||||
-webkit-box-reflect: below -20px linear-gradient(transparent, rgba(0, 0, 0, .2));
|
||||
font-size: 60px;
|
||||
}
|
||||
|
||||
.waviy span {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
text-transform: uppercase;
|
||||
animation: waviy 1s infinite;
|
||||
animation-delay: calc(.1s * var(--i));
|
||||
}
|
||||
|
||||
@keyframes waviy {
|
||||
0%, 40%, 100% {
|
||||
transform: translateY(0)
|
||||
}
|
||||
|
||||
20% {
|
||||
transform: translateY(-20px)
|
||||
}
|
||||
}
|
|
@ -89,7 +89,8 @@ body.theme_dark, .theme_dark div.window, .theme_dark .card {
|
|||
}
|
||||
|
||||
.theme_dark .button.light:hover, .theme_dark .command-button.light:hover, .theme_dark .image-button.light:hover, .theme_dark .info-button.light:hover, .theme_dark .input .button.light:hover, .theme_dark .notify.light:hover, .theme_dark .select .button.light:hover, .theme_dark .shortcut.light:hover, .theme_dark .spinner .button.light:hover, .theme_dark .split-button .split.light:hover, .theme_dark .tag-input .button.light:hover, .theme_dark .tally.light:hover, .theme_dark .toast.light:hover, .theme_dark .tool-button.light:hover, .theme_dark code.light:hover, .theme_dark tbody td.light:hover, .theme_dark tbody tr.light:hover {
|
||||
background-color: #333;
|
||||
background-color: #222;
|
||||
color: #FFF;
|
||||
}
|
||||
|
||||
.theme_dark .button.disabled, .theme_dark .button:disabled, .theme_dark .command-button.disabled, .theme_dark .command-button:disabled, .theme_dark .image-button.disabled, .theme_dark .image-button:disabled, .theme_dark .shortcut.disabled, .theme_dark .shortcut:disabled, .theme_dark .split-button .split.disabled, .theme_dark .split-button .split:disabled, .theme_dark .tool-button.disabled, .theme_dark .tool-button:disabled {
|
||||
|
|
Plik binarny nie jest wyświetlany.
Po Szerokość: | Wysokość: | Rozmiar: 52 KiB |
|
@ -11,7 +11,6 @@
|
|||
<script type="text/javascript" src="lib/jquery/jquery.min.js"></script>
|
||||
<link rel="stylesheet" href="lib/metro4/css/metro-all.min.css" />
|
||||
<link rel="stylesheet" href="css/main.css" />
|
||||
<link rel="stylesheet" href="css/splash.css" />
|
||||
<link rel="stylesheet" href="css/buttons.css" />
|
||||
<link rel="stylesheet" href="css/probev2.css" />
|
||||
<link rel="stylesheet" href="/lib/furcanIconPicker/iconpicker-1.5.0.css" />
|
||||
|
@ -19,25 +18,12 @@
|
|||
|
||||
<body>
|
||||
|
||||
<div class="pos-fixed pos-center" id="splash" onclick="socket.emit('adX32');">
|
||||
<div class="pos-fixed pos-center" id="splash">
|
||||
<center>
|
||||
<div id="openbuildslogosplash" style="display: none;">
|
||||
<!-- <img id="openbuildslogosplashImg" src="/img/openbuilds.png" onload="$('#openbuildslogosplash').fadeIn(800); setTimeout(function() { $('#splash').fadeOut(400); }, 2000)" width="200" /> -->
|
||||
<h1>OpenBuilds<sup>®</sup> CONTROL</h1>
|
||||
<img id="openbuildslogosplashImgX32" src="/img/x32splash.png" onload="setTimeout(function() {$('#openbuildslogosplash').fadeIn(800); setTimeout(function() { $('#splash').fadeOut(400); }, 4000)}, 500);" style="cursor:pointer" />
|
||||
<h3 style="cursor:pointer">Check out the all NEW OpenBuilds<sup>®</sup> BlackBox X32</h3>
|
||||
<div class="waviy" style="cursor:pointer">
|
||||
<span style="--i:1">C</span>
|
||||
<span style="--i:2">L</span>
|
||||
<span style="--i:3">I</span>
|
||||
<span style="--i:4">C</span>
|
||||
<span style="--i:5">K</span>
|
||||
<span style="--i:6"> </span>
|
||||
<span style="--i:7">H</span>
|
||||
<span style="--i:8">E</span>
|
||||
<span style="--i:9">R</span>
|
||||
<span style="--i:10">E</span>
|
||||
</div>
|
||||
<img id="openbuildslogosplashImgX32" src="/img/splash.png" onload="setTimeout(function() {$('#openbuildslogosplash').fadeIn(100); setTimeout(function() { $('#splash').fadeOut(100); }, 1000)}, 100);" style="cursor:pointer" />
|
||||
</div>
|
||||
</center>
|
||||
</div>
|
||||
|
@ -325,9 +311,9 @@
|
|||
</li>
|
||||
<li class="divider fg-gray"></li>
|
||||
|
||||
<li class=""><a href="#" onclick="socket.emit('opencam', true);"><img width="16" src="img/openbuilds.svg"> OpenBuilds CAM</a></li>
|
||||
<li class=""><a href="#" onclick="socket.emit('lightburn', true);"><img width="16" src="affiliates/lightburn/lightburn.png"> Lightburn</a></li>
|
||||
<li class=""><a href="#" onclick="socket.emit('vectric', true);"><img width="16" src="affiliates/vectric/vectric.svg"> Vectric</a></li>
|
||||
<li class="" onclick="socket.emit('opencam', true);"><a href="#"><img width="16" src="img/openbuilds.svg"> OpenBuilds CAM</a></li>
|
||||
<li class="" onclick="socket.emit('lightburn', true);"><a href="#"><img width="16" src="affiliates/lightburn/lightburn.png"> Lightburn</a></li>
|
||||
<li class="" onclick="socket.emit('vectric', true);"><a href="#"><img width="16" src="affiliates/vectric/vectric.svg"> Vectric</a></li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
@ -343,9 +329,9 @@
|
|||
<li class="btn-file" onclick="socket.emit('openFile')"><a href="#"><i class="far fa-folder-open fa-fw"></i> <b>Open GCODE</b> from File (*.gcode, *.gc, *.tap, *.nc, *.cnc)</a> </li>
|
||||
<li class="divider fg-gray"></li>
|
||||
|
||||
<li class=""><a href="#" onclick="socket.emit('opencam', true);"><img width="16" src="img/openbuilds.svg"> OpenBuilds CAM</a></li>
|
||||
<li class=""><a href="#" onclick="socket.emit('lightburn', true);"><img width="16" src="affiliates/lightburn/lightburn.png"> Lightburn</a></li>
|
||||
<li class=""><a href="#" onclick="socket.emit('vectric', true);"><img width="16" src="affiliates/vectric/vectric.svg"> Vectric</a></li>
|
||||
<li class="" onclick="socket.emit('opencam', true);"><a href="#"><img width="16" src="img/openbuilds.svg"> OpenBuilds CAM</a></li>
|
||||
<li class="" onclick="socket.emit('lightburn', true);"><a href="#"><img width="16" src="affiliates/lightburn/lightburn.png"> Lightburn</a></li>
|
||||
<li class="" onclick="socket.emit('vectric', true);"><a href="#"><img width="16" src="affiliates/vectric/vectric.svg"> Vectric</a></li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
@ -374,7 +360,7 @@
|
|||
<span class="caption">Run<br>Job</span>
|
||||
</button>
|
||||
<ul class="ribbon-dropdown" data-role="dropdown" data-duration="100" id="toolChangesMenu">
|
||||
<li class=""><a href="#" onclick="socket.emit('opencam', true);"><i class="fas fa-link fa-fw"></i> Open browser to https://cam.openbuilds.com</a></li>
|
||||
<li class="" onclick="socket.emit('opencam', true);"><a href="#"><i class="fas fa-link fa-fw"></i> Open browser to https://cam.openbuilds.com</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
@ -409,7 +395,7 @@
|
|||
<span class="caption">Tool<br>On</span>
|
||||
</button>
|
||||
<ul class="ribbon-dropdown grblmode" data-role="dropdown" data-duration="100">
|
||||
<li><a class="grblmode" href="#" onclick="sendGcode('M3 S'+parseInt(grblParams.$30).toFixed(0))">Router On (M3 S<span class="ToolOnS100">1000</span>)</a></li>
|
||||
<li onclick="sendGcode('M3 S'+parseInt(grblParams.$30).toFixed(0))"><a class="grblmode" href="#">Router On (M3 S<span class="ToolOnS100">1000</span>)</a></li>
|
||||
<li>
|
||||
<a href="#" class="dropdown-toggle">Variable Speed Spindle On (M3 Sxxx)</a>
|
||||
<ul class="ribbon-dropdown" data-role="dropdown">
|
||||
|
@ -434,10 +420,10 @@
|
|||
</ul>
|
||||
</li>
|
||||
<!-- <li class="divider"></li> -->
|
||||
<li><a class="grblmode" href="#" onclick="sendGcode('M3 S'+parseInt(grblParams.$30).toFixed(0))">Plasma On (M3 S<span class="ToolOnS100">1000</span>)</a></li>
|
||||
<li onclick="sendGcode('M3 S'+parseInt(grblParams.$30).toFixed(0))"><a class="grblmode" href="#">Plasma On (M3 S<span class="ToolOnS100">1000</span>)</a></li>
|
||||
<li class="divider fg-gray"></li>
|
||||
<li id="menuMisting" style="display: none;"><a class="grblmode" href="#" onclick="sendGcode('M7')">Misting On (M7)</a></li>
|
||||
<li><a class="grblmode" href="#" onclick="sendGcode('M8')">Coolant On (M8)</a></li>
|
||||
<li id="menuMisting" style="display: none;" onclick="sendGcode('M7')"><a class="grblmode" href="#">Misting On (M7)</a></li>
|
||||
<li onclick="sendGcode('M8')"><a class="grblmode" href="#">Coolant On (M8)</a></li>
|
||||
<!-- <li><a class="grblmode" href="#" onclick="sendGcode('M9 S1000')">Coolant Off (M9)</a></li> -->
|
||||
|
||||
</ul>
|
||||
|
@ -455,9 +441,9 @@
|
|||
<span class="caption">Tool<br>Off</span>
|
||||
</button>
|
||||
<ul class="ribbon-dropdown grblmode" data-role="dropdown" data-duration="100">
|
||||
<li><a class="grblmode" href="#" onclick="sendGcode('M5')">Router / Spindle / Laser / Plasma Off (M5)</a></li>
|
||||
<li onclick="sendGcode('M5')"><a class="grblmode" href="#">Router / Spindle / Laser / Plasma Off (M5)</a></li>
|
||||
<li class="divider fg-gray"></li>
|
||||
<li><a class="grblmode" href="#" onclick="sendGcode('M9')">Coolant Off (M9)</a></li>
|
||||
<li onclick="sendGcode('M9')"><a class="grblmode" href="#">Coolant Off (M9)</a></li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
@ -501,8 +487,8 @@
|
|||
<span class="caption">Wizards<br>& Tools</span>
|
||||
</button>
|
||||
<ul class="ribbon-dropdown grblmode" data-role="dropdown" data-duration="100">
|
||||
<li><a href="#" onclick="populateSurfaceToolForm();"><i class="fas fa-exchange-alt"></i> Surfacing / Flattening Wizard</a></li>
|
||||
<li><a href="#" onclick="jogWidget();"><i class="fas fa-mobile-alt"></i> Mobile Jog Widget</a></li>
|
||||
<li onclick="populateSurfaceToolForm();"><a href="#"><i class="fas fa-exchange-alt"></i> Surfacing / Flattening Wizard</a></li>
|
||||
<li onclick="jogWidget();"><a href="#"><i class="fas fa-mobile-alt"></i> Mobile Jog Widget</a></li>
|
||||
<li class="divider fg-gray"></li>
|
||||
<li class="disabled grblCalibrationMenu" onclick="xstepscalibrate();"><a href="#"><i class="fas fa-wrench fa-fw"></i> Calibrate X-Axes Steps/mm</a></li>
|
||||
<li class="disabled grblCalibrationMenu" onclick="ystepscalibrate();"><a href="#"><i class="fas fa-wrench fa-fw"></i> Calibrate Y-Axes Steps/mm</a></li>
|
||||
|
@ -516,7 +502,7 @@
|
|||
<li class="divider fg-gray"></li>
|
||||
<li onclick="showJobLog();"><a href="#"><i class="fas fa-history fa-fw"></i> Job Log</a></li>
|
||||
<li class="divider fg-gray"></li>
|
||||
<li onclick="recoverCrashedJob();"><a href="#"><i class="fas fa-fw fa-route"></i> Recover crashed/stopped job </a></li>
|
||||
<li onclick="recoverCrashedJob();"><a href="#"><i class="fas fa-fw fa-route"></i> Recover stopped/crashed job </a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
@ -661,12 +647,12 @@
|
|||
<span title="Show/change current Work Coordinate System" class="fas fa-fw fa-layer-group icon fg-darkGray"></span>G54
|
||||
</button>
|
||||
<ul class="ribbon-dropdown drop-shadow" data-role="dropdown">
|
||||
<li class="checked wcsItem wcsItemG54"><a href="#" onclick="sendGcode('G54')"><span class="fas fa-fw fa-layer-group icon fg-darkGray"></span>G54</a></li>
|
||||
<li class="wcsItem wcsItemG55"><a href="#" onclick="sendGcode('G55')"><span class="fas fa-fw fa-layer-group icon fg-darkGray"></span>G55</a></li>
|
||||
<li class="wcsItem wcsItemG56"><a href="#" onclick="sendGcode('G56')"><span class="fas fa-fw fa-layer-group icon fg-darkGray"></span>G56</a></li>
|
||||
<li class="wcsItem wcsItemG57"><a href="#" onclick="sendGcode('G57')"><span class="fas fa-fw fa-layer-group icon fg-darkGray"></span>G57</a></li>
|
||||
<li class="wcsItem wcsItemG58"><a href="#" onclick="sendGcode('G58')"><span class="fas fa-fw fa-layer-group icon fg-darkGray"></span>G58</a></li>
|
||||
<li class="wcsItem wcsItemG59"><a href="#" onclick="sendGcode('G59')"><span class="fas fa-fw fa-layer-group icon fg-darkGray"></span>G59</a></li>
|
||||
<li class="checked wcsItem wcsItemG54" onclick="sendGcode('G54')"><a href="#"><span class="fas fa-fw fa-layer-group icon fg-darkGray"></span>G54</a></li>
|
||||
<li class="wcsItem wcsItemG55" onclick="sendGcode('G55')"><a href="#"><span class="fas fa-fw fa-layer-group icon fg-darkGray"></span>G55</a></li>
|
||||
<li class="wcsItem wcsItemG56" onclick="sendGcode('G56')"><a href="#"><span class="fas fa-fw fa-layer-group icon fg-darkGray"></span>G56</a></li>
|
||||
<li class="wcsItem wcsItemG57" onclick="sendGcode('G57')"><a href="#"><span class="fas fa-fw fa-layer-group icon fg-darkGray"></span>G57</a></li>
|
||||
<li class="wcsItem wcsItemG58" onclick="sendGcode('G58')"><a href="#"><span class="fas fa-fw fa-layer-group icon fg-darkGray"></span>G58</a></li>
|
||||
<li class="wcsItem wcsItemG59" onclick="sendGcode('G59')"><a href="#"><span class="fas fa-fw fa-layer-group icon fg-darkGray"></span>G59</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -20,6 +20,11 @@ function fixGrblHALSettings(j) {
|
|||
// Fix Enable Invert
|
||||
$("#val-" + j + "-input").val(0)
|
||||
}
|
||||
|
||||
if (j == "40") {
|
||||
// Fix Soft Limits for grblHAL https://openbuilds.com/threads/openbuilds-control-software.13121/page-81#post-137277
|
||||
$("#val-" + j + "-input").val(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -914,7 +919,13 @@ function selectMachine(type) {
|
|||
// as per https://openbuilds.com/threads/blackbox-x32.19810/page-3#post-131285
|
||||
$("#val-44-input").val(3)
|
||||
$("#val-45-input").val(0)
|
||||
$("#val-33-input").val(50)
|
||||
$("#val-33-input").val(50) // spindle pwm freq
|
||||
// $33 = 50Hz = 20ms (1/50s) repetion rate, $34-$36 are percentages of this. https://openbuilds.com/threads/blackbox-x32-servo-connection.20395/#post-134896
|
||||
// Set $33=50 (PWM frequency), $34=5, $35=5 and $36=10 to generate a “standard” PWM signal: 20ms repetition rate, 1 - 2ms pulse length range.
|
||||
// You may decrease $34 and $35 to output a shorter pulse than 1ms at min, and increase $36 to get a longer pulse than 2ms at max.
|
||||
$("#val-34-input").val(5) // off value
|
||||
$("#val-35-input").val(5) // min value
|
||||
$("#val-36-input").val(100) // max value
|
||||
|
||||
} else if (customFirmware == "acro" && laststatus.machine.firmware.platform == "grbl") {
|
||||
Metro.dialog.create({
|
||||
|
|
|
@ -639,55 +639,6 @@ var grblSettingsTemplate2 = {
|
|||
template: `<input id="val-70-input" data-role="input" data-clear-button="false" data-append="mask" type="text" >`,
|
||||
utils: ``
|
||||
},
|
||||
300: {
|
||||
key: `$300`,
|
||||
title: `Hostname`,
|
||||
description: ``,
|
||||
template: `<input id="val-300-input" data-role="input" data-clear-button="false" data-append="text" type="text" >`,
|
||||
utils: ``
|
||||
},
|
||||
302: {
|
||||
key: `$302`,
|
||||
title: `IP Address`,
|
||||
description: ``,
|
||||
template: `<input id="val-302-input" data-role="input" data-clear-button="false" data-append="ip" type="text" >`,
|
||||
utils: ``
|
||||
},
|
||||
303: {
|
||||
key: `$303`,
|
||||
title: `Gateway`,
|
||||
description: ``,
|
||||
template: `<input id="val-303-input" data-role="input" data-clear-button="false" data-append="gateway" type="text" >`,
|
||||
utils: ``
|
||||
},
|
||||
304: {
|
||||
key: `$304`,
|
||||
title: `Netmask`,
|
||||
description: ``,
|
||||
template: `<input id="val-304-input" data-role="input" data-clear-button="false" data-append="netmask" type="text" >`,
|
||||
utils: ``
|
||||
},
|
||||
305: {
|
||||
key: `$305`,
|
||||
title: `Telnet Port`,
|
||||
description: ``,
|
||||
template: `<input id="val-305-input" data-role="input" data-clear-button="false" data-append="tcp" type="text" >`,
|
||||
utils: ``
|
||||
},
|
||||
306: {
|
||||
key: `$306`,
|
||||
title: `HTTP Port`,
|
||||
description: ``,
|
||||
template: `<input id="val-306-input" data-role="input" data-clear-button="false" data-append="tcp" type="text" >`,
|
||||
utils: ``
|
||||
},
|
||||
307: {
|
||||
key: `$307`,
|
||||
title: `Websocket Port`,
|
||||
description: ``,
|
||||
template: `<input id="val-307-input" data-role="input" data-clear-button="false" data-append="tcp" type="text" >`,
|
||||
utils: ``
|
||||
},
|
||||
73: {
|
||||
key: `$73`,
|
||||
title: `Wifi Mode`,
|
||||
|
@ -890,5 +841,49 @@ var grblSettingsTemplate2 = {
|
|||
description: `Coolant on delay in s`,
|
||||
template: `<input id="val-393-input" data-role="input" data-clear-button="false" data-append="sec" type="number" >`,
|
||||
utils: ``
|
||||
},
|
||||
|
||||
|
||||
337: {
|
||||
key: `$337`,
|
||||
title: `WiFi Access Point (AP) BSSID`,
|
||||
description: `Optional WiFi Access Point BSSID (MAC) to connect to, colon delimited values. NOTE: A hard reset of the controller is required after changing this setting.`,
|
||||
template: `<input id="val-337-input" data-role="input" data-clear-button="false" data-append="MAC" type="text" >`,
|
||||
utils: ``
|
||||
},
|
||||
394: {
|
||||
key: `$394`,
|
||||
title: `Spindle on delay in s, range: 0.5 - 20`,
|
||||
description: `Delay to allow spindle to restart after feed hold is canceled.`,
|
||||
template: `<input id="val-394-input" data-role="input" data-clear-button="false" data-append="sec" type="number" >`,
|
||||
utils: ``
|
||||
},
|
||||
673: {
|
||||
key: `$673`,
|
||||
title: `Coolant on delay in s, range: 0.5 - 20`,
|
||||
description: `Delay to allow coolant to restart after feed hold is canceled.`,
|
||||
template: `<input id="val-673-input" data-role="input" data-clear-button="false" data-append="sec" type="number" >`,
|
||||
utils: ``
|
||||
},
|
||||
484: {
|
||||
key: `$484`,
|
||||
title: `Unlock required after E-Stop as boolean`,
|
||||
description: `If set unlock (by sending $X) is required after resetting a cleared E-Stop condition.`,
|
||||
template: `<input id="val-484-input" data-role="input" data-clear-button="false" data-append="bool" type="number" >`,
|
||||
utils: ``
|
||||
},
|
||||
486: {
|
||||
key: `$486`,
|
||||
title: `Unlock required after E-Stop as boolean`,
|
||||
description: `Lock coordinate systems against accidental changes. 0 - G59.1 (1) / 1 - G59.2 (2) / 2 - G59.3 (4)`,
|
||||
template: `<input id="val-486-input" data-role="input" data-clear-button="false" data-append="bitfield" type="number" >`,
|
||||
utils: ``
|
||||
},
|
||||
650: {
|
||||
key: `$650`,
|
||||
title: `File systems options as bitfield`,
|
||||
description: `Auto mount SD card on startup. 0 - Auto mount SD card (1) / 1 - Hide LittleFS (2)`,
|
||||
template: `<input id="val-650-input" data-role="input" data-clear-button="false" data-append="bitfield" type="number" >`,
|
||||
utils: ``
|
||||
}
|
||||
}
|
|
@ -507,42 +507,46 @@ function grblSaveSettings() {
|
|||
clearInterval(i);
|
||||
grblParams = {};
|
||||
toSaveCommands = [];
|
||||
setTimeout(function() {
|
||||
Metro.dialog.close('#savingGrblSettingsProgress')
|
||||
Metro.dialog.create({
|
||||
title: "Configuration Updated. Reset Grbl?",
|
||||
content: "<div>Some changes in the Grbl Configuration only take effect after a restart/reset of the controller. Would you like to Reset the controller now?</div>",
|
||||
clsDialog: 'dark',
|
||||
actions: [{
|
||||
caption: "Yes",
|
||||
cls: "js-dialog-close success",
|
||||
onclick: function() {
|
||||
setTimeout(function() {
|
||||
sendGcode(String.fromCharCode(0x18));
|
||||
setTimeout(function() {
|
||||
refreshGrblSettings()
|
||||
}, 1000); // refresh grbl settings
|
||||
}, 800); // reset
|
||||
}
|
||||
},
|
||||
{
|
||||
caption: "Later",
|
||||
cls: "js-dialog-close",
|
||||
onclick: function() {
|
||||
console.log("Do nothing")
|
||||
refreshGrblSettings();
|
||||
}
|
||||
}
|
||||
]
|
||||
});
|
||||
$('#grblSettingsBadge').hide();
|
||||
}, 1000); // Just to show settings was written
|
||||
askToResetOnGrblSettingsChange();
|
||||
}
|
||||
}, 400); // send another command every 200ms
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function askToResetOnGrblSettingsChange() {
|
||||
setTimeout(function() {
|
||||
Metro.dialog.close('#savingGrblSettingsProgress')
|
||||
Metro.dialog.create({
|
||||
title: "Configuration Updated. Reset Grbl?",
|
||||
content: "<div>Some changes in the Grbl Configuration only take effect after a restart/reset of the controller. Would you like to Reset the controller now?</div>",
|
||||
clsDialog: 'dark',
|
||||
actions: [{
|
||||
caption: "Yes",
|
||||
cls: "js-dialog-close success",
|
||||
onclick: function() {
|
||||
setTimeout(function() {
|
||||
sendGcode(String.fromCharCode(0x18));
|
||||
setTimeout(function() {
|
||||
refreshGrblSettings()
|
||||
}, 1000); // refresh grbl settings
|
||||
}, 800); // reset
|
||||
}
|
||||
},
|
||||
{
|
||||
caption: "Later",
|
||||
cls: "js-dialog-close",
|
||||
onclick: function() {
|
||||
console.log("Do nothing")
|
||||
refreshGrblSettings();
|
||||
}
|
||||
}
|
||||
]
|
||||
});
|
||||
$('#grblSettingsBadge').hide();
|
||||
}, 1000); // Just to show settings was written
|
||||
}
|
||||
|
||||
|
||||
// Old Gnea-Grbl way
|
||||
// function grblSaveSettings() {
|
||||
|
|
|
@ -462,7 +462,7 @@ function sortMacros(index, delta) {
|
|||
// var index = array.indexOf(element);
|
||||
var newIndex = index + delta;
|
||||
if (newIndex < 0 || newIndex == buttonsarray.length) return; //Already at the top or bottom.
|
||||
var indexes = [index, newIndex].sort(); //Sort the indixes
|
||||
var indexes = [index, newIndex].sort((a,b)=>a-b); //Sort the indixes
|
||||
buttonsarray.splice(indexes[0], 2, buttonsarray[indexes[1]], buttonsarray[indexes[0]]); //Replace from lowest index, two elements, reverting the order
|
||||
populateMacroButtons();
|
||||
};
|
||||
|
|
|
@ -259,6 +259,12 @@ function initSocket() {
|
|||
lineColor = "fg-dark"
|
||||
}
|
||||
|
||||
// look for grbl settings change and update grblparams variable
|
||||
// matches $number(s)=
|
||||
if (/^\$\d*=/.test(data.command) && data.response == 'ok') {
|
||||
grblSettings(data.command)
|
||||
}
|
||||
|
||||
// Parse Grbl Settings Feedback
|
||||
if (data.response.indexOf('$') === 0) {
|
||||
if (typeof grblSettings !== 'undefined') {
|
||||
|
@ -627,21 +633,21 @@ function initSocket() {
|
|||
|
||||
if (!disableDROupdates) {
|
||||
if (unit == "mm") {
|
||||
var xpos = status.machine.position.work.x.toFixed(2) + unit;
|
||||
var ypos = status.machine.position.work.y.toFixed(2) + unit;
|
||||
var zpos = status.machine.position.work.z.toFixed(2) + unit;
|
||||
var apos = status.machine.position.work.a.toFixed(2) + "deg";
|
||||
var xpos = status.machine.position.work.x.toFixed(3) + unit;
|
||||
var ypos = status.machine.position.work.y.toFixed(3) + unit;
|
||||
var zpos = status.machine.position.work.z.toFixed(3) + unit;
|
||||
var apos = status.machine.position.work.a.toFixed(3) + "deg";
|
||||
|
||||
$(" #xPos ").attr('title', 'X Machine: ' + (status.machine.position.work.x + status.machine.position.offset.x).toFixed(2) + unit + "/ X Work: " + xpos);
|
||||
$(" #yPos ").attr('title', 'Y Machine: ' + (status.machine.position.work.y + status.machine.position.offset.y).toFixed(2) + unit + "/ Y Work: " + ypos);
|
||||
$(" #zPos ").attr('title', 'Z Machine: ' + (status.machine.position.work.z + status.machine.position.offset.z).toFixed(2) + unit + "/ Z Work: " + zpos);
|
||||
$(" #aPos ").attr('title', 'A Machine: ' + (status.machine.position.work.a + status.machine.position.offset.a).toFixed(2) + "deg" + "/ A Work: " + apos);
|
||||
$(" #xPos ").attr('title', 'X Machine: ' + (status.machine.position.work.x + status.machine.position.offset.x).toFixed(3) + unit + "/ X Work: " + xpos);
|
||||
$(" #yPos ").attr('title', 'Y Machine: ' + (status.machine.position.work.y + status.machine.position.offset.y).toFixed(3) + unit + "/ Y Work: " + ypos);
|
||||
$(" #zPos ").attr('title', 'Z Machine: ' + (status.machine.position.work.z + status.machine.position.offset.z).toFixed(3) + unit + "/ Z Work: " + zpos);
|
||||
$(" #aPos ").attr('title', 'A Machine: ' + (status.machine.position.work.a + status.machine.position.offset.a).toFixed(3) + "deg" + "/ A Work: " + apos);
|
||||
|
||||
} else if (unit == "in") {
|
||||
var xpos = (status.machine.position.work.x / 25.4).toFixed(3) + unit;
|
||||
var ypos = (status.machine.position.work.y / 25.4).toFixed(3) + unit;
|
||||
var zpos = (status.machine.position.work.z / 25.4).toFixed(3) + unit;
|
||||
var apos = status.machine.position.work.a.toFixed(2) + "deg";
|
||||
var apos = status.machine.position.work.a.toFixed(3) + "deg";
|
||||
|
||||
$(" #xPos ").attr('title', 'X Machine: ' + ((status.machine.position.work.x / 25.4) + (status.machine.position.offset.x / 25.4)).toFixed(3) + unit + "/ X Work: " + xpos);
|
||||
$(" #yPos ").attr('title', 'Y Machine: ' + ((status.machine.position.work.y / 25.4) + (status.machine.position.offset.y / 25.4)).toFixed(3) + unit + "/ Y Work: " + ypos);
|
||||
|
@ -692,10 +698,10 @@ function initSocket() {
|
|||
}
|
||||
|
||||
if (unit == "mm") {
|
||||
$("#realFeed").html(status.machine.overrides.realFeed + "mm/min");
|
||||
$("#realFeed").html(status.machine.overrides.realFeed + " mm/min");
|
||||
//$("#realSpeed").html("S=" + status.machine.overrides.realSpindle);
|
||||
} else if (unit == "in") {
|
||||
$("#realFeed").html((status.machine.overrides.realFeed / 25.4).toFixed(0) + "in/min");
|
||||
$("#realFeed").html((status.machine.overrides.realFeed / 25.4).toFixed(0) + " in/min");
|
||||
//$("#realSpeed").html(("S=" + status.machine.overrides.realSpindle / 25.4).toFixed(0) + "in/min");
|
||||
}
|
||||
|
||||
|
@ -1076,6 +1082,7 @@ function selectPort(port) {
|
|||
baud: 115200,
|
||||
type: "usb"
|
||||
};
|
||||
localStorage.setItem('lastUsedPort', port);
|
||||
}
|
||||
if (port.length > 1) {
|
||||
socket.emit('connectTo', data);
|
||||
|
@ -1136,7 +1143,14 @@ function populatePortsMenu() {
|
|||
response += `<optgroup label="USB Ports">`
|
||||
for (i = 0; i < laststatus.comms.interfaces.ports.length; i++) {
|
||||
var port = friendlyPort(i)
|
||||
response += `<option value="` + laststatus.comms.interfaces.ports[i].path + `">` + port.note + " " + laststatus.comms.interfaces.ports[i].path.replace("/dev/tty.", "") + `</option>`;
|
||||
var lastUsedPort = localStorage.getItem('lastUsedPort');
|
||||
if (laststatus.comms.interfaces.ports[i].path == lastUsedPort) {
|
||||
response += `<option value="` + laststatus.comms.interfaces.ports[i].path + `" selected>` + laststatus.comms.interfaces.ports[i].path.replace("/dev/tty.", "") + " " + port.note + `</option>`;
|
||||
} else {
|
||||
response += `<option value="` + laststatus.comms.interfaces.ports[i].path + `">` + laststatus.comms.interfaces.ports[i].path.replace("/dev/tty.", "") + " " + port.note + `</option>`;
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
}
|
||||
response += `</optgroup>`
|
||||
|
@ -1242,8 +1256,8 @@ function friendlyPort(i) {
|
|||
}
|
||||
if (laststatus.comms.interfaces.ports[i].productId == 'EA60' && laststatus.comms.interfaces.ports[i].vendorId == '10C4') {
|
||||
// found CP2102
|
||||
img = 'nodemcu.png';
|
||||
note = 'NodeMCU';
|
||||
img = 'silabs.png';
|
||||
note = 'Silicon Labs USB to UART';
|
||||
}
|
||||
if (laststatus.comms.interfaces.ports[i].productId == '2303' && laststatus.comms.interfaces.ports[i].vendorId == '067B') {
|
||||
// found CP2102
|
||||
|
|
|
@ -362,7 +362,8 @@ GCodeParser = function(handlers, modecmdhandlers) {
|
|||
if (p2deltaX >= 0) anglepArcp2 += Math.PI;
|
||||
}
|
||||
|
||||
if (anglepArcp1 === anglepArcp2 && clwise === false)
|
||||
//if (anglepArcp1 === anglepArcp2 && clwise === false) // commented out 9 apr 2024 to see if it helps for #257
|
||||
if (anglepArcp1 === anglepArcp2)
|
||||
// Draw full circle if angles are both zero,
|
||||
// start & end points are same point... I think
|
||||
switch (args.plane) {
|
||||
|
@ -804,6 +805,7 @@ GCodeParser = function(handlers, modecmdhandlers) {
|
|||
lastLine = newLine;
|
||||
},
|
||||
G2: function(args, indx, gcp) {
|
||||
//console.log(args, indx, gcp)
|
||||
/* this is an arc move from lastLine's xy to the new xy. we'll
|
||||
show it as a light gray line, but we'll also sub-render the
|
||||
arc itself by figuring out the sub-segments . */
|
||||
|
@ -820,11 +822,16 @@ GCodeParser = function(handlers, modecmdhandlers) {
|
|||
arck: args.k !== undefined ? cofg.ijkabsolute(lastLine.z, args.k) : lastLine.z,
|
||||
arcr: args.r ? args.r : null,
|
||||
};
|
||||
|
||||
//console.log("G2 newLine:", newLine);
|
||||
//newLine.g2 = true;
|
||||
newLine.arc = true;
|
||||
newLine.clockwise = true;
|
||||
if (args.clockwise === false) newLine.clockwise = args.clockwise;
|
||||
if (args.clockwise === false) {
|
||||
newLine.clockwise = false
|
||||
} else {
|
||||
newLine.clockwise = true
|
||||
}
|
||||
cofg.addSegment(lastLine, newLine, args);
|
||||
//console.log("G2", lastLine, newLine, args, cofg.offsetG92);
|
||||
lastLine = newLine;
|
||||
|
@ -840,7 +847,7 @@ GCodeParser = function(handlers, modecmdhandlers) {
|
|||
|
||||
G73: function(args, indx, gcp) {
|
||||
// peck drilling. just treat as g1
|
||||
newLine.g73 = true;
|
||||
//newLine.g73 = true;
|
||||
console.log("G73 gcp:", gcp);
|
||||
gcp.handlers.G1(args);
|
||||
},
|
||||
|
|
|
@ -151,4 +151,6 @@ function closeServoCal() {
|
|||
localStorage.setItem("servo-calibration", JSON.stringify(servo));
|
||||
Metro.dialog.close($('#servocalstep1').parent().parent());
|
||||
console.log(servo)
|
||||
|
||||
askToResetOnGrblSettingsChange();
|
||||
}
|
|
@ -90,9 +90,7 @@ function applycalibrationx() {
|
|||
// $('#val-100-input').val(newsteps)
|
||||
// checkifchanged();
|
||||
sendGcode("$100=" + newsteps);
|
||||
setTimeout(function() {
|
||||
sendGcode(String.fromCharCode(0x18));
|
||||
}, 500);
|
||||
askToResetOnGrblSettingsChange()
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -88,9 +88,7 @@ function applycalibrationy() {
|
|||
// $('#val-101-input').val(newsteps)
|
||||
// checkifchanged();
|
||||
sendGcode("$101=" + newsteps);
|
||||
setTimeout(function() {
|
||||
sendGcode(String.fromCharCode(0x18));
|
||||
}, 500);
|
||||
askToResetOnGrblSettingsChange()
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -88,9 +88,7 @@ function applycalibrationz() {
|
|||
// $('#val-102-input').val(newsteps)
|
||||
// checkifchanged();
|
||||
sendGcode("$102=" + newsteps);
|
||||
setTimeout(function() {
|
||||
sendGcode(String.fromCharCode(0x18));
|
||||
}, 500);
|
||||
askToResetOnGrblSettingsChange()
|
||||
}
|
||||
|
||||
function zstepscalibrate() {
|
||||
|
|
|
@ -32,7 +32,7 @@ var grblcalctemplate = `<div>
|
|||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="pulleyrow">
|
||||
<tr id="pulleyrow" style="display: none;">
|
||||
<td>Pulley Type</td>
|
||||
<td>
|
||||
<select data-role="select" data-filter="false" id="pulleyselect" data-on-change="processpreset();">
|
||||
|
|
|
@ -9,6 +9,7 @@ function flashToolBoard(device) {
|
|||
$("#flash-tool-erase-row").hide();
|
||||
$("#flash-tool-interface-fw-row").hide();
|
||||
$("#flash-tool-custom-row").hide();
|
||||
$("#flash-tool-backup-row").show();
|
||||
$("#customFirmwareSet").html("Please select the Grbl Firmware hex file you want to flash");
|
||||
} else if (device == "blackboxx32") {
|
||||
$("#grblHalAxesCount").data("select").val("3axes-grblhal")
|
||||
|
@ -17,6 +18,7 @@ function flashToolBoard(device) {
|
|||
$("#flash-tool-erase-row").show();
|
||||
$("#flash-tool-interface-fw-row").hide();
|
||||
$("#flash-tool-custom-row").hide();
|
||||
$("#flash-tool-backup-row").show();
|
||||
$("#customFirmwareSet").html("Please select the GrblHAL Firmware binary file you want to flash");
|
||||
} else if (device == "interfacev1") {
|
||||
$("#interfaceFirmwareVer").data("select").val("online")
|
||||
|
@ -24,6 +26,7 @@ function flashToolBoard(device) {
|
|||
$("#flash-tool-grblhal-row").hide();
|
||||
$("#flash-tool-erase-row").hide();
|
||||
$("#flash-tool-interface-fw-row").show();
|
||||
$("#flash-tool-backup-row").hide();
|
||||
$("#customFirmwareSet").html("Please select the Interface Firmware binary file you want to flash");
|
||||
}
|
||||
|
||||
|
@ -85,11 +88,11 @@ function openFlashingTool() {
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row" id="flash-tool-erase-row" style="display: none;">
|
||||
<div class="row" id="flash-tool-erase-row">
|
||||
<div class="cell-md-3 mb-1">Erase Settings</div>
|
||||
<div class="cell-md-9 mb-1">
|
||||
<select data-prepend=" <i class='fas fa-eraser'></i>" data-role="select" data-filter="false" id="flashErase" data-editable="true">
|
||||
<option value="flashonly">Flash firmware, do not erase settings </option>
|
||||
<option value="flashonly">Flash firmware, do not erase settings (only applies to updates)</option>
|
||||
<option value="flasherase">Flash firmware and erase settings</option>
|
||||
</select>
|
||||
</div>
|
||||
|
@ -107,6 +110,14 @@ function openFlashingTool() {
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mt-2" id="flash-tool-backup-row">
|
||||
<div class="cell-md-3 mb-1">Warning</div>
|
||||
<div class="cell-md-9 mb-1">
|
||||
<p class="remark alert">
|
||||
Before upgrading a controller that has already been configured, make sure you have a Grbl Settings Backup before proceeding! If you don't have a backup you may stand to lose your configuration and have to redo it manually
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
`
|
||||
|
||||
|
|
|
@ -477,7 +477,7 @@ function runProbeNew() {
|
|||
template += `Offset: Center:\n`;
|
||||
template += `Offset x:` + probemode.stock.x / 2 + `\n`;
|
||||
template += `Offset y: ` + probemode.stock.y / 2 + `\n`;
|
||||
stockoffset.x = probemode.stock.y / 2
|
||||
stockoffset.x = probemode.stock.x / 2
|
||||
stockoffset.y = probemode.stock.y / 2
|
||||
}
|
||||
|
||||
|
|
|
@ -68,6 +68,16 @@ var surfacingWizardTemplate = `
|
|||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-2 pb-2 border-bottom bd-gray">
|
||||
<label class="cell-sm-6">Enable Framing</label>
|
||||
<div class="cell-sm-6">
|
||||
<select id="surfaceFraming" data-role="input" data-clear-button="false">
|
||||
<option value="enabled" selected>Enabled</option>
|
||||
<option value="disabled">Disabled</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="cell-sm-5">
|
||||
|
@ -134,6 +144,7 @@ function populateSurfaceToolForm() {
|
|||
surfaceDepth: 3,
|
||||
surfaceFinalDepth: 3,
|
||||
surfaceCoolant: "enabled",
|
||||
surfaceFraming: "enabled",
|
||||
surfaceRPM: 1000
|
||||
};
|
||||
}
|
||||
|
@ -152,6 +163,9 @@ function populateSurfaceToolForm() {
|
|||
if (data.surfaceCoolant != undefined) {
|
||||
$('#surfaceCoolant').val(data.surfaceCoolant)
|
||||
}
|
||||
if (data.surfaceFraming != undefined) {
|
||||
$('#surfaceFraming').val(data.surfaceFraming)
|
||||
}
|
||||
|
||||
$('#surfaceRPM').val(data.surfaceRPM)
|
||||
var $radios = $("input:radio[name=surfaceType]");
|
||||
|
@ -173,7 +187,8 @@ function createSurfaceGcode() {
|
|||
surfaceFinalDepth: parseFloat($("#surfaceFinalDepth").val()),
|
||||
surfaceType: $("input[name='surfaceType']:checked").val(),
|
||||
surfaceRPM: $('#surfaceRPM').val(),
|
||||
surfaceCoolant: $('#surfaceCoolant').val()
|
||||
surfaceCoolant: $('#surfaceCoolant').val(),
|
||||
surfaceFraming: $('#surfaceFraming').val()
|
||||
};
|
||||
console.log(data);
|
||||
|
||||
|
@ -298,17 +313,18 @@ G1 F` +
|
|||
gcode += `G0 Z10; Pass complete, lifting to Z Safe height\n`;
|
||||
|
||||
// Framing Pass
|
||||
gcode += `; Framing pass\n`;
|
||||
gcode += `G0 X` + startpointX.toFixed(4) + ` Y` + startpointY.toFixed(4) + ` Z10\n`; // position at start point
|
||||
gcode += `G1 Z` + zval + `\n`; // plunge
|
||||
gcode += `G1 X` + startpointX.toFixed(4) + ` Y` + endpointY.toFixed(4) + ` Z` + zval + `\n`; // Cut side
|
||||
gcode += `G0 Z10\n`;
|
||||
gcode += `G0 X` + endpointX.toFixed(4) + ` Y` + endpointY.toFixed(4) + `\n`; // position at start point
|
||||
gcode += `G1 Z` + zval + `\n`; // plunge
|
||||
gcode += `G1 X` + endpointX.toFixed(4) + ` Y` + startpointY.toFixed(4) + ` Z` + zval + `\n`; // Cut side
|
||||
gcode += `G0 Z10\n`;
|
||||
gcode += `G0 X0 Y0\n`;
|
||||
|
||||
if (data.surfaceFraming == "enabled") {
|
||||
gcode += `; Framing pass\n`;
|
||||
gcode += `G0 X` + startpointX.toFixed(4) + ` Y` + startpointY.toFixed(4) + ` Z10\n`; // position at start point
|
||||
gcode += `G1 Z` + zval + `\n`; // plunge
|
||||
gcode += `G1 X` + startpointX.toFixed(4) + ` Y` + endpointY.toFixed(4) + ` Z` + zval + `\n`; // Cut side
|
||||
gcode += `G0 Z10\n`;
|
||||
gcode += `G0 X` + endpointX.toFixed(4) + ` Y` + endpointY.toFixed(4) + `\n`; // position at start point
|
||||
gcode += `G1 Z` + zval + `\n`; // plunge
|
||||
gcode += `G1 X` + endpointX.toFixed(4) + ` Y` + startpointY.toFixed(4) + ` Z` + zval + `\n`; // Cut side
|
||||
gcode += `G0 Z10\n`;
|
||||
gcode += `G0 X0 Y0\n`;
|
||||
}
|
||||
|
||||
}
|
||||
// END MULTIPASS
|
||||
|
|
BIN
docs/control.PNG
BIN
docs/control.PNG
Plik binarny nie jest wyświetlany.
Przed Szerokość: | Wysokość: | Rozmiar: 122 KiB Po Szerokość: | Wysokość: | Rozmiar: 139 KiB |
|
@ -133,13 +133,6 @@ var grblSettingCodes = {
|
|||
370: "Invert I/O Port Inputs (mask)",
|
||||
384: "Disable G92 Persistence",
|
||||
70: "Network Services",
|
||||
300: "Hostname",
|
||||
302: "IP Address",
|
||||
303: "Gateway",
|
||||
304: "Netmask",
|
||||
305: "Telnet Port",
|
||||
306: "HTTP Port",
|
||||
307: "Websocket Port",
|
||||
73: "Wifi Mode", // Off/Station
|
||||
74: "SSID",
|
||||
75: "PSK",
|
||||
|
@ -159,7 +152,12 @@ var grblSettingCodes = {
|
|||
398: "Planner buffer blocks",
|
||||
481: "Autoreport interval in ms",
|
||||
376: "Rotational axes as bitfield",
|
||||
|
||||
337: "WiFi Access Point (AP) BSSID (MAC Address)",
|
||||
394: "Spindle on delay in s after Feedhold resume",
|
||||
484: "Unlock required after E-Stop as boolean",
|
||||
486: "Lock coordinate systems against accidental changes",
|
||||
650: "File systems options as bitfield", // Auto mount SD?
|
||||
673: "Coolant on delay in s after Feedhold resume"
|
||||
|
||||
};
|
||||
|
||||
|
|
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
92
index.js
92
index.js
|
@ -58,7 +58,7 @@ config.nextWebPort = function() {
|
|||
return config.webPort;
|
||||
}
|
||||
config.webPort = process.env.WEB_PORT || config.nextWebPort();
|
||||
config.posDecimals = process.env.DRO_DECIMALS || 2;
|
||||
config.posDecimals = process.env.DRO_DECIMALS || 3;
|
||||
config.grblWaitTime = 0.5;
|
||||
config.firmwareWaitTime = 4;
|
||||
|
||||
|
@ -168,7 +168,9 @@ const {
|
|||
} = require('serialport')
|
||||
const {
|
||||
ReadlineParser
|
||||
} = require('@serialport/parser-readline');
|
||||
} = require('@serialport/parser-readline')
|
||||
|
||||
|
||||
|
||||
// telnet
|
||||
const net = require('net');
|
||||
|
@ -829,13 +831,6 @@ io.on("connection", function(socket) {
|
|||
shell.openExternal('https://openbuilds.com/threads/openbuilds-control-software.13121/')
|
||||
});
|
||||
|
||||
socket.on("adX32", function(data) {
|
||||
const {
|
||||
shell
|
||||
} = require('electron')
|
||||
shell.openExternal('https://openbuildspartstore.com/BlackBox-Motion-Control-System-X32')
|
||||
});
|
||||
|
||||
socket.on("gpuinfo", function(data) {
|
||||
// GPU
|
||||
var gpuInfoWindow = new BrowserWindow({
|
||||
|
@ -934,7 +929,7 @@ io.on("connection", function(socket) {
|
|||
console.log(firmwarePath)
|
||||
console.log("-------------------------------------------")
|
||||
|
||||
const Avrgirl = require('avrgirl-arduino');
|
||||
//const Avrgirl = require('avrgirl-arduino');
|
||||
|
||||
if (status.comms.connectionStatus > 0) {
|
||||
debug_log('WARN: Closing Port ' + port);
|
||||
|
@ -952,33 +947,33 @@ io.on("connection", function(socket) {
|
|||
io.sockets.emit("progStatus", data);
|
||||
}
|
||||
|
||||
setTimeout(function() {
|
||||
var avrgirl = new Avrgirl({
|
||||
board: board,
|
||||
port: port,
|
||||
debug: function(debugString) {
|
||||
var port = this.connection.options.port;
|
||||
flashGrblCallback(debugString, port)
|
||||
}
|
||||
});
|
||||
|
||||
debug_log(JSON.stringify(avrgirl));
|
||||
|
||||
status.comms.connectionStatus = 6;
|
||||
avrgirl.flash(firmwarePath, function(error) {
|
||||
if (error) {
|
||||
console.error(error);
|
||||
io.sockets.emit("progStatus", 'Flashing FAILED!');
|
||||
status.comms.connectionStatus = 0;
|
||||
} else {
|
||||
console.info('done.');
|
||||
io.sockets.emit("progStatus", 'Programmed Succesfully');
|
||||
io.sockets.emit("progStatus", 'Please Reconnect');
|
||||
status.comms.connectionStatus = 0;
|
||||
}
|
||||
status.comms.connectionStatus = 0;
|
||||
});
|
||||
}, 1000)
|
||||
// setTimeout(function() {
|
||||
// var avrgirl = new Avrgirl({
|
||||
// board: board,
|
||||
// port: port,
|
||||
// debug: function(debugString) {
|
||||
// var port = this.connection.options.port;
|
||||
// flashGrblCallback(debugString, port)
|
||||
// }
|
||||
// });
|
||||
//
|
||||
// debug_log(JSON.stringify(avrgirl));
|
||||
//
|
||||
// status.comms.connectionStatus = 6;
|
||||
// avrgirl.flash(firmwarePath, function(error) {
|
||||
// if (error) {
|
||||
// console.error(error);
|
||||
// io.sockets.emit("progStatus", 'Flashing FAILED!');
|
||||
// status.comms.connectionStatus = 0;
|
||||
// } else {
|
||||
// console.info('done.');
|
||||
// io.sockets.emit("progStatus", 'Programmed Succesfully');
|
||||
// io.sockets.emit("progStatus", 'Please Reconnect');
|
||||
// status.comms.connectionStatus = 0;
|
||||
// }
|
||||
// status.comms.connectionStatus = 0;
|
||||
// });
|
||||
// }, 1000)
|
||||
})
|
||||
|
||||
socket.on("flashGrblHal", function(data) {
|
||||
|
@ -1108,9 +1103,10 @@ io.on("connection", function(socket) {
|
|||
port.isOpen = true;
|
||||
}
|
||||
|
||||
parser = port.pipe(new ReadlineParser({
|
||||
const parser = port.pipe(new ReadlineParser({
|
||||
delimiter: '\r\n'
|
||||
}));
|
||||
}))
|
||||
|
||||
|
||||
// port.on("data", function(data) {
|
||||
// console.log(data)
|
||||
|
@ -1161,24 +1157,18 @@ io.on("connection", function(socket) {
|
|||
debug_log("PORT INFO: Connected to " + port.path + " at " + port.baudRate);
|
||||
var output = {
|
||||
'command': 'connect',
|
||||
'response': "PORT INFO: Port is now open: " + port.path + " - Attempting to detect Firmware",
|
||||
'response': "PORT INFO: Port is now open: " + port.path + " - Attempting to detect Controller...",
|
||||
'type': 'info'
|
||||
}
|
||||
io.sockets.emit('data', output);
|
||||
|
||||
status.comms.connectionStatus = 1;
|
||||
|
||||
var output = {
|
||||
'command': 'connect',
|
||||
'response': "Checking for firmware on " + port.path,
|
||||
'type': 'info'
|
||||
}
|
||||
io.sockets.emit('data', output);
|
||||
addQRealtime("\n"); // this causes smoothie and grblHAL to send the welcome string
|
||||
|
||||
var output = {
|
||||
'command': 'connect',
|
||||
'response': "Detecting Firmware: Method 1 (Autoreset)",
|
||||
'response': "Attempting to detect Controller (1): (Autoreset)",
|
||||
'type': 'info'
|
||||
}
|
||||
io.sockets.emit('data', output);
|
||||
|
@ -1188,7 +1178,7 @@ io.on("connection", function(socket) {
|
|||
debug_log("Didnt detect firmware after AutoReset. Lets see if we have Grbl instance with a board that doesnt have AutoReset");
|
||||
var output = {
|
||||
'command': 'connect',
|
||||
'response': "Detecting Firmware: Method 2 (Ctrl+X)",
|
||||
'response': "Attempting to detect Controller (2): (Ctrl+X)",
|
||||
'type': 'info'
|
||||
}
|
||||
io.sockets.emit('data', output);
|
||||
|
@ -1202,7 +1192,7 @@ io.on("connection", function(socket) {
|
|||
debug_log("No firmware yet, probably not Grbl then. lets see if we have Smoothie?");
|
||||
var output = {
|
||||
'command': 'connect',
|
||||
'response': "Detecting Firmware: Method 3 (others that are not supported)",
|
||||
'response': "Attempting to detect Controller (3): (others)",
|
||||
'type': 'info'
|
||||
}
|
||||
io.sockets.emit('data', output);
|
||||
|
@ -1253,8 +1243,7 @@ io.on("connection", function(socket) {
|
|||
} else {
|
||||
var output = {
|
||||
'command': 'connect',
|
||||
'response': `ERROR!: No supported firmware detected - See https://docs.openbuilds.com/doku.php?id=docs:blackbox:faq-usb-connection-failed
|
||||
for more details. Closing port ` + port.path,
|
||||
'response': `ERROR!: No Response from Controller - See https://docs.openbuilds.com/doku.php?id=docs:blackbox:faq-usb-connection-failed for troubleshooting information. Closing port ` + port.path,
|
||||
'type': 'error'
|
||||
}
|
||||
}
|
||||
|
@ -1551,6 +1540,7 @@ io.on("connection", function(socket) {
|
|||
|
||||
// debug_log(data)
|
||||
} else if (data.indexOf("ok") === 0) { // Got an OK so we are clear to send
|
||||
io.sockets.emit('ok', command); // added per #325
|
||||
// debug_log("OK FOUND")
|
||||
if (status.machine.firmware.type === "grbl") {
|
||||
// debug_log('got OK from ' + command)
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
// From https://github.com/simonw/til/blob/main/electron/sign-notarize-electron-macos.md
|
||||
// Based on https://kilianvalkhof.com/2019/electron/notarizing-your-electron-application/
|
||||
|
||||
const {
|
||||
notarize
|
||||
} = require("@electron/notarize");
|
||||
|
||||
exports.default = async function notarizing(context) {
|
||||
const {
|
||||
electronPlatformName,
|
||||
appOutDir
|
||||
} = context;
|
||||
if (electronPlatformName !== "darwin") return;
|
||||
|
||||
const appName = context.packager.appInfo.productFilename;
|
||||
|
||||
try {
|
||||
await notarize({
|
||||
appBundleId: "app.openbuilds.control",
|
||||
appPath: `${appOutDir}/${appName}.app`,
|
||||
appleId: process.env.APPLE_ID,
|
||||
appleIdPassword: process.env.APPLE_APP_SPECIFIC_PASSWORD,
|
||||
teamId: process.env.APPLE_TEAM_ID,
|
||||
});
|
||||
|
||||
console.log("Notarization using OpenBuilds CONTROL's custom notarize.js script: successful");
|
||||
} catch (error) {
|
||||
console.error("Notarization using OpenBuilds CONTROL's custom notarize.js script: failed:", error);
|
||||
}
|
||||
};
|
16
package.json
16
package.json
|
@ -1,18 +1,17 @@
|
|||
{
|
||||
"name": "OpenBuildsCONTROL",
|
||||
"version": "1.0.370",
|
||||
"version": "1.0.371",
|
||||
"license": "AGPL-3.0",
|
||||
"description": "OpenBuildsCONTROL CNC Machine Host Software",
|
||||
"author": "github.com/openbuilds <support@openbuilds.com>",
|
||||
"devDependencies": {
|
||||
"electron": "^23.1.1",
|
||||
"electron-builder": "^24.0.0",
|
||||
"electron-builder-notarize": "^1.5.1",
|
||||
"electron-builder": "^24.9.1",
|
||||
"electron-builder-notarize": "latest",
|
||||
"electron-rebuild": "^3.2.9",
|
||||
"ncp": "^2.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"avrgirl-arduino": "^5.0.1",
|
||||
"detect-rpi": "^1.4.0",
|
||||
"electron-updater": "^5.2.1",
|
||||
"evilscan": "^1.9.1",
|
||||
|
@ -27,7 +26,7 @@
|
|||
"ncp": "^2.0.0",
|
||||
"node-abi": "^3.33.0",
|
||||
"node-gyp": "^9.3.1",
|
||||
"serialport": "^10.4.0",
|
||||
"serialport": "^12.0.0",
|
||||
"socket.io": "^4.6.1",
|
||||
"xmodem.js": "^0.1.0"
|
||||
},
|
||||
|
@ -50,12 +49,13 @@
|
|||
"vPrefixedTagName": true
|
||||
}
|
||||
],
|
||||
"afterSign": "electron-builder-notarize",
|
||||
"afterSign": "./notarize.js",
|
||||
"mac": {
|
||||
"icon": "build/icon.icns",
|
||||
"category": "public.app-category.graphics-design",
|
||||
"entitlements": "build/entitlements.mac.plist",
|
||||
"entitlementsInherit": "build/entitlements.mac.plist"
|
||||
"entitlementsInherit": "build/entitlements.mac.plist",
|
||||
"notarize": false
|
||||
},
|
||||
"icon": "build/icon.icns",
|
||||
"appId": "openbuilds.control",
|
||||
|
@ -125,6 +125,8 @@
|
|||
"*.bin"
|
||||
],
|
||||
"win": {
|
||||
"sign": "./signWin.js",
|
||||
"signingHashAlgorithms": ["sha256"],
|
||||
"target": [
|
||||
{
|
||||
"target": "nsis",
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
const {
|
||||
execSync
|
||||
} = require('node:child_process')
|
||||
|
||||
exports.default = async configuration => {
|
||||
if (!process.env.SM_API_KEY) {
|
||||
console.error("Signing using OpenBuilds CONTROL's custom signWin.js script: failed: SM_API_KEY ENV VAR NOT FOUND");
|
||||
return
|
||||
}
|
||||
|
||||
if (!process.env.SM_CODE_SIGNING_CERT_SHA1_HASH) {
|
||||
console.error("Signing using OpenBuilds CONTROL's custom signWin.js script: failed: FINGERPRINT ENV VAR NOT FOUND");
|
||||
return
|
||||
}
|
||||
|
||||
if (!configuration.path) {
|
||||
throw new Error(`Signing using OpenBuilds CONTROL's custom signWin.js script: failed: TARGET PATH NOT FOUND`)
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
execSync(`smctl sign --fingerprint="${process.env.SM_CODE_SIGNING_CERT_SHA1_HASH}" --input "${String(configuration.path)}"`, {
|
||||
stdio: 'inherit',
|
||||
})
|
||||
console.log("Signing using OpenBuilds CONTROL's custom signWin.js script: successful");
|
||||
} catch (error) {
|
||||
console.error("Signing using OpenBuilds CONTROL's custom signWin.js script: failed:", error);
|
||||
}
|
||||
|
||||
|
||||
}
|
Przed Szerokość: | Wysokość: | Rozmiar: 144 KiB Po Szerokość: | Wysokość: | Rozmiar: 144 KiB |
Ładowanie…
Reference in New Issue