From f18b2ec3823a29198b3c56b0496c4f7616b93299 Mon Sep 17 00:00:00 2001 From: zjli2019 Date: Mon, 10 Apr 2023 09:27:40 +0800 Subject: [PATCH 1/8] update HID mouse: use DIR_ADV. fix typos in _btstack_sync.c_. --- examples/hid_mouse/README.md | 1 + examples/hid_mouse/src/profile.c | 131 ++++++++++++++++++++++++++++--- src/Tools/btstack_sync.c | 4 +- 3 files changed, 123 insertions(+), 13 deletions(-) diff --git a/examples/hid_mouse/README.md b/examples/hid_mouse/README.md index 2e6a3c780..2c2b96f3f 100644 --- a/examples/hid_mouse/README.md +++ b/examples/hid_mouse/README.md @@ -7,6 +7,7 @@ This example demonstrates how to: * Manage bonding/paring data; * Report _fake_ mouse movements; * Use resolvable address; +* Use high duty adv; * Use QDEC (ING916xx). Note: diff --git a/examples/hid_mouse/src/profile.c b/examples/hid_mouse/src/profile.c index 162c0e801..cf37ebbc8 100644 --- a/examples/hid_mouse/src/profile.c +++ b/examples/hid_mouse/src/profile.c @@ -21,14 +21,18 @@ #include "../../peripheral_console/src/key_detector.h" -#define KV_KEY_IR (KV_USER_KEY_START) +enum +{ + KV_KEY_IR = KV_USER_KEY_START, + KV_KEY_PEER_USE_RPA +}; static sm_persistent_t sm_persistent = { .er = {1, 2, 3}, .ir = {0}, .identity_addr_type = BD_ADDR_TYPE_LE_RANDOM, - .identity_addr = {0xC3, 0x32, 0x33, 0x4e, 0x5d, 0x7d} + .identity_addr = {0xC3, 0x32, 0x33, 0x4e, 0x5d, 0x9d} }; extern void show_app_state(enum app_state state); @@ -74,6 +78,8 @@ hci_con_handle_t handle_send = INVALID_HANDLE; int is_advertising = 0; int is_clear_pairing_pending = 0; int waiting_for_paring = 0; +bd_addr_type_t peer_addr_type; +bd_addr_t peer_addr; uint16_t att_handle_protocol_mode; uint16_t att_handle_hid_ctrl_point; @@ -210,7 +216,7 @@ void mouse_report_movement(void) } } -void enable_adv(void); +void enable_adv(uint8_t use_dir_adv); void clear_pairing_data(void); void hex_print(const char *s, const uint8_t *data, int len) @@ -260,7 +266,7 @@ 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}}; -void setup_adv(void) +static void setup_pairing_adv(void) { gap_set_ext_adv_para(0, CONNECTABLE_ADV_BIT | SCANNABLE_ADV_BIT | LEGACY_PDU_BIT, @@ -280,6 +286,67 @@ void setup_adv(void) gap_set_ext_scan_response_data(0, sizeof(scan_data), (uint8_t*)scan_data); } +// Reference: BLUETOOTH CORE SPECIFICATION Version 5.4 | Vol 6, Part B +// 1.3.2.2 Private device address generation +void generate_rpa(uint8_t *addr, const uint8_t *irk) +{ + uint8_t key[16]; + uint8_t plain[16]; + uint8_t cipher[16]; + + reverse_bytes(irk, key, sizeof(key)); + + reverse_24(addr, plain); + memset(plain + 3, 0, 13); + + while (ll_aes_encrypt(key, plain, cipher) != 0) + vTaskDelay(10); + + memcpy(addr + 3, cipher + 13, 3); +} + +static void setup_directed_adv(void) +{ + bd_addr_t dir_peer_addr; + bd_addr_type_t dir_peer_type; + + 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); + + if (kv_get(KV_KEY_PEER_USE_RPA, NULL) != NULL) + { + dir_peer_type = BD_ADDR_TYPE_LE_RANDOM; + + platform_hrng(dir_peer_addr, 3); + dir_peer_addr[0] = (dir_peer_addr[0] & 0x0f) | 0x40; + generate_rpa(dir_peer_addr, dev->irk); + } + else + { + dir_peer_type = dev->addr_type; + memcpy(dir_peer_addr, dev->addr, sizeof(dir_peer_addr)); + } + + 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 + BD_ADDR_TYPE_LE_RANDOM, // Own_Address_Type + dir_peer_type, // Peer_Address_Type + dir_peer_addr, // Peer_Address + 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 +} + uint8_t *init_service(void); int is_already_paired(void) @@ -301,11 +368,16 @@ void clear_pairing_data(void) platform_reset(); } -void enable_adv(void) +void enable_adv(uint8_t use_dir_adv) { if (is_advertising) return; if (handle_send != INVALID_HANDLE) return; + if (waiting_for_paring || (use_dir_adv == 0)) + setup_pairing_adv(); + else + setup_directed_adv(); + is_advertising = 1; gap_set_ext_adv_enable(1, sizeof(adv_sets_en) / sizeof(adv_sets_en[0]), adv_sets_en); @@ -324,7 +396,6 @@ static void user_packet_handler(uint8_t packet_type, uint16_t channel, const uin if (btstack_event_state_get_state(packet) != HCI_STATE_WORKING) break; sm_private_random_address_generation_set_mode(GAP_RANDOM_ADDRESS_RESOLVABLE); - setup_adv(); waiting_for_paring = platform_read_persistent_reg(); platform_write_persistent_reg(0); break; @@ -333,9 +404,22 @@ 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: - handle_send = decode_hci_le_meta_event(packet, le_meta_event_enh_create_conn_complete_t)->handle; - att_set_db(handle_send, att_db_util_get_address()); - show_app_state(APP_CONN); + { + const le_meta_event_enh_create_conn_complete_t *complete = + decode_hci_le_meta_event(packet, le_meta_event_enh_create_conn_complete_t); + if (complete->status != 0) + { + is_advertising = 0; + platform_printf("DIR_ADV no responding. Retry.\n"); + enable_adv(platform_get_us_time() < 2000000); + break; + } + handle_send = complete->handle; + peer_addr_type = complete->peer_addr_type; + reverse_bd_addr(complete->peer_addr, peer_addr); + att_set_db(handle_send, att_db_util_get_address()); + show_app_state(APP_CONN); + } break; case HCI_SUBEVENT_LE_ADVERTISING_SET_TERMINATED: is_advertising = 0; @@ -360,7 +444,7 @@ static void user_packet_handler(uint8_t packet_type, uint16_t channel, const uin { if (is_already_paired()) { - enable_adv(); + enable_adv(1); } } break; @@ -394,7 +478,7 @@ static void sm_packet_handler(uint8_t packet_type, uint16_t channel, const uint8 hex_print("RA", sm_private_random_addr_update_get_address(packet), 6); gap_set_adv_set_random_addr(0, sm_private_random_addr_update_get_address(packet)); if (is_already_paired() || waiting_for_paring) - enable_adv(); + enable_adv(1); break; case SM_EVENT_JUST_WORKS_REQUEST: if (waiting_for_paring) @@ -430,6 +514,31 @@ static void sm_packet_handler(uint8_t packet_type, uint16_t channel, const uint8 if (0 == waiting_for_paring) gap_disconnect(sm_event_identity_resolving_failed_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); + switch (state_changed->reason) + { + case SM_FINAL_PAIRED: + platform_printf("SM: PAIRED\n"); + platform_printf("%d: ", peer_addr_type); + printf_hexdump(peer_addr, sizeof(peer_addr)); + platform_printf("\n"); + if ((peer_addr_type == BD_ADDR_TYPE_LE_RANDOM) + && ((peer_addr[0] & 0xC0) == 0x40)) + { + uint8_t flag = 1; + kv_put(KV_KEY_PEER_USE_RPA, &flag, sizeof(flag)); + } + else + kv_remove(KV_KEY_PEER_USE_RPA); + kv_commit(1); + break; + default: + break; + } + } + break; default: break; } diff --git a/src/Tools/btstack_sync.c b/src/Tools/btstack_sync.c index 6f70e14e1..ed0d6279f 100644 --- a/src/Tools/btstack_sync.c +++ b/src/Tools/btstack_sync.c @@ -231,7 +231,7 @@ static void gatt_client_sync_mark_done(struct btstack_synced_runner *runner) GEN_OS->event_set(runner->done_evt); } -static void gatt_client_sync_disovered(service_node_t *first, void *user_data, int err_code) +static void gatt_client_sync_discovered(service_node_t *first, void *user_data, int err_code) { struct btstack_synced_runner *runner = (struct btstack_synced_runner *)user_data; *runner->discover_all.err_code = err_code; @@ -280,7 +280,7 @@ void write_value_callback(uint8_t packet_type, uint16_t con_handle, const uint8_ static void discover_all(struct btstack_synced_runner *runner, uint16_t _) { runner->discover_all.r = gatt_client_util_discover_all(runner->discover_all.con_handle, - gatt_client_sync_disovered, runner); + gatt_client_sync_discovered, runner); } static void read_value(struct btstack_synced_runner *runner, uint16_t _) From 9858e0736bd2e25f0402981ca5d4a98099010105 Mon Sep 17 00:00:00 2001 From: ruiminw <112598619+ruiminw@users.noreply.github.com> Date: Tue, 11 Apr 2023 14:57:23 +0800 Subject: [PATCH 2/8] upload bsp usb msc file 1. four functions are provided in bsp msc: ram usb disk, flash usb disk w file system, flash usb disk wo file system, drag-n-drop downloader 2. add flash page erase/write function --- src/BSP/bsp_usb_msc.c | 1401 ++++++++++++++++++++++++++++++++++++ src/BSP/bsp_usb_msc.h | 309 ++++++++ src/BSP/eflash.c | 43 ++ src/BSP/eflash.h | 11 + src/FWlib/peripheral_usb.h | 12 + src/Tools/rom_tools.h | 13 + 6 files changed, 1789 insertions(+) create mode 100644 src/BSP/bsp_usb_msc.c create mode 100644 src/BSP/bsp_usb_msc.h diff --git a/src/BSP/bsp_usb_msc.c b/src/BSP/bsp_usb_msc.c new file mode 100644 index 000000000..47c02caab --- /dev/null +++ b/src/BSP/bsp_usb_msc.c @@ -0,0 +1,1401 @@ +#include +#include +#include "ingsoc.h" +#include "platform_api.h" +#include "bsp_usb_msc.h" +#include "eflash.h" +#include "ota_service.h" + +/* User defined area */ +#define BSP_USB_MSC_FUNC BSP_USB_MSC_FLASH_DISK + +#if BSP_USB_MSC_FUNC == BSP_USB_MSC_RAM_DISK +#define VFS_DISK_BLOCK_NUM (16) /*8K is the minimum size, 8 * 512 = 8KB*/ +#define VFS_DISK_BLOCK_SIZE (512) +#define VFS_TOTAL_MEM_SIZE KB(8) +#elif BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK || BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK_NO_VFS \ + || BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK_DOWNLOADER +#define VFS_START_ADDR (0x02040000) +#define VFS_DISK_BLOCK_NUM (512) +#define VFS_DISK_BLOCK_SIZE (512) +#define VFS_TOTAL_MEM_SIZE KB(256) +#endif + +/* declaration */ +static void bsp_msc_image_detect_and_download(uint32_t sector, uint8_t *buf, uint32_t num_of_sectors); + +/* variables and functions area */ +const USB_DEVICE_DESCRIPTOR_REAL_T DeviceDescriptor __attribute__ ((aligned (4))) = USB_DEVICE_DESCRIPTOR; + +#define EP_IN_IDX 0 +#define EP_OUT_IDX 1 +const BSP_USB_DESC_STRUCTURE_T ConfigDescriptor __attribute__ ((aligned (4))) = +{USB_CONFIG_DESCRIPTOR, {USB_INTERFACE_DESCRIPTOR},{USB_EP_1_DESCRIPTOR,USB_EP_2_DESCRIPTOR}}; +const uint8_t StringDescriptor_0[] __attribute__ ((aligned (4))) = USB_STRING_LANGUAGE; +const uint8_t StringDescriptor_1[] __attribute__ ((aligned (4))) = USB_STRING_MANUFACTURER; +const uint8_t StringDescriptor_2[] __attribute__ ((aligned (4))) = USB_STRING_PRODUCT; +const uint8_t StringInquiryData[] = USBD_MSC_INQUIRY_DATA; + +BSP_USB_MSC_VAR_s USB_Var; +uint8_t DataRecvBuf[EP_X_MPS_BYTES] __attribute__ ((aligned (4))); +uint8_t DataSendBuf[EP_X_MPS_BYTES] __attribute__ ((aligned (4))); +uint8_t DataMscBuffer[VFS_DISK_BLOCK_SIZE]; + +#if BSP_USB_MSC_FUNC == BSP_USB_MSC_RAM_DISK +uint8_t msc_disk[VFS_DISK_BLOCK_NUM][VFS_DISK_BLOCK_SIZE] = +#endif +#if BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK || BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK_DOWNLOADER +const uint8_t msc_disk[5][VFS_DISK_BLOCK_SIZE] = +#endif +#if BSP_USB_MSC_FUNC != BSP_USB_MSC_FLASH_DISK_NO_VFS +{ + //------------- Block0: Boot Sector -------------// + // BS_jmpBoot = EB; BS_OEMName = MSDOS; BPB_BytsPerSec = VFS_DISK_BLOCK_SIZE; BPB_RsvdSecCnt = 1; + // BPB_NumFATs = 1; BPB_RootEntCnt = 16; BPB_TotSec16 = VFS_DISK_BLOCK_NUM; BPB_Media = F8; BPB_FATSz16 = 2; + // BPB_SecPerTrk = 1; BPB_NumHeads = 1; BPB_HiddSec = 0; + // BPB_TotSec32 = 0; BS_DrvNum = 80; BS_VolID = 1234; BS_VolLab = INGCHIPSMSC; BS_FilSysType = FAT12 + { + 0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, 0x00, + 0x01, 0x10, 0x00, VFS_DISK_BLOCK_NUM&0xFF, (VFS_DISK_BLOCK_NUM>>8)&0xFF, 0xF8, 0x02, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x34, 0x12, 0x00, 0x00, 'I' , 'N' , 'G' , 'C' , 'H' , + 'I' , 'P' , 'S' , 'M' , 'S' , 'C' , 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 0x55, 0xAA + }, + + //------------- Block1: FAT12 Table -------------// + { + 0xF8, 0xFF, 0xFF, 0xFF, 0x0F // first 2 entries are reserved + }, + { + 0x00, + }, + //------------- Block3: Root Directory -------------// + // DIR_Name = ; DIR_Attr = VOLUME ID; DIR_CrtTime = 0; DIR_CrtDate = 0; + // DIR_CrtDate = 0; DIR_LstAccDate = 0; DIR_FileSize = SIZEOF() + { + // first entry is volume label + 'I' , 'N' , 'G' , 'C' , 'H' , 'I' , 'P' , 'S' , 'M' , 'S' , 'C' , 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x6D, 0x6f, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + // second entry is readme file + 'R' , 'E' , 'A' , 'D' , 'M' , 'E' , ' ' , ' ' , 'T' , 'X' , 'T' , 0x20, 0x00, 0xC6, 0x52, 0x6D, + 0x6f, 0x56, 0x6f, 0x56, 0x00, 0x00, 0x88, 0x6D, 0x6f, 0x56, 0x02, 0x00, + sizeof(README_CONTENTS)-1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) + }, + + //------------- Block4: Readme Content -------------// + README_CONTENTS +}; +#endif + +void bsp_msc_write_sect(uint32_t sector, uint8_t *buf, uint32_t num_of_sectors) +{ + #if BSP_USB_MSC_FUNC == BSP_USB_MSC_RAM_DISK + memcpy((void*)(msc_disk[sector]), buf, num_of_sectors * VFS_DISK_BLOCK_SIZE); + #endif + + #if BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK || BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK_NO_VFS + program_flash_page(VFS_START_ADDR + (sector * VFS_DISK_BLOCK_SIZE), buf, num_of_sectors * VFS_DISK_BLOCK_SIZE); + #endif + + #if BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK_DOWNLOADER + bsp_msc_image_detect_and_download(sector, buf, num_of_sectors); + #endif +} + +void bsp_msc_read_sect(uint32_t sector, uint8_t *buf, uint32_t num_of_sectors) +{ + #if BSP_USB_MSC_FUNC == BSP_USB_MSC_RAM_DISK + memcpy(buf, msc_disk[sector], num_of_sectors * VFS_DISK_BLOCK_SIZE); + #endif + + #if BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK || BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK_NO_VFS \ + || BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK_DOWNLOADER + memcpy(buf, (void*)(VFS_START_ADDR + (sector * VFS_DISK_BLOCK_SIZE)), num_of_sectors * VFS_DISK_BLOCK_SIZE); + #endif +} + +void bsp_msc_set_stall_ep_ (uint32_t EPNum) +{ + if(0 == USB_EP_NUM(EPNum)) + { + USB_SetEp0Stall(EPNum); + } + else + { + USB_SetStallEp(EPNum, U_TRUE); + } +} + +void bsp_msc_clr_stall_ep_ (uint32_t EPNum) +{ + USB_SetStallEp(EPNum, U_FALSE); +} + +uint32_t bsp_msc_write_ep (uint32_t EPNum, uint8_t *pData, uint32_t cnt) +{ + uint32_t status = USB_ERROR_NONE; + + if(!USB_IS_EP_DIRECTION_IN(EPNum)){ + return 0; + } + + memcpy(DataSendBuf, pData, cnt); + status |= USB_SendData(EPNum, (void*)DataSendBuf, cnt, 0); + + return cnt; +} + +uint32_t bsp_msc_read_ep (uint32_t EPNum, uint8_t *pData, uint32_t size) +{ + uint32_t cnt = size; + USB_SETUP_T* setup = USB_GetEp0SetupData(); + + if(USB_IS_EP_DIRECTION_IN(EPNum)){ + return 0; + } + + if(0 == USB_EP_NUM(EPNum)) + { + cnt = size;//sizeof(USB_SETUP_T); + memcpy(pData, setup, cnt); + return cnt; + } + else + { + cnt = USB_GetTransferedSize(EPNum); + if(size < cnt) + { + cnt = size; + } + memcpy(pData, DataRecvBuf, cnt); + + USB_RecvData(EPNum, DataRecvBuf, sizeof(DataRecvBuf), 1<wIndex & 0x8F; + m = (n & 0x80) ? ((1 << 16) << (n & 0x0F)) : (1 << n); + + if ((n == (USB_EP_DIRECTION_IN(EP_MSC_IN))) && ((USB_Var.uEndPointMask & m) != 0)) { + if (USB_Var.USB_MSC_CSW.dSignature == MSC_CSW_Signature) { + bsp_msc_write_ep(USB_EP_DIRECTION_IN(EP_MSC_IN), (uint8_t *)&USB_Var.USB_MSC_CSW, sizeof(USB_Var.USB_MSC_CSW)); + } + } +} + +void bsp_msc_set_csw(void) +{ + USB_Var.USB_MSC_CSW.dSignature = MSC_CSW_Signature; + bsp_msc_write_ep(USB_EP_DIRECTION_IN(EP_MSC_IN), (uint8_t *)&USB_Var.USB_MSC_CSW, sizeof(USB_Var.USB_MSC_CSW)); + USB_Var.BulkStage = MSC_BS_CSW; +} + +uint8_t bsp_msc_reset(void) +{ + USB_Var.uEndPointMask = 0x00000000; /* EP must stay stalled */ + USB_Var.USB_MSC_CSW.dSignature = 0; /* invalid signature */ + USB_Var.BulkStage = MSC_BS_RESET; + return (U_TRUE); +} + +uint32_t bsp_msc_check_media(void) +{ + USB_Var.uMediaReadyEx = USB_Var.uMediaReady; + + if (!USB_Var.uMediaReady) { + if (USB_Var.USB_MSC_CBW.dDataLength) { + if ((USB_Var.USB_MSC_CBW.bmFlags & 0x80) != 0) { + bsp_msc_set_stall_ep(USB_EP_DIRECTION_IN(EP_MSC_IN)); + } else { + if (USB_Var.USB_MSC_CSW.dDataResidue != USB_Var.BulkLen) { + // Only stall if this isn't the last transfer + bsp_msc_set_stall_ep(EP_MSC_OUT); + } + } + } + + USB_Var.USB_MSC_CSW.bStatus = CSW_CMD_FAILED; + bsp_msc_set_csw(); + return (U_FALSE); + } + + return (U_TRUE); +} + + +void bsp_msc_memory_read(void) +{ + uint32_t n, m; + + if (USB_Var.Block >= USB_Var.uBlockCount) { + n = 0; + bsp_msc_set_stall_ep(USB_EP_DIRECTION_IN(EP_MSC_IN)); + USB_Var.USB_MSC_CSW.bStatus = CSW_CMD_PASSED; + bsp_msc_set_csw(); + } else { + if (USB_Var.Length > USBD_MSC_MAX_PACKET) { + n = USBD_MSC_MAX_PACKET; + } else { + n = USB_Var.Length; + } + } + + if (!bsp_msc_check_media()) { + n = 0; + } + + if ((USB_Var.Offset == 0) && (n != 0)) { + m = (USB_Var.Length + (USB_Var.uBlockSize - 1)) / USB_Var.uBlockSize; + + if (m > USB_Var.uBlockGroup) { + m = USB_Var.uBlockGroup; + } + + bsp_msc_read_sect(USB_Var.Block, USB_Var.uBlockBuf, m); + } + + if (n) { + bsp_msc_write_ep(USB_EP_DIRECTION_IN(EP_MSC_IN), &USB_Var.uBlockBuf[USB_Var.Offset], n); + USB_Var.Offset += n; + USB_Var.Length -= n; + } + + if (USB_Var.Offset == USB_Var.uBlockGroup * USB_Var.uBlockSize) { + USB_Var.Offset = 0; + USB_Var.Block += USB_Var.uBlockGroup; + } + + USB_Var.USB_MSC_CSW.dDataResidue -= n; + + if (!n) { + return; + } + + if (USB_Var.Length == 0) { + USB_Var.BulkStage = MSC_BS_DATA_IN_LAST; + USB_Var.USB_MSC_CSW.bStatus = CSW_CMD_PASSED; + } +} + +void bsp_msc_memory_write(void) +{ + uint32_t n; + + if (USB_Var.Block >= USB_Var.uBlockCount) { + USB_Var.BulkLen = 0; + bsp_msc_set_stall_ep(EP_MSC_OUT); + USB_Var.USB_MSC_CSW.bStatus = CSW_CMD_PASSED; + bsp_msc_set_csw(); + } + + if (!bsp_msc_check_media()) { + USB_Var.BulkLen = 0; + } + + if (USB_Var.Offset + USB_Var.BulkLen > USB_Var.uBlockSize) { + // This write would have overflowed USB_Var.uBlockBuf + return; + } + + for (n = 0; n < USB_Var.BulkLen; n++) { + USB_Var.uBlockBuf[USB_Var.Offset + n] = USB_Var.uBulkBuf[n]; + } + + USB_Var.Offset += USB_Var.BulkLen; + USB_Var.Length -= USB_Var.BulkLen; + + if (USB_Var.BulkLen) { + if ((USB_Var.Length == 0) && (USB_Var.Offset != 0)) { + n = (USB_Var.Offset + (USB_Var.uBlockSize - 1)) / USB_Var.uBlockSize; + + if (n > USB_Var.uBlockGroup) { + n = USB_Var.uBlockGroup; + } + + bsp_msc_write_sect(USB_Var.Block, USB_Var.uBlockBuf, n); + + USB_Var.Offset = 0; + USB_Var.Block += n; + } else if (USB_Var.Offset == USB_Var.uBlockGroup * USB_Var.uBlockSize) { + bsp_msc_write_sect(USB_Var.Block, USB_Var.uBlockBuf, USB_Var.uBlockGroup); + USB_Var.Offset = 0; + USB_Var.Block += USB_Var.uBlockGroup; + } + } + + USB_Var.USB_MSC_CSW.dDataResidue -= USB_Var.BulkLen; + + if (!USB_Var.BulkLen) { + return; + } + + if ((USB_Var.Length == 0) || (USB_Var.BulkStage == MSC_BS_CSW)) { + USB_Var.USB_MSC_CSW.bStatus = CSW_CMD_PASSED; + bsp_msc_set_csw(); + } +} + +void bsp_msc_memory_verify(void) +{ + uint32_t n; + + if (USB_Var.Block >= USB_Var.uBlockCount) { + USB_Var.BulkLen = 0; + bsp_msc_set_stall_ep(EP_MSC_OUT); + USB_Var.USB_MSC_CSW.bStatus = CSW_CMD_PASSED; + bsp_msc_set_csw(); + } + + if (!bsp_msc_check_media()) { + USB_Var.BulkLen = 0; + } + + if (USB_Var.BulkLen) { + if ((USB_Var.Offset == 0) && (USB_Var.BulkLen != 0)) { + n = (USB_Var.Length + (USB_Var.uBlockSize - 1)) / USB_Var.uBlockSize; + + if (n > USB_Var.uBlockGroup) { + n = USB_Var.uBlockGroup; + } + + bsp_msc_read_sect(USB_Var.Block, USB_Var.uBlockBuf, n); + } + + for (n = 0; n < USB_Var.BulkLen; n++) { + if (USB_Var.uBlockBuf[USB_Var.Offset + n] != USB_Var.uBulkBuf[n]) { + USB_Var.MemOK = U_FALSE; + break; + } + } + } + + USB_Var.Offset += USB_Var.BulkLen; + USB_Var.Length -= USB_Var.BulkLen; + + if (USB_Var.Offset == USB_Var.uBlockGroup * USB_Var.uBlockSize) { + USB_Var.Offset = 0; + USB_Var.Block += USB_Var.uBlockGroup; + } + + USB_Var.USB_MSC_CSW.dDataResidue -= USB_Var.BulkLen; + + if (!USB_Var.BulkLen) { + return; + } + + if ((USB_Var.Length == 0) || (USB_Var.BulkStage == MSC_BS_CSW)) { + USB_Var.USB_MSC_CSW.bStatus = (USB_Var.MemOK) ? CSW_CMD_PASSED : CSW_CMD_FAILED; + bsp_msc_set_csw(); + } +} + +uint8_t bsp_msc_rw_setup(void) +{ + uint32_t n; + /* Logical USB_Var.Block Address of First USB_Var.Block */ + n = (USB_Var.USB_MSC_CBW.CB[2] << 24) | + (USB_Var.USB_MSC_CBW.CB[3] << 16) | + (USB_Var.USB_MSC_CBW.CB[4] << 8) | + (USB_Var.USB_MSC_CBW.CB[5] << 0); + USB_Var.Block = n; + USB_Var.Offset = 0; + + /* Number of Blocks to transfer */ + switch (USB_Var.USB_MSC_CBW.CB[0]) { + case SCSI_WRITE10: + case SCSI_VERIFY10: + if (!bsp_msc_check_media()) { + return (U_FALSE); + } + + case SCSI_READ10: + n = (USB_Var.USB_MSC_CBW.CB[7] << 8) | + (USB_Var.USB_MSC_CBW.CB[8] << 0); + break; + + case SCSI_WRITE12: + if (!bsp_msc_check_media()) { + return (U_FALSE); + } + + case SCSI_READ12: + n = (USB_Var.USB_MSC_CBW.CB[6] << 24) | + (USB_Var.USB_MSC_CBW.CB[7] << 16) | + (USB_Var.USB_MSC_CBW.CB[8] << 8) | + (USB_Var.USB_MSC_CBW.CB[9] << 0); + break; + } + + USB_Var.Length = n * USB_Var.uBlockSize; + + if (USB_Var.USB_MSC_CBW.dDataLength == 0) { /* host requests no data */ + USB_Var.USB_MSC_CSW.bStatus = CSW_CMD_FAILED; + bsp_msc_set_csw(); + return (U_FALSE); + } + + if (USB_Var.USB_MSC_CBW.dDataLength != USB_Var.Length) { + if ((USB_Var.USB_MSC_CBW.bmFlags & 0x80) != 0) { /* stall appropriate EP */ + bsp_msc_set_stall_ep(USB_EP_DIRECTION_IN(EP_MSC_IN)); + } else { + bsp_msc_set_stall_ep(EP_MSC_OUT); + } + + USB_Var.USB_MSC_CSW.bStatus = CSW_CMD_FAILED; + bsp_msc_set_csw(); + return (U_FALSE); + } + + return (U_TRUE); +} + + + +uint8_t bsp_msc_data_in_format(void) +{ + if (USB_Var.USB_MSC_CBW.dDataLength == 0) { + USB_Var.USB_MSC_CSW.bStatus = CSW_PHASE_ERROR; + bsp_msc_set_csw(); + return (U_FALSE); + } + + if ((USB_Var.USB_MSC_CBW.bmFlags & 0x80) == 0) { + bsp_msc_set_stall_ep(EP_MSC_OUT); + USB_Var.USB_MSC_CSW.bStatus = CSW_PHASE_ERROR; + bsp_msc_set_csw(); + return (U_FALSE); + } + + return (U_TRUE); +} + +void bsp_msc_data_in_transfer(void) +{ + if (USB_Var.BulkLen >= USB_Var.USB_MSC_CBW.dDataLength) { + USB_Var.BulkLen = USB_Var.USB_MSC_CBW.dDataLength; + USB_Var.BulkStage = MSC_BS_DATA_IN_LAST; + } else { + USB_Var.BulkStage = MSC_BS_DATA_IN_LAST_STALL; /* short or zero packet */ + } + + bsp_msc_write_ep(USB_EP_DIRECTION_IN(EP_MSC_IN), USB_Var.uBulkBuf, USB_Var.BulkLen); + USB_Var.USB_MSC_CSW.dDataResidue -= USB_Var.BulkLen; + USB_Var.USB_MSC_CSW.bStatus = CSW_CMD_PASSED; +} + +void bsp_msc_test_unit_ready(void) +{ + if (USB_Var.USB_MSC_CBW.dDataLength != 0) { + if ((USB_Var.USB_MSC_CBW.bmFlags & 0x80) != 0) { + bsp_msc_set_stall_ep(USB_EP_DIRECTION_IN(EP_MSC_IN)); + } else { + bsp_msc_set_stall_ep(EP_MSC_OUT); + } + + USB_Var.USB_MSC_CSW.bStatus = CSW_CMD_FAILED; + bsp_msc_set_csw(); + return; + } + + if (!bsp_msc_check_media()) { + return; + } + + USB_Var.USB_MSC_CSW.bStatus = CSW_CMD_PASSED; + bsp_msc_set_csw(); +} + +void bsp_msc_request_sense(void) +{ + if (!bsp_msc_data_in_format()) { + return; + } + + memset(USB_Var.uBulkBuf,0,sizeof(USB_Var.uBulkBuf)); + USB_Var.uBulkBuf[ 0] = 0x70; /* Response Code */ + USB_Var.uBulkBuf[ 1] = 0x00; + + if ((USB_Var.uMediaReadyEx ^ USB_Var.uMediaReady) & USB_Var.uMediaReady) { /* If media state changed to ready */ + USB_Var.uBulkBuf[ 2] = 0x06; /* UNIT ATTENTION */ + USB_Var.uBulkBuf[12] = 0x28; /* Additional Sense Code: Not ready to ready transition */ + USB_Var.uBulkBuf[13] = 0x00; /* Additional Sense Code Qualifier */ + USB_Var.uMediaReadyEx = USB_Var.uMediaReady; + } else if (!USB_Var.uMediaReady) { + USB_Var.uBulkBuf[ 2] = 0x02; /* NOT READY */ + USB_Var.uBulkBuf[12] = 0x3A; /* Additional Sense Code: Medium not present */ + USB_Var.uBulkBuf[13] = 0x00; /* Additional Sense Code Qualifier */ + } else { + if (USB_Var.USB_MSC_CSW.bStatus == CSW_CMD_PASSED) { + USB_Var.uBulkBuf[ 2] = 0x00; /* NO SENSE */ + USB_Var.uBulkBuf[12] = 0x00; /* Additional Sense Code: No additional code */ + USB_Var.uBulkBuf[13] = 0x00; /* Additional Sense Code Qualifier */ + } else { + USB_Var.uBulkBuf[ 2] = 0x05; /* ILLEGAL REQUEST */ + USB_Var.uBulkBuf[12] = 0x20; /* Additional Sense Code: Invalid command */ + USB_Var.uBulkBuf[13] = 0x00; /* Additional Sense Code Qualifier */ + } + } + + USB_Var.uBulkBuf[ 7] = 0x0A; /* Additional USB_Var.Length */ + + USB_Var.BulkLen = 18; + bsp_msc_data_in_transfer(); +} + +void bsp_msc_inquiry(void) +{ + uint8_t i; + uint8_t *ptr_str; + + if (!bsp_msc_data_in_format()) { + return; + } + + USB_Var.uBulkBuf[ 0] = 0x00; /* Direct Access Device */ + USB_Var.uBulkBuf[ 1] = 0x80; /* RMB = 1: Removable Medium */ + USB_Var.uBulkBuf[ 2] = 0x02; /* Version: ANSI X3.131: 1994 */ + USB_Var.uBulkBuf[ 3] = 0x02; + USB_Var.uBulkBuf[ 4] = 36 - 4; /* Additional USB_Var.Length */ + USB_Var.uBulkBuf[ 5] = 0x00; /* SCCS = 0: No Storage Controller Component */ + USB_Var.uBulkBuf[ 6] = 0x00; + USB_Var.uBulkBuf[ 7] = 0x00; + ptr_str = (uint8_t *)StringInquiryData; + + for (i = 8; i < 36; i++) { /* Product Information + */ + if (*ptr_str) { /* Product Revision Level */ + USB_Var.uBulkBuf[i] = *ptr_str++; + } else { + USB_Var.uBulkBuf[i] = ' '; + } + } + + USB_Var.BulkLen = 36; + bsp_msc_data_in_transfer(); +} + +void bsp_msc_start_stop_unit(void) +{ + if (!USB_Var.USB_MSC_CBW.CB[3]) { /* If power condition modifier is 0 */ + USB_Var.uMediaReady = USB_Var.USB_MSC_CBW.CB[4] & 0x01; /* Media ready = START bit value */ + USB_Var.USB_MSC_CSW.bStatus = CSW_CMD_PASSED; /* Start Stop Unit -> pass */ + bsp_msc_set_csw(); + return; + } + + USB_Var.USB_MSC_CSW.bStatus = CSW_CMD_FAILED; /* Start Stop Unit -> fail */ + bsp_msc_set_csw(); +} + +void bsp_msc_media_removal(void) +{ + if (USB_Var.USB_MSC_CBW.CB[4] & 1) { /* If prevent */ + USB_Var.USB_MSC_CSW.bStatus = CSW_CMD_FAILED; /* Prevent media removal -> fail */ + } else { /* If allow */ + USB_Var.USB_MSC_CSW.bStatus = CSW_CMD_PASSED; /* Allow media removal -> pass */ + } + + bsp_msc_set_csw(); +} + +void bsp_msc_mode_sense6(void) +{ + if (!bsp_msc_data_in_format()) { + return; + } + + if (!bsp_msc_check_media()) { + return; + } + + USB_Var.uBulkBuf[ 0] = 0x03; + USB_Var.uBulkBuf[ 1] = 0x00; + USB_Var.uBulkBuf[ 2] = (USB_Var.uReadOnly << 7); + USB_Var.uBulkBuf[ 3] = 0x00; + USB_Var.BulkLen = 4; + + /* Win host requests maximum number of bytes but as all we have is 4 bytes we have + to tell host back that it is all we have, that's why we correct residue */ + if (USB_Var.USB_MSC_CSW.dDataResidue > USB_Var.BulkLen) { + USB_Var.USB_MSC_CBW.dDataLength = USB_Var.BulkLen; + USB_Var.USB_MSC_CSW.dDataResidue = USB_Var.BulkLen; + } + + bsp_msc_data_in_transfer(); +} + +void bsp_msc_mode_sense10(void) +{ + if (!bsp_msc_data_in_format()) { + return; + } + + if (!bsp_msc_check_media()) { + return; + } + + USB_Var.uBulkBuf[ 0] = 0x00; + USB_Var.uBulkBuf[ 1] = 0x06; + USB_Var.uBulkBuf[ 2] = 0x00; + USB_Var.uBulkBuf[ 3] = (USB_Var.uReadOnly << 7); + USB_Var.uBulkBuf[ 4] = 0x00; + USB_Var.uBulkBuf[ 5] = 0x00; + USB_Var.uBulkBuf[ 6] = 0x00; + USB_Var.uBulkBuf[ 7] = 0x00; + USB_Var.BulkLen = 8; + + /* Win host requests maximum number of bytes but as all we have is 8 bytes we have + to tell host back that it is all we have, that's why we correct residue */ + if (USB_Var.USB_MSC_CSW.dDataResidue > USB_Var.BulkLen) { + USB_Var.USB_MSC_CBW.dDataLength = USB_Var.BulkLen; + USB_Var.USB_MSC_CSW.dDataResidue = USB_Var.BulkLen; + } + + bsp_msc_data_in_transfer(); +} + +void bsp_msc_read_capacity(void) +{ + if (!bsp_msc_data_in_format()) { + return; + } + + if (!bsp_msc_check_media()) { + return; + } + + /* Last Logical USB_Var.Block */ + USB_Var.uBulkBuf[ 0] = ((USB_Var.uBlockCount - 1) >> 24) & 0xFF; + USB_Var.uBulkBuf[ 1] = ((USB_Var.uBlockCount - 1) >> 16) & 0xFF; + USB_Var.uBulkBuf[ 2] = ((USB_Var.uBlockCount - 1) >> 8) & 0xFF; + USB_Var.uBulkBuf[ 3] = ((USB_Var.uBlockCount - 1) >> 0) & 0xFF; + /* USB_Var.Block USB_Var.Length */ + USB_Var.uBulkBuf[ 4] = (USB_Var.uBlockSize >> 24) & 0xFF; + USB_Var.uBulkBuf[ 5] = (USB_Var.uBlockSize >> 16) & 0xFF; + USB_Var.uBulkBuf[ 6] = (USB_Var.uBlockSize >> 8) & 0xFF; + USB_Var.uBulkBuf[ 7] = (USB_Var.uBlockSize >> 0) & 0xFF; + USB_Var.BulkLen = 8; + bsp_msc_data_in_transfer(); +} + +void bsp_msc_read_format_capacity(void) +{ + if (!bsp_msc_data_in_format()) { + return; + } + + if (!bsp_msc_check_media()) { + return; + } + + USB_Var.uBulkBuf[ 0] = 0x00; + USB_Var.uBulkBuf[ 1] = 0x00; + USB_Var.uBulkBuf[ 2] = 0x00; + USB_Var.uBulkBuf[ 3] = 0x08; /* Capacity List USB_Var.Length */ + /* USB_Var.Block Count */ + USB_Var.uBulkBuf[ 4] = (USB_Var.uBlockCount >> 24) & 0xFF; + USB_Var.uBulkBuf[ 5] = (USB_Var.uBlockCount >> 16) & 0xFF; + USB_Var.uBulkBuf[ 6] = (USB_Var.uBlockCount >> 8) & 0xFF; + USB_Var.uBulkBuf[ 7] = (USB_Var.uBlockCount >> 0) & 0xFF; + /* USB_Var.Block USB_Var.Length */ + //USB_Var.uBulkBuf[ 8] = 0x01; /* Descriptor Code: UnFormatted Media */ + USB_Var.uBulkBuf[ 8] = 0x02; /* Descriptor Code: Formatted Media */ + USB_Var.uBulkBuf[ 9] = (USB_Var.uBlockSize >> 16) & 0xFF; + USB_Var.uBulkBuf[10] = (USB_Var.uBlockSize >> 8) & 0xFF; + USB_Var.uBulkBuf[11] = (USB_Var.uBlockSize >> 0) & 0xFF; + USB_Var.BulkLen = 12; + + /* Win host requests maximum number of bytes but as all we have is 12 bytes we have + to tell host back that it is all we have, that's why we correct residue */ + if (USB_Var.USB_MSC_CSW.dDataResidue > USB_Var.BulkLen) { + USB_Var.USB_MSC_CBW.dDataLength = USB_Var.BulkLen; + USB_Var.USB_MSC_CSW.dDataResidue = USB_Var.BulkLen; + } + + bsp_msc_data_in_transfer(); +} + + +void bsp_msc_synchronize_cache(void) +{ + /* Synchronize check always passes as we always write data directly + so cache is always synchronized */ + USB_Var.USB_MSC_CSW.bStatus = CSW_CMD_PASSED; + bsp_msc_set_csw(); +} + +void bsp_msc_ata_pass_through(void) +{ + if (!bsp_msc_data_in_format()) { + return; + } + + USB_Var.uBulkBuf[ 0] = 0x02; + USB_Var.uBulkBuf[ 1] = 0x02; + USB_Var.BulkLen = 2; + USB_Var.BulkStage = MSC_BS_DATA_IN_LAST; + + /* Win host requests maximum number of bytes but as all we have is 2 bytes we have + to tell host back that it is all we have, that's why we correct residue */ + if (USB_Var.USB_MSC_CSW.dDataResidue > USB_Var.BulkLen) { + USB_Var.USB_MSC_CBW.dDataLength = USB_Var.BulkLen; + USB_Var.USB_MSC_CSW.dDataResidue = USB_Var.BulkLen; + } + + bsp_msc_write_ep(USB_EP_DIRECTION_IN(EP_MSC_IN), USB_Var.uBulkBuf, USB_Var.BulkLen); + USB_Var.USB_MSC_CSW.dDataResidue -= USB_Var.BulkLen; + USB_Var.USB_MSC_CSW.bStatus = CSW_CMD_FAILED; +} + +void bsp_msc_service_action_in16(void) +{ + if (!bsp_msc_data_in_format()) { + return; + } + + USB_Var.uBulkBuf[ 0] = 0x20; + USB_Var.uBulkBuf[ 1] = 0x00; + USB_Var.uBulkBuf[31] = 0x00; + USB_Var.BulkLen = 32; + USB_Var.BulkStage = MSC_BS_DATA_IN_LAST; + bsp_msc_write_ep(USB_EP_DIRECTION_IN(EP_MSC_IN), USB_Var.uBulkBuf, USB_Var.BulkLen); + USB_Var.USB_MSC_CSW.dDataResidue -= USB_Var.BulkLen; + USB_Var.USB_MSC_CSW.bStatus = CSW_CMD_FAILED; +} + +void bsp_msc_get_cbw(void) +{ + uint32_t n; + uint32_t copy_size; + copy_size = MIN(USB_Var.BulkLen, sizeof(USB_Var.USB_MSC_CBW)); + + for (n = 0; n < copy_size; n++) { + *((uint8_t *)&USB_Var.USB_MSC_CBW + n) = USB_Var.uBulkBuf[n]; + } + + if ((USB_Var.BulkLen == sizeof(USB_Var.USB_MSC_CBW)) && (USB_Var.USB_MSC_CBW.dSignature == MSC_CBW_Signature)) { + /* Valid USB_Var.USB_MSC_CBW */ + USB_Var.USB_MSC_CSW.dTag = USB_Var.USB_MSC_CBW.dTag; + USB_Var.USB_MSC_CSW.dDataResidue = USB_Var.USB_MSC_CBW.dDataLength; + + if ((USB_Var.USB_MSC_CBW.bLUN > 0) || + (USB_Var.USB_MSC_CBW.bCBLength < 1) || + (USB_Var.USB_MSC_CBW.bCBLength > 16)) { +fail: + USB_Var.USB_MSC_CSW.bStatus = CSW_CMD_FAILED; + bsp_msc_set_csw(); + } else { + switch (USB_Var.USB_MSC_CBW.CB[0]) { + case SCSI_TEST_UNIT_READY: + bsp_msc_test_unit_ready(); + break; + + case SCSI_REQUEST_SENSE: + bsp_msc_request_sense(); + break; + + case SCSI_FORMAT_UNIT: + goto fail; + + case SCSI_INQUIRY: + bsp_msc_inquiry(); + break; + + case SCSI_START_STOP_UNIT: + bsp_msc_start_stop_unit(); + break; + + case SCSI_MEDIA_REMOVAL: + bsp_msc_media_removal(); + break; + + case SCSI_MODE_SELECT6: + goto fail; + + case SCSI_MODE_SENSE6: + bsp_msc_mode_sense6(); + break; + + case SCSI_MODE_SELECT10: + goto fail; + + case SCSI_MODE_SENSE10: + bsp_msc_mode_sense10(); + break; + + case SCSI_READ_FORMAT_CAPACITIES: + bsp_msc_read_format_capacity(); + break; + + case SCSI_READ_CAPACITY: + bsp_msc_read_capacity(); + break; + + case SCSI_ATA_COMMAND_PASS_THROUGH16: + case SCSI_ATA_COMMAND_PASS_THROUGH12: + bsp_msc_ata_pass_through(); + break; + + case SCSI_SERVICE_ACTION_IN16: + bsp_msc_service_action_in16(); + break; + + case SCSI_READ10: + case SCSI_READ12: + if (bsp_msc_rw_setup()) { + if ((USB_Var.USB_MSC_CBW.bmFlags & 0x80) != 0) { + USB_Var.BulkStage = MSC_BS_DATA_IN; + bsp_msc_memory_read(); + } else { /* direction mismatch */ + bsp_msc_set_stall_ep(EP_MSC_OUT); + USB_Var.USB_MSC_CSW.bStatus = CSW_PHASE_ERROR; + bsp_msc_set_csw(); + } + } + + break; + + case SCSI_WRITE10: + case SCSI_WRITE12: + if (bsp_msc_rw_setup()) { + if ((USB_Var.USB_MSC_CBW.bmFlags & 0x80) == 0) { + USB_Var.BulkStage = MSC_BS_DATA_OUT; + } else { /* direction mismatch */ + bsp_msc_set_stall_ep(USB_EP_DIRECTION_IN(EP_MSC_IN)); + USB_Var.USB_MSC_CSW.bStatus = CSW_PHASE_ERROR; + bsp_msc_set_csw(); + } + } + + break; + + case SCSI_VERIFY10: + if ((USB_Var.USB_MSC_CBW.CB[1] & 0x02) == 0) { + // BYTCHK = 0 -> CRC Check (not implemented) + USB_Var.USB_MSC_CSW.bStatus = CSW_CMD_PASSED; + bsp_msc_set_csw(); + break; + } + + if (bsp_msc_rw_setup()) { + if ((USB_Var.USB_MSC_CBW.bmFlags & 0x80) == 0) { + USB_Var.BulkStage = MSC_BS_DATA_OUT; + USB_Var.MemOK = U_TRUE; + } else { + bsp_msc_set_stall_ep(USB_EP_DIRECTION_IN(EP_MSC_IN)); + USB_Var.USB_MSC_CSW.bStatus = CSW_PHASE_ERROR; + bsp_msc_set_csw(); + } + } + + break; + + case SCSI_SYNC_CACHE10: + case SCSI_SYNC_CACHE16: + bsp_msc_synchronize_cache(); + break; + + case SCSI_REPORT_ID_INFO: + bsp_msc_set_stall_ep(USB_EP_DIRECTION_IN(EP_MSC_IN)); + goto fail; + + default: + goto fail; + } + } + } else { + /* Invalid USB_Var.USB_MSC_CBW */ + bsp_msc_set_stall_ep(USB_EP_DIRECTION_IN(EP_MSC_IN)); + bsp_msc_set_stall_ep(EP_MSC_OUT); + USB_Var.BulkStage = MSC_BS_ERROR; + } +} + +void bsp_msc_bulk_in(void) +{ + switch (USB_Var.BulkStage) { + case MSC_BS_DATA_IN: + switch (USB_Var.USB_MSC_CBW.CB[0]) { + case SCSI_READ10: + case SCSI_READ12: + bsp_msc_memory_read(); + break; + } + + break; + + case MSC_BS_DATA_IN_LAST: + bsp_msc_set_csw(); + break; + + case MSC_BS_DATA_IN_LAST_STALL: + bsp_msc_set_stall_ep(USB_EP_DIRECTION_IN(EP_MSC_IN)); + bsp_msc_set_csw(); + break; + + case MSC_BS_CSW: + USB_Var.BulkStage = MSC_BS_CBW; + break; + + default: + break; + } + +} + +void bsp_msc_bulk_out(void) +{ + USB_Var.BulkLen = bsp_msc_read_ep(EP_MSC_OUT, USB_Var.uBulkBuf, USB_Var.uBulkBufSize); + switch (USB_Var.BulkStage) { + case MSC_BS_CBW: + bsp_msc_get_cbw(); + break; + + case MSC_BS_DATA_OUT: + switch (USB_Var.USB_MSC_CBW.CB[0]) { + case SCSI_WRITE10: + case SCSI_WRITE12: + bsp_msc_memory_write(); + break; + + case SCSI_VERIFY10: + bsp_msc_memory_verify(); + break; + } + break; + + case MSC_BS_CSW: + // Previous transfer must be complete + // before the next transfer begins. + // + // If bulk out is stalled then just + // drop this packet and don't assert. + // This packet was left over from before + // the transfer aborted with a stall. + break; + + case MSC_BS_RESET: + // If Bulk-Only Mass Storage Reset command was received on + // Control Endpoint ignore next Bulk OUT transfer if it was not + // a CBW (as it means it was a unprocessed leftover from + // transfer before reset happened) + USB_Var.BulkStage = MSC_BS_CBW; + if (USB_Var.BulkLen == sizeof(USB_Var.USB_MSC_CBW)) { + // If it is a CBW size packet go process it as CBW + bsp_msc_get_cbw(); + } + break; + + default: + bsp_msc_set_stall_ep(EP_MSC_OUT); + USB_Var.USB_MSC_CSW.bStatus = CSW_PHASE_ERROR; + bsp_msc_set_csw(); + break; + } + +} + +void bsp_msc_init(void) +{ + USB_Var.BulkStage = MSC_BS_CBW; + USB_Var.uBulkBufSize = USBD_MSC_MAX_PACKET; + USB_Var.uEndPointMask = 0; + USB_Var.uMediaReady = 1; + USB_Var.uMediaReadyEx = 0; + USB_Var.uReadOnly = 0; + USB_Var.uMemorySize = VFS_TOTAL_MEM_SIZE; + USB_Var.uBlockSize = VFS_DISK_BLOCK_SIZE; + USB_Var.uBlockGroup = 1; + USB_Var.uBlockCount = USB_Var.uMemorySize / USB_Var.uBlockSize; + USB_Var.uBlockBuf = (uint8_t *)DataMscBuffer; + memset(DataMscBuffer,0,sizeof(DataMscBuffer)); + + #if BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK || BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK_DOWNLOADER + //vfs system only has to be initialized once + if(!( (((uint8_t*)VFS_START_ADDR)[0]==0xEB) && (((uint8_t*)VFS_START_ADDR)[510]==0x55) && (((uint8_t*)VFS_START_ADDR)[511]==0xAA))) + { + program_flash_page(VFS_START_ADDR, (const uint8_t*)&(msc_disk[0][0]), sizeof(msc_disk)); + } + #endif +} + +static uint32_t bsp_usb_event_handler(USB_EVNET_HANDLER_T *event) +{ + uint32_t size; + uint32_t status = USB_ERROR_NONE; + + switch(event->id) + { + case USB_EVENT_DEVICE_RESET: + { + #ifdef FEATURE_DISCONN_DETECT + platform_set_timer(bsp_usb_device_disconn_timeout,160); + #endif + }break; + case USB_EVENT_DEVICE_SOF: + { + // handle sof, need enable interrupt in config.intmask + }break; + case USB_EVENT_DEVICE_SUSPEND: + { + // handle suspend, need enable interrupt in config.intmask + }break; + case USB_EVENT_DEVICE_RESUME: + { + // handle resume, need enable interrupt in config.intmask + }break; + case USB_EVENT_EP0_SETUP: + { + USB_SETUP_T* setup = USB_GetEp0SetupData(); + switch(setup->bmRequestType.Recipient) + { + case USB_REQUEST_DESTINATION_DEVICE: + { + switch(setup->bRequest) + { + case USB_REQUEST_DEVICE_SET_ADDRESS: + { + // handled internally + #ifdef FEATURE_DISCONN_DETECT + platform_set_timer(bsp_usb_device_disconn_timeout,0); + #endif + status = USB_ERROR_NONE; + } + break; + case USB_REQUEST_DEVICE_CLEAR_FEATURE: + { + USB_Var.remoteWakeup = (setup->wValue&0xF) ? 0 : 1; + status = USB_ERROR_NONE; + } + break; + case USB_REQUEST_DEVICE_SET_FEATURE: + { + USB_Var.remoteWakeup = (setup->wValue&0xF) ? 1 : 0; + status = USB_ERROR_NONE; + } + break; + case USB_REQUEST_DEVICE_SET_CONFIGURATION: + { + // uint8_t cfg_idx = setup->wValue&0xFF; + // check if the cfg_idx is correct + status |= USB_ConfigureEp(&(ConfigDescriptor.endpoint[0])); + status |= USB_ConfigureEp(&(ConfigDescriptor.endpoint[1])); + + status |= USB_RecvData(ConfigDescriptor.endpoint[EP_OUT_IDX].ep, DataRecvBuf, + ConfigDescriptor.endpoint[EP_OUT_IDX].mps, 1<wValue >> 8) + { + case USB_REQUEST_DEVICE_DESCRIPTOR_DEVICE: + { + size = sizeof(USB_DEVICE_DESCRIPTOR_REAL_T); + size = (setup->wLength < size) ? (setup->wLength) : size; + + status |= USB_SendData(0, (void*)&DeviceDescriptor, size, 0); + } + break; + case USB_REQUEST_DEVICE_DESCRIPTOR_CONFIGURATION: + { + size = sizeof(BSP_USB_DESC_STRUCTURE_T); + size = (setup->wLength < size) ? (setup->wLength) : size; + + status |= USB_SendData(0, (void*)&ConfigDescriptor, size, 0); + } + break; + case USB_REQUEST_DEVICE_DESCRIPTOR_STRING: + { + const uint8_t *addr; + switch(setup->wValue&0xFF) + { + case USB_STRING_LANGUAGE_IDX: + { + size = sizeof(StringDescriptor_0); + addr = StringDescriptor_0; + }break; + case USB_STRING_MANUFACTURER_IDX: + { + size = sizeof(StringDescriptor_1); + addr = StringDescriptor_1; + }break; + case USB_STRING_PRODUCT_IDX: + { + size = sizeof(StringDescriptor_2); + addr = StringDescriptor_2; + }break; + } + + size = (setup->wLength < size) ? (setup->wLength) : size; + status |= USB_SendData(0, (void*)addr, size, 0); + } + break; + default: + { + status = USB_ERROR_REQUEST_NOT_SUPPORT; + }break; + } + } + break; + case USB_REQUEST_DEVICE_GET_STATUS: + { + DataSendBuf[0] = SELF_POWERED | (REMOTE_WAKEUP << 1); + DataSendBuf[1] = 0; + status |= USB_SendData(0, DataSendBuf, 2, 0); + } + break; + case USB_REQUEST_DEVICE_GET_CONFIGURATION: + { + DataSendBuf[0] = ConfigDescriptor.config.configIndex; + status |= USB_SendData(0, DataSendBuf, 1, 0); + } + break; + default: + { + status = USB_ERROR_REQUEST_NOT_SUPPORT; + }break; + } + } + break; + + case USB_REQUEST_DESTINATION_INTERFACE: + { + switch(setup->bmRequestType.Type) + { + case USB_REQUEST_TYPE_CLASS: + { + switch(setup->bRequest) + { + case MSC_REQUEST_RESET: + { + if ((setup->wValue == 0) && (setup->wLength == 0)) { + bsp_msc_reset(); + } + }break; + case MSC_REQUEST_GET_MAX_LUN: + { + if ((setup->wValue == 0) && (setup->wLength == 1)) { + DataSendBuf[0] = 0; + status |= USB_SendData(0, DataSendBuf, 1, 0); + } + }break; + default: + status = USB_ERROR_REQUEST_NOT_SUPPORT; + } + }break; + default: + { + status = USB_ERROR_REQUEST_NOT_SUPPORT; + } + } + } + break; + + case USB_REQUEST_DESTINATION_EP: + { + switch(setup->bRequest) + { + case USB_REQUEST_DEVICE_CLEAR_FEATURE: + { + uint8_t n = setup->wIndex & 0x8F; + uint32_t m = (n & 0x80) ? ((1 << 16) << (n & 0x0F)) : (1 << n); + + if (setup->wValue == USB_FEATURE_ENDPOINT_STALL) { + bsp_msc_clr_stall_ep_(n); + USB_Var.uEndPointMask &= ~m; + } + } + break; + case USB_REQUEST_DEVICE_SET_FEATURE: + { + uint8_t n = setup->wIndex & 0x8F; + uint32_t m = (n & 0x80) ? ((1 << 16) << (n & 0x0F)) : (1 << n); + + if (setup->wValue == USB_FEATURE_ENDPOINT_STALL) { + bsp_msc_set_stall_ep_(n); + USB_Var.uEndPointMask |= m; + } + } + break; + default: + { + status = USB_ERROR_REQUEST_NOT_SUPPORT; + }break; + } + } + break; + + default: + { + status = USB_ERROR_REQUEST_NOT_SUPPORT; + }break; + } + + // if status equals to USB_ERROR_REQUEST_NOT_SUPPORT: it is not supported request. + // if status equals to USB_ERROR_NONE: it is successfully executed. + if((USB_ERROR_NONE != status) && (USB_ERROR_REQUEST_NOT_SUPPORT != status)) + { + platform_printf("USB event exec error %x (0x%x 0x%x)\n", status, *(uint32_t*)setup,*((uint32_t*)setup+1)); + } + }break; + + case USB_EVENT_EP_DATA_TRANSFER: + { + switch(event->data.type) + { + case USB_CALLBACK_TYPE_RECEIVE_END: + { + if(event->data.ep == EP_MSC_OUT) + { + bsp_msc_bulk_out(); + } + }break; + case USB_CALLBACK_TYPE_TRANSMIT_END: + { + if(event->data.ep == EP_MSC_IN) + { + bsp_msc_bulk_in(); + } + }break; + default: + break; + } + }break; + default: + break; + } + + return status; +} + +void bsp_usb_init(void) +{ + USB_INIT_CONFIG_T config; + + bsp_msc_init(); + + SYSCTRL_ClearClkGateMulti(1 << SYSCTRL_ITEM_APB_USB); + //use SYSCTRL_GetClk(SYSCTRL_ITEM_APB_USB) to confirm, USB module clock has to be 48M. + SYSCTRL_SelectUSBClk((SYSCTRL_ClkMode)(SYSCTRL_GetPLLClk()/48000000)); + + platform_set_irq_callback(PLATFORM_CB_IRQ_USB, USB_IrqHandler, NULL); + + PINCTRL_SelUSB(USB_PIN_DP,USB_PIN_DM); + SYSCTRL_USBPhyConfig(BSP_USB_PHY_ENABLE,BSP_USB_PHY_DP_PULL_UP); + + memset(&config, 0x00, sizeof(USB_INIT_CONFIG_T)); + config.intmask = USBINTMASK_SUSP | USBINTMASK_RESUME; + config.handler = bsp_usb_event_handler; + USB_InitConfig(&config); +} + +void bsp_usb_disable(void) +{ + USB_Close(); + SYSCTRL_SetClkGateMulti(1 << SYSCTRL_ITEM_APB_USB); + + SYSCTRL_USBPhyConfig(BSP_USB_PHY_DISABLE,0); +} + +static void internal_bsp_usb_device_remote_wakeup_stop(void) +{ + USB_DeviceSetRemoteWakeupBit(U_FALSE); +} + +void bsp_usb_device_remote_wakeup(void) +{ + USB_DeviceSetRemoteWakeupBit(U_TRUE); + platform_set_timer(internal_bsp_usb_device_remote_wakeup_stop,16);// setup timer for 10ms, then disable resume signal +} + +#ifdef FEATURE_DISCONN_DETECT +void bsp_usb_device_disconn_timeout(void) +{ + bsp_usb_disable(); + platform_printf("USB cable disconnected."); +} +#endif + +#if BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK_DOWNLOADER +static void bsp_msc_image_detect_and_download(uint32_t sector, uint8_t *buf, uint32_t num_of_sectors) +{ + #define ROOT_DIR_SECTOR_NUM (3) + #define ROOT_DIR_CNT (16) + uint32_t i; + static uint8_t bin_type = 0; + static int32_t file_size = 0; + static uint32_t file_sector = 0, meta_size = 0, meta_addr = 0; + if(sector == ROOT_DIR_SECTOR_NUM) + { + BSP_USB_MSC_DIR_ENTRY_t *new_dir = (BSP_USB_MSC_DIR_ENTRY_t*)buf; + for (i = 0; i < ROOT_DIR_CNT; i++) { + if (0 == strncmp("BIN", &(new_dir[i].fileName[8]), 3)) { + bin_type = 1; + file_size = new_dir[i].fileSize; + file_sector = 4 + new_dir[i].firstClusterLow16 - 2; + meta_size = file_size; + meta_addr = VFS_START_ADDR + (file_sector * VFS_DISK_BLOCK_SIZE); + break; + } + } + } + + program_flash_page(VFS_START_ADDR + (sector * VFS_DISK_BLOCK_SIZE), buf, num_of_sectors * VFS_DISK_BLOCK_SIZE); + + if((bin_type == 1) && (sector == file_sector)){ + file_size = file_size - num_of_sectors * VFS_DISK_BLOCK_SIZE; + if(file_size > 0){ + file_sector += num_of_sectors; + } + else{ + bin_type = 0; + //download complete, reboot now + uint8_t buffer[20]; + ota_meta_t *meta = (ota_meta_t *)(buffer + 0); + meta->blocks[0].dest = 0x02002000; + meta->blocks[0].src = meta_addr; + meta->blocks[0].size = meta_size; + flash_do_update(1, meta->blocks, USB_Var.uBlockBuf); + } + } +} +#endif diff --git a/src/BSP/bsp_usb_msc.h b/src/BSP/bsp_usb_msc.h new file mode 100644 index 000000000..948e5db2c --- /dev/null +++ b/src/BSP/bsp_usb_msc.h @@ -0,0 +1,309 @@ +#ifndef __USB_MSC_H +#define __USB_MSC_H + +#include +#include "ingsoc.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// the flag to enable disconnection(cable unplugged), valid only when DP and DM are powered by VBUS +//#define FEATURE_DISCONN_DETECT + +//! @brief Round up division to nearest number of words. +#define WORDS(s) (((s) + sizeof(uint32_t) - 1) / sizeof(uint32_t)) + +#if !defined(ARRAY_SIZE) +//! @brief Get number of elements in the array. +#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0])) +#endif + +#if !defined(MIN) +#define MIN(a,b) ((a) < (b) ? (a) : (b)) +#endif + +#if !defined(MAX) +#define MAX(a,b) ((a) > (b) ? (a) : (b)) +#endif + +#define MB(size) ((size) * 1024 * 1024) +#define KB(size) ((size) * 1024) + +#define ROUND_UP(value, boundary) ((value) + ((boundary) - (value)) % (boundary)) +#define ROUND_DOWN(value, boundary) ((value) - ((value) % (boundary))) + +#define COMPILER_CONCAT_(a, b) a##b +#define COMPILER_CONCAT(a, b) COMPILER_CONCAT_(a, b) + +// Divide by zero if the the expression is false. This +// causes an error at compile time. +// +// The special value '__COUNTER__' is used to create a unique value to +// append to 'compiler_assert_' to create a unique token. This prevents +// conflicts resulting from the same enum being declared multiple times. +#define COMPILER_ASSERT(e) enum { COMPILER_CONCAT(compiler_assert_, __COUNTER__) = 1/((e) ? 1 : 0) } + +// ATTENTION ! FIXED IO FOR USB on 916 series +#define USB_PIN_DP GIO_GPIO_16 +#define USB_PIN_DM GIO_GPIO_17 + +#define USB_STRING_LANGUAGE_IDX 0x00 +#define USB_STRING_LANGUAGE { 0x04, 0x03, 0x09, 0x04} + +#define USB_STRING_MANUFACTURER_IDX 0x01 +#define USB_STRING_MANUFACTURER {18,0x3,'I',0,'n',0,'g',0,'c',0,'h',0,'i',0,'p',0,'s',0} + +#define USB_STRING_PRODUCT_IDX 0x02 +#define USB_STRING_PRODUCT {16,0x3,'m',0,'s',0,'c',0,'-',0,'d',0,'e',0,'v',0} + +#define USB_DEVICE_DESCRIPTOR \ +{ \ + .size = sizeof(USB_DEVICE_DESCRIPTOR_REAL_T), \ + .type = 1, \ + .bcdUsb = 0x0200, \ + .usbClass = 0xFF, \ + .usbSubClass = 0x00, \ + .usbProto = 0x01, \ + .ep0Mps = USB_EP0_MPS, \ + .vendor = 0xFFF1, \ + .product = 0xFA2F, \ + .release = 0x00, \ + .iManufacturer = USB_STRING_MANUFACTURER_IDX, \ + .iProduct = USB_STRING_PRODUCT_IDX, \ + .iSerial = 0x00, \ + .nbConfig = 0x01 \ +} + +typedef struct +{ + USB_CONFIG_DESCRIPTOR_REAL_T config; + USB_INTERFACE_DESCRIPTOR_REAL_T interface[1]; + USB_EP_DESCRIPTOR_REAL_T endpoint[2]; +}BSP_USB_DESC_STRUCTURE_T; + +#define SELF_POWERED (1) +#define REMOTE_WAKEUP (0) + +#define USB_CONFIG_DESCRIPTOR \ +{ \ + .size = sizeof(USB_CONFIG_DESCRIPTOR_REAL_T), \ + .type = 2, \ + .totalLength = sizeof(USB_CONFIG_DESCRIPTOR_REAL_T) + sizeof(USB_INTERFACE_DESCRIPTOR_REAL_T)*1 + \ + sizeof(USB_EP_DESCRIPTOR_REAL_T)*2, \ + .nbInterface = 0x01, \ + .configIndex = 0x01, \ + .iDescription = 0x00, \ + .attrib = 0x80| (SELF_POWERED<<6) | (REMOTE_WAKEUP<<5), \ + .maxPower = 0xFA \ +} + +#define USB_DEVICE_CLASS_STORAGE 0x08 +#define MSC_SUBCLASS_SCSI 0x06 +#define MSC_PROTOCOL_BULK_ONLY 0x50 + +#define USB_INTERFACE_DESCRIPTOR \ +{ \ + .size = sizeof(USB_INTERFACE_DESCRIPTOR_REAL_T), \ + .type = 4, \ + .interfaceIndex = 0x00, \ + .alternateSetting = 0x00, \ + .nbEp = 2, \ + .usbClass = USB_DEVICE_CLASS_STORAGE, \ + .usbSubClass = MSC_SUBCLASS_SCSI, \ + .usbProto = MSC_PROTOCOL_BULK_ONLY, \ + .iDescription = 0x00 \ +} + +#define EP_MSC_IN (1)/* EP1 is in */ +#define EP_MSC_OUT (2) +#define EP_X_MPS_BYTES (64) +#define USBD_MSC_MAX_PACKET EP_X_MPS_BYTES + +#define USB_EP_1_DESCRIPTOR \ +{ \ + .size = sizeof(USB_EP_DESCRIPTOR_REAL_T), \ + .type = 5, \ + .ep = USB_EP_DIRECTION_IN(EP_MSC_IN), \ + .attributes = USB_EP_TYPE_BULK, \ + .mps = EP_X_MPS_BYTES, \ + .interval = 0 \ +} + +#define USB_EP_2_DESCRIPTOR \ +{ \ + .size = sizeof(USB_EP_DESCRIPTOR_REAL_T), \ + .type = 5, \ + .ep = USB_EP_DIRECTION_OUT(EP_MSC_OUT), \ + .attributes = USB_EP_TYPE_BULK, \ + .mps = EP_X_MPS_BYTES, \ + .interval = 0 \ +} + +/* USB disk with all data stored in ram, for demo or debug purpose */ +#define BSP_USB_MSC_RAM_DISK 0x02 +/* USB disk with all data stored in flash, with a fat12 file system */ +#define BSP_USB_MSC_FLASH_DISK 0x03 +/* USB disk with all data stored in flash, no file system, need to be formated by host */ +#define BSP_USB_MSC_FLASH_DISK_NO_VFS 0x04 +/* USB disk with drag-n-drop bin file downloading function */ +#define BSP_USB_MSC_FLASH_DISK_DOWNLOADER 0x05 + +#define MSC_REQUEST_RESET 0xFF +#define MSC_REQUEST_GET_MAX_LUN 0xFE + +/* MSC Bulk-only Stage */ +#define MSC_BS_CBW 0 /* Command Block Wrapper */ +#define MSC_BS_DATA_OUT 1 /* Data Out Phase */ +#define MSC_BS_DATA_IN 2 /* Data In Phase */ +#define MSC_BS_DATA_IN_LAST 3 /* Data In Last Phase */ +#define MSC_BS_DATA_IN_LAST_STALL 4 /* Data In Last Phase with Stall */ +#define MSC_BS_CSW 5 /* Command Status Wrapper */ +#define MSC_BS_ERROR 6 /* Error */ +#define MSC_BS_RESET 7 /* Bulk-Only Mass Storage Reset */ + +/* Bulk-only Command Block Wrapper */ +typedef __PACKED_STRUCT _MSC_CBW { + uint32_t dSignature; + uint32_t dTag; + uint32_t dDataLength; + uint8_t bmFlags; + uint8_t bLUN; + uint8_t bCBLength; + uint8_t CB[16]; +} MSC_CBW; + +/* Bulk-only Command Status Wrapper */ +typedef __PACKED_STRUCT _MSC_CSW { + uint32_t dSignature; + uint32_t dTag; + uint32_t dDataResidue; + uint8_t bStatus; +} MSC_CSW; + +#define MSC_CBW_Signature 0x43425355 +#define MSC_CSW_Signature 0x53425355 + +/* CSW Status Definitions */ +#define CSW_CMD_PASSED 0x00 +#define CSW_CMD_FAILED 0x01 +#define CSW_PHASE_ERROR 0x02 + + +/* SCSI Commands */ +#define SCSI_TEST_UNIT_READY 0x00 +#define SCSI_REQUEST_SENSE 0x03 +#define SCSI_FORMAT_UNIT 0x04 +#define SCSI_INQUIRY 0x12 +#define SCSI_MODE_SELECT6 0x15 +#define SCSI_MODE_SENSE6 0x1A +#define SCSI_START_STOP_UNIT 0x1B +#define SCSI_MEDIA_REMOVAL 0x1E +#define SCSI_READ_FORMAT_CAPACITIES 0x23 +#define SCSI_READ_CAPACITY 0x25 +#define SCSI_READ10 0x28 +#define SCSI_WRITE10 0x2A +#define SCSI_VERIFY10 0x2F +#define SCSI_SYNC_CACHE10 0x35 +#define SCSI_READ12 0xA8 +#define SCSI_WRITE12 0xAA +#define SCSI_MODE_SELECT10 0x55 +#define SCSI_MODE_SENSE10 0x5A +#define SCSI_SYNC_CACHE16 0x91 +#define SCSI_ATA_COMMAND_PASS_THROUGH12 0xA1 +#define SCSI_ATA_COMMAND_PASS_THROUGH16 0x85 +#define SCSI_SERVICE_ACTION_IN12 0xAB +#define SCSI_SERVICE_ACTION_IN16 0x9E +#define SCSI_SERVICE_ACTION_OUT12 0xA9 +#define SCSI_SERVICE_ACTION_OUT16 0x9F +#define SCSI_REPORT_ID_INFO 0xA3 + +#define USBD_MSC_INQUIRY_DATA "INGCHIPS" \ + "VFS " \ + "0.1" + +#define README_CONTENTS \ +"This is ingchips's MassStorage Class demo.\r\n\r\n\ +access https://ingchips.github.io/ for more information." + +typedef enum +{ + BSP_USB_PHY_DISABLE, + BSP_USB_PHY_ENABLE +}BSP_USB_PHY_ENABLE_e; + +typedef enum +{ + BSP_USB_PHY_DP_PULL_UP = 1, + BSP_USB_PHY_DM_PULL_UP, + BSP_USB_PHY_DP_DM_PULL_DOWN +}BSP_USB_PHY_PULL_e; + +typedef char vfs_filename_t[11]; + +typedef struct FatDirectoryEntry { + vfs_filename_t fileName; + uint8_t attributes; + uint8_t reserved; + uint8_t creationTimeMs; + uint16_t creationTime; + uint16_t creationDate; + uint16_t accessedDate; + uint16_t firstClusterHigh16; + uint16_t modificationTime; + uint16_t modificationDate; + uint16_t firstClusterLow16; + uint32_t fileSize; +} __attribute__((packed)) BSP_USB_MSC_DIR_ENTRY_t; +COMPILER_ASSERT(sizeof(BSP_USB_MSC_DIR_ENTRY_t) == 32); + +typedef struct +{ + uint32_t remoteWakeup:1; + uint32_t unused:31; + + MSC_CBW USB_MSC_CBW; + MSC_CSW USB_MSC_CSW; + uint16_t uBulkBufSize; + uint8_t uBulkBuf[USBD_MSC_MAX_PACKET]; + + uint8_t BulkStage; + uint32_t BulkLen; + uint32_t uEndPointMask; + + uint8_t uMediaReady; + uint8_t uReadOnly; + uint32_t uMemorySize; + uint32_t uBlockSize; + uint32_t uBlockGroup; + uint32_t uBlockCount; + uint8_t *uBlockBuf; + uint8_t uMediaReadyEx; + + uint32_t Block; /* R/W Block */ + uint32_t Offset; /* R/W Offset */ + uint32_t Length; /* R/W Length */ + + uint8_t MemOK; +}BSP_USB_MSC_VAR_s; + +extern BSP_USB_MSC_VAR_s USB_Var; + +/** + * @brief use this API to initialize USB module and MSC function + * + * @param[in] null. + * @param[out] null. + */ +extern void bsp_usb_init(void); +extern void bsp_usb_device_remote_wakeup(void); + +#ifdef FEATURE_DISCONN_DETECT +void bsp_usb_device_disconn_timeout(void); +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/BSP/eflash.c b/src/BSP/eflash.c index 23f1bb006..816ecd288 100644 --- a/src/BSP/eflash.c +++ b/src/BSP/eflash.c @@ -208,6 +208,49 @@ int flash_do_update(const int block_num, const fota_update_block_t *blocks, uint return ROM_flash_do_update(block_num, blocks, page_buffer); } +void erase_flash_page(const uint32_t addr) +{ + ROM_erase_page(addr); + ROM_write_disable(); +} + +void write_flash_page(uint32_t addr, const uint8_t *data, uint32_t len) +{ + ROM_write_page(addr, data, len); + ROM_write_disable(); +} + +#define FLASH_PRE_OPS() \ + uint32_t prim = __get_PRIMASK(); \ + __disable_irq(); \ + ROM_disable_continuous_mode(); + +#define FLASH_POST_OPS() \ + ROM_dcache_flash(); \ + ROM_enable_continuous_mode(); \ + if (!prim) __enable_irq() + +int program_flash_page(uint32_t dest_addr, const uint8_t *buffer, uint32_t size) +{ + if (dest_addr & (EFLASH_PAGE_SIZE - 1)) return -1; + + FLASH_PRE_OPS(); + { + while (size > 0) + { + ROM_erase_page(dest_addr); + uint32_t cnt = size > EFLASH_PAGE_SIZE ? EFLASH_PAGE_SIZE : size; + write_flash_page(dest_addr, buffer, cnt); + dest_addr += cnt; + buffer += cnt; + size -= cnt; + } + } + FLASH_POST_OPS(); + + return 0; +} + //#define APB_SPI_FLASH_CTRL_BASE ((uint32_t)0x40150000UL) //uint32_t security_page_read(uint32_t addr) //{ diff --git a/src/BSP/eflash.h b/src/BSP/eflash.h index 92d4e87b6..b3bd7362b 100644 --- a/src/BSP/eflash.h +++ b/src/BSP/eflash.h @@ -185,6 +185,17 @@ const void *flash_get_adc_calib_data(void); uint32_t read_flash_security(uint32_t addr); +/** + * @brief Erase a block of data in flash then write data in a fashion of page. + * + * Note: For ING916, `buffer` must not be in Flash. + * + * @param[in] dest_addr target address (unified address, aligned at EFLASH_PAGE_SIZE) in flash + * @param[in] buffer buffer to be written + * @param[in] size byte number to be written (must be multiple of 4 bytes) + * @return 0 if successful else non-0 + */ +int program_flash_page(uint32_t dest_addr, const uint8_t *buffer, uint32_t size); #endif #ifdef __cplusplus diff --git a/src/FWlib/peripheral_usb.h b/src/FWlib/peripheral_usb.h index 528388c1d..4dac2f001 100644 --- a/src/FWlib/peripheral_usb.h +++ b/src/FWlib/peripheral_usb.h @@ -104,6 +104,14 @@ typedef enum USB_REQUEST_DESTINATION_EP = 2 } USB_REQUEST_DESTINATION_E ; +typedef enum +{ + USB_REQUEST_TYPE_STANDARD = 0, + USB_REQUEST_TYPE_CLASS = 1, + USB_REQUEST_TYPE_VENDOR = 2, + USB_REQUEST_TYPE_RESERVED = 3 +} USB_REQUEST_TYPE_E ; + typedef enum { USB_REQUEST_DEVICE_GET_STATUS = 0x00, @@ -118,6 +126,10 @@ typedef enum USB_REQUEST_DEVICE_SET_INTERFACE = 0x0b } USB_REQUEST_DEVICE_E ; +/* USB Standard Feature selectors */ +#define USB_FEATURE_ENDPOINT_STALL 0 +#define USB_FEATURE_REMOTE_WAKEUP 1 + typedef enum { USB_REQUEST_DEVICE_DESCRIPTOR_DEVICE = 0x01, diff --git a/src/Tools/rom_tools.h b/src/Tools/rom_tools.h index d3c7e8949..012ed533d 100644 --- a/src/Tools/rom_tools.h +++ b/src/Tools/rom_tools.h @@ -45,9 +45,22 @@ typedef int (* f_program_flash)(const uint32_t dest_addr, const uint8_t *buffer, typedef int (* f_write_flash)(const uint32_t dest_addr, const uint8_t *buffer, uint32_t size); typedef int (* f_flash_do_update)(const int block_num, const fota_update_block_t *blocks, uint8_t *ram_buffer); +typedef void (* f_enable_continuous_mode)(void); +typedef void (* f_disable_continuous_mode)(void); +typedef void (* f_dcache_flash)(void); +typedef void (* f_erase_page)(uint32_t addr); +typedef void (* f_write_page)(uint32_t addr, const uint8_t data[256], uint32_t len); +typedef void (* f_write_disable)(void); + #define ROM_program_flash ((f_program_flash)0x00003b9b) #define ROM_write_flash ((f_write_flash)0x00003cff) #define ROM_flash_do_update ((f_flash_do_update)0x00001d73) +#define ROM_enable_continuous_mode ((f_enable_continuous_mode)0x0000080d) +#define ROM_disable_continuous_mode ((f_disable_continuous_mode)0x000007c9) +#define ROM_dcache_flash ((f_dcache_flash)0x00000651) +#define ROM_erase_page ((f_erase_page)0x000008c1) +#define ROM_write_page ((f_write_page)0x000008ed) +#define ROM_write_disable ((f_write_disable)0x00000be1) #endif From b25fc1b9574d0ed615f3bf53f90acaa6bb37269e Mon Sep 17 00:00:00 2001 From: ruiminw <112598619+ruiminw@users.noreply.github.com> Date: Wed, 12 Apr 2023 15:01:17 +0800 Subject: [PATCH 3/8] upload usb msc file with fat16 system three options: flash usb disk w/wo file system and usb drag-n-drop downloader --- src/BSP/bsp_usb_msc.c | 96 +++++++++++++++++--------------------- src/BSP/bsp_usb_msc.h | 29 ++++++++++-- src/BSP/eflash.c | 43 ----------------- src/BSP/eflash.h | 11 ----- src/FWlib/peripheral_usb.c | 7 ++- src/Tools/rom_tools.h | 13 ------ 6 files changed, 70 insertions(+), 129 deletions(-) diff --git a/src/BSP/bsp_usb_msc.c b/src/BSP/bsp_usb_msc.c index 47c02caab..9dcad8dd2 100644 --- a/src/BSP/bsp_usb_msc.c +++ b/src/BSP/bsp_usb_msc.c @@ -7,22 +7,30 @@ #include "ota_service.h" /* User defined area */ -#define BSP_USB_MSC_FUNC BSP_USB_MSC_FLASH_DISK -#if BSP_USB_MSC_FUNC == BSP_USB_MSC_RAM_DISK -#define VFS_DISK_BLOCK_NUM (16) /*8K is the minimum size, 8 * 512 = 8KB*/ -#define VFS_DISK_BLOCK_SIZE (512) -#define VFS_TOTAL_MEM_SIZE KB(8) -#elif BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK || BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK_NO_VFS \ +#if BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK || BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK_NO_VFS \ || BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK_DOWNLOADER -#define VFS_START_ADDR (0x02040000) -#define VFS_DISK_BLOCK_NUM (512) -#define VFS_DISK_BLOCK_SIZE (512) -#define VFS_TOTAL_MEM_SIZE KB(256) + +/* empty flash start address, used for usb stick */ +#ifndef VFS_START_ADDR +#define VFS_START_ADDR 0x02040000 +#endif + +/* total size of usb disk, the size must be aligned with vector size and cnt */ +#ifndef VFS_TOTAL_MEM_SIZE +#define VFS_TOTAL_MEM_SIZE MB(128) +#endif + +/* block/sector size of usb disk, for total size of 256M, block size should be 4K. + ATTENTION: flash operation requires that the minimum value of block size must be 4K */ +#ifndef VFS_DISK_BLOCK_SIZE +#define VFS_DISK_BLOCK_SIZE KB(4) #endif -/* declaration */ -static void bsp_msc_image_detect_and_download(uint32_t sector, uint8_t *buf, uint32_t num_of_sectors); +#define VFS_DISK_BLOCK_NUM (VFS_TOTAL_MEM_SIZE/VFS_DISK_BLOCK_SIZE) +#define VFS_DISK_FATSZ_16 ((VFS_DISK_BLOCK_NUM*2)/VFS_DISK_BLOCK_SIZE) +COMPILER_ASSERT((VFS_DISK_BLOCK_NUM > FAT_CLUSTERS_MIN) && (VFS_DISK_BLOCK_NUM < FAT_CLUSTERS_MAX)); +#endif /* variables and functions area */ const USB_DEVICE_DESCRIPTOR_REAL_T DeviceDescriptor __attribute__ ((aligned (4))) = USB_DEVICE_DESCRIPTOR; @@ -41,25 +49,25 @@ uint8_t DataRecvBuf[EP_X_MPS_BYTES] __attribute__ ((aligned (4))); uint8_t DataSendBuf[EP_X_MPS_BYTES] __attribute__ ((aligned (4))); uint8_t DataMscBuffer[VFS_DISK_BLOCK_SIZE]; -#if BSP_USB_MSC_FUNC == BSP_USB_MSC_RAM_DISK -uint8_t msc_disk[VFS_DISK_BLOCK_NUM][VFS_DISK_BLOCK_SIZE] = -#endif #if BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK || BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK_DOWNLOADER -const uint8_t msc_disk[5][VFS_DISK_BLOCK_SIZE] = +const uint8_t msc_disk[19][VFS_DISK_BLOCK_SIZE] __MEMORY_AT(VFS_START_ADDR) = #endif #if BSP_USB_MSC_FUNC != BSP_USB_MSC_FLASH_DISK_NO_VFS { //------------- Block0: Boot Sector -------------// // BS_jmpBoot = EB; BS_OEMName = MSDOS; BPB_BytsPerSec = VFS_DISK_BLOCK_SIZE; BPB_RsvdSecCnt = 1; - // BPB_NumFATs = 1; BPB_RootEntCnt = 16; BPB_TotSec16 = VFS_DISK_BLOCK_NUM; BPB_Media = F8; BPB_FATSz16 = 2; + // BPB_NumFATs = 1; BPB_RootEntCnt = VFS_DISK_BLOCK_SIZE/32; BPB_TotSec16 = VFS_DISK_BLOCK_NUM; + // BPB_Media = F8; BPB_FATSz16 = VFS_DISK_FATSZ_16; // BPB_SecPerTrk = 1; BPB_NumHeads = 1; BPB_HiddSec = 0; - // BPB_TotSec32 = 0; BS_DrvNum = 80; BS_VolID = 1234; BS_VolLab = INGCHIPSMSC; BS_FilSysType = FAT12 + // BPB_TotSec32 = 0; BS_DrvNum = 80; BS_VolID = 1234; BS_VolLab = INGCHIPSMSC; BS_FilSysType = FAT16 { - 0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, 0x00, 0x02, 0x01, 0x01, 0x00, - 0x01, 0x10, 0x00, VFS_DISK_BLOCK_NUM&0xFF, (VFS_DISK_BLOCK_NUM>>8)&0xFF, 0xF8, 0x02, 0x00, + 0xEB, 0x3C, 0x90, 0x4D, 0x53, 0x44, 0x4F, 0x53, 0x35, 0x2E, 0x30, VFS_DISK_BLOCK_SIZE&0xFF, + (VFS_DISK_BLOCK_SIZE>>8)&0xFF, 0x01, 0x01, 0x00, + 0x01, (VFS_DISK_BLOCK_SIZE/32)&0xFF, ((VFS_DISK_BLOCK_SIZE/32)>>8)&0xFF, VFS_DISK_BLOCK_NUM&0xFF, + (VFS_DISK_BLOCK_NUM>>8)&0xFF, 0xF8, VFS_DISK_FATSZ_16&0xFF, (VFS_DISK_FATSZ_16>>8)&0xFF, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x29, 0x34, 0x12, 0x00, 0x00, 'I' , 'N' , 'G' , 'C' , 'H' , - 'I' , 'P' , 'S' , 'M' , 'S' , 'C' , 0x46, 0x41, 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00, + 'I' , 'P' , 'S' , 'M' , 'S' , 'C' , 0x46, 0x41, 0x54, 0x31, 0x36, 0x20, 0x20, 0x20, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -90,14 +98,13 @@ const uint8_t msc_disk[5][VFS_DISK_BLOCK_SIZE] = 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xAA }, - //------------- Block1: FAT12 Table -------------// + //------------- Block1-16: FAT16 Table -------------// { - 0xF8, 0xFF, 0xFF, 0xFF, 0x0F // first 2 entries are reserved + 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF // first 2 entries are reserved }, - { - 0x00, - }, - //------------- Block3: Root Directory -------------// + {0x00,},{0x00,},{0x00,},{0x00,},{0x00,},{0x00,},{0x00,}, + {0x00,},{0x00,},{0x00,},{0x00,},{0x00,},{0x00,},{0x00,},{0x00,}, + //------------- Block17: Root Directory -------------// // DIR_Name = ; DIR_Attr = VOLUME ID; DIR_CrtTime = 0; DIR_CrtDate = 0; // DIR_CrtDate = 0; DIR_LstAccDate = 0; DIR_FileSize = SIZEOF() { @@ -110,19 +117,15 @@ const uint8_t msc_disk[5][VFS_DISK_BLOCK_SIZE] = sizeof(README_CONTENTS)-1, 0x00, 0x00, 0x00 // readme's files size (4 Bytes) }, - //------------- Block4: Readme Content -------------// + //------------- Block18: Readme Content -------------// README_CONTENTS }; #endif void bsp_msc_write_sect(uint32_t sector, uint8_t *buf, uint32_t num_of_sectors) { - #if BSP_USB_MSC_FUNC == BSP_USB_MSC_RAM_DISK - memcpy((void*)(msc_disk[sector]), buf, num_of_sectors * VFS_DISK_BLOCK_SIZE); - #endif - #if BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK || BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK_NO_VFS - program_flash_page(VFS_START_ADDR + (sector * VFS_DISK_BLOCK_SIZE), buf, num_of_sectors * VFS_DISK_BLOCK_SIZE); + program_flash(VFS_START_ADDR + (sector * VFS_DISK_BLOCK_SIZE), buf, num_of_sectors * VFS_DISK_BLOCK_SIZE); #endif #if BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK_DOWNLOADER @@ -132,10 +135,6 @@ void bsp_msc_write_sect(uint32_t sector, uint8_t *buf, uint32_t num_of_sectors) void bsp_msc_read_sect(uint32_t sector, uint8_t *buf, uint32_t num_of_sectors) { - #if BSP_USB_MSC_FUNC == BSP_USB_MSC_RAM_DISK - memcpy(buf, msc_disk[sector], num_of_sectors * VFS_DISK_BLOCK_SIZE); - #endif - #if BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK || BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK_NO_VFS \ || BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK_DOWNLOADER memcpy(buf, (void*)(VFS_START_ADDR + (sector * VFS_DISK_BLOCK_SIZE)), num_of_sectors * VFS_DISK_BLOCK_SIZE); @@ -161,14 +160,12 @@ void bsp_msc_clr_stall_ep_ (uint32_t EPNum) uint32_t bsp_msc_write_ep (uint32_t EPNum, uint8_t *pData, uint32_t cnt) { - uint32_t status = USB_ERROR_NONE; - if(!USB_IS_EP_DIRECTION_IN(EPNum)){ return 0; } memcpy(DataSendBuf, pData, cnt); - status |= USB_SendData(EPNum, (void*)DataSendBuf, cnt, 0); + USB_SendData(EPNum, (void*)DataSendBuf, cnt, 0); return cnt; } @@ -184,7 +181,6 @@ uint32_t bsp_msc_read_ep (uint32_t EPNum, uint8_t *pData, uint32_t size) if(0 == USB_EP_NUM(EPNum)) { - cnt = size;//sizeof(USB_SETUP_T); memcpy(pData, setup, cnt); return cnt; } @@ -1047,14 +1043,6 @@ void bsp_msc_init(void) USB_Var.uBlockCount = USB_Var.uMemorySize / USB_Var.uBlockSize; USB_Var.uBlockBuf = (uint8_t *)DataMscBuffer; memset(DataMscBuffer,0,sizeof(DataMscBuffer)); - - #if BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK || BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK_DOWNLOADER - //vfs system only has to be initialized once - if(!( (((uint8_t*)VFS_START_ADDR)[0]==0xEB) && (((uint8_t*)VFS_START_ADDR)[510]==0x55) && (((uint8_t*)VFS_START_ADDR)[511]==0xAA))) - { - program_flash_page(VFS_START_ADDR, (const uint8_t*)&(msc_disk[0][0]), sizeof(msc_disk)); - } - #endif } static uint32_t bsp_usb_event_handler(USB_EVNET_HANDLER_T *event) @@ -1356,10 +1344,10 @@ void bsp_usb_device_disconn_timeout(void) #endif #if BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK_DOWNLOADER -static void bsp_msc_image_detect_and_download(uint32_t sector, uint8_t *buf, uint32_t num_of_sectors) +void bsp_msc_image_detect_and_download(uint32_t sector, uint8_t *buf, uint32_t num_of_sectors) { - #define ROOT_DIR_SECTOR_NUM (3) - #define ROOT_DIR_CNT (16) + #define ROOT_DIR_SECTOR_NUM (VFS_DISK_FATSZ_16 + 1) + #define ROOT_DIR_CNT (VFS_DISK_BLOCK_SIZE/32) uint32_t i; static uint8_t bin_type = 0; static int32_t file_size = 0; @@ -1371,7 +1359,7 @@ static void bsp_msc_image_detect_and_download(uint32_t sector, uint8_t *buf, uin if (0 == strncmp("BIN", &(new_dir[i].fileName[8]), 3)) { bin_type = 1; file_size = new_dir[i].fileSize; - file_sector = 4 + new_dir[i].firstClusterLow16 - 2; + file_sector = ROOT_DIR_SECTOR_NUM + 1 + new_dir[i].firstClusterLow16 - 2; meta_size = file_size; meta_addr = VFS_START_ADDR + (file_sector * VFS_DISK_BLOCK_SIZE); break; @@ -1379,7 +1367,7 @@ static void bsp_msc_image_detect_and_download(uint32_t sector, uint8_t *buf, uin } } - program_flash_page(VFS_START_ADDR + (sector * VFS_DISK_BLOCK_SIZE), buf, num_of_sectors * VFS_DISK_BLOCK_SIZE); + program_flash(VFS_START_ADDR + (sector * VFS_DISK_BLOCK_SIZE), buf, num_of_sectors * VFS_DISK_BLOCK_SIZE); if((bin_type == 1) && (sector == file_sector)){ file_size = file_size - num_of_sectors * VFS_DISK_BLOCK_SIZE; diff --git a/src/BSP/bsp_usb_msc.h b/src/BSP/bsp_usb_msc.h index 948e5db2c..89d77a00f 100644 --- a/src/BSP/bsp_usb_msc.h +++ b/src/BSP/bsp_usb_msc.h @@ -8,6 +8,11 @@ extern "C" { #endif +/* Several functions of usb msc, see the macro definition in .h file */ +#ifndef BSP_USB_MSC_FUNC +#define BSP_USB_MSC_FUNC BSP_USB_MSC_FLASH_DISK +#endif + // the flag to enable disconnection(cable unplugged), valid only when DP and DM are powered by VBUS //#define FEATURE_DISCONN_DETECT @@ -44,6 +49,18 @@ extern "C" { // conflicts resulting from the same enum being declared multiple times. #define COMPILER_ASSERT(e) enum { COMPILER_CONCAT(compiler_assert_, __COUNTER__) = 1/((e) ? 1 : 0) } +#ifndef __MEMORY_AT + #if (defined (__CC_ARM)) + #define __MEMORY_AT(x) __attribute__((at(x))) + #elif (defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) + #define __MEMORY_AT__(x) __attribute__((section(".ARM.__at_"#x))) + #define __MEMORY_AT(x) __MEMORY_AT__(x) + #else + #define __MEMORY_AT(x) + #warning Position memory containing __MEMORY_AT macro at absolute address! + #endif +#endif + // ATTENTION ! FIXED IO FOR USB on 916 series #define USB_PIN_DP GIO_GPIO_16 #define USB_PIN_DM GIO_GPIO_17 @@ -140,11 +157,9 @@ typedef struct .interval = 0 \ } -/* USB disk with all data stored in ram, for demo or debug purpose */ -#define BSP_USB_MSC_RAM_DISK 0x02 /* USB disk with all data stored in flash, with a fat12 file system */ #define BSP_USB_MSC_FLASH_DISK 0x03 -/* USB disk with all data stored in flash, no file system, need to be formated by host */ +/* USB disk with all data stored in flash, no file system, need to be formatted by host */ #define BSP_USB_MSC_FLASH_DISK_NO_VFS 0x04 /* USB disk with drag-n-drop bin file downloading function */ #define BSP_USB_MSC_FLASH_DISK_DOWNLOADER 0x05 @@ -226,6 +241,10 @@ typedef __PACKED_STRUCT _MSC_CSW { "This is ingchips's MassStorage Class demo.\r\n\r\n\ access https://ingchips.github.io/ for more information." +// FAT16 limitations +- safety margin +#define FAT_CLUSTERS_MAX (65525 - 100) +#define FAT_CLUSTERS_MIN (4086 + 100) + typedef enum { BSP_USB_PHY_DISABLE, @@ -301,7 +320,9 @@ extern void bsp_usb_device_remote_wakeup(void); #ifdef FEATURE_DISCONN_DETECT void bsp_usb_device_disconn_timeout(void); #endif - +#if BSP_USB_MSC_FUNC == BSP_USB_MSC_FLASH_DISK_DOWNLOADER +void bsp_msc_image_detect_and_download(uint32_t sector, uint8_t *buf, uint32_t num_of_sectors); +#endif #ifdef __cplusplus } #endif diff --git a/src/BSP/eflash.c b/src/BSP/eflash.c index 816ecd288..23f1bb006 100644 --- a/src/BSP/eflash.c +++ b/src/BSP/eflash.c @@ -208,49 +208,6 @@ int flash_do_update(const int block_num, const fota_update_block_t *blocks, uint return ROM_flash_do_update(block_num, blocks, page_buffer); } -void erase_flash_page(const uint32_t addr) -{ - ROM_erase_page(addr); - ROM_write_disable(); -} - -void write_flash_page(uint32_t addr, const uint8_t *data, uint32_t len) -{ - ROM_write_page(addr, data, len); - ROM_write_disable(); -} - -#define FLASH_PRE_OPS() \ - uint32_t prim = __get_PRIMASK(); \ - __disable_irq(); \ - ROM_disable_continuous_mode(); - -#define FLASH_POST_OPS() \ - ROM_dcache_flash(); \ - ROM_enable_continuous_mode(); \ - if (!prim) __enable_irq() - -int program_flash_page(uint32_t dest_addr, const uint8_t *buffer, uint32_t size) -{ - if (dest_addr & (EFLASH_PAGE_SIZE - 1)) return -1; - - FLASH_PRE_OPS(); - { - while (size > 0) - { - ROM_erase_page(dest_addr); - uint32_t cnt = size > EFLASH_PAGE_SIZE ? EFLASH_PAGE_SIZE : size; - write_flash_page(dest_addr, buffer, cnt); - dest_addr += cnt; - buffer += cnt; - size -= cnt; - } - } - FLASH_POST_OPS(); - - return 0; -} - //#define APB_SPI_FLASH_CTRL_BASE ((uint32_t)0x40150000UL) //uint32_t security_page_read(uint32_t addr) //{ diff --git a/src/BSP/eflash.h b/src/BSP/eflash.h index b3bd7362b..92d4e87b6 100644 --- a/src/BSP/eflash.h +++ b/src/BSP/eflash.h @@ -185,17 +185,6 @@ const void *flash_get_adc_calib_data(void); uint32_t read_flash_security(uint32_t addr); -/** - * @brief Erase a block of data in flash then write data in a fashion of page. - * - * Note: For ING916, `buffer` must not be in Flash. - * - * @param[in] dest_addr target address (unified address, aligned at EFLASH_PAGE_SIZE) in flash - * @param[in] buffer buffer to be written - * @param[in] size byte number to be written (must be multiple of 4 bytes) - * @return 0 if successful else non-0 - */ -int program_flash_page(uint32_t dest_addr, const uint8_t *buffer, uint32_t size); #endif #ifdef __cplusplus diff --git a/src/FWlib/peripheral_usb.c b/src/FWlib/peripheral_usb.c index 62c95bbd4..09d8ab594 100644 --- a/src/FWlib/peripheral_usb.c +++ b/src/FWlib/peripheral_usb.c @@ -140,11 +140,11 @@ USB_ERROR_TYPE_E USB_InitConfig(USB_INIT_CONFIG_T *config) { USB_ERROR_TYPE_E status = USB_ERROR_NONE; - if(!config){status = USB_ERROR_INVALID_INPUT;} + if(!config){return USB_ERROR_INVALID_INPUT;} g_UsbVar.DeviceState = USB_DEVICE_NONE; g_UsbVar.Ep0State = EP0_DISCONNECT; - memcpy(&(g_UsbVar.UserConfig),config, sizeof(USB_INIT_CONFIG_T)); + memcpy(&(g_UsbVar.UserConfig), config, sizeof(USB_INIT_CONFIG_T)); USB_ResetAndConfig(); @@ -804,7 +804,6 @@ void USB_HandleEp0(void) { USB_SETUP_T* setup = (USB_SETUP_T*)(g_UsbBufferEp0Out); USB_EVNET_HANDLER_T event; - uint32_t event_status = 0; switch(g_UsbVar.Ep0State) { @@ -834,7 +833,7 @@ void USB_HandleEp0(void) } event.id = USB_EVENT_EP0_SETUP; - event_status = g_UsbVar.UserConfig.handler(&event); + uint32_t event_status = g_UsbVar.UserConfig.handler(&event); //setup requset which is not supported, by spec, device should return stall pid to host if(USB_ERROR_REQUEST_NOT_SUPPORT == event_status) diff --git a/src/Tools/rom_tools.h b/src/Tools/rom_tools.h index 012ed533d..d3c7e8949 100644 --- a/src/Tools/rom_tools.h +++ b/src/Tools/rom_tools.h @@ -45,22 +45,9 @@ typedef int (* f_program_flash)(const uint32_t dest_addr, const uint8_t *buffer, typedef int (* f_write_flash)(const uint32_t dest_addr, const uint8_t *buffer, uint32_t size); typedef int (* f_flash_do_update)(const int block_num, const fota_update_block_t *blocks, uint8_t *ram_buffer); -typedef void (* f_enable_continuous_mode)(void); -typedef void (* f_disable_continuous_mode)(void); -typedef void (* f_dcache_flash)(void); -typedef void (* f_erase_page)(uint32_t addr); -typedef void (* f_write_page)(uint32_t addr, const uint8_t data[256], uint32_t len); -typedef void (* f_write_disable)(void); - #define ROM_program_flash ((f_program_flash)0x00003b9b) #define ROM_write_flash ((f_write_flash)0x00003cff) #define ROM_flash_do_update ((f_flash_do_update)0x00001d73) -#define ROM_enable_continuous_mode ((f_enable_continuous_mode)0x0000080d) -#define ROM_disable_continuous_mode ((f_disable_continuous_mode)0x000007c9) -#define ROM_dcache_flash ((f_dcache_flash)0x00000651) -#define ROM_erase_page ((f_erase_page)0x000008c1) -#define ROM_write_page ((f_write_page)0x000008ed) -#define ROM_write_disable ((f_write_disable)0x00000be1) #endif From db0628b15eeaee063789c0426e76516ac9bbdbb1 Mon Sep 17 00:00:00 2001 From: ruiminw <112598619+ruiminw@users.noreply.github.com> Date: Wed, 12 Apr 2023 18:06:19 +0800 Subject: [PATCH 4/8] add pwm fifo control apis pcap isr mode need to use fifo trigger settings. --- src/FWlib/peripheral_pwm.c | 17 +++++++++++++++++ src/FWlib/peripheral_pwm.h | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/src/FWlib/peripheral_pwm.c b/src/FWlib/peripheral_pwm.c index 6d5862c37..85900bcca 100644 --- a/src/FWlib/peripheral_pwm.c +++ b/src/FWlib/peripheral_pwm.c @@ -169,6 +169,23 @@ uint32_t PCAP_ReadCounter(void) return APB_PWM->CapCounter; } +void PWM_FifoTriggerEnable(const uint8_t channel_index, uint8_t enable, uint32_t mask) +{ + if(enable) + { + APB_PWM->Channels[channel_index].Ctrl0 |= mask; + } + else + { + APB_PWM->Channels[channel_index].Ctrl0 &= ~(mask); + } +} + +uint32_t PWM_GetFifoStatus(const uint8_t channel_index) +{ + return(APB_PWM->Channels[channel_index].Ctrl1); +} + #endif void PWM_SetupSimple(const uint8_t channel_index, const uint32_t frequency, const uint16_t on_duty) diff --git a/src/FWlib/peripheral_pwm.h b/src/FWlib/peripheral_pwm.h index 8d69cf2b1..db4d8e7dd 100644 --- a/src/FWlib/peripheral_pwm.h +++ b/src/FWlib/peripheral_pwm.h @@ -32,9 +32,29 @@ typedef enum PWM_WORK_MODE_SINGLE_WITHOUT_DIED_ZONE = 0x4, #if (INGCHIPS_FAMILY == INGCHIPS_FAMILY_916) PWM_WORK_MODE_DMA = 0x5, + PWM_WORK_MODE_PCAP = 0x6 #endif } PWM_WorkMode_t; +typedef enum +{ + PWM_FIFO_CLEAR = (1 << 15), + PWM_FIFO_EMPTY_EN = (1 << 16), + PWM_FIFO_FULL_EN = (1 << 17), + PWM_FIFO_HALFFULL_EN = (1 << 18), + PWM_FIFO_TRIGGER_EN = (1 << 19) +} PWM_FIFO_MASK_t; + +typedef struct +{ + uint32_t fifo_empty :1; + uint32_t fifo_full :1; + uint32_t fifo_halffull :1; + uint32_t fifo_trig :1; + uint32_t fifo_cnt :3; + uint32_t unused :25; +} PWM_FIFO_STATUS_t; + // compatibility for the typo #define PWM_WordMode_t PWM_WorkMode_t @@ -190,6 +210,23 @@ uint32_t PCAP_ReadData(const uint8_t channel_index); */ uint32_t PCAP_ReadCounter(void); +/** + * @brief Enable/Disable PCAP fifo trigger when in isr mode, this is not needed for dma mode. + * + * @param[in] channel_index channel index (0 .. PWM_CHANNEL_NUMBER - 1) + * @param[in] enable Enable (1) or disable (0) + * @param[in] mask use combination PWM_FIFO_MASK_t, + * 'PWM_FIFO_HALFFULL_EN | PWM_FIFO_TRIGGER_EN' for example + */ +void PWM_FifoTriggerEnable(const uint8_t channel_index, uint8_t enable, uint32_t mask); + +/** + * @brief Get fifo status in fifo isr. + * + * @param[in] channel_index channel index (0 .. PWM_CHANNEL_NUMBER - 1) + * @return use structure PWM_FIFO_STATUS_t to interpret the return value + */ +uint32_t PWM_GetFifoStatus(const uint8_t channel_index); #endif #ifdef __cplusplus From 866c0aba996dcb1243565126a0ed1fc7666cbc8d Mon Sep 17 00:00:00 2001 From: zjli2019 Date: Fri, 14 Apr 2023 16:07:50 +0800 Subject: [PATCH 5/8] update 32k clock configurations: they are ensured to be running when enabled --- bundles/exp/ING9187xx/apis.json | 290 +++++++++--------- bundles/exp/ING9187xx/meta.json | 4 +- bundles/exp/ING9187xx/platform.bin | Bin 144232 -> 144288 bytes bundles/exp/ING9188xx/apis.json | 290 +++++++++--------- bundles/exp/ING9188xx/meta.json | 4 +- bundles/exp/ING9188xx/platform.bin | Bin 151176 -> 151224 bytes bundles/exp/inc/platform_api.h | 7 +- bundles/extension/ING9168xx/apis.json | 290 +++++++++--------- bundles/extension/ING9168xx/meta.json | 4 +- bundles/extension/ING9168xx/platform.bin | Bin 157488 -> 157516 bytes bundles/extension/ING9187xx/apis.json | 290 +++++++++--------- bundles/extension/ING9187xx/meta.json | 4 +- bundles/extension/ING9187xx/platform.bin | Bin 136488 -> 136540 bytes bundles/extension/ING9188xx/apis.json | 290 +++++++++--------- bundles/extension/ING9188xx/meta.json | 4 +- bundles/extension/ING9188xx/platform.bin | Bin 143796 -> 143848 bytes bundles/extension/inc/platform_api.h | 7 +- bundles/mass_conn/ING9168xx/apis.json | 290 +++++++++--------- bundles/mass_conn/ING9168xx/meta.json | 4 +- bundles/mass_conn/ING9168xx/platform.bin | Bin 152828 -> 152856 bytes bundles/mass_conn/ING9187xx/apis.json | 290 +++++++++--------- bundles/mass_conn/ING9187xx/meta.json | 4 +- bundles/mass_conn/ING9187xx/platform.bin | Bin 133724 -> 133780 bytes bundles/mass_conn/ING9188xx/apis.json | 290 +++++++++--------- bundles/mass_conn/ING9188xx/meta.json | 4 +- bundles/mass_conn/ING9188xx/platform.bin | Bin 139800 -> 139852 bytes bundles/mass_conn/inc/platform_api.h | 7 +- bundles/mini/ING9168xx/apis.json | 290 +++++++++--------- bundles/mini/ING9168xx/meta.json | 4 +- bundles/mini/ING9168xx/platform.bin | Bin 152328 -> 152356 bytes bundles/mini/ING9187xx/apis.json | 290 +++++++++--------- bundles/mini/ING9187xx/meta.json | 4 +- bundles/mini/ING9187xx/platform.bin | Bin 133184 -> 133240 bytes bundles/mini/ING9188xx/apis.json | 290 +++++++++--------- bundles/mini/ING9188xx/meta.json | 6 +- bundles/mini/ING9188xx/platform.bin | Bin 139248 -> 139300 bytes bundles/mini/inc/platform_api.h | 7 +- bundles/noos_exp/ING9187xx/apis.json | 134 ++++---- bundles/noos_exp/ING9187xx/meta.json | 4 +- bundles/noos_exp/ING9187xx/platform.bin | Bin 133464 -> 133516 bytes bundles/noos_exp/ING9188xx/apis.json | 134 ++++---- bundles/noos_exp/ING9188xx/meta.json | 4 +- bundles/noos_exp/ING9188xx/platform.bin | Bin 140404 -> 140456 bytes bundles/noos_exp/inc/platform_api.h | 7 +- bundles/noos_extension/ING9168xx/apis.json | 134 ++++---- bundles/noos_extension/ING9168xx/meta.json | 4 +- bundles/noos_extension/ING9168xx/platform.bin | Bin 146616 -> 146644 bytes bundles/noos_extension/ING9187xx/apis.json | 134 ++++---- bundles/noos_extension/ING9187xx/meta.json | 4 +- bundles/noos_extension/ING9187xx/platform.bin | Bin 125724 -> 125776 bytes bundles/noos_extension/ING9188xx/apis.json | 134 ++++---- bundles/noos_extension/ING9188xx/meta.json | 4 +- bundles/noos_extension/ING9188xx/platform.bin | Bin 133032 -> 133084 bytes bundles/noos_extension/inc/platform_api.h | 7 +- bundles/noos_mass_conn/ING9168xx/apis.json | 134 ++++---- bundles/noos_mass_conn/ING9168xx/meta.json | 4 +- bundles/noos_mass_conn/ING9168xx/platform.bin | Bin 141956 -> 141984 bytes bundles/noos_mass_conn/ING9187xx/apis.json | 134 ++++---- bundles/noos_mass_conn/ING9187xx/meta.json | 4 +- bundles/noos_mass_conn/ING9187xx/platform.bin | Bin 122960 -> 123016 bytes bundles/noos_mass_conn/ING9188xx/apis.json | 134 ++++---- bundles/noos_mass_conn/ING9188xx/meta.json | 4 +- bundles/noos_mass_conn/ING9188xx/platform.bin | Bin 129036 -> 129088 bytes bundles/noos_mass_conn/inc/platform_api.h | 7 +- bundles/noos_mini/ING9168xx/apis.json | 134 ++++---- bundles/noos_mini/ING9168xx/meta.json | 4 +- bundles/noos_mini/ING9168xx/platform.bin | Bin 141468 -> 141496 bytes bundles/noos_mini/ING9187xx/apis.json | 134 ++++---- bundles/noos_mini/ING9187xx/meta.json | 4 +- bundles/noos_mini/ING9187xx/platform.bin | Bin 122420 -> 122472 bytes bundles/noos_mini/ING9188xx/apis.json | 134 ++++---- bundles/noos_mini/ING9188xx/meta.json | 4 +- bundles/noos_mini/ING9188xx/platform.bin | Bin 128484 -> 128536 bytes bundles/noos_mini/inc/platform_api.h | 7 +- bundles/noos_typical/ING9168xx/apis.json | 134 ++++---- bundles/noos_typical/ING9168xx/meta.json | 4 +- bundles/noos_typical/ING9168xx/platform.bin | Bin 141932 -> 141960 bytes bundles/noos_typical/ING9187xx/apis.json | 134 ++++---- bundles/noos_typical/ING9187xx/meta.json | 4 +- bundles/noos_typical/ING9187xx/platform.bin | Bin 122900 -> 122952 bytes bundles/noos_typical/ING9188xx/apis.json | 134 ++++---- bundles/noos_typical/ING9188xx/meta.json | 4 +- bundles/noos_typical/ING9188xx/platform.bin | Bin 128976 -> 129028 bytes bundles/noos_typical/inc/platform_api.h | 7 +- bundles/typical/ING9168xx/apis.json | 290 +++++++++--------- bundles/typical/ING9168xx/meta.json | 4 +- bundles/typical/ING9168xx/platform.bin | Bin 152800 -> 152832 bytes bundles/typical/ING9187xx/apis.json | 290 +++++++++--------- bundles/typical/ING9187xx/meta.json | 4 +- bundles/typical/ING9187xx/platform.bin | Bin 133664 -> 133716 bytes bundles/typical/ING9188xx/apis.json | 290 +++++++++--------- bundles/typical/ING9188xx/meta.json | 4 +- bundles/typical/ING9188xx/platform.bin | Bin 139740 -> 139792 bytes bundles/typical/inc/platform_api.h | 7 +- examples-gcc/central_fota/central_fota.ingw | 4 +- examples-gcc/get_started/get_started.ingw | 4 +- .../peripheral_console_liteos.ingw | 4 +- .../peripheral_ibeacon.ingw | 4 +- .../smart_home_hub/smart_home_hub.ingw | 4 +- .../peripheral_ibeacon/generic_cortex.icf | 6 +- .../peripheral_ibeacon.ingw | 4 +- .../peripheral_ibeacon.ingw | 4 +- .../peripheral_ibeacon.ingw | 4 +- examples/anti_lost_mas/anti_lost_mas.ingw | 4 +- examples/anti_lost_sla/anti_lost_sla.ingw | 4 +- examples/ble_rpc/ble_rpc.ingw | 4 +- examples/bqb_rf/bqb_rf.ingw | 4 +- examples/central_cte/central_cte.ingw | 4 +- examples/central_fota/central_fota.ingw | 4 +- .../central_mass_conn/central_mass_conn.ingw | 4 +- .../central_throughput.ingw | 4 +- examples/coremark/coremark.ingw | 4 +- examples/data_logger/data_logger.ingw | 4 +- .../ext_ackable_packet.ingw | 4 +- examples/ext_raw_packet/ext_raw_packet.ingw | 4 +- .../ext_raw_packet_noos.ingw | 4 +- examples/gatt_relay/gatt_relay.ingw | 4 +- examples/get_started/get_started.ingw | 4 +- examples/hid_keyboard/hid_keyboard.ingw | 4 +- examples/hid_mouse/hid_mouse.ingw | 4 +- examples/ibeacon_scanner/ibeacon_scanner.ingw | 4 +- examples/io_over_ble_mas/io_over_ble_mas.ingw | 4 +- examples/io_over_ble_sla/io_over_ble_sla.ingw | 4 +- examples/l2cap_psm/l2cap_psm.ingw | 4 +- examples/littleVGL/littleVGL.ingw | 4 +- examples/llsync_light/llsync_light.ingw | 4 +- examples/mesh-light/mesh-light.ingw | 4 +- .../periodic_advertiser.ingw | 4 +- .../periodic_scanner/periodic_scanner.ingw | 4 +- examples/peripheral_ancs/peripheral_ancs.ingw | 4 +- examples/peripheral_band/peripheral_band.ingw | 4 +- .../peripheral_battery.ingw | 4 +- .../peripheral_console/flash_download.ini | 5 +- .../peripheral_console.ingw | 4 +- .../peripheral_console/src/main_shared.inc | 7 - .../peripheral_console_freertos.ingw | 4 +- .../peripheral_console_realtime.ingw | 4 +- .../peripheral_console_rt-thread.ingw | 4 +- examples/peripheral_etag/peripheral_etag.ingw | 4 +- .../peripheral_ibeacon.ingw | 4 +- examples/peripheral_irc/peripheral_irc.ingw | 4 +- examples/peripheral_led/peripheral_led.ingw | 4 +- .../peripheral_mass_conn.ingw | 4 +- .../peripheral_pedometer.ingw | 4 +- .../peripheral_piano/peripheral_piano.ingw | 4 +- .../peripheral_throughput.ingw | 4 +- examples/reset_handler/reset_handler.ingw | 4 +- examples/secondary_fota/secondary_fota.ingw | 4 +- examples/smart_meter/smart_meter.ingw | 4 +- examples/thermo_ota/thermo_ota.ingw | 4 +- examples/uart_console/uart_console.ingw | 4 +- .../voice_remote_ctrl/voice_remote_ctrl.ingw | 4 +- src/FWlib/peripheral_adc.c | 29 +- 153 files changed, 3179 insertions(+), 3208 deletions(-) diff --git a/bundles/exp/ING9187xx/apis.json b/bundles/exp/ING9187xx/apis.json index 87bbbe4b6..06f72b088 100644 --- a/bundles/exp/ING9187xx/apis.json +++ b/bundles/exp/ING9187xx/apis.json @@ -198,149 +198,149 @@ "platform_32k_rc_tune": "0x0001f54d", "platform_calibrate_32k": "0x0001f561", "platform_config": "0x0001f565", - "platform_enable_irq": "0x0001f659", - "platform_get_current_task": "0x0001f691", - "platform_get_gen_os_driver": "0x0001f6b5", - "platform_get_heap_status": "0x0001f6bd", - "platform_get_task_handle": "0x0001f6d5", - "platform_get_us_time": "0x0001f6f5", - "platform_get_version": "0x0001f6f9", - "platform_hrng": "0x0001f701", - "platform_install_isr_stack": "0x0001f709", - "platform_install_task_stack": "0x0001f715", - "platform_patch_rf_init_data": "0x0001f74d", - "platform_printf": "0x0001f759", - "platform_raise_assertion": "0x0001f76d", - "platform_rand": "0x0001f781", - "platform_read_info": "0x0001f785", - "platform_read_persistent_reg": "0x0001f7b5", - "platform_reset": "0x0001f7c5", - "platform_set_evt_callback": "0x0001f7e9", - "platform_set_evt_callback_table": "0x0001f7fd", - "platform_set_irq_callback": "0x0001f809", - "platform_set_irq_callback_table": "0x0001f825", - "platform_set_rf_clk_source": "0x0001f831", - "platform_set_rf_init_data": "0x0001f83d", - "platform_set_rf_power_mapping": "0x0001f849", - "platform_set_timer": "0x0001f855", - "platform_shutdown": "0x0001f859", - "platform_switch_app": "0x0001f85d", - "platform_trace_raw": "0x0001f889", - "platform_write_persistent_reg": "0x0001f8a1", - "printf_hexdump": "0x0001fa55", - "pvPortMalloc": "0x00020545", - "pvTaskIncrementMutexHeldCount": "0x0002062d", - "pvTimerGetTimerID": "0x00020645", - "pxPortInitialiseStack": "0x00020671", - "reverse_128": "0x00020819", - "reverse_24": "0x0002081f", - "reverse_48": "0x00020825", - "reverse_56": "0x0002082b", - "reverse_64": "0x00020831", - "reverse_bd_addr": "0x00020837", - "reverse_bytes": "0x0002083d", - "sm_add_event_handler": "0x000209e9", - "sm_address_resolution_lookup": "0x00020b41", - "sm_authenticated": "0x00020ea1", - "sm_authorization_decline": "0x00020eaf", - "sm_authorization_grant": "0x00020ecf", - "sm_authorization_state": "0x00020eef", - "sm_bonding_decline": "0x00020f09", - "sm_config": "0x00021329", - "sm_config_conn": "0x00021341", - "sm_encryption_key_size": "0x000214f7", - "sm_just_works_confirm": "0x00021a31", - "sm_le_device_key": "0x00021d6d", - "sm_passkey_input": "0x00021e03", - "sm_private_random_address_generation_get": "0x000221b1", - "sm_private_random_address_generation_get_mode": "0x000221b9", - "sm_private_random_address_generation_set_mode": "0x000221c5", - "sm_private_random_address_generation_set_update_period": "0x000221ed", - "sm_register_oob_data_callback": "0x00022329", - "sm_request_pairing": "0x00022335", - "sm_send_security_request": "0x00022d6f", - "sm_set_accepted_stk_generation_methods": "0x00022d95", - "sm_set_authentication_requirements": "0x00022da1", - "sm_set_encryption_key_size_range": "0x00022dad", - "sscanf_bd_addr": "0x0002317d", - "sysSetPublicDeviceAddr": "0x00023531", - "uuid128_to_str": "0x00023b39", - "uuid_add_bluetooth_prefix": "0x00023b91", - "uuid_has_bluetooth_prefix": "0x00023bb1", - "uxListRemove": "0x00023bcd", - "uxQueueMessagesWaiting": "0x00023bf5", - "uxQueueMessagesWaitingFromISR": "0x00023c1d", - "uxQueueSpacesAvailable": "0x00023c39", - "uxTaskGetStackHighWaterMark": "0x00023c65", - "uxTaskPriorityGet": "0x00023c85", - "uxTaskPriorityGetFromISR": "0x00023ca1", - "vListInitialise": "0x00023d5b", - "vListInitialiseItem": "0x00023d71", - "vListInsert": "0x00023d77", - "vListInsertEnd": "0x00023da7", - "vPortEndScheduler": "0x00023dc1", - "vPortEnterCritical": "0x00023ded", - "vPortExitCritical": "0x00023e31", - "vPortFree": "0x00023e65", - "vPortSuppressTicksAndSleep": "0x00023ef9", - "vPortValidateInterruptPriority": "0x00024015", - "vQueueDelete": "0x00024071", - "vQueueWaitForMessageRestricted": "0x0002409d", - "vTaskDelay": "0x000240e5", - "vTaskInternalSetTimeOutState": "0x00024131", - "vTaskMissedYield": "0x00024141", - "vTaskPlaceOnEventList": "0x0002414d", - "vTaskPlaceOnEventListRestricted": "0x00024185", - "vTaskPriorityDisinheritAfterTimeout": "0x000241c5", - "vTaskPrioritySet": "0x00024271", - "vTaskResume": "0x00024339", - "vTaskStartScheduler": "0x000243bd", - "vTaskStepTick": "0x0002444d", - "vTaskSuspend": "0x0002447d", - "vTaskSuspendAll": "0x00024539", - "vTaskSwitchContext": "0x00024549", - "xPortStartScheduler": "0x000245f1", - "xQueueAddToSet": "0x000246b9", - "xQueueCreateCountingSemaphore": "0x000246dd", - "xQueueCreateCountingSemaphoreStatic": "0x00024719", - "xQueueCreateMutex": "0x0002475d", - "xQueueCreateMutexStatic": "0x00024773", - "xQueueCreateSet": "0x0002478d", - "xQueueGenericCreate": "0x00024795", - "xQueueGenericCreateStatic": "0x000247e1", - "xQueueGenericReset": "0x00024849", - "xQueueGenericSend": "0x000248d5", - "xQueueGenericSendFromISR": "0x00024a41", - "xQueueGiveFromISR": "0x00024b01", - "xQueueGiveMutexRecursive": "0x00024ba5", - "xQueueIsQueueEmptyFromISR": "0x00024be5", - "xQueueIsQueueFullFromISR": "0x00024c09", - "xQueuePeek": "0x00024c31", - "xQueuePeekFromISR": "0x00024d59", - "xQueueReceive": "0x00024dc5", - "xQueueReceiveFromISR": "0x00024ef1", - "xQueueRemoveFromSet": "0x00024f85", - "xQueueSelectFromSet": "0x00024fa7", - "xQueueSelectFromSetFromISR": "0x00024fb9", - "xQueueSemaphoreTake": "0x00024fcd", - "xQueueTakeMutexRecursive": "0x00025139", - "xTaskCheckForTimeOut": "0x0002517d", - "xTaskCreate": "0x000251ed", - "xTaskCreateStatic": "0x00025249", - "xTaskGetCurrentTaskHandle": "0x000252b9", - "xTaskGetSchedulerState": "0x000252c5", - "xTaskGetTickCount": "0x000252e1", - "xTaskGetTickCountFromISR": "0x000252ed", - "xTaskIncrementTick": "0x000252fd", - "xTaskPriorityDisinherit": "0x000253c9", - "xTaskPriorityInherit": "0x0002545d", - "xTaskRemoveFromEventList": "0x000254f1", - "xTaskResumeAll": "0x00025571", - "xTaskResumeFromISR": "0x00025639", - "xTimerCreate": "0x000256c5", - "xTimerCreateStatic": "0x000256f9", - "xTimerCreateTimerTask": "0x00025731", - "xTimerGenericCommand": "0x0002579d", - "xTimerGetExpiryTime": "0x0002580d", - "xTimerGetTimerDaemonTaskHandle": "0x0002582d" + "platform_enable_irq": "0x0001f68d", + "platform_get_current_task": "0x0001f6c5", + "platform_get_gen_os_driver": "0x0001f6e9", + "platform_get_heap_status": "0x0001f6f1", + "platform_get_task_handle": "0x0001f709", + "platform_get_us_time": "0x0001f729", + "platform_get_version": "0x0001f72d", + "platform_hrng": "0x0001f735", + "platform_install_isr_stack": "0x0001f73d", + "platform_install_task_stack": "0x0001f749", + "platform_patch_rf_init_data": "0x0001f781", + "platform_printf": "0x0001f78d", + "platform_raise_assertion": "0x0001f7a1", + "platform_rand": "0x0001f7b5", + "platform_read_info": "0x0001f7b9", + "platform_read_persistent_reg": "0x0001f7e9", + "platform_reset": "0x0001f7f9", + "platform_set_evt_callback": "0x0001f81d", + "platform_set_evt_callback_table": "0x0001f831", + "platform_set_irq_callback": "0x0001f83d", + "platform_set_irq_callback_table": "0x0001f859", + "platform_set_rf_clk_source": "0x0001f865", + "platform_set_rf_init_data": "0x0001f871", + "platform_set_rf_power_mapping": "0x0001f87d", + "platform_set_timer": "0x0001f889", + "platform_shutdown": "0x0001f88d", + "platform_switch_app": "0x0001f891", + "platform_trace_raw": "0x0001f8bd", + "platform_write_persistent_reg": "0x0001f8d5", + "printf_hexdump": "0x0001fa89", + "pvPortMalloc": "0x00020579", + "pvTaskIncrementMutexHeldCount": "0x00020661", + "pvTimerGetTimerID": "0x00020679", + "pxPortInitialiseStack": "0x000206a5", + "reverse_128": "0x0002084d", + "reverse_24": "0x00020853", + "reverse_48": "0x00020859", + "reverse_56": "0x0002085f", + "reverse_64": "0x00020865", + "reverse_bd_addr": "0x0002086b", + "reverse_bytes": "0x00020871", + "sm_add_event_handler": "0x00020a1d", + "sm_address_resolution_lookup": "0x00020b75", + "sm_authenticated": "0x00020ed5", + "sm_authorization_decline": "0x00020ee3", + "sm_authorization_grant": "0x00020f03", + "sm_authorization_state": "0x00020f23", + "sm_bonding_decline": "0x00020f3d", + "sm_config": "0x0002135d", + "sm_config_conn": "0x00021375", + "sm_encryption_key_size": "0x0002152b", + "sm_just_works_confirm": "0x00021a65", + "sm_le_device_key": "0x00021da1", + "sm_passkey_input": "0x00021e37", + "sm_private_random_address_generation_get": "0x000221e5", + "sm_private_random_address_generation_get_mode": "0x000221ed", + "sm_private_random_address_generation_set_mode": "0x000221f9", + "sm_private_random_address_generation_set_update_period": "0x00022221", + "sm_register_oob_data_callback": "0x0002235d", + "sm_request_pairing": "0x00022369", + "sm_send_security_request": "0x00022da3", + "sm_set_accepted_stk_generation_methods": "0x00022dc9", + "sm_set_authentication_requirements": "0x00022dd5", + "sm_set_encryption_key_size_range": "0x00022de1", + "sscanf_bd_addr": "0x000231b1", + "sysSetPublicDeviceAddr": "0x00023565", + "uuid128_to_str": "0x00023b6d", + "uuid_add_bluetooth_prefix": "0x00023bc5", + "uuid_has_bluetooth_prefix": "0x00023be5", + "uxListRemove": "0x00023c01", + "uxQueueMessagesWaiting": "0x00023c29", + "uxQueueMessagesWaitingFromISR": "0x00023c51", + "uxQueueSpacesAvailable": "0x00023c6d", + "uxTaskGetStackHighWaterMark": "0x00023c99", + "uxTaskPriorityGet": "0x00023cb9", + "uxTaskPriorityGetFromISR": "0x00023cd5", + "vListInitialise": "0x00023d8f", + "vListInitialiseItem": "0x00023da5", + "vListInsert": "0x00023dab", + "vListInsertEnd": "0x00023ddb", + "vPortEndScheduler": "0x00023df5", + "vPortEnterCritical": "0x00023e21", + "vPortExitCritical": "0x00023e65", + "vPortFree": "0x00023e99", + "vPortSuppressTicksAndSleep": "0x00023f2d", + "vPortValidateInterruptPriority": "0x00024049", + "vQueueDelete": "0x000240a5", + "vQueueWaitForMessageRestricted": "0x000240d1", + "vTaskDelay": "0x00024119", + "vTaskInternalSetTimeOutState": "0x00024165", + "vTaskMissedYield": "0x00024175", + "vTaskPlaceOnEventList": "0x00024181", + "vTaskPlaceOnEventListRestricted": "0x000241b9", + "vTaskPriorityDisinheritAfterTimeout": "0x000241f9", + "vTaskPrioritySet": "0x000242a5", + "vTaskResume": "0x0002436d", + "vTaskStartScheduler": "0x000243f1", + "vTaskStepTick": "0x00024481", + "vTaskSuspend": "0x000244b1", + "vTaskSuspendAll": "0x0002456d", + "vTaskSwitchContext": "0x0002457d", + "xPortStartScheduler": "0x00024625", + "xQueueAddToSet": "0x000246ed", + "xQueueCreateCountingSemaphore": "0x00024711", + "xQueueCreateCountingSemaphoreStatic": "0x0002474d", + "xQueueCreateMutex": "0x00024791", + "xQueueCreateMutexStatic": "0x000247a7", + "xQueueCreateSet": "0x000247c1", + "xQueueGenericCreate": "0x000247c9", + "xQueueGenericCreateStatic": "0x00024815", + "xQueueGenericReset": "0x0002487d", + "xQueueGenericSend": "0x00024909", + "xQueueGenericSendFromISR": "0x00024a75", + "xQueueGiveFromISR": "0x00024b35", + "xQueueGiveMutexRecursive": "0x00024bd9", + "xQueueIsQueueEmptyFromISR": "0x00024c19", + "xQueueIsQueueFullFromISR": "0x00024c3d", + "xQueuePeek": "0x00024c65", + "xQueuePeekFromISR": "0x00024d8d", + "xQueueReceive": "0x00024df9", + "xQueueReceiveFromISR": "0x00024f25", + "xQueueRemoveFromSet": "0x00024fb9", + "xQueueSelectFromSet": "0x00024fdb", + "xQueueSelectFromSetFromISR": "0x00024fed", + "xQueueSemaphoreTake": "0x00025001", + "xQueueTakeMutexRecursive": "0x0002516d", + "xTaskCheckForTimeOut": "0x000251b1", + "xTaskCreate": "0x00025221", + "xTaskCreateStatic": "0x0002527d", + "xTaskGetCurrentTaskHandle": "0x000252ed", + "xTaskGetSchedulerState": "0x000252f9", + "xTaskGetTickCount": "0x00025315", + "xTaskGetTickCountFromISR": "0x00025321", + "xTaskIncrementTick": "0x00025331", + "xTaskPriorityDisinherit": "0x000253fd", + "xTaskPriorityInherit": "0x00025491", + "xTaskRemoveFromEventList": "0x00025525", + "xTaskResumeAll": "0x000255a5", + "xTaskResumeFromISR": "0x0002566d", + "xTimerCreate": "0x000256f9", + "xTimerCreateStatic": "0x0002572d", + "xTimerCreateTimerTask": "0x00025765", + "xTimerGenericCommand": "0x000257d1", + "xTimerGetExpiryTime": "0x00025841", + "xTimerGetTimerDaemonTaskHandle": "0x00025861" } \ No newline at end of file diff --git a/bundles/exp/ING9187xx/meta.json b/bundles/exp/ING9187xx/meta.json index d1ae9dcc7..e34a43fac 100644 --- a/bundles/exp/ING9187xx/meta.json +++ b/bundles/exp/ING9187xx/meta.json @@ -8,11 +8,11 @@ }, "rom": { "base": 16384, - "size": 144232 + "size": 144288 }, "version": [ 1, 9, - 15 + 16 ] } \ No newline at end of file diff --git a/bundles/exp/ING9187xx/platform.bin b/bundles/exp/ING9187xx/platform.bin index 910c5a3b4ff4c5462be9b3efda9c7a9950fe8ffe..c6d855d13a6371ae693fcbdf8ec19ed9dfb1d917 100644 GIT binary patch delta 7547 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 diff --git a/bundles/exp/ING9188xx/apis.json b/bundles/exp/ING9188xx/apis.json index 88d85182c..743d7cc32 100644 --- a/bundles/exp/ING9188xx/apis.json +++ b/bundles/exp/ING9188xx/apis.json @@ -217,149 +217,149 @@ "platform_32k_rc_tune": "0x00020b85", "platform_calibrate_32k": "0x00020b99", "platform_config": "0x00020b9d", - "platform_enable_irq": "0x00020c91", - "platform_get_current_task": "0x00020cc9", - "platform_get_gen_os_driver": "0x00020ced", - "platform_get_heap_status": "0x00020cf5", - "platform_get_task_handle": "0x00020d0d", - "platform_get_us_time": "0x00020d2d", - "platform_get_version": "0x00020d31", - "platform_hrng": "0x00020d39", - "platform_install_isr_stack": "0x00020d41", - "platform_install_task_stack": "0x00020d4d", - "platform_patch_rf_init_data": "0x00020d85", - "platform_printf": "0x00020d91", - "platform_raise_assertion": "0x00020da5", - "platform_rand": "0x00020db9", - "platform_read_info": "0x00020dbd", - "platform_read_persistent_reg": "0x00020ded", - "platform_reset": "0x00020dfd", - "platform_set_evt_callback": "0x00020e21", - "platform_set_evt_callback_table": "0x00020e35", - "platform_set_irq_callback": "0x00020e41", - "platform_set_irq_callback_table": "0x00020e5d", - "platform_set_rf_clk_source": "0x00020e69", - "platform_set_rf_init_data": "0x00020e75", - "platform_set_rf_power_mapping": "0x00020e81", - "platform_set_timer": "0x00020e8d", - "platform_shutdown": "0x00020e91", - "platform_switch_app": "0x00020e95", - "platform_trace_raw": "0x00020ec1", - "platform_write_persistent_reg": "0x00020ed9", - "printf_hexdump": "0x0002108d", - "pvPortMalloc": "0x00021b7d", - "pvTaskIncrementMutexHeldCount": "0x00021c65", - "pvTimerGetTimerID": "0x00021c7d", - "pxPortInitialiseStack": "0x00021ca9", - "reverse_128": "0x00021e89", - "reverse_24": "0x00021e8f", - "reverse_48": "0x00021e95", - "reverse_56": "0x00021e9b", - "reverse_64": "0x00021ea1", - "reverse_bd_addr": "0x00021ea7", - "reverse_bytes": "0x00021ead", - "sm_add_event_handler": "0x000221ad", - "sm_address_resolution_lookup": "0x00022305", - "sm_authenticated": "0x00022665", - "sm_authorization_decline": "0x00022673", - "sm_authorization_grant": "0x00022693", - "sm_authorization_state": "0x000226b3", - "sm_bonding_decline": "0x000226cd", - "sm_config": "0x00022aed", - "sm_config_conn": "0x00022b05", - "sm_encryption_key_size": "0x00022cbb", - "sm_just_works_confirm": "0x000231f5", - "sm_le_device_key": "0x00023531", - "sm_passkey_input": "0x000235c7", - "sm_private_random_address_generation_get": "0x00023975", - "sm_private_random_address_generation_get_mode": "0x0002397d", - "sm_private_random_address_generation_set_mode": "0x00023989", - "sm_private_random_address_generation_set_update_period": "0x000239b1", - "sm_register_oob_data_callback": "0x00023aed", - "sm_request_pairing": "0x00023af9", - "sm_send_security_request": "0x00024533", - "sm_set_accepted_stk_generation_methods": "0x00024559", - "sm_set_authentication_requirements": "0x00024565", - "sm_set_encryption_key_size_range": "0x00024571", - "sscanf_bd_addr": "0x00024941", - "sysSetPublicDeviceAddr": "0x00024cf5", - "uuid128_to_str": "0x00025491", - "uuid_add_bluetooth_prefix": "0x000254e9", - "uuid_has_bluetooth_prefix": "0x00025509", - "uxListRemove": "0x00025525", - "uxQueueMessagesWaiting": "0x0002554d", - "uxQueueMessagesWaitingFromISR": "0x00025575", - "uxQueueSpacesAvailable": "0x00025591", - "uxTaskGetStackHighWaterMark": "0x000255bd", - "uxTaskPriorityGet": "0x000255dd", - "uxTaskPriorityGetFromISR": "0x000255f9", - "vListInitialise": "0x000256b3", - "vListInitialiseItem": "0x000256c9", - "vListInsert": "0x000256cf", - "vListInsertEnd": "0x000256ff", - "vPortEndScheduler": "0x00025719", - "vPortEnterCritical": "0x00025745", - "vPortExitCritical": "0x00025789", - "vPortFree": "0x000257bd", - "vPortSuppressTicksAndSleep": "0x00025851", - "vPortValidateInterruptPriority": "0x0002596d", - "vQueueDelete": "0x000259c9", - "vQueueWaitForMessageRestricted": "0x000259f5", - "vTaskDelay": "0x00025a3d", - "vTaskInternalSetTimeOutState": "0x00025a89", - "vTaskMissedYield": "0x00025a99", - "vTaskPlaceOnEventList": "0x00025aa5", - "vTaskPlaceOnEventListRestricted": "0x00025add", - "vTaskPriorityDisinheritAfterTimeout": "0x00025b1d", - "vTaskPrioritySet": "0x00025bc9", - "vTaskResume": "0x00025c91", - "vTaskStartScheduler": "0x00025d15", - "vTaskStepTick": "0x00025da5", - "vTaskSuspend": "0x00025dd5", - "vTaskSuspendAll": "0x00025e91", - "vTaskSwitchContext": "0x00025ea1", - "xPortStartScheduler": "0x00025f49", - "xQueueAddToSet": "0x00026011", - "xQueueCreateCountingSemaphore": "0x00026035", - "xQueueCreateCountingSemaphoreStatic": "0x00026071", - "xQueueCreateMutex": "0x000260b5", - "xQueueCreateMutexStatic": "0x000260cb", - "xQueueCreateSet": "0x000260e5", - "xQueueGenericCreate": "0x000260ed", - "xQueueGenericCreateStatic": "0x00026139", - "xQueueGenericReset": "0x000261a1", - "xQueueGenericSend": "0x0002622d", - "xQueueGenericSendFromISR": "0x00026399", - "xQueueGiveFromISR": "0x00026459", - "xQueueGiveMutexRecursive": "0x000264fd", - "xQueueIsQueueEmptyFromISR": "0x0002653d", - "xQueueIsQueueFullFromISR": "0x00026561", - "xQueuePeek": "0x00026589", - "xQueuePeekFromISR": "0x000266b1", - "xQueueReceive": "0x0002671d", - "xQueueReceiveFromISR": "0x00026849", - "xQueueRemoveFromSet": "0x000268dd", - "xQueueSelectFromSet": "0x000268ff", - "xQueueSelectFromSetFromISR": "0x00026911", - "xQueueSemaphoreTake": "0x00026925", - "xQueueTakeMutexRecursive": "0x00026a91", - "xTaskCheckForTimeOut": "0x00026ad5", - "xTaskCreate": "0x00026b45", - "xTaskCreateStatic": "0x00026ba1", - "xTaskGetCurrentTaskHandle": "0x00026c11", - "xTaskGetSchedulerState": "0x00026c1d", - "xTaskGetTickCount": "0x00026c39", - "xTaskGetTickCountFromISR": "0x00026c45", - "xTaskIncrementTick": "0x00026c55", - "xTaskPriorityDisinherit": "0x00026d21", - "xTaskPriorityInherit": "0x00026db5", - "xTaskRemoveFromEventList": "0x00026e49", - "xTaskResumeAll": "0x00026ec9", - "xTaskResumeFromISR": "0x00026f91", - "xTimerCreate": "0x0002701d", - "xTimerCreateStatic": "0x00027051", - "xTimerCreateTimerTask": "0x00027089", - "xTimerGenericCommand": "0x000270f5", - "xTimerGetExpiryTime": "0x00027165", - "xTimerGetTimerDaemonTaskHandle": "0x00027185" + "platform_enable_irq": "0x00020cc5", + "platform_get_current_task": "0x00020cfd", + "platform_get_gen_os_driver": "0x00020d21", + "platform_get_heap_status": "0x00020d29", + "platform_get_task_handle": "0x00020d41", + "platform_get_us_time": "0x00020d61", + "platform_get_version": "0x00020d65", + "platform_hrng": "0x00020d6d", + "platform_install_isr_stack": "0x00020d75", + "platform_install_task_stack": "0x00020d81", + "platform_patch_rf_init_data": "0x00020db9", + "platform_printf": "0x00020dc5", + "platform_raise_assertion": "0x00020dd9", + "platform_rand": "0x00020ded", + "platform_read_info": "0x00020df1", + "platform_read_persistent_reg": "0x00020e21", + "platform_reset": "0x00020e31", + "platform_set_evt_callback": "0x00020e55", + "platform_set_evt_callback_table": "0x00020e69", + "platform_set_irq_callback": "0x00020e75", + "platform_set_irq_callback_table": "0x00020e91", + "platform_set_rf_clk_source": "0x00020e9d", + "platform_set_rf_init_data": "0x00020ea9", + "platform_set_rf_power_mapping": "0x00020eb5", + "platform_set_timer": "0x00020ec1", + "platform_shutdown": "0x00020ec5", + "platform_switch_app": "0x00020ec9", + "platform_trace_raw": "0x00020ef5", + "platform_write_persistent_reg": "0x00020f0d", + "printf_hexdump": "0x000210c1", + "pvPortMalloc": "0x00021bb1", + "pvTaskIncrementMutexHeldCount": "0x00021c99", + "pvTimerGetTimerID": "0x00021cb1", + "pxPortInitialiseStack": "0x00021cdd", + "reverse_128": "0x00021ebd", + "reverse_24": "0x00021ec3", + "reverse_48": "0x00021ec9", + "reverse_56": "0x00021ecf", + "reverse_64": "0x00021ed5", + "reverse_bd_addr": "0x00021edb", + "reverse_bytes": "0x00021ee1", + "sm_add_event_handler": "0x000221e1", + "sm_address_resolution_lookup": "0x00022339", + "sm_authenticated": "0x00022699", + "sm_authorization_decline": "0x000226a7", + "sm_authorization_grant": "0x000226c7", + "sm_authorization_state": "0x000226e7", + "sm_bonding_decline": "0x00022701", + "sm_config": "0x00022b21", + "sm_config_conn": "0x00022b39", + "sm_encryption_key_size": "0x00022cef", + "sm_just_works_confirm": "0x00023229", + "sm_le_device_key": "0x00023565", + "sm_passkey_input": "0x000235fb", + "sm_private_random_address_generation_get": "0x000239a9", + "sm_private_random_address_generation_get_mode": "0x000239b1", + "sm_private_random_address_generation_set_mode": "0x000239bd", + "sm_private_random_address_generation_set_update_period": "0x000239e5", + "sm_register_oob_data_callback": "0x00023b21", + "sm_request_pairing": "0x00023b2d", + "sm_send_security_request": "0x00024567", + "sm_set_accepted_stk_generation_methods": "0x0002458d", + "sm_set_authentication_requirements": "0x00024599", + "sm_set_encryption_key_size_range": "0x000245a5", + "sscanf_bd_addr": "0x00024975", + "sysSetPublicDeviceAddr": "0x00024d29", + "uuid128_to_str": "0x000254c5", + "uuid_add_bluetooth_prefix": "0x0002551d", + "uuid_has_bluetooth_prefix": "0x0002553d", + "uxListRemove": "0x00025559", + "uxQueueMessagesWaiting": "0x00025581", + "uxQueueMessagesWaitingFromISR": "0x000255a9", + "uxQueueSpacesAvailable": "0x000255c5", + "uxTaskGetStackHighWaterMark": "0x000255f1", + "uxTaskPriorityGet": "0x00025611", + "uxTaskPriorityGetFromISR": "0x0002562d", + "vListInitialise": "0x000256e7", + "vListInitialiseItem": "0x000256fd", + "vListInsert": "0x00025703", + "vListInsertEnd": "0x00025733", + "vPortEndScheduler": "0x0002574d", + "vPortEnterCritical": "0x00025779", + "vPortExitCritical": "0x000257bd", + "vPortFree": "0x000257f1", + "vPortSuppressTicksAndSleep": "0x00025885", + "vPortValidateInterruptPriority": "0x000259a1", + "vQueueDelete": "0x000259fd", + "vQueueWaitForMessageRestricted": "0x00025a29", + "vTaskDelay": "0x00025a71", + "vTaskInternalSetTimeOutState": "0x00025abd", + "vTaskMissedYield": "0x00025acd", + "vTaskPlaceOnEventList": "0x00025ad9", + "vTaskPlaceOnEventListRestricted": "0x00025b11", + "vTaskPriorityDisinheritAfterTimeout": "0x00025b51", + "vTaskPrioritySet": "0x00025bfd", + "vTaskResume": "0x00025cc5", + "vTaskStartScheduler": "0x00025d49", + "vTaskStepTick": "0x00025dd9", + "vTaskSuspend": "0x00025e09", + "vTaskSuspendAll": "0x00025ec5", + "vTaskSwitchContext": "0x00025ed5", + "xPortStartScheduler": "0x00025f7d", + "xQueueAddToSet": "0x00026045", + "xQueueCreateCountingSemaphore": "0x00026069", + "xQueueCreateCountingSemaphoreStatic": "0x000260a5", + "xQueueCreateMutex": "0x000260e9", + "xQueueCreateMutexStatic": "0x000260ff", + "xQueueCreateSet": "0x00026119", + "xQueueGenericCreate": "0x00026121", + "xQueueGenericCreateStatic": "0x0002616d", + "xQueueGenericReset": "0x000261d5", + "xQueueGenericSend": "0x00026261", + "xQueueGenericSendFromISR": "0x000263cd", + "xQueueGiveFromISR": "0x0002648d", + "xQueueGiveMutexRecursive": "0x00026531", + "xQueueIsQueueEmptyFromISR": "0x00026571", + "xQueueIsQueueFullFromISR": "0x00026595", + "xQueuePeek": "0x000265bd", + "xQueuePeekFromISR": "0x000266e5", + "xQueueReceive": "0x00026751", + "xQueueReceiveFromISR": "0x0002687d", + "xQueueRemoveFromSet": "0x00026911", + "xQueueSelectFromSet": "0x00026933", + "xQueueSelectFromSetFromISR": "0x00026945", + "xQueueSemaphoreTake": "0x00026959", + "xQueueTakeMutexRecursive": "0x00026ac5", + "xTaskCheckForTimeOut": "0x00026b09", + "xTaskCreate": "0x00026b79", + "xTaskCreateStatic": "0x00026bd5", + "xTaskGetCurrentTaskHandle": "0x00026c45", + "xTaskGetSchedulerState": "0x00026c51", + "xTaskGetTickCount": "0x00026c6d", + "xTaskGetTickCountFromISR": "0x00026c79", + "xTaskIncrementTick": "0x00026c89", + "xTaskPriorityDisinherit": "0x00026d55", + "xTaskPriorityInherit": "0x00026de9", + "xTaskRemoveFromEventList": "0x00026e7d", + "xTaskResumeAll": "0x00026efd", + "xTaskResumeFromISR": "0x00026fc5", + "xTimerCreate": "0x00027051", + "xTimerCreateStatic": "0x00027085", + "xTimerCreateTimerTask": "0x000270bd", + "xTimerGenericCommand": "0x00027129", + "xTimerGetExpiryTime": "0x00027199", + "xTimerGetTimerDaemonTaskHandle": "0x000271b9" } \ No newline at end of file diff --git a/bundles/exp/ING9188xx/meta.json b/bundles/exp/ING9188xx/meta.json index add08bc23..2cd1a563e 100644 --- a/bundles/exp/ING9188xx/meta.json +++ b/bundles/exp/ING9188xx/meta.json @@ -8,11 +8,11 @@ }, "rom": { "base": 16384, - "size": 151176 + "size": 151224 }, "version": [ 1, 9, - 15 + 16 ] } \ No newline at end of file diff --git a/bundles/exp/ING9188xx/platform.bin b/bundles/exp/ING9188xx/platform.bin index 9a34d19040da106a92f84dce0a10c9e29086f1ba..14e67de94de71d8d0f7d9a04bb8a4bfd1b2df699 100644 GIT binary patch delta 8188 zcmY*e30zc1((me-f#H%tql{Xy(n+G48%_0uGznVwSiij|O__u!ACo49ju=m?ppg^*CM5U#k=a1%LaxjAD$;^MlwXzm})2^A!1;c zxg_9qaDC9_awtrEC_D~4;&_LTp%t|9CqY+*EbU zss!(-z<(dJx040)z@5YY)R@Av-)8<_Lx1m*H!3W<)GNtvP?- zMDQ{?)%7HzKOe-0iBrrMBA0?H<#?F*s(Iw#1n{b|E1R-K=ZIz4+9BjeCHOXVQXXsK zNI8iBtzj7_CJ6OWp#ulm2xnMGxWxLz8YRz(r+>pod-(ipf+K1G>=QzxW8jIPkIn|0 zd0+HS8o9CS&})itq6IEYe6y>?&}UK~ZlQ5!iz^`!o(Da3e=&xM=Y+{agF-FNs6{W~ zI^d7nt0deaEHvr~F(G!CONRo$Fky4-NEjhlVl!c#*%`YEd>=VC^QwnsiR z{^A{T>F~7_)|flui^1<*Toqlqe(c0oCcZp#Y-HSs0zz!U_L1ZKek`EmE~aysu3%b> zX}NH1_9VIgNm=lByMOrS$WBG1xIR?uaC{wPF#PYxb;pGH>bgCr@G4M#(lQ04E#)L1l z{g6o(7E(joG>XfuB+i$IHVu_K7IlTx{~#P3J=kw~?~oK-wcNUw$gXP>Zj259o6s>j zLffNGkNSznXCkjc?`CvgK@C;bnVQlPQ>INw8nbF?NUuU|b*K=QeR+2tdV00gP0jx; z-BhPTI;2MVA!;=01s_F?u5^ar!p+9E7yT~P4MjOhUFimhRy0y=>6#Gnsot8J5%d~F1(3x1ImDm2)X{zhS|8Cl(&LmVMML>yAmozz2HsUelCsn{v zG+^m3hL+bF>2DUxhKwE?+&AhslQ>vQNL;?~%GkLyFkh%1JADX;tx7#Lx*1cg{~4ZU zoMb35mKm@w%K2qV3D`@WFAN*^Dkb^Cu5qtLYh;;q8Bfc@f6lAV z2|?q7gT6s-b&Us4-lIIxqFadTthfh|b3)emwW=%F$0nQ~zepvIiQ7!_4(eGb98dm} zN{I%r3Arx?YcC^JT4*lt5wT|
    nx>Xh`*j2@ldBkzUCrUBkHoMP|AJ$xSsjVaUm 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 delta 8140 zcmY*e30zc1((me-f#H%tL_|Q|fGCJYP*4z!oR1k5?>ibX#xTSSuZS@$5HE;}N1kl! zCMLL_F?g-uNXF5fc*Uq$HDY4E_<7+8L`@zdz8RR~tA}JancwgAzpJ~tySlo%tGegd zE|1b(9$SszyY1*8*te}=3G6XWgE)7UW-}$R#&Y!{==-=0#0w6tfVe5IlW;#?#c|@T zwm3e@pcOZ`NK`{zzJ-v3g4T0D!24h4XAz=&M(PzhVmPIOI!^ppnCEE&PMGbr4S3-< zuR!Q3xO-;-HIDP1;;Cp{Nm=j^$_eMY@8q7oM@fFIig(v3^LmFWpPVCU2GUPemzq;b zLPV#{SRD8cxL<8^s|pkAgl9cYd#$%Atq$KPK17@%n1d4F4dZV?BUDf-3<#^}9_}E0 z>uZi$mEarI?H`cvscgbwUew4bB_aRzQN3|u(Ld2g1-^9G4 z#!jV_;aEzUA6u`*{6WnBKI$5z7k1XI#C#7~VIA@;HXE?t-}!Q}ZpDAb%rQsF^XTB4 zX+9;7(~+NS{u%SH7I7>!s|8!)8m+wc|DC4Vti~b!OB3^Op&}^)#t7!5(UGzei;^%sy< z*An4(>!4yEr!2y;Kk$VjpSLi3WH1y6t49WRsJI?i>AzEaY56No<(0Z;ciOdi$XW z7V1(a^z3ha8A5r_YU7b4p5rZzVwO{4U-uC0E@60TBW-aAebT~Vr=U-Z^IPLU2f`Ea zQx_m_i1@y+DNPR^!u7OF2oZwQhX!|ZQC>at#F5=)l?JD@+Cj7l_h6qPBuFe57NrLT zgt+_~IP76&+leFEE$@bKe2{oc_#}NEWC*VGbeJflXT(KsbE3gqHFoyWXdlK$Yvu9g zIyXPoZh33Vf{?u&VL@V{uq$IZx+lNP1aK3wGIzsWp((R3{9Ewjv*?!&Vfd&X!ZLmc zEqawb!*>nya1pM4gFDCN6EUKVaE}}EYu)$|K7d#AJ;a$p3m*rmLS)up=qt>~N(Ys& zE30p}ZB8N{wh=DhqCrO>b2i$ApR=Oi2LW_*pi-Et%Y_8tqAnBnj<0?&3=-1yaYB{8 zyYP{|7j?A@`}O^4W4rLPzCY9ns!<8>m5@AYG;GB*)Mt;iXK^a8Yz{$x87$O{ilOt{ z1&zL&@%gA(fT|rgCJyR_k}(_Mq~MXgz;CX(H%`E#x?{n{1&N;t>$4;LR+;<%sdS5A z&W;O6Hpl*{^fhyks1#h;TIz5J;bZ$llrV1WX&*nEk|zb@%{n~RJ%rG4M*74miy%B6 z$H7&>eS9u_Dl8d4n!YC&_Yi&@&(RsLI6Nox1a~2F!pbgf4ieQ~XKB==1dER?Le+%# z;HWWdqA#fXyILCvd9h3wGRX=Dg@KcexYiFQZvt=Qk|`EY4REwJ3^&G23k3LF&`+;G z`@K8;2l`99@#u_1fNbH}%mY3dC6qkG&;B9BUG&8ppZvMRm_4h3q60{nvk8tFPtQqL zfYGR$=Yp<(YPgP)r)!Pf=YIu09c}_oveJ3-Np|C%dDwbH?odou=8i;1UYolSwVnS z9p0+3b62M>mc7-C#W4Z07;@;f)oLK8T8cHVyxGphF<5_Yu?f?{B}*`UwnXkNDL)L; z8Tn!V5ntCK{`!1bK1=>dObeF|M1Oi{=_<@eE_(yhl4bswRxFd{Ze5n{Cyy!1Q*B+= zDUW`6DvTF4Ezg5wp>_GLfq!>QvBqn(HL54ykQ75{Rxuyj5l$w}CgJW}kob`!MLsV| z2pNun%TeL#5%ayDEFVHAnF_myymL@fY>N(mj#zn!xsGu`lzU z1s>4f82QhE0A<3I!>M2}vct2LFyGi}oJJwUnEjQ996(Jwwq8w}t;Rd29s~3?o;%}G zzzyNtw{dXFD1EEYfSa-Xr#LUzYaDR@0EO?3Hy+-gXt>6PGMH-|(a01q!Fc`2CQk?y z=Dzd?A7SN70Y~1r4V&PmNgoLjO3;}WMZ+4DgEhsΜ*kO@M(uKHE|B0Zn46cC5Ep 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 I`Y%HMA4k05X#fBK diff --git a/bundles/exp/inc/platform_api.h b/bundles/exp/inc/platform_api.h index 82969b3f6..f9e010569 100644 --- a/bundles/exp/inc/platform_api.h +++ b/bundles/exp/inc/platform_api.h @@ -402,11 +402,8 @@ typedef enum PLATFORM_CFG_RC32K_EN, // Enable/Disable RC 32k clock. Default: Enable PLATFORM_CFG_OSC32K_EN, // Enable/Disable 32k crystal oscillator. Default: Enable PLATFORM_CFG_32K_CLK, // 32k clock selection. flag is platform_32k_clk_src_t. default: PLATFORM_32K_RC - // Note: When modifying this configuration, both RC32K and OSC32K should be ENABLED. - // For ING918, both clocks must be running: - // * For OSC32K, wait until status of OSC32K is OK; - // * For RC32K, wait 100us after enabled. - // Note: Wait another 100us before disabling the unused clock. + // Note 1: When modifying this configuration, both RC32K and OSC32K should be ENABLED. + // Note 2: Unused clock can be disabled. PLATFORM_CFG_32K_CLK_ACC, // Configure 32k clock accuracy in ppm. PLATFORM_CFG_32K_CALI_PERIOD, // 32K clock auto-calibration period in seconds. Default: 3600 * 2 PLATFORM_CFG_PS_DBG_0, // debugging parameter diff --git a/bundles/extension/ING9168xx/apis.json b/bundles/extension/ING9168xx/apis.json index 58144cdf7..879aeeb1b 100644 --- a/bundles/extension/ING9168xx/apis.json +++ b/bundles/extension/ING9168xx/apis.json @@ -209,149 +209,149 @@ "platform_32k_rc_tune": "0x0201fc1d", "platform_calibrate_32k": "0x0201fc39", "platform_config": "0x0201fc3d", - "platform_enable_irq": "0x0201fd45", - "platform_get_current_task": "0x0201fd79", - "platform_get_gen_os_driver": "0x0201fd9d", - "platform_get_heap_status": "0x0201fda5", - "platform_get_task_handle": "0x0201fdbd", - "platform_get_us_time": "0x0201fddd", - "platform_get_version": "0x0201fde1", - "platform_hrng": "0x0201fde9", - "platform_install_isr_stack": "0x0201fdf1", - "platform_install_task_stack": "0x0201fdfd", - "platform_patch_rf_init_data": "0x0201fe35", - "platform_printf": "0x0201fe41", - "platform_raise_assertion": "0x0201fe55", - "platform_rand": "0x0201fe69", - "platform_read_info": "0x0201fe6d", - "platform_read_persistent_reg": "0x0201fe9d", - "platform_reset": "0x0201fea9", - "platform_set_evt_callback": "0x0201febd", - "platform_set_evt_callback_table": "0x0201fed1", - "platform_set_irq_callback": "0x0201fedd", - "platform_set_irq_callback_table": "0x0201fef9", - "platform_set_rf_clk_source": "0x0201ff05", - "platform_set_rf_init_data": "0x0201ff11", - "platform_set_rf_power_mapping": "0x0201ff1d", - "platform_set_timer": "0x0201ff29", - "platform_shutdown": "0x0201ff2d", - "platform_switch_app": "0x0201ff31", - "platform_trace_raw": "0x0201ff49", - "platform_write_persistent_reg": "0x0201ff61", - "printf_hexdump": "0x02020119", - "pvPortMalloc": "0x02020bed", - "pvTaskIncrementMutexHeldCount": "0x02020cd5", - "pvTimerGetTimerID": "0x02020ced", - "pxPortInitialiseStack": "0x02020d19", - "reverse_128": "0x02020f01", - "reverse_24": "0x02020f07", - "reverse_48": "0x02020f0d", - "reverse_56": "0x02020f13", - "reverse_64": "0x02020f19", - "reverse_bd_addr": "0x02020f1f", - "reverse_bytes": "0x02020f25", - "sm_add_event_handler": "0x02021261", - "sm_address_resolution_lookup": "0x020213b9", - "sm_authenticated": "0x02021719", - "sm_authorization_decline": "0x02021727", - "sm_authorization_grant": "0x02021747", - "sm_authorization_state": "0x02021767", - "sm_bonding_decline": "0x02021781", - "sm_config": "0x02021b99", - "sm_config_conn": "0x02021bb1", - "sm_encryption_key_size": "0x02021d67", - "sm_just_works_confirm": "0x020222a1", - "sm_le_device_key": "0x020225dd", - "sm_passkey_input": "0x02022673", - "sm_private_random_address_generation_get": "0x02022a21", - "sm_private_random_address_generation_get_mode": "0x02022a29", - "sm_private_random_address_generation_set_mode": "0x02022a35", - "sm_private_random_address_generation_set_update_period": "0x02022a5d", - "sm_register_oob_data_callback": "0x02022b99", - "sm_request_pairing": "0x02022ba5", - "sm_send_security_request": "0x020235e3", - "sm_set_accepted_stk_generation_methods": "0x02023609", - "sm_set_authentication_requirements": "0x02023615", - "sm_set_encryption_key_size_range": "0x02023621", - "sscanf_bd_addr": "0x020239f9", - "sysSetPublicDeviceAddr": "0x02023e65", - "uuid128_to_str": "0x02024611", - "uuid_add_bluetooth_prefix": "0x02024669", - "uuid_has_bluetooth_prefix": "0x02024689", - "uxListRemove": "0x020246a5", - "uxQueueMessagesWaiting": "0x020246cd", - "uxQueueMessagesWaitingFromISR": "0x020246f5", - "uxQueueSpacesAvailable": "0x02024711", - "uxTaskGetStackHighWaterMark": "0x0202473d", - "uxTaskPriorityGet": "0x0202475d", - "uxTaskPriorityGetFromISR": "0x02024779", - "vListInitialise": "0x0202481f", - "vListInitialiseItem": "0x02024835", - "vListInsert": "0x0202483b", - "vListInsertEnd": "0x0202486b", - "vPortEndScheduler": "0x02024885", - "vPortEnterCritical": "0x020248b1", - "vPortExitCritical": "0x020248f5", - "vPortFree": "0x02024929", - "vPortSuppressTicksAndSleep": "0x020249cd", - "vPortValidateInterruptPriority": "0x02024af5", - "vQueueDelete": "0x02024b51", - "vQueueWaitForMessageRestricted": "0x02024b7d", - "vTaskDelay": "0x02024bc1", - "vTaskInternalSetTimeOutState": "0x02024c0d", - "vTaskMissedYield": "0x02024c1d", - "vTaskPlaceOnEventList": "0x02024c29", - "vTaskPlaceOnEventListRestricted": "0x02024c61", - "vTaskPriorityDisinheritAfterTimeout": "0x02024ca1", - "vTaskPrioritySet": "0x02024d4d", - "vTaskResume": "0x02024e15", - "vTaskStartScheduler": "0x02024e99", - "vTaskStepTick": "0x02024f29", - "vTaskSuspend": "0x02024f59", - "vTaskSuspendAll": "0x02025015", - "vTaskSwitchContext": "0x02025025", - "xPortStartScheduler": "0x020250cd", - "xQueueAddToSet": "0x020251d1", - "xQueueCreateCountingSemaphore": "0x020251f5", - "xQueueCreateCountingSemaphoreStatic": "0x02025231", - "xQueueCreateMutex": "0x02025275", - "xQueueCreateMutexStatic": "0x0202528b", - "xQueueCreateSet": "0x020252a5", - "xQueueGenericCreate": "0x020252ad", - "xQueueGenericCreateStatic": "0x020252f9", - "xQueueGenericReset": "0x02025361", - "xQueueGenericSend": "0x020253ed", - "xQueueGenericSendFromISR": "0x02025559", - "xQueueGiveFromISR": "0x02025619", - "xQueueGiveMutexRecursive": "0x020256bd", - "xQueueIsQueueEmptyFromISR": "0x020256fd", - "xQueueIsQueueFullFromISR": "0x02025721", - "xQueuePeek": "0x02025749", - "xQueuePeekFromISR": "0x02025871", - "xQueueReceive": "0x020258dd", - "xQueueReceiveFromISR": "0x02025a09", - "xQueueRemoveFromSet": "0x02025a9d", - "xQueueSelectFromSet": "0x02025abf", - "xQueueSelectFromSetFromISR": "0x02025ad1", - "xQueueSemaphoreTake": "0x02025ae5", - "xQueueTakeMutexRecursive": "0x02025c51", - "xTaskCheckForTimeOut": "0x02025c95", - "xTaskCreate": "0x02025d05", - "xTaskCreateStatic": "0x02025d61", - "xTaskGetCurrentTaskHandle": "0x02025dd1", - "xTaskGetSchedulerState": "0x02025ddd", - "xTaskGetTickCount": "0x02025df9", - "xTaskGetTickCountFromISR": "0x02025e05", - "xTaskIncrementTick": "0x02025e15", - "xTaskPriorityDisinherit": "0x02025ee1", - "xTaskPriorityInherit": "0x02025f75", - "xTaskRemoveFromEventList": "0x02026009", - "xTaskResumeAll": "0x02026089", - "xTaskResumeFromISR": "0x02026151", - "xTimerCreate": "0x020261dd", - "xTimerCreateStatic": "0x02026211", - "xTimerCreateTimerTask": "0x02026249", - "xTimerGenericCommand": "0x020262b5", - "xTimerGetExpiryTime": "0x02026325", - "xTimerGetTimerDaemonTaskHandle": "0x02026345" + "platform_enable_irq": "0x0201fd61", + "platform_get_current_task": "0x0201fd95", + "platform_get_gen_os_driver": "0x0201fdb9", + "platform_get_heap_status": "0x0201fdc1", + "platform_get_task_handle": "0x0201fdd9", + "platform_get_us_time": "0x0201fdf9", + "platform_get_version": "0x0201fdfd", + "platform_hrng": "0x0201fe05", + "platform_install_isr_stack": "0x0201fe0d", + "platform_install_task_stack": "0x0201fe19", + "platform_patch_rf_init_data": "0x0201fe51", + "platform_printf": "0x0201fe5d", + "platform_raise_assertion": "0x0201fe71", + "platform_rand": "0x0201fe85", + "platform_read_info": "0x0201fe89", + "platform_read_persistent_reg": "0x0201feb9", + "platform_reset": "0x0201fec5", + "platform_set_evt_callback": "0x0201fed9", + "platform_set_evt_callback_table": "0x0201feed", + "platform_set_irq_callback": "0x0201fef9", + "platform_set_irq_callback_table": "0x0201ff15", + "platform_set_rf_clk_source": "0x0201ff21", + "platform_set_rf_init_data": "0x0201ff2d", + "platform_set_rf_power_mapping": "0x0201ff39", + "platform_set_timer": "0x0201ff45", + "platform_shutdown": "0x0201ff49", + "platform_switch_app": "0x0201ff4d", + "platform_trace_raw": "0x0201ff65", + "platform_write_persistent_reg": "0x0201ff7d", + "printf_hexdump": "0x02020135", + "pvPortMalloc": "0x02020c09", + "pvTaskIncrementMutexHeldCount": "0x02020cf1", + "pvTimerGetTimerID": "0x02020d09", + "pxPortInitialiseStack": "0x02020d35", + "reverse_128": "0x02020f1d", + "reverse_24": "0x02020f23", + "reverse_48": "0x02020f29", + "reverse_56": "0x02020f2f", + "reverse_64": "0x02020f35", + "reverse_bd_addr": "0x02020f3b", + "reverse_bytes": "0x02020f41", + "sm_add_event_handler": "0x0202127d", + "sm_address_resolution_lookup": "0x020213d5", + "sm_authenticated": "0x02021735", + "sm_authorization_decline": "0x02021743", + "sm_authorization_grant": "0x02021763", + "sm_authorization_state": "0x02021783", + "sm_bonding_decline": "0x0202179d", + "sm_config": "0x02021bb5", + "sm_config_conn": "0x02021bcd", + "sm_encryption_key_size": "0x02021d83", + "sm_just_works_confirm": "0x020222bd", + "sm_le_device_key": "0x020225f9", + "sm_passkey_input": "0x0202268f", + "sm_private_random_address_generation_get": "0x02022a3d", + "sm_private_random_address_generation_get_mode": "0x02022a45", + "sm_private_random_address_generation_set_mode": "0x02022a51", + "sm_private_random_address_generation_set_update_period": "0x02022a79", + "sm_register_oob_data_callback": "0x02022bb5", + "sm_request_pairing": "0x02022bc1", + "sm_send_security_request": "0x020235ff", + "sm_set_accepted_stk_generation_methods": "0x02023625", + "sm_set_authentication_requirements": "0x02023631", + "sm_set_encryption_key_size_range": "0x0202363d", + "sscanf_bd_addr": "0x02023a15", + "sysSetPublicDeviceAddr": "0x02023e81", + "uuid128_to_str": "0x0202462d", + "uuid_add_bluetooth_prefix": "0x02024685", + "uuid_has_bluetooth_prefix": "0x020246a5", + "uxListRemove": "0x020246c1", + "uxQueueMessagesWaiting": "0x020246e9", + "uxQueueMessagesWaitingFromISR": "0x02024711", + "uxQueueSpacesAvailable": "0x0202472d", + "uxTaskGetStackHighWaterMark": "0x02024759", + "uxTaskPriorityGet": "0x02024779", + "uxTaskPriorityGetFromISR": "0x02024795", + "vListInitialise": "0x0202483b", + "vListInitialiseItem": "0x02024851", + "vListInsert": "0x02024857", + "vListInsertEnd": "0x02024887", + "vPortEndScheduler": "0x020248a1", + "vPortEnterCritical": "0x020248cd", + "vPortExitCritical": "0x02024911", + "vPortFree": "0x02024945", + "vPortSuppressTicksAndSleep": "0x020249e9", + "vPortValidateInterruptPriority": "0x02024b11", + "vQueueDelete": "0x02024b6d", + "vQueueWaitForMessageRestricted": "0x02024b99", + "vTaskDelay": "0x02024bdd", + "vTaskInternalSetTimeOutState": "0x02024c29", + "vTaskMissedYield": "0x02024c39", + "vTaskPlaceOnEventList": "0x02024c45", + "vTaskPlaceOnEventListRestricted": "0x02024c7d", + "vTaskPriorityDisinheritAfterTimeout": "0x02024cbd", + "vTaskPrioritySet": "0x02024d69", + "vTaskResume": "0x02024e31", + "vTaskStartScheduler": "0x02024eb5", + "vTaskStepTick": "0x02024f45", + "vTaskSuspend": "0x02024f75", + "vTaskSuspendAll": "0x02025031", + "vTaskSwitchContext": "0x02025041", + "xPortStartScheduler": "0x020250e9", + "xQueueAddToSet": "0x020251ed", + "xQueueCreateCountingSemaphore": "0x02025211", + "xQueueCreateCountingSemaphoreStatic": "0x0202524d", + "xQueueCreateMutex": "0x02025291", + "xQueueCreateMutexStatic": "0x020252a7", + "xQueueCreateSet": "0x020252c1", + "xQueueGenericCreate": "0x020252c9", + "xQueueGenericCreateStatic": "0x02025315", + "xQueueGenericReset": "0x0202537d", + "xQueueGenericSend": "0x02025409", + "xQueueGenericSendFromISR": "0x02025575", + "xQueueGiveFromISR": "0x02025635", + "xQueueGiveMutexRecursive": "0x020256d9", + "xQueueIsQueueEmptyFromISR": "0x02025719", + "xQueueIsQueueFullFromISR": "0x0202573d", + "xQueuePeek": "0x02025765", + "xQueuePeekFromISR": "0x0202588d", + "xQueueReceive": "0x020258f9", + "xQueueReceiveFromISR": "0x02025a25", + "xQueueRemoveFromSet": "0x02025ab9", + "xQueueSelectFromSet": "0x02025adb", + "xQueueSelectFromSetFromISR": "0x02025aed", + "xQueueSemaphoreTake": "0x02025b01", + "xQueueTakeMutexRecursive": "0x02025c6d", + "xTaskCheckForTimeOut": "0x02025cb1", + "xTaskCreate": "0x02025d21", + "xTaskCreateStatic": "0x02025d7d", + "xTaskGetCurrentTaskHandle": "0x02025ded", + "xTaskGetSchedulerState": "0x02025df9", + "xTaskGetTickCount": "0x02025e15", + "xTaskGetTickCountFromISR": "0x02025e21", + "xTaskIncrementTick": "0x02025e31", + "xTaskPriorityDisinherit": "0x02025efd", + "xTaskPriorityInherit": "0x02025f91", + "xTaskRemoveFromEventList": "0x02026025", + "xTaskResumeAll": "0x020260a5", + "xTaskResumeFromISR": "0x0202616d", + "xTimerCreate": "0x020261f9", + "xTimerCreateStatic": "0x0202622d", + "xTimerCreateTimerTask": "0x02026265", + "xTimerGenericCommand": "0x020262d1", + "xTimerGetExpiryTime": "0x02026341", + "xTimerGetTimerDaemonTaskHandle": "0x02026361" } \ No newline at end of file diff --git a/bundles/extension/ING9168xx/meta.json b/bundles/extension/ING9168xx/meta.json index 2938eb20d..32985f467 100644 --- a/bundles/extension/ING9168xx/meta.json +++ b/bundles/extension/ING9168xx/meta.json @@ -8,11 +8,11 @@ }, "rom": { "base": 33562624, - "size": 157488 + "size": 157516 }, "version": [ 2, 2, - 12 + 13 ] } \ No newline at end of file diff --git a/bundles/extension/ING9168xx/platform.bin b/bundles/extension/ING9168xx/platform.bin index 8e327dcecde4aa04e15a4637aa3531b3d21b8598..481cd435911c29c12f34299ecc668b72ced71592 100644 GIT binary patch delta 7953 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%0Ag>b0H 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 EKMuLOH~;_u delta 7299 zcmZ8m30zah)}M2eKmdUt0-_){K?Ot+P%5a%B3u$&z^Zk7ws8+C7F(@Yv=Un@TCK~i zjy|D%9n-N()cW`^166xfPjRl`-8T-rs@jzGS)wyG2V3o}{L5jnenDcBli`pVO*WHI&>C}s z#YBE*Sa4`mD`AZ@2peA=U!lYf=l(~I>5vQNuZM*|32zIFWF#BkH+(G9lq9?rKAB1S z*m_{5LPxZ~28lbYO-8RwFLs7$W0NZ(pG$C_b|PAc*B(>z@Hjg#G>3C}6fQAbJ(}pH5+jexzY&`YY*UCk*Wq z9h*-`QxgAm%uqkgNQQLBVoha;8gU0=G4B)mt|}gDr}>?+3&KpuXE@L+#E+{?$jz%L zD(%7rbN*Zo7a-nfR~}>$ukw+D`ozioo01qJOE0S;#E7(9UyOBm9=W~%>-jJ0bFe;{ zUo$8YSiWpf68?QU=%|YxTXBJ(5AGXP{9-@`@7iYTM?}7R@&rnQn`xZ&>OjVrX-YM& zGntKf8Q7(Duuj)8f5&>aRu*A*1&X@oGR89N1dX|{Lu^FcqR8wQOBhv&OOWdwUD7Iz zSXb)JZ$pHlj?tRm2oz`X|BA~oWWU%7pnTyAc}8rlsg?QIml2=UZ2nLENlo~F>P
    6!Ro(P?|TY0!bc2!JtF*n zxR-FuXr$E@gzuc6!Tq0;4Ue$=nV~(I`c(e*&>sHsG#VJ~|=!X{a3 zi?L4^K6h9E)1Jh?KTHQo{@}2Ykk3CJ))Tt%Zo|g~I;?*MF`Rp;P@cfCTy>L};gqr} z{l!oDH-|UFDt>xmC@kR3i7`H|PV{UX5qCQQC3}b?__K)y#%|@kMx>#K89yRU=`TKT z@*75U9~kH?*$9WoR+gLfq3%P6WJH?fJamC#z0;?W#ZjiVo-EgHnjge+{-TM$G-4Li z@>95#lS57NK$}LALoY;w3}vbS`hR(OQ^q?#a~H!6Wn=2avW^sS0$IgT3(wH z25<6)lnlt?x1?l27=Jeli`7Nm<;Rt^vHOzO7gNR3M zgw3ngpz~34e&S}{dt?L@@ChSd1GL|f^WYW_Y3a-}JFicRg&TZ9S`1&G=Ffkf)(iIY zchd#{c1a%q%lX9gICzz>Ne|{Xr$<3N)*`^0Z%&V7JnekcXn&p^r4*vMR{*uNHX{bU z=BqN+!YDpPzrbhYiQX)m=T_RG`YeC3kgwK<`b;^||8LyI{8N35U+{_Ozi~Au{Ly_3 zF=%mXQw#&(7{AtV#-UCKsd@zAHCG`X9o#ytE+C(BzG4p`8%U0!FFND7;kX(vOaGlq#HkGtPMWoGqMC2 z%(rEIz&vpXMcH40%G>e0@gIWW?VMwKL{xu7D$roQX;-Xm{PHF3m znHU%Nzh=B7L)6R>a+Fv!^L^;x&U#;lcV>4q9-pm~sT;Fjm0{?dzhsD=+tGjf+|^LZ z2hJNM^XAUGp^~SG=F?3bjIAcFAKnJi=}((p7+a@5ogc&0s?pJ)kClt;2AG_F9rh`Q z`ps4oIo(pIdC`=b(@&mZQOCDN*B`(~!nnL@C0rA{mo_j^$Uk2;33l*f@)KYP zzcxPtvW2qzAxdC{<`o`F$QPa$daI$opjxK@%s<@LXTcZ3l=V9maDs2yH~?F;A8r8{ zE(n`;DWD6V#Sdei*o6)J4uAlm&$c*#Okvt~3Q#JvP*;HYeA^B!b_?E_rG{fdZpnTn z92ERMAHv|$#vHH%oDxPI0yS(D#*_!(T^TLR6&ATGeJ~{wu2p}e21dyJZXyG*!r5~Z zJ^ePd16OTT5_78ZTD8rE#BdsM4L{)OCQu92S5*Krg|q*9s(|Z4#m%z}dYq_IN0Ls4|^DB zpnC>Fpzk%OE7!D~polToys``HE?%TR420mo(|>CSHx(AiBe;vlEY5+D0^mziVjuuq zEmLCP0|2e1Ar{OE*lC&f66^#JD8z$r&x38MwEFdh!9-VB?!zhSiEewG52wRvc3TF< z!!k9zV%eVzfdD%!XHp;-XxEXb1u+$L(9hyK66_2Nv-ohZPRaabx9rXYCBSuBG72uj zV!C)VjD!SB#b_u|pgJaH!zeYpMfXjHv#!~g=c>eXnmYvquu$z(RMj_h?^M|4mxB>V zCBAACmnUFER4}G|wdidzOaqk)Hqb01Y=m^nEhDT&ze?xK!~>aVsh$bd9`Kf>U=etG zge`SMSLrYvajkbTsKiAMby-)8X*v$H;ar(p)Q1 zD~x!at}KF0%(XP?wGN7*oE}{VLvmbfLk+TGW?B;rAS(zlUavMPwI&Y4TUN58QJUNS zL~3qrmijt^SP-8(V@G$_vNK3*R>K@*tY^~AQ zD81D_8R;7|YdypTN46K6N>iEIXig>eX=ihY=|HNY_Os`OMwJ*$OV&eR@AH zl@136LXu3#1qEU8HJ3bK0U;Ah3Ar=ea(g{|j(&iy*$n$py92i1dBJtdnyv7?0*28s z+hG{vY_+W44sQUStDWMJpf{#bJE0fcq+@o%5s0U4J0WD%y~;dLCM(6km3b9|N4s+_ z+#my+&xoM%iR$;uohBF2&9_HCc2MT9k?9#(6Otn$rjo8@$s&-k^`~2s!9ZrT0MXZn za|*H5$>z^#QEF1^tDEwYbp{Qm6iJm<52mhVTCs2()ThXQjd|5-c@;{{Q9kngxnl67x3#;a|oW;8$zj+aG135Hq7liiP zgAXn^hK)mro0Gc@dL@_6kWI%f09bo41J)8 z4l71CvWiYDhLFfoyYi`#^q!~UnxunmI?mS+j{y5|$L)xPxNCumDY8MEmYYxNfu!lZB41*YNC++tI zgd;ir3s@Y$Tl=S_r9ZrR(%MC%EL9a_Y<{glT1jty0oy=J7asv%ule|PF|Pw%chs5B zDZ2FtM8i3H_6S6x75;Gq{QUZ%gt`J2k}dCUVm6uAb!8hR3l01d4*JeHX#~Pz%*b%% z-Y*@Ye=Pk*uY8GJ7g0D0aURF)P+sz0WO0KumZltq*H9ZJM`2as?N*O^6RN7d)%2I-KkxJ>5Pw36^Ab&b-hHXxq08{P;v>5T`9)Mk~wQQAnSmqMbu5*3N=ZIgs6}cE z^(n__(C|W_JF?7e;YA0F^vR||f27`~N#*Db-=$UMFfJ^`%9bhh+0l=spW5*K#X6-c z_zu(K=JP7La4ODI%W@4;5RDN)>%PRMIRKaRfiAx*cyn@rbMdcp!tfwSy7u8TIBdmtUP z_v4~FjK~Ww-2r;C5`yDaJJhJq2hw|v3{xoA4+B9oSD7Jm=HfklTIWEk`tNErxZ3+t z6!okEE#A|CRS*Zm>6|L4#?T#l0!lFGe0u^T*?j7D5_mV(8c{GE4>5>-b`qAl-F0dU zMik$dQ1&Yr?=ryoP|~!~6<@(4m`HP~F=j^6wbigECCSl6uY5WgzG?Q(cGv5TYVLQb z%I2a~>mNxTt!NP7id@+g)!aj=@Pxd=;**}_hz-ash9Q1*&MC|zcF|j>U=zB;+!_dA z?x)fBYaoj0=Ag%GU~)*NUHN=-zPes{;E|MUcaPTSQgCy}Y}PWFlSBuch6vA68^e8M zP4=0B%dV!gPD7sJ20{YPTBBE(^2CAzdC~7E!qv5e zZOVHnCw zJ?XDpqN;r$eeaZ?WU}kjRIgY>SXo^z22F)}wt58#cd1qCA4q0vr%V~W{vBj^&2yN` zKeK+P2`O%u6gC?5J@kf|bo}>VhwtdPbC^&Zrq|EGn849C<9rf&HZzCQMElk|B)yGj z&)|3$XwnZ5;`^-qNn?dRExJJpvjb;AExtq-{{V4;M!Rdh>Oix!+D@MS!!^GE!d+`+ zdMd5?0s73kZO^Z2T)^uSxZ&8hn}cktd>cZC1{1AAN@$BmBl*}-U%-|TR=Zq1a&T>0 zJ+QXMwP&Arkcy>jjd{Q}o0$J(GkexLBXBg&Ijimfa`iidm8F=)@ z!RIk$GSE@y(HNgo^LdD5x;yEY=V2&}qRrLI!h8{rDQasj>~iq7yhsKd6Ou5JLUxAVY--5;;I;)Ip?MC05H^7*avE z)uEa0w|M@7pHX2R^}d92pQ0(3pbWRtatWi2fv&p@vxdEC)8eP225Fy7$Eh&{Hb}*` z7a^(j4k4Nqe@O}dWnnagzEb;v~%xpE!M(2GvG0b_h8IaT-;)`*z**EyxH zo%f{4)N%vHK_BXN6P`vM$4p3EONcAxD{je6FVaIbC%@_MNqZblsm&qV=sl@~_W2bK zLO8wnEBfKl^y#nQ7tqD2_((MxHY-DCn-quKFw-s02&tY-gKy!PKc$JcFejKTQvo#Z z7QR|9(d9BLk8Zn#C;bV%c?;b}5q*9OQ;^lP=WWnttVm=!u3BD&ALqp>@jYs z@Kkyc$4BS)^frV>*0mi=gAVc`RP|M99bZMdU>ga(C-F8l z+PkJ2uwZDjEUkwj0DsUUcOe1Zp^bO(Fwa|5_uw(W`?TdZsDq`JZ|_4WKK?DuO?V?= z8(sA~oM9Agmehyvmj-fZLOZl2PP`4|AeII!>##&%sksFNHA=q4vKY%jEGx07e#bzi zW5^sV2eHIi7TZB!A~W%SLxWgCHX;s2+<;hsn2Z>LDF2vtLRL&*=u-{Ttzs7Q93m!S zYp@bOrXwo4bV{v2oQkxnTPI(|67niFGfc>;>B#Piq>R3ZM#OH2CPY6(c^Ll}7=X9{ z>F$W~FOVf<5z;*nmmu~;l;v4Oc^n<$GQ?=aX^1h1@@8TY3lQU2vZ`a^mylsb#t_6U zi19Bl0r5kmhaa2tES}bBm}Q=qvr*y5YDerwC;BjhYcJDAMs`X>K>Bz~?fKk3UwACp=bt~bIyertnC}OVP(rB?9bVES*+%+VD-PQf;HwL|c-ZC+A!3kI_%(czB188{oBmrpIJfSee4!bE^u=z4r6^y@sGYFVB6Z&F2VLmlu=g^ z!Jqf!fu|_3Sw16@D#XS`L7^}wZWPvg<33lG%d-m;pY0c*?plYU;T79<5!n!}!q#U4 z!7A*3Hd5QEL#NVTREs#jTZV_pGlv>0Y*RD^`MK#NA_M;;VeaI$5v4PDKVad6<%Hm!C;CjW*_+3XM1vr+G4nir<|e z_w3kd4QL{eNkqKaSfhw2WBh zSNsodGfM3imX8d4s_-A&OUUg#OL%)^&sYPpm0b@x^_kZSH|NXNNyTauk(Vx)Poi@V z=XBX${m99E#&(`971yKGN^JkrvZ=VzB`Y^um@_I8mIwu-Qo^h_i@Itj*%>N71n{Z| zd5wXca<2;4MokR_TCXw0p0=R^4bUd;!J)GjFa7-$ya_(AZK zkjk0;&p*IH#Lw-7%dOF%LzYF0g+^WvYX!gbc^G$=r!R!7!j<$icqD`y2ElK_ zWJ4^R5;htJ39lP^2tOKv07n?2VT}-w5eIXHF&SeZ9_uil|Jr)yC-I7wP!b~U6HaAB zfe+3RV5XyI18(fRF|p{Oc8u8s3x(jZi~T%mdZYFp<(;RM87T5X$=FE0@S6Vr;tmnM z8yg#N<5teFa7cjiD0xKF6w0N4r?LMH^l=R(|sRX#iIMAueV)1*o4DgH;WOqd3< z&AtHE!h_p&X;}B#uw(JPj7x<2-eycM_~xfdT|rTtc9DfUT%^*4w@pd zK5v?bb#%6bb)QA@u%bm9Xi%2WZSiO%W-R`_(~ayF5|)fXdgGFGzfX;LhdX0PQ`a57 zx$Q9hW1wvvMq02QOWQb|DVQ&PK~w8WR+$tJArj@ z?lWi^8M&*meJXcWfc$K38J?zEqlbx_GE8b-gU=YdTvmL?@)SS0U)HDGw&E|JvOEcs zCqcKuM3oL<=ZbgHlRxuPxbGBuqU;L_F!~U}ofGD~)Cg~y(^l3fpxErTrk=t!p?U2z zO6Cd4uf{`~u=Z6w95L^Ib%+8A%~$ii6u6bmuluSok+8q%22`IWv~L|xyBp2px5X&o zLt(uTjROt|I{=Z~UiQxC6gYGEdko;R z*|JXsFjP2Es>La;m1e4GOpbZr!5&ITH)nj7Nh!C~{C2q$V1k)df*Qijd%g?=s>n81 z9xe98=~8|O@PI|;89(o#aKZfW@)io;2pW#jiDXcM{9{ ziA-2iza3VZJsOk%OU=HGEpBkz47X2HSR{ON_fMQ}|Gf5g3tAiNsmr3IE*1zO9*Mh`67I}0!d*UIv`wEQT(EtN zDeOA?CJMLAN@p|pO>r&gTio_oH0GArz|B`2YwmEFDZE={hFJiq%$LF{v`6*^h4(0z z#rnFzD-g=c+@K%T=UBdXgKlonVY%WC`xNjiTjK@e=u-~MSuc290pD82X&@ZnN0#FU zTVT7z?gtlxe5Rv<(amC#cD%P(WV!M*{0VTERriN!@DlTjhR-3Mor;EiV6bEj0E-uV z$AX7~9&{{aDD;C;%i^K14&WMV9tNvnza?upWVk_J_Q@zd+Gf94tL&|Q*Hyz_o{%}<~6cZ!MX^}OT6w-@l9(8(#D*Eb>7Ii z;)qXmPjzp7>*bWp5NnYt=+a;Ea_{&5lGmB?3+1)E#N(D(DUbvZ#`dN{AoX)tzDR}5 z08y4C9tzyRWI3Gydmx~uU72d#Y^op;%GS45`SC%Vr)Xx&$3QTAXxTCbR;!`h;x+|I z+C9h8>p2L;Y?=+53WH#(nE}~K*lhV_E}#XSW>@FIPcVxeGC~Smw6quj zPb$VDEC4|b4Xj@doK~H55>6>rv6dV-uTYD@Hulw0*abb=v}I5daH37_J=`X)Nx+!u zMooEYaj^w*L8*i$rdkDCq0CaU3ecflWnruF%qlFaR>L(fIBA)-0ero5)wY=G2+V9$ zR`(2dvC^ilcnTw21P@vr-zM#`5u^yw=df+tU;u1mHQOK-R(FKg z?tr1P?JnH`lc;xx<*OawPT>IiPJpBEG26HcqCv2jcflMtSY+|rjm88gSe7@<1ehPkJBkzLvcX{z10LsUG(w56~e5?Mtll)*VRxeSJ^Z?F%|khd?{ zo{#~EBN5{bYNJAH;z5*bWOswq*M3*>vo}c%j!>M&*EVo$ke16LVGWYOp7|)>NJXWM zwC2CSWp8|_E>s#Pa3DH6RQv?3(byn8YoCtvqYig|y0#SQ0rn0lsw49e$xGr1^LQV^ zXIyfXn#z-DZ49pze{ylz#B?Cpt#*HFzELTj>7?^0C{WE>{s7fZqW@R1T4nf?HLggaMv08byPE&7k)j2mcK z%OMyB^_J+*;3e7G%RYx^FzT_oa`XYMtfd?d(I7i3t$<$ZzpBm!MWRCNUY%Q&G}e=M z=MyuyJSu|HZ$SSGe>S;`9{xRJxReFY&6$^#y>w<&)JpPHMWP7AWIg#X5i&^DLm|70R}K7S7^ojiD1O%5L<0T=cvuCNs>9^jJY*x z)AJRHk4UcCNKTLwl*@e7Ba56!3@uD<`#raY>+F%Ga9KPRuyR=cE&JBQzh&9fO6aSv zJ}xg`TX|1B&{x?0N{G~_IQvw{$yRP+y_9iGA)=e) z3KO$DGDT|yy%ZnAqs3P%nT!ZcOEB(-1KrhoubOeQU%L4!<>kjPR+47 zw(f0&xQ+g*nE*sUhLXE2eRyIpu6a{xIKi6CphF||I}8WWD<3@!zSQrqV?pSr$+q8R z9TcVY(x>eAFCZ-Pyn|?OOQQXbbjt~1dx!i<1#mW>_GW32O>TLz5DU8Fqb$t=eL~)J z5?xSTgLJk-LHuj;v^S+G?H?Az@D0*pwh;y3E%u28o!D0PjRnG^raBZYM$&tsl5dnU zZ4tbGh7Mc#w)6)vlM){kB*|2kO|D}szDM91ggrbKb1XMq4j3C32lALy_N7Z+t2k3( zHQkizna`K#J7Zr?!$E8@9eyl>FEY z)LgwZ+NrK7D1wL}Y`0XiZQnu+XxNEwAu7;e53l*>0O}_X@MLfX{DHB6GjPy9?Sv5s zhmVu4;@>DAX}BXrvAQ#O#N(Ok48(ak9Z*^JdQ|C6X#g8>7Usbjw)ZToA91|h%WC55 zrIYOiuaqS#>)a#sJPErYZFZGb$ozfnM0c;QUYged#HaSn6*`l_c%V>SpfuD=Ic&yv zFv4Rj?)?OEM;goaeTNY!h9!ItBVZR>{XL|?x2)!Sh|BoHSy0)>_H}sgQkQhZp)WKQ zCM6!s*CJKn2;;6dX7e$8hjiZA4P9Ej^i7v^5cZcjbcF{C4T+}w9!R~-hW!9*U_Pt* z0VaBBom_>&Fd^oSt3R^PJ*R@Ui?2sj=Exbe@xY!r9&=j0vkKnzv zF{s{l`_rhdY~bCr^->|T)InIt^A2_AMlNuqn#3qpA>w&61Dg-uNR3;0Jv zhr3p7xFt>Qz^ei(gTW|2ftqiY&Ym!!?UWw%A%6apB!yD4hGqSNaq9-V@(XMa4sz%g zy`BQK@;5%fBInskbUb5O!LRTPePm~qzrytJoeo87ah}?$IB;7kba=*SB9i#)(k_>+ zLgs8@`YWLKDRxnQmo3q62I{w$&AS49!X`SDyeyIFa4SCFh@B8q?e;MS9&`$NR(1uA zyoyy_fkB!;mnK5davhW{269~zoy>Lx5BDOA{S8JzceeaD3<)2w9lt>UrVStc1{na$ zSo=)Y!q!{Q(1^n05Stx5HwIx+;eoFUyAi!!rt4<8(KW{)&~#+Iq>u zDZe1rqc^Dd6GA+*y2yt|+2uch_epmYRPMKZs|hc4N|8)&MW2++GOgf(581eDu!%mj zv&+|DY|s8K<02AydUQ6giSf6#OYhl;_7q;92X;36I`s1Qw%=>4GNi_!o4{P&QhHtL z!E&xcT<`&h%BnojBz^B7Ewfd5YeA=~mFf4{(d*D>{c(Fm{ekiZYev5)MebpJABS}HnkluyXpifdLm z6Y@&e79_jZ{U^gcVsvbL*mY@xt+1kW?e2h6%$);s>R{jr1Ze54F^=mx}k<+pJa zT%o)67Me%%4Vb98jxXlsI%mUSdv9_}y6t46Z$eDuXC1q3ZiE!?w$Yf~7%Z??GZJ-n zb5`33IjQu#WMEJa{;d2aES2w6Jp_B4_oCz)M~RCi)x$7PtvBs_LF{d0Z`8w1$Y#L} zn5pSmdIMg^5o}!pL{XcAecS*;L16U_5D5j$qY-5mu_29USzohhjSw4Hh-UtJE+(Sr zH@3IC^9pS|wl=eU*ooPBT_bwE1uU=$(lL#j*MzosiLGivkN7gX--H6SP0$Ob%k9aq zo24}4y)R;$nxP05GQV4p?jD4n+cb08+*|OpCx`6-e28FAw(}Oe44W(-w*i0Y%MJ*5prR<{?5MVPK z_5feGLfQNWkONy--2+&!uuAP6Y|29z>p!GTiEsWI5fo6@A$`?xO^RpchcFS8O!){} zqTc!vqv|F?RG6@MBsO&=l)3o+r>VLot#fopZSAs(*Q5fbZN+zrk?deAo+D+yw1PG$ zb@~%a2(MC)R`9Ct<-ZxOVdBg*kD)tEU|EkLkPUwf>aZUiP<+VdVccr-N{r+cW1q$V zu)t*EOVitHX3KKnaEKK=h7k1Xdmlqu$g7S>-hC_-Z?&n73rtV*9vIGKVf^OLT#wO1 z%w~}iXrotlsgPS0z<0ysqfI*FOzf3kxiMLNfy0Y?wc|+=N3=Jjg>1QmuIU)tBEcx1 zk2`xbiE__i_6tr1!0Zx427J;>VWqg_uZIdGksPiHZ!XwB8wkMkI#_qP;FXJ~kX>G*#Z% zN5ZVqL8lu1iUz}hJU-E)Y=a?y$@&NWH)b)i3EU!=Pu4nPb*l;`i!g@K5%NC$CbJ&}LG$QX=_o`^#cLlETw9HKl?1mXz9 z7(^{%ETa6t0}+#ujzg3ccos1oaR_1$#P}{uK$H(+IHEi9M|9yxZZaX$kTD7wfryD+ zf=P(-0?CN8k)MK?g_w%C5HSr={_)%sMbi=IBi|sSe0gHf}q^F9ad9f3{_46nzhTUd8@_IQgfjz|X9{Ki%Xr z0lx;QkX49S%GN~FNOv1H$x`-yG<_OhM$bpnK&oD9X^5sDQ@>rya8?xm>-Q-ui=q4c zcACq(7&bAMhJ-C&PJ512^wcYQ<|<|`)94j5S14v`L-oD&-ZOP`ThaKmHCE8LRjgXU+KRPS?UjzU zwL+_XVzmO1UQnr8ebv@3ptW^*ehn&{>$QqE2?>1XBJFGQ`_24k&YYP!GjrygGdGR5 z)yHnDcUZu8=du3uO61PQCGde|I>fsxlb2Cqv}{vnL$5n75HGm2IYgznLL&V*rM8=R z-4)O2OLG%qZ<|;yV@H)@ffUHV$Iw6V&#Oh`srqfEOi4ZsO^F8fwlF#(o2`}-F zyaGYNyL+e8rw+>`?`fW}i9gWw1myGc0>hz;WkcXXaIbf%4t5jI@(+T}cx`nmY%X6t z7b?!?D}xhYndMP%k`l7`*ocCzdK>9wEj?yafUiF2@-dqVLdDh={%XV&MTqEXv-H)z z2H?RT&=tdAeqv-ar15Jae}r!==~1x&Cd;bsY2cIWP*;(t5H6VOCU&=+@39b+!>hu@ zL6!l%62NDRO<|oVw)J1cg^NG(tMm!}6;8?_C64SMQJ^y}>L&W|Rr>Jmt*u0BoJX`n zs)m#+aID>b0-4_f(FeK%OfheyZ2c|Ie0A{@5tiJnP)mbec7%Po@VKpQTa__mn9 z(61coF^&J4)}Lx?P1_pX35jwqQX3+1wqicMPbhux?6V1d00#0CV+X(x{>|8Qc-?X_ zb}4kBEpKwld-qnU6Ms7XF_O*Y z`6b?5IMJ{)y$2=4jZ-;Fc zkrnYUzim(;9Oe%Uiqf^q&@S{>l_!zcEyKg)nN5wQwrQHYTyy$izG=|Xg_}C0SXzlv zVEMTOvW%}(lG%T+&#AQGs=~?@AOF}y2L4adDfTdwRE@mQKHHeeT{w=ykoP)7yVX!# z-trJp#h)6y=!H!kJK>IVHFoR}VELFVLwjFGh2pRB(~5I4e>?qQ#Y=yc8!J{~`T23& zs@Tu3AF@^_ALIWd|F~lRKkBv^x_Zv1p`n23uIr@(sk$(zH#o5T?#0CA2GUb#vzjs(5^x?~gtx(EZ zd68in4@ZQ=cR{kUW05cR+nE1OuB@F@tV9-h z>UHu-wC`bNhyK-#nA#&q)&=C+fLzH~{<~&VaivQZPS0nKjKXW2H!?N+Fpi=wf1kV` zCNBaw_egn;{_T7QzINo~;6p9X!YJoiVkt}Hv|LrAnBFQie;p{k!;ejFf;>JUB?r&F-5FayYaOnFE%BcsRC@b1hXlj*ya}ixa zEfkx=g2YgM{ixu8_Z@x>S{!1Q<3yQm`>SE{-F}t-V$^)N#QUbEqGg|&8sFR3f#+Xs z=@^A`4dtSB@`S(H->cVc|JU}#VV`RW3ldxG{FkZAv6F6e0_@_ak1m32-afh)%;a@x z=`_L4kIM++H>M4uKF^Dn(mF@1a1gEaZFjBKOvETG*Eg8URa_Vsz^S=Fv61&n58#8i zF!-5I;08cBzlci(o%~cw-$ujqAd;=E^^RUlcbUn+`7s6ToT6!8> z=OYXQ;50wg5YJZ_y7C_yy1_QS(hv*S1M|6jKt=+L=Er7?g>IOK`|P)c)X|3mx+k;O5R98xKqPontq{cs_XCV!uZxyWyGp4{A97-MILG?@q@3gL?90khqce9j}A6eEj%W_==x9{*2E)r-CCnlPV2(B%Arz z2^Ltx*G@=)Ieg&6h0q(z0lamhg5N!{KRVs#weGZ`MV68enG^yAe8QwvJ~?)xZ>gzj z)Fg+93wUADbQopvo$L$hdrq;zP(EU+1+4t#saxSg%iL*Ipgdt~ZqQnE zF9rg{@`=+6;1>V$^vjTA`D{iazzzQ9%rAVjuTXLt(}jf;FMq+TkN!!qB+dSv!VErq z&Q>s3is!g1{r=IzL`k9L%zOcS`0okVldZb`(vJvEtltI3z!ElS&I3VC362OOCm6DUJ~(_#D;c> zbxUQDW-dL2d9b-3IV;IBtTM^+q)SfIGggioq6QbSCXRc^~8J4t_RSI~` z;z>zyljuprde{pT}b03(Gdv1n>dBde1Oa0n45f09MP= zkB(AMSt34R04FWNK6d~uf2vT2L(~>dR8wb`rGIf(CB#}XzMM$u{cOvJB~E}r7FGso zP+ImJ4+L6mvXq_J;fuqiUJUTS#+kqDp-^FY^6OR#U+^2QZH6Tl_v@Kn0h{f>RoN6I zZzAT{wo2=PeXy@Y7bFD2Sv zzuxj*a~6Neb_nCx_4dsasx3-q6Zj2vE$F$U<(X(S7udkfSL|eY?sbHT1_Omr!FrM1%!UZqbgr_Bp z*FXfoF_!HITVa)8_k+tpKHcY065AxE=q7lJONDE_;dg+`tg;VGhndVT7LI~~or#5g z&_$Tn7X&Xj%7TYNG<0IAL!lSEEi4`i>jBQQreUxewhHrxLxvl8voA&h3yyPc=GMjzIP9(ZdxOA<*kp@dWjbt?p)&< zf^}nd-gt$Cd5Qal*{P5M;Kufj zhCnLWg|9}#I{pP}W5~*zdV3i*ir1cc{uw`Q*7~U1O zj)m1~_&{)*hE;0K61u$rVHi@gVK2e}2oaXP2rddegzTBHNC{@)w>f|sRLpM9g`XjX z9Wg>GR0@xcfG5>e;1>X|h96k3Y&h%wxszy>;z#UpHvFh?7u(v{H%nj_5H@`&6a*Y- zky}4(5!WQ5V|AmZ9JM%E05d3+@Dp=i1>0b=P_PQnpq*vmtMSa3uxd5bdco(y^f$rR zOTW(+R~d=njk{Hqp%Qo7)TN!#$3=3W({nA-9-Hj(2x-n@@4W|oVI`}258`1qd-NW} z$|}`uJ4^s7X0atZASZM#Dn3DX<87$6Mf*h?OKh>=i32OeDGYW(U`TToC1+5>Wlg7O zrl>K)l!Cz>>TLg=FjUsvB|BjX{i9X*W+$l7#<1^rH~~A@Te~0@)(Dnekm&}41i#&= zOz=6|vImyIN}**B6e!_iwsRjOx$kem0934GSN1`g`y04JROFei5VoV%l@>w~l(DHr zFnGfc_MsW__UY}38GzUwafm@}ROn0`h&OFycfHip{y_4xH%j%6FfEA9ZT-gu>9q4m zc)et>Pkfqd1o2)QY0iCFyXdVa>U^bf5^~*YbLS@MjK+FtkbMT$ueYhV8M;EO_qDf4 zF>Mo{lAIKdFpp0mV&(}~p{ZmPt&ZcAV!2DZh?owJa;rYjoNH8yN80PTIIypQ{-tG9f>?5iLHLlP6~pl5vcX&xE{B;onO5kwqVbf8);8 z9K_RyeM0mhIPV7T?C}v81{a0cFJXnO?L|kSA9_7jQ-U_&276orM`){!6_!G`4F@aD zph#ATjtX=6z;T|OiW`uj&7mSF{rdL4^n0U9^zaYqtsO9CSZZ4O#A(UV(X&YB(qs|H z1ncQ1$&f+jJpp2{>N$mY+NRBU`H4c4Vy$X4Cr4&zkoH5R&H$#)r8+TpGFVgO+-R;+ zBPIDMF+;Fbi=h6Clxws#XmRhG8`wK#&@=k-*YZ%+We=s#+eWhF2IKZxzL6lFXvqz~MIhm8|r1{Ll0->;*^{_w;oMV$MkmP&#Yho~`m*A#uDSIYe zWP2@;8M)G_Ihkqe(n5&am~Wa0KqO=+wfCgcrv~EibrPvyVaGs^L!}*qVz3I2j)5=r z`^m8&?C>bt4S706VV(3X^A#XGs=+~Y_aslpeMx~IMOxeB&mn-L^=fUB#@pmlcQ#Q# zD|&^k5uisXS^<4fO}%uhO+oytb98s4C9R+5#c}o0TdWcppoIM{pzZlLvkMRrV|FMW z8%g(tO0Gd#WQ*kdGxS*c(3bv3+?3=$@>1m5TAQ4Y5mGCl7Q%h1;!c{=Wjp`Y;y@0A z!Jag0W9j))tLcu^#!`;srLSizjzbm13-Ko)5vZqA$T|rpRd9wypG6HzVKryb*jbqJ z9Lk--`klj@IhYllg8dOS<&Z^ozPX)l&)d=&SxZ^Qc_{Xud&&qzixQ{1b8nZ7Fx;2Y znDPRiqKU;{fCR6uEl^gpDW>p_WMIoKz+9+hH5Xt*($!WktBI?VuD9mBUNlNsql%2? zNce4OzpJoRrdPHS{ll6%X-yjtpXzs)>rDpZ!F+X|(oiRDX4}4lB#&2cdnb|m(ktxp zcjz0&uG=X(u=SL*0ZLIFnP)_r?ymKm=t$kinZedPunJ4!3UfH z*KRKN=9HWdzK(87U7h;;{Wc$RFvq$=)_8NdlFNOS=ruJHpML&Y9Ik7LOTon>Cpd+7 ze}EwXpRoV@2rqz>o1(bh=w;%# zigbCCjrh6maZM`<`oD!}+83f{NtZwe8`<1TkN|^N!6nqW-`Ld4Xt&>H&6m+rE?|kj z0Ph*%j9!~rC@-D;`U|Y|xY43pI|A#-d$4j%h?xK-~kA1&#w>;J(%z->`f_Z z@ir(P&wz7HzLPu+2BVs5ltSB7I%xuekO8oj_4qF=mACl6uuy@DVf)}F^oK)iz)ieGHNxDRvcu>h z2>*wMWhn1d8Au<+N@aDO6y=nkcy&_S2~E{H^yKmmsWLR>>ILd`M6aq=816`GJ9vCf zGEXaTKJy%TWe05EY9b1qQWDFwqRo1Vy=es(oMw5ou$lTenCC4R7s9!Wuac;})~HhlR*$xV*50rgZ{A&LpUWL>#2x93jdF=O+i=dGoryVxYx72_YTn3DMUIId z5`IhC%U0ip@Yv66B{+z7nW=$jTczF(539L-kTtF)?U?N%`tvo5+sg~tncLv+lj`{0 z_TQacyZG~2?QMwn`mjY?s?AsF?xMDY-+{>*C%&yMHO~5D_U`1aq;#=2?x4NAz>eNQ z^$Ta`@4(im-&*==H{myyHYwaLe`%TK9HL#%_V2 zcpbbCZ?f_A7+@qf@^;b5cMSO#eZG`l|S$6sR(NTwIgB}H3W{=K) z8};N7D{e&Nxq~${Vmz{3hH!@8o(5r*wz>&#`)BM#6KsJzmUb7?Rd?`{)_*hE`*)$Y z=Y1^KMo?1c!M?ozTJ%7mJC(0A>9^>Uo`bleOsEura#2ZNoU(0!c=_a z)IP*(vWNLR!u=o5dOX6~YBu>1=z8@$DLNvac7lx@`H8Y;8M?|@LjDmCjUjEylRw6BKyOiT# zhazf$$?cE_M#+Wg5mjMq<}=iXI=1E+MpAlKfVJ@Rj%_v%<2IXTaulb)F1@)0Ca?Am ztyKeA%`->~{lF2$sjz9AO>JCY>dieLPj(68SiFSh;Waj00$qA?hb-pu0Im~8CM{B} zGr3!C*;}L3m$Z0mrMBn69MRpD@=h4H>qi?m_r$1A_Ks(^DY>FiaP_wID?25@NS|}< z%$j7Gc>?pYp{EIDu{PB1|FFq6@DH5rEDYULRuR0pjP$9kaT}AtP2%oKVZvG)N`%o^ zksUsQ%`C|QrDN-Dol2-dgAxbfSCx{5e|lsz%o$c`k24Y#O?D$hcT3V#sgXxh?u~6E z+$x=Qs?kVjssIxq-a=vv3!RKR%Q zh#M^cs%&MWmGm^~y;4Ob4frruSK2bd-V9{?Gay?q#bWvq>+><~!L$fd0H*PnbeM{P zlA4-ImGZ5Pl zXLi(QAvR)tHsV>tmk_HEGZDW=1ScWCAP&I#QN)3W#fTHNB!v8qg|$dHj~Ia{|0s6o zB;cA0*QOG|M@ix+v5oNvKMT|up zjW_@?4N?Aa+UJ6%YrP2RhYbcK^b>A&qmO{r4rV`T=^T1Bi}lsfDfCXZuu(@hx+{Yg zqhx|dG)<+{YGM;&Xg6vz2}@$=C*Whi#{M{T4o+Xlf@A4spRjC7+>ta5F^e6ErBSML zSo|TI{TfSqW9SHdX(0V2TL|e(4^cnkQamwa|MQo_uEf!OV~i*s{)a4oYuZk?L zf@lYt@eiVLgg}>&Ljdy2PNd1X#fBK diff --git a/bundles/extension/inc/platform_api.h b/bundles/extension/inc/platform_api.h index 82969b3f6..f9e010569 100644 --- a/bundles/extension/inc/platform_api.h +++ b/bundles/extension/inc/platform_api.h @@ -402,11 +402,8 @@ typedef enum PLATFORM_CFG_RC32K_EN, // Enable/Disable RC 32k clock. Default: Enable PLATFORM_CFG_OSC32K_EN, // Enable/Disable 32k crystal oscillator. Default: Enable PLATFORM_CFG_32K_CLK, // 32k clock selection. flag is platform_32k_clk_src_t. default: PLATFORM_32K_RC - // Note: When modifying this configuration, both RC32K and OSC32K should be ENABLED. - // For ING918, both clocks must be running: - // * For OSC32K, wait until status of OSC32K is OK; - // * For RC32K, wait 100us after enabled. - // Note: Wait another 100us before disabling the unused clock. + // Note 1: When modifying this configuration, both RC32K and OSC32K should be ENABLED. + // Note 2: Unused clock can be disabled. PLATFORM_CFG_32K_CLK_ACC, // Configure 32k clock accuracy in ppm. PLATFORM_CFG_32K_CALI_PERIOD, // 32K clock auto-calibration period in seconds. Default: 3600 * 2 PLATFORM_CFG_PS_DBG_0, // debugging parameter diff --git a/bundles/mass_conn/ING9168xx/apis.json b/bundles/mass_conn/ING9168xx/apis.json index 0355537f4..647d82454 100644 --- a/bundles/mass_conn/ING9168xx/apis.json +++ b/bundles/mass_conn/ING9168xx/apis.json @@ -183,149 +183,149 @@ "platform_32k_rc_tune": "0x0201ead1", "platform_calibrate_32k": "0x0201eaed", "platform_config": "0x0201eaf1", - "platform_enable_irq": "0x0201ebf9", - "platform_get_current_task": "0x0201ec2d", - "platform_get_gen_os_driver": "0x0201ec51", - "platform_get_heap_status": "0x0201ec59", - "platform_get_task_handle": "0x0201ec71", - "platform_get_us_time": "0x0201ec91", - "platform_get_version": "0x0201ec95", - "platform_hrng": "0x0201ec9d", - "platform_install_isr_stack": "0x0201eca5", - "platform_install_task_stack": "0x0201ecb1", - "platform_patch_rf_init_data": "0x0201ece9", - "platform_printf": "0x0201ecf5", - "platform_raise_assertion": "0x0201ed09", - "platform_rand": "0x0201ed1d", - "platform_read_info": "0x0201ed21", - "platform_read_persistent_reg": "0x0201ed51", - "platform_reset": "0x0201ed5d", - "platform_set_evt_callback": "0x0201ed71", - "platform_set_evt_callback_table": "0x0201ed85", - "platform_set_irq_callback": "0x0201ed91", - "platform_set_irq_callback_table": "0x0201edad", - "platform_set_rf_clk_source": "0x0201edb9", - "platform_set_rf_init_data": "0x0201edc5", - "platform_set_rf_power_mapping": "0x0201edd1", - "platform_set_timer": "0x0201eddd", - "platform_shutdown": "0x0201ede1", - "platform_switch_app": "0x0201ede5", - "platform_trace_raw": "0x0201edfd", - "platform_write_persistent_reg": "0x0201ee15", - "printf_hexdump": "0x0201efcd", - "pvPortMalloc": "0x0201faa1", - "pvTaskIncrementMutexHeldCount": "0x0201fb89", - "pvTimerGetTimerID": "0x0201fba1", - "pxPortInitialiseStack": "0x0201fbcd", - "reverse_128": "0x0201fdb5", - "reverse_24": "0x0201fdbb", - "reverse_48": "0x0201fdc1", - "reverse_56": "0x0201fdc7", - "reverse_64": "0x0201fdcd", - "reverse_bd_addr": "0x0201fdd3", - "reverse_bytes": "0x0201fdd9", - "sm_add_event_handler": "0x020200f5", - "sm_address_resolution_lookup": "0x0202024d", - "sm_authenticated": "0x020205ad", - "sm_authorization_decline": "0x020205bb", - "sm_authorization_grant": "0x020205db", - "sm_authorization_state": "0x020205fb", - "sm_bonding_decline": "0x02020615", - "sm_config": "0x02020a2d", - "sm_config_conn": "0x02020a45", - "sm_encryption_key_size": "0x02020bfb", - "sm_just_works_confirm": "0x02021135", - "sm_le_device_key": "0x02021471", - "sm_passkey_input": "0x02021507", - "sm_private_random_address_generation_get": "0x020218b5", - "sm_private_random_address_generation_get_mode": "0x020218bd", - "sm_private_random_address_generation_set_mode": "0x020218c9", - "sm_private_random_address_generation_set_update_period": "0x020218f1", - "sm_register_oob_data_callback": "0x02021a2d", - "sm_request_pairing": "0x02021a39", - "sm_send_security_request": "0x02022477", - "sm_set_accepted_stk_generation_methods": "0x0202249d", - "sm_set_authentication_requirements": "0x020224a9", - "sm_set_encryption_key_size_range": "0x020224b5", - "sscanf_bd_addr": "0x02022815", - "sysSetPublicDeviceAddr": "0x02022c81", - "uuid128_to_str": "0x0202342d", - "uuid_add_bluetooth_prefix": "0x02023485", - "uuid_has_bluetooth_prefix": "0x020234a5", - "uxListRemove": "0x020234c1", - "uxQueueMessagesWaiting": "0x020234e9", - "uxQueueMessagesWaitingFromISR": "0x02023511", - "uxQueueSpacesAvailable": "0x0202352d", - "uxTaskGetStackHighWaterMark": "0x02023559", - "uxTaskPriorityGet": "0x02023579", - "uxTaskPriorityGetFromISR": "0x02023595", - "vListInitialise": "0x0202363b", - "vListInitialiseItem": "0x02023651", - "vListInsert": "0x02023657", - "vListInsertEnd": "0x02023687", - "vPortEndScheduler": "0x020236a1", - "vPortEnterCritical": "0x020236cd", - "vPortExitCritical": "0x02023711", - "vPortFree": "0x02023745", - "vPortSuppressTicksAndSleep": "0x020237e9", - "vPortValidateInterruptPriority": "0x02023911", - "vQueueDelete": "0x0202396d", - "vQueueWaitForMessageRestricted": "0x02023999", - "vTaskDelay": "0x020239dd", - "vTaskInternalSetTimeOutState": "0x02023a29", - "vTaskMissedYield": "0x02023a39", - "vTaskPlaceOnEventList": "0x02023a45", - "vTaskPlaceOnEventListRestricted": "0x02023a7d", - "vTaskPriorityDisinheritAfterTimeout": "0x02023abd", - "vTaskPrioritySet": "0x02023b69", - "vTaskResume": "0x02023c31", - "vTaskStartScheduler": "0x02023cb5", - "vTaskStepTick": "0x02023d45", - "vTaskSuspend": "0x02023d75", - "vTaskSuspendAll": "0x02023e31", - "vTaskSwitchContext": "0x02023e41", - "xPortStartScheduler": "0x02023ee9", - "xQueueAddToSet": "0x02023fed", - "xQueueCreateCountingSemaphore": "0x02024011", - "xQueueCreateCountingSemaphoreStatic": "0x0202404d", - "xQueueCreateMutex": "0x02024091", - "xQueueCreateMutexStatic": "0x020240a7", - "xQueueCreateSet": "0x020240c1", - "xQueueGenericCreate": "0x020240c9", - "xQueueGenericCreateStatic": "0x02024115", - "xQueueGenericReset": "0x0202417d", - "xQueueGenericSend": "0x02024209", - "xQueueGenericSendFromISR": "0x02024375", - "xQueueGiveFromISR": "0x02024435", - "xQueueGiveMutexRecursive": "0x020244d9", - "xQueueIsQueueEmptyFromISR": "0x02024519", - "xQueueIsQueueFullFromISR": "0x0202453d", - "xQueuePeek": "0x02024565", - "xQueuePeekFromISR": "0x0202468d", - "xQueueReceive": "0x020246f9", - "xQueueReceiveFromISR": "0x02024825", - "xQueueRemoveFromSet": "0x020248b9", - "xQueueSelectFromSet": "0x020248db", - "xQueueSelectFromSetFromISR": "0x020248ed", - "xQueueSemaphoreTake": "0x02024901", - "xQueueTakeMutexRecursive": "0x02024a6d", - "xTaskCheckForTimeOut": "0x02024ab1", - "xTaskCreate": "0x02024b21", - "xTaskCreateStatic": "0x02024b7d", - "xTaskGetCurrentTaskHandle": "0x02024bed", - "xTaskGetSchedulerState": "0x02024bf9", - "xTaskGetTickCount": "0x02024c15", - "xTaskGetTickCountFromISR": "0x02024c21", - "xTaskIncrementTick": "0x02024c31", - "xTaskPriorityDisinherit": "0x02024cfd", - "xTaskPriorityInherit": "0x02024d91", - "xTaskRemoveFromEventList": "0x02024e25", - "xTaskResumeAll": "0x02024ea5", - "xTaskResumeFromISR": "0x02024f6d", - "xTimerCreate": "0x02024ff9", - "xTimerCreateStatic": "0x0202502d", - "xTimerCreateTimerTask": "0x02025065", - "xTimerGenericCommand": "0x020250d1", - "xTimerGetExpiryTime": "0x02025141", - "xTimerGetTimerDaemonTaskHandle": "0x02025161" + "platform_enable_irq": "0x0201ec15", + "platform_get_current_task": "0x0201ec49", + "platform_get_gen_os_driver": "0x0201ec6d", + "platform_get_heap_status": "0x0201ec75", + "platform_get_task_handle": "0x0201ec8d", + "platform_get_us_time": "0x0201ecad", + "platform_get_version": "0x0201ecb1", + "platform_hrng": "0x0201ecb9", + "platform_install_isr_stack": "0x0201ecc1", + "platform_install_task_stack": "0x0201eccd", + "platform_patch_rf_init_data": "0x0201ed05", + "platform_printf": "0x0201ed11", + "platform_raise_assertion": "0x0201ed25", + "platform_rand": "0x0201ed39", + "platform_read_info": "0x0201ed3d", + "platform_read_persistent_reg": "0x0201ed6d", + "platform_reset": "0x0201ed79", + "platform_set_evt_callback": "0x0201ed8d", + "platform_set_evt_callback_table": "0x0201eda1", + "platform_set_irq_callback": "0x0201edad", + "platform_set_irq_callback_table": "0x0201edc9", + "platform_set_rf_clk_source": "0x0201edd5", + "platform_set_rf_init_data": "0x0201ede1", + "platform_set_rf_power_mapping": "0x0201eded", + "platform_set_timer": "0x0201edf9", + "platform_shutdown": "0x0201edfd", + "platform_switch_app": "0x0201ee01", + "platform_trace_raw": "0x0201ee19", + "platform_write_persistent_reg": "0x0201ee31", + "printf_hexdump": "0x0201efe9", + "pvPortMalloc": "0x0201fabd", + "pvTaskIncrementMutexHeldCount": "0x0201fba5", + "pvTimerGetTimerID": "0x0201fbbd", + "pxPortInitialiseStack": "0x0201fbe9", + "reverse_128": "0x0201fdd1", + "reverse_24": "0x0201fdd7", + "reverse_48": "0x0201fddd", + "reverse_56": "0x0201fde3", + "reverse_64": "0x0201fde9", + "reverse_bd_addr": "0x0201fdef", + "reverse_bytes": "0x0201fdf5", + "sm_add_event_handler": "0x02020111", + "sm_address_resolution_lookup": "0x02020269", + "sm_authenticated": "0x020205c9", + "sm_authorization_decline": "0x020205d7", + "sm_authorization_grant": "0x020205f7", + "sm_authorization_state": "0x02020617", + "sm_bonding_decline": "0x02020631", + "sm_config": "0x02020a49", + "sm_config_conn": "0x02020a61", + "sm_encryption_key_size": "0x02020c17", + "sm_just_works_confirm": "0x02021151", + "sm_le_device_key": "0x0202148d", + "sm_passkey_input": "0x02021523", + "sm_private_random_address_generation_get": "0x020218d1", + "sm_private_random_address_generation_get_mode": "0x020218d9", + "sm_private_random_address_generation_set_mode": "0x020218e5", + "sm_private_random_address_generation_set_update_period": "0x0202190d", + "sm_register_oob_data_callback": "0x02021a49", + "sm_request_pairing": "0x02021a55", + "sm_send_security_request": "0x02022493", + "sm_set_accepted_stk_generation_methods": "0x020224b9", + "sm_set_authentication_requirements": "0x020224c5", + "sm_set_encryption_key_size_range": "0x020224d1", + "sscanf_bd_addr": "0x02022831", + "sysSetPublicDeviceAddr": "0x02022c9d", + "uuid128_to_str": "0x02023449", + "uuid_add_bluetooth_prefix": "0x020234a1", + "uuid_has_bluetooth_prefix": "0x020234c1", + "uxListRemove": "0x020234dd", + "uxQueueMessagesWaiting": "0x02023505", + "uxQueueMessagesWaitingFromISR": "0x0202352d", + "uxQueueSpacesAvailable": "0x02023549", + "uxTaskGetStackHighWaterMark": "0x02023575", + "uxTaskPriorityGet": "0x02023595", + "uxTaskPriorityGetFromISR": "0x020235b1", + "vListInitialise": "0x02023657", + "vListInitialiseItem": "0x0202366d", + "vListInsert": "0x02023673", + "vListInsertEnd": "0x020236a3", + "vPortEndScheduler": "0x020236bd", + "vPortEnterCritical": "0x020236e9", + "vPortExitCritical": "0x0202372d", + "vPortFree": "0x02023761", + "vPortSuppressTicksAndSleep": "0x02023805", + "vPortValidateInterruptPriority": "0x0202392d", + "vQueueDelete": "0x02023989", + "vQueueWaitForMessageRestricted": "0x020239b5", + "vTaskDelay": "0x020239f9", + "vTaskInternalSetTimeOutState": "0x02023a45", + "vTaskMissedYield": "0x02023a55", + "vTaskPlaceOnEventList": "0x02023a61", + "vTaskPlaceOnEventListRestricted": "0x02023a99", + "vTaskPriorityDisinheritAfterTimeout": "0x02023ad9", + "vTaskPrioritySet": "0x02023b85", + "vTaskResume": "0x02023c4d", + "vTaskStartScheduler": "0x02023cd1", + "vTaskStepTick": "0x02023d61", + "vTaskSuspend": "0x02023d91", + "vTaskSuspendAll": "0x02023e4d", + "vTaskSwitchContext": "0x02023e5d", + "xPortStartScheduler": "0x02023f05", + "xQueueAddToSet": "0x02024009", + "xQueueCreateCountingSemaphore": "0x0202402d", + "xQueueCreateCountingSemaphoreStatic": "0x02024069", + "xQueueCreateMutex": "0x020240ad", + "xQueueCreateMutexStatic": "0x020240c3", + "xQueueCreateSet": "0x020240dd", + "xQueueGenericCreate": "0x020240e5", + "xQueueGenericCreateStatic": "0x02024131", + "xQueueGenericReset": "0x02024199", + "xQueueGenericSend": "0x02024225", + "xQueueGenericSendFromISR": "0x02024391", + "xQueueGiveFromISR": "0x02024451", + "xQueueGiveMutexRecursive": "0x020244f5", + "xQueueIsQueueEmptyFromISR": "0x02024535", + "xQueueIsQueueFullFromISR": "0x02024559", + "xQueuePeek": "0x02024581", + "xQueuePeekFromISR": "0x020246a9", + "xQueueReceive": "0x02024715", + "xQueueReceiveFromISR": "0x02024841", + "xQueueRemoveFromSet": "0x020248d5", + "xQueueSelectFromSet": "0x020248f7", + "xQueueSelectFromSetFromISR": "0x02024909", + "xQueueSemaphoreTake": "0x0202491d", + "xQueueTakeMutexRecursive": "0x02024a89", + "xTaskCheckForTimeOut": "0x02024acd", + "xTaskCreate": "0x02024b3d", + "xTaskCreateStatic": "0x02024b99", + "xTaskGetCurrentTaskHandle": "0x02024c09", + "xTaskGetSchedulerState": "0x02024c15", + "xTaskGetTickCount": "0x02024c31", + "xTaskGetTickCountFromISR": "0x02024c3d", + "xTaskIncrementTick": "0x02024c4d", + "xTaskPriorityDisinherit": "0x02024d19", + "xTaskPriorityInherit": "0x02024dad", + "xTaskRemoveFromEventList": "0x02024e41", + "xTaskResumeAll": "0x02024ec1", + "xTaskResumeFromISR": "0x02024f89", + "xTimerCreate": "0x02025015", + "xTimerCreateStatic": "0x02025049", + "xTimerCreateTimerTask": "0x02025081", + "xTimerGenericCommand": "0x020250ed", + "xTimerGetExpiryTime": "0x0202515d", + "xTimerGetTimerDaemonTaskHandle": "0x0202517d" } \ No newline at end of file diff --git a/bundles/mass_conn/ING9168xx/meta.json b/bundles/mass_conn/ING9168xx/meta.json index 149b4b25d..5c79ac017 100644 --- a/bundles/mass_conn/ING9168xx/meta.json +++ b/bundles/mass_conn/ING9168xx/meta.json @@ -8,11 +8,11 @@ }, "rom": { "base": 33562624, - "size": 152828 + "size": 152856 }, "version": [ 2, 2, - 12 + 13 ] } \ No newline at end of file diff --git a/bundles/mass_conn/ING9168xx/platform.bin b/bundles/mass_conn/ING9168xx/platform.bin index 43959a35b67eaa15924723d5f025526472d77c2a..c024d6aeacf45fef27cd6dec4ebcb9529318c88a 100644 GIT binary patch delta 7903 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�)Nv5kcuOcFg4)olc^&=ZGjSC426|m$PzS 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 diff --git a/bundles/mass_conn/ING9188xx/apis.json b/bundles/mass_conn/ING9188xx/apis.json index 2ee8910c8..b455834b9 100644 --- a/bundles/mass_conn/ING9188xx/apis.json +++ b/bundles/mass_conn/ING9188xx/apis.json @@ -182,149 +182,149 @@ "platform_32k_rc_tune": "0x0001e2f5", "platform_calibrate_32k": "0x0001e309", "platform_config": "0x0001e30d", - "platform_enable_irq": "0x0001e401", - "platform_get_current_task": "0x0001e439", - "platform_get_gen_os_driver": "0x0001e45d", - "platform_get_heap_status": "0x0001e465", - "platform_get_task_handle": "0x0001e47d", - "platform_get_us_time": "0x0001e49d", - "platform_get_version": "0x0001e4a1", - "platform_hrng": "0x0001e4a9", - "platform_install_isr_stack": "0x0001e4b1", - "platform_install_task_stack": "0x0001e4bd", - "platform_patch_rf_init_data": "0x0001e4f5", - "platform_printf": "0x0001e501", - "platform_raise_assertion": "0x0001e515", - "platform_rand": "0x0001e529", - "platform_read_info": "0x0001e52d", - "platform_read_persistent_reg": "0x0001e55d", - "platform_reset": "0x0001e56d", - "platform_set_evt_callback": "0x0001e591", - "platform_set_evt_callback_table": "0x0001e5a5", - "platform_set_irq_callback": "0x0001e5b1", - "platform_set_irq_callback_table": "0x0001e5cd", - "platform_set_rf_clk_source": "0x0001e5d9", - "platform_set_rf_init_data": "0x0001e5e5", - "platform_set_rf_power_mapping": "0x0001e5f1", - "platform_set_timer": "0x0001e5fd", - "platform_shutdown": "0x0001e601", - "platform_switch_app": "0x0001e605", - "platform_trace_raw": "0x0001e631", - "platform_write_persistent_reg": "0x0001e649", - "printf_hexdump": "0x0001e7fd", - "pvPortMalloc": "0x0001f2ed", - "pvTaskIncrementMutexHeldCount": "0x0001f3d5", - "pvTimerGetTimerID": "0x0001f3ed", - "pxPortInitialiseStack": "0x0001f419", - "reverse_128": "0x0001f5f9", - "reverse_24": "0x0001f5ff", - "reverse_48": "0x0001f605", - "reverse_56": "0x0001f60b", - "reverse_64": "0x0001f611", - "reverse_bd_addr": "0x0001f617", - "reverse_bytes": "0x0001f61d", - "sm_add_event_handler": "0x0001f8dd", - "sm_address_resolution_lookup": "0x0001fa35", - "sm_authenticated": "0x0001fd95", - "sm_authorization_decline": "0x0001fda3", - "sm_authorization_grant": "0x0001fdc3", - "sm_authorization_state": "0x0001fde3", - "sm_bonding_decline": "0x0001fdfd", - "sm_config": "0x0002021d", - "sm_config_conn": "0x00020235", - "sm_encryption_key_size": "0x000203eb", - "sm_just_works_confirm": "0x00020925", - "sm_le_device_key": "0x00020c61", - "sm_passkey_input": "0x00020cf7", - "sm_private_random_address_generation_get": "0x000210a5", - "sm_private_random_address_generation_get_mode": "0x000210ad", - "sm_private_random_address_generation_set_mode": "0x000210b9", - "sm_private_random_address_generation_set_update_period": "0x000210e1", - "sm_register_oob_data_callback": "0x0002121d", - "sm_request_pairing": "0x00021229", - "sm_send_security_request": "0x00021c63", - "sm_set_accepted_stk_generation_methods": "0x00021c89", - "sm_set_authentication_requirements": "0x00021c95", - "sm_set_encryption_key_size_range": "0x00021ca1", - "sscanf_bd_addr": "0x00021ffd", - "sysSetPublicDeviceAddr": "0x000223b1", - "uuid128_to_str": "0x00022b25", - "uuid_add_bluetooth_prefix": "0x00022b7d", - "uuid_has_bluetooth_prefix": "0x00022b9d", - "uxListRemove": "0x00022bb9", - "uxQueueMessagesWaiting": "0x00022be1", - "uxQueueMessagesWaitingFromISR": "0x00022c09", - "uxQueueSpacesAvailable": "0x00022c25", - "uxTaskGetStackHighWaterMark": "0x00022c51", - "uxTaskPriorityGet": "0x00022c71", - "uxTaskPriorityGetFromISR": "0x00022c8d", - "vListInitialise": "0x00022d47", - "vListInitialiseItem": "0x00022d5d", - "vListInsert": "0x00022d63", - "vListInsertEnd": "0x00022d93", - "vPortEndScheduler": "0x00022dad", - "vPortEnterCritical": "0x00022dd9", - "vPortExitCritical": "0x00022e1d", - "vPortFree": "0x00022e51", - "vPortSuppressTicksAndSleep": "0x00022ee5", - "vPortValidateInterruptPriority": "0x00023001", - "vQueueDelete": "0x0002305d", - "vQueueWaitForMessageRestricted": "0x00023089", - "vTaskDelay": "0x000230d1", - "vTaskInternalSetTimeOutState": "0x0002311d", - "vTaskMissedYield": "0x0002312d", - "vTaskPlaceOnEventList": "0x00023139", - "vTaskPlaceOnEventListRestricted": "0x00023171", - "vTaskPriorityDisinheritAfterTimeout": "0x000231b1", - "vTaskPrioritySet": "0x0002325d", - "vTaskResume": "0x00023325", - "vTaskStartScheduler": "0x000233a9", - "vTaskStepTick": "0x00023439", - "vTaskSuspend": "0x00023469", - "vTaskSuspendAll": "0x00023525", - "vTaskSwitchContext": "0x00023535", - "xPortStartScheduler": "0x000235dd", - "xQueueAddToSet": "0x000236a5", - "xQueueCreateCountingSemaphore": "0x000236c9", - "xQueueCreateCountingSemaphoreStatic": "0x00023705", - "xQueueCreateMutex": "0x00023749", - "xQueueCreateMutexStatic": "0x0002375f", - "xQueueCreateSet": "0x00023779", - "xQueueGenericCreate": "0x00023781", - "xQueueGenericCreateStatic": "0x000237cd", - "xQueueGenericReset": "0x00023835", - "xQueueGenericSend": "0x000238c1", - "xQueueGenericSendFromISR": "0x00023a2d", - "xQueueGiveFromISR": "0x00023aed", - "xQueueGiveMutexRecursive": "0x00023b91", - "xQueueIsQueueEmptyFromISR": "0x00023bd1", - "xQueueIsQueueFullFromISR": "0x00023bf5", - "xQueuePeek": "0x00023c1d", - "xQueuePeekFromISR": "0x00023d45", - "xQueueReceive": "0x00023db1", - "xQueueReceiveFromISR": "0x00023edd", - "xQueueRemoveFromSet": "0x00023f71", - "xQueueSelectFromSet": "0x00023f93", - "xQueueSelectFromSetFromISR": "0x00023fa5", - "xQueueSemaphoreTake": "0x00023fb9", - "xQueueTakeMutexRecursive": "0x00024125", - "xTaskCheckForTimeOut": "0x00024169", - "xTaskCreate": "0x000241d9", - "xTaskCreateStatic": "0x00024235", - "xTaskGetCurrentTaskHandle": "0x000242a5", - "xTaskGetSchedulerState": "0x000242b1", - "xTaskGetTickCount": "0x000242cd", - "xTaskGetTickCountFromISR": "0x000242d9", - "xTaskIncrementTick": "0x000242e9", - "xTaskPriorityDisinherit": "0x000243b5", - "xTaskPriorityInherit": "0x00024449", - "xTaskRemoveFromEventList": "0x000244dd", - "xTaskResumeAll": "0x0002455d", - "xTaskResumeFromISR": "0x00024625", - "xTimerCreate": "0x000246b1", - "xTimerCreateStatic": "0x000246e5", - "xTimerCreateTimerTask": "0x0002471d", - "xTimerGenericCommand": "0x00024789", - "xTimerGetExpiryTime": "0x000247f9", - "xTimerGetTimerDaemonTaskHandle": "0x00024819" + "platform_enable_irq": "0x0001e435", + "platform_get_current_task": "0x0001e46d", + "platform_get_gen_os_driver": "0x0001e491", + "platform_get_heap_status": "0x0001e499", + "platform_get_task_handle": "0x0001e4b1", + "platform_get_us_time": "0x0001e4d1", + "platform_get_version": "0x0001e4d5", + "platform_hrng": "0x0001e4dd", + "platform_install_isr_stack": "0x0001e4e5", + "platform_install_task_stack": "0x0001e4f1", + "platform_patch_rf_init_data": "0x0001e529", + "platform_printf": "0x0001e535", + "platform_raise_assertion": "0x0001e549", + "platform_rand": "0x0001e55d", + "platform_read_info": "0x0001e561", + "platform_read_persistent_reg": "0x0001e591", + "platform_reset": "0x0001e5a1", + "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": "0x0001f321", + "pvTaskIncrementMutexHeldCount": "0x0001f409", + "pvTimerGetTimerID": "0x0001f421", + "pxPortInitialiseStack": "0x0001f44d", + "reverse_128": "0x0001f62d", + "reverse_24": "0x0001f633", + "reverse_48": "0x0001f639", + "reverse_56": "0x0001f63f", + "reverse_64": "0x0001f645", + "reverse_bd_addr": "0x0001f64b", + "reverse_bytes": "0x0001f651", + "sm_add_event_handler": "0x0001f911", + "sm_address_resolution_lookup": "0x0001fa69", + "sm_authenticated": "0x0001fdc9", + "sm_authorization_decline": "0x0001fdd7", + "sm_authorization_grant": "0x0001fdf7", + "sm_authorization_state": "0x0001fe17", + "sm_bonding_decline": "0x0001fe31", + "sm_config": "0x00020251", + "sm_config_conn": "0x00020269", + "sm_encryption_key_size": "0x0002041f", + "sm_just_works_confirm": "0x00020959", + "sm_le_device_key": "0x00020c95", + "sm_passkey_input": "0x00020d2b", + "sm_private_random_address_generation_get": "0x000210d9", + "sm_private_random_address_generation_get_mode": "0x000210e1", + "sm_private_random_address_generation_set_mode": "0x000210ed", + "sm_private_random_address_generation_set_update_period": "0x00021115", + "sm_register_oob_data_callback": "0x00021251", + "sm_request_pairing": "0x0002125d", + "sm_send_security_request": "0x00021c97", + "sm_set_accepted_stk_generation_methods": "0x00021cbd", + "sm_set_authentication_requirements": "0x00021cc9", + "sm_set_encryption_key_size_range": "0x00021cd5", + "sscanf_bd_addr": "0x00022031", + "sysSetPublicDeviceAddr": "0x000223e5", + "uuid128_to_str": "0x00022b59", + "uuid_add_bluetooth_prefix": "0x00022bb1", + "uuid_has_bluetooth_prefix": "0x00022bd1", + "uxListRemove": "0x00022bed", + "uxQueueMessagesWaiting": "0x00022c15", + "uxQueueMessagesWaitingFromISR": "0x00022c3d", + "uxQueueSpacesAvailable": "0x00022c59", + "uxTaskGetStackHighWaterMark": "0x00022c85", + "uxTaskPriorityGet": "0x00022ca5", + "uxTaskPriorityGetFromISR": "0x00022cc1", + "vListInitialise": "0x00022d7b", + "vListInitialiseItem": "0x00022d91", + "vListInsert": "0x00022d97", + "vListInsertEnd": "0x00022dc7", + "vPortEndScheduler": "0x00022de1", + "vPortEnterCritical": "0x00022e0d", + "vPortExitCritical": "0x00022e51", + "vPortFree": "0x00022e85", + "vPortSuppressTicksAndSleep": "0x00022f19", + "vPortValidateInterruptPriority": "0x00023035", + "vQueueDelete": "0x00023091", + "vQueueWaitForMessageRestricted": "0x000230bd", + "vTaskDelay": "0x00023105", + "vTaskInternalSetTimeOutState": "0x00023151", + "vTaskMissedYield": "0x00023161", + "vTaskPlaceOnEventList": "0x0002316d", + "vTaskPlaceOnEventListRestricted": "0x000231a5", + "vTaskPriorityDisinheritAfterTimeout": "0x000231e5", + "vTaskPrioritySet": "0x00023291", + "vTaskResume": "0x00023359", + "vTaskStartScheduler": "0x000233dd", + "vTaskStepTick": "0x0002346d", + "vTaskSuspend": "0x0002349d", + "vTaskSuspendAll": "0x00023559", + "vTaskSwitchContext": "0x00023569", + "xPortStartScheduler": "0x00023611", + "xQueueAddToSet": "0x000236d9", + "xQueueCreateCountingSemaphore": "0x000236fd", + "xQueueCreateCountingSemaphoreStatic": "0x00023739", + "xQueueCreateMutex": "0x0002377d", + "xQueueCreateMutexStatic": "0x00023793", + "xQueueCreateSet": "0x000237ad", + "xQueueGenericCreate": "0x000237b5", + "xQueueGenericCreateStatic": "0x00023801", + "xQueueGenericReset": "0x00023869", + "xQueueGenericSend": "0x000238f5", + "xQueueGenericSendFromISR": "0x00023a61", + "xQueueGiveFromISR": "0x00023b21", + "xQueueGiveMutexRecursive": "0x00023bc5", + "xQueueIsQueueEmptyFromISR": "0x00023c05", + "xQueueIsQueueFullFromISR": "0x00023c29", + "xQueuePeek": "0x00023c51", + "xQueuePeekFromISR": "0x00023d79", + "xQueueReceive": "0x00023de5", + "xQueueReceiveFromISR": "0x00023f11", + "xQueueRemoveFromSet": "0x00023fa5", + "xQueueSelectFromSet": "0x00023fc7", + "xQueueSelectFromSetFromISR": "0x00023fd9", + "xQueueSemaphoreTake": "0x00023fed", + "xQueueTakeMutexRecursive": "0x00024159", + "xTaskCheckForTimeOut": "0x0002419d", + "xTaskCreate": "0x0002420d", + "xTaskCreateStatic": "0x00024269", + "xTaskGetCurrentTaskHandle": "0x000242d9", + "xTaskGetSchedulerState": "0x000242e5", + "xTaskGetTickCount": "0x00024301", + "xTaskGetTickCountFromISR": "0x0002430d", + "xTaskIncrementTick": "0x0002431d", + "xTaskPriorityDisinherit": "0x000243e9", + "xTaskPriorityInherit": "0x0002447d", + "xTaskRemoveFromEventList": "0x00024511", + "xTaskResumeAll": "0x00024591", + "xTaskResumeFromISR": "0x00024659", + "xTimerCreate": "0x000246e5", + "xTimerCreateStatic": "0x00024719", + "xTimerCreateTimerTask": "0x00024751", + "xTimerGenericCommand": "0x000247bd", + "xTimerGetExpiryTime": "0x0002482d", + "xTimerGetTimerDaemonTaskHandle": "0x0002484d" } \ No newline at end of file diff --git a/bundles/mass_conn/ING9188xx/meta.json b/bundles/mass_conn/ING9188xx/meta.json index 3af8c210b..0748a7d67 100644 --- a/bundles/mass_conn/ING9188xx/meta.json +++ b/bundles/mass_conn/ING9188xx/meta.json @@ -8,11 +8,11 @@ }, "rom": { "base": 16384, - "size": 139800 + "size": 139852 }, "version": [ 1, 9, - 15 + 16 ] } \ No newline at end of file diff --git a/bundles/mass_conn/ING9188xx/platform.bin b/bundles/mass_conn/ING9188xx/platform.bin index dfe1fe3780cec4dbaadce92f25b10e319d67dff6..79b628ce0ae9dd32af69931859e730edac422a11 100644 GIT binary patch delta 7487 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 Qkf^>L|;br?7BztE-rB>(^b diff --git a/bundles/mass_conn/inc/platform_api.h b/bundles/mass_conn/inc/platform_api.h index 82969b3f6..f9e010569 100644 --- a/bundles/mass_conn/inc/platform_api.h +++ b/bundles/mass_conn/inc/platform_api.h @@ -402,11 +402,8 @@ typedef enum PLATFORM_CFG_RC32K_EN, // Enable/Disable RC 32k clock. Default: Enable PLATFORM_CFG_OSC32K_EN, // Enable/Disable 32k crystal oscillator. Default: Enable PLATFORM_CFG_32K_CLK, // 32k clock selection. flag is platform_32k_clk_src_t. default: PLATFORM_32K_RC - // Note: When modifying this configuration, both RC32K and OSC32K should be ENABLED. - // For ING918, both clocks must be running: - // * For OSC32K, wait until status of OSC32K is OK; - // * For RC32K, wait 100us after enabled. - // Note: Wait another 100us before disabling the unused clock. + // Note 1: When modifying this configuration, both RC32K and OSC32K should be ENABLED. + // Note 2: Unused clock can be disabled. PLATFORM_CFG_32K_CLK_ACC, // Configure 32k clock accuracy in ppm. PLATFORM_CFG_32K_CALI_PERIOD, // 32K clock auto-calibration period in seconds. Default: 3600 * 2 PLATFORM_CFG_PS_DBG_0, // debugging parameter diff --git a/bundles/mini/ING9168xx/apis.json b/bundles/mini/ING9168xx/apis.json index ccadc6e9f..106619ea7 100644 --- a/bundles/mini/ING9168xx/apis.json +++ b/bundles/mini/ING9168xx/apis.json @@ -183,149 +183,149 @@ "platform_32k_rc_tune": "0x0201e8ed", "platform_calibrate_32k": "0x0201e909", "platform_config": "0x0201e90d", - "platform_enable_irq": "0x0201ea15", - "platform_get_current_task": "0x0201ea49", - "platform_get_gen_os_driver": "0x0201ea6d", - "platform_get_heap_status": "0x0201ea75", - "platform_get_task_handle": "0x0201ea8d", - "platform_get_us_time": "0x0201eaad", - "platform_get_version": "0x0201eab1", - "platform_hrng": "0x0201eab9", - "platform_install_isr_stack": "0x0201eac1", - "platform_install_task_stack": "0x0201eacd", - "platform_patch_rf_init_data": "0x0201eb05", - "platform_printf": "0x0201eb11", - "platform_raise_assertion": "0x0201eb25", - "platform_rand": "0x0201eb39", - "platform_read_info": "0x0201eb3d", - "platform_read_persistent_reg": "0x0201eb6d", - "platform_reset": "0x0201eb79", - "platform_set_evt_callback": "0x0201eb8d", - "platform_set_evt_callback_table": "0x0201eba1", - "platform_set_irq_callback": "0x0201ebad", - "platform_set_irq_callback_table": "0x0201ebc9", - "platform_set_rf_clk_source": "0x0201ebd5", - "platform_set_rf_init_data": "0x0201ebe1", - "platform_set_rf_power_mapping": "0x0201ebed", - "platform_set_timer": "0x0201ebf9", - "platform_shutdown": "0x0201ebfd", - "platform_switch_app": "0x0201ec01", - "platform_trace_raw": "0x0201ec19", - "platform_write_persistent_reg": "0x0201ec31", - "printf_hexdump": "0x0201ede9", - "pvPortMalloc": "0x0201f8b5", - "pvTaskIncrementMutexHeldCount": "0x0201f99d", - "pvTimerGetTimerID": "0x0201f9b5", - "pxPortInitialiseStack": "0x0201f9e1", - "reverse_128": "0x0201fbc9", - "reverse_24": "0x0201fbcf", - "reverse_48": "0x0201fbd5", - "reverse_56": "0x0201fbdb", - "reverse_64": "0x0201fbe1", - "reverse_bd_addr": "0x0201fbe7", - "reverse_bytes": "0x0201fbed", - "sm_add_event_handler": "0x0201ff09", - "sm_address_resolution_lookup": "0x02020061", - "sm_authenticated": "0x020203c1", - "sm_authorization_decline": "0x020203cf", - "sm_authorization_grant": "0x020203ef", - "sm_authorization_state": "0x0202040f", - "sm_bonding_decline": "0x02020429", - "sm_config": "0x02020841", - "sm_config_conn": "0x02020859", - "sm_encryption_key_size": "0x02020a0f", - "sm_just_works_confirm": "0x02020f49", - "sm_le_device_key": "0x02021285", - "sm_passkey_input": "0x0202131b", - "sm_private_random_address_generation_get": "0x020216c9", - "sm_private_random_address_generation_get_mode": "0x020216d1", - "sm_private_random_address_generation_set_mode": "0x020216dd", - "sm_private_random_address_generation_set_update_period": "0x02021705", - "sm_register_oob_data_callback": "0x02021841", - "sm_request_pairing": "0x0202184d", - "sm_send_security_request": "0x0202228b", - "sm_set_accepted_stk_generation_methods": "0x020222b1", - "sm_set_authentication_requirements": "0x020222bd", - "sm_set_encryption_key_size_range": "0x020222c9", - "sscanf_bd_addr": "0x02022629", - "sysSetPublicDeviceAddr": "0x02022a95", - "uuid128_to_str": "0x02023241", - "uuid_add_bluetooth_prefix": "0x02023299", - "uuid_has_bluetooth_prefix": "0x020232b9", - "uxListRemove": "0x020232d5", - "uxQueueMessagesWaiting": "0x020232fd", - "uxQueueMessagesWaitingFromISR": "0x02023325", - "uxQueueSpacesAvailable": "0x02023341", - "uxTaskGetStackHighWaterMark": "0x0202336d", - "uxTaskPriorityGet": "0x0202338d", - "uxTaskPriorityGetFromISR": "0x020233a9", - "vListInitialise": "0x0202344f", - "vListInitialiseItem": "0x02023465", - "vListInsert": "0x0202346b", - "vListInsertEnd": "0x0202349b", - "vPortEndScheduler": "0x020234b5", - "vPortEnterCritical": "0x020234e1", - "vPortExitCritical": "0x02023525", - "vPortFree": "0x02023559", - "vPortSuppressTicksAndSleep": "0x020235fd", - "vPortValidateInterruptPriority": "0x02023725", - "vQueueDelete": "0x02023781", - "vQueueWaitForMessageRestricted": "0x020237ad", - "vTaskDelay": "0x020237f1", - "vTaskInternalSetTimeOutState": "0x0202383d", - "vTaskMissedYield": "0x0202384d", - "vTaskPlaceOnEventList": "0x02023859", - "vTaskPlaceOnEventListRestricted": "0x02023891", - "vTaskPriorityDisinheritAfterTimeout": "0x020238d1", - "vTaskPrioritySet": "0x0202397d", - "vTaskResume": "0x02023a45", - "vTaskStartScheduler": "0x02023ac9", - "vTaskStepTick": "0x02023b59", - "vTaskSuspend": "0x02023b89", - "vTaskSuspendAll": "0x02023c45", - "vTaskSwitchContext": "0x02023c55", - "xPortStartScheduler": "0x02023cf9", - "xQueueAddToSet": "0x02023dfd", - "xQueueCreateCountingSemaphore": "0x02023e21", - "xQueueCreateCountingSemaphoreStatic": "0x02023e5d", - "xQueueCreateMutex": "0x02023ea1", - "xQueueCreateMutexStatic": "0x02023eb7", - "xQueueCreateSet": "0x02023ed1", - "xQueueGenericCreate": "0x02023ed9", - "xQueueGenericCreateStatic": "0x02023f25", - "xQueueGenericReset": "0x02023f8d", - "xQueueGenericSend": "0x02024019", - "xQueueGenericSendFromISR": "0x02024185", - "xQueueGiveFromISR": "0x02024245", - "xQueueGiveMutexRecursive": "0x020242e9", - "xQueueIsQueueEmptyFromISR": "0x02024329", - "xQueueIsQueueFullFromISR": "0x0202434d", - "xQueuePeek": "0x02024375", - "xQueuePeekFromISR": "0x0202449d", - "xQueueReceive": "0x02024509", - "xQueueReceiveFromISR": "0x02024635", - "xQueueRemoveFromSet": "0x020246c9", - "xQueueSelectFromSet": "0x020246eb", - "xQueueSelectFromSetFromISR": "0x020246fd", - "xQueueSemaphoreTake": "0x02024711", - "xQueueTakeMutexRecursive": "0x0202487d", - "xTaskCheckForTimeOut": "0x020248c1", - "xTaskCreate": "0x02024931", - "xTaskCreateStatic": "0x0202498d", - "xTaskGetCurrentTaskHandle": "0x020249fd", - "xTaskGetSchedulerState": "0x02024a09", - "xTaskGetTickCount": "0x02024a25", - "xTaskGetTickCountFromISR": "0x02024a31", - "xTaskIncrementTick": "0x02024a41", - "xTaskPriorityDisinherit": "0x02024b0d", - "xTaskPriorityInherit": "0x02024ba1", - "xTaskRemoveFromEventList": "0x02024c35", - "xTaskResumeAll": "0x02024cb5", - "xTaskResumeFromISR": "0x02024d7d", - "xTimerCreate": "0x02024e09", - "xTimerCreateStatic": "0x02024e3d", - "xTimerCreateTimerTask": "0x02024e75", - "xTimerGenericCommand": "0x02024ee1", - "xTimerGetExpiryTime": "0x02024f51", - "xTimerGetTimerDaemonTaskHandle": "0x02024f71" + "platform_enable_irq": "0x0201ea31", + "platform_get_current_task": "0x0201ea65", + "platform_get_gen_os_driver": "0x0201ea89", + "platform_get_heap_status": "0x0201ea91", + "platform_get_task_handle": "0x0201eaa9", + "platform_get_us_time": "0x0201eac9", + "platform_get_version": "0x0201eacd", + "platform_hrng": "0x0201ead5", + "platform_install_isr_stack": "0x0201eadd", + "platform_install_task_stack": "0x0201eae9", + "platform_patch_rf_init_data": "0x0201eb21", + "platform_printf": "0x0201eb2d", + "platform_raise_assertion": "0x0201eb41", + "platform_rand": "0x0201eb55", + "platform_read_info": "0x0201eb59", + "platform_read_persistent_reg": "0x0201eb89", + "platform_reset": "0x0201eb95", + "platform_set_evt_callback": "0x0201eba9", + "platform_set_evt_callback_table": "0x0201ebbd", + "platform_set_irq_callback": "0x0201ebc9", + "platform_set_irq_callback_table": "0x0201ebe5", + "platform_set_rf_clk_source": "0x0201ebf1", + "platform_set_rf_init_data": "0x0201ebfd", + "platform_set_rf_power_mapping": "0x0201ec09", + "platform_set_timer": "0x0201ec15", + "platform_shutdown": "0x0201ec19", + "platform_switch_app": "0x0201ec1d", + "platform_trace_raw": "0x0201ec35", + "platform_write_persistent_reg": "0x0201ec4d", + "printf_hexdump": "0x0201ee05", + "pvPortMalloc": "0x0201f8d1", + "pvTaskIncrementMutexHeldCount": "0x0201f9b9", + "pvTimerGetTimerID": "0x0201f9d1", + "pxPortInitialiseStack": "0x0201f9fd", + "reverse_128": "0x0201fbe5", + "reverse_24": "0x0201fbeb", + "reverse_48": "0x0201fbf1", + "reverse_56": "0x0201fbf7", + "reverse_64": "0x0201fbfd", + "reverse_bd_addr": "0x0201fc03", + "reverse_bytes": "0x0201fc09", + "sm_add_event_handler": "0x0201ff25", + "sm_address_resolution_lookup": "0x0202007d", + "sm_authenticated": "0x020203dd", + "sm_authorization_decline": "0x020203eb", + "sm_authorization_grant": "0x0202040b", + "sm_authorization_state": "0x0202042b", + "sm_bonding_decline": "0x02020445", + "sm_config": "0x0202085d", + "sm_config_conn": "0x02020875", + "sm_encryption_key_size": "0x02020a2b", + "sm_just_works_confirm": "0x02020f65", + "sm_le_device_key": "0x020212a1", + "sm_passkey_input": "0x02021337", + "sm_private_random_address_generation_get": "0x020216e5", + "sm_private_random_address_generation_get_mode": "0x020216ed", + "sm_private_random_address_generation_set_mode": "0x020216f9", + "sm_private_random_address_generation_set_update_period": "0x02021721", + "sm_register_oob_data_callback": "0x0202185d", + "sm_request_pairing": "0x02021869", + "sm_send_security_request": "0x020222a7", + "sm_set_accepted_stk_generation_methods": "0x020222cd", + "sm_set_authentication_requirements": "0x020222d9", + "sm_set_encryption_key_size_range": "0x020222e5", + "sscanf_bd_addr": "0x02022645", + "sysSetPublicDeviceAddr": "0x02022ab1", + "uuid128_to_str": "0x0202325d", + "uuid_add_bluetooth_prefix": "0x020232b5", + "uuid_has_bluetooth_prefix": "0x020232d5", + "uxListRemove": "0x020232f1", + "uxQueueMessagesWaiting": "0x02023319", + "uxQueueMessagesWaitingFromISR": "0x02023341", + "uxQueueSpacesAvailable": "0x0202335d", + "uxTaskGetStackHighWaterMark": "0x02023389", + "uxTaskPriorityGet": "0x020233a9", + "uxTaskPriorityGetFromISR": "0x020233c5", + "vListInitialise": "0x0202346b", + "vListInitialiseItem": "0x02023481", + "vListInsert": "0x02023487", + "vListInsertEnd": "0x020234b7", + "vPortEndScheduler": "0x020234d1", + "vPortEnterCritical": "0x020234fd", + "vPortExitCritical": "0x02023541", + "vPortFree": "0x02023575", + "vPortSuppressTicksAndSleep": "0x02023619", + "vPortValidateInterruptPriority": "0x02023741", + "vQueueDelete": "0x0202379d", + "vQueueWaitForMessageRestricted": "0x020237c9", + "vTaskDelay": "0x0202380d", + "vTaskInternalSetTimeOutState": "0x02023859", + "vTaskMissedYield": "0x02023869", + "vTaskPlaceOnEventList": "0x02023875", + "vTaskPlaceOnEventListRestricted": "0x020238ad", + "vTaskPriorityDisinheritAfterTimeout": "0x020238ed", + "vTaskPrioritySet": "0x02023999", + "vTaskResume": "0x02023a61", + "vTaskStartScheduler": "0x02023ae5", + "vTaskStepTick": "0x02023b75", + "vTaskSuspend": "0x02023ba5", + "vTaskSuspendAll": "0x02023c61", + "vTaskSwitchContext": "0x02023c71", + "xPortStartScheduler": "0x02023d15", + "xQueueAddToSet": "0x02023e19", + "xQueueCreateCountingSemaphore": "0x02023e3d", + "xQueueCreateCountingSemaphoreStatic": "0x02023e79", + "xQueueCreateMutex": "0x02023ebd", + "xQueueCreateMutexStatic": "0x02023ed3", + "xQueueCreateSet": "0x02023eed", + "xQueueGenericCreate": "0x02023ef5", + "xQueueGenericCreateStatic": "0x02023f41", + "xQueueGenericReset": "0x02023fa9", + "xQueueGenericSend": "0x02024035", + "xQueueGenericSendFromISR": "0x020241a1", + "xQueueGiveFromISR": "0x02024261", + "xQueueGiveMutexRecursive": "0x02024305", + "xQueueIsQueueEmptyFromISR": "0x02024345", + "xQueueIsQueueFullFromISR": "0x02024369", + "xQueuePeek": "0x02024391", + "xQueuePeekFromISR": "0x020244b9", + "xQueueReceive": "0x02024525", + "xQueueReceiveFromISR": "0x02024651", + "xQueueRemoveFromSet": "0x020246e5", + "xQueueSelectFromSet": "0x02024707", + "xQueueSelectFromSetFromISR": "0x02024719", + "xQueueSemaphoreTake": "0x0202472d", + "xQueueTakeMutexRecursive": "0x02024899", + "xTaskCheckForTimeOut": "0x020248dd", + "xTaskCreate": "0x0202494d", + "xTaskCreateStatic": "0x020249a9", + "xTaskGetCurrentTaskHandle": "0x02024a19", + "xTaskGetSchedulerState": "0x02024a25", + "xTaskGetTickCount": "0x02024a41", + "xTaskGetTickCountFromISR": "0x02024a4d", + "xTaskIncrementTick": "0x02024a5d", + "xTaskPriorityDisinherit": "0x02024b29", + "xTaskPriorityInherit": "0x02024bbd", + "xTaskRemoveFromEventList": "0x02024c51", + "xTaskResumeAll": "0x02024cd1", + "xTaskResumeFromISR": "0x02024d99", + "xTimerCreate": "0x02024e25", + "xTimerCreateStatic": "0x02024e59", + "xTimerCreateTimerTask": "0x02024e91", + "xTimerGenericCommand": "0x02024efd", + "xTimerGetExpiryTime": "0x02024f6d", + "xTimerGetTimerDaemonTaskHandle": "0x02024f8d" } \ No newline at end of file diff --git a/bundles/mini/ING9168xx/meta.json b/bundles/mini/ING9168xx/meta.json index 76806a64e..347c7a86b 100644 --- a/bundles/mini/ING9168xx/meta.json +++ b/bundles/mini/ING9168xx/meta.json @@ -8,11 +8,11 @@ }, "rom": { "base": 33562624, - "size": 152328 + "size": 152356 }, "version": [ 2, 2, - 12 + 13 ] } \ No newline at end of file diff --git a/bundles/mini/ING9168xx/platform.bin b/bundles/mini/ING9168xx/platform.bin index 6813c3d75e2fec4f5f1d4e57046bce9634a4fbaf..f0214954d792b229e8aa2005eceb64b991634061 100644 GIT binary patch delta 7931 zcmZ8`3tSXO^8ZxtF6{DLL<9t6mPcGfBB(@(FF+X<)Sx21jS%(kqA{YL5k&)Bf`Ri) z#EEHhxg_W%QGA@>N>)(R7`gwuO zRrhS==bBGH*X(qI?=EF`iX{ zg%$Rh?A`$YKk~l5@4_wqBj3#6NQoJ~zGaWZFtXCNV^LmeHd5GWvinX3;^XF1{f*Gb z*ZNyR4?4y8btk7cOwP^C|rZs_1KPci?N0q{G{!!ESiW-Fc-=V5eAt2N3H-n*k_6#^A$`Y_O4eHQH%~)G|Q$h z@XPjN3yeFuJQ*h1XRnW8pD|L%mekq$rL#v8wynR$bFbPEh1N~r6H>w;#gvtTi@K6u z_+lpf-SoE?*FfMR=}k`cppvPx5^b_o&kPoFO|j!k2-KPOPAmnu!s}84VGp02IxZ-G z79mDV22ArXbG8O!CZtcod~5nq)gElMhfkV3G)U<0hv5F+DHSvFe&55do*aw=tC$?= z+h;?c&9=rL`TEK7fGUX(-8GxvHWbNpKCnJ&(A1{k{9UzY-&Am_ILD;Cwyk|zh*>1I3LPQjg<#I76q7k zU`dw7SpL5gBb$V@dTCMS9voB<|1swga2~nxgv*29bb?{7@D1ET^g98WxpAkkPMJlF z8e^K&G$P%YonL0G%*WQhY2%A+KIM00E`h)Dk206SVSc6|I4Y5tw(~_U zPRF8S4s*YAPxtOC@2(2}oMmW;ki~DEv7Rt){y#HD!+Cz_%)PLmzch0w@O;nAOtQws zPn;9N&zkiD$$VDaH)}wo+s&}8+dNseh!IBF81`OgQG*8;&INI5E*L$=wOL6-1#WXQ!f7k|-exWOR$25Y-$GnpFoRbWz`3ZBTLMG-BexFK%%hEVyPdF1MFfRW196dzv z0eM0E>4hF9Y0hkb%l!0t32=rlnYRfx^1bs40;V;^pzWHvzO~8;5vuqV^P>Y^X&U}J z?q>eO`EfzRni7Ate zOb(EJjBH(KWu#J-DO%3>zU zlMN9Txl(0!QO+=_48xw`*Os-z22)=7RVB`2^tNsSn|a@=xiG`Dyedlxas1I8d7(w< zk6s(O`@7NV^(GYU!FIag8M*-yVRfp1GwCVDpg-RG{8d^7> zz^kV6V;X|WwjbZ9hVv#x^Im`$(`TpGD`7Vu`c)EaF-`r->JQsZ8P{^W;fiVZ&xZ(< zo6_2D5y;^qJKlx?ru`isDZp*Y=-S~GblwGAv!rCo)0ICqTRoU0E%@1kbQbTq%ARwKRv1kG z=>d%amAG;4MgmbMG3*bgtKLbYA9%tc7;er`!z3l~ahkXJz#ihgOUf_WEyWV8u)`eZ z548#yV7@j0MiKa!dIrI2D5D#K;BT;xh7N*FN`FBq(f0>I6r`CO2SKy~=9+JX!YT!9 zH)llv-ojGpr6DjK1aojC*p-lB4vc|+D&Qb(9}3r@%-pPpue{+pEgubUgTbsxh7w;$ zF;}F+U4UQcswuD#hS9I5Km#16TQgugoHA=Txa|#FY4=P>fdMpn77T@H=Bcxw7GNXo z&4rCH&b)dyEK$IIdUY;b4z=3<$g##RH+hv_OelZ*YIAXs3G8|DrtNHC$U@wFwxjd#EmnxYYfgu50etih* z(fj`EUP3HQTL!@pYM#Fg7OUZ3X7j6nSK;C2ORGT#&_W-)hHL+YIdTnTC?Lzcd>vd; z!7}rRVu&NqYo5OuZlOCfk9h-bsbK>RdK

    TxDlim5@){k-)V$R0%wsqm!y&chDM) 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 delta 7192 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 z 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 O(z?zZ#%zJykpBmBT;UG@ diff --git a/bundles/mini/inc/platform_api.h b/bundles/mini/inc/platform_api.h index 82969b3f6..f9e010569 100644 --- a/bundles/mini/inc/platform_api.h +++ b/bundles/mini/inc/platform_api.h @@ -402,11 +402,8 @@ typedef enum PLATFORM_CFG_RC32K_EN, // Enable/Disable RC 32k clock. Default: Enable PLATFORM_CFG_OSC32K_EN, // Enable/Disable 32k crystal oscillator. Default: Enable PLATFORM_CFG_32K_CLK, // 32k clock selection. flag is platform_32k_clk_src_t. default: PLATFORM_32K_RC - // Note: When modifying this configuration, both RC32K and OSC32K should be ENABLED. - // For ING918, both clocks must be running: - // * For OSC32K, wait until status of OSC32K is OK; - // * For RC32K, wait 100us after enabled. - // Note: Wait another 100us before disabling the unused clock. + // Note 1: When modifying this configuration, both RC32K and OSC32K should be ENABLED. + // Note 2: Unused clock can be disabled. PLATFORM_CFG_32K_CLK_ACC, // Configure 32k clock accuracy in ppm. PLATFORM_CFG_32K_CALI_PERIOD, // 32K clock auto-calibration period in seconds. Default: 3600 * 2 PLATFORM_CFG_PS_DBG_0, // debugging parameter diff --git a/bundles/noos_exp/ING9187xx/apis.json b/bundles/noos_exp/ING9187xx/apis.json index d56a5fffa..85cb74631 100644 --- a/bundles/noos_exp/ING9187xx/apis.json +++ b/bundles/noos_exp/ING9187xx/apis.json @@ -197,71 +197,71 @@ "platform_32k_rc_tune": "0x0001f3c1", "platform_calibrate_32k": "0x0001f3d5", "platform_config": "0x0001f3d9", - "platform_controller_run": "0x0001f4c9", - "platform_enable_irq": "0x0001f501", - "platform_get_gen_os_driver": "0x0001f539", - "platform_get_task_handle": "0x0001f545", - "platform_get_us_time": "0x0001f55d", - "platform_get_version": "0x0001f561", - "platform_hrng": "0x0001f569", - "platform_init_controller": "0x0001f571", - "platform_os_idle_resumed_hook": "0x0001f58d", - "platform_patch_rf_init_data": "0x0001f591", - "platform_post_sleep_processing": "0x0001f59d", - "platform_pre_sleep_processing": "0x0001f5a3", - "platform_pre_suppress_ticks_and_sleep_processing": "0x0001f5a9", - "platform_printf": "0x0001f5ad", - "platform_raise_assertion": "0x0001f5c1", - "platform_rand": "0x0001f5d5", - "platform_read_info": "0x0001f5d9", - "platform_read_persistent_reg": "0x0001f609", - "platform_reset": "0x0001f619", - "platform_set_evt_callback": "0x0001f63d", - "platform_set_evt_callback_table": "0x0001f651", - "platform_set_irq_callback": "0x0001f65d", - "platform_set_irq_callback_table": "0x0001f679", - "platform_set_rf_clk_source": "0x0001f685", - "platform_set_rf_init_data": "0x0001f691", - "platform_set_rf_power_mapping": "0x0001f69d", - "platform_set_timer": "0x0001f6a9", - "platform_shutdown": "0x0001f6ad", - "platform_switch_app": "0x0001f6b1", - "platform_trace_raw": "0x0001f6dd", - "platform_write_persistent_reg": "0x0001f6f5", - "printf_hexdump": "0x0001f705", - "reverse_128": "0x0001fa41", - "reverse_24": "0x0001fa47", - "reverse_48": "0x0001fa4d", - "reverse_56": "0x0001fa53", - "reverse_64": "0x0001fa59", - "reverse_bd_addr": "0x0001fa5f", - "reverse_bytes": "0x0001fa65", - "sm_add_event_handler": "0x0001fc11", - "sm_address_resolution_lookup": "0x0001fd69", - "sm_authenticated": "0x000200c9", - "sm_authorization_decline": "0x000200d7", - "sm_authorization_grant": "0x000200f7", - "sm_authorization_state": "0x00020117", - "sm_bonding_decline": "0x00020131", - "sm_config": "0x00020551", - "sm_config_conn": "0x00020569", - "sm_encryption_key_size": "0x0002071f", - "sm_just_works_confirm": "0x00020c59", - "sm_le_device_key": "0x00020f95", - "sm_passkey_input": "0x0002102b", - "sm_private_random_address_generation_get": "0x000213d9", - "sm_private_random_address_generation_get_mode": "0x000213e1", - "sm_private_random_address_generation_set_mode": "0x000213ed", - "sm_private_random_address_generation_set_update_period": "0x00021415", - "sm_register_oob_data_callback": "0x00021551", - "sm_request_pairing": "0x0002155d", - "sm_send_security_request": "0x00021f97", - "sm_set_accepted_stk_generation_methods": "0x00021fbd", - "sm_set_authentication_requirements": "0x00021fc9", - "sm_set_encryption_key_size_range": "0x00021fd5", - "sscanf_bd_addr": "0x000223a5", - "sysSetPublicDeviceAddr": "0x00022759", - "uuid128_to_str": "0x00022d65", - "uuid_add_bluetooth_prefix": "0x00022dbd", - "uuid_has_bluetooth_prefix": "0x00022ddd" + "platform_controller_run": "0x0001f4fd", + "platform_enable_irq": "0x0001f535", + "platform_get_gen_os_driver": "0x0001f56d", + "platform_get_task_handle": "0x0001f579", + "platform_get_us_time": "0x0001f591", + "platform_get_version": "0x0001f595", + "platform_hrng": "0x0001f59d", + "platform_init_controller": "0x0001f5a5", + "platform_os_idle_resumed_hook": "0x0001f5c1", + "platform_patch_rf_init_data": "0x0001f5c5", + "platform_post_sleep_processing": "0x0001f5d1", + "platform_pre_sleep_processing": "0x0001f5d7", + "platform_pre_suppress_ticks_and_sleep_processing": "0x0001f5dd", + "platform_printf": "0x0001f5e1", + "platform_raise_assertion": "0x0001f5f5", + "platform_rand": "0x0001f609", + "platform_read_info": "0x0001f60d", + "platform_read_persistent_reg": "0x0001f63d", + "platform_reset": "0x0001f64d", + "platform_set_evt_callback": "0x0001f671", + "platform_set_evt_callback_table": "0x0001f685", + "platform_set_irq_callback": "0x0001f691", + "platform_set_irq_callback_table": "0x0001f6ad", + "platform_set_rf_clk_source": "0x0001f6b9", + "platform_set_rf_init_data": "0x0001f6c5", + "platform_set_rf_power_mapping": "0x0001f6d1", + "platform_set_timer": "0x0001f6dd", + "platform_shutdown": "0x0001f6e1", + "platform_switch_app": "0x0001f6e5", + "platform_trace_raw": "0x0001f711", + "platform_write_persistent_reg": "0x0001f729", + "printf_hexdump": "0x0001f739", + "reverse_128": "0x0001fa75", + "reverse_24": "0x0001fa7b", + "reverse_48": "0x0001fa81", + "reverse_56": "0x0001fa87", + "reverse_64": "0x0001fa8d", + "reverse_bd_addr": "0x0001fa93", + "reverse_bytes": "0x0001fa99", + "sm_add_event_handler": "0x0001fc45", + "sm_address_resolution_lookup": "0x0001fd9d", + "sm_authenticated": "0x000200fd", + "sm_authorization_decline": "0x0002010b", + "sm_authorization_grant": "0x0002012b", + "sm_authorization_state": "0x0002014b", + "sm_bonding_decline": "0x00020165", + "sm_config": "0x00020585", + "sm_config_conn": "0x0002059d", + "sm_encryption_key_size": "0x00020753", + "sm_just_works_confirm": "0x00020c8d", + "sm_le_device_key": "0x00020fc9", + "sm_passkey_input": "0x0002105f", + "sm_private_random_address_generation_get": "0x0002140d", + "sm_private_random_address_generation_get_mode": "0x00021415", + "sm_private_random_address_generation_set_mode": "0x00021421", + "sm_private_random_address_generation_set_update_period": "0x00021449", + "sm_register_oob_data_callback": "0x00021585", + "sm_request_pairing": "0x00021591", + "sm_send_security_request": "0x00021fcb", + "sm_set_accepted_stk_generation_methods": "0x00021ff1", + "sm_set_authentication_requirements": "0x00021ffd", + "sm_set_encryption_key_size_range": "0x00022009", + "sscanf_bd_addr": "0x000223d9", + "sysSetPublicDeviceAddr": "0x0002278d", + "uuid128_to_str": "0x00022d99", + "uuid_add_bluetooth_prefix": "0x00022df1", + "uuid_has_bluetooth_prefix": "0x00022e11" } \ No newline at end of file diff --git a/bundles/noos_exp/ING9187xx/meta.json b/bundles/noos_exp/ING9187xx/meta.json index 93ad24867..e351ad40a 100644 --- a/bundles/noos_exp/ING9187xx/meta.json +++ b/bundles/noos_exp/ING9187xx/meta.json @@ -8,11 +8,11 @@ }, "rom": { "base": 16384, - "size": 133464 + "size": 133516 }, "version": [ 1, 9, - 15 + 16 ] } \ No newline at end of file diff --git a/bundles/noos_exp/ING9187xx/platform.bin b/bundles/noos_exp/ING9187xx/platform.bin index e196d5666a2af93062dcec0cfb466887aed08cd5..42fd8cdc8268769793b37c31f3fdaa6a2ac907da 100644 GIT binary patch delta 7022 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 E|Ko5m(*OVf diff --git a/bundles/noos_exp/ING9188xx/apis.json b/bundles/noos_exp/ING9188xx/apis.json index 5c3a6e567..387f01996 100644 --- a/bundles/noos_exp/ING9188xx/apis.json +++ b/bundles/noos_exp/ING9188xx/apis.json @@ -216,71 +216,71 @@ "platform_32k_rc_tune": "0x000209f9", "platform_calibrate_32k": "0x00020a0d", "platform_config": "0x00020a11", - "platform_controller_run": "0x00020b01", - "platform_enable_irq": "0x00020b39", - "platform_get_gen_os_driver": "0x00020b71", - "platform_get_task_handle": "0x00020b7d", - "platform_get_us_time": "0x00020b95", - "platform_get_version": "0x00020b99", - "platform_hrng": "0x00020ba1", - "platform_init_controller": "0x00020ba9", - "platform_os_idle_resumed_hook": "0x00020bc5", - "platform_patch_rf_init_data": "0x00020bc9", - "platform_post_sleep_processing": "0x00020bd5", - "platform_pre_sleep_processing": "0x00020bdb", - "platform_pre_suppress_ticks_and_sleep_processing": "0x00020be1", - "platform_printf": "0x00020be5", - "platform_raise_assertion": "0x00020bf9", - "platform_rand": "0x00020c0d", - "platform_read_info": "0x00020c11", - "platform_read_persistent_reg": "0x00020c41", - "platform_reset": "0x00020c51", - "platform_set_evt_callback": "0x00020c75", - "platform_set_evt_callback_table": "0x00020c89", - "platform_set_irq_callback": "0x00020c95", - "platform_set_irq_callback_table": "0x00020cb1", - "platform_set_rf_clk_source": "0x00020cbd", - "platform_set_rf_init_data": "0x00020cc9", - "platform_set_rf_power_mapping": "0x00020cd5", - "platform_set_timer": "0x00020ce1", - "platform_shutdown": "0x00020ce5", - "platform_switch_app": "0x00020ce9", - "platform_trace_raw": "0x00020d15", - "platform_write_persistent_reg": "0x00020d2d", - "printf_hexdump": "0x00020d3d", - "reverse_128": "0x000210b1", - "reverse_24": "0x000210b7", - "reverse_48": "0x000210bd", - "reverse_56": "0x000210c3", - "reverse_64": "0x000210c9", - "reverse_bd_addr": "0x000210cf", - "reverse_bytes": "0x000210d5", - "sm_add_event_handler": "0x000213d5", - "sm_address_resolution_lookup": "0x0002152d", - "sm_authenticated": "0x0002188d", - "sm_authorization_decline": "0x0002189b", - "sm_authorization_grant": "0x000218bb", - "sm_authorization_state": "0x000218db", - "sm_bonding_decline": "0x000218f5", - "sm_config": "0x00021d15", - "sm_config_conn": "0x00021d2d", - "sm_encryption_key_size": "0x00021ee3", - "sm_just_works_confirm": "0x0002241d", - "sm_le_device_key": "0x00022759", - "sm_passkey_input": "0x000227ef", - "sm_private_random_address_generation_get": "0x00022b9d", - "sm_private_random_address_generation_get_mode": "0x00022ba5", - "sm_private_random_address_generation_set_mode": "0x00022bb1", - "sm_private_random_address_generation_set_update_period": "0x00022bd9", - "sm_register_oob_data_callback": "0x00022d15", - "sm_request_pairing": "0x00022d21", - "sm_send_security_request": "0x0002375b", - "sm_set_accepted_stk_generation_methods": "0x00023781", - "sm_set_authentication_requirements": "0x0002378d", - "sm_set_encryption_key_size_range": "0x00023799", - "sscanf_bd_addr": "0x00023b69", - "sysSetPublicDeviceAddr": "0x00023f1d", - "uuid128_to_str": "0x000246bd", - "uuid_add_bluetooth_prefix": "0x00024715", - "uuid_has_bluetooth_prefix": "0x00024735" + "platform_controller_run": "0x00020b35", + "platform_enable_irq": "0x00020b6d", + "platform_get_gen_os_driver": "0x00020ba5", + "platform_get_task_handle": "0x00020bb1", + "platform_get_us_time": "0x00020bc9", + "platform_get_version": "0x00020bcd", + "platform_hrng": "0x00020bd5", + "platform_init_controller": "0x00020bdd", + "platform_os_idle_resumed_hook": "0x00020bf9", + "platform_patch_rf_init_data": "0x00020bfd", + "platform_post_sleep_processing": "0x00020c09", + "platform_pre_sleep_processing": "0x00020c0f", + "platform_pre_suppress_ticks_and_sleep_processing": "0x00020c15", + "platform_printf": "0x00020c19", + "platform_raise_assertion": "0x00020c2d", + "platform_rand": "0x00020c41", + "platform_read_info": "0x00020c45", + "platform_read_persistent_reg": "0x00020c75", + "platform_reset": "0x00020c85", + "platform_set_evt_callback": "0x00020ca9", + "platform_set_evt_callback_table": "0x00020cbd", + "platform_set_irq_callback": "0x00020cc9", + "platform_set_irq_callback_table": "0x00020ce5", + "platform_set_rf_clk_source": "0x00020cf1", + "platform_set_rf_init_data": "0x00020cfd", + "platform_set_rf_power_mapping": "0x00020d09", + "platform_set_timer": "0x00020d15", + "platform_shutdown": "0x00020d19", + "platform_switch_app": "0x00020d1d", + "platform_trace_raw": "0x00020d49", + "platform_write_persistent_reg": "0x00020d61", + "printf_hexdump": "0x00020d71", + "reverse_128": "0x000210e5", + "reverse_24": "0x000210eb", + "reverse_48": "0x000210f1", + "reverse_56": "0x000210f7", + "reverse_64": "0x000210fd", + "reverse_bd_addr": "0x00021103", + "reverse_bytes": "0x00021109", + "sm_add_event_handler": "0x00021409", + "sm_address_resolution_lookup": "0x00021561", + "sm_authenticated": "0x000218c1", + "sm_authorization_decline": "0x000218cf", + "sm_authorization_grant": "0x000218ef", + "sm_authorization_state": "0x0002190f", + "sm_bonding_decline": "0x00021929", + "sm_config": "0x00021d49", + "sm_config_conn": "0x00021d61", + "sm_encryption_key_size": "0x00021f17", + "sm_just_works_confirm": "0x00022451", + "sm_le_device_key": "0x0002278d", + "sm_passkey_input": "0x00022823", + "sm_private_random_address_generation_get": "0x00022bd1", + "sm_private_random_address_generation_get_mode": "0x00022bd9", + "sm_private_random_address_generation_set_mode": "0x00022be5", + "sm_private_random_address_generation_set_update_period": "0x00022c0d", + "sm_register_oob_data_callback": "0x00022d49", + "sm_request_pairing": "0x00022d55", + "sm_send_security_request": "0x0002378f", + "sm_set_accepted_stk_generation_methods": "0x000237b5", + "sm_set_authentication_requirements": "0x000237c1", + "sm_set_encryption_key_size_range": "0x000237cd", + "sscanf_bd_addr": "0x00023b9d", + "sysSetPublicDeviceAddr": "0x00023f51", + "uuid128_to_str": "0x000246f1", + "uuid_add_bluetooth_prefix": "0x00024749", + "uuid_has_bluetooth_prefix": "0x00024769" } \ No newline at end of file diff --git a/bundles/noos_exp/ING9188xx/meta.json b/bundles/noos_exp/ING9188xx/meta.json index d3d6def6a..b386c0d61 100644 --- a/bundles/noos_exp/ING9188xx/meta.json +++ b/bundles/noos_exp/ING9188xx/meta.json @@ -8,11 +8,11 @@ }, "rom": { "base": 16384, - "size": 140404 + "size": 140456 }, "version": [ 1, 9, - 15 + 16 ] } \ No newline at end of file diff --git a/bundles/noos_exp/ING9188xx/platform.bin b/bundles/noos_exp/ING9188xx/platform.bin index 6f595e59486e1356710442320b6371c613238b40..953f90ab9e1b9a4f78be6cc6dc396c10937fa6fc 100644 GIT binary patch delta 7478 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 DceUh) delta 7419 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%0Afcu#R^DNrnkC2b0H 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 DK+en& delta 7514 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 X?4)1WN$Wbsbcyksw4U1jfbRbfoa2 zU3lgbte(OZ2htJHS6XR;MQUYYii5c{xZMGUng8zs^{@GSxZm?z&h|UM<=jjC4=($D zaM>z=*R~TwAfw!JOQHNUiXj)Hgm0C};Hz#^OjJ%{jR}h*jQJ@fqOBp&S|Nn1CIRFK zD_zIA%k+K>UHb#D{M8qB!$e`Z?;LOmvMWo2t?%=Ves%7??Q&bER|FSeZRSh-OhZ1}$!rt>G^*GLt>9sYjQP^QJfv(X$x2@9iV$Y6+I z9=sm>s{9$EPf8s*{vYEfPahc;GbEdkCSQJP%t&8VAVbvnXANKoLEMVCi!X`Upoqa% z6(1S9B;0^}h6BCKdZ5~X+^ov{;~rcH=f^GL{H&!8c^QlNF@GvHEKcg*a9WZ!T&wz}c7`NJX zkgODG?F^Bpx*9WVKfK5o(u|3Q0%NWrD+RlJFjTAUn!jtk+pBW0y9`y`mNABM+jMnq zPM6xZL*Izj_bg#T6)r()cXdgwdIj5ZeeN2Flr=D#+_wU(G5o@p7NzQYwgRZ1-J{P~ z+iNaJeC*3upVs96*?v^R{@HG+8G&udgpBpq8Y3SVw^l0|-iLGJx_j=cG5(F-QS-o; zKN*)cR@zGwb|&S(GPsZ2znB1!zOX>rk7N$U=xR(rgCrW$3^~U9ZgY$s<`-3q-T!~4 z(KYo*t18_&vYp|G2JLEHVN;n2x&Z&~u(yQNEGqoL{SL>BKw4Ev`0n``-2a76X|4c1BR-h97Qnv| zALJ)Zqr>64_cy2Ki1`EYQ$6pXNV3{;>?7wp4AUaj^lGvVtwzQiuoJ&ms3*iIG>_{{rtU@LGT{$udnkw-zMis_LOQp8n%pY)(cR= zo74Pp5q)73e>rs_Oy!5CO@M*?hO~I_LfMO8<{zf5^xR`35giTY7PT(Gx`}^t!ppEg zI6uJ)Tz+nQW+B9bzcH~5UgfV&63{9iPW}*13;yY5P~31nvrHGRPw@vx=UX$1K+fk) z{SNjBv!}%a)7i=IoPN|(&tgR2pH;(<3;d)Rd;iW6p3S()Kp(#Gl@Gx~m^bsj-1~1m zv5Vs zMO|BdzUWNXJc|coeP~|1N+RYinbp0zR5xS2!PUqZQ;jN4E!BW;mvotC@Y2NI(tOf( zkK5k*Bdxr*^jnbe8O!#=>-_J_LcONibW*a&#biYY8^DLWVS℘!U$0b_nO*Zf0OK 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 diff --git a/bundles/noos_extension/ING9188xx/apis.json b/bundles/noos_extension/ING9188xx/apis.json index 5b7d09ccb..0129f988b 100644 --- a/bundles/noos_extension/ING9188xx/apis.json +++ b/bundles/noos_extension/ING9188xx/apis.json @@ -204,71 +204,71 @@ "platform_32k_rc_tune": "0x0001f029", "platform_calibrate_32k": "0x0001f03d", "platform_config": "0x0001f041", - "platform_controller_run": "0x0001f131", - "platform_enable_irq": "0x0001f169", - "platform_get_gen_os_driver": "0x0001f1a1", - "platform_get_task_handle": "0x0001f1ad", - "platform_get_us_time": "0x0001f1c5", - "platform_get_version": "0x0001f1c9", - "platform_hrng": "0x0001f1d1", - "platform_init_controller": "0x0001f1d9", - "platform_os_idle_resumed_hook": "0x0001f1f5", - "platform_patch_rf_init_data": "0x0001f1f9", - "platform_post_sleep_processing": "0x0001f205", - "platform_pre_sleep_processing": "0x0001f20b", - "platform_pre_suppress_ticks_and_sleep_processing": "0x0001f211", - "platform_printf": "0x0001f215", - "platform_raise_assertion": "0x0001f229", - "platform_rand": "0x0001f23d", - "platform_read_info": "0x0001f241", - "platform_read_persistent_reg": "0x0001f271", - "platform_reset": "0x0001f281", - "platform_set_evt_callback": "0x0001f2a5", - "platform_set_evt_callback_table": "0x0001f2b9", - "platform_set_irq_callback": "0x0001f2c5", - "platform_set_irq_callback_table": "0x0001f2e1", - "platform_set_rf_clk_source": "0x0001f2ed", - "platform_set_rf_init_data": "0x0001f2f9", - "platform_set_rf_power_mapping": "0x0001f305", - "platform_set_timer": "0x0001f311", - "platform_shutdown": "0x0001f315", - "platform_switch_app": "0x0001f319", - "platform_trace_raw": "0x0001f345", - "platform_write_persistent_reg": "0x0001f35d", - "printf_hexdump": "0x0001f36d", - "reverse_128": "0x0001f6e1", - "reverse_24": "0x0001f6e7", - "reverse_48": "0x0001f6ed", - "reverse_56": "0x0001f6f3", - "reverse_64": "0x0001f6f9", - "reverse_bd_addr": "0x0001f6ff", - "reverse_bytes": "0x0001f705", - "sm_add_event_handler": "0x0001f9e5", - "sm_address_resolution_lookup": "0x0001fb3d", - "sm_authenticated": "0x0001fe9d", - "sm_authorization_decline": "0x0001feab", - "sm_authorization_grant": "0x0001fecb", - "sm_authorization_state": "0x0001feeb", - "sm_bonding_decline": "0x0001ff05", - "sm_config": "0x00020325", - "sm_config_conn": "0x0002033d", - "sm_encryption_key_size": "0x000204f3", - "sm_just_works_confirm": "0x00020a2d", - "sm_le_device_key": "0x00020d69", - "sm_passkey_input": "0x00020dff", - "sm_private_random_address_generation_get": "0x000211ad", - "sm_private_random_address_generation_get_mode": "0x000211b5", - "sm_private_random_address_generation_set_mode": "0x000211c1", - "sm_private_random_address_generation_set_update_period": "0x000211e9", - "sm_register_oob_data_callback": "0x00021325", - "sm_request_pairing": "0x00021331", - "sm_send_security_request": "0x00021d6b", - "sm_set_accepted_stk_generation_methods": "0x00021d91", - "sm_set_authentication_requirements": "0x00021d9d", - "sm_set_encryption_key_size_range": "0x00021da9", - "sscanf_bd_addr": "0x00022179", - "sysSetPublicDeviceAddr": "0x0002252d", - "uuid128_to_str": "0x00022ca5", - "uuid_add_bluetooth_prefix": "0x00022cfd", - "uuid_has_bluetooth_prefix": "0x00022d1d" + "platform_controller_run": "0x0001f165", + "platform_enable_irq": "0x0001f19d", + "platform_get_gen_os_driver": "0x0001f1d5", + "platform_get_task_handle": "0x0001f1e1", + "platform_get_us_time": "0x0001f1f9", + "platform_get_version": "0x0001f1fd", + "platform_hrng": "0x0001f205", + "platform_init_controller": "0x0001f20d", + "platform_os_idle_resumed_hook": "0x0001f229", + "platform_patch_rf_init_data": "0x0001f22d", + "platform_post_sleep_processing": "0x0001f239", + "platform_pre_sleep_processing": "0x0001f23f", + "platform_pre_suppress_ticks_and_sleep_processing": "0x0001f245", + "platform_printf": "0x0001f249", + "platform_raise_assertion": "0x0001f25d", + "platform_rand": "0x0001f271", + "platform_read_info": "0x0001f275", + "platform_read_persistent_reg": "0x0001f2a5", + "platform_reset": "0x0001f2b5", + "platform_set_evt_callback": "0x0001f2d9", + "platform_set_evt_callback_table": "0x0001f2ed", + "platform_set_irq_callback": "0x0001f2f9", + "platform_set_irq_callback_table": "0x0001f315", + "platform_set_rf_clk_source": "0x0001f321", + "platform_set_rf_init_data": "0x0001f32d", + "platform_set_rf_power_mapping": "0x0001f339", + "platform_set_timer": "0x0001f345", + "platform_shutdown": "0x0001f349", + "platform_switch_app": "0x0001f34d", + "platform_trace_raw": "0x0001f379", + "platform_write_persistent_reg": "0x0001f391", + "printf_hexdump": "0x0001f3a1", + "reverse_128": "0x0001f715", + "reverse_24": "0x0001f71b", + "reverse_48": "0x0001f721", + "reverse_56": "0x0001f727", + "reverse_64": "0x0001f72d", + "reverse_bd_addr": "0x0001f733", + "reverse_bytes": "0x0001f739", + "sm_add_event_handler": "0x0001fa19", + "sm_address_resolution_lookup": "0x0001fb71", + "sm_authenticated": "0x0001fed1", + "sm_authorization_decline": "0x0001fedf", + "sm_authorization_grant": "0x0001feff", + "sm_authorization_state": "0x0001ff1f", + "sm_bonding_decline": "0x0001ff39", + "sm_config": "0x00020359", + "sm_config_conn": "0x00020371", + "sm_encryption_key_size": "0x00020527", + "sm_just_works_confirm": "0x00020a61", + "sm_le_device_key": "0x00020d9d", + "sm_passkey_input": "0x00020e33", + "sm_private_random_address_generation_get": "0x000211e1", + "sm_private_random_address_generation_get_mode": "0x000211e9", + "sm_private_random_address_generation_set_mode": "0x000211f5", + "sm_private_random_address_generation_set_update_period": "0x0002121d", + "sm_register_oob_data_callback": "0x00021359", + "sm_request_pairing": "0x00021365", + "sm_send_security_request": "0x00021d9f", + "sm_set_accepted_stk_generation_methods": "0x00021dc5", + "sm_set_authentication_requirements": "0x00021dd1", + "sm_set_encryption_key_size_range": "0x00021ddd", + "sscanf_bd_addr": "0x000221ad", + "sysSetPublicDeviceAddr": "0x00022561", + "uuid128_to_str": "0x00022cd9", + "uuid_add_bluetooth_prefix": "0x00022d31", + "uuid_has_bluetooth_prefix": "0x00022d51" } \ No newline at end of file diff --git a/bundles/noos_extension/ING9188xx/meta.json b/bundles/noos_extension/ING9188xx/meta.json index 497d2897a..0513bf75e 100644 --- a/bundles/noos_extension/ING9188xx/meta.json +++ b/bundles/noos_extension/ING9188xx/meta.json @@ -8,11 +8,11 @@ }, "rom": { "base": 16384, - "size": 133032 + "size": 133084 }, "version": [ 1, 9, - 15 + 16 ] } \ No newline at end of file diff --git a/bundles/noos_extension/ING9188xx/platform.bin b/bundles/noos_extension/ING9188xx/platform.bin index 52d885c37cd74518f2b26a646755e403c36cf507..a23fb32753ed74e4af2a72397940e8c19abfd1e3 100644 GIT binary patch delta 7276 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 Ty14oF_qCeJ(od9(ACUhC+iRVX delta 7216 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 P;T5I~{%ox$KI{JjjAwhm delta 7187 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 diff --git a/bundles/noos_mass_conn/ING9187xx/apis.json b/bundles/noos_mass_conn/ING9187xx/apis.json index 22cd339fe..5db5b32cf 100644 --- a/bundles/noos_mass_conn/ING9187xx/apis.json +++ b/bundles/noos_mass_conn/ING9187xx/apis.json @@ -167,71 +167,71 @@ "platform_32k_rc_tune": "0x0001ce99", "platform_calibrate_32k": "0x0001cead", "platform_config": "0x0001ceb1", - "platform_controller_run": "0x0001cfa1", - "platform_enable_irq": "0x0001cfd9", - "platform_get_gen_os_driver": "0x0001d011", - "platform_get_task_handle": "0x0001d01d", - "platform_get_us_time": "0x0001d035", - "platform_get_version": "0x0001d039", - "platform_hrng": "0x0001d041", - "platform_init_controller": "0x0001d049", - "platform_os_idle_resumed_hook": "0x0001d065", - "platform_patch_rf_init_data": "0x0001d069", - "platform_post_sleep_processing": "0x0001d075", - "platform_pre_sleep_processing": "0x0001d07b", - "platform_pre_suppress_ticks_and_sleep_processing": "0x0001d081", - "platform_printf": "0x0001d085", - "platform_raise_assertion": "0x0001d099", - "platform_rand": "0x0001d0ad", - "platform_read_info": "0x0001d0b1", - "platform_read_persistent_reg": "0x0001d0e1", - "platform_reset": "0x0001d0f1", - "platform_set_evt_callback": "0x0001d115", - "platform_set_evt_callback_table": "0x0001d129", - "platform_set_irq_callback": "0x0001d135", - "platform_set_irq_callback_table": "0x0001d151", - "platform_set_rf_clk_source": "0x0001d15d", - "platform_set_rf_init_data": "0x0001d169", - "platform_set_rf_power_mapping": "0x0001d175", - "platform_set_timer": "0x0001d181", - "platform_shutdown": "0x0001d185", - "platform_switch_app": "0x0001d189", - "platform_trace_raw": "0x0001d1b5", - "platform_write_persistent_reg": "0x0001d1cd", - "printf_hexdump": "0x0001d1dd", - "reverse_128": "0x0001d519", - "reverse_24": "0x0001d51f", - "reverse_48": "0x0001d525", - "reverse_56": "0x0001d52b", - "reverse_64": "0x0001d531", - "reverse_bd_addr": "0x0001d537", - "reverse_bytes": "0x0001d53d", - "sm_add_event_handler": "0x0001d6a9", - "sm_address_resolution_lookup": "0x0001d801", - "sm_authenticated": "0x0001db61", - "sm_authorization_decline": "0x0001db6f", - "sm_authorization_grant": "0x0001db8f", - "sm_authorization_state": "0x0001dbaf", - "sm_bonding_decline": "0x0001dbc9", - "sm_config": "0x0001dfe9", - "sm_config_conn": "0x0001e001", - "sm_encryption_key_size": "0x0001e1b7", - "sm_just_works_confirm": "0x0001e6f1", - "sm_le_device_key": "0x0001ea2d", - "sm_passkey_input": "0x0001eac3", - "sm_private_random_address_generation_get": "0x0001ee71", - "sm_private_random_address_generation_get_mode": "0x0001ee79", - "sm_private_random_address_generation_set_mode": "0x0001ee85", - "sm_private_random_address_generation_set_update_period": "0x0001eead", - "sm_register_oob_data_callback": "0x0001efe9", - "sm_request_pairing": "0x0001eff5", - "sm_send_security_request": "0x0001fa2f", - "sm_set_accepted_stk_generation_methods": "0x0001fa55", - "sm_set_authentication_requirements": "0x0001fa61", - "sm_set_encryption_key_size_range": "0x0001fa6d", - "sscanf_bd_addr": "0x0001fdc9", - "sysSetPublicDeviceAddr": "0x0002017d", - "uuid128_to_str": "0x00020761", - "uuid_add_bluetooth_prefix": "0x000207b9", - "uuid_has_bluetooth_prefix": "0x000207d9" + "platform_controller_run": "0x0001cfd5", + "platform_enable_irq": "0x0001d00d", + "platform_get_gen_os_driver": "0x0001d045", + "platform_get_task_handle": "0x0001d051", + "platform_get_us_time": "0x0001d069", + "platform_get_version": "0x0001d06d", + "platform_hrng": "0x0001d075", + "platform_init_controller": "0x0001d07d", + "platform_os_idle_resumed_hook": "0x0001d099", + "platform_patch_rf_init_data": "0x0001d09d", + "platform_post_sleep_processing": "0x0001d0a9", + "platform_pre_sleep_processing": "0x0001d0af", + "platform_pre_suppress_ticks_and_sleep_processing": "0x0001d0b5", + "platform_printf": "0x0001d0b9", + "platform_raise_assertion": "0x0001d0cd", + "platform_rand": "0x0001d0e1", + "platform_read_info": "0x0001d0e5", + "platform_read_persistent_reg": "0x0001d115", + "platform_reset": "0x0001d125", + "platform_set_evt_callback": "0x0001d149", + "platform_set_evt_callback_table": "0x0001d15d", + "platform_set_irq_callback": "0x0001d169", + "platform_set_irq_callback_table": "0x0001d185", + "platform_set_rf_clk_source": "0x0001d191", + "platform_set_rf_init_data": "0x0001d19d", + "platform_set_rf_power_mapping": "0x0001d1a9", + "platform_set_timer": "0x0001d1b5", + "platform_shutdown": "0x0001d1b9", + "platform_switch_app": "0x0001d1bd", + "platform_trace_raw": "0x0001d1e9", + "platform_write_persistent_reg": "0x0001d201", + "printf_hexdump": "0x0001d211", + "reverse_128": "0x0001d54d", + "reverse_24": "0x0001d553", + "reverse_48": "0x0001d559", + "reverse_56": "0x0001d55f", + "reverse_64": "0x0001d565", + "reverse_bd_addr": "0x0001d56b", + "reverse_bytes": "0x0001d571", + "sm_add_event_handler": "0x0001d6dd", + "sm_address_resolution_lookup": "0x0001d835", + "sm_authenticated": "0x0001db95", + "sm_authorization_decline": "0x0001dba3", + "sm_authorization_grant": "0x0001dbc3", + "sm_authorization_state": "0x0001dbe3", + "sm_bonding_decline": "0x0001dbfd", + "sm_config": "0x0001e01d", + "sm_config_conn": "0x0001e035", + "sm_encryption_key_size": "0x0001e1eb", + "sm_just_works_confirm": "0x0001e725", + "sm_le_device_key": "0x0001ea61", + "sm_passkey_input": "0x0001eaf7", + "sm_private_random_address_generation_get": "0x0001eea5", + "sm_private_random_address_generation_get_mode": "0x0001eead", + "sm_private_random_address_generation_set_mode": "0x0001eeb9", + "sm_private_random_address_generation_set_update_period": "0x0001eee1", + "sm_register_oob_data_callback": "0x0001f01d", + "sm_request_pairing": "0x0001f029", + "sm_send_security_request": "0x0001fa63", + "sm_set_accepted_stk_generation_methods": "0x0001fa89", + "sm_set_authentication_requirements": "0x0001fa95", + "sm_set_encryption_key_size_range": "0x0001faa1", + "sscanf_bd_addr": "0x0001fdfd", + "sysSetPublicDeviceAddr": "0x000201b1", + "uuid128_to_str": "0x00020795", + "uuid_add_bluetooth_prefix": "0x000207ed", + "uuid_has_bluetooth_prefix": "0x0002080d" } \ 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 36ab6a6cf..be2ea7422 100644 --- a/bundles/noos_mass_conn/ING9187xx/meta.json +++ b/bundles/noos_mass_conn/ING9187xx/meta.json @@ -8,11 +8,11 @@ }, "rom": { "base": 16384, - "size": 122960 + "size": 123016 }, "version": [ 1, 9, - 15 + 16 ] } \ 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 28109f9fb1a1fb51ed358563f784645fbe2a9901..ddf9f8141e1ab7c9415973f13b6c77f7b003ae83 100644 GIT binary patch delta 6678 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 YbdaA;_Ov-nH(clU^cl*wLoAU02TaD#Z~y=R delta 6668 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 C@x~7T diff --git a/bundles/noos_mass_conn/ING9188xx/apis.json b/bundles/noos_mass_conn/ING9188xx/apis.json index 9b1910474..1418a3206 100644 --- a/bundles/noos_mass_conn/ING9188xx/apis.json +++ b/bundles/noos_mass_conn/ING9188xx/apis.json @@ -181,71 +181,71 @@ "platform_32k_rc_tune": "0x0001e16d", "platform_calibrate_32k": "0x0001e181", "platform_config": "0x0001e185", - "platform_controller_run": "0x0001e275", - "platform_enable_irq": "0x0001e2ad", - "platform_get_gen_os_driver": "0x0001e2e5", - "platform_get_task_handle": "0x0001e2f1", - "platform_get_us_time": "0x0001e309", - "platform_get_version": "0x0001e30d", - "platform_hrng": "0x0001e315", - "platform_init_controller": "0x0001e31d", - "platform_os_idle_resumed_hook": "0x0001e339", - "platform_patch_rf_init_data": "0x0001e33d", - "platform_post_sleep_processing": "0x0001e349", - "platform_pre_sleep_processing": "0x0001e34f", - "platform_pre_suppress_ticks_and_sleep_processing": "0x0001e355", - "platform_printf": "0x0001e359", - "platform_raise_assertion": "0x0001e36d", - "platform_rand": "0x0001e381", - "platform_read_info": "0x0001e385", - "platform_read_persistent_reg": "0x0001e3b5", - "platform_reset": "0x0001e3c5", - "platform_set_evt_callback": "0x0001e3e9", - "platform_set_evt_callback_table": "0x0001e3fd", - "platform_set_irq_callback": "0x0001e409", - "platform_set_irq_callback_table": "0x0001e425", - "platform_set_rf_clk_source": "0x0001e431", - "platform_set_rf_init_data": "0x0001e43d", - "platform_set_rf_power_mapping": "0x0001e449", - "platform_set_timer": "0x0001e455", - "platform_shutdown": "0x0001e459", - "platform_switch_app": "0x0001e45d", - "platform_trace_raw": "0x0001e489", - "platform_write_persistent_reg": "0x0001e4a1", - "printf_hexdump": "0x0001e4b1", - "reverse_128": "0x0001e825", - "reverse_24": "0x0001e82b", - "reverse_48": "0x0001e831", - "reverse_56": "0x0001e837", - "reverse_64": "0x0001e83d", - "reverse_bd_addr": "0x0001e843", - "reverse_bytes": "0x0001e849", - "sm_add_event_handler": "0x0001eb09", - "sm_address_resolution_lookup": "0x0001ec61", - "sm_authenticated": "0x0001efc1", - "sm_authorization_decline": "0x0001efcf", - "sm_authorization_grant": "0x0001efef", - "sm_authorization_state": "0x0001f00f", - "sm_bonding_decline": "0x0001f029", - "sm_config": "0x0001f449", - "sm_config_conn": "0x0001f461", - "sm_encryption_key_size": "0x0001f617", - "sm_just_works_confirm": "0x0001fb51", - "sm_le_device_key": "0x0001fe8d", - "sm_passkey_input": "0x0001ff23", - "sm_private_random_address_generation_get": "0x000202d1", - "sm_private_random_address_generation_get_mode": "0x000202d9", - "sm_private_random_address_generation_set_mode": "0x000202e5", - "sm_private_random_address_generation_set_update_period": "0x0002030d", - "sm_register_oob_data_callback": "0x00020449", - "sm_request_pairing": "0x00020455", - "sm_send_security_request": "0x00020e8f", - "sm_set_accepted_stk_generation_methods": "0x00020eb5", - "sm_set_authentication_requirements": "0x00020ec1", - "sm_set_encryption_key_size_range": "0x00020ecd", - "sscanf_bd_addr": "0x00021229", - "sysSetPublicDeviceAddr": "0x000215dd", - "uuid128_to_str": "0x00021d55", - "uuid_add_bluetooth_prefix": "0x00021dad", - "uuid_has_bluetooth_prefix": "0x00021dcd" + "platform_controller_run": "0x0001e2a9", + "platform_enable_irq": "0x0001e2e1", + "platform_get_gen_os_driver": "0x0001e319", + "platform_get_task_handle": "0x0001e325", + "platform_get_us_time": "0x0001e33d", + "platform_get_version": "0x0001e341", + "platform_hrng": "0x0001e349", + "platform_init_controller": "0x0001e351", + "platform_os_idle_resumed_hook": "0x0001e36d", + "platform_patch_rf_init_data": "0x0001e371", + "platform_post_sleep_processing": "0x0001e37d", + "platform_pre_sleep_processing": "0x0001e383", + "platform_pre_suppress_ticks_and_sleep_processing": "0x0001e389", + "platform_printf": "0x0001e38d", + "platform_raise_assertion": "0x0001e3a1", + "platform_rand": "0x0001e3b5", + "platform_read_info": "0x0001e3b9", + "platform_read_persistent_reg": "0x0001e3e9", + "platform_reset": "0x0001e3f9", + "platform_set_evt_callback": "0x0001e41d", + "platform_set_evt_callback_table": "0x0001e431", + "platform_set_irq_callback": "0x0001e43d", + "platform_set_irq_callback_table": "0x0001e459", + "platform_set_rf_clk_source": "0x0001e465", + "platform_set_rf_init_data": "0x0001e471", + "platform_set_rf_power_mapping": "0x0001e47d", + "platform_set_timer": "0x0001e489", + "platform_shutdown": "0x0001e48d", + "platform_switch_app": "0x0001e491", + "platform_trace_raw": "0x0001e4bd", + "platform_write_persistent_reg": "0x0001e4d5", + "printf_hexdump": "0x0001e4e5", + "reverse_128": "0x0001e859", + "reverse_24": "0x0001e85f", + "reverse_48": "0x0001e865", + "reverse_56": "0x0001e86b", + "reverse_64": "0x0001e871", + "reverse_bd_addr": "0x0001e877", + "reverse_bytes": "0x0001e87d", + "sm_add_event_handler": "0x0001eb3d", + "sm_address_resolution_lookup": "0x0001ec95", + "sm_authenticated": "0x0001eff5", + "sm_authorization_decline": "0x0001f003", + "sm_authorization_grant": "0x0001f023", + "sm_authorization_state": "0x0001f043", + "sm_bonding_decline": "0x0001f05d", + "sm_config": "0x0001f47d", + "sm_config_conn": "0x0001f495", + "sm_encryption_key_size": "0x0001f64b", + "sm_just_works_confirm": "0x0001fb85", + "sm_le_device_key": "0x0001fec1", + "sm_passkey_input": "0x0001ff57", + "sm_private_random_address_generation_get": "0x00020305", + "sm_private_random_address_generation_get_mode": "0x0002030d", + "sm_private_random_address_generation_set_mode": "0x00020319", + "sm_private_random_address_generation_set_update_period": "0x00020341", + "sm_register_oob_data_callback": "0x0002047d", + "sm_request_pairing": "0x00020489", + "sm_send_security_request": "0x00020ec3", + "sm_set_accepted_stk_generation_methods": "0x00020ee9", + "sm_set_authentication_requirements": "0x00020ef5", + "sm_set_encryption_key_size_range": "0x00020f01", + "sscanf_bd_addr": "0x0002125d", + "sysSetPublicDeviceAddr": "0x00021611", + "uuid128_to_str": "0x00021d89", + "uuid_add_bluetooth_prefix": "0x00021de1", + "uuid_has_bluetooth_prefix": "0x00021e01" } \ 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 6c612f2ff..55d6bcdfb 100644 --- a/bundles/noos_mass_conn/ING9188xx/meta.json +++ b/bundles/noos_mass_conn/ING9188xx/meta.json @@ -8,11 +8,11 @@ }, "rom": { "base": 16384, - "size": 129036 + "size": 129088 }, "version": [ 1, 9, - 15 + 16 ] } \ 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 e5a8f740ddba4226b50c11be9c094c4d6a019a96..10d2ba4bf04f3e0cfb9d3160e214a7a7c438fe64 100644 GIT binary patch delta 6980 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 DJ^3Ry delta 6969 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 Q1*!%~2Cj8Q7r+Vs9|)mc7ytkO delta 7245 zcmY*e30zah*1u=6kbr0+vP-#P(V$YHNX5Fbgi8QX6mjQ?RiCJ}V$}*R6`r=jvo7`4 zj=pM@uAsFQA}>ZvE4F>LE-h$%)z4a4M8Ks6m);u^lJ8u!eQkcfJO4Rn&dfb?X3mo2 zc%y1xqiUxc`s{+|iTycK0#p(h#y892u=SOPDk6-87)+z&c}m{|w_<`ai!Df6qAw^* zWAygMVB628!=9@FvUy#f9gxFU_et~LZD)q9Y}g|*45O4^ZmtRQRI#BprKz8H3cx@3 zoW6@;xXIeLu0QE8@N0Fi!H2wEH(vR+fef)99I^aW6w?nlQ0d~MPVpQ`|ksdPj-z!cNDcy9tnOjkz+0zAV% zOh|(lO`}JR2OoX+CQfmuj5%s2ns~dO3ABZpw!N^9z_+f4q!MCGNq-@ATI$59 zFGR*XSHv(He*d`9zE=hl(uB_`d>Zh{$ESe5H*S-H!Co1^di>JCF?vD>2S%AqQx}8W z!rHQTbn^1(fTwzx zET{+eeK=1JdS@N7EWq{uN55~G!*>~c`CpQip)W~0?3LPX(c>(+v2-m&$r_2S^pzl+ zA1_N;oEz|Tx0$%|gr^os#lBH`WAEH?mOYY8Z$H5@3G6l^uBU@GoNP&hqw7sL#9Hq!co4_;N#tE543@5zGR^;L$G!Xj{Uyd z;^Pcs;6qYpqgxfH=D-O4LaM)3n)ADaH%biTAE(ZR0emhuKPo~Rvlt%i4EtRdVmt69 z!|eQ%cEtA1mk0S~&L2+kc5bCYx?viAMcV9My^iyZX`PG8>N_9t#Ea>c>?XX$?0jz6(OkUbSQ=A$MyjccHlVJi8q^k83U6B?8w zxcO2s>B-gMbs0I{>v05(#P%)9e#n<*_`{q0-i&bA$6GVTLn7ak5e%R5ftiy7zwRd7 zZv#D#nrcRIENAVorMU$A7yh=h{HDxK*uXEF5Du~YTN7fn3Ne<`bByghH=ty&jo~j% zNQVo2NLDI*%+Jpni7URF6*$~qtk?#Jm|ZM4e|y+=m*DBD*v4{RVZpZd?b>!0SD4jZ zSEJjpWFX7=+y2hCX3dB1`Lu~C;Ky&B7z!6!|PhJW(Qr^dr_zH4d-e|qY(((9*2;Z}lkqe!R&ml$B0 zl{*W7^0m{VVJqJ{tr$}Hyy^3_0Vg9^worYv*Wi=2XTR=!RAlsyMr(&AG03)$7iQ@bC&{WlX4MP4)apHO3Zcdiu_m)wurV@!GTFnk;MH7`;kx_Hg}i?H3) zI)43u+CcMqA8a4@_H#F+^u{zv#iQc1r=g%~ zg9)nnyw_I1ApVEfLi_oNiIR(#GR!bc3Y++z*ILQFNK?zkALTI7WZv9KAcn8lG9AvC z>|4_1aDz{IGdHjUZSm4`^XC<^(d^1q^HwcnBUfXI!OSsLzv+-cqUp%aI5nj5&3h+7 zzA5%!#RR7DhxbunO)2|V5N)nYk@dP5K^Cxv6tSJMq=|;W1A0(Ns zHcs*agDL9zVFIH}mv3Ar;K7?(w!m4_=+^x*Fq^L4+UDuIUIfl6%9+w+`4y{O$;5J6 z+bgDZT~>e_rcn?TfInWFC60eNz z{KDO0B_==>ZIF;PNB}YZjob~W&=qv`C zjFfH&V?AxpJ3Y9LVg~7hOG-ENK~A(Y!JsrGPx5an_XxQByR0~ zu5$c?V+-nwOUk6>s+XL4=%Fd!;Atx`e>oeD04y{w%Y!2_*kcZ!2Y6pPsr5zh54`SH z8jgu&Oi2h6R#Kzopec-f=XtfQ(R}Yk$Wy^T&6!I<3-F;i?R&Mj7Yu9l7DECOHi z!kzHY3xdrv_rU=#?G!P=!h}U}swP!>45zSVP<15)gM~&`LM(*S=@NL-@=6$vSH)5Z za{-Rgz(Y_xP~pzEFqlESjHeT_#nYit`6XqZP0Dn+O?1)E4uK!8^35R_FI_z4VVDB% zn`a&d8G(~D?+DaEG7bC;qG6~x?K7As1B1D$8jl|usLli{;5{>Mf^a2n*ld9i?b7b( zbZM_`_F?IO*i73jure^m&Fr};4C&DtnW7SO995X6LV?3q>53D0xl8Eo6AEx}U9Fhz9icMz>}IW;Hq!~qV5k!74lF$jZn z1$#$0e>*JE!bU*?zS+{byrZ?!S-V}6NdhUO9yv%2%%13Zwt@T`)4tFlVIs%bB2tigIt%@0LT}mCr;hQs7!%&M?j=U0OB4nf4%NO5%gk zB#8=fO6>!B?HtU5<#gbZ&){8ZSVh|9IChgCX_KwK}nnMt)Rr z5R>NIo5D}@hYRqz`n_(pM9;MfC+U{&AvUn(c|rzaEeVxw;U_nQFW~^cHns{^&5hqf z3h0iUP}SCNW8T`d?H}dIzsW$wwh5wBWi2g-umJ4ur|}Kwy%Xu81{gXt!4YcxvpmsC z^2bqLRSPfSDm%!I((?YuOQO~WDEEmyZbNfKciPfCxHpcDGu{C8sFP>h|v(Fh~F zrZ}OdV)Ib6Q4{^95hFtgjl2jO#~yNfH5G7e!l&-iwH3*VMkU4nK z{#QJ!91$4rhBsf)7Z~#^%T%QbW1BFOHeZCX>i5y;+00$xeLDCO?1dIue+kB7HgR8q zRCt4?{s{5u4Lzkbk>b~(5eHpDMt4+ML0M8_Rf!I%l}IRw#_X88!eYAjGKRvFwDvOS)QK)R z7t6H>pO|l4#@q$Z)4-n~7md68CrE-QTKy9Y_WG|CI89gqioHf#e*!Cn(uymX1`V|5 z3g)t{^t-FD6dfV{|DZF_qbH2(gIBOk*wQ@&b(I{VudYofp(C$BNbnSgs@IBB9ccyO z+z^gI(c@{-R-UKJuR$POq~+Hzt<0f^uR%Og&DZdSE9rrsF-3*Zr0bAE7zcghI_y&a zyE|%K-oaL(hU$KS)#^3fx^?4_MB!f`NAW|?ZQ&g%`~vqv@7WnW(=aDSgD#nXSFfZ< zRqb2BH2GBopnN@*HDO9=rWH-#6P+t6bt>Z>VZVqD0v<+VzO(}scUw?euHel%Sm(_o zIf1ND5K={(n=rV?(V5M#Bk+4szhrX?G%##}74VU2Mg=;46NMJcGlytw3(O3?>ySU* zS)^)`SKbj?9Gb8s&NHS(m|+*IB~CM~YJn*4G8f_A78A8IQN0{`qXi;E4m%W_BvIv% z?Yz*AgAikp9ZKRD3?G}Qt`&U1pT@UBT)%6gCQRPd0*Wpp(;^(BYg+MSDXnhBqTnp; zYK2f(M71};7hLASHvucP#dJj*ESHSk28&@o&Af#!ew%K*1w&z(`S2|%gVdX49e6yx zvwM_AW|(}HqM=Rj>5;-`n{c1Tc0#Z^ z=!70T+zYp{x=N$DcOWZpjw^o&6Mi~lF{g>~X>tjhMMifDoyJA$?m(zdK=-fh$Bc%U zn}XX8+`kXD2}GZ!Ukl+cgfKdnFxHX4-4tGRG_5N!vBgCuLsJ<#$8Dk2<$*qZQ~1D6xKTyh z@mF)!CN_S`yV zk6>;K9Q_uh0#`crh%)>+WsgW=_K3jZpk^$pc7keug>qO;-~AN=)r!YJw4Q{-Q|qrV zT0Ij<=>ir~xQ~@p72SOwtCD8=)qV7;a%#ViM|+e;+F&%a(s?$lDjMnQHq3q}x+~f} znicFeF@RxT+a?Aw%scRozKnz`4@sH^&`UOm^-r|RA8#&XbRHPF%iT&&u1mn)W*Xdu zv3VKI>VizDrF**|4QuJ`O>H`fN^{JpS|+j&N4TM! zrfB*=r=Ui&BosLXg`2L$Z&P5T^&&J+D(ZF$?}!ICf`5?*)Gs}2gdZXROZBQLNC%yPIwpg(a;{q z^8MDOG&YC>WEvaDq0ueWyPJe_w6q74R3Qy^!6q0(54a$3qR!_9fH?!s&s<^ zo~4;?&_!29lHMB|TC2*Ca~@~6b$Bq%LVvsLZN&uGDGy&zAUmYSq<1ha)Ow8Wbz>M4 zsKt%B>=eC>RLE6vo2bs;CVD1@b8?(Agj-PH)jPpuJ-=H^QU_Lw;hYjjuwcqxP%wmh zvYZRg@@C}jS4aeu?WRPRcIBxig|)t1Urx?B1z$(vGbJ^zC#x>9n5o*uCzU3H_1Nl@ z`8)K6{4Im9-Yu-{!_{w7a23gLrB$ff?Iz>BkM+u8jft|!G!w`&h^H1HkwYhl$CBaV zEB|)2$8pKrC{AVU6r8Su!JBK22X3ihhBY_JGSazhu2Z;1(FewRHJ(gol5U^UvuZ?uIjJyl6R4XUdQ^&dc9wkQUW;Wno4o!G7C5052y5;FN1h+d3JwnQ5jIKpE zWbMICYHIu77!!hLDXOZm+_wTg3!(s5bMSO{QqML z-g+Zq4kC*<6)^@e7tw$?4RH+Obi|hsr7Cy;;>@S?EX18i&qkbsI0tb8VjkjDL~vp` zju?k@0^$fnJ>n#m31&89XB{%~5knEB55WnA23k0f_|jG-iHwro8X`w+IQ+%G&l92b zh(@Fp1D@~|EWVY-dXUhK*~spXq=Y_*QxOLs&O!7=l$P;(ivEcCNCzNFpFoyj79bsj z_!43;q9o5EO6!Cn79z$Vu0o7Ols5GoViD5uEVHrq#m^(71Q{a{cOoV{#ZicowZ|at zLH^jMI1X_i(&G_7L`+1KxI2Ggol~qavdE1RYmJ$)h3y pQ`L*UBi||d!$K(@?>ZCQGID^A8)SnH_6uhR%7WH<<4NP%{|{Z#bx8mK diff --git a/bundles/noos_mini/ING9187xx/apis.json b/bundles/noos_mini/ING9187xx/apis.json index 6c6974e33..a95ef3bfc 100644 --- a/bundles/noos_mini/ING9187xx/apis.json +++ b/bundles/noos_mini/ING9187xx/apis.json @@ -167,71 +167,71 @@ "platform_32k_rc_tune": "0x0001cc91", "platform_calibrate_32k": "0x0001cca5", "platform_config": "0x0001cca9", - "platform_controller_run": "0x0001cd99", - "platform_enable_irq": "0x0001cdd1", - "platform_get_gen_os_driver": "0x0001ce09", - "platform_get_task_handle": "0x0001ce15", - "platform_get_us_time": "0x0001ce2d", - "platform_get_version": "0x0001ce31", - "platform_hrng": "0x0001ce39", - "platform_init_controller": "0x0001ce41", - "platform_os_idle_resumed_hook": "0x0001ce5d", - "platform_patch_rf_init_data": "0x0001ce61", - "platform_post_sleep_processing": "0x0001ce6d", - "platform_pre_sleep_processing": "0x0001ce73", - "platform_pre_suppress_ticks_and_sleep_processing": "0x0001ce79", - "platform_printf": "0x0001ce7d", - "platform_raise_assertion": "0x0001ce91", - "platform_rand": "0x0001cea5", - "platform_read_info": "0x0001cea9", - "platform_read_persistent_reg": "0x0001ced9", - "platform_reset": "0x0001cee9", - "platform_set_evt_callback": "0x0001cf0d", - "platform_set_evt_callback_table": "0x0001cf21", - "platform_set_irq_callback": "0x0001cf2d", - "platform_set_irq_callback_table": "0x0001cf49", - "platform_set_rf_clk_source": "0x0001cf55", - "platform_set_rf_init_data": "0x0001cf61", - "platform_set_rf_power_mapping": "0x0001cf6d", - "platform_set_timer": "0x0001cf79", - "platform_shutdown": "0x0001cf7d", - "platform_switch_app": "0x0001cf81", - "platform_trace_raw": "0x0001cfad", - "platform_write_persistent_reg": "0x0001cfc5", - "printf_hexdump": "0x0001cfd5", - "reverse_128": "0x0001d309", - "reverse_24": "0x0001d30f", - "reverse_48": "0x0001d315", - "reverse_56": "0x0001d31b", - "reverse_64": "0x0001d321", - "reverse_bd_addr": "0x0001d327", - "reverse_bytes": "0x0001d32d", - "sm_add_event_handler": "0x0001d499", - "sm_address_resolution_lookup": "0x0001d5f1", - "sm_authenticated": "0x0001d951", - "sm_authorization_decline": "0x0001d95f", - "sm_authorization_grant": "0x0001d97f", - "sm_authorization_state": "0x0001d99f", - "sm_bonding_decline": "0x0001d9b9", - "sm_config": "0x0001ddd9", - "sm_config_conn": "0x0001ddf1", - "sm_encryption_key_size": "0x0001dfa7", - "sm_just_works_confirm": "0x0001e4e1", - "sm_le_device_key": "0x0001e81d", - "sm_passkey_input": "0x0001e8b3", - "sm_private_random_address_generation_get": "0x0001ec61", - "sm_private_random_address_generation_get_mode": "0x0001ec69", - "sm_private_random_address_generation_set_mode": "0x0001ec75", - "sm_private_random_address_generation_set_update_period": "0x0001ec9d", - "sm_register_oob_data_callback": "0x0001edd9", - "sm_request_pairing": "0x0001ede5", - "sm_send_security_request": "0x0001f81f", - "sm_set_accepted_stk_generation_methods": "0x0001f845", - "sm_set_authentication_requirements": "0x0001f851", - "sm_set_encryption_key_size_range": "0x0001f85d", - "sscanf_bd_addr": "0x0001fbb9", - "sysSetPublicDeviceAddr": "0x0001ff6d", - "uuid128_to_str": "0x00020551", - "uuid_add_bluetooth_prefix": "0x000205a9", - "uuid_has_bluetooth_prefix": "0x000205c9" + "platform_controller_run": "0x0001cdcd", + "platform_enable_irq": "0x0001ce05", + "platform_get_gen_os_driver": "0x0001ce3d", + "platform_get_task_handle": "0x0001ce49", + "platform_get_us_time": "0x0001ce61", + "platform_get_version": "0x0001ce65", + "platform_hrng": "0x0001ce6d", + "platform_init_controller": "0x0001ce75", + "platform_os_idle_resumed_hook": "0x0001ce91", + "platform_patch_rf_init_data": "0x0001ce95", + "platform_post_sleep_processing": "0x0001cea1", + "platform_pre_sleep_processing": "0x0001cea7", + "platform_pre_suppress_ticks_and_sleep_processing": "0x0001cead", + "platform_printf": "0x0001ceb1", + "platform_raise_assertion": "0x0001cec5", + "platform_rand": "0x0001ced9", + "platform_read_info": "0x0001cedd", + "platform_read_persistent_reg": "0x0001cf0d", + "platform_reset": "0x0001cf1d", + "platform_set_evt_callback": "0x0001cf41", + "platform_set_evt_callback_table": "0x0001cf55", + "platform_set_irq_callback": "0x0001cf61", + "platform_set_irq_callback_table": "0x0001cf7d", + "platform_set_rf_clk_source": "0x0001cf89", + "platform_set_rf_init_data": "0x0001cf95", + "platform_set_rf_power_mapping": "0x0001cfa1", + "platform_set_timer": "0x0001cfad", + "platform_shutdown": "0x0001cfb1", + "platform_switch_app": "0x0001cfb5", + "platform_trace_raw": "0x0001cfe1", + "platform_write_persistent_reg": "0x0001cff9", + "printf_hexdump": "0x0001d009", + "reverse_128": "0x0001d33d", + "reverse_24": "0x0001d343", + "reverse_48": "0x0001d349", + "reverse_56": "0x0001d34f", + "reverse_64": "0x0001d355", + "reverse_bd_addr": "0x0001d35b", + "reverse_bytes": "0x0001d361", + "sm_add_event_handler": "0x0001d4cd", + "sm_address_resolution_lookup": "0x0001d625", + "sm_authenticated": "0x0001d985", + "sm_authorization_decline": "0x0001d993", + "sm_authorization_grant": "0x0001d9b3", + "sm_authorization_state": "0x0001d9d3", + "sm_bonding_decline": "0x0001d9ed", + "sm_config": "0x0001de0d", + "sm_config_conn": "0x0001de25", + "sm_encryption_key_size": "0x0001dfdb", + "sm_just_works_confirm": "0x0001e515", + "sm_le_device_key": "0x0001e851", + "sm_passkey_input": "0x0001e8e7", + "sm_private_random_address_generation_get": "0x0001ec95", + "sm_private_random_address_generation_get_mode": "0x0001ec9d", + "sm_private_random_address_generation_set_mode": "0x0001eca9", + "sm_private_random_address_generation_set_update_period": "0x0001ecd1", + "sm_register_oob_data_callback": "0x0001ee0d", + "sm_request_pairing": "0x0001ee19", + "sm_send_security_request": "0x0001f853", + "sm_set_accepted_stk_generation_methods": "0x0001f879", + "sm_set_authentication_requirements": "0x0001f885", + "sm_set_encryption_key_size_range": "0x0001f891", + "sscanf_bd_addr": "0x0001fbed", + "sysSetPublicDeviceAddr": "0x0001ffa1", + "uuid128_to_str": "0x00020585", + "uuid_add_bluetooth_prefix": "0x000205dd", + "uuid_has_bluetooth_prefix": "0x000205fd" } \ No newline at end of file diff --git a/bundles/noos_mini/ING9187xx/meta.json b/bundles/noos_mini/ING9187xx/meta.json index 223e49806..fddd3bf42 100644 --- a/bundles/noos_mini/ING9187xx/meta.json +++ b/bundles/noos_mini/ING9187xx/meta.json @@ -8,11 +8,11 @@ }, "rom": { "base": 16384, - "size": 122420 + "size": 122472 }, "version": [ 1, 9, - 15 + 16 ] } \ No newline at end of file diff --git a/bundles/noos_mini/ING9187xx/platform.bin b/bundles/noos_mini/ING9187xx/platform.bin index da511a1fb398c29bb2bd4723ebdd03d9309a60c8..429b23e7eef5f3cb0b216c07ee7dc7db70c593b7 100644 GIT binary patch delta 6684 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 bctX+|6i>JmPwWdf3^xpV;vG8ZM~M9o`rX3v delta 6646 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 G5c3~t5~6be diff --git a/bundles/noos_mini/ING9188xx/apis.json b/bundles/noos_mini/ING9188xx/apis.json index 9e480ae82..57b4dd04b 100644 --- a/bundles/noos_mini/ING9188xx/apis.json +++ b/bundles/noos_mini/ING9188xx/apis.json @@ -181,71 +181,71 @@ "platform_32k_rc_tune": "0x0001df59", "platform_calibrate_32k": "0x0001df6d", "platform_config": "0x0001df71", - "platform_controller_run": "0x0001e061", - "platform_enable_irq": "0x0001e099", - "platform_get_gen_os_driver": "0x0001e0d1", - "platform_get_task_handle": "0x0001e0dd", - "platform_get_us_time": "0x0001e0f5", - "platform_get_version": "0x0001e0f9", - "platform_hrng": "0x0001e101", - "platform_init_controller": "0x0001e109", - "platform_os_idle_resumed_hook": "0x0001e125", - "platform_patch_rf_init_data": "0x0001e129", - "platform_post_sleep_processing": "0x0001e135", - "platform_pre_sleep_processing": "0x0001e13b", - "platform_pre_suppress_ticks_and_sleep_processing": "0x0001e141", - "platform_printf": "0x0001e145", - "platform_raise_assertion": "0x0001e159", - "platform_rand": "0x0001e16d", - "platform_read_info": "0x0001e171", - "platform_read_persistent_reg": "0x0001e1a1", - "platform_reset": "0x0001e1b1", - "platform_set_evt_callback": "0x0001e1d5", - "platform_set_evt_callback_table": "0x0001e1e9", - "platform_set_irq_callback": "0x0001e1f5", - "platform_set_irq_callback_table": "0x0001e211", - "platform_set_rf_clk_source": "0x0001e21d", - "platform_set_rf_init_data": "0x0001e229", - "platform_set_rf_power_mapping": "0x0001e235", - "platform_set_timer": "0x0001e241", - "platform_shutdown": "0x0001e245", - "platform_switch_app": "0x0001e249", - "platform_trace_raw": "0x0001e275", - "platform_write_persistent_reg": "0x0001e28d", - "printf_hexdump": "0x0001e29d", - "reverse_128": "0x0001e609", - "reverse_24": "0x0001e60f", - "reverse_48": "0x0001e615", - "reverse_56": "0x0001e61b", - "reverse_64": "0x0001e621", - "reverse_bd_addr": "0x0001e627", - "reverse_bytes": "0x0001e62d", - "sm_add_event_handler": "0x0001e8ed", - "sm_address_resolution_lookup": "0x0001ea45", - "sm_authenticated": "0x0001eda5", - "sm_authorization_decline": "0x0001edb3", - "sm_authorization_grant": "0x0001edd3", - "sm_authorization_state": "0x0001edf3", - "sm_bonding_decline": "0x0001ee0d", - "sm_config": "0x0001f22d", - "sm_config_conn": "0x0001f245", - "sm_encryption_key_size": "0x0001f3fb", - "sm_just_works_confirm": "0x0001f935", - "sm_le_device_key": "0x0001fc71", - "sm_passkey_input": "0x0001fd07", - "sm_private_random_address_generation_get": "0x000200b5", - "sm_private_random_address_generation_get_mode": "0x000200bd", - "sm_private_random_address_generation_set_mode": "0x000200c9", - "sm_private_random_address_generation_set_update_period": "0x000200f1", - "sm_register_oob_data_callback": "0x0002022d", - "sm_request_pairing": "0x00020239", - "sm_send_security_request": "0x00020c73", - "sm_set_accepted_stk_generation_methods": "0x00020c99", - "sm_set_authentication_requirements": "0x00020ca5", - "sm_set_encryption_key_size_range": "0x00020cb1", - "sscanf_bd_addr": "0x0002100d", - "sysSetPublicDeviceAddr": "0x000213c1", - "uuid128_to_str": "0x00021b39", - "uuid_add_bluetooth_prefix": "0x00021b91", - "uuid_has_bluetooth_prefix": "0x00021bb1" + "platform_controller_run": "0x0001e095", + "platform_enable_irq": "0x0001e0cd", + "platform_get_gen_os_driver": "0x0001e105", + "platform_get_task_handle": "0x0001e111", + "platform_get_us_time": "0x0001e129", + "platform_get_version": "0x0001e12d", + "platform_hrng": "0x0001e135", + "platform_init_controller": "0x0001e13d", + "platform_os_idle_resumed_hook": "0x0001e159", + "platform_patch_rf_init_data": "0x0001e15d", + "platform_post_sleep_processing": "0x0001e169", + "platform_pre_sleep_processing": "0x0001e16f", + "platform_pre_suppress_ticks_and_sleep_processing": "0x0001e175", + "platform_printf": "0x0001e179", + "platform_raise_assertion": "0x0001e18d", + "platform_rand": "0x0001e1a1", + "platform_read_info": "0x0001e1a5", + "platform_read_persistent_reg": "0x0001e1d5", + "platform_reset": "0x0001e1e5", + "platform_set_evt_callback": "0x0001e209", + "platform_set_evt_callback_table": "0x0001e21d", + "platform_set_irq_callback": "0x0001e229", + "platform_set_irq_callback_table": "0x0001e245", + "platform_set_rf_clk_source": "0x0001e251", + "platform_set_rf_init_data": "0x0001e25d", + "platform_set_rf_power_mapping": "0x0001e269", + "platform_set_timer": "0x0001e275", + "platform_shutdown": "0x0001e279", + "platform_switch_app": "0x0001e27d", + "platform_trace_raw": "0x0001e2a9", + "platform_write_persistent_reg": "0x0001e2c1", + "printf_hexdump": "0x0001e2d1", + "reverse_128": "0x0001e63d", + "reverse_24": "0x0001e643", + "reverse_48": "0x0001e649", + "reverse_56": "0x0001e64f", + "reverse_64": "0x0001e655", + "reverse_bd_addr": "0x0001e65b", + "reverse_bytes": "0x0001e661", + "sm_add_event_handler": "0x0001e921", + "sm_address_resolution_lookup": "0x0001ea79", + "sm_authenticated": "0x0001edd9", + "sm_authorization_decline": "0x0001ede7", + "sm_authorization_grant": "0x0001ee07", + "sm_authorization_state": "0x0001ee27", + "sm_bonding_decline": "0x0001ee41", + "sm_config": "0x0001f261", + "sm_config_conn": "0x0001f279", + "sm_encryption_key_size": "0x0001f42f", + "sm_just_works_confirm": "0x0001f969", + "sm_le_device_key": "0x0001fca5", + "sm_passkey_input": "0x0001fd3b", + "sm_private_random_address_generation_get": "0x000200e9", + "sm_private_random_address_generation_get_mode": "0x000200f1", + "sm_private_random_address_generation_set_mode": "0x000200fd", + "sm_private_random_address_generation_set_update_period": "0x00020125", + "sm_register_oob_data_callback": "0x00020261", + "sm_request_pairing": "0x0002026d", + "sm_send_security_request": "0x00020ca7", + "sm_set_accepted_stk_generation_methods": "0x00020ccd", + "sm_set_authentication_requirements": "0x00020cd9", + "sm_set_encryption_key_size_range": "0x00020ce5", + "sscanf_bd_addr": "0x00021041", + "sysSetPublicDeviceAddr": "0x000213f5", + "uuid128_to_str": "0x00021b6d", + "uuid_add_bluetooth_prefix": "0x00021bc5", + "uuid_has_bluetooth_prefix": "0x00021be5" } \ No newline at end of file diff --git a/bundles/noos_mini/ING9188xx/meta.json b/bundles/noos_mini/ING9188xx/meta.json index e3869d683..2ecd125e1 100644 --- a/bundles/noos_mini/ING9188xx/meta.json +++ b/bundles/noos_mini/ING9188xx/meta.json @@ -8,11 +8,11 @@ }, "rom": { "base": 16384, - "size": 128484 + "size": 128536 }, "version": [ 1, 9, - 15 + 16 ] } \ No newline at end of file diff --git a/bundles/noos_mini/ING9188xx/platform.bin b/bundles/noos_mini/ING9188xx/platform.bin index ba14d3e73b479c937ed1125553e7d0d98f443c65..451732c72488de130ccdea03ed8d42f21a6a1085 100644 GIT binary patch delta 6924 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 Xy<+BT6Cr9q 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 diff --git a/bundles/noos_mini/inc/platform_api.h b/bundles/noos_mini/inc/platform_api.h index a7fe8611d..9f599f8c3 100644 --- a/bundles/noos_mini/inc/platform_api.h +++ b/bundles/noos_mini/inc/platform_api.h @@ -406,11 +406,8 @@ typedef enum PLATFORM_CFG_RC32K_EN, // Enable/Disable RC 32k clock. Default: Enable PLATFORM_CFG_OSC32K_EN, // Enable/Disable 32k crystal oscillator. Default: Enable PLATFORM_CFG_32K_CLK, // 32k clock selection. flag is platform_32k_clk_src_t. default: PLATFORM_32K_RC - // Note: When modifying this configuration, both RC32K and OSC32K should be ENABLED. - // For ING918, both clocks must be running: - // * For OSC32K, wait until status of OSC32K is OK; - // * For RC32K, wait 100us after enabled. - // Note: Wait another 100us before disabling the unused clock. + // Note 1: When modifying this configuration, both RC32K and OSC32K should be ENABLED. + // Note 2: Unused clock can be disabled. PLATFORM_CFG_32K_CLK_ACC, // Configure 32k clock accuracy in ppm. PLATFORM_CFG_32K_CALI_PERIOD, // 32K clock auto-calibration period in seconds. Default: 3600 * 2 PLATFORM_CFG_PS_DBG_0, // debugging parameter diff --git a/bundles/noos_typical/ING9168xx/apis.json b/bundles/noos_typical/ING9168xx/apis.json index 3d41d3486..a4e4f587f 100644 --- a/bundles/noos_typical/ING9168xx/apis.json +++ b/bundles/noos_typical/ING9168xx/apis.json @@ -182,71 +182,71 @@ "platform_32k_rc_tune": "0x0201e905", "platform_calibrate_32k": "0x0201e921", "platform_config": "0x0201e925", - "platform_controller_run": "0x0201ea29", - "platform_enable_irq": "0x0201ea61", - "platform_get_gen_os_driver": "0x0201ea95", - "platform_get_task_handle": "0x0201eaa1", - "platform_get_us_time": "0x0201eab9", - "platform_get_version": "0x0201eabd", - "platform_hrng": "0x0201eac5", - "platform_init_controller": "0x0201eacd", - "platform_os_idle_resumed_hook": "0x0201eae9", - "platform_patch_rf_init_data": "0x0201eaed", - "platform_post_sleep_processing": "0x0201eaf9", - "platform_pre_sleep_processing": "0x0201eaff", - "platform_pre_suppress_ticks_and_sleep_processing": "0x0201eb05", - "platform_printf": "0x0201eb09", - "platform_raise_assertion": "0x0201eb1d", - "platform_rand": "0x0201eb31", - "platform_read_info": "0x0201eb35", - "platform_read_persistent_reg": "0x0201eb65", - "platform_reset": "0x0201eb71", - "platform_set_evt_callback": "0x0201eb85", - "platform_set_evt_callback_table": "0x0201eb99", - "platform_set_irq_callback": "0x0201eba5", - "platform_set_irq_callback_table": "0x0201ebc1", - "platform_set_rf_clk_source": "0x0201ebcd", - "platform_set_rf_init_data": "0x0201ebd9", - "platform_set_rf_power_mapping": "0x0201ebe5", - "platform_set_timer": "0x0201ebf1", - "platform_shutdown": "0x0201ebf5", - "platform_switch_app": "0x0201ebf9", - "platform_trace_raw": "0x0201ec11", - "platform_write_persistent_reg": "0x0201ec29", - "printf_hexdump": "0x0201ec3d", - "reverse_128": "0x0201efb1", - "reverse_24": "0x0201efb7", - "reverse_48": "0x0201efbd", - "reverse_56": "0x0201efc3", - "reverse_64": "0x0201efc9", - "reverse_bd_addr": "0x0201efcf", - "reverse_bytes": "0x0201efd5", - "sm_add_event_handler": "0x0201f2f1", - "sm_address_resolution_lookup": "0x0201f449", - "sm_authenticated": "0x0201f7a9", - "sm_authorization_decline": "0x0201f7b7", - "sm_authorization_grant": "0x0201f7d7", - "sm_authorization_state": "0x0201f7f7", - "sm_bonding_decline": "0x0201f811", - "sm_config": "0x0201fc29", - "sm_config_conn": "0x0201fc41", - "sm_encryption_key_size": "0x0201fdf7", - "sm_just_works_confirm": "0x02020331", - "sm_le_device_key": "0x0202066d", - "sm_passkey_input": "0x02020703", - "sm_private_random_address_generation_get": "0x02020ab1", - "sm_private_random_address_generation_get_mode": "0x02020ab9", - "sm_private_random_address_generation_set_mode": "0x02020ac5", - "sm_private_random_address_generation_set_update_period": "0x02020aed", - "sm_register_oob_data_callback": "0x02020c29", - "sm_request_pairing": "0x02020c35", - "sm_send_security_request": "0x02021673", - "sm_set_accepted_stk_generation_methods": "0x02021699", - "sm_set_authentication_requirements": "0x020216a5", - "sm_set_encryption_key_size_range": "0x020216b1", - "sscanf_bd_addr": "0x02021a11", - "sysSetPublicDeviceAddr": "0x02021e7d", - "uuid128_to_str": "0x0202262d", - "uuid_add_bluetooth_prefix": "0x02022685", - "uuid_has_bluetooth_prefix": "0x020226a5" + "platform_controller_run": "0x0201ea45", + "platform_enable_irq": "0x0201ea7d", + "platform_get_gen_os_driver": "0x0201eab1", + "platform_get_task_handle": "0x0201eabd", + "platform_get_us_time": "0x0201ead5", + "platform_get_version": "0x0201ead9", + "platform_hrng": "0x0201eae1", + "platform_init_controller": "0x0201eae9", + "platform_os_idle_resumed_hook": "0x0201eb05", + "platform_patch_rf_init_data": "0x0201eb09", + "platform_post_sleep_processing": "0x0201eb15", + "platform_pre_sleep_processing": "0x0201eb1b", + "platform_pre_suppress_ticks_and_sleep_processing": "0x0201eb21", + "platform_printf": "0x0201eb25", + "platform_raise_assertion": "0x0201eb39", + "platform_rand": "0x0201eb4d", + "platform_read_info": "0x0201eb51", + "platform_read_persistent_reg": "0x0201eb81", + "platform_reset": "0x0201eb8d", + "platform_set_evt_callback": "0x0201eba1", + "platform_set_evt_callback_table": "0x0201ebb5", + "platform_set_irq_callback": "0x0201ebc1", + "platform_set_irq_callback_table": "0x0201ebdd", + "platform_set_rf_clk_source": "0x0201ebe9", + "platform_set_rf_init_data": "0x0201ebf5", + "platform_set_rf_power_mapping": "0x0201ec01", + "platform_set_timer": "0x0201ec0d", + "platform_shutdown": "0x0201ec11", + "platform_switch_app": "0x0201ec15", + "platform_trace_raw": "0x0201ec2d", + "platform_write_persistent_reg": "0x0201ec45", + "printf_hexdump": "0x0201ec59", + "reverse_128": "0x0201efcd", + "reverse_24": "0x0201efd3", + "reverse_48": "0x0201efd9", + "reverse_56": "0x0201efdf", + "reverse_64": "0x0201efe5", + "reverse_bd_addr": "0x0201efeb", + "reverse_bytes": "0x0201eff1", + "sm_add_event_handler": "0x0201f30d", + "sm_address_resolution_lookup": "0x0201f465", + "sm_authenticated": "0x0201f7c5", + "sm_authorization_decline": "0x0201f7d3", + "sm_authorization_grant": "0x0201f7f3", + "sm_authorization_state": "0x0201f813", + "sm_bonding_decline": "0x0201f82d", + "sm_config": "0x0201fc45", + "sm_config_conn": "0x0201fc5d", + "sm_encryption_key_size": "0x0201fe13", + "sm_just_works_confirm": "0x0202034d", + "sm_le_device_key": "0x02020689", + "sm_passkey_input": "0x0202071f", + "sm_private_random_address_generation_get": "0x02020acd", + "sm_private_random_address_generation_get_mode": "0x02020ad5", + "sm_private_random_address_generation_set_mode": "0x02020ae1", + "sm_private_random_address_generation_set_update_period": "0x02020b09", + "sm_register_oob_data_callback": "0x02020c45", + "sm_request_pairing": "0x02020c51", + "sm_send_security_request": "0x0202168f", + "sm_set_accepted_stk_generation_methods": "0x020216b5", + "sm_set_authentication_requirements": "0x020216c1", + "sm_set_encryption_key_size_range": "0x020216cd", + "sscanf_bd_addr": "0x02021a2d", + "sysSetPublicDeviceAddr": "0x02021e99", + "uuid128_to_str": "0x02022649", + "uuid_add_bluetooth_prefix": "0x020226a1", + "uuid_has_bluetooth_prefix": "0x020226c1" } \ No newline at end of file diff --git a/bundles/noos_typical/ING9168xx/meta.json b/bundles/noos_typical/ING9168xx/meta.json index 53adce8ca..45e8365d8 100644 --- a/bundles/noos_typical/ING9168xx/meta.json +++ b/bundles/noos_typical/ING9168xx/meta.json @@ -8,11 +8,11 @@ }, "rom": { "base": 33562624, - "size": 141932 + "size": 141960 }, "version": [ 2, 2, - 12 + 13 ] } \ No newline at end of file diff --git a/bundles/noos_typical/ING9168xx/platform.bin b/bundles/noos_typical/ING9168xx/platform.bin index dd55986bf41a33ccbee20090762e60a29dcf2941..fa0470b0e23923153a172ef3b0139fa2b4e9ad0c 100644 GIT binary patch delta 7205 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 veMLAM9_pLqw7iAbBM7`?rc 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 delta 6832 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 delta 7969 zcmY*e3tUvy*57N-8JOWAgNT5FoB>HDL_tNxC(pwmDkAun#MgDuy5chs4Y+AS<)cot z^D_&-@_s(@28=i&VOrMB(tF{W_tuvWKnT#NLq=zYnPI+l(0jj{-*4~#T5IpKA8W6@ z*4}$cPitFFX%D-=>vfn6&Egbz4aS?V!FLo2#1q^^%)jMA)u!!~mYbd2KDRL^ZB&|M z=L?A&cZ-Di3TmF0-m%3BktV(L{s4*WY%XXdq(D67In)0SjRk3ha6P0&WhAD{YG~%A z7tD4~Uw}76Z|_4;FCOzw3$Rt=Cc9C)X@xRy-GH6b5M4~VxW#rYN5seqCga+rjJJ}*C1x*>+dg@j*n5c7HY3Xn3(ZPCW#oV}1h!yw5MZtdYR9q(N$rhImu+^MAm%fy^Q~D3YCJzsQ92!J~q?ZS-80P<8P}7zZQvQQG^yCcK>8v z6F&@Ks`&i0G}vwac-m(0d)oG*pnh0Rs%=ykXNx2wB)vItMiGS)bHl7M@Gsv&sWCZy zTI%A|`8m@fVkQ(4k|Sm%O!p7Yp>#AR4%0A9?`Ko`fp|ROMRf{N*F{6(rZL-5P6aTk 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 V|MD|*eWLnBdCkaTRT?h({{T&;&`SUS delta 7427 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 #include -#include "eflash.h" +#include "eflash.h" #define ADC_LEFT_SHIFT(v, s) ((v) << (s)) #define ADC_RIGHT_SHIFT(v, s) ((v) >> (s)) #define ADC_MK_MASK(b) ((ADC_LEFT_SHIFT(1, b)) - (1)) @@ -136,6 +136,13 @@ uint16_t ADC_ReadChannelData(const uint8_t channel_id) static SADC_ftCali_t *ftCali; static SADC_adcCal_t ADC_adcCal; +#define DEF_WEAK_FUNC(prototype) __attribute__((weak)) prototype { platform_raise_assertion("missing eflash.c", __LINE__); return 0; } + +DEF_WEAK_FUNC(int flash_prepare_factory_data(void)) +DEF_WEAK_FUNC(const factory_calib_data_t *flash_get_factory_calib_data(void)) +DEF_WEAK_FUNC(const void *flash_get_adc_calib_data(void)) +DEF_WEAK_FUNC(uint32_t read_flash_security(uint32_t addr)) + static void ADC_RegClr(SADC_adcReg reg, uint8_t s, uint32_t b) { ADC_REG_CLR(reg, b, s); @@ -252,9 +259,9 @@ uint16_t ADC_GetEnabledChannels(void) if (ADC_GetInputMode()) { if (ADC_RegRd(SADC_CFG_0, 10, 1)) return 1 << (ADC_RegRd(SADC_CFG_0, 12, 4) >> 1); - else + else return (ADC_RegRd(SADC_CFG_2, 4, 1) << 2) | ADC_RegRd(SADC_CFG_2, 3, 1); - } + } return ADC_RegRd(SADC_CFG_2, 3, 12); } @@ -410,7 +417,7 @@ void ADC_VrefCalibration(void) if (!ftCali) return; ADC_DisableAllChannels(); ADC_ClrFifo(); - ADC_ConvCfg(CONTINUES_MODE, PGA_GAIN_2, 1, ADC_CH_9, 15, 0, + ADC_ConvCfg(CONTINUES_MODE, PGA_GAIN_2, 1, ADC_CH_9, 15, 0, SINGLE_END_MODE, SYSCTRL_GetClk(SYSCTRL_ITEM_APB_ADC) / 63000); ADC_Start(1); while (!ADC_GetIntStatus()); @@ -459,11 +466,11 @@ void ADC_ftInit(void) uint8_t ret = flash_prepare_factory_data(); const factory_calib_data_t *p_factoryCali = flash_get_factory_calib_data(); const uint16_t *p_adcCali = (const uint16_t *)flash_get_adc_calib_data(); - if (ret || !p_factoryCali || !p_adcCali) + if (ret || !p_factoryCali || !p_adcCali) readFlg = 1; ftCali = malloc(sizeof(SADC_ftCali_t)); memset(ftCali, 0, sizeof(SADC_ftCali_t)); - + uint32_t flg; if (readFlg) flg = read_flash_security(0x1170); @@ -615,13 +622,13 @@ void ADC_Calibration(SADC_adcIputMode mode) ADC_RegClr(SADC_CFG_0, 17, 1); } -void ADC_ConvCfg(SADC_adcCtrlMode ctrlMode, +void ADC_ConvCfg(SADC_adcCtrlMode ctrlMode, SADC_adcPgaGain pgaGain, 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) { ADC_SetAdcMode(CONVERSION_MODE); From 26d3c2a278e1563b2cd2951cc2735ed250bfe416 Mon Sep 17 00:00:00 2001 From: yuhang-ingchips <102842796+yuhang-ingchips@users.noreply.github.com> Date: Sat, 15 Apr 2023 14:46:34 +0800 Subject: [PATCH 6/8] ADC bugfix & clean code. ADC bugfix & clean code. --- .../voice_remote_ctrl/src/audio_input_adc.c | 18 +++++++++--------- src/FWlib/peripheral_adc.c | 10 ++++++---- src/FWlib/peripheral_pte.c | 6 +++--- src/FWlib/peripheral_pte.h | 14 +++++++------- src/FWlib/peripheral_sysctrl.c | 2 +- 5 files changed, 26 insertions(+), 24 deletions(-) diff --git a/examples/voice_remote_ctrl/src/audio_input_adc.c b/examples/voice_remote_ctrl/src/audio_input_adc.c index 9401a9d5c..12bcef1f9 100644 --- a/examples/voice_remote_ctrl/src/audio_input_adc.c +++ b/examples/voice_remote_ctrl/src/audio_input_adc.c @@ -56,11 +56,11 @@ void audio_input_stop(void) #elif (INGCHIPS_FAMILY == INGCHIPS_FAMILY_916) #include "pingpong.h" -#define ADC_CHANNEL ADC_CH_0 -#define DMA_CHANNEL 0 -#define ADC_CLK_MHZ 6 -#define LOOP_DELAY(c, s) ((((c) * (1000000)) / (s)) - (21)) - +#define ADC_CHANNEL ADC_CH_0 +#define ADC_CLK_MHZ 6 +#define ADC_CHANNEL_NUM 1 +#define LOOP_DELAY(c, s, ch) ((((c) * (1000000)) / (s)) - (((16) * (ch)) + (5))) +#define DMA_CHANNEL 0 static DMA_PingPong_t PingPong; static uint32_t DMA_cb_isr(void *user_data) @@ -79,16 +79,16 @@ static uint32_t DMA_cb_isr(void *user_data) } void audio_input_setup(void) { - SYSCTRL_ClearClkGateMulti((1 << SYSCTRL_ITEM_APB_DMA)); - SYSCTRL_ClearClkGate(SYSCTRL_ITEM_APB_ADC); SYSCTRL_SetAdcClkDiv(24 / ADC_CLK_MHZ); SYSCTRL_ReleaseBlock(SYSCTRL_ITEM_APB_ADC); ADC_Reset(); ADC_Calibration(DIFFERENTAIL_MODE); - ADC_ConvCfg(CONTINUES_MODE, PGA_GAIN_16, 1, ADC_CHANNEL, 0, 8, - DIFFERENTAIL_MODE, LOOP_DELAY(ADC_CLK_MHZ, SAMPLING_RATE)); + ADC_ftInit(); + ADC_ConvCfg(CONTINUES_MODE, PGA_GAIN_16, 1, ADC_CHANNEL, 0, 8, DIFFERENTAIL_MODE, + LOOP_DELAY(ADC_CLK_MHZ, SAMPLING_RATE, ADC_CHANNEL_NUM)); + SYSCTRL_ClearClkGateMulti((1 << SYSCTRL_ITEM_APB_DMA)); SYSCTRL_SelectUsedDmaItems(1 << 9); DMA_PingPongSetup(&PingPong, SYSCTRL_DMA_ADC, 80, 8); platform_set_irq_callback(PLATFORM_CB_IRQ_DMA, DMA_cb_isr, 0); diff --git a/src/FWlib/peripheral_adc.c b/src/FWlib/peripheral_adc.c index 9657dcb85..8a9ebf669 100644 --- a/src/FWlib/peripheral_adc.c +++ b/src/FWlib/peripheral_adc.c @@ -331,8 +331,8 @@ SADC_adcPgaGain ADC_PgaGainGet(void) void ADC_PgaEnable(uint8_t enable) { ADC_RegClr(SADC_CFG_0, 1, 1); - // if (enable) - ADC_RegWr(SADC_CFG_0, 1, 1); + if (enable) + ADC_RegWr(SADC_CFG_0, 1, 1); } uint8_t ADC_GetPgaStatus(void) @@ -371,7 +371,7 @@ uint16_t ADC_GetData(uint32_t data) { SADC_channelId ch = ADC_GetDataChannel(data); SADC_ftChPara_t *chPara; - if ((ch <= ADC_CH_7) && ftCali->f) { + if ((ch <= ADC_CH_7) && ftCali && ftCali->f) { if (ADC_GetInputMode() && (ch <= ADC_CH_3)) chPara = &(ftCali->chParaDiff[ch]); else @@ -407,6 +407,7 @@ static void ADC_VrefRegister(float VP, float VN) void ADC_VrefCalibration(void) { + if (!SYSCTRL_GetClk(SYSCTRL_ITEM_APB_ADC)) return; if (!ftCali) return; ADC_DisableAllChannels(); ADC_ClrFifo(); @@ -495,6 +496,7 @@ void ADC_ftInit(void) V1_diff = 90000; V2_diff = 230000; } else { + ftCali->f = 0; return; } @@ -627,7 +629,7 @@ void ADC_ConvCfg(SADC_adcCtrlMode ctrlMode, ADC_SetAdcMode(CONVERSION_MODE); ADC_SetAdcCtrlMode(ctrlMode); ADC_PgaGainSet(pgaGain); - ADC_PgaEnable(pgaEnable); + ADC_PgaEnable(1); ADC_SetInputMode(inputMode); ADC_EnableChannel(ch, 1); if (enNum) { diff --git a/src/FWlib/peripheral_pte.c b/src/FWlib/peripheral_pte.c index 6106f7ecf..c737fd80d 100644 --- a/src/FWlib/peripheral_pte.c +++ b/src/FWlib/peripheral_pte.c @@ -34,17 +34,17 @@ void PTE_SetChannelIntMask(SYSCTRL_PTE_CHANNEL_ID ch, uint32_t options) } } -void PTE_IrqProcess(SYSCTRL_PTE_CHANNEL_ID ch) +void PTE_IrqProc(SYSCTRL_PTE_CHANNEL_ID ch) { PTE_SetChannelIntMask(ch, 0); } -void PTE_OutPeripheralContinueProcess(SYSCTRL_PTE_CHANNEL_ID ch) +void PTE_OutPeripheralContinueProc(SYSCTRL_PTE_CHANNEL_ID ch) { PTE_ClearInt(ch); } -void PTE_OutPeripheralEndProcess(SYSCTRL_PTE_CHANNEL_ID ch) +void PTE_OutPeripheralEndProc(SYSCTRL_PTE_CHANNEL_ID ch) { PTE_ClearInt(ch); PTE_DisableChannel(ch); diff --git a/src/FWlib/peripheral_pte.h b/src/FWlib/peripheral_pte.h index 45214887c..5fbbfed44 100644 --- a/src/FWlib/peripheral_pte.h +++ b/src/FWlib/peripheral_pte.h @@ -1,9 +1,9 @@ #ifndef __PERIPHERAL_PTE_H__ #define __PERIPHERAL_PTE_H__ -#ifdef __cplusplus -extern "C" { /* allow C++ to use these headers */ -#endif /* __cplusplus */ +#ifdef __cplusplus +extern "C" { /* allow C++ to use these headers */ +#endif /* __cplusplus */ #include "ingsoc.h" #include "peripheral_sysctrl.h" @@ -78,21 +78,21 @@ typedef enum * * @param[in] ch PTE channel ID */ -void PTE_IrqProcess(SYSCTRL_PTE_CHANNEL_ID ch); +void PTE_IrqProc(SYSCTRL_PTE_CHANNEL_ID ch); /** * @brief Standard process of out peripheral's irq-function with channel continue enabled. * * @param[in] ch PTE channel ID */ -void PTE_OutPeripheralContinueProcess(SYSCTRL_PTE_CHANNEL_ID ch); +void PTE_OutPeripheralContinueProc(SYSCTRL_PTE_CHANNEL_ID ch); /** * @brief Standard process of out peripheral's irq-function with channel disabled. * * @param[in] ch PTE channel ID */ -void PTE_OutPeripheralEndProcess(SYSCTRL_PTE_CHANNEL_ID ch); +void PTE_OutPeripheralEndProc(SYSCTRL_PTE_CHANNEL_ID ch); /** * @brief Close PTE channel @@ -122,7 +122,7 @@ int PTE_ConnectPeripheral(SYSCTRL_PTE_CHANNEL_ID ch, #ifdef __cplusplus } /* allow C++ to use these headers */ -#endif /* __cplusplus */ +#endif /* __cplusplus */ #endif diff --git a/src/FWlib/peripheral_sysctrl.c b/src/FWlib/peripheral_sysctrl.c index 0e07d3018..bfd5be7e1 100644 --- a/src/FWlib/peripheral_sysctrl.c +++ b/src/FWlib/peripheral_sysctrl.c @@ -742,7 +742,7 @@ uint32_t SYSCTRL_GetClk(SYSCTRL_Item item) void SYSCTRL_SetAdcClkDiv(uint8_t denom) { APB_SYSCTRL->CguCfg8 &= ~0x1fff; - APB_SYSCTRL->CguCfg8 |= 0x1000 | (denom & 0x2f); + APB_SYSCTRL->CguCfg8 |= 0x1000 | 0x40 | (denom & 0x2f); } uint32_t SYSCTRL_GetAdcClkDiv(void) From c72eee312ae9df17bbd0e7824c51156e8ddf1071 Mon Sep 17 00:00:00 2001 From: zjli2019 Date: Mon, 17 Apr 2023 16:57:19 +0800 Subject: [PATCH 7/8] fix info about platform_write_persistent_reg --- bundles/exp/inc/platform_api.h | 5 ++++- bundles/extension/inc/platform_api.h | 5 ++++- bundles/mass_conn/inc/platform_api.h | 5 ++++- bundles/mini/inc/platform_api.h | 5 ++++- bundles/noos_exp/inc/platform_api.h | 5 ++++- bundles/noos_extension/inc/platform_api.h | 5 ++++- bundles/noos_mass_conn/inc/platform_api.h | 5 ++++- bundles/noos_mini/inc/platform_api.h | 5 ++++- bundles/noos_typical/inc/platform_api.h | 5 ++++- bundles/typical/inc/platform_api.h | 5 ++++- .../smart_home_hub/nimmodules/bundle/platform_api.nim | 5 ++++- 11 files changed, 44 insertions(+), 11 deletions(-) diff --git a/bundles/exp/inc/platform_api.h b/bundles/exp/inc/platform_api.h index f9e010569..b70f322ce 100644 --- a/bundles/exp/inc/platform_api.h +++ b/bundles/exp/inc/platform_api.h @@ -349,7 +349,10 @@ void platform_switch_app(const uint32_t app_addr); * @brief Write value to the persistent register, of which the value is kept even * in power saving mode. * - * @param[in] value a FOUR bit value + * For ING918: the least FOUR significant bits of `value` are saved; + * For ING916: the least TWO significant bits of `value` are saved. + * + * @param[in] value value **************************************************************************************** */ void platform_write_persistent_reg(const uint8_t value); diff --git a/bundles/extension/inc/platform_api.h b/bundles/extension/inc/platform_api.h index f9e010569..b70f322ce 100644 --- a/bundles/extension/inc/platform_api.h +++ b/bundles/extension/inc/platform_api.h @@ -349,7 +349,10 @@ void platform_switch_app(const uint32_t app_addr); * @brief Write value to the persistent register, of which the value is kept even * in power saving mode. * - * @param[in] value a FOUR bit value + * For ING918: the least FOUR significant bits of `value` are saved; + * For ING916: the least TWO significant bits of `value` are saved. + * + * @param[in] value value **************************************************************************************** */ void platform_write_persistent_reg(const uint8_t value); diff --git a/bundles/mass_conn/inc/platform_api.h b/bundles/mass_conn/inc/platform_api.h index f9e010569..b70f322ce 100644 --- a/bundles/mass_conn/inc/platform_api.h +++ b/bundles/mass_conn/inc/platform_api.h @@ -349,7 +349,10 @@ void platform_switch_app(const uint32_t app_addr); * @brief Write value to the persistent register, of which the value is kept even * in power saving mode. * - * @param[in] value a FOUR bit value + * For ING918: the least FOUR significant bits of `value` are saved; + * For ING916: the least TWO significant bits of `value` are saved. + * + * @param[in] value value **************************************************************************************** */ void platform_write_persistent_reg(const uint8_t value); diff --git a/bundles/mini/inc/platform_api.h b/bundles/mini/inc/platform_api.h index f9e010569..b70f322ce 100644 --- a/bundles/mini/inc/platform_api.h +++ b/bundles/mini/inc/platform_api.h @@ -349,7 +349,10 @@ void platform_switch_app(const uint32_t app_addr); * @brief Write value to the persistent register, of which the value is kept even * in power saving mode. * - * @param[in] value a FOUR bit value + * For ING918: the least FOUR significant bits of `value` are saved; + * For ING916: the least TWO significant bits of `value` are saved. + * + * @param[in] value value **************************************************************************************** */ void platform_write_persistent_reg(const uint8_t value); diff --git a/bundles/noos_exp/inc/platform_api.h b/bundles/noos_exp/inc/platform_api.h index 9f599f8c3..37b7670eb 100644 --- a/bundles/noos_exp/inc/platform_api.h +++ b/bundles/noos_exp/inc/platform_api.h @@ -353,7 +353,10 @@ void platform_switch_app(const uint32_t app_addr); * @brief Write value to the persistent register, of which the value is kept even * in power saving mode. * - * @param[in] value a FOUR bit value + * For ING918: the least FOUR significant bits of `value` are saved; + * For ING916: the least TWO significant bits of `value` are saved. + * + * @param[in] value value **************************************************************************************** */ void platform_write_persistent_reg(const uint8_t value); diff --git a/bundles/noos_extension/inc/platform_api.h b/bundles/noos_extension/inc/platform_api.h index 9f599f8c3..37b7670eb 100644 --- a/bundles/noos_extension/inc/platform_api.h +++ b/bundles/noos_extension/inc/platform_api.h @@ -353,7 +353,10 @@ void platform_switch_app(const uint32_t app_addr); * @brief Write value to the persistent register, of which the value is kept even * in power saving mode. * - * @param[in] value a FOUR bit value + * For ING918: the least FOUR significant bits of `value` are saved; + * For ING916: the least TWO significant bits of `value` are saved. + * + * @param[in] value value **************************************************************************************** */ void platform_write_persistent_reg(const uint8_t value); diff --git a/bundles/noos_mass_conn/inc/platform_api.h b/bundles/noos_mass_conn/inc/platform_api.h index 9f599f8c3..37b7670eb 100644 --- a/bundles/noos_mass_conn/inc/platform_api.h +++ b/bundles/noos_mass_conn/inc/platform_api.h @@ -353,7 +353,10 @@ void platform_switch_app(const uint32_t app_addr); * @brief Write value to the persistent register, of which the value is kept even * in power saving mode. * - * @param[in] value a FOUR bit value + * For ING918: the least FOUR significant bits of `value` are saved; + * For ING916: the least TWO significant bits of `value` are saved. + * + * @param[in] value value **************************************************************************************** */ void platform_write_persistent_reg(const uint8_t value); diff --git a/bundles/noos_mini/inc/platform_api.h b/bundles/noos_mini/inc/platform_api.h index 9f599f8c3..37b7670eb 100644 --- a/bundles/noos_mini/inc/platform_api.h +++ b/bundles/noos_mini/inc/platform_api.h @@ -353,7 +353,10 @@ void platform_switch_app(const uint32_t app_addr); * @brief Write value to the persistent register, of which the value is kept even * in power saving mode. * - * @param[in] value a FOUR bit value + * For ING918: the least FOUR significant bits of `value` are saved; + * For ING916: the least TWO significant bits of `value` are saved. + * + * @param[in] value value **************************************************************************************** */ void platform_write_persistent_reg(const uint8_t value); diff --git a/bundles/noos_typical/inc/platform_api.h b/bundles/noos_typical/inc/platform_api.h index 9f599f8c3..37b7670eb 100644 --- a/bundles/noos_typical/inc/platform_api.h +++ b/bundles/noos_typical/inc/platform_api.h @@ -353,7 +353,10 @@ void platform_switch_app(const uint32_t app_addr); * @brief Write value to the persistent register, of which the value is kept even * in power saving mode. * - * @param[in] value a FOUR bit value + * For ING918: the least FOUR significant bits of `value` are saved; + * For ING916: the least TWO significant bits of `value` are saved. + * + * @param[in] value value **************************************************************************************** */ void platform_write_persistent_reg(const uint8_t value); diff --git a/bundles/typical/inc/platform_api.h b/bundles/typical/inc/platform_api.h index f9e010569..b70f322ce 100644 --- a/bundles/typical/inc/platform_api.h +++ b/bundles/typical/inc/platform_api.h @@ -349,7 +349,10 @@ void platform_switch_app(const uint32_t app_addr); * @brief Write value to the persistent register, of which the value is kept even * in power saving mode. * - * @param[in] value a FOUR bit value + * For ING918: the least FOUR significant bits of `value` are saved; + * For ING916: the least TWO significant bits of `value` are saved. + * + * @param[in] value value **************************************************************************************** */ void platform_write_persistent_reg(const uint8_t value); diff --git a/examples-gcc/smart_home_hub/nimmodules/bundle/platform_api.nim b/examples-gcc/smart_home_hub/nimmodules/bundle/platform_api.nim index ed5784024..1b28e3e3a 100644 --- a/examples-gcc/smart_home_hub/nimmodules/bundle/platform_api.nim +++ b/examples-gcc/smart_home_hub/nimmodules/bundle/platform_api.nim @@ -183,7 +183,10 @@ proc platform_switch_app*(app_addr: uint32) {.importc: "platform_switch_app", ## @brief Write value to the persistent register, of which the value is kept even ## in power saving mode. ## -## @param[in] value a FOUR bit value +## For ING918: the least FOUR significant bits of `value` are saved; +## For ING916: the least TWO significant bits of `value` are saved. +## +## @param[in] value value ## *************************************************************************************** ## From 15770fc3572caffac717c7c9596a9c06b9b33c92 Mon Sep 17 00:00:00 2001 From: zjli2019 Date: Thu, 20 Apr 2023 19:11:07 +0800 Subject: [PATCH 8/8] add explanation; use UART timeout. --- examples/uart_console/src/main.c | 4 ++-- src/FWlib/peripheral_gpio.h | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/uart_console/src/main.c b/examples/uart_console/src/main.c index 1d9048a5c..025fd01fc 100644 --- a/examples/uart_console/src/main.c +++ b/examples/uart_console/src/main.c @@ -54,12 +54,12 @@ void config_uart(uint32_t freq, uint32_t baud) config.UART_en = 1; config.cts_en = 0; config.rts_en = 0; - config.rxfifo_waterlevel = 1; + config.rxfifo_waterlevel = 4; config.txfifo_waterlevel = 1; config.ClockFrequency = freq; config.BaudRate = baud; - apUART_Initialize(PRINT_PORT, &config, 1 << bsUART_RECEIVE_INTENAB); + apUART_Initialize(PRINT_PORT, &config, (1 << bsUART_RECEIVE_INTENAB) | (1 << bsUART_TIMEOUT_INTENAB)); #ifdef TRACE_TO_UART //config.BaudRate = 921600; diff --git a/src/FWlib/peripheral_gpio.h b/src/FWlib/peripheral_gpio.h index b89422eec..5ba5b9c35 100644 --- a/src/FWlib/peripheral_gpio.h +++ b/src/FWlib/peripheral_gpio.h @@ -331,6 +331,8 @@ int GIO_EnableDeepSleepWakeupSource(GIO_Index_t io_index, uint8_t enable, * Once enabled, all GPIOs in Group A that have been configured as INPUT act as wakeup * sources from DEEPER SLEEP mode. * + * `GIO_EnableRetentionGroupA(1)` MUST be called after all related GPIOs are configured. + * * @param[in] enable Enable(1)/disable(0) * @param[in] level wake up by high level(1)/low level(0) */