wDSPiy - commander le DSPiy par Wifi (et par Alexa et en MQTT)

Discutions générales sur le DSPiy et tout ce qui s'y rattache
Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3519
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: wDSPiy

Messagepar thierryvalk » lun. 5 déc. 2016 18:22

Voici un firmware qui pour code Sony va passer d'office les actions Multidspiy.


Non testé.

edit alka: suppprimé firmware remplacé par la version suivante

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: wDSPiy

Messagepar alka » lun. 5 déc. 2016 18:30

sur l'entrée IR ou TriggerIN ?
je teste des que possible :)
acheter un DSPiy ? c'est ici

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3519
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: wDSPiy

Messagepar thierryvalk » lun. 5 déc. 2016 18:38

Les deux.

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: wDSPiy

Messagepar alka » mar. 6 déc. 2016 20:33

testé sur quelques codes et semble ok. merci.
Le plus long a été la préparation car je n'avais rien pour Sony. Une fois mes bétises débuggées, le mix de codes adresse 0/adresse 29 fonctionne bien sur l'entrée IR. Pas testé sur entrée TriggerIn.

Prochaine étape : revoir mon code pour exploiter tout ça proprement et en profiter pour faire le ménage, harmoniser, modulariser... c'est que ça devient gros cette affaire ;)
acheter un DSPiy ? c'est ici

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: wDSPiy

Messagepar alka » dim. 11 déc. 2016 12:58

la suite...
Les parametres sont maintenant dans un fichier .txt stocké dans la partition données de la flash. Je peux mettre a jour par wifi en ftp. Super pratique d'éditer sur le pc et transférer. La prochaine étape est de stocker des parties statiques du serveur web (css, javascript, ...) de la meme manière pour faciliter le développement, test et mise a jour de la partie affichage web.

Pour la commande par IR en combinant des codes IR sony et codes multiDSPiy, je me heurte a deux éceuils.
Le premier est une anomalie me semble t il.
1. avec le nouveau firmware, tout se passe comme si les parametres NWAITCODE=1 et NLACTION=0 n'étaient pas pris en compte. Il me faut envoyer 3 fois un code IR "ON" pour le réveiller et 4 fois "unMute" pour sortir du mute. Pour SBY ou Mute un seul envoi suffit. Pour Vol+ et Vol- : le premier ordre passe de suite mais pas les suivants. Il finit par les accepter en gardant le bouton telecommande appuyé longtemps mais je n'ai pas encore réussi a comprendre sous quelles conditions. Les codes multidspiy eux sont pris en compte immédiatement mais... c'est le point 2.

2. quand il reçoit un code entrant multiDSPiy, le DSPiy n'emet pas en multiDSPiy sur IsoOut. Plus de feedback.
Ca peut se comprendre : quand il reçoit un ordre multidspiy , il est supposé etre slave et il n'est pas prévu qu'un esclave parle. J'imagine que ça ne facherait personne qu'un slave puisse aussi émettre en multidspiy ce qu'il reçoit en multidspiy. Spartacus ? ;)

Je réfléchis a des solutions.
acheter un DSPiy ? c'est ici

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3519
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: wDSPiy

Messagepar thierryvalk » dim. 11 déc. 2016 18:22

1. avec le nouveau firmware, tout se passe comme si les parametres NWAITCODE=1 et NLACTION=0 n'étaient pas pris en compte.

Il n'y a pas de raison.

2. Comme tu le dis, c'est logique.
Fâcherait personne mais complique le code car le Out devrait se faire pour chaque commande puis pas très logique vu que c'est de l'absolu, pourquoi renvoyer ce que l'on a reçu ?

Peut-être plus simple à mon niveau et plus pratique tout en étant plus logique, créer un code IR qui donnerait sur le Out l'état du DSPiy ?

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: wDSPiy

Messagepar alka » dim. 11 déc. 2016 20:58

thierryvalk a écrit :
1. avec le nouveau firmware, tout se passe comme si les parametres NWAITCODE=1 et NLACTION=0 n'étaient pas pris en compte.

Il n'y a pas de raison.
je ne vois pas de raison non plus et pourtant... y a quelquechose qui cloche et ça y ressemble bigrement. je ne sais pas trop comment valider que c'est bien ça.

2.
Peut-être plus simple à mon niveau et plus pratique tout en étant plus logique, créer un code IR qui donnerait sur le Out l'état du DSPiy ?

