Modérateurs: Modération Forum Home-Cinéma, Le Bureau de l’Association HCFR • Utilisateurs parcourant ce forum: BangoO, danywilde36, Emmanuel Piat et 69 invités

Tout ce qui concerne les logiciels lié au HC sur ordinateur (PC, Mac, Linux...)
Règles du forum
Avant de poster, merci de prendre connaissance des règles du forum : à lire avant de poster

Lanceur de vidéos : ZM.Media.Launcher (v 2.2.0)

Message » 27 Aoû 2018 23:33

Juste pour faire avancer la discussion, j'ai mis la main sur le DIlaRemote Control Guide du X30, X70, X90 etc... , ca doit etre pareil sur X500 vu que j'ai vu que les commandes basiques sur X5000 étaient les memes.

Pour les zoom memory, il y a possibilité d'avoir des commandes directes ou des commandes via émulation commande IR

Commande directe pour zoom1 : 21 89 01 49 4E 4D 53 30 0A (pour zoom2 on remplace 30 par 31 et idem pour zoom3)

Ce sont, apriori, des commandes RS232C a convertir selon le dispositif de transmission.
Ci joint l'extrait :
Code: Tout sélectionner
The codes shown on pages 3-13 are raw hex codes and must be converted to the
appropriate format in order to work with proprietary controllers such as those from Crestron
or AMX. To help with the conversion, here are two sample strings for those brands:
The Power On Command (from page 3) is: 21 89 01 50 57 31 0A
Crestron controller - Power On Command:
\x21\x89\x01\x50\x57\x31\x0A\r
AMX controller - Power On Command:
SEND_STRING dvProj, "$21, $89, $01, $50, $57, $31, $0A”


On peut aussi récuperé un aknowledge (si on veut), qui se présentera sous la forme 06 89 01 49 4E 0A (sur l'exemple des memory de zoom)

En LAN control via TCP/IP, il faut utiliser un mode de discussion de type "Three-Way Handshake" (poignée de main) sur le Port 20554.

On a donc a faire :
envoi au PJ : Requete de connexion
reponse PJ : PJ_OK
envoi au PJ (sous 5 sec) : PJREQ
reponse PJ : PJACK
envoi au PJ (sous 5 sec) : envoi requete (donc 21 89 01 49 4E 4D 53 30 0A)

Ma connaissance s'arrete là. Je n'ai pas d'information sur la maniere de faire cette requete de connexion... peut etre simplement en envoyant quelquechose :)
ou tout simplement un “Ping” command sur le bon port. :idee:


Je n'ai rien vu qui parlait de requête HTTP sur une URL.

La configuration dans mon profil


PCHC madVR / Epson LS12000 / Microperf Screenline 2m82 / Bi-Amp BMS12S305+RCF ND650 /Sub Beyma 18" et JBL GTI15 / JBL Arena 120 surround (8) et back (2) / Lab Gruppen C10:8X et C16:4 / Crest 8001 / Filtrage BLU100+BLU BOB2+BLU USB / ASIO
Avatar de l’utilisateur
Polopretress
Contributeur HCFR & Modérateur Installations
Contributeur HCFR & Modérateur Installations
 
Messages: 14263
Inscription Forum: 08 Jan 2016 1:48
Localisation: Val d'Oise
  • online

Message » 27 Aoû 2018 23:42

Super, merci pour ces éléments ! Ca m'intéresse évidemment puisque j'ai un X5500 :)

Il faudrait encore trouver le protocole exact à utiliser. J'imagine qu'il suffit d'ouvrir une session TCP sur le port 20554, mais ensuite comment envoyer les commandes ?

J'ai l'impression qu'il faut envoyer les codes ASCII terminés par un retour chariot.

Sais-tu à quoi correspond "Requête de connexion" et "PJREQ" ?
sierramike
 
Messages: 2175
Inscription Forum: 01 Aoû 2006 12:05
Localisation: Bas-Rhin
  • offline

Message » 27 Aoû 2018 23:44

Je prends !
En plus du délai de lancement, il faudrait que j'arrive à lui faire faire tout ce que je fais manuellement quand je veux lancer un film HDR :
- coller un délai de -242ms dans lav audio pour compenser la désactivation de l'interpolateur de l'Epson LS10500 en uhd (Ghost control ?)
- rappeler ma mémoire hdr dans le LS10500
- changer l'espace colorimétrique de BT709 à BT2020, car ce paramètre n'est pas pris en compte dans les mémoires du projecteur.
Au besoin, je peux tirer un câble réseau entre le pchc et le projo.
Pour le reste, à la différence de vous Messieurs, je ne suis pas du tout un cador en protocoles de communication, ou écriture de script, et autres lignes de commandes ...
dr rotule
Contributeur HCFR 2022
 
Messages: 10399
Inscription Forum: 14 Nov 2004 0:23
Localisation: Seine et Oise
  • online

Message » 28 Aoû 2018 1:30

sierramike a écrit:Super, merci pour ces éléments ! Ca m'intéresse évidemment puisque j'ai un X5500 :)

Il faudrait encore trouver le protocole exact à utiliser. J'imagine qu'il suffit d'ouvrir une session TCP sur le port 20554, mais ensuite comment envoyer les commandes ?

J'ai l'impression qu'il faut envoyer les codes ASCII terminés par un retour chariot.

Sais-tu à quoi correspond "Requête de connexion" et "PJREQ" ?


Requete de connexion, c'est juste pour initialiser la communication, je pense. donc un simple ping probablement.
PJREQ c'est le mot ascii qu'il faut envoyer (probablement aussi)

Ci joint le manuel que j'ai upload : https://drive.google.com/open?id=1SSDb5NISh8s4K_LPgl5hUO_7wuhW6v3D

Pour le reste, à la différence de vous Messieurs, je ne suis pas du tout un cador en protocoles de communication, ou écriture de script, et autres lignes de commandes ...

Pour ma part, mis a part les infos que j'ai donné, ma connaissance pratique est proche de zéro...

La configuration dans mon profil


PCHC madVR / Epson LS12000 / Microperf Screenline 2m82 / Bi-Amp BMS12S305+RCF ND650 /Sub Beyma 18" et JBL GTI15 / JBL Arena 120 surround (8) et back (2) / Lab Gruppen C10:8X et C16:4 / Crest 8001 / Filtrage BLU100+BLU BOB2+BLU USB / ASIO
Avatar de l’utilisateur
Polopretress
Contributeur HCFR & Modérateur Installations
Contributeur HCFR & Modérateur Installations
 
Messages: 14263
Inscription Forum: 08 Jan 2016 1:48
Localisation: Val d'Oise
  • online

Message » 29 Aoû 2018 12:42

Les amis,
J'ai trouvé ça concernant le LS10500 d'Epson :
https://1drv.ms/x/s!Aln093OSbBIudlSOcAfQepZW_to
A priori les deux commandes que je souhaite utiliser sont dans la liste.
Mais comment procéder pour "mettre" tout ça dans ZM.Media.Launcher ?
Notez qu'il y a deux onglets dans le fichier Excel :
- le premier comportant des explications assez obscures pour moi :roll:
- le second, la liste des commandes du LS10500

J'aurais deux cas :
- "IF HDR", alors applique un delai de démarage de quelques secondes (à déterminer), ET applique un délai de -242ms à Lav audio, ET charge ma mémoire HDR LS10500, ET change l'espace colorimétrique en BT2020
- "IF NOT HDR", alors applique un delai de démarage de quelques secondes (à déterminer)
- A la fin du visionnage, reviens en config NOT HDR (BT709, mémoire SDR du LS, délai LAV audio à zéro, etc ...)
dr rotule
Contributeur HCFR 2022
 
Messages: 10399
Inscription Forum: 14 Nov 2004 0:23
Localisation: Seine et Oise
  • online

Message » 29 Aoû 2018 12:58

J'ai jeté un oeil à ton fichier, c'est pas mal mais il manque juste une info : le numéro du port TCP pour se connecter au VP !!!

A priori, d'après ce lien que j'ai trouvé par une rapide recherche Google, le port serait 3629 pour du ESC/VP.net (ce dont ils parlent dans ton fichier Excel).

