code radios

Questions de programmation / Offset FSUIPC et IOCP

code radios

Messagede FiX » Mer 7 Nov 2012 18:49

J'ai pas mal galéré à piocher dans 4 codes différents de radios pas forcément adapaté pour mes radios (je n'utilise qu'un seul encodeur et pas de digit) mais j'ai pu obtenir un code qui fonctionne pour les radios.
Tout le boulot a été d'épurer les codes que j'avais en stock (y'a du bob, du kelt, du worldhugo, du lekseecon...) pour virer les parties concernant les afficheurs et adapter à mon simple encodeur avec switch.

Ca donne ceci:


Code: Tout sélectionner
// *****************************************************************************
// * Config_SIOC ver 4.00   -     By Manuel Velez    -    www.opencockpits.com
// *****************************************************************************
// * FileName : radios.txt
// * Date : 07/11/2012



Var 0600, name fs_sby_com1, Link FSUIPC_INOUT, Offset $311A, Length 2     // frequence standby com1

Var 0601, name cts_com1, Link IOCARD_ENCODER, Input 57, Aceleration 2, Type 2     // encodeur com1
{
  IF &sw_com1 = 0     // réglage des entiers
  {
    L0 = &cts_com1 * -1     // inversion sens de rotation de l'encodeur
    &calc_ent_com1 = ROTATE 18 ,36 ,L0
  }
  ELSE     // réglage des décimales
  {
    L0 = &cts_com1 * -1     // inversion sens de rotation de l'encodeur
    &calc_dec_com1 = ROTATE 0 ,99 ,L0
  }
  CALL &sb_reg_com1
}

Var 0602, name sw_com1, Link IOCARD_SW, Input 39     // switch de l'encodeur com1

Var 0603, name calc_ent_com1

Var 0604, name calc_dec_com1

Var 0605, name sb_reg_com1, Link SUBRUTINE
{
  L0 = &calc_ent_com1 * 100
  L1 = L0 + &calc_dec_com1
  &fs_sby_com1 = TOBCD L1
}

Var 0610, name fs_sby_com2, Link FSUIPC_INOUT, Offset $311C, Length 2     // frequence standby com2

Var 0611, name cts_com2, Link IOCARD_ENCODER, Input 59, Aceleration 2, Type 2     // encodeur com2
{
  IF &sw_com2 = 0     // réglage des entiers
  {
    L0 = &cts_com2 * -1     // inversion sens de rotation de l'encodeur
    &calc_ent_com2 = ROTATE 18 ,36 ,L0
  }
  ELSE     // réglage des décimales
  {
    L0 = &cts_com2 * -1     // inversion sens de rotation de l'encodeur
    &calc_dec_com2 = ROTATE 0 ,99 ,L0
  }
  CALL &sb_reg_com2
}

Var 0612, name sw_com2, Link IOCARD_SW, Input 43     // switch de l'encodeur com2

Var 0613, name calc_ent_com2

Var 0614, name calc_dec_com2

Var 0615, name sb_reg_com2, Link SUBRUTINE
{
  L0 = &calc_ent_com2 * 100
  L1 = L0 + &calc_dec_com2
  &fs_sby_com2 = TOBCD L1
}

Var 0620, name fs_sby_nav1, Link FSUIPC_INOUT, Offset $311E, Length 2     // frequence standby nav1

Var 0621, name cts_nav1, Link IOCARD_ENCODER, Input 55, Aceleration 2, Type 2     // encodeur nav1
{
  IF &sw_nav1 = 0     // réglage des entiers
  {
    L0 = &cts_nav1 * -1     // inversion sens de rotation de l'encodeur
    &calc_ent_nav1 = ROTATE 8 ,17 ,L0
  }
  ELSE     // réglage des décimales
  {
    L0 = &cts_nav1 * -1     // inversion sens de rotation de l'encodeur
    &calc_dec_nav1 = ROTATE 0 ,99 ,L0
  }
  CALL &sb_reg_nav1
}

Var 0622, name sw_nav1, Link IOCARD_SW, Input 44     // switch de l'encodeur nav1

Var 0623, name calc_ent_nav1

Var 0624, name calc_dec_nav1

Var 0625, name sb_reg_nav1, Link SUBRUTINE
{
  L0 = &calc_ent_nav1 * 100
  L1 = L0 + &calc_dec_nav1
  &fs_sby_nav1 = TOBCD L1
}

Var 0630, name fs_sby_nav2, Link FSUIPC_INOUT, Offset $3120, Length 2     // frequence standby nav2

Var 0631, name cts_nav2, Link IOCARD_ENCODER, Input 61, Aceleration 2, Type 2     // encodeur nav2
{
  IF &sw_nav1 = 0     // réglage des entiers
  {
    L0 = &cts_nav2 * -1     // inversion sens de rotation de l'encodeur
    &calc_ent_nav2 = ROTATE 8 ,17 ,L0
  }
  ELSE     // réglage des décimales
  {
    L0 = &cts_nav2 * -1     // inversion sens de rotation de l'encodeur
    &calc_dec_nav2 = ROTATE 0 ,99 ,L0
  }
  CALL &sb_reg_nav2
}

Var 0632, name sw_nav2, Link IOCARD_SW, Input 40     // switch de l'encodeur nav2

Var 0633, name calc_ent_nav2

Var 0634, name calc_dec_nav2

Var 0635, name sb_reg_nav2, Link SUBRUTINE
{
  L0 = &calc_ent_nav2 * 100
  L1 = L0 + &calc_dec_nav2
  &fs_sby_nav2 = TOBCD L1
}


J'y ai passé une partie de la nuit et je ne sais pas par quel miracle ça fonctionne, parce que c'est la première fois que je me retrouve avec un code que je ne comprends pas. Et ça, ça m'embête beaucoup.
Surtout qu'il il y a quand même un petit défaut: si l'on a une fréquence, par exemple: 124.35 et que l'on touche aux centaines (pour la première fois), ça va remettre les décimales à 0, on devra donc les re-régler.
Bon, c'est pas catastrophique et vu le temps que j'ai passé là dessus, je ne me vois pas y retoucher pour l'instant.
Par contre j'aimerais bien le comprendre, parce que là le gros problème c'est que je butte complètement sur l'ADF. Je suis largué de chez largué, j'ai bidouillé avec les codes que j'avais, mais ils sont hyper compliqués (à cause des digits notamment) et je n'arrive pas du tout à les transformer.
Pour ça, il faudra que je comprenne déjà ceux des radios.

Prenons l'exemple de la com1:


Var 0600, name fs_sby_com1, Link FSUIPC_INOUT, Offset $311A, Length 2 // frequence dans FS standby com1

Var 0601, name cts_com1, Link IOCARD_ENCODER, Input 57, Aceleration 2, Type 2 // encodeur com1
{
IF &sw_com1 = 0 // réglage des entiers
{
L0 = &cts_com1 * -1 // inversion sens de rotation de l'encodeur
&calc_ent_com1 = ROTATE 18 ,36 ,L0 // quel calcul amène à déterminer ces limites 18 et 36 ?
}
ELSE // réglage des décimales
{
L0 = &cts_com1 * -1 // inversion sens de rotation de l'encodeur
&calc_dec_com1 = ROTATE 0 ,99 ,L0 // idem
}
CALL &sb_reg_com1 // je ne vois pas trop pourquoi on a besoin de rappeler la subroutine ici
}

Var 0602, name sw_com1, Link IOCARD_SW, Input 39 // switch de l'encodeur com1

Var 0603, name calc_ent_com1

Var 0604, name calc_dec_com1

Var 0605, name sb_reg_com1, Link SUBRUTINE // alors là je suis largué, je ne comprends pas du tout cette routine
{
L0 = &calc_ent_com1 * 100
L1 = L0 + &calc_dec_com1
&fs_sby_com1 = TOBCD L1 // ça c'est sensé convertir l'offset stand-by com1 de FS en format bcd, alors que ces offset sont déjà en format bcd! Alors pourquoi TOBCD et pas FROMBCD?
}
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 remont » Mer 7 Nov 2012 19:44

Allez je tente une explication :

Les valeurs rotates :

Une fréquence ça va de 118.00 à 136.990

Donc tu expliques le rotate 18 à 36 puisque la valeur entière sera ta valeur Rotate +100
Pour les décimales, tu va de 00 à 99 et là tu fait ta valeur rotate *10

Bon ensuite dans SIOC, il faut calculer ta valeur de com. C'est là qu'arrive la subrutine que tu ne comprends pas, qui assemble les valeurs entières et décimales pour obtenir un résultat genre 2280 pour une fréquence 122.800. En fait le "1" de ta fréquece est assumé par FS et n'est donc pas a calculer.

Donc la valeur entière *100 + la valeur décimale : 22*100 = 2200 et puis 2200+80 = 2280 pour la fréquence à envoyer vers FS après conversion vers un format BCD car FS attends une valeur BCD.

Voilà.

J'ai juste ?
Avatar de l’utilisateur
remont
 
Messages: 405
Inscription: 3/02/10
Localisation: France 95

Re: code radios

Messagede stevelep » Mer 7 Nov 2012 21:08

J'ai juste ?


C'est limpide applaublanc

ça c'est sensé convertir l'offset stand-by com1 de FS en format bcd, alors que ces offset sont déjà en format bcd! Alors pourquoi TOBCD et pas FROMBCD?


L'offset n'est pas en BCD mais en décimal car le SIOC ne peux pas gérer le format BCD, il peux juste le convertir.
Ici on commande les radios en mode "maître" c'est à dire qu'on force l'envoi des fréquences
c'est pourquoi on ne fait que du TOBCD.

C'est très bien expliqué par Renaud, on construit la fréquence avec les différentes variables centaine, entiers, décimales
et on assemble le tout, on convertit en BCD et on envoie ...

Surtout qu'il il y a quand même un petit défaut: si l'on a une fréquence, par exemple: 124.35 et que l'on touche aux centaines (pour la première fois), ça va remettre les décimales à 0, on devra donc les re-régler.


Bein justement dans ce mode maître, il faut aussi forcer la fréquence de départ, sinon FS aura sa fréquence
du vol par défaut et au premier mouvement de l'encodeur, le SIOC va envoyer la sienne avec .00
Donc il faut utiliser la variable INIT 0000

genre:

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

Re: code radios

Messagede Boutondair » Mer 7 Nov 2012 21:59

merci affiche pour ce superbe cours applaublanc chouettedoights

David cligneoeil grandsoleil
Image Image
Petit je rêvais que je volerais, maintenant grâce au virtuel je vole !!!!!
Avatar de l’utilisateur
Boutondair
Administrateur du site
 
Messages: 4174
Inscription: 20/04/09
Localisation: Ballans (17) proche de Cognac

Re: code radios

Messagede FiX » Mer 7 Nov 2012 22:12

OK, ok, merci, j'y vois déjà un peu plus clair.
Déjà de savoir que FS veut du BCD et que les offset sont en décimal, c'est plus pratique...
Ce qui m'a planté c'est de lire dans le doc pour l'offset des fréquence "com frequency in bcd format".
Bon, je vais me remettre à mon ADF alors et voir si on peut construire la fréquence... (j'ai déjà passé 6 heures d'affilé dessus, ça commence à être usant!)

Pour l'histoire de forcer la fréquence par défaut, là je pige pas.
On force une fréquence dans la variable init, ok, mais ça c'est juste pour le lancement d'FS, ensuite une fois que l'on a déjà trifouillé aux radios, en quoi ça éviterait de remettre les décimales à 0?
Parce que ça ne le fait pas qu'au démarrage ça, ça le fait dès que l'on swap la fréquence et qu'elle n'est plus active.
Et je ne vois pas trop ce que la variable d'initialisation viendrait faire là dedans. gratgrat
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 » Mer 7 Nov 2012 22:27

Je viens de regarder ton code.

Tu t'occupes seulement de règler la freq stand-by, tu t'occupes pas du swap ...
Tu peux pas laisser FS faire le swap tout seul
Explication:

départ:
ACTIVE FS 120.25
STB FS 123.45
STB SIOC 123.45

tu mets STB 130.10 tu l'envoie à FS STB FS = STB SIOC

ACTIVE FS 120.25
STB FS 130.10
STB SIOC 130.10

Tu swap par FS

ACTIVE FS 130.10
STB FS 120.25
STB SIOC 130.10

Tu vois que ta valeur de fréquence SIOC ne correspond plus à celle de FS pour le Stand-By
car la fréquence SIOC, tu la crées toi même, elle n'est pas modifiée par FS ...

En résumé, il faut que tu fasse le swap de fréquence toi même en utilisant une variable de stockage intermédiaire

STOCK = ACTIVE
ACTIVE = STB
STB = STOCK

Voila peurefrayé c'est pas facile à expliquer mais c'est assez facile à faire

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 » Mer 7 Nov 2012 22:36

Aie, aie, aie, oui c'est très clair... et très très moche!!! peurefrayé peurefrayé
C'était super pratique de laisser FS faire le swap, surtout que mes boutons de swap ne sont même pas sur la master, ils sont câblés sur ma bodnar et assignés via FSUIPC.
Bon sang faut que je refasse le câblage et que je me retape tout le code!!! murrouge
Euh...bon, comment dire, on va faire avec ça pendant quelques temps, parce que là, j'ai déjà l'ADF qui me tue, je suis encore parti pour la nuit, je verrais pour refaire mon code de radios plus tard (de toute façon j'en ai déjà pour des heures pour modifier mon câblage).
Pfffffiou, quelle galère, mais quelle galère! etonneyeux
Dernière édition par FiX le Jeu 8 Nov 2012 00:37, é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 stevelep » Mer 7 Nov 2012 22:44

Pas besoin de recabler !!! tu peux avec FSUIPC assigner ton BUTTON à
un offset inutilisé de FSUIPC et le lire dans le SIOC.

Mais le code de swap c'est une variable et 3 lignes ...


Var 0600, name fs_sby_com1, Link FSUIPC_INOUT, Offset $311A, Length 2 // frequence dans FS standby com1
Var 0601, name fs_act_com1, Link FSUIPC_INOUT, Offset $xxxx, Length 2 // frequence dans FS active com1
Var 0602, name freqtemp // fréquence temporaire

Var 0602, name sw_swapcom1, Link IOCARD_SW, Input xx // switch de swap
{
IF &sw_swapcom1 = 0
{
&freqtemp = &fs_act_com1
&fs_act_com1 = fs_sby_com1
fs_sby_com1= &freqtemp
}
}
Avatar de l’utilisateur
stevelep
Administrateur du site
 
Messages: 2075
Inscription: 27/03/09
Localisation: LSGN Neuchâtel, Suisse

Re: code radios

Messagede algue14 » Mer 7 Nov 2012 23:34

Va finir par regretter Gauge Composer notre Fix ecroulerire ecroulerire

Bon je rigole mais j'ai pas encore tapé dans le sioc moi blemeblanc
A+

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

Re: code radios

Messagede FiX » Mer 7 Nov 2012 23:57

J'ai surtout hâte de retourner à mes pistolets à peinture...

Plus sérieusement je pense surtout aux "premiers", à ceux qui n'avaient pas un Bob sur le forum pour répondre à toutes les questions SIOC et les sortir du pétrin, ceux-là ont vraiment du mérite (et ont dû y laisser tout le cuir chevelu!!)

Allez,petite pause et retour à mon ADF avant de voir ce que je peux faire pour les swap...
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

Suivante

Retourner vers Programmation Sioc





Qui est en ligne

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

cron