c'est une idée.
Par exemple, il reçoit un code IR sony (adresse 30, commande 127 ) et il enverrait sur IsoOout 4 trames successives :
Address 31, commande = encodage sur 1 bit de son état (ON ou SBY), et 1 bit pour Mute ou unMute,
Address 32, commande = encodage sur 7 bits du numéro de preset en cours (4 bits) et numéro de source (3 bits).
Address 32, commande = code volume de 0 à 110
Address 33, commande = code balance de 1 à 50
ou alors prévoir 4 codes de demande séparés (adr 30 - cmd 124, 125, 126, 127) et il ne répond qu'une trame, histoire de ne pas surcharger inutilement le traffic.


Pour l'instant, j'arrive a m'en sortir en bombardant de codes pour contrer 1.
Pour le 2, j'utilise au maximum les codes IR directs qui provoquent la réponse multiDSpiy et pour le reste, j'envoie "en aveugle". Si une commande a raté, ca finira par se resynchroniser au prochain multidspiy recu (si je touche un bouton par exemple). Pour l'instant faut dire que ca ne rate jamais donc le feedback est plutot une assurance.

ton idée me plait quand même car me permettrait de savoir Source et Preset auxquels je n'ai aucun accès.
acheter un DSPiy ? c'est ici

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3519
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: wDSPiy

Messagepar thierryvalk » dim. 11 déc. 2016 21:09

ou alors prévoir 4 codes de demande séparés (adr 30 - cmd 124, 125, 126, 127) et il ne répond qu'une trame, histoire de ne pas surcharger inutilement le traffic.

Je préfère car envoyer une trame n'est pas brocante mais plusieurs oui.

Et en I2C comme je l'avais proposé? Car tout ceci reste un peu du bricolage, une commande telco n'a rien avoir avec ce que tu fais.

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: wDSPiy

Messagepar alka » dim. 11 déc. 2016 21:25

thierryvalk a écrit :
ou alors prévoir 4 codes de demande séparés (adr 30 - cmd 124, 125, 126, 127) et il ne répond qu'une trame, histoire de ne pas surcharger inutilement le traffic.
Je préfère car envoyer une trame n'est pas brocante mais plusieurs oui.
tiens une nouvelle expression... ;)

Et en I2C comme je l'avais proposé? Car tout ceci reste un peu du bricolage, une commande telco n'a rien avoir avec ce que tu fais.
je sais bien mais c'est ce qui existe pour communiquer et finalement, ca marche bien vu la vitesse lente des interactions. Ca ressemble a une télécommande avec retour d'information. Passer à l' i2c devient intrusif, donc potentiellement risqué pour l'intégrité du dspiy si je fais une bétise. Et puis gros boulot de firmware coté DSPiy pour prévoir une interface de pilotage par I2C. Pour si peu d'usage, c'est trop de travail.
acheter un DSPiy ? c'est ici

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: wDSPiy

Messagepar alka » lun. 12 déc. 2016 01:00

tiens, je relisais le code de l'entrée IR du DSPiy publié plus haut. J'aurai du lire bien en détail la première fois, j'aurai gagné du temps :mrgreen:

Code : Tout sélectionner

if(D01_IR_CODE==1)if(IRcode==laction){laction=0xff;return 1;}//return si même action 2 fois de suite pour sony12bits
            laction=IRcode;

            if(nwaitcode){nwaitcode--; return 1;}

Cette particuliarité "doublon Sony" explique bien des choses !
En outre, pourquoi je n'arrivais plus a rien en envoyant deux fois de suite Vol+ ou Vol- pour sauter les volumes décimaux alors que ça marchait tres bien en Nec.

envoi successifs de monCode sony (D01_NWAITCODE est configuré à 1)
je suppose que hors de la fonction, nwaitcode est mis à 0 au départ. sinon nwait a la valeur mise précédemment.

1er envoi: accepté car monCode != laction et nwaitcode=0 ou refusé si nwaitcode avait été mis a 1 (SBY ou MUTE)
si accepté : nwait devient -1 reste a 0 ; laction devient monCode ; plus loin loin nwait est mis à 1 pour les codes mute, standby.
si refusé pour cause de doublon (toggle mute/unmute) nwaitcode reste inchangé à 1.
si refusé pour cause de nwait >0 (cas du ON), nwait décrémenté devient 0.

2eme : refusé car doublon sony. nwait inchangé et laction devient FF

