diff --git a/README.md b/README.md
index a1f5c09..d595b51 100644
--- a/README.md
+++ b/README.md
@@ -7,6 +7,12 @@
K5Web 用于对兼容业余无线电台 UV-K5 写频、更新固件、写入星历等。
+## 讨论
+- QQ 群:957225277 (K5Web相关)
+- QQ 群:201308015 (固件相关)
+- Telegram Group: https://t.me/losehu
+- Matrix Group: https://matrix.to/#/#losehu:mozilla.org
+
## 功能列表
- 固件版本检测
@@ -19,6 +25,9 @@ K5Web 用于对兼容业余无线电台 UV-K5 写频、更新固件、写入星
- 开机图片(LOSEHU 固件)
- 字库写入(LOSEHU 固件)
- 星历写入(LOSEHU 固件)
+- DTMF ID 设置
+- 收音机频道管理
+- MDC 联系人管理(LOSEHU 固件)
## 开发
### 安装依赖
diff --git a/index.html b/index.html
index 7a26f6c..2f51b65 100644
--- a/index.html
+++ b/index.html
@@ -2,7 +2,6 @@
-
K5Web
diff --git a/src/views/idea/channel/index.vue b/src/views/idea/channel/index.vue
new file mode 100644
index 0000000..39abcc7
--- /dev/null
+++ b/src/views/idea/channel/index.vue
@@ -0,0 +1,263 @@
+
+
+
+
+
+
+
+
+
+ {{ userStore.name }}
+ {{ $t('global.logout') }}
+
+
+ {{ $t('global.login') }}
+ {{ $t('global.register') }}
+
+
+
+
+
+
+
+ {{ item.upload }} {{ item.title }}
+
+
+
+ 👍
+ {{$t('global.use')}}
+
+
+
+
+
+
+
+
+
+ 上传新分享
+
+
+
+
+
+
+
+
+ {{ item.audit ? '已审核' : '审核中' }}
+ {{ item.title }}
+
+ {{ item.desc }}
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 提交审核
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/idea/firmware/index.vue b/src/views/idea/firmware/index.vue
index 4470fcc..db6e9f5 100644
--- a/src/views/idea/firmware/index.vue
+++ b/src/views/idea/firmware/index.vue
@@ -19,9 +19,11 @@
+
+ {{ item.upload }} {{ item.title }}
+
👍
@@ -67,7 +69,7 @@
-
+
-
+
@@ -77,7 +77,7 @@
-
+
+
+
+
+
+
+
+ 操作说明:https://github.com/losehu/uv-k5-firmware-custom
+
+ {{ state.disName[item].get(subItem[0]) }}
+
+ {{ $t('diy.generate') }}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/list/card/index.vue b/src/views/list/card/index.vue
index a9ce0e4..bbd295d 100644
--- a/src/views/list/card/index.vue
+++ b/src/views/list/card/index.vue
@@ -105,7 +105,7 @@ const checkEeprom = async () => {
const clearEEPROM = async () => {
if(appStore.connectState != true){alert(sessionStorage.getItem('noticeConnectK5')); return;};
const eepromSize = await check_eeprom(appStore.connectPort, appStore.configuration?.uart);
- let rawEEPROM = new Uint8Array(0x80);
+ let rawEEPROM = new Uint8Array(0x80).fill(0xff);
for (let i = 0; i < eepromSize; i += 0x80) {
await eeprom_write(appStore.connectPort, i, rawEEPROM, 0x80, appStore.configuration?.uart);
state.status = state.status + "清空进度:" + (((i - 0) / eepromSize) * 100).toFixed(1) + "%
";
diff --git a/src/views/list/chi/index.vue b/src/views/list/chi/index.vue
index 907c580..4841ef8 100644
--- a/src/views/list/chi/index.vue
+++ b/src/views/list/chi/index.vue
@@ -8,11 +8,20 @@
{state.showHide += 1}">{{ $t('menu.font') + $t('global.onStart') }}
-
+
{{ $t('tool.fontwrite') }}
+
+
+ {{$t('tool.Simplified_Chinese')}}
+ {{$t('tool.Traditional_Chinese')}}
+
+
- {{ $t('tool.writefontwrite') }}
+
+
{{ $t('tool.writefontwrite') }}
+
{{ $t('tool.writefontwrite') }}
+
@@ -49,7 +58,8 @@ const appStore = useAppStore();
const state = reactive({
status: "点击写入按钮写入字库到设备
",
eepromType: "",
- showHide: 0
+ showHide: 0,
+ lang: 'Simplified_Chinese'
})
const restoreRange = async (start: any = 0, uint8Array: any) => {
@@ -145,6 +155,25 @@ const restore = async(type: any = 1) => {
return;
}
}
+ if(type == 6){
+ if(appStore.configuration?.charset == "gb2312"){
+ fontPacket = await fetch('/new_font_k_f.bin')
+ const reader = fontPacket.body.getReader();
+ const chunks = [];
+ while(true) {
+ const {done, value} = await reader.read();
+ if (done) {
+ break;
+ }
+ chunks.push(...value)
+ }
+ const binary = new Uint8Array(chunks)
+ await restoreRange(0x02480, binary)
+ return;
+ }else{
+ alert('不支持的版本')
+ }
+ }
}
diff --git a/src/views/list/flash/index.vue b/src/views/list/flash/index.vue
index 888c9bd..3e8a43c 100644
--- a/src/views/list/flash/index.vue
+++ b/src/views/list/flash/index.vue
@@ -52,7 +52,7 @@ onMounted(async ()=>{
}
const binary = new Uint8Array(chunks)
state.binaryFile = binary
- state.binaryName = route.query.url.substring(route.query.url.lastIndexOf('/') + 1)
+ state.binaryName = route.query.url.substring(route.query.url.lastIndexOf('/') + 1).split('?')[0] + ' '
}
}
})
diff --git a/src/views/list/mdc/index.vue b/src/views/list/mdc/index.vue
new file mode 100644
index 0000000..566f5ca
--- /dev/null
+++ b/src/views/list/mdc/index.vue
@@ -0,0 +1,272 @@
+
+
+
+
+
+ {istate.showHide += 1}">{{ $t('menu.cps.mdc') + $t('global.onStart') }}
+
+
+
+
+
+
+
+
+ {{ $t('cps.onDeviceRead') }}
+
+
+
+
+
+ {{ $t('cps.onDeviceWrite') }}
+
+
+
+
+ {cstate.pageSize = e.pagination.pageSize, cstate.nowPage = e.pagination.current}"
+ bordered
+ lazy-load
+ :headerAffixedTop="{ offsetTop: 60 }"
+ :hover="true"
+ drag-sort="row-handler"
+ @drag-sort="onDragSort"
+ >
+
+
+
+
+
+
+ {{ (cstate.nowPage - 1) * cstate.pageSize + rowIndex + 1 }}
+
+
+ {{ $t('cps.clear') }}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/list/radio/index.vue b/src/views/list/radio/index.vue
new file mode 100644
index 0000000..9932893
--- /dev/null
+++ b/src/views/list/radio/index.vue
@@ -0,0 +1,272 @@
+
+
+
+
+
+ {istate.showHide += 1}">{{ $t('menu.cps.radio') + $t('global.onStart') }}
+
+
+
+
+
+
+
+
+ {{ $t('cps.onDeviceRead') }}
+
+
+
+
+
+ {{ $t('cps.onDeviceWrite') }}
+
+
+
+
+
+ {cstate.pageSize = e.pagination.pageSize, cstate.nowPage = e.pagination.current}"
+ bordered
+ lazy-load
+ :headerAffixedTop="{ offsetTop: 60 }"
+ :hover="true"
+ drag-sort="row-handler"
+ @drag-sort="onDragSort"
+ >
+
+
+
+
+
+
+ {{ (cstate.nowPage - 1) * cstate.pageSize + rowIndex + 1 }}
+
+
+ {{ $t('cps.clear') }}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/list/sat/index.vue b/src/views/list/sat/index.vue
index 4688cd2..0fa1885 100644
--- a/src/views/list/sat/index.vue
+++ b/src/views/list/sat/index.vue
@@ -1,6 +1,6 @@
-
+
{{ $t('tool.scanqr') }}
@@ -47,7 +47,7 @@
{{ $t('tool.brlonlat') }}
{{ $t('tool.phonelonlat') }}
- {{ $t('tool.satpasstime') }}
+ {{ $t('tool.satpasstime') }}
@@ -84,7 +84,7 @@
- {{ $t('tool.writeData') }}
+ {{ $t('tool.writeData') }}