Partager via


Logiciel du Kit d’exercice HMD

Le kit HMD Exerciser comprend les outils suivants :

Outil Description
ConnExUtil.exe Outil en ligne de commande pour utiliser les fonctionnalités de HMD Exerciser
HmdKit.cs Classe C# qui peut être utilisée pour communiquer avec le HMD Exerciser depuis PowerShell ou des applications de test gérées

ConnExUtil.exe

ConnExUtil.exe est l’outil en ligne de commande pour le HMD Exerciser. L’outil est installé dans le cadre du package logiciel MUTT. Téléchargez-le ici

Les options de ligne de commande prises en charge sont décrites dans le tableau suivant.

Cas d’usage Option Description
Découverte de périphériques.
Lister tous les périphériques connectés à MUTT ConnEx-C.
/list Pour les périphériques connectés en USB, cette option liste le chemin d’instance du périphérique. Pour les périphériques audio connectés, il affiche Audio. Pour voir les périphériques audio, utilisez cette option en combinaison avec le paramètre /all. Liste avec un index basé sur 1 qui peut être utilisé pour l’entrée dans le paramètre /#.
Sélection de périphérique.
Sélectionner tous les périphériques connectés à MUTT ConnEx-C, y compris l’audio.
/all facultatif.
Sans ce paramètre, l’utilitaire adresse les périphériques connectés en USB. Utilisez ce paramètre uniquement si un périphérique audio connecté est utilisé. La découverte audio est chronophage et désactivée par défaut.
Sélection de périphérique.
Sélectionner un périphérique spécifique connecté à MUTT ConnEx-C « n ».
/# n facultatif.
L’entrée n est un index basé sur 1 des périphériques disponibles connectés à MUTT ConnEx-C qui peuvent être vus en utilisant le paramètre /list. Sans ce paramètre, le comportement par défaut est d’exécuter chaque commande sur toutes les cartes MUTT ConnEx-C.
Définir le port USB connecté à J1 /setPort p Basculer vers le port spécifié, p.
Connecter un port en spécifiant soit le numéro (1-4) soit le nom (J2, J3, J4, J6).
0 déconnecte tous les ports.
Obtenir le port USB actuel connecté à J1 /getPort Lire le port actuellement connecté.
Lire un port en spécifiant soit le numéro (1-4) soit le nom (J2, J3, J4, J6).
0 déconnecte tous les ports.
Définir le port HDMI connecté à J1 /setHdmiPort p Basculer vers le port spécifié p.
Connecter un port en spécifiant soit le numéro (1-2) soit le nom (J2, J3).
0 déconnecte tous les ports.
Obtenir le port HDMI actuel connecté à J1 /getHdmiPort Lire le port actuellement connecté.
Lire un port en spécifiant soit le numéro (1-2) soit le nom (J2, J3).
0 déconnecte tous les ports.
Lire les informations d’ampérage/voltage /volts
/amps
/version
Lire le voltage actuel.
Lire l’ampérage actuel.
Lire la version du périphérique.
Sélectionner le port HMD d’intérêt /SetHmd p Sélectionner le port HMD d’intérêt vers le HMD sur le port p.
Obtenir la luminosité actuelle d’un écran /DisplayBrightness p Obtenir la luminosité de l’écran p.
Obtenir la couleur d’un écran /DisplayColor p Obtenir la couleur de l’écran p.
Obtenir le volume RMS actuel du HMD /GetVolumeRms Obtenir le volume RMS actuel du casque.
Obtenir le volume de crête du HMD /GetVolumePeak Obtenir le volume de crête détecté pendant la fenêtre d’échantillonnage.
Obtenir le volume moyen du HMD /GetVolumeAvg Obtenir le volume moyen du HMD pendant la fenêtre d’échantillonnage.
Définir le nombre d’échantillons audio à prendre /SetVolumeSampleCount p Définir le nombre d’échantillons, p, à collecter avant que les commandes /GetVolume ne retournent.
Définir l’angle du servo spécifié /SetServoAngle p q Définir l’angle du servo p à q degrés.
Activer SuperSpeed /SuperSpeedOn Activer le SuperSpeed globalement pour les connexions actuelles et futures jusqu’à ce qu’une commande /SuperSpeedOff soit envoyée.
Le SuperSpeed est activé par défaut.
Si le SuperSpeed est désactivé et que le port 1 ou 2 est connecté, cette commande déclenche une reconnexion à SuperSpeed.
Désactiver le SuperSpeed /SuperSpeedOff Désactiver le SuperSpeed globalement pour les connexions actuelles et futures jusqu’à ce qu’une commande /SuperSpeedOn soit envoyée ou que l’appareil soit réinitialisé.
Si le SuperSpeed est activé et que le port 1 ou 2 est connecté, cette commande déclenche une reconnexion avec les lignes SuperSpeed désactivées.
Définir le délai de commande /setDelay t Définir le délai de commande t en secondes.
Définir un délai de commande retardera la prochaine commande /setPort ou /SuperSpeed{On/Off} de t secondes, où t varie de 0 à 99.
C’est un réglage ponctuel, seule la prochaine commande est retardée. L’envoi de plusieurs commandes avant l’expiration du temporisateur de retard n’est pas pris en charge.
Définir le délai de déconnexion en millisecondes /setDisconnectTimeout t Définir un délai de déconnexion pour la prochaine commande /setPort non nulle. Lors du prochain événement de connexion, le port ne restera connecté que pendant t millisecondes avant de se déconnecter. C’est un réglage ponctuel, seul le prochain événement de connexion sera automatiquement déconnecté.
La plage autorisée est de 0 à 9999 ms.
Commande par lot :
Mesures de puissance de sortie dans un fichier .csv.
/powercsv Ajoute les mesures de puissance actuelles et l’horodatage dans power.csv. La première exécution crée power.csv. Lors des exécutions suivantes, les données sont ajoutées à ce fichier.
Renommez ou supprimez le fichier pour démarrer une nouvelle capture de données. Chaque exécution ajoute une ligne au format suivant : <index>,<time>, <volts>,<amps>.
index est l’index du périphérique donné par /list, de sorte que plusieurs périphériques peuvent être surveillés simultanément.
time est l’horodatage brut en secondes.
volts et amps sont enregistrés à deux décimales.
Ces données peuvent être capturées sur de longues périodes et tracées dans une application de feuille de calcul, voir le script cxpower.cmd.
Commande par lot :
Exécuter le test unitaire des principales fonctionnalités
test/ Teste toutes les principales fonctionnalités du périphérique. Utilisez pour une validation de base des fonctionnalités du périphérique. Si cette commande échoue, veuillez redémarrer l’appareil et mettre à jour le firmware.
Commande par lot :
Démonstration de base de la séquence de commutation des ports.
/demo d Boucle sur tous les ports une fois, avec un délai de d secondes sur chaque port.
Écrit le numéro de port, les volts et les ampères sur chaque port dans demoresult.txt.

HmdKit.cs

Téléchargez le code HmdKit.cs depuis https://github.com/Microsoft/busiotools/tree/master/hmdvalidationkit

Utilisation

  • Incluez HmdKit.cs dans votre application d’automatisation.
  • Créez une instance de la classe HmdKit et appelez findHmdKitDevice pour scanner les ports COM à la recherche de HmdKits.
  • Vérifiez la valeur de retour de findHmdKitDevice ou la propriété IsPresent.
  • Utilisez les méthodes pour effectuer des actions telles que la connexion USB/HDMI ou la vérification de la luminosité de l’écran.
  • Si une méthode retourne false, l’appareil peut être dans un mauvais état ou le port COM peut être utilisé par une autre application.

Classes

public class HmdKit : IDisposable
Cette classe fournit un accès géré aux fonctionnalités du kit de validation HMD.

Membres privés

private const int HmdKitBaudRate = 9600;
Le taux de baud par défaut pour la communication série sur USB du kit HMD est de 9600 baud.

private const int RetryCount = 3;
Cette constante contrôle le nombre de tentatives d’envoi d’une commande.

private const string HmdKitVersion = "01";
Ceci est la chaîne codée en dur dans le kit de validation HMD pour la version. Cette constante doit correspondre à la version attendue du kit de validation HMD.

private const string HmdKitShieldType = "08";
Cela spécifie le type de shield détecté par le kit de validation HMD. La révision actuelle doit toujours détecter le type de shield « 8 ».

private const int ResponseTimeDefault = 500;
Ceci est le temps de réponse par défaut qui devrait fournir suffisamment de temps pour qu’une commande simple soit complétée. Utilisez-le pour les commandes qui n’impliquent pas d’attendre quelque chose à se produire sur le kit de validation HMD, comme prendre des échantillons audio ou attendre des données de capteur.

private const int ResponseTimeColorSensor = 2000;
Ce temps devrait fournir une fenêtre suffisante pour que le « temps d’intégration » du capteur de couleur TCS s’écoule et que le kit de validation HMD renvoie une valeur. Pour plus d'informations, consultez la documentation relative à TCS34725.

private int responseTimeGetVolume = 1000;
Ceci est une valeur non constante qui devrait fournir suffisamment de temps pour qu’une commande « GetVolume* » s’exécute pour le nombre d’échantillons spécifié. Elle changera chaque fois que la méthode SetVolumeSampleCount est utilisée.

private SerialPort serialPort;
Ceci est l’instance interne du port série attaché au kit de validation HMD.

private Dictionary<string, string> hmdKitCommand = new Dictionary<string, string>();
Ce dictionnaire traduit les noms conviviaux des commandes en leurs vraies chaînes de commande qui seront envoyées par câble au kit de validation HMD.

private object hmdKitLock = new object();
Ce verrou est défini lorsque le port série du kit de validation HMD est en cours d’accès.

private bool isPresent;
Ce membre privé suit l’état d’énumération du kit de validation HMD.

Constructeurs :

public HmdKit()
Initialise une nouvelle instance de la classe HmdKit. Cela mappe tous les noms conviviaux appropriés à leurs commandes série ainsi qu’initialiser l’état d’énumération à false.

Propriétés :

public bool IsPresent
Obtient une valeur indiquant si le kit de validation HMD est énuméré.

Méthodes :

public void Dispose()
Implémentation de l’interface Dispose pour éliminer les ressources gérées utilisées par la classe HmdKit.

public bool FindHmdKitDevice()
Vérifie tous les ports série ouverts pour les HMD Exercisers. Retourne true si un kit HMD valide est détecté, sinon retourne false.

public void SendCommand(string command, int responseTime, string parameter, out string output)
Envoie une commande au HMD Exerciser. La commande doit retourner dans responseTime millisecondes.

  • command - La commande à envoyer au kit HMD. La commande doit faire partie du dictionnaire hmdKitCommand.
  • responseTime - Le temps que la méthode SendCommand doit attendre une réponse. Cela peut être plus long pour les commandes qui prendront plus de temps.
  • parameter - Un paramètre pour les commandes qui définissent les ports USB, HDMI, etc. Cela sera ajouté à la commande et envoyé au kit HMD.
  • output - Retourne avec la réponse pour les commandes qui doivent obtenir des informations du kit HMD

public void SendCommand(string command, int responseTime, string parameter = null)
Envoie une commande au HMD Exerciser. La commande doit retourner dans le temps de réponse en millisecondes. Cette surcharge n’a pas de sortie et le paramètre est optionnel.

  • command - La commande à envoyer au kit HMD. La commande doit faire partie du dictionnaire hmdKitCommand.
  • responseTime - Le temps que la méthode SendCommand doit attendre une réponse. Cela peut être plus long pour les commandes qui prendront plus de temps.
  • parameter - Un paramètre optionnel pour les commandes qui définissent les ports USB, HDMI, etc. Cela sera ajouté à la commande et envoyé au kit HMD.

public void SetUsbPort(string port)
Définit le port USB connecté à J1.

  • port - Les ports peuvent être soit 0,1,2,3,4 ou selon la sérigraphie sur le PCB : J2,J3,J4, ou J6. La correspondance est J2=1 J3=2 J4=4 J6=3

public string GetUsbPort()
Obtient le port USB actuellement connecté sur le HMD Exerciser. Retourne le port USB actuellement connecté. « 0 » désigne qu’aucun port n’est connecté.

public void SetHdmiPort(string port)
Définit le port HDMI actuellement connecté.

  • port - Le port à connecter. Les valeurs valides sont J2/J3 ou 1/2. J2 et 1 sont équivalents et J3 et 2 sont équivalents.

public string GetHdmiPort()
Obtient l’index du port HDMI actuellement connecté sur le HMD Exerciser. Retourne le port HDMI actuellement connecté. « 0 » signifie qu’aucun port n’est connecté. Sinon, le port sera 2(J2) ou 1(J3)