3eme: accepté si nwait est =0 (cas du ON) soit refusé si nwait =1 (cas du MUTE). nwait décrémenté et devient 0.

4eme : refusé car doublon si accepté au coup d'avant ou accepté sinon.
Ensuite, un sur deux est accepté

explique ce que je trouvais empiriquement : faut envoyer 4 fois unmute apres un mute puisque c'est la meme touche bascule et que nwait est initialisé a 1 lors du MUTE
Explique aussi pourquoi 3x ON quand il est en sby puisque nwait est initialisé à 1 lors de la mise en SBY et ce n'est pas le meme code pour ON et SBY dans la configuration.

Une plaie ce "doublon sony". Ca doit bien perturber l'appui long sur Vol+/Vol-.
Peut etre essayer d'envoyer un code intermédiaire qui n'existe pas pour le tromper.

edit: correction dans la compréhension du déroulement du code
acheter un DSPiy ? c'est ici

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: wDSPiy

Messagepar alka » lun. 12 déc. 2016 01:09

cette gestion de doublon sony ne pourrait pas être liée a une config télécommande nommée Sonyx2 par exemple, afin de ne pas pénaliser ceux qui ont une télécommande normale qui n'envoie pas tout en double ?
acheter un DSPiy ? c'est ici

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: wDSPiy

Messagepar alka » lun. 12 déc. 2016 01:25

et pendant qu'on y est ce serait possible de rajouter une ligne :

Code : Tout sélectionner

static unsigned char laction;
//static unsigned char blaction;
static unsigned char nlaction;
static unsigned char nwaitcode;
unsigned char preset_actl;

            if(D01_IR_NWAITCODE==0) D01_IR_NWAITCODE = 3;   // pour la compatibilite avec le passe
            if(D01_IR_NWAITCODE==127) D01_IR_NWAITCODE = 0;  //  <---- ajout pour permettre nwaitcode = 0

IRnewcode=0;
//tempo repeat
acheter un DSPiy ? c'est ici

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3519
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: wDSPiy

Messagepar thierryvalk » lun. 12 déc. 2016 08:09

nwait devient -1. laction devient monCode.

Je doute qu''il devienne -1.

Il me semble que c'est bien dans le protocole Sony d'envoyer 2x la même commande, en théorie, on devrait les vérifier pour sécurisé la réception.

vais voir avec le code, mais cela me semble bien possible de rajouter :

if(D01_IR_NWAITCODE==127) D01_IR_NWAITCODE = 0; // <---- ajout pour permettre nwaitcode = 0

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: wDSPiy

Messagepar alka » lun. 12 déc. 2016 08:27

oui j'y ai pensé apres. J'ai édité car nwait reste a 0. c'etait trop tard hier :0
Sur le fond ca explique tout de meme pourquoi 4 et pourquoi 3.

Sony "officiel" n'envoie pas les commandes en double. Certaines télécommandes prennent peut etre des libertés. Les commandes sont répétées toutes les 45ms si on maintient la touche enfoncée ce qui est autre chose. Peut etre que la confusion vient de la ?
http://www.sbprojects.com/knowledge/ir/sirc.php
acheter un DSPiy ? c'est ici

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: wDSPiy

Messagepar alka » lun. 12 déc. 2016 08:53

thierryvalk a écrit :vais voir avec le code, mais cela me semble bien possible de rajouter :

if(D01_IR_NWAITCODE==127) D01_IR_NWAITCODE = 0; // <---- ajout pour permettre nwaitcode = 0

merci
j'ai mis 127 mais c'est peut etre une valeur utilisée pour des tests.
C'est sans doute mieux de mettre une valeur bien précise comme 99 ou 126. personne n'ira mettre ce genre de valeur normalement.
acheter un DSPiy ? c'est ici

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3519
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: wDSPiy

Messagepar thierryvalk » lun. 12 déc. 2016 08:55

Sony "officiel" n'envoie pas les commandes en double.

As-tu la vraie doc officielle ? celle de Sony ?
Pour ma part, testé avec une vraie telco Sony.

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 2907
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: wDSPiy

Messagepar alka » lun. 12 déc. 2016 10:41

je fais appel a mon avocat :)
Pas acces aux documents de Sony , mais :
- les librairies qui décodent le Sony pour arduino n'implémentent pas ce double code. Vu le nombre d'utilisateurs, ça se serait remarqué s'il y avait un défaut.
- testé avec une Logitech Harmony en émulateur sony et elle ne le fait pas
- les docs disponibles sur internet n'en parlent pas. Deux exemples sérieux :
-- http://www.sbprojects.com/knowledge/ir/sirc.php
-- http://picprojects.org.uk/projects/sirc/sonysirc.pdf

