Hermes SDK Documentation
INTRODUCTION

Welcome to the documentation for the Hermes SDK! We've designed it to allow you to get data off the Manus Gloves as quickly and easily as possible.

A few things to note:

  • This documentation is geared specifically towards the C++ SDK - for the documentation of the Unity plugin, you'll have to go elsewhere.
  • When in doubt, reference the test implementation. This should be enough to get you through most problems.
  • This documentation is, as with all software projects, a work in progress. If you have questions or problems to report, please e-mail us at suppo.nosp@m.rt@m.nosp@m.anus-.nosp@m.vr.c.nosp@m.om.

Good luck!

A QUICK INTRO

While its fine to jump straight into the documentation, if you're completely new to the system there are a few quick points of explanation that might be helpful to get familiar with, first.

Our company is called Manus. Our software is called Hermes. Getting the data from the gloves to your super fancy, world-changing application quickly and efficiently turns out to be a non-trivial task. We've employed none other than the Greek messenger of the Gods himself, Hermes, to do the job for you.

To pass data around, we use Google Protocol Buffers. This has a number of implications for your understanding of what's going on here:

  • We've provided you with (for the most part) the very same protocol definition files that we use internally. This makes perfect sense, because they govern how the messages that get passed between the gloves and Hermes, and Hermes and you, are structured. Nearly every bit of communication you have with Hermes is going to involve protocol definitions in some capacity. They take a moment of getting used to, but once you're comfortable you'll appreciate having such a clearly defined message schema.
  • When in doubt, reference our example to see how to construct/deconstruct messages. You could try to look straight at the generated protocol files as well, but that's not nearly as fun. There's a bit of nuance to it, so don't be surprised if you get an error the first or second time.

Hermes communicates with you through a connection CareTaker, which is in charge of session maintenance and delivery/sending of data.

Hermes instances find each other (and also you) through the Hive, which is designed to facilitate easy connection without having to worry about port setup. There were days when you would get errors because the port that you were trying to use was also being used by another program - no longer!

PROCESS BREAKDOWN

There's a lot going on under the hood to get all your precious glove data to you safely, but very little of it should demand your attention. The most important thing you need to concern yourself with is the setup of the connection to Hermes. For that, point yourself to test.cpp, specifically the Connect() function. A few important things happen here.

  1. We set up a Hive, and tell it to find a local Coordinator. This more or less tells the Hive to looks for instances of Hermes (local to your PC) that are broadcasting their existence. When we do that we pass some callback functions to be executed when these instances are found or removed. The important one here in onLocalNodeFound() - we'll come back to it in two steps!
  2. We also set up a connection CareTaker, and we pass it callback functions as well. These are all important, but probably the one you'll end up doing the most work on is onDeviceData(). This gets called every time new data comes in from the gloves (in protobuf format!) and you can use it to do whatever you want with that data.
  3. If you look at onLocalNodeFound(), you can see that at the very end we tell the CareTaker to connect. That officially sets up our session with Hermes, after which point we begin receiving glove data.

That's it, for the most part! As you get started, feel free to crib callback functions and such straight from the test, and then replace them bit by bit to customize them to your use case.

RUNNING THE SAMPLE PROJECT

  1. Unzip the downloaded SDK folder
  2. Run cpp\Generate_vs2019 or cpp\Generate_vs2017 (whichever is appropriate for your version of visual studio)
  3. Open cpp\Generated\Solution\HermesSdk.sln
  4. Build in Visual Studio
  5. Run Hermes Host or Hermes Tray (from the Hermes application folder)
  6. Run the sample project. You can either debug in visual studio or run cpp\Generated\Output\Debug\x64\Hermes_Sample.exe

SUPPORT

Again - if you have questions please get in touch with us at suppo.nosp@m.rt@m.nosp@m.anus-.nosp@m.vr.c.nosp@m.om.

Godspeed!