Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
J
jensen
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Skye Yu
jensen
Commits
7317ba8f
Commit
7317ba8f
authored
Feb 03, 2026
by
martin hou
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: 任务模式适配调整
parent
6117ac6a
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
84 additions
and
40 deletions
+84
-40
index.tsx
src/index.tsx
+82
-40
task-impl.ts
src/utils/task-impl.ts
+2
-0
No files found.
src/index.tsx
View file @
7317ba8f
...
...
@@ -46,9 +46,17 @@ export function Home() {
// alert(JSON.stringify(dinfo));
});
const
getJensen
=
()
=>
{
const
getJensen
=
async
()
=>
{
if
(
sn
==
null
)
return
alert
(
'Please connect to a device first'
),
null
;
return
mgr
.
getInstance
(
sn
);
const
tid
=
'jensen-task'
;
const
success
=
await
mgr
.
registerTask
(
sn
,
tid
);
if
(
!
success
)
return
alert
(
'Failed to register task'
),
null
;
return
mgr
.
getInstance
(
sn
,
tid
);
}
const
releaseJensen
=
async
()
=>
{
const
tid
=
'jensen-task'
;
if
(
sn
)
mgr
.
unregisterTask
(
sn
,
tid
);
}
useEffect
(()
=>
{
...
...
@@ -102,17 +110,18 @@ export function Home() {
const
info
=
async
()
=>
{
// alert(sn);
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
// console.log('jensen -> ', jensen);
let
info
=
await
jensen
?.
getDeviceInfo
();
// alert(JSON.stringify(info));
Logger
.
info
(
'jensen'
,
'info'
,
'Device Info: '
+
JSON
.
stringify
(
info
));
await
releaseJensen
();
}
let
bluetoothDevices
:
BluetoothDevice
[]
=
[];
const
bluetoothScan
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
setDevices
([]);
setGreeting
(
'scan started at: '
+
new
Date
().
toLocaleString
());
...
...
@@ -125,10 +134,11 @@ export function Home() {
// console.log(devices);
// setDevices(devices);
setGreeting
(
'scanning...'
);
await
releaseJensen
();
}
const
scanBluetooth
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
const
scan
=
async
()
=>
{
await
jensen
.
startBluetoothScan
(
10
,
5
);
...
...
@@ -145,23 +155,26 @@ export function Home() {
setTimeout
(
scan
,
5000
);
};
scan
();
await
releaseJensen
();
}
const
stopBluetoothScan
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
rst
=
await
jensen
.
stopBluetoothScan
(
5
);
if
(
rst
==
null
||
rst
.
result
!=
'success'
)
return
alert
(
'stop bluetooth scan failed.'
);
setGreeting
(
'scan stopped'
);
await
releaseJensen
();
}
const
getScanResults
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
devices
=
await
jensen
.
getScanResults
(
5
);
console
.
log
(
devices
);
if
(
devices
==
null
)
return
alert
(
'get scan results failed.'
);
setDevices
(
devices
);
await
releaseJensen
();
}
const
connect
=
async
()
=>
{
...
...
@@ -180,10 +193,11 @@ export function Home() {
}
const
disconnectBTDevice
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
r
=
await
jensen
.
disconnectBTDevice
();
console
.
log
(
r
);
await
releaseJensen
();
}
const
clsBtnConnect
:
React
.
CSSProperties
=
{
...
...
@@ -209,36 +223,40 @@ export function Home() {
}
const
doConnectBluetooth
=
async
(
mac
:
string
)
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
rst
=
await
jensen
.
connectBTDevice
(
mac
,
10
);
alert
(
'connect: '
+
rst
.
result
);
await
releaseJensen
();
}
const
getTime
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
time
=
await
jensen
.
getTime
();
// alert(JSON.stringify(time));
Logger
.
info
(
'jensen'
,
'getTime'
,
'Time: '
+
JSON
.
stringify
(
time
));
await
releaseJensen
();
}
const
listFiles
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
fc
=
await
jensen
.
getFileCount
();
// alert(fc?.count);
let
files
=
await
jensen
.
listFiles
();
console
.
log
(
files
);
setFiles
(
files
)
await
releaseJensen
();
}
const
getBluetoothStatus
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
info
=
await
jensen
.
getBluetoothStatus
();
// alert(JSON.stringify(info));
Logger
.
info
(
'jensen'
,
'getBluetoothStatus'
,
'Bluetooth: '
+
JSON
.
stringify
(
info
));
await
releaseJensen
();
}
/*
...
...
@@ -263,7 +281,7 @@ export function Home() {
*/
const
updateDeviceTone
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
resp
=
await
jensen
.
requestToneUpdate
(
'826d9bac0b535e7babe02b389327a9f2'
,
1050688
);
if
(
resp
.
code
!=
0x00
)
return
alert
(
resp
.
result
);
...
...
@@ -278,13 +296,14 @@ export function Home() {
if
(
this
.
status
!=
200
)
return
alert
(
'Http Error: '
+
this
.
status
);
jensen
.
updateTone
(
new
Uint8Array
(
this
.
response
),
30
).
then
((
info
)
=>
{
alert
(
JSON
.
stringify
(
info
));
releaseJensen
();
});
}
xhr
.
send
();
}
const
updateUAC
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
const
uac_firmwares
=
{
...
...
@@ -306,17 +325,19 @@ export function Home() {
if
(
this
.
status
!=
200
)
return
alert
(
'Http Error: '
+
this
.
status
);
jensen
.
updateUAC
(
new
Uint8Array
(
this
.
response
),
30
).
then
((
info
)
=>
{
alert
(
JSON
.
stringify
(
info
));
releaseJensen
();
});
}
xhr
.
send
();
}
const
batteryStatus
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
status
=
await
jensen
.
getBatteryStatus
(
5
);
// alert(JSON.stringify(status));
Logger
.
info
(
'jensen'
,
'batteryStatus'
,
'Battery: '
+
JSON
.
stringify
(
status
));
await
releaseJensen
();
}
let
filename
=
''
;
...
...
@@ -331,12 +352,10 @@ export function Home() {
// 2025Jun24-165914-Wip00.hda, 232704 @ 19392
filename
=
file
.
name
;
filelength
=
file
.
length
;
get_file
();
}
const
get_file
=
()
=>
{
let
jensen
=
getJensen
();
const
get_file
=
async
()
=>
{
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
recvBytes
=
0
;
let
stime
=
new
Date
().
getTime
();
...
...
@@ -346,6 +365,7 @@ export function Home() {
if
(
recvBytes
>=
filelength
)
{
let
cost
=
new
Date
().
getTime
()
-
stime
;
alert
(
'File Transfer Complete, Cost: '
+
cost
+
' ms'
);
releaseJensen
();
}
},
function
(
recvBytes
)
{
let
percent
=
Math
.
floor
(
recvBytes
/
filelength
*
100
);
...
...
@@ -363,7 +383,7 @@ export function Home() {
*/
const
setWebUSBTimeout
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
ts
=
prompt
(
'Please Input the Timeout (ms):'
,
'10000'
);
if
(
ts
===
undefined
||
ts
===
null
)
return
;
...
...
@@ -371,26 +391,29 @@ export function Home() {
if
(
isNaN
(
timeout
)
||
timeout
<=
0
)
return
alert
(
'Please Input the Correct Timeout'
);
await
jensen
.
setWebUSBTimeout
(
timeout
,
30
);
Logger
.
info
(
'jensen'
,
'setWebUSBTimeout'
,
'Set Timeout Success'
);
await
releaseJensen
();
}
const
getWebUSBTimeout
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
rst
=
await
jensen
.
getWebUSBTimeout
(
5
);
// alert(JSON.stringify(rst));
Logger
.
info
(
'jensen'
,
'getWebUSBTimeout'
,
'WebUSB Timeout: '
+
JSON
.
stringify
(
rst
));
await
releaseJensen
();
}
const
listFirmwares
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
model
=
jensen
.
getModel
();
let
versions
=
firmwareVersions
.
filter
((
item
)
=>
item
.
model
==
model
);
setFirmwares
(
versions
);
await
releaseJensen
();
}
const
updateFirmware
=
async
(
version
:
string
,
url
:
string
)
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
// let rst = await jensen.requestFirmwareUpgrade(version, url);
// alert(JSON.stringify(rst));
...
...
@@ -404,10 +427,12 @@ export function Home() {
versionNumber
=
(
parseInt
(
parts
[
0
])
<<
16
)
|
(
parseInt
(
parts
[
1
])
<<
8
)
|
(
parseInt
(
parts
[
2
]));
}
else
{
alert
(
'invalid version number'
);
await
releaseJensen
();
return
;
}
}
else
{
alert
(
'invalid version number'
);
await
releaseJensen
();
return
;
}
...
...
@@ -425,6 +450,7 @@ export function Home() {
// alert('firmware upgrade accepted');
Logger
.
info
(
'jensen'
,
'ota'
,
'firmware transfer start'
);
jensen
.
uploadFirmware
(
Array
.
from
(
new
Uint8Array
(
this
.
response
)),
30
).
then
((
info
)
=>
{
releaseJensen
();
if
(
info
==
null
)
{
Logger
.
info
(
'jensen'
,
'ota'
,
'firmware transfer timedout'
);
...
...
@@ -439,6 +465,7 @@ export function Home() {
else
{
alert
(
'cannot upgrade firmware: '
+
info
.
result
);
releaseJensen
();
}
});
}
...
...
@@ -446,41 +473,46 @@ export function Home() {
}
const
turnPopupOn
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
// await jensen.();
let
rst
=
await
jensen
.
setNotification
(
true
,
5
);
Logger
.
info
(
'jensen'
,
'popup'
,
'Turn Popup On: '
+
JSON
.
stringify
(
rst
));
await
releaseJensen
();
}
const
turnPopupOff
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
// await jensen.turnPopupOff();
let
rst
=
await
jensen
.
setNotification
(
false
,
5
);
Logger
.
info
(
'jensen'
,
'popup'
,
'Turn Popup On: '
+
JSON
.
stringify
(
rst
));
await
releaseJensen
();
}
const
getSettings
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
rst
=
await
jensen
.
getSettings
(
5
);
Logger
.
info
(
'jensen'
,
'settings'
,
'Get Settings: '
+
JSON
.
stringify
(
rst
));
await
releaseJensen
();
}
const
getPairedDevices
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
devices
=
await
jensen
.
getPairedDevices
(
5
);
// alert(JSON.stringify(devices));
Logger
.
info
(
'jensen'
,
'bluetooth'
,
'Paired Devices: '
+
JSON
.
stringify
(
devices
));
await
releaseJensen
();
}
const
clearPairedDevices
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
rst
=
await
jensen
.
clearPairedDevices
(
5
);
Logger
.
info
(
'jensen'
,
'bluetooth'
,
'Clear Paired Devices: '
+
JSON
.
stringify
(
rst
));
await
releaseJensen
();
}
/**
...
...
@@ -536,7 +568,7 @@ export function Home() {
const
blocksRef
=
useRef
<
Uint8Array
[]
>
([]);
const
scheduleLiveTick
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
live
=
await
jensen
.
getRealtime
(
1
);
// 若无数据直接调度下一次
...
...
@@ -556,15 +588,16 @@ export function Home() {
// 根据live.rest的值决定timeout的间隔时长,如果>1则为50,否则为100
let
timeout
=
live
.
rest
>
1
?
50
:
100
;
liveTimeoutRef
.
current
=
window
.
setTimeout
(
scheduleLiveTick
,
Math
.
max
(
0
,
timeout
|
0
));
await
releaseJensen
();
}
const
startSession
=
async
()
=>
{
const
jensen
=
getJensen
();
const
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
rst
=
await
jensen
.
startRealtime
(
2
,
1
);
Logger
.
info
(
'jensen'
,
'live'
,
'Start Live: '
+
JSON
.
stringify
(
rst
));
await
releaseJensen
();
if
(
liveTimeoutRef
.
current
!==
null
)
{
window
.
clearTimeout
(
liveTimeoutRef
.
current
);
}
...
...
@@ -677,14 +710,15 @@ export function Home() {
}
const
startLive
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
startLiveSession
();
await
releaseJensen
();
}
const
stopLive
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
rst
=
await
jensen
.
stopRealtime
(
1
);
Logger
.
info
(
'jensen'
,
'live'
,
'Stop Live: '
+
JSON
.
stringify
(
rst
));
...
...
@@ -707,6 +741,7 @@ export function Home() {
a
.
download
=
'live.pcm'
;
a
.
click
();
URL
.
revokeObjectURL
(
url
);
await
releaseJensen
();
}
const
muteControl
=
async
()
=>
{
...
...
@@ -718,56 +753,63 @@ export function Home() {
}
const
sendKey
=
async
(
mode
:
number
,
keyCode
:
number
)
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
rst
=
await
jensen
.
sendKeyCode
(
mode
,
keyCode
,
5
);
Logger
.
info
(
'jensen'
,
'live'
,
'Send Key: '
+
JSON
.
stringify
(
rst
));
await
releaseJensen
();
}
const
enterMassStorageMode
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
rst
=
await
jensen
.
enterMassStorageMode
(
5
);
Logger
.
info
(
'jensen'
,
'live'
,
'Enter MassStorage Mode: '
+
JSON
.
stringify
(
rst
));
await
releaseJensen
();
}
const
getRecordingStatus
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
rst
=
await
jensen
.
getRecordingStatus
(
5
);
Logger
.
info
(
'jensen'
,
'recording'
,
'Get Recording Status: '
+
JSON
.
stringify
(
rst
));
await
releaseJensen
();
}
const
switchRecordingQuality
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
current
=
await
jensen
.
getRecordingQuality
(
5
);
let
next
=
current
.
quality
==
'normal'
?
'high'
:
'normal'
;
let
rst
=
await
jensen
.
setRecordingQuality
(
next
as
'normal'
|
'high'
,
5
);
Logger
.
info
(
'jensen'
,
'quality'
,
'Set Recording Quality: '
+
JSON
.
stringify
(
rst
));
await
releaseJensen
();
}
const
getRecordingQuality
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
rst
=
await
jensen
.
getRecordingQuality
(
5
);
Logger
.
info
(
'jensen'
,
'quality'
,
'Get Recording Quality: '
+
JSON
.
stringify
(
rst
));
await
releaseJensen
();
}
const
switchAudioInputDevice
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
current
=
await
jensen
.
getAudioInputDevice
(
5
);
let
next
=
current
.
device
==
'bt-mic'
?
'mic'
:
'bt-mic'
;
let
rst
=
await
jensen
.
setAudioInputDevice
(
next
as
'bt-mic'
|
'mic'
,
5
);
Logger
.
info
(
'jensen'
,
'audio-input'
,
'Set Audio Input Device: '
+
JSON
.
stringify
(
rst
));
await
releaseJensen
();
}
const
getAudioInputDevice
=
async
()
=>
{
let
jensen
=
getJensen
();
let
jensen
=
await
getJensen
();
if
(
jensen
==
null
)
return
;
let
rst
=
await
jensen
.
getAudioInputDevice
(
5
);
Logger
.
info
(
'jensen'
,
'audio-input'
,
'Get Audio Input Device: '
+
JSON
.
stringify
(
rst
));
await
releaseJensen
();
}
return
(
...
...
src/utils/task-impl.ts
View file @
7317ba8f
...
...
@@ -17,6 +17,8 @@ export type FileTaskData = {
export
function
buildTasks
(
jensen
:
Jensen
,
tm
:
TaskManager
)
{
// ===================== 初始化任务 =====================
return
;
// 时间同步
tm
.
registerInitializeTask
({
tag
:
'time-sync'
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment