Merging beta 1.1.1-4 release candidate

This commit is contained in:
Russel Yasol
2025-02-03 14:12:59 +08:00
parent 61a14f6b39
commit efc3ea460a
137 changed files with 379 additions and 524 deletions

View File

@@ -1,5 +1,5 @@
Package: sdxpinn-quecmanager-beta
Version: 1.1.1-3
Version: 1.1.1-4
Architecture: aarch64_cortex-a53
Maintainer: Russel Yasol dr-dolomite@github.com Cameron Thompson iamromulan@github.com
Source: github.com/iamromulan

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
self.__BUILD_MANIFEST=function(r,e,t){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:20,errorRate:1e-4,numBits:384,numHashes:14,bitArray:[1,0,0,0,1,1,e,r,r,r,r,e,e,r,e,e,r,r,r,e,e,e,e,e,r,r,e,e,r,e,e,r,r,r,r,e,e,e,e,e,e,r,e,r,e,e,e,r,r,e,r,e,r,e,e,e,e,e,r,e,r,r,r,r,e,r,e,e,e,e,r,e,r,r,e,r,e,e,r,r,e,r,e,e,e,r,r,r,e,r,e,r,e,e,r,r,e,r,e,e,r,r,e,e,r,r,r,e,r,r,e,r,e,r,e,r,r,r,e,e,r,r,r,e,r,e,e,e,e,r,e,r,r,r,r,r,r,r,r,r,e,r,e,e,e,r,r,e,e,e,e,r,e,r,r,r,r,r,r,r,e,r,e,e,e,r,e,r,r,e,e,r,e,r,r,r,e,e,r,r,r,e,e,r,r,e,r,e,r,r,r,r,r,r,e,e,r,r,r,e,e,e,e,r,e,r,r,r,e,r,r,r,e,r,e,r,r,r,r,r,e,r,e,e,e,r,e,e,r,e,e,e,r,r,r,r,r,e,e,r,e,e,e,e,r,e,r,r,e,r,r,e,e,r,e,e,r,r,r,e,r,e,r,r,r,e,r,e,e,r,r,e,r,e,r,e,r,r,r,e,r,e,r,r,r,r,e,e,e,e,r,r,e,e,r,r,r,e,r,e,r,r,e,r,e,r,r,r,e,e,r,e,r,r,r,r,r,e,r,e,r,r,r,r,e,e,e,r,r,r,e,r,r,r,r,r,e,e,r,r,e,e,e,r,r,e,r,r,r,e,r,r,e,r,e,r,r,e,e,e,e,e,r,e,e,r,e,e,r,e,r,r,e,r,e,r,e,e,r,r,r,e,r,e]},__routerFilterDynamic:{numItems:e,errorRate:1e-4,numBits:e,numHashes:null,bitArray:[]},"/_error":["static/chunks/pages/_error-f347b70a71a8047b.js"],sortedPages:["/_app","/_error"]}}(1,0,0),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();

View File

@@ -1 +0,0 @@
self.__BUILD_MANIFEST=function(r,e,t){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:20,errorRate:1e-4,numBits:384,numHashes:14,bitArray:[1,0,0,0,1,1,e,r,r,r,r,e,e,r,e,e,r,r,r,e,e,e,e,e,r,r,e,e,r,e,e,r,r,r,r,e,e,e,e,e,e,r,e,r,e,e,e,r,r,e,r,e,r,e,e,e,e,e,r,e,r,r,r,r,e,r,e,e,e,e,r,e,r,r,e,r,e,e,r,r,e,r,e,e,e,r,r,r,e,r,e,r,e,e,r,r,e,r,e,e,r,r,e,e,r,r,r,e,r,r,e,r,e,r,e,r,r,r,e,e,r,r,r,e,r,e,e,e,e,r,e,r,r,r,r,r,r,r,r,r,e,r,e,e,e,r,r,e,e,e,e,r,e,r,r,r,r,r,r,r,e,r,e,e,e,r,e,r,r,e,e,r,e,r,r,r,e,e,r,r,r,e,e,r,r,e,r,e,r,r,r,r,r,r,e,e,r,r,r,e,e,e,e,r,e,r,r,r,e,r,r,r,e,r,e,r,r,r,r,r,e,r,e,e,e,r,e,e,r,e,e,e,r,r,r,r,r,e,e,r,e,e,e,e,r,e,r,r,e,r,r,e,e,r,e,e,r,r,r,e,r,e,r,r,r,e,r,e,e,r,r,e,r,e,r,e,r,r,r,e,r,e,r,r,r,r,e,e,e,e,r,r,e,e,r,r,r,e,r,e,r,r,e,r,e,r,r,r,e,e,r,e,r,r,r,r,r,e,r,e,r,r,r,r,e,e,e,r,r,r,e,r,r,r,r,r,e,e,r,r,e,e,e,r,r,e,r,r,r,e,r,r,e,r,e,r,r,e,e,e,e,e,r,e,e,r,e,e,r,e,r,r,e,r,e,r,e,e,r,r,r,e,r,e]},__routerFilterDynamic:{numItems:e,errorRate:1e-4,numBits:e,numHashes:null,bitArray:[]},"/_error":["static/chunks/pages/_error-f347b70a71a8047b.js"],sortedPages:["/_app","/_error"]}}(1,0,0),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();

View File

@@ -1 +0,0 @@
self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()

View File

