[Amazon Fire TV Device Support]: JVC 4K - Fire TV with Freeview Play (2021)
Closed this issue ยท 17 comments
Device Name
JVC 4K - Fire TV with Freeview Play (2021)
Which compatibility mode event number works BEST with your device?
event0
Device ADB Input Interrogation Response
adb_response: INPUT MANAGER (dumpsys input)
Input Manager State:
Interactive: false
System UI Visibility: 0x0
Pointer Speed: 0
Pointer Gestures Enabled: true
Show Touches: false
Pointer Capture Enabled: false
Event Hub State:
BuiltInKeyboardId: -2
Devices:
-1: Virtual
Classes: 0x40000023
Path: <virtual>
Enabled: true
Descriptor: a718a782d34bc767f4689c232d64d527998ea7fd:00000000
Location:
ControllerNumber: 0
UniqueId: <virtual>
Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000
KeyLayoutFile: /system/usr/keylayout/Generic.kl
KeyCharacterMapFile: /system/usr/keychars/Virtual.kcm
ConfigurationFile:
HaveKeyboardLayoutOverlay: false
1: MTK TV KEYPAD
Classes: 0x00000001
Path: /dev/input/event1
Enabled: true
Descriptor: 8f43d929a9472e8dc54d48a6c41e2435e8eaff35:36970002
Location:
ControllerNumber: 0
UniqueId:
Identifier: bus=0x0019, vendor=0x3697, product=0x0002, version=0x0002
KeyLayoutFile: /vendor/usr/keylayout/Vendor_3697_Product_0002.kl
KeyCharacterMapFile: /system/usr/keychars/Generic.kcm
ConfigurationFile:
HaveKeyboardLayoutOverlay: false
2: MStar Smart TV IR Receiver
Classes: 0x80000021
Path: /dev/input/event0
Enabled: true
Descriptor: 0e50bdc18d3ae0b6f247100cbd99062d93c208eb:36970001
Location: /dev/ir
ControllerNumber: 0
UniqueId:
Identifier: bus=0x0018, vendor=0x3697, product=0x0001, version=0x0001
KeyLayoutFile: /vendor/usr/keylayout/Vendor_3697_Product_0001.kl
KeyCharacterMapFile: /system/usr/keychars/Generic.kcm
ConfigurationFile: /vendor/usr/idc/Vendor_3697_Product_0001.idc
HaveKeyboardLayoutOverlay: false
3: amazon_touch
Classes: 0x00000014
Path: /dev/input/event2
Enabled: true
Descriptor: 185733e0df071e21edd860dd6224a1f9f378c689:00000000
Location:
ControllerNumber: 0
UniqueId:
Identifier: bus=0x0005, vendor=0x0000, product=0x0000, version=0x0008
KeyLayoutFile:
KeyCharacterMapFile:
ConfigurationFile: /system/usr/idc/amazon_touch.idc
HaveKeyboardLayoutOverlay: false
4: kcmouse
Classes: 0x80000008
Path: /dev/input/event3
Enabled: true
Descriptor: 3b975ed12e4cb4357a995906d1f9c74d8457fd71:00000000
Location:
ControllerNumber: 0
UniqueId:
Identifier: bus=0x0005, vendor=0x0000, product=0x0000, version=0x0008
KeyLayoutFile:
KeyCharacterMapFile:
ConfigurationFile:
HaveKeyboardLayoutOverlay: false
6: amzkeyboard
Classes: 0x80000023
Path: /dev/input/event5
Enabled: true
Descriptor: ea16b8e37822378b09336d67566ac23418d207f4:00000000
Location:
ControllerNumber: 0
UniqueId:
Identifier: bus=0x0005, vendor=0x0000, product=0x0000, version=0x0008
KeyLayoutFile: /system/usr/keylayout/amzkeyboard.kl
KeyCharacterMapFile: /system/usr/keychars/Generic.kcm
ConfigurationFile:
HaveKeyboardLayoutOverlay: false
Input Reader State:
Device -1: Virtual
Generation: 2
IsExternal: false
HasMic: false
Sources: 0x00000301
KeyboardType: 2
Keyboard Input Mapper:
Parameters:
HasAssociatedDisplay: false
OrientationAware: false
HandlesKeyRepeat: false
KeyboardType: 2
Orientation: 0
KeyDowns: 0 keys currently down
MetaState: 0x0
DownTime: 0
Device 1: MTK TV KEYPAD
Generation: 6
IsExternal: false
HasMic: false
Sources: 0x00000101
KeyboardType: 1
Keyboard Input Mapper:
Parameters:
HasAssociatedDisplay: false
OrientationAware: false
HandlesKeyRepeat: false
KeyboardType: 1
Orientation: 0
KeyDowns: 0 keys currently down
MetaState: 0x0
DownTime: 0
Device 2: MStar Smart TV IR Receiver
Generation: 4
IsExternal: true
HasMic: false
Sources: 0x00000301
KeyboardType: 1
Keyboard Input Mapper:
Parameters:
HasAssociatedDisplay: false
OrientationAware: false
HandlesKeyRepeat: false
KeyboardType: 1
Orientation: 0
KeyDowns: 0 keys currently down
MetaState: 0x0
DownTime: 175095440608000
Device 3: amazon_touch
Generation: 11
IsExternal: false
HasMic: false
Sources: 0x00001002
KeyboardType: 0
Motion Ranges:
X: source=0x00001002, min=0.000, max=1919.000, flat=0.000, fuzz=0.000, resolution=0.000
Y: source=0x00001002, min=0.000, max=1079.000, flat=0.000, fuzz=0.000, resolution=0.000
PRESSURE: source=0x00001002, min=0.000, max=1.000, flat=0.000, fuzz=0.000, resolution=0.000
Touch Input Mapper (mode - direct):
Parameters:
GestureMode: multi-touch
DeviceType: touchScreen
AssociatedDisplay: hasAssociatedDisplay=true, isExternal=false, displayId=''
OrientationAware: true
Raw Touch Axes:
X: min=0, max=1919, flat=0, fuzz=0, resolution=0
Y: min=0, max=1079, flat=0, fuzz=0, resolution=0
Pressure: unknown range
TouchMajor: unknown range
TouchMinor: unknown range
ToolMajor: unknown range
ToolMinor: unknown range
Orientation: unknown range
Distance: unknown range
TiltX: unknown range
TiltY: unknown range
TrackingId: unknown range
Slot: unknown range
Calibration:
touch.size.calibration: none
touch.size.scale: 40.000
touch.size.bias: 0.000
touch.size.isSummed: false
touch.pressure.calibration: none
touch.pressure.scale: 0.013
touch.orientation.calibration: none
touch.distance.calibration: none
touch.coverage.calibration: none
Affine Transformation:
X scale: 1.000
X ymix: 0.000
X offset: 0.000
Y xmix: 0.000
Y scale: 1.000
Y offset: 0.000
Viewport: displayId=0, orientation=0, logicalFrame=[0, 0, 1920, 1080], physicalFrame=[0, 0, 3840, 2160], deviceSize=[3840, 2160]
SurfaceWidth: 1920px
SurfaceHeight: 1080px
SurfaceLeft: 0
SurfaceTop: 0
SurfaceOrientation: 0
Translation and Scaling Factors:
XTranslate: 0.000
YTranslate: 0.000
XScale: 1.000
YScale: 1.000
XPrecision: 1.000
YPrecision: 1.000
GeometricScale: 1.000
PressureScale: 0.000
SizeScale: 0.000
OrientationScale: 0.000
DistanceScale: 0.000
HaveTilt: false
TiltXCenter: 0.000
TiltXScale: 0.000
TiltYCenter: 0.000
TiltYScale: 0.000
Last Raw Button State: 0x00000000
Last Raw Touch: pointerCount=0
Last Cooked Button State: 0x00000000
Last Cooked Touch: pointerCount=0
Stylus Fusion:
ExternalStylusConnected: false
External Stylus ID: -1
External Stylus Data Timeout: 9223372036854775807
External Stylus State:
When: 9223372036854775807
Pressure: 0.000000
Button State: 0x00000000
Tool Type: 0
Device 4: kcmouse
Generation: 44
IsExternal: true
HasMic: false
Sources: 0x00002002
KeyboardType: 0
Motion Ranges:
X: source=0x00002002, min=0.000, max=1919.000, flat=0.000, fuzz=0.000, resolution=0.000
Y: source=0x00002002, min=0.000, max=1079.000, flat=0.000, fuzz=0.000, resolution=0.000
PRESSURE: source=0x00002002, min=0.000, max=1.000, flat=0.000, fuzz=0.000, resolution=0.000
VSCROLL: source=0x00002002, min=-1.000, max=1.000, flat=0.000, fuzz=0.000, resolution=0.000
Cursor Input Mapper:
Parameters:
HasAssociatedDisplay: true
Mode: pointer
OrientationAware: false
XScale: 1.000
YScale: 1.000
XPrecision: 1.000
YPrecision: 1.000
HaveVWheel: true
HaveHWheel: false
VWheelScale: 1.000
HWheelScale: 1.000
Orientation: 0
ButtonState: 0x00000000
Down: false
DownTime: 0
Device 6: amzkeyboard
Generation: 20
IsExternal: true
HasMic: false
Sources: 0x00000301
KeyboardType: 2
Keyboard Input Mapper:
Parameters:
HasAssociatedDisplay: false
OrientationAware: false
HandlesKeyRepeat: false
KeyboardType: 2
Orientation: 0
KeyDowns: 0 keys currently down
MetaState: 0x0
DownTime: 0
Configuration:
ExcludedDeviceNames: []
VirtualKeyQuietTime: 0.0ms
PointerVelocityControlParameters: scale=1.000, lowThreshold=500.000, highThreshold=3000.000, acceleration=3.000
WheelVelocityControlParameters: scale=1.000, lowThreshold=15.000, highThreshold=50.000, acceleration=4.000
PointerGesture:
Enabled: true
QuietInterval: 100.0ms
DragMinSwitchSpeed: 50.0px/s
TapInterval: 150.0ms
TapDragInterval: 300.0ms
TapSlop: 20.0px
MultitouchSettleInterval: 100.0ms
MultitouchMinDistance: 15.0px
SwipeTransitionAngleCosine: 0.3
SwipeMaxWidthRatio: 0.2
MovementSpeedRatio: 0.8
ZoomSpeedRatio: 0.3
Viewports:
ViewportInternal:
Viewport: displayId=0, orientation=0, uniqueId='', logicalFrame=[0, 0, 1920, 1080], physicalFrame=[0, 0, 3840, 2160], deviceSize=[3840, 2160]
ViewportExternal:
Viewport: displayId=0, orientation=0, uniqueId='', logicalFrame=[0, 0, 1920, 1080], physicalFrame=[0, 0, 3840, 2160], deviceSize=[3840, 2160]
ViewportVirtual:
Input Dispatcher State:
DispatchEnabled: 1
DispatchFrozen: 0
FocusedApplication: name='AppWindowToken{cee1c4b token=Token{694a91a ActivityRecord{c233bc5 u0 com.amazon.ftv.profilepicker/.ui.PickerActivity t2604}}}', dispatchingTimeout=5000.000ms
FocusedWindow: name='Window{7242646 u0 com.amazon.ftv.profilepicker/com.amazon.ftv.profilepicker.ui.PickerActivity}'
TouchStates: <no displays touched>
Windows:
0: name='Window{bbc3cb6 u0 com.amazon.vizzini}', displayId=0, paused=false, hasFocus=false, hasWallpaper=false, visible=false, canReceiveKeys=false, flags=0x01400108, type=0x000007da, layer=0, frame=[0,0][1920,1080], scale=1.000000, touchableRegion=[0,0][1920,1080], inputFeatures=0x00000000, ownerPid=5100, ownerUid=10034, dispatchingTimeout=5000.000ms
1: name='Window{620121d u0 com.amazon.vizzini}', displayId=0, paused=false, hasFocus=false, hasWallpaper=false, visible=false, canReceiveKeys=false, flags=0x01400100, type=0x000007da, layer=0, frame=[0,0][1920,1080], scale=1.000000, touchableRegion=[0,0][1920,1080], inputFeatures=0x00000000, ownerPid=5100, ownerUid=10034, dispatchingTimeout=5000.000ms
2: name='Window{7242646 u0 com.amazon.ftv.profilepicker/com.amazon.ftv.profilepicker.ui.PickerActivity}', displayId=0, paused=false, hasFocus=true, hasWallpaper=false, visible=true, canReceiveKeys=true, flags=0x81810120, type=0x00000001, layer=0, frame=[0,0][1920,1080], scale=1.000000, touchableRegion=[0,0][1920,1080], inputFeatures=0x00000000, ownerPid=2190, ownerUid=10019, dispatchingTimeout=5000.000ms
3: name='Window{688fa31 u0 com.disney.disneyplus/com.bamtechmedia.dominguez.player.ui.experiences.legacy.v1.TvPlaybackActivity}', displayId=0, paused=false, hasFocus=false, hasWallpaper=false, visible=false, canReceiveKeys=false, flags=0x81812120, type=0x00000001, layer=0, frame=[0,0][1920,1080], scale=1.000000, touchableRegion=[0,0][1920,1080], inputFeatures=0x00000000, ownerPid=28100, ownerUid=10212, dispatchingTimeout=5000.000ms
4: name='Window{4a249a9 u0 com.disney.disneyplus/com.bamtechmedia.dominguez.main.MainActivity}', displayId=0, paused=false, hasFocus=false, hasWallpaper=false, visible=false, canReceiveKeys=false, flags=0x81810120, type=0x00000001, layer=0, frame=[0,0][1920,1080], scale=1.000000, touchableRegion=[0,0][1920,1080], inputFeatures=0x00000000, ownerPid=28100, ownerUid=10212, dispatchingTimeout=5000.000ms
5: name='Window{81e06ae u0 com.amazon.tv.launcher/com.amazon.tv.launcher.ui.HomeActivity_vNext}', displayId=0, paused=false, hasFocus=false, hasWallpaper=false, visible=false, canReceiveKeys=false, flags=0x83810120, type=0x00000001, layer=0, frame=[0,0][1920,1080], scale=1.000000, touchableRegion=[0,0][1920,1080], inputFeatures=0x00000000, ownerPid=5398, ownerUid=10015, dispatchingTimeout=5000.000ms
6: name='Window{df982de u0 com.vewd.core.tvapp/com.vewd.core.tvapp.TvActivity}', displayId=0, paused=false, hasFocus=false, hasWallpaper=false, visible=false, canReceiveKeys=false, flags=0x81810520, type=0x00000001, layer=0, frame=[0,0][1920,1080], scale=1.000000, touchableRegion=[0,0][1920,1080], inputFeatures=0x00000000, ownerPid=19460, ownerUid=10062, dispatchingTimeout=5000.000ms
7: name='Window{67b43fd u0 com.vewd.core.tvapp/com.vewd.core.tvapp.EpgActivity}', displayId=0, paused=false, hasFocus=false, hasWallpaper=false, visible=false, canReceiveKeys=false, flags=0x81810520, type=0x00000001, layer=0, frame=[0,0][1920,1080], scale=1.000000, touchableRegion=[0,0][1920,1080], inputFeatures=0x00000000, ownerPid=19460, ownerUid=10062, dispatchingTimeout=5000.000ms
MonitoringChannels:
0: 'WindowManager (server)'
RecentQueue: length=10
KeyEvent, age=13257946.0ms
KeyEvent, age=13257827.0ms
KeyEvent, age=13252586.0ms
KeyEvent, age=13252546.0ms
KeyEvent, age=13244235.0ms
KeyEvent, age=13244166.0ms
KeyEvent, age=11980908.0ms
KeyEvent, age=11980753.0ms
DeviceResetEvent(deviceId=9), policyFlags=0x00000000, age=11620381.0ms
ConfigurationChangedEvent(), policyFlags=0x00000000, age=11620381.0ms
PendingEvent: <none>
InboundQueue: <empty>
ReplacedKeys: <empty>
Connections:
0: channelName='WindowManager (server)', windowName='monitor', status=NORMAL, monitor=true, inputPublisherBlocked=false
OutboundQueue: <empty>
WaitQueue: <empty>
1: channelName='4a249a9 com.disney.disneyplus/com.bamtechmedia.dominguez.main.MainActivity (server)', windowName='Window{4a249a9 u0 com.disney.disneyplus/com.bamtechmedia.dominguez.main.MainActivity}', status=NORMAL, monitor=false, inputPublisherBlocked=false
OutboundQueue: <empty>
WaitQueue: <empty>
2: channelName='81e06ae com.amazon.tv.launcher/com.amazon.tv.launcher.ui.HomeActivity_vNext (server)', windowName='Window{81e06ae u0 com.amazon.tv.launcher/com.amazon.tv.launcher.ui.HomeActivity_vNext}', status=NORMAL, monitor=false, inputPublisherBlocked=false
OutboundQueue: <empty>
WaitQueue: <empty>
3: channelName='bbc3cb6 com.amazon.vizzini (server)', windowName='Window{bbc3cb6 u0 com.amazon.vizzini}', status=NORMAL, monitor=false, inputPublisherBlocked=false
OutboundQueue: <empty>
WaitQueue: <empty>
4: channelName='7242646 com.amazon.ftv.profilepicker/com.amazon.ftv.profilepicker.ui.PickerActivity (server)', windowName='Window{7242646 u0 com.amazon.ftv.profilepicker/com.amazon.ftv.profilepicker.ui.PickerActivity}', status=NORMAL, monitor=false, inputPublisherBlocked=false
OutboundQueue: <empty>
WaitQueue: <empty>
5: channelName='67b43fd com.vewd.core.tvapp/com.vewd.core.tvapp.EpgActivity (server)', windowName='Window{67b43fd u0 com.vewd.core.tvapp/com.vewd.core.tvapp.EpgActivity}', status=NORMAL, monitor=false, inputPublisherBlocked=false
OutboundQueue: <empty>
WaitQueue: <empty>
6: channelName='620121d com.amazon.vizzini (server)', windowName='Window{620121d u0 com.amazon.vizzini}', status=NORMAL, monitor=false, inputPublisherBlocked=false
OutboundQueue: <empty>
WaitQueue: <empty>
7: channelName='688fa31 com.disney.disneyplus/com.bamtechmedia.dominguez.player.ui.experiences.legacy.v1.TvPlaybackActivity (server)', windowName='Window{688fa31 u0 com.disney.disneyplus/com.bamtechmedia.dominguez.player.ui.experiences.legacy.v1.TvPlaybackActivity}', status=NORMAL, monitor=false, inputPublisherBlocked=false
OutboundQueue: <empty>
WaitQueue: <empty>
8: channelName='df982de com.vewd.core.tvapp/com.vewd.core.tvapp.TvActivity (server)', windowName='Window{df982de u0 com.vewd.core.tvapp/com.vewd.core.tvapp.TvActivity}', status=NORMAL, monitor=false, inputPublisherBlocked=false
OutboundQueue: <empty>
WaitQueue: <empty>
AppSwitch: not pending
Configuration:
KeyRepeatDelay: 50.0ms
KeyRepeatTimeout: 500.0ms
hdmi_input: null
device_class: tv
friendly_name: Fire TV 192.168.0.158
supported_features: 22961
Additional Comments (optional)
The event0
and Strong (stronger)
modes were the only ones mapped correctly for the live/guide button.
Strong wasn't actually any slower in most cases (was occasionally).
@j-m - Thanks for filling this out!
Can you explain what happens when you press these buttons?
- SUBT
- TXT
Also, could I trouble you to open a new app shortcut request for Freeview Play? That will be super helpful as well.
Thanks in advance!
That remote isn't our exact one so to avoid any confusion here it is
SUBT shows a dialogue to change subtitle and audio languages, i.e. Off / English
TXT is actually LIVE on ours, it's akin to the typical "more info" buttons you get on older remotes. (This one displays the full text description of the current show as per, but also shows a mini guide of the current and neighbouring channels, we sometimes need to press it twice to show even more info like Signal strength and settings etc)
If things go smoothly for me in the next few hours tonight and some time tomorrow morning, I might have something for you to play around with very soon.
YOUR TURN! ๐
I have just published beta version v3.2.2b1 for you to download and test.
Testing checklist:
- ALL of the buttons in default compatibility mode
- ALL of the buttons in STRONG compatibility mode
- Confirmation on if the Freeview Play button works or not
Please provide:
- A list of buttons that did nothing at at all
- A list of buttons that didn't do what was expected (describe what happened, and what should have happened)
- A list of buttons that you were unable to test for one reason or another (maybe the color buttons?)
- Any other detail, no matter how small
Something to note
I could not figure out the LIVE button, so I need to send you some instructions that will hopefully help me gather the info I need for that... but not right now. My eyes hurt. I'm going to go relax for a while.
I couldn't test the yellow/blue buttons because I've no idea where they're used, but red and green worked fine so I guess we can assume they're good too.
Unfortunately the FPlay button doesn't work, a minute or so after pressing it an error pops up saying something like "Unable to open application".
And, as you suspected, the Live button misbehaves (I think it's currently putting the TV to sleep? ๐คฃ).
Everything else works! (In both modes). So, on the whole pretty good going, thank you!
Hooray! We're so close!
I added a comment to the [New App Shortcut]: Freeview Play issue to hopefully help us solve the Freeview Play launcher button thing.
For the rest, here is what I need you to do so we can work out the LIVE button:
- Click on Developer Tools
- Open the SERVICES tab
- Select Android Debug Bridge Learn sendevent from the Service dropdown
- Select your JVC TV entity
- Click on CALL SERVICE
- You have 5 SECONDS to press the LIVE button on your physical remote. Press it once, and nothing else.
- When the listening event has concluded, you will see that the CALL SERVICE button has turned into a green box with a checkmark in it. Also, a new Notification has appeared. Click on Notifications
- Copy the text that appears, and paste it into this thread.
Given this example, my reply would look like this:
Output from service 'learn_sendevent' from media_player.fire_tv_192_168_107_88: 'sendevent /dev/input/event5 4 4 786665 && sendevent /dev/input/event5 1 115 1 && sendevent /dev/input/event5 0 0 0 && sendevent /dev/input/event5 4 4 786665 && sendevent /dev/input/event5 1 115 0 && sendevent /dev/input/event5 0 0 0'
And now, just for fun.... (and to cover our bases) can you repeat this process but press the Freeview Play button instead?
Hopefully that will be enough info. We shall see.
Awesome!
Here's the event for Live:
Output from service 'learn_sendevent' from media_player.fire_tv_192_168_0_158: 'sendevent /dev/input/event4 4 4 786877 && sendevent /dev/input/event4 1 358 1 && sendevent /dev/input/event4 0 0 0 && sendevent /dev/input/event4 4 4 786877 && sendevent /dev/input/event4 1 358 0 && sendevent /dev/input/event4 0 0 0'
And for FPlay
Output from service 'learn_sendevent' from media_player.fire_tv_192_168_0_158: 'sendevent /dev/input/event4 1 747 1 && sendevent /dev/input/event4 0 0 0 && sendevent /dev/input/event4 1 747 0 && sendevent /dev/input/event4 0 0 0'
Ready to test again?
Firemote beta version v.3.2.2b2 hopefully has a fix for the LIVE button, and maybe event the Freeview Play button. Give 'em a run, and let me know what you see.
Thanks for your help!
Woah you did that quickly!
No luck unfortunately.
The "Live" button now shows a dialogue saying something like "To use Alexa, pair your TV remote", and the FPlay button does nothing at all.
I suspect it's misbehaving because FPlay is a core app and can't be removed, so may be a bit different, and I could be wrong but I think the TV uses FPlay to fetch the guide, so it's a bit unique.
Don't stress it, I'm happy to call what you've already done a win!
Hey! No! Don't let me off that easy! ๐
I just published beta version v.3.2.2b3 which takes another crack at the LIVE button and the Freeview Play button. Please download, give the buttons a test, and let me know what happens.
Also, please note the following: If NOTHING happens when pressing both either of these buttons, please find your physical remote and press any button on that first, then try your Firemote again. It's this dumb little quirk of Amazon Fire devices (more info about that here and here)
๐คฃ๐คฃ Well, you're determined I'll give you that!
And it pays off! The FPlay button is now working ๐
Had to do the physical trick you mentioned but all good!
Unfortunately Live is still misbehaving, but this time it just does... nothing?
Well... it helps when I don't do a dumb thing. LOL! Hopefully I have fixed the dumb thing, and beta 4 is the magic fix.
Another test, please?
download beta version v.3.2.2b4
All working!!! ๐๐๐๐๐
Thanks for all your help! :)
HOORAY!!!!! That's awesome!
I'll push this out in the next release, which hopefully will be today (before 1am your time)
Official Firemote version v3.2.2 has been published!
Thank you for all of your help and patience working with me on this one! I sincerely appreciate it!
Nonono you did all the hard work! Thank you for being awesome :))