Je commencerais par un premier test manuel, sur ton PC, ouvre un invite de commande et tape:
C:\>telnet ip-de-ton-vp 3629
Si la commande n'est pas reconnue, va dans le panneau de config de Windows, "Ajouter/supprimer des fonctionnalités Windows" et ajoute le client Telnet puis relance la commande.

Si tu as une connexion qui s'ouvre et un invite qui commence par le double point ":", c'est bon signe !

Alors tente (avec le VP allumé), de taper "SOURCE?" (sans les guillemets) suivi de la touche "Enter".
S'il te répond:
SOURCE=21
:

(ou un autre nombre), c'est gagné, ça marche.
Tu peux lui balancer
PWR ON (Enter) => pour allumer le VP
PWR OFF (Enter) => pour éteindre le VP

Si ça marche, je saurai comment implémenter ça et je pourrai faire évoluer l'outil pour remplir ce besoin !
sierramike
 
Messages: 2175
Inscription Forum: 01 Aoû 2006 12:05
Localisation: Bas-Rhin
  • offline

Message » 29 Aoû 2018 13:06

je confirme que c'est bien le port 3629
(j'ai ecrit avec les pieds, mais qui a le mérite de fonctionner, un pgm qui commande mon VP LS10000 en série ou en réseau pour automatiser l’ensemble de ma chaine HC)
michelB2
 
Messages: 1725
Inscription Forum: 08 Sep 2003 9:42
Localisation: Nantes
  • online

Message » 29 Aoû 2018 13:08

Tu pourrais partager ton pgm ?
sierramike
 
Messages: 2175
Inscription Forum: 01 Aoû 2006 12:05
Localisation: Bas-Rhin
  • offline

Message » 29 Aoû 2018 13:16

pas de pb, mais où poser mes fichiers ? (écrit en autoit, il y en a plusieurs sources)
michelB2
 
Messages: 1725
Inscription Forum: 08 Sep 2003 9:42
Localisation: Nantes
  • online

Message » 29 Aoû 2018 13:20

ce sont des longues sources ? Sinon poste juste le code ici dans des blocs "code" ? Je connais pas ce langage mais je devrais m'en sortir
sierramike
 
Messages: 2175
Inscription Forum: 01 Aoû 2006 12:05
Localisation: Bas-Rhin
  • offline

Message » 29 Aoû 2018 13:30

je n'ai pas tout mis
le 1er code permet d'utiliser les commandes fourni au 2eme code
(il s'appelle hc6000 car à l'origine, il a été écrit pour ce VP puis migrer vers Epson lors d el'achat de mon nouveau VP)

Code: Tout sélectionner
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>

;#include "ati.au3"
#include "GUI_divers.au3"



#include 'videoproj_Commg.au3'    ; definir avant les variables globales
; si cmd="0" =>lecture_config sans MsgBox
; si cmd="" =>lecture_config avec MsgBox
; sinon hc6000($cmd)

;global $valeurtest=""            ;                                 /v=valeur en ligne de cmd
;global $echo=0    ;si echo <>0 affichage messsage retour complet   /e en ligne de cmd                ;defini dans epson_commg
;global $brut=0     ;  =1 avec donnees brutes sinon sans            /b en ligne de comd                ;defini dans epson_commg
local $message=0 ;  =1  affichage resultat                     /m en ligne de cmd

local $cmd="",$commande="",$m,$retour,$contraste,$luminosite,$power,$r
if $cmdline[0]>0 then $cmd=_ArrayToString($cmdline," ",1) ;$cmd=$cmdline[1]

if stringregexp($cmd,"\/c\s*=") then
     ;global $commande=StringRegExpReplace($cmd,".*\/c\s*=\s*(.*?)(?:\s.*|$)","$1")
    local $tmp=StringRegExp($cmd,".*\/c\s*=\s*(.*?)(?:\/|$)",3)
    global $commande= (IsArray($tmp)) ? $tmp[0] : ""
    $cmd=StringRegExpReplace($cmd,"\/c\s*=\s*"&$commande,"")
EndIf
if stringregexp($cmd,"\/b") then
   global $brut=1
   $cmd=StringRegExpReplace($cmd,"\/b","")
EndIf

if stringregexp($cmd,"\/e") then
    global $echo=1
    $cmd=StringRegExpReplace($cmd,"\/e","")
EndIf
if stringregexp($cmd,"\/m") then
    global $message=1
    $cmd=StringRegExpReplace($cmd,"\/m","")
EndIf
if stringregexp($cmd,"\/v\s*=") then
    global $valeurtest=StringRegExpReplace($cmd,".*\/v\s*=\s*(.*?)(?:\s.*|$)","$1")
    $cmd=StringRegExpReplace($cmd,"\/v\s*=\s*"&$valeurtest,"")
EndIf
if stringregexp($cmd,"\/ip\s*=") then
    global $ip=StringRegExpReplace($cmd,'.*\/ip\s*=\s*(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|0)(?:\s.*|$)',"$1")      ;accepter "1.1.1.1" OU "0"
    $cmd=StringRegExpReplace($cmd,"\/ip\s*=\s*"&$ip,"")
   ;msgbox(0,"",$ip & "=" &$cmd)
EndIf
if stringregexp($cmd,"\/p\s*=") then
    global $port=StringRegExpReplace($cmd,".*\/p\s*=\s*(\d)(?:\s.*|$)","$1")
    $cmd=StringRegExpReplace($cmd,"\/p\s*=\s*"&$port,"")
EndIf
if stringregexp($cmd,"\/fl\s*=") then
   ;msgbox(0,"",$cmd)
    global $fichierlog=StringStripWS(StringRegExpReplace($cmd,".*\/fl\s*=\s*(.*)(?:\s.*|$)","$1"),3)
   $cmd=StringReplace($cmd,$fichierlog,"")
    $cmd=StringRegExpReplace($cmd,"\/fl\s*=\s*","")
EndIf
if stringregexp($cmd,"\/fs\s*=") then
   ;msgbox(0,"",$cmd)
    global $basefichiersauve=StringStripWS(StringRegExpReplace($cmd,".*\/fs\s*=\s*(.*)(?:\s.*|$)","$1"),3)
   $cmd=StringReplace($cmd,$basefichiersauve,"")
    $cmd=StringRegExpReplace($cmd,"\/fs\s*=\s*","")
EndIf

if stringregexp($cmd,"\/g") then      ;acces au GUI les variables p= ,ip=, .... doivent etre défini avant
   ;global $contraste="-",$luminosite="-",$power=False
   $retour=""
   While 1
      ;msgbox(0,"",hc6000("CONTRAST?") & " exécuté")
      if stringregexp(hc6000("PWR?"),"01") Then
         ;local $t=stringregexp(hc6000("CONTRAST?"),"\-?\d{1,3}",3)[0]
         ;msgbox(0,"",$t & " exécuté")
      $contraste=xfr2(stringregexp(hc6000("CONTRAST?"),"\-?\d{1,3}",3)[0],-24,24)
      $luminosite=xfr2(stringregexp(hc6000("BRIGHT?"),"\-?\d{1,3}",3)[0],-24,+24)
      $power=True
      ;msgbox(0,"",hc6000("PWR?") & " exécuté"&$power)
      Else
      $contraste="-"
      $luminosite="-"
      $power=False
      EndIf
      local $r1=gui_vp($power,$contraste,$luminosite,$retour)
      ;msgbox(0,"",$r1 & " exécuté")
   if $r1="" then Exit
   $retour=hc6000($r1)
   $retour=StringRegExpReplace($retour,"Erreur","Err\.")
   $retour=StringRegExpReplace($retour," \d fois","")
   ;msgbox(0,"",$r1 & " exécuté "& "=> "& $retour,5)
   WEnd
EndIf

;msgbox(0,"","command ="& "<"& $commande &">"& @CR & "echo="& $echo & @CR & "brut="& $brut &@CR & "valeur="&"<"& $valeurtest & ">" &@CR & "port " & $port &@CR& "ip " & $ip &@cr & "log : *" &$fichierlog & "*" &@cr & "sav : *" &$basefichiersauve&"*",10)
;Exit
$cmd=$commande
if $cmd="" or $cmd="/?" or $cmd="?"  then
    $m= _
   "Commandes :" & @cr&"? ou /?    syntaxe"  _
   &@cr&"/c="  _
   &@cr&"      0 lecture config " & @cr & "      1 durée lampe "&@cr& "      2 position lentille"&@cr&'      mem 01-0A  restauration memoire 1 à10'   &@cr&'      commande ESCVP/21 directe' _
   &@cr& "==>Resultats dans le presse papier " _
   &@cr&@cr& "Options :" _
   &@cr&"/g                           accès au GUI" _
    &@cr&"/b                           données brutes " &@cr & "/e                           echo  message retour VP" & @cr & "/m                          message resultat" & @CR & '/v=val                    simulation valeur' _
    &@cr & "/ip=192.168.0.14  réseau(=0 non tcpip)         =>VP allumé ou veille active" & @cr & "/p=2                      port série(1à 9),0 non série  =>VP sous tension"  _
     &@cr&@cr& "/fl=c:\fich_log.log             fichier log des actions" _
   &@cr& "/fs=c:\base_sauve_mem  fichier sauve des memoires VP (rajout n°.log) " _
   &@cr&@cr & "ex: PWR? /p=1 /fl=c:\test ecrit.log /m  /e     ==> PWR?   PWR=00"
ClipPut($m)
msgbox(0,"Liste des commandes", $m)
    Exit
EndIf
$cmd=StringStripWS($cmd,3+4)      ; suppression blanc avant apres et multiple
Switch $cmd
case "","0"
   $r=lecture_config(1) ;  1 lecture en continue 12.5sec 25sec en serie, 0=ouverture/fermeture à chaque lecture 9.5sec
;   $r &=string(ati())
case "1"
    $r=dureelampe()
case "2"
    $r=pos_lens()
case "3"
    $r=test_noclose()
case "4"
    $r=test_identmem()
case "mem 01" to "mem 0A" ;stringregexp($cmd,"mem\s*0[1-9A]")
   msgbox(0,"", $cmd)
;   restoremem($mem="",$compar=1)
case else
   $r=hc6000($cmd)
EndSwitch
if not ( $valeurtest=="") then $r="**Valeur test : <"&$valeurtest&">**"&@crlf& $r

ClipPut($r) ;resultat mis dans le presse papier
if $cmd="0" or $cmd="1" or $message=1 or StringRegExp($r,"Erreur") then MsgBox(0,"port/ip : " & $port &"/"&$ip & " Protocole : " & choix_protocole()&"/"&$typeprotocole ,$r ,20)
;$r=stringreplace($r,@CRLF,",")
;FileWriteLine("c:\report.txt",_now() & " " & $r)


Code: Tout sélectionner
#include-once
Opt("MustDeclareVars", 1) ;0=no, 1=require pre-declaration

; ecrit fichier log : "e:\downloads\materiel\HomeCinema-TV\epson\allum.log"
;-----------version s'appuyant dur comminterface (sans dll) ok en x64-----
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseX64=y   ; fonctionne en x64 etx86
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#include <String.au3>
#include <Array.au3>
#include <File.au3>
#include <Date.au3>
#include <GUIConstantsEx.au3>
#Include <Date.au3>
#include <ButtonConstants.au3>
;#include "c:\util\autoit\sources\comminterface\CommInterface.au3"
#include ".\comminterface\CommInterface.au3"
#include <WinAPI.au3>
;#include 'goma_func.au3'
;global $hfileVP=0,

global $typeprotocole=-1   ; ,$choixprotocole=0

#include "initialisation.au3"

; pour utiliser une variable d'environnement (@xxx)
;local $tmp=IniRead("variable_read.ini","executable","display_changer_path","")        ;ou vide pas de Log
;global $path_dccmd=(stringregexp($tmp,"@")) ? execute($tmp) : $tmp

$port=select_port($port)

local $r=""
;$r=dureelampe()
;$r=eteintvp()
;$r=allumvp()
;$r=lecture_config()
;$r=hc6000("POPMEM 02 05")   ; chargement de ma memoire 5
;$r=hc6000("LAMP?")
;$r=mode2d3d("2d")
;$r=test_noclose()
;$r=ident_mem()

if not ( $valeurtest=="") then $r="**Valeur test : <"&$valeurtest&">**"&@crlf& $r
;msgbox(0,"port "& $port&"/"&$ip, $r)
;exit
;===================#include "initialisation.au3"===================================================
Func Inireadcustom_deporte($filename,$section,$key,$defaut="")
   local $out
   $out=Iniread($filename,$section,$key,$defaut)
   $out=StringRegExpReplace($out,"(.*?)\s*;.*", "$1")                           ; suppression des chaines apres ";" les variables en number l'enleve par number
   $out=(stringregexp($out,"@")) ? execute($out) : $out                        ; pour utiliser une variable d'environnement (@xxx&"texte")
   if stringregexp($out,"%.*%") then $out= EnvGet(stringregexp($out,"%(.*)%",3)[0]) & StringRegExpReplace($out,"%.*%","")   ; pour utiliser une variable d'environnement (%xxx%texte)
return $out
EndFunc
; --------------------lecture configuration----------------------------
func lecture_config($noclose=1)   ;  1 lecture en continue 12.5sec 25sec en serie, 0=ouverture/fermeture à chaque lecture 9.5sec
    local $hfileVP
   local $temps_lect,$conf,$d,$g
   $temps_lect=TimerInit()
$conf ="RGBCMY : "
$conf &= @CRLF

$conf &= "LS10000 Version SANS DLL   le  " & _Now() & @CRLF & @CRLF
$d=dureelampe()
if $d="9999:99" then return $conf & "         ==> VP inaccessible <==" & @CRLF & @CRLF
if $typeprotocole=0 then
   $conf &=  "Accès série port: " & $port
Else
   $conf &=  "Accès réseau ip: " & $ip
EndIf
$conf &= @CRLF
$conf &=  "Lampe/Projecteur :  " & $d
if $noclose<>0 then
   ;$typeprotocole=choix_protocole()
   $hfileVP=open_proto($typeprotocole,choix_protocole())
      if $hfileVP=0 Then
         if $valeurtest="" then
            return "Erreur port " & $port &" inacessible : (0=réseau)"
         Else
            Return $valeurtest
         EndIf
      Else
         $noclose=$hfileVP
      EndIf
EndIf
$conf &=  " / " & hc6000("ONTIME?",$noclose)

$conf &="   Laser  : "
$g= hc6000("LUMINANCE?",$noclose)
   switch $g
       case "00"
         $conf &="Haut"
       case "01"
         $conf &="Bas"
       case "02"
         $conf &="Moyen"
       case Else
         $conf &= $g
   EndSwitch
$conf &=@CRLF
;$conf &= "Num série  : "& hc6000("SNO?",$noclose) & @CRLF
$conf &= "Input source  :  "
$g=hc6000("SOURCE?",$noclose)
switch $g
   case "30"
     $conf &="HDMI1"
   case "A0"
     $conf &="HDMI2"
   case Else
     $conf &= $g
EndSwitch
;$conf &=@CRLF


$conf &="    Aspect  : "
$g=hc6000("ASPECT?",$noclose)
switch $g
   case "00"
     $conf &="Normal"
   case "30"
     $conf &="Auto"
   case "40"
     $conf &="Full"
   case "50"
     $conf &="Zoom"
   case "70"
     $conf &="Wide"
   case Else
     $conf &= $g
EndSwitch
$conf &=@CRLF

$conf &="Gamut  :  "
$g=hc6000("CGAMUT?",$noclose)
switch $g
   case "01"
     $conf &="HDTV"
   case "02"
     $conf &="EBU"
   case "03"
     $conf &="SMPTE-C"
   case Else
     $conf &= $g
EndSwitch
$conf &=@CRLF

$conf &="Mode Couleur  :  " &hc6000("CSEL?",$noclose) & "   "      ; devrait toujours etre "07" =RGB/RGBCMY
$g=hc6000("CMODE?",$noclose)
   switch $g
      case "06"
         $conf &="Dynamic"
      case "07"
         $conf &="Natural"
      case "0C"
         $conf &="Living"
      case "13"
         $conf &="THX (Only THX model)"
      case "15"
         $conf &="Cinema"
      case "16"
         $conf &="Stage (Only Japan model)"
      case "17"
         $conf &="3D Cinema"
      case "18"
         $conf &="3D Dynamic"
      case "19"
         $conf &="3D THX (Only THX model)"
      case "20"
         $conf &="B&W Cinema (Only EAI model)"
      case "21"
         $conf &="Adobe RGB"
      case "22"
         $conf &="Digital Cinema"
      case "01"
         $conf &="Presentation 1"
      case "05"
         $conf &="Theatre"
      case "08"
         $conf &="Sports"
      case "11"
         $conf &="Black Board"
      case "12"
         $conf &="White Board"
      case "14"
         $conf &="Photo"
      case Else
         $conf &=$g
   EndSwitch
$conf &=@CRLF
$conf &=@CRLF
; valeur bios=>menu  (0=>-24,250=>+24)
$conf &="*Lum/Con                     (-24,+24)  :  " & xfr2(hc6000("BRIGHT?",$noclose),-24,+24) & " / " & xfr2(hc6000("CONTRAST?",$noclose),-24,24)
   $conf &=br("  =>  (0-250) " & hc6000("BRIGHT?",$noclose) & " / " & hc6000("CONTRAST?",$noclose) ,$brut)

$conf &="RGB : " & @CRLF
$conf &="   offset  (-30,+30) :  " & xfr2(hc6000("OFFSETR?",$noclose),-30,30) & " / " & xfr2(hc6000("OFFSETG?",$noclose),-30,30) & " / " & xfr2(hc6000("OFFSETB?",$noclose),-30,30)
   $conf &=br("   =>  (0-251)  " & hc6000("OFFSETR?",$noclose) & " / " & hc6000("OFFSETG?",$noclose) & " / " & hc6000("OFFSETB?",$noclose) ,$brut)
$conf &="   gain    (-30,+30) :  " & xfr2(hc6000("GAINR?",$noclose),-30,30) & " / " & xfr2(hc6000("GAING?",$noclose),-30,30) & " / " & xfr2(hc6000("GAINB?",$noclose),-30,30)
   $conf &=br("   =>   (0-251) " & hc6000("GAINR?",$noclose) & " / " & hc6000("GAING?",$noclose) & " / " & hc6000("GAINB?",$noclose) ,$brut)


$g=hc6000("GAMMA?",$noclose)      ; gamma=20-24,f0
if $g=="F0" then
$conf &="Gamma custom (-32,+32) : " &  xfr2(hc6000("GAMMALV? 00",$noclose),-32,32) & "/ " & xfr2(hc6000("GAMMALV? 01",$noclose),-32,32)& "/ " & xfr2(hc6000("GAMMALV? 02",$noclose),-32,32)& "/ " & xfr2(hc6000("GAMMALV? 03",$noclose),-32,32)& "/ " & xfr2(hc6000("GAMMALV? 04",$noclose),-32,32) & "/ " & xfr2(hc6000("GAMMALV? 05",$noclose),-32,32) & "/ " & xfr2(hc6000("GAMMALV? 06",$noclose),-32,32)& "/ " & xfr2(hc6000("GAMMALV? 07",$noclose),-32,32)& "/ " & xfr2(hc6000("GAMMALV? 08",$noclose),-32,32) ; 00 à 08
$conf &=br(" => (0-252)  " &  hc6000("GAMMALV? 00",$noclose) & "/ " & hc6000("GAMMALV? 01",$noclose)& "/ " & hc6000("GAMMALV? 02",$noclose)& "/ " & hc6000("GAMMALV? 03",$noclose)& "/ " & hc6000("GAMMALV? 04",$noclose) & "/ " & hc6000("GAMMALV? 05",$noclose)& "/ " & hc6000("GAMMALV? 06",$noclose)& "/ " & hc6000("GAMMALV? 07",$noclose)& "/ " & hc6000("GAMMALV? 08",$noclose) ,$brut); 00 à 08
Else
;(24=>-2,22=>0, 20=>+2)
$conf &= "Gamma (-2,-1,0,1,2)           :  "& 22-$g
   $conf &=br( "  => " & $g ,$brut)
EndIf
$conf &=@CRLF
$conf &="Temp. Coul. (5000K-10000K)  :   "
$g=hc6000("CTEMP?",$noclose)
$conf&= 500*xfr2($g,10,20) &"K ou " & xfr2($g,-3,6)
   $conf &=br("  => (0-230) " & hc6000("CTEMP?",$noclose) ,$brut)

$conf &="RGBflesh                    (0-6)             :  "  & xfr2(hc6000("FCOLOR?",$noclose),0,6)
   $conf &=br("        => (0-219) " & hc6000("FCOLOR?",$noclose) ,$brut)

$conf &= "Intensité/Teinte              (-32,+32)     :  " & xfr2(hc6000("DENSITY?",$noclose),-32,32) & " / " & xfr2(hc6000("TINT?",$noclose),-32,32)
   $conf &= br("  =>(126-378?) (0-252) " & hc6000("DENSITY?",$noclose) & " / " & hc6000("TINT?",$noclose) ,$brut)

$conf &= "Netteté : " &@CRLF
$conf &=  "   Std         (-5,+5)    :  " & xfr2(hc6000("SHARP? 00",$noclose),-5,5)
   $conf &= br("   => (0,232) " & hc6000("SHARP? 00",$noclose) ,$brut)
$conf &=  "   High-Low (0,20)  :  "& xfr2(hc6000("SHARP? 01",$noclose),0,20) & "," & xfr2(hc6000("SHARP? 02",$noclose),0,20)
   $conf &= br("  =>  " & hc6000("SHARP? 01",$noclose) & "," & hc6000("SHARP? 02",$noclose) ,$brut)
$conf &=  "   Accent. Hor-Vert (-8,+8)  :  " & xfr2(hc6000("SHARP? 04",$noclose),-8,8) & "," & xfr2(hc6000("SHARP? 05",$noclose),-8,8)
   $conf &= br(" =>  " & hc6000("SHARP? 04",$noclose) & "," & hc6000("SHARP? 05",$noclose) ,$brut)

$conf &= "SuperResol.  :  "
$g=hc6000("SUPERRES?",$noclose)
Switch  $g
   case "00"
     $conf &="Off"
   case "01" to "05"
     $conf &=Number($g)
   case "11" to "15"
     $conf &="4K-"&  number($g)-10
   case Else
     $conf &= $g
EndSwitch
$conf &= @CRLF

$conf &= "Frame interpol  :  "
$g= hc6000("MCFI?",$noclose)
Switch  $g
   case "00"
     $conf &="Off"
   case "01"
     $conf &="Low"
   case "02"
     $conf &="Normal"
   case "03"
     $conf &="High"
   case Else
     $conf &= $g
EndSwitch
$conf &= @CRLF

$conf &= "Reduction Noise  (Off,1,2,3) :  "
$g=hc6000("NRS?",$noclose)
Switch  $g
   case "01"
     $conf &="Off"
   case "02" to "04"
     $conf &=Number($g)-1
   case Else
     $conf &= $g
EndSwitch
$conf &= @CRLF

$conf &= "Optimisaton detail Plage/Puissance (0,100)    :  " & xfr2(hc6000("DERANGE?",$noclose),0,100) & " / " & xfr2(hc6000("DESTRENGTH?",$noclose),0,100)
   $conf &= br("  => "& hc6000("DERANGE?",$noclose) & " / " & hc6000("DESTRENGTH?",$noclose) ,$brut)

$conf &= "Lens Vitesse.Adjust  Vlens/Hlens Zoom/Focus (0-1023) :  " & hc6000("LENSADJMODE?",$noclose)& "= " & hc6000("LENS?",$noclose)& "/" & hc6000("HLENS?",$noclose) & " / " & hc6000("ZOOM?",$noclose)& "/" & hc6000("FOCUS?",$noclose) &@CRLF
$conf &= "Hpos/Vpos : " &hc6000("HPOS?",$noclose) & "/"  &hc6000("VPOS?",$noclose)
$conf &= "   Keystone / Overscan  :    " &xfr2(hc6000("VKEYSTONE?",$noclose),-60,60)  & " / "
$g=hc6000("OVSCAN?",$noclose)
Switch  $g
   case "00"
     $conf &="Off"
   case "01" to "04"
     $conf &=2*Number($g) & "%"
   case "A0"
      $conf &="Auto"
   case Else
     $conf &= $g
   EndSwitch
$conf &= br("  => (0,253) "& hc6000("VKEYSTONE?",$noclose) & " / " & hc6000("OVSCAN?",$noclose) ,$brut)
$conf &= @CRLF

;$conf &= "Illumination     :  " & hc6000("ILLUM?",$noclose)  & @CRLF      ; led bleu chassis on/off

$conf &= "test " & @CRLF   ;fait  qc,resol,zoomsizepos,tracking,sync,filter,clrspace,dynrange,mulscr,lcdalignement

; "LCDALIGNMENT 00 00" et "00 01" nok
#cs    ; codes retournant erreur
$conf &= " IMGPRESET : " &hc6000("IMGPRESET?",$noclose)
$conf &= " QC : " &hc6000("QC?",$noclose)
$conf &= " RESOL : " &hc6000("RESOL?",$noclose)
$conf &= " ZOOMSIZEPOS : " &hc6000("ZOOMSIZEPOS?",$noclose)
$conf &= " TRACKING : " &hc6000("TRACKING?",$noclose)
$conf &= " SYNC : " &hc6000("SYNC?",$noclose)
$conf &= " FILTER : " &hc6000("FILTER?",$noclose)
$conf &= " CLRSPACE : " &hc6000("CLRSPACE?",$noclose)
$conf &= " DYNRANGE : " &hc6000("DYNRANGE?",$noclose)
$conf &= " MULSCR : " &hc6000("MULSCR? 02",1)  ;"x1:Kind of setting 01:Display pattern 02:Brightness correction 03:Color correction (G-R) 04:Color correction (B-Y)"
$conf &= " LCDALIGNMENT mode : "     &hc6000("LCDALIGNMENT? 00",1) & hc6000("LCDALIGNMENT? 01",1) & hc6000("LCDALIGNMENT? 02",1)  & hc6000("LCDALIGNMENT? 03",1) & @CRLF
$conf &= " LCDALIGNMENT mode x y : " &hc6000("LCDALIGNMENT? 00 0000 0000",1) &hc6000("LCDALIGNMENT? 01 0000 0000",1)&hc6000("LCDALIGNMENT? 02 0000 0000",1)&hc6000("LCDALIGNMENT? 03 0000 0000",1) & @CRLF
   ; "mode  00: Start adjustment ,  01: LCD alignment correction setting ,  02: Adjustment color setting ,  03: Pattern color setting, x=0000~270F(9999), y=0000~270F(9999)"
   ;updown :     9D(-99)~00~63(99): vertical direction leftright  9D(-99)~00~63(99): horizontal direction
   ;parm   : LCD alignment correction setting   00: OFF   01: ON , Adjustment color setting   01: Red   02: Blue, Pattern color setting   01: R/G/B   02: R/G   03: G/B"
#ce

$conf &= @CRLF
if $noclose<>0 then close_proto($hfileVP,$typeprotocole)
;$conf=StringReplace($conf,"Erreur timeOut","<TimeOut>")
$conf=StringReplace($conf,"Erreur timeOut sur","*")
;$conf=StringFormat("(Execution %d ms)",1000*TimerDiff($temps_lect)) & @cr & $conf
$conf="(Execution "& round(TimerDiff($temps_lect)) & "ms)" & @cr & $conf
return $conf
EndFunc
;-------position objectif---fait--------------------
func pos_lens()
   local $conf
$conf = "Lens Vitesse.Adjust  Vlens/Hlens Zoom/Focus (0-1023) :  " & hc6000("LENSADJMODE?")& "= " & hc6000("LENS?")& "/" & hc6000("HLENS?") & " / " & hc6000("ZOOM?")& "/" & hc6000("FOCUS?") &@CRLF
return $conf
endfunc
;-------durée lampe---fait--------------------
func dureelampe()
local $r,$h,$e
$r=hc6000("LAMP?")
$e=@error
;if $r="" then $r=hc6000("LAMP?")
if stringinstr($r ,'Erreur')<>0   then
   log_action("Lampe erreur: "&$r & " err: " & $e)
    ;msgbox(0,"Erreur sur port série " & $port ,$r)
    $h="9999:99"
elseif Number($r)>0 Then
    $h=StringFormat("%04d:00",$r)
Else
    $h="*"&$r&"*"
   log_action("Lampe: "&$h)
endif
SetError($e)
return $h
endfunc
;--------allumage écran------fait------------
func allumvp($mem="")
local $iter=0,$iter0=0,$r,$itermax=25,$aa,$debut_allum_tmp
local $debut_allum=TimerInit(),$zztmp,$e

;goma_appel("VP on")   ;allumage par IR !!!!
;sleep(2000)

While 1
;   $debut_allum_tmp=TimerInit()
for $iter0=1 to $itermax
   $r=hc6000("PWR?")      ;verifier si ecran allumé
   if ($r<>"") and (not StringRegExp($r,"Erreur")) then exitloop   ;no match cad pas d'erreur
   sleep(1000)
next
$iter+=$iter0
if stringinstr($r ,'Erreur')<>0   then
   log_action("ALLUMAGE  :  Err. "&$r,True)
   $aa=msgbox(5,"ALLUMAGE  : Erreur sur port "& $port ,$r & @CRLF & @CRLF & "Allumer le projecteur et cliquez pour continuer ou annuler")
   if $aa=2 then Exit            ; abort
else
 ;log_action("PWR? : " & Round(TimerDiff($debut_allum_tmp)/1000,2) & "s , reponse : "& $r & " "  & $iter0 & "/" & $itermax)
   switch $r
   case "00","04"  ;eteint
         $zztmp=hc6000("PWR ON")            ;msgbox(0,"","j'allume")   ;écran éteint=> allumer (23sec)
       $e=@error
      ;sleep(5000)
       $r="Power ON : " & Round(TimerDiff($debut_allum)/1000,2) & "s " & ' iter: '& $iter   ; & 'retour hc6000("PWR ON")=<' & $zztmp & '> err: ' & $e &' iter: '& $iter
      log_action($r)
      $itermax=100
   case "01"   ; allumer : fin de boucle
       $r="Allumé : " & Round(TimerDiff($debut_allum)/1000,2) & "s" & " et " & $iter-$iter0 & "/"& $iter &" itérations " & dureelampe()
       log_action($r)
     ExitLoop
   case "02","03" ; chauffe ou refroidit
      $r="En chauffe : " & Round(TimerDiff($debut_allum)/1000,2) & "s"
      log_action($r)
     sleep(500)
   case "05"
     msgbox(0,"Erreur","Anomalie Projecteur")
     log_action("Anomalie Projecteur " & $r )
     Exit
   case Else ;retour $r="" tout des suite apres power on
      ;if $r="" then ContinueLoop
     msgbox(0,"Erreur","Anomalie retour Projecteur <" &$r&"> "& $iter,5)
     log_action("Anomalie retour Projecteur <" &$r&"> " &$iter )
     ;Exit
   EndSwitch
endif
WEnd
if $iter>0 and $iter<100 then
   $r=restoremem($mem,1)      ; restore memoire n° $mem (si ""  RAF)ssi  vp pas déjà allume ($iter=0) ou en anomalie ($iter>100) ,0 restore inconditionnel, 1 ssi diff config conrante
   $r="Restore mem : " &$mem & " "& Round(TimerDiff($debut_allum)/1000,2) & "s,  itérations " & $iter &" retour " & $r
   log_action($r)
EndIf
return $r
endfunc
;--------extinction ecran------fait---------
func eteintvp()
local $r,$aa
$r=hc6000("PWR?")      ;verifier si ecran allumé
if stringinstr($r ,'Erreur')<>0   then
   return $r   ; si erreur, ne rien faire
   $aa=msgbox(5,"EteintVP : "& "Erreur sur port série " & $port ,$r)
   if $aa=2 then Exit
else
   if $r="01"   then                  ;écran allumé=> eteindre
     mode2d3d("2d")                  ;bascule mode 2d
     $r=hc6000('PWR OFF')      ;msgbox(0,"","j'éteint")      ; OUI
   endif
endif
return $r
endfunc
;-------------bascule mode 2d/3d ------------------------
func mode2d3d($mode="2d")
local $r,$aa
   $r=hc6000("CMODE?")      ;verifier mode
if stringinstr($r ,'Erreur')<>0   then
   $aa=msgbox(5,"bascule2d/3d " & " Erreur sur port série " & $port ,$r)
   if $aa=2 then Exit
else
   if ($r="17" or $r="18" or $r="19") and $mode="2d"   then
     hc6000("KEY 9E")   ;passage mode 2d
     sleep(1000)
     log_action("Bascule mode 2d")
   EndIf
   if not(($r="17" or $r="18" or $r="19")) and $mode="3d"   then
     hc6000("KEY 9F")   ;passage mode 3d
     sleep(1000)
     log_action("Bascule mode 3d")
   EndIf
endif

return $r
EndFunc
;--------------------- test que la conf. courante est egale a la configuration demandée ------------
func ident_mem($mem,$noclose=1)
local $hfileVP,$m,$duree_identmem=TimerInit()
if $noclose<>0 then
   $hfileVP=open_proto($typeprotocole,choix_protocole())
      if $hfileVP=0 Then
         if $valeurtest="" then
            return "Erreur port " & $port &" inacessible : (0=réseau)"
         Else
            Return $valeurtest
         EndIf
      Else
         $noclose=$hfileVP
      EndIf
EndIf
   ;#cs
   $m=hc6000("CMODE?",$noclose)
   if $m="" then $m=hc6000("CMODE?",$noclose)
   $m &= "; " & xfr2(hc6000("BRIGHT?",$noclose),-24,+24) & "/" & xfr2(hc6000("CONTRAST?",$noclose),-24,24)& " * " & _
      xfr2(hc6000("DENSITY?",$noclose),-32,32) & "/" & xfr2(hc6000("TINT?",$noclose),-32,32) & " * " & xfr2(hc6000("DERANGE?",$noclose),0,100) & "/" & xfr2(hc6000("DESTRENGTH?",$noclose),0,100) & " " & _
      "<"&xfr2(hc6000("SHARP? 00",$noclose),-5,5) & ">" & xfr2(hc6000("SHARP? 01",$noclose),0,20) & "." &xfr2(hc6000("SHARP? 02",$noclose),0,20) & "."  & xfr2(hc6000("SHARP? 04",$noclose),-8,8) & "." & xfr2(hc6000("SHARP? 05",$noclose),-8,8) & _
      " RGB o-g : " &  xfr2(hc6000("OFFSETR?",$noclose),-30,30) & " / " & xfr2(hc6000("OFFSETG?",$noclose),-30,30) & " / " & xfr2(hc6000("OFFSETB?",$noclose),-30,30) & " * " & _
       xfr2(hc6000("GAINR?",$noclose),-30,30) & " / " & xfr2(hc6000("GAING?",$noclose),-30,30) & " / " & xfr2(hc6000("GAINB?",$noclose),-30,30) & _
      " Gamma="& hc6000("GAMMA?",$noclose)
      $m &="; Laser:"&hc6000("LUMINANCE?",$noclose)

   ;#ce
   ;$m=hc6000("LAMP?",$noclose)
log_action("Ident mem : " & round(TimerDiff($duree_identmem)) & "ms" ) ; & " continue: "&$noclose & " proto.: "& $typeprotocole &"/"& choix_protocole()& " port " &$port & " ip "& $ip,False)
if $noclose<>0 then close_proto($hfileVP,$typeprotocole)
return "mem"&$mem& ": "&$m
EndFunc

;--------------------log ------------------------------------------
func log_action($message,$infocomplem=False)
    ;local $fichierlog="e:\downloads\materiel\HomeCinema-TV\epson\allum.log"    ;ou vide pas de Log
   local $infosup=""
   if $infocomplem=True then  $infosup=" proto.: "&$typeprotocole & "/" & choix_protocole()
    if $fichierlog<>"" then _FileWriteLog($fichierlog,$message & $infosup)    ;&" port "& $port & " ip: "& $ip &  " protocole: "&$typeprotocole)