@@ -1 +0,0 @@
self.__BUILD_MANIFEST=function(r,e,t){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:20,errorRate:1e-4,numBits:384,numHashes:14,bitArray:[1,0,0,0,1,1,e,r,r,r,r,e,e,r,e,e,r,r,r,e,e,e,e,e,r,r,e,e,r,e,e,r,r,r,r,e,e,e,e,e,e,r,e,r,e,e,e,r,r,e,r,e,r,e,e,e,e,e,r,e,r,r,r,r,e,r,e,e,e,e,r,e,r,r,e,r,e,e,r,r,e,r,e,e,e,r,r,r,e,r,e,r,e,e,r,r,e,r,e,e,r,r,e,e,r,r,r,e,r,r,e,r,e,r,e,r,r,r,e,e,r,r,r,e,r,e,e,e,e,r,e,r,r,r,r,r,r,r,r,r,e,r,e,e,e,r,r,e,e,e,e,r,e,r,r,r,r,r,r,r,e,r,e,e,e,r,e,r,r,e,e,r,e,r,r,r,e,e,r,r,r,e,e,r,r,e,r,e,r,r,r,r,r,r,e,e,r,r,r,e,e,e,e,r,e,r,r,r,e,r,r,r,e,r,e,r,r,r,r,r,e,r,e,e,e,r,e,e,r,e,e,e,r,r,r,r,r,e,e,r,e,e,e,e,r,e,r,r,e,r,r,e,e,r,e,e,r,r,r,e,r,e,r,r,r,e,r,e,e,r,r,e,r,e,r,e,r,r,r,e,r,e,r,r,r,r,e,e,e,e,r,r,e,e,r,r,r,e,r,e,r,r,e,r,e,r,r,r,e,e,r,e,r,r,r,r,r,e,r,e,r,r,r,r,e,e,e,r,r,r,e,r,r,r,r,r,e,e,r,r,e,e,e,r,r,e,r,r,r,e,r,r,e,r,e,r,r,e,e,e,e,e,r,e,e,r,e,e,r,e,r,r,e,r,e,r,e,e,r,r,r,e,r,e]},__routerFilterDynamic:{numItems:e,errorRate:1e-4,numBits:e,numHashes:null,bitArray:[]},"/_error":["static/chunks/pages/_error-f347b70a71a8047b.js"],sortedPages:["/_app","/_error"]}}(1,0,0),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();

View File

@@ -1 +0,0 @@
self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()

View File

@@ -1 +0,0 @@
self.__BUILD_MANIFEST=function(r,e,t){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:20,errorRate:1e-4,numBits:384,numHashes:14,bitArray:[1,0,0,0,1,1,e,r,r,r,r,e,e,r,e,e,r,r,r,e,e,e,e,e,r,r,e,e,r,e,e,r,r,r,r,e,e,e,e,e,e,r,e,r,e,e,e,r,r,e,r,e,r,e,e,e,e,e,r,e,r,r,r,r,e,r,e,e,e,e,r,e,r,r,e,r,e,e,r,r,e,r,e,e,e,r,r,r,e,r,e,r,e,e,r,r,e,r,e,e,r,r,e,e,r,r,r,e,r,r,e,r,e,r,e,r,r,r,e,e,r,r,r,e,r,e,e,e,e,r,e,r,r,r,r,r,r,r,r,r,e,r,e,e,e,r,r,e,e,e,e,r,e,r,r,r,r,r,r,r,e,r,e,e,e,r,e,r,r,e,e,r,e,r,r,r,e,e,r,r,r,e,e,r,r,e,r,e,r,r,r,r,r,r,e,e,r,r,r,e,e,e,e,r,e,r,r,r,e,r,r,r,e,r,e,r,r,r,r,r,e,r,e,e,e,r,e,e,r,e,e,e,r,r,r,r,r,e,e,r,e,e,e,e,r,e,r,r,e,r,r,e,e,r,e,e,r,r,r,e,r,e,r,r,r,e,r,e,e,r,r,e,r,e,r,e,r,r,r,e,r,e,r,r,r,r,e,e,e,e,r,r,e,e,r,r,r,e,r,e,r,r,e,r,e,r,r,r,e,e,r,e,r,r,r,r,r,e,r,e,r,r,r,r,e,e,e,r,r,r,e,r,r,r,r,r,e,e,r,r,e,e,e,r,r,e,r,r,r,e,r,r,e,r,e,r,r,e,e,e,e,e,r,e,e,r,e,e,r,e,r,r,e,r,e,r,e,e,r,r,r,e,r,e]},__routerFilterDynamic:{numItems:e,errorRate:1e-4,numBits:e,numHashes:null,bitArray:[]},"/_error":["static/chunks/pages/_error-f347b70a71a8047b.js"],sortedPages:["/_app","/_error"]}}(1,0,0),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();

View File

@@ -1 +0,0 @@
self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5014],{41126:(e,r,a)=>{Promise.resolve().then(a.bind(a,79192))},79192:(e,r,a)=>{"use strict";a.r(r),a.d(r,{default:()=>s});var t=a(20475),l=a(72167);let s=()=>(0,t.jsx)("div",{className:"grid gap-5",children:(0,t.jsxs)(l.Zp,{children:[(0,t.jsxs)(l.aR,{children:[(0,t.jsx)(l.ZB,{children:"Full Network Cell Scan"}),(0,t.jsx)(l.BT,{children:"Scan all the of the available cells in the network including other network providers."})]}),(0,t.jsx)(l.Wu,{children:"Under Construction"})]})})},72167:(e,r,a)=>{"use strict";a.d(r,{BT:()=>i,Wu:()=>o,ZB:()=>c,Zp:()=>d,aR:()=>n,wL:()=>f});var t=a(20475),l=a(20107),s=a(22250);let d=l.forwardRef((e,r)=>{let{className:a,...l}=e;return(0,t.jsx)("div",{ref:r,className:(0,s.cn)("rounded-xl border bg-card text-card-foreground shadow",a),...l})});d.displayName="Card";let n=l.forwardRef((e,r)=>{let{className:a,...l}=e;return(0,t.jsx)("div",{ref:r,className:(0,s.cn)("flex flex-col space-y-1.5 p-6",a),...l})});n.displayName="CardHeader";let c=l.forwardRef((e,r)=>{let{className:a,...l}=e;return(0,t.jsx)("h3",{ref:r,className:(0,s.cn)("font-semibold leading-none tracking-tight",a),...l})});c.displayName="CardTitle";let i=l.forwardRef((e,r)=>{let{className:a,...l}=e;return(0,t.jsx)("p",{ref:r,className:(0,s.cn)("text-sm text-muted-foreground",a),...l})});i.displayName="CardDescription";let o=l.forwardRef((e,r)=>{let{className:a,...l}=e;return(0,t.jsx)("div",{ref:r,className:(0,s.cn)("p-6 pt-0",a),...l})});o.displayName="CardContent";let f=l.forwardRef((e,r)=>{let{className:a,...l}=e;return(0,t.jsx)("div",{ref:r,className:(0,s.cn)("flex items-center p-6 pt-0",a),...l})});f.displayName="CardFooter"},22250:(e,r,a)=>{"use strict";a.d(r,{cn:()=>s});var t=a(64901),l=a(868);function s(){for(var e=arguments.length,r=Array(e),a=0;a<e;a++)r[a]=arguments[a];return(0,l.QP)((0,t.$)(r))}}},e=>{var r=r=>e(e.s=r);e.O(0,[4736,191,6035,7358],()=>r(41126)),_N_E=e.O()}]);

