Просто нашел это решение ... Я попробовал, мне понравилось ..
Работает для междоменных iframe для рабочего стола и мобильных устройств!
Не знаю, fulproof yet
window.addEventListener('blur',function(){
if(document.activeElement.id == 'CrossDomainiframeId'){
//do something :-)
}
});
Счастливое кодирование
Вам необходимо указать тип вместе с составным литералом C99
.
typedef struct conn_s { /*...*/ } conn_t;
#define ADV_1M_LEGACY_CONNECTABLE (conn_t){ /*...*/ }
int main() {
conn_t conn = ADV_1M_LEGACY_CONNECTABLE;
}
Это слишком большой комментарий, поэтому это псевдо-ответ.
Вот приближение к MCVE - со значительной проблемой, что, когда я компилирую его, я не вижу ошибку, которую вы видите.
arm31.cpp
#include <cstdint>
typedef struct
{
uint32_t interval;
uint16_t duration;
uint8_t max_adv_evts;
uint8_t secondary_phy;
} ble_gap_adv_params_t;
typedef struct
{
ble_gap_adv_params_t adv_params;
uint16_t adv_program;
} ble_gap_adv_data_t;
#define ADV_1M_LEGACY_CONNECTABLE (ble_gap_adv_params_t) { \
.interval = 29, \
.duration = 31, \
.max_adv_evts = 0, \
.secondary_phy = 0, \
}
static uint8_t advertising_init_common(ble_gap_adv_data_t *ble_gap_adv_data,
ble_gap_adv_params_t adv_params)
{
uint8_t advHandle = 19;
ble_gap_adv_data->adv_params = adv_params;
ble_gap_adv_data->adv_program = 31963;
return advHandle;
}
#include <iostream>
int main()
{
ble_gap_adv_data_t m_adv_data;
uint8_t m_adv_handle = advertising_init_common(&m_adv_data,
ADV_1M_LEGACY_CONNECTABLE);
std::cout
<< "handle: " << m_adv_handle << ", "
<< "program: " << m_adv_data.adv_program << ", "
<< "interval: " << m_adv_data.adv_params.interval << ", "
<< "duration: " << m_adv_data.adv_params.duration << ", "
<< "maxadvev: " << m_adv_data.adv_params.max_adv_evts << ", "
<< "secondph: " << m_adv_data.adv_params.secondary_phy << "\n";
}
$ g++ -O3 -g -std=c++11 -Wall -Wextra -Werror -c arm31.cpp
$
, которая не выдает предупреждений (на Mac с MacOS 10.14.2 Mojave, используя home- встроенный G ++ 8.2.0). Чтобы получать предупреждения, мне также нужно использовать -pedantic
:
$ g++ -O3 -g -std=c++11 -Wall -Wextra -Werror -pedantic -c arm31.cpp
arm31.cpp: In function ‘int main()’:
arm31.cpp:18:9: error: C++ designated initializers only available with -std=c++2a or -std=gnu++2a [-Werror=pedantic]
.interval = 29, \
^
arm31.cpp:39:52: note: in expansion of macro ‘ADV_1M_LEGACY_CONNECTABLE’
ADV_1M_LEGACY_CONNECTABLE);
^~~~~~~~~~~~~~~~~~~~~~~~~
arm31.cpp:19:9: error: C++ designated initializers only available with -std=c++2a or -std=gnu++2a [-Werror=pedantic]
.duration = 31, \
^
arm31.cpp:39:52: note: in expansion of macro ‘ADV_1M_LEGACY_CONNECTABLE’
ADV_1M_LEGACY_CONNECTABLE);
^~~~~~~~~~~~~~~~~~~~~~~~~
arm31.cpp:20:9: error: C++ designated initializers only available with -std=c++2a or -std=gnu++2a [-Werror=pedantic]
.max_adv_evts = 0, \
^
arm31.cpp:39:52: note: in expansion of macro ‘ADV_1M_LEGACY_CONNECTABLE’
ADV_1M_LEGACY_CONNECTABLE);
^~~~~~~~~~~~~~~~~~~~~~~~~
arm31.cpp:21:9: error: C++ designated initializers only available with -std=c++2a or -std=gnu++2a [-Werror=pedantic]
.secondary_phy = 0, \
^
arm31.cpp:39:52: note: in expansion of macro ‘ADV_1M_LEGACY_CONNECTABLE’
ADV_1M_LEGACY_CONNECTABLE);
^~~~~~~~~~~~~~~~~~~~~~~~~
arm31.cpp:22:1: error: ISO C++ forbids compound-literals [-Werror=pedantic]
}
^
arm31.cpp:39:52: note: in expansion of macro ‘ADV_1M_LEGACY_CONNECTABLE’
ADV_1M_LEGACY_CONNECTABLE);
^~~~~~~~~~~~~~~~~~~~~~~~~
cc1plus: all warnings being treated as errors
Пожалуйста, возьмите этот исходный код и скомпилируйте его в своей системе. Затем повозитесь с ним, пока он не воспроизведет ошибку, которую вы видите. Затем опубликуйте этот исправленный код для редактирования вопроса.