PageSourceSearch

https://ikalogic.com/assets/js/baf3a2c1.101408c5.js

js ikalogic.com collected 2026-10-02 10:31:20 UTC 106,318 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkdocutest=globalThis.webpackChunkdocutest||[]).push([[3448],{25979(e,t,a){a.d(t,{Ay:()=>P,RM:()=>M});var i=a(74848),n=a(28453),s=a(96540),o=a(22862),r=a(95924),c=a(37875),l=a(66188),d=a(86405);const{IW:h}=o,u={windows_setup:{label:"Windows",hint:"x64 installer",icon:c.tQI},windows_portable:{label:"Windows",hint:"portable x64 archive",icon:c.tQI},linux_tarball:{label:"Linux",hint:"x86_64 tarball",icon:c.M_V},linux_deb:{label:"Linux",hint:".deb package",icon:c.M_V},linux_rpm:{label:"Linux",hint:".rpm package",icon:c.M_V},linux_appimage:{label:"Linux",hint:"AppImage",icon:c.M_V},macos_dmg:{label:"macOS",hint:"universal disk image",icon:c.qKs}},f={windows_portable:{of:"windows_setup",button:"Portable version",hint:"portable archive"}},p=e=>f[e]?.hint??u[e]?.hint??e,m={textAlign:"center",marginTop:"0.5rem",fontSize:"0.7rem",color:"#888"};function x(){const e=h.downloads??{},t=Object.entries(e).filter(([t])=>!f[t]||!e[f[t].of]);return(0,i.jsxs)("div",{className:"container margin-vert--lg",children:[(0,i.jsx)("div",{className:"row",children:t.map(([t,a])=>{const n=u[t],s=[[t,a],...Object.entries(f).filter(([a,i])=>i.of===t&&e[a]).map(([t])=>[t,e[t]])];return(0,i.jsx)("div",{className:"col col--4 margin-bottom--lg",children:(0,i.jsxs)("div",{className:"card",children:[(0,i.jsx)("div",{className:"card__image",style:{textAlign:"center",paddingTop:"1rem"},children:(0,i.jsx)("div",{style:{fontSize:"4rem"},children:(0,i.jsx)(r.gc,{icon:n?.icon??l.cbP})})}),(0,i.jsxs)("div",{className:"card__body",style:{textAlign:"center"},children:[(0,i.jsx)("h4",{children:n?.label??t}),(0,i.jsxs)("small",{children:[s.map(([e])=>p(e)).join(" \xb7 "),(0,i.jsx)("br",{}),"v",h.version," - ",h.date]})]}),(0,i.jsxs)("div",{className:"card__footer",children:[s.map(([e,t],a)=>(0,i.jsx)("a",{href:t.alias_url??t.url,className:"button button--outline button--primary button--block",style:a>0?{marginTop:"0.5rem"}:void 0,children:f[e]?.button??"Download"},e)),s.map(([e,t])=>t.sha256&&(0,i.jsxs)("div",{style:m,children:[s.length>1&&(0,i.jsx)("span",{style:{marginRight:"0.4rem"},children:p(e)}),(0,i.jsx)(d.A,{value:t.sha256,truncate:16})]},e))]})]})},t)})}),(0,i.jsxs)("div",{className:"row",children:[(0,i.jsx)("div",{className:"col col--6 margin-bottom--md",children:(0,i.jsxs)("div",{className:"card shadow--nice padding--md",children:[(0,i.jsxs)("h4",{children:[(0,i.jsx)(r.gc,{icon:c.tQI,style:{marginRight:"0.5rem"}}),"Windows USB drivers"]}),(0,i.jsx)("p",{style:{marginBottom:"0.75rem"},children:"Install these once, before connecting your device. This is the only Ikalogic installer that needs administrator rights \u2014 ScanaStudio itself installs per-user and never prompts for UAC."}),(0,i.jsx)("a",{href:"https://cdn.ikalogic.com/dist/scanastudio-6/ikalogic-drivers-setup.exe",className:"button button--outline button--secondary",children:"Download drivers"})]})}),(0,i.jsx)("div",{className:"col col--6 margin-bottom--md",children:(0,i.jsxs)("div",{className:"card shadow--nice padding--md",children:[(0,i.jsxs)("h4",{children:[(0,i.jsx)(r.gc,{icon:c.qKs,style:{marginRight:"0.5rem"}}),"First launch on macOS"]}),(0,i.jsxs)("p",{children:["The disk image is signed but not yet notarized by Apple. The first time you open ScanaStudio, right-click the application and choose ",(0,i.jsx)("b",{children:"Open"}),", then confirm. Double-clicking it instead makes Gatekeeper refuse to run it \u2014 the download is not broken."]})]})})]})]})}const{D8:g}=o,b=["feature","fix","improvement","breaking"];function w(e){const t=[];for(const i of(e.notes??"").split("\n")){const e=i.trim();0!==e.length&&(e.startsWith("- ")||0===t.length?t.push(e.replace(/^-\s*/,"")):t[t.length-1]+=" "+e)}const a=new RegExp(`^(${b.join("|")}):\\s*`,"i");return t.map(e=>e.replace(a,""))}function S(e){return e.split("`").map((e,t)=>t%2==1?(0,i.jsx)("code",{children:e},t):(0,i.jsx)(s.Fragment,{children:e},t))}function y(e){const t=(e.changes??[]).map(e=>e.tag).filter(Boolean);return Array.from(new Set(t))}function v({showPagination:e=!0,itemsPerPage:t=10}
1){const[a,n]=(0,s.useState)(0),o=Math.ceil(g.length/t),r=g.slice().reverse().slice(a*t,(a+1)*t);return(0,i.jsxs)("div",{className:"container margin-vert--lg",children:[(0,i.jsxs)("div",{className:"row margin-bottom--md",style:{alignItems:"center"},children:[(0,i.jsx)("div",{className:"col col--3",children:(0,i.jsx)("h2",{children:"Release Notes"})}),e&&o>1&&(0,i.jsx)("div",{className:"col col--9",children:(0,i.jsx)("div",{className:"pagination-nav",style:{display:"flex",justifyContent:"flex-end",flexWrap:"nowrap",overflowX:"auto",gap:"0.25rem"},children:Array.from({length:o}).map((e,t)=>(0,i.jsx)("button",{className:"button button--outline button--"+(a===t?"primary":"secondary"),style:{whiteSpace:"nowrap"},onClick:()=>n(t),children:t+1},t))})})]}),(0,i.jsx)("div",{className:"row",children:r.map(e=>(0,i.jsx)("div",{className:"col col--12 margin-bottom--lg",children:(0,i.jsx)("div",{className:"card shadow--nice",children:(0,i.jsxs)("div",{className:"card__body",children:[(0,i.jsxs)("h3",{className:"margin-bottom--xs",children:[e.version," ",(0,i.jsxs)("span",{style:{fontSize:"0.9rem",color:"#888"},children:["(",e.date,")"]})]}),(0,i.jsx)("div",{className:"margin-bottom--sm",children:y(e).map(e=>(0,i.jsx)("span",{style:{display:"inline-block",backgroundColor:k(e),color:"#fff",borderRadius:"5px",padding:"0.2rem 0.6rem",marginRight:"0.3rem",fontSize:"0.8rem",fontWeight:"bold"},children:e},e))}),(0,i.jsx)("ul",{className:"margin-left--sm",children:w(e).map((e,t)=>(0,i.jsx)("li",{children:S(e)},t))})]})})},e.version))})]})}function k(e){switch(e){case"fix":return"#c89c00";case"breaking":return"#c0392b";case"feature":return"#218c58";case"improvement":return"#216ba5";default:return"#555"}}var _=a(51020),j=a(12412);const M=[];function F(e){const t={a:"a",admonition:"admonition",h1:"h1",header:"header",p:"p",...(0,n.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"download-scanastudio",children:"Download ScanaStudio"})}),"\n","\n",(0,i.jsx)(x,{}),"\n",(0,i.jsx)(t.admonition,{title:"ScanaStudio license agreement",type:"note",children:(0,i.jsxs)(t.p,{children:["By downloading and using ScanaStudio, you agree to the ",(0,i.jsx)(t.a,{href:"/software-license",children:"Ikalogic Software License Agreement"}),"."]})}),"\n",(0,i.jsx)(t.admonition,{title:"Looking for ScanaStudio V5?",type:"info",children:(0,i.jsxs)(t.p,{children:["The releases above are ScanaStudio V6. For older V5 releases and their release notes,\n",(0,i.jsx)(t.a,{href:"/scanastudio_software_v5",children:"click here"}),"."]})}),"\n",(0,i.jsx)("div",{className:"margin-top--lg",children:(0,i.jsx)("h2",{children:"About ScanaStudio"})}),"\n",(0,i.jsx)(t.p,{children:"ScanaStudio is the software used to interface with all Ikalogic logic analyzers and pattern generators. At the core of its design philosophy is the belief that powerful test and measurement tools should remain intuitive and accessible. Since all our devices are computer-connected - with no built-in displays or controls - ScanaStudio serves as the central platform where engineers interact with their instruments. Whether you're capturing signals, decoding protocols, triggering on complex events, or generating test patterns, ScanaStudio offers a clean and efficient workflow. We\u2019ve invested significant effort into creating a user interface that feels modern and frustration-free - allowing engineers to focus on debugging and validating designs, not wrestling with complicated software."}),"\n",(0,i.jsx)(j.A,{}),"\n",(0,i.jsx)("div",{className:"margin-top--xl"}),"\n",(0,i.jsxs)("div",{class:"container",children:[(0,i.jsx)("h2",{children:"Developer SDK"}),(0,i.jsxs)(t.p,{children:["Drive your instruments from your own code. The Python, NodeJS and Rust clients are installed\nfrom their package registries; the C library is downloaded here. See the\n",(0,i.jsx)(t.a,{href:"/kb/scanastudio-sdk/install",children:"ScanaStudio SDK documentation"})," to get started."]}),(0,i.jsx)(_.A,{})]}),"\n",(0,i.jsx)("div",{className:"margin-top--xl"}),"\n",(0,i.jsx)(v,{})]})}function P(e={}){const{wrapper:t}={...(0,n.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(F,{...e})}):F(e)}},3638(e,t,a){a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>u,frontMatter:()=>r,metadata:()=>i,toc:()=>d});const i=JSON.parse('{"id":"logic-analyzers-generators/sp1000g/software","title":"Download software","description":"","source":"@site/docs/logic-analyzers-generators/sp1000g/30_software.md","sourceDirName":"logic-analyzers-generators/sp1000g","slug":"/logic-analyzers-generators/sp1000g/scanastudio","permalink":"/logic-analyzers-generators/sp1000g/scanastudio","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":30,"frontMatter":{"title":"Download software","pagination_next":null,"pagination_prev":null,"hide_table_of_contents":true,"hide_title":true,"slug":"scanastudio"},"sidebar":"lagen"}');var n=a(74848),s=a(28453),o=a(25979);const r={title:"Download software",pagination_next:null,pagination_prev:null,hide_table_of_contents:!0,hide_title:!0,slug:"scanastudio"},c=void 0,l={},d=[...o.RM];function h(e){return(0,n.jsx)(o.Ay,{})}function u(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(h,{...e})}):h()}},12412(e,t,a){a.d(t,{A:()=>A});var i=a(96540),n=a(99482),s=a(94387),o=a(90372),r=a(602),c=a(74848);const l="Data",d=Math.ceil(s.Yc.length/16),h={y:84,h:122},u={y:214,h:26},f={y:248,h:176},p={y:432,h:154},m={y:594,h:92},x=e=>f.y+36+42*e,g={x:116,y:f.y+164},b=e=>p.y+43+19*e,w=e=>m.y+43+20*e,S={library:s.oB,channels:s.l_,forms:{i2c:{name:"I2C",fields:[{label:"SDA Channel",pick:6},{label:"SCL Channel",pick:5}],tab:{label:"Advanced options",open:!1}}
1,"1wire":{name:"1-Wire",fields:[{label:"Channel to decode",pick:4},{label:"1-Wire Speed",value:"Regular speed"},{label:"Display format",value:"HEX"}]},pwm:{name:"PWM",fields:[{label:"PWM channel",pick:3}],tab:{label:"Virtual Analog Channels",open:!0,check:"Display a graphic for duty cycle"}}}};(0,r._e)(S,"demo");const{primary:y,field:v,listRow:k,search:_,option:j}=(0,r.mf)(S),M=704/(s.l_.length+s.qV.size),F={x:292,y:68+s.l_.length*M+s.qV.size*M/2},P={x:292,y:68+3*M+s.qV.size*M/2},z={start:(0,o.Gy)("capture",0),addI2c:(0,o.Gy)("add-i2c",.4),searchField:(0,o.Gy)("add-i2c",.9),pickI2c:(0,o.Gy)("add-i2c",2.35),next:(0,o.Gy)("add-i2c",2.95),i2cSda:(0,o.Gy)("add-i2c",3.55),i2cSdaPick:(0,o.Gy)("add-i2c",4.25),i2cScl:(0,o.Gy)("add-i2c",4.85),i2cSclPick:(0,o.Gy)("add-i2c",5.5),confirmI2c:(0,o.Gy)("add-i2c",6.15),addOneWire:(0,o.Gy)("add-1wire",.4),pickOneWire:(0,o.Gy)("add-1wire",1.05),nextOneWire:(0,o.Gy)("add-1wire",1.65),oneWireCh:(0,o.Gy)("add-1wire",2.2),oneWireChPick:(0,o.Gy)("add-1wire",2.85),confirmOneWire:(0,o.Gy)("add-1wire",3.5),addPwm:(0,o.Gy)("add-pwm",.4),pickPwm:(0,o.Gy)("add-pwm",1.05),nextPwm:(0,o.Gy)("add-pwm",1.6),pwmCh:(0,o.Gy)("add-pwm",2.15),pwmChPick:(0,o.Gy)("add-pwm",2.75),confirmPwm:(0,o.Gy)("add-pwm",3.35),vacGrab:(0,o.Gy)("drag-vac",.35),vacDrop:(0,o.Gy)("drag-vac",1.85),hexView:(0,o.Gy)("hex",.45),packetView:(0,o.Gy)("packet",.45),filterField:(0,o.Gy)("filter",.5),addMarker1:(0,o.Gy)("markers",.7),dropM1:(0,o.Gy)("markers",1.4),addMarker2:(0,o.Gy)("markers",1.95),dropM2:(0,o.Gy)("markers",2.7)},L=[{at:0,x:1010,y:880},{at:z.start-.12,...r.wl,travel:.9},{at:z.start,...r.wl,click:!0,travel:.12},{at:(0,o.Gy)("capture",2.1),x:780,y:300,travel:1},{at:(0,o.Gy)("navigate",.4),x:840,y:380,travel:.7},{at:z.addI2c,...g,click:!0,travel:.7},{at:z.searchField,..._(),click:!0,travel:.4},{at:z.pickI2c,...k(0),click:!0,travel:.45},{at:z.next,...y("list"),click:!0,travel:.45},{at:z.i2cSda,...v("i2c",0),click:!0,travel:.45},{at:z.i2cSdaPick,...j("i2c",0,5),click:!0,travel:.5},{at:z.i2cScl,...v("i2c",1),click:!0,travel:.45},{at:z.i2cSclPick,...j("i2c",1,4),click:!0,travel:.5},{at:z.confirmI2c,...y("i2c"),click:!0,travel:.45},{at:(0,o.Gy)("look-i2c",.15),x:770,y:700,travel:.8},{at:z.addOneWire,...g,click:!0,travel:.7},{at:z.pickOneWire,...k(0),click:!0,travel:.5},{at:z.nextOneWire,...y("list"),click:!0,travel:.45},{at:z.oneWireCh,...v("1wire",0),click:!0,travel:.45},{at:z.oneWireChPick,...j("1wire",0,3),click:!0,travel:.5},{at:z.confirmOneWire,...y("1wire"),click:!0,travel:.45},{at:(0,o.Gy)("look-1wire",.15),x:520,y:440,travel:.8},{at:z.addPwm,...g,click:!0,travel:.7},{at:z.pickPwm,...k(5),click:!0,travel:.5},{at:z.nextPwm,...y("list"),click:!0,travel:.45},{at:z.pwmCh,...v("pwm",0),click:!0,travel:.45},{at:z.pwmChPick,...j("pwm",0,2),click:!0,travel:.5},{at:z.confirmPwm,...y("pwm"),click:!0,travel:.45},{at:(0,o.Gy)("look-pwm",.2),...F,travel:.8},{at:z.vacGrab,...F,click:!0,travel:.35},{at:z.vacDrop,...P,travel:1.5},{at:z.vacDrop+.05,...P,click:!0,travel:.05},{at:z.hexView,x:116,y:b(1),click:!0,travel:.7},{at:(0,o.Gy)("hex",1.9),x:600,y:610,travel:.7},{at:z.packetView,x:116,y:b(0),click:!0,travel:.7},{at:(0,o.Gy)("packet",1.6),x:640,y:620,travel:.7},{at:z.filterField,...r.uK,click:!0,travel:.6},{at:(0,o.Gy)("look-filter",.3),x:640,y:600,travel:.6},{at:z.addMarker1,x:116,y:w(0),click:!0,travel:.7},{at:z.dropM1,xUs:900,y:470,click:!0,travel:.65},{at:z.addMarker2,x:116,y:w(0),click:!0,travel:.5},{at:z.dropM2,xUs:1800,y:470,click:!0,travel:.7},{at:(0,o.Gy)("look-measure",.2),x:700,y:420,travel:.8},{at:(0,o.Gy)("zoom-out",.6),x:760,y:300,travel:.9}];function A({width:e="100%",captions:t=!0,startAt:a,className:y}){const{t:v,host:k}=(0,r.xr)(o.hN,o.t8,a),_=i.useId().replace(/[^a-zA-Z0-9_-]/g,""),j=(0,i.useMemo)(()=>function(e){const t=(0,o.oW)(e);let a=s.Dy;if((0,o.B6)(e,"navigate")){const t=(0,o.am)((0,o.at)(e,"navigate",.3,1.6));a=[(0,o.Cc)(s.Dy[0],s.A2[0],t),(0,o.Cc)(s.Dy[1],s.A2[1],t)]}if((0,o.B6)(e,"add-1wire")){const t=(0,o.am)((0,o.at)(e,"add-1wire",0,1.2));a=[(0,o.Cc)(s.A2[0],s.lr[0],t),(0,o.Cc)(s.A2[1],s.lr[1],t)]}if((0,o.B6)(e,"zoom-out")){const t=(0,o.am)((0,o.at)(e,"zoom-out",.2,1.7));a=[(0,o.Cc)(s.lr[0],s.Dy[0],t),(0,o.Cc)(s.lr[1],s.Dy[1],t)]}const i=(0,r.Hk)(e,L,e=>344+(e-a[0])/(a[1]-a[0])*936),n=e>=z.start,c=e-z.start,h=(0,o.vT)((0,r.XP)(e,z.start+1.25,1.5)),u=h>0,f=(0,r.BA)(n?c:null),p=[(0,o.vT)((0,r.XP)(e,z.confirmI2c+.2,.35)),(0,o.vT)((0,r.XP)(e,z.confirmOneWire+.2,.35)),(0,o.vT)((0,r.XP)(e,z.confirmPwm+.2,.35))],m=[(0,r.XP)(e,z.confirmI2c+.25,.75),(0,r.XP)(e,z.confirmOneWire+.25,.7),(0,r.XP)(e,z.confirmPwm+.25,.7)],x=[(0,o.yc)((0,r.XP)(e,z.confirmI2c+.5,1.1),s.mc.length),(0,o.yc)((0,r.XP)(e,z.confirmOneWire+.45,1.1),s.NE.length),(0,o.yc)((0,r.XP)(e,z.confirmPwm+.45,1.1),s.aY.length)],g=(0,o.am)((0,r.XP)(e,z.confirmPwm+.25,.8)),b=(0,o.am)((0,r.XP)(e,z.vacGrab+.05,.5)),w=e>=z.vacGrab&&e<z.vacDrop+.2,S=[{add:z.addI2c,next:z.next,confirm:z.confirmI2c,step:"i2c",name:"I2C",pickAt:z.pickI2c,search:()=>(0,o.nE)("i2c",(0,r.XP)(e,z.searchField+.15,.85)),opens:[[z.i2cSda,z.i2cSdaPick],[z.i2cScl,z.i2cSclPick]],picks:[z.i2cSdaPick,z.i2cSclPick]},{add:z.addOneWire,next:z.nextOneWire,confirm:z.confirmOneWire,step:"1wire",name:"1-Wire",pickAt:z.pickOneWire,search:()=>"",opens:[[z.oneWireCh,z.oneWireChPick]],picks:[z.oneWireChPick]},{add:z.addPwm,next:z.nextPwm,confirm:z.confirmPwm,step:"pwm",name:"PWM",pickAt:z.pickPwm,search:()=>"",opens:[[z.pwmCh,z.pwmChPick]],picks:[z.pwmChPick]}];let y=null;for(const s of S){const t=(0,r.SP)(e,s.add+.1,s.confirm+.1);if(t<=.01)continue;const a=e>=s.next+.15;let i=null;s.opens.forEach(([t,a],n)=>{e>=t&&e<a&&(i=n)}),y={step:a?s.step:"list",opacity:t,search:s.search(),pick:e>=s.pickAt?s.name:null,filled:s.picks.filter(t=>e>=t).length,open:i,flash:(0,o.U6)((0,r.XP)(e,a?s.confirm:s.next,.3))};break}const v=(0,o.am)((0,r.XP)(e,z.hexView+.1,.7))*(1-(0,o.am)((0,o.at)(e,"markers",.3,.7))),k=e>=z.packetView+.1?"packet":"hex",_=(0,o.yc)((0,r.XP)(e,z.hexView+.6,1.1),d),j=(0,o.yc)((0,r.XP)(e,z.packetView+.2,1.3),s.Zp.length),M=((0,o.B6)(e,"markers")?(0,o.J$)((0,o.at)(e,"markers",0,.25)):0)>.5?"":(0,o.nE)(l,(0,r.XP)(e,z.filterField+.1,.85)),F=M.length>0?(0,o.vT)((0,r.XP)(e,z.filterField+1,.4)):0,P=[];var A;u&&P.push({label:"T",usAt:2250,opacity:(0,o.vT)((0,r.XP)(e,z.start+2.9,.4)),ghost:!1}),e>
1=z.dropM1&&P.push({label:"M1",usAt:900,opacity:(0,o.vT)((0,r.XP)(e,z.dropM1,.25)),ghost:!1}),e>=z.dropM2&&P.push({label:"M2",usAt:1800,opacity:(0,o.vT)((0,r.XP)(e,z.dropM2,.25)),ghost:!1}),(e>=z.addMarker1&&e<z.dropM1||e>=z.addMarker2&&e<z.dropM2)&&i.x>344&&P.push({label:e<z.dropM1?"M1":"M2",usAt:(A=i.x,a[0]+(A-344)/936*(a[1]-a[0])),opacity:.55,ghost:!0});const C=(0,o.vT)((0,r.XP)(e,z.dropM2+.15,1)),I=Math.min((0,o.vT)((0,o.qB)(e,0,.4)),(0,o.vT)((0,o.qB)(o.hN-e,0,.55)));return{t:e,caption:{text:t.caption,opacity:t.caption?(0,o.QI)((0,o.qB)(e,t.from,t.to),.14,.14):0},fade:I,window:a,wipe:h,hasData:u,phase:f,startFlash:(0,o.U6)((0,r.XP)(e,z.start,.4)),dockFlash:{protocols:Math.max((0,o.U6)((0,r.XP)(e,z.addI2c,.35)),(0,o.U6)((0,r.XP)(e,z.addOneWire,.35)),(0,o.U6)((0,r.XP)(e,z.addPwm,.35))),views:Math.max((0,o.U6)((0,r.XP)(e,z.hexView,.35)),(0,o.U6)((0,r.XP)(e,z.packetView,.35))),annotations:Math.max((0,o.U6)((0,r.XP)(e,z.addMarker1,.35)),(0,o.U6)((0,r.XP)(e,z.addMarker2,.35)))},decoders:p,decoderProgress:m,itemsShown:x,dialog:y,vac:g,vacDrag:b,vacGrabbed:w,panel:v,panelTab:k,hexRows:_,packetRows:j,filterText:M,filtering:F,markers:P,measure:C,pointer:i}}(v),[v]),M=772-260*j.panel,F=s.l_.length,P=[...s.l_.map(()=>1),s.qV.size*j.vac],A=(M-68)/P.reduce((e,t)=>e+t,0),I=P.map((e,t)=>t),D=[...I.slice(0,3),F,...I.slice(3,F)],$=e=>{const t=new Array(P.length).fill(68);let a=68;for(const i of e)t[i]=a,a+=P[i]*A;return t},R=$(I),T=$(D),W=e=>e===F&&j.vacGrabbed?j.pointer.y-P[F]*A/2:(0,o.Cc)(R[e],T[e],j.vacDrag),E=e=>(j.vacDrag<.5?I:D).indexOf(e),G=e=>P[e]*A,N=e=>Math.min(48,.44*G(e)),O=e=>W(e)+.38*G(e),V=936,[q,H]=j.window,B=e=>344+(e-q)/(H-q)*V,Q=Math.min(22,G(0)-16),{majors:U,minors:X}=(0,r.Kn)(j.window),K=[];s.mc.forEach((e,t)=>{t<j.itemsShown[0]&&K.push({...e,shown:(0,o.J$)(j.itemsShown[0]-t)})}),s.NE.forEach((e,t)=>{t<j.itemsShown[1]&&K.push({...e,shown:(0,o.J$)(j.itemsShown[1]-t)})}),s.aY.forEach((e,t)=>{t<j.itemsShown[2]&&K.push({...e,shown:(0,o.J$)(j.itemsShown[2]-t)})});const Z=j.filtering>.5?s.Zp.filter(e=>e.title.startsWith(l)):s.Zp;return(0,c.jsx)("div",{ref:k,className:y,style:{width:e,maxWidth:"100%"},children:(0,c.jsxs)("svg",{viewBox:"0 0 1280 800",preserveAspectRatio:"xMidYMid meet",width:"100%",role:"img","aria-label":"ScanaStudio v6 capturing on an SP259, decoding I2C and 1-Wire, and measuring between two markers",style:{display:"block",borderRadius:8},children:[(0,c.jsx)("title",{children:"ScanaStudio v6 capturing on an SP259, decoding I2C and 1-Wire, and measuring between two markers"}),(0,c.jsxs)("defs",{children:[(0,c.jsx)("clipPath",{id:`${_}-wave`,children:(0,c.jsx)("rect",{x:344,y:68,width:V,height:Math.max(0,M-68)})}),(0,c.jsx)("clipPath",{id:`${_}-wipe`,children:(0,c.jsx)("rect",{x:344,y:68,width:V*j.wipe,height:Math.max(0,M-68)})}),(0,c.jsx)("clipPath",{id:`${_}-panel`,children:(0,c.jsx)("rect",{x:232,y:M,width:1048,height:Math.max(0,772-M)})}),(0,c.jsx)("clipPath",{id:`${_}-headers`,children:(0,c.jsx)("rect",{x:232,y:68,width:112,height:Math.max(0,M-68)})})]}),(0,c.jsx)("rect",{x:0,y:0,width:1280,height:800,fill:n.MF.bg0}),(0,c.jsxs)("g",{opacity:j.fade,children:[(0,c.jsx)(r.VQ,{phase:j.phase,title:"SP259 demo"}),(0,c.jsx)("rect",{x:0,y:34,width:232,height:738,fill:n.MF.bg1}),(0,c.jsx)("rect",{x:231,y:34,width:1,height:738,fill:n.MF.border}),(0,c.jsx)(r.bI,{phase:j.phase,flash:j.startFlash}),(0,c.jsxs)(r.Zp,{x:10,y:h.y,w:212,h:h.h,title:"Device",open:!0,children:[(0,c.jsx)(r.fI,{x:22,y:124,w:188,label:"Device",value:"SP259"}),(0,c.jsx)(r.fI,{x:22,y:142,w:188,label:"Sample rate",value:"250 MS/s"}),(0,c.jsx)(r.fI,{x:22,y:160,w:188,label:"Resolution",value:"4 ns"}),(0,c.jsx)(r.fI,{x:22,y:178,w:188,label:"Capture length",value:"100 M"}),(0,c.jsx)(r.fI,{x:22,y:196,w:188,label:"Logic level",value:"3.3 V"})]}),(0,c.jsx)(r.Zp,{x:10,y:u.y,w:212,h:u.h,title:"Trigger",open:!1}),(0,c.jsxs)(r.Zp,{x:10,y:f.y,w:212,h:f.h,title:"Protocols",open:!0,flash:j.dockFlash.protocols,children:[s.YR.map((e,t)=>{const a=j.decoders[t];if(a<=.01)return null;const i=x(t);return(0,c.jsxs)("g",{opacity:a,children:[(0,c.jsx)("rect",{x:20,y:i,width:192,height:36,rx:6,fill:n.MF.bg1,stroke:n.MF.border}),(0,c.jsx)("circle",{cx:32,cy:i+18,r:4.5,fill:"none",stroke:n.MF.textDim,strokeWidth:1.2}),(0,c.jsx)("circle",{cx:32,cy:i+18,r:1.6,fill:n.MF.textDim}),(0,c.jsx)(r.Dy,{x:46,y:i+12,size:11,fill:n.MF.text,children:e.name}),(0,c.jsx)(r.Dy,{x:46,y:i+25,size:9.5,fill:n.MF.textDim,children:j.decoderProgress[t]<1?`Decoding ${e.channels}
1\u2026`:`${e.items.toLocaleString("en-US").replace(/,/g," ")} items`}),(0,c.jsx)(r.Dy,{x:202,y:i+18,size:11,fill:n.MF.textDim,anchor:"end",children:"\u2715"}),j.decoderProgress[t]<1?(0,c.jsx)("rect",{x:20,y:i+33,width:192*j.decoderProgress[t],height:3,rx:1.5,fill:n.MF.accent}):null]},e.name)}),j.decoders[0]<=.01?(0,c.jsx)(r.Dy,{x:116,y:x(1),size:10.5,fill:n.MF.textMute,anchor:"middle",children:"No protocol yet."}):null,(0,c.jsx)(r.Dy,{x:116,y:g.y,size:10.5,fill:n.MF.accentText,anchor:"middle",children:"+ Add new\u2026"})]}),(0,c.jsx)(r.Zp,{x:10,y:p.y,w:212,h:p.h,title:"Views",open:!0,flash:j.dockFlash.views,children:["Packet View","Hex View","Raw View","Measures View","Markers View","Log View"].map((e,t)=>{const a="Hex View"===e&&j.panel>.1&&"hex"===j.panelTab||"Packet View"===e&&j.panel>.1&&"packet"===j.panelTab;return(0,c.jsxs)("g",{children:[(0,c.jsx)("rect",{x:20,y:b(t)-9,width:192,height:17,rx:4,fill:a?n.MF.bg3:"none"}),(0,c.jsx)(r.Dy,{x:30,y:b(t),size:10.5,fill:a?n.MF.text:n.MF.textDim,children:e}),a?(0,c.jsx)("circle",{cx:204,cy:b(t),r:3,fill:n.MF.accentHi}):null]},e)})}),(0,c.jsx)(r.Zp,{x:10,y:m.y,w:212,h:m.h,title:"Annotations",open:!0,flash:j.dockFlash.annotations,children:["Add marker","Add standard measure","Show/hide annotations"].map((e,t)=>(0,c.jsxs)("g",{children:[(0,c.jsx)("rect",{x:20,y:w(t)-9,width:192,height:18,rx:4,fill:0===t&&j.dockFlash.annotations?n.MF.accent:n.MF.bg1,opacity:0===t&&j.dockFlash.annotations?j.dockFlash.annotations:1,stroke:n.MF.border}),(0,c.jsx)(r.Dy,{x:30,y:w(t),size:10.5,fill:n.MF.text,children:e})]},e))}),(0,c.jsx)("rect",{x:232,y:34,width:1048,height:34,fill:n.MF.bg1}),(0,c.jsx)("rect",{x:232,y:67,width:1048,height:1,fill:n.MF.border}),(0,c.jsx)("rect",{x:343,y:34,width:1,height:738,fill:n.MF.border}),(0,c.jsxs)("g",{clipPath:`url(#${_}-wave)`,children:[(0,c.jsx)("rect",{x:344,y:68,width:V,height:Math.max(0,M-68),fill:n.MF.waveVoid}),P.map((e,t)=>e<=0?null:(0,c.jsxs)("g",{children:[(0,c.jsx)("rect",{x:344,y:W(t),width:V,height:G(t),fill:E(t)%2==0?n.MF.waveRow:n.MF.waveRowAlt}),(0,c.jsx)("rect",{x:344,y:W(t)+G(t)-1,width:V,height:1,fill:n.MF.waveSep})]},t)),X.map(e=>(0,c.jsx)("rect",{x:B(e),y:68,width:1,height:M-68,fill:(0,n.Pw)(.035)},`mi${e}`)),U.map(e=>(0,c.jsx)("rect",{x:B(e),y:68,width:1,height:M-68,fill:(0,n.Pw)(.1)},`ma${e}`)),(0,c.jsx)("g",{clipPath:`url(#${_}-wipe)`,children:s.l_.map((e,t)=>(0,c.jsx)("path",{d:(0,r.rT)(e,j.window,344,1280,O(t)-N(t)/2,O(t)+N(t)/2),fill:"none",stroke:e.color,strokeWidth:1,shapeRendering:"crispEdges"},e.index))}),j.measure>.01?(()=>{const e=B(900),t=B(1800),a=O(2)+N(2)/2+3,i=W(2)+G(2)-3;return(0,c.jsxs)("g",{opacity:j.measure,children:[(0,c.jsx)("rect",{x:e,y:a,width:(t-e)*j.measure,height:Math.max(0,i-a),fill:(0,n.uq)(n.MF.marker,.1),stroke:(0,n.uq)(n.MF.marker,.65)}),i-a>13&&t-e>210?[{badge:"T tot",value:(0,r.us)(900)},{badge:"f avg",value:C}].map((t,s)=>{const o=e+8+108*s,l=(a+i)/2;return(0,c.jsxs)("g",{children:[(0,c.jsx)("rect",{x:o,y:l-6,width:24,height:12,rx:3,fill:(0,n.uq)(n.MF.marker,.35)}),(0,c.jsx)(r.Dy,{x:o+12,y:l,size:7.5,anchor:"middle",fill:n.MF.markerText,weight:700,children:t.badge}),(0,c.jsx)(r.Dy,{x:o+30,y:l,size:10.5,mono:!0,fill:n.MF.markerText,children:t.value})]},t.badge)}):null]})})():null,K.map((e,t)=>{const a=e.ch-1,i=B(e.t0),s=B(e.t1),o=s-i;if(o<2||s<344||i>1280)return null;const l=r.CC[e.emph],d=o>12?(0,r.vY)(e.texts,o,11):null,h=O(a)-Q/2;return(0,c.jsxs)("g",{opacity:e.shown,children:[(0,c.jsx)("rect",{x:i+.5,y:h+.5,width:o-1,height:Q,fill:l.fill,stroke:l.stroke,strokeWidth:1}),d?(0,c.jsx)(r.Dy,{x:i+o/2,y:h+Q/2,size:11,mono:!0,anchor:"middle",fill:n.MF.textHi,children:d}):null]},`${e.ch}-${e.t0}-${t}`)}),j.vac>.01?(()=>{const e=W(F),t=G(F),a=a=>e+8+(s.qV.max-a)/(s.qV.max-s.qV.min)*(t-16),i=[0,25,50,75,100],o=s.mQ.filter(e=>e.us>=q-125&&e.us<=H+125).map((e,t)=>`${t?"L":"M"} ${B(e.us).toFixed(1)} ${a(e.value).toFixed(1)}`).join(" ");return(0,c.jsxs)("g",{opacity:j.vac,children:[j.vacGrabbed?(0,c.jsx)("rect",{x:344,y:e,width:V,height:t,fill:n.MF.waveRowAlt}):null,j.vacGrabbed?(0,c.jsx)("rect",{x:344,y:e,width:V,height:t,fill:(0,n.ys)(.06),stroke:(0,n.ys)(.55),strokeWidth:1}):null,i.map(e=>(0,c.jsx)("rect",{x:344,y:Math.round(a(e))+.5,width:V,height:1,fill:(0,n.uq)(s.qV.color,e%50==0?.2:.08)},e)),o?(0,c.jsx)("path",{d:o,fill:"none",stroke:s.qV.color,strokeWidth:1.6,strokeLinejoin:"round"}):null,t>60?i.filter(e=>e%50==0).map(e=>(0,c.jsx)(r.Dy,{x:354,y:a(e)-8,size:10,mono:!0,fill:n.MF.textDim,children:100===e?`${e} ${s.qV.unit}`:`${e}`},`s${e}`)):null]})})():null,j.hasData?(0,c.jsx)("line",{x1:B(0),x2:B(0),y1:68,y2:M,stroke:(0,n.uq)(n.MF.errHi,.35),strokeDasharray:"4 4"}):null]}),j.markers.map(e=>{const t=B(e.usAt);if(t<342||t>1282)return null;const a="T"===e.label?n.MF.trigger:n.MF.marker,i=e.ghost?e.label:`${e.label}  ${(0,r.us)(e.usAt)}`,s=(0,r.pC)(i,10)+10,o=M-20;return(0,c.jsxs)("g",{opacity:e.opacity,children:[(0,c.jsx)("line",{x1:t,x2:t,y1:64,y2:M,stroke:a,strokeWidth:1}),(0,c.jsx)("rect",{x:t,y:o,width:s,height:14,rx:3,fill:a}),(0,c.jsx)(r.Dy,{x:t+5,y:o+7,size:10,weight:700,fill:n.MF.bg1,children:i})]},e.label+(e.ghost?"-ghost":""))}),(0,c.jsxs)("g",{children:[X.map(e=>(0,c.jsx)("rect",{x:B(e),y:54,width:1,height:14,fill:(0,n.Pw)(.22)},`mt${e}`)),U.map(e=>(0,c.jsxs)("g",{children:[(0,c.jsx)("rect",{x:B(e),y:38,width:1,height:30,fill:(0,n.Pw)(.55)}),(0,c.jsx)(r.Dy,{x:B(e)+5,y:43,size:11,weight:700,fill:n.MF.text,children:(0,r.us)(e)})]},`mj${e}`))]}),(0,c.jsx)("rect",{x:232,y:34,width:112,height:34,fill:n.MF.bg1}),(0,c.jsxs)("g",{clipPath:`url(#${_}-headers)`,children:[(0,c.jsx)("rect",{x:232,y:68,width:112,height:M-68,fill:n.MF.bg0}),s.l_.map((e,t)=>(0,c.jsxs)("g",{children:[(0,c.jsx)("rect",{x:232,y:W(t)+G(t)-1,width:112,height:1,fill:(0,n.Pw)(.04)}),(0,c.jsx)("rect",{x:242,y:O(t)-11,width:9,height:9,rx:3,fill:e.color}),(0,c.jsx)(r.Dy,{x:258,y:O(t)-6,size:12,fill:n.MF.text,children:e.name}),(0,c.jsx)(r.Dy,{x:258,y:O(t)+9,size:10,mono:!0,fill:n.MF.textMute,children:`CH${e.index}`})]},e.index)),j.vac>.01?(0,c.jsxs)("g",{opacity:j.vac,children:[j.vacGrabbed?(0,c.jsx)("rect",{x:232,y:W(F),width:112,height:G(F),fill:n.MF.bg0}):null,(0,c.jsx)("rect",{x:242,y:W(F)+G(F)/2-11,width:9,height:9,rx:3,fill:s.qV.color}),(0,c.jsx)(r.Dy,{x:258,y:W(F)+G(F)/2-6,size:12,fill:n.MF.text,children:s.qV.label}),(0,c.jsx)(r.Dy,{x:258,y:W(F)+G(F)/2+9,size:10,mono:!0,fill:n.MF.textMute,children:`PWM \xb7 ${s.qV.unit}`})]}):null]}),t&&j.caption.opacity>.01?(0,c.jsxs)("g",{opacity:j.caption.opacity,children:[(0,c.jsx)("rect",{x:356,y:78,width:(0,r.pC)(j.caption.text,11)+22,height:20,rx:4,fill:(0,n.uq)(n.MF.bg1,.9),stroke:n.MF.border}),(0,c.jsx)(r.Dy,{x:367,y:88,size:11,fill:n.MF.accentText,children:j.caption.text})]}):null,j.panel>.01?(0,c.jsxs)("g",{clipPath:`url(#${_}-panel)`,children:[(0,c.jsx)("rect",{x:232,y:M,width:1048,height:772-M,fill:n.MF.bg1}),(0,c.jsx)("rect",{x:232,y:M,width:1048,height:1,fill:n.MF.border}),["hex","packet"].map((e,t)=>{const a=j.panelTab===e,i="hex"===e?"Hex View":"Packet View",s=244+108*t;return(0,c.jsxs)("g",{children:[(0,c.jsx)("path",{d:`M ${s} ${M+32} v -20 a 6 6 0 0 1 6 -6 h 88 a 6 6 0 0 1 6 6 v 20 Z`,fill:a?n.MF.bg3:"none"}),(0,c.jsx)(r.Dy,{x:s+14,y:M+18,size:11,fill:a?n.MF.text:n.MF.textDim,children:i})]},e)}),"hex"===j.panelTab?(0,c.jsx)("g",{children:Array.from({length:d},(e,t)=>t).filter(e=>e<j.hexRows).map(e=>{const t=M+46+22*e,a=s.Yc.slice(16*e,16*(e+1));return(0,c.jsxs)("g",{opacity:(0,o.J$)(j.hexRows-e),children:[(0,c.jsx)(r.Dy,{x:248,y:t,size:12,mono:!0,fill:n.MF.textDim,children:(16*e).toString(16).toUpperCase().padStart(6,"0")}),a.map((e,a)=>{const i=306+23*a+(a>=8?7:0),o=s.l_[e.ch-1];return(0,c.jsxs)("g",{children:[(0,c.jsx)("rect",{x:i,y:t-9,width:20,height:18,rx:3,fill:(0,n.uq)(o.color,.16)}),(0,c.jsx)(r.Dy,{x:i+10,y:t,size:12,mono:!0,anchor:"middle",fill:(0,n.jh)(o.color,n.MF.textHi,.55),children:(0,s.uh)(e.value)})]},a)}),a.map((e,a)=>{const i=e.value,s=i>=32&&i<127;return(0,c.jsx)(r.Dy,{x:696+11*a,y:t,size:12,mono:!0,fill:s?n.MF.text:n.MF.textMute,children:s?String.fromCharCode(i):"."},`a${a}`)})]},e)})}):(0,c.jsxs)("g",{children:[(0,c.jsx)("rect",{x:232,y:M+32,width:1048,height:28,fill:n.MF.bg2}),r.jl.map((e,t)=>{const a=244+(0,r.Rb)(t),i="Title\u2026"===e.filter&&j.filterText.length>0;return(0,c.jsxs)("g",{children:[e.filter?(0,c.jsxs)("g",{children:[(0,c.jsx)("rect",{x:a,y:M+38,width:e.w-8,height:16,rx:3,fill:n.MF.bg1,stroke:i?n.MF.accentBorder:n.MF.border}),(0,c.jsx)(r.Dy,{x:a+6,y:M+46,size:10,fill:i?n.MF.text:n.MF.textMute,mono:i,children:i?j.filterText:e.filter})]}):null,(0,c.jsx)(r.Dy,{x:a,y:M+72,size:10.5,fill:n.MF.textDim,weight:600,children:e.label})]},e.label)}),j.filterText.length>0?(0,c.jsx)(r.Dy,{x:248,y:M+46,size:11,fill:n.MF.accentText,children:"\u2a2f"}):null,(0,c.jsx)("rect",{x:232,y:M+84,width:1048,height:1,fill:n.MF.border}),Z.filter((e,t)=>
1t<j.packetRows).slice(0,r.c7).map((e,t)=>{const a=M+98+24*t,[i,l]=s.gm[e.color],d=s.l_[e.ch-1];return(0,c.jsxs)("g",{opacity:(0,o.J$)(j.packetRows-t),children:[(0,c.jsx)("rect",{x:232,y:a-12,width:3,height:22,rx:1.5,fill:d.color,opacity:.9}),(0,c.jsx)(r.Dy,{x:244,y:a,size:11,mono:!0,fill:n.MF.textDim,children:e.index}),(0,c.jsx)(r.Dy,{x:244+(0,r.Rb)(1),y:a,size:11,mono:!0,fill:n.MF.text,children:(0,r.us)(e.start,5)}),(0,c.jsx)(r.Dy,{x:244+(0,r.Rb)(2),y:a,size:11,mono:!0,fill:n.MF.text,children:(0,r.us)(e.end,5)}),(0,c.jsx)(r.Dy,{x:244+(0,r.Rb)(3),y:a,size:11,mono:!0,fill:n.MF.textDim,children:(0,r.us)(e.end-e.start,3)}),(0,c.jsx)(r.Dy,{x:244+(0,r.Rb)(4),y:a,size:11,mono:!0,fill:n.MF.textDim,children:e.source}),(0,c.jsx)("rect",{x:244+(0,r.Rb)(5),y:a-9,width:r.jl[5].w-10,height:18,rx:3,fill:i}),(0,c.jsx)(r.Dy,{x:244+(0,r.Rb)(5)+(e.child?16:6),y:a,size:11,mono:!0,fill:n.MF.bgVoid,children:e.title}),e.child?(0,c.jsx)(r.Dy,{x:244+(0,r.Rb)(5)+5,y:a,size:10,mono:!0,fill:(0,n.Qw)(.55),children:"\u2514"}):null,(0,c.jsx)("rect",{x:244+(0,r.Rb)(6),y:a-9,width:r.jl[6].w-10,height:18,rx:3,fill:l}),(0,c.jsx)(r.Dy,{x:244+(0,r.Rb)(6)+6,y:a,size:11,mono:!0,fill:n.MF.bgVoid,children:e.content})]},e.index)})]})]}):null,(0,c.jsx)(r.eA,{phase:j.phase,items:["SP259 (demo)","Sampling rate: 250 MS/s (4 ns)","Captured: 100 M"]})]}),j.dialog?(0,c.jsx)(r.lG,{state:j.dialog,fade:j.fade,spec:S}):null,(0,c.jsx)(r.WG,{pointer:j.pointer,fade:j.fade})]})})}const C=(0,r.Ix)(8e3)},99482(e,t,a){a.d(t,{jh:()=>s,uq:()=>n});const i={bgVoid:"#0a0b0e",bg0:"#0f1115",bg1:"#14161b",bg2:"#1a1d23",bg3:"#22262e",border:"#2a2e36",borderStrong:"#4a4a4a",text:"#d6d9de",textDim:"#8b93a1",onFill:"#fff",accent:"#1e78be",accentHi:"#2f8fd8",accentText:"#9fc6ef",accentBorder:"#3b7dc4",ok:"#4c9a5a",okHi:"#7ee787",okBorder:"#3d6b4a",warn:"#d79a3c",warnHi:"#ffb454",err:"#e05555",errHi:"#ff6b6b",danger:"#c42b1c",dangerDim:"#b62324",dangerHi:"#d32f2f",cursorA:"#ffd35c",cursorB:"#4cc2ff",marker:"#35c983",trigger:"#ff5252",rearm:"#a371f7",overlayDraw:"#ff9f43",overlayEdge:"#ffc478",overlayGrid:"#4a5160",idle:"#6b7280",demoOff:"#6b7280",textInvert:"#f2f4f8",phaseConfig:"#ffd35c",phaseArmed:"#a371f7",phaseSampling:"#4cc2ff",phaseDownload:"#58a6ff",phaseParse:"#b18cff",inkRgb:"255, 255, 255",shadeRgb:"0, 0, 0",glowRgb:"120, 190, 255",glowEdge:"#e2f0ff",selectRgb:"88, 166, 255",waveRow:"#0f1115",waveRowAlt:"#060609",waveVoid:"#060709",waveSep:"#0b0d0f",textHi:"#e6e9ef",textMute:"#79808d",markerInk:"#07231a",markerText:"#cfeee0",itemPlain:"#697384",itemPlainFill:"#2c313c",itemOkFill:"#2d4847",itemWarn:"#ff9900",itemWarnFill:"#4c4133",itemErrFill:"#473640",mono:'Consolas, "Cascadia Mono", monospace',ctlH:"24px"};function n(e,t){const a=e.replace("#",""),i=3===a.length?a.replace(/./g,e=>e+e):a,n=parseInt(i.slice(0,6),16);return`rgba(${n>>16&255}, ${n>>8&255}, ${255&n}, ${t})`}function s(e,t,a){const i=e=>{const t=e.replace("#",""),a=3===t.length?t.replace(/./g,e=>e+e):t,i=parseInt(a.slice(0,6),16);return[i>>16&255,i>>8&255,255&i]},[n,s,o]=i(e),[r,c,l]=i(t),d=(e,t)=>Math.round(e+(t-e)*a);return`rgb(${d(n,r)}, ${d(s,c)}, ${d(o,l)})`}a.d(t,["Br",0,["#AA5500","#EF0000","#FF5500","#E6E600","#00D800","#006AEA","#D1009D","#9E9E9E","#DEDEDE"],"Fc",0,'"Segoe UI", system-ui, sans-serif',"MF",0,i,"Pw",0,e=>`rgba(${i.inkRgb}, ${e})`,"Qw",0,e=>`rgba(${i.shadeRgb}, ${e})`,"a7",0,'Consolas, "Cascadia Mono", monospace',"ys",0,e=>`rgba(${i.glowRgb}, ${e})`])},602(e,t,a){a.d(t,{BA:()=>I,Dy:()=>D,GX:()=>ae,Hk:()=>z,Ix:()=>S,Kn:()=>y,R8:()=>se,SP:()=>P,VQ:()=>W,WG:()=>L,WK:()=>ne,Zp:()=>$,_e:()=>B,bI:()=>G,eA:()=>N,eS:()=>ie,fI:()=>R,jK:()=>ee,lG:()=>K,mf:()=>Q,oo:()=>te,rT:()=>O,vY:()=>q,xr:()=>A});var i=a(96540),n=a(99482),s=a(94387),o=a(90372),r=a(74848);const c=1280,l=800,d=34,h=772,u=232,f=1e3/30,p=e=>Math.round(10*e)/10,m=(e,t)=>e.length*t*.55,x=(e,t)=>e.length*t*.52,g="M0.000 0.097L0.010 0.065L0.029 0.042L0.029 0.035L0.058 0.013L0.097 0.000L0.903 0.000L0.9350.010L0.958 0.029L0.965 0.029L0.987 0.058L1.000 0.097L1.000 0.903L0.990 0.935L0.971 0.958L0.9710.965L0.942 0.987L0.903 1.000L0.097 1.000L0.065 0.990L0.042 0.971L0.035 0.971L0.013 0.942L0.0000.903L0.000 0.097ZM0.042 0.142L0.042 0.742L0.103 0.742L0.103 0.532L0.368 0.532L0.368 0.745L0.5420.745L0.545 0.532L0.842 0.532L0.842 0.748L0.961 0.748L0.961 0.135L0.945 0.094L0.910 0.058L0.8680.042L0.455 0.042L0.455 0.048L0.545 0.139L0.600 0.123L0.652 0.123L0.710 0.142L0.765 0.190L0.7870.232L0.797 0.277L0.797 0.306L0.777 0.374L0.771 0.377L0.758 0.403L0.726 0.432L0.690 0.452L0.6580.461L0.594 0.461L0.561 0.452L0.529 0.435L0.494 0.403L0.468 0.361L0.455 0.313L0.455 0.271L0.4740.213L0.303 0.042L0.123 0.045L0.090 0.061L0.065 0.087L0.048 0.116L0.042 0.142ZM0.042 0.784L0.0420.861L0.058 0.906L0.097 0.945L0.145 0.961L0.861 0.961L0.913 0.942L0.948 0.903L0.961 0.868L0.9610.787L0.800 0.787L0.800 0.574L0.584 
10.574L0.581 0.787L0.326 0.787L0.326 0.577L0.145 0.574L0.1420.784L0.042 0.784ZM0.513 0.281L0.516 0.323L0.535 0.361L0.568 0.390L0.600 0.403L0.648 0.403L0.6940.384L0.723 0.352L0.739 0.300L0.735 0.265L0.713 0.219L0.687 0.197L0.645 0.181L0.606 0.181L0.5550.203L0.529 0.232L0.513 0.281Z",b=[[1,"s"],[.001,"ms"],[1e-6,"\xb5s"],[1e-9,"ns"]],w=e=>e.includes(".")?e.replace(/0+$/,"").replace(/\.$/,""):e;function S(e){return e>=1e6?`${w((e/1e6).toPrecision(4))} MHz`:e>=1e3?`${w((e/1e3).toPrecision(4))} kHz`:`${w(e.toPrecision(4))} Hz`}function y(e,t=7){const[a,i]=e,n=function(e,t){const a=e/t,i=Math.pow(10,Math.floor(Math.log10(a)));for(const n of[1,2,5,10])if(i*n>=a)return i*n;return 10*i}(i-a,t),s=[];for(let r=Math.ceil(a/n)*n;r<=i;r+=n)s.push(r);const o=[];for(let r=Math.ceil(a/(n/5))*(n/5);r<=i;r+=n/5)o.push(r);return{step:n,majors:s,minors:o}}const v=[{label:"#",w:56},{label:"Start time",w:105,filter:"From\u2026"},{label:"End time",w:105,filter:"To\u2026"},{label:"Duration",w:85,filter:"Duration\u2026"},{label:"Source",w:130,filter:"All sources"},{label:"Title",w:170,filter:"Title\u2026"},{label:"Content",w:200,filter:"Content\u2026"}],k=v.reduce((e,t,a)=>(e.push(0===a?0:e[a-1]+v[a-1].w+8),e),[]),_=e=>k[e],j=Math.floor(164/24),M={x:244+_(5)+(v[5].w-8)/2,y:558},F=(e,t,a)=>(0,o.qB)(e,t,t+a);function P(e,t,a,i=.14){return Math.min((0,o.vT)(F(e,t,i)),1-(0,o.vT)(F(e,a,i)))}function z(e,t,a){const i=e=>void 0!==e.xUs?a(e.xUs):e.x;let n=0;for(;n+1<t.length&&t[n+1].at<=e;)n++;const s=t[n],r=t[n+1];let c=i(s),l=s.y;if(r){const t=r.travel??.5,a=(0,o.am)((0,o.qB)(e,Math.max(s.at,r.at-t),r.at));c=(0,o.Cc)(i(s),i(r),a),l=(0,o.Cc)(s.y,r.y,a)}let d=0;for(const o of t){if(!o.click||o.at>e)continue;const t=F(e,o.at,.45);t<1&&(d=t)}return{x:c,y:l,click:d}}function L({pointer:e,fade:t}){return(0,r.jsxs)("g",{opacity:t,transform:`translate(${e.x.toFixed(1)}, ${e.y.toFixed(1)})`,children:[e.click>0&&e.click<1?(0,r.jsx)("circle",{r:5+17*e.click,fill:"none",stroke:n.MF.accentHi,strokeWidth:2,opacity:.65*(1-e.click)}):null,(0,r.jsx)("path",{d:"M 0 0 L 0 17.5 L 4.6 13.4 L 7.4 19.2 L 10.3 17.8 L 7.5 12.2 L 13.1 11.8 Z",fill:n.MF.onFill,stroke:(0,n.Qw)(.75),strokeWidth:1.1,strokeLinejoin:"round",transform:e.click>0&&e.click<.22?"scale(0.85)":void 0})]})}function A(e,t,a){const n=void 0!==a,[s,o]=(0,i.useState)(a??.5),[r,c]=(0,i.useState)(!0),[l,d]=(0,i.useState)(!1),h=(0,i.useRef)(null),u=(0,i.useRef)(a??.5);return(0,i.useEffect)(()=>{const e=window.matchMedia("(prefers-reduced-motion: reduce)"),t=()=>d(e.matches);return t(),e.addEventListener("change",t),()=>e.removeEventListener("change",t)},[]),(0,i.useEffect)(()=>{const e=h.current;if(!e||"undefined"==typeof IntersectionObserver)return;const t=new IntersectionObserver(e=>c(e[0].isIntersecting),{rootMargin:"120px"});return t.observe(e),()=>t.disconnect()},[]),(0,i.useEffect)(()=>{if(n)return;if(l)return void o(t);if(!r)return;let a=0,i=null,s=0;const c=t=>{a=requestAnimationFrame(c),null===i&&(i=t);const n=Math.min(t-i,250);i=t,u.current=(u.current+n/1e3)%e,t-s<f||(s=t,o(u.current))};return a=requestAnimationFrame(c),()=>cancelAnimationFrame(a)},[n,l,r,e,t]),{t:s,host:h}}const C=[{from:.15,label:"Configuring device\u2026",color:n.MF.phaseConfig},{from:.8,label:"Waiting for trigger\u2026",color:n.MF.phaseArmed},{from:1.35,label:"Sampling\u2026",color:n.MF.phaseSampling},{from:2.5,label:"Downloading samples\u2026",color:n.MF.phaseDownload},{from:2.95,label:"Parsing samples\u2026",color:n.MF.phaseParse},{from:3.35,label:"Ready",color:n.MF.ok}];function I(e){let t={label:"Idle",color:n.MF.idle,running:!1};if(null===e)return t;for(const a of C)e>=a.from&&(t={label:a.label,color:a.color,running:"Ready"!==a.label});return t}function D({x:e,y:t,size:a=11,fill:i=n.MF.text,anchor:s="start",mono:o,weight:c,opacity:l,children:d}){return(0,r.jsx)("text",{x:p(e),y:p(t),fontSize:a,fontFamily:o?n.a7:n.Fc,fill:i,textAnchor:s,dominantBaseline:"central",fontWeight:c,opacity:l,children:d})}function $({x:e,y:t,w:a,h:i,title:s,open:o,flash:c,children:l}){return(0,r.jsxs)("g",{children:[(0,r.jsx)("rect",{x:e,y:t,width:a,height:i,rx:8,fill:n.MF.bg2,stroke:n.MF.border}),(0,r.jsx)("path",{d:`M ${e} ${t+8} a 8 8 0 0 1 8 -8 h ${a-16} a 8 8 0 0 1 8 8 v 18 h ${-a} Z`,fill:n.MF.bg3}),c?(0,r.jsx)("path",{d:`M ${e} ${t+8} a 8 8 0 0 1 8 -8 h ${a-16} a 8 8 0 0 1 8 8 v 18 h ${-a} Z`,fill:n.MF.accent,opacity:.5*c}
1):null,(0,r.jsx)(D,{x:e+12,y:t+13,size:11,weight:600,fill:n.MF.text,children:s}),(0,r.jsx)(D,{x:e+a-12,y:t+13,size:9,fill:n.MF.textDim,anchor:"end",children:o?"\u25be":"\u25b8"}),l]})}function R({x:e,y:t,w:a,label:i,value:s}){return(0,r.jsxs)("g",{children:[(0,r.jsx)(D,{x:e,y:t,size:10.5,fill:n.MF.textDim,children:i}),(0,r.jsx)(D,{x:e+a,y:t,size:10.5,fill:n.MF.text,anchor:"end",mono:!0,children:s})]})}function T({x:e,y:t,label:a,color:i}){const s=x(a,10.5)+(i?30:20);return(0,r.jsxs)("g",{children:[(0,r.jsx)("rect",{x:e,y:t-9,width:s,height:18,rx:9,fill:n.MF.bg3}),i?(0,r.jsx)("circle",{cx:e+11,cy:t,r:4,fill:i}):null,(0,r.jsx)(D,{x:e+(i?21:10),y:t,size:10.5,fill:n.MF.textDim,children:a})]})}function W({phase:e,title:t}){return(0,r.jsxs)("g",{children:[(0,r.jsx)("rect",{x:0,y:0,width:c,height:34,fill:n.MF.bg1}),(0,r.jsx)("rect",{x:0,y:33,width:c,height:1,fill:n.MF.border}),(0,r.jsxs)("g",{transform:"translate(10, 7) scale(20)",children:[(0,r.jsx)("path",{d:g.slice(0,g.indexOf("Z")+1),fill:"#4d89c1"}),(0,r.jsx)("path",{d:g,fill:n.MF.onFill,fillRule:"evenodd"})]}),(0,r.jsx)(D,{x:36,y:17,size:12,weight:600,fill:n.MF.text,children:"ScanaStudio"}),(0,r.jsx)("path",{d:"M 122 34 v -24 a 7 7 0 0 1 7 -7 h 116 a 7 7 0 0 1 7 7 v 24 Z",fill:n.MF.bg3}),(0,r.jsx)("circle",{cx:138,cy:18,r:3.5,fill:e.color,children:e.running?(0,r.jsx)("animate",{attributeName:"opacity",values:"1;0.35;1",dur:"1.1s",repeatCount:"indefinite"}):null}),(0,r.jsx)(D,{x:150,y:18,size:11,fill:n.MF.text,children:t}),(0,r.jsx)(D,{x:238,y:18,size:11,fill:n.MF.textDim,children:"\u2715"}),(0,r.jsx)(D,{x:264,y:18,size:13,fill:n.MF.textDim,children:"+"}),(0,r.jsx)(D,{x:1222,y:17,size:12,fill:n.MF.textDim,children:"\u2699"}),(0,r.jsx)(D,{x:1248,y:17,size:12,fill:n.MF.textDim,children:"?"})]})}const E={x:116,y:59};function G({phase:e,flash:t,idleLabel:a="\u25b6  Start capture",runningLabel:i="\u25a0  Stop capture"}){return(0,r.jsxs)("g",{children:[(0,r.jsx)("rect",{x:10,y:44,width:212,height:30,rx:6,fill:e.running?n.MF.danger:n.MF.accent}),(0,r.jsx)("rect",{x:10,y:44,width:212,height:30,rx:6,fill:n.MF.onFill,opacity:.35*t}),(0,r.jsx)(D,{x:116,y:59,size:12,weight:600,fill:n.MF.onFill,anchor:"middle",children:e.running?i:a})]})}function N({phase:e,items:t}){let a=12+(i=e.label,s=!0,x(i,10.5)+(s?30:20))+14;var i,s;return(0,r.jsxs)("g",{children:[(0,r.jsx)("rect",{x:0,y:h,width:c,height:28,fill:n.MF.bg1}),(0,r.jsx)("rect",{x:0,y:h,width:c,height:1,fill:n.MF.border}),(0,r.jsx)(T,{x:12,y:786,label:e.label,color:e.color}),t.map(e=>{const t=(0,r.jsx)(D,{x:a,y:786,size:10.5,fill:n.MF.textDim,children:e},e);return a+=x(e,10.5)+18,t})]})}function O(e,t,a,i,n,s){const[o,r]=t,c=r-o,l=e=>a+(e-o)/c*(i-a);let d=e.initial,h=0;for(;h<e.edges.length&&e.edges[h]<=o;)d=d?0:1,h++;const u=e=>e?n:s;let f=`M ${a.toFixed(1)} ${u(d).toFixed(1)}`;for(;h<e.edges.length;h++){const t=e.edges[h];if(t>r)break;const a=l(t).toFixed(1);f+=` L ${a} ${u(d).toFixed(1)}`,d=d?0:1,f+=` L ${a} ${u(d).toFixed(1)}`}return`${f} L ${i.toFixed(1)} ${u(d).toFixed(1)}`}const V={[s.f.Plain]:{stroke:(0,n.uq)(n.MF.itemPlain,.9),fill:(0,n.uq)(n.MF.itemPlainFill,.96)},[s.f.Success]:{stroke:n.MF.marker,fill:(0,n.uq)(n.MF.itemOkFill,.96)},[s.f.Warning]:{stroke:n.MF.itemWarn,fill:(0,n.uq)(n.MF.itemWarnFill,.96)},[s.f.Error]:{stroke:n.MF.err,fill:(0,n.uq)(n.MF.itemErrFill,.96)}};function q(e,t,a){const i=t-8;if(i<=6)return null;for(const n of e)if(m(n,a)<=i)return n;return null}function H(e,t){const a=Math.min(9,e.length),i=Math.max(0,Math.min(t-1-Math.floor(a/2),e.length-a));return{start:i,count:a,list:e.slice(i,i+a),index:t-1-i}}function B(e,t){const a=new Set(e.library.map(e=>e.name));for(const[i,n]of Object.entries(e.forms))if(!a.has(n.name))throw new Error(`${t}: the "${i}" form configures "${n.name}", which is not in the library`);return e}function Q(e){const t=t=>{if("list"===t){const e=560,t=340;return{w:e,h:t,x:u+(1048-e)/2,y:d+(738-t)/2}}const a=e.forms[t],i=a.tab,n=60+30*a.fields.length+(i?i.check?48:26:4)+54;return{w:430,h:n,x:541,y:d+(738-n)/2}},a=(e,a,i)=>{const n=t(e);return{x:n.x+305,y:n.y+60+30*a+36+20*i}};return{geom:t,primary:e=>{const a=t(e);return{x:a.x+a.w-54,y:a.y+a.h-21}},field:(e,a)=>{const i=t(e);return{x:i.x+305,y:i.y+72+30*a}},listRow:e=>{const a=t("list");return{x:a.x+120,y:a.y+89+21*e}},search:()=>{const e=t("list");return{x:e.x+121,y:e.y+61}},option:a,optionAt:(t,i)=>{const n=e.forms[t].fields[i],{index:s}=H(e.channels,n.pick);return a(t,i,s)},picksOf:t=>e.forms[t].fields.filter(e=>void 0!==e.pick).length}}const U=["Decode","Demo signals","Signal builder","Trigger","Pattern generator"],X=e=>`CH${e.index} (${e.name})`;function K({state:e,fade:t,spec:a}){const{w:i,h:s,x:o,y:d}=Q(a).geom(e.step),h="list"===e.step,u=h?null:a.forms[e.step],f=u?`${u.name} configuration`:"Add new protocol",p=u?u.fields:[],g=u?.tab,b=a.library.filter(t=>t.name.toLowerCase().includes(e.search.toLowerCase())),w=a.library.find(t=>t.name===e.pick)??null,S=a.channels;return(0,r.jsxs)("g",{opacity:e.opacity*t,children:[(0,r.jsx)("rect",{x:0,y:0,width:c,height:l,fill:(0,n.Qw)(.45)}),(0,r.jsx)("rect",{x:o,y:d,width:i,height:s,rx:10,fill:n.MF.bg2,stroke:n.MF.borderStrong}),(0,r.jsx)("rect",{x:o,y:d,width:i,height:38,rx:10,fill:n.MF.bg3}),(0,r.jsx)("rect",{x:o,y:d+28,width:i,height:10,fill:n.MF.bg3}),(0,r.jsx)(D,{x:o+16,y:d+19,size:12.5,weight:600,fill:n.MF.text,children:f}),(0,r.jsx)(D,{x:o+i-16,y:d+19,size:12,fill:n.MF.textDim,anchor:"end",children:"\u2715"}),h?(0,r.jsxs)("g",{children:[(0,r.jsx)("rect",{x:o+16,y:d+50,width:210,height:22,rx:4,fill:n.MF.bg1,stroke:e.search?n.MF.accentBorder:n.MF.border}),(0,r.jsx)(D,{x:o+26,y:d+61,size:10.5,mono:!!e.search,fill:e.search?n.MF.text:n.MF.textMute,children:e.search||"Search protocols\u2026"}),e.search?(0,r.jsx)("rect",{x:o+28+m(e.search,10.5),y:d+54,width:1,height:14,fill:n.MF.text,children:(0,r.jsx)("animate",{attributeName:"opacity",values:"1;0;
11",dur:"1s",repeatCount:"indefinite"})}):null,b.map((t,a)=>{const i=t.name===e.pick,s=d+80+21*a;return(0,r.jsxs)("g",{children:[(0,r.jsx)("rect",{x:o+16,y:s,width:210,height:19,rx:4,fill:i?n.MF.accent:"none",opacity:i?.85:1}),(0,r.jsx)(D,{x:o+26,y:s+9,size:11,fill:i?n.MF.onFill:n.MF.text,children:t.name}),(0,r.jsx)(D,{x:o+218,y:s+9,size:9.5,anchor:"end",fill:i?n.MF.onFill:n.MF.textDim,children:t.version})]},t.name)}),(0,r.jsx)("rect",{x:o+240,y:d+50,width:i-256,height:s-106,rx:6,fill:n.MF.bg1,stroke:n.MF.border}),w?(0,r.jsxs)("g",{children:[(0,r.jsx)(D,{x:o+254,y:d+68,size:13,weight:600,fill:n.MF.text,children:w.name}),(0,r.jsx)(D,{x:o+254,y:d+86,size:10.5,fill:n.MF.textDim,children:`Version ${w.version}, by ${w.author}`}),w.description.map((e,t)=>(0,r.jsx)(D,{x:o+254,y:d+108+16*t,size:10.5,fill:n.MF.text,children:e},e)),(()=>{const e=d+108+16*Math.max(2,w.description.length)+12;return(0,r.jsxs)("g",{children:[U.map((t,a)=>{const i=a<3,s=x(t,9.5)+14,c=o+254+U.slice(0,a).reduce((e,t)=>e+x(t,9.5)+20,0);return(0,r.jsxs)("g",{children:[(0,r.jsx)("rect",{x:c,y:e,width:s,height:16,rx:8,fill:i?(0,n.uq)(n.MF.accent,.35):n.MF.bg3,stroke:i?n.MF.accentBorder:n.MF.border}),(0,r.jsx)(D,{x:c+s/2,y:e+8,size:9.5,anchor:"middle",fill:i?n.MF.accentText:n.MF.textMute,children:t})]},t)}),(0,r.jsx)(D,{x:o+254,y:e+34,size:10,mono:!0,fill:n.MF.textMute,children:w.file})]})})()]}):(0,r.jsx)(D,{x:o+240+(i-256)/2,y:d+50+(s-106)/2,size:11,anchor:"middle",fill:n.MF.textMute,children:"Select a protocol to see what it does."})]}):(0,r.jsxs)("g",{children:[p.map((t,a)=>{const i=d+60+30*a,s=p.slice(0,a).filter(e=>void 0!==e.pick).length,c=void 0===t.pick||e.filled>s,l=void 0!==t.pick?c?X(S[t.pick-1]):"\u2014":t.value,h=e.open===s&&void 0!==t.pick;return(0,r.jsxs)("g",{children:[(0,r.jsx)(D,{x:o+20,y:i+12,size:11,fill:n.MF.text,children:t.label}),(0,r.jsx)("rect",{x:o+200,y:i,width:210,height:24,rx:4,fill:n.MF.bg1,stroke:h?n.MF.accentBorder:n.MF.border}),(0,r.jsx)(D,{x:o+210,y:i+12,size:11,fill:c?n.MF.text:n.MF.textMute,children:l}),(0,r.jsx)(D,{x:o+400,y:i+12,size:9,anchor:"end",fill:n.MF.textDim,children:h?"\u25b4":"\u25be"})]},t.label)}),g?(0,r.jsxs)("g",{children:[(0,r.jsx)(D,{x:o+20,y:d+60+30*p.length+10,size:11,fill:n.MF.textDim,children:`${g.open?"\u25be":"\u25b8"} ${g.label}`}),g.check?(0,r.jsxs)("g",{children:[(0,r.jsx)("rect",{x:o+30,y:d+60+30*p.length+22,width:12,height:12,rx:3,fill:n.MF.accent}),(0,r.jsx)(D,{x:o+36,y:d+60+30*p.length+28,size:9,anchor:"middle",fill:n.MF.onFill,children:"\u2713"}),(0,r.jsx)(D,{x:o+50,y:d+60+30*p.length+28,size:11,fill:n.MF.text,children:g.check})]}):null]}):null]}),(0,r.jsx)("rect",{x:o,y:d+s-44,width:i,height:44,fill:n.MF.bg2}),(0,r.jsx)("rect",{x:o,y:d+s-44,width:i,height:1,fill:n.MF.border}),h?(0,r.jsx)(D,{x:o+16,y:d+s-22,size:10.5,fill:n.MF.textDim,children:"Library up to date"}):(0,r.jsx)(D,{x:o+16,y:d+s-22,size:11,fill:n.MF.textDim,children:"\u2039 Back"}),(0,r.jsx)("rect",{x:o+i-92,y:d+s-33,width:76,height:24,rx:5,fill:n.MF.accent,opacity:h&&!e.pick?.35:1}),(0,r.jsx)("rect",{x:o+i-92,y:d+s-33,width:76,height:24,rx:5,fill:n.MF.onFill,opacity:.4*e.flash}),(0,r.jsx)(D,{x:o+i-54,y:d+s-21,size:11,weight:600,anchor:"middle",fill:n.MF.onFill,opacity:h&&!e.pick?.5:1,children:h?"Next":"Add"}),u&&null!==e.open?(()=>{const t=p.findIndex((t,a)=>void 0!==t.pick&&p.slice(0,a).filter(e=>void 0!==e.pick).length===e.open);if(t<0)return null;const a=p[t].pick,i=d+60+30*t+26,{list:s,count:c}=H(S,a);return(0,r.jsxs)("g",{children:[(0,r.jsx)("rect",{x:o+200,y:i,width:210,height:20*c+8,rx:5,fill:n.MF.bg2,stroke:n.MF.borderStrong}),c<S.length?(0,r.jsx)("rect",{x:o+404,y:i+4,width:3,height:c/S.length*(20*c),rx:1.5,fill:n.MF.border}):null,s.map((e,t)=>{const s=i+4+20*t,c=e.index===a;return(0,r.jsxs)("g",{children:[c?(0,r.jsx)("rect",{x:o+204,y:s,width:202,height:20,rx:3,fill:(0,n.uq)(n.MF.accent,.5)}):null,(0,r.jsx)("rect",{x:o+212,y:s+6,width:8,height:8,rx:2.5,fill:e.color}),(0,r.jsx)(D,{x:o+226,y:s+10,size:10.5,fill:n.MF.text,children:X(e)})]},e.index)})]})})():null]})}const Z={cx:756,cy:403},J={at:0,cx:640,cy:400,w:c},Y={cx:756,w:1048};function ee(e,t,a){let i=0;for(;i+1<t.length&&t[i+1].at<=e;)i++;const n=t[i],s=t[i+1];let r=n.cx,d=a(n.cy),h=n.w;if(s){const t=s.travel??1,i=(0,o.am)((0,o.qB)(e,Math.max(n.at,s.at-t),s.at));r=(0,o.Cc)(r,s.cx,i),d=(0,o.Cc)(d,a(s.cy),i),h=Math.exp((0,o.Cc)(Math.log(h),Math.log(s.w),i)
1)}const u=h*l/c;return{x:Math.min(Math.max(0,r-h/2),c-h),y:Math.min(Math.max(0,d-u/2),l-u),w:h,h:u}}function te(e){const t=c/e.w;return`translate(${(-e.x*t).toFixed(2)} ${(-e.y*t).toFixed(2)}) scale(${t.toFixed(4)})`}function ae({text:e,opacity:t}){if(t<=.01||!e)return null;const a=x(e,26)+44;return(0,r.jsxs)("g",{opacity:t,children:[(0,r.jsx)("rect",{x:28,y:726,width:a,height:46,rx:10,fill:(0,n.uq)(n.MF.bg1,.88),stroke:(0,n.ys)(.35),strokeWidth:1.5}),(0,r.jsx)(D,{x:50,y:749,size:26,weight:600,fill:n.MF.accentText,children:e})]})}function ie({ch:e,win:t,x0:a,x1:i,yHigh:n,yLow:s}){const{line:o,blocks:c}=function(e,t,a,i,n,s){const[o,r]=t,c=r-o,l=Math.max(1,Math.round(i-a)),d=e=>a+(e-o)/c*(i-a),h=e=>Math.floor((e-o)/c*l);let u=e.initial,f=0;for(;f<e.edges.length&&e.edges[f]<=o;)u=u?0:1,f++;let p=f;for(;p<e.edges.length&&e.edges[p]<=r;)p++;const m=new Int32Array(l+1);for(let j=f;j<p;j++){const t=h(e.edges[j]);t>=0&&t<=l&&m[t]++}const x=new Uint8Array(l+1);let g=0;for(let j=0;j<=l;j++)if(m[j]>=2&&(x[j]=1),m[j]>=1){if(g++,g>=8)for(let e=j-g+1;e<=j;e++)x[e]=1}else g=0;const b=e=>e?n:s,w=n.toFixed(1),S=s.toFixed(1);let y=`M ${a.toFixed(1)} ${b(u).toFixed(1)}`,v="",k=f,_=0;for(;_<=l;){if(!x[_]){for(;k<p&&h(e.edges[k])===_;){const t=d(e.edges[k]).toFixed(1);y+=` L ${t} ${b(u).toFixed(1)}`,u=u?0:1,y+=` L ${t} ${b(u).toFixed(1)}`,k++}_++;continue}const t=_,i=u;for(;_<=l&&x[_];){for(;k<p&&h(e.edges[k])===_;)u=u?0:1,k++;_++}const n=(a+t).toFixed(1),s=(a+_).toFixed(1);y+=` L ${n} ${b(i).toFixed(1)}`,v+=` M ${n} ${w} L ${s} ${w} L ${s} ${S} L ${n} ${S} Z`,y+=` M ${s} ${b(u).toFixed(1)}`}return{line:`${y} L ${i.toFixed(1)} ${b(u).toFixed(1)}`,blocks:v.trim()}}(e,t,a,i,n,s);return(0,r.jsxs)("g",{children:[c?(0,r.jsx)("path",{d:c,fill:e.color,opacity:.7}):null,(0,r.jsx)("path",{d:o,fill:"none",stroke:e.color,strokeWidth:1,shapeRendering:"crispEdges"})]})}function ne(e,t,a,i=1){const[n,s]=t,o=.02*(s-n),r=e.filter(e=>e.us>=n-o&&e.us<=s+o);if(r.length<=1872*i)return r;const c=[];let l=Number.NaN,d=null,h=null;const u=()=>{d&&h&&(d.us<=h.us?c.push(d,h):c.push(h,d))};for(const f of r){const e=Math.round(a(f.us)/(1/i));e!==l?(u(),l=e,d=f,h=f):(f.value<d.value&&(d=f),f.value>h.value&&(h=f))}return u(),c}function se(e,t,a){const i=(a-t)/e.reduce((e,t)=>e+t,0),n=[];let s=t;for(const o of e)n.push(p(s)),s+=o*i;return n.push(p(s)),{unitH:i,rowTop:e=>n[e],rowH:e=>n[e+1]-n[e]}}a.d(t,["CC",0,V,"Rb",0,_,"XP",0,F,"au",0,Z,"c7",0,j,"f4",0,Y,"jZ",0,J,"jl",0,v,"pC",0,x,"uK",0,M,"us",0,(e,t=4)=>function(e,t=4){if(0===e)return"0 s";const a=Math.abs(e);let i=1e-12,n="ps";for(const[s,o]of b)if(a>=s){i=s,n=o;break}return`${w((e/i).toPrecision(t))} ${n}`}(1e-6*e,t),"wl",0,E])},90372(e,t,a){a.d(t,{QI:()=>m,U6:()=>p,nE:()=>g,qB:()=>n,qQ:()=>s,yc:()=>x});const i=e=>e<0?0:e>1?1:e;function n(e,t,a){return i((e-t)/(a-t))}function s(e){let t=0;const a=e.map(([e,a,i])=>{const n=t;return t+=a,{id:e,from:n,to:t,caption:i}}),i=a[a.length-1].to,s=a[a.length-2].from+.8,o=new Map(a.map(e=>[e.id,e])),r=e=>{const t=o.get(e);if(!t)throw new Error(`no scene "${e}" in the timeline`);return t},c=(e,t=0)=>r(e).from+t;return{SCENES:a,LOOP:i,STATIC_FRAME:s,scene:r,currentScene:e=>{for(const t of a)if(e<t.to)return t;return a[a.length-1]},at:(e,t,a,i)=>{const s=r(t);return n(e,s.from+a,s.from+a+i)},mark:c,past:(e,t,a=0)=>e>=c(t,a)}}const o=s([["idle",1.2,"An SP259 on the bench"],["capture",3.4,"Capturing 9 channels at 250 MS/s"],["look-capture",1,"8 ms, end to end"],["navigate",2,"Zooming in on the traffic"],["look-zoom",.8,"The I2C burst, up close"],["add-i2c",7,"Adding the I2C decoder"],["look-i2c",1.2,"I2C: address, ACK, data, NACK"],["add-1wire",4.8,"Adding the 1-Wire decoder"],["look-1wire",1.2,"1-Wire: reset, presence, ROM command"],["add-pwm",4.6,"Adding the PWM decoder"],["look-pwm",1.2,"It draws a virtual analog channel"],["drag-vac",2.4,"Dragging it under CH3, where it belongs"],["look-vac",1.2,"The duty cycle, right below its PWM"],["hex",2.6,"Opening the Hex view"],["look-hex",1.2,"Every byte, tinted by its channel"],["packet",2.2,"Opening the Packet view"],["look-packet",1.2,"One row per field, coloured by the script"],["filter",2.6,"Filtering what the decoders found"],["look-filter",1,"Two rows left, their indices intact"],["markers",3.8,"Marking and measuring"],["look-measure",1.4,"900 \xb5s between M1 and M2"],["zoom-out",2.2,"Back out to the whole capture"],["look-sine",1.8,"The duty cycle sweeps a sine over 8 ms"],["hold",.8,""]]),r=(o.SCENES,o.LOOP),c=o.STATIC_FRAME,l=(o.scene,o.currentScene),d=o.at,h=o.mark,u=o.past,f=e=>1-Math.pow(1-e,3);function p(e){return e<=0||e>=1?0:Math.sin(e*Math.PI)}function m(e,t=.15,a=.15){return e<=0||e>=1?0:e<t?f(e/t):e>1-a?f((1-e)/a):1}function x(e,t,a=.35){if(e<=0)return 0;if(e>=1)return t;const n=1/(t+t*a);let s=0;for(let o=0;o<t;o++)s+=i((e-o*n*(1+a))/n);return s}function g(e,t){return e.slice(0,Math.round(i(t)*e.length))}a.d(t,["B6",0,u,"Cc",0,(e,t,a)=>e+(t-e)*a,"Gy",0,h,"J$",0,i,"am",0,e=>e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2,"at",0,d,"hN",0,r,"oW",0,l,"t8",0,c,"vT",0,f])},94387(e,t,a){a.d(t,{Cn:()=>r,KT:()=>S,OM:()=>j,uh:()=>M,vp:()=>m});var i=a(99482);
1const n=8e3,s=[0,n],o={Plain:0,Success:1,Warning:2,Error:3};class r{edges=[];constructor(e){this.initial=e,this.level=e}at(e,t){t!==this.level&&(this.edges.push(e),this.level=t)}low(e){this.at(e,0)}high(e){this.at(e,1)}pulse(e,t){this.low(e),this.high(e+t)}}const c=e=>[7,6,5,4,3,2,1,0].map(t=>e>>t&1),l=e=>[0,1,2,3,4,5,6,7].map(t=>e>>t&1),d=10,h=2250,u=[{value:80,ack:!0,address:!0},{value:165,ack:!0},{value:60,ack:!1}];const f=480;function p(e,t,a){for(const i of l(a))e.pulse(t+2,i?6:60),t+=70;return t}function m(e,t){const a=new r(1);return e.forEach((e,i)=>{let n=e;a.low(n),n+=8.68;for(const s of l(t[i%t.length]))s?a.high(n):a.low(n),n+=8.68;a.high(n)}),a}const x=e=>.5+.4*Math.sin(2*Math.PI*e/4e3);const g=function(){const e=new r(1),t=new r(1),a=[];t.low(h),a.push({ch:6,t0:2247,t1:2254,texts:["START","ST","S"],emph:o.Plain});let i=2255;for(const n of u){const s=i,r=n.address?n.value<<1:n.value;for(const a of c(r))a?t.high(i):t.low(i),e.high(i+2.5),e.low(i+7.5),i+=d;a.push({ch:6,t0:s,t1:i,texts:n.address?["Write to 0x50 - R/W = 0","Write to 0x50","WR 0x50","0x50"]:[`DATA = 0x${M(n.value)}`,`0x${M(n.value)}`],emph:o.Plain}),n.ack?t.low(i):t.high(i),e.high(i+2.5),e.low(i+7.5),a.push({ch:6,t0:i,t1:i+d,texts:n.ack?["ACK","A"]:["NACK","N"],emph:n.ack?o.Plain:o.Error}),i+=d}return t.low(i),e.high(i+2.5),t.high(i+5),a.push({ch:6,t0:i,t1:i+d,texts:["STOP","SP","P"],emph:o.Plain}),{scl:e,sda:t,items:a,end:i+d}}(),b=function(){const e=new r(1),t=[],a=400;e.pulse(a,f),t.push({ch:4,t0:a,t1:880,texts:["MASTER RESET PULSE (480.0 us)","RESET PULSE","RESET","R"],emph:o.Plain});const i=930;e.pulse(i,120),t.push({ch:4,t0:i,t1:1050,texts:["SLAVE PRESENCE (120.0 us)","PRESENCE","PRES","P"],emph:o.Success});let n=1110;const s=n;n=p(e,n,204),t.push({ch:4,t0:s,t1:n,texts:["SKIP ROM ","0xCC"],emph:o.Plain});const c=n+20;n=p(e,c,68),t.push({ch:4,t0:c,t1:n,texts:["CONVERT T","0x44"],emph:o.Plain});const l=2700;return e.pulse(l,f),t.push({ch:4,t0:l,t1:3180,texts:["MASTER RESET PULSE (480.0 us)","RESET PULSE","RESET","R"],emph:o.Plain}),t.push({ch:4,t0:3200,t1:3320,texts:["SLAVE PRESENCE MISSING","PRESENCE MISSING","MISSING","M"],emph:o.Warning}),{dq:e,items:t}}(),w=[S(1,"UART TX",m([600,700,810,4e3,4200,4410,6e3],[83,116,97,114,116])),S(2,"UART RX",m([1500,1620,5e3,5310,6500],[79,75,13,10,62])),S(3,"PWM",function(e){const t=new r(1);for(let a=0;a<n;a+=e)t.low(a+e*x(a)),t.high(a+e);return t}(125)),S(4,"1-Wire DQ",b.dq),S(5,"I2C SCL",g.scl),S(6,"I2C SDA",g.sda)];function S(e,t,a){return{index:e,name:t,color:i.Br[(e-1)%i.Br.length],initial:a.initial,edges:a.edges}}const y=g.items,v=b.items,k=(()=>{const e=[];for(let t=0;t<n;t+=125)e.push({us:t,value:100*x(t)});return e})(),_=k.map(({us:e,value:t})=>{const a=j(t.toPrecision(3));return{ch:3,t0:e,t1:e+125,texts:[`Duty cycle = ${a}%`,`Duty = ${a}%`,`D = ${a}%`,`${a}%`,`${Math.round(t)}`],emph:o.Plain}});function j(e){return e.includes(".")?e.replace(/0+$/,"").replace(/\.$/,""):e}function M(e){return e.toString(16).toUpperCase().padStart(2,"0")}const F=function(){const e=[],t=(t,a)=>{for(const i of a)e.push({value:i,ch:t})};return t(1,[83,116,97,114,116,105,110,103]),t(2,[79,75,13,10]),t(4,[204,68]),t(6,[80,165,60]),t(1,[83,101,108,102,32,116,101,115,116,32,111,107]),t(2,[62,32,13,10]),t(4,[204,190,80,5,75,70,127,255,12,16,28]),t(6,[80,44,145,0,122,63]),t(1,[82,101,97,100,121,13,10]),t(4,[204,68,40,255,100,30,140]),t(6,[80,165,60,0,17,34]),t(2,[79,75,13,10,62,32]),t(1,[84,101,109,112,32,50,51,46,53,13,10]),t(4,[204,190,98,1,75,70,127,255,2,16,31]),t(6,[80,165,60,126,1,128]),t(2,[62,32,13,10,79,75,13,10]),e.slice(0,112)}();const P=function(){const e=[],t=t=>e.push(t),[a]=v;return t({start:a.t0,end:2240,source:"1-Wire on CH 4",ch:4,title:"1-WIRE FRAME",content:"CH4",color:"wrap",child:!1}),t({start:a.t0,end:a.t1,source:"1-Wire on CH 4",ch:4,title:"Reset",content:"480.0 us",color:"misc",child:!0}),t({start:930,end:1050,source:"1-Wire on CH 4",ch:4,title:"Presence",content:"120.0 us",color:"check",child:!0}),t({start:1110,end:1670,source:"1-Wire on CH 4",ch:4,title:"ROM cmd",content:"SKIP ROM",color:"head",child:!0}),t({start:1690,end:2250,source:"1-Wire on CH 4",ch:4,title:"Function",content:"CONVERT T",color:"data",child:!0}),t({start:h,end:g.end,source:"I2C",ch:6,title:"I2C 0x50 WR[2]",content:"CH6",color:"wrap",child:!1}),t({start:h,end:2255,source:"I2C",ch:6,title:"Start",content:"START",color:"wrap",child:!0}),t({start:2255,end:2335,source:"I2C",ch:6,title:"Address",content:"Write to 0x50",color:"preamble",child:!0}),t({start:2335,end:2345,source:"I2C",ch:6,title:"Addr Ack",content:"ACK",color:"check",child:!0}),t({start:2345,end:2425,source:"I2C",ch:6,title:"Data[0]",content:"0xA5",color:"data",child:!0}),t({start:2425,end:2435,source:"I2C",ch:6,title:"Ack",content:"ACK",color:"check",child:!0}
1),t({start:2435,end:2515,source:"I2C",ch:6,title:"Data[1]",content:"0x3C",color:"data",child:!0}),t({start:2515,end:2525,source:"I2C",ch:6,title:"Ack",content:"NACK",color:"error",child:!0}),t({start:2525,end:2535,source:"I2C",ch:6,title:"Stop",content:"STOP",color:"wrap",child:!0}),t({start:2700,end:3320,source:"1-Wire on CH 4",ch:4,title:"1-WIRE FRAME",content:"CH4",color:"wrap",child:!1}),t({start:2700,end:3180,source:"1-Wire on CH 4",ch:4,title:"Reset",content:"480.0 us",color:"misc",child:!0}),t({start:3200,end:3320,source:"1-Wire on CH 4",ch:4,title:"Presence",content:"MISSING",color:"error",child:!0}),e.map((e,t)=>({...e,index:t+1}))}();a.d(t,["A2",0,[2200,2600],"Dy",0,s,"NE",0,v,"PD",0,c,"YR",0,[{name:"I2C",file:"i2c.js",version:"0.17",channels:"CH5, CH6",items:1248},{name:"1-Wire on CH 4",file:"1-wire.js",version:"0.15",channels:"CH4",items:386},{name:"PWM",file:"pwm.js",version:"0.7",channels:"CH3",items:3200}],"Yc",0,F,"Zp",0,P,"aY",0,_,"f",0,o,"gm",0,{wrap:["#FF8C00","#FFA500"],head:["#FF66CC","#FF99CC"],preamble:["#fffd01","#fcfc5d"],data:["#33FFFF","#99FFFF"],misc:["#CC6600","#FF8000"],check:["#33FF66","#66FF99"],error:["#FF0000","#FF8080"]},"l_",0,w,"lr",0,[300,3400],"mQ",0,k,"mc",0,y,"oB",0,[{name:"1-Wire",version:"0.15",author:"Vladislav Kosinov, Alexander Goomenyuk",file:"1-wire.js",description:["1-Wire protocol analyzer. Decodes Reset,","presence and byte fields."]},{name:"CAN Bus",version:"1.0",author:"Ibrahim KAMAL",file:"can.js",description:["CAN bus decoder."]},{name:"I2C",version:"0.17",author:"Ibrahim KAMAL",file:"i2c.js",description:["I2C support for ScanaStudio."]},{name:"I2S",version:"0.2",author:"Ibrahim KAMAL",file:"i2s.js",description:["I2S audio bus decoder."]},{name:"LIN Bus",version:"0.7",author:"Ibrahim KAMAL",file:"lin.js",description:["LIN bus decoder."]},{name:"PWM",version:"0.7",author:"Ibrahim Kamal, Camille Perrin, Nicolas BASTIT",file:"pwm.js",description:["PWM (Pulse Width Modulation) module. Can be","used to decode and generate PWM signals."]},{name:"SPI",version:"1.86",author:"Ibrahim KAMAL",file:"spi.js",description:["SPI bus decoder."]},{name:"UART",version:"1.55",author:"Ibrahim KAMAL",file:"uart.js",description:["UART / RS232 decoder."]}],"qV",0,{label:"Duty Cycle",unit:"%",color:"#118c8c",size:5,min:0,max:100}])},51020(e,t,a){a.d(t,{A:()=>r});a(96540);var i=a(22862),n=a(86405),s=a(74848);const{QE:o}=i;function r(){return o?(0,s.jsxs)("div",{className:"card shadow--nice padding--md margin-vert--md",children:[(0,s.jsx)("h4",{className:"margin-bottom--xs",children:"ScanaStudio C API"}),(0,s.jsxs)("p",{style:{marginBottom:"0.75rem"},children:["One cross-platform archive: ",(0,s.jsx)("code",{children:"include/scanastudio.h"}),", an example, and the prebuilt libraries for Windows (x86_64), Linux (x86_64) and macOS (universal). There is no per-platform download to choose from."]}),(0,s.jsxs)("a",{href:o.alias_url??o.url,className:"button button--outline button--primary",children:["Download ",o.filename??"the C API"]}),(0,s.jsxs)("div",{style:{marginTop:"0.75rem",fontSize:"0.8rem",color:"#888"},children:["v",o.version," \u2014 ",o.date,o.sha256&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("br",{}),(0,s.jsx)(n.A,{value:o.sha256})]})]}),(0,s.jsx)("p",{style:{marginTop:"0.75rem",marginBottom:0,fontSize:"0.85rem"},children:"The C library carries its own version number and is released independently of the ScanaStudio application."})]}):null}},86405(e,t,a){a.d(t,{A:()=>r});var i=a(96540),n=a(95924),s=a(66188),o=a(74848);function r({value:e,truncate:t}){const[a,r]=(0,i.useState)(!1),c=t?`${e.slice(0,t)}\u2026`:e;return(0,o.jsxs)("span",{style:{whiteSpace:"nowrap"},children:["sha256 ",(0,o.jsx)("code",{style:{fontSize:"0.75rem"},children:c})," ",(0,o.jsx)("button",{type:"button",title:a?"Copied":`Copy the full digest\n${e}`,"aria-label":a?"Digest copied":"Copy the full sha256 digest",onClick:async()=>{await async function(e){try{return await navigator.clipboard.writeText(e),!0}catch{try{const t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select();const a=document.execCommand("copy");return document.body.removeChild(t),a}catch{return!1}}}(e)&&(r(!0),setTimeout(()=>r(!1),1500))},style:{background:"none",border:"none",padding:"0 0.2rem",cursor:"pointer",color:a?"var(--ifm-color-success)":"inherit",font:"inherit"},children:(0,o.jsx)(n.gc,{icon:a?s.e68:s.jPR})})]})}},22862(e){e.exports=JSON.parse('{"IW":{"version":"6.0.18","date":"2026-09-28","commit":"f8e0df9","notes":"- feature: the ScanaQuad family (SQ25, SQ50, SQ100, SQ200), with its pattern generator, capture and I/O configuration\\n- feature: an inputs / outputs window with a wiring schematic of each channel\'s termination\\n- feature: in Generation or Mixed mode every output channel gets its own row holding what the next generation replays, filled from the capture, at a constant level, drawn by hand or by a script\\n- feature: signal builder scripts (on_build_signals) run with their configuration form, as in ScanaStudio 3\\n- feature: measurements on generation rows, and a mixed run shows the replayed region in a loop\\n- improvement: a new trigger step starts from the levels the previous step leaves instead of don\'t care\\n- improvement: the miniview\'s grips resize the visible zone\\n- improvement: the SP259 reports its clock and each memory bank in the device information\\n- fix: a multistep trigger combining a held level, an edge and a time window never fired\\n- fix: an external trigger on a device with no TRIG IN fired at once; it is now refused\\n- fix: the cursor readout inverted duty cycle and pulse level on every channel\\n- fix: a marker can no longer be placed or moved before the first sample\\n- fix: the memory depth list offered one step past the device\'
1s memory","changes":[{"tag":"feature","text":"the ScanaQuad family (SQ25, SQ50, SQ100, SQ200), with its pattern generator, capture and I/O configuration"},{"tag":"feature","text":"an inputs / outputs window with a wiring schematic of each channel\'s termination"},{"tag":"feature","text":"in Generation or Mixed mode every output channel gets its own row holding what the next generation replays, filled from the capture, at a constant level, drawn by hand or by a script"},{"tag":"feature","text":"signal builder scripts (on_build_signals) run with their configuration form, as in ScanaStudio 3"},{"tag":"feature","text":"measurements on generation rows, and a mixed run shows the replayed region in a loop"},{"tag":"improvement","text":"a new trigger step starts from the levels the previous step leaves instead of don\'t care"},{"tag":"improvement","text":"the miniview\'s grips resize the visible zone"},{"tag":"improvement","text":"the SP259 reports its clock and each memory bank in the device information"},{"tag":"fix","text":"a multistep trigger combining a held level, an edge and a time window never fired"},{"tag":"fix","text":"an external trigger on a device with no TRIG IN fired at once; it is now refused"},{"tag":"fix","text":"the cursor readout inverted duty cycle and pulse level on every channel"},{"tag":"fix","text":"a marker can no longer be placed or moved before the first sample"},{"tag":"fix","text":"the memory depth list offered one step past the device\'s memory"}],"downloads":{"windows_setup":{"filename":"ScanaStudio_6.0.18_x64-setup.exe","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.18_x64-setup.exe","sha256":"f573271e1ed30c6d5c50d526f673579cb63c1338a04935830ce13644ed2ff12b","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-Setup.exe"},"windows_portable":{"filename":"ScanaStudio-6.0.18-windows-x86_64-portable.zip","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.18-windows-x86_64-portable.zip","sha256":"9fda086bc4d550fb9a53fef077c72cd55b6cb1201a5a239c74087972b9f7a9e5","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-windows-x86_64-portable.zip"},"linux_tarball":{"filename":"ScanaStudio-6.0.18-linux-x86_64.tar.gz","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.18-linux-x86_64.tar.gz","sha256":"7b61ef22ecb915012c016bd6dfb0495c7c75735a2fdae0dcc10e3d4ddf7a0342","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-linux-x86_64.tar.gz"},"macos_dmg":{"filename":"ScanaStudio_6.0.18_universal.dmg","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.18_universal.dmg","sha256":"6017112459cdb119efe37a403c1feb8b47a963a07c9c9c48aae4d1c016e9bddf","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.dmg"}}},"D8":[{"version":"6.0.0","date":"2026-08-27","commit":"7afe526","notes":"- First public v6 build: Rust daemon plus Tauri interface, replacing the Qt v3\\n  application.\\n- Windows setup, Linux `.deb`/`.rpm`/AppImage and a standalone installer script,\\n  macOS disk image.\\n- Supported instruments: SP209, SP259/SP259i, SP1000G, SE254.","downloads":{"windows_setup":{"filename":"ScanaStudio_6.0.0_x64-setup.exe","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.0_x64-setup.exe","sha256":"ba6c4a6c73744cfeaa955a87c2e7637f118012dd0a2c581bb39580edd4bcfe00","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-Setup.exe"},"linux_deb":{"filename":"ScanaStudio_6.0.0_amd64.deb","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.0_amd64.deb","sha256":"2f2d100fa51225b02f0b2182d0b3f5946587ed2d092029701a81feeb6035224a","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.deb"},"linux_rpm":{"filename":"ScanaStudio-6.0.0-1.x86_64.rpm","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.0-1.x86_64.rpm","sha256":"bbcbfa749c2b74dfd04ba79e33932f7bf827c38115ddbbcf88391fd35f751b33","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.rpm"},"linux_appimage":{"filename":"ScanaStudio_6.0.0_amd64.AppImage","url":"https://cdn.ikalogic.
1com/dist/scanastudio-6/ScanaStudio_6.0.0_amd64.AppImage","sha256":"0fc9e88be3e9c07ad950023b941d1bd7fab1bef18463ce8f7af4ca10c52cca00","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.AppImage"},"linux_tarball":{"filename":"ScanaStudio-6.0.0-linux-x86_64.tar.gz","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.0-linux-x86_64.tar.gz","sha256":"b184acf9e56f60dbc5f350d1d3dca8b415f183264bcbd1c37df864163152f75e","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-linux-x86_64.tar.gz"},"macos_dmg":{"filename":"ScanaStudio_6.0.0_universal.dmg","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.0_universal.dmg","sha256":"0ba8d9ae495b3e929cfd686c4ad2bf7c5cbff0dceebedd1965fb7730987e976b","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.dmg"}}},{"version":"6.0.1","date":"2026-08-27","commit":"8c78855","notes":"- improvement: Linux installer package minor adjustments","changes":[{"tag":"improvement","text":"Linux installer package minor adjustments"}],"downloads":{"windows_setup":{"filename":"ScanaStudio_6.0.1_x64-setup.exe","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.1_x64-setup.exe","sha256":"f0048f5fc39a0235d0d666ff383d2ae3e259de10c0d591314b213b46a1db7d57","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-Setup.exe"},"linux_deb":{"filename":"ScanaStudio_6.0.1_amd64.deb","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.1_amd64.deb","sha256":"8893b23d5b95cbbe330208aa08cbdcbc116ce0d5d39eecc2432a72f4f8f8de90","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.deb"},"linux_rpm":{"filename":"ScanaStudio-6.0.1-1.x86_64.rpm","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.1-1.x86_64.rpm","sha256":"8cbea235d532bc735bbabada90d579ed3917af8e0f42a81fc910cfca79b3f089","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.rpm"},"linux_appimage":{"filename":"ScanaStudio_6.0.1_amd64.AppImage","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.1_amd64.AppImage","sha256":"79a5afef5665ec2b1a883c2dcdecaea1081e8fec1ac9e6cd4b9e888bd9d3a932","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.AppImage"},"linux_tarball":{"filename":"ScanaStudio-6.0.1-linux-x86_64.tar.gz","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.1-linux-x86_64.tar.gz","sha256":"66a20bf7e83b26ccc72ffe89edf7efbc26e345e93f70a1dd8a5fc8c305bcad13","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-linux-x86_64.tar.gz"},"macos_dmg":{"filename":"ScanaStudio_6.0.1_universal.dmg","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.1_universal.dmg","sha256":"033e00f08b899031e8506f9fcb0c0fc0433759b7adc52c8701a796781fdde157","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.dmg"}}},{"version":"6.0.2","date":"2026-08-27","commit":"a62318b","notes":"- fix: Auto-update not triggering","changes":[{"tag":"fix","text":"Auto-update not triggering"}],"downloads":{"windows_setup":{"filename":"ScanaStudio_6.0.2_x64-setup.exe","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.2_x64-setup.exe","sha256":"df57a691049f5cd016c6a33b7bf72bbb3a3dbf34edb796d42551ab68375a9ebf","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-Setup.exe"},"linux_deb":{"filename":"ScanaStudio_6.0.2_amd64.deb","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.2_amd64.deb","sha256":"4cf9c92e8b98d063b56fbc356b01f6e5875859cfb54de8b84d75a60dd4cf6593","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.deb"},"linux_rpm":{"filename":"ScanaStudio-6.0.2-1.x86_64.rpm","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.2-1.x86_64.rpm","sha256":"869f39d039b86dc056d05ddd7c23d324f3aad3a3fbef34b1418a1719404c1ecd","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.rpm"},"linux_appimage":{"filename":"ScanaStudio_6.0.2_amd64.AppImage","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.2_amd64.AppImage","sha256":"7a8bf2cbff4149aeeb67ed7ef62bbd880e1fc99bd158e7ba7ffe44c7e3dd0b06","alias_url":"https://cdn.ikalogic.
1com/dist/scanastudio-6/ScanaStudio.AppImage"},"linux_tarball":{"filename":"ScanaStudio-6.0.2-linux-x86_64.tar.gz","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.2-linux-x86_64.tar.gz","sha256":"5205a4c7eef538cdf6047ba304583ec264b75e36c5417a63118423629b5bf10f","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-linux-x86_64.tar.gz"},"macos_dmg":{"filename":"ScanaStudio_6.0.2_universal.dmg","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.2_universal.dmg","sha256":"6b8ac1a59859ecc105e3ac8cf6d31afa3859d9e6fe650bba4b356a9a677c3180","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.dmg"}}},{"version":"6.0.3","date":"2026-08-27","commit":"d296219","notes":"- fix: the installer rewrote every other desktop entry in the target directory to launch ScanaStudio","changes":[{"tag":"fix","text":"the installer rewrote every other desktop entry in the target directory to launch ScanaStudio"}],"downloads":{"windows_setup":{"filename":"ScanaStudio_6.0.3_x64-setup.exe","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.3_x64-setup.exe","sha256":"ff6ee0c5bc533855341db108eea8848c749fdc625eaaa2d9216a1237b8e33bd3","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-Setup.exe"},"linux_deb":{"filename":"ScanaStudio_6.0.3_amd64.deb","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.3_amd64.deb","sha256":"46cc14807d57618a7311d46a33b1d7045acea1f8440a5f4ca9cd30a9779b04c4","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.deb"},"linux_rpm":{"filename":"ScanaStudio-6.0.3-1.x86_64.rpm","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.3-1.x86_64.rpm","sha256":"40a457e6763c5f7e20290041734e33fd8d779ca5be7714dc44aec4a8364224f9","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.rpm"},"linux_appimage":{"filename":"ScanaStudio_6.0.3_amd64.AppImage","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.3_amd64.AppImage","sha256":"822b479ae18e0a589126832aae009ddcdb18b4cf7a8f71ed2a72effea29e58f2","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.AppImage"},"linux_tarball":{"filename":"ScanaStudio-6.0.3-linux-x86_64.tar.gz","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.3-linux-x86_64.tar.gz","sha256":"064c80ea13f62ddb377dbd86e7157a5959c593045c9b60cf823ed5343f0e4f27","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-linux-x86_64.tar.gz"},"macos_dmg":{"filename":"ScanaStudio_6.0.3_universal.dmg","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.3_universal.dmg","sha256":"738d728921d710eaa849a5744799fbc7b1448eda2f85ad1887abdd0cd3e4f66a","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.dmg"}}},{"version":"6.0.4","date":"2026-08-27","commit":"8f274e2","notes":"- fix: uninstalling no longer deletes a launcher entry that the install had replaced","changes":[{"tag":"fix","text":"uninstalling no longer deletes a launcher entry that the install had replaced"}],"downloads":{"windows_setup":{"filename":"ScanaStudio_6.0.4_x64-setup.exe","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.4_x64-setup.exe","sha256":"36833ff5f487c2a6986bc956dfc6693cc444e4f961152c411b33436ea27c8114","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-Setup.exe"},"linux_deb":{"filename":"ScanaStudio_6.0.4_amd64.deb","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.4_amd64.deb","sha256":"ce8e486a958d97f8c08db1f455232d0838f9bc48ab084c17a9608834cd0363b5","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.deb"},"linux_rpm":{"filename":"ScanaStudio-6.0.4-1.x86_64.rpm","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.4-1.x86_64.rpm","sha256":"5df7596d872288511a4ca583b38ea757952faf28894c3e4fc1ca64e5efb3b8f6","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.rpm"},"linux_appimage":{"filename":"ScanaStudio_6.0.4_amd64.AppImage","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.4_amd64.AppImage","sha256":"c64c5c5d58d7d6634aff5bb2b30439d9be378e1c027a6d08bc3bb4a7b9659b54","alias_url":"https://cdn.ikalogic.
1com/dist/scanastudio-6/ScanaStudio.AppImage"},"linux_tarball":{"filename":"ScanaStudio-6.0.4-linux-x86_64.tar.gz","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.4-linux-x86_64.tar.gz","sha256":"4e5e73c1418d03ddbcb55f3706b47025285bb363e227a24cf881b9e8b7395459","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-linux-x86_64.tar.gz"},"macos_dmg":{"filename":"ScanaStudio_6.0.4_universal.dmg","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.4_universal.dmg","sha256":"1375f5b6c4a054fecc15aa387f7070e5f64e5c00a280f7e08ef5a702a8390bb0","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.dmg"}}},{"version":"6.0.5","date":"2026-08-27","commit":"b186f2b","notes":"- feature: an update installs itself: the banner opens a dialog with the release notes, and a script install replaces itself and restarts\\n- breaking: Linux ships the installer tarball only; the deb, rpm and AppImage are no longer published","changes":[{"tag":"feature","text":"an update installs itself: the banner opens a dialog with the release notes, and a script install replaces itself and restarts"},{"tag":"breaking","text":"Linux ships the installer tarball only; the deb, rpm and AppImage are no longer published"}],"downloads":{"linux_tarball":{"filename":"ScanaStudio-6.0.5-linux-x86_64.tar.gz","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.5-linux-x86_64.tar.gz","sha256":"cdb36b332bbe0a248113761a5ba8ad3e77ab96f43148b156775e3938b46a8ca3","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-linux-x86_64.tar.gz"}}},{"version":"6.0.6","date":"2026-08-27","commit":"0641f24","notes":"- improvement: a test release, to prove an update installs itself","changes":[{"tag":"improvement","text":"a test release, to prove an update installs itself"}],"downloads":{"linux_tarball":{"filename":"ScanaStudio-6.0.6-linux-x86_64.tar.gz","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.6-linux-x86_64.tar.gz","sha256":"3e8ce263fc33f74fbda530f684119103926862b0c40be604d6268e559c6aa2c3","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-linux-x86_64.tar.gz"}}},{"version":"6.0.7","date":"2026-08-27","commit":"154b165","notes":"- fix: closing and reopening no longer reports a crash that did not happen","changes":[{"tag":"fix","text":"closing and reopening no longer reports a crash that did not happen"}],"downloads":{"linux_tarball":{"filename":"ScanaStudio-6.0.7-linux-x86_64.tar.gz","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.7-linux-x86_64.tar.gz","sha256":"7773679382bda6b2c41202a5677b451c911b9b6da4b3a99a5e20cea78b84c799","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-linux-x86_64.tar.gz"}}},{"version":"6.0.8","date":"2026-08-27","commit":"b9cfd68","notes":"- fix: an update that fails now says why, and the installer runs under the shell it asks for","changes":[{"tag":"fix","text":"an update that fails now says why, and the installer runs under the shell it asks for"}],"downloads":{"linux_tarball":{"filename":"ScanaStudio-6.0.8-linux-x86_64.tar.gz","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.8-linux-x86_64.tar.gz","sha256":"b464ab66e91e5aebf6b42d9dc448ca50efdc28abbc4d311c3ab6523075037711","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-linux-x86_64.tar.gz"}}},{"version":"6.0.9","date":"2026-08-27","commit":"7b492e7","notes":"- fix: turning down the crash report now answers it, instead of asking again at every start-up","changes":[{"tag":"fix","text":"turning down the crash report now answers it, instead of asking again at every start-up"}],"downloads":{"linux_tarball":{"filename":"ScanaStudio-6.0.9-linux-x86_64.tar.gz","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.9-linux-x86_64.tar.gz","sha256":"5243dce250d63702dc83b5a944b435934c3dd90f6e27d65306bc47dd3e2196b5","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-linux-x86_64.tar.gz"}}},{"version":"6.0.10","date":"2026-08-27","commit":"28a4eb2","notes":"- fix: The Windows update now closes ScanaStudio and hands over to the setup wizard, which installs the new version and starts it.\\n- improvement: The macOS update replaces the application and reopens it, rather than leaving the disk image for you to drag.","changes":[{"tag":"fix","text":"The Windows update now closes ScanaStudio and hands over to the setup wizard, which installs the new version and starts it."},{"tag":"improvement","text":"The macOS update replaces the application and reopens it, rather than leaving the disk image for you to drag."}],"downloads":{"windows_setup":{"filename":"ScanaStudio_6.0.10_x64-setup.exe","url":"https://cdn.ikalogic.
1com/dist/scanastudio-6/ScanaStudio_6.0.10_x64-setup.exe","sha256":"941e381cefd33464d4dab62519d3fd70362b7e5fe41e71f318ebb51e3e6ee282","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-Setup.exe"},"linux_tarball":{"filename":"ScanaStudio-6.0.10-linux-x86_64.tar.gz","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.10-linux-x86_64.tar.gz","sha256":"de12079e096f6728469d92ff950ee74d4bd0c59b835d120ff616a20438bfc1cd","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-linux-x86_64.tar.gz"},"macos_dmg":{"filename":"ScanaStudio_6.0.10_universal.dmg","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.10_universal.dmg","sha256":"4f4fd304c7d6a621f3c7282f5c09b5606e2a66be9c3e36a4ec4ba17862de616b","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.dmg"}}},{"version":"6.0.11","date":"2026-09-01","commit":"4f61e41","notes":"- feature: draw over a capture with the signal overlay, then keep it or throw it away\\n- feature: the waveform can be driven from the keyboard\\n- feature: a crash now produces a report you read before deciding to send it\\n- feature: the interface can talk to a daemon on another machine\\n- improvement: settings are found by name instead of by tab, and each one says what it does\\n- improvement: the home screen is a wall of devices\\n- fix: maximizing a detached view no longer docks it\\n- fix: item views keep up with a drag of the scrollbar\\n- fix: a canvas that changes size is repainted before it is shown","changes":[{"tag":"feature","text":"draw over a capture with the signal overlay, then keep it or throw it away"},{"tag":"feature","text":"the waveform can be driven from the keyboard"},{"tag":"feature","text":"a crash now produces a report you read before deciding to send it"},{"tag":"feature","text":"the interface can talk to a daemon on another machine"},{"tag":"improvement","text":"settings are found by name instead of by tab, and each one says what it does"},{"tag":"improvement","text":"the home screen is a wall of devices"},{"tag":"fix","text":"maximizing a detached view no longer docks it"},{"tag":"fix","text":"item views keep up with a drag of the scrollbar"},{"tag":"fix","text":"a canvas that changes size is repainted before it is shown"}],"downloads":{"windows_setup":{"filename":"ScanaStudio_6.0.11_x64-setup.exe","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.11_x64-setup.exe","sha256":"2ae05ae0c761105d3455ba621abf74f50fa2ae7b6b861a4dd721022364931574","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-Setup.exe"},"linux_tarball":{"filename":"ScanaStudio-6.0.11-linux-x86_64.tar.gz","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.11-linux-x86_64.tar.gz","sha256":"782585ae1e23132d4cfbe4d0531499021c22f9ef25d81156b1d0030cb9140260","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-linux-x86_64.tar.gz"},"macos_dmg":{"filename":"ScanaStudio_6.0.11_universal.dmg","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.11_universal.dmg","sha256":"d3978d0e86f47cd1b6a3de24e55a83bd22816eb13a5678c52428b0f6ad80b0f2","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.dmg"}}},{"version":"6.0.13","date":"2026-09-02","commit":"86c14e0","notes":"- fix: Update internal deploy system\\n- feature: Add preliminary support for SDK (Python,JS, C, Rust)","changes":[{"tag":"fix","text":"Update internal deploy system"},{"tag":"feature","text":"Add preliminary support for SDK (Python,JS, C, Rust)"}],"downloads":{"windows_setup":{"filename":"ScanaStudio_6.0.13_x64-setup.exe","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.13_x64-setup.exe","sha256":"59c9b1d72711525af9921163af24e6f0b1ffb8d08b2dc97c487f23b73c9decdb","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-Setup.exe"},"linux_tarball":{"filename":"ScanaStudio-6.0.13-linux-x86_64.tar.gz","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.13-linux-x86_64.tar.gz","sha256":"672e75a40cfeb913c2bfc0322c4a5861c2ad80134fd9f0daa01c49ab031b27bc","alias_url":"https://cdn.ikalogic.
1com/dist/scanastudio-6/ScanaStudio-linux-x86_64.tar.gz"},"macos_dmg":{"filename":"ScanaStudio_6.0.13_universal.dmg","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.13_universal.dmg","sha256":"2508921f06e300959fd3cb9f623bc4c09504bd7f0e45804c97ee6078d0b20e63","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.dmg"}}},{"version":"6.0.14","date":"2026-09-11","commit":"59a4973","notes":"- feature: state mode (sampling on an external clock) on the SP209, SP259 and SP1000G, with positions shown in states rather than seconds\\n- feature: the SP209 has a native driver, Linux included; the SP209i and SP259i industrial receivers reach the device\\n- feature: log view \u2014 a decoder\'s console output, with filters and clearing\\n- feature: fifteen themes, and a waveform that follows them\\n- feature: scripts can read and write files (the file_system_* API), granted per script and off by default\\n- feature: open a ScanaStudio 3/5 workspace\\n- feature: a reopened workspace offers the settings it was captured with, and opens at its device\'
1s sample rate\\n- feature: the cursor readout says what you ask it to\\n- improvement: home screen \u2014 one strip of device cards, and a device landing no longer moves the screen\\n- improvement: a capture says \\"preparing\\" while the device opens, and a booting device is reported as such\\n- improvement: a running acquisition freezes what it cannot change, and the pattern generator says whether it is armed\\n- improvement: the SP1000G shows its USB recovery instead of looking frozen\\n- improvement: SP1000G core 0x18 (captures more than once per FPGA load), SP259 firmware v8, SE254 firmware v3\\n- fix: the SP259 flexitrig counter runs at 125 MHz, not 250\\n- fix: SP209 threshold groups were sent in the wrong order\\n- fix: text is no longer selectable on macOS and Linux\\n- fix: a device with no cached capabilities no longer kills the dock\\n- fix: a workspace file that cannot be read says so in one sentence\\n- fix: the script manager\'s New sheet swallowed the file name and the author URL\\n- fix: pulse width constraints are sent instead of dropped","changes":[{"tag":"feature","text":"state mode (sampling on an external clock) on the SP209, SP259 and SP1000G, with positions shown in states rather than seconds"},{"tag":"feature","text":"the SP209 has a native driver, Linux included; the SP209i and SP259i industrial receivers reach the device"},{"tag":"feature","text":"log view \u2014 a decoder\'s console output, with filters and clearing"},{"tag":"feature","text":"fifteen themes, and a waveform that follows them"},{"tag":"feature","text":"scripts can read and write files (the file_system_* API), granted per script and off by default"},{"tag":"feature","text":"open a ScanaStudio 3/5 workspace"},{"tag":"feature","text":"a reopened workspace offers the settings it was captured with, and opens at its device\'
1s sample rate"},{"tag":"feature","text":"the cursor readout says what you ask it to"},{"tag":"improvement","text":"home screen \u2014 one strip of device cards, and a device landing no longer moves the screen"},{"tag":"improvement","text":"a capture says \\"preparing\\" while the device opens, and a booting device is reported as such"},{"tag":"improvement","text":"a running acquisition freezes what it cannot change, and the pattern generator says whether it is armed"},{"tag":"improvement","text":"the SP1000G shows its USB recovery instead of looking frozen"},{"tag":"improvement","text":"SP1000G core 0x18 (captures more than once per FPGA load), SP259 firmware v8, SE254 firmware v3"},{"tag":"fix","text":"the SP259 flexitrig counter runs at 125 MHz, not 250"},{"tag":"fix","text":"SP209 threshold groups were sent in the wrong order"},{"tag":"fix","text":"text is no longer selectable on macOS and Linux"},{"tag":"fix","text":"a device with no cached capabilities no longer kills the dock"},{"tag":"fix","text":"a workspace file that cannot be read says so in one sentence"},{"tag":"fix","text":"the script manager\'s New sheet swallowed the file name and the author URL"},{"tag":"fix","text":"pulse width constraints are sent instead of dropped"}],"downloads":{"windows_setup":{"filename":"ScanaStudio_6.0.14_x64-setup.exe","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.14_x64-setup.exe","sha256":"fb703abe7f5a31c5a77c81467695df95b091c94064ff4627eb9f8596137bab8a","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-Setup.exe"},"linux_tarball":{"filename":"ScanaStudio-6.0.14-linux-x86_64.tar.gz","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.14-linux-x86_64.tar.gz","sha256":"4476082452ea02205d0a5d75cd51ff72503b049aee6e1dce9a7e598b3ee2dd28","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-linux-x86_64.tar.gz"},"macos_dmg":{"filename":"ScanaStudio_6.0.14_universal.dmg","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.14_universal.dmg","sha256":"90af59f02d9c36d6b787b674110f722a7fd27fc7eb52f657ef06e29cff9453bd","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.dmg"}}},{"version":"6.0.15","date":"2026-09-12","commit":"5b7b109","notes":"- fix: the crash report can be sent \u2014 Send now reaches Ikalogic instead of answering that the build has no address\\n- fix: the script library is the same folder as ScanaStudio v3, so both versions share one set of scripts\\n- fix: the \\"Ikalogic drivers\\" link on the home screen opens the download page instead of starting the download\\n- improvement: v3 scripts run the way v3 ran them \u2014 multi-page config GUIs are drawn page by page, a decoder keeps its globals between passes, and a finished capture gets one last pass\\n- improvement: the SP1000G pattern generator reports where it stepped, so a script can line a pattern up with the signals it produced\\n- improvement: a generator script that also decodes offers to attach that side too, with the options already filled in\\n- fix: a decoder pass no longer hangs until the end of the capture on a channel left idle\\n- fix: a script\'s direct file access takes effect as soon as it is granted\\n- fix: a capture that fails says why","changes":[{"tag":"fix","text":"the crash report can be sent \u2014 Send now reaches Ikalogic instead of answering that the build has no address"},{"tag":"fix","text":"the script library is the same folder as ScanaStudio v3, so both versions share one set of scripts"},{"tag":"fix","text":"the \\"Ikalogic drivers\\" link on the home screen opens the download page instead of starting the download"},{"tag":"improvement","text":"v3 scripts run the way v3 ran them \u2014 multi-page config GUIs are drawn page by page, a decoder keeps its globals between passes, and a finished capture gets one last pass"},{"tag":"improvement","text":"the SP1000G pattern generator reports where it stepped, so a script can line a pattern up with the signals it produced"},{"tag":"improvement","text":"a generator script that also decodes offers to attach that side too, with the options already filled in"},{"tag":"fix","text":"a decoder pass no longer hangs until the end of the capture on a channel left idle"},{"tag":"fix","text":"a script\'s direct file access takes effect as soon as it is granted"},{"tag":"fix","text":"a capture that fails says why"}],"downloads":{"windows_setup":{"filename":"ScanaStudio_6.0.15_x64-setup.exe","url":"https://cdn.ikalogic.
1com/dist/scanastudio-6/ScanaStudio_6.0.15_x64-setup.exe","sha256":"92531359dcd816368f1c23af7fe9147c2a416757a495f9e4a4dfc1ff14252151","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-Setup.exe"},"linux_tarball":{"filename":"ScanaStudio-6.0.15-linux-x86_64.tar.gz","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.15-linux-x86_64.tar.gz","sha256":"132947338046c81e4dea3d5ba90486534c37f192d61d1f68652f59eb5f650e5c","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-linux-x86_64.tar.gz"},"macos_dmg":{"filename":"ScanaStudio_6.0.15_universal.dmg","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.15_universal.dmg","sha256":"b3dc72b66a66f8d03a457fdd0966178f4ff59a9b18b23ce84d1bcae87e779ab2","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.dmg"}}},{"version":"6.0.16","date":"2026-09-12","commit":"8ed2bcd","notes":"- fix: a measurement no longer stays on \\"Calculating\\" after its result is in","changes":[{"tag":"fix","text":"a measurement no longer stays on \\"Calculating\\" after its result is in"}],"downloads":{"windows_setup":{"filename":"ScanaStudio_6.0.16_x64-setup.exe","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.16_x64-setup.exe","sha256":"a67afacbdf202fb4bb38a06b8d13a4555a8fdc3ca7ce9313fda7c8075aa1d205","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-Setup.exe"},"linux_tarball":{"filename":"ScanaStudio-6.0.16-linux-x86_64.tar.gz","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.16-linux-x86_64.tar.gz","sha256":"471b1cd4bfcda9789ea19a56093d55c3706a41156bef77c1fa2c2c06e007ca2a","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-linux-x86_64.tar.gz"},"macos_dmg":{"filename":"ScanaStudio_6.0.16_universal.dmg","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.16_universal.dmg","sha256":"adb029829cdf2c19881963b9cfaef17f69d1be4b3cba2090839338685f22f6f8","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.dmg"}}},{"version":"6.0.17","date":"2026-09-23","commit":"c597252","notes":"- feature: a portable edition for Windows \u2014 a .zip that runs where it is unpacked, keeps its logs, autosaves and script library in a data folder beside it, and updates itself in place\\n- feature: rows can be selected (click, Ctrl, Shift), dragged as a group, and pinned to the top of the plot while the rest scrolls behind them\\n- feature: a channel follows the pointer while it is dragged, and a drag held at the edge scrolls the view\\n- feature: a probe port\'s configuration can be copied and pasted onto another port, in the same workspace or another one\\n- feature: a trigger engine\'s configuration can be copied and pasted onto the other engine or another workspace, adapted to the target device\\n- feature: every workspace ScanaStudio 5 opens can now be imported, including files from ScanaStudio 2 to 4.1, with hidden channels and row order kept\\n- feature: the script library folder can be changed in Settings\\n- feature: the third-party licence notices ship with the application and open from the About window\\n- improvement: the About window shows the script API and SDK versions, and where the server runs\\n- improvement: the P992 window keeps a threshold per channel, saved with the workspace\\n- improvement: SP1000G controller firmware 0.12.252\\n- improvement: a capture that is refused offers \\"Show the trigger\\" only when the trigger is the reason\\n- fix: a click beside a dialog no longer closes it and throws away what was typed\\n- fix: Cancel in Settings undoes every change, and OK is the only thing that applies one\\n- fix: a server port taken by another program no longer makes the application restart its server again and again; a free port is offered instead\\n- fix: on Windows, a second server can no longer start on a port that is already in use\\n- fix: buttons that would open a folder on a remote server\'s machine are disabled instead of opening the wrong local folder\\n- fix: decoder items drawn under a curve placed above a channel land on the right row\\n- fix: layered decoders using sync_decode produce their items again\\n- fix: a pattern generator\'s settings form reads the sample rate correctly\\n- fix: a capture imported from a ScanaStudio 5 demo device opens on the matching demo device","changes":[{"tag":"feature","text":"a portable edition for Windows \u2014 a .zip that runs where it is unpacked, keeps its logs, autosaves and script library in a data folder beside it, and updates itself in place"}
1,{"tag":"feature","text":"rows can be selected (click, Ctrl, Shift), dragged as a group, and pinned to the top of the plot while the rest scrolls behind them"},{"tag":"feature","text":"a channel follows the pointer while it is dragged, and a drag held at the edge scrolls the view"},{"tag":"feature","text":"a probe port\'s configuration can be copied and pasted onto another port, in the same workspace or another one"},{"tag":"feature","text":"a trigger engine\'s configuration can be copied and pasted onto the other engine or another workspace, adapted to the target device"},{"tag":"feature","text":"every workspace ScanaStudio 5 opens can now be imported, including files from ScanaStudio 2 to 4.1, with hidden channels and row order kept"},{"tag":"feature","text":"the script library folder can be changed in Settings"},{"tag":"feature","text":"the third-party licence notices ship with the application and open from the About window"},{"tag":"improvement","text":"the About window shows the script API and SDK versions, and where the server runs"},{"tag":"improvement","text":"the P992 window keeps a threshold per channel, saved with the workspace"},{"tag":"improvement","text":"SP1000G controller firmware 0.12.252"},{"tag":"improvement","text":"a capture that is refused offers \\"Show the trigger\\" only when the trigger is the reason"},{"tag":"fix","text":"a click beside a dialog no longer closes it and throws away what was typed"},{"tag":"fix","text":"Cancel in Settings undoes every change, and OK is the only thing that applies one"},{"tag":"fix","text":"a server port taken by another program no longer makes the application restart its server again and again; a free port is offered instead"},{"tag":"fix","text":"on Windows, a second server can no longer start on a port that is already in use"},{"tag":"fix","text":"buttons that would open a folder on a remote server\'s machine are disabled instead of opening the wrong local folder"},{"tag":"fix","text":"decoder items drawn under a curve placed above a channel land on the right row"},{"tag":"fix","text":"layered decoders using sync_decode produce their items again"},{"tag":"fix","text":"a pattern generator\'s settings form reads the sample rate correctly"},{"tag":"fix","text":"a capture imported from a ScanaStudio 5 demo device opens on the matching demo device"}],"downloads":{"windows_setup":{"filename":"ScanaStudio_6.0.17_x64-setup.exe","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.17_x64-setup.exe","sha256":"ad48a3698f11cca860f97ac8217609e2a91fe97f0d3c2c0df12f26679283d839","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-Setup.exe"},"windows_portable":{"filename":"ScanaStudio-6.0.17-windows-x86_64-portable.zip","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.17-windows-x86_64-portable.zip","sha256":"3239db0a77a6ac8fdaab8b358ba45df30434a24e7c311d428c267e556f341153","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-windows-x86_64-portable.zip"},"linux_tarball":{"filename":"ScanaStudio-6.0.17-linux-x86_64.tar.gz","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.17-linux-x86_64.tar.gz","sha256":"2733e0ffc9b57a8d3554f137337c9aa6b9d38431b695c97cdd0b15aef56d9102","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-linux-x86_64.tar.gz"},"macos_dmg":{"filename":"ScanaStudio_6.0.17_universal.dmg","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.17_universal.dmg","sha256":"1068ab38a4c2e0d701b0d3b8d0e1ae4b10a6a7dda505d982182d80c29f957b92","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.dmg"}}},{"version":"6.0.18","date":"2026-09-28","commit":"f8e0df9","notes":"- feature: the ScanaQuad family (SQ25, SQ50, SQ100, SQ200), with its pattern generator, capture and I/O configuration\\n- feature: an inputs / outputs window with a wiring schematic of each channel\'s termination\\n- feature: in Generation or Mixed mode every output channel gets its own row holding what the next generation replays, filled from the capture, at a constant level, drawn by hand or by a script\\n- feature: signal builder scripts (on_build_signals) run with their configuration form, as in ScanaStudio 3\\n- feature: measurements on generation rows, and a mixed run shows the replayed region in a loop\\n- improvement: a new trigger step starts from the levels the previous step leaves instead of don\'t care\\n- improvement: the miniview\'s grips resize the visible zone\\n- improvement: the SP259 reports its clock and each memory bank in the device information\\n- fix: a multistep trigger combining a held level, an edge and a time window never fired\\n- fix: an external trigger on a device with no TRIG IN fired at once; it is now refused\\n- fix: the cursor readout inverted duty cycle and pulse level on every channel\\n- fix: a marker can no longer be placed or moved before the first sample\\n- fix: the memory depth list offered one step past the device\'
1s memory","changes":[{"tag":"feature","text":"the ScanaQuad family (SQ25, SQ50, SQ100, SQ200), with its pattern generator, capture and I/O configuration"},{"tag":"feature","text":"an inputs / outputs window with a wiring schematic of each channel\'s termination"},{"tag":"feature","text":"in Generation or Mixed mode every output channel gets its own row holding what the next generation replays, filled from the capture, at a constant level, drawn by hand or by a script"},{"tag":"feature","text":"signal builder scripts (on_build_signals) run with their configuration form, as in ScanaStudio 3"},{"tag":"feature","text":"measurements on generation rows, and a mixed run shows the replayed region in a loop"},{"tag":"improvement","text":"a new trigger step starts from the levels the previous step leaves instead of don\'t care"},{"tag":"improvement","text":"the miniview\'s grips resize the visible zone"},{"tag":"improvement","text":"the SP259 reports its clock and each memory bank in the device information"},{"tag":"fix","text":"a multistep trigger combining a held level, an edge and a time window never fired"},{"tag":"fix","text":"an external trigger on a device with no TRIG IN fired at once; it is now refused"},{"tag":"fix","text":"the cursor readout inverted duty cycle and pulse level on every channel"},{"tag":"fix","text":"a marker can no longer be placed or moved before the first sample"},{"tag":"fix","text":"the memory depth list offered one step past the device\'s memory"}],"downloads":{"windows_setup":{"filename":"ScanaStudio_6.0.18_x64-setup.exe","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.18_x64-setup.exe","sha256":"f573271e1ed30c6d5c50d526f673579cb63c1338a04935830ce13644ed2ff12b","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-Setup.exe"},"windows_portable":{"filename":"ScanaStudio-6.0.18-windows-x86_64-portable.zip","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.18-windows-x86_64-portable.zip","sha256":"9fda086bc4d550fb9a53fef077c72cd55b6cb1201a5a239c74087972b9f7a9e5","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-windows-x86_64-portable.zip"},"linux_tarball":{"filename":"ScanaStudio-6.0.18-linux-x86_64.tar.gz","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-6.0.18-linux-x86_64.tar.gz","sha256":"7b61ef22ecb915012c016bd6dfb0495c7c75735a2fdae0dcc10e3d4ddf7a0342","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-linux-x86_64.tar.gz"},"macos_dmg":{"filename":"ScanaStudio_6.0.18_universal.dmg","url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio_6.0.18_universal.dmg","sha256":"6017112459cdb119efe37a403c1feb8b47a963a07c9c9c48aae4d1c016e9bddf","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio.dmg"}}}],"QE":{"version":"0.2.8","date":"2026-09-28","commit":"f8e0df9","filename":"scanastudio-c-0.2.8.zip","url":"https://cdn.ikalogic.com/dist/scanastudio-6/scanastudio-c-0.2.8.zip","sha256":"da6d3bac2099795e3f00bf84fed1687e72b950e1d8b5341cff81d6af238746d6","alias_url":"https://cdn.ikalogic.com/dist/scanastudio-6/ScanaStudio-C-API.zip"}}')}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.