View File

@@ -1 +0,0 @@
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3075],{43946:(e,a,s)=>{Promise.resolve().then(s.bind(s,31753))},31753:(e,a,s)=>{"use strict";s.r(a),s.d(a,{default:()=>d});var t=s(20475);s(20107);var r=s(16118),l=s(9477),n=s.n(l);let d=e=>{let{children:a}=e,s=(0,r.usePathname)();return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"mx-auto grid w-full max-w-6xl gap-2",children:(0,t.jsx)("h1",{className:"text-3xl font-semibold",children:"Experimental"})}),(0,t.jsxs)("div",{className:"mx-auto grid w-full max-w-6xl items-start gap-6 md:grid-cols-[180px_1fr] lg:grid-cols-[250px_1fr]",children:[(0,t.jsxs)("nav",{className:"grid gap-4 text-sm text-muted-foreground","x-chunk":"dashboard-04-chunk-0",children:[(0,t.jsx)(n(),{href:"/dashboard/experimental/quecwatch",className:"".concat("/dashboard/experimental/quecwatch/"===s?"font-semibold text-primary":"text-sm"),children:"QuecWatch"}),(0,t.jsx)(n(),{href:"/dashboard/experimental/keep-alive",className:"".concat("/dashboard/experimental/keep-alive/"===s?"font-semibold text-primary":"text-sm"),children:"Keep Alive"})]}),a]})]})}},16118:(e,a,s)=>{"use strict";var t=s(65834);s.o(t,"usePathname")&&s.d(a,{usePathname:function(){return t.usePathname}}),s.o(t,"useRouter")&&s.d(a,{useRouter:function(){return t.useRouter}})}},e=>{var a=a=>e(e.s=a);e.O(0,[9477,191,6035,7358],()=>a(43946)),_N_E=e.O()}]);

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5293],{23080:(e,r,t)=>{Promise.resolve().then(t.bind(t,69835))},69835:(e,r,t)=>{"use strict";t.r(r),t.d(r,{default:()=>s});var l=t(20475),n=t(20107);let a=[[[1,1,1,1]],[[1,1],[1,1]],[[1,1,1],[0,1,0]],[[1,1,1],[1,0,0]],[[1,1,1],[0,0,1]],[[1,1,0],[0,1,1]],[[0,1,1],[1,1,0]]],c=["#00f0f0","#f0f000","#a000f0","#f0a000","#0000f0","#00f000","#f00000"],s=()=>{let[e,r]=(0,n.useState)(()=>Array.from({length:20},()=>Array(10).fill(null))),[t,s]=(0,n.useState)([]),[u,f]=(0,n.useState)({x:0,y:0}),[i,o]=(0,n.useState)(""),[x,d]=(0,n.useState)(0),[h,y]=(0,n.useState)(0),[m,g]=(0,n.useState)(!1),[p,v]=(0,n.useState)(!1),b=(0,n.useRef)(u),k=(0,n.useRef)(t),w=(0,n.useRef)(e),C=(0,n.useRef)(i),S=(0,n.useRef)(p),j=(0,n.useCallback)(()=>Math.max(1e3-100*Math.floor(x/2e3),100),[x]);(0,n.useEffect)(()=>{b.current=u},[u]),(0,n.useEffect)(()=>{k.current=t},[t]),(0,n.useEffect)(()=>{w.current=e},[e]),(0,n.useEffect)(()=>{C.current=i},[i]),(0,n.useEffect)(()=>{S.current=p},[p]),(0,n.useEffect)(()=>{let e=localStorage.getItem("tetrisHighScore");e&&y(parseInt(e))},[]),(0,n.useEffect)(()=>{m&&x>h&&(y(x),localStorage.setItem("tetrisHighScore",x.toString()))},[m,x,h]);let E=(0,n.useCallback)(()=>{let e=Math.floor(Math.random()*a.length),r=a[e];s(r),o(c[e]),f({x:Math.floor(5-r[0].length/2),y:0}),v(!1)},[]),N=(0,n.useCallback)((e,r)=>{for(let t=0;t<r.length;t++)for(let l=0;l<r[t].length;l++)if(r[t][l]){let r=e.x+l,n=e.y+t;if(r<0||r>=10||n>=20||n>=0&&w.current[n][r])return!0}return!1},[]),R=(0,n.useCallback)(e=>{let r=e.filter(e=>e.some(e=>!e)),t=20-r.length;return t>0?(d(x+100*t),[...Array(t).fill(null).map(()=>Array(10).fill(null)),...r]):e},[x]),A=(0,n.useCallback)(()=>{if(S.current)return;let e=w.current.map(e=>[...e]),t=!1;if(b.current.y<=0&&N(b.current,k.current)){g(!0);return}for(let r=0;r<k.current.length;r++)for(let l=0;l<k.current[r].length;l++)if(k.current[r][l]){let n=b.current.y+r;if(n<0){t=!0;break}e[n][b.current.x+l]=C.current}if(t){g(!0);return}r(R(e)),v(!0),E()},[R,E]),M=(0,n.useCallback)(()=>{if(m||S.current)return;let e={x:b.current.x,y:b.current.y+1};if(N(e,k.current)){A();return}f(e)},[m,N,A]),_=(0,n.useCallback)(()=>{if(S.current)return;let e=k.current[0].map((e,r)=>k.current.map(e=>e[e.length-1-r]));for(let r of[{x:0,y:0},{x:-1,y:0},{x:1,y:0},{x:-2,y:0},{x:2,y:0}]){let t={x:b.current.x+r.x,y:b.current.y+r.y};if(!N(t,e)){f(t),s(e);return}}},[N]),D=(0,n.useCallback)(()=>{if(S.current)return;let e=b.current.y;for(;e<20&&!N({x:b.current.x,y:e+1},k.current);)e++;f({x:b.current.x,y:e}),setTimeout(()=>A(),0)},[N,A]),I=(0,n.useCallback)(()=>{r(Array.from({length:20},()=>Array(10).fill(null))),d(0),g(!1),v(!1),E()},[E]),H=(0,n.useCallback)(e=>{if("r"===e.key.toLowerCase()&&e.ctrlKey){e.preventDefault(),I();return}if(!m&&!S.current)switch(e.key){case"ArrowLeft":{let e={x:b.current.x-1,y:b.current.y};N(e,k.current)||f(e);break}case"ArrowRight":{let e={x:b.current.x+1,y:b.current.y};N(e,k.current)||f(e);break}case"ArrowDown":M();break;case"ArrowUp":_();break;case" ":e.preventDefault(),D()}},[m,N,M,_,D,I]);return(0,n.useEffect)(()=>{E()},[E]),(0,n.useEffect)(()=>{if(m)return;let e=setInterval(M,j());return()=>clearInterval(e)},[M,m,j]),(0,n.useEffect)(()=>(window.addEventListener("keydown",H),()=>window.removeEventListener("keydown",H)),[H]),(0,l.jsxs)("div",{className:"min-h-screen bg-gray-900 flex flex-col items-center justify-center p-4",children:[(0,l.jsxs)("div",{className:"mb-4 space-y-2 text-center",children:[(0,l.jsxs)("div",{className:"text-2xl font-bold text-white",children:["Score: ",x]}),(0,l.jsxs)("div",{className:"text-xl font-bold text-yellow-500",children:["High Score: ",h]}),(0,l.jsxs)("div",{className:"text-sm text-gray-400",children:["Speed: ",Math.round(1e3/j()),"x"]})]}),(0,l.jsx)("div",{className:"bg-gray-800 p-2 rounded-lg shadow-lg",children:(0,l.jsx)("div",{className:"grid gap-px bg-gray-700",style:{gridTemplateRows:"repeat(".concat(20,", minmax(0, 1fr))"),gridTemplateColumns:"repeat(".concat(10,", minmax(0, 1fr))"),width:"".concat(240,"px"),height:"".concat(480,"px")},children:e.map((e,r)=>e.map((e,n)=>{var a,c;let s=r>=u.y&&r<u.y+t.length&&n>=u.x&&n<u.x+(null===(a=t[0])||void 0===a?void 0:a.length)&&(null===(c=t[r-u.y])||void 0===c?void 0:c[n-u.x]);return(0,l.jsx)("div",{className:"transition-colors duration-100",style:{backgroundColor:s?i:e||"#1F2937"}},"".concat(r,"-").concat(n))}))})}),m&&(0,l.jsx)("div",{className:"mt-4 text-xl font-bold text-red-500",children:"Game Over! Press Ctrl+R to play again."}),(0,l.jsxs)("div",{className:"mt-4 text-white text-center",children:[(0,l.jsx)("p",{children:"Controls:"}),(0,l.jsx)("p",{children:"← → : Move"}),(0,l.jsx)("p",{children:"↑ : Rotate"}),(0,l.jsx)("p",{children:"↓ : Soft Drop"}),(0,l.jsx)("p",{children:"Space : Hard Drop"}),(0,l.jsx)("p",{children:"Ctrl+R : Restart"})]})]})}}},e=>{var r=r=>e(e.s=r);e.O(0,[191,6035,7358],()=>r(23080)),_N_E=e.O()}]);

