Using the DSPS Device demo provided I am trying to add SUOTA.
I've followed the Training_06_suota_example_v1.1_0.pdf and also thehttps://support.dialog-semiconductor.com/guide/faq-da1458x-software-peri...
I've got everything to compile and I've also checked the prox reporter source code to compare.
However after everything compiles and loaded to test, I no longer see DSPS advertised in the Dialog DSPS app or see it in the SUOTA app.
The code seems to be running because I can see the quadrature encoder I wrote working and because I can see it on a different BLE scanning app and can connect and see its advertising data.
I think the problem is the
#定义用户_ADVERTISE_DATA "\x11\x07\xb7\x5c\x49\xd2\x04\xa3\x40\x71\xa0\xb5\x35\x85\x3e\xb0\x83\x07"\
ADV_UUID_SUOTAR_SERVICE
I don't think I understand how to format the USER_ADVERTISE_DATA correctly. "\x11\x07\xb7\x5c\x49\xd2\x04\xa3\x40\x71\xa0\xb5\x35\x85\x3e\xb0\x83\x07" this is the default DSPS string.
Thank you for your help!
I think I"m starting to get it, I edited to add the ADV_UUID_SUOTAR_SERVICE ( "\xF5\xFE" /* SUOTAR Service */) at the end of the define and changed the size from 0x11 to 0x13
#定义用户_ADVERTISE_DATA "\x13\x07\xb7\x5c\x49\xd2\x04\xa3\x40\x71\xa0\xb5\x35\x85\x3e\xb0\x83\x07\xF5\xFE"
I also added it to:
#define SPS_SERVICE_UUID {0xb7, 0x5c, 0x49, 0xd2, 0x04, 0xa3, 0x40, 0x71, 0xa0, 0xb5, 0x35, 0x85, 0x3e, 0xb0, 0x83, 0x07, 0xF5, 0xFE}
#define SPS_SERVER_TX_UUID {0xb8, 0x5c, 0x49, 0xd2, 0x04, 0xa3, 0x40, 0x71, 0xa0, 0xb5, 0x35, 0x85, 0x3e, 0xb0, 0x83, 0x07, 0xF5, 0xFE}
#define SPS_SERVER_RX_UUID {0xba, 0x5c, 0x49, 0xd2, 0x04, 0xa3, 0x40, 0x71, 0xa0, 0xb5, 0x35, 0x85, 0x3e, 0xb0, 0x83, 0x07, 0xF5, 0xFE}
#define SPS_FLOW_CTRL_UUID {0xb9, 0x5c, 0x49, 0xd2, 0x04, 0xa3, 0x40, 0x71, 0xa0, 0xb5, 0x35, 0x85, 0x3e, 0xb0, 0x83, 0x07, 0xF5, 0xFE}
However, when I try to compile I get these errors:
..\..\common\src\profiles\spss\user_sps_config.h(94): error: #146: too many initializer values
static const struct att_uuid_128 sps_service = {
PS_SERVICE_UUID};
searching further I see a define in att.h (ATT_UUID_128_LEN) I added 2 bytes to it and it compiles and works. I can see the device in the DSPS app. Nothing on the SUOTA app though.
Edit:
The app seems unstable, it showed up once on the advertisement, but now it just crashes after system_init() in arch_system.c
Changing ATT_UUID_128_LEN back to 0x0010 fixed the crashing problem. Need to figure out how to add the SUOTA adv string and not crash now...
...
Hi dlo,
The SUOTA is a profile, and the DSPS is a demo project, so in order to have SUOTA functionality to the DSPS what you will have to do to add the SUOTA profile to the DSPS demo, besides the OTA project there are also some guidelines for this on the FAQ in the Software Implementation section (How to add the SUOTA profile to my SDK application) for the 5.0.3 SDK which is quite identical with the 5.0.4 SDK. You will be able to find the FAQ section on the top level menu of the support site, please check the link below:
https://support.dialog-semiconductor.com/guide/frequently-asked-questions
From what you mentioned in you post, I suppose that you have added the SUOTA profile to the DSPS project, before starting the procedure described in the tutorial. Could you please share hot did you define the advertising data? Also, it would be very helpful to indicate a little bit clear which is your issue? You are able to have SUOTA but you don’t know how to add it into the advertising string?
Thanks, PM_Dialog
Hello,
I tried going over the FAQ before starting the SUOTA, but it didn't seem to apply to the DA14586 since it uses SUOTAR instead of SPOTAR, and I didn't find spotar files int he SDK folder of the DSPS project. I found the #define in the user config module.h file and it was already included. So I added the suotar files to the project in KEIL and looked at the SUOTAR example in the proxy reporter in the SDK example to make sure things were as close as possible.
I am thinking the SUOTAR is implemented in the code correctly, but not advertising for the SUOTA app to see. What I tried to explain above is how I tried to place the advertising:
This is the original DSPS advertising string:
#定义用户_ADVERTISE_DATA "\x11\x07\xb7\x5c\x49\xd2\x04\xa3\x40\x71\xa0\xb5\x35\x85\x3e\xb0\x83\x07"
This is the modified one to add ADV_UUID_SUOTAR_SERVICE
#定义用户_ADVERTISE_DATA "\x13\x07\xb7\x5c\x49\xd2\x04\xa3\x40\x71\xa0\xb5\x35\x85\x3e\xb0\x83\x07\xF5\xFE"
Compiling this worked, but didn't show anything on the app either.
Then I also added it to:
#define SPS_SERVICE_UUID {0xb7, 0x5c, 0x49, 0xd2, 0x04, 0xa3, 0x40, 0x71, 0xa0, 0xb5, 0x35, 0x85, 0x3e, 0xb0, 0x83, 0x07, 0xF5, 0xFE}
#define SPS_SERVER_TX_UUID {0xb8, 0x5c, 0x49, 0xd2, 0x04, 0xa3, 0x40, 0x71, 0xa0, 0xb5, 0x35, 0x85, 0x3e, 0xb0, 0x83, 0x07, 0xF5, 0xFE}
#define SPS_SERVER_RX_UUID {0xba, 0x5c, 0x49, 0xd2, 0x04, 0xa3, 0x40, 0x71, 0xa0, 0xb5, 0x35, 0x85, 0x3e, 0xb0, 0x83, 0x07, 0xF5, 0xFE}
#define SPS_FLOW_CTRL_UUID {0xb9, 0x5c, 0x49, 0xd2, 0x04, 0xa3, 0x40, 0x71, 0xa0, 0xb5, 0x35, 0x85, 0x3e, 0xb0, 0x83, 0x07, 0xF5, 0xFE}
However, when I try to compile I get these errors:
..\..\common\src\profiles\spss\user_sps_config.h(94): error: #146: too many initializer values
static const struct att_uuid_128 sps_service = {
PS_SERVICE_UUID};
searching further I see a define in att.h (ATT_UUID_128_LEN) I added 2 bytes to it and it compiles. However after this, it crashes when I try to run. The debugger shows me it's in one of the error handlers.
Attached is my project files without including the SDK files.
谢谢你的支持!
Hi dlo,
The key information for SUOTA application is to check is the complete list of 16bits service UUID, to see whether it's 0xFEF5, otherwise the device will be filtered off.
So, please update the advertising data as follow:
#定义用户_ADVERTISE_DATA "\x11\x07\xb7\x5c\x49\xd2\x04\xa3\x40\x71\xa0\xb5\x35\x85\x3e\xb0\x83\x07\以x03 \ x03 \ xF5 \ xFE"
Adding complete list of 16bits service UUID: "0x03, 0x03, 0xF5, 0xFE" to the advertising data.
Thanks, PM_Dialog
Thank you! That was very informative.