Skip to content

Commit 9ebb311

Browse files
committed
Implement theme-hot-swap function and update device-server structure and update default-panel and update README.md
1 parent 9f9f763 commit 9ebb311

16 files changed

Lines changed: 76 additions & 45 deletions

README.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
Currently, this project only support Android and Windows. Please download the Mobile App from the [release page](https://github.com/junghyun397/VirtualThrottle/releases) or [Google Play](https://play.google.com/store/apps/details?id=com.junghyun397.dev.virtual_flight_throttle) and [download]((https://github.com/junghyun397/VirtualThrottle/releases)) and execution Device Server. A complete installation course [tutorial](https://github.com/junghyun397/VirtualThrottle/wiki/STEP-BY-STEP:-how-to-install-VFT-Flight-Throttle) is available.
2525

2626
# Build and Run with flutter
27+
28+
### Build App for your device
2729
```sh
2830
# 1. get pub package dependencies
2931
flutter pub get
@@ -33,4 +35,16 @@ flutter pub global run intl_utils:generate
3335

3436
# 3. run app in your device with flutter!
3537
flutter run
36-
```
38+
```
39+
40+
### Build Device Server for Windows
41+
```sh
42+
# 1. install requirement pip packages
43+
pip install -r requirements.txt
44+
45+
# 2. build stand-alone deice server with cx-freeze
46+
python windows_freeze_setup.py build
47+
48+
# 2.1. or build mono msi file.
49+
python windows_freeze_setup.py bdist_msi
50+
```

assets/jsons/default_panel_large.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

assets/jsons/default_panel_medium.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"width":8,"height":4,"components":{"slider1":{"component_type":"ComponentType.SLIDER","x":0,"y":0,"width":1,"height":4,"target_inputs":[1],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"SLIDR1"},"ComponentSettingType.SLIDER_RANGE":{"type":"double","value":"100.0"},"ComponentSettingType.SLIDER_USE_INTEGER_RANGE":{"type":"bool","value":"false"},"ComponentSettingType.SLIDER_UNIT_NAME":{"type":"String","value":"v"},"ComponentSettingType.SLIDER_USE_VERTICAL_AXIS":{"type":"bool","value":"true"},"ComponentSettingType.SLIDER_USE_CURRENT_VALUE_POPUP":{"type":"bool","value":"true"},"ComponentSettingType.SLIDER_TRACK_BAR_DENSITY":{"type":"double","value":"0.4"},"ComponentSettingType.SLIDER_TRACK_BAR_INDEX_COUNT":{"type":"int","value":"9"},"ComponentSettingType.SLIDER_USE_TRACK_BAR_LABEL":{"type":"bool","value":"true"},"ComponentSettingType.SLIDER_DETENT_POINTS":{"type":"List<double>","value":"[10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0]"}}},"slider2":{"component_type":"ComponentType.SLIDER","x":1,"y":0,"width":1,"height":4,"target_inputs":[2],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"SLIDR2"},"ComponentSettingType.SLIDER_RANGE":{"type":"double","value":"100.0"},"ComponentSettingType.SLIDER_USE_INTEGER_RANGE":{"type":"bool","value":"false"},"ComponentSettingType.SLIDER_UNIT_NAME":{"type":"String","value":"v"},"ComponentSettingType.SLIDER_USE_VERTICAL_AXIS":{"type":"bool","value":"true"},"ComponentSettingType.SLIDER_USE_CURRENT_VALUE_POPUP":{"type":"bool","value":"true"},"ComponentSettingType.SLIDER_TRACK_BAR_DENSITY":{"type":"double","value":"0.4"},"ComponentSettingType.SLIDER_TRACK_BAR_INDEX_COUNT":{"type":"int","value":"9"},"ComponentSettingType.SLIDER_USE_TRACK_BAR_LABEL":{"type":"bool","value":"true"},"ComponentSettingType.SLIDER_DETENT_POINTS":{"type":"List<double>","value":"[10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0]"}}},"slider3":{"component_type":"ComponentType.SLIDER","x":2,"y":0,"width":1,"height":4,"target_inputs":[3],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"SLIDR3"},"ComponentSettingType.SLIDER_RANGE":{"type":"double","value":"100.0"},"ComponentSettingType.SLIDER_USE_INTEGER_RANGE":{"type":"bool","value":"false"},"ComponentSettingType.SLIDER_UNIT_NAME":{"type":"String","value":"v"},"ComponentSettingType.SLIDER_USE_VERTICAL_AXIS":{"type":"bool","value":"true"},"ComponentSettingType.SLIDER_USE_CURRENT_VALUE_POPUP":{"type":"bool","value":"true"},"ComponentSettingType.SLIDER_TRACK_BAR_DENSITY":{"type":"double","value":"0.4"},"ComponentSettingType.SLIDER_TRACK_BAR_INDEX_COUNT":{"type":"int","value":"9"},"ComponentSettingType.SLIDER_USE_TRACK_BAR_LABEL":{"type":"bool","value":"true"},"ComponentSettingType.SLIDER_DETENT_POINTS":{"type":"List<double>","value":"[10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0]"}}},"toggle switch1":{"component_type":"ComponentType.TOGGLE_SWITCH","x":3,"y":0,"width":1,"height":1,"target_inputs":[9,10],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"SWICH1"}}},"toggle switch2":{"component_type":"ComponentType.TOGGLE_SWITCH","x":3,"y":1,"width":1,"height":1,"target_inputs":[11,12],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"SWICH2"}}},"toggle switch3":{"component_type":"ComponentType.TOGGLE_SWITCH","x":3,"y":2,"width":1,"height":1,"target_inputs":[13,14],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"SWICH3"}}},"toggle switch4":{"component_type":"ComponentType.TOGGLE_SWITCH","x":3,"y":3,"width":1,"height":1,"target_inputs":[15,16],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"SWICH4"}}},"button1":{"component_type":"ComponentType.BUTTON","x":4,"y":0,"width":1,"height":1,"target_inputs":[17],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"BTN1"},"ComponentSettingType.BUTTON_LABEL":{"type":"String","value":"BTN"}}},"button2":{"component_type":"ComponentType.BUTTON","x":5,"y":0,"width":1,"height":1,"target_inputs":[18],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"BTN2"},"ComponentSettingType.BUTTON_LABEL":{"type":"String","value":"BTN"}}},"button3":{"component_type":"ComponentType.BUTTON","x":6,"y":0,"width":1,"height":1,"target_inputs":[19],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"BTN3"},"ComponentSettingType.BUTTON_LABEL":{"type":"String","value":"BTN"}}},"toggle button1":{"component_type":"ComponentType.TOGGLE_BUTTON","x":4,"y":1,"width":1,"height":1,"target_inputs":[20],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"TBTN1"},"ComponentSettingType.BUTTON_LABEL":{"type":"String","value":"BTN"}}},"toggle button2":{"component_type":"ComponentType.TOGGLE_BUTTON","x":5,"y":1,"width":1,"height":1,"target_inputs":[21],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"TBTN2"},"ComponentSettingType.BUTTON_LABEL":{"type":"String","value":"BTN"}}},"toggle button3":{"component_type":"ComponentType.TOGGLE_BUTTON","x":6,"y":1,"width":1,"height":1,"target_inputs":[22],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"TBTN3"},"ComponentSettingType.BUTTON_LABEL":{"type":"String","value":"BTN"}}},"toggle button4":{"component_type":"ComponentType.TOGGLE_BUTTON","x":7,"y":1,"width":1,"height":1,"target_inputs":[23],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"TBTN4"},"ComponentSettingType.BUTTON_LABEL":{"type":"String","value":"BTN"}}},"hat switch1":{"component_type":"ComponentType.HAT_SWITCH","x":4,"y":2,"width":2,"height":2,"target_inputs":[24,25,26,27],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"HAT"}}},"slider5":{"component_type":"ComponentType.SLIDER","x":6,"y":3,"width":2,"height":1,"target_inputs":[5],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":""},"ComponentSettingType.SLIDER_RANGE":{"type":"double","value":"100.0"},"ComponentSettingType.SLIDER_USE_INTEGER_RANGE":{"type":"bool","value":"false"},"ComponentSettingType.SLIDER_UNIT_NAME":{"type":"String","value":"v"},"ComponentSettingType.SLIDER_USE_VERTICAL_AXIS":{"type":"bool","value":"false"},"ComponentSettingType.SLIDER_USE_CURRENT_VALUE_POPUP":{"type":"bool","value":"true"},"ComponentSettingType.SLIDER_TRACK_BAR_DENSITY":{"type":"double","value":"0.1"},"ComponentSettingType.SLIDER_TRACK_BAR_INDEX_COUNT":{"type":"int","value":"4"},"ComponentSettingType.SLIDER_USE_TRACK_BAR_LABEL":{"type":"bool","value":"false"},"ComponentSettingType.SLIDER_DETENT_POINTS":{"type":"List<double>","value":"[]"}}},"slider4":{"component_type":"ComponentType.SLIDER","x":6,"y":2,"width":2,"height":1,"target_inputs":[4],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":""},"ComponentSettingType.SLIDER_RANGE":{"type":"double","value":"100.0"},"ComponentSettingType.SLIDER_USE_INTEGER_RANGE":{"type":"bool","value":"false"},"ComponentSettingType.SLIDER_UNIT_NAME":{"type":"String","value":"v"},"ComponentSettingType.SLIDER_USE_VERTICAL_AXIS":{"type":"bool","value":"false"},"ComponentSettingType.SLIDER_USE_CURRENT_VALUE_POPUP":{"type":"bool","value":"true"},"ComponentSettingType.SLIDER_TRACK_BAR_DENSITY":{"type":"double","value":"0.1"},"ComponentSettingType.SLIDER_TRACK_BAR_INDEX_COUNT":{"type":"int","value":"4"},"ComponentSettingType.SLIDER_USE_TRACK_BAR_LABEL":{"type":"bool","value":"false"},"ComponentSettingType.SLIDER_DETENT_POINTS":{"type":"List<double>","value":"[]"}}}},"date":91152000000}
1+
{"width":8,"height":4,"components":{"Slider#1":{"component_type":"ComponentType.SLIDER","x":0,"y":0,"width":1,"height":4,"target_inputs":[1],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"SLIDR1"},"ComponentSettingType.SLIDER_RANGE":{"type":"double","value":"100.0"},"ComponentSettingType.SLIDER_USE_INTEGER_RANGE":{"type":"bool","value":"false"},"ComponentSettingType.SLIDER_UNIT_NAME":{"type":"String","value":"v"},"ComponentSettingType.SLIDER_USE_VERTICAL_AXIS":{"type":"bool","value":"true"},"ComponentSettingType.SLIDER_USE_CURRENT_VALUE_POPUP":{"type":"bool","value":"true"},"ComponentSettingType.SLIDER_TRACK_BAR_DENSITY":{"type":"double","value":"0.4"},"ComponentSettingType.SLIDER_TRACK_BAR_INDEX_COUNT":{"type":"int","value":"9"},"ComponentSettingType.SLIDER_USE_TRACK_BAR_LABEL":{"type":"bool","value":"true"},"ComponentSettingType.SLIDER_DETENT_POINTS":{"type":"List<double>","value":"[10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0]"}}},"Slider#2":{"component_type":"ComponentType.SLIDER","x":1,"y":0,"width":1,"height":4,"target_inputs":[2],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"SLIDR2"},"ComponentSettingType.SLIDER_RANGE":{"type":"double","value":"100.0"},"ComponentSettingType.SLIDER_USE_INTEGER_RANGE":{"type":"bool","value":"false"},"ComponentSettingType.SLIDER_UNIT_NAME":{"type":"String","value":"v"},"ComponentSettingType.SLIDER_USE_VERTICAL_AXIS":{"type":"bool","value":"true"},"ComponentSettingType.SLIDER_USE_CURRENT_VALUE_POPUP":{"type":"bool","value":"true"},"ComponentSettingType.SLIDER_TRACK_BAR_DENSITY":{"type":"double","value":"0.4"},"ComponentSettingType.SLIDER_TRACK_BAR_INDEX_COUNT":{"type":"int","value":"9"},"ComponentSettingType.SLIDER_USE_TRACK_BAR_LABEL":{"type":"bool","value":"true"},"ComponentSettingType.SLIDER_DETENT_POINTS":{"type":"List<double>","value":"[10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0]"}}},"Slider#3":{"component_type":"ComponentType.SLIDER","x":2,"y":0,"width":1,"height":4,"target_inputs":[3],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"SLIDR3"},"ComponentSettingType.SLIDER_RANGE":{"type":"double","value":"100.0"},"ComponentSettingType.SLIDER_USE_INTEGER_RANGE":{"type":"bool","value":"false"},"ComponentSettingType.SLIDER_UNIT_NAME":{"type":"String","value":"v"},"ComponentSettingType.SLIDER_USE_VERTICAL_AXIS":{"type":"bool","value":"true"},"ComponentSettingType.SLIDER_USE_CURRENT_VALUE_POPUP":{"type":"bool","value":"true"},"ComponentSettingType.SLIDER_TRACK_BAR_DENSITY":{"type":"double","value":"0.4"},"ComponentSettingType.SLIDER_TRACK_BAR_INDEX_COUNT":{"type":"int","value":"9"},"ComponentSettingType.SLIDER_USE_TRACK_BAR_LABEL":{"type":"bool","value":"false"},"ComponentSettingType.SLIDER_DETENT_POINTS":{"type":"List<double>","value":"[10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0]"}}},"Hat Switch#1":{"component_type":"ComponentType.HAT_SWITCH","x":3,"y":2,"width":2,"height":2,"target_inputs":[9,10,11,12],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"HAT1"}}},"Button#1":{"component_type":"ComponentType.BUTTON","x":5,"y":3,"width":1,"height":1,"target_inputs":[13],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"BTN1"},"ComponentSettingType.BUTTON_LABEL":{"type":"String","value":"BTN"}}},"Button#2":{"component_type":"ComponentType.BUTTON","x":6,"y":3,"width":1,"height":1,"target_inputs":[14],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"BTN2"},"ComponentSettingType.BUTTON_LABEL":{"type":"String","value":"BTN"}}},"Button#3":{"component_type":"ComponentType.BUTTON","x":7,"y":3,"width":1,"height":1,"target_inputs":[15],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"BTN3"},"ComponentSettingType.BUTTON_LABEL":{"type":"String","value":"BTN"}}},"Button#4":{"component_type":"ComponentType.BUTTON","x":5,"y":2,"width":1,"height":1,"target_inputs":[16],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"BTN4"},"ComponentSettingType.BUTTON_LABEL":{"type":"String","value":"BTN"}}},"Button#5":{"component_type":"ComponentType.BUTTON","x":6,"y":2,"width":1,"height":1,"target_inputs":[17],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"BTN5"},"ComponentSettingType.BUTTON_LABEL":{"type":"String","value":"BTN"}}},"Button#6":{"component_type":"ComponentType.BUTTON","x":7,"y":2,"width":1,"height":1,"target_inputs":[18],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"BTN6"},"ComponentSettingType.BUTTON_LABEL":{"type":"String","value":"BTN"}}},"Toggle Button#1":{"component_type":"ComponentType.TOGGLE_BUTTON","x":3,"y":1,"width":1,"height":1,"target_inputs":[19],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"TBTN1"},"ComponentSettingType.BUTTON_LABEL":{"type":"String","value":"BTN"}}},"Toggle Button#2":{"component_type":"ComponentType.TOGGLE_BUTTON","x":4,"y":1,"width":1,"height":1,"target_inputs":[20],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"TBTN2"},"ComponentSettingType.BUTTON_LABEL":{"type":"String","value":"BTN"}}},"Toggle Button#3":{"component_type":"ComponentType.TOGGLE_BUTTON","x":5,"y":1,"width":1,"height":1,"target_inputs":[21],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"TBTN3"},"ComponentSettingType.BUTTON_LABEL":{"type":"String","value":"BTN"}}},"Toggle Button#4":{"component_type":"ComponentType.TOGGLE_BUTTON","x":6,"y":1,"width":1,"height":1,"target_inputs":[22],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"TBTN4"},"ComponentSettingType.BUTTON_LABEL":{"type":"String","value":"BTN"}}},"Toggle Button#5":{"component_type":"ComponentType.TOGGLE_BUTTON","x":7,"y":1,"width":1,"height":1,"target_inputs":[23],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"TBTN5"},"ComponentSettingType.BUTTON_LABEL":{"type":"String","value":"BTN"}}},"Toggle Switch#1":{"component_type":"ComponentType.TOGGLE_SWITCH","x":3,"y":0,"width":1,"height":1,"target_inputs":[24,25],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"SWICH1"}}},"Toggle Switch#2":{"component_type":"ComponentType.TOGGLE_SWITCH","x":4,"y":0,"width":1,"height":1,"target_inputs":[26,27],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"SWICH2"}}},"Toggle Switch#3":{"component_type":"ComponentType.TOGGLE_SWITCH","x":5,"y":0,"width":1,"height":1,"target_inputs":[28,29],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"SWICH3"}}},"Toggle Switch#4":{"component_type":"ComponentType.TOGGLE_SWITCH","x":6,"y":0,"width":1,"height":1,"target_inputs":[30,31],"settings":{"ComponentSettingType.LABEL":{"type":"String","value":"SWICH4"}}}},"date":91152000000}

device_server/requirements.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
pyvjoy==1.0.1
2+
cx-Freeze==6.1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
from vftdevice.network_interface import SocketListener
1+
from . import network_interface
22

33
if __name__ == '__main__':
44
print("[!] warning! VFT-device-server for linux is write for debugging. "
55
"linux version has no functionality other than to receive packets.")
66

7-
socket = SocketListener(on_packet_receive=lambda _: None, use_recover_socket=True)
7+
socket = network_interface.SocketListener(on_packet_receive=lambda _: None, use_recover_socket=True)
88
socket.start_socket()

vftdevice/vft_device_server_windows.py renamed to device_server/vft_device_server_windows.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import pyvjoy
22

3-
from vftdevice.network_interface import SocketListener, ParsedPacket, PacketType
3+
from . import network_interface
44

55

6-
def on_packet_receive(packet: ParsedPacket) -> None:
7-
if packet.packet_type == PacketType.ANALOGUE:
6+
def on_packet_receive(packet: network_interface.ParsedPacket) -> None:
7+
if packet.packet_type == network_interface.PacketType.ANALOGUE:
88
joystick.set_axis(packet.target_input - 1 + 0x30, int(int(packet.body) / 1000 * 32768))
9-
if packet.packet_type == PacketType.DIGITAL:
9+
if packet.packet_type == network_interface.PacketType.DIGITAL:
1010
joystick.set_button(packet.target_input - 1 - 7, int(packet.body))
1111

1212
if __name__ == '__main__':
@@ -20,5 +20,5 @@ def on_packet_receive(packet: ParsedPacket) -> None:
2020

2121
print("[o] succeed loading vjoy device.")
2222

23-
socket = SocketListener(on_packet_receive=on_packet_receive, use_recover_socket=True)
23+
socket = network_interface.SocketListener(on_packet_receive=on_packet_receive, use_recover_socket=True)
2424
socket.start_socket()
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33

44
buildOptions = dict(packages=["pyvjoy"])
55

6-
exe = [Executable(
7-
script="vft_device_server_windows.py",
8-
icon="vft_icon.ico",
9-
)]
6+
exe = [
7+
Executable(
8+
script="vft_device_server_windows.py",
9+
icon="vft_icon.ico",
10+
)
11+
]
1012

1113
setup(
1214
name="VFT-device-server",

0 commit comments

Comments
 (0)