GATT, at the lowest level, is a spec that allows you to access what is substantially a key-value store over bluetooth. It was part of the 4.0 spec.
Keys are 16-bit "handles", values are arbitrary byte bags. Handles may change between connections and are not considered stable, which is why there is a higher level of abstraction used. Each K-V pair is called an attribute.
On top of that simple kv-store, are built higher-level concepts like characteristics and services. A characteristic, for example, is made of a few attrbutes with sequential handles: a "header" attrbiute that declares that this is a "characteristic" and states how many next handles are part of it, a "name" attribute, which is a UUID, a "permissions" attribute, a "value" attrbiute, and possibly a "control" attribute that allows one to ask to be notified of value changes.
A "service" is a collection of attributes which describe one cohesive "thing"/feature/whatever.
Some "services" are defined in the spec and any device implementing them properly can talk to any device expecting to access them. But many devices use "manufacturer specific" services, mostly defeating the point.
GATT also specifies a number of operations to perform searches on this database, such as by-uuid, by-type, etc
I had a play with BLE a few years ago but found the entry point too high to get started with - do you know of any high-level introductions to the terminology and concepts (possibly illustrated or animated, as that seems make the data flows easier to grasp)?
Keys are 16-bit "handles", values are arbitrary byte bags. Handles may change between connections and are not considered stable, which is why there is a higher level of abstraction used. Each K-V pair is called an attribute.
On top of that simple kv-store, are built higher-level concepts like characteristics and services. A characteristic, for example, is made of a few attrbutes with sequential handles: a "header" attrbiute that declares that this is a "characteristic" and states how many next handles are part of it, a "name" attribute, which is a UUID, a "permissions" attribute, a "value" attrbiute, and possibly a "control" attribute that allows one to ask to be notified of value changes.
A "service" is a collection of attributes which describe one cohesive "thing"/feature/whatever.
Some "services" are defined in the spec and any device implementing them properly can talk to any device expecting to access them. But many devices use "manufacturer specific" services, mostly defeating the point.
GATT also specifies a number of operations to perform searches on this database, such as by-uuid, by-type, etc