View File

@@ -1 +0,0 @@
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5680],{78190:(e,s,t)=>{Promise.resolve().then(t.bind(t,36994))},36994:(e,s,t)=>{"use strict";t.r(s),t.d(s,{default:()=>d});var r=t(20475);t(20107);var a=t(16118),n=t(9477),u=t.n(n);let d=e=>{let{children:s}=e,t=(0,a.usePathname)();return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("div",{className:"mx-auto grid w-full max-w-6xl gap-2",children:(0,r.jsx)("h1",{className:"text-3xl font-semibold",children:"Settings"})}),(0,r.jsxs)("div",{className:"mx-auto grid w-full max-w-6xl items-start gap-6 md:grid-cols-[180px_1fr] lg:grid-cols-[250px_1fr]",children:[(0,r.jsx)("nav",{className:"grid gap-4 text-sm text-muted-foreground","x-chunk":"dashboard-04-chunk-0",children:(0,r.jsx)(u(),{href:"/dashboard/settings/security",className:"".concat("/dashboard/settings/security/"===t?"font-semibold text-primary":"text-sm"),children:"Security"})}),s]})]})}},16118:(e,s,t)=>{"use strict";var r=t(65834);t.o(r,"usePathname")&&t.d(s,{usePathname:function(){return r.usePathname}}),t.o(r,"useRouter")&&t.d(s,{useRouter:function(){return r.useRouter}})}},e=>{var s=s=>e(e.s=s);e.O(0,[9477,191,6035,7358],()=>s(78190)),_N_E=e.O()}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
self.__BUILD_MANIFEST=function(r,e,t){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:20,errorRate:1e-4,numBits:384,numHashes:14,bitArray:[1,0,0,0,1,1,e,r,r,r,r,e,e,r,e,e,r,r,r,e,e,e,e,e,r,r,e,e,r,e,e,r,r,r,r,e,e,e,e,e,e,r,e,r,e,e,e,r,r,e,r,e,r,e,e,e,e,e,r,e,r,r,r,r,e,r,e,e,e,e,r,e,r,r,e,r,e,e,r,r,e,r,e,e,e,r,r,r,e,r,e,r,e,e,r,r,e,r,e,e,r,r,e,e,r,r,r,e,r,r,e,r,e,r,e,r,r,r,e,e,r,r,r,e,r,e,e,e,e,r,e,r,r,r,r,r,r,r,r,r,e,r,e,e,e,r,r,e,e,e,e,r,e,r,r,r,r,r,r,r,e,r,e,e,e,r,e,r,r,e,e,r,e,r,r,r,e,e,r,r,r,e,e,r,r,e,r,e,r,r,r,r,r,r,e,e,r,r,r,e,e,e,e,r,e,r,r,r,e,r,r,r,e,r,e,r,r,r,r,r,e,r,e,e,e,r,e,e,r,e,e,e,r,r,r,r,r,e,e,r,e,e,e,e,r,e,r,r,e,r,r,e,e,r,e,e,r,r,r,e,r,e,r,r,r,e,r,e,e,r,r,e,r,e,r,e,r,r,r,e,r,e,r,r,r,r,e,e,e,e,r,r,e,e,r,r,r,e,r,e,r,r,e,r,e,r,r,r,e,e,r,e,r,r,r,r,r,e,r,e,r,r,r,r,e,e,e,r,r,r,e,r,r,r,r,r,e,e,r,r,e,e,e,r,r,e,r,r,r,e,r,r,e,r,e,r,r,e,e,e,e,e,r,e,e,r,e,e,r,e,r,r,e,r,e,r,e,e,r,r,r,e,r,e]},__routerFilterDynamic:{numItems:e,errorRate:1e-4,numBits:e,numHashes:null,bitArray:[]},"/_error":["static/chunks/pages/_error-f347b70a71a8047b.js"],sortedPages:["/_app","/_error"]}}(1,0,0),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();

