code radios

Questions de programmation / Offset FSUIPC et IOCP

Re: code radios

Messagede GAILLARD » Jeu 8 Nov 2012 10:09

Oh non , ils ont juste mis 5 a 6 ans pour faire le simu et ce n'est pas encore terminé ? mon expérience perso
Pas simple quand on est dans les premiers ?
Le rêve n'a pas de limite
Avatar de l’utilisateur
GAILLARD
 
Messages: 1554
Inscription: 19/04/09
Localisation: sud Ile de France

Re: code radios

Messagede FiX » Jeu 8 Nov 2012 14:01

Encore une bonne partie de la nuit sur mon ADF, j'en peux plus là... zzzzzzzz

Y'a quand un truc super vicieux dans la "construction" de la fréquence.
D'après ce que j'ai compris,deux offset peuvent avoir une influence l'un sur l'autre.
Pour l'ADF on a le $034C qui gère les centaines, dizaines et unités, et le $0356 qui gère les milliers et les décimales.
Sauf que l'un modifie l'autre.
Mais ça c'est à se flinguer, quand on se prépare les dizaines et les centaines d'un côté, et que l'on touche ensuite à l'offset des milliers, ça nous démonte ce que l'on a fait avant dans les centaines. peurefrayé

Et puis alors un autre truc qui me bloque: je fais tourner un encodeur entre 19 et 75, ces valeurs sont ensuite multipliées par 10 (donc 190 à 750), transformées en BCD et envoyées à l'offset $034C.
Je vois dans la console que mon offset prend donc la valeur 400 à 1872 (conversion de 19 à 75 en BCD)
Donc ça me fait tourner ma fréquence ADF entre 190 et 750, et ça, de 10 en 10. Jusque là tout va bien.
Maintenant si je veux faire tourner les unités entre 1 et 9, et ça de 1 en 1, je fais le même principe, mais je ne multitplie pas par 10 et je demande à l'encodeur d'envoyer 1 à 9.
Je transforme en BCD et j'envois à l'offset $034C. Mais là je vois dans la console que lorsque l'encodeur va de 1 à 9, mon offset prend les valeurs de 1 à 9 également. gratgrat Pourquoi je n'ai pas de conversion comme avec mes dizaines??
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: code radios

Messagede stevelep » Jeu 8 Nov 2012 15:55

Salut Fix,

Dans FS, il y a 2 moyens d'action sur les variables du simulateur:

- les offsets FSUIPC que tu peux lire et écrire.
- les EVENT, que tu peux envoyer à FS.

Il y a toute une liste d'évènements que l'on peux envoyer au simulateur un peu comme des boutons de joystick
ou des touches claviers.
Dans cette liste, il y a des commandes pour augmenter/diminuer les valeurs de la fréquence d'ADF
sans te préoccuper de cette valeur, si tu assigne à ton encodeur dans le SIOC, l'event qui
increase/decrease selon le sens, tu n'auras plus à te préoccuper de jongler entre les 2 offsets, les hi/low bit etc ...

Il faut aller dans les SDK de FSX et trouver la liste des EVENTS et leur N°

Ensuite avec IOCP, il est extrèment facile d'envoyer un EVENT
Regarde l'offset IOCP 3999 (FSSDK_EVENT_KEY dans IOCP offset explorer > IOCP server)

SI tu crée une variable SIOC liée à cette offset:

Var 0012, Name fs_event, Link IOCP, Offset 3999

imaginons que le increase ADF est l'event N° 1234 et que le decrease N° 1235
Sous ta viable encodeur tu mets que
si l'encodeur est >0 fs_event = 1234
si l'encodeur est <0 fs_event = 1235

Et quand tu bouges ton encodeur ADF à chaque click cela envoie un "increase/decrease frequency"