EndFunc
;--------sauvegarder qq elements pour esperer qu'au rallumage, la conf soit la même mode;luminosité;contrast---------
func save_mini_conf($mem="")
   if $mem="" or $basefichiersauve="" then Return
    local $m,$fichiersauve=$basefichiersauve&".log"    ;ou vide pas de Log
    if not(FileExists($fichiersauve)) then _FileWritelog($fichiersauve,"mem: mode; lum/con * intens/teinte * drange/dstreng * <sharp0> sharp1.sharp2.sharp4.sharp5 RGBoffset * RGBgain Gamma")
    $m=ident_mem($mem)
    _FileWritelog($fichiersauve,$m)
    log_action("Save_mem " & $m,True)
EndFunc
;-------------restore memoire n° X (01 à 0A)-----------
Func restoremem($mem="",$compar=1)    ; faire compar=0 si restore inconditionnel
local $r, $m,$aa,$e
    if $basefichiersauve<>"" then local $fichiersauve=$basefichiersauve&".log"    ;ou vide pas de Log
if $mem="" then return "Pas de MEM"
if $compar>0 and FileExists($fichiersauve) Then
   $r=FileReadLine($fichiersauve,-1)   ;derniere ligne
   $r=StringRegExpReplace($r,"\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} : ","")
   $m=ident_mem($mem)   ;conf courante
   if $r= $m then   ;inutile de restauré si la conf courante est la conf sauvegardée
      ;log_action("Eco mem : " & $m)
      return "Mem déjà chargée"
   ElseIf StringRegExp($r,"(.*?)Laser",1)[0]=StringRegExp($m,"(.*?)Laser",1)[0] then
      return "Mem déjà chargée sauf Laser"
   EndIf