View File

@@ -1 +0,0 @@
self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()

View File

@@ -1 +0,0 @@
self.__BUILD_MANIFEST=function(r,e,t){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:20,errorRate:1e-4,numBits:384,numHashes:14,bitArray:[1,0,0,0,1,1,e,r,r,r,r,e,e,r,e,e,r,r,r,e,e,e,e,e,r,r,e,e,r,e,e,r,r,r,r,e,e,e,e,e,e,r,e,r,e,e,e,r,r,e,r,e,r,e,e,e,e,e,r,e,r,r,r,r,e,r,e,e,e,e,r,e,r,r,e,r,e,e,r,r,e,r,e,e,e,r,r,r,e,r,e,r,e,e,r,r,e,r,e,e,r,r,e,e,r,r,r,e,r,r,e,r,e,r,e,r,r,r,e,e,r,r,r,e,r,e,e,e,e,r,e,r,r,r,r,r,r,r,r,r,e,r,e,e,e,r,r,e,e,e,e,r,e,r,r,r,r,r,r,r,e,r,e,e,e,r,e,r,r,e,e,r,e,r,r,r,e,e,r,r,r,e,e,r,r,e,r,e,r,r,r,r,r,r,e,e,r,r,r,e,e,e,e,r,e,r,r,r,e,r,r,r,e,r,e,r,r,r,r,r,e,r,e,e,e,r,e,e,r,e,e,e,r,r,r,r,r,e,e,r,e,e,e,e,r,e,r,r,e,r,r,e,e,r,e,e,r,r,r,e,r,e,r,r,r,e,r,e,e,r,r,e,r,e,r,e,r,r,r,e,r,e,r,r,r,r,e,e,e,e,r,r,e,e,r,r,r,e,r,e,r,r,e,r,e,r,r,r,e,e,r,e,r,r,r,r,r,e,r,e,r,r,r,r,e,e,e,r,r,r,e,r,r,r,r,r,e,e,r,r,e,e,e,r,r,e,r,r,r,e,r,r,e,r,e,r,r,e,e,e,e,e,r,e,e,r,e,e,r,e,r,r,e,r,e,r,e,e,r,r,r,e,r,e]},__routerFilterDynamic:{numItems:e,errorRate:1e-4,numBits:e,numHashes:null,bitArray:[]},"/_error":["static/chunks/pages/_error-f347b70a71a8047b.js"],sortedPages:["/_app","/_error"]}}(1,0,0),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();

View File

@@ -1 +0,0 @@
self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()

View File

@@ -1 +0,0 @@
self.__BUILD_MANIFEST=function(r,e,t){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:20,errorRate:1e-4,numBits:384,numHashes:14,bitArray:[1,0,0,0,1,1,e,r,r,r,r,e,e,r,e,e,r,r,r,e,e,e,e,e,r,r,e,e,r,e,e,r,r,r,r,e,e,e,e,e,e,r,e,r,e,e,e,r,r,e,r,e,r,e,e,e,e,e,r,e,r,r,r,r,e,r,e,e,e,e,r,e,r,r,e,r,e,e,r,r,e,r,e,e,e,r,r,r,e,r,e,r,e,e,r,r,e,r,e,e,r,r,e,e,r,r,r,e,r,r,e,r,e,r,e,r,r,r,e,e,r,r,r,e,r,e,e,e,e,r,e,r,r,r,r,r,r,r,r,r,e,r,e,e,e,r,r,e,e,e,e,r,e,r,r,r,r,r,r,r,e,r,e,e,e,r,e,r,r,e,e,r,e,r,r,r,e,e,r,r,r,e,e,r,r,e,r,e,r,r,r,r,r,r,e,e,r,r,r,e,e,e,e,r,e,r,r,r,e,r,r,r,e,r,e,r,r,r,r,r,e,r,e,e,e,r,e,e,r,e,e,e,r,r,r,r,r,e,e,r,e,e,e,e,r,e,r,r,e,r,r,e,e,r,e,e,r,r,r,e,r,e,r,r,r,e,r,e,e,r,r,e,r,e,r,e,r,r,r,e,r,e,r,r,r,r,e,e,e,e,r,r,e,e,r,r,r,e,r,e,r,r,e,r,e,r,r,r,e,e,r,e,r,r,r,r,r,e,r,e,r,r,r,r,e,e,e,r,r,r,e,r,r,r,r,r,e,e,r,r,e,e,e,r,r,e,r,r,r,e,r,r,e,r,e,r,r,e,e,e,e,e,r,e,e,r,e,e,r,e,r,r,e,r,e,r,e,e,r,r,r,e,r,e]},__routerFilterDynamic:{numItems:e,errorRate:1e-4,numBits:e,numHashes:null,bitArray:[]},"/_error":["static/chunks/pages/_error-f347b70a71a8047b.js"],sortedPages:["/_app","/_error"]}}(1,0,0),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();

View File

@@ -1 +0,0 @@
self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()

View File

