Aller au contenu

Ampli Onkyo Et Hc2


BenjyNet

Messages recommandés

Ouais t'as bien fait, j'étais sur la page justement, mais je comprends pas bien comment ça marche.

SI je fais ça

local tab = split("HDMI 2,DTS,48 kHz,5.1 ch,DTS,5.1 ch,\0x1A\r\n",",");

ça bug :/ Il devrait pas me sortir un tableau pourtant ?

 

EDIT : On a quelle version de LUA ? Je me demande si la fonction split est implémentée ?

Modifié par BenjyNet
Lien vers le commentaire
Partager sur d’autres sites

Essaye plutot un truc comme sa mais modifie le pour les virgules

local example = "an example string"
for i in string.gmatch(example, "%S+") do
print(i)
end

-- output:
-- an
-- example
-- string
Lien vers le commentaire
Partager sur d’autres sites

Ou sinon tu fais ta propre fonction split :

function split(pString, pPattern)
   local Table = {}
   local fpat = "(.-)" .. pPattern
   local last_end = 1
   local s, e, cap = pString:find(fpat, 1)
   while s do
          if s ~= 1 or cap ~= "" then
          table.insert(Table,cap)
          end
          last_end = e+1
          s, e, cap = pString:find(fpat, last_end)
   end
   if last_end <= #pString then
          cap = pString:sub(last_end)
          table.insert(Table, cap)
   end
   return Table
end
Lien vers le commentaire
Partager sur d’autres sites

Désolé je viens juste de récupérer du réseau :-(

Tu as raison Benjy car la méthode split n'existe pas en LUA en tout cas pas en natif ;-) il me semble bien... J'ai aussi fait une fonction split perso ou sinon tu peux faire un :match("([^,]+),([^,]+ et etc. )"...

Dsl sur mon tel c'est pas simple ;-)

Envoyé de mon iPhone àl'aide de Tapatalk

Lien vers le commentaire
Partager sur d’autres sites

tu peux faire ça en plus simple:

function split(s)
  if (string.len(s)>0) then
    local _a, returnvalue = nil, {};
    for _a in string.gmatch(s, "([^,]+)") do
      fibaro:debug(string.format("%s", tostring(_a)));
      table.insert(returnvalue, tostring(_a));
    end
    return returnvalue;
  end
  return nil;
end

split("HDMI 2,DTS,48 kHz,5.1 ch,DTS,5.1 ch,\0x1A\r\n");

ou si tu es sur que la chaîne est toujours identique il y a mieux:

function decode(s)
  return s:match("([^,]+),([^,]+),([^,]+),([^,]+),([^,]+),([^,]+)")
end

local a, b, c, d, e, f = decode("HDMI 2,DTS,48 kHz,5.1 ch,DTS,5.1 ch,\0x1A\r\n");

fibaro:debug(a);
fibaro:debug(;
--etc...

:)

Lien vers le commentaire
Partager sur d’autres sites

Moi je parie sur cédric qui va me dire que ça marche pas :rolleyes:

 

EDIT : On dirait que le mainloop plantouille au bout d'un moment. Dites moi de votre côté ce que ça donne.

Modifié par BenjyNet
Lien vers le commentaire
Partager sur d’autres sites

@Shad, je veux pas faire mon lourd mais sauf cas vraiment très particulier je n'ai pas de plantage de MainLoop, mon code pour le VD Pioneer tourne depuis des mois et n'a jamais planté et je suis prêt a parier que l'adaptation de Benjy tournera sans problèmes ;).

 

ps: ce qui fait planter le main loop dans 99.9% des cas c'est cette maudite librairie json et le T_END de la mort :angry: qui pète la sandbox du mainloop d’où le besoin de redémarrage du vd mais encore tout cela dans des cas bien précis :mellow: . J'ai un petit hack pour régler le problème, le coup du PUT en lua mais comme la librairie json est buggé cela ne marche qu'avec des codes de petites tailles...

 

http://buildd-clang.debian.net/fetch.php?pkg=lua-cjson&arch=amd64&ver=2.1.0%2Bdfsg-2&stamp=1366389325

http://bugzilla.fibaro.com/view.php?id=1226

Lien vers le commentaire
Partager sur d’autres sites

Désolé, j'étais en déplacement, pas pu tester avant :( Mais je viens de tester la dernière version ce soir, et tout a l'air de parfaitement fonctionner, cette fois ! Quand je change quelque chose sur l'ampli l'état remonte correctement: sortie utilisée, niveau du volume, etc... Je crois que cette fois c'est la bonne :D

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...