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
--action | Une action, dans la liste ci-dessous. |
--repeat | L'action autant de fois, 50 au plus. |
--tab, --page | L'onglet de ce nom, et sa page, à partir de 1. |
--tab-number | L'onglet à cette place sur la tablette, à partir de 1, avec --page au choix. |
--profile | Le profil de ce nom, ou de cet identifiant. |
--brightness | La luminosité de la tablette, en pour cent. |
Les actions :
toggle, show, hide | Afficher ou masquer la tablette, l'afficher, la masquer. |
mouse, keyboard | La souris au jeu ou à la tablette, le clavier à la tablette ou au jeu. |
next-page, previous-page | Page suivante, page précédente. |
next-tab, previous-tab | Onglet suivant, onglet précédent. |
next-profile, previous-profile | Profil suivant, profil précédent. |
zoom-in, zoom-out | Zoom avant, zoom arrière. |
rotate-tab | Tourner l'onglet d'un quart. |
toggle-bookmark, next-bookmark, previous-bookmark | Marquer la page ou retirer son signet, signet suivant, signet précédent. |
toggle-pin | Épingler la page ou la détacher. |
brighter, darker | Plus lumineux, plus sombre. |
tint, tint-on, tint-off | La 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 :
ready | La 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.