diff --git a/README.md b/README.md index fd5a1932d..889ba52d5 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ contributions via Github [Pull Requests](pulls) in the `develop` branch. ## License - Copyright 2019-2023 INGCHIPS + Copyright 2019-2024 INGCHIPS Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/bundles/exp/ING9168xx/apis.json b/bundles/exp/ING9168xx/apis.json index 008a94081..a34b10976 100644 --- a/bundles/exp/ING9168xx/apis.json +++ b/bundles/exp/ING9168xx/apis.json @@ -1,399 +1,414 @@ { - "att_dispatch_client_can_send_now": "0x020044bd", - "att_dispatch_client_request_can_send_now_event": "0x020044c3", - "att_dispatch_register_client": "0x020044c9", - "att_dispatch_register_server": "0x020044dd", - "att_dispatch_server_can_send_now": "0x020044f1", - "att_dispatch_server_request_can_send_now_event": "0x020044f7", - "att_emit_general_event": "0x020045a9", - "att_server_can_send_packet_now": "0x02004ce1", - "att_server_deferred_read_response": "0x02004ce5", - "att_server_get_mtu": "0x02004cfd", - "att_server_indicate": "0x02004d75", - "att_server_init": "0x02004df9", - "att_server_notify": "0x02004e35", - "att_server_register_packet_handler": "0x02004f4d", - "att_server_request_can_send_now_event": "0x02004f59", - "att_set_db": "0x02004f75", - "att_set_read_callback": "0x02004f89", - "att_set_write_callback": "0x02004f95", - "bd_addr_cmp": "0x02005165", - "bd_addr_copy": "0x0200516b", - "bd_addr_to_str": "0x02005175", - "big_endian_read_16": "0x020051ad", - "big_endian_read_32": "0x020051b5", - "big_endian_store_16": "0x020051c9", - "big_endian_store_32": "0x020051d5", - "btstack_config": "0x02005335", - "btstack_memory_pool_create": "0x02005475", - "btstack_memory_pool_free": "0x0200549d", - "btstack_memory_pool_get": "0x020054fd", - "btstack_push_user_msg": "0x02005565", - "btstack_push_user_runnable": "0x02005571", - "btstack_reset": "0x0200557d", - "char_for_nibble": "0x020058b3", - "eTaskConfirmSleepModeStatus": "0x02005c65", - "gap_add_dev_to_periodic_list": "0x020062d5", - "gap_add_whitelist": "0x020062e5", - "gap_aes_encrypt": "0x020062f1", - "gap_clear_white_lists": "0x02006329", - "gap_clr_adv_set": "0x02006335", - "gap_clr_periodic_adv_list": "0x02006341", - "gap_create_connection_cancel": "0x0200634d", - "gap_default_periodic_adv_sync_transfer_param": "0x02006359", - "gap_disconnect": "0x02006371", - "gap_disconnect_all": "0x0200639d", - "gap_ext_create_connection": "0x020063dd", - "gap_ext_create_connection_v2": "0x02006489", - "gap_get_connection_parameter_range": "0x02006589", - "gap_le_read_channel_map": "0x020065c5", - "gap_periodic_adv_create_sync": "0x02006631", - "gap_periodic_adv_create_sync_cancel": "0x02006655", - "gap_periodic_adv_set_info_transfer": "0x02006661", - "gap_periodic_adv_sync_transfer": "0x02006671", - "gap_periodic_adv_sync_transfer_param": "0x02006681", - "gap_periodic_adv_term_sync": "0x0200669d", - "gap_read_antenna_info": "0x02006725", - "gap_read_local_tx_power_level": "0x0200673d", - "gap_read_periodic_adv_list_size": "0x0200674d", - "gap_read_phy": "0x02006759", - "gap_read_remote_tx_power_level": "0x02006765", - "gap_read_remote_used_features": "0x02006775", - "gap_read_remote_version": "0x02006781", - "gap_read_rssi": "0x0200678d", - "gap_remove_whitelist": "0x02006799", - "gap_rmv_adv_set": "0x02006815", - "gap_rmv_dev_from_periodic_list": "0x02006821", - "gap_rx_test_v2": "0x02006831", - "gap_rx_test_v3": "0x02006841", - "gap_set_adv_set_random_addr": "0x0200688d", - "gap_set_callback_for_next_hci": "0x020068c9", - "gap_set_connection_cte_request_enable": "0x020068e9", - "gap_set_connection_cte_response_enable": "0x02006905", - "gap_set_connection_cte_rx_param": "0x02006915", - "gap_set_connection_cte_tx_param": "0x02006969", - "gap_set_connection_parameter_range": "0x020069b5", - "gap_set_connectionless_cte_tx_enable": "0x020069cd", - "gap_set_connectionless_cte_tx_param": "0x020069dd", - "gap_set_connectionless_iq_sampling_enable": "0x02006a39", - "gap_set_data_length": "0x02006a95", - "gap_set_def_phy": "0x02006aad", - "gap_set_default_subrate": "0x02006abd", - "gap_set_ext_adv_data": "0x02006ad9", - "gap_set_ext_adv_enable": "0x02006af1", - "gap_set_ext_adv_para": "0x02006b61", - "gap_set_ext_scan_enable": "0x02006c31", - "gap_set_ext_scan_para": "0x02006c49", - "gap_set_ext_scan_response_data": "0x02006ce9", - "gap_set_host_channel_classification": "0x02006d01", - "gap_set_path_loss_reporting_enable": "0x02006d11", - "gap_set_path_loss_reporting_param": "0x02006d21", - "gap_set_periodic_adv_data": "0x02006d3d", - "gap_set_periodic_adv_enable": "0x02006dad", - "gap_set_periodic_adv_para": "0x02006dbd", - "gap_set_periodic_adv_para_v2": "0x02006dd5", - "gap_set_periodic_adv_rsp_data": "0x02006df9", - "gap_set_periodic_adv_rx_enable": "0x02006e1d", - "gap_set_periodic_adv_subevent_data": "0x02006e2d", - "gap_set_periodic_sync_subevent": "0x02006ec5", - "gap_set_phy": "0x02006edd", - "gap_set_random_device_address": "0x02006ef9", - "gap_set_tx_power_reporting_enable": "0x02006f19", - "gap_start_ccm": "0x02006f39", - "gap_subrate_request": "0x02006f81", - "gap_test_end": "0x02006f9d", - "gap_tx_test_v2": "0x02006fa9", - "gap_tx_test_v4": "0x02006fc1", - "gap_update_connection_parameters": "0x02006fe5", - "gap_vendor_tx_continuous_wave": "0x02007029", - "gatt_client_cancel_write": "0x02007551", - "gatt_client_discover_characteristic_descriptors": "0x02007577", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x020075b7", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x02007607", - "gatt_client_discover_characteristics_for_service": "0x02007657", - "gatt_client_discover_primary_services": "0x0200768d", - "gatt_client_discover_primary_services_by_uuid128": "0x020076bf", - "gatt_client_discover_primary_services_by_uuid16": "0x02007703", - "gatt_client_execute_write": "0x02007741", - "gatt_client_find_included_services_for_service": "0x02007767", - "gatt_client_get_mtu": "0x02007795", - "gatt_client_is_ready": "0x02007859", - "gatt_client_listen_for_characteristic_value_updates": "0x0200786f", - "gatt_client_prepare_write": "0x02007891", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x020078cd", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x020078f7", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x020078fd", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x0200792b", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x02007931", - "gatt_client_read_multiple_characteristic_values": "0x0200795f", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x0200798f", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x020079bd", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x02007a09", - "gatt_client_register_handler": "0x02007a55", - "gatt_client_reliable_write_long_value_of_characteristic": "0x02007a61", - "gatt_client_signed_write_without_response": "0x02007e95", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x02007f59", - "gatt_client_write_client_characteristic_configuration": "0x02007f93", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x02007fe5", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02007ff5", - "gatt_client_write_long_value_of_characteristic": "0x02008031", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x02008041", - "gatt_client_write_value_of_characteristic": "0x0200807d", - "gatt_client_write_value_of_characteristic_without_response": "0x020080b3", - "hci_add_event_handler": "0x02009761", - "hci_power_control": "0x02009f09", - "hci_register_acl_packet_handler": "0x0200a0bd", - "kv_commit": "0x0200a7f5", - "kv_get": "0x0200a851", - "kv_init": "0x0200a85d", - "kv_init_backend": "0x0200a8dd", - "kv_put": "0x0200a8f1", - "kv_remove": "0x0200a8fd", - "kv_remove_all": "0x0200a931", - "kv_value_modified": "0x0200a961", - "kv_value_modified_of_key": "0x0200a97d", - "kv_visit": "0x0200a989", - "l2cap_add_event_handler": "0x0200aa19", - "l2cap_can_send_packet_now": "0x0200aa29", - "l2cap_create_le_credit_based_connection_request": "0x0200abed", - "l2cap_credit_based_send": "0x0200ad35", - "l2cap_credit_based_send_continue": "0x0200ad61", - "l2cap_disconnect": "0x0200addd", - "l2cap_get_le_credit_based_connection_credits": "0x0200afc9", - "l2cap_get_peer_mtu_for_local_cid": "0x0200afe5", - "l2cap_init": "0x0200b425", - "l2cap_le_send_flow_control_credit": "0x0200b51b", - "l2cap_max_le_mtu": "0x0200b829", - "l2cap_register_packet_handler": "0x0200b951", - "l2cap_register_service": "0x0200b95d", - "l2cap_request_can_send_now_event": "0x0200ba6d", - "l2cap_request_connection_parameter_update": "0x0200ba87", - "l2cap_send_echo_request": "0x0200bf69", - "l2cap_unregister_service": "0x0200c049", - "le_device_db_add": "0x0200c0a1", - "le_device_db_find": "0x0200c179", - "le_device_db_from_key": "0x0200c1a5", - "le_device_db_iter_cur": "0x0200c1ad", - "le_device_db_iter_cur_key": "0x0200c1b1", - "le_device_db_iter_init": "0x0200c1b5", - "le_device_db_iter_next": "0x0200c1bd", - "le_device_db_remove_key": "0x0200c1e3", - "ll_ackable_packet_alloc": "0x0200c20f", - "ll_ackable_packet_get_status": "0x0200c34b", - "ll_ackable_packet_run": "0x0200c3b9", - "ll_ackable_packet_set_tx_data": "0x0200c471", - "ll_adjust_conn_peer_tx_power": "0x0200c48d", - "ll_aes_encrypt": "0x0200c4b9", - "ll_allow_nonstandard_adv_type": "0x0200c52d", - "ll_attach_cte_to_adv_set": "0x0200c545", - "ll_channel_monitor_alloc": "0x0200c6dd", - "ll_channel_monitor_check_each_pdu": "0x0200c75f", - "ll_channel_monitor_run": "0x0200c7c1", - "ll_config": "0x0200c891", - "ll_conn_abort": "0x0200c8ad", - "ll_create_conn": "0x0200c8e1", - "ll_dhkey_generated": "0x0200cb5d", - "ll_free": "0x0200cb91", - "ll_get_conn_events_info": "0x0200cb9d", - "ll_get_conn_info": "0x0200cc85", - "ll_get_heap_free_size": "0x0200ccd5", - "ll_hint_on_ce_len": "0x0200cce9", - "ll_install_ecc_engine": "0x0200cd21", - "ll_legacy_adv_set_interval": "0x0200cd2d", - "ll_lock_frequency": "0x0200cd3d", - "ll_malloc": "0x0200cda1", - "ll_override_whitening_init_value": "0x0200cda9", - "ll_p256_key_pair_generated": "0x0200cdc1", - "ll_raw_packet_alloc": "0x0200cf05", - "ll_raw_packet_free": "0x0200cfd9", - "ll_raw_packet_get_bare_rx_data": "0x0200d011", - "ll_raw_packet_get_iq_samples": "0x0200d0d1", - "ll_raw_packet_get_rx_data": "0x0200d16b", - "ll_raw_packet_recv": "0x0200d21d", - "ll_raw_packet_send": "0x0200d2f1", - "ll_raw_packet_set_bare_data": "0x0200d40d", - "ll_raw_packet_set_bare_mode": "0x0200d44b", - "ll_raw_packet_set_fake_cte_info": "0x0200d54f", - "ll_raw_packet_set_param": "0x0200d571", - "ll_raw_packet_set_rx_cte": "0x0200d5d3", - "ll_raw_packet_set_tx_cte": "0x0200d669", - "ll_raw_packet_set_tx_data": "0x0200d6a9", - "ll_register_hci_acl_previewer": "0x0200d711", - "ll_scan_set_fixed_channel": "0x0200d775", - "ll_scanner_enable_iq_sampling": "0x0200d781", - "ll_scanner_enable_iq_sampling_on_legacy": "0x0200d829", - "ll_set_adv_access_address": "0x0200db19", - "ll_set_adv_coded_scheme": "0x0200db25", - "ll_set_conn_acl_report_latency": "0x0200db5d", - "ll_set_conn_coded_scheme": "0x0200db8d", - "ll_set_conn_interval_unit": "0x0200dbb9", - "ll_set_conn_latency": "0x0200dbc5", - "ll_set_conn_tx_power": "0x0200dbf5", - "ll_set_cte_bit": "0x0200dc25", - "ll_set_def_antenna": "0x0200dc4d", - "ll_set_initiating_coded_scheme": "0x0200dc6d", - "ll_set_max_conn_number": "0x0200dc79", - "ll_set_tx_power_range": "0x0200dd21", - "ll_unlock_frequency": "0x0200dd49", - "nibble_for_char": "0x02022495", - "platform_calibrate_rt_clk": "0x0202253f", - "platform_call_on_stack": "0x020021fb", - "platform_config": "0x02022545", - "platform_delete_timer": "0x0202266d", - "platform_enable_irq": "0x02022675", - "platform_get_current_task": "0x020226a9", - "platform_get_gen_os_driver": "0x020226cd", - "platform_get_heap_status": "0x020226d5", - "platform_get_link_layer_interf": "0x020226ed", - "platform_get_task_handle": "0x020226f5", - "platform_get_timer_counter": "0x02022715", - "platform_get_us_time": "0x02022719", - "platform_get_version": "0x0202271d", - "platform_hrng": "0x02022725", - "platform_install_isr_stack": "0x0202272d", - "platform_install_task_stack": "0x02022739", - "platform_patch_rf_init_data": "0x02022771", - "platform_printf": "0x0202277d", - "platform_raise_assertion": "0x02022791", - "platform_rand": "0x020227a5", - "platform_read_info": "0x020227a9", - "platform_read_persistent_reg": "0x020227d9", - "platform_reset": "0x020227e5", - "platform_rt_rc_auto_tune": "0x020227f9", - "platform_rt_rc_auto_tune2": "0x02022801", - "platform_rt_rc_tune": "0x02022869", - "platform_set_abs_timer": "0x02022885", - "platform_set_evt_callback": "0x02022889", - "platform_set_evt_callback_table": "0x0202289d", - "platform_set_irq_callback": "0x020228a9", - "platform_set_irq_callback_table": "0x020228c5", - "platform_set_rf_clk_source": "0x020228d1", - "platform_set_rf_init_data": "0x020228dd", - "platform_set_rf_power_mapping": "0x020228e9", - "platform_set_timer": "0x020228f5", - "platform_shutdown": "0x020228f9", - "platform_switch_app": "0x020228fd", - "platform_trace_raw": "0x02022915", - "platform_write_persistent_reg": "0x0202292d", - "printf_hexdump": "0x02022ae5", - "pvPortMalloc": "0x020235bd", - "pvTaskIncrementMutexHeldCount": "0x020236a5", - "pvTimerGetTimerID": "0x020236bd", - "pxPortInitialiseStack": "0x020236e9", - "reverse_128": "0x020238d1", - "reverse_24": "0x020238d7", - "reverse_256": "0x020238dd", - "reverse_48": "0x020238e3", - "reverse_56": "0x020238e9", - "reverse_64": "0x020238ef", - "reverse_bd_addr": "0x020238f5", - "reverse_bytes": "0x020238fb", - "sm_add_event_handler": "0x02023c79", - "sm_address_resolution_lookup": "0x02023dbd", - "sm_authenticated": "0x020241e9", - "sm_authorization_decline": "0x020241f7", - "sm_authorization_grant": "0x02024217", - "sm_authorization_state": "0x02024237", - "sm_bonding_decline": "0x02024251", - "sm_config": "0x020246cd", - "sm_config_conn": "0x020246e5", - "sm_encryption_key_size": "0x0202489b", - "sm_just_works_confirm": "0x020255ed", - "sm_le_device_key": "0x020259cd", - "sm_numeric_comparison_confirm": "0x02025b1f", - "sm_passkey_input": "0x02025b5d", - "sm_private_random_address_generation_get": "0x02026161", - "sm_private_random_address_generation_get_mode": "0x02026169", - "sm_private_random_address_generation_set_mode": "0x02026175", - "sm_private_random_address_generation_set_update_period": "0x0202619d", - "sm_register_external_ltk_callback": "0x02026429", - "sm_register_oob_data_callback": "0x02026435", - "sm_register_sc_oob_data_callback": "0x02026441", - "sm_request_pairing": "0x0202644d", - "sm_sc_generate_oob_data": "0x02027089", - "sm_send_security_request": "0x020271b9", - "sm_set_accepted_stk_generation_methods": "0x020271e1", - "sm_set_authentication_requirements": "0x020271ed", - "sm_set_encryption_key_size_range": "0x020271f9", - "sscanf_bd_addr": "0x0202761d", - "sysSetPublicDeviceAddr": "0x02027b49", - "uuid128_to_str": "0x020283c9", - "uuid_add_bluetooth_prefix": "0x02028421", - "uuid_has_bluetooth_prefix": "0x02028441", - "uxListRemove": "0x0202845d", - "uxQueueMessagesWaiting": "0x02028485", - "uxQueueMessagesWaitingFromISR": "0x020284ad", - "uxQueueSpacesAvailable": "0x020284c9", - "uxTaskGetStackHighWaterMark": "0x020284f5", - "uxTaskPriorityGet": "0x02028515", - "uxTaskPriorityGetFromISR": "0x02028531", - "vListInitialise": "0x020285ef", - "vListInitialiseItem": "0x02028605", - "vListInsert": "0x0202860b", - "vListInsertEnd": "0x0202863b", - "vPortEndScheduler": "0x02028655", - "vPortEnterCritical": "0x02028681", - "vPortExitCritical": "0x020286c5", - "vPortFree": "0x020286f9", - "vPortSuppressTicksAndSleep": "0x0202879d", - "vPortValidateInterruptPriority": "0x020288c5", - "vQueueDelete": "0x02028921", - "vQueueWaitForMessageRestricted": "0x0202894d", - "vTaskDelay": "0x02028991", - "vTaskInternalSetTimeOutState": "0x020289dd", - "vTaskMissedYield": "0x020289ed", - "vTaskPlaceOnEventList": "0x020289f9", - "vTaskPlaceOnEventListRestricted": "0x02028a31", - "vTaskPriorityDisinheritAfterTimeout": "0x02028a71", - "vTaskPrioritySet": "0x02028b1d", - "vTaskResume": "0x02028be5", - "vTaskStartScheduler": "0x02028c69", - "vTaskStepTick": "0x02028cf9", - "vTaskSuspend": "0x02028d29", - "vTaskSuspendAll": "0x02028de5", - "vTaskSwitchContext": "0x02028df5", - "xPortStartScheduler": "0x02028ea5", - "xQueueAddToSet": "0x02028fa9", - "xQueueCreateCountingSemaphore": "0x02028fcd", - "xQueueCreateCountingSemaphoreStatic": "0x02029009", - "xQueueCreateMutex": "0x0202904d", - "xQueueCreateMutexStatic": "0x02029063", - "xQueueCreateSet": "0x0202907d", - "xQueueGenericCreate": "0x02029085", - "xQueueGenericCreateStatic": "0x020290d1", - "xQueueGenericReset": "0x02029139", - "xQueueGenericSend": "0x020291c5", - "xQueueGenericSendFromISR": "0x02029331", - "xQueueGiveFromISR": "0x020293f1", - "xQueueGiveMutexRecursive": "0x02029495", - "xQueueIsQueueEmptyFromISR": "0x020294d5", - "xQueueIsQueueFullFromISR": "0x020294f9", - "xQueuePeek": "0x02029521", - "xQueuePeekFromISR": "0x02029649", - "xQueueReceive": "0x020296b5", - "xQueueReceiveFromISR": "0x020297e1", - "xQueueRemoveFromSet": "0x02029875", - "xQueueSelectFromSet": "0x02029897", - "xQueueSelectFromSetFromISR": "0x020298a9", - "xQueueSemaphoreTake": "0x020298bd", - "xQueueTakeMutexRecursive": "0x02029a29", - "xTaskCheckForTimeOut": "0x02029a6d", - "xTaskCreate": "0x02029add", - "xTaskCreateStatic": "0x02029b39", - "xTaskGetCurrentTaskHandle": "0x02029ba9", - "xTaskGetSchedulerState": "0x02029bb5", - "xTaskGetTickCount": "0x02029bd1", - "xTaskGetTickCountFromISR": "0x02029bdd", - "xTaskIncrementTick": "0x02029bed", - "xTaskPriorityDisinherit": "0x02029cb9", - "xTaskPriorityInherit": "0x02029d4d", - "xTaskRemoveFromEventList": "0x02029de1", - "xTaskResumeAll": "0x02029e61", - "xTaskResumeFromISR": "0x02029f29", - "xTimerCreate": "0x02029fb5", - "xTimerCreateStatic": "0x02029fe9", - "xTimerCreateTimerTask": "0x0202a021", - "xTimerGenericCommand": "0x0202a08d", - "xTimerGetExpiryTime": "0x0202a0fd", - "xTimerGetTimerDaemonTaskHandle": "0x0202a11d" + "att_dispatch_client_can_send_now": "0x020053d5", + "att_dispatch_client_request_can_send_now_event": "0x020053db", + "att_dispatch_register_client": "0x020053e1", + "att_dispatch_register_server": "0x020053f5", + "att_dispatch_server_can_send_now": "0x02005409", + "att_dispatch_server_request_can_send_now_event": "0x0200540f", + "att_emit_general_event": "0x020054c1", + "att_server_can_send_packet_now": "0x02005bfd", + "att_server_deferred_read_response": "0x02005c01", + "att_server_get_mtu": "0x02005c19", + "att_server_indicate": "0x02005c91", + "att_server_init": "0x02005d15", + "att_server_notify": "0x02005d51", + "att_server_register_packet_handler": "0x02005e69", + "att_server_request_can_send_now_event": "0x02005e75", + "att_set_db": "0x02005e91", + "att_set_read_callback": "0x02005ea5", + "att_set_write_callback": "0x02005eb1", + "bd_addr_cmp": "0x02006081", + "bd_addr_copy": "0x02006087", + "bd_addr_to_str": "0x02006091", + "big_endian_read_16": "0x020060c9", + "big_endian_read_32": "0x020060d1", + "big_endian_store_16": "0x020060e5", + "big_endian_store_32": "0x020060f1", + "btstack_config": "0x02006251", + "btstack_get_capabilities": "0x0200625d", + "btstack_memory_pool_create": "0x020063a7", + "btstack_memory_pool_free": "0x020063d1", + "btstack_memory_pool_get": "0x02006431", + "btstack_push_user_msg": "0x02006499", + "btstack_push_user_runnable": "0x020064a5", + "btstack_reset": "0x020064b1", + "char_for_nibble": "0x020067e7", + "eTaskConfirmSleepModeStatus": "0x02006b99", + "gap_add_dev_to_periodic_list": "0x020071f5", + "gap_add_dev_to_resolving_list": "0x02007205", + "gap_add_whitelist": "0x02007239", + "gap_aes_encrypt": "0x02007245", + "gap_clear_resolving_list": "0x0200727d", + "gap_clear_white_lists": "0x02007289", + "gap_clr_adv_set": "0x02007295", + "gap_clr_periodic_adv_list": "0x020072a1", + "gap_create_connection_cancel": "0x020072ad", + "gap_default_periodic_adv_sync_transfer_param": "0x020072b9", + "gap_disconnect": "0x020072d1", + "gap_disconnect2": "0x020072d9", + "gap_disconnect_all": "0x02007305", + "gap_ext_create_connection": "0x02007345", + "gap_ext_create_connection_v2": "0x020073f1", + "gap_get_connection_parameter_range": "0x020074f1", + "gap_le_read_channel_map": "0x02007529", + "gap_periodic_adv_create_sync": "0x02007589", + "gap_periodic_adv_create_sync_cancel": "0x020075ad", + "gap_periodic_adv_set_info_transfer": "0x020075b9", + "gap_periodic_adv_sync_transfer": "0x020075c9", + "gap_periodic_adv_sync_transfer_param": "0x020075d9", + "gap_periodic_adv_term_sync": "0x020075f5", + "gap_read_antenna_info": "0x0200767d", + "gap_read_local_resolving_addr": "0x02007695", + "gap_read_local_tx_power_level": "0x020076a1", + "gap_read_peer_resolving_addr": "0x020076b1", + "gap_read_periodic_adv_list_size": "0x020076bd", + "gap_read_phy": "0x020076c9", + "gap_read_remote_tx_power_level": "0x020076d5", + "gap_read_remote_used_features": "0x020076e5", + "gap_read_remote_version": "0x020076f1", + "gap_read_rssi": "0x020076fd", + "gap_read_white_lists_size": "0x02007709", + "gap_remove_dev_from_resolving_list": "0x02007715", + "gap_remove_whitelist": "0x02007721", + "gap_rmv_adv_set": "0x0200779d", + "gap_rmv_dev_from_periodic_list": "0x020077a9", + "gap_rx_test_v2": "0x020077b9", + "gap_rx_test_v3": "0x020077c9", + "gap_set_addr_resolution_enable": "0x02007815", + "gap_set_adv_set_random_addr": "0x02007821", + "gap_set_callback_for_next_hci": "0x02007845", + "gap_set_connection_cte_request_enable": "0x02007865", + "gap_set_connection_cte_response_enable": "0x02007881", + "gap_set_connection_cte_rx_param": "0x02007891", + "gap_set_connection_cte_tx_param": "0x020078e5", + "gap_set_connection_parameter_range": "0x02007931", + "gap_set_connectionless_cte_tx_enable": "0x02007949", + "gap_set_connectionless_cte_tx_param": "0x02007959", + "gap_set_connectionless_iq_sampling_enable": "0x020079b5", + "gap_set_data_length": "0x02007a11", + "gap_set_def_phy": "0x02007a29", + "gap_set_default_subrate": "0x02007a39", + "gap_set_ext_adv_data": "0x02007a55", + "gap_set_ext_adv_enable": "0x02007a6d", + "gap_set_ext_adv_para": "0x02007add", + "gap_set_ext_scan_enable": "0x02007b9d", + "gap_set_ext_scan_para": "0x02007bb5", + "gap_set_ext_scan_response_data": "0x02007c55", + "gap_set_host_channel_classification": "0x02007c6d", + "gap_set_path_loss_reporting_enable": "0x02007c7d", + "gap_set_path_loss_reporting_param": "0x02007c8d", + "gap_set_periodic_adv_data": "0x02007ca9", + "gap_set_periodic_adv_enable": "0x02007d19", + "gap_set_periodic_adv_para": "0x02007d29", + "gap_set_periodic_adv_para_v2": "0x02007d41", + "gap_set_periodic_adv_rsp_data": "0x02007d65", + "gap_set_periodic_adv_rx_enable": "0x02007d89", + "gap_set_periodic_adv_subevent_data": "0x02007d99", + "gap_set_periodic_sync_subevent": "0x02007e31", + "gap_set_phy": "0x02007e49", + "gap_set_privacy_mode": "0x02007e65", + "gap_set_random_device_address": "0x02007e75", + "gap_set_resolvable_private_addr_timeout": "0x02007e81", + "gap_set_tx_power_reporting_enable": "0x02007e8d", + "gap_start_ccm": "0x02007ead", + "gap_subrate_request": "0x02007ef5", + "gap_test_end": "0x02007f11", + "gap_tx_test_v2": "0x02007f1d", + "gap_tx_test_v4": "0x02007f35", + "gap_update_connection_parameters": "0x02007f59", + "gap_vendor_tx_continuous_wave": "0x02007f9d", + "gatt_client_cancel_write": "0x020084c5", + "gatt_client_discover_characteristic_descriptors": "0x020084eb", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x0200852b", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x0200857b", + "gatt_client_discover_characteristics_for_service": "0x020085cb", + "gatt_client_discover_primary_services": "0x02008601", + "gatt_client_discover_primary_services_by_uuid128": "0x02008633", + "gatt_client_discover_primary_services_by_uuid16": "0x02008677", + "gatt_client_execute_write": "0x020086b5", + "gatt_client_find_included_services_for_service": "0x020086db", + "gatt_client_get_mtu": "0x02008709", + "gatt_client_is_ready": "0x020087d5", + "gatt_client_listen_for_characteristic_value_updates": "0x020087eb", + "gatt_client_prepare_write": "0x0200880d", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x02008849", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x02008873", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02008879", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x020088a7", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x020088ad", + "gatt_client_read_multiple_characteristic_values": "0x020088db", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x0200890b", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x02008939", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x02008985", + "gatt_client_register_handler": "0x020089d1", + "gatt_client_reliable_write_long_value_of_characteristic": "0x020089dd", + "gatt_client_signed_write_without_response": "0x02008e11", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x02008ed5", + "gatt_client_write_client_characteristic_configuration": "0x02008f0f", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x02008f61", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02008f71", + "gatt_client_write_long_value_of_characteristic": "0x02008fad", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x02008fbd", + "gatt_client_write_value_of_characteristic": "0x02008ff9", + "gatt_client_write_value_of_characteristic_without_response": "0x0200902f", + "hci_add_event_handler": "0x0200a6d1", + "hci_power_control": "0x0200ae75", + "hci_register_acl_packet_handler": "0x0200b029", + "kv_commit": "0x0200b751", + "kv_get": "0x0200b7ad", + "kv_init": "0x0200b7b9", + "kv_init_backend": "0x0200b839", + "kv_put": "0x0200b84d", + "kv_remove": "0x0200b859", + "kv_remove_all": "0x0200b88d", + "kv_value_modified": "0x0200b8bd", + "kv_value_modified_of_key": "0x0200b8d9", + "kv_visit": "0x0200b8e5", + "l2cap_add_event_handler": "0x0200b975", + "l2cap_can_send_packet_now": "0x0200b985", + "l2cap_create_le_credit_based_connection_request": "0x0200bb49", + "l2cap_credit_based_send": "0x0200bc91", + "l2cap_credit_based_send_continue": "0x0200bcbd", + "l2cap_disconnect": "0x0200bd39", + "l2cap_get_le_credit_based_connection_credits": "0x0200bf25", + "l2cap_get_peer_mtu_for_local_cid": "0x0200bf41", + "l2cap_init": "0x0200c381", + "l2cap_le_send_flow_control_credit": "0x0200c477", + "l2cap_max_le_mtu": "0x0200c785", + "l2cap_register_packet_handler": "0x0200c8ad", + "l2cap_register_service": "0x0200c8b9", + "l2cap_request_can_send_now_event": "0x0200c9c9", + "l2cap_request_connection_parameter_update": "0x0200c9e3", + "l2cap_send_echo_request": "0x0200cec5", + "l2cap_unregister_service": "0x0200cfa5", + "le_device_db_add": "0x0200cffd", + "le_device_db_find": "0x0200d0d5", + "le_device_db_from_key": "0x0200d101", + "le_device_db_iter_cur": "0x0200d109", + "le_device_db_iter_cur_key": "0x0200d10d", + "le_device_db_iter_init": "0x0200d111", + "le_device_db_iter_next": "0x0200d119", + "le_device_db_remove_key": "0x0200d13f", + "ll_ackable_packet_alloc": "0x0200d16b", + "ll_ackable_packet_get_status": "0x0200d2a7", + "ll_ackable_packet_run": "0x0200d315", + "ll_ackable_packet_set_tx_data": "0x0200d3cd", + "ll_adjust_conn_peer_tx_power": "0x0200d3e9", + "ll_aes_encrypt": "0x0200d415", + "ll_allow_nonstandard_adv_type": "0x0200d489", + "ll_attach_cte_to_adv_set": "0x0200d4a1", + "ll_channel_monitor_alloc": "0x0200d639", + "ll_channel_monitor_check_each_pdu": "0x0200d6bb", + "ll_channel_monitor_run": "0x0200d729", + "ll_config": "0x0200d7f9", + "ll_conn_abort": "0x0200d815", + "ll_create_conn": "0x0200d849", + "ll_dhkey_generated": "0x0200dac5", + "ll_free": "0x0200daf9", + "ll_get_capabilities": "0x0200db05", + "ll_get_conn_events_info": "0x0200db25", + "ll_get_conn_info": "0x0200dc0d", + "ll_get_heap_free_size": "0x0200dc5d", + "ll_get_states": "0x0200dc6d", + "ll_hint_on_ce_len": "0x0200dd29", + "ll_install_ecc_engine": "0x0200dd61", + "ll_legacy_adv_set_interval": "0x0200dd6d", + "ll_lock_frequency": "0x0200dd7d", + "ll_malloc": "0x0200dde1", + "ll_override_whitening_init_value": "0x0200dde9", + "ll_p256_key_pair_generated": "0x0200de01", + "ll_raw_packet_alloc": "0x0200df45", + "ll_raw_packet_free": "0x0200e019", + "ll_raw_packet_get_bare_rx_data": "0x0200e051", + "ll_raw_packet_get_iq_samples": "0x0200e111", + "ll_raw_packet_get_rx_data": "0x0200e1ab", + "ll_raw_packet_recv": "0x0200e25d", + "ll_raw_packet_send": "0x0200e331", + "ll_raw_packet_set_bare_data": "0x0200e44d", + "ll_raw_packet_set_bare_mode": "0x0200e48b", + "ll_raw_packet_set_fake_cte_info": "0x0200e58f", + "ll_raw_packet_set_param": "0x0200e5b1", + "ll_raw_packet_set_rx_cte": "0x0200e613", + "ll_raw_packet_set_tx_cte": "0x0200e6a9", + "ll_raw_packet_set_tx_data": "0x0200e6e9", + "ll_register_hci_acl_previewer": "0x0200e751", + "ll_scan_set_fixed_channel": "0x0200e7b5", + "ll_scanner_enable_iq_sampling": "0x0200e7c1", + "ll_scanner_enable_iq_sampling_on_legacy": "0x0200e869", + "ll_set_adv_access_address": "0x0200eb59", + "ll_set_adv_coded_scheme": "0x0200eb65", + "ll_set_conn_acl_report_latency": "0x0200eb9d", + "ll_set_conn_coded_scheme": "0x0200ebcd", + "ll_set_conn_interval_unit": "0x0200ebf9", + "ll_set_conn_latency": "0x0200ec05", + "ll_set_conn_tx_power": "0x0200ec35", + "ll_set_cte_bit": "0x0200ec65", + "ll_set_def_antenna": "0x0200ec8d", + "ll_set_initiating_coded_scheme": "0x0200ecad", + "ll_set_max_conn_number": "0x0200ecb9", + "ll_set_tx_power_range": "0x0200ed61", + "ll_unlock_frequency": "0x0200ed89", + "nibble_for_char": "0x0202347d", + "platform_calibrate_rt_clk": "0x02023527", + "platform_call_on_stack": "0x020030fb", + "platform_cancel_us_timer": "0x0202352b", + "platform_config": "0x02023541", + "platform_create_us_timer": "0x02023675", + "platform_delete_timer": "0x02023689", + "platform_enable_irq": "0x02023691", + "platform_get_current_task": "0x020236c5", + "platform_get_gen_os_driver": "0x020236e9", + "platform_get_heap_status": "0x020236f1", + "platform_get_link_layer_interf": "0x02023709", + "platform_get_task_handle": "0x02023711", + "platform_get_timer_counter": "0x02023731", + "platform_get_us_time": "0x02023735", + "platform_get_version": "0x02023739", + "platform_hrng": "0x02023755", + "platform_install_isr_stack": "0x0202375d", + "platform_install_task_stack": "0x02023769", + "platform_patch_rf_init_data": "0x020237a1", + "platform_printf": "0x020237ad", + "platform_raise_assertion": "0x020237c1", + "platform_rand": "0x020237d5", + "platform_read_info": "0x020237d9", + "platform_read_persistent_reg": "0x02023809", + "platform_reset": "0x02023829", + "platform_rt_rc_auto_tune": "0x0202383d", + "platform_rt_rc_auto_tune2": "0x02023845", + "platform_rt_rc_tune": "0x020238a5", + "platform_set_abs_timer": "0x020238d1", + "platform_set_evt_callback": "0x020238d5", + "platform_set_evt_callback_table": "0x020238e9", + "platform_set_irq_callback": "0x020238f5", + "platform_set_irq_callback_table": "0x02023911", + "platform_set_rf_clk_source": "0x0202391d", + "platform_set_rf_init_data": "0x02023929", + "platform_set_rf_power_mapping": "0x02023935", + "platform_set_timer": "0x02023941", + "platform_shutdown": "0x02023945", + "platform_switch_app": "0x02023949", + "platform_trace_raw": "0x02023961", + "platform_write_persistent_reg": "0x02023979", + "printf_hexdump": "0x02023b51", + "pvPortMalloc": "0x02024629", + "pvTaskIncrementMutexHeldCount": "0x02024711", + "pvTimerGetTimerID": "0x02024729", + "pxPortInitialiseStack": "0x02024755", + "reverse_128": "0x0202493d", + "reverse_24": "0x02024943", + "reverse_256": "0x02024949", + "reverse_48": "0x0202494f", + "reverse_56": "0x02024955", + "reverse_64": "0x0202495b", + "reverse_bd_addr": "0x02024961", + "reverse_bytes": "0x02024967", + "sm_add_event_handler": "0x02024ce5", + "sm_address_resolution_lookup": "0x02024e0d", + "sm_authenticated": "0x02025255", + "sm_authorization_decline": "0x02025263", + "sm_authorization_grant": "0x02025283", + "sm_authorization_state": "0x020252a3", + "sm_bonding_decline": "0x020252bd", + "sm_config": "0x0202573d", + "sm_config_conn": "0x02025771", + "sm_encryption_key_size": "0x02025957", + "sm_just_works_confirm": "0x02026591", + "sm_le_device_key": "0x02026981", + "sm_numeric_comparison_confirm": "0x02026af5", + "sm_passkey_input": "0x02026b33", + "sm_private_random_address_generation_get": "0x02027121", + "sm_private_random_address_generation_get_mode": "0x02027129", + "sm_private_random_address_generation_set_mode": "0x02027135", + "sm_private_random_address_generation_set_update_period": "0x0202715d", + "sm_register_external_ltk_callback": "0x020273f1", + "sm_register_oob_data_callback": "0x020273fd", + "sm_register_sc_oob_data_callback": "0x02027409", + "sm_request_pairing": "0x02027415", + "sm_sc_generate_oob_data": "0x0202809d", + "sm_send_security_request": "0x020283bd", + "sm_set_accepted_stk_generation_methods": "0x020283e5", + "sm_set_authentication_requirements": "0x020283f1", + "sm_set_encryption_key_size_range": "0x02028401", + "sscanf_bd_addr": "0x02028815", + "sysSetPublicDeviceAddr": "0x02028d71", + "uuid128_to_str": "0x02029605", + "uuid_add_bluetooth_prefix": "0x0202965d", + "uuid_has_bluetooth_prefix": "0x0202967d", + "uxListRemove": "0x02029699", + "uxQueueMessagesWaiting": "0x020296c1", + "uxQueueMessagesWaitingFromISR": "0x020296e9", + "uxQueueSpacesAvailable": "0x02029705", + "uxTaskGetStackHighWaterMark": "0x02029731", + "uxTaskPriorityGet": "0x02029751", + "uxTaskPriorityGetFromISR": "0x0202976d", + "vListInitialise": "0x0202982b", + "vListInitialiseItem": "0x02029841", + "vListInsert": "0x02029847", + "vListInsertEnd": "0x02029877", + "vPortEndScheduler": "0x02029891", + "vPortEnterCritical": "0x020298bd", + "vPortExitCritical": "0x02029901", + "vPortFree": "0x02029935", + "vPortSuppressTicksAndSleep": "0x020299d9", + "vPortValidateInterruptPriority": "0x02029b01", + "vQueueDelete": "0x02029b5d", + "vQueueWaitForMessageRestricted": "0x02029b89", + "vTaskDelay": "0x02029bcd", + "vTaskInternalSetTimeOutState": "0x02029c19", + "vTaskMissedYield": "0x02029c29", + "vTaskPlaceOnEventList": "0x02029c35", + "vTaskPlaceOnEventListRestricted": "0x02029c6d", + "vTaskPriorityDisinheritAfterTimeout": "0x02029cad", + "vTaskPrioritySet": "0x02029d59", + "vTaskResume": "0x02029e21", + "vTaskStartScheduler": "0x02029ea5", + "vTaskStepTick": "0x02029f35", + "vTaskSuspend": "0x02029f65", + "vTaskSuspendAll": "0x0202a021", + "vTaskSwitchContext": "0x0202a031", + "xPortStartScheduler": "0x0202a0d9", + "xQueueAddToSet": "0x0202a1dd", + "xQueueCreateCountingSemaphore": "0x0202a201", + "xQueueCreateCountingSemaphoreStatic": "0x0202a23d", + "xQueueCreateMutex": "0x0202a281", + "xQueueCreateMutexStatic": "0x0202a297", + "xQueueCreateSet": "0x0202a2b1", + "xQueueGenericCreate": "0x0202a2b9", + "xQueueGenericCreateStatic": "0x0202a305", + "xQueueGenericReset": "0x0202a36d", + "xQueueGenericSend": "0x0202a3f9", + "xQueueGenericSendFromISR": "0x0202a565", + "xQueueGiveFromISR": "0x0202a625", + "xQueueGiveMutexRecursive": "0x0202a6c9", + "xQueueIsQueueEmptyFromISR": "0x0202a709", + "xQueueIsQueueFullFromISR": "0x0202a72d", + "xQueuePeek": "0x0202a755", + "xQueuePeekFromISR": "0x0202a87d", + "xQueueReceive": "0x0202a8e9", + "xQueueReceiveFromISR": "0x0202aa15", + "xQueueRemoveFromSet": "0x0202aaa9", + "xQueueSelectFromSet": "0x0202aacb", + "xQueueSelectFromSetFromISR": "0x0202aadd", + "xQueueSemaphoreTake": "0x0202aaf1", + "xQueueTakeMutexRecursive": "0x0202ac5d", + "xTaskCheckForTimeOut": "0x0202aca1", + "xTaskCreate": "0x0202ad11", + "xTaskCreateStatic": "0x0202ad6d", + "xTaskGetCurrentTaskHandle": "0x0202addd", + "xTaskGetSchedulerState": "0x0202ade9", + "xTaskGetTickCount": "0x0202ae05", + "xTaskGetTickCountFromISR": "0x0202ae11", + "xTaskIncrementTick": "0x0202ae21", + "xTaskPriorityDisinherit": "0x0202aeed", + "xTaskPriorityInherit": "0x0202af81", + "xTaskRemoveFromEventList": "0x0202b015", + "xTaskResumeAll": "0x0202b095", + "xTaskResumeFromISR": "0x0202b15d", + "xTimerCreate": "0x0202b1e9", + "xTimerCreateStatic": "0x0202b21d", + "xTimerCreateTimerTask": "0x0202b255", + "xTimerGenericCommand": "0x0202b2c1", + "xTimerGetExpiryTime": "0x0202b331", + "xTimerGetTimerDaemonTaskHandle": "0x0202b351" } \ No newline at end of file diff --git a/bundles/exp/ING9168xx/meta.json b/bundles/exp/ING9168xx/meta.json index 94a29412c..3765c0e5a 100644 --- a/bundles/exp/ING9168xx/meta.json +++ b/bundles/exp/ING9168xx/meta.json @@ -1,18 +1,24 @@ { "app": { - "base": 33738752 + "base": 33742848 }, "ram": { "base": 536870912, - "size": 21828 + "size": 21636 }, "rom": { "base": 33562624, - "size": 173864 + "size": 178692 + }, + "var": { + "link_layer_features": { + "addr": 33732720, + "value": "ff79ff07fe000000" + } }, "version": [ 2, 3, - 1 + 18 ] } \ No newline at end of file diff --git a/bundles/exp/ING9168xx/platform.bin b/bundles/exp/ING9168xx/platform.bin index e4b8de468..c85d4f6c0 100644 Binary files a/bundles/exp/ING9168xx/platform.bin and b/bundles/exp/ING9168xx/platform.bin differ diff --git a/bundles/exp/ING9187xx/apis.json b/bundles/exp/ING9187xx/apis.json index d4978b88d..e3b10f929 100644 --- a/bundles/exp/ING9187xx/apis.json +++ b/bundles/exp/ING9187xx/apis.json @@ -6,365 +6,372 @@ "att_dispatch_server_can_send_now": "0x000057cd", "att_dispatch_server_request_can_send_now_event": "0x000057d3", "att_emit_general_event": "0x00005885", - "att_server_can_send_packet_now": "0x00005fb5", - "att_server_deferred_read_response": "0x00005fb9", - "att_server_get_mtu": "0x00005fd1", - "att_server_indicate": "0x00006049", - "att_server_init": "0x000060cd", - "att_server_notify": "0x00006109", - "att_server_register_packet_handler": "0x00006221", - "att_server_request_can_send_now_event": "0x0000622d", - "att_set_db": "0x00006249", - "att_set_read_callback": "0x0000625d", - "att_set_write_callback": "0x00006269", - "bd_addr_cmp": "0x000063d9", - "bd_addr_copy": "0x000063df", - "bd_addr_to_str": "0x000063e9", - "big_endian_read_16": "0x00006421", - "big_endian_read_32": "0x00006429", - "big_endian_store_16": "0x0000643d", - "big_endian_store_32": "0x00006449", - "btstack_config": "0x0000659d", - "btstack_memory_pool_create": "0x000066dd", - "btstack_memory_pool_free": "0x00006705", - "btstack_memory_pool_get": "0x00006765", - "btstack_push_user_msg": "0x000067cd", - "btstack_push_user_runnable": "0x000067d9", - "btstack_reset": "0x000067e5", - "char_for_nibble": "0x00006af7", - "eTaskConfirmSleepModeStatus": "0x00006ddd", - "gap_add_dev_to_periodic_list": "0x000073d9", - "gap_add_whitelist": "0x000073e9", - "gap_aes_encrypt": "0x000073f5", - "gap_clear_white_lists": "0x0000742d", - "gap_clr_adv_set": "0x00007439", - "gap_clr_periodic_adv_list": "0x00007445", - "gap_create_connection_cancel": "0x00007451", - "gap_disconnect": "0x0000745d", - "gap_disconnect_all": "0x00007489", - "gap_ext_create_connection": "0x000074c9", - "gap_get_connection_parameter_range": "0x000075bd", - "gap_le_read_channel_map": "0x000075f9", - "gap_periodic_adv_create_sync": "0x00007665", - "gap_periodic_adv_create_sync_cancel": "0x00007689", - "gap_periodic_adv_term_sync": "0x00007695", - "gap_read_local_tx_power_level": "0x00007729", - "gap_read_periodic_adv_list_size": "0x00007739", - "gap_read_phy": "0x00007745", - "gap_read_remote_tx_power_level": "0x00007751", - "gap_read_remote_used_features": "0x00007761", - "gap_read_remote_version": "0x0000776d", - "gap_read_rssi": "0x00007779", - "gap_remove_whitelist": "0x00007785", - "gap_rmv_adv_set": "0x00007801", - "gap_rmv_dev_from_periodic_list": "0x0000780d", - "gap_rx_test_v2": "0x0000781d", - "gap_set_adv_set_random_addr": "0x00007855", - "gap_set_callback_for_next_hci": "0x00007891", - "gap_set_connection_parameter_range": "0x000078b1", - "gap_set_data_length": "0x000078c9", - "gap_set_def_phy": "0x000078e1", - "gap_set_default_subrate": "0x000078f1", - "gap_set_ext_adv_data": "0x0000790d", - "gap_set_ext_adv_enable": "0x00007925", - "gap_set_ext_adv_para": "0x00007995", - "gap_set_ext_scan_enable": "0x00007a6d", - "gap_set_ext_scan_para": "0x00007a85", - "gap_set_ext_scan_response_data": "0x00007b25", - "gap_set_host_channel_classification": "0x00007b3d", - "gap_set_path_loss_reporting_enable": "0x00007b4d", - "gap_set_path_loss_reporting_param": "0x00007b5d", - "gap_set_periodic_adv_data": "0x00007b79", - "gap_set_periodic_adv_enable": "0x00007be9", - "gap_set_periodic_adv_para": "0x00007bf9", - "gap_set_phy": "0x00007c11", - "gap_set_random_device_address": "0x00007c2d", - "gap_set_tx_power_reporting_enable": "0x00007c4d", - "gap_start_ccm": "0x00007c6d", - "gap_subrate_request": "0x00007cb5", - "gap_test_end": "0x00007cd1", - "gap_tx_test_v2": "0x00007cdd", - "gap_tx_test_v4": "0x00007cf5", - "gap_update_connection_parameters": "0x00007d19", - "gap_vendor_tx_continuous_wave": "0x00007d5d", - "gatt_client_cancel_write": "0x00008285", - "gatt_client_discover_characteristic_descriptors": "0x000082ab", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x000082eb", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x0000833b", - "gatt_client_discover_characteristics_for_service": "0x0000838b", - "gatt_client_discover_primary_services": "0x000083c1", - "gatt_client_discover_primary_services_by_uuid128": "0x000083f3", - "gatt_client_discover_primary_services_by_uuid16": "0x00008437", - "gatt_client_execute_write": "0x00008473", - "gatt_client_find_included_services_for_service": "0x00008499", - "gatt_client_get_mtu": "0x000084c7", - "gatt_client_is_ready": "0x00008569", - "gatt_client_listen_for_characteristic_value_updates": "0x0000857f", - "gatt_client_prepare_write": "0x000085a1", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x000085dd", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x00008607", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x0000860d", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x0000863b", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x00008641", - "gatt_client_read_multiple_characteristic_values": "0x0000866f", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x0000869f", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x000086cd", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x00008719", - "gatt_client_register_handler": "0x00008765", - "gatt_client_reliable_write_long_value_of_characteristic": "0x00008771", - "gatt_client_signed_write_without_response": "0x00008ba1", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008c65", - "gatt_client_write_client_characteristic_configuration": "0x00008c9f", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008cf1", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008d01", - "gatt_client_write_long_value_of_characteristic": "0x00008d3d", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008d4d", - "gatt_client_write_value_of_characteristic": "0x00008d89", - "gatt_client_write_value_of_characteristic_without_response": "0x00008dbf", - "hci_add_event_handler": "0x0000a355", - "hci_power_control": "0x0000ab05", - "hci_register_acl_packet_handler": "0x0000acb9", - "kv_commit": "0x0000b42d", - "kv_get": "0x0000b489", - "kv_init": "0x0000b495", - "kv_init_backend": "0x0000b515", - "kv_put": "0x0000b529", - "kv_remove": "0x0000b535", - "kv_remove_all": "0x0000b569", - "kv_value_modified": "0x0000b599", - "kv_value_modified_of_key": "0x0000b5b5", - "kv_visit": "0x0000b5c1", - "l2cap_add_event_handler": "0x0000b651", - "l2cap_can_send_packet_now": "0x0000b661", - "l2cap_create_le_credit_based_connection_request": "0x0000b81d", - "l2cap_credit_based_send": "0x0000b961", - "l2cap_credit_based_send_continue": "0x0000b98d", - "l2cap_disconnect": "0x0000ba09", - "l2cap_get_le_credit_based_connection_credits": "0x0000bc59", - "l2cap_get_peer_mtu_for_local_cid": "0x0000bc75", - "l2cap_init": "0x0000c049", - "l2cap_le_send_flow_control_credit": "0x0000c13f", - "l2cap_max_le_mtu": "0x0000c449", - "l2cap_register_packet_handler": "0x0000c571", - "l2cap_register_service": "0x0000c57d", - "l2cap_request_can_send_now_event": "0x0000c68d", - "l2cap_request_connection_parameter_update": "0x0000c6a7", - "l2cap_send_echo_request": "0x0000cb81", - "l2cap_unregister_service": "0x0000cc41", - "le_device_db_add": "0x0000cc99", - "le_device_db_find": "0x0000cd71", - "le_device_db_from_key": "0x0000cd9d", - "le_device_db_iter_cur": "0x0000cda5", - "le_device_db_iter_cur_key": "0x0000cda9", - "le_device_db_iter_init": "0x0000cdad", - "le_device_db_iter_next": "0x0000cdb5", - "le_device_db_remove_key": "0x0000cddb", - "ll_ackable_packet_alloc": "0x0000ce07", - "ll_ackable_packet_get_status": "0x0000cf41", - "ll_ackable_packet_run": "0x0000cfb1", - "ll_ackable_packet_set_tx_data": "0x0000d055", - "ll_adjust_conn_peer_tx_power": "0x0000d07d", - "ll_aes_encrypt": "0x0000d0a9", - "ll_channel_monitor_alloc": "0x0000d125", - "ll_channel_monitor_check_each_pdu": "0x0000d1a7", - "ll_channel_monitor_run": "0x0000d20d", - "ll_config": "0x0000d2c1", - "ll_conn_abort": "0x0000d2dd", - "ll_create_conn": "0x0000d311", - "ll_dhkey_generated": "0x0000d58d", - "ll_free": "0x0000d5c1", - "ll_get_conn_events_info": "0x0000d5cd", - "ll_get_conn_info": "0x0000d6b1", - "ll_get_heap_free_size": "0x0000d6fd", - "ll_hint_on_ce_len": "0x0000d711", - "ll_install_ecc_engine": "0x0000d749", - "ll_legacy_adv_set_interval": "0x0000d755", - "ll_lock_frequency": "0x0000d765", - "ll_malloc": "0x0000d7c9", - "ll_p256_key_pair_generated": "0x0000d7d1", - "ll_raw_packet_alloc": "0x0000d985", - "ll_raw_packet_free": "0x0000da59", - "ll_raw_packet_get_bare_rx_data": "0x0000da91", - "ll_raw_packet_get_rx_data": "0x0000db57", - "ll_raw_packet_recv": "0x0000dbf9", - "ll_raw_packet_send": "0x0000dcb5", - "ll_raw_packet_set_bare_data": "0x0000dd9d", - "ll_raw_packet_set_bare_mode": "0x0000dddb", - "ll_raw_packet_set_param": "0x0000dee1", - "ll_raw_packet_set_tx_data": "0x0000df3f", - "ll_register_hci_acl_previewer": "0x0000dfa5", - "ll_scan_set_fixed_channel": "0x0000e009", - "ll_set_adv_access_address": "0x0000e221", - "ll_set_adv_coded_scheme": "0x0000e22d", - "ll_set_conn_acl_report_latency": "0x0000e25d", - "ll_set_conn_coded_scheme": "0x0000e28d", - "ll_set_conn_interval_unit": "0x0000e2b9", - "ll_set_conn_latency": "0x0000e2c5", - "ll_set_conn_tx_power": "0x0000e2f5", - "ll_set_def_antenna": "0x0000e331", - "ll_set_initiating_coded_scheme": "0x0000e34d", - "ll_set_max_conn_number": "0x0000e359", - "ll_set_tx_power_range": "0x0000e3ed", - "ll_unlock_frequency": "0x0000e415", - "nibble_for_char": "0x0001fed1", - "platform_calibrate_rt_clk": "0x0001ff7f", + "att_server_can_send_packet_now": "0x00005fb9", + "att_server_deferred_read_response": "0x00005fbd", + "att_server_get_mtu": "0x00005fd5", + "att_server_indicate": "0x0000604d", + "att_server_init": "0x000060d1", + "att_server_notify": "0x0000610d", + "att_server_register_packet_handler": "0x00006225", + "att_server_request_can_send_now_event": "0x00006231", + "att_set_db": "0x0000624d", + "att_set_read_callback": "0x00006261", + "att_set_write_callback": "0x0000626d", + "bd_addr_cmp": "0x000063dd", + "bd_addr_copy": "0x000063e3", + "bd_addr_to_str": "0x000063ed", + "big_endian_read_16": "0x00006425", + "big_endian_read_32": "0x0000642d", + "big_endian_store_16": "0x00006441", + "big_endian_store_32": "0x0000644d", + "btstack_config": "0x000065a1", + "btstack_get_capabilities": "0x000065ad", + "btstack_memory_pool_create": "0x000066f5", + "btstack_memory_pool_free": "0x0000671d", + "btstack_memory_pool_get": "0x0000677d", + "btstack_push_user_msg": "0x000067e5", + "btstack_push_user_runnable": "0x000067f1", + "btstack_reset": "0x000067fd", + "char_for_nibble": "0x00006b0f", + "eTaskConfirmSleepModeStatus": "0x00006df5", + "gap_add_dev_to_periodic_list": "0x000073dd", + "gap_add_whitelist": "0x000073ed", + "gap_aes_encrypt": "0x000073f9", + "gap_clear_white_lists": "0x00007431", + "gap_clr_adv_set": "0x0000743d", + "gap_clr_periodic_adv_list": "0x00007449", + "gap_create_connection_cancel": "0x00007455", + "gap_disconnect": "0x00007461", + "gap_disconnect2": "0x00007469", + "gap_disconnect_all": "0x00007495", + "gap_ext_create_connection": "0x000074d5", + "gap_get_connection_parameter_range": "0x000075c9", + "gap_le_read_channel_map": "0x00007601", + "gap_periodic_adv_create_sync": "0x00007661", + "gap_periodic_adv_create_sync_cancel": "0x00007685", + "gap_periodic_adv_term_sync": "0x00007691", + "gap_read_local_tx_power_level": "0x00007725", + "gap_read_periodic_adv_list_size": "0x00007735", + "gap_read_phy": "0x00007741", + "gap_read_remote_tx_power_level": "0x0000774d", + "gap_read_remote_used_features": "0x0000775d", + "gap_read_remote_version": "0x00007769", + "gap_read_rssi": "0x00007775", + "gap_read_white_lists_size": "0x00007781", + "gap_remove_whitelist": "0x0000778d", + "gap_rmv_adv_set": "0x00007809", + "gap_rmv_dev_from_periodic_list": "0x00007815", + "gap_rx_test_v2": "0x00007825", + "gap_set_adv_set_random_addr": "0x0000785d", + "gap_set_callback_for_next_hci": "0x00007881", + "gap_set_connection_parameter_range": "0x000078a1", + "gap_set_data_length": "0x000078b9", + "gap_set_def_phy": "0x000078d1", + "gap_set_default_subrate": "0x000078e1", + "gap_set_ext_adv_data": "0x000078fd", + "gap_set_ext_adv_enable": "0x00007915", + "gap_set_ext_adv_para": "0x00007985", + "gap_set_ext_scan_enable": "0x00007a4d", + "gap_set_ext_scan_para": "0x00007a65", + "gap_set_ext_scan_response_data": "0x00007b05", + "gap_set_host_channel_classification": "0x00007b1d", + "gap_set_path_loss_reporting_enable": "0x00007b2d", + "gap_set_path_loss_reporting_param": "0x00007b3d", + "gap_set_periodic_adv_data": "0x00007b59", + "gap_set_periodic_adv_enable": "0x00007bc9", + "gap_set_periodic_adv_para": "0x00007bd9", + "gap_set_phy": "0x00007bf1", + "gap_set_random_device_address": "0x00007c0d", + "gap_set_tx_power_reporting_enable": "0x00007c19", + "gap_start_ccm": "0x00007c39", + "gap_subrate_request": "0x00007c81", + "gap_test_end": "0x00007c9d", + "gap_tx_test_v2": "0x00007ca9", + "gap_tx_test_v4": "0x00007cc1", + "gap_update_connection_parameters": "0x00007ce5", + "gap_vendor_tx_continuous_wave": "0x00007d29", + "gatt_client_cancel_write": "0x00008251", + "gatt_client_discover_characteristic_descriptors": "0x00008277", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x000082b7", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x00008307", + "gatt_client_discover_characteristics_for_service": "0x00008357", + "gatt_client_discover_primary_services": "0x0000838d", + "gatt_client_discover_primary_services_by_uuid128": "0x000083bf", + "gatt_client_discover_primary_services_by_uuid16": "0x00008403", + "gatt_client_execute_write": "0x0000843f", + "gatt_client_find_included_services_for_service": "0x00008465", + "gatt_client_get_mtu": "0x00008493", + "gatt_client_is_ready": "0x0000853d", + "gatt_client_listen_for_characteristic_value_updates": "0x00008553", + "gatt_client_prepare_write": "0x00008575", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x000085b1", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x000085db", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x000085e1", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x0000860f", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x00008615", + "gatt_client_read_multiple_characteristic_values": "0x00008643", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x00008673", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x000086a1", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x000086ed", + "gatt_client_register_handler": "0x00008739", + "gatt_client_reliable_write_long_value_of_characteristic": "0x00008745", + "gatt_client_signed_write_without_response": "0x00008b75", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008c39", + "gatt_client_write_client_characteristic_configuration": "0x00008c73", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008cc5", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008cd5", + "gatt_client_write_long_value_of_characteristic": "0x00008d11", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008d21", + "gatt_client_write_value_of_characteristic": "0x00008d5d", + "gatt_client_write_value_of_characteristic_without_response": "0x00008d93", + "hci_add_event_handler": "0x0000a321", + "hci_power_control": "0x0000aacd", + "hci_register_acl_packet_handler": "0x0000ac81", + "kv_commit": "0x0000b3e5", + "kv_get": "0x0000b441", + "kv_init": "0x0000b44d", + "kv_init_backend": "0x0000b4cd", + "kv_put": "0x0000b4e1", + "kv_remove": "0x0000b4ed", + "kv_remove_all": "0x0000b521", + "kv_value_modified": "0x0000b551", + "kv_value_modified_of_key": "0x0000b56d", + "kv_visit": "0x0000b579", + "l2cap_add_event_handler": "0x0000b609", + "l2cap_can_send_packet_now": "0x0000b619", + "l2cap_create_le_credit_based_connection_request": "0x0000b7d5", + "l2cap_credit_based_send": "0x0000b919", + "l2cap_credit_based_send_continue": "0x0000b945", + "l2cap_disconnect": "0x0000b9c1", + "l2cap_get_le_credit_based_connection_credits": "0x0000bc11", + "l2cap_get_peer_mtu_for_local_cid": "0x0000bc2d", + "l2cap_init": "0x0000c001", + "l2cap_le_send_flow_control_credit": "0x0000c0f7", + "l2cap_max_le_mtu": "0x0000c401", + "l2cap_register_packet_handler": "0x0000c529", + "l2cap_register_service": "0x0000c535", + "l2cap_request_can_send_now_event": "0x0000c645", + "l2cap_request_connection_parameter_update": "0x0000c65f", + "l2cap_send_echo_request": "0x0000cb39", + "l2cap_unregister_service": "0x0000cbf9", + "le_device_db_add": "0x0000cc51", + "le_device_db_find": "0x0000cd29", + "le_device_db_from_key": "0x0000cd55", + "le_device_db_iter_cur": "0x0000cd5d", + "le_device_db_iter_cur_key": "0x0000cd61", + "le_device_db_iter_init": "0x0000cd65", + "le_device_db_iter_next": "0x0000cd6d", + "le_device_db_remove_key": "0x0000cd93", + "ll_ackable_packet_alloc": "0x0000cdbf", + "ll_ackable_packet_get_status": "0x0000cef9", + "ll_ackable_packet_run": "0x0000cf69", + "ll_ackable_packet_set_tx_data": "0x0000d00d", + "ll_adjust_conn_peer_tx_power": "0x0000d035", + "ll_aes_encrypt": "0x0000d061", + "ll_channel_monitor_alloc": "0x0000d0dd", + "ll_channel_monitor_check_each_pdu": "0x0000d15f", + "ll_channel_monitor_run": "0x0000d1cd", + "ll_config": "0x0000d281", + "ll_conn_abort": "0x0000d29d", + "ll_create_conn": "0x0000d2d1", + "ll_dhkey_generated": "0x0000d54d", + "ll_free": "0x0000d581", + "ll_get_capabilities": "0x0000d58d", + "ll_get_conn_events_info": "0x0000d5ad", + "ll_get_conn_info": "0x0000d691", + "ll_get_heap_free_size": "0x0000d6dd", + "ll_get_states": "0x0000d6ed", + "ll_hint_on_ce_len": "0x0000d7a9", + "ll_install_ecc_engine": "0x0000d7e1", + "ll_legacy_adv_set_interval": "0x0000d7ed", + "ll_lock_frequency": "0x0000d7fd", + "ll_malloc": "0x0000d861", + "ll_p256_key_pair_generated": "0x0000d869", + "ll_raw_packet_alloc": "0x0000da1d", + "ll_raw_packet_free": "0x0000daf1", + "ll_raw_packet_get_bare_rx_data": "0x0000db29", + "ll_raw_packet_get_rx_data": "0x0000dbef", + "ll_raw_packet_recv": "0x0000dc91", + "ll_raw_packet_send": "0x0000dd4d", + "ll_raw_packet_set_bare_data": "0x0000de35", + "ll_raw_packet_set_bare_mode": "0x0000de73", + "ll_raw_packet_set_param": "0x0000df79", + "ll_raw_packet_set_tx_data": "0x0000dfd7", + "ll_register_hci_acl_previewer": "0x0000e03d", + "ll_scan_set_fixed_channel": "0x0000e0a1", + "ll_set_adv_access_address": "0x0000e2b9", + "ll_set_adv_coded_scheme": "0x0000e2c5", + "ll_set_conn_acl_report_latency": "0x0000e2f5", + "ll_set_conn_coded_scheme": "0x0000e325", + "ll_set_conn_interval_unit": "0x0000e351", + "ll_set_conn_latency": "0x0000e35d", + "ll_set_conn_tx_power": "0x0000e38d", + "ll_set_def_antenna": "0x0000e3c9", + "ll_set_initiating_coded_scheme": "0x0000e3e5", + "ll_set_max_conn_number": "0x0000e3f1", + "ll_set_tx_power_range": "0x0000e485", + "ll_unlock_frequency": "0x0000e4ad", + "nibble_for_char": "0x00020151", + "platform_calibrate_rt_clk": "0x000201ff", "platform_call_on_stack": "0x00004183", - "platform_config": "0x0001ff85", - "platform_delete_timer": "0x000200a9", - "platform_enable_irq": "0x000200b1", - "platform_get_current_task": "0x000200e9", - "platform_get_gen_os_driver": "0x0002010d", - "platform_get_heap_status": "0x00020115", - "platform_get_link_layer_interf": "0x0002012d", - "platform_get_task_handle": "0x00020135", - "platform_get_timer_counter": "0x00020155", - "platform_get_us_time": "0x00020159", - "platform_get_version": "0x0002015d", - "platform_hrng": "0x00020165", - "platform_install_isr_stack": "0x0002016d", - "platform_install_task_stack": "0x00020179", - "platform_patch_rf_init_data": "0x000201b1", - "platform_printf": "0x000201bd", - "platform_raise_assertion": "0x000201d1", - "platform_rand": "0x000201e5", - "platform_read_info": "0x000201e9", - "platform_read_persistent_reg": "0x00020219", - "platform_reset": "0x00020229", - "platform_rt_rc_auto_tune": "0x0002024d", - "platform_rt_rc_auto_tune2": "0x00020255", - "platform_rt_rc_tune": "0x000202dd", - "platform_set_abs_timer": "0x000202f1", - "platform_set_evt_callback": "0x000202f5", - "platform_set_evt_callback_table": "0x00020309", - "platform_set_irq_callback": "0x00020315", - "platform_set_irq_callback_table": "0x00020331", - "platform_set_rf_clk_source": "0x0002033d", - "platform_set_rf_init_data": "0x00020349", - "platform_set_rf_power_mapping": "0x00020355", - "platform_set_timer": "0x00020361", - "platform_shutdown": "0x00020365", - "platform_switch_app": "0x00020369", - "platform_trace_raw": "0x00020395", - "platform_write_persistent_reg": "0x000203ad", - "printf_hexdump": "0x00020561", - "pvPortMalloc": "0x00021055", - "pvTaskIncrementMutexHeldCount": "0x0002113d", - "pvTimerGetTimerID": "0x00021155", - "pxPortInitialiseStack": "0x00021181", - "reverse_128": "0x00021329", - "reverse_24": "0x0002132f", - "reverse_256": "0x00021335", - "reverse_48": "0x0002133b", - "reverse_56": "0x00021341", - "reverse_64": "0x00021347", - "reverse_bd_addr": "0x0002134d", - "reverse_bytes": "0x00021353", - "sm_add_event_handler": "0x00021541", - "sm_address_resolution_lookup": "0x00021685", - "sm_authenticated": "0x00021ab1", - "sm_authorization_decline": "0x00021abf", - "sm_authorization_grant": "0x00021adf", - "sm_authorization_state": "0x00021aff", - "sm_bonding_decline": "0x00021b19", - "sm_config": "0x00021f99", - "sm_config_conn": "0x00021fb1", - "sm_encryption_key_size": "0x00022167", - "sm_just_works_confirm": "0x00022eb5", - "sm_le_device_key": "0x00023295", - "sm_numeric_comparison_confirm": "0x000233e7", - "sm_passkey_input": "0x00023425", - "sm_private_random_address_generation_get": "0x00023a25", - "sm_private_random_address_generation_get_mode": "0x00023a2d", - "sm_private_random_address_generation_set_mode": "0x00023a39", - "sm_private_random_address_generation_set_update_period": "0x00023a61", - "sm_register_external_ltk_callback": "0x00023ced", - "sm_register_oob_data_callback": "0x00023cf9", - "sm_register_sc_oob_data_callback": "0x00023d05", - "sm_request_pairing": "0x00023d11", - "sm_sc_generate_oob_data": "0x00024949", - "sm_send_security_request": "0x00024a79", - "sm_set_accepted_stk_generation_methods": "0x00024aa1", - "sm_set_authentication_requirements": "0x00024aad", - "sm_set_encryption_key_size_range": "0x00024ab9", - "sscanf_bd_addr": "0x00024ed5", - "sysSetPublicDeviceAddr": "0x00025289", - "uuid128_to_str": "0x000258c5", - "uuid_add_bluetooth_prefix": "0x0002591d", - "uuid_has_bluetooth_prefix": "0x0002593d", - "uxListRemove": "0x00025959", - "uxQueueMessagesWaiting": "0x00025981", - "uxQueueMessagesWaitingFromISR": "0x000259a9", - "uxQueueSpacesAvailable": "0x000259c5", - "uxTaskGetStackHighWaterMark": "0x000259f1", - "uxTaskPriorityGet": "0x00025a11", - "uxTaskPriorityGetFromISR": "0x00025a2d", - "vListInitialise": "0x00025ae7", - "vListInitialiseItem": "0x00025afd", - "vListInsert": "0x00025b03", - "vListInsertEnd": "0x00025b33", - "vPortEndScheduler": "0x00025b4d", - "vPortEnterCritical": "0x00025b79", - "vPortExitCritical": "0x00025bbd", - "vPortFree": "0x00025bf1", - "vPortSuppressTicksAndSleep": "0x00025c85", - "vPortValidateInterruptPriority": "0x00025dad", - "vQueueDelete": "0x00025e09", - "vQueueWaitForMessageRestricted": "0x00025e35", - "vTaskDelay": "0x00025e7d", - "vTaskInternalSetTimeOutState": "0x00025ec9", - "vTaskMissedYield": "0x00025ed9", - "vTaskPlaceOnEventList": "0x00025ee5", - "vTaskPlaceOnEventListRestricted": "0x00025f1d", - "vTaskPriorityDisinheritAfterTimeout": "0x00025f5d", - "vTaskPrioritySet": "0x00026009", - "vTaskResume": "0x000260d1", - "vTaskStartScheduler": "0x00026155", - "vTaskStepTick": "0x000261e5", - "vTaskSuspend": "0x00026215", - "vTaskSuspendAll": "0x000262d1", - "vTaskSwitchContext": "0x000262e1", - "xPortStartScheduler": "0x00026391", - "xQueueAddToSet": "0x00026459", - "xQueueCreateCountingSemaphore": "0x0002647d", - "xQueueCreateCountingSemaphoreStatic": "0x000264b9", - "xQueueCreateMutex": "0x000264fd", - "xQueueCreateMutexStatic": "0x00026513", - "xQueueCreateSet": "0x0002652d", - "xQueueGenericCreate": "0x00026535", - "xQueueGenericCreateStatic": "0x00026581", - "xQueueGenericReset": "0x000265e9", - "xQueueGenericSend": "0x00026675", - "xQueueGenericSendFromISR": "0x000267e1", - "xQueueGiveFromISR": "0x000268a1", - "xQueueGiveMutexRecursive": "0x00026945", - "xQueueIsQueueEmptyFromISR": "0x00026985", - "xQueueIsQueueFullFromISR": "0x000269a9", - "xQueuePeek": "0x000269d1", - "xQueuePeekFromISR": "0x00026af9", - "xQueueReceive": "0x00026b65", - "xQueueReceiveFromISR": "0x00026c91", - "xQueueRemoveFromSet": "0x00026d25", - "xQueueSelectFromSet": "0x00026d47", - "xQueueSelectFromSetFromISR": "0x00026d59", - "xQueueSemaphoreTake": "0x00026d6d", - "xQueueTakeMutexRecursive": "0x00026ed9", - "xTaskCheckForTimeOut": "0x00026f1d", - "xTaskCreate": "0x00026f8d", - "xTaskCreateStatic": "0x00026fe9", - "xTaskGetCurrentTaskHandle": "0x00027059", - "xTaskGetSchedulerState": "0x00027065", - "xTaskGetTickCount": "0x00027081", - "xTaskGetTickCountFromISR": "0x0002708d", - "xTaskIncrementTick": "0x0002709d", - "xTaskPriorityDisinherit": "0x00027169", - "xTaskPriorityInherit": "0x000271fd", - "xTaskRemoveFromEventList": "0x00027291", - "xTaskResumeAll": "0x00027311", - "xTaskResumeFromISR": "0x000273d9", - "xTimerCreate": "0x00027465", - "xTimerCreateStatic": "0x00027499", - "xTimerCreateTimerTask": "0x000274d1", - "xTimerGenericCommand": "0x0002753d", - "xTimerGetExpiryTime": "0x000275ad", - "xTimerGetTimerDaemonTaskHandle": "0x000275cd" + "platform_cancel_us_timer": "0x00020203", + "platform_config": "0x00020219", + "platform_create_us_timer": "0x0002033d", + "platform_delete_timer": "0x00020351", + "platform_enable_irq": "0x00020359", + "platform_get_current_task": "0x00020391", + "platform_get_gen_os_driver": "0x000203b5", + "platform_get_heap_status": "0x000203bd", + "platform_get_link_layer_interf": "0x000203d5", + "platform_get_task_handle": "0x000203dd", + "platform_get_timer_counter": "0x000203fd", + "platform_get_us_time": "0x00020401", + "platform_get_version": "0x00020405", + "platform_hrng": "0x0002040d", + "platform_install_isr_stack": "0x00020415", + "platform_install_task_stack": "0x00020421", + "platform_patch_rf_init_data": "0x00020459", + "platform_printf": "0x00020465", + "platform_raise_assertion": "0x00020479", + "platform_rand": "0x0002048d", + "platform_read_info": "0x00020491", + "platform_read_persistent_reg": "0x000204c1", + "platform_reset": "0x000204d1", + "platform_rt_rc_auto_tune": "0x000204f5", + "platform_rt_rc_auto_tune2": "0x000204fd", + "platform_rt_rc_tune": "0x00020579", + "platform_set_abs_timer": "0x0002059d", + "platform_set_evt_callback": "0x000205a1", + "platform_set_evt_callback_table": "0x000205b5", + "platform_set_irq_callback": "0x000205c1", + "platform_set_irq_callback_table": "0x000205dd", + "platform_set_rf_clk_source": "0x000205e9", + "platform_set_rf_init_data": "0x000205f5", + "platform_set_rf_power_mapping": "0x00020601", + "platform_set_timer": "0x0002060d", + "platform_shutdown": "0x00020611", + "platform_switch_app": "0x00020615", + "platform_trace_raw": "0x00020641", + "platform_write_persistent_reg": "0x00020659", + "printf_hexdump": "0x0002080d", + "pvPortMalloc": "0x00021301", + "pvTaskIncrementMutexHeldCount": "0x000213e9", + "pvTimerGetTimerID": "0x00021401", + "pxPortInitialiseStack": "0x0002142d", + "reverse_128": "0x000215d5", + "reverse_24": "0x000215db", + "reverse_256": "0x000215e1", + "reverse_48": "0x000215e7", + "reverse_56": "0x000215ed", + "reverse_64": "0x000215f3", + "reverse_bd_addr": "0x000215f9", + "reverse_bytes": "0x000215ff", + "sm_add_event_handler": "0x000217ed", + "sm_address_resolution_lookup": "0x00021931", + "sm_authenticated": "0x00021d79", + "sm_authorization_decline": "0x00021d87", + "sm_authorization_grant": "0x00021da7", + "sm_authorization_state": "0x00021dc7", + "sm_bonding_decline": "0x00021de1", + "sm_config": "0x00022269", + "sm_config_conn": "0x0002229d", + "sm_encryption_key_size": "0x00022483", + "sm_just_works_confirm": "0x00023075", + "sm_le_device_key": "0x00023465", + "sm_numeric_comparison_confirm": "0x000235af", + "sm_passkey_input": "0x000235ed", + "sm_private_random_address_generation_get": "0x00023bd9", + "sm_private_random_address_generation_get_mode": "0x00023be1", + "sm_private_random_address_generation_set_mode": "0x00023bed", + "sm_private_random_address_generation_set_update_period": "0x00023c15", + "sm_register_external_ltk_callback": "0x00023ea9", + "sm_register_oob_data_callback": "0x00023eb5", + "sm_register_sc_oob_data_callback": "0x00023ec1", + "sm_request_pairing": "0x00023ecd", + "sm_sc_generate_oob_data": "0x00024b55", + "sm_send_security_request": "0x00024e71", + "sm_set_accepted_stk_generation_methods": "0x00024e99", + "sm_set_authentication_requirements": "0x00024ea5", + "sm_set_encryption_key_size_range": "0x00024eb5", + "sscanf_bd_addr": "0x000252c1", + "sysSetPublicDeviceAddr": "0x000256bd", + "uuid128_to_str": "0x00025d0d", + "uuid_add_bluetooth_prefix": "0x00025d65", + "uuid_has_bluetooth_prefix": "0x00025d85", + "uxListRemove": "0x00025da1", + "uxQueueMessagesWaiting": "0x00025dc9", + "uxQueueMessagesWaitingFromISR": "0x00025df1", + "uxQueueSpacesAvailable": "0x00025e0d", + "uxTaskGetStackHighWaterMark": "0x00025e39", + "uxTaskPriorityGet": "0x00025e59", + "uxTaskPriorityGetFromISR": "0x00025e75", + "vListInitialise": "0x00025f2f", + "vListInitialiseItem": "0x00025f45", + "vListInsert": "0x00025f4b", + "vListInsertEnd": "0x00025f7b", + "vPortEndScheduler": "0x00025f95", + "vPortEnterCritical": "0x00025fc1", + "vPortExitCritical": "0x00026005", + "vPortFree": "0x00026039", + "vPortSuppressTicksAndSleep": "0x000260cd", + "vPortValidateInterruptPriority": "0x000261f5", + "vQueueDelete": "0x00026251", + "vQueueWaitForMessageRestricted": "0x0002627d", + "vTaskDelay": "0x000262c5", + "vTaskInternalSetTimeOutState": "0x00026311", + "vTaskMissedYield": "0x00026321", + "vTaskPlaceOnEventList": "0x0002632d", + "vTaskPlaceOnEventListRestricted": "0x00026365", + "vTaskPriorityDisinheritAfterTimeout": "0x000263a5", + "vTaskPrioritySet": "0x00026451", + "vTaskResume": "0x00026519", + "vTaskStartScheduler": "0x0002659d", + "vTaskStepTick": "0x0002662d", + "vTaskSuspend": "0x0002665d", + "vTaskSuspendAll": "0x00026719", + "vTaskSwitchContext": "0x00026729", + "xPortStartScheduler": "0x000267d1", + "xQueueAddToSet": "0x00026899", + "xQueueCreateCountingSemaphore": "0x000268bd", + "xQueueCreateCountingSemaphoreStatic": "0x000268f9", + "xQueueCreateMutex": "0x0002693d", + "xQueueCreateMutexStatic": "0x00026953", + "xQueueCreateSet": "0x0002696d", + "xQueueGenericCreate": "0x00026975", + "xQueueGenericCreateStatic": "0x000269c1", + "xQueueGenericReset": "0x00026a29", + "xQueueGenericSend": "0x00026ab5", + "xQueueGenericSendFromISR": "0x00026c21", + "xQueueGiveFromISR": "0x00026ce1", + "xQueueGiveMutexRecursive": "0x00026d85", + "xQueueIsQueueEmptyFromISR": "0x00026dc5", + "xQueueIsQueueFullFromISR": "0x00026de9", + "xQueuePeek": "0x00026e11", + "xQueuePeekFromISR": "0x00026f39", + "xQueueReceive": "0x00026fa5", + "xQueueReceiveFromISR": "0x000270d1", + "xQueueRemoveFromSet": "0x00027165", + "xQueueSelectFromSet": "0x00027187", + "xQueueSelectFromSetFromISR": "0x00027199", + "xQueueSemaphoreTake": "0x000271ad", + "xQueueTakeMutexRecursive": "0x00027319", + "xTaskCheckForTimeOut": "0x0002735d", + "xTaskCreate": "0x000273cd", + "xTaskCreateStatic": "0x00027429", + "xTaskGetCurrentTaskHandle": "0x00027499", + "xTaskGetSchedulerState": "0x000274a5", + "xTaskGetTickCount": "0x000274c1", + "xTaskGetTickCountFromISR": "0x000274cd", + "xTaskIncrementTick": "0x000274dd", + "xTaskPriorityDisinherit": "0x000275a9", + "xTaskPriorityInherit": "0x0002763d", + "xTaskRemoveFromEventList": "0x000276d1", + "xTaskResumeAll": "0x00027751", + "xTaskResumeFromISR": "0x00027819", + "xTimerCreate": "0x000278a5", + "xTimerCreateStatic": "0x000278d9", + "xTimerCreateTimerTask": "0x00027911", + "xTimerGenericCommand": "0x0002797d", + "xTimerGetExpiryTime": "0x000279ed", + "xTimerGetTimerDaemonTaskHandle": "0x00027a0d" } \ No newline at end of file diff --git a/bundles/exp/ING9187xx/meta.json b/bundles/exp/ING9187xx/meta.json index 2f5b38ea3..51f222d9c 100644 --- a/bundles/exp/ING9187xx/meta.json +++ b/bundles/exp/ING9187xx/meta.json @@ -4,15 +4,21 @@ }, "ram": { "base": 536870912, - "size": 30268 + "size": 30076 }, "rom": { "base": 16384, - "size": 151996 + "size": 153108 + }, + "var": { + "link_layer_features": { + "addr": 164840, + "value": "bff90104fe000000" + } }, "version": [ 1, 9, - 41 + 56 ] } \ No newline at end of file diff --git a/bundles/exp/ING9187xx/platform.bin b/bundles/exp/ING9187xx/platform.bin index 0efb48872..7148fcab0 100644 Binary files a/bundles/exp/ING9187xx/platform.bin and b/bundles/exp/ING9187xx/platform.bin differ diff --git a/bundles/exp/ING9188xx/apis.json b/bundles/exp/ING9188xx/apis.json index 47b258522..e2bdf264d 100644 --- a/bundles/exp/ING9188xx/apis.json +++ b/bundles/exp/ING9188xx/apis.json @@ -6,384 +6,391 @@ "att_dispatch_server_can_send_now": "0x000058f1", "att_dispatch_server_request_can_send_now_event": "0x000058f7", "att_emit_general_event": "0x000059a9", - "att_server_can_send_packet_now": "0x000060d9", - "att_server_deferred_read_response": "0x000060dd", - "att_server_get_mtu": "0x000060f5", - "att_server_indicate": "0x0000616d", - "att_server_init": "0x000061f1", - "att_server_notify": "0x0000622d", - "att_server_register_packet_handler": "0x00006345", - "att_server_request_can_send_now_event": "0x00006351", - "att_set_db": "0x0000636d", - "att_set_read_callback": "0x00006381", - "att_set_write_callback": "0x0000638d", - "bd_addr_cmp": "0x000064fd", - "bd_addr_copy": "0x00006503", - "bd_addr_to_str": "0x0000650d", - "big_endian_read_16": "0x00006545", - "big_endian_read_32": "0x0000654d", - "big_endian_store_16": "0x00006561", - "big_endian_store_32": "0x0000656d", - "btstack_config": "0x000066c1", - "btstack_memory_pool_create": "0x00006801", - "btstack_memory_pool_free": "0x00006829", - "btstack_memory_pool_get": "0x00006889", - "btstack_push_user_msg": "0x000068f1", - "btstack_push_user_runnable": "0x000068fd", - "btstack_reset": "0x00006909", - "char_for_nibble": "0x00006c1b", - "eTaskConfirmSleepModeStatus": "0x00006f01", - "gap_add_dev_to_periodic_list": "0x0000756d", - "gap_add_whitelist": "0x0000757d", - "gap_aes_encrypt": "0x00007589", - "gap_clear_white_lists": "0x000075c1", - "gap_clr_adv_set": "0x000075cd", - "gap_clr_periodic_adv_list": "0x000075d9", - "gap_create_connection_cancel": "0x000075e5", - "gap_default_periodic_adv_sync_transfer_param": "0x000075f1", - "gap_disconnect": "0x00007609", - "gap_disconnect_all": "0x00007635", - "gap_ext_create_connection": "0x00007675", - "gap_get_connection_parameter_range": "0x00007769", - "gap_le_read_channel_map": "0x000077a5", - "gap_periodic_adv_create_sync": "0x00007811", - "gap_periodic_adv_create_sync_cancel": "0x00007835", - "gap_periodic_adv_set_info_transfer": "0x00007841", - "gap_periodic_adv_sync_transfer": "0x00007851", - "gap_periodic_adv_sync_transfer_param": "0x00007861", - "gap_periodic_adv_term_sync": "0x0000787d", - "gap_read_antenna_info": "0x00007905", - "gap_read_local_tx_power_level": "0x0000791d", - "gap_read_periodic_adv_list_size": "0x0000792d", - "gap_read_phy": "0x00007939", - "gap_read_remote_tx_power_level": "0x00007945", - "gap_read_remote_used_features": "0x00007955", - "gap_read_remote_version": "0x00007961", - "gap_read_rssi": "0x0000796d", - "gap_remove_whitelist": "0x00007979", - "gap_rmv_adv_set": "0x000079f5", - "gap_rmv_dev_from_periodic_list": "0x00007a01", - "gap_rx_test_v2": "0x00007a11", - "gap_rx_test_v3": "0x00007a21", - "gap_set_adv_set_random_addr": "0x00007a6d", - "gap_set_callback_for_next_hci": "0x00007aa9", - "gap_set_connection_cte_request_enable": "0x00007ac9", - "gap_set_connection_cte_response_enable": "0x00007ae5", - "gap_set_connection_cte_rx_param": "0x00007af5", - "gap_set_connection_cte_tx_param": "0x00007b49", - "gap_set_connection_parameter_range": "0x00007b95", - "gap_set_connectionless_cte_tx_enable": "0x00007bad", - "gap_set_connectionless_cte_tx_param": "0x00007bbd", - "gap_set_connectionless_iq_sampling_enable": "0x00007c19", - "gap_set_data_length": "0x00007c75", - "gap_set_def_phy": "0x00007c8d", - "gap_set_default_subrate": "0x00007c9d", - "gap_set_ext_adv_data": "0x00007cb9", - "gap_set_ext_adv_enable": "0x00007cd1", - "gap_set_ext_adv_para": "0x00007d41", - "gap_set_ext_scan_enable": "0x00007e19", - "gap_set_ext_scan_para": "0x00007e31", - "gap_set_ext_scan_response_data": "0x00007ed1", - "gap_set_host_channel_classification": "0x00007ee9", - "gap_set_path_loss_reporting_enable": "0x00007ef9", - "gap_set_path_loss_reporting_param": "0x00007f09", - "gap_set_periodic_adv_data": "0x00007f25", - "gap_set_periodic_adv_enable": "0x00007f95", - "gap_set_periodic_adv_para": "0x00007fa5", - "gap_set_periodic_adv_rx_enable": "0x00007fbd", - "gap_set_phy": "0x00007fcd", - "gap_set_random_device_address": "0x00007fe9", - "gap_set_tx_power_reporting_enable": "0x00008009", - "gap_start_ccm": "0x00008029", - "gap_subrate_request": "0x00008071", - "gap_test_end": "0x0000808d", - "gap_tx_test_v2": "0x00008099", - "gap_tx_test_v4": "0x000080b1", - "gap_update_connection_parameters": "0x000080d5", - "gap_vendor_tx_continuous_wave": "0x00008119", - "gatt_client_cancel_write": "0x00008641", - "gatt_client_discover_characteristic_descriptors": "0x00008667", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x000086a7", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x000086f7", - "gatt_client_discover_characteristics_for_service": "0x00008747", - "gatt_client_discover_primary_services": "0x0000877d", - "gatt_client_discover_primary_services_by_uuid128": "0x000087af", - "gatt_client_discover_primary_services_by_uuid16": "0x000087f3", - "gatt_client_execute_write": "0x0000882f", - "gatt_client_find_included_services_for_service": "0x00008855", - "gatt_client_get_mtu": "0x00008883", - "gatt_client_is_ready": "0x00008925", - "gatt_client_listen_for_characteristic_value_updates": "0x0000893b", - "gatt_client_prepare_write": "0x0000895d", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x00008999", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x000089c3", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x000089c9", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x000089f7", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x000089fd", - "gatt_client_read_multiple_characteristic_values": "0x00008a2b", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x00008a5b", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x00008a89", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x00008ad5", - "gatt_client_register_handler": "0x00008b21", - "gatt_client_reliable_write_long_value_of_characteristic": "0x00008b2d", - "gatt_client_signed_write_without_response": "0x00008f5d", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00009021", - "gatt_client_write_client_characteristic_configuration": "0x0000905b", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x000090ad", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x000090bd", - "gatt_client_write_long_value_of_characteristic": "0x000090f9", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x00009109", - "gatt_client_write_value_of_characteristic": "0x00009145", - "gatt_client_write_value_of_characteristic_without_response": "0x0000917b", - "hci_add_event_handler": "0x0000a72d", - "hci_power_control": "0x0000aedd", - "hci_register_acl_packet_handler": "0x0000b091", - "kv_commit": "0x0000b805", - "kv_get": "0x0000b861", - "kv_init": "0x0000b86d", - "kv_init_backend": "0x0000b8ed", - "kv_put": "0x0000b901", - "kv_remove": "0x0000b90d", - "kv_remove_all": "0x0000b941", - "kv_value_modified": "0x0000b971", - "kv_value_modified_of_key": "0x0000b98d", - "kv_visit": "0x0000b999", - "l2cap_add_event_handler": "0x0000ba29", - "l2cap_can_send_packet_now": "0x0000ba39", - "l2cap_create_le_credit_based_connection_request": "0x0000bbf5", - "l2cap_credit_based_send": "0x0000bd39", - "l2cap_credit_based_send_continue": "0x0000bd65", - "l2cap_disconnect": "0x0000bde1", - "l2cap_get_le_credit_based_connection_credits": "0x0000c031", - "l2cap_get_peer_mtu_for_local_cid": "0x0000c04d", - "l2cap_init": "0x0000c421", - "l2cap_le_send_flow_control_credit": "0x0000c517", - "l2cap_max_le_mtu": "0x0000c821", - "l2cap_register_packet_handler": "0x0000c949", - "l2cap_register_service": "0x0000c955", - "l2cap_request_can_send_now_event": "0x0000ca65", - "l2cap_request_connection_parameter_update": "0x0000ca7f", - "l2cap_send_echo_request": "0x0000cf59", - "l2cap_unregister_service": "0x0000d019", - "le_device_db_add": "0x0000d071", - "le_device_db_find": "0x0000d149", - "le_device_db_from_key": "0x0000d175", - "le_device_db_iter_cur": "0x0000d17d", - "le_device_db_iter_cur_key": "0x0000d181", - "le_device_db_iter_init": "0x0000d185", - "le_device_db_iter_next": "0x0000d18d", - "le_device_db_remove_key": "0x0000d1b3", - "ll_ackable_packet_alloc": "0x0000d1df", - "ll_ackable_packet_get_status": "0x0000d319", - "ll_ackable_packet_run": "0x0000d389", - "ll_ackable_packet_set_tx_data": "0x0000d42d", - "ll_adjust_conn_peer_tx_power": "0x0000d455", - "ll_aes_encrypt": "0x0000d481", - "ll_channel_monitor_alloc": "0x0000d4fd", - "ll_channel_monitor_check_each_pdu": "0x0000d57f", - "ll_channel_monitor_run": "0x0000d5e5", - "ll_config": "0x0000d699", - "ll_conn_abort": "0x0000d6b5", - "ll_create_conn": "0x0000d6e9", - "ll_dhkey_generated": "0x0000d965", - "ll_free": "0x0000d999", - "ll_get_conn_events_info": "0x0000d9a5", - "ll_get_conn_info": "0x0000da89", - "ll_get_heap_free_size": "0x0000dad5", - "ll_hint_on_ce_len": "0x0000dae9", - "ll_install_ecc_engine": "0x0000db21", - "ll_legacy_adv_set_interval": "0x0000db2d", - "ll_lock_frequency": "0x0000db3d", - "ll_malloc": "0x0000dba1", - "ll_p256_key_pair_generated": "0x0000dba9", - "ll_raw_packet_alloc": "0x0000dd5d", - "ll_raw_packet_free": "0x0000de31", - "ll_raw_packet_get_bare_rx_data": "0x0000de69", - "ll_raw_packet_get_iq_samples": "0x0000df2f", - "ll_raw_packet_get_rx_data": "0x0000dfc9", - "ll_raw_packet_recv": "0x0000e069", - "ll_raw_packet_send": "0x0000e125", - "ll_raw_packet_set_bare_data": "0x0000e20d", - "ll_raw_packet_set_bare_mode": "0x0000e24b", - "ll_raw_packet_set_fake_cte_info": "0x0000e351", - "ll_raw_packet_set_param": "0x0000e373", - "ll_raw_packet_set_rx_cte": "0x0000e3d1", - "ll_raw_packet_set_tx_cte": "0x0000e467", - "ll_raw_packet_set_tx_data": "0x0000e4a5", - "ll_register_hci_acl_previewer": "0x0000e509", - "ll_scan_set_fixed_channel": "0x0000e56d", - "ll_scanner_enable_iq_sampling": "0x0000e579", - "ll_set_adv_access_address": "0x0000e82d", - "ll_set_adv_coded_scheme": "0x0000e839", - "ll_set_conn_acl_report_latency": "0x0000e869", - "ll_set_conn_coded_scheme": "0x0000e899", - "ll_set_conn_interval_unit": "0x0000e8c5", - "ll_set_conn_latency": "0x0000e8d1", - "ll_set_conn_tx_power": "0x0000e901", - "ll_set_def_antenna": "0x0000e93d", - "ll_set_initiating_coded_scheme": "0x0000e959", - "ll_set_max_conn_number": "0x0000e965", - "ll_set_tx_power_range": "0x0000e9f9", - "ll_unlock_frequency": "0x0000ea21", - "nibble_for_char": "0x000214ed", - "platform_calibrate_rt_clk": "0x0002159b", + "att_server_can_send_packet_now": "0x000060dd", + "att_server_deferred_read_response": "0x000060e1", + "att_server_get_mtu": "0x000060f9", + "att_server_indicate": "0x00006171", + "att_server_init": "0x000061f5", + "att_server_notify": "0x00006231", + "att_server_register_packet_handler": "0x00006349", + "att_server_request_can_send_now_event": "0x00006355", + "att_set_db": "0x00006371", + "att_set_read_callback": "0x00006385", + "att_set_write_callback": "0x00006391", + "bd_addr_cmp": "0x00006501", + "bd_addr_copy": "0x00006507", + "bd_addr_to_str": "0x00006511", + "big_endian_read_16": "0x00006549", + "big_endian_read_32": "0x00006551", + "big_endian_store_16": "0x00006565", + "big_endian_store_32": "0x00006571", + "btstack_config": "0x000066c5", + "btstack_get_capabilities": "0x000066d1", + "btstack_memory_pool_create": "0x00006819", + "btstack_memory_pool_free": "0x00006841", + "btstack_memory_pool_get": "0x000068a1", + "btstack_push_user_msg": "0x00006909", + "btstack_push_user_runnable": "0x00006915", + "btstack_reset": "0x00006921", + "char_for_nibble": "0x00006c33", + "eTaskConfirmSleepModeStatus": "0x00006f19", + "gap_add_dev_to_periodic_list": "0x00007571", + "gap_add_whitelist": "0x00007581", + "gap_aes_encrypt": "0x0000758d", + "gap_clear_white_lists": "0x000075c5", + "gap_clr_adv_set": "0x000075d1", + "gap_clr_periodic_adv_list": "0x000075dd", + "gap_create_connection_cancel": "0x000075e9", + "gap_default_periodic_adv_sync_transfer_param": "0x000075f5", + "gap_disconnect": "0x0000760d", + "gap_disconnect2": "0x00007615", + "gap_disconnect_all": "0x00007641", + "gap_ext_create_connection": "0x00007681", + "gap_get_connection_parameter_range": "0x00007775", + "gap_le_read_channel_map": "0x000077ad", + "gap_periodic_adv_create_sync": "0x0000780d", + "gap_periodic_adv_create_sync_cancel": "0x00007831", + "gap_periodic_adv_set_info_transfer": "0x0000783d", + "gap_periodic_adv_sync_transfer": "0x0000784d", + "gap_periodic_adv_sync_transfer_param": "0x0000785d", + "gap_periodic_adv_term_sync": "0x00007879", + "gap_read_antenna_info": "0x00007901", + "gap_read_local_tx_power_level": "0x00007919", + "gap_read_periodic_adv_list_size": "0x00007929", + "gap_read_phy": "0x00007935", + "gap_read_remote_tx_power_level": "0x00007941", + "gap_read_remote_used_features": "0x00007951", + "gap_read_remote_version": "0x0000795d", + "gap_read_rssi": "0x00007969", + "gap_read_white_lists_size": "0x00007975", + "gap_remove_whitelist": "0x00007981", + "gap_rmv_adv_set": "0x000079fd", + "gap_rmv_dev_from_periodic_list": "0x00007a09", + "gap_rx_test_v2": "0x00007a19", + "gap_rx_test_v3": "0x00007a29", + "gap_set_adv_set_random_addr": "0x00007a75", + "gap_set_callback_for_next_hci": "0x00007a99", + "gap_set_connection_cte_request_enable": "0x00007ab9", + "gap_set_connection_cte_response_enable": "0x00007ad5", + "gap_set_connection_cte_rx_param": "0x00007ae5", + "gap_set_connection_cte_tx_param": "0x00007b39", + "gap_set_connection_parameter_range": "0x00007b85", + "gap_set_connectionless_cte_tx_enable": "0x00007b9d", + "gap_set_connectionless_cte_tx_param": "0x00007bad", + "gap_set_connectionless_iq_sampling_enable": "0x00007c09", + "gap_set_data_length": "0x00007c65", + "gap_set_def_phy": "0x00007c7d", + "gap_set_default_subrate": "0x00007c8d", + "gap_set_ext_adv_data": "0x00007ca9", + "gap_set_ext_adv_enable": "0x00007cc1", + "gap_set_ext_adv_para": "0x00007d31", + "gap_set_ext_scan_enable": "0x00007df9", + "gap_set_ext_scan_para": "0x00007e11", + "gap_set_ext_scan_response_data": "0x00007eb1", + "gap_set_host_channel_classification": "0x00007ec9", + "gap_set_path_loss_reporting_enable": "0x00007ed9", + "gap_set_path_loss_reporting_param": "0x00007ee9", + "gap_set_periodic_adv_data": "0x00007f05", + "gap_set_periodic_adv_enable": "0x00007f75", + "gap_set_periodic_adv_para": "0x00007f85", + "gap_set_periodic_adv_rx_enable": "0x00007f9d", + "gap_set_phy": "0x00007fad", + "gap_set_random_device_address": "0x00007fc9", + "gap_set_tx_power_reporting_enable": "0x00007fd5", + "gap_start_ccm": "0x00007ff5", + "gap_subrate_request": "0x0000803d", + "gap_test_end": "0x00008059", + "gap_tx_test_v2": "0x00008065", + "gap_tx_test_v4": "0x0000807d", + "gap_update_connection_parameters": "0x000080a1", + "gap_vendor_tx_continuous_wave": "0x000080e5", + "gatt_client_cancel_write": "0x0000860d", + "gatt_client_discover_characteristic_descriptors": "0x00008633", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x00008673", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x000086c3", + "gatt_client_discover_characteristics_for_service": "0x00008713", + "gatt_client_discover_primary_services": "0x00008749", + "gatt_client_discover_primary_services_by_uuid128": "0x0000877b", + "gatt_client_discover_primary_services_by_uuid16": "0x000087bf", + "gatt_client_execute_write": "0x000087fb", + "gatt_client_find_included_services_for_service": "0x00008821", + "gatt_client_get_mtu": "0x0000884f", + "gatt_client_is_ready": "0x000088f9", + "gatt_client_listen_for_characteristic_value_updates": "0x0000890f", + "gatt_client_prepare_write": "0x00008931", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x0000896d", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x00008997", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x0000899d", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x000089cb", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x000089d1", + "gatt_client_read_multiple_characteristic_values": "0x000089ff", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x00008a2f", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x00008a5d", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x00008aa9", + "gatt_client_register_handler": "0x00008af5", + "gatt_client_reliable_write_long_value_of_characteristic": "0x00008b01", + "gatt_client_signed_write_without_response": "0x00008f31", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008ff5", + "gatt_client_write_client_characteristic_configuration": "0x0000902f", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00009081", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00009091", + "gatt_client_write_long_value_of_characteristic": "0x000090cd", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x000090dd", + "gatt_client_write_value_of_characteristic": "0x00009119", + "gatt_client_write_value_of_characteristic_without_response": "0x0000914f", + "hci_add_event_handler": "0x0000a6f9", + "hci_power_control": "0x0000aea5", + "hci_register_acl_packet_handler": "0x0000b059", + "kv_commit": "0x0000b7bd", + "kv_get": "0x0000b819", + "kv_init": "0x0000b825", + "kv_init_backend": "0x0000b8a5", + "kv_put": "0x0000b8b9", + "kv_remove": "0x0000b8c5", + "kv_remove_all": "0x0000b8f9", + "kv_value_modified": "0x0000b929", + "kv_value_modified_of_key": "0x0000b945", + "kv_visit": "0x0000b951", + "l2cap_add_event_handler": "0x0000b9e1", + "l2cap_can_send_packet_now": "0x0000b9f1", + "l2cap_create_le_credit_based_connection_request": "0x0000bbad", + "l2cap_credit_based_send": "0x0000bcf1", + "l2cap_credit_based_send_continue": "0x0000bd1d", + "l2cap_disconnect": "0x0000bd99", + "l2cap_get_le_credit_based_connection_credits": "0x0000bfe9", + "l2cap_get_peer_mtu_for_local_cid": "0x0000c005", + "l2cap_init": "0x0000c3d9", + "l2cap_le_send_flow_control_credit": "0x0000c4cf", + "l2cap_max_le_mtu": "0x0000c7d9", + "l2cap_register_packet_handler": "0x0000c901", + "l2cap_register_service": "0x0000c90d", + "l2cap_request_can_send_now_event": "0x0000ca1d", + "l2cap_request_connection_parameter_update": "0x0000ca37", + "l2cap_send_echo_request": "0x0000cf11", + "l2cap_unregister_service": "0x0000cfd1", + "le_device_db_add": "0x0000d029", + "le_device_db_find": "0x0000d101", + "le_device_db_from_key": "0x0000d12d", + "le_device_db_iter_cur": "0x0000d135", + "le_device_db_iter_cur_key": "0x0000d139", + "le_device_db_iter_init": "0x0000d13d", + "le_device_db_iter_next": "0x0000d145", + "le_device_db_remove_key": "0x0000d16b", + "ll_ackable_packet_alloc": "0x0000d197", + "ll_ackable_packet_get_status": "0x0000d2d1", + "ll_ackable_packet_run": "0x0000d341", + "ll_ackable_packet_set_tx_data": "0x0000d3e5", + "ll_adjust_conn_peer_tx_power": "0x0000d40d", + "ll_aes_encrypt": "0x0000d439", + "ll_channel_monitor_alloc": "0x0000d4b5", + "ll_channel_monitor_check_each_pdu": "0x0000d537", + "ll_channel_monitor_run": "0x0000d5a5", + "ll_config": "0x0000d659", + "ll_conn_abort": "0x0000d675", + "ll_create_conn": "0x0000d6a9", + "ll_dhkey_generated": "0x0000d925", + "ll_free": "0x0000d959", + "ll_get_capabilities": "0x0000d965", + "ll_get_conn_events_info": "0x0000d985", + "ll_get_conn_info": "0x0000da69", + "ll_get_heap_free_size": "0x0000dab5", + "ll_get_states": "0x0000dac5", + "ll_hint_on_ce_len": "0x0000db81", + "ll_install_ecc_engine": "0x0000dbb9", + "ll_legacy_adv_set_interval": "0x0000dbc5", + "ll_lock_frequency": "0x0000dbd5", + "ll_malloc": "0x0000dc39", + "ll_p256_key_pair_generated": "0x0000dc41", + "ll_raw_packet_alloc": "0x0000ddf5", + "ll_raw_packet_free": "0x0000dec9", + "ll_raw_packet_get_bare_rx_data": "0x0000df01", + "ll_raw_packet_get_iq_samples": "0x0000dfc7", + "ll_raw_packet_get_rx_data": "0x0000e061", + "ll_raw_packet_recv": "0x0000e101", + "ll_raw_packet_send": "0x0000e1bd", + "ll_raw_packet_set_bare_data": "0x0000e2a5", + "ll_raw_packet_set_bare_mode": "0x0000e2e3", + "ll_raw_packet_set_fake_cte_info": "0x0000e3e9", + "ll_raw_packet_set_param": "0x0000e40b", + "ll_raw_packet_set_rx_cte": "0x0000e469", + "ll_raw_packet_set_tx_cte": "0x0000e4ff", + "ll_raw_packet_set_tx_data": "0x0000e53d", + "ll_register_hci_acl_previewer": "0x0000e5a1", + "ll_scan_set_fixed_channel": "0x0000e605", + "ll_scanner_enable_iq_sampling": "0x0000e611", + "ll_set_adv_access_address": "0x0000e8c5", + "ll_set_adv_coded_scheme": "0x0000e8d1", + "ll_set_conn_acl_report_latency": "0x0000e901", + "ll_set_conn_coded_scheme": "0x0000e931", + "ll_set_conn_interval_unit": "0x0000e95d", + "ll_set_conn_latency": "0x0000e969", + "ll_set_conn_tx_power": "0x0000e999", + "ll_set_def_antenna": "0x0000e9d5", + "ll_set_initiating_coded_scheme": "0x0000e9f1", + "ll_set_max_conn_number": "0x0000e9fd", + "ll_set_tx_power_range": "0x0000ea91", + "ll_unlock_frequency": "0x0000eab9", + "nibble_for_char": "0x00021771", + "platform_calibrate_rt_clk": "0x0002181f", "platform_call_on_stack": "0x00004183", - "platform_config": "0x000215a1", - "platform_delete_timer": "0x000216c5", - "platform_enable_irq": "0x000216cd", - "platform_get_current_task": "0x00021705", - "platform_get_gen_os_driver": "0x00021729", - "platform_get_heap_status": "0x00021731", - "platform_get_link_layer_interf": "0x00021749", - "platform_get_task_handle": "0x00021751", - "platform_get_timer_counter": "0x00021771", - "platform_get_us_time": "0x00021775", - "platform_get_version": "0x00021779", - "platform_hrng": "0x00021781", - "platform_install_isr_stack": "0x00021789", - "platform_install_task_stack": "0x00021795", - "platform_patch_rf_init_data": "0x000217cd", - "platform_printf": "0x000217d9", - "platform_raise_assertion": "0x000217ed", - "platform_rand": "0x00021801", - "platform_read_info": "0x00021805", - "platform_read_persistent_reg": "0x00021835", - "platform_reset": "0x00021845", - "platform_rt_rc_auto_tune": "0x00021869", - "platform_rt_rc_auto_tune2": "0x00021871", - "platform_rt_rc_tune": "0x000218f9", - "platform_set_abs_timer": "0x0002190d", - "platform_set_evt_callback": "0x00021911", - "platform_set_evt_callback_table": "0x00021925", - "platform_set_irq_callback": "0x00021931", - "platform_set_irq_callback_table": "0x0002194d", - "platform_set_rf_clk_source": "0x00021959", - "platform_set_rf_init_data": "0x00021965", - "platform_set_rf_power_mapping": "0x00021971", - "platform_set_timer": "0x0002197d", - "platform_shutdown": "0x00021981", - "platform_switch_app": "0x00021985", - "platform_trace_raw": "0x000219b1", - "platform_write_persistent_reg": "0x000219c9", - "printf_hexdump": "0x00021b7d", - "pvPortMalloc": "0x00022671", - "pvTaskIncrementMutexHeldCount": "0x00022759", - "pvTimerGetTimerID": "0x00022771", - "pxPortInitialiseStack": "0x0002279d", - "reverse_128": "0x0002297d", - "reverse_24": "0x00022983", - "reverse_256": "0x00022989", - "reverse_48": "0x0002298f", - "reverse_56": "0x00022995", - "reverse_64": "0x0002299b", - "reverse_bd_addr": "0x000229a1", - "reverse_bytes": "0x000229a7", - "sm_add_event_handler": "0x00022ce5", - "sm_address_resolution_lookup": "0x00022e29", - "sm_authenticated": "0x00023255", - "sm_authorization_decline": "0x00023263", - "sm_authorization_grant": "0x00023283", - "sm_authorization_state": "0x000232a3", - "sm_bonding_decline": "0x000232bd", - "sm_config": "0x0002373d", - "sm_config_conn": "0x00023755", - "sm_encryption_key_size": "0x0002390b", - "sm_just_works_confirm": "0x00024659", - "sm_le_device_key": "0x00024a39", - "sm_numeric_comparison_confirm": "0x00024b8b", - "sm_passkey_input": "0x00024bc9", - "sm_private_random_address_generation_get": "0x000251c9", - "sm_private_random_address_generation_get_mode": "0x000251d1", - "sm_private_random_address_generation_set_mode": "0x000251dd", - "sm_private_random_address_generation_set_update_period": "0x00025205", - "sm_register_external_ltk_callback": "0x00025491", - "sm_register_oob_data_callback": "0x0002549d", - "sm_register_sc_oob_data_callback": "0x000254a9", - "sm_request_pairing": "0x000254b5", - "sm_sc_generate_oob_data": "0x000260ed", - "sm_send_security_request": "0x0002621d", - "sm_set_accepted_stk_generation_methods": "0x00026245", - "sm_set_authentication_requirements": "0x00026251", - "sm_set_encryption_key_size_range": "0x0002625d", - "sscanf_bd_addr": "0x00026679", - "sysSetPublicDeviceAddr": "0x00026a2d", - "uuid128_to_str": "0x00027201", - "uuid_add_bluetooth_prefix": "0x00027259", - "uuid_has_bluetooth_prefix": "0x00027279", - "uxListRemove": "0x00027295", - "uxQueueMessagesWaiting": "0x000272bd", - "uxQueueMessagesWaitingFromISR": "0x000272e5", - "uxQueueSpacesAvailable": "0x00027301", - "uxTaskGetStackHighWaterMark": "0x0002732d", - "uxTaskPriorityGet": "0x0002734d", - "uxTaskPriorityGetFromISR": "0x00027369", - "vListInitialise": "0x00027423", - "vListInitialiseItem": "0x00027439", - "vListInsert": "0x0002743f", - "vListInsertEnd": "0x0002746f", - "vPortEndScheduler": "0x00027489", - "vPortEnterCritical": "0x000274b5", - "vPortExitCritical": "0x000274f9", - "vPortFree": "0x0002752d", - "vPortSuppressTicksAndSleep": "0x000275c1", - "vPortValidateInterruptPriority": "0x000276e9", - "vQueueDelete": "0x00027745", - "vQueueWaitForMessageRestricted": "0x00027771", - "vTaskDelay": "0x000277b9", - "vTaskInternalSetTimeOutState": "0x00027805", - "vTaskMissedYield": "0x00027815", - "vTaskPlaceOnEventList": "0x00027821", - "vTaskPlaceOnEventListRestricted": "0x00027859", - "vTaskPriorityDisinheritAfterTimeout": "0x00027899", - "vTaskPrioritySet": "0x00027945", - "vTaskResume": "0x00027a0d", - "vTaskStartScheduler": "0x00027a91", - "vTaskStepTick": "0x00027b21", - "vTaskSuspend": "0x00027b51", - "vTaskSuspendAll": "0x00027c0d", - "vTaskSwitchContext": "0x00027c1d", - "xPortStartScheduler": "0x00027ccd", - "xQueueAddToSet": "0x00027d95", - "xQueueCreateCountingSemaphore": "0x00027db9", - "xQueueCreateCountingSemaphoreStatic": "0x00027df5", - "xQueueCreateMutex": "0x00027e39", - "xQueueCreateMutexStatic": "0x00027e4f", - "xQueueCreateSet": "0x00027e69", - "xQueueGenericCreate": "0x00027e71", - "xQueueGenericCreateStatic": "0x00027ebd", - "xQueueGenericReset": "0x00027f25", - "xQueueGenericSend": "0x00027fb1", - "xQueueGenericSendFromISR": "0x0002811d", - "xQueueGiveFromISR": "0x000281dd", - "xQueueGiveMutexRecursive": "0x00028281", - "xQueueIsQueueEmptyFromISR": "0x000282c1", - "xQueueIsQueueFullFromISR": "0x000282e5", - "xQueuePeek": "0x0002830d", - "xQueuePeekFromISR": "0x00028435", - "xQueueReceive": "0x000284a1", - "xQueueReceiveFromISR": "0x000285cd", - "xQueueRemoveFromSet": "0x00028661", - "xQueueSelectFromSet": "0x00028683", - "xQueueSelectFromSetFromISR": "0x00028695", - "xQueueSemaphoreTake": "0x000286a9", - "xQueueTakeMutexRecursive": "0x00028815", - "xTaskCheckForTimeOut": "0x00028859", - "xTaskCreate": "0x000288c9", - "xTaskCreateStatic": "0x00028925", - "xTaskGetCurrentTaskHandle": "0x00028995", - "xTaskGetSchedulerState": "0x000289a1", - "xTaskGetTickCount": "0x000289bd", - "xTaskGetTickCountFromISR": "0x000289c9", - "xTaskIncrementTick": "0x000289d9", - "xTaskPriorityDisinherit": "0x00028aa5", - "xTaskPriorityInherit": "0x00028b39", - "xTaskRemoveFromEventList": "0x00028bcd", - "xTaskResumeAll": "0x00028c4d", - "xTaskResumeFromISR": "0x00028d15", - "xTimerCreate": "0x00028da1", - "xTimerCreateStatic": "0x00028dd5", - "xTimerCreateTimerTask": "0x00028e0d", - "xTimerGenericCommand": "0x00028e79", - "xTimerGetExpiryTime": "0x00028ee9", - "xTimerGetTimerDaemonTaskHandle": "0x00028f09" + "platform_cancel_us_timer": "0x00021823", + "platform_config": "0x00021839", + "platform_create_us_timer": "0x0002195d", + "platform_delete_timer": "0x00021971", + "platform_enable_irq": "0x00021979", + "platform_get_current_task": "0x000219b1", + "platform_get_gen_os_driver": "0x000219d5", + "platform_get_heap_status": "0x000219dd", + "platform_get_link_layer_interf": "0x000219f5", + "platform_get_task_handle": "0x000219fd", + "platform_get_timer_counter": "0x00021a1d", + "platform_get_us_time": "0x00021a21", + "platform_get_version": "0x00021a25", + "platform_hrng": "0x00021a2d", + "platform_install_isr_stack": "0x00021a35", + "platform_install_task_stack": "0x00021a41", + "platform_patch_rf_init_data": "0x00021a79", + "platform_printf": "0x00021a85", + "platform_raise_assertion": "0x00021a99", + "platform_rand": "0x00021aad", + "platform_read_info": "0x00021ab1", + "platform_read_persistent_reg": "0x00021ae1", + "platform_reset": "0x00021af1", + "platform_rt_rc_auto_tune": "0x00021b15", + "platform_rt_rc_auto_tune2": "0x00021b1d", + "platform_rt_rc_tune": "0x00021b99", + "platform_set_abs_timer": "0x00021bbd", + "platform_set_evt_callback": "0x00021bc1", + "platform_set_evt_callback_table": "0x00021bd5", + "platform_set_irq_callback": "0x00021be1", + "platform_set_irq_callback_table": "0x00021bfd", + "platform_set_rf_clk_source": "0x00021c09", + "platform_set_rf_init_data": "0x00021c15", + "platform_set_rf_power_mapping": "0x00021c21", + "platform_set_timer": "0x00021c2d", + "platform_shutdown": "0x00021c31", + "platform_switch_app": "0x00021c35", + "platform_trace_raw": "0x00021c61", + "platform_write_persistent_reg": "0x00021c79", + "printf_hexdump": "0x00021e2d", + "pvPortMalloc": "0x00022921", + "pvTaskIncrementMutexHeldCount": "0x00022a09", + "pvTimerGetTimerID": "0x00022a21", + "pxPortInitialiseStack": "0x00022a4d", + "reverse_128": "0x00022c2d", + "reverse_24": "0x00022c33", + "reverse_256": "0x00022c39", + "reverse_48": "0x00022c3f", + "reverse_56": "0x00022c45", + "reverse_64": "0x00022c4b", + "reverse_bd_addr": "0x00022c51", + "reverse_bytes": "0x00022c57", + "sm_add_event_handler": "0x00022f95", + "sm_address_resolution_lookup": "0x000230d9", + "sm_authenticated": "0x00023521", + "sm_authorization_decline": "0x0002352f", + "sm_authorization_grant": "0x0002354f", + "sm_authorization_state": "0x0002356f", + "sm_bonding_decline": "0x00023589", + "sm_config": "0x00023a11", + "sm_config_conn": "0x00023a45", + "sm_encryption_key_size": "0x00023c2b", + "sm_just_works_confirm": "0x0002481d", + "sm_le_device_key": "0x00024c0d", + "sm_numeric_comparison_confirm": "0x00024d57", + "sm_passkey_input": "0x00024d95", + "sm_private_random_address_generation_get": "0x00025381", + "sm_private_random_address_generation_get_mode": "0x00025389", + "sm_private_random_address_generation_set_mode": "0x00025395", + "sm_private_random_address_generation_set_update_period": "0x000253bd", + "sm_register_external_ltk_callback": "0x00025651", + "sm_register_oob_data_callback": "0x0002565d", + "sm_register_sc_oob_data_callback": "0x00025669", + "sm_request_pairing": "0x00025675", + "sm_sc_generate_oob_data": "0x000262fd", + "sm_send_security_request": "0x00026619", + "sm_set_accepted_stk_generation_methods": "0x00026641", + "sm_set_authentication_requirements": "0x0002664d", + "sm_set_encryption_key_size_range": "0x0002665d", + "sscanf_bd_addr": "0x00026a69", + "sysSetPublicDeviceAddr": "0x00026e65", + "uuid128_to_str": "0x0002764d", + "uuid_add_bluetooth_prefix": "0x000276a5", + "uuid_has_bluetooth_prefix": "0x000276c5", + "uxListRemove": "0x000276e1", + "uxQueueMessagesWaiting": "0x00027709", + "uxQueueMessagesWaitingFromISR": "0x00027731", + "uxQueueSpacesAvailable": "0x0002774d", + "uxTaskGetStackHighWaterMark": "0x00027779", + "uxTaskPriorityGet": "0x00027799", + "uxTaskPriorityGetFromISR": "0x000277b5", + "vListInitialise": "0x0002786f", + "vListInitialiseItem": "0x00027885", + "vListInsert": "0x0002788b", + "vListInsertEnd": "0x000278bb", + "vPortEndScheduler": "0x000278d5", + "vPortEnterCritical": "0x00027901", + "vPortExitCritical": "0x00027945", + "vPortFree": "0x00027979", + "vPortSuppressTicksAndSleep": "0x00027a0d", + "vPortValidateInterruptPriority": "0x00027b35", + "vQueueDelete": "0x00027b91", + "vQueueWaitForMessageRestricted": "0x00027bbd", + "vTaskDelay": "0x00027c05", + "vTaskInternalSetTimeOutState": "0x00027c51", + "vTaskMissedYield": "0x00027c61", + "vTaskPlaceOnEventList": "0x00027c6d", + "vTaskPlaceOnEventListRestricted": "0x00027ca5", + "vTaskPriorityDisinheritAfterTimeout": "0x00027ce5", + "vTaskPrioritySet": "0x00027d91", + "vTaskResume": "0x00027e59", + "vTaskStartScheduler": "0x00027edd", + "vTaskStepTick": "0x00027f6d", + "vTaskSuspend": "0x00027f9d", + "vTaskSuspendAll": "0x00028059", + "vTaskSwitchContext": "0x00028069", + "xPortStartScheduler": "0x00028111", + "xQueueAddToSet": "0x000281d9", + "xQueueCreateCountingSemaphore": "0x000281fd", + "xQueueCreateCountingSemaphoreStatic": "0x00028239", + "xQueueCreateMutex": "0x0002827d", + "xQueueCreateMutexStatic": "0x00028293", + "xQueueCreateSet": "0x000282ad", + "xQueueGenericCreate": "0x000282b5", + "xQueueGenericCreateStatic": "0x00028301", + "xQueueGenericReset": "0x00028369", + "xQueueGenericSend": "0x000283f5", + "xQueueGenericSendFromISR": "0x00028561", + "xQueueGiveFromISR": "0x00028621", + "xQueueGiveMutexRecursive": "0x000286c5", + "xQueueIsQueueEmptyFromISR": "0x00028705", + "xQueueIsQueueFullFromISR": "0x00028729", + "xQueuePeek": "0x00028751", + "xQueuePeekFromISR": "0x00028879", + "xQueueReceive": "0x000288e5", + "xQueueReceiveFromISR": "0x00028a11", + "xQueueRemoveFromSet": "0x00028aa5", + "xQueueSelectFromSet": "0x00028ac7", + "xQueueSelectFromSetFromISR": "0x00028ad9", + "xQueueSemaphoreTake": "0x00028aed", + "xQueueTakeMutexRecursive": "0x00028c59", + "xTaskCheckForTimeOut": "0x00028c9d", + "xTaskCreate": "0x00028d0d", + "xTaskCreateStatic": "0x00028d69", + "xTaskGetCurrentTaskHandle": "0x00028dd9", + "xTaskGetSchedulerState": "0x00028de5", + "xTaskGetTickCount": "0x00028e01", + "xTaskGetTickCountFromISR": "0x00028e0d", + "xTaskIncrementTick": "0x00028e1d", + "xTaskPriorityDisinherit": "0x00028ee9", + "xTaskPriorityInherit": "0x00028f7d", + "xTaskRemoveFromEventList": "0x00029011", + "xTaskResumeAll": "0x00029091", + "xTaskResumeFromISR": "0x00029159", + "xTimerCreate": "0x000291e5", + "xTimerCreateStatic": "0x00029219", + "xTimerCreateTimerTask": "0x00029251", + "xTimerGenericCommand": "0x000292bd", + "xTimerGetExpiryTime": "0x0002932d", + "xTimerGetTimerDaemonTaskHandle": "0x0002934d" } \ No newline at end of file diff --git a/bundles/exp/ING9188xx/meta.json b/bundles/exp/ING9188xx/meta.json index 10c7b2b76..c26a2a155 100644 --- a/bundles/exp/ING9188xx/meta.json +++ b/bundles/exp/ING9188xx/meta.json @@ -4,15 +4,21 @@ }, "ram": { "base": 536870912, - "size": 30268 + "size": 30076 }, "rom": { "base": 16384, - "size": 158908 + "size": 160024 + }, + "var": { + "link_layer_features": { + "addr": 171416, + "value": "bff9ff07fe000000" + } }, "version": [ 1, 9, - 41 + 56 ] } \ No newline at end of file diff --git a/bundles/exp/ING9188xx/platform.bin b/bundles/exp/ING9188xx/platform.bin index 1dbbfe418..afd5ed115 100644 Binary files a/bundles/exp/ING9188xx/platform.bin and b/bundles/exp/ING9188xx/platform.bin differ diff --git a/bundles/exp/inc/bluetooth.h b/bundles/exp/inc/bluetooth.h index 44c58585a..8d306ff5e 100644 --- a/bundles/exp/inc/bluetooth.h +++ b/bundles/exp/inc/bluetooth.h @@ -40,10 +40,14 @@ typedef uint8_t bd_addr_t[BD_ADDR_LEN]; typedef enum { BD_ADDR_TYPE_LE_PUBLIC = 0, BD_ADDR_TYPE_LE_RANDOM = 0x01, - BD_ADDR_TYPE_LE_RESOVLED_PUB = 0x02, - BD_ADDR_TYPE_LE_RESOVLED_RAN = 0x03 + BD_ADDR_TYPE_LE_RESOLVED_PUB = 0x02, + BD_ADDR_TYPE_LE_RESOLVED_RAN = 0x03 } bd_addr_type_t; +// back-compatibility for typos +#define BD_ADDR_TYPE_LE_RESOVLED_PUB BD_ADDR_TYPE_LE_RESOLVED_PUB +#define BD_ADDR_TYPE_LE_RESOVLED_RAN BD_ADDR_TYPE_LE_RESOLVED_RAN + /** * @brief link key */ @@ -718,7 +722,7 @@ typedef enum { #define SM_AUTHREQ_NO_BONDING 0x00 #define SM_AUTHREQ_BONDING 0x01 #define SM_AUTHREQ_MITM_PROTECTION 0x04 -#define SM_AUTHREQ_SC 0x08 +#define SM_AUTHREQ_SC 0x08 // support of LE Secure Connections pairing // Key distribution flags used by spec #define SM_KEYDIST_ENC_KEY 0X01 diff --git a/bundles/exp/inc/btstack_defines.h b/bundles/exp/inc/btstack_defines.h index a8d08006c..25f1463b0 100644 --- a/bundles/exp/inc/btstack_defines.h +++ b/bundles/exp/inc/btstack_defines.h @@ -385,6 +385,20 @@ */ #define SM_EVENT_STATE_CHANGED 0xDC + /** + * @format H1B1 + * @param handle + * @param show calculated numeric value that needs to be compared + */ +#define SM_EVENT_NUMERIC_COMPARISON_REQUEST 0xDD + +/** + * @format PP + * @param irk + * @param dhk + */ +#define SM_EVENT_IRK_DHK_RESULT 0xDE + // GAP /** diff --git a/bundles/exp/inc/btstack_event.h b/bundles/exp/inc/btstack_event.h index e5ab49a55..dc87fa82a 100644 --- a/bundles/exp/inc/btstack_event.h +++ b/bundles/exp/inc/btstack_event.h @@ -107,6 +107,21 @@ uint32_t btstack_push_user_runnable(f_btstack_user_runnable fun, void *data, con */ uint8_t btstack_reset(void); +typedef struct btstack_capabilities +{ + uint16_t adv_set_num; // max number of advertising sets + uint16_t conn_num; // max number of connections + uint16_t max_mtu; // max MTU + uint16_t device_db_num; // max number of devices in database +} btstack_capabilities_t; + +/** + * @brief Get BT stack capabilities. + * + * @param[out] capabilities see `btstack_capabilities_t`. + */ +void btstack_get_capabilities(btstack_capabilities_t *capabilities); + /*** * @brief Get subevent code for le event * @param event packet @@ -780,6 +795,26 @@ static __INLINE hci_con_handle_t sm_event_numeric_comparison_get_handle(const ui return little_endian_read_16(event, 2); } +/** + * @brief Get field addr_type from event SM_EVENT_NUMERIC_COMPARISON_REQUEST + * @param event packet + * @return addr_type + * @note: btstack_type 1 + */ +static __INLINE uint8_t sm_event_numeric_comparison_get_addr_type(const uint8_t * event){ + return *decode_event_offset(event, uint8_t, 4); +} + +/** + * @brief Get field address from event SM_EVENT_NUMERIC_COMPARISON_REQUEST + * @param event packet + * @param Pointer to storage for address + * @note: btstack_type B + */ +static __INLINE void sm_event_numeric_comparison_get_address(const uint8_t * event, uint8_t * address){ + reverse_bd_addr(decode_event_offset(event, uint8_t, 5), address); +} + /** * @brief Get field compare value from event SM_EVENT_NUMERIC_COMPARISON_REQUEST * @param event packet @@ -790,6 +825,24 @@ static __INLINE uint32_t sm_event_numeric_comparison_get_compare_value(const uin return little_endian_read_32(event, 11); } +/** + * @brief Get IRK from event SM_EVENT_IRK_DHK_RESULT + * @param event packet + * @return irk + */ +static __INLINE const uint8_t *sm_event_irk_dhk_result_get_irk(const uint8_t *event) { + return *decode_event_offset(event, uint8_t *, 2); +} + +/** + * @brief Get DHK from event SM_EVENT_IRK_DHK_RESULT + * @param event packet + * @return dhk + */ +static __INLINE const uint8_t *sm_event_irk_dhk_result_get_dhk(const uint8_t *event) { + return *decode_event_offset(event, uint8_t *, 2 + sizeof(uintptr_t)); +} + /** * @brief Get field handle from event GAP_EVENT_SECURITY_LEVEL * @param event packet diff --git a/bundles/exp/inc/gap.h b/bundles/exp/inc/gap.h index eebe6c30b..056ef6c18 100644 --- a/bundles/exp/inc/gap.h +++ b/bundles/exp/inc/gap.h @@ -54,11 +54,27 @@ uint8_t gap_set_random_device_address(const uint8_t *address); /** * @brief Disconnect connection with handle * + * This is equivalent to `gap_disconnect2(handle, 0x13)`. + * * @param handle Used to identify an advertising set. Range: 0x00 to 0xEF * @return 0: Message is sent out or the connection already release */ uint8_t gap_disconnect(hci_con_handle_t handle); +/** + * @brief Disconnect connection with handle + * + * @param handle Used to identify an advertising set. Range: 0x00 to 0xEF + * @param reason Reason: + * - Authentication Failure error code (0x05) + * - Other End Terminated Connection error codes (0x13 to 0x15) + * - Unsupported Remote Feature error code (0x1A) + * - Pairing with Unit Key Not Supported error code (0x29) + * - Unacceptable Connection Parameters error code (0x3B) + * @return 0: Message is sent out or the connection already release + */ +uint8_t gap_disconnect2(hci_con_handle_t handle, uint8_t reason); + /** * @brief disconnect multi-connections */ @@ -70,7 +86,7 @@ void gap_disconnect_all(void); * @param[in] addtype BLE address type * @return 0: Message is sent to controller */ -uint8_t gap_add_whitelist(const uint8_t *address,bd_addr_type_t addtype); +uint8_t gap_add_whitelist(const uint8_t *address, bd_addr_type_t addtype); /** * @brief remove whitelist from controller @@ -79,7 +95,7 @@ uint8_t gap_add_whitelist(const uint8_t *address,bd_addr_type_t addtype); * @param addtype BLE address type * @return 0: Message is sent to controller */ -uint8_t gap_remove_whitelist(const uint8_t *address,bd_addr_type_t addtype); +uint8_t gap_remove_whitelist(const uint8_t *address, bd_addr_type_t addtype); /** * @brief clear white lists in controller @@ -88,6 +104,106 @@ uint8_t gap_remove_whitelist(const uint8_t *address,bd_addr_type_t addtype); */ uint8_t gap_clear_white_lists(void); +/** + * @brief read white lists size in controller + * + * @return 0: message sent out others: failed + */ +uint8_t gap_read_white_lists_size(void); + +/** + * @brief Add one device to the resolving list used to generate and resolve + * Resolvable Private Addresses in the Controller. + * + * @param address peer identity address + * @param addtype peer identity address type + * @param peer_irk IRK of the peer device + * @param local_irk IRK of the local device + * @return 0: message sent out others: failed + */ +uint8_t gap_add_dev_to_resolving_list(const uint8_t *address, bd_addr_type_t addtype, + const uint8_t *peer_irk, const uint8_t *local_irk); + +/** + * @brief Remove one device from the resolving list used to resolve Resolvable + * Private Addresses in the Controller. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +uint8_t gap_remove_dev_from_resolving_list(const uint8_t *address, bd_addr_type_t addtype); + +/** + * @brief Remove all devices from the resolving list used to resolve Resolvable + * Private Addresses in the Controller. + * + * @return 0: message sent out others: failed + */ +uint8_t gap_clear_resolving_list(void); + +// LE Privacy Mode +typedef enum privacy_mode +{ + PRIVACY_MODE_NETWORK = 0, // Network Privacy Mode (default) + // Identity address is not accepted if IRK is available + PRIVACY_MODE_DEVICE = 1, // Device Privacy Mode + // Identity address is accepted even if IRK is available +} privacy_mode_t; + +/** + * @brief Specify the privacy mode to be used for a given entry on the resolving list. + * + * @param address peer identity address + * @param addtype peer identity address type + * @param privacy_mode privacy mode for this peer device + * @return 0: message sent out others: failed + */ +uint8_t gap_set_privacy_mode(const uint8_t *address, bd_addr_type_t addtype, + privacy_mode_t privacy_mode); + +/** + * @brief Get the current peer Resolvable Private Address being used for the + * corresponding peer Public and Random (static) Identity Address. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +uint8_t gap_read_peer_resolving_addr(const uint8_t *address, bd_addr_type_t addtype); + +/** + * @brief Get the current local Resolvable Private Address being used for the + * corresponding peer Identity Address. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +uint8_t gap_read_local_resolving_addr(const uint8_t *address, bd_addr_type_t addtype); + +/** + * @brief Enable resolution of Resolvable Private Addresses in the Controller. + * + * @param enable address resolution enable + * 0: disabled (default) + * 1: enabled + * @return 0: message sent out others: failed + */ +uint8_t gap_set_addr_resolution_enable(const uint8_t enable); + +/** + * @brief Set the length of time the Controller uses a Resolvable Private Address + * before a new resolvable private address is generated and starts being used. + * + * @param rpa_timeout RPA_Timeout measured in seconds + * Range: 0x0001 to 0x0E10 + * Time range: 1 s to 1 hour + * Default: 0x0384 (900 s or 15 minutes) + * @return 0: message sent out others: failed + */ +uint8_t gap_set_resolvable_private_addr_timeout(uint16_t rpa_timeout); + /** * @brief read rssi value of a appointed hci connection * @@ -290,13 +406,13 @@ typedef enum scan_filter_policy SCAN_ACCEPT_WLIST_EXCEPT_NOT_DIRECTED, // Accept all advertising packets except directed advertising packets // where the initiator's identity address does not address this device - SCAN_ACCEPT_ALL_EXCEPT_IDENTITY_NOT_MATCH, + // SCAN_ACCEPT_ALL_EXCEPT_IDENTITY_NOT_MATCH, // Accept all advertising packets except: // 1. advertising packets where the advertiser's identity address is not in // the White List; and // 2. directed advertising packets where the initiator's identity address // does not address this device - SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH + // SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH } scan_filter_policy_t; /** @@ -318,6 +434,9 @@ uint8_t gap_set_ext_scan_para(const bd_addr_type_t own_addr_type, const scan_fil /** * @brief to set the extended scan response data for an advertising set * + * Note: Scan response data is cleared after `gap_set_ext_adv_para()` on the same + * advertising set handle. + * * @param adv_handle handle of advertising set handle * * @param length length of advertising data @@ -482,6 +601,9 @@ typedef enum adv_data_frag_pref /** * @brief to set extended advertising data * + * Note: Advertising data is cleared after `gap_set_ext_adv_para()` on the same + * advertising set handle. + * * @param adv_handle advertising set handle. * * @param length advertising data length @@ -497,6 +619,9 @@ uint8_t gap_set_ext_adv_data(const uint8_t adv_handle, uint16_t length, const ui /** * @brief LE Set Periodic Advertising Data command * + * Note: Advertising data is cleared after `gap_set_ext_adv_para()` and + * `gap_set_periodic_adv_para()` on the same advertising set handle. + * * @param adv_handle advertising set handle. * * @param length advertising data length (<= 1650 bytes) @@ -721,6 +846,7 @@ typedef struct { // Supervision timeout for the LE Link, unit is 10ms uint16_t supervision_timeout; // Informative parameter recommending the min/max length of connection event needed for this LE connection + // unit is 625us uint16_t min_ce_len; uint16_t max_ce_len; } conn_para_t; diff --git a/bundles/exp/inc/le_device_db.h b/bundles/exp/inc/le_device_db.h index b81d04f5a..68de61b61 100644 --- a/bundles/exp/inc/le_device_db.h +++ b/bundles/exp/inc/le_device_db.h @@ -16,14 +16,15 @@ typedef struct le_device_memory_db { // Identification uint8_t addr_type; - uint8_t key_size; - uint8_t authenticated; - uint8_t authorized; + uint8_t key_size; + uint8_t authenticated; + uint8_t authorized:1; + uint8_t sm_sc:1; bd_addr_t addr; sm_key_t irk; - // Stored pairing information allows to re-establish an enncrypted connection + // Stored pairing information allows to re-establish an encrypted connection // with a peripheral that doesn't have any persistent memory sm_key_t ltk; uint16_t ediv; @@ -36,7 +37,6 @@ typedef struct le_device_memory_db { // Signed Writes by us sm_key_t local_csrk; uint32_t local_counter; - } le_device_memory_db_t; #pragma pack (pop) diff --git a/bundles/exp/inc/ll_api.h b/bundles/exp/inc/ll_api.h index 3db416214..f26119df9 100644 --- a/bundles/exp/inc/ll_api.h +++ b/bundles/exp/inc/ll_api.h @@ -33,6 +33,25 @@ typedef enum ll_config_item_e LL_CFG_FEATURE_SET_MASK, } ll_config_item_t; +typedef struct ll_capabilities +{ + const uint8_t *features; // Link Layer features + uint16_t adv_set_num; // max number of advertising sets + uint16_t conn_num; // max number of connections + uint16_t whitelist_size; // size of whitelists + uint16_t resolving_list_size; // size of resolving list + uint16_t periodic_advertiser_list_size; // size of periodic advertiser list + uint16_t adv_dup_filter_size; // size of items for filtering + // advertising duplication +} ll_capabilities_t; + +/** + * @brief Get Link Layer capabilities. + * + * @param[out] capabilities see `ll_capabilities_t`. + */ +void ll_get_capabilities(ll_capabilities_t *capabilities); + /** **************************************************************************************** * @brief Config LL specific parameters @@ -43,6 +62,26 @@ typedef enum ll_config_item_e */ void ll_config(ll_config_item_t item, uint32_t value); +/** + **************************************************************************************** + * @brief Get states of LL + * + * Note: Parameters can be set to NULL if the relevant states are not needed. + * + * @param[out] adv_states[1] states of all advertising sets + * Bit[n]: advertising set n is enabled + * @param[out] conn_states[1] states of all connections + * Bit[n]: connection n is active + * @param[out] sync_states[1] states of all synchronized periodic adv sets + * Bit[n]: sync_handle n is active + * @param[out] other_states[1] other states: + * Bit[0]: if scanning is ON + * Bit[1]: if initiating is ON + **************************************************************************************** + */ +void ll_get_states(uint32_t *adv_states, uint32_t *conn_states, + uint32_t *sync_states, uint32_t *other_states); + /** **************************************************************************************** * @brief set Tx power range diff --git a/bundles/exp/inc/os/FreeRTOSConfig.h b/bundles/exp/inc/os/FreeRTOSConfig.h index a852cbdce..30c697203 100644 --- a/bundles/exp/inc/os/FreeRTOSConfig.h +++ b/bundles/exp/inc/os/FreeRTOSConfig.h @@ -91,17 +91,27 @@ #ifdef POWER_SAVING #define configUSE_TICKLESS_IDLE 1 #endif -#define configSYSTICK_CLOCK_HZ 32768 -#ifdef TARGET_FPGA -#define configCPU_CLOCK_HZ ( ( unsigned long ) 32000000 ) +#define configSYSTICK_CLOCK_HZ RTC_CLK_FREQ + +#if (INGCHIPS_FAMILY == INGCHIPS_FAMILY_918) +#define configCPU_CLOCK_HZ PLL_CLK_FREQ +#elif (INGCHIPS_FAMILY == INGCHIPS_FAMILY_916) +#define configCPU_CLOCK_HZ SYSCTRL_GetHClk() #else -#define configCPU_CLOCK_HZ ( ( unsigned long ) 48000000 ) +#error unknow chip family #endif + +#if (configSYSTICK_CLOCK_HZ == 32768) #define configTICK_RATE_HZ ( ( TickType_t ) 1024 ) +#elif (configSYSTICK_CLOCK_HZ == 50000) +#define configTICK_RATE_HZ ( ( TickType_t ) 1000 ) +#else +#error configSYSTICK_CLOCK_HZ +#endif #define configMAX_PRIORITIES ( 15 ) #define configMINIMAL_STACK_SIZE ( ( unsigned short ) 128 ) #ifndef configTOTAL_HEAP_SIZE -#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 23520 ) ) +#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 24896 ) ) #endif #define configMAX_TASK_NAME_LEN ( 16 ) #define configUSE_TRACE_FACILITY 0 diff --git a/bundles/exp/inc/platform_api.h b/bundles/exp/inc/platform_api.h index 78ed07d0b..a81fe121f 100644 --- a/bundles/exp/inc/platform_api.h +++ b/bundles/exp/inc/platform_api.h @@ -113,7 +113,7 @@ typedef enum PLATFORM_CB_EVT_LLE_INIT, // when allocation on heap fails (heap out of memory) - // NOTE: param (void *data) is cased from an integer identifying which heap is OOM: + // NOTE: param (void *data) is casted from an integer identifying which heap is OOM: // * 0: FreeRTOS's heap; // * 1: Link Layer's heap; // * 2: Link Layer's task pool. @@ -327,7 +327,7 @@ typedef struct /** **************************************************************************************** - * @brief Get heap status + * @brief Get status of built-in RTOS's heap * * @param[out] status heap status **************************************************************************************** @@ -374,7 +374,7 @@ void platform_switch_app(const uint32_t app_addr); * in power saving mode. * * For ING918: the least FOUR significant bits of `value` are saved; - * For ING916: the least TWO significant bits of `value` are saved. + * For ING916: the least FIVE significant bits of `value` are saved. * * @param[in] value value **************************************************************************************** @@ -464,8 +464,13 @@ typedef enum PLATFORM_CFG_PS_DBG_4, // Debugging parameters for ING916. Default (0) // Bit [0]: `platform_shutdown` uses DEEPER SLEEP (1) or SLEEP (0) PLATFORM_CFG_FAST_DEEP_SLEEP_TIME_REDUCTION, // sleep time reduction (fast deep sleep mode) in us. - // Requirement: < PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION + // Requirement: <= PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION + // When equal to PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION, fast deep sleep mode is not used // Only available for ING916 (default: ~2000us) + PLATFORM_CFG_AUTO_REDUCE_CLOCK_FREQ, // automatic reduce CPU clock frequency in these circumstances: + // * the default IDLE procedure + // * when entering sleep modes + // Only available for ING916 (default: Enabled) } platform_cfg_item_t; typedef enum @@ -604,7 +609,15 @@ uint64_t platform_get_us_time(void); */ void platform_printf(const char *format, ...); -// NOTE: for debug only +/** + **************************************************************************************** + * @brief Set public device address + * + * NOTE: This is for debug only. + * + * @param[in] addr device address in little-endian. + **************************************************************************************** + */ void sysSetPublicDeviceAddr(const unsigned char *addr); // set rf source @@ -783,6 +796,55 @@ void platform_set_abs_timer(f_platform_timer_callback callback, uint32_t abs_tim */ void platform_delete_timer(f_platform_timer_callback callback); +typedef void * platform_us_timer_handle_t; + +/** + **************************************************************************************** + * @brief Callback function of microsecond (us) resolution timer + * + * @param[in] timer_handle handle of this timer + * @param[in] time_us internal timer counter when invoke this callback + * @param[in] param user parameter + * @return (must be NULL) + **************************************************************************************** + */ +typedef void * (* f_platform_us_timer_callback)(platform_us_timer_handle_t timer_handle, + uint64_t time_us, void *param); + +/** + **************************************************************************************** + * @brief Setup a single-shot platform timer with microsecond (us) resolution + * + * Although `abs_time` is in microsecond (us), callback is **not guaranteed** + * to be invoked with such resolution. + * + * This type of timers are much like `platform_set_timer`, except that: + * 1. resolution is higher; + * 2. callback is invoked in the context of an ISR. + * + * @param[in] abs_time when `platform_get_us_timer() == abs_time`, callback is invoked. + * @param[in] callback the callback function + * @param[in] param user parameter + * @return a non-NULL value when succeeded. Otherwise, NULL. + **************************************************************************************** + */ +platform_us_timer_handle_t platform_create_us_timer(uint64_t abs_time, + f_platform_us_timer_callback callback, void *param); + +/** + **************************************************************************************** + * @brief Cancel a platform timer previously created by `platform_create_us_timer` + * + * When a timer not needed any more, use this API to cancel it. + * + * @param[in] timer_handle handle of the timer + * @return 0 if succeeded else non-0 + * Note: non-0 means the callback function of the timer + * is executing. + **************************************************************************************** + */ +int platform_cancel_us_timer(platform_us_timer_handle_t timer_handle); + /** **************************************************************************************** * @brief Install a new RTOS stack for a specific platform task diff --git a/bundles/exp/inc/sm.h b/bundles/exp/inc/sm.h index 47c743c56..aa604be1b 100644 --- a/bundles/exp/inc/sm.h +++ b/bundles/exp/inc/sm.h @@ -55,14 +55,21 @@ typedef enum { /** * @brief Security configurations * + * These configurations can updated dynamically. Be careful: dynamically toggle + * `enable` will cause problems when SM is still working on any connection. + * + * After IRK/DHK are derived from `persistent`, `SM_EVENT_IRK_DHK_RESULT` is emitted. + * * @param[in] enable Enable (Bypass) SM (default: Disabled) * When disabled, SM can be enabled per connection by `sm_config_conn`. * @param[in] io_capability Default IO Capabilities * @param[in] request_security Let peripheral request an encrypted connection right after connecting * Not used normally. Bonding is triggered by access to protected attributes in ATT Server * @param[in] persistent persistent data for security & privacy + * @return 0 if ok else non-0. Possible causes for non-0 return value: + * * generation of internal keys(IRK/ERK) are under going. */ -void sm_config(uint8_t enable, +int sm_config(uint8_t enable, io_capability_t io_capability, int request_security, const sm_persistent_t *persistent); @@ -101,18 +108,69 @@ void sm_private_random_address_generation_set_update_period(int period_ms); const uint8_t *sm_private_random_address_generation_get(void); /** + * @brief Registers OOB Data Callback. + * + * The callback should set the oob_data and return 1 if OOB data is available. + * + * Signature of `get_oob_data_callback`: + * @param[in] address_type address type + * @param[in] addr address + * @param[out] oob_data OOB data (type `sm_key_t`) + * @return 1 if OOB data is available, else 0. * - * @brief Registers OOB Data Callback. The callback should set the oob_data and return 1 if OOB data is availble * @param get_oob_data_callback */ -void sm_register_oob_data_callback( int (*get_oob_data_callback)(uint8_t addres_type, bd_addr_t addr, uint8_t * oob_data)); +void sm_register_oob_data_callback( int (*get_oob_data_callback)(uint8_t address_type, bd_addr_t addr, uint8_t * oob_data)); /** + * @brief Registers secure pairing OOB Data Callback. * - * @brief Registers secure pairing OOB Data Callback. The callback should set the peer_confirm & peer_random and return 1 if OOB data is availble - * @param get_oob_data_callback + * The callback should set the peer_confirm & peer_random and return 1 + * if OOB data is available. + * + * Signature of `get_sc_oob_data_callback`: + * @param[in] address_type address type + * @param[in] addr address + * @param[out] peer_confirm peer confirm value (type `sm_key_t`) + * @param[out] peer_random peer random value (type `sm_key_t`) + * @return 1 if OOB data is available, else 0. + * + * @param get_sc_oob_data_callback */ -void sm_register_sc_oob_data_callback( int (*get_sc_oob_data_callback)(uint8_t addres_type, bd_addr_t addr, uint8_t *peer_confirm, uint8_t *peer_random)); +void sm_register_sc_oob_data_callback(int (*get_sc_oob_data_callback)(uint8_t address_type, bd_addr_t addr, uint8_t *peer_confirm, uint8_t *peer_random)); + +/** + * @brief (When secure pairing is used and OOB is selected) Start generate local + * OOB data (_confirm_ and _random_). + * + * After generated, _confirm_ and _random_ are passed to the callback. + * + * Each call of this function will generate a new P256 key pair that will used + * in **all** subsequent pairing attempts. When OOB is used, it is Developers's + * responsibility to refresh key pair properly. If OOB is not used, SM will + * re-generate a new key pair for each pairing attempt. + * + * BLUETOOTH CORE SPECIFICATION Version 5.4 | Vol 3, Part H, Section 2.3.6: + * + * > To protect a device's private key, a device should implement a method to + * > prevent an attacker from retrieving useful information about the device's private + * > key. For this purpose, a device should change its private key after every pairing + * > (successful or failed). Otherwise, it should change its private key whenever S + + * > 3F > 8, where S is the number of successful pairings and F the number of + * > failed attempts since the key was last changed. + * + * App can then pass these information together with device address to peer + * through OOB communication. + * + * Signature of `callback`: + * @param[out] confirm local confirm value (type `sm_key_t`) + * @param[out] random local random value (type `sm_key_t`) + * + * @param callback + * @return 0: started without error + * -1: previous OOB data is not generated yet + */ +int sm_sc_generate_oob_data(void (*callback)(const uint8_t *confirm, const uint8_t *random)); /** * @brief Limit the STK generation methods. Bonding is stopped if the resulting one isn't in the list @@ -231,12 +289,6 @@ int sm_le_device_key(hci_con_handle_t con_handle); */ void sm_numeric_comparison_confirm(hci_con_handle_t con_handle); -/** - * @brief When secure pairing is used and OOB is selected, use this function to prepare OOB data and share to peer. - * @param handle - */ -int sm_sc_generate_oob_data(void (*callback)(uint8_t *peer_confirm, uint8_t *peer_random)); - /** * * @brief Register a callback for get external LTK (for empty EDIV & Random) diff --git a/bundles/extension/ING9168xx/apis.json b/bundles/extension/ING9168xx/apis.json index bdd86bcfe..c3239d6a0 100644 --- a/bundles/extension/ING9168xx/apis.json +++ b/bundles/extension/ING9168xx/apis.json @@ -1,379 +1,386 @@ { - "att_dispatch_client_can_send_now": "0x020044b5", - "att_dispatch_client_request_can_send_now_event": "0x020044bb", - "att_dispatch_register_client": "0x020044c1", - "att_dispatch_register_server": "0x020044d5", - "att_dispatch_server_can_send_now": "0x020044e9", - "att_dispatch_server_request_can_send_now_event": "0x020044ef", - "att_emit_general_event": "0x020045a1", - "att_server_can_send_packet_now": "0x02004cd9", - "att_server_deferred_read_response": "0x02004cdd", - "att_server_get_mtu": "0x02004cf5", - "att_server_indicate": "0x02004d6d", - "att_server_init": "0x02004df1", - "att_server_notify": "0x02004e2d", - "att_server_register_packet_handler": "0x02004f45", - "att_server_request_can_send_now_event": "0x02004f51", - "att_set_db": "0x02004f6d", - "att_set_read_callback": "0x02004f81", - "att_set_write_callback": "0x02004f8d", - "bd_addr_cmp": "0x0200515d", - "bd_addr_copy": "0x02005163", - "bd_addr_to_str": "0x0200516d", - "big_endian_read_16": "0x020051a5", - "big_endian_read_32": "0x020051ad", - "big_endian_store_16": "0x020051c1", - "big_endian_store_32": "0x020051cd", - "btstack_config": "0x0200532d", - "btstack_memory_pool_create": "0x0200546b", - "btstack_memory_pool_free": "0x02005495", - "btstack_memory_pool_get": "0x020054f5", - "btstack_push_user_msg": "0x0200555d", - "btstack_push_user_runnable": "0x02005569", - "btstack_reset": "0x02005575", - "char_for_nibble": "0x0200589d", - "eTaskConfirmSleepModeStatus": "0x02005c55", - "gap_add_dev_to_periodic_list": "0x020062c5", - "gap_add_whitelist": "0x020062d5", - "gap_aes_encrypt": "0x020062e1", - "gap_clear_white_lists": "0x02006319", - "gap_clr_adv_set": "0x02006325", - "gap_clr_periodic_adv_list": "0x02006331", - "gap_create_connection_cancel": "0x0200633d", - "gap_default_periodic_adv_sync_transfer_param": "0x02006349", - "gap_disconnect": "0x02006361", - "gap_disconnect_all": "0x0200638d", - "gap_ext_create_connection": "0x020063cd", - "gap_get_connection_parameter_range": "0x020064a5", - "gap_le_read_channel_map": "0x020064e1", - "gap_periodic_adv_create_sync": "0x0200654d", - "gap_periodic_adv_create_sync_cancel": "0x02006571", - "gap_periodic_adv_set_info_transfer": "0x0200657d", - "gap_periodic_adv_sync_transfer": "0x0200658d", - "gap_periodic_adv_sync_transfer_param": "0x0200659d", - "gap_periodic_adv_term_sync": "0x020065b9", - "gap_read_antenna_info": "0x02006641", - "gap_read_periodic_adv_list_size": "0x0200664d", - "gap_read_phy": "0x02006659", - "gap_read_remote_used_features": "0x02006665", - "gap_read_remote_version": "0x02006671", - "gap_read_rssi": "0x0200667d", - "gap_remove_whitelist": "0x02006689", - "gap_rmv_adv_set": "0x02006705", - "gap_rmv_dev_from_periodic_list": "0x02006711", - "gap_rx_test_v2": "0x02006721", - "gap_rx_test_v3": "0x02006731", - "gap_set_adv_set_random_addr": "0x0200677d", - "gap_set_callback_for_next_hci": "0x020067b9", - "gap_set_connection_cte_request_enable": "0x020067d9", - "gap_set_connection_cte_response_enable": "0x020067f5", - "gap_set_connection_cte_rx_param": "0x02006805", - "gap_set_connection_cte_tx_param": "0x02006859", - "gap_set_connection_parameter_range": "0x020068a5", - "gap_set_connectionless_cte_tx_enable": "0x020068bd", - "gap_set_connectionless_cte_tx_param": "0x020068cd", - "gap_set_connectionless_iq_sampling_enable": "0x02006929", - "gap_set_data_length": "0x02006985", - "gap_set_def_phy": "0x0200699d", - "gap_set_ext_adv_data": "0x020069ad", - "gap_set_ext_adv_enable": "0x020069c5", - "gap_set_ext_adv_para": "0x02006a35", - "gap_set_ext_scan_enable": "0x02006b05", - "gap_set_ext_scan_para": "0x02006b1d", - "gap_set_ext_scan_response_data": "0x02006bbd", - "gap_set_host_channel_classification": "0x02006bd5", - "gap_set_periodic_adv_data": "0x02006be5", - "gap_set_periodic_adv_enable": "0x02006c55", - "gap_set_periodic_adv_para": "0x02006c65", - "gap_set_periodic_adv_rx_enable": "0x02006c7d", - "gap_set_phy": "0x02006c8d", - "gap_set_random_device_address": "0x02006ca9", - "gap_start_ccm": "0x02006cd9", - "gap_test_end": "0x02006d21", - "gap_tx_test_v2": "0x02006d2d", - "gap_tx_test_v4": "0x02006d45", - "gap_update_connection_parameters": "0x02006d69", - "gap_vendor_tx_continuous_wave": "0x02006dad", - "gatt_client_cancel_write": "0x020072d5", - "gatt_client_discover_characteristic_descriptors": "0x020072fb", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x0200733b", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x0200738b", - "gatt_client_discover_characteristics_for_service": "0x020073db", - "gatt_client_discover_primary_services": "0x02007411", - "gatt_client_discover_primary_services_by_uuid128": "0x02007443", - "gatt_client_discover_primary_services_by_uuid16": "0x02007487", - "gatt_client_execute_write": "0x020074c5", - "gatt_client_find_included_services_for_service": "0x020074eb", - "gatt_client_get_mtu": "0x02007519", - "gatt_client_is_ready": "0x020075dd", - "gatt_client_listen_for_characteristic_value_updates": "0x020075f3", - "gatt_client_prepare_write": "0x02007615", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x02007651", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x0200767b", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02007681", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x020076af", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x020076b5", - "gatt_client_read_multiple_characteristic_values": "0x020076e3", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x02007713", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x02007741", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x0200778d", - "gatt_client_register_handler": "0x020077d9", - "gatt_client_reliable_write_long_value_of_characteristic": "0x020077e5", - "gatt_client_signed_write_without_response": "0x02007c19", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x02007cdd", - "gatt_client_write_client_characteristic_configuration": "0x02007d17", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x02007d69", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02007d79", - "gatt_client_write_long_value_of_characteristic": "0x02007db5", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x02007dc5", - "gatt_client_write_value_of_characteristic": "0x02007e01", - "gatt_client_write_value_of_characteristic_without_response": "0x02007e37", - "hci_add_event_handler": "0x02009459", - "hci_power_control": "0x02009c01", - "hci_register_acl_packet_handler": "0x02009db5", - "kv_commit": "0x0200a4e9", - "kv_get": "0x0200a545", - "kv_init": "0x0200a551", - "kv_init_backend": "0x0200a5d1", - "kv_put": "0x0200a5e5", - "kv_remove": "0x0200a5f1", - "kv_remove_all": "0x0200a625", - "kv_value_modified": "0x0200a655", - "kv_value_modified_of_key": "0x0200a671", - "kv_visit": "0x0200a67d", - "l2cap_add_event_handler": "0x0200a70d", - "l2cap_can_send_packet_now": "0x0200a71d", - "l2cap_create_le_credit_based_connection_request": "0x0200a8e1", - "l2cap_credit_based_send": "0x0200aa29", - "l2cap_credit_based_send_continue": "0x0200aa55", - "l2cap_disconnect": "0x0200aad1", - "l2cap_get_le_credit_based_connection_credits": "0x0200acbd", - "l2cap_get_peer_mtu_for_local_cid": "0x0200acd9", - "l2cap_init": "0x0200b119", - "l2cap_le_send_flow_control_credit": "0x0200b20f", - "l2cap_max_le_mtu": "0x0200b51d", - "l2cap_register_packet_handler": "0x0200b645", - "l2cap_register_service": "0x0200b651", - "l2cap_request_can_send_now_event": "0x0200b761", - "l2cap_request_connection_parameter_update": "0x0200b77b", - "l2cap_send_echo_request": "0x0200bc5d", - "l2cap_unregister_service": "0x0200bd3d", - "le_device_db_add": "0x0200bd95", - "le_device_db_find": "0x0200be6d", - "le_device_db_from_key": "0x0200be99", - "le_device_db_iter_cur": "0x0200bea1", - "le_device_db_iter_cur_key": "0x0200bea5", - "le_device_db_iter_init": "0x0200bea9", - "le_device_db_iter_next": "0x0200beb1", - "le_device_db_remove_key": "0x0200bed7", - "ll_ackable_packet_alloc": "0x0200bf03", - "ll_ackable_packet_get_status": "0x0200c03f", - "ll_ackable_packet_run": "0x0200c0ad", - "ll_ackable_packet_set_tx_data": "0x0200c165", - "ll_adjust_conn_peer_tx_power": "0x0200c181", - "ll_aes_encrypt": "0x0200c1ad", - "ll_allow_nonstandard_adv_type": "0x0200c221", - "ll_attach_cte_to_adv_set": "0x0200c239", - "ll_channel_monitor_alloc": "0x0200c3d1", - "ll_channel_monitor_check_each_pdu": "0x0200c453", - "ll_channel_monitor_run": "0x0200c4b5", - "ll_config": "0x0200c585", - "ll_free": "0x0200c5bb", - "ll_get_conn_events_info": "0x0200c5c5", - "ll_get_conn_info": "0x0200c6ad", - "ll_get_heap_free_size": "0x0200c6fd", - "ll_hint_on_ce_len": "0x0200c711", - "ll_legacy_adv_set_interval": "0x0200c749", - "ll_lock_frequency": "0x0200c759", - "ll_malloc": "0x0200c7bd", - "ll_override_whitening_init_value": "0x0200c7c5", - "ll_raw_packet_alloc": "0x0200c8ed", - "ll_raw_packet_free": "0x0200c9c1", - "ll_raw_packet_get_bare_rx_data": "0x0200c9f9", - "ll_raw_packet_get_iq_samples": "0x0200cab9", - "ll_raw_packet_get_rx_data": "0x0200cb53", - "ll_raw_packet_recv": "0x0200cc05", - "ll_raw_packet_send": "0x0200ccd9", - "ll_raw_packet_set_bare_data": "0x0200cdf5", - "ll_raw_packet_set_bare_mode": "0x0200ce33", - "ll_raw_packet_set_fake_cte_info": "0x0200cf37", - "ll_raw_packet_set_param": "0x0200cf59", - "ll_raw_packet_set_rx_cte": "0x0200cfbb", - "ll_raw_packet_set_tx_cte": "0x0200d051", - "ll_raw_packet_set_tx_data": "0x0200d091", - "ll_register_hci_acl_previewer": "0x0200d0f9", - "ll_scan_set_fixed_channel": "0x0200d15d", - "ll_scanner_enable_iq_sampling": "0x0200d169", - "ll_scanner_enable_iq_sampling_on_legacy": "0x0200d211", - "ll_set_adv_access_address": "0x0200d501", - "ll_set_adv_coded_scheme": "0x0200d50d", - "ll_set_conn_acl_report_latency": "0x0200d545", - "ll_set_conn_coded_scheme": "0x0200d575", - "ll_set_conn_interval_unit": "0x0200d5a1", - "ll_set_conn_latency": "0x0200d5ad", - "ll_set_conn_tx_power": "0x0200d5dd", - "ll_set_cte_bit": "0x0200d60d", - "ll_set_def_antenna": "0x0200d635", - "ll_set_initiating_coded_scheme": "0x0200d655", - "ll_set_max_conn_number": "0x0200d661", - "ll_set_tx_power_range": "0x0200d6f5", - "ll_unlock_frequency": "0x0200d71d", - "nibble_for_char": "0x0202060d", - "platform_calibrate_rt_clk": "0x020206b7", - "platform_call_on_stack": "0x020021fb", - "platform_config": "0x020206bd", - "platform_delete_timer": "0x020207e5", - "platform_enable_irq": "0x020207ed", - "platform_get_current_task": "0x02020821", - "platform_get_gen_os_driver": "0x02020845", - "platform_get_heap_status": "0x0202084d", - "platform_get_link_layer_interf": "0x02020865", - "platform_get_task_handle": "0x0202086d", - "platform_get_timer_counter": "0x0202088d", - "platform_get_us_time": "0x02020891", - "platform_get_version": "0x02020895", - "platform_hrng": "0x0202089d", - "platform_install_isr_stack": "0x020208a5", - "platform_install_task_stack": "0x020208b1", - "platform_patch_rf_init_data": "0x020208e9", - "platform_printf": "0x020208f5", - "platform_raise_assertion": "0x02020909", - "platform_rand": "0x0202091d", - "platform_read_info": "0x02020921", - "platform_read_persistent_reg": "0x02020951", - "platform_reset": "0x0202095d", - "platform_rt_rc_auto_tune": "0x02020971", - "platform_rt_rc_auto_tune2": "0x02020979", - "platform_rt_rc_tune": "0x020209e1", - "platform_set_abs_timer": "0x020209fd", - "platform_set_evt_callback": "0x02020a01", - "platform_set_evt_callback_table": "0x02020a15", - "platform_set_irq_callback": "0x02020a21", - "platform_set_irq_callback_table": "0x02020a3d", - "platform_set_rf_clk_source": "0x02020a49", - "platform_set_rf_init_data": "0x02020a55", - "platform_set_rf_power_mapping": "0x02020a61", - "platform_set_timer": "0x02020a6d", - "platform_shutdown": "0x02020a71", - "platform_switch_app": "0x02020a75", - "platform_trace_raw": "0x02020a8d", - "platform_write_persistent_reg": "0x02020aa5", - "printf_hexdump": "0x02020c5d", - "pvPortMalloc": "0x02021735", - "pvTaskIncrementMutexHeldCount": "0x0202181d", - "pvTimerGetTimerID": "0x02021835", - "pxPortInitialiseStack": "0x02021861", - "reverse_128": "0x02021a49", - "reverse_24": "0x02021a4f", - "reverse_256": "0x02021a55", - "reverse_48": "0x02021a5b", - "reverse_56": "0x02021a61", - "reverse_64": "0x02021a67", - "reverse_bd_addr": "0x02021a6d", - "reverse_bytes": "0x02021a73", - "sm_add_event_handler": "0x02021e01", - "sm_address_resolution_lookup": "0x02021f59", - "sm_authenticated": "0x020222d5", - "sm_authorization_decline": "0x020222e3", - "sm_authorization_grant": "0x02022303", - "sm_authorization_state": "0x02022323", - "sm_bonding_decline": "0x0202233d", - "sm_config": "0x02022791", - "sm_config_conn": "0x020227a9", - "sm_encryption_key_size": "0x0202295f", - "sm_just_works_confirm": "0x02022ee5", - "sm_le_device_key": "0x0202321d", - "sm_passkey_input": "0x020232b3", - "sm_private_random_address_generation_get": "0x0202366d", - "sm_private_random_address_generation_get_mode": "0x02023675", - "sm_private_random_address_generation_set_mode": "0x02023681", - "sm_private_random_address_generation_set_update_period": "0x020236a9", - "sm_register_external_ltk_callback": "0x020237e5", - "sm_register_oob_data_callback": "0x020237f1", - "sm_request_pairing": "0x020237fd", - "sm_send_security_request": "0x020242d3", - "sm_set_accepted_stk_generation_methods": "0x020242f9", - "sm_set_authentication_requirements": "0x02024305", - "sm_set_encryption_key_size_range": "0x02024311", - "sscanf_bd_addr": "0x020246e9", - "sysSetPublicDeviceAddr": "0x02024c15", - "uuid128_to_str": "0x02025471", - "uuid_add_bluetooth_prefix": "0x020254c9", - "uuid_has_bluetooth_prefix": "0x020254e9", - "uxListRemove": "0x02025505", - "uxQueueMessagesWaiting": "0x0202552d", - "uxQueueMessagesWaitingFromISR": "0x02025555", - "uxQueueSpacesAvailable": "0x02025571", - "uxTaskGetStackHighWaterMark": "0x0202559d", - "uxTaskPriorityGet": "0x020255bd", - "uxTaskPriorityGetFromISR": "0x020255d9", - "vListInitialise": "0x02025697", - "vListInitialiseItem": "0x020256ad", - "vListInsert": "0x020256b3", - "vListInsertEnd": "0x020256e3", - "vPortEndScheduler": "0x020256fd", - "vPortEnterCritical": "0x02025729", - "vPortExitCritical": "0x0202576d", - "vPortFree": "0x020257a1", - "vPortSuppressTicksAndSleep": "0x02025845", - "vPortValidateInterruptPriority": "0x0202596d", - "vQueueDelete": "0x020259c9", - "vQueueWaitForMessageRestricted": "0x020259f5", - "vTaskDelay": "0x02025a39", - "vTaskInternalSetTimeOutState": "0x02025a85", - "vTaskMissedYield": "0x02025a95", - "vTaskPlaceOnEventList": "0x02025aa1", - "vTaskPlaceOnEventListRestricted": "0x02025ad9", - "vTaskPriorityDisinheritAfterTimeout": "0x02025b19", - "vTaskPrioritySet": "0x02025bc5", - "vTaskResume": "0x02025c8d", - "vTaskStartScheduler": "0x02025d11", - "vTaskStepTick": "0x02025da1", - "vTaskSuspend": "0x02025dd1", - "vTaskSuspendAll": "0x02025e8d", - "vTaskSwitchContext": "0x02025e9d", - "xPortStartScheduler": "0x02025f4d", - "xQueueAddToSet": "0x02026051", - "xQueueCreateCountingSemaphore": "0x02026075", - "xQueueCreateCountingSemaphoreStatic": "0x020260b1", - "xQueueCreateMutex": "0x020260f5", - "xQueueCreateMutexStatic": "0x0202610b", - "xQueueCreateSet": "0x02026125", - "xQueueGenericCreate": "0x0202612d", - "xQueueGenericCreateStatic": "0x02026179", - "xQueueGenericReset": "0x020261e1", - "xQueueGenericSend": "0x0202626d", - "xQueueGenericSendFromISR": "0x020263d9", - "xQueueGiveFromISR": "0x02026499", - "xQueueGiveMutexRecursive": "0x0202653d", - "xQueueIsQueueEmptyFromISR": "0x0202657d", - "xQueueIsQueueFullFromISR": "0x020265a1", - "xQueuePeek": "0x020265c9", - "xQueuePeekFromISR": "0x020266f1", - "xQueueReceive": "0x0202675d", - "xQueueReceiveFromISR": "0x02026889", - "xQueueRemoveFromSet": "0x0202691d", - "xQueueSelectFromSet": "0x0202693f", - "xQueueSelectFromSetFromISR": "0x02026951", - "xQueueSemaphoreTake": "0x02026965", - "xQueueTakeMutexRecursive": "0x02026ad1", - "xTaskCheckForTimeOut": "0x02026b15", - "xTaskCreate": "0x02026b85", - "xTaskCreateStatic": "0x02026be1", - "xTaskGetCurrentTaskHandle": "0x02026c51", - "xTaskGetSchedulerState": "0x02026c5d", - "xTaskGetTickCount": "0x02026c79", - "xTaskGetTickCountFromISR": "0x02026c85", - "xTaskIncrementTick": "0x02026c95", - "xTaskPriorityDisinherit": "0x02026d61", - "xTaskPriorityInherit": "0x02026df5", - "xTaskRemoveFromEventList": "0x02026e89", - "xTaskResumeAll": "0x02026f09", - "xTaskResumeFromISR": "0x02026fd1", - "xTimerCreate": "0x0202705d", - "xTimerCreateStatic": "0x02027091", - "xTimerCreateTimerTask": "0x020270c9", - "xTimerGenericCommand": "0x02027135", - "xTimerGetExpiryTime": "0x020271a5", - "xTimerGetTimerDaemonTaskHandle": "0x020271c5" + "att_dispatch_client_can_send_now": "0x020053cd", + "att_dispatch_client_request_can_send_now_event": "0x020053d3", + "att_dispatch_register_client": "0x020053d9", + "att_dispatch_register_server": "0x020053ed", + "att_dispatch_server_can_send_now": "0x02005401", + "att_dispatch_server_request_can_send_now_event": "0x02005407", + "att_emit_general_event": "0x020054b9", + "att_server_can_send_packet_now": "0x02005bf5", + "att_server_deferred_read_response": "0x02005bf9", + "att_server_get_mtu": "0x02005c11", + "att_server_indicate": "0x02005c89", + "att_server_init": "0x02005d0d", + "att_server_notify": "0x02005d49", + "att_server_register_packet_handler": "0x02005e61", + "att_server_request_can_send_now_event": "0x02005e6d", + "att_set_db": "0x02005e89", + "att_set_read_callback": "0x02005e9d", + "att_set_write_callback": "0x02005ea9", + "bd_addr_cmp": "0x02006079", + "bd_addr_copy": "0x0200607f", + "bd_addr_to_str": "0x02006089", + "big_endian_read_16": "0x020060c1", + "big_endian_read_32": "0x020060c9", + "big_endian_store_16": "0x020060dd", + "big_endian_store_32": "0x020060e9", + "btstack_config": "0x02006249", + "btstack_get_capabilities": "0x02006255", + "btstack_memory_pool_create": "0x0200639f", + "btstack_memory_pool_free": "0x020063c9", + "btstack_memory_pool_get": "0x02006429", + "btstack_push_user_msg": "0x02006491", + "btstack_push_user_runnable": "0x0200649d", + "btstack_reset": "0x020064a9", + "char_for_nibble": "0x020067d1", + "eTaskConfirmSleepModeStatus": "0x02006b89", + "gap_add_dev_to_periodic_list": "0x020071e5", + "gap_add_whitelist": "0x020071f5", + "gap_aes_encrypt": "0x02007201", + "gap_clear_white_lists": "0x02007239", + "gap_clr_adv_set": "0x02007245", + "gap_clr_periodic_adv_list": "0x02007251", + "gap_create_connection_cancel": "0x0200725d", + "gap_default_periodic_adv_sync_transfer_param": "0x02007269", + "gap_disconnect": "0x02007281", + "gap_disconnect2": "0x02007289", + "gap_disconnect_all": "0x020072b5", + "gap_ext_create_connection": "0x020072f5", + "gap_get_connection_parameter_range": "0x020073cd", + "gap_le_read_channel_map": "0x02007405", + "gap_periodic_adv_create_sync": "0x02007465", + "gap_periodic_adv_create_sync_cancel": "0x02007489", + "gap_periodic_adv_set_info_transfer": "0x02007495", + "gap_periodic_adv_sync_transfer": "0x020074a5", + "gap_periodic_adv_sync_transfer_param": "0x020074b5", + "gap_periodic_adv_term_sync": "0x020074d1", + "gap_read_antenna_info": "0x02007559", + "gap_read_periodic_adv_list_size": "0x02007565", + "gap_read_phy": "0x02007571", + "gap_read_remote_used_features": "0x0200757d", + "gap_read_remote_version": "0x02007589", + "gap_read_rssi": "0x02007595", + "gap_read_white_lists_size": "0x020075a1", + "gap_remove_whitelist": "0x020075ad", + "gap_rmv_adv_set": "0x02007629", + "gap_rmv_dev_from_periodic_list": "0x02007635", + "gap_rx_test_v2": "0x02007645", + "gap_rx_test_v3": "0x02007655", + "gap_set_adv_set_random_addr": "0x020076a1", + "gap_set_callback_for_next_hci": "0x020076c5", + "gap_set_connection_cte_request_enable": "0x020076e5", + "gap_set_connection_cte_response_enable": "0x02007701", + "gap_set_connection_cte_rx_param": "0x02007711", + "gap_set_connection_cte_tx_param": "0x02007765", + "gap_set_connection_parameter_range": "0x020077b1", + "gap_set_connectionless_cte_tx_enable": "0x020077c9", + "gap_set_connectionless_cte_tx_param": "0x020077d9", + "gap_set_connectionless_iq_sampling_enable": "0x02007835", + "gap_set_data_length": "0x02007891", + "gap_set_def_phy": "0x020078a9", + "gap_set_ext_adv_data": "0x020078b9", + "gap_set_ext_adv_enable": "0x020078d1", + "gap_set_ext_adv_para": "0x02007941", + "gap_set_ext_scan_enable": "0x02007a01", + "gap_set_ext_scan_para": "0x02007a19", + "gap_set_ext_scan_response_data": "0x02007ab9", + "gap_set_host_channel_classification": "0x02007ad1", + "gap_set_periodic_adv_data": "0x02007ae1", + "gap_set_periodic_adv_enable": "0x02007b51", + "gap_set_periodic_adv_para": "0x02007b61", + "gap_set_periodic_adv_rx_enable": "0x02007b79", + "gap_set_phy": "0x02007b89", + "gap_set_random_device_address": "0x02007ba5", + "gap_start_ccm": "0x02007bc1", + "gap_test_end": "0x02007c09", + "gap_tx_test_v2": "0x02007c15", + "gap_tx_test_v4": "0x02007c2d", + "gap_update_connection_parameters": "0x02007c51", + "gap_vendor_tx_continuous_wave": "0x02007c95", + "gatt_client_cancel_write": "0x020081bd", + "gatt_client_discover_characteristic_descriptors": "0x020081e3", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x02008223", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x02008273", + "gatt_client_discover_characteristics_for_service": "0x020082c3", + "gatt_client_discover_primary_services": "0x020082f9", + "gatt_client_discover_primary_services_by_uuid128": "0x0200832b", + "gatt_client_discover_primary_services_by_uuid16": "0x0200836f", + "gatt_client_execute_write": "0x020083ad", + "gatt_client_find_included_services_for_service": "0x020083d3", + "gatt_client_get_mtu": "0x02008401", + "gatt_client_is_ready": "0x020084cd", + "gatt_client_listen_for_characteristic_value_updates": "0x020084e3", + "gatt_client_prepare_write": "0x02008505", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x02008541", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x0200856b", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02008571", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x0200859f", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x020085a5", + "gatt_client_read_multiple_characteristic_values": "0x020085d3", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x02008603", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x02008631", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x0200867d", + "gatt_client_register_handler": "0x020086c9", + "gatt_client_reliable_write_long_value_of_characteristic": "0x020086d5", + "gatt_client_signed_write_without_response": "0x02008b09", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x02008bcd", + "gatt_client_write_client_characteristic_configuration": "0x02008c07", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x02008c59", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02008c69", + "gatt_client_write_long_value_of_characteristic": "0x02008ca5", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x02008cb5", + "gatt_client_write_value_of_characteristic": "0x02008cf1", + "gatt_client_write_value_of_characteristic_without_response": "0x02008d27", + "hci_add_event_handler": "0x0200a33d", + "hci_power_control": "0x0200aae1", + "hci_register_acl_packet_handler": "0x0200ac95", + "kv_commit": "0x0200b3b9", + "kv_get": "0x0200b415", + "kv_init": "0x0200b421", + "kv_init_backend": "0x0200b4a1", + "kv_put": "0x0200b4b5", + "kv_remove": "0x0200b4c1", + "kv_remove_all": "0x0200b4f5", + "kv_value_modified": "0x0200b525", + "kv_value_modified_of_key": "0x0200b541", + "kv_visit": "0x0200b54d", + "l2cap_add_event_handler": "0x0200b5dd", + "l2cap_can_send_packet_now": "0x0200b5ed", + "l2cap_create_le_credit_based_connection_request": "0x0200b7b1", + "l2cap_credit_based_send": "0x0200b8f9", + "l2cap_credit_based_send_continue": "0x0200b925", + "l2cap_disconnect": "0x0200b9a1", + "l2cap_get_le_credit_based_connection_credits": "0x0200bb8d", + "l2cap_get_peer_mtu_for_local_cid": "0x0200bba9", + "l2cap_init": "0x0200bfe9", + "l2cap_le_send_flow_control_credit": "0x0200c0df", + "l2cap_max_le_mtu": "0x0200c3ed", + "l2cap_register_packet_handler": "0x0200c515", + "l2cap_register_service": "0x0200c521", + "l2cap_request_can_send_now_event": "0x0200c631", + "l2cap_request_connection_parameter_update": "0x0200c64b", + "l2cap_send_echo_request": "0x0200cb2d", + "l2cap_unregister_service": "0x0200cc0d", + "le_device_db_add": "0x0200cc65", + "le_device_db_find": "0x0200cd3d", + "le_device_db_from_key": "0x0200cd69", + "le_device_db_iter_cur": "0x0200cd71", + "le_device_db_iter_cur_key": "0x0200cd75", + "le_device_db_iter_init": "0x0200cd79", + "le_device_db_iter_next": "0x0200cd81", + "le_device_db_remove_key": "0x0200cda7", + "ll_ackable_packet_alloc": "0x0200cdd3", + "ll_ackable_packet_get_status": "0x0200cf0f", + "ll_ackable_packet_run": "0x0200cf7d", + "ll_ackable_packet_set_tx_data": "0x0200d035", + "ll_adjust_conn_peer_tx_power": "0x0200d051", + "ll_aes_encrypt": "0x0200d07d", + "ll_allow_nonstandard_adv_type": "0x0200d0f1", + "ll_attach_cte_to_adv_set": "0x0200d109", + "ll_channel_monitor_alloc": "0x0200d2a1", + "ll_channel_monitor_check_each_pdu": "0x0200d323", + "ll_channel_monitor_run": "0x0200d391", + "ll_config": "0x0200d461", + "ll_free": "0x0200d497", + "ll_get_capabilities": "0x0200d4a1", + "ll_get_conn_events_info": "0x0200d4bd", + "ll_get_conn_info": "0x0200d5a5", + "ll_get_heap_free_size": "0x0200d5f5", + "ll_get_states": "0x0200d605", + "ll_hint_on_ce_len": "0x0200d6c1", + "ll_legacy_adv_set_interval": "0x0200d6f9", + "ll_lock_frequency": "0x0200d709", + "ll_malloc": "0x0200d76d", + "ll_override_whitening_init_value": "0x0200d775", + "ll_raw_packet_alloc": "0x0200d89d", + "ll_raw_packet_free": "0x0200d971", + "ll_raw_packet_get_bare_rx_data": "0x0200d9a9", + "ll_raw_packet_get_iq_samples": "0x0200da69", + "ll_raw_packet_get_rx_data": "0x0200db03", + "ll_raw_packet_recv": "0x0200dbb5", + "ll_raw_packet_send": "0x0200dc89", + "ll_raw_packet_set_bare_data": "0x0200dda5", + "ll_raw_packet_set_bare_mode": "0x0200dde3", + "ll_raw_packet_set_fake_cte_info": "0x0200dee7", + "ll_raw_packet_set_param": "0x0200df09", + "ll_raw_packet_set_rx_cte": "0x0200df6b", + "ll_raw_packet_set_tx_cte": "0x0200e001", + "ll_raw_packet_set_tx_data": "0x0200e041", + "ll_register_hci_acl_previewer": "0x0200e0a9", + "ll_scan_set_fixed_channel": "0x0200e10d", + "ll_scanner_enable_iq_sampling": "0x0200e119", + "ll_scanner_enable_iq_sampling_on_legacy": "0x0200e1c1", + "ll_set_adv_access_address": "0x0200e4b1", + "ll_set_adv_coded_scheme": "0x0200e4bd", + "ll_set_conn_acl_report_latency": "0x0200e4f5", + "ll_set_conn_coded_scheme": "0x0200e525", + "ll_set_conn_interval_unit": "0x0200e551", + "ll_set_conn_latency": "0x0200e55d", + "ll_set_conn_tx_power": "0x0200e58d", + "ll_set_cte_bit": "0x0200e5bd", + "ll_set_def_antenna": "0x0200e5e5", + "ll_set_initiating_coded_scheme": "0x0200e605", + "ll_set_max_conn_number": "0x0200e611", + "ll_set_tx_power_range": "0x0200e6a5", + "ll_unlock_frequency": "0x0200e6cd", + "nibble_for_char": "0x020215f9", + "platform_calibrate_rt_clk": "0x020216a3", + "platform_call_on_stack": "0x020030fb", + "platform_cancel_us_timer": "0x020216a7", + "platform_config": "0x020216bd", + "platform_create_us_timer": "0x020217f1", + "platform_delete_timer": "0x02021805", + "platform_enable_irq": "0x0202180d", + "platform_get_current_task": "0x02021841", + "platform_get_gen_os_driver": "0x02021865", + "platform_get_heap_status": "0x0202186d", + "platform_get_link_layer_interf": "0x02021885", + "platform_get_task_handle": "0x0202188d", + "platform_get_timer_counter": "0x020218ad", + "platform_get_us_time": "0x020218b1", + "platform_get_version": "0x020218b5", + "platform_hrng": "0x020218d1", + "platform_install_isr_stack": "0x020218d9", + "platform_install_task_stack": "0x020218e5", + "platform_patch_rf_init_data": "0x0202191d", + "platform_printf": "0x02021929", + "platform_raise_assertion": "0x0202193d", + "platform_rand": "0x02021951", + "platform_read_info": "0x02021955", + "platform_read_persistent_reg": "0x02021985", + "platform_reset": "0x020219a5", + "platform_rt_rc_auto_tune": "0x020219b9", + "platform_rt_rc_auto_tune2": "0x020219c1", + "platform_rt_rc_tune": "0x02021a21", + "platform_set_abs_timer": "0x02021a4d", + "platform_set_evt_callback": "0x02021a51", + "platform_set_evt_callback_table": "0x02021a65", + "platform_set_irq_callback": "0x02021a71", + "platform_set_irq_callback_table": "0x02021a8d", + "platform_set_rf_clk_source": "0x02021a99", + "platform_set_rf_init_data": "0x02021aa5", + "platform_set_rf_power_mapping": "0x02021ab1", + "platform_set_timer": "0x02021abd", + "platform_shutdown": "0x02021ac1", + "platform_switch_app": "0x02021ac5", + "platform_trace_raw": "0x02021add", + "platform_write_persistent_reg": "0x02021af5", + "printf_hexdump": "0x02021ccd", + "pvPortMalloc": "0x020227a5", + "pvTaskIncrementMutexHeldCount": "0x0202288d", + "pvTimerGetTimerID": "0x020228a5", + "pxPortInitialiseStack": "0x020228d1", + "reverse_128": "0x02022ab9", + "reverse_24": "0x02022abf", + "reverse_256": "0x02022ac5", + "reverse_48": "0x02022acb", + "reverse_56": "0x02022ad1", + "reverse_64": "0x02022ad7", + "reverse_bd_addr": "0x02022add", + "reverse_bytes": "0x02022ae3", + "sm_add_event_handler": "0x02022e71", + "sm_address_resolution_lookup": "0x02022fc9", + "sm_authenticated": "0x02023371", + "sm_authorization_decline": "0x0202337f", + "sm_authorization_grant": "0x0202339f", + "sm_authorization_state": "0x020233bf", + "sm_bonding_decline": "0x020233d9", + "sm_config": "0x0202382d", + "sm_config_conn": "0x02023861", + "sm_encryption_key_size": "0x02023a1b", + "sm_just_works_confirm": "0x02023fa1", + "sm_le_device_key": "0x020242e1", + "sm_passkey_input": "0x02024377", + "sm_private_random_address_generation_get": "0x02024739", + "sm_private_random_address_generation_get_mode": "0x02024741", + "sm_private_random_address_generation_set_mode": "0x0202474d", + "sm_private_random_address_generation_set_update_period": "0x02024775", + "sm_register_external_ltk_callback": "0x020248b1", + "sm_register_oob_data_callback": "0x020248bd", + "sm_request_pairing": "0x020248c9", + "sm_send_security_request": "0x020253a7", + "sm_set_accepted_stk_generation_methods": "0x020253cd", + "sm_set_authentication_requirements": "0x020253d9", + "sm_set_encryption_key_size_range": "0x020253e9", + "sscanf_bd_addr": "0x020257b1", + "sysSetPublicDeviceAddr": "0x02025d0d", + "uuid128_to_str": "0x0202657d", + "uuid_add_bluetooth_prefix": "0x020265d5", + "uuid_has_bluetooth_prefix": "0x020265f5", + "uxListRemove": "0x02026611", + "uxQueueMessagesWaiting": "0x02026639", + "uxQueueMessagesWaitingFromISR": "0x02026661", + "uxQueueSpacesAvailable": "0x0202667d", + "uxTaskGetStackHighWaterMark": "0x020266a9", + "uxTaskPriorityGet": "0x020266c9", + "uxTaskPriorityGetFromISR": "0x020266e5", + "vListInitialise": "0x020267a3", + "vListInitialiseItem": "0x020267b9", + "vListInsert": "0x020267bf", + "vListInsertEnd": "0x020267ef", + "vPortEndScheduler": "0x02026809", + "vPortEnterCritical": "0x02026835", + "vPortExitCritical": "0x02026879", + "vPortFree": "0x020268ad", + "vPortSuppressTicksAndSleep": "0x02026951", + "vPortValidateInterruptPriority": "0x02026a79", + "vQueueDelete": "0x02026ad5", + "vQueueWaitForMessageRestricted": "0x02026b01", + "vTaskDelay": "0x02026b45", + "vTaskInternalSetTimeOutState": "0x02026b91", + "vTaskMissedYield": "0x02026ba1", + "vTaskPlaceOnEventList": "0x02026bad", + "vTaskPlaceOnEventListRestricted": "0x02026be5", + "vTaskPriorityDisinheritAfterTimeout": "0x02026c25", + "vTaskPrioritySet": "0x02026cd1", + "vTaskResume": "0x02026d99", + "vTaskStartScheduler": "0x02026e1d", + "vTaskStepTick": "0x02026ead", + "vTaskSuspend": "0x02026edd", + "vTaskSuspendAll": "0x02026f99", + "vTaskSwitchContext": "0x02026fa9", + "xPortStartScheduler": "0x02027051", + "xQueueAddToSet": "0x02027155", + "xQueueCreateCountingSemaphore": "0x02027179", + "xQueueCreateCountingSemaphoreStatic": "0x020271b5", + "xQueueCreateMutex": "0x020271f9", + "xQueueCreateMutexStatic": "0x0202720f", + "xQueueCreateSet": "0x02027229", + "xQueueGenericCreate": "0x02027231", + "xQueueGenericCreateStatic": "0x0202727d", + "xQueueGenericReset": "0x020272e5", + "xQueueGenericSend": "0x02027371", + "xQueueGenericSendFromISR": "0x020274dd", + "xQueueGiveFromISR": "0x0202759d", + "xQueueGiveMutexRecursive": "0x02027641", + "xQueueIsQueueEmptyFromISR": "0x02027681", + "xQueueIsQueueFullFromISR": "0x020276a5", + "xQueuePeek": "0x020276cd", + "xQueuePeekFromISR": "0x020277f5", + "xQueueReceive": "0x02027861", + "xQueueReceiveFromISR": "0x0202798d", + "xQueueRemoveFromSet": "0x02027a21", + "xQueueSelectFromSet": "0x02027a43", + "xQueueSelectFromSetFromISR": "0x02027a55", + "xQueueSemaphoreTake": "0x02027a69", + "xQueueTakeMutexRecursive": "0x02027bd5", + "xTaskCheckForTimeOut": "0x02027c19", + "xTaskCreate": "0x02027c89", + "xTaskCreateStatic": "0x02027ce5", + "xTaskGetCurrentTaskHandle": "0x02027d55", + "xTaskGetSchedulerState": "0x02027d61", + "xTaskGetTickCount": "0x02027d7d", + "xTaskGetTickCountFromISR": "0x02027d89", + "xTaskIncrementTick": "0x02027d99", + "xTaskPriorityDisinherit": "0x02027e65", + "xTaskPriorityInherit": "0x02027ef9", + "xTaskRemoveFromEventList": "0x02027f8d", + "xTaskResumeAll": "0x0202800d", + "xTaskResumeFromISR": "0x020280d5", + "xTimerCreate": "0x02028161", + "xTimerCreateStatic": "0x02028195", + "xTimerCreateTimerTask": "0x020281cd", + "xTimerGenericCommand": "0x02028239", + "xTimerGetExpiryTime": "0x020282a9", + "xTimerGetTimerDaemonTaskHandle": "0x020282c9" } \ No newline at end of file diff --git a/bundles/extension/ING9168xx/meta.json b/bundles/extension/ING9168xx/meta.json index a95301155..45af8b5ce 100644 --- a/bundles/extension/ING9168xx/meta.json +++ b/bundles/extension/ING9168xx/meta.json @@ -1,18 +1,24 @@ { "app": { - "base": 33726464 + "base": 33730560 }, "ram": { "base": 536870912, - "size": 21596 + "size": 21532 }, "rom": { "base": 33562624, - "size": 161312 + "size": 165688 + }, + "var": { + "link_layer_features": { + "addr": 33720072, + "value": "bf79ff07fe000000" + } }, "version": [ 2, 3, - 1 + 18 ] } \ No newline at end of file diff --git a/bundles/extension/ING9168xx/platform.bin b/bundles/extension/ING9168xx/platform.bin index 8a09ba819..d38524499 100644 Binary files a/bundles/extension/ING9168xx/platform.bin and b/bundles/extension/ING9168xx/platform.bin differ diff --git a/bundles/extension/ING9187xx/apis.json b/bundles/extension/ING9187xx/apis.json index f47bd2811..81b66054c 100644 --- a/bundles/extension/ING9187xx/apis.json +++ b/bundles/extension/ING9187xx/apis.json @@ -6,347 +6,354 @@ "att_dispatch_server_can_send_now": "0x000057cd", "att_dispatch_server_request_can_send_now_event": "0x000057d3", "att_emit_general_event": "0x00005885", - "att_server_can_send_packet_now": "0x00005fb5", - "att_server_deferred_read_response": "0x00005fb9", - "att_server_get_mtu": "0x00005fd1", - "att_server_indicate": "0x00006049", - "att_server_init": "0x000060cd", - "att_server_notify": "0x00006109", - "att_server_register_packet_handler": "0x00006221", - "att_server_request_can_send_now_event": "0x0000622d", - "att_set_db": "0x00006249", - "att_set_read_callback": "0x0000625d", - "att_set_write_callback": "0x00006269", - "bd_addr_cmp": "0x000063d9", - "bd_addr_copy": "0x000063df", - "bd_addr_to_str": "0x000063e9", - "big_endian_read_16": "0x00006421", - "big_endian_read_32": "0x00006429", - "big_endian_store_16": "0x0000643d", - "big_endian_store_32": "0x00006449", - "btstack_config": "0x0000659d", - "btstack_memory_pool_create": "0x000066db", - "btstack_memory_pool_free": "0x00006705", - "btstack_memory_pool_get": "0x00006765", - "btstack_push_user_msg": "0x000067cd", - "btstack_push_user_runnable": "0x000067d9", - "btstack_reset": "0x000067e5", - "char_for_nibble": "0x00006ac1", - "eTaskConfirmSleepModeStatus": "0x00006da9", - "gap_add_dev_to_periodic_list": "0x000073a5", - "gap_add_whitelist": "0x000073b5", - "gap_aes_encrypt": "0x000073c1", - "gap_clear_white_lists": "0x000073f9", - "gap_clr_adv_set": "0x00007405", - "gap_clr_periodic_adv_list": "0x00007411", - "gap_create_connection_cancel": "0x0000741d", - "gap_disconnect": "0x00007429", - "gap_disconnect_all": "0x00007455", - "gap_ext_create_connection": "0x00007495", - "gap_get_connection_parameter_range": "0x0000756d", - "gap_le_read_channel_map": "0x000075a9", - "gap_periodic_adv_create_sync": "0x00007615", - "gap_periodic_adv_create_sync_cancel": "0x00007639", - "gap_periodic_adv_term_sync": "0x00007645", - "gap_read_periodic_adv_list_size": "0x000076cd", - "gap_read_phy": "0x000076d9", - "gap_read_remote_used_features": "0x000076e5", - "gap_read_remote_version": "0x000076f1", - "gap_read_rssi": "0x000076fd", - "gap_remove_whitelist": "0x00007709", - "gap_rmv_adv_set": "0x00007785", - "gap_rmv_dev_from_periodic_list": "0x00007791", - "gap_rx_test_v2": "0x000077a1", - "gap_set_adv_set_random_addr": "0x000077d9", - "gap_set_callback_for_next_hci": "0x00007815", - "gap_set_connection_parameter_range": "0x00007835", - "gap_set_data_length": "0x0000784d", - "gap_set_def_phy": "0x00007865", - "gap_set_ext_adv_data": "0x00007875", - "gap_set_ext_adv_enable": "0x0000788d", - "gap_set_ext_adv_para": "0x000078fd", - "gap_set_ext_scan_enable": "0x000079d5", - "gap_set_ext_scan_para": "0x000079ed", - "gap_set_ext_scan_response_data": "0x00007a8d", - "gap_set_host_channel_classification": "0x00007aa5", - "gap_set_periodic_adv_data": "0x00007ab5", - "gap_set_periodic_adv_enable": "0x00007b25", - "gap_set_periodic_adv_para": "0x00007b35", - "gap_set_phy": "0x00007b4d", - "gap_set_random_device_address": "0x00007b69", - "gap_start_ccm": "0x00007b99", - "gap_test_end": "0x00007be1", - "gap_tx_test_v2": "0x00007bed", - "gap_tx_test_v4": "0x00007c05", - "gap_update_connection_parameters": "0x00007c29", - "gap_vendor_tx_continuous_wave": "0x00007c6d", - "gatt_client_cancel_write": "0x00008195", - "gatt_client_discover_characteristic_descriptors": "0x000081bb", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x000081fb", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x0000824b", - "gatt_client_discover_characteristics_for_service": "0x0000829b", - "gatt_client_discover_primary_services": "0x000082d1", - "gatt_client_discover_primary_services_by_uuid128": "0x00008303", - "gatt_client_discover_primary_services_by_uuid16": "0x00008347", - "gatt_client_execute_write": "0x00008383", - "gatt_client_find_included_services_for_service": "0x000083a9", - "gatt_client_get_mtu": "0x000083d7", - "gatt_client_is_ready": "0x00008479", - "gatt_client_listen_for_characteristic_value_updates": "0x0000848f", - "gatt_client_prepare_write": "0x000084b1", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x000084ed", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x00008517", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x0000851d", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x0000854b", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x00008551", - "gatt_client_read_multiple_characteristic_values": "0x0000857f", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x000085af", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x000085dd", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x00008629", - "gatt_client_register_handler": "0x00008675", - "gatt_client_reliable_write_long_value_of_characteristic": "0x00008681", - "gatt_client_signed_write_without_response": "0x00008ab1", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008b75", - "gatt_client_write_client_characteristic_configuration": "0x00008baf", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008c01", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008c11", - "gatt_client_write_long_value_of_characteristic": "0x00008c4d", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008c5d", - "gatt_client_write_value_of_characteristic": "0x00008c99", - "gatt_client_write_value_of_characteristic_without_response": "0x00008ccf", - "hci_add_event_handler": "0x0000a1f5", - "hci_power_control": "0x0000a995", - "hci_register_acl_packet_handler": "0x0000ab49", - "kv_commit": "0x0000b2bd", - "kv_get": "0x0000b319", - "kv_init": "0x0000b325", - "kv_init_backend": "0x0000b3a5", - "kv_put": "0x0000b3b9", - "kv_remove": "0x0000b3c5", - "kv_remove_all": "0x0000b3f9", - "kv_value_modified": "0x0000b429", - "kv_value_modified_of_key": "0x0000b445", - "kv_visit": "0x0000b451", - "l2cap_add_event_handler": "0x0000b4e1", - "l2cap_can_send_packet_now": "0x0000b4f1", - "l2cap_create_le_credit_based_connection_request": "0x0000b6ad", - "l2cap_credit_based_send": "0x0000b7f1", - "l2cap_credit_based_send_continue": "0x0000b81d", - "l2cap_disconnect": "0x0000b899", - "l2cap_get_le_credit_based_connection_credits": "0x0000bae9", - "l2cap_get_peer_mtu_for_local_cid": "0x0000bb05", - "l2cap_init": "0x0000bed9", - "l2cap_le_send_flow_control_credit": "0x0000bfcf", - "l2cap_max_le_mtu": "0x0000c2d9", - "l2cap_register_packet_handler": "0x0000c401", - "l2cap_register_service": "0x0000c40d", - "l2cap_request_can_send_now_event": "0x0000c51d", - "l2cap_request_connection_parameter_update": "0x0000c537", - "l2cap_send_echo_request": "0x0000ca11", - "l2cap_unregister_service": "0x0000cad1", - "le_device_db_add": "0x0000cb29", - "le_device_db_find": "0x0000cc01", - "le_device_db_from_key": "0x0000cc2d", - "le_device_db_iter_cur": "0x0000cc35", - "le_device_db_iter_cur_key": "0x0000cc39", - "le_device_db_iter_init": "0x0000cc3d", - "le_device_db_iter_next": "0x0000cc45", - "le_device_db_remove_key": "0x0000cc6b", - "ll_ackable_packet_alloc": "0x0000cc97", - "ll_ackable_packet_get_status": "0x0000cdc9", - "ll_ackable_packet_run": "0x0000ce39", - "ll_ackable_packet_set_tx_data": "0x0000ced5", - "ll_aes_encrypt": "0x0000cef1", - "ll_channel_monitor_alloc": "0x0000cf6d", - "ll_channel_monitor_check_each_pdu": "0x0000cfef", - "ll_channel_monitor_run": "0x0000d055", - "ll_config": "0x0000d109", - "ll_free": "0x0000d13f", - "ll_get_heap_free_size": "0x0000d149", - "ll_hint_on_ce_len": "0x0000d15d", - "ll_legacy_adv_set_interval": "0x0000d195", - "ll_lock_frequency": "0x0000d1a5", - "ll_malloc": "0x0000d209", - "ll_query_timing_info": "0x0000d341", - "ll_raw_packet_alloc": "0x0000d38d", - "ll_raw_packet_free": "0x0000d461", - "ll_raw_packet_get_bare_rx_data": "0x0000d499", - "ll_raw_packet_get_rx_data": "0x0000d55f", - "ll_raw_packet_recv": "0x0000d601", - "ll_raw_packet_send": "0x0000d6bd", - "ll_raw_packet_set_bare_data": "0x0000d7a5", - "ll_raw_packet_set_bare_mode": "0x0000d7e3", - "ll_raw_packet_set_param": "0x0000d8e9", - "ll_raw_packet_set_tx_data": "0x0000d947", - "ll_register_hci_acl_previewer": "0x0000d9ad", - "ll_scan_set_fixed_channel": "0x0000da11", - "ll_set_adv_access_address": "0x0000dc29", - "ll_set_adv_coded_scheme": "0x0000dc35", - "ll_set_conn_acl_report_latency": "0x0000dc65", - "ll_set_conn_coded_scheme": "0x0000dc95", - "ll_set_conn_interval_unit": "0x0000dcc1", - "ll_set_conn_latency": "0x0000dccd", - "ll_set_conn_tx_power": "0x0000dcfd", - "ll_set_def_antenna": "0x0000dd45", - "ll_set_initiating_coded_scheme": "0x0000dd61", - "ll_set_max_conn_number": "0x0000dd6d", - "ll_unlock_frequency": "0x0000de01", - "nibble_for_char": "0x0001e0e1", - "platform_calibrate_rt_clk": "0x0001e18d", + "att_server_can_send_packet_now": "0x00005fb9", + "att_server_deferred_read_response": "0x00005fbd", + "att_server_get_mtu": "0x00005fd5", + "att_server_indicate": "0x0000604d", + "att_server_init": "0x000060d1", + "att_server_notify": "0x0000610d", + "att_server_register_packet_handler": "0x00006225", + "att_server_request_can_send_now_event": "0x00006231", + "att_set_db": "0x0000624d", + "att_set_read_callback": "0x00006261", + "att_set_write_callback": "0x0000626d", + "bd_addr_cmp": "0x000063dd", + "bd_addr_copy": "0x000063e3", + "bd_addr_to_str": "0x000063ed", + "big_endian_read_16": "0x00006425", + "big_endian_read_32": "0x0000642d", + "big_endian_store_16": "0x00006441", + "big_endian_store_32": "0x0000644d", + "btstack_config": "0x000065a1", + "btstack_get_capabilities": "0x000065ad", + "btstack_memory_pool_create": "0x000066f5", + "btstack_memory_pool_free": "0x0000671d", + "btstack_memory_pool_get": "0x0000677d", + "btstack_push_user_msg": "0x000067e5", + "btstack_push_user_runnable": "0x000067f1", + "btstack_reset": "0x000067fd", + "char_for_nibble": "0x00006ad9", + "eTaskConfirmSleepModeStatus": "0x00006dc1", + "gap_add_dev_to_periodic_list": "0x000073a9", + "gap_add_whitelist": "0x000073b9", + "gap_aes_encrypt": "0x000073c5", + "gap_clear_white_lists": "0x000073fd", + "gap_clr_adv_set": "0x00007409", + "gap_clr_periodic_adv_list": "0x00007415", + "gap_create_connection_cancel": "0x00007421", + "gap_disconnect": "0x0000742d", + "gap_disconnect2": "0x00007435", + "gap_disconnect_all": "0x00007461", + "gap_ext_create_connection": "0x000074a1", + "gap_get_connection_parameter_range": "0x00007579", + "gap_le_read_channel_map": "0x000075b1", + "gap_periodic_adv_create_sync": "0x00007611", + "gap_periodic_adv_create_sync_cancel": "0x00007635", + "gap_periodic_adv_term_sync": "0x00007641", + "gap_read_periodic_adv_list_size": "0x000076c9", + "gap_read_phy": "0x000076d5", + "gap_read_remote_used_features": "0x000076e1", + "gap_read_remote_version": "0x000076ed", + "gap_read_rssi": "0x000076f9", + "gap_read_white_lists_size": "0x00007705", + "gap_remove_whitelist": "0x00007711", + "gap_rmv_adv_set": "0x0000778d", + "gap_rmv_dev_from_periodic_list": "0x00007799", + "gap_rx_test_v2": "0x000077a9", + "gap_set_adv_set_random_addr": "0x000077e1", + "gap_set_callback_for_next_hci": "0x00007805", + "gap_set_connection_parameter_range": "0x00007825", + "gap_set_data_length": "0x0000783d", + "gap_set_def_phy": "0x00007855", + "gap_set_ext_adv_data": "0x00007865", + "gap_set_ext_adv_enable": "0x0000787d", + "gap_set_ext_adv_para": "0x000078ed", + "gap_set_ext_scan_enable": "0x000079b5", + "gap_set_ext_scan_para": "0x000079cd", + "gap_set_ext_scan_response_data": "0x00007a6d", + "gap_set_host_channel_classification": "0x00007a85", + "gap_set_periodic_adv_data": "0x00007a95", + "gap_set_periodic_adv_enable": "0x00007b05", + "gap_set_periodic_adv_para": "0x00007b15", + "gap_set_phy": "0x00007b2d", + "gap_set_random_device_address": "0x00007b49", + "gap_start_ccm": "0x00007b65", + "gap_test_end": "0x00007bad", + "gap_tx_test_v2": "0x00007bb9", + "gap_tx_test_v4": "0x00007bd1", + "gap_update_connection_parameters": "0x00007bf5", + "gap_vendor_tx_continuous_wave": "0x00007c39", + "gatt_client_cancel_write": "0x00008161", + "gatt_client_discover_characteristic_descriptors": "0x00008187", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x000081c7", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x00008217", + "gatt_client_discover_characteristics_for_service": "0x00008267", + "gatt_client_discover_primary_services": "0x0000829d", + "gatt_client_discover_primary_services_by_uuid128": "0x000082cf", + "gatt_client_discover_primary_services_by_uuid16": "0x00008313", + "gatt_client_execute_write": "0x0000834f", + "gatt_client_find_included_services_for_service": "0x00008375", + "gatt_client_get_mtu": "0x000083a3", + "gatt_client_is_ready": "0x0000844d", + "gatt_client_listen_for_characteristic_value_updates": "0x00008463", + "gatt_client_prepare_write": "0x00008485", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x000084c1", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x000084eb", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x000084f1", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x0000851f", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x00008525", + "gatt_client_read_multiple_characteristic_values": "0x00008553", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x00008583", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x000085b1", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x000085fd", + "gatt_client_register_handler": "0x00008649", + "gatt_client_reliable_write_long_value_of_characteristic": "0x00008655", + "gatt_client_signed_write_without_response": "0x00008a85", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008b49", + "gatt_client_write_client_characteristic_configuration": "0x00008b83", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008bd5", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008be5", + "gatt_client_write_long_value_of_characteristic": "0x00008c21", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008c31", + "gatt_client_write_value_of_characteristic": "0x00008c6d", + "gatt_client_write_value_of_characteristic_without_response": "0x00008ca3", + "hci_add_event_handler": "0x0000a1c1", + "hci_power_control": "0x0000a95d", + "hci_register_acl_packet_handler": "0x0000ab11", + "kv_commit": "0x0000b275", + "kv_get": "0x0000b2d1", + "kv_init": "0x0000b2dd", + "kv_init_backend": "0x0000b35d", + "kv_put": "0x0000b371", + "kv_remove": "0x0000b37d", + "kv_remove_all": "0x0000b3b1", + "kv_value_modified": "0x0000b3e1", + "kv_value_modified_of_key": "0x0000b3fd", + "kv_visit": "0x0000b409", + "l2cap_add_event_handler": "0x0000b499", + "l2cap_can_send_packet_now": "0x0000b4a9", + "l2cap_create_le_credit_based_connection_request": "0x0000b665", + "l2cap_credit_based_send": "0x0000b7a9", + "l2cap_credit_based_send_continue": "0x0000b7d5", + "l2cap_disconnect": "0x0000b851", + "l2cap_get_le_credit_based_connection_credits": "0x0000baa1", + "l2cap_get_peer_mtu_for_local_cid": "0x0000babd", + "l2cap_init": "0x0000be91", + "l2cap_le_send_flow_control_credit": "0x0000bf87", + "l2cap_max_le_mtu": "0x0000c291", + "l2cap_register_packet_handler": "0x0000c3b9", + "l2cap_register_service": "0x0000c3c5", + "l2cap_request_can_send_now_event": "0x0000c4d5", + "l2cap_request_connection_parameter_update": "0x0000c4ef", + "l2cap_send_echo_request": "0x0000c9c9", + "l2cap_unregister_service": "0x0000ca89", + "le_device_db_add": "0x0000cae1", + "le_device_db_find": "0x0000cbb9", + "le_device_db_from_key": "0x0000cbe5", + "le_device_db_iter_cur": "0x0000cbed", + "le_device_db_iter_cur_key": "0x0000cbf1", + "le_device_db_iter_init": "0x0000cbf5", + "le_device_db_iter_next": "0x0000cbfd", + "le_device_db_remove_key": "0x0000cc23", + "ll_ackable_packet_alloc": "0x0000cc4f", + "ll_ackable_packet_get_status": "0x0000cd81", + "ll_ackable_packet_run": "0x0000cdf1", + "ll_ackable_packet_set_tx_data": "0x0000ce8d", + "ll_aes_encrypt": "0x0000cea9", + "ll_channel_monitor_alloc": "0x0000cf25", + "ll_channel_monitor_check_each_pdu": "0x0000cfa7", + "ll_channel_monitor_run": "0x0000d015", + "ll_config": "0x0000d0c9", + "ll_free": "0x0000d0ff", + "ll_get_capabilities": "0x0000d109", + "ll_get_heap_free_size": "0x0000d129", + "ll_get_states": "0x0000d139", + "ll_hint_on_ce_len": "0x0000d1f5", + "ll_legacy_adv_set_interval": "0x0000d22d", + "ll_lock_frequency": "0x0000d23d", + "ll_malloc": "0x0000d2a1", + "ll_query_timing_info": "0x0000d3d9", + "ll_raw_packet_alloc": "0x0000d425", + "ll_raw_packet_free": "0x0000d4f9", + "ll_raw_packet_get_bare_rx_data": "0x0000d531", + "ll_raw_packet_get_rx_data": "0x0000d5f7", + "ll_raw_packet_recv": "0x0000d699", + "ll_raw_packet_send": "0x0000d755", + "ll_raw_packet_set_bare_data": "0x0000d83d", + "ll_raw_packet_set_bare_mode": "0x0000d87b", + "ll_raw_packet_set_param": "0x0000d981", + "ll_raw_packet_set_tx_data": "0x0000d9df", + "ll_register_hci_acl_previewer": "0x0000da45", + "ll_scan_set_fixed_channel": "0x0000daa9", + "ll_set_adv_access_address": "0x0000dcc1", + "ll_set_adv_coded_scheme": "0x0000dccd", + "ll_set_conn_acl_report_latency": "0x0000dcfd", + "ll_set_conn_coded_scheme": "0x0000dd2d", + "ll_set_conn_interval_unit": "0x0000dd59", + "ll_set_conn_latency": "0x0000dd65", + "ll_set_conn_tx_power": "0x0000dd95", + "ll_set_def_antenna": "0x0000dddd", + "ll_set_initiating_coded_scheme": "0x0000ddf9", + "ll_set_max_conn_number": "0x0000de05", + "ll_unlock_frequency": "0x0000de99", + "nibble_for_char": "0x0001e179", + "platform_calibrate_rt_clk": "0x0001e225", "platform_call_on_stack": "0x00004183", - "platform_config": "0x0001e191", - "platform_delete_timer": "0x0001e2b5", - "platform_enable_irq": "0x0001e2bd", - "platform_get_current_task": "0x0001e2f5", - "platform_get_gen_os_driver": "0x0001e319", - "platform_get_heap_status": "0x0001e321", - "platform_get_link_layer_interf": "0x0001e339", - "platform_get_task_handle": "0x0001e341", - "platform_get_timer_counter": "0x0001e361", - "platform_get_us_time": "0x0001e365", - "platform_get_version": "0x0001e369", - "platform_hrng": "0x0001e371", - "platform_install_isr_stack": "0x0001e379", - "platform_install_task_stack": "0x0001e385", - "platform_patch_rf_init_data": "0x0001e3bd", - "platform_printf": "0x0001e3c9", - "platform_raise_assertion": "0x0001e3dd", - "platform_rand": "0x0001e3f1", - "platform_read_info": "0x0001e3f5", - "platform_read_persistent_reg": "0x0001e425", - "platform_reset": "0x0001e435", - "platform_rt_rc_auto_tune": "0x0001e459", - "platform_rt_rc_auto_tune2": "0x0001e461", - "platform_rt_rc_tune": "0x0001e4e9", - "platform_set_abs_timer": "0x0001e4fd", - "platform_set_evt_callback": "0x0001e501", - "platform_set_evt_callback_table": "0x0001e515", - "platform_set_irq_callback": "0x0001e521", - "platform_set_irq_callback_table": "0x0001e53d", - "platform_set_rf_clk_source": "0x0001e549", - "platform_set_rf_init_data": "0x0001e555", - "platform_set_rf_power_mapping": "0x0001e561", - "platform_set_timer": "0x0001e56d", - "platform_shutdown": "0x0001e571", - "platform_switch_app": "0x0001e575", - "platform_trace_raw": "0x0001e5a1", - "platform_write_persistent_reg": "0x0001e5b9", - "printf_hexdump": "0x0001e76d", - "pvPortMalloc": "0x0001f261", - "pvTaskIncrementMutexHeldCount": "0x0001f349", - "pvTimerGetTimerID": "0x0001f361", - "pxPortInitialiseStack": "0x0001f38d", - "reverse_128": "0x0001f535", - "reverse_24": "0x0001f53b", - "reverse_256": "0x0001f541", - "reverse_48": "0x0001f547", - "reverse_56": "0x0001f54d", - "reverse_64": "0x0001f553", - "reverse_bd_addr": "0x0001f559", - "reverse_bytes": "0x0001f55f", - "sm_add_event_handler": "0x0001f72d", - "sm_address_resolution_lookup": "0x0001f885", - "sm_authenticated": "0x0001fc01", - "sm_authorization_decline": "0x0001fc0f", - "sm_authorization_grant": "0x0001fc2f", - "sm_authorization_state": "0x0001fc4f", - "sm_bonding_decline": "0x0001fc69", - "sm_config": "0x000200c5", - "sm_config_conn": "0x000200dd", - "sm_encryption_key_size": "0x00020293", - "sm_just_works_confirm": "0x00020819", - "sm_le_device_key": "0x00020b51", - "sm_passkey_input": "0x00020be7", - "sm_private_random_address_generation_get": "0x00020fa1", - "sm_private_random_address_generation_get_mode": "0x00020fa9", - "sm_private_random_address_generation_set_mode": "0x00020fb5", - "sm_private_random_address_generation_set_update_period": "0x00020fdd", - "sm_register_external_ltk_callback": "0x00021119", - "sm_register_oob_data_callback": "0x00021125", - "sm_request_pairing": "0x00021131", - "sm_send_security_request": "0x00021c07", - "sm_set_accepted_stk_generation_methods": "0x00021c2d", - "sm_set_authentication_requirements": "0x00021c39", - "sm_set_encryption_key_size_range": "0x00021c45", - "sscanf_bd_addr": "0x00022015", - "sysSetPublicDeviceAddr": "0x000223c9", - "uuid128_to_str": "0x000229dd", - "uuid_add_bluetooth_prefix": "0x00022a35", - "uuid_has_bluetooth_prefix": "0x00022a55", - "uxListRemove": "0x00022a71", - "uxQueueMessagesWaiting": "0x00022a99", - "uxQueueMessagesWaitingFromISR": "0x00022ac1", - "uxQueueSpacesAvailable": "0x00022add", - "uxTaskGetStackHighWaterMark": "0x00022b09", - "uxTaskPriorityGet": "0x00022b29", - "uxTaskPriorityGetFromISR": "0x00022b45", - "vListInitialise": "0x00022bff", - "vListInitialiseItem": "0x00022c15", - "vListInsert": "0x00022c1b", - "vListInsertEnd": "0x00022c4b", - "vPortEndScheduler": "0x00022c65", - "vPortEnterCritical": "0x00022c91", - "vPortExitCritical": "0x00022cd5", - "vPortFree": "0x00022d09", - "vPortSuppressTicksAndSleep": "0x00022d9d", - "vPortValidateInterruptPriority": "0x00022ec5", - "vQueueDelete": "0x00022f21", - "vQueueWaitForMessageRestricted": "0x00022f4d", - "vTaskDelay": "0x00022f95", - "vTaskInternalSetTimeOutState": "0x00022fe1", - "vTaskMissedYield": "0x00022ff1", - "vTaskPlaceOnEventList": "0x00022ffd", - "vTaskPlaceOnEventListRestricted": "0x00023035", - "vTaskPriorityDisinheritAfterTimeout": "0x00023075", - "vTaskPrioritySet": "0x00023121", - "vTaskResume": "0x000231e9", - "vTaskStartScheduler": "0x0002326d", - "vTaskStepTick": "0x000232fd", - "vTaskSuspend": "0x0002332d", - "vTaskSuspendAll": "0x000233e9", - "vTaskSwitchContext": "0x000233f9", - "xPortStartScheduler": "0x000234a9", - "xQueueAddToSet": "0x00023571", - "xQueueCreateCountingSemaphore": "0x00023595", - "xQueueCreateCountingSemaphoreStatic": "0x000235d1", - "xQueueCreateMutex": "0x00023615", - "xQueueCreateMutexStatic": "0x0002362b", - "xQueueCreateSet": "0x00023645", - "xQueueGenericCreate": "0x0002364d", - "xQueueGenericCreateStatic": "0x00023699", - "xQueueGenericReset": "0x00023701", - "xQueueGenericSend": "0x0002378d", - "xQueueGenericSendFromISR": "0x000238f9", - "xQueueGiveFromISR": "0x000239b9", - "xQueueGiveMutexRecursive": "0x00023a5d", - "xQueueIsQueueEmptyFromISR": "0x00023a9d", - "xQueueIsQueueFullFromISR": "0x00023ac1", - "xQueuePeek": "0x00023ae9", - "xQueuePeekFromISR": "0x00023c11", - "xQueueReceive": "0x00023c7d", - "xQueueReceiveFromISR": "0x00023da9", - "xQueueRemoveFromSet": "0x00023e3d", - "xQueueSelectFromSet": "0x00023e5f", - "xQueueSelectFromSetFromISR": "0x00023e71", - "xQueueSemaphoreTake": "0x00023e85", - "xQueueTakeMutexRecursive": "0x00023ff1", - "xTaskCheckForTimeOut": "0x00024035", - "xTaskCreate": "0x000240a5", - "xTaskCreateStatic": "0x00024101", - "xTaskGetCurrentTaskHandle": "0x00024171", - "xTaskGetSchedulerState": "0x0002417d", - "xTaskGetTickCount": "0x00024199", - "xTaskGetTickCountFromISR": "0x000241a5", - "xTaskIncrementTick": "0x000241b5", - "xTaskPriorityDisinherit": "0x00024281", - "xTaskPriorityInherit": "0x00024315", - "xTaskRemoveFromEventList": "0x000243a9", - "xTaskResumeAll": "0x00024429", - "xTaskResumeFromISR": "0x000244f1", - "xTimerCreate": "0x0002457d", - "xTimerCreateStatic": "0x000245b1", - "xTimerCreateTimerTask": "0x000245e9", - "xTimerGenericCommand": "0x00024655", - "xTimerGetExpiryTime": "0x000246c5", - "xTimerGetTimerDaemonTaskHandle": "0x000246e5" + "platform_cancel_us_timer": "0x0001e229", + "platform_config": "0x0001e23d", + "platform_create_us_timer": "0x0001e361", + "platform_delete_timer": "0x0001e375", + "platform_enable_irq": "0x0001e37d", + "platform_get_current_task": "0x0001e3b5", + "platform_get_gen_os_driver": "0x0001e3d9", + "platform_get_heap_status": "0x0001e3e1", + "platform_get_link_layer_interf": "0x0001e3f9", + "platform_get_task_handle": "0x0001e401", + "platform_get_timer_counter": "0x0001e421", + "platform_get_us_time": "0x0001e425", + "platform_get_version": "0x0001e429", + "platform_hrng": "0x0001e431", + "platform_install_isr_stack": "0x0001e439", + "platform_install_task_stack": "0x0001e445", + "platform_patch_rf_init_data": "0x0001e47d", + "platform_printf": "0x0001e489", + "platform_raise_assertion": "0x0001e49d", + "platform_rand": "0x0001e4b1", + "platform_read_info": "0x0001e4b5", + "platform_read_persistent_reg": "0x0001e4e5", + "platform_reset": "0x0001e4f5", + "platform_rt_rc_auto_tune": "0x0001e519", + "platform_rt_rc_auto_tune2": "0x0001e521", + "platform_rt_rc_tune": "0x0001e59d", + "platform_set_abs_timer": "0x0001e5c1", + "platform_set_evt_callback": "0x0001e5c5", + "platform_set_evt_callback_table": "0x0001e5d9", + "platform_set_irq_callback": "0x0001e5e5", + "platform_set_irq_callback_table": "0x0001e601", + "platform_set_rf_clk_source": "0x0001e60d", + "platform_set_rf_init_data": "0x0001e619", + "platform_set_rf_power_mapping": "0x0001e625", + "platform_set_timer": "0x0001e631", + "platform_shutdown": "0x0001e635", + "platform_switch_app": "0x0001e639", + "platform_trace_raw": "0x0001e665", + "platform_write_persistent_reg": "0x0001e67d", + "printf_hexdump": "0x0001e831", + "pvPortMalloc": "0x0001f325", + "pvTaskIncrementMutexHeldCount": "0x0001f40d", + "pvTimerGetTimerID": "0x0001f425", + "pxPortInitialiseStack": "0x0001f451", + "reverse_128": "0x0001f5f9", + "reverse_24": "0x0001f5ff", + "reverse_256": "0x0001f605", + "reverse_48": "0x0001f60b", + "reverse_56": "0x0001f611", + "reverse_64": "0x0001f617", + "reverse_bd_addr": "0x0001f61d", + "reverse_bytes": "0x0001f623", + "sm_add_event_handler": "0x0001f7f1", + "sm_address_resolution_lookup": "0x0001f949", + "sm_authenticated": "0x0001fcf1", + "sm_authorization_decline": "0x0001fcff", + "sm_authorization_grant": "0x0001fd1f", + "sm_authorization_state": "0x0001fd3f", + "sm_bonding_decline": "0x0001fd59", + "sm_config": "0x000201b5", + "sm_config_conn": "0x000201e9", + "sm_encryption_key_size": "0x000203a3", + "sm_just_works_confirm": "0x00020929", + "sm_le_device_key": "0x00020c69", + "sm_passkey_input": "0x00020cff", + "sm_private_random_address_generation_get": "0x000210c1", + "sm_private_random_address_generation_get_mode": "0x000210c9", + "sm_private_random_address_generation_set_mode": "0x000210d5", + "sm_private_random_address_generation_set_update_period": "0x000210fd", + "sm_register_external_ltk_callback": "0x00021239", + "sm_register_oob_data_callback": "0x00021245", + "sm_request_pairing": "0x00021251", + "sm_send_security_request": "0x00021d2f", + "sm_set_accepted_stk_generation_methods": "0x00021d55", + "sm_set_authentication_requirements": "0x00021d61", + "sm_set_encryption_key_size_range": "0x00021d71", + "sscanf_bd_addr": "0x00022131", + "sysSetPublicDeviceAddr": "0x0002252d", + "uuid128_to_str": "0x00022b55", + "uuid_add_bluetooth_prefix": "0x00022bad", + "uuid_has_bluetooth_prefix": "0x00022bcd", + "uxListRemove": "0x00022be9", + "uxQueueMessagesWaiting": "0x00022c11", + "uxQueueMessagesWaitingFromISR": "0x00022c39", + "uxQueueSpacesAvailable": "0x00022c55", + "uxTaskGetStackHighWaterMark": "0x00022c81", + "uxTaskPriorityGet": "0x00022ca1", + "uxTaskPriorityGetFromISR": "0x00022cbd", + "vListInitialise": "0x00022d77", + "vListInitialiseItem": "0x00022d8d", + "vListInsert": "0x00022d93", + "vListInsertEnd": "0x00022dc3", + "vPortEndScheduler": "0x00022ddd", + "vPortEnterCritical": "0x00022e09", + "vPortExitCritical": "0x00022e4d", + "vPortFree": "0x00022e81", + "vPortSuppressTicksAndSleep": "0x00022f15", + "vPortValidateInterruptPriority": "0x0002303d", + "vQueueDelete": "0x00023099", + "vQueueWaitForMessageRestricted": "0x000230c5", + "vTaskDelay": "0x0002310d", + "vTaskInternalSetTimeOutState": "0x00023159", + "vTaskMissedYield": "0x00023169", + "vTaskPlaceOnEventList": "0x00023175", + "vTaskPlaceOnEventListRestricted": "0x000231ad", + "vTaskPriorityDisinheritAfterTimeout": "0x000231ed", + "vTaskPrioritySet": "0x00023299", + "vTaskResume": "0x00023361", + "vTaskStartScheduler": "0x000233e5", + "vTaskStepTick": "0x00023475", + "vTaskSuspend": "0x000234a5", + "vTaskSuspendAll": "0x00023561", + "vTaskSwitchContext": "0x00023571", + "xPortStartScheduler": "0x00023619", + "xQueueAddToSet": "0x000236e1", + "xQueueCreateCountingSemaphore": "0x00023705", + "xQueueCreateCountingSemaphoreStatic": "0x00023741", + "xQueueCreateMutex": "0x00023785", + "xQueueCreateMutexStatic": "0x0002379b", + "xQueueCreateSet": "0x000237b5", + "xQueueGenericCreate": "0x000237bd", + "xQueueGenericCreateStatic": "0x00023809", + "xQueueGenericReset": "0x00023871", + "xQueueGenericSend": "0x000238fd", + "xQueueGenericSendFromISR": "0x00023a69", + "xQueueGiveFromISR": "0x00023b29", + "xQueueGiveMutexRecursive": "0x00023bcd", + "xQueueIsQueueEmptyFromISR": "0x00023c0d", + "xQueueIsQueueFullFromISR": "0x00023c31", + "xQueuePeek": "0x00023c59", + "xQueuePeekFromISR": "0x00023d81", + "xQueueReceive": "0x00023ded", + "xQueueReceiveFromISR": "0x00023f19", + "xQueueRemoveFromSet": "0x00023fad", + "xQueueSelectFromSet": "0x00023fcf", + "xQueueSelectFromSetFromISR": "0x00023fe1", + "xQueueSemaphoreTake": "0x00023ff5", + "xQueueTakeMutexRecursive": "0x00024161", + "xTaskCheckForTimeOut": "0x000241a5", + "xTaskCreate": "0x00024215", + "xTaskCreateStatic": "0x00024271", + "xTaskGetCurrentTaskHandle": "0x000242e1", + "xTaskGetSchedulerState": "0x000242ed", + "xTaskGetTickCount": "0x00024309", + "xTaskGetTickCountFromISR": "0x00024315", + "xTaskIncrementTick": "0x00024325", + "xTaskPriorityDisinherit": "0x000243f1", + "xTaskPriorityInherit": "0x00024485", + "xTaskRemoveFromEventList": "0x00024519", + "xTaskResumeAll": "0x00024599", + "xTaskResumeFromISR": "0x00024661", + "xTimerCreate": "0x000246ed", + "xTimerCreateStatic": "0x00024721", + "xTimerCreateTimerTask": "0x00024759", + "xTimerGenericCommand": "0x000247c5", + "xTimerGetExpiryTime": "0x00024835", + "xTimerGetTimerDaemonTaskHandle": "0x00024855" } \ No newline at end of file diff --git a/bundles/extension/ING9187xx/meta.json b/bundles/extension/ING9187xx/meta.json index 266ecee8b..e70ac7287 100644 --- a/bundles/extension/ING9187xx/meta.json +++ b/bundles/extension/ING9187xx/meta.json @@ -1,18 +1,24 @@ { "app": { - "base": 155648 + "base": 163840 }, "ram": { "base": 536870912, - "size": 29876 + "size": 29812 }, "rom": { "base": 16384, - "size": 139224 + "size": 139612 + }, + "var": { + "link_layer_features": { + "addr": 151992, + "value": "3ff9010400000000" + } }, "version": [ 1, 9, - 41 + 56 ] } \ No newline at end of file diff --git a/bundles/extension/ING9187xx/platform.bin b/bundles/extension/ING9187xx/platform.bin index 96cf7d5ac..f3aa0edfb 100644 Binary files a/bundles/extension/ING9187xx/platform.bin and b/bundles/extension/ING9187xx/platform.bin differ diff --git a/bundles/extension/ING9188xx/apis.json b/bundles/extension/ING9188xx/apis.json index 3d231cc2a..c98814c0a 100644 --- a/bundles/extension/ING9188xx/apis.json +++ b/bundles/extension/ING9188xx/apis.json @@ -6,367 +6,374 @@ "att_dispatch_server_can_send_now": "0x000058f1", "att_dispatch_server_request_can_send_now_event": "0x000058f7", "att_emit_general_event": "0x000059a9", - "att_server_can_send_packet_now": "0x000060d9", - "att_server_deferred_read_response": "0x000060dd", - "att_server_get_mtu": "0x000060f5", - "att_server_indicate": "0x0000616d", - "att_server_init": "0x000061f1", - "att_server_notify": "0x0000622d", - "att_server_register_packet_handler": "0x00006345", - "att_server_request_can_send_now_event": "0x00006351", - "att_set_db": "0x0000636d", - "att_set_read_callback": "0x00006381", - "att_set_write_callback": "0x0000638d", - "bd_addr_cmp": "0x000064fd", - "bd_addr_copy": "0x00006503", - "bd_addr_to_str": "0x0000650d", - "big_endian_read_16": "0x00006545", - "big_endian_read_32": "0x0000654d", - "big_endian_store_16": "0x00006561", - "big_endian_store_32": "0x0000656d", - "btstack_config": "0x000066c1", - "btstack_memory_pool_create": "0x000067ff", - "btstack_memory_pool_free": "0x00006829", - "btstack_memory_pool_get": "0x00006889", - "btstack_push_user_msg": "0x000068f1", - "btstack_push_user_runnable": "0x000068fd", - "btstack_reset": "0x00006909", - "char_for_nibble": "0x00006be5", - "eTaskConfirmSleepModeStatus": "0x00006ecd", - "gap_add_dev_to_periodic_list": "0x00007539", - "gap_add_whitelist": "0x00007549", - "gap_aes_encrypt": "0x00007555", - "gap_clear_white_lists": "0x0000758d", - "gap_clr_adv_set": "0x00007599", - "gap_clr_periodic_adv_list": "0x000075a5", - "gap_create_connection_cancel": "0x000075b1", - "gap_default_periodic_adv_sync_transfer_param": "0x000075bd", - "gap_disconnect": "0x000075d5", - "gap_disconnect_all": "0x00007601", - "gap_ext_create_connection": "0x00007641", - "gap_get_connection_parameter_range": "0x00007719", - "gap_le_read_channel_map": "0x00007755", - "gap_periodic_adv_create_sync": "0x000077c1", - "gap_periodic_adv_create_sync_cancel": "0x000077e5", - "gap_periodic_adv_set_info_transfer": "0x000077f1", - "gap_periodic_adv_sync_transfer": "0x00007801", - "gap_periodic_adv_sync_transfer_param": "0x00007811", - "gap_periodic_adv_term_sync": "0x0000782d", - "gap_read_antenna_info": "0x000078b5", - "gap_read_periodic_adv_list_size": "0x000078c1", - "gap_read_phy": "0x000078cd", - "gap_read_remote_used_features": "0x000078d9", - "gap_read_remote_version": "0x000078e5", - "gap_read_rssi": "0x000078f1", - "gap_remove_whitelist": "0x000078fd", - "gap_rmv_adv_set": "0x00007979", - "gap_rmv_dev_from_periodic_list": "0x00007985", - "gap_rx_test_v2": "0x00007995", - "gap_rx_test_v3": "0x000079a5", - "gap_set_adv_set_random_addr": "0x000079f1", - "gap_set_callback_for_next_hci": "0x00007a2d", - "gap_set_connection_cte_request_enable": "0x00007a4d", - "gap_set_connection_cte_response_enable": "0x00007a69", - "gap_set_connection_cte_rx_param": "0x00007a79", - "gap_set_connection_cte_tx_param": "0x00007acd", - "gap_set_connection_parameter_range": "0x00007b19", - "gap_set_connectionless_cte_tx_enable": "0x00007b31", - "gap_set_connectionless_cte_tx_param": "0x00007b41", - "gap_set_connectionless_iq_sampling_enable": "0x00007b9d", - "gap_set_data_length": "0x00007bf9", - "gap_set_def_phy": "0x00007c11", - "gap_set_ext_adv_data": "0x00007c21", - "gap_set_ext_adv_enable": "0x00007c39", - "gap_set_ext_adv_para": "0x00007ca9", - "gap_set_ext_scan_enable": "0x00007d81", - "gap_set_ext_scan_para": "0x00007d99", - "gap_set_ext_scan_response_data": "0x00007e39", - "gap_set_host_channel_classification": "0x00007e51", - "gap_set_periodic_adv_data": "0x00007e61", - "gap_set_periodic_adv_enable": "0x00007ed1", - "gap_set_periodic_adv_para": "0x00007ee1", - "gap_set_periodic_adv_rx_enable": "0x00007ef9", - "gap_set_phy": "0x00007f09", - "gap_set_random_device_address": "0x00007f25", - "gap_start_ccm": "0x00007f55", - "gap_test_end": "0x00007f9d", - "gap_tx_test_v2": "0x00007fa9", - "gap_tx_test_v4": "0x00007fc1", - "gap_update_connection_parameters": "0x00007fe5", - "gap_vendor_tx_continuous_wave": "0x00008029", - "gatt_client_cancel_write": "0x00008551", - "gatt_client_discover_characteristic_descriptors": "0x00008577", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x000085b7", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x00008607", - "gatt_client_discover_characteristics_for_service": "0x00008657", - "gatt_client_discover_primary_services": "0x0000868d", - "gatt_client_discover_primary_services_by_uuid128": "0x000086bf", - "gatt_client_discover_primary_services_by_uuid16": "0x00008703", - "gatt_client_execute_write": "0x0000873f", - "gatt_client_find_included_services_for_service": "0x00008765", - "gatt_client_get_mtu": "0x00008793", - "gatt_client_is_ready": "0x00008835", - "gatt_client_listen_for_characteristic_value_updates": "0x0000884b", - "gatt_client_prepare_write": "0x0000886d", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x000088a9", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x000088d3", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x000088d9", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x00008907", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x0000890d", - "gatt_client_read_multiple_characteristic_values": "0x0000893b", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x0000896b", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x00008999", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x000089e5", - "gatt_client_register_handler": "0x00008a31", - "gatt_client_reliable_write_long_value_of_characteristic": "0x00008a3d", - "gatt_client_signed_write_without_response": "0x00008e6d", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008f31", - "gatt_client_write_client_characteristic_configuration": "0x00008f6b", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008fbd", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008fcd", - "gatt_client_write_long_value_of_characteristic": "0x00009009", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x00009019", - "gatt_client_write_value_of_characteristic": "0x00009055", - "gatt_client_write_value_of_characteristic_without_response": "0x0000908b", - "hci_add_event_handler": "0x0000a5cd", - "hci_power_control": "0x0000ad6d", - "hci_register_acl_packet_handler": "0x0000af21", - "kv_commit": "0x0000b695", - "kv_get": "0x0000b6f1", - "kv_init": "0x0000b6fd", - "kv_init_backend": "0x0000b77d", - "kv_put": "0x0000b791", - "kv_remove": "0x0000b79d", - "kv_remove_all": "0x0000b7d1", - "kv_value_modified": "0x0000b801", - "kv_value_modified_of_key": "0x0000b81d", - "kv_visit": "0x0000b829", - "l2cap_add_event_handler": "0x0000b8b9", - "l2cap_can_send_packet_now": "0x0000b8c9", - "l2cap_create_le_credit_based_connection_request": "0x0000ba85", - "l2cap_credit_based_send": "0x0000bbc9", - "l2cap_credit_based_send_continue": "0x0000bbf5", - "l2cap_disconnect": "0x0000bc71", - "l2cap_get_le_credit_based_connection_credits": "0x0000bec1", - "l2cap_get_peer_mtu_for_local_cid": "0x0000bedd", - "l2cap_init": "0x0000c2b1", - "l2cap_le_send_flow_control_credit": "0x0000c3a7", - "l2cap_max_le_mtu": "0x0000c6b1", - "l2cap_register_packet_handler": "0x0000c7d9", - "l2cap_register_service": "0x0000c7e5", - "l2cap_request_can_send_now_event": "0x0000c8f5", - "l2cap_request_connection_parameter_update": "0x0000c90f", - "l2cap_send_echo_request": "0x0000cde9", - "l2cap_unregister_service": "0x0000cea9", - "le_device_db_add": "0x0000cf01", - "le_device_db_find": "0x0000cfd9", - "le_device_db_from_key": "0x0000d005", - "le_device_db_iter_cur": "0x0000d00d", - "le_device_db_iter_cur_key": "0x0000d011", - "le_device_db_iter_init": "0x0000d015", - "le_device_db_iter_next": "0x0000d01d", - "le_device_db_remove_key": "0x0000d043", - "ll_ackable_packet_alloc": "0x0000d06f", - "ll_ackable_packet_get_status": "0x0000d1a1", - "ll_ackable_packet_run": "0x0000d211", - "ll_ackable_packet_set_tx_data": "0x0000d2ad", - "ll_aes_encrypt": "0x0000d2c9", - "ll_attach_cte_to_adv_set": "0x0000d345", - "ll_channel_monitor_alloc": "0x0000d4dd", - "ll_channel_monitor_check_each_pdu": "0x0000d55f", - "ll_channel_monitor_run": "0x0000d5c5", - "ll_config": "0x0000d679", - "ll_free": "0x0000d6af", - "ll_get_heap_free_size": "0x0000d6b9", - "ll_hint_on_ce_len": "0x0000d6cd", - "ll_legacy_adv_set_interval": "0x0000d705", - "ll_lock_frequency": "0x0000d715", - "ll_malloc": "0x0000d779", - "ll_query_timing_info": "0x0000d8b1", - "ll_raw_packet_alloc": "0x0000d8fd", - "ll_raw_packet_free": "0x0000d9d1", - "ll_raw_packet_get_bare_rx_data": "0x0000da09", - "ll_raw_packet_get_iq_samples": "0x0000dacf", - "ll_raw_packet_get_rx_data": "0x0000db69", - "ll_raw_packet_recv": "0x0000dc09", - "ll_raw_packet_send": "0x0000dcc5", - "ll_raw_packet_set_bare_data": "0x0000ddad", - "ll_raw_packet_set_bare_mode": "0x0000ddeb", - "ll_raw_packet_set_fake_cte_info": "0x0000def1", - "ll_raw_packet_set_param": "0x0000df13", - "ll_raw_packet_set_rx_cte": "0x0000df71", - "ll_raw_packet_set_tx_cte": "0x0000e007", - "ll_raw_packet_set_tx_data": "0x0000e045", - "ll_register_hci_acl_previewer": "0x0000e0a9", - "ll_scan_set_fixed_channel": "0x0000e10d", - "ll_scanner_enable_iq_sampling": "0x0000e119", - "ll_set_adv_access_address": "0x0000e3cd", - "ll_set_adv_coded_scheme": "0x0000e3d9", - "ll_set_conn_acl_report_latency": "0x0000e409", - "ll_set_conn_coded_scheme": "0x0000e439", - "ll_set_conn_interval_unit": "0x0000e465", - "ll_set_conn_latency": "0x0000e471", - "ll_set_conn_tx_power": "0x0000e4a1", - "ll_set_def_antenna": "0x0000e4e9", - "ll_set_initiating_coded_scheme": "0x0000e505", - "ll_set_max_conn_number": "0x0000e511", - "ll_unlock_frequency": "0x0000e5a5", - "nibble_for_char": "0x0001f865", - "platform_calibrate_rt_clk": "0x0001f911", + "att_server_can_send_packet_now": "0x000060dd", + "att_server_deferred_read_response": "0x000060e1", + "att_server_get_mtu": "0x000060f9", + "att_server_indicate": "0x00006171", + "att_server_init": "0x000061f5", + "att_server_notify": "0x00006231", + "att_server_register_packet_handler": "0x00006349", + "att_server_request_can_send_now_event": "0x00006355", + "att_set_db": "0x00006371", + "att_set_read_callback": "0x00006385", + "att_set_write_callback": "0x00006391", + "bd_addr_cmp": "0x00006501", + "bd_addr_copy": "0x00006507", + "bd_addr_to_str": "0x00006511", + "big_endian_read_16": "0x00006549", + "big_endian_read_32": "0x00006551", + "big_endian_store_16": "0x00006565", + "big_endian_store_32": "0x00006571", + "btstack_config": "0x000066c5", + "btstack_get_capabilities": "0x000066d1", + "btstack_memory_pool_create": "0x00006819", + "btstack_memory_pool_free": "0x00006841", + "btstack_memory_pool_get": "0x000068a1", + "btstack_push_user_msg": "0x00006909", + "btstack_push_user_runnable": "0x00006915", + "btstack_reset": "0x00006921", + "char_for_nibble": "0x00006bfd", + "eTaskConfirmSleepModeStatus": "0x00006ee5", + "gap_add_dev_to_periodic_list": "0x0000753d", + "gap_add_whitelist": "0x0000754d", + "gap_aes_encrypt": "0x00007559", + "gap_clear_white_lists": "0x00007591", + "gap_clr_adv_set": "0x0000759d", + "gap_clr_periodic_adv_list": "0x000075a9", + "gap_create_connection_cancel": "0x000075b5", + "gap_default_periodic_adv_sync_transfer_param": "0x000075c1", + "gap_disconnect": "0x000075d9", + "gap_disconnect2": "0x000075e1", + "gap_disconnect_all": "0x0000760d", + "gap_ext_create_connection": "0x0000764d", + "gap_get_connection_parameter_range": "0x00007725", + "gap_le_read_channel_map": "0x0000775d", + "gap_periodic_adv_create_sync": "0x000077bd", + "gap_periodic_adv_create_sync_cancel": "0x000077e1", + "gap_periodic_adv_set_info_transfer": "0x000077ed", + "gap_periodic_adv_sync_transfer": "0x000077fd", + "gap_periodic_adv_sync_transfer_param": "0x0000780d", + "gap_periodic_adv_term_sync": "0x00007829", + "gap_read_antenna_info": "0x000078b1", + "gap_read_periodic_adv_list_size": "0x000078bd", + "gap_read_phy": "0x000078c9", + "gap_read_remote_used_features": "0x000078d5", + "gap_read_remote_version": "0x000078e1", + "gap_read_rssi": "0x000078ed", + "gap_read_white_lists_size": "0x000078f9", + "gap_remove_whitelist": "0x00007905", + "gap_rmv_adv_set": "0x00007981", + "gap_rmv_dev_from_periodic_list": "0x0000798d", + "gap_rx_test_v2": "0x0000799d", + "gap_rx_test_v3": "0x000079ad", + "gap_set_adv_set_random_addr": "0x000079f9", + "gap_set_callback_for_next_hci": "0x00007a1d", + "gap_set_connection_cte_request_enable": "0x00007a3d", + "gap_set_connection_cte_response_enable": "0x00007a59", + "gap_set_connection_cte_rx_param": "0x00007a69", + "gap_set_connection_cte_tx_param": "0x00007abd", + "gap_set_connection_parameter_range": "0x00007b09", + "gap_set_connectionless_cte_tx_enable": "0x00007b21", + "gap_set_connectionless_cte_tx_param": "0x00007b31", + "gap_set_connectionless_iq_sampling_enable": "0x00007b8d", + "gap_set_data_length": "0x00007be9", + "gap_set_def_phy": "0x00007c01", + "gap_set_ext_adv_data": "0x00007c11", + "gap_set_ext_adv_enable": "0x00007c29", + "gap_set_ext_adv_para": "0x00007c99", + "gap_set_ext_scan_enable": "0x00007d61", + "gap_set_ext_scan_para": "0x00007d79", + "gap_set_ext_scan_response_data": "0x00007e19", + "gap_set_host_channel_classification": "0x00007e31", + "gap_set_periodic_adv_data": "0x00007e41", + "gap_set_periodic_adv_enable": "0x00007eb1", + "gap_set_periodic_adv_para": "0x00007ec1", + "gap_set_periodic_adv_rx_enable": "0x00007ed9", + "gap_set_phy": "0x00007ee9", + "gap_set_random_device_address": "0x00007f05", + "gap_start_ccm": "0x00007f21", + "gap_test_end": "0x00007f69", + "gap_tx_test_v2": "0x00007f75", + "gap_tx_test_v4": "0x00007f8d", + "gap_update_connection_parameters": "0x00007fb1", + "gap_vendor_tx_continuous_wave": "0x00007ff5", + "gatt_client_cancel_write": "0x0000851d", + "gatt_client_discover_characteristic_descriptors": "0x00008543", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x00008583", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x000085d3", + "gatt_client_discover_characteristics_for_service": "0x00008623", + "gatt_client_discover_primary_services": "0x00008659", + "gatt_client_discover_primary_services_by_uuid128": "0x0000868b", + "gatt_client_discover_primary_services_by_uuid16": "0x000086cf", + "gatt_client_execute_write": "0x0000870b", + "gatt_client_find_included_services_for_service": "0x00008731", + "gatt_client_get_mtu": "0x0000875f", + "gatt_client_is_ready": "0x00008809", + "gatt_client_listen_for_characteristic_value_updates": "0x0000881f", + "gatt_client_prepare_write": "0x00008841", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x0000887d", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x000088a7", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x000088ad", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x000088db", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x000088e1", + "gatt_client_read_multiple_characteristic_values": "0x0000890f", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x0000893f", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x0000896d", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x000089b9", + "gatt_client_register_handler": "0x00008a05", + "gatt_client_reliable_write_long_value_of_characteristic": "0x00008a11", + "gatt_client_signed_write_without_response": "0x00008e41", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008f05", + "gatt_client_write_client_characteristic_configuration": "0x00008f3f", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008f91", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008fa1", + "gatt_client_write_long_value_of_characteristic": "0x00008fdd", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008fed", + "gatt_client_write_value_of_characteristic": "0x00009029", + "gatt_client_write_value_of_characteristic_without_response": "0x0000905f", + "hci_add_event_handler": "0x0000a599", + "hci_power_control": "0x0000ad35", + "hci_register_acl_packet_handler": "0x0000aee9", + "kv_commit": "0x0000b64d", + "kv_get": "0x0000b6a9", + "kv_init": "0x0000b6b5", + "kv_init_backend": "0x0000b735", + "kv_put": "0x0000b749", + "kv_remove": "0x0000b755", + "kv_remove_all": "0x0000b789", + "kv_value_modified": "0x0000b7b9", + "kv_value_modified_of_key": "0x0000b7d5", + "kv_visit": "0x0000b7e1", + "l2cap_add_event_handler": "0x0000b871", + "l2cap_can_send_packet_now": "0x0000b881", + "l2cap_create_le_credit_based_connection_request": "0x0000ba3d", + "l2cap_credit_based_send": "0x0000bb81", + "l2cap_credit_based_send_continue": "0x0000bbad", + "l2cap_disconnect": "0x0000bc29", + "l2cap_get_le_credit_based_connection_credits": "0x0000be79", + "l2cap_get_peer_mtu_for_local_cid": "0x0000be95", + "l2cap_init": "0x0000c269", + "l2cap_le_send_flow_control_credit": "0x0000c35f", + "l2cap_max_le_mtu": "0x0000c669", + "l2cap_register_packet_handler": "0x0000c791", + "l2cap_register_service": "0x0000c79d", + "l2cap_request_can_send_now_event": "0x0000c8ad", + "l2cap_request_connection_parameter_update": "0x0000c8c7", + "l2cap_send_echo_request": "0x0000cda1", + "l2cap_unregister_service": "0x0000ce61", + "le_device_db_add": "0x0000ceb9", + "le_device_db_find": "0x0000cf91", + "le_device_db_from_key": "0x0000cfbd", + "le_device_db_iter_cur": "0x0000cfc5", + "le_device_db_iter_cur_key": "0x0000cfc9", + "le_device_db_iter_init": "0x0000cfcd", + "le_device_db_iter_next": "0x0000cfd5", + "le_device_db_remove_key": "0x0000cffb", + "ll_ackable_packet_alloc": "0x0000d027", + "ll_ackable_packet_get_status": "0x0000d159", + "ll_ackable_packet_run": "0x0000d1c9", + "ll_ackable_packet_set_tx_data": "0x0000d265", + "ll_aes_encrypt": "0x0000d281", + "ll_attach_cte_to_adv_set": "0x0000d2fd", + "ll_channel_monitor_alloc": "0x0000d495", + "ll_channel_monitor_check_each_pdu": "0x0000d517", + "ll_channel_monitor_run": "0x0000d585", + "ll_config": "0x0000d639", + "ll_free": "0x0000d66f", + "ll_get_capabilities": "0x0000d679", + "ll_get_heap_free_size": "0x0000d699", + "ll_get_states": "0x0000d6a9", + "ll_hint_on_ce_len": "0x0000d765", + "ll_legacy_adv_set_interval": "0x0000d79d", + "ll_lock_frequency": "0x0000d7ad", + "ll_malloc": "0x0000d811", + "ll_query_timing_info": "0x0000d949", + "ll_raw_packet_alloc": "0x0000d995", + "ll_raw_packet_free": "0x0000da69", + "ll_raw_packet_get_bare_rx_data": "0x0000daa1", + "ll_raw_packet_get_iq_samples": "0x0000db67", + "ll_raw_packet_get_rx_data": "0x0000dc01", + "ll_raw_packet_recv": "0x0000dca1", + "ll_raw_packet_send": "0x0000dd5d", + "ll_raw_packet_set_bare_data": "0x0000de45", + "ll_raw_packet_set_bare_mode": "0x0000de83", + "ll_raw_packet_set_fake_cte_info": "0x0000df89", + "ll_raw_packet_set_param": "0x0000dfab", + "ll_raw_packet_set_rx_cte": "0x0000e009", + "ll_raw_packet_set_tx_cte": "0x0000e09f", + "ll_raw_packet_set_tx_data": "0x0000e0dd", + "ll_register_hci_acl_previewer": "0x0000e141", + "ll_scan_set_fixed_channel": "0x0000e1a5", + "ll_scanner_enable_iq_sampling": "0x0000e1b1", + "ll_set_adv_access_address": "0x0000e465", + "ll_set_adv_coded_scheme": "0x0000e471", + "ll_set_conn_acl_report_latency": "0x0000e4a1", + "ll_set_conn_coded_scheme": "0x0000e4d1", + "ll_set_conn_interval_unit": "0x0000e4fd", + "ll_set_conn_latency": "0x0000e509", + "ll_set_conn_tx_power": "0x0000e539", + "ll_set_def_antenna": "0x0000e581", + "ll_set_initiating_coded_scheme": "0x0000e59d", + "ll_set_max_conn_number": "0x0000e5a9", + "ll_unlock_frequency": "0x0000e63d", + "nibble_for_char": "0x0001f8fd", + "platform_calibrate_rt_clk": "0x0001f9a9", "platform_call_on_stack": "0x00004183", - "platform_config": "0x0001f915", - "platform_delete_timer": "0x0001fa39", - "platform_enable_irq": "0x0001fa41", - "platform_get_current_task": "0x0001fa79", - "platform_get_gen_os_driver": "0x0001fa9d", - "platform_get_heap_status": "0x0001faa5", - "platform_get_link_layer_interf": "0x0001fabd", - "platform_get_task_handle": "0x0001fac5", - "platform_get_timer_counter": "0x0001fae5", - "platform_get_us_time": "0x0001fae9", - "platform_get_version": "0x0001faed", - "platform_hrng": "0x0001faf5", - "platform_install_isr_stack": "0x0001fafd", - "platform_install_task_stack": "0x0001fb09", - "platform_patch_rf_init_data": "0x0001fb41", - "platform_printf": "0x0001fb4d", - "platform_raise_assertion": "0x0001fb61", - "platform_rand": "0x0001fb75", - "platform_read_info": "0x0001fb79", - "platform_read_persistent_reg": "0x0001fba9", - "platform_reset": "0x0001fbb9", - "platform_rt_rc_auto_tune": "0x0001fbdd", - "platform_rt_rc_auto_tune2": "0x0001fbe5", - "platform_rt_rc_tune": "0x0001fc6d", - "platform_set_abs_timer": "0x0001fc81", - "platform_set_evt_callback": "0x0001fc85", - "platform_set_evt_callback_table": "0x0001fc99", - "platform_set_irq_callback": "0x0001fca5", - "platform_set_irq_callback_table": "0x0001fcc1", - "platform_set_rf_clk_source": "0x0001fccd", - "platform_set_rf_init_data": "0x0001fcd9", - "platform_set_rf_power_mapping": "0x0001fce5", - "platform_set_timer": "0x0001fcf1", - "platform_shutdown": "0x0001fcf5", - "platform_switch_app": "0x0001fcf9", - "platform_trace_raw": "0x0001fd25", - "platform_write_persistent_reg": "0x0001fd3d", - "printf_hexdump": "0x0001fef1", - "pvPortMalloc": "0x000209e5", - "pvTaskIncrementMutexHeldCount": "0x00020acd", - "pvTimerGetTimerID": "0x00020ae5", - "pxPortInitialiseStack": "0x00020b11", - "reverse_128": "0x00020cf1", - "reverse_24": "0x00020cf7", - "reverse_256": "0x00020cfd", - "reverse_48": "0x00020d03", - "reverse_56": "0x00020d09", - "reverse_64": "0x00020d0f", - "reverse_bd_addr": "0x00020d15", - "reverse_bytes": "0x00020d1b", - "sm_add_event_handler": "0x00021039", - "sm_address_resolution_lookup": "0x00021191", - "sm_authenticated": "0x0002150d", - "sm_authorization_decline": "0x0002151b", - "sm_authorization_grant": "0x0002153b", - "sm_authorization_state": "0x0002155b", - "sm_bonding_decline": "0x00021575", - "sm_config": "0x000219d1", - "sm_config_conn": "0x000219e9", - "sm_encryption_key_size": "0x00021b9f", - "sm_just_works_confirm": "0x00022125", - "sm_le_device_key": "0x0002245d", - "sm_passkey_input": "0x000224f3", - "sm_private_random_address_generation_get": "0x000228ad", - "sm_private_random_address_generation_get_mode": "0x000228b5", - "sm_private_random_address_generation_set_mode": "0x000228c1", - "sm_private_random_address_generation_set_update_period": "0x000228e9", - "sm_register_external_ltk_callback": "0x00022a25", - "sm_register_oob_data_callback": "0x00022a31", - "sm_request_pairing": "0x00022a3d", - "sm_send_security_request": "0x00023513", - "sm_set_accepted_stk_generation_methods": "0x00023539", - "sm_set_authentication_requirements": "0x00023545", - "sm_set_encryption_key_size_range": "0x00023551", - "sscanf_bd_addr": "0x00023921", - "sysSetPublicDeviceAddr": "0x00023cd5", - "uuid128_to_str": "0x00024481", - "uuid_add_bluetooth_prefix": "0x000244d9", - "uuid_has_bluetooth_prefix": "0x000244f9", - "uxListRemove": "0x00024515", - "uxQueueMessagesWaiting": "0x0002453d", - "uxQueueMessagesWaitingFromISR": "0x00024565", - "uxQueueSpacesAvailable": "0x00024581", - "uxTaskGetStackHighWaterMark": "0x000245ad", - "uxTaskPriorityGet": "0x000245cd", - "uxTaskPriorityGetFromISR": "0x000245e9", - "vListInitialise": "0x000246a3", - "vListInitialiseItem": "0x000246b9", - "vListInsert": "0x000246bf", - "vListInsertEnd": "0x000246ef", - "vPortEndScheduler": "0x00024709", - "vPortEnterCritical": "0x00024735", - "vPortExitCritical": "0x00024779", - "vPortFree": "0x000247ad", - "vPortSuppressTicksAndSleep": "0x00024841", - "vPortValidateInterruptPriority": "0x00024969", - "vQueueDelete": "0x000249c5", - "vQueueWaitForMessageRestricted": "0x000249f1", - "vTaskDelay": "0x00024a39", - "vTaskInternalSetTimeOutState": "0x00024a85", - "vTaskMissedYield": "0x00024a95", - "vTaskPlaceOnEventList": "0x00024aa1", - "vTaskPlaceOnEventListRestricted": "0x00024ad9", - "vTaskPriorityDisinheritAfterTimeout": "0x00024b19", - "vTaskPrioritySet": "0x00024bc5", - "vTaskResume": "0x00024c8d", - "vTaskStartScheduler": "0x00024d11", - "vTaskStepTick": "0x00024da1", - "vTaskSuspend": "0x00024dd1", - "vTaskSuspendAll": "0x00024e8d", - "vTaskSwitchContext": "0x00024e9d", - "xPortStartScheduler": "0x00024f4d", - "xQueueAddToSet": "0x00025015", - "xQueueCreateCountingSemaphore": "0x00025039", - "xQueueCreateCountingSemaphoreStatic": "0x00025075", - "xQueueCreateMutex": "0x000250b9", - "xQueueCreateMutexStatic": "0x000250cf", - "xQueueCreateSet": "0x000250e9", - "xQueueGenericCreate": "0x000250f1", - "xQueueGenericCreateStatic": "0x0002513d", - "xQueueGenericReset": "0x000251a5", - "xQueueGenericSend": "0x00025231", - "xQueueGenericSendFromISR": "0x0002539d", - "xQueueGiveFromISR": "0x0002545d", - "xQueueGiveMutexRecursive": "0x00025501", - "xQueueIsQueueEmptyFromISR": "0x00025541", - "xQueueIsQueueFullFromISR": "0x00025565", - "xQueuePeek": "0x0002558d", - "xQueuePeekFromISR": "0x000256b5", - "xQueueReceive": "0x00025721", - "xQueueReceiveFromISR": "0x0002584d", - "xQueueRemoveFromSet": "0x000258e1", - "xQueueSelectFromSet": "0x00025903", - "xQueueSelectFromSetFromISR": "0x00025915", - "xQueueSemaphoreTake": "0x00025929", - "xQueueTakeMutexRecursive": "0x00025a95", - "xTaskCheckForTimeOut": "0x00025ad9", - "xTaskCreate": "0x00025b49", - "xTaskCreateStatic": "0x00025ba5", - "xTaskGetCurrentTaskHandle": "0x00025c15", - "xTaskGetSchedulerState": "0x00025c21", - "xTaskGetTickCount": "0x00025c3d", - "xTaskGetTickCountFromISR": "0x00025c49", - "xTaskIncrementTick": "0x00025c59", - "xTaskPriorityDisinherit": "0x00025d25", - "xTaskPriorityInherit": "0x00025db9", - "xTaskRemoveFromEventList": "0x00025e4d", - "xTaskResumeAll": "0x00025ecd", - "xTaskResumeFromISR": "0x00025f95", - "xTimerCreate": "0x00026021", - "xTimerCreateStatic": "0x00026055", - "xTimerCreateTimerTask": "0x0002608d", - "xTimerGenericCommand": "0x000260f9", - "xTimerGetExpiryTime": "0x00026169", - "xTimerGetTimerDaemonTaskHandle": "0x00026189" + "platform_cancel_us_timer": "0x0001f9ad", + "platform_config": "0x0001f9c1", + "platform_create_us_timer": "0x0001fae5", + "platform_delete_timer": "0x0001faf9", + "platform_enable_irq": "0x0001fb01", + "platform_get_current_task": "0x0001fb39", + "platform_get_gen_os_driver": "0x0001fb5d", + "platform_get_heap_status": "0x0001fb65", + "platform_get_link_layer_interf": "0x0001fb7d", + "platform_get_task_handle": "0x0001fb85", + "platform_get_timer_counter": "0x0001fba5", + "platform_get_us_time": "0x0001fba9", + "platform_get_version": "0x0001fbad", + "platform_hrng": "0x0001fbb5", + "platform_install_isr_stack": "0x0001fbbd", + "platform_install_task_stack": "0x0001fbc9", + "platform_patch_rf_init_data": "0x0001fc01", + "platform_printf": "0x0001fc0d", + "platform_raise_assertion": "0x0001fc21", + "platform_rand": "0x0001fc35", + "platform_read_info": "0x0001fc39", + "platform_read_persistent_reg": "0x0001fc69", + "platform_reset": "0x0001fc79", + "platform_rt_rc_auto_tune": "0x0001fc9d", + "platform_rt_rc_auto_tune2": "0x0001fca5", + "platform_rt_rc_tune": "0x0001fd21", + "platform_set_abs_timer": "0x0001fd45", + "platform_set_evt_callback": "0x0001fd49", + "platform_set_evt_callback_table": "0x0001fd5d", + "platform_set_irq_callback": "0x0001fd69", + "platform_set_irq_callback_table": "0x0001fd85", + "platform_set_rf_clk_source": "0x0001fd91", + "platform_set_rf_init_data": "0x0001fd9d", + "platform_set_rf_power_mapping": "0x0001fda9", + "platform_set_timer": "0x0001fdb5", + "platform_shutdown": "0x0001fdb9", + "platform_switch_app": "0x0001fdbd", + "platform_trace_raw": "0x0001fde9", + "platform_write_persistent_reg": "0x0001fe01", + "printf_hexdump": "0x0001ffb5", + "pvPortMalloc": "0x00020aa9", + "pvTaskIncrementMutexHeldCount": "0x00020b91", + "pvTimerGetTimerID": "0x00020ba9", + "pxPortInitialiseStack": "0x00020bd5", + "reverse_128": "0x00020db5", + "reverse_24": "0x00020dbb", + "reverse_256": "0x00020dc1", + "reverse_48": "0x00020dc7", + "reverse_56": "0x00020dcd", + "reverse_64": "0x00020dd3", + "reverse_bd_addr": "0x00020dd9", + "reverse_bytes": "0x00020ddf", + "sm_add_event_handler": "0x000210fd", + "sm_address_resolution_lookup": "0x00021255", + "sm_authenticated": "0x000215fd", + "sm_authorization_decline": "0x0002160b", + "sm_authorization_grant": "0x0002162b", + "sm_authorization_state": "0x0002164b", + "sm_bonding_decline": "0x00021665", + "sm_config": "0x00021ac1", + "sm_config_conn": "0x00021af5", + "sm_encryption_key_size": "0x00021caf", + "sm_just_works_confirm": "0x00022235", + "sm_le_device_key": "0x00022575", + "sm_passkey_input": "0x0002260b", + "sm_private_random_address_generation_get": "0x000229cd", + "sm_private_random_address_generation_get_mode": "0x000229d5", + "sm_private_random_address_generation_set_mode": "0x000229e1", + "sm_private_random_address_generation_set_update_period": "0x00022a09", + "sm_register_external_ltk_callback": "0x00022b45", + "sm_register_oob_data_callback": "0x00022b51", + "sm_request_pairing": "0x00022b5d", + "sm_send_security_request": "0x0002363b", + "sm_set_accepted_stk_generation_methods": "0x00023661", + "sm_set_authentication_requirements": "0x0002366d", + "sm_set_encryption_key_size_range": "0x0002367d", + "sscanf_bd_addr": "0x00023a3d", + "sysSetPublicDeviceAddr": "0x00023e39", + "uuid128_to_str": "0x000245f9", + "uuid_add_bluetooth_prefix": "0x00024651", + "uuid_has_bluetooth_prefix": "0x00024671", + "uxListRemove": "0x0002468d", + "uxQueueMessagesWaiting": "0x000246b5", + "uxQueueMessagesWaitingFromISR": "0x000246dd", + "uxQueueSpacesAvailable": "0x000246f9", + "uxTaskGetStackHighWaterMark": "0x00024725", + "uxTaskPriorityGet": "0x00024745", + "uxTaskPriorityGetFromISR": "0x00024761", + "vListInitialise": "0x0002481b", + "vListInitialiseItem": "0x00024831", + "vListInsert": "0x00024837", + "vListInsertEnd": "0x00024867", + "vPortEndScheduler": "0x00024881", + "vPortEnterCritical": "0x000248ad", + "vPortExitCritical": "0x000248f1", + "vPortFree": "0x00024925", + "vPortSuppressTicksAndSleep": "0x000249b9", + "vPortValidateInterruptPriority": "0x00024ae1", + "vQueueDelete": "0x00024b3d", + "vQueueWaitForMessageRestricted": "0x00024b69", + "vTaskDelay": "0x00024bb1", + "vTaskInternalSetTimeOutState": "0x00024bfd", + "vTaskMissedYield": "0x00024c0d", + "vTaskPlaceOnEventList": "0x00024c19", + "vTaskPlaceOnEventListRestricted": "0x00024c51", + "vTaskPriorityDisinheritAfterTimeout": "0x00024c91", + "vTaskPrioritySet": "0x00024d3d", + "vTaskResume": "0x00024e05", + "vTaskStartScheduler": "0x00024e89", + "vTaskStepTick": "0x00024f19", + "vTaskSuspend": "0x00024f49", + "vTaskSuspendAll": "0x00025005", + "vTaskSwitchContext": "0x00025015", + "xPortStartScheduler": "0x000250bd", + "xQueueAddToSet": "0x00025185", + "xQueueCreateCountingSemaphore": "0x000251a9", + "xQueueCreateCountingSemaphoreStatic": "0x000251e5", + "xQueueCreateMutex": "0x00025229", + "xQueueCreateMutexStatic": "0x0002523f", + "xQueueCreateSet": "0x00025259", + "xQueueGenericCreate": "0x00025261", + "xQueueGenericCreateStatic": "0x000252ad", + "xQueueGenericReset": "0x00025315", + "xQueueGenericSend": "0x000253a1", + "xQueueGenericSendFromISR": "0x0002550d", + "xQueueGiveFromISR": "0x000255cd", + "xQueueGiveMutexRecursive": "0x00025671", + "xQueueIsQueueEmptyFromISR": "0x000256b1", + "xQueueIsQueueFullFromISR": "0x000256d5", + "xQueuePeek": "0x000256fd", + "xQueuePeekFromISR": "0x00025825", + "xQueueReceive": "0x00025891", + "xQueueReceiveFromISR": "0x000259bd", + "xQueueRemoveFromSet": "0x00025a51", + "xQueueSelectFromSet": "0x00025a73", + "xQueueSelectFromSetFromISR": "0x00025a85", + "xQueueSemaphoreTake": "0x00025a99", + "xQueueTakeMutexRecursive": "0x00025c05", + "xTaskCheckForTimeOut": "0x00025c49", + "xTaskCreate": "0x00025cb9", + "xTaskCreateStatic": "0x00025d15", + "xTaskGetCurrentTaskHandle": "0x00025d85", + "xTaskGetSchedulerState": "0x00025d91", + "xTaskGetTickCount": "0x00025dad", + "xTaskGetTickCountFromISR": "0x00025db9", + "xTaskIncrementTick": "0x00025dc9", + "xTaskPriorityDisinherit": "0x00025e95", + "xTaskPriorityInherit": "0x00025f29", + "xTaskRemoveFromEventList": "0x00025fbd", + "xTaskResumeAll": "0x0002603d", + "xTaskResumeFromISR": "0x00026105", + "xTimerCreate": "0x00026191", + "xTimerCreateStatic": "0x000261c5", + "xTimerCreateTimerTask": "0x000261fd", + "xTimerGenericCommand": "0x00026269", + "xTimerGetExpiryTime": "0x000262d9", + "xTimerGetTimerDaemonTaskHandle": "0x000262f9" } \ No newline at end of file diff --git a/bundles/extension/ING9188xx/meta.json b/bundles/extension/ING9188xx/meta.json index 59161671d..8b76a8567 100644 --- a/bundles/extension/ING9188xx/meta.json +++ b/bundles/extension/ING9188xx/meta.json @@ -4,15 +4,21 @@ }, "ram": { "base": 536870912, - "size": 29876 + "size": 29812 }, "rom": { "base": 16384, - "size": 146500 + "size": 146892 + }, + "var": { + "link_layer_features": { + "addr": 158924, + "value": "3ff9ff0700000000" + } }, "version": [ 1, 9, - 41 + 56 ] } \ No newline at end of file diff --git a/bundles/extension/ING9188xx/platform.bin b/bundles/extension/ING9188xx/platform.bin index 4ac37c7fd..b3758fd88 100644 Binary files a/bundles/extension/ING9188xx/platform.bin and b/bundles/extension/ING9188xx/platform.bin differ diff --git a/bundles/extension/inc/bluetooth.h b/bundles/extension/inc/bluetooth.h index 44c58585a..8d306ff5e 100644 --- a/bundles/extension/inc/bluetooth.h +++ b/bundles/extension/inc/bluetooth.h @@ -40,10 +40,14 @@ typedef uint8_t bd_addr_t[BD_ADDR_LEN]; typedef enum { BD_ADDR_TYPE_LE_PUBLIC = 0, BD_ADDR_TYPE_LE_RANDOM = 0x01, - BD_ADDR_TYPE_LE_RESOVLED_PUB = 0x02, - BD_ADDR_TYPE_LE_RESOVLED_RAN = 0x03 + BD_ADDR_TYPE_LE_RESOLVED_PUB = 0x02, + BD_ADDR_TYPE_LE_RESOLVED_RAN = 0x03 } bd_addr_type_t; +// back-compatibility for typos +#define BD_ADDR_TYPE_LE_RESOVLED_PUB BD_ADDR_TYPE_LE_RESOLVED_PUB +#define BD_ADDR_TYPE_LE_RESOVLED_RAN BD_ADDR_TYPE_LE_RESOLVED_RAN + /** * @brief link key */ @@ -718,7 +722,7 @@ typedef enum { #define SM_AUTHREQ_NO_BONDING 0x00 #define SM_AUTHREQ_BONDING 0x01 #define SM_AUTHREQ_MITM_PROTECTION 0x04 -#define SM_AUTHREQ_SC 0x08 +#define SM_AUTHREQ_SC 0x08 // support of LE Secure Connections pairing // Key distribution flags used by spec #define SM_KEYDIST_ENC_KEY 0X01 diff --git a/bundles/extension/inc/btstack_defines.h b/bundles/extension/inc/btstack_defines.h index a8d08006c..25f1463b0 100644 --- a/bundles/extension/inc/btstack_defines.h +++ b/bundles/extension/inc/btstack_defines.h @@ -385,6 +385,20 @@ */ #define SM_EVENT_STATE_CHANGED 0xDC + /** + * @format H1B1 + * @param handle + * @param show calculated numeric value that needs to be compared + */ +#define SM_EVENT_NUMERIC_COMPARISON_REQUEST 0xDD + +/** + * @format PP + * @param irk + * @param dhk + */ +#define SM_EVENT_IRK_DHK_RESULT 0xDE + // GAP /** diff --git a/bundles/extension/inc/btstack_event.h b/bundles/extension/inc/btstack_event.h index e5ab49a55..dc87fa82a 100644 --- a/bundles/extension/inc/btstack_event.h +++ b/bundles/extension/inc/btstack_event.h @@ -107,6 +107,21 @@ uint32_t btstack_push_user_runnable(f_btstack_user_runnable fun, void *data, con */ uint8_t btstack_reset(void); +typedef struct btstack_capabilities +{ + uint16_t adv_set_num; // max number of advertising sets + uint16_t conn_num; // max number of connections + uint16_t max_mtu; // max MTU + uint16_t device_db_num; // max number of devices in database +} btstack_capabilities_t; + +/** + * @brief Get BT stack capabilities. + * + * @param[out] capabilities see `btstack_capabilities_t`. + */ +void btstack_get_capabilities(btstack_capabilities_t *capabilities); + /*** * @brief Get subevent code for le event * @param event packet @@ -780,6 +795,26 @@ static __INLINE hci_con_handle_t sm_event_numeric_comparison_get_handle(const ui return little_endian_read_16(event, 2); } +/** + * @brief Get field addr_type from event SM_EVENT_NUMERIC_COMPARISON_REQUEST + * @param event packet + * @return addr_type + * @note: btstack_type 1 + */ +static __INLINE uint8_t sm_event_numeric_comparison_get_addr_type(const uint8_t * event){ + return *decode_event_offset(event, uint8_t, 4); +} + +/** + * @brief Get field address from event SM_EVENT_NUMERIC_COMPARISON_REQUEST + * @param event packet + * @param Pointer to storage for address + * @note: btstack_type B + */ +static __INLINE void sm_event_numeric_comparison_get_address(const uint8_t * event, uint8_t * address){ + reverse_bd_addr(decode_event_offset(event, uint8_t, 5), address); +} + /** * @brief Get field compare value from event SM_EVENT_NUMERIC_COMPARISON_REQUEST * @param event packet @@ -790,6 +825,24 @@ static __INLINE uint32_t sm_event_numeric_comparison_get_compare_value(const uin return little_endian_read_32(event, 11); } +/** + * @brief Get IRK from event SM_EVENT_IRK_DHK_RESULT + * @param event packet + * @return irk + */ +static __INLINE const uint8_t *sm_event_irk_dhk_result_get_irk(const uint8_t *event) { + return *decode_event_offset(event, uint8_t *, 2); +} + +/** + * @brief Get DHK from event SM_EVENT_IRK_DHK_RESULT + * @param event packet + * @return dhk + */ +static __INLINE const uint8_t *sm_event_irk_dhk_result_get_dhk(const uint8_t *event) { + return *decode_event_offset(event, uint8_t *, 2 + sizeof(uintptr_t)); +} + /** * @brief Get field handle from event GAP_EVENT_SECURITY_LEVEL * @param event packet diff --git a/bundles/extension/inc/gap.h b/bundles/extension/inc/gap.h index 94ec41d4e..020bb0b27 100644 --- a/bundles/extension/inc/gap.h +++ b/bundles/extension/inc/gap.h @@ -54,11 +54,27 @@ uint8_t gap_set_random_device_address(const uint8_t *address); /** * @brief Disconnect connection with handle * + * This is equivalent to `gap_disconnect2(handle, 0x13)`. + * * @param handle Used to identify an advertising set. Range: 0x00 to 0xEF * @return 0: Message is sent out or the connection already release */ uint8_t gap_disconnect(hci_con_handle_t handle); +/** + * @brief Disconnect connection with handle + * + * @param handle Used to identify an advertising set. Range: 0x00 to 0xEF + * @param reason Reason: + * - Authentication Failure error code (0x05) + * - Other End Terminated Connection error codes (0x13 to 0x15) + * - Unsupported Remote Feature error code (0x1A) + * - Pairing with Unit Key Not Supported error code (0x29) + * - Unacceptable Connection Parameters error code (0x3B) + * @return 0: Message is sent out or the connection already release + */ +uint8_t gap_disconnect2(hci_con_handle_t handle, uint8_t reason); + /** * @brief disconnect multi-connections */ @@ -70,7 +86,7 @@ void gap_disconnect_all(void); * @param[in] addtype BLE address type * @return 0: Message is sent to controller */ -uint8_t gap_add_whitelist(const uint8_t *address,bd_addr_type_t addtype); +uint8_t gap_add_whitelist(const uint8_t *address, bd_addr_type_t addtype); /** * @brief remove whitelist from controller @@ -79,7 +95,7 @@ uint8_t gap_add_whitelist(const uint8_t *address,bd_addr_type_t addtype); * @param addtype BLE address type * @return 0: Message is sent to controller */ -uint8_t gap_remove_whitelist(const uint8_t *address,bd_addr_type_t addtype); +uint8_t gap_remove_whitelist(const uint8_t *address, bd_addr_type_t addtype); /** * @brief clear white lists in controller @@ -88,6 +104,122 @@ uint8_t gap_remove_whitelist(const uint8_t *address,bd_addr_type_t addtype); */ uint8_t gap_clear_white_lists(void); +/** + * @brief read white lists size in controller + * + * @return 0: message sent out others: failed + */ +uint8_t gap_read_white_lists_size(void); + +/** + * @brief Add one device to the resolving list used to generate and resolve + * Resolvable Private Addresses in the Controller. + * + * @param address peer identity address + * @param addtype peer identity address type + * @param peer_irk IRK of the peer device + * @param local_irk IRK of the local device + * @return 0: message sent out others: failed + */ +// uint8_t gap_add_dev_to_resolving_list(const uint8_t *address, bd_addr_type_t addtype, +// const uint8_t *peer_irk, const uint8_t *local_irk); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Remove one device from the resolving list used to resolve Resolvable + * Private Addresses in the Controller. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_remove_dev_from_resolving_list(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Remove all devices from the resolving list used to resolve Resolvable + * Private Addresses in the Controller. + * + * @return 0: message sent out others: failed + */ +// uint8_t gap_clear_resolving_list(void); +// WARNING: ^^^ this API is not available in this release + + +// LE Privacy Mode +typedef enum privacy_mode +{ + PRIVACY_MODE_NETWORK = 0, // Network Privacy Mode (default) + // Identity address is not accepted if IRK is available + PRIVACY_MODE_DEVICE = 1, // Device Privacy Mode + // Identity address is accepted even if IRK is available +} privacy_mode_t; + +/** + * @brief Specify the privacy mode to be used for a given entry on the resolving list. + * + * @param address peer identity address + * @param addtype peer identity address type + * @param privacy_mode privacy mode for this peer device + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_privacy_mode(const uint8_t *address, bd_addr_type_t addtype, +// privacy_mode_t privacy_mode); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Get the current peer Resolvable Private Address being used for the + * corresponding peer Public and Random (static) Identity Address. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_read_peer_resolving_addr(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Get the current local Resolvable Private Address being used for the + * corresponding peer Identity Address. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_read_local_resolving_addr(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Enable resolution of Resolvable Private Addresses in the Controller. + * + * @param enable address resolution enable + * 0: disabled (default) + * 1: enabled + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_addr_resolution_enable(const uint8_t enable); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Set the length of time the Controller uses a Resolvable Private Address + * before a new resolvable private address is generated and starts being used. + * + * @param rpa_timeout RPA_Timeout measured in seconds + * Range: 0x0001 to 0x0E10 + * Time range: 1 s to 1 hour + * Default: 0x0384 (900 s or 15 minutes) + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_resolvable_private_addr_timeout(uint16_t rpa_timeout); +// WARNING: ^^^ this API is not available in this release + + /** * @brief read rssi value of a appointed hci connection * @@ -290,13 +422,13 @@ typedef enum scan_filter_policy SCAN_ACCEPT_WLIST_EXCEPT_NOT_DIRECTED, // Accept all advertising packets except directed advertising packets // where the initiator's identity address does not address this device - SCAN_ACCEPT_ALL_EXCEPT_IDENTITY_NOT_MATCH, + // SCAN_ACCEPT_ALL_EXCEPT_IDENTITY_NOT_MATCH, // Accept all advertising packets except: // 1. advertising packets where the advertiser's identity address is not in // the White List; and // 2. directed advertising packets where the initiator's identity address // does not address this device - SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH + // SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH } scan_filter_policy_t; /** @@ -318,6 +450,9 @@ uint8_t gap_set_ext_scan_para(const bd_addr_type_t own_addr_type, const scan_fil /** * @brief to set the extended scan response data for an advertising set * + * Note: Scan response data is cleared after `gap_set_ext_adv_para()` on the same + * advertising set handle. + * * @param adv_handle handle of advertising set handle * * @param length length of advertising data @@ -482,6 +617,9 @@ typedef enum adv_data_frag_pref /** * @brief to set extended advertising data * + * Note: Advertising data is cleared after `gap_set_ext_adv_para()` on the same + * advertising set handle. + * * @param adv_handle advertising set handle. * * @param length advertising data length @@ -497,6 +635,9 @@ uint8_t gap_set_ext_adv_data(const uint8_t adv_handle, uint16_t length, const ui /** * @brief LE Set Periodic Advertising Data command * + * Note: Advertising data is cleared after `gap_set_ext_adv_para()` and + * `gap_set_periodic_adv_para()` on the same advertising set handle. + * * @param adv_handle advertising set handle. * * @param length advertising data length (<= 1650 bytes) @@ -723,6 +864,7 @@ typedef struct { // Supervision timeout for the LE Link, unit is 10ms uint16_t supervision_timeout; // Informative parameter recommending the min/max length of connection event needed for this LE connection + // unit is 625us uint16_t min_ce_len; uint16_t max_ce_len; } conn_para_t; diff --git a/bundles/extension/inc/le_device_db.h b/bundles/extension/inc/le_device_db.h index b81d04f5a..68de61b61 100644 --- a/bundles/extension/inc/le_device_db.h +++ b/bundles/extension/inc/le_device_db.h @@ -16,14 +16,15 @@ typedef struct le_device_memory_db { // Identification uint8_t addr_type; - uint8_t key_size; - uint8_t authenticated; - uint8_t authorized; + uint8_t key_size; + uint8_t authenticated; + uint8_t authorized:1; + uint8_t sm_sc:1; bd_addr_t addr; sm_key_t irk; - // Stored pairing information allows to re-establish an enncrypted connection + // Stored pairing information allows to re-establish an encrypted connection // with a peripheral that doesn't have any persistent memory sm_key_t ltk; uint16_t ediv; @@ -36,7 +37,6 @@ typedef struct le_device_memory_db { // Signed Writes by us sm_key_t local_csrk; uint32_t local_counter; - } le_device_memory_db_t; #pragma pack (pop) diff --git a/bundles/extension/inc/ll_api.h b/bundles/extension/inc/ll_api.h index 1f2d03ac3..3dfc6d2ac 100644 --- a/bundles/extension/inc/ll_api.h +++ b/bundles/extension/inc/ll_api.h @@ -33,6 +33,25 @@ typedef enum ll_config_item_e LL_CFG_FEATURE_SET_MASK, } ll_config_item_t; +typedef struct ll_capabilities +{ + const uint8_t *features; // Link Layer features + uint16_t adv_set_num; // max number of advertising sets + uint16_t conn_num; // max number of connections + uint16_t whitelist_size; // size of whitelists + uint16_t resolving_list_size; // size of resolving list + uint16_t periodic_advertiser_list_size; // size of periodic advertiser list + uint16_t adv_dup_filter_size; // size of items for filtering + // advertising duplication +} ll_capabilities_t; + +/** + * @brief Get Link Layer capabilities. + * + * @param[out] capabilities see `ll_capabilities_t`. + */ +void ll_get_capabilities(ll_capabilities_t *capabilities); + /** **************************************************************************************** * @brief Config LL specific parameters @@ -43,6 +62,26 @@ typedef enum ll_config_item_e */ void ll_config(ll_config_item_t item, uint32_t value); +/** + **************************************************************************************** + * @brief Get states of LL + * + * Note: Parameters can be set to NULL if the relevant states are not needed. + * + * @param[out] adv_states[1] states of all advertising sets + * Bit[n]: advertising set n is enabled + * @param[out] conn_states[1] states of all connections + * Bit[n]: connection n is active + * @param[out] sync_states[1] states of all synchronized periodic adv sets + * Bit[n]: sync_handle n is active + * @param[out] other_states[1] other states: + * Bit[0]: if scanning is ON + * Bit[1]: if initiating is ON + **************************************************************************************** + */ +void ll_get_states(uint32_t *adv_states, uint32_t *conn_states, + uint32_t *sync_states, uint32_t *other_states); + /** **************************************************************************************** * @brief set Tx power range diff --git a/bundles/extension/inc/os/FreeRTOSConfig.h b/bundles/extension/inc/os/FreeRTOSConfig.h index a852cbdce..30c697203 100644 --- a/bundles/extension/inc/os/FreeRTOSConfig.h +++ b/bundles/extension/inc/os/FreeRTOSConfig.h @@ -91,17 +91,27 @@ #ifdef POWER_SAVING #define configUSE_TICKLESS_IDLE 1 #endif -#define configSYSTICK_CLOCK_HZ 32768 -#ifdef TARGET_FPGA -#define configCPU_CLOCK_HZ ( ( unsigned long ) 32000000 ) +#define configSYSTICK_CLOCK_HZ RTC_CLK_FREQ + +#if (INGCHIPS_FAMILY == INGCHIPS_FAMILY_918) +#define configCPU_CLOCK_HZ PLL_CLK_FREQ +#elif (INGCHIPS_FAMILY == INGCHIPS_FAMILY_916) +#define configCPU_CLOCK_HZ SYSCTRL_GetHClk() #else -#define configCPU_CLOCK_HZ ( ( unsigned long ) 48000000 ) +#error unknow chip family #endif + +#if (configSYSTICK_CLOCK_HZ == 32768) #define configTICK_RATE_HZ ( ( TickType_t ) 1024 ) +#elif (configSYSTICK_CLOCK_HZ == 50000) +#define configTICK_RATE_HZ ( ( TickType_t ) 1000 ) +#else +#error configSYSTICK_CLOCK_HZ +#endif #define configMAX_PRIORITIES ( 15 ) #define configMINIMAL_STACK_SIZE ( ( unsigned short ) 128 ) #ifndef configTOTAL_HEAP_SIZE -#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 23520 ) ) +#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 24896 ) ) #endif #define configMAX_TASK_NAME_LEN ( 16 ) #define configUSE_TRACE_FACILITY 0 diff --git a/bundles/extension/inc/platform_api.h b/bundles/extension/inc/platform_api.h index 78ed07d0b..a81fe121f 100644 --- a/bundles/extension/inc/platform_api.h +++ b/bundles/extension/inc/platform_api.h @@ -113,7 +113,7 @@ typedef enum PLATFORM_CB_EVT_LLE_INIT, // when allocation on heap fails (heap out of memory) - // NOTE: param (void *data) is cased from an integer identifying which heap is OOM: + // NOTE: param (void *data) is casted from an integer identifying which heap is OOM: // * 0: FreeRTOS's heap; // * 1: Link Layer's heap; // * 2: Link Layer's task pool. @@ -327,7 +327,7 @@ typedef struct /** **************************************************************************************** - * @brief Get heap status + * @brief Get status of built-in RTOS's heap * * @param[out] status heap status **************************************************************************************** @@ -374,7 +374,7 @@ void platform_switch_app(const uint32_t app_addr); * in power saving mode. * * For ING918: the least FOUR significant bits of `value` are saved; - * For ING916: the least TWO significant bits of `value` are saved. + * For ING916: the least FIVE significant bits of `value` are saved. * * @param[in] value value **************************************************************************************** @@ -464,8 +464,13 @@ typedef enum PLATFORM_CFG_PS_DBG_4, // Debugging parameters for ING916. Default (0) // Bit [0]: `platform_shutdown` uses DEEPER SLEEP (1) or SLEEP (0) PLATFORM_CFG_FAST_DEEP_SLEEP_TIME_REDUCTION, // sleep time reduction (fast deep sleep mode) in us. - // Requirement: < PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION + // Requirement: <= PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION + // When equal to PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION, fast deep sleep mode is not used // Only available for ING916 (default: ~2000us) + PLATFORM_CFG_AUTO_REDUCE_CLOCK_FREQ, // automatic reduce CPU clock frequency in these circumstances: + // * the default IDLE procedure + // * when entering sleep modes + // Only available for ING916 (default: Enabled) } platform_cfg_item_t; typedef enum @@ -604,7 +609,15 @@ uint64_t platform_get_us_time(void); */ void platform_printf(const char *format, ...); -// NOTE: for debug only +/** + **************************************************************************************** + * @brief Set public device address + * + * NOTE: This is for debug only. + * + * @param[in] addr device address in little-endian. + **************************************************************************************** + */ void sysSetPublicDeviceAddr(const unsigned char *addr); // set rf source @@ -783,6 +796,55 @@ void platform_set_abs_timer(f_platform_timer_callback callback, uint32_t abs_tim */ void platform_delete_timer(f_platform_timer_callback callback); +typedef void * platform_us_timer_handle_t; + +/** + **************************************************************************************** + * @brief Callback function of microsecond (us) resolution timer + * + * @param[in] timer_handle handle of this timer + * @param[in] time_us internal timer counter when invoke this callback + * @param[in] param user parameter + * @return (must be NULL) + **************************************************************************************** + */ +typedef void * (* f_platform_us_timer_callback)(platform_us_timer_handle_t timer_handle, + uint64_t time_us, void *param); + +/** + **************************************************************************************** + * @brief Setup a single-shot platform timer with microsecond (us) resolution + * + * Although `abs_time` is in microsecond (us), callback is **not guaranteed** + * to be invoked with such resolution. + * + * This type of timers are much like `platform_set_timer`, except that: + * 1. resolution is higher; + * 2. callback is invoked in the context of an ISR. + * + * @param[in] abs_time when `platform_get_us_timer() == abs_time`, callback is invoked. + * @param[in] callback the callback function + * @param[in] param user parameter + * @return a non-NULL value when succeeded. Otherwise, NULL. + **************************************************************************************** + */ +platform_us_timer_handle_t platform_create_us_timer(uint64_t abs_time, + f_platform_us_timer_callback callback, void *param); + +/** + **************************************************************************************** + * @brief Cancel a platform timer previously created by `platform_create_us_timer` + * + * When a timer not needed any more, use this API to cancel it. + * + * @param[in] timer_handle handle of the timer + * @return 0 if succeeded else non-0 + * Note: non-0 means the callback function of the timer + * is executing. + **************************************************************************************** + */ +int platform_cancel_us_timer(platform_us_timer_handle_t timer_handle); + /** **************************************************************************************** * @brief Install a new RTOS stack for a specific platform task diff --git a/bundles/extension/inc/sm.h b/bundles/extension/inc/sm.h index 6dfc62bab..7e57fb927 100644 --- a/bundles/extension/inc/sm.h +++ b/bundles/extension/inc/sm.h @@ -55,14 +55,21 @@ typedef enum { /** * @brief Security configurations * + * These configurations can updated dynamically. Be careful: dynamically toggle + * `enable` will cause problems when SM is still working on any connection. + * + * After IRK/DHK are derived from `persistent`, `SM_EVENT_IRK_DHK_RESULT` is emitted. + * * @param[in] enable Enable (Bypass) SM (default: Disabled) * When disabled, SM can be enabled per connection by `sm_config_conn`. * @param[in] io_capability Default IO Capabilities * @param[in] request_security Let peripheral request an encrypted connection right after connecting * Not used normally. Bonding is triggered by access to protected attributes in ATT Server * @param[in] persistent persistent data for security & privacy + * @return 0 if ok else non-0. Possible causes for non-0 return value: + * * generation of internal keys(IRK/ERK) are under going. */ -void sm_config(uint8_t enable, +int sm_config(uint8_t enable, io_capability_t io_capability, int request_security, const sm_persistent_t *persistent); @@ -101,18 +108,71 @@ void sm_private_random_address_generation_set_update_period(int period_ms); const uint8_t *sm_private_random_address_generation_get(void); /** + * @brief Registers OOB Data Callback. + * + * The callback should set the oob_data and return 1 if OOB data is available. + * + * Signature of `get_oob_data_callback`: + * @param[in] address_type address type + * @param[in] addr address + * @param[out] oob_data OOB data (type `sm_key_t`) + * @return 1 if OOB data is available, else 0. * - * @brief Registers OOB Data Callback. The callback should set the oob_data and return 1 if OOB data is availble * @param get_oob_data_callback */ -void sm_register_oob_data_callback( int (*get_oob_data_callback)(uint8_t addres_type, bd_addr_t addr, uint8_t * oob_data)); +void sm_register_oob_data_callback( int (*get_oob_data_callback)(uint8_t address_type, bd_addr_t addr, uint8_t * oob_data)); /** + * @brief Registers secure pairing OOB Data Callback. * - * @brief Registers secure pairing OOB Data Callback. The callback should set the peer_confirm & peer_random and return 1 if OOB data is availble - * @param get_oob_data_callback + * The callback should set the peer_confirm & peer_random and return 1 + * if OOB data is available. + * + * Signature of `get_sc_oob_data_callback`: + * @param[in] address_type address type + * @param[in] addr address + * @param[out] peer_confirm peer confirm value (type `sm_key_t`) + * @param[out] peer_random peer random value (type `sm_key_t`) + * @return 1 if OOB data is available, else 0. + * + * @param get_sc_oob_data_callback */ -// void sm_register_sc_oob_data_callback( int (*get_sc_oob_data_callback)(uint8_t addres_type, bd_addr_t addr, uint8_t *peer_confirm, uint8_t *peer_random)); +// void sm_register_sc_oob_data_callback(int (*get_sc_oob_data_callback)(uint8_t address_type, bd_addr_t addr, uint8_t *peer_confirm, uint8_t *peer_random)); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief (When secure pairing is used and OOB is selected) Start generate local + * OOB data (_confirm_ and _random_). + * + * After generated, _confirm_ and _random_ are passed to the callback. + * + * Each call of this function will generate a new P256 key pair that will used + * in **all** subsequent pairing attempts. When OOB is used, it is Developers's + * responsibility to refresh key pair properly. If OOB is not used, SM will + * re-generate a new key pair for each pairing attempt. + * + * BLUETOOTH CORE SPECIFICATION Version 5.4 | Vol 3, Part H, Section 2.3.6: + * + * > To protect a device's private key, a device should implement a method to + * > prevent an attacker from retrieving useful information about the device's private + * > key. For this purpose, a device should change its private key after every pairing + * > (successful or failed). Otherwise, it should change its private key whenever S + + * > 3F > 8, where S is the number of successful pairings and F the number of + * > failed attempts since the key was last changed. + * + * App can then pass these information together with device address to peer + * through OOB communication. + * + * Signature of `callback`: + * @param[out] confirm local confirm value (type `sm_key_t`) + * @param[out] random local random value (type `sm_key_t`) + * + * @param callback + * @return 0: started without error + * -1: previous OOB data is not generated yet + */ +// int sm_sc_generate_oob_data(void (*callback)(const uint8_t *confirm, const uint8_t *random)); // WARNING: ^^^ this API is not available in this release @@ -235,14 +295,6 @@ int sm_le_device_key(hci_con_handle_t con_handle); // WARNING: ^^^ this API is not available in this release -/** - * @brief When secure pairing is used and OOB is selected, use this function to prepare OOB data and share to peer. - * @param handle - */ -// int sm_sc_generate_oob_data(void (*callback)(uint8_t *peer_confirm, uint8_t *peer_random)); -// WARNING: ^^^ this API is not available in this release - - /** * * @brief Register a callback for get external LTK (for empty EDIV & Random) diff --git a/bundles/mass_conn/ING9168xx/apis.json b/bundles/mass_conn/ING9168xx/apis.json index 2ade268c4..de71c4228 100644 --- a/bundles/mass_conn/ING9168xx/apis.json +++ b/bundles/mass_conn/ING9168xx/apis.json @@ -1,347 +1,354 @@ { - "att_dispatch_client_can_send_now": "0x020044b5", - "att_dispatch_client_request_can_send_now_event": "0x020044bb", - "att_dispatch_register_client": "0x020044c1", - "att_dispatch_register_server": "0x020044d5", - "att_dispatch_server_can_send_now": "0x020044e9", - "att_dispatch_server_request_can_send_now_event": "0x020044ef", - "att_emit_general_event": "0x020045a1", - "att_server_can_send_packet_now": "0x02004cd9", - "att_server_deferred_read_response": "0x02004cdd", - "att_server_get_mtu": "0x02004cf5", - "att_server_indicate": "0x02004d6d", - "att_server_init": "0x02004df1", - "att_server_notify": "0x02004e2d", - "att_server_register_packet_handler": "0x02004f45", - "att_server_request_can_send_now_event": "0x02004f51", - "att_set_db": "0x02004f6d", - "att_set_read_callback": "0x02004f81", - "att_set_write_callback": "0x02004f8d", - "bd_addr_cmp": "0x0200515d", - "bd_addr_copy": "0x02005163", - "bd_addr_to_str": "0x0200516d", - "big_endian_read_16": "0x020051a5", - "big_endian_read_32": "0x020051ad", - "big_endian_store_16": "0x020051c1", - "big_endian_store_32": "0x020051cd", - "btstack_config": "0x0200532d", - "btstack_memory_pool_create": "0x0200546b", - "btstack_memory_pool_free": "0x02005495", - "btstack_memory_pool_get": "0x020054f5", - "btstack_push_user_msg": "0x0200555d", - "btstack_push_user_runnable": "0x02005569", - "btstack_reset": "0x02005575", - "char_for_nibble": "0x02005867", - "eTaskConfirmSleepModeStatus": "0x02005c19", - "gap_add_dev_to_periodic_list": "0x02006289", - "gap_add_whitelist": "0x02006299", - "gap_aes_encrypt": "0x020062a5", - "gap_clear_white_lists": "0x020062dd", - "gap_clr_adv_set": "0x020062e9", - "gap_clr_periodic_adv_list": "0x020062f5", - "gap_create_connection_cancel": "0x02006301", - "gap_default_periodic_adv_sync_transfer_param": "0x0200630d", - "gap_disconnect": "0x02006325", - "gap_disconnect_all": "0x02006351", - "gap_ext_create_connection": "0x02006391", - "gap_get_connection_parameter_range": "0x02006469", - "gap_le_read_channel_map": "0x020064a5", - "gap_periodic_adv_create_sync": "0x02006511", - "gap_periodic_adv_create_sync_cancel": "0x02006535", - "gap_periodic_adv_set_info_transfer": "0x02006541", - "gap_periodic_adv_sync_transfer": "0x02006551", - "gap_periodic_adv_sync_transfer_param": "0x02006561", - "gap_periodic_adv_term_sync": "0x0200657d", - "gap_read_antenna_info": "0x02006605", - "gap_read_periodic_adv_list_size": "0x02006611", - "gap_read_phy": "0x0200661d", - "gap_read_remote_used_features": "0x02006629", - "gap_read_remote_version": "0x02006635", - "gap_read_rssi": "0x02006641", - "gap_remove_whitelist": "0x0200664d", - "gap_rmv_adv_set": "0x020066c9", - "gap_rmv_dev_from_periodic_list": "0x020066d5", - "gap_rx_test_v2": "0x020066e5", - "gap_rx_test_v3": "0x020066f5", - "gap_set_adv_set_random_addr": "0x02006741", - "gap_set_callback_for_next_hci": "0x0200677d", - "gap_set_connection_cte_request_enable": "0x0200679d", - "gap_set_connection_cte_response_enable": "0x020067b9", - "gap_set_connection_cte_rx_param": "0x020067c9", - "gap_set_connection_cte_tx_param": "0x0200681d", - "gap_set_connection_parameter_range": "0x02006869", - "gap_set_connectionless_cte_tx_enable": "0x02006881", - "gap_set_connectionless_cte_tx_param": "0x02006891", - "gap_set_connectionless_iq_sampling_enable": "0x020068ed", - "gap_set_data_length": "0x02006949", - "gap_set_def_phy": "0x02006961", - "gap_set_ext_adv_data": "0x02006971", - "gap_set_ext_adv_enable": "0x02006989", - "gap_set_ext_adv_para": "0x020069f9", - "gap_set_ext_scan_enable": "0x02006ac9", - "gap_set_ext_scan_para": "0x02006ae1", - "gap_set_ext_scan_response_data": "0x02006b81", - "gap_set_host_channel_classification": "0x02006b99", - "gap_set_periodic_adv_data": "0x02006ba9", - "gap_set_periodic_adv_enable": "0x02006c19", - "gap_set_periodic_adv_para": "0x02006c29", - "gap_set_periodic_adv_rx_enable": "0x02006c41", - "gap_set_phy": "0x02006c51", - "gap_set_random_device_address": "0x02006c6d", - "gap_start_ccm": "0x02006c9d", - "gap_test_end": "0x02006ce5", - "gap_tx_test_v2": "0x02006cf1", - "gap_tx_test_v4": "0x02006d09", - "gap_update_connection_parameters": "0x02006d2d", - "gap_vendor_tx_continuous_wave": "0x02006d71", - "gatt_client_cancel_write": "0x02007299", - "gatt_client_discover_characteristic_descriptors": "0x020072bf", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x020072ff", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x0200734f", - "gatt_client_discover_characteristics_for_service": "0x0200739f", - "gatt_client_discover_primary_services": "0x020073d5", - "gatt_client_discover_primary_services_by_uuid128": "0x02007407", - "gatt_client_discover_primary_services_by_uuid16": "0x0200744b", - "gatt_client_execute_write": "0x02007489", - "gatt_client_find_included_services_for_service": "0x020074af", - "gatt_client_get_mtu": "0x020074dd", - "gatt_client_is_ready": "0x020075a1", - "gatt_client_listen_for_characteristic_value_updates": "0x020075b7", - "gatt_client_prepare_write": "0x020075d9", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x02007615", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x0200763f", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02007645", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x02007673", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x02007679", - "gatt_client_read_multiple_characteristic_values": "0x020076a7", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x020076d7", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x02007705", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x02007751", - "gatt_client_register_handler": "0x0200779d", - "gatt_client_reliable_write_long_value_of_characteristic": "0x020077a9", - "gatt_client_signed_write_without_response": "0x02007bdd", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x02007ca1", - "gatt_client_write_client_characteristic_configuration": "0x02007cdb", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x02007d2d", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02007d3d", - "gatt_client_write_long_value_of_characteristic": "0x02007d79", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x02007d89", - "gatt_client_write_value_of_characteristic": "0x02007dc5", - "gatt_client_write_value_of_characteristic_without_response": "0x02007dfb", - "hci_add_event_handler": "0x020093f1", - "hci_power_control": "0x02009b99", - "hci_register_acl_packet_handler": "0x02009d4d", - "kv_commit": "0x0200a481", - "kv_get": "0x0200a4dd", - "kv_init": "0x0200a4e9", - "kv_init_backend": "0x0200a569", - "kv_put": "0x0200a57d", - "kv_remove": "0x0200a589", - "kv_remove_all": "0x0200a5bd", - "kv_value_modified": "0x0200a5ed", - "kv_value_modified_of_key": "0x0200a609", - "kv_visit": "0x0200a615", - "l2cap_add_event_handler": "0x0200a6a5", - "l2cap_can_send_packet_now": "0x0200a6b5", - "l2cap_create_le_credit_based_connection_request": "0x0200a879", - "l2cap_credit_based_send": "0x0200a9c1", - "l2cap_credit_based_send_continue": "0x0200a9ed", - "l2cap_disconnect": "0x0200aa69", - "l2cap_get_le_credit_based_connection_credits": "0x0200ac55", - "l2cap_get_peer_mtu_for_local_cid": "0x0200ac71", - "l2cap_init": "0x0200b0b1", - "l2cap_le_send_flow_control_credit": "0x0200b1a7", - "l2cap_max_le_mtu": "0x0200b4b5", - "l2cap_register_packet_handler": "0x0200b5dd", - "l2cap_register_service": "0x0200b5e9", - "l2cap_request_can_send_now_event": "0x0200b6f9", - "l2cap_request_connection_parameter_update": "0x0200b713", - "l2cap_send_echo_request": "0x0200bbf5", - "l2cap_unregister_service": "0x0200bcd5", - "le_device_db_add": "0x0200bd2d", - "le_device_db_find": "0x0200be05", - "le_device_db_from_key": "0x0200be31", - "le_device_db_iter_cur": "0x0200be39", - "le_device_db_iter_cur_key": "0x0200be3d", - "le_device_db_iter_init": "0x0200be41", - "le_device_db_iter_next": "0x0200be49", - "le_device_db_remove_key": "0x0200be6f", - "ll_adjust_conn_peer_tx_power": "0x0200be9d", - "ll_aes_encrypt": "0x0200bec9", - "ll_config": "0x0200bf3d", - "ll_free": "0x0200bf73", - "ll_get_heap_free_size": "0x0200bf7d", - "ll_hint_on_ce_len": "0x0200bf91", - "ll_legacy_adv_set_interval": "0x0200bfc9", - "ll_malloc": "0x0200bfd9", - "ll_register_hci_acl_previewer": "0x0200c0f1", - "ll_scan_set_fixed_channel": "0x0200c155", - "ll_set_adv_access_address": "0x0200c36d", - "ll_set_adv_coded_scheme": "0x0200c379", - "ll_set_conn_acl_report_latency": "0x0200c3b1", - "ll_set_conn_coded_scheme": "0x0200c3e1", - "ll_set_conn_latency": "0x0200c40d", - "ll_set_conn_tx_power": "0x0200c43d", - "ll_set_def_antenna": "0x0200c479", - "ll_set_initiating_coded_scheme": "0x0200c499", - "ll_set_max_conn_number": "0x0200c4a5", - "ll_set_tx_power_range": "0x0200c539", - "nibble_for_char": "0x0201efc9", - "platform_calibrate_rt_clk": "0x0201f073", - "platform_call_on_stack": "0x020021fb", - "platform_config": "0x0201f079", - "platform_delete_timer": "0x0201f1a1", - "platform_enable_irq": "0x0201f1a9", - "platform_get_current_task": "0x0201f1dd", - "platform_get_gen_os_driver": "0x0201f201", - "platform_get_heap_status": "0x0201f209", - "platform_get_link_layer_interf": "0x0201f221", - "platform_get_task_handle": "0x0201f229", - "platform_get_timer_counter": "0x0201f249", - "platform_get_us_time": "0x0201f24d", - "platform_get_version": "0x0201f251", - "platform_hrng": "0x0201f259", - "platform_install_isr_stack": "0x0201f261", - "platform_install_task_stack": "0x0201f26d", - "platform_patch_rf_init_data": "0x0201f2a5", - "platform_printf": "0x0201f2b1", - "platform_raise_assertion": "0x0201f2c5", - "platform_rand": "0x0201f2d9", - "platform_read_info": "0x0201f2dd", - "platform_read_persistent_reg": "0x0201f30d", - "platform_reset": "0x0201f319", - "platform_rt_rc_auto_tune": "0x0201f32d", - "platform_rt_rc_auto_tune2": "0x0201f335", - "platform_rt_rc_tune": "0x0201f39d", - "platform_set_abs_timer": "0x0201f3b9", - "platform_set_evt_callback": "0x0201f3bd", - "platform_set_evt_callback_table": "0x0201f3d1", - "platform_set_irq_callback": "0x0201f3dd", - "platform_set_irq_callback_table": "0x0201f3f9", - "platform_set_rf_clk_source": "0x0201f405", - "platform_set_rf_init_data": "0x0201f411", - "platform_set_rf_power_mapping": "0x0201f41d", - "platform_set_timer": "0x0201f429", - "platform_shutdown": "0x0201f42d", - "platform_switch_app": "0x0201f431", - "platform_trace_raw": "0x0201f449", - "platform_write_persistent_reg": "0x0201f461", - "printf_hexdump": "0x0201f619", - "pvPortMalloc": "0x020200f1", - "pvTaskIncrementMutexHeldCount": "0x020201d9", - "pvTimerGetTimerID": "0x020201f1", - "pxPortInitialiseStack": "0x0202021d", - "reverse_128": "0x02020405", - "reverse_24": "0x0202040b", - "reverse_256": "0x02020411", - "reverse_48": "0x02020417", - "reverse_56": "0x0202041d", - "reverse_64": "0x02020423", - "reverse_bd_addr": "0x02020429", - "reverse_bytes": "0x0202042f", - "sm_add_event_handler": "0x0202078d", - "sm_address_resolution_lookup": "0x020208e5", - "sm_authenticated": "0x02020c61", - "sm_authorization_decline": "0x02020c6f", - "sm_authorization_grant": "0x02020c8f", - "sm_authorization_state": "0x02020caf", - "sm_bonding_decline": "0x02020cc9", - "sm_config": "0x0202111d", - "sm_config_conn": "0x02021135", - "sm_encryption_key_size": "0x020212eb", - "sm_just_works_confirm": "0x02021871", - "sm_le_device_key": "0x02021ba9", - "sm_passkey_input": "0x02021c3f", - "sm_private_random_address_generation_get": "0x02021ff9", - "sm_private_random_address_generation_get_mode": "0x02022001", - "sm_private_random_address_generation_set_mode": "0x0202200d", - "sm_private_random_address_generation_set_update_period": "0x02022035", - "sm_register_external_ltk_callback": "0x02022171", - "sm_register_oob_data_callback": "0x0202217d", - "sm_request_pairing": "0x02022189", - "sm_send_security_request": "0x02022c5f", - "sm_set_accepted_stk_generation_methods": "0x02022c85", - "sm_set_authentication_requirements": "0x02022c91", - "sm_set_encryption_key_size_range": "0x02022c9d", - "sscanf_bd_addr": "0x02022ffd", - "sysSetPublicDeviceAddr": "0x02023529", - "uuid128_to_str": "0x02023d85", - "uuid_add_bluetooth_prefix": "0x02023ddd", - "uuid_has_bluetooth_prefix": "0x02023dfd", - "uxListRemove": "0x02023e19", - "uxQueueMessagesWaiting": "0x02023e41", - "uxQueueMessagesWaitingFromISR": "0x02023e69", - "uxQueueSpacesAvailable": "0x02023e85", - "uxTaskGetStackHighWaterMark": "0x02023eb1", - "uxTaskPriorityGet": "0x02023ed1", - "uxTaskPriorityGetFromISR": "0x02023eed", - "vListInitialise": "0x02023fab", - "vListInitialiseItem": "0x02023fc1", - "vListInsert": "0x02023fc7", - "vListInsertEnd": "0x02023ff7", - "vPortEndScheduler": "0x02024011", - "vPortEnterCritical": "0x0202403d", - "vPortExitCritical": "0x02024081", - "vPortFree": "0x020240b5", - "vPortSuppressTicksAndSleep": "0x02024159", - "vPortValidateInterruptPriority": "0x02024281", - "vQueueDelete": "0x020242dd", - "vQueueWaitForMessageRestricted": "0x02024309", - "vTaskDelay": "0x0202434d", - "vTaskInternalSetTimeOutState": "0x02024399", - "vTaskMissedYield": "0x020243a9", - "vTaskPlaceOnEventList": "0x020243b5", - "vTaskPlaceOnEventListRestricted": "0x020243ed", - "vTaskPriorityDisinheritAfterTimeout": "0x0202442d", - "vTaskPrioritySet": "0x020244d9", - "vTaskResume": "0x020245a1", - "vTaskStartScheduler": "0x02024625", - "vTaskStepTick": "0x020246b5", - "vTaskSuspend": "0x020246e5", - "vTaskSuspendAll": "0x020247a1", - "vTaskSwitchContext": "0x020247b1", - "xPortStartScheduler": "0x02024861", - "xQueueAddToSet": "0x02024965", - "xQueueCreateCountingSemaphore": "0x02024989", - "xQueueCreateCountingSemaphoreStatic": "0x020249c5", - "xQueueCreateMutex": "0x02024a09", - "xQueueCreateMutexStatic": "0x02024a1f", - "xQueueCreateSet": "0x02024a39", - "xQueueGenericCreate": "0x02024a41", - "xQueueGenericCreateStatic": "0x02024a8d", - "xQueueGenericReset": "0x02024af5", - "xQueueGenericSend": "0x02024b81", - "xQueueGenericSendFromISR": "0x02024ced", - "xQueueGiveFromISR": "0x02024dad", - "xQueueGiveMutexRecursive": "0x02024e51", - "xQueueIsQueueEmptyFromISR": "0x02024e91", - "xQueueIsQueueFullFromISR": "0x02024eb5", - "xQueuePeek": "0x02024edd", - "xQueuePeekFromISR": "0x02025005", - "xQueueReceive": "0x02025071", - "xQueueReceiveFromISR": "0x0202519d", - "xQueueRemoveFromSet": "0x02025231", - "xQueueSelectFromSet": "0x02025253", - "xQueueSelectFromSetFromISR": "0x02025265", - "xQueueSemaphoreTake": "0x02025279", - "xQueueTakeMutexRecursive": "0x020253e5", - "xTaskCheckForTimeOut": "0x02025429", - "xTaskCreate": "0x02025499", - "xTaskCreateStatic": "0x020254f5", - "xTaskGetCurrentTaskHandle": "0x02025565", - "xTaskGetSchedulerState": "0x02025571", - "xTaskGetTickCount": "0x0202558d", - "xTaskGetTickCountFromISR": "0x02025599", - "xTaskIncrementTick": "0x020255a9", - "xTaskPriorityDisinherit": "0x02025675", - "xTaskPriorityInherit": "0x02025709", - "xTaskRemoveFromEventList": "0x0202579d", - "xTaskResumeAll": "0x0202581d", - "xTaskResumeFromISR": "0x020258e5", - "xTimerCreate": "0x02025971", - "xTimerCreateStatic": "0x020259a5", - "xTimerCreateTimerTask": "0x020259dd", - "xTimerGenericCommand": "0x02025a49", - "xTimerGetExpiryTime": "0x02025ab9", - "xTimerGetTimerDaemonTaskHandle": "0x02025ad9" + "att_dispatch_client_can_send_now": "0x020053cd", + "att_dispatch_client_request_can_send_now_event": "0x020053d3", + "att_dispatch_register_client": "0x020053d9", + "att_dispatch_register_server": "0x020053ed", + "att_dispatch_server_can_send_now": "0x02005401", + "att_dispatch_server_request_can_send_now_event": "0x02005407", + "att_emit_general_event": "0x020054b9", + "att_server_can_send_packet_now": "0x02005bf5", + "att_server_deferred_read_response": "0x02005bf9", + "att_server_get_mtu": "0x02005c11", + "att_server_indicate": "0x02005c89", + "att_server_init": "0x02005d0d", + "att_server_notify": "0x02005d49", + "att_server_register_packet_handler": "0x02005e61", + "att_server_request_can_send_now_event": "0x02005e6d", + "att_set_db": "0x02005e89", + "att_set_read_callback": "0x02005e9d", + "att_set_write_callback": "0x02005ea9", + "bd_addr_cmp": "0x02006079", + "bd_addr_copy": "0x0200607f", + "bd_addr_to_str": "0x02006089", + "big_endian_read_16": "0x020060c1", + "big_endian_read_32": "0x020060c9", + "big_endian_store_16": "0x020060dd", + "big_endian_store_32": "0x020060e9", + "btstack_config": "0x02006249", + "btstack_get_capabilities": "0x02006255", + "btstack_memory_pool_create": "0x0200639d", + "btstack_memory_pool_free": "0x020063c5", + "btstack_memory_pool_get": "0x02006425", + "btstack_push_user_msg": "0x0200648d", + "btstack_push_user_runnable": "0x02006499", + "btstack_reset": "0x020064a5", + "char_for_nibble": "0x02006797", + "eTaskConfirmSleepModeStatus": "0x02006b49", + "gap_add_dev_to_periodic_list": "0x020071a5", + "gap_add_whitelist": "0x020071b5", + "gap_aes_encrypt": "0x020071c1", + "gap_clear_white_lists": "0x020071f9", + "gap_clr_adv_set": "0x02007205", + "gap_clr_periodic_adv_list": "0x02007211", + "gap_create_connection_cancel": "0x0200721d", + "gap_default_periodic_adv_sync_transfer_param": "0x02007229", + "gap_disconnect": "0x02007241", + "gap_disconnect2": "0x02007249", + "gap_disconnect_all": "0x02007275", + "gap_ext_create_connection": "0x020072b5", + "gap_get_connection_parameter_range": "0x0200738d", + "gap_le_read_channel_map": "0x020073c5", + "gap_periodic_adv_create_sync": "0x02007425", + "gap_periodic_adv_create_sync_cancel": "0x02007449", + "gap_periodic_adv_set_info_transfer": "0x02007455", + "gap_periodic_adv_sync_transfer": "0x02007465", + "gap_periodic_adv_sync_transfer_param": "0x02007475", + "gap_periodic_adv_term_sync": "0x02007491", + "gap_read_antenna_info": "0x02007519", + "gap_read_periodic_adv_list_size": "0x02007525", + "gap_read_phy": "0x02007531", + "gap_read_remote_used_features": "0x0200753d", + "gap_read_remote_version": "0x02007549", + "gap_read_rssi": "0x02007555", + "gap_read_white_lists_size": "0x02007561", + "gap_remove_whitelist": "0x0200756d", + "gap_rmv_adv_set": "0x020075e9", + "gap_rmv_dev_from_periodic_list": "0x020075f5", + "gap_rx_test_v2": "0x02007605", + "gap_rx_test_v3": "0x02007615", + "gap_set_adv_set_random_addr": "0x02007661", + "gap_set_callback_for_next_hci": "0x02007685", + "gap_set_connection_cte_request_enable": "0x020076a5", + "gap_set_connection_cte_response_enable": "0x020076c1", + "gap_set_connection_cte_rx_param": "0x020076d1", + "gap_set_connection_cte_tx_param": "0x02007725", + "gap_set_connection_parameter_range": "0x02007771", + "gap_set_connectionless_cte_tx_enable": "0x02007789", + "gap_set_connectionless_cte_tx_param": "0x02007799", + "gap_set_connectionless_iq_sampling_enable": "0x020077f5", + "gap_set_data_length": "0x02007851", + "gap_set_def_phy": "0x02007869", + "gap_set_ext_adv_data": "0x02007879", + "gap_set_ext_adv_enable": "0x02007891", + "gap_set_ext_adv_para": "0x02007901", + "gap_set_ext_scan_enable": "0x020079c1", + "gap_set_ext_scan_para": "0x020079d9", + "gap_set_ext_scan_response_data": "0x02007a79", + "gap_set_host_channel_classification": "0x02007a91", + "gap_set_periodic_adv_data": "0x02007aa1", + "gap_set_periodic_adv_enable": "0x02007b11", + "gap_set_periodic_adv_para": "0x02007b21", + "gap_set_periodic_adv_rx_enable": "0x02007b39", + "gap_set_phy": "0x02007b49", + "gap_set_random_device_address": "0x02007b65", + "gap_start_ccm": "0x02007b81", + "gap_test_end": "0x02007bc9", + "gap_tx_test_v2": "0x02007bd5", + "gap_tx_test_v4": "0x02007bed", + "gap_update_connection_parameters": "0x02007c11", + "gap_vendor_tx_continuous_wave": "0x02007c55", + "gatt_client_cancel_write": "0x0200817d", + "gatt_client_discover_characteristic_descriptors": "0x020081a3", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x020081e3", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x02008233", + "gatt_client_discover_characteristics_for_service": "0x02008283", + "gatt_client_discover_primary_services": "0x020082b9", + "gatt_client_discover_primary_services_by_uuid128": "0x020082eb", + "gatt_client_discover_primary_services_by_uuid16": "0x0200832f", + "gatt_client_execute_write": "0x0200836d", + "gatt_client_find_included_services_for_service": "0x02008393", + "gatt_client_get_mtu": "0x020083c1", + "gatt_client_is_ready": "0x0200848d", + "gatt_client_listen_for_characteristic_value_updates": "0x020084a3", + "gatt_client_prepare_write": "0x020084c5", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x02008501", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x0200852b", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02008531", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x0200855f", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x02008565", + "gatt_client_read_multiple_characteristic_values": "0x02008593", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x020085c3", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x020085f1", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x0200863d", + "gatt_client_register_handler": "0x02008689", + "gatt_client_reliable_write_long_value_of_characteristic": "0x02008695", + "gatt_client_signed_write_without_response": "0x02008ac9", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x02008b8d", + "gatt_client_write_client_characteristic_configuration": "0x02008bc7", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x02008c19", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02008c29", + "gatt_client_write_long_value_of_characteristic": "0x02008c65", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x02008c75", + "gatt_client_write_value_of_characteristic": "0x02008cb1", + "gatt_client_write_value_of_characteristic_without_response": "0x02008ce7", + "hci_add_event_handler": "0x0200a2d5", + "hci_power_control": "0x0200aa79", + "hci_register_acl_packet_handler": "0x0200ac2d", + "kv_commit": "0x0200b351", + "kv_get": "0x0200b3ad", + "kv_init": "0x0200b3b9", + "kv_init_backend": "0x0200b439", + "kv_put": "0x0200b44d", + "kv_remove": "0x0200b459", + "kv_remove_all": "0x0200b48d", + "kv_value_modified": "0x0200b4bd", + "kv_value_modified_of_key": "0x0200b4d9", + "kv_visit": "0x0200b4e5", + "l2cap_add_event_handler": "0x0200b575", + "l2cap_can_send_packet_now": "0x0200b585", + "l2cap_create_le_credit_based_connection_request": "0x0200b749", + "l2cap_credit_based_send": "0x0200b891", + "l2cap_credit_based_send_continue": "0x0200b8bd", + "l2cap_disconnect": "0x0200b939", + "l2cap_get_le_credit_based_connection_credits": "0x0200bb25", + "l2cap_get_peer_mtu_for_local_cid": "0x0200bb41", + "l2cap_init": "0x0200bf81", + "l2cap_le_send_flow_control_credit": "0x0200c077", + "l2cap_max_le_mtu": "0x0200c385", + "l2cap_register_packet_handler": "0x0200c4ad", + "l2cap_register_service": "0x0200c4b9", + "l2cap_request_can_send_now_event": "0x0200c5c9", + "l2cap_request_connection_parameter_update": "0x0200c5e3", + "l2cap_send_echo_request": "0x0200cac5", + "l2cap_unregister_service": "0x0200cba5", + "le_device_db_add": "0x0200cbfd", + "le_device_db_find": "0x0200ccd5", + "le_device_db_from_key": "0x0200cd01", + "le_device_db_iter_cur": "0x0200cd09", + "le_device_db_iter_cur_key": "0x0200cd0d", + "le_device_db_iter_init": "0x0200cd11", + "le_device_db_iter_next": "0x0200cd19", + "le_device_db_remove_key": "0x0200cd3f", + "ll_adjust_conn_peer_tx_power": "0x0200cd6d", + "ll_aes_encrypt": "0x0200cd99", + "ll_config": "0x0200ce0d", + "ll_free": "0x0200ce43", + "ll_get_capabilities": "0x0200ce4d", + "ll_get_heap_free_size": "0x0200ce69", + "ll_get_states": "0x0200ce79", + "ll_hint_on_ce_len": "0x0200cf35", + "ll_legacy_adv_set_interval": "0x0200cf6d", + "ll_malloc": "0x0200cf7d", + "ll_register_hci_acl_previewer": "0x0200d095", + "ll_scan_set_fixed_channel": "0x0200d0f9", + "ll_set_adv_access_address": "0x0200d311", + "ll_set_adv_coded_scheme": "0x0200d31d", + "ll_set_conn_acl_report_latency": "0x0200d355", + "ll_set_conn_coded_scheme": "0x0200d385", + "ll_set_conn_latency": "0x0200d3b1", + "ll_set_conn_tx_power": "0x0200d3e1", + "ll_set_def_antenna": "0x0200d41d", + "ll_set_initiating_coded_scheme": "0x0200d43d", + "ll_set_max_conn_number": "0x0200d449", + "ll_set_tx_power_range": "0x0200d4dd", + "nibble_for_char": "0x0201ffa9", + "platform_calibrate_rt_clk": "0x02020053", + "platform_call_on_stack": "0x020030fb", + "platform_cancel_us_timer": "0x02020057", + "platform_config": "0x0202006d", + "platform_create_us_timer": "0x020201a1", + "platform_delete_timer": "0x020201b5", + "platform_enable_irq": "0x020201bd", + "platform_get_current_task": "0x020201f1", + "platform_get_gen_os_driver": "0x02020215", + "platform_get_heap_status": "0x0202021d", + "platform_get_link_layer_interf": "0x02020235", + "platform_get_task_handle": "0x0202023d", + "platform_get_timer_counter": "0x0202025d", + "platform_get_us_time": "0x02020261", + "platform_get_version": "0x02020265", + "platform_hrng": "0x02020281", + "platform_install_isr_stack": "0x02020289", + "platform_install_task_stack": "0x02020295", + "platform_patch_rf_init_data": "0x020202cd", + "platform_printf": "0x020202d9", + "platform_raise_assertion": "0x020202ed", + "platform_rand": "0x02020301", + "platform_read_info": "0x02020305", + "platform_read_persistent_reg": "0x02020335", + "platform_reset": "0x02020355", + "platform_rt_rc_auto_tune": "0x02020369", + "platform_rt_rc_auto_tune2": "0x02020371", + "platform_rt_rc_tune": "0x020203d1", + "platform_set_abs_timer": "0x020203fd", + "platform_set_evt_callback": "0x02020401", + "platform_set_evt_callback_table": "0x02020415", + "platform_set_irq_callback": "0x02020421", + "platform_set_irq_callback_table": "0x0202043d", + "platform_set_rf_clk_source": "0x02020449", + "platform_set_rf_init_data": "0x02020455", + "platform_set_rf_power_mapping": "0x02020461", + "platform_set_timer": "0x0202046d", + "platform_shutdown": "0x02020471", + "platform_switch_app": "0x02020475", + "platform_trace_raw": "0x0202048d", + "platform_write_persistent_reg": "0x020204a5", + "printf_hexdump": "0x0202067d", + "pvPortMalloc": "0x02021155", + "pvTaskIncrementMutexHeldCount": "0x0202123d", + "pvTimerGetTimerID": "0x02021255", + "pxPortInitialiseStack": "0x02021281", + "reverse_128": "0x02021469", + "reverse_24": "0x0202146f", + "reverse_256": "0x02021475", + "reverse_48": "0x0202147b", + "reverse_56": "0x02021481", + "reverse_64": "0x02021487", + "reverse_bd_addr": "0x0202148d", + "reverse_bytes": "0x02021493", + "sm_add_event_handler": "0x020217f1", + "sm_address_resolution_lookup": "0x02021949", + "sm_authenticated": "0x02021cf1", + "sm_authorization_decline": "0x02021cff", + "sm_authorization_grant": "0x02021d1f", + "sm_authorization_state": "0x02021d3f", + "sm_bonding_decline": "0x02021d59", + "sm_config": "0x020221ad", + "sm_config_conn": "0x020221e1", + "sm_encryption_key_size": "0x0202239b", + "sm_just_works_confirm": "0x02022921", + "sm_le_device_key": "0x02022c61", + "sm_passkey_input": "0x02022cf7", + "sm_private_random_address_generation_get": "0x020230b9", + "sm_private_random_address_generation_get_mode": "0x020230c1", + "sm_private_random_address_generation_set_mode": "0x020230cd", + "sm_private_random_address_generation_set_update_period": "0x020230f5", + "sm_register_external_ltk_callback": "0x02023231", + "sm_register_oob_data_callback": "0x0202323d", + "sm_request_pairing": "0x02023249", + "sm_send_security_request": "0x02023d27", + "sm_set_accepted_stk_generation_methods": "0x02023d4d", + "sm_set_authentication_requirements": "0x02023d59", + "sm_set_encryption_key_size_range": "0x02023d69", + "sscanf_bd_addr": "0x020240b9", + "sysSetPublicDeviceAddr": "0x02024615", + "uuid128_to_str": "0x02024e85", + "uuid_add_bluetooth_prefix": "0x02024edd", + "uuid_has_bluetooth_prefix": "0x02024efd", + "uxListRemove": "0x02024f19", + "uxQueueMessagesWaiting": "0x02024f41", + "uxQueueMessagesWaitingFromISR": "0x02024f69", + "uxQueueSpacesAvailable": "0x02024f85", + "uxTaskGetStackHighWaterMark": "0x02024fb1", + "uxTaskPriorityGet": "0x02024fd1", + "uxTaskPriorityGetFromISR": "0x02024fed", + "vListInitialise": "0x020250ab", + "vListInitialiseItem": "0x020250c1", + "vListInsert": "0x020250c7", + "vListInsertEnd": "0x020250f7", + "vPortEndScheduler": "0x02025111", + "vPortEnterCritical": "0x0202513d", + "vPortExitCritical": "0x02025181", + "vPortFree": "0x020251b5", + "vPortSuppressTicksAndSleep": "0x02025259", + "vPortValidateInterruptPriority": "0x02025381", + "vQueueDelete": "0x020253dd", + "vQueueWaitForMessageRestricted": "0x02025409", + "vTaskDelay": "0x0202544d", + "vTaskInternalSetTimeOutState": "0x02025499", + "vTaskMissedYield": "0x020254a9", + "vTaskPlaceOnEventList": "0x020254b5", + "vTaskPlaceOnEventListRestricted": "0x020254ed", + "vTaskPriorityDisinheritAfterTimeout": "0x0202552d", + "vTaskPrioritySet": "0x020255d9", + "vTaskResume": "0x020256a1", + "vTaskStartScheduler": "0x02025725", + "vTaskStepTick": "0x020257b5", + "vTaskSuspend": "0x020257e5", + "vTaskSuspendAll": "0x020258a1", + "vTaskSwitchContext": "0x020258b1", + "xPortStartScheduler": "0x02025959", + "xQueueAddToSet": "0x02025a5d", + "xQueueCreateCountingSemaphore": "0x02025a81", + "xQueueCreateCountingSemaphoreStatic": "0x02025abd", + "xQueueCreateMutex": "0x02025b01", + "xQueueCreateMutexStatic": "0x02025b17", + "xQueueCreateSet": "0x02025b31", + "xQueueGenericCreate": "0x02025b39", + "xQueueGenericCreateStatic": "0x02025b85", + "xQueueGenericReset": "0x02025bed", + "xQueueGenericSend": "0x02025c79", + "xQueueGenericSendFromISR": "0x02025de5", + "xQueueGiveFromISR": "0x02025ea5", + "xQueueGiveMutexRecursive": "0x02025f49", + "xQueueIsQueueEmptyFromISR": "0x02025f89", + "xQueueIsQueueFullFromISR": "0x02025fad", + "xQueuePeek": "0x02025fd5", + "xQueuePeekFromISR": "0x020260fd", + "xQueueReceive": "0x02026169", + "xQueueReceiveFromISR": "0x02026295", + "xQueueRemoveFromSet": "0x02026329", + "xQueueSelectFromSet": "0x0202634b", + "xQueueSelectFromSetFromISR": "0x0202635d", + "xQueueSemaphoreTake": "0x02026371", + "xQueueTakeMutexRecursive": "0x020264dd", + "xTaskCheckForTimeOut": "0x02026521", + "xTaskCreate": "0x02026591", + "xTaskCreateStatic": "0x020265ed", + "xTaskGetCurrentTaskHandle": "0x0202665d", + "xTaskGetSchedulerState": "0x02026669", + "xTaskGetTickCount": "0x02026685", + "xTaskGetTickCountFromISR": "0x02026691", + "xTaskIncrementTick": "0x020266a1", + "xTaskPriorityDisinherit": "0x0202676d", + "xTaskPriorityInherit": "0x02026801", + "xTaskRemoveFromEventList": "0x02026895", + "xTaskResumeAll": "0x02026915", + "xTaskResumeFromISR": "0x020269dd", + "xTimerCreate": "0x02026a69", + "xTimerCreateStatic": "0x02026a9d", + "xTimerCreateTimerTask": "0x02026ad5", + "xTimerGenericCommand": "0x02026b41", + "xTimerGetExpiryTime": "0x02026bb1", + "xTimerGetTimerDaemonTaskHandle": "0x02026bd1" } \ No newline at end of file diff --git a/bundles/mass_conn/ING9168xx/meta.json b/bundles/mass_conn/ING9168xx/meta.json index 9c66f81a9..d27131118 100644 --- a/bundles/mass_conn/ING9168xx/meta.json +++ b/bundles/mass_conn/ING9168xx/meta.json @@ -1,18 +1,24 @@ { "app": { - "base": 33718272 + "base": 33722368 }, "ram": { "base": 536870912, - "size": 21916 + "size": 21860 }, "rom": { "base": 33562624, - "size": 155320 + "size": 159684 + }, + "var": { + "link_layer_features": { + "addr": 33714192, + "value": "bf79ff07fe000000" + } }, "version": [ 2, 3, - 1 + 18 ] } \ No newline at end of file diff --git a/bundles/mass_conn/ING9168xx/platform.bin b/bundles/mass_conn/ING9168xx/platform.bin index 89db6dfeb..dd11eb30f 100644 Binary files a/bundles/mass_conn/ING9168xx/platform.bin and b/bundles/mass_conn/ING9168xx/platform.bin differ diff --git a/bundles/mass_conn/ING9187xx/apis.json b/bundles/mass_conn/ING9187xx/apis.json index 5d5d407b2..281977773 100644 --- a/bundles/mass_conn/ING9187xx/apis.json +++ b/bundles/mass_conn/ING9187xx/apis.json @@ -6,45 +6,47 @@ "att_dispatch_server_can_send_now": "0x000057cd", "att_dispatch_server_request_can_send_now_event": "0x000057d3", "att_emit_general_event": "0x00005885", - "att_server_can_send_packet_now": "0x00005fb5", - "att_server_deferred_read_response": "0x00005fb9", - "att_server_get_mtu": "0x00005fd1", - "att_server_indicate": "0x00006049", - "att_server_init": "0x000060cd", - "att_server_notify": "0x00006109", - "att_server_register_packet_handler": "0x00006221", - "att_server_request_can_send_now_event": "0x0000622d", - "att_set_db": "0x00006249", - "att_set_read_callback": "0x0000625d", - "att_set_write_callback": "0x00006269", - "bd_addr_cmp": "0x000063d9", - "bd_addr_copy": "0x000063df", - "bd_addr_to_str": "0x000063e9", - "big_endian_read_16": "0x00006421", - "big_endian_read_32": "0x00006429", - "big_endian_store_16": "0x0000643d", - "big_endian_store_32": "0x00006449", - "btstack_config": "0x0000659d", - "btstack_memory_pool_create": "0x000066db", - "btstack_memory_pool_free": "0x00006705", - "btstack_memory_pool_get": "0x00006765", - "btstack_push_user_msg": "0x000067cd", - "btstack_push_user_runnable": "0x000067d9", - "btstack_reset": "0x000067e5", - "char_for_nibble": "0x00006ac1", - "eTaskConfirmSleepModeStatus": "0x00006da5", - "gap_add_dev_to_periodic_list": "0x000073a9", - "gap_add_whitelist": "0x000073b9", - "gap_aes_encrypt": "0x000073c5", - "gap_clear_white_lists": "0x000073fd", - "gap_clr_adv_set": "0x00007409", - "gap_clr_periodic_adv_list": "0x00007415", - "gap_create_connection_cancel": "0x00007421", - "gap_disconnect": "0x0000742d", - "gap_disconnect_all": "0x00007459", - "gap_ext_create_connection": "0x00007499", - "gap_get_connection_parameter_range": "0x00007571", - "gap_le_read_channel_map": "0x000075a9", + "att_server_can_send_packet_now": "0x00005fb9", + "att_server_deferred_read_response": "0x00005fbd", + "att_server_get_mtu": "0x00005fd5", + "att_server_indicate": "0x0000604d", + "att_server_init": "0x000060d1", + "att_server_notify": "0x0000610d", + "att_server_register_packet_handler": "0x00006225", + "att_server_request_can_send_now_event": "0x00006231", + "att_set_db": "0x0000624d", + "att_set_read_callback": "0x00006261", + "att_set_write_callback": "0x0000626d", + "bd_addr_cmp": "0x000063dd", + "bd_addr_copy": "0x000063e3", + "bd_addr_to_str": "0x000063ed", + "big_endian_read_16": "0x00006425", + "big_endian_read_32": "0x0000642d", + "big_endian_store_16": "0x00006441", + "big_endian_store_32": "0x0000644d", + "btstack_config": "0x000065a1", + "btstack_get_capabilities": "0x000065ad", + "btstack_memory_pool_create": "0x000066f5", + "btstack_memory_pool_free": "0x0000671d", + "btstack_memory_pool_get": "0x0000677d", + "btstack_push_user_msg": "0x000067e5", + "btstack_push_user_runnable": "0x000067f1", + "btstack_reset": "0x000067fd", + "char_for_nibble": "0x00006ad9", + "eTaskConfirmSleepModeStatus": "0x00006dbd", + "gap_add_dev_to_periodic_list": "0x000073ad", + "gap_add_whitelist": "0x000073bd", + "gap_aes_encrypt": "0x000073c9", + "gap_clear_white_lists": "0x00007401", + "gap_clr_adv_set": "0x0000740d", + "gap_clr_periodic_adv_list": "0x00007419", + "gap_create_connection_cancel": "0x00007425", + "gap_disconnect": "0x00007431", + "gap_disconnect2": "0x00007439", + "gap_disconnect_all": "0x00007465", + "gap_ext_create_connection": "0x000074a5", + "gap_get_connection_parameter_range": "0x0000757d", + "gap_le_read_channel_map": "0x000075b5", "gap_periodic_adv_create_sync": "0x00007615", "gap_periodic_adv_create_sync_cancel": "0x00007639", "gap_periodic_adv_term_sync": "0x00007645", @@ -53,280 +55,285 @@ "gap_read_remote_used_features": "0x000076e5", "gap_read_remote_version": "0x000076f1", "gap_read_rssi": "0x000076fd", - "gap_remove_whitelist": "0x00007709", - "gap_rmv_adv_set": "0x00007785", - "gap_rmv_dev_from_periodic_list": "0x00007791", - "gap_rx_test_v2": "0x000077a1", - "gap_set_adv_set_random_addr": "0x000077d9", - "gap_set_callback_for_next_hci": "0x00007815", - "gap_set_connection_parameter_range": "0x0000783d", - "gap_set_data_length": "0x00007859", - "gap_set_def_phy": "0x00007871", - "gap_set_ext_adv_data": "0x00007881", - "gap_set_ext_adv_enable": "0x00007899", - "gap_set_ext_adv_para": "0x00007909", - "gap_set_ext_scan_enable": "0x000079e1", - "gap_set_ext_scan_para": "0x000079f9", - "gap_set_ext_scan_response_data": "0x00007a99", - "gap_set_host_channel_classification": "0x00007ab1", - "gap_set_periodic_adv_data": "0x00007ac1", - "gap_set_periodic_adv_enable": "0x00007b31", - "gap_set_periodic_adv_para": "0x00007b41", - "gap_set_phy": "0x00007b59", - "gap_set_random_device_address": "0x00007b75", - "gap_start_ccm": "0x00007ba5", - "gap_test_end": "0x00007bed", - "gap_tx_test_v2": "0x00007bf9", - "gap_tx_test_v4": "0x00007c11", - "gap_update_connection_parameters": "0x00007c35", - "gap_vendor_tx_continuous_wave": "0x00007c79", - "gatt_client_cancel_write": "0x000081a1", - "gatt_client_discover_characteristic_descriptors": "0x000081c7", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x00008207", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x00008257", - "gatt_client_discover_characteristics_for_service": "0x000082a7", - "gatt_client_discover_primary_services": "0x000082dd", - "gatt_client_discover_primary_services_by_uuid128": "0x0000830f", - "gatt_client_discover_primary_services_by_uuid16": "0x00008353", - "gatt_client_execute_write": "0x0000838f", - "gatt_client_find_included_services_for_service": "0x000083b5", - "gatt_client_get_mtu": "0x000083e3", - "gatt_client_is_ready": "0x00008485", - "gatt_client_listen_for_characteristic_value_updates": "0x0000849b", - "gatt_client_prepare_write": "0x000084bd", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x000084f9", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x00008523", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008529", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x00008557", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x0000855d", - "gatt_client_read_multiple_characteristic_values": "0x0000858b", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x000085bb", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x000085e9", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x00008635", - "gatt_client_register_handler": "0x00008681", - "gatt_client_reliable_write_long_value_of_characteristic": "0x0000868d", - "gatt_client_signed_write_without_response": "0x00008abd", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008b81", - "gatt_client_write_client_characteristic_configuration": "0x00008bbb", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008c0d", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008c1d", - "gatt_client_write_long_value_of_characteristic": "0x00008c59", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008c69", - "gatt_client_write_value_of_characteristic": "0x00008ca5", - "gatt_client_write_value_of_characteristic_without_response": "0x00008cdb", - "hci_add_event_handler": "0x0000a201", - "hci_power_control": "0x0000a9a5", - "hci_register_acl_packet_handler": "0x0000ab59", - "kv_commit": "0x0000b2e1", - "kv_get": "0x0000b33d", - "kv_init": "0x0000b349", - "kv_init_backend": "0x0000b3c9", - "kv_put": "0x0000b3dd", - "kv_remove": "0x0000b3e9", - "kv_remove_all": "0x0000b41d", - "kv_value_modified": "0x0000b44d", - "kv_value_modified_of_key": "0x0000b469", - "kv_visit": "0x0000b475", - "l2cap_add_event_handler": "0x0000b505", - "l2cap_can_send_packet_now": "0x0000b515", - "l2cap_create_le_credit_based_connection_request": "0x0000b6d1", - "l2cap_credit_based_send": "0x0000b815", - "l2cap_credit_based_send_continue": "0x0000b841", - "l2cap_disconnect": "0x0000b8bd", - "l2cap_get_le_credit_based_connection_credits": "0x0000bb0d", - "l2cap_get_peer_mtu_for_local_cid": "0x0000bb29", - "l2cap_init": "0x0000befd", - "l2cap_le_send_flow_control_credit": "0x0000bff3", - "l2cap_max_le_mtu": "0x0000c2fd", - "l2cap_register_packet_handler": "0x0000c425", - "l2cap_register_service": "0x0000c431", - "l2cap_request_can_send_now_event": "0x0000c541", - "l2cap_request_connection_parameter_update": "0x0000c55b", - "l2cap_send_echo_request": "0x0000ca35", - "l2cap_unregister_service": "0x0000caf5", - "le_device_db_add": "0x0000cb4d", - "le_device_db_find": "0x0000cc25", - "le_device_db_from_key": "0x0000cc51", - "le_device_db_iter_cur": "0x0000cc59", - "le_device_db_iter_cur_key": "0x0000cc5d", - "le_device_db_iter_init": "0x0000cc61", - "le_device_db_iter_next": "0x0000cc69", - "le_device_db_remove_key": "0x0000cc8f", - "ll_aes_encrypt": "0x0000ccbd", - "ll_config": "0x0000cd39", - "ll_free": "0x0000cd6f", - "ll_get_heap_free_size": "0x0000cd79", - "ll_hint_on_ce_len": "0x0000cd8d", - "ll_legacy_adv_set_interval": "0x0000cdc5", - "ll_malloc": "0x0000cdd5", - "ll_query_timing_info": "0x0000cf0d", - "ll_register_hci_acl_previewer": "0x0000cf59", - "ll_scan_set_fixed_channel": "0x0000cfbd", - "ll_set_adv_access_address": "0x0000d1d5", - "ll_set_adv_coded_scheme": "0x0000d1e1", - "ll_set_conn_acl_report_latency": "0x0000d211", - "ll_set_conn_coded_scheme": "0x0000d241", - "ll_set_conn_latency": "0x0000d26d", - "ll_set_conn_tx_power": "0x0000d29d", - "ll_set_def_antenna": "0x0000d2e5", - "ll_set_initiating_coded_scheme": "0x0000d301", - "ll_set_max_conn_number": "0x0000d30d", - "nibble_for_char": "0x0001d4dd", - "platform_calibrate_rt_clk": "0x0001d589", + "gap_read_white_lists_size": "0x00007709", + "gap_remove_whitelist": "0x00007715", + "gap_rmv_adv_set": "0x00007791", + "gap_rmv_dev_from_periodic_list": "0x0000779d", + "gap_rx_test_v2": "0x000077ad", + "gap_set_adv_set_random_addr": "0x000077e5", + "gap_set_callback_for_next_hci": "0x00007809", + "gap_set_connection_parameter_range": "0x00007831", + "gap_set_data_length": "0x00007849", + "gap_set_def_phy": "0x00007861", + "gap_set_ext_adv_data": "0x00007871", + "gap_set_ext_adv_enable": "0x00007889", + "gap_set_ext_adv_para": "0x000078f9", + "gap_set_ext_scan_enable": "0x000079c1", + "gap_set_ext_scan_para": "0x000079d9", + "gap_set_ext_scan_response_data": "0x00007a79", + "gap_set_host_channel_classification": "0x00007a91", + "gap_set_periodic_adv_data": "0x00007aa1", + "gap_set_periodic_adv_enable": "0x00007b11", + "gap_set_periodic_adv_para": "0x00007b21", + "gap_set_phy": "0x00007b39", + "gap_set_random_device_address": "0x00007b55", + "gap_start_ccm": "0x00007b71", + "gap_test_end": "0x00007bb9", + "gap_tx_test_v2": "0x00007bc5", + "gap_tx_test_v4": "0x00007bdd", + "gap_update_connection_parameters": "0x00007c01", + "gap_vendor_tx_continuous_wave": "0x00007c45", + "gatt_client_cancel_write": "0x0000816d", + "gatt_client_discover_characteristic_descriptors": "0x00008193", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x000081d3", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x00008223", + "gatt_client_discover_characteristics_for_service": "0x00008273", + "gatt_client_discover_primary_services": "0x000082a9", + "gatt_client_discover_primary_services_by_uuid128": "0x000082db", + "gatt_client_discover_primary_services_by_uuid16": "0x0000831f", + "gatt_client_execute_write": "0x0000835b", + "gatt_client_find_included_services_for_service": "0x00008381", + "gatt_client_get_mtu": "0x000083af", + "gatt_client_is_ready": "0x00008459", + "gatt_client_listen_for_characteristic_value_updates": "0x0000846f", + "gatt_client_prepare_write": "0x00008491", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x000084cd", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x000084f7", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x000084fd", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x0000852b", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x00008531", + "gatt_client_read_multiple_characteristic_values": "0x0000855f", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x0000858f", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x000085bd", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x00008609", + "gatt_client_register_handler": "0x00008655", + "gatt_client_reliable_write_long_value_of_characteristic": "0x00008661", + "gatt_client_signed_write_without_response": "0x00008a91", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008b55", + "gatt_client_write_client_characteristic_configuration": "0x00008b8f", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008be1", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008bf1", + "gatt_client_write_long_value_of_characteristic": "0x00008c2d", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008c3d", + "gatt_client_write_value_of_characteristic": "0x00008c79", + "gatt_client_write_value_of_characteristic_without_response": "0x00008caf", + "hci_add_event_handler": "0x0000a1cd", + "hci_power_control": "0x0000a969", + "hci_register_acl_packet_handler": "0x0000ab1d", + "kv_commit": "0x0000b295", + "kv_get": "0x0000b2f1", + "kv_init": "0x0000b2fd", + "kv_init_backend": "0x0000b37d", + "kv_put": "0x0000b391", + "kv_remove": "0x0000b39d", + "kv_remove_all": "0x0000b3d1", + "kv_value_modified": "0x0000b401", + "kv_value_modified_of_key": "0x0000b41d", + "kv_visit": "0x0000b429", + "l2cap_add_event_handler": "0x0000b4b9", + "l2cap_can_send_packet_now": "0x0000b4c9", + "l2cap_create_le_credit_based_connection_request": "0x0000b685", + "l2cap_credit_based_send": "0x0000b7c9", + "l2cap_credit_based_send_continue": "0x0000b7f5", + "l2cap_disconnect": "0x0000b871", + "l2cap_get_le_credit_based_connection_credits": "0x0000bac1", + "l2cap_get_peer_mtu_for_local_cid": "0x0000badd", + "l2cap_init": "0x0000beb1", + "l2cap_le_send_flow_control_credit": "0x0000bfa7", + "l2cap_max_le_mtu": "0x0000c2b1", + "l2cap_register_packet_handler": "0x0000c3d9", + "l2cap_register_service": "0x0000c3e5", + "l2cap_request_can_send_now_event": "0x0000c4f5", + "l2cap_request_connection_parameter_update": "0x0000c50f", + "l2cap_send_echo_request": "0x0000c9e9", + "l2cap_unregister_service": "0x0000caa9", + "le_device_db_add": "0x0000cb01", + "le_device_db_find": "0x0000cbd9", + "le_device_db_from_key": "0x0000cc05", + "le_device_db_iter_cur": "0x0000cc0d", + "le_device_db_iter_cur_key": "0x0000cc11", + "le_device_db_iter_init": "0x0000cc15", + "le_device_db_iter_next": "0x0000cc1d", + "le_device_db_remove_key": "0x0000cc43", + "ll_aes_encrypt": "0x0000cc71", + "ll_config": "0x0000cced", + "ll_free": "0x0000cd23", + "ll_get_capabilities": "0x0000cd2d", + "ll_get_heap_free_size": "0x0000cd51", + "ll_get_states": "0x0000cd61", + "ll_hint_on_ce_len": "0x0000ce1d", + "ll_legacy_adv_set_interval": "0x0000ce55", + "ll_malloc": "0x0000ce65", + "ll_query_timing_info": "0x0000cf9d", + "ll_register_hci_acl_previewer": "0x0000cfe9", + "ll_scan_set_fixed_channel": "0x0000d04d", + "ll_set_adv_access_address": "0x0000d265", + "ll_set_adv_coded_scheme": "0x0000d271", + "ll_set_conn_acl_report_latency": "0x0000d2a1", + "ll_set_conn_coded_scheme": "0x0000d2d1", + "ll_set_conn_latency": "0x0000d2fd", + "ll_set_conn_tx_power": "0x0000d32d", + "ll_set_def_antenna": "0x0000d375", + "ll_set_initiating_coded_scheme": "0x0000d391", + "ll_set_max_conn_number": "0x0000d39d", + "nibble_for_char": "0x0001d56d", + "platform_calibrate_rt_clk": "0x0001d619", "platform_call_on_stack": "0x00004183", - "platform_config": "0x0001d58d", - "platform_delete_timer": "0x0001d6b1", - "platform_enable_irq": "0x0001d6b9", - "platform_get_current_task": "0x0001d6f1", - "platform_get_gen_os_driver": "0x0001d715", - "platform_get_heap_status": "0x0001d71d", - "platform_get_link_layer_interf": "0x0001d735", - "platform_get_task_handle": "0x0001d73d", - "platform_get_timer_counter": "0x0001d75d", - "platform_get_us_time": "0x0001d761", - "platform_get_version": "0x0001d765", - "platform_hrng": "0x0001d76d", - "platform_install_isr_stack": "0x0001d775", - "platform_install_task_stack": "0x0001d781", - "platform_patch_rf_init_data": "0x0001d7b9", - "platform_printf": "0x0001d7c5", - "platform_raise_assertion": "0x0001d7d9", - "platform_rand": "0x0001d7ed", - "platform_read_info": "0x0001d7f1", - "platform_read_persistent_reg": "0x0001d821", - "platform_reset": "0x0001d831", - "platform_rt_rc_auto_tune": "0x0001d855", - "platform_rt_rc_auto_tune2": "0x0001d85d", - "platform_rt_rc_tune": "0x0001d8e5", - "platform_set_abs_timer": "0x0001d8f9", - "platform_set_evt_callback": "0x0001d8fd", - "platform_set_evt_callback_table": "0x0001d911", - "platform_set_irq_callback": "0x0001d91d", - "platform_set_irq_callback_table": "0x0001d939", - "platform_set_rf_clk_source": "0x0001d945", - "platform_set_rf_init_data": "0x0001d951", - "platform_set_rf_power_mapping": "0x0001d95d", - "platform_set_timer": "0x0001d969", - "platform_shutdown": "0x0001d96d", - "platform_switch_app": "0x0001d971", - "platform_trace_raw": "0x0001d99d", - "platform_write_persistent_reg": "0x0001d9b5", - "printf_hexdump": "0x0001db69", - "pvPortMalloc": "0x0001e65d", - "pvTaskIncrementMutexHeldCount": "0x0001e745", - "pvTimerGetTimerID": "0x0001e75d", - "pxPortInitialiseStack": "0x0001e789", - "reverse_128": "0x0001e931", - "reverse_24": "0x0001e937", - "reverse_256": "0x0001e93d", - "reverse_48": "0x0001e943", - "reverse_56": "0x0001e949", - "reverse_64": "0x0001e94f", - "reverse_bd_addr": "0x0001e955", - "reverse_bytes": "0x0001e95b", - "sm_add_event_handler": "0x0001eaf9", - "sm_address_resolution_lookup": "0x0001ec51", - "sm_authenticated": "0x0001efcd", - "sm_authorization_decline": "0x0001efdb", - "sm_authorization_grant": "0x0001effb", - "sm_authorization_state": "0x0001f01b", - "sm_bonding_decline": "0x0001f035", - "sm_config": "0x0001f491", - "sm_config_conn": "0x0001f4a9", - "sm_encryption_key_size": "0x0001f65f", - "sm_just_works_confirm": "0x0001fbe5", - "sm_le_device_key": "0x0001ff1d", - "sm_passkey_input": "0x0001ffb3", - "sm_private_random_address_generation_get": "0x0002036d", - "sm_private_random_address_generation_get_mode": "0x00020375", - "sm_private_random_address_generation_set_mode": "0x00020381", - "sm_private_random_address_generation_set_update_period": "0x000203a9", - "sm_register_external_ltk_callback": "0x000204e5", - "sm_register_oob_data_callback": "0x000204f1", - "sm_request_pairing": "0x000204fd", - "sm_send_security_request": "0x00020fd3", - "sm_set_accepted_stk_generation_methods": "0x00020ff9", - "sm_set_authentication_requirements": "0x00021005", - "sm_set_encryption_key_size_range": "0x00021011", - "sscanf_bd_addr": "0x0002136d", - "sysSetPublicDeviceAddr": "0x00021721", - "uuid128_to_str": "0x00021d35", - "uuid_add_bluetooth_prefix": "0x00021d8d", - "uuid_has_bluetooth_prefix": "0x00021dad", - "uxListRemove": "0x00021dc9", - "uxQueueMessagesWaiting": "0x00021df1", - "uxQueueMessagesWaitingFromISR": "0x00021e19", - "uxQueueSpacesAvailable": "0x00021e35", - "uxTaskGetStackHighWaterMark": "0x00021e61", - "uxTaskPriorityGet": "0x00021e81", - "uxTaskPriorityGetFromISR": "0x00021e9d", - "vListInitialise": "0x00021f57", - "vListInitialiseItem": "0x00021f6d", - "vListInsert": "0x00021f73", - "vListInsertEnd": "0x00021fa3", - "vPortEndScheduler": "0x00021fbd", - "vPortEnterCritical": "0x00021fe9", - "vPortExitCritical": "0x0002202d", - "vPortFree": "0x00022061", - "vPortSuppressTicksAndSleep": "0x000220f5", - "vPortValidateInterruptPriority": "0x0002221d", - "vQueueDelete": "0x00022279", - "vQueueWaitForMessageRestricted": "0x000222a5", - "vTaskDelay": "0x000222ed", - "vTaskInternalSetTimeOutState": "0x00022339", - "vTaskMissedYield": "0x00022349", - "vTaskPlaceOnEventList": "0x00022355", - "vTaskPlaceOnEventListRestricted": "0x0002238d", - "vTaskPriorityDisinheritAfterTimeout": "0x000223cd", - "vTaskPrioritySet": "0x00022479", - "vTaskResume": "0x00022541", - "vTaskStartScheduler": "0x000225c5", - "vTaskStepTick": "0x00022655", - "vTaskSuspend": "0x00022685", - "vTaskSuspendAll": "0x00022741", - "vTaskSwitchContext": "0x00022751", - "xPortStartScheduler": "0x00022801", - "xQueueAddToSet": "0x000228c9", - "xQueueCreateCountingSemaphore": "0x000228ed", - "xQueueCreateCountingSemaphoreStatic": "0x00022929", - "xQueueCreateMutex": "0x0002296d", - "xQueueCreateMutexStatic": "0x00022983", - "xQueueCreateSet": "0x0002299d", - "xQueueGenericCreate": "0x000229a5", - "xQueueGenericCreateStatic": "0x000229f1", - "xQueueGenericReset": "0x00022a59", - "xQueueGenericSend": "0x00022ae5", - "xQueueGenericSendFromISR": "0x00022c51", - "xQueueGiveFromISR": "0x00022d11", - "xQueueGiveMutexRecursive": "0x00022db5", - "xQueueIsQueueEmptyFromISR": "0x00022df5", - "xQueueIsQueueFullFromISR": "0x00022e19", - "xQueuePeek": "0x00022e41", - "xQueuePeekFromISR": "0x00022f69", - "xQueueReceive": "0x00022fd5", - "xQueueReceiveFromISR": "0x00023101", - "xQueueRemoveFromSet": "0x00023195", - "xQueueSelectFromSet": "0x000231b7", - "xQueueSelectFromSetFromISR": "0x000231c9", - "xQueueSemaphoreTake": "0x000231dd", - "xQueueTakeMutexRecursive": "0x00023349", - "xTaskCheckForTimeOut": "0x0002338d", - "xTaskCreate": "0x000233fd", - "xTaskCreateStatic": "0x00023459", - "xTaskGetCurrentTaskHandle": "0x000234c9", - "xTaskGetSchedulerState": "0x000234d5", - "xTaskGetTickCount": "0x000234f1", - "xTaskGetTickCountFromISR": "0x000234fd", - "xTaskIncrementTick": "0x0002350d", - "xTaskPriorityDisinherit": "0x000235d9", - "xTaskPriorityInherit": "0x0002366d", - "xTaskRemoveFromEventList": "0x00023701", - "xTaskResumeAll": "0x00023781", - "xTaskResumeFromISR": "0x00023849", - "xTimerCreate": "0x000238d5", - "xTimerCreateStatic": "0x00023909", - "xTimerCreateTimerTask": "0x00023941", - "xTimerGenericCommand": "0x000239ad", - "xTimerGetExpiryTime": "0x00023a1d", - "xTimerGetTimerDaemonTaskHandle": "0x00023a3d" + "platform_cancel_us_timer": "0x0001d61d", + "platform_config": "0x0001d631", + "platform_create_us_timer": "0x0001d755", + "platform_delete_timer": "0x0001d769", + "platform_enable_irq": "0x0001d771", + "platform_get_current_task": "0x0001d7a9", + "platform_get_gen_os_driver": "0x0001d7cd", + "platform_get_heap_status": "0x0001d7d5", + "platform_get_link_layer_interf": "0x0001d7ed", + "platform_get_task_handle": "0x0001d7f5", + "platform_get_timer_counter": "0x0001d815", + "platform_get_us_time": "0x0001d819", + "platform_get_version": "0x0001d81d", + "platform_hrng": "0x0001d825", + "platform_install_isr_stack": "0x0001d82d", + "platform_install_task_stack": "0x0001d839", + "platform_patch_rf_init_data": "0x0001d871", + "platform_printf": "0x0001d87d", + "platform_raise_assertion": "0x0001d891", + "platform_rand": "0x0001d8a5", + "platform_read_info": "0x0001d8a9", + "platform_read_persistent_reg": "0x0001d8d9", + "platform_reset": "0x0001d8e9", + "platform_rt_rc_auto_tune": "0x0001d90d", + "platform_rt_rc_auto_tune2": "0x0001d915", + "platform_rt_rc_tune": "0x0001d991", + "platform_set_abs_timer": "0x0001d9b5", + "platform_set_evt_callback": "0x0001d9b9", + "platform_set_evt_callback_table": "0x0001d9cd", + "platform_set_irq_callback": "0x0001d9d9", + "platform_set_irq_callback_table": "0x0001d9f5", + "platform_set_rf_clk_source": "0x0001da01", + "platform_set_rf_init_data": "0x0001da0d", + "platform_set_rf_power_mapping": "0x0001da19", + "platform_set_timer": "0x0001da25", + "platform_shutdown": "0x0001da29", + "platform_switch_app": "0x0001da2d", + "platform_trace_raw": "0x0001da59", + "platform_write_persistent_reg": "0x0001da71", + "printf_hexdump": "0x0001dc25", + "pvPortMalloc": "0x0001e719", + "pvTaskIncrementMutexHeldCount": "0x0001e801", + "pvTimerGetTimerID": "0x0001e819", + "pxPortInitialiseStack": "0x0001e845", + "reverse_128": "0x0001e9ed", + "reverse_24": "0x0001e9f3", + "reverse_256": "0x0001e9f9", + "reverse_48": "0x0001e9ff", + "reverse_56": "0x0001ea05", + "reverse_64": "0x0001ea0b", + "reverse_bd_addr": "0x0001ea11", + "reverse_bytes": "0x0001ea17", + "sm_add_event_handler": "0x0001ebb5", + "sm_address_resolution_lookup": "0x0001ed0d", + "sm_authenticated": "0x0001f0b5", + "sm_authorization_decline": "0x0001f0c3", + "sm_authorization_grant": "0x0001f0e3", + "sm_authorization_state": "0x0001f103", + "sm_bonding_decline": "0x0001f11d", + "sm_config": "0x0001f579", + "sm_config_conn": "0x0001f5ad", + "sm_encryption_key_size": "0x0001f767", + "sm_just_works_confirm": "0x0001fced", + "sm_le_device_key": "0x0002002d", + "sm_passkey_input": "0x000200c3", + "sm_private_random_address_generation_get": "0x00020485", + "sm_private_random_address_generation_get_mode": "0x0002048d", + "sm_private_random_address_generation_set_mode": "0x00020499", + "sm_private_random_address_generation_set_update_period": "0x000204c1", + "sm_register_external_ltk_callback": "0x000205fd", + "sm_register_oob_data_callback": "0x00020609", + "sm_request_pairing": "0x00020615", + "sm_send_security_request": "0x000210f3", + "sm_set_accepted_stk_generation_methods": "0x00021119", + "sm_set_authentication_requirements": "0x00021125", + "sm_set_encryption_key_size_range": "0x00021135", + "sscanf_bd_addr": "0x00021481", + "sysSetPublicDeviceAddr": "0x0002187d", + "uuid128_to_str": "0x00021ea5", + "uuid_add_bluetooth_prefix": "0x00021efd", + "uuid_has_bluetooth_prefix": "0x00021f1d", + "uxListRemove": "0x00021f39", + "uxQueueMessagesWaiting": "0x00021f61", + "uxQueueMessagesWaitingFromISR": "0x00021f89", + "uxQueueSpacesAvailable": "0x00021fa5", + "uxTaskGetStackHighWaterMark": "0x00021fd1", + "uxTaskPriorityGet": "0x00021ff1", + "uxTaskPriorityGetFromISR": "0x0002200d", + "vListInitialise": "0x000220c7", + "vListInitialiseItem": "0x000220dd", + "vListInsert": "0x000220e3", + "vListInsertEnd": "0x00022113", + "vPortEndScheduler": "0x0002212d", + "vPortEnterCritical": "0x00022159", + "vPortExitCritical": "0x0002219d", + "vPortFree": "0x000221d1", + "vPortSuppressTicksAndSleep": "0x00022265", + "vPortValidateInterruptPriority": "0x0002238d", + "vQueueDelete": "0x000223e9", + "vQueueWaitForMessageRestricted": "0x00022415", + "vTaskDelay": "0x0002245d", + "vTaskInternalSetTimeOutState": "0x000224a9", + "vTaskMissedYield": "0x000224b9", + "vTaskPlaceOnEventList": "0x000224c5", + "vTaskPlaceOnEventListRestricted": "0x000224fd", + "vTaskPriorityDisinheritAfterTimeout": "0x0002253d", + "vTaskPrioritySet": "0x000225e9", + "vTaskResume": "0x000226b1", + "vTaskStartScheduler": "0x00022735", + "vTaskStepTick": "0x000227c5", + "vTaskSuspend": "0x000227f5", + "vTaskSuspendAll": "0x000228b1", + "vTaskSwitchContext": "0x000228c1", + "xPortStartScheduler": "0x00022969", + "xQueueAddToSet": "0x00022a31", + "xQueueCreateCountingSemaphore": "0x00022a55", + "xQueueCreateCountingSemaphoreStatic": "0x00022a91", + "xQueueCreateMutex": "0x00022ad5", + "xQueueCreateMutexStatic": "0x00022aeb", + "xQueueCreateSet": "0x00022b05", + "xQueueGenericCreate": "0x00022b0d", + "xQueueGenericCreateStatic": "0x00022b59", + "xQueueGenericReset": "0x00022bc1", + "xQueueGenericSend": "0x00022c4d", + "xQueueGenericSendFromISR": "0x00022db9", + "xQueueGiveFromISR": "0x00022e79", + "xQueueGiveMutexRecursive": "0x00022f1d", + "xQueueIsQueueEmptyFromISR": "0x00022f5d", + "xQueueIsQueueFullFromISR": "0x00022f81", + "xQueuePeek": "0x00022fa9", + "xQueuePeekFromISR": "0x000230d1", + "xQueueReceive": "0x0002313d", + "xQueueReceiveFromISR": "0x00023269", + "xQueueRemoveFromSet": "0x000232fd", + "xQueueSelectFromSet": "0x0002331f", + "xQueueSelectFromSetFromISR": "0x00023331", + "xQueueSemaphoreTake": "0x00023345", + "xQueueTakeMutexRecursive": "0x000234b1", + "xTaskCheckForTimeOut": "0x000234f5", + "xTaskCreate": "0x00023565", + "xTaskCreateStatic": "0x000235c1", + "xTaskGetCurrentTaskHandle": "0x00023631", + "xTaskGetSchedulerState": "0x0002363d", + "xTaskGetTickCount": "0x00023659", + "xTaskGetTickCountFromISR": "0x00023665", + "xTaskIncrementTick": "0x00023675", + "xTaskPriorityDisinherit": "0x00023741", + "xTaskPriorityInherit": "0x000237d5", + "xTaskRemoveFromEventList": "0x00023869", + "xTaskResumeAll": "0x000238e9", + "xTaskResumeFromISR": "0x000239b1", + "xTimerCreate": "0x00023a3d", + "xTimerCreateStatic": "0x00023a71", + "xTimerCreateTimerTask": "0x00023aa9", + "xTimerGenericCommand": "0x00023b15", + "xTimerGetExpiryTime": "0x00023b85", + "xTimerGetTimerDaemonTaskHandle": "0x00023ba5" } \ No newline at end of file diff --git a/bundles/mass_conn/ING9187xx/meta.json b/bundles/mass_conn/ING9187xx/meta.json index eaf055ecd..72f69b1e4 100644 --- a/bundles/mass_conn/ING9187xx/meta.json +++ b/bundles/mass_conn/ING9187xx/meta.json @@ -4,15 +4,21 @@ }, "ram": { "base": 536870912, - "size": 33104 + "size": 33040 }, "rom": { "base": 16384, - "size": 135872 + "size": 136252 + }, + "var": { + "link_layer_features": { + "addr": 148744, + "value": "3ff9010400000000" + } }, "version": [ 1, 9, - 41 + 56 ] } \ No newline at end of file diff --git a/bundles/mass_conn/ING9187xx/platform.bin b/bundles/mass_conn/ING9187xx/platform.bin index cbda6dacd..4243bb8f1 100644 Binary files a/bundles/mass_conn/ING9187xx/platform.bin and b/bundles/mass_conn/ING9187xx/platform.bin differ diff --git a/bundles/mass_conn/ING9188xx/apis.json b/bundles/mass_conn/ING9188xx/apis.json index 81e96a00f..b8b3507fa 100644 --- a/bundles/mass_conn/ING9188xx/apis.json +++ b/bundles/mass_conn/ING9188xx/apis.json @@ -6,46 +6,48 @@ "att_dispatch_server_can_send_now": "0x000058f1", "att_dispatch_server_request_can_send_now_event": "0x000058f7", "att_emit_general_event": "0x000059a9", - "att_server_can_send_packet_now": "0x000060d9", - "att_server_deferred_read_response": "0x000060dd", - "att_server_get_mtu": "0x000060f5", - "att_server_indicate": "0x0000616d", - "att_server_init": "0x000061f1", - "att_server_notify": "0x0000622d", - "att_server_register_packet_handler": "0x00006345", - "att_server_request_can_send_now_event": "0x00006351", - "att_set_db": "0x0000636d", - "att_set_read_callback": "0x00006381", - "att_set_write_callback": "0x0000638d", - "bd_addr_cmp": "0x000064fd", - "bd_addr_copy": "0x00006503", - "bd_addr_to_str": "0x0000650d", - "big_endian_read_16": "0x00006545", - "big_endian_read_32": "0x0000654d", - "big_endian_store_16": "0x00006561", - "big_endian_store_32": "0x0000656d", - "btstack_config": "0x000066c1", - "btstack_memory_pool_create": "0x000067ff", - "btstack_memory_pool_free": "0x00006829", - "btstack_memory_pool_get": "0x00006889", - "btstack_push_user_msg": "0x000068f1", - "btstack_push_user_runnable": "0x000068fd", - "btstack_reset": "0x00006909", - "char_for_nibble": "0x00006be5", - "eTaskConfirmSleepModeStatus": "0x00006ec9", - "gap_add_dev_to_periodic_list": "0x0000753d", - "gap_add_whitelist": "0x0000754d", - "gap_aes_encrypt": "0x00007559", - "gap_clear_white_lists": "0x00007591", - "gap_clr_adv_set": "0x0000759d", - "gap_clr_periodic_adv_list": "0x000075a9", - "gap_create_connection_cancel": "0x000075b5", - "gap_default_periodic_adv_sync_transfer_param": "0x000075c1", - "gap_disconnect": "0x000075d9", - "gap_disconnect_all": "0x00007605", - "gap_ext_create_connection": "0x00007645", - "gap_get_connection_parameter_range": "0x0000771d", - "gap_le_read_channel_map": "0x00007755", + "att_server_can_send_packet_now": "0x000060dd", + "att_server_deferred_read_response": "0x000060e1", + "att_server_get_mtu": "0x000060f9", + "att_server_indicate": "0x00006171", + "att_server_init": "0x000061f5", + "att_server_notify": "0x00006231", + "att_server_register_packet_handler": "0x00006349", + "att_server_request_can_send_now_event": "0x00006355", + "att_set_db": "0x00006371", + "att_set_read_callback": "0x00006385", + "att_set_write_callback": "0x00006391", + "bd_addr_cmp": "0x00006501", + "bd_addr_copy": "0x00006507", + "bd_addr_to_str": "0x00006511", + "big_endian_read_16": "0x00006549", + "big_endian_read_32": "0x00006551", + "big_endian_store_16": "0x00006565", + "big_endian_store_32": "0x00006571", + "btstack_config": "0x000066c5", + "btstack_get_capabilities": "0x000066d1", + "btstack_memory_pool_create": "0x00006819", + "btstack_memory_pool_free": "0x00006841", + "btstack_memory_pool_get": "0x000068a1", + "btstack_push_user_msg": "0x00006909", + "btstack_push_user_runnable": "0x00006915", + "btstack_reset": "0x00006921", + "char_for_nibble": "0x00006bfd", + "eTaskConfirmSleepModeStatus": "0x00006ee1", + "gap_add_dev_to_periodic_list": "0x00007541", + "gap_add_whitelist": "0x00007551", + "gap_aes_encrypt": "0x0000755d", + "gap_clear_white_lists": "0x00007595", + "gap_clr_adv_set": "0x000075a1", + "gap_clr_periodic_adv_list": "0x000075ad", + "gap_create_connection_cancel": "0x000075b9", + "gap_default_periodic_adv_sync_transfer_param": "0x000075c5", + "gap_disconnect": "0x000075dd", + "gap_disconnect2": "0x000075e5", + "gap_disconnect_all": "0x00007611", + "gap_ext_create_connection": "0x00007651", + "gap_get_connection_parameter_range": "0x00007729", + "gap_le_read_channel_map": "0x00007761", "gap_periodic_adv_create_sync": "0x000077c1", "gap_periodic_adv_create_sync_cancel": "0x000077e5", "gap_periodic_adv_set_info_transfer": "0x000077f1", @@ -58,289 +60,294 @@ "gap_read_remote_used_features": "0x000078d9", "gap_read_remote_version": "0x000078e5", "gap_read_rssi": "0x000078f1", - "gap_remove_whitelist": "0x000078fd", - "gap_rmv_adv_set": "0x00007979", - "gap_rmv_dev_from_periodic_list": "0x00007985", - "gap_rx_test_v2": "0x00007995", - "gap_rx_test_v3": "0x000079a5", - "gap_set_adv_set_random_addr": "0x000079f1", - "gap_set_callback_for_next_hci": "0x00007a2d", - "gap_set_connection_cte_request_enable": "0x00007a55", - "gap_set_connection_cte_response_enable": "0x00007a71", - "gap_set_connection_cte_rx_param": "0x00007a81", - "gap_set_connection_cte_tx_param": "0x00007ad5", - "gap_set_connection_parameter_range": "0x00007b21", - "gap_set_connectionless_cte_tx_enable": "0x00007b3d", - "gap_set_connectionless_cte_tx_param": "0x00007b4d", - "gap_set_connectionless_iq_sampling_enable": "0x00007ba9", - "gap_set_data_length": "0x00007c05", - "gap_set_def_phy": "0x00007c1d", - "gap_set_ext_adv_data": "0x00007c2d", - "gap_set_ext_adv_enable": "0x00007c45", - "gap_set_ext_adv_para": "0x00007cb5", - "gap_set_ext_scan_enable": "0x00007d8d", - "gap_set_ext_scan_para": "0x00007da5", - "gap_set_ext_scan_response_data": "0x00007e45", - "gap_set_host_channel_classification": "0x00007e5d", - "gap_set_periodic_adv_data": "0x00007e6d", - "gap_set_periodic_adv_enable": "0x00007edd", - "gap_set_periodic_adv_para": "0x00007eed", - "gap_set_periodic_adv_rx_enable": "0x00007f05", - "gap_set_phy": "0x00007f15", - "gap_set_random_device_address": "0x00007f31", - "gap_start_ccm": "0x00007f61", - "gap_test_end": "0x00007fa9", - "gap_tx_test_v2": "0x00007fb5", - "gap_tx_test_v4": "0x00007fcd", - "gap_update_connection_parameters": "0x00007ff1", - "gap_vendor_tx_continuous_wave": "0x00008035", - "gatt_client_cancel_write": "0x0000855d", - "gatt_client_discover_characteristic_descriptors": "0x00008583", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x000085c3", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x00008613", - "gatt_client_discover_characteristics_for_service": "0x00008663", - "gatt_client_discover_primary_services": "0x00008699", - "gatt_client_discover_primary_services_by_uuid128": "0x000086cb", - "gatt_client_discover_primary_services_by_uuid16": "0x0000870f", - "gatt_client_execute_write": "0x0000874b", - "gatt_client_find_included_services_for_service": "0x00008771", - "gatt_client_get_mtu": "0x0000879f", - "gatt_client_is_ready": "0x00008841", - "gatt_client_listen_for_characteristic_value_updates": "0x00008857", - "gatt_client_prepare_write": "0x00008879", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x000088b5", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x000088df", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x000088e5", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x00008913", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x00008919", - "gatt_client_read_multiple_characteristic_values": "0x00008947", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x00008977", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x000089a5", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x000089f1", - "gatt_client_register_handler": "0x00008a3d", - "gatt_client_reliable_write_long_value_of_characteristic": "0x00008a49", - "gatt_client_signed_write_without_response": "0x00008e79", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008f3d", - "gatt_client_write_client_characteristic_configuration": "0x00008f77", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008fc9", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008fd9", - "gatt_client_write_long_value_of_characteristic": "0x00009015", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x00009025", - "gatt_client_write_value_of_characteristic": "0x00009061", - "gatt_client_write_value_of_characteristic_without_response": "0x00009097", - "hci_add_event_handler": "0x0000a5d9", - "hci_power_control": "0x0000ad7d", - "hci_register_acl_packet_handler": "0x0000af31", - "kv_commit": "0x0000b6b9", - "kv_get": "0x0000b715", - "kv_init": "0x0000b721", - "kv_init_backend": "0x0000b7a1", - "kv_put": "0x0000b7b5", - "kv_remove": "0x0000b7c1", - "kv_remove_all": "0x0000b7f5", - "kv_value_modified": "0x0000b825", - "kv_value_modified_of_key": "0x0000b841", - "kv_visit": "0x0000b84d", - "l2cap_add_event_handler": "0x0000b8dd", - "l2cap_can_send_packet_now": "0x0000b8ed", - "l2cap_create_le_credit_based_connection_request": "0x0000baa9", - "l2cap_credit_based_send": "0x0000bbed", - "l2cap_credit_based_send_continue": "0x0000bc19", - "l2cap_disconnect": "0x0000bc95", - "l2cap_get_le_credit_based_connection_credits": "0x0000bee5", - "l2cap_get_peer_mtu_for_local_cid": "0x0000bf01", - "l2cap_init": "0x0000c2d5", - "l2cap_le_send_flow_control_credit": "0x0000c3cb", - "l2cap_max_le_mtu": "0x0000c6d5", - "l2cap_register_packet_handler": "0x0000c7fd", - "l2cap_register_service": "0x0000c809", - "l2cap_request_can_send_now_event": "0x0000c919", - "l2cap_request_connection_parameter_update": "0x0000c933", - "l2cap_send_echo_request": "0x0000ce0d", - "l2cap_unregister_service": "0x0000cecd", - "le_device_db_add": "0x0000cf25", - "le_device_db_find": "0x0000cffd", - "le_device_db_from_key": "0x0000d029", - "le_device_db_iter_cur": "0x0000d031", - "le_device_db_iter_cur_key": "0x0000d035", - "le_device_db_iter_init": "0x0000d039", - "le_device_db_iter_next": "0x0000d041", - "le_device_db_remove_key": "0x0000d067", - "ll_aes_encrypt": "0x0000d095", - "ll_config": "0x0000d111", - "ll_free": "0x0000d147", - "ll_get_heap_free_size": "0x0000d151", - "ll_hint_on_ce_len": "0x0000d165", - "ll_legacy_adv_set_interval": "0x0000d19d", - "ll_malloc": "0x0000d1ad", - "ll_query_timing_info": "0x0000d2e5", - "ll_register_hci_acl_previewer": "0x0000d331", - "ll_scan_set_fixed_channel": "0x0000d395", - "ll_set_adv_access_address": "0x0000d5ad", - "ll_set_adv_coded_scheme": "0x0000d5b9", - "ll_set_conn_acl_report_latency": "0x0000d5e9", - "ll_set_conn_coded_scheme": "0x0000d619", - "ll_set_conn_latency": "0x0000d645", - "ll_set_conn_tx_power": "0x0000d675", - "ll_set_def_antenna": "0x0000d6bd", - "ll_set_initiating_coded_scheme": "0x0000d6d9", - "ll_set_max_conn_number": "0x0000d6e5", - "nibble_for_char": "0x0001e795", - "platform_calibrate_rt_clk": "0x0001e841", + "gap_read_white_lists_size": "0x000078fd", + "gap_remove_whitelist": "0x00007909", + "gap_rmv_adv_set": "0x00007985", + "gap_rmv_dev_from_periodic_list": "0x00007991", + "gap_rx_test_v2": "0x000079a1", + "gap_rx_test_v3": "0x000079b1", + "gap_set_adv_set_random_addr": "0x000079fd", + "gap_set_callback_for_next_hci": "0x00007a21", + "gap_set_connection_cte_request_enable": "0x00007a49", + "gap_set_connection_cte_response_enable": "0x00007a65", + "gap_set_connection_cte_rx_param": "0x00007a75", + "gap_set_connection_cte_tx_param": "0x00007ac9", + "gap_set_connection_parameter_range": "0x00007b15", + "gap_set_connectionless_cte_tx_enable": "0x00007b2d", + "gap_set_connectionless_cte_tx_param": "0x00007b3d", + "gap_set_connectionless_iq_sampling_enable": "0x00007b99", + "gap_set_data_length": "0x00007bf5", + "gap_set_def_phy": "0x00007c0d", + "gap_set_ext_adv_data": "0x00007c1d", + "gap_set_ext_adv_enable": "0x00007c35", + "gap_set_ext_adv_para": "0x00007ca5", + "gap_set_ext_scan_enable": "0x00007d6d", + "gap_set_ext_scan_para": "0x00007d85", + "gap_set_ext_scan_response_data": "0x00007e25", + "gap_set_host_channel_classification": "0x00007e3d", + "gap_set_periodic_adv_data": "0x00007e4d", + "gap_set_periodic_adv_enable": "0x00007ebd", + "gap_set_periodic_adv_para": "0x00007ecd", + "gap_set_periodic_adv_rx_enable": "0x00007ee5", + "gap_set_phy": "0x00007ef5", + "gap_set_random_device_address": "0x00007f11", + "gap_start_ccm": "0x00007f2d", + "gap_test_end": "0x00007f75", + "gap_tx_test_v2": "0x00007f81", + "gap_tx_test_v4": "0x00007f99", + "gap_update_connection_parameters": "0x00007fbd", + "gap_vendor_tx_continuous_wave": "0x00008001", + "gatt_client_cancel_write": "0x00008529", + "gatt_client_discover_characteristic_descriptors": "0x0000854f", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x0000858f", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x000085df", + "gatt_client_discover_characteristics_for_service": "0x0000862f", + "gatt_client_discover_primary_services": "0x00008665", + "gatt_client_discover_primary_services_by_uuid128": "0x00008697", + "gatt_client_discover_primary_services_by_uuid16": "0x000086db", + "gatt_client_execute_write": "0x00008717", + "gatt_client_find_included_services_for_service": "0x0000873d", + "gatt_client_get_mtu": "0x0000876b", + "gatt_client_is_ready": "0x00008815", + "gatt_client_listen_for_characteristic_value_updates": "0x0000882b", + "gatt_client_prepare_write": "0x0000884d", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x00008889", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x000088b3", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x000088b9", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x000088e7", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x000088ed", + "gatt_client_read_multiple_characteristic_values": "0x0000891b", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x0000894b", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x00008979", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x000089c5", + "gatt_client_register_handler": "0x00008a11", + "gatt_client_reliable_write_long_value_of_characteristic": "0x00008a1d", + "gatt_client_signed_write_without_response": "0x00008e4d", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008f11", + "gatt_client_write_client_characteristic_configuration": "0x00008f4b", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008f9d", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008fad", + "gatt_client_write_long_value_of_characteristic": "0x00008fe9", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008ff9", + "gatt_client_write_value_of_characteristic": "0x00009035", + "gatt_client_write_value_of_characteristic_without_response": "0x0000906b", + "hci_add_event_handler": "0x0000a5a5", + "hci_power_control": "0x0000ad41", + "hci_register_acl_packet_handler": "0x0000aef5", + "kv_commit": "0x0000b66d", + "kv_get": "0x0000b6c9", + "kv_init": "0x0000b6d5", + "kv_init_backend": "0x0000b755", + "kv_put": "0x0000b769", + "kv_remove": "0x0000b775", + "kv_remove_all": "0x0000b7a9", + "kv_value_modified": "0x0000b7d9", + "kv_value_modified_of_key": "0x0000b7f5", + "kv_visit": "0x0000b801", + "l2cap_add_event_handler": "0x0000b891", + "l2cap_can_send_packet_now": "0x0000b8a1", + "l2cap_create_le_credit_based_connection_request": "0x0000ba5d", + "l2cap_credit_based_send": "0x0000bba1", + "l2cap_credit_based_send_continue": "0x0000bbcd", + "l2cap_disconnect": "0x0000bc49", + "l2cap_get_le_credit_based_connection_credits": "0x0000be99", + "l2cap_get_peer_mtu_for_local_cid": "0x0000beb5", + "l2cap_init": "0x0000c289", + "l2cap_le_send_flow_control_credit": "0x0000c37f", + "l2cap_max_le_mtu": "0x0000c689", + "l2cap_register_packet_handler": "0x0000c7b1", + "l2cap_register_service": "0x0000c7bd", + "l2cap_request_can_send_now_event": "0x0000c8cd", + "l2cap_request_connection_parameter_update": "0x0000c8e7", + "l2cap_send_echo_request": "0x0000cdc1", + "l2cap_unregister_service": "0x0000ce81", + "le_device_db_add": "0x0000ced9", + "le_device_db_find": "0x0000cfb1", + "le_device_db_from_key": "0x0000cfdd", + "le_device_db_iter_cur": "0x0000cfe5", + "le_device_db_iter_cur_key": "0x0000cfe9", + "le_device_db_iter_init": "0x0000cfed", + "le_device_db_iter_next": "0x0000cff5", + "le_device_db_remove_key": "0x0000d01b", + "ll_aes_encrypt": "0x0000d049", + "ll_config": "0x0000d0c5", + "ll_free": "0x0000d0fb", + "ll_get_capabilities": "0x0000d105", + "ll_get_heap_free_size": "0x0000d129", + "ll_get_states": "0x0000d139", + "ll_hint_on_ce_len": "0x0000d1f5", + "ll_legacy_adv_set_interval": "0x0000d22d", + "ll_malloc": "0x0000d23d", + "ll_query_timing_info": "0x0000d375", + "ll_register_hci_acl_previewer": "0x0000d3c1", + "ll_scan_set_fixed_channel": "0x0000d425", + "ll_set_adv_access_address": "0x0000d63d", + "ll_set_adv_coded_scheme": "0x0000d649", + "ll_set_conn_acl_report_latency": "0x0000d679", + "ll_set_conn_coded_scheme": "0x0000d6a9", + "ll_set_conn_latency": "0x0000d6d5", + "ll_set_conn_tx_power": "0x0000d705", + "ll_set_def_antenna": "0x0000d74d", + "ll_set_initiating_coded_scheme": "0x0000d769", + "ll_set_max_conn_number": "0x0000d775", + "nibble_for_char": "0x0001e825", + "platform_calibrate_rt_clk": "0x0001e8d1", "platform_call_on_stack": "0x00004183", - "platform_config": "0x0001e845", - "platform_delete_timer": "0x0001e969", - "platform_enable_irq": "0x0001e971", - "platform_get_current_task": "0x0001e9a9", - "platform_get_gen_os_driver": "0x0001e9cd", - "platform_get_heap_status": "0x0001e9d5", - "platform_get_link_layer_interf": "0x0001e9ed", - "platform_get_task_handle": "0x0001e9f5", - "platform_get_timer_counter": "0x0001ea15", - "platform_get_us_time": "0x0001ea19", - "platform_get_version": "0x0001ea1d", - "platform_hrng": "0x0001ea25", - "platform_install_isr_stack": "0x0001ea2d", - "platform_install_task_stack": "0x0001ea39", - "platform_patch_rf_init_data": "0x0001ea71", - "platform_printf": "0x0001ea7d", - "platform_raise_assertion": "0x0001ea91", - "platform_rand": "0x0001eaa5", - "platform_read_info": "0x0001eaa9", - "platform_read_persistent_reg": "0x0001ead9", - "platform_reset": "0x0001eae9", - "platform_rt_rc_auto_tune": "0x0001eb0d", - "platform_rt_rc_auto_tune2": "0x0001eb15", - "platform_rt_rc_tune": "0x0001eb9d", - "platform_set_abs_timer": "0x0001ebb1", - "platform_set_evt_callback": "0x0001ebb5", - "platform_set_evt_callback_table": "0x0001ebc9", - "platform_set_irq_callback": "0x0001ebd5", - "platform_set_irq_callback_table": "0x0001ebf1", - "platform_set_rf_clk_source": "0x0001ebfd", - "platform_set_rf_init_data": "0x0001ec09", - "platform_set_rf_power_mapping": "0x0001ec15", - "platform_set_timer": "0x0001ec21", - "platform_shutdown": "0x0001ec25", - "platform_switch_app": "0x0001ec29", - "platform_trace_raw": "0x0001ec55", - "platform_write_persistent_reg": "0x0001ec6d", - "printf_hexdump": "0x0001ee21", - "pvPortMalloc": "0x0001f915", - "pvTaskIncrementMutexHeldCount": "0x0001f9fd", - "pvTimerGetTimerID": "0x0001fa15", - "pxPortInitialiseStack": "0x0001fa41", - "reverse_128": "0x0001fc21", - "reverse_24": "0x0001fc27", - "reverse_256": "0x0001fc2d", - "reverse_48": "0x0001fc33", - "reverse_56": "0x0001fc39", - "reverse_64": "0x0001fc3f", - "reverse_bd_addr": "0x0001fc45", - "reverse_bytes": "0x0001fc4b", - "sm_add_event_handler": "0x0001ff39", - "sm_address_resolution_lookup": "0x00020091", - "sm_authenticated": "0x0002040d", - "sm_authorization_decline": "0x0002041b", - "sm_authorization_grant": "0x0002043b", - "sm_authorization_state": "0x0002045b", - "sm_bonding_decline": "0x00020475", - "sm_config": "0x000208d1", - "sm_config_conn": "0x000208e9", - "sm_encryption_key_size": "0x00020a9f", - "sm_just_works_confirm": "0x00021025", - "sm_le_device_key": "0x0002135d", - "sm_passkey_input": "0x000213f3", - "sm_private_random_address_generation_get": "0x000217ad", - "sm_private_random_address_generation_get_mode": "0x000217b5", - "sm_private_random_address_generation_set_mode": "0x000217c1", - "sm_private_random_address_generation_set_update_period": "0x000217e9", - "sm_register_external_ltk_callback": "0x00021925", - "sm_register_oob_data_callback": "0x00021931", - "sm_request_pairing": "0x0002193d", - "sm_send_security_request": "0x00022413", - "sm_set_accepted_stk_generation_methods": "0x00022439", - "sm_set_authentication_requirements": "0x00022445", - "sm_set_encryption_key_size_range": "0x00022451", - "sscanf_bd_addr": "0x000227ad", - "sysSetPublicDeviceAddr": "0x00022b61", - "uuid128_to_str": "0x0002330d", - "uuid_add_bluetooth_prefix": "0x00023365", - "uuid_has_bluetooth_prefix": "0x00023385", - "uxListRemove": "0x000233a1", - "uxQueueMessagesWaiting": "0x000233c9", - "uxQueueMessagesWaitingFromISR": "0x000233f1", - "uxQueueSpacesAvailable": "0x0002340d", - "uxTaskGetStackHighWaterMark": "0x00023439", - "uxTaskPriorityGet": "0x00023459", - "uxTaskPriorityGetFromISR": "0x00023475", - "vListInitialise": "0x0002352f", - "vListInitialiseItem": "0x00023545", - "vListInsert": "0x0002354b", - "vListInsertEnd": "0x0002357b", - "vPortEndScheduler": "0x00023595", - "vPortEnterCritical": "0x000235c1", - "vPortExitCritical": "0x00023605", - "vPortFree": "0x00023639", - "vPortSuppressTicksAndSleep": "0x000236cd", - "vPortValidateInterruptPriority": "0x000237f5", - "vQueueDelete": "0x00023851", - "vQueueWaitForMessageRestricted": "0x0002387d", - "vTaskDelay": "0x000238c5", - "vTaskInternalSetTimeOutState": "0x00023911", - "vTaskMissedYield": "0x00023921", - "vTaskPlaceOnEventList": "0x0002392d", - "vTaskPlaceOnEventListRestricted": "0x00023965", - "vTaskPriorityDisinheritAfterTimeout": "0x000239a5", - "vTaskPrioritySet": "0x00023a51", - "vTaskResume": "0x00023b19", - "vTaskStartScheduler": "0x00023b9d", - "vTaskStepTick": "0x00023c2d", - "vTaskSuspend": "0x00023c5d", - "vTaskSuspendAll": "0x00023d19", - "vTaskSwitchContext": "0x00023d29", - "xPortStartScheduler": "0x00023dd9", - "xQueueAddToSet": "0x00023ea1", - "xQueueCreateCountingSemaphore": "0x00023ec5", - "xQueueCreateCountingSemaphoreStatic": "0x00023f01", - "xQueueCreateMutex": "0x00023f45", - "xQueueCreateMutexStatic": "0x00023f5b", - "xQueueCreateSet": "0x00023f75", - "xQueueGenericCreate": "0x00023f7d", - "xQueueGenericCreateStatic": "0x00023fc9", - "xQueueGenericReset": "0x00024031", - "xQueueGenericSend": "0x000240bd", - "xQueueGenericSendFromISR": "0x00024229", - "xQueueGiveFromISR": "0x000242e9", - "xQueueGiveMutexRecursive": "0x0002438d", - "xQueueIsQueueEmptyFromISR": "0x000243cd", - "xQueueIsQueueFullFromISR": "0x000243f1", - "xQueuePeek": "0x00024419", - "xQueuePeekFromISR": "0x00024541", - "xQueueReceive": "0x000245ad", - "xQueueReceiveFromISR": "0x000246d9", - "xQueueRemoveFromSet": "0x0002476d", - "xQueueSelectFromSet": "0x0002478f", - "xQueueSelectFromSetFromISR": "0x000247a1", - "xQueueSemaphoreTake": "0x000247b5", - "xQueueTakeMutexRecursive": "0x00024921", - "xTaskCheckForTimeOut": "0x00024965", - "xTaskCreate": "0x000249d5", - "xTaskCreateStatic": "0x00024a31", - "xTaskGetCurrentTaskHandle": "0x00024aa1", - "xTaskGetSchedulerState": "0x00024aad", - "xTaskGetTickCount": "0x00024ac9", - "xTaskGetTickCountFromISR": "0x00024ad5", - "xTaskIncrementTick": "0x00024ae5", - "xTaskPriorityDisinherit": "0x00024bb1", - "xTaskPriorityInherit": "0x00024c45", - "xTaskRemoveFromEventList": "0x00024cd9", - "xTaskResumeAll": "0x00024d59", - "xTaskResumeFromISR": "0x00024e21", - "xTimerCreate": "0x00024ead", - "xTimerCreateStatic": "0x00024ee1", - "xTimerCreateTimerTask": "0x00024f19", - "xTimerGenericCommand": "0x00024f85", - "xTimerGetExpiryTime": "0x00024ff5", - "xTimerGetTimerDaemonTaskHandle": "0x00025015" + "platform_cancel_us_timer": "0x0001e8d5", + "platform_config": "0x0001e8e9", + "platform_create_us_timer": "0x0001ea0d", + "platform_delete_timer": "0x0001ea21", + "platform_enable_irq": "0x0001ea29", + "platform_get_current_task": "0x0001ea61", + "platform_get_gen_os_driver": "0x0001ea85", + "platform_get_heap_status": "0x0001ea8d", + "platform_get_link_layer_interf": "0x0001eaa5", + "platform_get_task_handle": "0x0001eaad", + "platform_get_timer_counter": "0x0001eacd", + "platform_get_us_time": "0x0001ead1", + "platform_get_version": "0x0001ead5", + "platform_hrng": "0x0001eadd", + "platform_install_isr_stack": "0x0001eae5", + "platform_install_task_stack": "0x0001eaf1", + "platform_patch_rf_init_data": "0x0001eb29", + "platform_printf": "0x0001eb35", + "platform_raise_assertion": "0x0001eb49", + "platform_rand": "0x0001eb5d", + "platform_read_info": "0x0001eb61", + "platform_read_persistent_reg": "0x0001eb91", + "platform_reset": "0x0001eba1", + "platform_rt_rc_auto_tune": "0x0001ebc5", + "platform_rt_rc_auto_tune2": "0x0001ebcd", + "platform_rt_rc_tune": "0x0001ec49", + "platform_set_abs_timer": "0x0001ec6d", + "platform_set_evt_callback": "0x0001ec71", + "platform_set_evt_callback_table": "0x0001ec85", + "platform_set_irq_callback": "0x0001ec91", + "platform_set_irq_callback_table": "0x0001ecad", + "platform_set_rf_clk_source": "0x0001ecb9", + "platform_set_rf_init_data": "0x0001ecc5", + "platform_set_rf_power_mapping": "0x0001ecd1", + "platform_set_timer": "0x0001ecdd", + "platform_shutdown": "0x0001ece1", + "platform_switch_app": "0x0001ece5", + "platform_trace_raw": "0x0001ed11", + "platform_write_persistent_reg": "0x0001ed29", + "printf_hexdump": "0x0001eedd", + "pvPortMalloc": "0x0001f9d1", + "pvTaskIncrementMutexHeldCount": "0x0001fab9", + "pvTimerGetTimerID": "0x0001fad1", + "pxPortInitialiseStack": "0x0001fafd", + "reverse_128": "0x0001fcdd", + "reverse_24": "0x0001fce3", + "reverse_256": "0x0001fce9", + "reverse_48": "0x0001fcef", + "reverse_56": "0x0001fcf5", + "reverse_64": "0x0001fcfb", + "reverse_bd_addr": "0x0001fd01", + "reverse_bytes": "0x0001fd07", + "sm_add_event_handler": "0x0001fff5", + "sm_address_resolution_lookup": "0x0002014d", + "sm_authenticated": "0x000204f5", + "sm_authorization_decline": "0x00020503", + "sm_authorization_grant": "0x00020523", + "sm_authorization_state": "0x00020543", + "sm_bonding_decline": "0x0002055d", + "sm_config": "0x000209b9", + "sm_config_conn": "0x000209ed", + "sm_encryption_key_size": "0x00020ba7", + "sm_just_works_confirm": "0x0002112d", + "sm_le_device_key": "0x0002146d", + "sm_passkey_input": "0x00021503", + "sm_private_random_address_generation_get": "0x000218c5", + "sm_private_random_address_generation_get_mode": "0x000218cd", + "sm_private_random_address_generation_set_mode": "0x000218d9", + "sm_private_random_address_generation_set_update_period": "0x00021901", + "sm_register_external_ltk_callback": "0x00021a3d", + "sm_register_oob_data_callback": "0x00021a49", + "sm_request_pairing": "0x00021a55", + "sm_send_security_request": "0x00022533", + "sm_set_accepted_stk_generation_methods": "0x00022559", + "sm_set_authentication_requirements": "0x00022565", + "sm_set_encryption_key_size_range": "0x00022575", + "sscanf_bd_addr": "0x000228c1", + "sysSetPublicDeviceAddr": "0x00022cbd", + "uuid128_to_str": "0x0002347d", + "uuid_add_bluetooth_prefix": "0x000234d5", + "uuid_has_bluetooth_prefix": "0x000234f5", + "uxListRemove": "0x00023511", + "uxQueueMessagesWaiting": "0x00023539", + "uxQueueMessagesWaitingFromISR": "0x00023561", + "uxQueueSpacesAvailable": "0x0002357d", + "uxTaskGetStackHighWaterMark": "0x000235a9", + "uxTaskPriorityGet": "0x000235c9", + "uxTaskPriorityGetFromISR": "0x000235e5", + "vListInitialise": "0x0002369f", + "vListInitialiseItem": "0x000236b5", + "vListInsert": "0x000236bb", + "vListInsertEnd": "0x000236eb", + "vPortEndScheduler": "0x00023705", + "vPortEnterCritical": "0x00023731", + "vPortExitCritical": "0x00023775", + "vPortFree": "0x000237a9", + "vPortSuppressTicksAndSleep": "0x0002383d", + "vPortValidateInterruptPriority": "0x00023965", + "vQueueDelete": "0x000239c1", + "vQueueWaitForMessageRestricted": "0x000239ed", + "vTaskDelay": "0x00023a35", + "vTaskInternalSetTimeOutState": "0x00023a81", + "vTaskMissedYield": "0x00023a91", + "vTaskPlaceOnEventList": "0x00023a9d", + "vTaskPlaceOnEventListRestricted": "0x00023ad5", + "vTaskPriorityDisinheritAfterTimeout": "0x00023b15", + "vTaskPrioritySet": "0x00023bc1", + "vTaskResume": "0x00023c89", + "vTaskStartScheduler": "0x00023d0d", + "vTaskStepTick": "0x00023d9d", + "vTaskSuspend": "0x00023dcd", + "vTaskSuspendAll": "0x00023e89", + "vTaskSwitchContext": "0x00023e99", + "xPortStartScheduler": "0x00023f41", + "xQueueAddToSet": "0x00024009", + "xQueueCreateCountingSemaphore": "0x0002402d", + "xQueueCreateCountingSemaphoreStatic": "0x00024069", + "xQueueCreateMutex": "0x000240ad", + "xQueueCreateMutexStatic": "0x000240c3", + "xQueueCreateSet": "0x000240dd", + "xQueueGenericCreate": "0x000240e5", + "xQueueGenericCreateStatic": "0x00024131", + "xQueueGenericReset": "0x00024199", + "xQueueGenericSend": "0x00024225", + "xQueueGenericSendFromISR": "0x00024391", + "xQueueGiveFromISR": "0x00024451", + "xQueueGiveMutexRecursive": "0x000244f5", + "xQueueIsQueueEmptyFromISR": "0x00024535", + "xQueueIsQueueFullFromISR": "0x00024559", + "xQueuePeek": "0x00024581", + "xQueuePeekFromISR": "0x000246a9", + "xQueueReceive": "0x00024715", + "xQueueReceiveFromISR": "0x00024841", + "xQueueRemoveFromSet": "0x000248d5", + "xQueueSelectFromSet": "0x000248f7", + "xQueueSelectFromSetFromISR": "0x00024909", + "xQueueSemaphoreTake": "0x0002491d", + "xQueueTakeMutexRecursive": "0x00024a89", + "xTaskCheckForTimeOut": "0x00024acd", + "xTaskCreate": "0x00024b3d", + "xTaskCreateStatic": "0x00024b99", + "xTaskGetCurrentTaskHandle": "0x00024c09", + "xTaskGetSchedulerState": "0x00024c15", + "xTaskGetTickCount": "0x00024c31", + "xTaskGetTickCountFromISR": "0x00024c3d", + "xTaskIncrementTick": "0x00024c4d", + "xTaskPriorityDisinherit": "0x00024d19", + "xTaskPriorityInherit": "0x00024dad", + "xTaskRemoveFromEventList": "0x00024e41", + "xTaskResumeAll": "0x00024ec1", + "xTaskResumeFromISR": "0x00024f89", + "xTimerCreate": "0x00025015", + "xTimerCreateStatic": "0x00025049", + "xTimerCreateTimerTask": "0x00025081", + "xTimerGenericCommand": "0x000250ed", + "xTimerGetExpiryTime": "0x0002515d", + "xTimerGetTimerDaemonTaskHandle": "0x0002517d" } \ No newline at end of file diff --git a/bundles/mass_conn/ING9188xx/meta.json b/bundles/mass_conn/ING9188xx/meta.json index 167df7d0e..439da5575 100644 --- a/bundles/mass_conn/ING9188xx/meta.json +++ b/bundles/mass_conn/ING9188xx/meta.json @@ -4,15 +4,21 @@ }, "ram": { "base": 536870912, - "size": 33104 + "size": 33040 }, "rom": { "base": 16384, - "size": 141920 + "size": 142300 + }, + "var": { + "link_layer_features": { + "addr": 154448, + "value": "3ff9ff0700000000" + } }, "version": [ 1, 9, - 41 + 56 ] } \ No newline at end of file diff --git a/bundles/mass_conn/ING9188xx/platform.bin b/bundles/mass_conn/ING9188xx/platform.bin index c243c3b0e..d03088ae7 100644 Binary files a/bundles/mass_conn/ING9188xx/platform.bin and b/bundles/mass_conn/ING9188xx/platform.bin differ diff --git a/bundles/mass_conn/inc/bluetooth.h b/bundles/mass_conn/inc/bluetooth.h index 44c58585a..8d306ff5e 100644 --- a/bundles/mass_conn/inc/bluetooth.h +++ b/bundles/mass_conn/inc/bluetooth.h @@ -40,10 +40,14 @@ typedef uint8_t bd_addr_t[BD_ADDR_LEN]; typedef enum { BD_ADDR_TYPE_LE_PUBLIC = 0, BD_ADDR_TYPE_LE_RANDOM = 0x01, - BD_ADDR_TYPE_LE_RESOVLED_PUB = 0x02, - BD_ADDR_TYPE_LE_RESOVLED_RAN = 0x03 + BD_ADDR_TYPE_LE_RESOLVED_PUB = 0x02, + BD_ADDR_TYPE_LE_RESOLVED_RAN = 0x03 } bd_addr_type_t; +// back-compatibility for typos +#define BD_ADDR_TYPE_LE_RESOVLED_PUB BD_ADDR_TYPE_LE_RESOLVED_PUB +#define BD_ADDR_TYPE_LE_RESOVLED_RAN BD_ADDR_TYPE_LE_RESOLVED_RAN + /** * @brief link key */ @@ -718,7 +722,7 @@ typedef enum { #define SM_AUTHREQ_NO_BONDING 0x00 #define SM_AUTHREQ_BONDING 0x01 #define SM_AUTHREQ_MITM_PROTECTION 0x04 -#define SM_AUTHREQ_SC 0x08 +#define SM_AUTHREQ_SC 0x08 // support of LE Secure Connections pairing // Key distribution flags used by spec #define SM_KEYDIST_ENC_KEY 0X01 diff --git a/bundles/mass_conn/inc/btstack_defines.h b/bundles/mass_conn/inc/btstack_defines.h index a8d08006c..25f1463b0 100644 --- a/bundles/mass_conn/inc/btstack_defines.h +++ b/bundles/mass_conn/inc/btstack_defines.h @@ -385,6 +385,20 @@ */ #define SM_EVENT_STATE_CHANGED 0xDC + /** + * @format H1B1 + * @param handle + * @param show calculated numeric value that needs to be compared + */ +#define SM_EVENT_NUMERIC_COMPARISON_REQUEST 0xDD + +/** + * @format PP + * @param irk + * @param dhk + */ +#define SM_EVENT_IRK_DHK_RESULT 0xDE + // GAP /** diff --git a/bundles/mass_conn/inc/btstack_event.h b/bundles/mass_conn/inc/btstack_event.h index e5ab49a55..dc87fa82a 100644 --- a/bundles/mass_conn/inc/btstack_event.h +++ b/bundles/mass_conn/inc/btstack_event.h @@ -107,6 +107,21 @@ uint32_t btstack_push_user_runnable(f_btstack_user_runnable fun, void *data, con */ uint8_t btstack_reset(void); +typedef struct btstack_capabilities +{ + uint16_t adv_set_num; // max number of advertising sets + uint16_t conn_num; // max number of connections + uint16_t max_mtu; // max MTU + uint16_t device_db_num; // max number of devices in database +} btstack_capabilities_t; + +/** + * @brief Get BT stack capabilities. + * + * @param[out] capabilities see `btstack_capabilities_t`. + */ +void btstack_get_capabilities(btstack_capabilities_t *capabilities); + /*** * @brief Get subevent code for le event * @param event packet @@ -780,6 +795,26 @@ static __INLINE hci_con_handle_t sm_event_numeric_comparison_get_handle(const ui return little_endian_read_16(event, 2); } +/** + * @brief Get field addr_type from event SM_EVENT_NUMERIC_COMPARISON_REQUEST + * @param event packet + * @return addr_type + * @note: btstack_type 1 + */ +static __INLINE uint8_t sm_event_numeric_comparison_get_addr_type(const uint8_t * event){ + return *decode_event_offset(event, uint8_t, 4); +} + +/** + * @brief Get field address from event SM_EVENT_NUMERIC_COMPARISON_REQUEST + * @param event packet + * @param Pointer to storage for address + * @note: btstack_type B + */ +static __INLINE void sm_event_numeric_comparison_get_address(const uint8_t * event, uint8_t * address){ + reverse_bd_addr(decode_event_offset(event, uint8_t, 5), address); +} + /** * @brief Get field compare value from event SM_EVENT_NUMERIC_COMPARISON_REQUEST * @param event packet @@ -790,6 +825,24 @@ static __INLINE uint32_t sm_event_numeric_comparison_get_compare_value(const uin return little_endian_read_32(event, 11); } +/** + * @brief Get IRK from event SM_EVENT_IRK_DHK_RESULT + * @param event packet + * @return irk + */ +static __INLINE const uint8_t *sm_event_irk_dhk_result_get_irk(const uint8_t *event) { + return *decode_event_offset(event, uint8_t *, 2); +} + +/** + * @brief Get DHK from event SM_EVENT_IRK_DHK_RESULT + * @param event packet + * @return dhk + */ +static __INLINE const uint8_t *sm_event_irk_dhk_result_get_dhk(const uint8_t *event) { + return *decode_event_offset(event, uint8_t *, 2 + sizeof(uintptr_t)); +} + /** * @brief Get field handle from event GAP_EVENT_SECURITY_LEVEL * @param event packet diff --git a/bundles/mass_conn/inc/gap.h b/bundles/mass_conn/inc/gap.h index 94ec41d4e..020bb0b27 100644 --- a/bundles/mass_conn/inc/gap.h +++ b/bundles/mass_conn/inc/gap.h @@ -54,11 +54,27 @@ uint8_t gap_set_random_device_address(const uint8_t *address); /** * @brief Disconnect connection with handle * + * This is equivalent to `gap_disconnect2(handle, 0x13)`. + * * @param handle Used to identify an advertising set. Range: 0x00 to 0xEF * @return 0: Message is sent out or the connection already release */ uint8_t gap_disconnect(hci_con_handle_t handle); +/** + * @brief Disconnect connection with handle + * + * @param handle Used to identify an advertising set. Range: 0x00 to 0xEF + * @param reason Reason: + * - Authentication Failure error code (0x05) + * - Other End Terminated Connection error codes (0x13 to 0x15) + * - Unsupported Remote Feature error code (0x1A) + * - Pairing with Unit Key Not Supported error code (0x29) + * - Unacceptable Connection Parameters error code (0x3B) + * @return 0: Message is sent out or the connection already release + */ +uint8_t gap_disconnect2(hci_con_handle_t handle, uint8_t reason); + /** * @brief disconnect multi-connections */ @@ -70,7 +86,7 @@ void gap_disconnect_all(void); * @param[in] addtype BLE address type * @return 0: Message is sent to controller */ -uint8_t gap_add_whitelist(const uint8_t *address,bd_addr_type_t addtype); +uint8_t gap_add_whitelist(const uint8_t *address, bd_addr_type_t addtype); /** * @brief remove whitelist from controller @@ -79,7 +95,7 @@ uint8_t gap_add_whitelist(const uint8_t *address,bd_addr_type_t addtype); * @param addtype BLE address type * @return 0: Message is sent to controller */ -uint8_t gap_remove_whitelist(const uint8_t *address,bd_addr_type_t addtype); +uint8_t gap_remove_whitelist(const uint8_t *address, bd_addr_type_t addtype); /** * @brief clear white lists in controller @@ -88,6 +104,122 @@ uint8_t gap_remove_whitelist(const uint8_t *address,bd_addr_type_t addtype); */ uint8_t gap_clear_white_lists(void); +/** + * @brief read white lists size in controller + * + * @return 0: message sent out others: failed + */ +uint8_t gap_read_white_lists_size(void); + +/** + * @brief Add one device to the resolving list used to generate and resolve + * Resolvable Private Addresses in the Controller. + * + * @param address peer identity address + * @param addtype peer identity address type + * @param peer_irk IRK of the peer device + * @param local_irk IRK of the local device + * @return 0: message sent out others: failed + */ +// uint8_t gap_add_dev_to_resolving_list(const uint8_t *address, bd_addr_type_t addtype, +// const uint8_t *peer_irk, const uint8_t *local_irk); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Remove one device from the resolving list used to resolve Resolvable + * Private Addresses in the Controller. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_remove_dev_from_resolving_list(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Remove all devices from the resolving list used to resolve Resolvable + * Private Addresses in the Controller. + * + * @return 0: message sent out others: failed + */ +// uint8_t gap_clear_resolving_list(void); +// WARNING: ^^^ this API is not available in this release + + +// LE Privacy Mode +typedef enum privacy_mode +{ + PRIVACY_MODE_NETWORK = 0, // Network Privacy Mode (default) + // Identity address is not accepted if IRK is available + PRIVACY_MODE_DEVICE = 1, // Device Privacy Mode + // Identity address is accepted even if IRK is available +} privacy_mode_t; + +/** + * @brief Specify the privacy mode to be used for a given entry on the resolving list. + * + * @param address peer identity address + * @param addtype peer identity address type + * @param privacy_mode privacy mode for this peer device + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_privacy_mode(const uint8_t *address, bd_addr_type_t addtype, +// privacy_mode_t privacy_mode); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Get the current peer Resolvable Private Address being used for the + * corresponding peer Public and Random (static) Identity Address. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_read_peer_resolving_addr(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Get the current local Resolvable Private Address being used for the + * corresponding peer Identity Address. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_read_local_resolving_addr(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Enable resolution of Resolvable Private Addresses in the Controller. + * + * @param enable address resolution enable + * 0: disabled (default) + * 1: enabled + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_addr_resolution_enable(const uint8_t enable); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Set the length of time the Controller uses a Resolvable Private Address + * before a new resolvable private address is generated and starts being used. + * + * @param rpa_timeout RPA_Timeout measured in seconds + * Range: 0x0001 to 0x0E10 + * Time range: 1 s to 1 hour + * Default: 0x0384 (900 s or 15 minutes) + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_resolvable_private_addr_timeout(uint16_t rpa_timeout); +// WARNING: ^^^ this API is not available in this release + + /** * @brief read rssi value of a appointed hci connection * @@ -290,13 +422,13 @@ typedef enum scan_filter_policy SCAN_ACCEPT_WLIST_EXCEPT_NOT_DIRECTED, // Accept all advertising packets except directed advertising packets // where the initiator's identity address does not address this device - SCAN_ACCEPT_ALL_EXCEPT_IDENTITY_NOT_MATCH, + // SCAN_ACCEPT_ALL_EXCEPT_IDENTITY_NOT_MATCH, // Accept all advertising packets except: // 1. advertising packets where the advertiser's identity address is not in // the White List; and // 2. directed advertising packets where the initiator's identity address // does not address this device - SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH + // SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH } scan_filter_policy_t; /** @@ -318,6 +450,9 @@ uint8_t gap_set_ext_scan_para(const bd_addr_type_t own_addr_type, const scan_fil /** * @brief to set the extended scan response data for an advertising set * + * Note: Scan response data is cleared after `gap_set_ext_adv_para()` on the same + * advertising set handle. + * * @param adv_handle handle of advertising set handle * * @param length length of advertising data @@ -482,6 +617,9 @@ typedef enum adv_data_frag_pref /** * @brief to set extended advertising data * + * Note: Advertising data is cleared after `gap_set_ext_adv_para()` on the same + * advertising set handle. + * * @param adv_handle advertising set handle. * * @param length advertising data length @@ -497,6 +635,9 @@ uint8_t gap_set_ext_adv_data(const uint8_t adv_handle, uint16_t length, const ui /** * @brief LE Set Periodic Advertising Data command * + * Note: Advertising data is cleared after `gap_set_ext_adv_para()` and + * `gap_set_periodic_adv_para()` on the same advertising set handle. + * * @param adv_handle advertising set handle. * * @param length advertising data length (<= 1650 bytes) @@ -723,6 +864,7 @@ typedef struct { // Supervision timeout for the LE Link, unit is 10ms uint16_t supervision_timeout; // Informative parameter recommending the min/max length of connection event needed for this LE connection + // unit is 625us uint16_t min_ce_len; uint16_t max_ce_len; } conn_para_t; diff --git a/bundles/mass_conn/inc/le_device_db.h b/bundles/mass_conn/inc/le_device_db.h index b81d04f5a..68de61b61 100644 --- a/bundles/mass_conn/inc/le_device_db.h +++ b/bundles/mass_conn/inc/le_device_db.h @@ -16,14 +16,15 @@ typedef struct le_device_memory_db { // Identification uint8_t addr_type; - uint8_t key_size; - uint8_t authenticated; - uint8_t authorized; + uint8_t key_size; + uint8_t authenticated; + uint8_t authorized:1; + uint8_t sm_sc:1; bd_addr_t addr; sm_key_t irk; - // Stored pairing information allows to re-establish an enncrypted connection + // Stored pairing information allows to re-establish an encrypted connection // with a peripheral that doesn't have any persistent memory sm_key_t ltk; uint16_t ediv; @@ -36,7 +37,6 @@ typedef struct le_device_memory_db { // Signed Writes by us sm_key_t local_csrk; uint32_t local_counter; - } le_device_memory_db_t; #pragma pack (pop) diff --git a/bundles/mass_conn/inc/ll_api.h b/bundles/mass_conn/inc/ll_api.h index 24558161d..f84ac1c76 100644 --- a/bundles/mass_conn/inc/ll_api.h +++ b/bundles/mass_conn/inc/ll_api.h @@ -33,6 +33,25 @@ typedef enum ll_config_item_e LL_CFG_FEATURE_SET_MASK, } ll_config_item_t; +typedef struct ll_capabilities +{ + const uint8_t *features; // Link Layer features + uint16_t adv_set_num; // max number of advertising sets + uint16_t conn_num; // max number of connections + uint16_t whitelist_size; // size of whitelists + uint16_t resolving_list_size; // size of resolving list + uint16_t periodic_advertiser_list_size; // size of periodic advertiser list + uint16_t adv_dup_filter_size; // size of items for filtering + // advertising duplication +} ll_capabilities_t; + +/** + * @brief Get Link Layer capabilities. + * + * @param[out] capabilities see `ll_capabilities_t`. + */ +void ll_get_capabilities(ll_capabilities_t *capabilities); + /** **************************************************************************************** * @brief Config LL specific parameters @@ -43,6 +62,26 @@ typedef enum ll_config_item_e */ void ll_config(ll_config_item_t item, uint32_t value); +/** + **************************************************************************************** + * @brief Get states of LL + * + * Note: Parameters can be set to NULL if the relevant states are not needed. + * + * @param[out] adv_states[1] states of all advertising sets + * Bit[n]: advertising set n is enabled + * @param[out] conn_states[1] states of all connections + * Bit[n]: connection n is active + * @param[out] sync_states[1] states of all synchronized periodic adv sets + * Bit[n]: sync_handle n is active + * @param[out] other_states[1] other states: + * Bit[0]: if scanning is ON + * Bit[1]: if initiating is ON + **************************************************************************************** + */ +void ll_get_states(uint32_t *adv_states, uint32_t *conn_states, + uint32_t *sync_states, uint32_t *other_states); + /** **************************************************************************************** * @brief set Tx power range diff --git a/bundles/mass_conn/inc/os/FreeRTOSConfig.h b/bundles/mass_conn/inc/os/FreeRTOSConfig.h index a852cbdce..30c697203 100644 --- a/bundles/mass_conn/inc/os/FreeRTOSConfig.h +++ b/bundles/mass_conn/inc/os/FreeRTOSConfig.h @@ -91,17 +91,27 @@ #ifdef POWER_SAVING #define configUSE_TICKLESS_IDLE 1 #endif -#define configSYSTICK_CLOCK_HZ 32768 -#ifdef TARGET_FPGA -#define configCPU_CLOCK_HZ ( ( unsigned long ) 32000000 ) +#define configSYSTICK_CLOCK_HZ RTC_CLK_FREQ + +#if (INGCHIPS_FAMILY == INGCHIPS_FAMILY_918) +#define configCPU_CLOCK_HZ PLL_CLK_FREQ +#elif (INGCHIPS_FAMILY == INGCHIPS_FAMILY_916) +#define configCPU_CLOCK_HZ SYSCTRL_GetHClk() #else -#define configCPU_CLOCK_HZ ( ( unsigned long ) 48000000 ) +#error unknow chip family #endif + +#if (configSYSTICK_CLOCK_HZ == 32768) #define configTICK_RATE_HZ ( ( TickType_t ) 1024 ) +#elif (configSYSTICK_CLOCK_HZ == 50000) +#define configTICK_RATE_HZ ( ( TickType_t ) 1000 ) +#else +#error configSYSTICK_CLOCK_HZ +#endif #define configMAX_PRIORITIES ( 15 ) #define configMINIMAL_STACK_SIZE ( ( unsigned short ) 128 ) #ifndef configTOTAL_HEAP_SIZE -#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 23520 ) ) +#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 24896 ) ) #endif #define configMAX_TASK_NAME_LEN ( 16 ) #define configUSE_TRACE_FACILITY 0 diff --git a/bundles/mass_conn/inc/platform_api.h b/bundles/mass_conn/inc/platform_api.h index 78ed07d0b..a81fe121f 100644 --- a/bundles/mass_conn/inc/platform_api.h +++ b/bundles/mass_conn/inc/platform_api.h @@ -113,7 +113,7 @@ typedef enum PLATFORM_CB_EVT_LLE_INIT, // when allocation on heap fails (heap out of memory) - // NOTE: param (void *data) is cased from an integer identifying which heap is OOM: + // NOTE: param (void *data) is casted from an integer identifying which heap is OOM: // * 0: FreeRTOS's heap; // * 1: Link Layer's heap; // * 2: Link Layer's task pool. @@ -327,7 +327,7 @@ typedef struct /** **************************************************************************************** - * @brief Get heap status + * @brief Get status of built-in RTOS's heap * * @param[out] status heap status **************************************************************************************** @@ -374,7 +374,7 @@ void platform_switch_app(const uint32_t app_addr); * in power saving mode. * * For ING918: the least FOUR significant bits of `value` are saved; - * For ING916: the least TWO significant bits of `value` are saved. + * For ING916: the least FIVE significant bits of `value` are saved. * * @param[in] value value **************************************************************************************** @@ -464,8 +464,13 @@ typedef enum PLATFORM_CFG_PS_DBG_4, // Debugging parameters for ING916. Default (0) // Bit [0]: `platform_shutdown` uses DEEPER SLEEP (1) or SLEEP (0) PLATFORM_CFG_FAST_DEEP_SLEEP_TIME_REDUCTION, // sleep time reduction (fast deep sleep mode) in us. - // Requirement: < PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION + // Requirement: <= PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION + // When equal to PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION, fast deep sleep mode is not used // Only available for ING916 (default: ~2000us) + PLATFORM_CFG_AUTO_REDUCE_CLOCK_FREQ, // automatic reduce CPU clock frequency in these circumstances: + // * the default IDLE procedure + // * when entering sleep modes + // Only available for ING916 (default: Enabled) } platform_cfg_item_t; typedef enum @@ -604,7 +609,15 @@ uint64_t platform_get_us_time(void); */ void platform_printf(const char *format, ...); -// NOTE: for debug only +/** + **************************************************************************************** + * @brief Set public device address + * + * NOTE: This is for debug only. + * + * @param[in] addr device address in little-endian. + **************************************************************************************** + */ void sysSetPublicDeviceAddr(const unsigned char *addr); // set rf source @@ -783,6 +796,55 @@ void platform_set_abs_timer(f_platform_timer_callback callback, uint32_t abs_tim */ void platform_delete_timer(f_platform_timer_callback callback); +typedef void * platform_us_timer_handle_t; + +/** + **************************************************************************************** + * @brief Callback function of microsecond (us) resolution timer + * + * @param[in] timer_handle handle of this timer + * @param[in] time_us internal timer counter when invoke this callback + * @param[in] param user parameter + * @return (must be NULL) + **************************************************************************************** + */ +typedef void * (* f_platform_us_timer_callback)(platform_us_timer_handle_t timer_handle, + uint64_t time_us, void *param); + +/** + **************************************************************************************** + * @brief Setup a single-shot platform timer with microsecond (us) resolution + * + * Although `abs_time` is in microsecond (us), callback is **not guaranteed** + * to be invoked with such resolution. + * + * This type of timers are much like `platform_set_timer`, except that: + * 1. resolution is higher; + * 2. callback is invoked in the context of an ISR. + * + * @param[in] abs_time when `platform_get_us_timer() == abs_time`, callback is invoked. + * @param[in] callback the callback function + * @param[in] param user parameter + * @return a non-NULL value when succeeded. Otherwise, NULL. + **************************************************************************************** + */ +platform_us_timer_handle_t platform_create_us_timer(uint64_t abs_time, + f_platform_us_timer_callback callback, void *param); + +/** + **************************************************************************************** + * @brief Cancel a platform timer previously created by `platform_create_us_timer` + * + * When a timer not needed any more, use this API to cancel it. + * + * @param[in] timer_handle handle of the timer + * @return 0 if succeeded else non-0 + * Note: non-0 means the callback function of the timer + * is executing. + **************************************************************************************** + */ +int platform_cancel_us_timer(platform_us_timer_handle_t timer_handle); + /** **************************************************************************************** * @brief Install a new RTOS stack for a specific platform task diff --git a/bundles/mass_conn/inc/sm.h b/bundles/mass_conn/inc/sm.h index 6dfc62bab..7e57fb927 100644 --- a/bundles/mass_conn/inc/sm.h +++ b/bundles/mass_conn/inc/sm.h @@ -55,14 +55,21 @@ typedef enum { /** * @brief Security configurations * + * These configurations can updated dynamically. Be careful: dynamically toggle + * `enable` will cause problems when SM is still working on any connection. + * + * After IRK/DHK are derived from `persistent`, `SM_EVENT_IRK_DHK_RESULT` is emitted. + * * @param[in] enable Enable (Bypass) SM (default: Disabled) * When disabled, SM can be enabled per connection by `sm_config_conn`. * @param[in] io_capability Default IO Capabilities * @param[in] request_security Let peripheral request an encrypted connection right after connecting * Not used normally. Bonding is triggered by access to protected attributes in ATT Server * @param[in] persistent persistent data for security & privacy + * @return 0 if ok else non-0. Possible causes for non-0 return value: + * * generation of internal keys(IRK/ERK) are under going. */ -void sm_config(uint8_t enable, +int sm_config(uint8_t enable, io_capability_t io_capability, int request_security, const sm_persistent_t *persistent); @@ -101,18 +108,71 @@ void sm_private_random_address_generation_set_update_period(int period_ms); const uint8_t *sm_private_random_address_generation_get(void); /** + * @brief Registers OOB Data Callback. + * + * The callback should set the oob_data and return 1 if OOB data is available. + * + * Signature of `get_oob_data_callback`: + * @param[in] address_type address type + * @param[in] addr address + * @param[out] oob_data OOB data (type `sm_key_t`) + * @return 1 if OOB data is available, else 0. * - * @brief Registers OOB Data Callback. The callback should set the oob_data and return 1 if OOB data is availble * @param get_oob_data_callback */ -void sm_register_oob_data_callback( int (*get_oob_data_callback)(uint8_t addres_type, bd_addr_t addr, uint8_t * oob_data)); +void sm_register_oob_data_callback( int (*get_oob_data_callback)(uint8_t address_type, bd_addr_t addr, uint8_t * oob_data)); /** + * @brief Registers secure pairing OOB Data Callback. * - * @brief Registers secure pairing OOB Data Callback. The callback should set the peer_confirm & peer_random and return 1 if OOB data is availble - * @param get_oob_data_callback + * The callback should set the peer_confirm & peer_random and return 1 + * if OOB data is available. + * + * Signature of `get_sc_oob_data_callback`: + * @param[in] address_type address type + * @param[in] addr address + * @param[out] peer_confirm peer confirm value (type `sm_key_t`) + * @param[out] peer_random peer random value (type `sm_key_t`) + * @return 1 if OOB data is available, else 0. + * + * @param get_sc_oob_data_callback */ -// void sm_register_sc_oob_data_callback( int (*get_sc_oob_data_callback)(uint8_t addres_type, bd_addr_t addr, uint8_t *peer_confirm, uint8_t *peer_random)); +// void sm_register_sc_oob_data_callback(int (*get_sc_oob_data_callback)(uint8_t address_type, bd_addr_t addr, uint8_t *peer_confirm, uint8_t *peer_random)); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief (When secure pairing is used and OOB is selected) Start generate local + * OOB data (_confirm_ and _random_). + * + * After generated, _confirm_ and _random_ are passed to the callback. + * + * Each call of this function will generate a new P256 key pair that will used + * in **all** subsequent pairing attempts. When OOB is used, it is Developers's + * responsibility to refresh key pair properly. If OOB is not used, SM will + * re-generate a new key pair for each pairing attempt. + * + * BLUETOOTH CORE SPECIFICATION Version 5.4 | Vol 3, Part H, Section 2.3.6: + * + * > To protect a device's private key, a device should implement a method to + * > prevent an attacker from retrieving useful information about the device's private + * > key. For this purpose, a device should change its private key after every pairing + * > (successful or failed). Otherwise, it should change its private key whenever S + + * > 3F > 8, where S is the number of successful pairings and F the number of + * > failed attempts since the key was last changed. + * + * App can then pass these information together with device address to peer + * through OOB communication. + * + * Signature of `callback`: + * @param[out] confirm local confirm value (type `sm_key_t`) + * @param[out] random local random value (type `sm_key_t`) + * + * @param callback + * @return 0: started without error + * -1: previous OOB data is not generated yet + */ +// int sm_sc_generate_oob_data(void (*callback)(const uint8_t *confirm, const uint8_t *random)); // WARNING: ^^^ this API is not available in this release @@ -235,14 +295,6 @@ int sm_le_device_key(hci_con_handle_t con_handle); // WARNING: ^^^ this API is not available in this release -/** - * @brief When secure pairing is used and OOB is selected, use this function to prepare OOB data and share to peer. - * @param handle - */ -// int sm_sc_generate_oob_data(void (*callback)(uint8_t *peer_confirm, uint8_t *peer_random)); -// WARNING: ^^^ this API is not available in this release - - /** * * @brief Register a callback for get external LTK (for empty EDIV & Random) diff --git a/bundles/mini/ING9168xx/apis.json b/bundles/mini/ING9168xx/apis.json index bd2a23d3e..b5cb7967c 100644 --- a/bundles/mini/ING9168xx/apis.json +++ b/bundles/mini/ING9168xx/apis.json @@ -1,347 +1,354 @@ { - "att_dispatch_client_can_send_now": "0x020042e1", - "att_dispatch_client_request_can_send_now_event": "0x020042e7", - "att_dispatch_register_client": "0x020042ed", - "att_dispatch_register_server": "0x02004301", - "att_dispatch_server_can_send_now": "0x02004315", - "att_dispatch_server_request_can_send_now_event": "0x0200431b", - "att_emit_general_event": "0x020043cd", - "att_server_can_send_packet_now": "0x02004b01", - "att_server_deferred_read_response": "0x02004b05", - "att_server_get_mtu": "0x02004b1d", - "att_server_indicate": "0x02004b89", - "att_server_init": "0x02004c0d", - "att_server_notify": "0x02004c49", - "att_server_register_packet_handler": "0x02004d61", - "att_server_request_can_send_now_event": "0x02004d6d", - "att_set_db": "0x02004d89", - "att_set_read_callback": "0x02004d9d", - "att_set_write_callback": "0x02004da9", - "bd_addr_cmp": "0x02004f79", - "bd_addr_copy": "0x02004f7f", - "bd_addr_to_str": "0x02004f89", - "big_endian_read_16": "0x02004fc1", - "big_endian_read_32": "0x02004fc9", - "big_endian_store_16": "0x02004fdd", - "big_endian_store_32": "0x02004fe9", - "btstack_config": "0x02005015", - "btstack_memory_pool_create": "0x02005153", - "btstack_memory_pool_free": "0x0200517d", - "btstack_memory_pool_get": "0x020051dd", - "btstack_push_user_msg": "0x02005245", - "btstack_push_user_runnable": "0x02005251", - "btstack_reset": "0x0200525d", - "char_for_nibble": "0x02005483", - "eTaskConfirmSleepModeStatus": "0x020057bd", - "gap_add_dev_to_periodic_list": "0x02005e2d", - "gap_add_whitelist": "0x02005e3d", - "gap_aes_encrypt": "0x02005e49", - "gap_clear_white_lists": "0x02005e81", - "gap_clr_adv_set": "0x02005e8d", - "gap_clr_periodic_adv_list": "0x02005e99", - "gap_create_connection_cancel": "0x02005ea5", - "gap_default_periodic_adv_sync_transfer_param": "0x02005eb1", - "gap_disconnect": "0x02005ec9", - "gap_disconnect_all": "0x02005ef5", - "gap_ext_create_connection": "0x02005f35", - "gap_get_connection_parameter_range": "0x0200600d", - "gap_le_read_channel_map": "0x02006045", - "gap_periodic_adv_create_sync": "0x020060b1", - "gap_periodic_adv_create_sync_cancel": "0x020060d5", - "gap_periodic_adv_set_info_transfer": "0x020060e1", - "gap_periodic_adv_sync_transfer": "0x020060f1", - "gap_periodic_adv_sync_transfer_param": "0x02006101", - "gap_periodic_adv_term_sync": "0x0200611d", - "gap_read_antenna_info": "0x020061a5", - "gap_read_periodic_adv_list_size": "0x020061b1", - "gap_read_phy": "0x020061bd", - "gap_read_remote_used_features": "0x020061c9", - "gap_read_remote_version": "0x020061d5", - "gap_read_rssi": "0x020061e1", - "gap_remove_whitelist": "0x020061ed", - "gap_rmv_adv_set": "0x02006269", - "gap_rmv_dev_from_periodic_list": "0x02006275", - "gap_rx_test_v2": "0x02006285", - "gap_rx_test_v3": "0x02006295", - "gap_set_adv_set_random_addr": "0x020062e1", - "gap_set_callback_for_next_hci": "0x0200631d", - "gap_set_connection_cte_request_enable": "0x0200633d", - "gap_set_connection_cte_response_enable": "0x02006359", - "gap_set_connection_cte_rx_param": "0x02006369", - "gap_set_connection_cte_tx_param": "0x020063bd", - "gap_set_connection_parameter_range": "0x02006409", - "gap_set_connectionless_cte_tx_enable": "0x02006421", - "gap_set_connectionless_cte_tx_param": "0x02006431", - "gap_set_connectionless_iq_sampling_enable": "0x0200648d", - "gap_set_data_length": "0x020064e9", - "gap_set_def_phy": "0x02006501", - "gap_set_ext_adv_data": "0x02006511", - "gap_set_ext_adv_enable": "0x02006529", - "gap_set_ext_adv_para": "0x02006599", - "gap_set_ext_scan_enable": "0x02006669", - "gap_set_ext_scan_para": "0x02006681", - "gap_set_ext_scan_response_data": "0x02006721", - "gap_set_host_channel_classification": "0x02006739", - "gap_set_periodic_adv_data": "0x02006749", - "gap_set_periodic_adv_enable": "0x020067b9", - "gap_set_periodic_adv_para": "0x020067c9", - "gap_set_periodic_adv_rx_enable": "0x020067e1", - "gap_set_phy": "0x020067f1", - "gap_set_random_device_address": "0x0200680d", - "gap_start_ccm": "0x0200683d", - "gap_test_end": "0x02006885", - "gap_tx_test_v2": "0x02006891", - "gap_tx_test_v4": "0x020068a9", - "gap_update_connection_parameters": "0x020068cd", - "gap_vendor_tx_continuous_wave": "0x0200690d", - "gatt_client_cancel_write": "0x02006e35", - "gatt_client_discover_characteristic_descriptors": "0x02006e5b", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x02006e9b", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x02006eeb", - "gatt_client_discover_characteristics_for_service": "0x02006f3b", - "gatt_client_discover_primary_services": "0x02006f71", - "gatt_client_discover_primary_services_by_uuid128": "0x02006fa3", - "gatt_client_discover_primary_services_by_uuid16": "0x02006fe7", - "gatt_client_execute_write": "0x02007025", - "gatt_client_find_included_services_for_service": "0x0200704b", - "gatt_client_get_mtu": "0x02007079", - "gatt_client_is_ready": "0x0200713d", - "gatt_client_listen_for_characteristic_value_updates": "0x02007153", - "gatt_client_prepare_write": "0x02007173", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x020071af", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x020071d9", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x020071df", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x0200720d", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x02007213", - "gatt_client_read_multiple_characteristic_values": "0x02007241", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x02007271", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x0200729f", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x020072eb", - "gatt_client_register_handler": "0x02007335", - "gatt_client_reliable_write_long_value_of_characteristic": "0x02007341", - "gatt_client_signed_write_without_response": "0x02007749", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x0200780d", - "gatt_client_write_client_characteristic_configuration": "0x02007847", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x02007899", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x020078a9", - "gatt_client_write_long_value_of_characteristic": "0x020078e5", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x020078f5", - "gatt_client_write_value_of_characteristic": "0x02007931", - "gatt_client_write_value_of_characteristic_without_response": "0x02007967", - "hci_add_event_handler": "0x02008f41", - "hci_power_control": "0x020096d5", - "hci_register_acl_packet_handler": "0x02009889", - "kv_commit": "0x02009ee5", - "kv_get": "0x02009f41", - "kv_init": "0x02009f4d", - "kv_init_backend": "0x02009fc9", - "kv_put": "0x02009fdd", - "kv_remove": "0x02009fe9", - "kv_remove_all": "0x0200a01d", - "kv_value_modified": "0x0200a04d", - "kv_value_modified_of_key": "0x0200a069", - "kv_visit": "0x0200a075", - "l2cap_add_event_handler": "0x0200a105", - "l2cap_can_send_packet_now": "0x0200a115", - "l2cap_create_le_credit_based_connection_request": "0x0200a2d9", - "l2cap_credit_based_send": "0x0200a421", - "l2cap_credit_based_send_continue": "0x0200a44d", - "l2cap_disconnect": "0x0200a4c9", - "l2cap_get_le_credit_based_connection_credits": "0x0200a6b5", - "l2cap_get_peer_mtu_for_local_cid": "0x0200a6d1", - "l2cap_init": "0x0200ab11", - "l2cap_le_send_flow_control_credit": "0x0200ac07", - "l2cap_max_le_mtu": "0x0200af15", - "l2cap_register_packet_handler": "0x0200b03d", - "l2cap_register_service": "0x0200b049", - "l2cap_request_can_send_now_event": "0x0200b159", - "l2cap_request_connection_parameter_update": "0x0200b173", - "l2cap_send_echo_request": "0x0200b655", - "l2cap_unregister_service": "0x0200b735", - "le_device_db_add": "0x0200b78d", - "le_device_db_find": "0x0200b855", - "le_device_db_from_key": "0x0200b881", - "le_device_db_iter_cur": "0x0200b889", - "le_device_db_iter_cur_key": "0x0200b88d", - "le_device_db_iter_init": "0x0200b891", - "le_device_db_iter_next": "0x0200b899", - "le_device_db_remove_key": "0x0200b8bf", - "ll_adjust_conn_peer_tx_power": "0x0200b8ed", - "ll_aes_encrypt": "0x0200b915", - "ll_config": "0x0200b989", - "ll_free": "0x0200b9bf", - "ll_get_heap_free_size": "0x0200b9c9", - "ll_hint_on_ce_len": "0x0200b9dd", - "ll_legacy_adv_set_interval": "0x0200ba15", - "ll_malloc": "0x0200ba25", - "ll_register_hci_acl_previewer": "0x0200bb3d", - "ll_scan_set_fixed_channel": "0x0200bba1", - "ll_set_adv_access_address": "0x0200bdb9", - "ll_set_adv_coded_scheme": "0x0200bdc5", - "ll_set_conn_acl_report_latency": "0x0200bdf5", - "ll_set_conn_coded_scheme": "0x0200be21", - "ll_set_conn_latency": "0x0200be49", - "ll_set_conn_tx_power": "0x0200be75", - "ll_set_def_antenna": "0x0200bead", - "ll_set_initiating_coded_scheme": "0x0200becd", - "ll_set_max_conn_number": "0x0200bed9", - "ll_set_tx_power_range": "0x0200bf6d", - "nibble_for_char": "0x0201c0d1", - "platform_calibrate_rt_clk": "0x0201c159", - "platform_call_on_stack": "0x020021fb", - "platform_config": "0x0201c15d", - "platform_delete_timer": "0x0201c285", - "platform_enable_irq": "0x0201c28d", - "platform_get_current_task": "0x0201c2e1", - "platform_get_gen_os_driver": "0x0201c305", - "platform_get_heap_status": "0x0201c30d", - "platform_get_link_layer_interf": "0x0201c325", - "platform_get_task_handle": "0x0201c32d", - "platform_get_timer_counter": "0x0201c34d", - "platform_get_us_time": "0x0201c351", - "platform_get_version": "0x0201c355", - "platform_hrng": "0x0201c35d", - "platform_install_isr_stack": "0x0201c365", - "platform_install_task_stack": "0x0201c371", - "platform_patch_rf_init_data": "0x0201c3a9", - "platform_printf": "0x0201c3b5", - "platform_raise_assertion": "0x0201c3c9", - "platform_rand": "0x0201c3dd", - "platform_read_info": "0x0201c3e1", - "platform_read_persistent_reg": "0x0201c411", - "platform_reset": "0x0201c41d", - "platform_rt_rc_auto_tune": "0x0201c431", - "platform_rt_rc_auto_tune2": "0x0201c439", - "platform_rt_rc_tune": "0x0201c4a1", - "platform_set_abs_timer": "0x0201c4bd", - "platform_set_evt_callback": "0x0201c4c1", - "platform_set_evt_callback_table": "0x0201c4d5", - "platform_set_irq_callback": "0x0201c4e1", - "platform_set_irq_callback_table": "0x0201c4fd", - "platform_set_rf_clk_source": "0x0201c509", - "platform_set_rf_init_data": "0x0201c515", - "platform_set_rf_power_mapping": "0x0201c521", - "platform_set_timer": "0x0201c52d", - "platform_shutdown": "0x0201c531", - "platform_switch_app": "0x0201c535", - "platform_trace_raw": "0x0201c54d", - "platform_write_persistent_reg": "0x0201c565", - "printf_hexdump": "0x0201c71d", - "pvPortMalloc": "0x0201d151", - "pvTaskIncrementMutexHeldCount": "0x0201d239", - "pvTimerGetTimerID": "0x0201d251", - "pxPortInitialiseStack": "0x0201d27d", - "reverse_128": "0x0201d465", - "reverse_24": "0x0201d46b", - "reverse_256": "0x0201d471", - "reverse_48": "0x0201d477", - "reverse_56": "0x0201d47d", - "reverse_64": "0x0201d483", - "reverse_bd_addr": "0x0201d489", - "reverse_bytes": "0x0201d48f", - "sm_add_event_handler": "0x0201d795", - "sm_address_resolution_lookup": "0x0201d8ed", - "sm_authenticated": "0x0201dc69", - "sm_authorization_decline": "0x0201dc77", - "sm_authorization_grant": "0x0201dc97", - "sm_authorization_state": "0x0201dcb7", - "sm_bonding_decline": "0x0201dcd1", - "sm_config": "0x0201e125", - "sm_config_conn": "0x0201e13d", - "sm_encryption_key_size": "0x0201e2f3", - "sm_just_works_confirm": "0x0201e879", - "sm_le_device_key": "0x0201ebb1", - "sm_passkey_input": "0x0201ec47", - "sm_private_random_address_generation_get": "0x0201f001", - "sm_private_random_address_generation_get_mode": "0x0201f009", - "sm_private_random_address_generation_set_mode": "0x0201f015", - "sm_private_random_address_generation_set_update_period": "0x0201f03d", - "sm_register_external_ltk_callback": "0x0201f179", - "sm_register_oob_data_callback": "0x0201f185", - "sm_request_pairing": "0x0201f191", - "sm_send_security_request": "0x0201fc67", - "sm_set_accepted_stk_generation_methods": "0x0201fc8d", - "sm_set_authentication_requirements": "0x0201fc99", - "sm_set_encryption_key_size_range": "0x0201fca5", - "sscanf_bd_addr": "0x02020005", - "sysSetPublicDeviceAddr": "0x020200b9", - "uuid128_to_str": "0x02020875", - "uuid_add_bluetooth_prefix": "0x020208cd", - "uuid_has_bluetooth_prefix": "0x020208ed", - "uxListRemove": "0x02020909", - "uxQueueMessagesWaiting": "0x02020931", - "uxQueueMessagesWaitingFromISR": "0x02020959", - "uxQueueSpacesAvailable": "0x02020975", - "uxTaskGetStackHighWaterMark": "0x020209a1", - "uxTaskPriorityGet": "0x020209c1", - "uxTaskPriorityGetFromISR": "0x020209dd", - "vListInitialise": "0x02020a43", - "vListInitialiseItem": "0x02020a59", - "vListInsert": "0x02020a5f", - "vListInsertEnd": "0x02020a8f", - "vPortEndScheduler": "0x02020aa9", - "vPortEnterCritical": "0x20000325", - "vPortExitCritical": "0x2000035f", - "vPortFree": "0x02020ad5", - "vPortSuppressTicksAndSleep": "0x2000038b", - "vPortValidateInterruptPriority": "0x02020b79", - "vQueueDelete": "0x02020bd5", - "vQueueWaitForMessageRestricted": "0x02020c01", - "vTaskDelay": "0x02020c45", - "vTaskInternalSetTimeOutState": "0x02020c91", - "vTaskMissedYield": "0x02020ca1", - "vTaskPlaceOnEventList": "0x02020cad", - "vTaskPlaceOnEventListRestricted": "0x02020ce5", - "vTaskPriorityDisinheritAfterTimeout": "0x02020d25", - "vTaskPrioritySet": "0x02020dd1", - "vTaskResume": "0x02020e99", - "vTaskStartScheduler": "0x02020f1d", - "vTaskStepTick": "0x2000070b", - "vTaskSuspend": "0x02020fad", - "vTaskSuspendAll": "0x2000067f", - "vTaskSwitchContext": "0x02021069", - "xPortStartScheduler": "0x02021119", - "xQueueAddToSet": "0x0202121d", - "xQueueCreateCountingSemaphore": "0x02021241", - "xQueueCreateCountingSemaphoreStatic": "0x0202127d", - "xQueueCreateMutex": "0x020212c1", - "xQueueCreateMutexStatic": "0x020212d7", - "xQueueCreateSet": "0x020212f1", - "xQueueGenericCreate": "0x020212f9", - "xQueueGenericCreateStatic": "0x02021345", - "xQueueGenericReset": "0x020213ad", - "xQueueGenericSend": "0x02021439", - "xQueueGenericSendFromISR": "0x020215a5", - "xQueueGiveFromISR": "0x02021665", - "xQueueGiveMutexRecursive": "0x02021709", - "xQueueIsQueueEmptyFromISR": "0x02021749", - "xQueueIsQueueFullFromISR": "0x0202176d", - "xQueuePeek": "0x02021795", - "xQueuePeekFromISR": "0x020218bd", - "xQueueReceive": "0x02021929", - "xQueueReceiveFromISR": "0x02021a55", - "xQueueRemoveFromSet": "0x02021ae9", - "xQueueSelectFromSet": "0x02021b0b", - "xQueueSelectFromSetFromISR": "0x02021b1d", - "xQueueSemaphoreTake": "0x02021b31", - "xQueueTakeMutexRecursive": "0x02021c9d", - "xTaskCheckForTimeOut": "0x02021ce1", - "xTaskCreate": "0x02021d51", - "xTaskCreateStatic": "0x02021dad", - "xTaskGetCurrentTaskHandle": "0x02021e1d", - "xTaskGetSchedulerState": "0x02021e29", - "xTaskGetTickCount": "0x02021e45", - "xTaskGetTickCountFromISR": "0x02021e51", - "xTaskIncrementTick": "0x20000511", - "xTaskPriorityDisinherit": "0x02021e61", - "xTaskPriorityInherit": "0x02021ef5", - "xTaskRemoveFromEventList": "0x02021f89", - "xTaskResumeAll": "0x200005cb", - "xTaskResumeFromISR": "0x02022009", - "xTimerCreate": "0x02022095", - "xTimerCreateStatic": "0x020220c9", - "xTimerCreateTimerTask": "0x02022101", - "xTimerGenericCommand": "0x0202216d", - "xTimerGetExpiryTime": "0x020221dd", - "xTimerGetTimerDaemonTaskHandle": "0x020221fd" + "att_dispatch_client_can_send_now": "0x020051e1", + "att_dispatch_client_request_can_send_now_event": "0x020051e7", + "att_dispatch_register_client": "0x020051ed", + "att_dispatch_register_server": "0x02005201", + "att_dispatch_server_can_send_now": "0x02005215", + "att_dispatch_server_request_can_send_now_event": "0x0200521b", + "att_emit_general_event": "0x020052cd", + "att_server_can_send_packet_now": "0x02005a05", + "att_server_deferred_read_response": "0x02005a09", + "att_server_get_mtu": "0x02005a21", + "att_server_indicate": "0x02005a8d", + "att_server_init": "0x02005b11", + "att_server_notify": "0x02005b4d", + "att_server_register_packet_handler": "0x02005c65", + "att_server_request_can_send_now_event": "0x02005c71", + "att_set_db": "0x02005c8d", + "att_set_read_callback": "0x02005ca1", + "att_set_write_callback": "0x02005cad", + "bd_addr_cmp": "0x02005e7d", + "bd_addr_copy": "0x02005e83", + "bd_addr_to_str": "0x02005e8d", + "big_endian_read_16": "0x02005ec5", + "big_endian_read_32": "0x02005ecd", + "big_endian_store_16": "0x02005ee1", + "big_endian_store_32": "0x02005eed", + "btstack_config": "0x02005f19", + "btstack_get_capabilities": "0x02005f25", + "btstack_memory_pool_create": "0x0200606f", + "btstack_memory_pool_free": "0x02006099", + "btstack_memory_pool_get": "0x020060f9", + "btstack_push_user_msg": "0x02006161", + "btstack_push_user_runnable": "0x0200616d", + "btstack_reset": "0x02006179", + "char_for_nibble": "0x0200639f", + "eTaskConfirmSleepModeStatus": "0x020066d9", + "gap_add_dev_to_periodic_list": "0x02006d39", + "gap_add_whitelist": "0x02006d49", + "gap_aes_encrypt": "0x02006d55", + "gap_clear_white_lists": "0x02006d8d", + "gap_clr_adv_set": "0x02006d99", + "gap_clr_periodic_adv_list": "0x02006da5", + "gap_create_connection_cancel": "0x02006db1", + "gap_default_periodic_adv_sync_transfer_param": "0x02006dbd", + "gap_disconnect": "0x02006dd5", + "gap_disconnect2": "0x02006ddd", + "gap_disconnect_all": "0x02006e09", + "gap_ext_create_connection": "0x02006e49", + "gap_get_connection_parameter_range": "0x02006f21", + "gap_le_read_channel_map": "0x02006f59", + "gap_periodic_adv_create_sync": "0x02006fb9", + "gap_periodic_adv_create_sync_cancel": "0x02006fdd", + "gap_periodic_adv_set_info_transfer": "0x02006fe9", + "gap_periodic_adv_sync_transfer": "0x02006ff9", + "gap_periodic_adv_sync_transfer_param": "0x02007009", + "gap_periodic_adv_term_sync": "0x02007025", + "gap_read_antenna_info": "0x020070ad", + "gap_read_periodic_adv_list_size": "0x020070b9", + "gap_read_phy": "0x020070c5", + "gap_read_remote_used_features": "0x020070d1", + "gap_read_remote_version": "0x020070dd", + "gap_read_rssi": "0x020070e9", + "gap_read_white_lists_size": "0x020070f5", + "gap_remove_whitelist": "0x02007101", + "gap_rmv_adv_set": "0x0200717d", + "gap_rmv_dev_from_periodic_list": "0x02007189", + "gap_rx_test_v2": "0x02007199", + "gap_rx_test_v3": "0x020071a9", + "gap_set_adv_set_random_addr": "0x020071f5", + "gap_set_callback_for_next_hci": "0x02007219", + "gap_set_connection_cte_request_enable": "0x02007239", + "gap_set_connection_cte_response_enable": "0x02007255", + "gap_set_connection_cte_rx_param": "0x02007265", + "gap_set_connection_cte_tx_param": "0x020072b9", + "gap_set_connection_parameter_range": "0x02007305", + "gap_set_connectionless_cte_tx_enable": "0x0200731d", + "gap_set_connectionless_cte_tx_param": "0x0200732d", + "gap_set_connectionless_iq_sampling_enable": "0x02007389", + "gap_set_data_length": "0x020073e5", + "gap_set_def_phy": "0x020073fd", + "gap_set_ext_adv_data": "0x0200740d", + "gap_set_ext_adv_enable": "0x02007425", + "gap_set_ext_adv_para": "0x02007495", + "gap_set_ext_scan_enable": "0x02007555", + "gap_set_ext_scan_para": "0x0200756d", + "gap_set_ext_scan_response_data": "0x0200760d", + "gap_set_host_channel_classification": "0x02007625", + "gap_set_periodic_adv_data": "0x02007635", + "gap_set_periodic_adv_enable": "0x020076a5", + "gap_set_periodic_adv_para": "0x020076b5", + "gap_set_periodic_adv_rx_enable": "0x020076cd", + "gap_set_phy": "0x020076dd", + "gap_set_random_device_address": "0x020076f9", + "gap_start_ccm": "0x02007715", + "gap_test_end": "0x0200775d", + "gap_tx_test_v2": "0x02007769", + "gap_tx_test_v4": "0x02007781", + "gap_update_connection_parameters": "0x020077a5", + "gap_vendor_tx_continuous_wave": "0x020077e5", + "gatt_client_cancel_write": "0x02007d0d", + "gatt_client_discover_characteristic_descriptors": "0x02007d33", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x02007d73", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x02007dc3", + "gatt_client_discover_characteristics_for_service": "0x02007e13", + "gatt_client_discover_primary_services": "0x02007e49", + "gatt_client_discover_primary_services_by_uuid128": "0x02007e7b", + "gatt_client_discover_primary_services_by_uuid16": "0x02007ebf", + "gatt_client_execute_write": "0x02007efd", + "gatt_client_find_included_services_for_service": "0x02007f23", + "gatt_client_get_mtu": "0x02007f51", + "gatt_client_is_ready": "0x0200801d", + "gatt_client_listen_for_characteristic_value_updates": "0x02008033", + "gatt_client_prepare_write": "0x02008053", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x0200808f", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x020080b9", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x020080bf", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x020080ed", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x020080f3", + "gatt_client_read_multiple_characteristic_values": "0x02008121", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x02008151", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x0200817f", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x020081cb", + "gatt_client_register_handler": "0x02008215", + "gatt_client_reliable_write_long_value_of_characteristic": "0x02008221", + "gatt_client_signed_write_without_response": "0x02008629", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x020086ed", + "gatt_client_write_client_characteristic_configuration": "0x02008727", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x02008779", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02008789", + "gatt_client_write_long_value_of_characteristic": "0x020087c5", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x020087d5", + "gatt_client_write_value_of_characteristic": "0x02008811", + "gatt_client_write_value_of_characteristic_without_response": "0x02008847", + "hci_add_event_handler": "0x02009e19", + "hci_power_control": "0x0200a5a5", + "hci_register_acl_packet_handler": "0x0200a759", + "kv_commit": "0x0200ada5", + "kv_get": "0x0200ae01", + "kv_init": "0x0200ae0d", + "kv_init_backend": "0x0200ae89", + "kv_put": "0x0200ae9d", + "kv_remove": "0x0200aea9", + "kv_remove_all": "0x0200aedd", + "kv_value_modified": "0x0200af0d", + "kv_value_modified_of_key": "0x0200af29", + "kv_visit": "0x0200af35", + "l2cap_add_event_handler": "0x0200afc5", + "l2cap_can_send_packet_now": "0x0200afd5", + "l2cap_create_le_credit_based_connection_request": "0x0200b199", + "l2cap_credit_based_send": "0x0200b2e1", + "l2cap_credit_based_send_continue": "0x0200b30d", + "l2cap_disconnect": "0x0200b389", + "l2cap_get_le_credit_based_connection_credits": "0x0200b575", + "l2cap_get_peer_mtu_for_local_cid": "0x0200b591", + "l2cap_init": "0x0200b9d1", + "l2cap_le_send_flow_control_credit": "0x0200bac7", + "l2cap_max_le_mtu": "0x0200bdd5", + "l2cap_register_packet_handler": "0x0200befd", + "l2cap_register_service": "0x0200bf09", + "l2cap_request_can_send_now_event": "0x0200c019", + "l2cap_request_connection_parameter_update": "0x0200c033", + "l2cap_send_echo_request": "0x0200c515", + "l2cap_unregister_service": "0x0200c5f5", + "le_device_db_add": "0x0200c64d", + "le_device_db_find": "0x0200c725", + "le_device_db_from_key": "0x0200c751", + "le_device_db_iter_cur": "0x0200c759", + "le_device_db_iter_cur_key": "0x0200c75d", + "le_device_db_iter_init": "0x0200c761", + "le_device_db_iter_next": "0x0200c769", + "le_device_db_remove_key": "0x0200c78f", + "ll_adjust_conn_peer_tx_power": "0x0200c7bd", + "ll_aes_encrypt": "0x0200c7e5", + "ll_config": "0x0200c859", + "ll_free": "0x0200c88f", + "ll_get_capabilities": "0x0200c899", + "ll_get_heap_free_size": "0x0200c8b9", + "ll_get_states": "0x0200c8c9", + "ll_hint_on_ce_len": "0x0200c965", + "ll_legacy_adv_set_interval": "0x0200c99d", + "ll_malloc": "0x0200c9ad", + "ll_register_hci_acl_previewer": "0x0200cac5", + "ll_scan_set_fixed_channel": "0x0200cb29", + "ll_set_adv_access_address": "0x0200cd41", + "ll_set_adv_coded_scheme": "0x0200cd4d", + "ll_set_conn_acl_report_latency": "0x0200cd7d", + "ll_set_conn_coded_scheme": "0x0200cda9", + "ll_set_conn_latency": "0x0200cdd1", + "ll_set_conn_tx_power": "0x0200cdfd", + "ll_set_def_antenna": "0x0200ce35", + "ll_set_initiating_coded_scheme": "0x0200ce55", + "ll_set_max_conn_number": "0x0200ce61", + "ll_set_tx_power_range": "0x0200cef5", + "nibble_for_char": "0x0201d065", + "platform_calibrate_rt_clk": "0x0201d0ed", + "platform_call_on_stack": "0x020030fb", + "platform_cancel_us_timer": "0x0201d0f1", + "platform_config": "0x0201d105", + "platform_create_us_timer": "0x0201d239", + "platform_delete_timer": "0x0201d24d", + "platform_enable_irq": "0x0201d255", + "platform_get_current_task": "0x0201d2a9", + "platform_get_gen_os_driver": "0x0201d2cd", + "platform_get_heap_status": "0x0201d2d5", + "platform_get_link_layer_interf": "0x0201d2ed", + "platform_get_task_handle": "0x0201d2f5", + "platform_get_timer_counter": "0x0201d315", + "platform_get_us_time": "0x0201d319", + "platform_get_version": "0x0201d31d", + "platform_hrng": "0x0201d339", + "platform_install_isr_stack": "0x0201d341", + "platform_install_task_stack": "0x0201d34d", + "platform_patch_rf_init_data": "0x0201d385", + "platform_printf": "0x0201d391", + "platform_raise_assertion": "0x0201d3a5", + "platform_rand": "0x0201d3b9", + "platform_read_info": "0x0201d3bd", + "platform_read_persistent_reg": "0x0201d3ed", + "platform_reset": "0x0201d40d", + "platform_rt_rc_auto_tune": "0x0201d421", + "platform_rt_rc_auto_tune2": "0x0201d429", + "platform_rt_rc_tune": "0x0201d489", + "platform_set_abs_timer": "0x0201d4b5", + "platform_set_evt_callback": "0x0201d4b9", + "platform_set_evt_callback_table": "0x0201d4cd", + "platform_set_irq_callback": "0x0201d4d9", + "platform_set_irq_callback_table": "0x0201d4f5", + "platform_set_rf_clk_source": "0x0201d501", + "platform_set_rf_init_data": "0x0201d50d", + "platform_set_rf_power_mapping": "0x0201d519", + "platform_set_timer": "0x0201d525", + "platform_shutdown": "0x0201d529", + "platform_switch_app": "0x0201d52d", + "platform_trace_raw": "0x0201d545", + "platform_write_persistent_reg": "0x0201d55d", + "printf_hexdump": "0x0201d735", + "pvPortMalloc": "0x0201e169", + "pvTaskIncrementMutexHeldCount": "0x0201e251", + "pvTimerGetTimerID": "0x0201e269", + "pxPortInitialiseStack": "0x0201e295", + "reverse_128": "0x0201e47d", + "reverse_24": "0x0201e483", + "reverse_256": "0x0201e489", + "reverse_48": "0x0201e48f", + "reverse_56": "0x0201e495", + "reverse_64": "0x0201e49b", + "reverse_bd_addr": "0x0201e4a1", + "reverse_bytes": "0x0201e4a7", + "sm_add_event_handler": "0x0201e7ad", + "sm_address_resolution_lookup": "0x0201e905", + "sm_authenticated": "0x0201ecad", + "sm_authorization_decline": "0x0201ecbb", + "sm_authorization_grant": "0x0201ecdb", + "sm_authorization_state": "0x0201ecfb", + "sm_bonding_decline": "0x0201ed15", + "sm_config": "0x0201f169", + "sm_config_conn": "0x0201f19d", + "sm_encryption_key_size": "0x0201f357", + "sm_just_works_confirm": "0x0201f8dd", + "sm_le_device_key": "0x0201fc1d", + "sm_passkey_input": "0x0201fcb3", + "sm_private_random_address_generation_get": "0x02020075", + "sm_private_random_address_generation_get_mode": "0x0202007d", + "sm_private_random_address_generation_set_mode": "0x02020089", + "sm_private_random_address_generation_set_update_period": "0x020200b1", + "sm_register_external_ltk_callback": "0x020201ed", + "sm_register_oob_data_callback": "0x020201f9", + "sm_request_pairing": "0x02020205", + "sm_send_security_request": "0x02020ce3", + "sm_set_accepted_stk_generation_methods": "0x02020d09", + "sm_set_authentication_requirements": "0x02020d15", + "sm_set_encryption_key_size_range": "0x02020d25", + "sscanf_bd_addr": "0x02021075", + "sysSetPublicDeviceAddr": "0x02021149", + "uuid128_to_str": "0x02021919", + "uuid_add_bluetooth_prefix": "0x02021971", + "uuid_has_bluetooth_prefix": "0x02021991", + "uxListRemove": "0x020219ad", + "uxQueueMessagesWaiting": "0x020219d5", + "uxQueueMessagesWaitingFromISR": "0x020219fd", + "uxQueueSpacesAvailable": "0x02021a19", + "uxTaskGetStackHighWaterMark": "0x02021a45", + "uxTaskPriorityGet": "0x02021a65", + "uxTaskPriorityGetFromISR": "0x02021a81", + "vListInitialise": "0x02021ae7", + "vListInitialiseItem": "0x02021afd", + "vListInsert": "0x02021b03", + "vListInsertEnd": "0x02021b33", + "vPortEndScheduler": "0x02021b4d", + "vPortEnterCritical": "0x20000335", + "vPortExitCritical": "0x2000036f", + "vPortFree": "0x02021b79", + "vPortSuppressTicksAndSleep": "0x2000039b", + "vPortValidateInterruptPriority": "0x02021c1d", + "vQueueDelete": "0x02021c79", + "vQueueWaitForMessageRestricted": "0x02021ca5", + "vTaskDelay": "0x02021ce9", + "vTaskInternalSetTimeOutState": "0x02021d35", + "vTaskMissedYield": "0x02021d45", + "vTaskPlaceOnEventList": "0x02021d51", + "vTaskPlaceOnEventListRestricted": "0x02021d89", + "vTaskPriorityDisinheritAfterTimeout": "0x02021dc9", + "vTaskPrioritySet": "0x02021e75", + "vTaskResume": "0x02021f3d", + "vTaskStartScheduler": "0x02021fc1", + "vTaskStepTick": "0x2000071b", + "vTaskSuspend": "0x02022051", + "vTaskSuspendAll": "0x2000068f", + "vTaskSwitchContext": "0x0202210d", + "xPortStartScheduler": "0x020221b5", + "xQueueAddToSet": "0x020222b9", + "xQueueCreateCountingSemaphore": "0x020222dd", + "xQueueCreateCountingSemaphoreStatic": "0x02022319", + "xQueueCreateMutex": "0x0202235d", + "xQueueCreateMutexStatic": "0x02022373", + "xQueueCreateSet": "0x0202238d", + "xQueueGenericCreate": "0x02022395", + "xQueueGenericCreateStatic": "0x020223e1", + "xQueueGenericReset": "0x02022449", + "xQueueGenericSend": "0x020224d5", + "xQueueGenericSendFromISR": "0x02022641", + "xQueueGiveFromISR": "0x02022701", + "xQueueGiveMutexRecursive": "0x020227a5", + "xQueueIsQueueEmptyFromISR": "0x020227e5", + "xQueueIsQueueFullFromISR": "0x02022809", + "xQueuePeek": "0x02022831", + "xQueuePeekFromISR": "0x02022959", + "xQueueReceive": "0x020229c5", + "xQueueReceiveFromISR": "0x02022af1", + "xQueueRemoveFromSet": "0x02022b85", + "xQueueSelectFromSet": "0x02022ba7", + "xQueueSelectFromSetFromISR": "0x02022bb9", + "xQueueSemaphoreTake": "0x02022bcd", + "xQueueTakeMutexRecursive": "0x02022d39", + "xTaskCheckForTimeOut": "0x02022d7d", + "xTaskCreate": "0x02022ded", + "xTaskCreateStatic": "0x02022e49", + "xTaskGetCurrentTaskHandle": "0x02022eb9", + "xTaskGetSchedulerState": "0x02022ec5", + "xTaskGetTickCount": "0x02022ee1", + "xTaskGetTickCountFromISR": "0x02022eed", + "xTaskIncrementTick": "0x20000521", + "xTaskPriorityDisinherit": "0x02022efd", + "xTaskPriorityInherit": "0x02022f91", + "xTaskRemoveFromEventList": "0x02023025", + "xTaskResumeAll": "0x200005db", + "xTaskResumeFromISR": "0x020230a5", + "xTimerCreate": "0x02023131", + "xTimerCreateStatic": "0x02023165", + "xTimerCreateTimerTask": "0x0202319d", + "xTimerGenericCommand": "0x02023209", + "xTimerGetExpiryTime": "0x02023279", + "xTimerGetTimerDaemonTaskHandle": "0x02023299" } \ No newline at end of file diff --git a/bundles/mini/ING9168xx/meta.json b/bundles/mini/ING9168xx/meta.json index d42f3a98b..8076313d9 100644 --- a/bundles/mini/ING9168xx/meta.json +++ b/bundles/mini/ING9168xx/meta.json @@ -1,18 +1,24 @@ { "app": { - "base": 33722368 + "base": 33726464 }, "ram": { "base": 536870912, - "size": 29100 + "size": 29140 }, "rom": { "base": 33562624, - "size": 155804 + "size": 160164 + }, + "var": { + "link_layer_features": { + "addr": 33699544, + "value": "bf79ff07fe000000" + } }, "version": [ 2, 3, - 1 + 18 ] } \ No newline at end of file diff --git a/bundles/mini/ING9168xx/platform.bin b/bundles/mini/ING9168xx/platform.bin index 5478467c9..f1a20d70a 100644 Binary files a/bundles/mini/ING9168xx/platform.bin and b/bundles/mini/ING9168xx/platform.bin differ diff --git a/bundles/mini/ING9187xx/apis.json b/bundles/mini/ING9187xx/apis.json index dc1d488d4..f9ec02c89 100644 --- a/bundles/mini/ING9187xx/apis.json +++ b/bundles/mini/ING9187xx/apis.json @@ -6,327 +6,334 @@ "att_dispatch_server_can_send_now": "0x000057c5", "att_dispatch_server_request_can_send_now_event": "0x000057cb", "att_emit_general_event": "0x0000587d", - "att_server_can_send_packet_now": "0x00005fa9", - "att_server_deferred_read_response": "0x00005fad", - "att_server_get_mtu": "0x00005fc5", - "att_server_indicate": "0x00006031", - "att_server_init": "0x000060b5", - "att_server_notify": "0x000060f1", - "att_server_register_packet_handler": "0x00006209", - "att_server_request_can_send_now_event": "0x00006215", - "att_set_db": "0x00006231", - "att_set_read_callback": "0x00006245", - "att_set_write_callback": "0x00006251", - "bd_addr_cmp": "0x000063c1", - "bd_addr_copy": "0x000063c7", - "bd_addr_to_str": "0x000063d1", - "big_endian_read_16": "0x00006409", - "big_endian_read_32": "0x00006411", - "big_endian_store_16": "0x00006425", - "big_endian_store_32": "0x00006431", - "btstack_config": "0x00006585", - "btstack_memory_pool_create": "0x000066c3", - "btstack_memory_pool_free": "0x000066ed", - "btstack_memory_pool_get": "0x0000674d", - "btstack_push_user_msg": "0x000067b5", - "btstack_push_user_runnable": "0x000067c1", - "btstack_reset": "0x000067cd", - "char_for_nibble": "0x00006aa9", - "eTaskConfirmSleepModeStatus": "0x00006d8d", - "gap_add_dev_to_periodic_list": "0x00007389", - "gap_add_whitelist": "0x00007399", - "gap_aes_encrypt": "0x000073a5", - "gap_clear_white_lists": "0x000073dd", - "gap_clr_adv_set": "0x000073e9", - "gap_clr_periodic_adv_list": "0x000073f5", - "gap_create_connection_cancel": "0x00007401", - "gap_disconnect": "0x0000740d", - "gap_disconnect_all": "0x00007439", - "gap_ext_create_connection": "0x00007479", - "gap_get_connection_parameter_range": "0x00007551", - "gap_le_read_channel_map": "0x00007589", - "gap_periodic_adv_create_sync": "0x000075f5", - "gap_periodic_adv_create_sync_cancel": "0x00007619", - "gap_periodic_adv_term_sync": "0x00007625", - "gap_read_periodic_adv_list_size": "0x000076ad", - "gap_read_phy": "0x000076b9", - "gap_read_remote_used_features": "0x000076c5", - "gap_read_remote_version": "0x000076d1", - "gap_read_rssi": "0x000076dd", - "gap_remove_whitelist": "0x000076e9", - "gap_rmv_adv_set": "0x00007765", - "gap_rmv_dev_from_periodic_list": "0x00007771", - "gap_rx_test_v2": "0x00007781", - "gap_set_adv_set_random_addr": "0x000077b9", - "gap_set_callback_for_next_hci": "0x000077f5", - "gap_set_connection_parameter_range": "0x00007815", - "gap_set_data_length": "0x0000782d", - "gap_set_def_phy": "0x00007845", - "gap_set_ext_adv_data": "0x00007855", - "gap_set_ext_adv_enable": "0x0000786d", - "gap_set_ext_adv_para": "0x000078dd", - "gap_set_ext_scan_enable": "0x000079b5", - "gap_set_ext_scan_para": "0x000079cd", - "gap_set_ext_scan_response_data": "0x00007a6d", - "gap_set_host_channel_classification": "0x00007a85", - "gap_set_periodic_adv_data": "0x00007a95", - "gap_set_periodic_adv_enable": "0x00007b05", - "gap_set_periodic_adv_para": "0x00007b15", - "gap_set_phy": "0x00007b2d", - "gap_set_random_device_address": "0x00007b49", - "gap_start_ccm": "0x00007b79", - "gap_test_end": "0x00007bc1", - "gap_tx_test_v2": "0x00007bcd", - "gap_tx_test_v4": "0x00007be5", - "gap_update_connection_parameters": "0x00007c09", - "gap_vendor_tx_continuous_wave": "0x00007c49", - "gatt_client_cancel_write": "0x00008171", - "gatt_client_discover_characteristic_descriptors": "0x00008197", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x000081d7", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x00008227", - "gatt_client_discover_characteristics_for_service": "0x00008277", - "gatt_client_discover_primary_services": "0x000082ad", - "gatt_client_discover_primary_services_by_uuid128": "0x000082df", - "gatt_client_discover_primary_services_by_uuid16": "0x00008323", - "gatt_client_execute_write": "0x0000835f", - "gatt_client_find_included_services_for_service": "0x00008385", - "gatt_client_get_mtu": "0x000083b3", - "gatt_client_is_ready": "0x00008451", - "gatt_client_listen_for_characteristic_value_updates": "0x00008467", - "gatt_client_prepare_write": "0x00008487", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x000084c3", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x000084ed", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x000084f3", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x00008521", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x00008527", - "gatt_client_read_multiple_characteristic_values": "0x00008555", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x00008585", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x000085b3", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x000085ff", - "gatt_client_register_handler": "0x00008649", - "gatt_client_reliable_write_long_value_of_characteristic": "0x00008655", - "gatt_client_signed_write_without_response": "0x00008a59", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008b1d", - "gatt_client_write_client_characteristic_configuration": "0x00008b57", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008ba9", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008bb9", - "gatt_client_write_long_value_of_characteristic": "0x00008bf5", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008c05", - "gatt_client_write_value_of_characteristic": "0x00008c41", - "gatt_client_write_value_of_characteristic_without_response": "0x00008c77", - "hci_add_event_handler": "0x0000a191", - "hci_power_control": "0x0000a919", - "hci_register_acl_packet_handler": "0x0000aacd", - "kv_commit": "0x0000b235", - "kv_get": "0x0000b291", - "kv_init": "0x0000b29d", - "kv_init_backend": "0x0000b319", - "kv_put": "0x0000b32d", - "kv_remove": "0x0000b339", - "kv_remove_all": "0x0000b36d", - "kv_value_modified": "0x0000b39d", - "kv_value_modified_of_key": "0x0000b3b9", - "kv_visit": "0x0000b3c5", - "l2cap_add_event_handler": "0x0000b455", - "l2cap_can_send_packet_now": "0x0000b465", - "l2cap_create_le_credit_based_connection_request": "0x0000b621", - "l2cap_credit_based_send": "0x0000b765", - "l2cap_credit_based_send_continue": "0x0000b791", - "l2cap_disconnect": "0x0000b80d", - "l2cap_get_le_credit_based_connection_credits": "0x0000ba5d", - "l2cap_get_peer_mtu_for_local_cid": "0x0000ba79", - "l2cap_init": "0x0000be4d", - "l2cap_le_send_flow_control_credit": "0x0000bf43", - "l2cap_max_le_mtu": "0x0000c24d", - "l2cap_register_packet_handler": "0x0000c375", - "l2cap_register_service": "0x0000c381", - "l2cap_request_can_send_now_event": "0x0000c491", - "l2cap_request_connection_parameter_update": "0x0000c4ab", - "l2cap_send_echo_request": "0x0000c985", - "l2cap_unregister_service": "0x0000ca45", - "le_device_db_add": "0x0000ca9d", - "le_device_db_find": "0x0000cb65", - "le_device_db_from_key": "0x0000cb91", - "le_device_db_iter_cur": "0x0000cb99", - "le_device_db_iter_cur_key": "0x0000cb9d", - "le_device_db_iter_init": "0x0000cba1", - "le_device_db_iter_next": "0x0000cba9", - "le_device_db_remove_key": "0x0000cbcf", - "ll_aes_encrypt": "0x0000cbfd", - "ll_config": "0x0000cc79", - "ll_free": "0x0000ccaf", - "ll_get_heap_free_size": "0x0000ccb9", - "ll_hint_on_ce_len": "0x0000cccd", - "ll_legacy_adv_set_interval": "0x0000cd05", - "ll_malloc": "0x0000cd15", - "ll_query_timing_info": "0x0000ce4d", - "ll_register_hci_acl_previewer": "0x0000ce99", - "ll_scan_set_fixed_channel": "0x0000cefd", - "ll_set_adv_access_address": "0x0000d115", - "ll_set_adv_coded_scheme": "0x0000d121", - "ll_set_conn_acl_report_latency": "0x0000d149", - "ll_set_conn_coded_scheme": "0x0000d175", - "ll_set_conn_latency": "0x0000d19d", - "ll_set_conn_tx_power": "0x0000d1c9", - "ll_set_def_antenna": "0x0000d20d", - "ll_set_initiating_coded_scheme": "0x0000d229", - "ll_set_max_conn_number": "0x0000d235", - "nibble_for_char": "0x0001d2d9", - "platform_calibrate_rt_clk": "0x0001d379", + "att_server_can_send_packet_now": "0x00005fad", + "att_server_deferred_read_response": "0x00005fb1", + "att_server_get_mtu": "0x00005fc9", + "att_server_indicate": "0x00006035", + "att_server_init": "0x000060b9", + "att_server_notify": "0x000060f5", + "att_server_register_packet_handler": "0x0000620d", + "att_server_request_can_send_now_event": "0x00006219", + "att_set_db": "0x00006235", + "att_set_read_callback": "0x00006249", + "att_set_write_callback": "0x00006255", + "bd_addr_cmp": "0x000063c5", + "bd_addr_copy": "0x000063cb", + "bd_addr_to_str": "0x000063d5", + "big_endian_read_16": "0x0000640d", + "big_endian_read_32": "0x00006415", + "big_endian_store_16": "0x00006429", + "big_endian_store_32": "0x00006435", + "btstack_config": "0x00006589", + "btstack_get_capabilities": "0x00006595", + "btstack_memory_pool_create": "0x000066df", + "btstack_memory_pool_free": "0x00006709", + "btstack_memory_pool_get": "0x00006769", + "btstack_push_user_msg": "0x000067d1", + "btstack_push_user_runnable": "0x000067dd", + "btstack_reset": "0x000067e9", + "char_for_nibble": "0x00006ac5", + "eTaskConfirmSleepModeStatus": "0x00006da9", + "gap_add_dev_to_periodic_list": "0x00007395", + "gap_add_whitelist": "0x000073a5", + "gap_aes_encrypt": "0x000073b1", + "gap_clear_white_lists": "0x000073e9", + "gap_clr_adv_set": "0x000073f5", + "gap_clr_periodic_adv_list": "0x00007401", + "gap_create_connection_cancel": "0x0000740d", + "gap_disconnect": "0x00007419", + "gap_disconnect2": "0x00007421", + "gap_disconnect_all": "0x0000744d", + "gap_ext_create_connection": "0x0000748d", + "gap_get_connection_parameter_range": "0x00007565", + "gap_le_read_channel_map": "0x0000759d", + "gap_periodic_adv_create_sync": "0x000075fd", + "gap_periodic_adv_create_sync_cancel": "0x00007621", + "gap_periodic_adv_term_sync": "0x0000762d", + "gap_read_periodic_adv_list_size": "0x000076b5", + "gap_read_phy": "0x000076c1", + "gap_read_remote_used_features": "0x000076cd", + "gap_read_remote_version": "0x000076d9", + "gap_read_rssi": "0x000076e5", + "gap_read_white_lists_size": "0x000076f1", + "gap_remove_whitelist": "0x000076fd", + "gap_rmv_adv_set": "0x00007779", + "gap_rmv_dev_from_periodic_list": "0x00007785", + "gap_rx_test_v2": "0x00007795", + "gap_set_adv_set_random_addr": "0x000077cd", + "gap_set_callback_for_next_hci": "0x000077f1", + "gap_set_connection_parameter_range": "0x00007811", + "gap_set_data_length": "0x00007829", + "gap_set_def_phy": "0x00007841", + "gap_set_ext_adv_data": "0x00007851", + "gap_set_ext_adv_enable": "0x00007869", + "gap_set_ext_adv_para": "0x000078d9", + "gap_set_ext_scan_enable": "0x000079a1", + "gap_set_ext_scan_para": "0x000079b9", + "gap_set_ext_scan_response_data": "0x00007a59", + "gap_set_host_channel_classification": "0x00007a71", + "gap_set_periodic_adv_data": "0x00007a81", + "gap_set_periodic_adv_enable": "0x00007af1", + "gap_set_periodic_adv_para": "0x00007b01", + "gap_set_phy": "0x00007b19", + "gap_set_random_device_address": "0x00007b35", + "gap_start_ccm": "0x00007b51", + "gap_test_end": "0x00007b99", + "gap_tx_test_v2": "0x00007ba5", + "gap_tx_test_v4": "0x00007bbd", + "gap_update_connection_parameters": "0x00007be1", + "gap_vendor_tx_continuous_wave": "0x00007c21", + "gatt_client_cancel_write": "0x00008149", + "gatt_client_discover_characteristic_descriptors": "0x0000816f", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x000081af", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x000081ff", + "gatt_client_discover_characteristics_for_service": "0x0000824f", + "gatt_client_discover_primary_services": "0x00008285", + "gatt_client_discover_primary_services_by_uuid128": "0x000082b7", + "gatt_client_discover_primary_services_by_uuid16": "0x000082fb", + "gatt_client_execute_write": "0x00008337", + "gatt_client_find_included_services_for_service": "0x0000835d", + "gatt_client_get_mtu": "0x0000838b", + "gatt_client_is_ready": "0x00008431", + "gatt_client_listen_for_characteristic_value_updates": "0x00008447", + "gatt_client_prepare_write": "0x00008467", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x000084a3", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x000084cd", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x000084d3", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x00008501", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x00008507", + "gatt_client_read_multiple_characteristic_values": "0x00008535", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x00008565", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x00008593", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x000085df", + "gatt_client_register_handler": "0x00008629", + "gatt_client_reliable_write_long_value_of_characteristic": "0x00008635", + "gatt_client_signed_write_without_response": "0x00008a39", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008afd", + "gatt_client_write_client_characteristic_configuration": "0x00008b37", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008b89", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008b99", + "gatt_client_write_long_value_of_characteristic": "0x00008bd5", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008be5", + "gatt_client_write_value_of_characteristic": "0x00008c21", + "gatt_client_write_value_of_characteristic_without_response": "0x00008c57", + "hci_add_event_handler": "0x0000a169", + "hci_power_control": "0x0000a8e9", + "hci_register_acl_packet_handler": "0x0000aa9d", + "kv_commit": "0x0000b1f5", + "kv_get": "0x0000b251", + "kv_init": "0x0000b25d", + "kv_init_backend": "0x0000b2d9", + "kv_put": "0x0000b2ed", + "kv_remove": "0x0000b2f9", + "kv_remove_all": "0x0000b32d", + "kv_value_modified": "0x0000b35d", + "kv_value_modified_of_key": "0x0000b379", + "kv_visit": "0x0000b385", + "l2cap_add_event_handler": "0x0000b415", + "l2cap_can_send_packet_now": "0x0000b425", + "l2cap_create_le_credit_based_connection_request": "0x0000b5e1", + "l2cap_credit_based_send": "0x0000b725", + "l2cap_credit_based_send_continue": "0x0000b751", + "l2cap_disconnect": "0x0000b7cd", + "l2cap_get_le_credit_based_connection_credits": "0x0000ba1d", + "l2cap_get_peer_mtu_for_local_cid": "0x0000ba39", + "l2cap_init": "0x0000be0d", + "l2cap_le_send_flow_control_credit": "0x0000bf03", + "l2cap_max_le_mtu": "0x0000c20d", + "l2cap_register_packet_handler": "0x0000c335", + "l2cap_register_service": "0x0000c341", + "l2cap_request_can_send_now_event": "0x0000c451", + "l2cap_request_connection_parameter_update": "0x0000c46b", + "l2cap_send_echo_request": "0x0000c945", + "l2cap_unregister_service": "0x0000ca05", + "le_device_db_add": "0x0000ca5d", + "le_device_db_find": "0x0000cb35", + "le_device_db_from_key": "0x0000cb61", + "le_device_db_iter_cur": "0x0000cb69", + "le_device_db_iter_cur_key": "0x0000cb6d", + "le_device_db_iter_init": "0x0000cb71", + "le_device_db_iter_next": "0x0000cb79", + "le_device_db_remove_key": "0x0000cb9f", + "ll_aes_encrypt": "0x0000cbcd", + "ll_config": "0x0000cc49", + "ll_free": "0x0000cc7f", + "ll_get_capabilities": "0x0000cc89", + "ll_get_heap_free_size": "0x0000cca9", + "ll_get_states": "0x0000ccb9", + "ll_hint_on_ce_len": "0x0000cd55", + "ll_legacy_adv_set_interval": "0x0000cd8d", + "ll_malloc": "0x0000cd9d", + "ll_query_timing_info": "0x0000ced5", + "ll_register_hci_acl_previewer": "0x0000cf21", + "ll_scan_set_fixed_channel": "0x0000cf85", + "ll_set_adv_access_address": "0x0000d19d", + "ll_set_adv_coded_scheme": "0x0000d1a9", + "ll_set_conn_acl_report_latency": "0x0000d1d1", + "ll_set_conn_coded_scheme": "0x0000d1fd", + "ll_set_conn_latency": "0x0000d225", + "ll_set_conn_tx_power": "0x0000d251", + "ll_set_def_antenna": "0x0000d295", + "ll_set_initiating_coded_scheme": "0x0000d2b1", + "ll_set_max_conn_number": "0x0000d2bd", + "nibble_for_char": "0x0001d361", + "platform_calibrate_rt_clk": "0x0001d401", "platform_call_on_stack": "0x00004183", - "platform_config": "0x0001d37d", - "platform_delete_timer": "0x0001d4a1", - "platform_enable_irq": "0x0001d4a9", - "platform_get_current_task": "0x0001d4e1", - "platform_get_gen_os_driver": "0x0001d505", - "platform_get_heap_status": "0x0001d50d", - "platform_get_link_layer_interf": "0x0001d525", - "platform_get_task_handle": "0x0001d52d", - "platform_get_timer_counter": "0x0001d54d", - "platform_get_us_time": "0x0001d551", - "platform_get_version": "0x0001d555", - "platform_hrng": "0x0001d55d", - "platform_install_isr_stack": "0x0001d565", - "platform_install_task_stack": "0x0001d571", - "platform_patch_rf_init_data": "0x0001d5a9", - "platform_printf": "0x0001d5b5", - "platform_raise_assertion": "0x0001d5c9", - "platform_rand": "0x0001d5dd", - "platform_read_info": "0x0001d5e1", - "platform_read_persistent_reg": "0x0001d611", - "platform_reset": "0x0001d621", - "platform_rt_rc_auto_tune": "0x0001d645", - "platform_rt_rc_auto_tune2": "0x0001d64d", - "platform_rt_rc_tune": "0x0001d6d5", - "platform_set_abs_timer": "0x0001d6e9", - "platform_set_evt_callback": "0x0001d6ed", - "platform_set_evt_callback_table": "0x0001d701", - "platform_set_irq_callback": "0x0001d70d", - "platform_set_irq_callback_table": "0x0001d729", - "platform_set_rf_clk_source": "0x0001d735", - "platform_set_rf_init_data": "0x0001d741", - "platform_set_rf_power_mapping": "0x0001d74d", - "platform_set_timer": "0x0001d759", - "platform_shutdown": "0x0001d75d", - "platform_switch_app": "0x0001d761", - "platform_trace_raw": "0x0001d78d", - "platform_write_persistent_reg": "0x0001d7a5", - "printf_hexdump": "0x0001d959", - "pvPortMalloc": "0x0001e445", - "pvTaskIncrementMutexHeldCount": "0x0001e52d", - "pvTimerGetTimerID": "0x0001e545", - "pxPortInitialiseStack": "0x0001e571", - "reverse_128": "0x0001e719", - "reverse_24": "0x0001e71f", - "reverse_256": "0x0001e725", - "reverse_48": "0x0001e72b", - "reverse_56": "0x0001e731", - "reverse_64": "0x0001e737", - "reverse_bd_addr": "0x0001e73d", - "reverse_bytes": "0x0001e743", - "sm_add_event_handler": "0x0001e8e1", - "sm_address_resolution_lookup": "0x0001ea39", - "sm_authenticated": "0x0001edb5", - "sm_authorization_decline": "0x0001edc3", - "sm_authorization_grant": "0x0001ede3", - "sm_authorization_state": "0x0001ee03", - "sm_bonding_decline": "0x0001ee1d", - "sm_config": "0x0001f279", - "sm_config_conn": "0x0001f291", - "sm_encryption_key_size": "0x0001f447", - "sm_just_works_confirm": "0x0001f9cd", - "sm_le_device_key": "0x0001fd05", - "sm_passkey_input": "0x0001fd9b", - "sm_private_random_address_generation_get": "0x00020155", - "sm_private_random_address_generation_get_mode": "0x0002015d", - "sm_private_random_address_generation_set_mode": "0x00020169", - "sm_private_random_address_generation_set_update_period": "0x00020191", - "sm_register_external_ltk_callback": "0x000202cd", - "sm_register_oob_data_callback": "0x000202d9", - "sm_request_pairing": "0x000202e5", - "sm_send_security_request": "0x00020dbb", - "sm_set_accepted_stk_generation_methods": "0x00020de1", - "sm_set_authentication_requirements": "0x00020ded", - "sm_set_encryption_key_size_range": "0x00020df9", - "sscanf_bd_addr": "0x00021155", - "sysSetPublicDeviceAddr": "0x00021509", - "uuid128_to_str": "0x00021b1d", - "uuid_add_bluetooth_prefix": "0x00021b75", - "uuid_has_bluetooth_prefix": "0x00021b95", - "uxListRemove": "0x00021bb1", - "uxQueueMessagesWaiting": "0x00021bd9", - "uxQueueMessagesWaitingFromISR": "0x00021c01", - "uxQueueSpacesAvailable": "0x00021c1d", - "uxTaskGetStackHighWaterMark": "0x00021c49", - "uxTaskPriorityGet": "0x00021c69", - "uxTaskPriorityGetFromISR": "0x00021c85", - "vListInitialise": "0x00021d3f", - "vListInitialiseItem": "0x00021d55", - "vListInsert": "0x00021d5b", - "vListInsertEnd": "0x00021d8b", - "vPortEndScheduler": "0x00021da5", - "vPortEnterCritical": "0x00021dd1", - "vPortExitCritical": "0x00021e15", - "vPortFree": "0x00021e49", - "vPortSuppressTicksAndSleep": "0x00021edd", - "vPortValidateInterruptPriority": "0x00022005", - "vQueueDelete": "0x00022061", - "vQueueWaitForMessageRestricted": "0x0002208d", - "vTaskDelay": "0x000220d5", - "vTaskInternalSetTimeOutState": "0x00022121", - "vTaskMissedYield": "0x00022131", - "vTaskPlaceOnEventList": "0x0002213d", - "vTaskPlaceOnEventListRestricted": "0x00022175", - "vTaskPriorityDisinheritAfterTimeout": "0x000221b5", - "vTaskPrioritySet": "0x00022261", - "vTaskResume": "0x00022329", - "vTaskStartScheduler": "0x000223ad", - "vTaskStepTick": "0x0002243d", - "vTaskSuspend": "0x0002246d", - "vTaskSuspendAll": "0x00022529", - "vTaskSwitchContext": "0x00022539", - "xPortStartScheduler": "0x000225e9", - "xQueueAddToSet": "0x000226b1", - "xQueueCreateCountingSemaphore": "0x000226d5", - "xQueueCreateCountingSemaphoreStatic": "0x00022711", - "xQueueCreateMutex": "0x00022755", - "xQueueCreateMutexStatic": "0x0002276b", - "xQueueCreateSet": "0x00022785", - "xQueueGenericCreate": "0x0002278d", - "xQueueGenericCreateStatic": "0x000227d9", - "xQueueGenericReset": "0x00022841", - "xQueueGenericSend": "0x000228cd", - "xQueueGenericSendFromISR": "0x00022a39", - "xQueueGiveFromISR": "0x00022af9", - "xQueueGiveMutexRecursive": "0x00022b9d", - "xQueueIsQueueEmptyFromISR": "0x00022bdd", - "xQueueIsQueueFullFromISR": "0x00022c01", - "xQueuePeek": "0x00022c29", - "xQueuePeekFromISR": "0x00022d51", - "xQueueReceive": "0x00022dbd", - "xQueueReceiveFromISR": "0x00022ee9", - "xQueueRemoveFromSet": "0x00022f7d", - "xQueueSelectFromSet": "0x00022f9f", - "xQueueSelectFromSetFromISR": "0x00022fb1", - "xQueueSemaphoreTake": "0x00022fc5", - "xQueueTakeMutexRecursive": "0x00023131", - "xTaskCheckForTimeOut": "0x00023175", - "xTaskCreate": "0x000231e5", - "xTaskCreateStatic": "0x00023241", - "xTaskGetCurrentTaskHandle": "0x000232b1", - "xTaskGetSchedulerState": "0x000232bd", - "xTaskGetTickCount": "0x000232d9", - "xTaskGetTickCountFromISR": "0x000232e5", - "xTaskIncrementTick": "0x000232f5", - "xTaskPriorityDisinherit": "0x000233c1", - "xTaskPriorityInherit": "0x00023455", - "xTaskRemoveFromEventList": "0x000234e9", - "xTaskResumeAll": "0x00023569", - "xTaskResumeFromISR": "0x00023631", - "xTimerCreate": "0x000236bd", - "xTimerCreateStatic": "0x000236f1", - "xTimerCreateTimerTask": "0x00023729", - "xTimerGenericCommand": "0x00023795", - "xTimerGetExpiryTime": "0x00023805", - "xTimerGetTimerDaemonTaskHandle": "0x00023825" + "platform_cancel_us_timer": "0x0001d405", + "platform_config": "0x0001d419", + "platform_create_us_timer": "0x0001d53d", + "platform_delete_timer": "0x0001d551", + "platform_enable_irq": "0x0001d559", + "platform_get_current_task": "0x0001d591", + "platform_get_gen_os_driver": "0x0001d5b5", + "platform_get_heap_status": "0x0001d5bd", + "platform_get_link_layer_interf": "0x0001d5d5", + "platform_get_task_handle": "0x0001d5dd", + "platform_get_timer_counter": "0x0001d5fd", + "platform_get_us_time": "0x0001d601", + "platform_get_version": "0x0001d605", + "platform_hrng": "0x0001d60d", + "platform_install_isr_stack": "0x0001d615", + "platform_install_task_stack": "0x0001d621", + "platform_patch_rf_init_data": "0x0001d659", + "platform_printf": "0x0001d665", + "platform_raise_assertion": "0x0001d679", + "platform_rand": "0x0001d68d", + "platform_read_info": "0x0001d691", + "platform_read_persistent_reg": "0x0001d6c1", + "platform_reset": "0x0001d6d1", + "platform_rt_rc_auto_tune": "0x0001d6f5", + "platform_rt_rc_auto_tune2": "0x0001d6fd", + "platform_rt_rc_tune": "0x0001d779", + "platform_set_abs_timer": "0x0001d79d", + "platform_set_evt_callback": "0x0001d7a1", + "platform_set_evt_callback_table": "0x0001d7b5", + "platform_set_irq_callback": "0x0001d7c1", + "platform_set_irq_callback_table": "0x0001d7dd", + "platform_set_rf_clk_source": "0x0001d7e9", + "platform_set_rf_init_data": "0x0001d7f5", + "platform_set_rf_power_mapping": "0x0001d801", + "platform_set_timer": "0x0001d80d", + "platform_shutdown": "0x0001d811", + "platform_switch_app": "0x0001d815", + "platform_trace_raw": "0x0001d841", + "platform_write_persistent_reg": "0x0001d859", + "printf_hexdump": "0x0001da0d", + "pvPortMalloc": "0x0001e4f9", + "pvTaskIncrementMutexHeldCount": "0x0001e5e1", + "pvTimerGetTimerID": "0x0001e5f9", + "pxPortInitialiseStack": "0x0001e625", + "reverse_128": "0x0001e7cd", + "reverse_24": "0x0001e7d3", + "reverse_256": "0x0001e7d9", + "reverse_48": "0x0001e7df", + "reverse_56": "0x0001e7e5", + "reverse_64": "0x0001e7eb", + "reverse_bd_addr": "0x0001e7f1", + "reverse_bytes": "0x0001e7f7", + "sm_add_event_handler": "0x0001e995", + "sm_address_resolution_lookup": "0x0001eaed", + "sm_authenticated": "0x0001ee95", + "sm_authorization_decline": "0x0001eea3", + "sm_authorization_grant": "0x0001eec3", + "sm_authorization_state": "0x0001eee3", + "sm_bonding_decline": "0x0001eefd", + "sm_config": "0x0001f359", + "sm_config_conn": "0x0001f38d", + "sm_encryption_key_size": "0x0001f547", + "sm_just_works_confirm": "0x0001facd", + "sm_le_device_key": "0x0001fe0d", + "sm_passkey_input": "0x0001fea3", + "sm_private_random_address_generation_get": "0x00020265", + "sm_private_random_address_generation_get_mode": "0x0002026d", + "sm_private_random_address_generation_set_mode": "0x00020279", + "sm_private_random_address_generation_set_update_period": "0x000202a1", + "sm_register_external_ltk_callback": "0x000203dd", + "sm_register_oob_data_callback": "0x000203e9", + "sm_request_pairing": "0x000203f5", + "sm_send_security_request": "0x00020ed3", + "sm_set_accepted_stk_generation_methods": "0x00020ef9", + "sm_set_authentication_requirements": "0x00020f05", + "sm_set_encryption_key_size_range": "0x00020f15", + "sscanf_bd_addr": "0x00021261", + "sysSetPublicDeviceAddr": "0x0002165d", + "uuid128_to_str": "0x00021c85", + "uuid_add_bluetooth_prefix": "0x00021cdd", + "uuid_has_bluetooth_prefix": "0x00021cfd", + "uxListRemove": "0x00021d19", + "uxQueueMessagesWaiting": "0x00021d41", + "uxQueueMessagesWaitingFromISR": "0x00021d69", + "uxQueueSpacesAvailable": "0x00021d85", + "uxTaskGetStackHighWaterMark": "0x00021db1", + "uxTaskPriorityGet": "0x00021dd1", + "uxTaskPriorityGetFromISR": "0x00021ded", + "vListInitialise": "0x00021ea7", + "vListInitialiseItem": "0x00021ebd", + "vListInsert": "0x00021ec3", + "vListInsertEnd": "0x00021ef3", + "vPortEndScheduler": "0x00021f0d", + "vPortEnterCritical": "0x00021f39", + "vPortExitCritical": "0x00021f7d", + "vPortFree": "0x00021fb1", + "vPortSuppressTicksAndSleep": "0x00022045", + "vPortValidateInterruptPriority": "0x0002216d", + "vQueueDelete": "0x000221c9", + "vQueueWaitForMessageRestricted": "0x000221f5", + "vTaskDelay": "0x0002223d", + "vTaskInternalSetTimeOutState": "0x00022289", + "vTaskMissedYield": "0x00022299", + "vTaskPlaceOnEventList": "0x000222a5", + "vTaskPlaceOnEventListRestricted": "0x000222dd", + "vTaskPriorityDisinheritAfterTimeout": "0x0002231d", + "vTaskPrioritySet": "0x000223c9", + "vTaskResume": "0x00022491", + "vTaskStartScheduler": "0x00022515", + "vTaskStepTick": "0x000225a5", + "vTaskSuspend": "0x000225d5", + "vTaskSuspendAll": "0x00022691", + "vTaskSwitchContext": "0x000226a1", + "xPortStartScheduler": "0x00022749", + "xQueueAddToSet": "0x00022811", + "xQueueCreateCountingSemaphore": "0x00022835", + "xQueueCreateCountingSemaphoreStatic": "0x00022871", + "xQueueCreateMutex": "0x000228b5", + "xQueueCreateMutexStatic": "0x000228cb", + "xQueueCreateSet": "0x000228e5", + "xQueueGenericCreate": "0x000228ed", + "xQueueGenericCreateStatic": "0x00022939", + "xQueueGenericReset": "0x000229a1", + "xQueueGenericSend": "0x00022a2d", + "xQueueGenericSendFromISR": "0x00022b99", + "xQueueGiveFromISR": "0x00022c59", + "xQueueGiveMutexRecursive": "0x00022cfd", + "xQueueIsQueueEmptyFromISR": "0x00022d3d", + "xQueueIsQueueFullFromISR": "0x00022d61", + "xQueuePeek": "0x00022d89", + "xQueuePeekFromISR": "0x00022eb1", + "xQueueReceive": "0x00022f1d", + "xQueueReceiveFromISR": "0x00023049", + "xQueueRemoveFromSet": "0x000230dd", + "xQueueSelectFromSet": "0x000230ff", + "xQueueSelectFromSetFromISR": "0x00023111", + "xQueueSemaphoreTake": "0x00023125", + "xQueueTakeMutexRecursive": "0x00023291", + "xTaskCheckForTimeOut": "0x000232d5", + "xTaskCreate": "0x00023345", + "xTaskCreateStatic": "0x000233a1", + "xTaskGetCurrentTaskHandle": "0x00023411", + "xTaskGetSchedulerState": "0x0002341d", + "xTaskGetTickCount": "0x00023439", + "xTaskGetTickCountFromISR": "0x00023445", + "xTaskIncrementTick": "0x00023455", + "xTaskPriorityDisinherit": "0x00023521", + "xTaskPriorityInherit": "0x000235b5", + "xTaskRemoveFromEventList": "0x00023649", + "xTaskResumeAll": "0x000236c9", + "xTaskResumeFromISR": "0x00023791", + "xTimerCreate": "0x0002381d", + "xTimerCreateStatic": "0x00023851", + "xTimerCreateTimerTask": "0x00023889", + "xTimerGenericCommand": "0x000238f5", + "xTimerGetExpiryTime": "0x00023965", + "xTimerGetTimerDaemonTaskHandle": "0x00023985" } \ No newline at end of file diff --git a/bundles/mini/ING9187xx/meta.json b/bundles/mini/ING9187xx/meta.json index a1f47ec08..5db516526 100644 --- a/bundles/mini/ING9187xx/meta.json +++ b/bundles/mini/ING9187xx/meta.json @@ -4,15 +4,21 @@ }, "ram": { "base": 536870912, - "size": 13700 + "size": 13636 }, "rom": { "base": 16384, - "size": 135328 + "size": 135696 + }, + "var": { + "link_layer_features": { + "addr": 148200, + "value": "3ff9010400000000" + } }, "version": [ 1, 9, - 41 + 56 ] } \ No newline at end of file diff --git a/bundles/mini/ING9187xx/platform.bin b/bundles/mini/ING9187xx/platform.bin index e5ba4fed6..05ea741f6 100644 Binary files a/bundles/mini/ING9187xx/platform.bin and b/bundles/mini/ING9187xx/platform.bin differ diff --git a/bundles/mini/ING9188xx/apis.json b/bundles/mini/ING9188xx/apis.json index d7607e104..28dad2954 100644 --- a/bundles/mini/ING9188xx/apis.json +++ b/bundles/mini/ING9188xx/apis.json @@ -6,341 +6,348 @@ "att_dispatch_server_can_send_now": "0x000058e9", "att_dispatch_server_request_can_send_now_event": "0x000058ef", "att_emit_general_event": "0x000059a1", - "att_server_can_send_packet_now": "0x000060cd", - "att_server_deferred_read_response": "0x000060d1", - "att_server_get_mtu": "0x000060e9", - "att_server_indicate": "0x00006155", - "att_server_init": "0x000061d9", - "att_server_notify": "0x00006215", - "att_server_register_packet_handler": "0x0000632d", - "att_server_request_can_send_now_event": "0x00006339", - "att_set_db": "0x00006355", - "att_set_read_callback": "0x00006369", - "att_set_write_callback": "0x00006375", - "bd_addr_cmp": "0x000064e5", - "bd_addr_copy": "0x000064eb", - "bd_addr_to_str": "0x000064f5", - "big_endian_read_16": "0x0000652d", - "big_endian_read_32": "0x00006535", - "big_endian_store_16": "0x00006549", - "big_endian_store_32": "0x00006555", - "btstack_config": "0x000066a9", - "btstack_memory_pool_create": "0x000067e7", - "btstack_memory_pool_free": "0x00006811", - "btstack_memory_pool_get": "0x00006871", - "btstack_push_user_msg": "0x000068d9", - "btstack_push_user_runnable": "0x000068e5", - "btstack_reset": "0x000068f1", - "char_for_nibble": "0x00006bcd", - "eTaskConfirmSleepModeStatus": "0x00006eb1", - "gap_add_dev_to_periodic_list": "0x0000751d", - "gap_add_whitelist": "0x0000752d", - "gap_aes_encrypt": "0x00007539", - "gap_clear_white_lists": "0x00007571", - "gap_clr_adv_set": "0x0000757d", - "gap_clr_periodic_adv_list": "0x00007589", - "gap_create_connection_cancel": "0x00007595", - "gap_default_periodic_adv_sync_transfer_param": "0x000075a1", - "gap_disconnect": "0x000075b9", - "gap_disconnect_all": "0x000075e5", - "gap_ext_create_connection": "0x00007625", - "gap_get_connection_parameter_range": "0x000076fd", - "gap_le_read_channel_map": "0x00007735", - "gap_periodic_adv_create_sync": "0x000077a1", - "gap_periodic_adv_create_sync_cancel": "0x000077c5", - "gap_periodic_adv_set_info_transfer": "0x000077d1", - "gap_periodic_adv_sync_transfer": "0x000077e1", - "gap_periodic_adv_sync_transfer_param": "0x000077f1", - "gap_periodic_adv_term_sync": "0x0000780d", - "gap_read_antenna_info": "0x00007895", - "gap_read_periodic_adv_list_size": "0x000078a1", - "gap_read_phy": "0x000078ad", - "gap_read_remote_used_features": "0x000078b9", - "gap_read_remote_version": "0x000078c5", - "gap_read_rssi": "0x000078d1", - "gap_remove_whitelist": "0x000078dd", - "gap_rmv_adv_set": "0x00007959", - "gap_rmv_dev_from_periodic_list": "0x00007965", - "gap_rx_test_v2": "0x00007975", - "gap_rx_test_v3": "0x00007985", - "gap_set_adv_set_random_addr": "0x000079d1", - "gap_set_callback_for_next_hci": "0x00007a0d", - "gap_set_connection_cte_request_enable": "0x00007a2d", - "gap_set_connection_cte_response_enable": "0x00007a49", - "gap_set_connection_cte_rx_param": "0x00007a59", - "gap_set_connection_cte_tx_param": "0x00007aad", - "gap_set_connection_parameter_range": "0x00007af9", - "gap_set_connectionless_cte_tx_enable": "0x00007b11", - "gap_set_connectionless_cte_tx_param": "0x00007b21", - "gap_set_connectionless_iq_sampling_enable": "0x00007b7d", - "gap_set_data_length": "0x00007bd9", - "gap_set_def_phy": "0x00007bf1", - "gap_set_ext_adv_data": "0x00007c01", - "gap_set_ext_adv_enable": "0x00007c19", - "gap_set_ext_adv_para": "0x00007c89", - "gap_set_ext_scan_enable": "0x00007d61", - "gap_set_ext_scan_para": "0x00007d79", - "gap_set_ext_scan_response_data": "0x00007e19", - "gap_set_host_channel_classification": "0x00007e31", - "gap_set_periodic_adv_data": "0x00007e41", - "gap_set_periodic_adv_enable": "0x00007eb1", - "gap_set_periodic_adv_para": "0x00007ec1", - "gap_set_periodic_adv_rx_enable": "0x00007ed9", - "gap_set_phy": "0x00007ee9", - "gap_set_random_device_address": "0x00007f05", - "gap_start_ccm": "0x00007f35", - "gap_test_end": "0x00007f7d", - "gap_tx_test_v2": "0x00007f89", - "gap_tx_test_v4": "0x00007fa1", - "gap_update_connection_parameters": "0x00007fc5", - "gap_vendor_tx_continuous_wave": "0x00008005", - "gatt_client_cancel_write": "0x0000852d", - "gatt_client_discover_characteristic_descriptors": "0x00008553", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x00008593", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x000085e3", - "gatt_client_discover_characteristics_for_service": "0x00008633", - "gatt_client_discover_primary_services": "0x00008669", - "gatt_client_discover_primary_services_by_uuid128": "0x0000869b", - "gatt_client_discover_primary_services_by_uuid16": "0x000086df", - "gatt_client_execute_write": "0x0000871b", - "gatt_client_find_included_services_for_service": "0x00008741", - "gatt_client_get_mtu": "0x0000876f", - "gatt_client_is_ready": "0x0000880d", - "gatt_client_listen_for_characteristic_value_updates": "0x00008823", - "gatt_client_prepare_write": "0x00008843", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x0000887f", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x000088a9", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x000088af", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x000088dd", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x000088e3", - "gatt_client_read_multiple_characteristic_values": "0x00008911", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x00008941", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x0000896f", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x000089bb", - "gatt_client_register_handler": "0x00008a05", - "gatt_client_reliable_write_long_value_of_characteristic": "0x00008a11", - "gatt_client_signed_write_without_response": "0x00008e15", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008ed9", - "gatt_client_write_client_characteristic_configuration": "0x00008f13", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008f65", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008f75", - "gatt_client_write_long_value_of_characteristic": "0x00008fb1", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008fc1", - "gatt_client_write_value_of_characteristic": "0x00008ffd", - "gatt_client_write_value_of_characteristic_without_response": "0x00009033", - "hci_add_event_handler": "0x0000a569", - "hci_power_control": "0x0000acf1", - "hci_register_acl_packet_handler": "0x0000aea5", - "kv_commit": "0x0000b60d", - "kv_get": "0x0000b669", - "kv_init": "0x0000b675", - "kv_init_backend": "0x0000b6f1", - "kv_put": "0x0000b705", - "kv_remove": "0x0000b711", - "kv_remove_all": "0x0000b745", - "kv_value_modified": "0x0000b775", - "kv_value_modified_of_key": "0x0000b791", - "kv_visit": "0x0000b79d", - "l2cap_add_event_handler": "0x0000b82d", - "l2cap_can_send_packet_now": "0x0000b83d", - "l2cap_create_le_credit_based_connection_request": "0x0000b9f9", - "l2cap_credit_based_send": "0x0000bb3d", - "l2cap_credit_based_send_continue": "0x0000bb69", - "l2cap_disconnect": "0x0000bbe5", - "l2cap_get_le_credit_based_connection_credits": "0x0000be35", - "l2cap_get_peer_mtu_for_local_cid": "0x0000be51", - "l2cap_init": "0x0000c225", - "l2cap_le_send_flow_control_credit": "0x0000c31b", - "l2cap_max_le_mtu": "0x0000c625", - "l2cap_register_packet_handler": "0x0000c74d", - "l2cap_register_service": "0x0000c759", - "l2cap_request_can_send_now_event": "0x0000c869", - "l2cap_request_connection_parameter_update": "0x0000c883", - "l2cap_send_echo_request": "0x0000cd5d", - "l2cap_unregister_service": "0x0000ce1d", - "le_device_db_add": "0x0000ce75", - "le_device_db_find": "0x0000cf3d", - "le_device_db_from_key": "0x0000cf69", - "le_device_db_iter_cur": "0x0000cf71", - "le_device_db_iter_cur_key": "0x0000cf75", - "le_device_db_iter_init": "0x0000cf79", - "le_device_db_iter_next": "0x0000cf81", - "le_device_db_remove_key": "0x0000cfa7", - "ll_aes_encrypt": "0x0000cfd5", - "ll_config": "0x0000d051", - "ll_free": "0x0000d087", - "ll_get_heap_free_size": "0x0000d091", - "ll_hint_on_ce_len": "0x0000d0a5", - "ll_legacy_adv_set_interval": "0x0000d0dd", - "ll_malloc": "0x0000d0ed", - "ll_query_timing_info": "0x0000d225", - "ll_register_hci_acl_previewer": "0x0000d271", - "ll_scan_set_fixed_channel": "0x0000d2d5", - "ll_set_adv_access_address": "0x0000d4ed", - "ll_set_adv_coded_scheme": "0x0000d4f9", - "ll_set_conn_acl_report_latency": "0x0000d521", - "ll_set_conn_coded_scheme": "0x0000d54d", - "ll_set_conn_latency": "0x0000d575", - "ll_set_conn_tx_power": "0x0000d5a1", - "ll_set_def_antenna": "0x0000d5e5", - "ll_set_initiating_coded_scheme": "0x0000d601", - "ll_set_max_conn_number": "0x0000d60d", - "nibble_for_char": "0x0001e585", - "platform_calibrate_rt_clk": "0x0001e625", + "att_server_can_send_packet_now": "0x000060d1", + "att_server_deferred_read_response": "0x000060d5", + "att_server_get_mtu": "0x000060ed", + "att_server_indicate": "0x00006159", + "att_server_init": "0x000061dd", + "att_server_notify": "0x00006219", + "att_server_register_packet_handler": "0x00006331", + "att_server_request_can_send_now_event": "0x0000633d", + "att_set_db": "0x00006359", + "att_set_read_callback": "0x0000636d", + "att_set_write_callback": "0x00006379", + "bd_addr_cmp": "0x000064e9", + "bd_addr_copy": "0x000064ef", + "bd_addr_to_str": "0x000064f9", + "big_endian_read_16": "0x00006531", + "big_endian_read_32": "0x00006539", + "big_endian_store_16": "0x0000654d", + "big_endian_store_32": "0x00006559", + "btstack_config": "0x000066ad", + "btstack_get_capabilities": "0x000066b9", + "btstack_memory_pool_create": "0x00006803", + "btstack_memory_pool_free": "0x0000682d", + "btstack_memory_pool_get": "0x0000688d", + "btstack_push_user_msg": "0x000068f5", + "btstack_push_user_runnable": "0x00006901", + "btstack_reset": "0x0000690d", + "char_for_nibble": "0x00006be9", + "eTaskConfirmSleepModeStatus": "0x00006ecd", + "gap_add_dev_to_periodic_list": "0x00007529", + "gap_add_whitelist": "0x00007539", + "gap_aes_encrypt": "0x00007545", + "gap_clear_white_lists": "0x0000757d", + "gap_clr_adv_set": "0x00007589", + "gap_clr_periodic_adv_list": "0x00007595", + "gap_create_connection_cancel": "0x000075a1", + "gap_default_periodic_adv_sync_transfer_param": "0x000075ad", + "gap_disconnect": "0x000075c5", + "gap_disconnect2": "0x000075cd", + "gap_disconnect_all": "0x000075f9", + "gap_ext_create_connection": "0x00007639", + "gap_get_connection_parameter_range": "0x00007711", + "gap_le_read_channel_map": "0x00007749", + "gap_periodic_adv_create_sync": "0x000077a9", + "gap_periodic_adv_create_sync_cancel": "0x000077cd", + "gap_periodic_adv_set_info_transfer": "0x000077d9", + "gap_periodic_adv_sync_transfer": "0x000077e9", + "gap_periodic_adv_sync_transfer_param": "0x000077f9", + "gap_periodic_adv_term_sync": "0x00007815", + "gap_read_antenna_info": "0x0000789d", + "gap_read_periodic_adv_list_size": "0x000078a9", + "gap_read_phy": "0x000078b5", + "gap_read_remote_used_features": "0x000078c1", + "gap_read_remote_version": "0x000078cd", + "gap_read_rssi": "0x000078d9", + "gap_read_white_lists_size": "0x000078e5", + "gap_remove_whitelist": "0x000078f1", + "gap_rmv_adv_set": "0x0000796d", + "gap_rmv_dev_from_periodic_list": "0x00007979", + "gap_rx_test_v2": "0x00007989", + "gap_rx_test_v3": "0x00007999", + "gap_set_adv_set_random_addr": "0x000079e5", + "gap_set_callback_for_next_hci": "0x00007a09", + "gap_set_connection_cte_request_enable": "0x00007a29", + "gap_set_connection_cte_response_enable": "0x00007a45", + "gap_set_connection_cte_rx_param": "0x00007a55", + "gap_set_connection_cte_tx_param": "0x00007aa9", + "gap_set_connection_parameter_range": "0x00007af5", + "gap_set_connectionless_cte_tx_enable": "0x00007b0d", + "gap_set_connectionless_cte_tx_param": "0x00007b1d", + "gap_set_connectionless_iq_sampling_enable": "0x00007b79", + "gap_set_data_length": "0x00007bd5", + "gap_set_def_phy": "0x00007bed", + "gap_set_ext_adv_data": "0x00007bfd", + "gap_set_ext_adv_enable": "0x00007c15", + "gap_set_ext_adv_para": "0x00007c85", + "gap_set_ext_scan_enable": "0x00007d4d", + "gap_set_ext_scan_para": "0x00007d65", + "gap_set_ext_scan_response_data": "0x00007e05", + "gap_set_host_channel_classification": "0x00007e1d", + "gap_set_periodic_adv_data": "0x00007e2d", + "gap_set_periodic_adv_enable": "0x00007e9d", + "gap_set_periodic_adv_para": "0x00007ead", + "gap_set_periodic_adv_rx_enable": "0x00007ec5", + "gap_set_phy": "0x00007ed5", + "gap_set_random_device_address": "0x00007ef1", + "gap_start_ccm": "0x00007f0d", + "gap_test_end": "0x00007f55", + "gap_tx_test_v2": "0x00007f61", + "gap_tx_test_v4": "0x00007f79", + "gap_update_connection_parameters": "0x00007f9d", + "gap_vendor_tx_continuous_wave": "0x00007fdd", + "gatt_client_cancel_write": "0x00008505", + "gatt_client_discover_characteristic_descriptors": "0x0000852b", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x0000856b", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x000085bb", + "gatt_client_discover_characteristics_for_service": "0x0000860b", + "gatt_client_discover_primary_services": "0x00008641", + "gatt_client_discover_primary_services_by_uuid128": "0x00008673", + "gatt_client_discover_primary_services_by_uuid16": "0x000086b7", + "gatt_client_execute_write": "0x000086f3", + "gatt_client_find_included_services_for_service": "0x00008719", + "gatt_client_get_mtu": "0x00008747", + "gatt_client_is_ready": "0x000087ed", + "gatt_client_listen_for_characteristic_value_updates": "0x00008803", + "gatt_client_prepare_write": "0x00008823", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x0000885f", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x00008889", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x0000888f", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x000088bd", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x000088c3", + "gatt_client_read_multiple_characteristic_values": "0x000088f1", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x00008921", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x0000894f", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x0000899b", + "gatt_client_register_handler": "0x000089e5", + "gatt_client_reliable_write_long_value_of_characteristic": "0x000089f1", + "gatt_client_signed_write_without_response": "0x00008df5", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008eb9", + "gatt_client_write_client_characteristic_configuration": "0x00008ef3", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008f45", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008f55", + "gatt_client_write_long_value_of_characteristic": "0x00008f91", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008fa1", + "gatt_client_write_value_of_characteristic": "0x00008fdd", + "gatt_client_write_value_of_characteristic_without_response": "0x00009013", + "hci_add_event_handler": "0x0000a541", + "hci_power_control": "0x0000acc1", + "hci_register_acl_packet_handler": "0x0000ae75", + "kv_commit": "0x0000b5cd", + "kv_get": "0x0000b629", + "kv_init": "0x0000b635", + "kv_init_backend": "0x0000b6b1", + "kv_put": "0x0000b6c5", + "kv_remove": "0x0000b6d1", + "kv_remove_all": "0x0000b705", + "kv_value_modified": "0x0000b735", + "kv_value_modified_of_key": "0x0000b751", + "kv_visit": "0x0000b75d", + "l2cap_add_event_handler": "0x0000b7ed", + "l2cap_can_send_packet_now": "0x0000b7fd", + "l2cap_create_le_credit_based_connection_request": "0x0000b9b9", + "l2cap_credit_based_send": "0x0000bafd", + "l2cap_credit_based_send_continue": "0x0000bb29", + "l2cap_disconnect": "0x0000bba5", + "l2cap_get_le_credit_based_connection_credits": "0x0000bdf5", + "l2cap_get_peer_mtu_for_local_cid": "0x0000be11", + "l2cap_init": "0x0000c1e5", + "l2cap_le_send_flow_control_credit": "0x0000c2db", + "l2cap_max_le_mtu": "0x0000c5e5", + "l2cap_register_packet_handler": "0x0000c70d", + "l2cap_register_service": "0x0000c719", + "l2cap_request_can_send_now_event": "0x0000c829", + "l2cap_request_connection_parameter_update": "0x0000c843", + "l2cap_send_echo_request": "0x0000cd1d", + "l2cap_unregister_service": "0x0000cddd", + "le_device_db_add": "0x0000ce35", + "le_device_db_find": "0x0000cf0d", + "le_device_db_from_key": "0x0000cf39", + "le_device_db_iter_cur": "0x0000cf41", + "le_device_db_iter_cur_key": "0x0000cf45", + "le_device_db_iter_init": "0x0000cf49", + "le_device_db_iter_next": "0x0000cf51", + "le_device_db_remove_key": "0x0000cf77", + "ll_aes_encrypt": "0x0000cfa5", + "ll_config": "0x0000d021", + "ll_free": "0x0000d057", + "ll_get_capabilities": "0x0000d061", + "ll_get_heap_free_size": "0x0000d081", + "ll_get_states": "0x0000d091", + "ll_hint_on_ce_len": "0x0000d12d", + "ll_legacy_adv_set_interval": "0x0000d165", + "ll_malloc": "0x0000d175", + "ll_query_timing_info": "0x0000d2ad", + "ll_register_hci_acl_previewer": "0x0000d2f9", + "ll_scan_set_fixed_channel": "0x0000d35d", + "ll_set_adv_access_address": "0x0000d575", + "ll_set_adv_coded_scheme": "0x0000d581", + "ll_set_conn_acl_report_latency": "0x0000d5a9", + "ll_set_conn_coded_scheme": "0x0000d5d5", + "ll_set_conn_latency": "0x0000d5fd", + "ll_set_conn_tx_power": "0x0000d629", + "ll_set_def_antenna": "0x0000d66d", + "ll_set_initiating_coded_scheme": "0x0000d689", + "ll_set_max_conn_number": "0x0000d695", + "nibble_for_char": "0x0001e60d", + "platform_calibrate_rt_clk": "0x0001e6ad", "platform_call_on_stack": "0x00004183", - "platform_config": "0x0001e629", - "platform_delete_timer": "0x0001e74d", - "platform_enable_irq": "0x0001e755", - "platform_get_current_task": "0x0001e78d", - "platform_get_gen_os_driver": "0x0001e7b1", - "platform_get_heap_status": "0x0001e7b9", - "platform_get_link_layer_interf": "0x0001e7d1", - "platform_get_task_handle": "0x0001e7d9", - "platform_get_timer_counter": "0x0001e7f9", - "platform_get_us_time": "0x0001e7fd", - "platform_get_version": "0x0001e801", - "platform_hrng": "0x0001e809", - "platform_install_isr_stack": "0x0001e811", - "platform_install_task_stack": "0x0001e81d", - "platform_patch_rf_init_data": "0x0001e855", - "platform_printf": "0x0001e861", - "platform_raise_assertion": "0x0001e875", - "platform_rand": "0x0001e889", - "platform_read_info": "0x0001e88d", - "platform_read_persistent_reg": "0x0001e8bd", - "platform_reset": "0x0001e8cd", - "platform_rt_rc_auto_tune": "0x0001e8f1", - "platform_rt_rc_auto_tune2": "0x0001e8f9", - "platform_rt_rc_tune": "0x0001e981", - "platform_set_abs_timer": "0x0001e995", - "platform_set_evt_callback": "0x0001e999", - "platform_set_evt_callback_table": "0x0001e9ad", - "platform_set_irq_callback": "0x0001e9b9", - "platform_set_irq_callback_table": "0x0001e9d5", - "platform_set_rf_clk_source": "0x0001e9e1", - "platform_set_rf_init_data": "0x0001e9ed", - "platform_set_rf_power_mapping": "0x0001e9f9", - "platform_set_timer": "0x0001ea05", - "platform_shutdown": "0x0001ea09", - "platform_switch_app": "0x0001ea0d", - "platform_trace_raw": "0x0001ea39", - "platform_write_persistent_reg": "0x0001ea51", - "printf_hexdump": "0x0001ec05", - "pvPortMalloc": "0x0001f6f1", - "pvTaskIncrementMutexHeldCount": "0x0001f7d9", - "pvTimerGetTimerID": "0x0001f7f1", - "pxPortInitialiseStack": "0x0001f81d", - "reverse_128": "0x0001f9fd", - "reverse_24": "0x0001fa03", - "reverse_256": "0x0001fa09", - "reverse_48": "0x0001fa0f", - "reverse_56": "0x0001fa15", - "reverse_64": "0x0001fa1b", - "reverse_bd_addr": "0x0001fa21", - "reverse_bytes": "0x0001fa27", - "sm_add_event_handler": "0x0001fd15", - "sm_address_resolution_lookup": "0x0001fe6d", - "sm_authenticated": "0x000201e9", - "sm_authorization_decline": "0x000201f7", - "sm_authorization_grant": "0x00020217", - "sm_authorization_state": "0x00020237", - "sm_bonding_decline": "0x00020251", - "sm_config": "0x000206ad", - "sm_config_conn": "0x000206c5", - "sm_encryption_key_size": "0x0002087b", - "sm_just_works_confirm": "0x00020e01", - "sm_le_device_key": "0x00021139", - "sm_passkey_input": "0x000211cf", - "sm_private_random_address_generation_get": "0x00021589", - "sm_private_random_address_generation_get_mode": "0x00021591", - "sm_private_random_address_generation_set_mode": "0x0002159d", - "sm_private_random_address_generation_set_update_period": "0x000215c5", - "sm_register_external_ltk_callback": "0x00021701", - "sm_register_oob_data_callback": "0x0002170d", - "sm_request_pairing": "0x00021719", - "sm_send_security_request": "0x000221ef", - "sm_set_accepted_stk_generation_methods": "0x00022215", - "sm_set_authentication_requirements": "0x00022221", - "sm_set_encryption_key_size_range": "0x0002222d", - "sscanf_bd_addr": "0x00022589", - "sysSetPublicDeviceAddr": "0x0002293d", - "uuid128_to_str": "0x000230e9", - "uuid_add_bluetooth_prefix": "0x00023141", - "uuid_has_bluetooth_prefix": "0x00023161", - "uxListRemove": "0x0002317d", - "uxQueueMessagesWaiting": "0x000231a5", - "uxQueueMessagesWaitingFromISR": "0x000231cd", - "uxQueueSpacesAvailable": "0x000231e9", - "uxTaskGetStackHighWaterMark": "0x00023215", - "uxTaskPriorityGet": "0x00023235", - "uxTaskPriorityGetFromISR": "0x00023251", - "vListInitialise": "0x0002330b", - "vListInitialiseItem": "0x00023321", - "vListInsert": "0x00023327", - "vListInsertEnd": "0x00023357", - "vPortEndScheduler": "0x00023371", - "vPortEnterCritical": "0x0002339d", - "vPortExitCritical": "0x000233e1", - "vPortFree": "0x00023415", - "vPortSuppressTicksAndSleep": "0x000234a9", - "vPortValidateInterruptPriority": "0x000235d1", - "vQueueDelete": "0x0002362d", - "vQueueWaitForMessageRestricted": "0x00023659", - "vTaskDelay": "0x000236a1", - "vTaskInternalSetTimeOutState": "0x000236ed", - "vTaskMissedYield": "0x000236fd", - "vTaskPlaceOnEventList": "0x00023709", - "vTaskPlaceOnEventListRestricted": "0x00023741", - "vTaskPriorityDisinheritAfterTimeout": "0x00023781", - "vTaskPrioritySet": "0x0002382d", - "vTaskResume": "0x000238f5", - "vTaskStartScheduler": "0x00023979", - "vTaskStepTick": "0x00023a09", - "vTaskSuspend": "0x00023a39", - "vTaskSuspendAll": "0x00023af5", - "vTaskSwitchContext": "0x00023b05", - "xPortStartScheduler": "0x00023bb5", - "xQueueAddToSet": "0x00023c7d", - "xQueueCreateCountingSemaphore": "0x00023ca1", - "xQueueCreateCountingSemaphoreStatic": "0x00023cdd", - "xQueueCreateMutex": "0x00023d21", - "xQueueCreateMutexStatic": "0x00023d37", - "xQueueCreateSet": "0x00023d51", - "xQueueGenericCreate": "0x00023d59", - "xQueueGenericCreateStatic": "0x00023da5", - "xQueueGenericReset": "0x00023e0d", - "xQueueGenericSend": "0x00023e99", - "xQueueGenericSendFromISR": "0x00024005", - "xQueueGiveFromISR": "0x000240c5", - "xQueueGiveMutexRecursive": "0x00024169", - "xQueueIsQueueEmptyFromISR": "0x000241a9", - "xQueueIsQueueFullFromISR": "0x000241cd", - "xQueuePeek": "0x000241f5", - "xQueuePeekFromISR": "0x0002431d", - "xQueueReceive": "0x00024389", - "xQueueReceiveFromISR": "0x000244b5", - "xQueueRemoveFromSet": "0x00024549", - "xQueueSelectFromSet": "0x0002456b", - "xQueueSelectFromSetFromISR": "0x0002457d", - "xQueueSemaphoreTake": "0x00024591", - "xQueueTakeMutexRecursive": "0x000246fd", - "xTaskCheckForTimeOut": "0x00024741", - "xTaskCreate": "0x000247b1", - "xTaskCreateStatic": "0x0002480d", - "xTaskGetCurrentTaskHandle": "0x0002487d", - "xTaskGetSchedulerState": "0x00024889", - "xTaskGetTickCount": "0x000248a5", - "xTaskGetTickCountFromISR": "0x000248b1", - "xTaskIncrementTick": "0x000248c1", - "xTaskPriorityDisinherit": "0x0002498d", - "xTaskPriorityInherit": "0x00024a21", - "xTaskRemoveFromEventList": "0x00024ab5", - "xTaskResumeAll": "0x00024b35", - "xTaskResumeFromISR": "0x00024bfd", - "xTimerCreate": "0x00024c89", - "xTimerCreateStatic": "0x00024cbd", - "xTimerCreateTimerTask": "0x00024cf5", - "xTimerGenericCommand": "0x00024d61", - "xTimerGetExpiryTime": "0x00024dd1", - "xTimerGetTimerDaemonTaskHandle": "0x00024df1" + "platform_cancel_us_timer": "0x0001e6b1", + "platform_config": "0x0001e6c5", + "platform_create_us_timer": "0x0001e7e9", + "platform_delete_timer": "0x0001e7fd", + "platform_enable_irq": "0x0001e805", + "platform_get_current_task": "0x0001e83d", + "platform_get_gen_os_driver": "0x0001e861", + "platform_get_heap_status": "0x0001e869", + "platform_get_link_layer_interf": "0x0001e881", + "platform_get_task_handle": "0x0001e889", + "platform_get_timer_counter": "0x0001e8a9", + "platform_get_us_time": "0x0001e8ad", + "platform_get_version": "0x0001e8b1", + "platform_hrng": "0x0001e8b9", + "platform_install_isr_stack": "0x0001e8c1", + "platform_install_task_stack": "0x0001e8cd", + "platform_patch_rf_init_data": "0x0001e905", + "platform_printf": "0x0001e911", + "platform_raise_assertion": "0x0001e925", + "platform_rand": "0x0001e939", + "platform_read_info": "0x0001e93d", + "platform_read_persistent_reg": "0x0001e96d", + "platform_reset": "0x0001e97d", + "platform_rt_rc_auto_tune": "0x0001e9a1", + "platform_rt_rc_auto_tune2": "0x0001e9a9", + "platform_rt_rc_tune": "0x0001ea25", + "platform_set_abs_timer": "0x0001ea49", + "platform_set_evt_callback": "0x0001ea4d", + "platform_set_evt_callback_table": "0x0001ea61", + "platform_set_irq_callback": "0x0001ea6d", + "platform_set_irq_callback_table": "0x0001ea89", + "platform_set_rf_clk_source": "0x0001ea95", + "platform_set_rf_init_data": "0x0001eaa1", + "platform_set_rf_power_mapping": "0x0001eaad", + "platform_set_timer": "0x0001eab9", + "platform_shutdown": "0x0001eabd", + "platform_switch_app": "0x0001eac1", + "platform_trace_raw": "0x0001eaed", + "platform_write_persistent_reg": "0x0001eb05", + "printf_hexdump": "0x0001ecb9", + "pvPortMalloc": "0x0001f7a5", + "pvTaskIncrementMutexHeldCount": "0x0001f88d", + "pvTimerGetTimerID": "0x0001f8a5", + "pxPortInitialiseStack": "0x0001f8d1", + "reverse_128": "0x0001fab1", + "reverse_24": "0x0001fab7", + "reverse_256": "0x0001fabd", + "reverse_48": "0x0001fac3", + "reverse_56": "0x0001fac9", + "reverse_64": "0x0001facf", + "reverse_bd_addr": "0x0001fad5", + "reverse_bytes": "0x0001fadb", + "sm_add_event_handler": "0x0001fdc9", + "sm_address_resolution_lookup": "0x0001ff21", + "sm_authenticated": "0x000202c9", + "sm_authorization_decline": "0x000202d7", + "sm_authorization_grant": "0x000202f7", + "sm_authorization_state": "0x00020317", + "sm_bonding_decline": "0x00020331", + "sm_config": "0x0002078d", + "sm_config_conn": "0x000207c1", + "sm_encryption_key_size": "0x0002097b", + "sm_just_works_confirm": "0x00020f01", + "sm_le_device_key": "0x00021241", + "sm_passkey_input": "0x000212d7", + "sm_private_random_address_generation_get": "0x00021699", + "sm_private_random_address_generation_get_mode": "0x000216a1", + "sm_private_random_address_generation_set_mode": "0x000216ad", + "sm_private_random_address_generation_set_update_period": "0x000216d5", + "sm_register_external_ltk_callback": "0x00021811", + "sm_register_oob_data_callback": "0x0002181d", + "sm_request_pairing": "0x00021829", + "sm_send_security_request": "0x00022307", + "sm_set_accepted_stk_generation_methods": "0x0002232d", + "sm_set_authentication_requirements": "0x00022339", + "sm_set_encryption_key_size_range": "0x00022349", + "sscanf_bd_addr": "0x00022695", + "sysSetPublicDeviceAddr": "0x00022a91", + "uuid128_to_str": "0x00023251", + "uuid_add_bluetooth_prefix": "0x000232a9", + "uuid_has_bluetooth_prefix": "0x000232c9", + "uxListRemove": "0x000232e5", + "uxQueueMessagesWaiting": "0x0002330d", + "uxQueueMessagesWaitingFromISR": "0x00023335", + "uxQueueSpacesAvailable": "0x00023351", + "uxTaskGetStackHighWaterMark": "0x0002337d", + "uxTaskPriorityGet": "0x0002339d", + "uxTaskPriorityGetFromISR": "0x000233b9", + "vListInitialise": "0x00023473", + "vListInitialiseItem": "0x00023489", + "vListInsert": "0x0002348f", + "vListInsertEnd": "0x000234bf", + "vPortEndScheduler": "0x000234d9", + "vPortEnterCritical": "0x00023505", + "vPortExitCritical": "0x00023549", + "vPortFree": "0x0002357d", + "vPortSuppressTicksAndSleep": "0x00023611", + "vPortValidateInterruptPriority": "0x00023739", + "vQueueDelete": "0x00023795", + "vQueueWaitForMessageRestricted": "0x000237c1", + "vTaskDelay": "0x00023809", + "vTaskInternalSetTimeOutState": "0x00023855", + "vTaskMissedYield": "0x00023865", + "vTaskPlaceOnEventList": "0x00023871", + "vTaskPlaceOnEventListRestricted": "0x000238a9", + "vTaskPriorityDisinheritAfterTimeout": "0x000238e9", + "vTaskPrioritySet": "0x00023995", + "vTaskResume": "0x00023a5d", + "vTaskStartScheduler": "0x00023ae1", + "vTaskStepTick": "0x00023b71", + "vTaskSuspend": "0x00023ba1", + "vTaskSuspendAll": "0x00023c5d", + "vTaskSwitchContext": "0x00023c6d", + "xPortStartScheduler": "0x00023d15", + "xQueueAddToSet": "0x00023ddd", + "xQueueCreateCountingSemaphore": "0x00023e01", + "xQueueCreateCountingSemaphoreStatic": "0x00023e3d", + "xQueueCreateMutex": "0x00023e81", + "xQueueCreateMutexStatic": "0x00023e97", + "xQueueCreateSet": "0x00023eb1", + "xQueueGenericCreate": "0x00023eb9", + "xQueueGenericCreateStatic": "0x00023f05", + "xQueueGenericReset": "0x00023f6d", + "xQueueGenericSend": "0x00023ff9", + "xQueueGenericSendFromISR": "0x00024165", + "xQueueGiveFromISR": "0x00024225", + "xQueueGiveMutexRecursive": "0x000242c9", + "xQueueIsQueueEmptyFromISR": "0x00024309", + "xQueueIsQueueFullFromISR": "0x0002432d", + "xQueuePeek": "0x00024355", + "xQueuePeekFromISR": "0x0002447d", + "xQueueReceive": "0x000244e9", + "xQueueReceiveFromISR": "0x00024615", + "xQueueRemoveFromSet": "0x000246a9", + "xQueueSelectFromSet": "0x000246cb", + "xQueueSelectFromSetFromISR": "0x000246dd", + "xQueueSemaphoreTake": "0x000246f1", + "xQueueTakeMutexRecursive": "0x0002485d", + "xTaskCheckForTimeOut": "0x000248a1", + "xTaskCreate": "0x00024911", + "xTaskCreateStatic": "0x0002496d", + "xTaskGetCurrentTaskHandle": "0x000249dd", + "xTaskGetSchedulerState": "0x000249e9", + "xTaskGetTickCount": "0x00024a05", + "xTaskGetTickCountFromISR": "0x00024a11", + "xTaskIncrementTick": "0x00024a21", + "xTaskPriorityDisinherit": "0x00024aed", + "xTaskPriorityInherit": "0x00024b81", + "xTaskRemoveFromEventList": "0x00024c15", + "xTaskResumeAll": "0x00024c95", + "xTaskResumeFromISR": "0x00024d5d", + "xTimerCreate": "0x00024de9", + "xTimerCreateStatic": "0x00024e1d", + "xTimerCreateTimerTask": "0x00024e55", + "xTimerGenericCommand": "0x00024ec1", + "xTimerGetExpiryTime": "0x00024f31", + "xTimerGetTimerDaemonTaskHandle": "0x00024f51" } \ No newline at end of file diff --git a/bundles/mini/ING9188xx/meta.json b/bundles/mini/ING9188xx/meta.json index 31a5f8c01..ab74b2460 100644 --- a/bundles/mini/ING9188xx/meta.json +++ b/bundles/mini/ING9188xx/meta.json @@ -4,15 +4,21 @@ }, "ram": { "base": 536870912, - "size": 13700 + "size": 13636 }, "rom": { "base": 16384, - "size": 141360 + "size": 141736 + }, + "var": { + "link_layer_features": { + "addr": 153892, + "value": "3ff9ff0700000000" + } }, "version": [ 1, 9, - 41 + 56 ] } \ No newline at end of file diff --git a/bundles/mini/ING9188xx/platform.bin b/bundles/mini/ING9188xx/platform.bin index 85eee002c..b1777d1b5 100644 Binary files a/bundles/mini/ING9188xx/platform.bin and b/bundles/mini/ING9188xx/platform.bin differ diff --git a/bundles/mini/inc/bluetooth.h b/bundles/mini/inc/bluetooth.h index 44c58585a..8d306ff5e 100644 --- a/bundles/mini/inc/bluetooth.h +++ b/bundles/mini/inc/bluetooth.h @@ -40,10 +40,14 @@ typedef uint8_t bd_addr_t[BD_ADDR_LEN]; typedef enum { BD_ADDR_TYPE_LE_PUBLIC = 0, BD_ADDR_TYPE_LE_RANDOM = 0x01, - BD_ADDR_TYPE_LE_RESOVLED_PUB = 0x02, - BD_ADDR_TYPE_LE_RESOVLED_RAN = 0x03 + BD_ADDR_TYPE_LE_RESOLVED_PUB = 0x02, + BD_ADDR_TYPE_LE_RESOLVED_RAN = 0x03 } bd_addr_type_t; +// back-compatibility for typos +#define BD_ADDR_TYPE_LE_RESOVLED_PUB BD_ADDR_TYPE_LE_RESOLVED_PUB +#define BD_ADDR_TYPE_LE_RESOVLED_RAN BD_ADDR_TYPE_LE_RESOLVED_RAN + /** * @brief link key */ @@ -718,7 +722,7 @@ typedef enum { #define SM_AUTHREQ_NO_BONDING 0x00 #define SM_AUTHREQ_BONDING 0x01 #define SM_AUTHREQ_MITM_PROTECTION 0x04 -#define SM_AUTHREQ_SC 0x08 +#define SM_AUTHREQ_SC 0x08 // support of LE Secure Connections pairing // Key distribution flags used by spec #define SM_KEYDIST_ENC_KEY 0X01 diff --git a/bundles/mini/inc/btstack_defines.h b/bundles/mini/inc/btstack_defines.h index a8d08006c..25f1463b0 100644 --- a/bundles/mini/inc/btstack_defines.h +++ b/bundles/mini/inc/btstack_defines.h @@ -385,6 +385,20 @@ */ #define SM_EVENT_STATE_CHANGED 0xDC + /** + * @format H1B1 + * @param handle + * @param show calculated numeric value that needs to be compared + */ +#define SM_EVENT_NUMERIC_COMPARISON_REQUEST 0xDD + +/** + * @format PP + * @param irk + * @param dhk + */ +#define SM_EVENT_IRK_DHK_RESULT 0xDE + // GAP /** diff --git a/bundles/mini/inc/btstack_event.h b/bundles/mini/inc/btstack_event.h index e5ab49a55..dc87fa82a 100644 --- a/bundles/mini/inc/btstack_event.h +++ b/bundles/mini/inc/btstack_event.h @@ -107,6 +107,21 @@ uint32_t btstack_push_user_runnable(f_btstack_user_runnable fun, void *data, con */ uint8_t btstack_reset(void); +typedef struct btstack_capabilities +{ + uint16_t adv_set_num; // max number of advertising sets + uint16_t conn_num; // max number of connections + uint16_t max_mtu; // max MTU + uint16_t device_db_num; // max number of devices in database +} btstack_capabilities_t; + +/** + * @brief Get BT stack capabilities. + * + * @param[out] capabilities see `btstack_capabilities_t`. + */ +void btstack_get_capabilities(btstack_capabilities_t *capabilities); + /*** * @brief Get subevent code for le event * @param event packet @@ -780,6 +795,26 @@ static __INLINE hci_con_handle_t sm_event_numeric_comparison_get_handle(const ui return little_endian_read_16(event, 2); } +/** + * @brief Get field addr_type from event SM_EVENT_NUMERIC_COMPARISON_REQUEST + * @param event packet + * @return addr_type + * @note: btstack_type 1 + */ +static __INLINE uint8_t sm_event_numeric_comparison_get_addr_type(const uint8_t * event){ + return *decode_event_offset(event, uint8_t, 4); +} + +/** + * @brief Get field address from event SM_EVENT_NUMERIC_COMPARISON_REQUEST + * @param event packet + * @param Pointer to storage for address + * @note: btstack_type B + */ +static __INLINE void sm_event_numeric_comparison_get_address(const uint8_t * event, uint8_t * address){ + reverse_bd_addr(decode_event_offset(event, uint8_t, 5), address); +} + /** * @brief Get field compare value from event SM_EVENT_NUMERIC_COMPARISON_REQUEST * @param event packet @@ -790,6 +825,24 @@ static __INLINE uint32_t sm_event_numeric_comparison_get_compare_value(const uin return little_endian_read_32(event, 11); } +/** + * @brief Get IRK from event SM_EVENT_IRK_DHK_RESULT + * @param event packet + * @return irk + */ +static __INLINE const uint8_t *sm_event_irk_dhk_result_get_irk(const uint8_t *event) { + return *decode_event_offset(event, uint8_t *, 2); +} + +/** + * @brief Get DHK from event SM_EVENT_IRK_DHK_RESULT + * @param event packet + * @return dhk + */ +static __INLINE const uint8_t *sm_event_irk_dhk_result_get_dhk(const uint8_t *event) { + return *decode_event_offset(event, uint8_t *, 2 + sizeof(uintptr_t)); +} + /** * @brief Get field handle from event GAP_EVENT_SECURITY_LEVEL * @param event packet diff --git a/bundles/mini/inc/gap.h b/bundles/mini/inc/gap.h index 94ec41d4e..020bb0b27 100644 --- a/bundles/mini/inc/gap.h +++ b/bundles/mini/inc/gap.h @@ -54,11 +54,27 @@ uint8_t gap_set_random_device_address(const uint8_t *address); /** * @brief Disconnect connection with handle * + * This is equivalent to `gap_disconnect2(handle, 0x13)`. + * * @param handle Used to identify an advertising set. Range: 0x00 to 0xEF * @return 0: Message is sent out or the connection already release */ uint8_t gap_disconnect(hci_con_handle_t handle); +/** + * @brief Disconnect connection with handle + * + * @param handle Used to identify an advertising set. Range: 0x00 to 0xEF + * @param reason Reason: + * - Authentication Failure error code (0x05) + * - Other End Terminated Connection error codes (0x13 to 0x15) + * - Unsupported Remote Feature error code (0x1A) + * - Pairing with Unit Key Not Supported error code (0x29) + * - Unacceptable Connection Parameters error code (0x3B) + * @return 0: Message is sent out or the connection already release + */ +uint8_t gap_disconnect2(hci_con_handle_t handle, uint8_t reason); + /** * @brief disconnect multi-connections */ @@ -70,7 +86,7 @@ void gap_disconnect_all(void); * @param[in] addtype BLE address type * @return 0: Message is sent to controller */ -uint8_t gap_add_whitelist(const uint8_t *address,bd_addr_type_t addtype); +uint8_t gap_add_whitelist(const uint8_t *address, bd_addr_type_t addtype); /** * @brief remove whitelist from controller @@ -79,7 +95,7 @@ uint8_t gap_add_whitelist(const uint8_t *address,bd_addr_type_t addtype); * @param addtype BLE address type * @return 0: Message is sent to controller */ -uint8_t gap_remove_whitelist(const uint8_t *address,bd_addr_type_t addtype); +uint8_t gap_remove_whitelist(const uint8_t *address, bd_addr_type_t addtype); /** * @brief clear white lists in controller @@ -88,6 +104,122 @@ uint8_t gap_remove_whitelist(const uint8_t *address,bd_addr_type_t addtype); */ uint8_t gap_clear_white_lists(void); +/** + * @brief read white lists size in controller + * + * @return 0: message sent out others: failed + */ +uint8_t gap_read_white_lists_size(void); + +/** + * @brief Add one device to the resolving list used to generate and resolve + * Resolvable Private Addresses in the Controller. + * + * @param address peer identity address + * @param addtype peer identity address type + * @param peer_irk IRK of the peer device + * @param local_irk IRK of the local device + * @return 0: message sent out others: failed + */ +// uint8_t gap_add_dev_to_resolving_list(const uint8_t *address, bd_addr_type_t addtype, +// const uint8_t *peer_irk, const uint8_t *local_irk); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Remove one device from the resolving list used to resolve Resolvable + * Private Addresses in the Controller. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_remove_dev_from_resolving_list(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Remove all devices from the resolving list used to resolve Resolvable + * Private Addresses in the Controller. + * + * @return 0: message sent out others: failed + */ +// uint8_t gap_clear_resolving_list(void); +// WARNING: ^^^ this API is not available in this release + + +// LE Privacy Mode +typedef enum privacy_mode +{ + PRIVACY_MODE_NETWORK = 0, // Network Privacy Mode (default) + // Identity address is not accepted if IRK is available + PRIVACY_MODE_DEVICE = 1, // Device Privacy Mode + // Identity address is accepted even if IRK is available +} privacy_mode_t; + +/** + * @brief Specify the privacy mode to be used for a given entry on the resolving list. + * + * @param address peer identity address + * @param addtype peer identity address type + * @param privacy_mode privacy mode for this peer device + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_privacy_mode(const uint8_t *address, bd_addr_type_t addtype, +// privacy_mode_t privacy_mode); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Get the current peer Resolvable Private Address being used for the + * corresponding peer Public and Random (static) Identity Address. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_read_peer_resolving_addr(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Get the current local Resolvable Private Address being used for the + * corresponding peer Identity Address. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_read_local_resolving_addr(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Enable resolution of Resolvable Private Addresses in the Controller. + * + * @param enable address resolution enable + * 0: disabled (default) + * 1: enabled + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_addr_resolution_enable(const uint8_t enable); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Set the length of time the Controller uses a Resolvable Private Address + * before a new resolvable private address is generated and starts being used. + * + * @param rpa_timeout RPA_Timeout measured in seconds + * Range: 0x0001 to 0x0E10 + * Time range: 1 s to 1 hour + * Default: 0x0384 (900 s or 15 minutes) + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_resolvable_private_addr_timeout(uint16_t rpa_timeout); +// WARNING: ^^^ this API is not available in this release + + /** * @brief read rssi value of a appointed hci connection * @@ -290,13 +422,13 @@ typedef enum scan_filter_policy SCAN_ACCEPT_WLIST_EXCEPT_NOT_DIRECTED, // Accept all advertising packets except directed advertising packets // where the initiator's identity address does not address this device - SCAN_ACCEPT_ALL_EXCEPT_IDENTITY_NOT_MATCH, + // SCAN_ACCEPT_ALL_EXCEPT_IDENTITY_NOT_MATCH, // Accept all advertising packets except: // 1. advertising packets where the advertiser's identity address is not in // the White List; and // 2. directed advertising packets where the initiator's identity address // does not address this device - SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH + // SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH } scan_filter_policy_t; /** @@ -318,6 +450,9 @@ uint8_t gap_set_ext_scan_para(const bd_addr_type_t own_addr_type, const scan_fil /** * @brief to set the extended scan response data for an advertising set * + * Note: Scan response data is cleared after `gap_set_ext_adv_para()` on the same + * advertising set handle. + * * @param adv_handle handle of advertising set handle * * @param length length of advertising data @@ -482,6 +617,9 @@ typedef enum adv_data_frag_pref /** * @brief to set extended advertising data * + * Note: Advertising data is cleared after `gap_set_ext_adv_para()` on the same + * advertising set handle. + * * @param adv_handle advertising set handle. * * @param length advertising data length @@ -497,6 +635,9 @@ uint8_t gap_set_ext_adv_data(const uint8_t adv_handle, uint16_t length, const ui /** * @brief LE Set Periodic Advertising Data command * + * Note: Advertising data is cleared after `gap_set_ext_adv_para()` and + * `gap_set_periodic_adv_para()` on the same advertising set handle. + * * @param adv_handle advertising set handle. * * @param length advertising data length (<= 1650 bytes) @@ -723,6 +864,7 @@ typedef struct { // Supervision timeout for the LE Link, unit is 10ms uint16_t supervision_timeout; // Informative parameter recommending the min/max length of connection event needed for this LE connection + // unit is 625us uint16_t min_ce_len; uint16_t max_ce_len; } conn_para_t; diff --git a/bundles/mini/inc/le_device_db.h b/bundles/mini/inc/le_device_db.h index b81d04f5a..68de61b61 100644 --- a/bundles/mini/inc/le_device_db.h +++ b/bundles/mini/inc/le_device_db.h @@ -16,14 +16,15 @@ typedef struct le_device_memory_db { // Identification uint8_t addr_type; - uint8_t key_size; - uint8_t authenticated; - uint8_t authorized; + uint8_t key_size; + uint8_t authenticated; + uint8_t authorized:1; + uint8_t sm_sc:1; bd_addr_t addr; sm_key_t irk; - // Stored pairing information allows to re-establish an enncrypted connection + // Stored pairing information allows to re-establish an encrypted connection // with a peripheral that doesn't have any persistent memory sm_key_t ltk; uint16_t ediv; @@ -36,7 +37,6 @@ typedef struct le_device_memory_db { // Signed Writes by us sm_key_t local_csrk; uint32_t local_counter; - } le_device_memory_db_t; #pragma pack (pop) diff --git a/bundles/mini/inc/ll_api.h b/bundles/mini/inc/ll_api.h index 24558161d..f84ac1c76 100644 --- a/bundles/mini/inc/ll_api.h +++ b/bundles/mini/inc/ll_api.h @@ -33,6 +33,25 @@ typedef enum ll_config_item_e LL_CFG_FEATURE_SET_MASK, } ll_config_item_t; +typedef struct ll_capabilities +{ + const uint8_t *features; // Link Layer features + uint16_t adv_set_num; // max number of advertising sets + uint16_t conn_num; // max number of connections + uint16_t whitelist_size; // size of whitelists + uint16_t resolving_list_size; // size of resolving list + uint16_t periodic_advertiser_list_size; // size of periodic advertiser list + uint16_t adv_dup_filter_size; // size of items for filtering + // advertising duplication +} ll_capabilities_t; + +/** + * @brief Get Link Layer capabilities. + * + * @param[out] capabilities see `ll_capabilities_t`. + */ +void ll_get_capabilities(ll_capabilities_t *capabilities); + /** **************************************************************************************** * @brief Config LL specific parameters @@ -43,6 +62,26 @@ typedef enum ll_config_item_e */ void ll_config(ll_config_item_t item, uint32_t value); +/** + **************************************************************************************** + * @brief Get states of LL + * + * Note: Parameters can be set to NULL if the relevant states are not needed. + * + * @param[out] adv_states[1] states of all advertising sets + * Bit[n]: advertising set n is enabled + * @param[out] conn_states[1] states of all connections + * Bit[n]: connection n is active + * @param[out] sync_states[1] states of all synchronized periodic adv sets + * Bit[n]: sync_handle n is active + * @param[out] other_states[1] other states: + * Bit[0]: if scanning is ON + * Bit[1]: if initiating is ON + **************************************************************************************** + */ +void ll_get_states(uint32_t *adv_states, uint32_t *conn_states, + uint32_t *sync_states, uint32_t *other_states); + /** **************************************************************************************** * @brief set Tx power range diff --git a/bundles/mini/inc/os/FreeRTOSConfig.h b/bundles/mini/inc/os/FreeRTOSConfig.h index 64be8f4a0..30c697203 100644 --- a/bundles/mini/inc/os/FreeRTOSConfig.h +++ b/bundles/mini/inc/os/FreeRTOSConfig.h @@ -91,17 +91,27 @@ #ifdef POWER_SAVING #define configUSE_TICKLESS_IDLE 1 #endif -#define configSYSTICK_CLOCK_HZ 32768 -#ifdef TARGET_FPGA -#define configCPU_CLOCK_HZ ( ( unsigned long ) 32000000 ) +#define configSYSTICK_CLOCK_HZ RTC_CLK_FREQ + +#if (INGCHIPS_FAMILY == INGCHIPS_FAMILY_918) +#define configCPU_CLOCK_HZ PLL_CLK_FREQ +#elif (INGCHIPS_FAMILY == INGCHIPS_FAMILY_916) +#define configCPU_CLOCK_HZ SYSCTRL_GetHClk() #else -#define configCPU_CLOCK_HZ ( ( unsigned long ) 48000000 ) +#error unknow chip family #endif + +#if (configSYSTICK_CLOCK_HZ == 32768) #define configTICK_RATE_HZ ( ( TickType_t ) 1024 ) +#elif (configSYSTICK_CLOCK_HZ == 50000) +#define configTICK_RATE_HZ ( ( TickType_t ) 1000 ) +#else +#error configSYSTICK_CLOCK_HZ +#endif #define configMAX_PRIORITIES ( 15 ) #define configMINIMAL_STACK_SIZE ( ( unsigned short ) 128 ) #ifndef configTOTAL_HEAP_SIZE -#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 8500 ) ) +#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 24896 ) ) #endif #define configMAX_TASK_NAME_LEN ( 16 ) #define configUSE_TRACE_FACILITY 0 diff --git a/bundles/mini/inc/platform_api.h b/bundles/mini/inc/platform_api.h index 78ed07d0b..a81fe121f 100644 --- a/bundles/mini/inc/platform_api.h +++ b/bundles/mini/inc/platform_api.h @@ -113,7 +113,7 @@ typedef enum PLATFORM_CB_EVT_LLE_INIT, // when allocation on heap fails (heap out of memory) - // NOTE: param (void *data) is cased from an integer identifying which heap is OOM: + // NOTE: param (void *data) is casted from an integer identifying which heap is OOM: // * 0: FreeRTOS's heap; // * 1: Link Layer's heap; // * 2: Link Layer's task pool. @@ -327,7 +327,7 @@ typedef struct /** **************************************************************************************** - * @brief Get heap status + * @brief Get status of built-in RTOS's heap * * @param[out] status heap status **************************************************************************************** @@ -374,7 +374,7 @@ void platform_switch_app(const uint32_t app_addr); * in power saving mode. * * For ING918: the least FOUR significant bits of `value` are saved; - * For ING916: the least TWO significant bits of `value` are saved. + * For ING916: the least FIVE significant bits of `value` are saved. * * @param[in] value value **************************************************************************************** @@ -464,8 +464,13 @@ typedef enum PLATFORM_CFG_PS_DBG_4, // Debugging parameters for ING916. Default (0) // Bit [0]: `platform_shutdown` uses DEEPER SLEEP (1) or SLEEP (0) PLATFORM_CFG_FAST_DEEP_SLEEP_TIME_REDUCTION, // sleep time reduction (fast deep sleep mode) in us. - // Requirement: < PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION + // Requirement: <= PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION + // When equal to PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION, fast deep sleep mode is not used // Only available for ING916 (default: ~2000us) + PLATFORM_CFG_AUTO_REDUCE_CLOCK_FREQ, // automatic reduce CPU clock frequency in these circumstances: + // * the default IDLE procedure + // * when entering sleep modes + // Only available for ING916 (default: Enabled) } platform_cfg_item_t; typedef enum @@ -604,7 +609,15 @@ uint64_t platform_get_us_time(void); */ void platform_printf(const char *format, ...); -// NOTE: for debug only +/** + **************************************************************************************** + * @brief Set public device address + * + * NOTE: This is for debug only. + * + * @param[in] addr device address in little-endian. + **************************************************************************************** + */ void sysSetPublicDeviceAddr(const unsigned char *addr); // set rf source @@ -783,6 +796,55 @@ void platform_set_abs_timer(f_platform_timer_callback callback, uint32_t abs_tim */ void platform_delete_timer(f_platform_timer_callback callback); +typedef void * platform_us_timer_handle_t; + +/** + **************************************************************************************** + * @brief Callback function of microsecond (us) resolution timer + * + * @param[in] timer_handle handle of this timer + * @param[in] time_us internal timer counter when invoke this callback + * @param[in] param user parameter + * @return (must be NULL) + **************************************************************************************** + */ +typedef void * (* f_platform_us_timer_callback)(platform_us_timer_handle_t timer_handle, + uint64_t time_us, void *param); + +/** + **************************************************************************************** + * @brief Setup a single-shot platform timer with microsecond (us) resolution + * + * Although `abs_time` is in microsecond (us), callback is **not guaranteed** + * to be invoked with such resolution. + * + * This type of timers are much like `platform_set_timer`, except that: + * 1. resolution is higher; + * 2. callback is invoked in the context of an ISR. + * + * @param[in] abs_time when `platform_get_us_timer() == abs_time`, callback is invoked. + * @param[in] callback the callback function + * @param[in] param user parameter + * @return a non-NULL value when succeeded. Otherwise, NULL. + **************************************************************************************** + */ +platform_us_timer_handle_t platform_create_us_timer(uint64_t abs_time, + f_platform_us_timer_callback callback, void *param); + +/** + **************************************************************************************** + * @brief Cancel a platform timer previously created by `platform_create_us_timer` + * + * When a timer not needed any more, use this API to cancel it. + * + * @param[in] timer_handle handle of the timer + * @return 0 if succeeded else non-0 + * Note: non-0 means the callback function of the timer + * is executing. + **************************************************************************************** + */ +int platform_cancel_us_timer(platform_us_timer_handle_t timer_handle); + /** **************************************************************************************** * @brief Install a new RTOS stack for a specific platform task diff --git a/bundles/mini/inc/sm.h b/bundles/mini/inc/sm.h index 6dfc62bab..7e57fb927 100644 --- a/bundles/mini/inc/sm.h +++ b/bundles/mini/inc/sm.h @@ -55,14 +55,21 @@ typedef enum { /** * @brief Security configurations * + * These configurations can updated dynamically. Be careful: dynamically toggle + * `enable` will cause problems when SM is still working on any connection. + * + * After IRK/DHK are derived from `persistent`, `SM_EVENT_IRK_DHK_RESULT` is emitted. + * * @param[in] enable Enable (Bypass) SM (default: Disabled) * When disabled, SM can be enabled per connection by `sm_config_conn`. * @param[in] io_capability Default IO Capabilities * @param[in] request_security Let peripheral request an encrypted connection right after connecting * Not used normally. Bonding is triggered by access to protected attributes in ATT Server * @param[in] persistent persistent data for security & privacy + * @return 0 if ok else non-0. Possible causes for non-0 return value: + * * generation of internal keys(IRK/ERK) are under going. */ -void sm_config(uint8_t enable, +int sm_config(uint8_t enable, io_capability_t io_capability, int request_security, const sm_persistent_t *persistent); @@ -101,18 +108,71 @@ void sm_private_random_address_generation_set_update_period(int period_ms); const uint8_t *sm_private_random_address_generation_get(void); /** + * @brief Registers OOB Data Callback. + * + * The callback should set the oob_data and return 1 if OOB data is available. + * + * Signature of `get_oob_data_callback`: + * @param[in] address_type address type + * @param[in] addr address + * @param[out] oob_data OOB data (type `sm_key_t`) + * @return 1 if OOB data is available, else 0. * - * @brief Registers OOB Data Callback. The callback should set the oob_data and return 1 if OOB data is availble * @param get_oob_data_callback */ -void sm_register_oob_data_callback( int (*get_oob_data_callback)(uint8_t addres_type, bd_addr_t addr, uint8_t * oob_data)); +void sm_register_oob_data_callback( int (*get_oob_data_callback)(uint8_t address_type, bd_addr_t addr, uint8_t * oob_data)); /** + * @brief Registers secure pairing OOB Data Callback. * - * @brief Registers secure pairing OOB Data Callback. The callback should set the peer_confirm & peer_random and return 1 if OOB data is availble - * @param get_oob_data_callback + * The callback should set the peer_confirm & peer_random and return 1 + * if OOB data is available. + * + * Signature of `get_sc_oob_data_callback`: + * @param[in] address_type address type + * @param[in] addr address + * @param[out] peer_confirm peer confirm value (type `sm_key_t`) + * @param[out] peer_random peer random value (type `sm_key_t`) + * @return 1 if OOB data is available, else 0. + * + * @param get_sc_oob_data_callback */ -// void sm_register_sc_oob_data_callback( int (*get_sc_oob_data_callback)(uint8_t addres_type, bd_addr_t addr, uint8_t *peer_confirm, uint8_t *peer_random)); +// void sm_register_sc_oob_data_callback(int (*get_sc_oob_data_callback)(uint8_t address_type, bd_addr_t addr, uint8_t *peer_confirm, uint8_t *peer_random)); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief (When secure pairing is used and OOB is selected) Start generate local + * OOB data (_confirm_ and _random_). + * + * After generated, _confirm_ and _random_ are passed to the callback. + * + * Each call of this function will generate a new P256 key pair that will used + * in **all** subsequent pairing attempts. When OOB is used, it is Developers's + * responsibility to refresh key pair properly. If OOB is not used, SM will + * re-generate a new key pair for each pairing attempt. + * + * BLUETOOTH CORE SPECIFICATION Version 5.4 | Vol 3, Part H, Section 2.3.6: + * + * > To protect a device's private key, a device should implement a method to + * > prevent an attacker from retrieving useful information about the device's private + * > key. For this purpose, a device should change its private key after every pairing + * > (successful or failed). Otherwise, it should change its private key whenever S + + * > 3F > 8, where S is the number of successful pairings and F the number of + * > failed attempts since the key was last changed. + * + * App can then pass these information together with device address to peer + * through OOB communication. + * + * Signature of `callback`: + * @param[out] confirm local confirm value (type `sm_key_t`) + * @param[out] random local random value (type `sm_key_t`) + * + * @param callback + * @return 0: started without error + * -1: previous OOB data is not generated yet + */ +// int sm_sc_generate_oob_data(void (*callback)(const uint8_t *confirm, const uint8_t *random)); // WARNING: ^^^ this API is not available in this release @@ -235,14 +295,6 @@ int sm_le_device_key(hci_con_handle_t con_handle); // WARNING: ^^^ this API is not available in this release -/** - * @brief When secure pairing is used and OOB is selected, use this function to prepare OOB data and share to peer. - * @param handle - */ -// int sm_sc_generate_oob_data(void (*callback)(uint8_t *peer_confirm, uint8_t *peer_random)); -// WARNING: ^^^ this API is not available in this release - - /** * * @brief Register a callback for get external LTK (for empty EDIV & Random) diff --git a/bundles/noos_exp/ING9168xx/apis.json b/bundles/noos_exp/ING9168xx/apis.json index d03f90c4c..c891b41d0 100644 --- a/bundles/noos_exp/ING9168xx/apis.json +++ b/bundles/noos_exp/ING9168xx/apis.json @@ -1,320 +1,335 @@ { - "att_dispatch_client_can_send_now": "0x020043a1", - "att_dispatch_client_request_can_send_now_event": "0x020043a7", - "att_dispatch_register_client": "0x020043ad", - "att_dispatch_register_server": "0x020043c1", - "att_dispatch_server_can_send_now": "0x020043d5", - "att_dispatch_server_request_can_send_now_event": "0x020043db", - "att_emit_general_event": "0x0200448d", - "att_server_can_send_packet_now": "0x02004bc5", - "att_server_deferred_read_response": "0x02004bc9", - "att_server_get_mtu": "0x02004be1", - "att_server_indicate": "0x02004c59", - "att_server_init": "0x02004cdd", - "att_server_notify": "0x02004d19", - "att_server_register_packet_handler": "0x02004e31", - "att_server_request_can_send_now_event": "0x02004e3d", - "att_set_db": "0x02004e59", - "att_set_read_callback": "0x02004e6d", - "att_set_write_callback": "0x02004e79", - "bd_addr_cmp": "0x02005049", - "bd_addr_copy": "0x0200504f", - "bd_addr_to_str": "0x02005059", - "big_endian_read_16": "0x02005091", - "big_endian_read_32": "0x02005099", - "big_endian_store_16": "0x020050ad", - "big_endian_store_32": "0x020050b9", - "btstack_config": "0x020051fd", - "btstack_memory_pool_create": "0x0200534d", - "btstack_memory_pool_free": "0x02005375", - "btstack_memory_pool_get": "0x020053d5", - "btstack_push_user_msg": "0x0200541d", - "btstack_push_user_runnable": "0x02005429", - "btstack_reset": "0x02005435", - "char_for_nibble": "0x02005753", - "gap_add_dev_to_periodic_list": "0x02006139", - "gap_add_whitelist": "0x02006149", - "gap_aes_encrypt": "0x02006155", - "gap_clear_white_lists": "0x0200618d", - "gap_clr_adv_set": "0x02006199", - "gap_clr_periodic_adv_list": "0x020061a5", - "gap_create_connection_cancel": "0x020061b1", - "gap_default_periodic_adv_sync_transfer_param": "0x020061bd", - "gap_disconnect": "0x020061d5", - "gap_disconnect_all": "0x02006201", - "gap_ext_create_connection": "0x02006241", - "gap_ext_create_connection_v2": "0x020062ed", - "gap_get_connection_parameter_range": "0x020063ed", - "gap_le_read_channel_map": "0x02006429", - "gap_periodic_adv_create_sync": "0x02006495", - "gap_periodic_adv_create_sync_cancel": "0x020064b9", - "gap_periodic_adv_set_info_transfer": "0x020064c5", - "gap_periodic_adv_sync_transfer": "0x020064d5", - "gap_periodic_adv_sync_transfer_param": "0x020064e5", - "gap_periodic_adv_term_sync": "0x02006501", - "gap_read_antenna_info": "0x02006589", - "gap_read_local_tx_power_level": "0x020065a1", - "gap_read_periodic_adv_list_size": "0x020065b1", - "gap_read_phy": "0x020065bd", - "gap_read_remote_tx_power_level": "0x020065c9", - "gap_read_remote_used_features": "0x020065d9", - "gap_read_remote_version": "0x020065e5", - "gap_read_rssi": "0x020065f1", - "gap_remove_whitelist": "0x020065fd", - "gap_rmv_adv_set": "0x02006679", - "gap_rmv_dev_from_periodic_list": "0x02006685", - "gap_rx_test_v2": "0x02006695", - "gap_rx_test_v3": "0x020066a5", - "gap_set_adv_set_random_addr": "0x020066f1", - "gap_set_callback_for_next_hci": "0x0200672d", - "gap_set_connection_cte_request_enable": "0x0200674d", - "gap_set_connection_cte_response_enable": "0x02006769", - "gap_set_connection_cte_rx_param": "0x02006779", - "gap_set_connection_cte_tx_param": "0x020067cd", - "gap_set_connection_parameter_range": "0x02006819", - "gap_set_connectionless_cte_tx_enable": "0x02006831", - "gap_set_connectionless_cte_tx_param": "0x02006841", - "gap_set_connectionless_iq_sampling_enable": "0x0200689d", - "gap_set_data_length": "0x020068f9", - "gap_set_def_phy": "0x02006911", - "gap_set_default_subrate": "0x02006921", - "gap_set_ext_adv_data": "0x0200693d", - "gap_set_ext_adv_enable": "0x02006955", - "gap_set_ext_adv_para": "0x020069c5", - "gap_set_ext_scan_enable": "0x02006a95", - "gap_set_ext_scan_para": "0x02006aad", - "gap_set_ext_scan_response_data": "0x02006b4d", - "gap_set_host_channel_classification": "0x02006b65", - "gap_set_path_loss_reporting_enable": "0x02006b75", - "gap_set_path_loss_reporting_param": "0x02006b85", - "gap_set_periodic_adv_data": "0x02006ba1", - "gap_set_periodic_adv_enable": "0x02006c11", - "gap_set_periodic_adv_para": "0x02006c21", - "gap_set_periodic_adv_para_v2": "0x02006c39", - "gap_set_periodic_adv_rsp_data": "0x02006c5d", - "gap_set_periodic_adv_rx_enable": "0x02006c81", - "gap_set_periodic_adv_subevent_data": "0x02006c91", - "gap_set_periodic_sync_subevent": "0x02006d29", - "gap_set_phy": "0x02006d41", - "gap_set_random_device_address": "0x02006d5d", - "gap_set_tx_power_reporting_enable": "0x02006d7d", - "gap_start_ccm": "0x02006d9d", - "gap_subrate_request": "0x02006de5", - "gap_test_end": "0x02006e01", - "gap_tx_test_v2": "0x02006e0d", - "gap_tx_test_v4": "0x02006e25", - "gap_update_connection_parameters": "0x02006e49", - "gap_vendor_tx_continuous_wave": "0x02006e8d", - "gatt_client_cancel_write": "0x020073b5", - "gatt_client_discover_characteristic_descriptors": "0x020073db", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x0200741b", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x0200746b", - "gatt_client_discover_characteristics_for_service": "0x020074bb", - "gatt_client_discover_primary_services": "0x020074f1", - "gatt_client_discover_primary_services_by_uuid128": "0x02007523", - "gatt_client_discover_primary_services_by_uuid16": "0x02007567", - "gatt_client_execute_write": "0x020075a5", - "gatt_client_find_included_services_for_service": "0x020075cb", - "gatt_client_get_mtu": "0x020075f9", - "gatt_client_is_ready": "0x020076bd", - "gatt_client_listen_for_characteristic_value_updates": "0x020076d3", - "gatt_client_prepare_write": "0x020076f5", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x02007731", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x0200775b", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02007761", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x0200778f", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x02007795", - "gatt_client_read_multiple_characteristic_values": "0x020077c3", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x020077f3", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x02007821", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x0200786d", - "gatt_client_register_handler": "0x020078b9", - "gatt_client_reliable_write_long_value_of_characteristic": "0x020078c5", - "gatt_client_signed_write_without_response": "0x02007cf9", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x02007dbd", - "gatt_client_write_client_characteristic_configuration": "0x02007df7", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x02007e49", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02007e59", - "gatt_client_write_long_value_of_characteristic": "0x02007e95", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x02007ea5", - "gatt_client_write_value_of_characteristic": "0x02007ee1", - "gatt_client_write_value_of_characteristic_without_response": "0x02007f17", - "hci_add_event_handler": "0x020095c5", - "hci_power_control": "0x02009d6d", - "hci_register_acl_packet_handler": "0x02009f21", - "kv_commit": "0x0200a681", - "kv_get": "0x0200a6dd", - "kv_init": "0x0200a6e9", - "kv_init_backend": "0x0200a769", - "kv_put": "0x0200a77d", - "kv_remove": "0x0200a789", - "kv_remove_all": "0x0200a7bd", - "kv_value_modified": "0x0200a7ed", - "kv_value_modified_of_key": "0x0200a809", - "kv_visit": "0x0200a815", - "l2cap_add_event_handler": "0x0200a8a5", - "l2cap_can_send_packet_now": "0x0200a8b5", - "l2cap_create_le_credit_based_connection_request": "0x0200aa79", - "l2cap_credit_based_send": "0x0200abc1", - "l2cap_credit_based_send_continue": "0x0200abed", - "l2cap_disconnect": "0x0200ac69", - "l2cap_get_le_credit_based_connection_credits": "0x0200ae55", - "l2cap_get_peer_mtu_for_local_cid": "0x0200ae71", - "l2cap_init": "0x0200b2b1", - "l2cap_le_send_flow_control_credit": "0x0200b3a7", - "l2cap_max_le_mtu": "0x0200b6b5", - "l2cap_register_packet_handler": "0x0200b7dd", - "l2cap_register_service": "0x0200b7e9", - "l2cap_request_can_send_now_event": "0x0200b8f9", - "l2cap_request_connection_parameter_update": "0x0200b913", - "l2cap_send_echo_request": "0x0200bdf5", - "l2cap_unregister_service": "0x0200bed5", - "le_device_db_add": "0x0200bf2d", - "le_device_db_find": "0x0200c005", - "le_device_db_from_key": "0x0200c031", - "le_device_db_iter_cur": "0x0200c039", - "le_device_db_iter_cur_key": "0x0200c03d", - "le_device_db_iter_init": "0x0200c041", - "le_device_db_iter_next": "0x0200c049", - "le_device_db_remove_key": "0x0200c06f", - "ll_ackable_packet_alloc": "0x0200c09b", - "ll_ackable_packet_get_status": "0x0200c1d7", - "ll_ackable_packet_run": "0x0200c245", - "ll_ackable_packet_set_tx_data": "0x0200c2fd", - "ll_adjust_conn_peer_tx_power": "0x0200c319", - "ll_aes_encrypt": "0x0200c345", - "ll_allow_nonstandard_adv_type": "0x0200c3b9", - "ll_attach_cte_to_adv_set": "0x0200c3d1", - "ll_channel_monitor_alloc": "0x0200c569", - "ll_channel_monitor_check_each_pdu": "0x0200c5eb", - "ll_channel_monitor_run": "0x0200c64d", - "ll_config": "0x0200c71d", - "ll_conn_abort": "0x0200c739", - "ll_create_conn": "0x0200c76d", - "ll_dhkey_generated": "0x0200c9e9", - "ll_free": "0x0200ca1d", - "ll_get_conn_events_info": "0x0200ca29", - "ll_get_conn_info": "0x0200cb11", - "ll_get_heap_free_size": "0x0200cb61", - "ll_hint_on_ce_len": "0x0200cb75", - "ll_install_ecc_engine": "0x0200cbad", - "ll_legacy_adv_set_interval": "0x0200cbb9", - "ll_lock_frequency": "0x0200cbc9", - "ll_malloc": "0x0200cc2d", - "ll_override_whitening_init_value": "0x0200cc35", - "ll_p256_key_pair_generated": "0x0200cc4d", - "ll_raw_packet_alloc": "0x0200cd91", - "ll_raw_packet_free": "0x0200ce65", - "ll_raw_packet_get_bare_rx_data": "0x0200ce9d", - "ll_raw_packet_get_iq_samples": "0x0200cf5d", - "ll_raw_packet_get_rx_data": "0x0200cff7", - "ll_raw_packet_recv": "0x0200d0a9", - "ll_raw_packet_send": "0x0200d17d", - "ll_raw_packet_set_bare_data": "0x0200d299", - "ll_raw_packet_set_bare_mode": "0x0200d2d7", - "ll_raw_packet_set_fake_cte_info": "0x0200d3db", - "ll_raw_packet_set_param": "0x0200d3fd", - "ll_raw_packet_set_rx_cte": "0x0200d45f", - "ll_raw_packet_set_tx_cte": "0x0200d4f5", - "ll_raw_packet_set_tx_data": "0x0200d535", - "ll_register_hci_acl_previewer": "0x0200d59d", - "ll_scan_set_fixed_channel": "0x0200d601", - "ll_scanner_enable_iq_sampling": "0x0200d60d", - "ll_scanner_enable_iq_sampling_on_legacy": "0x0200d6b5", - "ll_set_adv_access_address": "0x0200d9a5", - "ll_set_adv_coded_scheme": "0x0200d9b1", - "ll_set_conn_acl_report_latency": "0x0200d9e9", - "ll_set_conn_coded_scheme": "0x0200da19", - "ll_set_conn_interval_unit": "0x0200da45", - "ll_set_conn_latency": "0x0200da51", - "ll_set_conn_tx_power": "0x0200da81", - "ll_set_cte_bit": "0x0200dab1", - "ll_set_def_antenna": "0x0200dad9", - "ll_set_initiating_coded_scheme": "0x0200daf9", - "ll_set_max_conn_number": "0x0200db05", - "ll_set_tx_power_range": "0x0200dbad", - "ll_unlock_frequency": "0x0200dbd5", - "nibble_for_char": "0x020222f5", - "platform_calibrate_rt_clk": "0x0202238d", - "platform_call_on_stack": "0x0200213f", - "platform_config": "0x02022391", - "platform_controller_run": "0x020224b9", - "platform_delete_timer": "0x020224ed", - "platform_enable_irq": "0x020224f5", - "platform_get_gen_os_driver": "0x02022529", - "platform_get_link_layer_interf": "0x02022535", - "platform_get_task_handle": "0x0202253d", - "platform_get_timer_counter": "0x02022555", - "platform_get_us_time": "0x02022559", - "platform_get_version": "0x0202255d", - "platform_hrng": "0x02022565", - "platform_init_controller": "0x0202256d", - "platform_os_idle_resumed_hook": "0x02022589", - "platform_patch_rf_init_data": "0x0202258d", - "platform_post_sleep_processing": "0x02022599", - "platform_pre_sleep_processing": "0x0202259f", - "platform_pre_suppress_ticks_and_sleep_processing": "0x020225a5", - "platform_printf": "0x020225a9", - "platform_raise_assertion": "0x020225bd", - "platform_rand": "0x020225d1", - "platform_read_info": "0x020225d5", - "platform_read_persistent_reg": "0x02022605", - "platform_reset": "0x02022611", - "platform_rt_rc_auto_tune": "0x02022625", - "platform_rt_rc_auto_tune2": "0x0202262d", - "platform_rt_rc_tune": "0x02022695", - "platform_set_abs_timer": "0x020226b1", - "platform_set_evt_callback": "0x020226b5", - "platform_set_evt_callback_table": "0x020226c9", - "platform_set_irq_callback": "0x020226d5", - "platform_set_irq_callback_table": "0x020226f1", - "platform_set_rf_clk_source": "0x020226fd", - "platform_set_rf_init_data": "0x02022709", - "platform_set_rf_power_mapping": "0x02022715", - "platform_set_timer": "0x02022721", - "platform_shutdown": "0x02022725", - "platform_switch_app": "0x02022729", - "platform_trace_raw": "0x02022741", - "platform_write_persistent_reg": "0x02022759", - "printf_hexdump": "0x0202276d", - "reverse_128": "0x02022ae5", - "reverse_24": "0x02022aeb", - "reverse_256": "0x02022af1", - "reverse_48": "0x02022af7", - "reverse_56": "0x02022afd", - "reverse_64": "0x02022b03", - "reverse_bd_addr": "0x02022b09", - "reverse_bytes": "0x02022b0f", - "sm_add_event_handler": "0x02022e8d", - "sm_address_resolution_lookup": "0x02022fd1", - "sm_authenticated": "0x020233fd", - "sm_authorization_decline": "0x0202340b", - "sm_authorization_grant": "0x0202342b", - "sm_authorization_state": "0x0202344b", - "sm_bonding_decline": "0x02023465", - "sm_config": "0x020238e1", - "sm_config_conn": "0x020238f9", - "sm_encryption_key_size": "0x02023aaf", - "sm_just_works_confirm": "0x02024801", - "sm_le_device_key": "0x02024be1", - "sm_numeric_comparison_confirm": "0x02024d33", - "sm_passkey_input": "0x02024d71", - "sm_private_random_address_generation_get": "0x02025375", - "sm_private_random_address_generation_get_mode": "0x0202537d", - "sm_private_random_address_generation_set_mode": "0x02025389", - "sm_private_random_address_generation_set_update_period": "0x020253b1", - "sm_register_external_ltk_callback": "0x0202563d", - "sm_register_oob_data_callback": "0x02025649", - "sm_register_sc_oob_data_callback": "0x02025655", - "sm_request_pairing": "0x02025661", - "sm_sc_generate_oob_data": "0x0202629d", - "sm_send_security_request": "0x020263cd", - "sm_set_accepted_stk_generation_methods": "0x020263f5", - "sm_set_authentication_requirements": "0x02026401", - "sm_set_encryption_key_size_range": "0x0202640d", - "sscanf_bd_addr": "0x02026831", - "sysSetPublicDeviceAddr": "0x02026d5d", - "uuid128_to_str": "0x020275dd", - "uuid_add_bluetooth_prefix": "0x02027635", - "uuid_has_bluetooth_prefix": "0x02027655" + "att_dispatch_client_can_send_now": "0x020052b9", + "att_dispatch_client_request_can_send_now_event": "0x020052bf", + "att_dispatch_register_client": "0x020052c5", + "att_dispatch_register_server": "0x020052d9", + "att_dispatch_server_can_send_now": "0x020052ed", + "att_dispatch_server_request_can_send_now_event": "0x020052f3", + "att_emit_general_event": "0x020053a5", + "att_server_can_send_packet_now": "0x02005ae1", + "att_server_deferred_read_response": "0x02005ae5", + "att_server_get_mtu": "0x02005afd", + "att_server_indicate": "0x02005b75", + "att_server_init": "0x02005bf9", + "att_server_notify": "0x02005c35", + "att_server_register_packet_handler": "0x02005d4d", + "att_server_request_can_send_now_event": "0x02005d59", + "att_set_db": "0x02005d75", + "att_set_read_callback": "0x02005d89", + "att_set_write_callback": "0x02005d95", + "bd_addr_cmp": "0x02005f65", + "bd_addr_copy": "0x02005f6b", + "bd_addr_to_str": "0x02005f75", + "big_endian_read_16": "0x02005fad", + "big_endian_read_32": "0x02005fb5", + "big_endian_store_16": "0x02005fc9", + "big_endian_store_32": "0x02005fd5", + "btstack_config": "0x02006119", + "btstack_get_capabilities": "0x02006125", + "btstack_memory_pool_create": "0x0200627f", + "btstack_memory_pool_free": "0x020062a9", + "btstack_memory_pool_get": "0x02006309", + "btstack_push_user_msg": "0x02006351", + "btstack_push_user_runnable": "0x0200635d", + "btstack_reset": "0x02006369", + "char_for_nibble": "0x02006687", + "gap_add_dev_to_periodic_list": "0x02007059", + "gap_add_dev_to_resolving_list": "0x02007069", + "gap_add_whitelist": "0x0200709d", + "gap_aes_encrypt": "0x020070a9", + "gap_clear_resolving_list": "0x020070e1", + "gap_clear_white_lists": "0x020070ed", + "gap_clr_adv_set": "0x020070f9", + "gap_clr_periodic_adv_list": "0x02007105", + "gap_create_connection_cancel": "0x02007111", + "gap_default_periodic_adv_sync_transfer_param": "0x0200711d", + "gap_disconnect": "0x02007135", + "gap_disconnect2": "0x0200713d", + "gap_disconnect_all": "0x02007169", + "gap_ext_create_connection": "0x020071a9", + "gap_ext_create_connection_v2": "0x02007255", + "gap_get_connection_parameter_range": "0x02007355", + "gap_le_read_channel_map": "0x0200738d", + "gap_periodic_adv_create_sync": "0x020073ed", + "gap_periodic_adv_create_sync_cancel": "0x02007411", + "gap_periodic_adv_set_info_transfer": "0x0200741d", + "gap_periodic_adv_sync_transfer": "0x0200742d", + "gap_periodic_adv_sync_transfer_param": "0x0200743d", + "gap_periodic_adv_term_sync": "0x02007459", + "gap_read_antenna_info": "0x020074e1", + "gap_read_local_resolving_addr": "0x020074f9", + "gap_read_local_tx_power_level": "0x02007505", + "gap_read_peer_resolving_addr": "0x02007515", + "gap_read_periodic_adv_list_size": "0x02007521", + "gap_read_phy": "0x0200752d", + "gap_read_remote_tx_power_level": "0x02007539", + "gap_read_remote_used_features": "0x02007549", + "gap_read_remote_version": "0x02007555", + "gap_read_rssi": "0x02007561", + "gap_read_white_lists_size": "0x0200756d", + "gap_remove_dev_from_resolving_list": "0x02007579", + "gap_remove_whitelist": "0x02007585", + "gap_rmv_adv_set": "0x02007601", + "gap_rmv_dev_from_periodic_list": "0x0200760d", + "gap_rx_test_v2": "0x0200761d", + "gap_rx_test_v3": "0x0200762d", + "gap_set_addr_resolution_enable": "0x02007679", + "gap_set_adv_set_random_addr": "0x02007685", + "gap_set_callback_for_next_hci": "0x020076a9", + "gap_set_connection_cte_request_enable": "0x020076c9", + "gap_set_connection_cte_response_enable": "0x020076e5", + "gap_set_connection_cte_rx_param": "0x020076f5", + "gap_set_connection_cte_tx_param": "0x02007749", + "gap_set_connection_parameter_range": "0x02007795", + "gap_set_connectionless_cte_tx_enable": "0x020077ad", + "gap_set_connectionless_cte_tx_param": "0x020077bd", + "gap_set_connectionless_iq_sampling_enable": "0x02007819", + "gap_set_data_length": "0x02007875", + "gap_set_def_phy": "0x0200788d", + "gap_set_default_subrate": "0x0200789d", + "gap_set_ext_adv_data": "0x020078b9", + "gap_set_ext_adv_enable": "0x020078d1", + "gap_set_ext_adv_para": "0x02007941", + "gap_set_ext_scan_enable": "0x02007a01", + "gap_set_ext_scan_para": "0x02007a19", + "gap_set_ext_scan_response_data": "0x02007ab9", + "gap_set_host_channel_classification": "0x02007ad1", + "gap_set_path_loss_reporting_enable": "0x02007ae1", + "gap_set_path_loss_reporting_param": "0x02007af1", + "gap_set_periodic_adv_data": "0x02007b0d", + "gap_set_periodic_adv_enable": "0x02007b7d", + "gap_set_periodic_adv_para": "0x02007b8d", + "gap_set_periodic_adv_para_v2": "0x02007ba5", + "gap_set_periodic_adv_rsp_data": "0x02007bc9", + "gap_set_periodic_adv_rx_enable": "0x02007bed", + "gap_set_periodic_adv_subevent_data": "0x02007bfd", + "gap_set_periodic_sync_subevent": "0x02007c95", + "gap_set_phy": "0x02007cad", + "gap_set_privacy_mode": "0x02007cc9", + "gap_set_random_device_address": "0x02007cd9", + "gap_set_resolvable_private_addr_timeout": "0x02007ce5", + "gap_set_tx_power_reporting_enable": "0x02007cf1", + "gap_start_ccm": "0x02007d11", + "gap_subrate_request": "0x02007d59", + "gap_test_end": "0x02007d75", + "gap_tx_test_v2": "0x02007d81", + "gap_tx_test_v4": "0x02007d99", + "gap_update_connection_parameters": "0x02007dbd", + "gap_vendor_tx_continuous_wave": "0x02007e01", + "gatt_client_cancel_write": "0x02008329", + "gatt_client_discover_characteristic_descriptors": "0x0200834f", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x0200838f", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x020083df", + "gatt_client_discover_characteristics_for_service": "0x0200842f", + "gatt_client_discover_primary_services": "0x02008465", + "gatt_client_discover_primary_services_by_uuid128": "0x02008497", + "gatt_client_discover_primary_services_by_uuid16": "0x020084db", + "gatt_client_execute_write": "0x02008519", + "gatt_client_find_included_services_for_service": "0x0200853f", + "gatt_client_get_mtu": "0x0200856d", + "gatt_client_is_ready": "0x02008639", + "gatt_client_listen_for_characteristic_value_updates": "0x0200864f", + "gatt_client_prepare_write": "0x02008671", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x020086ad", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x020086d7", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x020086dd", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x0200870b", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x02008711", + "gatt_client_read_multiple_characteristic_values": "0x0200873f", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x0200876f", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x0200879d", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x020087e9", + "gatt_client_register_handler": "0x02008835", + "gatt_client_reliable_write_long_value_of_characteristic": "0x02008841", + "gatt_client_signed_write_without_response": "0x02008c75", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x02008d39", + "gatt_client_write_client_characteristic_configuration": "0x02008d73", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x02008dc5", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02008dd5", + "gatt_client_write_long_value_of_characteristic": "0x02008e11", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x02008e21", + "gatt_client_write_value_of_characteristic": "0x02008e5d", + "gatt_client_write_value_of_characteristic_without_response": "0x02008e93", + "hci_add_event_handler": "0x0200a551", + "hci_power_control": "0x0200acf5", + "hci_register_acl_packet_handler": "0x0200aea9", + "kv_commit": "0x0200b5f9", + "kv_get": "0x0200b655", + "kv_init": "0x0200b661", + "kv_init_backend": "0x0200b6e1", + "kv_put": "0x0200b6f5", + "kv_remove": "0x0200b701", + "kv_remove_all": "0x0200b735", + "kv_value_modified": "0x0200b765", + "kv_value_modified_of_key": "0x0200b781", + "kv_visit": "0x0200b78d", + "l2cap_add_event_handler": "0x0200b81d", + "l2cap_can_send_packet_now": "0x0200b82d", + "l2cap_create_le_credit_based_connection_request": "0x0200b9f1", + "l2cap_credit_based_send": "0x0200bb39", + "l2cap_credit_based_send_continue": "0x0200bb65", + "l2cap_disconnect": "0x0200bbe1", + "l2cap_get_le_credit_based_connection_credits": "0x0200bdcd", + "l2cap_get_peer_mtu_for_local_cid": "0x0200bde9", + "l2cap_init": "0x0200c229", + "l2cap_le_send_flow_control_credit": "0x0200c31f", + "l2cap_max_le_mtu": "0x0200c62d", + "l2cap_register_packet_handler": "0x0200c755", + "l2cap_register_service": "0x0200c761", + "l2cap_request_can_send_now_event": "0x0200c871", + "l2cap_request_connection_parameter_update": "0x0200c88b", + "l2cap_send_echo_request": "0x0200cd6d", + "l2cap_unregister_service": "0x0200ce4d", + "le_device_db_add": "0x0200cea5", + "le_device_db_find": "0x0200cf7d", + "le_device_db_from_key": "0x0200cfa9", + "le_device_db_iter_cur": "0x0200cfb1", + "le_device_db_iter_cur_key": "0x0200cfb5", + "le_device_db_iter_init": "0x0200cfb9", + "le_device_db_iter_next": "0x0200cfc1", + "le_device_db_remove_key": "0x0200cfe7", + "ll_ackable_packet_alloc": "0x0200d013", + "ll_ackable_packet_get_status": "0x0200d14f", + "ll_ackable_packet_run": "0x0200d1bd", + "ll_ackable_packet_set_tx_data": "0x0200d275", + "ll_adjust_conn_peer_tx_power": "0x0200d291", + "ll_aes_encrypt": "0x0200d2bd", + "ll_allow_nonstandard_adv_type": "0x0200d331", + "ll_attach_cte_to_adv_set": "0x0200d349", + "ll_channel_monitor_alloc": "0x0200d4e1", + "ll_channel_monitor_check_each_pdu": "0x0200d563", + "ll_channel_monitor_run": "0x0200d5d1", + "ll_config": "0x0200d6a1", + "ll_conn_abort": "0x0200d6bd", + "ll_create_conn": "0x0200d6f1", + "ll_dhkey_generated": "0x0200d96d", + "ll_free": "0x0200d9a1", + "ll_get_capabilities": "0x0200d9ad", + "ll_get_conn_events_info": "0x0200d9cd", + "ll_get_conn_info": "0x0200dab5", + "ll_get_heap_free_size": "0x0200db05", + "ll_get_states": "0x0200db15", + "ll_hint_on_ce_len": "0x0200dbd1", + "ll_install_ecc_engine": "0x0200dc09", + "ll_legacy_adv_set_interval": "0x0200dc15", + "ll_lock_frequency": "0x0200dc25", + "ll_malloc": "0x0200dc89", + "ll_override_whitening_init_value": "0x0200dc91", + "ll_p256_key_pair_generated": "0x0200dca9", + "ll_raw_packet_alloc": "0x0200dded", + "ll_raw_packet_free": "0x0200dec1", + "ll_raw_packet_get_bare_rx_data": "0x0200def9", + "ll_raw_packet_get_iq_samples": "0x0200dfb9", + "ll_raw_packet_get_rx_data": "0x0200e053", + "ll_raw_packet_recv": "0x0200e105", + "ll_raw_packet_send": "0x0200e1d9", + "ll_raw_packet_set_bare_data": "0x0200e2f5", + "ll_raw_packet_set_bare_mode": "0x0200e333", + "ll_raw_packet_set_fake_cte_info": "0x0200e437", + "ll_raw_packet_set_param": "0x0200e459", + "ll_raw_packet_set_rx_cte": "0x0200e4bb", + "ll_raw_packet_set_tx_cte": "0x0200e551", + "ll_raw_packet_set_tx_data": "0x0200e591", + "ll_register_hci_acl_previewer": "0x0200e5f9", + "ll_scan_set_fixed_channel": "0x0200e65d", + "ll_scanner_enable_iq_sampling": "0x0200e669", + "ll_scanner_enable_iq_sampling_on_legacy": "0x0200e711", + "ll_set_adv_access_address": "0x0200ea01", + "ll_set_adv_coded_scheme": "0x0200ea0d", + "ll_set_conn_acl_report_latency": "0x0200ea45", + "ll_set_conn_coded_scheme": "0x0200ea75", + "ll_set_conn_interval_unit": "0x0200eaa1", + "ll_set_conn_latency": "0x0200eaad", + "ll_set_conn_tx_power": "0x0200eadd", + "ll_set_cte_bit": "0x0200eb0d", + "ll_set_def_antenna": "0x0200eb35", + "ll_set_initiating_coded_scheme": "0x0200eb55", + "ll_set_max_conn_number": "0x0200eb61", + "ll_set_tx_power_range": "0x0200ec09", + "ll_unlock_frequency": "0x0200ec31", + "nibble_for_char": "0x020232e9", + "platform_calibrate_rt_clk": "0x02023381", + "platform_call_on_stack": "0x0200303f", + "platform_cancel_us_timer": "0x02023385", + "platform_config": "0x02023399", + "platform_controller_run": "0x020234cd", + "platform_create_us_timer": "0x02023501", + "platform_delete_timer": "0x02023515", + "platform_enable_irq": "0x0202351d", + "platform_get_gen_os_driver": "0x02023551", + "platform_get_link_layer_interf": "0x0202355d", + "platform_get_task_handle": "0x02023565", + "platform_get_timer_counter": "0x0202357d", + "platform_get_us_time": "0x02023581", + "platform_get_version": "0x02023585", + "platform_hrng": "0x020235a1", + "platform_init_controller": "0x020235a9", + "platform_os_idle_resumed_hook": "0x020235c5", + "platform_patch_rf_init_data": "0x020235c9", + "platform_post_sleep_processing": "0x020235d5", + "platform_pre_sleep_processing": "0x020235db", + "platform_pre_suppress_ticks_and_sleep_processing": "0x020235e1", + "platform_printf": "0x020235e5", + "platform_raise_assertion": "0x020235f9", + "platform_rand": "0x0202360d", + "platform_read_info": "0x02023611", + "platform_read_persistent_reg": "0x02023641", + "platform_reset": "0x02023661", + "platform_rt_rc_auto_tune": "0x02023675", + "platform_rt_rc_auto_tune2": "0x0202367d", + "platform_rt_rc_tune": "0x020236dd", + "platform_set_abs_timer": "0x02023709", + "platform_set_evt_callback": "0x0202370d", + "platform_set_evt_callback_table": "0x02023721", + "platform_set_irq_callback": "0x0202372d", + "platform_set_irq_callback_table": "0x02023749", + "platform_set_rf_clk_source": "0x02023755", + "platform_set_rf_init_data": "0x02023761", + "platform_set_rf_power_mapping": "0x0202376d", + "platform_set_timer": "0x02023779", + "platform_shutdown": "0x0202377d", + "platform_switch_app": "0x02023781", + "platform_trace_raw": "0x02023799", + "platform_write_persistent_reg": "0x020237b1", + "printf_hexdump": "0x020237e5", + "reverse_128": "0x02023b5d", + "reverse_24": "0x02023b63", + "reverse_256": "0x02023b69", + "reverse_48": "0x02023b6f", + "reverse_56": "0x02023b75", + "reverse_64": "0x02023b7b", + "reverse_bd_addr": "0x02023b81", + "reverse_bytes": "0x02023b87", + "sm_add_event_handler": "0x02023f05", + "sm_address_resolution_lookup": "0x0202402d", + "sm_authenticated": "0x02024475", + "sm_authorization_decline": "0x02024483", + "sm_authorization_grant": "0x020244a3", + "sm_authorization_state": "0x020244c3", + "sm_bonding_decline": "0x020244dd", + "sm_config": "0x0202495d", + "sm_config_conn": "0x02024991", + "sm_encryption_key_size": "0x02024b77", + "sm_just_works_confirm": "0x020257b1", + "sm_le_device_key": "0x02025ba1", + "sm_numeric_comparison_confirm": "0x02025d15", + "sm_passkey_input": "0x02025d53", + "sm_private_random_address_generation_get": "0x02026341", + "sm_private_random_address_generation_get_mode": "0x02026349", + "sm_private_random_address_generation_set_mode": "0x02026355", + "sm_private_random_address_generation_set_update_period": "0x0202637d", + "sm_register_external_ltk_callback": "0x02026611", + "sm_register_oob_data_callback": "0x0202661d", + "sm_register_sc_oob_data_callback": "0x02026629", + "sm_request_pairing": "0x02026635", + "sm_sc_generate_oob_data": "0x020272bd", + "sm_send_security_request": "0x020275dd", + "sm_set_accepted_stk_generation_methods": "0x02027605", + "sm_set_authentication_requirements": "0x02027611", + "sm_set_encryption_key_size_range": "0x02027621", + "sscanf_bd_addr": "0x02027a35", + "sysSetPublicDeviceAddr": "0x02027f91", + "uuid128_to_str": "0x02028825", + "uuid_add_bluetooth_prefix": "0x0202887d", + "uuid_has_bluetooth_prefix": "0x0202889d" } \ No newline at end of file diff --git a/bundles/noos_exp/ING9168xx/meta.json b/bundles/noos_exp/ING9168xx/meta.json index abdc7332e..e92b079d1 100644 --- a/bundles/noos_exp/ING9168xx/meta.json +++ b/bundles/noos_exp/ING9168xx/meta.json @@ -1,18 +1,24 @@ { "app": { - "base": 33726464 + "base": 33730560 }, "ram": { "base": 536870912, - "size": 3476 + "size": 3284 }, "rom": { "base": 33562624, - "size": 162988 + "size": 167828 + }, + "var": { + "link_layer_features": { + "addr": 33721860, + "value": "ff79ff07fe000000" + } }, "version": [ 2, 3, - 1 + 18 ] } \ No newline at end of file diff --git a/bundles/noos_exp/ING9168xx/platform.bin b/bundles/noos_exp/ING9168xx/platform.bin index 670650216..aec301176 100644 Binary files a/bundles/noos_exp/ING9168xx/platform.bin and b/bundles/noos_exp/ING9168xx/platform.bin differ diff --git a/bundles/noos_exp/ING9187xx/apis.json b/bundles/noos_exp/ING9187xx/apis.json index 433b4b16c..993494fcc 100644 --- a/bundles/noos_exp/ING9187xx/apis.json +++ b/bundles/noos_exp/ING9187xx/apis.json @@ -6,44 +6,46 @@ "att_dispatch_server_can_send_now": "0x000056d9", "att_dispatch_server_request_can_send_now_event": "0x000056df", "att_emit_general_event": "0x00005791", - "att_server_can_send_packet_now": "0x00005ec1", - "att_server_deferred_read_response": "0x00005ec5", - "att_server_get_mtu": "0x00005edd", - "att_server_indicate": "0x00005f55", - "att_server_init": "0x00005fd9", - "att_server_notify": "0x00006015", - "att_server_register_packet_handler": "0x0000612d", - "att_server_request_can_send_now_event": "0x00006139", - "att_set_db": "0x00006155", - "att_set_read_callback": "0x00006169", - "att_set_write_callback": "0x00006175", - "bd_addr_cmp": "0x000062e5", - "bd_addr_copy": "0x000062eb", - "bd_addr_to_str": "0x000062f5", - "big_endian_read_16": "0x0000632d", - "big_endian_read_32": "0x00006335", - "big_endian_store_16": "0x00006349", - "big_endian_store_32": "0x00006355", - "btstack_config": "0x0000648d", - "btstack_memory_pool_create": "0x000065dd", - "btstack_memory_pool_free": "0x00006605", - "btstack_memory_pool_get": "0x00006665", - "btstack_push_user_msg": "0x000066ad", - "btstack_push_user_runnable": "0x000066b9", - "btstack_reset": "0x000066c5", - "char_for_nibble": "0x000069bf", - "gap_add_dev_to_periodic_list": "0x00007265", - "gap_add_whitelist": "0x00007275", - "gap_aes_encrypt": "0x00007281", - "gap_clear_white_lists": "0x000072b9", - "gap_clr_adv_set": "0x000072c5", - "gap_clr_periodic_adv_list": "0x000072d1", - "gap_create_connection_cancel": "0x000072dd", - "gap_disconnect": "0x000072e9", - "gap_disconnect_all": "0x00007315", - "gap_ext_create_connection": "0x00007355", - "gap_get_connection_parameter_range": "0x00007449", - "gap_le_read_channel_map": "0x00007485", + "att_server_can_send_packet_now": "0x00005ec5", + "att_server_deferred_read_response": "0x00005ec9", + "att_server_get_mtu": "0x00005ee1", + "att_server_indicate": "0x00005f59", + "att_server_init": "0x00005fdd", + "att_server_notify": "0x00006019", + "att_server_register_packet_handler": "0x00006131", + "att_server_request_can_send_now_event": "0x0000613d", + "att_set_db": "0x00006159", + "att_set_read_callback": "0x0000616d", + "att_set_write_callback": "0x00006179", + "bd_addr_cmp": "0x000062e9", + "bd_addr_copy": "0x000062ef", + "bd_addr_to_str": "0x000062f9", + "big_endian_read_16": "0x00006331", + "big_endian_read_32": "0x00006339", + "big_endian_store_16": "0x0000634d", + "big_endian_store_32": "0x00006359", + "btstack_config": "0x00006491", + "btstack_get_capabilities": "0x0000649d", + "btstack_memory_pool_create": "0x000065f7", + "btstack_memory_pool_free": "0x00006621", + "btstack_memory_pool_get": "0x00006681", + "btstack_push_user_msg": "0x000066c9", + "btstack_push_user_runnable": "0x000066d5", + "btstack_reset": "0x000066e1", + "char_for_nibble": "0x000069db", + "gap_add_dev_to_periodic_list": "0x0000726d", + "gap_add_whitelist": "0x0000727d", + "gap_aes_encrypt": "0x00007289", + "gap_clear_white_lists": "0x000072c1", + "gap_clr_adv_set": "0x000072cd", + "gap_clr_periodic_adv_list": "0x000072d9", + "gap_create_connection_cancel": "0x000072e5", + "gap_disconnect": "0x000072f1", + "gap_disconnect2": "0x000072f9", + "gap_disconnect_all": "0x00007325", + "gap_ext_create_connection": "0x00007365", + "gap_get_connection_parameter_range": "0x00007459", + "gap_le_read_channel_map": "0x00007491", "gap_periodic_adv_create_sync": "0x000074f1", "gap_periodic_adv_create_sync_cancel": "0x00007515", "gap_periodic_adv_term_sync": "0x00007521", @@ -54,238 +56,243 @@ "gap_read_remote_used_features": "0x000075ed", "gap_read_remote_version": "0x000075f9", "gap_read_rssi": "0x00007605", - "gap_remove_whitelist": "0x00007611", - "gap_rmv_adv_set": "0x0000768d", - "gap_rmv_dev_from_periodic_list": "0x00007699", - "gap_rx_test_v2": "0x000076a9", - "gap_set_adv_set_random_addr": "0x000076e1", - "gap_set_callback_for_next_hci": "0x0000771d", - "gap_set_connection_parameter_range": "0x0000773d", - "gap_set_data_length": "0x00007755", - "gap_set_def_phy": "0x0000776d", - "gap_set_default_subrate": "0x0000777d", - "gap_set_ext_adv_data": "0x00007799", - "gap_set_ext_adv_enable": "0x000077b1", - "gap_set_ext_adv_para": "0x00007821", - "gap_set_ext_scan_enable": "0x000078f9", - "gap_set_ext_scan_para": "0x00007911", - "gap_set_ext_scan_response_data": "0x000079b1", - "gap_set_host_channel_classification": "0x000079c9", - "gap_set_path_loss_reporting_enable": "0x000079d9", - "gap_set_path_loss_reporting_param": "0x000079e9", - "gap_set_periodic_adv_data": "0x00007a05", - "gap_set_periodic_adv_enable": "0x00007a75", - "gap_set_periodic_adv_para": "0x00007a85", - "gap_set_phy": "0x00007a9d", - "gap_set_random_device_address": "0x00007ab9", - "gap_set_tx_power_reporting_enable": "0x00007ad9", - "gap_start_ccm": "0x00007af9", - "gap_subrate_request": "0x00007b41", - "gap_test_end": "0x00007b5d", - "gap_tx_test_v2": "0x00007b69", - "gap_tx_test_v4": "0x00007b81", - "gap_update_connection_parameters": "0x00007ba5", - "gap_vendor_tx_continuous_wave": "0x00007be9", - "gatt_client_cancel_write": "0x00008111", - "gatt_client_discover_characteristic_descriptors": "0x00008137", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x00008177", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x000081c7", - "gatt_client_discover_characteristics_for_service": "0x00008217", - "gatt_client_discover_primary_services": "0x0000824d", - "gatt_client_discover_primary_services_by_uuid128": "0x0000827f", - "gatt_client_discover_primary_services_by_uuid16": "0x000082c3", - "gatt_client_execute_write": "0x000082ff", - "gatt_client_find_included_services_for_service": "0x00008325", - "gatt_client_get_mtu": "0x00008353", - "gatt_client_is_ready": "0x000083f5", - "gatt_client_listen_for_characteristic_value_updates": "0x0000840b", - "gatt_client_prepare_write": "0x0000842d", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x00008469", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x00008493", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008499", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x000084c7", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x000084cd", - "gatt_client_read_multiple_characteristic_values": "0x000084fb", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x0000852b", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x00008559", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x000085a5", - "gatt_client_register_handler": "0x000085f1", - "gatt_client_reliable_write_long_value_of_characteristic": "0x000085fd", - "gatt_client_signed_write_without_response": "0x00008a2d", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008af1", - "gatt_client_write_client_characteristic_configuration": "0x00008b2b", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008b7d", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008b8d", - "gatt_client_write_long_value_of_characteristic": "0x00008bc9", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008bd9", - "gatt_client_write_value_of_characteristic": "0x00008c15", - "gatt_client_write_value_of_characteristic_without_response": "0x00008c4b", - "hci_add_event_handler": "0x0000a1e1", - "hci_power_control": "0x0000a991", - "hci_register_acl_packet_handler": "0x0000ab45", - "kv_commit": "0x0000b2e1", - "kv_get": "0x0000b33d", - "kv_init": "0x0000b349", - "kv_init_backend": "0x0000b3c9", - "kv_put": "0x0000b3dd", - "kv_remove": "0x0000b3e9", - "kv_remove_all": "0x0000b41d", - "kv_value_modified": "0x0000b44d", - "kv_value_modified_of_key": "0x0000b469", - "kv_visit": "0x0000b475", - "l2cap_add_event_handler": "0x0000b505", - "l2cap_can_send_packet_now": "0x0000b515", - "l2cap_create_le_credit_based_connection_request": "0x0000b6d1", - "l2cap_credit_based_send": "0x0000b815", - "l2cap_credit_based_send_continue": "0x0000b841", - "l2cap_disconnect": "0x0000b8bd", - "l2cap_get_le_credit_based_connection_credits": "0x0000bb0d", - "l2cap_get_peer_mtu_for_local_cid": "0x0000bb29", - "l2cap_init": "0x0000befd", - "l2cap_le_send_flow_control_credit": "0x0000bff3", - "l2cap_max_le_mtu": "0x0000c2fd", - "l2cap_register_packet_handler": "0x0000c425", - "l2cap_register_service": "0x0000c431", - "l2cap_request_can_send_now_event": "0x0000c541", - "l2cap_request_connection_parameter_update": "0x0000c55b", - "l2cap_send_echo_request": "0x0000ca35", - "l2cap_unregister_service": "0x0000caf5", - "le_device_db_add": "0x0000cb4d", - "le_device_db_find": "0x0000cc25", - "le_device_db_from_key": "0x0000cc51", - "le_device_db_iter_cur": "0x0000cc59", - "le_device_db_iter_cur_key": "0x0000cc5d", - "le_device_db_iter_init": "0x0000cc61", - "le_device_db_iter_next": "0x0000cc69", - "le_device_db_remove_key": "0x0000cc8f", - "ll_ackable_packet_alloc": "0x0000ccbb", - "ll_ackable_packet_get_status": "0x0000cdf5", - "ll_ackable_packet_run": "0x0000ce65", - "ll_ackable_packet_set_tx_data": "0x0000cf09", - "ll_adjust_conn_peer_tx_power": "0x0000cf31", - "ll_aes_encrypt": "0x0000cf5d", - "ll_channel_monitor_alloc": "0x0000cfd9", - "ll_channel_monitor_check_each_pdu": "0x0000d05b", - "ll_channel_monitor_run": "0x0000d0c1", - "ll_config": "0x0000d175", - "ll_conn_abort": "0x0000d191", - "ll_create_conn": "0x0000d1c5", - "ll_dhkey_generated": "0x0000d441", - "ll_free": "0x0000d475", - "ll_get_conn_events_info": "0x0000d481", - "ll_get_conn_info": "0x0000d565", - "ll_get_heap_free_size": "0x0000d5b1", - "ll_hint_on_ce_len": "0x0000d5c5", - "ll_install_ecc_engine": "0x0000d5fd", - "ll_legacy_adv_set_interval": "0x0000d609", - "ll_lock_frequency": "0x0000d619", - "ll_malloc": "0x0000d67d", - "ll_p256_key_pair_generated": "0x0000d685", - "ll_raw_packet_alloc": "0x0000d839", - "ll_raw_packet_free": "0x0000d90d", - "ll_raw_packet_get_bare_rx_data": "0x0000d945", - "ll_raw_packet_get_rx_data": "0x0000da0b", - "ll_raw_packet_recv": "0x0000daad", - "ll_raw_packet_send": "0x0000db69", - "ll_raw_packet_set_bare_data": "0x0000dc51", - "ll_raw_packet_set_bare_mode": "0x0000dc8f", - "ll_raw_packet_set_param": "0x0000dd95", - "ll_raw_packet_set_tx_data": "0x0000ddf3", - "ll_register_hci_acl_previewer": "0x0000de59", - "ll_scan_set_fixed_channel": "0x0000debd", - "ll_set_adv_access_address": "0x0000e0d5", - "ll_set_adv_coded_scheme": "0x0000e0e1", - "ll_set_conn_acl_report_latency": "0x0000e111", - "ll_set_conn_coded_scheme": "0x0000e141", - "ll_set_conn_interval_unit": "0x0000e16d", - "ll_set_conn_latency": "0x0000e179", - "ll_set_conn_tx_power": "0x0000e1a9", - "ll_set_def_antenna": "0x0000e1e5", - "ll_set_initiating_coded_scheme": "0x0000e201", - "ll_set_max_conn_number": "0x0000e20d", - "ll_set_tx_power_range": "0x0000e2a1", - "ll_unlock_frequency": "0x0000e2c9", - "nibble_for_char": "0x0001fd59", - "platform_calibrate_rt_clk": "0x0001fdf5", + "gap_read_white_lists_size": "0x00007611", + "gap_remove_whitelist": "0x0000761d", + "gap_rmv_adv_set": "0x00007699", + "gap_rmv_dev_from_periodic_list": "0x000076a5", + "gap_rx_test_v2": "0x000076b5", + "gap_set_adv_set_random_addr": "0x000076ed", + "gap_set_callback_for_next_hci": "0x00007711", + "gap_set_connection_parameter_range": "0x00007731", + "gap_set_data_length": "0x00007749", + "gap_set_def_phy": "0x00007761", + "gap_set_default_subrate": "0x00007771", + "gap_set_ext_adv_data": "0x0000778d", + "gap_set_ext_adv_enable": "0x000077a5", + "gap_set_ext_adv_para": "0x00007815", + "gap_set_ext_scan_enable": "0x000078dd", + "gap_set_ext_scan_para": "0x000078f5", + "gap_set_ext_scan_response_data": "0x00007995", + "gap_set_host_channel_classification": "0x000079ad", + "gap_set_path_loss_reporting_enable": "0x000079bd", + "gap_set_path_loss_reporting_param": "0x000079cd", + "gap_set_periodic_adv_data": "0x000079e9", + "gap_set_periodic_adv_enable": "0x00007a59", + "gap_set_periodic_adv_para": "0x00007a69", + "gap_set_phy": "0x00007a81", + "gap_set_random_device_address": "0x00007a9d", + "gap_set_tx_power_reporting_enable": "0x00007aa9", + "gap_start_ccm": "0x00007ac9", + "gap_subrate_request": "0x00007b11", + "gap_test_end": "0x00007b2d", + "gap_tx_test_v2": "0x00007b39", + "gap_tx_test_v4": "0x00007b51", + "gap_update_connection_parameters": "0x00007b75", + "gap_vendor_tx_continuous_wave": "0x00007bb9", + "gatt_client_cancel_write": "0x000080e1", + "gatt_client_discover_characteristic_descriptors": "0x00008107", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x00008147", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x00008197", + "gatt_client_discover_characteristics_for_service": "0x000081e7", + "gatt_client_discover_primary_services": "0x0000821d", + "gatt_client_discover_primary_services_by_uuid128": "0x0000824f", + "gatt_client_discover_primary_services_by_uuid16": "0x00008293", + "gatt_client_execute_write": "0x000082cf", + "gatt_client_find_included_services_for_service": "0x000082f5", + "gatt_client_get_mtu": "0x00008323", + "gatt_client_is_ready": "0x000083cd", + "gatt_client_listen_for_characteristic_value_updates": "0x000083e3", + "gatt_client_prepare_write": "0x00008405", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x00008441", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x0000846b", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008471", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x0000849f", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x000084a5", + "gatt_client_read_multiple_characteristic_values": "0x000084d3", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x00008503", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x00008531", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x0000857d", + "gatt_client_register_handler": "0x000085c9", + "gatt_client_reliable_write_long_value_of_characteristic": "0x000085d5", + "gatt_client_signed_write_without_response": "0x00008a05", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008ac9", + "gatt_client_write_client_characteristic_configuration": "0x00008b03", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008b55", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008b65", + "gatt_client_write_long_value_of_characteristic": "0x00008ba1", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008bb1", + "gatt_client_write_value_of_characteristic": "0x00008bed", + "gatt_client_write_value_of_characteristic_without_response": "0x00008c23", + "hci_add_event_handler": "0x0000a1b1", + "hci_power_control": "0x0000a95d", + "hci_register_acl_packet_handler": "0x0000ab11", + "kv_commit": "0x0000b29d", + "kv_get": "0x0000b2f9", + "kv_init": "0x0000b305", + "kv_init_backend": "0x0000b385", + "kv_put": "0x0000b399", + "kv_remove": "0x0000b3a5", + "kv_remove_all": "0x0000b3d9", + "kv_value_modified": "0x0000b409", + "kv_value_modified_of_key": "0x0000b425", + "kv_visit": "0x0000b431", + "l2cap_add_event_handler": "0x0000b4c1", + "l2cap_can_send_packet_now": "0x0000b4d1", + "l2cap_create_le_credit_based_connection_request": "0x0000b68d", + "l2cap_credit_based_send": "0x0000b7d1", + "l2cap_credit_based_send_continue": "0x0000b7fd", + "l2cap_disconnect": "0x0000b879", + "l2cap_get_le_credit_based_connection_credits": "0x0000bac9", + "l2cap_get_peer_mtu_for_local_cid": "0x0000bae5", + "l2cap_init": "0x0000beb9", + "l2cap_le_send_flow_control_credit": "0x0000bfaf", + "l2cap_max_le_mtu": "0x0000c2b9", + "l2cap_register_packet_handler": "0x0000c3e1", + "l2cap_register_service": "0x0000c3ed", + "l2cap_request_can_send_now_event": "0x0000c4fd", + "l2cap_request_connection_parameter_update": "0x0000c517", + "l2cap_send_echo_request": "0x0000c9f1", + "l2cap_unregister_service": "0x0000cab1", + "le_device_db_add": "0x0000cb09", + "le_device_db_find": "0x0000cbe1", + "le_device_db_from_key": "0x0000cc0d", + "le_device_db_iter_cur": "0x0000cc15", + "le_device_db_iter_cur_key": "0x0000cc19", + "le_device_db_iter_init": "0x0000cc1d", + "le_device_db_iter_next": "0x0000cc25", + "le_device_db_remove_key": "0x0000cc4b", + "ll_ackable_packet_alloc": "0x0000cc77", + "ll_ackable_packet_get_status": "0x0000cdb1", + "ll_ackable_packet_run": "0x0000ce21", + "ll_ackable_packet_set_tx_data": "0x0000cec5", + "ll_adjust_conn_peer_tx_power": "0x0000ceed", + "ll_aes_encrypt": "0x0000cf19", + "ll_channel_monitor_alloc": "0x0000cf95", + "ll_channel_monitor_check_each_pdu": "0x0000d017", + "ll_channel_monitor_run": "0x0000d085", + "ll_config": "0x0000d139", + "ll_conn_abort": "0x0000d155", + "ll_create_conn": "0x0000d189", + "ll_dhkey_generated": "0x0000d405", + "ll_free": "0x0000d439", + "ll_get_capabilities": "0x0000d445", + "ll_get_conn_events_info": "0x0000d465", + "ll_get_conn_info": "0x0000d549", + "ll_get_heap_free_size": "0x0000d595", + "ll_get_states": "0x0000d5a5", + "ll_hint_on_ce_len": "0x0000d661", + "ll_install_ecc_engine": "0x0000d699", + "ll_legacy_adv_set_interval": "0x0000d6a5", + "ll_lock_frequency": "0x0000d6b5", + "ll_malloc": "0x0000d719", + "ll_p256_key_pair_generated": "0x0000d721", + "ll_raw_packet_alloc": "0x0000d8d5", + "ll_raw_packet_free": "0x0000d9a9", + "ll_raw_packet_get_bare_rx_data": "0x0000d9e1", + "ll_raw_packet_get_rx_data": "0x0000daa7", + "ll_raw_packet_recv": "0x0000db49", + "ll_raw_packet_send": "0x0000dc05", + "ll_raw_packet_set_bare_data": "0x0000dced", + "ll_raw_packet_set_bare_mode": "0x0000dd2b", + "ll_raw_packet_set_param": "0x0000de31", + "ll_raw_packet_set_tx_data": "0x0000de8f", + "ll_register_hci_acl_previewer": "0x0000def5", + "ll_scan_set_fixed_channel": "0x0000df59", + "ll_set_adv_access_address": "0x0000e171", + "ll_set_adv_coded_scheme": "0x0000e17d", + "ll_set_conn_acl_report_latency": "0x0000e1ad", + "ll_set_conn_coded_scheme": "0x0000e1dd", + "ll_set_conn_interval_unit": "0x0000e209", + "ll_set_conn_latency": "0x0000e215", + "ll_set_conn_tx_power": "0x0000e245", + "ll_set_def_antenna": "0x0000e281", + "ll_set_initiating_coded_scheme": "0x0000e29d", + "ll_set_max_conn_number": "0x0000e2a9", + "ll_set_tx_power_range": "0x0000e33d", + "ll_unlock_frequency": "0x0000e365", + "nibble_for_char": "0x0001ffdd", + "platform_calibrate_rt_clk": "0x00020079", "platform_call_on_stack": "0x000040ef", - "platform_config": "0x0001fdf9", - "platform_controller_run": "0x0001ff1d", - "platform_delete_timer": "0x0001ff51", - "platform_enable_irq": "0x0001ff59", - "platform_get_gen_os_driver": "0x0001ff91", - "platform_get_link_layer_interf": "0x0001ff9d", - "platform_get_task_handle": "0x0001ffa5", - "platform_get_timer_counter": "0x0001ffbd", - "platform_get_us_time": "0x0001ffc1", - "platform_get_version": "0x0001ffc5", - "platform_hrng": "0x0001ffcd", - "platform_init_controller": "0x0001ffd5", - "platform_os_idle_resumed_hook": "0x0001fff1", - "platform_patch_rf_init_data": "0x0001fff5", - "platform_post_sleep_processing": "0x00020001", - "platform_pre_sleep_processing": "0x00020007", - "platform_pre_suppress_ticks_and_sleep_processing": "0x0002000d", - "platform_printf": "0x00020011", - "platform_raise_assertion": "0x00020025", - "platform_rand": "0x00020039", - "platform_read_info": "0x0002003d", - "platform_read_persistent_reg": "0x0002006d", - "platform_reset": "0x0002007d", - "platform_rt_rc_auto_tune": "0x000200a1", - "platform_rt_rc_auto_tune2": "0x000200a9", - "platform_rt_rc_tune": "0x00020131", - "platform_set_abs_timer": "0x00020145", - "platform_set_evt_callback": "0x00020149", - "platform_set_evt_callback_table": "0x0002015d", - "platform_set_irq_callback": "0x00020169", - "platform_set_irq_callback_table": "0x00020185", - "platform_set_rf_clk_source": "0x00020191", - "platform_set_rf_init_data": "0x0002019d", - "platform_set_rf_power_mapping": "0x000201a9", - "platform_set_timer": "0x000201b5", - "platform_shutdown": "0x000201b9", - "platform_switch_app": "0x000201bd", - "platform_trace_raw": "0x000201e9", - "platform_write_persistent_reg": "0x00020201", - "printf_hexdump": "0x00020211", - "reverse_128": "0x00020551", - "reverse_24": "0x00020557", - "reverse_256": "0x0002055d", - "reverse_48": "0x00020563", - "reverse_56": "0x00020569", - "reverse_64": "0x0002056f", - "reverse_bd_addr": "0x00020575", - "reverse_bytes": "0x0002057b", - "sm_add_event_handler": "0x00020769", - "sm_address_resolution_lookup": "0x000208ad", - "sm_authenticated": "0x00020cd9", - "sm_authorization_decline": "0x00020ce7", - "sm_authorization_grant": "0x00020d07", - "sm_authorization_state": "0x00020d27", - "sm_bonding_decline": "0x00020d41", - "sm_config": "0x000211c1", - "sm_config_conn": "0x000211d9", - "sm_encryption_key_size": "0x0002138f", - "sm_just_works_confirm": "0x000220dd", - "sm_le_device_key": "0x000224bd", - "sm_numeric_comparison_confirm": "0x0002260f", - "sm_passkey_input": "0x0002264d", - "sm_private_random_address_generation_get": "0x00022c4d", - "sm_private_random_address_generation_get_mode": "0x00022c55", - "sm_private_random_address_generation_set_mode": "0x00022c61", - "sm_private_random_address_generation_set_update_period": "0x00022c89", - "sm_register_external_ltk_callback": "0x00022f15", - "sm_register_oob_data_callback": "0x00022f21", - "sm_register_sc_oob_data_callback": "0x00022f2d", - "sm_request_pairing": "0x00022f39", - "sm_sc_generate_oob_data": "0x00023b71", - "sm_send_security_request": "0x00023ca1", - "sm_set_accepted_stk_generation_methods": "0x00023cc9", - "sm_set_authentication_requirements": "0x00023cd5", - "sm_set_encryption_key_size_range": "0x00023ce1", - "sscanf_bd_addr": "0x000240fd", - "sysSetPublicDeviceAddr": "0x000244b1", - "uuid128_to_str": "0x00024aed", - "uuid_add_bluetooth_prefix": "0x00024b45", - "uuid_has_bluetooth_prefix": "0x00024b65" + "platform_cancel_us_timer": "0x0002007d", + "platform_config": "0x00020091", + "platform_controller_run": "0x000201b5", + "platform_create_us_timer": "0x000201e9", + "platform_delete_timer": "0x000201fd", + "platform_enable_irq": "0x00020205", + "platform_get_gen_os_driver": "0x0002023d", + "platform_get_link_layer_interf": "0x00020249", + "platform_get_task_handle": "0x00020251", + "platform_get_timer_counter": "0x00020269", + "platform_get_us_time": "0x0002026d", + "platform_get_version": "0x00020271", + "platform_hrng": "0x00020279", + "platform_init_controller": "0x00020281", + "platform_os_idle_resumed_hook": "0x0002029d", + "platform_patch_rf_init_data": "0x000202a1", + "platform_post_sleep_processing": "0x000202ad", + "platform_pre_sleep_processing": "0x000202b3", + "platform_pre_suppress_ticks_and_sleep_processing": "0x000202b9", + "platform_printf": "0x000202bd", + "platform_raise_assertion": "0x000202d1", + "platform_rand": "0x000202e5", + "platform_read_info": "0x000202e9", + "platform_read_persistent_reg": "0x00020319", + "platform_reset": "0x00020329", + "platform_rt_rc_auto_tune": "0x0002034d", + "platform_rt_rc_auto_tune2": "0x00020355", + "platform_rt_rc_tune": "0x000203d1", + "platform_set_abs_timer": "0x000203f5", + "platform_set_evt_callback": "0x000203f9", + "platform_set_evt_callback_table": "0x0002040d", + "platform_set_irq_callback": "0x00020419", + "platform_set_irq_callback_table": "0x00020435", + "platform_set_rf_clk_source": "0x00020441", + "platform_set_rf_init_data": "0x0002044d", + "platform_set_rf_power_mapping": "0x00020459", + "platform_set_timer": "0x00020465", + "platform_shutdown": "0x00020469", + "platform_switch_app": "0x0002046d", + "platform_trace_raw": "0x00020499", + "platform_write_persistent_reg": "0x000204b1", + "printf_hexdump": "0x000204c1", + "reverse_128": "0x00020801", + "reverse_24": "0x00020807", + "reverse_256": "0x0002080d", + "reverse_48": "0x00020813", + "reverse_56": "0x00020819", + "reverse_64": "0x0002081f", + "reverse_bd_addr": "0x00020825", + "reverse_bytes": "0x0002082b", + "sm_add_event_handler": "0x00020a19", + "sm_address_resolution_lookup": "0x00020b5d", + "sm_authenticated": "0x00020fa5", + "sm_authorization_decline": "0x00020fb3", + "sm_authorization_grant": "0x00020fd3", + "sm_authorization_state": "0x00020ff3", + "sm_bonding_decline": "0x0002100d", + "sm_config": "0x00021495", + "sm_config_conn": "0x000214c9", + "sm_encryption_key_size": "0x000216af", + "sm_just_works_confirm": "0x000222a1", + "sm_le_device_key": "0x00022691", + "sm_numeric_comparison_confirm": "0x000227db", + "sm_passkey_input": "0x00022819", + "sm_private_random_address_generation_get": "0x00022e05", + "sm_private_random_address_generation_get_mode": "0x00022e0d", + "sm_private_random_address_generation_set_mode": "0x00022e19", + "sm_private_random_address_generation_set_update_period": "0x00022e41", + "sm_register_external_ltk_callback": "0x000230d5", + "sm_register_oob_data_callback": "0x000230e1", + "sm_register_sc_oob_data_callback": "0x000230ed", + "sm_request_pairing": "0x000230f9", + "sm_sc_generate_oob_data": "0x00023d81", + "sm_send_security_request": "0x0002409d", + "sm_set_accepted_stk_generation_methods": "0x000240c5", + "sm_set_authentication_requirements": "0x000240d1", + "sm_set_encryption_key_size_range": "0x000240e1", + "sscanf_bd_addr": "0x000244ed", + "sysSetPublicDeviceAddr": "0x000248e9", + "uuid128_to_str": "0x00024f39", + "uuid_add_bluetooth_prefix": "0x00024f91", + "uuid_has_bluetooth_prefix": "0x00024fb1" } \ No newline at end of file diff --git a/bundles/noos_exp/ING9187xx/meta.json b/bundles/noos_exp/ING9187xx/meta.json index 0b417af2f..eda30297d 100644 --- a/bundles/noos_exp/ING9187xx/meta.json +++ b/bundles/noos_exp/ING9187xx/meta.json @@ -4,15 +4,21 @@ }, "ram": { "base": 536870912, - "size": 3764 + "size": 3572 }, "rom": { "base": 16384, - "size": 141212 + "size": 142328 + }, + "var": { + "link_layer_features": { + "addr": 154064, + "value": "bff90104fe000000" + } }, "version": [ 1, 9, - 41 + 56 ] } \ No newline at end of file diff --git a/bundles/noos_exp/ING9187xx/platform.bin b/bundles/noos_exp/ING9187xx/platform.bin index 8a01ff5ca..d82b43bdb 100644 Binary files a/bundles/noos_exp/ING9187xx/platform.bin and b/bundles/noos_exp/ING9187xx/platform.bin differ diff --git a/bundles/noos_exp/ING9188xx/apis.json b/bundles/noos_exp/ING9188xx/apis.json index 734bc3c73..b7dc9ca2b 100644 --- a/bundles/noos_exp/ING9188xx/apis.json +++ b/bundles/noos_exp/ING9188xx/apis.json @@ -6,45 +6,47 @@ "att_dispatch_server_can_send_now": "0x000057fd", "att_dispatch_server_request_can_send_now_event": "0x00005803", "att_emit_general_event": "0x000058b5", - "att_server_can_send_packet_now": "0x00005fe5", - "att_server_deferred_read_response": "0x00005fe9", - "att_server_get_mtu": "0x00006001", - "att_server_indicate": "0x00006079", - "att_server_init": "0x000060fd", - "att_server_notify": "0x00006139", - "att_server_register_packet_handler": "0x00006251", - "att_server_request_can_send_now_event": "0x0000625d", - "att_set_db": "0x00006279", - "att_set_read_callback": "0x0000628d", - "att_set_write_callback": "0x00006299", - "bd_addr_cmp": "0x00006409", - "bd_addr_copy": "0x0000640f", - "bd_addr_to_str": "0x00006419", - "big_endian_read_16": "0x00006451", - "big_endian_read_32": "0x00006459", - "big_endian_store_16": "0x0000646d", - "big_endian_store_32": "0x00006479", - "btstack_config": "0x000065b1", - "btstack_memory_pool_create": "0x00006701", - "btstack_memory_pool_free": "0x00006729", - "btstack_memory_pool_get": "0x00006789", - "btstack_push_user_msg": "0x000067d1", - "btstack_push_user_runnable": "0x000067dd", - "btstack_reset": "0x000067e9", - "char_for_nibble": "0x00006ae3", - "gap_add_dev_to_periodic_list": "0x000073f9", - "gap_add_whitelist": "0x00007409", - "gap_aes_encrypt": "0x00007415", - "gap_clear_white_lists": "0x0000744d", - "gap_clr_adv_set": "0x00007459", - "gap_clr_periodic_adv_list": "0x00007465", - "gap_create_connection_cancel": "0x00007471", - "gap_default_periodic_adv_sync_transfer_param": "0x0000747d", - "gap_disconnect": "0x00007495", - "gap_disconnect_all": "0x000074c1", - "gap_ext_create_connection": "0x00007501", - "gap_get_connection_parameter_range": "0x000075f5", - "gap_le_read_channel_map": "0x00007631", + "att_server_can_send_packet_now": "0x00005fe9", + "att_server_deferred_read_response": "0x00005fed", + "att_server_get_mtu": "0x00006005", + "att_server_indicate": "0x0000607d", + "att_server_init": "0x00006101", + "att_server_notify": "0x0000613d", + "att_server_register_packet_handler": "0x00006255", + "att_server_request_can_send_now_event": "0x00006261", + "att_set_db": "0x0000627d", + "att_set_read_callback": "0x00006291", + "att_set_write_callback": "0x0000629d", + "bd_addr_cmp": "0x0000640d", + "bd_addr_copy": "0x00006413", + "bd_addr_to_str": "0x0000641d", + "big_endian_read_16": "0x00006455", + "big_endian_read_32": "0x0000645d", + "big_endian_store_16": "0x00006471", + "big_endian_store_32": "0x0000647d", + "btstack_config": "0x000065b5", + "btstack_get_capabilities": "0x000065c1", + "btstack_memory_pool_create": "0x0000671b", + "btstack_memory_pool_free": "0x00006745", + "btstack_memory_pool_get": "0x000067a5", + "btstack_push_user_msg": "0x000067ed", + "btstack_push_user_runnable": "0x000067f9", + "btstack_reset": "0x00006805", + "char_for_nibble": "0x00006aff", + "gap_add_dev_to_periodic_list": "0x00007401", + "gap_add_whitelist": "0x00007411", + "gap_aes_encrypt": "0x0000741d", + "gap_clear_white_lists": "0x00007455", + "gap_clr_adv_set": "0x00007461", + "gap_clr_periodic_adv_list": "0x0000746d", + "gap_create_connection_cancel": "0x00007479", + "gap_default_periodic_adv_sync_transfer_param": "0x00007485", + "gap_disconnect": "0x0000749d", + "gap_disconnect2": "0x000074a5", + "gap_disconnect_all": "0x000074d1", + "gap_ext_create_connection": "0x00007511", + "gap_get_connection_parameter_range": "0x00007605", + "gap_le_read_channel_map": "0x0000763d", "gap_periodic_adv_create_sync": "0x0000769d", "gap_periodic_adv_create_sync_cancel": "0x000076c1", "gap_periodic_adv_set_info_transfer": "0x000076cd", @@ -59,252 +61,257 @@ "gap_read_remote_used_features": "0x000077e1", "gap_read_remote_version": "0x000077ed", "gap_read_rssi": "0x000077f9", - "gap_remove_whitelist": "0x00007805", - "gap_rmv_adv_set": "0x00007881", - "gap_rmv_dev_from_periodic_list": "0x0000788d", - "gap_rx_test_v2": "0x0000789d", - "gap_rx_test_v3": "0x000078ad", - "gap_set_adv_set_random_addr": "0x000078f9", - "gap_set_callback_for_next_hci": "0x00007935", - "gap_set_connection_cte_request_enable": "0x00007955", - "gap_set_connection_cte_response_enable": "0x00007971", - "gap_set_connection_cte_rx_param": "0x00007981", - "gap_set_connection_cte_tx_param": "0x000079d5", - "gap_set_connection_parameter_range": "0x00007a21", - "gap_set_connectionless_cte_tx_enable": "0x00007a39", - "gap_set_connectionless_cte_tx_param": "0x00007a49", - "gap_set_connectionless_iq_sampling_enable": "0x00007aa5", - "gap_set_data_length": "0x00007b01", - "gap_set_def_phy": "0x00007b19", - "gap_set_default_subrate": "0x00007b29", - "gap_set_ext_adv_data": "0x00007b45", - "gap_set_ext_adv_enable": "0x00007b5d", - "gap_set_ext_adv_para": "0x00007bcd", - "gap_set_ext_scan_enable": "0x00007ca5", - "gap_set_ext_scan_para": "0x00007cbd", - "gap_set_ext_scan_response_data": "0x00007d5d", - "gap_set_host_channel_classification": "0x00007d75", - "gap_set_path_loss_reporting_enable": "0x00007d85", - "gap_set_path_loss_reporting_param": "0x00007d95", - "gap_set_periodic_adv_data": "0x00007db1", - "gap_set_periodic_adv_enable": "0x00007e21", - "gap_set_periodic_adv_para": "0x00007e31", - "gap_set_periodic_adv_rx_enable": "0x00007e49", - "gap_set_phy": "0x00007e59", - "gap_set_random_device_address": "0x00007e75", - "gap_set_tx_power_reporting_enable": "0x00007e95", - "gap_start_ccm": "0x00007eb5", - "gap_subrate_request": "0x00007efd", - "gap_test_end": "0x00007f19", - "gap_tx_test_v2": "0x00007f25", - "gap_tx_test_v4": "0x00007f3d", - "gap_update_connection_parameters": "0x00007f61", - "gap_vendor_tx_continuous_wave": "0x00007fa5", - "gatt_client_cancel_write": "0x000084cd", - "gatt_client_discover_characteristic_descriptors": "0x000084f3", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x00008533", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x00008583", - "gatt_client_discover_characteristics_for_service": "0x000085d3", - "gatt_client_discover_primary_services": "0x00008609", - "gatt_client_discover_primary_services_by_uuid128": "0x0000863b", - "gatt_client_discover_primary_services_by_uuid16": "0x0000867f", - "gatt_client_execute_write": "0x000086bb", - "gatt_client_find_included_services_for_service": "0x000086e1", - "gatt_client_get_mtu": "0x0000870f", - "gatt_client_is_ready": "0x000087b1", - "gatt_client_listen_for_characteristic_value_updates": "0x000087c7", - "gatt_client_prepare_write": "0x000087e9", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x00008825", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x0000884f", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008855", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x00008883", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x00008889", - "gatt_client_read_multiple_characteristic_values": "0x000088b7", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x000088e7", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x00008915", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x00008961", - "gatt_client_register_handler": "0x000089ad", - "gatt_client_reliable_write_long_value_of_characteristic": "0x000089b9", - "gatt_client_signed_write_without_response": "0x00008de9", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008ead", - "gatt_client_write_client_characteristic_configuration": "0x00008ee7", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008f39", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008f49", - "gatt_client_write_long_value_of_characteristic": "0x00008f85", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008f95", - "gatt_client_write_value_of_characteristic": "0x00008fd1", - "gatt_client_write_value_of_characteristic_without_response": "0x00009007", - "hci_add_event_handler": "0x0000a5b9", - "hci_power_control": "0x0000ad69", - "hci_register_acl_packet_handler": "0x0000af1d", - "kv_commit": "0x0000b6b9", - "kv_get": "0x0000b715", - "kv_init": "0x0000b721", - "kv_init_backend": "0x0000b7a1", - "kv_put": "0x0000b7b5", - "kv_remove": "0x0000b7c1", - "kv_remove_all": "0x0000b7f5", - "kv_value_modified": "0x0000b825", - "kv_value_modified_of_key": "0x0000b841", - "kv_visit": "0x0000b84d", - "l2cap_add_event_handler": "0x0000b8dd", - "l2cap_can_send_packet_now": "0x0000b8ed", - "l2cap_create_le_credit_based_connection_request": "0x0000baa9", - "l2cap_credit_based_send": "0x0000bbed", - "l2cap_credit_based_send_continue": "0x0000bc19", - "l2cap_disconnect": "0x0000bc95", - "l2cap_get_le_credit_based_connection_credits": "0x0000bee5", - "l2cap_get_peer_mtu_for_local_cid": "0x0000bf01", - "l2cap_init": "0x0000c2d5", - "l2cap_le_send_flow_control_credit": "0x0000c3cb", - "l2cap_max_le_mtu": "0x0000c6d5", - "l2cap_register_packet_handler": "0x0000c7fd", - "l2cap_register_service": "0x0000c809", - "l2cap_request_can_send_now_event": "0x0000c919", - "l2cap_request_connection_parameter_update": "0x0000c933", - "l2cap_send_echo_request": "0x0000ce0d", - "l2cap_unregister_service": "0x0000cecd", - "le_device_db_add": "0x0000cf25", - "le_device_db_find": "0x0000cffd", - "le_device_db_from_key": "0x0000d029", - "le_device_db_iter_cur": "0x0000d031", - "le_device_db_iter_cur_key": "0x0000d035", - "le_device_db_iter_init": "0x0000d039", - "le_device_db_iter_next": "0x0000d041", - "le_device_db_remove_key": "0x0000d067", - "ll_ackable_packet_alloc": "0x0000d093", - "ll_ackable_packet_get_status": "0x0000d1cd", - "ll_ackable_packet_run": "0x0000d23d", - "ll_ackable_packet_set_tx_data": "0x0000d2e1", - "ll_adjust_conn_peer_tx_power": "0x0000d309", - "ll_aes_encrypt": "0x0000d335", - "ll_channel_monitor_alloc": "0x0000d3b1", - "ll_channel_monitor_check_each_pdu": "0x0000d433", - "ll_channel_monitor_run": "0x0000d499", - "ll_config": "0x0000d54d", - "ll_conn_abort": "0x0000d569", - "ll_create_conn": "0x0000d59d", - "ll_dhkey_generated": "0x0000d819", - "ll_free": "0x0000d84d", - "ll_get_conn_events_info": "0x0000d859", - "ll_get_conn_info": "0x0000d93d", - "ll_get_heap_free_size": "0x0000d989", - "ll_hint_on_ce_len": "0x0000d99d", - "ll_install_ecc_engine": "0x0000d9d5", - "ll_legacy_adv_set_interval": "0x0000d9e1", - "ll_lock_frequency": "0x0000d9f1", - "ll_malloc": "0x0000da55", - "ll_p256_key_pair_generated": "0x0000da5d", - "ll_raw_packet_alloc": "0x0000dc11", - "ll_raw_packet_free": "0x0000dce5", - "ll_raw_packet_get_bare_rx_data": "0x0000dd1d", - "ll_raw_packet_get_iq_samples": "0x0000dde3", - "ll_raw_packet_get_rx_data": "0x0000de7d", - "ll_raw_packet_recv": "0x0000df1d", - "ll_raw_packet_send": "0x0000dfd9", - "ll_raw_packet_set_bare_data": "0x0000e0c1", - "ll_raw_packet_set_bare_mode": "0x0000e0ff", - "ll_raw_packet_set_fake_cte_info": "0x0000e205", - "ll_raw_packet_set_param": "0x0000e227", - "ll_raw_packet_set_rx_cte": "0x0000e285", - "ll_raw_packet_set_tx_cte": "0x0000e31b", - "ll_raw_packet_set_tx_data": "0x0000e359", - "ll_register_hci_acl_previewer": "0x0000e3bd", - "ll_scan_set_fixed_channel": "0x0000e421", - "ll_scanner_enable_iq_sampling": "0x0000e42d", - "ll_set_adv_access_address": "0x0000e6e1", - "ll_set_adv_coded_scheme": "0x0000e6ed", - "ll_set_conn_acl_report_latency": "0x0000e71d", - "ll_set_conn_coded_scheme": "0x0000e74d", - "ll_set_conn_interval_unit": "0x0000e779", - "ll_set_conn_latency": "0x0000e785", - "ll_set_conn_tx_power": "0x0000e7b5", - "ll_set_def_antenna": "0x0000e7f1", - "ll_set_initiating_coded_scheme": "0x0000e80d", - "ll_set_max_conn_number": "0x0000e819", - "ll_set_tx_power_range": "0x0000e8ad", - "ll_unlock_frequency": "0x0000e8d5", - "nibble_for_char": "0x00021375", - "platform_calibrate_rt_clk": "0x00021411", + "gap_read_white_lists_size": "0x00007805", + "gap_remove_whitelist": "0x00007811", + "gap_rmv_adv_set": "0x0000788d", + "gap_rmv_dev_from_periodic_list": "0x00007899", + "gap_rx_test_v2": "0x000078a9", + "gap_rx_test_v3": "0x000078b9", + "gap_set_adv_set_random_addr": "0x00007905", + "gap_set_callback_for_next_hci": "0x00007929", + "gap_set_connection_cte_request_enable": "0x00007949", + "gap_set_connection_cte_response_enable": "0x00007965", + "gap_set_connection_cte_rx_param": "0x00007975", + "gap_set_connection_cte_tx_param": "0x000079c9", + "gap_set_connection_parameter_range": "0x00007a15", + "gap_set_connectionless_cte_tx_enable": "0x00007a2d", + "gap_set_connectionless_cte_tx_param": "0x00007a3d", + "gap_set_connectionless_iq_sampling_enable": "0x00007a99", + "gap_set_data_length": "0x00007af5", + "gap_set_def_phy": "0x00007b0d", + "gap_set_default_subrate": "0x00007b1d", + "gap_set_ext_adv_data": "0x00007b39", + "gap_set_ext_adv_enable": "0x00007b51", + "gap_set_ext_adv_para": "0x00007bc1", + "gap_set_ext_scan_enable": "0x00007c89", + "gap_set_ext_scan_para": "0x00007ca1", + "gap_set_ext_scan_response_data": "0x00007d41", + "gap_set_host_channel_classification": "0x00007d59", + "gap_set_path_loss_reporting_enable": "0x00007d69", + "gap_set_path_loss_reporting_param": "0x00007d79", + "gap_set_periodic_adv_data": "0x00007d95", + "gap_set_periodic_adv_enable": "0x00007e05", + "gap_set_periodic_adv_para": "0x00007e15", + "gap_set_periodic_adv_rx_enable": "0x00007e2d", + "gap_set_phy": "0x00007e3d", + "gap_set_random_device_address": "0x00007e59", + "gap_set_tx_power_reporting_enable": "0x00007e65", + "gap_start_ccm": "0x00007e85", + "gap_subrate_request": "0x00007ecd", + "gap_test_end": "0x00007ee9", + "gap_tx_test_v2": "0x00007ef5", + "gap_tx_test_v4": "0x00007f0d", + "gap_update_connection_parameters": "0x00007f31", + "gap_vendor_tx_continuous_wave": "0x00007f75", + "gatt_client_cancel_write": "0x0000849d", + "gatt_client_discover_characteristic_descriptors": "0x000084c3", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x00008503", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x00008553", + "gatt_client_discover_characteristics_for_service": "0x000085a3", + "gatt_client_discover_primary_services": "0x000085d9", + "gatt_client_discover_primary_services_by_uuid128": "0x0000860b", + "gatt_client_discover_primary_services_by_uuid16": "0x0000864f", + "gatt_client_execute_write": "0x0000868b", + "gatt_client_find_included_services_for_service": "0x000086b1", + "gatt_client_get_mtu": "0x000086df", + "gatt_client_is_ready": "0x00008789", + "gatt_client_listen_for_characteristic_value_updates": "0x0000879f", + "gatt_client_prepare_write": "0x000087c1", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x000087fd", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x00008827", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x0000882d", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x0000885b", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x00008861", + "gatt_client_read_multiple_characteristic_values": "0x0000888f", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x000088bf", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x000088ed", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x00008939", + "gatt_client_register_handler": "0x00008985", + "gatt_client_reliable_write_long_value_of_characteristic": "0x00008991", + "gatt_client_signed_write_without_response": "0x00008dc1", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008e85", + "gatt_client_write_client_characteristic_configuration": "0x00008ebf", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008f11", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008f21", + "gatt_client_write_long_value_of_characteristic": "0x00008f5d", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008f6d", + "gatt_client_write_value_of_characteristic": "0x00008fa9", + "gatt_client_write_value_of_characteristic_without_response": "0x00008fdf", + "hci_add_event_handler": "0x0000a589", + "hci_power_control": "0x0000ad35", + "hci_register_acl_packet_handler": "0x0000aee9", + "kv_commit": "0x0000b675", + "kv_get": "0x0000b6d1", + "kv_init": "0x0000b6dd", + "kv_init_backend": "0x0000b75d", + "kv_put": "0x0000b771", + "kv_remove": "0x0000b77d", + "kv_remove_all": "0x0000b7b1", + "kv_value_modified": "0x0000b7e1", + "kv_value_modified_of_key": "0x0000b7fd", + "kv_visit": "0x0000b809", + "l2cap_add_event_handler": "0x0000b899", + "l2cap_can_send_packet_now": "0x0000b8a9", + "l2cap_create_le_credit_based_connection_request": "0x0000ba65", + "l2cap_credit_based_send": "0x0000bba9", + "l2cap_credit_based_send_continue": "0x0000bbd5", + "l2cap_disconnect": "0x0000bc51", + "l2cap_get_le_credit_based_connection_credits": "0x0000bea1", + "l2cap_get_peer_mtu_for_local_cid": "0x0000bebd", + "l2cap_init": "0x0000c291", + "l2cap_le_send_flow_control_credit": "0x0000c387", + "l2cap_max_le_mtu": "0x0000c691", + "l2cap_register_packet_handler": "0x0000c7b9", + "l2cap_register_service": "0x0000c7c5", + "l2cap_request_can_send_now_event": "0x0000c8d5", + "l2cap_request_connection_parameter_update": "0x0000c8ef", + "l2cap_send_echo_request": "0x0000cdc9", + "l2cap_unregister_service": "0x0000ce89", + "le_device_db_add": "0x0000cee1", + "le_device_db_find": "0x0000cfb9", + "le_device_db_from_key": "0x0000cfe5", + "le_device_db_iter_cur": "0x0000cfed", + "le_device_db_iter_cur_key": "0x0000cff1", + "le_device_db_iter_init": "0x0000cff5", + "le_device_db_iter_next": "0x0000cffd", + "le_device_db_remove_key": "0x0000d023", + "ll_ackable_packet_alloc": "0x0000d04f", + "ll_ackable_packet_get_status": "0x0000d189", + "ll_ackable_packet_run": "0x0000d1f9", + "ll_ackable_packet_set_tx_data": "0x0000d29d", + "ll_adjust_conn_peer_tx_power": "0x0000d2c5", + "ll_aes_encrypt": "0x0000d2f1", + "ll_channel_monitor_alloc": "0x0000d36d", + "ll_channel_monitor_check_each_pdu": "0x0000d3ef", + "ll_channel_monitor_run": "0x0000d45d", + "ll_config": "0x0000d511", + "ll_conn_abort": "0x0000d52d", + "ll_create_conn": "0x0000d561", + "ll_dhkey_generated": "0x0000d7dd", + "ll_free": "0x0000d811", + "ll_get_capabilities": "0x0000d81d", + "ll_get_conn_events_info": "0x0000d83d", + "ll_get_conn_info": "0x0000d921", + "ll_get_heap_free_size": "0x0000d96d", + "ll_get_states": "0x0000d97d", + "ll_hint_on_ce_len": "0x0000da39", + "ll_install_ecc_engine": "0x0000da71", + "ll_legacy_adv_set_interval": "0x0000da7d", + "ll_lock_frequency": "0x0000da8d", + "ll_malloc": "0x0000daf1", + "ll_p256_key_pair_generated": "0x0000daf9", + "ll_raw_packet_alloc": "0x0000dcad", + "ll_raw_packet_free": "0x0000dd81", + "ll_raw_packet_get_bare_rx_data": "0x0000ddb9", + "ll_raw_packet_get_iq_samples": "0x0000de7f", + "ll_raw_packet_get_rx_data": "0x0000df19", + "ll_raw_packet_recv": "0x0000dfb9", + "ll_raw_packet_send": "0x0000e075", + "ll_raw_packet_set_bare_data": "0x0000e15d", + "ll_raw_packet_set_bare_mode": "0x0000e19b", + "ll_raw_packet_set_fake_cte_info": "0x0000e2a1", + "ll_raw_packet_set_param": "0x0000e2c3", + "ll_raw_packet_set_rx_cte": "0x0000e321", + "ll_raw_packet_set_tx_cte": "0x0000e3b7", + "ll_raw_packet_set_tx_data": "0x0000e3f5", + "ll_register_hci_acl_previewer": "0x0000e459", + "ll_scan_set_fixed_channel": "0x0000e4bd", + "ll_scanner_enable_iq_sampling": "0x0000e4c9", + "ll_set_adv_access_address": "0x0000e77d", + "ll_set_adv_coded_scheme": "0x0000e789", + "ll_set_conn_acl_report_latency": "0x0000e7b9", + "ll_set_conn_coded_scheme": "0x0000e7e9", + "ll_set_conn_interval_unit": "0x0000e815", + "ll_set_conn_latency": "0x0000e821", + "ll_set_conn_tx_power": "0x0000e851", + "ll_set_def_antenna": "0x0000e88d", + "ll_set_initiating_coded_scheme": "0x0000e8a9", + "ll_set_max_conn_number": "0x0000e8b5", + "ll_set_tx_power_range": "0x0000e949", + "ll_unlock_frequency": "0x0000e971", + "nibble_for_char": "0x000215fd", + "platform_calibrate_rt_clk": "0x00021699", "platform_call_on_stack": "0x000040ef", - "platform_config": "0x00021415", - "platform_controller_run": "0x00021539", - "platform_delete_timer": "0x0002156d", - "platform_enable_irq": "0x00021575", - "platform_get_gen_os_driver": "0x000215ad", - "platform_get_link_layer_interf": "0x000215b9", - "platform_get_task_handle": "0x000215c1", - "platform_get_timer_counter": "0x000215d9", - "platform_get_us_time": "0x000215dd", - "platform_get_version": "0x000215e1", - "platform_hrng": "0x000215e9", - "platform_init_controller": "0x000215f1", - "platform_os_idle_resumed_hook": "0x0002160d", - "platform_patch_rf_init_data": "0x00021611", - "platform_post_sleep_processing": "0x0002161d", - "platform_pre_sleep_processing": "0x00021623", - "platform_pre_suppress_ticks_and_sleep_processing": "0x00021629", - "platform_printf": "0x0002162d", - "platform_raise_assertion": "0x00021641", - "platform_rand": "0x00021655", - "platform_read_info": "0x00021659", - "platform_read_persistent_reg": "0x00021689", - "platform_reset": "0x00021699", - "platform_rt_rc_auto_tune": "0x000216bd", - "platform_rt_rc_auto_tune2": "0x000216c5", - "platform_rt_rc_tune": "0x0002174d", - "platform_set_abs_timer": "0x00021761", - "platform_set_evt_callback": "0x00021765", - "platform_set_evt_callback_table": "0x00021779", - "platform_set_irq_callback": "0x00021785", - "platform_set_irq_callback_table": "0x000217a1", - "platform_set_rf_clk_source": "0x000217ad", - "platform_set_rf_init_data": "0x000217b9", - "platform_set_rf_power_mapping": "0x000217c5", - "platform_set_timer": "0x000217d1", - "platform_shutdown": "0x000217d5", - "platform_switch_app": "0x000217d9", - "platform_trace_raw": "0x00021805", - "platform_write_persistent_reg": "0x0002181d", - "printf_hexdump": "0x0002182d", - "reverse_128": "0x00021ba5", - "reverse_24": "0x00021bab", - "reverse_256": "0x00021bb1", - "reverse_48": "0x00021bb7", - "reverse_56": "0x00021bbd", - "reverse_64": "0x00021bc3", - "reverse_bd_addr": "0x00021bc9", - "reverse_bytes": "0x00021bcf", - "sm_add_event_handler": "0x00021f0d", - "sm_address_resolution_lookup": "0x00022051", - "sm_authenticated": "0x0002247d", - "sm_authorization_decline": "0x0002248b", - "sm_authorization_grant": "0x000224ab", - "sm_authorization_state": "0x000224cb", - "sm_bonding_decline": "0x000224e5", - "sm_config": "0x00022965", - "sm_config_conn": "0x0002297d", - "sm_encryption_key_size": "0x00022b33", - "sm_just_works_confirm": "0x00023881", - "sm_le_device_key": "0x00023c61", - "sm_numeric_comparison_confirm": "0x00023db3", - "sm_passkey_input": "0x00023df1", - "sm_private_random_address_generation_get": "0x000243f1", - "sm_private_random_address_generation_get_mode": "0x000243f9", - "sm_private_random_address_generation_set_mode": "0x00024405", - "sm_private_random_address_generation_set_update_period": "0x0002442d", - "sm_register_external_ltk_callback": "0x000246b9", - "sm_register_oob_data_callback": "0x000246c5", - "sm_register_sc_oob_data_callback": "0x000246d1", - "sm_request_pairing": "0x000246dd", - "sm_sc_generate_oob_data": "0x00025315", - "sm_send_security_request": "0x00025445", - "sm_set_accepted_stk_generation_methods": "0x0002546d", - "sm_set_authentication_requirements": "0x00025479", - "sm_set_encryption_key_size_range": "0x00025485", - "sscanf_bd_addr": "0x000258a1", - "sysSetPublicDeviceAddr": "0x00025c55", - "uuid128_to_str": "0x00026429", - "uuid_add_bluetooth_prefix": "0x00026481", - "uuid_has_bluetooth_prefix": "0x000264a1" + "platform_cancel_us_timer": "0x0002169d", + "platform_config": "0x000216b1", + "platform_controller_run": "0x000217d5", + "platform_create_us_timer": "0x00021809", + "platform_delete_timer": "0x0002181d", + "platform_enable_irq": "0x00021825", + "platform_get_gen_os_driver": "0x0002185d", + "platform_get_link_layer_interf": "0x00021869", + "platform_get_task_handle": "0x00021871", + "platform_get_timer_counter": "0x00021889", + "platform_get_us_time": "0x0002188d", + "platform_get_version": "0x00021891", + "platform_hrng": "0x00021899", + "platform_init_controller": "0x000218a1", + "platform_os_idle_resumed_hook": "0x000218bd", + "platform_patch_rf_init_data": "0x000218c1", + "platform_post_sleep_processing": "0x000218cd", + "platform_pre_sleep_processing": "0x000218d3", + "platform_pre_suppress_ticks_and_sleep_processing": "0x000218d9", + "platform_printf": "0x000218dd", + "platform_raise_assertion": "0x000218f1", + "platform_rand": "0x00021905", + "platform_read_info": "0x00021909", + "platform_read_persistent_reg": "0x00021939", + "platform_reset": "0x00021949", + "platform_rt_rc_auto_tune": "0x0002196d", + "platform_rt_rc_auto_tune2": "0x00021975", + "platform_rt_rc_tune": "0x000219f1", + "platform_set_abs_timer": "0x00021a15", + "platform_set_evt_callback": "0x00021a19", + "platform_set_evt_callback_table": "0x00021a2d", + "platform_set_irq_callback": "0x00021a39", + "platform_set_irq_callback_table": "0x00021a55", + "platform_set_rf_clk_source": "0x00021a61", + "platform_set_rf_init_data": "0x00021a6d", + "platform_set_rf_power_mapping": "0x00021a79", + "platform_set_timer": "0x00021a85", + "platform_shutdown": "0x00021a89", + "platform_switch_app": "0x00021a8d", + "platform_trace_raw": "0x00021ab9", + "platform_write_persistent_reg": "0x00021ad1", + "printf_hexdump": "0x00021ae1", + "reverse_128": "0x00021e59", + "reverse_24": "0x00021e5f", + "reverse_256": "0x00021e65", + "reverse_48": "0x00021e6b", + "reverse_56": "0x00021e71", + "reverse_64": "0x00021e77", + "reverse_bd_addr": "0x00021e7d", + "reverse_bytes": "0x00021e83", + "sm_add_event_handler": "0x000221c1", + "sm_address_resolution_lookup": "0x00022305", + "sm_authenticated": "0x0002274d", + "sm_authorization_decline": "0x0002275b", + "sm_authorization_grant": "0x0002277b", + "sm_authorization_state": "0x0002279b", + "sm_bonding_decline": "0x000227b5", + "sm_config": "0x00022c3d", + "sm_config_conn": "0x00022c71", + "sm_encryption_key_size": "0x00022e57", + "sm_just_works_confirm": "0x00023a49", + "sm_le_device_key": "0x00023e39", + "sm_numeric_comparison_confirm": "0x00023f83", + "sm_passkey_input": "0x00023fc1", + "sm_private_random_address_generation_get": "0x000245ad", + "sm_private_random_address_generation_get_mode": "0x000245b5", + "sm_private_random_address_generation_set_mode": "0x000245c1", + "sm_private_random_address_generation_set_update_period": "0x000245e9", + "sm_register_external_ltk_callback": "0x0002487d", + "sm_register_oob_data_callback": "0x00024889", + "sm_register_sc_oob_data_callback": "0x00024895", + "sm_request_pairing": "0x000248a1", + "sm_sc_generate_oob_data": "0x00025529", + "sm_send_security_request": "0x00025845", + "sm_set_accepted_stk_generation_methods": "0x0002586d", + "sm_set_authentication_requirements": "0x00025879", + "sm_set_encryption_key_size_range": "0x00025889", + "sscanf_bd_addr": "0x00025c95", + "sysSetPublicDeviceAddr": "0x00026091", + "uuid128_to_str": "0x00026879", + "uuid_add_bluetooth_prefix": "0x000268d1", + "uuid_has_bluetooth_prefix": "0x000268f1" } \ No newline at end of file diff --git a/bundles/noos_exp/ING9188xx/meta.json b/bundles/noos_exp/ING9188xx/meta.json index c95590ac9..cfae7e774 100644 --- a/bundles/noos_exp/ING9188xx/meta.json +++ b/bundles/noos_exp/ING9188xx/meta.json @@ -4,15 +4,21 @@ }, "ram": { "base": 536870912, - "size": 3764 + "size": 3572 }, "rom": { "base": 16384, - "size": 148124 + "size": 149244 + }, + "var": { + "link_layer_features": { + "addr": 160640, + "value": "bff9ff07fe000000" + } }, "version": [ 1, 9, - 41 + 56 ] } \ No newline at end of file diff --git a/bundles/noos_exp/ING9188xx/platform.bin b/bundles/noos_exp/ING9188xx/platform.bin index a20823284..064a19a73 100644 Binary files a/bundles/noos_exp/ING9188xx/platform.bin and b/bundles/noos_exp/ING9188xx/platform.bin differ diff --git a/bundles/noos_exp/inc/bluetooth.h b/bundles/noos_exp/inc/bluetooth.h index 44c58585a..8d306ff5e 100644 --- a/bundles/noos_exp/inc/bluetooth.h +++ b/bundles/noos_exp/inc/bluetooth.h @@ -40,10 +40,14 @@ typedef uint8_t bd_addr_t[BD_ADDR_LEN]; typedef enum { BD_ADDR_TYPE_LE_PUBLIC = 0, BD_ADDR_TYPE_LE_RANDOM = 0x01, - BD_ADDR_TYPE_LE_RESOVLED_PUB = 0x02, - BD_ADDR_TYPE_LE_RESOVLED_RAN = 0x03 + BD_ADDR_TYPE_LE_RESOLVED_PUB = 0x02, + BD_ADDR_TYPE_LE_RESOLVED_RAN = 0x03 } bd_addr_type_t; +// back-compatibility for typos +#define BD_ADDR_TYPE_LE_RESOVLED_PUB BD_ADDR_TYPE_LE_RESOLVED_PUB +#define BD_ADDR_TYPE_LE_RESOVLED_RAN BD_ADDR_TYPE_LE_RESOLVED_RAN + /** * @brief link key */ @@ -718,7 +722,7 @@ typedef enum { #define SM_AUTHREQ_NO_BONDING 0x00 #define SM_AUTHREQ_BONDING 0x01 #define SM_AUTHREQ_MITM_PROTECTION 0x04 -#define SM_AUTHREQ_SC 0x08 +#define SM_AUTHREQ_SC 0x08 // support of LE Secure Connections pairing // Key distribution flags used by spec #define SM_KEYDIST_ENC_KEY 0X01 diff --git a/bundles/noos_exp/inc/btstack_defines.h b/bundles/noos_exp/inc/btstack_defines.h index a8d08006c..25f1463b0 100644 --- a/bundles/noos_exp/inc/btstack_defines.h +++ b/bundles/noos_exp/inc/btstack_defines.h @@ -385,6 +385,20 @@ */ #define SM_EVENT_STATE_CHANGED 0xDC + /** + * @format H1B1 + * @param handle + * @param show calculated numeric value that needs to be compared + */ +#define SM_EVENT_NUMERIC_COMPARISON_REQUEST 0xDD + +/** + * @format PP + * @param irk + * @param dhk + */ +#define SM_EVENT_IRK_DHK_RESULT 0xDE + // GAP /** diff --git a/bundles/noos_exp/inc/btstack_event.h b/bundles/noos_exp/inc/btstack_event.h index e5ab49a55..dc87fa82a 100644 --- a/bundles/noos_exp/inc/btstack_event.h +++ b/bundles/noos_exp/inc/btstack_event.h @@ -107,6 +107,21 @@ uint32_t btstack_push_user_runnable(f_btstack_user_runnable fun, void *data, con */ uint8_t btstack_reset(void); +typedef struct btstack_capabilities +{ + uint16_t adv_set_num; // max number of advertising sets + uint16_t conn_num; // max number of connections + uint16_t max_mtu; // max MTU + uint16_t device_db_num; // max number of devices in database +} btstack_capabilities_t; + +/** + * @brief Get BT stack capabilities. + * + * @param[out] capabilities see `btstack_capabilities_t`. + */ +void btstack_get_capabilities(btstack_capabilities_t *capabilities); + /*** * @brief Get subevent code for le event * @param event packet @@ -780,6 +795,26 @@ static __INLINE hci_con_handle_t sm_event_numeric_comparison_get_handle(const ui return little_endian_read_16(event, 2); } +/** + * @brief Get field addr_type from event SM_EVENT_NUMERIC_COMPARISON_REQUEST + * @param event packet + * @return addr_type + * @note: btstack_type 1 + */ +static __INLINE uint8_t sm_event_numeric_comparison_get_addr_type(const uint8_t * event){ + return *decode_event_offset(event, uint8_t, 4); +} + +/** + * @brief Get field address from event SM_EVENT_NUMERIC_COMPARISON_REQUEST + * @param event packet + * @param Pointer to storage for address + * @note: btstack_type B + */ +static __INLINE void sm_event_numeric_comparison_get_address(const uint8_t * event, uint8_t * address){ + reverse_bd_addr(decode_event_offset(event, uint8_t, 5), address); +} + /** * @brief Get field compare value from event SM_EVENT_NUMERIC_COMPARISON_REQUEST * @param event packet @@ -790,6 +825,24 @@ static __INLINE uint32_t sm_event_numeric_comparison_get_compare_value(const uin return little_endian_read_32(event, 11); } +/** + * @brief Get IRK from event SM_EVENT_IRK_DHK_RESULT + * @param event packet + * @return irk + */ +static __INLINE const uint8_t *sm_event_irk_dhk_result_get_irk(const uint8_t *event) { + return *decode_event_offset(event, uint8_t *, 2); +} + +/** + * @brief Get DHK from event SM_EVENT_IRK_DHK_RESULT + * @param event packet + * @return dhk + */ +static __INLINE const uint8_t *sm_event_irk_dhk_result_get_dhk(const uint8_t *event) { + return *decode_event_offset(event, uint8_t *, 2 + sizeof(uintptr_t)); +} + /** * @brief Get field handle from event GAP_EVENT_SECURITY_LEVEL * @param event packet diff --git a/bundles/noos_exp/inc/gap.h b/bundles/noos_exp/inc/gap.h index eebe6c30b..056ef6c18 100644 --- a/bundles/noos_exp/inc/gap.h +++ b/bundles/noos_exp/inc/gap.h @@ -54,11 +54,27 @@ uint8_t gap_set_random_device_address(const uint8_t *address); /** * @brief Disconnect connection with handle * + * This is equivalent to `gap_disconnect2(handle, 0x13)`. + * * @param handle Used to identify an advertising set. Range: 0x00 to 0xEF * @return 0: Message is sent out or the connection already release */ uint8_t gap_disconnect(hci_con_handle_t handle); +/** + * @brief Disconnect connection with handle + * + * @param handle Used to identify an advertising set. Range: 0x00 to 0xEF + * @param reason Reason: + * - Authentication Failure error code (0x05) + * - Other End Terminated Connection error codes (0x13 to 0x15) + * - Unsupported Remote Feature error code (0x1A) + * - Pairing with Unit Key Not Supported error code (0x29) + * - Unacceptable Connection Parameters error code (0x3B) + * @return 0: Message is sent out or the connection already release + */ +uint8_t gap_disconnect2(hci_con_handle_t handle, uint8_t reason); + /** * @brief disconnect multi-connections */ @@ -70,7 +86,7 @@ void gap_disconnect_all(void); * @param[in] addtype BLE address type * @return 0: Message is sent to controller */ -uint8_t gap_add_whitelist(const uint8_t *address,bd_addr_type_t addtype); +uint8_t gap_add_whitelist(const uint8_t *address, bd_addr_type_t addtype); /** * @brief remove whitelist from controller @@ -79,7 +95,7 @@ uint8_t gap_add_whitelist(const uint8_t *address,bd_addr_type_t addtype); * @param addtype BLE address type * @return 0: Message is sent to controller */ -uint8_t gap_remove_whitelist(const uint8_t *address,bd_addr_type_t addtype); +uint8_t gap_remove_whitelist(const uint8_t *address, bd_addr_type_t addtype); /** * @brief clear white lists in controller @@ -88,6 +104,106 @@ uint8_t gap_remove_whitelist(const uint8_t *address,bd_addr_type_t addtype); */ uint8_t gap_clear_white_lists(void); +/** + * @brief read white lists size in controller + * + * @return 0: message sent out others: failed + */ +uint8_t gap_read_white_lists_size(void); + +/** + * @brief Add one device to the resolving list used to generate and resolve + * Resolvable Private Addresses in the Controller. + * + * @param address peer identity address + * @param addtype peer identity address type + * @param peer_irk IRK of the peer device + * @param local_irk IRK of the local device + * @return 0: message sent out others: failed + */ +uint8_t gap_add_dev_to_resolving_list(const uint8_t *address, bd_addr_type_t addtype, + const uint8_t *peer_irk, const uint8_t *local_irk); + +/** + * @brief Remove one device from the resolving list used to resolve Resolvable + * Private Addresses in the Controller. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +uint8_t gap_remove_dev_from_resolving_list(const uint8_t *address, bd_addr_type_t addtype); + +/** + * @brief Remove all devices from the resolving list used to resolve Resolvable + * Private Addresses in the Controller. + * + * @return 0: message sent out others: failed + */ +uint8_t gap_clear_resolving_list(void); + +// LE Privacy Mode +typedef enum privacy_mode +{ + PRIVACY_MODE_NETWORK = 0, // Network Privacy Mode (default) + // Identity address is not accepted if IRK is available + PRIVACY_MODE_DEVICE = 1, // Device Privacy Mode + // Identity address is accepted even if IRK is available +} privacy_mode_t; + +/** + * @brief Specify the privacy mode to be used for a given entry on the resolving list. + * + * @param address peer identity address + * @param addtype peer identity address type + * @param privacy_mode privacy mode for this peer device + * @return 0: message sent out others: failed + */ +uint8_t gap_set_privacy_mode(const uint8_t *address, bd_addr_type_t addtype, + privacy_mode_t privacy_mode); + +/** + * @brief Get the current peer Resolvable Private Address being used for the + * corresponding peer Public and Random (static) Identity Address. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +uint8_t gap_read_peer_resolving_addr(const uint8_t *address, bd_addr_type_t addtype); + +/** + * @brief Get the current local Resolvable Private Address being used for the + * corresponding peer Identity Address. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +uint8_t gap_read_local_resolving_addr(const uint8_t *address, bd_addr_type_t addtype); + +/** + * @brief Enable resolution of Resolvable Private Addresses in the Controller. + * + * @param enable address resolution enable + * 0: disabled (default) + * 1: enabled + * @return 0: message sent out others: failed + */ +uint8_t gap_set_addr_resolution_enable(const uint8_t enable); + +/** + * @brief Set the length of time the Controller uses a Resolvable Private Address + * before a new resolvable private address is generated and starts being used. + * + * @param rpa_timeout RPA_Timeout measured in seconds + * Range: 0x0001 to 0x0E10 + * Time range: 1 s to 1 hour + * Default: 0x0384 (900 s or 15 minutes) + * @return 0: message sent out others: failed + */ +uint8_t gap_set_resolvable_private_addr_timeout(uint16_t rpa_timeout); + /** * @brief read rssi value of a appointed hci connection * @@ -290,13 +406,13 @@ typedef enum scan_filter_policy SCAN_ACCEPT_WLIST_EXCEPT_NOT_DIRECTED, // Accept all advertising packets except directed advertising packets // where the initiator's identity address does not address this device - SCAN_ACCEPT_ALL_EXCEPT_IDENTITY_NOT_MATCH, + // SCAN_ACCEPT_ALL_EXCEPT_IDENTITY_NOT_MATCH, // Accept all advertising packets except: // 1. advertising packets where the advertiser's identity address is not in // the White List; and // 2. directed advertising packets where the initiator's identity address // does not address this device - SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH + // SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH } scan_filter_policy_t; /** @@ -318,6 +434,9 @@ uint8_t gap_set_ext_scan_para(const bd_addr_type_t own_addr_type, const scan_fil /** * @brief to set the extended scan response data for an advertising set * + * Note: Scan response data is cleared after `gap_set_ext_adv_para()` on the same + * advertising set handle. + * * @param adv_handle handle of advertising set handle * * @param length length of advertising data @@ -482,6 +601,9 @@ typedef enum adv_data_frag_pref /** * @brief to set extended advertising data * + * Note: Advertising data is cleared after `gap_set_ext_adv_para()` on the same + * advertising set handle. + * * @param adv_handle advertising set handle. * * @param length advertising data length @@ -497,6 +619,9 @@ uint8_t gap_set_ext_adv_data(const uint8_t adv_handle, uint16_t length, const ui /** * @brief LE Set Periodic Advertising Data command * + * Note: Advertising data is cleared after `gap_set_ext_adv_para()` and + * `gap_set_periodic_adv_para()` on the same advertising set handle. + * * @param adv_handle advertising set handle. * * @param length advertising data length (<= 1650 bytes) @@ -721,6 +846,7 @@ typedef struct { // Supervision timeout for the LE Link, unit is 10ms uint16_t supervision_timeout; // Informative parameter recommending the min/max length of connection event needed for this LE connection + // unit is 625us uint16_t min_ce_len; uint16_t max_ce_len; } conn_para_t; diff --git a/bundles/noos_exp/inc/le_device_db.h b/bundles/noos_exp/inc/le_device_db.h index b81d04f5a..68de61b61 100644 --- a/bundles/noos_exp/inc/le_device_db.h +++ b/bundles/noos_exp/inc/le_device_db.h @@ -16,14 +16,15 @@ typedef struct le_device_memory_db { // Identification uint8_t addr_type; - uint8_t key_size; - uint8_t authenticated; - uint8_t authorized; + uint8_t key_size; + uint8_t authenticated; + uint8_t authorized:1; + uint8_t sm_sc:1; bd_addr_t addr; sm_key_t irk; - // Stored pairing information allows to re-establish an enncrypted connection + // Stored pairing information allows to re-establish an encrypted connection // with a peripheral that doesn't have any persistent memory sm_key_t ltk; uint16_t ediv; @@ -36,7 +37,6 @@ typedef struct le_device_memory_db { // Signed Writes by us sm_key_t local_csrk; uint32_t local_counter; - } le_device_memory_db_t; #pragma pack (pop) diff --git a/bundles/noos_exp/inc/ll_api.h b/bundles/noos_exp/inc/ll_api.h index 3db416214..f26119df9 100644 --- a/bundles/noos_exp/inc/ll_api.h +++ b/bundles/noos_exp/inc/ll_api.h @@ -33,6 +33,25 @@ typedef enum ll_config_item_e LL_CFG_FEATURE_SET_MASK, } ll_config_item_t; +typedef struct ll_capabilities +{ + const uint8_t *features; // Link Layer features + uint16_t adv_set_num; // max number of advertising sets + uint16_t conn_num; // max number of connections + uint16_t whitelist_size; // size of whitelists + uint16_t resolving_list_size; // size of resolving list + uint16_t periodic_advertiser_list_size; // size of periodic advertiser list + uint16_t adv_dup_filter_size; // size of items for filtering + // advertising duplication +} ll_capabilities_t; + +/** + * @brief Get Link Layer capabilities. + * + * @param[out] capabilities see `ll_capabilities_t`. + */ +void ll_get_capabilities(ll_capabilities_t *capabilities); + /** **************************************************************************************** * @brief Config LL specific parameters @@ -43,6 +62,26 @@ typedef enum ll_config_item_e */ void ll_config(ll_config_item_t item, uint32_t value); +/** + **************************************************************************************** + * @brief Get states of LL + * + * Note: Parameters can be set to NULL if the relevant states are not needed. + * + * @param[out] adv_states[1] states of all advertising sets + * Bit[n]: advertising set n is enabled + * @param[out] conn_states[1] states of all connections + * Bit[n]: connection n is active + * @param[out] sync_states[1] states of all synchronized periodic adv sets + * Bit[n]: sync_handle n is active + * @param[out] other_states[1] other states: + * Bit[0]: if scanning is ON + * Bit[1]: if initiating is ON + **************************************************************************************** + */ +void ll_get_states(uint32_t *adv_states, uint32_t *conn_states, + uint32_t *sync_states, uint32_t *other_states); + /** **************************************************************************************** * @brief set Tx power range diff --git a/bundles/noos_exp/inc/platform_api.h b/bundles/noos_exp/inc/platform_api.h index bbc633bd3..5783c773e 100644 --- a/bundles/noos_exp/inc/platform_api.h +++ b/bundles/noos_exp/inc/platform_api.h @@ -113,7 +113,7 @@ typedef enum PLATFORM_CB_EVT_LLE_INIT, // when allocation on heap fails (heap out of memory) - // NOTE: param (void *data) is cased from an integer identifying which heap is OOM: + // NOTE: param (void *data) is casted from an integer identifying which heap is OOM: // * 0: FreeRTOS's heap; // * 1: Link Layer's heap; // * 2: Link Layer's task pool. @@ -327,7 +327,7 @@ typedef struct /** **************************************************************************************** - * @brief Get heap status + * @brief Get status of built-in RTOS's heap * * @param[out] status heap status **************************************************************************************** @@ -378,7 +378,7 @@ void platform_switch_app(const uint32_t app_addr); * in power saving mode. * * For ING918: the least FOUR significant bits of `value` are saved; - * For ING916: the least TWO significant bits of `value` are saved. + * For ING916: the least FIVE significant bits of `value` are saved. * * @param[in] value value **************************************************************************************** @@ -468,8 +468,13 @@ typedef enum PLATFORM_CFG_PS_DBG_4, // Debugging parameters for ING916. Default (0) // Bit [0]: `platform_shutdown` uses DEEPER SLEEP (1) or SLEEP (0) PLATFORM_CFG_FAST_DEEP_SLEEP_TIME_REDUCTION, // sleep time reduction (fast deep sleep mode) in us. - // Requirement: < PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION + // Requirement: <= PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION + // When equal to PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION, fast deep sleep mode is not used // Only available for ING916 (default: ~2000us) + PLATFORM_CFG_AUTO_REDUCE_CLOCK_FREQ, // automatic reduce CPU clock frequency in these circumstances: + // * the default IDLE procedure + // * when entering sleep modes + // Only available for ING916 (default: Enabled) } platform_cfg_item_t; typedef enum @@ -608,7 +613,15 @@ uint64_t platform_get_us_time(void); */ void platform_printf(const char *format, ...); -// NOTE: for debug only +/** + **************************************************************************************** + * @brief Set public device address + * + * NOTE: This is for debug only. + * + * @param[in] addr device address in little-endian. + **************************************************************************************** + */ void sysSetPublicDeviceAddr(const unsigned char *addr); // set rf source @@ -775,6 +788,55 @@ void platform_set_abs_timer(f_platform_timer_callback callback, uint32_t abs_tim */ void platform_delete_timer(f_platform_timer_callback callback); +typedef void * platform_us_timer_handle_t; + +/** + **************************************************************************************** + * @brief Callback function of microsecond (us) resolution timer + * + * @param[in] timer_handle handle of this timer + * @param[in] time_us internal timer counter when invoke this callback + * @param[in] param user parameter + * @return (must be NULL) + **************************************************************************************** + */ +typedef void * (* f_platform_us_timer_callback)(platform_us_timer_handle_t timer_handle, + uint64_t time_us, void *param); + +/** + **************************************************************************************** + * @brief Setup a single-shot platform timer with microsecond (us) resolution + * + * Although `abs_time` is in microsecond (us), callback is **not guaranteed** + * to be invoked with such resolution. + * + * This type of timers are much like `platform_set_timer`, except that: + * 1. resolution is higher; + * 2. callback is invoked in the context of an ISR. + * + * @param[in] abs_time when `platform_get_us_timer() == abs_time`, callback is invoked. + * @param[in] callback the callback function + * @param[in] param user parameter + * @return a non-NULL value when succeeded. Otherwise, NULL. + **************************************************************************************** + */ +platform_us_timer_handle_t platform_create_us_timer(uint64_t abs_time, + f_platform_us_timer_callback callback, void *param); + +/** + **************************************************************************************** + * @brief Cancel a platform timer previously created by `platform_create_us_timer` + * + * When a timer not needed any more, use this API to cancel it. + * + * @param[in] timer_handle handle of the timer + * @return 0 if succeeded else non-0 + * Note: non-0 means the callback function of the timer + * is executing. + **************************************************************************************** + */ +int platform_cancel_us_timer(platform_us_timer_handle_t timer_handle); + /** **************************************************************************************** * @brief Install a new RTOS stack for a specific platform task diff --git a/bundles/noos_exp/inc/sm.h b/bundles/noos_exp/inc/sm.h index 47c743c56..aa604be1b 100644 --- a/bundles/noos_exp/inc/sm.h +++ b/bundles/noos_exp/inc/sm.h @@ -55,14 +55,21 @@ typedef enum { /** * @brief Security configurations * + * These configurations can updated dynamically. Be careful: dynamically toggle + * `enable` will cause problems when SM is still working on any connection. + * + * After IRK/DHK are derived from `persistent`, `SM_EVENT_IRK_DHK_RESULT` is emitted. + * * @param[in] enable Enable (Bypass) SM (default: Disabled) * When disabled, SM can be enabled per connection by `sm_config_conn`. * @param[in] io_capability Default IO Capabilities * @param[in] request_security Let peripheral request an encrypted connection right after connecting * Not used normally. Bonding is triggered by access to protected attributes in ATT Server * @param[in] persistent persistent data for security & privacy + * @return 0 if ok else non-0. Possible causes for non-0 return value: + * * generation of internal keys(IRK/ERK) are under going. */ -void sm_config(uint8_t enable, +int sm_config(uint8_t enable, io_capability_t io_capability, int request_security, const sm_persistent_t *persistent); @@ -101,18 +108,69 @@ void sm_private_random_address_generation_set_update_period(int period_ms); const uint8_t *sm_private_random_address_generation_get(void); /** + * @brief Registers OOB Data Callback. + * + * The callback should set the oob_data and return 1 if OOB data is available. + * + * Signature of `get_oob_data_callback`: + * @param[in] address_type address type + * @param[in] addr address + * @param[out] oob_data OOB data (type `sm_key_t`) + * @return 1 if OOB data is available, else 0. * - * @brief Registers OOB Data Callback. The callback should set the oob_data and return 1 if OOB data is availble * @param get_oob_data_callback */ -void sm_register_oob_data_callback( int (*get_oob_data_callback)(uint8_t addres_type, bd_addr_t addr, uint8_t * oob_data)); +void sm_register_oob_data_callback( int (*get_oob_data_callback)(uint8_t address_type, bd_addr_t addr, uint8_t * oob_data)); /** + * @brief Registers secure pairing OOB Data Callback. * - * @brief Registers secure pairing OOB Data Callback. The callback should set the peer_confirm & peer_random and return 1 if OOB data is availble - * @param get_oob_data_callback + * The callback should set the peer_confirm & peer_random and return 1 + * if OOB data is available. + * + * Signature of `get_sc_oob_data_callback`: + * @param[in] address_type address type + * @param[in] addr address + * @param[out] peer_confirm peer confirm value (type `sm_key_t`) + * @param[out] peer_random peer random value (type `sm_key_t`) + * @return 1 if OOB data is available, else 0. + * + * @param get_sc_oob_data_callback */ -void sm_register_sc_oob_data_callback( int (*get_sc_oob_data_callback)(uint8_t addres_type, bd_addr_t addr, uint8_t *peer_confirm, uint8_t *peer_random)); +void sm_register_sc_oob_data_callback(int (*get_sc_oob_data_callback)(uint8_t address_type, bd_addr_t addr, uint8_t *peer_confirm, uint8_t *peer_random)); + +/** + * @brief (When secure pairing is used and OOB is selected) Start generate local + * OOB data (_confirm_ and _random_). + * + * After generated, _confirm_ and _random_ are passed to the callback. + * + * Each call of this function will generate a new P256 key pair that will used + * in **all** subsequent pairing attempts. When OOB is used, it is Developers's + * responsibility to refresh key pair properly. If OOB is not used, SM will + * re-generate a new key pair for each pairing attempt. + * + * BLUETOOTH CORE SPECIFICATION Version 5.4 | Vol 3, Part H, Section 2.3.6: + * + * > To protect a device's private key, a device should implement a method to + * > prevent an attacker from retrieving useful information about the device's private + * > key. For this purpose, a device should change its private key after every pairing + * > (successful or failed). Otherwise, it should change its private key whenever S + + * > 3F > 8, where S is the number of successful pairings and F the number of + * > failed attempts since the key was last changed. + * + * App can then pass these information together with device address to peer + * through OOB communication. + * + * Signature of `callback`: + * @param[out] confirm local confirm value (type `sm_key_t`) + * @param[out] random local random value (type `sm_key_t`) + * + * @param callback + * @return 0: started without error + * -1: previous OOB data is not generated yet + */ +int sm_sc_generate_oob_data(void (*callback)(const uint8_t *confirm, const uint8_t *random)); /** * @brief Limit the STK generation methods. Bonding is stopped if the resulting one isn't in the list @@ -231,12 +289,6 @@ int sm_le_device_key(hci_con_handle_t con_handle); */ void sm_numeric_comparison_confirm(hci_con_handle_t con_handle); -/** - * @brief When secure pairing is used and OOB is selected, use this function to prepare OOB data and share to peer. - * @param handle - */ -int sm_sc_generate_oob_data(void (*callback)(uint8_t *peer_confirm, uint8_t *peer_random)); - /** * * @brief Register a callback for get external LTK (for empty EDIV & Random) diff --git a/bundles/noos_extension/ING9168xx/apis.json b/bundles/noos_extension/ING9168xx/apis.json index a3cdcf47f..7f12253f2 100644 --- a/bundles/noos_extension/ING9168xx/apis.json +++ b/bundles/noos_extension/ING9168xx/apis.json @@ -1,300 +1,307 @@ { - "att_dispatch_client_can_send_now": "0x02004399", - "att_dispatch_client_request_can_send_now_event": "0x0200439f", - "att_dispatch_register_client": "0x020043a5", - "att_dispatch_register_server": "0x020043b9", - "att_dispatch_server_can_send_now": "0x020043cd", - "att_dispatch_server_request_can_send_now_event": "0x020043d3", - "att_emit_general_event": "0x02004485", - "att_server_can_send_packet_now": "0x02004bbd", - "att_server_deferred_read_response": "0x02004bc1", - "att_server_get_mtu": "0x02004bd9", - "att_server_indicate": "0x02004c51", - "att_server_init": "0x02004cd5", - "att_server_notify": "0x02004d11", - "att_server_register_packet_handler": "0x02004e29", - "att_server_request_can_send_now_event": "0x02004e35", - "att_set_db": "0x02004e51", - "att_set_read_callback": "0x02004e65", - "att_set_write_callback": "0x02004e71", - "bd_addr_cmp": "0x02005041", - "bd_addr_copy": "0x02005047", - "bd_addr_to_str": "0x02005051", - "big_endian_read_16": "0x02005089", - "big_endian_read_32": "0x02005091", - "big_endian_store_16": "0x020050a5", - "big_endian_store_32": "0x020050b1", - "btstack_config": "0x020051f5", - "btstack_memory_pool_create": "0x02005343", - "btstack_memory_pool_free": "0x0200536d", - "btstack_memory_pool_get": "0x020053cd", - "btstack_push_user_msg": "0x02005415", - "btstack_push_user_runnable": "0x02005421", - "btstack_reset": "0x0200542d", - "char_for_nibble": "0x0200573d", - "gap_add_dev_to_periodic_list": "0x02006129", - "gap_add_whitelist": "0x02006139", - "gap_aes_encrypt": "0x02006145", - "gap_clear_white_lists": "0x0200617d", - "gap_clr_adv_set": "0x02006189", - "gap_clr_periodic_adv_list": "0x02006195", - "gap_create_connection_cancel": "0x020061a1", - "gap_default_periodic_adv_sync_transfer_param": "0x020061ad", - "gap_disconnect": "0x020061c5", - "gap_disconnect_all": "0x020061f1", - "gap_ext_create_connection": "0x02006231", - "gap_get_connection_parameter_range": "0x02006309", - "gap_le_read_channel_map": "0x02006345", - "gap_periodic_adv_create_sync": "0x020063b1", - "gap_periodic_adv_create_sync_cancel": "0x020063d5", - "gap_periodic_adv_set_info_transfer": "0x020063e1", - "gap_periodic_adv_sync_transfer": "0x020063f1", - "gap_periodic_adv_sync_transfer_param": "0x02006401", - "gap_periodic_adv_term_sync": "0x0200641d", - "gap_read_antenna_info": "0x020064a5", - "gap_read_periodic_adv_list_size": "0x020064b1", - "gap_read_phy": "0x020064bd", - "gap_read_remote_used_features": "0x020064c9", - "gap_read_remote_version": "0x020064d5", - "gap_read_rssi": "0x020064e1", - "gap_remove_whitelist": "0x020064ed", - "gap_rmv_adv_set": "0x02006569", - "gap_rmv_dev_from_periodic_list": "0x02006575", - "gap_rx_test_v2": "0x02006585", - "gap_rx_test_v3": "0x02006595", - "gap_set_adv_set_random_addr": "0x020065e1", - "gap_set_callback_for_next_hci": "0x0200661d", - "gap_set_connection_cte_request_enable": "0x0200663d", - "gap_set_connection_cte_response_enable": "0x02006659", - "gap_set_connection_cte_rx_param": "0x02006669", - "gap_set_connection_cte_tx_param": "0x020066bd", - "gap_set_connection_parameter_range": "0x02006709", - "gap_set_connectionless_cte_tx_enable": "0x02006721", - "gap_set_connectionless_cte_tx_param": "0x02006731", - "gap_set_connectionless_iq_sampling_enable": "0x0200678d", - "gap_set_data_length": "0x020067e9", - "gap_set_def_phy": "0x02006801", - "gap_set_ext_adv_data": "0x02006811", - "gap_set_ext_adv_enable": "0x02006829", - "gap_set_ext_adv_para": "0x02006899", - "gap_set_ext_scan_enable": "0x02006969", - "gap_set_ext_scan_para": "0x02006981", - "gap_set_ext_scan_response_data": "0x02006a21", - "gap_set_host_channel_classification": "0x02006a39", - "gap_set_periodic_adv_data": "0x02006a49", - "gap_set_periodic_adv_enable": "0x02006ab9", - "gap_set_periodic_adv_para": "0x02006ac9", - "gap_set_periodic_adv_rx_enable": "0x02006ae1", - "gap_set_phy": "0x02006af1", - "gap_set_random_device_address": "0x02006b0d", - "gap_start_ccm": "0x02006b3d", - "gap_test_end": "0x02006b85", - "gap_tx_test_v2": "0x02006b91", - "gap_tx_test_v4": "0x02006ba9", - "gap_update_connection_parameters": "0x02006bcd", - "gap_vendor_tx_continuous_wave": "0x02006c11", - "gatt_client_cancel_write": "0x02007139", - "gatt_client_discover_characteristic_descriptors": "0x0200715f", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x0200719f", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x020071ef", - "gatt_client_discover_characteristics_for_service": "0x0200723f", - "gatt_client_discover_primary_services": "0x02007275", - "gatt_client_discover_primary_services_by_uuid128": "0x020072a7", - "gatt_client_discover_primary_services_by_uuid16": "0x020072eb", - "gatt_client_execute_write": "0x02007329", - "gatt_client_find_included_services_for_service": "0x0200734f", - "gatt_client_get_mtu": "0x0200737d", - "gatt_client_is_ready": "0x02007441", - "gatt_client_listen_for_characteristic_value_updates": "0x02007457", - "gatt_client_prepare_write": "0x02007479", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x020074b5", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x020074df", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x020074e5", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x02007513", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x02007519", - "gatt_client_read_multiple_characteristic_values": "0x02007547", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x02007577", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x020075a5", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x020075f1", - "gatt_client_register_handler": "0x0200763d", - "gatt_client_reliable_write_long_value_of_characteristic": "0x02007649", - "gatt_client_signed_write_without_response": "0x02007a7d", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x02007b41", - "gatt_client_write_client_characteristic_configuration": "0x02007b7b", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x02007bcd", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02007bdd", - "gatt_client_write_long_value_of_characteristic": "0x02007c19", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x02007c29", - "gatt_client_write_value_of_characteristic": "0x02007c65", - "gatt_client_write_value_of_characteristic_without_response": "0x02007c9b", - "hci_add_event_handler": "0x020092bd", - "hci_power_control": "0x02009a65", - "hci_register_acl_packet_handler": "0x02009c19", - "kv_commit": "0x0200a375", - "kv_get": "0x0200a3d1", - "kv_init": "0x0200a3dd", - "kv_init_backend": "0x0200a45d", - "kv_put": "0x0200a471", - "kv_remove": "0x0200a47d", - "kv_remove_all": "0x0200a4b1", - "kv_value_modified": "0x0200a4e1", - "kv_value_modified_of_key": "0x0200a4fd", - "kv_visit": "0x0200a509", - "l2cap_add_event_handler": "0x0200a599", - "l2cap_can_send_packet_now": "0x0200a5a9", - "l2cap_create_le_credit_based_connection_request": "0x0200a76d", - "l2cap_credit_based_send": "0x0200a8b5", - "l2cap_credit_based_send_continue": "0x0200a8e1", - "l2cap_disconnect": "0x0200a95d", - "l2cap_get_le_credit_based_connection_credits": "0x0200ab49", - "l2cap_get_peer_mtu_for_local_cid": "0x0200ab65", - "l2cap_init": "0x0200afa5", - "l2cap_le_send_flow_control_credit": "0x0200b09b", - "l2cap_max_le_mtu": "0x0200b3a9", - "l2cap_register_packet_handler": "0x0200b4d1", - "l2cap_register_service": "0x0200b4dd", - "l2cap_request_can_send_now_event": "0x0200b5ed", - "l2cap_request_connection_parameter_update": "0x0200b607", - "l2cap_send_echo_request": "0x0200bae9", - "l2cap_unregister_service": "0x0200bbc9", - "le_device_db_add": "0x0200bc21", - "le_device_db_find": "0x0200bcf9", - "le_device_db_from_key": "0x0200bd25", - "le_device_db_iter_cur": "0x0200bd2d", - "le_device_db_iter_cur_key": "0x0200bd31", - "le_device_db_iter_init": "0x0200bd35", - "le_device_db_iter_next": "0x0200bd3d", - "le_device_db_remove_key": "0x0200bd63", - "ll_ackable_packet_alloc": "0x0200bd8f", - "ll_ackable_packet_get_status": "0x0200becb", - "ll_ackable_packet_run": "0x0200bf39", - "ll_ackable_packet_set_tx_data": "0x0200bff1", - "ll_adjust_conn_peer_tx_power": "0x0200c00d", - "ll_aes_encrypt": "0x0200c039", - "ll_allow_nonstandard_adv_type": "0x0200c0ad", - "ll_attach_cte_to_adv_set": "0x0200c0c5", - "ll_channel_monitor_alloc": "0x0200c25d", - "ll_channel_monitor_check_each_pdu": "0x0200c2df", - "ll_channel_monitor_run": "0x0200c341", - "ll_config": "0x0200c411", - "ll_free": "0x0200c447", - "ll_get_conn_events_info": "0x0200c451", - "ll_get_conn_info": "0x0200c539", - "ll_get_heap_free_size": "0x0200c589", - "ll_hint_on_ce_len": "0x0200c59d", - "ll_legacy_adv_set_interval": "0x0200c5d5", - "ll_lock_frequency": "0x0200c5e5", - "ll_malloc": "0x0200c649", - "ll_override_whitening_init_value": "0x0200c651", - "ll_raw_packet_alloc": "0x0200c779", - "ll_raw_packet_free": "0x0200c84d", - "ll_raw_packet_get_bare_rx_data": "0x0200c885", - "ll_raw_packet_get_iq_samples": "0x0200c945", - "ll_raw_packet_get_rx_data": "0x0200c9df", - "ll_raw_packet_recv": "0x0200ca91", - "ll_raw_packet_send": "0x0200cb65", - "ll_raw_packet_set_bare_data": "0x0200cc81", - "ll_raw_packet_set_bare_mode": "0x0200ccbf", - "ll_raw_packet_set_fake_cte_info": "0x0200cdc3", - "ll_raw_packet_set_param": "0x0200cde5", - "ll_raw_packet_set_rx_cte": "0x0200ce47", - "ll_raw_packet_set_tx_cte": "0x0200cedd", - "ll_raw_packet_set_tx_data": "0x0200cf1d", - "ll_register_hci_acl_previewer": "0x0200cf85", - "ll_scan_set_fixed_channel": "0x0200cfe9", - "ll_scanner_enable_iq_sampling": "0x0200cff5", - "ll_scanner_enable_iq_sampling_on_legacy": "0x0200d09d", - "ll_set_adv_access_address": "0x0200d38d", - "ll_set_adv_coded_scheme": "0x0200d399", - "ll_set_conn_acl_report_latency": "0x0200d3d1", - "ll_set_conn_coded_scheme": "0x0200d401", - "ll_set_conn_interval_unit": "0x0200d42d", - "ll_set_conn_latency": "0x0200d439", - "ll_set_conn_tx_power": "0x0200d469", - "ll_set_cte_bit": "0x0200d499", - "ll_set_def_antenna": "0x0200d4c1", - "ll_set_initiating_coded_scheme": "0x0200d4e1", - "ll_set_max_conn_number": "0x0200d4ed", - "ll_set_tx_power_range": "0x0200d581", - "ll_unlock_frequency": "0x0200d5a9", - "nibble_for_char": "0x0202046d", - "platform_calibrate_rt_clk": "0x02020505", - "platform_call_on_stack": "0x0200213f", - "platform_config": "0x02020509", - "platform_controller_run": "0x02020631", - "platform_delete_timer": "0x02020665", - "platform_enable_irq": "0x0202066d", - "platform_get_gen_os_driver": "0x020206a1", - "platform_get_link_layer_interf": "0x020206ad", - "platform_get_task_handle": "0x020206b5", - "platform_get_timer_counter": "0x020206cd", - "platform_get_us_time": "0x020206d1", - "platform_get_version": "0x020206d5", - "platform_hrng": "0x020206dd", - "platform_init_controller": "0x020206e5", - "platform_os_idle_resumed_hook": "0x02020701", - "platform_patch_rf_init_data": "0x02020705", - "platform_post_sleep_processing": "0x02020711", - "platform_pre_sleep_processing": "0x02020717", - "platform_pre_suppress_ticks_and_sleep_processing": "0x0202071d", - "platform_printf": "0x02020721", - "platform_raise_assertion": "0x02020735", - "platform_rand": "0x02020749", - "platform_read_info": "0x0202074d", - "platform_read_persistent_reg": "0x0202077d", - "platform_reset": "0x02020789", - "platform_rt_rc_auto_tune": "0x0202079d", - "platform_rt_rc_auto_tune2": "0x020207a5", - "platform_rt_rc_tune": "0x0202080d", - "platform_set_abs_timer": "0x02020829", - "platform_set_evt_callback": "0x0202082d", - "platform_set_evt_callback_table": "0x02020841", - "platform_set_irq_callback": "0x0202084d", - "platform_set_irq_callback_table": "0x02020869", - "platform_set_rf_clk_source": "0x02020875", - "platform_set_rf_init_data": "0x02020881", - "platform_set_rf_power_mapping": "0x0202088d", - "platform_set_timer": "0x02020899", - "platform_shutdown": "0x0202089d", - "platform_switch_app": "0x020208a1", - "platform_trace_raw": "0x020208b9", - "platform_write_persistent_reg": "0x020208d1", - "printf_hexdump": "0x020208e5", - "reverse_128": "0x02020c5d", - "reverse_24": "0x02020c63", - "reverse_256": "0x02020c69", - "reverse_48": "0x02020c6f", - "reverse_56": "0x02020c75", - "reverse_64": "0x02020c7b", - "reverse_bd_addr": "0x02020c81", - "reverse_bytes": "0x02020c87", - "sm_add_event_handler": "0x02021015", - "sm_address_resolution_lookup": "0x0202116d", - "sm_authenticated": "0x020214e9", - "sm_authorization_decline": "0x020214f7", - "sm_authorization_grant": "0x02021517", - "sm_authorization_state": "0x02021537", - "sm_bonding_decline": "0x02021551", - "sm_config": "0x020219a5", - "sm_config_conn": "0x020219bd", - "sm_encryption_key_size": "0x02021b73", - "sm_just_works_confirm": "0x020220f9", - "sm_le_device_key": "0x02022431", - "sm_passkey_input": "0x020224c7", - "sm_private_random_address_generation_get": "0x02022881", - "sm_private_random_address_generation_get_mode": "0x02022889", - "sm_private_random_address_generation_set_mode": "0x02022895", - "sm_private_random_address_generation_set_update_period": "0x020228bd", - "sm_register_external_ltk_callback": "0x020229f9", - "sm_register_oob_data_callback": "0x02022a05", - "sm_request_pairing": "0x02022a11", - "sm_send_security_request": "0x020234e7", - "sm_set_accepted_stk_generation_methods": "0x0202350d", - "sm_set_authentication_requirements": "0x02023519", - "sm_set_encryption_key_size_range": "0x02023525", - "sscanf_bd_addr": "0x020238fd", - "sysSetPublicDeviceAddr": "0x02023e29", - "uuid128_to_str": "0x02024685", - "uuid_add_bluetooth_prefix": "0x020246dd", - "uuid_has_bluetooth_prefix": "0x020246fd" + "att_dispatch_client_can_send_now": "0x020052b1", + "att_dispatch_client_request_can_send_now_event": "0x020052b7", + "att_dispatch_register_client": "0x020052bd", + "att_dispatch_register_server": "0x020052d1", + "att_dispatch_server_can_send_now": "0x020052e5", + "att_dispatch_server_request_can_send_now_event": "0x020052eb", + "att_emit_general_event": "0x0200539d", + "att_server_can_send_packet_now": "0x02005ad9", + "att_server_deferred_read_response": "0x02005add", + "att_server_get_mtu": "0x02005af5", + "att_server_indicate": "0x02005b6d", + "att_server_init": "0x02005bf1", + "att_server_notify": "0x02005c2d", + "att_server_register_packet_handler": "0x02005d45", + "att_server_request_can_send_now_event": "0x02005d51", + "att_set_db": "0x02005d6d", + "att_set_read_callback": "0x02005d81", + "att_set_write_callback": "0x02005d8d", + "bd_addr_cmp": "0x02005f5d", + "bd_addr_copy": "0x02005f63", + "bd_addr_to_str": "0x02005f6d", + "big_endian_read_16": "0x02005fa5", + "big_endian_read_32": "0x02005fad", + "big_endian_store_16": "0x02005fc1", + "big_endian_store_32": "0x02005fcd", + "btstack_config": "0x02006111", + "btstack_get_capabilities": "0x0200611d", + "btstack_memory_pool_create": "0x02006277", + "btstack_memory_pool_free": "0x020062a1", + "btstack_memory_pool_get": "0x02006301", + "btstack_push_user_msg": "0x02006349", + "btstack_push_user_runnable": "0x02006355", + "btstack_reset": "0x02006361", + "char_for_nibble": "0x02006671", + "gap_add_dev_to_periodic_list": "0x02007049", + "gap_add_whitelist": "0x02007059", + "gap_aes_encrypt": "0x02007065", + "gap_clear_white_lists": "0x0200709d", + "gap_clr_adv_set": "0x020070a9", + "gap_clr_periodic_adv_list": "0x020070b5", + "gap_create_connection_cancel": "0x020070c1", + "gap_default_periodic_adv_sync_transfer_param": "0x020070cd", + "gap_disconnect": "0x020070e5", + "gap_disconnect2": "0x020070ed", + "gap_disconnect_all": "0x02007119", + "gap_ext_create_connection": "0x02007159", + "gap_get_connection_parameter_range": "0x02007231", + "gap_le_read_channel_map": "0x02007269", + "gap_periodic_adv_create_sync": "0x020072c9", + "gap_periodic_adv_create_sync_cancel": "0x020072ed", + "gap_periodic_adv_set_info_transfer": "0x020072f9", + "gap_periodic_adv_sync_transfer": "0x02007309", + "gap_periodic_adv_sync_transfer_param": "0x02007319", + "gap_periodic_adv_term_sync": "0x02007335", + "gap_read_antenna_info": "0x020073bd", + "gap_read_periodic_adv_list_size": "0x020073c9", + "gap_read_phy": "0x020073d5", + "gap_read_remote_used_features": "0x020073e1", + "gap_read_remote_version": "0x020073ed", + "gap_read_rssi": "0x020073f9", + "gap_read_white_lists_size": "0x02007405", + "gap_remove_whitelist": "0x02007411", + "gap_rmv_adv_set": "0x0200748d", + "gap_rmv_dev_from_periodic_list": "0x02007499", + "gap_rx_test_v2": "0x020074a9", + "gap_rx_test_v3": "0x020074b9", + "gap_set_adv_set_random_addr": "0x02007505", + "gap_set_callback_for_next_hci": "0x02007529", + "gap_set_connection_cte_request_enable": "0x02007549", + "gap_set_connection_cte_response_enable": "0x02007565", + "gap_set_connection_cte_rx_param": "0x02007575", + "gap_set_connection_cte_tx_param": "0x020075c9", + "gap_set_connection_parameter_range": "0x02007615", + "gap_set_connectionless_cte_tx_enable": "0x0200762d", + "gap_set_connectionless_cte_tx_param": "0x0200763d", + "gap_set_connectionless_iq_sampling_enable": "0x02007699", + "gap_set_data_length": "0x020076f5", + "gap_set_def_phy": "0x0200770d", + "gap_set_ext_adv_data": "0x0200771d", + "gap_set_ext_adv_enable": "0x02007735", + "gap_set_ext_adv_para": "0x020077a5", + "gap_set_ext_scan_enable": "0x02007865", + "gap_set_ext_scan_para": "0x0200787d", + "gap_set_ext_scan_response_data": "0x0200791d", + "gap_set_host_channel_classification": "0x02007935", + "gap_set_periodic_adv_data": "0x02007945", + "gap_set_periodic_adv_enable": "0x020079b5", + "gap_set_periodic_adv_para": "0x020079c5", + "gap_set_periodic_adv_rx_enable": "0x020079dd", + "gap_set_phy": "0x020079ed", + "gap_set_random_device_address": "0x02007a09", + "gap_start_ccm": "0x02007a25", + "gap_test_end": "0x02007a6d", + "gap_tx_test_v2": "0x02007a79", + "gap_tx_test_v4": "0x02007a91", + "gap_update_connection_parameters": "0x02007ab5", + "gap_vendor_tx_continuous_wave": "0x02007af9", + "gatt_client_cancel_write": "0x02008021", + "gatt_client_discover_characteristic_descriptors": "0x02008047", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x02008087", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x020080d7", + "gatt_client_discover_characteristics_for_service": "0x02008127", + "gatt_client_discover_primary_services": "0x0200815d", + "gatt_client_discover_primary_services_by_uuid128": "0x0200818f", + "gatt_client_discover_primary_services_by_uuid16": "0x020081d3", + "gatt_client_execute_write": "0x02008211", + "gatt_client_find_included_services_for_service": "0x02008237", + "gatt_client_get_mtu": "0x02008265", + "gatt_client_is_ready": "0x02008331", + "gatt_client_listen_for_characteristic_value_updates": "0x02008347", + "gatt_client_prepare_write": "0x02008369", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x020083a5", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x020083cf", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x020083d5", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x02008403", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x02008409", + "gatt_client_read_multiple_characteristic_values": "0x02008437", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x02008467", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x02008495", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x020084e1", + "gatt_client_register_handler": "0x0200852d", + "gatt_client_reliable_write_long_value_of_characteristic": "0x02008539", + "gatt_client_signed_write_without_response": "0x0200896d", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x02008a31", + "gatt_client_write_client_characteristic_configuration": "0x02008a6b", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x02008abd", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02008acd", + "gatt_client_write_long_value_of_characteristic": "0x02008b09", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x02008b19", + "gatt_client_write_value_of_characteristic": "0x02008b55", + "gatt_client_write_value_of_characteristic_without_response": "0x02008b8b", + "hci_add_event_handler": "0x0200a1bd", + "hci_power_control": "0x0200a961", + "hci_register_acl_packet_handler": "0x0200ab15", + "kv_commit": "0x0200b261", + "kv_get": "0x0200b2bd", + "kv_init": "0x0200b2c9", + "kv_init_backend": "0x0200b349", + "kv_put": "0x0200b35d", + "kv_remove": "0x0200b369", + "kv_remove_all": "0x0200b39d", + "kv_value_modified": "0x0200b3cd", + "kv_value_modified_of_key": "0x0200b3e9", + "kv_visit": "0x0200b3f5", + "l2cap_add_event_handler": "0x0200b485", + "l2cap_can_send_packet_now": "0x0200b495", + "l2cap_create_le_credit_based_connection_request": "0x0200b659", + "l2cap_credit_based_send": "0x0200b7a1", + "l2cap_credit_based_send_continue": "0x0200b7cd", + "l2cap_disconnect": "0x0200b849", + "l2cap_get_le_credit_based_connection_credits": "0x0200ba35", + "l2cap_get_peer_mtu_for_local_cid": "0x0200ba51", + "l2cap_init": "0x0200be91", + "l2cap_le_send_flow_control_credit": "0x0200bf87", + "l2cap_max_le_mtu": "0x0200c295", + "l2cap_register_packet_handler": "0x0200c3bd", + "l2cap_register_service": "0x0200c3c9", + "l2cap_request_can_send_now_event": "0x0200c4d9", + "l2cap_request_connection_parameter_update": "0x0200c4f3", + "l2cap_send_echo_request": "0x0200c9d5", + "l2cap_unregister_service": "0x0200cab5", + "le_device_db_add": "0x0200cb0d", + "le_device_db_find": "0x0200cbe5", + "le_device_db_from_key": "0x0200cc11", + "le_device_db_iter_cur": "0x0200cc19", + "le_device_db_iter_cur_key": "0x0200cc1d", + "le_device_db_iter_init": "0x0200cc21", + "le_device_db_iter_next": "0x0200cc29", + "le_device_db_remove_key": "0x0200cc4f", + "ll_ackable_packet_alloc": "0x0200cc7b", + "ll_ackable_packet_get_status": "0x0200cdb7", + "ll_ackable_packet_run": "0x0200ce25", + "ll_ackable_packet_set_tx_data": "0x0200cedd", + "ll_adjust_conn_peer_tx_power": "0x0200cef9", + "ll_aes_encrypt": "0x0200cf25", + "ll_allow_nonstandard_adv_type": "0x0200cf99", + "ll_attach_cte_to_adv_set": "0x0200cfb1", + "ll_channel_monitor_alloc": "0x0200d149", + "ll_channel_monitor_check_each_pdu": "0x0200d1cb", + "ll_channel_monitor_run": "0x0200d239", + "ll_config": "0x0200d309", + "ll_free": "0x0200d33f", + "ll_get_capabilities": "0x0200d349", + "ll_get_conn_events_info": "0x0200d365", + "ll_get_conn_info": "0x0200d44d", + "ll_get_heap_free_size": "0x0200d49d", + "ll_get_states": "0x0200d4ad", + "ll_hint_on_ce_len": "0x0200d569", + "ll_legacy_adv_set_interval": "0x0200d5a1", + "ll_lock_frequency": "0x0200d5b1", + "ll_malloc": "0x0200d615", + "ll_override_whitening_init_value": "0x0200d61d", + "ll_raw_packet_alloc": "0x0200d745", + "ll_raw_packet_free": "0x0200d819", + "ll_raw_packet_get_bare_rx_data": "0x0200d851", + "ll_raw_packet_get_iq_samples": "0x0200d911", + "ll_raw_packet_get_rx_data": "0x0200d9ab", + "ll_raw_packet_recv": "0x0200da5d", + "ll_raw_packet_send": "0x0200db31", + "ll_raw_packet_set_bare_data": "0x0200dc4d", + "ll_raw_packet_set_bare_mode": "0x0200dc8b", + "ll_raw_packet_set_fake_cte_info": "0x0200dd8f", + "ll_raw_packet_set_param": "0x0200ddb1", + "ll_raw_packet_set_rx_cte": "0x0200de13", + "ll_raw_packet_set_tx_cte": "0x0200dea9", + "ll_raw_packet_set_tx_data": "0x0200dee9", + "ll_register_hci_acl_previewer": "0x0200df51", + "ll_scan_set_fixed_channel": "0x0200dfb5", + "ll_scanner_enable_iq_sampling": "0x0200dfc1", + "ll_scanner_enable_iq_sampling_on_legacy": "0x0200e069", + "ll_set_adv_access_address": "0x0200e359", + "ll_set_adv_coded_scheme": "0x0200e365", + "ll_set_conn_acl_report_latency": "0x0200e39d", + "ll_set_conn_coded_scheme": "0x0200e3cd", + "ll_set_conn_interval_unit": "0x0200e3f9", + "ll_set_conn_latency": "0x0200e405", + "ll_set_conn_tx_power": "0x0200e435", + "ll_set_cte_bit": "0x0200e465", + "ll_set_def_antenna": "0x0200e48d", + "ll_set_initiating_coded_scheme": "0x0200e4ad", + "ll_set_max_conn_number": "0x0200e4b9", + "ll_set_tx_power_range": "0x0200e54d", + "ll_unlock_frequency": "0x0200e575", + "nibble_for_char": "0x02021465", + "platform_calibrate_rt_clk": "0x020214fd", + "platform_call_on_stack": "0x0200303f", + "platform_cancel_us_timer": "0x02021501", + "platform_config": "0x02021515", + "platform_controller_run": "0x02021649", + "platform_create_us_timer": "0x0202167d", + "platform_delete_timer": "0x02021691", + "platform_enable_irq": "0x02021699", + "platform_get_gen_os_driver": "0x020216cd", + "platform_get_link_layer_interf": "0x020216d9", + "platform_get_task_handle": "0x020216e1", + "platform_get_timer_counter": "0x020216f9", + "platform_get_us_time": "0x020216fd", + "platform_get_version": "0x02021701", + "platform_hrng": "0x0202171d", + "platform_init_controller": "0x02021725", + "platform_os_idle_resumed_hook": "0x02021741", + "platform_patch_rf_init_data": "0x02021745", + "platform_post_sleep_processing": "0x02021751", + "platform_pre_sleep_processing": "0x02021757", + "platform_pre_suppress_ticks_and_sleep_processing": "0x0202175d", + "platform_printf": "0x02021761", + "platform_raise_assertion": "0x02021775", + "platform_rand": "0x02021789", + "platform_read_info": "0x0202178d", + "platform_read_persistent_reg": "0x020217bd", + "platform_reset": "0x020217dd", + "platform_rt_rc_auto_tune": "0x020217f1", + "platform_rt_rc_auto_tune2": "0x020217f9", + "platform_rt_rc_tune": "0x02021859", + "platform_set_abs_timer": "0x02021885", + "platform_set_evt_callback": "0x02021889", + "platform_set_evt_callback_table": "0x0202189d", + "platform_set_irq_callback": "0x020218a9", + "platform_set_irq_callback_table": "0x020218c5", + "platform_set_rf_clk_source": "0x020218d1", + "platform_set_rf_init_data": "0x020218dd", + "platform_set_rf_power_mapping": "0x020218e9", + "platform_set_timer": "0x020218f5", + "platform_shutdown": "0x020218f9", + "platform_switch_app": "0x020218fd", + "platform_trace_raw": "0x02021915", + "platform_write_persistent_reg": "0x0202192d", + "printf_hexdump": "0x02021961", + "reverse_128": "0x02021cd9", + "reverse_24": "0x02021cdf", + "reverse_256": "0x02021ce5", + "reverse_48": "0x02021ceb", + "reverse_56": "0x02021cf1", + "reverse_64": "0x02021cf7", + "reverse_bd_addr": "0x02021cfd", + "reverse_bytes": "0x02021d03", + "sm_add_event_handler": "0x02022091", + "sm_address_resolution_lookup": "0x020221e9", + "sm_authenticated": "0x02022591", + "sm_authorization_decline": "0x0202259f", + "sm_authorization_grant": "0x020225bf", + "sm_authorization_state": "0x020225df", + "sm_bonding_decline": "0x020225f9", + "sm_config": "0x02022a4d", + "sm_config_conn": "0x02022a81", + "sm_encryption_key_size": "0x02022c3b", + "sm_just_works_confirm": "0x020231c1", + "sm_le_device_key": "0x02023501", + "sm_passkey_input": "0x02023597", + "sm_private_random_address_generation_get": "0x02023959", + "sm_private_random_address_generation_get_mode": "0x02023961", + "sm_private_random_address_generation_set_mode": "0x0202396d", + "sm_private_random_address_generation_set_update_period": "0x02023995", + "sm_register_external_ltk_callback": "0x02023ad1", + "sm_register_oob_data_callback": "0x02023add", + "sm_request_pairing": "0x02023ae9", + "sm_send_security_request": "0x020245c7", + "sm_set_accepted_stk_generation_methods": "0x020245ed", + "sm_set_authentication_requirements": "0x020245f9", + "sm_set_encryption_key_size_range": "0x02024609", + "sscanf_bd_addr": "0x020249d1", + "sysSetPublicDeviceAddr": "0x02024f2d", + "uuid128_to_str": "0x0202579d", + "uuid_add_bluetooth_prefix": "0x020257f5", + "uuid_has_bluetooth_prefix": "0x02025815" } \ No newline at end of file diff --git a/bundles/noos_extension/ING9168xx/meta.json b/bundles/noos_extension/ING9168xx/meta.json index 78c4c15a0..88689eddc 100644 --- a/bundles/noos_extension/ING9168xx/meta.json +++ b/bundles/noos_extension/ING9168xx/meta.json @@ -1,18 +1,24 @@ { "app": { - "base": 33714176 + "base": 33718272 }, "ram": { "base": 536870912, - "size": 3244 + "size": 3188 }, "rom": { "base": 33562624, - "size": 150436 + "size": 154824 + }, + "var": { + "link_layer_features": { + "addr": 33709212, + "value": "bf79ff07fe000000" + } }, "version": [ 2, 3, - 1 + 18 ] } \ No newline at end of file diff --git a/bundles/noos_extension/ING9168xx/platform.bin b/bundles/noos_extension/ING9168xx/platform.bin index ef686bd49..852ab9e37 100644 Binary files a/bundles/noos_extension/ING9168xx/platform.bin and b/bundles/noos_extension/ING9168xx/platform.bin differ diff --git a/bundles/noos_extension/ING9187xx/apis.json b/bundles/noos_extension/ING9187xx/apis.json index ad1c7cdd4..7305f8fbd 100644 --- a/bundles/noos_extension/ING9187xx/apis.json +++ b/bundles/noos_extension/ING9187xx/apis.json @@ -6,44 +6,46 @@ "att_dispatch_server_can_send_now": "0x000056d9", "att_dispatch_server_request_can_send_now_event": "0x000056df", "att_emit_general_event": "0x00005791", - "att_server_can_send_packet_now": "0x00005ec1", - "att_server_deferred_read_response": "0x00005ec5", - "att_server_get_mtu": "0x00005edd", - "att_server_indicate": "0x00005f55", - "att_server_init": "0x00005fd9", - "att_server_notify": "0x00006015", - "att_server_register_packet_handler": "0x0000612d", - "att_server_request_can_send_now_event": "0x00006139", - "att_set_db": "0x00006155", - "att_set_read_callback": "0x00006169", - "att_set_write_callback": "0x00006175", - "bd_addr_cmp": "0x000062e5", - "bd_addr_copy": "0x000062eb", - "bd_addr_to_str": "0x000062f5", - "big_endian_read_16": "0x0000632d", - "big_endian_read_32": "0x00006335", - "big_endian_store_16": "0x00006349", - "big_endian_store_32": "0x00006355", - "btstack_config": "0x0000648d", - "btstack_memory_pool_create": "0x000065db", - "btstack_memory_pool_free": "0x00006605", - "btstack_memory_pool_get": "0x00006665", - "btstack_push_user_msg": "0x000066ad", - "btstack_push_user_runnable": "0x000066b9", - "btstack_reset": "0x000066c5", - "char_for_nibble": "0x00006989", - "gap_add_dev_to_periodic_list": "0x00007231", - "gap_add_whitelist": "0x00007241", - "gap_aes_encrypt": "0x0000724d", - "gap_clear_white_lists": "0x00007285", - "gap_clr_adv_set": "0x00007291", - "gap_clr_periodic_adv_list": "0x0000729d", - "gap_create_connection_cancel": "0x000072a9", - "gap_disconnect": "0x000072b5", - "gap_disconnect_all": "0x000072e1", - "gap_ext_create_connection": "0x00007321", - "gap_get_connection_parameter_range": "0x000073f9", - "gap_le_read_channel_map": "0x00007435", + "att_server_can_send_packet_now": "0x00005ec5", + "att_server_deferred_read_response": "0x00005ec9", + "att_server_get_mtu": "0x00005ee1", + "att_server_indicate": "0x00005f59", + "att_server_init": "0x00005fdd", + "att_server_notify": "0x00006019", + "att_server_register_packet_handler": "0x00006131", + "att_server_request_can_send_now_event": "0x0000613d", + "att_set_db": "0x00006159", + "att_set_read_callback": "0x0000616d", + "att_set_write_callback": "0x00006179", + "bd_addr_cmp": "0x000062e9", + "bd_addr_copy": "0x000062ef", + "bd_addr_to_str": "0x000062f9", + "big_endian_read_16": "0x00006331", + "big_endian_read_32": "0x00006339", + "big_endian_store_16": "0x0000634d", + "big_endian_store_32": "0x00006359", + "btstack_config": "0x00006491", + "btstack_get_capabilities": "0x0000649d", + "btstack_memory_pool_create": "0x000065f7", + "btstack_memory_pool_free": "0x00006621", + "btstack_memory_pool_get": "0x00006681", + "btstack_push_user_msg": "0x000066c9", + "btstack_push_user_runnable": "0x000066d5", + "btstack_reset": "0x000066e1", + "char_for_nibble": "0x000069a5", + "gap_add_dev_to_periodic_list": "0x00007239", + "gap_add_whitelist": "0x00007249", + "gap_aes_encrypt": "0x00007255", + "gap_clear_white_lists": "0x0000728d", + "gap_clr_adv_set": "0x00007299", + "gap_clr_periodic_adv_list": "0x000072a5", + "gap_create_connection_cancel": "0x000072b1", + "gap_disconnect": "0x000072bd", + "gap_disconnect2": "0x000072c5", + "gap_disconnect_all": "0x000072f1", + "gap_ext_create_connection": "0x00007331", + "gap_get_connection_parameter_range": "0x00007409", + "gap_le_read_channel_map": "0x00007441", "gap_periodic_adv_create_sync": "0x000074a1", "gap_periodic_adv_create_sync_cancel": "0x000074c5", "gap_periodic_adv_term_sync": "0x000074d1", @@ -52,222 +54,227 @@ "gap_read_remote_used_features": "0x00007571", "gap_read_remote_version": "0x0000757d", "gap_read_rssi": "0x00007589", - "gap_remove_whitelist": "0x00007595", - "gap_rmv_adv_set": "0x00007611", - "gap_rmv_dev_from_periodic_list": "0x0000761d", - "gap_rx_test_v2": "0x0000762d", - "gap_set_adv_set_random_addr": "0x00007665", - "gap_set_callback_for_next_hci": "0x000076a1", - "gap_set_connection_parameter_range": "0x000076c1", - "gap_set_data_length": "0x000076d9", - "gap_set_def_phy": "0x000076f1", - "gap_set_ext_adv_data": "0x00007701", - "gap_set_ext_adv_enable": "0x00007719", - "gap_set_ext_adv_para": "0x00007789", - "gap_set_ext_scan_enable": "0x00007861", - "gap_set_ext_scan_para": "0x00007879", - "gap_set_ext_scan_response_data": "0x00007919", - "gap_set_host_channel_classification": "0x00007931", - "gap_set_periodic_adv_data": "0x00007941", - "gap_set_periodic_adv_enable": "0x000079b1", - "gap_set_periodic_adv_para": "0x000079c1", - "gap_set_phy": "0x000079d9", - "gap_set_random_device_address": "0x000079f5", - "gap_start_ccm": "0x00007a25", - "gap_test_end": "0x00007a6d", - "gap_tx_test_v2": "0x00007a79", - "gap_tx_test_v4": "0x00007a91", - "gap_update_connection_parameters": "0x00007ab5", - "gap_vendor_tx_continuous_wave": "0x00007af9", - "gatt_client_cancel_write": "0x00008021", - "gatt_client_discover_characteristic_descriptors": "0x00008047", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x00008087", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x000080d7", - "gatt_client_discover_characteristics_for_service": "0x00008127", - "gatt_client_discover_primary_services": "0x0000815d", - "gatt_client_discover_primary_services_by_uuid128": "0x0000818f", - "gatt_client_discover_primary_services_by_uuid16": "0x000081d3", - "gatt_client_execute_write": "0x0000820f", - "gatt_client_find_included_services_for_service": "0x00008235", - "gatt_client_get_mtu": "0x00008263", - "gatt_client_is_ready": "0x00008305", - "gatt_client_listen_for_characteristic_value_updates": "0x0000831b", - "gatt_client_prepare_write": "0x0000833d", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x00008379", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x000083a3", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x000083a9", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x000083d7", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x000083dd", - "gatt_client_read_multiple_characteristic_values": "0x0000840b", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x0000843b", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x00008469", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x000084b5", - "gatt_client_register_handler": "0x00008501", - "gatt_client_reliable_write_long_value_of_characteristic": "0x0000850d", - "gatt_client_signed_write_without_response": "0x0000893d", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008a01", - "gatt_client_write_client_characteristic_configuration": "0x00008a3b", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008a8d", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008a9d", - "gatt_client_write_long_value_of_characteristic": "0x00008ad9", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008ae9", - "gatt_client_write_value_of_characteristic": "0x00008b25", - "gatt_client_write_value_of_characteristic_without_response": "0x00008b5b", - "hci_add_event_handler": "0x0000a081", - "hci_power_control": "0x0000a821", - "hci_register_acl_packet_handler": "0x0000a9d5", - "kv_commit": "0x0000b171", - "kv_get": "0x0000b1cd", - "kv_init": "0x0000b1d9", - "kv_init_backend": "0x0000b259", - "kv_put": "0x0000b26d", - "kv_remove": "0x0000b279", - "kv_remove_all": "0x0000b2ad", - "kv_value_modified": "0x0000b2dd", - "kv_value_modified_of_key": "0x0000b2f9", - "kv_visit": "0x0000b305", - "l2cap_add_event_handler": "0x0000b395", - "l2cap_can_send_packet_now": "0x0000b3a5", - "l2cap_create_le_credit_based_connection_request": "0x0000b561", - "l2cap_credit_based_send": "0x0000b6a5", - "l2cap_credit_based_send_continue": "0x0000b6d1", - "l2cap_disconnect": "0x0000b74d", - "l2cap_get_le_credit_based_connection_credits": "0x0000b99d", - "l2cap_get_peer_mtu_for_local_cid": "0x0000b9b9", - "l2cap_init": "0x0000bd8d", - "l2cap_le_send_flow_control_credit": "0x0000be83", - "l2cap_max_le_mtu": "0x0000c18d", - "l2cap_register_packet_handler": "0x0000c2b5", - "l2cap_register_service": "0x0000c2c1", - "l2cap_request_can_send_now_event": "0x0000c3d1", - "l2cap_request_connection_parameter_update": "0x0000c3eb", - "l2cap_send_echo_request": "0x0000c8c5", - "l2cap_unregister_service": "0x0000c985", - "le_device_db_add": "0x0000c9dd", - "le_device_db_find": "0x0000cab5", - "le_device_db_from_key": "0x0000cae1", - "le_device_db_iter_cur": "0x0000cae9", - "le_device_db_iter_cur_key": "0x0000caed", - "le_device_db_iter_init": "0x0000caf1", - "le_device_db_iter_next": "0x0000caf9", - "le_device_db_remove_key": "0x0000cb1f", - "ll_ackable_packet_alloc": "0x0000cb4b", - "ll_ackable_packet_get_status": "0x0000cc7d", - "ll_ackable_packet_run": "0x0000cced", - "ll_ackable_packet_set_tx_data": "0x0000cd89", - "ll_aes_encrypt": "0x0000cda5", - "ll_channel_monitor_alloc": "0x0000ce21", - "ll_channel_monitor_check_each_pdu": "0x0000cea3", - "ll_channel_monitor_run": "0x0000cf09", - "ll_config": "0x0000cfbd", - "ll_free": "0x0000cff3", - "ll_get_heap_free_size": "0x0000cffd", - "ll_hint_on_ce_len": "0x0000d011", - "ll_legacy_adv_set_interval": "0x0000d049", - "ll_lock_frequency": "0x0000d059", - "ll_malloc": "0x0000d0bd", - "ll_query_timing_info": "0x0000d1f5", - "ll_raw_packet_alloc": "0x0000d241", - "ll_raw_packet_free": "0x0000d315", - "ll_raw_packet_get_bare_rx_data": "0x0000d34d", - "ll_raw_packet_get_rx_data": "0x0000d413", - "ll_raw_packet_recv": "0x0000d4b5", - "ll_raw_packet_send": "0x0000d571", - "ll_raw_packet_set_bare_data": "0x0000d659", - "ll_raw_packet_set_bare_mode": "0x0000d697", - "ll_raw_packet_set_param": "0x0000d79d", - "ll_raw_packet_set_tx_data": "0x0000d7fb", - "ll_register_hci_acl_previewer": "0x0000d861", - "ll_scan_set_fixed_channel": "0x0000d8c5", - "ll_set_adv_access_address": "0x0000dadd", - "ll_set_adv_coded_scheme": "0x0000dae9", - "ll_set_conn_acl_report_latency": "0x0000db19", - "ll_set_conn_coded_scheme": "0x0000db49", - "ll_set_conn_interval_unit": "0x0000db75", - "ll_set_conn_latency": "0x0000db81", - "ll_set_conn_tx_power": "0x0000dbb1", - "ll_set_def_antenna": "0x0000dbf9", - "ll_set_initiating_coded_scheme": "0x0000dc15", - "ll_set_max_conn_number": "0x0000dc21", - "ll_unlock_frequency": "0x0000dcb5", - "nibble_for_char": "0x0001df69", - "platform_calibrate_rt_clk": "0x0001e003", + "gap_read_white_lists_size": "0x00007595", + "gap_remove_whitelist": "0x000075a1", + "gap_rmv_adv_set": "0x0000761d", + "gap_rmv_dev_from_periodic_list": "0x00007629", + "gap_rx_test_v2": "0x00007639", + "gap_set_adv_set_random_addr": "0x00007671", + "gap_set_callback_for_next_hci": "0x00007695", + "gap_set_connection_parameter_range": "0x000076b5", + "gap_set_data_length": "0x000076cd", + "gap_set_def_phy": "0x000076e5", + "gap_set_ext_adv_data": "0x000076f5", + "gap_set_ext_adv_enable": "0x0000770d", + "gap_set_ext_adv_para": "0x0000777d", + "gap_set_ext_scan_enable": "0x00007845", + "gap_set_ext_scan_para": "0x0000785d", + "gap_set_ext_scan_response_data": "0x000078fd", + "gap_set_host_channel_classification": "0x00007915", + "gap_set_periodic_adv_data": "0x00007925", + "gap_set_periodic_adv_enable": "0x00007995", + "gap_set_periodic_adv_para": "0x000079a5", + "gap_set_phy": "0x000079bd", + "gap_set_random_device_address": "0x000079d9", + "gap_start_ccm": "0x000079f5", + "gap_test_end": "0x00007a3d", + "gap_tx_test_v2": "0x00007a49", + "gap_tx_test_v4": "0x00007a61", + "gap_update_connection_parameters": "0x00007a85", + "gap_vendor_tx_continuous_wave": "0x00007ac9", + "gatt_client_cancel_write": "0x00007ff1", + "gatt_client_discover_characteristic_descriptors": "0x00008017", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x00008057", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x000080a7", + "gatt_client_discover_characteristics_for_service": "0x000080f7", + "gatt_client_discover_primary_services": "0x0000812d", + "gatt_client_discover_primary_services_by_uuid128": "0x0000815f", + "gatt_client_discover_primary_services_by_uuid16": "0x000081a3", + "gatt_client_execute_write": "0x000081df", + "gatt_client_find_included_services_for_service": "0x00008205", + "gatt_client_get_mtu": "0x00008233", + "gatt_client_is_ready": "0x000082dd", + "gatt_client_listen_for_characteristic_value_updates": "0x000082f3", + "gatt_client_prepare_write": "0x00008315", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x00008351", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x0000837b", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008381", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x000083af", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x000083b5", + "gatt_client_read_multiple_characteristic_values": "0x000083e3", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x00008413", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x00008441", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x0000848d", + "gatt_client_register_handler": "0x000084d9", + "gatt_client_reliable_write_long_value_of_characteristic": "0x000084e5", + "gatt_client_signed_write_without_response": "0x00008915", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x000089d9", + "gatt_client_write_client_characteristic_configuration": "0x00008a13", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008a65", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008a75", + "gatt_client_write_long_value_of_characteristic": "0x00008ab1", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008ac1", + "gatt_client_write_value_of_characteristic": "0x00008afd", + "gatt_client_write_value_of_characteristic_without_response": "0x00008b33", + "hci_add_event_handler": "0x0000a051", + "hci_power_control": "0x0000a7ed", + "hci_register_acl_packet_handler": "0x0000a9a1", + "kv_commit": "0x0000b12d", + "kv_get": "0x0000b189", + "kv_init": "0x0000b195", + "kv_init_backend": "0x0000b215", + "kv_put": "0x0000b229", + "kv_remove": "0x0000b235", + "kv_remove_all": "0x0000b269", + "kv_value_modified": "0x0000b299", + "kv_value_modified_of_key": "0x0000b2b5", + "kv_visit": "0x0000b2c1", + "l2cap_add_event_handler": "0x0000b351", + "l2cap_can_send_packet_now": "0x0000b361", + "l2cap_create_le_credit_based_connection_request": "0x0000b51d", + "l2cap_credit_based_send": "0x0000b661", + "l2cap_credit_based_send_continue": "0x0000b68d", + "l2cap_disconnect": "0x0000b709", + "l2cap_get_le_credit_based_connection_credits": "0x0000b959", + "l2cap_get_peer_mtu_for_local_cid": "0x0000b975", + "l2cap_init": "0x0000bd49", + "l2cap_le_send_flow_control_credit": "0x0000be3f", + "l2cap_max_le_mtu": "0x0000c149", + "l2cap_register_packet_handler": "0x0000c271", + "l2cap_register_service": "0x0000c27d", + "l2cap_request_can_send_now_event": "0x0000c38d", + "l2cap_request_connection_parameter_update": "0x0000c3a7", + "l2cap_send_echo_request": "0x0000c881", + "l2cap_unregister_service": "0x0000c941", + "le_device_db_add": "0x0000c999", + "le_device_db_find": "0x0000ca71", + "le_device_db_from_key": "0x0000ca9d", + "le_device_db_iter_cur": "0x0000caa5", + "le_device_db_iter_cur_key": "0x0000caa9", + "le_device_db_iter_init": "0x0000caad", + "le_device_db_iter_next": "0x0000cab5", + "le_device_db_remove_key": "0x0000cadb", + "ll_ackable_packet_alloc": "0x0000cb07", + "ll_ackable_packet_get_status": "0x0000cc39", + "ll_ackable_packet_run": "0x0000cca9", + "ll_ackable_packet_set_tx_data": "0x0000cd45", + "ll_aes_encrypt": "0x0000cd61", + "ll_channel_monitor_alloc": "0x0000cddd", + "ll_channel_monitor_check_each_pdu": "0x0000ce5f", + "ll_channel_monitor_run": "0x0000cecd", + "ll_config": "0x0000cf81", + "ll_free": "0x0000cfb7", + "ll_get_capabilities": "0x0000cfc1", + "ll_get_heap_free_size": "0x0000cfe1", + "ll_get_states": "0x0000cff1", + "ll_hint_on_ce_len": "0x0000d0ad", + "ll_legacy_adv_set_interval": "0x0000d0e5", + "ll_lock_frequency": "0x0000d0f5", + "ll_malloc": "0x0000d159", + "ll_query_timing_info": "0x0000d291", + "ll_raw_packet_alloc": "0x0000d2dd", + "ll_raw_packet_free": "0x0000d3b1", + "ll_raw_packet_get_bare_rx_data": "0x0000d3e9", + "ll_raw_packet_get_rx_data": "0x0000d4af", + "ll_raw_packet_recv": "0x0000d551", + "ll_raw_packet_send": "0x0000d60d", + "ll_raw_packet_set_bare_data": "0x0000d6f5", + "ll_raw_packet_set_bare_mode": "0x0000d733", + "ll_raw_packet_set_param": "0x0000d839", + "ll_raw_packet_set_tx_data": "0x0000d897", + "ll_register_hci_acl_previewer": "0x0000d8fd", + "ll_scan_set_fixed_channel": "0x0000d961", + "ll_set_adv_access_address": "0x0000db79", + "ll_set_adv_coded_scheme": "0x0000db85", + "ll_set_conn_acl_report_latency": "0x0000dbb5", + "ll_set_conn_coded_scheme": "0x0000dbe5", + "ll_set_conn_interval_unit": "0x0000dc11", + "ll_set_conn_latency": "0x0000dc1d", + "ll_set_conn_tx_power": "0x0000dc4d", + "ll_set_def_antenna": "0x0000dc95", + "ll_set_initiating_coded_scheme": "0x0000dcb1", + "ll_set_max_conn_number": "0x0000dcbd", + "ll_unlock_frequency": "0x0000dd51", + "nibble_for_char": "0x0001e005", + "platform_calibrate_rt_clk": "0x0001e09f", "platform_call_on_stack": "0x000040ef", - "platform_config": "0x0001e009", - "platform_controller_run": "0x0001e12d", - "platform_delete_timer": "0x0001e161", - "platform_enable_irq": "0x0001e169", - "platform_get_gen_os_driver": "0x0001e1a1", - "platform_get_link_layer_interf": "0x0001e1ad", - "platform_get_task_handle": "0x0001e1b5", - "platform_get_timer_counter": "0x0001e1cd", - "platform_get_us_time": "0x0001e1d1", - "platform_get_version": "0x0001e1d5", - "platform_hrng": "0x0001e1dd", - "platform_init_controller": "0x0001e1e5", - "platform_os_idle_resumed_hook": "0x0001e201", - "platform_patch_rf_init_data": "0x0001e205", - "platform_post_sleep_processing": "0x0001e211", - "platform_pre_sleep_processing": "0x0001e217", - "platform_pre_suppress_ticks_and_sleep_processing": "0x0001e21d", - "platform_printf": "0x0001e221", - "platform_raise_assertion": "0x0001e235", - "platform_rand": "0x0001e249", - "platform_read_info": "0x0001e24d", - "platform_read_persistent_reg": "0x0001e27d", - "platform_reset": "0x0001e28d", - "platform_rt_rc_auto_tune": "0x0001e2b1", - "platform_rt_rc_auto_tune2": "0x0001e2b9", - "platform_rt_rc_tune": "0x0001e341", - "platform_set_abs_timer": "0x0001e355", - "platform_set_evt_callback": "0x0001e359", - "platform_set_evt_callback_table": "0x0001e36d", - "platform_set_irq_callback": "0x0001e379", - "platform_set_irq_callback_table": "0x0001e395", - "platform_set_rf_clk_source": "0x0001e3a1", - "platform_set_rf_init_data": "0x0001e3ad", - "platform_set_rf_power_mapping": "0x0001e3b9", - "platform_set_timer": "0x0001e3c5", - "platform_shutdown": "0x0001e3c9", - "platform_switch_app": "0x0001e3cd", - "platform_trace_raw": "0x0001e3f9", - "platform_write_persistent_reg": "0x0001e411", - "printf_hexdump": "0x0001e421", - "reverse_128": "0x0001e761", - "reverse_24": "0x0001e767", - "reverse_256": "0x0001e76d", - "reverse_48": "0x0001e773", - "reverse_56": "0x0001e779", - "reverse_64": "0x0001e77f", - "reverse_bd_addr": "0x0001e785", - "reverse_bytes": "0x0001e78b", - "sm_add_event_handler": "0x0001e959", - "sm_address_resolution_lookup": "0x0001eab1", - "sm_authenticated": "0x0001ee2d", - "sm_authorization_decline": "0x0001ee3b", - "sm_authorization_grant": "0x0001ee5b", - "sm_authorization_state": "0x0001ee7b", - "sm_bonding_decline": "0x0001ee95", - "sm_config": "0x0001f2f1", - "sm_config_conn": "0x0001f309", - "sm_encryption_key_size": "0x0001f4bf", - "sm_just_works_confirm": "0x0001fa45", - "sm_le_device_key": "0x0001fd7d", - "sm_passkey_input": "0x0001fe13", - "sm_private_random_address_generation_get": "0x000201cd", - "sm_private_random_address_generation_get_mode": "0x000201d5", - "sm_private_random_address_generation_set_mode": "0x000201e1", - "sm_private_random_address_generation_set_update_period": "0x00020209", - "sm_register_external_ltk_callback": "0x00020345", - "sm_register_oob_data_callback": "0x00020351", - "sm_request_pairing": "0x0002035d", - "sm_send_security_request": "0x00020e33", - "sm_set_accepted_stk_generation_methods": "0x00020e59", - "sm_set_authentication_requirements": "0x00020e65", - "sm_set_encryption_key_size_range": "0x00020e71", - "sscanf_bd_addr": "0x00021241", - "sysSetPublicDeviceAddr": "0x000215f5", - "uuid128_to_str": "0x00021c09", - "uuid_add_bluetooth_prefix": "0x00021c61", - "uuid_has_bluetooth_prefix": "0x00021c81" + "platform_cancel_us_timer": "0x0001e0a3", + "platform_config": "0x0001e0b9", + "platform_controller_run": "0x0001e1dd", + "platform_create_us_timer": "0x0001e211", + "platform_delete_timer": "0x0001e225", + "platform_enable_irq": "0x0001e22d", + "platform_get_gen_os_driver": "0x0001e265", + "platform_get_link_layer_interf": "0x0001e271", + "platform_get_task_handle": "0x0001e279", + "platform_get_timer_counter": "0x0001e291", + "platform_get_us_time": "0x0001e295", + "platform_get_version": "0x0001e299", + "platform_hrng": "0x0001e2a1", + "platform_init_controller": "0x0001e2a9", + "platform_os_idle_resumed_hook": "0x0001e2c5", + "platform_patch_rf_init_data": "0x0001e2c9", + "platform_post_sleep_processing": "0x0001e2d5", + "platform_pre_sleep_processing": "0x0001e2db", + "platform_pre_suppress_ticks_and_sleep_processing": "0x0001e2e1", + "platform_printf": "0x0001e2e5", + "platform_raise_assertion": "0x0001e2f9", + "platform_rand": "0x0001e30d", + "platform_read_info": "0x0001e311", + "platform_read_persistent_reg": "0x0001e341", + "platform_reset": "0x0001e351", + "platform_rt_rc_auto_tune": "0x0001e375", + "platform_rt_rc_auto_tune2": "0x0001e37d", + "platform_rt_rc_tune": "0x0001e3f9", + "platform_set_abs_timer": "0x0001e41d", + "platform_set_evt_callback": "0x0001e421", + "platform_set_evt_callback_table": "0x0001e435", + "platform_set_irq_callback": "0x0001e441", + "platform_set_irq_callback_table": "0x0001e45d", + "platform_set_rf_clk_source": "0x0001e469", + "platform_set_rf_init_data": "0x0001e475", + "platform_set_rf_power_mapping": "0x0001e481", + "platform_set_timer": "0x0001e48d", + "platform_shutdown": "0x0001e491", + "platform_switch_app": "0x0001e495", + "platform_trace_raw": "0x0001e4c1", + "platform_write_persistent_reg": "0x0001e4d9", + "printf_hexdump": "0x0001e4e9", + "reverse_128": "0x0001e829", + "reverse_24": "0x0001e82f", + "reverse_256": "0x0001e835", + "reverse_48": "0x0001e83b", + "reverse_56": "0x0001e841", + "reverse_64": "0x0001e847", + "reverse_bd_addr": "0x0001e84d", + "reverse_bytes": "0x0001e853", + "sm_add_event_handler": "0x0001ea21", + "sm_address_resolution_lookup": "0x0001eb79", + "sm_authenticated": "0x0001ef21", + "sm_authorization_decline": "0x0001ef2f", + "sm_authorization_grant": "0x0001ef4f", + "sm_authorization_state": "0x0001ef6f", + "sm_bonding_decline": "0x0001ef89", + "sm_config": "0x0001f3e5", + "sm_config_conn": "0x0001f419", + "sm_encryption_key_size": "0x0001f5d3", + "sm_just_works_confirm": "0x0001fb59", + "sm_le_device_key": "0x0001fe99", + "sm_passkey_input": "0x0001ff2f", + "sm_private_random_address_generation_get": "0x000202f1", + "sm_private_random_address_generation_get_mode": "0x000202f9", + "sm_private_random_address_generation_set_mode": "0x00020305", + "sm_private_random_address_generation_set_update_period": "0x0002032d", + "sm_register_external_ltk_callback": "0x00020469", + "sm_register_oob_data_callback": "0x00020475", + "sm_request_pairing": "0x00020481", + "sm_send_security_request": "0x00020f5f", + "sm_set_accepted_stk_generation_methods": "0x00020f85", + "sm_set_authentication_requirements": "0x00020f91", + "sm_set_encryption_key_size_range": "0x00020fa1", + "sscanf_bd_addr": "0x00021361", + "sysSetPublicDeviceAddr": "0x0002175d", + "uuid128_to_str": "0x00021d85", + "uuid_add_bluetooth_prefix": "0x00021ddd", + "uuid_has_bluetooth_prefix": "0x00021dfd" } \ No newline at end of file diff --git a/bundles/noos_extension/ING9187xx/meta.json b/bundles/noos_extension/ING9187xx/meta.json index e00ebc39d..298e5a597 100644 --- a/bundles/noos_extension/ING9187xx/meta.json +++ b/bundles/noos_extension/ING9187xx/meta.json @@ -4,15 +4,21 @@ }, "ram": { "base": 536870912, - "size": 3372 + "size": 3308 }, "rom": { "base": 16384, - "size": 128444 + "size": 128836 + }, + "var": { + "link_layer_features": { + "addr": 141220, + "value": "3ff9010400000000" + } }, "version": [ 1, 9, - 41 + 56 ] } \ No newline at end of file diff --git a/bundles/noos_extension/ING9187xx/platform.bin b/bundles/noos_extension/ING9187xx/platform.bin index 0799767e3..ea0d82adc 100644 Binary files a/bundles/noos_extension/ING9187xx/platform.bin and b/bundles/noos_extension/ING9187xx/platform.bin differ diff --git a/bundles/noos_extension/ING9188xx/apis.json b/bundles/noos_extension/ING9188xx/apis.json index df16e7e84..5edce2ede 100644 --- a/bundles/noos_extension/ING9188xx/apis.json +++ b/bundles/noos_extension/ING9188xx/apis.json @@ -6,45 +6,47 @@ "att_dispatch_server_can_send_now": "0x000057fd", "att_dispatch_server_request_can_send_now_event": "0x00005803", "att_emit_general_event": "0x000058b5", - "att_server_can_send_packet_now": "0x00005fe5", - "att_server_deferred_read_response": "0x00005fe9", - "att_server_get_mtu": "0x00006001", - "att_server_indicate": "0x00006079", - "att_server_init": "0x000060fd", - "att_server_notify": "0x00006139", - "att_server_register_packet_handler": "0x00006251", - "att_server_request_can_send_now_event": "0x0000625d", - "att_set_db": "0x00006279", - "att_set_read_callback": "0x0000628d", - "att_set_write_callback": "0x00006299", - "bd_addr_cmp": "0x00006409", - "bd_addr_copy": "0x0000640f", - "bd_addr_to_str": "0x00006419", - "big_endian_read_16": "0x00006451", - "big_endian_read_32": "0x00006459", - "big_endian_store_16": "0x0000646d", - "big_endian_store_32": "0x00006479", - "btstack_config": "0x000065b1", - "btstack_memory_pool_create": "0x000066ff", - "btstack_memory_pool_free": "0x00006729", - "btstack_memory_pool_get": "0x00006789", - "btstack_push_user_msg": "0x000067d1", - "btstack_push_user_runnable": "0x000067dd", - "btstack_reset": "0x000067e9", - "char_for_nibble": "0x00006aad", - "gap_add_dev_to_periodic_list": "0x000073c5", - "gap_add_whitelist": "0x000073d5", - "gap_aes_encrypt": "0x000073e1", - "gap_clear_white_lists": "0x00007419", - "gap_clr_adv_set": "0x00007425", - "gap_clr_periodic_adv_list": "0x00007431", - "gap_create_connection_cancel": "0x0000743d", - "gap_default_periodic_adv_sync_transfer_param": "0x00007449", - "gap_disconnect": "0x00007461", - "gap_disconnect_all": "0x0000748d", - "gap_ext_create_connection": "0x000074cd", - "gap_get_connection_parameter_range": "0x000075a5", - "gap_le_read_channel_map": "0x000075e1", + "att_server_can_send_packet_now": "0x00005fe9", + "att_server_deferred_read_response": "0x00005fed", + "att_server_get_mtu": "0x00006005", + "att_server_indicate": "0x0000607d", + "att_server_init": "0x00006101", + "att_server_notify": "0x0000613d", + "att_server_register_packet_handler": "0x00006255", + "att_server_request_can_send_now_event": "0x00006261", + "att_set_db": "0x0000627d", + "att_set_read_callback": "0x00006291", + "att_set_write_callback": "0x0000629d", + "bd_addr_cmp": "0x0000640d", + "bd_addr_copy": "0x00006413", + "bd_addr_to_str": "0x0000641d", + "big_endian_read_16": "0x00006455", + "big_endian_read_32": "0x0000645d", + "big_endian_store_16": "0x00006471", + "big_endian_store_32": "0x0000647d", + "btstack_config": "0x000065b5", + "btstack_get_capabilities": "0x000065c1", + "btstack_memory_pool_create": "0x0000671b", + "btstack_memory_pool_free": "0x00006745", + "btstack_memory_pool_get": "0x000067a5", + "btstack_push_user_msg": "0x000067ed", + "btstack_push_user_runnable": "0x000067f9", + "btstack_reset": "0x00006805", + "char_for_nibble": "0x00006ac9", + "gap_add_dev_to_periodic_list": "0x000073cd", + "gap_add_whitelist": "0x000073dd", + "gap_aes_encrypt": "0x000073e9", + "gap_clear_white_lists": "0x00007421", + "gap_clr_adv_set": "0x0000742d", + "gap_clr_periodic_adv_list": "0x00007439", + "gap_create_connection_cancel": "0x00007445", + "gap_default_periodic_adv_sync_transfer_param": "0x00007451", + "gap_disconnect": "0x00007469", + "gap_disconnect2": "0x00007471", + "gap_disconnect_all": "0x0000749d", + "gap_ext_create_connection": "0x000074dd", + "gap_get_connection_parameter_range": "0x000075b5", + "gap_le_read_channel_map": "0x000075ed", "gap_periodic_adv_create_sync": "0x0000764d", "gap_periodic_adv_create_sync_cancel": "0x00007671", "gap_periodic_adv_set_info_transfer": "0x0000767d", @@ -57,237 +59,242 @@ "gap_read_remote_used_features": "0x00007765", "gap_read_remote_version": "0x00007771", "gap_read_rssi": "0x0000777d", - "gap_remove_whitelist": "0x00007789", - "gap_rmv_adv_set": "0x00007805", - "gap_rmv_dev_from_periodic_list": "0x00007811", - "gap_rx_test_v2": "0x00007821", - "gap_rx_test_v3": "0x00007831", - "gap_set_adv_set_random_addr": "0x0000787d", - "gap_set_callback_for_next_hci": "0x000078b9", - "gap_set_connection_cte_request_enable": "0x000078d9", - "gap_set_connection_cte_response_enable": "0x000078f5", - "gap_set_connection_cte_rx_param": "0x00007905", - "gap_set_connection_cte_tx_param": "0x00007959", - "gap_set_connection_parameter_range": "0x000079a5", - "gap_set_connectionless_cte_tx_enable": "0x000079bd", - "gap_set_connectionless_cte_tx_param": "0x000079cd", - "gap_set_connectionless_iq_sampling_enable": "0x00007a29", - "gap_set_data_length": "0x00007a85", - "gap_set_def_phy": "0x00007a9d", - "gap_set_ext_adv_data": "0x00007aad", - "gap_set_ext_adv_enable": "0x00007ac5", - "gap_set_ext_adv_para": "0x00007b35", - "gap_set_ext_scan_enable": "0x00007c0d", - "gap_set_ext_scan_para": "0x00007c25", - "gap_set_ext_scan_response_data": "0x00007cc5", - "gap_set_host_channel_classification": "0x00007cdd", - "gap_set_periodic_adv_data": "0x00007ced", - "gap_set_periodic_adv_enable": "0x00007d5d", - "gap_set_periodic_adv_para": "0x00007d6d", - "gap_set_periodic_adv_rx_enable": "0x00007d85", - "gap_set_phy": "0x00007d95", - "gap_set_random_device_address": "0x00007db1", - "gap_start_ccm": "0x00007de1", - "gap_test_end": "0x00007e29", - "gap_tx_test_v2": "0x00007e35", - "gap_tx_test_v4": "0x00007e4d", - "gap_update_connection_parameters": "0x00007e71", - "gap_vendor_tx_continuous_wave": "0x00007eb5", - "gatt_client_cancel_write": "0x000083dd", - "gatt_client_discover_characteristic_descriptors": "0x00008403", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x00008443", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x00008493", - "gatt_client_discover_characteristics_for_service": "0x000084e3", - "gatt_client_discover_primary_services": "0x00008519", - "gatt_client_discover_primary_services_by_uuid128": "0x0000854b", - "gatt_client_discover_primary_services_by_uuid16": "0x0000858f", - "gatt_client_execute_write": "0x000085cb", - "gatt_client_find_included_services_for_service": "0x000085f1", - "gatt_client_get_mtu": "0x0000861f", - "gatt_client_is_ready": "0x000086c1", - "gatt_client_listen_for_characteristic_value_updates": "0x000086d7", - "gatt_client_prepare_write": "0x000086f9", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x00008735", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x0000875f", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008765", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x00008793", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x00008799", - "gatt_client_read_multiple_characteristic_values": "0x000087c7", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x000087f7", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x00008825", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x00008871", - "gatt_client_register_handler": "0x000088bd", - "gatt_client_reliable_write_long_value_of_characteristic": "0x000088c9", - "gatt_client_signed_write_without_response": "0x00008cf9", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008dbd", - "gatt_client_write_client_characteristic_configuration": "0x00008df7", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008e49", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008e59", - "gatt_client_write_long_value_of_characteristic": "0x00008e95", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008ea5", - "gatt_client_write_value_of_characteristic": "0x00008ee1", - "gatt_client_write_value_of_characteristic_without_response": "0x00008f17", - "hci_add_event_handler": "0x0000a459", - "hci_power_control": "0x0000abf9", - "hci_register_acl_packet_handler": "0x0000adad", - "kv_commit": "0x0000b549", - "kv_get": "0x0000b5a5", - "kv_init": "0x0000b5b1", - "kv_init_backend": "0x0000b631", - "kv_put": "0x0000b645", - "kv_remove": "0x0000b651", - "kv_remove_all": "0x0000b685", - "kv_value_modified": "0x0000b6b5", - "kv_value_modified_of_key": "0x0000b6d1", - "kv_visit": "0x0000b6dd", - "l2cap_add_event_handler": "0x0000b76d", - "l2cap_can_send_packet_now": "0x0000b77d", - "l2cap_create_le_credit_based_connection_request": "0x0000b939", - "l2cap_credit_based_send": "0x0000ba7d", - "l2cap_credit_based_send_continue": "0x0000baa9", - "l2cap_disconnect": "0x0000bb25", - "l2cap_get_le_credit_based_connection_credits": "0x0000bd75", - "l2cap_get_peer_mtu_for_local_cid": "0x0000bd91", - "l2cap_init": "0x0000c165", - "l2cap_le_send_flow_control_credit": "0x0000c25b", - "l2cap_max_le_mtu": "0x0000c565", - "l2cap_register_packet_handler": "0x0000c68d", - "l2cap_register_service": "0x0000c699", - "l2cap_request_can_send_now_event": "0x0000c7a9", - "l2cap_request_connection_parameter_update": "0x0000c7c3", - "l2cap_send_echo_request": "0x0000cc9d", - "l2cap_unregister_service": "0x0000cd5d", - "le_device_db_add": "0x0000cdb5", - "le_device_db_find": "0x0000ce8d", - "le_device_db_from_key": "0x0000ceb9", - "le_device_db_iter_cur": "0x0000cec1", - "le_device_db_iter_cur_key": "0x0000cec5", - "le_device_db_iter_init": "0x0000cec9", - "le_device_db_iter_next": "0x0000ced1", - "le_device_db_remove_key": "0x0000cef7", - "ll_ackable_packet_alloc": "0x0000cf23", - "ll_ackable_packet_get_status": "0x0000d055", - "ll_ackable_packet_run": "0x0000d0c5", - "ll_ackable_packet_set_tx_data": "0x0000d161", - "ll_aes_encrypt": "0x0000d17d", - "ll_attach_cte_to_adv_set": "0x0000d1f9", - "ll_channel_monitor_alloc": "0x0000d391", - "ll_channel_monitor_check_each_pdu": "0x0000d413", - "ll_channel_monitor_run": "0x0000d479", - "ll_config": "0x0000d52d", - "ll_free": "0x0000d563", - "ll_get_heap_free_size": "0x0000d56d", - "ll_hint_on_ce_len": "0x0000d581", - "ll_legacy_adv_set_interval": "0x0000d5b9", - "ll_lock_frequency": "0x0000d5c9", - "ll_malloc": "0x0000d62d", - "ll_query_timing_info": "0x0000d765", - "ll_raw_packet_alloc": "0x0000d7b1", - "ll_raw_packet_free": "0x0000d885", - "ll_raw_packet_get_bare_rx_data": "0x0000d8bd", - "ll_raw_packet_get_iq_samples": "0x0000d983", - "ll_raw_packet_get_rx_data": "0x0000da1d", - "ll_raw_packet_recv": "0x0000dabd", - "ll_raw_packet_send": "0x0000db79", - "ll_raw_packet_set_bare_data": "0x0000dc61", - "ll_raw_packet_set_bare_mode": "0x0000dc9f", - "ll_raw_packet_set_fake_cte_info": "0x0000dda5", - "ll_raw_packet_set_param": "0x0000ddc7", - "ll_raw_packet_set_rx_cte": "0x0000de25", - "ll_raw_packet_set_tx_cte": "0x0000debb", - "ll_raw_packet_set_tx_data": "0x0000def9", - "ll_register_hci_acl_previewer": "0x0000df5d", - "ll_scan_set_fixed_channel": "0x0000dfc1", - "ll_scanner_enable_iq_sampling": "0x0000dfcd", - "ll_set_adv_access_address": "0x0000e281", - "ll_set_adv_coded_scheme": "0x0000e28d", - "ll_set_conn_acl_report_latency": "0x0000e2bd", - "ll_set_conn_coded_scheme": "0x0000e2ed", - "ll_set_conn_interval_unit": "0x0000e319", - "ll_set_conn_latency": "0x0000e325", - "ll_set_conn_tx_power": "0x0000e355", - "ll_set_def_antenna": "0x0000e39d", - "ll_set_initiating_coded_scheme": "0x0000e3b9", - "ll_set_max_conn_number": "0x0000e3c5", - "ll_unlock_frequency": "0x0000e459", - "nibble_for_char": "0x0001f6ed", - "platform_calibrate_rt_clk": "0x0001f787", + "gap_read_white_lists_size": "0x00007789", + "gap_remove_whitelist": "0x00007795", + "gap_rmv_adv_set": "0x00007811", + "gap_rmv_dev_from_periodic_list": "0x0000781d", + "gap_rx_test_v2": "0x0000782d", + "gap_rx_test_v3": "0x0000783d", + "gap_set_adv_set_random_addr": "0x00007889", + "gap_set_callback_for_next_hci": "0x000078ad", + "gap_set_connection_cte_request_enable": "0x000078cd", + "gap_set_connection_cte_response_enable": "0x000078e9", + "gap_set_connection_cte_rx_param": "0x000078f9", + "gap_set_connection_cte_tx_param": "0x0000794d", + "gap_set_connection_parameter_range": "0x00007999", + "gap_set_connectionless_cte_tx_enable": "0x000079b1", + "gap_set_connectionless_cte_tx_param": "0x000079c1", + "gap_set_connectionless_iq_sampling_enable": "0x00007a1d", + "gap_set_data_length": "0x00007a79", + "gap_set_def_phy": "0x00007a91", + "gap_set_ext_adv_data": "0x00007aa1", + "gap_set_ext_adv_enable": "0x00007ab9", + "gap_set_ext_adv_para": "0x00007b29", + "gap_set_ext_scan_enable": "0x00007bf1", + "gap_set_ext_scan_para": "0x00007c09", + "gap_set_ext_scan_response_data": "0x00007ca9", + "gap_set_host_channel_classification": "0x00007cc1", + "gap_set_periodic_adv_data": "0x00007cd1", + "gap_set_periodic_adv_enable": "0x00007d41", + "gap_set_periodic_adv_para": "0x00007d51", + "gap_set_periodic_adv_rx_enable": "0x00007d69", + "gap_set_phy": "0x00007d79", + "gap_set_random_device_address": "0x00007d95", + "gap_start_ccm": "0x00007db1", + "gap_test_end": "0x00007df9", + "gap_tx_test_v2": "0x00007e05", + "gap_tx_test_v4": "0x00007e1d", + "gap_update_connection_parameters": "0x00007e41", + "gap_vendor_tx_continuous_wave": "0x00007e85", + "gatt_client_cancel_write": "0x000083ad", + "gatt_client_discover_characteristic_descriptors": "0x000083d3", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x00008413", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x00008463", + "gatt_client_discover_characteristics_for_service": "0x000084b3", + "gatt_client_discover_primary_services": "0x000084e9", + "gatt_client_discover_primary_services_by_uuid128": "0x0000851b", + "gatt_client_discover_primary_services_by_uuid16": "0x0000855f", + "gatt_client_execute_write": "0x0000859b", + "gatt_client_find_included_services_for_service": "0x000085c1", + "gatt_client_get_mtu": "0x000085ef", + "gatt_client_is_ready": "0x00008699", + "gatt_client_listen_for_characteristic_value_updates": "0x000086af", + "gatt_client_prepare_write": "0x000086d1", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x0000870d", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x00008737", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x0000873d", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x0000876b", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x00008771", + "gatt_client_read_multiple_characteristic_values": "0x0000879f", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x000087cf", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x000087fd", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x00008849", + "gatt_client_register_handler": "0x00008895", + "gatt_client_reliable_write_long_value_of_characteristic": "0x000088a1", + "gatt_client_signed_write_without_response": "0x00008cd1", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008d95", + "gatt_client_write_client_characteristic_configuration": "0x00008dcf", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008e21", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008e31", + "gatt_client_write_long_value_of_characteristic": "0x00008e6d", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008e7d", + "gatt_client_write_value_of_characteristic": "0x00008eb9", + "gatt_client_write_value_of_characteristic_without_response": "0x00008eef", + "hci_add_event_handler": "0x0000a429", + "hci_power_control": "0x0000abc5", + "hci_register_acl_packet_handler": "0x0000ad79", + "kv_commit": "0x0000b505", + "kv_get": "0x0000b561", + "kv_init": "0x0000b56d", + "kv_init_backend": "0x0000b5ed", + "kv_put": "0x0000b601", + "kv_remove": "0x0000b60d", + "kv_remove_all": "0x0000b641", + "kv_value_modified": "0x0000b671", + "kv_value_modified_of_key": "0x0000b68d", + "kv_visit": "0x0000b699", + "l2cap_add_event_handler": "0x0000b729", + "l2cap_can_send_packet_now": "0x0000b739", + "l2cap_create_le_credit_based_connection_request": "0x0000b8f5", + "l2cap_credit_based_send": "0x0000ba39", + "l2cap_credit_based_send_continue": "0x0000ba65", + "l2cap_disconnect": "0x0000bae1", + "l2cap_get_le_credit_based_connection_credits": "0x0000bd31", + "l2cap_get_peer_mtu_for_local_cid": "0x0000bd4d", + "l2cap_init": "0x0000c121", + "l2cap_le_send_flow_control_credit": "0x0000c217", + "l2cap_max_le_mtu": "0x0000c521", + "l2cap_register_packet_handler": "0x0000c649", + "l2cap_register_service": "0x0000c655", + "l2cap_request_can_send_now_event": "0x0000c765", + "l2cap_request_connection_parameter_update": "0x0000c77f", + "l2cap_send_echo_request": "0x0000cc59", + "l2cap_unregister_service": "0x0000cd19", + "le_device_db_add": "0x0000cd71", + "le_device_db_find": "0x0000ce49", + "le_device_db_from_key": "0x0000ce75", + "le_device_db_iter_cur": "0x0000ce7d", + "le_device_db_iter_cur_key": "0x0000ce81", + "le_device_db_iter_init": "0x0000ce85", + "le_device_db_iter_next": "0x0000ce8d", + "le_device_db_remove_key": "0x0000ceb3", + "ll_ackable_packet_alloc": "0x0000cedf", + "ll_ackable_packet_get_status": "0x0000d011", + "ll_ackable_packet_run": "0x0000d081", + "ll_ackable_packet_set_tx_data": "0x0000d11d", + "ll_aes_encrypt": "0x0000d139", + "ll_attach_cte_to_adv_set": "0x0000d1b5", + "ll_channel_monitor_alloc": "0x0000d34d", + "ll_channel_monitor_check_each_pdu": "0x0000d3cf", + "ll_channel_monitor_run": "0x0000d43d", + "ll_config": "0x0000d4f1", + "ll_free": "0x0000d527", + "ll_get_capabilities": "0x0000d531", + "ll_get_heap_free_size": "0x0000d551", + "ll_get_states": "0x0000d561", + "ll_hint_on_ce_len": "0x0000d61d", + "ll_legacy_adv_set_interval": "0x0000d655", + "ll_lock_frequency": "0x0000d665", + "ll_malloc": "0x0000d6c9", + "ll_query_timing_info": "0x0000d801", + "ll_raw_packet_alloc": "0x0000d84d", + "ll_raw_packet_free": "0x0000d921", + "ll_raw_packet_get_bare_rx_data": "0x0000d959", + "ll_raw_packet_get_iq_samples": "0x0000da1f", + "ll_raw_packet_get_rx_data": "0x0000dab9", + "ll_raw_packet_recv": "0x0000db59", + "ll_raw_packet_send": "0x0000dc15", + "ll_raw_packet_set_bare_data": "0x0000dcfd", + "ll_raw_packet_set_bare_mode": "0x0000dd3b", + "ll_raw_packet_set_fake_cte_info": "0x0000de41", + "ll_raw_packet_set_param": "0x0000de63", + "ll_raw_packet_set_rx_cte": "0x0000dec1", + "ll_raw_packet_set_tx_cte": "0x0000df57", + "ll_raw_packet_set_tx_data": "0x0000df95", + "ll_register_hci_acl_previewer": "0x0000dff9", + "ll_scan_set_fixed_channel": "0x0000e05d", + "ll_scanner_enable_iq_sampling": "0x0000e069", + "ll_set_adv_access_address": "0x0000e31d", + "ll_set_adv_coded_scheme": "0x0000e329", + "ll_set_conn_acl_report_latency": "0x0000e359", + "ll_set_conn_coded_scheme": "0x0000e389", + "ll_set_conn_interval_unit": "0x0000e3b5", + "ll_set_conn_latency": "0x0000e3c1", + "ll_set_conn_tx_power": "0x0000e3f1", + "ll_set_def_antenna": "0x0000e439", + "ll_set_initiating_coded_scheme": "0x0000e455", + "ll_set_max_conn_number": "0x0000e461", + "ll_unlock_frequency": "0x0000e4f5", + "nibble_for_char": "0x0001f789", + "platform_calibrate_rt_clk": "0x0001f823", "platform_call_on_stack": "0x000040ef", - "platform_config": "0x0001f78d", - "platform_controller_run": "0x0001f8b1", - "platform_delete_timer": "0x0001f8e5", - "platform_enable_irq": "0x0001f8ed", - "platform_get_gen_os_driver": "0x0001f925", - "platform_get_link_layer_interf": "0x0001f931", - "platform_get_task_handle": "0x0001f939", - "platform_get_timer_counter": "0x0001f951", - "platform_get_us_time": "0x0001f955", - "platform_get_version": "0x0001f959", - "platform_hrng": "0x0001f961", - "platform_init_controller": "0x0001f969", - "platform_os_idle_resumed_hook": "0x0001f985", - "platform_patch_rf_init_data": "0x0001f989", - "platform_post_sleep_processing": "0x0001f995", - "platform_pre_sleep_processing": "0x0001f99b", - "platform_pre_suppress_ticks_and_sleep_processing": "0x0001f9a1", - "platform_printf": "0x0001f9a5", - "platform_raise_assertion": "0x0001f9b9", - "platform_rand": "0x0001f9cd", - "platform_read_info": "0x0001f9d1", - "platform_read_persistent_reg": "0x0001fa01", - "platform_reset": "0x0001fa11", - "platform_rt_rc_auto_tune": "0x0001fa35", - "platform_rt_rc_auto_tune2": "0x0001fa3d", - "platform_rt_rc_tune": "0x0001fac5", - "platform_set_abs_timer": "0x0001fad9", - "platform_set_evt_callback": "0x0001fadd", - "platform_set_evt_callback_table": "0x0001faf1", - "platform_set_irq_callback": "0x0001fafd", - "platform_set_irq_callback_table": "0x0001fb19", - "platform_set_rf_clk_source": "0x0001fb25", - "platform_set_rf_init_data": "0x0001fb31", - "platform_set_rf_power_mapping": "0x0001fb3d", - "platform_set_timer": "0x0001fb49", - "platform_shutdown": "0x0001fb4d", - "platform_switch_app": "0x0001fb51", - "platform_trace_raw": "0x0001fb7d", - "platform_write_persistent_reg": "0x0001fb95", - "printf_hexdump": "0x0001fba5", - "reverse_128": "0x0001ff1d", - "reverse_24": "0x0001ff23", - "reverse_256": "0x0001ff29", - "reverse_48": "0x0001ff2f", - "reverse_56": "0x0001ff35", - "reverse_64": "0x0001ff3b", - "reverse_bd_addr": "0x0001ff41", - "reverse_bytes": "0x0001ff47", - "sm_add_event_handler": "0x00020265", - "sm_address_resolution_lookup": "0x000203bd", - "sm_authenticated": "0x00020739", - "sm_authorization_decline": "0x00020747", - "sm_authorization_grant": "0x00020767", - "sm_authorization_state": "0x00020787", - "sm_bonding_decline": "0x000207a1", - "sm_config": "0x00020bfd", - "sm_config_conn": "0x00020c15", - "sm_encryption_key_size": "0x00020dcb", - "sm_just_works_confirm": "0x00021351", - "sm_le_device_key": "0x00021689", - "sm_passkey_input": "0x0002171f", - "sm_private_random_address_generation_get": "0x00021ad9", - "sm_private_random_address_generation_get_mode": "0x00021ae1", - "sm_private_random_address_generation_set_mode": "0x00021aed", - "sm_private_random_address_generation_set_update_period": "0x00021b15", - "sm_register_external_ltk_callback": "0x00021c51", - "sm_register_oob_data_callback": "0x00021c5d", - "sm_request_pairing": "0x00021c69", - "sm_send_security_request": "0x0002273f", - "sm_set_accepted_stk_generation_methods": "0x00022765", - "sm_set_authentication_requirements": "0x00022771", - "sm_set_encryption_key_size_range": "0x0002277d", - "sscanf_bd_addr": "0x00022b4d", - "sysSetPublicDeviceAddr": "0x00022f01", - "uuid128_to_str": "0x000236ad", - "uuid_add_bluetooth_prefix": "0x00023705", - "uuid_has_bluetooth_prefix": "0x00023725" + "platform_cancel_us_timer": "0x0001f827", + "platform_config": "0x0001f83d", + "platform_controller_run": "0x0001f961", + "platform_create_us_timer": "0x0001f995", + "platform_delete_timer": "0x0001f9a9", + "platform_enable_irq": "0x0001f9b1", + "platform_get_gen_os_driver": "0x0001f9e9", + "platform_get_link_layer_interf": "0x0001f9f5", + "platform_get_task_handle": "0x0001f9fd", + "platform_get_timer_counter": "0x0001fa15", + "platform_get_us_time": "0x0001fa19", + "platform_get_version": "0x0001fa1d", + "platform_hrng": "0x0001fa25", + "platform_init_controller": "0x0001fa2d", + "platform_os_idle_resumed_hook": "0x0001fa49", + "platform_patch_rf_init_data": "0x0001fa4d", + "platform_post_sleep_processing": "0x0001fa59", + "platform_pre_sleep_processing": "0x0001fa5f", + "platform_pre_suppress_ticks_and_sleep_processing": "0x0001fa65", + "platform_printf": "0x0001fa69", + "platform_raise_assertion": "0x0001fa7d", + "platform_rand": "0x0001fa91", + "platform_read_info": "0x0001fa95", + "platform_read_persistent_reg": "0x0001fac5", + "platform_reset": "0x0001fad5", + "platform_rt_rc_auto_tune": "0x0001faf9", + "platform_rt_rc_auto_tune2": "0x0001fb01", + "platform_rt_rc_tune": "0x0001fb7d", + "platform_set_abs_timer": "0x0001fba1", + "platform_set_evt_callback": "0x0001fba5", + "platform_set_evt_callback_table": "0x0001fbb9", + "platform_set_irq_callback": "0x0001fbc5", + "platform_set_irq_callback_table": "0x0001fbe1", + "platform_set_rf_clk_source": "0x0001fbed", + "platform_set_rf_init_data": "0x0001fbf9", + "platform_set_rf_power_mapping": "0x0001fc05", + "platform_set_timer": "0x0001fc11", + "platform_shutdown": "0x0001fc15", + "platform_switch_app": "0x0001fc19", + "platform_trace_raw": "0x0001fc45", + "platform_write_persistent_reg": "0x0001fc5d", + "printf_hexdump": "0x0001fc6d", + "reverse_128": "0x0001ffe5", + "reverse_24": "0x0001ffeb", + "reverse_256": "0x0001fff1", + "reverse_48": "0x0001fff7", + "reverse_56": "0x0001fffd", + "reverse_64": "0x00020003", + "reverse_bd_addr": "0x00020009", + "reverse_bytes": "0x0002000f", + "sm_add_event_handler": "0x0002032d", + "sm_address_resolution_lookup": "0x00020485", + "sm_authenticated": "0x0002082d", + "sm_authorization_decline": "0x0002083b", + "sm_authorization_grant": "0x0002085b", + "sm_authorization_state": "0x0002087b", + "sm_bonding_decline": "0x00020895", + "sm_config": "0x00020cf1", + "sm_config_conn": "0x00020d25", + "sm_encryption_key_size": "0x00020edf", + "sm_just_works_confirm": "0x00021465", + "sm_le_device_key": "0x000217a5", + "sm_passkey_input": "0x0002183b", + "sm_private_random_address_generation_get": "0x00021bfd", + "sm_private_random_address_generation_get_mode": "0x00021c05", + "sm_private_random_address_generation_set_mode": "0x00021c11", + "sm_private_random_address_generation_set_update_period": "0x00021c39", + "sm_register_external_ltk_callback": "0x00021d75", + "sm_register_oob_data_callback": "0x00021d81", + "sm_request_pairing": "0x00021d8d", + "sm_send_security_request": "0x0002286b", + "sm_set_accepted_stk_generation_methods": "0x00022891", + "sm_set_authentication_requirements": "0x0002289d", + "sm_set_encryption_key_size_range": "0x000228ad", + "sscanf_bd_addr": "0x00022c6d", + "sysSetPublicDeviceAddr": "0x00023069", + "uuid128_to_str": "0x00023829", + "uuid_add_bluetooth_prefix": "0x00023881", + "uuid_has_bluetooth_prefix": "0x000238a1" } \ No newline at end of file diff --git a/bundles/noos_extension/ING9188xx/meta.json b/bundles/noos_extension/ING9188xx/meta.json index 4e800887b..7aa7a7e6d 100644 --- a/bundles/noos_extension/ING9188xx/meta.json +++ b/bundles/noos_extension/ING9188xx/meta.json @@ -4,15 +4,21 @@ }, "ram": { "base": 536870912, - "size": 3372 + "size": 3308 }, "rom": { "base": 16384, - "size": 135720 + "size": 136112 + }, + "var": { + "link_layer_features": { + "addr": 148152, + "value": "3ff9ff0700000000" + } }, "version": [ 1, 9, - 41 + 56 ] } \ No newline at end of file diff --git a/bundles/noos_extension/ING9188xx/platform.bin b/bundles/noos_extension/ING9188xx/platform.bin index 3efc15aa7..91b78a05d 100644 Binary files a/bundles/noos_extension/ING9188xx/platform.bin and b/bundles/noos_extension/ING9188xx/platform.bin differ diff --git a/bundles/noos_extension/inc/bluetooth.h b/bundles/noos_extension/inc/bluetooth.h index 44c58585a..8d306ff5e 100644 --- a/bundles/noos_extension/inc/bluetooth.h +++ b/bundles/noos_extension/inc/bluetooth.h @@ -40,10 +40,14 @@ typedef uint8_t bd_addr_t[BD_ADDR_LEN]; typedef enum { BD_ADDR_TYPE_LE_PUBLIC = 0, BD_ADDR_TYPE_LE_RANDOM = 0x01, - BD_ADDR_TYPE_LE_RESOVLED_PUB = 0x02, - BD_ADDR_TYPE_LE_RESOVLED_RAN = 0x03 + BD_ADDR_TYPE_LE_RESOLVED_PUB = 0x02, + BD_ADDR_TYPE_LE_RESOLVED_RAN = 0x03 } bd_addr_type_t; +// back-compatibility for typos +#define BD_ADDR_TYPE_LE_RESOVLED_PUB BD_ADDR_TYPE_LE_RESOLVED_PUB +#define BD_ADDR_TYPE_LE_RESOVLED_RAN BD_ADDR_TYPE_LE_RESOLVED_RAN + /** * @brief link key */ @@ -718,7 +722,7 @@ typedef enum { #define SM_AUTHREQ_NO_BONDING 0x00 #define SM_AUTHREQ_BONDING 0x01 #define SM_AUTHREQ_MITM_PROTECTION 0x04 -#define SM_AUTHREQ_SC 0x08 +#define SM_AUTHREQ_SC 0x08 // support of LE Secure Connections pairing // Key distribution flags used by spec #define SM_KEYDIST_ENC_KEY 0X01 diff --git a/bundles/noos_extension/inc/btstack_defines.h b/bundles/noos_extension/inc/btstack_defines.h index a8d08006c..25f1463b0 100644 --- a/bundles/noos_extension/inc/btstack_defines.h +++ b/bundles/noos_extension/inc/btstack_defines.h @@ -385,6 +385,20 @@ */ #define SM_EVENT_STATE_CHANGED 0xDC + /** + * @format H1B1 + * @param handle + * @param show calculated numeric value that needs to be compared + */ +#define SM_EVENT_NUMERIC_COMPARISON_REQUEST 0xDD + +/** + * @format PP + * @param irk + * @param dhk + */ +#define SM_EVENT_IRK_DHK_RESULT 0xDE + // GAP /** diff --git a/bundles/noos_extension/inc/btstack_event.h b/bundles/noos_extension/inc/btstack_event.h index e5ab49a55..dc87fa82a 100644 --- a/bundles/noos_extension/inc/btstack_event.h +++ b/bundles/noos_extension/inc/btstack_event.h @@ -107,6 +107,21 @@ uint32_t btstack_push_user_runnable(f_btstack_user_runnable fun, void *data, con */ uint8_t btstack_reset(void); +typedef struct btstack_capabilities +{ + uint16_t adv_set_num; // max number of advertising sets + uint16_t conn_num; // max number of connections + uint16_t max_mtu; // max MTU + uint16_t device_db_num; // max number of devices in database +} btstack_capabilities_t; + +/** + * @brief Get BT stack capabilities. + * + * @param[out] capabilities see `btstack_capabilities_t`. + */ +void btstack_get_capabilities(btstack_capabilities_t *capabilities); + /*** * @brief Get subevent code for le event * @param event packet @@ -780,6 +795,26 @@ static __INLINE hci_con_handle_t sm_event_numeric_comparison_get_handle(const ui return little_endian_read_16(event, 2); } +/** + * @brief Get field addr_type from event SM_EVENT_NUMERIC_COMPARISON_REQUEST + * @param event packet + * @return addr_type + * @note: btstack_type 1 + */ +static __INLINE uint8_t sm_event_numeric_comparison_get_addr_type(const uint8_t * event){ + return *decode_event_offset(event, uint8_t, 4); +} + +/** + * @brief Get field address from event SM_EVENT_NUMERIC_COMPARISON_REQUEST + * @param event packet + * @param Pointer to storage for address + * @note: btstack_type B + */ +static __INLINE void sm_event_numeric_comparison_get_address(const uint8_t * event, uint8_t * address){ + reverse_bd_addr(decode_event_offset(event, uint8_t, 5), address); +} + /** * @brief Get field compare value from event SM_EVENT_NUMERIC_COMPARISON_REQUEST * @param event packet @@ -790,6 +825,24 @@ static __INLINE uint32_t sm_event_numeric_comparison_get_compare_value(const uin return little_endian_read_32(event, 11); } +/** + * @brief Get IRK from event SM_EVENT_IRK_DHK_RESULT + * @param event packet + * @return irk + */ +static __INLINE const uint8_t *sm_event_irk_dhk_result_get_irk(const uint8_t *event) { + return *decode_event_offset(event, uint8_t *, 2); +} + +/** + * @brief Get DHK from event SM_EVENT_IRK_DHK_RESULT + * @param event packet + * @return dhk + */ +static __INLINE const uint8_t *sm_event_irk_dhk_result_get_dhk(const uint8_t *event) { + return *decode_event_offset(event, uint8_t *, 2 + sizeof(uintptr_t)); +} + /** * @brief Get field handle from event GAP_EVENT_SECURITY_LEVEL * @param event packet diff --git a/bundles/noos_extension/inc/gap.h b/bundles/noos_extension/inc/gap.h index 94ec41d4e..020bb0b27 100644 --- a/bundles/noos_extension/inc/gap.h +++ b/bundles/noos_extension/inc/gap.h @@ -54,11 +54,27 @@ uint8_t gap_set_random_device_address(const uint8_t *address); /** * @brief Disconnect connection with handle * + * This is equivalent to `gap_disconnect2(handle, 0x13)`. + * * @param handle Used to identify an advertising set. Range: 0x00 to 0xEF * @return 0: Message is sent out or the connection already release */ uint8_t gap_disconnect(hci_con_handle_t handle); +/** + * @brief Disconnect connection with handle + * + * @param handle Used to identify an advertising set. Range: 0x00 to 0xEF + * @param reason Reason: + * - Authentication Failure error code (0x05) + * - Other End Terminated Connection error codes (0x13 to 0x15) + * - Unsupported Remote Feature error code (0x1A) + * - Pairing with Unit Key Not Supported error code (0x29) + * - Unacceptable Connection Parameters error code (0x3B) + * @return 0: Message is sent out or the connection already release + */ +uint8_t gap_disconnect2(hci_con_handle_t handle, uint8_t reason); + /** * @brief disconnect multi-connections */ @@ -70,7 +86,7 @@ void gap_disconnect_all(void); * @param[in] addtype BLE address type * @return 0: Message is sent to controller */ -uint8_t gap_add_whitelist(const uint8_t *address,bd_addr_type_t addtype); +uint8_t gap_add_whitelist(const uint8_t *address, bd_addr_type_t addtype); /** * @brief remove whitelist from controller @@ -79,7 +95,7 @@ uint8_t gap_add_whitelist(const uint8_t *address,bd_addr_type_t addtype); * @param addtype BLE address type * @return 0: Message is sent to controller */ -uint8_t gap_remove_whitelist(const uint8_t *address,bd_addr_type_t addtype); +uint8_t gap_remove_whitelist(const uint8_t *address, bd_addr_type_t addtype); /** * @brief clear white lists in controller @@ -88,6 +104,122 @@ uint8_t gap_remove_whitelist(const uint8_t *address,bd_addr_type_t addtype); */ uint8_t gap_clear_white_lists(void); +/** + * @brief read white lists size in controller + * + * @return 0: message sent out others: failed + */ +uint8_t gap_read_white_lists_size(void); + +/** + * @brief Add one device to the resolving list used to generate and resolve + * Resolvable Private Addresses in the Controller. + * + * @param address peer identity address + * @param addtype peer identity address type + * @param peer_irk IRK of the peer device + * @param local_irk IRK of the local device + * @return 0: message sent out others: failed + */ +// uint8_t gap_add_dev_to_resolving_list(const uint8_t *address, bd_addr_type_t addtype, +// const uint8_t *peer_irk, const uint8_t *local_irk); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Remove one device from the resolving list used to resolve Resolvable + * Private Addresses in the Controller. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_remove_dev_from_resolving_list(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Remove all devices from the resolving list used to resolve Resolvable + * Private Addresses in the Controller. + * + * @return 0: message sent out others: failed + */ +// uint8_t gap_clear_resolving_list(void); +// WARNING: ^^^ this API is not available in this release + + +// LE Privacy Mode +typedef enum privacy_mode +{ + PRIVACY_MODE_NETWORK = 0, // Network Privacy Mode (default) + // Identity address is not accepted if IRK is available + PRIVACY_MODE_DEVICE = 1, // Device Privacy Mode + // Identity address is accepted even if IRK is available +} privacy_mode_t; + +/** + * @brief Specify the privacy mode to be used for a given entry on the resolving list. + * + * @param address peer identity address + * @param addtype peer identity address type + * @param privacy_mode privacy mode for this peer device + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_privacy_mode(const uint8_t *address, bd_addr_type_t addtype, +// privacy_mode_t privacy_mode); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Get the current peer Resolvable Private Address being used for the + * corresponding peer Public and Random (static) Identity Address. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_read_peer_resolving_addr(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Get the current local Resolvable Private Address being used for the + * corresponding peer Identity Address. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_read_local_resolving_addr(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Enable resolution of Resolvable Private Addresses in the Controller. + * + * @param enable address resolution enable + * 0: disabled (default) + * 1: enabled + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_addr_resolution_enable(const uint8_t enable); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Set the length of time the Controller uses a Resolvable Private Address + * before a new resolvable private address is generated and starts being used. + * + * @param rpa_timeout RPA_Timeout measured in seconds + * Range: 0x0001 to 0x0E10 + * Time range: 1 s to 1 hour + * Default: 0x0384 (900 s or 15 minutes) + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_resolvable_private_addr_timeout(uint16_t rpa_timeout); +// WARNING: ^^^ this API is not available in this release + + /** * @brief read rssi value of a appointed hci connection * @@ -290,13 +422,13 @@ typedef enum scan_filter_policy SCAN_ACCEPT_WLIST_EXCEPT_NOT_DIRECTED, // Accept all advertising packets except directed advertising packets // where the initiator's identity address does not address this device - SCAN_ACCEPT_ALL_EXCEPT_IDENTITY_NOT_MATCH, + // SCAN_ACCEPT_ALL_EXCEPT_IDENTITY_NOT_MATCH, // Accept all advertising packets except: // 1. advertising packets where the advertiser's identity address is not in // the White List; and // 2. directed advertising packets where the initiator's identity address // does not address this device - SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH + // SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH } scan_filter_policy_t; /** @@ -318,6 +450,9 @@ uint8_t gap_set_ext_scan_para(const bd_addr_type_t own_addr_type, const scan_fil /** * @brief to set the extended scan response data for an advertising set * + * Note: Scan response data is cleared after `gap_set_ext_adv_para()` on the same + * advertising set handle. + * * @param adv_handle handle of advertising set handle * * @param length length of advertising data @@ -482,6 +617,9 @@ typedef enum adv_data_frag_pref /** * @brief to set extended advertising data * + * Note: Advertising data is cleared after `gap_set_ext_adv_para()` on the same + * advertising set handle. + * * @param adv_handle advertising set handle. * * @param length advertising data length @@ -497,6 +635,9 @@ uint8_t gap_set_ext_adv_data(const uint8_t adv_handle, uint16_t length, const ui /** * @brief LE Set Periodic Advertising Data command * + * Note: Advertising data is cleared after `gap_set_ext_adv_para()` and + * `gap_set_periodic_adv_para()` on the same advertising set handle. + * * @param adv_handle advertising set handle. * * @param length advertising data length (<= 1650 bytes) @@ -723,6 +864,7 @@ typedef struct { // Supervision timeout for the LE Link, unit is 10ms uint16_t supervision_timeout; // Informative parameter recommending the min/max length of connection event needed for this LE connection + // unit is 625us uint16_t min_ce_len; uint16_t max_ce_len; } conn_para_t; diff --git a/bundles/noos_extension/inc/le_device_db.h b/bundles/noos_extension/inc/le_device_db.h index b81d04f5a..68de61b61 100644 --- a/bundles/noos_extension/inc/le_device_db.h +++ b/bundles/noos_extension/inc/le_device_db.h @@ -16,14 +16,15 @@ typedef struct le_device_memory_db { // Identification uint8_t addr_type; - uint8_t key_size; - uint8_t authenticated; - uint8_t authorized; + uint8_t key_size; + uint8_t authenticated; + uint8_t authorized:1; + uint8_t sm_sc:1; bd_addr_t addr; sm_key_t irk; - // Stored pairing information allows to re-establish an enncrypted connection + // Stored pairing information allows to re-establish an encrypted connection // with a peripheral that doesn't have any persistent memory sm_key_t ltk; uint16_t ediv; @@ -36,7 +37,6 @@ typedef struct le_device_memory_db { // Signed Writes by us sm_key_t local_csrk; uint32_t local_counter; - } le_device_memory_db_t; #pragma pack (pop) diff --git a/bundles/noos_extension/inc/ll_api.h b/bundles/noos_extension/inc/ll_api.h index 1f2d03ac3..3dfc6d2ac 100644 --- a/bundles/noos_extension/inc/ll_api.h +++ b/bundles/noos_extension/inc/ll_api.h @@ -33,6 +33,25 @@ typedef enum ll_config_item_e LL_CFG_FEATURE_SET_MASK, } ll_config_item_t; +typedef struct ll_capabilities +{ + const uint8_t *features; // Link Layer features + uint16_t adv_set_num; // max number of advertising sets + uint16_t conn_num; // max number of connections + uint16_t whitelist_size; // size of whitelists + uint16_t resolving_list_size; // size of resolving list + uint16_t periodic_advertiser_list_size; // size of periodic advertiser list + uint16_t adv_dup_filter_size; // size of items for filtering + // advertising duplication +} ll_capabilities_t; + +/** + * @brief Get Link Layer capabilities. + * + * @param[out] capabilities see `ll_capabilities_t`. + */ +void ll_get_capabilities(ll_capabilities_t *capabilities); + /** **************************************************************************************** * @brief Config LL specific parameters @@ -43,6 +62,26 @@ typedef enum ll_config_item_e */ void ll_config(ll_config_item_t item, uint32_t value); +/** + **************************************************************************************** + * @brief Get states of LL + * + * Note: Parameters can be set to NULL if the relevant states are not needed. + * + * @param[out] adv_states[1] states of all advertising sets + * Bit[n]: advertising set n is enabled + * @param[out] conn_states[1] states of all connections + * Bit[n]: connection n is active + * @param[out] sync_states[1] states of all synchronized periodic adv sets + * Bit[n]: sync_handle n is active + * @param[out] other_states[1] other states: + * Bit[0]: if scanning is ON + * Bit[1]: if initiating is ON + **************************************************************************************** + */ +void ll_get_states(uint32_t *adv_states, uint32_t *conn_states, + uint32_t *sync_states, uint32_t *other_states); + /** **************************************************************************************** * @brief set Tx power range diff --git a/bundles/noos_extension/inc/platform_api.h b/bundles/noos_extension/inc/platform_api.h index bbc633bd3..5783c773e 100644 --- a/bundles/noos_extension/inc/platform_api.h +++ b/bundles/noos_extension/inc/platform_api.h @@ -113,7 +113,7 @@ typedef enum PLATFORM_CB_EVT_LLE_INIT, // when allocation on heap fails (heap out of memory) - // NOTE: param (void *data) is cased from an integer identifying which heap is OOM: + // NOTE: param (void *data) is casted from an integer identifying which heap is OOM: // * 0: FreeRTOS's heap; // * 1: Link Layer's heap; // * 2: Link Layer's task pool. @@ -327,7 +327,7 @@ typedef struct /** **************************************************************************************** - * @brief Get heap status + * @brief Get status of built-in RTOS's heap * * @param[out] status heap status **************************************************************************************** @@ -378,7 +378,7 @@ void platform_switch_app(const uint32_t app_addr); * in power saving mode. * * For ING918: the least FOUR significant bits of `value` are saved; - * For ING916: the least TWO significant bits of `value` are saved. + * For ING916: the least FIVE significant bits of `value` are saved. * * @param[in] value value **************************************************************************************** @@ -468,8 +468,13 @@ typedef enum PLATFORM_CFG_PS_DBG_4, // Debugging parameters for ING916. Default (0) // Bit [0]: `platform_shutdown` uses DEEPER SLEEP (1) or SLEEP (0) PLATFORM_CFG_FAST_DEEP_SLEEP_TIME_REDUCTION, // sleep time reduction (fast deep sleep mode) in us. - // Requirement: < PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION + // Requirement: <= PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION + // When equal to PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION, fast deep sleep mode is not used // Only available for ING916 (default: ~2000us) + PLATFORM_CFG_AUTO_REDUCE_CLOCK_FREQ, // automatic reduce CPU clock frequency in these circumstances: + // * the default IDLE procedure + // * when entering sleep modes + // Only available for ING916 (default: Enabled) } platform_cfg_item_t; typedef enum @@ -608,7 +613,15 @@ uint64_t platform_get_us_time(void); */ void platform_printf(const char *format, ...); -// NOTE: for debug only +/** + **************************************************************************************** + * @brief Set public device address + * + * NOTE: This is for debug only. + * + * @param[in] addr device address in little-endian. + **************************************************************************************** + */ void sysSetPublicDeviceAddr(const unsigned char *addr); // set rf source @@ -775,6 +788,55 @@ void platform_set_abs_timer(f_platform_timer_callback callback, uint32_t abs_tim */ void platform_delete_timer(f_platform_timer_callback callback); +typedef void * platform_us_timer_handle_t; + +/** + **************************************************************************************** + * @brief Callback function of microsecond (us) resolution timer + * + * @param[in] timer_handle handle of this timer + * @param[in] time_us internal timer counter when invoke this callback + * @param[in] param user parameter + * @return (must be NULL) + **************************************************************************************** + */ +typedef void * (* f_platform_us_timer_callback)(platform_us_timer_handle_t timer_handle, + uint64_t time_us, void *param); + +/** + **************************************************************************************** + * @brief Setup a single-shot platform timer with microsecond (us) resolution + * + * Although `abs_time` is in microsecond (us), callback is **not guaranteed** + * to be invoked with such resolution. + * + * This type of timers are much like `platform_set_timer`, except that: + * 1. resolution is higher; + * 2. callback is invoked in the context of an ISR. + * + * @param[in] abs_time when `platform_get_us_timer() == abs_time`, callback is invoked. + * @param[in] callback the callback function + * @param[in] param user parameter + * @return a non-NULL value when succeeded. Otherwise, NULL. + **************************************************************************************** + */ +platform_us_timer_handle_t platform_create_us_timer(uint64_t abs_time, + f_platform_us_timer_callback callback, void *param); + +/** + **************************************************************************************** + * @brief Cancel a platform timer previously created by `platform_create_us_timer` + * + * When a timer not needed any more, use this API to cancel it. + * + * @param[in] timer_handle handle of the timer + * @return 0 if succeeded else non-0 + * Note: non-0 means the callback function of the timer + * is executing. + **************************************************************************************** + */ +int platform_cancel_us_timer(platform_us_timer_handle_t timer_handle); + /** **************************************************************************************** * @brief Install a new RTOS stack for a specific platform task diff --git a/bundles/noos_extension/inc/sm.h b/bundles/noos_extension/inc/sm.h index 6dfc62bab..7e57fb927 100644 --- a/bundles/noos_extension/inc/sm.h +++ b/bundles/noos_extension/inc/sm.h @@ -55,14 +55,21 @@ typedef enum { /** * @brief Security configurations * + * These configurations can updated dynamically. Be careful: dynamically toggle + * `enable` will cause problems when SM is still working on any connection. + * + * After IRK/DHK are derived from `persistent`, `SM_EVENT_IRK_DHK_RESULT` is emitted. + * * @param[in] enable Enable (Bypass) SM (default: Disabled) * When disabled, SM can be enabled per connection by `sm_config_conn`. * @param[in] io_capability Default IO Capabilities * @param[in] request_security Let peripheral request an encrypted connection right after connecting * Not used normally. Bonding is triggered by access to protected attributes in ATT Server * @param[in] persistent persistent data for security & privacy + * @return 0 if ok else non-0. Possible causes for non-0 return value: + * * generation of internal keys(IRK/ERK) are under going. */ -void sm_config(uint8_t enable, +int sm_config(uint8_t enable, io_capability_t io_capability, int request_security, const sm_persistent_t *persistent); @@ -101,18 +108,71 @@ void sm_private_random_address_generation_set_update_period(int period_ms); const uint8_t *sm_private_random_address_generation_get(void); /** + * @brief Registers OOB Data Callback. + * + * The callback should set the oob_data and return 1 if OOB data is available. + * + * Signature of `get_oob_data_callback`: + * @param[in] address_type address type + * @param[in] addr address + * @param[out] oob_data OOB data (type `sm_key_t`) + * @return 1 if OOB data is available, else 0. * - * @brief Registers OOB Data Callback. The callback should set the oob_data and return 1 if OOB data is availble * @param get_oob_data_callback */ -void sm_register_oob_data_callback( int (*get_oob_data_callback)(uint8_t addres_type, bd_addr_t addr, uint8_t * oob_data)); +void sm_register_oob_data_callback( int (*get_oob_data_callback)(uint8_t address_type, bd_addr_t addr, uint8_t * oob_data)); /** + * @brief Registers secure pairing OOB Data Callback. * - * @brief Registers secure pairing OOB Data Callback. The callback should set the peer_confirm & peer_random and return 1 if OOB data is availble - * @param get_oob_data_callback + * The callback should set the peer_confirm & peer_random and return 1 + * if OOB data is available. + * + * Signature of `get_sc_oob_data_callback`: + * @param[in] address_type address type + * @param[in] addr address + * @param[out] peer_confirm peer confirm value (type `sm_key_t`) + * @param[out] peer_random peer random value (type `sm_key_t`) + * @return 1 if OOB data is available, else 0. + * + * @param get_sc_oob_data_callback */ -// void sm_register_sc_oob_data_callback( int (*get_sc_oob_data_callback)(uint8_t addres_type, bd_addr_t addr, uint8_t *peer_confirm, uint8_t *peer_random)); +// void sm_register_sc_oob_data_callback(int (*get_sc_oob_data_callback)(uint8_t address_type, bd_addr_t addr, uint8_t *peer_confirm, uint8_t *peer_random)); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief (When secure pairing is used and OOB is selected) Start generate local + * OOB data (_confirm_ and _random_). + * + * After generated, _confirm_ and _random_ are passed to the callback. + * + * Each call of this function will generate a new P256 key pair that will used + * in **all** subsequent pairing attempts. When OOB is used, it is Developers's + * responsibility to refresh key pair properly. If OOB is not used, SM will + * re-generate a new key pair for each pairing attempt. + * + * BLUETOOTH CORE SPECIFICATION Version 5.4 | Vol 3, Part H, Section 2.3.6: + * + * > To protect a device's private key, a device should implement a method to + * > prevent an attacker from retrieving useful information about the device's private + * > key. For this purpose, a device should change its private key after every pairing + * > (successful or failed). Otherwise, it should change its private key whenever S + + * > 3F > 8, where S is the number of successful pairings and F the number of + * > failed attempts since the key was last changed. + * + * App can then pass these information together with device address to peer + * through OOB communication. + * + * Signature of `callback`: + * @param[out] confirm local confirm value (type `sm_key_t`) + * @param[out] random local random value (type `sm_key_t`) + * + * @param callback + * @return 0: started without error + * -1: previous OOB data is not generated yet + */ +// int sm_sc_generate_oob_data(void (*callback)(const uint8_t *confirm, const uint8_t *random)); // WARNING: ^^^ this API is not available in this release @@ -235,14 +295,6 @@ int sm_le_device_key(hci_con_handle_t con_handle); // WARNING: ^^^ this API is not available in this release -/** - * @brief When secure pairing is used and OOB is selected, use this function to prepare OOB data and share to peer. - * @param handle - */ -// int sm_sc_generate_oob_data(void (*callback)(uint8_t *peer_confirm, uint8_t *peer_random)); -// WARNING: ^^^ this API is not available in this release - - /** * * @brief Register a callback for get external LTK (for empty EDIV & Random) diff --git a/bundles/noos_mass_conn/ING9168xx/apis.json b/bundles/noos_mass_conn/ING9168xx/apis.json index f3e2a6732..af21e0d1d 100644 --- a/bundles/noos_mass_conn/ING9168xx/apis.json +++ b/bundles/noos_mass_conn/ING9168xx/apis.json @@ -1,268 +1,275 @@ { - "att_dispatch_client_can_send_now": "0x02004399", - "att_dispatch_client_request_can_send_now_event": "0x0200439f", - "att_dispatch_register_client": "0x020043a5", - "att_dispatch_register_server": "0x020043b9", - "att_dispatch_server_can_send_now": "0x020043cd", - "att_dispatch_server_request_can_send_now_event": "0x020043d3", - "att_emit_general_event": "0x02004485", - "att_server_can_send_packet_now": "0x02004bbd", - "att_server_deferred_read_response": "0x02004bc1", - "att_server_get_mtu": "0x02004bd9", - "att_server_indicate": "0x02004c51", - "att_server_init": "0x02004cd5", - "att_server_notify": "0x02004d11", - "att_server_register_packet_handler": "0x02004e29", - "att_server_request_can_send_now_event": "0x02004e35", - "att_set_db": "0x02004e51", - "att_set_read_callback": "0x02004e65", - "att_set_write_callback": "0x02004e71", - "bd_addr_cmp": "0x02005041", - "bd_addr_copy": "0x02005047", - "bd_addr_to_str": "0x02005051", - "big_endian_read_16": "0x02005089", - "big_endian_read_32": "0x02005091", - "big_endian_store_16": "0x020050a5", - "big_endian_store_32": "0x020050b1", - "btstack_config": "0x020051f5", - "btstack_memory_pool_create": "0x02005343", - "btstack_memory_pool_free": "0x0200536d", - "btstack_memory_pool_get": "0x020053cd", - "btstack_push_user_msg": "0x02005415", - "btstack_push_user_runnable": "0x02005421", - "btstack_reset": "0x0200542d", - "char_for_nibble": "0x02005707", - "gap_add_dev_to_periodic_list": "0x020060ed", - "gap_add_whitelist": "0x020060fd", - "gap_aes_encrypt": "0x02006109", - "gap_clear_white_lists": "0x02006141", - "gap_clr_adv_set": "0x0200614d", - "gap_clr_periodic_adv_list": "0x02006159", - "gap_create_connection_cancel": "0x02006165", - "gap_default_periodic_adv_sync_transfer_param": "0x02006171", - "gap_disconnect": "0x02006189", - "gap_disconnect_all": "0x020061b5", - "gap_ext_create_connection": "0x020061f5", - "gap_get_connection_parameter_range": "0x020062cd", - "gap_le_read_channel_map": "0x02006309", - "gap_periodic_adv_create_sync": "0x02006375", - "gap_periodic_adv_create_sync_cancel": "0x02006399", - "gap_periodic_adv_set_info_transfer": "0x020063a5", - "gap_periodic_adv_sync_transfer": "0x020063b5", - "gap_periodic_adv_sync_transfer_param": "0x020063c5", - "gap_periodic_adv_term_sync": "0x020063e1", - "gap_read_antenna_info": "0x02006469", - "gap_read_periodic_adv_list_size": "0x02006475", - "gap_read_phy": "0x02006481", - "gap_read_remote_used_features": "0x0200648d", - "gap_read_remote_version": "0x02006499", - "gap_read_rssi": "0x020064a5", - "gap_remove_whitelist": "0x020064b1", - "gap_rmv_adv_set": "0x0200652d", - "gap_rmv_dev_from_periodic_list": "0x02006539", - "gap_rx_test_v2": "0x02006549", - "gap_rx_test_v3": "0x02006559", - "gap_set_adv_set_random_addr": "0x020065a5", - "gap_set_callback_for_next_hci": "0x020065e1", - "gap_set_connection_cte_request_enable": "0x02006601", - "gap_set_connection_cte_response_enable": "0x0200661d", - "gap_set_connection_cte_rx_param": "0x0200662d", - "gap_set_connection_cte_tx_param": "0x02006681", - "gap_set_connection_parameter_range": "0x020066cd", - "gap_set_connectionless_cte_tx_enable": "0x020066e5", - "gap_set_connectionless_cte_tx_param": "0x020066f5", - "gap_set_connectionless_iq_sampling_enable": "0x02006751", - "gap_set_data_length": "0x020067ad", - "gap_set_def_phy": "0x020067c5", - "gap_set_ext_adv_data": "0x020067d5", - "gap_set_ext_adv_enable": "0x020067ed", - "gap_set_ext_adv_para": "0x0200685d", - "gap_set_ext_scan_enable": "0x0200692d", - "gap_set_ext_scan_para": "0x02006945", - "gap_set_ext_scan_response_data": "0x020069e5", - "gap_set_host_channel_classification": "0x020069fd", - "gap_set_periodic_adv_data": "0x02006a0d", - "gap_set_periodic_adv_enable": "0x02006a7d", - "gap_set_periodic_adv_para": "0x02006a8d", - "gap_set_periodic_adv_rx_enable": "0x02006aa5", - "gap_set_phy": "0x02006ab5", - "gap_set_random_device_address": "0x02006ad1", - "gap_start_ccm": "0x02006b01", - "gap_test_end": "0x02006b49", - "gap_tx_test_v2": "0x02006b55", - "gap_tx_test_v4": "0x02006b6d", - "gap_update_connection_parameters": "0x02006b91", - "gap_vendor_tx_continuous_wave": "0x02006bd5", - "gatt_client_cancel_write": "0x020070fd", - "gatt_client_discover_characteristic_descriptors": "0x02007123", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x02007163", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x020071b3", - "gatt_client_discover_characteristics_for_service": "0x02007203", - "gatt_client_discover_primary_services": "0x02007239", - "gatt_client_discover_primary_services_by_uuid128": "0x0200726b", - "gatt_client_discover_primary_services_by_uuid16": "0x020072af", - "gatt_client_execute_write": "0x020072ed", - "gatt_client_find_included_services_for_service": "0x02007313", - "gatt_client_get_mtu": "0x02007341", - "gatt_client_is_ready": "0x02007405", - "gatt_client_listen_for_characteristic_value_updates": "0x0200741b", - "gatt_client_prepare_write": "0x0200743d", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x02007479", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x020074a3", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x020074a9", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x020074d7", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x020074dd", - "gatt_client_read_multiple_characteristic_values": "0x0200750b", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x0200753b", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x02007569", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x020075b5", - "gatt_client_register_handler": "0x02007601", - "gatt_client_reliable_write_long_value_of_characteristic": "0x0200760d", - "gatt_client_signed_write_without_response": "0x02007a41", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x02007b05", - "gatt_client_write_client_characteristic_configuration": "0x02007b3f", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x02007b91", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02007ba1", - "gatt_client_write_long_value_of_characteristic": "0x02007bdd", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x02007bed", - "gatt_client_write_value_of_characteristic": "0x02007c29", - "gatt_client_write_value_of_characteristic_without_response": "0x02007c5f", - "hci_add_event_handler": "0x02009255", - "hci_power_control": "0x020099fd", - "hci_register_acl_packet_handler": "0x02009bb1", - "kv_commit": "0x0200a30d", - "kv_get": "0x0200a369", - "kv_init": "0x0200a375", - "kv_init_backend": "0x0200a3f5", - "kv_put": "0x0200a409", - "kv_remove": "0x0200a415", - "kv_remove_all": "0x0200a449", - "kv_value_modified": "0x0200a479", - "kv_value_modified_of_key": "0x0200a495", - "kv_visit": "0x0200a4a1", - "l2cap_add_event_handler": "0x0200a531", - "l2cap_can_send_packet_now": "0x0200a541", - "l2cap_create_le_credit_based_connection_request": "0x0200a705", - "l2cap_credit_based_send": "0x0200a84d", - "l2cap_credit_based_send_continue": "0x0200a879", - "l2cap_disconnect": "0x0200a8f5", - "l2cap_get_le_credit_based_connection_credits": "0x0200aae1", - "l2cap_get_peer_mtu_for_local_cid": "0x0200aafd", - "l2cap_init": "0x0200af3d", - "l2cap_le_send_flow_control_credit": "0x0200b033", - "l2cap_max_le_mtu": "0x0200b341", - "l2cap_register_packet_handler": "0x0200b469", - "l2cap_register_service": "0x0200b475", - "l2cap_request_can_send_now_event": "0x0200b585", - "l2cap_request_connection_parameter_update": "0x0200b59f", - "l2cap_send_echo_request": "0x0200ba81", - "l2cap_unregister_service": "0x0200bb61", - "le_device_db_add": "0x0200bbb9", - "le_device_db_find": "0x0200bc91", - "le_device_db_from_key": "0x0200bcbd", - "le_device_db_iter_cur": "0x0200bcc5", - "le_device_db_iter_cur_key": "0x0200bcc9", - "le_device_db_iter_init": "0x0200bccd", - "le_device_db_iter_next": "0x0200bcd5", - "le_device_db_remove_key": "0x0200bcfb", - "ll_adjust_conn_peer_tx_power": "0x0200bd29", - "ll_aes_encrypt": "0x0200bd55", - "ll_config": "0x0200bdc9", - "ll_free": "0x0200bdff", - "ll_get_heap_free_size": "0x0200be09", - "ll_hint_on_ce_len": "0x0200be1d", - "ll_legacy_adv_set_interval": "0x0200be55", - "ll_malloc": "0x0200be65", - "ll_register_hci_acl_previewer": "0x0200bf7d", - "ll_scan_set_fixed_channel": "0x0200bfe1", - "ll_set_adv_access_address": "0x0200c1f9", - "ll_set_adv_coded_scheme": "0x0200c205", - "ll_set_conn_acl_report_latency": "0x0200c23d", - "ll_set_conn_coded_scheme": "0x0200c26d", - "ll_set_conn_latency": "0x0200c299", - "ll_set_conn_tx_power": "0x0200c2c9", - "ll_set_def_antenna": "0x0200c305", - "ll_set_initiating_coded_scheme": "0x0200c325", - "ll_set_max_conn_number": "0x0200c331", - "ll_set_tx_power_range": "0x0200c3c5", - "nibble_for_char": "0x0201ee29", - "platform_calibrate_rt_clk": "0x0201eec1", - "platform_call_on_stack": "0x0200213f", - "platform_config": "0x0201eec5", - "platform_controller_run": "0x0201efed", - "platform_delete_timer": "0x0201f021", - "platform_enable_irq": "0x0201f029", - "platform_get_gen_os_driver": "0x0201f05d", - "platform_get_link_layer_interf": "0x0201f069", - "platform_get_task_handle": "0x0201f071", - "platform_get_timer_counter": "0x0201f089", - "platform_get_us_time": "0x0201f08d", - "platform_get_version": "0x0201f091", - "platform_hrng": "0x0201f099", - "platform_init_controller": "0x0201f0a1", - "platform_os_idle_resumed_hook": "0x0201f0bd", - "platform_patch_rf_init_data": "0x0201f0c1", - "platform_post_sleep_processing": "0x0201f0cd", - "platform_pre_sleep_processing": "0x0201f0d3", - "platform_pre_suppress_ticks_and_sleep_processing": "0x0201f0d9", - "platform_printf": "0x0201f0dd", - "platform_raise_assertion": "0x0201f0f1", - "platform_rand": "0x0201f105", - "platform_read_info": "0x0201f109", - "platform_read_persistent_reg": "0x0201f139", - "platform_reset": "0x0201f145", - "platform_rt_rc_auto_tune": "0x0201f159", - "platform_rt_rc_auto_tune2": "0x0201f161", - "platform_rt_rc_tune": "0x0201f1c9", - "platform_set_abs_timer": "0x0201f1e5", - "platform_set_evt_callback": "0x0201f1e9", - "platform_set_evt_callback_table": "0x0201f1fd", - "platform_set_irq_callback": "0x0201f209", - "platform_set_irq_callback_table": "0x0201f225", - "platform_set_rf_clk_source": "0x0201f231", - "platform_set_rf_init_data": "0x0201f23d", - "platform_set_rf_power_mapping": "0x0201f249", - "platform_set_timer": "0x0201f255", - "platform_shutdown": "0x0201f259", - "platform_switch_app": "0x0201f25d", - "platform_trace_raw": "0x0201f275", - "platform_write_persistent_reg": "0x0201f28d", - "printf_hexdump": "0x0201f2a1", - "reverse_128": "0x0201f619", - "reverse_24": "0x0201f61f", - "reverse_256": "0x0201f625", - "reverse_48": "0x0201f62b", - "reverse_56": "0x0201f631", - "reverse_64": "0x0201f637", - "reverse_bd_addr": "0x0201f63d", - "reverse_bytes": "0x0201f643", - "sm_add_event_handler": "0x0201f9a1", - "sm_address_resolution_lookup": "0x0201faf9", - "sm_authenticated": "0x0201fe75", - "sm_authorization_decline": "0x0201fe83", - "sm_authorization_grant": "0x0201fea3", - "sm_authorization_state": "0x0201fec3", - "sm_bonding_decline": "0x0201fedd", - "sm_config": "0x02020331", - "sm_config_conn": "0x02020349", - "sm_encryption_key_size": "0x020204ff", - "sm_just_works_confirm": "0x02020a85", - "sm_le_device_key": "0x02020dbd", - "sm_passkey_input": "0x02020e53", - "sm_private_random_address_generation_get": "0x0202120d", - "sm_private_random_address_generation_get_mode": "0x02021215", - "sm_private_random_address_generation_set_mode": "0x02021221", - "sm_private_random_address_generation_set_update_period": "0x02021249", - "sm_register_external_ltk_callback": "0x02021385", - "sm_register_oob_data_callback": "0x02021391", - "sm_request_pairing": "0x0202139d", - "sm_send_security_request": "0x02021e73", - "sm_set_accepted_stk_generation_methods": "0x02021e99", - "sm_set_authentication_requirements": "0x02021ea5", - "sm_set_encryption_key_size_range": "0x02021eb1", - "sscanf_bd_addr": "0x02022211", - "sysSetPublicDeviceAddr": "0x0202273d", - "uuid128_to_str": "0x02022f99", - "uuid_add_bluetooth_prefix": "0x02022ff1", - "uuid_has_bluetooth_prefix": "0x02023011" + "att_dispatch_client_can_send_now": "0x020052b1", + "att_dispatch_client_request_can_send_now_event": "0x020052b7", + "att_dispatch_register_client": "0x020052bd", + "att_dispatch_register_server": "0x020052d1", + "att_dispatch_server_can_send_now": "0x020052e5", + "att_dispatch_server_request_can_send_now_event": "0x020052eb", + "att_emit_general_event": "0x0200539d", + "att_server_can_send_packet_now": "0x02005ad9", + "att_server_deferred_read_response": "0x02005add", + "att_server_get_mtu": "0x02005af5", + "att_server_indicate": "0x02005b6d", + "att_server_init": "0x02005bf1", + "att_server_notify": "0x02005c2d", + "att_server_register_packet_handler": "0x02005d45", + "att_server_request_can_send_now_event": "0x02005d51", + "att_set_db": "0x02005d6d", + "att_set_read_callback": "0x02005d81", + "att_set_write_callback": "0x02005d8d", + "bd_addr_cmp": "0x02005f5d", + "bd_addr_copy": "0x02005f63", + "bd_addr_to_str": "0x02005f6d", + "big_endian_read_16": "0x02005fa5", + "big_endian_read_32": "0x02005fad", + "big_endian_store_16": "0x02005fc1", + "big_endian_store_32": "0x02005fcd", + "btstack_config": "0x02006111", + "btstack_get_capabilities": "0x0200611d", + "btstack_memory_pool_create": "0x02006277", + "btstack_memory_pool_free": "0x020062a1", + "btstack_memory_pool_get": "0x02006301", + "btstack_push_user_msg": "0x02006349", + "btstack_push_user_runnable": "0x02006355", + "btstack_reset": "0x02006361", + "char_for_nibble": "0x0200663b", + "gap_add_dev_to_periodic_list": "0x0200700d", + "gap_add_whitelist": "0x0200701d", + "gap_aes_encrypt": "0x02007029", + "gap_clear_white_lists": "0x02007061", + "gap_clr_adv_set": "0x0200706d", + "gap_clr_periodic_adv_list": "0x02007079", + "gap_create_connection_cancel": "0x02007085", + "gap_default_periodic_adv_sync_transfer_param": "0x02007091", + "gap_disconnect": "0x020070a9", + "gap_disconnect2": "0x020070b1", + "gap_disconnect_all": "0x020070dd", + "gap_ext_create_connection": "0x0200711d", + "gap_get_connection_parameter_range": "0x020071f5", + "gap_le_read_channel_map": "0x0200722d", + "gap_periodic_adv_create_sync": "0x0200728d", + "gap_periodic_adv_create_sync_cancel": "0x020072b1", + "gap_periodic_adv_set_info_transfer": "0x020072bd", + "gap_periodic_adv_sync_transfer": "0x020072cd", + "gap_periodic_adv_sync_transfer_param": "0x020072dd", + "gap_periodic_adv_term_sync": "0x020072f9", + "gap_read_antenna_info": "0x02007381", + "gap_read_periodic_adv_list_size": "0x0200738d", + "gap_read_phy": "0x02007399", + "gap_read_remote_used_features": "0x020073a5", + "gap_read_remote_version": "0x020073b1", + "gap_read_rssi": "0x020073bd", + "gap_read_white_lists_size": "0x020073c9", + "gap_remove_whitelist": "0x020073d5", + "gap_rmv_adv_set": "0x02007451", + "gap_rmv_dev_from_periodic_list": "0x0200745d", + "gap_rx_test_v2": "0x0200746d", + "gap_rx_test_v3": "0x0200747d", + "gap_set_adv_set_random_addr": "0x020074c9", + "gap_set_callback_for_next_hci": "0x020074ed", + "gap_set_connection_cte_request_enable": "0x0200750d", + "gap_set_connection_cte_response_enable": "0x02007529", + "gap_set_connection_cte_rx_param": "0x02007539", + "gap_set_connection_cte_tx_param": "0x0200758d", + "gap_set_connection_parameter_range": "0x020075d9", + "gap_set_connectionless_cte_tx_enable": "0x020075f1", + "gap_set_connectionless_cte_tx_param": "0x02007601", + "gap_set_connectionless_iq_sampling_enable": "0x0200765d", + "gap_set_data_length": "0x020076b9", + "gap_set_def_phy": "0x020076d1", + "gap_set_ext_adv_data": "0x020076e1", + "gap_set_ext_adv_enable": "0x020076f9", + "gap_set_ext_adv_para": "0x02007769", + "gap_set_ext_scan_enable": "0x02007829", + "gap_set_ext_scan_para": "0x02007841", + "gap_set_ext_scan_response_data": "0x020078e1", + "gap_set_host_channel_classification": "0x020078f9", + "gap_set_periodic_adv_data": "0x02007909", + "gap_set_periodic_adv_enable": "0x02007979", + "gap_set_periodic_adv_para": "0x02007989", + "gap_set_periodic_adv_rx_enable": "0x020079a1", + "gap_set_phy": "0x020079b1", + "gap_set_random_device_address": "0x020079cd", + "gap_start_ccm": "0x020079e9", + "gap_test_end": "0x02007a31", + "gap_tx_test_v2": "0x02007a3d", + "gap_tx_test_v4": "0x02007a55", + "gap_update_connection_parameters": "0x02007a79", + "gap_vendor_tx_continuous_wave": "0x02007abd", + "gatt_client_cancel_write": "0x02007fe5", + "gatt_client_discover_characteristic_descriptors": "0x0200800b", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x0200804b", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x0200809b", + "gatt_client_discover_characteristics_for_service": "0x020080eb", + "gatt_client_discover_primary_services": "0x02008121", + "gatt_client_discover_primary_services_by_uuid128": "0x02008153", + "gatt_client_discover_primary_services_by_uuid16": "0x02008197", + "gatt_client_execute_write": "0x020081d5", + "gatt_client_find_included_services_for_service": "0x020081fb", + "gatt_client_get_mtu": "0x02008229", + "gatt_client_is_ready": "0x020082f5", + "gatt_client_listen_for_characteristic_value_updates": "0x0200830b", + "gatt_client_prepare_write": "0x0200832d", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x02008369", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x02008393", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02008399", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x020083c7", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x020083cd", + "gatt_client_read_multiple_characteristic_values": "0x020083fb", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x0200842b", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x02008459", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x020084a5", + "gatt_client_register_handler": "0x020084f1", + "gatt_client_reliable_write_long_value_of_characteristic": "0x020084fd", + "gatt_client_signed_write_without_response": "0x02008931", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x020089f5", + "gatt_client_write_client_characteristic_configuration": "0x02008a2f", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x02008a81", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02008a91", + "gatt_client_write_long_value_of_characteristic": "0x02008acd", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x02008add", + "gatt_client_write_value_of_characteristic": "0x02008b19", + "gatt_client_write_value_of_characteristic_without_response": "0x02008b4f", + "hci_add_event_handler": "0x0200a159", + "hci_power_control": "0x0200a8fd", + "hci_register_acl_packet_handler": "0x0200aab1", + "kv_commit": "0x0200b1fd", + "kv_get": "0x0200b259", + "kv_init": "0x0200b265", + "kv_init_backend": "0x0200b2e5", + "kv_put": "0x0200b2f9", + "kv_remove": "0x0200b305", + "kv_remove_all": "0x0200b339", + "kv_value_modified": "0x0200b369", + "kv_value_modified_of_key": "0x0200b385", + "kv_visit": "0x0200b391", + "l2cap_add_event_handler": "0x0200b421", + "l2cap_can_send_packet_now": "0x0200b431", + "l2cap_create_le_credit_based_connection_request": "0x0200b5f5", + "l2cap_credit_based_send": "0x0200b73d", + "l2cap_credit_based_send_continue": "0x0200b769", + "l2cap_disconnect": "0x0200b7e5", + "l2cap_get_le_credit_based_connection_credits": "0x0200b9d1", + "l2cap_get_peer_mtu_for_local_cid": "0x0200b9ed", + "l2cap_init": "0x0200be2d", + "l2cap_le_send_flow_control_credit": "0x0200bf23", + "l2cap_max_le_mtu": "0x0200c231", + "l2cap_register_packet_handler": "0x0200c359", + "l2cap_register_service": "0x0200c365", + "l2cap_request_can_send_now_event": "0x0200c475", + "l2cap_request_connection_parameter_update": "0x0200c48f", + "l2cap_send_echo_request": "0x0200c971", + "l2cap_unregister_service": "0x0200ca51", + "le_device_db_add": "0x0200caa9", + "le_device_db_find": "0x0200cb81", + "le_device_db_from_key": "0x0200cbad", + "le_device_db_iter_cur": "0x0200cbb5", + "le_device_db_iter_cur_key": "0x0200cbb9", + "le_device_db_iter_init": "0x0200cbbd", + "le_device_db_iter_next": "0x0200cbc5", + "le_device_db_remove_key": "0x0200cbeb", + "ll_adjust_conn_peer_tx_power": "0x0200cc19", + "ll_aes_encrypt": "0x0200cc45", + "ll_config": "0x0200ccb9", + "ll_free": "0x0200ccef", + "ll_get_capabilities": "0x0200ccf9", + "ll_get_heap_free_size": "0x0200cd15", + "ll_get_states": "0x0200cd25", + "ll_hint_on_ce_len": "0x0200cde1", + "ll_legacy_adv_set_interval": "0x0200ce19", + "ll_malloc": "0x0200ce29", + "ll_register_hci_acl_previewer": "0x0200cf41", + "ll_scan_set_fixed_channel": "0x0200cfa5", + "ll_set_adv_access_address": "0x0200d1bd", + "ll_set_adv_coded_scheme": "0x0200d1c9", + "ll_set_conn_acl_report_latency": "0x0200d201", + "ll_set_conn_coded_scheme": "0x0200d231", + "ll_set_conn_latency": "0x0200d25d", + "ll_set_conn_tx_power": "0x0200d28d", + "ll_set_def_antenna": "0x0200d2c9", + "ll_set_initiating_coded_scheme": "0x0200d2e9", + "ll_set_max_conn_number": "0x0200d2f5", + "ll_set_tx_power_range": "0x0200d389", + "nibble_for_char": "0x0201fe19", + "platform_calibrate_rt_clk": "0x0201feb1", + "platform_call_on_stack": "0x0200303f", + "platform_cancel_us_timer": "0x0201feb5", + "platform_config": "0x0201fec9", + "platform_controller_run": "0x0201fffd", + "platform_create_us_timer": "0x02020031", + "platform_delete_timer": "0x02020045", + "platform_enable_irq": "0x0202004d", + "platform_get_gen_os_driver": "0x02020081", + "platform_get_link_layer_interf": "0x0202008d", + "platform_get_task_handle": "0x02020095", + "platform_get_timer_counter": "0x020200ad", + "platform_get_us_time": "0x020200b1", + "platform_get_version": "0x020200b5", + "platform_hrng": "0x020200d1", + "platform_init_controller": "0x020200d9", + "platform_os_idle_resumed_hook": "0x020200f5", + "platform_patch_rf_init_data": "0x020200f9", + "platform_post_sleep_processing": "0x02020105", + "platform_pre_sleep_processing": "0x0202010b", + "platform_pre_suppress_ticks_and_sleep_processing": "0x02020111", + "platform_printf": "0x02020115", + "platform_raise_assertion": "0x02020129", + "platform_rand": "0x0202013d", + "platform_read_info": "0x02020141", + "platform_read_persistent_reg": "0x02020171", + "platform_reset": "0x02020191", + "platform_rt_rc_auto_tune": "0x020201a5", + "platform_rt_rc_auto_tune2": "0x020201ad", + "platform_rt_rc_tune": "0x0202020d", + "platform_set_abs_timer": "0x02020239", + "platform_set_evt_callback": "0x0202023d", + "platform_set_evt_callback_table": "0x02020251", + "platform_set_irq_callback": "0x0202025d", + "platform_set_irq_callback_table": "0x02020279", + "platform_set_rf_clk_source": "0x02020285", + "platform_set_rf_init_data": "0x02020291", + "platform_set_rf_power_mapping": "0x0202029d", + "platform_set_timer": "0x020202a9", + "platform_shutdown": "0x020202ad", + "platform_switch_app": "0x020202b1", + "platform_trace_raw": "0x020202c9", + "platform_write_persistent_reg": "0x020202e1", + "printf_hexdump": "0x02020315", + "reverse_128": "0x0202068d", + "reverse_24": "0x02020693", + "reverse_256": "0x02020699", + "reverse_48": "0x0202069f", + "reverse_56": "0x020206a5", + "reverse_64": "0x020206ab", + "reverse_bd_addr": "0x020206b1", + "reverse_bytes": "0x020206b7", + "sm_add_event_handler": "0x02020a15", + "sm_address_resolution_lookup": "0x02020b6d", + "sm_authenticated": "0x02020f15", + "sm_authorization_decline": "0x02020f23", + "sm_authorization_grant": "0x02020f43", + "sm_authorization_state": "0x02020f63", + "sm_bonding_decline": "0x02020f7d", + "sm_config": "0x020213d1", + "sm_config_conn": "0x02021405", + "sm_encryption_key_size": "0x020215bf", + "sm_just_works_confirm": "0x02021b45", + "sm_le_device_key": "0x02021e85", + "sm_passkey_input": "0x02021f1b", + "sm_private_random_address_generation_get": "0x020222dd", + "sm_private_random_address_generation_get_mode": "0x020222e5", + "sm_private_random_address_generation_set_mode": "0x020222f1", + "sm_private_random_address_generation_set_update_period": "0x02022319", + "sm_register_external_ltk_callback": "0x02022455", + "sm_register_oob_data_callback": "0x02022461", + "sm_request_pairing": "0x0202246d", + "sm_send_security_request": "0x02022f4b", + "sm_set_accepted_stk_generation_methods": "0x02022f71", + "sm_set_authentication_requirements": "0x02022f7d", + "sm_set_encryption_key_size_range": "0x02022f8d", + "sscanf_bd_addr": "0x020232dd", + "sysSetPublicDeviceAddr": "0x02023839", + "uuid128_to_str": "0x020240a9", + "uuid_add_bluetooth_prefix": "0x02024101", + "uuid_has_bluetooth_prefix": "0x02024121" } \ No newline at end of file diff --git a/bundles/noos_mass_conn/ING9168xx/meta.json b/bundles/noos_mass_conn/ING9168xx/meta.json index b1c4cf80a..202e7e353 100644 --- a/bundles/noos_mass_conn/ING9168xx/meta.json +++ b/bundles/noos_mass_conn/ING9168xx/meta.json @@ -1,18 +1,24 @@ { "app": { - "base": 33710080 + "base": 33714176 }, "ram": { "base": 536870912, - "size": 3572 + "size": 3508 }, "rom": { "base": 33562624, - "size": 144440 + "size": 148824 + }, + "var": { + "link_layer_features": { + "addr": 33703336, + "value": "bf79ff07fe000000" + } }, "version": [ 2, 3, - 1 + 18 ] } \ No newline at end of file diff --git a/bundles/noos_mass_conn/ING9168xx/platform.bin b/bundles/noos_mass_conn/ING9168xx/platform.bin index 645eb3b29..a1c93d3b4 100644 Binary files a/bundles/noos_mass_conn/ING9168xx/platform.bin and b/bundles/noos_mass_conn/ING9168xx/platform.bin differ diff --git a/bundles/noos_mass_conn/ING9187xx/apis.json b/bundles/noos_mass_conn/ING9187xx/apis.json index d2b3dff35..3dc8f080b 100644 --- a/bundles/noos_mass_conn/ING9187xx/apis.json +++ b/bundles/noos_mass_conn/ING9187xx/apis.json @@ -6,248 +6,255 @@ "att_dispatch_server_can_send_now": "0x000056d9", "att_dispatch_server_request_can_send_now_event": "0x000056df", "att_emit_general_event": "0x00005791", - "att_server_can_send_packet_now": "0x00005ec1", - "att_server_deferred_read_response": "0x00005ec5", - "att_server_get_mtu": "0x00005edd", - "att_server_indicate": "0x00005f55", - "att_server_init": "0x00005fd9", - "att_server_notify": "0x00006015", - "att_server_register_packet_handler": "0x0000612d", - "att_server_request_can_send_now_event": "0x00006139", - "att_set_db": "0x00006155", - "att_set_read_callback": "0x00006169", - "att_set_write_callback": "0x00006175", - "bd_addr_cmp": "0x000062e5", - "bd_addr_copy": "0x000062eb", - "bd_addr_to_str": "0x000062f5", - "big_endian_read_16": "0x0000632d", - "big_endian_read_32": "0x00006335", - "big_endian_store_16": "0x00006349", - "big_endian_store_32": "0x00006355", - "btstack_config": "0x0000648d", - "btstack_memory_pool_create": "0x000065db", - "btstack_memory_pool_free": "0x00006605", - "btstack_memory_pool_get": "0x00006665", - "btstack_push_user_msg": "0x000066ad", - "btstack_push_user_runnable": "0x000066b9", - "btstack_reset": "0x000066c5", - "char_for_nibble": "0x00006989", - "gap_add_dev_to_periodic_list": "0x00007235", - "gap_add_whitelist": "0x00007245", - "gap_aes_encrypt": "0x00007251", - "gap_clear_white_lists": "0x00007289", - "gap_clr_adv_set": "0x00007295", - "gap_clr_periodic_adv_list": "0x000072a1", - "gap_create_connection_cancel": "0x000072ad", - "gap_disconnect": "0x000072b9", - "gap_disconnect_all": "0x000072e5", - "gap_ext_create_connection": "0x00007325", - "gap_get_connection_parameter_range": "0x000073fd", - "gap_le_read_channel_map": "0x00007435", - "gap_periodic_adv_create_sync": "0x000074a1", - "gap_periodic_adv_create_sync_cancel": "0x000074c5", - "gap_periodic_adv_term_sync": "0x000074d1", - "gap_read_periodic_adv_list_size": "0x00007559", - "gap_read_phy": "0x00007565", - "gap_read_remote_used_features": "0x00007571", - "gap_read_remote_version": "0x0000757d", - "gap_read_rssi": "0x00007589", - "gap_remove_whitelist": "0x00007595", - "gap_rmv_adv_set": "0x00007611", - "gap_rmv_dev_from_periodic_list": "0x0000761d", - "gap_rx_test_v2": "0x0000762d", - "gap_set_adv_set_random_addr": "0x00007665", - "gap_set_callback_for_next_hci": "0x000076a1", - "gap_set_connection_parameter_range": "0x000076c9", - "gap_set_data_length": "0x000076e5", - "gap_set_def_phy": "0x000076fd", - "gap_set_ext_adv_data": "0x0000770d", - "gap_set_ext_adv_enable": "0x00007725", - "gap_set_ext_adv_para": "0x00007795", - "gap_set_ext_scan_enable": "0x0000786d", - "gap_set_ext_scan_para": "0x00007885", - "gap_set_ext_scan_response_data": "0x00007925", - "gap_set_host_channel_classification": "0x0000793d", - "gap_set_periodic_adv_data": "0x0000794d", - "gap_set_periodic_adv_enable": "0x000079bd", - "gap_set_periodic_adv_para": "0x000079cd", - "gap_set_phy": "0x000079e5", - "gap_set_random_device_address": "0x00007a01", - "gap_start_ccm": "0x00007a31", - "gap_test_end": "0x00007a79", - "gap_tx_test_v2": "0x00007a85", - "gap_tx_test_v4": "0x00007a9d", - "gap_update_connection_parameters": "0x00007ac1", - "gap_vendor_tx_continuous_wave": "0x00007b05", - "gatt_client_cancel_write": "0x0000802d", - "gatt_client_discover_characteristic_descriptors": "0x00008053", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x00008093", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x000080e3", - "gatt_client_discover_characteristics_for_service": "0x00008133", - "gatt_client_discover_primary_services": "0x00008169", - "gatt_client_discover_primary_services_by_uuid128": "0x0000819b", - "gatt_client_discover_primary_services_by_uuid16": "0x000081df", - "gatt_client_execute_write": "0x0000821b", - "gatt_client_find_included_services_for_service": "0x00008241", - "gatt_client_get_mtu": "0x0000826f", - "gatt_client_is_ready": "0x00008311", - "gatt_client_listen_for_characteristic_value_updates": "0x00008327", - "gatt_client_prepare_write": "0x00008349", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x00008385", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x000083af", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x000083b5", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x000083e3", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x000083e9", - "gatt_client_read_multiple_characteristic_values": "0x00008417", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x00008447", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x00008475", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x000084c1", - "gatt_client_register_handler": "0x0000850d", - "gatt_client_reliable_write_long_value_of_characteristic": "0x00008519", - "gatt_client_signed_write_without_response": "0x00008949", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008a0d", - "gatt_client_write_client_characteristic_configuration": "0x00008a47", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008a99", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008aa9", - "gatt_client_write_long_value_of_characteristic": "0x00008ae5", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008af5", - "gatt_client_write_value_of_characteristic": "0x00008b31", - "gatt_client_write_value_of_characteristic_without_response": "0x00008b67", - "hci_add_event_handler": "0x0000a08d", - "hci_power_control": "0x0000a831", - "hci_register_acl_packet_handler": "0x0000a9e5", - "kv_commit": "0x0000b195", - "kv_get": "0x0000b1f1", - "kv_init": "0x0000b1fd", - "kv_init_backend": "0x0000b27d", - "kv_put": "0x0000b291", - "kv_remove": "0x0000b29d", - "kv_remove_all": "0x0000b2d1", - "kv_value_modified": "0x0000b301", - "kv_value_modified_of_key": "0x0000b31d", - "kv_visit": "0x0000b329", - "l2cap_add_event_handler": "0x0000b3b9", - "l2cap_can_send_packet_now": "0x0000b3c9", - "l2cap_create_le_credit_based_connection_request": "0x0000b585", - "l2cap_credit_based_send": "0x0000b6c9", - "l2cap_credit_based_send_continue": "0x0000b6f5", - "l2cap_disconnect": "0x0000b771", - "l2cap_get_le_credit_based_connection_credits": "0x0000b9c1", - "l2cap_get_peer_mtu_for_local_cid": "0x0000b9dd", - "l2cap_init": "0x0000bdb1", - "l2cap_le_send_flow_control_credit": "0x0000bea7", - "l2cap_max_le_mtu": "0x0000c1b1", - "l2cap_register_packet_handler": "0x0000c2d9", - "l2cap_register_service": "0x0000c2e5", - "l2cap_request_can_send_now_event": "0x0000c3f5", - "l2cap_request_connection_parameter_update": "0x0000c40f", - "l2cap_send_echo_request": "0x0000c8e9", - "l2cap_unregister_service": "0x0000c9a9", - "le_device_db_add": "0x0000ca01", - "le_device_db_find": "0x0000cad9", - "le_device_db_from_key": "0x0000cb05", - "le_device_db_iter_cur": "0x0000cb0d", - "le_device_db_iter_cur_key": "0x0000cb11", - "le_device_db_iter_init": "0x0000cb15", - "le_device_db_iter_next": "0x0000cb1d", - "le_device_db_remove_key": "0x0000cb43", - "ll_aes_encrypt": "0x0000cb71", - "ll_config": "0x0000cbed", - "ll_free": "0x0000cc23", - "ll_get_heap_free_size": "0x0000cc2d", - "ll_hint_on_ce_len": "0x0000cc41", - "ll_legacy_adv_set_interval": "0x0000cc79", - "ll_malloc": "0x0000cc89", - "ll_query_timing_info": "0x0000cdc1", - "ll_register_hci_acl_previewer": "0x0000ce0d", - "ll_scan_set_fixed_channel": "0x0000ce71", - "ll_set_adv_access_address": "0x0000d089", - "ll_set_adv_coded_scheme": "0x0000d095", - "ll_set_conn_acl_report_latency": "0x0000d0c5", - "ll_set_conn_coded_scheme": "0x0000d0f5", - "ll_set_conn_latency": "0x0000d121", - "ll_set_conn_tx_power": "0x0000d151", - "ll_set_def_antenna": "0x0000d199", - "ll_set_initiating_coded_scheme": "0x0000d1b5", - "ll_set_max_conn_number": "0x0000d1c1", - "nibble_for_char": "0x0001d365", - "platform_calibrate_rt_clk": "0x0001d3ff", + "att_server_can_send_packet_now": "0x00005ec5", + "att_server_deferred_read_response": "0x00005ec9", + "att_server_get_mtu": "0x00005ee1", + "att_server_indicate": "0x00005f59", + "att_server_init": "0x00005fdd", + "att_server_notify": "0x00006019", + "att_server_register_packet_handler": "0x00006131", + "att_server_request_can_send_now_event": "0x0000613d", + "att_set_db": "0x00006159", + "att_set_read_callback": "0x0000616d", + "att_set_write_callback": "0x00006179", + "bd_addr_cmp": "0x000062e9", + "bd_addr_copy": "0x000062ef", + "bd_addr_to_str": "0x000062f9", + "big_endian_read_16": "0x00006331", + "big_endian_read_32": "0x00006339", + "big_endian_store_16": "0x0000634d", + "big_endian_store_32": "0x00006359", + "btstack_config": "0x00006491", + "btstack_get_capabilities": "0x0000649d", + "btstack_memory_pool_create": "0x000065f7", + "btstack_memory_pool_free": "0x00006621", + "btstack_memory_pool_get": "0x00006681", + "btstack_push_user_msg": "0x000066c9", + "btstack_push_user_runnable": "0x000066d5", + "btstack_reset": "0x000066e1", + "char_for_nibble": "0x000069a5", + "gap_add_dev_to_periodic_list": "0x0000723d", + "gap_add_whitelist": "0x0000724d", + "gap_aes_encrypt": "0x00007259", + "gap_clear_white_lists": "0x00007291", + "gap_clr_adv_set": "0x0000729d", + "gap_clr_periodic_adv_list": "0x000072a9", + "gap_create_connection_cancel": "0x000072b5", + "gap_disconnect": "0x000072c1", + "gap_disconnect2": "0x000072c9", + "gap_disconnect_all": "0x000072f5", + "gap_ext_create_connection": "0x00007335", + "gap_get_connection_parameter_range": "0x0000740d", + "gap_le_read_channel_map": "0x00007445", + "gap_periodic_adv_create_sync": "0x000074a5", + "gap_periodic_adv_create_sync_cancel": "0x000074c9", + "gap_periodic_adv_term_sync": "0x000074d5", + "gap_read_periodic_adv_list_size": "0x0000755d", + "gap_read_phy": "0x00007569", + "gap_read_remote_used_features": "0x00007575", + "gap_read_remote_version": "0x00007581", + "gap_read_rssi": "0x0000758d", + "gap_read_white_lists_size": "0x00007599", + "gap_remove_whitelist": "0x000075a5", + "gap_rmv_adv_set": "0x00007621", + "gap_rmv_dev_from_periodic_list": "0x0000762d", + "gap_rx_test_v2": "0x0000763d", + "gap_set_adv_set_random_addr": "0x00007675", + "gap_set_callback_for_next_hci": "0x00007699", + "gap_set_connection_parameter_range": "0x000076c1", + "gap_set_data_length": "0x000076d9", + "gap_set_def_phy": "0x000076f1", + "gap_set_ext_adv_data": "0x00007701", + "gap_set_ext_adv_enable": "0x00007719", + "gap_set_ext_adv_para": "0x00007789", + "gap_set_ext_scan_enable": "0x00007851", + "gap_set_ext_scan_para": "0x00007869", + "gap_set_ext_scan_response_data": "0x00007909", + "gap_set_host_channel_classification": "0x00007921", + "gap_set_periodic_adv_data": "0x00007931", + "gap_set_periodic_adv_enable": "0x000079a1", + "gap_set_periodic_adv_para": "0x000079b1", + "gap_set_phy": "0x000079c9", + "gap_set_random_device_address": "0x000079e5", + "gap_start_ccm": "0x00007a01", + "gap_test_end": "0x00007a49", + "gap_tx_test_v2": "0x00007a55", + "gap_tx_test_v4": "0x00007a6d", + "gap_update_connection_parameters": "0x00007a91", + "gap_vendor_tx_continuous_wave": "0x00007ad5", + "gatt_client_cancel_write": "0x00007ffd", + "gatt_client_discover_characteristic_descriptors": "0x00008023", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x00008063", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x000080b3", + "gatt_client_discover_characteristics_for_service": "0x00008103", + "gatt_client_discover_primary_services": "0x00008139", + "gatt_client_discover_primary_services_by_uuid128": "0x0000816b", + "gatt_client_discover_primary_services_by_uuid16": "0x000081af", + "gatt_client_execute_write": "0x000081eb", + "gatt_client_find_included_services_for_service": "0x00008211", + "gatt_client_get_mtu": "0x0000823f", + "gatt_client_is_ready": "0x000082e9", + "gatt_client_listen_for_characteristic_value_updates": "0x000082ff", + "gatt_client_prepare_write": "0x00008321", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x0000835d", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x00008387", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x0000838d", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x000083bb", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x000083c1", + "gatt_client_read_multiple_characteristic_values": "0x000083ef", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x0000841f", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x0000844d", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x00008499", + "gatt_client_register_handler": "0x000084e5", + "gatt_client_reliable_write_long_value_of_characteristic": "0x000084f1", + "gatt_client_signed_write_without_response": "0x00008921", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x000089e5", + "gatt_client_write_client_characteristic_configuration": "0x00008a1f", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008a71", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008a81", + "gatt_client_write_long_value_of_characteristic": "0x00008abd", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008acd", + "gatt_client_write_value_of_characteristic": "0x00008b09", + "gatt_client_write_value_of_characteristic_without_response": "0x00008b3f", + "hci_add_event_handler": "0x0000a05d", + "hci_power_control": "0x0000a7f9", + "hci_register_acl_packet_handler": "0x0000a9ad", + "kv_commit": "0x0000b14d", + "kv_get": "0x0000b1a9", + "kv_init": "0x0000b1b5", + "kv_init_backend": "0x0000b235", + "kv_put": "0x0000b249", + "kv_remove": "0x0000b255", + "kv_remove_all": "0x0000b289", + "kv_value_modified": "0x0000b2b9", + "kv_value_modified_of_key": "0x0000b2d5", + "kv_visit": "0x0000b2e1", + "l2cap_add_event_handler": "0x0000b371", + "l2cap_can_send_packet_now": "0x0000b381", + "l2cap_create_le_credit_based_connection_request": "0x0000b53d", + "l2cap_credit_based_send": "0x0000b681", + "l2cap_credit_based_send_continue": "0x0000b6ad", + "l2cap_disconnect": "0x0000b729", + "l2cap_get_le_credit_based_connection_credits": "0x0000b979", + "l2cap_get_peer_mtu_for_local_cid": "0x0000b995", + "l2cap_init": "0x0000bd69", + "l2cap_le_send_flow_control_credit": "0x0000be5f", + "l2cap_max_le_mtu": "0x0000c169", + "l2cap_register_packet_handler": "0x0000c291", + "l2cap_register_service": "0x0000c29d", + "l2cap_request_can_send_now_event": "0x0000c3ad", + "l2cap_request_connection_parameter_update": "0x0000c3c7", + "l2cap_send_echo_request": "0x0000c8a1", + "l2cap_unregister_service": "0x0000c961", + "le_device_db_add": "0x0000c9b9", + "le_device_db_find": "0x0000ca91", + "le_device_db_from_key": "0x0000cabd", + "le_device_db_iter_cur": "0x0000cac5", + "le_device_db_iter_cur_key": "0x0000cac9", + "le_device_db_iter_init": "0x0000cacd", + "le_device_db_iter_next": "0x0000cad5", + "le_device_db_remove_key": "0x0000cafb", + "ll_aes_encrypt": "0x0000cb29", + "ll_config": "0x0000cba5", + "ll_free": "0x0000cbdb", + "ll_get_capabilities": "0x0000cbe5", + "ll_get_heap_free_size": "0x0000cc09", + "ll_get_states": "0x0000cc19", + "ll_hint_on_ce_len": "0x0000ccd5", + "ll_legacy_adv_set_interval": "0x0000cd0d", + "ll_malloc": "0x0000cd1d", + "ll_query_timing_info": "0x0000ce55", + "ll_register_hci_acl_previewer": "0x0000cea1", + "ll_scan_set_fixed_channel": "0x0000cf05", + "ll_set_adv_access_address": "0x0000d11d", + "ll_set_adv_coded_scheme": "0x0000d129", + "ll_set_conn_acl_report_latency": "0x0000d159", + "ll_set_conn_coded_scheme": "0x0000d189", + "ll_set_conn_latency": "0x0000d1b5", + "ll_set_conn_tx_power": "0x0000d1e5", + "ll_set_def_antenna": "0x0000d22d", + "ll_set_initiating_coded_scheme": "0x0000d249", + "ll_set_max_conn_number": "0x0000d255", + "nibble_for_char": "0x0001d3f9", + "platform_calibrate_rt_clk": "0x0001d493", "platform_call_on_stack": "0x000040ef", - "platform_config": "0x0001d405", - "platform_controller_run": "0x0001d529", - "platform_delete_timer": "0x0001d55d", - "platform_enable_irq": "0x0001d565", - "platform_get_gen_os_driver": "0x0001d59d", - "platform_get_link_layer_interf": "0x0001d5a9", - "platform_get_task_handle": "0x0001d5b1", - "platform_get_timer_counter": "0x0001d5c9", - "platform_get_us_time": "0x0001d5cd", - "platform_get_version": "0x0001d5d1", - "platform_hrng": "0x0001d5d9", - "platform_init_controller": "0x0001d5e1", - "platform_os_idle_resumed_hook": "0x0001d5fd", - "platform_patch_rf_init_data": "0x0001d601", - "platform_post_sleep_processing": "0x0001d60d", - "platform_pre_sleep_processing": "0x0001d613", - "platform_pre_suppress_ticks_and_sleep_processing": "0x0001d619", - "platform_printf": "0x0001d61d", - "platform_raise_assertion": "0x0001d631", - "platform_rand": "0x0001d645", - "platform_read_info": "0x0001d649", - "platform_read_persistent_reg": "0x0001d679", - "platform_reset": "0x0001d689", - "platform_rt_rc_auto_tune": "0x0001d6ad", - "platform_rt_rc_auto_tune2": "0x0001d6b5", - "platform_rt_rc_tune": "0x0001d73d", - "platform_set_abs_timer": "0x0001d751", - "platform_set_evt_callback": "0x0001d755", - "platform_set_evt_callback_table": "0x0001d769", - "platform_set_irq_callback": "0x0001d775", - "platform_set_irq_callback_table": "0x0001d791", - "platform_set_rf_clk_source": "0x0001d79d", - "platform_set_rf_init_data": "0x0001d7a9", - "platform_set_rf_power_mapping": "0x0001d7b5", - "platform_set_timer": "0x0001d7c1", - "platform_shutdown": "0x0001d7c5", - "platform_switch_app": "0x0001d7c9", - "platform_trace_raw": "0x0001d7f5", - "platform_write_persistent_reg": "0x0001d80d", - "printf_hexdump": "0x0001d81d", - "reverse_128": "0x0001db5d", - "reverse_24": "0x0001db63", - "reverse_256": "0x0001db69", - "reverse_48": "0x0001db6f", - "reverse_56": "0x0001db75", - "reverse_64": "0x0001db7b", - "reverse_bd_addr": "0x0001db81", - "reverse_bytes": "0x0001db87", - "sm_add_event_handler": "0x0001dd25", - "sm_address_resolution_lookup": "0x0001de7d", - "sm_authenticated": "0x0001e1f9", - "sm_authorization_decline": "0x0001e207", - "sm_authorization_grant": "0x0001e227", - "sm_authorization_state": "0x0001e247", - "sm_bonding_decline": "0x0001e261", - "sm_config": "0x0001e6bd", - "sm_config_conn": "0x0001e6d5", - "sm_encryption_key_size": "0x0001e88b", - "sm_just_works_confirm": "0x0001ee11", - "sm_le_device_key": "0x0001f149", - "sm_passkey_input": "0x0001f1df", - "sm_private_random_address_generation_get": "0x0001f599", - "sm_private_random_address_generation_get_mode": "0x0001f5a1", - "sm_private_random_address_generation_set_mode": "0x0001f5ad", - "sm_private_random_address_generation_set_update_period": "0x0001f5d5", - "sm_register_external_ltk_callback": "0x0001f711", - "sm_register_oob_data_callback": "0x0001f71d", - "sm_request_pairing": "0x0001f729", - "sm_send_security_request": "0x000201ff", - "sm_set_accepted_stk_generation_methods": "0x00020225", - "sm_set_authentication_requirements": "0x00020231", - "sm_set_encryption_key_size_range": "0x0002023d", - "sscanf_bd_addr": "0x00020599", - "sysSetPublicDeviceAddr": "0x0002094d", - "uuid128_to_str": "0x00020f61", - "uuid_add_bluetooth_prefix": "0x00020fb9", - "uuid_has_bluetooth_prefix": "0x00020fd9" + "platform_cancel_us_timer": "0x0001d497", + "platform_config": "0x0001d4ad", + "platform_controller_run": "0x0001d5d1", + "platform_create_us_timer": "0x0001d605", + "platform_delete_timer": "0x0001d619", + "platform_enable_irq": "0x0001d621", + "platform_get_gen_os_driver": "0x0001d659", + "platform_get_link_layer_interf": "0x0001d665", + "platform_get_task_handle": "0x0001d66d", + "platform_get_timer_counter": "0x0001d685", + "platform_get_us_time": "0x0001d689", + "platform_get_version": "0x0001d68d", + "platform_hrng": "0x0001d695", + "platform_init_controller": "0x0001d69d", + "platform_os_idle_resumed_hook": "0x0001d6b9", + "platform_patch_rf_init_data": "0x0001d6bd", + "platform_post_sleep_processing": "0x0001d6c9", + "platform_pre_sleep_processing": "0x0001d6cf", + "platform_pre_suppress_ticks_and_sleep_processing": "0x0001d6d5", + "platform_printf": "0x0001d6d9", + "platform_raise_assertion": "0x0001d6ed", + "platform_rand": "0x0001d701", + "platform_read_info": "0x0001d705", + "platform_read_persistent_reg": "0x0001d735", + "platform_reset": "0x0001d745", + "platform_rt_rc_auto_tune": "0x0001d769", + "platform_rt_rc_auto_tune2": "0x0001d771", + "platform_rt_rc_tune": "0x0001d7ed", + "platform_set_abs_timer": "0x0001d811", + "platform_set_evt_callback": "0x0001d815", + "platform_set_evt_callback_table": "0x0001d829", + "platform_set_irq_callback": "0x0001d835", + "platform_set_irq_callback_table": "0x0001d851", + "platform_set_rf_clk_source": "0x0001d85d", + "platform_set_rf_init_data": "0x0001d869", + "platform_set_rf_power_mapping": "0x0001d875", + "platform_set_timer": "0x0001d881", + "platform_shutdown": "0x0001d885", + "platform_switch_app": "0x0001d889", + "platform_trace_raw": "0x0001d8b5", + "platform_write_persistent_reg": "0x0001d8cd", + "printf_hexdump": "0x0001d8dd", + "reverse_128": "0x0001dc1d", + "reverse_24": "0x0001dc23", + "reverse_256": "0x0001dc29", + "reverse_48": "0x0001dc2f", + "reverse_56": "0x0001dc35", + "reverse_64": "0x0001dc3b", + "reverse_bd_addr": "0x0001dc41", + "reverse_bytes": "0x0001dc47", + "sm_add_event_handler": "0x0001dde5", + "sm_address_resolution_lookup": "0x0001df3d", + "sm_authenticated": "0x0001e2e5", + "sm_authorization_decline": "0x0001e2f3", + "sm_authorization_grant": "0x0001e313", + "sm_authorization_state": "0x0001e333", + "sm_bonding_decline": "0x0001e34d", + "sm_config": "0x0001e7a9", + "sm_config_conn": "0x0001e7dd", + "sm_encryption_key_size": "0x0001e997", + "sm_just_works_confirm": "0x0001ef1d", + "sm_le_device_key": "0x0001f25d", + "sm_passkey_input": "0x0001f2f3", + "sm_private_random_address_generation_get": "0x0001f6b5", + "sm_private_random_address_generation_get_mode": "0x0001f6bd", + "sm_private_random_address_generation_set_mode": "0x0001f6c9", + "sm_private_random_address_generation_set_update_period": "0x0001f6f1", + "sm_register_external_ltk_callback": "0x0001f82d", + "sm_register_oob_data_callback": "0x0001f839", + "sm_request_pairing": "0x0001f845", + "sm_send_security_request": "0x00020323", + "sm_set_accepted_stk_generation_methods": "0x00020349", + "sm_set_authentication_requirements": "0x00020355", + "sm_set_encryption_key_size_range": "0x00020365", + "sscanf_bd_addr": "0x000206b1", + "sysSetPublicDeviceAddr": "0x00020aad", + "uuid128_to_str": "0x000210d5", + "uuid_add_bluetooth_prefix": "0x0002112d", + "uuid_has_bluetooth_prefix": "0x0002114d" } \ No newline at end of file diff --git a/bundles/noos_mass_conn/ING9187xx/meta.json b/bundles/noos_mass_conn/ING9187xx/meta.json index 65cfa5d93..b3c9c40aa 100644 --- a/bundles/noos_mass_conn/ING9187xx/meta.json +++ b/bundles/noos_mass_conn/ING9187xx/meta.json @@ -4,15 +4,21 @@ }, "ram": { "base": 536870912, - "size": 4512 + "size": 4448 }, "rom": { "base": 16384, - "size": 125092 + "size": 125476 + }, + "var": { + "link_layer_features": { + "addr": 137972, + "value": "3ff9010400000000" + } }, "version": [ 1, 9, - 41 + 56 ] } \ No newline at end of file diff --git a/bundles/noos_mass_conn/ING9187xx/platform.bin b/bundles/noos_mass_conn/ING9187xx/platform.bin index 85a0ba47c..76c3c9723 100644 Binary files a/bundles/noos_mass_conn/ING9187xx/platform.bin and b/bundles/noos_mass_conn/ING9187xx/platform.bin differ diff --git a/bundles/noos_mass_conn/ING9188xx/apis.json b/bundles/noos_mass_conn/ING9188xx/apis.json index 99b313937..386b0bc94 100644 --- a/bundles/noos_mass_conn/ING9188xx/apis.json +++ b/bundles/noos_mass_conn/ING9188xx/apis.json @@ -6,262 +6,269 @@ "att_dispatch_server_can_send_now": "0x000057fd", "att_dispatch_server_request_can_send_now_event": "0x00005803", "att_emit_general_event": "0x000058b5", - "att_server_can_send_packet_now": "0x00005fe5", - "att_server_deferred_read_response": "0x00005fe9", - "att_server_get_mtu": "0x00006001", - "att_server_indicate": "0x00006079", - "att_server_init": "0x000060fd", - "att_server_notify": "0x00006139", - "att_server_register_packet_handler": "0x00006251", - "att_server_request_can_send_now_event": "0x0000625d", - "att_set_db": "0x00006279", - "att_set_read_callback": "0x0000628d", - "att_set_write_callback": "0x00006299", - "bd_addr_cmp": "0x00006409", - "bd_addr_copy": "0x0000640f", - "bd_addr_to_str": "0x00006419", - "big_endian_read_16": "0x00006451", - "big_endian_read_32": "0x00006459", - "big_endian_store_16": "0x0000646d", - "big_endian_store_32": "0x00006479", - "btstack_config": "0x000065b1", - "btstack_memory_pool_create": "0x000066ff", - "btstack_memory_pool_free": "0x00006729", - "btstack_memory_pool_get": "0x00006789", - "btstack_push_user_msg": "0x000067d1", - "btstack_push_user_runnable": "0x000067dd", - "btstack_reset": "0x000067e9", - "char_for_nibble": "0x00006aad", - "gap_add_dev_to_periodic_list": "0x000073c9", - "gap_add_whitelist": "0x000073d9", - "gap_aes_encrypt": "0x000073e5", - "gap_clear_white_lists": "0x0000741d", - "gap_clr_adv_set": "0x00007429", - "gap_clr_periodic_adv_list": "0x00007435", - "gap_create_connection_cancel": "0x00007441", - "gap_default_periodic_adv_sync_transfer_param": "0x0000744d", - "gap_disconnect": "0x00007465", - "gap_disconnect_all": "0x00007491", - "gap_ext_create_connection": "0x000074d1", - "gap_get_connection_parameter_range": "0x000075a9", - "gap_le_read_channel_map": "0x000075e1", - "gap_periodic_adv_create_sync": "0x0000764d", - "gap_periodic_adv_create_sync_cancel": "0x00007671", - "gap_periodic_adv_set_info_transfer": "0x0000767d", - "gap_periodic_adv_sync_transfer": "0x0000768d", - "gap_periodic_adv_sync_transfer_param": "0x0000769d", - "gap_periodic_adv_term_sync": "0x000076b9", - "gap_read_antenna_info": "0x00007741", - "gap_read_periodic_adv_list_size": "0x0000774d", - "gap_read_phy": "0x00007759", - "gap_read_remote_used_features": "0x00007765", - "gap_read_remote_version": "0x00007771", - "gap_read_rssi": "0x0000777d", - "gap_remove_whitelist": "0x00007789", - "gap_rmv_adv_set": "0x00007805", - "gap_rmv_dev_from_periodic_list": "0x00007811", - "gap_rx_test_v2": "0x00007821", - "gap_rx_test_v3": "0x00007831", - "gap_set_adv_set_random_addr": "0x0000787d", - "gap_set_callback_for_next_hci": "0x000078b9", - "gap_set_connection_cte_request_enable": "0x000078e1", - "gap_set_connection_cte_response_enable": "0x000078fd", - "gap_set_connection_cte_rx_param": "0x0000790d", - "gap_set_connection_cte_tx_param": "0x00007961", - "gap_set_connection_parameter_range": "0x000079ad", - "gap_set_connectionless_cte_tx_enable": "0x000079c9", - "gap_set_connectionless_cte_tx_param": "0x000079d9", - "gap_set_connectionless_iq_sampling_enable": "0x00007a35", - "gap_set_data_length": "0x00007a91", - "gap_set_def_phy": "0x00007aa9", - "gap_set_ext_adv_data": "0x00007ab9", - "gap_set_ext_adv_enable": "0x00007ad1", - "gap_set_ext_adv_para": "0x00007b41", - "gap_set_ext_scan_enable": "0x00007c19", - "gap_set_ext_scan_para": "0x00007c31", - "gap_set_ext_scan_response_data": "0x00007cd1", - "gap_set_host_channel_classification": "0x00007ce9", - "gap_set_periodic_adv_data": "0x00007cf9", - "gap_set_periodic_adv_enable": "0x00007d69", - "gap_set_periodic_adv_para": "0x00007d79", - "gap_set_periodic_adv_rx_enable": "0x00007d91", - "gap_set_phy": "0x00007da1", - "gap_set_random_device_address": "0x00007dbd", - "gap_start_ccm": "0x00007ded", - "gap_test_end": "0x00007e35", - "gap_tx_test_v2": "0x00007e41", - "gap_tx_test_v4": "0x00007e59", - "gap_update_connection_parameters": "0x00007e7d", - "gap_vendor_tx_continuous_wave": "0x00007ec1", - "gatt_client_cancel_write": "0x000083e9", - "gatt_client_discover_characteristic_descriptors": "0x0000840f", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x0000844f", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x0000849f", - "gatt_client_discover_characteristics_for_service": "0x000084ef", - "gatt_client_discover_primary_services": "0x00008525", - "gatt_client_discover_primary_services_by_uuid128": "0x00008557", - "gatt_client_discover_primary_services_by_uuid16": "0x0000859b", - "gatt_client_execute_write": "0x000085d7", - "gatt_client_find_included_services_for_service": "0x000085fd", - "gatt_client_get_mtu": "0x0000862b", - "gatt_client_is_ready": "0x000086cd", - "gatt_client_listen_for_characteristic_value_updates": "0x000086e3", - "gatt_client_prepare_write": "0x00008705", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x00008741", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x0000876b", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008771", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x0000879f", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x000087a5", - "gatt_client_read_multiple_characteristic_values": "0x000087d3", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x00008803", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x00008831", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x0000887d", - "gatt_client_register_handler": "0x000088c9", - "gatt_client_reliable_write_long_value_of_characteristic": "0x000088d5", - "gatt_client_signed_write_without_response": "0x00008d05", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008dc9", - "gatt_client_write_client_characteristic_configuration": "0x00008e03", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008e55", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008e65", - "gatt_client_write_long_value_of_characteristic": "0x00008ea1", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008eb1", - "gatt_client_write_value_of_characteristic": "0x00008eed", - "gatt_client_write_value_of_characteristic_without_response": "0x00008f23", - "hci_add_event_handler": "0x0000a465", - "hci_power_control": "0x0000ac09", - "hci_register_acl_packet_handler": "0x0000adbd", - "kv_commit": "0x0000b56d", - "kv_get": "0x0000b5c9", - "kv_init": "0x0000b5d5", - "kv_init_backend": "0x0000b655", - "kv_put": "0x0000b669", - "kv_remove": "0x0000b675", - "kv_remove_all": "0x0000b6a9", - "kv_value_modified": "0x0000b6d9", - "kv_value_modified_of_key": "0x0000b6f5", - "kv_visit": "0x0000b701", - "l2cap_add_event_handler": "0x0000b791", - "l2cap_can_send_packet_now": "0x0000b7a1", - "l2cap_create_le_credit_based_connection_request": "0x0000b95d", - "l2cap_credit_based_send": "0x0000baa1", - "l2cap_credit_based_send_continue": "0x0000bacd", - "l2cap_disconnect": "0x0000bb49", - "l2cap_get_le_credit_based_connection_credits": "0x0000bd99", - "l2cap_get_peer_mtu_for_local_cid": "0x0000bdb5", - "l2cap_init": "0x0000c189", - "l2cap_le_send_flow_control_credit": "0x0000c27f", - "l2cap_max_le_mtu": "0x0000c589", - "l2cap_register_packet_handler": "0x0000c6b1", - "l2cap_register_service": "0x0000c6bd", - "l2cap_request_can_send_now_event": "0x0000c7cd", - "l2cap_request_connection_parameter_update": "0x0000c7e7", - "l2cap_send_echo_request": "0x0000ccc1", - "l2cap_unregister_service": "0x0000cd81", - "le_device_db_add": "0x0000cdd9", - "le_device_db_find": "0x0000ceb1", - "le_device_db_from_key": "0x0000cedd", - "le_device_db_iter_cur": "0x0000cee5", - "le_device_db_iter_cur_key": "0x0000cee9", - "le_device_db_iter_init": "0x0000ceed", - "le_device_db_iter_next": "0x0000cef5", - "le_device_db_remove_key": "0x0000cf1b", - "ll_aes_encrypt": "0x0000cf49", - "ll_config": "0x0000cfc5", - "ll_free": "0x0000cffb", - "ll_get_heap_free_size": "0x0000d005", - "ll_hint_on_ce_len": "0x0000d019", - "ll_legacy_adv_set_interval": "0x0000d051", - "ll_malloc": "0x0000d061", - "ll_query_timing_info": "0x0000d199", - "ll_register_hci_acl_previewer": "0x0000d1e5", - "ll_scan_set_fixed_channel": "0x0000d249", - "ll_set_adv_access_address": "0x0000d461", - "ll_set_adv_coded_scheme": "0x0000d46d", - "ll_set_conn_acl_report_latency": "0x0000d49d", - "ll_set_conn_coded_scheme": "0x0000d4cd", - "ll_set_conn_latency": "0x0000d4f9", - "ll_set_conn_tx_power": "0x0000d529", - "ll_set_def_antenna": "0x0000d571", - "ll_set_initiating_coded_scheme": "0x0000d58d", - "ll_set_max_conn_number": "0x0000d599", - "nibble_for_char": "0x0001e61d", - "platform_calibrate_rt_clk": "0x0001e6b7", + "att_server_can_send_packet_now": "0x00005fe9", + "att_server_deferred_read_response": "0x00005fed", + "att_server_get_mtu": "0x00006005", + "att_server_indicate": "0x0000607d", + "att_server_init": "0x00006101", + "att_server_notify": "0x0000613d", + "att_server_register_packet_handler": "0x00006255", + "att_server_request_can_send_now_event": "0x00006261", + "att_set_db": "0x0000627d", + "att_set_read_callback": "0x00006291", + "att_set_write_callback": "0x0000629d", + "bd_addr_cmp": "0x0000640d", + "bd_addr_copy": "0x00006413", + "bd_addr_to_str": "0x0000641d", + "big_endian_read_16": "0x00006455", + "big_endian_read_32": "0x0000645d", + "big_endian_store_16": "0x00006471", + "big_endian_store_32": "0x0000647d", + "btstack_config": "0x000065b5", + "btstack_get_capabilities": "0x000065c1", + "btstack_memory_pool_create": "0x0000671b", + "btstack_memory_pool_free": "0x00006745", + "btstack_memory_pool_get": "0x000067a5", + "btstack_push_user_msg": "0x000067ed", + "btstack_push_user_runnable": "0x000067f9", + "btstack_reset": "0x00006805", + "char_for_nibble": "0x00006ac9", + "gap_add_dev_to_periodic_list": "0x000073d1", + "gap_add_whitelist": "0x000073e1", + "gap_aes_encrypt": "0x000073ed", + "gap_clear_white_lists": "0x00007425", + "gap_clr_adv_set": "0x00007431", + "gap_clr_periodic_adv_list": "0x0000743d", + "gap_create_connection_cancel": "0x00007449", + "gap_default_periodic_adv_sync_transfer_param": "0x00007455", + "gap_disconnect": "0x0000746d", + "gap_disconnect2": "0x00007475", + "gap_disconnect_all": "0x000074a1", + "gap_ext_create_connection": "0x000074e1", + "gap_get_connection_parameter_range": "0x000075b9", + "gap_le_read_channel_map": "0x000075f1", + "gap_periodic_adv_create_sync": "0x00007651", + "gap_periodic_adv_create_sync_cancel": "0x00007675", + "gap_periodic_adv_set_info_transfer": "0x00007681", + "gap_periodic_adv_sync_transfer": "0x00007691", + "gap_periodic_adv_sync_transfer_param": "0x000076a1", + "gap_periodic_adv_term_sync": "0x000076bd", + "gap_read_antenna_info": "0x00007745", + "gap_read_periodic_adv_list_size": "0x00007751", + "gap_read_phy": "0x0000775d", + "gap_read_remote_used_features": "0x00007769", + "gap_read_remote_version": "0x00007775", + "gap_read_rssi": "0x00007781", + "gap_read_white_lists_size": "0x0000778d", + "gap_remove_whitelist": "0x00007799", + "gap_rmv_adv_set": "0x00007815", + "gap_rmv_dev_from_periodic_list": "0x00007821", + "gap_rx_test_v2": "0x00007831", + "gap_rx_test_v3": "0x00007841", + "gap_set_adv_set_random_addr": "0x0000788d", + "gap_set_callback_for_next_hci": "0x000078b1", + "gap_set_connection_cte_request_enable": "0x000078d9", + "gap_set_connection_cte_response_enable": "0x000078f5", + "gap_set_connection_cte_rx_param": "0x00007905", + "gap_set_connection_cte_tx_param": "0x00007959", + "gap_set_connection_parameter_range": "0x000079a5", + "gap_set_connectionless_cte_tx_enable": "0x000079bd", + "gap_set_connectionless_cte_tx_param": "0x000079cd", + "gap_set_connectionless_iq_sampling_enable": "0x00007a29", + "gap_set_data_length": "0x00007a85", + "gap_set_def_phy": "0x00007a9d", + "gap_set_ext_adv_data": "0x00007aad", + "gap_set_ext_adv_enable": "0x00007ac5", + "gap_set_ext_adv_para": "0x00007b35", + "gap_set_ext_scan_enable": "0x00007bfd", + "gap_set_ext_scan_para": "0x00007c15", + "gap_set_ext_scan_response_data": "0x00007cb5", + "gap_set_host_channel_classification": "0x00007ccd", + "gap_set_periodic_adv_data": "0x00007cdd", + "gap_set_periodic_adv_enable": "0x00007d4d", + "gap_set_periodic_adv_para": "0x00007d5d", + "gap_set_periodic_adv_rx_enable": "0x00007d75", + "gap_set_phy": "0x00007d85", + "gap_set_random_device_address": "0x00007da1", + "gap_start_ccm": "0x00007dbd", + "gap_test_end": "0x00007e05", + "gap_tx_test_v2": "0x00007e11", + "gap_tx_test_v4": "0x00007e29", + "gap_update_connection_parameters": "0x00007e4d", + "gap_vendor_tx_continuous_wave": "0x00007e91", + "gatt_client_cancel_write": "0x000083b9", + "gatt_client_discover_characteristic_descriptors": "0x000083df", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x0000841f", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x0000846f", + "gatt_client_discover_characteristics_for_service": "0x000084bf", + "gatt_client_discover_primary_services": "0x000084f5", + "gatt_client_discover_primary_services_by_uuid128": "0x00008527", + "gatt_client_discover_primary_services_by_uuid16": "0x0000856b", + "gatt_client_execute_write": "0x000085a7", + "gatt_client_find_included_services_for_service": "0x000085cd", + "gatt_client_get_mtu": "0x000085fb", + "gatt_client_is_ready": "0x000086a5", + "gatt_client_listen_for_characteristic_value_updates": "0x000086bb", + "gatt_client_prepare_write": "0x000086dd", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x00008719", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x00008743", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008749", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x00008777", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x0000877d", + "gatt_client_read_multiple_characteristic_values": "0x000087ab", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x000087db", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x00008809", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x00008855", + "gatt_client_register_handler": "0x000088a1", + "gatt_client_reliable_write_long_value_of_characteristic": "0x000088ad", + "gatt_client_signed_write_without_response": "0x00008cdd", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008da1", + "gatt_client_write_client_characteristic_configuration": "0x00008ddb", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008e2d", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008e3d", + "gatt_client_write_long_value_of_characteristic": "0x00008e79", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008e89", + "gatt_client_write_value_of_characteristic": "0x00008ec5", + "gatt_client_write_value_of_characteristic_without_response": "0x00008efb", + "hci_add_event_handler": "0x0000a435", + "hci_power_control": "0x0000abd1", + "hci_register_acl_packet_handler": "0x0000ad85", + "kv_commit": "0x0000b525", + "kv_get": "0x0000b581", + "kv_init": "0x0000b58d", + "kv_init_backend": "0x0000b60d", + "kv_put": "0x0000b621", + "kv_remove": "0x0000b62d", + "kv_remove_all": "0x0000b661", + "kv_value_modified": "0x0000b691", + "kv_value_modified_of_key": "0x0000b6ad", + "kv_visit": "0x0000b6b9", + "l2cap_add_event_handler": "0x0000b749", + "l2cap_can_send_packet_now": "0x0000b759", + "l2cap_create_le_credit_based_connection_request": "0x0000b915", + "l2cap_credit_based_send": "0x0000ba59", + "l2cap_credit_based_send_continue": "0x0000ba85", + "l2cap_disconnect": "0x0000bb01", + "l2cap_get_le_credit_based_connection_credits": "0x0000bd51", + "l2cap_get_peer_mtu_for_local_cid": "0x0000bd6d", + "l2cap_init": "0x0000c141", + "l2cap_le_send_flow_control_credit": "0x0000c237", + "l2cap_max_le_mtu": "0x0000c541", + "l2cap_register_packet_handler": "0x0000c669", + "l2cap_register_service": "0x0000c675", + "l2cap_request_can_send_now_event": "0x0000c785", + "l2cap_request_connection_parameter_update": "0x0000c79f", + "l2cap_send_echo_request": "0x0000cc79", + "l2cap_unregister_service": "0x0000cd39", + "le_device_db_add": "0x0000cd91", + "le_device_db_find": "0x0000ce69", + "le_device_db_from_key": "0x0000ce95", + "le_device_db_iter_cur": "0x0000ce9d", + "le_device_db_iter_cur_key": "0x0000cea1", + "le_device_db_iter_init": "0x0000cea5", + "le_device_db_iter_next": "0x0000cead", + "le_device_db_remove_key": "0x0000ced3", + "ll_aes_encrypt": "0x0000cf01", + "ll_config": "0x0000cf7d", + "ll_free": "0x0000cfb3", + "ll_get_capabilities": "0x0000cfbd", + "ll_get_heap_free_size": "0x0000cfe1", + "ll_get_states": "0x0000cff1", + "ll_hint_on_ce_len": "0x0000d0ad", + "ll_legacy_adv_set_interval": "0x0000d0e5", + "ll_malloc": "0x0000d0f5", + "ll_query_timing_info": "0x0000d22d", + "ll_register_hci_acl_previewer": "0x0000d279", + "ll_scan_set_fixed_channel": "0x0000d2dd", + "ll_set_adv_access_address": "0x0000d4f5", + "ll_set_adv_coded_scheme": "0x0000d501", + "ll_set_conn_acl_report_latency": "0x0000d531", + "ll_set_conn_coded_scheme": "0x0000d561", + "ll_set_conn_latency": "0x0000d58d", + "ll_set_conn_tx_power": "0x0000d5bd", + "ll_set_def_antenna": "0x0000d605", + "ll_set_initiating_coded_scheme": "0x0000d621", + "ll_set_max_conn_number": "0x0000d62d", + "nibble_for_char": "0x0001e6b1", + "platform_calibrate_rt_clk": "0x0001e74b", "platform_call_on_stack": "0x000040ef", - "platform_config": "0x0001e6bd", - "platform_controller_run": "0x0001e7e1", - "platform_delete_timer": "0x0001e815", - "platform_enable_irq": "0x0001e81d", - "platform_get_gen_os_driver": "0x0001e855", - "platform_get_link_layer_interf": "0x0001e861", - "platform_get_task_handle": "0x0001e869", - "platform_get_timer_counter": "0x0001e881", - "platform_get_us_time": "0x0001e885", - "platform_get_version": "0x0001e889", - "platform_hrng": "0x0001e891", - "platform_init_controller": "0x0001e899", - "platform_os_idle_resumed_hook": "0x0001e8b5", - "platform_patch_rf_init_data": "0x0001e8b9", - "platform_post_sleep_processing": "0x0001e8c5", - "platform_pre_sleep_processing": "0x0001e8cb", - "platform_pre_suppress_ticks_and_sleep_processing": "0x0001e8d1", - "platform_printf": "0x0001e8d5", - "platform_raise_assertion": "0x0001e8e9", - "platform_rand": "0x0001e8fd", - "platform_read_info": "0x0001e901", - "platform_read_persistent_reg": "0x0001e931", - "platform_reset": "0x0001e941", - "platform_rt_rc_auto_tune": "0x0001e965", - "platform_rt_rc_auto_tune2": "0x0001e96d", - "platform_rt_rc_tune": "0x0001e9f5", - "platform_set_abs_timer": "0x0001ea09", - "platform_set_evt_callback": "0x0001ea0d", - "platform_set_evt_callback_table": "0x0001ea21", - "platform_set_irq_callback": "0x0001ea2d", - "platform_set_irq_callback_table": "0x0001ea49", - "platform_set_rf_clk_source": "0x0001ea55", - "platform_set_rf_init_data": "0x0001ea61", - "platform_set_rf_power_mapping": "0x0001ea6d", - "platform_set_timer": "0x0001ea79", - "platform_shutdown": "0x0001ea7d", - "platform_switch_app": "0x0001ea81", - "platform_trace_raw": "0x0001eaad", - "platform_write_persistent_reg": "0x0001eac5", - "printf_hexdump": "0x0001ead5", - "reverse_128": "0x0001ee4d", - "reverse_24": "0x0001ee53", - "reverse_256": "0x0001ee59", - "reverse_48": "0x0001ee5f", - "reverse_56": "0x0001ee65", - "reverse_64": "0x0001ee6b", - "reverse_bd_addr": "0x0001ee71", - "reverse_bytes": "0x0001ee77", - "sm_add_event_handler": "0x0001f165", - "sm_address_resolution_lookup": "0x0001f2bd", - "sm_authenticated": "0x0001f639", - "sm_authorization_decline": "0x0001f647", - "sm_authorization_grant": "0x0001f667", - "sm_authorization_state": "0x0001f687", - "sm_bonding_decline": "0x0001f6a1", - "sm_config": "0x0001fafd", - "sm_config_conn": "0x0001fb15", - "sm_encryption_key_size": "0x0001fccb", - "sm_just_works_confirm": "0x00020251", - "sm_le_device_key": "0x00020589", - "sm_passkey_input": "0x0002061f", - "sm_private_random_address_generation_get": "0x000209d9", - "sm_private_random_address_generation_get_mode": "0x000209e1", - "sm_private_random_address_generation_set_mode": "0x000209ed", - "sm_private_random_address_generation_set_update_period": "0x00020a15", - "sm_register_external_ltk_callback": "0x00020b51", - "sm_register_oob_data_callback": "0x00020b5d", - "sm_request_pairing": "0x00020b69", - "sm_send_security_request": "0x0002163f", - "sm_set_accepted_stk_generation_methods": "0x00021665", - "sm_set_authentication_requirements": "0x00021671", - "sm_set_encryption_key_size_range": "0x0002167d", - "sscanf_bd_addr": "0x000219d9", - "sysSetPublicDeviceAddr": "0x00021d8d", - "uuid128_to_str": "0x00022539", - "uuid_add_bluetooth_prefix": "0x00022591", - "uuid_has_bluetooth_prefix": "0x000225b1" + "platform_cancel_us_timer": "0x0001e74f", + "platform_config": "0x0001e765", + "platform_controller_run": "0x0001e889", + "platform_create_us_timer": "0x0001e8bd", + "platform_delete_timer": "0x0001e8d1", + "platform_enable_irq": "0x0001e8d9", + "platform_get_gen_os_driver": "0x0001e911", + "platform_get_link_layer_interf": "0x0001e91d", + "platform_get_task_handle": "0x0001e925", + "platform_get_timer_counter": "0x0001e93d", + "platform_get_us_time": "0x0001e941", + "platform_get_version": "0x0001e945", + "platform_hrng": "0x0001e94d", + "platform_init_controller": "0x0001e955", + "platform_os_idle_resumed_hook": "0x0001e971", + "platform_patch_rf_init_data": "0x0001e975", + "platform_post_sleep_processing": "0x0001e981", + "platform_pre_sleep_processing": "0x0001e987", + "platform_pre_suppress_ticks_and_sleep_processing": "0x0001e98d", + "platform_printf": "0x0001e991", + "platform_raise_assertion": "0x0001e9a5", + "platform_rand": "0x0001e9b9", + "platform_read_info": "0x0001e9bd", + "platform_read_persistent_reg": "0x0001e9ed", + "platform_reset": "0x0001e9fd", + "platform_rt_rc_auto_tune": "0x0001ea21", + "platform_rt_rc_auto_tune2": "0x0001ea29", + "platform_rt_rc_tune": "0x0001eaa5", + "platform_set_abs_timer": "0x0001eac9", + "platform_set_evt_callback": "0x0001eacd", + "platform_set_evt_callback_table": "0x0001eae1", + "platform_set_irq_callback": "0x0001eaed", + "platform_set_irq_callback_table": "0x0001eb09", + "platform_set_rf_clk_source": "0x0001eb15", + "platform_set_rf_init_data": "0x0001eb21", + "platform_set_rf_power_mapping": "0x0001eb2d", + "platform_set_timer": "0x0001eb39", + "platform_shutdown": "0x0001eb3d", + "platform_switch_app": "0x0001eb41", + "platform_trace_raw": "0x0001eb6d", + "platform_write_persistent_reg": "0x0001eb85", + "printf_hexdump": "0x0001eb95", + "reverse_128": "0x0001ef0d", + "reverse_24": "0x0001ef13", + "reverse_256": "0x0001ef19", + "reverse_48": "0x0001ef1f", + "reverse_56": "0x0001ef25", + "reverse_64": "0x0001ef2b", + "reverse_bd_addr": "0x0001ef31", + "reverse_bytes": "0x0001ef37", + "sm_add_event_handler": "0x0001f225", + "sm_address_resolution_lookup": "0x0001f37d", + "sm_authenticated": "0x0001f725", + "sm_authorization_decline": "0x0001f733", + "sm_authorization_grant": "0x0001f753", + "sm_authorization_state": "0x0001f773", + "sm_bonding_decline": "0x0001f78d", + "sm_config": "0x0001fbe9", + "sm_config_conn": "0x0001fc1d", + "sm_encryption_key_size": "0x0001fdd7", + "sm_just_works_confirm": "0x0002035d", + "sm_le_device_key": "0x0002069d", + "sm_passkey_input": "0x00020733", + "sm_private_random_address_generation_get": "0x00020af5", + "sm_private_random_address_generation_get_mode": "0x00020afd", + "sm_private_random_address_generation_set_mode": "0x00020b09", + "sm_private_random_address_generation_set_update_period": "0x00020b31", + "sm_register_external_ltk_callback": "0x00020c6d", + "sm_register_oob_data_callback": "0x00020c79", + "sm_request_pairing": "0x00020c85", + "sm_send_security_request": "0x00021763", + "sm_set_accepted_stk_generation_methods": "0x00021789", + "sm_set_authentication_requirements": "0x00021795", + "sm_set_encryption_key_size_range": "0x000217a5", + "sscanf_bd_addr": "0x00021af1", + "sysSetPublicDeviceAddr": "0x00021eed", + "uuid128_to_str": "0x000226ad", + "uuid_add_bluetooth_prefix": "0x00022705", + "uuid_has_bluetooth_prefix": "0x00022725" } \ No newline at end of file diff --git a/bundles/noos_mass_conn/ING9188xx/meta.json b/bundles/noos_mass_conn/ING9188xx/meta.json index c278bf691..9f7725884 100644 --- a/bundles/noos_mass_conn/ING9188xx/meta.json +++ b/bundles/noos_mass_conn/ING9188xx/meta.json @@ -4,15 +4,21 @@ }, "ram": { "base": 536870912, - "size": 4512 + "size": 4448 }, "rom": { "base": 16384, - "size": 131140 + "size": 131524 + }, + "var": { + "link_layer_features": { + "addr": 143676, + "value": "3ff9ff0700000000" + } }, "version": [ 1, 9, - 41 + 56 ] } \ No newline at end of file diff --git a/bundles/noos_mass_conn/ING9188xx/platform.bin b/bundles/noos_mass_conn/ING9188xx/platform.bin index 8948230d6..d8f0f9f26 100644 Binary files a/bundles/noos_mass_conn/ING9188xx/platform.bin and b/bundles/noos_mass_conn/ING9188xx/platform.bin differ diff --git a/bundles/noos_mass_conn/inc/bluetooth.h b/bundles/noos_mass_conn/inc/bluetooth.h index 44c58585a..8d306ff5e 100644 --- a/bundles/noos_mass_conn/inc/bluetooth.h +++ b/bundles/noos_mass_conn/inc/bluetooth.h @@ -40,10 +40,14 @@ typedef uint8_t bd_addr_t[BD_ADDR_LEN]; typedef enum { BD_ADDR_TYPE_LE_PUBLIC = 0, BD_ADDR_TYPE_LE_RANDOM = 0x01, - BD_ADDR_TYPE_LE_RESOVLED_PUB = 0x02, - BD_ADDR_TYPE_LE_RESOVLED_RAN = 0x03 + BD_ADDR_TYPE_LE_RESOLVED_PUB = 0x02, + BD_ADDR_TYPE_LE_RESOLVED_RAN = 0x03 } bd_addr_type_t; +// back-compatibility for typos +#define BD_ADDR_TYPE_LE_RESOVLED_PUB BD_ADDR_TYPE_LE_RESOLVED_PUB +#define BD_ADDR_TYPE_LE_RESOVLED_RAN BD_ADDR_TYPE_LE_RESOLVED_RAN + /** * @brief link key */ @@ -718,7 +722,7 @@ typedef enum { #define SM_AUTHREQ_NO_BONDING 0x00 #define SM_AUTHREQ_BONDING 0x01 #define SM_AUTHREQ_MITM_PROTECTION 0x04 -#define SM_AUTHREQ_SC 0x08 +#define SM_AUTHREQ_SC 0x08 // support of LE Secure Connections pairing // Key distribution flags used by spec #define SM_KEYDIST_ENC_KEY 0X01 diff --git a/bundles/noos_mass_conn/inc/btstack_defines.h b/bundles/noos_mass_conn/inc/btstack_defines.h index a8d08006c..25f1463b0 100644 --- a/bundles/noos_mass_conn/inc/btstack_defines.h +++ b/bundles/noos_mass_conn/inc/btstack_defines.h @@ -385,6 +385,20 @@ */ #define SM_EVENT_STATE_CHANGED 0xDC + /** + * @format H1B1 + * @param handle + * @param show calculated numeric value that needs to be compared + */ +#define SM_EVENT_NUMERIC_COMPARISON_REQUEST 0xDD + +/** + * @format PP + * @param irk + * @param dhk + */ +#define SM_EVENT_IRK_DHK_RESULT 0xDE + // GAP /** diff --git a/bundles/noos_mass_conn/inc/btstack_event.h b/bundles/noos_mass_conn/inc/btstack_event.h index e5ab49a55..dc87fa82a 100644 --- a/bundles/noos_mass_conn/inc/btstack_event.h +++ b/bundles/noos_mass_conn/inc/btstack_event.h @@ -107,6 +107,21 @@ uint32_t btstack_push_user_runnable(f_btstack_user_runnable fun, void *data, con */ uint8_t btstack_reset(void); +typedef struct btstack_capabilities +{ + uint16_t adv_set_num; // max number of advertising sets + uint16_t conn_num; // max number of connections + uint16_t max_mtu; // max MTU + uint16_t device_db_num; // max number of devices in database +} btstack_capabilities_t; + +/** + * @brief Get BT stack capabilities. + * + * @param[out] capabilities see `btstack_capabilities_t`. + */ +void btstack_get_capabilities(btstack_capabilities_t *capabilities); + /*** * @brief Get subevent code for le event * @param event packet @@ -780,6 +795,26 @@ static __INLINE hci_con_handle_t sm_event_numeric_comparison_get_handle(const ui return little_endian_read_16(event, 2); } +/** + * @brief Get field addr_type from event SM_EVENT_NUMERIC_COMPARISON_REQUEST + * @param event packet + * @return addr_type + * @note: btstack_type 1 + */ +static __INLINE uint8_t sm_event_numeric_comparison_get_addr_type(const uint8_t * event){ + return *decode_event_offset(event, uint8_t, 4); +} + +/** + * @brief Get field address from event SM_EVENT_NUMERIC_COMPARISON_REQUEST + * @param event packet + * @param Pointer to storage for address + * @note: btstack_type B + */ +static __INLINE void sm_event_numeric_comparison_get_address(const uint8_t * event, uint8_t * address){ + reverse_bd_addr(decode_event_offset(event, uint8_t, 5), address); +} + /** * @brief Get field compare value from event SM_EVENT_NUMERIC_COMPARISON_REQUEST * @param event packet @@ -790,6 +825,24 @@ static __INLINE uint32_t sm_event_numeric_comparison_get_compare_value(const uin return little_endian_read_32(event, 11); } +/** + * @brief Get IRK from event SM_EVENT_IRK_DHK_RESULT + * @param event packet + * @return irk + */ +static __INLINE const uint8_t *sm_event_irk_dhk_result_get_irk(const uint8_t *event) { + return *decode_event_offset(event, uint8_t *, 2); +} + +/** + * @brief Get DHK from event SM_EVENT_IRK_DHK_RESULT + * @param event packet + * @return dhk + */ +static __INLINE const uint8_t *sm_event_irk_dhk_result_get_dhk(const uint8_t *event) { + return *decode_event_offset(event, uint8_t *, 2 + sizeof(uintptr_t)); +} + /** * @brief Get field handle from event GAP_EVENT_SECURITY_LEVEL * @param event packet diff --git a/bundles/noos_mass_conn/inc/gap.h b/bundles/noos_mass_conn/inc/gap.h index 94ec41d4e..020bb0b27 100644 --- a/bundles/noos_mass_conn/inc/gap.h +++ b/bundles/noos_mass_conn/inc/gap.h @@ -54,11 +54,27 @@ uint8_t gap_set_random_device_address(const uint8_t *address); /** * @brief Disconnect connection with handle * + * This is equivalent to `gap_disconnect2(handle, 0x13)`. + * * @param handle Used to identify an advertising set. Range: 0x00 to 0xEF * @return 0: Message is sent out or the connection already release */ uint8_t gap_disconnect(hci_con_handle_t handle); +/** + * @brief Disconnect connection with handle + * + * @param handle Used to identify an advertising set. Range: 0x00 to 0xEF + * @param reason Reason: + * - Authentication Failure error code (0x05) + * - Other End Terminated Connection error codes (0x13 to 0x15) + * - Unsupported Remote Feature error code (0x1A) + * - Pairing with Unit Key Not Supported error code (0x29) + * - Unacceptable Connection Parameters error code (0x3B) + * @return 0: Message is sent out or the connection already release + */ +uint8_t gap_disconnect2(hci_con_handle_t handle, uint8_t reason); + /** * @brief disconnect multi-connections */ @@ -70,7 +86,7 @@ void gap_disconnect_all(void); * @param[in] addtype BLE address type * @return 0: Message is sent to controller */ -uint8_t gap_add_whitelist(const uint8_t *address,bd_addr_type_t addtype); +uint8_t gap_add_whitelist(const uint8_t *address, bd_addr_type_t addtype); /** * @brief remove whitelist from controller @@ -79,7 +95,7 @@ uint8_t gap_add_whitelist(const uint8_t *address,bd_addr_type_t addtype); * @param addtype BLE address type * @return 0: Message is sent to controller */ -uint8_t gap_remove_whitelist(const uint8_t *address,bd_addr_type_t addtype); +uint8_t gap_remove_whitelist(const uint8_t *address, bd_addr_type_t addtype); /** * @brief clear white lists in controller @@ -88,6 +104,122 @@ uint8_t gap_remove_whitelist(const uint8_t *address,bd_addr_type_t addtype); */ uint8_t gap_clear_white_lists(void); +/** + * @brief read white lists size in controller + * + * @return 0: message sent out others: failed + */ +uint8_t gap_read_white_lists_size(void); + +/** + * @brief Add one device to the resolving list used to generate and resolve + * Resolvable Private Addresses in the Controller. + * + * @param address peer identity address + * @param addtype peer identity address type + * @param peer_irk IRK of the peer device + * @param local_irk IRK of the local device + * @return 0: message sent out others: failed + */ +// uint8_t gap_add_dev_to_resolving_list(const uint8_t *address, bd_addr_type_t addtype, +// const uint8_t *peer_irk, const uint8_t *local_irk); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Remove one device from the resolving list used to resolve Resolvable + * Private Addresses in the Controller. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_remove_dev_from_resolving_list(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Remove all devices from the resolving list used to resolve Resolvable + * Private Addresses in the Controller. + * + * @return 0: message sent out others: failed + */ +// uint8_t gap_clear_resolving_list(void); +// WARNING: ^^^ this API is not available in this release + + +// LE Privacy Mode +typedef enum privacy_mode +{ + PRIVACY_MODE_NETWORK = 0, // Network Privacy Mode (default) + // Identity address is not accepted if IRK is available + PRIVACY_MODE_DEVICE = 1, // Device Privacy Mode + // Identity address is accepted even if IRK is available +} privacy_mode_t; + +/** + * @brief Specify the privacy mode to be used for a given entry on the resolving list. + * + * @param address peer identity address + * @param addtype peer identity address type + * @param privacy_mode privacy mode for this peer device + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_privacy_mode(const uint8_t *address, bd_addr_type_t addtype, +// privacy_mode_t privacy_mode); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Get the current peer Resolvable Private Address being used for the + * corresponding peer Public and Random (static) Identity Address. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_read_peer_resolving_addr(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Get the current local Resolvable Private Address being used for the + * corresponding peer Identity Address. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_read_local_resolving_addr(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Enable resolution of Resolvable Private Addresses in the Controller. + * + * @param enable address resolution enable + * 0: disabled (default) + * 1: enabled + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_addr_resolution_enable(const uint8_t enable); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Set the length of time the Controller uses a Resolvable Private Address + * before a new resolvable private address is generated and starts being used. + * + * @param rpa_timeout RPA_Timeout measured in seconds + * Range: 0x0001 to 0x0E10 + * Time range: 1 s to 1 hour + * Default: 0x0384 (900 s or 15 minutes) + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_resolvable_private_addr_timeout(uint16_t rpa_timeout); +// WARNING: ^^^ this API is not available in this release + + /** * @brief read rssi value of a appointed hci connection * @@ -290,13 +422,13 @@ typedef enum scan_filter_policy SCAN_ACCEPT_WLIST_EXCEPT_NOT_DIRECTED, // Accept all advertising packets except directed advertising packets // where the initiator's identity address does not address this device - SCAN_ACCEPT_ALL_EXCEPT_IDENTITY_NOT_MATCH, + // SCAN_ACCEPT_ALL_EXCEPT_IDENTITY_NOT_MATCH, // Accept all advertising packets except: // 1. advertising packets where the advertiser's identity address is not in // the White List; and // 2. directed advertising packets where the initiator's identity address // does not address this device - SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH + // SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH } scan_filter_policy_t; /** @@ -318,6 +450,9 @@ uint8_t gap_set_ext_scan_para(const bd_addr_type_t own_addr_type, const scan_fil /** * @brief to set the extended scan response data for an advertising set * + * Note: Scan response data is cleared after `gap_set_ext_adv_para()` on the same + * advertising set handle. + * * @param adv_handle handle of advertising set handle * * @param length length of advertising data @@ -482,6 +617,9 @@ typedef enum adv_data_frag_pref /** * @brief to set extended advertising data * + * Note: Advertising data is cleared after `gap_set_ext_adv_para()` on the same + * advertising set handle. + * * @param adv_handle advertising set handle. * * @param length advertising data length @@ -497,6 +635,9 @@ uint8_t gap_set_ext_adv_data(const uint8_t adv_handle, uint16_t length, const ui /** * @brief LE Set Periodic Advertising Data command * + * Note: Advertising data is cleared after `gap_set_ext_adv_para()` and + * `gap_set_periodic_adv_para()` on the same advertising set handle. + * * @param adv_handle advertising set handle. * * @param length advertising data length (<= 1650 bytes) @@ -723,6 +864,7 @@ typedef struct { // Supervision timeout for the LE Link, unit is 10ms uint16_t supervision_timeout; // Informative parameter recommending the min/max length of connection event needed for this LE connection + // unit is 625us uint16_t min_ce_len; uint16_t max_ce_len; } conn_para_t; diff --git a/bundles/noos_mass_conn/inc/le_device_db.h b/bundles/noos_mass_conn/inc/le_device_db.h index b81d04f5a..68de61b61 100644 --- a/bundles/noos_mass_conn/inc/le_device_db.h +++ b/bundles/noos_mass_conn/inc/le_device_db.h @@ -16,14 +16,15 @@ typedef struct le_device_memory_db { // Identification uint8_t addr_type; - uint8_t key_size; - uint8_t authenticated; - uint8_t authorized; + uint8_t key_size; + uint8_t authenticated; + uint8_t authorized:1; + uint8_t sm_sc:1; bd_addr_t addr; sm_key_t irk; - // Stored pairing information allows to re-establish an enncrypted connection + // Stored pairing information allows to re-establish an encrypted connection // with a peripheral that doesn't have any persistent memory sm_key_t ltk; uint16_t ediv; @@ -36,7 +37,6 @@ typedef struct le_device_memory_db { // Signed Writes by us sm_key_t local_csrk; uint32_t local_counter; - } le_device_memory_db_t; #pragma pack (pop) diff --git a/bundles/noos_mass_conn/inc/ll_api.h b/bundles/noos_mass_conn/inc/ll_api.h index 24558161d..f84ac1c76 100644 --- a/bundles/noos_mass_conn/inc/ll_api.h +++ b/bundles/noos_mass_conn/inc/ll_api.h @@ -33,6 +33,25 @@ typedef enum ll_config_item_e LL_CFG_FEATURE_SET_MASK, } ll_config_item_t; +typedef struct ll_capabilities +{ + const uint8_t *features; // Link Layer features + uint16_t adv_set_num; // max number of advertising sets + uint16_t conn_num; // max number of connections + uint16_t whitelist_size; // size of whitelists + uint16_t resolving_list_size; // size of resolving list + uint16_t periodic_advertiser_list_size; // size of periodic advertiser list + uint16_t adv_dup_filter_size; // size of items for filtering + // advertising duplication +} ll_capabilities_t; + +/** + * @brief Get Link Layer capabilities. + * + * @param[out] capabilities see `ll_capabilities_t`. + */ +void ll_get_capabilities(ll_capabilities_t *capabilities); + /** **************************************************************************************** * @brief Config LL specific parameters @@ -43,6 +62,26 @@ typedef enum ll_config_item_e */ void ll_config(ll_config_item_t item, uint32_t value); +/** + **************************************************************************************** + * @brief Get states of LL + * + * Note: Parameters can be set to NULL if the relevant states are not needed. + * + * @param[out] adv_states[1] states of all advertising sets + * Bit[n]: advertising set n is enabled + * @param[out] conn_states[1] states of all connections + * Bit[n]: connection n is active + * @param[out] sync_states[1] states of all synchronized periodic adv sets + * Bit[n]: sync_handle n is active + * @param[out] other_states[1] other states: + * Bit[0]: if scanning is ON + * Bit[1]: if initiating is ON + **************************************************************************************** + */ +void ll_get_states(uint32_t *adv_states, uint32_t *conn_states, + uint32_t *sync_states, uint32_t *other_states); + /** **************************************************************************************** * @brief set Tx power range diff --git a/bundles/noos_mass_conn/inc/platform_api.h b/bundles/noos_mass_conn/inc/platform_api.h index bbc633bd3..5783c773e 100644 --- a/bundles/noos_mass_conn/inc/platform_api.h +++ b/bundles/noos_mass_conn/inc/platform_api.h @@ -113,7 +113,7 @@ typedef enum PLATFORM_CB_EVT_LLE_INIT, // when allocation on heap fails (heap out of memory) - // NOTE: param (void *data) is cased from an integer identifying which heap is OOM: + // NOTE: param (void *data) is casted from an integer identifying which heap is OOM: // * 0: FreeRTOS's heap; // * 1: Link Layer's heap; // * 2: Link Layer's task pool. @@ -327,7 +327,7 @@ typedef struct /** **************************************************************************************** - * @brief Get heap status + * @brief Get status of built-in RTOS's heap * * @param[out] status heap status **************************************************************************************** @@ -378,7 +378,7 @@ void platform_switch_app(const uint32_t app_addr); * in power saving mode. * * For ING918: the least FOUR significant bits of `value` are saved; - * For ING916: the least TWO significant bits of `value` are saved. + * For ING916: the least FIVE significant bits of `value` are saved. * * @param[in] value value **************************************************************************************** @@ -468,8 +468,13 @@ typedef enum PLATFORM_CFG_PS_DBG_4, // Debugging parameters for ING916. Default (0) // Bit [0]: `platform_shutdown` uses DEEPER SLEEP (1) or SLEEP (0) PLATFORM_CFG_FAST_DEEP_SLEEP_TIME_REDUCTION, // sleep time reduction (fast deep sleep mode) in us. - // Requirement: < PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION + // Requirement: <= PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION + // When equal to PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION, fast deep sleep mode is not used // Only available for ING916 (default: ~2000us) + PLATFORM_CFG_AUTO_REDUCE_CLOCK_FREQ, // automatic reduce CPU clock frequency in these circumstances: + // * the default IDLE procedure + // * when entering sleep modes + // Only available for ING916 (default: Enabled) } platform_cfg_item_t; typedef enum @@ -608,7 +613,15 @@ uint64_t platform_get_us_time(void); */ void platform_printf(const char *format, ...); -// NOTE: for debug only +/** + **************************************************************************************** + * @brief Set public device address + * + * NOTE: This is for debug only. + * + * @param[in] addr device address in little-endian. + **************************************************************************************** + */ void sysSetPublicDeviceAddr(const unsigned char *addr); // set rf source @@ -775,6 +788,55 @@ void platform_set_abs_timer(f_platform_timer_callback callback, uint32_t abs_tim */ void platform_delete_timer(f_platform_timer_callback callback); +typedef void * platform_us_timer_handle_t; + +/** + **************************************************************************************** + * @brief Callback function of microsecond (us) resolution timer + * + * @param[in] timer_handle handle of this timer + * @param[in] time_us internal timer counter when invoke this callback + * @param[in] param user parameter + * @return (must be NULL) + **************************************************************************************** + */ +typedef void * (* f_platform_us_timer_callback)(platform_us_timer_handle_t timer_handle, + uint64_t time_us, void *param); + +/** + **************************************************************************************** + * @brief Setup a single-shot platform timer with microsecond (us) resolution + * + * Although `abs_time` is in microsecond (us), callback is **not guaranteed** + * to be invoked with such resolution. + * + * This type of timers are much like `platform_set_timer`, except that: + * 1. resolution is higher; + * 2. callback is invoked in the context of an ISR. + * + * @param[in] abs_time when `platform_get_us_timer() == abs_time`, callback is invoked. + * @param[in] callback the callback function + * @param[in] param user parameter + * @return a non-NULL value when succeeded. Otherwise, NULL. + **************************************************************************************** + */ +platform_us_timer_handle_t platform_create_us_timer(uint64_t abs_time, + f_platform_us_timer_callback callback, void *param); + +/** + **************************************************************************************** + * @brief Cancel a platform timer previously created by `platform_create_us_timer` + * + * When a timer not needed any more, use this API to cancel it. + * + * @param[in] timer_handle handle of the timer + * @return 0 if succeeded else non-0 + * Note: non-0 means the callback function of the timer + * is executing. + **************************************************************************************** + */ +int platform_cancel_us_timer(platform_us_timer_handle_t timer_handle); + /** **************************************************************************************** * @brief Install a new RTOS stack for a specific platform task diff --git a/bundles/noos_mass_conn/inc/sm.h b/bundles/noos_mass_conn/inc/sm.h index 6dfc62bab..7e57fb927 100644 --- a/bundles/noos_mass_conn/inc/sm.h +++ b/bundles/noos_mass_conn/inc/sm.h @@ -55,14 +55,21 @@ typedef enum { /** * @brief Security configurations * + * These configurations can updated dynamically. Be careful: dynamically toggle + * `enable` will cause problems when SM is still working on any connection. + * + * After IRK/DHK are derived from `persistent`, `SM_EVENT_IRK_DHK_RESULT` is emitted. + * * @param[in] enable Enable (Bypass) SM (default: Disabled) * When disabled, SM can be enabled per connection by `sm_config_conn`. * @param[in] io_capability Default IO Capabilities * @param[in] request_security Let peripheral request an encrypted connection right after connecting * Not used normally. Bonding is triggered by access to protected attributes in ATT Server * @param[in] persistent persistent data for security & privacy + * @return 0 if ok else non-0. Possible causes for non-0 return value: + * * generation of internal keys(IRK/ERK) are under going. */ -void sm_config(uint8_t enable, +int sm_config(uint8_t enable, io_capability_t io_capability, int request_security, const sm_persistent_t *persistent); @@ -101,18 +108,71 @@ void sm_private_random_address_generation_set_update_period(int period_ms); const uint8_t *sm_private_random_address_generation_get(void); /** + * @brief Registers OOB Data Callback. + * + * The callback should set the oob_data and return 1 if OOB data is available. + * + * Signature of `get_oob_data_callback`: + * @param[in] address_type address type + * @param[in] addr address + * @param[out] oob_data OOB data (type `sm_key_t`) + * @return 1 if OOB data is available, else 0. * - * @brief Registers OOB Data Callback. The callback should set the oob_data and return 1 if OOB data is availble * @param get_oob_data_callback */ -void sm_register_oob_data_callback( int (*get_oob_data_callback)(uint8_t addres_type, bd_addr_t addr, uint8_t * oob_data)); +void sm_register_oob_data_callback( int (*get_oob_data_callback)(uint8_t address_type, bd_addr_t addr, uint8_t * oob_data)); /** + * @brief Registers secure pairing OOB Data Callback. * - * @brief Registers secure pairing OOB Data Callback. The callback should set the peer_confirm & peer_random and return 1 if OOB data is availble - * @param get_oob_data_callback + * The callback should set the peer_confirm & peer_random and return 1 + * if OOB data is available. + * + * Signature of `get_sc_oob_data_callback`: + * @param[in] address_type address type + * @param[in] addr address + * @param[out] peer_confirm peer confirm value (type `sm_key_t`) + * @param[out] peer_random peer random value (type `sm_key_t`) + * @return 1 if OOB data is available, else 0. + * + * @param get_sc_oob_data_callback */ -// void sm_register_sc_oob_data_callback( int (*get_sc_oob_data_callback)(uint8_t addres_type, bd_addr_t addr, uint8_t *peer_confirm, uint8_t *peer_random)); +// void sm_register_sc_oob_data_callback(int (*get_sc_oob_data_callback)(uint8_t address_type, bd_addr_t addr, uint8_t *peer_confirm, uint8_t *peer_random)); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief (When secure pairing is used and OOB is selected) Start generate local + * OOB data (_confirm_ and _random_). + * + * After generated, _confirm_ and _random_ are passed to the callback. + * + * Each call of this function will generate a new P256 key pair that will used + * in **all** subsequent pairing attempts. When OOB is used, it is Developers's + * responsibility to refresh key pair properly. If OOB is not used, SM will + * re-generate a new key pair for each pairing attempt. + * + * BLUETOOTH CORE SPECIFICATION Version 5.4 | Vol 3, Part H, Section 2.3.6: + * + * > To protect a device's private key, a device should implement a method to + * > prevent an attacker from retrieving useful information about the device's private + * > key. For this purpose, a device should change its private key after every pairing + * > (successful or failed). Otherwise, it should change its private key whenever S + + * > 3F > 8, where S is the number of successful pairings and F the number of + * > failed attempts since the key was last changed. + * + * App can then pass these information together with device address to peer + * through OOB communication. + * + * Signature of `callback`: + * @param[out] confirm local confirm value (type `sm_key_t`) + * @param[out] random local random value (type `sm_key_t`) + * + * @param callback + * @return 0: started without error + * -1: previous OOB data is not generated yet + */ +// int sm_sc_generate_oob_data(void (*callback)(const uint8_t *confirm, const uint8_t *random)); // WARNING: ^^^ this API is not available in this release @@ -235,14 +295,6 @@ int sm_le_device_key(hci_con_handle_t con_handle); // WARNING: ^^^ this API is not available in this release -/** - * @brief When secure pairing is used and OOB is selected, use this function to prepare OOB data and share to peer. - * @param handle - */ -// int sm_sc_generate_oob_data(void (*callback)(uint8_t *peer_confirm, uint8_t *peer_random)); -// WARNING: ^^^ this API is not available in this release - - /** * * @brief Register a callback for get external LTK (for empty EDIV & Random) diff --git a/bundles/noos_mini/ING9168xx/apis.json b/bundles/noos_mini/ING9168xx/apis.json index 4c9d56114..558eb157a 100644 --- a/bundles/noos_mini/ING9168xx/apis.json +++ b/bundles/noos_mini/ING9168xx/apis.json @@ -1,268 +1,275 @@ { - "att_dispatch_client_can_send_now": "0x0200418d", - "att_dispatch_client_request_can_send_now_event": "0x02004193", - "att_dispatch_register_client": "0x02004199", - "att_dispatch_register_server": "0x020041ad", - "att_dispatch_server_can_send_now": "0x020041c1", - "att_dispatch_server_request_can_send_now_event": "0x020041c7", - "att_emit_general_event": "0x02004279", - "att_server_can_send_packet_now": "0x020049ad", - "att_server_deferred_read_response": "0x020049b1", - "att_server_get_mtu": "0x020049c9", - "att_server_indicate": "0x02004a35", - "att_server_init": "0x02004ab9", - "att_server_notify": "0x02004af5", - "att_server_register_packet_handler": "0x02004c0d", - "att_server_request_can_send_now_event": "0x02004c19", - "att_set_db": "0x02004c35", - "att_set_read_callback": "0x02004c49", - "att_set_write_callback": "0x02004c55", - "bd_addr_cmp": "0x02004e25", - "bd_addr_copy": "0x02004e2b", - "bd_addr_to_str": "0x02004e35", - "big_endian_read_16": "0x02004e6d", - "big_endian_read_32": "0x02004e75", - "big_endian_store_16": "0x02004e89", - "big_endian_store_32": "0x02004e95", - "btstack_config": "0x02004ec1", - "btstack_memory_pool_create": "0x0200500f", - "btstack_memory_pool_free": "0x02005039", - "btstack_memory_pool_get": "0x02005099", - "btstack_push_user_msg": "0x020050e1", - "btstack_push_user_runnable": "0x020050ed", - "btstack_reset": "0x020050f9", - "char_for_nibble": "0x02005307", - "gap_add_dev_to_periodic_list": "0x02005c75", - "gap_add_whitelist": "0x02005c85", - "gap_aes_encrypt": "0x02005c91", - "gap_clear_white_lists": "0x02005cc9", - "gap_clr_adv_set": "0x02005cd5", - "gap_clr_periodic_adv_list": "0x02005ce1", - "gap_create_connection_cancel": "0x02005ced", - "gap_default_periodic_adv_sync_transfer_param": "0x02005cf9", - "gap_disconnect": "0x02005d11", - "gap_disconnect_all": "0x02005d3d", - "gap_ext_create_connection": "0x02005d7d", - "gap_get_connection_parameter_range": "0x02005e55", - "gap_le_read_channel_map": "0x02005e8d", - "gap_periodic_adv_create_sync": "0x02005ef9", - "gap_periodic_adv_create_sync_cancel": "0x02005f1d", - "gap_periodic_adv_set_info_transfer": "0x02005f29", - "gap_periodic_adv_sync_transfer": "0x02005f39", - "gap_periodic_adv_sync_transfer_param": "0x02005f49", - "gap_periodic_adv_term_sync": "0x02005f65", - "gap_read_antenna_info": "0x02005fed", - "gap_read_periodic_adv_list_size": "0x02005ff9", - "gap_read_phy": "0x02006005", - "gap_read_remote_used_features": "0x02006011", - "gap_read_remote_version": "0x0200601d", - "gap_read_rssi": "0x02006029", - "gap_remove_whitelist": "0x02006035", - "gap_rmv_adv_set": "0x020060b1", - "gap_rmv_dev_from_periodic_list": "0x020060bd", - "gap_rx_test_v2": "0x020060cd", - "gap_rx_test_v3": "0x020060dd", - "gap_set_adv_set_random_addr": "0x02006129", - "gap_set_callback_for_next_hci": "0x02006165", - "gap_set_connection_cte_request_enable": "0x02006185", - "gap_set_connection_cte_response_enable": "0x020061a1", - "gap_set_connection_cte_rx_param": "0x020061b1", - "gap_set_connection_cte_tx_param": "0x02006205", - "gap_set_connection_parameter_range": "0x02006251", - "gap_set_connectionless_cte_tx_enable": "0x02006269", - "gap_set_connectionless_cte_tx_param": "0x02006279", - "gap_set_connectionless_iq_sampling_enable": "0x020062d5", - "gap_set_data_length": "0x02006331", - "gap_set_def_phy": "0x02006349", - "gap_set_ext_adv_data": "0x02006359", - "gap_set_ext_adv_enable": "0x02006371", - "gap_set_ext_adv_para": "0x020063e1", - "gap_set_ext_scan_enable": "0x020064b1", - "gap_set_ext_scan_para": "0x020064c9", - "gap_set_ext_scan_response_data": "0x02006569", - "gap_set_host_channel_classification": "0x02006581", - "gap_set_periodic_adv_data": "0x02006591", - "gap_set_periodic_adv_enable": "0x02006601", - "gap_set_periodic_adv_para": "0x02006611", - "gap_set_periodic_adv_rx_enable": "0x02006629", - "gap_set_phy": "0x02006639", - "gap_set_random_device_address": "0x02006655", - "gap_start_ccm": "0x02006685", - "gap_test_end": "0x020066cd", - "gap_tx_test_v2": "0x020066d9", - "gap_tx_test_v4": "0x020066f1", - "gap_update_connection_parameters": "0x02006715", - "gap_vendor_tx_continuous_wave": "0x02006755", - "gatt_client_cancel_write": "0x02006c7d", - "gatt_client_discover_characteristic_descriptors": "0x02006ca3", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x02006ce3", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x02006d33", - "gatt_client_discover_characteristics_for_service": "0x02006d83", - "gatt_client_discover_primary_services": "0x02006db9", - "gatt_client_discover_primary_services_by_uuid128": "0x02006deb", - "gatt_client_discover_primary_services_by_uuid16": "0x02006e2f", - "gatt_client_execute_write": "0x02006e6d", - "gatt_client_find_included_services_for_service": "0x02006e93", - "gatt_client_get_mtu": "0x02006ec1", - "gatt_client_is_ready": "0x02006f85", - "gatt_client_listen_for_characteristic_value_updates": "0x02006f9b", - "gatt_client_prepare_write": "0x02006fbb", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x02006ff7", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x02007021", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02007027", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x02007055", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x0200705b", - "gatt_client_read_multiple_characteristic_values": "0x02007089", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x020070b9", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x020070e7", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x02007133", - "gatt_client_register_handler": "0x0200717d", - "gatt_client_reliable_write_long_value_of_characteristic": "0x02007189", - "gatt_client_signed_write_without_response": "0x02007591", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x02007655", - "gatt_client_write_client_characteristic_configuration": "0x0200768f", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x020076e1", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x020076f1", - "gatt_client_write_long_value_of_characteristic": "0x0200772d", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x0200773d", - "gatt_client_write_value_of_characteristic": "0x02007779", - "gatt_client_write_value_of_characteristic_without_response": "0x020077af", - "hci_add_event_handler": "0x02008d89", - "hci_power_control": "0x0200951d", - "hci_register_acl_packet_handler": "0x020096d1", - "kv_commit": "0x02009d55", - "kv_get": "0x02009db1", - "kv_init": "0x02009dbd", - "kv_init_backend": "0x02009e3d", - "kv_put": "0x02009e51", - "kv_remove": "0x02009e5d", - "kv_remove_all": "0x02009e91", - "kv_value_modified": "0x02009ec1", - "kv_value_modified_of_key": "0x02009edd", - "kv_visit": "0x02009ee9", - "l2cap_add_event_handler": "0x02009f79", - "l2cap_can_send_packet_now": "0x02009f89", - "l2cap_create_le_credit_based_connection_request": "0x0200a14d", - "l2cap_credit_based_send": "0x0200a295", - "l2cap_credit_based_send_continue": "0x0200a2c1", - "l2cap_disconnect": "0x0200a33d", - "l2cap_get_le_credit_based_connection_credits": "0x0200a529", - "l2cap_get_peer_mtu_for_local_cid": "0x0200a545", - "l2cap_init": "0x0200a985", - "l2cap_le_send_flow_control_credit": "0x0200aa7b", - "l2cap_max_le_mtu": "0x0200ad89", - "l2cap_register_packet_handler": "0x0200aeb1", - "l2cap_register_service": "0x0200aebd", - "l2cap_request_can_send_now_event": "0x0200afcd", - "l2cap_request_connection_parameter_update": "0x0200afe7", - "l2cap_send_echo_request": "0x0200b4c9", - "l2cap_unregister_service": "0x0200b5a9", - "le_device_db_add": "0x0200b601", - "le_device_db_find": "0x0200b6c9", - "le_device_db_from_key": "0x0200b6f5", - "le_device_db_iter_cur": "0x0200b6fd", - "le_device_db_iter_cur_key": "0x0200b701", - "le_device_db_iter_init": "0x0200b705", - "le_device_db_iter_next": "0x0200b70d", - "le_device_db_remove_key": "0x0200b733", - "ll_adjust_conn_peer_tx_power": "0x0200b761", - "ll_aes_encrypt": "0x0200b789", - "ll_config": "0x0200b7fd", - "ll_free": "0x0200b833", - "ll_get_heap_free_size": "0x0200b83d", - "ll_hint_on_ce_len": "0x0200b851", - "ll_legacy_adv_set_interval": "0x0200b889", - "ll_malloc": "0x0200b899", - "ll_register_hci_acl_previewer": "0x0200b9b1", - "ll_scan_set_fixed_channel": "0x0200ba15", - "ll_set_adv_access_address": "0x0200bc2d", - "ll_set_adv_coded_scheme": "0x0200bc39", - "ll_set_conn_acl_report_latency": "0x0200bc69", - "ll_set_conn_coded_scheme": "0x0200bc95", - "ll_set_conn_latency": "0x0200bcbd", - "ll_set_conn_tx_power": "0x0200bce9", - "ll_set_def_antenna": "0x0200bd21", - "ll_set_initiating_coded_scheme": "0x0200bd41", - "ll_set_max_conn_number": "0x0200bd4d", - "ll_set_tx_power_range": "0x0200bde1", - "nibble_for_char": "0x0201bf19", - "platform_calibrate_rt_clk": "0x0201bf8f", - "platform_call_on_stack": "0x0200213f", - "platform_config": "0x0201bf95", + "att_dispatch_client_can_send_now": "0x0200508d", + "att_dispatch_client_request_can_send_now_event": "0x02005093", + "att_dispatch_register_client": "0x02005099", + "att_dispatch_register_server": "0x020050ad", + "att_dispatch_server_can_send_now": "0x020050c1", + "att_dispatch_server_request_can_send_now_event": "0x020050c7", + "att_emit_general_event": "0x02005179", + "att_server_can_send_packet_now": "0x020058b1", + "att_server_deferred_read_response": "0x020058b5", + "att_server_get_mtu": "0x020058cd", + "att_server_indicate": "0x02005939", + "att_server_init": "0x020059bd", + "att_server_notify": "0x020059f9", + "att_server_register_packet_handler": "0x02005b11", + "att_server_request_can_send_now_event": "0x02005b1d", + "att_set_db": "0x02005b39", + "att_set_read_callback": "0x02005b4d", + "att_set_write_callback": "0x02005b59", + "bd_addr_cmp": "0x02005d29", + "bd_addr_copy": "0x02005d2f", + "bd_addr_to_str": "0x02005d39", + "big_endian_read_16": "0x02005d71", + "big_endian_read_32": "0x02005d79", + "big_endian_store_16": "0x02005d8d", + "big_endian_store_32": "0x02005d99", + "btstack_config": "0x02005dc5", + "btstack_get_capabilities": "0x02005dd1", + "btstack_memory_pool_create": "0x02005f2b", + "btstack_memory_pool_free": "0x02005f55", + "btstack_memory_pool_get": "0x02005fb5", + "btstack_push_user_msg": "0x02005ffd", + "btstack_push_user_runnable": "0x02006009", + "btstack_reset": "0x02006015", + "char_for_nibble": "0x02006223", + "gap_add_dev_to_periodic_list": "0x02006b81", + "gap_add_whitelist": "0x02006b91", + "gap_aes_encrypt": "0x02006b9d", + "gap_clear_white_lists": "0x02006bd5", + "gap_clr_adv_set": "0x02006be1", + "gap_clr_periodic_adv_list": "0x02006bed", + "gap_create_connection_cancel": "0x02006bf9", + "gap_default_periodic_adv_sync_transfer_param": "0x02006c05", + "gap_disconnect": "0x02006c1d", + "gap_disconnect2": "0x02006c25", + "gap_disconnect_all": "0x02006c51", + "gap_ext_create_connection": "0x02006c91", + "gap_get_connection_parameter_range": "0x02006d69", + "gap_le_read_channel_map": "0x02006da1", + "gap_periodic_adv_create_sync": "0x02006e01", + "gap_periodic_adv_create_sync_cancel": "0x02006e25", + "gap_periodic_adv_set_info_transfer": "0x02006e31", + "gap_periodic_adv_sync_transfer": "0x02006e41", + "gap_periodic_adv_sync_transfer_param": "0x02006e51", + "gap_periodic_adv_term_sync": "0x02006e6d", + "gap_read_antenna_info": "0x02006ef5", + "gap_read_periodic_adv_list_size": "0x02006f01", + "gap_read_phy": "0x02006f0d", + "gap_read_remote_used_features": "0x02006f19", + "gap_read_remote_version": "0x02006f25", + "gap_read_rssi": "0x02006f31", + "gap_read_white_lists_size": "0x02006f3d", + "gap_remove_whitelist": "0x02006f49", + "gap_rmv_adv_set": "0x02006fc5", + "gap_rmv_dev_from_periodic_list": "0x02006fd1", + "gap_rx_test_v2": "0x02006fe1", + "gap_rx_test_v3": "0x02006ff1", + "gap_set_adv_set_random_addr": "0x0200703d", + "gap_set_callback_for_next_hci": "0x02007061", + "gap_set_connection_cte_request_enable": "0x02007081", + "gap_set_connection_cte_response_enable": "0x0200709d", + "gap_set_connection_cte_rx_param": "0x020070ad", + "gap_set_connection_cte_tx_param": "0x02007101", + "gap_set_connection_parameter_range": "0x0200714d", + "gap_set_connectionless_cte_tx_enable": "0x02007165", + "gap_set_connectionless_cte_tx_param": "0x02007175", + "gap_set_connectionless_iq_sampling_enable": "0x020071d1", + "gap_set_data_length": "0x0200722d", + "gap_set_def_phy": "0x02007245", + "gap_set_ext_adv_data": "0x02007255", + "gap_set_ext_adv_enable": "0x0200726d", + "gap_set_ext_adv_para": "0x020072dd", + "gap_set_ext_scan_enable": "0x0200739d", + "gap_set_ext_scan_para": "0x020073b5", + "gap_set_ext_scan_response_data": "0x02007455", + "gap_set_host_channel_classification": "0x0200746d", + "gap_set_periodic_adv_data": "0x0200747d", + "gap_set_periodic_adv_enable": "0x020074ed", + "gap_set_periodic_adv_para": "0x020074fd", + "gap_set_periodic_adv_rx_enable": "0x02007515", + "gap_set_phy": "0x02007525", + "gap_set_random_device_address": "0x02007541", + "gap_start_ccm": "0x0200755d", + "gap_test_end": "0x020075a5", + "gap_tx_test_v2": "0x020075b1", + "gap_tx_test_v4": "0x020075c9", + "gap_update_connection_parameters": "0x020075ed", + "gap_vendor_tx_continuous_wave": "0x0200762d", + "gatt_client_cancel_write": "0x02007b55", + "gatt_client_discover_characteristic_descriptors": "0x02007b7b", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x02007bbb", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x02007c0b", + "gatt_client_discover_characteristics_for_service": "0x02007c5b", + "gatt_client_discover_primary_services": "0x02007c91", + "gatt_client_discover_primary_services_by_uuid128": "0x02007cc3", + "gatt_client_discover_primary_services_by_uuid16": "0x02007d07", + "gatt_client_execute_write": "0x02007d45", + "gatt_client_find_included_services_for_service": "0x02007d6b", + "gatt_client_get_mtu": "0x02007d99", + "gatt_client_is_ready": "0x02007e65", + "gatt_client_listen_for_characteristic_value_updates": "0x02007e7b", + "gatt_client_prepare_write": "0x02007e9b", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x02007ed7", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x02007f01", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02007f07", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x02007f35", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x02007f3b", + "gatt_client_read_multiple_characteristic_values": "0x02007f69", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x02007f99", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x02007fc7", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x02008013", + "gatt_client_register_handler": "0x0200805d", + "gatt_client_reliable_write_long_value_of_characteristic": "0x02008069", + "gatt_client_signed_write_without_response": "0x02008471", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x02008535", + "gatt_client_write_client_characteristic_configuration": "0x0200856f", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x020085c1", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x020085d1", + "gatt_client_write_long_value_of_characteristic": "0x0200860d", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x0200861d", + "gatt_client_write_value_of_characteristic": "0x02008659", + "gatt_client_write_value_of_characteristic_without_response": "0x0200868f", + "hci_add_event_handler": "0x02009c7d", + "hci_power_control": "0x0200a409", + "hci_register_acl_packet_handler": "0x0200a5bd", + "kv_commit": "0x0200ac31", + "kv_get": "0x0200ac8d", + "kv_init": "0x0200ac99", + "kv_init_backend": "0x0200ad19", + "kv_put": "0x0200ad2d", + "kv_remove": "0x0200ad39", + "kv_remove_all": "0x0200ad6d", + "kv_value_modified": "0x0200ad9d", + "kv_value_modified_of_key": "0x0200adb9", + "kv_visit": "0x0200adc5", + "l2cap_add_event_handler": "0x0200ae55", + "l2cap_can_send_packet_now": "0x0200ae65", + "l2cap_create_le_credit_based_connection_request": "0x0200b029", + "l2cap_credit_based_send": "0x0200b171", + "l2cap_credit_based_send_continue": "0x0200b19d", + "l2cap_disconnect": "0x0200b219", + "l2cap_get_le_credit_based_connection_credits": "0x0200b405", + "l2cap_get_peer_mtu_for_local_cid": "0x0200b421", + "l2cap_init": "0x0200b861", + "l2cap_le_send_flow_control_credit": "0x0200b957", + "l2cap_max_le_mtu": "0x0200bc65", + "l2cap_register_packet_handler": "0x0200bd8d", + "l2cap_register_service": "0x0200bd99", + "l2cap_request_can_send_now_event": "0x0200bea9", + "l2cap_request_connection_parameter_update": "0x0200bec3", + "l2cap_send_echo_request": "0x0200c3a5", + "l2cap_unregister_service": "0x0200c485", + "le_device_db_add": "0x0200c4dd", + "le_device_db_find": "0x0200c5b5", + "le_device_db_from_key": "0x0200c5e1", + "le_device_db_iter_cur": "0x0200c5e9", + "le_device_db_iter_cur_key": "0x0200c5ed", + "le_device_db_iter_init": "0x0200c5f1", + "le_device_db_iter_next": "0x0200c5f9", + "le_device_db_remove_key": "0x0200c61f", + "ll_adjust_conn_peer_tx_power": "0x0200c64d", + "ll_aes_encrypt": "0x0200c675", + "ll_config": "0x0200c6e9", + "ll_free": "0x0200c71f", + "ll_get_capabilities": "0x0200c729", + "ll_get_heap_free_size": "0x0200c749", + "ll_get_states": "0x0200c759", + "ll_hint_on_ce_len": "0x0200c7f5", + "ll_legacy_adv_set_interval": "0x0200c82d", + "ll_malloc": "0x0200c83d", + "ll_register_hci_acl_previewer": "0x0200c955", + "ll_scan_set_fixed_channel": "0x0200c9b9", + "ll_set_adv_access_address": "0x0200cbd1", + "ll_set_adv_coded_scheme": "0x0200cbdd", + "ll_set_conn_acl_report_latency": "0x0200cc0d", + "ll_set_conn_coded_scheme": "0x0200cc39", + "ll_set_conn_latency": "0x0200cc61", + "ll_set_conn_tx_power": "0x0200cc8d", + "ll_set_def_antenna": "0x0200ccc5", + "ll_set_initiating_coded_scheme": "0x0200cce5", + "ll_set_max_conn_number": "0x0200ccf1", + "ll_set_tx_power_range": "0x0200cd85", + "nibble_for_char": "0x0201cebd", + "platform_calibrate_rt_clk": "0x0201cf33", + "platform_call_on_stack": "0x0200303f", + "platform_cancel_us_timer": "0x0201cf37", + "platform_config": "0x0201cf4d", "platform_controller_run": "0x2000015b", - "platform_delete_timer": "0x0201c0bd", - "platform_enable_irq": "0x0201c0c5", - "platform_get_gen_os_driver": "0x0201c119", - "platform_get_link_layer_interf": "0x0201c125", - "platform_get_task_handle": "0x0201c12d", - "platform_get_timer_counter": "0x0201c145", - "platform_get_us_time": "0x0201c149", - "platform_get_version": "0x0201c14d", - "platform_hrng": "0x0201c155", + "platform_create_us_timer": "0x0201d081", + "platform_delete_timer": "0x0201d095", + "platform_enable_irq": "0x0201d09d", + "platform_get_gen_os_driver": "0x0201d0f1", + "platform_get_link_layer_interf": "0x0201d0fd", + "platform_get_task_handle": "0x0201d105", + "platform_get_timer_counter": "0x0201d11d", + "platform_get_us_time": "0x0201d121", + "platform_get_version": "0x0201d125", + "platform_hrng": "0x0201d141", "platform_init_controller": "0x20000145", - "platform_os_idle_resumed_hook": "0x200003cf", - "platform_patch_rf_init_data": "0x0201c15d", - "platform_post_sleep_processing": "0x200003c9", - "platform_pre_sleep_processing": "0x200003c3", - "platform_pre_suppress_ticks_and_sleep_processing": "0x200003bf", - "platform_printf": "0x0201c169", - "platform_raise_assertion": "0x0201c17d", - "platform_rand": "0x0201c191", - "platform_read_info": "0x0201c195", - "platform_read_persistent_reg": "0x0201c1c5", - "platform_reset": "0x0201c1d1", - "platform_rt_rc_auto_tune": "0x0201c1e5", - "platform_rt_rc_auto_tune2": "0x0201c1ed", - "platform_rt_rc_tune": "0x0201c255", - "platform_set_abs_timer": "0x0201c271", - "platform_set_evt_callback": "0x0201c275", - "platform_set_evt_callback_table": "0x0201c289", - "platform_set_irq_callback": "0x0201c295", - "platform_set_irq_callback_table": "0x0201c2b1", - "platform_set_rf_clk_source": "0x0201c2bd", - "platform_set_rf_init_data": "0x0201c2c9", - "platform_set_rf_power_mapping": "0x0201c2d5", - "platform_set_timer": "0x0201c2e1", - "platform_shutdown": "0x0201c2e5", - "platform_switch_app": "0x0201c2e9", - "platform_trace_raw": "0x0201c301", - "platform_write_persistent_reg": "0x0201c319", - "printf_hexdump": "0x0201c32d", - "reverse_128": "0x0201c62d", - "reverse_24": "0x0201c633", - "reverse_256": "0x0201c639", - "reverse_48": "0x0201c63f", - "reverse_56": "0x0201c645", - "reverse_64": "0x0201c64b", - "reverse_bd_addr": "0x0201c651", - "reverse_bytes": "0x0201c657", - "sm_add_event_handler": "0x0201c95d", - "sm_address_resolution_lookup": "0x0201cab5", - "sm_authenticated": "0x0201ce31", - "sm_authorization_decline": "0x0201ce3f", - "sm_authorization_grant": "0x0201ce5f", - "sm_authorization_state": "0x0201ce7f", - "sm_bonding_decline": "0x0201ce99", - "sm_config": "0x0201d2ed", - "sm_config_conn": "0x0201d305", - "sm_encryption_key_size": "0x0201d4bb", - "sm_just_works_confirm": "0x0201da41", - "sm_le_device_key": "0x0201dd79", - "sm_passkey_input": "0x0201de0f", - "sm_private_random_address_generation_get": "0x0201e1c9", - "sm_private_random_address_generation_get_mode": "0x0201e1d1", - "sm_private_random_address_generation_set_mode": "0x0201e1dd", - "sm_private_random_address_generation_set_update_period": "0x0201e205", - "sm_register_external_ltk_callback": "0x0201e341", - "sm_register_oob_data_callback": "0x0201e34d", - "sm_request_pairing": "0x0201e359", - "sm_send_security_request": "0x0201ee2f", - "sm_set_accepted_stk_generation_methods": "0x0201ee55", - "sm_set_authentication_requirements": "0x0201ee61", - "sm_set_encryption_key_size_range": "0x0201ee6d", - "sscanf_bd_addr": "0x0201f1cd", - "sysSetPublicDeviceAddr": "0x0201f281", - "uuid128_to_str": "0x0201fa3d", - "uuid_add_bluetooth_prefix": "0x0201fa95", - "uuid_has_bluetooth_prefix": "0x0201fab5" + "platform_os_idle_resumed_hook": "0x200003df", + "platform_patch_rf_init_data": "0x0201d149", + "platform_post_sleep_processing": "0x200003d9", + "platform_pre_sleep_processing": "0x200003d3", + "platform_pre_suppress_ticks_and_sleep_processing": "0x200003cf", + "platform_printf": "0x0201d155", + "platform_raise_assertion": "0x0201d169", + "platform_rand": "0x0201d17d", + "platform_read_info": "0x0201d181", + "platform_read_persistent_reg": "0x0201d1b1", + "platform_reset": "0x0201d1d1", + "platform_rt_rc_auto_tune": "0x0201d1e5", + "platform_rt_rc_auto_tune2": "0x0201d1ed", + "platform_rt_rc_tune": "0x0201d24d", + "platform_set_abs_timer": "0x0201d279", + "platform_set_evt_callback": "0x0201d27d", + "platform_set_evt_callback_table": "0x0201d291", + "platform_set_irq_callback": "0x0201d29d", + "platform_set_irq_callback_table": "0x0201d2b9", + "platform_set_rf_clk_source": "0x0201d2c5", + "platform_set_rf_init_data": "0x0201d2d1", + "platform_set_rf_power_mapping": "0x0201d2dd", + "platform_set_timer": "0x0201d2e9", + "platform_shutdown": "0x0201d2ed", + "platform_switch_app": "0x0201d2f1", + "platform_trace_raw": "0x0201d309", + "platform_write_persistent_reg": "0x0201d321", + "printf_hexdump": "0x0201d355", + "reverse_128": "0x0201d655", + "reverse_24": "0x0201d65b", + "reverse_256": "0x0201d661", + "reverse_48": "0x0201d667", + "reverse_56": "0x0201d66d", + "reverse_64": "0x0201d673", + "reverse_bd_addr": "0x0201d679", + "reverse_bytes": "0x0201d67f", + "sm_add_event_handler": "0x0201d985", + "sm_address_resolution_lookup": "0x0201dadd", + "sm_authenticated": "0x0201de85", + "sm_authorization_decline": "0x0201de93", + "sm_authorization_grant": "0x0201deb3", + "sm_authorization_state": "0x0201ded3", + "sm_bonding_decline": "0x0201deed", + "sm_config": "0x0201e341", + "sm_config_conn": "0x0201e375", + "sm_encryption_key_size": "0x0201e52f", + "sm_just_works_confirm": "0x0201eab5", + "sm_le_device_key": "0x0201edf5", + "sm_passkey_input": "0x0201ee8b", + "sm_private_random_address_generation_get": "0x0201f24d", + "sm_private_random_address_generation_get_mode": "0x0201f255", + "sm_private_random_address_generation_set_mode": "0x0201f261", + "sm_private_random_address_generation_set_update_period": "0x0201f289", + "sm_register_external_ltk_callback": "0x0201f3c5", + "sm_register_oob_data_callback": "0x0201f3d1", + "sm_request_pairing": "0x0201f3dd", + "sm_send_security_request": "0x0201febb", + "sm_set_accepted_stk_generation_methods": "0x0201fee1", + "sm_set_authentication_requirements": "0x0201feed", + "sm_set_encryption_key_size_range": "0x0201fefd", + "sscanf_bd_addr": "0x0202024d", + "sysSetPublicDeviceAddr": "0x02020321", + "uuid128_to_str": "0x02020af1", + "uuid_add_bluetooth_prefix": "0x02020b49", + "uuid_has_bluetooth_prefix": "0x02020b69" } \ No newline at end of file diff --git a/bundles/noos_mini/ING9168xx/meta.json b/bundles/noos_mini/ING9168xx/meta.json index 575ad2308..48126d4a4 100644 --- a/bundles/noos_mini/ING9168xx/meta.json +++ b/bundles/noos_mini/ING9168xx/meta.json @@ -1,18 +1,24 @@ { "app": { - "base": 33710080 + "base": 33714176 }, "ram": { "base": 536870912, - "size": 17116 + "size": 17148 }, "rom": { "base": 33562624, - "size": 144904 + "size": 149288 + }, + "var": { + "link_layer_features": { + "addr": 33689496, + "value": "bf79ff07fe000000" + } }, "version": [ 2, 3, - 1 + 18 ] } \ No newline at end of file diff --git a/bundles/noos_mini/ING9168xx/platform.bin b/bundles/noos_mini/ING9168xx/platform.bin index 8aa10dd53..5b7d71995 100644 Binary files a/bundles/noos_mini/ING9168xx/platform.bin and b/bundles/noos_mini/ING9168xx/platform.bin differ diff --git a/bundles/noos_mini/ING9187xx/apis.json b/bundles/noos_mini/ING9187xx/apis.json index 06135d553..b9361af01 100644 --- a/bundles/noos_mini/ING9187xx/apis.json +++ b/bundles/noos_mini/ING9187xx/apis.json @@ -6,248 +6,255 @@ "att_dispatch_server_can_send_now": "0x000056d1", "att_dispatch_server_request_can_send_now_event": "0x000056d7", "att_emit_general_event": "0x00005789", - "att_server_can_send_packet_now": "0x00005eb5", - "att_server_deferred_read_response": "0x00005eb9", - "att_server_get_mtu": "0x00005ed1", - "att_server_indicate": "0x00005f3d", - "att_server_init": "0x00005fc1", - "att_server_notify": "0x00005ffd", - "att_server_register_packet_handler": "0x00006115", - "att_server_request_can_send_now_event": "0x00006121", - "att_set_db": "0x0000613d", - "att_set_read_callback": "0x00006151", - "att_set_write_callback": "0x0000615d", - "bd_addr_cmp": "0x000062cd", - "bd_addr_copy": "0x000062d3", - "bd_addr_to_str": "0x000062dd", - "big_endian_read_16": "0x00006315", - "big_endian_read_32": "0x0000631d", - "big_endian_store_16": "0x00006331", - "big_endian_store_32": "0x0000633d", - "btstack_config": "0x00006475", - "btstack_memory_pool_create": "0x000065c3", - "btstack_memory_pool_free": "0x000065ed", - "btstack_memory_pool_get": "0x0000664d", - "btstack_push_user_msg": "0x00006695", - "btstack_push_user_runnable": "0x000066a1", - "btstack_reset": "0x000066ad", - "char_for_nibble": "0x00006971", - "gap_add_dev_to_periodic_list": "0x00007215", - "gap_add_whitelist": "0x00007225", - "gap_aes_encrypt": "0x00007231", - "gap_clear_white_lists": "0x00007269", - "gap_clr_adv_set": "0x00007275", - "gap_clr_periodic_adv_list": "0x00007281", - "gap_create_connection_cancel": "0x0000728d", - "gap_disconnect": "0x00007299", - "gap_disconnect_all": "0x000072c5", - "gap_ext_create_connection": "0x00007305", - "gap_get_connection_parameter_range": "0x000073dd", - "gap_le_read_channel_map": "0x00007415", - "gap_periodic_adv_create_sync": "0x00007481", - "gap_periodic_adv_create_sync_cancel": "0x000074a5", - "gap_periodic_adv_term_sync": "0x000074b1", - "gap_read_periodic_adv_list_size": "0x00007539", - "gap_read_phy": "0x00007545", - "gap_read_remote_used_features": "0x00007551", - "gap_read_remote_version": "0x0000755d", - "gap_read_rssi": "0x00007569", - "gap_remove_whitelist": "0x00007575", - "gap_rmv_adv_set": "0x000075f1", - "gap_rmv_dev_from_periodic_list": "0x000075fd", - "gap_rx_test_v2": "0x0000760d", - "gap_set_adv_set_random_addr": "0x00007645", - "gap_set_callback_for_next_hci": "0x00007681", - "gap_set_connection_parameter_range": "0x000076a1", - "gap_set_data_length": "0x000076b9", - "gap_set_def_phy": "0x000076d1", - "gap_set_ext_adv_data": "0x000076e1", - "gap_set_ext_adv_enable": "0x000076f9", - "gap_set_ext_adv_para": "0x00007769", - "gap_set_ext_scan_enable": "0x00007841", - "gap_set_ext_scan_para": "0x00007859", - "gap_set_ext_scan_response_data": "0x000078f9", - "gap_set_host_channel_classification": "0x00007911", - "gap_set_periodic_adv_data": "0x00007921", - "gap_set_periodic_adv_enable": "0x00007991", - "gap_set_periodic_adv_para": "0x000079a1", - "gap_set_phy": "0x000079b9", - "gap_set_random_device_address": "0x000079d5", - "gap_start_ccm": "0x00007a05", - "gap_test_end": "0x00007a4d", - "gap_tx_test_v2": "0x00007a59", - "gap_tx_test_v4": "0x00007a71", - "gap_update_connection_parameters": "0x00007a95", - "gap_vendor_tx_continuous_wave": "0x00007ad5", - "gatt_client_cancel_write": "0x00007ffd", - "gatt_client_discover_characteristic_descriptors": "0x00008023", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x00008063", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x000080b3", - "gatt_client_discover_characteristics_for_service": "0x00008103", - "gatt_client_discover_primary_services": "0x00008139", - "gatt_client_discover_primary_services_by_uuid128": "0x0000816b", - "gatt_client_discover_primary_services_by_uuid16": "0x000081af", - "gatt_client_execute_write": "0x000081eb", - "gatt_client_find_included_services_for_service": "0x00008211", - "gatt_client_get_mtu": "0x0000823f", - "gatt_client_is_ready": "0x000082dd", - "gatt_client_listen_for_characteristic_value_updates": "0x000082f3", - "gatt_client_prepare_write": "0x00008313", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x0000834f", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x00008379", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x0000837f", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x000083ad", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x000083b3", - "gatt_client_read_multiple_characteristic_values": "0x000083e1", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x00008411", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x0000843f", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x0000848b", - "gatt_client_register_handler": "0x000084d5", - "gatt_client_reliable_write_long_value_of_characteristic": "0x000084e1", - "gatt_client_signed_write_without_response": "0x000088e5", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x000089a9", - "gatt_client_write_client_characteristic_configuration": "0x000089e3", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008a35", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008a45", - "gatt_client_write_long_value_of_characteristic": "0x00008a81", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008a91", - "gatt_client_write_value_of_characteristic": "0x00008acd", - "gatt_client_write_value_of_characteristic_without_response": "0x00008b03", - "hci_add_event_handler": "0x0000a01d", - "hci_power_control": "0x0000a7a5", - "hci_register_acl_packet_handler": "0x0000a959", - "kv_commit": "0x0000b0e9", - "kv_get": "0x0000b145", - "kv_init": "0x0000b151", - "kv_init_backend": "0x0000b1cd", - "kv_put": "0x0000b1e1", - "kv_remove": "0x0000b1ed", - "kv_remove_all": "0x0000b221", - "kv_value_modified": "0x0000b251", - "kv_value_modified_of_key": "0x0000b26d", - "kv_visit": "0x0000b279", - "l2cap_add_event_handler": "0x0000b309", - "l2cap_can_send_packet_now": "0x0000b319", - "l2cap_create_le_credit_based_connection_request": "0x0000b4d5", - "l2cap_credit_based_send": "0x0000b619", - "l2cap_credit_based_send_continue": "0x0000b645", - "l2cap_disconnect": "0x0000b6c1", - "l2cap_get_le_credit_based_connection_credits": "0x0000b911", - "l2cap_get_peer_mtu_for_local_cid": "0x0000b92d", - "l2cap_init": "0x0000bd01", - "l2cap_le_send_flow_control_credit": "0x0000bdf7", - "l2cap_max_le_mtu": "0x0000c101", - "l2cap_register_packet_handler": "0x0000c229", - "l2cap_register_service": "0x0000c235", - "l2cap_request_can_send_now_event": "0x0000c345", - "l2cap_request_connection_parameter_update": "0x0000c35f", - "l2cap_send_echo_request": "0x0000c839", - "l2cap_unregister_service": "0x0000c8f9", - "le_device_db_add": "0x0000c951", - "le_device_db_find": "0x0000ca19", - "le_device_db_from_key": "0x0000ca45", - "le_device_db_iter_cur": "0x0000ca4d", - "le_device_db_iter_cur_key": "0x0000ca51", - "le_device_db_iter_init": "0x0000ca55", - "le_device_db_iter_next": "0x0000ca5d", - "le_device_db_remove_key": "0x0000ca83", - "ll_aes_encrypt": "0x0000cab1", - "ll_config": "0x0000cb2d", - "ll_free": "0x0000cb63", - "ll_get_heap_free_size": "0x0000cb6d", - "ll_hint_on_ce_len": "0x0000cb81", - "ll_legacy_adv_set_interval": "0x0000cbb9", - "ll_malloc": "0x0000cbc9", - "ll_query_timing_info": "0x0000cd01", - "ll_register_hci_acl_previewer": "0x0000cd4d", - "ll_scan_set_fixed_channel": "0x0000cdb1", - "ll_set_adv_access_address": "0x0000cfc9", - "ll_set_adv_coded_scheme": "0x0000cfd5", - "ll_set_conn_acl_report_latency": "0x0000cffd", - "ll_set_conn_coded_scheme": "0x0000d029", - "ll_set_conn_latency": "0x0000d051", - "ll_set_conn_tx_power": "0x0000d07d", - "ll_set_def_antenna": "0x0000d0c1", - "ll_set_initiating_coded_scheme": "0x0000d0dd", - "ll_set_max_conn_number": "0x0000d0e9", - "nibble_for_char": "0x0001d161", - "platform_calibrate_rt_clk": "0x0001d1ef", + "att_server_can_send_packet_now": "0x00005eb9", + "att_server_deferred_read_response": "0x00005ebd", + "att_server_get_mtu": "0x00005ed5", + "att_server_indicate": "0x00005f41", + "att_server_init": "0x00005fc5", + "att_server_notify": "0x00006001", + "att_server_register_packet_handler": "0x00006119", + "att_server_request_can_send_now_event": "0x00006125", + "att_set_db": "0x00006141", + "att_set_read_callback": "0x00006155", + "att_set_write_callback": "0x00006161", + "bd_addr_cmp": "0x000062d1", + "bd_addr_copy": "0x000062d7", + "bd_addr_to_str": "0x000062e1", + "big_endian_read_16": "0x00006319", + "big_endian_read_32": "0x00006321", + "big_endian_store_16": "0x00006335", + "big_endian_store_32": "0x00006341", + "btstack_config": "0x00006479", + "btstack_get_capabilities": "0x00006485", + "btstack_memory_pool_create": "0x000065df", + "btstack_memory_pool_free": "0x00006609", + "btstack_memory_pool_get": "0x00006669", + "btstack_push_user_msg": "0x000066b1", + "btstack_push_user_runnable": "0x000066bd", + "btstack_reset": "0x000066c9", + "char_for_nibble": "0x0000698d", + "gap_add_dev_to_periodic_list": "0x00007221", + "gap_add_whitelist": "0x00007231", + "gap_aes_encrypt": "0x0000723d", + "gap_clear_white_lists": "0x00007275", + "gap_clr_adv_set": "0x00007281", + "gap_clr_periodic_adv_list": "0x0000728d", + "gap_create_connection_cancel": "0x00007299", + "gap_disconnect": "0x000072a5", + "gap_disconnect2": "0x000072ad", + "gap_disconnect_all": "0x000072d9", + "gap_ext_create_connection": "0x00007319", + "gap_get_connection_parameter_range": "0x000073f1", + "gap_le_read_channel_map": "0x00007429", + "gap_periodic_adv_create_sync": "0x00007489", + "gap_periodic_adv_create_sync_cancel": "0x000074ad", + "gap_periodic_adv_term_sync": "0x000074b9", + "gap_read_periodic_adv_list_size": "0x00007541", + "gap_read_phy": "0x0000754d", + "gap_read_remote_used_features": "0x00007559", + "gap_read_remote_version": "0x00007565", + "gap_read_rssi": "0x00007571", + "gap_read_white_lists_size": "0x0000757d", + "gap_remove_whitelist": "0x00007589", + "gap_rmv_adv_set": "0x00007605", + "gap_rmv_dev_from_periodic_list": "0x00007611", + "gap_rx_test_v2": "0x00007621", + "gap_set_adv_set_random_addr": "0x00007659", + "gap_set_callback_for_next_hci": "0x0000767d", + "gap_set_connection_parameter_range": "0x0000769d", + "gap_set_data_length": "0x000076b5", + "gap_set_def_phy": "0x000076cd", + "gap_set_ext_adv_data": "0x000076dd", + "gap_set_ext_adv_enable": "0x000076f5", + "gap_set_ext_adv_para": "0x00007765", + "gap_set_ext_scan_enable": "0x0000782d", + "gap_set_ext_scan_para": "0x00007845", + "gap_set_ext_scan_response_data": "0x000078e5", + "gap_set_host_channel_classification": "0x000078fd", + "gap_set_periodic_adv_data": "0x0000790d", + "gap_set_periodic_adv_enable": "0x0000797d", + "gap_set_periodic_adv_para": "0x0000798d", + "gap_set_phy": "0x000079a5", + "gap_set_random_device_address": "0x000079c1", + "gap_start_ccm": "0x000079dd", + "gap_test_end": "0x00007a25", + "gap_tx_test_v2": "0x00007a31", + "gap_tx_test_v4": "0x00007a49", + "gap_update_connection_parameters": "0x00007a6d", + "gap_vendor_tx_continuous_wave": "0x00007aad", + "gatt_client_cancel_write": "0x00007fd5", + "gatt_client_discover_characteristic_descriptors": "0x00007ffb", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x0000803b", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x0000808b", + "gatt_client_discover_characteristics_for_service": "0x000080db", + "gatt_client_discover_primary_services": "0x00008111", + "gatt_client_discover_primary_services_by_uuid128": "0x00008143", + "gatt_client_discover_primary_services_by_uuid16": "0x00008187", + "gatt_client_execute_write": "0x000081c3", + "gatt_client_find_included_services_for_service": "0x000081e9", + "gatt_client_get_mtu": "0x00008217", + "gatt_client_is_ready": "0x000082bd", + "gatt_client_listen_for_characteristic_value_updates": "0x000082d3", + "gatt_client_prepare_write": "0x000082f3", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x0000832f", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x00008359", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x0000835f", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x0000838d", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x00008393", + "gatt_client_read_multiple_characteristic_values": "0x000083c1", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x000083f1", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x0000841f", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x0000846b", + "gatt_client_register_handler": "0x000084b5", + "gatt_client_reliable_write_long_value_of_characteristic": "0x000084c1", + "gatt_client_signed_write_without_response": "0x000088c5", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008989", + "gatt_client_write_client_characteristic_configuration": "0x000089c3", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008a15", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008a25", + "gatt_client_write_long_value_of_characteristic": "0x00008a61", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008a71", + "gatt_client_write_value_of_characteristic": "0x00008aad", + "gatt_client_write_value_of_characteristic_without_response": "0x00008ae3", + "hci_add_event_handler": "0x00009ff5", + "hci_power_control": "0x0000a775", + "hci_register_acl_packet_handler": "0x0000a929", + "kv_commit": "0x0000b0a9", + "kv_get": "0x0000b105", + "kv_init": "0x0000b111", + "kv_init_backend": "0x0000b18d", + "kv_put": "0x0000b1a1", + "kv_remove": "0x0000b1ad", + "kv_remove_all": "0x0000b1e1", + "kv_value_modified": "0x0000b211", + "kv_value_modified_of_key": "0x0000b22d", + "kv_visit": "0x0000b239", + "l2cap_add_event_handler": "0x0000b2c9", + "l2cap_can_send_packet_now": "0x0000b2d9", + "l2cap_create_le_credit_based_connection_request": "0x0000b495", + "l2cap_credit_based_send": "0x0000b5d9", + "l2cap_credit_based_send_continue": "0x0000b605", + "l2cap_disconnect": "0x0000b681", + "l2cap_get_le_credit_based_connection_credits": "0x0000b8d1", + "l2cap_get_peer_mtu_for_local_cid": "0x0000b8ed", + "l2cap_init": "0x0000bcc1", + "l2cap_le_send_flow_control_credit": "0x0000bdb7", + "l2cap_max_le_mtu": "0x0000c0c1", + "l2cap_register_packet_handler": "0x0000c1e9", + "l2cap_register_service": "0x0000c1f5", + "l2cap_request_can_send_now_event": "0x0000c305", + "l2cap_request_connection_parameter_update": "0x0000c31f", + "l2cap_send_echo_request": "0x0000c7f9", + "l2cap_unregister_service": "0x0000c8b9", + "le_device_db_add": "0x0000c911", + "le_device_db_find": "0x0000c9e9", + "le_device_db_from_key": "0x0000ca15", + "le_device_db_iter_cur": "0x0000ca1d", + "le_device_db_iter_cur_key": "0x0000ca21", + "le_device_db_iter_init": "0x0000ca25", + "le_device_db_iter_next": "0x0000ca2d", + "le_device_db_remove_key": "0x0000ca53", + "ll_aes_encrypt": "0x0000ca81", + "ll_config": "0x0000cafd", + "ll_free": "0x0000cb33", + "ll_get_capabilities": "0x0000cb3d", + "ll_get_heap_free_size": "0x0000cb5d", + "ll_get_states": "0x0000cb6d", + "ll_hint_on_ce_len": "0x0000cc09", + "ll_legacy_adv_set_interval": "0x0000cc41", + "ll_malloc": "0x0000cc51", + "ll_query_timing_info": "0x0000cd89", + "ll_register_hci_acl_previewer": "0x0000cdd5", + "ll_scan_set_fixed_channel": "0x0000ce39", + "ll_set_adv_access_address": "0x0000d051", + "ll_set_adv_coded_scheme": "0x0000d05d", + "ll_set_conn_acl_report_latency": "0x0000d085", + "ll_set_conn_coded_scheme": "0x0000d0b1", + "ll_set_conn_latency": "0x0000d0d9", + "ll_set_conn_tx_power": "0x0000d105", + "ll_set_def_antenna": "0x0000d149", + "ll_set_initiating_coded_scheme": "0x0000d165", + "ll_set_max_conn_number": "0x0000d171", + "nibble_for_char": "0x0001d1e9", + "platform_calibrate_rt_clk": "0x0001d277", "platform_call_on_stack": "0x000040ef", - "platform_config": "0x0001d1f5", - "platform_controller_run": "0x0001d319", - "platform_delete_timer": "0x0001d34d", - "platform_enable_irq": "0x0001d355", - "platform_get_gen_os_driver": "0x0001d38d", - "platform_get_link_layer_interf": "0x0001d399", - "platform_get_task_handle": "0x0001d3a1", - "platform_get_timer_counter": "0x0001d3b9", - "platform_get_us_time": "0x0001d3bd", - "platform_get_version": "0x0001d3c1", - "platform_hrng": "0x0001d3c9", - "platform_init_controller": "0x0001d3d1", - "platform_os_idle_resumed_hook": "0x0001d3ed", - "platform_patch_rf_init_data": "0x0001d3f1", - "platform_post_sleep_processing": "0x0001d3fd", - "platform_pre_sleep_processing": "0x0001d403", - "platform_pre_suppress_ticks_and_sleep_processing": "0x0001d409", - "platform_printf": "0x0001d40d", - "platform_raise_assertion": "0x0001d421", - "platform_rand": "0x0001d435", - "platform_read_info": "0x0001d439", - "platform_read_persistent_reg": "0x0001d469", - "platform_reset": "0x0001d479", - "platform_rt_rc_auto_tune": "0x0001d49d", - "platform_rt_rc_auto_tune2": "0x0001d4a5", - "platform_rt_rc_tune": "0x0001d52d", - "platform_set_abs_timer": "0x0001d541", - "platform_set_evt_callback": "0x0001d545", - "platform_set_evt_callback_table": "0x0001d559", - "platform_set_irq_callback": "0x0001d565", - "platform_set_irq_callback_table": "0x0001d581", - "platform_set_rf_clk_source": "0x0001d58d", - "platform_set_rf_init_data": "0x0001d599", - "platform_set_rf_power_mapping": "0x0001d5a5", - "platform_set_timer": "0x0001d5b1", - "platform_shutdown": "0x0001d5b5", - "platform_switch_app": "0x0001d5b9", - "platform_trace_raw": "0x0001d5e5", - "platform_write_persistent_reg": "0x0001d5fd", - "printf_hexdump": "0x0001d60d", - "reverse_128": "0x0001d945", - "reverse_24": "0x0001d94b", - "reverse_256": "0x0001d951", - "reverse_48": "0x0001d957", - "reverse_56": "0x0001d95d", - "reverse_64": "0x0001d963", - "reverse_bd_addr": "0x0001d969", - "reverse_bytes": "0x0001d96f", - "sm_add_event_handler": "0x0001db0d", - "sm_address_resolution_lookup": "0x0001dc65", - "sm_authenticated": "0x0001dfe1", - "sm_authorization_decline": "0x0001dfef", - "sm_authorization_grant": "0x0001e00f", - "sm_authorization_state": "0x0001e02f", - "sm_bonding_decline": "0x0001e049", - "sm_config": "0x0001e4a5", - "sm_config_conn": "0x0001e4bd", - "sm_encryption_key_size": "0x0001e673", - "sm_just_works_confirm": "0x0001ebf9", - "sm_le_device_key": "0x0001ef31", - "sm_passkey_input": "0x0001efc7", - "sm_private_random_address_generation_get": "0x0001f381", - "sm_private_random_address_generation_get_mode": "0x0001f389", - "sm_private_random_address_generation_set_mode": "0x0001f395", - "sm_private_random_address_generation_set_update_period": "0x0001f3bd", - "sm_register_external_ltk_callback": "0x0001f4f9", - "sm_register_oob_data_callback": "0x0001f505", - "sm_request_pairing": "0x0001f511", - "sm_send_security_request": "0x0001ffe7", - "sm_set_accepted_stk_generation_methods": "0x0002000d", - "sm_set_authentication_requirements": "0x00020019", - "sm_set_encryption_key_size_range": "0x00020025", - "sscanf_bd_addr": "0x00020381", - "sysSetPublicDeviceAddr": "0x00020735", - "uuid128_to_str": "0x00020d49", - "uuid_add_bluetooth_prefix": "0x00020da1", - "uuid_has_bluetooth_prefix": "0x00020dc1" + "platform_cancel_us_timer": "0x0001d27b", + "platform_config": "0x0001d291", + "platform_controller_run": "0x0001d3b5", + "platform_create_us_timer": "0x0001d3e9", + "platform_delete_timer": "0x0001d3fd", + "platform_enable_irq": "0x0001d405", + "platform_get_gen_os_driver": "0x0001d43d", + "platform_get_link_layer_interf": "0x0001d449", + "platform_get_task_handle": "0x0001d451", + "platform_get_timer_counter": "0x0001d469", + "platform_get_us_time": "0x0001d46d", + "platform_get_version": "0x0001d471", + "platform_hrng": "0x0001d479", + "platform_init_controller": "0x0001d481", + "platform_os_idle_resumed_hook": "0x0001d49d", + "platform_patch_rf_init_data": "0x0001d4a1", + "platform_post_sleep_processing": "0x0001d4ad", + "platform_pre_sleep_processing": "0x0001d4b3", + "platform_pre_suppress_ticks_and_sleep_processing": "0x0001d4b9", + "platform_printf": "0x0001d4bd", + "platform_raise_assertion": "0x0001d4d1", + "platform_rand": "0x0001d4e5", + "platform_read_info": "0x0001d4e9", + "platform_read_persistent_reg": "0x0001d519", + "platform_reset": "0x0001d529", + "platform_rt_rc_auto_tune": "0x0001d54d", + "platform_rt_rc_auto_tune2": "0x0001d555", + "platform_rt_rc_tune": "0x0001d5d1", + "platform_set_abs_timer": "0x0001d5f5", + "platform_set_evt_callback": "0x0001d5f9", + "platform_set_evt_callback_table": "0x0001d60d", + "platform_set_irq_callback": "0x0001d619", + "platform_set_irq_callback_table": "0x0001d635", + "platform_set_rf_clk_source": "0x0001d641", + "platform_set_rf_init_data": "0x0001d64d", + "platform_set_rf_power_mapping": "0x0001d659", + "platform_set_timer": "0x0001d665", + "platform_shutdown": "0x0001d669", + "platform_switch_app": "0x0001d66d", + "platform_trace_raw": "0x0001d699", + "platform_write_persistent_reg": "0x0001d6b1", + "printf_hexdump": "0x0001d6c1", + "reverse_128": "0x0001d9f9", + "reverse_24": "0x0001d9ff", + "reverse_256": "0x0001da05", + "reverse_48": "0x0001da0b", + "reverse_56": "0x0001da11", + "reverse_64": "0x0001da17", + "reverse_bd_addr": "0x0001da1d", + "reverse_bytes": "0x0001da23", + "sm_add_event_handler": "0x0001dbc1", + "sm_address_resolution_lookup": "0x0001dd19", + "sm_authenticated": "0x0001e0c1", + "sm_authorization_decline": "0x0001e0cf", + "sm_authorization_grant": "0x0001e0ef", + "sm_authorization_state": "0x0001e10f", + "sm_bonding_decline": "0x0001e129", + "sm_config": "0x0001e585", + "sm_config_conn": "0x0001e5b9", + "sm_encryption_key_size": "0x0001e773", + "sm_just_works_confirm": "0x0001ecf9", + "sm_le_device_key": "0x0001f039", + "sm_passkey_input": "0x0001f0cf", + "sm_private_random_address_generation_get": "0x0001f491", + "sm_private_random_address_generation_get_mode": "0x0001f499", + "sm_private_random_address_generation_set_mode": "0x0001f4a5", + "sm_private_random_address_generation_set_update_period": "0x0001f4cd", + "sm_register_external_ltk_callback": "0x0001f609", + "sm_register_oob_data_callback": "0x0001f615", + "sm_request_pairing": "0x0001f621", + "sm_send_security_request": "0x000200ff", + "sm_set_accepted_stk_generation_methods": "0x00020125", + "sm_set_authentication_requirements": "0x00020131", + "sm_set_encryption_key_size_range": "0x00020141", + "sscanf_bd_addr": "0x0002048d", + "sysSetPublicDeviceAddr": "0x00020889", + "uuid128_to_str": "0x00020eb1", + "uuid_add_bluetooth_prefix": "0x00020f09", + "uuid_has_bluetooth_prefix": "0x00020f29" } \ No newline at end of file diff --git a/bundles/noos_mini/ING9187xx/meta.json b/bundles/noos_mini/ING9187xx/meta.json index 9b6b7b432..b29f806ba 100644 --- a/bundles/noos_mini/ING9187xx/meta.json +++ b/bundles/noos_mini/ING9187xx/meta.json @@ -4,15 +4,21 @@ }, "ram": { "base": 536870912, - "size": 2540 + "size": 2476 }, "rom": { "base": 16384, - "size": 124548 + "size": 124916 + }, + "var": { + "link_layer_features": { + "addr": 137424, + "value": "3ff9010400000000" + } }, "version": [ 1, 9, - 41 + 56 ] } \ No newline at end of file diff --git a/bundles/noos_mini/ING9187xx/platform.bin b/bundles/noos_mini/ING9187xx/platform.bin index b3c78aa67..19ce3f203 100644 Binary files a/bundles/noos_mini/ING9187xx/platform.bin and b/bundles/noos_mini/ING9187xx/platform.bin differ diff --git a/bundles/noos_mini/ING9188xx/apis.json b/bundles/noos_mini/ING9188xx/apis.json index ea4585569..ef182b7d6 100644 --- a/bundles/noos_mini/ING9188xx/apis.json +++ b/bundles/noos_mini/ING9188xx/apis.json @@ -6,262 +6,269 @@ "att_dispatch_server_can_send_now": "0x000057f5", "att_dispatch_server_request_can_send_now_event": "0x000057fb", "att_emit_general_event": "0x000058ad", - "att_server_can_send_packet_now": "0x00005fd9", - "att_server_deferred_read_response": "0x00005fdd", - "att_server_get_mtu": "0x00005ff5", - "att_server_indicate": "0x00006061", - "att_server_init": "0x000060e5", - "att_server_notify": "0x00006121", - "att_server_register_packet_handler": "0x00006239", - "att_server_request_can_send_now_event": "0x00006245", - "att_set_db": "0x00006261", - "att_set_read_callback": "0x00006275", - "att_set_write_callback": "0x00006281", - "bd_addr_cmp": "0x000063f1", - "bd_addr_copy": "0x000063f7", - "bd_addr_to_str": "0x00006401", - "big_endian_read_16": "0x00006439", - "big_endian_read_32": "0x00006441", - "big_endian_store_16": "0x00006455", - "big_endian_store_32": "0x00006461", - "btstack_config": "0x00006599", - "btstack_memory_pool_create": "0x000066e7", - "btstack_memory_pool_free": "0x00006711", - "btstack_memory_pool_get": "0x00006771", - "btstack_push_user_msg": "0x000067b9", - "btstack_push_user_runnable": "0x000067c5", - "btstack_reset": "0x000067d1", - "char_for_nibble": "0x00006a95", - "gap_add_dev_to_periodic_list": "0x000073a9", - "gap_add_whitelist": "0x000073b9", - "gap_aes_encrypt": "0x000073c5", - "gap_clear_white_lists": "0x000073fd", - "gap_clr_adv_set": "0x00007409", - "gap_clr_periodic_adv_list": "0x00007415", - "gap_create_connection_cancel": "0x00007421", - "gap_default_periodic_adv_sync_transfer_param": "0x0000742d", - "gap_disconnect": "0x00007445", - "gap_disconnect_all": "0x00007471", - "gap_ext_create_connection": "0x000074b1", - "gap_get_connection_parameter_range": "0x00007589", - "gap_le_read_channel_map": "0x000075c1", - "gap_periodic_adv_create_sync": "0x0000762d", - "gap_periodic_adv_create_sync_cancel": "0x00007651", - "gap_periodic_adv_set_info_transfer": "0x0000765d", - "gap_periodic_adv_sync_transfer": "0x0000766d", - "gap_periodic_adv_sync_transfer_param": "0x0000767d", - "gap_periodic_adv_term_sync": "0x00007699", - "gap_read_antenna_info": "0x00007721", - "gap_read_periodic_adv_list_size": "0x0000772d", - "gap_read_phy": "0x00007739", - "gap_read_remote_used_features": "0x00007745", - "gap_read_remote_version": "0x00007751", - "gap_read_rssi": "0x0000775d", - "gap_remove_whitelist": "0x00007769", - "gap_rmv_adv_set": "0x000077e5", - "gap_rmv_dev_from_periodic_list": "0x000077f1", - "gap_rx_test_v2": "0x00007801", - "gap_rx_test_v3": "0x00007811", - "gap_set_adv_set_random_addr": "0x0000785d", - "gap_set_callback_for_next_hci": "0x00007899", - "gap_set_connection_cte_request_enable": "0x000078b9", - "gap_set_connection_cte_response_enable": "0x000078d5", - "gap_set_connection_cte_rx_param": "0x000078e5", - "gap_set_connection_cte_tx_param": "0x00007939", - "gap_set_connection_parameter_range": "0x00007985", - "gap_set_connectionless_cte_tx_enable": "0x0000799d", - "gap_set_connectionless_cte_tx_param": "0x000079ad", - "gap_set_connectionless_iq_sampling_enable": "0x00007a09", - "gap_set_data_length": "0x00007a65", - "gap_set_def_phy": "0x00007a7d", - "gap_set_ext_adv_data": "0x00007a8d", - "gap_set_ext_adv_enable": "0x00007aa5", - "gap_set_ext_adv_para": "0x00007b15", - "gap_set_ext_scan_enable": "0x00007bed", - "gap_set_ext_scan_para": "0x00007c05", - "gap_set_ext_scan_response_data": "0x00007ca5", - "gap_set_host_channel_classification": "0x00007cbd", - "gap_set_periodic_adv_data": "0x00007ccd", - "gap_set_periodic_adv_enable": "0x00007d3d", - "gap_set_periodic_adv_para": "0x00007d4d", - "gap_set_periodic_adv_rx_enable": "0x00007d65", - "gap_set_phy": "0x00007d75", - "gap_set_random_device_address": "0x00007d91", - "gap_start_ccm": "0x00007dc1", - "gap_test_end": "0x00007e09", - "gap_tx_test_v2": "0x00007e15", - "gap_tx_test_v4": "0x00007e2d", - "gap_update_connection_parameters": "0x00007e51", - "gap_vendor_tx_continuous_wave": "0x00007e91", - "gatt_client_cancel_write": "0x000083b9", - "gatt_client_discover_characteristic_descriptors": "0x000083df", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x0000841f", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x0000846f", - "gatt_client_discover_characteristics_for_service": "0x000084bf", - "gatt_client_discover_primary_services": "0x000084f5", - "gatt_client_discover_primary_services_by_uuid128": "0x00008527", - "gatt_client_discover_primary_services_by_uuid16": "0x0000856b", - "gatt_client_execute_write": "0x000085a7", - "gatt_client_find_included_services_for_service": "0x000085cd", - "gatt_client_get_mtu": "0x000085fb", - "gatt_client_is_ready": "0x00008699", - "gatt_client_listen_for_characteristic_value_updates": "0x000086af", - "gatt_client_prepare_write": "0x000086cf", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x0000870b", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x00008735", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x0000873b", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x00008769", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x0000876f", - "gatt_client_read_multiple_characteristic_values": "0x0000879d", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x000087cd", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x000087fb", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x00008847", - "gatt_client_register_handler": "0x00008891", - "gatt_client_reliable_write_long_value_of_characteristic": "0x0000889d", - "gatt_client_signed_write_without_response": "0x00008ca1", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008d65", - "gatt_client_write_client_characteristic_configuration": "0x00008d9f", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008df1", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008e01", - "gatt_client_write_long_value_of_characteristic": "0x00008e3d", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008e4d", - "gatt_client_write_value_of_characteristic": "0x00008e89", - "gatt_client_write_value_of_characteristic_without_response": "0x00008ebf", - "hci_add_event_handler": "0x0000a3f5", - "hci_power_control": "0x0000ab7d", - "hci_register_acl_packet_handler": "0x0000ad31", - "kv_commit": "0x0000b4c1", - "kv_get": "0x0000b51d", - "kv_init": "0x0000b529", - "kv_init_backend": "0x0000b5a5", - "kv_put": "0x0000b5b9", - "kv_remove": "0x0000b5c5", - "kv_remove_all": "0x0000b5f9", - "kv_value_modified": "0x0000b629", - "kv_value_modified_of_key": "0x0000b645", - "kv_visit": "0x0000b651", - "l2cap_add_event_handler": "0x0000b6e1", - "l2cap_can_send_packet_now": "0x0000b6f1", - "l2cap_create_le_credit_based_connection_request": "0x0000b8ad", - "l2cap_credit_based_send": "0x0000b9f1", - "l2cap_credit_based_send_continue": "0x0000ba1d", - "l2cap_disconnect": "0x0000ba99", - "l2cap_get_le_credit_based_connection_credits": "0x0000bce9", - "l2cap_get_peer_mtu_for_local_cid": "0x0000bd05", - "l2cap_init": "0x0000c0d9", - "l2cap_le_send_flow_control_credit": "0x0000c1cf", - "l2cap_max_le_mtu": "0x0000c4d9", - "l2cap_register_packet_handler": "0x0000c601", - "l2cap_register_service": "0x0000c60d", - "l2cap_request_can_send_now_event": "0x0000c71d", - "l2cap_request_connection_parameter_update": "0x0000c737", - "l2cap_send_echo_request": "0x0000cc11", - "l2cap_unregister_service": "0x0000ccd1", - "le_device_db_add": "0x0000cd29", - "le_device_db_find": "0x0000cdf1", - "le_device_db_from_key": "0x0000ce1d", - "le_device_db_iter_cur": "0x0000ce25", - "le_device_db_iter_cur_key": "0x0000ce29", - "le_device_db_iter_init": "0x0000ce2d", - "le_device_db_iter_next": "0x0000ce35", - "le_device_db_remove_key": "0x0000ce5b", - "ll_aes_encrypt": "0x0000ce89", - "ll_config": "0x0000cf05", - "ll_free": "0x0000cf3b", - "ll_get_heap_free_size": "0x0000cf45", - "ll_hint_on_ce_len": "0x0000cf59", - "ll_legacy_adv_set_interval": "0x0000cf91", - "ll_malloc": "0x0000cfa1", - "ll_query_timing_info": "0x0000d0d9", - "ll_register_hci_acl_previewer": "0x0000d125", - "ll_scan_set_fixed_channel": "0x0000d189", - "ll_set_adv_access_address": "0x0000d3a1", - "ll_set_adv_coded_scheme": "0x0000d3ad", - "ll_set_conn_acl_report_latency": "0x0000d3d5", - "ll_set_conn_coded_scheme": "0x0000d401", - "ll_set_conn_latency": "0x0000d429", - "ll_set_conn_tx_power": "0x0000d455", - "ll_set_def_antenna": "0x0000d499", - "ll_set_initiating_coded_scheme": "0x0000d4b5", - "ll_set_max_conn_number": "0x0000d4c1", - "nibble_for_char": "0x0001e40d", - "platform_calibrate_rt_clk": "0x0001e49b", + "att_server_can_send_packet_now": "0x00005fdd", + "att_server_deferred_read_response": "0x00005fe1", + "att_server_get_mtu": "0x00005ff9", + "att_server_indicate": "0x00006065", + "att_server_init": "0x000060e9", + "att_server_notify": "0x00006125", + "att_server_register_packet_handler": "0x0000623d", + "att_server_request_can_send_now_event": "0x00006249", + "att_set_db": "0x00006265", + "att_set_read_callback": "0x00006279", + "att_set_write_callback": "0x00006285", + "bd_addr_cmp": "0x000063f5", + "bd_addr_copy": "0x000063fb", + "bd_addr_to_str": "0x00006405", + "big_endian_read_16": "0x0000643d", + "big_endian_read_32": "0x00006445", + "big_endian_store_16": "0x00006459", + "big_endian_store_32": "0x00006465", + "btstack_config": "0x0000659d", + "btstack_get_capabilities": "0x000065a9", + "btstack_memory_pool_create": "0x00006703", + "btstack_memory_pool_free": "0x0000672d", + "btstack_memory_pool_get": "0x0000678d", + "btstack_push_user_msg": "0x000067d5", + "btstack_push_user_runnable": "0x000067e1", + "btstack_reset": "0x000067ed", + "char_for_nibble": "0x00006ab1", + "gap_add_dev_to_periodic_list": "0x000073b5", + "gap_add_whitelist": "0x000073c5", + "gap_aes_encrypt": "0x000073d1", + "gap_clear_white_lists": "0x00007409", + "gap_clr_adv_set": "0x00007415", + "gap_clr_periodic_adv_list": "0x00007421", + "gap_create_connection_cancel": "0x0000742d", + "gap_default_periodic_adv_sync_transfer_param": "0x00007439", + "gap_disconnect": "0x00007451", + "gap_disconnect2": "0x00007459", + "gap_disconnect_all": "0x00007485", + "gap_ext_create_connection": "0x000074c5", + "gap_get_connection_parameter_range": "0x0000759d", + "gap_le_read_channel_map": "0x000075d5", + "gap_periodic_adv_create_sync": "0x00007635", + "gap_periodic_adv_create_sync_cancel": "0x00007659", + "gap_periodic_adv_set_info_transfer": "0x00007665", + "gap_periodic_adv_sync_transfer": "0x00007675", + "gap_periodic_adv_sync_transfer_param": "0x00007685", + "gap_periodic_adv_term_sync": "0x000076a1", + "gap_read_antenna_info": "0x00007729", + "gap_read_periodic_adv_list_size": "0x00007735", + "gap_read_phy": "0x00007741", + "gap_read_remote_used_features": "0x0000774d", + "gap_read_remote_version": "0x00007759", + "gap_read_rssi": "0x00007765", + "gap_read_white_lists_size": "0x00007771", + "gap_remove_whitelist": "0x0000777d", + "gap_rmv_adv_set": "0x000077f9", + "gap_rmv_dev_from_periodic_list": "0x00007805", + "gap_rx_test_v2": "0x00007815", + "gap_rx_test_v3": "0x00007825", + "gap_set_adv_set_random_addr": "0x00007871", + "gap_set_callback_for_next_hci": "0x00007895", + "gap_set_connection_cte_request_enable": "0x000078b5", + "gap_set_connection_cte_response_enable": "0x000078d1", + "gap_set_connection_cte_rx_param": "0x000078e1", + "gap_set_connection_cte_tx_param": "0x00007935", + "gap_set_connection_parameter_range": "0x00007981", + "gap_set_connectionless_cte_tx_enable": "0x00007999", + "gap_set_connectionless_cte_tx_param": "0x000079a9", + "gap_set_connectionless_iq_sampling_enable": "0x00007a05", + "gap_set_data_length": "0x00007a61", + "gap_set_def_phy": "0x00007a79", + "gap_set_ext_adv_data": "0x00007a89", + "gap_set_ext_adv_enable": "0x00007aa1", + "gap_set_ext_adv_para": "0x00007b11", + "gap_set_ext_scan_enable": "0x00007bd9", + "gap_set_ext_scan_para": "0x00007bf1", + "gap_set_ext_scan_response_data": "0x00007c91", + "gap_set_host_channel_classification": "0x00007ca9", + "gap_set_periodic_adv_data": "0x00007cb9", + "gap_set_periodic_adv_enable": "0x00007d29", + "gap_set_periodic_adv_para": "0x00007d39", + "gap_set_periodic_adv_rx_enable": "0x00007d51", + "gap_set_phy": "0x00007d61", + "gap_set_random_device_address": "0x00007d7d", + "gap_start_ccm": "0x00007d99", + "gap_test_end": "0x00007de1", + "gap_tx_test_v2": "0x00007ded", + "gap_tx_test_v4": "0x00007e05", + "gap_update_connection_parameters": "0x00007e29", + "gap_vendor_tx_continuous_wave": "0x00007e69", + "gatt_client_cancel_write": "0x00008391", + "gatt_client_discover_characteristic_descriptors": "0x000083b7", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x000083f7", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x00008447", + "gatt_client_discover_characteristics_for_service": "0x00008497", + "gatt_client_discover_primary_services": "0x000084cd", + "gatt_client_discover_primary_services_by_uuid128": "0x000084ff", + "gatt_client_discover_primary_services_by_uuid16": "0x00008543", + "gatt_client_execute_write": "0x0000857f", + "gatt_client_find_included_services_for_service": "0x000085a5", + "gatt_client_get_mtu": "0x000085d3", + "gatt_client_is_ready": "0x00008679", + "gatt_client_listen_for_characteristic_value_updates": "0x0000868f", + "gatt_client_prepare_write": "0x000086af", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x000086eb", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x00008715", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x0000871b", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x00008749", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x0000874f", + "gatt_client_read_multiple_characteristic_values": "0x0000877d", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x000087ad", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x000087db", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x00008827", + "gatt_client_register_handler": "0x00008871", + "gatt_client_reliable_write_long_value_of_characteristic": "0x0000887d", + "gatt_client_signed_write_without_response": "0x00008c81", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008d45", + "gatt_client_write_client_characteristic_configuration": "0x00008d7f", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008dd1", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008de1", + "gatt_client_write_long_value_of_characteristic": "0x00008e1d", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008e2d", + "gatt_client_write_value_of_characteristic": "0x00008e69", + "gatt_client_write_value_of_characteristic_without_response": "0x00008e9f", + "hci_add_event_handler": "0x0000a3cd", + "hci_power_control": "0x0000ab4d", + "hci_register_acl_packet_handler": "0x0000ad01", + "kv_commit": "0x0000b481", + "kv_get": "0x0000b4dd", + "kv_init": "0x0000b4e9", + "kv_init_backend": "0x0000b565", + "kv_put": "0x0000b579", + "kv_remove": "0x0000b585", + "kv_remove_all": "0x0000b5b9", + "kv_value_modified": "0x0000b5e9", + "kv_value_modified_of_key": "0x0000b605", + "kv_visit": "0x0000b611", + "l2cap_add_event_handler": "0x0000b6a1", + "l2cap_can_send_packet_now": "0x0000b6b1", + "l2cap_create_le_credit_based_connection_request": "0x0000b86d", + "l2cap_credit_based_send": "0x0000b9b1", + "l2cap_credit_based_send_continue": "0x0000b9dd", + "l2cap_disconnect": "0x0000ba59", + "l2cap_get_le_credit_based_connection_credits": "0x0000bca9", + "l2cap_get_peer_mtu_for_local_cid": "0x0000bcc5", + "l2cap_init": "0x0000c099", + "l2cap_le_send_flow_control_credit": "0x0000c18f", + "l2cap_max_le_mtu": "0x0000c499", + "l2cap_register_packet_handler": "0x0000c5c1", + "l2cap_register_service": "0x0000c5cd", + "l2cap_request_can_send_now_event": "0x0000c6dd", + "l2cap_request_connection_parameter_update": "0x0000c6f7", + "l2cap_send_echo_request": "0x0000cbd1", + "l2cap_unregister_service": "0x0000cc91", + "le_device_db_add": "0x0000cce9", + "le_device_db_find": "0x0000cdc1", + "le_device_db_from_key": "0x0000cded", + "le_device_db_iter_cur": "0x0000cdf5", + "le_device_db_iter_cur_key": "0x0000cdf9", + "le_device_db_iter_init": "0x0000cdfd", + "le_device_db_iter_next": "0x0000ce05", + "le_device_db_remove_key": "0x0000ce2b", + "ll_aes_encrypt": "0x0000ce59", + "ll_config": "0x0000ced5", + "ll_free": "0x0000cf0b", + "ll_get_capabilities": "0x0000cf15", + "ll_get_heap_free_size": "0x0000cf35", + "ll_get_states": "0x0000cf45", + "ll_hint_on_ce_len": "0x0000cfe1", + "ll_legacy_adv_set_interval": "0x0000d019", + "ll_malloc": "0x0000d029", + "ll_query_timing_info": "0x0000d161", + "ll_register_hci_acl_previewer": "0x0000d1ad", + "ll_scan_set_fixed_channel": "0x0000d211", + "ll_set_adv_access_address": "0x0000d429", + "ll_set_adv_coded_scheme": "0x0000d435", + "ll_set_conn_acl_report_latency": "0x0000d45d", + "ll_set_conn_coded_scheme": "0x0000d489", + "ll_set_conn_latency": "0x0000d4b1", + "ll_set_conn_tx_power": "0x0000d4dd", + "ll_set_def_antenna": "0x0000d521", + "ll_set_initiating_coded_scheme": "0x0000d53d", + "ll_set_max_conn_number": "0x0000d549", + "nibble_for_char": "0x0001e495", + "platform_calibrate_rt_clk": "0x0001e523", "platform_call_on_stack": "0x000040ef", - "platform_config": "0x0001e4a1", - "platform_controller_run": "0x0001e5c5", - "platform_delete_timer": "0x0001e5f9", - "platform_enable_irq": "0x0001e601", - "platform_get_gen_os_driver": "0x0001e639", - "platform_get_link_layer_interf": "0x0001e645", - "platform_get_task_handle": "0x0001e64d", - "platform_get_timer_counter": "0x0001e665", - "platform_get_us_time": "0x0001e669", - "platform_get_version": "0x0001e66d", - "platform_hrng": "0x0001e675", - "platform_init_controller": "0x0001e67d", - "platform_os_idle_resumed_hook": "0x0001e699", - "platform_patch_rf_init_data": "0x0001e69d", - "platform_post_sleep_processing": "0x0001e6a9", - "platform_pre_sleep_processing": "0x0001e6af", - "platform_pre_suppress_ticks_and_sleep_processing": "0x0001e6b5", - "platform_printf": "0x0001e6b9", - "platform_raise_assertion": "0x0001e6cd", - "platform_rand": "0x0001e6e1", - "platform_read_info": "0x0001e6e5", - "platform_read_persistent_reg": "0x0001e715", - "platform_reset": "0x0001e725", - "platform_rt_rc_auto_tune": "0x0001e749", - "platform_rt_rc_auto_tune2": "0x0001e751", - "platform_rt_rc_tune": "0x0001e7d9", - "platform_set_abs_timer": "0x0001e7ed", - "platform_set_evt_callback": "0x0001e7f1", - "platform_set_evt_callback_table": "0x0001e805", - "platform_set_irq_callback": "0x0001e811", - "platform_set_irq_callback_table": "0x0001e82d", - "platform_set_rf_clk_source": "0x0001e839", - "platform_set_rf_init_data": "0x0001e845", - "platform_set_rf_power_mapping": "0x0001e851", - "platform_set_timer": "0x0001e85d", - "platform_shutdown": "0x0001e861", - "platform_switch_app": "0x0001e865", - "platform_trace_raw": "0x0001e891", - "platform_write_persistent_reg": "0x0001e8a9", - "printf_hexdump": "0x0001e8b9", - "reverse_128": "0x0001ec29", - "reverse_24": "0x0001ec2f", - "reverse_256": "0x0001ec35", - "reverse_48": "0x0001ec3b", - "reverse_56": "0x0001ec41", - "reverse_64": "0x0001ec47", - "reverse_bd_addr": "0x0001ec4d", - "reverse_bytes": "0x0001ec53", - "sm_add_event_handler": "0x0001ef41", - "sm_address_resolution_lookup": "0x0001f099", - "sm_authenticated": "0x0001f415", - "sm_authorization_decline": "0x0001f423", - "sm_authorization_grant": "0x0001f443", - "sm_authorization_state": "0x0001f463", - "sm_bonding_decline": "0x0001f47d", - "sm_config": "0x0001f8d9", - "sm_config_conn": "0x0001f8f1", - "sm_encryption_key_size": "0x0001faa7", - "sm_just_works_confirm": "0x0002002d", - "sm_le_device_key": "0x00020365", - "sm_passkey_input": "0x000203fb", - "sm_private_random_address_generation_get": "0x000207b5", - "sm_private_random_address_generation_get_mode": "0x000207bd", - "sm_private_random_address_generation_set_mode": "0x000207c9", - "sm_private_random_address_generation_set_update_period": "0x000207f1", - "sm_register_external_ltk_callback": "0x0002092d", - "sm_register_oob_data_callback": "0x00020939", - "sm_request_pairing": "0x00020945", - "sm_send_security_request": "0x0002141b", - "sm_set_accepted_stk_generation_methods": "0x00021441", - "sm_set_authentication_requirements": "0x0002144d", - "sm_set_encryption_key_size_range": "0x00021459", - "sscanf_bd_addr": "0x000217b5", - "sysSetPublicDeviceAddr": "0x00021b69", - "uuid128_to_str": "0x00022315", - "uuid_add_bluetooth_prefix": "0x0002236d", - "uuid_has_bluetooth_prefix": "0x0002238d" + "platform_cancel_us_timer": "0x0001e527", + "platform_config": "0x0001e53d", + "platform_controller_run": "0x0001e661", + "platform_create_us_timer": "0x0001e695", + "platform_delete_timer": "0x0001e6a9", + "platform_enable_irq": "0x0001e6b1", + "platform_get_gen_os_driver": "0x0001e6e9", + "platform_get_link_layer_interf": "0x0001e6f5", + "platform_get_task_handle": "0x0001e6fd", + "platform_get_timer_counter": "0x0001e715", + "platform_get_us_time": "0x0001e719", + "platform_get_version": "0x0001e71d", + "platform_hrng": "0x0001e725", + "platform_init_controller": "0x0001e72d", + "platform_os_idle_resumed_hook": "0x0001e749", + "platform_patch_rf_init_data": "0x0001e74d", + "platform_post_sleep_processing": "0x0001e759", + "platform_pre_sleep_processing": "0x0001e75f", + "platform_pre_suppress_ticks_and_sleep_processing": "0x0001e765", + "platform_printf": "0x0001e769", + "platform_raise_assertion": "0x0001e77d", + "platform_rand": "0x0001e791", + "platform_read_info": "0x0001e795", + "platform_read_persistent_reg": "0x0001e7c5", + "platform_reset": "0x0001e7d5", + "platform_rt_rc_auto_tune": "0x0001e7f9", + "platform_rt_rc_auto_tune2": "0x0001e801", + "platform_rt_rc_tune": "0x0001e87d", + "platform_set_abs_timer": "0x0001e8a1", + "platform_set_evt_callback": "0x0001e8a5", + "platform_set_evt_callback_table": "0x0001e8b9", + "platform_set_irq_callback": "0x0001e8c5", + "platform_set_irq_callback_table": "0x0001e8e1", + "platform_set_rf_clk_source": "0x0001e8ed", + "platform_set_rf_init_data": "0x0001e8f9", + "platform_set_rf_power_mapping": "0x0001e905", + "platform_set_timer": "0x0001e911", + "platform_shutdown": "0x0001e915", + "platform_switch_app": "0x0001e919", + "platform_trace_raw": "0x0001e945", + "platform_write_persistent_reg": "0x0001e95d", + "printf_hexdump": "0x0001e96d", + "reverse_128": "0x0001ecdd", + "reverse_24": "0x0001ece3", + "reverse_256": "0x0001ece9", + "reverse_48": "0x0001ecef", + "reverse_56": "0x0001ecf5", + "reverse_64": "0x0001ecfb", + "reverse_bd_addr": "0x0001ed01", + "reverse_bytes": "0x0001ed07", + "sm_add_event_handler": "0x0001eff5", + "sm_address_resolution_lookup": "0x0001f14d", + "sm_authenticated": "0x0001f4f5", + "sm_authorization_decline": "0x0001f503", + "sm_authorization_grant": "0x0001f523", + "sm_authorization_state": "0x0001f543", + "sm_bonding_decline": "0x0001f55d", + "sm_config": "0x0001f9b9", + "sm_config_conn": "0x0001f9ed", + "sm_encryption_key_size": "0x0001fba7", + "sm_just_works_confirm": "0x0002012d", + "sm_le_device_key": "0x0002046d", + "sm_passkey_input": "0x00020503", + "sm_private_random_address_generation_get": "0x000208c5", + "sm_private_random_address_generation_get_mode": "0x000208cd", + "sm_private_random_address_generation_set_mode": "0x000208d9", + "sm_private_random_address_generation_set_update_period": "0x00020901", + "sm_register_external_ltk_callback": "0x00020a3d", + "sm_register_oob_data_callback": "0x00020a49", + "sm_request_pairing": "0x00020a55", + "sm_send_security_request": "0x00021533", + "sm_set_accepted_stk_generation_methods": "0x00021559", + "sm_set_authentication_requirements": "0x00021565", + "sm_set_encryption_key_size_range": "0x00021575", + "sscanf_bd_addr": "0x000218c1", + "sysSetPublicDeviceAddr": "0x00021cbd", + "uuid128_to_str": "0x0002247d", + "uuid_add_bluetooth_prefix": "0x000224d5", + "uuid_has_bluetooth_prefix": "0x000224f5" } \ No newline at end of file diff --git a/bundles/noos_mini/ING9188xx/meta.json b/bundles/noos_mini/ING9188xx/meta.json index e94fc2ba2..603d4c99d 100644 --- a/bundles/noos_mini/ING9188xx/meta.json +++ b/bundles/noos_mini/ING9188xx/meta.json @@ -4,15 +4,21 @@ }, "ram": { "base": 536870912, - "size": 2540 + "size": 2476 }, "rom": { "base": 16384, - "size": 130580 + "size": 130956 + }, + "var": { + "link_layer_features": { + "addr": 143116, + "value": "3ff9ff0700000000" + } }, "version": [ 1, 9, - 41 + 56 ] } \ No newline at end of file diff --git a/bundles/noos_mini/ING9188xx/platform.bin b/bundles/noos_mini/ING9188xx/platform.bin index b4a9b4d2d..2cf62fc10 100644 Binary files a/bundles/noos_mini/ING9188xx/platform.bin and b/bundles/noos_mini/ING9188xx/platform.bin differ diff --git a/bundles/noos_mini/inc/bluetooth.h b/bundles/noos_mini/inc/bluetooth.h index 44c58585a..8d306ff5e 100644 --- a/bundles/noos_mini/inc/bluetooth.h +++ b/bundles/noos_mini/inc/bluetooth.h @@ -40,10 +40,14 @@ typedef uint8_t bd_addr_t[BD_ADDR_LEN]; typedef enum { BD_ADDR_TYPE_LE_PUBLIC = 0, BD_ADDR_TYPE_LE_RANDOM = 0x01, - BD_ADDR_TYPE_LE_RESOVLED_PUB = 0x02, - BD_ADDR_TYPE_LE_RESOVLED_RAN = 0x03 + BD_ADDR_TYPE_LE_RESOLVED_PUB = 0x02, + BD_ADDR_TYPE_LE_RESOLVED_RAN = 0x03 } bd_addr_type_t; +// back-compatibility for typos +#define BD_ADDR_TYPE_LE_RESOVLED_PUB BD_ADDR_TYPE_LE_RESOLVED_PUB +#define BD_ADDR_TYPE_LE_RESOVLED_RAN BD_ADDR_TYPE_LE_RESOLVED_RAN + /** * @brief link key */ @@ -718,7 +722,7 @@ typedef enum { #define SM_AUTHREQ_NO_BONDING 0x00 #define SM_AUTHREQ_BONDING 0x01 #define SM_AUTHREQ_MITM_PROTECTION 0x04 -#define SM_AUTHREQ_SC 0x08 +#define SM_AUTHREQ_SC 0x08 // support of LE Secure Connections pairing // Key distribution flags used by spec #define SM_KEYDIST_ENC_KEY 0X01 diff --git a/bundles/noos_mini/inc/btstack_defines.h b/bundles/noos_mini/inc/btstack_defines.h index a8d08006c..25f1463b0 100644 --- a/bundles/noos_mini/inc/btstack_defines.h +++ b/bundles/noos_mini/inc/btstack_defines.h @@ -385,6 +385,20 @@ */ #define SM_EVENT_STATE_CHANGED 0xDC + /** + * @format H1B1 + * @param handle + * @param show calculated numeric value that needs to be compared + */ +#define SM_EVENT_NUMERIC_COMPARISON_REQUEST 0xDD + +/** + * @format PP + * @param irk + * @param dhk + */ +#define SM_EVENT_IRK_DHK_RESULT 0xDE + // GAP /** diff --git a/bundles/noos_mini/inc/btstack_event.h b/bundles/noos_mini/inc/btstack_event.h index e5ab49a55..dc87fa82a 100644 --- a/bundles/noos_mini/inc/btstack_event.h +++ b/bundles/noos_mini/inc/btstack_event.h @@ -107,6 +107,21 @@ uint32_t btstack_push_user_runnable(f_btstack_user_runnable fun, void *data, con */ uint8_t btstack_reset(void); +typedef struct btstack_capabilities +{ + uint16_t adv_set_num; // max number of advertising sets + uint16_t conn_num; // max number of connections + uint16_t max_mtu; // max MTU + uint16_t device_db_num; // max number of devices in database +} btstack_capabilities_t; + +/** + * @brief Get BT stack capabilities. + * + * @param[out] capabilities see `btstack_capabilities_t`. + */ +void btstack_get_capabilities(btstack_capabilities_t *capabilities); + /*** * @brief Get subevent code for le event * @param event packet @@ -780,6 +795,26 @@ static __INLINE hci_con_handle_t sm_event_numeric_comparison_get_handle(const ui return little_endian_read_16(event, 2); } +/** + * @brief Get field addr_type from event SM_EVENT_NUMERIC_COMPARISON_REQUEST + * @param event packet + * @return addr_type + * @note: btstack_type 1 + */ +static __INLINE uint8_t sm_event_numeric_comparison_get_addr_type(const uint8_t * event){ + return *decode_event_offset(event, uint8_t, 4); +} + +/** + * @brief Get field address from event SM_EVENT_NUMERIC_COMPARISON_REQUEST + * @param event packet + * @param Pointer to storage for address + * @note: btstack_type B + */ +static __INLINE void sm_event_numeric_comparison_get_address(const uint8_t * event, uint8_t * address){ + reverse_bd_addr(decode_event_offset(event, uint8_t, 5), address); +} + /** * @brief Get field compare value from event SM_EVENT_NUMERIC_COMPARISON_REQUEST * @param event packet @@ -790,6 +825,24 @@ static __INLINE uint32_t sm_event_numeric_comparison_get_compare_value(const uin return little_endian_read_32(event, 11); } +/** + * @brief Get IRK from event SM_EVENT_IRK_DHK_RESULT + * @param event packet + * @return irk + */ +static __INLINE const uint8_t *sm_event_irk_dhk_result_get_irk(const uint8_t *event) { + return *decode_event_offset(event, uint8_t *, 2); +} + +/** + * @brief Get DHK from event SM_EVENT_IRK_DHK_RESULT + * @param event packet + * @return dhk + */ +static __INLINE const uint8_t *sm_event_irk_dhk_result_get_dhk(const uint8_t *event) { + return *decode_event_offset(event, uint8_t *, 2 + sizeof(uintptr_t)); +} + /** * @brief Get field handle from event GAP_EVENT_SECURITY_LEVEL * @param event packet diff --git a/bundles/noos_mini/inc/gap.h b/bundles/noos_mini/inc/gap.h index 94ec41d4e..020bb0b27 100644 --- a/bundles/noos_mini/inc/gap.h +++ b/bundles/noos_mini/inc/gap.h @@ -54,11 +54,27 @@ uint8_t gap_set_random_device_address(const uint8_t *address); /** * @brief Disconnect connection with handle * + * This is equivalent to `gap_disconnect2(handle, 0x13)`. + * * @param handle Used to identify an advertising set. Range: 0x00 to 0xEF * @return 0: Message is sent out or the connection already release */ uint8_t gap_disconnect(hci_con_handle_t handle); +/** + * @brief Disconnect connection with handle + * + * @param handle Used to identify an advertising set. Range: 0x00 to 0xEF + * @param reason Reason: + * - Authentication Failure error code (0x05) + * - Other End Terminated Connection error codes (0x13 to 0x15) + * - Unsupported Remote Feature error code (0x1A) + * - Pairing with Unit Key Not Supported error code (0x29) + * - Unacceptable Connection Parameters error code (0x3B) + * @return 0: Message is sent out or the connection already release + */ +uint8_t gap_disconnect2(hci_con_handle_t handle, uint8_t reason); + /** * @brief disconnect multi-connections */ @@ -70,7 +86,7 @@ void gap_disconnect_all(void); * @param[in] addtype BLE address type * @return 0: Message is sent to controller */ -uint8_t gap_add_whitelist(const uint8_t *address,bd_addr_type_t addtype); +uint8_t gap_add_whitelist(const uint8_t *address, bd_addr_type_t addtype); /** * @brief remove whitelist from controller @@ -79,7 +95,7 @@ uint8_t gap_add_whitelist(const uint8_t *address,bd_addr_type_t addtype); * @param addtype BLE address type * @return 0: Message is sent to controller */ -uint8_t gap_remove_whitelist(const uint8_t *address,bd_addr_type_t addtype); +uint8_t gap_remove_whitelist(const uint8_t *address, bd_addr_type_t addtype); /** * @brief clear white lists in controller @@ -88,6 +104,122 @@ uint8_t gap_remove_whitelist(const uint8_t *address,bd_addr_type_t addtype); */ uint8_t gap_clear_white_lists(void); +/** + * @brief read white lists size in controller + * + * @return 0: message sent out others: failed + */ +uint8_t gap_read_white_lists_size(void); + +/** + * @brief Add one device to the resolving list used to generate and resolve + * Resolvable Private Addresses in the Controller. + * + * @param address peer identity address + * @param addtype peer identity address type + * @param peer_irk IRK of the peer device + * @param local_irk IRK of the local device + * @return 0: message sent out others: failed + */ +// uint8_t gap_add_dev_to_resolving_list(const uint8_t *address, bd_addr_type_t addtype, +// const uint8_t *peer_irk, const uint8_t *local_irk); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Remove one device from the resolving list used to resolve Resolvable + * Private Addresses in the Controller. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_remove_dev_from_resolving_list(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Remove all devices from the resolving list used to resolve Resolvable + * Private Addresses in the Controller. + * + * @return 0: message sent out others: failed + */ +// uint8_t gap_clear_resolving_list(void); +// WARNING: ^^^ this API is not available in this release + + +// LE Privacy Mode +typedef enum privacy_mode +{ + PRIVACY_MODE_NETWORK = 0, // Network Privacy Mode (default) + // Identity address is not accepted if IRK is available + PRIVACY_MODE_DEVICE = 1, // Device Privacy Mode + // Identity address is accepted even if IRK is available +} privacy_mode_t; + +/** + * @brief Specify the privacy mode to be used for a given entry on the resolving list. + * + * @param address peer identity address + * @param addtype peer identity address type + * @param privacy_mode privacy mode for this peer device + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_privacy_mode(const uint8_t *address, bd_addr_type_t addtype, +// privacy_mode_t privacy_mode); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Get the current peer Resolvable Private Address being used for the + * corresponding peer Public and Random (static) Identity Address. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_read_peer_resolving_addr(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Get the current local Resolvable Private Address being used for the + * corresponding peer Identity Address. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_read_local_resolving_addr(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Enable resolution of Resolvable Private Addresses in the Controller. + * + * @param enable address resolution enable + * 0: disabled (default) + * 1: enabled + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_addr_resolution_enable(const uint8_t enable); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Set the length of time the Controller uses a Resolvable Private Address + * before a new resolvable private address is generated and starts being used. + * + * @param rpa_timeout RPA_Timeout measured in seconds + * Range: 0x0001 to 0x0E10 + * Time range: 1 s to 1 hour + * Default: 0x0384 (900 s or 15 minutes) + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_resolvable_private_addr_timeout(uint16_t rpa_timeout); +// WARNING: ^^^ this API is not available in this release + + /** * @brief read rssi value of a appointed hci connection * @@ -290,13 +422,13 @@ typedef enum scan_filter_policy SCAN_ACCEPT_WLIST_EXCEPT_NOT_DIRECTED, // Accept all advertising packets except directed advertising packets // where the initiator's identity address does not address this device - SCAN_ACCEPT_ALL_EXCEPT_IDENTITY_NOT_MATCH, + // SCAN_ACCEPT_ALL_EXCEPT_IDENTITY_NOT_MATCH, // Accept all advertising packets except: // 1. advertising packets where the advertiser's identity address is not in // the White List; and // 2. directed advertising packets where the initiator's identity address // does not address this device - SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH + // SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH } scan_filter_policy_t; /** @@ -318,6 +450,9 @@ uint8_t gap_set_ext_scan_para(const bd_addr_type_t own_addr_type, const scan_fil /** * @brief to set the extended scan response data for an advertising set * + * Note: Scan response data is cleared after `gap_set_ext_adv_para()` on the same + * advertising set handle. + * * @param adv_handle handle of advertising set handle * * @param length length of advertising data @@ -482,6 +617,9 @@ typedef enum adv_data_frag_pref /** * @brief to set extended advertising data * + * Note: Advertising data is cleared after `gap_set_ext_adv_para()` on the same + * advertising set handle. + * * @param adv_handle advertising set handle. * * @param length advertising data length @@ -497,6 +635,9 @@ uint8_t gap_set_ext_adv_data(const uint8_t adv_handle, uint16_t length, const ui /** * @brief LE Set Periodic Advertising Data command * + * Note: Advertising data is cleared after `gap_set_ext_adv_para()` and + * `gap_set_periodic_adv_para()` on the same advertising set handle. + * * @param adv_handle advertising set handle. * * @param length advertising data length (<= 1650 bytes) @@ -723,6 +864,7 @@ typedef struct { // Supervision timeout for the LE Link, unit is 10ms uint16_t supervision_timeout; // Informative parameter recommending the min/max length of connection event needed for this LE connection + // unit is 625us uint16_t min_ce_len; uint16_t max_ce_len; } conn_para_t; diff --git a/bundles/noos_mini/inc/le_device_db.h b/bundles/noos_mini/inc/le_device_db.h index b81d04f5a..68de61b61 100644 --- a/bundles/noos_mini/inc/le_device_db.h +++ b/bundles/noos_mini/inc/le_device_db.h @@ -16,14 +16,15 @@ typedef struct le_device_memory_db { // Identification uint8_t addr_type; - uint8_t key_size; - uint8_t authenticated; - uint8_t authorized; + uint8_t key_size; + uint8_t authenticated; + uint8_t authorized:1; + uint8_t sm_sc:1; bd_addr_t addr; sm_key_t irk; - // Stored pairing information allows to re-establish an enncrypted connection + // Stored pairing information allows to re-establish an encrypted connection // with a peripheral that doesn't have any persistent memory sm_key_t ltk; uint16_t ediv; @@ -36,7 +37,6 @@ typedef struct le_device_memory_db { // Signed Writes by us sm_key_t local_csrk; uint32_t local_counter; - } le_device_memory_db_t; #pragma pack (pop) diff --git a/bundles/noos_mini/inc/ll_api.h b/bundles/noos_mini/inc/ll_api.h index 24558161d..f84ac1c76 100644 --- a/bundles/noos_mini/inc/ll_api.h +++ b/bundles/noos_mini/inc/ll_api.h @@ -33,6 +33,25 @@ typedef enum ll_config_item_e LL_CFG_FEATURE_SET_MASK, } ll_config_item_t; +typedef struct ll_capabilities +{ + const uint8_t *features; // Link Layer features + uint16_t adv_set_num; // max number of advertising sets + uint16_t conn_num; // max number of connections + uint16_t whitelist_size; // size of whitelists + uint16_t resolving_list_size; // size of resolving list + uint16_t periodic_advertiser_list_size; // size of periodic advertiser list + uint16_t adv_dup_filter_size; // size of items for filtering + // advertising duplication +} ll_capabilities_t; + +/** + * @brief Get Link Layer capabilities. + * + * @param[out] capabilities see `ll_capabilities_t`. + */ +void ll_get_capabilities(ll_capabilities_t *capabilities); + /** **************************************************************************************** * @brief Config LL specific parameters @@ -43,6 +62,26 @@ typedef enum ll_config_item_e */ void ll_config(ll_config_item_t item, uint32_t value); +/** + **************************************************************************************** + * @brief Get states of LL + * + * Note: Parameters can be set to NULL if the relevant states are not needed. + * + * @param[out] adv_states[1] states of all advertising sets + * Bit[n]: advertising set n is enabled + * @param[out] conn_states[1] states of all connections + * Bit[n]: connection n is active + * @param[out] sync_states[1] states of all synchronized periodic adv sets + * Bit[n]: sync_handle n is active + * @param[out] other_states[1] other states: + * Bit[0]: if scanning is ON + * Bit[1]: if initiating is ON + **************************************************************************************** + */ +void ll_get_states(uint32_t *adv_states, uint32_t *conn_states, + uint32_t *sync_states, uint32_t *other_states); + /** **************************************************************************************** * @brief set Tx power range diff --git a/bundles/noos_mini/inc/platform_api.h b/bundles/noos_mini/inc/platform_api.h index bbc633bd3..5783c773e 100644 --- a/bundles/noos_mini/inc/platform_api.h +++ b/bundles/noos_mini/inc/platform_api.h @@ -113,7 +113,7 @@ typedef enum PLATFORM_CB_EVT_LLE_INIT, // when allocation on heap fails (heap out of memory) - // NOTE: param (void *data) is cased from an integer identifying which heap is OOM: + // NOTE: param (void *data) is casted from an integer identifying which heap is OOM: // * 0: FreeRTOS's heap; // * 1: Link Layer's heap; // * 2: Link Layer's task pool. @@ -327,7 +327,7 @@ typedef struct /** **************************************************************************************** - * @brief Get heap status + * @brief Get status of built-in RTOS's heap * * @param[out] status heap status **************************************************************************************** @@ -378,7 +378,7 @@ void platform_switch_app(const uint32_t app_addr); * in power saving mode. * * For ING918: the least FOUR significant bits of `value` are saved; - * For ING916: the least TWO significant bits of `value` are saved. + * For ING916: the least FIVE significant bits of `value` are saved. * * @param[in] value value **************************************************************************************** @@ -468,8 +468,13 @@ typedef enum PLATFORM_CFG_PS_DBG_4, // Debugging parameters for ING916. Default (0) // Bit [0]: `platform_shutdown` uses DEEPER SLEEP (1) or SLEEP (0) PLATFORM_CFG_FAST_DEEP_SLEEP_TIME_REDUCTION, // sleep time reduction (fast deep sleep mode) in us. - // Requirement: < PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION + // Requirement: <= PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION + // When equal to PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION, fast deep sleep mode is not used // Only available for ING916 (default: ~2000us) + PLATFORM_CFG_AUTO_REDUCE_CLOCK_FREQ, // automatic reduce CPU clock frequency in these circumstances: + // * the default IDLE procedure + // * when entering sleep modes + // Only available for ING916 (default: Enabled) } platform_cfg_item_t; typedef enum @@ -608,7 +613,15 @@ uint64_t platform_get_us_time(void); */ void platform_printf(const char *format, ...); -// NOTE: for debug only +/** + **************************************************************************************** + * @brief Set public device address + * + * NOTE: This is for debug only. + * + * @param[in] addr device address in little-endian. + **************************************************************************************** + */ void sysSetPublicDeviceAddr(const unsigned char *addr); // set rf source @@ -775,6 +788,55 @@ void platform_set_abs_timer(f_platform_timer_callback callback, uint32_t abs_tim */ void platform_delete_timer(f_platform_timer_callback callback); +typedef void * platform_us_timer_handle_t; + +/** + **************************************************************************************** + * @brief Callback function of microsecond (us) resolution timer + * + * @param[in] timer_handle handle of this timer + * @param[in] time_us internal timer counter when invoke this callback + * @param[in] param user parameter + * @return (must be NULL) + **************************************************************************************** + */ +typedef void * (* f_platform_us_timer_callback)(platform_us_timer_handle_t timer_handle, + uint64_t time_us, void *param); + +/** + **************************************************************************************** + * @brief Setup a single-shot platform timer with microsecond (us) resolution + * + * Although `abs_time` is in microsecond (us), callback is **not guaranteed** + * to be invoked with such resolution. + * + * This type of timers are much like `platform_set_timer`, except that: + * 1. resolution is higher; + * 2. callback is invoked in the context of an ISR. + * + * @param[in] abs_time when `platform_get_us_timer() == abs_time`, callback is invoked. + * @param[in] callback the callback function + * @param[in] param user parameter + * @return a non-NULL value when succeeded. Otherwise, NULL. + **************************************************************************************** + */ +platform_us_timer_handle_t platform_create_us_timer(uint64_t abs_time, + f_platform_us_timer_callback callback, void *param); + +/** + **************************************************************************************** + * @brief Cancel a platform timer previously created by `platform_create_us_timer` + * + * When a timer not needed any more, use this API to cancel it. + * + * @param[in] timer_handle handle of the timer + * @return 0 if succeeded else non-0 + * Note: non-0 means the callback function of the timer + * is executing. + **************************************************************************************** + */ +int platform_cancel_us_timer(platform_us_timer_handle_t timer_handle); + /** **************************************************************************************** * @brief Install a new RTOS stack for a specific platform task diff --git a/bundles/noos_mini/inc/sm.h b/bundles/noos_mini/inc/sm.h index 6dfc62bab..7e57fb927 100644 --- a/bundles/noos_mini/inc/sm.h +++ b/bundles/noos_mini/inc/sm.h @@ -55,14 +55,21 @@ typedef enum { /** * @brief Security configurations * + * These configurations can updated dynamically. Be careful: dynamically toggle + * `enable` will cause problems when SM is still working on any connection. + * + * After IRK/DHK are derived from `persistent`, `SM_EVENT_IRK_DHK_RESULT` is emitted. + * * @param[in] enable Enable (Bypass) SM (default: Disabled) * When disabled, SM can be enabled per connection by `sm_config_conn`. * @param[in] io_capability Default IO Capabilities * @param[in] request_security Let peripheral request an encrypted connection right after connecting * Not used normally. Bonding is triggered by access to protected attributes in ATT Server * @param[in] persistent persistent data for security & privacy + * @return 0 if ok else non-0. Possible causes for non-0 return value: + * * generation of internal keys(IRK/ERK) are under going. */ -void sm_config(uint8_t enable, +int sm_config(uint8_t enable, io_capability_t io_capability, int request_security, const sm_persistent_t *persistent); @@ -101,18 +108,71 @@ void sm_private_random_address_generation_set_update_period(int period_ms); const uint8_t *sm_private_random_address_generation_get(void); /** + * @brief Registers OOB Data Callback. + * + * The callback should set the oob_data and return 1 if OOB data is available. + * + * Signature of `get_oob_data_callback`: + * @param[in] address_type address type + * @param[in] addr address + * @param[out] oob_data OOB data (type `sm_key_t`) + * @return 1 if OOB data is available, else 0. * - * @brief Registers OOB Data Callback. The callback should set the oob_data and return 1 if OOB data is availble * @param get_oob_data_callback */ -void sm_register_oob_data_callback( int (*get_oob_data_callback)(uint8_t addres_type, bd_addr_t addr, uint8_t * oob_data)); +void sm_register_oob_data_callback( int (*get_oob_data_callback)(uint8_t address_type, bd_addr_t addr, uint8_t * oob_data)); /** + * @brief Registers secure pairing OOB Data Callback. * - * @brief Registers secure pairing OOB Data Callback. The callback should set the peer_confirm & peer_random and return 1 if OOB data is availble - * @param get_oob_data_callback + * The callback should set the peer_confirm & peer_random and return 1 + * if OOB data is available. + * + * Signature of `get_sc_oob_data_callback`: + * @param[in] address_type address type + * @param[in] addr address + * @param[out] peer_confirm peer confirm value (type `sm_key_t`) + * @param[out] peer_random peer random value (type `sm_key_t`) + * @return 1 if OOB data is available, else 0. + * + * @param get_sc_oob_data_callback */ -// void sm_register_sc_oob_data_callback( int (*get_sc_oob_data_callback)(uint8_t addres_type, bd_addr_t addr, uint8_t *peer_confirm, uint8_t *peer_random)); +// void sm_register_sc_oob_data_callback(int (*get_sc_oob_data_callback)(uint8_t address_type, bd_addr_t addr, uint8_t *peer_confirm, uint8_t *peer_random)); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief (When secure pairing is used and OOB is selected) Start generate local + * OOB data (_confirm_ and _random_). + * + * After generated, _confirm_ and _random_ are passed to the callback. + * + * Each call of this function will generate a new P256 key pair that will used + * in **all** subsequent pairing attempts. When OOB is used, it is Developers's + * responsibility to refresh key pair properly. If OOB is not used, SM will + * re-generate a new key pair for each pairing attempt. + * + * BLUETOOTH CORE SPECIFICATION Version 5.4 | Vol 3, Part H, Section 2.3.6: + * + * > To protect a device's private key, a device should implement a method to + * > prevent an attacker from retrieving useful information about the device's private + * > key. For this purpose, a device should change its private key after every pairing + * > (successful or failed). Otherwise, it should change its private key whenever S + + * > 3F > 8, where S is the number of successful pairings and F the number of + * > failed attempts since the key was last changed. + * + * App can then pass these information together with device address to peer + * through OOB communication. + * + * Signature of `callback`: + * @param[out] confirm local confirm value (type `sm_key_t`) + * @param[out] random local random value (type `sm_key_t`) + * + * @param callback + * @return 0: started without error + * -1: previous OOB data is not generated yet + */ +// int sm_sc_generate_oob_data(void (*callback)(const uint8_t *confirm, const uint8_t *random)); // WARNING: ^^^ this API is not available in this release @@ -235,14 +295,6 @@ int sm_le_device_key(hci_con_handle_t con_handle); // WARNING: ^^^ this API is not available in this release -/** - * @brief When secure pairing is used and OOB is selected, use this function to prepare OOB data and share to peer. - * @param handle - */ -// int sm_sc_generate_oob_data(void (*callback)(uint8_t *peer_confirm, uint8_t *peer_random)); -// WARNING: ^^^ this API is not available in this release - - /** * * @brief Register a callback for get external LTK (for empty EDIV & Random) diff --git a/bundles/noos_typical/ING9168xx/apis.json b/bundles/noos_typical/ING9168xx/apis.json index f3e2a6732..af21e0d1d 100644 --- a/bundles/noos_typical/ING9168xx/apis.json +++ b/bundles/noos_typical/ING9168xx/apis.json @@ -1,268 +1,275 @@ { - "att_dispatch_client_can_send_now": "0x02004399", - "att_dispatch_client_request_can_send_now_event": "0x0200439f", - "att_dispatch_register_client": "0x020043a5", - "att_dispatch_register_server": "0x020043b9", - "att_dispatch_server_can_send_now": "0x020043cd", - "att_dispatch_server_request_can_send_now_event": "0x020043d3", - "att_emit_general_event": "0x02004485", - "att_server_can_send_packet_now": "0x02004bbd", - "att_server_deferred_read_response": "0x02004bc1", - "att_server_get_mtu": "0x02004bd9", - "att_server_indicate": "0x02004c51", - "att_server_init": "0x02004cd5", - "att_server_notify": "0x02004d11", - "att_server_register_packet_handler": "0x02004e29", - "att_server_request_can_send_now_event": "0x02004e35", - "att_set_db": "0x02004e51", - "att_set_read_callback": "0x02004e65", - "att_set_write_callback": "0x02004e71", - "bd_addr_cmp": "0x02005041", - "bd_addr_copy": "0x02005047", - "bd_addr_to_str": "0x02005051", - "big_endian_read_16": "0x02005089", - "big_endian_read_32": "0x02005091", - "big_endian_store_16": "0x020050a5", - "big_endian_store_32": "0x020050b1", - "btstack_config": "0x020051f5", - "btstack_memory_pool_create": "0x02005343", - "btstack_memory_pool_free": "0x0200536d", - "btstack_memory_pool_get": "0x020053cd", - "btstack_push_user_msg": "0x02005415", - "btstack_push_user_runnable": "0x02005421", - "btstack_reset": "0x0200542d", - "char_for_nibble": "0x02005707", - "gap_add_dev_to_periodic_list": "0x020060ed", - "gap_add_whitelist": "0x020060fd", - "gap_aes_encrypt": "0x02006109", - "gap_clear_white_lists": "0x02006141", - "gap_clr_adv_set": "0x0200614d", - "gap_clr_periodic_adv_list": "0x02006159", - "gap_create_connection_cancel": "0x02006165", - "gap_default_periodic_adv_sync_transfer_param": "0x02006171", - "gap_disconnect": "0x02006189", - "gap_disconnect_all": "0x020061b5", - "gap_ext_create_connection": "0x020061f5", - "gap_get_connection_parameter_range": "0x020062cd", - "gap_le_read_channel_map": "0x02006309", - "gap_periodic_adv_create_sync": "0x02006375", - "gap_periodic_adv_create_sync_cancel": "0x02006399", - "gap_periodic_adv_set_info_transfer": "0x020063a5", - "gap_periodic_adv_sync_transfer": "0x020063b5", - "gap_periodic_adv_sync_transfer_param": "0x020063c5", - "gap_periodic_adv_term_sync": "0x020063e1", - "gap_read_antenna_info": "0x02006469", - "gap_read_periodic_adv_list_size": "0x02006475", - "gap_read_phy": "0x02006481", - "gap_read_remote_used_features": "0x0200648d", - "gap_read_remote_version": "0x02006499", - "gap_read_rssi": "0x020064a5", - "gap_remove_whitelist": "0x020064b1", - "gap_rmv_adv_set": "0x0200652d", - "gap_rmv_dev_from_periodic_list": "0x02006539", - "gap_rx_test_v2": "0x02006549", - "gap_rx_test_v3": "0x02006559", - "gap_set_adv_set_random_addr": "0x020065a5", - "gap_set_callback_for_next_hci": "0x020065e1", - "gap_set_connection_cte_request_enable": "0x02006601", - "gap_set_connection_cte_response_enable": "0x0200661d", - "gap_set_connection_cte_rx_param": "0x0200662d", - "gap_set_connection_cte_tx_param": "0x02006681", - "gap_set_connection_parameter_range": "0x020066cd", - "gap_set_connectionless_cte_tx_enable": "0x020066e5", - "gap_set_connectionless_cte_tx_param": "0x020066f5", - "gap_set_connectionless_iq_sampling_enable": "0x02006751", - "gap_set_data_length": "0x020067ad", - "gap_set_def_phy": "0x020067c5", - "gap_set_ext_adv_data": "0x020067d5", - "gap_set_ext_adv_enable": "0x020067ed", - "gap_set_ext_adv_para": "0x0200685d", - "gap_set_ext_scan_enable": "0x0200692d", - "gap_set_ext_scan_para": "0x02006945", - "gap_set_ext_scan_response_data": "0x020069e5", - "gap_set_host_channel_classification": "0x020069fd", - "gap_set_periodic_adv_data": "0x02006a0d", - "gap_set_periodic_adv_enable": "0x02006a7d", - "gap_set_periodic_adv_para": "0x02006a8d", - "gap_set_periodic_adv_rx_enable": "0x02006aa5", - "gap_set_phy": "0x02006ab5", - "gap_set_random_device_address": "0x02006ad1", - "gap_start_ccm": "0x02006b01", - "gap_test_end": "0x02006b49", - "gap_tx_test_v2": "0x02006b55", - "gap_tx_test_v4": "0x02006b6d", - "gap_update_connection_parameters": "0x02006b91", - "gap_vendor_tx_continuous_wave": "0x02006bd5", - "gatt_client_cancel_write": "0x020070fd", - "gatt_client_discover_characteristic_descriptors": "0x02007123", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x02007163", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x020071b3", - "gatt_client_discover_characteristics_for_service": "0x02007203", - "gatt_client_discover_primary_services": "0x02007239", - "gatt_client_discover_primary_services_by_uuid128": "0x0200726b", - "gatt_client_discover_primary_services_by_uuid16": "0x020072af", - "gatt_client_execute_write": "0x020072ed", - "gatt_client_find_included_services_for_service": "0x02007313", - "gatt_client_get_mtu": "0x02007341", - "gatt_client_is_ready": "0x02007405", - "gatt_client_listen_for_characteristic_value_updates": "0x0200741b", - "gatt_client_prepare_write": "0x0200743d", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x02007479", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x020074a3", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x020074a9", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x020074d7", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x020074dd", - "gatt_client_read_multiple_characteristic_values": "0x0200750b", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x0200753b", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x02007569", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x020075b5", - "gatt_client_register_handler": "0x02007601", - "gatt_client_reliable_write_long_value_of_characteristic": "0x0200760d", - "gatt_client_signed_write_without_response": "0x02007a41", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x02007b05", - "gatt_client_write_client_characteristic_configuration": "0x02007b3f", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x02007b91", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02007ba1", - "gatt_client_write_long_value_of_characteristic": "0x02007bdd", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x02007bed", - "gatt_client_write_value_of_characteristic": "0x02007c29", - "gatt_client_write_value_of_characteristic_without_response": "0x02007c5f", - "hci_add_event_handler": "0x02009255", - "hci_power_control": "0x020099fd", - "hci_register_acl_packet_handler": "0x02009bb1", - "kv_commit": "0x0200a30d", - "kv_get": "0x0200a369", - "kv_init": "0x0200a375", - "kv_init_backend": "0x0200a3f5", - "kv_put": "0x0200a409", - "kv_remove": "0x0200a415", - "kv_remove_all": "0x0200a449", - "kv_value_modified": "0x0200a479", - "kv_value_modified_of_key": "0x0200a495", - "kv_visit": "0x0200a4a1", - "l2cap_add_event_handler": "0x0200a531", - "l2cap_can_send_packet_now": "0x0200a541", - "l2cap_create_le_credit_based_connection_request": "0x0200a705", - "l2cap_credit_based_send": "0x0200a84d", - "l2cap_credit_based_send_continue": "0x0200a879", - "l2cap_disconnect": "0x0200a8f5", - "l2cap_get_le_credit_based_connection_credits": "0x0200aae1", - "l2cap_get_peer_mtu_for_local_cid": "0x0200aafd", - "l2cap_init": "0x0200af3d", - "l2cap_le_send_flow_control_credit": "0x0200b033", - "l2cap_max_le_mtu": "0x0200b341", - "l2cap_register_packet_handler": "0x0200b469", - "l2cap_register_service": "0x0200b475", - "l2cap_request_can_send_now_event": "0x0200b585", - "l2cap_request_connection_parameter_update": "0x0200b59f", - "l2cap_send_echo_request": "0x0200ba81", - "l2cap_unregister_service": "0x0200bb61", - "le_device_db_add": "0x0200bbb9", - "le_device_db_find": "0x0200bc91", - "le_device_db_from_key": "0x0200bcbd", - "le_device_db_iter_cur": "0x0200bcc5", - "le_device_db_iter_cur_key": "0x0200bcc9", - "le_device_db_iter_init": "0x0200bccd", - "le_device_db_iter_next": "0x0200bcd5", - "le_device_db_remove_key": "0x0200bcfb", - "ll_adjust_conn_peer_tx_power": "0x0200bd29", - "ll_aes_encrypt": "0x0200bd55", - "ll_config": "0x0200bdc9", - "ll_free": "0x0200bdff", - "ll_get_heap_free_size": "0x0200be09", - "ll_hint_on_ce_len": "0x0200be1d", - "ll_legacy_adv_set_interval": "0x0200be55", - "ll_malloc": "0x0200be65", - "ll_register_hci_acl_previewer": "0x0200bf7d", - "ll_scan_set_fixed_channel": "0x0200bfe1", - "ll_set_adv_access_address": "0x0200c1f9", - "ll_set_adv_coded_scheme": "0x0200c205", - "ll_set_conn_acl_report_latency": "0x0200c23d", - "ll_set_conn_coded_scheme": "0x0200c26d", - "ll_set_conn_latency": "0x0200c299", - "ll_set_conn_tx_power": "0x0200c2c9", - "ll_set_def_antenna": "0x0200c305", - "ll_set_initiating_coded_scheme": "0x0200c325", - "ll_set_max_conn_number": "0x0200c331", - "ll_set_tx_power_range": "0x0200c3c5", - "nibble_for_char": "0x0201ee29", - "platform_calibrate_rt_clk": "0x0201eec1", - "platform_call_on_stack": "0x0200213f", - "platform_config": "0x0201eec5", - "platform_controller_run": "0x0201efed", - "platform_delete_timer": "0x0201f021", - "platform_enable_irq": "0x0201f029", - "platform_get_gen_os_driver": "0x0201f05d", - "platform_get_link_layer_interf": "0x0201f069", - "platform_get_task_handle": "0x0201f071", - "platform_get_timer_counter": "0x0201f089", - "platform_get_us_time": "0x0201f08d", - "platform_get_version": "0x0201f091", - "platform_hrng": "0x0201f099", - "platform_init_controller": "0x0201f0a1", - "platform_os_idle_resumed_hook": "0x0201f0bd", - "platform_patch_rf_init_data": "0x0201f0c1", - "platform_post_sleep_processing": "0x0201f0cd", - "platform_pre_sleep_processing": "0x0201f0d3", - "platform_pre_suppress_ticks_and_sleep_processing": "0x0201f0d9", - "platform_printf": "0x0201f0dd", - "platform_raise_assertion": "0x0201f0f1", - "platform_rand": "0x0201f105", - "platform_read_info": "0x0201f109", - "platform_read_persistent_reg": "0x0201f139", - "platform_reset": "0x0201f145", - "platform_rt_rc_auto_tune": "0x0201f159", - "platform_rt_rc_auto_tune2": "0x0201f161", - "platform_rt_rc_tune": "0x0201f1c9", - "platform_set_abs_timer": "0x0201f1e5", - "platform_set_evt_callback": "0x0201f1e9", - "platform_set_evt_callback_table": "0x0201f1fd", - "platform_set_irq_callback": "0x0201f209", - "platform_set_irq_callback_table": "0x0201f225", - "platform_set_rf_clk_source": "0x0201f231", - "platform_set_rf_init_data": "0x0201f23d", - "platform_set_rf_power_mapping": "0x0201f249", - "platform_set_timer": "0x0201f255", - "platform_shutdown": "0x0201f259", - "platform_switch_app": "0x0201f25d", - "platform_trace_raw": "0x0201f275", - "platform_write_persistent_reg": "0x0201f28d", - "printf_hexdump": "0x0201f2a1", - "reverse_128": "0x0201f619", - "reverse_24": "0x0201f61f", - "reverse_256": "0x0201f625", - "reverse_48": "0x0201f62b", - "reverse_56": "0x0201f631", - "reverse_64": "0x0201f637", - "reverse_bd_addr": "0x0201f63d", - "reverse_bytes": "0x0201f643", - "sm_add_event_handler": "0x0201f9a1", - "sm_address_resolution_lookup": "0x0201faf9", - "sm_authenticated": "0x0201fe75", - "sm_authorization_decline": "0x0201fe83", - "sm_authorization_grant": "0x0201fea3", - "sm_authorization_state": "0x0201fec3", - "sm_bonding_decline": "0x0201fedd", - "sm_config": "0x02020331", - "sm_config_conn": "0x02020349", - "sm_encryption_key_size": "0x020204ff", - "sm_just_works_confirm": "0x02020a85", - "sm_le_device_key": "0x02020dbd", - "sm_passkey_input": "0x02020e53", - "sm_private_random_address_generation_get": "0x0202120d", - "sm_private_random_address_generation_get_mode": "0x02021215", - "sm_private_random_address_generation_set_mode": "0x02021221", - "sm_private_random_address_generation_set_update_period": "0x02021249", - "sm_register_external_ltk_callback": "0x02021385", - "sm_register_oob_data_callback": "0x02021391", - "sm_request_pairing": "0x0202139d", - "sm_send_security_request": "0x02021e73", - "sm_set_accepted_stk_generation_methods": "0x02021e99", - "sm_set_authentication_requirements": "0x02021ea5", - "sm_set_encryption_key_size_range": "0x02021eb1", - "sscanf_bd_addr": "0x02022211", - "sysSetPublicDeviceAddr": "0x0202273d", - "uuid128_to_str": "0x02022f99", - "uuid_add_bluetooth_prefix": "0x02022ff1", - "uuid_has_bluetooth_prefix": "0x02023011" + "att_dispatch_client_can_send_now": "0x020052b1", + "att_dispatch_client_request_can_send_now_event": "0x020052b7", + "att_dispatch_register_client": "0x020052bd", + "att_dispatch_register_server": "0x020052d1", + "att_dispatch_server_can_send_now": "0x020052e5", + "att_dispatch_server_request_can_send_now_event": "0x020052eb", + "att_emit_general_event": "0x0200539d", + "att_server_can_send_packet_now": "0x02005ad9", + "att_server_deferred_read_response": "0x02005add", + "att_server_get_mtu": "0x02005af5", + "att_server_indicate": "0x02005b6d", + "att_server_init": "0x02005bf1", + "att_server_notify": "0x02005c2d", + "att_server_register_packet_handler": "0x02005d45", + "att_server_request_can_send_now_event": "0x02005d51", + "att_set_db": "0x02005d6d", + "att_set_read_callback": "0x02005d81", + "att_set_write_callback": "0x02005d8d", + "bd_addr_cmp": "0x02005f5d", + "bd_addr_copy": "0x02005f63", + "bd_addr_to_str": "0x02005f6d", + "big_endian_read_16": "0x02005fa5", + "big_endian_read_32": "0x02005fad", + "big_endian_store_16": "0x02005fc1", + "big_endian_store_32": "0x02005fcd", + "btstack_config": "0x02006111", + "btstack_get_capabilities": "0x0200611d", + "btstack_memory_pool_create": "0x02006277", + "btstack_memory_pool_free": "0x020062a1", + "btstack_memory_pool_get": "0x02006301", + "btstack_push_user_msg": "0x02006349", + "btstack_push_user_runnable": "0x02006355", + "btstack_reset": "0x02006361", + "char_for_nibble": "0x0200663b", + "gap_add_dev_to_periodic_list": "0x0200700d", + "gap_add_whitelist": "0x0200701d", + "gap_aes_encrypt": "0x02007029", + "gap_clear_white_lists": "0x02007061", + "gap_clr_adv_set": "0x0200706d", + "gap_clr_periodic_adv_list": "0x02007079", + "gap_create_connection_cancel": "0x02007085", + "gap_default_periodic_adv_sync_transfer_param": "0x02007091", + "gap_disconnect": "0x020070a9", + "gap_disconnect2": "0x020070b1", + "gap_disconnect_all": "0x020070dd", + "gap_ext_create_connection": "0x0200711d", + "gap_get_connection_parameter_range": "0x020071f5", + "gap_le_read_channel_map": "0x0200722d", + "gap_periodic_adv_create_sync": "0x0200728d", + "gap_periodic_adv_create_sync_cancel": "0x020072b1", + "gap_periodic_adv_set_info_transfer": "0x020072bd", + "gap_periodic_adv_sync_transfer": "0x020072cd", + "gap_periodic_adv_sync_transfer_param": "0x020072dd", + "gap_periodic_adv_term_sync": "0x020072f9", + "gap_read_antenna_info": "0x02007381", + "gap_read_periodic_adv_list_size": "0x0200738d", + "gap_read_phy": "0x02007399", + "gap_read_remote_used_features": "0x020073a5", + "gap_read_remote_version": "0x020073b1", + "gap_read_rssi": "0x020073bd", + "gap_read_white_lists_size": "0x020073c9", + "gap_remove_whitelist": "0x020073d5", + "gap_rmv_adv_set": "0x02007451", + "gap_rmv_dev_from_periodic_list": "0x0200745d", + "gap_rx_test_v2": "0x0200746d", + "gap_rx_test_v3": "0x0200747d", + "gap_set_adv_set_random_addr": "0x020074c9", + "gap_set_callback_for_next_hci": "0x020074ed", + "gap_set_connection_cte_request_enable": "0x0200750d", + "gap_set_connection_cte_response_enable": "0x02007529", + "gap_set_connection_cte_rx_param": "0x02007539", + "gap_set_connection_cte_tx_param": "0x0200758d", + "gap_set_connection_parameter_range": "0x020075d9", + "gap_set_connectionless_cte_tx_enable": "0x020075f1", + "gap_set_connectionless_cte_tx_param": "0x02007601", + "gap_set_connectionless_iq_sampling_enable": "0x0200765d", + "gap_set_data_length": "0x020076b9", + "gap_set_def_phy": "0x020076d1", + "gap_set_ext_adv_data": "0x020076e1", + "gap_set_ext_adv_enable": "0x020076f9", + "gap_set_ext_adv_para": "0x02007769", + "gap_set_ext_scan_enable": "0x02007829", + "gap_set_ext_scan_para": "0x02007841", + "gap_set_ext_scan_response_data": "0x020078e1", + "gap_set_host_channel_classification": "0x020078f9", + "gap_set_periodic_adv_data": "0x02007909", + "gap_set_periodic_adv_enable": "0x02007979", + "gap_set_periodic_adv_para": "0x02007989", + "gap_set_periodic_adv_rx_enable": "0x020079a1", + "gap_set_phy": "0x020079b1", + "gap_set_random_device_address": "0x020079cd", + "gap_start_ccm": "0x020079e9", + "gap_test_end": "0x02007a31", + "gap_tx_test_v2": "0x02007a3d", + "gap_tx_test_v4": "0x02007a55", + "gap_update_connection_parameters": "0x02007a79", + "gap_vendor_tx_continuous_wave": "0x02007abd", + "gatt_client_cancel_write": "0x02007fe5", + "gatt_client_discover_characteristic_descriptors": "0x0200800b", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x0200804b", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x0200809b", + "gatt_client_discover_characteristics_for_service": "0x020080eb", + "gatt_client_discover_primary_services": "0x02008121", + "gatt_client_discover_primary_services_by_uuid128": "0x02008153", + "gatt_client_discover_primary_services_by_uuid16": "0x02008197", + "gatt_client_execute_write": "0x020081d5", + "gatt_client_find_included_services_for_service": "0x020081fb", + "gatt_client_get_mtu": "0x02008229", + "gatt_client_is_ready": "0x020082f5", + "gatt_client_listen_for_characteristic_value_updates": "0x0200830b", + "gatt_client_prepare_write": "0x0200832d", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x02008369", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x02008393", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02008399", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x020083c7", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x020083cd", + "gatt_client_read_multiple_characteristic_values": "0x020083fb", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x0200842b", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x02008459", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x020084a5", + "gatt_client_register_handler": "0x020084f1", + "gatt_client_reliable_write_long_value_of_characteristic": "0x020084fd", + "gatt_client_signed_write_without_response": "0x02008931", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x020089f5", + "gatt_client_write_client_characteristic_configuration": "0x02008a2f", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x02008a81", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02008a91", + "gatt_client_write_long_value_of_characteristic": "0x02008acd", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x02008add", + "gatt_client_write_value_of_characteristic": "0x02008b19", + "gatt_client_write_value_of_characteristic_without_response": "0x02008b4f", + "hci_add_event_handler": "0x0200a159", + "hci_power_control": "0x0200a8fd", + "hci_register_acl_packet_handler": "0x0200aab1", + "kv_commit": "0x0200b1fd", + "kv_get": "0x0200b259", + "kv_init": "0x0200b265", + "kv_init_backend": "0x0200b2e5", + "kv_put": "0x0200b2f9", + "kv_remove": "0x0200b305", + "kv_remove_all": "0x0200b339", + "kv_value_modified": "0x0200b369", + "kv_value_modified_of_key": "0x0200b385", + "kv_visit": "0x0200b391", + "l2cap_add_event_handler": "0x0200b421", + "l2cap_can_send_packet_now": "0x0200b431", + "l2cap_create_le_credit_based_connection_request": "0x0200b5f5", + "l2cap_credit_based_send": "0x0200b73d", + "l2cap_credit_based_send_continue": "0x0200b769", + "l2cap_disconnect": "0x0200b7e5", + "l2cap_get_le_credit_based_connection_credits": "0x0200b9d1", + "l2cap_get_peer_mtu_for_local_cid": "0x0200b9ed", + "l2cap_init": "0x0200be2d", + "l2cap_le_send_flow_control_credit": "0x0200bf23", + "l2cap_max_le_mtu": "0x0200c231", + "l2cap_register_packet_handler": "0x0200c359", + "l2cap_register_service": "0x0200c365", + "l2cap_request_can_send_now_event": "0x0200c475", + "l2cap_request_connection_parameter_update": "0x0200c48f", + "l2cap_send_echo_request": "0x0200c971", + "l2cap_unregister_service": "0x0200ca51", + "le_device_db_add": "0x0200caa9", + "le_device_db_find": "0x0200cb81", + "le_device_db_from_key": "0x0200cbad", + "le_device_db_iter_cur": "0x0200cbb5", + "le_device_db_iter_cur_key": "0x0200cbb9", + "le_device_db_iter_init": "0x0200cbbd", + "le_device_db_iter_next": "0x0200cbc5", + "le_device_db_remove_key": "0x0200cbeb", + "ll_adjust_conn_peer_tx_power": "0x0200cc19", + "ll_aes_encrypt": "0x0200cc45", + "ll_config": "0x0200ccb9", + "ll_free": "0x0200ccef", + "ll_get_capabilities": "0x0200ccf9", + "ll_get_heap_free_size": "0x0200cd15", + "ll_get_states": "0x0200cd25", + "ll_hint_on_ce_len": "0x0200cde1", + "ll_legacy_adv_set_interval": "0x0200ce19", + "ll_malloc": "0x0200ce29", + "ll_register_hci_acl_previewer": "0x0200cf41", + "ll_scan_set_fixed_channel": "0x0200cfa5", + "ll_set_adv_access_address": "0x0200d1bd", + "ll_set_adv_coded_scheme": "0x0200d1c9", + "ll_set_conn_acl_report_latency": "0x0200d201", + "ll_set_conn_coded_scheme": "0x0200d231", + "ll_set_conn_latency": "0x0200d25d", + "ll_set_conn_tx_power": "0x0200d28d", + "ll_set_def_antenna": "0x0200d2c9", + "ll_set_initiating_coded_scheme": "0x0200d2e9", + "ll_set_max_conn_number": "0x0200d2f5", + "ll_set_tx_power_range": "0x0200d389", + "nibble_for_char": "0x0201fe19", + "platform_calibrate_rt_clk": "0x0201feb1", + "platform_call_on_stack": "0x0200303f", + "platform_cancel_us_timer": "0x0201feb5", + "platform_config": "0x0201fec9", + "platform_controller_run": "0x0201fffd", + "platform_create_us_timer": "0x02020031", + "platform_delete_timer": "0x02020045", + "platform_enable_irq": "0x0202004d", + "platform_get_gen_os_driver": "0x02020081", + "platform_get_link_layer_interf": "0x0202008d", + "platform_get_task_handle": "0x02020095", + "platform_get_timer_counter": "0x020200ad", + "platform_get_us_time": "0x020200b1", + "platform_get_version": "0x020200b5", + "platform_hrng": "0x020200d1", + "platform_init_controller": "0x020200d9", + "platform_os_idle_resumed_hook": "0x020200f5", + "platform_patch_rf_init_data": "0x020200f9", + "platform_post_sleep_processing": "0x02020105", + "platform_pre_sleep_processing": "0x0202010b", + "platform_pre_suppress_ticks_and_sleep_processing": "0x02020111", + "platform_printf": "0x02020115", + "platform_raise_assertion": "0x02020129", + "platform_rand": "0x0202013d", + "platform_read_info": "0x02020141", + "platform_read_persistent_reg": "0x02020171", + "platform_reset": "0x02020191", + "platform_rt_rc_auto_tune": "0x020201a5", + "platform_rt_rc_auto_tune2": "0x020201ad", + "platform_rt_rc_tune": "0x0202020d", + "platform_set_abs_timer": "0x02020239", + "platform_set_evt_callback": "0x0202023d", + "platform_set_evt_callback_table": "0x02020251", + "platform_set_irq_callback": "0x0202025d", + "platform_set_irq_callback_table": "0x02020279", + "platform_set_rf_clk_source": "0x02020285", + "platform_set_rf_init_data": "0x02020291", + "platform_set_rf_power_mapping": "0x0202029d", + "platform_set_timer": "0x020202a9", + "platform_shutdown": "0x020202ad", + "platform_switch_app": "0x020202b1", + "platform_trace_raw": "0x020202c9", + "platform_write_persistent_reg": "0x020202e1", + "printf_hexdump": "0x02020315", + "reverse_128": "0x0202068d", + "reverse_24": "0x02020693", + "reverse_256": "0x02020699", + "reverse_48": "0x0202069f", + "reverse_56": "0x020206a5", + "reverse_64": "0x020206ab", + "reverse_bd_addr": "0x020206b1", + "reverse_bytes": "0x020206b7", + "sm_add_event_handler": "0x02020a15", + "sm_address_resolution_lookup": "0x02020b6d", + "sm_authenticated": "0x02020f15", + "sm_authorization_decline": "0x02020f23", + "sm_authorization_grant": "0x02020f43", + "sm_authorization_state": "0x02020f63", + "sm_bonding_decline": "0x02020f7d", + "sm_config": "0x020213d1", + "sm_config_conn": "0x02021405", + "sm_encryption_key_size": "0x020215bf", + "sm_just_works_confirm": "0x02021b45", + "sm_le_device_key": "0x02021e85", + "sm_passkey_input": "0x02021f1b", + "sm_private_random_address_generation_get": "0x020222dd", + "sm_private_random_address_generation_get_mode": "0x020222e5", + "sm_private_random_address_generation_set_mode": "0x020222f1", + "sm_private_random_address_generation_set_update_period": "0x02022319", + "sm_register_external_ltk_callback": "0x02022455", + "sm_register_oob_data_callback": "0x02022461", + "sm_request_pairing": "0x0202246d", + "sm_send_security_request": "0x02022f4b", + "sm_set_accepted_stk_generation_methods": "0x02022f71", + "sm_set_authentication_requirements": "0x02022f7d", + "sm_set_encryption_key_size_range": "0x02022f8d", + "sscanf_bd_addr": "0x020232dd", + "sysSetPublicDeviceAddr": "0x02023839", + "uuid128_to_str": "0x020240a9", + "uuid_add_bluetooth_prefix": "0x02024101", + "uuid_has_bluetooth_prefix": "0x02024121" } \ No newline at end of file diff --git a/bundles/noos_typical/ING9168xx/meta.json b/bundles/noos_typical/ING9168xx/meta.json index dd3d09955..ee2f68b9b 100644 --- a/bundles/noos_typical/ING9168xx/meta.json +++ b/bundles/noos_typical/ING9168xx/meta.json @@ -1,18 +1,24 @@ { "app": { - "base": 33710080 + "base": 33714176 }, "ram": { "base": 536870912, - "size": 3244 + "size": 3180 }, "rom": { "base": 33562624, - "size": 144440 + "size": 148820 + }, + "var": { + "link_layer_features": { + "addr": 33703336, + "value": "bf79ff07fe000000" + } }, "version": [ 2, 3, - 1 + 18 ] } \ No newline at end of file diff --git a/bundles/noos_typical/ING9168xx/platform.bin b/bundles/noos_typical/ING9168xx/platform.bin index 99c33a8e7..c4ddfaf8c 100644 Binary files a/bundles/noos_typical/ING9168xx/platform.bin and b/bundles/noos_typical/ING9168xx/platform.bin differ diff --git a/bundles/noos_typical/ING9187xx/apis.json b/bundles/noos_typical/ING9187xx/apis.json index e7d62db4f..97e2505c1 100644 --- a/bundles/noos_typical/ING9187xx/apis.json +++ b/bundles/noos_typical/ING9187xx/apis.json @@ -6,44 +6,46 @@ "att_dispatch_server_can_send_now": "0x000056d9", "att_dispatch_server_request_can_send_now_event": "0x000056df", "att_emit_general_event": "0x00005791", - "att_server_can_send_packet_now": "0x00005ec1", - "att_server_deferred_read_response": "0x00005ec5", - "att_server_get_mtu": "0x00005edd", - "att_server_indicate": "0x00005f55", - "att_server_init": "0x00005fd9", - "att_server_notify": "0x00006015", - "att_server_register_packet_handler": "0x0000612d", - "att_server_request_can_send_now_event": "0x00006139", - "att_set_db": "0x00006155", - "att_set_read_callback": "0x00006169", - "att_set_write_callback": "0x00006175", - "bd_addr_cmp": "0x000062e5", - "bd_addr_copy": "0x000062eb", - "bd_addr_to_str": "0x000062f5", - "big_endian_read_16": "0x0000632d", - "big_endian_read_32": "0x00006335", - "big_endian_store_16": "0x00006349", - "big_endian_store_32": "0x00006355", - "btstack_config": "0x0000648d", - "btstack_memory_pool_create": "0x000065db", - "btstack_memory_pool_free": "0x00006605", - "btstack_memory_pool_get": "0x00006665", - "btstack_push_user_msg": "0x000066ad", - "btstack_push_user_runnable": "0x000066b9", - "btstack_reset": "0x000066c5", - "char_for_nibble": "0x00006989", - "gap_add_dev_to_periodic_list": "0x0000722d", - "gap_add_whitelist": "0x0000723d", - "gap_aes_encrypt": "0x00007249", - "gap_clear_white_lists": "0x00007281", - "gap_clr_adv_set": "0x0000728d", - "gap_clr_periodic_adv_list": "0x00007299", - "gap_create_connection_cancel": "0x000072a5", - "gap_disconnect": "0x000072b1", - "gap_disconnect_all": "0x000072dd", - "gap_ext_create_connection": "0x0000731d", - "gap_get_connection_parameter_range": "0x000073f5", - "gap_le_read_channel_map": "0x00007431", + "att_server_can_send_packet_now": "0x00005ec5", + "att_server_deferred_read_response": "0x00005ec9", + "att_server_get_mtu": "0x00005ee1", + "att_server_indicate": "0x00005f59", + "att_server_init": "0x00005fdd", + "att_server_notify": "0x00006019", + "att_server_register_packet_handler": "0x00006131", + "att_server_request_can_send_now_event": "0x0000613d", + "att_set_db": "0x00006159", + "att_set_read_callback": "0x0000616d", + "att_set_write_callback": "0x00006179", + "bd_addr_cmp": "0x000062e9", + "bd_addr_copy": "0x000062ef", + "bd_addr_to_str": "0x000062f9", + "big_endian_read_16": "0x00006331", + "big_endian_read_32": "0x00006339", + "big_endian_store_16": "0x0000634d", + "big_endian_store_32": "0x00006359", + "btstack_config": "0x00006491", + "btstack_get_capabilities": "0x0000649d", + "btstack_memory_pool_create": "0x000065f7", + "btstack_memory_pool_free": "0x00006621", + "btstack_memory_pool_get": "0x00006681", + "btstack_push_user_msg": "0x000066c9", + "btstack_push_user_runnable": "0x000066d5", + "btstack_reset": "0x000066e1", + "char_for_nibble": "0x000069a5", + "gap_add_dev_to_periodic_list": "0x00007235", + "gap_add_whitelist": "0x00007245", + "gap_aes_encrypt": "0x00007251", + "gap_clear_white_lists": "0x00007289", + "gap_clr_adv_set": "0x00007295", + "gap_clr_periodic_adv_list": "0x000072a1", + "gap_create_connection_cancel": "0x000072ad", + "gap_disconnect": "0x000072b9", + "gap_disconnect2": "0x000072c1", + "gap_disconnect_all": "0x000072ed", + "gap_ext_create_connection": "0x0000732d", + "gap_get_connection_parameter_range": "0x00007405", + "gap_le_read_channel_map": "0x0000743d", "gap_periodic_adv_create_sync": "0x0000749d", "gap_periodic_adv_create_sync_cancel": "0x000074c1", "gap_periodic_adv_term_sync": "0x000074cd", @@ -52,202 +54,207 @@ "gap_read_remote_used_features": "0x0000756d", "gap_read_remote_version": "0x00007579", "gap_read_rssi": "0x00007585", - "gap_remove_whitelist": "0x00007591", - "gap_rmv_adv_set": "0x0000760d", - "gap_rmv_dev_from_periodic_list": "0x00007619", - "gap_rx_test_v2": "0x00007629", - "gap_set_adv_set_random_addr": "0x00007661", - "gap_set_callback_for_next_hci": "0x0000769d", - "gap_set_connection_parameter_range": "0x000076bd", - "gap_set_data_length": "0x000076d5", - "gap_set_def_phy": "0x000076ed", - "gap_set_ext_adv_data": "0x000076fd", - "gap_set_ext_adv_enable": "0x00007715", - "gap_set_ext_adv_para": "0x00007785", - "gap_set_ext_scan_enable": "0x0000785d", - "gap_set_ext_scan_para": "0x00007875", - "gap_set_ext_scan_response_data": "0x00007915", - "gap_set_host_channel_classification": "0x0000792d", - "gap_set_periodic_adv_data": "0x0000793d", - "gap_set_periodic_adv_enable": "0x000079ad", - "gap_set_periodic_adv_para": "0x000079bd", - "gap_set_phy": "0x000079d5", - "gap_set_random_device_address": "0x000079f1", - "gap_start_ccm": "0x00007a21", - "gap_test_end": "0x00007a69", - "gap_tx_test_v2": "0x00007a75", - "gap_tx_test_v4": "0x00007a8d", - "gap_update_connection_parameters": "0x00007ab1", - "gap_vendor_tx_continuous_wave": "0x00007af5", - "gatt_client_cancel_write": "0x0000801d", - "gatt_client_discover_characteristic_descriptors": "0x00008043", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x00008083", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x000080d3", - "gatt_client_discover_characteristics_for_service": "0x00008123", - "gatt_client_discover_primary_services": "0x00008159", - "gatt_client_discover_primary_services_by_uuid128": "0x0000818b", - "gatt_client_discover_primary_services_by_uuid16": "0x000081cf", - "gatt_client_execute_write": "0x0000820b", - "gatt_client_find_included_services_for_service": "0x00008231", - "gatt_client_get_mtu": "0x0000825f", - "gatt_client_is_ready": "0x00008301", - "gatt_client_listen_for_characteristic_value_updates": "0x00008317", - "gatt_client_prepare_write": "0x00008339", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x00008375", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x0000839f", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x000083a5", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x000083d3", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x000083d9", - "gatt_client_read_multiple_characteristic_values": "0x00008407", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x00008437", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x00008465", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x000084b1", - "gatt_client_register_handler": "0x000084fd", - "gatt_client_reliable_write_long_value_of_characteristic": "0x00008509", - "gatt_client_signed_write_without_response": "0x00008939", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x000089fd", - "gatt_client_write_client_characteristic_configuration": "0x00008a37", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008a89", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008a99", - "gatt_client_write_long_value_of_characteristic": "0x00008ad5", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008ae5", - "gatt_client_write_value_of_characteristic": "0x00008b21", - "gatt_client_write_value_of_characteristic_without_response": "0x00008b57", - "hci_add_event_handler": "0x0000a07d", - "hci_power_control": "0x0000a819", - "hci_register_acl_packet_handler": "0x0000a9cd", - "kv_commit": "0x0000b169", - "kv_get": "0x0000b1c5", - "kv_init": "0x0000b1d1", - "kv_init_backend": "0x0000b251", - "kv_put": "0x0000b265", - "kv_remove": "0x0000b271", - "kv_remove_all": "0x0000b2a5", - "kv_value_modified": "0x0000b2d5", - "kv_value_modified_of_key": "0x0000b2f1", - "kv_visit": "0x0000b2fd", - "l2cap_add_event_handler": "0x0000b38d", - "l2cap_can_send_packet_now": "0x0000b39d", - "l2cap_create_le_credit_based_connection_request": "0x0000b559", - "l2cap_credit_based_send": "0x0000b69d", - "l2cap_credit_based_send_continue": "0x0000b6c9", - "l2cap_disconnect": "0x0000b745", - "l2cap_get_le_credit_based_connection_credits": "0x0000b995", - "l2cap_get_peer_mtu_for_local_cid": "0x0000b9b1", - "l2cap_init": "0x0000bd85", - "l2cap_le_send_flow_control_credit": "0x0000be7b", - "l2cap_max_le_mtu": "0x0000c185", - "l2cap_register_packet_handler": "0x0000c2ad", - "l2cap_register_service": "0x0000c2b9", - "l2cap_request_can_send_now_event": "0x0000c3c9", - "l2cap_request_connection_parameter_update": "0x0000c3e3", - "l2cap_send_echo_request": "0x0000c8bd", - "l2cap_unregister_service": "0x0000c97d", - "le_device_db_add": "0x0000c9d5", - "le_device_db_find": "0x0000caad", - "le_device_db_from_key": "0x0000cad9", - "le_device_db_iter_cur": "0x0000cae1", - "le_device_db_iter_cur_key": "0x0000cae5", - "le_device_db_iter_init": "0x0000cae9", - "le_device_db_iter_next": "0x0000caf1", - "le_device_db_remove_key": "0x0000cb17", - "ll_aes_encrypt": "0x0000cb45", - "ll_config": "0x0000cbc1", - "ll_free": "0x0000cbf7", - "ll_get_heap_free_size": "0x0000cc01", - "ll_hint_on_ce_len": "0x0000cc15", - "ll_legacy_adv_set_interval": "0x0000cc4d", - "ll_malloc": "0x0000cc5d", - "ll_query_timing_info": "0x0000cd95", - "ll_register_hci_acl_previewer": "0x0000cde1", - "ll_scan_set_fixed_channel": "0x0000ce45", - "ll_set_adv_access_address": "0x0000d05d", - "ll_set_adv_coded_scheme": "0x0000d069", - "ll_set_conn_acl_report_latency": "0x0000d099", - "ll_set_conn_coded_scheme": "0x0000d0c9", - "ll_set_conn_latency": "0x0000d0f5", - "ll_set_conn_tx_power": "0x0000d125", - "ll_set_def_antenna": "0x0000d16d", - "ll_set_initiating_coded_scheme": "0x0000d189", - "ll_set_max_conn_number": "0x0000d195", - "nibble_for_char": "0x0001d321", - "platform_calibrate_rt_clk": "0x0001d3bb", + "gap_read_white_lists_size": "0x00007591", + "gap_remove_whitelist": "0x0000759d", + "gap_rmv_adv_set": "0x00007619", + "gap_rmv_dev_from_periodic_list": "0x00007625", + "gap_rx_test_v2": "0x00007635", + "gap_set_adv_set_random_addr": "0x0000766d", + "gap_set_callback_for_next_hci": "0x00007691", + "gap_set_connection_parameter_range": "0x000076b1", + "gap_set_data_length": "0x000076c9", + "gap_set_def_phy": "0x000076e1", + "gap_set_ext_adv_data": "0x000076f1", + "gap_set_ext_adv_enable": "0x00007709", + "gap_set_ext_adv_para": "0x00007779", + "gap_set_ext_scan_enable": "0x00007841", + "gap_set_ext_scan_para": "0x00007859", + "gap_set_ext_scan_response_data": "0x000078f9", + "gap_set_host_channel_classification": "0x00007911", + "gap_set_periodic_adv_data": "0x00007921", + "gap_set_periodic_adv_enable": "0x00007991", + "gap_set_periodic_adv_para": "0x000079a1", + "gap_set_phy": "0x000079b9", + "gap_set_random_device_address": "0x000079d5", + "gap_start_ccm": "0x000079f1", + "gap_test_end": "0x00007a39", + "gap_tx_test_v2": "0x00007a45", + "gap_tx_test_v4": "0x00007a5d", + "gap_update_connection_parameters": "0x00007a81", + "gap_vendor_tx_continuous_wave": "0x00007ac5", + "gatt_client_cancel_write": "0x00007fed", + "gatt_client_discover_characteristic_descriptors": "0x00008013", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x00008053", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x000080a3", + "gatt_client_discover_characteristics_for_service": "0x000080f3", + "gatt_client_discover_primary_services": "0x00008129", + "gatt_client_discover_primary_services_by_uuid128": "0x0000815b", + "gatt_client_discover_primary_services_by_uuid16": "0x0000819f", + "gatt_client_execute_write": "0x000081db", + "gatt_client_find_included_services_for_service": "0x00008201", + "gatt_client_get_mtu": "0x0000822f", + "gatt_client_is_ready": "0x000082d9", + "gatt_client_listen_for_characteristic_value_updates": "0x000082ef", + "gatt_client_prepare_write": "0x00008311", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x0000834d", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x00008377", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x0000837d", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x000083ab", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x000083b1", + "gatt_client_read_multiple_characteristic_values": "0x000083df", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x0000840f", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x0000843d", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x00008489", + "gatt_client_register_handler": "0x000084d5", + "gatt_client_reliable_write_long_value_of_characteristic": "0x000084e1", + "gatt_client_signed_write_without_response": "0x00008911", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x000089d5", + "gatt_client_write_client_characteristic_configuration": "0x00008a0f", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008a61", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008a71", + "gatt_client_write_long_value_of_characteristic": "0x00008aad", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008abd", + "gatt_client_write_value_of_characteristic": "0x00008af9", + "gatt_client_write_value_of_characteristic_without_response": "0x00008b2f", + "hci_add_event_handler": "0x0000a04d", + "hci_power_control": "0x0000a7e5", + "hci_register_acl_packet_handler": "0x0000a999", + "kv_commit": "0x0000b125", + "kv_get": "0x0000b181", + "kv_init": "0x0000b18d", + "kv_init_backend": "0x0000b20d", + "kv_put": "0x0000b221", + "kv_remove": "0x0000b22d", + "kv_remove_all": "0x0000b261", + "kv_value_modified": "0x0000b291", + "kv_value_modified_of_key": "0x0000b2ad", + "kv_visit": "0x0000b2b9", + "l2cap_add_event_handler": "0x0000b349", + "l2cap_can_send_packet_now": "0x0000b359", + "l2cap_create_le_credit_based_connection_request": "0x0000b515", + "l2cap_credit_based_send": "0x0000b659", + "l2cap_credit_based_send_continue": "0x0000b685", + "l2cap_disconnect": "0x0000b701", + "l2cap_get_le_credit_based_connection_credits": "0x0000b951", + "l2cap_get_peer_mtu_for_local_cid": "0x0000b96d", + "l2cap_init": "0x0000bd41", + "l2cap_le_send_flow_control_credit": "0x0000be37", + "l2cap_max_le_mtu": "0x0000c141", + "l2cap_register_packet_handler": "0x0000c269", + "l2cap_register_service": "0x0000c275", + "l2cap_request_can_send_now_event": "0x0000c385", + "l2cap_request_connection_parameter_update": "0x0000c39f", + "l2cap_send_echo_request": "0x0000c879", + "l2cap_unregister_service": "0x0000c939", + "le_device_db_add": "0x0000c991", + "le_device_db_find": "0x0000ca69", + "le_device_db_from_key": "0x0000ca95", + "le_device_db_iter_cur": "0x0000ca9d", + "le_device_db_iter_cur_key": "0x0000caa1", + "le_device_db_iter_init": "0x0000caa5", + "le_device_db_iter_next": "0x0000caad", + "le_device_db_remove_key": "0x0000cad3", + "ll_aes_encrypt": "0x0000cb01", + "ll_config": "0x0000cb7d", + "ll_free": "0x0000cbb3", + "ll_get_capabilities": "0x0000cbbd", + "ll_get_heap_free_size": "0x0000cbdd", + "ll_get_states": "0x0000cbed", + "ll_hint_on_ce_len": "0x0000cca9", + "ll_legacy_adv_set_interval": "0x0000cce1", + "ll_malloc": "0x0000ccf1", + "ll_query_timing_info": "0x0000ce29", + "ll_register_hci_acl_previewer": "0x0000ce75", + "ll_scan_set_fixed_channel": "0x0000ced9", + "ll_set_adv_access_address": "0x0000d0f1", + "ll_set_adv_coded_scheme": "0x0000d0fd", + "ll_set_conn_acl_report_latency": "0x0000d12d", + "ll_set_conn_coded_scheme": "0x0000d15d", + "ll_set_conn_latency": "0x0000d189", + "ll_set_conn_tx_power": "0x0000d1b9", + "ll_set_def_antenna": "0x0000d201", + "ll_set_initiating_coded_scheme": "0x0000d21d", + "ll_set_max_conn_number": "0x0000d229", + "nibble_for_char": "0x0001d3b5", + "platform_calibrate_rt_clk": "0x0001d44f", "platform_call_on_stack": "0x000040ef", - "platform_config": "0x0001d3c1", - "platform_controller_run": "0x0001d4e5", - "platform_delete_timer": "0x0001d519", - "platform_enable_irq": "0x0001d521", - "platform_get_gen_os_driver": "0x0001d559", - "platform_get_link_layer_interf": "0x0001d565", - "platform_get_task_handle": "0x0001d56d", - "platform_get_timer_counter": "0x0001d585", - "platform_get_us_time": "0x0001d589", - "platform_get_version": "0x0001d58d", - "platform_hrng": "0x0001d595", - "platform_init_controller": "0x0001d59d", - "platform_os_idle_resumed_hook": "0x0001d5b9", - "platform_patch_rf_init_data": "0x0001d5bd", - "platform_post_sleep_processing": "0x0001d5c9", - "platform_pre_sleep_processing": "0x0001d5cf", - "platform_pre_suppress_ticks_and_sleep_processing": "0x0001d5d5", - "platform_printf": "0x0001d5d9", - "platform_raise_assertion": "0x0001d5ed", - "platform_rand": "0x0001d601", - "platform_read_info": "0x0001d605", - "platform_read_persistent_reg": "0x0001d635", - "platform_reset": "0x0001d645", - "platform_rt_rc_auto_tune": "0x0001d669", - "platform_rt_rc_auto_tune2": "0x0001d671", - "platform_rt_rc_tune": "0x0001d6f9", - "platform_set_abs_timer": "0x0001d70d", - "platform_set_evt_callback": "0x0001d711", - "platform_set_evt_callback_table": "0x0001d725", - "platform_set_irq_callback": "0x0001d731", - "platform_set_irq_callback_table": "0x0001d74d", - "platform_set_rf_clk_source": "0x0001d759", - "platform_set_rf_init_data": "0x0001d765", - "platform_set_rf_power_mapping": "0x0001d771", - "platform_set_timer": "0x0001d77d", - "platform_shutdown": "0x0001d781", - "platform_switch_app": "0x0001d785", - "platform_trace_raw": "0x0001d7b1", - "platform_write_persistent_reg": "0x0001d7c9", - "printf_hexdump": "0x0001d7d9", - "reverse_128": "0x0001db19", - "reverse_24": "0x0001db1f", - "reverse_256": "0x0001db25", - "reverse_48": "0x0001db2b", - "reverse_56": "0x0001db31", - "reverse_64": "0x0001db37", - "reverse_bd_addr": "0x0001db3d", - "reverse_bytes": "0x0001db43", - "sm_add_event_handler": "0x0001dce1", - "sm_address_resolution_lookup": "0x0001de39", - "sm_authenticated": "0x0001e1b5", - "sm_authorization_decline": "0x0001e1c3", - "sm_authorization_grant": "0x0001e1e3", - "sm_authorization_state": "0x0001e203", - "sm_bonding_decline": "0x0001e21d", - "sm_config": "0x0001e679", - "sm_config_conn": "0x0001e691", - "sm_encryption_key_size": "0x0001e847", - "sm_just_works_confirm": "0x0001edcd", - "sm_le_device_key": "0x0001f105", - "sm_passkey_input": "0x0001f19b", - "sm_private_random_address_generation_get": "0x0001f555", - "sm_private_random_address_generation_get_mode": "0x0001f55d", - "sm_private_random_address_generation_set_mode": "0x0001f569", - "sm_private_random_address_generation_set_update_period": "0x0001f591", - "sm_register_external_ltk_callback": "0x0001f6cd", - "sm_register_oob_data_callback": "0x0001f6d9", - "sm_request_pairing": "0x0001f6e5", - "sm_send_security_request": "0x000201bb", - "sm_set_accepted_stk_generation_methods": "0x000201e1", - "sm_set_authentication_requirements": "0x000201ed", - "sm_set_encryption_key_size_range": "0x000201f9", - "sscanf_bd_addr": "0x00020555", - "sysSetPublicDeviceAddr": "0x00020909", - "uuid128_to_str": "0x00020f1d", - "uuid_add_bluetooth_prefix": "0x00020f75", - "uuid_has_bluetooth_prefix": "0x00020f95" + "platform_cancel_us_timer": "0x0001d453", + "platform_config": "0x0001d469", + "platform_controller_run": "0x0001d58d", + "platform_create_us_timer": "0x0001d5c1", + "platform_delete_timer": "0x0001d5d5", + "platform_enable_irq": "0x0001d5dd", + "platform_get_gen_os_driver": "0x0001d615", + "platform_get_link_layer_interf": "0x0001d621", + "platform_get_task_handle": "0x0001d629", + "platform_get_timer_counter": "0x0001d641", + "platform_get_us_time": "0x0001d645", + "platform_get_version": "0x0001d649", + "platform_hrng": "0x0001d651", + "platform_init_controller": "0x0001d659", + "platform_os_idle_resumed_hook": "0x0001d675", + "platform_patch_rf_init_data": "0x0001d679", + "platform_post_sleep_processing": "0x0001d685", + "platform_pre_sleep_processing": "0x0001d68b", + "platform_pre_suppress_ticks_and_sleep_processing": "0x0001d691", + "platform_printf": "0x0001d695", + "platform_raise_assertion": "0x0001d6a9", + "platform_rand": "0x0001d6bd", + "platform_read_info": "0x0001d6c1", + "platform_read_persistent_reg": "0x0001d6f1", + "platform_reset": "0x0001d701", + "platform_rt_rc_auto_tune": "0x0001d725", + "platform_rt_rc_auto_tune2": "0x0001d72d", + "platform_rt_rc_tune": "0x0001d7a9", + "platform_set_abs_timer": "0x0001d7cd", + "platform_set_evt_callback": "0x0001d7d1", + "platform_set_evt_callback_table": "0x0001d7e5", + "platform_set_irq_callback": "0x0001d7f1", + "platform_set_irq_callback_table": "0x0001d80d", + "platform_set_rf_clk_source": "0x0001d819", + "platform_set_rf_init_data": "0x0001d825", + "platform_set_rf_power_mapping": "0x0001d831", + "platform_set_timer": "0x0001d83d", + "platform_shutdown": "0x0001d841", + "platform_switch_app": "0x0001d845", + "platform_trace_raw": "0x0001d871", + "platform_write_persistent_reg": "0x0001d889", + "printf_hexdump": "0x0001d899", + "reverse_128": "0x0001dbd9", + "reverse_24": "0x0001dbdf", + "reverse_256": "0x0001dbe5", + "reverse_48": "0x0001dbeb", + "reverse_56": "0x0001dbf1", + "reverse_64": "0x0001dbf7", + "reverse_bd_addr": "0x0001dbfd", + "reverse_bytes": "0x0001dc03", + "sm_add_event_handler": "0x0001dda1", + "sm_address_resolution_lookup": "0x0001def9", + "sm_authenticated": "0x0001e2a1", + "sm_authorization_decline": "0x0001e2af", + "sm_authorization_grant": "0x0001e2cf", + "sm_authorization_state": "0x0001e2ef", + "sm_bonding_decline": "0x0001e309", + "sm_config": "0x0001e765", + "sm_config_conn": "0x0001e799", + "sm_encryption_key_size": "0x0001e953", + "sm_just_works_confirm": "0x0001eed9", + "sm_le_device_key": "0x0001f219", + "sm_passkey_input": "0x0001f2af", + "sm_private_random_address_generation_get": "0x0001f671", + "sm_private_random_address_generation_get_mode": "0x0001f679", + "sm_private_random_address_generation_set_mode": "0x0001f685", + "sm_private_random_address_generation_set_update_period": "0x0001f6ad", + "sm_register_external_ltk_callback": "0x0001f7e9", + "sm_register_oob_data_callback": "0x0001f7f5", + "sm_request_pairing": "0x0001f801", + "sm_send_security_request": "0x000202df", + "sm_set_accepted_stk_generation_methods": "0x00020305", + "sm_set_authentication_requirements": "0x00020311", + "sm_set_encryption_key_size_range": "0x00020321", + "sscanf_bd_addr": "0x0002066d", + "sysSetPublicDeviceAddr": "0x00020a69", + "uuid128_to_str": "0x00021091", + "uuid_add_bluetooth_prefix": "0x000210e9", + "uuid_has_bluetooth_prefix": "0x00021109" } \ No newline at end of file diff --git a/bundles/noos_typical/ING9187xx/meta.json b/bundles/noos_typical/ING9187xx/meta.json index 1c21b8180..47a4c55e2 100644 --- a/bundles/noos_typical/ING9187xx/meta.json +++ b/bundles/noos_typical/ING9187xx/meta.json @@ -4,15 +4,21 @@ }, "ram": { "base": 536870912, - "size": 3372 + "size": 3308 }, "rom": { "base": 16384, - "size": 125016 + "size": 125400 + }, + "var": { + "link_layer_features": { + "addr": 137904, + "value": "3ff9010400000000" + } }, "version": [ 1, 9, - 41 + 56 ] } \ No newline at end of file diff --git a/bundles/noos_typical/ING9187xx/platform.bin b/bundles/noos_typical/ING9187xx/platform.bin index 607bd61fa..cc0649523 100644 Binary files a/bundles/noos_typical/ING9187xx/platform.bin and b/bundles/noos_typical/ING9187xx/platform.bin differ diff --git a/bundles/noos_typical/ING9188xx/apis.json b/bundles/noos_typical/ING9188xx/apis.json index 3e7a5fbdb..d40d5bfba 100644 --- a/bundles/noos_typical/ING9188xx/apis.json +++ b/bundles/noos_typical/ING9188xx/apis.json @@ -6,45 +6,47 @@ "att_dispatch_server_can_send_now": "0x000057fd", "att_dispatch_server_request_can_send_now_event": "0x00005803", "att_emit_general_event": "0x000058b5", - "att_server_can_send_packet_now": "0x00005fe5", - "att_server_deferred_read_response": "0x00005fe9", - "att_server_get_mtu": "0x00006001", - "att_server_indicate": "0x00006079", - "att_server_init": "0x000060fd", - "att_server_notify": "0x00006139", - "att_server_register_packet_handler": "0x00006251", - "att_server_request_can_send_now_event": "0x0000625d", - "att_set_db": "0x00006279", - "att_set_read_callback": "0x0000628d", - "att_set_write_callback": "0x00006299", - "bd_addr_cmp": "0x00006409", - "bd_addr_copy": "0x0000640f", - "bd_addr_to_str": "0x00006419", - "big_endian_read_16": "0x00006451", - "big_endian_read_32": "0x00006459", - "big_endian_store_16": "0x0000646d", - "big_endian_store_32": "0x00006479", - "btstack_config": "0x000065b1", - "btstack_memory_pool_create": "0x000066ff", - "btstack_memory_pool_free": "0x00006729", - "btstack_memory_pool_get": "0x00006789", - "btstack_push_user_msg": "0x000067d1", - "btstack_push_user_runnable": "0x000067dd", - "btstack_reset": "0x000067e9", - "char_for_nibble": "0x00006aad", - "gap_add_dev_to_periodic_list": "0x000073c1", - "gap_add_whitelist": "0x000073d1", - "gap_aes_encrypt": "0x000073dd", - "gap_clear_white_lists": "0x00007415", - "gap_clr_adv_set": "0x00007421", - "gap_clr_periodic_adv_list": "0x0000742d", - "gap_create_connection_cancel": "0x00007439", - "gap_default_periodic_adv_sync_transfer_param": "0x00007445", - "gap_disconnect": "0x0000745d", - "gap_disconnect_all": "0x00007489", - "gap_ext_create_connection": "0x000074c9", - "gap_get_connection_parameter_range": "0x000075a1", - "gap_le_read_channel_map": "0x000075dd", + "att_server_can_send_packet_now": "0x00005fe9", + "att_server_deferred_read_response": "0x00005fed", + "att_server_get_mtu": "0x00006005", + "att_server_indicate": "0x0000607d", + "att_server_init": "0x00006101", + "att_server_notify": "0x0000613d", + "att_server_register_packet_handler": "0x00006255", + "att_server_request_can_send_now_event": "0x00006261", + "att_set_db": "0x0000627d", + "att_set_read_callback": "0x00006291", + "att_set_write_callback": "0x0000629d", + "bd_addr_cmp": "0x0000640d", + "bd_addr_copy": "0x00006413", + "bd_addr_to_str": "0x0000641d", + "big_endian_read_16": "0x00006455", + "big_endian_read_32": "0x0000645d", + "big_endian_store_16": "0x00006471", + "big_endian_store_32": "0x0000647d", + "btstack_config": "0x000065b5", + "btstack_get_capabilities": "0x000065c1", + "btstack_memory_pool_create": "0x0000671b", + "btstack_memory_pool_free": "0x00006745", + "btstack_memory_pool_get": "0x000067a5", + "btstack_push_user_msg": "0x000067ed", + "btstack_push_user_runnable": "0x000067f9", + "btstack_reset": "0x00006805", + "char_for_nibble": "0x00006ac9", + "gap_add_dev_to_periodic_list": "0x000073c9", + "gap_add_whitelist": "0x000073d9", + "gap_aes_encrypt": "0x000073e5", + "gap_clear_white_lists": "0x0000741d", + "gap_clr_adv_set": "0x00007429", + "gap_clr_periodic_adv_list": "0x00007435", + "gap_create_connection_cancel": "0x00007441", + "gap_default_periodic_adv_sync_transfer_param": "0x0000744d", + "gap_disconnect": "0x00007465", + "gap_disconnect2": "0x0000746d", + "gap_disconnect_all": "0x00007499", + "gap_ext_create_connection": "0x000074d9", + "gap_get_connection_parameter_range": "0x000075b1", + "gap_le_read_channel_map": "0x000075e9", "gap_periodic_adv_create_sync": "0x00007649", "gap_periodic_adv_create_sync_cancel": "0x0000766d", "gap_periodic_adv_set_info_transfer": "0x00007679", @@ -57,211 +59,216 @@ "gap_read_remote_used_features": "0x00007761", "gap_read_remote_version": "0x0000776d", "gap_read_rssi": "0x00007779", - "gap_remove_whitelist": "0x00007785", - "gap_rmv_adv_set": "0x00007801", - "gap_rmv_dev_from_periodic_list": "0x0000780d", - "gap_rx_test_v2": "0x0000781d", - "gap_rx_test_v3": "0x0000782d", - "gap_set_adv_set_random_addr": "0x00007879", - "gap_set_callback_for_next_hci": "0x000078b5", - "gap_set_connection_cte_request_enable": "0x000078d5", - "gap_set_connection_cte_response_enable": "0x000078f1", - "gap_set_connection_cte_rx_param": "0x00007901", - "gap_set_connection_cte_tx_param": "0x00007955", - "gap_set_connection_parameter_range": "0x000079a1", - "gap_set_connectionless_cte_tx_enable": "0x000079b9", - "gap_set_connectionless_cte_tx_param": "0x000079c9", - "gap_set_connectionless_iq_sampling_enable": "0x00007a25", - "gap_set_data_length": "0x00007a81", - "gap_set_def_phy": "0x00007a99", - "gap_set_ext_adv_data": "0x00007aa9", - "gap_set_ext_adv_enable": "0x00007ac1", - "gap_set_ext_adv_para": "0x00007b31", - "gap_set_ext_scan_enable": "0x00007c09", - "gap_set_ext_scan_para": "0x00007c21", - "gap_set_ext_scan_response_data": "0x00007cc1", - "gap_set_host_channel_classification": "0x00007cd9", - "gap_set_periodic_adv_data": "0x00007ce9", - "gap_set_periodic_adv_enable": "0x00007d59", - "gap_set_periodic_adv_para": "0x00007d69", - "gap_set_periodic_adv_rx_enable": "0x00007d81", - "gap_set_phy": "0x00007d91", - "gap_set_random_device_address": "0x00007dad", - "gap_start_ccm": "0x00007ddd", - "gap_test_end": "0x00007e25", - "gap_tx_test_v2": "0x00007e31", - "gap_tx_test_v4": "0x00007e49", - "gap_update_connection_parameters": "0x00007e6d", - "gap_vendor_tx_continuous_wave": "0x00007eb1", - "gatt_client_cancel_write": "0x000083d9", - "gatt_client_discover_characteristic_descriptors": "0x000083ff", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x0000843f", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x0000848f", - "gatt_client_discover_characteristics_for_service": "0x000084df", - "gatt_client_discover_primary_services": "0x00008515", - "gatt_client_discover_primary_services_by_uuid128": "0x00008547", - "gatt_client_discover_primary_services_by_uuid16": "0x0000858b", - "gatt_client_execute_write": "0x000085c7", - "gatt_client_find_included_services_for_service": "0x000085ed", - "gatt_client_get_mtu": "0x0000861b", - "gatt_client_is_ready": "0x000086bd", - "gatt_client_listen_for_characteristic_value_updates": "0x000086d3", - "gatt_client_prepare_write": "0x000086f5", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x00008731", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x0000875b", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008761", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x0000878f", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x00008795", - "gatt_client_read_multiple_characteristic_values": "0x000087c3", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x000087f3", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x00008821", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x0000886d", - "gatt_client_register_handler": "0x000088b9", - "gatt_client_reliable_write_long_value_of_characteristic": "0x000088c5", - "gatt_client_signed_write_without_response": "0x00008cf5", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008db9", - "gatt_client_write_client_characteristic_configuration": "0x00008df3", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008e45", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008e55", - "gatt_client_write_long_value_of_characteristic": "0x00008e91", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008ea1", - "gatt_client_write_value_of_characteristic": "0x00008edd", - "gatt_client_write_value_of_characteristic_without_response": "0x00008f13", - "hci_add_event_handler": "0x0000a455", - "hci_power_control": "0x0000abf1", - "hci_register_acl_packet_handler": "0x0000ada5", - "kv_commit": "0x0000b541", - "kv_get": "0x0000b59d", - "kv_init": "0x0000b5a9", - "kv_init_backend": "0x0000b629", - "kv_put": "0x0000b63d", - "kv_remove": "0x0000b649", - "kv_remove_all": "0x0000b67d", - "kv_value_modified": "0x0000b6ad", - "kv_value_modified_of_key": "0x0000b6c9", - "kv_visit": "0x0000b6d5", - "l2cap_add_event_handler": "0x0000b765", - "l2cap_can_send_packet_now": "0x0000b775", - "l2cap_create_le_credit_based_connection_request": "0x0000b931", - "l2cap_credit_based_send": "0x0000ba75", - "l2cap_credit_based_send_continue": "0x0000baa1", - "l2cap_disconnect": "0x0000bb1d", - "l2cap_get_le_credit_based_connection_credits": "0x0000bd6d", - "l2cap_get_peer_mtu_for_local_cid": "0x0000bd89", - "l2cap_init": "0x0000c15d", - "l2cap_le_send_flow_control_credit": "0x0000c253", - "l2cap_max_le_mtu": "0x0000c55d", - "l2cap_register_packet_handler": "0x0000c685", - "l2cap_register_service": "0x0000c691", - "l2cap_request_can_send_now_event": "0x0000c7a1", - "l2cap_request_connection_parameter_update": "0x0000c7bb", - "l2cap_send_echo_request": "0x0000cc95", - "l2cap_unregister_service": "0x0000cd55", - "le_device_db_add": "0x0000cdad", - "le_device_db_find": "0x0000ce85", - "le_device_db_from_key": "0x0000ceb1", - "le_device_db_iter_cur": "0x0000ceb9", - "le_device_db_iter_cur_key": "0x0000cebd", - "le_device_db_iter_init": "0x0000cec1", - "le_device_db_iter_next": "0x0000cec9", - "le_device_db_remove_key": "0x0000ceef", - "ll_aes_encrypt": "0x0000cf1d", - "ll_config": "0x0000cf99", - "ll_free": "0x0000cfcf", - "ll_get_heap_free_size": "0x0000cfd9", - "ll_hint_on_ce_len": "0x0000cfed", - "ll_legacy_adv_set_interval": "0x0000d025", - "ll_malloc": "0x0000d035", - "ll_query_timing_info": "0x0000d16d", - "ll_register_hci_acl_previewer": "0x0000d1b9", - "ll_scan_set_fixed_channel": "0x0000d21d", - "ll_set_adv_access_address": "0x0000d435", - "ll_set_adv_coded_scheme": "0x0000d441", - "ll_set_conn_acl_report_latency": "0x0000d471", - "ll_set_conn_coded_scheme": "0x0000d4a1", - "ll_set_conn_latency": "0x0000d4cd", - "ll_set_conn_tx_power": "0x0000d4fd", - "ll_set_def_antenna": "0x0000d545", - "ll_set_initiating_coded_scheme": "0x0000d561", - "ll_set_max_conn_number": "0x0000d56d", - "nibble_for_char": "0x0001e5d9", - "platform_calibrate_rt_clk": "0x0001e673", + "gap_read_white_lists_size": "0x00007785", + "gap_remove_whitelist": "0x00007791", + "gap_rmv_adv_set": "0x0000780d", + "gap_rmv_dev_from_periodic_list": "0x00007819", + "gap_rx_test_v2": "0x00007829", + "gap_rx_test_v3": "0x00007839", + "gap_set_adv_set_random_addr": "0x00007885", + "gap_set_callback_for_next_hci": "0x000078a9", + "gap_set_connection_cte_request_enable": "0x000078c9", + "gap_set_connection_cte_response_enable": "0x000078e5", + "gap_set_connection_cte_rx_param": "0x000078f5", + "gap_set_connection_cte_tx_param": "0x00007949", + "gap_set_connection_parameter_range": "0x00007995", + "gap_set_connectionless_cte_tx_enable": "0x000079ad", + "gap_set_connectionless_cte_tx_param": "0x000079bd", + "gap_set_connectionless_iq_sampling_enable": "0x00007a19", + "gap_set_data_length": "0x00007a75", + "gap_set_def_phy": "0x00007a8d", + "gap_set_ext_adv_data": "0x00007a9d", + "gap_set_ext_adv_enable": "0x00007ab5", + "gap_set_ext_adv_para": "0x00007b25", + "gap_set_ext_scan_enable": "0x00007bed", + "gap_set_ext_scan_para": "0x00007c05", + "gap_set_ext_scan_response_data": "0x00007ca5", + "gap_set_host_channel_classification": "0x00007cbd", + "gap_set_periodic_adv_data": "0x00007ccd", + "gap_set_periodic_adv_enable": "0x00007d3d", + "gap_set_periodic_adv_para": "0x00007d4d", + "gap_set_periodic_adv_rx_enable": "0x00007d65", + "gap_set_phy": "0x00007d75", + "gap_set_random_device_address": "0x00007d91", + "gap_start_ccm": "0x00007dad", + "gap_test_end": "0x00007df5", + "gap_tx_test_v2": "0x00007e01", + "gap_tx_test_v4": "0x00007e19", + "gap_update_connection_parameters": "0x00007e3d", + "gap_vendor_tx_continuous_wave": "0x00007e81", + "gatt_client_cancel_write": "0x000083a9", + "gatt_client_discover_characteristic_descriptors": "0x000083cf", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x0000840f", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x0000845f", + "gatt_client_discover_characteristics_for_service": "0x000084af", + "gatt_client_discover_primary_services": "0x000084e5", + "gatt_client_discover_primary_services_by_uuid128": "0x00008517", + "gatt_client_discover_primary_services_by_uuid16": "0x0000855b", + "gatt_client_execute_write": "0x00008597", + "gatt_client_find_included_services_for_service": "0x000085bd", + "gatt_client_get_mtu": "0x000085eb", + "gatt_client_is_ready": "0x00008695", + "gatt_client_listen_for_characteristic_value_updates": "0x000086ab", + "gatt_client_prepare_write": "0x000086cd", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x00008709", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x00008733", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008739", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x00008767", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x0000876d", + "gatt_client_read_multiple_characteristic_values": "0x0000879b", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x000087cb", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x000087f9", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x00008845", + "gatt_client_register_handler": "0x00008891", + "gatt_client_reliable_write_long_value_of_characteristic": "0x0000889d", + "gatt_client_signed_write_without_response": "0x00008ccd", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008d91", + "gatt_client_write_client_characteristic_configuration": "0x00008dcb", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008e1d", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008e2d", + "gatt_client_write_long_value_of_characteristic": "0x00008e69", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008e79", + "gatt_client_write_value_of_characteristic": "0x00008eb5", + "gatt_client_write_value_of_characteristic_without_response": "0x00008eeb", + "hci_add_event_handler": "0x0000a425", + "hci_power_control": "0x0000abbd", + "hci_register_acl_packet_handler": "0x0000ad71", + "kv_commit": "0x0000b4fd", + "kv_get": "0x0000b559", + "kv_init": "0x0000b565", + "kv_init_backend": "0x0000b5e5", + "kv_put": "0x0000b5f9", + "kv_remove": "0x0000b605", + "kv_remove_all": "0x0000b639", + "kv_value_modified": "0x0000b669", + "kv_value_modified_of_key": "0x0000b685", + "kv_visit": "0x0000b691", + "l2cap_add_event_handler": "0x0000b721", + "l2cap_can_send_packet_now": "0x0000b731", + "l2cap_create_le_credit_based_connection_request": "0x0000b8ed", + "l2cap_credit_based_send": "0x0000ba31", + "l2cap_credit_based_send_continue": "0x0000ba5d", + "l2cap_disconnect": "0x0000bad9", + "l2cap_get_le_credit_based_connection_credits": "0x0000bd29", + "l2cap_get_peer_mtu_for_local_cid": "0x0000bd45", + "l2cap_init": "0x0000c119", + "l2cap_le_send_flow_control_credit": "0x0000c20f", + "l2cap_max_le_mtu": "0x0000c519", + "l2cap_register_packet_handler": "0x0000c641", + "l2cap_register_service": "0x0000c64d", + "l2cap_request_can_send_now_event": "0x0000c75d", + "l2cap_request_connection_parameter_update": "0x0000c777", + "l2cap_send_echo_request": "0x0000cc51", + "l2cap_unregister_service": "0x0000cd11", + "le_device_db_add": "0x0000cd69", + "le_device_db_find": "0x0000ce41", + "le_device_db_from_key": "0x0000ce6d", + "le_device_db_iter_cur": "0x0000ce75", + "le_device_db_iter_cur_key": "0x0000ce79", + "le_device_db_iter_init": "0x0000ce7d", + "le_device_db_iter_next": "0x0000ce85", + "le_device_db_remove_key": "0x0000ceab", + "ll_aes_encrypt": "0x0000ced9", + "ll_config": "0x0000cf55", + "ll_free": "0x0000cf8b", + "ll_get_capabilities": "0x0000cf95", + "ll_get_heap_free_size": "0x0000cfb5", + "ll_get_states": "0x0000cfc5", + "ll_hint_on_ce_len": "0x0000d081", + "ll_legacy_adv_set_interval": "0x0000d0b9", + "ll_malloc": "0x0000d0c9", + "ll_query_timing_info": "0x0000d201", + "ll_register_hci_acl_previewer": "0x0000d24d", + "ll_scan_set_fixed_channel": "0x0000d2b1", + "ll_set_adv_access_address": "0x0000d4c9", + "ll_set_adv_coded_scheme": "0x0000d4d5", + "ll_set_conn_acl_report_latency": "0x0000d505", + "ll_set_conn_coded_scheme": "0x0000d535", + "ll_set_conn_latency": "0x0000d561", + "ll_set_conn_tx_power": "0x0000d591", + "ll_set_def_antenna": "0x0000d5d9", + "ll_set_initiating_coded_scheme": "0x0000d5f5", + "ll_set_max_conn_number": "0x0000d601", + "nibble_for_char": "0x0001e66d", + "platform_calibrate_rt_clk": "0x0001e707", "platform_call_on_stack": "0x000040ef", - "platform_config": "0x0001e679", - "platform_controller_run": "0x0001e79d", - "platform_delete_timer": "0x0001e7d1", - "platform_enable_irq": "0x0001e7d9", - "platform_get_gen_os_driver": "0x0001e811", - "platform_get_link_layer_interf": "0x0001e81d", - "platform_get_task_handle": "0x0001e825", - "platform_get_timer_counter": "0x0001e83d", - "platform_get_us_time": "0x0001e841", - "platform_get_version": "0x0001e845", - "platform_hrng": "0x0001e84d", - "platform_init_controller": "0x0001e855", - "platform_os_idle_resumed_hook": "0x0001e871", - "platform_patch_rf_init_data": "0x0001e875", - "platform_post_sleep_processing": "0x0001e881", - "platform_pre_sleep_processing": "0x0001e887", - "platform_pre_suppress_ticks_and_sleep_processing": "0x0001e88d", - "platform_printf": "0x0001e891", - "platform_raise_assertion": "0x0001e8a5", - "platform_rand": "0x0001e8b9", - "platform_read_info": "0x0001e8bd", - "platform_read_persistent_reg": "0x0001e8ed", - "platform_reset": "0x0001e8fd", - "platform_rt_rc_auto_tune": "0x0001e921", - "platform_rt_rc_auto_tune2": "0x0001e929", - "platform_rt_rc_tune": "0x0001e9b1", - "platform_set_abs_timer": "0x0001e9c5", - "platform_set_evt_callback": "0x0001e9c9", - "platform_set_evt_callback_table": "0x0001e9dd", - "platform_set_irq_callback": "0x0001e9e9", - "platform_set_irq_callback_table": "0x0001ea05", - "platform_set_rf_clk_source": "0x0001ea11", - "platform_set_rf_init_data": "0x0001ea1d", - "platform_set_rf_power_mapping": "0x0001ea29", - "platform_set_timer": "0x0001ea35", - "platform_shutdown": "0x0001ea39", - "platform_switch_app": "0x0001ea3d", - "platform_trace_raw": "0x0001ea69", - "platform_write_persistent_reg": "0x0001ea81", - "printf_hexdump": "0x0001ea91", - "reverse_128": "0x0001ee09", - "reverse_24": "0x0001ee0f", - "reverse_256": "0x0001ee15", - "reverse_48": "0x0001ee1b", - "reverse_56": "0x0001ee21", - "reverse_64": "0x0001ee27", - "reverse_bd_addr": "0x0001ee2d", - "reverse_bytes": "0x0001ee33", - "sm_add_event_handler": "0x0001f121", - "sm_address_resolution_lookup": "0x0001f279", - "sm_authenticated": "0x0001f5f5", - "sm_authorization_decline": "0x0001f603", - "sm_authorization_grant": "0x0001f623", - "sm_authorization_state": "0x0001f643", - "sm_bonding_decline": "0x0001f65d", - "sm_config": "0x0001fab9", - "sm_config_conn": "0x0001fad1", - "sm_encryption_key_size": "0x0001fc87", - "sm_just_works_confirm": "0x0002020d", - "sm_le_device_key": "0x00020545", - "sm_passkey_input": "0x000205db", - "sm_private_random_address_generation_get": "0x00020995", - "sm_private_random_address_generation_get_mode": "0x0002099d", - "sm_private_random_address_generation_set_mode": "0x000209a9", - "sm_private_random_address_generation_set_update_period": "0x000209d1", - "sm_register_external_ltk_callback": "0x00020b0d", - "sm_register_oob_data_callback": "0x00020b19", - "sm_request_pairing": "0x00020b25", - "sm_send_security_request": "0x000215fb", - "sm_set_accepted_stk_generation_methods": "0x00021621", - "sm_set_authentication_requirements": "0x0002162d", - "sm_set_encryption_key_size_range": "0x00021639", - "sscanf_bd_addr": "0x00021995", - "sysSetPublicDeviceAddr": "0x00021d49", - "uuid128_to_str": "0x000224f5", - "uuid_add_bluetooth_prefix": "0x0002254d", - "uuid_has_bluetooth_prefix": "0x0002256d" + "platform_cancel_us_timer": "0x0001e70b", + "platform_config": "0x0001e721", + "platform_controller_run": "0x0001e845", + "platform_create_us_timer": "0x0001e879", + "platform_delete_timer": "0x0001e88d", + "platform_enable_irq": "0x0001e895", + "platform_get_gen_os_driver": "0x0001e8cd", + "platform_get_link_layer_interf": "0x0001e8d9", + "platform_get_task_handle": "0x0001e8e1", + "platform_get_timer_counter": "0x0001e8f9", + "platform_get_us_time": "0x0001e8fd", + "platform_get_version": "0x0001e901", + "platform_hrng": "0x0001e909", + "platform_init_controller": "0x0001e911", + "platform_os_idle_resumed_hook": "0x0001e92d", + "platform_patch_rf_init_data": "0x0001e931", + "platform_post_sleep_processing": "0x0001e93d", + "platform_pre_sleep_processing": "0x0001e943", + "platform_pre_suppress_ticks_and_sleep_processing": "0x0001e949", + "platform_printf": "0x0001e94d", + "platform_raise_assertion": "0x0001e961", + "platform_rand": "0x0001e975", + "platform_read_info": "0x0001e979", + "platform_read_persistent_reg": "0x0001e9a9", + "platform_reset": "0x0001e9b9", + "platform_rt_rc_auto_tune": "0x0001e9dd", + "platform_rt_rc_auto_tune2": "0x0001e9e5", + "platform_rt_rc_tune": "0x0001ea61", + "platform_set_abs_timer": "0x0001ea85", + "platform_set_evt_callback": "0x0001ea89", + "platform_set_evt_callback_table": "0x0001ea9d", + "platform_set_irq_callback": "0x0001eaa9", + "platform_set_irq_callback_table": "0x0001eac5", + "platform_set_rf_clk_source": "0x0001ead1", + "platform_set_rf_init_data": "0x0001eadd", + "platform_set_rf_power_mapping": "0x0001eae9", + "platform_set_timer": "0x0001eaf5", + "platform_shutdown": "0x0001eaf9", + "platform_switch_app": "0x0001eafd", + "platform_trace_raw": "0x0001eb29", + "platform_write_persistent_reg": "0x0001eb41", + "printf_hexdump": "0x0001eb51", + "reverse_128": "0x0001eec9", + "reverse_24": "0x0001eecf", + "reverse_256": "0x0001eed5", + "reverse_48": "0x0001eedb", + "reverse_56": "0x0001eee1", + "reverse_64": "0x0001eee7", + "reverse_bd_addr": "0x0001eeed", + "reverse_bytes": "0x0001eef3", + "sm_add_event_handler": "0x0001f1e1", + "sm_address_resolution_lookup": "0x0001f339", + "sm_authenticated": "0x0001f6e1", + "sm_authorization_decline": "0x0001f6ef", + "sm_authorization_grant": "0x0001f70f", + "sm_authorization_state": "0x0001f72f", + "sm_bonding_decline": "0x0001f749", + "sm_config": "0x0001fba5", + "sm_config_conn": "0x0001fbd9", + "sm_encryption_key_size": "0x0001fd93", + "sm_just_works_confirm": "0x00020319", + "sm_le_device_key": "0x00020659", + "sm_passkey_input": "0x000206ef", + "sm_private_random_address_generation_get": "0x00020ab1", + "sm_private_random_address_generation_get_mode": "0x00020ab9", + "sm_private_random_address_generation_set_mode": "0x00020ac5", + "sm_private_random_address_generation_set_update_period": "0x00020aed", + "sm_register_external_ltk_callback": "0x00020c29", + "sm_register_oob_data_callback": "0x00020c35", + "sm_request_pairing": "0x00020c41", + "sm_send_security_request": "0x0002171f", + "sm_set_accepted_stk_generation_methods": "0x00021745", + "sm_set_authentication_requirements": "0x00021751", + "sm_set_encryption_key_size_range": "0x00021761", + "sscanf_bd_addr": "0x00021aad", + "sysSetPublicDeviceAddr": "0x00021ea9", + "uuid128_to_str": "0x00022669", + "uuid_add_bluetooth_prefix": "0x000226c1", + "uuid_has_bluetooth_prefix": "0x000226e1" } \ No newline at end of file diff --git a/bundles/noos_typical/ING9188xx/meta.json b/bundles/noos_typical/ING9188xx/meta.json index e9c573849..c681795df 100644 --- a/bundles/noos_typical/ING9188xx/meta.json +++ b/bundles/noos_typical/ING9188xx/meta.json @@ -1,18 +1,24 @@ { "app": { - "base": 147456 + "base": 155648 }, "ram": { "base": 536870912, - "size": 3372 + "size": 3308 }, "rom": { "base": 16384, - "size": 131064 + "size": 131452 + }, + "var": { + "link_layer_features": { + "addr": 143608, + "value": "3ff9ff0700000000" + } }, "version": [ 1, 9, - 41 + 56 ] } \ No newline at end of file diff --git a/bundles/noos_typical/ING9188xx/platform.bin b/bundles/noos_typical/ING9188xx/platform.bin index 0bcce2c56..8d4f84abd 100644 Binary files a/bundles/noos_typical/ING9188xx/platform.bin and b/bundles/noos_typical/ING9188xx/platform.bin differ diff --git a/bundles/noos_typical/inc/bluetooth.h b/bundles/noos_typical/inc/bluetooth.h index 44c58585a..8d306ff5e 100644 --- a/bundles/noos_typical/inc/bluetooth.h +++ b/bundles/noos_typical/inc/bluetooth.h @@ -40,10 +40,14 @@ typedef uint8_t bd_addr_t[BD_ADDR_LEN]; typedef enum { BD_ADDR_TYPE_LE_PUBLIC = 0, BD_ADDR_TYPE_LE_RANDOM = 0x01, - BD_ADDR_TYPE_LE_RESOVLED_PUB = 0x02, - BD_ADDR_TYPE_LE_RESOVLED_RAN = 0x03 + BD_ADDR_TYPE_LE_RESOLVED_PUB = 0x02, + BD_ADDR_TYPE_LE_RESOLVED_RAN = 0x03 } bd_addr_type_t; +// back-compatibility for typos +#define BD_ADDR_TYPE_LE_RESOVLED_PUB BD_ADDR_TYPE_LE_RESOLVED_PUB +#define BD_ADDR_TYPE_LE_RESOVLED_RAN BD_ADDR_TYPE_LE_RESOLVED_RAN + /** * @brief link key */ @@ -718,7 +722,7 @@ typedef enum { #define SM_AUTHREQ_NO_BONDING 0x00 #define SM_AUTHREQ_BONDING 0x01 #define SM_AUTHREQ_MITM_PROTECTION 0x04 -#define SM_AUTHREQ_SC 0x08 +#define SM_AUTHREQ_SC 0x08 // support of LE Secure Connections pairing // Key distribution flags used by spec #define SM_KEYDIST_ENC_KEY 0X01 diff --git a/bundles/noos_typical/inc/btstack_defines.h b/bundles/noos_typical/inc/btstack_defines.h index a8d08006c..25f1463b0 100644 --- a/bundles/noos_typical/inc/btstack_defines.h +++ b/bundles/noos_typical/inc/btstack_defines.h @@ -385,6 +385,20 @@ */ #define SM_EVENT_STATE_CHANGED 0xDC + /** + * @format H1B1 + * @param handle + * @param show calculated numeric value that needs to be compared + */ +#define SM_EVENT_NUMERIC_COMPARISON_REQUEST 0xDD + +/** + * @format PP + * @param irk + * @param dhk + */ +#define SM_EVENT_IRK_DHK_RESULT 0xDE + // GAP /** diff --git a/bundles/noos_typical/inc/btstack_event.h b/bundles/noos_typical/inc/btstack_event.h index e5ab49a55..dc87fa82a 100644 --- a/bundles/noos_typical/inc/btstack_event.h +++ b/bundles/noos_typical/inc/btstack_event.h @@ -107,6 +107,21 @@ uint32_t btstack_push_user_runnable(f_btstack_user_runnable fun, void *data, con */ uint8_t btstack_reset(void); +typedef struct btstack_capabilities +{ + uint16_t adv_set_num; // max number of advertising sets + uint16_t conn_num; // max number of connections + uint16_t max_mtu; // max MTU + uint16_t device_db_num; // max number of devices in database +} btstack_capabilities_t; + +/** + * @brief Get BT stack capabilities. + * + * @param[out] capabilities see `btstack_capabilities_t`. + */ +void btstack_get_capabilities(btstack_capabilities_t *capabilities); + /*** * @brief Get subevent code for le event * @param event packet @@ -780,6 +795,26 @@ static __INLINE hci_con_handle_t sm_event_numeric_comparison_get_handle(const ui return little_endian_read_16(event, 2); } +/** + * @brief Get field addr_type from event SM_EVENT_NUMERIC_COMPARISON_REQUEST + * @param event packet + * @return addr_type + * @note: btstack_type 1 + */ +static __INLINE uint8_t sm_event_numeric_comparison_get_addr_type(const uint8_t * event){ + return *decode_event_offset(event, uint8_t, 4); +} + +/** + * @brief Get field address from event SM_EVENT_NUMERIC_COMPARISON_REQUEST + * @param event packet + * @param Pointer to storage for address + * @note: btstack_type B + */ +static __INLINE void sm_event_numeric_comparison_get_address(const uint8_t * event, uint8_t * address){ + reverse_bd_addr(decode_event_offset(event, uint8_t, 5), address); +} + /** * @brief Get field compare value from event SM_EVENT_NUMERIC_COMPARISON_REQUEST * @param event packet @@ -790,6 +825,24 @@ static __INLINE uint32_t sm_event_numeric_comparison_get_compare_value(const uin return little_endian_read_32(event, 11); } +/** + * @brief Get IRK from event SM_EVENT_IRK_DHK_RESULT + * @param event packet + * @return irk + */ +static __INLINE const uint8_t *sm_event_irk_dhk_result_get_irk(const uint8_t *event) { + return *decode_event_offset(event, uint8_t *, 2); +} + +/** + * @brief Get DHK from event SM_EVENT_IRK_DHK_RESULT + * @param event packet + * @return dhk + */ +static __INLINE const uint8_t *sm_event_irk_dhk_result_get_dhk(const uint8_t *event) { + return *decode_event_offset(event, uint8_t *, 2 + sizeof(uintptr_t)); +} + /** * @brief Get field handle from event GAP_EVENT_SECURITY_LEVEL * @param event packet diff --git a/bundles/noos_typical/inc/gap.h b/bundles/noos_typical/inc/gap.h index 94ec41d4e..020bb0b27 100644 --- a/bundles/noos_typical/inc/gap.h +++ b/bundles/noos_typical/inc/gap.h @@ -54,11 +54,27 @@ uint8_t gap_set_random_device_address(const uint8_t *address); /** * @brief Disconnect connection with handle * + * This is equivalent to `gap_disconnect2(handle, 0x13)`. + * * @param handle Used to identify an advertising set. Range: 0x00 to 0xEF * @return 0: Message is sent out or the connection already release */ uint8_t gap_disconnect(hci_con_handle_t handle); +/** + * @brief Disconnect connection with handle + * + * @param handle Used to identify an advertising set. Range: 0x00 to 0xEF + * @param reason Reason: + * - Authentication Failure error code (0x05) + * - Other End Terminated Connection error codes (0x13 to 0x15) + * - Unsupported Remote Feature error code (0x1A) + * - Pairing with Unit Key Not Supported error code (0x29) + * - Unacceptable Connection Parameters error code (0x3B) + * @return 0: Message is sent out or the connection already release + */ +uint8_t gap_disconnect2(hci_con_handle_t handle, uint8_t reason); + /** * @brief disconnect multi-connections */ @@ -70,7 +86,7 @@ void gap_disconnect_all(void); * @param[in] addtype BLE address type * @return 0: Message is sent to controller */ -uint8_t gap_add_whitelist(const uint8_t *address,bd_addr_type_t addtype); +uint8_t gap_add_whitelist(const uint8_t *address, bd_addr_type_t addtype); /** * @brief remove whitelist from controller @@ -79,7 +95,7 @@ uint8_t gap_add_whitelist(const uint8_t *address,bd_addr_type_t addtype); * @param addtype BLE address type * @return 0: Message is sent to controller */ -uint8_t gap_remove_whitelist(const uint8_t *address,bd_addr_type_t addtype); +uint8_t gap_remove_whitelist(const uint8_t *address, bd_addr_type_t addtype); /** * @brief clear white lists in controller @@ -88,6 +104,122 @@ uint8_t gap_remove_whitelist(const uint8_t *address,bd_addr_type_t addtype); */ uint8_t gap_clear_white_lists(void); +/** + * @brief read white lists size in controller + * + * @return 0: message sent out others: failed + */ +uint8_t gap_read_white_lists_size(void); + +/** + * @brief Add one device to the resolving list used to generate and resolve + * Resolvable Private Addresses in the Controller. + * + * @param address peer identity address + * @param addtype peer identity address type + * @param peer_irk IRK of the peer device + * @param local_irk IRK of the local device + * @return 0: message sent out others: failed + */ +// uint8_t gap_add_dev_to_resolving_list(const uint8_t *address, bd_addr_type_t addtype, +// const uint8_t *peer_irk, const uint8_t *local_irk); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Remove one device from the resolving list used to resolve Resolvable + * Private Addresses in the Controller. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_remove_dev_from_resolving_list(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Remove all devices from the resolving list used to resolve Resolvable + * Private Addresses in the Controller. + * + * @return 0: message sent out others: failed + */ +// uint8_t gap_clear_resolving_list(void); +// WARNING: ^^^ this API is not available in this release + + +// LE Privacy Mode +typedef enum privacy_mode +{ + PRIVACY_MODE_NETWORK = 0, // Network Privacy Mode (default) + // Identity address is not accepted if IRK is available + PRIVACY_MODE_DEVICE = 1, // Device Privacy Mode + // Identity address is accepted even if IRK is available +} privacy_mode_t; + +/** + * @brief Specify the privacy mode to be used for a given entry on the resolving list. + * + * @param address peer identity address + * @param addtype peer identity address type + * @param privacy_mode privacy mode for this peer device + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_privacy_mode(const uint8_t *address, bd_addr_type_t addtype, +// privacy_mode_t privacy_mode); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Get the current peer Resolvable Private Address being used for the + * corresponding peer Public and Random (static) Identity Address. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_read_peer_resolving_addr(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Get the current local Resolvable Private Address being used for the + * corresponding peer Identity Address. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_read_local_resolving_addr(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Enable resolution of Resolvable Private Addresses in the Controller. + * + * @param enable address resolution enable + * 0: disabled (default) + * 1: enabled + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_addr_resolution_enable(const uint8_t enable); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Set the length of time the Controller uses a Resolvable Private Address + * before a new resolvable private address is generated and starts being used. + * + * @param rpa_timeout RPA_Timeout measured in seconds + * Range: 0x0001 to 0x0E10 + * Time range: 1 s to 1 hour + * Default: 0x0384 (900 s or 15 minutes) + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_resolvable_private_addr_timeout(uint16_t rpa_timeout); +// WARNING: ^^^ this API is not available in this release + + /** * @brief read rssi value of a appointed hci connection * @@ -290,13 +422,13 @@ typedef enum scan_filter_policy SCAN_ACCEPT_WLIST_EXCEPT_NOT_DIRECTED, // Accept all advertising packets except directed advertising packets // where the initiator's identity address does not address this device - SCAN_ACCEPT_ALL_EXCEPT_IDENTITY_NOT_MATCH, + // SCAN_ACCEPT_ALL_EXCEPT_IDENTITY_NOT_MATCH, // Accept all advertising packets except: // 1. advertising packets where the advertiser's identity address is not in // the White List; and // 2. directed advertising packets where the initiator's identity address // does not address this device - SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH + // SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH } scan_filter_policy_t; /** @@ -318,6 +450,9 @@ uint8_t gap_set_ext_scan_para(const bd_addr_type_t own_addr_type, const scan_fil /** * @brief to set the extended scan response data for an advertising set * + * Note: Scan response data is cleared after `gap_set_ext_adv_para()` on the same + * advertising set handle. + * * @param adv_handle handle of advertising set handle * * @param length length of advertising data @@ -482,6 +617,9 @@ typedef enum adv_data_frag_pref /** * @brief to set extended advertising data * + * Note: Advertising data is cleared after `gap_set_ext_adv_para()` on the same + * advertising set handle. + * * @param adv_handle advertising set handle. * * @param length advertising data length @@ -497,6 +635,9 @@ uint8_t gap_set_ext_adv_data(const uint8_t adv_handle, uint16_t length, const ui /** * @brief LE Set Periodic Advertising Data command * + * Note: Advertising data is cleared after `gap_set_ext_adv_para()` and + * `gap_set_periodic_adv_para()` on the same advertising set handle. + * * @param adv_handle advertising set handle. * * @param length advertising data length (<= 1650 bytes) @@ -723,6 +864,7 @@ typedef struct { // Supervision timeout for the LE Link, unit is 10ms uint16_t supervision_timeout; // Informative parameter recommending the min/max length of connection event needed for this LE connection + // unit is 625us uint16_t min_ce_len; uint16_t max_ce_len; } conn_para_t; diff --git a/bundles/noos_typical/inc/le_device_db.h b/bundles/noos_typical/inc/le_device_db.h index b81d04f5a..68de61b61 100644 --- a/bundles/noos_typical/inc/le_device_db.h +++ b/bundles/noos_typical/inc/le_device_db.h @@ -16,14 +16,15 @@ typedef struct le_device_memory_db { // Identification uint8_t addr_type; - uint8_t key_size; - uint8_t authenticated; - uint8_t authorized; + uint8_t key_size; + uint8_t authenticated; + uint8_t authorized:1; + uint8_t sm_sc:1; bd_addr_t addr; sm_key_t irk; - // Stored pairing information allows to re-establish an enncrypted connection + // Stored pairing information allows to re-establish an encrypted connection // with a peripheral that doesn't have any persistent memory sm_key_t ltk; uint16_t ediv; @@ -36,7 +37,6 @@ typedef struct le_device_memory_db { // Signed Writes by us sm_key_t local_csrk; uint32_t local_counter; - } le_device_memory_db_t; #pragma pack (pop) diff --git a/bundles/noos_typical/inc/ll_api.h b/bundles/noos_typical/inc/ll_api.h index 24558161d..f84ac1c76 100644 --- a/bundles/noos_typical/inc/ll_api.h +++ b/bundles/noos_typical/inc/ll_api.h @@ -33,6 +33,25 @@ typedef enum ll_config_item_e LL_CFG_FEATURE_SET_MASK, } ll_config_item_t; +typedef struct ll_capabilities +{ + const uint8_t *features; // Link Layer features + uint16_t adv_set_num; // max number of advertising sets + uint16_t conn_num; // max number of connections + uint16_t whitelist_size; // size of whitelists + uint16_t resolving_list_size; // size of resolving list + uint16_t periodic_advertiser_list_size; // size of periodic advertiser list + uint16_t adv_dup_filter_size; // size of items for filtering + // advertising duplication +} ll_capabilities_t; + +/** + * @brief Get Link Layer capabilities. + * + * @param[out] capabilities see `ll_capabilities_t`. + */ +void ll_get_capabilities(ll_capabilities_t *capabilities); + /** **************************************************************************************** * @brief Config LL specific parameters @@ -43,6 +62,26 @@ typedef enum ll_config_item_e */ void ll_config(ll_config_item_t item, uint32_t value); +/** + **************************************************************************************** + * @brief Get states of LL + * + * Note: Parameters can be set to NULL if the relevant states are not needed. + * + * @param[out] adv_states[1] states of all advertising sets + * Bit[n]: advertising set n is enabled + * @param[out] conn_states[1] states of all connections + * Bit[n]: connection n is active + * @param[out] sync_states[1] states of all synchronized periodic adv sets + * Bit[n]: sync_handle n is active + * @param[out] other_states[1] other states: + * Bit[0]: if scanning is ON + * Bit[1]: if initiating is ON + **************************************************************************************** + */ +void ll_get_states(uint32_t *adv_states, uint32_t *conn_states, + uint32_t *sync_states, uint32_t *other_states); + /** **************************************************************************************** * @brief set Tx power range diff --git a/bundles/noos_typical/inc/platform_api.h b/bundles/noos_typical/inc/platform_api.h index bbc633bd3..5783c773e 100644 --- a/bundles/noos_typical/inc/platform_api.h +++ b/bundles/noos_typical/inc/platform_api.h @@ -113,7 +113,7 @@ typedef enum PLATFORM_CB_EVT_LLE_INIT, // when allocation on heap fails (heap out of memory) - // NOTE: param (void *data) is cased from an integer identifying which heap is OOM: + // NOTE: param (void *data) is casted from an integer identifying which heap is OOM: // * 0: FreeRTOS's heap; // * 1: Link Layer's heap; // * 2: Link Layer's task pool. @@ -327,7 +327,7 @@ typedef struct /** **************************************************************************************** - * @brief Get heap status + * @brief Get status of built-in RTOS's heap * * @param[out] status heap status **************************************************************************************** @@ -378,7 +378,7 @@ void platform_switch_app(const uint32_t app_addr); * in power saving mode. * * For ING918: the least FOUR significant bits of `value` are saved; - * For ING916: the least TWO significant bits of `value` are saved. + * For ING916: the least FIVE significant bits of `value` are saved. * * @param[in] value value **************************************************************************************** @@ -468,8 +468,13 @@ typedef enum PLATFORM_CFG_PS_DBG_4, // Debugging parameters for ING916. Default (0) // Bit [0]: `platform_shutdown` uses DEEPER SLEEP (1) or SLEEP (0) PLATFORM_CFG_FAST_DEEP_SLEEP_TIME_REDUCTION, // sleep time reduction (fast deep sleep mode) in us. - // Requirement: < PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION + // Requirement: <= PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION + // When equal to PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION, fast deep sleep mode is not used // Only available for ING916 (default: ~2000us) + PLATFORM_CFG_AUTO_REDUCE_CLOCK_FREQ, // automatic reduce CPU clock frequency in these circumstances: + // * the default IDLE procedure + // * when entering sleep modes + // Only available for ING916 (default: Enabled) } platform_cfg_item_t; typedef enum @@ -608,7 +613,15 @@ uint64_t platform_get_us_time(void); */ void platform_printf(const char *format, ...); -// NOTE: for debug only +/** + **************************************************************************************** + * @brief Set public device address + * + * NOTE: This is for debug only. + * + * @param[in] addr device address in little-endian. + **************************************************************************************** + */ void sysSetPublicDeviceAddr(const unsigned char *addr); // set rf source @@ -775,6 +788,55 @@ void platform_set_abs_timer(f_platform_timer_callback callback, uint32_t abs_tim */ void platform_delete_timer(f_platform_timer_callback callback); +typedef void * platform_us_timer_handle_t; + +/** + **************************************************************************************** + * @brief Callback function of microsecond (us) resolution timer + * + * @param[in] timer_handle handle of this timer + * @param[in] time_us internal timer counter when invoke this callback + * @param[in] param user parameter + * @return (must be NULL) + **************************************************************************************** + */ +typedef void * (* f_platform_us_timer_callback)(platform_us_timer_handle_t timer_handle, + uint64_t time_us, void *param); + +/** + **************************************************************************************** + * @brief Setup a single-shot platform timer with microsecond (us) resolution + * + * Although `abs_time` is in microsecond (us), callback is **not guaranteed** + * to be invoked with such resolution. + * + * This type of timers are much like `platform_set_timer`, except that: + * 1. resolution is higher; + * 2. callback is invoked in the context of an ISR. + * + * @param[in] abs_time when `platform_get_us_timer() == abs_time`, callback is invoked. + * @param[in] callback the callback function + * @param[in] param user parameter + * @return a non-NULL value when succeeded. Otherwise, NULL. + **************************************************************************************** + */ +platform_us_timer_handle_t platform_create_us_timer(uint64_t abs_time, + f_platform_us_timer_callback callback, void *param); + +/** + **************************************************************************************** + * @brief Cancel a platform timer previously created by `platform_create_us_timer` + * + * When a timer not needed any more, use this API to cancel it. + * + * @param[in] timer_handle handle of the timer + * @return 0 if succeeded else non-0 + * Note: non-0 means the callback function of the timer + * is executing. + **************************************************************************************** + */ +int platform_cancel_us_timer(platform_us_timer_handle_t timer_handle); + /** **************************************************************************************** * @brief Install a new RTOS stack for a specific platform task diff --git a/bundles/noos_typical/inc/sm.h b/bundles/noos_typical/inc/sm.h index 6dfc62bab..7e57fb927 100644 --- a/bundles/noos_typical/inc/sm.h +++ b/bundles/noos_typical/inc/sm.h @@ -55,14 +55,21 @@ typedef enum { /** * @brief Security configurations * + * These configurations can updated dynamically. Be careful: dynamically toggle + * `enable` will cause problems when SM is still working on any connection. + * + * After IRK/DHK are derived from `persistent`, `SM_EVENT_IRK_DHK_RESULT` is emitted. + * * @param[in] enable Enable (Bypass) SM (default: Disabled) * When disabled, SM can be enabled per connection by `sm_config_conn`. * @param[in] io_capability Default IO Capabilities * @param[in] request_security Let peripheral request an encrypted connection right after connecting * Not used normally. Bonding is triggered by access to protected attributes in ATT Server * @param[in] persistent persistent data for security & privacy + * @return 0 if ok else non-0. Possible causes for non-0 return value: + * * generation of internal keys(IRK/ERK) are under going. */ -void sm_config(uint8_t enable, +int sm_config(uint8_t enable, io_capability_t io_capability, int request_security, const sm_persistent_t *persistent); @@ -101,18 +108,71 @@ void sm_private_random_address_generation_set_update_period(int period_ms); const uint8_t *sm_private_random_address_generation_get(void); /** + * @brief Registers OOB Data Callback. + * + * The callback should set the oob_data and return 1 if OOB data is available. + * + * Signature of `get_oob_data_callback`: + * @param[in] address_type address type + * @param[in] addr address + * @param[out] oob_data OOB data (type `sm_key_t`) + * @return 1 if OOB data is available, else 0. * - * @brief Registers OOB Data Callback. The callback should set the oob_data and return 1 if OOB data is availble * @param get_oob_data_callback */ -void sm_register_oob_data_callback( int (*get_oob_data_callback)(uint8_t addres_type, bd_addr_t addr, uint8_t * oob_data)); +void sm_register_oob_data_callback( int (*get_oob_data_callback)(uint8_t address_type, bd_addr_t addr, uint8_t * oob_data)); /** + * @brief Registers secure pairing OOB Data Callback. * - * @brief Registers secure pairing OOB Data Callback. The callback should set the peer_confirm & peer_random and return 1 if OOB data is availble - * @param get_oob_data_callback + * The callback should set the peer_confirm & peer_random and return 1 + * if OOB data is available. + * + * Signature of `get_sc_oob_data_callback`: + * @param[in] address_type address type + * @param[in] addr address + * @param[out] peer_confirm peer confirm value (type `sm_key_t`) + * @param[out] peer_random peer random value (type `sm_key_t`) + * @return 1 if OOB data is available, else 0. + * + * @param get_sc_oob_data_callback */ -// void sm_register_sc_oob_data_callback( int (*get_sc_oob_data_callback)(uint8_t addres_type, bd_addr_t addr, uint8_t *peer_confirm, uint8_t *peer_random)); +// void sm_register_sc_oob_data_callback(int (*get_sc_oob_data_callback)(uint8_t address_type, bd_addr_t addr, uint8_t *peer_confirm, uint8_t *peer_random)); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief (When secure pairing is used and OOB is selected) Start generate local + * OOB data (_confirm_ and _random_). + * + * After generated, _confirm_ and _random_ are passed to the callback. + * + * Each call of this function will generate a new P256 key pair that will used + * in **all** subsequent pairing attempts. When OOB is used, it is Developers's + * responsibility to refresh key pair properly. If OOB is not used, SM will + * re-generate a new key pair for each pairing attempt. + * + * BLUETOOTH CORE SPECIFICATION Version 5.4 | Vol 3, Part H, Section 2.3.6: + * + * > To protect a device's private key, a device should implement a method to + * > prevent an attacker from retrieving useful information about the device's private + * > key. For this purpose, a device should change its private key after every pairing + * > (successful or failed). Otherwise, it should change its private key whenever S + + * > 3F > 8, where S is the number of successful pairings and F the number of + * > failed attempts since the key was last changed. + * + * App can then pass these information together with device address to peer + * through OOB communication. + * + * Signature of `callback`: + * @param[out] confirm local confirm value (type `sm_key_t`) + * @param[out] random local random value (type `sm_key_t`) + * + * @param callback + * @return 0: started without error + * -1: previous OOB data is not generated yet + */ +// int sm_sc_generate_oob_data(void (*callback)(const uint8_t *confirm, const uint8_t *random)); // WARNING: ^^^ this API is not available in this release @@ -235,14 +295,6 @@ int sm_le_device_key(hci_con_handle_t con_handle); // WARNING: ^^^ this API is not available in this release -/** - * @brief When secure pairing is used and OOB is selected, use this function to prepare OOB data and share to peer. - * @param handle - */ -// int sm_sc_generate_oob_data(void (*callback)(uint8_t *peer_confirm, uint8_t *peer_random)); -// WARNING: ^^^ this API is not available in this release - - /** * * @brief Register a callback for get external LTK (for empty EDIV & Random) diff --git a/bundles/typical/ING9168xx/apis.json b/bundles/typical/ING9168xx/apis.json index 2ade268c4..7a52030a7 100644 --- a/bundles/typical/ING9168xx/apis.json +++ b/bundles/typical/ING9168xx/apis.json @@ -1,347 +1,354 @@ { - "att_dispatch_client_can_send_now": "0x020044b5", - "att_dispatch_client_request_can_send_now_event": "0x020044bb", - "att_dispatch_register_client": "0x020044c1", - "att_dispatch_register_server": "0x020044d5", - "att_dispatch_server_can_send_now": "0x020044e9", - "att_dispatch_server_request_can_send_now_event": "0x020044ef", - "att_emit_general_event": "0x020045a1", - "att_server_can_send_packet_now": "0x02004cd9", - "att_server_deferred_read_response": "0x02004cdd", - "att_server_get_mtu": "0x02004cf5", - "att_server_indicate": "0x02004d6d", - "att_server_init": "0x02004df1", - "att_server_notify": "0x02004e2d", - "att_server_register_packet_handler": "0x02004f45", - "att_server_request_can_send_now_event": "0x02004f51", - "att_set_db": "0x02004f6d", - "att_set_read_callback": "0x02004f81", - "att_set_write_callback": "0x02004f8d", - "bd_addr_cmp": "0x0200515d", - "bd_addr_copy": "0x02005163", - "bd_addr_to_str": "0x0200516d", - "big_endian_read_16": "0x020051a5", - "big_endian_read_32": "0x020051ad", - "big_endian_store_16": "0x020051c1", - "big_endian_store_32": "0x020051cd", - "btstack_config": "0x0200532d", - "btstack_memory_pool_create": "0x0200546b", - "btstack_memory_pool_free": "0x02005495", - "btstack_memory_pool_get": "0x020054f5", - "btstack_push_user_msg": "0x0200555d", - "btstack_push_user_runnable": "0x02005569", - "btstack_reset": "0x02005575", - "char_for_nibble": "0x02005867", - "eTaskConfirmSleepModeStatus": "0x02005c19", - "gap_add_dev_to_periodic_list": "0x02006289", - "gap_add_whitelist": "0x02006299", - "gap_aes_encrypt": "0x020062a5", - "gap_clear_white_lists": "0x020062dd", - "gap_clr_adv_set": "0x020062e9", - "gap_clr_periodic_adv_list": "0x020062f5", - "gap_create_connection_cancel": "0x02006301", - "gap_default_periodic_adv_sync_transfer_param": "0x0200630d", - "gap_disconnect": "0x02006325", - "gap_disconnect_all": "0x02006351", - "gap_ext_create_connection": "0x02006391", - "gap_get_connection_parameter_range": "0x02006469", - "gap_le_read_channel_map": "0x020064a5", - "gap_periodic_adv_create_sync": "0x02006511", - "gap_periodic_adv_create_sync_cancel": "0x02006535", - "gap_periodic_adv_set_info_transfer": "0x02006541", - "gap_periodic_adv_sync_transfer": "0x02006551", - "gap_periodic_adv_sync_transfer_param": "0x02006561", - "gap_periodic_adv_term_sync": "0x0200657d", - "gap_read_antenna_info": "0x02006605", - "gap_read_periodic_adv_list_size": "0x02006611", - "gap_read_phy": "0x0200661d", - "gap_read_remote_used_features": "0x02006629", - "gap_read_remote_version": "0x02006635", - "gap_read_rssi": "0x02006641", - "gap_remove_whitelist": "0x0200664d", - "gap_rmv_adv_set": "0x020066c9", - "gap_rmv_dev_from_periodic_list": "0x020066d5", - "gap_rx_test_v2": "0x020066e5", - "gap_rx_test_v3": "0x020066f5", - "gap_set_adv_set_random_addr": "0x02006741", - "gap_set_callback_for_next_hci": "0x0200677d", - "gap_set_connection_cte_request_enable": "0x0200679d", - "gap_set_connection_cte_response_enable": "0x020067b9", - "gap_set_connection_cte_rx_param": "0x020067c9", - "gap_set_connection_cte_tx_param": "0x0200681d", - "gap_set_connection_parameter_range": "0x02006869", - "gap_set_connectionless_cte_tx_enable": "0x02006881", - "gap_set_connectionless_cte_tx_param": "0x02006891", - "gap_set_connectionless_iq_sampling_enable": "0x020068ed", - "gap_set_data_length": "0x02006949", - "gap_set_def_phy": "0x02006961", - "gap_set_ext_adv_data": "0x02006971", - "gap_set_ext_adv_enable": "0x02006989", - "gap_set_ext_adv_para": "0x020069f9", - "gap_set_ext_scan_enable": "0x02006ac9", - "gap_set_ext_scan_para": "0x02006ae1", - "gap_set_ext_scan_response_data": "0x02006b81", - "gap_set_host_channel_classification": "0x02006b99", - "gap_set_periodic_adv_data": "0x02006ba9", - "gap_set_periodic_adv_enable": "0x02006c19", - "gap_set_periodic_adv_para": "0x02006c29", - "gap_set_periodic_adv_rx_enable": "0x02006c41", - "gap_set_phy": "0x02006c51", - "gap_set_random_device_address": "0x02006c6d", - "gap_start_ccm": "0x02006c9d", - "gap_test_end": "0x02006ce5", - "gap_tx_test_v2": "0x02006cf1", - "gap_tx_test_v4": "0x02006d09", - "gap_update_connection_parameters": "0x02006d2d", - "gap_vendor_tx_continuous_wave": "0x02006d71", - "gatt_client_cancel_write": "0x02007299", - "gatt_client_discover_characteristic_descriptors": "0x020072bf", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x020072ff", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x0200734f", - "gatt_client_discover_characteristics_for_service": "0x0200739f", - "gatt_client_discover_primary_services": "0x020073d5", - "gatt_client_discover_primary_services_by_uuid128": "0x02007407", - "gatt_client_discover_primary_services_by_uuid16": "0x0200744b", - "gatt_client_execute_write": "0x02007489", - "gatt_client_find_included_services_for_service": "0x020074af", - "gatt_client_get_mtu": "0x020074dd", - "gatt_client_is_ready": "0x020075a1", - "gatt_client_listen_for_characteristic_value_updates": "0x020075b7", - "gatt_client_prepare_write": "0x020075d9", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x02007615", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x0200763f", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02007645", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x02007673", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x02007679", - "gatt_client_read_multiple_characteristic_values": "0x020076a7", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x020076d7", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x02007705", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x02007751", - "gatt_client_register_handler": "0x0200779d", - "gatt_client_reliable_write_long_value_of_characteristic": "0x020077a9", - "gatt_client_signed_write_without_response": "0x02007bdd", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x02007ca1", - "gatt_client_write_client_characteristic_configuration": "0x02007cdb", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x02007d2d", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02007d3d", - "gatt_client_write_long_value_of_characteristic": "0x02007d79", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x02007d89", - "gatt_client_write_value_of_characteristic": "0x02007dc5", - "gatt_client_write_value_of_characteristic_without_response": "0x02007dfb", - "hci_add_event_handler": "0x020093f1", - "hci_power_control": "0x02009b99", - "hci_register_acl_packet_handler": "0x02009d4d", - "kv_commit": "0x0200a481", - "kv_get": "0x0200a4dd", - "kv_init": "0x0200a4e9", - "kv_init_backend": "0x0200a569", - "kv_put": "0x0200a57d", - "kv_remove": "0x0200a589", - "kv_remove_all": "0x0200a5bd", - "kv_value_modified": "0x0200a5ed", - "kv_value_modified_of_key": "0x0200a609", - "kv_visit": "0x0200a615", - "l2cap_add_event_handler": "0x0200a6a5", - "l2cap_can_send_packet_now": "0x0200a6b5", - "l2cap_create_le_credit_based_connection_request": "0x0200a879", - "l2cap_credit_based_send": "0x0200a9c1", - "l2cap_credit_based_send_continue": "0x0200a9ed", - "l2cap_disconnect": "0x0200aa69", - "l2cap_get_le_credit_based_connection_credits": "0x0200ac55", - "l2cap_get_peer_mtu_for_local_cid": "0x0200ac71", - "l2cap_init": "0x0200b0b1", - "l2cap_le_send_flow_control_credit": "0x0200b1a7", - "l2cap_max_le_mtu": "0x0200b4b5", - "l2cap_register_packet_handler": "0x0200b5dd", - "l2cap_register_service": "0x0200b5e9", - "l2cap_request_can_send_now_event": "0x0200b6f9", - "l2cap_request_connection_parameter_update": "0x0200b713", - "l2cap_send_echo_request": "0x0200bbf5", - "l2cap_unregister_service": "0x0200bcd5", - "le_device_db_add": "0x0200bd2d", - "le_device_db_find": "0x0200be05", - "le_device_db_from_key": "0x0200be31", - "le_device_db_iter_cur": "0x0200be39", - "le_device_db_iter_cur_key": "0x0200be3d", - "le_device_db_iter_init": "0x0200be41", - "le_device_db_iter_next": "0x0200be49", - "le_device_db_remove_key": "0x0200be6f", - "ll_adjust_conn_peer_tx_power": "0x0200be9d", - "ll_aes_encrypt": "0x0200bec9", - "ll_config": "0x0200bf3d", - "ll_free": "0x0200bf73", - "ll_get_heap_free_size": "0x0200bf7d", - "ll_hint_on_ce_len": "0x0200bf91", - "ll_legacy_adv_set_interval": "0x0200bfc9", - "ll_malloc": "0x0200bfd9", - "ll_register_hci_acl_previewer": "0x0200c0f1", - "ll_scan_set_fixed_channel": "0x0200c155", - "ll_set_adv_access_address": "0x0200c36d", - "ll_set_adv_coded_scheme": "0x0200c379", - "ll_set_conn_acl_report_latency": "0x0200c3b1", - "ll_set_conn_coded_scheme": "0x0200c3e1", - "ll_set_conn_latency": "0x0200c40d", - "ll_set_conn_tx_power": "0x0200c43d", - "ll_set_def_antenna": "0x0200c479", - "ll_set_initiating_coded_scheme": "0x0200c499", - "ll_set_max_conn_number": "0x0200c4a5", - "ll_set_tx_power_range": "0x0200c539", - "nibble_for_char": "0x0201efc9", - "platform_calibrate_rt_clk": "0x0201f073", - "platform_call_on_stack": "0x020021fb", - "platform_config": "0x0201f079", - "platform_delete_timer": "0x0201f1a1", - "platform_enable_irq": "0x0201f1a9", - "platform_get_current_task": "0x0201f1dd", - "platform_get_gen_os_driver": "0x0201f201", - "platform_get_heap_status": "0x0201f209", - "platform_get_link_layer_interf": "0x0201f221", - "platform_get_task_handle": "0x0201f229", - "platform_get_timer_counter": "0x0201f249", - "platform_get_us_time": "0x0201f24d", - "platform_get_version": "0x0201f251", - "platform_hrng": "0x0201f259", - "platform_install_isr_stack": "0x0201f261", - "platform_install_task_stack": "0x0201f26d", - "platform_patch_rf_init_data": "0x0201f2a5", - "platform_printf": "0x0201f2b1", - "platform_raise_assertion": "0x0201f2c5", - "platform_rand": "0x0201f2d9", - "platform_read_info": "0x0201f2dd", - "platform_read_persistent_reg": "0x0201f30d", - "platform_reset": "0x0201f319", - "platform_rt_rc_auto_tune": "0x0201f32d", - "platform_rt_rc_auto_tune2": "0x0201f335", - "platform_rt_rc_tune": "0x0201f39d", - "platform_set_abs_timer": "0x0201f3b9", - "platform_set_evt_callback": "0x0201f3bd", - "platform_set_evt_callback_table": "0x0201f3d1", - "platform_set_irq_callback": "0x0201f3dd", - "platform_set_irq_callback_table": "0x0201f3f9", - "platform_set_rf_clk_source": "0x0201f405", - "platform_set_rf_init_data": "0x0201f411", - "platform_set_rf_power_mapping": "0x0201f41d", - "platform_set_timer": "0x0201f429", - "platform_shutdown": "0x0201f42d", - "platform_switch_app": "0x0201f431", - "platform_trace_raw": "0x0201f449", - "platform_write_persistent_reg": "0x0201f461", - "printf_hexdump": "0x0201f619", - "pvPortMalloc": "0x020200f1", - "pvTaskIncrementMutexHeldCount": "0x020201d9", - "pvTimerGetTimerID": "0x020201f1", - "pxPortInitialiseStack": "0x0202021d", - "reverse_128": "0x02020405", - "reverse_24": "0x0202040b", - "reverse_256": "0x02020411", - "reverse_48": "0x02020417", - "reverse_56": "0x0202041d", - "reverse_64": "0x02020423", - "reverse_bd_addr": "0x02020429", - "reverse_bytes": "0x0202042f", - "sm_add_event_handler": "0x0202078d", - "sm_address_resolution_lookup": "0x020208e5", - "sm_authenticated": "0x02020c61", - "sm_authorization_decline": "0x02020c6f", - "sm_authorization_grant": "0x02020c8f", - "sm_authorization_state": "0x02020caf", - "sm_bonding_decline": "0x02020cc9", - "sm_config": "0x0202111d", - "sm_config_conn": "0x02021135", - "sm_encryption_key_size": "0x020212eb", - "sm_just_works_confirm": "0x02021871", - "sm_le_device_key": "0x02021ba9", - "sm_passkey_input": "0x02021c3f", - "sm_private_random_address_generation_get": "0x02021ff9", - "sm_private_random_address_generation_get_mode": "0x02022001", - "sm_private_random_address_generation_set_mode": "0x0202200d", - "sm_private_random_address_generation_set_update_period": "0x02022035", - "sm_register_external_ltk_callback": "0x02022171", - "sm_register_oob_data_callback": "0x0202217d", - "sm_request_pairing": "0x02022189", - "sm_send_security_request": "0x02022c5f", - "sm_set_accepted_stk_generation_methods": "0x02022c85", - "sm_set_authentication_requirements": "0x02022c91", - "sm_set_encryption_key_size_range": "0x02022c9d", - "sscanf_bd_addr": "0x02022ffd", - "sysSetPublicDeviceAddr": "0x02023529", - "uuid128_to_str": "0x02023d85", - "uuid_add_bluetooth_prefix": "0x02023ddd", - "uuid_has_bluetooth_prefix": "0x02023dfd", - "uxListRemove": "0x02023e19", - "uxQueueMessagesWaiting": "0x02023e41", - "uxQueueMessagesWaitingFromISR": "0x02023e69", - "uxQueueSpacesAvailable": "0x02023e85", - "uxTaskGetStackHighWaterMark": "0x02023eb1", - "uxTaskPriorityGet": "0x02023ed1", - "uxTaskPriorityGetFromISR": "0x02023eed", - "vListInitialise": "0x02023fab", - "vListInitialiseItem": "0x02023fc1", - "vListInsert": "0x02023fc7", - "vListInsertEnd": "0x02023ff7", - "vPortEndScheduler": "0x02024011", - "vPortEnterCritical": "0x0202403d", - "vPortExitCritical": "0x02024081", - "vPortFree": "0x020240b5", - "vPortSuppressTicksAndSleep": "0x02024159", - "vPortValidateInterruptPriority": "0x02024281", - "vQueueDelete": "0x020242dd", - "vQueueWaitForMessageRestricted": "0x02024309", - "vTaskDelay": "0x0202434d", - "vTaskInternalSetTimeOutState": "0x02024399", - "vTaskMissedYield": "0x020243a9", - "vTaskPlaceOnEventList": "0x020243b5", - "vTaskPlaceOnEventListRestricted": "0x020243ed", - "vTaskPriorityDisinheritAfterTimeout": "0x0202442d", - "vTaskPrioritySet": "0x020244d9", - "vTaskResume": "0x020245a1", - "vTaskStartScheduler": "0x02024625", - "vTaskStepTick": "0x020246b5", - "vTaskSuspend": "0x020246e5", - "vTaskSuspendAll": "0x020247a1", - "vTaskSwitchContext": "0x020247b1", - "xPortStartScheduler": "0x02024861", - "xQueueAddToSet": "0x02024965", - "xQueueCreateCountingSemaphore": "0x02024989", - "xQueueCreateCountingSemaphoreStatic": "0x020249c5", - "xQueueCreateMutex": "0x02024a09", - "xQueueCreateMutexStatic": "0x02024a1f", - "xQueueCreateSet": "0x02024a39", - "xQueueGenericCreate": "0x02024a41", - "xQueueGenericCreateStatic": "0x02024a8d", - "xQueueGenericReset": "0x02024af5", - "xQueueGenericSend": "0x02024b81", - "xQueueGenericSendFromISR": "0x02024ced", - "xQueueGiveFromISR": "0x02024dad", - "xQueueGiveMutexRecursive": "0x02024e51", - "xQueueIsQueueEmptyFromISR": "0x02024e91", - "xQueueIsQueueFullFromISR": "0x02024eb5", - "xQueuePeek": "0x02024edd", - "xQueuePeekFromISR": "0x02025005", - "xQueueReceive": "0x02025071", - "xQueueReceiveFromISR": "0x0202519d", - "xQueueRemoveFromSet": "0x02025231", - "xQueueSelectFromSet": "0x02025253", - "xQueueSelectFromSetFromISR": "0x02025265", - "xQueueSemaphoreTake": "0x02025279", - "xQueueTakeMutexRecursive": "0x020253e5", - "xTaskCheckForTimeOut": "0x02025429", - "xTaskCreate": "0x02025499", - "xTaskCreateStatic": "0x020254f5", - "xTaskGetCurrentTaskHandle": "0x02025565", - "xTaskGetSchedulerState": "0x02025571", - "xTaskGetTickCount": "0x0202558d", - "xTaskGetTickCountFromISR": "0x02025599", - "xTaskIncrementTick": "0x020255a9", - "xTaskPriorityDisinherit": "0x02025675", - "xTaskPriorityInherit": "0x02025709", - "xTaskRemoveFromEventList": "0x0202579d", - "xTaskResumeAll": "0x0202581d", - "xTaskResumeFromISR": "0x020258e5", - "xTimerCreate": "0x02025971", - "xTimerCreateStatic": "0x020259a5", - "xTimerCreateTimerTask": "0x020259dd", - "xTimerGenericCommand": "0x02025a49", - "xTimerGetExpiryTime": "0x02025ab9", - "xTimerGetTimerDaemonTaskHandle": "0x02025ad9" + "att_dispatch_client_can_send_now": "0x020053cd", + "att_dispatch_client_request_can_send_now_event": "0x020053d3", + "att_dispatch_register_client": "0x020053d9", + "att_dispatch_register_server": "0x020053ed", + "att_dispatch_server_can_send_now": "0x02005401", + "att_dispatch_server_request_can_send_now_event": "0x02005407", + "att_emit_general_event": "0x020054b9", + "att_server_can_send_packet_now": "0x02005bf5", + "att_server_deferred_read_response": "0x02005bf9", + "att_server_get_mtu": "0x02005c11", + "att_server_indicate": "0x02005c89", + "att_server_init": "0x02005d0d", + "att_server_notify": "0x02005d49", + "att_server_register_packet_handler": "0x02005e61", + "att_server_request_can_send_now_event": "0x02005e6d", + "att_set_db": "0x02005e89", + "att_set_read_callback": "0x02005e9d", + "att_set_write_callback": "0x02005ea9", + "bd_addr_cmp": "0x02006079", + "bd_addr_copy": "0x0200607f", + "bd_addr_to_str": "0x02006089", + "big_endian_read_16": "0x020060c1", + "big_endian_read_32": "0x020060c9", + "big_endian_store_16": "0x020060dd", + "big_endian_store_32": "0x020060e9", + "btstack_config": "0x02006249", + "btstack_get_capabilities": "0x02006255", + "btstack_memory_pool_create": "0x0200639f", + "btstack_memory_pool_free": "0x020063c9", + "btstack_memory_pool_get": "0x02006429", + "btstack_push_user_msg": "0x02006491", + "btstack_push_user_runnable": "0x0200649d", + "btstack_reset": "0x020064a9", + "char_for_nibble": "0x0200679b", + "eTaskConfirmSleepModeStatus": "0x02006b4d", + "gap_add_dev_to_periodic_list": "0x020071a9", + "gap_add_whitelist": "0x020071b9", + "gap_aes_encrypt": "0x020071c5", + "gap_clear_white_lists": "0x020071fd", + "gap_clr_adv_set": "0x02007209", + "gap_clr_periodic_adv_list": "0x02007215", + "gap_create_connection_cancel": "0x02007221", + "gap_default_periodic_adv_sync_transfer_param": "0x0200722d", + "gap_disconnect": "0x02007245", + "gap_disconnect2": "0x0200724d", + "gap_disconnect_all": "0x02007279", + "gap_ext_create_connection": "0x020072b9", + "gap_get_connection_parameter_range": "0x02007391", + "gap_le_read_channel_map": "0x020073c9", + "gap_periodic_adv_create_sync": "0x02007429", + "gap_periodic_adv_create_sync_cancel": "0x0200744d", + "gap_periodic_adv_set_info_transfer": "0x02007459", + "gap_periodic_adv_sync_transfer": "0x02007469", + "gap_periodic_adv_sync_transfer_param": "0x02007479", + "gap_periodic_adv_term_sync": "0x02007495", + "gap_read_antenna_info": "0x0200751d", + "gap_read_periodic_adv_list_size": "0x02007529", + "gap_read_phy": "0x02007535", + "gap_read_remote_used_features": "0x02007541", + "gap_read_remote_version": "0x0200754d", + "gap_read_rssi": "0x02007559", + "gap_read_white_lists_size": "0x02007565", + "gap_remove_whitelist": "0x02007571", + "gap_rmv_adv_set": "0x020075ed", + "gap_rmv_dev_from_periodic_list": "0x020075f9", + "gap_rx_test_v2": "0x02007609", + "gap_rx_test_v3": "0x02007619", + "gap_set_adv_set_random_addr": "0x02007665", + "gap_set_callback_for_next_hci": "0x02007689", + "gap_set_connection_cte_request_enable": "0x020076a9", + "gap_set_connection_cte_response_enable": "0x020076c5", + "gap_set_connection_cte_rx_param": "0x020076d5", + "gap_set_connection_cte_tx_param": "0x02007729", + "gap_set_connection_parameter_range": "0x02007775", + "gap_set_connectionless_cte_tx_enable": "0x0200778d", + "gap_set_connectionless_cte_tx_param": "0x0200779d", + "gap_set_connectionless_iq_sampling_enable": "0x020077f9", + "gap_set_data_length": "0x02007855", + "gap_set_def_phy": "0x0200786d", + "gap_set_ext_adv_data": "0x0200787d", + "gap_set_ext_adv_enable": "0x02007895", + "gap_set_ext_adv_para": "0x02007905", + "gap_set_ext_scan_enable": "0x020079c5", + "gap_set_ext_scan_para": "0x020079dd", + "gap_set_ext_scan_response_data": "0x02007a7d", + "gap_set_host_channel_classification": "0x02007a95", + "gap_set_periodic_adv_data": "0x02007aa5", + "gap_set_periodic_adv_enable": "0x02007b15", + "gap_set_periodic_adv_para": "0x02007b25", + "gap_set_periodic_adv_rx_enable": "0x02007b3d", + "gap_set_phy": "0x02007b4d", + "gap_set_random_device_address": "0x02007b69", + "gap_start_ccm": "0x02007b85", + "gap_test_end": "0x02007bcd", + "gap_tx_test_v2": "0x02007bd9", + "gap_tx_test_v4": "0x02007bf1", + "gap_update_connection_parameters": "0x02007c15", + "gap_vendor_tx_continuous_wave": "0x02007c59", + "gatt_client_cancel_write": "0x02008181", + "gatt_client_discover_characteristic_descriptors": "0x020081a7", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x020081e7", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x02008237", + "gatt_client_discover_characteristics_for_service": "0x02008287", + "gatt_client_discover_primary_services": "0x020082bd", + "gatt_client_discover_primary_services_by_uuid128": "0x020082ef", + "gatt_client_discover_primary_services_by_uuid16": "0x02008333", + "gatt_client_execute_write": "0x02008371", + "gatt_client_find_included_services_for_service": "0x02008397", + "gatt_client_get_mtu": "0x020083c5", + "gatt_client_is_ready": "0x02008491", + "gatt_client_listen_for_characteristic_value_updates": "0x020084a7", + "gatt_client_prepare_write": "0x020084c9", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x02008505", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x0200852f", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02008535", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x02008563", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x02008569", + "gatt_client_read_multiple_characteristic_values": "0x02008597", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x020085c7", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x020085f5", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x02008641", + "gatt_client_register_handler": "0x0200868d", + "gatt_client_reliable_write_long_value_of_characteristic": "0x02008699", + "gatt_client_signed_write_without_response": "0x02008acd", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x02008b91", + "gatt_client_write_client_characteristic_configuration": "0x02008bcb", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x02008c1d", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x02008c2d", + "gatt_client_write_long_value_of_characteristic": "0x02008c69", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x02008c79", + "gatt_client_write_value_of_characteristic": "0x02008cb5", + "gatt_client_write_value_of_characteristic_without_response": "0x02008ceb", + "hci_add_event_handler": "0x0200a2d9", + "hci_power_control": "0x0200aa7d", + "hci_register_acl_packet_handler": "0x0200ac31", + "kv_commit": "0x0200b355", + "kv_get": "0x0200b3b1", + "kv_init": "0x0200b3bd", + "kv_init_backend": "0x0200b43d", + "kv_put": "0x0200b451", + "kv_remove": "0x0200b45d", + "kv_remove_all": "0x0200b491", + "kv_value_modified": "0x0200b4c1", + "kv_value_modified_of_key": "0x0200b4dd", + "kv_visit": "0x0200b4e9", + "l2cap_add_event_handler": "0x0200b579", + "l2cap_can_send_packet_now": "0x0200b589", + "l2cap_create_le_credit_based_connection_request": "0x0200b74d", + "l2cap_credit_based_send": "0x0200b895", + "l2cap_credit_based_send_continue": "0x0200b8c1", + "l2cap_disconnect": "0x0200b93d", + "l2cap_get_le_credit_based_connection_credits": "0x0200bb29", + "l2cap_get_peer_mtu_for_local_cid": "0x0200bb45", + "l2cap_init": "0x0200bf85", + "l2cap_le_send_flow_control_credit": "0x0200c07b", + "l2cap_max_le_mtu": "0x0200c389", + "l2cap_register_packet_handler": "0x0200c4b1", + "l2cap_register_service": "0x0200c4bd", + "l2cap_request_can_send_now_event": "0x0200c5cd", + "l2cap_request_connection_parameter_update": "0x0200c5e7", + "l2cap_send_echo_request": "0x0200cac9", + "l2cap_unregister_service": "0x0200cba9", + "le_device_db_add": "0x0200cc01", + "le_device_db_find": "0x0200ccd9", + "le_device_db_from_key": "0x0200cd05", + "le_device_db_iter_cur": "0x0200cd0d", + "le_device_db_iter_cur_key": "0x0200cd11", + "le_device_db_iter_init": "0x0200cd15", + "le_device_db_iter_next": "0x0200cd1d", + "le_device_db_remove_key": "0x0200cd43", + "ll_adjust_conn_peer_tx_power": "0x0200cd71", + "ll_aes_encrypt": "0x0200cd9d", + "ll_config": "0x0200ce11", + "ll_free": "0x0200ce47", + "ll_get_capabilities": "0x0200ce51", + "ll_get_heap_free_size": "0x0200ce6d", + "ll_get_states": "0x0200ce7d", + "ll_hint_on_ce_len": "0x0200cf39", + "ll_legacy_adv_set_interval": "0x0200cf71", + "ll_malloc": "0x0200cf81", + "ll_register_hci_acl_previewer": "0x0200d099", + "ll_scan_set_fixed_channel": "0x0200d0fd", + "ll_set_adv_access_address": "0x0200d315", + "ll_set_adv_coded_scheme": "0x0200d321", + "ll_set_conn_acl_report_latency": "0x0200d359", + "ll_set_conn_coded_scheme": "0x0200d389", + "ll_set_conn_latency": "0x0200d3b5", + "ll_set_conn_tx_power": "0x0200d3e5", + "ll_set_def_antenna": "0x0200d421", + "ll_set_initiating_coded_scheme": "0x0200d441", + "ll_set_max_conn_number": "0x0200d44d", + "ll_set_tx_power_range": "0x0200d4e1", + "nibble_for_char": "0x0201ffad", + "platform_calibrate_rt_clk": "0x02020057", + "platform_call_on_stack": "0x020030fb", + "platform_cancel_us_timer": "0x0202005b", + "platform_config": "0x02020071", + "platform_create_us_timer": "0x020201a5", + "platform_delete_timer": "0x020201b9", + "platform_enable_irq": "0x020201c1", + "platform_get_current_task": "0x020201f5", + "platform_get_gen_os_driver": "0x02020219", + "platform_get_heap_status": "0x02020221", + "platform_get_link_layer_interf": "0x02020239", + "platform_get_task_handle": "0x02020241", + "platform_get_timer_counter": "0x02020261", + "platform_get_us_time": "0x02020265", + "platform_get_version": "0x02020269", + "platform_hrng": "0x02020285", + "platform_install_isr_stack": "0x0202028d", + "platform_install_task_stack": "0x02020299", + "platform_patch_rf_init_data": "0x020202d1", + "platform_printf": "0x020202dd", + "platform_raise_assertion": "0x020202f1", + "platform_rand": "0x02020305", + "platform_read_info": "0x02020309", + "platform_read_persistent_reg": "0x02020339", + "platform_reset": "0x02020359", + "platform_rt_rc_auto_tune": "0x0202036d", + "platform_rt_rc_auto_tune2": "0x02020375", + "platform_rt_rc_tune": "0x020203d5", + "platform_set_abs_timer": "0x02020401", + "platform_set_evt_callback": "0x02020405", + "platform_set_evt_callback_table": "0x02020419", + "platform_set_irq_callback": "0x02020425", + "platform_set_irq_callback_table": "0x02020441", + "platform_set_rf_clk_source": "0x0202044d", + "platform_set_rf_init_data": "0x02020459", + "platform_set_rf_power_mapping": "0x02020465", + "platform_set_timer": "0x02020471", + "platform_shutdown": "0x02020475", + "platform_switch_app": "0x02020479", + "platform_trace_raw": "0x02020491", + "platform_write_persistent_reg": "0x020204a9", + "printf_hexdump": "0x02020681", + "pvPortMalloc": "0x02021159", + "pvTaskIncrementMutexHeldCount": "0x02021241", + "pvTimerGetTimerID": "0x02021259", + "pxPortInitialiseStack": "0x02021285", + "reverse_128": "0x0202146d", + "reverse_24": "0x02021473", + "reverse_256": "0x02021479", + "reverse_48": "0x0202147f", + "reverse_56": "0x02021485", + "reverse_64": "0x0202148b", + "reverse_bd_addr": "0x02021491", + "reverse_bytes": "0x02021497", + "sm_add_event_handler": "0x020217f5", + "sm_address_resolution_lookup": "0x0202194d", + "sm_authenticated": "0x02021cf5", + "sm_authorization_decline": "0x02021d03", + "sm_authorization_grant": "0x02021d23", + "sm_authorization_state": "0x02021d43", + "sm_bonding_decline": "0x02021d5d", + "sm_config": "0x020221b1", + "sm_config_conn": "0x020221e5", + "sm_encryption_key_size": "0x0202239f", + "sm_just_works_confirm": "0x02022925", + "sm_le_device_key": "0x02022c65", + "sm_passkey_input": "0x02022cfb", + "sm_private_random_address_generation_get": "0x020230bd", + "sm_private_random_address_generation_get_mode": "0x020230c5", + "sm_private_random_address_generation_set_mode": "0x020230d1", + "sm_private_random_address_generation_set_update_period": "0x020230f9", + "sm_register_external_ltk_callback": "0x02023235", + "sm_register_oob_data_callback": "0x02023241", + "sm_request_pairing": "0x0202324d", + "sm_send_security_request": "0x02023d2b", + "sm_set_accepted_stk_generation_methods": "0x02023d51", + "sm_set_authentication_requirements": "0x02023d5d", + "sm_set_encryption_key_size_range": "0x02023d6d", + "sscanf_bd_addr": "0x020240bd", + "sysSetPublicDeviceAddr": "0x02024619", + "uuid128_to_str": "0x02024e89", + "uuid_add_bluetooth_prefix": "0x02024ee1", + "uuid_has_bluetooth_prefix": "0x02024f01", + "uxListRemove": "0x02024f1d", + "uxQueueMessagesWaiting": "0x02024f45", + "uxQueueMessagesWaitingFromISR": "0x02024f6d", + "uxQueueSpacesAvailable": "0x02024f89", + "uxTaskGetStackHighWaterMark": "0x02024fb5", + "uxTaskPriorityGet": "0x02024fd5", + "uxTaskPriorityGetFromISR": "0x02024ff1", + "vListInitialise": "0x020250af", + "vListInitialiseItem": "0x020250c5", + "vListInsert": "0x020250cb", + "vListInsertEnd": "0x020250fb", + "vPortEndScheduler": "0x02025115", + "vPortEnterCritical": "0x02025141", + "vPortExitCritical": "0x02025185", + "vPortFree": "0x020251b9", + "vPortSuppressTicksAndSleep": "0x0202525d", + "vPortValidateInterruptPriority": "0x02025385", + "vQueueDelete": "0x020253e1", + "vQueueWaitForMessageRestricted": "0x0202540d", + "vTaskDelay": "0x02025451", + "vTaskInternalSetTimeOutState": "0x0202549d", + "vTaskMissedYield": "0x020254ad", + "vTaskPlaceOnEventList": "0x020254b9", + "vTaskPlaceOnEventListRestricted": "0x020254f1", + "vTaskPriorityDisinheritAfterTimeout": "0x02025531", + "vTaskPrioritySet": "0x020255dd", + "vTaskResume": "0x020256a5", + "vTaskStartScheduler": "0x02025729", + "vTaskStepTick": "0x020257b9", + "vTaskSuspend": "0x020257e9", + "vTaskSuspendAll": "0x020258a5", + "vTaskSwitchContext": "0x020258b5", + "xPortStartScheduler": "0x0202595d", + "xQueueAddToSet": "0x02025a61", + "xQueueCreateCountingSemaphore": "0x02025a85", + "xQueueCreateCountingSemaphoreStatic": "0x02025ac1", + "xQueueCreateMutex": "0x02025b05", + "xQueueCreateMutexStatic": "0x02025b1b", + "xQueueCreateSet": "0x02025b35", + "xQueueGenericCreate": "0x02025b3d", + "xQueueGenericCreateStatic": "0x02025b89", + "xQueueGenericReset": "0x02025bf1", + "xQueueGenericSend": "0x02025c7d", + "xQueueGenericSendFromISR": "0x02025de9", + "xQueueGiveFromISR": "0x02025ea9", + "xQueueGiveMutexRecursive": "0x02025f4d", + "xQueueIsQueueEmptyFromISR": "0x02025f8d", + "xQueueIsQueueFullFromISR": "0x02025fb1", + "xQueuePeek": "0x02025fd9", + "xQueuePeekFromISR": "0x02026101", + "xQueueReceive": "0x0202616d", + "xQueueReceiveFromISR": "0x02026299", + "xQueueRemoveFromSet": "0x0202632d", + "xQueueSelectFromSet": "0x0202634f", + "xQueueSelectFromSetFromISR": "0x02026361", + "xQueueSemaphoreTake": "0x02026375", + "xQueueTakeMutexRecursive": "0x020264e1", + "xTaskCheckForTimeOut": "0x02026525", + "xTaskCreate": "0x02026595", + "xTaskCreateStatic": "0x020265f1", + "xTaskGetCurrentTaskHandle": "0x02026661", + "xTaskGetSchedulerState": "0x0202666d", + "xTaskGetTickCount": "0x02026689", + "xTaskGetTickCountFromISR": "0x02026695", + "xTaskIncrementTick": "0x020266a5", + "xTaskPriorityDisinherit": "0x02026771", + "xTaskPriorityInherit": "0x02026805", + "xTaskRemoveFromEventList": "0x02026899", + "xTaskResumeAll": "0x02026919", + "xTaskResumeFromISR": "0x020269e1", + "xTimerCreate": "0x02026a6d", + "xTimerCreateStatic": "0x02026aa1", + "xTimerCreateTimerTask": "0x02026ad9", + "xTimerGenericCommand": "0x02026b45", + "xTimerGetExpiryTime": "0x02026bb5", + "xTimerGetTimerDaemonTaskHandle": "0x02026bd5" } \ No newline at end of file diff --git a/bundles/typical/ING9168xx/meta.json b/bundles/typical/ING9168xx/meta.json index 43f1158a4..11167e213 100644 --- a/bundles/typical/ING9168xx/meta.json +++ b/bundles/typical/ING9168xx/meta.json @@ -1,18 +1,24 @@ { "app": { - "base": 33718272 + "base": 33722368 }, "ram": { "base": 536870912, - "size": 21588 + "size": 21532 }, "rom": { "base": 33562624, - "size": 155316 + "size": 159684 + }, + "var": { + "link_layer_features": { + "addr": 33714196, + "value": "bf79ff07fe000000" + } }, "version": [ 2, 3, - 1 + 18 ] } \ No newline at end of file diff --git a/bundles/typical/ING9168xx/platform.bin b/bundles/typical/ING9168xx/platform.bin index fe74257ed..08dc93234 100644 Binary files a/bundles/typical/ING9168xx/platform.bin and b/bundles/typical/ING9168xx/platform.bin differ diff --git a/bundles/typical/ING9187xx/apis.json b/bundles/typical/ING9187xx/apis.json index 40e2eaa2a..354d43f62 100644 --- a/bundles/typical/ING9187xx/apis.json +++ b/bundles/typical/ING9187xx/apis.json @@ -6,327 +6,334 @@ "att_dispatch_server_can_send_now": "0x000057cd", "att_dispatch_server_request_can_send_now_event": "0x000057d3", "att_emit_general_event": "0x00005885", - "att_server_can_send_packet_now": "0x00005fb5", - "att_server_deferred_read_response": "0x00005fb9", - "att_server_get_mtu": "0x00005fd1", - "att_server_indicate": "0x00006049", - "att_server_init": "0x000060cd", - "att_server_notify": "0x00006109", - "att_server_register_packet_handler": "0x00006221", - "att_server_request_can_send_now_event": "0x0000622d", - "att_set_db": "0x00006249", - "att_set_read_callback": "0x0000625d", - "att_set_write_callback": "0x00006269", - "bd_addr_cmp": "0x000063d9", - "bd_addr_copy": "0x000063df", - "bd_addr_to_str": "0x000063e9", - "big_endian_read_16": "0x00006421", - "big_endian_read_32": "0x00006429", - "big_endian_store_16": "0x0000643d", - "big_endian_store_32": "0x00006449", - "btstack_config": "0x0000659d", - "btstack_memory_pool_create": "0x000066db", - "btstack_memory_pool_free": "0x00006705", - "btstack_memory_pool_get": "0x00006765", - "btstack_push_user_msg": "0x000067cd", - "btstack_push_user_runnable": "0x000067d9", - "btstack_reset": "0x000067e5", - "char_for_nibble": "0x00006ac1", - "eTaskConfirmSleepModeStatus": "0x00006da5", - "gap_add_dev_to_periodic_list": "0x000073a1", - "gap_add_whitelist": "0x000073b1", - "gap_aes_encrypt": "0x000073bd", - "gap_clear_white_lists": "0x000073f5", - "gap_clr_adv_set": "0x00007401", - "gap_clr_periodic_adv_list": "0x0000740d", - "gap_create_connection_cancel": "0x00007419", - "gap_disconnect": "0x00007425", - "gap_disconnect_all": "0x00007451", - "gap_ext_create_connection": "0x00007491", - "gap_get_connection_parameter_range": "0x00007569", - "gap_le_read_channel_map": "0x000075a5", - "gap_periodic_adv_create_sync": "0x00007611", - "gap_periodic_adv_create_sync_cancel": "0x00007635", - "gap_periodic_adv_term_sync": "0x00007641", - "gap_read_periodic_adv_list_size": "0x000076c9", - "gap_read_phy": "0x000076d5", - "gap_read_remote_used_features": "0x000076e1", - "gap_read_remote_version": "0x000076ed", - "gap_read_rssi": "0x000076f9", - "gap_remove_whitelist": "0x00007705", - "gap_rmv_adv_set": "0x00007781", - "gap_rmv_dev_from_periodic_list": "0x0000778d", - "gap_rx_test_v2": "0x0000779d", - "gap_set_adv_set_random_addr": "0x000077d5", - "gap_set_callback_for_next_hci": "0x00007811", - "gap_set_connection_parameter_range": "0x00007831", - "gap_set_data_length": "0x00007849", - "gap_set_def_phy": "0x00007861", - "gap_set_ext_adv_data": "0x00007871", - "gap_set_ext_adv_enable": "0x00007889", - "gap_set_ext_adv_para": "0x000078f9", - "gap_set_ext_scan_enable": "0x000079d1", - "gap_set_ext_scan_para": "0x000079e9", - "gap_set_ext_scan_response_data": "0x00007a89", - "gap_set_host_channel_classification": "0x00007aa1", - "gap_set_periodic_adv_data": "0x00007ab1", - "gap_set_periodic_adv_enable": "0x00007b21", - "gap_set_periodic_adv_para": "0x00007b31", - "gap_set_phy": "0x00007b49", - "gap_set_random_device_address": "0x00007b65", - "gap_start_ccm": "0x00007b95", - "gap_test_end": "0x00007bdd", - "gap_tx_test_v2": "0x00007be9", - "gap_tx_test_v4": "0x00007c01", - "gap_update_connection_parameters": "0x00007c25", - "gap_vendor_tx_continuous_wave": "0x00007c69", - "gatt_client_cancel_write": "0x00008191", - "gatt_client_discover_characteristic_descriptors": "0x000081b7", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x000081f7", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x00008247", - "gatt_client_discover_characteristics_for_service": "0x00008297", - "gatt_client_discover_primary_services": "0x000082cd", - "gatt_client_discover_primary_services_by_uuid128": "0x000082ff", - "gatt_client_discover_primary_services_by_uuid16": "0x00008343", - "gatt_client_execute_write": "0x0000837f", - "gatt_client_find_included_services_for_service": "0x000083a5", - "gatt_client_get_mtu": "0x000083d3", - "gatt_client_is_ready": "0x00008475", - "gatt_client_listen_for_characteristic_value_updates": "0x0000848b", - "gatt_client_prepare_write": "0x000084ad", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x000084e9", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x00008513", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008519", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x00008547", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x0000854d", - "gatt_client_read_multiple_characteristic_values": "0x0000857b", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x000085ab", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x000085d9", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x00008625", - "gatt_client_register_handler": "0x00008671", - "gatt_client_reliable_write_long_value_of_characteristic": "0x0000867d", - "gatt_client_signed_write_without_response": "0x00008aad", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008b71", - "gatt_client_write_client_characteristic_configuration": "0x00008bab", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008bfd", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008c0d", - "gatt_client_write_long_value_of_characteristic": "0x00008c49", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008c59", - "gatt_client_write_value_of_characteristic": "0x00008c95", - "gatt_client_write_value_of_characteristic_without_response": "0x00008ccb", - "hci_add_event_handler": "0x0000a1f1", - "hci_power_control": "0x0000a98d", - "hci_register_acl_packet_handler": "0x0000ab41", - "kv_commit": "0x0000b2b5", - "kv_get": "0x0000b311", - "kv_init": "0x0000b31d", - "kv_init_backend": "0x0000b39d", - "kv_put": "0x0000b3b1", - "kv_remove": "0x0000b3bd", - "kv_remove_all": "0x0000b3f1", - "kv_value_modified": "0x0000b421", - "kv_value_modified_of_key": "0x0000b43d", - "kv_visit": "0x0000b449", - "l2cap_add_event_handler": "0x0000b4d9", - "l2cap_can_send_packet_now": "0x0000b4e9", - "l2cap_create_le_credit_based_connection_request": "0x0000b6a5", - "l2cap_credit_based_send": "0x0000b7e9", - "l2cap_credit_based_send_continue": "0x0000b815", - "l2cap_disconnect": "0x0000b891", - "l2cap_get_le_credit_based_connection_credits": "0x0000bae1", - "l2cap_get_peer_mtu_for_local_cid": "0x0000bafd", - "l2cap_init": "0x0000bed1", - "l2cap_le_send_flow_control_credit": "0x0000bfc7", - "l2cap_max_le_mtu": "0x0000c2d1", - "l2cap_register_packet_handler": "0x0000c3f9", - "l2cap_register_service": "0x0000c405", - "l2cap_request_can_send_now_event": "0x0000c515", - "l2cap_request_connection_parameter_update": "0x0000c52f", - "l2cap_send_echo_request": "0x0000ca09", - "l2cap_unregister_service": "0x0000cac9", - "le_device_db_add": "0x0000cb21", - "le_device_db_find": "0x0000cbf9", - "le_device_db_from_key": "0x0000cc25", - "le_device_db_iter_cur": "0x0000cc2d", - "le_device_db_iter_cur_key": "0x0000cc31", - "le_device_db_iter_init": "0x0000cc35", - "le_device_db_iter_next": "0x0000cc3d", - "le_device_db_remove_key": "0x0000cc63", - "ll_aes_encrypt": "0x0000cc91", - "ll_config": "0x0000cd0d", - "ll_free": "0x0000cd43", - "ll_get_heap_free_size": "0x0000cd4d", - "ll_hint_on_ce_len": "0x0000cd61", - "ll_legacy_adv_set_interval": "0x0000cd99", - "ll_malloc": "0x0000cda9", - "ll_query_timing_info": "0x0000cee1", - "ll_register_hci_acl_previewer": "0x0000cf2d", - "ll_scan_set_fixed_channel": "0x0000cf91", - "ll_set_adv_access_address": "0x0000d1a9", - "ll_set_adv_coded_scheme": "0x0000d1b5", - "ll_set_conn_acl_report_latency": "0x0000d1e5", - "ll_set_conn_coded_scheme": "0x0000d215", - "ll_set_conn_latency": "0x0000d241", - "ll_set_conn_tx_power": "0x0000d271", - "ll_set_def_antenna": "0x0000d2b9", - "ll_set_initiating_coded_scheme": "0x0000d2d5", - "ll_set_max_conn_number": "0x0000d2e1", - "nibble_for_char": "0x0001d499", - "platform_calibrate_rt_clk": "0x0001d545", + "att_server_can_send_packet_now": "0x00005fb9", + "att_server_deferred_read_response": "0x00005fbd", + "att_server_get_mtu": "0x00005fd5", + "att_server_indicate": "0x0000604d", + "att_server_init": "0x000060d1", + "att_server_notify": "0x0000610d", + "att_server_register_packet_handler": "0x00006225", + "att_server_request_can_send_now_event": "0x00006231", + "att_set_db": "0x0000624d", + "att_set_read_callback": "0x00006261", + "att_set_write_callback": "0x0000626d", + "bd_addr_cmp": "0x000063dd", + "bd_addr_copy": "0x000063e3", + "bd_addr_to_str": "0x000063ed", + "big_endian_read_16": "0x00006425", + "big_endian_read_32": "0x0000642d", + "big_endian_store_16": "0x00006441", + "big_endian_store_32": "0x0000644d", + "btstack_config": "0x000065a1", + "btstack_get_capabilities": "0x000065ad", + "btstack_memory_pool_create": "0x000066f5", + "btstack_memory_pool_free": "0x0000671d", + "btstack_memory_pool_get": "0x0000677d", + "btstack_push_user_msg": "0x000067e5", + "btstack_push_user_runnable": "0x000067f1", + "btstack_reset": "0x000067fd", + "char_for_nibble": "0x00006ad9", + "eTaskConfirmSleepModeStatus": "0x00006dbd", + "gap_add_dev_to_periodic_list": "0x000073a5", + "gap_add_whitelist": "0x000073b5", + "gap_aes_encrypt": "0x000073c1", + "gap_clear_white_lists": "0x000073f9", + "gap_clr_adv_set": "0x00007405", + "gap_clr_periodic_adv_list": "0x00007411", + "gap_create_connection_cancel": "0x0000741d", + "gap_disconnect": "0x00007429", + "gap_disconnect2": "0x00007431", + "gap_disconnect_all": "0x0000745d", + "gap_ext_create_connection": "0x0000749d", + "gap_get_connection_parameter_range": "0x00007575", + "gap_le_read_channel_map": "0x000075ad", + "gap_periodic_adv_create_sync": "0x0000760d", + "gap_periodic_adv_create_sync_cancel": "0x00007631", + "gap_periodic_adv_term_sync": "0x0000763d", + "gap_read_periodic_adv_list_size": "0x000076c5", + "gap_read_phy": "0x000076d1", + "gap_read_remote_used_features": "0x000076dd", + "gap_read_remote_version": "0x000076e9", + "gap_read_rssi": "0x000076f5", + "gap_read_white_lists_size": "0x00007701", + "gap_remove_whitelist": "0x0000770d", + "gap_rmv_adv_set": "0x00007789", + "gap_rmv_dev_from_periodic_list": "0x00007795", + "gap_rx_test_v2": "0x000077a5", + "gap_set_adv_set_random_addr": "0x000077dd", + "gap_set_callback_for_next_hci": "0x00007801", + "gap_set_connection_parameter_range": "0x00007821", + "gap_set_data_length": "0x00007839", + "gap_set_def_phy": "0x00007851", + "gap_set_ext_adv_data": "0x00007861", + "gap_set_ext_adv_enable": "0x00007879", + "gap_set_ext_adv_para": "0x000078e9", + "gap_set_ext_scan_enable": "0x000079b1", + "gap_set_ext_scan_para": "0x000079c9", + "gap_set_ext_scan_response_data": "0x00007a69", + "gap_set_host_channel_classification": "0x00007a81", + "gap_set_periodic_adv_data": "0x00007a91", + "gap_set_periodic_adv_enable": "0x00007b01", + "gap_set_periodic_adv_para": "0x00007b11", + "gap_set_phy": "0x00007b29", + "gap_set_random_device_address": "0x00007b45", + "gap_start_ccm": "0x00007b61", + "gap_test_end": "0x00007ba9", + "gap_tx_test_v2": "0x00007bb5", + "gap_tx_test_v4": "0x00007bcd", + "gap_update_connection_parameters": "0x00007bf1", + "gap_vendor_tx_continuous_wave": "0x00007c35", + "gatt_client_cancel_write": "0x0000815d", + "gatt_client_discover_characteristic_descriptors": "0x00008183", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x000081c3", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x00008213", + "gatt_client_discover_characteristics_for_service": "0x00008263", + "gatt_client_discover_primary_services": "0x00008299", + "gatt_client_discover_primary_services_by_uuid128": "0x000082cb", + "gatt_client_discover_primary_services_by_uuid16": "0x0000830f", + "gatt_client_execute_write": "0x0000834b", + "gatt_client_find_included_services_for_service": "0x00008371", + "gatt_client_get_mtu": "0x0000839f", + "gatt_client_is_ready": "0x00008449", + "gatt_client_listen_for_characteristic_value_updates": "0x0000845f", + "gatt_client_prepare_write": "0x00008481", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x000084bd", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x000084e7", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x000084ed", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x0000851b", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x00008521", + "gatt_client_read_multiple_characteristic_values": "0x0000854f", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x0000857f", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x000085ad", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x000085f9", + "gatt_client_register_handler": "0x00008645", + "gatt_client_reliable_write_long_value_of_characteristic": "0x00008651", + "gatt_client_signed_write_without_response": "0x00008a81", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008b45", + "gatt_client_write_client_characteristic_configuration": "0x00008b7f", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008bd1", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008be1", + "gatt_client_write_long_value_of_characteristic": "0x00008c1d", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008c2d", + "gatt_client_write_value_of_characteristic": "0x00008c69", + "gatt_client_write_value_of_characteristic_without_response": "0x00008c9f", + "hci_add_event_handler": "0x0000a1bd", + "hci_power_control": "0x0000a955", + "hci_register_acl_packet_handler": "0x0000ab09", + "kv_commit": "0x0000b26d", + "kv_get": "0x0000b2c9", + "kv_init": "0x0000b2d5", + "kv_init_backend": "0x0000b355", + "kv_put": "0x0000b369", + "kv_remove": "0x0000b375", + "kv_remove_all": "0x0000b3a9", + "kv_value_modified": "0x0000b3d9", + "kv_value_modified_of_key": "0x0000b3f5", + "kv_visit": "0x0000b401", + "l2cap_add_event_handler": "0x0000b491", + "l2cap_can_send_packet_now": "0x0000b4a1", + "l2cap_create_le_credit_based_connection_request": "0x0000b65d", + "l2cap_credit_based_send": "0x0000b7a1", + "l2cap_credit_based_send_continue": "0x0000b7cd", + "l2cap_disconnect": "0x0000b849", + "l2cap_get_le_credit_based_connection_credits": "0x0000ba99", + "l2cap_get_peer_mtu_for_local_cid": "0x0000bab5", + "l2cap_init": "0x0000be89", + "l2cap_le_send_flow_control_credit": "0x0000bf7f", + "l2cap_max_le_mtu": "0x0000c289", + "l2cap_register_packet_handler": "0x0000c3b1", + "l2cap_register_service": "0x0000c3bd", + "l2cap_request_can_send_now_event": "0x0000c4cd", + "l2cap_request_connection_parameter_update": "0x0000c4e7", + "l2cap_send_echo_request": "0x0000c9c1", + "l2cap_unregister_service": "0x0000ca81", + "le_device_db_add": "0x0000cad9", + "le_device_db_find": "0x0000cbb1", + "le_device_db_from_key": "0x0000cbdd", + "le_device_db_iter_cur": "0x0000cbe5", + "le_device_db_iter_cur_key": "0x0000cbe9", + "le_device_db_iter_init": "0x0000cbed", + "le_device_db_iter_next": "0x0000cbf5", + "le_device_db_remove_key": "0x0000cc1b", + "ll_aes_encrypt": "0x0000cc49", + "ll_config": "0x0000ccc5", + "ll_free": "0x0000ccfb", + "ll_get_capabilities": "0x0000cd05", + "ll_get_heap_free_size": "0x0000cd25", + "ll_get_states": "0x0000cd35", + "ll_hint_on_ce_len": "0x0000cdf1", + "ll_legacy_adv_set_interval": "0x0000ce29", + "ll_malloc": "0x0000ce39", + "ll_query_timing_info": "0x0000cf71", + "ll_register_hci_acl_previewer": "0x0000cfbd", + "ll_scan_set_fixed_channel": "0x0000d021", + "ll_set_adv_access_address": "0x0000d239", + "ll_set_adv_coded_scheme": "0x0000d245", + "ll_set_conn_acl_report_latency": "0x0000d275", + "ll_set_conn_coded_scheme": "0x0000d2a5", + "ll_set_conn_latency": "0x0000d2d1", + "ll_set_conn_tx_power": "0x0000d301", + "ll_set_def_antenna": "0x0000d349", + "ll_set_initiating_coded_scheme": "0x0000d365", + "ll_set_max_conn_number": "0x0000d371", + "nibble_for_char": "0x0001d529", + "platform_calibrate_rt_clk": "0x0001d5d5", "platform_call_on_stack": "0x00004183", - "platform_config": "0x0001d549", - "platform_delete_timer": "0x0001d66d", - "platform_enable_irq": "0x0001d675", - "platform_get_current_task": "0x0001d6ad", - "platform_get_gen_os_driver": "0x0001d6d1", - "platform_get_heap_status": "0x0001d6d9", - "platform_get_link_layer_interf": "0x0001d6f1", - "platform_get_task_handle": "0x0001d6f9", - "platform_get_timer_counter": "0x0001d719", - "platform_get_us_time": "0x0001d71d", - "platform_get_version": "0x0001d721", - "platform_hrng": "0x0001d729", - "platform_install_isr_stack": "0x0001d731", - "platform_install_task_stack": "0x0001d73d", - "platform_patch_rf_init_data": "0x0001d775", - "platform_printf": "0x0001d781", - "platform_raise_assertion": "0x0001d795", - "platform_rand": "0x0001d7a9", - "platform_read_info": "0x0001d7ad", - "platform_read_persistent_reg": "0x0001d7dd", - "platform_reset": "0x0001d7ed", - "platform_rt_rc_auto_tune": "0x0001d811", - "platform_rt_rc_auto_tune2": "0x0001d819", - "platform_rt_rc_tune": "0x0001d8a1", - "platform_set_abs_timer": "0x0001d8b5", - "platform_set_evt_callback": "0x0001d8b9", - "platform_set_evt_callback_table": "0x0001d8cd", - "platform_set_irq_callback": "0x0001d8d9", - "platform_set_irq_callback_table": "0x0001d8f5", - "platform_set_rf_clk_source": "0x0001d901", - "platform_set_rf_init_data": "0x0001d90d", - "platform_set_rf_power_mapping": "0x0001d919", - "platform_set_timer": "0x0001d925", - "platform_shutdown": "0x0001d929", - "platform_switch_app": "0x0001d92d", - "platform_trace_raw": "0x0001d959", - "platform_write_persistent_reg": "0x0001d971", - "printf_hexdump": "0x0001db25", - "pvPortMalloc": "0x0001e619", - "pvTaskIncrementMutexHeldCount": "0x0001e701", - "pvTimerGetTimerID": "0x0001e719", - "pxPortInitialiseStack": "0x0001e745", - "reverse_128": "0x0001e8ed", - "reverse_24": "0x0001e8f3", - "reverse_256": "0x0001e8f9", - "reverse_48": "0x0001e8ff", - "reverse_56": "0x0001e905", - "reverse_64": "0x0001e90b", - "reverse_bd_addr": "0x0001e911", - "reverse_bytes": "0x0001e917", - "sm_add_event_handler": "0x0001eab5", - "sm_address_resolution_lookup": "0x0001ec0d", - "sm_authenticated": "0x0001ef89", - "sm_authorization_decline": "0x0001ef97", - "sm_authorization_grant": "0x0001efb7", - "sm_authorization_state": "0x0001efd7", - "sm_bonding_decline": "0x0001eff1", - "sm_config": "0x0001f44d", - "sm_config_conn": "0x0001f465", - "sm_encryption_key_size": "0x0001f61b", - "sm_just_works_confirm": "0x0001fba1", - "sm_le_device_key": "0x0001fed9", - "sm_passkey_input": "0x0001ff6f", - "sm_private_random_address_generation_get": "0x00020329", - "sm_private_random_address_generation_get_mode": "0x00020331", - "sm_private_random_address_generation_set_mode": "0x0002033d", - "sm_private_random_address_generation_set_update_period": "0x00020365", - "sm_register_external_ltk_callback": "0x000204a1", - "sm_register_oob_data_callback": "0x000204ad", - "sm_request_pairing": "0x000204b9", - "sm_send_security_request": "0x00020f8f", - "sm_set_accepted_stk_generation_methods": "0x00020fb5", - "sm_set_authentication_requirements": "0x00020fc1", - "sm_set_encryption_key_size_range": "0x00020fcd", - "sscanf_bd_addr": "0x00021329", - "sysSetPublicDeviceAddr": "0x000216dd", - "uuid128_to_str": "0x00021cf1", - "uuid_add_bluetooth_prefix": "0x00021d49", - "uuid_has_bluetooth_prefix": "0x00021d69", - "uxListRemove": "0x00021d85", - "uxQueueMessagesWaiting": "0x00021dad", - "uxQueueMessagesWaitingFromISR": "0x00021dd5", - "uxQueueSpacesAvailable": "0x00021df1", - "uxTaskGetStackHighWaterMark": "0x00021e1d", - "uxTaskPriorityGet": "0x00021e3d", - "uxTaskPriorityGetFromISR": "0x00021e59", - "vListInitialise": "0x00021f13", - "vListInitialiseItem": "0x00021f29", - "vListInsert": "0x00021f2f", - "vListInsertEnd": "0x00021f5f", - "vPortEndScheduler": "0x00021f79", - "vPortEnterCritical": "0x00021fa5", - "vPortExitCritical": "0x00021fe9", - "vPortFree": "0x0002201d", - "vPortSuppressTicksAndSleep": "0x000220b1", - "vPortValidateInterruptPriority": "0x000221d9", - "vQueueDelete": "0x00022235", - "vQueueWaitForMessageRestricted": "0x00022261", - "vTaskDelay": "0x000222a9", - "vTaskInternalSetTimeOutState": "0x000222f5", - "vTaskMissedYield": "0x00022305", - "vTaskPlaceOnEventList": "0x00022311", - "vTaskPlaceOnEventListRestricted": "0x00022349", - "vTaskPriorityDisinheritAfterTimeout": "0x00022389", - "vTaskPrioritySet": "0x00022435", - "vTaskResume": "0x000224fd", - "vTaskStartScheduler": "0x00022581", - "vTaskStepTick": "0x00022611", - "vTaskSuspend": "0x00022641", - "vTaskSuspendAll": "0x000226fd", - "vTaskSwitchContext": "0x0002270d", - "xPortStartScheduler": "0x000227bd", - "xQueueAddToSet": "0x00022885", - "xQueueCreateCountingSemaphore": "0x000228a9", - "xQueueCreateCountingSemaphoreStatic": "0x000228e5", - "xQueueCreateMutex": "0x00022929", - "xQueueCreateMutexStatic": "0x0002293f", - "xQueueCreateSet": "0x00022959", - "xQueueGenericCreate": "0x00022961", - "xQueueGenericCreateStatic": "0x000229ad", - "xQueueGenericReset": "0x00022a15", - "xQueueGenericSend": "0x00022aa1", - "xQueueGenericSendFromISR": "0x00022c0d", - "xQueueGiveFromISR": "0x00022ccd", - "xQueueGiveMutexRecursive": "0x00022d71", - "xQueueIsQueueEmptyFromISR": "0x00022db1", - "xQueueIsQueueFullFromISR": "0x00022dd5", - "xQueuePeek": "0x00022dfd", - "xQueuePeekFromISR": "0x00022f25", - "xQueueReceive": "0x00022f91", - "xQueueReceiveFromISR": "0x000230bd", - "xQueueRemoveFromSet": "0x00023151", - "xQueueSelectFromSet": "0x00023173", - "xQueueSelectFromSetFromISR": "0x00023185", - "xQueueSemaphoreTake": "0x00023199", - "xQueueTakeMutexRecursive": "0x00023305", - "xTaskCheckForTimeOut": "0x00023349", - "xTaskCreate": "0x000233b9", - "xTaskCreateStatic": "0x00023415", - "xTaskGetCurrentTaskHandle": "0x00023485", - "xTaskGetSchedulerState": "0x00023491", - "xTaskGetTickCount": "0x000234ad", - "xTaskGetTickCountFromISR": "0x000234b9", - "xTaskIncrementTick": "0x000234c9", - "xTaskPriorityDisinherit": "0x00023595", - "xTaskPriorityInherit": "0x00023629", - "xTaskRemoveFromEventList": "0x000236bd", - "xTaskResumeAll": "0x0002373d", - "xTaskResumeFromISR": "0x00023805", - "xTimerCreate": "0x00023891", - "xTimerCreateStatic": "0x000238c5", - "xTimerCreateTimerTask": "0x000238fd", - "xTimerGenericCommand": "0x00023969", - "xTimerGetExpiryTime": "0x000239d9", - "xTimerGetTimerDaemonTaskHandle": "0x000239f9" + "platform_cancel_us_timer": "0x0001d5d9", + "platform_config": "0x0001d5ed", + "platform_create_us_timer": "0x0001d711", + "platform_delete_timer": "0x0001d725", + "platform_enable_irq": "0x0001d72d", + "platform_get_current_task": "0x0001d765", + "platform_get_gen_os_driver": "0x0001d789", + "platform_get_heap_status": "0x0001d791", + "platform_get_link_layer_interf": "0x0001d7a9", + "platform_get_task_handle": "0x0001d7b1", + "platform_get_timer_counter": "0x0001d7d1", + "platform_get_us_time": "0x0001d7d5", + "platform_get_version": "0x0001d7d9", + "platform_hrng": "0x0001d7e1", + "platform_install_isr_stack": "0x0001d7e9", + "platform_install_task_stack": "0x0001d7f5", + "platform_patch_rf_init_data": "0x0001d82d", + "platform_printf": "0x0001d839", + "platform_raise_assertion": "0x0001d84d", + "platform_rand": "0x0001d861", + "platform_read_info": "0x0001d865", + "platform_read_persistent_reg": "0x0001d895", + "platform_reset": "0x0001d8a5", + "platform_rt_rc_auto_tune": "0x0001d8c9", + "platform_rt_rc_auto_tune2": "0x0001d8d1", + "platform_rt_rc_tune": "0x0001d94d", + "platform_set_abs_timer": "0x0001d971", + "platform_set_evt_callback": "0x0001d975", + "platform_set_evt_callback_table": "0x0001d989", + "platform_set_irq_callback": "0x0001d995", + "platform_set_irq_callback_table": "0x0001d9b1", + "platform_set_rf_clk_source": "0x0001d9bd", + "platform_set_rf_init_data": "0x0001d9c9", + "platform_set_rf_power_mapping": "0x0001d9d5", + "platform_set_timer": "0x0001d9e1", + "platform_shutdown": "0x0001d9e5", + "platform_switch_app": "0x0001d9e9", + "platform_trace_raw": "0x0001da15", + "platform_write_persistent_reg": "0x0001da2d", + "printf_hexdump": "0x0001dbe1", + "pvPortMalloc": "0x0001e6d5", + "pvTaskIncrementMutexHeldCount": "0x0001e7bd", + "pvTimerGetTimerID": "0x0001e7d5", + "pxPortInitialiseStack": "0x0001e801", + "reverse_128": "0x0001e9a9", + "reverse_24": "0x0001e9af", + "reverse_256": "0x0001e9b5", + "reverse_48": "0x0001e9bb", + "reverse_56": "0x0001e9c1", + "reverse_64": "0x0001e9c7", + "reverse_bd_addr": "0x0001e9cd", + "reverse_bytes": "0x0001e9d3", + "sm_add_event_handler": "0x0001eb71", + "sm_address_resolution_lookup": "0x0001ecc9", + "sm_authenticated": "0x0001f071", + "sm_authorization_decline": "0x0001f07f", + "sm_authorization_grant": "0x0001f09f", + "sm_authorization_state": "0x0001f0bf", + "sm_bonding_decline": "0x0001f0d9", + "sm_config": "0x0001f535", + "sm_config_conn": "0x0001f569", + "sm_encryption_key_size": "0x0001f723", + "sm_just_works_confirm": "0x0001fca9", + "sm_le_device_key": "0x0001ffe9", + "sm_passkey_input": "0x0002007f", + "sm_private_random_address_generation_get": "0x00020441", + "sm_private_random_address_generation_get_mode": "0x00020449", + "sm_private_random_address_generation_set_mode": "0x00020455", + "sm_private_random_address_generation_set_update_period": "0x0002047d", + "sm_register_external_ltk_callback": "0x000205b9", + "sm_register_oob_data_callback": "0x000205c5", + "sm_request_pairing": "0x000205d1", + "sm_send_security_request": "0x000210af", + "sm_set_accepted_stk_generation_methods": "0x000210d5", + "sm_set_authentication_requirements": "0x000210e1", + "sm_set_encryption_key_size_range": "0x000210f1", + "sscanf_bd_addr": "0x0002143d", + "sysSetPublicDeviceAddr": "0x00021839", + "uuid128_to_str": "0x00021e61", + "uuid_add_bluetooth_prefix": "0x00021eb9", + "uuid_has_bluetooth_prefix": "0x00021ed9", + "uxListRemove": "0x00021ef5", + "uxQueueMessagesWaiting": "0x00021f1d", + "uxQueueMessagesWaitingFromISR": "0x00021f45", + "uxQueueSpacesAvailable": "0x00021f61", + "uxTaskGetStackHighWaterMark": "0x00021f8d", + "uxTaskPriorityGet": "0x00021fad", + "uxTaskPriorityGetFromISR": "0x00021fc9", + "vListInitialise": "0x00022083", + "vListInitialiseItem": "0x00022099", + "vListInsert": "0x0002209f", + "vListInsertEnd": "0x000220cf", + "vPortEndScheduler": "0x000220e9", + "vPortEnterCritical": "0x00022115", + "vPortExitCritical": "0x00022159", + "vPortFree": "0x0002218d", + "vPortSuppressTicksAndSleep": "0x00022221", + "vPortValidateInterruptPriority": "0x00022349", + "vQueueDelete": "0x000223a5", + "vQueueWaitForMessageRestricted": "0x000223d1", + "vTaskDelay": "0x00022419", + "vTaskInternalSetTimeOutState": "0x00022465", + "vTaskMissedYield": "0x00022475", + "vTaskPlaceOnEventList": "0x00022481", + "vTaskPlaceOnEventListRestricted": "0x000224b9", + "vTaskPriorityDisinheritAfterTimeout": "0x000224f9", + "vTaskPrioritySet": "0x000225a5", + "vTaskResume": "0x0002266d", + "vTaskStartScheduler": "0x000226f1", + "vTaskStepTick": "0x00022781", + "vTaskSuspend": "0x000227b1", + "vTaskSuspendAll": "0x0002286d", + "vTaskSwitchContext": "0x0002287d", + "xPortStartScheduler": "0x00022925", + "xQueueAddToSet": "0x000229ed", + "xQueueCreateCountingSemaphore": "0x00022a11", + "xQueueCreateCountingSemaphoreStatic": "0x00022a4d", + "xQueueCreateMutex": "0x00022a91", + "xQueueCreateMutexStatic": "0x00022aa7", + "xQueueCreateSet": "0x00022ac1", + "xQueueGenericCreate": "0x00022ac9", + "xQueueGenericCreateStatic": "0x00022b15", + "xQueueGenericReset": "0x00022b7d", + "xQueueGenericSend": "0x00022c09", + "xQueueGenericSendFromISR": "0x00022d75", + "xQueueGiveFromISR": "0x00022e35", + "xQueueGiveMutexRecursive": "0x00022ed9", + "xQueueIsQueueEmptyFromISR": "0x00022f19", + "xQueueIsQueueFullFromISR": "0x00022f3d", + "xQueuePeek": "0x00022f65", + "xQueuePeekFromISR": "0x0002308d", + "xQueueReceive": "0x000230f9", + "xQueueReceiveFromISR": "0x00023225", + "xQueueRemoveFromSet": "0x000232b9", + "xQueueSelectFromSet": "0x000232db", + "xQueueSelectFromSetFromISR": "0x000232ed", + "xQueueSemaphoreTake": "0x00023301", + "xQueueTakeMutexRecursive": "0x0002346d", + "xTaskCheckForTimeOut": "0x000234b1", + "xTaskCreate": "0x00023521", + "xTaskCreateStatic": "0x0002357d", + "xTaskGetCurrentTaskHandle": "0x000235ed", + "xTaskGetSchedulerState": "0x000235f9", + "xTaskGetTickCount": "0x00023615", + "xTaskGetTickCountFromISR": "0x00023621", + "xTaskIncrementTick": "0x00023631", + "xTaskPriorityDisinherit": "0x000236fd", + "xTaskPriorityInherit": "0x00023791", + "xTaskRemoveFromEventList": "0x00023825", + "xTaskResumeAll": "0x000238a5", + "xTaskResumeFromISR": "0x0002396d", + "xTimerCreate": "0x000239f9", + "xTimerCreateStatic": "0x00023a2d", + "xTimerCreateTimerTask": "0x00023a65", + "xTimerGenericCommand": "0x00023ad1", + "xTimerGetExpiryTime": "0x00023b41", + "xTimerGetTimerDaemonTaskHandle": "0x00023b61" } \ No newline at end of file diff --git a/bundles/typical/ING9187xx/meta.json b/bundles/typical/ING9187xx/meta.json index e8eb6879c..e026d83c6 100644 --- a/bundles/typical/ING9187xx/meta.json +++ b/bundles/typical/ING9187xx/meta.json @@ -4,15 +4,21 @@ }, "ram": { "base": 536870912, - "size": 29876 + "size": 29812 }, "rom": { "base": 16384, - "size": 135796 + "size": 136176 + }, + "var": { + "link_layer_features": { + "addr": 148676, + "value": "3ff9010400000000" + } }, "version": [ 1, 9, - 41 + 56 ] } \ No newline at end of file diff --git a/bundles/typical/ING9187xx/platform.bin b/bundles/typical/ING9187xx/platform.bin index 8e17c000c..045f838f5 100644 Binary files a/bundles/typical/ING9187xx/platform.bin and b/bundles/typical/ING9187xx/platform.bin differ diff --git a/bundles/typical/ING9188xx/apis.json b/bundles/typical/ING9188xx/apis.json index 58bc58278..a528cadce 100644 --- a/bundles/typical/ING9188xx/apis.json +++ b/bundles/typical/ING9188xx/apis.json @@ -6,341 +6,348 @@ "att_dispatch_server_can_send_now": "0x000058f1", "att_dispatch_server_request_can_send_now_event": "0x000058f7", "att_emit_general_event": "0x000059a9", - "att_server_can_send_packet_now": "0x000060d9", - "att_server_deferred_read_response": "0x000060dd", - "att_server_get_mtu": "0x000060f5", - "att_server_indicate": "0x0000616d", - "att_server_init": "0x000061f1", - "att_server_notify": "0x0000622d", - "att_server_register_packet_handler": "0x00006345", - "att_server_request_can_send_now_event": "0x00006351", - "att_set_db": "0x0000636d", - "att_set_read_callback": "0x00006381", - "att_set_write_callback": "0x0000638d", - "bd_addr_cmp": "0x000064fd", - "bd_addr_copy": "0x00006503", - "bd_addr_to_str": "0x0000650d", - "big_endian_read_16": "0x00006545", - "big_endian_read_32": "0x0000654d", - "big_endian_store_16": "0x00006561", - "big_endian_store_32": "0x0000656d", - "btstack_config": "0x000066c1", - "btstack_memory_pool_create": "0x000067ff", - "btstack_memory_pool_free": "0x00006829", - "btstack_memory_pool_get": "0x00006889", - "btstack_push_user_msg": "0x000068f1", - "btstack_push_user_runnable": "0x000068fd", - "btstack_reset": "0x00006909", - "char_for_nibble": "0x00006be5", - "eTaskConfirmSleepModeStatus": "0x00006ec9", - "gap_add_dev_to_periodic_list": "0x00007535", - "gap_add_whitelist": "0x00007545", - "gap_aes_encrypt": "0x00007551", - "gap_clear_white_lists": "0x00007589", - "gap_clr_adv_set": "0x00007595", - "gap_clr_periodic_adv_list": "0x000075a1", - "gap_create_connection_cancel": "0x000075ad", - "gap_default_periodic_adv_sync_transfer_param": "0x000075b9", - "gap_disconnect": "0x000075d1", - "gap_disconnect_all": "0x000075fd", - "gap_ext_create_connection": "0x0000763d", - "gap_get_connection_parameter_range": "0x00007715", - "gap_le_read_channel_map": "0x00007751", - "gap_periodic_adv_create_sync": "0x000077bd", - "gap_periodic_adv_create_sync_cancel": "0x000077e1", - "gap_periodic_adv_set_info_transfer": "0x000077ed", - "gap_periodic_adv_sync_transfer": "0x000077fd", - "gap_periodic_adv_sync_transfer_param": "0x0000780d", - "gap_periodic_adv_term_sync": "0x00007829", - "gap_read_antenna_info": "0x000078b1", - "gap_read_periodic_adv_list_size": "0x000078bd", - "gap_read_phy": "0x000078c9", - "gap_read_remote_used_features": "0x000078d5", - "gap_read_remote_version": "0x000078e1", - "gap_read_rssi": "0x000078ed", - "gap_remove_whitelist": "0x000078f9", - "gap_rmv_adv_set": "0x00007975", - "gap_rmv_dev_from_periodic_list": "0x00007981", - "gap_rx_test_v2": "0x00007991", - "gap_rx_test_v3": "0x000079a1", - "gap_set_adv_set_random_addr": "0x000079ed", - "gap_set_callback_for_next_hci": "0x00007a29", - "gap_set_connection_cte_request_enable": "0x00007a49", - "gap_set_connection_cte_response_enable": "0x00007a65", - "gap_set_connection_cte_rx_param": "0x00007a75", - "gap_set_connection_cte_tx_param": "0x00007ac9", - "gap_set_connection_parameter_range": "0x00007b15", - "gap_set_connectionless_cte_tx_enable": "0x00007b2d", - "gap_set_connectionless_cte_tx_param": "0x00007b3d", - "gap_set_connectionless_iq_sampling_enable": "0x00007b99", - "gap_set_data_length": "0x00007bf5", - "gap_set_def_phy": "0x00007c0d", - "gap_set_ext_adv_data": "0x00007c1d", - "gap_set_ext_adv_enable": "0x00007c35", - "gap_set_ext_adv_para": "0x00007ca5", - "gap_set_ext_scan_enable": "0x00007d7d", - "gap_set_ext_scan_para": "0x00007d95", - "gap_set_ext_scan_response_data": "0x00007e35", - "gap_set_host_channel_classification": "0x00007e4d", - "gap_set_periodic_adv_data": "0x00007e5d", - "gap_set_periodic_adv_enable": "0x00007ecd", - "gap_set_periodic_adv_para": "0x00007edd", - "gap_set_periodic_adv_rx_enable": "0x00007ef5", - "gap_set_phy": "0x00007f05", - "gap_set_random_device_address": "0x00007f21", - "gap_start_ccm": "0x00007f51", - "gap_test_end": "0x00007f99", - "gap_tx_test_v2": "0x00007fa5", - "gap_tx_test_v4": "0x00007fbd", - "gap_update_connection_parameters": "0x00007fe1", - "gap_vendor_tx_continuous_wave": "0x00008025", - "gatt_client_cancel_write": "0x0000854d", - "gatt_client_discover_characteristic_descriptors": "0x00008573", - "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x000085b3", - "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x00008603", - "gatt_client_discover_characteristics_for_service": "0x00008653", - "gatt_client_discover_primary_services": "0x00008689", - "gatt_client_discover_primary_services_by_uuid128": "0x000086bb", - "gatt_client_discover_primary_services_by_uuid16": "0x000086ff", - "gatt_client_execute_write": "0x0000873b", - "gatt_client_find_included_services_for_service": "0x00008761", - "gatt_client_get_mtu": "0x0000878f", - "gatt_client_is_ready": "0x00008831", - "gatt_client_listen_for_characteristic_value_updates": "0x00008847", - "gatt_client_prepare_write": "0x00008869", - "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x000088a5", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x000088cf", - "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x000088d5", - "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x00008903", - "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x00008909", - "gatt_client_read_multiple_characteristic_values": "0x00008937", - "gatt_client_read_value_of_characteristic_using_value_handle": "0x00008967", - "gatt_client_read_value_of_characteristics_by_uuid128": "0x00008995", - "gatt_client_read_value_of_characteristics_by_uuid16": "0x000089e1", - "gatt_client_register_handler": "0x00008a2d", - "gatt_client_reliable_write_long_value_of_characteristic": "0x00008a39", - "gatt_client_signed_write_without_response": "0x00008e69", - "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008f2d", - "gatt_client_write_client_characteristic_configuration": "0x00008f67", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008fb9", - "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008fc9", - "gatt_client_write_long_value_of_characteristic": "0x00009005", - "gatt_client_write_long_value_of_characteristic_with_offset": "0x00009015", - "gatt_client_write_value_of_characteristic": "0x00009051", - "gatt_client_write_value_of_characteristic_without_response": "0x00009087", - "hci_add_event_handler": "0x0000a5c9", - "hci_power_control": "0x0000ad65", - "hci_register_acl_packet_handler": "0x0000af19", - "kv_commit": "0x0000b68d", - "kv_get": "0x0000b6e9", - "kv_init": "0x0000b6f5", - "kv_init_backend": "0x0000b775", - "kv_put": "0x0000b789", - "kv_remove": "0x0000b795", - "kv_remove_all": "0x0000b7c9", - "kv_value_modified": "0x0000b7f9", - "kv_value_modified_of_key": "0x0000b815", - "kv_visit": "0x0000b821", - "l2cap_add_event_handler": "0x0000b8b1", - "l2cap_can_send_packet_now": "0x0000b8c1", - "l2cap_create_le_credit_based_connection_request": "0x0000ba7d", - "l2cap_credit_based_send": "0x0000bbc1", - "l2cap_credit_based_send_continue": "0x0000bbed", - "l2cap_disconnect": "0x0000bc69", - "l2cap_get_le_credit_based_connection_credits": "0x0000beb9", - "l2cap_get_peer_mtu_for_local_cid": "0x0000bed5", - "l2cap_init": "0x0000c2a9", - "l2cap_le_send_flow_control_credit": "0x0000c39f", - "l2cap_max_le_mtu": "0x0000c6a9", - "l2cap_register_packet_handler": "0x0000c7d1", - "l2cap_register_service": "0x0000c7dd", - "l2cap_request_can_send_now_event": "0x0000c8ed", - "l2cap_request_connection_parameter_update": "0x0000c907", - "l2cap_send_echo_request": "0x0000cde1", - "l2cap_unregister_service": "0x0000cea1", - "le_device_db_add": "0x0000cef9", - "le_device_db_find": "0x0000cfd1", - "le_device_db_from_key": "0x0000cffd", - "le_device_db_iter_cur": "0x0000d005", - "le_device_db_iter_cur_key": "0x0000d009", - "le_device_db_iter_init": "0x0000d00d", - "le_device_db_iter_next": "0x0000d015", - "le_device_db_remove_key": "0x0000d03b", - "ll_aes_encrypt": "0x0000d069", - "ll_config": "0x0000d0e5", - "ll_free": "0x0000d11b", - "ll_get_heap_free_size": "0x0000d125", - "ll_hint_on_ce_len": "0x0000d139", - "ll_legacy_adv_set_interval": "0x0000d171", - "ll_malloc": "0x0000d181", - "ll_query_timing_info": "0x0000d2b9", - "ll_register_hci_acl_previewer": "0x0000d305", - "ll_scan_set_fixed_channel": "0x0000d369", - "ll_set_adv_access_address": "0x0000d581", - "ll_set_adv_coded_scheme": "0x0000d58d", - "ll_set_conn_acl_report_latency": "0x0000d5bd", - "ll_set_conn_coded_scheme": "0x0000d5ed", - "ll_set_conn_latency": "0x0000d619", - "ll_set_conn_tx_power": "0x0000d649", - "ll_set_def_antenna": "0x0000d691", - "ll_set_initiating_coded_scheme": "0x0000d6ad", - "ll_set_max_conn_number": "0x0000d6b9", - "nibble_for_char": "0x0001e751", - "platform_calibrate_rt_clk": "0x0001e7fd", + "att_server_can_send_packet_now": "0x000060dd", + "att_server_deferred_read_response": "0x000060e1", + "att_server_get_mtu": "0x000060f9", + "att_server_indicate": "0x00006171", + "att_server_init": "0x000061f5", + "att_server_notify": "0x00006231", + "att_server_register_packet_handler": "0x00006349", + "att_server_request_can_send_now_event": "0x00006355", + "att_set_db": "0x00006371", + "att_set_read_callback": "0x00006385", + "att_set_write_callback": "0x00006391", + "bd_addr_cmp": "0x00006501", + "bd_addr_copy": "0x00006507", + "bd_addr_to_str": "0x00006511", + "big_endian_read_16": "0x00006549", + "big_endian_read_32": "0x00006551", + "big_endian_store_16": "0x00006565", + "big_endian_store_32": "0x00006571", + "btstack_config": "0x000066c5", + "btstack_get_capabilities": "0x000066d1", + "btstack_memory_pool_create": "0x00006819", + "btstack_memory_pool_free": "0x00006841", + "btstack_memory_pool_get": "0x000068a1", + "btstack_push_user_msg": "0x00006909", + "btstack_push_user_runnable": "0x00006915", + "btstack_reset": "0x00006921", + "char_for_nibble": "0x00006bfd", + "eTaskConfirmSleepModeStatus": "0x00006ee1", + "gap_add_dev_to_periodic_list": "0x00007539", + "gap_add_whitelist": "0x00007549", + "gap_aes_encrypt": "0x00007555", + "gap_clear_white_lists": "0x0000758d", + "gap_clr_adv_set": "0x00007599", + "gap_clr_periodic_adv_list": "0x000075a5", + "gap_create_connection_cancel": "0x000075b1", + "gap_default_periodic_adv_sync_transfer_param": "0x000075bd", + "gap_disconnect": "0x000075d5", + "gap_disconnect2": "0x000075dd", + "gap_disconnect_all": "0x00007609", + "gap_ext_create_connection": "0x00007649", + "gap_get_connection_parameter_range": "0x00007721", + "gap_le_read_channel_map": "0x00007759", + "gap_periodic_adv_create_sync": "0x000077b9", + "gap_periodic_adv_create_sync_cancel": "0x000077dd", + "gap_periodic_adv_set_info_transfer": "0x000077e9", + "gap_periodic_adv_sync_transfer": "0x000077f9", + "gap_periodic_adv_sync_transfer_param": "0x00007809", + "gap_periodic_adv_term_sync": "0x00007825", + "gap_read_antenna_info": "0x000078ad", + "gap_read_periodic_adv_list_size": "0x000078b9", + "gap_read_phy": "0x000078c5", + "gap_read_remote_used_features": "0x000078d1", + "gap_read_remote_version": "0x000078dd", + "gap_read_rssi": "0x000078e9", + "gap_read_white_lists_size": "0x000078f5", + "gap_remove_whitelist": "0x00007901", + "gap_rmv_adv_set": "0x0000797d", + "gap_rmv_dev_from_periodic_list": "0x00007989", + "gap_rx_test_v2": "0x00007999", + "gap_rx_test_v3": "0x000079a9", + "gap_set_adv_set_random_addr": "0x000079f5", + "gap_set_callback_for_next_hci": "0x00007a19", + "gap_set_connection_cte_request_enable": "0x00007a39", + "gap_set_connection_cte_response_enable": "0x00007a55", + "gap_set_connection_cte_rx_param": "0x00007a65", + "gap_set_connection_cte_tx_param": "0x00007ab9", + "gap_set_connection_parameter_range": "0x00007b05", + "gap_set_connectionless_cte_tx_enable": "0x00007b1d", + "gap_set_connectionless_cte_tx_param": "0x00007b2d", + "gap_set_connectionless_iq_sampling_enable": "0x00007b89", + "gap_set_data_length": "0x00007be5", + "gap_set_def_phy": "0x00007bfd", + "gap_set_ext_adv_data": "0x00007c0d", + "gap_set_ext_adv_enable": "0x00007c25", + "gap_set_ext_adv_para": "0x00007c95", + "gap_set_ext_scan_enable": "0x00007d5d", + "gap_set_ext_scan_para": "0x00007d75", + "gap_set_ext_scan_response_data": "0x00007e15", + "gap_set_host_channel_classification": "0x00007e2d", + "gap_set_periodic_adv_data": "0x00007e3d", + "gap_set_periodic_adv_enable": "0x00007ead", + "gap_set_periodic_adv_para": "0x00007ebd", + "gap_set_periodic_adv_rx_enable": "0x00007ed5", + "gap_set_phy": "0x00007ee5", + "gap_set_random_device_address": "0x00007f01", + "gap_start_ccm": "0x00007f1d", + "gap_test_end": "0x00007f65", + "gap_tx_test_v2": "0x00007f71", + "gap_tx_test_v4": "0x00007f89", + "gap_update_connection_parameters": "0x00007fad", + "gap_vendor_tx_continuous_wave": "0x00007ff1", + "gatt_client_cancel_write": "0x00008519", + "gatt_client_discover_characteristic_descriptors": "0x0000853f", + "gatt_client_discover_characteristics_for_handle_range_by_uuid128": "0x0000857f", + "gatt_client_discover_characteristics_for_handle_range_by_uuid16": "0x000085cf", + "gatt_client_discover_characteristics_for_service": "0x0000861f", + "gatt_client_discover_primary_services": "0x00008655", + "gatt_client_discover_primary_services_by_uuid128": "0x00008687", + "gatt_client_discover_primary_services_by_uuid16": "0x000086cb", + "gatt_client_execute_write": "0x00008707", + "gatt_client_find_included_services_for_service": "0x0000872d", + "gatt_client_get_mtu": "0x0000875b", + "gatt_client_is_ready": "0x00008805", + "gatt_client_listen_for_characteristic_value_updates": "0x0000881b", + "gatt_client_prepare_write": "0x0000883d", + "gatt_client_read_characteristic_descriptor_using_descriptor_handle": "0x00008879", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle": "0x000088a3", + "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x000088a9", + "gatt_client_read_long_value_of_characteristic_using_value_handle": "0x000088d7", + "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset": "0x000088dd", + "gatt_client_read_multiple_characteristic_values": "0x0000890b", + "gatt_client_read_value_of_characteristic_using_value_handle": "0x0000893b", + "gatt_client_read_value_of_characteristics_by_uuid128": "0x00008969", + "gatt_client_read_value_of_characteristics_by_uuid16": "0x000089b5", + "gatt_client_register_handler": "0x00008a01", + "gatt_client_reliable_write_long_value_of_characteristic": "0x00008a0d", + "gatt_client_signed_write_without_response": "0x00008e3d", + "gatt_client_write_characteristic_descriptor_using_descriptor_handle": "0x00008f01", + "gatt_client_write_client_characteristic_configuration": "0x00008f3b", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle": "0x00008f8d", + "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset": "0x00008f9d", + "gatt_client_write_long_value_of_characteristic": "0x00008fd9", + "gatt_client_write_long_value_of_characteristic_with_offset": "0x00008fe9", + "gatt_client_write_value_of_characteristic": "0x00009025", + "gatt_client_write_value_of_characteristic_without_response": "0x0000905b", + "hci_add_event_handler": "0x0000a595", + "hci_power_control": "0x0000ad2d", + "hci_register_acl_packet_handler": "0x0000aee1", + "kv_commit": "0x0000b645", + "kv_get": "0x0000b6a1", + "kv_init": "0x0000b6ad", + "kv_init_backend": "0x0000b72d", + "kv_put": "0x0000b741", + "kv_remove": "0x0000b74d", + "kv_remove_all": "0x0000b781", + "kv_value_modified": "0x0000b7b1", + "kv_value_modified_of_key": "0x0000b7cd", + "kv_visit": "0x0000b7d9", + "l2cap_add_event_handler": "0x0000b869", + "l2cap_can_send_packet_now": "0x0000b879", + "l2cap_create_le_credit_based_connection_request": "0x0000ba35", + "l2cap_credit_based_send": "0x0000bb79", + "l2cap_credit_based_send_continue": "0x0000bba5", + "l2cap_disconnect": "0x0000bc21", + "l2cap_get_le_credit_based_connection_credits": "0x0000be71", + "l2cap_get_peer_mtu_for_local_cid": "0x0000be8d", + "l2cap_init": "0x0000c261", + "l2cap_le_send_flow_control_credit": "0x0000c357", + "l2cap_max_le_mtu": "0x0000c661", + "l2cap_register_packet_handler": "0x0000c789", + "l2cap_register_service": "0x0000c795", + "l2cap_request_can_send_now_event": "0x0000c8a5", + "l2cap_request_connection_parameter_update": "0x0000c8bf", + "l2cap_send_echo_request": "0x0000cd99", + "l2cap_unregister_service": "0x0000ce59", + "le_device_db_add": "0x0000ceb1", + "le_device_db_find": "0x0000cf89", + "le_device_db_from_key": "0x0000cfb5", + "le_device_db_iter_cur": "0x0000cfbd", + "le_device_db_iter_cur_key": "0x0000cfc1", + "le_device_db_iter_init": "0x0000cfc5", + "le_device_db_iter_next": "0x0000cfcd", + "le_device_db_remove_key": "0x0000cff3", + "ll_aes_encrypt": "0x0000d021", + "ll_config": "0x0000d09d", + "ll_free": "0x0000d0d3", + "ll_get_capabilities": "0x0000d0dd", + "ll_get_heap_free_size": "0x0000d0fd", + "ll_get_states": "0x0000d10d", + "ll_hint_on_ce_len": "0x0000d1c9", + "ll_legacy_adv_set_interval": "0x0000d201", + "ll_malloc": "0x0000d211", + "ll_query_timing_info": "0x0000d349", + "ll_register_hci_acl_previewer": "0x0000d395", + "ll_scan_set_fixed_channel": "0x0000d3f9", + "ll_set_adv_access_address": "0x0000d611", + "ll_set_adv_coded_scheme": "0x0000d61d", + "ll_set_conn_acl_report_latency": "0x0000d64d", + "ll_set_conn_coded_scheme": "0x0000d67d", + "ll_set_conn_latency": "0x0000d6a9", + "ll_set_conn_tx_power": "0x0000d6d9", + "ll_set_def_antenna": "0x0000d721", + "ll_set_initiating_coded_scheme": "0x0000d73d", + "ll_set_max_conn_number": "0x0000d749", + "nibble_for_char": "0x0001e7e1", + "platform_calibrate_rt_clk": "0x0001e88d", "platform_call_on_stack": "0x00004183", - "platform_config": "0x0001e801", - "platform_delete_timer": "0x0001e925", - "platform_enable_irq": "0x0001e92d", - "platform_get_current_task": "0x0001e965", - "platform_get_gen_os_driver": "0x0001e989", - "platform_get_heap_status": "0x0001e991", - "platform_get_link_layer_interf": "0x0001e9a9", - "platform_get_task_handle": "0x0001e9b1", - "platform_get_timer_counter": "0x0001e9d1", - "platform_get_us_time": "0x0001e9d5", - "platform_get_version": "0x0001e9d9", - "platform_hrng": "0x0001e9e1", - "platform_install_isr_stack": "0x0001e9e9", - "platform_install_task_stack": "0x0001e9f5", - "platform_patch_rf_init_data": "0x0001ea2d", - "platform_printf": "0x0001ea39", - "platform_raise_assertion": "0x0001ea4d", - "platform_rand": "0x0001ea61", - "platform_read_info": "0x0001ea65", - "platform_read_persistent_reg": "0x0001ea95", - "platform_reset": "0x0001eaa5", - "platform_rt_rc_auto_tune": "0x0001eac9", - "platform_rt_rc_auto_tune2": "0x0001ead1", - "platform_rt_rc_tune": "0x0001eb59", - "platform_set_abs_timer": "0x0001eb6d", - "platform_set_evt_callback": "0x0001eb71", - "platform_set_evt_callback_table": "0x0001eb85", - "platform_set_irq_callback": "0x0001eb91", - "platform_set_irq_callback_table": "0x0001ebad", - "platform_set_rf_clk_source": "0x0001ebb9", - "platform_set_rf_init_data": "0x0001ebc5", - "platform_set_rf_power_mapping": "0x0001ebd1", - "platform_set_timer": "0x0001ebdd", - "platform_shutdown": "0x0001ebe1", - "platform_switch_app": "0x0001ebe5", - "platform_trace_raw": "0x0001ec11", - "platform_write_persistent_reg": "0x0001ec29", - "printf_hexdump": "0x0001eddd", - "pvPortMalloc": "0x0001f8d1", - "pvTaskIncrementMutexHeldCount": "0x0001f9b9", - "pvTimerGetTimerID": "0x0001f9d1", - "pxPortInitialiseStack": "0x0001f9fd", - "reverse_128": "0x0001fbdd", - "reverse_24": "0x0001fbe3", - "reverse_256": "0x0001fbe9", - "reverse_48": "0x0001fbef", - "reverse_56": "0x0001fbf5", - "reverse_64": "0x0001fbfb", - "reverse_bd_addr": "0x0001fc01", - "reverse_bytes": "0x0001fc07", - "sm_add_event_handler": "0x0001fef5", - "sm_address_resolution_lookup": "0x0002004d", - "sm_authenticated": "0x000203c9", - "sm_authorization_decline": "0x000203d7", - "sm_authorization_grant": "0x000203f7", - "sm_authorization_state": "0x00020417", - "sm_bonding_decline": "0x00020431", - "sm_config": "0x0002088d", - "sm_config_conn": "0x000208a5", - "sm_encryption_key_size": "0x00020a5b", - "sm_just_works_confirm": "0x00020fe1", - "sm_le_device_key": "0x00021319", - "sm_passkey_input": "0x000213af", - "sm_private_random_address_generation_get": "0x00021769", - "sm_private_random_address_generation_get_mode": "0x00021771", - "sm_private_random_address_generation_set_mode": "0x0002177d", - "sm_private_random_address_generation_set_update_period": "0x000217a5", - "sm_register_external_ltk_callback": "0x000218e1", - "sm_register_oob_data_callback": "0x000218ed", - "sm_request_pairing": "0x000218f9", - "sm_send_security_request": "0x000223cf", - "sm_set_accepted_stk_generation_methods": "0x000223f5", - "sm_set_authentication_requirements": "0x00022401", - "sm_set_encryption_key_size_range": "0x0002240d", - "sscanf_bd_addr": "0x00022769", - "sysSetPublicDeviceAddr": "0x00022b1d", - "uuid128_to_str": "0x000232c9", - "uuid_add_bluetooth_prefix": "0x00023321", - "uuid_has_bluetooth_prefix": "0x00023341", - "uxListRemove": "0x0002335d", - "uxQueueMessagesWaiting": "0x00023385", - "uxQueueMessagesWaitingFromISR": "0x000233ad", - "uxQueueSpacesAvailable": "0x000233c9", - "uxTaskGetStackHighWaterMark": "0x000233f5", - "uxTaskPriorityGet": "0x00023415", - "uxTaskPriorityGetFromISR": "0x00023431", - "vListInitialise": "0x000234eb", - "vListInitialiseItem": "0x00023501", - "vListInsert": "0x00023507", - "vListInsertEnd": "0x00023537", - "vPortEndScheduler": "0x00023551", - "vPortEnterCritical": "0x0002357d", - "vPortExitCritical": "0x000235c1", - "vPortFree": "0x000235f5", - "vPortSuppressTicksAndSleep": "0x00023689", - "vPortValidateInterruptPriority": "0x000237b1", - "vQueueDelete": "0x0002380d", - "vQueueWaitForMessageRestricted": "0x00023839", - "vTaskDelay": "0x00023881", - "vTaskInternalSetTimeOutState": "0x000238cd", - "vTaskMissedYield": "0x000238dd", - "vTaskPlaceOnEventList": "0x000238e9", - "vTaskPlaceOnEventListRestricted": "0x00023921", - "vTaskPriorityDisinheritAfterTimeout": "0x00023961", - "vTaskPrioritySet": "0x00023a0d", - "vTaskResume": "0x00023ad5", - "vTaskStartScheduler": "0x00023b59", - "vTaskStepTick": "0x00023be9", - "vTaskSuspend": "0x00023c19", - "vTaskSuspendAll": "0x00023cd5", - "vTaskSwitchContext": "0x00023ce5", - "xPortStartScheduler": "0x00023d95", - "xQueueAddToSet": "0x00023e5d", - "xQueueCreateCountingSemaphore": "0x00023e81", - "xQueueCreateCountingSemaphoreStatic": "0x00023ebd", - "xQueueCreateMutex": "0x00023f01", - "xQueueCreateMutexStatic": "0x00023f17", - "xQueueCreateSet": "0x00023f31", - "xQueueGenericCreate": "0x00023f39", - "xQueueGenericCreateStatic": "0x00023f85", - "xQueueGenericReset": "0x00023fed", - "xQueueGenericSend": "0x00024079", - "xQueueGenericSendFromISR": "0x000241e5", - "xQueueGiveFromISR": "0x000242a5", - "xQueueGiveMutexRecursive": "0x00024349", - "xQueueIsQueueEmptyFromISR": "0x00024389", - "xQueueIsQueueFullFromISR": "0x000243ad", - "xQueuePeek": "0x000243d5", - "xQueuePeekFromISR": "0x000244fd", - "xQueueReceive": "0x00024569", - "xQueueReceiveFromISR": "0x00024695", - "xQueueRemoveFromSet": "0x00024729", - "xQueueSelectFromSet": "0x0002474b", - "xQueueSelectFromSetFromISR": "0x0002475d", - "xQueueSemaphoreTake": "0x00024771", - "xQueueTakeMutexRecursive": "0x000248dd", - "xTaskCheckForTimeOut": "0x00024921", - "xTaskCreate": "0x00024991", - "xTaskCreateStatic": "0x000249ed", - "xTaskGetCurrentTaskHandle": "0x00024a5d", - "xTaskGetSchedulerState": "0x00024a69", - "xTaskGetTickCount": "0x00024a85", - "xTaskGetTickCountFromISR": "0x00024a91", - "xTaskIncrementTick": "0x00024aa1", - "xTaskPriorityDisinherit": "0x00024b6d", - "xTaskPriorityInherit": "0x00024c01", - "xTaskRemoveFromEventList": "0x00024c95", - "xTaskResumeAll": "0x00024d15", - "xTaskResumeFromISR": "0x00024ddd", - "xTimerCreate": "0x00024e69", - "xTimerCreateStatic": "0x00024e9d", - "xTimerCreateTimerTask": "0x00024ed5", - "xTimerGenericCommand": "0x00024f41", - "xTimerGetExpiryTime": "0x00024fb1", - "xTimerGetTimerDaemonTaskHandle": "0x00024fd1" + "platform_cancel_us_timer": "0x0001e891", + "platform_config": "0x0001e8a5", + "platform_create_us_timer": "0x0001e9c9", + "platform_delete_timer": "0x0001e9dd", + "platform_enable_irq": "0x0001e9e5", + "platform_get_current_task": "0x0001ea1d", + "platform_get_gen_os_driver": "0x0001ea41", + "platform_get_heap_status": "0x0001ea49", + "platform_get_link_layer_interf": "0x0001ea61", + "platform_get_task_handle": "0x0001ea69", + "platform_get_timer_counter": "0x0001ea89", + "platform_get_us_time": "0x0001ea8d", + "platform_get_version": "0x0001ea91", + "platform_hrng": "0x0001ea99", + "platform_install_isr_stack": "0x0001eaa1", + "platform_install_task_stack": "0x0001eaad", + "platform_patch_rf_init_data": "0x0001eae5", + "platform_printf": "0x0001eaf1", + "platform_raise_assertion": "0x0001eb05", + "platform_rand": "0x0001eb19", + "platform_read_info": "0x0001eb1d", + "platform_read_persistent_reg": "0x0001eb4d", + "platform_reset": "0x0001eb5d", + "platform_rt_rc_auto_tune": "0x0001eb81", + "platform_rt_rc_auto_tune2": "0x0001eb89", + "platform_rt_rc_tune": "0x0001ec05", + "platform_set_abs_timer": "0x0001ec29", + "platform_set_evt_callback": "0x0001ec2d", + "platform_set_evt_callback_table": "0x0001ec41", + "platform_set_irq_callback": "0x0001ec4d", + "platform_set_irq_callback_table": "0x0001ec69", + "platform_set_rf_clk_source": "0x0001ec75", + "platform_set_rf_init_data": "0x0001ec81", + "platform_set_rf_power_mapping": "0x0001ec8d", + "platform_set_timer": "0x0001ec99", + "platform_shutdown": "0x0001ec9d", + "platform_switch_app": "0x0001eca1", + "platform_trace_raw": "0x0001eccd", + "platform_write_persistent_reg": "0x0001ece5", + "printf_hexdump": "0x0001ee99", + "pvPortMalloc": "0x0001f98d", + "pvTaskIncrementMutexHeldCount": "0x0001fa75", + "pvTimerGetTimerID": "0x0001fa8d", + "pxPortInitialiseStack": "0x0001fab9", + "reverse_128": "0x0001fc99", + "reverse_24": "0x0001fc9f", + "reverse_256": "0x0001fca5", + "reverse_48": "0x0001fcab", + "reverse_56": "0x0001fcb1", + "reverse_64": "0x0001fcb7", + "reverse_bd_addr": "0x0001fcbd", + "reverse_bytes": "0x0001fcc3", + "sm_add_event_handler": "0x0001ffb1", + "sm_address_resolution_lookup": "0x00020109", + "sm_authenticated": "0x000204b1", + "sm_authorization_decline": "0x000204bf", + "sm_authorization_grant": "0x000204df", + "sm_authorization_state": "0x000204ff", + "sm_bonding_decline": "0x00020519", + "sm_config": "0x00020975", + "sm_config_conn": "0x000209a9", + "sm_encryption_key_size": "0x00020b63", + "sm_just_works_confirm": "0x000210e9", + "sm_le_device_key": "0x00021429", + "sm_passkey_input": "0x000214bf", + "sm_private_random_address_generation_get": "0x00021881", + "sm_private_random_address_generation_get_mode": "0x00021889", + "sm_private_random_address_generation_set_mode": "0x00021895", + "sm_private_random_address_generation_set_update_period": "0x000218bd", + "sm_register_external_ltk_callback": "0x000219f9", + "sm_register_oob_data_callback": "0x00021a05", + "sm_request_pairing": "0x00021a11", + "sm_send_security_request": "0x000224ef", + "sm_set_accepted_stk_generation_methods": "0x00022515", + "sm_set_authentication_requirements": "0x00022521", + "sm_set_encryption_key_size_range": "0x00022531", + "sscanf_bd_addr": "0x0002287d", + "sysSetPublicDeviceAddr": "0x00022c79", + "uuid128_to_str": "0x00023439", + "uuid_add_bluetooth_prefix": "0x00023491", + "uuid_has_bluetooth_prefix": "0x000234b1", + "uxListRemove": "0x000234cd", + "uxQueueMessagesWaiting": "0x000234f5", + "uxQueueMessagesWaitingFromISR": "0x0002351d", + "uxQueueSpacesAvailable": "0x00023539", + "uxTaskGetStackHighWaterMark": "0x00023565", + "uxTaskPriorityGet": "0x00023585", + "uxTaskPriorityGetFromISR": "0x000235a1", + "vListInitialise": "0x0002365b", + "vListInitialiseItem": "0x00023671", + "vListInsert": "0x00023677", + "vListInsertEnd": "0x000236a7", + "vPortEndScheduler": "0x000236c1", + "vPortEnterCritical": "0x000236ed", + "vPortExitCritical": "0x00023731", + "vPortFree": "0x00023765", + "vPortSuppressTicksAndSleep": "0x000237f9", + "vPortValidateInterruptPriority": "0x00023921", + "vQueueDelete": "0x0002397d", + "vQueueWaitForMessageRestricted": "0x000239a9", + "vTaskDelay": "0x000239f1", + "vTaskInternalSetTimeOutState": "0x00023a3d", + "vTaskMissedYield": "0x00023a4d", + "vTaskPlaceOnEventList": "0x00023a59", + "vTaskPlaceOnEventListRestricted": "0x00023a91", + "vTaskPriorityDisinheritAfterTimeout": "0x00023ad1", + "vTaskPrioritySet": "0x00023b7d", + "vTaskResume": "0x00023c45", + "vTaskStartScheduler": "0x00023cc9", + "vTaskStepTick": "0x00023d59", + "vTaskSuspend": "0x00023d89", + "vTaskSuspendAll": "0x00023e45", + "vTaskSwitchContext": "0x00023e55", + "xPortStartScheduler": "0x00023efd", + "xQueueAddToSet": "0x00023fc5", + "xQueueCreateCountingSemaphore": "0x00023fe9", + "xQueueCreateCountingSemaphoreStatic": "0x00024025", + "xQueueCreateMutex": "0x00024069", + "xQueueCreateMutexStatic": "0x0002407f", + "xQueueCreateSet": "0x00024099", + "xQueueGenericCreate": "0x000240a1", + "xQueueGenericCreateStatic": "0x000240ed", + "xQueueGenericReset": "0x00024155", + "xQueueGenericSend": "0x000241e1", + "xQueueGenericSendFromISR": "0x0002434d", + "xQueueGiveFromISR": "0x0002440d", + "xQueueGiveMutexRecursive": "0x000244b1", + "xQueueIsQueueEmptyFromISR": "0x000244f1", + "xQueueIsQueueFullFromISR": "0x00024515", + "xQueuePeek": "0x0002453d", + "xQueuePeekFromISR": "0x00024665", + "xQueueReceive": "0x000246d1", + "xQueueReceiveFromISR": "0x000247fd", + "xQueueRemoveFromSet": "0x00024891", + "xQueueSelectFromSet": "0x000248b3", + "xQueueSelectFromSetFromISR": "0x000248c5", + "xQueueSemaphoreTake": "0x000248d9", + "xQueueTakeMutexRecursive": "0x00024a45", + "xTaskCheckForTimeOut": "0x00024a89", + "xTaskCreate": "0x00024af9", + "xTaskCreateStatic": "0x00024b55", + "xTaskGetCurrentTaskHandle": "0x00024bc5", + "xTaskGetSchedulerState": "0x00024bd1", + "xTaskGetTickCount": "0x00024bed", + "xTaskGetTickCountFromISR": "0x00024bf9", + "xTaskIncrementTick": "0x00024c09", + "xTaskPriorityDisinherit": "0x00024cd5", + "xTaskPriorityInherit": "0x00024d69", + "xTaskRemoveFromEventList": "0x00024dfd", + "xTaskResumeAll": "0x00024e7d", + "xTaskResumeFromISR": "0x00024f45", + "xTimerCreate": "0x00024fd1", + "xTimerCreateStatic": "0x00025005", + "xTimerCreateTimerTask": "0x0002503d", + "xTimerGenericCommand": "0x000250a9", + "xTimerGetExpiryTime": "0x00025119", + "xTimerGetTimerDaemonTaskHandle": "0x00025139" } \ No newline at end of file diff --git a/bundles/typical/ING9188xx/meta.json b/bundles/typical/ING9188xx/meta.json index 49cc80d0e..a2c2b1af6 100644 --- a/bundles/typical/ING9188xx/meta.json +++ b/bundles/typical/ING9188xx/meta.json @@ -4,15 +4,21 @@ }, "ram": { "base": 536870912, - "size": 29876 + "size": 29812 }, "rom": { "base": 16384, - "size": 141844 + "size": 142228 + }, + "var": { + "link_layer_features": { + "addr": 154380, + "value": "3ff9ff0700000000" + } }, "version": [ 1, 9, - 41 + 56 ] } \ No newline at end of file diff --git a/bundles/typical/ING9188xx/platform.bin b/bundles/typical/ING9188xx/platform.bin index bcc68f410..811169136 100644 Binary files a/bundles/typical/ING9188xx/platform.bin and b/bundles/typical/ING9188xx/platform.bin differ diff --git a/bundles/typical/inc/bluetooth.h b/bundles/typical/inc/bluetooth.h index 44c58585a..8d306ff5e 100644 --- a/bundles/typical/inc/bluetooth.h +++ b/bundles/typical/inc/bluetooth.h @@ -40,10 +40,14 @@ typedef uint8_t bd_addr_t[BD_ADDR_LEN]; typedef enum { BD_ADDR_TYPE_LE_PUBLIC = 0, BD_ADDR_TYPE_LE_RANDOM = 0x01, - BD_ADDR_TYPE_LE_RESOVLED_PUB = 0x02, - BD_ADDR_TYPE_LE_RESOVLED_RAN = 0x03 + BD_ADDR_TYPE_LE_RESOLVED_PUB = 0x02, + BD_ADDR_TYPE_LE_RESOLVED_RAN = 0x03 } bd_addr_type_t; +// back-compatibility for typos +#define BD_ADDR_TYPE_LE_RESOVLED_PUB BD_ADDR_TYPE_LE_RESOLVED_PUB +#define BD_ADDR_TYPE_LE_RESOVLED_RAN BD_ADDR_TYPE_LE_RESOLVED_RAN + /** * @brief link key */ @@ -718,7 +722,7 @@ typedef enum { #define SM_AUTHREQ_NO_BONDING 0x00 #define SM_AUTHREQ_BONDING 0x01 #define SM_AUTHREQ_MITM_PROTECTION 0x04 -#define SM_AUTHREQ_SC 0x08 +#define SM_AUTHREQ_SC 0x08 // support of LE Secure Connections pairing // Key distribution flags used by spec #define SM_KEYDIST_ENC_KEY 0X01 diff --git a/bundles/typical/inc/btstack_defines.h b/bundles/typical/inc/btstack_defines.h index a8d08006c..25f1463b0 100644 --- a/bundles/typical/inc/btstack_defines.h +++ b/bundles/typical/inc/btstack_defines.h @@ -385,6 +385,20 @@ */ #define SM_EVENT_STATE_CHANGED 0xDC + /** + * @format H1B1 + * @param handle + * @param show calculated numeric value that needs to be compared + */ +#define SM_EVENT_NUMERIC_COMPARISON_REQUEST 0xDD + +/** + * @format PP + * @param irk + * @param dhk + */ +#define SM_EVENT_IRK_DHK_RESULT 0xDE + // GAP /** diff --git a/bundles/typical/inc/btstack_event.h b/bundles/typical/inc/btstack_event.h index e5ab49a55..dc87fa82a 100644 --- a/bundles/typical/inc/btstack_event.h +++ b/bundles/typical/inc/btstack_event.h @@ -107,6 +107,21 @@ uint32_t btstack_push_user_runnable(f_btstack_user_runnable fun, void *data, con */ uint8_t btstack_reset(void); +typedef struct btstack_capabilities +{ + uint16_t adv_set_num; // max number of advertising sets + uint16_t conn_num; // max number of connections + uint16_t max_mtu; // max MTU + uint16_t device_db_num; // max number of devices in database +} btstack_capabilities_t; + +/** + * @brief Get BT stack capabilities. + * + * @param[out] capabilities see `btstack_capabilities_t`. + */ +void btstack_get_capabilities(btstack_capabilities_t *capabilities); + /*** * @brief Get subevent code for le event * @param event packet @@ -780,6 +795,26 @@ static __INLINE hci_con_handle_t sm_event_numeric_comparison_get_handle(const ui return little_endian_read_16(event, 2); } +/** + * @brief Get field addr_type from event SM_EVENT_NUMERIC_COMPARISON_REQUEST + * @param event packet + * @return addr_type + * @note: btstack_type 1 + */ +static __INLINE uint8_t sm_event_numeric_comparison_get_addr_type(const uint8_t * event){ + return *decode_event_offset(event, uint8_t, 4); +} + +/** + * @brief Get field address from event SM_EVENT_NUMERIC_COMPARISON_REQUEST + * @param event packet + * @param Pointer to storage for address + * @note: btstack_type B + */ +static __INLINE void sm_event_numeric_comparison_get_address(const uint8_t * event, uint8_t * address){ + reverse_bd_addr(decode_event_offset(event, uint8_t, 5), address); +} + /** * @brief Get field compare value from event SM_EVENT_NUMERIC_COMPARISON_REQUEST * @param event packet @@ -790,6 +825,24 @@ static __INLINE uint32_t sm_event_numeric_comparison_get_compare_value(const uin return little_endian_read_32(event, 11); } +/** + * @brief Get IRK from event SM_EVENT_IRK_DHK_RESULT + * @param event packet + * @return irk + */ +static __INLINE const uint8_t *sm_event_irk_dhk_result_get_irk(const uint8_t *event) { + return *decode_event_offset(event, uint8_t *, 2); +} + +/** + * @brief Get DHK from event SM_EVENT_IRK_DHK_RESULT + * @param event packet + * @return dhk + */ +static __INLINE const uint8_t *sm_event_irk_dhk_result_get_dhk(const uint8_t *event) { + return *decode_event_offset(event, uint8_t *, 2 + sizeof(uintptr_t)); +} + /** * @brief Get field handle from event GAP_EVENT_SECURITY_LEVEL * @param event packet diff --git a/bundles/typical/inc/gap.h b/bundles/typical/inc/gap.h index 94ec41d4e..020bb0b27 100644 --- a/bundles/typical/inc/gap.h +++ b/bundles/typical/inc/gap.h @@ -54,11 +54,27 @@ uint8_t gap_set_random_device_address(const uint8_t *address); /** * @brief Disconnect connection with handle * + * This is equivalent to `gap_disconnect2(handle, 0x13)`. + * * @param handle Used to identify an advertising set. Range: 0x00 to 0xEF * @return 0: Message is sent out or the connection already release */ uint8_t gap_disconnect(hci_con_handle_t handle); +/** + * @brief Disconnect connection with handle + * + * @param handle Used to identify an advertising set. Range: 0x00 to 0xEF + * @param reason Reason: + * - Authentication Failure error code (0x05) + * - Other End Terminated Connection error codes (0x13 to 0x15) + * - Unsupported Remote Feature error code (0x1A) + * - Pairing with Unit Key Not Supported error code (0x29) + * - Unacceptable Connection Parameters error code (0x3B) + * @return 0: Message is sent out or the connection already release + */ +uint8_t gap_disconnect2(hci_con_handle_t handle, uint8_t reason); + /** * @brief disconnect multi-connections */ @@ -70,7 +86,7 @@ void gap_disconnect_all(void); * @param[in] addtype BLE address type * @return 0: Message is sent to controller */ -uint8_t gap_add_whitelist(const uint8_t *address,bd_addr_type_t addtype); +uint8_t gap_add_whitelist(const uint8_t *address, bd_addr_type_t addtype); /** * @brief remove whitelist from controller @@ -79,7 +95,7 @@ uint8_t gap_add_whitelist(const uint8_t *address,bd_addr_type_t addtype); * @param addtype BLE address type * @return 0: Message is sent to controller */ -uint8_t gap_remove_whitelist(const uint8_t *address,bd_addr_type_t addtype); +uint8_t gap_remove_whitelist(const uint8_t *address, bd_addr_type_t addtype); /** * @brief clear white lists in controller @@ -88,6 +104,122 @@ uint8_t gap_remove_whitelist(const uint8_t *address,bd_addr_type_t addtype); */ uint8_t gap_clear_white_lists(void); +/** + * @brief read white lists size in controller + * + * @return 0: message sent out others: failed + */ +uint8_t gap_read_white_lists_size(void); + +/** + * @brief Add one device to the resolving list used to generate and resolve + * Resolvable Private Addresses in the Controller. + * + * @param address peer identity address + * @param addtype peer identity address type + * @param peer_irk IRK of the peer device + * @param local_irk IRK of the local device + * @return 0: message sent out others: failed + */ +// uint8_t gap_add_dev_to_resolving_list(const uint8_t *address, bd_addr_type_t addtype, +// const uint8_t *peer_irk, const uint8_t *local_irk); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Remove one device from the resolving list used to resolve Resolvable + * Private Addresses in the Controller. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_remove_dev_from_resolving_list(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Remove all devices from the resolving list used to resolve Resolvable + * Private Addresses in the Controller. + * + * @return 0: message sent out others: failed + */ +// uint8_t gap_clear_resolving_list(void); +// WARNING: ^^^ this API is not available in this release + + +// LE Privacy Mode +typedef enum privacy_mode +{ + PRIVACY_MODE_NETWORK = 0, // Network Privacy Mode (default) + // Identity address is not accepted if IRK is available + PRIVACY_MODE_DEVICE = 1, // Device Privacy Mode + // Identity address is accepted even if IRK is available +} privacy_mode_t; + +/** + * @brief Specify the privacy mode to be used for a given entry on the resolving list. + * + * @param address peer identity address + * @param addtype peer identity address type + * @param privacy_mode privacy mode for this peer device + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_privacy_mode(const uint8_t *address, bd_addr_type_t addtype, +// privacy_mode_t privacy_mode); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Get the current peer Resolvable Private Address being used for the + * corresponding peer Public and Random (static) Identity Address. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_read_peer_resolving_addr(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Get the current local Resolvable Private Address being used for the + * corresponding peer Identity Address. + * + * @param address peer identity address + * @param addtype peer identity address type + * @return 0: message sent out others: failed + */ +// uint8_t gap_read_local_resolving_addr(const uint8_t *address, bd_addr_type_t addtype); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Enable resolution of Resolvable Private Addresses in the Controller. + * + * @param enable address resolution enable + * 0: disabled (default) + * 1: enabled + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_addr_resolution_enable(const uint8_t enable); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief Set the length of time the Controller uses a Resolvable Private Address + * before a new resolvable private address is generated and starts being used. + * + * @param rpa_timeout RPA_Timeout measured in seconds + * Range: 0x0001 to 0x0E10 + * Time range: 1 s to 1 hour + * Default: 0x0384 (900 s or 15 minutes) + * @return 0: message sent out others: failed + */ +// uint8_t gap_set_resolvable_private_addr_timeout(uint16_t rpa_timeout); +// WARNING: ^^^ this API is not available in this release + + /** * @brief read rssi value of a appointed hci connection * @@ -290,13 +422,13 @@ typedef enum scan_filter_policy SCAN_ACCEPT_WLIST_EXCEPT_NOT_DIRECTED, // Accept all advertising packets except directed advertising packets // where the initiator's identity address does not address this device - SCAN_ACCEPT_ALL_EXCEPT_IDENTITY_NOT_MATCH, + // SCAN_ACCEPT_ALL_EXCEPT_IDENTITY_NOT_MATCH, // Accept all advertising packets except: // 1. advertising packets where the advertiser's identity address is not in // the White List; and // 2. directed advertising packets where the initiator's identity address // does not address this device - SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH + // SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH } scan_filter_policy_t; /** @@ -318,6 +450,9 @@ uint8_t gap_set_ext_scan_para(const bd_addr_type_t own_addr_type, const scan_fil /** * @brief to set the extended scan response data for an advertising set * + * Note: Scan response data is cleared after `gap_set_ext_adv_para()` on the same + * advertising set handle. + * * @param adv_handle handle of advertising set handle * * @param length length of advertising data @@ -482,6 +617,9 @@ typedef enum adv_data_frag_pref /** * @brief to set extended advertising data * + * Note: Advertising data is cleared after `gap_set_ext_adv_para()` on the same + * advertising set handle. + * * @param adv_handle advertising set handle. * * @param length advertising data length @@ -497,6 +635,9 @@ uint8_t gap_set_ext_adv_data(const uint8_t adv_handle, uint16_t length, const ui /** * @brief LE Set Periodic Advertising Data command * + * Note: Advertising data is cleared after `gap_set_ext_adv_para()` and + * `gap_set_periodic_adv_para()` on the same advertising set handle. + * * @param adv_handle advertising set handle. * * @param length advertising data length (<= 1650 bytes) @@ -723,6 +864,7 @@ typedef struct { // Supervision timeout for the LE Link, unit is 10ms uint16_t supervision_timeout; // Informative parameter recommending the min/max length of connection event needed for this LE connection + // unit is 625us uint16_t min_ce_len; uint16_t max_ce_len; } conn_para_t; diff --git a/bundles/typical/inc/le_device_db.h b/bundles/typical/inc/le_device_db.h index b81d04f5a..68de61b61 100644 --- a/bundles/typical/inc/le_device_db.h +++ b/bundles/typical/inc/le_device_db.h @@ -16,14 +16,15 @@ typedef struct le_device_memory_db { // Identification uint8_t addr_type; - uint8_t key_size; - uint8_t authenticated; - uint8_t authorized; + uint8_t key_size; + uint8_t authenticated; + uint8_t authorized:1; + uint8_t sm_sc:1; bd_addr_t addr; sm_key_t irk; - // Stored pairing information allows to re-establish an enncrypted connection + // Stored pairing information allows to re-establish an encrypted connection // with a peripheral that doesn't have any persistent memory sm_key_t ltk; uint16_t ediv; @@ -36,7 +37,6 @@ typedef struct le_device_memory_db { // Signed Writes by us sm_key_t local_csrk; uint32_t local_counter; - } le_device_memory_db_t; #pragma pack (pop) diff --git a/bundles/typical/inc/ll_api.h b/bundles/typical/inc/ll_api.h index 24558161d..f84ac1c76 100644 --- a/bundles/typical/inc/ll_api.h +++ b/bundles/typical/inc/ll_api.h @@ -33,6 +33,25 @@ typedef enum ll_config_item_e LL_CFG_FEATURE_SET_MASK, } ll_config_item_t; +typedef struct ll_capabilities +{ + const uint8_t *features; // Link Layer features + uint16_t adv_set_num; // max number of advertising sets + uint16_t conn_num; // max number of connections + uint16_t whitelist_size; // size of whitelists + uint16_t resolving_list_size; // size of resolving list + uint16_t periodic_advertiser_list_size; // size of periodic advertiser list + uint16_t adv_dup_filter_size; // size of items for filtering + // advertising duplication +} ll_capabilities_t; + +/** + * @brief Get Link Layer capabilities. + * + * @param[out] capabilities see `ll_capabilities_t`. + */ +void ll_get_capabilities(ll_capabilities_t *capabilities); + /** **************************************************************************************** * @brief Config LL specific parameters @@ -43,6 +62,26 @@ typedef enum ll_config_item_e */ void ll_config(ll_config_item_t item, uint32_t value); +/** + **************************************************************************************** + * @brief Get states of LL + * + * Note: Parameters can be set to NULL if the relevant states are not needed. + * + * @param[out] adv_states[1] states of all advertising sets + * Bit[n]: advertising set n is enabled + * @param[out] conn_states[1] states of all connections + * Bit[n]: connection n is active + * @param[out] sync_states[1] states of all synchronized periodic adv sets + * Bit[n]: sync_handle n is active + * @param[out] other_states[1] other states: + * Bit[0]: if scanning is ON + * Bit[1]: if initiating is ON + **************************************************************************************** + */ +void ll_get_states(uint32_t *adv_states, uint32_t *conn_states, + uint32_t *sync_states, uint32_t *other_states); + /** **************************************************************************************** * @brief set Tx power range diff --git a/bundles/typical/inc/os/FreeRTOSConfig.h b/bundles/typical/inc/os/FreeRTOSConfig.h index a852cbdce..30c697203 100644 --- a/bundles/typical/inc/os/FreeRTOSConfig.h +++ b/bundles/typical/inc/os/FreeRTOSConfig.h @@ -91,17 +91,27 @@ #ifdef POWER_SAVING #define configUSE_TICKLESS_IDLE 1 #endif -#define configSYSTICK_CLOCK_HZ 32768 -#ifdef TARGET_FPGA -#define configCPU_CLOCK_HZ ( ( unsigned long ) 32000000 ) +#define configSYSTICK_CLOCK_HZ RTC_CLK_FREQ + +#if (INGCHIPS_FAMILY == INGCHIPS_FAMILY_918) +#define configCPU_CLOCK_HZ PLL_CLK_FREQ +#elif (INGCHIPS_FAMILY == INGCHIPS_FAMILY_916) +#define configCPU_CLOCK_HZ SYSCTRL_GetHClk() #else -#define configCPU_CLOCK_HZ ( ( unsigned long ) 48000000 ) +#error unknow chip family #endif + +#if (configSYSTICK_CLOCK_HZ == 32768) #define configTICK_RATE_HZ ( ( TickType_t ) 1024 ) +#elif (configSYSTICK_CLOCK_HZ == 50000) +#define configTICK_RATE_HZ ( ( TickType_t ) 1000 ) +#else +#error configSYSTICK_CLOCK_HZ +#endif #define configMAX_PRIORITIES ( 15 ) #define configMINIMAL_STACK_SIZE ( ( unsigned short ) 128 ) #ifndef configTOTAL_HEAP_SIZE -#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 23520 ) ) +#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 24896 ) ) #endif #define configMAX_TASK_NAME_LEN ( 16 ) #define configUSE_TRACE_FACILITY 0 diff --git a/bundles/typical/inc/platform_api.h b/bundles/typical/inc/platform_api.h index 78ed07d0b..a81fe121f 100644 --- a/bundles/typical/inc/platform_api.h +++ b/bundles/typical/inc/platform_api.h @@ -113,7 +113,7 @@ typedef enum PLATFORM_CB_EVT_LLE_INIT, // when allocation on heap fails (heap out of memory) - // NOTE: param (void *data) is cased from an integer identifying which heap is OOM: + // NOTE: param (void *data) is casted from an integer identifying which heap is OOM: // * 0: FreeRTOS's heap; // * 1: Link Layer's heap; // * 2: Link Layer's task pool. @@ -327,7 +327,7 @@ typedef struct /** **************************************************************************************** - * @brief Get heap status + * @brief Get status of built-in RTOS's heap * * @param[out] status heap status **************************************************************************************** @@ -374,7 +374,7 @@ void platform_switch_app(const uint32_t app_addr); * in power saving mode. * * For ING918: the least FOUR significant bits of `value` are saved; - * For ING916: the least TWO significant bits of `value` are saved. + * For ING916: the least FIVE significant bits of `value` are saved. * * @param[in] value value **************************************************************************************** @@ -464,8 +464,13 @@ typedef enum PLATFORM_CFG_PS_DBG_4, // Debugging parameters for ING916. Default (0) // Bit [0]: `platform_shutdown` uses DEEPER SLEEP (1) or SLEEP (0) PLATFORM_CFG_FAST_DEEP_SLEEP_TIME_REDUCTION, // sleep time reduction (fast deep sleep mode) in us. - // Requirement: < PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION + // Requirement: <= PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION + // When equal to PLATFORM_CFG_DEEP_SLEEP_TIME_REDUCTION, fast deep sleep mode is not used // Only available for ING916 (default: ~2000us) + PLATFORM_CFG_AUTO_REDUCE_CLOCK_FREQ, // automatic reduce CPU clock frequency in these circumstances: + // * the default IDLE procedure + // * when entering sleep modes + // Only available for ING916 (default: Enabled) } platform_cfg_item_t; typedef enum @@ -604,7 +609,15 @@ uint64_t platform_get_us_time(void); */ void platform_printf(const char *format, ...); -// NOTE: for debug only +/** + **************************************************************************************** + * @brief Set public device address + * + * NOTE: This is for debug only. + * + * @param[in] addr device address in little-endian. + **************************************************************************************** + */ void sysSetPublicDeviceAddr(const unsigned char *addr); // set rf source @@ -783,6 +796,55 @@ void platform_set_abs_timer(f_platform_timer_callback callback, uint32_t abs_tim */ void platform_delete_timer(f_platform_timer_callback callback); +typedef void * platform_us_timer_handle_t; + +/** + **************************************************************************************** + * @brief Callback function of microsecond (us) resolution timer + * + * @param[in] timer_handle handle of this timer + * @param[in] time_us internal timer counter when invoke this callback + * @param[in] param user parameter + * @return (must be NULL) + **************************************************************************************** + */ +typedef void * (* f_platform_us_timer_callback)(platform_us_timer_handle_t timer_handle, + uint64_t time_us, void *param); + +/** + **************************************************************************************** + * @brief Setup a single-shot platform timer with microsecond (us) resolution + * + * Although `abs_time` is in microsecond (us), callback is **not guaranteed** + * to be invoked with such resolution. + * + * This type of timers are much like `platform_set_timer`, except that: + * 1. resolution is higher; + * 2. callback is invoked in the context of an ISR. + * + * @param[in] abs_time when `platform_get_us_timer() == abs_time`, callback is invoked. + * @param[in] callback the callback function + * @param[in] param user parameter + * @return a non-NULL value when succeeded. Otherwise, NULL. + **************************************************************************************** + */ +platform_us_timer_handle_t platform_create_us_timer(uint64_t abs_time, + f_platform_us_timer_callback callback, void *param); + +/** + **************************************************************************************** + * @brief Cancel a platform timer previously created by `platform_create_us_timer` + * + * When a timer not needed any more, use this API to cancel it. + * + * @param[in] timer_handle handle of the timer + * @return 0 if succeeded else non-0 + * Note: non-0 means the callback function of the timer + * is executing. + **************************************************************************************** + */ +int platform_cancel_us_timer(platform_us_timer_handle_t timer_handle); + /** **************************************************************************************** * @brief Install a new RTOS stack for a specific platform task diff --git a/bundles/typical/inc/sm.h b/bundles/typical/inc/sm.h index 6dfc62bab..7e57fb927 100644 --- a/bundles/typical/inc/sm.h +++ b/bundles/typical/inc/sm.h @@ -55,14 +55,21 @@ typedef enum { /** * @brief Security configurations * + * These configurations can updated dynamically. Be careful: dynamically toggle + * `enable` will cause problems when SM is still working on any connection. + * + * After IRK/DHK are derived from `persistent`, `SM_EVENT_IRK_DHK_RESULT` is emitted. + * * @param[in] enable Enable (Bypass) SM (default: Disabled) * When disabled, SM can be enabled per connection by `sm_config_conn`. * @param[in] io_capability Default IO Capabilities * @param[in] request_security Let peripheral request an encrypted connection right after connecting * Not used normally. Bonding is triggered by access to protected attributes in ATT Server * @param[in] persistent persistent data for security & privacy + * @return 0 if ok else non-0. Possible causes for non-0 return value: + * * generation of internal keys(IRK/ERK) are under going. */ -void sm_config(uint8_t enable, +int sm_config(uint8_t enable, io_capability_t io_capability, int request_security, const sm_persistent_t *persistent); @@ -101,18 +108,71 @@ void sm_private_random_address_generation_set_update_period(int period_ms); const uint8_t *sm_private_random_address_generation_get(void); /** + * @brief Registers OOB Data Callback. + * + * The callback should set the oob_data and return 1 if OOB data is available. + * + * Signature of `get_oob_data_callback`: + * @param[in] address_type address type + * @param[in] addr address + * @param[out] oob_data OOB data (type `sm_key_t`) + * @return 1 if OOB data is available, else 0. * - * @brief Registers OOB Data Callback. The callback should set the oob_data and return 1 if OOB data is availble * @param get_oob_data_callback */ -void sm_register_oob_data_callback( int (*get_oob_data_callback)(uint8_t addres_type, bd_addr_t addr, uint8_t * oob_data)); +void sm_register_oob_data_callback( int (*get_oob_data_callback)(uint8_t address_type, bd_addr_t addr, uint8_t * oob_data)); /** + * @brief Registers secure pairing OOB Data Callback. * - * @brief Registers secure pairing OOB Data Callback. The callback should set the peer_confirm & peer_random and return 1 if OOB data is availble - * @param get_oob_data_callback + * The callback should set the peer_confirm & peer_random and return 1 + * if OOB data is available. + * + * Signature of `get_sc_oob_data_callback`: + * @param[in] address_type address type + * @param[in] addr address + * @param[out] peer_confirm peer confirm value (type `sm_key_t`) + * @param[out] peer_random peer random value (type `sm_key_t`) + * @return 1 if OOB data is available, else 0. + * + * @param get_sc_oob_data_callback */ -// void sm_register_sc_oob_data_callback( int (*get_sc_oob_data_callback)(uint8_t addres_type, bd_addr_t addr, uint8_t *peer_confirm, uint8_t *peer_random)); +// void sm_register_sc_oob_data_callback(int (*get_sc_oob_data_callback)(uint8_t address_type, bd_addr_t addr, uint8_t *peer_confirm, uint8_t *peer_random)); +// WARNING: ^^^ this API is not available in this release + + +/** + * @brief (When secure pairing is used and OOB is selected) Start generate local + * OOB data (_confirm_ and _random_). + * + * After generated, _confirm_ and _random_ are passed to the callback. + * + * Each call of this function will generate a new P256 key pair that will used + * in **all** subsequent pairing attempts. When OOB is used, it is Developers's + * responsibility to refresh key pair properly. If OOB is not used, SM will + * re-generate a new key pair for each pairing attempt. + * + * BLUETOOTH CORE SPECIFICATION Version 5.4 | Vol 3, Part H, Section 2.3.6: + * + * > To protect a device's private key, a device should implement a method to + * > prevent an attacker from retrieving useful information about the device's private + * > key. For this purpose, a device should change its private key after every pairing + * > (successful or failed). Otherwise, it should change its private key whenever S + + * > 3F > 8, where S is the number of successful pairings and F the number of + * > failed attempts since the key was last changed. + * + * App can then pass these information together with device address to peer + * through OOB communication. + * + * Signature of `callback`: + * @param[out] confirm local confirm value (type `sm_key_t`) + * @param[out] random local random value (type `sm_key_t`) + * + * @param callback + * @return 0: started without error + * -1: previous OOB data is not generated yet + */ +// int sm_sc_generate_oob_data(void (*callback)(const uint8_t *confirm, const uint8_t *random)); // WARNING: ^^^ this API is not available in this release @@ -235,14 +295,6 @@ int sm_le_device_key(hci_con_handle_t con_handle); // WARNING: ^^^ this API is not available in this release -/** - * @brief When secure pairing is used and OOB is selected, use this function to prepare OOB data and share to peer. - * @param handle - */ -// int sm_sc_generate_oob_data(void (*callback)(uint8_t *peer_confirm, uint8_t *peer_random)); -// WARNING: ^^^ this API is not available in this release - - /** * * @brief Register a callback for get external LTK (for empty EDIV & Random) diff --git a/example_host/rpc_client/inc/brpc_calls.inc b/example_host/rpc_client/inc/brpc_calls.inc index ba50ce917..e1dfe7ead 100644 --- a/example_host/rpc_client/inc/brpc_calls.inc +++ b/example_host/rpc_client/inc/brpc_calls.inc @@ -670,18 +670,6 @@ hci_con_handle_t con_handle;uint16_t subrate_min;uint16_t subrate_max;uint16_t m .supervision_timeout = supervision_timeout}; #pragma pack (pop) struct node * _node = call_fun(1072,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} -uint8_t gap_aes_encrypt(const uint8_t * key, -const uint8_t * plaintext, -gap_hci_cmd_complete_cb_t cb, -void * user_data){LOG_D("gap_aes_encrypt...");remote_mem_map(key, 16 * sizeof(* key));remote_mem_map(plaintext, 16 * sizeof(* plaintext)); -#pragma pack (push, 1) -struct _param { -const uint8_t * key;const uint8_t * plaintext;gap_hci_cmd_complete_cb_t cb;void * user_data;} _param = {.key = key, -.plaintext = plaintext, -.cb = cb, -.user_data = user_data}; -#pragma pack (pop) -struct node * _node = call_fun(1073,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gap_rx_test_v2(uint8_t rx_channel, uint8_t phy, uint8_t modulation_index){LOG_D("gap_rx_test_v2...");; @@ -691,7 +679,7 @@ uint8_t rx_channel;uint8_t phy;uint8_t modulation_index;} _param = {.rx_channel .phy = phy, .modulation_index = modulation_index}; #pragma pack (pop) -struct node * _node = call_fun(1074,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1073,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gap_rx_test_v3(uint8_t rx_channel, uint8_t phy, uint8_t modulation_index, @@ -711,7 +699,7 @@ uint8_t rx_channel;uint8_t phy;uint8_t modulation_index;uint8_t expected_cte_len .switching_pattern_length = switching_pattern_length, .antenna_ids = antenna_ids}; #pragma pack (pop) -struct node * _node = call_fun(1075,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1074,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gap_tx_test_v2(uint8_t tx_channel, uint8_t test_data_length, uint8_t packet_payload, @@ -723,7 +711,7 @@ uint8_t tx_channel;uint8_t test_data_length;uint8_t packet_payload;uint8_t phy;} .packet_payload = packet_payload, .phy = phy}; #pragma pack (pop) -struct node * _node = call_fun(1076,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1075,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gap_tx_test_v4(uint8_t tx_channel, uint8_t test_data_length, uint8_t packet_payload, @@ -745,13 +733,13 @@ uint8_t tx_channel;uint8_t test_data_length;uint8_t packet_payload;uint8_t phy;u .antenna_ids = antenna_ids, .tx_power_level = tx_power_level}; #pragma pack (pop) -struct node * _node = call_fun(1077,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1076,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gap_test_end(void){LOG_D("gap_test_end...");; #pragma pack (push, 1) struct _param { } _param = {}; #pragma pack (pop) -struct node * _node = call_fun(1078,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1077,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gap_vendor_tx_continuous_wave(uint8_t enable, uint8_t power_level_index, uint16_t freq){LOG_D("gap_vendor_tx_continuous_wave...");; @@ -761,7 +749,7 @@ uint8_t enable;uint8_t power_level_index;uint16_t freq;} _param = {.enable = ena .power_level_index = power_level_index, .freq = freq}; #pragma pack (pop) -struct node * _node = call_fun(1079,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1078,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} int att_server_deferred_read_response(hci_con_handle_t con_handle, uint16_t attribute_handle, const uint8_t * value, @@ -773,7 +761,7 @@ hci_con_handle_t con_handle;uint16_t attribute_handle;const uint8_t * value;uint .value = value, .value_len = value_len}; #pragma pack (pop) -struct node * _node = call_fun(1080,&_param,sizeof(_param));int _r= *(int *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1079,&_param,sizeof(_param));int _r= *(int *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} int att_server_notify(hci_con_handle_t con_handle, uint16_t attribute_handle, const uint8_t * value, @@ -785,7 +773,7 @@ hci_con_handle_t con_handle;uint16_t attribute_handle;const uint8_t * value;uint .value = value, .value_len = value_len}; #pragma pack (pop) -struct node * _node = call_fun(1081,&_param,sizeof(_param));int _r= *(int *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1080,&_param,sizeof(_param));int _r= *(int *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} int att_server_indicate(hci_con_handle_t con_handle, uint16_t attribute_handle, const uint8_t * value, @@ -797,13 +785,13 @@ hci_con_handle_t con_handle;uint16_t attribute_handle;const uint8_t * value;uint .value = value, .value_len = value_len}; #pragma pack (pop) -struct node * _node = call_fun(1082,&_param,sizeof(_param));int _r= *(int *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1081,&_param,sizeof(_param));int _r= *(int *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint16_t att_server_get_mtu(hci_con_handle_t con_handle){LOG_D("att_server_get_mtu...");; #pragma pack (push, 1) struct _param { hci_con_handle_t con_handle;} _param = {.con_handle = con_handle}; #pragma pack (pop) -struct node * _node = call_fun(1083,&_param,sizeof(_param));uint16_t _r= *(uint16_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1082,&_param,sizeof(_param));uint16_t _r= *(uint16_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_discover_primary_services(user_packet_handler_t callback, hci_con_handle_t con_handle){LOG_D("gatt_client_discover_primary_services...");; #pragma pack (push, 1) @@ -811,7 +799,7 @@ struct _param { user_packet_handler_t callback;hci_con_handle_t con_handle;} _param = {.callback = callback, .con_handle = con_handle}; #pragma pack (pop) -struct node * _node = call_fun(1084,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1083,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_discover_primary_services_by_uuid16(user_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t uuid16){LOG_D("gatt_client_discover_primary_services_by_uuid16...");; @@ -821,7 +809,7 @@ user_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t uuid16;} _pa .con_handle = con_handle, .uuid16 = uuid16}; #pragma pack (pop) -struct node * _node = call_fun(1085,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1084,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_discover_primary_services_by_uuid128(user_packet_handler_t callback, hci_con_handle_t con_handle, const uint8_t * uuid128){LOG_D("gatt_client_discover_primary_services_by_uuid128...");remote_mem_map(uuid128, 16 * sizeof(* uuid128)); @@ -831,7 +819,7 @@ user_packet_handler_t callback;hci_con_handle_t con_handle;const uint8_t * uuid1 .con_handle = con_handle, .uuid128 = uuid128}; #pragma pack (pop) -struct node * _node = call_fun(1086,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1085,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_find_included_services_for_service(user_packet_handler_t callback, hci_con_handle_t con_handle, const uint16_t start_group_handle, @@ -843,7 +831,7 @@ user_packet_handler_t callback;hci_con_handle_t con_handle;const uint16_t start_ .start_group_handle = start_group_handle, .end_group_handle = end_group_handle}; #pragma pack (pop) -struct node * _node = call_fun(1087,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1086,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_discover_characteristics_for_service(user_packet_handler_t callback, hci_con_handle_t con_handle, const uint16_t start_group_handle, @@ -855,7 +843,7 @@ user_packet_handler_t callback;hci_con_handle_t con_handle;const uint16_t start_ .start_group_handle = start_group_handle, .end_group_handle = end_group_handle}; #pragma pack (pop) -struct node * _node = call_fun(1088,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1087,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_discover_characteristics_for_handle_range_by_uuid16(btstack_packet_handler_t callback, const hci_con_handle_t con_handle, const uint16_t start_handle, @@ -869,7 +857,7 @@ btstack_packet_handler_t callback;const hci_con_handle_t con_handle;const uint16 .end_handle = end_handle, .uuid16 = uuid16}; #pragma pack (pop) -struct node * _node = call_fun(1089,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1088,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_discover_characteristics_for_handle_range_by_uuid128(btstack_packet_handler_t callback, const hci_con_handle_t con_handle, const uint16_t start_handle, @@ -883,7 +871,7 @@ btstack_packet_handler_t callback;const hci_con_handle_t con_handle;const uint16 .end_handle = end_handle, .uuid128 = uuid128}; #pragma pack (pop) -struct node * _node = call_fun(1090,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1089,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_discover_characteristic_descriptors(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_t * characteristic){LOG_D("gatt_client_discover_characteristic_descriptors...");remote_mem_map(characteristic, 1 * sizeof(* characteristic)); @@ -893,7 +881,7 @@ btstack_packet_handler_t callback;hci_con_handle_t con_handle;gatt_client_charac .con_handle = con_handle, .characteristic = characteristic}; #pragma pack (pop) -struct node * _node = call_fun(1091,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1090,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_read_value_of_characteristic_using_value_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle){LOG_D("gatt_client_read_value_of_characteristic_using_value_handle...");; @@ -903,7 +891,7 @@ btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t character .con_handle = con_handle, .characteristic_value_handle = characteristic_value_handle}; #pragma pack (pop) -struct node * _node = call_fun(1092,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1091,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_read_value_of_characteristics_by_uuid16(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t start_handle, @@ -917,7 +905,7 @@ btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t start_han .end_handle = end_handle, .uuid16 = uuid16}; #pragma pack (pop) -struct node * _node = call_fun(1093,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1092,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_read_value_of_characteristics_by_uuid128(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t start_handle, @@ -931,7 +919,7 @@ btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t start_han .end_handle = end_handle, .uuid128 = uuid128}; #pragma pack (pop) -struct node * _node = call_fun(1094,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1093,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_read_long_value_of_characteristic_using_value_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle){LOG_D("gatt_client_read_long_value_of_characteristic_using_value_handle...");; @@ -941,7 +929,7 @@ btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t character .con_handle = con_handle, .characteristic_value_handle = characteristic_value_handle}; #pragma pack (pop) -struct node * _node = call_fun(1095,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1094,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle, @@ -953,7 +941,7 @@ btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t character .characteristic_value_handle = characteristic_value_handle, .offset = offset}; #pragma pack (pop) -struct node * _node = call_fun(1096,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1095,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_read_multiple_characteristic_values(btstack_packet_handler_t callback, hci_con_handle_t con_handle, int num_value_handles, @@ -965,7 +953,7 @@ btstack_packet_handler_t callback;hci_con_handle_t con_handle;int num_value_hand .num_value_handles = num_value_handles, .value_handles = value_handles}; #pragma pack (pop) -struct node * _node = call_fun(1097,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1096,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_write_value_of_characteristic_without_response(hci_con_handle_t con_handle, uint16_t characteristic_value_handle, uint16_t length, @@ -977,7 +965,7 @@ hci_con_handle_t con_handle;uint16_t characteristic_value_handle;uint16_t length .length = length, .data = data}; #pragma pack (pop) -struct node * _node = call_fun(1098,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1097,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_signed_write_without_response(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t handle, @@ -991,7 +979,7 @@ btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t handle;ui .message_len = message_len, .message = message}; #pragma pack (pop) -struct node * _node = call_fun(1099,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1098,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_write_value_of_characteristic(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle, @@ -1005,7 +993,7 @@ btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t character .length = length, .data = data}; #pragma pack (pop) -struct node * _node = call_fun(1100,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1099,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_write_long_value_of_characteristic(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle, @@ -1019,7 +1007,7 @@ btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t character .length = length, .data = data}; #pragma pack (pop) -struct node * _node = call_fun(1101,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1100,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_write_long_value_of_characteristic_with_offset(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle, @@ -1035,7 +1023,7 @@ btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t character .length = length, .data = data}; #pragma pack (pop) -struct node * _node = call_fun(1102,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1101,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_reliable_write_long_value_of_characteristic(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t characteristic_value_handle, @@ -1049,7 +1037,7 @@ btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t character .length = length, .data = data}; #pragma pack (pop) -struct node * _node = call_fun(1103,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1102,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_read_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle){LOG_D("gatt_client_read_characteristic_descriptor_using_descriptor_handle...");; @@ -1059,7 +1047,7 @@ btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t descripto .con_handle = con_handle, .descriptor_handle = descriptor_handle}; #pragma pack (pop) -struct node * _node = call_fun(1104,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1103,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_read_long_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle){LOG_D("gatt_client_read_long_characteristic_descriptor_using_descriptor_handle...");; @@ -1069,7 +1057,7 @@ btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t descripto .con_handle = con_handle, .descriptor_handle = descriptor_handle}; #pragma pack (pop) -struct node * _node = call_fun(1105,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1104,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle, @@ -1081,7 +1069,7 @@ btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t descripto .descriptor_handle = descriptor_handle, .offset = offset}; #pragma pack (pop) -struct node * _node = call_fun(1106,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1105,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_write_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle, @@ -1095,7 +1083,7 @@ btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t descripto .length = length, .data = data}; #pragma pack (pop) -struct node * _node = call_fun(1107,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1106,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_write_long_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle, @@ -1109,7 +1097,7 @@ btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t descripto .length = length, .data = data}; #pragma pack (pop) -struct node * _node = call_fun(1108,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1107,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t descriptor_handle, @@ -1125,7 +1113,7 @@ btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t descripto .length = length, .data = data}; #pragma pack (pop) -struct node * _node = call_fun(1109,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1108,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_write_client_characteristic_configuration(btstack_packet_handler_t callback, hci_con_handle_t con_handle, gatt_client_characteristic_t * characteristic, @@ -1137,7 +1125,7 @@ btstack_packet_handler_t callback;hci_con_handle_t con_handle;gatt_client_charac .characteristic = characteristic, .configuration = configuration}; #pragma pack (pop) -struct node * _node = call_fun(1110,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1109,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_prepare_write(btstack_packet_handler_t callback, hci_con_handle_t con_handle, uint16_t attribute_handle, @@ -1153,7 +1141,7 @@ btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t attribute .length = length, .data = data}; #pragma pack (pop) -struct node * _node = call_fun(1111,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1110,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_execute_write(btstack_packet_handler_t callback, hci_con_handle_t con_handle){LOG_D("gatt_client_execute_write...");; #pragma pack (push, 1) @@ -1161,7 +1149,7 @@ struct _param { btstack_packet_handler_t callback;hci_con_handle_t con_handle;} _param = {.callback = callback, .con_handle = con_handle}; #pragma pack (pop) -struct node * _node = call_fun(1112,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1111,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} uint8_t gatt_client_cancel_write(btstack_packet_handler_t callback, hci_con_handle_t con_handle){LOG_D("gatt_client_cancel_write...");; #pragma pack (push, 1) @@ -1169,13 +1157,13 @@ struct _param { btstack_packet_handler_t callback;hci_con_handle_t con_handle;} _param = {.callback = callback, .con_handle = con_handle}; #pragma pack (pop) -struct node * _node = call_fun(1113,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1112,&_param,sizeof(_param));uint8_t _r= *(uint8_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} int gatt_client_is_ready(hci_con_handle_t con_handle){LOG_D("gatt_client_is_ready...");; #pragma pack (push, 1) struct _param { hci_con_handle_t con_handle;} _param = {.con_handle = con_handle}; #pragma pack (pop) -struct node * _node = call_fun(1114,&_param,sizeof(_param));int _r= *(int *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1113,&_param,sizeof(_param));int _r= *(int *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} void gatt_client_listen_for_characteristic_value_updates(gatt_client_notification_t * notification, btstack_packet_handler_t packet_handler, hci_con_handle_t con_handle, @@ -1187,8 +1175,8 @@ gatt_client_notification_t * notification;btstack_packet_handler_t packet_handle .con_handle = con_handle, .value_handle = value_handle}; #pragma pack (pop) -call_void_fun(1115,&_param,sizeof(_param));} -void sm_config(uint8_t enable, +call_void_fun(1114,&_param,sizeof(_param));} +int sm_config(uint8_t enable, io_capability_t io_capability, int request_security, const sm_persistent_t * persistent){LOG_D("sm_config...");; @@ -1199,31 +1187,31 @@ uint8_t enable;io_capability_t io_capability;int request_security;const sm_persi .request_security = request_security, .persistent = persistent}; #pragma pack (pop) -call_void_fun(1116,&_param,sizeof(_param));} +struct node * _node = call_fun(1115,&_param,sizeof(_param));int _r= *(int *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} void sm_private_random_address_generation_set_mode(gap_random_address_type_t random_address_type){LOG_D("sm_private_random_address_generation_set_mode...");; #pragma pack (push, 1) struct _param { gap_random_address_type_t random_address_type;} _param = {.random_address_type = random_address_type}; #pragma pack (pop) -call_void_fun(1117,&_param,sizeof(_param));} +call_void_fun(1116,&_param,sizeof(_param));} gap_random_address_type_t sm_private_random_address_generation_get_mode(void){LOG_D("sm_private_random_address_generation_get_mode...");; #pragma pack (push, 1) struct _param { } _param = {}; #pragma pack (pop) -struct node * _node = call_fun(1118,&_param,sizeof(_param));gap_random_address_type_t _r= *(gap_random_address_type_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1117,&_param,sizeof(_param));gap_random_address_type_t _r= *(gap_random_address_type_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} void sm_private_random_address_generation_set_update_period(int period_ms){LOG_D("sm_private_random_address_generation_set_update_period...");; #pragma pack (push, 1) struct _param { int period_ms;} _param = {.period_ms = period_ms}; #pragma pack (pop) -call_void_fun(1119,&_param,sizeof(_param));} +call_void_fun(1118,&_param,sizeof(_param));} void sm_set_accepted_stk_generation_methods(uint8_t accepted_stk_generation_methods){LOG_D("sm_set_accepted_stk_generation_methods...");; #pragma pack (push, 1) struct _param { uint8_t accepted_stk_generation_methods;} _param = {.accepted_stk_generation_methods = accepted_stk_generation_methods}; #pragma pack (pop) -call_void_fun(1120,&_param,sizeof(_param));} +call_void_fun(1119,&_param,sizeof(_param));} void sm_set_encryption_key_size_range(uint8_t min_size, uint8_t max_size){LOG_D("sm_set_encryption_key_size_range...");; #pragma pack (push, 1) @@ -1231,13 +1219,13 @@ struct _param { uint8_t min_size;uint8_t max_size;} _param = {.min_size = min_size, .max_size = max_size}; #pragma pack (pop) -call_void_fun(1121,&_param,sizeof(_param));} +call_void_fun(1120,&_param,sizeof(_param));} void sm_set_authentication_requirements(uint8_t auth_req){LOG_D("sm_set_authentication_requirements...");; #pragma pack (push, 1) struct _param { uint8_t auth_req;} _param = {.auth_req = auth_req}; #pragma pack (pop) -call_void_fun(1122,&_param,sizeof(_param));} +call_void_fun(1121,&_param,sizeof(_param));} int sm_address_resolution_lookup(uint8_t addr_type, bd_addr_t addr){LOG_D("sm_address_resolution_lookup...");remote_mem_map(addr, BD_ADDR_LEN * sizeof(* addr)); #pragma pack (push, 1) @@ -1245,7 +1233,7 @@ struct _param { uint8_t addr_type;const uint8_t * addr;} _param = {.addr_type = addr_type, .addr = addr}; #pragma pack (pop) -struct node * _node = call_fun(1123,&_param,sizeof(_param));int _r= *(int *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1122,&_param,sizeof(_param));int _r= *(int *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} void sm_config_conn(hci_con_handle_t con_handle, io_capability_t io_capability, uint8_t auth_req){LOG_D("sm_config_conn...");; @@ -1255,19 +1243,19 @@ hci_con_handle_t con_handle;io_capability_t io_capability;uint8_t auth_req;} _pa .io_capability = io_capability, .auth_req = auth_req}; #pragma pack (pop) -call_void_fun(1124,&_param,sizeof(_param));} +call_void_fun(1123,&_param,sizeof(_param));} void sm_bonding_decline(hci_con_handle_t con_handle){LOG_D("sm_bonding_decline...");; #pragma pack (push, 1) struct _param { hci_con_handle_t con_handle;} _param = {.con_handle = con_handle}; #pragma pack (pop) -call_void_fun(1125,&_param,sizeof(_param));} +call_void_fun(1124,&_param,sizeof(_param));} void sm_just_works_confirm(hci_con_handle_t con_handle){LOG_D("sm_just_works_confirm...");; #pragma pack (push, 1) struct _param { hci_con_handle_t con_handle;} _param = {.con_handle = con_handle}; #pragma pack (pop) -call_void_fun(1126,&_param,sizeof(_param));} +call_void_fun(1125,&_param,sizeof(_param));} void sm_passkey_input(hci_con_handle_t con_handle, uint32_t passkey){LOG_D("sm_passkey_input...");; #pragma pack (push, 1) @@ -1275,67 +1263,67 @@ struct _param { hci_con_handle_t con_handle;uint32_t passkey;} _param = {.con_handle = con_handle, .passkey = passkey}; #pragma pack (pop) -call_void_fun(1127,&_param,sizeof(_param));} +call_void_fun(1126,&_param,sizeof(_param));} void sm_send_security_request(hci_con_handle_t con_handle){LOG_D("sm_send_security_request...");; #pragma pack (push, 1) struct _param { hci_con_handle_t con_handle;} _param = {.con_handle = con_handle}; #pragma pack (pop) -call_void_fun(1128,&_param,sizeof(_param));} +call_void_fun(1127,&_param,sizeof(_param));} int sm_encryption_key_size(hci_con_handle_t con_handle){LOG_D("sm_encryption_key_size...");; #pragma pack (push, 1) struct _param { hci_con_handle_t con_handle;} _param = {.con_handle = con_handle}; #pragma pack (pop) -struct node * _node = call_fun(1129,&_param,sizeof(_param));int _r= *(int *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1128,&_param,sizeof(_param));int _r= *(int *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} int sm_authenticated(hci_con_handle_t con_handle){LOG_D("sm_authenticated...");; #pragma pack (push, 1) struct _param { hci_con_handle_t con_handle;} _param = {.con_handle = con_handle}; #pragma pack (pop) -struct node * _node = call_fun(1130,&_param,sizeof(_param));int _r= *(int *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1129,&_param,sizeof(_param));int _r= *(int *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} authorization_state_t sm_authorization_state(hci_con_handle_t con_handle){LOG_D("sm_authorization_state...");; #pragma pack (push, 1) struct _param { hci_con_handle_t con_handle;} _param = {.con_handle = con_handle}; #pragma pack (pop) -struct node * _node = call_fun(1131,&_param,sizeof(_param));authorization_state_t _r= *(authorization_state_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1130,&_param,sizeof(_param));authorization_state_t _r= *(authorization_state_t *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} void sm_request_pairing(hci_con_handle_t con_handle){LOG_D("sm_request_pairing...");; #pragma pack (push, 1) struct _param { hci_con_handle_t con_handle;} _param = {.con_handle = con_handle}; #pragma pack (pop) -call_void_fun(1132,&_param,sizeof(_param));} +call_void_fun(1131,&_param,sizeof(_param));} void sm_authorization_decline(hci_con_handle_t con_handle){LOG_D("sm_authorization_decline...");; #pragma pack (push, 1) struct _param { hci_con_handle_t con_handle;} _param = {.con_handle = con_handle}; #pragma pack (pop) -call_void_fun(1133,&_param,sizeof(_param));} +call_void_fun(1132,&_param,sizeof(_param));} void sm_authorization_grant(hci_con_handle_t con_handle){LOG_D("sm_authorization_grant...");; #pragma pack (push, 1) struct _param { hci_con_handle_t con_handle;} _param = {.con_handle = con_handle}; #pragma pack (pop) -call_void_fun(1134,&_param,sizeof(_param));} +call_void_fun(1133,&_param,sizeof(_param));} int sm_le_device_key(hci_con_handle_t con_handle){LOG_D("sm_le_device_key...");; #pragma pack (push, 1) struct _param { hci_con_handle_t con_handle;} _param = {.con_handle = con_handle}; #pragma pack (pop) -struct node * _node = call_fun(1135,&_param,sizeof(_param));int _r= *(int *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1134,&_param,sizeof(_param));int _r= *(int *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} void kv_remove_all(void){LOG_D("kv_remove_all...");; #pragma pack (push, 1) struct _param { } _param = {}; #pragma pack (pop) -call_void_fun(1136,&_param,sizeof(_param));} +call_void_fun(1135,&_param,sizeof(_param));} void kv_remove(const kvkey_t key){LOG_D("kv_remove...");; #pragma pack (push, 1) struct _param { const kvkey_t key;} _param = {.key = key}; #pragma pack (pop) -call_void_fun(1137,&_param,sizeof(_param));} +call_void_fun(1136,&_param,sizeof(_param));} int kv_put(const kvkey_t key, const uint8_t * data, int16_t length){LOG_D("kv_put...");remote_mem_map(data, length * sizeof(* data)); @@ -1345,22 +1333,22 @@ const kvkey_t key;const uint8_t * data;int16_t length;} _param = {.key = key, .data = data, .length = length}; #pragma pack (pop) -struct node * _node = call_fun(1138,&_param,sizeof(_param));int _r= *(int *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} +struct node * _node = call_fun(1137,&_param,sizeof(_param));int _r= *(int *)extract_ret_param(_node, NULL);GEN_OS()->free(_node);return _r;} void kv_value_modified(void){LOG_D("kv_value_modified...");; #pragma pack (push, 1) struct _param { } _param = {}; #pragma pack (pop) -call_void_fun(1139,&_param,sizeof(_param));} +call_void_fun(1138,&_param,sizeof(_param));} void kv_commit(int flag_always_write){LOG_D("kv_commit...");; #pragma pack (push, 1) struct _param { int flag_always_write;} _param = {.flag_always_write = flag_always_write}; #pragma pack (pop) -call_void_fun(1140,&_param,sizeof(_param));} +call_void_fun(1139,&_param,sizeof(_param));} void le_device_db_remove_key(int index){LOG_D("le_device_db_remove_key...");; #pragma pack (push, 1) struct _param { int index;} _param = {.index = index}; #pragma pack (pop) -call_void_fun(1141,&_param,sizeof(_param));} +call_void_fun(1140,&_param,sizeof(_param));} diff --git a/example_host/rpc_client/inc/brpc_fun_names.inc b/example_host/rpc_client/inc/brpc_fun_names.inc index 862cfd34b..8a1990605 100644 --- a/example_host/rpc_client/inc/brpc_fun_names.inc +++ b/example_host/rpc_client/inc/brpc_fun_names.inc @@ -70,72 +70,71 @@ case 1069: return "gap_set_path_loss_reporting_enable"; case 1070: return "gap_set_tx_power_reporting_enable"; case 1071: return "gap_set_default_subrate"; case 1072: return "gap_subrate_request"; -case 1073: return "gap_aes_encrypt"; -case 1074: return "gap_rx_test_v2"; -case 1075: return "gap_rx_test_v3"; -case 1076: return "gap_tx_test_v2"; -case 1077: return "gap_tx_test_v4"; -case 1078: return "gap_test_end"; -case 1079: return "gap_vendor_tx_continuous_wave"; -case 1080: return "att_server_deferred_read_response"; -case 1081: return "att_server_notify"; -case 1082: return "att_server_indicate"; -case 1083: return "att_server_get_mtu"; -case 1084: return "gatt_client_discover_primary_services"; -case 1085: return "gatt_client_discover_primary_services_by_uuid16"; -case 1086: return "gatt_client_discover_primary_services_by_uuid128"; -case 1087: return "gatt_client_find_included_services_for_service"; -case 1088: return "gatt_client_discover_characteristics_for_service"; -case 1089: return "gatt_client_discover_characteristics_for_handle_range_by_uuid16"; -case 1090: return "gatt_client_discover_characteristics_for_handle_range_by_uuid128"; -case 1091: return "gatt_client_discover_characteristic_descriptors"; -case 1092: return "gatt_client_read_value_of_characteristic_using_value_handle"; -case 1093: return "gatt_client_read_value_of_characteristics_by_uuid16"; -case 1094: return "gatt_client_read_value_of_characteristics_by_uuid128"; -case 1095: return "gatt_client_read_long_value_of_characteristic_using_value_handle"; -case 1096: return "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset"; -case 1097: return "gatt_client_read_multiple_characteristic_values"; -case 1098: return "gatt_client_write_value_of_characteristic_without_response"; -case 1099: return "gatt_client_signed_write_without_response"; -case 1100: return "gatt_client_write_value_of_characteristic"; -case 1101: return "gatt_client_write_long_value_of_characteristic"; -case 1102: return "gatt_client_write_long_value_of_characteristic_with_offset"; -case 1103: return "gatt_client_reliable_write_long_value_of_characteristic"; -case 1104: return "gatt_client_read_characteristic_descriptor_using_descriptor_handle"; -case 1105: return "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle"; -case 1106: return "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset"; -case 1107: return "gatt_client_write_characteristic_descriptor_using_descriptor_handle"; -case 1108: return "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle"; -case 1109: return "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset"; -case 1110: return "gatt_client_write_client_characteristic_configuration"; -case 1111: return "gatt_client_prepare_write"; -case 1112: return "gatt_client_execute_write"; -case 1113: return "gatt_client_cancel_write"; -case 1114: return "gatt_client_is_ready"; -case 1115: return "gatt_client_listen_for_characteristic_value_updates"; -case 1116: return "sm_config"; -case 1117: return "sm_private_random_address_generation_set_mode"; -case 1118: return "sm_private_random_address_generation_get_mode"; -case 1119: return "sm_private_random_address_generation_set_update_period"; -case 1120: return "sm_set_accepted_stk_generation_methods"; -case 1121: return "sm_set_encryption_key_size_range"; -case 1122: return "sm_set_authentication_requirements"; -case 1123: return "sm_address_resolution_lookup"; -case 1124: return "sm_config_conn"; -case 1125: return "sm_bonding_decline"; -case 1126: return "sm_just_works_confirm"; -case 1127: return "sm_passkey_input"; -case 1128: return "sm_send_security_request"; -case 1129: return "sm_encryption_key_size"; -case 1130: return "sm_authenticated"; -case 1131: return "sm_authorization_state"; -case 1132: return "sm_request_pairing"; -case 1133: return "sm_authorization_decline"; -case 1134: return "sm_authorization_grant"; -case 1135: return "sm_le_device_key"; -case 1136: return "kv_remove_all"; -case 1137: return "kv_remove"; -case 1138: return "kv_put"; -case 1139: return "kv_value_modified"; -case 1140: return "kv_commit"; -case 1141: return "le_device_db_remove_key"; +case 1073: return "gap_rx_test_v2"; +case 1074: return "gap_rx_test_v3"; +case 1075: return "gap_tx_test_v2"; +case 1076: return "gap_tx_test_v4"; +case 1077: return "gap_test_end"; +case 1078: return "gap_vendor_tx_continuous_wave"; +case 1079: return "att_server_deferred_read_response"; +case 1080: return "att_server_notify"; +case 1081: return "att_server_indicate"; +case 1082: return "att_server_get_mtu"; +case 1083: return "gatt_client_discover_primary_services"; +case 1084: return "gatt_client_discover_primary_services_by_uuid16"; +case 1085: return "gatt_client_discover_primary_services_by_uuid128"; +case 1086: return "gatt_client_find_included_services_for_service"; +case 1087: return "gatt_client_discover_characteristics_for_service"; +case 1088: return "gatt_client_discover_characteristics_for_handle_range_by_uuid16"; +case 1089: return "gatt_client_discover_characteristics_for_handle_range_by_uuid128"; +case 1090: return "gatt_client_discover_characteristic_descriptors"; +case 1091: return "gatt_client_read_value_of_characteristic_using_value_handle"; +case 1092: return "gatt_client_read_value_of_characteristics_by_uuid16"; +case 1093: return "gatt_client_read_value_of_characteristics_by_uuid128"; +case 1094: return "gatt_client_read_long_value_of_characteristic_using_value_handle"; +case 1095: return "gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset"; +case 1096: return "gatt_client_read_multiple_characteristic_values"; +case 1097: return "gatt_client_write_value_of_characteristic_without_response"; +case 1098: return "gatt_client_signed_write_without_response"; +case 1099: return "gatt_client_write_value_of_characteristic"; +case 1100: return "gatt_client_write_long_value_of_characteristic"; +case 1101: return "gatt_client_write_long_value_of_characteristic_with_offset"; +case 1102: return "gatt_client_reliable_write_long_value_of_characteristic"; +case 1103: return "gatt_client_read_characteristic_descriptor_using_descriptor_handle"; +case 1104: return "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle"; +case 1105: return "gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset"; +case 1106: return "gatt_client_write_characteristic_descriptor_using_descriptor_handle"; +case 1107: return "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle"; +case 1108: return "gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset"; +case 1109: return "gatt_client_write_client_characteristic_configuration"; +case 1110: return "gatt_client_prepare_write"; +case 1111: return "gatt_client_execute_write"; +case 1112: return "gatt_client_cancel_write"; +case 1113: return "gatt_client_is_ready"; +case 1114: return "gatt_client_listen_for_characteristic_value_updates"; +case 1115: return "sm_config"; +case 1116: return "sm_private_random_address_generation_set_mode"; +case 1117: return "sm_private_random_address_generation_get_mode"; +case 1118: return "sm_private_random_address_generation_set_update_period"; +case 1119: return "sm_set_accepted_stk_generation_methods"; +case 1120: return "sm_set_encryption_key_size_range"; +case 1121: return "sm_set_authentication_requirements"; +case 1122: return "sm_address_resolution_lookup"; +case 1123: return "sm_config_conn"; +case 1124: return "sm_bonding_decline"; +case 1125: return "sm_just_works_confirm"; +case 1126: return "sm_passkey_input"; +case 1127: return "sm_send_security_request"; +case 1128: return "sm_encryption_key_size"; +case 1129: return "sm_authenticated"; +case 1130: return "sm_authorization_state"; +case 1131: return "sm_request_pairing"; +case 1132: return "sm_authorization_decline"; +case 1133: return "sm_authorization_grant"; +case 1134: return "sm_le_device_key"; +case 1135: return "kv_remove_all"; +case 1136: return "kv_remove"; +case 1137: return "kv_put"; +case 1138: return "kv_value_modified"; +case 1139: return "kv_commit"; +case 1140: return "le_device_db_remove_key"; diff --git a/examples-gcc/central_fota/central_fota.ingw b/examples-gcc/central_fota/central_fota.ingw index eb46b8f08..e25297919 100644 --- a/examples-gcc/central_fota/central_fota.ingw +++ b/examples-gcc/central_fota/central_fota.ingw @@ -1,19 +1,25 @@ { "watchdog": true, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Programs\\gcc-arm-none-eabi-10.3-2021.10\\bin", "eflash_addr": "0x42000", @@ -69,8 +75,8 @@ "proxy": true }, "cmsis": "C:\/projects\/ingchips\/ingWizard\/CMSIS", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "printf_enable": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples-gcc/central_fota/central_fota.ld b/examples-gcc/central_fota/central_fota.ld index a72c6f9c0..4c820dfc2 100644 --- a/examples-gcc/central_fota/central_fota.ld +++ b/examples-gcc/central_fota/central_fota.ld @@ -8,7 +8,7 @@ MEMORY { FLASH (rx) : ORIGIN = 155648, LENGTH = 385024 - RAM (rwx) : ORIGIN = 536900792, LENGTH = 35656 + RAM (rwx) : ORIGIN = 536900728, LENGTH = 35720 } /* Linker script to place sections and symbol values. Should be used together diff --git a/examples-gcc/central_fota/makefile.conf b/examples-gcc/central_fota/makefile.conf index 55eb0ee01..c6321bcbb 100644 --- a/examples-gcc/central_fota/makefile.conf +++ b/examples-gcc/central_fota/makefile.conf @@ -98,7 +98,7 @@ $(OBJ_PATH): cmd /C mkdir $(OBJ_PATH) clean: - rm -rf $(APPNAME).axf $(APPNAME).bin $(APP_O_FILES) $(MAP_FILE) $(OBJ_PATH)/*.* $(OBJ_PATH)/*/*.* + rm -rf $(APPNAME).axf $(APPNAME).bin $(OBJ_PATH) else $(OBJ_PATH): mkdir $(OBJ_PATH) diff --git a/examples-gcc/get_started/get_started.ingw b/examples-gcc/get_started/get_started.ingw index 50b85d35e..99d6c8bc3 100644 --- a/examples-gcc/get_started/get_started.ingw +++ b/examples-gcc/get_started/get_started.ingw @@ -1,19 +1,25 @@ { "watchdog": true, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Programs\\gcc-arm-none-eabi-10.3-2021.10\\bin", "eflash_addr": "0x42000", @@ -70,8 +76,8 @@ "proxy": true }, "cmsis": "C:\/projects\/ingchips\/ingWizard\/CMSIS", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "printf_enable": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples-gcc/get_started/get_started.ld b/examples-gcc/get_started/get_started.ld index a72c6f9c0..4c820dfc2 100644 --- a/examples-gcc/get_started/get_started.ld +++ b/examples-gcc/get_started/get_started.ld @@ -8,7 +8,7 @@ MEMORY { FLASH (rx) : ORIGIN = 155648, LENGTH = 385024 - RAM (rwx) : ORIGIN = 536900792, LENGTH = 35656 + RAM (rwx) : ORIGIN = 536900728, LENGTH = 35720 } /* Linker script to place sections and symbol values. Should be used together diff --git a/examples-gcc/get_started/makefile.conf b/examples-gcc/get_started/makefile.conf index 974828356..688089de9 100644 --- a/examples-gcc/get_started/makefile.conf +++ b/examples-gcc/get_started/makefile.conf @@ -115,7 +115,7 @@ $(OBJ_PATH): cmd /C mkdir $(OBJ_PATH) clean: - cmd /c del /Q /S $(APPNAME).axf $(APPNAME).bin $(MAP_FILE) $(OBJ_PATH) + cmd /c del /Q /S $(APPNAME).axf $(APPNAME).bin $(OBJ_PATH) else $(OBJ_PATH): mkdir $(OBJ_PATH) diff --git a/examples-gcc/peripheral_console_liteos/makefile.conf b/examples-gcc/peripheral_console_liteos/makefile.conf index ffb97fcec..94ef958bb 100644 --- a/examples-gcc/peripheral_console_liteos/makefile.conf +++ b/examples-gcc/peripheral_console_liteos/makefile.conf @@ -131,7 +131,7 @@ $(OBJ_PATH): cmd /C mkdir $(OBJ_PATH) clean: - cmd /c del /Q /S $(APPNAME).axf $(APPNAME).bin $(MAP_FILE) $(OBJ_PATH) + cmd /c del /Q /S $(APPNAME).axf $(APPNAME).bin $(OBJ_PATH) else $(OBJ_PATH): mkdir $(OBJ_PATH) diff --git a/examples-gcc/peripheral_console_liteos/peripheral_console_liteos.ingw b/examples-gcc/peripheral_console_liteos/peripheral_console_liteos.ingw index aed5a0543..ae68e7a4f 100644 --- a/examples-gcc/peripheral_console_liteos/peripheral_console_liteos.ingw +++ b/examples-gcc/peripheral_console_liteos/peripheral_console_liteos.ingw @@ -1,19 +1,25 @@ { "watchdog": false, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 137888 + } + }, "rom": { - "size": 125016, + "size": 125388, "base": 16384 }, "ram": { - "size": 3372, + "size": 3308, "base": 536870912 }, "app": { "base": 147456 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Programs\\gcc-arm-none-eabi-10.3-2021.10\\bin", "eflash_addr": "0x42000", @@ -70,8 +76,8 @@ "proxy": true }, "cmsis": "C:\/projects\/ingchips\/ingWizard\/CMSIS", - "app_ram_size": 62160, - "app_ram_addr": 536874288, + "app_ram_size": 62224, + "app_ram_addr": 536874224, "printf_enable": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples-gcc/peripheral_console_liteos/peripheral_console_liteos.ld b/examples-gcc/peripheral_console_liteos/peripheral_console_liteos.ld index 15dbce642..f0121fc62 100644 --- a/examples-gcc/peripheral_console_liteos/peripheral_console_liteos.ld +++ b/examples-gcc/peripheral_console_liteos/peripheral_console_liteos.ld @@ -8,7 +8,7 @@ MEMORY { FLASH (rx) : ORIGIN = 147456, LENGTH = 393216 - RAM (rwx) : ORIGIN = 536874288, LENGTH = 62160 + RAM (rwx) : ORIGIN = 536874224, LENGTH = 62224 } /* Linker script to place sections and symbol values. Should be used together diff --git a/examples-gcc/peripheral_ibeacon/makefile.conf b/examples-gcc/peripheral_ibeacon/makefile.conf index 71c0f99b3..28771bf6f 100644 --- a/examples-gcc/peripheral_ibeacon/makefile.conf +++ b/examples-gcc/peripheral_ibeacon/makefile.conf @@ -97,7 +97,7 @@ $(OBJ_PATH): cmd /C mkdir $(OBJ_PATH) clean: - cmd /c del /Q /S $(APPNAME).axf $(APPNAME).bin $(MAP_FILE) $(OBJ_PATH) + cmd /c del /Q /S $(APPNAME).axf $(APPNAME).bin $(OBJ_PATH) else $(OBJ_PATH): mkdir $(OBJ_PATH) diff --git a/examples-gcc/peripheral_ibeacon/peripheral_ibeacon.ingw b/examples-gcc/peripheral_ibeacon/peripheral_ibeacon.ingw index 224521129..d54e82592 100644 --- a/examples-gcc/peripheral_ibeacon/peripheral_ibeacon.ingw +++ b/examples-gcc/peripheral_ibeacon/peripheral_ibeacon.ingw @@ -1,18 +1,24 @@ { "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Programs\\gcc-arm-none-eabi-10.3-2021.10\\bin", "ide_ver": "", @@ -50,8 +56,8 @@ "proxy": true }, "cmsis": "C:\/projects\/ingchips\/ingWizard\/CMSIS", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples-gcc/peripheral_ibeacon/peripheral_ibeacon.ld b/examples-gcc/peripheral_ibeacon/peripheral_ibeacon.ld index a72c6f9c0..4c820dfc2 100644 --- a/examples-gcc/peripheral_ibeacon/peripheral_ibeacon.ld +++ b/examples-gcc/peripheral_ibeacon/peripheral_ibeacon.ld @@ -8,7 +8,7 @@ MEMORY { FLASH (rx) : ORIGIN = 155648, LENGTH = 385024 - RAM (rwx) : ORIGIN = 536900792, LENGTH = 35656 + RAM (rwx) : ORIGIN = 536900728, LENGTH = 35720 } /* Linker script to place sections and symbol values. Should be used together diff --git a/examples-gcc/smart_home_hub/makefile.conf b/examples-gcc/smart_home_hub/makefile.conf index 9b1949eb6..bae71deca 100644 --- a/examples-gcc/smart_home_hub/makefile.conf +++ b/examples-gcc/smart_home_hub/makefile.conf @@ -119,7 +119,7 @@ $(OBJ_PATH): cmd /C mkdir $(OBJ_PATH) clean: - cmd /c del /Q /S $(APPNAME).axf $(APPNAME).bin obj + cmd /c del /Q /S $(APPNAME).axf $(APPNAME).bin $(OBJ_PATH) cmd /c del /Q /S $(NIM_CACHE_PATH) else $(OBJ_PATH): diff --git a/examples-gcc/smart_home_hub/nimmodules/bundle/gap.nim b/examples-gcc/smart_home_hub/nimmodules/bundle/gap.nim index 86f2e354f..af0388daa 100644 --- a/examples-gcc/smart_home_hub/nimmodules/bundle/gap.nim +++ b/examples-gcc/smart_home_hub/nimmodules/bundle/gap.nim @@ -270,12 +270,6 @@ type ## Accept all advertising packets except directed advertising packets not ## addressed to this device shall be ignored SCAN_ACCEPT_WLIST_EXCEPT_NOT_DIRECTED, ## Accept all advertising packets except directed advertising packets ## where the initiator's identity address does not address this device - SCAN_ACCEPT_ALL_EXCEPT_IDENTITY_NOT_MATCH, ## Accept all advertising packets except: - ## 1. advertising packets where the advertiser's identity address is not in - ## the White List; and - ## 2. directed advertising packets where the initiator's identity address - ## does not address this device - SCAN_ACCEPT_WLIST_EXCEPT_IDENTITY_NOT_MATCH ## * diff --git a/examples-gcc/smart_home_hub/smart_home_hub.ingw b/examples-gcc/smart_home_hub/smart_home_hub.ingw index 6dba78e61..851b8f44a 100644 --- a/examples-gcc/smart_home_hub/smart_home_hub.ingw +++ b/examples-gcc/smart_home_hub/smart_home_hub.ingw @@ -1,19 +1,25 @@ { "watchdog": false, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Programs\\gcc-arm-none-eabi-10.3-2021.10\\bin", "eflash_addr": "0x42000", @@ -58,8 +64,8 @@ "proxy": true }, "cmsis": "C:\/projects\/ingchips\/ingWizard\/CMSIS", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples-gcc/smart_home_hub/smart_home_hub.ld b/examples-gcc/smart_home_hub/smart_home_hub.ld index a72c6f9c0..4c820dfc2 100644 --- a/examples-gcc/smart_home_hub/smart_home_hub.ld +++ b/examples-gcc/smart_home_hub/smart_home_hub.ld @@ -8,7 +8,7 @@ MEMORY { FLASH (rx) : ORIGIN = 155648, LENGTH = 385024 - RAM (rwx) : ORIGIN = 536900792, LENGTH = 35656 + RAM (rwx) : ORIGIN = 536900728, LENGTH = 35720 } /* Linker script to place sections and symbol values. Should be used together diff --git a/examples-iar/peripheral_ibeacon/generic_cortex.icf b/examples-iar/peripheral_ibeacon/generic_cortex.icf index 8065fa941..3d60d505c 100644 --- a/examples-iar/peripheral_ibeacon/generic_cortex.icf +++ b/examples-iar/peripheral_ibeacon/generic_cortex.icf @@ -2,9 +2,9 @@ /*-Editor annotation file-*/ /* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_4.xml" */ /*-Specials-*/ -define symbol __ICFEDIT_intvec_start__ = 155648; +define symbol __ICFEDIT_intvec_start__ = 155648; /*-Memory Regions-*/ -define symbol __ICFEDIT_region_IROM1_start__ = 155648; +define symbol __ICFEDIT_region_IROM1_start__ = 155648; define symbol __ICFEDIT_region_IROM1_end__ = 0x00084000; define symbol __ICFEDIT_region_IROM2_start__ = 0x0; define symbol __ICFEDIT_region_IROM2_end__ = 0x0; @@ -14,7 +14,7 @@ define symbol __ICFEDIT_region_EROM2_start__ = 0x0; define symbol __ICFEDIT_region_EROM2_end__ = 0x0; define symbol __ICFEDIT_region_EROM3_start__ = 0x0; define symbol __ICFEDIT_region_EROM3_end__ = 0x0; -define symbol __ICFEDIT_region_IRAM1_start__ = 536900792; +define symbol __ICFEDIT_region_IRAM1_start__ = 536900728; define symbol __ICFEDIT_region_IRAM1_end__ = 0x2000FFFF; define symbol __ICFEDIT_region_IRAM2_start__ = 0x0; define symbol __ICFEDIT_region_IRAM2_end__ = 0x0; diff --git a/examples-iar/peripheral_ibeacon/peripheral_ibeacon.ingw b/examples-iar/peripheral_ibeacon/peripheral_ibeacon.ingw index 30d0d0d72..7cdf437f8 100644 --- a/examples-iar/peripheral_ibeacon/peripheral_ibeacon.ingw +++ b/examples-iar/peripheral_ibeacon/peripheral_ibeacon.ingw @@ -1,18 +1,24 @@ { "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "", "ide_ver": "", @@ -50,8 +56,8 @@ "proxy": true }, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples-rowley/peripheral_ibeacon/peripheral_ibeacon.hzp b/examples-rowley/peripheral_ibeacon/peripheral_ibeacon.hzp index c746b2740..deb20436e 100644 --- a/examples-rowley/peripheral_ibeacon/peripheral_ibeacon.hzp +++ b/examples-rowley/peripheral_ibeacon/peripheral_ibeacon.hzp @@ -2,7 +2,7 @@ - + diff --git a/examples-rowley/peripheral_ibeacon/peripheral_ibeacon.ingw b/examples-rowley/peripheral_ibeacon/peripheral_ibeacon.ingw index dc41aa10a..8595f55dd 100644 --- a/examples-rowley/peripheral_ibeacon/peripheral_ibeacon.ingw +++ b/examples-rowley/peripheral_ibeacon/peripheral_ibeacon.ingw @@ -1,18 +1,24 @@ { "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "", "ide_ver": "", @@ -49,8 +55,8 @@ "proxy": true }, "cmsis": "C:\/projects\/ingchips\/ingWizard\/CMSIS", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "rowley": true, "uart_log": true, "ota_ver_patch": "0", diff --git a/examples-segger/peripheral_ibeacon/peripheral_ibeacon.ingw b/examples-segger/peripheral_ibeacon/peripheral_ibeacon.ingw index 77574601a..04ff71614 100644 --- a/examples-segger/peripheral_ibeacon/peripheral_ibeacon.ingw +++ b/examples-segger/peripheral_ibeacon/peripheral_ibeacon.ingw @@ -1,18 +1,24 @@ { "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "", "ide_ver": "", @@ -50,8 +56,8 @@ "proxy": true }, "cmsis": "C:\/projects\/ingchips\/ingWizard\/CMSIS", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples-segger/peripheral_ibeacon/peripheral_ibeacon.ld b/examples-segger/peripheral_ibeacon/peripheral_ibeacon.ld index 13e8254d9..4f91e8b57 100644 --- a/examples-segger/peripheral_ibeacon/peripheral_ibeacon.ld +++ b/examples-segger/peripheral_ibeacon/peripheral_ibeacon.ld @@ -8,7 +8,7 @@ MEMORY { FLASH (rx) : ORIGIN = 155648, LENGTH = 385024 - RAM (rwx) : ORIGIN = 536900792, LENGTH = 35656 + RAM (rwx) : ORIGIN = 536900728, LENGTH = 35720 } /* Linker script to place sections and symbol values. Should be used together diff --git a/examples/anti_lost_mas/anti_lost_mas.ingw b/examples/anti_lost_mas/anti_lost_mas.ingw index 34c7f513a..36f23539d 100644 --- a/examples/anti_lost_mas/anti_lost_mas.ingw +++ b/examples/anti_lost_mas/anti_lost_mas.ingw @@ -1,19 +1,25 @@ { "watchdog": false, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -58,8 +64,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples/anti_lost_mas/anti_lost_mas.uvproj b/examples/anti_lost_mas/anti_lost_mas.uvproj index de9bd6070..d10d89f42 100644 --- a/examples/anti_lost_mas/anti_lost_mas.uvproj +++ b/examples/anti_lost_mas/anti_lost_mas.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/anti_lost_mas/anti_lost_mas.uvprojx b/examples/anti_lost_mas/anti_lost_mas.uvprojx index e444122d7..2bd26f1e9 100644 --- a/examples/anti_lost_mas/anti_lost_mas.uvprojx +++ b/examples/anti_lost_mas/anti_lost_mas.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/anti_lost_mas/src/startup_ing91800.s b/examples/anti_lost_mas/src/startup_ing91800.s index 7e44b2c58..53907e41a 100644 --- a/examples/anti_lost_mas/src/startup_ing91800.s +++ b/examples/anti_lost_mas/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/anti_lost_sla/anti_lost_sla.ingw b/examples/anti_lost_sla/anti_lost_sla.ingw index 7a4e790fa..687423127 100644 --- a/examples/anti_lost_sla/anti_lost_sla.ingw +++ b/examples/anti_lost_sla/anti_lost_sla.ingw @@ -1,19 +1,25 @@ { "watchdog": false, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -58,8 +64,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples/anti_lost_sla/anti_lost_sla.uvproj b/examples/anti_lost_sla/anti_lost_sla.uvproj index f66feaddb..b13b5b3ba 100644 --- a/examples/anti_lost_sla/anti_lost_sla.uvproj +++ b/examples/anti_lost_sla/anti_lost_sla.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/anti_lost_sla/anti_lost_sla.uvprojx b/examples/anti_lost_sla/anti_lost_sla.uvprojx index 377935b58..61fa70810 100644 --- a/examples/anti_lost_sla/anti_lost_sla.uvprojx +++ b/examples/anti_lost_sla/anti_lost_sla.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/anti_lost_sla/src/startup_ing91800.s b/examples/anti_lost_sla/src/startup_ing91800.s index 7e44b2c58..53907e41a 100644 --- a/examples/anti_lost_sla/src/startup_ing91800.s +++ b/examples/anti_lost_sla/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/ble_rpc/ble_rpc.ingw b/examples/ble_rpc/ble_rpc.ingw index 2b48da28a..7e584d8ac 100644 --- a/examples/ble_rpc/ble_rpc.ingw +++ b/examples/ble_rpc/ble_rpc.ingw @@ -1,19 +1,25 @@ { "watchdog": true, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9ff0700000000", + "addr": 158908 + } + }, "rom": { - "size": 146500, + "size": 146876, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 163840 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -69,8 +75,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "k5_cc_ver": "6", "printf_enable": true, "ota_ver_patch": "0", diff --git a/examples/ble_rpc/ble_rpc.uvproj b/examples/ble_rpc/ble_rpc.uvproj index 57c1a9ea6..daf0c7a94 100644 --- a/examples/ble_rpc/ble_rpc.uvproj +++ b/examples/ble_rpc/ble_rpc.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/ble_rpc/ble_rpc.uvprojx b/examples/ble_rpc/ble_rpc.uvprojx index 0fcf71c72..4d8eb3fd8 100644 --- a/examples/ble_rpc/ble_rpc.uvprojx +++ b/examples/ble_rpc/ble_rpc.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/ble_rpc/data/brpc_handlers.inc b/examples/ble_rpc/data/brpc_handlers.inc index 622559753..83992381d 100644 --- a/examples/ble_rpc/data/brpc_handlers.inc +++ b/examples/ble_rpc/data/brpc_handlers.inc @@ -1,675 +1,700 @@ -case 1001 :{ +case 1001: { #pragma pack (push, 1) struct _param {} *_param = (struct _param *)call->body; #pragma pack (pop) platform_reset();}break; -case 1002 :{ +case 1002: { #pragma pack (push, 1) struct _param {const uint32_t app_addr;} *_param = (struct _param *)call->body; #pragma pack (pop) platform_switch_app(_param->app_addr);}break; -case 1003 :{ +case 1003: { #pragma pack (push, 1) struct _param {const uint8_t value;} *_param = (struct _param *)call->body; #pragma pack (pop) platform_write_persistent_reg(_param->value);}break; -case 1004 :{ +case 1004: { #pragma pack (push, 1) struct _param {} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = platform_read_persistent_reg();send_ret_response(1004,sizeof(_ret),&_ret);}break; -case 1005 :{ +case 1005: { #pragma pack (push, 1) struct _param {const platform_cfg_item_t item;const uint32_t flag;} *_param = (struct _param *)call->body; #pragma pack (pop) platform_config(_param->item,_param->flag);}break; -case 1006 :{ +case 1006: { #pragma pack (push, 1) struct _param {const platform_info_item_t item;} *_param = (struct _param *)call->body; #pragma pack (pop) uint32_t _ret = platform_read_info(_param->item);send_ret_response(1006,sizeof(_ret),&_ret);}break; -case 1007 :{ +case 1007: { #pragma pack (push, 1) struct _param {} *_param = (struct _param *)call->body; #pragma pack (pop) uint32_t _ret = platform_calibrate_rt_clk();send_ret_response(1007,sizeof(_ret),&_ret);}break; -case 1008 :{ +case 1008: { #pragma pack (push, 1) struct _param {uint16_t value;} *_param = (struct _param *)call->body; #pragma pack (pop) platform_rt_rc_tune(_param->value);}break; -case 1009 :{ +case 1009: { #pragma pack (push, 1) struct _param {} *_param = (struct _param *)call->body; #pragma pack (pop) uint16_t _ret = platform_rt_rc_auto_tune();send_ret_response(1009,sizeof(_ret),&_ret);}break; -case 1010 :{ +case 1010: { #pragma pack (push, 1) struct _param {} *_param = (struct _param *)call->body; #pragma pack (pop) int _ret = platform_rand();send_ret_response(1010,sizeof(_ret),&_ret);}break; -case 1011 :{ +case 1011: { #pragma pack (push, 1) struct _param {} *_param = (struct _param *)call->body; #pragma pack (pop) uint64_t _ret = platform_get_us_time();send_ret_response(1011,sizeof(_ret),&_ret);}break; -case 1012 :{ +case 1012: { #pragma pack (push, 1) struct _param {const uint8_t source;} *_param = (struct _param *)call->body; #pragma pack (pop) platform_set_rf_clk_source(_param->source);}break; -case 1013 :{ +case 1013: { #pragma pack (push, 1) struct _param {platform_task_id_t id;} *_param = (struct _param *)call->body; #pragma pack (pop) uintptr_t _ret = platform_get_task_handle(_param->id);send_ret_response(1013,sizeof(_ret),&_ret);}break; -case 1014 :{ +case 1014: { #pragma pack (push, 1) struct _param {const uint8_t * address;} *_param = (struct _param *)call->body; #pragma pack (pop) -gap_set_random_device_address((const uint8_t *)sys_mem_map(_param->address));}break; -case 1015 :{ +uint8_t _ret = gap_set_random_device_address((const uint8_t *)sys_mem_map(_param->address));send_ret_response(1014,sizeof(_ret),&_ret);}break; +case 1015: { #pragma pack (push, 1) struct _param {hci_con_handle_t handle;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_disconnect(_param->handle);send_ret_response(1015,sizeof(_ret),&_ret);}break; -case 1016 :{ +case 1016: { #pragma pack (push, 1) struct _param {} *_param = (struct _param *)call->body; #pragma pack (pop) gap_disconnect_all();}break; -case 1017 :{ +case 1017: { #pragma pack (push, 1) struct _param {const uint8_t * address;bd_addr_type_t addtype;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_add_whitelist((const uint8_t *)sys_mem_map(_param->address),_param->addtype);send_ret_response(1017,sizeof(_ret),&_ret);}break; -case 1018 :{ +case 1018: { #pragma pack (push, 1) struct _param {const uint8_t * address;bd_addr_type_t addtype;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_remove_whitelist((const uint8_t *)sys_mem_map(_param->address),_param->addtype);send_ret_response(1018,sizeof(_ret),&_ret);}break; -case 1019 :{ +case 1019: { #pragma pack (push, 1) struct _param {} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_clear_white_lists();send_ret_response(1019,sizeof(_ret),&_ret);}break; -case 1020 :{ +case 1020: { #pragma pack (push, 1) struct _param {hci_con_handle_t handle;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_read_rssi(_param->handle);send_ret_response(1020,sizeof(_ret),&_ret);}break; -case 1021 :{ +case 1021: { #pragma pack (push, 1) struct _param {hci_con_handle_t handle;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_read_remote_used_features(_param->handle);send_ret_response(1021,sizeof(_ret),&_ret);}break; -case 1022 :{ +case 1022: { #pragma pack (push, 1) struct _param {hci_con_handle_t handle;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_read_remote_version(_param->handle);send_ret_response(1022,sizeof(_ret),&_ret);}break; -case 1023 :{ +case 1023: { #pragma pack (push, 1) struct _param {hci_con_handle_t handle;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_le_read_channel_map(_param->handle);send_ret_response(1023,sizeof(_ret),&_ret);}break; -case 1024 :{ +case 1024: { #pragma pack (push, 1) struct _param {const uint16_t con_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_read_phy(_param->con_handle);send_ret_response(1024,sizeof(_ret),&_ret);}break; -case 1025 :{ +case 1025: { #pragma pack (push, 1) struct _param {const uint8_t all_phys;const phy_bittypes_t tx_phys;const phy_bittypes_t rx_phys;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_def_phy(_param->all_phys,_param->tx_phys,_param->rx_phys);send_ret_response(1025,sizeof(_ret),&_ret);}break; -case 1026 :{ +case 1026: { #pragma pack (push, 1) struct _param {const uint16_t con_handle;const uint8_t all_phys;const phy_bittypes_t tx_phys;const phy_bittypes_t rx_phys;const phy_option_t phy_opt;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_phy(_param->con_handle,_param->all_phys,_param->tx_phys,_param->rx_phys,_param->phy_opt);send_ret_response(1026,sizeof(_ret),&_ret);}break; -case 1027 :{ +case 1027: { #pragma pack (push, 1) struct _param {const uint8_t adv_handle;const uint8_t * random_addr;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_adv_set_random_addr(_param->adv_handle,(const uint8_t *)sys_mem_map(_param->random_addr));send_ret_response(1027,sizeof(_ret),&_ret);}break; -case 1028 :{ +case 1028: { #pragma pack (push, 1) struct _param {const bd_addr_type_t own_addr_type;const scan_filter_policy_t filter;const uint8_t config_num;const scan_phy_config_t * configs;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_ext_scan_para(_param->own_addr_type,_param->filter,_param->config_num,(const scan_phy_config_t *)sys_mem_map(_param->configs));send_ret_response(1028,sizeof(_ret),&_ret);}break; -case 1029 :{ +case 1029: { #pragma pack (push, 1) struct _param {const uint8_t adv_handle;const uint16_t length;const uint8_t * data;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_ext_scan_response_data(_param->adv_handle,_param->length,(const uint8_t *)sys_mem_map(_param->data));send_ret_response(1029,sizeof(_ret),&_ret);}break; -case 1030 :{ +case 1030: { #pragma pack (push, 1) struct _param {const uint8_t enable;const uint8_t filter;const uint16_t duration;const uint16_t period;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_ext_scan_enable(_param->enable,_param->filter,_param->duration,_param->period);send_ret_response(1030,sizeof(_ret),&_ret);}break; -case 1031 :{ +case 1031: { #pragma pack (push, 1) struct _param {const uint8_t enable;const uint8_t set_number;const ext_adv_set_en_t * adv_sets;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_ext_adv_enable(_param->enable,_param->set_number,(const ext_adv_set_en_t *)sys_mem_map(_param->adv_sets));send_ret_response(1031,sizeof(_ret),&_ret);}break; -case 1032 :{ +case 1032: { #pragma pack (push, 1) struct _param {const uint8_t adv_handle;const adv_event_properties_t properties;const uint32_t interval_min;const uint32_t interval_max;const adv_channel_bits_t primary_adv_channel_map;const bd_addr_type_t own_addr_type;const bd_addr_type_t peer_addr_type;const uint8_t * peer_addr;const adv_filter_policy_t adv_filter_policy;const int8_t tx_power;const phy_type_t primary_adv_phy;const uint8_t secondary_adv_max_skip;const phy_type_t secondary_adv_phy;const uint8_t sid;const uint8_t scan_req_notification_enable;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_ext_adv_para(_param->adv_handle,_param->properties,_param->interval_min,_param->interval_max,_param->primary_adv_channel_map,_param->own_addr_type,_param->peer_addr_type,(const uint8_t *)sys_mem_map(_param->peer_addr),_param->adv_filter_policy,_param->tx_power,_param->primary_adv_phy,_param->secondary_adv_max_skip,_param->secondary_adv_phy,_param->sid,_param->scan_req_notification_enable);send_ret_response(1032,sizeof(_ret),&_ret);}break; -case 1033 :{ +case 1033: { #pragma pack (push, 1) struct _param {const uint8_t adv_handle;uint16_t length;const uint8_t * data;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_ext_adv_data(_param->adv_handle,_param->length,(const uint8_t *)sys_mem_map(_param->data));send_ret_response(1033,sizeof(_ret),&_ret);}break; -case 1034 :{ +case 1034: { #pragma pack (push, 1) struct _param {const uint8_t adv_handle;uint16_t length;const uint8_t * data;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_periodic_adv_data(_param->adv_handle,_param->length,(const uint8_t *)sys_mem_map(_param->data));send_ret_response(1034,sizeof(_ret),&_ret);}break; -case 1035 :{ +case 1035: { #pragma pack (push, 1) struct _param {const uint8_t enable;const uint8_t adv_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_periodic_adv_enable(_param->enable,_param->adv_handle);send_ret_response(1035,sizeof(_ret),&_ret);}break; -case 1036 :{ +case 1036: { #pragma pack (push, 1) struct _param {const uint8_t adv_handle;const uint16_t interval_min;const uint16_t interval_max;const periodic_adv_properties_t properties;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_periodic_adv_para(_param->adv_handle,_param->interval_min,_param->interval_max,_param->properties);send_ret_response(1036,sizeof(_ret),&_ret);}break; -case 1037 :{ +case 1037: { #pragma pack (push, 1) struct _param {} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_clr_adv_set();send_ret_response(1037,sizeof(_ret),&_ret);}break; -case 1038 :{ +case 1038: { #pragma pack (push, 1) struct _param {const uint8_t adv_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_rmv_adv_set(_param->adv_handle);send_ret_response(1038,sizeof(_ret),&_ret);}break; -case 1039 :{ +case 1039: { #pragma pack (push, 1) struct _param {const periodic_adv_filter_policy_t filter_policy;const uint8_t adv_sid;const bd_addr_type_t addr_type;const uint8_t * addr;const uint16_t skip;const uint16_t sync_timeout;const uint8_t sync_cte_type;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_periodic_adv_create_sync(_param->filter_policy,_param->adv_sid,_param->addr_type,(const uint8_t *)sys_mem_map(_param->addr),_param->skip,_param->sync_timeout,_param->sync_cte_type);send_ret_response(1039,sizeof(_ret),&_ret);}break; -case 1040 :{ +case 1040: { #pragma pack (push, 1) struct _param {} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_periodic_adv_create_sync_cancel();send_ret_response(1040,sizeof(_ret),&_ret);}break; -case 1041 :{ +case 1041: { #pragma pack (push, 1) struct _param {const uint16_t sync_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_periodic_adv_term_sync(_param->sync_handle);send_ret_response(1041,sizeof(_ret),&_ret);}break; -case 1042 :{ +case 1042: { #pragma pack (push, 1) struct _param {const uint8_t addr_type;const uint8_t * addr;const uint8_t sid;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_add_dev_to_periodic_list(_param->addr_type,(const uint8_t *)sys_mem_map(_param->addr),_param->sid);send_ret_response(1042,sizeof(_ret),&_ret);}break; -case 1043 :{ +case 1043: { #pragma pack (push, 1) struct _param {const uint8_t addr_type;const uint8_t * addr;const uint8_t sid;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_rmv_dev_from_periodic_list(_param->addr_type,(const uint8_t *)sys_mem_map(_param->addr),_param->sid);send_ret_response(1043,sizeof(_ret),&_ret);}break; -case 1044 :{ +case 1044: { #pragma pack (push, 1) struct _param {} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_clr_periodic_adv_list();send_ret_response(1044,sizeof(_ret),&_ret);}break; -case 1045 :{ +case 1045: { #pragma pack (push, 1) struct _param {} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_read_periodic_adv_list_size();send_ret_response(1045,sizeof(_ret),&_ret);}break; -case 1046 :{ +case 1046: { #pragma pack (push, 1) struct _param {const initiating_filter_policy_t filter_policy;const bd_addr_type_t own_addr_type;const bd_addr_type_t peer_addr_type;const uint8_t * peer_addr;const uint8_t initiating_phy_num;const initiating_phy_config_t * phy_configs;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_ext_create_connection(_param->filter_policy,_param->own_addr_type,_param->peer_addr_type,(const uint8_t *)sys_mem_map(_param->peer_addr),_param->initiating_phy_num,(const initiating_phy_config_t *)sys_mem_map(_param->phy_configs));send_ret_response(1046,sizeof(_ret),&_ret);}break; -case 1047 :{ +case 1047: { #pragma pack (push, 1) struct _param {} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_create_connection_cancel();send_ret_response(1047,sizeof(_ret),&_ret);}break; -case 1048 :{ +case 1048: { #pragma pack (push, 1) struct _param {uint16_t connection_handle;uint16_t tx_octets;uint16_t tx_time;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_data_length(_param->connection_handle,_param->tx_octets,_param->tx_time);send_ret_response(1048,sizeof(_ret),&_ret);}break; -case 1049 :{ +case 1049: { #pragma pack (push, 1) struct _param {const uint8_t adv_handle;const uint8_t cte_len;const cte_type_t cte_type;const uint8_t cte_count;const uint8_t switching_pattern_len;const uint8_t * antenna_ids;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_connectionless_cte_tx_param(_param->adv_handle,_param->cte_len,_param->cte_type,_param->cte_count,_param->switching_pattern_len,(const uint8_t *)sys_mem_map(_param->antenna_ids));send_ret_response(1049,sizeof(_ret),&_ret);}break; -case 1050 :{ +case 1050: { #pragma pack (push, 1) struct _param {const uint8_t adv_handle;const uint8_t cte_enable;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_connectionless_cte_tx_enable(_param->adv_handle,_param->cte_enable);send_ret_response(1050,sizeof(_ret),&_ret);}break; -case 1051 :{ +case 1051: { #pragma pack (push, 1) struct _param {const uint16_t sync_handle;const uint8_t sampling_enable;const cte_slot_duration_type_t slot_durations;const uint8_t max_sampled_ctes;const uint8_t switching_pattern_len;const uint8_t * antenna_ids;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_connectionless_iq_sampling_enable(_param->sync_handle,_param->sampling_enable,_param->slot_durations,_param->max_sampled_ctes,_param->switching_pattern_len,(const uint8_t *)sys_mem_map(_param->antenna_ids));send_ret_response(1051,sizeof(_ret),&_ret);}break; -case 1052 :{ +case 1052: { #pragma pack (push, 1) struct _param {const hci_con_handle_t conn_handle;const uint8_t sampling_enable;const cte_slot_duration_type_t slot_durations;const uint8_t switching_pattern_len;const uint8_t * antenna_ids;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_connection_cte_rx_param(_param->conn_handle,_param->sampling_enable,_param->slot_durations,_param->switching_pattern_len,(const uint8_t *)sys_mem_map(_param->antenna_ids));send_ret_response(1052,sizeof(_ret),&_ret);}break; -case 1053 :{ +case 1053: { #pragma pack (push, 1) struct _param {const hci_con_handle_t conn_handle;const uint8_t cte_types;const uint8_t switching_pattern_len;const uint8_t * antenna_ids;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_connection_cte_tx_param(_param->conn_handle,_param->cte_types,_param->switching_pattern_len,(const uint8_t *)sys_mem_map(_param->antenna_ids));send_ret_response(1053,sizeof(_ret),&_ret);}break; -case 1054 :{ +case 1054: { #pragma pack (push, 1) struct _param {const hci_con_handle_t conn_handle;const uint8_t enable;const uint16_t requested_cte_interval;const uint8_t requested_cte_length;const cte_type_t requested_cte_type;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_connection_cte_request_enable(_param->conn_handle,_param->enable,_param->requested_cte_interval,_param->requested_cte_length,_param->requested_cte_type);send_ret_response(1054,sizeof(_ret),&_ret);}break; -case 1055 :{ +case 1055: { #pragma pack (push, 1) struct _param {const hci_con_handle_t conn_handle;const uint8_t enable;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_connection_cte_response_enable(_param->conn_handle,_param->enable);send_ret_response(1055,sizeof(_ret),&_ret);}break; -case 1056 :{ +case 1056: { #pragma pack (push, 1) struct _param {} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_read_antenna_info();send_ret_response(1056,sizeof(_ret),&_ret);}break; -case 1057 :{ +case 1057: { #pragma pack (push, 1) struct _param {const uint16_t sync_handle;const uint8_t enable;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_periodic_adv_rx_enable(_param->sync_handle,_param->enable);send_ret_response(1057,sizeof(_ret),&_ret);}break; -case 1058 :{ +case 1058: { #pragma pack (push, 1) struct _param {const hci_con_handle_t conn_handle;const uint16_t service_data;const uint16_t sync_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_periodic_adv_sync_transfer(_param->conn_handle,_param->service_data,_param->sync_handle);send_ret_response(1058,sizeof(_ret),&_ret);}break; -case 1059 :{ +case 1059: { #pragma pack (push, 1) struct _param {const hci_con_handle_t conn_handle;const uint16_t service_data;const uint8_t adv_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_periodic_adv_set_info_transfer(_param->conn_handle,_param->service_data,_param->adv_handle);send_ret_response(1059,sizeof(_ret),&_ret);}break; -case 1060 :{ +case 1060: { #pragma pack (push, 1) struct _param {const hci_con_handle_t conn_handle;const periodic_adv_sync_transfer_mode_t mode;const uint16_t skip;const uint16_t sync_timeout;const uint8_t cte_excl_types;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_periodic_adv_sync_transfer_param(_param->conn_handle,_param->mode,_param->skip,_param->sync_timeout,_param->cte_excl_types);send_ret_response(1060,sizeof(_ret),&_ret);}break; -case 1061 :{ +case 1061: { #pragma pack (push, 1) struct _param {const periodic_adv_sync_transfer_mode_t mode;const uint16_t skip;const uint16_t sync_timeout;const uint8_t cte_excl_types;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_default_periodic_adv_sync_transfer_param(_param->mode,_param->skip,_param->sync_timeout,_param->cte_excl_types);send_ret_response(1061,sizeof(_ret),&_ret);}break; -case 1062 :{ +case 1062: { #pragma pack (push, 1) struct _param {const uint32_t channel_low;const uint8_t channel_high;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_host_channel_classification(_param->channel_low,_param->channel_high);send_ret_response(1062,sizeof(_ret),&_ret);}break; -case 1063 :{ +case 1063: { #pragma pack (push, 1) struct _param {hci_con_handle_t con_handle;uint16_t conn_interval_min;uint16_t conn_interval_max;uint16_t conn_latency;uint16_t supervision_timeout;uint16_t min_ce_len;uint16_t max_ce_len;} *_param = (struct _param *)call->body; #pragma pack (pop) int _ret = gap_update_connection_parameters(_param->con_handle,_param->conn_interval_min,_param->conn_interval_max,_param->conn_latency,_param->supervision_timeout,_param->min_ce_len,_param->max_ce_len);send_ret_response(1063,sizeof(_ret),&_ret);}break; -case 1064 :{ +case 1064: { #pragma pack (push, 1) struct _param {le_connection_parameter_range_t * range;} *_param = (struct _param *)call->body; #pragma pack (pop) gap_get_connection_parameter_range((le_connection_parameter_range_t *)sys_mem_map(_param->range));}break; -case 1065 :{ +case 1065: { #pragma pack (push, 1) struct _param {le_connection_parameter_range_t * range;} *_param = (struct _param *)call->body; #pragma pack (pop) gap_set_connection_parameter_range((le_connection_parameter_range_t *)sys_mem_map(_param->range));}break; -case 1066 :{ +case 1066: { #pragma pack (push, 1) struct _param {hci_con_handle_t con_handle;unified_phy_type_t phy;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_read_local_tx_power_level(_param->con_handle,_param->phy);send_ret_response(1066,sizeof(_ret),&_ret);}break; -case 1067 :{ +case 1067: { #pragma pack (push, 1) struct _param {hci_con_handle_t con_handle;unified_phy_type_t phy;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_read_remote_tx_power_level(_param->con_handle,_param->phy);send_ret_response(1067,sizeof(_ret),&_ret);}break; -case 1068 :{ +case 1068: { #pragma pack (push, 1) struct _param {hci_con_handle_t con_handle;uint8_t high_threshold;uint8_t high_hysteresis;uint8_t low_threshold;uint8_t low_hysteresis;uint8_t min_time_spent;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_path_loss_reporting_param(_param->con_handle,_param->high_threshold,_param->high_hysteresis,_param->low_threshold,_param->low_hysteresis,_param->min_time_spent);send_ret_response(1068,sizeof(_ret),&_ret);}break; -case 1069 :{ +case 1069: { #pragma pack (push, 1) struct _param {hci_con_handle_t con_handle;uint8_t enable;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_path_loss_reporting_enable(_param->con_handle,_param->enable);send_ret_response(1069,sizeof(_ret),&_ret);}break; -case 1070 :{ +case 1070: { #pragma pack (push, 1) struct _param {hci_con_handle_t con_handle;uint8_t local_enable;uint8_t remote_enable;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_tx_power_reporting_enable(_param->con_handle,_param->local_enable,_param->remote_enable);send_ret_response(1070,sizeof(_ret),&_ret);}break; -case 1071 :{ +case 1071: { #pragma pack (push, 1) struct _param {uint16_t subrate_min;uint16_t subrate_max;uint16_t max_latency;uint16_t continuation_number;uint16_t supervision_timeout;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_set_default_subrate(_param->subrate_min,_param->subrate_max,_param->max_latency,_param->continuation_number,_param->supervision_timeout);send_ret_response(1071,sizeof(_ret),&_ret);}break; -case 1072 :{ +case 1072: { #pragma pack (push, 1) struct _param {hci_con_handle_t con_handle;uint16_t subrate_min;uint16_t subrate_max;uint16_t max_latency;uint16_t continuation_number;uint16_t supervision_timeout;} *_param = (struct _param *)call->body; #pragma pack (pop) uint8_t _ret = gap_subrate_request(_param->con_handle,_param->subrate_min,_param->subrate_max,_param->max_latency,_param->continuation_number,_param->supervision_timeout);send_ret_response(1072,sizeof(_ret),&_ret);}break; -case 1073 :{ -#pragma pack (push, 1) -struct _param {const uint8_t * key;const uint8_t * plaintext;gap_hci_cmd_complete_cb_t cb;void * user_data;} *_param = (struct _param *)call->body; -#pragma pack (pop) -uint8_t _ret = gap_aes_encrypt((const uint8_t *)sys_mem_map(_param->key),(const uint8_t *)sys_mem_map(_param->plaintext),_param->cb,(void *)sys_mem_map(_param->user_data));send_ret_response(1073,sizeof(_ret),&_ret);}break; -case 1074 :{ +case 1073: { #pragma pack (push, 1) struct _param {uint8_t rx_channel;uint8_t phy;uint8_t modulation_index;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gap_rx_test_v2(_param->rx_channel,_param->phy,_param->modulation_index);send_ret_response(1074,sizeof(_ret),&_ret);}break; -case 1075 :{ +uint8_t _ret = gap_rx_test_v2(_param->rx_channel,_param->phy,_param->modulation_index);send_ret_response(1073,sizeof(_ret),&_ret);}break; +case 1074: { #pragma pack (push, 1) -struct _param {uint8_t rx_channel;uint8_t phy;uint8_t modulation_index;uint8_t expected_cte_length;uint8_t expected_cte_type;uint8_t slot_durations;uint8_t switching_pattern_length;uint8_t * antenna_ids;} *_param = (struct _param *)call->body; +struct _param {uint8_t rx_channel;uint8_t phy;uint8_t modulation_index;uint8_t expected_cte_length;uint8_t expected_cte_type;uint8_t slot_durations;uint8_t switching_pattern_length;const uint8_t * antenna_ids;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gap_rx_test_v3(_param->rx_channel,_param->phy,_param->modulation_index,_param->expected_cte_length,_param->expected_cte_type,_param->slot_durations,_param->switching_pattern_length,(uint8_t *)sys_mem_map(_param->antenna_ids));send_ret_response(1075,sizeof(_ret),&_ret);}break; -case 1076 :{ +uint8_t _ret = gap_rx_test_v3(_param->rx_channel,_param->phy,_param->modulation_index,_param->expected_cte_length,_param->expected_cte_type,_param->slot_durations,_param->switching_pattern_length,(const uint8_t *)sys_mem_map(_param->antenna_ids));send_ret_response(1074,sizeof(_ret),&_ret);}break; +case 1075: { #pragma pack (push, 1) struct _param {uint8_t tx_channel;uint8_t test_data_length;uint8_t packet_payload;uint8_t phy;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gap_tx_test_v2(_param->tx_channel,_param->test_data_length,_param->packet_payload,_param->phy);send_ret_response(1076,sizeof(_ret),&_ret);}break; -case 1077 :{ +uint8_t _ret = gap_tx_test_v2(_param->tx_channel,_param->test_data_length,_param->packet_payload,_param->phy);send_ret_response(1075,sizeof(_ret),&_ret);}break; +case 1076: { #pragma pack (push, 1) -struct _param {uint8_t tx_channel;uint8_t test_data_length;uint8_t packet_payload;uint8_t phy;uint8_t cte_length;uint8_t cte_type;uint8_t switching_pattern_length;uint8_t * antenna_ids;int8_t tx_power_level;} *_param = (struct _param *)call->body; +struct _param {uint8_t tx_channel;uint8_t test_data_length;uint8_t packet_payload;uint8_t phy;uint8_t cte_length;uint8_t cte_type;uint8_t switching_pattern_length;const uint8_t * antenna_ids;int8_t tx_power_level;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gap_tx_test_v4(_param->tx_channel,_param->test_data_length,_param->packet_payload,_param->phy,_param->cte_length,_param->cte_type,_param->switching_pattern_length,(uint8_t *)sys_mem_map(_param->antenna_ids),_param->tx_power_level);send_ret_response(1077,sizeof(_ret),&_ret);}break; -case 1078 :{ +uint8_t _ret = gap_tx_test_v4(_param->tx_channel,_param->test_data_length,_param->packet_payload,_param->phy,_param->cte_length,_param->cte_type,_param->switching_pattern_length,(const uint8_t *)sys_mem_map(_param->antenna_ids),_param->tx_power_level);send_ret_response(1076,sizeof(_ret),&_ret);}break; +case 1077: { #pragma pack (push, 1) struct _param {} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gap_test_end();send_ret_response(1078,sizeof(_ret),&_ret);}break; -case 1079 :{ +uint8_t _ret = gap_test_end();send_ret_response(1077,sizeof(_ret),&_ret);}break; +case 1078: { #pragma pack (push, 1) struct _param {uint8_t enable;uint8_t power_level_index;uint16_t freq;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gap_vendor_tx_continuous_wave(_param->enable,_param->power_level_index,_param->freq);send_ret_response(1079,sizeof(_ret),&_ret);}break; -case 1080 :{ +uint8_t _ret = gap_vendor_tx_continuous_wave(_param->enable,_param->power_level_index,_param->freq);send_ret_response(1078,sizeof(_ret),&_ret);}break; +case 1079: { #pragma pack (push, 1) struct _param {hci_con_handle_t con_handle;uint16_t attribute_handle;const uint8_t * value;uint16_t value_len;} *_param = (struct _param *)call->body; #pragma pack (pop) -int _ret = att_server_deferred_read_response(_param->con_handle,_param->attribute_handle,(const uint8_t *)sys_mem_map(_param->value),_param->value_len);send_ret_response(1080,sizeof(_ret),&_ret);}break; -case 1081 :{ +int _ret = att_server_deferred_read_response(_param->con_handle,_param->attribute_handle,(const uint8_t *)sys_mem_map(_param->value),_param->value_len);send_ret_response(1079,sizeof(_ret),&_ret);}break; +case 1080: { #pragma pack (push, 1) -struct _param {hci_con_handle_t con_handle;uint16_t attribute_handle;uint8_t * value;uint16_t value_len;} *_param = (struct _param *)call->body; +struct _param {hci_con_handle_t con_handle;uint16_t attribute_handle;const uint8_t * value;uint16_t value_len;} *_param = (struct _param *)call->body; #pragma pack (pop) -int _ret = att_server_notify(_param->con_handle,_param->attribute_handle,(uint8_t *)sys_mem_map(_param->value),_param->value_len);send_ret_response(1081,sizeof(_ret),&_ret);}break; -case 1082 :{ +int _ret = att_server_notify(_param->con_handle,_param->attribute_handle,(const uint8_t *)sys_mem_map(_param->value),_param->value_len);send_ret_response(1080,sizeof(_ret),&_ret);}break; +case 1081: { #pragma pack (push, 1) -struct _param {hci_con_handle_t con_handle;uint16_t attribute_handle;uint8_t * value;uint16_t value_len;} *_param = (struct _param *)call->body; +struct _param {hci_con_handle_t con_handle;uint16_t attribute_handle;const uint8_t * value;uint16_t value_len;} *_param = (struct _param *)call->body; #pragma pack (pop) -int _ret = att_server_indicate(_param->con_handle,_param->attribute_handle,(uint8_t *)sys_mem_map(_param->value),_param->value_len);send_ret_response(1082,sizeof(_ret),&_ret);}break; -case 1083 :{ +int _ret = att_server_indicate(_param->con_handle,_param->attribute_handle,(const uint8_t *)sys_mem_map(_param->value),_param->value_len);send_ret_response(1081,sizeof(_ret),&_ret);}break; +case 1082: { #pragma pack (push, 1) struct _param {hci_con_handle_t con_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint16_t _ret = att_server_get_mtu(_param->con_handle);send_ret_response(1083,sizeof(_ret),&_ret);}break; -case 1084 :{ +uint16_t _ret = att_server_get_mtu(_param->con_handle);send_ret_response(1082,sizeof(_ret),&_ret);}break; +case 1083: { #pragma pack (push, 1) struct _param {user_packet_handler_t callback;hci_con_handle_t con_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_discover_primary_services(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle);send_ret_response(1084,sizeof(_ret),&_ret);}break; -case 1085 :{ +uint8_t _ret = gatt_client_discover_primary_services((user_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle);send_ret_response(1083,sizeof(_ret),&_ret);}break; +case 1084: { #pragma pack (push, 1) struct _param {user_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t uuid16;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_discover_primary_services_by_uuid16(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->uuid16);send_ret_response(1085,sizeof(_ret),&_ret);}break; -case 1086 :{ +uint8_t _ret = gatt_client_discover_primary_services_by_uuid16((user_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->uuid16);send_ret_response(1084,sizeof(_ret),&_ret);}break; +case 1085: { #pragma pack (push, 1) struct _param {user_packet_handler_t callback;hci_con_handle_t con_handle;const uint8_t * uuid128;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_discover_primary_services_by_uuid128(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,(const uint8_t *)sys_mem_map(_param->uuid128));send_ret_response(1086,sizeof(_ret),&_ret);}break; -case 1087 :{ +uint8_t _ret = gatt_client_discover_primary_services_by_uuid128((user_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,(const uint8_t *)sys_mem_map(_param->uuid128));send_ret_response(1085,sizeof(_ret),&_ret);}break; +case 1086: { #pragma pack (push, 1) struct _param {user_packet_handler_t callback;hci_con_handle_t con_handle;const uint16_t start_group_handle;const uint16_t end_group_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_find_included_services_for_service(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->start_group_handle,_param->end_group_handle);send_ret_response(1087,sizeof(_ret),&_ret);}break; -case 1088 :{ +uint8_t _ret = gatt_client_find_included_services_for_service((user_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->start_group_handle,_param->end_group_handle);send_ret_response(1086,sizeof(_ret),&_ret);}break; +case 1087: { #pragma pack (push, 1) struct _param {user_packet_handler_t callback;hci_con_handle_t con_handle;const uint16_t start_group_handle;const uint16_t end_group_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_discover_characteristics_for_service(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->start_group_handle,_param->end_group_handle);send_ret_response(1088,sizeof(_ret),&_ret);}break; -case 1089 :{ +uint8_t _ret = gatt_client_discover_characteristics_for_service((user_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->start_group_handle,_param->end_group_handle);send_ret_response(1087,sizeof(_ret),&_ret);}break; +case 1088: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;const hci_con_handle_t con_handle;const uint16_t start_handle;const uint16_t end_handle;const uint16_t uuid16;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_discover_characteristics_for_handle_range_by_uuid16(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->start_handle,_param->end_handle,_param->uuid16);send_ret_response(1089,sizeof(_ret),&_ret);}break; -case 1090 :{ +uint8_t _ret = gatt_client_discover_characteristics_for_handle_range_by_uuid16((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->start_handle,_param->end_handle,_param->uuid16);send_ret_response(1088,sizeof(_ret),&_ret);}break; +case 1089: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;const hci_con_handle_t con_handle;const uint16_t start_handle;const uint16_t end_handle;const uint8_t * uuid128;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_discover_characteristics_for_handle_range_by_uuid128(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->start_handle,_param->end_handle,(const uint8_t *)sys_mem_map(_param->uuid128));send_ret_response(1090,sizeof(_ret),&_ret);}break; -case 1091 :{ +uint8_t _ret = gatt_client_discover_characteristics_for_handle_range_by_uuid128((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->start_handle,_param->end_handle,(const uint8_t *)sys_mem_map(_param->uuid128));send_ret_response(1089,sizeof(_ret),&_ret);}break; +case 1090: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;hci_con_handle_t con_handle;gatt_client_characteristic_t * characteristic;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_discover_characteristic_descriptors(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,(gatt_client_characteristic_t *)sys_mem_map(_param->characteristic));send_ret_response(1091,sizeof(_ret),&_ret);}break; -case 1092 :{ +uint8_t _ret = gatt_client_discover_characteristic_descriptors((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,(gatt_client_characteristic_t *)sys_mem_map(_param->characteristic));send_ret_response(1090,sizeof(_ret),&_ret);}break; +case 1091: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t characteristic_value_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_read_value_of_characteristic_using_value_handle(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->characteristic_value_handle);send_ret_response(1092,sizeof(_ret),&_ret);}break; -case 1093 :{ +uint8_t _ret = gatt_client_read_value_of_characteristic_using_value_handle((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->characteristic_value_handle);send_ret_response(1091,sizeof(_ret),&_ret);}break; +case 1092: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t start_handle;uint16_t end_handle;uint16_t uuid16;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_read_value_of_characteristics_by_uuid16(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->start_handle,_param->end_handle,_param->uuid16);send_ret_response(1093,sizeof(_ret),&_ret);}break; -case 1094 :{ +uint8_t _ret = gatt_client_read_value_of_characteristics_by_uuid16((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->start_handle,_param->end_handle,_param->uuid16);send_ret_response(1092,sizeof(_ret),&_ret);}break; +case 1093: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t start_handle;uint16_t end_handle;uint8_t * uuid128;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_read_value_of_characteristics_by_uuid128(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->start_handle,_param->end_handle,(uint8_t *)sys_mem_map(_param->uuid128));send_ret_response(1094,sizeof(_ret),&_ret);}break; -case 1095 :{ +uint8_t _ret = gatt_client_read_value_of_characteristics_by_uuid128((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->start_handle,_param->end_handle,(uint8_t *)sys_mem_map(_param->uuid128));send_ret_response(1093,sizeof(_ret),&_ret);}break; +case 1094: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t characteristic_value_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_read_long_value_of_characteristic_using_value_handle(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->characteristic_value_handle);send_ret_response(1095,sizeof(_ret),&_ret);}break; -case 1096 :{ +uint8_t _ret = gatt_client_read_long_value_of_characteristic_using_value_handle((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->characteristic_value_handle);send_ret_response(1094,sizeof(_ret),&_ret);}break; +case 1095: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t characteristic_value_handle;uint16_t offset;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->characteristic_value_handle,_param->offset);send_ret_response(1096,sizeof(_ret),&_ret);}break; -case 1097 :{ +uint8_t _ret = gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->characteristic_value_handle,_param->offset);send_ret_response(1095,sizeof(_ret),&_ret);}break; +case 1096: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;hci_con_handle_t con_handle;int num_value_handles;uint16_t * value_handles;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_read_multiple_characteristic_values(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->num_value_handles,(uint16_t *)sys_mem_map(_param->value_handles));send_ret_response(1097,sizeof(_ret),&_ret);}break; -case 1098 :{ +uint8_t _ret = gatt_client_read_multiple_characteristic_values((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->num_value_handles,(uint16_t *)sys_mem_map(_param->value_handles));send_ret_response(1096,sizeof(_ret),&_ret);}break; +case 1097: { #pragma pack (push, 1) struct _param {hci_con_handle_t con_handle;uint16_t characteristic_value_handle;uint16_t length;const uint8_t * data;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_write_value_of_characteristic_without_response(_param->con_handle,_param->characteristic_value_handle,_param->length,(const uint8_t *)sys_mem_map(_param->data));send_ret_response(1098,sizeof(_ret),&_ret);}break; -case 1099 :{ +uint8_t _ret = gatt_client_write_value_of_characteristic_without_response(_param->con_handle,_param->characteristic_value_handle,_param->length,(const uint8_t *)sys_mem_map(_param->data));send_ret_response(1097,sizeof(_ret),&_ret);}break; +case 1098: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t handle;uint16_t message_len;const uint8_t * message;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_signed_write_without_response(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->handle,_param->message_len,(const uint8_t *)sys_mem_map(_param->message));send_ret_response(1099,sizeof(_ret),&_ret);}break; -case 1100 :{ +uint8_t _ret = gatt_client_signed_write_without_response((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->handle,_param->message_len,(const uint8_t *)sys_mem_map(_param->message));send_ret_response(1098,sizeof(_ret),&_ret);}break; +case 1099: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t characteristic_value_handle;uint16_t length;const uint8_t * data;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_write_value_of_characteristic(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->characteristic_value_handle,_param->length,(const uint8_t *)sys_mem_map(_param->data));send_ret_response(1100,sizeof(_ret),&_ret);}break; -case 1101 :{ +uint8_t _ret = gatt_client_write_value_of_characteristic((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->characteristic_value_handle,_param->length,(const uint8_t *)sys_mem_map(_param->data));send_ret_response(1099,sizeof(_ret),&_ret);}break; +case 1100: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t characteristic_value_handle;uint16_t length;const uint8_t * data;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_write_long_value_of_characteristic(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->characteristic_value_handle,_param->length,(const uint8_t *)sys_mem_map(_param->data));send_ret_response(1101,sizeof(_ret),&_ret);}break; -case 1102 :{ +uint8_t _ret = gatt_client_write_long_value_of_characteristic((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->characteristic_value_handle,_param->length,(const uint8_t *)sys_mem_map(_param->data));send_ret_response(1100,sizeof(_ret),&_ret);}break; +case 1101: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t characteristic_value_handle;uint16_t offset;uint16_t length;const uint8_t * data;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_write_long_value_of_characteristic_with_offset(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->characteristic_value_handle,_param->offset,_param->length,(const uint8_t *)sys_mem_map(_param->data));send_ret_response(1102,sizeof(_ret),&_ret);}break; -case 1103 :{ +uint8_t _ret = gatt_client_write_long_value_of_characteristic_with_offset((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->characteristic_value_handle,_param->offset,_param->length,(const uint8_t *)sys_mem_map(_param->data));send_ret_response(1101,sizeof(_ret),&_ret);}break; +case 1102: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t characteristic_value_handle;uint16_t length;const uint8_t * data;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_reliable_write_long_value_of_characteristic(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->characteristic_value_handle,_param->length,(const uint8_t *)sys_mem_map(_param->data));send_ret_response(1103,sizeof(_ret),&_ret);}break; -case 1104 :{ +uint8_t _ret = gatt_client_reliable_write_long_value_of_characteristic((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->characteristic_value_handle,_param->length,(const uint8_t *)sys_mem_map(_param->data));send_ret_response(1102,sizeof(_ret),&_ret);}break; +case 1103: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t descriptor_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_read_characteristic_descriptor_using_descriptor_handle(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->descriptor_handle);send_ret_response(1104,sizeof(_ret),&_ret);}break; -case 1105 :{ +uint8_t _ret = gatt_client_read_characteristic_descriptor_using_descriptor_handle((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->descriptor_handle);send_ret_response(1103,sizeof(_ret),&_ret);}break; +case 1104: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t descriptor_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_read_long_characteristic_descriptor_using_descriptor_handle(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->descriptor_handle);send_ret_response(1105,sizeof(_ret),&_ret);}break; -case 1106 :{ +uint8_t _ret = gatt_client_read_long_characteristic_descriptor_using_descriptor_handle((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->descriptor_handle);send_ret_response(1104,sizeof(_ret),&_ret);}break; +case 1105: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t descriptor_handle;uint16_t offset;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->descriptor_handle,_param->offset);send_ret_response(1106,sizeof(_ret),&_ret);}break; -case 1107 :{ +uint8_t _ret = gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->descriptor_handle,_param->offset);send_ret_response(1105,sizeof(_ret),&_ret);}break; +case 1106: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t descriptor_handle;uint16_t length;uint8_t * data;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_write_characteristic_descriptor_using_descriptor_handle(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->descriptor_handle,_param->length,(uint8_t *)sys_mem_map(_param->data));send_ret_response(1107,sizeof(_ret),&_ret);}break; -case 1108 :{ +uint8_t _ret = gatt_client_write_characteristic_descriptor_using_descriptor_handle((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->descriptor_handle,_param->length,(uint8_t *)sys_mem_map(_param->data));send_ret_response(1106,sizeof(_ret),&_ret);}break; +case 1107: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t descriptor_handle;uint16_t length;uint8_t * data;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_write_long_characteristic_descriptor_using_descriptor_handle(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->descriptor_handle,_param->length,(uint8_t *)sys_mem_map(_param->data));send_ret_response(1108,sizeof(_ret),&_ret);}break; -case 1109 :{ +uint8_t _ret = gatt_client_write_long_characteristic_descriptor_using_descriptor_handle((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->descriptor_handle,_param->length,(uint8_t *)sys_mem_map(_param->data));send_ret_response(1107,sizeof(_ret),&_ret);}break; +case 1108: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t descriptor_handle;uint16_t offset;uint16_t length;uint8_t * data;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->descriptor_handle,_param->offset,_param->length,(uint8_t *)sys_mem_map(_param->data));send_ret_response(1109,sizeof(_ret),&_ret);}break; -case 1110 :{ +uint8_t _ret = gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->descriptor_handle,_param->offset,_param->length,(uint8_t *)sys_mem_map(_param->data));send_ret_response(1108,sizeof(_ret),&_ret);}break; +case 1109: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;hci_con_handle_t con_handle;gatt_client_characteristic_t * characteristic;uint16_t configuration;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_write_client_characteristic_configuration(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,(gatt_client_characteristic_t *)sys_mem_map(_param->characteristic),_param->configuration);send_ret_response(1110,sizeof(_ret),&_ret);}break; -case 1111 :{ +uint8_t _ret = gatt_client_write_client_characteristic_configuration((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,(gatt_client_characteristic_t *)sys_mem_map(_param->characteristic),_param->configuration);send_ret_response(1109,sizeof(_ret),&_ret);}break; +case 1110: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;hci_con_handle_t con_handle;uint16_t attribute_handle;uint16_t offset;uint16_t length;uint8_t * data;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_prepare_write(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->attribute_handle,_param->offset,_param->length,(uint8_t *)sys_mem_map(_param->data));send_ret_response(1111,sizeof(_ret),&_ret);}break; -case 1112 :{ +uint8_t _ret = gatt_client_prepare_write((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle,_param->attribute_handle,_param->offset,_param->length,(uint8_t *)sys_mem_map(_param->data));send_ret_response(1110,sizeof(_ret),&_ret);}break; +case 1111: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;hci_con_handle_t con_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_execute_write(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle);send_ret_response(1112,sizeof(_ret),&_ret);}break; -case 1113 :{ +uint8_t _ret = gatt_client_execute_write((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle);send_ret_response(1111,sizeof(_ret),&_ret);}break; +case 1112: { #pragma pack (push, 1) struct _param {btstack_packet_handler_t callback;hci_con_handle_t con_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) -uint8_t _ret = gatt_client_cancel_write(sys_fun_map(_param->callback, _param->con_handle),_param->con_handle);send_ret_response(1113,sizeof(_ret),&_ret);}break; -case 1114 :{ +uint8_t _ret = gatt_client_cancel_write((btstack_packet_handler_t)sys_fun_map(_param->callback, _param->con_handle),_param->con_handle);send_ret_response(1112,sizeof(_ret),&_ret);}break; +case 1113: { #pragma pack (push, 1) struct _param {hci_con_handle_t con_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) -int _ret = gatt_client_is_ready(_param->con_handle);send_ret_response(1114,sizeof(_ret),&_ret);}break; -case 1115 :{ +int _ret = gatt_client_is_ready(_param->con_handle);send_ret_response(1113,sizeof(_ret),&_ret);}break; +case 1114: { #pragma pack (push, 1) struct _param {gatt_client_notification_t * notification;btstack_packet_handler_t packet_handler;hci_con_handle_t con_handle;uint16_t value_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) -gatt_client_listen_for_characteristic_value_updates((gatt_client_notification_t *)sys_mem_map(_param->notification),sys_fun_map(_param->packet_handler, _param->con_handle),_param->con_handle,_param->value_handle);}break; -case 1116 :{ +gatt_client_listen_for_characteristic_value_updates((gatt_client_notification_t *)sys_mem_map(_param->notification),(btstack_packet_handler_t)sys_fun_map(_param->packet_handler, _param->con_handle),_param->con_handle,_param->value_handle);}break; +case 1115: { #pragma pack (push, 1) struct _param {uint8_t enable;io_capability_t io_capability;int request_security;const sm_persistent_t * persistent;} *_param = (struct _param *)call->body; #pragma pack (pop) -sm_config(_param->enable,_param->io_capability,_param->request_security,(const sm_persistent_t *)sys_mem_map(_param->persistent));}break; -case 1117 :{ +int _ret = sm_config(_param->enable,_param->io_capability,_param->request_security,(const sm_persistent_t *)sys_mem_map(_param->persistent));send_ret_response(1115,sizeof(_ret),&_ret);}break; +case 1116: { #pragma pack (push, 1) struct _param {gap_random_address_type_t random_address_type;} *_param = (struct _param *)call->body; #pragma pack (pop) sm_private_random_address_generation_set_mode(_param->random_address_type);}break; -case 1118 :{ +case 1117: { #pragma pack (push, 1) struct _param {} *_param = (struct _param *)call->body; #pragma pack (pop) -gap_random_address_type_t _ret = sm_private_random_address_generation_get_mode();send_ret_response(1118,sizeof(_ret),&_ret);}break; -case 1119 :{ +gap_random_address_type_t _ret = sm_private_random_address_generation_get_mode();send_ret_response(1117,sizeof(_ret),&_ret);}break; +case 1118: { #pragma pack (push, 1) struct _param {int period_ms;} *_param = (struct _param *)call->body; #pragma pack (pop) sm_private_random_address_generation_set_update_period(_param->period_ms);}break; -case 1120 :{ +case 1119: { #pragma pack (push, 1) struct _param {uint8_t accepted_stk_generation_methods;} *_param = (struct _param *)call->body; #pragma pack (pop) sm_set_accepted_stk_generation_methods(_param->accepted_stk_generation_methods);}break; -case 1121 :{ +case 1120: { #pragma pack (push, 1) struct _param {uint8_t min_size;uint8_t max_size;} *_param = (struct _param *)call->body; #pragma pack (pop) sm_set_encryption_key_size_range(_param->min_size,_param->max_size);}break; -case 1122 :{ +case 1121: { #pragma pack (push, 1) struct _param {uint8_t auth_req;} *_param = (struct _param *)call->body; #pragma pack (pop) sm_set_authentication_requirements(_param->auth_req);}break; -case 1123 :{ +case 1122: { #pragma pack (push, 1) struct _param {uint8_t addr_type;bd_addr_t addr;} *_param = (struct _param *)call->body; #pragma pack (pop) -int _ret = sm_address_resolution_lookup(_param->addr_type,_param->addr);send_ret_response(1123,sizeof(_ret),&_ret);}break; -case 1124 :{ +int _ret = sm_address_resolution_lookup(_param->addr_type,_param->addr);send_ret_response(1122,sizeof(_ret),&_ret);}break; +case 1123: { #pragma pack (push, 1) struct _param {hci_con_handle_t con_handle;io_capability_t io_capability;uint8_t auth_req;} *_param = (struct _param *)call->body; #pragma pack (pop) sm_config_conn(_param->con_handle,_param->io_capability,_param->auth_req);}break; -case 1125 :{ +case 1124: { #pragma pack (push, 1) struct _param {hci_con_handle_t con_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) sm_bonding_decline(_param->con_handle);}break; -case 1126 :{ +case 1125: { #pragma pack (push, 1) struct _param {hci_con_handle_t con_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) sm_just_works_confirm(_param->con_handle);}break; -case 1127 :{ +case 1126: { #pragma pack (push, 1) struct _param {hci_con_handle_t con_handle;uint32_t passkey;} *_param = (struct _param *)call->body; #pragma pack (pop) sm_passkey_input(_param->con_handle,_param->passkey);}break; -case 1128 :{ +case 1127: { #pragma pack (push, 1) struct _param {hci_con_handle_t con_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) sm_send_security_request(_param->con_handle);}break; -case 1129 :{ +case 1128: { #pragma pack (push, 1) struct _param {hci_con_handle_t con_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) -int _ret = sm_encryption_key_size(_param->con_handle);send_ret_response(1129,sizeof(_ret),&_ret);}break; -case 1130 :{ +int _ret = sm_encryption_key_size(_param->con_handle);send_ret_response(1128,sizeof(_ret),&_ret);}break; +case 1129: { #pragma pack (push, 1) struct _param {hci_con_handle_t con_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) -int _ret = sm_authenticated(_param->con_handle);send_ret_response(1130,sizeof(_ret),&_ret);}break; -case 1131 :{ +int _ret = sm_authenticated(_param->con_handle);send_ret_response(1129,sizeof(_ret),&_ret);}break; +case 1130: { #pragma pack (push, 1) struct _param {hci_con_handle_t con_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) -authorization_state_t _ret = sm_authorization_state(_param->con_handle);send_ret_response(1131,sizeof(_ret),&_ret);}break; -case 1132 :{ +authorization_state_t _ret = sm_authorization_state(_param->con_handle);send_ret_response(1130,sizeof(_ret),&_ret);}break; +case 1131: { #pragma pack (push, 1) struct _param {hci_con_handle_t con_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) sm_request_pairing(_param->con_handle);}break; -case 1133 :{ +case 1132: { #pragma pack (push, 1) struct _param {hci_con_handle_t con_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) sm_authorization_decline(_param->con_handle);}break; -case 1134 :{ +case 1133: { #pragma pack (push, 1) struct _param {hci_con_handle_t con_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) sm_authorization_grant(_param->con_handle);}break; -case 1135 :{ +case 1134: { #pragma pack (push, 1) struct _param {hci_con_handle_t con_handle;} *_param = (struct _param *)call->body; #pragma pack (pop) -int _ret = sm_le_device_key(_param->con_handle);send_ret_response(1135,sizeof(_ret),&_ret);}break; +int _ret = sm_le_device_key(_param->con_handle);send_ret_response(1134,sizeof(_ret),&_ret);}break; +case 1135: { +#pragma pack (push, 1) +struct _param {} *_param = (struct _param *)call->body; +#pragma pack (pop) +kv_remove_all();}break; +case 1136: { +#pragma pack (push, 1) +struct _param {const kvkey_t key;} *_param = (struct _param *)call->body; +#pragma pack (pop) +kv_remove(_param->key);}break; +case 1137: { +#pragma pack (push, 1) +struct _param {const kvkey_t key;const uint8_t * data;int16_t length;} *_param = (struct _param *)call->body; +#pragma pack (pop) +int _ret = kv_put(_param->key,(const uint8_t *)sys_mem_map(_param->data),_param->length);send_ret_response(1137,sizeof(_ret),&_ret);}break; +case 1138: { +#pragma pack (push, 1) +struct _param {} *_param = (struct _param *)call->body; +#pragma pack (pop) +kv_value_modified();}break; +case 1139: { +#pragma pack (push, 1) +struct _param {int flag_always_write;} *_param = (struct _param *)call->body; +#pragma pack (pop) +kv_commit(_param->flag_always_write);}break; +case 1140: { +#pragma pack (push, 1) +struct _param {int index;} *_param = (struct _param *)call->body; +#pragma pack (pop) +le_device_db_remove_key(_param->index);}break; diff --git a/examples/ble_rpc/data/brpc_handlers_weak.inc b/examples/ble_rpc/data/brpc_handlers_weak.inc index 60f050da9..0efee67fb 100644 --- a/examples/ble_rpc/data/brpc_handlers_weak.inc +++ b/examples/ble_rpc/data/brpc_handlers_weak.inc @@ -1,135 +1,140 @@ -__attribute((weak)) void platform_reset() {UNDEF_FUN(1001); } +__attribute((weak)) void platform_reset(void) {UNDEF_FUN(1001); } __attribute((weak)) void platform_switch_app(const uint32_t app_addr) {UNDEF_FUN(1002); } __attribute((weak)) void platform_write_persistent_reg(const uint8_t value) {UNDEF_FUN(1003); } -__attribute((weak)) uint8_t platform_read_persistent_reg() {UNDEF_FUN(1004); return (uint8_t)0; } +__attribute((weak)) uint8_t platform_read_persistent_reg(void) {UNDEF_FUN(1004); return (uint8_t)0;} __attribute((weak)) void platform_config(const platform_cfg_item_t item,const uint32_t flag) {UNDEF_FUN(1005); } -__attribute((weak)) uint32_t platform_read_info(const platform_info_item_t item) {UNDEF_FUN(1006); return (uint32_t)0; } -__attribute((weak)) uint32_t platform_calibrate_rt_clk() {UNDEF_FUN(1007); return (uint32_t)0; } +__attribute((weak)) uint32_t platform_read_info(const platform_info_item_t item) {UNDEF_FUN(1006); return (uint32_t)0;} +__attribute((weak)) uint32_t platform_calibrate_rt_clk(void) {UNDEF_FUN(1007); return (uint32_t)0;} __attribute((weak)) void platform_rt_rc_tune(uint16_t value) {UNDEF_FUN(1008); } -__attribute((weak)) uint16_t platform_rt_rc_auto_tune() {UNDEF_FUN(1009); return (uint16_t)0; } -__attribute((weak)) int platform_rand() {UNDEF_FUN(1010); return (int)0; } -__attribute((weak)) uint64_t platform_get_us_time() {UNDEF_FUN(1011); return (uint64_t)0; } +__attribute((weak)) uint16_t platform_rt_rc_auto_tune(void) {UNDEF_FUN(1009); return (uint16_t)0;} +__attribute((weak)) int platform_rand(void) {UNDEF_FUN(1010); return (int)0;} +__attribute((weak)) uint64_t platform_get_us_time(void) {UNDEF_FUN(1011); return (uint64_t)0;} __attribute((weak)) void platform_set_rf_clk_source(const uint8_t source) {UNDEF_FUN(1012); } -__attribute((weak)) uintptr_t platform_get_task_handle(platform_task_id_t id) {UNDEF_FUN(1013); return (uintptr_t)0; } -__attribute((weak)) uint8_t gap_set_random_device_address(const uint8_t * address) {UNDEF_FUN(1014); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_disconnect(hci_con_handle_t handle) {UNDEF_FUN(1015); return (uint8_t)0; } -__attribute((weak)) void gap_disconnect_all() {UNDEF_FUN(1016); } -__attribute((weak)) uint8_t gap_add_whitelist(const uint8_t * address,bd_addr_type_t addtype) {UNDEF_FUN(1017); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_remove_whitelist(const uint8_t * address,bd_addr_type_t addtype) {UNDEF_FUN(1018); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_clear_white_lists() {UNDEF_FUN(1019); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_read_rssi(hci_con_handle_t handle) {UNDEF_FUN(1020); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_read_remote_used_features(hci_con_handle_t handle) {UNDEF_FUN(1021); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_read_remote_version(hci_con_handle_t handle) {UNDEF_FUN(1022); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_le_read_channel_map(hci_con_handle_t handle) {UNDEF_FUN(1023); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_read_phy(const uint16_t con_handle) {UNDEF_FUN(1024); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_def_phy(const uint8_t all_phys,const phy_bittypes_t tx_phys,const phy_bittypes_t rx_phys) {UNDEF_FUN(1025); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_phy(const uint16_t con_handle,const uint8_t all_phys,const phy_bittypes_t tx_phys,const phy_bittypes_t rx_phys,const phy_option_t phy_opt) {UNDEF_FUN(1026); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_adv_set_random_addr(const uint8_t adv_handle,const uint8_t * random_addr) {UNDEF_FUN(1027); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_ext_scan_para(const bd_addr_type_t own_addr_type,const scan_filter_policy_t filter,const uint8_t config_num,const scan_phy_config_t * configs) {UNDEF_FUN(1028); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_ext_scan_response_data(const uint8_t adv_handle,const uint16_t length,const uint8_t * data) {UNDEF_FUN(1029); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_ext_scan_enable(const uint8_t enable,const uint8_t filter,const uint16_t duration,const uint16_t period) {UNDEF_FUN(1030); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_ext_adv_enable(const uint8_t enable,const uint8_t set_number,const ext_adv_set_en_t * adv_sets) {UNDEF_FUN(1031); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_ext_adv_para(const uint8_t adv_handle,const adv_event_properties_t properties,const uint32_t interval_min,const uint32_t interval_max,const adv_channel_bits_t primary_adv_channel_map,const bd_addr_type_t own_addr_type,const bd_addr_type_t peer_addr_type,const uint8_t * peer_addr,const adv_filter_policy_t adv_filter_policy,const int8_t tx_power,const phy_type_t primary_adv_phy,const uint8_t secondary_adv_max_skip,const phy_type_t secondary_adv_phy,const uint8_t sid,const uint8_t scan_req_notification_enable) {UNDEF_FUN(1032); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_ext_adv_data(const uint8_t adv_handle,uint16_t length,const uint8_t * data) {UNDEF_FUN(1033); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_periodic_adv_data(const uint8_t adv_handle,uint16_t length,const uint8_t * data) {UNDEF_FUN(1034); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_periodic_adv_enable(const uint8_t enable,const uint8_t adv_handle) {UNDEF_FUN(1035); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_periodic_adv_para(const uint8_t adv_handle,const uint16_t interval_min,const uint16_t interval_max,const periodic_adv_properties_t properties) {UNDEF_FUN(1036); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_clr_adv_set() {UNDEF_FUN(1037); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_rmv_adv_set(const uint8_t adv_handle) {UNDEF_FUN(1038); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_periodic_adv_create_sync(const periodic_adv_filter_policy_t filter_policy,const uint8_t adv_sid,const bd_addr_type_t addr_type,const uint8_t * addr,const uint16_t skip,const uint16_t sync_timeout,const uint8_t sync_cte_type) {UNDEF_FUN(1039); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_periodic_adv_create_sync_cancel() {UNDEF_FUN(1040); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_periodic_adv_term_sync(const uint16_t sync_handle) {UNDEF_FUN(1041); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_add_dev_to_periodic_list(const uint8_t addr_type,const uint8_t * addr,const uint8_t sid) {UNDEF_FUN(1042); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_rmv_dev_from_periodic_list(const uint8_t addr_type,const uint8_t * addr,const uint8_t sid) {UNDEF_FUN(1043); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_clr_periodic_adv_list() {UNDEF_FUN(1044); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_read_periodic_adv_list_size() {UNDEF_FUN(1045); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_ext_create_connection(const initiating_filter_policy_t filter_policy,const bd_addr_type_t own_addr_type,const bd_addr_type_t peer_addr_type,const uint8_t * peer_addr,const uint8_t initiating_phy_num,const initiating_phy_config_t * phy_configs) {UNDEF_FUN(1046); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_create_connection_cancel() {UNDEF_FUN(1047); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_data_length(uint16_t connection_handle,uint16_t tx_octets,uint16_t tx_time) {UNDEF_FUN(1048); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_connectionless_cte_tx_param(const uint8_t adv_handle,const uint8_t cte_len,const cte_type_t cte_type,const uint8_t cte_count,const uint8_t switching_pattern_len,const uint8_t * antenna_ids) {UNDEF_FUN(1049); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_connectionless_cte_tx_enable(const uint8_t adv_handle,const uint8_t cte_enable) {UNDEF_FUN(1050); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_connectionless_iq_sampling_enable(const uint16_t sync_handle,const uint8_t sampling_enable,const cte_slot_duration_type_t slot_durations,const uint8_t max_sampled_ctes,const uint8_t switching_pattern_len,const uint8_t * antenna_ids) {UNDEF_FUN(1051); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_connection_cte_rx_param(const hci_con_handle_t conn_handle,const uint8_t sampling_enable,const cte_slot_duration_type_t slot_durations,const uint8_t switching_pattern_len,const uint8_t * antenna_ids) {UNDEF_FUN(1052); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_connection_cte_tx_param(const hci_con_handle_t conn_handle,const uint8_t cte_types,const uint8_t switching_pattern_len,const uint8_t * antenna_ids) {UNDEF_FUN(1053); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_connection_cte_request_enable(const hci_con_handle_t conn_handle,const uint8_t enable,const uint16_t requested_cte_interval,const uint8_t requested_cte_length,const cte_type_t requested_cte_type) {UNDEF_FUN(1054); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_connection_cte_response_enable(const hci_con_handle_t conn_handle,const uint8_t enable) {UNDEF_FUN(1055); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_read_antenna_info() {UNDEF_FUN(1056); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_periodic_adv_rx_enable(const uint16_t sync_handle,const uint8_t enable) {UNDEF_FUN(1057); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_periodic_adv_sync_transfer(const hci_con_handle_t conn_handle,const uint16_t service_data,const uint16_t sync_handle) {UNDEF_FUN(1058); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_periodic_adv_set_info_transfer(const hci_con_handle_t conn_handle,const uint16_t service_data,const uint8_t adv_handle) {UNDEF_FUN(1059); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_periodic_adv_sync_transfer_param(const hci_con_handle_t conn_handle,const periodic_adv_sync_transfer_mode_t mode,const uint16_t skip,const uint16_t sync_timeout,const uint8_t cte_excl_types) {UNDEF_FUN(1060); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_default_periodic_adv_sync_transfer_param(const periodic_adv_sync_transfer_mode_t mode,const uint16_t skip,const uint16_t sync_timeout,const uint8_t cte_excl_types) {UNDEF_FUN(1061); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_host_channel_classification(const uint32_t channel_low,const uint8_t channel_high) {UNDEF_FUN(1062); return (uint8_t)0; } -__attribute((weak)) int gap_update_connection_parameters(hci_con_handle_t con_handle,uint16_t conn_interval_min,uint16_t conn_interval_max,uint16_t conn_latency,uint16_t supervision_timeout,uint16_t min_ce_len,uint16_t max_ce_len) {UNDEF_FUN(1063); return (int)0; } +__attribute((weak)) uintptr_t platform_get_task_handle(platform_task_id_t id) {UNDEF_FUN(1013); return (uintptr_t)0;} +__attribute((weak)) uint8_t gap_set_random_device_address(const uint8_t * address) {UNDEF_FUN(1014); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_disconnect(hci_con_handle_t handle) {UNDEF_FUN(1015); return (uint8_t)0;} +__attribute((weak)) void gap_disconnect_all(void) {UNDEF_FUN(1016); } +__attribute((weak)) uint8_t gap_add_whitelist(const uint8_t * address,bd_addr_type_t addtype) {UNDEF_FUN(1017); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_remove_whitelist(const uint8_t * address,bd_addr_type_t addtype) {UNDEF_FUN(1018); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_clear_white_lists(void) {UNDEF_FUN(1019); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_read_rssi(hci_con_handle_t handle) {UNDEF_FUN(1020); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_read_remote_used_features(hci_con_handle_t handle) {UNDEF_FUN(1021); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_read_remote_version(hci_con_handle_t handle) {UNDEF_FUN(1022); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_le_read_channel_map(hci_con_handle_t handle) {UNDEF_FUN(1023); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_read_phy(const uint16_t con_handle) {UNDEF_FUN(1024); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_def_phy(const uint8_t all_phys,const phy_bittypes_t tx_phys,const phy_bittypes_t rx_phys) {UNDEF_FUN(1025); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_phy(const uint16_t con_handle,const uint8_t all_phys,const phy_bittypes_t tx_phys,const phy_bittypes_t rx_phys,const phy_option_t phy_opt) {UNDEF_FUN(1026); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_adv_set_random_addr(const uint8_t adv_handle,const uint8_t * random_addr) {UNDEF_FUN(1027); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_ext_scan_para(const bd_addr_type_t own_addr_type,const scan_filter_policy_t filter,const uint8_t config_num,const scan_phy_config_t * configs) {UNDEF_FUN(1028); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_ext_scan_response_data(const uint8_t adv_handle,const uint16_t length,const uint8_t * data) {UNDEF_FUN(1029); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_ext_scan_enable(const uint8_t enable,const uint8_t filter,const uint16_t duration,const uint16_t period) {UNDEF_FUN(1030); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_ext_adv_enable(const uint8_t enable,const uint8_t set_number,const ext_adv_set_en_t * adv_sets) {UNDEF_FUN(1031); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_ext_adv_para(const uint8_t adv_handle,const adv_event_properties_t properties,const uint32_t interval_min,const uint32_t interval_max,const adv_channel_bits_t primary_adv_channel_map,const bd_addr_type_t own_addr_type,const bd_addr_type_t peer_addr_type,const uint8_t * peer_addr,const adv_filter_policy_t adv_filter_policy,const int8_t tx_power,const phy_type_t primary_adv_phy,const uint8_t secondary_adv_max_skip,const phy_type_t secondary_adv_phy,const uint8_t sid,const uint8_t scan_req_notification_enable) {UNDEF_FUN(1032); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_ext_adv_data(const uint8_t adv_handle,uint16_t length,const uint8_t * data) {UNDEF_FUN(1033); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_periodic_adv_data(const uint8_t adv_handle,uint16_t length,const uint8_t * data) {UNDEF_FUN(1034); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_periodic_adv_enable(const uint8_t enable,const uint8_t adv_handle) {UNDEF_FUN(1035); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_periodic_adv_para(const uint8_t adv_handle,const uint16_t interval_min,const uint16_t interval_max,const periodic_adv_properties_t properties) {UNDEF_FUN(1036); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_clr_adv_set(void) {UNDEF_FUN(1037); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_rmv_adv_set(const uint8_t adv_handle) {UNDEF_FUN(1038); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_periodic_adv_create_sync(const periodic_adv_filter_policy_t filter_policy,const uint8_t adv_sid,const bd_addr_type_t addr_type,const uint8_t * addr,const uint16_t skip,const uint16_t sync_timeout,const uint8_t sync_cte_type) {UNDEF_FUN(1039); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_periodic_adv_create_sync_cancel(void) {UNDEF_FUN(1040); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_periodic_adv_term_sync(const uint16_t sync_handle) {UNDEF_FUN(1041); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_add_dev_to_periodic_list(const uint8_t addr_type,const uint8_t * addr,const uint8_t sid) {UNDEF_FUN(1042); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_rmv_dev_from_periodic_list(const uint8_t addr_type,const uint8_t * addr,const uint8_t sid) {UNDEF_FUN(1043); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_clr_periodic_adv_list(void) {UNDEF_FUN(1044); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_read_periodic_adv_list_size(void) {UNDEF_FUN(1045); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_ext_create_connection(const initiating_filter_policy_t filter_policy,const bd_addr_type_t own_addr_type,const bd_addr_type_t peer_addr_type,const uint8_t * peer_addr,const uint8_t initiating_phy_num,const initiating_phy_config_t * phy_configs) {UNDEF_FUN(1046); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_create_connection_cancel(void) {UNDEF_FUN(1047); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_data_length(uint16_t connection_handle,uint16_t tx_octets,uint16_t tx_time) {UNDEF_FUN(1048); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_connectionless_cte_tx_param(const uint8_t adv_handle,const uint8_t cte_len,const cte_type_t cte_type,const uint8_t cte_count,const uint8_t switching_pattern_len,const uint8_t * antenna_ids) {UNDEF_FUN(1049); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_connectionless_cte_tx_enable(const uint8_t adv_handle,const uint8_t cte_enable) {UNDEF_FUN(1050); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_connectionless_iq_sampling_enable(const uint16_t sync_handle,const uint8_t sampling_enable,const cte_slot_duration_type_t slot_durations,const uint8_t max_sampled_ctes,const uint8_t switching_pattern_len,const uint8_t * antenna_ids) {UNDEF_FUN(1051); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_connection_cte_rx_param(const hci_con_handle_t conn_handle,const uint8_t sampling_enable,const cte_slot_duration_type_t slot_durations,const uint8_t switching_pattern_len,const uint8_t * antenna_ids) {UNDEF_FUN(1052); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_connection_cte_tx_param(const hci_con_handle_t conn_handle,const uint8_t cte_types,const uint8_t switching_pattern_len,const uint8_t * antenna_ids) {UNDEF_FUN(1053); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_connection_cte_request_enable(const hci_con_handle_t conn_handle,const uint8_t enable,const uint16_t requested_cte_interval,const uint8_t requested_cte_length,const cte_type_t requested_cte_type) {UNDEF_FUN(1054); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_connection_cte_response_enable(const hci_con_handle_t conn_handle,const uint8_t enable) {UNDEF_FUN(1055); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_read_antenna_info(void) {UNDEF_FUN(1056); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_periodic_adv_rx_enable(const uint16_t sync_handle,const uint8_t enable) {UNDEF_FUN(1057); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_periodic_adv_sync_transfer(const hci_con_handle_t conn_handle,const uint16_t service_data,const uint16_t sync_handle) {UNDEF_FUN(1058); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_periodic_adv_set_info_transfer(const hci_con_handle_t conn_handle,const uint16_t service_data,const uint8_t adv_handle) {UNDEF_FUN(1059); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_periodic_adv_sync_transfer_param(const hci_con_handle_t conn_handle,const periodic_adv_sync_transfer_mode_t mode,const uint16_t skip,const uint16_t sync_timeout,const uint8_t cte_excl_types) {UNDEF_FUN(1060); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_default_periodic_adv_sync_transfer_param(const periodic_adv_sync_transfer_mode_t mode,const uint16_t skip,const uint16_t sync_timeout,const uint8_t cte_excl_types) {UNDEF_FUN(1061); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_host_channel_classification(const uint32_t channel_low,const uint8_t channel_high) {UNDEF_FUN(1062); return (uint8_t)0;} +__attribute((weak)) int gap_update_connection_parameters(hci_con_handle_t con_handle,uint16_t conn_interval_min,uint16_t conn_interval_max,uint16_t conn_latency,uint16_t supervision_timeout,uint16_t min_ce_len,uint16_t max_ce_len) {UNDEF_FUN(1063); return (int)0;} __attribute((weak)) void gap_get_connection_parameter_range(le_connection_parameter_range_t * range) {UNDEF_FUN(1064); } __attribute((weak)) void gap_set_connection_parameter_range(le_connection_parameter_range_t * range) {UNDEF_FUN(1065); } -__attribute((weak)) uint8_t gap_read_local_tx_power_level(hci_con_handle_t con_handle,unified_phy_type_t phy) {UNDEF_FUN(1066); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_read_remote_tx_power_level(hci_con_handle_t con_handle,unified_phy_type_t phy) {UNDEF_FUN(1067); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_path_loss_reporting_param(hci_con_handle_t con_handle,uint8_t high_threshold,uint8_t high_hysteresis,uint8_t low_threshold,uint8_t low_hysteresis,uint8_t min_time_spent) {UNDEF_FUN(1068); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_path_loss_reporting_enable(hci_con_handle_t con_handle,uint8_t enable) {UNDEF_FUN(1069); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_tx_power_reporting_enable(hci_con_handle_t con_handle,uint8_t local_enable,uint8_t remote_enable) {UNDEF_FUN(1070); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_set_default_subrate(uint16_t subrate_min,uint16_t subrate_max,uint16_t max_latency,uint16_t continuation_number,uint16_t supervision_timeout) {UNDEF_FUN(1071); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_subrate_request(hci_con_handle_t con_handle,uint16_t subrate_min,uint16_t subrate_max,uint16_t max_latency,uint16_t continuation_number,uint16_t supervision_timeout) {UNDEF_FUN(1072); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_aes_encrypt(const uint8_t * key,const uint8_t * plaintext,gap_hci_cmd_complete_cb_t cb,void * user_data) {UNDEF_FUN(1073); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_rx_test_v2(uint8_t rx_channel,uint8_t phy,uint8_t modulation_index) {UNDEF_FUN(1074); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_rx_test_v3(uint8_t rx_channel,uint8_t phy,uint8_t modulation_index,uint8_t expected_cte_length,uint8_t expected_cte_type,uint8_t slot_durations,uint8_t switching_pattern_length,const uint8_t * antenna_ids) {UNDEF_FUN(1075); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_tx_test_v2(uint8_t tx_channel,uint8_t test_data_length,uint8_t packet_payload,uint8_t phy) {UNDEF_FUN(1076); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_tx_test_v4(uint8_t tx_channel,uint8_t test_data_length,uint8_t packet_payload,uint8_t phy,uint8_t cte_length,uint8_t cte_type,uint8_t switching_pattern_length,const uint8_t * antenna_ids,int8_t tx_power_level) {UNDEF_FUN(1077); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_test_end() {UNDEF_FUN(1078); return (uint8_t)0; } -__attribute((weak)) uint8_t gap_vendor_tx_continuous_wave(uint8_t enable,uint8_t power_level_index,uint16_t freq) {UNDEF_FUN(1079); return (uint8_t)0; } -__attribute((weak)) int att_server_deferred_read_response(hci_con_handle_t con_handle,uint16_t attribute_handle,const uint8_t * value,uint16_t value_len) {UNDEF_FUN(1080); return (int)0; } -__attribute((weak)) int att_server_notify(hci_con_handle_t con_handle,uint16_t attribute_handle,const uint8_t * value,uint16_t value_len) {UNDEF_FUN(1081); return (int)0; } -__attribute((weak)) int att_server_indicate(hci_con_handle_t con_handle,uint16_t attribute_handle,const uint8_t * value,uint16_t value_len) {UNDEF_FUN(1082); return (int)0; } -__attribute((weak)) uint16_t att_server_get_mtu(hci_con_handle_t con_handle) {UNDEF_FUN(1083); return (uint16_t)0; } -__attribute((weak)) uint8_t gatt_client_discover_primary_services(user_packet_handler_t callback,hci_con_handle_t con_handle) {UNDEF_FUN(1084); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_discover_primary_services_by_uuid16(user_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t uuid16) {UNDEF_FUN(1085); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_discover_primary_services_by_uuid128(user_packet_handler_t callback,hci_con_handle_t con_handle,const uint8_t * uuid128) {UNDEF_FUN(1086); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_find_included_services_for_service(user_packet_handler_t callback,hci_con_handle_t con_handle,const uint16_t start_group_handle,const uint16_t end_group_handle) {UNDEF_FUN(1087); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_discover_characteristics_for_service(user_packet_handler_t callback,hci_con_handle_t con_handle,const uint16_t start_group_handle,const uint16_t end_group_handle) {UNDEF_FUN(1088); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_discover_characteristics_for_handle_range_by_uuid16(btstack_packet_handler_t callback,const hci_con_handle_t con_handle,const uint16_t start_handle,const uint16_t end_handle,const uint16_t uuid16) {UNDEF_FUN(1089); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_discover_characteristics_for_handle_range_by_uuid128(btstack_packet_handler_t callback,const hci_con_handle_t con_handle,const uint16_t start_handle,const uint16_t end_handle,const uint8_t * uuid128) {UNDEF_FUN(1090); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_discover_characteristic_descriptors(btstack_packet_handler_t callback,hci_con_handle_t con_handle,gatt_client_characteristic_t * characteristic) {UNDEF_FUN(1091); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_read_value_of_characteristic_using_value_handle(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t characteristic_value_handle) {UNDEF_FUN(1092); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_read_value_of_characteristics_by_uuid16(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t start_handle,uint16_t end_handle,uint16_t uuid16) {UNDEF_FUN(1093); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_read_value_of_characteristics_by_uuid128(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t start_handle,uint16_t end_handle,uint8_t * uuid128) {UNDEF_FUN(1094); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_read_long_value_of_characteristic_using_value_handle(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t characteristic_value_handle) {UNDEF_FUN(1095); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t characteristic_value_handle,uint16_t offset) {UNDEF_FUN(1096); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_read_multiple_characteristic_values(btstack_packet_handler_t callback,hci_con_handle_t con_handle,int num_value_handles,uint16_t * value_handles) {UNDEF_FUN(1097); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_write_value_of_characteristic_without_response(hci_con_handle_t con_handle,uint16_t characteristic_value_handle,uint16_t length,const uint8_t * data) {UNDEF_FUN(1098); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_signed_write_without_response(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t handle,uint16_t message_len,const uint8_t * message) {UNDEF_FUN(1099); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_write_value_of_characteristic(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t characteristic_value_handle,uint16_t length,const uint8_t * data) {UNDEF_FUN(1100); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_write_long_value_of_characteristic(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t characteristic_value_handle,uint16_t length,const uint8_t * data) {UNDEF_FUN(1101); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_write_long_value_of_characteristic_with_offset(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t characteristic_value_handle,uint16_t offset,uint16_t length,const uint8_t * data) {UNDEF_FUN(1102); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_reliable_write_long_value_of_characteristic(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t characteristic_value_handle,uint16_t length,const uint8_t * data) {UNDEF_FUN(1103); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_read_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t descriptor_handle) {UNDEF_FUN(1104); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_read_long_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t descriptor_handle) {UNDEF_FUN(1105); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t descriptor_handle,uint16_t offset) {UNDEF_FUN(1106); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_write_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t descriptor_handle,uint16_t length,uint8_t * data) {UNDEF_FUN(1107); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_write_long_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t descriptor_handle,uint16_t length,uint8_t * data) {UNDEF_FUN(1108); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t descriptor_handle,uint16_t offset,uint16_t length,uint8_t * data) {UNDEF_FUN(1109); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_write_client_characteristic_configuration(btstack_packet_handler_t callback,hci_con_handle_t con_handle,gatt_client_characteristic_t * characteristic,uint16_t configuration) {UNDEF_FUN(1110); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_prepare_write(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t attribute_handle,uint16_t offset,uint16_t length,uint8_t * data) {UNDEF_FUN(1111); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_execute_write(btstack_packet_handler_t callback,hci_con_handle_t con_handle) {UNDEF_FUN(1112); return (uint8_t)0; } -__attribute((weak)) uint8_t gatt_client_cancel_write(btstack_packet_handler_t callback,hci_con_handle_t con_handle) {UNDEF_FUN(1113); return (uint8_t)0; } -__attribute((weak)) int gatt_client_is_ready(hci_con_handle_t con_handle) {UNDEF_FUN(1114); return (int)0; } -__attribute((weak)) void gatt_client_listen_for_characteristic_value_updates(gatt_client_notification_t * notification,btstack_packet_handler_t packet_handler,hci_con_handle_t con_handle,uint16_t value_handle) {UNDEF_FUN(1115); } -__attribute((weak)) void sm_config(uint8_t enable,io_capability_t io_capability,int request_security,const sm_persistent_t * persistent) {UNDEF_FUN(1116); } -__attribute((weak)) void sm_private_random_address_generation_set_mode(gap_random_address_type_t random_address_type) {UNDEF_FUN(1117); } -__attribute((weak)) gap_random_address_type_t sm_private_random_address_generation_get_mode() {UNDEF_FUN(1118); return (gap_random_address_type_t)0; } -__attribute((weak)) void sm_private_random_address_generation_set_update_period(int period_ms) {UNDEF_FUN(1119); } -__attribute((weak)) void sm_set_accepted_stk_generation_methods(uint8_t accepted_stk_generation_methods) {UNDEF_FUN(1120); } -__attribute((weak)) void sm_set_encryption_key_size_range(uint8_t min_size,uint8_t max_size) {UNDEF_FUN(1121); } -__attribute((weak)) void sm_set_authentication_requirements(uint8_t auth_req) {UNDEF_FUN(1122); } -__attribute((weak)) int sm_address_resolution_lookup(uint8_t addr_type,bd_addr_t addr) {UNDEF_FUN(1123); return (int)0; } -__attribute((weak)) void sm_config_conn(hci_con_handle_t con_handle,io_capability_t io_capability,uint8_t auth_req) {UNDEF_FUN(1124); } -__attribute((weak)) void sm_bonding_decline(hci_con_handle_t con_handle) {UNDEF_FUN(1125); } -__attribute((weak)) void sm_just_works_confirm(hci_con_handle_t con_handle) {UNDEF_FUN(1126); } -__attribute((weak)) void sm_passkey_input(hci_con_handle_t con_handle,uint32_t passkey) {UNDEF_FUN(1127); } -__attribute((weak)) void sm_send_security_request(hci_con_handle_t con_handle) {UNDEF_FUN(1128); } -__attribute((weak)) int sm_encryption_key_size(hci_con_handle_t con_handle) {UNDEF_FUN(1129); return (int)0; } -__attribute((weak)) int sm_authenticated(hci_con_handle_t con_handle) {UNDEF_FUN(1130); return (int)0; } -__attribute((weak)) authorization_state_t sm_authorization_state(hci_con_handle_t con_handle) {UNDEF_FUN(1131); return (authorization_state_t)0; } -__attribute((weak)) void sm_request_pairing(hci_con_handle_t con_handle) {UNDEF_FUN(1132); } -__attribute((weak)) void sm_authorization_decline(hci_con_handle_t con_handle) {UNDEF_FUN(1133); } -__attribute((weak)) void sm_authorization_grant(hci_con_handle_t con_handle) {UNDEF_FUN(1134); } -__attribute((weak)) int sm_le_device_key(hci_con_handle_t con_handle) {UNDEF_FUN(1135); return (int)0; } +__attribute((weak)) uint8_t gap_read_local_tx_power_level(hci_con_handle_t con_handle,unified_phy_type_t phy) {UNDEF_FUN(1066); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_read_remote_tx_power_level(hci_con_handle_t con_handle,unified_phy_type_t phy) {UNDEF_FUN(1067); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_path_loss_reporting_param(hci_con_handle_t con_handle,uint8_t high_threshold,uint8_t high_hysteresis,uint8_t low_threshold,uint8_t low_hysteresis,uint8_t min_time_spent) {UNDEF_FUN(1068); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_path_loss_reporting_enable(hci_con_handle_t con_handle,uint8_t enable) {UNDEF_FUN(1069); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_tx_power_reporting_enable(hci_con_handle_t con_handle,uint8_t local_enable,uint8_t remote_enable) {UNDEF_FUN(1070); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_set_default_subrate(uint16_t subrate_min,uint16_t subrate_max,uint16_t max_latency,uint16_t continuation_number,uint16_t supervision_timeout) {UNDEF_FUN(1071); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_subrate_request(hci_con_handle_t con_handle,uint16_t subrate_min,uint16_t subrate_max,uint16_t max_latency,uint16_t continuation_number,uint16_t supervision_timeout) {UNDEF_FUN(1072); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_rx_test_v2(uint8_t rx_channel,uint8_t phy,uint8_t modulation_index) {UNDEF_FUN(1073); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_rx_test_v3(uint8_t rx_channel,uint8_t phy,uint8_t modulation_index,uint8_t expected_cte_length,uint8_t expected_cte_type,uint8_t slot_durations,uint8_t switching_pattern_length,const uint8_t * antenna_ids) {UNDEF_FUN(1074); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_tx_test_v2(uint8_t tx_channel,uint8_t test_data_length,uint8_t packet_payload,uint8_t phy) {UNDEF_FUN(1075); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_tx_test_v4(uint8_t tx_channel,uint8_t test_data_length,uint8_t packet_payload,uint8_t phy,uint8_t cte_length,uint8_t cte_type,uint8_t switching_pattern_length,const uint8_t * antenna_ids,int8_t tx_power_level) {UNDEF_FUN(1076); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_test_end(void) {UNDEF_FUN(1077); return (uint8_t)0;} +__attribute((weak)) uint8_t gap_vendor_tx_continuous_wave(uint8_t enable,uint8_t power_level_index,uint16_t freq) {UNDEF_FUN(1078); return (uint8_t)0;} +__attribute((weak)) int att_server_deferred_read_response(hci_con_handle_t con_handle,uint16_t attribute_handle,const uint8_t * value,uint16_t value_len) {UNDEF_FUN(1079); return (int)0;} +__attribute((weak)) int att_server_notify(hci_con_handle_t con_handle,uint16_t attribute_handle,const uint8_t * value,uint16_t value_len) {UNDEF_FUN(1080); return (int)0;} +__attribute((weak)) int att_server_indicate(hci_con_handle_t con_handle,uint16_t attribute_handle,const uint8_t * value,uint16_t value_len) {UNDEF_FUN(1081); return (int)0;} +__attribute((weak)) uint16_t att_server_get_mtu(hci_con_handle_t con_handle) {UNDEF_FUN(1082); return (uint16_t)0;} +__attribute((weak)) uint8_t gatt_client_discover_primary_services(user_packet_handler_t callback,hci_con_handle_t con_handle) {UNDEF_FUN(1083); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_discover_primary_services_by_uuid16(user_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t uuid16) {UNDEF_FUN(1084); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_discover_primary_services_by_uuid128(user_packet_handler_t callback,hci_con_handle_t con_handle,const uint8_t * uuid128) {UNDEF_FUN(1085); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_find_included_services_for_service(user_packet_handler_t callback,hci_con_handle_t con_handle,const uint16_t start_group_handle,const uint16_t end_group_handle) {UNDEF_FUN(1086); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_discover_characteristics_for_service(user_packet_handler_t callback,hci_con_handle_t con_handle,const uint16_t start_group_handle,const uint16_t end_group_handle) {UNDEF_FUN(1087); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_discover_characteristics_for_handle_range_by_uuid16(btstack_packet_handler_t callback,const hci_con_handle_t con_handle,const uint16_t start_handle,const uint16_t end_handle,const uint16_t uuid16) {UNDEF_FUN(1088); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_discover_characteristics_for_handle_range_by_uuid128(btstack_packet_handler_t callback,const hci_con_handle_t con_handle,const uint16_t start_handle,const uint16_t end_handle,const uint8_t * uuid128) {UNDEF_FUN(1089); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_discover_characteristic_descriptors(btstack_packet_handler_t callback,hci_con_handle_t con_handle,gatt_client_characteristic_t * characteristic) {UNDEF_FUN(1090); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_read_value_of_characteristic_using_value_handle(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t characteristic_value_handle) {UNDEF_FUN(1091); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_read_value_of_characteristics_by_uuid16(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t start_handle,uint16_t end_handle,uint16_t uuid16) {UNDEF_FUN(1092); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_read_value_of_characteristics_by_uuid128(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t start_handle,uint16_t end_handle,uint8_t * uuid128) {UNDEF_FUN(1093); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_read_long_value_of_characteristic_using_value_handle(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t characteristic_value_handle) {UNDEF_FUN(1094); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_read_long_value_of_characteristic_using_value_handle_with_offset(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t characteristic_value_handle,uint16_t offset) {UNDEF_FUN(1095); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_read_multiple_characteristic_values(btstack_packet_handler_t callback,hci_con_handle_t con_handle,int num_value_handles,uint16_t * value_handles) {UNDEF_FUN(1096); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_write_value_of_characteristic_without_response(hci_con_handle_t con_handle,uint16_t characteristic_value_handle,uint16_t length,const uint8_t * data) {UNDEF_FUN(1097); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_signed_write_without_response(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t handle,uint16_t message_len,const uint8_t * message) {UNDEF_FUN(1098); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_write_value_of_characteristic(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t characteristic_value_handle,uint16_t length,const uint8_t * data) {UNDEF_FUN(1099); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_write_long_value_of_characteristic(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t characteristic_value_handle,uint16_t length,const uint8_t * data) {UNDEF_FUN(1100); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_write_long_value_of_characteristic_with_offset(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t characteristic_value_handle,uint16_t offset,uint16_t length,const uint8_t * data) {UNDEF_FUN(1101); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_reliable_write_long_value_of_characteristic(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t characteristic_value_handle,uint16_t length,const uint8_t * data) {UNDEF_FUN(1102); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_read_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t descriptor_handle) {UNDEF_FUN(1103); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_read_long_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t descriptor_handle) {UNDEF_FUN(1104); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_read_long_characteristic_descriptor_using_descriptor_handle_with_offset(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t descriptor_handle,uint16_t offset) {UNDEF_FUN(1105); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_write_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t descriptor_handle,uint16_t length,uint8_t * data) {UNDEF_FUN(1106); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_write_long_characteristic_descriptor_using_descriptor_handle(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t descriptor_handle,uint16_t length,uint8_t * data) {UNDEF_FUN(1107); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_write_long_characteristic_descriptor_using_descriptor_handle_with_offset(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t descriptor_handle,uint16_t offset,uint16_t length,uint8_t * data) {UNDEF_FUN(1108); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_write_client_characteristic_configuration(btstack_packet_handler_t callback,hci_con_handle_t con_handle,gatt_client_characteristic_t * characteristic,uint16_t configuration) {UNDEF_FUN(1109); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_prepare_write(btstack_packet_handler_t callback,hci_con_handle_t con_handle,uint16_t attribute_handle,uint16_t offset,uint16_t length,uint8_t * data) {UNDEF_FUN(1110); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_execute_write(btstack_packet_handler_t callback,hci_con_handle_t con_handle) {UNDEF_FUN(1111); return (uint8_t)0;} +__attribute((weak)) uint8_t gatt_client_cancel_write(btstack_packet_handler_t callback,hci_con_handle_t con_handle) {UNDEF_FUN(1112); return (uint8_t)0;} +__attribute((weak)) int gatt_client_is_ready(hci_con_handle_t con_handle) {UNDEF_FUN(1113); return (int)0;} +__attribute((weak)) void gatt_client_listen_for_characteristic_value_updates(gatt_client_notification_t * notification,btstack_packet_handler_t packet_handler,hci_con_handle_t con_handle,uint16_t value_handle) {UNDEF_FUN(1114); } +__attribute((weak)) int sm_config(uint8_t enable,io_capability_t io_capability,int request_security,const sm_persistent_t * persistent) {UNDEF_FUN(1115); return (int)0;} +__attribute((weak)) void sm_private_random_address_generation_set_mode(gap_random_address_type_t random_address_type) {UNDEF_FUN(1116); } +__attribute((weak)) gap_random_address_type_t sm_private_random_address_generation_get_mode(void) {UNDEF_FUN(1117); return (gap_random_address_type_t)0;} +__attribute((weak)) void sm_private_random_address_generation_set_update_period(int period_ms) {UNDEF_FUN(1118); } +__attribute((weak)) void sm_set_accepted_stk_generation_methods(uint8_t accepted_stk_generation_methods) {UNDEF_FUN(1119); } +__attribute((weak)) void sm_set_encryption_key_size_range(uint8_t min_size,uint8_t max_size) {UNDEF_FUN(1120); } +__attribute((weak)) void sm_set_authentication_requirements(uint8_t auth_req) {UNDEF_FUN(1121); } +__attribute((weak)) int sm_address_resolution_lookup(uint8_t addr_type,bd_addr_t addr) {UNDEF_FUN(1122); return (int)0;} +__attribute((weak)) void sm_config_conn(hci_con_handle_t con_handle,io_capability_t io_capability,uint8_t auth_req) {UNDEF_FUN(1123); } +__attribute((weak)) void sm_bonding_decline(hci_con_handle_t con_handle) {UNDEF_FUN(1124); } +__attribute((weak)) void sm_just_works_confirm(hci_con_handle_t con_handle) {UNDEF_FUN(1125); } +__attribute((weak)) void sm_passkey_input(hci_con_handle_t con_handle,uint32_t passkey) {UNDEF_FUN(1126); } +__attribute((weak)) void sm_send_security_request(hci_con_handle_t con_handle) {UNDEF_FUN(1127); } +__attribute((weak)) int sm_encryption_key_size(hci_con_handle_t con_handle) {UNDEF_FUN(1128); return (int)0;} +__attribute((weak)) int sm_authenticated(hci_con_handle_t con_handle) {UNDEF_FUN(1129); return (int)0;} +__attribute((weak)) authorization_state_t sm_authorization_state(hci_con_handle_t con_handle) {UNDEF_FUN(1130); return (authorization_state_t)0;} +__attribute((weak)) void sm_request_pairing(hci_con_handle_t con_handle) {UNDEF_FUN(1131); } +__attribute((weak)) void sm_authorization_decline(hci_con_handle_t con_handle) {UNDEF_FUN(1132); } +__attribute((weak)) void sm_authorization_grant(hci_con_handle_t con_handle) {UNDEF_FUN(1133); } +__attribute((weak)) int sm_le_device_key(hci_con_handle_t con_handle) {UNDEF_FUN(1134); return (int)0;} +__attribute((weak)) void kv_remove_all(void) {UNDEF_FUN(1135); } +__attribute((weak)) void kv_remove(const kvkey_t key) {UNDEF_FUN(1136); } +__attribute((weak)) int kv_put(const kvkey_t key,const uint8_t * data,int16_t length) {UNDEF_FUN(1137); return (int)0;} +__attribute((weak)) void kv_value_modified(void) {UNDEF_FUN(1138); } +__attribute((weak)) void kv_commit(int flag_always_write) {UNDEF_FUN(1139); } +__attribute((weak)) void le_device_db_remove_key(int index) {UNDEF_FUN(1140); } diff --git a/examples/ble_rpc/src/brpc.c b/examples/ble_rpc/src/brpc.c index a362628db..d944babe9 100644 --- a/examples/ble_rpc/src/brpc.c +++ b/examples/ble_rpc/src/brpc.c @@ -12,6 +12,7 @@ #include "btstack_defines.h" #include "gatt_client.h" #include "sm.h" +#include "kv_storage.h" #include "port_gen_os_driver.h" diff --git a/examples/ble_rpc/src/startup_ing91800.s b/examples/ble_rpc/src/startup_ing91800.s index 3815d690a..0dd98ea6d 100644 --- a/examples/ble_rpc/src/startup_ing91800.s +++ b/examples/ble_rpc/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU (15 * 1024) AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/bqb_rf/bqb_rf.ingw b/examples/bqb_rf/bqb_rf.ingw index dac4570d5..b1ceb4c68 100644 --- a/examples/bqb_rf/bqb_rf.ingw +++ b/examples/bqb_rf/bqb_rf.ingw @@ -1,19 +1,25 @@ { "watchdog": false, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "bf79ff07fe000000", + "addr": 33720012 + } + }, "rom": { - "size": 161312, + "size": 165628, "base": 33562624 }, "ram": { - "size": 21596, + "size": 21532, "base": 536870912 }, "app": { - "base": 33726464 + "base": 33730560 }, "version": [ - 2,3,1] + 2,3,16] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -53,8 +59,8 @@ "power_saving": false, "secondary": false, "bundle": "extension", - "app_rom_size": "352256", - "app_rom_addr": "33726464", + "app_rom_size": "348160", + "app_rom_addr": "33730560", "family": "ing916", "vcode": true, "heap_override": false, @@ -70,8 +76,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 11168, - "app_ram_addr": 536892512, + "app_ram_size": 11232, + "app_ram_addr": 536892448, "k5_cc_ver": "6", "printf_enable": true, "ota_ver_patch": "0", diff --git a/examples/bqb_rf/bqb_rf.uvproj b/examples/bqb_rf/bqb_rf.uvproj index d88bd8b33..45ff3061b 100644 --- a/examples/bqb_rf/bqb_rf.uvproj +++ b/examples/bqb_rf/bqb_rf.uvproj @@ -294,8 +294,8 @@ 1 - 33726464 - 352256 + 33730560 + 348160 1 @@ -319,8 +319,8 @@ 0 - 536892512 - 11168 + 536892448 + 11232 0 diff --git a/examples/bqb_rf/bqb_rf.uvprojx b/examples/bqb_rf/bqb_rf.uvprojx index 7eb49db8d..e86217ac1 100644 --- a/examples/bqb_rf/bqb_rf.uvprojx +++ b/examples/bqb_rf/bqb_rf.uvprojx @@ -273,8 +273,8 @@ 1 - 33726464 - 352256 + 33730560 + 348160 1 @@ -298,8 +298,8 @@ 0 - 536892512 - 11168 + 536892448 + 11232 0 diff --git a/examples/bqb_rf/flash_download.ini b/examples/bqb_rf/flash_download.ini index bdfeac23d..f50fd9bc8 100644 --- a/examples/bqb_rf/flash_download.ini +++ b/examples/bqb_rf/flash_download.ini @@ -38,7 +38,7 @@ Address=33562624 [bin-1] Name=Burn Bin #2 Checked=1 -Address=33726464 +Address=33730560 FileName=bqb_rf.bin [bin-2] diff --git a/examples/bqb_rf/src/profile.c b/examples/bqb_rf/src/profile.c index 47ad87867..7ae65e9c3 100644 --- a/examples/bqb_rf/src/profile.c +++ b/examples/bqb_rf/src/profile.c @@ -119,7 +119,6 @@ void send_next_one(void) return; } - platform_config(PLATFORM_CFG_24M_OSC_TUNE, rf_fo_cmd.tune); ll_raw_packet_set_param(raw_packet, diff --git a/examples/bqb_rf/src/startup_ing91600.s b/examples/bqb_rf/src/startup_ing91600.s index 0f7d42fd1..7fe2b54c8 100644 --- a/examples/bqb_rf/src/startup_ing91600.s +++ b/examples/bqb_rf/src/startup_ing91600.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/central_cte/central_cte.ingw b/examples/central_cte/central_cte.ingw index abec357b3..256ba58dd 100644 --- a/examples/central_cte/central_cte.ingw +++ b/examples/central_cte/central_cte.ingw @@ -1,19 +1,25 @@ { "watchdog": true, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9ff0700000000", + "addr": 158908 + } + }, "rom": { - "size": 146500, + "size": 146876, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 163840 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -69,8 +75,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "printf_enable": true, "ota_ver_patch": "0", "profile_data": "0x00,0x00\r\n\/\/ total size = 2\r\n\r\n\r\n", diff --git a/examples/central_cte/central_cte.uvproj b/examples/central_cte/central_cte.uvproj index aa2e1e83a..64958de3f 100644 --- a/examples/central_cte/central_cte.uvproj +++ b/examples/central_cte/central_cte.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/central_cte/central_cte.uvprojx b/examples/central_cte/central_cte.uvprojx index b5d2445e2..639681081 100644 --- a/examples/central_cte/central_cte.uvprojx +++ b/examples/central_cte/central_cte.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/central_cte/src/startup_ing91800.s b/examples/central_cte/src/startup_ing91800.s index 4406e96c2..b381976c0 100644 --- a/examples/central_cte/src/startup_ing91800.s +++ b/examples/central_cte/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 4096 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/central_fota/central_fota.ingw b/examples/central_fota/central_fota.ingw index 1bed2e6ca..fbe1055f5 100644 --- a/examples/central_fota/central_fota.ingw +++ b/examples/central_fota/central_fota.ingw @@ -1,19 +1,25 @@ { "watchdog": true, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -69,8 +75,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "printf_enable": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples/central_fota/central_fota.uvproj b/examples/central_fota/central_fota.uvproj index 49ccd7c3f..ed50ae16d 100644 --- a/examples/central_fota/central_fota.uvproj +++ b/examples/central_fota/central_fota.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/central_fota/central_fota.uvprojx b/examples/central_fota/central_fota.uvprojx index ba3a522de..e317a08d2 100644 --- a/examples/central_fota/central_fota.uvprojx +++ b/examples/central_fota/central_fota.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/central_fota/src/startup_ing91800.s b/examples/central_fota/src/startup_ing91800.s index 0f7d42fd1..7fe2b54c8 100644 --- a/examples/central_fota/src/startup_ing91800.s +++ b/examples/central_fota/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/central_mass_conn/central_mass_conn.ingw b/examples/central_mass_conn/central_mass_conn.ingw index b9b15a92e..df64604d0 100644 --- a/examples/central_mass_conn/central_mass_conn.ingw +++ b/examples/central_mass_conn/central_mass_conn.ingw @@ -1,19 +1,25 @@ { "watchdog": true, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148740 + } + }, "rom": { - "size": 135872, + "size": 136248, "base": 16384 }, "ram": { - "size": 33104, + "size": 33040, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -69,8 +75,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 32432, - "app_ram_addr": 536904016, + "app_ram_size": 32496, + "app_ram_addr": 536903952, "printf_enable": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples/central_mass_conn/central_mass_conn.uvproj b/examples/central_mass_conn/central_mass_conn.uvproj index 124dbaeb9..2b9b8b985 100644 --- a/examples/central_mass_conn/central_mass_conn.uvproj +++ b/examples/central_mass_conn/central_mass_conn.uvproj @@ -319,8 +319,8 @@ 0 - 536904016 - 32432 + 536903952 + 32496 0 diff --git a/examples/central_mass_conn/central_mass_conn.uvprojx b/examples/central_mass_conn/central_mass_conn.uvprojx index 5caea5154..013792ea0 100644 --- a/examples/central_mass_conn/central_mass_conn.uvprojx +++ b/examples/central_mass_conn/central_mass_conn.uvprojx @@ -297,8 +297,8 @@ 0 - 536904016 - 32432 + 536903952 + 32496 0 diff --git a/examples/central_mass_conn/src/startup_ing91800.s b/examples/central_mass_conn/src/startup_ing91800.s index 0f7d42fd1..7fe2b54c8 100644 --- a/examples/central_mass_conn/src/startup_ing91800.s +++ b/examples/central_mass_conn/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/central_throughput/central_throughput.ingw b/examples/central_throughput/central_throughput.ingw index 57a1212bf..48c4118a0 100644 --- a/examples/central_throughput/central_throughput.ingw +++ b/examples/central_throughput/central_throughput.ingw @@ -1,19 +1,25 @@ { "watchdog": false, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -58,8 +64,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples/central_throughput/central_throughput.uvproj b/examples/central_throughput/central_throughput.uvproj index 481a3e12a..118364717 100644 --- a/examples/central_throughput/central_throughput.uvproj +++ b/examples/central_throughput/central_throughput.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/central_throughput/central_throughput.uvprojx b/examples/central_throughput/central_throughput.uvprojx index 52e8b9309..7ef62b74a 100644 --- a/examples/central_throughput/central_throughput.uvprojx +++ b/examples/central_throughput/central_throughput.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/central_throughput/src/startup_ing91800.s b/examples/central_throughput/src/startup_ing91800.s index 7e44b2c58..53907e41a 100644 --- a/examples/central_throughput/src/startup_ing91800.s +++ b/examples/central_throughput/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/coremark/coremark.ingw b/examples/coremark/coremark.ingw index 275b28073..1e532f89b 100644 --- a/examples/coremark/coremark.ingw +++ b/examples/coremark/coremark.ingw @@ -1,19 +1,25 @@ { "watchdog": false, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9ff0700000000", + "addr": 154364 + } + }, "rom": { - "size": 141844, + "size": 142212, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 163840 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -70,8 +76,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "k5_cc_ver": "6", "printf_enable": true, "ota_ver_patch": "0", diff --git a/examples/coremark/coremark.uvproj b/examples/coremark/coremark.uvproj index 5197884f1..a5ad56492 100644 --- a/examples/coremark/coremark.uvproj +++ b/examples/coremark/coremark.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/coremark/coremark.uvprojx b/examples/coremark/coremark.uvprojx index ed0ea37a4..03a42b112 100644 --- a/examples/coremark/coremark.uvprojx +++ b/examples/coremark/coremark.uvprojx @@ -298,8 +298,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/data_logger/data_logger.ingw b/examples/data_logger/data_logger.ingw index fe45308da..071762b21 100644 --- a/examples/data_logger/data_logger.ingw +++ b/examples/data_logger/data_logger.ingw @@ -1,19 +1,25 @@ { "watchdog": true, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -70,8 +76,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "k5_cc_ver": "6", "printf_enable": true, "ota_ver_patch": "0", diff --git a/examples/data_logger/data_logger.uvproj b/examples/data_logger/data_logger.uvproj index e08a8f4fb..d00891316 100644 --- a/examples/data_logger/data_logger.uvproj +++ b/examples/data_logger/data_logger.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/data_logger/data_logger.uvprojx b/examples/data_logger/data_logger.uvprojx index d3df19eb1..4c938dbd5 100644 --- a/examples/data_logger/data_logger.uvprojx +++ b/examples/data_logger/data_logger.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/data_logger/src/startup_ing91800.s b/examples/data_logger/src/startup_ing91800.s index 0f7d42fd1..7fe2b54c8 100644 --- a/examples/data_logger/src/startup_ing91800.s +++ b/examples/data_logger/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/direct_conn/direct_conn.ingw b/examples/direct_conn/direct_conn.ingw index 1498ab910..720c90d67 100644 --- a/examples/direct_conn/direct_conn.ingw +++ b/examples/direct_conn/direct_conn.ingw @@ -1,19 +1,25 @@ { "watchdog": true, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "bff90104fe000000", + "addr": 164336 + } + }, "rom": { - "size": 151996, + "size": 152600, "base": 16384 }, "ram": { - "size": 30268, + "size": 30076, "base": 536870912 }, "app": { "base": 172032 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -71,8 +77,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35264, - "app_ram_addr": 536901184, + "app_ram_size": 35456, + "app_ram_addr": 536900992, "k5_cc_ver": "6", "printf_enable": true, "ota_ver_patch": "0", diff --git a/examples/direct_conn/direct_conn.uvproj b/examples/direct_conn/direct_conn.uvproj index f6e97837b..1a9de1994 100644 --- a/examples/direct_conn/direct_conn.uvproj +++ b/examples/direct_conn/direct_conn.uvproj @@ -319,8 +319,8 @@ 0 - 536901184 - 35264 + 536900992 + 35456 0 diff --git a/examples/direct_conn/direct_conn.uvprojx b/examples/direct_conn/direct_conn.uvprojx index d53fff6ae..24c095a1b 100644 --- a/examples/direct_conn/direct_conn.uvprojx +++ b/examples/direct_conn/direct_conn.uvprojx @@ -297,8 +297,8 @@ 0 - 536901184 - 35264 + 536900992 + 35456 0 diff --git a/examples/direct_conn/src/profile.c b/examples/direct_conn/src/profile.c index c3ad3e54e..48b0cfaf5 100644 --- a/examples/direct_conn/src/profile.c +++ b/examples/direct_conn/src/profile.c @@ -253,6 +253,7 @@ static void user_packet_handler(uint8_t packet_type, uint16_t channel, const uin switch (hci_event_le_meta_get_subevent_code(packet)) { case HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE: + case HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE_V2: platform_printf("connected\n"); #if (CONN_ROLE == HCI_ROLE_MASTER) #else diff --git a/examples/ext_ackable_packet/ext_ackable_packet.ingw b/examples/ext_ackable_packet/ext_ackable_packet.ingw index 87c92ed5a..35d0d4f6a 100644 --- a/examples/ext_ackable_packet/ext_ackable_packet.ingw +++ b/examples/ext_ackable_packet/ext_ackable_packet.ingw @@ -1,19 +1,25 @@ { "watchdog": true, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9ff0700000000", + "addr": 158908 + } + }, "rom": { - "size": 146500, + "size": 146876, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 163840 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -69,8 +75,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "printf_enable": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples/ext_ackable_packet/ext_ackable_packet.uvproj b/examples/ext_ackable_packet/ext_ackable_packet.uvproj index 52013f241..06f3b077d 100644 --- a/examples/ext_ackable_packet/ext_ackable_packet.uvproj +++ b/examples/ext_ackable_packet/ext_ackable_packet.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/ext_ackable_packet/ext_ackable_packet.uvprojx b/examples/ext_ackable_packet/ext_ackable_packet.uvprojx index cd5f86d60..2e3e9e3b4 100644 --- a/examples/ext_ackable_packet/ext_ackable_packet.uvprojx +++ b/examples/ext_ackable_packet/ext_ackable_packet.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/ext_ackable_packet/src/startup_ing91800.s b/examples/ext_ackable_packet/src/startup_ing91800.s index 0f7d42fd1..7fe2b54c8 100644 --- a/examples/ext_ackable_packet/src/startup_ing91800.s +++ b/examples/ext_ackable_packet/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/ext_raw_packet/README.md b/examples/ext_raw_packet/README.md index d179f99cd..147daf16b 100644 --- a/examples/ext_raw_packet/README.md +++ b/examples/ext_raw_packet/README.md @@ -2,7 +2,6 @@ This example demonstrates how to: -* Tx/Rx raw packets using "extension" bundle. +* Tx/Rx raw packets using "extension" bundle; +* Make ING916 into a tester for Freq Offset Tester. -Note: Build with macro "FOR\_TX=1" & "FOR\_TX=0" -to get a pair of Tx/Rx apps. diff --git a/examples/ext_raw_packet/doc/index.md b/examples/ext_raw_packet/doc/index.md index f0ef9f1fd..51f2dfe0c 100644 --- a/examples/ext_raw_packet/doc/index.md +++ b/examples/ext_raw_packet/doc/index.md @@ -4,9 +4,18 @@ This example use "extension" bundle to transmit/receive raw packets. ## Test +### Raw Packet Tx/Rx + Build this example twice, one with `FOR_TX=1`, and the other `FOR_TX=0`, and download them to two Dev-Boards. Check the log printed through the default UART. +`APP_TESTER` should not be defined. + +### Make ING916 into a Tester + +Build this example with `APP_TESTER` and download it to an ING916 Dev-Board. Then, this +Dev-Board can be used as a tester by Frequency Offset Tester program. + ## Other Resources * _BLE Extensions Reference_ \ No newline at end of file diff --git a/examples/ext_raw_packet/ext_raw_packet.ingw b/examples/ext_raw_packet/ext_raw_packet.ingw index 94f1298ab..da8eab29e 100644 --- a/examples/ext_raw_packet/ext_raw_packet.ingw +++ b/examples/ext_raw_packet/ext_raw_packet.ingw @@ -1,19 +1,25 @@ { "watchdog": true, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9ff0700000000", + "addr": 158908 + } + }, "rom": { - "size": 146500, + "size": 146876, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 163840 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -69,8 +75,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "printf_enable": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples/ext_raw_packet/ext_raw_packet.uvproj b/examples/ext_raw_packet/ext_raw_packet.uvproj index 38754d008..e98b8c603 100644 --- a/examples/ext_raw_packet/ext_raw_packet.uvproj +++ b/examples/ext_raw_packet/ext_raw_packet.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/ext_raw_packet/ext_raw_packet.uvprojx b/examples/ext_raw_packet/ext_raw_packet.uvprojx index bb3ede56d..5245419da 100644 --- a/examples/ext_raw_packet/ext_raw_packet.uvprojx +++ b/examples/ext_raw_packet/ext_raw_packet.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/ext_raw_packet/src/main.c b/examples/ext_raw_packet/src/main.c index f0b6d807c..5d83893a3 100644 --- a/examples/ext_raw_packet/src/main.c +++ b/examples/ext_raw_packet/src/main.c @@ -11,7 +11,7 @@ uint32_t cb_hard_fault(hard_fault_info_t *info, void *_) platform_printf("HARDFAULT:\nPC : 0x%08X\nLR : 0x%08X\nPSR: 0x%08X\n" "R0 : 0x%08X\nR1 : 0x%08X\nR2 : 0x%08X\nP3 : 0x%08X\n" "R12: 0x%08X\n", - info->pc, info->lr, info->psr, + info->pc, info->lr, info->psr, info->r0, info->r1, info->r2, info->r3, info->r12); for (;;); } @@ -57,32 +57,15 @@ void config_uart(uint32_t freq, uint32_t baud) config.ClockFrequency = freq; config.BaudRate = baud; - apUART_Initialize(PRINT_PORT, &config, 0); + apUART_Initialize(PRINT_PORT, &config, 1 << bsUART_RECEIVE_INTENAB); } void setup_peripherals(void) { - int i; config_uart(OSC_CLK_FREQ, 115200); - - PINCTRL_EnableAllAntSelPins(); -} - -uint32_t on_deep_sleep_wakeup(void *dummy, void *user_data) -{ - (void)(dummy); - (void)(user_data); - setup_peripherals(); - return 0; } -uint32_t query_deep_sleep_allowed(void *dummy, void *user_data) -{ - (void)(dummy); - (void)(user_data); - // TODO: return 0 if deep sleep is not allowed now; else deep sleep is allowed - return 0; -} +extern uint32_t uart_isr(void *user_data); int app_main() { @@ -95,14 +78,12 @@ int app_main() // setup handlers platform_set_evt_callback(PLATFORM_CB_EVT_HARD_FAULT, (f_platform_evt_cb)cb_hard_fault, NULL); platform_set_evt_callback(PLATFORM_CB_EVT_ASSERTION, (f_platform_evt_cb)cb_assertion, NULL); - platform_set_evt_callback(PLATFORM_CB_EVT_ON_DEEP_SLEEP_WAKEUP, on_deep_sleep_wakeup, NULL); - platform_set_evt_callback(PLATFORM_CB_EVT_QUERY_DEEP_SLEEP_ALLOWED, query_deep_sleep_allowed, NULL); platform_set_evt_callback(PLATFORM_CB_EVT_PUTC, (f_platform_evt_cb)cb_putc, NULL); + platform_set_irq_callback(PLATFORM_CB_IRQ_UART0, uart_isr, NULL); + setup_peripherals(); return 0; } - - diff --git a/examples/ext_raw_packet/src/profile.c b/examples/ext_raw_packet/src/profile.c index 326cb4c32..763223689 100644 --- a/examples/ext_raw_packet/src/profile.c +++ b/examples/ext_raw_packet/src/profile.c @@ -1,17 +1,4 @@ -#include -#include -#include "platform_api.h" -#include "att_db.h" -#include "gap.h" -#include "btstack_event.h" -#include "btstack_defines.h" -#include "str_util.h" - -#define MAX_SAMPLES_PER_SLOT 5 - -#define SAMPLES_PER_SLOT 1 -#define SAMPLING_OFFSET 12 -#define CH_ID 10 +#include "ingsoc.h" #if (INGCHIPS_FAMILY == INGCHIPS_FAMILY_918) #define RX_DELAY 300 @@ -19,285 +6,47 @@ #define RX_DELAY 600 #endif -static uint16_t att_read_callback(hci_con_handle_t connection_handle, uint16_t att_handle, uint16_t offset, - uint8_t * buffer, uint16_t buffer_size) -{ - switch (att_handle) - { - - default: - return 0; - } -} - -static int att_write_callback(hci_con_handle_t connection_handle, uint16_t att_handle, uint16_t transaction_mode, - uint16_t offset, const uint8_t *buffer, uint16_t buffer_size) -{ - switch (att_handle) - { - - default: - return 0; - } -} - -#define USER_TRIGGER_RAW_PKT 1 - -struct ll_raw_packet *raw_packet; -char data[300]; - -#ifdef CTE_ON - -typedef struct -{ - int len; - const uint8_t ant_ids[8]; -} pattern_info_t; - -pattern_info_t patterns[] = { - {2, {0, 0}}, - {2, {0, 0}}, -}; - -static int pattern_index = 0; - -static int16_t samples[(8 + 74) * 2 * 24] = {0}; - -#ifdef USE_BASE64 - -#pragma pack (push, 1) - -typedef struct complex -{ - int16_t i; - int16_t q; -} complex_t; - -struct le_proprietary_iq_report_header -{ - uint16_t id; - phy_type_t rx_phy; - uint8_t phy_chan_id; - int16_t rssi; - uint8_t rssi_ant_id; - uint8_t cte_type; - uint8_t slot_durations; - uint8_t packet_status; - uint16_t event_counter; - uint16_t sample_count; - uint8_t sampling_offset; - uint8_t sample_count_per_slot; -}; - -typedef struct le_proprietary_iq_report -{ - struct le_proprietary_iq_report_header header; - complex_t samples[0]; -} le_proprietary_iq_report_t; - -typedef struct le_proprietary_iq_report_full -{ - struct le_proprietary_iq_report_header header; - complex_t samples[(8 + 74) * MAX_SAMPLES_PER_SLOT]; -} le_proprietary_iq_report_full_t; - -#pragma pack (pop) - -le_proprietary_iq_report_full_t full_report = -{ - .header = { - .sample_count_per_slot = SAMPLES_PER_SLOT, - .sampling_offset = SAMPLING_OFFSET, - .cte_type = 0, - .slot_durations = 1, - .phy_chan_id = CH_ID - }, -}; - -void show_iq(struct ll_raw_packet *packet) -{ - int count = 0; - if ((0 != ll_raw_packet_get_iq_samples(packet, samples, &count, 0)) || (count < 1)) - { - platform_printf("No IQ samples\n"); - return; - } - - static char iq_str_buffer[3500]; - int len; - sprintf(iq_str_buffer, "PRO%d:", pattern_index); - len = strlen(iq_str_buffer); - base64_encode((const uint8_t *)&full_report, - sizeof(full_report.header) + sizeof(full_report.samples[0]) * full_report.header.sample_count, - iq_str_buffer + len, - sizeof(iq_str_buffer) - len - 1); - - platform_printf("\n%s\n", iq_str_buffer); -} - -#else -void show_iq(struct ll_raw_packet *packet) -{ - int count = 0; - int i; - if ((0 != ll_raw_packet_get_iq_samples(packet, samples, &count, 0)) || (count < 1)) - { - platform_printf("No IQ samples\n"); - return; - } +#ifdef APP_TESTER - platform_printf("Pattern Index: %d\n", pattern_index); - platform_printf("IQ samples:"); - for (i = 0; i < count; i++) - { - if (0 == (i & 0x3)) platform_printf("\n"); - platform_printf("%5d %+5d I, ", samples[i * 2 + 0], samples[i * 2 + 1]); - } -} +#if (INGCHIPS_FAMILY == INGCHIPS_FAMILY_918) +#error APP_TESTER is not supported on ING918 #endif -#endif +#include "profile_iqcmd.c" -void show_rx(struct ll_raw_packet *packet) -{ - uint64_t air_time; - uint8_t header; - int len; - int rssi; +#include "uart_console.c" - if (ll_raw_packet_get_rx_data(packet, &air_time, &header, data, &len, &rssi) == 0) - { - platform_printf("T: %llu\n", air_time); - platform_printf("H: 0x%02x\n", header); - platform_printf("RSSI: %ddBm\n", rssi); - data[len] = '\0'; - platform_printf("Rx: "); - platform_printf(data); - platform_printf("\n"); - -#ifdef CTE_ON - show_iq(packet); -#endif - } - else - platform_printf("Rx error\n"); -} - -void packet_action(void) -{ -#if (FOR_TX) - static int counter = 0; - platform_printf("Tx done\n"); - sprintf(data, "RAW PACKET #%d", counter++); -#ifdef CTE_ON - ll_raw_packet_set_tx_cte(raw_packet, 0, 20, 0, NULL); -#endif - ll_raw_packet_set_tx_data(raw_packet, counter & 0x7f, data, strlen(data)); - ll_raw_packet_send(raw_packet, platform_get_us_time() + 500000); #else - show_rx(raw_packet); -#ifdef CTE_ON - { - pattern_index = pattern_index >= sizeof(patterns) / sizeof(patterns[0]) - 1 ? 0 : pattern_index + 1; - ll_raw_packet_set_rx_cte(raw_packet, - 0, // uint8_t cte_type, - 1, // uint8_t slot_len, - patterns[pattern_index].len, - patterns[pattern_index].ant_ids, - SAMPLING_OFFSET, - SAMPLES_PER_SLOT); - } -#endif - ll_raw_packet_recv(raw_packet, platform_get_us_time() + RX_DELAY, 1000 * 1000); -#endif -} +#include "profile_demo.c" -void on_raw_packet_done(struct ll_raw_packet *packet, void *user_data) +static void console_rx_data(const char *d, uint8_t len) { - btstack_push_user_msg(USER_TRIGGER_RAW_PKT, NULL, 0); } -static void user_msg_handler(uint32_t msg_id, void *data, uint16_t size) -{ - switch (msg_id) - { - case USER_TRIGGER_RAW_PKT: - packet_action(); - break; - default: - ; - } -} +#endif -static void user_packet_handler(uint8_t packet_type, uint16_t channel, const uint8_t *packet, uint16_t size) +uint32_t uart_isr(void *user_data) { - uint8_t event = hci_event_packet_get_type(packet); - const btstack_user_msg_t *p_user_msg; - if (packet_type != HCI_EVENT_PACKET) return; + uint32_t status; - switch (event) + while(1) { - case BTSTACK_EVENT_STATE: - if (btstack_event_state_get_state(packet) != HCI_STATE_WORKING) + status = apUART_Get_all_raw_int_stat(APB_UART0); + if (status == 0) break; - raw_packet = ll_raw_packet_alloc(FOR_TX, on_raw_packet_done, NULL); - ll_raw_packet_set_param(raw_packet, - 3, // tx_power - CH_ID, // phy_channel_id - 1, // phy - 0x8E89BED6,//0xabcdef, - 0x555555); - btstack_push_user_msg(USER_TRIGGER_RAW_PKT, NULL, 0); - break; - case HCI_EVENT_COMMAND_COMPLETE: - switch (hci_event_command_complete_get_command_opcode(packet)) - { - // add your code to check command complete response - // case : - // break; - default: - break; - } - break; + APB_UART0->IntClear = status; - case HCI_EVENT_LE_META: - switch (hci_event_le_meta_get_subevent_code(packet)) + // rx int + if (status & (1 << bsUART_RECEIVE_INTENAB)) { - default: - break; + while (apUART_Check_RXFIFO_EMPTY(APB_UART0) != 1) + { + char c = APB_UART0->DataRead; + console_rx_data(&c, 1); + } } - - break; - - case HCI_EVENT_DISCONNECTION_COMPLETE: - break; - - case ATT_EVENT_CAN_SEND_NOW: - // add your code - break; - - case BTSTACK_EVENT_USER_MSG: - p_user_msg = hci_event_packet_get_user_msg(packet); - user_msg_handler(p_user_msg->msg_id, p_user_msg->data, p_user_msg->len); - break; - - default: - break; } -} - -static btstack_packet_callback_registration_t hci_event_callback_registration; - -uint32_t setup_profile(void *data, void *user_data) -{ - platform_printf("setup profile\n"); - // Note: security has not been enabled. - att_server_init(att_read_callback, att_write_callback); - hci_event_callback_registration.callback = &user_packet_handler; - hci_add_event_handler(&hci_event_callback_registration); - att_server_register_packet_handler(&user_packet_handler); return 0; } - diff --git a/examples/ext_raw_packet/src/profile_demo.c b/examples/ext_raw_packet/src/profile_demo.c new file mode 100644 index 000000000..c9dc38bed --- /dev/null +++ b/examples/ext_raw_packet/src/profile_demo.c @@ -0,0 +1,297 @@ +#include +#include +#include "platform_api.h" +#include "att_db.h" +#include "gap.h" +#include "btstack_event.h" +#include "btstack_defines.h" +#include "str_util.h" + +#define MAX_SAMPLES_PER_SLOT 5 + +#define SAMPLES_PER_SLOT 1 +#define SAMPLING_OFFSET 12 +#define CH_ID 10 + +static uint16_t att_read_callback(hci_con_handle_t connection_handle, uint16_t att_handle, uint16_t offset, + uint8_t * buffer, uint16_t buffer_size) +{ + switch (att_handle) + { + + default: + return 0; + } +} + +static int att_write_callback(hci_con_handle_t connection_handle, uint16_t att_handle, uint16_t transaction_mode, + uint16_t offset, const uint8_t *buffer, uint16_t buffer_size) +{ + switch (att_handle) + { + + default: + return 0; + } +} + +#define USER_TRIGGER_RAW_PKT 1 + +struct ll_raw_packet *raw_packet; +char data[300]; + +#ifdef CTE_ON + +typedef struct +{ + int len; + const uint8_t ant_ids[8]; +} pattern_info_t; + +pattern_info_t patterns[] = { + {2, {0, 0}}, + {2, {0, 0}}, +}; + +static int pattern_index = 0; + +static int16_t samples[(8 + 74) * 2 * 24] = {0}; + +#ifdef USE_BASE64 + +#pragma pack (push, 1) + +typedef struct complex +{ + int16_t i; + int16_t q; +} complex_t; + +struct le_proprietary_iq_report_header +{ + uint16_t id; + phy_type_t rx_phy; + uint8_t phy_chan_id; + int16_t rssi; + uint8_t rssi_ant_id; + uint8_t cte_type; + uint8_t slot_durations; + uint8_t packet_status; + uint16_t event_counter; + uint16_t sample_count; + uint8_t sampling_offset; + uint8_t sample_count_per_slot; +}; + +typedef struct le_proprietary_iq_report +{ + struct le_proprietary_iq_report_header header; + complex_t samples[0]; +} le_proprietary_iq_report_t; + +typedef struct le_proprietary_iq_report_full +{ + struct le_proprietary_iq_report_header header; + complex_t samples[(8 + 74) * MAX_SAMPLES_PER_SLOT]; +} le_proprietary_iq_report_full_t; + +#pragma pack (pop) + +le_proprietary_iq_report_full_t full_report = +{ + .header = { + .sample_count_per_slot = SAMPLES_PER_SLOT, + .sampling_offset = SAMPLING_OFFSET, + .cte_type = 0, + .slot_durations = 1, + .phy_chan_id = CH_ID + }, +}; + +void show_iq(struct ll_raw_packet *packet) +{ + int count = 0; + if ((0 != ll_raw_packet_get_iq_samples(packet, samples, &count, 0)) || (count < 1)) + { + platform_printf("No IQ samples\n"); + return; + } + + static char iq_str_buffer[3500]; + int len; + sprintf(iq_str_buffer, "PRO%d:", pattern_index); + len = strlen(iq_str_buffer); + base64_encode((const uint8_t *)&full_report, + sizeof(full_report.header) + sizeof(full_report.samples[0]) * full_report.header.sample_count, + iq_str_buffer + len, + sizeof(iq_str_buffer) - len - 1); + + platform_printf("\n%s\n", iq_str_buffer); +} + +#else +void show_iq(struct ll_raw_packet *packet) +{ + int count = 0; + int i; + if ((0 != ll_raw_packet_get_iq_samples(packet, samples, &count, 0)) || (count < 1)) + { + platform_printf("No IQ samples\n"); + return; + } + + platform_printf("Pattern Index: %d\n", pattern_index); + platform_printf("IQ samples:"); + for (i = 0; i < count; i++) + { + if (0 == (i & 0x3)) platform_printf("\n"); + platform_printf("%5d %+5d I, ", samples[i * 2 + 0], samples[i * 2 + 1]); + } +} +#endif + +#endif + +void show_rx(struct ll_raw_packet *packet) +{ + uint64_t air_time; + uint8_t header; + int len; + int rssi; + + if (ll_raw_packet_get_rx_data(packet, &air_time, &header, data, &len, &rssi) == 0) + { + platform_printf("T: %llu\n", air_time); + platform_printf("H: 0x%02x\n", header); + platform_printf("RSSI: %ddBm\n", rssi); + data[len] = '\0'; + platform_printf("Rx: "); + platform_printf(data); + platform_printf("\n"); + +#ifdef CTE_ON + show_iq(packet); +#endif + } + else + platform_printf("Rx error\n"); +} + +void packet_action(void) +{ +#if (FOR_TX) + static int counter = 0; + platform_printf("Tx done\n"); + sprintf(data, "RAW PACKET #%d", counter++); +#ifdef CTE_ON + ll_raw_packet_set_tx_cte(raw_packet, 0, 20, 0, NULL); +#endif + ll_raw_packet_set_tx_data(raw_packet, counter & 0x7f, data, strlen(data)); + ll_raw_packet_send(raw_packet, platform_get_us_time() + 500000); +#else + show_rx(raw_packet); + +#ifdef CTE_ON + { + pattern_index = pattern_index >= sizeof(patterns) / sizeof(patterns[0]) - 1 ? 0 : pattern_index + 1; + ll_raw_packet_set_rx_cte(raw_packet, + 0, // uint8_t cte_type, + 1, // uint8_t slot_len, + patterns[pattern_index].len, + patterns[pattern_index].ant_ids, + SAMPLING_OFFSET, + SAMPLES_PER_SLOT); + } +#endif + ll_raw_packet_recv(raw_packet, platform_get_us_time() + RX_DELAY, 1000 * 1000); +#endif +} + +void on_raw_packet_done(struct ll_raw_packet *packet, void *user_data) +{ + btstack_push_user_msg(USER_TRIGGER_RAW_PKT, NULL, 0); +} + +static void user_msg_handler(uint32_t msg_id, void *data, uint16_t size) +{ + switch (msg_id) + { + case USER_TRIGGER_RAW_PKT: + packet_action(); + break; + default: + ; + } +} + +static void user_packet_handler(uint8_t packet_type, uint16_t channel, const uint8_t *packet, uint16_t size) +{ + uint8_t event = hci_event_packet_get_type(packet); + const btstack_user_msg_t *p_user_msg; + if (packet_type != HCI_EVENT_PACKET) return; + + switch (event) + { + case BTSTACK_EVENT_STATE: + if (btstack_event_state_get_state(packet) != HCI_STATE_WORKING) + break; + raw_packet = ll_raw_packet_alloc(FOR_TX, on_raw_packet_done, NULL); + ll_raw_packet_set_param(raw_packet, + 3, // tx_power + CH_ID, // phy_channel_id + 1, // phy + 0x8E89BED6,//0xabcdef, + 0x555555); + btstack_push_user_msg(USER_TRIGGER_RAW_PKT, NULL, 0); + break; + + case HCI_EVENT_COMMAND_COMPLETE: + switch (hci_event_command_complete_get_command_opcode(packet)) + { + // add your code to check command complete response + // case : + // break; + default: + break; + } + break; + + case HCI_EVENT_LE_META: + switch (hci_event_le_meta_get_subevent_code(packet)) + { + default: + break; + } + + break; + + case HCI_EVENT_DISCONNECTION_COMPLETE: + break; + + case ATT_EVENT_CAN_SEND_NOW: + // add your code + break; + + case BTSTACK_EVENT_USER_MSG: + p_user_msg = hci_event_packet_get_user_msg(packet); + user_msg_handler(p_user_msg->msg_id, p_user_msg->data, p_user_msg->len); + break; + + default: + break; + } +} + +static btstack_packet_callback_registration_t hci_event_callback_registration; + +uint32_t setup_profile(void *data, void *user_data) +{ + platform_printf("setup profile\n"); + // Note: security has not been enabled. + att_server_init(att_read_callback, att_write_callback); + hci_event_callback_registration.callback = &user_packet_handler; + hci_add_event_handler(&hci_event_callback_registration); + att_server_register_packet_handler(&user_packet_handler); + return 0; +} + diff --git a/examples/ext_raw_packet/src/profile_iqcmd.c b/examples/ext_raw_packet/src/profile_iqcmd.c new file mode 100644 index 000000000..6fb8c3ef2 --- /dev/null +++ b/examples/ext_raw_packet/src/profile_iqcmd.c @@ -0,0 +1,213 @@ +#include "platform_api.h" +#include "att_db.h" +#include "gap.h" +#include "btstack_event.h" +#include "btstack_util.h" +#include "btstack_defines.h" +#include "gatt_client.h" +#include "sig_uuid.h" +#include +#include + +#include "str_util.h" + +// GATT characteristic handles +#define HANDLE_DEVICE_NAME 3 + +static uint8_t adv_data[31] = { + #include "../data/advertising.adv" +}; + +#define INVALID_HANDLE 0xffff +uint16_t conn_handle = INVALID_HANDLE; + +struct ll_raw_packet *raw_packet; + +static uint16_t att_read_callback(hci_con_handle_t connection_handle, uint16_t att_handle, uint16_t offset, + uint8_t * buffer, uint16_t buffer_size) +{ + switch (att_handle) + { + + default: + return 0; + } +} + +static btstack_packet_callback_registration_t hci_event_callback_registration; + +static int att_write_callback(hci_con_handle_t connection_handle, uint16_t att_handle, uint16_t transaction_mode, + uint16_t offset, const uint8_t *buffer, uint16_t buffer_size) +{ + switch (att_handle) + { + + default: + return 0; + } +} + + +extern int8_t adv_tx_power; + +void do_set_data() +{ + gap_set_ext_adv_data(0, adv_data[0] + 1, (uint8_t *)(adv_data)); +} + +char data[300]; +static int16_t samples[(8 + 74) * 2]; +static char iq_str_buffer[500]; +uint64_t start_time = 0; + +#define SCAN_WINDOW (1000 * 1000) + +void show_rx(struct ll_raw_packet *packet) +{ + uint64_t air_time; + uint8_t header; + int len; + int rssi; + int count = 0; + + if (ll_raw_packet_get_rx_data(packet, &air_time, &header, data, &len, &rssi) != 0) + { + air_time = platform_get_us_time(); + if (air_time + 30000 < start_time + SCAN_WINDOW) + { + ll_raw_packet_recv(raw_packet, air_time + RX_DELAY, start_time + SCAN_WINDOW - air_time); + return; + } + + platform_printf("+ERR: Rx fail\n"); + return; + } + + if ((0 != ll_raw_packet_get_iq_samples(packet, samples, &count, 0)) || (count < 1)) + { + platform_printf("+ERR: No IQ\n"); + return; + } + + sprintf(iq_str_buffer, "+IQ:%d,%d,",rssi,count); + len = strlen(iq_str_buffer); + base64_encode((const uint8_t *)samples, + 2 * count * sizeof(samples[0]), + iq_str_buffer + len, sizeof(iq_str_buffer) - len - 1); + + platform_printf("%s\n", iq_str_buffer); +} + +#define USER_MSG_SCAN_CTRL_START 4 +#define USER_MSG_SCAN_CTRL_STOP 5 +#define USER_MSG_RAW_PACKET_DONE 6 + +static void user_msg_handler(uint32_t msg_id, void *data, uint16_t size) +{ + switch (msg_id) + { + case USER_MSG_SCAN_CTRL_START: + ll_raw_packet_set_param(raw_packet, + 0, // tx_power + size, // phy_channel_id + 1, // phy + (uint32_t)data, + 0x555555); + { + static const uint8_t pattern[] = {0, 0}; + ll_raw_packet_set_rx_cte(raw_packet, + 0, // uint8_t cte_type, + 1, // uint8_t slot_len, + sizeof(pattern), // uint8_t switching_pattern_len, + pattern, 12, 1); + } + start_time = platform_get_us_time(); + ll_raw_packet_recv(raw_packet, start_time + RX_DELAY, SCAN_WINDOW); + break; + case USER_MSG_RAW_PACKET_DONE: + show_rx(raw_packet); + break; + default: + ; + } +} + +void on_raw_packet_done(struct ll_raw_packet *packet, void *user_data) +{ + btstack_push_user_msg(USER_MSG_RAW_PACKET_DONE, NULL, 0); +} + +void scan_ctrl(int flag, int phy_chan, uint32_t acc_addr) +{ + if (flag) + btstack_push_user_msg(USER_MSG_SCAN_CTRL_START, (void *)acc_addr, phy_chan); + else + btstack_push_user_msg(USER_MSG_SCAN_CTRL_STOP, NULL, 0); +} + +static void user_packet_handler(uint8_t packet_type, uint16_t channel, const uint8_t *packet, uint16_t size) +{ + uint8_t event = hci_event_packet_get_type(packet); + const btstack_user_msg_t *p_user_msg; + if (packet_type != HCI_EVENT_PACKET) return; + + switch (event) + { + case BTSTACK_EVENT_STATE: + if (btstack_event_state_get_state(packet) != HCI_STATE_WORKING) + break; + raw_packet = ll_raw_packet_alloc(0, on_raw_packet_done, NULL); + break; + + case HCI_EVENT_LE_META: + switch (hci_event_le_meta_get_subevent_code(packet)) + { + default: + break; + } + + break; + + case HCI_EVENT_DISCONNECTION_COMPLETE: + conn_handle = INVALID_HANDLE; + break; + + case HCI_EVENT_COMMAND_COMPLETE: + { + const uint8_t *returns = hci_event_command_complete_get_return_parameters(packet); + if (*returns != 0) + platform_printf("COMMAND_COMPLETE: 0x%02x for OPCODE %04X\n", + *returns, hci_event_command_complete_get_command_opcode(packet)); + } + break; + case HCI_EVENT_COMMAND_STATUS: + { + const uint8_t status = hci_event_command_status_get_status(packet); + if (status != 0) + platform_printf("COMMAND_STATUS: 0x%02x for OPCODE %04X\n", + status, hci_event_command_status_get_command_opcode(packet)); + } + break; + case ATT_EVENT_CAN_SEND_NOW: + // add your code + break; + + case BTSTACK_EVENT_USER_MSG: + p_user_msg = hci_event_packet_get_user_msg(packet); + user_msg_handler(p_user_msg->msg_id, p_user_msg->data, p_user_msg->len); + break; + + default: + break; + } +} + +uint32_t setup_profile(void *data, void *user_data) +{ + att_server_init(att_read_callback, att_write_callback); + hci_event_callback_registration.callback = &user_packet_handler; + hci_add_event_handler(&hci_event_callback_registration); + att_server_register_packet_handler(&user_packet_handler); + return 0; +} + diff --git a/examples/ext_raw_packet/src/startup_ing91800.s b/examples/ext_raw_packet/src/startup_ing91800.s index 0f7d42fd1..7fe2b54c8 100644 --- a/examples/ext_raw_packet/src/startup_ing91800.s +++ b/examples/ext_raw_packet/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/ext_raw_packet/src/uart_console.c b/examples/ext_raw_packet/src/uart_console.c new file mode 100644 index 000000000..48ec7bc93 --- /dev/null +++ b/examples/ext_raw_packet/src/uart_console.c @@ -0,0 +1,131 @@ +#include "ingsoc.h" + +#include +#include + +#include "platform_api.h" +#include "bluetooth.h" + +typedef void (*f_cmd_handler)(const char *param); + +typedef struct +{ + const char *cmd; + f_cmd_handler handler; +} cmd_t; + +const static char error[] = "error"; +static char buffer[100] = {0}; + +static void tx_data(const char *d, const uint16_t len); + +extern void scan_ctrl(int flag, int phy_chan, uint32_t acc_addr); + +void cmd_scan(const char *param) +{ + int i; + uint32_t acc_addr; + if (sscanf(param, "%d,0x%8x", &i, &acc_addr) != 2) + { + tx_data(error, strlen(error) + 1); + return; + } + scan_ctrl(1, i, acc_addr); +} + +static cmd_t cmds[] = +{ + { + .cmd = "scan", + .handler = cmd_scan + }, +}; + +void handle_command(char *cmd_line) +{ + static const char unknow_cmd[] = "unknown command\n"; + char *param = cmd_line; + int i; + while ((*param != ' ') && (*param != '\0')) param++; + *param = '\0'; param++; + + for (i = 0; i < sizeof(cmds) / sizeof(cmds[0]); i++) + { + if (strcasecmp(cmds[i].cmd, cmd_line) == 0) + break; + } + if (i >= sizeof(cmds) / sizeof(cmds[0])) + goto show_help; + + cmds[i].handler(param); + return; + +show_help: + tx_data(unknow_cmd, strlen(unknow_cmd)); +} + +typedef struct +{ + uint16_t size; + char buf[712]; +} str_buf_t; + +str_buf_t input = {0}; +str_buf_t output = {0}; + +static void append_data(str_buf_t *buf, const char *d, const uint16_t len) +{ + if (buf->size + len > sizeof(buf->buf)) + buf->size = 0; + + if (buf->size + len <= sizeof(buf->buf)) + { + memcpy(buf->buf + buf->size, d, len); + buf->size += len; + } +} + +void console_rx_data(const char *d, uint8_t len) +{ + if (0 == input.size) + { + while ((len > 0) && ((*d == '\r') || (*d == '\n'))) + { + d++; + len--; + } + } + if (len == 0) return; + + append_data(&input, d, len); + + if ((input.size > 0) && + ((input.buf[input.size - 1] == '\r') || (input.buf[input.size - 1] == '\n'))) + { + int16_t t = input.size - 2; + while ((t > 0) && ((input.buf[t] == '\r') || (input.buf[t] == '\n'))) t--; + input.buf[t + 1] = '\0'; + handle_command(input.buf); + input.size = 0; + } +} + +extern void stack_notify_tx_data(void); + +static void tx_data(const char *d, const uint16_t len) +{ + append_data(&output, d, len); + + if ((output.size > 0) && (output.buf[output.size - 1] == '\0')) + { + platform_printf("%s", (const char *)output.buf); + output.size = 0; + } +} + +uint8_t *console_get_clear_tx_data(uint16_t *len) +{ + *len = output.size; + output.size = 0; + return (uint8_t *)output.buf; +} diff --git a/examples/ext_raw_packet_noos/ext_raw_packet_noos.ingw b/examples/ext_raw_packet_noos/ext_raw_packet_noos.ingw index 169812931..98992861c 100644 --- a/examples/ext_raw_packet_noos/ext_raw_packet_noos.ingw +++ b/examples/ext_raw_packet_noos/ext_raw_packet_noos.ingw @@ -1,19 +1,25 @@ { "watchdog": false, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9ff0700000000", + "addr": 148136 + } + }, "rom": { - "size": 135720, + "size": 136100, "base": 16384 }, "ram": { - "size": 3372, + "size": 3308, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -70,8 +76,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 62160, - "app_ram_addr": 536874288, + "app_ram_size": 62224, + "app_ram_addr": 536874224, "k5_cc_ver": "6", "printf_enable": true, "ota_ver_patch": "0", diff --git a/examples/ext_raw_packet_noos/ext_raw_packet_noos.uvproj b/examples/ext_raw_packet_noos/ext_raw_packet_noos.uvproj index 62d13d36f..12ed15bce 100644 --- a/examples/ext_raw_packet_noos/ext_raw_packet_noos.uvproj +++ b/examples/ext_raw_packet_noos/ext_raw_packet_noos.uvproj @@ -319,8 +319,8 @@ 0 - 536874288 - 62160 + 536874224 + 62224 0 diff --git a/examples/ext_raw_packet_noos/ext_raw_packet_noos.uvprojx b/examples/ext_raw_packet_noos/ext_raw_packet_noos.uvprojx index 8d6fc9ebe..dd431b395 100644 --- a/examples/ext_raw_packet_noos/ext_raw_packet_noos.uvprojx +++ b/examples/ext_raw_packet_noos/ext_raw_packet_noos.uvprojx @@ -297,8 +297,8 @@ 0 - 536874288 - 62160 + 536874224 + 62224 0 diff --git a/examples/ext_raw_packet_noos/src/startup_ing91800.s b/examples/ext_raw_packet_noos/src/startup_ing91800.s index 7342b90b5..42e86a1ae 100644 --- a/examples/ext_raw_packet_noos/src/startup_ing91800.s +++ b/examples/ext_raw_packet_noos/src/startup_ing91800.s @@ -71,6 +71,10 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 @@ -85,6 +89,10 @@ main PROC LDR R0, =app_main BLX R0 + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP diff --git a/examples/gatt_relay/gatt_relay.ingw b/examples/gatt_relay/gatt_relay.ingw index e351bc7ff..4788f1b0e 100644 --- a/examples/gatt_relay/gatt_relay.ingw +++ b/examples/gatt_relay/gatt_relay.ingw @@ -1,19 +1,25 @@ { "watchdog": true, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -69,8 +75,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "printf_enable": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples/gatt_relay/gatt_relay.uvproj b/examples/gatt_relay/gatt_relay.uvproj index 22474553e..c890b303e 100644 --- a/examples/gatt_relay/gatt_relay.uvproj +++ b/examples/gatt_relay/gatt_relay.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/gatt_relay/gatt_relay.uvprojx b/examples/gatt_relay/gatt_relay.uvprojx index b01d7f87e..1d45f43ec 100644 --- a/examples/gatt_relay/gatt_relay.uvprojx +++ b/examples/gatt_relay/gatt_relay.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/gatt_relay/src/startup_ing91800.s b/examples/gatt_relay/src/startup_ing91800.s index ba38021a4..164fd5c51 100644 --- a/examples/gatt_relay/src/startup_ing91800.s +++ b/examples/gatt_relay/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 2048 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/get_started/get_started.ingw b/examples/get_started/get_started.ingw index 54792867e..d868d18f6 100644 --- a/examples/get_started/get_started.ingw +++ b/examples/get_started/get_started.ingw @@ -1,19 +1,25 @@ { "watchdog": true, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -70,8 +76,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "k5_cc_ver": "6", "printf_enable": true, "ota_ver_patch": "0", diff --git a/examples/get_started/get_started.uvproj b/examples/get_started/get_started.uvproj index 37f944ed5..a1cf3cdab 100644 --- a/examples/get_started/get_started.uvproj +++ b/examples/get_started/get_started.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/get_started/get_started.uvprojx b/examples/get_started/get_started.uvprojx index 479da7084..3601400a4 100644 --- a/examples/get_started/get_started.uvprojx +++ b/examples/get_started/get_started.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/hid_keyboard/README.md b/examples/hid_keyboard/README.md index 4509b4038..326e04299 100644 --- a/examples/hid_keyboard/README.md +++ b/examples/hid_keyboard/README.md @@ -7,6 +7,7 @@ This example demonstrates how to: * Use GPIO interrupts; * Report keyboard events; * Usage of public address (debug only); +* LE Secure Connection pairing; * Customize kv backend. Note: diff --git a/examples/hid_keyboard/flash_download.ini b/examples/hid_keyboard/flash_download.ini index 15265eb1f..152d66ec3 100644 --- a/examples/hid_keyboard/flash_download.ini +++ b/examples/hid_keyboard/flash_download.ini @@ -16,22 +16,23 @@ script= [bin-0] Name=Burn Bin #1 Checked=1 -FileName=../../bundles/typical/ING9187xx/platform.bin +FileName=../../bundles/exp/ING9187xx/platform.bin Address=16384 [bin-1] Name=Burn Bin #2 Checked=1 -Address=155648 +Address=172032 FileName=hid_keyboard.bin [uart] -Port=COM3 +Port=COM6 Baud=921600 Parity= DataBits=8 StopBits=1 AsyncIO=0 +Timeout=10000 [main] timeout=10000 diff --git a/examples/hid_keyboard/hid_keyboard.ingw b/examples/hid_keyboard/hid_keyboard.ingw index e13312a75..e240eb9b8 100644 --- a/examples/hid_keyboard/hid_keyboard.ingw +++ b/examples/hid_keyboard/hid_keyboard.ingw @@ -1,19 +1,25 @@ { "watchdog": false, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "bff90104fe000000", + "addr": 164336 + } + }, "rom": { - "size": 135796, + "size": 152600, "base": 16384 }, "ram": { - "size": 29876, + "size": 30076, "base": 536870912 }, "app": { - "base": 155648 + "base": 172032 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -27,7 +33,7 @@ "enable_hci_log": false, "ota_ver_minor": "0", "ota_ver_major": "0", - "template": "C:\\projects\\ingWizard\\templates\\typical\\peripheral", + "template": "C:\\projects\\ingWizard\\templates\\exp\\peripheral", "series": "ING9187xx", "proj_name": "hid_keyboard", "sdk_release_path": "..\/..", @@ -42,9 +48,9 @@ "deep_sleep": true, "proj_dir": "C:\/projects\/ingchips\/SDK_Release\/examples\\hid_keyboard", "power_saving": false, - "bundle": "typical", - "app_rom_size": "385024", - "app_rom_addr": "155648", + "bundle": "exp", + "app_rom_size": "368640", + "app_rom_addr": "172032", "family": "ing918", "vcode": false, "io_cap": "IO_CAPABILITY_NO_INPUT_NO_OUTPUT", @@ -57,8 +63,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35456, + "app_ram_addr": 536900992, "uart_log": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples/hid_keyboard/hid_keyboard.uvopt b/examples/hid_keyboard/hid_keyboard.uvopt index fab0d414a..b23733592 100644 --- a/examples/hid_keyboard/hid_keyboard.uvopt +++ b/examples/hid_keyboard/hid_keyboard.uvopt @@ -189,10 +189,10 @@ 1 0 0 - 21 + 18 0 - 204 - 205 + 205 + 206 0 .\src\profile.c profile.c @@ -234,7 +234,7 @@ 0 0 0 - ..\..\bundles\typical\ING9187xx\symdefs.m + ..\..\bundles\exp\ING9187xx\symdefs.m symdefs.m 0 0 @@ -439,6 +439,38 @@ 0 0 + + 5 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\src\Tools\ecc_driver.c + ecc_driver.c + 0 + 0 + + + 5 + 17 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\src\Tools\ing918_uecc.lib + ing918_uecc.lib + 0 + 0 + diff --git a/examples/hid_keyboard/hid_keyboard.uvoptx b/examples/hid_keyboard/hid_keyboard.uvoptx index 7e919246b..8800bffbe 100644 --- a/examples/hid_keyboard/hid_keyboard.uvoptx +++ b/examples/hid_keyboard/hid_keyboard.uvoptx @@ -266,7 +266,7 @@ 0 0 0 - ..\..\bundles\typical\ING9187xx\symdefs.m + ..\..\bundles\exp\ING9187xx\symdefs.m symdefs.m 0 0 @@ -363,13 +363,25 @@ Tools - 0 + 1 0 0 0 5 11 + 4 + 0 + 0 + 0 + ..\..\src\Tools\ing918_uecc.lib + ing918_uecc.lib + 0 + 0 + + + 5 + 12 1 0 0 @@ -381,7 +393,7 @@ 5 - 12 + 13 1 0 0 @@ -393,7 +405,7 @@ 5 - 13 + 14 1 0 0 @@ -405,7 +417,7 @@ 5 - 14 + 15 1 0 0 @@ -417,7 +429,7 @@ 5 - 15 + 16 1 0 0 @@ -427,6 +439,18 @@ 0 0 + + 5 + 17 + 1 + 0 + 0 + 0 + ..\..\src\Tools\ecc_driver.c + ecc_driver.c + 0 + 0 + diff --git a/examples/hid_keyboard/hid_keyboard.uvproj b/examples/hid_keyboard/hid_keyboard.uvproj index bccf3418a..554adb182 100644 --- a/examples/hid_keyboard/hid_keyboard.uvproj +++ b/examples/hid_keyboard/hid_keyboard.uvproj @@ -294,8 +294,8 @@ 1 - 155648 - 385024 + 172032 + 368640 1 @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900992 + 35456 0 @@ -348,7 +348,7 @@ --gnu USE_STDPERIPH_DRIVER,BOARD_USE_KEYS - ../../bundles/typical/inc;../../bundles/typical/inc/os;../../src/BSP;../../src/FWlib;../../src/StartUP/ing918;../../src/Tools;../../src + ../../bundles/exp/inc;../../bundles/exp/inc/os;../../src/BSP;../../src/FWlib;../../src/StartUP/ing918;../../src/Tools;../../src @@ -412,7 +412,7 @@ symdefs.m 3 - ..\..\bundles\typical\ING9187xx\symdefs.m + ..\..\bundles\exp\ING9187xx\symdefs.m @@ -484,6 +484,16 @@ 1 ..\..\src\Tools\malloc_override.c + + ecc_driver.c + 1 + ..\..\src\Tools\ecc_driver.c + + + ing918_uecc.lib + 4 + ..\..\src\Tools\ing918_uecc.lib + diff --git a/examples/hid_keyboard/hid_keyboard.uvprojx b/examples/hid_keyboard/hid_keyboard.uvprojx index f917390d4..3f602631b 100644 --- a/examples/hid_keyboard/hid_keyboard.uvprojx +++ b/examples/hid_keyboard/hid_keyboard.uvprojx @@ -273,8 +273,8 @@ 1 - 155648 - 385024 + 172032 + 368640 1 @@ -298,8 +298,8 @@ 0 - 536900792 - 35656 + 536900992 + 35456 0 @@ -337,7 +337,7 @@ USE_STDPERIPH_DRIVER,PuTTY,BOARD_USE_KEYS - ../../bundles/typical/inc;../../bundles/typical/inc/os;../../src/BSP;../../src/FWlib;../../src/StartUP/ing918;../../src/Tools;../../src + ../../bundles/exp/inc;../../bundles/exp/inc/os;../../src/BSP;../../src/FWlib;../../src/StartUP/ing918;../../src/Tools;../../src @@ -404,7 +404,7 @@ symdefs.m 3 - ..\..\bundles\typical\ING9187xx\symdefs.m + ..\..\bundles\exp\ING9187xx\symdefs.m @@ -451,6 +451,11 @@ Tools + + ing918_uecc.lib + 4 + ..\..\src\Tools\ing918_uecc.lib + att_db_util.c 1 @@ -476,6 +481,11 @@ 1 ..\..\src\Tools\malloc_override.c + + ecc_driver.c + 1 + ..\..\src\Tools\ecc_driver.c + diff --git a/examples/hid_keyboard/src/profile.c b/examples/hid_keyboard/src/profile.c index 6f54adf2a..c39055a85 100644 --- a/examples/hid_keyboard/src/profile.c +++ b/examples/hid_keyboard/src/profile.c @@ -16,6 +16,7 @@ #include "gatt_client_util.h" #include "att_db_util.h" +#include "ecc_driver.h" #include "USBHID_Types.h" #include "USBKeyboard.h" @@ -480,6 +481,7 @@ static void user_packet_handler(uint8_t packet_type, uint16_t channel, const uin switch (hci_event_le_meta_get_subevent_code(packet)) { case HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE: + case HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE_V2: att_set_db(decode_hci_le_meta_event(packet, le_meta_event_enh_create_conn_complete_t)->handle, att_db_util_get_address()); handle_send = decode_hci_le_meta_event(packet, le_meta_event_enh_create_conn_complete_t)->handle; break; @@ -632,7 +634,8 @@ uint8_t *init_service() (uint8_t *)&report, sizeof(report)); att_db_util_add_descriptor_uuid16(GATT_CLIENT_CHARACTERISTICS_DESC_REPORT_REF, ATT_PROPERTY_READ , (uint8_t *)&kb_desc_input_report, sizeof(kb_desc_input_report)); - att_db_util_add_characteristic_uuid16(0x2A4D, ATT_PROPERTY_READ | ATT_PROPERTY_NOTIFY | ATT_PROPERTY_AUTHENTICATION_REQUIRED, + att_db_util_add_characteristic_uuid16(0x2A4D, + ATT_PROPERTY_WRITE_WITHOUT_RESPONSE | ATT_PROPERTY_WRITE | ATT_PROPERTY_READ | ATT_PROPERTY_DYNAMIC | ATT_PROPERTY_AUTHENTICATION_REQUIRED, (uint8_t *)&report, sizeof(report)); att_db_util_add_descriptor_uuid16(GATT_CLIENT_CHARACTERISTICS_DESC_REPORT_REF, ATT_PROPERTY_READ , (uint8_t *)&kb_desc_output_report, sizeof(kb_desc_output_report)); @@ -669,6 +672,11 @@ static void sm_packet_handler(uint8_t packet_type, uint16_t channel, const uint8 input_number.flag = 1; input_number.cnt = 0; break; + case SM_EVENT_NUMERIC_COMPARISON_REQUEST: + platform_printf("NUMERIC_COMPARISON: %06d\n", + sm_event_numeric_comparison_get_compare_value(packet)); + sm_numeric_comparison_confirm(sm_event_numeric_comparison_get_handle(packet)); + break; case SM_EVENT_STATE_CHANGED: { const sm_event_state_changed_t *state_changed = decode_hci_event(packet, sm_event_state_changed_t); @@ -709,14 +717,15 @@ uint32_t setup_profile(void *data, void *user_data) { platform_printf("setup profile\n"); init_service(); + install_ecc_driver(); sm_add_event_handler(&sm_event_callback_registration); att_server_init(att_read_callback, att_write_callback); hci_event_callback_registration.callback = &user_packet_handler; hci_add_event_handler(&hci_event_callback_registration); att_server_register_packet_handler(&user_packet_handler); - sm_config(1, IO_CAPABILITY_KEYBOARD_ONLY, + sm_config(1, IO_CAPABILITY_KEYBOARD_DISPLAY, 0, &sm_persistent); - sm_set_authentication_requirements(SM_AUTHREQ_BONDING); + sm_set_authentication_requirements(SM_AUTHREQ_BONDING | SM_AUTHREQ_SC); return 0; } diff --git a/examples/hid_keyboard/src/startup_ing91800.s b/examples/hid_keyboard/src/startup_ing91800.s index 641003be3..f6c8d8b6d 100644 --- a/examples/hid_keyboard/src/startup_ing91800.s +++ b/examples/hid_keyboard/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -42,7 +42,7 @@ __initial_sp __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -59,10 +59,14 @@ Reset_Handler PROC ; this push is consumed by main PUSH {LR} - + + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -73,11 +77,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {PC} ENDP - + ALIGN END diff --git a/examples/hid_mouse/README.md b/examples/hid_mouse/README.md index 2c2b96f3f..d09b9d514 100644 --- a/examples/hid_mouse/README.md +++ b/examples/hid_mouse/README.md @@ -8,10 +8,11 @@ This example demonstrates how to: * Report _fake_ mouse movements; * Use resolvable address; * Use high duty adv; +* Use LL Privacy (ING916xx); * Use QDEC (ING916xx). Note: - * Press `KEY_4` for sevaral seconds to clear bonding + * Press `KEY_4` for several seconds to clear bonding * Test Result: * OK: RedMi Note5 (MIUI 11.0.2) * OK: iPhone XR (iOS 14.5) diff --git a/examples/hid_mouse/flash_download.ini b/examples/hid_mouse/flash_download.ini index 5cb0bd55b..9774ca2b3 100644 --- a/examples/hid_mouse/flash_download.ini +++ b/examples/hid_mouse/flash_download.ini @@ -12,36 +12,39 @@ protection.enabled=0 protection.unlock=0 UseScript=0 script= +ResetReservedFlash=0 +writeprotection.enabled=0 [bin-0] Name=Burn Bin #1 Checked=1 -FileName=../../bundles/typical/ING9187xx/platform.bin -Address=16384 +FileName=../../bundles/exp/ING9168xx/platform.bin +Address=33562624 [bin-1] Name=Burn Bin #2 Checked=1 -Address=155648 +Address=33742848 FileName=hid_mouse.bin [uart] Port=COM3 -Baud=921600 +Baud=460800 Parity= DataBits=8 StopBits=1 AsyncIO=1 +Timeout=10000 [main] timeout=10000 MIN_ADDR=16384 MAX_ADDR=540671 -family=ing918 +family=ing916 [bin-2] Name=Burn Bin #3 -Checked=1 +Checked=0 FileName=0x00.bin Address=270336 diff --git a/examples/hid_mouse/hid_mouse.ingw b/examples/hid_mouse/hid_mouse.ingw index b92d5addc..3cb533624 100644 --- a/examples/hid_mouse/hid_mouse.ingw +++ b/examples/hid_mouse/hid_mouse.ingw @@ -1,19 +1,25 @@ { "watchdog": false, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "ff79ff07fe000000", + "addr": 33732656 + } + }, "rom": { - "size": 135796, - "base": 16384 + "size": 178628, + "base": 33562624 }, "ram": { - "size": 29876, + "size": 21636, "base": 536870912 }, "app": { - "base": 155648 + "base": 33742848 }, "version": [ - 1,9,41] + 2,3,16] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -27,8 +33,8 @@ "enable_hci_log": false, "ota_ver_minor": "0", "ota_ver_major": "0", - "template": "C:\\projects\\ingWizard\\templates\\typical\\peripheral", - "series": "ING9187xx", + "template": "C:\\projects\\ingWizard\\templates\\exp\\peripheral", + "series": "ING9168xx", "proj_name": "hid_mouse", "sdk_release_path": "..\/..", "security": true, @@ -42,10 +48,10 @@ "deep_sleep": true, "proj_dir": "C:\/projects\/ingchips\/SDK_Release\/examples\\hid_mouse", "power_saving": false, - "bundle": "typical", - "app_rom_size": "385024", - "app_rom_addr": "155648", - "family": "ing918", + "bundle": "exp", + "app_rom_size": "335872", + "app_rom_addr": "33742848", + "family": "ing916", "vcode": false, "io_cap": "IO_CAPABILITY_NO_INPUT_NO_OUTPUT", "role": "peripheral", @@ -57,8 +63,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 11128, + "app_ram_addr": 536892552, "uart_log": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples/hid_mouse/hid_mouse.uvopt b/examples/hid_mouse/hid_mouse.uvopt index 9b35b1d01..bcf2abb93 100644 --- a/examples/hid_mouse/hid_mouse.uvopt +++ b/examples/hid_mouse/hid_mouse.uvopt @@ -13,7 +13,6 @@ *.txt; *.h; *.inc; *.md *.plm *.cpp - 0 @@ -32,7 +31,6 @@ 1 1 0 - 0 1 @@ -78,6 +76,16 @@ 1 0 + + SARMCM3.DLL + + DCM.DLL + -pCM3 + SARMCM3.DLL + + TCM.DLL + -pCM3 + 0 1 @@ -96,14 +104,9 @@ 0 1 1 - 1 - 1 0 0 - 1 - 0 - 0 - 4 + 7 @@ -160,17 +163,6 @@ - 0 - 0 - 0 - - - - - - - - @@ -185,7 +177,11 @@ 1 1 0 + 0 + 54 0 + 213 + 234 0 .\src\main.c main.c @@ -197,7 +193,11 @@ 2 1 0 + 0 + 6 0 + 185 + 201 0 .\src\profile.c profile.c @@ -209,7 +209,11 @@ 3 1 0 + 0 + 57609308 0 + 0 + 0 0 ..\peripheral_console\src\key_detector.c key_detector.c @@ -229,10 +233,14 @@ 4 2 0 + 0 + 0 0 + 0 + 0 0 - .\src\startup_ing91800.s - startup_ing91800.s + .\src\startup_ing91600.s + startup_ing91600.s 0 0 @@ -241,9 +249,13 @@ 5 3 0 + 0 + 0 0 + 0 + 0 0 - ..\..\bundles\typical\ING9187xx\symdefs.m + ..\..\bundles\exp\ING9168xx\symdefs.m symdefs.m 0 0 @@ -261,7 +273,11 @@ 6 1 0 + 0 + 57609308 0 + 0 + 0 0 ../..\src\BSP\eflash.c eflash.c @@ -281,7 +297,11 @@ 7 1 0 + 0 + 57609308 0 + 0 + 0 0 ../..\src\FWlib\peripheral_uart.c peripheral_uart.c @@ -293,7 +313,11 @@ 8 1 0 + 0 + 0 0 + 352 + 360 0 ../..\src\FWlib\peripheral_sysctrl.c peripheral_sysctrl.c @@ -305,7 +329,11 @@ 9 1 0 + 0 + 57609308 0 + 0 + 0 0 ..\..\src\FWlib\peripheral_timer.c peripheral_timer.c @@ -317,7 +345,11 @@ 10 1 0 + 0 + 57609308 0 + 0 + 0 0 ..\..\src\FWlib\peripheral_gpio.c peripheral_gpio.c @@ -329,7 +361,11 @@ 11 1 0 + 0 + 57609308 0 + 0 + 0 0 ..\..\src\FWlib\peripheral_pinctrl.c peripheral_pinctrl.c @@ -341,7 +377,11 @@ 12 1 0 + 0 + 57609308 0 + 0 + 0 0 ..\..\src\FWlib\peripheral_pwm.c peripheral_pwm.c @@ -353,7 +393,11 @@ 13 1 0 + 0 + 57609308 0 + 0 + 0 0 ..\..\src\FWlib\peripheral_qdec.c peripheral_qdec.c @@ -373,7 +417,11 @@ 14 1 0 + 0 + 57609308 0 + 0 + 0 0 ../..\src\Tools\att_db_util.c att_db_util.c @@ -385,7 +433,11 @@ 15 1 0 + 0 + 57609308 0 + 0 + 0 0 ..\..\src\Tools\trace.c trace.c @@ -397,7 +449,11 @@ 16 1 0 + 0 + 57609308 0 + 0 + 0 0 ..\..\src\Tools\blink.c blink.c diff --git a/examples/hid_mouse/hid_mouse.uvoptx b/examples/hid_mouse/hid_mouse.uvoptx index ff84f738b..5b5a33ca8 100644 --- a/examples/hid_mouse/hid_mouse.uvoptx +++ b/examples/hid_mouse/hid_mouse.uvoptx @@ -89,7 +89,7 @@ 1 1 1 - 1 + 0 1 1 1 @@ -120,7 +120,7 @@ 0 DLGUARM - d + 0 @@ -140,7 +140,7 @@ 0 JL2CM3 - -U180100254 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC8000 -FN1 -FF0ING91800.flm -FS04000 -FL080000 -FP0($$Device:ING91800$Flash\ING91800.flm) + -U180100254 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC8000 -FN1 -FF0ING91600.flm -FS02000000 -FL0200000 -FP0($$Device:ING91600$Flash\ING91600.flm) 0 @@ -149,6 +149,14 @@ + + + 1 + 2 + 0x02002000 + 0 + + 0 @@ -240,7 +248,7 @@ StartUP - 0 + 1 0 0 0 @@ -251,8 +259,8 @@ 0 0 0 - .\src\startup_ing91800.s - startup_ing91800.s + .\src\startup_ing91600.s + startup_ing91600.s 0 0 @@ -263,7 +271,7 @@ 0 0 0 - ..\..\bundles\typical\ING9187xx\symdefs.m + ..\..\bundles\exp\ING9168xx\symdefs.m symdefs.m 0 0 @@ -384,7 +392,7 @@ Tools - 0 + 1 0 0 0 diff --git a/examples/hid_mouse/hid_mouse.uvproj b/examples/hid_mouse/hid_mouse.uvproj index 293d380d9..d4a32febf 100644 --- a/examples/hid_mouse/hid_mouse.uvproj +++ b/examples/hid_mouse/hid_mouse.uvproj @@ -7,13 +7,11 @@ Target 1 0x4 ARM-ADS - 5060960::V5.06 update 7 (build 960)::ARMCC - 0 - ing91800 + ing91600 INGCHIPS - CLOCK(32000000) CPUTYPE("Cortex-M3") ELITTLE IROM(0x4000-0x43fff) IRAM(0x20000000-0x2000ffff) + CLOCK(128000000) CPUTYPE("Cortex-M4") FPU2 ELITTLE IROM(0x2000000-0x21fffff) IRAM(0x20000000-0x20007fff) @@ -29,7 +27,6 @@ - 0 0 @@ -71,8 +68,6 @@ 0 0 - 0 - 0 1 @@ -81,8 +76,6 @@ 0 0 - 0 - 0 0 @@ -101,7 +94,6 @@ 3 - 1 SARMCM3.DLL @@ -131,7 +123,6 @@ 1 1 0 - 1 1 @@ -143,10 +134,9 @@ 0 1 1 - 1 0 - 4 + 7 @@ -176,10 +166,6 @@ BIN\UL2CM3.DLL "" () - - - - 0 @@ -210,7 +196,7 @@ 1 0 0 - "Cortex-M3" + "Cortex-M4" 0 0 @@ -219,17 +205,13 @@ 1 0 0 - 0 - 0 - 0 - 0 + 2 0 0 8 1 0 0 - 0 3 5 0 @@ -283,12 +265,12 @@ 0 0x20000000 - 0x10000 + 0x8000 1 - 0x4000 - 0x40000 + 0x2000000 + 0x200000 0 @@ -312,8 +294,8 @@ 1 - 155648 - 385024 + 33742848 + 335872 1 @@ -337,8 +319,8 @@ 0 - 536900792 - 35656 + 536892552 + 11128 0 @@ -362,21 +344,11 @@ 2 0 0 - 0 - 0 - 0 - 1 - 1 - 1 - 1 - 0 - 0 - 0 --gnu - USE_STDPERIPH_DRIVER,KEY_PIN=GIO_GPIO_4,VALUE_PRESSED=0,SIMULATION + USE_STDPERIPH_DRIVER,VALUE_PRESSED=0,SIMULATION - ../../bundles/typical/inc;../../bundles/typical/inc/os;../../src/BSP;../../src/FWlib;../../src/StartUP/ing918;../../src/Tools;../../src + ../../bundles/exp/inc;../../bundles/exp/inc/os;../../src/BSP;../../src/FWlib;../../src/StartUP/ing916;../../src/Tools;../../src @@ -388,8 +360,6 @@ 0 0 0 - 0 - 1 @@ -406,7 +376,6 @@ 0 0x00000000 0x00000000 - @@ -441,14 +410,14 @@ StartUP - startup_ing91800.s + startup_ing91600.s 2 - .\src\startup_ing91800.s + .\src\startup_ing91600.s symdefs.m 3 - ..\..\bundles\typical\ING9187xx\symdefs.m + ..\..\bundles\exp\ING9168xx\symdefs.m diff --git a/examples/hid_mouse/hid_mouse.uvprojx b/examples/hid_mouse/hid_mouse.uvprojx index 849a12688..ab100ff0e 100644 --- a/examples/hid_mouse/hid_mouse.uvprojx +++ b/examples/hid_mouse/hid_mouse.uvprojx @@ -7,15 +7,15 @@ Target 1 0x4 ARM-ADS - 6190000::V6.19::ARMCLANG + 6210000::V6.21::ARMCLANG 1 - ing91800 + ing91600 INGChips INGChips.INGCHIPS_DeviceFamilyPack.0.9.0 http://www.ingchips.com - CLOCK(32000000) CPUTYPE("Cortex-M3") ELITTLE IROM(0x4000-0x43fff) IRAM(0x20000000-0x2000ffff) + CLOCK(128000000) CPUTYPE("Cortex-M4") FPU2 ELITTLE IROM(0x2000000-0x21fffff) IRAM(0x20000000-0x20007fff) @@ -30,7 +30,7 @@ - $$Device:ing91800$SVD\ing91800.svd + $$Device:ing91600$SVD\ing91600.svd 0 0 @@ -171,7 +171,7 @@ 1 0 0 - "Cortex-M3" + "Cortex-M4" 0 0 @@ -180,7 +180,7 @@ 1 0 0 - 0 + 2 0 0 0 @@ -244,12 +244,12 @@ 0 0x20000000 - 0x10000 + 0x8000 1 - 0x4000 - 0x40000 + 0x2000000 + 0x200000 0 @@ -273,8 +273,8 @@ 1 - 155648 - 385024 + 33742848 + 335872 1 @@ -298,8 +298,8 @@ 0 - 536900792 - 35656 + 536892552 + 11128 0 @@ -335,9 +335,9 @@ 0 - USE_STDPERIPH_DRIVER,KEY_PIN=GIO_GPIO_4,VALUE_PRESSED=0,BOARD_USE_KEYS,SIMULATION + USE_STDPERIPH_DRIVER,VALUE_PRESSED=0,BOARD_USE_KEYS,SIMULATION - ../../bundles/typical/inc;../../bundles/typical/inc/os;../../src/BSP;../../src/FWlib;../../src/StartUP/ing918;../../src/Tools;../../src + ../../bundles/exp/inc;../../bundles/exp/inc/os;../../src/BSP;../../src/FWlib;../../src/StartUP/ing916;../../src/Tools;../../src @@ -402,14 +402,14 @@ StartUP - startup_ing91800.s + startup_ing91600.s 2 - .\src\startup_ing91800.s + .\src\startup_ing91600.s symdefs.m 3 - ..\..\bundles\typical\ING9187xx\symdefs.m + ..\..\bundles\exp\ING9168xx\symdefs.m diff --git a/examples/hid_mouse/init.ini b/examples/hid_mouse/init.ini index 72989a2f2..4a39000cb 100644 --- a/examples/hid_mouse/init.ini +++ b/examples/hid_mouse/init.ini @@ -1,3 +1,3 @@ -msp = *(unsigned int *)( 0x00004000 ) -pc = *(unsigned int *)( 0x00004000 + 4 ) +msp = *(unsigned int *)( 0x02002000 ) +pc = *(unsigned int *)( 0x02002000 + 4 ) diff --git a/examples/hid_mouse/src/main.c b/examples/hid_mouse/src/main.c index 4759cf4dd..165c95e6a 100644 --- a/examples/hid_mouse/src/main.c +++ b/examples/hid_mouse/src/main.c @@ -126,7 +126,7 @@ void setup_peripherals(void) TMR_Enable(APB_TMR1, 0, 0xf); TMR_IntEnable(APB_TMR1, 0, 0xf); - PINCTRL_Pull(IO_SOURCE_GPIO, PINCTRL_PULL_UP); + PINCTRL_Pull(KEY_PIN, PINCTRL_PULL_UP); PINCTRL_SetPadMux(LED_PIN, IO_SOURCE_PWM0_A); #else @@ -170,6 +170,7 @@ int read_from_flash(void *db, const int max_size) } #if (INGCHIPS_FAMILY == INGCHIPS_FAMILY_916) +#ifndef SIMULATION // make sure that PClk is <= slow_clk static void QDEC_PclkCfg(void) { @@ -187,8 +188,6 @@ static void QDEC_Setup(void) { uint8_t div = SYSCTRL_GetPClkDiv(); SYSCTRL_ClearClkGate(SYSCTRL_ITEM_APB_QDEC); - SYSCTRL_ReleaseBlock(SYSCTRL_ITEM_APB_PinCtrl | - SYSCTRL_ITEM_APB_QDEC); PINCTRL_SelQDECIn(21, 22); SYSCTRL_SelectQDECClk(SYSCTRL_CLK_SLOW, 25); @@ -205,6 +204,7 @@ static void QDEC_Setup(void) SYSCTRL_SetPClkDiv(div); } #endif +#endif extern void on_key_event(key_press_event_t evt); @@ -219,8 +219,6 @@ int app_main() platform_set_irq_callback(PLATFORM_CB_IRQ_TIMER1, timer_isr, NULL); setup_peripherals(); - // platform_config(PLATFORM_CFG_LOG_HCI, PLATFORM_CFG_ENABLE); - platform_set_evt_callback(PLATFORM_CB_EVT_PUTC, (f_platform_evt_cb)cb_putc, NULL); platform_set_evt_callback(PLATFORM_CB_EVT_HARD_FAULT, (f_platform_evt_cb)cb_hard_fault, NULL); diff --git a/examples/hid_mouse/src/profile.c b/examples/hid_mouse/src/profile.c index 5e5c4d441..2255e07cf 100644 --- a/examples/hid_mouse/src/profile.c +++ b/examples/hid_mouse/src/profile.c @@ -22,6 +22,14 @@ #include "../../peripheral_console/src/key_detector.h" +#if (INGCHIPS_FAMILY == INGCHIPS_FAMILY_916) + #ifndef USE_LL_PRIVACY + #define USE_LL_PRIVACY 1 + #endif +#else + #define USE_LL_PRIVACY 0 +#endif + enum { KV_KEY_IR = KV_USER_KEY_START, @@ -82,6 +90,8 @@ int waiting_for_paring = 0; bd_addr_type_t peer_addr_type; bd_addr_t peer_addr; +static const uint8_t *local_irk; + uint16_t att_handle_protocol_mode; uint16_t att_handle_hid_ctrl_point; uint16_t att_handle_report; @@ -176,6 +186,7 @@ const int8_t delta_xy[][2] = {7,8},{6,9},{4,9},{4,10},{3,10},{1,11},{1,10}}; #if (INGCHIPS_FAMILY == INGCHIPS_FAMILY_916) +#ifndef SIMULATION static uint16_t StepCal(uint16_t preData, uint16_t data, int8_t *dir) { uint16_t step = data - preData; @@ -188,6 +199,7 @@ static uint16_t StepCal(uint16_t preData, uint16_t data, int8_t *dir) return step; } #endif +#endif void mouse_report_movement(void) { @@ -268,6 +280,112 @@ static void user_msg_handler(uint32_t msg_id, void *data, uint16_t size) const static ext_adv_set_en_t adv_sets_en[] = {{.handle = 0, .duration = 2000, .max_events = 0}}; +#if (USE_LL_PRIVACY == 1) + +static void populate_pairing_data_to_resolving_list(const uint8_t *local_irk) +{ + uint8_t enable = 0; + gap_clear_resolving_list(); + gap_clear_white_lists(); + + le_device_memory_db_iter_t device_db_iter; + le_device_db_iter_init(&device_db_iter); + while (le_device_db_iter_next(&device_db_iter)) + { + const le_device_memory_db_t *dev = le_device_db_iter_cur(&device_db_iter); + + gap_add_dev_to_resolving_list(dev->addr, (bd_addr_type_t)dev->addr_type, dev->irk, local_irk); + gap_add_whitelist(dev->addr, (bd_addr_type_t)dev->addr_type); + + enable = 1; + } + + gap_set_addr_resolution_enable(enable); +} + +static void setup_pairing_adv(void) +{ + bd_addr_t dir_peer_addr = {0}; + bd_addr_type_t dir_peer_type = BD_ADDR_TYPE_LE_PUBLIC; + bd_addr_type_t own_addr_type = BD_ADDR_TYPE_LE_RANDOM; + adv_filter_policy_t filter_policy = ADV_FILTER_ALLOW_ALL; + + if (kv_get(KV_KEY_PEER_USE_RPA, NULL) != NULL) + { + le_device_memory_db_iter_t device_db_iter; + le_device_db_iter_init(&device_db_iter); + const le_device_memory_db_t *dev = le_device_db_iter_next(&device_db_iter); + + populate_pairing_data_to_resolving_list(local_irk); + dir_peer_type = (bd_addr_type_t)dev->addr_type; + memcpy(dir_peer_addr, dev->addr, sizeof(dir_peer_addr)); + own_addr_type = BD_ADDR_TYPE_LE_RESOLVED_RAN; + filter_policy = ADV_FILTER_ALLOW_SCAN_WLST_CON_WLST; + } + else + { + gap_clear_resolving_list(); + gap_clear_white_lists(); + gap_set_addr_resolution_enable(0); + } + + gap_set_ext_adv_para(0, + CONNECTABLE_ADV_BIT | SCANNABLE_ADV_BIT | LEGACY_PDU_BIT, + 0x00a1, 0x00a1, // Primary_Advertising_Interval_Min, Primary_Advertising_Interval_Max + PRIMARY_ADV_ALL_CHANNELS, // Primary_Advertising_Channel_Map + own_addr_type, // Own_Address_Type + dir_peer_type, // Peer_Address_Type + dir_peer_addr, // Peer_Address + filter_policy, // Advertising_Filter_Policy + 0x00, // Advertising_Tx_Power + PHY_1M, // Primary_Advertising_PHY + 0, // Secondary_Advertising_Max_Skip + PHY_1M, // Secondary_Advertising_PHY + 0x00, // Advertising_SID + 0x00); // Scan_Request_Notification_Enable + gap_set_ext_adv_data(0, sizeof(adv_data), (uint8_t*)adv_data); + gap_set_ext_scan_response_data(0, sizeof(scan_data), (uint8_t*)scan_data); +} + +static void setup_directed_adv(void) +{ + bd_addr_t dir_peer_addr; + bd_addr_type_t dir_peer_type; + bd_addr_type_t own_addr_type = BD_ADDR_TYPE_LE_RANDOM; + + platform_printf("setup_directed_adv\n"); + le_device_memory_db_iter_t device_db_iter; + le_device_db_iter_init(&device_db_iter); + const le_device_memory_db_t *dev = le_device_db_iter_next(&device_db_iter); + + dir_peer_type = (bd_addr_type_t)dev->addr_type; + memcpy(dir_peer_addr, dev->addr, sizeof(dir_peer_addr)); + + if (kv_get(KV_KEY_PEER_USE_RPA, NULL) != NULL) + { + populate_pairing_data_to_resolving_list(local_irk); + own_addr_type = BD_ADDR_TYPE_LE_RESOLVED_RAN; + } + + platform_printf("dir peer addr: "); printf_hexdump(dir_peer_addr, 6); platform_printf("\n"); + + gap_set_ext_adv_para(0, + CONNECTABLE_ADV_BIT | DIRECT_ADV_BIT | LEGACY_PDU_BIT | HIGH_DUTY_CIR_DIR_ADV_BIT, + 0x00a1, 0x00a1, // Primary_Advertising_Interval_Min, Primary_Advertising_Interval_Max + PRIMARY_ADV_ALL_CHANNELS, // Primary_Advertising_Channel_Map + own_addr_type, // Own_Address_Type + dir_peer_type, // Peer_Address_Type + dir_peer_addr, // Peer_Address + ADV_FILTER_ALLOW_SCAN_WLST_CON_WLST, // Advertising_Filter_Policy + 0x00, // Advertising_Tx_Power + PHY_1M, // Primary_Advertising_PHY + 0, // Secondary_Advertising_Max_Skip + PHY_1M, // Secondary_Advertising_PHY + 0x00, // Advertising_SID + 0x00); // Scan_Request_Notification_Enable +} +#else + static void setup_pairing_adv(void) { gap_set_ext_adv_para(0, @@ -348,6 +466,7 @@ static void setup_directed_adv(void) 0x00, // Advertising_SID 0x00); // Scan_Request_Notification_Enable } +#endif uint8_t *init_service(void); @@ -364,6 +483,7 @@ void clear_pairing_data(void) le_device_db_iter_init(&device_db_iter); while (le_device_db_iter_next(&device_db_iter)) le_device_db_remove_key(device_db_iter.key); + kv_remove(KV_KEY_PEER_USE_RPA); update_ir(); kv_commit(0); platform_write_persistent_reg(1); @@ -406,6 +526,7 @@ static void user_packet_handler(uint8_t packet_type, uint16_t channel, const uin switch (hci_event_le_meta_get_subevent_code(packet)) { case HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE: + case HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE_V2: { const le_meta_event_enh_create_conn_complete_t *complete = decode_hci_le_meta_event(packet, le_meta_event_enh_create_conn_complete_t); @@ -517,12 +638,16 @@ static void sm_packet_handler(uint8_t packet_type, uint16_t channel, const uint8 case SM_EVENT_IDENTITY_RESOLVING_SUCCEEDED: notify_enable = 1; att_handle_notify = att_handle_report; + platform_printf("RESOLVING_SUCCEEDED\n"); break; case SM_EVENT_IDENTITY_RESOLVING_FAILED: platform_printf("RESOLVING_FAILED\n"); if (0 == waiting_for_paring) gap_disconnect(sm_event_identity_resolving_failed_get_handle(packet)); break; + case SM_EVENT_IRK_DHK_RESULT: + local_irk = sm_event_irk_dhk_result_get_irk(packet); + break; case SM_EVENT_STATE_CHANGED: { const sm_event_state_changed_t *state_changed = decode_hci_event(packet, sm_event_state_changed_t); @@ -538,9 +663,13 @@ static void sm_packet_handler(uint8_t packet_type, uint16_t channel, const uint8 { uint8_t flag = 1; kv_put(KV_KEY_PEER_USE_RPA, &flag, sizeof(flag)); + platform_printf("Peer is using RPA.\n"); } else + { + platform_printf("Peer is NOT using RPA.\n"); kv_remove(KV_KEY_PEER_USE_RPA); + } kv_commit(1); // continue to SM_FINAL_REESTABLISHED case SM_FINAL_REESTABLISHED: l2cap_request_connection_parameter_update(state_changed->conn_handle, 6, 10, 0, 300); diff --git a/examples/hid_mouse/src/startup_ing91800.s b/examples/hid_mouse/src/startup_ing91600.s similarity index 90% rename from examples/hid_mouse/src/startup_ing91800.s rename to examples/hid_mouse/src/startup_ing91600.s index 641003be3..f6c8d8b6d 100644 --- a/examples/hid_mouse/src/startup_ing91800.s +++ b/examples/hid_mouse/src/startup_ing91600.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -42,7 +42,7 @@ __initial_sp __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -59,10 +59,14 @@ Reset_Handler PROC ; this push is consumed by main PUSH {LR} - + + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -73,11 +77,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {PC} ENDP - + ALIGN END diff --git a/examples/ibeacon_scanner/ibeacon_scanner.ingw b/examples/ibeacon_scanner/ibeacon_scanner.ingw index eab70d854..e541e25a4 100644 --- a/examples/ibeacon_scanner/ibeacon_scanner.ingw +++ b/examples/ibeacon_scanner/ibeacon_scanner.ingw @@ -1,18 +1,24 @@ { "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "ide_ver": "5", @@ -43,8 +49,8 @@ "role": "central", "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples/ibeacon_scanner/ibeacon_scanner.uvproj b/examples/ibeacon_scanner/ibeacon_scanner.uvproj index 8ec3dab95..2c2264766 100644 --- a/examples/ibeacon_scanner/ibeacon_scanner.uvproj +++ b/examples/ibeacon_scanner/ibeacon_scanner.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/ibeacon_scanner/ibeacon_scanner.uvprojx b/examples/ibeacon_scanner/ibeacon_scanner.uvprojx index d75f3ff01..4c9e0680f 100644 --- a/examples/ibeacon_scanner/ibeacon_scanner.uvprojx +++ b/examples/ibeacon_scanner/ibeacon_scanner.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/ibeacon_scanner/src/startup_ing91800.s b/examples/ibeacon_scanner/src/startup_ing91800.s index 641003be3..f6c8d8b6d 100644 --- a/examples/ibeacon_scanner/src/startup_ing91800.s +++ b/examples/ibeacon_scanner/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -42,7 +42,7 @@ __initial_sp __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -59,10 +59,14 @@ Reset_Handler PROC ; this push is consumed by main PUSH {LR} - + + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -73,11 +77,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {PC} ENDP - + ALIGN END diff --git a/examples/io_over_ble_mas/io_over_ble_mas.ingw b/examples/io_over_ble_mas/io_over_ble_mas.ingw index 2f860789c..3742efe7f 100644 --- a/examples/io_over_ble_mas/io_over_ble_mas.ingw +++ b/examples/io_over_ble_mas/io_over_ble_mas.ingw @@ -1,19 +1,25 @@ { "watchdog": false, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "ide_ver": "5", @@ -52,8 +58,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples/io_over_ble_mas/io_over_ble_mas.uvproj b/examples/io_over_ble_mas/io_over_ble_mas.uvproj index 29abb9683..5a3c751b7 100644 --- a/examples/io_over_ble_mas/io_over_ble_mas.uvproj +++ b/examples/io_over_ble_mas/io_over_ble_mas.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/io_over_ble_mas/io_over_ble_mas.uvprojx b/examples/io_over_ble_mas/io_over_ble_mas.uvprojx index 29735e203..411ef4656 100644 --- a/examples/io_over_ble_mas/io_over_ble_mas.uvprojx +++ b/examples/io_over_ble_mas/io_over_ble_mas.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/io_over_ble_mas/src/io_interf.c b/examples/io_over_ble_mas/src/io_interf.c index 42cd32ed4..9e1e56184 100644 --- a/examples/io_over_ble_mas/src/io_interf.c +++ b/examples/io_over_ble_mas/src/io_interf.c @@ -136,7 +136,8 @@ static void config_uart(uint32_t freq, uint32_t baud) void io_interf_setup_peripherals() { - SYSCTRL_ClearClkGateMulti((1 << SYSCTRL_ClkGate_APB_UART1)); + SYSCTRL_ClearClkGateMulti( (1 << SYSCTRL_ClkGate_APB_PinCtrl) + || (1 << SYSCTRL_ClkGate_APB_UART1)); config_uart(OSC_CLK_FREQ, 921600); PINCTRL_SetPadMux(PIN_COMM_RX, IO_SOURCE_GENERAL); diff --git a/examples/io_over_ble_mas/src/startup_ing91800.s b/examples/io_over_ble_mas/src/startup_ing91800.s index 7e44b2c58..53907e41a 100644 --- a/examples/io_over_ble_mas/src/startup_ing91800.s +++ b/examples/io_over_ble_mas/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/io_over_ble_sla/io_over_ble_sla.ingw b/examples/io_over_ble_sla/io_over_ble_sla.ingw index 4282cf385..6a4a8452b 100644 --- a/examples/io_over_ble_sla/io_over_ble_sla.ingw +++ b/examples/io_over_ble_sla/io_over_ble_sla.ingw @@ -1,19 +1,25 @@ { "watchdog": false, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "ide_ver": "5", @@ -52,8 +58,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples/io_over_ble_sla/io_over_ble_sla.uvproj b/examples/io_over_ble_sla/io_over_ble_sla.uvproj index c1cfec273..6ab708757 100644 --- a/examples/io_over_ble_sla/io_over_ble_sla.uvproj +++ b/examples/io_over_ble_sla/io_over_ble_sla.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/io_over_ble_sla/io_over_ble_sla.uvprojx b/examples/io_over_ble_sla/io_over_ble_sla.uvprojx index 8f45dfc5d..e5110ac11 100644 --- a/examples/io_over_ble_sla/io_over_ble_sla.uvprojx +++ b/examples/io_over_ble_sla/io_over_ble_sla.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/io_over_ble_sla/src/startup_ing91800.s b/examples/io_over_ble_sla/src/startup_ing91800.s index 7e44b2c58..53907e41a 100644 --- a/examples/io_over_ble_sla/src/startup_ing91800.s +++ b/examples/io_over_ble_sla/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/l2cap_psm/flash_download.ini b/examples/l2cap_psm/flash_download.ini index 489990d36..43f89b6bc 100644 --- a/examples/l2cap_psm/flash_download.ini +++ b/examples/l2cap_psm/flash_download.ini @@ -21,10 +21,11 @@ batch.limit=-1 [uart] Baud=921600 -Port=COM3 +Port=COM10 Parity= DataBits=8 StopBits=1 +Timeout=10000 [bin-0] Name=Burn Bin #1 diff --git a/examples/l2cap_psm/l2cap_psm.ingw b/examples/l2cap_psm/l2cap_psm.ingw index a8d5c3bfb..6a2984cd4 100644 --- a/examples/l2cap_psm/l2cap_psm.ingw +++ b/examples/l2cap_psm/l2cap_psm.ingw @@ -1,19 +1,25 @@ { "watchdog": true, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -72,8 +78,8 @@ "keil": true, "cmsis": "", "cube": true, - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "k5_cc_ver": "6", "printf_enable": true, "ota_ver_patch": "0", diff --git a/examples/l2cap_psm/l2cap_psm.uvproj b/examples/l2cap_psm/l2cap_psm.uvproj index 949fcb4d7..fdfccba98 100644 --- a/examples/l2cap_psm/l2cap_psm.uvproj +++ b/examples/l2cap_psm/l2cap_psm.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/l2cap_psm/l2cap_psm.uvprojx b/examples/l2cap_psm/l2cap_psm.uvprojx index abc993536..3b8368acf 100644 --- a/examples/l2cap_psm/l2cap_psm.uvprojx +++ b/examples/l2cap_psm/l2cap_psm.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/littleVGL/littleVGL.ingw b/examples/littleVGL/littleVGL.ingw index 367bb975b..d0f333930 100644 --- a/examples/littleVGL/littleVGL.ingw +++ b/examples/littleVGL/littleVGL.ingw @@ -1,19 +1,25 @@ { "watchdog": true, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -70,8 +76,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "k5_cc_ver": "6", "printf_enable": true, "ota_ver_patch": "0", diff --git a/examples/littleVGL/littleVGL.uvproj b/examples/littleVGL/littleVGL.uvproj index 95e6e8d29..bbda60dbc 100644 --- a/examples/littleVGL/littleVGL.uvproj +++ b/examples/littleVGL/littleVGL.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/littleVGL/littleVGL.uvprojx b/examples/littleVGL/littleVGL.uvprojx index 2ae742c51..7cf4b4979 100644 --- a/examples/littleVGL/littleVGL.uvprojx +++ b/examples/littleVGL/littleVGL.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/littleVGL/src/startup_ing91800.s b/examples/littleVGL/src/startup_ing91800.s index 0f7d42fd1..7fe2b54c8 100644 --- a/examples/littleVGL/src/startup_ing91800.s +++ b/examples/littleVGL/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/llsync_light/llsync_light.ingw b/examples/llsync_light/llsync_light.ingw index e46bae107..d5fe2aa7e 100644 --- a/examples/llsync_light/llsync_light.ingw +++ b/examples/llsync_light/llsync_light.ingw @@ -1,19 +1,25 @@ { "watchdog": true, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -69,8 +75,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "printf_enable": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples/llsync_light/llsync_light.uvproj b/examples/llsync_light/llsync_light.uvproj index be33b0055..d38de4451 100644 --- a/examples/llsync_light/llsync_light.uvproj +++ b/examples/llsync_light/llsync_light.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/llsync_light/llsync_light.uvprojx b/examples/llsync_light/llsync_light.uvprojx index d99bf5444..f0ad73e10 100644 --- a/examples/llsync_light/llsync_light.uvprojx +++ b/examples/llsync_light/llsync_light.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/llsync_light/src/startup_ing91800.s b/examples/llsync_light/src/startup_ing91800.s index 0f7d42fd1..7fe2b54c8 100644 --- a/examples/llsync_light/src/startup_ing91800.s +++ b/examples/llsync_light/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/mesh-light/mesh-light.ingw b/examples/mesh-light/mesh-light.ingw index 4e5001bb7..e6e42cbcd 100644 --- a/examples/mesh-light/mesh-light.ingw +++ b/examples/mesh-light/mesh-light.ingw @@ -1,18 +1,24 @@ { "bundle_meta": { + "var": { + "link_layer_features": { + "value": "bff90104fe000000", + "addr": 153560 + } + }, "rom": { - "size": 141212, + "size": 141820, "base": 16384 }, "ram": { - "size": 3764, + "size": 3572, "base": 536870912 }, "app": { "base": 163840 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "ide_ver": "5", @@ -43,8 +49,8 @@ "role": "light", "keil": true, "cmsis": "", - "app_ram_size": 61768, - "app_ram_addr": 536874680, + "app_ram_size": 61960, + "app_ram_addr": 536874488, "uart_log": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples/mesh-light/mesh-light.uvproj b/examples/mesh-light/mesh-light.uvproj index 3222e9abb..6b0565aae 100644 --- a/examples/mesh-light/mesh-light.uvproj +++ b/examples/mesh-light/mesh-light.uvproj @@ -319,8 +319,8 @@ 0 - 536874680 - 61768 + 536874488 + 61960 0 diff --git a/examples/mesh-light/mesh-light.uvprojx b/examples/mesh-light/mesh-light.uvprojx index ddac32969..4376c8d88 100644 --- a/examples/mesh-light/mesh-light.uvprojx +++ b/examples/mesh-light/mesh-light.uvprojx @@ -297,8 +297,8 @@ 0 - 536874680 - 61768 + 536874488 + 61960 0 diff --git a/examples/mesh-light/src/ble_status.c b/examples/mesh-light/src/ble_status.c index 317680a4d..e9285fa35 100644 --- a/examples/mesh-light/src/ble_status.c +++ b/examples/mesh-light/src/ble_status.c @@ -57,7 +57,8 @@ static void hci_packet_handler(uint8_t packet_type, uint16_t channel, const uint case HCI_EVENT_LE_META: switch (hci_event_le_meta_get_subevent_code(packet)) { - case HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE:{ + case HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE: + case HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE_V2:{ const le_meta_event_enh_create_conn_complete_t *create_conn = decode_hci_le_meta_event(packet, le_meta_event_enh_create_conn_complete_t); ble_status.conn_handle = create_conn->handle; diff --git a/examples/mesh-light/src/mesh_profile.c b/examples/mesh-light/src/mesh_profile.c index f0206efe3..37b9894cd 100644 --- a/examples/mesh-light/src/mesh_profile.c +++ b/examples/mesh-light/src/mesh_profile.c @@ -342,7 +342,8 @@ static void user_packet_handler(uint8_t packet_type, uint16_t channel, const uin break; - case HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE:{ + case HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE: + case HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE_V2:{ const le_meta_event_enh_create_conn_complete_t *create_conn = decode_hci_le_meta_event(packet, le_meta_event_enh_create_conn_complete_t); my_conn_handle = create_conn->handle; diff --git a/examples/pairing_with_oob/README.md b/examples/pairing_with_oob/README.md index cca8440c4..56d7e18c7 100644 --- a/examples/pairing_with_oob/README.md +++ b/examples/pairing_with_oob/README.md @@ -1,5 +1,6 @@ # Pairing with OOB -This example demonstrates how to: +This example demonstrates how to do: -* Paring using OOB (out of band) data. \ No newline at end of file +* LE Legacy paring using OOB (out of band) data; +* LE Secure Connection paring using OOB data. \ No newline at end of file diff --git a/examples/pairing_with_oob/data/advertising_oob.adv b/examples/pairing_with_oob/data/advertising_oob.adv new file mode 100644 index 000000000..c9eae1c31 --- /dev/null +++ b/examples/pairing_with_oob/data/advertising_oob.adv @@ -0,0 +1,18 @@ +// 0x01 - «Flags» +2, 0x01, +0x06, + +// 0x09 - «Complete Local Name» +16, 0x09, +0x50, 0x61, 0x72, 0x69, 0x6E, 0x67, 0x20, 0x77, +0x69, 0x74, 0x68, 0x20, 0x4F, 0x4F, 0x42, + +// 0xFF - «Manufacturer Specific Data» +35, 0xFF, +0xAC, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, + +// Total size = 56 bytes diff --git a/examples/pairing_with_oob/data/advertising_oob.const b/examples/pairing_with_oob/data/advertising_oob.const new file mode 100644 index 000000000..12276e306 --- /dev/null +++ b/examples/pairing_with_oob/data/advertising_oob.const @@ -0,0 +1,4 @@ +#define ADVERTISING_OOB_ITEM_OFFSET_FLAGS 2 +#define ADVERTISING_OOB_ITEM_OFFSET_COMPLETE_LOCAL_NAME 5 +#define ADVERTISING_OOB_ITEM_OFFSET_MANUFACTURER_SPECIFIC_DATA 22 + diff --git a/examples/pairing_with_oob/data/advertising_oob.const.tmpl b/examples/pairing_with_oob/data/advertising_oob.const.tmpl new file mode 100644 index 000000000..de1b56375 --- /dev/null +++ b/examples/pairing_with_oob/data/advertising_oob.const.tmpl @@ -0,0 +1,2 @@ +{{loop adv_data_item}}#define {{adv_data_item.key:70}} {{adv_data_item.value}} +{{endloop}} diff --git a/examples/pairing_with_oob/doc/index.md b/examples/pairing_with_oob/doc/index.md index 982533d6f..db6a06724 100644 --- a/examples/pairing_with_oob/doc/index.md +++ b/examples/pairing_with_oob/doc/index.md @@ -5,4 +5,7 @@ Build this project twice with compiling switch `ROLE` set to `0` & `1` respectively, and download it two Dev-Boards. +To test LE Secure Connection pairing, define `LE_SECURE_CONNECTION_PAIRING`; to test +LE legacy pairing, do not define `LE_SECURE_CONNECTION_PAIRING`. + Check that those two Dev-Boards can be paired. \ No newline at end of file diff --git a/examples/pairing_with_oob/flash_download.ini b/examples/pairing_with_oob/flash_download.ini index abeef12bc..be61ebdf7 100644 --- a/examples/pairing_with_oob/flash_download.ini +++ b/examples/pairing_with_oob/flash_download.ini @@ -21,7 +21,7 @@ batch.limit=-1 [uart] Baud=921600 -Port=COM3 +Port=COM6 Parity= DataBits=8 StopBits=1 @@ -30,13 +30,13 @@ Timeout=10000 [bin-0] Name=Burn Bin #1 Checked=1 -FileName=../../bundles/typical/ING9187xx/platform.bin +FileName=../../bundles/exp/ING9187xx/platform.bin Address=16384 [bin-1] Name=Burn Bin #2 Checked=1 -Address=155648 +Address=172032 FileName=pairing_with_oob.bin [bin-2] diff --git a/examples/pairing_with_oob/pairing_with_oob.ingw b/examples/pairing_with_oob/pairing_with_oob.ingw index e43bbe009..eba82c844 100644 --- a/examples/pairing_with_oob/pairing_with_oob.ingw +++ b/examples/pairing_with_oob/pairing_with_oob.ingw @@ -1,19 +1,25 @@ { "watchdog": true, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "bff90104fe000000", + "addr": 164336 + } + }, "rom": { - "size": 135796, + "size": 152600, "base": 16384 }, "ram": { - "size": 29876, + "size": 30076, "base": 536870912 }, "app": { - "base": 155648 + "base": 172032 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -31,7 +37,7 @@ "enable_hci_log": false, "ota_ver_minor": "0", "ota_ver_major": "0", - "template": "C:\\projects\\ingchips\\ingWizard\\templates\\typical\\peripheral", + "template": "C:\\projects\\ingchips\\ingWizard\\templates\\exp\\peripheral", "coding_adv": false, "key_incode": true, "series": "ING9187xx", @@ -49,13 +55,13 @@ "is_sdk_path_rel": true, "pb_gatt": true, "deep_sleep": true, - "proj_dir": "C:\\projects\\ingchips\\SDK_Release\\examples\\pairing_with_oob", + "proj_dir": "C:\/projects\/ingchips\/SDK_Release\/examples\\pairing_with_oob", "heap_size": 0, "power_saving": false, "secondary": false, - "bundle": "typical", - "app_rom_size": "385024", - "app_rom_addr": "155648", + "bundle": "exp", + "app_rom_size": "368640", + "app_rom_addr": "172032", "family": "ing918", "vcode": false, "heap_override": false, @@ -76,8 +82,8 @@ "keil": true, "cmsis": "", "cube": true, - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35456, + "app_ram_addr": 536900992, "k5_cc_ver": "6", "printf_enable": true, "gatt_handle": { diff --git a/examples/pairing_with_oob/pairing_with_oob.uvopt b/examples/pairing_with_oob/pairing_with_oob.uvopt index 174aeea90..2f4a63fe9 100644 --- a/examples/pairing_with_oob/pairing_with_oob.uvopt +++ b/examples/pairing_with_oob/pairing_with_oob.uvopt @@ -71,7 +71,7 @@ 0 - 0 + 1 0 1 @@ -183,7 +183,7 @@ APP - 0 + 1 0 0 0 @@ -192,11 +192,11 @@ 1 1 0 - 1 + 0 57608268 0 0 - 5 + 0 0 .\src\main.c main.c @@ -208,17 +208,33 @@ 2 1 0 - 1 + 0 2 0 - 8 - 33 + 0 + 0 0 .\src\profile.c profile.c 0 0 + + 1 + 3 + 4 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\src\Tools\ing918_uecc.lib + ing918_uecc.lib + 0 + 0 + @@ -229,14 +245,14 @@ 0 2 - 3 + 4 2 0 - 1 + 0 57608268 0 0 - 5 + 0 0 .\src\startup_ing91800.s startup_ing91800.s @@ -245,16 +261,16 @@ 2 - 4 + 5 3 0 - 1 + 0 57608268 0 0 - 5 + 0 0 - ../..\bundles\typical\ING9187xx\symdefs.m + ../..\bundles\exp\ING9187xx\symdefs.m symdefs.m 0 0 @@ -269,14 +285,14 @@ 0 3 - 5 + 6 1 0 - 1 + 0 57608268 0 0 - 5 + 0 0 ../..\src\BSP\eflash.c eflash.c @@ -293,14 +309,14 @@ 0 4 - 6 + 7 1 0 - 1 + 0 57608268 0 0 - 5 + 0 0 ../..\src\FWlib\peripheral_adc.c peripheral_adc.c @@ -309,14 +325,14 @@ 4 - 7 + 8 1 0 - 1 + 0 57608268 0 0 - 5 + 0 0 ../..\src\FWlib\peripheral_gpio.c peripheral_gpio.c @@ -325,14 +341,14 @@ 4 - 8 + 9 1 0 - 1 + 0 57608268 0 0 - 5 + 0 0 ../..\src\FWlib\peripheral_i2c.c peripheral_i2c.c @@ -341,14 +357,14 @@ 4 - 9 + 10 1 0 - 1 + 0 57608268 0 0 - 5 + 0 0 ../..\src\FWlib\peripheral_pinctrl.c peripheral_pinctrl.c @@ -357,14 +373,14 @@ 4 - 10 + 11 1 0 - 1 + 0 57608268 0 0 - 5 + 0 0 ../..\src\FWlib\peripheral_pwm.c peripheral_pwm.c @@ -373,14 +389,14 @@ 4 - 11 + 12 1 0 - 1 + 0 57608268 0 0 - 5 + 0 0 ../..\src\FWlib\peripheral_rtc.c peripheral_rtc.c @@ -389,14 +405,14 @@ 4 - 12 + 13 1 0 - 1 + 0 57608268 0 0 - 5 + 0 0 ../..\src\FWlib\peripheral_ssp.c peripheral_ssp.c @@ -405,14 +421,14 @@ 4 - 13 + 14 1 0 - 1 + 0 57608268 0 0 - 5 + 0 0 ../..\src\FWlib\peripheral_sysctrl.c peripheral_sysctrl.c @@ -421,14 +437,14 @@ 4 - 14 + 15 1 0 - 1 + 0 57608268 0 0 - 5 + 0 0 ../..\src\FWlib\peripheral_timer.c peripheral_timer.c @@ -437,14 +453,14 @@ 4 - 15 + 16 1 0 - 1 + 0 57608268 0 0 - 5 + 0 0 ../..\src\FWlib\peripheral_uart.c peripheral_uart.c @@ -455,26 +471,58 @@ Tools - 0 + 1 0 0 0 5 - 16 + 17 1 0 - 1 + 0 57608268 0 0 - 5 + 0 0 ../..\src\Tools\trace.c trace.c 0 0 + + 5 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\src\Tools\ecc_driver.c + ecc_driver.c + 0 + 0 + + + 5 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\src\Tools\ad_parser.c + ad_parser.c + 0 + 0 + diff --git a/examples/pairing_with_oob/pairing_with_oob.uvoptx b/examples/pairing_with_oob/pairing_with_oob.uvoptx index e99baa4e0..81d656ac0 100644 --- a/examples/pairing_with_oob/pairing_with_oob.uvoptx +++ b/examples/pairing_with_oob/pairing_with_oob.uvoptx @@ -196,7 +196,7 @@ APP - 0 + 1 0 0 0 @@ -251,7 +251,7 @@ 0 0 0 - ../..\bundles\typical\ING9187xx\symdefs.m + ../..\bundles\exp\ING9187xx\symdefs.m symdefs.m 0 0 @@ -408,7 +408,7 @@ Tools - 0 + 1 0 0 0 @@ -424,6 +424,42 @@ 0 0 + + 5 + 17 + 1 + 0 + 0 + 0 + ..\..\src\Tools\ecc_driver.c + ecc_driver.c + 0 + 0 + + + 5 + 18 + 4 + 0 + 0 + 0 + ..\..\src\Tools\ing918_uecc.lib + ing918_uecc.lib + 0 + 0 + + + 5 + 19 + 1 + 0 + 0 + 0 + ..\..\src\Tools\ad_parser.c + ad_parser.c + 0 + 0 + diff --git a/examples/pairing_with_oob/pairing_with_oob.uvproj b/examples/pairing_with_oob/pairing_with_oob.uvproj index 5bca3d5c6..82f8b6805 100644 --- a/examples/pairing_with_oob/pairing_with_oob.uvproj +++ b/examples/pairing_with_oob/pairing_with_oob.uvproj @@ -294,8 +294,8 @@ 1 - 155648 - 385024 + 172032 + 368640 1 @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900992 + 35456 0 @@ -348,7 +348,7 @@ --gnu USE_STDPERIPH_DRIVER,ROLE=1 - ../../bundles/typical/inc;../../bundles/typical/inc/os;../../src/BSP;../../src/FWlib;../../src/StartUP/ing918;../../src/Tools;../../src + ../../bundles/exp/inc;../../bundles/exp/inc/os;../../src/BSP;../../src/FWlib;../../src/StartUP/ing918;../../src/Tools;../../src @@ -399,6 +399,11 @@ 1 .\src\profile.c + + ing918_uecc.lib + 4 + ..\..\src\Tools\ing918_uecc.lib + @@ -412,7 +417,7 @@ symdefs.m 3 - ../..\bundles\typical\ING9187xx\symdefs.m + ../..\bundles\exp\ING9187xx\symdefs.m @@ -489,6 +494,16 @@ 1 ../..\src\Tools\trace.c + + ecc_driver.c + 1 + ..\..\src\Tools\ecc_driver.c + + + ad_parser.c + 1 + ..\..\src\Tools\ad_parser.c + diff --git a/examples/pairing_with_oob/pairing_with_oob.uvprojx b/examples/pairing_with_oob/pairing_with_oob.uvprojx index f2c2c7d98..6625e5cd4 100644 --- a/examples/pairing_with_oob/pairing_with_oob.uvprojx +++ b/examples/pairing_with_oob/pairing_with_oob.uvprojx @@ -273,8 +273,8 @@ 1 - 155648 - 385024 + 172032 + 368640 1 @@ -298,8 +298,8 @@ 0 - 536900792 - 35656 + 536900992 + 35456 0 @@ -337,7 +337,7 @@ USE_STDPERIPH_DRIVER, ROLE=1 - ../../bundles/typical/inc;../../bundles/typical/inc/os;../../src/BSP;../../src/FWlib;../../src/StartUP/ing918;../../src/Tools;../../src + ../../bundles/exp/inc;../../bundles/exp/inc/os;../../src/BSP;../../src/FWlib;../../src/StartUP/ing918;../../src/Tools;../../src @@ -404,7 +404,7 @@ symdefs.m 3 - ../..\bundles\typical\ING9187xx\symdefs.m + ../..\bundles\exp\ING9187xx\symdefs.m @@ -481,6 +481,21 @@ 1 ../..\src\Tools\trace.c + + ecc_driver.c + 1 + ..\..\src\Tools\ecc_driver.c + + + ing918_uecc.lib + 4 + ..\..\src\Tools\ing918_uecc.lib + + + ad_parser.c + 1 + ..\..\src\Tools\ad_parser.c + diff --git a/examples/pairing_with_oob/src/le_secure_pairing.c b/examples/pairing_with_oob/src/le_secure_pairing.c new file mode 100644 index 000000000..e287a3cea --- /dev/null +++ b/examples/pairing_with_oob/src/le_secure_pairing.c @@ -0,0 +1,384 @@ +#include +#include +#include "profile.h" +#include "platform_api.h" +#include "att_db.h" +#include "gap.h" +#include "btstack_event.h" +#include "btstack_defines.h" +#include "sm.h" +#include "gatt_client_util.h" +#include "ecc_driver.h" +#include "ad_parser.h" +#include "kv_storage.h" + +#define SLAVE_ADDR {0xFA, 0x69, 0x77, 0xCC, 0xC2, 0x7E} +#define MASTER_ADDR {0xFA, 0x69, 0x77, 0xCC, 0xC2, 0x7F} + +static uint8_t adv_data[] = { + #include "../data/advertising_oob.adv" +}; + +#include "../data/advertising_oob.const" + +#if (ROLE == HCI_ROLE_SLAVE) + +// GATT characteristic handles +#include "../data/gatt.const" + +const static uint8_t profile_data[] = { + #include "../data/gatt.profile" +}; + +static const sm_persistent_t sm_persistent = +{ + .er = {9, 1, 8}, + .ir = {9, 1, 6}, + .identity_addr_type = BD_ADDR_TYPE_LE_RANDOM, + .identity_addr = SLAVE_ADDR +}; + +static const bd_addr_t peer_addr = MASTER_ADDR; + +static uint16_t att_read_callback(hci_con_handle_t connection_handle, uint16_t att_handle, uint16_t offset, + uint8_t * buffer, uint16_t buffer_size) +{ + switch (att_handle) + { + case HANDLE_GENERIC_INPUT: + if (buffer) + { + // add your code + return buffer_size; + } + else + return 1; // TODO: return required buffer size + + default: + return 0; + } +} + +static int att_write_callback(hci_con_handle_t connection_handle, uint16_t att_handle, uint16_t transaction_mode, + uint16_t offset, const uint8_t *buffer, uint16_t buffer_size) +{ + switch (att_handle) + { + case HANDLE_GENERIC_INPUT: + // add your code + return 0; + + default: + return 0; + } +} + +#else + +static const sm_persistent_t sm_persistent = +{ + .er = {9, 1, 8}, + .ir = {9, 1, 6}, + .identity_addr_type = BD_ADDR_TYPE_LE_RANDOM, + .identity_addr = MASTER_ADDR +}; + +static const bd_addr_t peer_addr = SLAVE_ADDR; + +static struct gatt_client_discoverer *discoverer = NULL; + +#define iprintf platform_printf + +#include "gatt_client_util.c" + +#endif + +static void user_msg_handler(uint32_t msg_id, void *data, uint16_t size) +{ + switch (msg_id) + { + // add your code + //case MY_MESSAGE_ID: + // break; + default: + ; + } +} + +#if (ROLE == HCI_ROLE_SLAVE) + +#else + +static initiating_phy_config_t phy_configs[] = +{ + { + .phy = PHY_1M, + .conn_param = + { + .scan_int = 200, + .scan_win = 180, + .interval_min = 50, + .interval_max = 50, + .latency = 0, + .supervision_timeout = 600, + .min_ce_len = 90, + .max_ce_len = 90 + } + } +}; + +static void setup_initiating(void) +{ + gap_ext_create_connection(INITIATING_ADVERTISER_FROM_PARAM, // Initiator_Filter_Policy, + BD_ADDR_TYPE_LE_RANDOM, // Own_Address_Type, + BD_ADDR_TYPE_LE_RANDOM, // Peer_Address_Type, + peer_addr, // Peer_Address, + sizeof(phy_configs) / sizeof(phy_configs[0]), + phy_configs); +} +#endif + +const static ext_adv_set_en_t adv_sets_en[] = { {.handle = 0, .duration = 0, .max_events = 0} }; + +static void setup_adv(int connectable) +{ + platform_printf("start adv with OOB (DEMO only)\n"); + gap_set_adv_set_random_addr(0, sm_persistent.identity_addr); + gap_set_ext_adv_para(0, + connectable ? CONNECTABLE_ADV_BIT : 0, + 0x00a1, 0x00a1, // Primary_Advertising_Interval_Min, Primary_Advertising_Interval_Max + PRIMARY_ADV_ALL_CHANNELS, // Primary_Advertising_Channel_Map + BD_ADDR_TYPE_LE_RANDOM, // Own_Address_Type + BD_ADDR_TYPE_LE_PUBLIC, // Peer_Address_Type (ignore) + NULL, // Peer_Address (ignore) + ADV_FILTER_ALLOW_ALL, // Advertising_Filter_Policy + 0x00, // Advertising_Tx_Power + PHY_1M, // Primary_Advertising_PHY + 0, // Secondary_Advertising_Max_Skip + PHY_1M, // Secondary_Advertising_PHY + 0x00, // Advertising_SID + 0x00); // Scan_Request_Notification_Enable + gap_set_ext_adv_data(0, sizeof(adv_data), (uint8_t*)adv_data); + gap_set_ext_adv_enable(1, sizeof(adv_sets_en) / sizeof(adv_sets_en[0]), adv_sets_en); +} + +static struct +{ + sm_key_t confirm; + sm_key_t random; +} peer_oob_data; + +static uint8_t oob_received = 0; + +static int get_sc_oob_data_callback(uint8_t address_type, bd_addr_t addr, uint8_t *peer_confirm, uint8_t *peer_random) +{ + platform_printf("Getting OOB data...\n"); + + if (address_type != BD_ADDR_TYPE_LE_RANDOM) return 0; + if (memcmp(addr, peer_addr, BD_ADDR_LEN)) return 0; + memcpy(peer_confirm, peer_oob_data.confirm, sizeof(peer_oob_data.confirm)); + memcpy(peer_random, peer_oob_data.random, sizeof(peer_oob_data.random)); + return 1; +} + +static const scan_phy_config_t configs[2] = +{ + { + .phy = PHY_1M, + .type = SCAN_PASSIVE, + .interval = 200, + .window = 200 + }, +}; + +static void setup_scan(void) +{ + gap_add_whitelist(peer_addr, BD_ADDR_TYPE_LE_RANDOM); + gap_set_ext_scan_para(BD_ADDR_TYPE_LE_RANDOM, SCAN_ACCEPT_WLIST_EXCEPT_NOT_DIRECTED, + sizeof(configs) / sizeof(configs[0]), + configs); + gap_set_ext_scan_enable(1, 0, 0, 0); // start continuous scanning +} + +static void on_oob_data_generated(const uint8_t *confirm, const uint8_t *random) +{ + uint8_t *p = adv_data + ADVERTISING_OOB_ITEM_OFFSET_MANUFACTURER_SPECIFIC_DATA + 2; + memcpy(p, confirm, sizeof(sm_key_t)); + p += sizeof(sm_key_t); + memcpy(p, random, sizeof(sm_key_t)); + platform_printf("OOB:\n"); + printf_hexdump(adv_data + ADVERTISING_OOB_ITEM_OFFSET_MANUFACTURER_SPECIFIC_DATA + 2, 32); +#if (ROLE != HCI_ROLE_SLAVE) + setup_adv(0); +#endif + setup_scan(); +} + +static void user_packet_handler(uint8_t packet_type, uint16_t channel, const uint8_t *packet, uint16_t size) +{ + uint8_t event = hci_event_packet_get_type(packet); + const btstack_user_msg_t *p_user_msg; + if (packet_type != HCI_EVENT_PACKET) return; + + switch (event) + { + case BTSTACK_EVENT_STATE: + if (btstack_event_state_get_state(packet) != HCI_STATE_WORKING) + break; + sm_sc_generate_oob_data(on_oob_data_generated); + gap_set_random_device_address(sm_persistent.identity_addr); + break; + + case HCI_EVENT_COMMAND_COMPLETE: + switch (hci_event_command_complete_get_command_opcode(packet)) + { + // add your code to check command complete response + // case : + // break; + default: + break; + } + break; + + case HCI_EVENT_LE_META: + switch (hci_event_le_meta_get_subevent_code(packet)) + { + case HCI_SUBEVENT_LE_EXTENDED_ADVERTISING_REPORT: + if (0 == oob_received) + { + uint16_t length = 0; + const le_ext_adv_report_t *report = decode_hci_le_meta_event(packet, le_meta_event_ext_adv_report_t)->reports; + + const uint8_t *p = ad_data_from_type(report->data_len, (uint8_t *)report->data, 0xff, &length); + if (length != sizeof(peer_oob_data) + 2) + break; + oob_received = 1; + platform_printf("OOB data received.\n"); + memcpy(&peer_oob_data, p + 2, sizeof(peer_oob_data)); + printf_hexdump(&peer_oob_data, sizeof(peer_oob_data)); + gap_set_ext_scan_enable(0, 0, 0, 0); +#if (ROLE == HCI_ROLE_SLAVE) + // when slave received OOB, it starts boardcasting OOB + setup_adv(1); +#else + // when master received OOB means that slave had received OOB, too. + gap_set_ext_adv_enable(0, sizeof(adv_sets_en) / sizeof(adv_sets_en[0]), adv_sets_en); + setup_initiating(); +#endif + } + break; + + case HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE: + case HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE_V2: + { + const le_meta_event_enh_create_conn_complete_t *complete = + decode_hci_le_meta_event(packet, le_meta_event_enh_create_conn_complete_t); + platform_printf("connected: %d\n", complete->status); +#if (ROLE == HCI_ROLE_SLAVE) + att_set_db(complete->handle, profile_data); + sm_request_pairing(complete->handle); +#else + if (complete->status == 0) + { + if (discoverer) gatt_client_util_free(discoverer); + discoverer = gatt_client_util_discover_all(complete->handle, + gatt_client_util_dump_profile, + NULL); + } + else + { + setup_initiating(); + } +#endif + } + break; + default: + break; + } + + break; + + case HCI_EVENT_DISCONNECTION_COMPLETE: +#if (ROLE == HCI_ROLE_SLAVE) + gap_set_ext_adv_enable(1, sizeof(adv_sets_en) / sizeof(adv_sets_en[0]), adv_sets_en); +#else + setup_initiating(); +#endif + break; + + case ATT_EVENT_CAN_SEND_NOW: + // add your code + break; + + case BTSTACK_EVENT_USER_MSG: + p_user_msg = hci_event_packet_get_user_msg(packet); + user_msg_handler(p_user_msg->msg_id, p_user_msg->data, p_user_msg->len); + break; + + default: + break; + } +} + +static void sm_packet_handler(uint8_t packet_type, uint16_t channel, const uint8_t *packet, uint16_t size) +{ + uint8_t event = hci_event_packet_get_type(packet); + + if (packet_type != HCI_EVENT_PACKET) return; + + switch (event) + { + case SM_EVENT_JUST_WORKS_REQUEST: + platform_printf("JUST_WORKS? NO.\n"); + sm_bonding_decline(sm_event_just_works_request_get_handle(packet)); + break; + case SM_EVENT_IDENTITY_RESOLVING_SUCCEEDED: + break; + case SM_EVENT_PASSKEY_INPUT_NUMBER: + break; + case SM_EVENT_STATE_CHANGED: + { + const sm_event_state_changed_t *state_changed = decode_hci_event(packet, sm_event_state_changed_t); + switch (state_changed->reason) + { + case SM_STARTED: + platform_printf("SM: STARTED\n"); + break; + case SM_FINAL_PAIRED: + platform_printf("SM: PAIRED\n"); + break; + case SM_FINAL_REESTABLISHED: + platform_printf("SM: REESTABLISHED\n"); + break; + default: + platform_printf("SM: FINAL ERROR: %d\n", state_changed->reason); + break; + } + } + break; + default: + break; + } +} + +static btstack_packet_callback_registration_t sm_event_callback_registration = {.callback = &sm_packet_handler}; +static btstack_packet_callback_registration_t hci_event_callback_registration; + +uint32_t setup_profile(void *data, void *user_data) +{ + install_ecc_driver(); + platform_printf("setup %s\n", ROLE == HCI_ROLE_SLAVE ? "SLAVE" : "MASTER"); + sm_add_event_handler(&sm_event_callback_registration); + hci_event_callback_registration.callback = &user_packet_handler; + hci_add_event_handler(&hci_event_callback_registration); + att_server_register_packet_handler(&user_packet_handler); + sm_config(1, IO_CAPABILITY_NO_INPUT_NO_OUTPUT, + 0, + &sm_persistent); + sm_set_authentication_requirements(SM_AUTHREQ_BONDING | SM_AUTHREQ_SC); +#if (ROLE == HCI_ROLE_SLAVE) + att_server_init(att_read_callback, att_write_callback); +#endif + sm_register_sc_oob_data_callback(get_sc_oob_data_callback); + return 0; +} diff --git a/examples/pairing_with_oob/src/legacy_pairing.c b/examples/pairing_with_oob/src/legacy_pairing.c new file mode 100644 index 000000000..288c8b506 --- /dev/null +++ b/examples/pairing_with_oob/src/legacy_pairing.c @@ -0,0 +1,321 @@ +#include +#include +#include "profile.h" +#include "platform_api.h" +#include "att_db.h" +#include "gap.h" +#include "btstack_event.h" +#include "btstack_defines.h" +#include "sm.h" +#include "gatt_client_util.h" + +#define SLAVE_ADDR {0xFA, 0x69, 0x77, 0xCC, 0xC2, 0x7E} + +#if (ROLE == HCI_ROLE_SLAVE) + +// GATT characteristic handles +#include "../data/gatt.const" + +const static uint8_t adv_data[] = { + #include "../data/advertising.adv" +}; + +#include "../data/advertising.const" + +const static uint8_t scan_data[] = { + #include "../data/scan_response.adv" +}; + +#include "../data/scan_response.const" + +const static uint8_t profile_data[] = { + #include "../data/gatt.profile" +}; + +const sm_persistent_t sm_persistent = +{ + .er = {9, 1, 8}, + .ir = {9, 1, 6}, + .identity_addr_type = BD_ADDR_TYPE_LE_RANDOM, + .identity_addr = SLAVE_ADDR +}; + +static uint16_t att_read_callback(hci_con_handle_t connection_handle, uint16_t att_handle, uint16_t offset, + uint8_t * buffer, uint16_t buffer_size) +{ + switch (att_handle) + { + case HANDLE_GENERIC_INPUT: + if (buffer) + { + // add your code + return buffer_size; + } + else + return 1; // TODO: return required buffer size + + default: + return 0; + } +} + +static int att_write_callback(hci_con_handle_t connection_handle, uint16_t att_handle, uint16_t transaction_mode, + uint16_t offset, const uint8_t *buffer, uint16_t buffer_size) +{ + switch (att_handle) + { + case HANDLE_GENERIC_INPUT: + // add your code + return 0; + + default: + return 0; + } +} + +#else + +const sm_persistent_t sm_persistent = +{ + .er = {9, 1, 8}, + .ir = {9, 1, 6}, + .identity_addr_type = BD_ADDR_TYPE_LE_RANDOM, + .identity_addr = {0xFA, 0x69, 0x77, 0xCC, 0xC2, 0x7F} +}; + +static const bd_addr_t peer_addr = SLAVE_ADDR; + +static struct gatt_client_discoverer *discoverer = NULL; + +#define iprintf platform_printf + +#include "gatt_client_util.c" + +#endif + +static void user_msg_handler(uint32_t msg_id, void *data, uint16_t size) +{ + switch (msg_id) + { + // add your code + //case MY_MESSAGE_ID: + // break; + default: + ; + } +} + +#if (ROLE == HCI_ROLE_SLAVE) + +const static ext_adv_set_en_t adv_sets_en[] = { {.handle = 0, .duration = 0, .max_events = 0} }; + +static void setup_adv(void) +{ + gap_set_adv_set_random_addr(0, sm_persistent.identity_addr); + gap_set_ext_adv_para(0, + CONNECTABLE_ADV_BIT | SCANNABLE_ADV_BIT | LEGACY_PDU_BIT, + 0x00a1, 0x00a1, // Primary_Advertising_Interval_Min, Primary_Advertising_Interval_Max + PRIMARY_ADV_ALL_CHANNELS, // Primary_Advertising_Channel_Map + BD_ADDR_TYPE_LE_RANDOM, // Own_Address_Type + BD_ADDR_TYPE_LE_PUBLIC, // Peer_Address_Type (ignore) + NULL, // Peer_Address (ignore) + ADV_FILTER_ALLOW_ALL, // Advertising_Filter_Policy + 0x00, // Advertising_Tx_Power + PHY_1M, // Primary_Advertising_PHY + 0, // Secondary_Advertising_Max_Skip + PHY_1M, // Secondary_Advertising_PHY + 0x00, // Advertising_SID + 0x00); // Scan_Request_Notification_Enable + gap_set_ext_adv_data(0, sizeof(adv_data), (uint8_t*)adv_data); + gap_set_ext_scan_response_data(0, sizeof(scan_data), (uint8_t*)scan_data); + gap_set_ext_adv_enable(1, sizeof(adv_sets_en) / sizeof(adv_sets_en[0]), adv_sets_en); +} + +#else + +static initiating_phy_config_t phy_configs[] = +{ + { + .phy = PHY_1M, + .conn_param = + { + .scan_int = 200, + .scan_win = 180, + .interval_min = 50, + .interval_max = 50, + .latency = 0, + .supervision_timeout = 600, + .min_ce_len = 90, + .max_ce_len = 90 + } + } +}; + +static void setup_initiating(void) +{ + gap_set_random_device_address(sm_persistent.identity_addr); + gap_ext_create_connection(INITIATING_ADVERTISER_FROM_PARAM, // Initiator_Filter_Policy, + BD_ADDR_TYPE_LE_RANDOM, // Own_Address_Type, + BD_ADDR_TYPE_LE_RANDOM, // Peer_Address_Type, + peer_addr, // Peer_Address, + sizeof(phy_configs) / sizeof(phy_configs[0]), + phy_configs); +} +#endif + +static void user_packet_handler(uint8_t packet_type, uint16_t channel, const uint8_t *packet, uint16_t size) +{ + uint8_t event = hci_event_packet_get_type(packet); + const btstack_user_msg_t *p_user_msg; + if (packet_type != HCI_EVENT_PACKET) return; + + switch (event) + { + case BTSTACK_EVENT_STATE: + if (btstack_event_state_get_state(packet) != HCI_STATE_WORKING) + break; +#if (ROLE == HCI_ROLE_SLAVE) + setup_adv(); +#else + setup_initiating(); +#endif + break; + + case HCI_EVENT_COMMAND_COMPLETE: + switch (hci_event_command_complete_get_command_opcode(packet)) + { + // add your code to check command complete response + // case : + // break; + default: + break; + } + break; + + case HCI_EVENT_LE_META: + switch (hci_event_le_meta_get_subevent_code(packet)) + { + case HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE: + case HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE_V2: + { + const le_meta_event_enh_create_conn_complete_t *complete = + decode_hci_le_meta_event(packet, le_meta_event_enh_create_conn_complete_t); + platform_printf("connected: %d\n", complete->status); +#if (ROLE == HCI_ROLE_SLAVE) + att_set_db(complete->handle, profile_data); + sm_request_pairing(complete->handle); +#else + if (complete->status == 0) + { + if (discoverer) gatt_client_util_free(discoverer); + discoverer = gatt_client_util_discover_all(complete->handle, + gatt_client_util_dump_profile, + NULL); + } + else + { + setup_initiating(); + } +#endif + } + break; + default: + break; + } + + break; + + case HCI_EVENT_DISCONNECTION_COMPLETE: +#if (ROLE == HCI_ROLE_SLAVE) + gap_set_ext_adv_enable(1, sizeof(adv_sets_en) / sizeof(adv_sets_en[0]), adv_sets_en); +#else + setup_initiating(); +#endif + break; + + case ATT_EVENT_CAN_SEND_NOW: + // add your code + break; + + case BTSTACK_EVENT_USER_MSG: + p_user_msg = hci_event_packet_get_user_msg(packet); + user_msg_handler(p_user_msg->msg_id, p_user_msg->data, p_user_msg->len); + break; + + default: + break; + } +} + +static void sm_packet_handler(uint8_t packet_type, uint16_t channel, const uint8_t *packet, uint16_t size) +{ + uint8_t event = hci_event_packet_get_type(packet); + + if (packet_type != HCI_EVENT_PACKET) return; + + switch (event) + { + case SM_EVENT_JUST_WORKS_REQUEST: + platform_printf("JUST_WORKS?\n"); + sm_bonding_decline(sm_event_just_works_request_get_handle(packet)); + break; + case SM_EVENT_IDENTITY_RESOLVING_SUCCEEDED: + break; + case SM_EVENT_PASSKEY_INPUT_NUMBER: + break; + case SM_EVENT_STATE_CHANGED: + { + const sm_event_state_changed_t *state_changed = decode_hci_event(packet, sm_event_state_changed_t); + switch (state_changed->reason) + { + case SM_STARTED: + platform_printf("SM: STARTED\n"); + break; + case SM_FINAL_PAIRED: + platform_printf("SM: PAIRED\n"); + break; + case SM_FINAL_REESTABLISHED: + platform_printf("SM: REESTABLISHED\n"); + break; + default: + platform_printf("SM: FINAL ERROR: %d\n", state_changed->reason); + break; + } + } + break; + default: + break; + } +} + +static btstack_packet_callback_registration_t sm_event_callback_registration = {.callback = &sm_packet_handler}; +static btstack_packet_callback_registration_t hci_event_callback_registration; + +static int get_oob_data_callback(uint8_t addres_type, bd_addr_t addr, uint8_t * oob_data) +{ + // random OOB data + const static sm_key_t _oob_data = { + 52, 29, 200, 119, 171, 76, 33, 1, 56, 153, 91, 155, 26, 42, 243, 57 + }; + platform_printf("get_oob\n"); + memcpy(oob_data, _oob_data, sizeof(_oob_data)); + return 1; +} + +uint32_t setup_profile(void *data, void *user_data) +{ + platform_printf("setup profile\n"); + sm_add_event_handler(&sm_event_callback_registration); +#if (ROLE == HCI_ROLE_SLAVE) + att_server_init(att_read_callback, att_write_callback); +#endif + hci_event_callback_registration.callback = &user_packet_handler; + hci_add_event_handler(&hci_event_callback_registration); + att_server_register_packet_handler(&user_packet_handler); + sm_config(1, IO_CAPABILITY_NO_INPUT_NO_OUTPUT, + 0, + &sm_persistent); + sm_set_authentication_requirements(SM_AUTHREQ_BONDING); + sm_register_oob_data_callback(get_oob_data_callback); + return 0; +} diff --git a/examples/pairing_with_oob/src/profile.c b/examples/pairing_with_oob/src/profile.c index 21260b0ce..4e03aabed 100644 --- a/examples/pairing_with_oob/src/profile.c +++ b/examples/pairing_with_oob/src/profile.c @@ -1,320 +1,5 @@ -#include -#include -#include "profile.h" -#include "platform_api.h" -#include "att_db.h" -#include "gap.h" -#include "btstack_event.h" -#include "btstack_defines.h" -#include "sm.h" -#include "gatt_client_util.h" - -#define SLAVE_ADDR {0xFA, 0x69, 0x77, 0xCC, 0xC2, 0x7E} - -#if (ROLE == HCI_ROLE_SLAVE) - -// GATT characteristic handles -#include "../data/gatt.const" - -const static uint8_t adv_data[] = { - #include "../data/advertising.adv" -}; - -#include "../data/advertising.const" - -const static uint8_t scan_data[] = { - #include "../data/scan_response.adv" -}; - -#include "../data/scan_response.const" - -const static uint8_t profile_data[] = { - #include "../data/gatt.profile" -}; - -const sm_persistent_t sm_persistent = -{ - .er = {9, 1, 8}, - .ir = {9, 1, 6}, - .identity_addr_type = BD_ADDR_TYPE_LE_RANDOM, - .identity_addr = SLAVE_ADDR -}; - -static uint16_t att_read_callback(hci_con_handle_t connection_handle, uint16_t att_handle, uint16_t offset, - uint8_t * buffer, uint16_t buffer_size) -{ - switch (att_handle) - { - case HANDLE_GENERIC_INPUT: - if (buffer) - { - // add your code - return buffer_size; - } - else - return 1; // TODO: return required buffer size - - default: - return 0; - } -} - -static int att_write_callback(hci_con_handle_t connection_handle, uint16_t att_handle, uint16_t transaction_mode, - uint16_t offset, const uint8_t *buffer, uint16_t buffer_size) -{ - switch (att_handle) - { - case HANDLE_GENERIC_INPUT: - // add your code - return 0; - - default: - return 0; - } -} - +#ifdef LE_SECURE_CONNECTION_PAIRING +#include "le_secure_pairing.c" #else - -const sm_persistent_t sm_persistent = -{ - .er = {9, 1, 8}, - .ir = {9, 1, 6}, - .identity_addr_type = BD_ADDR_TYPE_LE_RANDOM, - .identity_addr = {0xFA, 0x69, 0x77, 0xCC, 0xC2, 0x7F} -}; - -static const bd_addr_t peer_addr = SLAVE_ADDR; - -static struct gatt_client_discoverer *discoverer = NULL; - -#define iprintf platform_printf - -#include "gatt_client_util.c" - +#include "legacy_pairing.c" #endif - -static void user_msg_handler(uint32_t msg_id, void *data, uint16_t size) -{ - switch (msg_id) - { - // add your code - //case MY_MESSAGE_ID: - // break; - default: - ; - } -} - -#if (ROLE == HCI_ROLE_SLAVE) - -const static ext_adv_set_en_t adv_sets_en[] = { {.handle = 0, .duration = 0, .max_events = 0} }; - -static void setup_adv(void) -{ - gap_set_adv_set_random_addr(0, sm_persistent.identity_addr); - gap_set_ext_adv_para(0, - CONNECTABLE_ADV_BIT | SCANNABLE_ADV_BIT | LEGACY_PDU_BIT, - 0x00a1, 0x00a1, // Primary_Advertising_Interval_Min, Primary_Advertising_Interval_Max - PRIMARY_ADV_ALL_CHANNELS, // Primary_Advertising_Channel_Map - BD_ADDR_TYPE_LE_RANDOM, // Own_Address_Type - BD_ADDR_TYPE_LE_PUBLIC, // Peer_Address_Type (ignore) - NULL, // Peer_Address (ignore) - ADV_FILTER_ALLOW_ALL, // Advertising_Filter_Policy - 0x00, // Advertising_Tx_Power - PHY_1M, // Primary_Advertising_PHY - 0, // Secondary_Advertising_Max_Skip - PHY_1M, // Secondary_Advertising_PHY - 0x00, // Advertising_SID - 0x00); // Scan_Request_Notification_Enable - gap_set_ext_adv_data(0, sizeof(adv_data), (uint8_t*)adv_data); - gap_set_ext_scan_response_data(0, sizeof(scan_data), (uint8_t*)scan_data); - gap_set_ext_adv_enable(1, sizeof(adv_sets_en) / sizeof(adv_sets_en[0]), adv_sets_en); -} - -#else - -static initiating_phy_config_t phy_configs[] = -{ - { - .phy = PHY_1M, - .conn_param = - { - .scan_int = 200, - .scan_win = 180, - .interval_min = 50, - .interval_max = 50, - .latency = 0, - .supervision_timeout = 600, - .min_ce_len = 90, - .max_ce_len = 90 - } - } -}; - -static void setup_initiating(void) -{ - gap_set_random_device_address(sm_persistent.identity_addr); - gap_ext_create_connection(INITIATING_ADVERTISER_FROM_PARAM, // Initiator_Filter_Policy, - BD_ADDR_TYPE_LE_RANDOM, // Own_Address_Type, - BD_ADDR_TYPE_LE_RANDOM, // Peer_Address_Type, - peer_addr, // Peer_Address, - sizeof(phy_configs) / sizeof(phy_configs[0]), - phy_configs); -} -#endif - -static void user_packet_handler(uint8_t packet_type, uint16_t channel, const uint8_t *packet, uint16_t size) -{ - uint8_t event = hci_event_packet_get_type(packet); - const btstack_user_msg_t *p_user_msg; - if (packet_type != HCI_EVENT_PACKET) return; - - switch (event) - { - case BTSTACK_EVENT_STATE: - if (btstack_event_state_get_state(packet) != HCI_STATE_WORKING) - break; -#if (ROLE == HCI_ROLE_SLAVE) - setup_adv(); -#else - setup_initiating(); -#endif - break; - - case HCI_EVENT_COMMAND_COMPLETE: - switch (hci_event_command_complete_get_command_opcode(packet)) - { - // add your code to check command complete response - // case : - // break; - default: - break; - } - break; - - case HCI_EVENT_LE_META: - switch (hci_event_le_meta_get_subevent_code(packet)) - { - case HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE: - { - const le_meta_event_enh_create_conn_complete_t *complete = - decode_hci_le_meta_event(packet, le_meta_event_enh_create_conn_complete_t); - platform_printf("connected: %d\n", complete->status); -#if (ROLE == HCI_ROLE_SLAVE) - att_set_db(complete->handle, profile_data); - sm_request_pairing(complete->handle); -#else - if (complete->status == 0) - { - if (discoverer) gatt_client_util_free(discoverer); - discoverer = gatt_client_util_discover_all(complete->handle, - gatt_client_util_dump_profile, - NULL); - } - else - { - setup_initiating(); - } -#endif - } - break; - default: - break; - } - - break; - - case HCI_EVENT_DISCONNECTION_COMPLETE: -#if (ROLE == HCI_ROLE_SLAVE) - gap_set_ext_adv_enable(1, sizeof(adv_sets_en) / sizeof(adv_sets_en[0]), adv_sets_en); -#else - setup_initiating(); -#endif - break; - - case ATT_EVENT_CAN_SEND_NOW: - // add your code - break; - - case BTSTACK_EVENT_USER_MSG: - p_user_msg = hci_event_packet_get_user_msg(packet); - user_msg_handler(p_user_msg->msg_id, p_user_msg->data, p_user_msg->len); - break; - - default: - break; - } -} - -static void sm_packet_handler(uint8_t packet_type, uint16_t channel, const uint8_t *packet, uint16_t size) -{ - uint8_t event = hci_event_packet_get_type(packet); - - if (packet_type != HCI_EVENT_PACKET) return; - - switch (event) - { - case SM_EVENT_JUST_WORKS_REQUEST: - platform_printf("JUST_WORKS?\n"); - sm_bonding_decline(sm_event_just_works_request_get_handle(packet)); - break; - case SM_EVENT_IDENTITY_RESOLVING_SUCCEEDED: - break; - case SM_EVENT_PASSKEY_INPUT_NUMBER: - break; - case SM_EVENT_STATE_CHANGED: - { - const sm_event_state_changed_t *state_changed = decode_hci_event(packet, sm_event_state_changed_t); - switch (state_changed->reason) - { - case SM_STARTED: - platform_printf("SM: STARTED\n"); - break; - case SM_FINAL_PAIRED: - platform_printf("SM: PAIRED\n"); - break; - case SM_FINAL_REESTABLISHED: - platform_printf("SM: REESTABLISHED\n"); - break; - default: - platform_printf("SM: FINAL ERROR: %d\n", state_changed->reason); - break; - } - } - break; - default: - break; - } -} - -static btstack_packet_callback_registration_t sm_event_callback_registration = {.callback = &sm_packet_handler}; -static btstack_packet_callback_registration_t hci_event_callback_registration; - -static int get_oob_data_callback(uint8_t addres_type, bd_addr_t addr, uint8_t * oob_data) -{ - // random OOB data - const static sm_key_t _oob_data = { - 52, 29, 200, 119, 171, 76, 33, 1, 56, 153, 91, 155, 26, 42, 243, 57 - }; - platform_printf("get_oob\n"); - memcpy(oob_data, _oob_data, sizeof(_oob_data)); - return 1; -} - -uint32_t setup_profile(void *data, void *user_data) -{ - platform_printf("setup profile\n"); - sm_add_event_handler(&sm_event_callback_registration); -#if (ROLE == HCI_ROLE_SLAVE) - att_server_init(att_read_callback, att_write_callback); -#endif - hci_event_callback_registration.callback = &user_packet_handler; - hci_add_event_handler(&hci_event_callback_registration); - att_server_register_packet_handler(&user_packet_handler); - sm_config(1, IO_CAPABILITY_NO_INPUT_NO_OUTPUT, - 0, - &sm_persistent); - sm_set_authentication_requirements(SM_AUTHREQ_BONDING); - sm_register_oob_data_callback(get_oob_data_callback); - return 0; -} diff --git a/examples/pawr/flash_download.ini b/examples/pawr/flash_download.ini index a7ebf6322..10b8cbd19 100644 --- a/examples/pawr/flash_download.ini +++ b/examples/pawr/flash_download.ini @@ -28,14 +28,14 @@ Timeout=10000 [bin-0] Name=Burn Bin #1 -Checked=0 +Checked=1 FileName=../../bundles/exp/ING9168xx/platform.bin Address=33562624 [bin-1] Name=Burn Bin #2 Checked=1 -Address=33738752 +Address=33742848 FileName=pawr.bin [bin-2] diff --git a/examples/pawr/pawr.ingw b/examples/pawr/pawr.ingw index 5e9444e09..8a234dd00 100644 --- a/examples/pawr/pawr.ingw +++ b/examples/pawr/pawr.ingw @@ -1,19 +1,25 @@ { "watchdog": true, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "ff79ff07fe000000", + "addr": 33732656 + } + }, "rom": { - "size": 173864, + "size": 178628, "base": 33562624 }, "ram": { - "size": 21828, + "size": 21636, "base": 536870912 }, "app": { - "base": 33738752 + "base": 33742848 }, "version": [ - 2,3,1] + 2,3,16] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -54,8 +60,8 @@ "power_saving": false, "secondary": false, "bundle": "exp", - "app_rom_size": "339968", - "app_rom_addr": "33738752", + "app_rom_size": "335872", + "app_rom_addr": "33742848", "family": "ing916", "vcode": false, "heap_override": false, @@ -72,8 +78,8 @@ "keil": true, "cmsis": "", "cube": true, - "app_ram_size": 10936, - "app_ram_addr": 536892744, + "app_ram_size": 11128, + "app_ram_addr": 536892552, "k5_cc_ver": "6", "printf_enable": true, "ota_ver_patch": "0", diff --git a/examples/pawr/pawr.uvproj b/examples/pawr/pawr.uvproj index 223807b1b..be5872032 100644 --- a/examples/pawr/pawr.uvproj +++ b/examples/pawr/pawr.uvproj @@ -294,8 +294,8 @@ 1 - 33738752 - 339968 + 33742848 + 335872 1 @@ -319,8 +319,8 @@ 0 - 536892744 - 10936 + 536892552 + 11128 0 diff --git a/examples/pawr/pawr.uvprojx b/examples/pawr/pawr.uvprojx index b8e233db2..159114c4d 100644 --- a/examples/pawr/pawr.uvprojx +++ b/examples/pawr/pawr.uvprojx @@ -273,8 +273,8 @@ 1 - 33738752 - 339968 + 33742848 + 335872 1 @@ -298,8 +298,8 @@ 0 - 536892744 - 10936 + 536892552 + 11128 0 diff --git a/examples/periodic_advertiser/periodic_advertiser.ingw b/examples/periodic_advertiser/periodic_advertiser.ingw index fbdf217d6..82a426c9d 100644 --- a/examples/periodic_advertiser/periodic_advertiser.ingw +++ b/examples/periodic_advertiser/periodic_advertiser.ingw @@ -1,19 +1,25 @@ { "watchdog": false, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9ff0700000000", + "addr": 154364 + } + }, "rom": { - "size": 141844, + "size": 142212, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 163840 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -58,8 +64,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples/periodic_advertiser/periodic_advertiser.uvproj b/examples/periodic_advertiser/periodic_advertiser.uvproj index 61125be7d..d9f5c20d0 100644 --- a/examples/periodic_advertiser/periodic_advertiser.uvproj +++ b/examples/periodic_advertiser/periodic_advertiser.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/periodic_advertiser/periodic_advertiser.uvprojx b/examples/periodic_advertiser/periodic_advertiser.uvprojx index 84d56c910..4106aa9df 100644 --- a/examples/periodic_advertiser/periodic_advertiser.uvprojx +++ b/examples/periodic_advertiser/periodic_advertiser.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/periodic_advertiser/src/startup_ing91800.s b/examples/periodic_advertiser/src/startup_ing91800.s index 7e44b2c58..53907e41a 100644 --- a/examples/periodic_advertiser/src/startup_ing91800.s +++ b/examples/periodic_advertiser/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/periodic_scanner/periodic_scanner.ingw b/examples/periodic_scanner/periodic_scanner.ingw index c9f60a761..369ea1b8c 100644 --- a/examples/periodic_scanner/periodic_scanner.ingw +++ b/examples/periodic_scanner/periodic_scanner.ingw @@ -1,19 +1,25 @@ { "watchdog": false, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9ff0700000000", + "addr": 154364 + } + }, "rom": { - "size": 141844, + "size": 142212, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 163840 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -58,8 +64,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples/periodic_scanner/periodic_scanner.uvproj b/examples/periodic_scanner/periodic_scanner.uvproj index aea0c48af..749a0eefd 100644 --- a/examples/periodic_scanner/periodic_scanner.uvproj +++ b/examples/periodic_scanner/periodic_scanner.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/periodic_scanner/periodic_scanner.uvprojx b/examples/periodic_scanner/periodic_scanner.uvprojx index 1e8788897..ddafcfc52 100644 --- a/examples/periodic_scanner/periodic_scanner.uvprojx +++ b/examples/periodic_scanner/periodic_scanner.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/periodic_scanner/src/startup_ing91800.s b/examples/periodic_scanner/src/startup_ing91800.s index 7e44b2c58..53907e41a 100644 --- a/examples/periodic_scanner/src/startup_ing91800.s +++ b/examples/periodic_scanner/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/peripheral_ancs/peripheral_ancs.ingw b/examples/peripheral_ancs/peripheral_ancs.ingw index f863db9cc..7e45e060c 100644 --- a/examples/peripheral_ancs/peripheral_ancs.ingw +++ b/examples/peripheral_ancs/peripheral_ancs.ingw @@ -1,19 +1,25 @@ { "watchdog": false, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -59,8 +65,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples/peripheral_ancs/peripheral_ancs.uvproj b/examples/peripheral_ancs/peripheral_ancs.uvproj index b1c579f5f..cf237a927 100644 --- a/examples/peripheral_ancs/peripheral_ancs.uvproj +++ b/examples/peripheral_ancs/peripheral_ancs.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/peripheral_ancs/peripheral_ancs.uvprojx b/examples/peripheral_ancs/peripheral_ancs.uvprojx index 5d0b4b0b7..c6e050af2 100644 --- a/examples/peripheral_ancs/peripheral_ancs.uvprojx +++ b/examples/peripheral_ancs/peripheral_ancs.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/peripheral_ancs/src/startup_ing91800.s b/examples/peripheral_ancs/src/startup_ing91800.s index 7e44b2c58..53907e41a 100644 --- a/examples/peripheral_ancs/src/startup_ing91800.s +++ b/examples/peripheral_ancs/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/peripheral_band/peripheral_band.ingw b/examples/peripheral_band/peripheral_band.ingw index 5dbe951ba..81e80cd12 100644 --- a/examples/peripheral_band/peripheral_band.ingw +++ b/examples/peripheral_band/peripheral_band.ingw @@ -1,18 +1,24 @@ { "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "ide_ver": "5", @@ -53,8 +59,8 @@ "keil": true, "cmsis": "", "gatt_handle_name": "HANDLE_RSC_FEATURE", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "0", "profile_data": "\/\/ Service Generic Access: 1800\r\n0x0A, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x28,\r\n0x00, 0x18, \r\n\/\/ Characteristic Device Name: 2A00\r\n0x0D, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x28,\r\n0x02, 0x03, 0x00, 0x00, 0x2A, \r\n0x10, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x2A,\r\n0x49, 0x4E, 0x47, 0x20, 0x42, 0x61, 0x6E, 0x64, \r\n\r\n\/\/ Service Heart Rate: 180D\r\n0x0A, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x28,\r\n0x0D, 0x18, \r\n\/\/ Characteristic Heart Rate Measurement: 2A37\r\n0x0D, 0x00, 0x02, 0x00, 0x05, 0x00, 0x03, 0x28,\r\n0x10, 0x06, 0x00, 0x37, 0x2A, \r\n0x08, 0x00, 0x10, 0x00, 0x06, 0x00, 0x37, 0x2A,\r\n0x0A, 0x00, 0x0A, 0x01, 0x07, 0x00, 0x02, 0x29,\r\n0x00, 0x00, \r\n\r\n\/\/ Service Running Speed and Cadence: 1814\r\n0x0A, 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x28,\r\n0x14, 0x18, \r\n\/\/ Characteristic RSC Measurement: 2A53\r\n0x0D, 0x00, 0x02, 0x00, 0x09, 0x00, 0x03, 0x28,\r\n0x10, 0x0A, 0x00, 0x53, 0x2A, \r\n0x08, 0x00, 0x10, 0x00, 0x0A, 0x00, 0x53, 0x2A,\r\n0x0A, 0x00, 0x0A, 0x01, 0x0B, 0x00, 0x02, 0x29,\r\n0x00, 0x00, \r\n\/\/ Characteristic RSC Feature: 2A54\r\n0x0D, 0x00, 0x02, 0x00, 0x0C, 0x00, 0x03, 0x28,\r\n0x02, 0x0D, 0x00, 0x54, 0x2A, \r\n0x08, 0x00, 0x02, 0x00, 0x0D, 0x00, 0x54, 0x2A,\r\n\r\n0x00,0x00\r\n\/\/ total size = 144\r\n\r\n\/\/ HANDLE_DEVICE_NAME=3\r\n\/\/ HANDLE_HEART_RATE_MEASUREMENT=6\r\n\/\/ HANDLE_RSC_MEASUREMENT=10\r\n\/\/ HANDLE_RSC_FEATURE=13\r\n\r\n\/\/ HANDLE_DEVICE_NAME_OFFSET=31\r\n\/\/ HANDLE_HEART_RATE_MEASUREMENT_OFFSET=70\r\n\/\/ HANDLE_RSC_MEASUREMENT_OFFSET=111\r\n\/\/ HANDLE_RSC_FEATURE_OFFSET=142\r\n", diff --git a/examples/peripheral_band/peripheral_band.uvproj b/examples/peripheral_band/peripheral_band.uvproj index 427ecfe63..640a9ce2e 100644 --- a/examples/peripheral_band/peripheral_band.uvproj +++ b/examples/peripheral_band/peripheral_band.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/peripheral_band/peripheral_band.uvprojx b/examples/peripheral_band/peripheral_band.uvprojx index b23240e8a..65994183c 100644 --- a/examples/peripheral_band/peripheral_band.uvprojx +++ b/examples/peripheral_band/peripheral_band.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/peripheral_band/src/startup_ing91800.s b/examples/peripheral_band/src/startup_ing91800.s index 7e44b2c58..53907e41a 100644 --- a/examples/peripheral_band/src/startup_ing91800.s +++ b/examples/peripheral_band/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/peripheral_battery/peripheral_battery.ingw b/examples/peripheral_battery/peripheral_battery.ingw index 44ba04c14..5319585da 100644 --- a/examples/peripheral_battery/peripheral_battery.ingw +++ b/examples/peripheral_battery/peripheral_battery.ingw @@ -1,18 +1,24 @@ { "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "ide_ver": "5", @@ -48,8 +54,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n" diff --git a/examples/peripheral_battery/peripheral_battery.uvproj b/examples/peripheral_battery/peripheral_battery.uvproj index 73070d2c7..6078a0999 100644 --- a/examples/peripheral_battery/peripheral_battery.uvproj +++ b/examples/peripheral_battery/peripheral_battery.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/peripheral_battery/peripheral_battery.uvprojx b/examples/peripheral_battery/peripheral_battery.uvprojx index d3081d7e6..e898361d9 100644 --- a/examples/peripheral_battery/peripheral_battery.uvprojx +++ b/examples/peripheral_battery/peripheral_battery.uvprojx @@ -298,8 +298,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/peripheral_battery/src/startup_ing91800.s b/examples/peripheral_battery/src/startup_ing91800.s index 7e44b2c58..53907e41a 100644 --- a/examples/peripheral_battery/src/startup_ing91800.s +++ b/examples/peripheral_battery/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/peripheral_console/peripheral_console.ingw b/examples/peripheral_console/peripheral_console.ingw index bbf1d33b5..a7c9190c6 100644 --- a/examples/peripheral_console/peripheral_console.ingw +++ b/examples/peripheral_console/peripheral_console.ingw @@ -1,18 +1,24 @@ { "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148180 + } + }, "rom": { - "size": 135328, + "size": 135676, "base": 16384 }, "ram": { - "size": 13700, + "size": 13636, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "ide_ver": "5", @@ -53,8 +59,8 @@ "keil": true, "cmsis": "", "gatt_handle_name": "HANDLE_GENERIC_INPUT", - "app_ram_size": 51832, - "app_ram_addr": 536884616, + "app_ram_size": 51896, + "app_ram_addr": 536884552, "uart_log": true, "ota_ver_patch": "0", "profile_data": "\/\/ Service Generic Access: 1800\r\n0x0A, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x28,\r\n0x00, 0x18, \r\n\/\/ Characteristic Device Name: 2A00\r\n0x0D, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x28,\r\n0x02, 0x03, 0x00, 0x00, 0x2A, \r\n0x0F, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x2A,\r\n0x49, 0x4E, 0x47, 0x20, 0x43, 0x6D, 0x64, \r\n\r\n\/\/ Service INGChips Generic I\/O Service: {43f4b114-ca67-48e8-a46f-9a8ffeb7146a}\r\n0x18, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x28,\r\n0x6A, 0x14, 0xB7, 0xFE, 0x8F, 0x9A, 0x6F, 0xA4, \r\n0xE8, 0x48, 0x67, 0xCA, 0x14, 0xB1, 0xF4, 0x43, \r\n\/\/ Characteristic Generic Input: {bf83f3f1-399a-414d-9035-ce64ceb3ff67}\r\n0x1B, 0x00, 0x02, 0x00, 0x05, 0x00, 0x03, 0x28,\r\n0x04, 0x06, 0x00, 0x67, 0xFF, 0xB3, 0xCE, 0x64, \r\n0xCE, 0x35, 0x90, 0x4D, 0x41, 0x9A, 0x39, 0xF1, \r\n0xF3, 0x83, 0xBF, \r\n0x16, 0x00, 0x04, 0x03, 0x06, 0x00,\r\n0x67, 0xFF, 0xB3, 0xCE, 0x64, 0xCE, 0x35, 0x90, \r\n0x4D, 0x41, 0x9A, 0x39, 0xF1, 0xF3, 0x83, 0xBF, \r\n\/\/ Characteristic Generic Output: {bf83f3f2-399a-414d-9035-ce64ceb3ff67}\r\n0x1B, 0x00, 0x02, 0x00, 0x07, 0x00, 0x03, 0x28,\r\n0x10, 0x08, 0x00, 0x67, 0xFF, 0xB3, 0xCE, 0x64, \r\n0xCE, 0x35, 0x90, 0x4D, 0x41, 0x9A, 0x39, 0xF2, \r\n0xF3, 0x83, 0xBF, \r\n0x16, 0x00, 0x10, 0x02, 0x08, 0x00,\r\n0x67, 0xFF, 0xB3, 0xCE, 0x64, 0xCE, 0x35, 0x90, \r\n0x4D, 0x41, 0x9A, 0x39, 0xF2, 0xF3, 0x83, 0xBF, \r\n0x0A, 0x00, 0x0A, 0x01, 0x09, 0x00, 0x02, 0x29,\r\n0x00, 0x00, \r\n\r\n0x00,0x00\r\n\/\/ total size = 172\r\n\r\n\/\/ HANDLE_DEVICE_NAME=3\r\n\/\/ HANDLE_GENERIC_INPUT=6\r\n\/\/ HANDLE_GENERIC_OUTPUT=8\r\n\r\n\/\/ HANDLE_DEVICE_NAME_OFFSET=31\r\n\/\/ HANDLE_GENERIC_INPUT_OFFSET=111\r\n\/\/ HANDLE_GENERIC_OUTPUT_OFFSET=160\r\n", diff --git a/examples/peripheral_console/peripheral_console.uvproj b/examples/peripheral_console/peripheral_console.uvproj index e195afda8..624e01e3d 100644 --- a/examples/peripheral_console/peripheral_console.uvproj +++ b/examples/peripheral_console/peripheral_console.uvproj @@ -319,8 +319,8 @@ 0 - 536884616 - 51832 + 536884552 + 51896 0 diff --git a/examples/peripheral_console/peripheral_console.uvprojx b/examples/peripheral_console/peripheral_console.uvprojx index 761293bab..19e2f2dce 100644 --- a/examples/peripheral_console/peripheral_console.uvprojx +++ b/examples/peripheral_console/peripheral_console.uvprojx @@ -298,8 +298,8 @@ 0 - 536884616 - 51832 + 536884552 + 51896 0 diff --git a/examples/peripheral_console/src/key_detector.h b/examples/peripheral_console/src/key_detector.h index fcb6fdfdb..832813f28 100644 --- a/examples/peripheral_console/src/key_detector.h +++ b/examples/peripheral_console/src/key_detector.h @@ -4,7 +4,12 @@ #include "peripheral_gpio.h" #ifndef KEY_PIN + +#if (INGCHIPS_FAMILY == INGCHIPS_FAMILY_916) #define KEY_PIN GIO_GPIO_9 +#elif (INGCHIPS_FAMILY == INGCHIPS_FAMILY_918) +#define KEY_PIN GIO_GPIO_4 +#endif #endif #ifndef VALUE_PRESSED diff --git a/examples/peripheral_console/src/startup_ing91800.s b/examples/peripheral_console/src/startup_ing91800.s index 7e44b2c58..53907e41a 100644 --- a/examples/peripheral_console/src/startup_ing91800.s +++ b/examples/peripheral_console/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/peripheral_console_freertos/peripheral_console_freertos.ingw b/examples/peripheral_console_freertos/peripheral_console_freertos.ingw index 269c6ec26..a7b223c2d 100644 --- a/examples/peripheral_console_freertos/peripheral_console_freertos.ingw +++ b/examples/peripheral_console_freertos/peripheral_console_freertos.ingw @@ -1,19 +1,25 @@ { "watchdog": false, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 137888 + } + }, "rom": { - "size": 125016, + "size": 125388, "base": 16384 }, "ram": { - "size": 3372, + "size": 3308, "base": 536870912 }, "app": { "base": 147456 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -69,8 +75,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 62160, - "app_ram_addr": 536874288, + "app_ram_size": 62224, + "app_ram_addr": 536874224, "k5_cc_ver": "6", "printf_enable": true, "ota_ver_patch": "0", diff --git a/examples/peripheral_console_freertos/peripheral_console_freertos.uvproj b/examples/peripheral_console_freertos/peripheral_console_freertos.uvproj index 168332f5e..215f701e8 100644 --- a/examples/peripheral_console_freertos/peripheral_console_freertos.uvproj +++ b/examples/peripheral_console_freertos/peripheral_console_freertos.uvproj @@ -319,8 +319,8 @@ 0 - 536874288 - 62160 + 536874224 + 62224 0 diff --git a/examples/peripheral_console_freertos/peripheral_console_freertos.uvprojx b/examples/peripheral_console_freertos/peripheral_console_freertos.uvprojx index 96eadb6f4..779d727fc 100644 --- a/examples/peripheral_console_freertos/peripheral_console_freertos.uvprojx +++ b/examples/peripheral_console_freertos/peripheral_console_freertos.uvprojx @@ -298,8 +298,8 @@ 0 - 536874288 - 62160 + 536874224 + 62224 0 diff --git a/examples/peripheral_console_freertos/src/startup_ing91800.s b/examples/peripheral_console_freertos/src/startup_ing91800.s index 18fdf1934..9014f389f 100644 --- a/examples/peripheral_console_freertos/src/startup_ing91800.s +++ b/examples/peripheral_console_freertos/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/peripheral_console_realtime/flash_download.ini b/examples/peripheral_console_realtime/flash_download.ini index fa93ce73e..cd0bfc0db 100644 --- a/examples/peripheral_console_realtime/flash_download.ini +++ b/examples/peripheral_console_realtime/flash_download.ini @@ -38,7 +38,7 @@ Address=33562624 [bin-1] Name=Burn Bin #2 Checked=1 -Address=33710080 +Address=33714176 FileName=peripheral_console_realtime.bin [bin-2] diff --git a/examples/peripheral_console_realtime/peripheral_console_realtime.ingw b/examples/peripheral_console_realtime/peripheral_console_realtime.ingw index 5fc2276e4..a688fe9f1 100644 --- a/examples/peripheral_console_realtime/peripheral_console_realtime.ingw +++ b/examples/peripheral_console_realtime/peripheral_console_realtime.ingw @@ -1,19 +1,25 @@ { "watchdog": false, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "bf79ff07fe000000", + "addr": 33689476 + } + }, "rom": { - "size": 144904, + "size": 149224, "base": 33562624 }, "ram": { - "size": 17116, + "size": 17108, "base": 536870912 }, "app": { - "base": 33710080 + "base": 33714176 }, "version": [ - 2,3,1] + 2,3,16] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -53,8 +59,8 @@ "power_saving": false, "secondary": false, "bundle": "noos_mini", - "app_rom_size": "368640", - "app_rom_addr": "33710080", + "app_rom_size": "364544", + "app_rom_addr": "33714176", "family": "ing916", "vcode": true, "heap_override": false, @@ -70,8 +76,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 40224, - "app_ram_addr": 536888032, + "app_ram_size": 40232, + "app_ram_addr": 536888024, "k5_cc_ver": "6", "printf_enable": true, "ota_ver_patch": "0", diff --git a/examples/peripheral_console_realtime/peripheral_console_realtime.sct b/examples/peripheral_console_realtime/peripheral_console_realtime.sct index 349954462..a38297e45 100644 --- a/examples/peripheral_console_realtime/peripheral_console_realtime.sct +++ b/examples/peripheral_console_realtime/peripheral_console_realtime.sct @@ -2,14 +2,14 @@ ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* -LR_IROM1 0x02026000 0x0005A000 { ; load region size_region - ER_IROM1 0x02026000 0x0005A000 { ; load address = execution address +LR_IROM1 0x02027000 0x00059000 { ; load region size_region + ER_IROM1 0x02027000 0x00059000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) .ANY (+XO) } -RW_IRAM1 0x200042E0 0x00009D20 { ; RW data +RW_IRAM1 0x200042D8 0x00009D28 { ; RW data *(.ram_code) *(Veneer$$Code) .ANY (+RW +ZI) diff --git a/examples/peripheral_console_realtime/peripheral_console_realtime.uvproj b/examples/peripheral_console_realtime/peripheral_console_realtime.uvproj index 4821d7f38..4672463d2 100644 --- a/examples/peripheral_console_realtime/peripheral_console_realtime.uvproj +++ b/examples/peripheral_console_realtime/peripheral_console_realtime.uvproj @@ -294,8 +294,8 @@ 1 - 33710080 - 368640 + 33714176 + 364544 1 @@ -319,8 +319,8 @@ 0 - 536888032 - 40224 + 536888024 + 40232 0 diff --git a/examples/peripheral_console_realtime/peripheral_console_realtime.uvprojx b/examples/peripheral_console_realtime/peripheral_console_realtime.uvprojx index 17a4c4c1d..8f0bcf944 100644 --- a/examples/peripheral_console_realtime/peripheral_console_realtime.uvprojx +++ b/examples/peripheral_console_realtime/peripheral_console_realtime.uvprojx @@ -273,8 +273,8 @@ 1 - 33710080 - 368640 + 33714176 + 364544 1 @@ -298,8 +298,8 @@ 0 - 536888032 - 40224 + 536888024 + 40232 0 diff --git a/examples/peripheral_console_realtime/src/startup_ing91600.s b/examples/peripheral_console_realtime/src/startup_ing91600.s index 1d1402f07..71c57901e 100644 --- a/examples/peripheral_console_realtime/src/startup_ing91600.s +++ b/examples/peripheral_console_realtime/src/startup_ing91600.s @@ -71,6 +71,10 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 @@ -85,6 +89,10 @@ main PROC LDR R0, =app_main BLX R0 + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP diff --git a/examples/peripheral_console_rt-thread/peripheral_console_rt-thread.ingw b/examples/peripheral_console_rt-thread/peripheral_console_rt-thread.ingw index e3c239cc5..481c62e6c 100644 --- a/examples/peripheral_console_rt-thread/peripheral_console_rt-thread.ingw +++ b/examples/peripheral_console_rt-thread/peripheral_console_rt-thread.ingw @@ -1,19 +1,25 @@ { "watchdog": false, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 137888 + } + }, "rom": { - "size": 125016, + "size": 125388, "base": 16384 }, "ram": { - "size": 3372, + "size": 3308, "base": 536870912 }, "app": { "base": 147456 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -69,8 +75,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 62160, - "app_ram_addr": 536874288, + "app_ram_size": 62224, + "app_ram_addr": 536874224, "k5_cc_ver": "6", "printf_enable": true, "ota_ver_patch": "0", diff --git a/examples/peripheral_console_rt-thread/peripheral_console_rt-thread.uvproj b/examples/peripheral_console_rt-thread/peripheral_console_rt-thread.uvproj index 92e290912..e639fa175 100644 --- a/examples/peripheral_console_rt-thread/peripheral_console_rt-thread.uvproj +++ b/examples/peripheral_console_rt-thread/peripheral_console_rt-thread.uvproj @@ -319,8 +319,8 @@ 0 - 536874288 - 62160 + 536874224 + 62224 0 diff --git a/examples/peripheral_console_rt-thread/peripheral_console_rt-thread.uvprojx b/examples/peripheral_console_rt-thread/peripheral_console_rt-thread.uvprojx index 639bb66b9..bf49e9591 100644 --- a/examples/peripheral_console_rt-thread/peripheral_console_rt-thread.uvprojx +++ b/examples/peripheral_console_rt-thread/peripheral_console_rt-thread.uvprojx @@ -298,8 +298,8 @@ 0 - 536874288 - 62160 + 536874224 + 62224 0 diff --git a/examples/peripheral_console_rt-thread/src/startup_ing91800.s b/examples/peripheral_console_rt-thread/src/startup_ing91800.s index 18fdf1934..9014f389f 100644 --- a/examples/peripheral_console_rt-thread/src/startup_ing91800.s +++ b/examples/peripheral_console_rt-thread/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/peripheral_etag/peripheral_etag.ingw b/examples/peripheral_etag/peripheral_etag.ingw index fb636cb36..f03adc8b1 100644 --- a/examples/peripheral_etag/peripheral_etag.ingw +++ b/examples/peripheral_etag/peripheral_etag.ingw @@ -1,18 +1,24 @@ { "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "ide_ver": "5", @@ -52,8 +58,8 @@ "keil": true, "cmsis": "", "gatt_handle_name": "HANDLE_ETAG_DATA", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "0", "profile_data": "\/\/ Service Generic Access: 1800\r\n0x0A, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x28,\r\n0x00, 0x18, \r\n\/\/ Characteristic Device Name: 2A00\r\n0x0D, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x28,\r\n0x02, 0x03, 0x00, 0x00, 0x2A, \r\n0x10, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x2A,\r\n0x49, 0x4E, 0x47, 0x20, 0x65, 0x54, 0x61, 0x67, \r\n\r\n\/\/ Service INGChips eTag Service: {1145c2f0-6f36-45c5-8541-92f56728d5f3}\r\n0x18, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x28,\r\n0xF3, 0xD5, 0x28, 0x67, 0xF5, 0x92, 0x41, 0x85, \r\n0xC5, 0x45, 0x36, 0x6F, 0xF0, 0xC2, 0x45, 0x11, \r\n\/\/ Characteristic eTag Control: {1145c2f2-6f36-45c5-8541-92f56728d5f3}\r\n0x1B, 0x00, 0x02, 0x00, 0x05, 0x00, 0x03, 0x28,\r\n0x06, 0x06, 0x00, 0xF3, 0xD5, 0x28, 0x67, 0xF5, \r\n0x92, 0x41, 0x85, 0xC5, 0x45, 0x36, 0x6F, 0xF2, \r\n0xC2, 0x45, 0x11, \r\n0x17, 0x00, 0x06, 0x03, 0x06, 0x00,\r\n0xF3, 0xD5, 0x28, 0x67, 0xF5, 0x92, 0x41, 0x85, \r\n0xC5, 0x45, 0x36, 0x6F, 0xF2, 0xC2, 0x45, 0x11, \r\n0x00, \r\n\/\/ Characteristic eTag Data: {1145c2f3-6f36-45c5-8541-92f56728d5f3}\r\n0x1B, 0x00, 0x02, 0x00, 0x07, 0x00, 0x03, 0x28,\r\n0x04, 0x08, 0x00, 0xF3, 0xD5, 0x28, 0x67, 0xF5, \r\n0x92, 0x41, 0x85, 0xC5, 0x45, 0x36, 0x6F, 0xF3, \r\n0xC2, 0x45, 0x11, \r\n0x16, 0x00, 0x04, 0x03, 0x08, 0x00,\r\n0xF3, 0xD5, 0x28, 0x67, 0xF5, 0x92, 0x41, 0x85, \r\n0xC5, 0x45, 0x36, 0x6F, 0xF3, 0xC2, 0x45, 0x11, \r\n\r\n0x00,0x00\r\n\/\/ total size = 164\r\n\r\n\/\/ HANDLE_DEVICE_NAME=3\r\n\/\/ HANDLE_ETAG_CONTROL=6\r\n\/\/ HANDLE_ETAG_DATA=8\r\n", diff --git a/examples/peripheral_etag/peripheral_etag.uvproj b/examples/peripheral_etag/peripheral_etag.uvproj index ebb7003a2..8454ce28b 100644 --- a/examples/peripheral_etag/peripheral_etag.uvproj +++ b/examples/peripheral_etag/peripheral_etag.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/peripheral_etag/peripheral_etag.uvprojx b/examples/peripheral_etag/peripheral_etag.uvprojx index c29e4c79b..8b2565561 100644 --- a/examples/peripheral_etag/peripheral_etag.uvprojx +++ b/examples/peripheral_etag/peripheral_etag.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/peripheral_etag/src/startup_ing91800.s b/examples/peripheral_etag/src/startup_ing91800.s index 7e44b2c58..53907e41a 100644 --- a/examples/peripheral_etag/src/startup_ing91800.s +++ b/examples/peripheral_etag/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/peripheral_ibeacon/peripheral_ibeacon.ingw b/examples/peripheral_ibeacon/peripheral_ibeacon.ingw index 0bfd31779..29448cb4c 100644 --- a/examples/peripheral_ibeacon/peripheral_ibeacon.ingw +++ b/examples/peripheral_ibeacon/peripheral_ibeacon.ingw @@ -1,18 +1,24 @@ { "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "ide_ver": "5", @@ -50,8 +56,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples/peripheral_ibeacon/peripheral_ibeacon.uvproj b/examples/peripheral_ibeacon/peripheral_ibeacon.uvproj index ef6064fe0..e0ac991f5 100644 --- a/examples/peripheral_ibeacon/peripheral_ibeacon.uvproj +++ b/examples/peripheral_ibeacon/peripheral_ibeacon.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/peripheral_ibeacon/peripheral_ibeacon.uvprojx b/examples/peripheral_ibeacon/peripheral_ibeacon.uvprojx index c798a6b4e..d545de58b 100644 --- a/examples/peripheral_ibeacon/peripheral_ibeacon.uvprojx +++ b/examples/peripheral_ibeacon/peripheral_ibeacon.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/peripheral_ibeacon/src/startup_ing91800.s b/examples/peripheral_ibeacon/src/startup_ing91800.s index 7e44b2c58..53907e41a 100644 --- a/examples/peripheral_ibeacon/src/startup_ing91800.s +++ b/examples/peripheral_ibeacon/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/peripheral_irc/peripheral_irc.ingw b/examples/peripheral_irc/peripheral_irc.ingw index ced9ebd54..ac20b6c2e 100644 --- a/examples/peripheral_irc/peripheral_irc.ingw +++ b/examples/peripheral_irc/peripheral_irc.ingw @@ -1,19 +1,25 @@ { "watchdog": false, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -58,8 +64,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples/peripheral_irc/peripheral_irc.uvproj b/examples/peripheral_irc/peripheral_irc.uvproj index c253867dd..9b3f1a663 100644 --- a/examples/peripheral_irc/peripheral_irc.uvproj +++ b/examples/peripheral_irc/peripheral_irc.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/peripheral_irc/peripheral_irc.uvprojx b/examples/peripheral_irc/peripheral_irc.uvprojx index a478b98d3..cfca87820 100644 --- a/examples/peripheral_irc/peripheral_irc.uvprojx +++ b/examples/peripheral_irc/peripheral_irc.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/peripheral_irc/src/startup_ing91800.s b/examples/peripheral_irc/src/startup_ing91800.s index 7e44b2c58..53907e41a 100644 --- a/examples/peripheral_irc/src/startup_ing91800.s +++ b/examples/peripheral_irc/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/peripheral_led/peripheral_led.ingw b/examples/peripheral_led/peripheral_led.ingw index 734c10098..4859e480a 100644 --- a/examples/peripheral_led/peripheral_led.ingw +++ b/examples/peripheral_led/peripheral_led.ingw @@ -1,18 +1,24 @@ { "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9ff0700000000", + "addr": 158908 + } + }, "rom": { - "size": 146500, + "size": 146876, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 163840 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "ide_ver": "5", @@ -52,8 +58,8 @@ "keil": true, "cmsis": "", "gatt_handle_name": "HANDLE_RGB_LIGHTING_CONTROL", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "0", "profile_data": "\/\/ Service Generic Access: 1800\r\n0x0A, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x28,\r\n0x00, 0x18, \r\n\/\/ Characteristic Device Name: 2A00\r\n0x0D, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x28,\r\n0x02, 0x03, 0x00, 0x00, 0x2A, \r\n0x0F, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x2A,\r\n0x49, 0x4E, 0x47, 0x20, 0x4C, 0x45, 0x44, \r\n\r\n\/\/ Service INGChips RGB Lighting Service: {6a33a526-e004-4793-a084-8a1dc49b84fd}\r\n0x18, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x28,\r\n0xFD, 0x84, 0x9B, 0xC4, 0x1D, 0x8A, 0x84, 0xA0, \r\n0x93, 0x47, 0x04, 0xE0, 0x26, 0xA5, 0x33, 0x6A, \r\n\/\/ Characteristic RGB Lighting Control: {1c190e92-37dd-4ac4-8154-0444c69274c2}\r\n0x1B, 0x00, 0x02, 0x00, 0x05, 0x00, 0x03, 0x28,\r\n0x06, 0x06, 0x00, 0xC2, 0x74, 0x92, 0xC6, 0x44, \r\n0x04, 0x54, 0x81, 0xC4, 0x4A, 0xDD, 0x37, 0x92, \r\n0x0E, 0x19, 0x1C, \r\n0x19, 0x00, 0x06, 0x02, 0x06, 0x00,\r\n0xC2, 0x74, 0x92, 0xC6, 0x44, 0x04, 0x54, 0x81, \r\n0xC4, 0x4A, 0xDD, 0x37, 0x92, 0x0E, 0x19, 0x1C, \r\n0x00, 0x00, 0x00, \r\n\r\n0x00,0x00\r\n\/\/ total size = 116\r\n\r\n\/\/ HANDLE_DEVICE_NAME=3\r\n\/\/ HANDLE_RGB_LIGHTING_CONTROL=6\r\n\r\n\/\/ HANDLE_DEVICE_NAME_OFFSET=31\r\n\/\/ HANDLE_RGB_LIGHTING_CONTROL_OFFSET=111\r\n", diff --git a/examples/peripheral_led/peripheral_led.uvproj b/examples/peripheral_led/peripheral_led.uvproj index 04e23d298..9a499bde1 100644 --- a/examples/peripheral_led/peripheral_led.uvproj +++ b/examples/peripheral_led/peripheral_led.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/peripheral_led/peripheral_led.uvprojx b/examples/peripheral_led/peripheral_led.uvprojx index 786ab8a21..5a0c8bdd4 100644 --- a/examples/peripheral_led/peripheral_led.uvprojx +++ b/examples/peripheral_led/peripheral_led.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/peripheral_led/src/startup_ing91800.s b/examples/peripheral_led/src/startup_ing91800.s index 7e44b2c58..53907e41a 100644 --- a/examples/peripheral_led/src/startup_ing91800.s +++ b/examples/peripheral_led/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/peripheral_mass_conn/peripheral_mass_conn.ingw b/examples/peripheral_mass_conn/peripheral_mass_conn.ingw index 688450b96..6faf11643 100644 --- a/examples/peripheral_mass_conn/peripheral_mass_conn.ingw +++ b/examples/peripheral_mass_conn/peripheral_mass_conn.ingw @@ -1,19 +1,25 @@ { "watchdog": true, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148740 + } + }, "rom": { - "size": 135872, + "size": 136248, "base": 16384 }, "ram": { - "size": 33104, + "size": 33040, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -69,8 +75,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 32432, - "app_ram_addr": 536904016, + "app_ram_size": 32496, + "app_ram_addr": 536903952, "printf_enable": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples/peripheral_mass_conn/peripheral_mass_conn.uvproj b/examples/peripheral_mass_conn/peripheral_mass_conn.uvproj index dd10c823c..469fc74d3 100644 --- a/examples/peripheral_mass_conn/peripheral_mass_conn.uvproj +++ b/examples/peripheral_mass_conn/peripheral_mass_conn.uvproj @@ -319,8 +319,8 @@ 0 - 536904016 - 32432 + 536903952 + 32496 0 diff --git a/examples/peripheral_mass_conn/peripheral_mass_conn.uvprojx b/examples/peripheral_mass_conn/peripheral_mass_conn.uvprojx index 26a419b29..6e000988d 100644 --- a/examples/peripheral_mass_conn/peripheral_mass_conn.uvprojx +++ b/examples/peripheral_mass_conn/peripheral_mass_conn.uvprojx @@ -298,8 +298,8 @@ 0 - 536904016 - 32432 + 536903952 + 32496 0 diff --git a/examples/peripheral_mass_conn/src/startup_ing91800.s b/examples/peripheral_mass_conn/src/startup_ing91800.s index 0f7d42fd1..7fe2b54c8 100644 --- a/examples/peripheral_mass_conn/src/startup_ing91800.s +++ b/examples/peripheral_mass_conn/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/peripheral_pedometer/peripheral_pedometer.ingw b/examples/peripheral_pedometer/peripheral_pedometer.ingw index 203dc13c7..b03d62cd9 100644 --- a/examples/peripheral_pedometer/peripheral_pedometer.ingw +++ b/examples/peripheral_pedometer/peripheral_pedometer.ingw @@ -1,18 +1,24 @@ { "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "ide_ver": "5", @@ -50,8 +56,8 @@ "keil": true, "cmsis": "", "gatt_handle_name": "HANDLE_RSC_FEATURE", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "0", "profile_data": "\/\/ Service Generic Access: 1800\r\n0x0A, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x28,\r\n0x00, 0x18, \r\n\/\/ Characteristic Device Name: 2A00\r\n0x0D, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x28,\r\n0x02, 0x03, 0x00, 0x00, 0x2A, \r\n0x15, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x2A,\r\n0x49, 0x4E, 0x47, 0x20, 0x50, 0x65, 0x64, 0x6F, \r\n0x6D, 0x65, 0x74, 0x65, 0x72, \r\n\/\/ Characteristic Appearance: 2A01\r\n0x0D, 0x00, 0x02, 0x00, 0x04, 0x00, 0x03, 0x28,\r\n0x02, 0x05, 0x00, 0x01, 0x2A, \r\n0x0A, 0x00, 0x02, 0x00, 0x05, 0x00, 0x01, 0x2A,\r\n0x40, 0x04, \r\n\r\n\/\/ Service Running Speed and Cadence: 1814\r\n0x0A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x00, 0x28,\r\n0x14, 0x18, \r\n\/\/ Characteristic RSC Measurement: 2A53\r\n0x0D, 0x00, 0x02, 0x00, 0x07, 0x00, 0x03, 0x28,\r\n0x10, 0x08, 0x00, 0x53, 0x2A, \r\n0x12, 0x00, 0x10, 0x00, 0x08, 0x00, 0x53, 0x2A,\r\n0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \r\n0x00, 0x00, \r\n0x0A, 0x00, 0x0A, 0x01, 0x09, 0x00, 0x02, 0x29,\r\n0x00, 0x00, \r\n\/\/ Characteristic RSC Feature: 2A54\r\n0x0D, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x03, 0x28,\r\n0x02, 0x0B, 0x00, 0x54, 0x2A, \r\n0x0A, 0x00, 0x02, 0x00, 0x0B, 0x00, 0x54, 0x2A,\r\n0x07, 0x00, \r\n\r\n0x00,0x00\r\n\/\/ total size = 143\r\n\r\n\/\/ HANDLE_DEVICE_NAME=3\r\n\/\/ HANDLE_APPEARANCE=5\r\n\/\/ HANDLE_RSC_MEASUREMENT=8\r\n\/\/ HANDLE_RSC_FEATURE=11\r\n" diff --git a/examples/peripheral_pedometer/peripheral_pedometer.uvproj b/examples/peripheral_pedometer/peripheral_pedometer.uvproj index 296783ea7..f0afdbe99 100644 --- a/examples/peripheral_pedometer/peripheral_pedometer.uvproj +++ b/examples/peripheral_pedometer/peripheral_pedometer.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/peripheral_pedometer/peripheral_pedometer.uvprojx b/examples/peripheral_pedometer/peripheral_pedometer.uvprojx index 4bee13b10..5d819f403 100644 --- a/examples/peripheral_pedometer/peripheral_pedometer.uvprojx +++ b/examples/peripheral_pedometer/peripheral_pedometer.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/peripheral_pedometer/src/startup_ing91800.s b/examples/peripheral_pedometer/src/startup_ing91800.s index 7e44b2c58..53907e41a 100644 --- a/examples/peripheral_pedometer/src/startup_ing91800.s +++ b/examples/peripheral_pedometer/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/peripheral_piano/peripheral_piano.ingw b/examples/peripheral_piano/peripheral_piano.ingw index 8d6a79d07..3679284b0 100644 --- a/examples/peripheral_piano/peripheral_piano.ingw +++ b/examples/peripheral_piano/peripheral_piano.ingw @@ -1,18 +1,24 @@ { "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "ide_ver": "5", @@ -53,8 +59,8 @@ "keil": true, "cmsis": "", "gatt_handle_name": "HANDLE_KEY_INPUT", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "0", "profile_data": "\/\/ Service Generic Access: 1800\r\n0x0A, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x28,\r\n0x00, 0x18, \r\n\/\/ Characteristic Device Name: 2A00\r\n0x0D, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x28,\r\n0x02, 0x03, 0x00, 0x00, 0x2A, \r\n0x11, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x2A,\r\n0x49, 0x4E, 0x47, 0x20, 0x50, 0x69, 0x61, 0x6E, \r\n0x6F, \r\n\r\n\/\/ Service INGChips Piano Service: {00000002-494e-4743-4849-505355554944}\r\n0x18, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x28,\r\n0x44, 0x49, 0x55, 0x55, 0x53, 0x50, 0x49, 0x48, \r\n0x43, 0x47, 0x4E, 0x49, 0x02, 0x00, 0x00, 0x00, \r\n\/\/ Characteristic Key Input: {bf83f3f1-399a-414d-9035-ce64ceb3ff67}\r\n0x1B, 0x00, 0x02, 0x00, 0x05, 0x00, 0x03, 0x28,\r\n0x04, 0x06, 0x00, 0x67, 0xFF, 0xB3, 0xCE, 0x64, \r\n0xCE, 0x35, 0x90, 0x4D, 0x41, 0x9A, 0x39, 0xF1, \r\n0xF3, 0x83, 0xBF, \r\n0x16, 0x00, 0x04, 0x03, 0x06, 0x00,\r\n0x67, 0xFF, 0xB3, 0xCE, 0x64, 0xCE, 0x35, 0x90, \r\n0x4D, 0x41, 0x9A, 0x39, 0xF1, 0xF3, 0x83, 0xBF, \r\n\r\n0x00,0x00\r\n\/\/ total size = 115\r\n\r\n\/\/ HANDLE_DEVICE_NAME=3\r\n\/\/ HANDLE_KEY_INPUT=6\r\n\r\n\/\/ HANDLE_DEVICE_NAME_OFFSET=31\r\n\/\/ HANDLE_KEY_INPUT_OFFSET=113\r\n", diff --git a/examples/peripheral_piano/peripheral_piano.uvproj b/examples/peripheral_piano/peripheral_piano.uvproj index 6b05f38c6..cb143cd83 100644 --- a/examples/peripheral_piano/peripheral_piano.uvproj +++ b/examples/peripheral_piano/peripheral_piano.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/peripheral_piano/peripheral_piano.uvprojx b/examples/peripheral_piano/peripheral_piano.uvprojx index cc655b361..587f8f980 100644 --- a/examples/peripheral_piano/peripheral_piano.uvprojx +++ b/examples/peripheral_piano/peripheral_piano.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/peripheral_piano/src/startup_ing91800.s b/examples/peripheral_piano/src/startup_ing91800.s index 7e44b2c58..53907e41a 100644 --- a/examples/peripheral_piano/src/startup_ing91800.s +++ b/examples/peripheral_piano/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/peripheral_throughput/peripheral_throughput.ingw b/examples/peripheral_throughput/peripheral_throughput.ingw index 400b18ebb..0fb331b52 100644 --- a/examples/peripheral_throughput/peripheral_throughput.ingw +++ b/examples/peripheral_throughput/peripheral_throughput.ingw @@ -1,18 +1,24 @@ { "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "ide_ver": "5", @@ -53,8 +59,8 @@ "keil": true, "cmsis": "", "gatt_handle_name": "HANDLE_GENERIC_INPUT", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "0", "profile_data": "\/\/ Service Generic Access: 1800\r\n0x0A, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x28,\r\n0x00, 0x18, \r\n\/\/ Characteristic Device Name: 2A00\r\n0x0D, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x28,\r\n0x02, 0x03, 0x00, 0x00, 0x2A, \r\n0x0F, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x2A,\r\n0x49, 0x4E, 0x47, 0x20, 0x54, 0x70, 0x74, \r\n\r\n\/\/ Service INGChips Throughput Service: {2445314a-a1d4-4874-b4d1-fdfb6f501485}\r\n0x18, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x28,\r\n0x85, 0x14, 0x50, 0x6F, 0xFB, 0xFD, 0xD1, 0xB4, \r\n0x74, 0x48, 0xD4, 0xA1, 0x4A, 0x31, 0x45, 0x24, \r\n\/\/ Characteristic Generic Input: {bf83f3f1-399a-414d-9035-ce64ceb3ff67}\r\n0x1B, 0x00, 0x02, 0x00, 0x05, 0x00, 0x03, 0x28,\r\n0x04, 0x06, 0x00, 0x67, 0xFF, 0xB3, 0xCE, 0x64, \r\n0xCE, 0x35, 0x90, 0x4D, 0x41, 0x9A, 0x39, 0xF1, \r\n0xF3, 0x83, 0xBF, \r\n0x16, 0x00, 0x04, 0x03, 0x06, 0x00,\r\n0x67, 0xFF, 0xB3, 0xCE, 0x64, 0xCE, 0x35, 0x90, \r\n0x4D, 0x41, 0x9A, 0x39, 0xF1, 0xF3, 0x83, 0xBF, \r\n\r\n0x00,0x00\r\n\/\/ total size = 113\r\n\r\n\/\/ HANDLE_DEVICE_NAME=3\r\n\/\/ HANDLE_GENERIC_INPUT=6\r\n\r\n\/\/ HANDLE_DEVICE_NAME_OFFSET=31\r\n\/\/ HANDLE_GENERIC_INPUT_OFFSET=111\r\n", diff --git a/examples/peripheral_throughput/peripheral_throughput.uvproj b/examples/peripheral_throughput/peripheral_throughput.uvproj index d5e681b4c..4cc1dfb80 100644 --- a/examples/peripheral_throughput/peripheral_throughput.uvproj +++ b/examples/peripheral_throughput/peripheral_throughput.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/peripheral_throughput/peripheral_throughput.uvprojx b/examples/peripheral_throughput/peripheral_throughput.uvprojx index 850bfc7b6..6c915c021 100644 --- a/examples/peripheral_throughput/peripheral_throughput.uvprojx +++ b/examples/peripheral_throughput/peripheral_throughput.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/peripheral_throughput/src/startup_ing91800.s b/examples/peripheral_throughput/src/startup_ing91800.s index 7e44b2c58..53907e41a 100644 --- a/examples/peripheral_throughput/src/startup_ing91800.s +++ b/examples/peripheral_throughput/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/reset_handler/reset_handler.ingw b/examples/reset_handler/reset_handler.ingw index ac7106ed3..51162e70b 100644 --- a/examples/reset_handler/reset_handler.ingw +++ b/examples/reset_handler/reset_handler.ingw @@ -1,19 +1,25 @@ { "watchdog": true, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -69,8 +75,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "printf_enable": true, "ota_ver_patch": "0", "profile_data": "0, 0\r\n", diff --git a/examples/reset_handler/reset_handler.uvproj b/examples/reset_handler/reset_handler.uvproj index 320c6f217..672848b35 100644 --- a/examples/reset_handler/reset_handler.uvproj +++ b/examples/reset_handler/reset_handler.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/reset_handler/reset_handler.uvprojx b/examples/reset_handler/reset_handler.uvprojx index 2dc43a712..bfc99f271 100644 --- a/examples/reset_handler/reset_handler.uvprojx +++ b/examples/reset_handler/reset_handler.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/secondary_fota/secondary_fota.ingw b/examples/secondary_fota/secondary_fota.ingw index f9a35d65a..6bffca96c 100644 --- a/examples/secondary_fota/secondary_fota.ingw +++ b/examples/secondary_fota/secondary_fota.ingw @@ -1,19 +1,25 @@ { "watchdog": false, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "eflash_addr": "0x42000", @@ -63,8 +69,8 @@ }, "keil": true, "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "1", "profile_data": "\/\/ Service Generic Access: 1800\r\n0x0A, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x28,\r\n0x00, 0x18, \r\n\/\/ Characteristic Device Name: 2A00\r\n0x0D, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x28,\r\n0x02, 0x03, 0x00, 0x00, 0x2A, \r\n0x1A, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x2A,\r\n0x49, 0x4E, 0x47, 0x20, 0x53, 0x65, 0x63, 0x6F, \r\n0x6E, 0x64, 0x61, 0x72, 0x79, 0x20, 0x46, 0x4F, \r\n0x54, 0x41, \r\n\r\n\/\/ Service INGChips FOTA Service: {3345c2f0-6f36-45c5-8541-92f56728d5f3}\r\n0x18, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x28,\r\n0xF3, 0xD5, 0x28, 0x67, 0xF5, 0x92, 0x41, 0x85, \r\n0xC5, 0x45, 0x36, 0x6F, 0xF0, 0xC2, 0x45, 0x33, \r\n\/\/ Characteristic FOTA Version: {3345c2f1-6f36-45c5-8541-92f56728d5f3}\r\n0x1B, 0x00, 0x02, 0x00, 0x05, 0x00, 0x03, 0x28,\r\n0x02, 0x06, 0x00, 0xF3, 0xD5, 0x28, 0x67, 0xF5, \r\n0x92, 0x41, 0x85, 0xC5, 0x45, 0x36, 0x6F, 0xF1, \r\n0xC2, 0x45, 0x33, \r\n0x1E, 0x00, 0x02, 0x02, 0x06, 0x00,\r\n0xF3, 0xD5, 0x28, 0x67, 0xF5, 0x92, 0x41, 0x85, \r\n0xC5, 0x45, 0x36, 0x6F, 0xF1, 0xC2, 0x45, 0x33, \r\n0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x28, 0x01, \r\n\/\/ Characteristic FOTA Control: {3345c2f2-6f36-45c5-8541-92f56728d5f3}\r\n0x1B, 0x00, 0x02, 0x00, 0x07, 0x00, 0x03, 0x28,\r\n0x06, 0x08, 0x00, 0xF3, 0xD5, 0x28, 0x67, 0xF5, \r\n0x92, 0x41, 0x85, 0xC5, 0x45, 0x36, 0x6F, 0xF2, \r\n0xC2, 0x45, 0x33, \r\n0x16, 0x00, 0x06, 0x03, 0x08, 0x00,\r\n0xF3, 0xD5, 0x28, 0x67, 0xF5, 0x92, 0x41, 0x85, \r\n0xC5, 0x45, 0x36, 0x6F, 0xF2, 0xC2, 0x45, 0x33, \r\n\/\/ Characteristic FOTA Data: {3345c2f3-6f36-45c5-8541-92f56728d5f3}\r\n0x1B, 0x00, 0x02, 0x00, 0x09, 0x00, 0x03, 0x28,\r\n0x04, 0x0A, 0x00, 0xF3, 0xD5, 0x28, 0x67, 0xF5, \r\n0x92, 0x41, 0x85, 0xC5, 0x45, 0x36, 0x6F, 0xF3, \r\n0xC2, 0x45, 0x33, \r\n0x16, 0x00, 0x04, 0x03, 0x0A, 0x00,\r\n0xF3, 0xD5, 0x28, 0x67, 0xF5, 0x92, 0x41, 0x85, \r\n0xC5, 0x45, 0x36, 0x6F, 0xF3, 0xC2, 0x45, 0x33, \r\n\r\n0x00,0x00\r\n\/\/ total size = 230\r\n\r\n\/\/ HANDLE_DEVICE_NAME=3\r\n\/\/ HANDLE_FOTA_VERSION=6\r\n\/\/ HANDLE_FOTA_CONTROL=8\r\n\/\/ HANDLE_FOTA_DATA=10\r\n\r\n\/\/ HANDLE_DEVICE_NAME_OFFSET=31\r\n\/\/ HANDLE_FOTA_VERSION_OFFSET=122\r\n\/\/ HANDLE_FOTA_CONTROL_OFFSET=179\r\n\/\/ HANDLE_FOTA_DATA_OFFSET=228\r\n", diff --git a/examples/secondary_fota/secondary_fota.uvproj b/examples/secondary_fota/secondary_fota.uvproj index d9be5c32f..3e409c637 100644 --- a/examples/secondary_fota/secondary_fota.uvproj +++ b/examples/secondary_fota/secondary_fota.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/secondary_fota/secondary_fota.uvprojx b/examples/secondary_fota/secondary_fota.uvprojx index 71b85388f..464b24e6f 100644 --- a/examples/secondary_fota/secondary_fota.uvprojx +++ b/examples/secondary_fota/secondary_fota.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/secondary_fota/src/startup_ing91800.s b/examples/secondary_fota/src/startup_ing91800.s index 7e44b2c58..53907e41a 100644 --- a/examples/secondary_fota/src/startup_ing91800.s +++ b/examples/secondary_fota/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/smart_meter/smart_meter.ingw b/examples/smart_meter/smart_meter.ingw index e1a4bc67b..b41331af1 100644 --- a/examples/smart_meter/smart_meter.ingw +++ b/examples/smart_meter/smart_meter.ingw @@ -1,19 +1,25 @@ { "watchdog": false, "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "ide_ver": "5", @@ -54,8 +60,8 @@ "keil": true, "cmsis": "", "gatt_handle_name": "HANDLE_GENERIC_INPUT", - "app_ram_size": 35656, - "app_ram_addr": 536900792, + "app_ram_size": 35720, + "app_ram_addr": 536900728, "uart_log": true, "ota_ver_patch": "0", "profile_data": "\/\/ Service Generic Access: 1800\r\n0x0A, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x28,\r\n0x00, 0x18, \r\n\/\/ Characteristic Device Name: 2A00\r\n0x0D, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x28,\r\n0x02, 0x03, 0x00, 0x00, 0x2A, \r\n0x17, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x2A,\r\n0x49, 0x4E, 0x47, 0x20, 0x53, 0x6D, 0x61, 0x72, \r\n0x74, 0x20, 0x4D, 0x65, 0x74, 0x65, 0x72, \r\n\r\n\/\/ Service INGChips Console Service: {43f4b114-ca67-48e8-a46f-9a8ffeb7146a}\r\n0x18, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x28,\r\n0x6A, 0x14, 0xB7, 0xFE, 0x8F, 0x9A, 0x6F, 0xA4, \r\n0xE8, 0x48, 0x67, 0xCA, 0x14, 0xB1, 0xF4, 0x43, \r\n\/\/ Characteristic Generic Input: {bf83f3f1-399a-414d-9035-ce64ceb3ff67}\r\n0x1B, 0x00, 0x02, 0x00, 0x05, 0x00, 0x03, 0x28,\r\n0x06, 0x06, 0x00, 0x67, 0xFF, 0xB3, 0xCE, 0x64, \r\n0xCE, 0x35, 0x90, 0x4D, 0x41, 0x9A, 0x39, 0xF1, \r\n0xF3, 0x83, 0xBF, \r\n0x16, 0x00, 0x06, 0x03, 0x06, 0x00,\r\n0x67, 0xFF, 0xB3, 0xCE, 0x64, 0xCE, 0x35, 0x90, \r\n0x4D, 0x41, 0x9A, 0x39, 0xF1, 0xF3, 0x83, 0xBF, \r\n\/\/ Characteristic Generic Output: {bf83f3f2-399a-414d-9035-ce64ceb3ff67}\r\n0x1B, 0x00, 0x02, 0x00, 0x07, 0x00, 0x03, 0x28,\r\n0x10, 0x08, 0x00, 0x67, 0xFF, 0xB3, 0xCE, 0x64, \r\n0xCE, 0x35, 0x90, 0x4D, 0x41, 0x9A, 0x39, 0xF2, \r\n0xF3, 0x83, 0xBF, \r\n0x16, 0x00, 0x10, 0x02, 0x08, 0x00,\r\n0x67, 0xFF, 0xB3, 0xCE, 0x64, 0xCE, 0x35, 0x90, \r\n0x4D, 0x41, 0x9A, 0x39, 0xF2, 0xF3, 0x83, 0xBF, \r\n0x0A, 0x00, 0x0A, 0x01, 0x09, 0x00, 0x02, 0x29,\r\n0x00, 0x00, \r\n\r\n0x00,0x00\r\n\/\/ total size = 180\r\n\r\n\/\/ HANDLE_DEVICE_NAME=3\r\n\/\/ HANDLE_GENERIC_INPUT=6\r\n\/\/ HANDLE_GENERIC_OUTPUT=8\r\n\r\n\/\/ HANDLE_DEVICE_NAME_OFFSET=31\r\n\/\/ HANDLE_GENERIC_INPUT_OFFSET=119\r\n\/\/ HANDLE_GENERIC_OUTPUT_OFFSET=168\r\n", diff --git a/examples/smart_meter/smart_meter.uvproj b/examples/smart_meter/smart_meter.uvproj index 79aa9764d..7d2a4dc57 100644 --- a/examples/smart_meter/smart_meter.uvproj +++ b/examples/smart_meter/smart_meter.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/smart_meter/smart_meter.uvprojx b/examples/smart_meter/smart_meter.uvprojx index c1d78ad07..f3af49d28 100644 --- a/examples/smart_meter/smart_meter.uvprojx +++ b/examples/smart_meter/smart_meter.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/smart_meter/src/startup_ing91800.s b/examples/smart_meter/src/startup_ing91800.s index 7e44b2c58..53907e41a 100644 --- a/examples/smart_meter/src/startup_ing91800.s +++ b/examples/smart_meter/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/thermo_ota/thermo_ota.ingw b/examples/thermo_ota/thermo_ota.ingw index 98ceb3bb9..3af467238 100644 --- a/examples/thermo_ota/thermo_ota.ingw +++ b/examples/thermo_ota/thermo_ota.ingw @@ -1,18 +1,24 @@ { "bundle_meta": { + "var": { + "link_layer_features": { + "value": "3ff9010400000000", + "addr": 148660 + } + }, "rom": { - "size": 135796, + "size": 136160, "base": 16384 }, "ram": { - "size": 29876, + "size": 29812, "base": 536870912 }, "app": { "base": 155648 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "ide_ver": "5", @@ -31,6 +37,6 @@ "family": "ing918", "arm_inc": "C:\/keil\/ARM\/ARMCC\/include", "cmsis": "", - "app_ram_size": 35656, - "app_ram_addr": 536900792 + "app_ram_size": 35720, + "app_ram_addr": 536900728 } \ No newline at end of file diff --git a/examples/thermo_ota/thermo_ota.uvproj b/examples/thermo_ota/thermo_ota.uvproj index bae1806f6..11e62094f 100644 --- a/examples/thermo_ota/thermo_ota.uvproj +++ b/examples/thermo_ota/thermo_ota.uvproj @@ -319,8 +319,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/thermo_ota/thermo_ota.uvprojx b/examples/thermo_ota/thermo_ota.uvprojx index d1f8c9edd..f1f08147b 100644 --- a/examples/thermo_ota/thermo_ota.uvprojx +++ b/examples/thermo_ota/thermo_ota.uvprojx @@ -297,8 +297,8 @@ 0 - 536900792 - 35656 + 536900728 + 35720 0 diff --git a/examples/uart_console/doc/index.md b/examples/uart_console/doc/index.md index 3bc43e716..18553b09a 100644 --- a/examples/uart_console/doc/index.md +++ b/examples/uart_console/doc/index.md @@ -167,6 +167,12 @@ Firstly, start advertising and get connected with _ING BLE_ app. Pass `HCI_SUBEVENT_LE_VENDOR_CONNECTION_ABORTED` and timing information to another device, then the connection can be resumed on that device, and _handover_ is achieved. +### Others + +* `status` + + This command will show states of Controller. + ## Trace This example has 4 trace sink drivers (i.e. how to export/save trace data): diff --git a/examples/uart_console/src/profile.c b/examples/uart_console/src/profile.c index c517c6a2f..233bf8189 100644 --- a/examples/uart_console/src/profile.c +++ b/examples/uart_console/src/profile.c @@ -16,6 +16,7 @@ #include "trace.h" #include "btstack_mt.h" #include "ll_api.h" +#include "bluetooth_hci.h" #include "uart_console.h" #include "gatt_client_util.h" @@ -653,6 +654,57 @@ void ble_re_connect(void) btstack_push_user_runnable(abort_connection, NULL, 0); } +static void show_bits(const uint32_t v) +{ + int i; + for (i = 0; i < 32; i++) + { + if (v & (1u << i)) + printf("%d, ", i); + } + printf("\n"); +} + +void ble_show_status(void) +{ + uint32_t adv_states = 0; + uint32_t conn_states = 0; + uint32_t sync_states = 0; + uint32_t other_states = 0; + ll_get_states(&adv_states, &conn_states, &sync_states, &other_states); + if ((adv_states | conn_states | sync_states | other_states) == 0) + { + printf("Controller is IDLE.\n"); + return; + } + + printf("Controller is:\n"); + if (adv_states != 0) + { + printf("* Advertising : "); + show_bits(adv_states); + } + if (conn_states != 0) + { + printf("* Connected : "); + show_bits(conn_states); + } + if (sync_states != 0) + { + printf("* Synchronized: "); + show_bits(sync_states); + } + if (other_states & 1) + { + printf("* Scanning\n"); + } + if (other_states & 2) + { + printf("* Initiating\n"); + } + printf("\n"); +} + static void demo_synced_gap_apis(struct btstack_synced_runner *runner, void *user_data) { int err; @@ -915,6 +967,7 @@ static void user_packet_handler(uint8_t packet_type, uint16_t channel, const uin 0x00); // Scan_Request_Notification_Enable do_set_data(); gap_set_ext_scan_response_data(0, sizeof(scan_data), (uint8_t*)scan_data); + gap_read_white_lists_size(); break; case HCI_EVENT_LE_META: @@ -959,6 +1012,7 @@ static void user_packet_handler(uint8_t packet_type, uint16_t channel, const uin } break; case HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE: + case HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE_V2: { const le_meta_event_enh_create_conn_complete_t * complete = decode_hci_le_meta_event(packet, le_meta_event_enh_create_conn_complete_t); @@ -1171,6 +1225,15 @@ static void user_packet_handler(uint8_t packet_type, uint16_t channel, const uin *returns, hci_event_command_complete_get_command_opcode(packet)); break; } + switch (hci_event_command_complete_get_command_opcode(packet)) + { + case HCI_LE_RD_WLST_SIZE_CMD_OPCODE: + platform_printf("Accept List Size: %d\n", returns[1]); + break; + + default: + break; + } } break; case HCI_EVENT_COMMAND_STATUS: diff --git a/examples/uart_console/src/startup_ing91800.s b/examples/uart_console/src/startup_ing91800.s index 4406e96c2..b381976c0 100644 --- a/examples/uart_console/src/startup_ing91800.s +++ b/examples/uart_console/src/startup_ing91800.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 4096 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/uart_console/src/uart_console.c b/examples/uart_console/src/uart_console.c index 5a130814e..45a52477d 100644 --- a/examples/uart_console/src/uart_console.c +++ b/examples/uart_console/src/uart_console.c @@ -70,6 +70,7 @@ static const char help[] = "commands:\n" "syncgap demo sync GAP APIs\n" "lock freq lock to freq (MHz). 0 to unlock\n" "re-conn demo of abort & re-connect\n" + "status show controller status\n" ; void cmd_help(const char *param) @@ -404,6 +405,7 @@ void cmd_stop(const char *param) void set_phy(int phy); void change_conn_param(int interval, int latency, int timeout); void ble_re_connect(void); +void ble_show_status(void); void cmd_phy(const char *param) { @@ -452,6 +454,11 @@ static void cmd_reconn(const char *param) ble_re_connect(); } +static void cmd_status(const char *param) +{ + ble_show_status(); +} + static cmd_t cmds[] = { { @@ -593,6 +600,10 @@ static cmd_t cmds[] = { .cmd = "re-conn", .handler = cmd_reconn + }, + { + .cmd = "status", + .handler = cmd_status } }; diff --git a/examples/uart_console/uart_console.ingw b/examples/uart_console/uart_console.ingw index aca6580e7..4596f11c0 100644 --- a/examples/uart_console/uart_console.ingw +++ b/examples/uart_console/uart_console.ingw @@ -1,18 +1,24 @@ { "bundle_meta": { + "var": { + "link_layer_features": { + "value": "bff90104fe000000", + "addr": 164336 + } + }, "rom": { - "size": 151996, + "size": 152600, "base": 16384 }, "ram": { - "size": 30268, + "size": 30076, "base": 536870912 }, "app": { "base": 172032 }, "version": [ - 1,9,41] + 1,9,54] }, "tc_dir": "C:\\Keil_v5\\UV4", "ide_ver": "5", @@ -53,8 +59,8 @@ "keil": true, "cmsis": "", "gatt_handle_name": "HANDLE_DEVICE_NAME", - "app_ram_size": 35264, - "app_ram_addr": 536901184, + "app_ram_size": 35456, + "app_ram_addr": 536900992, "uart_log": true, "ota_ver_patch": "0", "profile_data": "\/\/ Service Generic Access: 1800\r\n0x0A, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x28,\r\n0x00, 0x18, \r\n\/\/ Characteristic Device Name: 2A00\r\n0x0D, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x28,\r\n0x02, 0x03, 0x00, 0x00, 0x2A, \r\n0x14, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x2A,\r\n0x55, 0x41, 0x52, 0x54, 0x20, 0x43, 0x6F, 0x6E, \r\n0x73, 0x6F, 0x6C, 0x65, \r\n\r\n0x00,0x00\r\n\/\/ total size = 45\r\n\r\n\/\/ HANDLE_DEVICE_NAME=3\r\n\r\n\/\/ HANDLE_DEVICE_NAME_OFFSET=31\r\n", diff --git a/examples/uart_console/uart_console.uvproj b/examples/uart_console/uart_console.uvproj index 543f9a021..e31cf4108 100644 --- a/examples/uart_console/uart_console.uvproj +++ b/examples/uart_console/uart_console.uvproj @@ -319,8 +319,8 @@ 0 - 536901184 - 35264 + 536900992 + 35456 0 diff --git a/examples/uart_console/uart_console.uvprojx b/examples/uart_console/uart_console.uvprojx index 2ed3122b4..39a65b662 100644 --- a/examples/uart_console/uart_console.uvprojx +++ b/examples/uart_console/uart_console.uvprojx @@ -298,8 +298,8 @@ 0 - 536901184 - 35264 + 536900992 + 35456 0 diff --git a/examples/voice_remote_ctrl/flash_download.ini b/examples/voice_remote_ctrl/flash_download.ini index f2353c2d3..cf1527747 100644 --- a/examples/voice_remote_ctrl/flash_download.ini +++ b/examples/voice_remote_ctrl/flash_download.ini @@ -24,7 +24,7 @@ Address=33562624 [bin-1] Name=Burn Bin #2 Checked=1 -Address=33718272 +Address=33722368 FileName=voice_remote_ctrl.bin [uart] diff --git a/examples/voice_remote_ctrl/src/startup_ing91600.s b/examples/voice_remote_ctrl/src/startup_ing91600.s index 7e44b2c58..53907e41a 100644 --- a/examples/voice_remote_ctrl/src/startup_ing91600.s +++ b/examples/voice_remote_ctrl/src/startup_ing91600.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/examples/voice_remote_ctrl/voice_remote_ctrl.ingw b/examples/voice_remote_ctrl/voice_remote_ctrl.ingw index 60ed36b71..50282c23c 100644 --- a/examples/voice_remote_ctrl/voice_remote_ctrl.ingw +++ b/examples/voice_remote_ctrl/voice_remote_ctrl.ingw @@ -1,18 +1,24 @@ { "bundle_meta": { + "var": { + "link_layer_features": { + "value": "bf79ff07fe000000", + "addr": 33714136 + } + }, "rom": { - "size": 155316, + "size": 159624, "base": 33562624 }, "ram": { - "size": 21588, + "size": 21532, "base": 536870912 }, "app": { - "base": 33718272 + "base": 33722368 }, "version": [ - 2,3,1] + 2,3,16] }, "tc_dir": "C:\\Keil_v5\\UV4", "ide_ver": "5", @@ -39,8 +45,8 @@ "power_saving": false, "gatt_handle_value": "6", "bundle": "typical", - "app_rom_size": "360448", - "app_rom_addr": "33718272", + "app_rom_size": "356352", + "app_rom_addr": "33722368", "family": "ing916", "vcode": false, "role": "peripheral", @@ -53,8 +59,8 @@ "keil": true, "cmsis": "", "gatt_handle_name": "HANDLE_VOICE_CONTROL", - "app_ram_size": 11176, - "app_ram_addr": 536892504, + "app_ram_size": 11232, + "app_ram_addr": 536892448, "uart_log": true, "ota_ver_patch": "0", "profile_data": "\/\/ Service Generic Access: 1800\r\n0x0A, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x28,\r\n0x00, 0x18, \r\n\/\/ Characteristic Device Name: 2A00\r\n0x0D, 0x00, 0x02, 0x00, 0x02, 0x00, 0x03, 0x28,\r\n0x02, 0x03, 0x00, 0x00, 0x2A, \r\n0x20, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x2A,\r\n0x49, 0x4E, 0x47, 0x20, 0x56, 0x6F, 0x69, 0x63, \r\n0x65, 0x20, 0x52, 0x65, 0x6D, 0x6F, 0x74, 0x65, \r\n0x20, 0x43, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C, \r\n\r\n\/\/ Service INGChips Voice Output Service: {00000001-494e-4743-4849-505355554944}\r\n0x18, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x28,\r\n0x44, 0x49, 0x55, 0x55, 0x53, 0x50, 0x49, 0x48, \r\n0x43, 0x47, 0x4E, 0x49, 0x01, 0x00, 0x00, 0x00, \r\n\/\/ Characteristic Voice Control: {bf83f3f1-399a-414d-9035-ce64ceb3ff67}\r\n0x1B, 0x00, 0x02, 0x00, 0x05, 0x00, 0x03, 0x28,\r\n0x06, 0x06, 0x00, 0x67, 0xFF, 0xB3, 0xCE, 0x64, \r\n0xCE, 0x35, 0x90, 0x4D, 0x41, 0x9A, 0x39, 0xF1, \r\n0xF3, 0x83, 0xBF, \r\n0x16, 0x00, 0x06, 0x03, 0x06, 0x00,\r\n0x67, 0xFF, 0xB3, 0xCE, 0x64, 0xCE, 0x35, 0x90, \r\n0x4D, 0x41, 0x9A, 0x39, 0xF1, 0xF3, 0x83, 0xBF, \r\n\/\/ Characteristic Voice Output: {bf83f3f2-399a-414d-9035-ce64ceb3ff67}\r\n0x1B, 0x00, 0x02, 0x00, 0x07, 0x00, 0x03, 0x28,\r\n0x10, 0x08, 0x00, 0x67, 0xFF, 0xB3, 0xCE, 0x64, \r\n0xCE, 0x35, 0x90, 0x4D, 0x41, 0x9A, 0x39, 0xF2, \r\n0xF3, 0x83, 0xBF, \r\n0x16, 0x00, 0x10, 0x02, 0x08, 0x00,\r\n0x67, 0xFF, 0xB3, 0xCE, 0x64, 0xCE, 0x35, 0x90, \r\n0x4D, 0x41, 0x9A, 0x39, 0xF2, 0xF3, 0x83, 0xBF, \r\n0x0A, 0x00, 0x0A, 0x01, 0x09, 0x00, 0x02, 0x29,\r\n0x00, 0x00, \r\n\r\n0x00,0x00\r\n\/\/ total size = 189\r\n\r\n\/\/ HANDLE_DEVICE_NAME=3\r\n\/\/ HANDLE_VOICE_CONTROL=6\r\n\/\/ HANDLE_VOICE_OUTPUT=8\r\n\r\n\/\/ HANDLE_DEVICE_NAME_OFFSET=31\r\n\/\/ HANDLE_VOICE_CONTROL_OFFSET=128\r\n\/\/ HANDLE_VOICE_OUTPUT_OFFSET=177\r\n", diff --git a/examples/voice_remote_ctrl/voice_remote_ctrl.uvproj b/examples/voice_remote_ctrl/voice_remote_ctrl.uvproj index 70dfadc6a..ed4f2d6cc 100644 --- a/examples/voice_remote_ctrl/voice_remote_ctrl.uvproj +++ b/examples/voice_remote_ctrl/voice_remote_ctrl.uvproj @@ -294,8 +294,8 @@ 1 - 33718272 - 360448 + 33722368 + 356352 1 @@ -319,8 +319,8 @@ 0 - 536892504 - 11176 + 536892448 + 11232 0 diff --git a/examples/voice_remote_ctrl/voice_remote_ctrl.uvprojx b/examples/voice_remote_ctrl/voice_remote_ctrl.uvprojx index 905b57037..c8bb4648b 100644 --- a/examples/voice_remote_ctrl/voice_remote_ctrl.uvprojx +++ b/examples/voice_remote_ctrl/voice_remote_ctrl.uvprojx @@ -273,8 +273,8 @@ 1 - 33718272 - 360448 + 33722368 + 356352 1 @@ -298,8 +298,8 @@ 0 - 536892504 - 11176 + 536892448 + 11232 0 diff --git a/src/BSP/eflash.c b/src/BSP/eflash.c index bf72f3475..e4bf28983 100644 --- a/src/BSP/eflash.c +++ b/src/BSP/eflash.c @@ -170,6 +170,7 @@ int program_fota_metadata(const uint32_t entry, const int block_num, const fota_ #elif (INGCHIPS_FAMILY == INGCHIPS_FAMILY_916) #include "rom_tools.h" +#include "peripheral_sysctrl.h" typedef void (* f_erase_sector)(uint32_t addr); typedef void (* f_void)(void); @@ -293,11 +294,10 @@ __attribute__((naked)) static uint32_t security_page_read(uint32_t addr, uint32_ } #endif -uint32_t read_flash_security(uint32_t addr) +static uint32_t read_flash_security0(uint32_t addr, void *prog) { uint32_t ret; - uint32_t prog[sizeof(prog_security_page_read) / 4]; - memcpy(prog, prog_security_page_read, sizeof(prog)); + memcpy(prog, prog_security_page_read, sizeof(prog_security_page_read)); FLASH_PRE_OPS(); { ret = security_page_read(addr, (uint32_t)prog); @@ -306,6 +306,26 @@ uint32_t read_flash_security(uint32_t addr) return ret; } +uint32_t read_flash_security(uint32_t addr) +{ + uint32_t prog[sizeof(prog_security_page_read) / 4]; + if ((uintptr_t)prog < 0x40000000) + { + return read_flash_security0(addr, prog); + } + else + { + uint32_t ret; + void *prog2 = (void *)SYSCTRL_I_CACHE_AS_MEM_BASE_ADDR; + SYSCTRL_ICacheControl(SYSCTRL_MEM_BLOCK_AS_SYS_MEM); + { + ret = read_flash_security0(addr, prog2); + } + SYSCTRL_ICacheControl(SYSCTRL_MEM_BLOCK_AS_CACHE); + return ret; + } +} + #define FACTORY_DATA_LOC (0x02000000 + 0x1000) #define MAGIC_0 0x494e4743 diff --git a/src/BSP/eflash.h b/src/BSP/eflash.h index 04a47b389..9ad536765 100644 --- a/src/BSP/eflash.h +++ b/src/BSP/eflash.h @@ -198,8 +198,10 @@ typedef struct * - factory data is ready in flash, or * - factory data can be found in security pages and copied. * - * This function can be called at the beginning of app (providing that - * stack lies in EXECUTABLE memory region). + * This function can be called at the beginning of app. + * + * WARNING: If stack does not lie in EXECUTABLE memory region, I-Cache will be + * switched to RAM mode temporarily and then restored to Cache. * * @return 0 if succeeded else non-0 */ @@ -210,7 +212,7 @@ int flash_prepare_factory_data(void); * * When such information does not exists, NULL is returned. * - * Call `flash_prepare_factory_data` before using this. + * This function uses `flash_prepare_factory_data()`. * * @return die information */ @@ -221,7 +223,7 @@ const die_info_t *flash_get_die_info(void); * * When such information does not exists, NULL is returned. * - * Call `flash_prepare_factory_data` before using this. + * This function uses `flash_prepare_factory_data()`. * * @return factory data */ @@ -233,7 +235,7 @@ const factory_calib_data_t *flash_get_factory_calib_data(void); * Note: There are multiple versions of ADC calibration data, * so, here, a plain pointer is returned. * - * Call `flash_prepare_factory_data` before using this. + * This function uses `flash_prepare_factory_data()`. * * See `adc_calib_ver` in `factory_calib_data_t`. * diff --git a/src/BSP/spi_flash.h b/src/BSP/spi_flash.h index 147173d2e..9d8669169 100644 --- a/src/BSP/spi_flash.h +++ b/src/BSP/spi_flash.h @@ -1,6 +1,4 @@ -// test spi flash £¨AT45DBXX£© - #ifndef __SPI_FLASH_H__ #define __SPI_FLASH_H__ @@ -10,7 +8,7 @@ #define DEF_FLASH_DEVICE_ERR ((s8)-1) #define DEF_FLASH_NONE_ERR ((s8)0) - + #define SPI_FLASH_CS GIO_L32_GPIO_4 #define SPI_FLASH_WP GIO_L32_RF_CHN0_4 #define SPI_FLASH_RST GIO_L32_RF_CLK @@ -18,9 +16,9 @@ #ifdef C2NIM #else -// set CS 0 or 1 -#define FLASH_Enable gio_clr_bit(GIO_L32_DO , SPI_FLASH_CS); -#define FLASH_Disable gio_set_bit(GIO_L32_DO , SPI_FLASH_CS); +// set CS 0 or 1 +#define FLASH_Enable gio_clr_bit(GIO_L32_DO , SPI_FLASH_CS); +#define FLASH_Disable gio_set_bit(GIO_L32_DO , SPI_FLASH_CS); #endif diff --git a/src/FWlib/peripheral_adc.h b/src/FWlib/peripheral_adc.h index 09fa4d5e2..b6d32d20b 100644 --- a/src/FWlib/peripheral_adc.h +++ b/src/FWlib/peripheral_adc.h @@ -286,7 +286,7 @@ SADC_adcIputMode ADC_GetInputMode(void); * | [100] | 7Vp/16 | 9Vp/16 | * | [101] | 15Vp/32 | 17Vp/32 | * other pga-para values are invalid - * + * * Please get a good pga-para as parameter and call 'ADC_PgaParaSet' to set it. * So how to get a good pga-para? Please see below. * Steps to get a good pga-para: @@ -295,7 +295,7 @@ SADC_adcIputMode ADC_GetInputMode(void); * 2.Compare your range with the range between Vmin and Vmax in every row of those * table in the above, and let yours included in the second one; * 3.Do step-2 repeatedly with every row and find the biggest pga-para, is the best one. - * + * * When PGA is disabled: * 1.pga-para=0 in differential mode, pga-para=1 in single-ended mode; * 2.Call ADC_PgaParaSet is useless, but it into effect when enable PGA next time. @@ -364,7 +364,7 @@ uint16_t ADC_GetData(const uint32_t data); * @brief Read ADC data in specified channel * @note Using ADC_PopFifoData to get the whole data, and get that data's * channel id and ADC data by ADC_GetDataChannel & ADC_GetData is recommended. - * + * * @param[in] channel_id channel ID * @return ADC data */ @@ -375,7 +375,7 @@ uint16_t ADC_ReadChannelData(const uint8_t channel_id); * Example: * 1.single-mode with CH0/CH4/CH6 are enabled, it returns 0x51. * 2.differential-mode with CH1 is enabled, it returns 0x2. - * + * * @param[in] channel_id ADC input mode, see 'SADC_adcIputMode' * @return ADC-Channel's enabled status */ @@ -398,6 +398,8 @@ void ADC_VrefCalibration(void); * @brief Initialization of ADC FT-Calibration * @note Should call this function before do ADC conversion or get voltage value. * And this function should be used again if 'ADC_AdcClose' is called. + * + * This function uses `flash_prepare_factory_data()`. */ void ADC_ftInit(void); @@ -439,13 +441,13 @@ void ADC_Calibration(SADC_adcIputMode mode); * @param[in] inputMode ADC input mode, see 'SADC_adcIputMode' * @param[in] loopDelay ADC loop delay(0-0xffffffff) */ -void ADC_ConvCfg(SADC_adcCtrlMode ctrlMode, +void ADC_ConvCfg(SADC_adcCtrlMode ctrlMode, SADC_pgaPara pgaPara, uint8_t pgaEnable, - SADC_channelId ch, - uint8_t enNum, - uint8_t dmaEnNum, - SADC_adcIputMode inputMode, + SADC_channelId ch, + uint8_t enNum, + uint8_t dmaEnNum, + SADC_adcIputMode inputMode, uint32_t loopDelay); #endif diff --git a/src/FWlib/peripheral_comparator.c b/src/FWlib/peripheral_comparator.c index 6564381ec..18c5e2f66 100644 --- a/src/FWlib/peripheral_comparator.c +++ b/src/FWlib/peripheral_comparator.c @@ -167,7 +167,7 @@ COMPARATOR_INTERRUPT_MODE_t COMPARATOR_GetIntStatusAndClear(void) COMPARATOR_INTERRUPT_MODE_t ret; uint32_t reg_data; - ret = COMPARATOR_reg_read_bits(&APB_SYSCTRL->AnaCtrl, offset, bits_width); + ret = (COMPARATOR_INTERRUPT_MODE_t)COMPARATOR_reg_read_bits(&APB_SYSCTRL->AnaCtrl, offset, bits_width); reg_data = COMPARATOR_reg_read_bits(&APB_SYSCTRL->AnaCtrl, 0, SYSCTRL_ANA_CTRL_W1C_BITS); COMPARATOR_reg_write_bits(®_data, offset, bits_width, ret); COMPARATOR_reg_write_bits(&APB_SYSCTRL->AnaCtrl, 0, 32, reg_data); diff --git a/src/FWlib/peripheral_dma.c b/src/FWlib/peripheral_dma.c index b83b57959..af8dafc97 100644 --- a/src/FWlib/peripheral_dma.c +++ b/src/FWlib/peripheral_dma.c @@ -250,11 +250,20 @@ static volatile void *DMA_GetPeripheralDataAddr(SYSCTRL_DMA src) case SYSCTRL_DMA_I2S_TX: return &APB_I2S->TX; case SYSCTRL_DMA_PWM0: - return &APB_PWM->Channels[0].DmaData; + if (PWM_GetMode(0) == PWM_WORK_MODE_PCAP) + return &APB_PWM->PCAPChannels[0].Ctrl1; + else + return &APB_PWM->Channels[0].DmaData; case SYSCTRL_DMA_PWM1: - return &APB_PWM->Channels[1].DmaData; + if (PWM_GetMode(1) == PWM_WORK_MODE_PCAP) + return &APB_PWM->PCAPChannels[1].Ctrl1; + else + return &APB_PWM->Channels[1].DmaData; case SYSCTRL_DMA_PWM2: - return &APB_PWM->Channels[2].DmaData; + if (PWM_GetMode(2) == PWM_WORK_MODE_PCAP) + return &APB_PWM->PCAPChannels[2].Ctrl1; + else + return &APB_PWM->Channels[2].DmaData; default: return 0; diff --git a/src/FWlib/peripheral_keyscan.c b/src/FWlib/peripheral_keyscan.c index caa9a6abb..d65944473 100644 --- a/src/FWlib/peripheral_keyscan.c +++ b/src/FWlib/peripheral_keyscan.c @@ -260,11 +260,11 @@ void KEYSCAN_InitKeyScanToIdx(const KEYSCAN_SetStateStruct* keyscan_set, KEYSCAN static uint8_t KEYSCAN_CheckStatePara(const KEYSCAN_SetStateStruct* keyscan_set) { if (keyscan_set == 0) { - return -1; + return 1; } if ((keyscan_set->row == 0) || (keyscan_set->col == 0)) { - return -1; + return 1; } return 0; @@ -282,7 +282,7 @@ uint8_t KEYSCAN_KeyDataToRowColIdx(const KEYSCAN_Ctx *ctx, uint32_t key_data, ui return 1; } -int KEYSCAN_Initialize(const KEYSCAN_SetStateStruct* keyscan_set) +int KEYSCAN_InitializeScanParameter(const KEYSCAN_SetStateStruct* keyscan_set) { int r = 0; int i; @@ -295,8 +295,9 @@ int KEYSCAN_Initialize(const KEYSCAN_SetStateStruct* keyscan_set) row = 0; for (i = 0; i < keyscan_set->row_num; i++) { + int io_source = IO_SOURCE_KEYSCN_ROW_0 + keyscan_set->row[i].out_row; row = row | (0x1 << keyscan_set->row[i].out_row); - r = PINCTRL_SetPadMux(keyscan_set->row[i].gpio, keyscan_set->row[i].out_row + IO_SOURCE_KEYSCN_ROW_0); + r = PINCTRL_SetPadMux(keyscan_set->row[i].gpio, (io_source_t)io_source); if (r) return r; PINCTRL_Pull(keyscan_set->row[i].gpio, PINCTRL_PULL_DOWN); } @@ -321,6 +322,12 @@ int KEYSCAN_Initialize(const KEYSCAN_SetStateStruct* keyscan_set) KEYSCAN_SetReleaseTime(keyscan_set->release_time); KEYSCAN_SetScanInterval(keyscan_set->scan_interval); KEYSCAN_SetDebounceCounter(keyscan_set->debounce_counter); + return 0; +} + +int KEYSCAN_Initialize(const KEYSCAN_SetStateStruct* keyscan_set) +{ + KEYSCAN_InitializeScanParameter(keyscan_set); KEYSCAN_DbClkSel(1); KEYSCAN_SetDebounceEn(0xfffff); KEYSCAN_SetScannerEn(1); diff --git a/src/FWlib/peripheral_keyscan.h b/src/FWlib/peripheral_keyscan.h index 99f99c45f..f3570db86 100644 --- a/src/FWlib/peripheral_keyscan.h +++ b/src/FWlib/peripheral_keyscan.h @@ -106,6 +106,14 @@ typedef struct { * @param[in] keyscan_set Initial parameter struct * @return 0 if success else non-0 */ +int KEYSCAN_InitializeScanParameter(const KEYSCAN_SetStateStruct* keyscan_set); + +/** + * @brief Initialize keyscan module and start scan + * + * @param[in] keyscan_set Initial parameter struct + * @return 0 if success else non-0 + */ int KEYSCAN_Initialize(const KEYSCAN_SetStateStruct* keyscan_set); /** diff --git a/src/FWlib/peripheral_pinctrl.c b/src/FWlib/peripheral_pinctrl.c index 181761a6b..221a89c7b 100644 --- a/src/FWlib/peripheral_pinctrl.c +++ b/src/FWlib/peripheral_pinctrl.c @@ -371,7 +371,7 @@ int PINCTRL_SelSwIn(uint8_t io_pin_dio, uint8_t io_pin_clk) return 0; } -int PINCTRL_SelSpiIn(spi_port_t port, +static int PINCTRL_SelSpiIn0(spi_port_t port, uint8_t io_pin_clk, uint8_t io_pin_csn, uint8_t io_pin_hold, @@ -406,6 +406,34 @@ int PINCTRL_SelSpiIn(spi_port_t port, return 0; } +int PINCTRL_SelSpiPins(spi_port_t port, + uint8_t io_pin_clk, + uint8_t io_pin_csn, + uint8_t io_pin_hold, + uint8_t io_pin_wp, + uint8_t io_pin_miso, + uint8_t io_pin_mosi) +{ + static const io_source_t source_tab[][6] = + { + {IO_SOURCE_SPI0_CLK_OUT, IO_SOURCE_SPI0_CSN_OUT, IO_SOURCE_SPI0_HOLD_OUT, IO_SOURCE_SPI0_WP_OUT, IO_SOURCE_SPI0_MISO_OUT, IO_SOURCE_SPI0_MOSI_OUT}, + {IO_SOURCE_SPI1_CLK_OUT, IO_SOURCE_SPI1_CSN_OUT, IO_SOURCE_SPI1_HOLD_OUT, IO_SOURCE_SPI1_WP_OUT, IO_SOURCE_SPI1_MISO_OUT, IO_SOURCE_SPI1_MOSI_OUT}, + }; + + int r = PINCTRL_SelSpiIn0(port, io_pin_clk, io_pin_csn, io_pin_hold, io_pin_wp, + io_pin_miso, io_pin_mosi); + + if (r) return r; + + if (PINCTRL_SetPadMux(io_pin_clk, source_tab[port][0])) return -1; + if (PINCTRL_SetPadMux(io_pin_csn, source_tab[port][1])) return -2; + if (PINCTRL_SetPadMux(io_pin_hold,source_tab[port][2])) return -3; + if (PINCTRL_SetPadMux(io_pin_wp, source_tab[port][3])) return -4; + if (PINCTRL_SetPadMux(io_pin_miso,source_tab[port][4])) return -5; + if (PINCTRL_SetPadMux(io_pin_mosi,source_tab[port][5])) return -6; + return 0; +} + int PINCTRL_SelIrIn(uint8_t io_pin_data) { return PINCTRL_SelInput(io_pin_data, IO_SOURCE_IR_DATA_IN, 2, 5, 20); diff --git a/src/FWlib/peripheral_pinctrl.h b/src/FWlib/peripheral_pinctrl.h index 800e620e8..b42d546c3 100644 --- a/src/FWlib/peripheral_pinctrl.h +++ b/src/FWlib/peripheral_pinctrl.h @@ -371,7 +371,27 @@ int PINCTRL_SelSwIn(uint8_t io_pin_dio, uint8_t io_pin_clk); /** * @brief Select SPI input IOs * - * Note: If an input is not used or invalid, set it to `IO_NOT_A_PIN`. + * This function is obsoleted. Use `PINCTRL_SelSpiPins` instead. + * + * @param[in] io_pin_clk CLK + * @param[in] io_pin_csn CS_n + * @param[in] io_pin_hold HOLD + * @param[in] io_pin_wp WP + * @param[in] io_pin_miso MISO + * @param[in] io_pin_mosi MOSI + * @return 0 if successful else non-0 + */ +#define PINCTRL_SelSpiIn PINCTRL_SelSpiPins + +/** + * @brief Configure all pins for SPI + * + * Note: If an IO is not used or invalid, set it to `IO_NOT_A_PIN`. + * + * This function configures **all** In, Out, or Bi-direction pins for SPI + * properly no matter if it is SPI master or slave. + * + * This is the recommended way to configure SPI IOs . * * @param[in] io_pin_clk CLK * @param[in] io_pin_csn CS_n @@ -381,7 +401,7 @@ int PINCTRL_SelSwIn(uint8_t io_pin_dio, uint8_t io_pin_clk); * @param[in] io_pin_mosi MOSI * @return 0 if successful else non-0 */ -int PINCTRL_SelSpiIn(spi_port_t port, +int PINCTRL_SelSpiPins(spi_port_t port, uint8_t io_pin_clk, uint8_t io_pin_csn, uint8_t io_pin_hold, diff --git a/src/FWlib/peripheral_pwm.c b/src/FWlib/peripheral_pwm.c index d453cf0bb..cb67a691f 100644 --- a/src/FWlib/peripheral_pwm.c +++ b/src/FWlib/peripheral_pwm.c @@ -109,6 +109,11 @@ void PWM_SetMode(const uint8_t channel_index, const PWM_WorkMode_t mode) PWM_SetRegBit(channel_index, 0x00, 7, mode, 3); } +PWM_WorkMode_t PWM_GetMode(const uint8_t channel_index) +{ + return (PWM_WorkMode_t)((APB_PWM->Channels[channel_index].Ctrl0 >> 7) & 0x7ul); +} + void PWM_HaltCtrlEnable2(const uint8_t channel_index, const uint8_t enable_a, const uint8_t enable_b) { PWM_SetRegBit(channel_index, 0x00, 2, (enable_b << 1) | enable_a, 2); diff --git a/src/FWlib/peripheral_pwm.h b/src/FWlib/peripheral_pwm.h index 51643de4d..def979be3 100644 --- a/src/FWlib/peripheral_pwm.h +++ b/src/FWlib/peripheral_pwm.h @@ -65,6 +65,8 @@ void PWM_SetMask(const uint8_t channel_index, const uint8_t mask_a, const uint8_ void PWM_SetMode(const uint8_t channel_index, const PWM_WorkMode_t mode); +PWM_WorkMode_t PWM_GetMode(const uint8_t channel_index); + // PMW Halt Mode // When the register HALT_ENABLE is set to 1, PWM will controlled by HALT_CONFIG registers. // The PWM_OUT_A will output the value of HALT_CONFIG[0], and the PWM_OUT_B will output the value of HALT_CONFIG[1] diff --git a/src/FWlib/peripheral_rtc.c b/src/FWlib/peripheral_rtc.c index 3ccbcb53e..417dfd799 100644 --- a/src/FWlib/peripheral_rtc.c +++ b/src/FWlib/peripheral_rtc.c @@ -101,7 +101,7 @@ void RTC_ModifyTime(uint16_t day, uint8_t hour, uint8_t minute, uint8_t second) int RTC_IsModificationDone(void) { - return APB_RTC->Ctrl & (1 << 16); + return APB_RTC->St & (1 << 16); } void RTC_ConfigAlarm(uint8_t hour, uint8_t minute, uint8_t second) diff --git a/src/FWlib/peripheral_sysctrl.c b/src/FWlib/peripheral_sysctrl.c index 1b1d4256a..284d20eb5 100644 --- a/src/FWlib/peripheral_sysctrl.c +++ b/src/FWlib/peripheral_sysctrl.c @@ -388,7 +388,7 @@ void SYSCTRL_SelectKeyScanClk(SYSCTRL_ClkMode mode) if (mode >= SYSCTRL_CLK_SLOW_DIV_1) { set_reg_bits(APB_SYSCTRL->CguCfg, mode, 4, 24); - set_reg_bit(APB_SYSCTRL->CguCfg, 1, 31); + set_reg_bit(APB_SYSCTRL->CguCfg + 1, 1, 31); } } @@ -1096,31 +1096,40 @@ void SYSCTRL_SelectMemoryBlocks(uint32_t block_map) set_reg_bits((volatile uint32_t *)(AON2_CTRL_BASE + 0x14), masked, 5, 8); } -void SYSCTRL_CacheControl(SYSCTRL_CacheMemCtrl i_cache, SYSCTRL_CacheMemCtrl d_cache) +static void SYSCTRL_CacheControl0(const uintptr_t base, SYSCTRL_CacheMemCtrl ctrl, uint8_t bit_offset) { - #define IC_BASE 0x40140000 - #define DC_BASE 0x40141000 - - uint8_t v = (i_cache << 1) | d_cache; - if (SYSCTRL_MEM_BLOCK_AS_CACHE != i_cache) - set_reg_bit((volatile uint32_t *)(IC_BASE), 0, 1); - if (SYSCTRL_MEM_BLOCK_AS_CACHE != d_cache) - set_reg_bit((volatile uint32_t *)(DC_BASE), 0, 1); + if (SYSCTRL_MEM_BLOCK_AS_CACHE != ctrl) + set_reg_bit((volatile uint32_t *)(base), 0, 1); - set_reg_bits(&APB_SYSCTRL->SysCtrl, v, 2, 0); + set_reg_bits(&APB_SYSCTRL->SysCtrl, ctrl, 1, bit_offset); - if (SYSCTRL_MEM_BLOCK_AS_CACHE == i_cache) + if (SYSCTRL_MEM_BLOCK_AS_CACHE == ctrl) { - *(volatile uint32_t *)(IC_BASE + 0x58) = (1UL<<31) | 0x4; - set_reg_bit((volatile uint32_t *)(IC_BASE), 1, 1); - } - if (SYSCTRL_MEM_BLOCK_AS_CACHE == d_cache) - { - *(volatile uint32_t *)(DC_BASE + 0x58) = (1UL<<31) | 0x4; - set_reg_bit((volatile uint32_t *)(DC_BASE), 1, 1); + *(volatile uint32_t *)(base + 0x58) = (1UL<<31) | 0x4; + set_reg_bit((volatile uint32_t *)(base), 1, 1); } } +void SYSCTRL_DCacheControl(SYSCTRL_CacheMemCtrl d_cache) +{ + #define DC_BASE 0x40141000 + + SYSCTRL_CacheControl0(DC_BASE, d_cache, 0); +} + +void SYSCTRL_ICacheControl(SYSCTRL_CacheMemCtrl i_cache) +{ + #define IC_BASE 0x40140000 + + SYSCTRL_CacheControl0(IC_BASE, i_cache, 1); +} + +void SYSCTRL_CacheControl(SYSCTRL_CacheMemCtrl i_cache, SYSCTRL_CacheMemCtrl d_cache) +{ + SYSCTRL_ICacheControl(i_cache); + SYSCTRL_DCacheControl(d_cache); +} + __attribute__((weak)) const factory_calib_data_t *flash_get_factory_calib_data(void) { // add `eflash.c` to the project! diff --git a/src/FWlib/peripheral_sysctrl.h b/src/FWlib/peripheral_sysctrl.h index 4d7dfcd49..58356fb39 100644 --- a/src/FWlib/peripheral_sysctrl.h +++ b/src/FWlib/peripheral_sysctrl.h @@ -1065,6 +1065,24 @@ void SYSCTRL_CacheControl(SYSCTRL_CacheMemCtrl i_cache, SYSCTRL_CacheMemCtrl d_c #define SYSCTRL_D_CACHE_AS_MEM_BASE_ADDR 0x2000E000 #define SYSCTRL_I_CACHE_AS_MEM_BASE_ADDR 0x20010000 +/** + * @brief Control the usage of D-Cache + * + * Ref to `SYSCTRL_CacheControl`. + * + * @param[in] d_cache usage of D-Cache (default: AS_CACHE) + */ +void SYSCTRL_DCacheControl(SYSCTRL_CacheMemCtrl d_cache); + +/** + * @brief Control the usage of I-Cache + * + * Ref to `SYSCTRL_CacheControl`. + * + * @param[in] i_cache usage of I-Cache (default: AS_CACHE) + */ +void SYSCTRL_ICacheControl(SYSCTRL_CacheMemCtrl i_cache); + #endif /** @@ -1180,6 +1198,8 @@ uint8_t SYSCTRL_GetLastWakeupSource(SYSCTRL_WakeupSource_t *source); * * Depend on `flash_get_factory_calib_data` of `eflash.c`. * + * This function uses `flash_prepare_factory_data()`. + * * For ING918: This function does nothing. * * @return 0 if initialized else failed diff --git a/src/FWlib/peripheral_usb.c b/src/FWlib/peripheral_usb.c index d22dc0657..872485dbe 100644 --- a/src/FWlib/peripheral_usb.c +++ b/src/FWlib/peripheral_usb.c @@ -465,7 +465,10 @@ void USB_NewTransfer(uint8_t ep, int32_t size, uint16_t nbPacket) break; default: AHB_USB->UsbDIxConfig[epNum-1].DISizex = ((size & 0x7FFFF) << 0) | ((nbPacket & 0x3FF) << 19) | (1 << 29); - AHB_USB->UsbDIxConfig[epNum-1].DICtrlx |= (1U << 31) | (0x1 << 26); + if (((AHB_USB->UsbDIxConfig[epNum-1].DICtrlx >> 18) & 0x3) == USB_EP_TYPE_ISO) + AHB_USB->UsbDIxConfig[epNum-1].DICtrlx |= (1U << 31) | (0x1 << 26) | ((AHB_USB->UsbDStatus & (1 << 8))? (1U << 28) : (1U << 29)); + else + AHB_USB->UsbDIxConfig[epNum-1].DICtrlx |= (1U << 31) | (0x1 << 26); break; } diff --git a/src/StartUP/ing916/ingsoc.h b/src/StartUP/ing916/ingsoc.h index 394e0e928..53ba65a9d 100644 --- a/src/StartUP/ing916/ingsoc.h +++ b/src/StartUP/ing916/ingsoc.h @@ -468,7 +468,8 @@ typedef struct __IO uint32_t _NOT_USED_4[442]; __IO uint32_t UsbDConfig; //0x0800 __IO uint32_t UsbDControl; //0x0804 - __IO uint32_t _NOT_USED_5[2]; + __IO uint32_t UsbDStatus; //0x0808 + __IO uint32_t _NOT_USED_5[1]; __IO uint32_t UsbDIMask; //0x0810 __IO uint32_t UsbDOMask; //0x0814 __IO uint32_t UsbDInt; //0x0818 diff --git a/src/StartUP/startup_cm32gpm3.s b/src/StartUP/startup_cm32gpm3.s index 7e44b2c58..53907e41a 100644 --- a/src/StartUP/startup_cm32gpm3.s +++ b/src/StartUP/startup_cm32gpm3.s @@ -9,9 +9,9 @@ ; * Copyright (C) 2012 ARM Limited. All rights reserved. ; * ; * @par -; * ARM Limited (ARM) is supplying this software for use with Cortex-M -; * processor based microcontrollers. This file can be freely distributed -; * within development tools that are supporting such ARM based processors. +; * ARM Limited (ARM) is supplying this software for use with Cortex-M +; * processor based microcontrollers. This file can be freely distributed +; * within development tools that are supporting such ARM based processors. ; * ; * @par ; * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -35,7 +35,7 @@ __initial_sp EXPORT __heap_base EXPORT __heap_limit - + Heap_Size EQU 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 @@ -53,7 +53,7 @@ __heap_limit __Vectors DCD 0 ; Top of Stack DCD Reset_Handler ; Reset Handler - + __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -71,9 +71,13 @@ Reset_Handler PROC ; this push is consumed by main PUSH {R1, LR} + ; save msp + MRS R1, MSP + MSR PSP, R1 + LDR R0, =__scatterload BX R0 - + ENDP ALIGN @@ -84,11 +88,15 @@ main PROC LDR R0, =app_main BLX R0 - + + ; restore msp + MRS R1, PSP + MSR MSP, R1 + POP {R1, PC} ENDP - + ALIGN END diff --git a/src/Tools/adc_cali.o b/src/Tools/adc_cali.o index 1896e1ace..95c7b831a 100644 Binary files a/src/Tools/adc_cali.o and b/src/Tools/adc_cali.o differ diff --git a/src/Tools/btstack_helper.c b/src/Tools/btstack_helper.c new file mode 100644 index 000000000..d39a74aed --- /dev/null +++ b/src/Tools/btstack_helper.c @@ -0,0 +1,168 @@ +#include "btstack_helper.h" + +#include "platform_api.h" +#include "btstack_defines.h" +#include "btstack_event.h" +#include "gap.h" + +uint8_t bt_helper_set_random_address(const uint8_t *address) +{ + uint8_t r = 0; + r |= gap_set_random_device_address(address); + r |= gap_set_adv_set_random_addr(BT_HELPER_DEFAULT_ADV_SET, address); + return r; +} + +void bt_helper_set_public_address(const uint8_t *address) +{ + bd_addr_t addr; + reverse_bd_addr(address, addr); + sysSetPublicDeviceAddr(addr); +} + +static btstack_packet_handler_t hci_callback = NULL; +static uint8_t hci_event_copy[300] = {0}; + +#define copy_data() do { flag = 1; memcpy(hci_event_copy, packet, size); } while (0) + +#define reverse_addr(type, field) do { \ + const type *_original = decode_hci_le_meta_event(packet, type); \ + type *_copied = (type *)decode_hci_le_meta_event(hci_event_copy, type); \ + reverse_bd_addr(_original->field, _copied->field); \ + } while (0) + +static void user_packet_handler(uint8_t packet_type, uint16_t channel, const uint8_t *packet, uint16_t size) +{ + uint8_t flag = 0; + uint8_t event = hci_event_packet_get_type(packet); + const btstack_user_msg_t *p_user_msg; + if (packet_type != HCI_EVENT_PACKET) return; + + if (size > sizeof(hci_event_copy)) + platform_raise_assertion("bt_helper", __LINE__); + + switch (event) + { + case HCI_EVENT_LE_META: + switch (hci_event_le_meta_get_subevent_code(packet)) + { + case HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE: + case HCI_SUBEVENT_LE_ENHANCED_CONNECTION_COMPLETE_V2: + copy_data(); + reverse_addr(le_meta_event_enh_create_conn_complete_t, peer_addr); + reverse_addr(le_meta_event_enh_create_conn_complete_t, local_resolv_priv_addr); + reverse_addr(le_meta_event_enh_create_conn_complete_t, peer_resolv_priv_addr); + break; + + case HCI_SUBEVENT_LE_DIRECT_ADVERTISING_REPORT: + copy_data(); + reverse_addr(le_meta_event_directed_adv_report_t, reports[0].address); + reverse_addr(le_meta_event_directed_adv_report_t, reports[0].direct_addr); + break; + + case HCI_SUBEVENT_LE_EXTENDED_ADVERTISING_REPORT: + copy_data(); + reverse_addr(le_meta_event_ext_adv_report_t, reports[0].address); + reverse_addr(le_meta_event_ext_adv_report_t, reports[0].direct_addr); + break; + + case HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_ESTABLISHED: + case HCI_SUBEVENT_LE_PERIODIC_ADVERTISING_SYNC_ESTABLISHED_V2: + copy_data(); + reverse_addr(le_meta_event_periodic_adv_sync_established_t, address); + break; + + case HCI_SUBEVENT_LE_SCAN_REQUEST_RECEIVED: + copy_data(); + reverse_addr(le_meta_event_scan_req_received_t, scanner_addr); + break; + + case HCI_SUBEVENT_LE_PRD_ADV_SYNC_TRANSFER_RCVD: + case HCI_SUBEVENT_LE_PRD_ADV_SYNC_TRANSFER_RCVD_V2: + copy_data(); + reverse_addr(le_meta_event_prd_adv_sync_transfer_recv_t, addr); + break; + + case HCI_SUBEVENT_LE_VENDOR_PRO_CONNECTIONLESS_IQ_REPORT: + copy_data(); + reverse_addr(le_meta_event_pro_connless_iq_report_t, addr); + break; + + default: + break; + } + break; + default: + break; + } + + hci_callback(HCI_EVENT_PACKET, BT_HELPER_HCI_CHANNEL, flag ? hci_event_copy : packet, size); +} + +void bt_helper_hci_add_event_handler(btstack_packet_callback_registration_t *callback_handler) +{ + hci_callback = callback_handler->callback; + callback_handler->callback = user_packet_handler; + hci_add_event_handler(callback_handler); +} + +int bt_helper_adv_start(const struct bt_le_adv_param *param, + const uint8_t *ad, size_t ad_len, + const uint8_t *sd, size_t sd_len) +{ + ext_adv_set_en_t adv_sets_en[] = { {.handle = param->id, .duration = 0, .max_events = 0} }; + adv_filter_policy_t policy = ADV_FILTER_ALLOW_ALL; + if (param->options & BT_LE_ADV_OPT_FILTER_CONN) + { + policy = param->options & BT_LE_ADV_OPT_FILTER_SCAN_REQ ? ADV_FILTER_ALLOW_SCAN_WLST_CON_WLST + : ADV_FILTER_ALLOW_SCAN_ALL_CON_WLST; + } + else + { + policy = param->options & BT_LE_ADV_OPT_FILTER_SCAN_REQ ? ADV_FILTER_ALLOW_SCAN_WLST_CON_ALL + : ADV_FILTER_ALLOW_ALL; + } + adv_event_properties_t properties = 0; + if (param->peer) + properties |= DIRECT_ADV_BIT; + if (param->options & BT_LE_ADV_OPT_EXT_ADV) + { + if (param->options & BT_LE_ADV_OPT_CONNECTABLE) + properties |= CONNECTABLE_ADV_BIT; + if (param->options & BT_LE_ADV_OPT_SCANNABLE) + properties |= SCANNABLE_ADV_BIT; + } + else + { + properties = LEGACY_PDU_BIT; + + if (param->options & BT_LE_ADV_OPT_SCANNABLE) + properties |= SCANNABLE_ADV_BIT; + if (param->options & BT_LE_ADV_OPT_CONNECTABLE) + { + properties |= CONNECTABLE_ADV_BIT; + if (param->peer == NULL) + properties |= SCANNABLE_ADV_BIT; + } + } + + gap_set_ext_adv_para(param->id, + properties, + param->interval_min, param->interval_max, + PRIMARY_ADV_ALL_CHANNELS, // Primary_Advertising_Channel_Map + BD_ADDR_TYPE_LE_RANDOM, // Own_Address_Type + param->peer ? param->peer->type : BD_ADDR_TYPE_LE_PUBLIC, // Peer_Address_Type (ignore) + param->peer ? param->peer->a : NULL, // Peer_Address (ignore) + policy, // Advertising_Filter_Policy + 0x00, // Advertising_Tx_Power + PHY_1M, // Primary_Advertising_PHY + 0, // Secondary_Advertising_Max_Skip + PHY_1M, // Secondary_Advertising_PHY + 0x00, // Advertising_SID + 0x00); // Scan_Request_Notification_Enable + gap_set_ext_adv_data(param->id, ad_len, (uint8_t*)ad); + gap_set_ext_scan_response_data(param->id, sd_len, (uint8_t*)sd); + gap_set_ext_adv_enable(1, sizeof(adv_sets_en) / sizeof(adv_sets_en[0]), adv_sets_en); + + return 0; +} \ No newline at end of file diff --git a/src/Tools/btstack_helper.h b/src/Tools/btstack_helper.h new file mode 100644 index 000000000..e1d149ea7 --- /dev/null +++ b/src/Tools/btstack_helper.h @@ -0,0 +1,447 @@ +#ifndef _btstack_helper_h +#define _btstack_helper_h + +#include +#include + +#include "bt_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + **************************************************************************************** + * @brief A set of Bluetooth helpers + * + * These helpers are intended to demonstrate usage of Bluetooth APIs from another + * perspective. + * + * NOTE: + * 1. all device addresses are using big-endian byte order. + **************************************************************************************** + */ + +#define BT_HELPER_DEFAULT_ADV_SET 0 +#define BT_HELPER_HCI_CHANNEL 1 + +/** + **************************************************************************************** + * @brief set random address + * + * This address can be used for scanning, initiating and advertising. + * + * @param address random address + * @return 0: Message is sent to controller; others: failed + **************************************************************************************** + */ +uint8_t bt_helper_set_random_address(const uint8_t *address); + +/** + **************************************************************************************** + * @brief set public address + * + * This function can only be used in `app_main`. + * + * @param address address + **************************************************************************************** + */ +void bt_helper_set_public_address(const uint8_t *address); + +/** + **************************************************************************************** + * @brief init HCI event converter + * + * This function converts device addresses in HCI events from little-endian. + * to **big-endian**. + * + * This can be used as a replacement of `hci_add_event_handler`, i.e. to use this, + * replace `hci_add_event_handler` with `bt_helper_hci_add_event_handler`. + * The `channel` param of the callback will receive `BT_HELPER_HCI_CHANNEL` + * instead of 0 in the case of `hci_add_event_handler`. + * + * This function can only be called once. + * + * @param callback_handler the callback function to receive the converted HCI + * events + **************************************************************************************** + */ +void bt_helper_hci_add_event_handler(btstack_packet_callback_registration_t *callback_handler); + +struct bt_le_adv_param; + +/** + **************************************************************************************** + * @brief Start advertising + * + * This function simulates `bt_le_adv_start()` in Zephyr. + * + * Note: This does not support all functionalities of `bt_le_adv_start()`. + * + * Set advertisement data, scan response data, advertisement parameters + * and start advertising. + * + * When the advertisement parameter peer address has been set the advertising + * will be directed to the peer. In this case advertisement data and scan + * response data parameters are ignored. If the mode is high duty cycle + * the timeout will be @ref BT_GAP_ADV_HIGH_DUTY_CYCLE_MAX_TIMEOUT. + * + * This function cannot be used with @ref BT_LE_ADV_OPT_EXT_ADV in the @p param.options. + * For extended advertising, the bt_le_ext_adv_* functions must be used. + * + * @param param Advertising parameters. + * @param ad Data to be used in advertisement packets. + * @param ad_len Number of elements in ad + * @param sd Data to be used in scan response packets. + * @param sd_len Number of elements in sd + * + * @return Zero on success or (negative) error code otherwise. + **************************************************************************************** + */ +int bt_helper_adv_start(const struct bt_le_adv_param *param, + const uint8_t *ad, size_t ad_len, + const uint8_t *sd, size_t sd_len); + + +/** + * NOTICE: Below code is copied from Zephyr Project (with minor modifications) + * + * https://zephyrproject.org/ + * + * https://github.com/zephyrproject-rtos/zephyr +*/ + +/** Bluetooth LE Device Address */ +typedef struct { + uint8_t type; + bd_addr_t a; +} bt_addr_le_t; + +/** LE Advertising Parameters. */ +struct bt_le_adv_param { + /** + * @brief Local identity. + * + * @note When extended advertising @kconfig{CONFIG_BT_EXT_ADV} is not + * enabled or not supported by the controller it is not possible + * to scan and advertise simultaneously using two different + * random addresses. + */ + uint8_t id; + + /** + * @brief Advertising Set Identifier, valid range 0x00 - 0x0f. + * + * @note Requires @ref BT_LE_ADV_OPT_EXT_ADV + **/ + uint8_t sid; + + /** + * @brief Secondary channel maximum skip count. + * + * Maximum advertising events the advertiser can skip before it must + * send advertising data on the secondary advertising channel. + * + * @note Requires @ref BT_LE_ADV_OPT_EXT_ADV + */ + uint8_t secondary_max_skip; + + /** Bit-field of advertising options */ + uint32_t options; + + /** Minimum Advertising Interval (N * 0.625 milliseconds) + * Minimum Advertising Interval shall be less than or equal to the + * Maximum Advertising Interval. The Minimum Advertising Interval and + * Maximum Advertising Interval should not be the same value (as stated + * in Bluetooth Core Spec 5.2, section 7.8.5) + * Range: 0x0020 to 0x4000 + */ + uint32_t interval_min; + + /** Maximum Advertising Interval (N * 0.625 milliseconds) + * Minimum Advertising Interval shall be less than or equal to the + * Maximum Advertising Interval. The Minimum Advertising Interval and + * Maximum Advertising Interval should not be the same value (as stated + * in Bluetooth Core Spec 5.2, section 7.8.5) + * Range: 0x0020 to 0x4000 + */ + uint32_t interval_max; + + /** + * @brief Directed advertising to peer + * + * When this parameter is set the advertiser will send directed + * advertising to the remote device. + * + * The advertising type will either be high duty cycle, or low duty + * cycle if the BT_LE_ADV_OPT_DIR_MODE_LOW_DUTY option is enabled. + * When using @ref BT_LE_ADV_OPT_EXT_ADV then only low duty cycle is + * allowed. + * + * In case of connectable high duty cycle if the connection could not + * be established within the timeout the connected() callback will be + * called with the status set to @ref BT_HCI_ERR_ADV_TIMEOUT. + */ + const bt_addr_le_t *peer; +}; + +#define BT_ID_DEFAULT BT_HELPER_DEFAULT_ADV_SET + +/** Advertising options */ +enum { + /** Convenience value when no options are specified. */ + BT_LE_ADV_OPT_NONE = 0, + + /** + * @brief Advertise as connectable. + * + * Advertise as connectable. If not connectable then the type of + * advertising is determined by providing scan response data. + * The advertiser address is determined by the type of advertising + * and/or enabling privacy @kconfig{CONFIG_BT_PRIVACY}. + */ + BT_LE_ADV_OPT_CONNECTABLE = BIT(0), + + /** + * @brief Advertise one time. + * + * Don't try to resume connectable advertising after a connection. + * This option is only meaningful when used together with + * BT_LE_ADV_OPT_CONNECTABLE. If set the advertising will be stopped + * when bt_le_adv_stop() is called or when an incoming (peripheral) + * connection happens. If this option is not set the stack will + * take care of keeping advertising enabled even as connections + * occur. + * If Advertising directed or the advertiser was started with + * @ref bt_le_ext_adv_start then this behavior is the default behavior + * and this flag has no effect. + */ + BT_LE_ADV_OPT_ONE_TIME = BIT(1), + + /** + * @brief Advertise using identity address. + * + * Advertise using the identity address as the advertiser address. + * @warning This will compromise the privacy of the device, so care + * must be taken when using this option. + * @note The address used for advertising will not be the same as + * returned by @ref bt_le_oob_get_local, instead @ref bt_id_get + * should be used to get the LE address. + */ + BT_LE_ADV_OPT_USE_IDENTITY = BIT(2), + + /** Advertise using GAP device name. + * + * Include the GAP device name automatically when advertising. + * By default the GAP device name is put at the end of the scan + * response data. + * When advertising using @ref BT_LE_ADV_OPT_EXT_ADV and not + * @ref BT_LE_ADV_OPT_SCANNABLE then it will be put at the end of the + * advertising data. + * If the GAP device name does not fit into advertising data it will be + * converted to a shortened name if possible. + * @ref BT_LE_ADV_OPT_FORCE_NAME_IN_AD can be used to force the device + * name to appear in the advertising data of an advert with scan + * response data. + * + * The application can set the device name itself by including the + * following in the advertising data. + * @code + * BT_DATA(BT_DATA_NAME_COMPLETE, name, sizeof(name) - 1) + * @endcode + */ + BT_LE_ADV_OPT_USE_NAME = BIT(3), + + /** + * @brief Low duty cycle directed advertising. + * + * Use low duty directed advertising mode, otherwise high duty mode + * will be used. + */ + BT_LE_ADV_OPT_DIR_MODE_LOW_DUTY = BIT(4), + + /** + * @brief Directed advertising to privacy-enabled peer. + * + * Enable use of Resolvable Private Address (RPA) as the target address + * in directed advertisements. + * This is required if the remote device is privacy-enabled and + * supports address resolution of the target address in directed + * advertisement. + * It is the responsibility of the application to check that the remote + * device supports address resolution of directed advertisements by + * reading its Central Address Resolution characteristic. + */ + BT_LE_ADV_OPT_DIR_ADDR_RPA = BIT(5), + + /** Use filter accept list to filter devices that can request scan + * response data. + */ + BT_LE_ADV_OPT_FILTER_SCAN_REQ = BIT(6), + + /** Use filter accept list to filter devices that can connect. */ + BT_LE_ADV_OPT_FILTER_CONN = BIT(7), + + /** Notify the application when a scan response data has been sent to an + * active scanner. + */ + BT_LE_ADV_OPT_NOTIFY_SCAN_REQ = BIT(8), + + /** + * @brief Support scan response data. + * + * When used together with @ref BT_LE_ADV_OPT_EXT_ADV then this option + * cannot be used together with the @ref BT_LE_ADV_OPT_CONNECTABLE + * option. + * When used together with @ref BT_LE_ADV_OPT_EXT_ADV then scan + * response data must be set. + */ + BT_LE_ADV_OPT_SCANNABLE = BIT(9), + + /** + * @brief Advertise with extended advertising. + * + * This options enables extended advertising in the advertising set. + * In extended advertising the advertising set will send a small header + * packet on the three primary advertising channels. This small header + * points to the advertising data packet that will be sent on one of + * the 37 secondary advertising channels. + * The advertiser will send primary advertising on LE 1M PHY, and + * secondary advertising on LE 2M PHY. + * Connections will be established on LE 2M PHY. + * + * Without this option the advertiser will send advertising data on the + * three primary advertising channels. + * + * @note Enabling this option requires extended advertising support in + * the peer devices scanning for advertisement packets. + * + * @note This cannot be used with bt_le_adv_start(). + */ + BT_LE_ADV_OPT_EXT_ADV = BIT(10), + + /** + * @brief Disable use of LE 2M PHY on the secondary advertising + * channel. + * + * Disabling the use of LE 2M PHY could be necessary if scanners don't + * support the LE 2M PHY. + * The advertiser will send primary advertising on LE 1M PHY, and + * secondary advertising on LE 1M PHY. + * Connections will be established on LE 1M PHY. + * + * @note Cannot be set if BT_LE_ADV_OPT_CODED is set. + * + * @note Requires @ref BT_LE_ADV_OPT_EXT_ADV. + */ + BT_LE_ADV_OPT_NO_2M = BIT(11), + + /** + * @brief Advertise on the LE Coded PHY (Long Range). + * + * The advertiser will send both primary and secondary advertising + * on the LE Coded PHY. This gives the advertiser increased range with + * the trade-off of lower data rate and higher power consumption. + * Connections will be established on LE Coded PHY. + * + * @note Requires @ref BT_LE_ADV_OPT_EXT_ADV + */ + BT_LE_ADV_OPT_CODED = BIT(12), + + /** + * @brief Advertise without a device address (identity or RPA). + * + * @note Requires @ref BT_LE_ADV_OPT_EXT_ADV + */ + BT_LE_ADV_OPT_ANONYMOUS = BIT(13), + + /** + * @brief Advertise with transmit power. + * + * @note Requires @ref BT_LE_ADV_OPT_EXT_ADV + */ + BT_LE_ADV_OPT_USE_TX_POWER = BIT(14), + + /** Disable advertising on channel index 37. */ + BT_LE_ADV_OPT_DISABLE_CHAN_37 = BIT(15), + + /** Disable advertising on channel index 38. */ + BT_LE_ADV_OPT_DISABLE_CHAN_38 = BIT(16), + + /** Disable advertising on channel index 39. */ + BT_LE_ADV_OPT_DISABLE_CHAN_39 = BIT(17), + + /** + * @brief Put GAP device name into advert data + * + * Will place the GAP device name into the advertising data rather + * than the scan response data. + * + * @note Requires @ref BT_LE_ADV_OPT_USE_NAME + */ + BT_LE_ADV_OPT_FORCE_NAME_IN_AD = BIT(18), + + /** + * @brief Advertise using a Non-Resolvable Private Address. + * + * A new NRPA is set when updating the advertising parameters. + * + * This is an advanced feature; most users will want to enable + * @kconfig{CONFIG_BT_EXT_ADV} instead. + * + * @note Not implemented when @kconfig{CONFIG_BT_PRIVACY}. + * + * @note Mutually exclusive with BT_LE_ADV_OPT_USE_IDENTITY. + */ + BT_LE_ADV_OPT_USE_NRPA = BIT(19), +}; + +/** + * @brief Initialize advertising parameters + * + * @param _options Advertising Options + * @param _int_min Minimum advertising interval + * @param _int_max Maximum advertising interval + * @param _peer Peer address, set to NULL for undirected advertising or + * address of peer for directed advertising. + */ +#define BT_LE_ADV_PARAM_INIT(_options, _int_min, _int_max, _peer) \ +{ \ + .id = BT_ID_DEFAULT, \ + .sid = 0, \ + .secondary_max_skip = 0, \ + .options = (_options), \ + .interval_min = (_int_min), \ + .interval_max = (_int_max), \ + .peer = (_peer), \ +} + +/** + * @brief Helper to declare advertising parameters inline + * + * @param _options Advertising Options + * @param _int_min Minimum advertising interval + * @param _int_max Maximum advertising interval + * @param _peer Peer address, set to NULL for undirected advertising or + * address of peer for directed advertising. + */ +#define BT_LE_ADV_PARAM(_options, _int_min, _int_max, _peer) \ + ((struct bt_le_adv_param[]) { \ + BT_LE_ADV_PARAM_INIT(_options, _int_min, _int_max, _peer) \ + }) + +#define BT_GAP_ADV_FAST_INT_MIN_1 0x0030 /* 30 ms */ +#define BT_GAP_ADV_FAST_INT_MAX_1 0x0060 /* 60 ms */ +#define BT_GAP_ADV_FAST_INT_MIN_2 0x00a0 /* 100 ms */ +#define BT_GAP_ADV_FAST_INT_MAX_2 0x00f0 /* 150 ms */ + +#define BT_LE_ADV_CONN BT_LE_ADV_PARAM(BT_LE_ADV_OPT_CONNECTABLE | \ + BT_LE_ADV_OPT_SCANNABLE, \ + BT_GAP_ADV_FAST_INT_MIN_2, \ + BT_GAP_ADV_FAST_INT_MAX_2, NULL) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/Tools/ecc_driver.c b/src/Tools/ecc_driver.c new file mode 100644 index 000000000..89ce181ab --- /dev/null +++ b/src/Tools/ecc_driver.c @@ -0,0 +1,127 @@ +#include +#include +#include "platform_api.h" + +#include "port_gen_os_driver.h" + +#define GEN_OS ((const gen_os_driver_t *)platform_get_gen_os_driver()) + +#include "ing_uecc.h" + +#define CURVE uECC_secp256r1() + +// See BLUETOOTH CORE SPECIFICATION Version 5.4 | Vol 3, Part H +// 2.3.5.6 LE Secure Connections pairing phase 2 + +// When the Security Manager is placed in a Debug mode it shall use the +// following Diffie-Hellman private / public key pair: +// Private key: 3f49f6d4 a3c55f38 74c9b3e3 d2103f50 4aff607b eb40b799 +// 5899b8a6 cd3c1abd +// Public key (X): 20b003d2 f297be2c 5e2c83a7 e9f9a5b9 eff49111 acf4fddb +// cc030148 0e359de6 +// Public key (Y): dc809c49 652aeb6d 63329abf 5a52155c 766345c2 8fed3024 +// 741c8ed0 1589d28b + +const static uint8_t debug_sk[32] = +{ + 0x3f, 0x49, 0xf6, 0xd4, 0xa3, 0xc5, 0x5f, 0x38, 0x74, 0xc9, 0xb3, 0xe3, 0xd2, + 0x10, 0x3f, 0x50, 0x4a, 0xff, 0x60, 0x7b, 0xeb, 0x40, 0xb7, 0x99, 0x58, 0x99, + 0xb8, 0xa6, 0xcd, 0x3c, 0x1a, 0xbd +}; + +/* +const static uint8_t debug_pk[32 * 2] = +{ + 0x20, 0xb0, 0x03, 0xd2, 0xf2, 0x97, 0xbe, 0x2c, + 0x5e, 0x2c, 0x83, 0xa7, 0xe9, 0xf9, 0xa5, 0xb9, + 0xef, 0xf4, 0x91, 0x11, 0xac, 0xf4, 0xfd, 0xdb, + 0xcc, 0x03, 0x01, 0x48, 0x0e, 0x35, 0x9d, 0xe6, + 0xdc, 0x80, 0x9c, 0x49, 0x65, 0x2a, 0xeb, 0x6d, + 0x63, 0x32, 0x9a, 0xbf, 0x5a, 0x52, 0x15, 0x5c, + 0x76, 0x63, 0x45, 0xc2, 0x8f, 0xed, 0x30, 0x24, + 0x74, 0x1c, 0x8e, 0xd0, 0x15, 0x89, 0xd2, 0x8b +}; +*/ + +struct ecc_keys +{ + gen_handle_t cmd_queue_handle; + uint8_t key_type; + + uint8_t sk[32]; + uint8_t pk[64]; + uint8_t peer_pk[64]; + uint8_t dh_sk[32]; +} ecc_keys = {0}; + +typedef uint8_t ecc_msg_t; + +enum ecc_cmd +{ + ECC_GEN_KEY_PAIR, + ECC_GEN_DHKEY, +}; + +int ecc_rng(uint8_t *dest, unsigned size) +{ + platform_hrng(dest, size); + return 1; +} + +static void ecc_task(void *param) +{ + ecc_msg_t msg; + int r; + for (;;) + { + if (GEN_OS->queue_recv_msg(ecc_keys.cmd_queue_handle, &msg) != 0) + continue; + + switch (msg) + { + case ECC_GEN_KEY_PAIR: + r = uECC_make_key(ecc_keys.pk, ecc_keys.sk, CURVE); + ll_p256_key_pair_generated(r ? 0 : 1, ecc_keys.pk); + break; + case ECC_GEN_DHKEY: + r = uECC_shared_secret(ecc_keys.peer_pk, + ecc_keys.key_type == 0 ? ecc_keys.sk : debug_sk, + ecc_keys.dh_sk, CURVE); + ll_dhkey_generated(r ? 0 : 1, ecc_keys.dh_sk); + break; + } + } +} + +static void start_generate_p256_key_pair(void) +{ + ecc_msg_t msg = ECC_GEN_KEY_PAIR; + GEN_OS->queue_send_msg(ecc_keys.cmd_queue_handle, &msg); +} + +static int start_generate_dhkey(int key_type, const uint8_t *remote_pub_key) +{ + if (uECC_valid_public_key(remote_pub_key, CURVE)) + { + ecc_msg_t msg = ECC_GEN_DHKEY; + ecc_keys.key_type = key_type; + memcpy(ecc_keys.peer_pk, remote_pub_key, sizeof(ecc_keys.peer_pk)); + GEN_OS->queue_send_msg(ecc_keys.cmd_queue_handle, &msg); + return 0; + } + else + return 0x12; // Invalid HCI Command Parameters +} + +void install_ecc_driver(void) +{ + ecc_keys.cmd_queue_handle = GEN_OS->queue_create(1, sizeof(ecc_msg_t)); + + uECC_set_rng(ecc_rng); + ll_install_ecc_engine(start_generate_p256_key_pair, start_generate_dhkey); + GEN_OS->task_create("ecc", + ecc_task, + NULL, + 256 * 4, + GEN_TASK_PRIORITY_LOW); +} diff --git a/src/Tools/ecc_driver.h b/src/Tools/ecc_driver.h new file mode 100644 index 000000000..4062e4c4f --- /dev/null +++ b/src/Tools/ecc_driver.h @@ -0,0 +1,23 @@ +#ifndef _ecc_driver_h +#define _ecc_driver_h + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Install a software-implemented ECC engine for Link Layer + * + * CAUTION: This is a reference for demonstration only. In production, private + * keys must be protected from unauthorized access. + * + * This is used for LE Secure Connection pairing. + * +*/ +void install_ecc_driver(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/Tools/platform_util.c b/src/Tools/platform_util.c index 8403d4896..fb6f40a52 100644 --- a/src/Tools/platform_util.c +++ b/src/Tools/platform_util.c @@ -1,4 +1,5 @@ #include "platform_util.h" +#include "eflash.h" const struct platform_info *platform_inspect2(uintptr_t binary_addr, int family) { @@ -7,7 +8,11 @@ const struct platform_info *platform_inspect2(uintptr_t binary_addr, int family) case INGCHIPS_FAMILY_918: return (const struct platform_info *)(binary_addr + 0xb0); case INGCHIPS_FAMILY_916: - return (const struct platform_info *)(binary_addr + 0xfc); + { + uintptr_t vect_addr = io_read(binary_addr + 4096); + return (const struct platform_info *)(vect_addr + 0xfc); + } + default: return (const struct platform_info *)0; } @@ -17,3 +22,12 @@ const struct platform_info *platform_inspect(uintptr_t binary_addr) { return platform_inspect2(binary_addr, INGCHIPS_FAMILY); } + +uintptr_t platform_get_vector_table_address(void) +{ +#if (INGCHIPS_FAMILY == INGCHIPS_FAMILY_916) + return io_read(FLASH_BASE + EFLASH_SECTOR_SIZE * 3); +#else + return FLASH_BASE; +#endif +} diff --git a/src/Tools/platform_util.h b/src/Tools/platform_util.h index 38bd7da5f..86e183694 100644 --- a/src/Tools/platform_util.h +++ b/src/Tools/platform_util.h @@ -10,7 +10,7 @@ extern "C" { struct platform_info { platform_ver_t version; - uintptr_t app_load_addr; + uintptr_t app_load_addr; }; /** @@ -29,13 +29,21 @@ const struct platform_info *platform_inspect2(uintptr_t binary_addr, int family) * @brief Inspect platform binary * * Note: It is assumed the platform binary is for the same family as the building target. - * + * * @param[in] binary_addr address of the binary * @return information of the binary **************************************************************************************** */ const struct platform_info *platform_inspect(uintptr_t binary_addr); +/** + **************************************************************************************** + * @brief Get vector table address of platform binary + * + * @return address of vector table + **************************************************************************************** + */ +uintptr_t platform_get_vector_table_address(void); #ifdef __cplusplus } diff --git a/src/Tools/power_ctrl.h b/src/Tools/power_ctrl.h index 66b29113a..057c5a054 100644 --- a/src/Tools/power_ctrl.h +++ b/src/Tools/power_ctrl.h @@ -5,17 +5,21 @@ extern "C" { #endif -// WARNING: This library is ONLY for ING918XX +// NOTE: This library is ONLY for ING918XX typedef enum { - POWER_CTRL_MODE_SAFE = 1, // power consumption is reduced a little bit + POWER_CTRL_MODE_SAFE = 1, // power consumption is reduced a little bit. // System might be more stable with this mode // under extreme conditions (high temperature, etc). POWER_CTRL_MODE_BALANCED = 0, // power consumption is significantly reduced, - // RF performance is better than AGGRESSIVE + // RF performance is better than AGGRESSIVE. + // If EXT_INT is used for wake-up, DO NOT use + // this mode. POWER_CTRL_MODE_AGGRESSIVE = 2, // power consumption is significantly reduced, - // RF performance might be degraded + // RF performance might be degraded. + // This mode can be used in advertising-only + // scenarios. POWER_CTRL_MODE_MAX, } power_ctrl_mode_t; diff --git a/src/Tools/power_ctrl.lib b/src/Tools/power_ctrl.lib index fe7a83266..fcfc64103 100644 Binary files a/src/Tools/power_ctrl.lib and b/src/Tools/power_ctrl.lib differ diff --git a/src/Tools/str_util.h b/src/Tools/str_util.h index 6f0837e1c..bf1bd2365 100644 --- a/src/Tools/str_util.h +++ b/src/Tools/str_util.h @@ -3,7 +3,7 @@ #include -#ifdef _cplusplus +#ifdef __cplusplus extern "C" { #endif @@ -50,7 +50,7 @@ const char *fmt_rtc_timestamp(char *str, uint32_t rtc_value); * @brief Format RTC value into HH:MM:SS.milli_sec,micro_sec * * @param[in] str buffer to hode the string - * @param[in] rtc_value RTC value (full 48bit) + * @param[in] rtc_value RTC value (full 48bit) * @return str **************************************************************************************** */ @@ -67,7 +67,7 @@ const char *fmt_rtc_timestamp_full(char *str, uint64_t rtc_value); */ const char *fmt_us_timestamp(char *str, uint64_t us_time); -#ifdef _cplusplus +#ifdef __cplusplus } #endif diff --git a/tools/gen_files.nim b/tools/gen_files.nim index 25e0501e5..e9ab2232e 100644 --- a/tools/gen_files.nim +++ b/tools/gen_files.nim @@ -1,5 +1,6 @@ import strutils, complex, algorithm, sugar import os, json, tables, std/jsonutils, std/strformat +import std/threadpool type SymDict = Table[string, string] @@ -55,20 +56,22 @@ const HEX_DATA = 0x00u8 HEX_EOF = 0x01u8 -proc fmt_hex_line(loc: uint32, t: uint8, b: seq[byte]): string = - result = newStringOfCap(100) - result.add ":" - var all: seq[byte] = @[cast[byte](len(b)), - cast[byte](loc shr 8), - cast[byte](loc and 0xffu8), - t] - all.add(b) +proc fmt_hex_line(result: var string, loc: uint32, t: uint8, b: seq[byte]) = + result = ":" var sum: uint8 = 0 - for i in 0 ..< all.len: - result.add fmt"{all[i]:02X}" - sum += all[i] + for v in [cast[byte](len(b)), cast[byte](loc shr 8), cast[byte](loc and 0xffu8), t]: + result.add v.toHex(2) + sum += v + for v in b: + result.add v.toHex(2) + sum += v sum = not(sum) + 1 - result.add fmt"{sum:02X}" + result.add sum.toHex(2) + +proc fmt_hex_line(loc: uint32, t: uint8, b: seq[byte]): string = + result = newStringOfCap(100) + fmt_hex_line(result, loc, t, b) + return result proc fmt_hex_ext_addr(loc: uint32): string = var u1 = cast[uint8](loc shr 8) @@ -92,13 +95,15 @@ proc dump_hex(f: File, b: seq[byte]; location: uint32) = var last_ext_addr: uint32 = 0xffffffffu32 var loc = location var l = b.partition(16) + var s = newStringOfCap(100) for i in 0 ..< l.len: var t = l[i] var ext = loc shr 16 if ext != last_ext_addr: f.writeLine(fmt_hex_ext_addr(ext)) last_ext_addr = ext - f.writeLine(fmt_hex_line(loc and 0xffffu32, HEX_DATA, t)) + s.fmt_hex_line(loc and 0xffffu32, HEX_DATA, t) + f.writeLine(s) loc += + 16 proc loadBin(f: string): seq[byte] = @@ -111,7 +116,8 @@ proc hex_xxxx(p, target: string, address: uint32, more: proc (f: File) {.closure defer: f.close() var bin = loadBin(joinPath(p, "platform.bin")) dump_hex(f, bin, address) - more(f) + {.cast(gcsafe).}: + more(f) f.writeLine(fmt_hex_line(0x00u32, HEX_EOF, @[])) proc hex_918(p, target: string, more: proc (f: File) {.closure.}) = @@ -138,10 +144,22 @@ proc hex_918(p: string) = hex_918(p, "platform_entry_lock.hex", (f: File) => dump_hex(f, entylock, 0x087fec)) +proc process_bin(x: string) = + var p = splitPath(x)[0] + var series = toLower splitPath(p)[1] + if series.startsWith("ing918"): + hex_918(p) + elif series.startsWith("ing916"): + hex_916(p) + else: + debugEcho "unknown: ", series + if paramCount() == 0: echo "usage: gen_files /path/to/sdk/bundles" quit(0) +echo "Please wait for a while..." + var sdk = paramStr(1) echo "searching files..." var all_binaries: seq[string] = @[] @@ -151,16 +169,10 @@ for x in walkDirRec(sdk): echo "generating symdefs..." for x in all_binaries: - gen_symdefs x + spawn gen_symdefs x +sync() echo "generating hex files..." for x in all_binaries: - var p = splitPath(x)[0] - var series = toLower splitPath(p)[1] - if series.startsWith("ing918"): - hex_918(p) - elif series.startsWith("ing916"): - hex_916(p) - else: - debugEcho "unknown: ", series - + spawn process_bin(x) +sync() \ No newline at end of file diff --git a/tools/icsdw916.py b/tools/icsdw916.py index 5cedc911b..3a65d7efc 100644 --- a/tools/icsdw916.py +++ b/tools/icsdw916.py @@ -27,7 +27,6 @@ def __init__(self): self.SEND_RAM_DATA=b'#$u2ram' self.ERASE_SECTOR = b'#$stera' self.CMD_LAUNCH = b'#$j2fsh' - self.CMD_JUMPD = b'#$jumpd' self.CMD_SET_BAUD= b'#$sbaud' self.CMD_FLASH_SET = b'#$fshst' self.CMD_LOCK = b'#$lockk'