code radios

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:
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?
}
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?
}