@@ -0,0 +1 @@
self.__BUILD_MANIFEST=function(r,e,t){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:21,errorRate:1e-4,numBits:403,numHashes:14,bitArray:[0,1,1,0,1,e,0,r,r,e,e,e,e,e,e,r,e,e,e,e,r,r,e,e,r,r,e,r,r,r,r,e,r,r,e,e,r,r,r,r,r,e,r,r,r,e,e,e,e,e,r,r,r,e,e,r,r,r,e,r,r,e,e,e,e,r,r,r,e,r,r,r,e,e,e,e,r,e,r,e,r,e,r,e,e,e,e,r,r,r,e,r,e,e,r,r,e,r,e,e,e,r,r,r,r,e,e,e,r,r,e,r,e,e,e,r,r,e,e,r,r,r,r,e,r,e,e,e,e,e,e,r,r,e,r,r,e,r,r,r,e,r,e,r,e,e,r,e,e,r,r,r,r,e,r,r,r,e,e,e,e,r,e,e,e,r,e,e,r,e,r,r,e,e,e,e,r,e,e,r,e,r,r,e,r,e,r,r,e,e,r,e,e,e,r,r,e,r,r,e,e,e,e,r,r,e,r,e,e,e,r,e,r,r,e,r,e,r,r,r,e,e,r,r,r,e,e,e,r,e,e,r,r,r,e,r,e,r,r,e,e,r,r,e,e,r,r,r,e,r,e,e,r,r,e,e,e,e,e,r,r,e,e,e,e,r,e,r,r,r,r,e,e,e,r,e,e,r,r,r,r,r,e,e,r,e,e,e,r,r,r,r,r,e,e,e,r,r,e,r,r,r,e,r,e,e,e,e,r,r,r,e,r,e,e,r,e,r,r,r,e,r,r,e,r,e,r,r,e,r,r,r,r,e,r,r,e,e,r,e,e,r,r,r,r,e,r,r,e,r,r,e,r,r,e,r,r,e,r,e,r,r,e,e,r,e,r,e,e,r,e,e,e,e,r,r,e,r,r,r,r,e,r,e,e,r,r,e,e,e,e,e,e,r,e,e,e,r,e,r,r,r,r]},__routerFilterDynamic:{numItems:r,errorRate:1e-4,numBits:r,numHashes:null,bitArray:[]},"/_error":["static/chunks/pages/_error-f347b70a71a8047b.js"],sortedPages:["/_app","/_error"]}}(0,1,0),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();

View File

@@ -1,97 +0,0 @@
#!/bin/sh
echo "Content-type: application/json"
echo "Access-Control-Allow-Origin: *"
echo "Access-Control-Allow-Methods: GET, POST, OPTIONS"
echo "Access-Control-Allow-Headers: Content-Type"
echo ""
# Configuration
RESULT_FILE="/tmp/at_results.json"
LOG_FILE="/var/log/at_commands.log"
# Function to log messages
log_message() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "${LOG_FILE}"
}
# Function to return error response
send_error() {
local message="$1"
jq -n \
--arg msg "${message}" \
--arg time "$(date '+%H:%M:%S')" \
'{
status: "error",
message: $msg,
timestamp: $time
}'
exit 1
}
# Parse query parameters
eval $(echo "${QUERY_STRING}" | tr '&' '\n' | sed 's/\([^=]*\)=\([^=]*\)/\1="\2"/')
# Check if results file exists
if [ ! -f "${RESULT_FILE}" ]; then
send_error "No results found"
fi
# Validate results file contains valid JSON
if ! cat "${RESULT_FILE}" | jq . >/dev/null 2>&1; then
log_message "Invalid JSON in results file"
send_error "Invalid results data"
fi
# Handle different query types
case "${action}" in
"get_by_id")
# Fetch specific result by ID
if [ -z "${id}" ]; then
send_error "No ID provided"
fi
result=$(cat "${RESULT_FILE}" | jq --arg id "${id}" '. | map(select(.id == $id)) | .[0]')
if [ "${result}" = "null" ]; then
send_error "No result found for ID: ${id}"
else
echo "${result}"
fi
;;
"get_latest")
# Fetch the most recent N results (default to 10)
limit=${limit:-10}
cat "${RESULT_FILE}" | jq --arg limit "${limit}" 'reverse | limit(($limit|tonumber); .)'
;;
"get_by_status")
# Fetch results by status
if [ -z "${status}" ]; then
send_error "No status provided"
fi
cat "${RESULT_FILE}" | jq --arg status "${status}" '. | map(select(.status == $status))'
;;
"clear")
# Clear all results (optional)
if [ "${confirm}" = "true" ]; then
echo "[]" > "${RESULT_FILE}"
jq -n \
--arg time "$(date '+%H:%M:%S')" \
'{
status: "success",
message: "Results cleared",
timestamp: $time
}'
else
send_error "Confirmation required to clear results"
fi
;;
*)
# Default: return all results
cat "${RESULT_FILE}"
;;
esac

View File

