I've been trying to get real-time data acquisition to run on my panasonic 1740. My client is a Windows 10 PC that I have written some software for. I have not been able to achieve a 3k byte/second transfer rate. The problem after much gnashing and grinding of teeth (and getting a sniffer running so I could see the actual transmission packets) is that my Windows client is not responding with it's half of the conversation (an empty PMU) quickly enough in many instances. This is backing up the queue on my device and causing it to fill and overrun. It looks like my device software is running fine and would certainly work if my client was more cooperative.
So here are some questions for the crowd:
I'm currently using a Pluggable BTLE dongle on my PC with the standard Windows 10 drivers. Does anyone have experience with any other combination? There doesn't appear to be much Windows talk here but I figured I'd ask anyway. I'd be happy to help with questions about Windows client side programming (particularly for the desktop... not the store stuff).
Has anyone tried real-time acquisition on Android devices or iPads? Were you able to get 'smooth' acquisitions at roughly the rate I'm trying to achieve? Real-time needs to be timely and needs to respond quickly enough most of the time to keep the queues from filling up.
It looks like BLE 4.2 is on the horizon which purports to allow larger packet sizes. This could help but I don't know if I can find a client that would comply. Is there some news on it's availability timeline?
thanks,
marco
You have to change the connection interval of the device , by default android has connection interval of 40ms , you can use gamp_param_upd command for that
In my setup i have used a custom made peripheral device ( much like usb dongle) and android phone as the central device. I was able to transmit data sampled at 50Hz ( size of 1 datapoint was 4byte) to android phone smoothly when connection interval is 12ms .
How is that different than the min/max values set on app_configuration_func()? Also, I don't see a function in the code that looks like that name so I'm not sure how to use it. Is there a way to query what the connection interval actually is?
Also, it seems like the Tx/Rx pairs (where slave is Tx) should come in the same connection event. In my case, they are not. What I don't know is how to decide how much of the connection interval is taken up by communication. Obviously, you can't send/receive more data than the connection interval supports. Is there a specification for how much of the interval is taken up by communication (e.g. for a 10ms connection interval, we can talk for 6ms of it).
thanks
marco
app_configuration_function does not set the connection parameters
use following in app_connection_func
struct gapc_param_update_cmd *req = KE_MSG_ALLOC(GAPC_PARAM_UPDATE_CMD,TASK_GAPC,TASK_APP,gapc_param_update_cmd);
req->operation = GAPC_UPDATE_PARAMS;
req->params.intv_min = 10;
req->params.intv_max = 10;
req->params.latency = 0;
req->params.time_out = 100;
ke_msg_send(req);
to know connection interval vs transmission speed refer to (UM-B-038) DSPS project
That did the trick. Thanks for your help. Looks like my real-time acquisition is working well.
marco