EndIf
   $r=hc6000("POPMEM 02 "& $mem)      ;restore memoire
   $e=@error
   if stringinstr($r ,'Erreur')<>0   then
      $r=hc6000("POPMEM 02 "& $mem)        ;2eme esssai restore memoire
      $e=@error
   EndIf
sleep(500)
if stringinstr($r ,'Erreur')<>0   then
   log_action("Restore mem" & $mem &  " Err. "& $e & " retour : "&$r,True )
   $aa=msgbox(5,"Restore mem"&$mem & " Erreur sur port série " & $port ,$r)
   if $aa=2 then Exit
EndIf
   log_action("Load mem" & $mem ,True)
   save_mini_conf($mem)   ;sauvegarde de la conf mem pour la prochaine fois
return $r
EndFunc
;-----------------------------------------------------------------------------------------
func transmit($hfileVP,$mes,$typeprotocole) ; protocole 0=serie, 1=tcp
   local $e
   if $hfileVP=0 or $typeprotocole=-1 then
      SetError(-1)
      return 0
   EndIf
   if $typeprotocole=0 then
      $r=_CommAPI_TransmitString($hfileVP, $mes & @CR, 1)
      $e=@error
   Else
      $r=TCPSend ( $hfileVP, $mes & @cr)   ; $r=nb octect transmis ou 0 si erreur
      $e=@error
   EndIf
