Problème de configuration SIOC et Offsets pour FMC PMDG

Bonjour,
J'ai laissé un message dans la rubrique Cartes et modules Opencockpits => Modules entiers pour un problème de configuration SIOC concernant le fonctionnement du FMC Opencockpits v2 avec PMDG 737 NGX. Ce n'était peut-être pas le bon endroit.
Comme expliqué dans ce précédent message, je n'y connais pas grand chose en programmation. Mais je ne demande qu'à apprendre !!! Avant de vous laissez mes messages j'ai parcouru différents forums, téléchargé de nombreux tutoriels. Mais je ne trouve pas de réelles solutions.
Je vous résume donc mon problème :
J'ai une machine équipée de Windows 7 64bits, Prepar3D 1.4 + SDK (je ne pense pas que mon problème vienne de là car il est très compatible avec FSX), PMDG 737NGX Sp1c (donc avec le SDK), FSUIPC 4.853 (enregistré). D'autre part j'ai un FMC Openckpits acheté il y a un peu plus d'un an (qui n'a pas encore servi). Ce FMC est connecté à un port USB sur ma machine. L'affichage lui, fonctionne sans problème. Je récupère la vue FMC Left, j'enlève le boitier autour grâce à une commande adéquate dans le Panel.cfg du 737 puis je fais glisser cette vue sur l'écran du FMC, ça marche nickel.
Là où ça se complique pour moi, c'est le fonctionnement du clavier qui, quoi que je fasse, ne commande rien sur le FMC du 737.
J'ai SIOC 4.2ß2, j'ai également récupéré le driver de Roar Kristensen développé pour le FMC v3 d'Opencockpits, mais qui de toute évidence ne fonctionne pas avec la version v2. J'ai également IOCPserver 2.4 qui est chargé dans le répertoire modules de P3D avec une exécution lancée par le biais du fichier dll.xml. Dans IOCP Console, je vois bien l'action sur les touches et la variable &k qui change de valeur.
Mon sioc.ssi ressemble à ça :
// *****************************************************************************
// * Config_SIOC ver 4.2 - By Manuel Velez - http://www.opencockpits.com
// *****************************************************************************
// * FileName : cdu.txt
// * Date : 18/10/2012
Var 0000, Value 0
Var 0001, name k, Link FSUIPC_INOUT, Offset $5428, Length 1 // CDU Functions
Var 0002, name leds, Link FSUIPC_INOUT, Offset $6E7F, Length 1 // CDU messages leds
{
&ledexec = TESTBIT &leds ,1
&ledmsg = TESTBIT &leds ,2
}
Var 0003, name ledexec, Link IOCARD_OUT, Output 10
Var 0004, name ledmsg, Link IOCARD_OUT, Output 11
Var 0005, name ledfail, Link IOCARD_OUT, Output 12
Var 0006, name ledofst, Link IOCARD_OUT, Output 13
Var 0007, name leddspy, Link IOCARD_OUT, Output 14
Var 0008, name key, Link USB_KEYS
{
IF &key = 71 // menu
{
&k = 60
}
IF &key = 79 // Init Ref
{
&k = 55
}
IF &key = 78 // rte
{
&k = 56
}
IF &key = 75 // des
{
&k = 59
}
IF &key = 70 // legs
{
&k = 61
}
IF &key = 67 // prog
{
&k = 64
}
IF &key = 63 // n1 limit
{
&k = 65
}
IF &key = 62 // fix
{
&k = 66
}
IF &key = 77 // clb
{
&k = 57
}
IF &key = 76 // crz
Je ne le vous mets pas en entier mais l'appui sur l'ensemble des touches est traité dans le fichier.
Mais questions sont les suivantes :
1 - Ai-je besoin de IOCPserver dans le dossier module ainsi que les lignes correspondantes dans le fichier dll.xml ?
2 - J'ai parcouru le fichier FSUIPC Offsets status de Peter Dawson et l'offset $5428 est référencé comme réservé. Est-ce le bon offset ? Sinon comment le trouver ?
3 - Les différentes valeurs de la variable &k sont issues d'un fichier récupéré sur Internet. Mais je ne crois pas que ça correspond au valeur attendu par le 737NGX de PMDG. Dans le fichier PMDG_NGX_SDK.h du SDK du 737, j'ai des valeurs telles que ci-dessous :
// CDU
#define EVT_CDU_L_L1 (THIRD_PARTY_EVENT_ID_MIN + 534)
#define EVT_CDU_L_L2 (THIRD_PARTY_EVENT_ID_MIN + 535)
#define EVT_CDU_L_L3 (THIRD_PARTY_EVENT_ID_MIN + 536)
#define EVT_CDU_L_L4 (THIRD_PARTY_EVENT_ID_MIN + 537)
#define EVT_CDU_L_L5 (THIRD_PARTY_EVENT_ID_MIN + 538)
#define EVT_CDU_L_L6 (THIRD_PARTY_EVENT_ID_MIN + 539)
#define EVT_CDU_L_R1 (THIRD_PARTY_EVENT_ID_MIN + 540)
#define EVT_CDU_L_R2 (THIRD_PARTY_EVENT_ID_MIN + 541)
#define EVT_CDU_L_R3 (THIRD_PARTY_EVENT_ID_MIN + 542)
#define EVT_CDU_L_R4 (THIRD_PARTY_EVENT_ID_MIN + 543)
#define EVT_CDU_L_R5 (THIRD_PARTY_EVENT_ID_MIN + 544)
#define EVT_CDU_L_R6 (THIRD_PARTY_EVENT_ID_MIN + 545)
#define EVT_CDU_L_INIT_REF (THIRD_PARTY_EVENT_ID_MIN + 546)
#define EVT_CDU_L_RTE (THIRD_PARTY_EVENT_ID_MIN + 547)
#define EVT_CDU_L_CLB (THIRD_PARTY_EVENT_ID_MIN + 548)
#define EVT_CDU_L_CRZ (THIRD_PARTY_EVENT_ID_MIN + 549)
#define EVT_CDU_L_DES (THIRD_PARTY_EVENT_ID_MIN + 550)
#define EVT_CDU_L_MENU (THIRD_PARTY_EVENT_ID_MIN + 551)
#define EVT_CDU_L_LEGS (THIRD_PARTY_EVENT_ID_MIN + 552)
#define EVT_CDU_L_DEP_ARR (THIRD_PARTY_EVENT_ID_MIN + 553)
#define EVT_CDU_L_HOLD (THIRD_PARTY_EVENT_ID_MIN + 554)
#define EVT_CDU_L_PROG (THIRD_PARTY_EVENT_ID_MIN + 555)
#define EVT_CDU_L_EXEC (THIRD_PARTY_EVENT_ID_MIN + 556)
#define EVT_CDU_L_N1_LIMIT (THIRD_PARTY_EVENT_ID_MIN + 557)
#define EVT_CDU_L_FIX (THIRD_PARTY_EVENT_ID_MIN + 558)
#define EVT_CDU_L_PREV_PAGE (THIRD_PARTY_EVENT_ID_MIN + 559)
#define EVT_CDU_L_NEXT_PAGE (THIRD_PARTY_EVENT_ID_MIN + 560)
sachant que :
// Control Events
#ifndef THIRD_PARTY_EVENT_ID_MIN
#define THIRD_PARTY_EVENT_ID_MIN 0x00011000 // equals to 69632
#endif
J'en conclue que l'offset pour INIT REF par exemple est égal 69632+546=70178. Mais qu'est-ce-que je peux faire avec cet offset ??? Dois-je l'attribuer à la variable &k ? Si oui, dans quel format, décimal, hexa ou binaire ?
Je sais...que je ne sais rien !!! Aujourd'hui je suis dans le plus grand flou !!! Pour moi c'est comme un puzzle que je n'arrive pas à assembler. La solution ne doit pas forcément être compliquée mais faut-il la connaitre.
En tout cas merci de m'avoir lu et merci d'avance pour votre aide.
Gérard
J'ai laissé un message dans la rubrique Cartes et modules Opencockpits => Modules entiers pour un problème de configuration SIOC concernant le fonctionnement du FMC Opencockpits v2 avec PMDG 737 NGX. Ce n'était peut-être pas le bon endroit.
Comme expliqué dans ce précédent message, je n'y connais pas grand chose en programmation. Mais je ne demande qu'à apprendre !!! Avant de vous laissez mes messages j'ai parcouru différents forums, téléchargé de nombreux tutoriels. Mais je ne trouve pas de réelles solutions.
Je vous résume donc mon problème :
J'ai une machine équipée de Windows 7 64bits, Prepar3D 1.4 + SDK (je ne pense pas que mon problème vienne de là car il est très compatible avec FSX), PMDG 737NGX Sp1c (donc avec le SDK), FSUIPC 4.853 (enregistré). D'autre part j'ai un FMC Openckpits acheté il y a un peu plus d'un an (qui n'a pas encore servi). Ce FMC est connecté à un port USB sur ma machine. L'affichage lui, fonctionne sans problème. Je récupère la vue FMC Left, j'enlève le boitier autour grâce à une commande adéquate dans le Panel.cfg du 737 puis je fais glisser cette vue sur l'écran du FMC, ça marche nickel.
Là où ça se complique pour moi, c'est le fonctionnement du clavier qui, quoi que je fasse, ne commande rien sur le FMC du 737.
J'ai SIOC 4.2ß2, j'ai également récupéré le driver de Roar Kristensen développé pour le FMC v3 d'Opencockpits, mais qui de toute évidence ne fonctionne pas avec la version v2. J'ai également IOCPserver 2.4 qui est chargé dans le répertoire modules de P3D avec une exécution lancée par le biais du fichier dll.xml. Dans IOCP Console, je vois bien l'action sur les touches et la variable &k qui change de valeur.
Mon sioc.ssi ressemble à ça :
// *****************************************************************************
// * Config_SIOC ver 4.2 - By Manuel Velez - http://www.opencockpits.com
// *****************************************************************************
// * FileName : cdu.txt
// * Date : 18/10/2012
Var 0000, Value 0
Var 0001, name k, Link FSUIPC_INOUT, Offset $5428, Length 1 // CDU Functions
Var 0002, name leds, Link FSUIPC_INOUT, Offset $6E7F, Length 1 // CDU messages leds
{
&ledexec = TESTBIT &leds ,1
&ledmsg = TESTBIT &leds ,2
}
Var 0003, name ledexec, Link IOCARD_OUT, Output 10
Var 0004, name ledmsg, Link IOCARD_OUT, Output 11
Var 0005, name ledfail, Link IOCARD_OUT, Output 12
Var 0006, name ledofst, Link IOCARD_OUT, Output 13
Var 0007, name leddspy, Link IOCARD_OUT, Output 14
Var 0008, name key, Link USB_KEYS
{
IF &key = 71 // menu
{
&k = 60
}
IF &key = 79 // Init Ref
{
&k = 55
}
IF &key = 78 // rte
{
&k = 56
}
IF &key = 75 // des
{
&k = 59
}
IF &key = 70 // legs
{
&k = 61
}
IF &key = 67 // prog
{
&k = 64
}
IF &key = 63 // n1 limit
{
&k = 65
}
IF &key = 62 // fix
{
&k = 66
}
IF &key = 77 // clb
{
&k = 57
}
IF &key = 76 // crz
Je ne le vous mets pas en entier mais l'appui sur l'ensemble des touches est traité dans le fichier.
Mais questions sont les suivantes :
1 - Ai-je besoin de IOCPserver dans le dossier module ainsi que les lignes correspondantes dans le fichier dll.xml ?
2 - J'ai parcouru le fichier FSUIPC Offsets status de Peter Dawson et l'offset $5428 est référencé comme réservé. Est-ce le bon offset ? Sinon comment le trouver ?
3 - Les différentes valeurs de la variable &k sont issues d'un fichier récupéré sur Internet. Mais je ne crois pas que ça correspond au valeur attendu par le 737NGX de PMDG. Dans le fichier PMDG_NGX_SDK.h du SDK du 737, j'ai des valeurs telles que ci-dessous :
// CDU
#define EVT_CDU_L_L1 (THIRD_PARTY_EVENT_ID_MIN + 534)
#define EVT_CDU_L_L2 (THIRD_PARTY_EVENT_ID_MIN + 535)
#define EVT_CDU_L_L3 (THIRD_PARTY_EVENT_ID_MIN + 536)
#define EVT_CDU_L_L4 (THIRD_PARTY_EVENT_ID_MIN + 537)
#define EVT_CDU_L_L5 (THIRD_PARTY_EVENT_ID_MIN + 538)
#define EVT_CDU_L_L6 (THIRD_PARTY_EVENT_ID_MIN + 539)
#define EVT_CDU_L_R1 (THIRD_PARTY_EVENT_ID_MIN + 540)
#define EVT_CDU_L_R2 (THIRD_PARTY_EVENT_ID_MIN + 541)
#define EVT_CDU_L_R3 (THIRD_PARTY_EVENT_ID_MIN + 542)
#define EVT_CDU_L_R4 (THIRD_PARTY_EVENT_ID_MIN + 543)
#define EVT_CDU_L_R5 (THIRD_PARTY_EVENT_ID_MIN + 544)
#define EVT_CDU_L_R6 (THIRD_PARTY_EVENT_ID_MIN + 545)
#define EVT_CDU_L_INIT_REF (THIRD_PARTY_EVENT_ID_MIN + 546)
#define EVT_CDU_L_RTE (THIRD_PARTY_EVENT_ID_MIN + 547)
#define EVT_CDU_L_CLB (THIRD_PARTY_EVENT_ID_MIN + 548)
#define EVT_CDU_L_CRZ (THIRD_PARTY_EVENT_ID_MIN + 549)
#define EVT_CDU_L_DES (THIRD_PARTY_EVENT_ID_MIN + 550)
#define EVT_CDU_L_MENU (THIRD_PARTY_EVENT_ID_MIN + 551)
#define EVT_CDU_L_LEGS (THIRD_PARTY_EVENT_ID_MIN + 552)
#define EVT_CDU_L_DEP_ARR (THIRD_PARTY_EVENT_ID_MIN + 553)
#define EVT_CDU_L_HOLD (THIRD_PARTY_EVENT_ID_MIN + 554)
#define EVT_CDU_L_PROG (THIRD_PARTY_EVENT_ID_MIN + 555)
#define EVT_CDU_L_EXEC (THIRD_PARTY_EVENT_ID_MIN + 556)
#define EVT_CDU_L_N1_LIMIT (THIRD_PARTY_EVENT_ID_MIN + 557)
#define EVT_CDU_L_FIX (THIRD_PARTY_EVENT_ID_MIN + 558)
#define EVT_CDU_L_PREV_PAGE (THIRD_PARTY_EVENT_ID_MIN + 559)
#define EVT_CDU_L_NEXT_PAGE (THIRD_PARTY_EVENT_ID_MIN + 560)
sachant que :
// Control Events
#ifndef THIRD_PARTY_EVENT_ID_MIN
#define THIRD_PARTY_EVENT_ID_MIN 0x00011000 // equals to 69632
#endif
J'en conclue que l'offset pour INIT REF par exemple est égal 69632+546=70178. Mais qu'est-ce-que je peux faire avec cet offset ??? Dois-je l'attribuer à la variable &k ? Si oui, dans quel format, décimal, hexa ou binaire ?
Je sais...que je ne sais rien !!! Aujourd'hui je suis dans le plus grand flou !!! Pour moi c'est comme un puzzle que je n'arrive pas à assembler. La solution ne doit pas forcément être compliquée mais faut-il la connaitre.
En tout cas merci de m'avoir lu et merci d'avance pour votre aide.
Gérard