@@ -1,78 +0,0 @@
#!/bin/sh
# Function to URL-decode the input
urldecode() {
local data="$1"
echo -e "$(echo "$data" | sed 's/+/ /g;s/%\(..\)/\\x\1/g;')"
}
# Set content-type for JSON response
echo "Content-type: application/json"
echo ""
# Read the input from POST data
read INPUT_DATA
# Extract the command from the input data (format: command=AT+COMMAND)
RAW_COMMAND=$(echo "$INPUT_DATA" | sed 's/command=//g')
# URL-decode the command
COMMAND=$(urldecode "$RAW_COMMAND")
# Define unique input/output files and AT port
INPUT_FILE="/tmp/custom_input_$$.txt"
OUTPUT_FILE="/tmp/custom_output_$$.txt"
# Debug logging
DEBUG_LOG="/tmp/debug.log"
echo "Starting at_handler script at $(date)" > "$DEBUG_LOG"
CONFIG_FILE="/etc/quecManager.conf"
# Check config file
if [ ! -f "$CONFIG_FILE" ]; then
echo "Config file not found: $CONFIG_FILE" >> "$DEBUG_LOG"
echo '{"error": "Config file not found"}'
exit 1
fi
# Get AT_PORT with debug logging
AT_PORT=$(head -n 1 "$CONFIG_FILE" | cut -d'=' -f2 | tr -d ' \n\r' | sed 's|^dev/||')
echo "Raw config line: $(head -n 1 "$CONFIG_FILE")" >> "$DEBUG_LOG"
echo "Extracted AT_PORT: '$AT_PORT'" >> "$DEBUG_LOG"
if [ -z "$AT_PORT" ]; then
echo "AT_PORT is empty" >> "$DEBUG_LOG"
output_error "Failed to read AT_PORT from config"
fi
# Check if AT_PORT exists
if [ ! -c "/dev/$AT_PORT" ]; then
echo "AT_PORT device not found: /dev/$AT_PORT" >> "$DEBUG_LOG"
echo "Available smd devices:" >> "$DEBUG_LOG"
ls -l /dev/smd* >> "$DEBUG_LOG" 2>&1
output_error "AT_PORT device not found"
fi
# Write the command directly to the input file
echo "$COMMAND" > "$INPUT_FILE"
# Run the command using atinout
atinout "$INPUT_FILE" "/dev/$AT_PORT" "$OUTPUT_FILE"
# Read the output from output.txt
OUTPUT=$(cat "$OUTPUT_FILE")
# Escape special characters (like newlines and double quotes) for JSON compatibility
ESCAPED_OUTPUT=$(echo "$OUTPUT" | sed ':a;N;$!ba;s/\n/\\n/g; s/"/\\"/g')
# Escape double quotes in the command for JSON compatibility
ESCAPED_COMMAND=$(echo "$COMMAND" | sed 's/"/\\"/g')
# Create the JSON response
JSON_RESPONSE=$(printf "{\"command\":\"%s\",\"output\":\"%s\"}" "$ESCAPED_COMMAND" "$ESCAPED_OUTPUT")
# Return the output as a valid JSON response
echo "$JSON_RESPONSE"
# Clean up temporary files
rm "$INPUT_FILE" "$OUTPUT_FILE"

View File

@@ -1,126 +0,0 @@
#!/bin/sh
# Set content-type for JSON response
echo "Content-type: application/json"
echo ""
# Configuration
QUEUE_FILE="/tmp/at_pipe.txt"
CELL_SCAN_KEYWORD="CELL_SCAN"
MAX_SCAN_TIME=180 # 3 minutes maximum scan time
LOCK_WAIT_TIME=6 # Maximum seconds to wait for lock
# Function to output error in JSON format
output_error() {
printf '{"status":"error","error":"%s","output":""}\n' "$1"
exit 1
}
# Function to create and verify queue entry
create_queue_entry() {
local TIMESTAMP=$(date +%s)
local entry=$(printf '{"id":"%s","timestamp":"%s","command":"%s","status":"scanning","pid":"%s","start_time":"%s","priority":"high"}\n' \
"${CELL_SCAN_KEYWORD}" \
"$(date '+%H:%M:%S')" \
"${CELL_SCAN_KEYWORD}" \
"$$" \
"$TIMESTAMP")
echo "$entry" >> "$QUEUE_FILE"
# Verify our entry was written
if grep -q "\"pid\":\"$$\".*\"start_time\":\"$TIMESTAMP\"" "$QUEUE_FILE"; then
logger -t cell_scan "Queue entry created successfully"
return 0
else
logger -t cell_scan "Failed to create queue entry"
return 1
fi
}
# Remove our entry from the queue
remove_queue_entry() {
sed -i "/\"pid\":\"$$\"/d" "$QUEUE_FILE"
logger -t cell_scan "Removed entry for PID $$"
}
# Escape special characters for JSON string
escape_json() {
printf '%s' "$1" | awk '
BEGIN { RS="\n"; ORS="\\n" }
{
gsub(/\\/, "\\\\")
gsub(/"/, "\\\"")
gsub(/\r/, "")
print
}' | sed 's/\\n$//'
}
# Execute cell scan with proper timeout handling
execute_cell_scan() {
local tmp_output=$(mktemp)
local scan_pid
# Start scan in background
(sms_tool at "AT+QSCAN=3,1" -t $MAX_SCAN_TIME > "$tmp_output" 2>/dev/null) &
scan_pid=$!
logger -t cell_scan "Started QSCAN with PID: $scan_pid"
# Wait for scan to complete or timeout
local wait_time=0
while [ $wait_time -lt $MAX_SCAN_TIME ]; do
if ! kill -0 $scan_pid 2>/dev/null; then
break
fi
sleep 1
wait_time=$((wait_time + 1))
done
# Check if we need to kill the scan
if [ $wait_time -ge $MAX_SCAN_TIME ]; then
kill $scan_pid 2>/dev/null
wait $scan_pid 2>/dev/null
logger -t cell_scan "Scan timed out after $MAX_SCAN_TIME seconds"
output_error "Scan timed out"
fi
logger -t cell_scan "Scan completed in $wait_time seconds"
# Process and output results
if [ -s "$tmp_output" ]; then
local escaped_output=$(escape_json "$(cat "$tmp_output")")
printf '{"status":"success","output":"%s"}\n' "$escaped_output"
else
output_error "No scan results"
fi
rm -f "$tmp_output"
}
# Main execution
main() {
# Set global timeout
( sleep $MAX_SCAN_TIME; kill -TERM $$ 2>/dev/null ) &
TIMEOUT_PID=$!
# Ensure queue file exists
touch "$QUEUE_FILE"
# Create queue entry
if ! create_queue_entry; then
output_error "Failed to create queue entry"
fi
# Register cleanup handler
trap 'remove_queue_entry; kill $TIMEOUT_PID 2>/dev/null; exit' INT TERM EXIT
# Execute scan and output results
execute_cell_scan
# Cleanup
kill $TIMEOUT_PID 2>/dev/null
remove_queue_entry
}
# Start main execution
main

View File

