The service and characteristic identifiers are UUIDs. These are represented in twin-hex. They must be either 4 characters, 8 characters or 32 characters long.
The configuration table contains the following keys:
-`name` The name to use to advertise the gadget
-`services` This is a list of tables that define the individual services. The primary service is the first service. Many examples will only have a single service.
-`uuid` The UUID of the service. This is a 16 byte string (128 bits) that identifies the particular service. It can also be a two byte string for a well-known service.
-`characteristics` This is a list of tables, where each entry describes a characateristic (attribute)
### Characteristic table
The characteristic table contains the following keys:
-`uuid` The UUID of the characteristics. This can be either a 16 byte string or a 2 byte string that identifies the particular characteristic. Typically, 2 byte strings are used for well-known characteristics.
-`type` This is the optional type of the value. It has the same value as a unpack code in the `struct` module.
-`value` This is the actual value of the characteristic. This will be a string of bytes unless a `type` value is set.
-`read` This is a function that will be invoked to read the value (and so does not need the `value` entry). It should return a string of bytes (unless `type` is set)
-`write` This is a function that will be invoked to write the value (and so does not need the `value` entry). It is given a string of bytes (unless `type` is set)
If the `type` value converts a single item, then that will be the value that is placed into the `value` element. If it converts multiple elements, then the elements will be placed into an array that that will be plaed into the `value` element.