module ble;

interface V23BLE {
    // Exports the given service id with the attributes specified. The
    // keys should be string forms of 128-bit uuids.  The values can be anything.
    // Returns a handle to the service that can be used to stop the Advertisement.
    Advertise(Advertisement adv) => (PluginStopper Handler);

    // Scans for all services which match the given attributes.  The key in
    // the attribute map should be 128-bit uuids in human readable format.
    // All services that have an exact match for the given attributes are
    // returned.  Attributes not specified in attributes will not be used
    // in the match.  Calls handler with each new service found.  Returns
    // a handle to the Scan operation so it can be canceled when no longer
    // relevant
    Scan(array<uint8>? id, map<string, string> attributes, PluginScanHandler handler) => (PluginStopper Handler);
};

struct Advertisement {
    array<uint8> ServiceId;
    Service Service;
};

struct Service {
  array<uint8> InstanceId;
  map<string, string> Attributes;
};

interface PluginScanHandler {
    Found(Advertisement s);

    Lost(Advertisement s);
};

interface PluginStopper {
    Stop();
};