Je crois qu'il y a des event séparé pour les entiers et pour les décimal.
Plus besoin de lire la fréquence de convertir en BCD de joeur avec plusieurs offset
Ca reviens à assigner une touche-clavier à ton encodeur qui change la freq ADF.

Voila

BOB
Avatar de l’utilisateur
stevelep
Administrateur du site
 
Messages: 2075
Inscription: 27/03/09
Localisation: LSGN Neuchâtel, Suisse

Re: code radios

Messagede FiX » Jeu 8 Nov 2012 20:15

J'ai essayé ta solution IOCP, mais je n'y arrive toujours pas.

J'ai utilisé les eventkey 131 et 113 (decrease et increase adf 10kHz).
J'ai donc déclaré une variable IOCP 3999.
J'ai déclaré la variable de l'encodeur.
Si encodeur >0 , alors fs_event = 113
SI <0 , fs_event = 131

Le code fonctionne, quand je tourne l'encodeur, fs_event prend bien la valeur 113 ou 131 selon le sens dans lequel je tourne, mais ça n'envoit rien du tout à l'ADF.
J'ai testé un peu tous les autres eventkey, c'est pareil.
Y'a pas autre chose à déclarer? gratgrat


Surtout que dans l'offset explorer, pour l'offset 3999, on a ça:
"Any FS-SDK event key to send to FS. The parameter for this EVENT must be asigned FIRST via the FSSDK_EVENT_PARAM offset. When to IOCPServer arrives this offset IOCPServer execute the event indicated.
(FSSDK_EVENT_KEY = 10000)"

Et je ne sais pas ce que c'est que c'est histoire d'assigner d'abord le paramètre de cet evènement via le EVENT_PARAM. gratgrat

Et dans l' EVENT_PARAM, on a ça: "Any integer to use asociated to the event on next call of offset FSSDK_EVENT_KEY".
Et alors là je ne comprends pas du tout ce que ça veut dire.
Dernière édition par FiX le Jeu 8 Nov 2012 23:18, édité 1 fois.
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: code radios

Messagede algue14 » Jeu 8 Nov 2012 22:35

Y'a un truc plus simple

Tu branche ton encodeur sur ta carte bodnar,tu va dans FSUIPC" bouton and switchs" tu tourne dans un sens et tu choisis l'event FS,même chose dans l'autre sens ça doit marcher.
(sans oublier de paramétrer l'encodeur avec le petit soft de bodnar qui va bien)

Les events
1046 Adf1 use whole inc
1047 Adf1 use whole dec
1048 Adf1 use frac inc
1049 Adf1 use frac dec
1050 Adf2 use whole inc
1051 Adf2 use whole dec
1052 Adf2 use frac inc
1053 Adf2 use frac dec
A+

Alain
Avatar de l’utilisateur
algue14
 
Messages: 1626
Inscription: 20/04/09
Localisation: Caen ; Normandie

Re: code radios

Messagede FiX » Jeu 8 Nov 2012 23:12

Sur la bodnar, ça va pas le faire, non seulement j'ai plus de place, mais il faut quand même que je passe par le sioc, parce j'ai quand même les décimales à "coder" lorsque l'on pousse sur le switch de l'encodeur en même temps que l'on tourne.
Et puis déjà que je suis un peu vert de devoir lâchement abandonner la version "royale" SIOC/PSUIPC pour l'assignation en IOCP (enfin qui ne marche pas pour l'instant) parce que je suis pas foutu de faire le script avec les 2 offset de l'ADF... Alors si en plus je dois me contenter d'une assignation de touche avec la bodnar, là mon égo ne s'en remettra pas... sourirebis
C'est quand même dommage, parce que la version IOCP de Bob me plaisait bien, mais ça fait depuis tout à l'heure que je retourne ça dans tous les sens et pas moyen de modifier la fréquence.
Ca va faire 2 jours non stop, 7heures/jour que je suis sur la fréquence de mon ADF et ça ne marche toujours pas ce soir, ça me désespère. Je voulais terminer ces radios et me faire enfin un premier vol avec la nav ce soir avant de reprendre le boulot demain.
Je sens que je vais encore y passer la nuit... murrouge
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: code radios

