build(release): v1.0 of VHS Watchface

This commit is contained in:
Савелий Савенок 2024-10-20 02:54:13 +03:00
commit e8062061b4
40 changed files with 301 additions and 0 deletions

15
.gitignore vendored Normal file
View File

@ -0,0 +1,15 @@
.DS_Store
node_modules/**
dist/*
npm-debug.log
yarn-debug.log*
yarn-error.log*
yarn.lock
package-lock.json
selenium-debug.log
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln

10
app.js Normal file
View File

@ -0,0 +1,10 @@
App({
globalData: {},
onCreate(options) {
console.log('app on create invoke')
},
onDestroy(options) {
console.log('app on destroy invoke')
}
})

57
app.json Normal file
View File

@ -0,0 +1,57 @@
{
"configVersion": "v2",
"app": {
"appId": 24808,
"appName": "VHS Watch",
"appType": "watchface",
"version": {
"code": 1,
"name": "1.0.0"
},
"icon": "icon.png",
"vender": "zepp",
"description": "VHS watchface"
},
"permissions": [
"data:os.device.info",
"data:user.hd.heart_rate",
"data:user.hd.distance"
],
"runtime": {
"apiVersion": {
"compatible": "2.0.0",
"target": "2.0.0",
"minVersion": "2.0.0"
}
},
"targets": {
"390x450-amazfit-gts-4": {
"module": {
"watchface": {
"path": "watchface/index",
"main": 1,
"editable": 0,
"lockscreen": 0,
"hightCost": 0
}
},
"platforms": [
{
"name": "Lille",
"deviceSource": 7995648
},
{
"name": "Lillew",
"deviceSource": 7995649
}
],
"designWidth": 390
}
},
"i18n": {
"en-US": {
"appName": "VHS Watch"
}
},
"defaultLanguage": "en-US"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 883 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1014 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 825 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 856 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 695 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1019 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 613 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 505 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 600 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 453 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 482 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 559 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 598 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 583 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 663 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 777 B

17
package.json Normal file
View File

@ -0,0 +1,17 @@
{
"name": "vhs-watch",
"version": "1.0.0",
"description": "vhs watch for Zepp OS 3.0 (GTS 4)",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Lisoveliy",
"license": "GPL-3.0",
"devDependencies": {
"@zeppos/device-types": "^3.0.0"
},
"dependencies": {
"@zeppos/zml": "^0.0.9"
}
}

View File

@ -0,0 +1,12 @@
export default [
'clk/0.PNG',
'clk/1.PNG',
'clk/2.PNG',
'clk/3.PNG',
'clk/4.PNG',
'clk/5.PNG',
'clk/6.PNG',
'clk/7.PNG',
'clk/8.PNG',
'clk/9.PNG'
];

View File

@ -0,0 +1,12 @@
export default [
'date/0.PNG',
'date/1.PNG',
'date/2.PNG',
'date/3.PNG',
'date/4.PNG',
'date/5.PNG',
'date/6.PNG',
'date/7.PNG',
'date/8.PNG',
'date/9.PNG'
];

23
watchface/index.js Normal file
View File

@ -0,0 +1,23 @@
import batteryModule from "./modules/battery"
import clockModule from "./modules/clock"
import dateModule from "./modules/date"
import distanceModule from "./modules/distance"
import heartRateModule from "./modules/heartRate"
WatchFace({
onInit() {
},
build() {
clockModule()
dateModule()
batteryModule()
heartRateModule()
distanceModule()
},
onDestroy() {
}
})

View File

@ -0,0 +1,31 @@
import * as hmSensor from '@zos/sensor'
import * as hmUI from '@zos/ui'
import fontArray from '../fontData/secondaryFont'
let batteryWg;
export default function(){
console.log("[modules]: battery module init")
let battery = new hmSensor.Battery()
updateBatteryWidget(battery.getCurrent())
battery.onChange(() => updateBatteryWidget(battery.getCurrent()))
hmUI.createWidget(hmUI.widget.IMG, {
x: 355,
y: 10,
src: 'date/perc.PNG'
})
}
function updateBatteryWidget(batteryPercentage){
if(batteryWg){
hmUI.deleteWidget(batteryWg)
}
batteryWg = hmUI.createWidget(hmUI.widget.TEXT_IMG, {
x: 270,
y: 10,
type: hmUI.data_type.BATTERY,
font_array: fontArray,
h_space: 1,
align_h: hmUI.align.RIGHT,
text: batteryPercentage
})
}

View File

@ -0,0 +1,29 @@
import * as hmUI from '@zos/ui'
import timeArray from '../fontData/primaryFont'
export default function(){
console.log("[modules]: clock module init")
hmUI.createWidget(hmUI.widget.IMG_TIME, {
hour_zero: 1, // Whether to make up zero.
hour_startX: 10,
hour_startY: 50,
hour_array: timeArray,
hour_space: 1,
hour_align: hmUI.align.CENTER_H | hmUI.align.CENTER_V, //Я хз работает ли это
show_level: hmUI.show_level.ONLY_NORMAL | hmUI.show_level.ONAL_AOD
})
hmUI.createWidget(hmUI.widget.IMG_TIME, {
minute_startX: 118, //120 - space on center(2)
minute_startY: 170,
minute_array: timeArray,
minute_space: 1,
minute_align: hmUI.align.CENTER_H | hmUI.align.CENTER_V,
show_level: hmUI.show_level.ONLY_NORMAL | hmUI.show_level.ONAL_AOD
})
hmUI.createWidget(hmUI.widget.IMG_TIME, {
second_startX: 220,
second_startY: 290,
second_array: timeArray,
second_space: 1,
second_align: hmUI.align.CENTER_H | hmUI.align.CENTER_V
})
}

26
watchface/modules/date.js Normal file
View File

@ -0,0 +1,26 @@
import * as hmUI from '@zos/ui'
import fontArray from '../fontData/secondaryFont'
export default function () {
console.log("[modules]: date module init")
hmUI.createWidget(hmUI.widget.IMG_DATE, {
day_startX: 10,
day_startY: 10,
day_align: hmUI.align.LEFT,
day_space: 0,
day_zero: 1,
day_en_array: fontArray
})
hmUI.createWidget(hmUI.widget.IMG, {
x: 54,
y: 14,
src: 'date/point.PNG'
})
hmUI.createWidget(hmUI.widget.IMG_DATE, {
month_startX: 70,
month_startY: 10,
month_align: hmUI.align.LEFT,
month_space: 0,
month_zero: 1,
month_en_array: fontArray
})
}

View File

@ -0,0 +1,35 @@
import * as hmSensor from '@zos/sensor'
import * as hmUI from '@zos/ui';
import secondaryFont from '../fontData/secondaryFont';
let distWg;
export default function(){
console.log("[modules]: distance module init")
let distance = new hmSensor.Distance();
updateDistance(distance.getCurrent())
distance.onChange(() => updateDistance(distance.getCurrent()))
hmUI.createWidget(hmUI.widget.IMG, {
x: 10,
y: 405,
src: 'misc/dist.PNG'
})
}
function updateDistance(dist){
if(!dist){
dist = 0
}
if(distWg){
hmUI.deleteWidget(distWg)
}
dist = (dist * 1000).toFixed(0)
distWg = hmUI.createWidget(hmUI.widget.TEXT_IMG, {
x: 160,
y: 405,
type: hmUI.data_type.DISTANCE,
font_array: secondaryFont,
h_space: 1,
align_h: hmUI.align.LEFT,
text: dist
})
}

View File

@ -0,0 +1,34 @@
import * as hmSensor from '@zos/sensor'
import * as hmUI from '@zos/ui';
import secondaryFont from '../fontData/secondaryFont';
let heartRateWg;
export default function(){
console.log("[modules]: heartrate module init")
let heart = new hmSensor.HeartRate();
updateHeartWidget(heart.getCurrent())
heart.onCurrentChange(() => updateHeartWidget(heart.getCurrent()))
hmUI.createWidget(hmUI.widget.IMG, {
x: 10,
y: 365,
src: 'misc/hb.PNG'
})
}
function updateHeartWidget(hbpm){
if(!hbpm){
hbpm = 0
}
if(heartRateWg){
hmUI.deleteWidget(heartRateWg)
}
heartRateWg = hmUI.createWidget(hmUI.widget.TEXT_IMG, {
x: 100,
y: 365,
type: hmUI.data_type.BATTERY,
font_array: secondaryFont,
h_space: 1,
align_h: hmUI.align.LEFT,
text: hbpm
})
}