@@ -0,0 +1,200 @@
#!/bin/sh
# Set content-type for JSON response
echo "Content-type: application/json"
echo ""
# Define file paths and configuration
QUEUE_FILE="/tmp/at_pipe.txt"
TEMP_FILE="/tmp/network_info_output.txt"
LOG_FILE="/var/log/network_info.log"
LOCK_KEYWORD="AT_COMMAND_LOCK"
MAX_WAIT=6
COMMAND_TIMEOUT=4
# Function to log messages
log_message() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "${LOG_FILE}"
logger -t network_info "$1"
}
# Function to output JSON error
output_error() {
printf '{"status":"error","message":"%s","timestamp":"%s"}\n' "$1" "$(date '+%H:%M:%S')"
exit 1
}
# Function to clean and add lock
add_clean_lock() {
local TIMESTAMP=$(date +%s)
local WAIT_START=$(date +%s)
while true; do
local CURRENT_TIME=$(date +%s)
if [ $((CURRENT_TIME - WAIT_START)) -ge $MAX_WAIT ]; then
sed -i "/${LOCK_KEYWORD}/d" "$QUEUE_FILE"
log_message "Removed existing lock after $MAX_WAIT seconds timeout"
fi
printf '{"id":"%s","timestamp":"%s","command":"%s","status":"lock","pid":"%s","start_time":"%s","priority":"high"}\n' \
"${LOCK_KEYWORD}" \
"$(date '+%H:%M:%S')" \
"${LOCK_KEYWORD}" \
"$$" \
"$TIMESTAMP" >> "$QUEUE_FILE"
if grep -q "\"pid\":\"$$\".*\"start_time\":\"$TIMESTAMP\"" "$QUEUE_FILE"; then
log_message "Lock created by PID $$ at $TIMESTAMP"
trap 'remove_lock; exit' INT TERM EXIT
return 0
fi
if [ $((CURRENT_TIME - WAIT_START)) -lt $MAX_WAIT ]; then
sleep 1
else
log_message "Failed to acquire lock after $MAX_WAIT seconds"
return 1
fi
done
}
# Function to remove lock
remove_lock() {
sed -i "/\"pid\":\"$$\"/d" "$QUEUE_FILE"
log_message "Lock removed by PID $$"
}
# Function to execute AT command with retries
execute_at_command() {
local CMD="$1"
local RETRY_COUNT=0
local MAX_RETRIES=3
local OUTPUT=""
while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
OUTPUT=$(timeout $COMMAND_TIMEOUT sms_tool at "$CMD" -D 2>&1)
local EXIT_CODE=$?
if [ $EXIT_CODE -eq 0 ]; then
if echo "$OUTPUT" | grep -q "CME ERROR"; then
RETRY_COUNT=$((RETRY_COUNT + 1))
[ $RETRY_COUNT -lt $MAX_RETRIES ] && sleep 1
continue
fi
echo "$OUTPUT"
return 0
fi
RETRY_COUNT=$((RETRY_COUNT + 1))
[ $RETRY_COUNT -lt $MAX_RETRIES ] && sleep 1
done
log_message "Command failed after $MAX_RETRIES attempts: $CMD"
return 1
}
# Function to check network mode
check_network_mode() {
local OUTPUT=$(execute_at_command "AT+QENG=\"servingcell\"")
echo "$OUTPUT" > "$TEMP_FILE"
# Check for both LTE and NR5G-NSA (NSA mode)
if echo "$OUTPUT" | grep -q "\"LTE\"" && echo "$OUTPUT" | grep -q "\"NR5G-NSA\""; then
echo "NRLTE"
# Check for LTE only
elif echo "$OUTPUT" | grep -q "\"LTE\""; then
echo "LTE"
# Check for NR5G-SA
elif echo "$OUTPUT" | grep -q "\"NR5G-SA\""; then
echo "NR5G"
else
echo "UNKNOWN"
fi
}
# Function to check NR5G measurement info setting
check_nr5g_meas_info() {
local OUTPUT=$(execute_at_command "AT+QNWCFG=\"nr5g_meas_info\"")
if echo "$OUTPUT" | grep -q "\"nr5g_meas_info\",1"; then
return 0
else
return 1
fi
}
# Function to escape JSON string
escape_json_string() {
echo "$1" | sed 's/\\/\\\\/g' | sed 's/"/\\"/g' | tr -d '\n' | sed 's/\r//g'
}
# Function to parse and format output as JSON
format_output_json() {
local MODE="$1"
local NEIGHBOR_OUTPUT="$2"
local MEAS_OUTPUT="$3"
# Basic JSON structure
printf '{"status":"success","timestamp":"%s","mode":"%s","data":{' "$(date '+%H:%M:%S')" "$MODE"
# Add neighbor cell info if available
if [ -n "$NEIGHBOR_OUTPUT" ]; then
printf '"neighborCells":"%s"' "$(escape_json_string "$NEIGHBOR_OUTPUT")"
fi
# Add measurement info if available
if [ -n "$MEAS_OUTPUT" ]; then
[ -n "$NEIGHBOR_OUTPUT" ] && printf ','
printf '"meas":"%s"' "$(escape_json_string "$MEAS_OUTPUT")"
fi
printf '}}\n'
}
# Main execution
{
if ! add_clean_lock; then
output_error "Failed to acquire lock for command processing"
fi
# Check network mode
NETWORK_MODE=$(check_network_mode)
log_message "Detected network mode: $NETWORK_MODE"
SERVING_OUTPUT=""
MEAS_OUTPUT=""
case "$NETWORK_MODE" in
"NRLTE")
SERVING_OUTPUT=$(execute_at_command "AT+QENG=\"neighbourcell\"")
if ! check_nr5g_meas_info; then
MEAS_OUTPUT=$(execute_at_command "AT+QNWCFG=\"nr5g_meas_info\",1;+QNWCFG=\"nr5g_meas_info\"")
else
MEAS_OUTPUT=$(execute_at_command "AT+QNWCFG=\"nr5g_meas_info\"")
fi
;;
"LTE")
SERVING_OUTPUT=$(execute_at_command "AT+QENG=\"neighbourcell\"")
;;
"NR5G")
if ! check_nr5g_meas_info; then
MEAS_OUTPUT=$(execute_at_command "AT+QNWCFG=\"nr5g_meas_info\",1;+QNWCFG=\"nr5g_meas_info\"")
else
MEAS_OUTPUT=$(execute_at_command "AT+QNWCFG=\"nr5g_meas_info\"")
fi
;;
*)
output_error "Unknown or unsupported network mode"
;;
esac
format_output_json "$NETWORK_MODE" "$SERVING_OUTPUT" "$MEAS_OUTPUT"
remove_lock
rm -f "$TEMP_FILE"
} || {
# Error handler
remove_lock
rm -f "$TEMP_FILE"
output_error "Internal error occurred"
}

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More