Messagede FiX » Jeu 8 Nov 2012 23:54

Je viens de trouver pourquoi les events IOCP ne marchaient pas!
J'ai vu que le port IOCP du sioc.ini était 8090, alors que dans IOCP server il était à 8099!
Donc j'ai remis 8099 dans le sioc.ini et j'ai bien une action de l'encodeur sur l'adf!
C'est déjà un premier pas.

Maintenant j'ai un bête problème de code, lorsque je tourne mon encodeur, ça m'incrémente (ou décrémente selon le sens) mon ADF, mais une seule fois.
Quand "variable encodeur >0 , alors fs_event = 115", la variable fs_event va prendre la valeur 115, mais elle ne revient pas à 0, donc si on continue de tourner l'encodeur, il n'y a pas de "nouvel" envoi de la valeur 115.
Il faudrait que j'arrive à faire reprendre à la variable fs_event, la valeur "0" entre chaque impulsion de l'encodeur.
Et ça je n'y arrive pas.

Par contre avec un bouton poussoir pas de problème, je viens de tester avec le transpondeur (d'ailleurs ça va être super pratique pour faire mon transpondeur ces variables iocp!!), ça marche très bien faisant:
-if sw = 1, alors fs_event = 115
-else, fs-event =0
Là pas de soucis, je peux incrémenter à la suite en appuyant sur le bouton.

Mais comment renvoyer "0" à ma variable fs_event entre deux détentes de l'encodeur?
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

Re: code radios

Messagede stevelep » Ven 9 Nov 2012 00:51

Tu mets

fs_event = 115
fs_event = 0

Ca remet la variable directement à zéro

BOB

Si ca marche pas, tu mets un petit DELAY pour la remise a zéro

fs_event = 115
fs_event = DELAY 0 xxx
Avatar de l’utilisateur
stevelep
Administrateur du site
 
Messages: 2075
Inscription: 27/03/09
Localisation: LSGN Neuchâtel, Suisse

Re: code radios

Messagede stevelep » Ven 9 Nov 2012 01:08

Concernant ton ancien code pour l'ADF en SIOC.

Je crois que tu n'as pas bien compris le codage de l'ADF dans FS.

le $034C correspond à la valeur de la fréquence à 3 chiffres donc 000-999 codé en BCD

le $0356 n'est pas un offset de valeur mais un flag à 2 bit,
le 1er bit (droite) = 5 si la décimale est .5 et = 0 si décimale .0
le 2ème bit (gauche) = 1 si freq>999 =0 si freq<999

La décimale est soit .0 soit .5 donc tu devrais assigner une valeur de 0 ou 5 reinecouronne sur le 1er bit de l'offset
En utilisant ton switch en TYPE P et en faisant *5 pour alterner 0 et 5

Ensuite tu fait un ROTATE 0 1999 1 sur une variable SIOC non liée "valeur" par ex
si valeur >999
SETBIT 2ème bit offset $0356 (cela enclenche le flag millier)
L0= valeur - 1000 (cela te donne la valeur de fréquence à 3 chiffres)
fs_adf = TOBCD L0 (tu envoie à FS)

si valeur <999
CLEARBIT 2ème bit (pas de milliers)
fs_adf = TOBCD valeur (tu envoie directement la freq à 3 chiffres)

Cette subtilité ne tient pas au SIOC mais au codage (très compliqué) des variables dans FS ...

BOB
Avatar de l’utilisateur
stevelep
Administrateur du site
 
Messages: 2075
Inscription: 27/03/09
Localisation: LSGN Neuchâtel, Suisse

Re: code radios

Messagede FiX » Ven 9 Nov 2012 01:55

Bon, ça marche pour l'encodeur de l'ADF en mettant fs_event =0.
Mais malheureusement, je vais quand même être bon pour me repencher sur le code SIOC parce qu'avec ce système de variables IOCP, quand on fait varier les unités par exemple, on ne fait vraiment varier que les unités, si on incrémente les unités jusque 9, ça repasse à 0 et ça ne va pas incrémenter de 1 les dizaines.
Du coup il faudrait 5 entrées pour régler totalement la fréquence...
Donc pas possible avec mon "hardware".
Et ben ça va être encore de grandes aventures la semaine prochaine ça... (je vais potasser un peu tes explications d'ici là)

Bon sinon, à part ça, j'ai un autre soucis avec l'xpdr que je me suis amusé (façon de parler) à faire au passage, avec les variables IOCP, qui là, pour le coup, sont parfaites puisque j'ai 4 boutons poussoirs , un bouton par chiffre pour les 4 chiffres de la fréquence. Et je voulais justement que chaque bouton incrémente chaque chiffre (ce qui aurait été encore une belle prise de tête en SIOC/FSUIPC à mon avis...)
Donc je fais un code tout simple:
If sw=1
fs_event = xxx
fs_event=0

Et je répète ça à la suite pour les 4 boutons.
(cf mon code, à partir des variables 700)

Code: Tout sélectionner
Var 0642, name sw_cts_adf, Link IOCARD_SW, Input 29     // switch de l'encodeur d'ADF

Var 0645, name cts_adf, Link IOCARD_ENCODER, Input 30, Aceleration 1, Type 2     // encodeur de l'adf
{
  IF &cts_adf > 0
  {
    &fs_event = 114   
    &fs_event = 0   
  }
  ELSE
  {
    IF &cts_adf < 0
    {
      &fs_event = 132   
      &fs_event = 0   
    }
  }
}

Var 0646, name fs_event, Link IOCP, Offset 3999

Var 0700, name inc_xpdr_unit, Link IOCARD_SW, Device 1, Input 24     // incrément xpdr unité
{
  IF &inc_xpdr_unit = 1
  {
    &fs_event = 118   
    &fs_event = 0   
  }
}

Var 0701, name inc_xpdr_cent, Link IOCARD_SW, Device 1, Input 25     // incrément xpdr centaines
{
  IF &inc_xpdr_dis = 1
  {
    &fs_event = 117   
    &fs_event = 0   
  }
}

Var 0702, name inc_xpdr_dis, Link IOCARD_SW, Device 1, Input 27     // incrément xpdr dizaines
{
  IF &inc_xpdr_cent = 1
  {
    &fs_event = 116   
    &fs_event = 0   
  }
}

Var 0703, name inc_xpdr_mill, Link IOCARD_SW, Device 1, Input 32     // incrément xpdr milliers
{
  IF &inc_xpdr_mill = 1
  {
    &fs_event = 115   
    &fs_event = 0   
  }
}


Et là, truc très bizarre, ça ne fonctionne que pour 2 boutons sur les 4: pour le premier (700) et le dernier (703) codé.
Les 2 du milieu (701 et 702) n'envoient rien à la variable fs_event (vérifié dans la console), pourtant ils fonctionnent (les variables des boutons passent à 1) et j'ai aussi interverti les entrées et les variables IOCP pour voir, et ça reste toujours les 2 codes du "milieu" qui ne fonctionnent pas.
C'est donc purement un problème de code, mais pourquoi?? gratgrat
Dernière édition par FiX le Ven 9 Nov 2012 11:59, édité 1 fois.
i7 2600k/P8P67pro/16Go PC3 17000/RX 580/SSD 250 Go et 120Go/W10x64
https://www.facebook.com/cessna150.sim
Avatar de l’utilisateur
FiX
 
Messages: 4664
Inscription: 8/01/10
Localisation: Reims/Maubeuge

PrécédenteSuivante

Retourner vers Programmation Sioc





Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 36 invités