{"version":3,"file":"js/app.c030f0fa.js","mappings":"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","sources":["webpack://DMR.Tools/./src/App.vue","webpack://DMR.Tools/./src/components/themeselect.vue","webpack://DMR.Tools/./src/components/themeselect.vue?7986","webpack://DMR.Tools/./src/components/login.vue","webpack://DMR.Tools/./src/components/login.vue?1fb5","webpack://DMR.Tools/./src/App.vue?7ccd","webpack://DMR.Tools/./src/views/About.vue","webpack://DMR.Tools/./src/components/supportedfeatures.vue","webpack://DMR.Tools/./src/components/supportedfeatures.vue?0e52","webpack://DMR.Tools/./src/views/About.vue?1393","webpack://DMR.Tools/./src/views/Main.vue","webpack://DMR.Tools/./src/views/Main.vue?0dcf","webpack://DMR.Tools/./src/components/webdfuradio.vue","webpack://DMR.Tools/./src/components/connectedradio.vue","webpack://DMR.Tools/./src/libs/misc.js","webpack://DMR.Tools/./src/libs/rf.js","webpack://DMR.Tools/./src/libs/codeplug.js","webpack://DMR.Tools/./src/components/connectedradio.vue?ad35","webpack://DMR.Tools/./src/components/usbhelp.vue","webpack://DMR.Tools/./src/components/usbhelp.vue?1e22","webpack://DMR.Tools/./src/components/usbdebugging.vue","webpack://DMR.Tools/./src/components/usbdebugging.vue?e107","webpack://DMR.Tools/./src/libs/dfu.js","webpack://DMR.Tools/./src/components/webdfuradio.vue?cabc","webpack://DMR.Tools/./src/components/keyloader.vue","webpack://DMR.Tools/./src/components/keyloader.vue?725a","webpack://DMR.Tools/./src/components/dmrid.vue","webpack://DMR.Tools/./src/components/dmrid.vue?7b60","webpack://DMR.Tools/./src/components/codeplugslist.vue","webpack://DMR.Tools/./src/components/codeplug.vue","webpack://DMR.Tools/./src/components/coveredcontrol.vue","webpack://DMR.Tools/./src/components/coveredcontrol.vue?dd80","webpack://DMR.Tools/./src/components/codeplug.vue?f2dc","webpack://DMR.Tools/./src/components/codeplugslist.vue?cb09","webpack://DMR.Tools/./src/components/manualcps.vue","webpack://DMR.Tools/./src/components/channel.vue","webpack://DMR.Tools/./src/components/microchannel.vue","webpack://DMR.Tools/./src/components/contact.vue","webpack://DMR.Tools/./src/components/contact.vue?9d22","webpack://DMR.Tools/./src/components/rxgrouplist.vue","webpack://DMR.Tools/./src/components/rxgrouplist.vue?88e3","webpack://DMR.Tools/./src/components/microchannel.vue?fd51","webpack://DMR.Tools/./src/components/channel.vue?b2f1","webpack://DMR.Tools/./src/components/zone.vue","webpack://DMR.Tools/./src/components/zone.vue?4e20","webpack://DMR.Tools/./src/components/manualcps.vue?646b","webpack://DMR.Tools/./src/components/codeplug_settings.vue","webpack://DMR.Tools/./src/components/radiofeaturesmatrix.vue","webpack://DMR.Tools/./src/components/radiofeaturesmatrix.vue?6288","webpack://DMR.Tools/./src/components/codeplug_settings.vue?3118","webpack://DMR.Tools/./src/components/contacts.vue","webpack://DMR.Tools/./src/components/contacts.vue?9f7f","webpack://DMR.Tools/./src/views/changelog.vue","webpack://DMR.Tools/./src/components/markdown.vue","webpack://DMR.Tools/./src/components/markdown.vue?eabc","webpack://DMR.Tools/./src/views/changelog.vue?a0f5","webpack://DMR.Tools/./src/components/singlechannel.vue","webpack://DMR.Tools/./src/views/notfound.vue","webpack://DMR.Tools/./src/views/notfound.vue?9f78","webpack://DMR.Tools/./src/views/Columns.vue","webpack://DMR.Tools/./src/components/codeplugtabs.vue","webpack://DMR.Tools/./src/components/codeplugtabs.vue?87ef","webpack://DMR.Tools/./src/views/Columns.vue?42fa","webpack://DMR.Tools/./src/router/index.js","webpack://DMR.Tools/./src/store/index.js","webpack://DMR.Tools/./src/libs/rtxc.js","webpack://DMR.Tools/./src/main.js","webpack://DMR.Tools/webpack/bootstrap","webpack://DMR.Tools/webpack/runtime/chunk loaded","webpack://DMR.Tools/webpack/runtime/compat get default export","webpack://DMR.Tools/webpack/runtime/define property getters","webpack://DMR.Tools/webpack/runtime/global","webpack://DMR.Tools/webpack/runtime/hasOwnProperty shorthand","webpack://DMR.Tools/webpack/runtime/make namespace object","webpack://DMR.Tools/webpack/runtime/jsonp chunk loading","webpack://DMR.Tools/webpack/startup"],"sourcesContent":["\n\n\n","\n\n\n","import { render } from \"./themeselect.vue?vue&type=template&id=8c30eca4&scoped=true\"\nimport script from \"./themeselect.vue?vue&type=script&lang=js\"\nexport * from \"./themeselect.vue?vue&type=script&lang=js\"\n\nimport \"./themeselect.vue?vue&type=style&index=0&id=8c30eca4&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-8c30eca4\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./login.vue?vue&type=template&id=81cf2bc6&scoped=true\"\nimport script from \"./login.vue?vue&type=script&lang=js\"\nexport * from \"./login.vue?vue&type=script&lang=js\"\n\nimport \"./login.vue?vue&type=style&index=0&id=81cf2bc6&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-81cf2bc6\"]])\n\nexport default __exports__","import { render } from \"./App.vue?vue&type=template&id=5aadf9d8&scoped=true\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\n\nimport \"./App.vue?vue&type=style&index=0&id=5aadf9d8&scoped=true&lang=css\"\n\nimport exportComponent from \"../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5aadf9d8\"]])\n\nexport default __exports__","\n\n\n\n","\n\n\n","import { render } from \"./supportedfeatures.vue?vue&type=template&id=6b3c55f7&scoped=true\"\nimport script from \"./supportedfeatures.vue?vue&type=script&lang=js\"\nexport * from \"./supportedfeatures.vue?vue&type=script&lang=js\"\n\nimport \"./supportedfeatures.vue?vue&type=style&index=0&id=6b3c55f7&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6b3c55f7\"]])\n\nexport default __exports__","import { render } from \"./About.vue?vue&type=template&id=67fa31c7&scoped=true\"\nimport script from \"./About.vue?vue&type=script&lang=js\"\nexport * from \"./About.vue?vue&type=script&lang=js\"\n\nimport \"./About.vue?vue&type=style&index=0&id=67fa31c7&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-67fa31c7\"]])\n\nexport default __exports__","\n\n\n\n","import { render } from \"./Main.vue?vue&type=template&id=5b4a553a&scoped=true\"\nimport script from \"./Main.vue?vue&type=script&lang=js\"\nexport * from \"./Main.vue?vue&type=script&lang=js\"\n\nimport \"./Main.vue?vue&type=style&index=0&id=5b4a553a&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5b4a553a\"]])\n\nexport default __exports__","\n\n\n\n","\n\n\n","import { saveAs } from 'file-saver';\n\nexport function assert(c, expected, msg){\n //call like assert(1==1)\n //or assert(1,1)\n //or assert(1==1, \"failure in mathematics\")\n //or assert(1,1, \"failure in mathematics\")\n //TODO: not working like i want, needs a revisit\n if( typeof(c) == typeof(1==1)){\n if(!c){\n const msg = expected; //reordered arguments\n throw new Error(\"Assertion failed \" + msg?msg:\"\");\n }\n } else { \n if( c != expected ){\n console.log(c,expected);\n throw new Error(\"Assertion failed: \"+ c + \" != \"+ expected+\", \"+ msg?msg:\"\");\n }\n }\n}\nexport function invert(o){\n const io = {};\n for( const k in o){\n const v = o[k];\n io[v] = k;\n }\n return io;\n}\nexport function wait_for(ms){\n return new Promise( r => setTimeout(r,ms));\n}\n\nexport function _x(a){\n return \"0x\" + a.toString(16);\n}\n\nexport function grouppairs(arr){\n return Array.from({ length: arr.length / 2 }, (_, i) => arr.slice(i * 2, i * 2 + 2))\n}\n\nexport function sorted_counts(c){\n return Object.entries(c).sort((a,b) => b[1] >= a[1] ).map(x=>x[1] + \" \" + x[0]);\n}\n\nexport function uuidv4() {\n //https://stackoverflow.com/a/2117523\n return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c =>\n (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)\n );\n}\nexport function sortbykey(key){\n return function(a,b){\n if( a[key] < b[key] ){\n return -1;\n } else if( a[key] > b[key] ){\n return 1;\n } \n return 0\n }\n}\nexport function save_data(data, filename){\n const da = new Uint8Array(data);\n //console.log(da);\n const ba = new Blob([da], {type:\"application/octet-stream\"} );\n console.log(ba);\n saveAs(ba, filename)\n}\n\n\n\nfunction browser_save(name,data){\n localStorage[name] = JSON.stringify(data);\n}\nfunction browser_load(name){\n return localStorage[name];\n}\nfunction bytes2string(data){\n return data.map(c=> String.fromCharCode(c)).join(\"\");\n}\nexport function xxd(lst){\n //lst is a list of 8 bit bytes (i.e. 0-255 are only allowed values)\n const maxaddr = Math.floor(Math.log(lst.length) / Math.log(16))+1;\n let s = \"\";\n for( let i = 0; i < lst.length/16; i++){\n const thisrow = lst.slice(i*16, (i+1)*16);\n s += \"0x\" + (i*16).toString(16).padStart(maxaddr,'0') + \": \";\n for( let j = 0; j < 16 && i*16+j < lst.length; j++){\n s += lst[i*16+j].toString(16).padStart(2,'0');\n if( (j +1 )% 2 == 0 ){\n s+= \" \";\n }\n if( (j +1 )% 8 == 0 ){\n s+= \" \";\n }\n }\n s += \" \";\n const v = bytes2string(Array.from(thisrow));\n s += v;\n s += \"\\n\";\n }\n return s;\n}\nexport async function fetchblob(uri){\n const p = await fetch(uri);\n console.log(p);\n //const b = p.blob()\n //console.log(b);\n const ab = await p.arrayBuffer();\n console.log(ab);\n return new Uint8Array(ab);\n}\nexport function readFile(file) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = res => {\n resolve(res.target.result);\n };\n reader.onerror = err => reject(err);\n reader.readAsArrayBuffer(file);\n });\n}\n","\nconst country_ham_bands = {\n \"USA\":{\n// http://www.arrl.org/files/file/Regulatory/Band%20Chart/Band%20Chart%20-%2011X17%20Color.pdf\n \"6m\":[50,54],\n \"2m\":[144,148],\n \"1.25m\":[222,225],\n \"70cm\":[420,470],\n \"33cm\":[902,928],\n \"23cm\":[1240,1300]\n },\n}\n\n//TODO: now i can implement freq_to_band through the country_ham_bands structure too\n//TODO: i can detect license class through being in a band but not being\n//in the country_ham_bands data structure too\nconst standard_offset = {\n \"2m\": 0.6,\n \"70cm\": 5,\n \"1.25m\":1.6,\n \"10m\":.1\n}\nfunction freq_to_band(f){\n const bands = [\n [136, 174, \"2m\"],\n [219, 225, \"1.25m\"],\n [400, 480, \"70cm\"], //TODO: won't get up to 520 UHF stuff\n [902, 928, \"33cm\"]\n ];\n for (const band of bands){\n if( f >= band[0] && f <= band[1] ){\n return band[2];\n }\n }\n return \"unknown band\";\n\n}\nfunction standard_offset_from_freq(f){\n return standard_offset[ freq_to_band( f ) ];\n}\nfunction emission_designator_to_protocol( emd ){\n const emd2p = {\n \"7K60FXW\":\"DMR\", \n \"7K60FXD\":\"DMR\",\n \"7K60FXE\":\"DMR\",\n \"11K2F3E\":\"FM2.5\", //\"FM%d\"%(FM_tx_deviation)\n\n }\n const proto = emd2p[emd];\n return proto ? proto: \"unk\";\n}\n\nexport default {\n standard_offset,\n standard_offset_from_freq,\n freq_to_band,\n emission_designator_to_protocol\n}\n","//TODO: list of radioids to generate codeplugs for\n// so take in a codeplug, modify the encryption keys uniformly\n// generate a modified codeplug for each radio id\n//TODO findings:\n//encryption keys are read and wrote backwards to editcp\n//compare to OEM software and fix if necessary\n//my code appears to go left to right, so that may be an issue on their end\n//\n//loading two codeplugs fails - possible there's a conflict for the original div, rather than re-assigning vue data.editor or something\n//\n//https://github.com/DaleFarnsworth-DMR/codeplug/blob/master/field.go\n//fetch( \"/data/zones.json\").then(r=>r.json()).then(j=>z=j);\n//\n//TODO: redo record arrays and field arrays, and support full length, add, and del capabilities\n//TODO: defrag/consolidate deleted entries to always be at the end of any array\n\nimport { xxd, readFile, assert, grouppairs, sortbykey } from './misc.js';\nimport rf from '../libs/rf.js';\nimport { reactive } from 'vue';\n// bit/byte converters\nfunction bytes2string(data){\n return data.map(c=> String.fromCharCode(c)).join(\"\");\n}\nfunction dec2bin(dec){\n return (dec >>> 0).toString(2);\n}\nfunction bitmask2value( maskedbits, values ){\n return values[Math.log2( maskedbits )];\n}\nexport function uint8s_to_int( lst ){ //why do i have this _and_ assemble_le?\n const lr = lst.reverse();\n let n = 0;\n for( let i = 0; i < lst.length; i++){\n n <<= 8;\n n |= lr[i];\n }\n return n;\n}\n\n\nfunction cstr2js(data){\n //expects an array of ints, not a uint8 array\n const end_of_ascii_string = data.indexOf(0);\n let name;\n if( end_of_ascii_string != -1 ){\n name = bytes2string(data.slice(0,end_of_ascii_string));\n } else {\n name = bytes2string(data);\n }\n return name;\n}\nfunction js2cstr(s){\n //expects a js string\n const sint = Array.from(s).map(x=>x.charCodeAt());\n sint.push(0); //terminating null byte\n return new Uint8Array(sint);\n}\nfunction test_js_2_4_cstr(){\n assert(cstr2js(Array.from(js2cstr(\"test\"))) == \"test\")\n assert(cstr2js(Array.from(js2cstr(\"\"))) == \"\")\n}\n\n\nfunction utf16str2js(data){\n //expects an array of ints, not a typed array\n //var end_of_ascii_string = data.indexOf(0);\n //console.log(data);\n const x = grouppairs(data).map(x=>x[0]); //only support ascii\n return cstr2js(x);\n}\nfunction jsstr2utf16(s){\n return new Uint8Array(\n Array.from(s).map(x=>[x.charCodeAt(),0]).flat()\n )\n}\nfunction test_js_2_4_utf16str(){\n assert(utf16str2js(Array.from(jsstr2utf16(\"test\"))) == \"test\")\n assert(utf16str2js(Array.from(jsstr2utf16(\"\"))) == \"\")\n}\n\n\n\nfunction assemble_le(bytes){\n let n = 0;\n for(let i = 0; i < bytes.byteLength; i++){\n n |= bytes[i] << (i*8);\n }\n return n;\n}\nfunction dissemble_le(somenum,sz){\n if( sz == undefined ){\n sz = 4; //assume 32 bit\n }\n assert(somenum >= 0);\n const bs = [];\n let acc = somenum;\n while( bs.length < sz ){\n bs.push(acc & 0xff);\n acc >>= 8;\n }\n //console.log(\"somenum:\",somenum, bs);\n return new Uint8Array(bs);\n}\nfunction dissemble_le_sz(sz){\n return (val)=>dissemble_le(val,sz);\n}\n\n\nfunction fromBCD(data){\n let out = [];\n for( let i = data.length-1; i >=0; i--){ //handles little endian\n //so it works right-to-left\n out.push((data[i] & 0xf0)>>4); //within each byte, it's still ordered sanely of course, since it's only bytes that are re-ordered\n out.push(data[i] & 0x0f);\n }\n return parseFloat(out.join(\"\"));\n}\nfunction toBCD(val){\n let nibbles = Array.from(String(val)).map(x=>parseInt(x));\n //console.log(\"nibbles:\",nibbles);\n if( nibbles.length %2 == 1 ){ //if we have an odd number (such that grouppairs wouldn't work as expected)\n nibbles.splice(0, 0, 0); //insert a 0 at the front\n }\n //console.log(\"modnibbles:\",nibbles);\n let nibbles2 = grouppairs(nibbles);\n //console.log(\"nibbles2:\",nibbles2);\n let bs = nibbles2.reverse().map(x=>x[0]<<4 | x[1]);\n //console.log(\"bs\",bs);\n return new Uint8Array(bs); \n}\nfunction test_bcd(){\n assert(fromBCD(toBCD(45112500)) == 45112500)\n assert(fromBCD(hex2bytes(\"7006\")),670.0,\"fromBCD\");\n assert(bytes2hex(toBCD(670)),\"7006\",\"toBCD\");\n}\ntest_bcd();\n\n\nfunction hex2bytes(s){\n let pairs = grouppairs(s)\n let bytes = pairs.map(x=>parseInt(x,16));\n return new Uint8Array(bytes);\n}\nfunction bytes2hex(data){\n return Array.from(data).map(x=>x.toString(16).padStart(2,\"0\")).join(\"\");\n}\nfunction test_hex_2_4_bytes(){\n assert(bytes2hex(hex2bytes(\"ff\")) == \"ff\")\n assert(bytes2hex(hex2bytes(\"00\")) == \"00\")\n}\n\n//function get_ft_byte(data,ft){\n //let bo = ft.bitOffset;\n //let bs = ft.bitSize;\n //const mask = (2**bs)-1; //so size of 2 gives 0b11, 3 gives 0b111, etc\n //assert(bs < 8); //only call us after handling the byte-aligned byte-sized stuff already\n\n //let byteidx = Math.floor(bo/8); //so bit 2 is in byte 0, bit 9 is in byte 1, etc\n //let Bo = bo - (byteidx*8); //get the bit offset in this byte, so \n //assert(bs+Bo <= 8); //error out if we actually do cross a byte boundary!\n //let b = data.subarray(byteidx,byteidx+1)[0];\n //return b;\n//}\nfunction bits_to_int(data,ft){\n //candidate for cleanup TODO\n let bo = ft.bitOffset;\n let bs = ft.bitSize;\n const mask = (2**bs)-1; //so size of 2 gives 0b11, 3 gives 0b111, etc\n //we have an array of bits as 8bit bytes\n //[ 0x3f, 0x81]\n //== [0011_1111, 1000_0001]\n //let's say bo is 2\n //and bs is 7\n //so it spans byte boundaries and such - does that every happen?\n //\n //cat codeplugs.json | grep bitSize|sort |uniq -c |sort -k 3n\n //suggests that in practice, anything >= 8 bits is always integer multiples of 8 bits\n //so those are already taken care of with slice!\n //and that also means we probably don't have any bits crossing byte boundaries.\n // (probably)\n //just need to find the right byte that has what we need, and mask and dice until we get only what we need\n //\n assert(bs < 8); //only call us after handling the byte-aligned byte-sized stuff already\n\n let byteidx = Math.floor(bo/8); //so bit 2 is in byte 0, bit 9 is in byte 1, etc\n let Bo = bo - (byteidx*8); //get the bit offset in this byte, so \n assert(bs+Bo <= 8); //error out if we actually do cross a byte boundary!\n //if bo == 9, Bo == 1\n //if bo == 2, Bo == 2, etc\n let b = data.subarray(byteidx,byteidx+1);\n let bO = 8 - Bo - bs; //get the amount to shift right by\n const ret = (b >> bO) & mask; //shift it, and mask it so we on;y get what we asked for\n //console.log(\"bits_to_int: \",data, ft, \"bo\",bo, \"bs\",bs, \"byteidx\",byteidx, \"Bo\", Bo, \"b\", b, \"bO\", bO, \"mask\",mask,\"(b>>bO)&mask\",ret);\n return ret;\n}\nfunction set_bits_of_int(existing_value, ft, newvalue){\n //console.log(`set_bits_of_int(existing_value=${existing_value}, ft=..., newvalue=${newvalue})`);\n //assumes you're only working on a single byte...\n let bo = ft.bitOffset;\n let bs = ft.bitSize;\n assert(bs <= 8, \"set_bits_of_int expected one byte or less but got a bs larger than 8\" );\n assert(existing_value <= 255 && newvalue <= 255, \"values out of range set_bits_of_int\" );\n assert(newvalue < 2**bs && newvalue >= 0, \"new value is too big (or too small)\");\n\n const byteidx = Math.floor(bo/8); //so bit 2 is in byte 0, bit 9 is in byte 1, etc\n const Bo = bo - (byteidx*8); //get the bit offset in this byte, so \n const bO = 8 - Bo - bs; //get the amount to shift by\n //console.log(bo,byteidx,Bo,bO);\n\n const mask = (2**bs)-1; //so size of 2 gives 0b11, 3 gives 0b111, etc\n const imask = 0xff - (mask << bO); //i forgot to shift the cleaning mask for soooo long\n const shifted_newvalue = newvalue << bO;\n\n const clean_existing = existing_value & imask;\n //console.log(\"existing value, newvalue: \",existing_value, newvalue);\n //console.log(\"mask, imask: \",mask,imask);\n //console.log(\"clean existing: \",clean_existing);\n //console.log(\"shifted new: \",shifted_newvalue);\n return clean_existing | shifted_newvalue;\n}\nfunction test_bits2int_and_back(){\n assert(set_bits_of_int(0,{bitOffset:7,bitSize:1},1), 1, \"bitOffset failure\" );\n assert(set_bits_of_int(0,{bitOffset:0,bitSize:1},1), 0x80, \"bitOffset failure 0,1,1 failure\");\n assert(set_bits_of_int(0xff,{bitOffset:12,bitSize:2},2), 251, \"bitOffset Failure 3\");\n}\n\nfunction test_bits_to_int(){\n let x = [\n // 0b 0011 1111 1000 0001\n new Uint8Array([0x3f,0x81]),\n new Uint8Array([0x3f,0x81]),\n ]\n let y = [\n {\n bitOffset: 0,\n bitSize: 2,\n },\n {\n bitOffset: 0,\n bitSize: 4,\n },\n {\n bitOffset: 2,\n bitSize: 2,\n },\n {\n bitOffset: 7,\n bitSize: 1,\n }\n ]\n let z = [\n 0,\n 3,\n 3,\n 1\n ]\n for( let i = 0; i < x.length; i++){\n //console.log(xxd(x[i]));\n assert(bits_to_int(x[i], y[i]), z[i], `bits_to_int failed test ${i}`);\n }\n}\n\nexport const tests = {\n test_bits_to_int,\n test_bcd,\n test_js_2_4_cstr,\n test_js_2_4_utf16str,\n test_hex_2_4_bytes,\n};\nfor( let t in tests ){\n tests[t]();\n}\n\n\n\n\n\n\n\n\n\n\nexport function ident_codeplug_radio_rdt(data){\n let intended_radio = data.slice(0x125,0x125+32)\n let radioname = cstr2js(Array.from(intended_radio));\n return radioname;\n}\nfunction make_editor(codeplug_format, radioname, data){\n //this is slow to build - 10k+ contacts and 3k+ channels and 250+ zones will do that.\n\n let getValueTypes = {\n name: data => utf16str2js(Array.from(data)),\n introLine: data => utf16str2js(Array.from(data)),\n contactName: data => utf16str2js(Array.from(data)),\n textMessage: data => utf16str2js(Array.from(data)),\n ascii: data => cstr2js(Array.from(data)),\n\n biFrequency: data=> fromBCD(data)/10,\n frequency: data=> fromBCD(data)/1e5,\n frequencyOffset: data=> fromBCD(data)/1e5,\n\n callID: assemble_le,\n ctcssDcs: function(data){\n if( assemble_le(data) == 65535 ){\n return 0;\n }\n return fromBCD(data)/10\n },\n contactListIndex: assemble_le,\n memberListIndex: assemble_le,\n gpsListIndex: assemble_le,\n spanList: x=>x,\n bandwidth: x=>x,\n listIndex: assemble_le,\n\n hexadecimal32: bytes2hex,\n hexadecimal4: bytes2hex,\n indexedStrings: x=>x,\n iStrings: (data,ft)=>{ \n //problem - there are iStrings that are byte based and iStrings that aren't.\n //\n let idx = assemble_le(data);\n return ft.strings[ idx ];\n },\n offOn: (data,ft)=>{\n return data;\n //if(data){\n //return \"On\";\n //} else {\n //return \"Off\";\n //}\n },\n onOff: (data,ft)=>{\n return data;\n //if(data){\n //return \"Off\";\n //} else {\n //return \"On\";\n //}\n },\n span: x=>x,\n\n }\n let setValueTypes = {\n name: jsstr2utf16,\n introLine: jsstr2utf16,\n contactName: jsstr2utf16,\n textMessage: jsstr2utf16,\n ascii: js2cstr,\n indexedStrings: x=>x,\n spanList: x=>x,\n bandwidth: x=>x,\n\n ctcssDcs: (val)=>{\n let scaled;\n if( val == 0 || val == null || val == undefined ){\n return dissemble_le(65535,2);\n } else {\n scaled = Math.floor(val * 10);\n }\n return toBCD(scaled);\n },\n frequency: (val)=>{\n //TODO: Math.floor leads to float errors, Math.round might or might not lead to other errors!\n let scaled = Math.round(val * 1e5);\n //console.log(val,val*1e5,scaled);\n return toBCD(scaled);\n },\n frequencyOffset: (val)=>{\n //TODO: Math.floor leads to float errors, Math.round might or might not lead to other errors!\n let scaled = Math.round(val * 1e5);\n return toBCD(scaled);\n },\n biFrequency: (val)=>{\n //TODO: this might lead to floating point errors?\n let scaled = Math.floor(val * 10);\n return toBCD(scaled);\n },\n\n hexadecimal32: hex2bytes,\n hexadecimal4: hex2bytes,\n callID: dissemble_le_sz(3),\n listIndex: dissemble_le_sz(2),\n contactListIndex: dissemble_le_sz(2),\n\n offOn: (data,ft)=>{\n if(data == \"On\"){\n return 0;\n } else if( data == \"Off\"){\n return 1;\n } else {\n return data;\n }\n },\n onOff: (data,ft)=>{\n if(data == \"On\"){\n return 1;\n } else if( data == \"Off\"){\n return 0;\n } else {\n return data;\n }\n },\n //iStrings: (data,ft)=>{ \n //console.log(\"setting ft:\",data,ft);\n //},\n //span: (data,ft)=>{ \n //console.log(\"setting ft:\",data,ft);\n //},\n }\n let e = {};\n function make_field_array(rt, ridx, ft, data){ \n const __v = {\n __v_skip: false,\n __v_raw: false,\n __v_isReadonly: false,\n __v_isRef: false,\n };\n const handler = {\n set: function(target, prop, value, receiver ){\n const propnum = parseInt(prop);\n if (propnum >= 0 && propnum < ft.max ){\n console.log(rt.typeName, ridx, ft.typeName, propnum, \"=\", value);\n let fidx = propnum;\n let field_data = cut_field( rt, ridx, ft, fidx, data);\n set_value(rt, ridx, ft, fidx, field_data, value);\n let x = get_value(rt, ridx, ft, fidx, field_data);\n target[propnum] = x;\n return x == value;\n\n } \n console.log(target,prop,value, \"INVALID\");\n return false;\n },\n get: function(target, prop, receiver ){\n if( prop == Symbol.iterator ){\n return function*(){\n for( let i = 0; i < ft.max; i++){\n let fidx = i;\n let field_data = cut_field( rt, ridx, ft, fidx, data);\n let x= get_value(rt, ridx, ft, fidx, field_data);\n target[i] = x;\n yield x;\n\n }\n }\n }\n if( typeof(prop) != typeof(\"\") ){\n console.log(rt.typeName, ridx, ft.typeName, prop);\n return;\n } \n if( prop in __v ){\n return ;\n }\n if( prop == \"includes\" ){\n return function(value){\n let filtered = [];\n for(let t of receiver){\n if( t == value ){\n return true;\n }\n }\n return false;\n }\n }\n //if( prop == \"deleted\" ){\n //once this works, i can make zone editing a little nicer\n //}\n if( prop == \"length\" ){\n //TODO: meant to encode used entries\n return ft.max;\n } \n if( prop == \"max\" ){\n return ft.max;\n }\n const propnum = parseInt(prop);\n if (propnum >= 0 && propnum < ft.max ){\n //console.log(rt.typeName, ridx, ft.typeName, propnum);\n let fidx = propnum;\n let field_data = cut_field( rt, ridx, ft, fidx, data);\n let x= get_value(rt, ridx, ft, fidx, field_data);\n target[propnum] = x;\n return x;\n } \n //filter\n }\n };\n const prox = new Proxy({rt:rt,ridx:ridx, ft:ft, data:data}, handler);\n return prox;\n\n }\n function writeBytes(dst,src,offset,size){\n for( let i = 0; i < size; i++ ){\n dst[offset+i] = src[i];\n }\n }\n function findOffset(rt, ridx, ft, fidx){\n //doesnt account for extOffset yet\n let offset = 0;\n offset += rt.offset;\n if( rt.max ){\n if( ridx == undefined ){\n throw(new Error(\"have a record array, but wasn't given a record index to dig down with!\"));\n }\n offset += ridx * rt.size;\n }\n if( ft.max ){\n offset += (fidx * ft.bitSize)/8\n }\n offset += ft.bitOffset/8; //users of this function expect only the one relevant byte!\n offset = Math.floor(offset); //get this byte here\n return offset;\n }\n function get_value( rt,ridx, ft, fidx, field_data){\n //console.log( rt.typeName, ridx, rt.max, ft.typeName, fidx, ft.max );\n if( ft.bitOffset % 8 == 0 && ft.bitSize %8 == 0){ //byte boundaries yay! if( getValueTypes[ft.valueType] ){\n\n if( getValueTypes[ft.valueType] ){\n return getValueTypes[ft.valueType](field_data,ft);\n } else {\n console.log(\"unknown bytesy type to get()\");\n console.log(ft.valueType, field_data, ft);\n throw `unimplemented bytesy valueType to get: ${ft.valueType}`;\n //return field_data;\n }\n } else {\n let offset = findOffset(rt, ridx, ft, fidx);\n //TODO: fix this. needs to be consistent about bitOffset/bitSize handling with regard to bo/bs \n //e.g. if bs is < 8, do i offset all the way up to that byte, or what?\n //(this is what I do now, in cut_field )\n //Note: For A Channels, the 16 old Channels slots are used for the first 16.\n //Then there are 48 more slots (96 bytes) in the extOffset area\n //Then the B Channels list comes after that in the extOffset area\n //let singleGet = get_ft_byte(field_data,ft);\n let singleOff = e._cp[offset];\n //assert(singleGet,singleOff, \"findOffset isn't matching get()\");\n let bits = bits_to_int(field_data, ft);\n if( getValueTypes[ft.valueType] ){\n return getValueTypes[ft.valueType](bits,ft);\n } else {\n console.log(\"unknown bitsy type to get()\");\n console.log(ft.valueType, field_data, bits, ft);\n //return bits;\n throw `unimplemented bitsy valueType to get: ${ft.valueType}`;\n }\n }\n }\n function set_value( rt, ridx, ft, fidx, field_data, val){\n //TODO: can i used a subarray to just write to the field data directly? \n //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/subarray\n //\n //need a handle to the codeplug\n //need a byteoffset into the full thing, plus the size of course\n //if not byte-aligned and byte-sized\n // need to pull current value to handle bits properly \n // then modify that value\n //then overwrite the existing content by splicing into the main codeplug file\n //which may require padding the value or truncating it\n console.log( \"SET\", rt.typeName, ridx, ft.typeName, fidx, \"=\", val);\n if( ft.bitOffset % 8 == 0 && ft.bitSize %8 == 0){ //byte boundaries yay!\n if( setValueTypes[ft.valueType] ){\n let x = setValueTypes[ft.valueType](val,ft);\n //console.log(\"val and f(val):\",val,x);\n let offset = rt.offset;\n if( ridx != undefined ){\n offset += ridx * rt.size;\n }\n offset = offset + ft.bitOffset/8;\n let sz = ft.bitSize/8;\n if( ft.max ){\n let idx = fidx;\n offset += idx*sz;\n }\n //bug with zones - not finding the _idx and so it's failing sometimes\n //above - what?\n let offset2 = findOffset(rt,ridx,ft,fidx);\n if( offset != offset2 ){\n console.log(\"findOffset not matching!\");\n debugger;\n }\n //console.log(\"offset:\",offset)\n //console.log(\"before write\",bytes2hex(e._cp.slice(offset,offset+sz)));\n writeBytes(e._cp, x, offset, sz);\n //console.log(\"after write\",bytes2hex(e._cp.slice(offset,offset+sz)));\n return true;\n } else {\n throw `unimplemented valueType to set: ${ft.valueType}`;\n }\n } else {//not byte aligned, or smaller than bytes, or whatever\n //we don't actually handle values that cross byte boundaries, just smaller-than-a-byte values\n if( setValueTypes[ft.valueType] ){\n //should only have to handle single bytes at a time\n //core of this: get current value. Make sure bits at selected position equal what we say.\n //then assert we haven't changed the other bits\n //console.log(\"set val to ft\", ft.bitOffset, ft.bitSize, ft);\n let offset = findOffset(rt,ridx,ft,fidx);\n const old = e._cp[offset]; //single byte\n const newval = setValueTypes[ft.valueType](val,ft);\n const modified = set_bits_of_int(old, ft, newval);\n e._cp[offset] = modified;\n console.log(offset,old,newval,modified, field_data.length, get_value(rt,ridx,ft,fidx,field_data));\n console.log(xxd(field_data));\n if( ! [\"offOn\",\"onOff\"].includes(ft.valueType ) ){ \n //no fail the assertion when setting offOn and onOff to default values because we don't follow Farnsworth's setup exactly\n assert(get_value(rt,ridx,ft,fidx,field_data), val, \"failure to verify set\");\n }\n return true;\n\n } else {\n throw `unimplemented bitsy valueType to set: ${ft.valueType}`;\n }\n }\n }\n function cut_field( rt, ridx, ft, fidx, data ){\n\n //return bytes such that bitOffset is still accurate, \n //so that bits_to_int, which masks out and returns subfields,\n //can use bitOffset as expected\n //\n //problem is this fucks up _setting_ values because set_bits_of_int works on individual bytes\n //and set_value wants to .cp[offset] as a result\n let record_offset = rt.offset;\n if( ridx){\n record_offset += ridx*rt.size;\n }\n //let thesebytes = data.subarray(offset, offset+rt.size); //had a +10 here to account for errors in the descriptor file, but now need that to be gone to avoid overlaps\n \n let field_data;\n let bo,bs;\n if( ft.max ){ \n //need fidx\n bs = Math.floor(ft.bitSize/8);\n //console.log( \"cut_field in array\", rt.typeName, ridx, ft.typeName, fidx, data.length, bo, bs);\n //if( findOffset(rt,ridx,ft,fidx) != bo ){\n //throw(new Error(\"wtf\"));\n //}\n if( ft.extIndex && fidx >= ft.extIndex ){\n let oldbo = bo;\n let extFidx = fidx - ft.extIndex;\n bo = ft.extOffset + ridx*ft.extSize + Math.floor(ft.extBitOffset/8) + extFidx*Math.floor(ft.bitSize/8)\n //debugger;\n } else {\n bo = record_offset + Math.floor(ft.bitOffset/8) + fidx*Math.floor(ft.bitSize/8);\n }\n } else {\n //ignore fidx, not an array \n assert( fidx, undefined, \"cut_field provided a fidx when ft is not an array?\");\n bo = record_offset + Math.floor(ft.bitOffset/8);\n if( findOffset(rt,ridx,ft,fidx) != bo ){\n throw(new Error(\"wtf\"));\n }\n bs = Math.floor(ft.bitSize/8);\n }\n if( bs == 0 ){ \n //bitSize is too small\n //\n //what about when bitOffset=12, bitSize=2, like for Repeater Slot?\n //we need to figure out the size based on bitoffset + bitsize?\n bs = Math.ceil( (ft.bitOffset + ft.bitSize)/8 );\n //but now our offset is wrong! so we need to un-offset it \n if( ft.bitOffset >= 8 ){\n bo -= Math.floor(ft.bitOffset/8);\n }\n }\n field_data = data.subarray(bo, bo+bs);\n if( field_data.length == 0 ){\n console.log(rt, ft, bo,bs, data);\n throw(new Error(\"Could not subarray bytes\"));\n }\n return field_data;\n }\n function record_deletion_management(rt, ridx, data){\n let record_offset = rt.offset;\n if( ridx ){\n record_offset += ridx*rt.size;\n }\n let o = {};\n if( ! rt.delDesc ){\n return undefined;\n }\n let offset = record_offset + rt.delDesc.offset;\n let size = rt.delDesc.size;\n let value = rt.delDesc.value;\n assert( size, 1, \"make_record, delDesc size is not 1 byte as expected for \" + rt.type);\n let deleted_indicator = data.subarray(offset, offset+size);\n\n o.deleted = ()=>deleted_indicator[0] == value;\n o.delete = ()=>{\n deleted_indicator[0] = value;\n }\n o.undelete = ()=>{\n deleted_indicator[0] = value+1; //just has to not be value\n //TODO set with default values\n //move \"sanify\" to here from channel.vue\n }\n return o;\n }\n function make_record(rt,ridx, data){ \n //data is only the data for this record\n //or rather, it's pointed at the start, end may be too short (because of an error in the binary description)\n //or too long (because of a hack around the binary description errors)\n //we're only passed idx for our own situational awareness \n let delfunctions = record_deletion_management(rt,ridx, data);\n\n //fetch full field descriptions for this record\n let fields = {};\n for( let f of rt.fieldTypes ){ \n let ft = codeplug_format.fields.filter(x=>x.type==f)[0];\n fields[ft.typeName] = ft;\n }\n const __v = {\n __v_skip: false,\n __v_raw: false,\n __v_isReadonly: false,\n __v_isRef: false,\n };\n\n const handler = {\n set: function(target, prop, value, receiver ){\n if( typeof(prop) != typeof(\"\") ){\n console.log(\"nonstring\", target.rt.typeName, prop, typeof(prop))\n return;\n }\n if( prop == \"deleted\" ){\n if( value ){\n delfunctions.delete();\n } else {\n delfunctions.undelete();\n }\n return true;\n }\n if( prop in fields ){\n let ft = fields[prop];\n if( ft.max ){\n console.log(\"make a field_array\", prop);\n //return make_field_array(rt, ridx, ft, data);\n console.log(\"assigning to field array entries not yet supported\");\n return false;\n } else {\n let field_data = cut_field( rt, ridx, ft, undefined, data);\n set_value( rt, ridx, ft, undefined, field_data, value );\n let x = get_value( rt, ridx, ft, undefined, field_data );\n target[prop] = x;\n return x == value;\n }\n }\n },\n get: function(target, prop, receiver ){\n if( typeof(prop) != typeof(\"\") ){\n console.log(\"nonstring\", target.rt.typeName, prop, typeof(prop))\n return;\n }\n if( prop in __v ){\n return ;\n }\n if( prop in target ){\n return target[prop];\n }\n if( prop == \"deleted\" ){\n return delfunctions[prop]();\n }\n if( prop in fields ){\n //console.log(\"i can get that\",prop);\n //console.log(fields);\n let ft = fields[prop];\n if( ft.max ){\n //console.log(\"make a field array\", rt.typeName, ridx, prop);\n let x = make_field_array(rt, ridx, ft, data);\n target[prop] = x;\n return x;\n } else {\n //console.log(\"return a single field\", prop);\n let field_data = cut_field( rt, ridx, ft, undefined, data);\n let x = get_value( rt, ridx, ft, undefined, field_data );\n target[prop] = x;\n return x;\n //now we have rt, idx, ft, and data \n // don't need to pass prop because ft implies the prop\n }\n } else {\n if( rt.typeName == \"Zones\" && prop == \"Channels\" ){\n console.log(\"Special handling - ABChannels but want to support Channels too\");\n let ft = fields[\"A Channels\"];\n let x = make_field_array(rt, ridx, ft, data);\n\n //TODO: Make a proxy so all A Channels settings get pushed to B Channels too?\n //let ft2 = fields[\"B Channels\"];\n //let x2= make_field_array(rt, ridx, ft2, data);\n \n target[prop] = x;\n console.log(ridx, ft, x);\n return x;\n }\n if( ! prop.includes(\"__v\") ){\n console.log(\"unhandled field from\", target.rt.typeName, ridx, typeof(prop),prop);\n debugger;\n } else {\n //may need to handle these to fix reactivity\n console.log(\"unhandled __v\", prop);\n }\n }\n }\n }\n const prox = new Proxy({rt:rt,data:data,ridx:ridx,fields:fields}, handler);\n return prox;\n }\n function make_record_array(rt, data){\n //TODO: this and make_field_array have duplicated work, which is silly\n const handler1 = {\n get: function(target, prop, receiver ){\n //console.log(\"record_array\",target.rt.typeName, typeof(prop),prop);\n if( prop == Symbol.iterator ){\n return function*(){\n for( let i = 0; i < target.rt.max; i++){\n if( target[i] == undefined ){\n target[i] = make_record(target.rt, i, target.data);\n }\n yield target[i];\n }\n }\n }\n if( typeof(prop) != typeof(\"\") ){\n return;\n }\n if( prop == \"full\" ){\n return target.max - target.length > 0;\n }\n if( prop == \"length\" ){\n //meant to be a list of currently used entries\n let acc = 0;\n for( let i = 0; i < target.rt.max; i++){\n if( target[i] == undefined ){\n target[i] = make_record(target.rt, i, target.data);\n }\n if( ! target[i].deleted ){\n acc++;\n }\n }\n return acc;\n } else if( prop == \"max\" ){\n return target.rt.max;\n } else if( prop == \"filter\" ){\n return function(predicate){\n let filtered = [];\n for( let i = 0; i < target.rt.max; i++){\n if( target[i].deleted ){\n continue; //skip deleted items\n } \n if( predicate(target[i],i) ){\n filtered.push(target[i]);\n }\n }\n return filtered;\n }\n }\n\n //handle array indexes\n const propnum = parseInt(prop);\n if (propnum >= 0 && propnum < target.rt.max ){\n if( target[propnum] == undefined ){\n target[propnum] = make_record(target.rt, propnum, target.data);\n }\n return target[propnum];\n }\n },\n };\n const proxy1 = new Proxy({rt:rt,data:data}, handler1);\n if( rt.typeName == \"Zones\"){\n console.log(proxy1);\n }\n return proxy1;\n }\n console.log(codeplug_format);\n e._cp = data;\n let cp_def = codeplug_format.codeplugs.filter(x=>x.models.includes(radioname))[0];\n if( cp_def == undefined ){\n throw \"not a recognized or supported codeplug format\";\n }\n for( let r of cp_def.recordTypes ){ \n //for every record in our relevant codeplug\n //get the record format data\n let rt = codeplug_format.records.filter(x=>x.type==r)[0];\n\n if( rt.max != undefined ){ \n //records can have arrays\n e[rt.typeName] = make_record_array(rt, data);\n } else {\n //or just be a single entry\n e[rt.typeName] = make_record(rt, undefined, data);\n }\n }\n return e;\n}\nlet tytera_map = {\n //deviation:\"Bandwidth (KHz)\",\n name: \"Channel Name\",\n //talkgroup:\"Contact Name\", //needs an fn\n //timeslot:\"Repeater Slot\", //off by one i think\n //color_code:\"Color Code\",\n //offset:\"Tx Offset (MHz)\", //needs an fn\n freq:\"Rx Frequency (MHz)\",\n //need a mode indicator\n //need a type (simplex, repeater) indicator\n}\n\nasync function apply_json_to_codeplug(zones,editor,codeplug){\n print(\"start apply \" + new Date());\n let newchannels = [];\n for( let c of zones[0].channels ){\n let newc = {};\n for( let k in tytera_map ){\n let t = tytera_map[k];\n if( c[k] ){\n newc[t] = c[k];\n }\n }\n newchannels.push(newc);\n }\n function get_first_empty_channel(editor){\n let cidx = 0;\n while( editor.Channels[cidx][\"Channel Name\"] != \"\" ){\n cidx++;\n }\n return cidx;\n }\n console.log(newchannels);\n let cidx = get_first_empty_channel(editor);\n for( const c of newchannels ){\n Object.assign( editor.Channels[cidx], c );\n //console.log(editor.Channels[cidx]);\n cidx++;\n }\n}\nfunction check_codeplug_layout(cpfmt){\n for( let cp of cpfmt.codeplugs ){\n let messages = [];\n const calert = (condition,msg)=>{\n if(condition){\n messages.push(msg);\n }\n }\n let fmt = cp.ext;\n let sz = cp[`${fmt}Size`];\n let sections = [];\n for( let r of cp.recordTypes ){\n let rt = cpfmt.records.filter(x=>x.type==r)[0];\n let start = rt.offset;\n let end = start+rt.size;\n if( rt.max ){\n end = start+rt.size*rt.max;\n } \n sections.push({name:rt.typeName,start:start, end:end});\n }\n sections = sections.sort(sortbykey(\"start\"));\n console.log(cp.type, sections);\n\n calert( sections[0].start != 0, \"Unused beginning of file\");\n for( let i = 1; i < sections.length; i++){\n let a = sections[i-1].end;\n let b = sections[i].start;\n calert(a>b, `Overlap between ${sections[i-1].name} and ${sections[i].name}: ${a-b} bytes overlap`);\n calert(ar.json());\n }\n //TODO cache this somehow\n const e = await codeplug_editor(cpm.rdt, cpj);\n cpm.editor = e;\n console.log(\"codeplug.js rdt_w_metadata have editor\");\n\n\n const def = {};\n def.overall = cpj.codeplugs.filter(x=>x.models.includes(model))[0];\n def.records = {};\n def.fields = {};\n for( let r of def.overall.recordTypes ){ //for every record in our relevant codeplug\n let rt = cpj.records.filter(x=>x.type == r )[0]\n def.records[rt.typeName] = rt;\n def.records[rt.type] = rt;\n for( let f of rt.fieldTypes ){\n let ft = cpj.fields.filter(x=>x.type == f )[0]\n def.fields[ft.typeName] = ft;\n def.fields[ft.type] = ft;\n }\n }\n console.log(def);\n cpm.def = def;\n console.log(cpj, e);\n return cpm;\n}\nfunction tyt_get_dmrid(cp){\n console.log(\"get_dmrid\",cp);\n const id = uint8s_to_int(cp.slice(549+0x2084, 549+0x2084+4));\n console.log(\"get_dmrid\",cp,id);\n return id;\n}\nfunction cp_filename(cp){\n if( cp.filename ){\n return cp.filename;\n }\n const t = cp.readdate;\n let ts = [\n t.getFullYear(),\n t.getMonth()+1, //wtf javascript\n t.getDate(), //not getDay, mind you\n t.getHours(),\n t.getMinutes()\n ].map(x=>String(x).padStart(2,\"0\")).join(\"\");\n return `${ts}_${cp.model}_${cp.bands.join(\"\")}_${cp.dmrid}.rdt`;\n}\n\n//rewrite make_editor to use es6 proxies\n//https://medium.com/@xoor/an-introduction-to-es6-proxies-acc6b59c713b\n//https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy\n//https://github.com/vuejs/vue/issues/4384\n\n//web workers:\n//https://developers.google.com/web/fundamentals/primers/service-workers/\n//https://www.html5rocks.com/en/tutorials/workers/basics/\nfunction make_codeplug_proxy(cp){\n console.log(cp);\n const handler1 = {\n get: function(target, prop, receiver ){\n console.log(receiver, prop);\n return receiver;\n },\n set: function(target, prop, receiver ){\n console.log(receiver, prop);\n return receiver;\n }\n };\n //have proxys all the way down to the records/record arrays?\n //the goal being to not have 100000 proxies, just like, idk, 50?\n const proxy1 = new Proxy(cp, handler1);\n console.log(\"PROXY\",proxy1);\n}\nexport default {\n make_editor,\n make_codeplug_proxy,\n ident_codeplug_radio_rdt,\n codeplug_editor,\n bin2rdt,\n rdt2bin,\n readFileBytes,\n uint8s_to_int,\n rdt_w_metadata,\n cp_filename,\n bands,\n hex2bytes,\n bytes2hex,\n bytes2string,\n js2cstr,\n cstr2js,\n assemble_le,\n dissemble_le,\n dissemble_le_sz\n};\n","import { render } from \"./connectedradio.vue?vue&type=template&id=482ba319&scoped=true\"\nimport script from \"./connectedradio.vue?vue&type=script&lang=js\"\nexport * from \"./connectedradio.vue?vue&type=script&lang=js\"\n\nimport \"./connectedradio.vue?vue&type=style&index=0&id=482ba319&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-482ba319\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./usbhelp.vue?vue&type=template&id=6e4c8b02\"\nimport script from \"./usbhelp.vue?vue&type=script&lang=js\"\nexport * from \"./usbhelp.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\n\n\n","import { render } from \"./usbdebugging.vue?vue&type=template&id=61147e38\"\nimport script from \"./usbdebugging.vue?vue&type=script&lang=js\"\nexport * from \"./usbdebugging.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","//TODO\n//firmware version\n//radio feature tests (GPS, etc)\n//memory map of the codeplug in offsets \n\n/*\n\nAll Codeplugs:\n\n------ 0\n549 header\n------ 549\n262144 body\n------ 262693 (40220 + 5 - 40220 + 5 + 16)\n16 bytes trailer (blank in gen1 radios? has data in gen2?)(or is that a product of the trailer actually being in the middle of the codeplug?\n------ 262709\n589824 Gen2 radio body\n64 bytes [3000] channels immediately after the trailer\n------ 852533\n\nNotice that the \"trailer\" is embedded in the middle of the RDT for newer radios\nThey (TYT) literally just appended the new codeplug flash contents to\nthe end of the old system. Gross.\n\n\n*/\n\nimport { xxd, assert, invert, wait_for, _x, fetchblob } from '@/libs/misc.js';\nimport codeplugs from '@/libs/codeplug.js';\n//uses DFU\nconst tytera_380_series = {vendorId:0x0483, productId:0xDF11};\nconst openrtx_serial = {vendorId:0x0483, productId:0x5740};\nconst tytera_md430 = {vendorId:0x1206, productId:0x0227};\n\n//serial port implementation needed, CDC-ACM i believe\nconst gd77 = {vendorId:0x15a2, productId:0x0073};\nconst anytone = {vendorId:0x28e9, productId:0x018a};\nexport const radio_filters = {filters:[\n tytera_380_series, \n openrtx_serial,\n tytera_md430,\n gd77, anytone \n]};\nfunction address_parts(addr){ //can replace with dissemble_le\n const a = addr & 0xff;\n const b = (addr >> 8) & 0xff;\n const c = (addr >> 16) & 0xff;\n const d = (addr >> 24) & 0xff;\n return [a,b,c,d]\n}\n\nconst Request = {\n \"DETACH\": 0,\n \"DNLOAD\": 1,\n \"UPLOAD\": 2, \n \"GETSTATUS\": 3,\n \"CLRSTATUS\": 4,\n \"GETSTATE\": 5,\n \"ABORT\": 6\n}\nconst iRequest = invert(Request);\n\nconst State = {\n \"appIDLE\":0,\n \"appDETACH\":1,\n \"dfuIDLE\":2,\n \"dfuDNLOAD_SYNC\":3,\n \"dfuDNBUSY\":4,\n \"dfuDNLOAD_IDLE\":5,\n \"dfuMANIFEST_SYNC\":6,\n \"dfuMANIFEST\":6,\n \"dfuMANIFEST_WAIT_RESET\":8,\n \"dfuUPLOAD_IDLE\":9,\n \"dfuERROR\":10,\n}\nconst iState = invert(State);\n\nconst Status = {\n \"OK\":0,\n \"errTARGET\":1,\n \"errFILE\":2,\n \"errWRITE\":3,\n \"errERASE\":4,\n \"errCHECK_ERASED\":5,\n \"errPROG\":6,\n \"errVERIFY\":7,\n \"errADDRESS\":8,\n \"errNOTDONE\":9,\n \"errFIRMWARE\":10,\n \"errVENDOR\":11,\n \"errUSBR\":12,\n \"errPOR\":13,\n \"errUNKNOWN\":14,\n \"errSTALLEDPKT\":15\n}\nconst iStatus = invert(Status);\n\nclass USB {\n //needs a common set like the libusb-like compat wrapper methods\n //and then make the DFU and ACM from this one\n constructor(dev){\n this.device = dev;\n this.mock = false;\n }\n bmRequestTypeInt2obj(i){\n //console.log(\"bmRt: \",dec2bin(i));\n const in_or_out = (i>>7) & 0x1;\n const in_or_out_a = [\"out\",\"in\"];\n //console.log(\"in_or_out:\",in_or_out,dec2bin(in_or_out));\n\n const type = (i >> 5) & 0x3;\n const type_a = [\"standard\",\"class\",\"vendor\",\"reserved\"];\n const typestr = type_a[type];\n //console.log(\"type:\",type,dec2bin(type),typestr);\n\n\n const recipient = (i) & 0x1f;\n const recipient_a = [\"device\",\"interface\",\"endpoint\",\"other\",\"reserved\"];\n const recipientstr = recipient_a[recipient];\n //console.log(\"recipient:\",recipient, dec2bin(recipient),recipientstr);\n\n return [in_or_out_a[in_or_out], {\n requestType: typestr,\n recipient: recipientstr,\n }]\n\n }\n async ctrl_transfer( requestType, request, value, index, length2read_or_data2send ){\n const [in_or_out,setup] = this.bmRequestTypeInt2obj(requestType); \n\n assert(\"requestType\" in setup);\n assert(\"recipient\" in setup);\n setup[\"request\"] = request;\n setup[\"value\"] = value;\n setup[\"index\"] = index; //webusb seems to 1 index this?\n //console.log(\"in or out:\", in_or_out);\n //console.log(\"setup:\", setup);\n //console.log(\"l2r or d2s:\", length2read_or_data2send);\n if( in_or_out == \"in\" ){\n return await this.device.controlTransferIn(setup, length2read_or_data2send);\n } else {\n if( !length2read_or_data2send ){\n //console.log(\"replacing with empty array buffer\");\n length2read_or_data2send = [];\n }\n const d2sb = Uint8Array.from(length2read_or_data2send);\n return await this.device.controlTransferOut(setup, d2sb);\n }\n }\n}\nclass ACM extends USB {\n async init(){\n console.log(\"ACM init\");\n await this.device.open();\n //await this.device.claimInterface(0);\n //await this.device.selectConfiguration(1);\n //await this.device.selectAlternateInterface(0,0);\n return;\n }\n}\nclass DFU extends USB {\n async init(){\n this.state = null;\n this.stateString = \"\";\n this.status = null;\n this.statusString = \"\";\n await this.device.open();\n await this.device.claimInterface(0);\n //only ddifference between normal and dfu mode i can see is memory\n //location for iInterface (despite how libusb works... which is\n //weird that they're so different)\n await this.device.selectConfiguration(1);\n await this.device.selectAlternateInterface(0,0);\n //console.log(\"dfu init() complete\");\n return;\n }\n async wait(){\n //console.log(\"dfu.wait 10ms\");\n await wait_for(10); //time in ms\n return;\n }\n async clear_status(){\n const x = await this.ctrl_transfer( 0x21, Request.CLRSTATUS, 0, 0, null);\n //console.log(\"dfu.clear_status: \",x);\n return x;\n\n }\n async detach(){\n const x = await this.ctrl_transfer( 0x21, Request.DETACH, 0, 0, null);\n //console.log(\"dfu.detach: \",x);\n return x;\n }\n async enter_dfu_mode(){\n const action_map = [ //written in order of enum values, e.g. this.detach when appIDLE\n \"detach\",\n \"wait\",\n \"wait\",\n \"abort\",\n \"wait\",\n \"abort\",\n \"abort\",\n \"abort\",\n \"wait\",\n \"abort\",\n \"clear_status\",\n ] \n //console.log(`[DFU]: Entering DFU mode on usb device '${this.device.productName}'`);\n while( 1 ){\n const state = await this.get_state();\n //console.log(`dfu.enter_dfu_mode: current state ${state}`);\n if( state == State.dfuIDLE ){\n //console.log(\"dfu.enter_dfu_mode: done!\");\n break;\n } else {\n //console.log(`dfu.enter_dfu_mode: calling ${action_map[state]}`);\n //console.log(\"enter_dfu_mode\",this);\n //(this) was getting clobbered when just doing action_map[state](), so instead of function references went to strings.\n await this[ action_map[state] ]() \n }\n }\n }\n async ping(){\n try {\n await this.get_state();\n return true;\n } catch (e){\n return false;\n }\n }\n async get_state(){\n const x = await this.ctrl_transfer( 0xA1, Request.GETSTATE, 0, 0, 1);\n const y = x.data.getUint8();\n //console.log(\"dfu.get_state:\",y);\n this.state = y;\n this.stateString = iState[this.state];\n return y;\n }\n async get_status(){\n const x = await this.ctrl_transfer( 0xA1, Request.GETSTATUS, 0, 0, 6);\n //console.log(\"dfu.get_status: raw \",x);\n const y = [];\n for( let i = 0; i < x.data.byteLength; i++){\n y.push( x.data.getUint8(i));\n }\n const z = [\n y[0], //status int\n (((y[1] << 8) | y[2]) << 8) | y[3], //timeout?\n y[4], //state int\n y[5] //discarded\n ];\n this.status = z[0];\n this.statusString = iStatus[this.status];\n this.state = y[4];\n this.stateString = iState[this.state];\n //console.log(\"dfu.get_status: y \",y);\n //console.log(\"dfu.get_status: z \",z);\n return z;\n }\n async abort(){\n const x = await this.ctrl_transfer( 0x21, Request.ABORT, 0, 0, null);\n return x;\n }\n async change_state_and_reenter_dfu(name, expected_state, ...args){\n await this.get_status(); //change state\n await this.wait();\n const s = await this.get_status(); //get status now that state has changed\n if( s[2] == expected_state ){\n //console.log(`Success in ${name}`);\n await this.enter_dfu_mode()\n return true;\n } else {\n //console.log(`Error in ${name}`);\n await this.enter_dfu_mode()\n return false;\n }\n }\n async wait_until_state(desired_state){\n let [status, timeout, state, discarded] = await this.get_status();\n while( state != desired_state ){\n await this.wait();\n [status, timeout, state, discarded] = await this.get_status();\n }\n return\n }\n async clear_status_until_state( desired_state){\n let [status, timeout, state, discarded] = await this.get_status();\n while( state != desired_state ){\n await this.clear_status();\n [status, timeout, state, discarded] = await this.get_status();\n }\n return\n }\n async set_address(addr){\n const [a,b,c,d] = address_parts(addr);\n const x = await this.ctrl_transfer( 0x21, Request.DNLOAD, 0, 0, [0x21, a, b, c, d] );\n const y = await this.change_state_and_reenter_dfu(`dfu.set_address(addr=${addr})`, State.dfuDNLOAD_IDLE );\n if( y ){ return x}\n else { \n //console.log(\"x\",x);\n //console.log(\"y\",y);\n return y;\n }\n }\n async read(blk_n, block_size){\n const tres = await this.request_upload( blk_n, block_size);\n const buf = tres.data;\n const [status, timeout, state, discarded] = await this.get_status();\n if( status != Status.OK || tres.status != \"ok\" ){\n //console.log(`read dfu status = ${status} (${iStatus[status]}), state=${state} (${iState[state]}) `);\n }\n if( tres.status != \"ok\" || buf.byteLength != block_size ){\n\n //console.log(tres, buf);\n throw new Error(`in read, received block length (${buf.byteLength}) does not equal expected block_size (${block_size})`);\n } else {\n return this.buf_to_bytes(buf);\n }\n }\n\n\n bytes_to_list(bytes){\n return Array.from(bytes);\n }\n buf_to_bytes(buf){\n const size = buf.byteLength;\n const a = new Uint8Array(size);\n for( let i = 0; i < size; i++){\n a[i] = buf.getUint8(i);\n }\n return a;\n }\n bytes_concat(expected_bytes,bufs){\n const a = new Uint8Array(expected_bytes);\n for( let i = 0; i < bufs.length; i++ ){\n a.set(bufs[i], i*1024);\n }\n return a;\n }\n async request_upload(block_num, length, idx=0){\n //console.log(`request_upload(block_num=${block_num}, length=${length}, idx=${idx})`);\n const x = await this.ctrl_transfer(0xA1,Request.UPLOAD, block_num, idx, length);\n //console.log(`dfu.request_upload(block_num=${_x(block_num)}, length=${length}, idx=${idx}) -> ${x.data.byteLength} bytes`);\n return x;\n }\n async request_dnload(block_num, data, idx=0){\n //console.log(`request_dnload(block_num=${block_num}, data=${data}, idx=${idx})`);\n return await this.ctrl_transfer(0x21,Request.DNLOAD, block_num, idx, data);\n }\n}\n\n\nclass TYTDMRDFU extends DFU {\n async md380_custom(a,b){\n const x = await this.ctrl_transfer( 0x21, Request.DNLOAD, 0, 0, [a, b]);\n const y = await this.change_state_and_reenter_dfu(`md380_custom( ${_x(a)}, ${_x(b)} )`, State.dfuDNLOAD_IDLE);\n if( y ){ return x}\n else { \n //console.log(\"x\",x);\n //console.log(\"y\",y);\n throw new Error(\"md380_custom failed\");\n //return y;\n }\n }\n async programming_mode(){\n const x = await this.md380_custom(0x91, 0x01);\n return x;\n }\n async reboot(){\n //console.log(\"THIS:\",this);\n await this.enter_dfu_mode();\n const x = await this.md380_custom(0x91, 0x05);\n return x;\n }\n async raw_identify_radio(){\n await this.md380_custom(0xa2, 0x01);\n await this.clear_status_until_state( State.dfuIDLE );\n //const tres = await this.request_upload(0,32);\n const bytes = await this.read(0, 32);\n await this.enter_dfu_mode();\n return bytes;\n }\n async identify_radio(){\n //await this.ctrl_transfer(0x21, 1, 0, 0, [0xA2, 0x01])\n const bytes = await this.raw_identify_radio();\n const data = this.bytes_to_list(bytes);\n //await this.enter_dfu_mode();\n /*\n * Example: \n UV380 with GPS, S_017.009\n CPS 1.06\n 00000000: 4d44 2d55 5633 3930 00ff ffff ffff ffff MD-UV390........\n 00000010: 2302 0052 0040 0048 6013 4017 ffd9 ffff #..R.@.H`.@.....\n \n MD2017 with GPS, S004.002\n CPS 1.20\n 00000000: 3230 3137 00ff ffff ffff ffff ffff ffff 2017............\n 00000010: 2102 0052 0040 0048 6013 4017 fff8 ffff !..R.@.H`.@.....\n\n MD2017 no GPS, D004.002\n CP 1.16\n 00000000: 3230 3137 00ff ffff ffff ffff ffff ffff 2017............\n 00000010: 2102 0052 0040 0048 6013 4017 fff8 ffff !..R.@.H`.@.....\n\n MD380 VHF with GPS, md380tools 9a771c9, S13ish\n CPS 1.36\n 00000000: 4d44 3339 3000 ffff ffff ffff ffff ffff MD390...........\n 00000010: 2000 0252 6013 4017 0888 8888 fffe ffff ..R`.@.........\n\n MD380 VHF no gps\n CPS 1.36\n 00000000: 4452 3738 3000 ffff ffff ffff ffff ffff DR780...........\n 00000010: 2000 ff33 6013 4017 ffff ffff fffe ffff ..3`.@.........\n\n MD380 uhf no gps, md380tools based on D13ish I think\n CPS 1.30\n 00000000: 4452 3738 3000 ffff ffff ffff ffff ffff DR780...........\n 00000010: 2002 ff33 0040 0048 ffff ffff ffff ffff ..3.@.H........\n\n\n\n */\n /*\n * scratch space:\n\n 2302 0052 ___________________ __d9 ____ UV380 with GPS\n 2000 0252 ___________________ __fe ____ MD380 VHF with GPS\n 2102 0052 ___________________ __f8 ____ MD2017 with GPS\n 2102 0052 ___________________ __f8 ____ MD2017\n 2000 ff33 ___________________ __fe ____ MD380 VHF\n 2002 ff33 ___________________ __ff ____ MD380 UHF\n 0x0 byte counts up (CPS version?)\n ff, fe, f8, d9 counts down (?)\n all dual-banders have 0052...\n gps and non-gps md2017 have identical signatures, \n so gps does not appear to be reported here\n\n */\n\n //console.log(data);\n const ident_report = {\n //\"from\": myid,\n \"name\": \"radio_identity_report\",\n \"function\": \"DFU.identify_radio\",\n \"data\": data\n }\n //console.log(ident_report);\n //rprint(data);\n //if( !dev ){\n //jl.info(JSON.stringify(ident_report));\n //}\n //hexprint(\"radio id response:\",data);\n //returns a 32 byte list with an ascii string describing the radio,\n //some 0xFFs, and then what I assume is either chinese or version\n //numbers or something\n //save_data( data, \"identify_radio.bin\");\n const freq_ranges = await this.parse_radio_freqs(data);\n const name = await this.parse_radio_name(data);\n\n return [name, freq_ranges, data];\n }\n async get_radio_name(){\n const [name,freq_ranges] = await this.identify_radio();\n await this.enter_dfu_mode();\n return name;\n }\n async parse_radio_freqs(data){\n data = data.slice(0x10); //first 16 bytes appear to set aside for model names\n const first_range = data.slice(4,4+4);\n const second_range = data.slice(8,8+4);\n let ranges;\n if( [0xff, 0x08].includes( second_range[0]) ){\n //what the fuck kind of test is _that_?\n ranges = [first_range];\n //single band radio\n } else {\n ranges = [first_range, second_range];\n //multi band radio\n }\n function bytes2nibbles(bs){\n const nibbles = [];\n for( let i = bs.length-1; i >= 0; i--){\n const n1 = (bs[i] >> 4)& 0xF;\n const n2 = bs[i] & 0xF;\n nibbles.push(n1);\n nibbles.push(n2);\n }\n return nibbles;\n }\n function bcdFreqRange2IntFreqRange(raw_freq_range){\n let start = raw_freq_range.slice(0,0+2);\n let end = raw_freq_range.slice(2,2+2);\n start = bytes2nibbles(start).join(\"\");\n end = bytes2nibbles(end).join(\"\");\n //now in strings like 4800, meaning 480MHz, or 4800 * 100KHz, or 4800*1e5\n start = parseInt(start)*1e5;\n end = parseInt(end)*1e5;\n //now an int that represents frequency in Hz\n return [start, end]\n }\n //console.log(data);\n const int_ranges = ranges.map(x=>bcdFreqRange2IntFreqRange(x))\n return int_ranges\n \n \n }\n async parse_radio_name(data){\n const end_of_ascii_string = data.indexOf(0);\n const name = data.slice(0,end_of_ascii_string)\n .map(c=> String.fromCharCode(c)).join(\"\");\n return name;\n }\n async get_radio_gen(radioname){\n if( ! radioname ){\n const radioname = await this.get_radio_name();\n }\n let gen = -1;\n if( [\"D680\"].includes(radioname) ){\n gen = 0;\n } else if( [\"DR780\",\"MD390\"].includes(radioname) ){\n gen = 1;\n } else if( [\"2017\", \"MD-UV390\",\"MD-UV380\"].includes(radioname) ){\n gen = 2;\n } else {\n throw \"dfu.js::get_radio_gen(): Unknown radio generation\";\n }\n return gen;\n }\n pad_bytes(buf, block_size){\n const a = new Uint8Array(block_size);\n a.fill(0xff);\n a.set(buf);\n return a;\n }\n progress_clean(){\n const now = new Date();\n if( ! this.progress ){\n this.progress = {}; //it's an object for easier updates by name\n }\n let oldprogress = this.progress;\n this.progress = {}; \n for( let old of Object.values(oldprogress) ){\n let diff = now - old.lastupdated;\n if( !(old.finished && diff > 5000 )){\n this.progress[ old.name ] = old;\n } \n }\n }\n progress_get(){\n const now = new Date();\n this.progress_clean();\n return this.progress;\n }\n progress_init(name,max){\n const now = new Date();\n this.progress_clean();\n this.progress[name] = {\n name: name,\n max: max,\n current:0,\n finished:false,\n errored: false,\n started: new Date(),\n lastupdated:new Date(),\n elapsed: 0,\n msg:\"started\",\n };\n }\n progress_update(name,current){\n const now = new Date();\n this.progress[name].current = current;\n this.progress[name].lastupdated = now;\n this.progress[name].elapsed = now - this.progress[name].started;\n }\n progress_finish(name, has_error, msg){\n this.progress[name].errored = has_error;\n this.progress[name].current = this.progress[name].max;\n this.progress[name].lastupdated = new Date();\n this.progress[name].msg = msg;\n if( ! has_error ){\n this.progress[name].finished = true;\n }\n\n }\n async read_flash(addr, bytelen){\n const block_size = 1024;\n let block_number = addr/block_size;\n const block_count = bytelen/block_size;\n const bytebufs = [];\n this.progress_init(\"read_flash\",bytelen);\n await this.set_address(0x00000000);\n //console.log(`Expecting to read ${bytelen} bytes from flash`);\n let total_read = 0;\n for( let i = 0; i < block_count; i++){\n let adjusted_block_number = block_number + 2;\n if( block_number >= 256 && block_number < 2048-832 ){\n adjusted_block_number += 832;\n }\n const buf = await this.read(adjusted_block_number, block_size);\n total_read += buf.byteLength;\n this.progress_update(\"read_flash\",total_read);\n\n bytebufs.push(buf);\n block_number += 1;\n }\n //console.log(bytebufs);\n const a = this.bytes_concat(bytelen, bytebufs);\n this.progress_finish(\"read_flash\",false,\"ok\");\n return a;\n }\n async write_flash(addr, data){\n const block_size = 1024;\n let block_number = addr/block_size;\n const bytelen = data.byteLength;\n const block_count = Math.ceil(bytelen/block_size);\n const blockedSize = block_count * block_size;\n const bytebufs = [];\n let total_written = 0;\n console.log(`Erasing ${blockedSize} bytes at ${_x(addr)}`);\n await this.eraseFlashBlocks(addr, blockedSize);\n //console.log(`Expecting to write ${block_count} blocks, ${bytelen} bytes (actually ${blockedSize} bytes for block writes) to flash`);\n this.progress_init(\"write_flash\",bytelen);\n await this.set_address(0x00000000);\n for( let i = 0; i < block_count; i++){\n let this_block = data.slice(i*block_size, (i+1)*block_size);\n if( this_block.length != block_size ){\n this_block = this.pad_bytes(this_block, block_size);\n }\n let adjusted_block_number = block_number + 2;\n if( block_number >= 256 && block_number < 2048-832 ){\n adjusted_block_number += 832;\n }\n //console.log(`writing num ${i}, adj ${adjusted_block_number}, size: ${block_size}`);\n await this.request_dnload(adjusted_block_number, this_block);\n await this.wait_until_state( State.dfuDNLOAD_IDLE );\n total_written += this_block.byteLength;\n this.progress_update(\"write_flash\",total_written);\n block_number += 1;\n }\n this.progress_finish(\"write_flash\",false,\"ok\");\n }\n async eraseFlashBlocks(addr, size){//this needs to be simplified into erase_sector\n const block_size = 64*1024;\n const block_count = Math.ceil(size/block_size);\n this.progress_init(\"erase_flash\",block_count);\n for( let i =0; i < block_count; i++){\n let adjusted_addr = addr;\n if( addr >= 0x40000 && addr <0x200000-0xd0000 ){\n adjusted_addr += 0xd0000;\n }\n await this.erase_sector(adjusted_addr);\n addr += block_size;\n this.progress_update(\"erase_flash\",i);\n }\n this.progress_finish(\"erase_flash\",false,\"ok\");\n }\n //async get_rdt_size(radioname){\n //const gen = await this.get_radio_gen(radioname);\n //const rdt_size = gen == 1 ? 262709 : 852533;\n //}\n async recv_codeplug(){\n const radioname = await this.get_radio_name();\n const gen = await this.get_radio_gen(radioname);\n const rdt_sizes = [262709, 262709, 852533];\n const rdt_size = rdt_sizes[gen];\n const expected_bytes = rdt_size - 549 - 16;\n await this.programming_mode();\n await this.md380_custom(0xa2, 0x02);\n await this.md380_custom(0xa2, 0x02);\n await this.md380_custom(0xa2, 0x03);\n await this.md380_custom(0xa2, 0x04);\n await this.md380_custom(0xa2, 0x07);\n await this.set_address(0x00000000);\n const a = await this.read_flash(0, expected_bytes);\n await this.enter_dfu_mode();\n console.log(\"dfu.js recv_codeplug: bin\",a);\n console.log(\"dfu.js recv_codeplug: recv_codeplug finished reading \", expected_bytes);\n return a;\n }\n async send_codeplug(data){ //must be a raw bin (use codeplugs.rdt2bin)\n //console.log(data);\n const radioname = await this.get_radio_name();\n const gen = await this.get_radio_gen(radioname);\n const rdt_sizes = [262709, 262709, 852533];\n const rdt_size = rdt_sizes[gen];\n const expected_bytes = rdt_size - 549 - 16;\n if( data.length != expected_bytes ){\n console.log(data);\n throw \"Codeplug to program is not expected size for headerless or RDT files: expected \" + expected_bytes + \" and got \" + data.length;\n }\n await this.programming_mode();\n await this.programming_mode();\n await this.md380_custom(0xa2, 0x02);\n await this.md380_custom(0xa2, 0x02);\n await this.md380_custom(0xa2, 0x03);\n await this.md380_custom(0xa2, 0x04);\n await this.md380_custom(0xa2, 0x07);\n\n await this.write_flash(0, data);\n\n await this.enter_dfu_mode();\n //console.log(\"Wrote codeplug!\");\n }\n async erase_sector(addr){\n const [a,b,c,d] = address_parts(addr);\n const x = await this.ctrl_transfer( 0x21, Request.DNLOAD, 0, 0, [0x41, a,b,c,d]);\n const y = await this.change_state_and_reenter_dfu(`erase_sector( addr=${_x(addr)} )`, State.dfuDNLOAD_IDLE);\n if( y ){ return x}\n else { \n //console.log(\"x\",x);\n //console.log(\"y\",y);\n throw new Error(\"erase_sector failed\");\n //return y;\n }\n }\n async parseHeader(header_bytes){\n xxd(Array.from(header_bytes));\n let header = {};\n let offset = 0;\n header.magic = header_bytes.subarray(offset,offset+16);\n offset += 16\n\n header.radio = header_bytes.subarray(offset,offset+16);\n offset += 16\n\n header.unk = header_bytes.subarray(offset,offset+92);\n offset += 92\n\n if( offset != 0x7C ){\n throw(\"offset != 0x7C as expected, offset = \" + offset );\n }\n header.sections = [];\n let num_sections = codeplugs.assemble_le(header_bytes.subarray(offset,offset+4));\n if( num_sections > 20 ){\n throw(new Error(\"Invalid header, probably. Too many sections (>20).\"));\n\n }\n console.log(num_sections);\n if( num_sections == (1<<32) - 1 || num_sections == -1 ){\n num_sections = 1;\n }\n header.num_sections = num_sections;\n offset += 4;\n //parse into uint32_t_LE\n for( let i = 0; i < num_sections; i++){\n const memloc = codeplugs.assemble_le(header_bytes.subarray(offset, offset+4))\n offset += 4;\n const size = codeplugs.assemble_le(header_bytes.subarray(offset, offset+4))\n offset += 4;\n header.sections.push( [memloc, size] );\n }\n //anything left between offset and 0x100 is don't care (or at\n //least, we've never seen anything beyond 0xff there and it makes\n //sense to have it there for multiple sections)\n console.log(header);\n return header;\n }\n get_sector_size(addr){\n if( addr < 0x8000000 ){\n return 0x10000;\n } else if ( addr >= 0x8000000 && addr < 0x8010000 ){\n return 0x04000;\n } else if ( addr == 0x8010000 ){\n return 0x10000;\n } else {\n return 0x20000;\n }\n }\n async write_sector(addr, secsize, data){\n const block_size = 1024;\n const block_total = data.length / 1024;\n console.log(`write_sector(addr=0x${addr.toString(16)}, secsize=0x${secsize.toString(16)}, len(data)=${data.length}, numblocks=${block_total}`);\n assert(secsize == this.get_sector_size(addr));\n //assert(data.length%1024 == 0);\n await this.set_address(addr);\n\n let written = 0;\n let block_num = 0;\n this.progress_init(\"flash_sector\", block_total);\n while( written < data.length ){\n if( block_num >= block_total ){\n console.log(\"way too many blocks ...\");\n }\n let block_data = data.subarray(written, written+block_size);\n //console.log(`request_dnload(blockid=${block_num+2}, block_data.length=${block_data.length})`);\n if( block_data.length != block_size ){\n block_data = this.pad_bytes(block_data, block_size);\n }\n if( this.mock === true ){\n await wait_for(10);\n } else {\n await this.request_dnload(block_num+2, block_data);\n await this.wait_until_state( State.dfuDNLOAD_IDLE );\n }\n written+= block_size;\n block_num++;\n this.progress_update(\"flash_sector\", block_num);\n }\n this.progress_finish(\"flash_sector\", false, \"ok\");\n return written; //TODO: this includes padding, which we may not want, depending!\n }\n async firmware_upload(data_bytes){\n console.log(\"firmware upload\");\n //TODO detect firmware upload mode\n await this.get_status()\n await this.md380_custom(0x91, 0x01);\n await this.md380_custom(0x91, 0x31);\n //0x100 at the start is the header\n //0x100 footer, too, but without interesting data\n const header = await this.parseHeader(data_bytes.subarray(0x0,0x100));\n console.log(header, data_bytes.length);\n const firmware = data_bytes.subarray(0x100);\n //need to check header radio magic, but skip that for now lol\n let offset = 0; //offset into firmware to read from\n this.progress_init(\"firmware_sections\", header.num_sections);\n let sections_done = 0;\n\n for( const [memloc,size] of header.sections){\n console.log(`Location: 0x${memloc.toString(16)} [${size.toString(16)}]`);\n //erase and then write each sector (as opposed to erasing all sectors and then writing all sectors...)\n //\n //per nizzo, this is non ideal - BUT, i have an overriding concern:\n //I don't actually know the memory layout like Tytera does!\n //or what memory will be used!\n //so I don't actually know which sectors will need to be\n //erased until I look at the firmware and try to write it\n //(unless i generate the addresses for the sectors ahead of time...?)\n\n // for each sequence for the location and size:\n let sz_remaining = size;\n let addr = memloc;\n this.progress_init(\"fw_section\", sz_remaining);\n while( sz_remaining > 0 ){\n //TODO: problem is that we blow right past sz_remaining ... \n const secsize = this.get_sector_size(addr);\n const datalength = Math.min(sz_remaining, secsize);\n const data_for_this_sector = firmware.subarray(offset,offset+datalength)\n //if( data_for_this_sector.length != secsize ){\n //console.log(\"data did not match sec size\",data_for_this_sector.length, secsize, addr, memloc, offset, sz_remaining);\n //}\n console.log(`offset=0x${offset.toString(16)}, Sector 0x${addr.toString(16)}, size=0x${secsize.toString(16)}, datalength=0x${data_for_this_sector.length.toString(16)}`);\n if( this.mock === true ){\n await wait_for(5);\n } else {\n await this.erase_sector(addr);\n }\n const written = await this.write_sector(addr, secsize, data_for_this_sector)\n addr += secsize; \n offset += written; \n sz_remaining -= written; \n console.log(\"remaining:\",sz_remaining);\n this.progress_update(\"fw_section\", size-sz_remaining);\n }\n console.log(\"done with \",memloc.toString(16));\n sections_done++;\n this.progress_finish(\"fw_section\", false, \"ok\");\n this.progress_update(\"firmware_sections\", sections_done);\n \n }\n console.log(\"done with firmware\");\n this.progress_finish(\"firmware_sections\", false, \"ok\");\n console.log(this.progress_get());\n console.log(this);\n }\n}\nclass VCZTYTDFU extends TYTDMRDFU {\n //port of md380_tool from KK4VCZ and friends\n //supposedly needs to read the manufacturer string to hook the added USB functions\n async peek(adr, size){\n await this.set_address(adr);\n const res = await this.request_upload( 1, size);\n return new Uint8Array(res.data.buffer);\n }\n async spiflashgetid(){\n const size=4;\n const cmd = 0x05;\n return await this.query([cmd], size);\n }\n async spiflashpeek( adr, size=1024){\n const cmd= 0x01;\n const cmdbytes = [cmd, ...codeplugs.dissemble_le(adr,4)];\n return await this.query(cmdbytes, size);\n }\n async query(cmdbyteslist, resultsize){\n //console.log(`query(cmdbyteslist=${cmdbyteslist}, resultsize=${resultsize})`);\n await this.request_dnload( 1, new Uint8Array(cmdbyteslist));\n await this.get_status();\n const status = await this.get_status();\n const res = await this.request_upload( 1, resultsize);\n return new Uint8Array(res.data.buffer);\n }\n async read_framebuf_line(y){\n //console.log(`read_framebuf_line(y=${y})`);\n const cmdbytes = [0x84, 0, y, 159, y];\n const size = 160*3+5;\n const res = await this.query(cmdbytes, size);\n if( res[4] == y ){ //0-4 are the cmdbytes echoed if all is well\n return res.slice(5); //so strip those and just return the BGR pixels, 8 bits each color\n } else {\n return null;\n }\n }\n async get_screen_bmp(){\n console.log(\"get_screen_bmp\");\n const size = 0xf036;\n this.progress_init(\"screenshot\", size);\n const bmp = new Uint8Array(size);\n const header = codeplugs.hex2bytes(\n \"424d\" + \"36f0\" + \"0000\" + \"00000000\"+\n \"36000000\"+ //54\n \"28000000\"+ //40 sizeof(bitmapinfoheader)\n \"a0000000\"+ //160 width pixels\n \"80000000\"+ //128 height pixels\n \"01001800\"+ //bitplanes (1) and bits per pixel (24 / 0x18)\n \"00000000\"+\n \"00A00000\"+ //sizeof(pixel data)\n \"00000000\"+ //x pixel per meter\n \"00000000\"+ //y pixel per meter\n \"00000000\"+ //no colour palette\n \"00000000\" //number of colours used: 0=all colors\n );\n bmp.set(header,0);\n let offset = header.length;\n for( let y = 127; y >=0; y--){ //bmp files begin with the bottom line\n let line = null;\n while( ! line ){ //may need a retry\n line = await this.read_framebuf_line(y);\n await wait_for(10);\n }\n bmp.set(line, offset);\n offset += line.length;\n this.progress_update(\"screenshot\",offset);\n await wait_for(1);\n }\n this.progress_finish(\"screenshot\", false, \"ok\");\n return bmp;\n }\n async getdmesg(){\n const res = await this.query( [0], 1024);\n const text = codeplugs.bytes2string(Array.from(res));\n //need to reorder the ring buffer\n console.log(text);\n return text;\n }\n}\nclass MockUSB {\n //console.log(`[DFU]: Entering DFU mode on usb device '${this.device.productName}'`);\n constructor(dev){\n this.manufacturerName =\"tarxvf\";\n this.productName= \"mockUSB\";\n this.opened= false;\n }\n async open(){\n //await this.device.open();\n this.opened = true;\n await wait_for(1);\n }\n async claimInterface(idx){\n //await this.device.claimInterface(0);\n await wait_for(1);\n }\n async selectConfiguration(idx){\n //await this.device.selectConfiguration(1);\n await wait_for(1);\n }\n async selectAlternateInterface(idx1,idx2){\n //await this.device.selectAlternateInterface(0,0);\n await wait_for(1);\n }\n\n async controlTransferOut(setup, d2sb){\n assert(this.opened);\n await wait_for(1);\n //console.log(\"controlTransferOut\", setup, d2sb);\n }\n async controlTransferIn(setup, length2read_or_data2send){\n assert(this.opened);\n await wait_for(1);\n //console.log(\"controlTransferIn\", setup, length2read_or_data2send);\n }\n}\nclass MockDFU extends DFU {\n //constructor(dev){\n //async init(){\n //async wait(){\n //async clear_status(){\n //async detach(){\n //async enter_dfu_mode(){\n //async ctrl_transfer( requestType, request, value, index, length2read_or_data2send ){\n //async get_state(){\n //async get_status(){\n //async abort(){\n //async change_state_and_reenter_dfu(name, expected_state, ...args){\n //async wait_until_state(desired_state){\n //async clear_status_until_state( desired_state){\n //async set_address(addr){\n //async read(blk_n, block_size){\n //async request_upload(block_num, length, idx=0){\n //async request_dnload(block_num, data, idx=0){\n}\nclass MockTYTDFU extends TYTDMRDFU {\n constructor(dev){\n super();\n this.device = dev;\n this.has_rebooted = false;\n }\n async wait(){\n await wait_for(1); //speed things up for testing\n }\n async enter_dfu_mode(){\n //console.log(\"enter_dfu_mode\");\n }\n async programming_mode(){\n //console.log(\"programming_mode\");\n }\n async reboot(){\n this.device = null;\n this.has_rebooted=true;\n }\n async identify_radio(){\n return [\"MD-UV390\",[[136000000,174000000]],\"10C\"];\n }\n async ping(){\n return ! this.has_rebooted && this.device;\n }\n async get_radio_name(){\n return \"MD-UV390\";\n }\n async raw_identify_radio(){\n return new Uint8Array([77,68,45,85,86,51,57,48,0,255,255,255,255,255,255,255,35,2,0,82,0,64,0,72,96,19,64,23,255,217,255,255]);\n }\n async get_radio_gen(){\n return 2;\n }\n async erase_sector(addr){\n await this.wait();\n }\n async read_flash(addr, bytelen){\n //read_flash is the only actual read operation, and we want to fake that nicely with data.\n //writing and erasing aren't mocked because we can just stub out the underlying operations and have the original implementations work\n const rdt = fetchblob( \"/data/codeplug1_tarxvf.rdt\");\n\n const block_size = 1024;\n let block_number = addr/block_size;\n const block_count = bytelen/block_size;\n this.progress_init(\"read_flash\",bytelen);\n let total_read = 0;\n for( let i = 0; i < block_count; i++){\n total_read += block_size;\n await this.wait();\n this.progress_update(\"read_flash\",total_read);\n block_number += 1;\n }\n this.progress_finish(\"read_flash\",false,\"ok\");\n const bin = codeplugs.rdt2bin(await rdt);\n return bin;\n }\n async md380_custom(a,b){\n console.log(\"md380_custom\");\n return;\n }\n async get_state(){\n console.log(\"get_state\");\n return;\n }\n async get_status(){\n console.log(\"get_status\");\n return;\n }\n async abort(){\n console.log(\"abort\");\n await this.wait();\n }\n async change_state_and_reenter_dfu(name, expected_state, ...args){\n console.log(\"change_state_and_reenter\");\n return;\n }\n async wait_until_state(desired_state){\n console.log(\"wait_until_state\");\n await this.wait();\n }\n async clear_status_until_state( desired_state){\n console.log(\"clear_status_until_state\");\n await this.wait();\n }\n async set_address(addr){\n console.log(\"set_address\");\n return;\n }\n async read(blk_n, block_size){\n console.log(\"read\");\n await this.wait();\n }\n async request_upload(block_num, length, idx=0){\n return;\n }\n async request_dnload(block_num, data, idx=0){\n return;\n }\n}\n\n//TODO: Firmware upload for gen1 and gen2 radios\n\nexport default {\n ACM,\n DFU,\n TYTDMRDFU,\n VCZTYTDFU,\n MockUSB,\n MockDFU,\n MockTYTDFU,\n radio_filters\n}\n","import { render } from \"./webdfuradio.vue?vue&type=template&id=09a23b54&scoped=true\"\nimport script from \"./webdfuradio.vue?vue&type=script&lang=js\"\nexport * from \"./webdfuradio.vue?vue&type=script&lang=js\"\n\nimport \"./webdfuradio.vue?vue&type=style&index=0&id=09a23b54&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-09a23b54\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./keyloader.vue?vue&type=template&id=549cb010&scoped=true\"\nimport script from \"./keyloader.vue?vue&type=script&lang=js\"\nexport * from \"./keyloader.vue?vue&type=script&lang=js\"\n\nimport \"./keyloader.vue?vue&type=style&index=0&id=549cb010&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-549cb010\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./dmrid.vue?vue&type=template&id=42170cde&scoped=true\"\nimport script from \"./dmrid.vue?vue&type=script&lang=js\"\nexport * from \"./dmrid.vue?vue&type=script&lang=js\"\n\nimport \"./dmrid.vue?vue&type=style&index=0&id=42170cde&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-42170cde\"]])\n\nexport default __exports__","\n\n\n","\n\n\n","\n\n\n","import { render } from \"./coveredcontrol.vue?vue&type=template&id=2989c4d2&scoped=true\"\nimport script from \"./coveredcontrol.vue?vue&type=script&lang=js\"\nexport * from \"./coveredcontrol.vue?vue&type=script&lang=js\"\n\nimport \"./coveredcontrol.vue?vue&type=style&index=0&id=2989c4d2&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2989c4d2\"]])\n\nexport default __exports__","import { render } from \"./codeplug.vue?vue&type=template&id=56ca0438&scoped=true\"\nimport script from \"./codeplug.vue?vue&type=script&lang=js\"\nexport * from \"./codeplug.vue?vue&type=script&lang=js\"\n\nimport \"./codeplug.vue?vue&type=style&index=0&id=56ca0438&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-56ca0438\"]])\n\nexport default __exports__","import { render } from \"./codeplugslist.vue?vue&type=template&id=4b261369&scoped=true\"\nimport script from \"./codeplugslist.vue?vue&type=script&lang=js\"\nexport * from \"./codeplugslist.vue?vue&type=script&lang=js\"\n\nimport \"./codeplugslist.vue?vue&type=style&index=0&id=4b261369&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4b261369\"]])\n\nexport default __exports__","\n\n\n","\n\n\n","\n\n\n\n","\n\n\n","import { render } from \"./contact.vue?vue&type=template&id=7693a4b1&scoped=true\"\nimport script from \"./contact.vue?vue&type=script&lang=js\"\nexport * from \"./contact.vue?vue&type=script&lang=js\"\n\nimport \"./contact.vue?vue&type=style&index=0&id=7693a4b1&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7693a4b1\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./rxgrouplist.vue?vue&type=template&id=664e3580&scoped=true\"\nimport script from \"./rxgrouplist.vue?vue&type=script&lang=js\"\nexport * from \"./rxgrouplist.vue?vue&type=script&lang=js\"\n\nimport \"./rxgrouplist.vue?vue&type=style&index=0&id=664e3580&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-664e3580\"]])\n\nexport default __exports__","import { render } from \"./microchannel.vue?vue&type=template&id=64ac0692&scoped=true\"\nimport script from \"./microchannel.vue?vue&type=script&lang=js\"\nexport * from \"./microchannel.vue?vue&type=script&lang=js\"\n\nimport \"./microchannel.vue?vue&type=style&index=0&id=64ac0692&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-64ac0692\"]])\n\nexport default __exports__","import { render } from \"./channel.vue?vue&type=template&id=358c3388&scoped=true\"\nimport script from \"./channel.vue?vue&type=script&lang=js\"\nexport * from \"./channel.vue?vue&type=script&lang=js\"\n\nimport \"./channel.vue?vue&type=style&index=0&id=358c3388&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-358c3388\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./zone.vue?vue&type=template&id=6a4eedc2&scoped=true\"\nimport script from \"./zone.vue?vue&type=script&lang=js\"\nexport * from \"./zone.vue?vue&type=script&lang=js\"\n\nimport \"./zone.vue?vue&type=style&index=0&id=6a4eedc2&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6a4eedc2\"]])\n\nexport default __exports__","import { render } from \"./manualcps.vue?vue&type=template&id=2829ab9a&scoped=true\"\nimport script from \"./manualcps.vue?vue&type=script&lang=js\"\nexport * from \"./manualcps.vue?vue&type=script&lang=js\"\n\nimport \"./manualcps.vue?vue&type=style&index=0&id=2829ab9a&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2829ab9a\"]])\n\nexport default __exports__","\n\n\n","\n\n\n","import { render } from \"./radiofeaturesmatrix.vue?vue&type=template&id=0718ad07&scoped=true\"\nimport script from \"./radiofeaturesmatrix.vue?vue&type=script&lang=js\"\nexport * from \"./radiofeaturesmatrix.vue?vue&type=script&lang=js\"\n\nimport \"./radiofeaturesmatrix.vue?vue&type=style&index=0&id=0718ad07&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0718ad07\"]])\n\nexport default __exports__","import { render } from \"./codeplug_settings.vue?vue&type=template&id=5925a358&scoped=true\"\nimport script from \"./codeplug_settings.vue?vue&type=script&lang=js\"\nexport * from \"./codeplug_settings.vue?vue&type=script&lang=js\"\n\nimport \"./codeplug_settings.vue?vue&type=style&index=0&id=5925a358&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5925a358\"]])\n\nexport default __exports__","\n\n\n","import { render } from \"./contacts.vue?vue&type=template&id=47e1c2e4&scoped=true\"\nimport script from \"./contacts.vue?vue&type=script&lang=js\"\nexport * from \"./contacts.vue?vue&type=script&lang=js\"\n\nimport \"./contacts.vue?vue&type=style&index=0&id=47e1c2e4&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-47e1c2e4\"]])\n\nexport default __exports__","\n\n\n\n","\n\n\n","import { render } from \"./markdown.vue?vue&type=template&id=6f62f8c9&scoped=true\"\nimport script from \"./markdown.vue?vue&type=script&lang=js\"\nexport * from \"./markdown.vue?vue&type=script&lang=js\"\n\nimport \"./markdown.vue?vue&type=style&index=0&id=6f62f8c9&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6f62f8c9\"]])\n\nexport default __exports__","import { render } from \"./changelog.vue?vue&type=template&id=19728a12&scoped=true\"\nimport script from \"./changelog.vue?vue&type=script&lang=js\"\nexport * from \"./changelog.vue?vue&type=script&lang=js\"\n\nimport \"./changelog.vue?vue&type=style&index=0&id=19728a12&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-19728a12\"]])\n\nexport default __exports__","\n\n\n","\n\n\n\n","import { render } from \"./notfound.vue?vue&type=template&id=2fdd6379&scoped=true\"\nimport script from \"./notfound.vue?vue&type=script&lang=js\"\nexport * from \"./notfound.vue?vue&type=script&lang=js\"\n\nimport \"./notfound.vue?vue&type=style&index=0&id=2fdd6379&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2fdd6379\"]])\n\nexport default __exports__","\n\n\n\n\n","\n\n\n","import { render } from \"./codeplugtabs.vue?vue&type=template&id=c23ca7fe&scoped=true\"\nimport script from \"./codeplugtabs.vue?vue&type=script&lang=js\"\nexport * from \"./codeplugtabs.vue?vue&type=script&lang=js\"\n\nimport \"./codeplugtabs.vue?vue&type=style&index=0&id=c23ca7fe&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-c23ca7fe\"]])\n\nexport default __exports__","import { render } from \"./Columns.vue?vue&type=template&id=133e4d93&scoped=true\"\nimport script from \"./Columns.vue?vue&type=script&lang=js\"\nexport * from \"./Columns.vue?vue&type=script&lang=js\"\n\nimport \"./Columns.vue?vue&type=style&index=0&id=133e4d93&scoped=true&lang=css\"\n\nimport exportComponent from \"../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-133e4d93\"]])\n\nexport default __exports__","import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'\nimport Home from '@/views/Home.vue'\nimport About from '@/views/About.vue'\nimport MainMenu from '@/views/Main.vue'\nimport WebDFURadio from '@/components/webdfuradio.vue'\nimport Keyloader from '@/components/keyloader.vue'\nimport DMRID from '@/components/dmrid.vue'\nimport CodeplugsList from '@/components/codeplugslist.vue'\nimport ManualCPS from '@/components/manualcps.vue'\nimport CodeplugSettings from '@/components/codeplug_settings.vue'\nimport Contacts from '@/components/contacts.vue'\nimport ChangeLog from '@/views/changelog.vue'\nimport SingleChannel from '@/components/singlechannel.vue'\nimport Dev from '@/components/currentdev.vue'\nimport NotFound from '@/views/notfound.vue'\nimport Columns from '@/views/Columns.vue'\n\nconst routes = [\n {\n path: '/',\n name: 'MainMenu',\n component: MainMenu\n },\n {\n path: '/changelog',\n name: 'ChangeLog',\n component: ChangeLog\n },\n {\n path: '/about',\n name: 'About',\n // route level code-splitting\n // this generates a separate chunk (about.[hash].js) for this route\n // which is lazy-loaded when the route is visited.\n //component: () => import([> webpackChunkName: \"about\" <] '../views/About.vue')\n component: About\n },\n //{\n //path: '/flash/',\n //name: 'Flash',\n //component: Columns\n //},\n {\n path: '/edit/cp/select/',\n name: 'SelectCodeplug',\n component: CodeplugsList,\n children: [\n //TODO Show help/instructions, and once _first_ codeplug is uploaded automatically select it\n ]\n },\n {\n path: '/edit/cp/:id/',\n name: 'Codeplug',\n component: Columns,\n children: [\n {\n path: '',\n name: 'Default',\n //path: ':id',\n component: ManualCPS\n //TODO: codeplug homepage\n \n },\n {\n path: 'manualcps',\n name: 'manualcps',\n //path: ':id',\n component: ManualCPS\n //use this for editing stuff from backend later?\n },\n {\n path: 'settings',\n name: 'settings',\n //path: ':id',\n component: CodeplugSettings\n //use this for editing stuff from backend later?\n },\n {\n path: 'contacts',\n name: 'contacts',\n //path: ':id',\n component: Contacts\n //use this for editing stuff from backend later?\n },\n {\n path: 'keyloader',\n name: 'keyloader',\n //path: ':id',\n component: Keyloader,\n //use this for editing stuff from backend later?\n },\n ],\n },\n {\n path: '/usb/',\n name: 'USB',\n component: Columns,\n children: [\n {\n path: '',\n name: 'USB',\n //path: ':id',\n component: WebDFURadio\n //use this for editing stuff from backend later?\n }\n ],\n },\n //{\n //path: '/componentdev',\n //name: 'Dev',\n //component: Dev\n //},\n //{\n //path: '/usb',\n //name: 'USB',\n //component: WebDFURadio,\n //},\n {\n path: '/flashfirmware',\n name: 'firmware',\n component: WebDFURadio,\n },\n //{\n //path: '/recoverradios',\n //name: 'recover',\n //component: WebDFURadio,\n //},\n //{\n //path: '/keyloader',\n //name: 'Keyloader',\n //component: Keyloader,\n //},\n //{\n //path: '/dmrid',\n //name: 'ID Manager',\n //component: DMRID\n //},\n //{\n //path: '/autocps',\n //name: 'Auto CPS',\n //component: Home\n //},\n {\n path: '/:pathMatch(.*)*',\n name: 'NotFound',\n component: NotFound,\n }\n]\n\nconst router = createRouter({\n history: createWebHashHistory(),\n routes\n})\n\nexport default router\n","import { createStore } from 'vuex'\nconst themes = {\n namespaced: true,\n state: () => ({\n themes: [\"light\",\"dark\",\"nerv\"],\n current_theme: undefined,\n }),\n mutations: {\n select_theme(state, themename){\n state.current_theme = themename;\n },\n },\n actions: {\n },\n getters: {\n }\n}\nconst radioiddotnet = {\n namespaced: true,\n state: () => ({\n }),\n mutations: {\n },\n actions: {\n },\n getters: {\n }\n}\nconst firmwares = {\n namespaced: true,\n state: () => ({\n loaded_firmwares: [],\n }),\n mutations: {\n add_firmwares(state, firmwares){\n console.log(`add_firmware()`);\n for( const fw of firmwares ){\n state.loaded_firmwares.push(fw);\n }\n },\n clear_firmwares(state, idx){\n console.log(`clear_firmwares()`);\n state.current_firmware = undefined;\n state.loaded_firmwares = [];\n }\n },\n actions: {\n },\n getters: {\n }\n}\nconst codeplugs = {\n namespaced: true,\n state: () => ({\n loaded_codeplugs: [],\n current_codeplug: undefined,\n definitions: {},\n current_definition: {},\n }),\n mutations: {\n set_definitions(state, defs){\n state.definitions = defs;\n },\n add_codeplug(state, codeplug){\n console.log(`add_codeplug()`);\n state.loaded_codeplugs.push(codeplug);\n },\n delete_codeplug(state, idx){\n console.log(`delete_codeplug(${idx})`);\n if( state.current_codeplug == state.loaded_codeplugs[idx] ){\n state.current_codeplug = undefined;\n }\n state.loaded_codeplugs.splice(idx,1);\n },\n select_codeplug(state, idx){\n console.log(`select_codeplug(${idx})`);\n state.current_codeplug = state.loaded_codeplugs[ idx ];\n },\n clear_codeplugs(state, idx){\n console.log(`clear_codeplugs()`);\n state.current_codeplug = undefined;\n state.loaded_codeplugs = [];\n }\n },\n actions: {\n },\n getters: {\n }\n}\nconst devtools = {\n namespaced: true,\n state: () => ({\n devmode: false,\n }),\n mutations: {\n toggledevmode(state){\n state.devmode = !state.devmode;\n console.log(\"devmode=\",state.devmode);\n },\n },\n actions: {\n },\n getters: {\n }\n}\nexport default createStore({\n modules: {\n themes: themes,\n devtools: devtools,\n codeplugs: codeplugs,\n radioiddotnet: radioiddotnet,\n firmwares: firmwares,\n }\n})\n","import cp from '@/libs/codeplug.js';\n//import misc from '@/libs/misc.js';\nfunction mkview(buffer,type,offset,count){\n let sz = 1; //bytes\n if( type == Uint16Array || type == Int16Array ){\n sz = 2;\n }\n if( type == Uint32Array || type == Int32Array ){\n sz = 4;\n }\n let toffset = offset/sz;\n\n return new type(buffer).subarray(toffset,toffset+count);\n}\nclass obcf {\n magic = \"RTXC\";\n magic_int = 0x43585452;\n version_s = \"v0.1.0\";\n version = {};\n constructor(){\n this.parse_own_version();\n this.storage = new Uint8Array(500);\n this.make_sane();\n this.check_sanity();\n this.raw.header.counts()[0] = 1;\n this.raw.header.counts()[1] = 1;\n this.nice();\n }\n parse_own_version(){\n this.version.major = this.version_s.split(\".\")[0].replace(\"v\",\"\");\n this.version.minor = this.version_s.split(\".\")[1];\n }\n recordsizes = {\n \"header\":88,\n \"contacts\": 32 + 1 + 6,\n \"channels\":3+4+4+2+32+32+ 8+ 5,//2, 4, or 5 for the channel info _t's\n }\n raw = {\n header: {\n magic: ()=>{\n console.log(this);\n return mkview(this.storage.buffer, Uint32Array, 0, 2);\n },\n version:()=>{\n return this.storage.subarray(8,8+2);\n },\n author:()=>{\n return this.storage.subarray(10,10+32);\n },\n description:()=>{\n return this.storage.subarray(42,42+32);\n },\n timestamp:()=>{\n return mkview(this.storage.buffer, Uint32Array, 74, 2);\n },\n counts:()=>{\n return mkview(this.storage.buffer, Uint16Array, 82, 3);\n }\n },\n contacts:{\n storage:()=>{\n let b = this.raw.contacts.bounds();\n return this.storage.subarray(b.offset,b.offset+b.size);\n },\n bounds:()=>{\n return {\n offset: this.recordsizes.header,\n size: this.raw.header.counts()[0] * this.recordsizes.contacts,\n }\n }\n },\n channels:{\n storage:()=>{\n let b = this.raw.channels.bounds();\n return this.storage.subarray(b.offset,b.offset+b.size);\n },\n bounds:()=>{\n let c = this.raw.contacts.bounds();\n return {\n offset: c.offset+c.size,\n size: this.raw.header.counts()[1] * this.recordsizes.channels,\n }\n }\n },\n };\n nice = ()=>{\n const proxy = (recordtype)=>{\n let offset = [\"contacts\",\"channels\"];\n return {\n set: (target, prop, value, receiver )=>{\n console.log(target,prop, value,receiver);\n if( prop == \"length\" ){\n return this.raw.header.counts()[ offset.indexOf(recordtype) ] = value;\n } \n },\n get: (target, prop, receiver )=>{\n console.log(target,prop);\n if( prop == \"length\" ){\n return this.raw.header.counts()[ offset.indexOf(recordtype) ];\n } \n const propnum = parseInt(prop);\n if (propnum >= 0 && propnum < target[recordtype].length ){\n let sz = this.recordsizes[recordtype];\n console.log(sz);\n return this.raw[recordtype].storage().subarray(propnum*sz,propnum*sz+sz);\n } \n },\n }\n };\n this.contacts = new Proxy(this, proxy(\"contacts\"));\n this.channels = new Proxy(this, proxy(\"channels\"));\n }\n\n //TODO: proxy for reading at a super-nice high level\n //based on raw proxy for reading bytes by name?\n make_sane(){\n let magic = this.raw.header.magic();\n magic[0] = this.magic_int;\n let v = this.raw.header.version();\n v[0] = this.version.major;\n v[1] = this.version.minor;\n }\n check_sanity(){\n let magic = cp.bytes2string(Array.from( cp.dissemble_le( this.raw.header.version()[0] ) ) );\n let v = this.raw.header.version();\n let r = [magic == this.magic, v[0] == this.version.major, v[1] == this.version.minor];\n return r.every((x)=>x);\n }\n}\nexport default {\n obcf: obcf\n}\n","import { createApp } from 'vue'\nimport App from './App.vue'\nimport router from './router'\nimport store from './store'\nimport obcf from './libs/rtxc.js';\nimport cp from './libs/codeplug.js';\n//import './unregisterServiceWorker'\n//\n\nwindow.obcf = obcf;\nwindow.x = new obcf.obcf();\nwindow.cp = cp;\nrouter.afterEach((to,from,failure)=>{\n console.log(to.fullPath);\n //sendToAnalytics(to.fullPath);\n})\n\nconst a = createApp(App);\na.use(store).use(router).mount('#app');\na.config.globalProperties.$filters = {\n json(v){\n return JSON.stringify(v, null, 2)\n }\n}\n\n//TODO explain advantage of storing codeplugs in cloud:\n// great for mobile editing and synchronization\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t143: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkDMR_Tools\"] = self[\"webpackChunkDMR_Tools\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(8204); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["class","hidden","currentview","to","toggledevmode","devmode","themes","themename","key","type","name","select","value","checked","current_theme","props","components","created","t","window","localStorage","getItem","undefined","this","computed","methods","console","log","sheet","document","createElement","rel","href","id","body","appendChild","setItem","select_theme","sheets","querySelectorAll","i","length","remove","data","__exports__","online","loggedin","offline_reason","remote_main_api_version","uri","version_regex","p","fetch","ok","statusText","r","blob","version","text","size","match","e","checkonline","checkloggedin","login","logout","ThemeSelect","Login","showdev","includes","location","hostname","$route","render","radios","list","m","getPlatform","platforms","values","platform","idx","features","feature","featureidx","platformidx","isChrome","navigator","userAgent","OS","split","s","isPlatform","target","SupportedFeaturesMatrix","src","usb","disabled","load_usb","usbdevices","d","deviceerrors","error","device","mode","reboot","get_codeplug","put_codeplug","firmware_selected","firmwares","fw","url","title","filename","selected_firmware_url","upload_firmware","firmwareready","firmware","recover","codeplugmode","hastools","screenshot","dmesg","statusmsg","radio_img","model","firmwaremode","bands","join","dmrid","progress","finished","current","max","screenshotbloburl","c","expected","msg","Error","invert","o","io","k","v","wait_for","ms","Promise","setTimeout","_x","a","toString","grouppairs","arr","Array","from","_","slice","save_data","da","Uint8Array","ba","Blob","saveAs","bytes2string","map","String","fromCharCode","xxd","lst","maxaddr","Math","floor","thisrow","padStart","j","async","fetchblob","ab","arrayBuffer","readFile","file","resolve","reject","reader","FileReader","onload","res","result","onerror","err","readAsArrayBuffer","standard_offset","freq_to_band","f","band","standard_offset_from_freq","emission_designator_to_protocol","emd","emd2p","proto","uint8s_to_int","lr","reverse","n","cstr2js","end_of_ascii_string","indexOf","js2cstr","sint","x","charCodeAt","push","test_js_2_4_cstr","utf16str2js","jsstr2utf16","flat","test_js_2_4_utf16str","assemble_le","bytes","byteLength","dissemble_le","somenum","sz","bs","acc","dissemble_le_sz","val","fromBCD","out","parseFloat","toBCD","nibbles","parseInt","splice","nibbles2","test_bcd","hex2bytes","bytes2hex","pairs","test_hex_2_4_bytes","bits_to_int","ft","bo","bitOffset","bitSize","mask","byteidx","Bo","b","subarray","bO","ret","set_bits_of_int","existing_value","newvalue","imask","shifted_newvalue","clean_existing","test_bits_to_int","y","z","tests","ident_codeplug_radio_rdt","intended_radio","radioname","make_editor","codeplug_format","getValueTypes","introLine","contactName","textMessage","ascii","biFrequency","frequency","frequencyOffset","callID","ctcssDcs","contactListIndex","memberListIndex","gpsListIndex","spanList","bandwidth","listIndex","hexadecimal32","hexadecimal4","indexedStrings","iStrings","strings","offOn","onOff","span","setValueTypes","scaled","round","make_field_array","rt","ridx","__v","__v_skip","__v_raw","__v_isReadonly","__v_isRef","handler","set","prop","receiver","propnum","typeName","fidx","field_data","cut_field","set_value","get_value","get","Symbol","iterator","prox","Proxy","writeBytes","dst","offset","findOffset","valueType","bits","_cp","offset2","old","newval","modified","record_offset","extIndex","extFidx","extOffset","extSize","extBitOffset","ceil","record_deletion_management","delDesc","deleted_indicator","deleted","delete","undelete","make_record","delfunctions","fields","fieldTypes","filter","make_record_array","handler1","predicate","filtered","proxy1","cp_def","codeplugs","models","recordTypes","records","codeplug_editor","codeplug","start","Date","editor","end","readFileBytes","bin2rdt","dfu","bin","radioidbytes","raw_identify_radio","get_radio_name","gen","get_radio_gen","rdt_sizes","rdt_size","gen1_size","binsizeoffset","rdt","gen12_split","gen1_bin","gen2_bin","rdt2bin","gen2_size","bin_size","ranges","range","edge","rf","cpj","rdt_w_metadata","cpm","readdate","tyt_get_dmrid","cp_filename","then","json","def","overall","cp","ts","getFullYear","getMonth","getDate","getHours","getMinutes","make_codeplug_proxy","load_firmwares","req","catch","mounted","pingtimer","setInterval","ping","$nextTick","beforeUnmount","clearInterval","getdmesg","Object","contents","distribution","bmp","get_screen_bmp","URL","createObjectURL","$parent","current_codeplug","debug","alive","fw_bytes","localfirmware","firmware_upload","files","event","endsWith","recoverymode","devstatus","statusString","stateString","progress_get","basename","toLowerCase","tytera_380_series","vendorId","productId","openrtx_serial","tytera_md430","gd77","anytone","radio_filters","filters","address_parts","addr","Request","State","iState","Status","iStatus","USB","constructor","dev","mock","bmRequestTypeInt2obj","in_or_out","in_or_out_a","type_a","typestr","recipient","recipient_a","recipientstr","requestType","ctrl_transfer","request","index","length2read_or_data2send","setup","controlTransferIn","d2sb","controlTransferOut","ACM","init","open","DFU","state","status","claimInterface","selectConfiguration","selectAlternateInterface","wait","clear_status","CLRSTATUS","detach","DETACH","enter_dfu_mode","action_map","get_state","dfuIDLE","GETSTATE","getUint8","get_status","GETSTATUS","abort","ABORT","change_state_and_reenter_dfu","expected_state","args","wait_until_state","desired_state","timeout","discarded","clear_status_until_state","set_address","DNLOAD","dfuDNLOAD_IDLE","read","blk_n","block_size","tres","request_upload","buf","OK","buf_to_bytes","bytes_to_list","bytes_concat","expected_bytes","bufs","block_num","UPLOAD","request_dnload","TYTDMRDFU","md380_custom","programming_mode","identify_radio","freq_ranges","parse_radio_freqs","parse_radio_name","first_range","second_range","bytes2nibbles","n1","n2","bcdFreqRange2IntFreqRange","raw_freq_range","int_ranges","pad_bytes","fill","progress_clean","now","oldprogress","diff","lastupdated","progress_init","errored","started","elapsed","progress_update","progress_finish","has_error","read_flash","bytelen","block_number","block_count","bytebufs","total_read","adjusted_block_number","write_flash","blockedSize","total_written","eraseFlashBlocks","this_block","adjusted_addr","erase_sector","recv_codeplug","send_codeplug","parseHeader","header_bytes","header","magic","radio","unk","sections","num_sections","memloc","get_sector_size","write_sector","secsize","block_total","written","block_data","data_bytes","sections_done","sz_remaining","datalength","min","data_for_this_sector","VCZTYTDFU","peek","adr","buffer","spiflashgetid","cmd","query","spiflashpeek","cmdbytes","cmdbyteslist","resultsize","read_framebuf_line","line","MockUSB","manufacturerName","productName","opened","idx1","idx2","MockDFU","MockTYTDFU","super","has_rebooted","addEventListener","ConnectedRadio","USBHelp","USBDebugging","usbconnected","readall","writeall","devkey","add_codeplug","sortusb","sort","new_device","add_usb","devs","getDevices","requestDevice","appCodeName","oscpu","errors","encryption_keys","startsWith","hashinput","style","hash","has_codeplug","beforeMount","beforeUpdate","crypto","subtle","digest","hashbytes","$forceUpdate","keys","EK","types","settings","placeholder","search","ID_search","useself","callsign","idmap","callsignmap","findID","name_or_call","callids","idlist","callsignlist","newcall","newid","for","select_usb","upload_codeplug","multiple","clear_errors","loaded_codeplugs","covertype","label","clear_codeplugs","select_edit","cpidx","select_codeplug","download_codeplug","delete_codeplug","coverstate","movecover","selected","safeForOEM","wasthis","$store","commit","$router","edit_codeplug","CodeplugCom","coveredcontrol","loadDataFiles","codeplug_definitions","set_definitions","show_error","action","errorarg","caller","download_all","zippy","generateAsync","channels","channel_filter_value","addallchanstozone","delallchans","filtered_channels","chan","cidx","hover_chan","edit_zone","chanidx","highlightchans","chanundel","chandel","chanedit","addchantozone","rw","zone_filter_value","filtered_zones","zidx","draggable","dodragstart","$event","dragend","dragenter","dragleave","dragdrop","hover_zone","highlightzones","zoneidx","zoneedit","ref","setselectedchannel","thischan","thisdef","entry","string","select_contact","select_rxgrouplist","advancedfields","fieldname","editable","check_details","set_details","freqtails_str","toggle_editable","singlelinechannel","contacts","Contacts","Channels","$emit","rxgrouplists","rxg","rxgidx","name_str","frequency_str","rx","tx","offsetstr","combined","details_str","bw","bws","tgidx","modedetails","modes","contact","tgname","tg","freq","details","singleline","recordname","regularfields","listfields","rev_offsetstr","sign","Number","stdoffset","toFixed","is_standard","abs","el","sanify","typename","oldval","defval","defaultValue","evt","toUpperCase","parts","replace","Contact","RXGroupList","MicroChannel","thiszone","updateParent","clear_zone","zonechanidx","zonermchan","onlyname","ABChannels","zones","Zones","zc","consolidate","zchanidx","dataTransfer","dropEffect","effectAllowed","setData","opacity","newpos","oldpos","getData","Channel","Zone","fs","filter_test","zone","flow","test","channel","cc","en","de","chans","forceupdate","newchanidx","$refs","editor_open","contact_filter_value","addallcontactstorxgroup","delallcontacts","filtered_contacts","hover_contact","contactidx","highlightcontacts","contactundel","contactdel","contactedit","addcontacttorxgroup","renderedmarkdown","md","html","xhtmlOut","breaks","linkify","txt","markdown","CodeplugsList","CodeplugTabs","showtabs","routes","path","component","Main","About","children","Columns","router","history","namespaced","mutations","actions","getters","radioiddotnet","loaded_firmwares","add_firmwares","clear_firmwares","current_firmware","definitions","current_definition","defs","devtools","modules","mkview","count","Uint16Array","Int16Array","Uint32Array","Int32Array","toffset","obcf","magic_int","version_s","parse_own_version","storage","make_sane","check_sanity","raw","counts","nice","major","minor","recordsizes","author","description","timestamp","bounds","proxy","recordtype","every","afterEach","failure","fullPath","App","use","store","mount","config","globalProperties","$filters","JSON","stringify","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","call","deferred","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","getter","__esModule","definition","defineProperty","enumerable","g","globalThis","Function","obj","prototype","hasOwnProperty","toStringTag","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","forEach","bind","__webpack_exports__"],"sourceRoot":""}