No need, I've gone a-hunting on the internet, and I think I've got a grip on the issues now.
The Classic Bluetooth BR/EDR SPP (Serial Port Profile) interface looks like a straightforward data pipe - stick a byte in one end, and it (eventually) pops out the other end. Ditto for a bunch of bytes. There are delays and timing misalignments introduced when the bytes are grouped into packets for transmission over radio (or USB) but generally those issues are small enough to not cause a problem, and thus most people aren't even aware they exist.
The Bluetooth BLE GATT (Generic ATTribute) Profile interface looks like a industrial control panel, with gauges and controls and on/off indicators and switches and buttons.
A data pipe is great if all you need to do is exchange one reading (or a few on/off states) - as long as it fits within the 7-or-8 bit character size that the pipe uses, you just put that character in the pipe and it comes out the other end and everybody's happy... as long as they know how to interpret that character is, eg, which bits are what switches, is the numeric reading signed or unsigned, what units is it in.
Now imagine that you're implementing a tv remote (or airconditioner, or microwave oven, or...) Even the most basic tv has controls for volume, brightness, contrast, input selection and channel selection, and an on/off switch. You'll be needing more than 8 bits for all that, and so you have to implement a protocol which usually involves grouping characters into larger units (packets) and then you need to reassemble the individual incoming characters at the other end of the pipe into packets, and if there's possibly noise in the pipe that might cause data errors, then we'd better checksum the data, and make sure we can sync up again if we lose track of whereabouts the packets are in that incoming character stream. And every programmer has their own ideas about how this is best done, and the end result is... well, a significant component of my last long-term job was writing serial interfaces that linked our equipment up to a variety of different automotive test and measurement devices.
The GATT Profile does away with all that protocol mishmash, and makes it possible for software to intelligently communicate with appropriate equipment, with no configuration (well, other than if there are multiple plausibly-appropriate equipment visible, in which case the operator might need to designate *which* one to communicate with). The GATT Profile presents the equipment as a bunch of characteristics: a characteristic is like a single knob or button or selector or switch or gauge or number display or indicator light. So for the basic tv example, there would be 6 characteristics: volume, brightness, contrast, input and channel selection, and on/off switch. Characteristics can be inputs (readable), outputs (writeable) or both. And the readable inputs can be set to automatically send updates when they change (notifications) with optional confirmation that the update didn't get lost on the way (indications).
Now the best bit: the Bluetooth device can tell you what characteristics are available. Better yet, it can even describe them for you, tell you what
format the raw reading is in (signed, unsigned, 8 bit, 16 bit, 32 bit, integer, floating point), what the scaling is (eg volume might be 0..10 on a guitar amplifier and 0..100 on a radio) and even what it is (pressure, weight, time, voltage) and the
units (%, dB, arbitrary number), and what it's generally for (main, left, right, rear, front). No more custom protocols, just link up what-you-need with what-is-available.
I don't know about you, but I kinda like the possibilities this opens up.
GATT
services are just a way of grouping related characteristics. Other than using them as a stepping stone to get to the individual characteristics, you can usually ignore them.
Each GATT characteristic should have some
descriptors that tell you about the characteristic. Most people ignore them, and work on the basis that a characteristic with a given UUID is unlikely to change format (having said that, I have pressure sensors that, for the same characteristic UUID, use different scalings - and what a pain that is)
Right, now you're probably thinking:
this is all great, but it doesn't help me with my current problem.
But it does. Before we can attack a problem, first we have to understand it. What the HC-08 people have done is shoehorned a data pipe aka serial link (because that's what people are used to and understand) onto BLE / GATT (because it allows much lower power requirements = longer battery life). There is an obvious way to do that, which immediately runs into some obvious problems, which have a variety of obvious solutions, and we just have to work out which solution they've gone for.
Like you, I am surprised this serial-comms-over-GATT doesn't seem to rate a mention on the B4A forums (until now). On the bright side, once our combined Russian-Australian efforts crack this little nut, then future users of that device will shower us with gratitude. Well, maybe not... but let's do it for the excitement of being pioneers anyway.
I have to go do other things now, but... it looks like you were on the right track looking at the 0000ffe1 characteristic, confirmed by
this clue here, and so if you could start reading that characteristic repeatedly whilst sending chunks of data from your computer, and perhaps try using notifications and indications, see if that helps, and experiment more in nRF Connect to see if you can suss out why that app is able to read it using the generic interface, and see if you can glean any information about the shoehorning from the terminal app used in the Youtube video, then I am super-keen to know what you discover.