SetError($e)
return $r   ; nb octets transmis (avec/sans erreur)
EndFunc
;------------------------------------------------------------------------------------------
func receive($hfileVP,$mes,$typeprotocole) ; protocole 0=serie, 1=tcp
local $i,$m="",$retour,$e
   if $hfileVP=0 or $typeprotocole=-1 then
      log_action("handle Receive nul: " & $mes & " " & $typeprotocole&"/"&choix_protocole())
      SetError(-1)
      return ""
   EndIf
for $i=1 to 5
   if $typeprotocole=0 then
      $retour=_CommAPI_ReceiveString($hfileVP, 250,25,":",1)   ; fin de get si @CR ou 25 caracteres ou timout=200ms  => les commandes en set ne retournent pas de @CR
      $e=@error
      ;if $retour="" and $e=0 then  ; 2eme essai
      ;   $retour=_CommAPI_ReceiveString($hfileVP, 250,25,":",1)
      ;   $e=@error
      ;EndIf
   Else
      $retour=TCPRecv ( $hfileVP, 25 )
      $e=@error
   EndIf
if $e=0 then ExitLoop
;if not (($retour="" or $retour=@CR) and $e=0 ) then ExitLoop
   $m= $i& " ==>" & $mes & " retour <" & $retour & "> " & $e & " " & choix_protocole()&"/"&$typeprotocole
   ;log_action("Bcl Receive : " & $m)