public void SetServoAngle(string servo, string degrees)
Définit l’angle du servo spécifié en degrés.

  • servo - Le servo sur lequel définir l’angle. Voir la sérigraphie sur les connecteurs du servo du HMD Exerciser.
    • 1 Sélectionne « Servo 1 »
    • 2 Sélectionne « Servo 2 »
  • degrees - La position en degrés pour se déplacer dans le balayage du servo. Les degrés doivent être entre 45* et 135* pour la plupart des servos.

public void SetPresence(bool userPresent)
Définit la LED de spoofing de présence pour soit noyer le capteur de présence du HMD avec de la lumière (absence de présence utilisateur) soit simuler la présence utilisateur.

  • userPresent - L’état de présence utilisateur souhaité
    • true - La présence utilisateur est simulée en imitant le motif de réponse du capteur de présence IR.
    • false - La présence utilisateur est « retirée » en inondant le capteur de présence IR avec de la lumière IR, empêchant ainsi de voir la réflexion du motif de réponse.

public string GetDisplayBrightness(int display)
Obtient la luminosité de l’écran demandé en utilisant les capteurs de couleur TCS34725 sur la carte HMD.

Remarque

Cela est également affecté par le HMD qui est défini. Pour plus d'informations, consultez SetHmd.

Retourne la luminosité brute de l’écran indiqué. La luminosité est une magnitude entre 0 et 65535. Voir les documents du capteur de couleur TCS34725 pour plus d’informations.

  • display - L’écran à lire la couleur.
    • 0 - L’écran gauche du point de vue de porter le HMD
    • 1 - L’écran droit du point de vue de porter le HMD

public void GetDisplayColor(int display, out string red, out string green, out string blue)
Obtient les valeurs de couleur RVB pour l’écran spécifié. Les couleurs sont une magnitude entre 0 et 65535. Voir les documents du capteur de couleur TCS34725 pour plus d’informations.

  • display - L’écran à lire la couleur.
    • 0 - L’écran gauche du point de vue de porter le HMD
    • 1 - L’écran droit du point de vue de porter le HMD
  • red - Paramètre out qui retourne la magnitude de la composante rouge de la lumière reçue.
  • green - Paramètre out qui retourne la magnitude de la composante verte de la lumière reçue.
  • blue - Paramètre out qui retourne la magnitude de la composante bleue de la lumière reçue.

public void SetVolumeSampleCount(string samples)
Définit le nombre d’échantillons de volume à prendre avant de retourner un résultat de l’une des méthodes getVolume*. La valeur par défaut est de 2048 et le maximum est ULONG_MAX. Le taux d’échantillonnage de l’Arduino est fixé à 38.4kHz.

  • samples - Le nombre d’échantillons à collecter avant de retourner un niveau de volume. Une seconde est environ 40,960 échantillons.

public string GetVolumeRms()
Obtient le niveau de volume RMS sur la prise jack 1/8" du HMD exerciser sur un certain nombre d’échantillons. Le résultat sera compris entre 0 et 100*sqrt(2). Le nombre d’échantillons peut être configuré en utilisant setVolumeSampleCount. Les niveaux de volume sont amplifiés sur le PCB pour donner une réponse en pleine plage (0-5V) sur les signaux de niveau casque. Le niveau central est de 2.5V. Retourne le volume RMS sur la période d’échantillonnage donnée sur une échelle de 0-100*sqrt(2), car le volume n’est pas centré sur zéro.

public string GetVolumePeak()
Obtient le niveau de volume de crête sur la prise jack 1/8" du HMD exerciser sur un certain nombre d’échantillons. Le nombre d’échantillons peut être configuré en utilisant setVolumeSampleCount. Les niveaux de volume sont amplifiés sur le PCB pour donner une réponse en pleine plage (0-5V) sur les signaux de niveau casque. Le niveau central est de 2.5V. Retourne l’échantillon le plus élevé sur la période d’échantillonnage donnée sur une échelle de 0-100.

public string GetVolumeAvg()
Obtient le niveau de volume moyen sur la prise jack 1/8" du HMD exerciser sur un certain nombre d’échantillons. Le nombre d’échantillons peut être configuré en utilisant setVolumeSampleCount. Les niveaux de volume sont amplifiés sur le PCB pour donner une réponse en pleine plage (0-5V) sur les signaux de niveau casque. Le niveau central est de 2.5V. Retourne le volume moyen sur la période d’échantillonnage donnée sur une échelle de 0-100.