Je pense que c'est tout bete : confusion avec le repeat de codes. Ou alors tu possède le seul modele de télécommande sony bègue :(

C'est embétant de créer un nouveau protocole Sony1 avec le numéro 6 qui est libre ? ca réglerait le souci sans perturber personne.

Ou alors lier au parametre D01_IR_NWAITCODE :

Code : Tout sélectionner

if(D01_IR_CODE==1)if((IRcode==laction)&&(D01_IR_NWAITCODE != 126)){laction=0xff;return 1;}//return si même action 2 fois de suite pour sony12bits
            laction=IRcode;

            if(D01_IR_NWAITCODE==0) D01_IR_NWAITCODE = 3;   // pour la compatibilite avec le passe
            if(D01_IR_NWAITCODE==126) D01_IR_NWAITCODE = 0;  //  <---- ajout pour permettre nwaitcode = 0




Sinon, je viens de tester un joli (ou moche c'est selon) hack qui fonctionne parfaitement avec le DSPiy
envoi MUTE + code sony fake (0x01 qui correspond a adr=0, cmd=120 inutilisé)
a réception du code fake, laction est changé ET nwaitcode est décrémenté devient 0

le premier UNMUTE qui suit est traité :)
acheter un DSPiy ? c'est ici

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3519
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: wDSPiy

Messagepar thierryvalk » lun. 12 déc. 2016 17:09

je fais appel a mon avocat :

sous la menace.
<fichier supprimé>

Code : Tout sélectionner

void multidspiy_in()
{
        unsigned char preset_actl;
        unsigned char vmout=0;

        if(IRdevice==29)//test adresse si nouvelle trame
                    {
                    if(IRcode<111)//volume
                        {volume_level=IRcode;update_volume();
                        lvolume_level=volume_level;
                        return;}
                    if(IRcode<120)//preset
                        {preset_actl=IRcode-110;if(load_prog_flash(preset_actl,0)){preset_act=preset_actl;pact_save=Tpactsave;return;}
                        }
                    if(IRcode==121)//standby
                        {if(!standby_mode)standby();}
                    if(IRcode==122)//out standby
                        {if(standby_mode==1){standby_mode=2;}
                        }
                    if(IRcode==123)//mute
                        {Mute();vmute=0;}
                    if(IRcode==124)//unmute
                        {vmute=3;}
                        return;
                    }
        if(IRdevice==30)
                    {
                    if(IRcode<51)//balance
                        {balance_level=IRcode;update_volume();pact_save=Tpactsave;return;}
                    if(IRcode<61)//newsource
                        {newsource=IRcode-50;select_sourceIR(3);return;}
                    if(IRcode==61)//lecture volume
                        {vmout=volume_level;}
                    if(IRcode==62)//lecture preset act
                        {vmout=preset_act;}
                    if(IRcode==63)//lecture etat standby
                        {
                        if(standby_mode==1){vmout=122;}
                        if(!standby_mode){vmout=121;}
                        }
                    if(IRcode==64)//lecture etat mute
                        {
                        if(vmute){vmout=124;}
                        else {vmout=123;}
                        }

                    if(vmout){multidspyout((29<<7)+vmout);return;}

                    if(IRcode==65)//lecture balance
                        {vmout=balance_level;}
                    if(IRcode==66)//lecture source
                        {vmout=newsource;}

                    if(vmout){multidspyout((30<<7)+vmout);return;}
                    }
 


Code : Tout sélectionner

....
            if(D01_IR_NWAITCODE==0)D01_IR_NWAITCODE=3;

IRnewcode=0;
//tempo repeat

            if(D01_IR_NWAITCODE != 126)if(D01_IR_CODE==1)if(IRcode==laction){laction=0xff;return 1;}//return si même action 2 fois de suite pour sony12bits
            laction=IRcode;

            if(D01_IR_NWAITCODE != 126)if(nwaitcode){nwaitcode--; return 1;}
....
 

Non testé, a voir s'il n'y a pas d'inversion dans les code Standby et mute.


Retourner vers « DSPiy général »

Qui est en ligne

Utilisateurs parcourant ce forum : Majestic-12 [Bot] et 8 invités