next
SetError($e)
Return $retour
EndFunc
;-----------------------------------------------------------------------
func choix_protocole()
   local $choixprotocole=0 ; 0=serie 1=tcp 2=essai tcp si nok serie
   ;$typeprotocole=0
;return $choixprotocole

 ;if $port=0 and StringRegExp($ip,"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|\d))") then $choixprotocole=1
 ;if $port>0 and StringRegExp($ip,"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|\d)") then $choixprotocole=2 ;non car ip toujours defini
 if $port=0 and StringRegExp($ip,"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})") then $choixprotocole=1
 if $port>0 and StringRegExp($ip,"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})") then $choixprotocole=2 ;non car ip toujours defini
return $choixprotocole
EndFunc
;----------------------------------------
func open_proto(ByRef $typeprotocole,$choixprotocole) ; protocole 0=serie, 1=tcp 2=essai tcp si nok essai serie
 local $hfileVP
   local $e=0
   ;local $choixprotocole
   ;if $choixprotocole="" then $choixprotocole=choix_protocole()
   Switch $choixprotocole
   case 0
      $typeprotocole=0
      $hfileVP=init_port_serie_vp()
      $e=@error
   case 1
      $typeprotocole=1
      $hfileVP=init_port_tcp_vp()
      $e=@error
   case 2
      $typeprotocole=1
      $hfileVP=init_port_tcp_vp()
      $e=@error
      if $hfileVP=0 then      ;tcp nok
         $typeprotocole=0
         $hfileVP=init_port_serie_vp()
         $e=@error
      EndIf
   case Else
      $e=-1
      $hfileVP=0
   EndSwitch