public void SetHmd(int hmd)
Définit le port HMD sur lequel les autres méthodes agiront. Si le HMD d’intérêt est branché sur P1, définissez le HMD à 1. Si le HMD d’intérêt est branché sur P2, définissez le HMD à 2.

  • hmd - Le HMD pour lequel vous souhaitez que les commandes de luminosité, présence et couleur s’appliquent.
    • 1 - Le HMD connecté au port P1
    • 2 - Le HMD connecté au port P2

public string Volts()
Obtient la tension VBus du port USB. Retourne la tension USB affichée sur l’écran LCD

public string Amps()
Obtient le courant tiré par le port USB actuellement sélectionné. Retourne le courant affiché sur l’écran LCD.

public void SuperSpeed(bool status)
Active ou désactive les ports superspeed. Passez true pour activer les lignes superspeed et false pour désactiver les lignes superspeed.

  • status - L’état souhaité des lignes SuperSpeed.
    • True - Connecté
    • False - Déconnecté

public void CommandDelay(int delay)
Définit un délai en secondes avant que la prochaine commande émise ne s’exécute.

  • delay - Le délai en secondes avant que la prochaine commande envoyée au kit HMD ne s’exécute.

public void DisconnectTimeout(int timeout)
Définit un délai d’attente pour que le port se déconnecte après l’envoi de la prochaine commande de connexion.

  • timeout - Le temps en millisecondes que le port attendra pour se déconnecter après l’envoi de la prochaine commande de connexion.

protected virtual void Dispose(bool disposing)
Implémentation de l’interface Dispose pour éliminer les ressources gérées utilisées par la classe HmdKit.

  • disposing - Si true, les ressources gérées sont éliminées.

Exemples de logiciels

ConnExUtil

Se connecter à un HMD sur le port HDMI/USB J2

connexutil.exe /SetPort 1
connexutil.exe /SetHDMIPort 1

Alternativement, utilisez le nom du port tel qu’imprimé sur la carte :

connexutil.exe /SetPort J2
connexutil.exe /SetHDMIPort J2 

Déconnecter tous les ports HDMI/USB

connexutil.exe /SetPort 0
connexutil.exe /SetHDMIPort 0

Sélectionner le HMD connecté au port P1

connexutil.exe /SetHmd 1

Obtenir la luminosité de chaque écran

connexutil.exe /DisplayBrightness 0
connexutil.exe /DisplayBrightness 1

HmdKit.cs

HmdKit kit = new HmdKit();
kit.FindHmdKitDevice();
if(kit.IsPresent)
{
Console.WriteLine("Found HMD Kit");
for(int i = 0; i <= 4; i++)
{
        kit.SetUsbPort(i.ToString());
        if(i < 3)
        {
        kit.SetHdmiPort(i.ToString());
        }
}
kit.SetHdmiPort("1");
kit.SetUsbPort("1");
kit.SetPresence(true);
kit.SetServoAngle("1", "90");
kit.SetVolumeSampleCount("2048");
kit.SuperSpeed(true);

String r, g, b = "";
Console.WriteLine("\nSelecting HMD 1");
kit.SetHmd(1);
Console.WriteLine("Display 0 brightness: " + kit.GetDisplayBrightness(0));
kit.GetDisplayColor(0, out r, out g, out b);
Console.WriteLine("Display 0 red:" + r + " green:" + g + " blue:" + b);
Console.WriteLine("Display 1 brightness: " + kit.GetDisplayBrightness(1));
kit.GetDisplayColor(1, out r, out g, out b);
Console.WriteLine("Display 1 red:" + r + " green:" + g + " blue:" + b);

Console.WriteLine("\nSelecting HMD 2");
kit.SetHmd(2);
Console.WriteLine("Display 0 brightness: " + kit.GetDisplayBrightness(0));
kit.GetDisplayColor(0, out r, out g, out b);
Console.WriteLine("Display 0 red:" + r + " green:" + g + " blue:" + b);
Console.WriteLine("Display 1 brightness: " + kit.GetDisplayBrightness(1));
kit.GetDisplayColor(1, out r, out g, out b);
Console.WriteLine("Display 1 red:" + r + " green:" + g + " blue:" + b);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}