Kneedeck

Piloter Kneedeck

Pour Kneedeck 0.42.0 et suivants.

Kneedeck se pilote depuis un autre programme du PC : le Stream Deck, VoiceAttack, un script Python, Lua ou C. Les commandes passent par la ligne de commande, ou par des messages.

1. La ligne de commande

Un raccourci, le Stream Deck (action Système, Ouvrir) ou VoiceAttack (lancer une application) lance Kneedeck avec une commande. Kneedeck déjà lancé la fait sans s'ouvrir une deuxième fois.

kneedeck.exe --action next-page --repeat 3
kneedeck.exe --tab "Carte LFXX" --page 3
kneedeck.exe --tab-number 2
kneedeck.exe --profile "Mirage F1"
kneedeck.exe --brightness 60
--actionUne action, dans la liste ci-dessous.
--repeatL'action autant de fois, 50 au plus.
--tab, --pageL'onglet de ce nom, et sa page, à partir de 1.
--tab-numberL'onglet à cette place sur la tablette, à partir de 1, avec --page au choix.
--profileLe profil de ce nom, ou de cet identifiant.
--brightnessLa luminosité de la tablette, en pour cent.

Les actions :

toggle, show, hideAfficher ou masquer la tablette, l'afficher, la masquer.
mouse, keyboardLa souris au jeu ou à la tablette, le clavier à la tablette ou au jeu.
next-page, previous-pagePage suivante, page précédente.
next-tab, previous-tabOnglet suivant, onglet précédent.
next-profile, previous-profileProfil suivant, profil précédent.
zoom-in, zoom-outZoom avant, zoom arrière.
rotate-tabTourner l'onglet d'un quart.
toggle-bookmark, next-bookmark, previous-bookmarkMarquer la page ou retirer son signet, signet suivant, signet précédent.
toggle-pinÉpingler la page ou la détacher.
brighter, darkerPlus lumineux, plus sombre.
tint, tint-on, tint-offLa teinte de nuit : basculer, allumer, éteindre.

2. Les messages des programmes

Un programme du PC envoie à Kneedeck un texte JSON par UDP, à l'adresse 127.0.0.1, port 47831 : un objet, ou une liste d'objets faits dans leur ordre. Kneedeck n'écoute que les programmes de ce PC, et ne répond pas.

{"action": "next-page", "repeat": 3}Une action, autant de fois.
{"tab": "Carte LFXX", "page": 3}Un onglet par son nom, et sa page à partir de 1.
{"tabNumber": 2, "page": 1}Un onglet par sa place sur la tablette.
{"profile": "Mirage F1"}Un profil par son nom ou son identifiant.
{"brightness": 60}, {"brightness": "+10"}La luminosité en pour cent, ou plus ou moins quelques points.
{"module": "dupont.minuteur", "message": …}Un message pour un module, par son identifiant (voir la partie 3).

Python

import kneedeck

kneedeck.send({"tab": "Carte LFXX", "page": 3})
kneedeck.send([{"profile": "Mirage F1"}, {"action": "show"}])

kneedeck.py, à mettre à côté du script. Il se lance aussi seul : python kneedeck.py "{\"action\": \"toggle\"}".

Lua, pour DCS World

local kneedeck = dofile(lfs.writedir() .. "Scripts\\kneedeck.lua")

kneedeck.send('{"tab": "Carte LFXX", "page": 3}')

kneedeck.lua, à mettre dans Saved Games\DCS\Scripts. Il marche dans Export.lua comme dans un script de DCS, et dans tout Lua qui a LuaSocket.

C et C++

#include "kneedeck.h"

kneedeck_send("{\"tab\": \"Carte LFXX\", \"page\": 3}");

kneedeck.h, pour Windows, à lier avec ws2_32.

3. Les messages aux modules

Un module reçoit les messages qui lui sont adressés, s'il est dans un onglet de la tablette : ceux des programmes du PC, des pages web de la tablette et des autres modules.

Kneedeck.on("message", (message, de) => {
  // de : "pc", le site d'une page web, ou l'identifiant d'un autre module
});
Kneedeck.send("dupont.checklist", { coche: 3 });

Le reste est dans Écrire un module.

4. Les pages web

Une page web dans un onglet parle avec Kneedeck par postMessage, chaque message portant kneedeck: 1 et son type.

parent.postMessage({ kneedeck: 1, type: "ready" }, "*");
parent.postMessage({ kneedeck: 1, type: "pages", count: 5 }, "*");

addEventListener("message", (event) => {
  const message = event.data;
  if (event.source !== parent || message?.kneedeck !== 1) return;
  if (message.type === "hello" || message.type === "page") montrer(message.page);
});

Ce que la page envoie :

readyLa page est prête : Kneedeck répond hello.
pages (count)Elle a autant de pages, 1000 au plus : la tablette les tourne comme celles d'un PDF.
size (width, height)La taille pour laquelle elle est faite, en pixels : la tablette la montre en entier, réduite ou agrandie.
title (title)Son titre, que l'onglet prend si le joueur a choisi « Nom pris dans la page ».
message (to, message)Un message pour le module d'identifiant to.

Ce que Kneedeck envoie :

hello (games, page)Les données des jeux que le joueur donne à l'onglet, et la page à montrer, à partir de 0.
games (games)Les données des jeux, à chaque changement.
page (page)Le joueur a tourné la page.

Les données des jeux sont celles des modules, décrites dans Écrire un module. Une page gardée sur le PC (un onglet HTML) envoie et reçoit les mêmes messages, sans les données des jeux ni les messages aux modules.

Pour regarder une page de près : Réglages, Outils de développement, choisis la page puis « Ouvrir ». Elle s'ouvre dans ton navigateur, avec ses outils.