SetError($e)
if $e<>0 then $typeprotocole=-1
return $hfileVP
EndFunc
;----------------------------------------
func close_proto($hfileVP,$typeprotocole) ; protocole 0=serie, 1=tcp
   if $typeprotocole=-1 then Return
   if $typeprotocole=0 Then
      _CommAPI_ClosePort($hfileVP)
   Else
      TCPCloseSocket($hfileVP)
      TCPShutdown()
      OnAutoItExitUnRegister("OnAutoItExit")
   EndIf
return
EndFunc
;-----------------------------------------------------
Func OnAutoItExit()
    TCPShutdown() ; Close the TCP service.
EndFunc   ;==>OnAutoItExit
;-----------------------------------------------------------------------------------------
func hc6000($mes,$close_port=0)   ; $close_port=0 ouvrir/fermer handle dans la fonction sinon $close_port=handle ouvert préalablement
local $hfileVP
   local $flagerr2="",$i
   local $mesretour="",$retour,$e   ; $hfileVP ne doit pas etre local car si $close_port<>0 alors hfileVP defini avant appel (global)
  if $echo<>0 then $mesretour=$mes & " => "
  if not ($valeurtest  == "" ) then return $mesretour & $valeurtest
; par defaut closeport=0 ouvre et ferme le port apres la fonction
; attention @CR rajouté avant envoi
;msgbox(0,"port(s) disponible(s)",_CommListPorts(1))
Local $imax=5
 if StringRegExp($mes,"PWR ON") then $imax=30
FOR $i=1 to $imax ;(i=5 insuffisant pour pwr on)
if $echo<>0 then $mesretour=$mes & " "
if $close_port=0 then
   ;$typeprotocole=choix_protocole()
   $hfileVP=open_proto($typeprotocole,choix_protocole())
Else
   $hfileVP=$close_port
EndIf
;msgbox(0,"hc6000",$mes & " " & $hfileVP,1)
;log_action("func hc6000 lgn " &@ScriptLineNumber & " choixproto " & choix_protocole() & " handle " & $hfileVP)
if $hfileVP>0 then
;sleep(50)   ; pour etre sur de ne pas envoyer de commande trop rapproché //400
   transmit($hfileVP,$mes,$typeprotocole)
   $e=@error
   if $e<>0 then
         $mesretour=  "Erreur envoi " & $e &  "--" & $mes & "--"
   else
         sleep(150)   ; pour etre sur de ne pas envoyer de commande trop rapproché //400
         $retour=receive($hfileVP,$mes,$typeprotocole)
         $e=@error
         ;$retour=BinaryToString ($retour )
         ;$retour=StringReplace($retour,@CR,"")      ; &":" nok
         $retour=StringRegExpReplace($retour,"[:"&@CR&"]","")
         ;msgbox(0,@ScriptLineNumber, $hfileVP & " "& $retour & " -"&$mesretour & " -"&$e & "    " & $mes & $echo)   ;lamp=515:
      switch $e ;0 ok, <>0 erreur
      case 0
         if StringRegExp($retour , "=") then ;caractere trouvé retour d'un GET  (cmd?)
            if $echo=0 then   ; echo <>0 mode test , retour complet
               $mesretour=StringRegExpReplace($retour,".*[=:](.*)","\1")
               ;msgbox(0,"533", $retour & " -"&$mesretour )
            Else
               $mesretour= $mes & " " & $retour
            EndIf
         else                        ; retour d'un SET egalement  ERR
               $mesretour= $retour
               if $mesretour="ERR" then $mesretour= $mes & " " & $retour &  "=>" &hc6000("ERR?")
               ;;;;;;;;;;;; if $mesretour="" then traitemeent =""

               ;$mesretour= "Erreur " & $mes &  "-> " & $retour & " <-"
               ;SetError(1)
         endif
      case -2
         $mesretour= "Erreur timeOut sur "  & $mes &" " &$i &" fois"
         if StringRegExp($mes,"PWR ON") then sleep(1000)
         if StringRegExp($mes,"POPMEM") then
            $flagerr2 +=1
            $mesretour="="&$mes   &" err-2: "&$flagerr2   ; bug non reglé ?????
            ;SetError(-2)
         EndIf
      case else
            $mesretour= "Erreur lecture VP : " & $e  & "-> " & $retour & " <-"
            ;SetError(2)
      EndSwitch
   endif
   if $close_port=0 and $hfileVP>0 then close_proto($hfileVP,$typeprotocole) ;_Commcloseport()
Else   ;connection non etablie $hfileVP=0
      $e=-1
      $mesretour= "Erreur connection VP : (0=serie,1=reseau) " & $typeprotocole
      ;msgbox(0,"Erreur connection", $mesretour)
      ;$typeprotocole=1-$typeprotocole
endif

;if $mesretour<>"" and not StringRegExp($mesretour,"Erreur") then ExitLoop
if $e=0 then ExitLoop
Next
;log_action(@ScriptLineNumber & " hc6000 "& $i & " boucles, err. " & $e & " " & $mes & " <"& $mesretour & "> " & BinaryToString ($retour ))
SetError($e)
return $mesretour
endfunc
;--------------------------------------------------------------------------
func init_port_serie_vp()
 local $hfileVP,$e=0
   if $port=0 then
      SetError(-1)
      return 0 ;port=0 ssi forcer non serie
   EndIf
   Static $recursiv=0
   local $result,$setflow,$m
$result = '';used for any returned error message setting port
$setflow = 2;default to no flow control

;$port=select_port($port)
;sleep(100)   ; pour etre sur de ne pas envoyer de commande trop rapproché //400
$hfileVP=_CommAPI_OpenCOMPort($port,9600, 'NONE', 8, 0,0)   ;attention 1bit stop=0   ,xon=off   ;_CommSetport($port,$result,9600,8,'none',1,$setflow)
$e=@error
$m=""
if $recursiv=0 then
   if $e=-1 then $m=_WinAPI_GetLastErrorMessage()   ;cas $e=-1
   if $e<>0 then
      log_action(@ScriptLineNumber & " " & "init serie "&$port &" fail err: "&$e & " mes= "&$m)
      $recursiv=1
   EndIf
EndIf
SetError($e)
Return $hfileVP
EndFunc
;-----------------------------------------------------------------------------------------------------------------------------------------
func select_port($port=0)
;$port=1   port 2 ou 3 non discernable
if $port>=0 then return $port      ;chercher en auto ssi port<0 => result valeur ou 0 non trouvé
local $port_tmp="",$a,$aa,$i
$a=_CommAPI_GetCOMPorts()
$aa=_StringExplode($a,@cr)
;_ArrayDisplay($aa)
   for $i=0 to ubound($aa)-1
      if stringregexp($aa[$i],"\COM") then
      ;if stringregexp($aa[$i],"Prolific") then
      $port_tmp=stringregexp($aa[$i],"\(COM(\d{1,3})\)",1)
         if IsArray($port_tmp) then
            $port=$port_tmp[0]
            ExitLoop
         EndIf
         ;ConsoleWrite($port)
      EndIf
   Next
if $port<0 then $port=0
;$port=2   ; en dur car port 2 et 3 indiscernable
return $port
EndFunc
;------------------------------------------------------------------------------------------------------------
func init_port_tcp_vp()
 local $hfileVP,$e=0
   if $ip=0 then
      SetError(-1)
      return 0   ;ip=0 ssi forcer non tcp
   EndIf
local $data,$r
   OnAutoItExitRegister("OnAutoItExit") ; Register OnAutoItExit to be called when the script is closed.
   TCPStartup() ; Start the TCP service.
   $e=@error
      if $e<>0 Then
         SetError($e)
         return 0
      EndIf
   ;If @error Then msgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", "TCP start Could not connect, Error code: " )
$hfileVP=TCPConnect ($ip, 3629)
$e=@error
   if $e<>0 Then
      TCPCloseSocket($hfileVP)
      TCPShutdown()
      OnAutoItExitUnRegister("OnAutoItExit")
      $hfileVP=0
         ;SetError($e)
         ;Return $hfileVP
   Else
      ;$data="ESC/VP.net$10$03$00$00$00$00"
      $data="ESC/VP.net"&chr(16)&chr(03)&chr(00)&chr(00)&chr(00)&chr(00)
        $r=TCPSend ( $hfileVP, $data )   ;ouvrir liaison
      $r=TCPRecv ( $hfileVP, 25 )
      $r=BinaryToString ($r )
         ;;;;;;;;verifier reponse
      ;MsgBox($MB_SYSTEMMODAL, "", "Connection successful " & $r,1)
   EndIf
SetError($e)
return $hfileVP
EndFunc
;--------------------------------------------------------------
func xfr2($x,$ai,$af,$plage=256)   ; valeur firm $x (ai,af)=>valeur menu $y (bi,bf)
  local $y
   if  StringRegExp ($x,"\D") Then   ;existe caractere non chiffré
   $y=$x
   Else
   $y=$ai+floor((($x+1)*($af-$ai+1)/$plage))
   if $y>$af then $y=$af
   EndIf
return $y
EndFunc
;-----------------------------------------
Func br($champ,$brut=1)
   if $brut=1 Then
     return $champ & @CRLF
   Else
     return @CRLF
   EndIf
EndFunc
;-------------------------------------------------
func vpreseau()
local $itest,$rtest,$delai
   for $itest=1 to 20
      $delai=TimerInit()
      $rtest=hc6000("PWR?")
      log_action("test réseau " & $itest & " => " & $rtest ,true)
   if $typeprotocole=1 then ExitLoop
   $delai=1000-TimerDiff($delai)
   if $delai>0 then sleep($delai)
   ;msgbox(0,"Test", "test " & $itest & " => " & $rtest ,1)
   Next
return $itest
EndFunc
;================================TEST valeur firm $x (ai,af)=>valeur menu $y (bi,bf)=========================================
Func test($ai,$af,$plage)
local $c,$y0,$y
$c=""
$y0=-1
for $x=0 to 255
$y=xfr2($x,$ai,$af,$plage)   ; valeur firm $x (ai,af)=>valeur menu $y (bi,bf)
;consolewrite($x & " " & $y &@cr)
if $y=$y0 then
   $c&=";"
Else
   $c&=@CR & $y &" : "
EndIf
$c&=  StringFormat("%03d",$x)
$y0=$y
Next
msgbox(0,"",$c)
EndFunc
;---------------------------
func test_noclose()
local $conf,$hfileVP
$conf=""
   $hfileVP=open_proto($typeprotocole,choix_protocole())
   if $hfileVP=0 then return "Erreur port " & $port &" inacessible : (0=réseau)"
$conf &=  " Pwr  : " & hc6000("PWR?",$hfileVP)
$conf &=  " lamp=: " & hc6000("LAMP?",$hfileVP)
$conf &= @CRLF
close_proto($hfileVP,$typeprotocole)
$conf=StringReplace($conf,"Erreur timeOut sur","*")
return $conf
EndFunc
;---------------------------
func test_identmem()
local $saveport=$port, $saveip=$ip

$port=$saveport
$ip=0
$typeprotocole=-1
ident_mem(0)   ;noclose=0 mode ouvert/ferme
log_action("Ident " &"port" & $port & " ip " & $ip & " proto "& $typeprotocole & " 10 ")

$typeprotocole=-1
ident_mem(1)   ;noclose=1 mode continue
log_action("Ident " &"port" & $port & " ip " & $ip & " proto "&$typeprotocole & " 11 ")

$port=0
$ip=$saveip
$typeprotocole=-1

ident_mem(0)   ;noclose=0 mode ouvert/ ferme
log_action("Ident " &"port" & $port & " ip " & $ip & " proto "&$typeprotocole & " 20 ")
$typeprotocole=-1
ident_mem(1)   ;noclose=1 mode continue
log_action("Ident " &"port" & $port & " ip " & $ip & " proto "&$typeprotocole & " 21 ")

$port=$saveport
$ip=$saveip
$typeprotocole=-1
ident_mem(0)   ;noclose=0 mode ouvert/ferme
log_action("Ident " &"port" & $port & " ip " & $ip &" proto "& $typeprotocole & " 30 ")

$typeprotocole=-1
ident_mem(1)   ;noclose=1 mode continue
log_action("Ident " &"port" & $port & " ip " & $ip &" proto "& $typeprotocole & " 31 ")

$port=$saveport
$ip=$saveip
return "ok"
EndFunc
michelB2
 
Messages: 1725
Inscription Forum: 08 Sep 2003 9:42
Localisation: Nantes
  • online

Message » 29 Aoû 2018 13:33

Ouh là il est pas digeste ce langage ... Va falloir que je lise ça à tête reposée !

Cela dit, si quelqu'un peut faire le test avec telnet comme j'ai écrit plus haut, ce serait pas mal ;)
sierramike
 
Messages: 2175
Inscription Forum: 01 Aoû 2006 12:05
Localisation: Bas-Rhin
  • offline

Message » 29 Aoû 2018 13:37

c'est surtout que ces modules me servent à plein d'autres choses et notamment quand je fais une calibration du VP par colorHCFR, à sauvegarder automatiquement toute la configuration du VP pour la mettre dans la zone commentaire de colorHCFR. Ceci dit, j'avais bien dit que je l'avais écrit avec les pieds :ane:
michelB2
 
Messages: 1725
Inscription Forum: 08 Sep 2003 9:42
Localisation: Nantes
  • online

Message » 29 Aoû 2018 13:43

sierramike a écrit:
Si tu as une connexion qui s'ouvre et un invite qui commence par le double point ":", c'est bon signe !

Alors tente (avec le VP allumé), de taper "SOURCE?" (sans les guillemets) suivi de la touche "Enter".
S'il te répond:
SOURCE=21
:

Si ça marche, je saurai comment implémenter ça et je pourrai faire évoluer l'outil pour remplir ce besoin !


Je conseille plutôt la commande LAMP? ou PWR? qui sont les seules (de mémoire) commandes fonctionnant VP sous tension, toutes les autres réclamant un VP allumé.
remarque complémentaire
- le port série est accessible dès que le vp est sous tension (à la remarque ci dessus près)
- le réseau est disponible si le VP est allumé OU en veille active
michelB2
 
Messages: 1725
Inscription Forum: 08 Sep 2003 9:42
Localisation: Nantes
  • online

Message » 29 Aoû 2018 14:13

Oulà !
Je vais commencer par chercher un câble réseau suffisamment long, activer le port RJ45 de mon pchc, y coller une IP différente de mon réseau maison, et configurer l'IP projecteur.
Question : Est-ce que les prises ethernet sont "auto-retournantes" de nos jours, ou faut-il que j'ajoute un brin croisé sachant que je fais une connexion directe PCHC --> Projecteur sans passer par un switch ?
dr rotule
Contributeur HCFR 2022
 
Messages: 10399
Inscription Forum: 14 Nov 2004 0:23
Localisation: Seine et Oise
  • online


Retourner vers Logiciel PC Home-cinéma