Index: 277_mouse.dat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/277_mouse.dat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/277_mouse.dat	(working copy)
@@ -0,0 +1,702 @@
+mem_mouse_flag:
+#mouse flag byte1
+#bit0 MOUSE_SELECT_DEVICE_FLAG
+#bit1 MOUSE_24G_PAIRING_FLAG
+#bit2 MOUSE_STORE_EEPROM_FLAG
+#bit3 MOUSE_BT_CANNEL_RECONN_FLAG
+#bit4 MOUSE_LOW_VOLTAGE_FLAG
+#bit5 MOUSE_BT_DISCOVERY_BUTTON_DOWN_FLAG
+#bit6 MOUSE_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG
+#bit7 MOUSE_ENABLE_SPI2
+04
+
+#mouse flag byte2
+#bit0 MOUSE_ENABLE_BLE_RANDOM_ADDRE
+#bit1 MOUSE_ENABLE_2K_EEPROM
+#bit2 MOUSE_ENABLE_WAKEUP_FROM_POWER
+#bit3 MOUSE_ENABLE_16M
+#bit4 MOUSE_ENABLE_USB
+#bit5 MOUSE_ENABLE_24G_SEARCH_DONGLE
+#bit6 MOUSE_ENABLE_LOAD_AND_STORE_DPI
+#bit7 MOUSE_ENABLE_24G
+85
+
+#mouse flag byte3
+#bit0 MOUSE_ENABLE_FLASH
+#bit1 MOUSE_ENABLE_EEPROM
+#bit2 MOUSE_ENABLE_OTP
+#bit3 MOUSE_ENABLE_ADC
+#bit4 MOUSE_ENABLE_KEYBOARD
+#bit5 MOUSE_ENABLE_DOUBLE_DPI_KEY
+#bit6 MOUSE_ENABLE_SWITCH_GPIO_CONNECT_VIN
+5a
+
+#mouse flag byte4
+#bit0 MOUSE_ENABLE_24G_250Hz
+#bit1 MOUSE_ENABLE_24G_500Hz
+#bit2 MOUSE_ENABLE_24G_1000
+#bit3 MOUSE_ENABLE_BT_125Hz
+#bit4 MOUSE_ENABLE_DPI_LEVEL_4
+#bit5 MOUSE_ENABLE_USB_250
+#bit6 MOUSE_ENABLE_USB_500
+#bit7 MOUSE_ENABLE_USB_1000
+01
+
+#mouse flag byte5
+#bit0 MOUSE_ENABLE_1IO2LED
+#bit1 MOUSE_ENABLE_BT_RECONN_LED_EFFECT
+#bit2 MOUSE_ENABLE_LOW_LED_BLINK_LIMIT
+#bit3 MOUSE_ENABLE_LOW_LED
+#bit4 MOUSE_ENABLE_LOW_FOR_LED
+#bit5 MOUSE_ENABLE_DPI_FOR_LED
+02
+
+#mouse flag byte6 
+#bit0 MOUSE_ENABLE_SELECT_DEVICE_BY_DPI_BUTTON
+#bit1 MOUSE_ENABLE_SELECT_DEVICE_BY_PB_BUTTON
+#bit2 MOUSE_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO
+#bit3 MOUSE_ENABLE_DPI_KEY_CONNECT_GND
+#bit4 MOUSE_ENABLE_ANOTHER_DPI_KEY_CONNECT_GND
+#bit5 MOUSE_ENABLE_PB_BUTTON_CONNECT_GND
+#bit6 MOUSE_ENABLE_FIRE_KEY_CONNECT_GND
+#bit7 MOUSE_ENABLE_CUSTOMER_KEY_CONNECT_VIN
+04
+
+#mouse flag byte7
+#bit0 MOUSE_ENABLE_AUTO_24G_PARING
+#bit1 MOUSE_ENABLE_24G_POWER_ON_PAIRING
+#bit2 MOUSE_ENABLE_COMMBINATION_KEY_BY_24G_PAIRING
+#bit3 MOUSE_ENABLE_BT_RECONNECT_TIMEOUT_ENTER_DISCOVERY
+#bit4 MOUSE_ENABLE_PB_BUTTON_SHORT_PRESS_ENTER_DISCOVERY
+#bit5 MOUSE_ENABLE_COMMBINATION_KEY_BY_BT_DISCOVERY
+#bit6 MOUSE_ENABLE_DPI_KEY_LONG_PRESS_DISCONVERY
+#bit7 MOUSE_ENABLE_PB_BUTTON_LONG_PRESS_DISCONVERY
+22
+
+#mouse flag byte8
+#bit0 MOUSE_ENABLE_SMOOTHER
+#bit1 MOUSE_ENABLE_XY_OFFSET
+#bit2 MOUSE_ENABLE_24G_AUTO_PAIR_NERVER_BEEN_PAIRED
+#bit3 MOUSE_ENABLE_LE_BATTERY_SERVICE_CANCEL
+#bit4 MOUSE_ENABLE_WHEEL_WAKE_UP_CANCEL
+#bit5 MOUSE_ENABLE_24G_2M_PHY
+#bit6 MOUSE_ENABLE_24G_FIRST_AUTO_PAIRING
+1f
+
+
+mem_device_switch_gpio:02
+mem_device_reuse_2ice_gpio:05
+mem_sensor_motion_gpio:ff
+mem_whee_a_data_gpio:0b
+mem_whee_b_data_gpio:0a
+
+mem_mouse_param_config:
+0e #mem_lbutton_gpio
+08 #mem_mbutton_gpio
+0f #mem_rbutton_gpio
+ff #mem_bk_button_gpio
+ff #mem_fw_button_gpio
+0e #mem_dpi_button_gpio
+16 #mem_mouse_sensor_sclk_gpio
+17 #mem_mouse_sensor_sdio_gpio
+ff #mem_select_sensor_angle_gpio
+02 #mem_sensor_angle_default
+02 #mem_sensor_angle_gnd
+02 #mem_sensor_angle_vin
+00 #mem_config_sensor_dpi	#power on default dpi 00--1200  01--1600
+ff #mem_whee_ta_data_gpio
+ff #mem_whee_tb_data_gpio
+12 #mem_matrix_public_gpio
+ff#mem_config_select_device_button_gpio
+ff #mem_customer_key_gpio
+ff #mem_firebutton_gpio
+ff #mem_dpi_another_button_gpio
+ff #mem_mouse_logo_led_gpio
+01 #mem_mouse_1io2led_multi_24gled
+00 #mem_mouse_1io2led_multi_bt1led
+ff #mem_mouse_1io2led_multi_bt2led
+03 #mem_mouse_low_voltage_alarm_gpio
+ff #mem_mouse_dpi_gpio
+
+#mouse sensor angle
+#0x00 MOUSE_6CLK_ANGLE
+#0X01 MOUSE_9CLK_ANGLE
+#0X02 MOUSE_12CLK_ANGLE
+#0X03 MOUSE_3CLK_ANGLE
+
+
+#1io2led multi start
+#time parm
+mem_mouse_le_reconn_blink_limit:00		#00:disable 	01:enable
+mem_mouse_multi_led_powon_timer_init:0a	#1s
+mem_mouse_multi_24gled_blink_timer_init:05			#24gled blink time		500ms on,500ms off
+mem_mouse_multi_le_discovery_blink_timer_init:02		#le discovery blink time	500ms on,500ms off
+mem_mouse_multi_le_reconn_blink_timer_init:05			#le reconn blink time		500ms on,500ms off
+mem_mouse_low_led_blink_timer:14				#low blink time			1000ms on,1000ms off
+mem_mouse_dpi_led_blink_timer_init:02			#dpi blink time			200ms on,200ms off
+#blink count=count/2
+mem_mouse_multi_24gled_blink_count_init:02		#24g count
+mem_mouse_multi_le_reconn_blink_count_init:06	#le reconn count
+mem_mouse_multi_lowled_blink_count_init:0a		#low count=count
+mem_mouse_dpi_led_delay_count_init:0a		#1s
+#1io2led multi end
+
+#time parm
+mem_mouse_logo_led_on_time_init:58 02	#1min
+mem_device_24g_pair_timeout_init:58 02  #60s	    24g reconn timer&pair timer
+mem_device_24g_reconn_timeout_init:64 #10s
+mem_device_24g_power_on_fast_conn_timer:05 00	#500ms
+mem_device_direct_timeout:64  #10s
+mem_device_discovery_timeout:b0 04	#2min
+mem_device_fast_direct_timeout:0a #1s
+mem_device_no_data_timeout:70 17   #10mins
+
+#device parm
+mem_device_option:08
+mem_device_number:02   #01:only 2.4g   02:2.4g+ble    03:2.4g+ble+ble
+
+mem_lpm_mode:01
+mem_lpm_mult:20
+mem_lpm_mult_init:20
+
+mem_device_set_analog_bit_set:00 00 00
+
+mem_device_flag:
+00		#00--24g 01--bt
+34
+ff ff ff ff ff ff			#eeprom need
+mem_device2_type:
+34
+ff ff ff ff ff ff			#eeprom need
+mem_device3_type:
+34
+ff ff ff ff ff ff			#eeprom need
+
+mem_mouse_key_information_start:
+03 00 20 20 00
+03 00 22 22 00
+03 00 30 20 00
+
+mem_customer_key_press_init:
+# 05 00 01 00 00 00 00 00 00 00#AC Home
+#05 00 00 02 00 00 00 00 00 00#Volume Down
+#05 00 00 04 00 00 00 00 00 00#Volume Up
+#00 0a 00 72 00 00 00 00 00#copilot=win+shift+f23
+#00 05 00 04 00 00 00 00 00#CTRL+ALT+A
+#02 01 00 00 00 00 00 00 00 #POWERDOWN
+00 08 00 07 00 00 00 00 00#One-click desktop
+#03 ea 00 00 00 00 00 00 00 #VOL DOWN
+
+#bit0:mouse_key_l    bit1:mouse_key_r  bit2:mouse_key_m
+mem_mouse_commbination_key_24g:03
+mem_mouse_commbination_key_bt:07
+mem_mouse_commbination_key_dpi:ff
+mem_mouse_commbination_key_select_device:ff
+mem_mouse_commbination_dpi_timer:1e	#3s
+mem_mouse_commbination_select_device_timer:1e	#3s
+
+mem_store_key_info_delay_timer_init:05
+#ui
+mem_ui_button_timeout:1e
+
+#2.4g
+mem_24g_lap: 24 62 81 a1 51 61
+mem_24g_fast_conn_enable:01
+mem_24g_fast_conn_addr:0f 0f 0f 0f
+mem_24g_long_sleep_set_level:02    #00--30ms   01--50ms  02--80ms  03--100ms
+mem_24g_rx_window:c0 12     #400us  ## e0 2e#1ms #transmitter long range min:520us
+
+mem_mouse_24g_fast_hop_count_2ms:09	#report 500hz
+mem_mouse_24g_tsniff_2ms:c0 5d 00 00
+
+mem_mouse_24g_short_sleep_set_4ms:6a 63 00	#1662us
+mem_mouse_24g_long_sleep_set_4ms:80 bb 00
+mem_mouse_24g_tsniff_4ms:f8 bb 00 00
+
+mem_mouse_24g_short_sleep_set_8ms:1c 1f 01
+mem_mouse_24g_long_sleep_set_8ms:00 77 01
+mem_mouse_24g_tsniff_8ms:00 77 01 00
+
+mem_device_24g_pair_tx_power:94 #-20dBm
+mem_24g_enter_hibernate:00 48 60
+mem_24g_long_sleep_param_update_timer_init:05 00	#500ms
+mem_24g_transmit_by_interrupt_exit_count_init:50 00
+mem_device_24g_search_dongle_time_init:64 00	#10s
+mem_store_information_delay_timer_init:01
+
+mem_mouse_long_mult_count:02
+
+#ble
+mem_le_lap:34 47 29 51 31 41
+mem_le_adv_channel_map:07
+mem_local_rx_max_octets:fb 00 48 08 fb 00 48 08  # 1b
+mem_le_battery_level_updata_timer_init:96 00
+
+mem_le_keyboard_handle:1b 00
+mem_le_notify_handle:1f 00
+mem_le_multimedia_handle:23 00
+mem_le_systemctrl_handle:27 00
+mem_le_pairing_handle:39 00#2d 00
+mem_le_battery_level_handle:13 00#3b 00 #30 00
+
+mem_le_protocol_rx_handle:36 00
+mem_le_protocol_tx_handle:2e 00
+mem_le_audio_tx_handle:32 00
+
+mem_le_adv_data_len:1f
+mem_le_adv_data:
+#flag
+02 01 05 
+#uuid
+03 03 12 18 
+#appearance
+03 19 c2 03
+
+mem_le_adv_swift_pair:
+#microsoft swift pair
+06 ff 06 00 03 00 80	
+#name
+'\09AI Mouse
+
+mem_le_scan_data_len:1f
+mem_le_scan_data:
+#name
+'\09AI Mouse
+
+
+mem_le_name_len:
+'AI Mouse
+
+mem_le_name_patch_len:	#max 18bytes
+'AI Mouse
+
+mem_le_interval_min:
+06 00 #min interval
+09 00 #max interval
+20 00 #latency
+2c 01 #timeout
+
+
+mem_le_adv_ind:03 12 18
+mem_le_adv_direct_ind:ff 00 00
+
+mem_flash_base:00 50 00
+mem_eeprom_base:80 3a
+mem_eeprom_block_size:80
+mem_eeprom_att_list_base:00 34
+
+#zcode
+mem_zcode_current_number:ff
+mem_xip_flash_offset:00 00
+mem_zcode_head:20 20 00 40
+mem_eeprom_start_addr:00 00
+
+#usb
+mem_usb_offline_check_gpio:ff
+
+#rf
+mem_tx_power:01	#00--0db 01--3db  02--5db  03--f3db  04--f5db
+mem_rssi_buff_index:07
+mem_rssi_signal_buf_ptr:mem_mouse_rssi_signal_buf
+mem_rssi_dis_min_24g_init:85
+mem_rssi_dis_max_24g_init:90
+mem_rssi_dis_min_ble_init:75
+mem_rssi_dis_max_ble_init:80
+mem_rssi_hex_received_max_value_init:63
+mem_power_ctrl_pac_succ_cnt_init:7d
+
+#adc config
+mem_adc_reference_mode:01 #01 reference 3v 02:reference 1.8v
+mem_adc_config_flag:02
+#01 ADC_CONFIG_HVIN
+#02 ADC_CONFIG_GPIO
+mem_adc_clkdiv:0a
+mem_adc_channel:09
+#00 ADC_CH_VBAT
+#01 ADC_CH_VDCDC5V
+#06 ADC_CH_GPIO18
+#07 ADC_CH_GPIO10
+#08 ADC_CH_GPIO9
+#09 ADC_CH_GPIO12
+#0a ADC_CH_GPIO6
+#0b ADC_CH_GPIO20
+#0c ADC_CH_GPIO21
+#0d ADC_CH_GPIO22
+#0e ADC_CH_GPIO13
+
+#adc
+mem_device_vdd_full_vol:94 00		#1.5V
+78 00#mem_device_vdd_empty_vol  :0.9V
+80 00#mem_device_vdd_low_vol   :1.0V
+#mem_device_vdd_full_vol:e4 0c		#3.3V
+#b8 0b#mem_device_vdd_empty_vol  :3.0V
+#80 0c#mem_device_vdd_low_vol   :3.2V
+
+mem_adc_channel_gpio:0c
+#04
+#02
+#01
+#03
+#00
+#05
+#06
+#07
+
+# rf debug
+#bit7:0 means disable rf debug function
+#mem_rf_debug_rx_gpio:87
+#mem_rf_debug_tx_gpio:88
+
+mem_power_ctrl_disable:01
+
+##########################g24 addr #################################
+mem_24g_pair_addr_new:25 20 15 10
+mem_24g_ch_map_update:01   #00--disable   01--enable
+mem_24g_ch_update_map1:06 1a 3a 4d
+mem_24g_ch_update_map2:00 13 23 4c
+mem_24g_ch_update_map3:0f 2c 31 43 
+mem_24g_ch_update_map4:11 15 36 48
+
+##########################UART INIT#################################
+#mem_app_uart_tx_gpio:07
+#mem_app_uart_rx_gpio:ff
+#mem_app_uart_baud_rate:10 00	#d0=115200 10=1500000
+#mem_app_uart_tx_buff_sptr:mem_app_uart_tx_buff_start
+#mem_app_uart_tx_buff_eptr:mem_app_uart_tx_buff_end
+#mem_app_uart_rx_buff_sptr:mem_app_uart_rx_buff_start
+#mem_app_uart_rx_buff_eptr:mem_app_uart_rx_buff_end
+
+
+###########################auth data#######################
+mem_ms_auth_appkey:01 75 38 42 73 58 98
+mem_ms_auth_secret:
+1d a3 f4 a9 f4 fc 5a a6
+38 15 91 9c 51 65 e6 9e 
+
+#msm_ms_auth_sn:11 22 33 44 55 66
+#mem_ms_auth_chip_id:00 01
+mem_ms_version:01
+
+mem_mouse_device_type:
+'YC-AI-Mouse
+
+###########################audio demo#######################
+mem_ms_le_interval_min_voice:
+06 00 #min interval
+06 00 #max interval
+2b 00 #latency
+90 01 #timeout
+
+mem_ms_le_interval_min_new:
+06 00 #min interval
+09 00 #max interval
+20 00 #latency
+2c 01 #timeout
+
+mem_ms_audio_key_gpio:ff
+mem_ms_one_pullup_key_gpio:0f
+mem_ms_transmit_key_gpio:ff
+
+mem_adc_dma_enable:00
+
+#mem_queue_ptr:mem_g_queue_each_size
+#mem_g_queue_each_size:01 20
+
+mem_adc_audio_saddr_ptr:mem_voice_raw_start
+mem_adc_audio_eaddr_ptr:mem_voice_raw_end
+
+mem_ad_indexTable1:ff ff ff ff 02 04 06 08 ff ff ff ff 02 04 06 08
+
+mem_ad_stepsizeTable1:
+07 00 00 00
+08 00 00 00
+09 00 00 00
+0a 00 00 00
+0b 00 00 00
+0c 00 00 00
+0d 00 00 00
+0e 00 00 00
+10 00 00 00
+11 00 00 00
+13 00 00 00
+15 00 00 00
+17 00 00 00
+19 00 00 00
+1c 00 00 00
+1f 00 00 00
+22 00 00 00
+25 00 00 00
+29 00 00 00
+2d 00 00 00
+32 00 00 00
+37 00 00 00
+3c 00 00 00
+42 00 00 00
+49 00 00 00
+50 00 00 00
+58 00 00 00
+61 00 00 00
+6b 00 00 00
+76 00 00 00
+82 00 00 00
+8f 00 00 00
+9d 00 00 00
+ad 00 00 00
+be 00 00 00
+d1 00 00 00
+e6 00 00 00
+fd 00 00 00
+17 01 00 00
+33 01 00 00
+51 01 00 00
+73 01 00 00
+98 01 00 00
+c1 01 00 00
+ee 01 00 00
+20 02 00 00
+56 02 00 00
+92 02 00 00
+d4 02 00 00
+1c 03 00 00
+6c 03 00 00
+c3 03 00 00
+24 04 00 00
+8e 04 00 00
+02 05 00 00
+83 05 00 00
+10 06 00 00
+ab 06 00 00
+56 07 00 00
+12 08 00 00
+e0 08 00 00
+c3 09 00 00
+bd 0a 00 00
+d0 0b 00 00
+ff 0c 00 00
+4c 0e 00 00
+ba 0f 00 00
+4c 11 00 00
+07 13 00 00
+ee 14 00 00
+06 17 00 00
+54 19 00 00
+dc 1b 00 00
+a5 1e 00 00
+b6 21 00 00
+15 25 00 00
+ca 28 00 00
+df 2c 00 00
+5b 31 00 00
+4b 36 00 00
+b9 3b 00 00
+b2 41 00 00
+44 48 00 00
+7e 4f 00 00
+71 57 00 00
+2f 60 00 00
+ce 69 00 00
+62 74 00 00
+ff 7f 00 00 
+
+# ###########################ble report map#######################
+# mem_ui_le_uuid_table_new:
+# 01 00 02 00 28 02 00 18 
+# 02 00 02 03 28 01 0a
+# 03 00 02 00 2a 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+# 04 00 02 03 28 01 02 05 00 02 01 2a 02 c2 03
+# 06 00 02 03 28 01 02 07 00 02 04 2a 08 06 00 06 00 64 00 2c 01
+# 08 00 02 00 28 02 01 18 09 00 02 03 28 01 20
+# 0a 00 02 05 2a 00 0b 00 02 02 29 02 00 00
+# 0c 00 02 00 28 02 0a 18 0d 00 02 03 28 01 02
+# 0e 00 02 29 2a 06 59 69 43 68 69 70 0f 00 02 03 28 01 02
+# 10 00 02 50 2a 07 02 8a 24 bb c0 01 00 
+
+# 11 00 02 00 28 02 0f 18
+# 12 00 02 03 28 01 12
+# 13 00 02 19 2a 01 64
+# 14 00 02 02 29 02 00 00
+# 15 00 02 03 28 01 04
+# 16 00 02 4c 2a 00
+
+# 17 00 02 00 28 02 12 18
+# 18 00 02 03 28 01 06 
+# 19 00 02 4e 2a 01 01
+# 1a 00 02 03 28 01 12 
+# 1b 00 02 4d 2a 08 00 00 00 00 00 00 00 00
+# 1c 00 02 02 29 02 00 00 
+# 1d 00 02 08 29 02 02 01
+# 1e 00 02 03 28 01 1a 
+# 1f 00 02 4d 2a 07 00 00 00 00 00 00 00
+# 20 00 02 02 29 02 00 00 
+# 21 00 02 08 29 02 01 01
+# 22 00 02 03 28 01 12 
+# 23 00 02 4d 2a 02 00 00
+# 24 00 02 02 29 02 00 00 
+# 25 00 02 08 29 02 05 01
+# 26 00 02 03 28 01 12 
+# 27 00 02 4d 2a 02 00 00
+# 28 00 02 02 29 02 00 00 
+# 29 00 02 08 29 02 04 01
+# 2a 00 02 03 28 01 0e 
+# 2b 00 02 4d 2a 02 00 00 
+# 2c 00 02 08 29 02 02 02
+
+# 2d 00 02 03 28 01 12
+# 2e 00 02 4d 2a 02 00 00
+# 2f 00 02 02 29 02 00 00
+# 30 00 02 08 29 02 C0 01
+# 31 00 02 03 28 01 12
+# 32 00 02 4d 2a 02 00 00
+# 33 00 02 02 29 02 00 00
+# 34 00 02 08 29 02 CC 01
+# 35 00 02 03 28 01 0e
+# 36 00 02 4d 2a 02 00 00
+# 37 00 02 08 29 02 C0 02
+
+# 38 00 02 03 28 01 1a
+# 39 00 02 33 2a 08 00 00 00 00 00 00 00 00
+# 3a 00 02 02 29 02 01 00
+# 3b 00 02 03 28 01 02
+# 3c 00 02 4a 2a 04 01 01 00 03
+
+# 3d 00 02 03 28 01 02 3e 00 02 4b 2a 20 01
+# 05 0C        # Usage Page (Consumer)
+# 09 01        # Usage (Consumer Control)
+# A1 01        # Collection (Application)
+# 85 05        # Report ID (5)
+# 15 00        # Logical Minimum (0)
+# 25 01        # Logical Maximum (1)
+# 75 01        # Report Size (1)
+# 95 18        # Report Count (24)
+# 0A 83 01     # Usage (AL Consumer Control Configuration)
+# 09 EA        # Usage (Volume Decrement)
+# 09 E9        # Usage (Volume Increment)
+# 09 E2        # Usage (Mute)
+# 09 B6        # Usage (Scan Previous Track)
+# 09 B5        # Usage (Scan Next Track)
+# 09 CD        # Usage (Play/Pause)
+# 09 B7        # Usage (Stop)
+# 0A 23 02     # Usage (AC Home)
+# 0A 8A 01     # Usage (AL Email Reader)
+# 0A 94 01     # Usage (AL Local Machine Browser)
+# 0A 2A 02     # Usage (AC Bookmarks)
+# 0A 92 01     # Usage (AL Calculator)
+# 0A 21 02     # Usage (AC Search)
+# 0A 24 02     # Usage (AC Back)
+# 0A 07 03     # Usage (0307)
+# 0A AE 01     # Usage (AL Keyboard Layout)
+# 09 70        # Usage (70)
+# 09 6F        # Usage (6F)
+# 09 30        # Usage (Power)
+# 09 B8        # Usage (Eject)
+# 0A 25 02     # Usage (AC Forward)
+# 0A 26 02     # Usage (AC Stop)
+# 0A 27 02     # Usage (AC Refresh)
+# 81 02        # Input (DataVarAbsNo WrapLinearPreferred StateNo Null Position)
+# C0           # End Collection
+# 05 01        # Usage Page (Generic Desktop Ctrls)
+# 09 06        # Usage (Keyboard)
+# A1 01        # Collection (Application)
+# 85 02        # Report ID (2)
+# 75 01        # Report Size (1)
+# 95 08        # Report Count (8)
+# 05 07        # Usage Page (Kbrd/Keypad)
+# 19 E0        # Usage Minimum (E0)
+# 29 E7        # Usage Maximum (E7)
+# 15 00        # Logical Minimum (0)
+# 25 01        # Logical Maximum (1)
+# 81 02        # Input (DataVarAbsNo WrapLinearPreferred StateNo Null Position)
+# 95 01        # Report Count (1)
+# 75 08        # Report Size (8)
+# 81 03        # Input (ConstVarAbsNo WrapLinearPreferred StateNo Null Position)
+# 95 05        # Report Count (5)
+# 75 01        # Report Size (1)
+# 05 08        # Usage Page (LEDs)
+# 19 01        # Usage Minimum (Num Lock)
+# 29 05        # Usage Maximum (Kana)
+# 91 02        # Output (DataVarAbsNo WrapLinearPreferred StateNo Null PositionNon-volatile)
+# 95 01        # Report Count (1)
+# 75 03        # Report Size (3)
+# 91 03        # Output (ConstVarAbsNo WrapLinearPreferred StateNo Null PositionNon-volatile)
+# 95 06        # Report Count (6)
+# 75 08        # Report Size (8)
+# 15 00        # Logical Minimum (0)
+# 26 FF 00     # Logical Maximum (255)
+# 05 07        # Usage Page (Kbrd/Keypad)
+# 19 00        # Usage Minimum (00)
+# 2A FF 00     # Usage Maximum (FF)
+# 81 00        # Input (DataArrayAbsNo WrapLinearPreferred StateNo Null Position)
+# C0           # End Collection
+# 05 01        # Usage Page (Generic Desktop Ctrls)
+# 09 02        # Usage (Mouse)
+# A1 01        # Collection (Application)
+# 85 01        # Report ID (1)
+# 09 01        # Usage (Pointer)
+# A1 00        # Collection (Physical)
+# 05 09        # Usage Page (Button)
+# 19 01        # Usage Minimum (01)
+# 29 08        # Usage Maximum (08)
+# 15 00        # Logical Minimum (0)
+# 25 01        # Logical Maximum (1)
+# 75 01        # Report Size (1)
+# 95 08        # Report Count (8)
+# 81 02        # Input (DataVarAbsNo WrapLinearPreferred StateNo Null Position)
+# 05 01        # Usage Page (Generic Desktop Ctrls)
+# 09 30        # Usage (X)
+# 09 31        # Usage (Y)
+# 16 01 F8     # Logical Minimum (-2047)
+# 26 FF 07     # Logical Maximum (2047)
+# 75 10        # Report Size (16)
+# 95 02        # Report Count (2)
+# 81 06        # Input (DataVarRelNo WrapLinearPreferred StateNo Null Position)
+# 09 38        # Usage (Wheel)
+# 15 81        # Logical Minimum (-127)
+# 25 7F        # Logical Maximum (127)
+# 75 08        # Report Size (8)
+# 95 01        # Report Count (1)
+# 81 06        # Input (DataVarRelNo WrapLinearPreferred StateNo Null Position)
+# 05 0C        # Usage Page (Consumer)
+# 0A 38 02     # Usage (AC Pan)
+# 95 01        # Report Count (1)
+# 81 06        # Input (DataVarRelNo WrapLinearPreferred StateNo Null Position)
+# C0           # End Collection
+# C0           # End Collection
+# 05 01        # Usage Page (Generic Desktop Ctrls)
+# 09 80        # Usage (Sys Control)
+# A1 01        # Collection (Application)
+# 85 04        # Report ID (4)
+# 15 00        # Logical Minimum (0)
+# 25 01        # Logical Maximum (1)
+# 75 01        # Report Size (1)
+# 95 03        # Report Count (3)
+# 19 81        # Usage Minimum (Sys Power Down)
+# 29 83        # Usage Maximum (Sys Wake Up)
+# 81 02        # Input (DataVarAbsNo WrapLinearPreferred StateNo Null Position)
+# 95 01        # Report Count (1)
+# 75 05        # Report Size (5)
+# 81 03        # Input (ConstVarAbsNo WrapLinearPreferred StateNo Null Position)
+# C0              # End Collection
+# 06 01 FF  # Usage Page (Vendor Defined FF01)
+# 09 01        # Usage (01)
+# A1 01        # Collection (Application)
+# 15 00        #   Logical Minimum (0)
+# 26 FF 00  #   Logical Maximum (255)
+# 75 08        #   Report Size (8)
+# 85 C0        #   Report ID (-64)
+# 95 3f        #   Report Count (63)
+# 09 02        #   Usage (02)
+# 81 00        #   Input (DataArrayAbsNo WrapLinearPreferred StateNo Null Position)
+# 95 3f        #   Report Count (63)
+# 09 03        #   Usage (03)
+# 91 02        #   Output (DataVarAbsNo WrapLinearPreferred StateNo Null PositionNon-volatile)
+# 85 CC        #   Report ID (-52)
+# 95 3f        #   Report Count (63)
+# 09 04        #   Usage (04)
+# 81 00        #   Input (DataArrayAbsNo WrapLinearPreferred StateNo Null Position)
+# 95 04        #   Report Count (4)
+# 09 05        #   Usage (05)
+# 91 02        #   Output (DataVarAbsNo WrapLinearPreferred StateNo Null PositionNon-volatile)
+# C0              # End Collection
+# # 288 bytes
+# 00 00
+# #811byte
Index: 312pro_mouse.dat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/312pro_mouse.dat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/312pro_mouse.dat	(working copy)
@@ -0,0 +1,702 @@
+mem_mouse_flag:
+#mouse flag byte1
+#bit0 MOUSE_SELECT_DEVICE_FLAG
+#bit1 MOUSE_24G_PAIRING_FLAG
+#bit2 MOUSE_STORE_EEPROM_FLAG
+#bit3 MOUSE_BT_CANNEL_RECONN_FLAG
+#bit4 MOUSE_LOW_VOLTAGE_FLAG
+#bit5 MOUSE_BT_DISCOVERY_BUTTON_DOWN_FLAG
+#bit6 MOUSE_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG
+#bit7 MOUSE_ENABLE_SPI2
+04
+
+#mouse flag byte2
+#bit0 MOUSE_ENABLE_BLE_RANDOM_ADDRE
+#bit1 MOUSE_ENABLE_2K_EEPROM
+#bit2 MOUSE_ENABLE_WAKEUP_FROM_POWER
+#bit3 MOUSE_ENABLE_16M
+#bit4 MOUSE_ENABLE_USB
+#bit5 MOUSE_ENABLE_24G_SEARCH_DONGLE
+#bit6 MOUSE_ENABLE_LOAD_AND_STORE_DPI
+#bit7 MOUSE_ENABLE_24G
+85
+
+#mouse flag byte3
+#bit0 MOUSE_ENABLE_FLASH
+#bit1 MOUSE_ENABLE_EEPROM
+#bit2 MOUSE_ENABLE_OTP
+#bit3 MOUSE_ENABLE_ADC
+#bit4 MOUSE_ENABLE_KEYBOARD
+#bit5 MOUSE_ENABLE_DOUBLE_DPI_KEY
+#bit6 MOUSE_ENABLE_SWITCH_GPIO_CONNECT_VIN
+5a
+
+#mouse flag byte4
+#bit0 MOUSE_ENABLE_24G_250Hz
+#bit1 MOUSE_ENABLE_24G_500Hz
+#bit2 MOUSE_ENABLE_24G_1000
+#bit3 MOUSE_ENABLE_BT_125Hz
+#bit4 MOUSE_ENABLE_DPI_LEVEL_4
+#bit5 MOUSE_ENABLE_USB_250
+#bit6 MOUSE_ENABLE_USB_500
+#bit7 MOUSE_ENABLE_USB_1000
+01
+
+#mouse flag byte5
+#bit0 MOUSE_ENABLE_1IO2LED
+#bit1 MOUSE_ENABLE_BT_RECONN_LED_EFFECT
+#bit2 MOUSE_ENABLE_LOW_LED_BLINK_LIMIT
+#bit3 MOUSE_ENABLE_LOW_LED
+#bit4 MOUSE_ENABLE_LOW_FOR_LED
+#bit5 MOUSE_ENABLE_DPI_FOR_LED
+02
+
+#mouse flag byte6 
+#bit0 MOUSE_ENABLE_SELECT_DEVICE_BY_DPI_BUTTON
+#bit1 MOUSE_ENABLE_SELECT_DEVICE_BY_PB_BUTTON
+#bit2 MOUSE_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO
+#bit3 MOUSE_ENABLE_DPI_KEY_CONNECT_GND
+#bit4 MOUSE_ENABLE_ANOTHER_DPI_KEY_CONNECT_GND
+#bit5 MOUSE_ENABLE_PB_BUTTON_CONNECT_GND
+#bit6 MOUSE_ENABLE_FIRE_KEY_CONNECT_GND
+#bit7 MOUSE_ENABLE_CUSTOMER_KEY_CONNECT_VIN
+04
+
+#mouse flag byte7
+#bit0 MOUSE_ENABLE_AUTO_24G_PARING
+#bit1 MOUSE_ENABLE_24G_POWER_ON_PAIRING
+#bit2 MOUSE_ENABLE_COMMBINATION_KEY_BY_24G_PAIRING
+#bit3 MOUSE_ENABLE_BT_RECONNECT_TIMEOUT_ENTER_DISCOVERY
+#bit4 MOUSE_ENABLE_PB_BUTTON_SHORT_PRESS_ENTER_DISCOVERY
+#bit5 MOUSE_ENABLE_COMMBINATION_KEY_BY_BT_DISCOVERY
+#bit6 MOUSE_ENABLE_DPI_KEY_LONG_PRESS_DISCONVERY
+#bit7 MOUSE_ENABLE_PB_BUTTON_LONG_PRESS_DISCONVERY
+22
+
+#mouse flag byte8
+#bit0 MOUSE_ENABLE_SMOOTHER
+#bit1 MOUSE_ENABLE_XY_OFFSET
+#bit2 MOUSE_ENABLE_24G_AUTO_PAIR_NERVER_BEEN_PAIRED
+#bit3 MOUSE_ENABLE_LE_BATTERY_SERVICE_CANCEL
+#bit4 MOUSE_ENABLE_WHEEL_WAKE_UP_CANCEL
+#bit5 MOUSE_ENABLE_24G_2M_PHY
+#bit6 MOUSE_ENABLE_24G_FIRST_AUTO_PAIRING
+1f
+
+
+mem_device_switch_gpio:02
+mem_device_reuse_2ice_gpio:05
+mem_sensor_motion_gpio:ff
+mem_whee_a_data_gpio:0b
+mem_whee_b_data_gpio:0a
+
+mem_mouse_param_config:
+0e #mem_lbutton_gpio
+08 #mem_mbutton_gpio
+0f #mem_rbutton_gpio
+ff #mem_bk_button_gpio
+ff #mem_fw_button_gpio
+ff #mem_dpi_button_gpio
+16 #mem_mouse_sensor_sclk_gpio
+17 #mem_mouse_sensor_sdio_gpio
+ff #mem_select_sensor_angle_gpio
+01 #mem_sensor_angle_default
+01 #mem_sensor_angle_gnd
+01 #mem_sensor_angle_vin
+00 #mem_config_sensor_dpi	#power on default dpi 00--1200  01--1600
+ff #mem_whee_ta_data_gpio
+ff #mem_whee_tb_data_gpio
+12 #mem_matrix_public_gpio
+ff#mem_config_select_device_button_gpio
+ff #mem_customer_key_gpio
+ff #mem_firebutton_gpio
+ff #mem_dpi_another_button_gpio
+ff #mem_mouse_logo_led_gpio
+01 #mem_mouse_1io2led_multi_24gled
+00 #mem_mouse_1io2led_multi_bt1led
+ff #mem_mouse_1io2led_multi_bt2led
+03 #mem_mouse_low_voltage_alarm_gpio
+ff #mem_mouse_dpi_gpio
+
+#mouse sensor angle
+#0x00 MOUSE_6CLK_ANGLE
+#0X01 MOUSE_9CLK_ANGLE
+#0X02 MOUSE_12CLK_ANGLE
+#0X03 MOUSE_3CLK_ANGLE
+
+
+#1io2led multi start
+#time parm
+mem_mouse_le_reconn_blink_limit:00		#00:disable 	01:enable
+mem_mouse_multi_led_powon_timer_init:0a	#1s
+mem_mouse_multi_24gled_blink_timer_init:05			#24gled blink time		500ms on,500ms off
+mem_mouse_multi_le_discovery_blink_timer_init:02		#le discovery blink time	500ms on,500ms off
+mem_mouse_multi_le_reconn_blink_timer_init:05			#le reconn blink time		500ms on,500ms off
+mem_mouse_low_led_blink_timer:14				#low blink time			1000ms on,1000ms off
+mem_mouse_dpi_led_blink_timer_init:02			#dpi blink time			200ms on,200ms off
+#blink count=count/2
+mem_mouse_multi_24gled_blink_count_init:02		#24g count
+mem_mouse_multi_le_reconn_blink_count_init:06	#le reconn count
+mem_mouse_multi_lowled_blink_count_init:0a		#low count=count
+mem_mouse_dpi_led_delay_count_init:0a		#1s
+#1io2led multi end
+
+#time parm
+mem_mouse_logo_led_on_time_init:58 02	#1min
+mem_device_24g_pair_timeout_init:58 02  #60s	    24g reconn timer&pair timer
+mem_device_24g_reconn_timeout_init:64 #10s
+mem_device_24g_power_on_fast_conn_timer:05 00	#500ms
+mem_device_direct_timeout:64  #10s
+mem_device_discovery_timeout:b0 04	#2min
+mem_device_fast_direct_timeout:0a #1s
+mem_device_no_data_timeout:70 17   #10mins
+
+#device parm
+mem_device_option:08
+mem_device_number:02   #01:only 2.4g   02:2.4g+ble    03:2.4g+ble+ble
+
+mem_lpm_mode:01
+mem_lpm_mult:20
+mem_lpm_mult_init:20
+
+mem_device_set_analog_bit_set:00 00 00
+
+mem_device_flag:
+00		#00--24g 01--bt
+34
+ff ff ff ff ff ff			#eeprom need
+mem_device2_type:
+34
+ff ff ff ff ff ff			#eeprom need
+mem_device3_type:
+34
+ff ff ff ff ff ff			#eeprom need
+
+mem_mouse_key_information_start:
+03 00 20 20 00
+03 00 22 22 00
+03 00 30 23 00
+
+mem_customer_key_press_init:
+# 05 00 01 00 00 00 00 00 00 00#AC Home
+#05 00 00 02 00 00 00 00 00 00#Volume Down
+#05 00 00 04 00 00 00 00 00 00#Volume Up
+#00 0a 00 72 00 00 00 00 00#copilot=win+shift+f23
+#00 05 00 04 00 00 00 00 00#CTRL+ALT+A
+#02 01 00 00 00 00 00 00 00 #POWERDOWN
+00 08 00 07 00 00 00 00 00#One-click desktop
+#03 ea 00 00 00 00 00 00 00 #VOL DOWN
+
+#bit0:mouse_key_l    bit1:mouse_key_r  bit2:mouse_key_m
+mem_mouse_commbination_key_24g:03
+mem_mouse_commbination_key_bt:07
+mem_mouse_commbination_key_dpi:ff
+mem_mouse_commbination_key_select_device:ff
+mem_mouse_commbination_dpi_timer:1e	#3s
+mem_mouse_commbination_select_device_timer:1e	#3s
+
+mem_store_key_info_delay_timer_init:05
+#ui
+mem_ui_button_timeout:1e
+
+#2.4g
+mem_24g_lap: 24 62 81 a1 51 61
+mem_24g_fast_conn_enable:01
+mem_24g_fast_conn_addr:0f 0f 0f 0f
+mem_24g_long_sleep_set_level:02    #00--30ms   01--50ms  02--80ms  03--100ms
+mem_24g_rx_window:c0 12     #400us  ## e0 2e#1ms #transmitter long range min:520us
+
+mem_mouse_24g_fast_hop_count_2ms:09	#report 500hz
+mem_mouse_24g_tsniff_2ms:c0 5d 00 00
+
+mem_mouse_24g_short_sleep_set_4ms:6a 63 00	#1662us
+mem_mouse_24g_long_sleep_set_4ms:80 bb 00
+mem_mouse_24g_tsniff_4ms:f8 bb 00 00
+
+mem_mouse_24g_short_sleep_set_8ms:1c 1f 01
+mem_mouse_24g_long_sleep_set_8ms:00 77 01
+mem_mouse_24g_tsniff_8ms:00 77 01 00
+
+mem_device_24g_pair_tx_power:94 #-20dBm
+mem_24g_enter_hibernate:00 48 60
+mem_24g_long_sleep_param_update_timer_init:05 00	#500ms
+mem_24g_transmit_by_interrupt_exit_count_init:50 00
+mem_device_24g_search_dongle_time_init:64 00	#10s
+mem_store_information_delay_timer_init:01
+
+mem_mouse_long_mult_count:02
+
+#ble
+mem_le_lap:34 47 29 51 31 41
+mem_le_adv_channel_map:07
+mem_local_rx_max_octets:fb 00 48 08 fb 00 48 08  # 1b
+mem_le_battery_level_updata_timer_init:96 00
+
+mem_le_keyboard_handle:1b 00
+mem_le_notify_handle:1f 00
+mem_le_multimedia_handle:23 00
+mem_le_systemctrl_handle:27 00
+mem_le_pairing_handle:39 00#2d 00
+mem_le_battery_level_handle:13 00#3b 00 #30 00
+
+mem_le_protocol_rx_handle:36 00
+mem_le_protocol_tx_handle:2e 00
+mem_le_audio_tx_handle:32 00
+
+mem_le_adv_data_len:1f
+mem_le_adv_data:
+#flag
+02 01 05 
+#uuid
+03 03 12 18 
+#appearance
+03 19 c2 03
+
+mem_le_adv_swift_pair:
+#microsoft swift pair
+06 ff 06 00 03 00 80	
+#name
+'\09AI Mouse
+
+mem_le_scan_data_len:1f
+mem_le_scan_data:
+#name
+'\09AI Mouse
+
+
+mem_le_name_len:
+'AI Mouse
+
+mem_le_name_patch_len:	#max 18bytes
+'AI Mouse
+
+mem_le_interval_min:
+06 00 #min interval
+09 00 #max interval
+20 00 #latency
+2c 01 #timeout
+
+
+mem_le_adv_ind:03 12 18
+mem_le_adv_direct_ind:ff 00 00
+
+mem_flash_base:00 50 00
+mem_eeprom_base:80 3a
+mem_eeprom_block_size:80
+mem_eeprom_att_list_base:00 34
+
+#zcode
+mem_zcode_current_number:ff
+mem_xip_flash_offset:00 00
+mem_zcode_head:20 20 00 40
+mem_eeprom_start_addr:00 00
+
+#usb
+mem_usb_offline_check_gpio:ff
+
+#rf
+mem_tx_power:01	#00--0db 01--3db  02--5db  03--f3db  04--f5db
+mem_rssi_buff_index:07
+mem_rssi_signal_buf_ptr:mem_mouse_rssi_signal_buf
+mem_rssi_dis_min_24g_init:85
+mem_rssi_dis_max_24g_init:90
+mem_rssi_dis_min_ble_init:75
+mem_rssi_dis_max_ble_init:80
+mem_rssi_hex_received_max_value_init:63
+mem_power_ctrl_pac_succ_cnt_init:7d
+
+#adc config
+mem_adc_reference_mode:01 #01 reference 3v 02:reference 1.8v
+mem_adc_config_flag:02
+#01 ADC_CONFIG_HVIN
+#02 ADC_CONFIG_GPIO
+mem_adc_clkdiv:0a
+mem_adc_channel:09
+#00 ADC_CH_VBAT
+#01 ADC_CH_VDCDC5V
+#06 ADC_CH_GPIO18
+#07 ADC_CH_GPIO10
+#08 ADC_CH_GPIO9
+#09 ADC_CH_GPIO12
+#0a ADC_CH_GPIO6
+#0b ADC_CH_GPIO20
+#0c ADC_CH_GPIO21
+#0d ADC_CH_GPIO22
+#0e ADC_CH_GPIO13
+
+#adc
+mem_device_vdd_full_vol:94 00		#1.5V
+78 00#mem_device_vdd_empty_vol  :0.9V
+80 00#mem_device_vdd_low_vol   :1.0V
+#mem_device_vdd_full_vol:e4 0c		#3.3V
+#b8 0b#mem_device_vdd_empty_vol  :3.0V
+#80 0c#mem_device_vdd_low_vol   :3.2V
+
+mem_adc_channel_gpio:0c
+#04
+#02
+#01
+#03
+#00
+#05
+#06
+#07
+
+# rf debug
+#bit7:0 means disable rf debug function
+#mem_rf_debug_rx_gpio:87
+#mem_rf_debug_tx_gpio:88
+
+mem_power_ctrl_disable:01
+
+##########################g24 addr #################################
+mem_24g_pair_addr_new:25 20 15 10
+mem_24g_ch_map_update:01   #00--disable   01--enable
+mem_24g_ch_update_map1:06 1a 3a 4d
+mem_24g_ch_update_map2:00 13 23 4c
+mem_24g_ch_update_map3:0f 2c 31 43 
+mem_24g_ch_update_map4:11 15 36 48
+
+##########################UART INIT#################################
+#mem_app_uart_tx_gpio:07
+#mem_app_uart_rx_gpio:ff
+#mem_app_uart_baud_rate:10 00	#d0=115200 10=1500000
+#mem_app_uart_tx_buff_sptr:mem_app_uart_tx_buff_start
+#mem_app_uart_tx_buff_eptr:mem_app_uart_tx_buff_end
+#mem_app_uart_rx_buff_sptr:mem_app_uart_rx_buff_start
+#mem_app_uart_rx_buff_eptr:mem_app_uart_rx_buff_end
+
+
+###########################auth data#######################
+mem_ms_auth_appkey:01 75 38 42 73 58 98
+mem_ms_auth_secret:
+1d a3 f4 a9 f4 fc 5a a6
+38 15 91 9c 51 65 e6 9e 
+
+#msm_ms_auth_sn:11 22 33 44 55 66
+#mem_ms_auth_chip_id:00 01
+mem_ms_version:01
+
+mem_mouse_device_type:
+'YC-AI-Mouse
+
+###########################audio demo#######################
+mem_ms_le_interval_min_voice:
+06 00 #min interval
+06 00 #max interval
+2b 00 #latency
+90 01 #timeout
+
+mem_ms_le_interval_min_new:
+06 00 #min interval
+09 00 #max interval
+20 00 #latency
+2c 01 #timeout
+
+mem_ms_audio_key_gpio:08
+mem_ms_one_pullup_key_gpio:0f
+mem_ms_transmit_key_gpio:0e
+
+mem_adc_dma_enable:00
+
+#mem_queue_ptr:mem_g_queue_each_size
+#mem_g_queue_each_size:01 20
+
+mem_adc_audio_saddr_ptr:mem_voice_raw_start
+mem_adc_audio_eaddr_ptr:mem_voice_raw_end
+
+mem_ad_indexTable1:ff ff ff ff 02 04 06 08 ff ff ff ff 02 04 06 08
+
+mem_ad_stepsizeTable1:
+07 00 00 00
+08 00 00 00
+09 00 00 00
+0a 00 00 00
+0b 00 00 00
+0c 00 00 00
+0d 00 00 00
+0e 00 00 00
+10 00 00 00
+11 00 00 00
+13 00 00 00
+15 00 00 00
+17 00 00 00
+19 00 00 00
+1c 00 00 00
+1f 00 00 00
+22 00 00 00
+25 00 00 00
+29 00 00 00
+2d 00 00 00
+32 00 00 00
+37 00 00 00
+3c 00 00 00
+42 00 00 00
+49 00 00 00
+50 00 00 00
+58 00 00 00
+61 00 00 00
+6b 00 00 00
+76 00 00 00
+82 00 00 00
+8f 00 00 00
+9d 00 00 00
+ad 00 00 00
+be 00 00 00
+d1 00 00 00
+e6 00 00 00
+fd 00 00 00
+17 01 00 00
+33 01 00 00
+51 01 00 00
+73 01 00 00
+98 01 00 00
+c1 01 00 00
+ee 01 00 00
+20 02 00 00
+56 02 00 00
+92 02 00 00
+d4 02 00 00
+1c 03 00 00
+6c 03 00 00
+c3 03 00 00
+24 04 00 00
+8e 04 00 00
+02 05 00 00
+83 05 00 00
+10 06 00 00
+ab 06 00 00
+56 07 00 00
+12 08 00 00
+e0 08 00 00
+c3 09 00 00
+bd 0a 00 00
+d0 0b 00 00
+ff 0c 00 00
+4c 0e 00 00
+ba 0f 00 00
+4c 11 00 00
+07 13 00 00
+ee 14 00 00
+06 17 00 00
+54 19 00 00
+dc 1b 00 00
+a5 1e 00 00
+b6 21 00 00
+15 25 00 00
+ca 28 00 00
+df 2c 00 00
+5b 31 00 00
+4b 36 00 00
+b9 3b 00 00
+b2 41 00 00
+44 48 00 00
+7e 4f 00 00
+71 57 00 00
+2f 60 00 00
+ce 69 00 00
+62 74 00 00
+ff 7f 00 00 
+
+# ###########################ble report map#######################
+# mem_ui_le_uuid_table_new:
+# 01 00 02 00 28 02 00 18 
+# 02 00 02 03 28 01 0a
+# 03 00 02 00 2a 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+# 04 00 02 03 28 01 02 05 00 02 01 2a 02 c2 03
+# 06 00 02 03 28 01 02 07 00 02 04 2a 08 06 00 06 00 64 00 2c 01
+# 08 00 02 00 28 02 01 18 09 00 02 03 28 01 20
+# 0a 00 02 05 2a 00 0b 00 02 02 29 02 00 00
+# 0c 00 02 00 28 02 0a 18 0d 00 02 03 28 01 02
+# 0e 00 02 29 2a 06 59 69 43 68 69 70 0f 00 02 03 28 01 02
+# 10 00 02 50 2a 07 02 8a 24 bb c0 01 00 
+
+# 11 00 02 00 28 02 0f 18
+# 12 00 02 03 28 01 12
+# 13 00 02 19 2a 01 64
+# 14 00 02 02 29 02 00 00
+# 15 00 02 03 28 01 04
+# 16 00 02 4c 2a 00
+
+# 17 00 02 00 28 02 12 18
+# 18 00 02 03 28 01 06 
+# 19 00 02 4e 2a 01 01
+# 1a 00 02 03 28 01 12 
+# 1b 00 02 4d 2a 08 00 00 00 00 00 00 00 00
+# 1c 00 02 02 29 02 00 00 
+# 1d 00 02 08 29 02 02 01
+# 1e 00 02 03 28 01 1a 
+# 1f 00 02 4d 2a 07 00 00 00 00 00 00 00
+# 20 00 02 02 29 02 00 00 
+# 21 00 02 08 29 02 01 01
+# 22 00 02 03 28 01 12 
+# 23 00 02 4d 2a 02 00 00
+# 24 00 02 02 29 02 00 00 
+# 25 00 02 08 29 02 05 01
+# 26 00 02 03 28 01 12 
+# 27 00 02 4d 2a 02 00 00
+# 28 00 02 02 29 02 00 00 
+# 29 00 02 08 29 02 04 01
+# 2a 00 02 03 28 01 0e 
+# 2b 00 02 4d 2a 02 00 00 
+# 2c 00 02 08 29 02 02 02
+
+# 2d 00 02 03 28 01 12
+# 2e 00 02 4d 2a 02 00 00
+# 2f 00 02 02 29 02 00 00
+# 30 00 02 08 29 02 C0 01
+# 31 00 02 03 28 01 12
+# 32 00 02 4d 2a 02 00 00
+# 33 00 02 02 29 02 00 00
+# 34 00 02 08 29 02 CC 01
+# 35 00 02 03 28 01 0e
+# 36 00 02 4d 2a 02 00 00
+# 37 00 02 08 29 02 C0 02
+
+# 38 00 02 03 28 01 1a
+# 39 00 02 33 2a 08 00 00 00 00 00 00 00 00
+# 3a 00 02 02 29 02 01 00
+# 3b 00 02 03 28 01 02
+# 3c 00 02 4a 2a 04 01 01 00 03
+
+# 3d 00 02 03 28 01 02 3e 00 02 4b 2a 20 01
+# 05 0C        # Usage Page (Consumer)
+# 09 01        # Usage (Consumer Control)
+# A1 01        # Collection (Application)
+# 85 05        # Report ID (5)
+# 15 00        # Logical Minimum (0)
+# 25 01        # Logical Maximum (1)
+# 75 01        # Report Size (1)
+# 95 18        # Report Count (24)
+# 0A 83 01     # Usage (AL Consumer Control Configuration)
+# 09 EA        # Usage (Volume Decrement)
+# 09 E9        # Usage (Volume Increment)
+# 09 E2        # Usage (Mute)
+# 09 B6        # Usage (Scan Previous Track)
+# 09 B5        # Usage (Scan Next Track)
+# 09 CD        # Usage (Play/Pause)
+# 09 B7        # Usage (Stop)
+# 0A 23 02     # Usage (AC Home)
+# 0A 8A 01     # Usage (AL Email Reader)
+# 0A 94 01     # Usage (AL Local Machine Browser)
+# 0A 2A 02     # Usage (AC Bookmarks)
+# 0A 92 01     # Usage (AL Calculator)
+# 0A 21 02     # Usage (AC Search)
+# 0A 24 02     # Usage (AC Back)
+# 0A 07 03     # Usage (0307)
+# 0A AE 01     # Usage (AL Keyboard Layout)
+# 09 70        # Usage (70)
+# 09 6F        # Usage (6F)
+# 09 30        # Usage (Power)
+# 09 B8        # Usage (Eject)
+# 0A 25 02     # Usage (AC Forward)
+# 0A 26 02     # Usage (AC Stop)
+# 0A 27 02     # Usage (AC Refresh)
+# 81 02        # Input (DataVarAbsNo WrapLinearPreferred StateNo Null Position)
+# C0           # End Collection
+# 05 01        # Usage Page (Generic Desktop Ctrls)
+# 09 06        # Usage (Keyboard)
+# A1 01        # Collection (Application)
+# 85 02        # Report ID (2)
+# 75 01        # Report Size (1)
+# 95 08        # Report Count (8)
+# 05 07        # Usage Page (Kbrd/Keypad)
+# 19 E0        # Usage Minimum (E0)
+# 29 E7        # Usage Maximum (E7)
+# 15 00        # Logical Minimum (0)
+# 25 01        # Logical Maximum (1)
+# 81 02        # Input (DataVarAbsNo WrapLinearPreferred StateNo Null Position)
+# 95 01        # Report Count (1)
+# 75 08        # Report Size (8)
+# 81 03        # Input (ConstVarAbsNo WrapLinearPreferred StateNo Null Position)
+# 95 05        # Report Count (5)
+# 75 01        # Report Size (1)
+# 05 08        # Usage Page (LEDs)
+# 19 01        # Usage Minimum (Num Lock)
+# 29 05        # Usage Maximum (Kana)
+# 91 02        # Output (DataVarAbsNo WrapLinearPreferred StateNo Null PositionNon-volatile)
+# 95 01        # Report Count (1)
+# 75 03        # Report Size (3)
+# 91 03        # Output (ConstVarAbsNo WrapLinearPreferred StateNo Null PositionNon-volatile)
+# 95 06        # Report Count (6)
+# 75 08        # Report Size (8)
+# 15 00        # Logical Minimum (0)
+# 26 FF 00     # Logical Maximum (255)
+# 05 07        # Usage Page (Kbrd/Keypad)
+# 19 00        # Usage Minimum (00)
+# 2A FF 00     # Usage Maximum (FF)
+# 81 00        # Input (DataArrayAbsNo WrapLinearPreferred StateNo Null Position)
+# C0           # End Collection
+# 05 01        # Usage Page (Generic Desktop Ctrls)
+# 09 02        # Usage (Mouse)
+# A1 01        # Collection (Application)
+# 85 01        # Report ID (1)
+# 09 01        # Usage (Pointer)
+# A1 00        # Collection (Physical)
+# 05 09        # Usage Page (Button)
+# 19 01        # Usage Minimum (01)
+# 29 08        # Usage Maximum (08)
+# 15 00        # Logical Minimum (0)
+# 25 01        # Logical Maximum (1)
+# 75 01        # Report Size (1)
+# 95 08        # Report Count (8)
+# 81 02        # Input (DataVarAbsNo WrapLinearPreferred StateNo Null Position)
+# 05 01        # Usage Page (Generic Desktop Ctrls)
+# 09 30        # Usage (X)
+# 09 31        # Usage (Y)
+# 16 01 F8     # Logical Minimum (-2047)
+# 26 FF 07     # Logical Maximum (2047)
+# 75 10        # Report Size (16)
+# 95 02        # Report Count (2)
+# 81 06        # Input (DataVarRelNo WrapLinearPreferred StateNo Null Position)
+# 09 38        # Usage (Wheel)
+# 15 81        # Logical Minimum (-127)
+# 25 7F        # Logical Maximum (127)
+# 75 08        # Report Size (8)
+# 95 01        # Report Count (1)
+# 81 06        # Input (DataVarRelNo WrapLinearPreferred StateNo Null Position)
+# 05 0C        # Usage Page (Consumer)
+# 0A 38 02     # Usage (AC Pan)
+# 95 01        # Report Count (1)
+# 81 06        # Input (DataVarRelNo WrapLinearPreferred StateNo Null Position)
+# C0           # End Collection
+# C0           # End Collection
+# 05 01        # Usage Page (Generic Desktop Ctrls)
+# 09 80        # Usage (Sys Control)
+# A1 01        # Collection (Application)
+# 85 04        # Report ID (4)
+# 15 00        # Logical Minimum (0)
+# 25 01        # Logical Maximum (1)
+# 75 01        # Report Size (1)
+# 95 03        # Report Count (3)
+# 19 81        # Usage Minimum (Sys Power Down)
+# 29 83        # Usage Maximum (Sys Wake Up)
+# 81 02        # Input (DataVarAbsNo WrapLinearPreferred StateNo Null Position)
+# 95 01        # Report Count (1)
+# 75 05        # Report Size (5)
+# 81 03        # Input (ConstVarAbsNo WrapLinearPreferred StateNo Null Position)
+# C0              # End Collection
+# 06 01 FF  # Usage Page (Vendor Defined FF01)
+# 09 01        # Usage (01)
+# A1 01        # Collection (Application)
+# 15 00        #   Logical Minimum (0)
+# 26 FF 00  #   Logical Maximum (255)
+# 75 08        #   Report Size (8)
+# 85 C0        #   Report ID (-64)
+# 95 3f        #   Report Count (63)
+# 09 02        #   Usage (02)
+# 81 00        #   Input (DataArrayAbsNo WrapLinearPreferred StateNo Null Position)
+# 95 3f        #   Report Count (63)
+# 09 03        #   Usage (03)
+# 91 02        #   Output (DataVarAbsNo WrapLinearPreferred StateNo Null PositionNon-volatile)
+# 85 CC        #   Report ID (-52)
+# 95 3f        #   Report Count (63)
+# 09 04        #   Usage (04)
+# 81 00        #   Input (DataArrayAbsNo WrapLinearPreferred StateNo Null Position)
+# 95 04        #   Report Count (4)
+# 09 05        #   Usage (05)
+# 91 02        #   Output (DataVarAbsNo WrapLinearPreferred StateNo Null PositionNon-volatile)
+# C0              # End Collection
+# # 288 bytes
+# 00 00
+# #811byte
Index: 348_mouse.dat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/348_mouse.dat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/348_mouse.dat	(working copy)
@@ -0,0 +1,702 @@
+mem_mouse_flag:
+#mouse flag byte1
+#bit0 MOUSE_SELECT_DEVICE_FLAG
+#bit1 MOUSE_24G_PAIRING_FLAG
+#bit2 MOUSE_STORE_EEPROM_FLAG
+#bit3 MOUSE_BT_CANNEL_RECONN_FLAG
+#bit4 MOUSE_LOW_VOLTAGE_FLAG
+#bit5 MOUSE_BT_DISCOVERY_BUTTON_DOWN_FLAG
+#bit6 MOUSE_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG
+#bit7 MOUSE_ENABLE_SPI2
+04
+
+#mouse flag byte2
+#bit0 MOUSE_ENABLE_BLE_RANDOM_ADDRE
+#bit1 MOUSE_ENABLE_2K_EEPROM
+#bit2 MOUSE_ENABLE_WAKEUP_FROM_POWER
+#bit3 MOUSE_ENABLE_16M
+#bit4 MOUSE_ENABLE_USB
+#bit5 MOUSE_ENABLE_24G_SEARCH_DONGLE
+#bit6 MOUSE_ENABLE_LOAD_AND_STORE_DPI
+#bit7 MOUSE_ENABLE_24G
+85
+
+#mouse flag byte3
+#bit0 MOUSE_ENABLE_FLASH
+#bit1 MOUSE_ENABLE_EEPROM
+#bit2 MOUSE_ENABLE_OTP
+#bit3 MOUSE_ENABLE_ADC
+#bit4 MOUSE_ENABLE_KEYBOARD
+#bit5 MOUSE_ENABLE_DOUBLE_DPI_KEY
+#bit6 MOUSE_ENABLE_SWITCH_GPIO_CONNECT_VIN
+1a
+
+#mouse flag byte4
+#bit0 MOUSE_ENABLE_24G_250Hz
+#bit1 MOUSE_ENABLE_24G_500Hz
+#bit2 MOUSE_ENABLE_24G_1000
+#bit3 MOUSE_ENABLE_BT_125Hz
+#bit4 MOUSE_ENABLE_DPI_LEVEL_4
+#bit5 MOUSE_ENABLE_USB_250
+#bit6 MOUSE_ENABLE_USB_500
+#bit7 MOUSE_ENABLE_USB_1000
+01
+
+#mouse flag byte5
+#bit0 MOUSE_ENABLE_1IO2LED
+#bit1 MOUSE_ENABLE_BT_RECONN_LED_EFFECT
+#bit2 MOUSE_ENABLE_LOW_LED_BLINK_LIMIT
+#bit3 MOUSE_ENABLE_LOW_LED
+#bit4 MOUSE_ENABLE_LOW_FOR_LED
+#bit5 MOUSE_ENABLE_DPI_FOR_LED
+02
+
+#mouse flag byte6 
+#bit0 MOUSE_ENABLE_SELECT_DEVICE_BY_DPI_BUTTON
+#bit1 MOUSE_ENABLE_SELECT_DEVICE_BY_PB_BUTTON
+#bit2 MOUSE_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO
+#bit3 MOUSE_ENABLE_DPI_KEY_CONNECT_GND
+#bit4 MOUSE_ENABLE_ANOTHER_DPI_KEY_CONNECT_GND
+#bit5 MOUSE_ENABLE_PB_BUTTON_CONNECT_GND
+#bit6 MOUSE_ENABLE_FIRE_KEY_CONNECT_GND
+#bit7 MOUSE_ENABLE_CUSTOMER_KEY_CONNECT_VIN
+22
+
+#mouse flag byte7
+#bit0 MOUSE_ENABLE_AUTO_24G_PARING
+#bit1 MOUSE_ENABLE_24G_POWER_ON_PAIRING
+#bit2 MOUSE_ENABLE_COMMBINATION_KEY_BY_24G_PAIRING
+#bit3 MOUSE_ENABLE_BT_RECONNECT_TIMEOUT_ENTER_DISCOVERY
+#bit4 MOUSE_ENABLE_PB_BUTTON_SHORT_PRESS_ENTER_DISCOVERY
+#bit5 MOUSE_ENABLE_COMMBINATION_KEY_BY_BT_DISCOVERY
+#bit6 MOUSE_ENABLE_DPI_KEY_LONG_PRESS_DISCONVERY
+#bit7 MOUSE_ENABLE_PB_BUTTON_LONG_PRESS_DISCONVERY
+22
+
+#mouse flag byte8
+#bit0 MOUSE_ENABLE_SMOOTHER
+#bit1 MOUSE_ENABLE_XY_OFFSET
+#bit2 MOUSE_ENABLE_24G_AUTO_PAIR_NERVER_BEEN_PAIRED
+#bit3 MOUSE_ENABLE_LE_BATTERY_SERVICE_CANCEL
+#bit4 MOUSE_ENABLE_WHEEL_WAKE_UP_CANCEL
+#bit5 MOUSE_ENABLE_24G_2M_PHY
+#bit6 MOUSE_ENABLE_24G_FIRST_AUTO_PAIRING
+1f
+
+
+mem_device_switch_gpio:ff
+mem_device_reuse_2ice_gpio:05
+mem_sensor_motion_gpio:ff
+mem_whee_a_data_gpio:0b
+mem_whee_b_data_gpio:0a
+
+mem_mouse_param_config:
+0e #mem_lbutton_gpio
+08 #mem_mbutton_gpio
+0f #mem_rbutton_gpio
+ff #mem_bk_button_gpio
+ff #mem_fw_button_gpio
+ff #mem_dpi_button_gpio
+16 #mem_mouse_sensor_sclk_gpio
+17 #mem_mouse_sensor_sdio_gpio
+ff #mem_select_sensor_angle_gpio
+02 #mem_sensor_angle_default
+02 #mem_sensor_angle_gnd
+02 #mem_sensor_angle_vin
+00 #mem_config_sensor_dpi	#power on default dpi 00--1200  01--1600
+ff #mem_whee_ta_data_gpio
+ff #mem_whee_tb_data_gpio
+12 #mem_matrix_public_gpio
+07#mem_config_select_device_button_gpio
+ff #mem_customer_key_gpio
+ff #mem_firebutton_gpio
+ff #mem_dpi_another_button_gpio
+ff #mem_mouse_logo_led_gpio
+01 #mem_mouse_1io2led_multi_24gled
+00 #mem_mouse_1io2led_multi_bt1led
+ff #mem_mouse_1io2led_multi_bt2led
+03 #mem_mouse_low_voltage_alarm_gpio
+ff #mem_mouse_dpi_gpio
+
+#mouse sensor angle
+#0x00 MOUSE_6CLK_ANGLE
+#0X01 MOUSE_9CLK_ANGLE
+#0X02 MOUSE_12CLK_ANGLE
+#0X03 MOUSE_3CLK_ANGLE
+
+
+#1io2led multi start
+#time parm
+mem_mouse_le_reconn_blink_limit:00		#00:disable 	01:enable
+mem_mouse_multi_led_powon_timer_init:0a	#1s
+mem_mouse_multi_24gled_blink_timer_init:05			#24gled blink time		500ms on,500ms off
+mem_mouse_multi_le_discovery_blink_timer_init:02		#le discovery blink time	500ms on,500ms off
+mem_mouse_multi_le_reconn_blink_timer_init:05			#le reconn blink time		500ms on,500ms off
+mem_mouse_low_led_blink_timer:14				#low blink time			1000ms on,1000ms off
+mem_mouse_dpi_led_blink_timer_init:02			#dpi blink time			200ms on,200ms off
+#blink count=count/2
+mem_mouse_multi_24gled_blink_count_init:02		#24g count
+mem_mouse_multi_le_reconn_blink_count_init:06	#le reconn count
+mem_mouse_multi_lowled_blink_count_init:0a		#low count=count
+mem_mouse_dpi_led_delay_count_init:0a		#1s
+#1io2led multi end
+
+#time parm
+mem_mouse_logo_led_on_time_init:58 02	#1min
+mem_device_24g_pair_timeout_init:58 02  #60s	    24g reconn timer&pair timer
+mem_device_24g_reconn_timeout_init:64 #10s
+mem_device_24g_power_on_fast_conn_timer:05 00	#500ms
+mem_device_direct_timeout:64  #10s
+mem_device_discovery_timeout:b0 04	#2min
+mem_device_fast_direct_timeout:0a #1s
+mem_device_no_data_timeout:70 17   #10mins
+
+#device parm
+mem_device_option:08
+mem_device_number:02   #01:only 2.4g   02:2.4g+ble    03:2.4g+ble+ble
+
+mem_lpm_mode:01
+mem_lpm_mult:20
+mem_lpm_mult_init:20
+
+mem_device_set_analog_bit_set:00 00 00
+
+mem_device_flag:
+00		#00--24g 01--bt
+34
+ff ff ff ff ff ff			#eeprom need
+mem_device2_type:
+34
+ff ff ff ff ff ff			#eeprom need
+mem_device3_type:
+34
+ff ff ff ff ff ff			#eeprom need
+
+mem_mouse_key_information_start:
+03 00 20 20 00
+03 00 22 22 00
+03 00 30 23 00
+
+mem_customer_key_press_init:
+# 05 00 01 00 00 00 00 00 00 00#AC Home
+#05 00 00 02 00 00 00 00 00 00#Volume Down
+#05 00 00 04 00 00 00 00 00 00#Volume Up
+#00 0a 00 72 00 00 00 00 00#copilot=win+shift+f23
+#00 05 00 04 00 00 00 00 00#CTRL+ALT+A
+#02 01 00 00 00 00 00 00 00 #POWERDOWN
+00 08 00 07 00 00 00 00 00#One-click desktop
+#03 ea 00 00 00 00 00 00 00 #VOL DOWN
+
+#bit0:mouse_key_l    bit1:mouse_key_r  bit2:mouse_key_m
+mem_mouse_commbination_key_24g:03
+mem_mouse_commbination_key_bt:07
+mem_mouse_commbination_key_dpi:ff
+mem_mouse_commbination_key_select_device:ff
+mem_mouse_commbination_dpi_timer:1e	#3s
+mem_mouse_commbination_select_device_timer:1e	#3s
+
+mem_store_key_info_delay_timer_init:05
+#ui
+mem_ui_button_timeout:1e
+
+#2.4g
+mem_24g_lap: 24 62 81 a1 51 61
+mem_24g_fast_conn_enable:01
+mem_24g_fast_conn_addr:0f 0f 0f 0f
+mem_24g_long_sleep_set_level:02    #00--30ms   01--50ms  02--80ms  03--100ms
+mem_24g_rx_window:c0 12     #400us  ## e0 2e#1ms #transmitter long range min:520us
+
+mem_mouse_24g_fast_hop_count_2ms:09	#report 500hz
+mem_mouse_24g_tsniff_2ms:c0 5d 00 00
+
+mem_mouse_24g_short_sleep_set_4ms:6a 63 00	#1662us
+mem_mouse_24g_long_sleep_set_4ms:80 bb 00
+mem_mouse_24g_tsniff_4ms:f8 bb 00 00
+
+mem_mouse_24g_short_sleep_set_8ms:1c 1f 01
+mem_mouse_24g_long_sleep_set_8ms:00 77 01
+mem_mouse_24g_tsniff_8ms:00 77 01 00
+
+mem_device_24g_pair_tx_power:94 #-20dBm
+mem_24g_enter_hibernate:00 48 60
+mem_24g_long_sleep_param_update_timer_init:05 00	#500ms
+mem_24g_transmit_by_interrupt_exit_count_init:50 00
+mem_device_24g_search_dongle_time_init:64 00	#10s
+mem_store_information_delay_timer_init:01
+
+mem_mouse_long_mult_count:02
+
+#ble
+mem_le_lap:34 47 29 51 31 41
+mem_le_adv_channel_map:07
+mem_local_rx_max_octets:fb 00 48 08 fb 00 48 08  # 1b
+mem_le_battery_level_updata_timer_init:96 00
+
+mem_le_keyboard_handle:1b 00
+mem_le_notify_handle:1f 00
+mem_le_multimedia_handle:23 00
+mem_le_systemctrl_handle:27 00
+mem_le_pairing_handle:39 00#2d 00
+mem_le_battery_level_handle:13 00#3b 00 #30 00
+
+mem_le_protocol_rx_handle:36 00
+mem_le_protocol_tx_handle:2e 00
+mem_le_audio_tx_handle:32 00
+
+mem_le_adv_data_len:1f
+mem_le_adv_data:
+#flag
+02 01 05 
+#uuid
+03 03 12 18 
+#appearance
+03 19 c2 03
+
+mem_le_adv_swift_pair:
+#microsoft swift pair
+06 ff 06 00 03 00 80	
+#name
+'\09AI Mouse
+
+mem_le_scan_data_len:1f
+mem_le_scan_data:
+#name
+'\09AI Mouse
+
+
+mem_le_name_len:
+'AI Mouse
+
+mem_le_name_patch_len:	#max 18bytes
+'AI Mouse
+
+mem_le_interval_min:
+06 00 #min interval
+09 00 #max interval
+20 00 #latency
+2c 01 #timeout
+
+
+mem_le_adv_ind:03 12 18
+mem_le_adv_direct_ind:ff 00 00
+
+mem_flash_base:00 50 00
+mem_eeprom_base:80 3a
+mem_eeprom_block_size:80
+mem_eeprom_att_list_base:00 34
+
+#zcode
+mem_zcode_current_number:ff
+mem_xip_flash_offset:00 00
+mem_zcode_head:20 20 00 40
+mem_eeprom_start_addr:00 00
+
+#usb
+mem_usb_offline_check_gpio:ff
+
+#rf
+mem_tx_power:01	#00--0db 01--3db  02--5db  03--f3db  04--f5db
+mem_rssi_buff_index:07
+mem_rssi_signal_buf_ptr:mem_mouse_rssi_signal_buf
+mem_rssi_dis_min_24g_init:85
+mem_rssi_dis_max_24g_init:90
+mem_rssi_dis_min_ble_init:75
+mem_rssi_dis_max_ble_init:80
+mem_rssi_hex_received_max_value_init:63
+mem_power_ctrl_pac_succ_cnt_init:7d
+
+#adc config
+mem_adc_reference_mode:01 #01 reference 3v 02:reference 1.8v
+mem_adc_config_flag:02
+#01 ADC_CONFIG_HVIN
+#02 ADC_CONFIG_GPIO
+mem_adc_clkdiv:0a
+mem_adc_channel:09
+#00 ADC_CH_VBAT
+#01 ADC_CH_VDCDC5V
+#06 ADC_CH_GPIO18
+#07 ADC_CH_GPIO10
+#08 ADC_CH_GPIO9
+#09 ADC_CH_GPIO12
+#0a ADC_CH_GPIO6
+#0b ADC_CH_GPIO20
+#0c ADC_CH_GPIO21
+#0d ADC_CH_GPIO22
+#0e ADC_CH_GPIO13
+
+#adc
+mem_device_vdd_full_vol:94 00		#1.5V
+78 00#mem_device_vdd_empty_vol  :0.9V
+80 00#mem_device_vdd_low_vol   :1.0V
+#mem_device_vdd_full_vol:e4 0c		#3.3V
+#b8 0b#mem_device_vdd_empty_vol  :3.0V
+#80 0c#mem_device_vdd_low_vol   :3.2V
+
+mem_adc_channel_gpio:0c
+#04
+#02
+#01
+#03
+#00
+#05
+#06
+#07
+
+# rf debug
+#bit7:0 means disable rf debug function
+#mem_rf_debug_rx_gpio:87
+#mem_rf_debug_tx_gpio:88
+
+mem_power_ctrl_disable:01
+
+##########################g24 addr #################################
+mem_24g_pair_addr_new:25 20 15 10
+mem_24g_ch_map_update:01   #00--disable   01--enable
+mem_24g_ch_update_map1:06 1a 3a 4d
+mem_24g_ch_update_map2:00 13 23 4c
+mem_24g_ch_update_map3:0f 2c 31 43 
+mem_24g_ch_update_map4:11 15 36 48
+
+##########################UART INIT#################################
+#mem_app_uart_tx_gpio:07
+#mem_app_uart_rx_gpio:ff
+#mem_app_uart_baud_rate:10 00	#d0=115200 10=1500000
+#mem_app_uart_tx_buff_sptr:mem_app_uart_tx_buff_start
+#mem_app_uart_tx_buff_eptr:mem_app_uart_tx_buff_end
+#mem_app_uart_rx_buff_sptr:mem_app_uart_rx_buff_start
+#mem_app_uart_rx_buff_eptr:mem_app_uart_rx_buff_end
+
+
+###########################auth data#######################
+mem_ms_auth_appkey:01 75 38 42 73 58 98
+mem_ms_auth_secret:
+1d a3 f4 a9 f4 fc 5a a6
+38 15 91 9c 51 65 e6 9e 
+
+#msm_ms_auth_sn:11 22 33 44 55 66
+#mem_ms_auth_chip_id:00 01
+mem_ms_version:01
+
+mem_mouse_device_type:
+'YC-AI-Mouse
+
+###########################audio demo#######################
+mem_ms_le_interval_min_voice:
+06 00 #min interval
+06 00 #max interval
+2b 00 #latency
+90 01 #timeout
+
+mem_ms_le_interval_min_new:
+06 00 #min interval
+09 00 #max interval
+20 00 #latency
+2c 01 #timeout
+
+mem_ms_audio_key_gpio:08
+mem_ms_one_pullup_key_gpio:0f
+mem_ms_transmit_key_gpio:0e
+
+mem_adc_dma_enable:00
+
+#mem_queue_ptr:mem_g_queue_each_size
+#mem_g_queue_each_size:01 20
+
+mem_adc_audio_saddr_ptr:mem_voice_raw_start
+mem_adc_audio_eaddr_ptr:mem_voice_raw_end
+
+mem_ad_indexTable1:ff ff ff ff 02 04 06 08 ff ff ff ff 02 04 06 08
+
+mem_ad_stepsizeTable1:
+07 00 00 00
+08 00 00 00
+09 00 00 00
+0a 00 00 00
+0b 00 00 00
+0c 00 00 00
+0d 00 00 00
+0e 00 00 00
+10 00 00 00
+11 00 00 00
+13 00 00 00
+15 00 00 00
+17 00 00 00
+19 00 00 00
+1c 00 00 00
+1f 00 00 00
+22 00 00 00
+25 00 00 00
+29 00 00 00
+2d 00 00 00
+32 00 00 00
+37 00 00 00
+3c 00 00 00
+42 00 00 00
+49 00 00 00
+50 00 00 00
+58 00 00 00
+61 00 00 00
+6b 00 00 00
+76 00 00 00
+82 00 00 00
+8f 00 00 00
+9d 00 00 00
+ad 00 00 00
+be 00 00 00
+d1 00 00 00
+e6 00 00 00
+fd 00 00 00
+17 01 00 00
+33 01 00 00
+51 01 00 00
+73 01 00 00
+98 01 00 00
+c1 01 00 00
+ee 01 00 00
+20 02 00 00
+56 02 00 00
+92 02 00 00
+d4 02 00 00
+1c 03 00 00
+6c 03 00 00
+c3 03 00 00
+24 04 00 00
+8e 04 00 00
+02 05 00 00
+83 05 00 00
+10 06 00 00
+ab 06 00 00
+56 07 00 00
+12 08 00 00
+e0 08 00 00
+c3 09 00 00
+bd 0a 00 00
+d0 0b 00 00
+ff 0c 00 00
+4c 0e 00 00
+ba 0f 00 00
+4c 11 00 00
+07 13 00 00
+ee 14 00 00
+06 17 00 00
+54 19 00 00
+dc 1b 00 00
+a5 1e 00 00
+b6 21 00 00
+15 25 00 00
+ca 28 00 00
+df 2c 00 00
+5b 31 00 00
+4b 36 00 00
+b9 3b 00 00
+b2 41 00 00
+44 48 00 00
+7e 4f 00 00
+71 57 00 00
+2f 60 00 00
+ce 69 00 00
+62 74 00 00
+ff 7f 00 00 
+
+# ###########################ble report map#######################
+# mem_ui_le_uuid_table_new:
+# 01 00 02 00 28 02 00 18 
+# 02 00 02 03 28 01 0a
+# 03 00 02 00 2a 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+# 04 00 02 03 28 01 02 05 00 02 01 2a 02 c2 03
+# 06 00 02 03 28 01 02 07 00 02 04 2a 08 06 00 06 00 64 00 2c 01
+# 08 00 02 00 28 02 01 18 09 00 02 03 28 01 20
+# 0a 00 02 05 2a 00 0b 00 02 02 29 02 00 00
+# 0c 00 02 00 28 02 0a 18 0d 00 02 03 28 01 02
+# 0e 00 02 29 2a 06 59 69 43 68 69 70 0f 00 02 03 28 01 02
+# 10 00 02 50 2a 07 02 8a 24 bb c0 01 00 
+
+# 11 00 02 00 28 02 0f 18
+# 12 00 02 03 28 01 12
+# 13 00 02 19 2a 01 64
+# 14 00 02 02 29 02 00 00
+# 15 00 02 03 28 01 04
+# 16 00 02 4c 2a 00
+
+# 17 00 02 00 28 02 12 18
+# 18 00 02 03 28 01 06 
+# 19 00 02 4e 2a 01 01
+# 1a 00 02 03 28 01 12 
+# 1b 00 02 4d 2a 08 00 00 00 00 00 00 00 00
+# 1c 00 02 02 29 02 00 00 
+# 1d 00 02 08 29 02 02 01
+# 1e 00 02 03 28 01 1a 
+# 1f 00 02 4d 2a 07 00 00 00 00 00 00 00
+# 20 00 02 02 29 02 00 00 
+# 21 00 02 08 29 02 01 01
+# 22 00 02 03 28 01 12 
+# 23 00 02 4d 2a 02 00 00
+# 24 00 02 02 29 02 00 00 
+# 25 00 02 08 29 02 05 01
+# 26 00 02 03 28 01 12 
+# 27 00 02 4d 2a 02 00 00
+# 28 00 02 02 29 02 00 00 
+# 29 00 02 08 29 02 04 01
+# 2a 00 02 03 28 01 0e 
+# 2b 00 02 4d 2a 02 00 00 
+# 2c 00 02 08 29 02 02 02
+
+# 2d 00 02 03 28 01 12
+# 2e 00 02 4d 2a 02 00 00
+# 2f 00 02 02 29 02 00 00
+# 30 00 02 08 29 02 C0 01
+# 31 00 02 03 28 01 12
+# 32 00 02 4d 2a 02 00 00
+# 33 00 02 02 29 02 00 00
+# 34 00 02 08 29 02 CC 01
+# 35 00 02 03 28 01 0e
+# 36 00 02 4d 2a 02 00 00
+# 37 00 02 08 29 02 C0 02
+
+# 38 00 02 03 28 01 1a
+# 39 00 02 33 2a 08 00 00 00 00 00 00 00 00
+# 3a 00 02 02 29 02 01 00
+# 3b 00 02 03 28 01 02
+# 3c 00 02 4a 2a 04 01 01 00 03
+
+# 3d 00 02 03 28 01 02 3e 00 02 4b 2a 20 01
+# 05 0C        # Usage Page (Consumer)
+# 09 01        # Usage (Consumer Control)
+# A1 01        # Collection (Application)
+# 85 05        # Report ID (5)
+# 15 00        # Logical Minimum (0)
+# 25 01        # Logical Maximum (1)
+# 75 01        # Report Size (1)
+# 95 18        # Report Count (24)
+# 0A 83 01     # Usage (AL Consumer Control Configuration)
+# 09 EA        # Usage (Volume Decrement)
+# 09 E9        # Usage (Volume Increment)
+# 09 E2        # Usage (Mute)
+# 09 B6        # Usage (Scan Previous Track)
+# 09 B5        # Usage (Scan Next Track)
+# 09 CD        # Usage (Play/Pause)
+# 09 B7        # Usage (Stop)
+# 0A 23 02     # Usage (AC Home)
+# 0A 8A 01     # Usage (AL Email Reader)
+# 0A 94 01     # Usage (AL Local Machine Browser)
+# 0A 2A 02     # Usage (AC Bookmarks)
+# 0A 92 01     # Usage (AL Calculator)
+# 0A 21 02     # Usage (AC Search)
+# 0A 24 02     # Usage (AC Back)
+# 0A 07 03     # Usage (0307)
+# 0A AE 01     # Usage (AL Keyboard Layout)
+# 09 70        # Usage (70)
+# 09 6F        # Usage (6F)
+# 09 30        # Usage (Power)
+# 09 B8        # Usage (Eject)
+# 0A 25 02     # Usage (AC Forward)
+# 0A 26 02     # Usage (AC Stop)
+# 0A 27 02     # Usage (AC Refresh)
+# 81 02        # Input (DataVarAbsNo WrapLinearPreferred StateNo Null Position)
+# C0           # End Collection
+# 05 01        # Usage Page (Generic Desktop Ctrls)
+# 09 06        # Usage (Keyboard)
+# A1 01        # Collection (Application)
+# 85 02        # Report ID (2)
+# 75 01        # Report Size (1)
+# 95 08        # Report Count (8)
+# 05 07        # Usage Page (Kbrd/Keypad)
+# 19 E0        # Usage Minimum (E0)
+# 29 E7        # Usage Maximum (E7)
+# 15 00        # Logical Minimum (0)
+# 25 01        # Logical Maximum (1)
+# 81 02        # Input (DataVarAbsNo WrapLinearPreferred StateNo Null Position)
+# 95 01        # Report Count (1)
+# 75 08        # Report Size (8)
+# 81 03        # Input (ConstVarAbsNo WrapLinearPreferred StateNo Null Position)
+# 95 05        # Report Count (5)
+# 75 01        # Report Size (1)
+# 05 08        # Usage Page (LEDs)
+# 19 01        # Usage Minimum (Num Lock)
+# 29 05        # Usage Maximum (Kana)
+# 91 02        # Output (DataVarAbsNo WrapLinearPreferred StateNo Null PositionNon-volatile)
+# 95 01        # Report Count (1)
+# 75 03        # Report Size (3)
+# 91 03        # Output (ConstVarAbsNo WrapLinearPreferred StateNo Null PositionNon-volatile)
+# 95 06        # Report Count (6)
+# 75 08        # Report Size (8)
+# 15 00        # Logical Minimum (0)
+# 26 FF 00     # Logical Maximum (255)
+# 05 07        # Usage Page (Kbrd/Keypad)
+# 19 00        # Usage Minimum (00)
+# 2A FF 00     # Usage Maximum (FF)
+# 81 00        # Input (DataArrayAbsNo WrapLinearPreferred StateNo Null Position)
+# C0           # End Collection
+# 05 01        # Usage Page (Generic Desktop Ctrls)
+# 09 02        # Usage (Mouse)
+# A1 01        # Collection (Application)
+# 85 01        # Report ID (1)
+# 09 01        # Usage (Pointer)
+# A1 00        # Collection (Physical)
+# 05 09        # Usage Page (Button)
+# 19 01        # Usage Minimum (01)
+# 29 08        # Usage Maximum (08)
+# 15 00        # Logical Minimum (0)
+# 25 01        # Logical Maximum (1)
+# 75 01        # Report Size (1)
+# 95 08        # Report Count (8)
+# 81 02        # Input (DataVarAbsNo WrapLinearPreferred StateNo Null Position)
+# 05 01        # Usage Page (Generic Desktop Ctrls)
+# 09 30        # Usage (X)
+# 09 31        # Usage (Y)
+# 16 01 F8     # Logical Minimum (-2047)
+# 26 FF 07     # Logical Maximum (2047)
+# 75 10        # Report Size (16)
+# 95 02        # Report Count (2)
+# 81 06        # Input (DataVarRelNo WrapLinearPreferred StateNo Null Position)
+# 09 38        # Usage (Wheel)
+# 15 81        # Logical Minimum (-127)
+# 25 7F        # Logical Maximum (127)
+# 75 08        # Report Size (8)
+# 95 01        # Report Count (1)
+# 81 06        # Input (DataVarRelNo WrapLinearPreferred StateNo Null Position)
+# 05 0C        # Usage Page (Consumer)
+# 0A 38 02     # Usage (AC Pan)
+# 95 01        # Report Count (1)
+# 81 06        # Input (DataVarRelNo WrapLinearPreferred StateNo Null Position)
+# C0           # End Collection
+# C0           # End Collection
+# 05 01        # Usage Page (Generic Desktop Ctrls)
+# 09 80        # Usage (Sys Control)
+# A1 01        # Collection (Application)
+# 85 04        # Report ID (4)
+# 15 00        # Logical Minimum (0)
+# 25 01        # Logical Maximum (1)
+# 75 01        # Report Size (1)
+# 95 03        # Report Count (3)
+# 19 81        # Usage Minimum (Sys Power Down)
+# 29 83        # Usage Maximum (Sys Wake Up)
+# 81 02        # Input (DataVarAbsNo WrapLinearPreferred StateNo Null Position)
+# 95 01        # Report Count (1)
+# 75 05        # Report Size (5)
+# 81 03        # Input (ConstVarAbsNo WrapLinearPreferred StateNo Null Position)
+# C0              # End Collection
+# 06 01 FF  # Usage Page (Vendor Defined FF01)
+# 09 01        # Usage (01)
+# A1 01        # Collection (Application)
+# 15 00        #   Logical Minimum (0)
+# 26 FF 00  #   Logical Maximum (255)
+# 75 08        #   Report Size (8)
+# 85 C0        #   Report ID (-64)
+# 95 3f        #   Report Count (63)
+# 09 02        #   Usage (02)
+# 81 00        #   Input (DataArrayAbsNo WrapLinearPreferred StateNo Null Position)
+# 95 3f        #   Report Count (63)
+# 09 03        #   Usage (03)
+# 91 02        #   Output (DataVarAbsNo WrapLinearPreferred StateNo Null PositionNon-volatile)
+# 85 CC        #   Report ID (-52)
+# 95 3f        #   Report Count (63)
+# 09 04        #   Usage (04)
+# 81 00        #   Input (DataArrayAbsNo WrapLinearPreferred StateNo Null Position)
+# 95 04        #   Report Count (4)
+# 09 05        #   Usage (05)
+# 91 02        #   Output (DataVarAbsNo WrapLinearPreferred StateNo Null PositionNon-volatile)
+# C0              # End Collection
+# # 288 bytes
+# 00 00
+# #811byte
Index: a.bat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/a.bat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/a.bat	(working copy)
@@ -0,0 +1,10 @@
+e pu
+e 8043 00
+
+::e hu output/romcode.rom 2000
+::e ku
+::e pu
+e hu output/ramcode.rom 0
+e pu
+e su output/sched.rom
+e cu
\ No newline at end of file
Index: ai_mouse_ble_att_uuid_list.dat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/ai_mouse_ble_att_uuid_list.dat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/ai_mouse_ble_att_uuid_list.dat	(working copy)
@@ -0,0 +1,821 @@
+01
+00
+02
+00
+28
+02
+00
+18
+02
+00
+02
+03
+28
+01
+0a
+03
+00
+02
+00
+2a
+14
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+04
+00
+02
+03
+28
+01
+02
+05
+00
+02
+01
+2a
+02
+c2
+03
+06
+00
+02
+03
+28
+01
+02
+07
+00
+02
+04
+2a
+08
+06
+00
+06
+00
+64
+00
+2c
+01
+08
+00
+02
+00
+28
+02
+01
+18
+09
+00
+02
+03
+28
+01
+20
+0a
+00
+02
+05
+2a
+00
+0b
+00
+02
+02
+29
+02
+00
+00
+0c
+00
+02
+00
+28
+02
+0a
+18
+0d
+00
+02
+03
+28
+01
+02
+0e
+00
+02
+29
+2a
+06
+59
+69
+43
+68
+69
+70
+0f
+00
+02
+03
+28
+01
+02
+10
+00
+02
+50
+2a
+07
+02
+8a
+24
+bb
+c0
+01
+00
+11
+00
+02
+00
+28
+02
+0f
+18
+12
+00
+02
+03
+28
+01
+12
+13
+00
+02
+19
+2a
+01
+64
+14
+00
+02
+02
+29
+02
+00
+00
+15
+00
+02
+03
+28
+01
+04
+16
+00
+02
+4c
+2a
+00
+17
+00
+02
+00
+28
+02
+12
+18
+18
+00
+02
+03
+28
+01
+06
+19
+00
+02
+4e
+2a
+01
+01
+1a
+00
+02
+03
+28
+01
+12
+1b
+00
+02
+4d
+2a
+08
+00
+00
+00
+00
+00
+00
+00
+00
+1c
+00
+02
+02
+29
+02
+00
+00
+1d
+00
+02
+08
+29
+02
+02
+01
+1e
+00
+02
+03
+28
+01
+1a
+1f
+00
+02
+4d
+2a
+07
+00
+00
+00
+00
+00
+00
+00
+20
+00
+02
+02
+29
+02
+00
+00
+21
+00
+02
+08
+29
+02
+01
+01
+22
+00
+02
+03
+28
+01
+12
+23
+00
+02
+4d
+2a
+02
+00
+00
+24
+00
+02
+02
+29
+02
+00
+00
+25
+00
+02
+08
+29
+02
+05
+01
+26
+00
+02
+03
+28
+01
+12
+27
+00
+02
+4d
+2a
+02
+00
+00
+28
+00
+02
+02
+29
+02
+00
+00
+29
+00
+02
+08
+29
+02
+04
+01
+2a
+00
+02
+03
+28
+01
+0e
+2b
+00
+02
+4d
+2a
+02
+00
+00
+2c
+00
+02
+08
+29
+02
+02
+02
+2d
+00
+02
+03
+28
+01
+12
+2e
+00
+02
+4d
+2a
+02
+00
+00
+2f
+00
+02
+02
+29
+02
+00
+00
+30
+00
+02
+08
+29
+02
+c0
+01
+31
+00
+02
+03
+28
+01
+12
+32
+00
+02
+4d
+2a
+02
+00
+00
+33
+00
+02
+02
+29
+02
+00
+00
+34
+00
+02
+08
+29
+02
+cc
+01
+35
+00
+02
+03
+28
+01
+0e
+36
+00
+02
+4d
+2a
+02
+00
+00
+37
+00
+02
+08
+29
+02
+c0
+02
+38
+00
+02
+03
+28
+01
+1a
+39
+00
+02
+33
+2a
+08
+00
+00
+00
+00
+00
+00
+00
+00
+3a
+00
+02
+02
+29
+02
+01
+00
+3b
+00
+02
+03
+28
+01
+02
+3c
+00
+02
+4a
+2a
+04
+01
+01
+00
+03
+3d
+00
+02
+03
+28
+01
+02
+3e
+00
+02
+4b
+2a
+20
+01
+05
+0c
+09
+01
+a1
+01
+85
+05
+15
+00
+25
+01
+75
+01
+95
+18
+0a
+83
+01
+09
+ea
+09
+e9
+09
+e2
+09
+b6
+09
+b5
+09
+cd
+09
+b7
+0a
+23
+02
+0a
+8a
+01
+0a
+94
+01
+0a
+2a
+02
+0a
+92
+01
+0a
+21
+02
+0a
+24
+02
+0a
+07
+03
+0a
+ae
+01
+09
+70
+09
+6f
+09
+30
+09
+b8
+0a
+25
+02
+0a
+26
+02
+0a
+27
+02
+81
+02
+c0
+05
+01
+09
+06
+a1
+01
+85
+02
+75
+01
+95
+08
+05
+07
+19
+e0
+29
+e7
+15
+00
+25
+01
+81
+02
+95
+01
+75
+08
+81
+03
+95
+05
+75
+01
+05
+08
+19
+01
+29
+05
+91
+02
+95
+01
+75
+03
+91
+03
+95
+06
+75
+08
+15
+00
+26
+ff
+00
+05
+07
+19
+00
+2a
+ff
+00
+81
+00
+c0
+05
+01
+09
+02
+a1
+01
+85
+01
+09
+01
+a1
+00
+05
+09
+19
+01
+29
+08
+15
+00
+25
+01
+75
+01
+95
+08
+81
+02
+05
+01
+09
+30
+09
+31
+16
+01
+f8
+26
+ff
+07
+75
+10
+95
+02
+81
+06
+09
+38
+15
+81
+25
+7f
+75
+08
+95
+01
+81
+06
+05
+0c
+0a
+38
+02
+95
+01
+81
+06
+c0
+c0
+05
+01
+09
+80
+a1
+01
+85
+04
+15
+00
+25
+01
+75
+01
+95
+03
+19
+81
+29
+83
+81
+02
+95
+01
+75
+05
+81
+03
+c0
+06
+01
+ff
+09
+01
+a1
+01
+15
+00
+26
+ff
+00
+75
+08
+85
+c0
+95
+3f
+09
+02
+81
+00
+95
+3f
+09
+03
+91
+02
+85
+cc
+95
+3f
+09
+04
+81
+00
+95
+04
+09
+05
+91
+02
+c0
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+
Index: auth_write.bat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/auth_write.bat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/auth_write.bat	(working copy)
@@ -0,0 +1,11 @@
+e pu
+e 8043 0
+e 0x8070 00000000000000000
+e 80d7 3e
+e 80d8 6c
+e 80d9 6d
+
+e er 3b02 8
+e ew 3b02 666666666666
+e ew 3b08 0100
+e er 3b02 8
Index: do.bat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/do.bat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/do.bat	(working copy)
@@ -0,0 +1,110 @@
+@set FPGA_PATH=fpgajic\fpga
+@set ROM_PATH=.
+@set MV_PATCH=mv\src\yichip
+@set YC_PATCH_FILE=yc_patch_yc1021.h
+@set enc=1
+@set enckey=0000000000000000
+@rem set device_option=rfbqb
+@set device_option=mouse
+@rem set device_option=shutter
+@rem set device_option=shutter_dy
+@rem set device_option=hci
+@rem set device_option=antilost
+@rem set device_option=dongle
+@rem set device_option=module
+@rem set device_option=keyboard
+@rem set device_option=car
+@rem set device_option=remote_car
+@rem set device_option=mesh
+@rem set device_option=otp
+@rem set device_option=remote_control
+@echo off
+
+set now_path=%~dp0
+set util_path=%now_path%util
+
+setlocal enabledelayedexpansion
+for %%f in (program\ble_protocol_stack\*.prog) do @set progs=!progs! %%f
+for %%f in (program\g24_protocol_stack\*.prog) do @set progs=!progs! %%f
+for %%f in (program\mesh_protocol_stack\*.prog) do @set progs=!progs! %%f
+for %%f in (program\*.prog) do @if not %%f==program\bt.prog if not %%f==program\patch.prog if not %%f==program\sim.prog set progs=!progs! %%f
+type program\bt.prog %progs% %light_progs% > output\bt_program23.meta
+
+for %%f in (format\ble_protocol_stack\*.format) do set fmts=!fmts! %%f
+for %%f in (format\g24_protocol_stack\*.format) do set fmts=!fmts! %%f
+for %%f in (format\mesh_protocol_stack\*.format) do set fmts=!fmts! %%f
+for %%f in (format\*.format) do @if not %%f==format\bt.format if not %%f==format\command.format set fmts=!fmts! %%f
+type format\bt.format %fmts% format\command.format > output\bt_format.meta
+::perl util/memalloc.pl output/bt_format.meta
+
+if "%device_option%" equ "hci" (
+  copy sched\hci_boot.dat output\sched.rom
+) else if "%device_option%" equ "keyboard" (
+  copy sched\keyboard.dat + sched\1305.dat output\sched.rom
+) else if "%device_option%" equ "mouse" (
+  copy sched\mouse.dat + sched\1305.dat +sched\mouse_sensor.dat output\sched.rom
+) else if "%device_option%" equ "module" (
+  copy sched\DM_module.dat + sched\1305.dat output\sched.rom
+) else if "%device_option%" equ "shutter" (
+  copy sched\shutter.dat + sched\1305.dat output\sched.rom
+) else if "%device_option%" equ "shutter_dy" (
+  copy sched\shutter_dy.dat + sched\1305.dat output\sched.rom
+) else if "%device_option%" equ "antilost" (
+  copy sched\antilost.dat + sched\1305.dat output\sched.rom
+) else if "%device_option%" equ "dongle" (
+  copy sched\dongle.dat + sched\1305.dat output\sched.rom
+) else if "%device_option%" equ "car" (
+  copy sched\car.dat + sched\1305.dat output\sched.rom
+) else if "%device_option%" equ "remote_car" (
+  copy sched\remote_car.dat + sched\1305.dat output\sched.rom
+ ) else if "%device_option%" equ "mesh" (
+  copy sched\1305.dat +sched\mesh.dat output\sched.rom
+) else if "%device_option%" equ "otp" (
+  copy sched\1305.dat output\sched.rom
+) else if "%device_option%" equ "remote_control" (
+  copy sched\rec.dat + sched\1305.dat output\sched.rom
+)else  (
+
+cd ..
+echo **********************************
+echo Error: illegal device_option !
+echo **********************************
+goto end
+) 
+
+perl util/mergepatch.pl 
+
+cd output
+osiuasm bt_program23 -O-W
+
+
+%util_path%/geneep  -n -s -i -z
+
+echo create auth rom
+perl ../util/mergepatch.pl mouse_ble_att_list usb_kbdata_vendor_define usb_kbdata usb_msdata usb_devicedata usb_confdata keyboard_ble_hid_map_only_keyboard keyboard_ble_hid_map_magic_keyboard keyboard_ble_hid_map_n_key_rollover_keyboard ble_shutter_gatt_list ble_shutter_key_value_list   
+perl ../util/romcrc.pl romcode.rom
+perl  ../util/mergepatch.pl otp
+::perl ../util/otpcheck.pl 
+echo.
+
+
+if "%device_option%" equ "mouse" (
+cd ..\output
+copy eeprom.dat ..\util\eeprom.dat
+cd ..\util
+eeprom2fulleeprom.exe eeprom.dat 64>compare2.dat
+crc16.exe compare2.dat 2 >..\output\eeprom.dat
+del eeprom.dat
+del compare2.dat
+cd ..\output
+copy eeprom.dat ..\output\flash.dat 
+)
+
+cd ..
+call set_chip_type_flag.bat 
+call merge_ble_uud_list_files.bat
+
+:end
+
+
+
Index: empty.dat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/empty.dat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/empty.dat	(working copy)
@@ -0,0 +1,4096 @@
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
+FF
Index: ep.bat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/ep.bat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/ep.bat	(working copy)
@@ -0,0 +1,37 @@
+call do.bat eep
+set baud=a0
+e pu
+e 8043 0
+e 0x8070 00000000000000000
+e 80d7 3e
+e 80d8 6c
+e 80d9 6d
+::e 80d9 3e
+::e 80da 6c
+::e 80db 6d
+
+e er 0 10
+e ep empty.dat 0
+e ep empty.dat 1000
+e ep empty.dat 2000
+e ep empty.dat 3000
+@REM e ep empty.dat 4000
+e er 0 10
+
+e er 3b02 8
+e ew 3b02 665544332211
+e ew 3b08 0100
+e er 3b02 8
+
+@REM e er 3400 20
+@REM e ep ai_mouse_ble_att_uuid_list.dat 3400
+@REM e er 3400 20
+
+::e 8071 6c6d3e
+e er 0 10
+e ew 0 112233
+e er 0 10
+e ep output/eeprom.dat 0
+e er 0 20
+e er 3400 20
+e ku
Index: ep_empty.bat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/ep_empty.bat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/ep_empty.bat	(working copy)
@@ -0,0 +1,17 @@
+set baud=a0
+e pu
+e 8043 0
+e 80d7 3e
+e 80d8 6c
+e 80d9 6d
+e er 0 10
+e ew 0 112233
+e er 0 10
+e ep empty.dat 0
+e ep empty.dat 1000
+e ep empty.dat 2000
+e ep empty.dat 3000
+e ep empty.dat 4000
+e er 0 10
+e ku
+e au
Index: format/app.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/app.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/app.format	(working copy)
@@ -0,0 +1,379 @@
+
+memalloc(
+
+/* load code */
+1 mem_ucode_status
+1 mem_spid_tbuf				/* spid buf: 03 addr[23:16] addr[15:8] addr[7:0] */
+0 mem_iicd_tbuf				/* iicd buf: iic_adr addr[15:8] addr[7:0] iic_adr */
+1 mem_addr_hi
+1 mem_addr_mi
+1 mem_addr_lo
+1 mem_iicd_addr
+4 mem_spid_rbuf
+2 mem_ucode_buf
+2 mem_ucode_len
+2 mem_sched_addr
+16 mem_ucode_keybuf
+
+32 mem_otp_temp
+
+1 mem_app_evt_timer_count
+)
+
+xmemalloc(
+2 mem_ucode_ptr
+1 mem_ucode_flag
+1 mem_device_option
+1 mem_peripheral_lock_flag
+0 mem_bistfix_val
+2 mem_bistfix_addr_sched
+2 mem_bistfix_addr_x
+2 mem_bistfix_addr_patch
+1 mem_bistfix_val_xram
+4 mem_bistfix_val_patchram
+
+/*App Callback Functons*/
+2 mem_cb_check_wakelock
+2 mem_cb_before_hibernate
+2 mem_cb_before_lpm
+2 mem_cb_le_process
+2 mem_cb_idle_process
+2 mem_cb_bb_event_process
+2 mem_cb_att_write
+2 mem_cb_ble_transmit
+2 mem_cb_event_timer
+2 mem_cb_bt_set_mult
+2 mem_cb_spi_flash_write_complate
+2 mem_cb_before_lpm_sleep
+
+2 mem_eeprom_base
+
+//lpm mode
+1 mem_wake_up_delay_timer
+
+1 mem_app_connection_options
+
+//
+2 mem_app_disconn_reason
+2 mem_app_disconn_reason_flag
+1 mem_xrecord_mode
+
+1 mem_eeprom_block_size
+1 mem_spi_init_clk
+1 mem_spi_init_delay_time
+1 mem_spi_ncs_gpio
+
+2 mem_nv_data_ptr
+1 mem_nv_data_number
+
+2 mem_queue_ptr
+
+
+//adc
+
+2 mem_reference_inter1p8v_2v_adc_io_data
+2 mem_reference_inter1p8v_2p6v_adc_vdcdc_data
+2 mem_reference_inter1p8v_1v_adc_io_data
+2 mem_reference_inter1p8v_4p6v_adc_vdcdc_data
+
+0 mem_adc_reference3v_ft_data	
+2 mem_adc_reference3v_gpio1v_ft_data	
+2 mem_adc_reference3v_gpio2v_ft_data	
+2 mem_adc_reference3v_vdcdc3p6v_ft_data	
+2 mem_adc_reference3v_vdcdc4p6v_ft_data	
+2 mem_adc_reference3v_inter1v_ft_data
+2 mem_adc_reference3v_inter1v_now_data	
+1 mem_adc_reference_mode
+
+2 mem_reference_voltage
+1 mem_adc_config_flag
+1 mem_adc_channel
+1 mem_adc_clkdiv
+2 mem_adc_current_value
+1 mem_adc_power_flag	//bit0:low power falg ; bit1:no power flag
+2 mem_adc_saddr_ptr
+2 mem_adc_eaddr_ptr
+1 mem_adc_dma_enable
+1 mem_adc_cal_c0
+1 mem_adc_cal_c1
+1 mem_adc_cal_c2
+1 mem_adc_cal_c3
+1 mem_adc_cal_c4
+1 mem_adc_cal_c5
+1 mem_adc_cal_c6
+1 mem_adc_cal_c7
+
+3 mem_spi_write_addr
+2 mem_spi_write_ptr
+2 mem_spi_write_len
+1 mem_spi_write_flash_sm
+
+
+1 mem_spi_cs_gpio
+1 mem_spi_si_gpio
+1 mem_spi_so_gpio
+1 mem_spi_sclk_gpio
+1 mem_spi_wp_gpio
+1 mem_spi_hold_gpio
+
+
+1 mem_eeprom_wp_gpio
+1 mem_eeprom_scl_gpio
+1 mem_eeprom_sda_gpio
+2 mem_kscan_ptr
+0 mem_key_num_ptr
+2 mem_keyscan_ptr
+2 mem_key_value_retention
+2 mem_power_param_ptr
+
+1 mem_seqi
+1 mem_set_cdb_on
+1 mem_syn_cal_ctrl
+
+1 mem_nec_decode_error_value
+
+ifdef AC_50HZ
+1 mem_ac_detect_gpio
+0 mem_ac_detect_control
+1 mem_ac_detect_div
+1 mem_ac_detect_window
+endif
+
+1 mem_wdt_always_work
+
+1 mem_power_ctrl_disable
+
+1 mem_ring_ibias_trim
+2 mem_ring_ibias_vtune_low
+2 mem_ring_ibias_vtune_high
+1 mem_ring_ibias_calc_adc_gpio
+1 mem_ring_ibias_calc_adc_channel
+)
+
+
+(
+0 QUEUE_OFFSET_EACH_SIZE
+1 QUEUE_OFFSET_LENGTH
+2 QUEUE_OFFSET_CURR_NUM
+3 QUEUE_OFFSET_READ_PTR
+4 QUEUE_OFFSET_WRITE_PTR
+5 QUEUE_OFFSET_ELE_INIT_ADDR
+)
+(
+//Flash Register
+0x05 FLASH_READ_SATUS
+
+// Flash Status Register
+0x00 FLASH_STATUS_WIP
+0X01 FLASH_STATUS_WEL
+0X02 FLASH_STATUS_BP0
+0X03 FLASH_STATUS_BP1
+
+//Flash Write Sm
+0X00 FLASH_SM_NO_BUYS
+0X01 FLASH_SM_START
+0X02 FLASH_SM_ERASE_SECTOR
+0X03 FLASH_SM_WAIT_ERASE_SECTOR
+0X04 FLASH_SM_WRITE_DATA
+0X05 FLASH_SM_WAIT_WRITE_DATA
+
+
+//Flash Command
+0x02 FLASH_COMMAND_WRITE_DATA
+0x03 FLASH_COMMAND_READ_DATA
+0x06 FLASH_COMMAND_WRITE_ENABLE
+0x20 FLASH_COMMAND_SECTOR_ERASE
+0x81 FLASH_COMMAND_PAGE_ERASE
+0xAB FLASH_COMMAND_RELEASE_FROM_POWERDOWN
+0xB9 FLASH_COMMAND_POWERDOWN
+
+)
+
+
+(
+7 OTP_UFLAG_MEMFIX2
+6 OTP_UFLAG_MEMFIX1
+5 OTP_UFLAG_MEMFIX0
+4 OTP_UFLAG_BIST
+3 OTP_UFLAG_AES
+2 OTP_UFLAG_SKIP_EEP
+1 OTP_UFLAG_SKIP_FLASH
+0 OTP_UFLAG_HCI
+)
+
+amemalloc mem_otp_temp(
+	8 mem_otp_adc
+	1 mem_otp_adc_ratio
+	7 mem_otp_coordinate
+	1 mem_otp_core_ldo
+	1 mem_otp_verf_bg
+	1 mem_otp_charge_pump
+	1 mem_otp_dpll_ibais
+	8 mem_otp_temp1
+	1 mem_otp_hv_sel
+	1 mem_otp_ldo_vsel
+	1 mem_otp_load_delay
+	1 mem_otp_load_check_sum
+)
+
+
+//OTP
+(
+0 OTP_OFFSET_PATCH_PTR //2 byte
+2 OTP_OFFSET_UCODE_FLAG
+3 OTP_OFFSET_DEVICE_OPTION
+4 OTP_OFFSET_PERIPHERALS_LOCK
+5 OTP_OFFSET_SCHED_BISTFIX 	//2 byte
+7 OTP_OFFSET_XRAM_BISTFIX	//2 byte
+9 OTP_OFFSET_PATCH_BISTFIX	//2 byte
+
+0xfc0 OTP_OFFSET_ADC_PARAM_L_C0
+
+0xfd0 OTP_OFFSET_ADC_PARAM_L
+0xff0 OTP_OFFSET_UCODE_KEY_L
+0x1000 OTP_OFFSET_H
+
+//0x1fd0 OTP_OFFSET_ADC_PARAM
+//0x1fec OTP_OFFSET_HV_SEL
+//0x1fed OTP_OFFSET_LDO_VSEL
+//0x1fee OTP_OFFSET_LOADCODE_DELAY
+//0x1fef OTP_OFFSET_LOADCODE_CHECKSUM
+0x1ff0 OTP_OFFSET_UCODE_KEY
+)
+
+
+
+/*mem_device_option*/
+(
+1 DVC_OP_2G4
+2 DVC_OP_BLE
+
+4 DVC_OP_DONGLE
+5 DVC_OP_TEST
+6 DVC_OP_SHUTTER_DY   
+7 DVC_OP_MOUSE_2G4
+8 DVC_OP_MOUSE
+9 DVC_OP_SHUTTER
+0X0A DVC_OP_MODULE
+0X0b DVC_OP_REMOTE_CONTROL
+0X0C DVC_OP_HCI_BOOT
+0X0D DVC_OP_REMOTE_CAR
+0X0E DVC_OP_CAR
+0X0F DVC_OP_KEYBOARD   
+)
+
+
+(
+7 GPIO_ACTIVE_BIT
+)
+
+(
+5 LPM_WAKE_UP_DELAY_TIMER
+)
+
+
+//mem_app_disconn_reason
+//mem_app_disconn_reason_flag
+//bit map
+(
+2 APP_DISC_RSN_SIZE
+)
+
+(
+0 APP_DISC_BY_BUTTON
+7 APP_DISC_BLE
+)
+
+//eeprom init flag
+(
+0xaa55 EEPROM_INIT_FLAG
+)
+
+(
+1 KEY_CONF_STRUCT_LEN
+0 KEY_PIN_OFFSET
+)
+
+(
+12000000 PWM_12MHZ
+24000000 PWM_24MHZ
+33000 PWM_33KHZ
+)
+(
+0 POWER_OFF
+1 POWER_STARTING
+2 POWER_STANDBY
+)
+//power parameter offset(8 byte)
+(
+0 power_state_offset
+1 power_timer_offset
+2 power_off_timeout_offset
+3 power_starting_timeout_offset
+4 power_off_cb_offset
+6 power_starting_cb_offset
+8 power_standby_cb_offset
+10 ui_butten_up_cb_offset
+)
+
+//auth rom address
+(
+0x9000 MOUSE_BLE_ATT_LIST_ADDR
+0x92aa USB_KBDATA_VENDOR_DEFINE_ADDR
+0x92c5 USB_KBDATA_ADDR
+0x9307 USB_MSDATA_ADDR
+0x93fb USB_DEVICEDATA_ADDR
+0x940e USB_CONFDATA_ADDR
+0x944a KEYBOARD_BLE_HID_MAP_ONLY_KEYBOARD_ADDR
+0x94fc KEYBOARD_BLE_HID_MAP_MAGIC_KEYBOARD_ADDR
+0x95b8 KEYBOARD_BLE_HID_MAP_N_KEY_ROLLOVER_KEYBOARD_ADDR
+0x9684 BLE_SHUTTER_GATT_LIST_ADDR
+0x97bd BLE_SHUTTER_KEY_VALUE_LIST_ADDR
+0x97e5 BLE_CAR_ATT_LIST_ADDR
+0x97fc mem_sim_slave
+)
+
+(//NEC 61212
+9000 NEC61212_BOOT_CODE_START_TIME
+4500 NEC61212_BOOT_CODE_END_TIME
+
+9000 NEC61212_REPEAT_START_TIME
+2250 NEC61212_REPEAT_END_TIME
+
+560 NEC61212_DATA_BIT_1_START_TIME
+1690 NEC61212_DATA_BIT_1_END_TIME
+
+560 NEC61212_DATA_BIT_0_START_TIME
+560 NEC61212_DATA_BIT_0_END_TIME
+
+560 NEC61212_STOP_TIME
+
+42580 NEC61212_DATA2REPEAT_TIME
+98190 NEC61212_REPEAT2REPEAT_TIME
+
+0xffff NEC61212_TIMEOUT_TIME
+)
+
+//core_perf_status
+(
+1 CLK_CALIBRATION_DONE
+2 RC_CLK_CALIBRATION_DONE
+3 AES_DEC_KEY_INIT_DONE
+4 MEASURE_ADC_SUM_DONE
+5 SARADC_DONE
+)
+
+//ADC
+(
+1 ADC_CONFIG_HVIN
+2 ADC_CONFIG_GPIO
+)
+
+
+//mem_adc_reference_mode 
+(
+1 SADC_REFERENCE_INTER3V
+2 SADC_REFERENCE_INTER1P8V_DIV2
+)
+
+
Index: format/app_adpcm.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/app_adpcm.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/app_adpcm.format	(working copy)
@@ -0,0 +1,22 @@
+
+xmemalloc g24_rx_car_adpcm(
+	16 mem_ad_indexTable
+	356 mem_ad_stepsizeTable
+
+	4 mem_ad_state_valpred
+	4 mem_ad_state_index
+	1 mem_ad_in_numSamples
+	2 mem_ad_in_ptr
+	2 mem_ad_out_ptr
+	1 mem_ad_sign
+	1 mem_ad_delta
+	4 mem_ad_step
+	4 mem_ad_valpred
+	4 mem_ad_index
+	4 mem_ad_vpdiff
+	4 mem_ad_inputbuffer
+	1 mem_ad_bufferstep
+)
+
+
+
Index: format/app_car.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/app_car.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/app_car.format	(working copy)
@@ -0,0 +1,104 @@
+
+
+xmemalloc g24_rx_car(
+1 mem_car_le_24g_tx_pair_mode
+2 mem_car_le_24g_ch_count
+4 mem_car_24g_addr_other
+12 mem_car_24g_tx_payload_temp
+12 mem_car_24g_rx_payload_temp
+
+1 mem_car_24g_loselink_count
+1 mem_car_ble_connted_flag
+4 mem_car_full_control_remote_lap
+2 mem_100ms_adv_control_timer
+2 mem_100ms_factory_test_control_timer
+	
+1 mem_pwm_flag	
+1 mem_period_count
+1 mem_timer_count
+1 mem_car_motor_gpio_num
+0 mem_car_motor_gpio_map
+1 mem_car_motor_left_gpio
+1 mem_car_motor_right_gpio
+1 mem_car_motor_front_gpio
+1 mem_car_motor_back_gpio
+1 mem_car_pwm_gpio
+
+
+6 mem_otp_lot_xy_temp
+1 mem_f_flag
+1 mem_b_flag
+1 mem_adv_control_start_flag  
+1 mem_stop_4w1_flag 
+1 mem_factory_control_flag
+1 mem_car_gpio_control_mode
+
+1 mem_car_le_queue_each_size
+1 mem_car_le_queue_length
+1 mem_car_le_queue_current_num
+1 mem_car_le_queue_read_ptr
+1 mem_car_le_queue_write_ptr
+80 mem_car_le_queue_ele
+11 mem_car_ble_write_data
+400 mem_car_ble_att_list
+
+60 mem_otp_sys_cfg_temp
+
+)
+
+
+(
+0 TURN_FRONT
+1 TURN_LEFT
+2 TURN_RIGHT
+0 MOTOR_STOP
+1 GO_FRONT
+2 GO_BACK
+0x6b5a LE_RECEIVE_PACKET_HEAD
+)
+
+(
+1 CAR_CMD_BATTERY
+2 CAR_CMD_OLD_CAR_CONTROL
+3 CAR_CMD_OLD_SPEED_CONTROL
+4 CAR_CMD_L_R_MOTOR_CONTROL
+5 CAR_CMD_F_B_MOTOR_CONTROL
+6 CAR_CMD_IR_CONTROL
+7 CAR_CMD_LED_CONTROL
+8 CAR_CMD_DEVICE_INFO
+)
+
+(
+0x0e HANDLE_OF_NOTIFY
+0x11 HANDLE_OF_WRITE
+)
+
+(
+0 G24_UNCONNECT
+1 G24_CONNECTED
+)
+
+(
+12 LEN_OF_24G_PAYLOAD
+11 LEN_OF_ACK_PAYLOAD
+)
+
+
+(
+0XAA G24_TX_PAIR_REQUEST
+0XBB G24_RX_PAIR_RESPONES
+0XCC G24_TX_REMOTE_CONTROL
+0XDD G24_RX_CONTROL_ACK
+0XEE G24_ERROR
+0xFF INVALID_PIN_NUM
+0 POWER_ON
+1 WORK_PAIRED
+2 WORK_SEARCH
+)
+
+(
+0x1f00 OTP_SYS_PARAM_CFG
+0x1fda OTP_MAC_ADDR
+0X1fdb OTP_MAC_ADDR_PIECENUM
+)
+
Index: format/app_dongle.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/app_dongle.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/app_dongle.format	(working copy)
@@ -0,0 +1,142 @@
+
+memalloc usb_dongle(
+256 mem_dg_rssi_noise_buffer
+256 mem_dg_rssi_noise_dg_buffer
+256 mem_dg_rssi_noise_ms_buffer
+256 mem_dg_rssi_noise_kb_buffer
+
+)
+
+
+xmemalloc g24_rx_dongle(
+1 mem_dg_kb_bind_flag
+8 mem_dg_kb_data_sta_data
+8 mem_dg_kb_data_last_data
+3 mem_dg_kb_multikey_sta_data
+3 mem_dg_kb_multikey_last_data
+3 mem_dg_kb_system_sta_data
+3 mem_dg_kb_system_last_data
+1 mem_dg_kb_blank_data_enable
+1 mem_dg_kb_mul_blank_data_enable
+1 mem_dg_kb_system_crtl_blank_data_enable
+1 mem_dg_ms_blank_data_enable
+
+1 mem_dg_sys_config
+9 mem_dg_usb_vid_pid
+1 mem_dg_usb_tx_interval
+32 mem_dg_usb_device_name
+1 mem_dg_kb_bind_success
+1 mem_dg_pc_sleep_flag
+
+1 mem_dg_24g_tx_power_default
+1 mem_dg_kb_bit_consumer_blank_data_enable
+4 mem_dg_kb_bit_consumer_sta_data
+4 mem_dg_kb_bit_consumer_last_data
+4 mem_dg_device_version
+)
+
+
+//otp address offset
+(
+0x5A DONGLE_KB_BIND_SUCCESS
+0x1fdf DONGLE_KB_BIND_EFUSE_OFFECT
+0x1fc0 DONGLE_KB_BIND_OTP_OFFECT
+)
+
+(
+5 WORK_MODE_DELAY
+7 BIND_MODE_DELAY
+)
+
+(
+0 DONGLE_WORK	   		//connect mode normal
+1 DONGLE_BIND			//code pair mode
+2 DONGLE_TEST			//test mode
+3 DONGLE_CODE			//PC_application
+4 DONGLE_PCBA			//PCBA_TEST
+5 DONGLE_DEBUG
+6 DONGLE_MODE_MAX
+7 DONGLE_SEARCH
+0 CLEAR_INIT
+)
+
+
+(
+0xa0 COMMAND_MODE     //BYTE 0
+0x81 COM_MODE_BIND	//BYTE 1
+0x82 COM_MODE_TEST	//BYTE 1
+)
+(
+0xa1 COMMAND_BIND		//BYTE 0
+0x01 COM_BIND_GET		//1
+0x84 COM_BIND_EXIT		//1
+0xa7 COM_READ_MODE		//1
+)
+(
+0xa2 COMMAND_TEST	//BYTE 0
+0x81 COM_TEST_SC		//	뵥ز
+0x82 COM_TEST_CD		// fcc
+0x83 COM_TEST_DAT		// ݲ
+0x84 COM_TEST_LOW_CH  //Ƶ
+0x85 COM_TEST_MID_CH	//Ƶ
+0x86 COM_TEST_HIG_CH	//Ƶ
+0x87 COM_TEST_SW_HIG	//ԶлƵΪ 1mhz
+0x88 COIM_TEST_SW_LOW	//ԶлƵΪ 1mhz
+0x89 COM_TEST_SW_STOP	//ֹͣԶлƵ
+0x8a COM_TEST_POW_5		//5dbm
+0x8b COM_TEST_POW_0		//0dbm
+0x8c COM_TEST_POW_N5		//-5dbm
+0x8d COM_TEST_POW_N10		//-10dbm
+0x8e COM_TEST_EXIT			//˳ģʽ
+)
+(
+0xa6 COMMAND_CURRENT_PROJECT
+0xa7 COMMAND_CURRENT_MODE
+0xa9 COMMAND_CURRENT_FW_VERSION
+0xb0 COMMAND_USER_DEFINED		//user defined cmd
+)
+
+(
+0x15 PRODUCT_ID
+0 FW_VERSION0
+0 FW_VERSION1
+1 FW_VERSION2
+7 FW_VERSION3
+)
+
+(
+640 TIMER_NODATA_DELAY	//200ms
+
+384 TIMER_MS_BLANK_DELAY
+
+384 TIMER_KB_MUL_BLANK_DELAY
+
+384 TIMER_KB_SYS_CRTL_BLANK_DELAY
+
+384 TIMER_KB_BLANK_DELAY
+)
+
+(
+0 KB_NORMAL_REPORT_ID
+1 MS_REPORT_ID
+2 KB_SYSTEM_CONCTRL_REPORT_ID
+3 KB_MULTIKEY_REPORT_ID
+5 KB_BIT_CONSUMER_REPORT_ID
+8 KB_N_KEY_ROLLOVER_REPORT_ID
+)
+
+
+(
+0x01 BIND_ACKPAYLOAD
+0x03 KB_LED_ACKPAYLOAD
+)
+
+//mem_dg_sys_config
+(
+7 DG_ENABLE_XTAL_24M
+6 DG_ENABLE_NEW_CHMAP
+5 DG_ENABLE_EEPROM
+4 DG_ENABLE_KB_ICON
+3 DG_ENABLE_24G_2M
+)
+
Index: format/app_kb.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/app_kb.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/app_kb.format	(working copy)
@@ -0,0 +1,558 @@
+xmemalloc g24_tx_hid_keyboard(
+1 mem_power_on_flag
+8 mem_keyboard_flag
+
+//switch device
+1 mem_keyboard_switch_count_temp
+3 mem_keyboard_switch_device_to_g24
+3 mem_keyboard_switch_device_to_bt1
+3 mem_keyboard_switch_device_to_bt2
+3 mem_keyboard_switch_device_to_bt3
+3 mem_keyboard_switch_device_to_usb
+1 mem_keyboard_switch_device_flag
+1 mem_keyboard_switch_g24_enable
+1 mem_keyboard_switch_bt_enable
+1 mem_keyboard_switch_g24_press_timer
+1 mem_keyboard_switch_bt_press_timer
+
+
+//adc
+2 mem_keyboard_vdd_full_vol
+2 mem_keyboard_vdd_empty_vol
+2 mem_keyboard_vdd_low_vol
+1 mem_keyboard_power_type
+
+//pwm
+6 mem_rgb_pwm_conf
+1 mem_rgb_pwm_breathe_flag
+1 mem_rgb_on_color_temp
+7 mem_rgb_on_color
+1 mem_pwm_lpm_mode_flag
+2 mem_keyboard_rgb_on_timer
+4 mem_ui_check_timer_setup
+2 mem_customize_timer_setup
+1 mem_backlight_breathe_type
+
+//le
+3 mem_keyboard_le_lap_temp
+1 mem_keyboard_le_change_vid_pid_flag
+1 mem_keybaord_le_pnp_vid_source
+2 mem_keyboard_le_vid
+2 mem_keyboard_le_pid
+2 mem_keyboard_le_product_version
+2 mem_keyboard_le_hid_map
+22 mem_keyboard_blob_response_consumer_customize
+16 mem_le_search_service_uuid
+1 mem_le_connect_ios_mac_flag
+2 mem_le_search_mac_uuid
+9 mem_le_search_mac_manu_name
+2 mem_keybord_appearance
+
+//le conn param update
+1 mem_keyboard_le_send_conn_param_update
+1 mem_keyboard_le_send_conn_param_update_timer
+1 mem_le_start_auto_reco_timer
+
+//gpio
+1 mem_keyboard_pb_button_gpio
+1 mem_mcu_stb_gpio
+1 mem_mcu_clk_gpio
+1 mem_mcu_rstb_gpio
+1 mem_keyboard_num_led_gpio
+1 mem_keyboard_caps_led_gpio
+1 mem_keyboard_scroll_led_gpio
+1 mem_keyboard_power_led_gpio
+1 mem_keyboard_low_voltage_alarm_gpio
+1 mem_keyboard_24g_led_gpio
+1 mem_keyboard_bt1_led_gpio
+1 mem_keyboard_bt2_led_gpio
+1 mem_keyboard_bt3_led_gpio
+
+1 mem_keyboard_led_r_gpio
+1 mem_keyboard_led_g_gpio
+1 mem_keyboard_led_b_gpio
+
+8 mem_key_row_gpio
+21 mem_key_col_gpio
+12 mem_key_excol_gpio
+2 mem_kb_row_ptr
+2 mem_kb_col_ptr
+2 mem_kb_excol_ptr
+
+// keyscan
+21 mem_keyscan_value_current
+21 mem_keyscan_value_check
+21 mem_keyscan_value_old
+11 mem_keyscan_exmcu_value
+2 mem_keyscan_value_ptr
+2 mem_keyscan_exmcu_value_ptr
+1 mem_keyscan_value_temp
+1 mem_keyscan_col_loop_count
+2 mem_keyscan_exmcu_wait_wake_count
+
+1 mem_same_keyvalue_timerout_flag
+2 mem_same_keyvalue_timer_init
+2 mem_same_keyvalue_timer
+
+1 mem_keyboard_current_col_press_key_count
+1 mem_keyboard_all_press_key_count
+1 mem_keyboard_same_row_press_key_count
+1 mem_keyboard_ghost_flag
+1 mem_keyboard_data_change_flag
+1 mem_keyboard_keyvalue_temp
+1 mem_keyboard_press_flag_temp
+1 mem_keyboard_keyvalue_bit_loop_count
+10 mem_keyboard_keyvalue_buffer
+1 mem_keboard_n_key_rollover_send_flag
+15 mem_keyboard_n_key_rollover_data
+168 mem_keyboard_keyvalue_map
+10 mem_keyboard_tx_data
+1 mem_keyboard_data_send_flag
+
+1 mem_keyboard_fn_flag
+1 mem_keyboard_control_key_flag
+1 mem_keyboard_alt_flag
+1 mem_keyboard_shift_flag
+1 mem_keyboard_bt_button_flag
+1 mem_keyboard_pairing_type
+
+1 mem_24g_repeat_send_flag
+1 mem_keyboard_led_status_get
+1 mem_keyboard_led_status_get_timer
+1 mem_keyboard_led_status_get_timer_last
+
+0 mem_keyboard_fn_esc_f1_f12
+1 mem_keyboard_fn_first
+1 mem_keyboard_fn_esc
+1 mem_keyboard_fn_f1
+1 mem_keyboard_fn_f2
+1 mem_keyboard_fn_f3
+1 mem_keyboard_fn_f4
+1 mem_keyboard_fn_f5
+1 mem_keyboard_fn_f6
+1 mem_keyboard_fn_f7
+1 mem_keyboard_fn_f8
+1 mem_keyboard_fn_f9
+1 mem_keyboard_fn_f10
+1 mem_keyboard_fn_f11
+1 mem_keyboard_fn_f12
+1 mem_keyboard_fn_del
+
+1 mem_keyboard_fn_lock_flag
+1 mem_keyboard_fn_lock_keyvalue
+
+2 mem_keyboard_commbination_key_bt
+2 mem_keyboard_commbination_key_24g
+2 mem_keyboard_commbination_fast_conn_bt
+1 mem_keyboard_commbination_press_type
+1 mem_keyboard_commbination_key_step
+1 mem_keyboard_commbination_control_key_value
+1 mem_keyboard_commbination_standard_key_value
+1 mem_keyboard_commbination_control_key_delay_release_timer
+
+1 mem_keyboard_consumer_key_status
+1 mem_kb_computer_system
+
+//memory
+1 mem_keyboard_device_info_store_flag
+1 mem_otp_store_device_info_flag
+1 mem_otp_store_system_flag
+24 mem_otp_read_retention_memory
+2 mem_otp_read_retention_offset
+2 mem_otp_read_retention_max_size
+
+//led
+1 mem_keyboard_device_poweron_timer_init
+1 mem_keyboard_device_poweron_timer
+2 mem_keyboard_num_caps_scoll_led_on_timer
+1 mem_keyboard_mode_led_on_timer
+1 mem_keyboard_adc_low_volatage_led_timer_count
+2 mem_adc_low_volatage_led_blink_timer
+1 mem_keyboard_low_volatage_led_flag
+1 mem_keyboard_low_volatage_led_blink_count
+1 mem_keyboard_low_volatage_led_blink_new_data_enable
+1 mem_keyboard_pair_led_flag
+1 mem_keyboard_pair_led_blink_count
+
+//usb
+1 mem_usb_vdd_status_current
+1 mem_usb_vdd_status_last
+1 mem_usb_wait_updata_timer
+9 mem_keyboard_usb_vid_pid
+
+
+// patch area
+)
+
+(
+0x01 DEVICE_DATA_TPYE_MOUSE
+0x00 DEVICE_DATA_TPYE_KEYBOARD
+)
+
+(
+0x00 HID_REPORTID_KEY_STANDARD
+0x01 HID_REPORTID_MOUSE
+0x02 HID_REPORTID_SYSTEM_CTRL
+0x03 HID_REPORTID_CONSUMER_KEY
+0x05 HID_REPORTID_BIT_CONSUMER_KEY
+0x08 HID_REPORTID_N_KEY_ROLLOVER
+)
+
+(
+0x04	 HID_KEY_A 	 
+0x05        HID_KEY_B 	 
+0x06        HID_KEY_C 	 
+0x07        HID_KEY_D 	 
+0x08        HID_KEY_E 	 
+0x09        HID_KEY_F 	 
+0x0a        HID_KEY_G 	 
+0x0b        HID_KEY_H 	 
+0x0c        HID_KEY_I  	 
+0x0d        HID_KEY_J 	 
+0x0e        HID_KEY_K 	 
+0x0f        HID_KEY_L 	 
+0x10        HID_KEY_M 	 
+0x11        HID_KEY_N 	 
+0x12        HID_KEY_O	 
+0x13        HID_KEY_P	 
+0x14        HID_KEY_Q	 
+0x15        HID_KEY_R	 
+0x16        HID_KEY_S	 
+0x17        HID_KEY_T	 
+0x18        HID_KEY_U	 
+0x19        HID_KEY_V	 
+0x1a        HID_KEY_W 	 
+0x1b        HID_KEY_X	 
+0x1c        HID_KEY_Y	 
+0x1d        HID_KEY_Z	 
+    
+0x1e        HID_KEY_1	 
+0x1f        HID_KEY_2	 
+0x20        HID_KEY_3	 
+0x21        HID_KEY_4	 
+0x22        HID_KEY_5	 
+0x23        HID_KEY_6	 
+0x24        HID_KEY_7	 
+0x25        HID_KEY_8	 
+0x26        HID_KEY_9	 
+0x27        HID_KEY_0	 
+    
+0x28        HID_KEY_ENTER 				 
+0x29        HID_KEY_ESC				 
+0x2a        HID_KEY_BACKSPACE		 
+0x2b        HID_KEY_TAB				 
+0x2c        HID_KEY_SPACE 				 
+0x2d        HID_KEY_MINUS				 		// -_
+0x2e        HID_KEY_EQUAL				 		// =+
+0x2f        HID_KEY_LEFT_BRACKET 		 	// [{
+0x30        HID_KEY_RIGHT_BRACKET 	 		// ]}
+0x31        HID_KEY_BACK_SLASH 		 		// \|
+    
+0x32        HID_KEY_K42				 
+0x33        HID_KEY_SEMICOLON			 	// ;:
+0x34        HID_KEY_QUOTE				 		// ' "
+0x35        HID_KEY_TILDE				 		// `~
+0x36        HID_KEY_LESS_THAN			 		// ,<
+0x37        HID_KEY_GREAT_THAN		 		// .>
+0x38        HID_KEY_SLASH				 		// /?
+0x39        HID_KEY_CAPS_LOCK			 
+
+0x3a        HID_KEY_F1		 
+0x3b        HID_KEY_F2		 
+0x3c        HID_KEY_F3		 
+0x3d        HID_KEY_F4		 
+0x3e        HID_KEY_F5		 
+0x3f        HID_KEY_F6		 
+0x40        HID_KEY_F7		 
+0x41        HID_KEY_F8		 
+0x42        HID_KEY_F9		 
+0x43        HID_KEY_F10	 
+0x44        HID_KEY_F11	 
+0x45        HID_KEY_F12	 
+    
+0x46        HID_KEY_PRINT_SCREEN	 
+0x47        HID_KEY_SCROLL_LOCK	 
+0x48        HID_KEY_PAUSE			 
+0x49        HID_KEY_INSERT			 
+0x4a        HID_KEY_HOME			 
+0x4b        HID_KEY_PAGE_UP		 
+0x4c        HID_KEY_DELETE		 
+0x4d        HID_KEY_END			 
+0x4e        HID_KEY_PAGE_DOWN	 
+        
+0x4f        HID_KEY_RIGHT_ARROW	 
+0x50        HID_KEY_LEFT_ARROW	 
+0x51        HID_KEY_DOWN_ARROW	 
+0x52        HID_KEY_UP_ARROW		 
+        
+0x53        HID_KEY_NUM_LOCK		 
+0x54        HID_KEY_KP_SLASH		 
+0x55        HID_KEY_KP_ASTERISK	 
+0x56        HID_KEY_KP_MINUS		 
+0x57        HID_KEY_KP_PLUS		 
+0x58        HID_KEY_KP_ENTER		 
+0x59        HID_KEY_KP_1			 
+0x5a        HID_KEY_KP_2			 
+0x5b        HID_KEY_KP_3			 
+0x5c        HID_KEY_KP_4			 
+0x5d        HID_KEY_KP_5			 
+0x5e        HID_KEY_KP_6			 
+0x5f        HID_KEY_KP_7			 
+0x60        HID_KEY_KP_8			 
+0x61        HID_KEY_KP_9			 
+0x62        HID_KEY_KP_0			 
+0x63        HID_KEY_KP_DEL		 
+  
+0x64        HID_KEY_K45			 
+0x65        HID_KEY_APP			 
+0x66        HID_KEY_POWER			 
+0x67        HID_KEY_KP_EQUAL		 
+        
+       
+0x87        HID_KEY_K56				 
+0x88        HID_KEY_K133  				 
+0x89        HID_KEY_K14  				 
+0x8a        HID_KEY_K132  				 
+0x8b        HID_KEY_K131 				 
+    
+0x90        HID_KEY_KR_R  				 
+0x91        HID_KEY_KR_L  				 
+        
+0xe0        HID_KEY_LEFT_CTRL			 
+0xe1        HID_KEY_LEFT_SHIFT			 
+0xe2        HID_KEY_LEFT_ALT 			 
+0xe3        HID_KEY_LEFT_GUI 			 
+0xe4        HID_KEY_RIGHT_CTRL			 
+0xe5        HID_KEY_RIGHT_SHIFT		 
+0xe6        HID_KEY_RIGHT_ALT			 
+0xe7        HID_KEY_RIGHT_GUI			 
+
+0xe8 	HID_KEY_MULTIKEY_MEDIA
+0xe9 	HID_KEY_MULTIKEY_VOL_DOWN
+0xea 	HID_KEY_MULTIKEY_VOL_UP
+0xeb 	HID_KEY_MULTIKEY_MUTE
+0xec 	HID_KEY_MULTIKEY_PRE_TRACK
+0xed 	HID_KEY_MULTIKEY_NEXT_TRACK
+0xee 	HID_KEY_MULTIKEY_PALY
+0xef 	HID_KEY_MULTIKEY_STOP
+0xf0 	HID_KEY_AC_HOME
+0xf1 	HID_KEY_MAIL
+0xf2 	HID_KEY_MY_COMPUTER
+0xf3 	HID_KEY_AC_FAVORITES
+0xf4 	HID_KEY_CALCULATOR
+0xf5 	HID_KEY_AC_SEARCH
+0xf6 	HID_KEY_AC_BACK
+0xf7 	HID_KEY_OS_SOFT_KB
+0xf8 	HID_KEY_LIGHT_DOWN
+0xf9 	HID_KEY_LIGHT_UP
+0xfa 	HID_KEY_IOS_ANDROID_OS_LOCK
+0xfb	HID_KEY_MAC_EJECT
+0xfc	HID_KEY_AC_FORWARD
+0xfd	HID_KEY_AC_STOP
+0xfe	HID_KEY_AC_REFRESH
+0xff 	HID_KEY_SYSTEM_SLEEP
+        // 0xe8~0xff reserved
+0xa5	HID_KEY_SELECT_ALL
+0xa6 	HID_KEY_COPY
+0xa7	HID_KEY_PASTE
+0xa8	HID_KEY_CUT
+0xa9	HID_KEY_ALL_OS_LOCK
+0xaa	HID_KEY_OSK
+0xab	HID_KEY_LANGUAGE
+0xac 	HID_KEY_APP_TILING
+0xad	HID_KEY_SEARCH
+0xae     	HID_KEY_PB
+	 // 0xa5~0xaf reserved
+0x7f     	HID_KEY_FN 					 
+0x00     	HID_KEY_NULL 		 
+)
+
+(
+0x01 LEFT_CONTROL
+0x02 LEFT_SHIFT
+0x04 LEFT_ALT
+0x08 LEFT_GUI
+0x10 RIGHT_CONTROL
+0x20 RIGHT_SHIFT
+0x40 RIGHT_ALT
+0x80 RIGHT_GUI
+0x09 LEFT_GUI_CONTROL
+0x0a LEFT_SHIFT_GUI
+)
+
+
+(
+0x00 KB_PC_KEYSEL_NUMLOCK
+0x01 KB_PC_KEYSEL_CAPSLOCK
+0x02 KB_PC_KEYSEL_SCROLLLOCK
+)
+
+(
+8 KEYSCAN_COL_NUM
+20 KEYSCAN_ROW_NUM
+)
+
+(
+0 CAMMBINATION_KEY_FREE
+1 CAMMBINATION_KEY_PRESS
+2 CAMMBINATION_KEY_HOLD
+3 CAMMBINATION_KEY_COMPLETE
+4 CAMMBINATION_KEY_WAIT_RELEASE
+5 CAMMBINATION_KEY_RELEASE
+6 CAMMBINATION_KEY_NULL
+)
+
+
+(
+
+0x600 PNP_MICROSOFT
+0x4c00 PNP_IOS
+0x1208 PNP_MAC
+
+
+0 SYSTEM_OS_WINDOWS
+1 SYSTEM_OS_ANDROID
+2 SYSTEM_OS_IOS
+3 SYSTEM_OS_MAC
+
+)
+
+(
+0 KEYBOARD_CONSUMER_KEY_STANDBY
+1 KEYBOARD_CONSUMER_KEY_PRESS
+2 KEYBOARD_CONSUMER_KEY_RELEASE
+)
+
+(
+//keyboard_function_flag
+0x08 KEYBOARD_FLAG_LEN
+//byte 0
+0x00 KEYBOARD_24G_PAIRING_FLAG
+0x01 KEYBOARD_STORE_MEMORY_FLAG
+0x02 KEYBOARD_LOW_VOLTAGE_FLAG
+0x03 KEYBOARD_BT_DISCOVERY_BUTTON_DOWN_FLAG
+0x04 KEYBOARD_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG
+
+//byte 1
+0x08 KEYBOARD_ENABLE_WAKEUP_FROM_POWER
+0x09 KEYBOARD_ENABLE_16M
+0x0a KEYBOARD_DISABLE_ICE
+0x0b KEYBOARD_ENABLE_ADC
+0x0c KEYBOARD_ENABLE_FLASH
+0x0d KEYBOARD_ENABLE_2K_EEPROM
+0x0e KEYBOARD_ENABLE_EEPROM
+0x0f KEYBOARD_ENABLE_OTP
+
+//byte 2
+0x10 KEYBOARD_ENABLE_24G
+0x11 KEYBOARD_ENABLE_AUTO_24G_PARING
+0x12 KEYBOARD_ENABLE_24G_AUTO_PAIR_NERVER_BEEN_PAIRED
+0x13 KEYBOARD_ENABLE_COMMBINATION_KEY_BY_24G_PAIRING
+0x14 KEYBOARD_ENABLE_24G_2M_PHY
+0x15 KEYBOARD_ENABLE_24G_SEARCH_DONGLE
+
+//byte 3
+0x18 KEYBOARD_ENABLE_BLE_RANDOM_ADDRE
+0x19 KEYBOARD_ENABLE_LE_BATTERY_SERVICE_CANCEL
+0x1a KEYBOARD_ENABLE_BT_RECONNECT_TIMEOUT_ENTER_DISCOVERY
+0x1b KEYBOARD_ENABLE_COMMBINATION_KEY_BY_BT_DISCOVERY
+
+//byte 4
+0x20 KEYBOARD_ENABLE_26_N_KEY_ROLLOVER
+0x21 KEYBOARD_ENABLE_FULL_N_KEY_ROLLOVER
+0x22 KEYBOARD_ENABLE_MAGIC_KEYBOARD
+0x23 KEYBOARD_ENABLE_MOUSE
+0x24 KEYBOARD_ENABLE_USB
+
+//byte 5
+0x28 KEYBOARD_ENABLE_030_POWER_LED
+0x29 KEYBOARD_ENABLE_LOW_LED
+0x2a KEYBOARD_ENABLE_LOW_VOLTAGE_LED_BLINK_N_SECOND
+0x2b KEYBOARD_ENABLE_BACKLIGHT
+
+//byte 6
+0x30 KEYBOARD_ENABLE_FN_ARROW
+0x31 KEYBOARD_ENABLE_FN_LEFT_CTRL_OSK
+0x32 KEYBOARD_ENABLE_FN_SPACE_LANGUAGE
+0x33 KEYBOARD_ENABLE_FN_OS_SWITCH
+0x34 KEYBOARD_ENABLE_FN_LOCK
+
+//byte 7
+0x38 KEYBOARD_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO
+0x39 KEYBOARD_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO_G24_CONNECT_GND
+0x3a KEYBOARD_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO_BT_CONNECT_GND
+0x3b KEYBOARD_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO_G24_CONNECT_VDD
+0x3c KEYBOARD_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO_BT_CONNECT_VDD
+0x3d KEYBOARD_ENABLE_SDA_MULTI_R_LINE
+0x3e KEYBOARD_ENABLE_SDA_MULTI_ICE_LINE
+
+)
+
+(
+//eeprom address offect
+0x00 KEYBOARD_INFO_EEPROM_OFFECT
+0x00 KEYBOARD_DEVICE_NUMBER_EEPROM_OFFECT
+0x01 KEYBOARD_BLE_ADDR_EEPROM_OFFECT
+0x28 KEYBOARD_STORE_FLAG
+0x2b KEYBOARD_G24_ADDR_EEPROM_OFFECT	//4bytes
+0x2f KEYBOARD_RANDOM_ADDR_COUNT_EEPROM_OFFSET
+0x31 KEYBOARD_FN_FLAG_EEPROM_OFFSET
+0x36 KEYBOARD_COMPUTER_SYSTEM_EEPROM_OFFSET
+0x39 KEYBOARD_RGB_TPYE_OFFSET
+
+0x00 KEYBOARD_STORE_EEPROMM_FLAG_ALL_INFO
+0x01 KEYBOARD_STORE_EEPROMM_FLAG_BLE_ADDR
+0x02 KEYBOARD_STORE_EEPROMM_FLAG_G24_ADDR
+0x03 KEYBOARD_STORE_EEPROMM_FLAG_FN_LOCK
+0x04 KEYBOARD_STORE_EEPROMM_FLAG_COMPUTER_SYSTEM
+0x05 KEYBOARD_STORE_EEPROMM_FLAG_RGB_TYPE
+)
+
+(
+0 KEYBOARD_RGB_BLUE_STATUS
+1 KEYBOARD_RGB_GREEN_STATUS
+2 KEYBOARD_RGB_RED_STATUS
+
+0 RGB_BACKLIGHT_STATUS_OFF
+1 RGB_BACKLIGHT_STATUS_ON
+2 RGB_BACKLIGHT_STATUS_BREATHE
+
+0 RGB_BACKLIGHT_ON_TPYE_RED
+1 RGB_BACKLIGHT_ON_TPYE_ORANGE
+2 RGB_BACKLIGHT_ON_TPYE_PURPLE
+3 RGB_BACKLIGHT_ON_TPYE_GREEN
+4 RGB_BACKLIGHT_ON_TPYE_CYAN
+5 RGB_BACKLIGHT_ON_TPYE_BLUE
+6 RGB_BACKLIGHT_ON_TPYE_WHITE
+
+0 RGB_BACKLIGHT_BREATHE_TPYE_BLUE
+1 RGB_BACKLIGHT_BREATHE_TPYE_GREEN
+2 RGB_BACKLIGHT_BREATHE_TPYE_RED
+3 RGB_BACKLIGHT_BREATHE_TPYE_CYAN
+4 RGB_BACKLIGHT_BREATHE_TPYE_PURPLE
+5 RGB_BACKLIGHT_BREATHE_TPYE_ORANGE
+6 RGB_BACKLIGHT_BREATHE_TPYE_WHITE
+)
+
+(
+0 KEYBOARD_FLAG_G24_DEVICE_BUTTON
+1 KEYBOARD_FLAG_BT_DEVICE_BUTTON
+)
+
+(
+0x01 KEYBOARD_COMMBINATION_PRESS_TYPE_24G_PAIR
+0x02 KEYBOARD_COMMBINATION_PRESS_TYPE_BT_PAIR
+0x03 KEYBOARD_COMMBINATION_PRESS_TYPE_BT_FAST_CONN
+)
+
+(
+0x20 KEYBOARD_BLE_L2CAP_TXBUFF_SIZE
+)
+
+(
+0 KEYBOARD_BATTARY_1V5
+1 KEYBOARD_BATTARY_3V0
+2 KEYBOARD_BATTARY_4V2
+)
+
+
Index: format/app_module.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/app_module.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/app_module.format	(working copy)
@@ -0,0 +1,248 @@
+
+memalloc module(
+	//ble
+	2 mem_module_le_rx_data_len
+	2 mem_module_le_rx_data_address
+	2 mem_module_le_rx_data_handle
+
+ifdef COMPILE_WECHAT
+	0 mem_wechat_tx_buffer
+	1 mem_wechat_tx_bMagicNumber
+	1 mem_wechat_tx_bVer
+	2 mem_wechat_tx_nLength
+	2 mem_wechat_tx_nCmdId
+	2 mem_wechat_tx_nSeq1
+	255 mem_wechat_tx_payload
+
+	0 mem_wechat_rx_buffer
+	1 mem_wechat_rx_bMagicNumber
+	1 mem_wechat_rx_bVer
+	2 mem_wechat_rx_nLength
+	2 mem_wechat_rx_nCmdId
+	2 mem_wechat_rx_nSeq
+	255 mem_wechat_rx_payload
+
+	255 mem_module_wechat_local_data_buffer
+
+endif
+)
+
+xmemalloc module(	
+	2 mem_soft_version_num
+	1 mem_module_wake_up_gpio
+	1 mem_module_state_gpio
+	1 mem_module_connect_state_gpio
+
+	2 mem_current_packet_length
+	1 mem_module_state
+	
+	1 mem_module_mcu_wake_pin
+	4 mem_module_mcu_wake_delay_us
+
+	1 mem_module_le_lpm_mult	
+	1 mem_module_bluetooth_stauts_by_command
+
+	//uart
+	2 mem_module_uart_rx_buffer
+	2 mem_module_uart_rx_buffer_end
+	2 mem_module_uart_tx_buffer
+	2 mem_module_uart_tx_buffer_end
+	2 mem_module_uarta_baud_rate
+
+	//ADC
+	1 mem_module_read_vdd_flag
+	1 mem_module_read_vdd_count
+	1 mem_module_vdd_quotient
+	1 mem_module_vdd_remainder
+
+	//ble
+	1 mem_module_ble_data_uart_max_length
+
+	//flag
+	2 mem_module_flag
+
+	1 mem_module_hci_notify_len
+	2 mem_module_hci_notify_handle
+	2 mem_module_hci_nofiy_addr
+	1 mem_module_hci_notify_type
+
+	1 mem_le_conn_flag
+
+ifdef COMPILE_WECHAT
+	1 mem_module_wechat_indication_handle
+	1 mem_module_wechat_write_handle
+	2 mem_module_wechat_tx_buffer_ptr
+	2 mem_module_wechat_rx_buffer_ptr
+	2 mem_module_wechat_rx_push_data_cb
+	2 mem_module_wechat_tx_nSeq
+	2 mem_module_wechat_tx_len
+	2 mem_module_wechat_tx_address
+	2 mem_module_wechat_rx_len
+	2 mem_module_wechat_rx_address
+	1 mem_module_wechat_receive_push_data
+endif
+	
+	600 mem_module_le_att_list
+	0 mem_module_le_att_list_end
+	0 mem_module_nv_data
+	34 mem_module_nv_data0
+	34 mem_module_nv_data1
+	34 mem_module_nv_data2
+	34 mem_module_nv_data3
+	34 mem_module_nv_data4
+	0 mem_module_nv_data_end
+)
+
+
+(//mem_module_flag
+//bit0~bit7 config module function
+0 MODULE_FLAG_UART_FLOW_CONTROL
+1 MODULE_FLAG_BLE_SEND_MTU23
+2 MODULE_FLAG_BLE_DATA_ENCRYPT
+
+//bit8~bit15 module states change
+8 MODULE_FLAG_BLE_DATA_FINISH
+
+)
+
+(
+34 NV_DATA_LEN
+-1 DECREASED_ONE
+)
+
+
+
+(
+	5 FLAG_MODULE_READ_VDD_COUNT
+)
+
+(
+0x01 HCI_DISCARD_PACKET
+0x00 HCI_NOT_DISCARD_PACKET
+)
+
+
+
+(//Command
+0x01 HCI_CMD_SET_LE_ADDR_REQ
+0x02 HCI_CMD_SET_VISIBILITY_REQ
+0x04 HCI_CMD_SET_LE_NAME_REQ
+0x09 HCI_CMD_LE_DATA_REQ
+0x0b HCI_CMD_STATUS_IRQ
+0x0e HCI_CMD_SET_UARTCONTROL_REQ
+0x0f HCI_CMD_SET_UART_BAUD_REQ
+0x10 HCI_CMD_VERSION_REQ
+0x12 HCI_CMD_BLE_DISCONNECT
+0x13 HCI_CMD_DELETE_DEVICE
+0x14 HCI_CMD_CREATE_CONNECT
+0x26 HCI_CMD_SET_NVRAM_REQ
+0x27 HCI_CMD_SLEEP
+0x28 HCI_CMD_CONFIRM_GKEY
+0x2a HCI_CMD_AUTO_ADV_SCAN
+0x2b HCI_CMD_POWER_REQ
+0x2c HCI_CMD_POWER_SET
+0x30 HCI_CMD_PASSKEY_ENTRY
+0x31 HCI_CMD_SET_GPIO
+0x32 HCI_CMD_READ_GPIO
+0x33 HCI_CMD_LE_SET_PAIRING
+0x34 HCI_CMD_LE_SET_ADV_DATA
+0x35 HCI_CMD_LE_SET_SCAN_DATA
+0x36 HCI_CMD_LE_SEND_CONN_UPDATE_REQ
+0x37 HCI_CMD_LE_SET_ADV_PARM
+0x38 HCI_CMD_LE_START_PAIRING
+0x40 HCI_CMD_SET_WAKE_GPIO
+0x42 HCI_CMD_SET_TX_POWER
+0x43 HCI_CMD_BOOT_VERSION_REQ
+0x48 HCI_CMD_LE_CONFIRM_GKEY
+0x49 HCI_CMD_REJECT_JUSTWORK
+0x51 HCI_CMD_RESET_CHIP_REQ
+
+0x61 HCI_CMD_LE_SET_FIXED_PASSKEY
+
+0x76 HCI_CMD_DELETE_CUSTOMIZE_SERVICE
+0x77 HCI_CMD_ADD_SERVICE_UUID
+0x78 HCI_CMD_ADD_CHARACTERISTIC_UUID
+0x7a HCI_CMD_PASSKEY_ENTRY_INPUT
+0x7b HCI_CMD_LE_CREAT_CONN
+
+0x90 HCI_CMD_BLE_SET_PHY
+0x91 HCI_CMD_BLE_READ_CURRENT_PHY
+0x92 HCI_CMD_BLE_SET_DLE
+0x93 HCI_CMD_READ_CHIP_DATA
+0x94 HCI_CMD_WRITE_CHIP_DATA
+ifdef COMPILE_WECHAT
+0x95 HCI_CMD_WECHAT_SEND_DATA
+endif
+0xff HCI_CMD_CLOSE_LPM
+)
+
+(//event
+0x00 HCI_EVENT_SPP_CONN_REP
+0x01 HCI_EVENT_HID_CONN_REP
+0x02 HCI_EVENT_LE_CONN_REP
+0x03 HCI_EVENT_SPP_DIS_REP
+0x04 HCI_EVENT_HID_DIS_REP
+0x05 HCI_EVENT_LE_DIS_REP
+0x06 HCI_EVENT_CMD_RES
+0x07 HCI_EVENT_SPP_DATA_REP
+0x08 HCI_EVENT_LE_DATA_REP
+0x09 HCI_EVENT_STANDBY_REP
+
+0x0a HCI_EVENT_STATUS_RES
+
+0x0D HCI_EVENT_NVRAM_REP
+0x0e HCI_EVENT_GKEY
+0x0F HCI_EVENT_INVALID_PACKET
+0x10 HCI_EVENT_GET_PASSKEY
+0x11 HCI_EVENT_LE_TK
+0x12 HCI_EVENT_REMOTE_MTU
+0x14 HCI_EVENT_LE_PAIRING_STATE
+0X15 HCI_EVENT_LE_ENCRYPTION_STATE
+0x17 HCI_EVENT_LE_CONNECTION_UPDATE
+0x1d HCI_EVENT_LE_GKEY
+0x29 HCI_EVENT_UUID_HANDLE
+0x2b HCI_EVENT_LE_INPUT_GKEY
+
+0x40 HCI_BLE_UPDATE_PHY_EVENT
+ifdef COMPILE_WECHAT
+0x41 HCI_BLE_WECHAT_RECEIVE_PUSH_DATA
+endif
+)
+
+
+(//command HCI_CMD_SET_GPIO
+//byte 0
+0x00 HCI_CMD_CONFIG_GPIO_INPUT
+0x01 HCI_CMD_CONFIG_GPIO_OUTPUT
+//byte 1 input state
+0x00 GPIO_INPUT_PULLUP
+0x01 GPIO_INPUT_PULLDOWN
+0x02 GPIO_INPUT_HIGH_IMPEDANCE
+)
+
+
+
+
+
+(
+0x0080	FLAG_BLE_PAIRING_SUCCESS
+0x0180	FLAG_BLE_PAIRING_FAIL
+)
+
+
+(
+1	FLAG_EVENT_START_ENC
+0	FLAG_EVENT_PAUSE_ENC
+)
+
+(
+0 MOUDLE_STATE_BT_BIT
+1 MOUDLE_STATE_BLE_BIT
+)
+
+(
+5 BIT_OF_NOTIFY_AUTHENTICATED
+6 BIT_OF_READ_AUTHENTICATED
+7 BIT_OF_WRITE_AUTHENTICATED
+)
+
Index: format/app_mouse.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/app_mouse.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/app_mouse.format	(working copy)
@@ -0,0 +1,941 @@
+
+memalloc mouse(
+2 mem_init_cnt
+2 mem_data_pre
+2 mem_data_current
+3 mem_data_sum
+2 mem_data_value
+//le report map
+820 mem_ui_le_uuid_table_new
+
+//audio
+0 mem_voice_raw_start
+719 mem_voice_raw
+1 mem_voice_raw_end
+
+120 mem_adpcm
+
+8 mem_voice_adpcm_buf_config
+0 mem_voice_adpcm_buf_start
+300 mem_voice_adpcm_buf
+1 mem_voice_queue_count
+
+60 mem_queue_buf
+
+0 mem_memalloc_mouse_param_end
+)
+
+xmemalloc g24_tx_hid_mouse(
+// Mouse Work Area
+0 mem_mouse_param_config
+1 mem_lbutton_gpio
+1 mem_mbutton_gpio
+1 mem_rbutton_gpio
+1 mem_bk_button_gpio
+1 mem_fw_button_gpio
+1 mem_dpi_button_gpio
+1 mem_mouse_sensor_sclk_gpio
+1 mem_mouse_sensor_sdio_gpio
+1 mem_select_sensor_angle_gpio
+1 mem_sensor_angle_default
+1 mem_sensor_angle_gnd
+1 mem_sensor_angle_vin
+1 mem_config_sensor_dpi	
+1 mem_whee_ta_data_gpio
+1 mem_whee_tb_data_gpio
+1 mem_matrix_public_gpio
+1 mem_config_select_device_button_gpio
+1 mem_customer_key_gpio
+1 mem_firebutton_gpio
+1 mem_dpi_another_button_gpio
+1 mem_mouse_logo_led_gpio
+1 mem_mouse_1io2led_multi_24gled
+1 mem_mouse_1io2led_multi_bt1led
+1 mem_mouse_1io2led_multi_bt2led
+1 mem_mouse_low_voltage_alarm_gpio
+1 mem_mouse_dpi_gpio
+0 mem_mouse_param_config_end
+
+1 mem_device_temp_gpio
+
+//LED
+//mediacy
+1 mem_mouse_multi_led_blink_enable
+1 mem_mouse_multi_led_type
+1 mem_mouse_multi_led_state
+1 mem_mouse_multi_led_blink_type				//00:rtn	01:24g blink	02:le blink		03:reconn blink 	04:low blink	05:dpi blink
+
+//time parm
+1 mem_mouse_le_reconn_blink_limit
+1 mem_mouse_multi_led_powon_timer_init		//power on time
+1 mem_mouse_multi_led_powon_timer
+1 mem_mouse_multi_24gled_blink_timer_init	//24gled blink time
+1 mem_mouse_multi_le_discovery_blink_timer_init	//le discovery blink time
+1 mem_mouse_multi_le_reconn_blink_timer_init	//le reconn blink time
+1 mem_mouse_dpi_led_blink_timer_init		//dpi blink time
+1 mem_mouse_multi_led_blink_timer
+1 mem_mouse_low_led_blink_timer			//low blink time
+1 mem_mouse_low_led_blink_half_timer
+//blink count
+1 mem_mouse_multi_24gled_blink_count_init	//24g count
+1 mem_mouse_multi_le_reconn_blink_count_init	//le reconn count
+1 mem_mouse_multi_led_blink_count
+1 mem_mouse_multi_lowled_blink_count_init	//low count
+1 mem_mouse_multi_low_led_blink_count
+2 mem_mouse_logo_led_on_time_init
+1 mem_mouse_dpi_led_delay_count
+1 mem_mouse_dpi_led_delay_count_init
+//LED end
+
+//lost-packet compensation
+1 mem_mouse_24g_fast_hop_count_2ms
+3 mem_mouse_24g_short_sleep_set_4ms
+3 mem_mouse_24g_long_sleep_set_4ms
+3 mem_mouse_24g_short_sleep_set_8ms
+3 mem_mouse_24g_long_sleep_set_8ms
+
+4 mem_mouse_24g_tsniff
+4 mem_mouse_24g_tsniff_2ms
+4 mem_mouse_24g_tsniff_4ms
+4 mem_mouse_24g_tsniff_8ms
+3 mem_mouse_24g_short_sleep_set_init
+
+1 mem_mouse_24g_tx_count
+6 mem_mouse_24g_tx_time_last
+4 mem_mouse_24g_tx_time_last_delt
+5 mem_mouse_24g_tx_time_sum
+1 mem_mouse_24g_tx_time_sum_count
+1 mem_mouse_24g_tx_time_offset
+1 mem_mouse_24g_sleep_miss
+4 mem_mouse_24g_sleep_time_temp
+4 mem_mouse_24g_sleep_miss_temp
+
+1 mem_mouse_sleep_deal_type
+
+//sensor param
+1 mem_sensor_id1
+1 mem_sensor_id2
+
+1 mem_mouse_move_flag
+
+1 mem_mouse_asm_flag
+2 mem_mouse_x_pre
+2 mem_mouse_y_pre
+1 mem_mouse_data_xtemp
+1 mem_mouse_data_ytemp
+
+0 mem_mouse_dpi_seting
+1 mem_320x_dpi_0
+1 mem_320x_dpi_1
+1 mem_320x_dpi_2
+1 mem_320x_dpi_3
+1 mem_3212_dpi_0
+1 mem_3212_dpi_1
+1 mem_3212_dpi_2
+1 mem_3212_dpi_3
+1 mem_ka8g2_dpi_0
+1 mem_ka8g2_dpi_1
+1 mem_ka8g2_dpi_2
+1 mem_ka8g2_dpi_3
+//S210x
+0 mem_sensor_s201_dpi
+1 mem_sensor_s201_dpi_0
+1 mem_sensor_s201_dpi_1
+1 mem_sensor_s201_dpi_2
+1 mem_sensor_s201_dpi_3
+1 mem_sensor_s201_dpi_4
+
+1 mem_mouse_cpi_count
+1 mem_mouse_dpi_button_state
+1 mem_mouse_dpi_long_press_flag
+
+10 mem_sensor_3212_init
+10 mem_sensor_3204_init
+10 mem_sensor_3205_init
+26 mem_sensor_32xx_init
+34 mem_sensor_32xx_init_1
+30 mem_sensor_8650_init
+30 mem_sensor_ka8ul_init
+16 mem_sensor_8009_init
+18 mem_sensor_ka8g2_init
+12 mem_sensor_p6520_init
+12 mem_sensor_ka5857_init
+8 mem_sensor_poweron_init
+8 mem_sensor_ka8g2_poweron_init
+	
+1 mem_mouse_clear_sensor_data_flag
+1 mem_config_sensor_type
+1 mem_config_sensor_angle
+1 mem_bluetooth_125hz_cnt
+
+
+// mouse key
+10 mem_customer_key_press_init
+1 mem_mouse_lkey_press_status
+1 mem_mouse_rkey_press_status
+1 mem_mouse_mkey_press_status
+1 mem_mouse_bkkey_press_status
+1 mem_mouse_fwkey_press_status
+1 mem_mouse_dpikey_press_status
+1 mem_mouse_pbkey_press_status
+1 mem_mouse_customerkey_press_status
+1 mem_mouse_key_temp
+1 mem_mouse_key_status
+
+1 mem_mouse_matrix_key_cow_count
+1 mem_mouse_matrix_key_row_count
+1 mem_mouse_ghost_flag
+
+//fire key
+1 mem_fire_key_status
+4 mem_fire_key_delay
+1 mem_fire_key_flag
+
+//another dpi key
+1 mem_dpi_another_press_status
+1 mem_dpi_another_button_state
+1 mem_dpi_another_button_down_enable
+1 mem_mouse_key_temp_patch
+
+//le name modify
+1 mem_le_name_patch_len
+19 mem_le_name_patch
+
+//device otp data
+1 mem_device_flag_last
+1 mem_device_flag_value
+
+6 mem_mouse_le_addr1_last
+6 mem_mouse_le_addr1_temp
+6 mem_mouse_le_locall_addr1_last
+6 mem_mouse_le_locall_addr1_temp
+
+6 mem_mouse_le_addr2_last
+6 mem_mouse_le_addr2_temp
+6 mem_mouse_le_locall_addr2_last
+6 mem_mouse_le_locall_addr2_temp
+
+1 mem_mouse_dpi_last
+1 mem_mouse_dpi_temp
+1 mem_mouse_otp_dpi_value
+
+4 mem_mouse_24g_addr_last
+4 mem_mouse_24g_addr_temp
+
+2 mem_random_addr_increase_count_last
+2 mem_random_addr_increase_count_temp
+
+//otp store info offset
+2 mem_otp_offset_le_addr2
+2 mem_otp_offset_le_addr2_end
+
+2 mem_otp_offset_le_locall_addr2
+2 mem_otp_offset_le_locall_addr2_end
+
+2 mem_otp_offset_dpi
+2 mem_otp_offset_dpi_end
+
+2 mem_otp_offset_device_flag
+2 mem_otp_offset_device_flag_end
+
+2 mem_otp_offset_24g_addr
+2 mem_otp_offset_24g_addr_end
+
+2 mem_otp_offset_le_addr1
+2 mem_otp_offset_le_addr1_end
+
+2 mem_otp_offset_le_locall_addr1
+2 mem_otp_offset_le_locall_addr1_end
+
+2 mem_otp_offset_le_addr_increase_count
+2 mem_otp_offset_le_addr_increase_count_end
+
+2 mem_otp_offset_app_initflag
+
+//usb
+1 mem_usb_tx_interval_retention
+9 mem_usb_vid_pid_retention
+30 mem_usb_device_name_retention
+
+// commbation key
+1 mem_mouse_commbination_key_bt
+1 mem_mouse_commbination_key_24g
+1 mem_mouse_commbination_key_dpi
+1 mem_mouse_commbination_key_select_device
+1 mem_mouse_commbination_dpi_timer
+1 mem_mouse_commbination_select_device_timer
+1 mem_mouse_commbination_key_count
+1 mem_mouse_pair_flag
+//patch area
+1 mem_mouse_le_send_conn_param_update
+1 mem_mouse_le_send_conn_param_update_timer
+1 mem_att_write_resposnse_error_insufficient_auth
+//audio
+16 mem_ad_indexTable1
+356 mem_ad_stepsizeTable1
+
+4 mem_ad_state_valpred1
+4 mem_ad_state_index1
+1 mem_ad_in_numSamples1
+2 mem_ad_in_ptr1
+2 mem_ad_out_ptr1
+1 mem_ad_sign1
+1 mem_ad_delta1
+4 mem_ad_step1
+4 mem_ad_valpred1
+4 mem_ad_index1
+4 mem_ad_vpdiff1
+4 mem_ad_inputbuffer1
+1 mem_ad_bufferstep1
+
+4 mem_ad_val1
+4 mem_ad_outputbuffer1
+4 mem_ad_diff1
+
+1 mem_ms_audio_enable_flag
+1 mem_ms_audio_enable_timer
+1 mem_ms_adc_mode
+
+1 mem_voice_enable
+2 mem_adc_dma_rptr
+
+2 mem_adc_audio_saddr_ptr
+2 mem_adc_audio_eaddr_ptr
+
+//g24 buff
+62 mem_ms_24g_temp_buff
+3 mem_ms_nor_pro_temp_buff
+4 mem_24g_pair_addr_new
+
+//pack type
+1 mem_ms_rf_data_flag
+1 mem_ms_tx_data_type
+1 mem_device_tx_heart_data_flag
+
+//le handle
+2 mem_le_protocol_rx_handle
+2 mem_le_protocol_tx_handle
+2 mem_le_audio_tx_handle
+//le param
+8 mem_ms_le_interval_min_voice
+8 mem_ms_le_interval_min_new
+
+//key init
+1 mem_ms_le_lpm_flag
+1 mem_ms_audio_key_gpio
+1 mem_ms_audio_key_state
+1 mem_ms_audio_key_press_status
+1 mem_ms_audio_key_press_count
+1 mem_ms_one_pullup_key_gpio
+1 mem_ms_one_pullup_key_state
+1 mem_ms_one_pullup_key_press_status
+1 mem_ms_one_pullup_key_press_count
+1 mem_ms_transmit_key_gpio
+1 mem_ms_transmit_key_state
+1 mem_ms_transmit_key_press_status
+1 mem_ms_transmit_key_press_count
+
+//g24 nor pro
+1 mem_mouse_dpi_type
+1 mem_mouse_last_dpi
+1 mem_mouse_dpi_set_result
+1 mem_mouse_battery_type
+
+20 mem_mouse_device_type
+
+
+1 mem_ms_le_spi_reset_type
+//spi buff
+1 mem_spid_tbuf_new				/* spid buf: 03 addr[23:16] addr[15:8] addr[7:0] */
+1 mem_addr_hi_new
+4 mem_spid_rbuf_new
+
+//le buff
+80 mem_le_tx_buffer0_omemalloc_new
+80 mem_le_tx_buffer1_omemalloc_new
+80 mem_le_tx_buffer2_omemalloc_new
+80 mem_le_tx_buffer3_omemalloc_new
+
+ifdef UART_LOG
+//uart
+1 mem_app_uart_tx_gpio
+1 mem_app_uart_rx_gpio
+2 mem_app_uart_rx_buff_sptr
+2 mem_app_uart_rx_buff_eptr
+2 mem_app_uart_tx_buff_sptr
+2 mem_app_uart_tx_buff_eptr
+2 mem_app_uart_baud_rate
+8 mem_app_print_buffer
+0 mem_mouse_param_end
+
+0 mem_app_uart_rx_buff_start
+19 mem_app_uart_rx_buff
+1 mem_app_uart_rx_buff_end
+0 mem_app_uart_tx_buff_start
+299 mem_app_uart_tx_buff
+1 mem_app_uart_tx_buff_end
+endif
+
+10 mem_rxpayload_temp
+5 mem_mouse_key_fuction_info_temp
+0 mem_mouse_key_information_start
+5 mem_mouse_b4_fuction_info
+5 mem_mouse_b5_fuction_info
+5 mem_mouse_dpi_fuction_info
+1 mem_mouse_key_information_set_flag
+
+
+1 mem_store_key_info_delay_timer
+1 mem_store_key_info_delay_timer_init
+1 mem_mouse_fuction_key
+1 mem_mouse_fuction_key_last
+1 mem_mouse_m_key_press_flag
+1 mem_mouse_m_key_press_count
+0 mem_mouse_app_format_end
+
+1 mem_voice_empty_flag
+
+//zcode
+1 mem_zcode_temp_param0	//zcode num
+
+
+1 mem_zcode_current_number
+2 mem_eeprom_start_addr
+2 mem_eeprom_address
+3 mem_xip_flash_offset
+4 mem_zcode_head
+
+40 mem_sensor_8650_init_new
+2 mem_eeprom_att_list_base
+
+1 mem_mouse_le_delay_enter_lpm_time
+22 mem_sensor_ka8g2_init_new
+1 mem_24g_matrix_cnt
+)
+
+//audio buf len
+(
+720 	AUDIO_BUF_LEN
+240 	AUDIO_BUF_UINT
+
+300 	VOICE_QUEUE_SIZE
+60 	VOICE_QUEUE_UNIT
+5	VOICE_QUEUE_MAX_COUNT
+)
+
+(
+//g24 interval
+0x0c AUDIO_INTERVAL
+)
+
+(
+//adc
+0 ADC_BATTERY
+1 ADC_AUDIO
+
+80 MOUSE_BLE_L2CAP_TXBUFF_SIZE_NEW
+)
+
+//data type
+(
+3 HEART_BIT
+4 HTTP_BIT
+5 AUDIO_BIT
+6 SPEC_PRO_BIT
+7 NOR_PRO_BIT
+)
+
+//protocol public
+(
+//report id
+0xC0 REPORT_ID_PRO_DATA
+0xCC REPORT_ID_AUDIO_DATA
+0x00 START_FLAG
+
+//payload data
+0x10 VOICE_START_DATA
+
+//key count val
+50 KEY_LONG_PRESS
+
+//data len
+5 KEY_STATE_INFO_LEN
+2 KEY_STATE_PAYLOAD_LEN
+7 APPKEY_LEN
+16 SECRET_LEN
+8 SN_CHIP_LEN
+31 AUTH_LEN
+48 DEVICE_INFO_LEN
+5 NOR_PRO_RES_LEN
+3 NOR_PRO_HEADER_LEN
+6 NOR_PRO_GET_DPI_LEN
+2 SET_DPI_LEN
+
+//dpi/battery type
+0 AUTO_IN
+1 APP_ASK
+
+)
+
+//spec pro
+(
+//key state val
+1 SIGNLE_PRESS
+2 DOUBLE_PRESS
+3 LONG_PRESS
+4 LONG_RELEASE
+
+//key long flag val bit or pro key index
+0 AUDIO_KEY_BIT
+1 ASK_KEY_BIT
+2 TRANSMIT_KEY_BIT
+3 AUDIO_CTRL_KEY_BIT
+4 WRITE_KEY_BIT
+5 SUMARY_KEY_BIT
+6 PPT_KEY_BIT
+7 DRAW_KEY_BIT
+8 PRTSCN_KEY_BIT
+9 AI_KEY_BIT
+10 ONE_PULLUP_KEY_BIT
+
+11 DPI_LEVEL_BIT
+12 BATTERY_BIT
+)
+
+//nor pro bit
+(
+0 APPKEY
+1 SECRET
+2 SN_CODE
+3 CHIP_ID
+4 VOICE_START
+5 VOICE_END
+6 DEVICE_INFO
+7 GET_DPI
+8 SET_DPI
+9 GET_BATTERY
+10 SET_KEY_FUCTION
+11 SET_SLEEP_TIMER
+12 GET_DEVICE_TYPE
+)
+
+//opcode
+(
+0x01 OPCODE_APPKEY
+0x02 OPCODE_SECRET
+0x03 OPCODE_SN
+0x04 OPCODE_CHIP_ID
+0x06 OPCODE_VOICE_START
+0x07 OPCODE_VOICE_END
+0x08 OPCODE_CONNECT_STATE
+
+0x10 OPCODE_GET_DEVICE_INFO
+0x11 OPCODE_GET_DPI
+0x12 OPCODE_SET_DPI
+0x13 OPCODE_GET_BATTERY
+0x14 OPCODE_SET_KEY_FUCTION
+
+0x16 OPCODE_GET_DEVICE_TYPE
+
+0x20 OPCODE_VOICE_KEY
+0x21 OPCODE_ASK_KEY
+0x22 OPCODE_TRANSMIT_KEY
+0x23 OPCODE_VOICE_CTRL_KEY
+0x24 OPCODE_WRITE_KEY
+0X25 OPCODE_SUMARY_KEY
+0X26 OPCODE_PPT_KEY
+0X27 OPCODE_DRAW_KEY
+0X28 OPCODE_PRSTCN_KEY
+0x29 OPCODE_AI_KEY
+0X30 OPCODE_ONE_PULLUP_KEY
+)
+
+(
+//combination
+0x01 MOUSE_L_BUTTON
+0X02 MOUSE_R_BUTTON
+0x03 MOUSE_LR_BUTTON
+0X04 MOUSE_M_BUTTON
+0X05 MOUSE_LM_BUTTON
+0X06 MOUSE_RM_BUTTON
+0X07 MOUSE_LMR_BUTTON
+0x09 MOUSE_L_BK_BUTTON
+0x0a MOUSE_R_BK_BUTTON
+0x11 MOUSE_L_FW_BUTTON
+0x12 MOUSE_R_FW_BUTTON
+0x12 MOUSE_M_BK_BUTTON
+0x14 MOUSE_M_FW_BUTTON
+0X18 MOUSE_BK_FW_BUTTON
+//mouse default gpio
+0x1B MOUSE_DEFAULT_XA_GPIO
+0x1C MOUSE_DEFAULT_XB_GPIO
+
+//ui led blink
+0X00C8  LED_RECONNECT_BLINK //200
+0X0190  LED_DPI_BLINK //400
+0X03E8  LED_DPI_BLINK_FIXED    //1000
+0X03E8  LED_DISCOVERY_BLINK    //1000
+0XFF    LED_LONG_BLINK
+0x05	LED_SENSOR_BLINK_CNT
+//mode device number
+0x00 MODE_24G_DEVICE
+0x01 MODE_BT_DEVICE1
+0x02 MODE_BT_DEVICE2
+0x03 MODE_BT_DEVICE3
+0x04 MODE_USB_DEVICE
+//mouse  flag
+0X00 WRITE_REQ_ENABLE_FLAG
+0X01 LL_START_ENC_FLAG
+0X02 LL_PAIRING_SUCCESS_FLAG
+
+
+//mouse_function_flag
+0x08 MOUSE_FLAG_LEN
+//byte 1
+0x00 MOUSE_SELECT_DEVICE_FLAG
+0x01 MOUSE_24G_PAIRING_FLAG
+0x02 MOUSE_STORE_EEPROM_FLAG
+0x03 MOUSE_BT_CANNEL_RECONN_FLAG
+0x04 MOUSE_LOW_VOLTAGE_FLAG
+0x05 MOUSE_BT_DISCOVERY_BUTTON_DOWN_FLAG
+0x06 MOUSE_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG
+0x07 MOUSE_ENABLE_SPI2
+
+//byte 2
+0x08 MOUSE_ENABLE_BLE_RANDOM_ADDRE
+0x09 MOUSE_ENABLE_2K_EEPROM
+0x0a MOUSE_ENABLE_WAKEUP_FROM_POWER
+0x0b MOUSE_ENABLE_16M
+0x0c MOUSE_ENABLE_USB
+0x0d MOUSE_ENABLE_24G_SEARCH_DONGLE
+0x0e MOUSE_ENABLE_LOAD_AND_STORE_DPI
+0x0f MOUSE_ENABLE_24G
+
+//byte 3
+0x10 MOUSE_ENABLE_FLASH
+0x11 MOUSE_ENABLE_EEPROM
+0x12 MOUSE_ENABLE_OTP
+0x13 MOUSE_ENABLE_ADC
+0x14 MOUSE_ENABLE_KEYBOARD
+0x15 MOUSE_ENABLE_DOUBLE_DPI_KEY
+0x16 MOUSE_ENABLE_SWITCH_GPIO_CONNECT_VIN
+
+//byte 4
+0x18 MOUSE_ENABLE_24G_250Hz
+0x19 MOUSE_ENABLE_24G_500Hz
+0x1a MOUSE_ENABLE_24G_1000
+0x1b MOUSE_ENABLE_BT_125Hz
+0x1c MOUSE_ENABLE_DPI_LEVEL_4
+0x1d MOUSE_ENABLE_USB_250
+0x1e MOUSE_ENABLE_USB_500
+0x1f MOUSE_ENABLE_USB_1000
+
+//byte 5
+0x20 MOUSE_ENABLE_1IO2LED
+0x21 MOUSE_ENABLE_BT_RECONN_LED_EFFECT
+0x22 MOUSE_ENABLE_LOW_LED_BLINK_LIMIT
+0x23 MOUSE_ENABLE_LOW_LED
+0x24 MOUSE_ENABLE_LOW_FOR_LED
+0x25 MOUSE_ENABLE_DPI_FOR_LED
+
+//byte 6
+0x28 MOUSE_ENABLE_SELECT_DEVICE_BY_DPI_BUTTON
+0x29 MOUSE_ENABLE_SELECT_DEVICE_BY_PB_BUTTON
+0x2a MOUSE_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO
+0x2b MOUSE_ENABLE_DPI_KEY_CONNECT_GND
+0x2c MOUSE_ENABLE_ANOTHER_DPI_KEY_CONNECT_GND
+0x2d MOUSE_ENABLE_PB_BUTTON_CONNECT_GND
+0x2e MOUSE_ENABLE_FIRE_KEY_CONNECT_GND
+0x2f MOUSE_ENABLE_CUSTOMER_KEY_CONNECT_VIN
+
+//byte 7 
+0x30 MOUSE_ENABLE_AUTO_24G_PARING
+0x31 MOUSE_ENABLE_24G_POWER_ON_PAIRING
+0x32 MOUSE_ENABLE_COMMBINATION_KEY_BY_24G_PAIRING
+0x33 MOUSE_ENABLE_BT_RECONNECT_TIMEOUT_ENTER_DISCOVERY
+0x34 MOUSE_ENABLE_PB_BUTTON_SHORT_PRESS_ENTER_DISCOVERY
+0x35 MOUSE_ENABLE_COMMBINATION_KEY_BY_BT_DISCOVERY
+0x36 MOUSE_ENABLE_DPI_KEY_LONG_PRESS_DISCONVERY
+0x37 MOUSE_ENABLE_PB_BUTTON_LONG_PRESS_DISCONVERY
+
+//byte 8
+0x38 MOUSE_ENABLE_SMOOTHER
+0x39 MOUSE_ENABLE_XY_OFFSET
+0x3a MOUSE_ENABLE_24G_AUTO_PAIR_NERVER_BEEN_PAIRED
+0x3b MOUSE_ENABLE_LE_BATTERY_SERVICE_CANCEL
+0x3c MOUSE_ENABLE_WHEEL_WAKE_UP_CANCEL
+0x3d MOUSE_ENABLE_24G_2M_PHY
+0x3e MOUSE_ENABLE_24G_FIRST_AUTO_PAIRING
+//mouse dpi level
+0x00 MOUSE_DPI_LEVEL1
+0x01 MOUSE_DPI_LEVEL2
+0x02 MOUSE_DPI_LEVEL3
+0x03 MOUSE_DPI_LEVEL4
+
+
+//mouse sensor angle
+0x00 MOUSE_6CLK_ANGLE
+0X01 MOUSE_9CLK_ANGLE
+0X02 MOUSE_12CLK_ANGLE
+0X03 MOUSE_3CLK_ANGLE
+
+
+//DPI button state 
+0x00 DPI_BUTTON_STATE_UP
+0x01 DPI_BUTTON_STATE_DOWN
+
+
+//PB button state 
+0x00 PB_BUTTON_STATE_UP
+0x01 PB_BUTTON_STATE_DOWN
+
+//Commbination_key state 
+0x00 COMMBINATION_KEY_STATE_UP
+0x01 COMMBINATION_KEY_STATE_DOWN
+
+
+//eeprom address offect
+0X00 MOUSE_INFO_EEPROM_OFFECT
+0x58 MOUSE_STORE_FLAG
+0X5A MOUSE_DPI_EEPROM_OFFECT	//1byte
+0X5B MOUSE_G24_ADDR_EEPROM_OFFECT	//4bytes
+0X5F MOUSE_RANDOM_ADDR_COUNT_EEPROM_OFFSET	//2bytes
+0X61 MOUSE_EEPROM_MODULE_INIT_FLAG
+
+0x82 MOUSE_AUTH_INFO_OFFSET
+0x8a MOUSE_VALUE_EEPROM_OFFECT
+0x99 MOUSE_VALUE_FLAG_OFFECT
+
+// Sensor id number
+0x30 P32XX_ID1
+0x31 P3065_ID1
+0x02 P3212_ID2
+0xD1 P3205_TJ3T_ID2
+0XD2 P3204_TJ3L_ID2
+0x54 PKA8_ID2
+0x70 P3065_XY_ID2
+0x00 P3065_ID2
+0x5a P_MX8650
+0xD8 P8009_ID2
+0x50 P6520A_ID2
+0x57 KA5857_ID2
+0x58 PKA8G2_ID1
+0x59 PKA8G2_ID2
+
+
+//Sensor type
+0X00 P3205
+0X01 P3065
+0X02 P3204
+0X03 P3212
+0X04 P3065_XY
+0x05 MX8650
+0x06 P8009
+0x07 P6520
+0X08 KA8
+0X09 KA8_UL
+0X0a KA8_HD
+0X0b KA8G2
+0X0c S201X
+0X0d KA5857
+
+
+//SENSOR REG
+0x00 PAN_REG_PID_L
+0x01 PAN_REG_PID_H
+0x02 PAN_REG_MOTION_STAUS
+0x03 PAN_REG_DELTA_X
+0x04 PAN_REG_DELTA_Y
+0x05 PAN_REG_OPRATION_MODE
+0x06 PAN_REG_CONFIG
+0x07 PAN_REG_IMAGE_QUALITY
+0x08 PAN_REG_OPRATION_STATE
+0x09 PAN_REG_WRITE_PROTECT
+0x0A PAN_REG_SLEEP_1
+0x0B PAN_REG_ENTER_TIME
+0x0C PAN_REG_SLEEP_2
+0x0D PAN_REG_IMAGE_THRESHOLD
+0x0E PAN_REG_IMAGE_RECGNITION
+
+
+0x06 MOUSE_DPI_ADDRESS
+0x05 MOUSE_P3610_DPI_ADDRESS
+0x0D MOUSE_P3212_DPI_XADDRESS
+0x0E MOUSE_P3212_DPI_YADDRESS
+
+)
+
+(
+0x01 ADV_FLAG_LIMITED_DISCOVERABLE
+0x04 ADV_FLAG_BREDR_NOT_SUPPORTED
+)
+
+(
+2 BIT_POWER_ON
+)
+
+(
+0x00 MOUSE_L_KEY
+0x01 MOUSE_R_KEY
+0x02 MOUSE_M_KEY
+0x03 MOUSE_BK_KEY
+0x04 MOUSE_FW_KEY
+0x05 MOUSE_DPI_KEY
+0x06 MOUSE_PB_KEY
+0x07 MOUSE_CUSTOMER_KEY
+
+0x00 MOUSE_DPI_ANOTHER_KEY
+0x01 MOUSE_AUDIO_KEY
+0x02 MOUSE_AI_KEY
+0x03 MOUSE_TRANSMIT_KEY
+0x04 MOUSE_ONE_PULLUP_KEY
+)
+
+(
+0 MULTI_LED_ON
+1 MULTI_LED_BLINK
+)
+
+(
+0x01 B4_FUCTION
+0x02 B5_FUCTION
+0x03 DPI_FUCTION
+)
+
+(
+0x08 BK_VALUE
+0x10 FW_VALUE
+0xff DPI_VALUE
+)
+
+(
+0x01 MS_KEY
+0x02 KB_KEY
+0x03 APP_KEY
+)
+
+(
+0x00 PRESS_SHORT
+0x01 PRESS_LONG
+)
+
+
+
+(
+//zcode
+0xe00 mem_zcode_buff   
+
+256 ZCODE_BUFF_SIZE
+64 ZCODE_CODE_SIZE
+0xff ZCODE_FLAG
+
+0x00 ZCODE_00
+0x01 ZCODE_01
+0x02 ZCODE_02
+0x03 ZCODE_03
+0x04 ZCODE_04
+0x05 ZCODE_05
+0x06 ZCODE_06
+0x07 ZCODE_07
+0x10 ZCODE_10
+0x11 ZCODE_11
+0x12 ZCODE_12
+0x13 ZCODE_13
+0x14 ZCODE_14
+0x15 ZCODE_15
+0x16 ZCODE_16
+0x17 ZCODE_17
+0x20 ZCODE_20
+0x21 ZCODE_21
+0x22 ZCODE_22
+0x23 ZCODE_23
+0x24 ZCODE_24
+0x25 ZCODE_25
+0x26 ZCODE_26
+0x27 ZCODE_27 
+0x30 ZCODE_30
+0x31 ZCODE_31
+0x32 ZCODE_32
+0x33 ZCODE_33
+0x34 ZCODE_34
+0x35 ZCODE_35
+0x36 ZCODE_36
+0x37 ZCODE_37 
+0x40 ZCODE_40
+0x41 ZCODE_41
+0x42 ZCODE_42
+0x43 ZCODE_43
+0x44 ZCODE_44
+0x45 ZCODE_45
+0x46 ZCODE_46
+0x47 ZCODE_47
+0x50 ZCODE_50
+0x51 ZCODE_51
+0x52 ZCODE_52
+0x53 ZCODE_53
+0x54 ZCODE_54
+0x55 ZCODE_55
+0x56 ZCODE_56
+0x57 ZCODE_57
+0x60 ZCODE_60
+0x61 ZCODE_61
+0x62 ZCODE_62
+0x63 ZCODE_63
+0x64 ZCODE_64
+0x65 ZCODE_65
+0x66 ZCODE_66
+0x67 ZCODE_67
+0x70 ZCODE_70
+0x71 ZCODE_71
+0x72 ZCODE_72
+0x73 ZCODE_73
+0x74 ZCODE_74
+0x75 ZCODE_75
+0x76 ZCODE_76
+0x77 ZCODE_77
+0x80 ZCODE_80
+0x81 ZCODE_81
+0x82 ZCODE_82
+0x83 ZCODE_83
+0x84 ZCODE_84
+0x85 ZCODE_85
+0x86 ZCODE_86
+0x87 ZCODE_87
+0x90 ZCODE_90
+0x91 ZCODE_91
+0x92 ZCODE_92
+0x93 ZCODE_93
+0x94 ZCODE_94
+0x95 ZCODE_95
+0x96 ZCODE_96
+0x97 ZCODE_97
+0xA0 ZCODE_A0
+0xA1 ZCODE_A1
+0xA2 ZCODE_A2
+0xA3 ZCODE_A3
+0xA4 ZCODE_A4
+0xA5 ZCODE_A5
+0xA6 ZCODE_A6
+0xA7 ZCODE_A7
+0xB0 ZCODE_B0
+0xB1 ZCODE_B1
+0xB2 ZCODE_B2
+0xB3 ZCODE_B3
+0xB4 ZCODE_B4
+0xB5 ZCODE_B5
+0xB6 ZCODE_B6
+0xB7 ZCODE_B7
+0xC0 ZCODE_C0
+0xC1 ZCODE_C1
+0xC2 ZCODE_C2
+0xC3 ZCODE_C3
+0xC4 ZCODE_C4
+0xC5 ZCODE_C5
+0xC6 ZCODE_C6
+0xC7 ZCODE_C7
+0xd0 ZCODE_D0
+0xd1 ZCODE_D1
+0xe0 ZCODE_e0
+0xe1 ZCODE_e1
+0xe2 ZCODE_e2
+)
Index: format/app_rec.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/app_rec.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/app_rec.format	(working copy)
@@ -0,0 +1,412 @@
+
+memalloc rec(
+
+0 mem_malloc_rec_start
+
+//ota
+2 mem_rec_queue_ota_sptr
+2 mem_rec_queue_ota_eptr
+2 mem_rec_queue_ota_rptr
+2 mem_rec_queue_ota_wptr
+0 mem_rec_queue_ota_buf	//1280
+0 mem_rec_voice_raw_start
+799 mem_rec_voice_raw
+1 mem_rec_voice_raw_end
+
+//audio
+1 mem_rec_voice_queue_count
+20 mem_rec_queue_buf
+100 mem_rec_adpcm
+
+//nec
+255 mem_rec_nec_rx_start
+1 mem_rec_nec_rx_end
+255 mem_rec_nec_rx_store_start
+1 mem_rec_nec_rx_store_end
+
+4 mem_rec_ota_flash_buf_head
+0 mem_rec_ota_flash_buf	//300
+
+4 mem_rec_nec_flash_write_head
+0 mem_rec_nec_rx_info
+1 mem_rec_nec_rx_len
+2 mem_rec_nec_rx_perid_freq
+255 mem_rec_nec_rx_data
+1 mem_rec_nec_rx_analysis_end
+1 mem_rec_nec_rx_count
+
+1 mem_rec_nec_timer
+1 mem_rec_nec_timeout
+2 mem_rec_nec_usercode
+1 mem_rec_nec_datacode
+
+1 mem_rec_nec_learn_key_num
+1 mem_rec_nec_learn_key_state
+1 mem_rec_nec_learn_enable_flag
+4 mem_rec_nec_learn_timeout
+1 mem_rec_nec_learn_state
+
+20 mem_rec_period_cal
+2 mem_rec_period_cal_ptr
+1 mem_rec_period_cal_count
+20 mem_rec_nec_period_array
+
+2 mem_rec_nec_store_sptr
+2 mem_rec_nec_store_eptr
+2 mem_rec_nec_store_wptr
+
+1 mem_rec_nec_receive_data0
+1 mem_rec_nec_receive_data1
+1 mem_rec_nec_receive_data2
+3 mem_rec_nec_receive_data
+1 mem_rec_nec_data
+
+1 mem_rec_nec_period
+1 mem_rec_nec_duty
+1 mem_rec_nec_freq
+2 mem_rec_nec_carry_time
+
+4 mem_rec_nec_learn_stime
+4 mem_rec_nec_learn_ntime
+4 mem_rec_nec_learn_outtime
+1 mem_rec_nec_learn_succ
+2 mem_rec_nec_learn_succ_ptr
+
+1 mem_rec_nec_learn_send_flag
+1 mem_rec_nec_led_state
+1 mem_rec_nec_led_blink_count
+
+1 mem_malloc_rec_end
+)
+
+
+xmemalloc rec(
+0 mem_xmalloc_rec_start
+1215 mem_rec_le_att_list
+
+//led
+0 mem_rec_led_style
+1 mem_rec_led_style_type
+1 mem_rec_led_style_blink_count
+1 mem_rec_led_style_gpio
+2 mem_rec_led_style_on_time
+2 mem_rec_led_style_off_time
+2 mem_rec_led_style_on_callback
+2 mem_rec_led_style_off_callback
+
+//led2 
+0 mem_rec_led2_style
+1 mem_rec_led2_style_type
+1 mem_rec_led2_style_blink_count
+1 mem_rec_led2_style_gpio
+2 mem_rec_led2_style_on_time
+2 mem_rec_led2_style_off_time
+2 mem_rec_led2_style_on_callback
+2 mem_rec_led2_style_off_callback
+
+//led ble pair
+0 mem_rec_le_pair_led_style
+1 mem_rec_le_pair_led_style_type
+1 mem_rec_le_pair_led_style_blink_count
+1 mem_rec_le_pair_led_style_gpio
+2 mem_rec_le_pair_led_style_on_time
+2 mem_rec_le_pair_led_style_off_time
+
+//led ble reconn
+0 mem_rec_le_reconn_led_style
+1 mem_rec_le_reconn_led_style_type
+1 mem_rec_le_reconn_led_style_blink_count
+1 mem_rec_le_reconn_led_style_gpio
+2 mem_rec_le_reconn_led_style_on_time
+2 mem_rec_le_reconn_led_style_off_time
+
+//led adc low power
+0 mem_rec_adc_low_led_style
+1 mem_rec_adc_low_led_style_type
+1 mem_rec_adc_low_led_style_blink_count
+1 mem_rec_adc_low_led_style_gpio
+2 mem_rec_adc_low_led_style_on_time
+2 mem_rec_adc_low_led_style_off_time
+
+
+//10ms timer
+4 mem_rec_ui_timer_btclk
+1 mem_rec_ui_timer_count
+2 mem_rec_cb_timer
+
+//tscan
+1 mem_rec_tscan_timer
+1 mem_rec_tscan_timeout
+
+1 mem_rec_tscan_row_nums
+1 mem_rec_tscan_col_nums
+2 mem_rec_tscan_col_gpio_ptr
+1 mem_rec_tscan_row_scanned
+1 mem_rec_tscan_col_scanned
+1 mem_rec_tscan_record_row
+1 mem_rec_tscan_record_col
+10 mem_rec_tscan_row_gpio
+10 mem_rec_tscan_col_gpio
+1 mem_rec_tscan_sequence
+1 mem_rec_tscan_gpio_nums
+1 mem_rec_tscan_row_scan_loop_count
+0 mem_rec_key_state
+1 mem_rec_tscan_gndkey_state
+1 mem_rec_tscan_key_state
+2 mem_rec_tscan_record_temp
+1 mem_rec_tscan_key_need_send_flag
+1 mem_rec_tscan_current_key_num
+1 mem_rec_gpio_wakeup_source
+1 mem_rec_tscan_gndkey_record_temp
+1 mem_rec_tscan_gndkey_need_send_flag
+
+40 mem_rec_tscan_key_nums_list
+10 mem_rec_tscan_gndkey_nums_list
+
+//combin key
+8 mem_rec_tscan_key_num_bit
+8 mem_rec_tscan_combin_key_num_bit
+2 mem_rec_tscan_current_gpio_ptr
+2 mem_rec_tscan_record_now
+1 mem_rec_combin_key_timeout
+1 mem_rec_combin_key_timer
+
+//tscan debounce
+1 mem_rec_gpio_bit_first
+1 mem_rec_gpio_bit_second
+1 mem_rec_gpio_bit_check
+1 mem_rec_gpio_for_wake_pullup
+
+//keypad
+1 mem_rec_keypad_type
+160 mem_rec_key_keyboard_value_list
+48 mem_rec_key_consumer_value_list
+64 mem_rec_key_mouse_value_list
+48 mem_rec_key_nec_value_list
+
+0 mem_rec_key_press_le
+3 mem_rec_key1_press_le
+3 mem_rec_key2_press_le
+3 mem_rec_key3_press_le
+3 mem_rec_key4_press_le
+3 mem_rec_key5_press_le
+3 mem_rec_key6_press_le
+3 mem_rec_key7_press_le
+3 mem_rec_key8_press_le
+3 mem_rec_key9_press_le
+3 mem_rec_key10_press_le
+3 mem_rec_key11_press_le
+3 mem_rec_key12_press_le
+3 mem_rec_key13_press_le
+3 mem_rec_key14_press_le
+3 mem_rec_key15_press_le
+3 mem_rec_key16_press_le
+3 mem_rec_key17_press_le
+3 mem_rec_key18_press_le
+3 mem_rec_key19_press_le
+3 mem_rec_key20_press_le
+3 mem_rec_key21_press_le
+
+3 mem_rec_key_release_le
+21 mem_rec_key_map
+1 mem_rec_gnd_key_offset
+1 mem_rec_keypad_fun
+
+
+//ble param
+1 mem_rec_le_enable_notify
+1 mem_rec_le_data_len
+1 mem_rec_le_connect_state
+
+//gatt
+2 mem_rec_report_id1_handle
+2 mem_rec_report_id2_handle
+2 mem_rec_report_id3_handle
+2 mem_rec_report_id4_handle
+
+//queue
+1 mem_rec_queue_each_size
+1 mem_rec_queue_length
+1 mem_rec_queue_curr_num
+1 mem_rec_queue_read_ptr
+1 mem_rec_queue_write_ptr
+32 mem_rec_queue_ele
+
+//adpcm
+16 mem_rec_ad_indexTable1
+356 mem_rec_ad_stepsizeTable1
+
+4 mem_rec_ad_state_valpred1
+4 mem_rec_ad_state_index1
+1 mem_rec_ad_in_numSamples1
+2 mem_rec_ad_in_ptr1
+2 mem_rec_ad_out_ptr1
+1 mem_rec_ad_sign1
+1 mem_rec_ad_delta1
+4 mem_rec_ad_step1
+4 mem_rec_ad_valpred1
+4 mem_rec_ad_index1
+4 mem_rec_ad_vpdiff1
+4 mem_rec_ad_inputbuffer1
+1 mem_rec_ad_bufferstep1	
+
+4 mem_rec_ad_val1
+4 mem_rec_ad_outputbuffer1
+4 mem_rec_ad_diff1
+
+1 mem_rec_voice_enable
+20 mem_rec_voice_notify
+2 mem_rec_adc_dma_rptr
+
+2 mem_rec_voice_notify_apk_handle
+2 mem_rec_voice_notify_box_handle
+2 mem_rec_control_notify_apk_handle
+2 mem_rec_control_notify_box_handle
+
+//filter policy
+1 mem_rec_white_list_num
+1 mem_rec_le_scan_filter_policy
+4 mem_rec_white_list_flash_write_head
+48 mem_rec_white_list
+1 mem_rec_le_req_type
+
+//nec 
+1 mem_rec_nec_send_gpio
+1 mem_rec_nec_receive_gpio
+
+//ota
+2 mem_rec_ota_write_index
+4 mem_rec_ota_write_length
+2 mem_rec_ota_write_data_addr
+3 mem_rec_ota_write_flash_addr
+3 mem_rec_ota_write_flash_addr_start
+4 mem_rec_ota_total_sum
+1 mem_rec_ota_update_flash_mode
+
+2 mem_rec_ota_version
+2 mem_rec_ota_buck_size
+2 mem_rec_ota_packet_max_len
+1 mem_rec_ota_work_mode
+
+2 mem_rec_ota_notify_handle
+1 mem_rec_ota_notify_opcode
+1 mem_rec_ota_notify_result
+9 mem_rec_ota_notify_data
+
+0 mem_rec_ota_le_conn_update_param
+2 mem_rec_ota_le_interval_min
+2 mem_rec_ota_le_interval_max
+2 mem_rec_ota_le_latency
+2 mem_rec_ota_le_timeout
+
+1 mem_rec_ota_reset_timeout
+1 mem_rec_ota_le_conn_param_update
+1 mem_rec_ota_enable
+1 mem_rec_le_packet_size
+
+3 mem_rec_ota_flash_base_addr
+3 mem_rec_ota_flash_offset_addr
+
+2 mem_rec_queue_ota_count
+2 mem_rec_ota_queue_size
+
+3 mem_rec_code_a_flash_addr
+3 mem_rec_code_b_flash_addr
+
+
+
+1 mem_xmalloc_rec_end
+)
+
+
+(
+1 KEY_DOWN 
+0 KEY_UP 
+)
+
+(
+0x00 KEYPAD_TYPE_CONSUMER
+0x01 KEYPAD_TYPE_MOUSE
+0x02 KEYPAD_TYPE_KEYPAD
+0x03 KEYPAD_TYPE_NEC
+)
+
+(
+0x03 MAX_QUEUE_UNIT
+)
+
+(
+0x100 NEC_STORE_BUF_SIZE
+0x3fff NEC_LEAR_HEAD
+)
+
+(
+0 INDEX_0
+1 INDEX_1
+2 INDEX_2
+3 INDEX_3
+4 INDEX_4
+5 INDEX_5
+6 INDEX_6
+7 INDEX_7
+8 INDEX_8
+9 INDEX_9
+10 INDEX_10
+11 INDEX_11
+12 INDEX_12
+13 INDEX_13
+14 INDEX_14
+15 INDEX_15
+16 INDEX_16
+17 INDEX_17
+18 INDEX_18
+19 INDEX_19
+20 INDEX_20
+)
+
+(
+0x00 NONE_FILTER
+0x01 WHITE_LIST_SCAN_FILTER
+0x02 WHITE_LIST_CONNECT_FILTER
+0x03 WHITE_LIST_CONN_SCAN_FILTER
+)
+
+(
+0xAB OTA_EVENT
+0xBA OTA_COMMAND
+)
+
+(
+0x10 OTA_PORTOCOL_VERSION_REQUEST
+0x11 OTA_BUCK_SIZE_REQUEST
+0x12 OTA_WORK_MODE_REQUEST
+0x13 OTA_SWITCH_WORK_MODE_REQUEST
+0x14 OTA_FLASH_CHECKSUM_REQUEST
+0x15 OTA_START_REQUEST
+0x16 OTA_DATA_WRITE_CMD
+0x17 OTA_DATA_WRITE_REQUEST
+0x18 OTA_END_REQUEST
+)
+
+(
+0x00 OTA_UPDATE_FLASH_NORMAL
+)
+
+(
+0x00 OTA_RESULT_SUCCESS
+0x01 OTA_RESULT_WORKMODE_NOT_SUPPORT
+0x02 OTA_RESULT_WORKMODE_ERROR
+0x03 OTA_RESULT_FLASHMODE_NOT_SUPPORT
+0x04 OTA_RESULT_INDEX_ERROR
+0x05 OTA_RESULT_LENGTH_ERROR
+0x06 OTA_RESULT_BUCK_SIZE_ERROR
+0x07 OTA_RESULT_WRITE_FLASH_ERROR
+0xFF OTA_RESULT_ERROR
+)
+
+(
+0x01 OTA_LE_CONN_PARAM_UPDATE_ENABLE
+0x00 OTA_LE_CONN_PARAM_UPDATE_DISABLE
+)
+
+
Index: format/app_remote_car.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/app_remote_car.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/app_remote_car.format	(working copy)
@@ -0,0 +1,43 @@
+
+xmemalloc g24_tx_remote(
+
+4 mem_remote_lpm_gpio_config_flag
+1 mem_remote_lpm_gpio_config_io_temp
+
+1 mem_24g_tx_led_map
+1 mem_24g_led_count
+2 mem_24g_lpm_timer_count
+2 mem_24g_lpm_enter_count	
+6 mem_remote_otp_lot_xy_temp
+4 mem_remote_full_control_remote_lap
+
+0 mem_remote_car_key_conf0
+1 mem_remote_car_key_conf0_pin
+0 mem_remote_car_key_conf1
+1 mem_remote_car_key_conf1_pin
+0 mem_remote_car_key_conf2
+1 mem_remote_car_key_conf2_pin
+0 mem_remote_car_key_conf3
+1 mem_remote_car_key_conf3_pin
+0 mem_remote_car_key_conf4
+1 mem_remote_car_key_conf4_pin
+0 mem_remote_car_key_conf5
+1 mem_remote_car_key_conf5_pin
+0 mem_remote_car_key_conf6
+1 mem_remote_car_key_conf6_pin
+
+1 mem_remote_le_24g_recv_ack_flag
+1 mem_key_public_gpio
+1 mem_remote_mult_key
+
+2 mem_remote_le_24g_ch_count
+1 mem_le_24g_tx_send_flag
+1 mem_remote_le_24g_tx_pair_mode
+4 mem_remote_24g_addr_other
+
+12 mem_remote_24g_tx_payload_temp
+12 mem_remote_24g_rx_payload_temp
+
+)
+
+
Index: format/app_shutter.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/app_shutter.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/app_shutter.format	(working copy)
@@ -0,0 +1,194 @@
+
+
+xmemalloc shutter(
+
+////////////////////////////////////
+//ble shutter configsuoy
+1 mem_ble_shutter_enable_notify
+2 mem_ble_shutter_reconn_adv_interval
+2 mem_ble_shutter_discovery_adv_interval
+2 mem_ble_shutter_reconn_timeout
+2 mem_ble_shutter_reconn_timer
+2 mem_ble_shutter_reconn_blink_on_time
+2 mem_ble_shutter_reconn_blink_off_time
+2 mem_ble_shutter_discovery_blink_on_time
+2 mem_ble_shutter_discovery_blink_off_time
+
+2 mem_ble_shutter_interval_min
+2 mem_ble_shutter_interval_max
+2 mem_ble_shutter_latency
+2 mem_ble_shutter_timeout
+
+2 mem_ble_shutter_interval_min_new
+2 mem_ble_shutter_interval_max_new
+2 mem_ble_shutter_latency_new
+2 mem_ble_shutter_timeout_new
+
+//////////////////shutter sleep timeout//////////////////
+2 mem_ble_shutter_discovery_timeout
+2 mem_ble_shutter_connect_timeout
+2 mem_shutter_sleep_timeout
+2 mem_shutter_sleep_timer
+
+/////////////////////////////////////////////////////////////////
+1 mem_shutter_hard_soft_switch_case
+1 mem_shutter_soft_switch_button_gpio
+1 mem_shutter_soft_switch_power_state
+1 mem_shutter_soft_switch_poweron_time
+1 mem_shutter_soft_switch_poweroff_time
+2 mem_shutter_soft_switch_poweron_callback_function
+2 mem_shutter_soft_switch_poweroff_callback_function
+
+0 mem_shutter_keyscan
+1 mem_shutter_key_num
+2 mem_cb_shutter_keycan
+1 mem_shutter_key_conf0
+1 mem_shutter_key_conf1
+
+5 mem_key0_press
+5 mem_key1_press
+5 mem_key2_press
+
+5 mem_key0_release
+5 mem_key1_release
+5 mem_key2_release
+
+5 mem_ble_data_buffer1
+5 mem_ble_data_buffer2
+5 mem_ble_data_buffer3
+5 mem_ble_data_buffer4
+5 mem_ble_data_buffer5
+5 mem_ble_data_buffer6
+5 mem_ble_data_buffer7
+5 mem_ble_data_buffer8
+50 mem_ble_data_buffer9_58
+
+1 mem_queue_each_size
+1 mem_queue_length
+1 mem_queue_curr_num
+1 mem_queue_read_ptr
+1 mem_queue_write_ptr
+32 mem_queue_ele
+
+170 mem_shutter_nv_data
+
+0 mem_shutter_led_struct_app_led
+1 mem_shutter_led_struct_app_led_type
+1 mem_shutter_led_struct_app_led_blink_count
+1 mem_shutter_led_struct_app_led_gpio
+2 mem_shutter_led_struct_app_led_on_time
+2 mem_shutter_led_struct_app_led_off_time
+2 mem_shutter_led_struct_app_led_on_callback
+2 mem_shutter_led_struct_app_led_off_callback
+
+0 mem_shutter_power_off_led_style
+1 mem_shutter_power_off_led_style_type
+1 mem_shutter_power_off_led_style_blink_count
+1 mem_shutter_power_off_led_style_gpio
+2 mem_shutter_power_off_led_style_on_time
+2 mem_shutter_power_off_led_style_off_time
+2 mem_shutter_power_off_led_style_on_callback
+2 mem_shutter_power_off_led_style_off_callback
+
+1 mem_shutter_soft_swtich_botton_down
+11 mem_shutter_soft_swtich_led_struct_temp
+1 mem_shutter_power_off_timeout
+1 mem_shutter_power_off_timer
+2 mem_shutter_key_conf0_temp
+1 mem_shutter_led_struct_app_led_gpio_temp
+1 mem_shutter_hard_soft_switch_case_temp
+1 mem_shutter_soft_switch_button_gpio_temp
+
+1 mem_shutter_soft_switch_first_power_on
+1 mem_shutter_dy_conf
+)
+
+
+
+
+(
+0 BLE_SHUTTER
+1 CLASSIC_SHUTTER
+)
+
+(
+0x0000 NVRAM_EEPROM_OFFSET
+)
+
+(
+0x1b3a SHUTTER_EEPROM_CONFIG_CRC
+)
+
+(
+5 MAX_QUEUE_NUM
+5 SHUTTER_BLE_DATA_BUFFER
+5 SHUTTER_CLASSIC_DATA_BUFFER
+)
+
+
+(
+0x13	GATT_CONSUMER_NOTIFY_HANDLE
+0x14	GATT_CONSUMER_WRITE_HANDLE
+0x17	GATT_KEYBOARD_NOTIFY_HANDLE
+0x18	GATT_KEYBOARD_WRITE_HANDLE
+)
+
+(
+//20ms
+0x0020	FAST_ADV_INTERVAL_VALUE
+//100ms
+0x00a0	SLOW_ADV_INTERVAL_VALUE
+)
+
+
+(
+0 ATT_BIT_NOTIFICATION
+1 ATT_BIT_INDICATION
+)
+///////////////////////////////////////////////////////////////////////////////////////
+
+(
+0 HARD_SWITCH
+1 SOFT_SWITCH
+)
+
+
+(
+1  FLAG_SHUTTER_HID_DISCONN_TIMEOUT
+5 FLAG_SHUTTER_CABLE_UNPLUG_TIMEOUT
+)
+
+(//Data Rom Buffer Addr
+313		BLE_GATT_LIST_SIZE
+487		BT_SDP_LIST_SIZE
+40		BLE_KEY_VALUE_LIST_SIZE
+40		BT_KEY_VALUE_LIST_SIZE
+)
+
+
+(//soft switch power state
+0		SS_STATE_POWER_UP
+1		SS_STATE_POWER_ON
+2		SS_STATE_POWER_OFF
+)
+
+(
+0		SS_POWER_STATE_OFFSET
+1		SS_POWER_ON_TIME
+2		SS_POWER_OFF_TIME
+3		SS_POWER_ON_CB
+5		SS_POWER_OFF_CB
+
+)
+
+(
+
+0x4FFE SIM_IIC_SCL_GPIO_NUM
+0x4FFF SIM_IIC_SDA_GPIO_NUM
+
+)
+
+(
+0 SHUTTER_TYPE
+1 SHUTTER_DY_TYPE
+)
Index: format/app_shutter_dy.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/app_shutter_dy.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/app_shutter_dy.format	(working copy)
@@ -0,0 +1,287 @@
+
+
+xmemalloc shutter_dy(
+
+////////////////////////////////////
+//shutter common config
+
+//timers
+1 mem_shutter_1s_timer
+2 mem_shutter_timer_625us
+
+//patch variable
+11 mem_rf_init_data_new
+2 mem_key_value_xmem
+230 mem_shutter_le_hid_map
+412 mem_shutter_le_uuid_sup
+2 mem_shutter_le_map_len_android
+2 mem_shutter_le_map_len_ios
+16 mem_dy_le_search_service_uuid
+1 mem_iphone_flag
+1 mem_send_data_delay
+4 mem_key_send_clk
+10 mem_shutter_key_state0
+10 mem_shutter_key_state1
+10 mem_shutter_key_state2
+10 mem_shutter_key_state3
+10 mem_shutter_key_state4
+10 mem_shutter_key_state5
+10 mem_shutter_key_state6
+10 mem_shutter_key_state7
+10 mem_shutter_key_state8
+
+10 mem_dy_key0_press
+10 mem_dy_key1_press
+10 mem_dy_key2_press
+10 mem_dy_key3_press
+10 mem_dy_key4_press
+10 mem_dy_key5_press
+10 mem_dy_key6_press
+10 mem_dy_key7_press
+10 mem_dy_key8_press
+
+15 mem_key0_release_new
+15 mem_key1_release_new
+15 mem_key2_release_new
+15 mem_key3_release_new
+15 mem_key4_release_new
+15 mem_key5_release_new
+15 mem_key6_release_new
+15 mem_key7_release_new
+15 mem_key8_release_new
+
+3 mem_key0_long_press
+3 mem_key1_long_press
+3 mem_key2_long_press
+3 mem_key3_long_press
+3 mem_key4_long_press
+3 mem_key5_long_press
+3 mem_key6_long_press
+3 mem_key7_long_press
+3 mem_key8_long_press
+
+3 mem_key0_long_release
+3 mem_key1_long_release
+3 mem_key2_long_release
+3 mem_key3_long_release
+3 mem_key4_long_release
+3 mem_key5_long_release
+3 mem_key6_long_release
+3 mem_key7_long_release
+3 mem_key8_long_release
+
+2 mem_combine_key0
+2 mem_combine_key1
+2 mem_combine_key2
+2 mem_combine_key3
+2 mem_combine_key4
+2 mem_combine_key5
+
+2 mem_combine_key_state0
+
+10 mem_combine_key0_press
+10 mem_combine_key1_press
+10 mem_combine_key2_press
+10 mem_combine_key3_press
+10 mem_combine_key4_press
+10 mem_combine_key5_press
+10 mem_combine_key_release
+
+4 mem_shutter_move_data
+
+10 mem_key0_press_i
+10 mem_key1_press_i
+10 mem_key2_press_i
+10 mem_key3_press_i
+10 mem_key4_press_i
+10 mem_key5_press_i
+10 mem_key6_press_i
+10 mem_key7_press_i
+
+15 mem_key0_release_new_i
+15 mem_key1_release_new_i
+15 mem_key2_release_new_i
+15 mem_key3_release_new_i
+15 mem_key4_release_new_i
+15 mem_key5_release_new_i
+15 mem_key6_release_new_i
+15 mem_key7_release_new_i
+15 mem_key8_release_new_i
+
+3 mem_key0_long_press_i
+3 mem_key1_long_press_i
+3 mem_key2_long_press_i
+3 mem_key3_long_press_i
+3 mem_key4_long_press_i
+3 mem_key5_long_press_i
+3 mem_key6_long_press_i
+3 mem_key7_long_press_i
+3 mem_key8_long_press_i
+
+3 mem_key0_long_release_i
+3 mem_key1_long_release_i
+3 mem_key2_long_release_i
+3 mem_key3_long_release_i
+3 mem_key4_long_release_i
+3 mem_key5_long_release_i
+3 mem_key6_long_release_i
+3 mem_key7_long_release_i
+3 mem_key8_long_release_i
+
+
+10 mem_key3_release_new_t
+10 mem_key3_release_new_i_t
+1 mem_key3_press_count
+1 mem_shutter_like_timeout
+1 mem_shutter_key_pressed
+1 mem_shutter_combine_key_release
+550 mem_shutter_mousekey_value_list
+1 mem_shutter_back_count
+1 mem_shutter_le_conned
+
+0 mem_move_config
+1 mem_shutter_iphone_beyond_x_count
+1 mem_shutter_iphone_beyond_y_count
+2 mem_shutter_move_data_x
+2 mem_shutter_move_data_y
+1 mem_last_shutter_le_iphone_flag
+0 mem_move_config_end
+1 mem_shutter_back_count_cache
+1 mem_shutter_iphone_beyond_x_cache
+1 mem_shutter_iphone_beyond_y_cache
+10 mem_shutter_iphone_move_mid
+1 mem_shutter_long_key_released_flag
+1 mem_shutter_move_mid_timer
+1 mem_shutter_pairing_success
+2 mem_combine_key_release_value
+1 mem_last_press_key_value
+1 mem_shutter_first_move
+1 mem_move_mode_set
+1 mem_move_mode_key_index
+1 mem_move_mode_trigger_enable
+5 mem_shutter_android_move_mid
+10 mem_shutter_iphone_up_mid
+10 mem_shutter_iphone_like_mid
+1 mem_shutter_key_num_conf
+9 mem_shutter_dy_key_conf
+11 mem_le_dy_adv_data
+12 mem_le_dy_scan_data
+8 mem_ble_shutter_dy_interval_min_android
+8 mem_ble_shutter_dy_interval_min_ios
+8 mem_shutter_ble_discovery_time_conf
+2 mem_queue_dy_each_size
+
+7 mem_shutter_led_on_light_dark_led_conf
+7 mem_shutter_led_off_light_dark_led_conf
+4 mem_shutter_reconn_blink_on_time_conf
+4 mem_shutter_discovery_blink_on_time_conf
+2 mem_shutter_efuse_start_offset
+2 mem_shutter_efuse_end_offset
+
+0 mem_initial_move_conf
+2 mem_android_initial_move_x
+2 mem_android_initial_move_y
+2 mem_iphone_initial_move_x
+2 mem_iphone_initial_move_y
+//修改增加保存参数
+0 mem_otp_move_config
+2 mem_otp_shutter_move_data_x
+2 mem_otp_shutter_move_data_y
+1 mem_otp_last_shutter_le_iphone_flag
+0 mem_otp_move_config_end
+2 mem_otp_write_offset_addr
+2 mem_otp_read_offset_addr
+2 mem_otp_read_ios_android_addr
+2 mem_shutter_le_pairing_handle
+2 mem_shutter_temp_count
+1 mem_shutter_first_read_flag
+1 mem_shutter_valid_data_flag
+1 mem_shutter_volume_timer
+1 mem_shutter_link_timer
+8 mem_shutter_link_data
+8 mem_shutter_link_data_i
+1 mem_shutter_link_loop_flag
+0 mem_shutter_end
+)
+
+
+(
+10 MAX_QUEUE_NUM_COMBINEKEY
+15 MAX_QUEUE_NUM_RELEASE
+3 MAX_QUEUE_NUM_LONG
+3 MAX_QUEUE_NUM_LONG_RELEASE
+10 MAX_QUEUE_NEW_PRESS
+
+10 EVERY_PAYLOAD_LEN
+)
+
+
+(
+0x24	GATT_KEYBOARD_WRITE_HANDLE_NEW
+)
+
+
+///////////////////////////////////////////////////////////////////////////////////////
+
+(//Data Rom Buffer Addr
+640		BT_DY_KEY_VALUE_LIST_SIZE
+)
+
+//otp address offset
+(
+0x05   SHUTTER_PARA_TOTAL_NUM
+//0x7b0  SHUTTER_EFUSE_START_OFFECT	//起始地址
+//0x680  SHUTTER_EFUSE_END_OFFECT	       //结束地址
+)
+
+
+(
+//uart config
+115200 UART_BAUD
+)
+
+(
+10 SHUTTER_KEY_CONF_SATE_BYTES
+0 KEY_STATE_PRESS_CLK_OFFSET
+4 KEY_STATE_PRESS_COUNT_OFFSET
+5 KEY_STATE_RELEASE_CLK_OFFSET
+9 KEY_STATE_LONGPRESS_OFFSET
+4 KEY_STATE_PRESS_CLK_LENGTH
+1 KEY_STATE_PRESS_COUNT_LENGTH
+4 KEY_STATE_RELEASE_CLK_LENGTH
+1 KEY_STATE_LONGPRESS_LENGTH
+)
+
+(
+0  SHUTTER_RIGHT_KEY_NUM
+1  SHUTTER_LIKE_KEY_NUM
+2  SHUTTER_DOWN_KEY_NUM
+3  SHUTTER_PHOTO_KEY_NUM
+4  SHUTTER_UP_KEY_NUM
+5  SHUTTER_LEFT_KEY_NUM
+6  SHUTTER_MOVE_KEY_NUM
+7  SHUTTER_FUN_KEY_NUM
+)
+
+(
+//0xaa ANDROID_INITIAL_MOVE_X //170
+//0x78 ANDROID_INITIAL_MOVE_Y //120
+//0x69 IPHONE_INITIAL_MOVE_X
+//0x38 IPHONE_INITIAL_MOVE_Y
+0X55 ANDROID_EVERY_MOVE_SIZE
+0x07 IPHONE_EVERY_MOVE_SIZE
+0xfff IPHONE_ONCE_MAX_MOVE_VALUE
+)
+
+(
+0x00 MOVE_COMBINE_KEY
+0x01 MOVE_SINGLE_KEY
+)
+
+(
+//6key or 7key conf
+6 SHUTTER_SIX_KEY
+7 SHUTTER_SEVEN_KEY
+8 SHUTTER_EIGHT_KEY
+)
+
Index: format/ble_protocol_stack/le.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/ble_protocol_stack/le.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/ble_protocol_stack/le.format	(working copy)
@@ -0,0 +1,441 @@
+
+memalloc(
+260 mem_le_rxbuf
+
+/* security temp */
+4 mem_le_mic
+4 mem_le_peer_mic
+//8 mem_le_skdm
+//8 mem_le_skds
+16 mem_le_mrand
+
+
+/* ========= le context =========== */
+1 mem_le_state
+1 mem_le_mode
+2 mem_le_tsniff
+4 mem_le_anchor
+6 mem_le_clk_offset
+2 mem_le_receive_window
+6 mem_le_plap
+1 mem_le_conn_handle
+1 mem_le_arq
+1 mem_le_ch
+1 mem_le_hop
+2 mem_le_event_count
+4 mem_le_supervision_timer
+2 mem_le_instant
+1 mem_le_channels
+1 mem_le_op
+
+	/* these 3 should NOT be seperated */
+4 mem_le_access
+3 mem_le_crcinit
+1 mem_le_window_size
+
+	/* these 3 should NOT be seperated */
+2 mem_le_slave_latency
+2 mem_le_superto
+5 mem_le_channel_map
+
+
+1 mem_le_rx_phy
+1 mem_le_tx_phy
+
+9 mem_le_update_new_param
+
+16 mem_le_sk
+
+1 mem_le_peer_sca
+1 mem_le_err_code
+1 mem_le_ll_pairing_fail_reason
+
+/* ========= le context ending =========== */
+
+
+)
+
+amemalloc mem_le_update_new_param(
+//update connection parameter
+	0 mem_le_new_param
+	1 mem_le_new_transmitwindowsize
+	2 mem_le_new_transmitwindowoffset
+	2 mem_le_new_conninterval
+	2 mem_le_new_connslavelatency
+	2 mem_le_new_connsupervisiontimeout
+)
+
+amemalloc mem_le_update_new_param(
+//update map parameter
+	5 mem_le_new_map
+)
+
+amemalloc mem_le_update_new_param(
+//update phy parameter
+	1 mem_le_new_m2s_phy
+	1 mem_le_new_s2m_phy
+)
+
+amemalloc mem_le_rxbuf(
+//data channel PDU
+	1 mem_le_rxbuf_data_header
+	1 mem_le_rxbuf_data_length
+	255 mem_le_rxbuf_data_payload
+)
+
+amemalloc mem_le_rxbuf(
+//data channel LL control PDU
+	1 mem_le_rxbuf_data_ll_header
+	1 mem_le_rxbuf_data_ll_length
+	1 mem_le_rxbuf_data_ll_opcode
+	26 mem_le_rxbuf_data_ll_control_data
+)
+
+xmemalloc(
+1 mem_version
+2 mem_company_id
+2 mem_sub_version
+
+2 mem_le_dsniff
+2 mem_le_conn_interval
+1 mem_le_tx_ifs_defference
+1 mem_le_tx2m_delay
+
+1 mem_le_txheader
+1 mem_le_txlen
+256 mem_le_txpayload
+
+//modified name
+1 mem_le_name_len
+30 mem_le_name
+
+
+/* smp related */
+
+16 mem_le_ltk
+1 mem_ltk_exists
+16 mem_le_rconfirm
+16 mem_le_srand
+1 mem_le_iat
+1 mem_le_rat
+1 mem_le_preq
+1 mem_le_preq_iocap
+1 mem_le_preq_oob
+1 mem_le_preq_auth
+1 mem_le_preq_max_keysize
+1 mem_le_preq_init_key_distribution
+1 mem_le_preq_resp_key_distribution
+1 mem_le_pres
+1 mem_le_pres_iocap
+1 mem_le_pres_oob
+1 mem_le_pres_auth
+1 mem_le_pres_max_keysize
+1 mem_le_pres_init_key_distribution
+1 mem_le_pres_resp_key_distribution
+
+
+
+//START of LE conn parameter structure
+0 mem_le_conn_param
+1 mem_le_conn_peer_addr_type
+6 mem_le_conn_peer_addr
+1 mem_le_conn_own_addr_type
+2 mem_le_interval_min
+2 mem_le_interval_max
+2 mem_le_latency
+2 mem_le_timeout
+//START of LE conn parameter structure
+
+
+3 mem_le_lap
+1 mem_le_uap
+2 mem_le_nap
+
+
+2 mem_le_local_mtu
+2 mem_le_remote_mtu
+
+8 mem_le_skdm
+8 mem_le_skds
+
+2 mem_le_init_superto
+2 mem_ui_le_uuid_table
+
+1 mem_le_secure_connect_flag
+1 mem_le_secure_connect_state
+1 mem_le_sc_confirm_gkey_flag
+
+
+1 mem_le_pairing_state
+1 mem_le_enc_state
+1 mem_le_pairing_mode
+4 mem_le_tk
+2 mem_le_ediv
+8 mem_le_rand
+16 mem_le_irk
+
+//LE attribute list
+4 mem_le_transmit_window
+
+//ble General configuration 
+1 mem_le_configuration
+16 mem_le_fixed_ltk
+2 mem_le_pairing_handle
+
+
+1 mem_le_packet_llid
+
+//for continue
+2 mem_le_l2cap_size
+2 mem_le_packet_len_recved
+2 mem_le_payload_ptr
+
+/* test */
+1 mem_le_testtype
+1 mem_cmd_le_create_conn
+
+//ble gatt signaling
+1 mem_le_signaling_identifier
+2 mem_le_l2cap_signaling_conn_param_update_rsp_result
+
+1 mem_le_md_count
+2 mem_ble_l2cap_tx_buff0_ptr
+2 mem_ble_l2cap_tx_buff_size_ptr
+)
+
+(//mem_le_T_IFS
+150 PARAM_T_IFS_150US
+20000 PARAM_20MS_INIT
+-11 PARAM_SYNC_TIME_DIFFERENCE
+40 PARAM_CODED_C1_TERM1_TIME_40US
+1666 PARAM_WINDOWN_SIZE
+//T_IFS = 150-modem(CRC time)
+15000 param_sifs
+)
+
+
+(
+0 DEFAULT_STATES
+1 IPHONE_LOST_LTK
+2 MODULE_LOST_LTK
+3 LTK_NOT_LOST
+)
+
+	//BLE ErrorCodes
+	(    
+	0x01 ERROR_UNKNOWN_HCI_COMMAND
+	0x02 ERROR_NO_CONNECTION
+	0x03 ERROR_HARDWARE_FAILURE
+	0x04 ERROR_PAGE_TIMEOUT
+	0x05 ERROR_AUTHENTICATION_FAILURE
+	0x06 ERROR_KEY_MISSING
+	0x07 ERROR_MEMORY_FULL
+	0x08 ERROR_CONNECTION_TIMEOUT
+	0x09 ERROR_MAX_CONNECTIONS
+	0x0A ERROR_MAX_SCO_CONNECTIONS
+	0x0B ERROR_MAX_ACL_CONNECTIONS
+	0x0C ERROR_COMMAND_DISALLOWED
+	0x0D ERROR_HOST_REJECT_LIMITED_RESOURCES
+	0x0E ERROR_HOST_REJECT_SECURITY_REASONS
+	0x0F ERROR_HOST_REJECT_REMOTE_IS_ONLY_PERSONAL
+	0x10 ERROR_HOST_TIMEOUT
+	0x11 ERROR_UNSUPPORTED_FEATURE_OR_PARAMETER_VALUE
+	0x12 ERROR_INVALID_HCI_COMMAND_PARAMETERS
+	0x13 ERROR_REMOTE_USER_TERMINATED_CONNECTION
+	0x14 ERROR_REMOTE_LOW_RESOURCES
+	0x15 ERROR_REMOTE_POWERING_OFF
+	0x16 ERROR_CONNECTION_TERMINATED_BY_LOCAL_HOST
+	0x17 ERROR_REPEATED_ATTEMPTS
+	0x18 ERROR_PAIRING_NOT_ALLOWED
+	0x19 ERROR_UNKNOWN_LMP_PDU
+	0x1A ERROR_UNSUPPORTED_REMOTE_FEATURE
+	0x1B ERROR_SCO_OFFSET_REJECTED
+	0x1C ERROR_SCO_INTERVAL_REJECTED
+	0x1D ERROR_SCO_AIR_MODE_REJECTED
+	0x1E ERROR_INVALID_LMP_PARAMETER
+	0x1F ERROR_UNSPECIFIED_ERROR
+	0x20 ERROR_UNSUPPORTED_LMP_PARAMETER_VALUE
+	0x21 ERROR_ROLE_CHANGE_NOT_ALLOWD
+	0x22 ERROR_LMP_RESPONSE_TIMEOUT
+	0x23 ERROR_ERROR_TRANSACTION_COLLISION
+	0x24 ERROR_LMP_PDU_NOT_ALLOWED
+	0x25 ERROR_ENCRYPTION_MODE_NOT_ACCEPTABLE
+	0x26 ERROR_UNIT_KEY_USED
+	0x27 ERROR_QOS_NOT_SUPPORTED
+	0x28 ERROR_INSTANT_PASSED
+	0x29 ERROR_PAIRING_W_UNIT_KEY_NOT_SUPPORTED
+	0x2a ERROR_DIFFERENT_TRANSACTION_COLLISION
+	0x2c ERROR_QOS_UNACCEPTABLE_PARAMETER
+	0x2d ERROR_QOS_REJECTED
+	0x2e ERROR_CHANNEL_CLASSIFICATION_NOT_SUPPORTED
+	0x2f ERROR_INSUFFICIENT_SECURITY
+	0x30 ERROR_PARAMETER_OUT_OF_MANDATORY_PANGE
+	0x32 ERROR_ROLE_SWITCH_PENDING
+	0x34 ERROR_RESERVED_SLOT_VIOLATION
+	0x35 ERROR_ROLE_SWITCH_FAILED
+	0x36 ERROR_EXTENDED_INQUIRY_RESPONSE_TOO_LARGE
+	0x37 ERROR_SIMPLE_PAIRING_NOT_SUPPORTED_BY_HOST
+	0x38 ERROR_HOST_BUSY_PAIRING
+	0x3d ERROR_MIC_FAILURE
+	)
+
+
+	//modified_name
+	(
+	0X20 SPACE	
+	)
+	/* LE L2CAP CID */
+	(
+	0x0004 LE_L2CAP_CID_ATT
+	0x0005 LE_L2CAP_CID_SIGNAL
+	0x0006 LE_L2CAP_CID_SMP
+	)
+
+	//LE address type
+	(
+	0 LE_ADDR_TYPE_PUBLIC
+	1 LE_ADDR_TYPE_RANDOM
+	)
+	//LE address type bitmap
+	(
+	7 LE_RECEIVER_ADDR_BIT
+	6 LE_SENDER_ADDR_BIT
+	)
+	//LE SCAN TYPE
+	(
+	0x00 LE_SCAN_TYPE_PASSIVE //no SCAN_REQ shall be sent
+	0x01 LE_SCAN_TYPE_ACTIVE
+	)
+
+	//LE SCAN ENABLE
+	(
+	0x00 LE_SCAN_DISABLE
+	0x01 LE_SCAN_ENABLE
+	0x0101 LE_ACTIVE_SCAN_ENABLE
+	)
+
+	//LE FIND INFORMATION RESPONSE
+	//THE FORMAT OF THE INFORMATION DATA
+	(
+	0x01 UUID_SIZE_16BIT
+	0x02 UUID_SIZE_128BIT
+	)
+
+//	le_state_map 0-2 is reserved for state_inconn,state_insniff and state_sco
+(
+3 lestate_got_first_packet
+4 lestate_encryption
+5 lestate_update_param
+6 lestate_update_map
+7 lestate_update_phy
+)
+
+// 	le mode
+(
+0 lemode_idle
+1 lemode_slave
+3 lemode_master
+5 lemode_2m
+6 lemode_lr
+7 lemode_lr_s8
+
+0x20 mode_2m
+0x40 mode_lr_s2
+0xc0 mode_lr_s8
+
+)
+
+(
+0 llid0
+1 llid1
+2 nesn
+3 sn
+4 md
+5 wak
+6 txdat
+)
+
+(
+0x00 LLID_RESERVED
+0x01 LLID_CONTINUE
+0x02 LLID_START
+0x03 LLID_LE_LL
+0x01 LLID_EMPTY
+)
+
+(
+4 LE_TX_BUFF_COUNT
+3 LE_TX_BUFF_UPDATE_LOOPCNT //LE_TX_BUFF_COUNT-1
+
+12 LE_MD_MAX_COUNT
+)
+
+
+(
+0 LE_INITATOR_LTK_BIT
+1 LE_INITATOR_IRK_BIT
+2 LE_INITATOR_CSRK_BIT
+)
+
+
+
+
+
+(
+0  LE_FIND_BY_TYPE_VAL_RES_NOT_FOUND
+1  LE_FIND_BY_TYPE_VAL_RES_FOUND_STARTING_HANDLE
+2  LE_FIND_BY_TYPE_VAL_RES_FOUND_ENDING_HANDLE
+
+)
+
+(
+0 MASTER_PUBLIC_ADDR
+1 MASTER_RANDOM_ADDR
+)
+
+(
+0x06 LE_ERR_PIN_OR_KEY_MISSING
+)
+
+(
+39 LE_CCM_DIRECTIONBIT
+)
+(
+36 BR_CCM_0_LENGTH_CONTINUATION
+37 BR_CCM_DIRECTIONBIT
+)
+
+(
+96000 TIMER_SMP_PAIRING_TIMEOUT //30S
+)
+
+
+
+//mem_le_enc_state
+(
+0 FLAG_LE_ENC_NULL
+1 FLAG_LE_RCV_ENC_START
+2 FLAG_LE_ENC_PAUSE
+3 FLAG_LE_RCV_START_ENC_RSP
+4 FLAG_LE_SEND_START_ENC_RSP
+5 FLAG_LE_SEND_START_ENC_REQ
+0xff FLAG_LE_ENC_END
+)
+
+(//mem_le_configuration
+//bit0:use fixed key , ble passkey pairing
+0 BIT_BLE_PASSKEY_FIXED_KEY
+//bit1:ble pairing use fixed long term key
+1 BIT_BLE_PAIRING_FIXED_LTK
+//bit2:ble transmit packet will set more data flag
+2 BIT_BLE_TRANSMIT_PACKET_BY_MD
+//bit3:master read handle, with requires an authenticated link
+3 BIT_BLE_READ_AUTH
+//bit4:master write handle, with requires an authenticated link
+4 BIT_BLE_WRITE_AUTH
+//bit5:cannot enter long sleep
+5 BIT_BLE_SHORT_MULT
+//bit6:DEAL baseband packet
+6 BIT_BLE_DEAL_BB_PACKET
+)
+
Index: format/ble_protocol_stack/le_advertising.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/ble_protocol_stack/le_advertising.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/ble_protocol_stack/le_advertising.format	(working copy)
@@ -0,0 +1,104 @@
+
+xmemalloc(
+// parameters
+1 mem_le_scan_enable
+2 mem_le_scan_interval
+2 mem_le_scan_window
+
+
+1 mem_le_adv_data_len
+31 mem_le_adv_data
+1 mem_le_scan_data_len
+31 mem_le_scan_data
+
+//START of LE adv parameter structure
+1 mem_le_adv_enable
+0 mem_le_adv_param
+2 mem_le_adv_interval
+1 mem_le_adv_type
+1 mem_le_adv_own_addr_type
+6 mem_le_adv_direct_addr
+1 mem_le_adv_channel_map
+//END of LE adv parameter structure
+
+//START of LE scan parameter structure
+0 mem_le_scan_params
+1 mem_le_scan_type
+1 mem_le_scan_own_addr_type
+//END of LE scan parameter structure
+)
+
+amemalloc mem_le_rxbuf(
+//advertising channel PDU
+	1 mem_le_rxbuf_adv_header
+	1 mem_le_rxbuf_adv_length
+	255 mem_le_rxbuf_adv_payload
+)
+
+amemalloc mem_le_rxbuf(
+//advertising channel PDU
+//Scan Req
+	1 mem_le_rxbuf_adv_scan_req_header
+	1 mem_le_rxbuf_adv_scan_req_length
+	6 mem_le_rxbuf_adv_scan_req_scan_address
+	6 mem_le_rxbuf_adv_scan_req_adv_address
+)
+
+amemalloc mem_le_rxbuf(
+//advertising channel PDU
+//Connect IND
+	1 mem_le_rxbuf_adv_connect_ind_header
+	1 mem_le_rxbuf_adv_connect_ind_length
+	6 mem_le_rxbuf_adv_connect_ind_init_address
+	6 mem_le_rxbuf_adv_connect_ind_adv_address
+	4 mem_le_rxbuf_adv_connect_ind_access_address
+	3 mem_le_rxbuf_adv_connect_ind_crc_init
+	1 mem_le_rxbuf_adv_connect_ind_win_size
+	2 mem_le_rxbuf_adv_connect_ind_win_offset
+	2 mem_le_rxbuf_adv_connect_ind_interval
+	2 mem_le_rxbuf_adv_connect_ind_latency
+	2 mem_le_rxbuf_adv_connect_ind_timeout
+	5 mem_le_rxbuf_adv_connect_ind_channel_map
+	1 mem_le_rxbuf_adv_connect_ind_hop_and_sca
+)
+
+(
+0x01	GAP_ADTYPE_FLAGS
+0x02	GAP_ADTYPE_16BIT_MORE
+0x03	GAP_ADTYPE_16BIT_COMPLETE
+0x04	GAP_ADTYPE_32BIT_MORE
+0x05	GAP_ADTYPE_32BIT_COMPLETE
+0x06	GAP_ADTYPE_128BIT_MORE
+0x07	GAP_ADTYPE_128BIT_COMPLETE
+0x08	GAP_ADTYPE_LOCAL_NAME_SHORT
+0x09	GAP_ADTYPE_LOCAL_NAME_COMPLETE
+0x0a	GAP_ADTYPE_POWER_LEVEL
+0x16	GAP_ADTYPE_SERVICE_DATA
+0x2a	GAP_ADTYPE_MESH_MESSAGE
+0x2b 	GAP_ADTYPE_MESH_BEACON
+0xff	GAP_ADTYPE_MANUFACTURER_SPECIFIC
+)
+
+/* advertising channel PDU type */
+(
+0 ADV_IND
+1 ADV_DIRECT_IND
+2 ADV_NONCONN_IND
+3 SCAN_REQ
+3 AUX_SCAN_REQ
+4 SCAN_RSP
+5 CONNECT_REQ
+5 AUX_CONNECT_REQ
+6 ADV_SCAN_IND
+)
+
+(
+0 BIT_ADV_CHANNEL_MAP_37
+1 BIT_ADV_CHANNEL_MAP_38
+2 BIT_ADV_CHANNEL_MAP_39
+)
+
+(
+0xa0 param_le_sca
+)
+
Index: format/ble_protocol_stack/le_l2cap_att.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/ble_protocol_stack/le_l2cap_att.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/ble_protocol_stack/le_l2cap_att.format	(working copy)
@@ -0,0 +1,205 @@
+
+xmemalloc(
+	1 mem_le_l2cap_att_states
+
+
+	/* should be together */
+	1 mem_le_att_opcode
+	2 mem_le_att_handle
+	1 mem_le_search_res
+
+	2 mem_le_notify_handle
+	1 mem_le_search_uuid_length
+	16 mem_le_search_uuid
+)
+
+amemalloc mem_temp_block2(
+	2 mem_le_search_handle_start
+	2 mem_le_search_handle_end
+	0 mem_le_att_offset
+	1 mem_le_search_att_type_length
+	16 mem_le_search_att_type
+
+	1 mem_le_curr_att_len
+
+	2 mem_le_cur_attlist_start_ptr
+	2 mem_le_cur_handle_start
+	2 mem_le_cur_handle_end
+	1 mem_le_cur_uuid_length
+	16 mem_le_cur_uuid
+	2 mem_le_cur_handle
+)
+
+
+amemalloc mem_le_rxbuf(
+//data channel ATT start PDU
+	1 mem_le_rxbuf_data_att_header
+	1 mem_le_rxbuf_data_att_length
+	2 mem_le_rxbuf_data_att_l2cap_length
+	2 mem_le_rxbuf_data_att_cid
+	1 mem_le_rxbuf_data_att_opcode
+	250 mem_le_rxbuf_data_att_payload
+)
+
+
+amemalloc mem_le_rxbuf(
+//data channel ATT continue PDU
+	1 mem_le_rxbuf_data_continue_header
+	1 mem_le_rxbuf_data_continue_length
+	255 mem_le_rxbuf_data_continue_payload
+)
+
+amemalloc mem_le_rxbuf(
+//data channel ATT write request PDU
+	1 mem_le_rxbuf_data_att_write_header
+	1 mem_le_rxbuf_data_att_write_length
+	2 mem_le_rxbuf_data_att_write_l2cap_length
+	2 mem_le_rxbuf_data_att_write_cid
+	1 mem_le_rxbuf_data_att_write_opcode
+	2 mem_le_rxbuf_data_att_write_handle
+	248 mem_le_rxbuf_data_att_write_payload
+)
+
+amemalloc mem_le_rxbuf(
+//data channel ATT prepare write request PDU
+	1 mem_le_rxbuf_data_prepare_att_write_header
+	1 mem_le_rxbuf_data_prepare_att_write_length
+	2 mem_le_rxbuf_data_prepare_att_write_l2cap_length
+	2 mem_le_rxbuf_data_prepare_att_write_cid
+	1 mem_le_rxbuf_data_prepare_att_write_opcode
+	2 mem_le_rxbuf_data_prepare_att_write_handle
+	2 mem_le_rxbuf_data_prepare_att_write_offset
+	246 mem_le_rxbuf_data_prepare_att_write_payload
+)
+
+(//bit of mem_le_l2cap_att_states
+0 BLE_L2CAP_SEND_INDICATION_PACKET
+0 BLE_L2CAP_RECV_CONFIRMATION_PACKET
+1 BLE_L2CAP_DEAL_WITH_CONTINUE_PACKET
+)
+
+(//bit map of att handle
+14 BIT_OF_ATT_HANDLE_READ_AUTHENTICATED
+15 BIT_OF_ATT_HANDLE_WRITE_AUTHENTICATED
+)
+
+
+
+(
+0 BIT_CHARACTERISTIC_BROADCAST
+1 BIT_CHARACTERISTIC_READ
+2 BIT_CHARACTERISTIC_WRITE_WITHOUT_RESPONSE
+3 BIT_CHARACTERISTIC_WRITE
+4 BIT_CHARACTERISTIC_NOTIFY
+5 BIT_CHARACTERISTIC_INDICATE
+6 BIT_CHARACTERISTIC_SIGNED_WRITE
+7 BIT_CHARACTERISTIC_EXTENDED_PROPERTIES
+)
+
+/* ATT OPCODE */
+(
+0x01 ATTOP_ERROR_RESPONSE
+0x02 ATTOP_EXCHANGE_MTU_REQUEST
+0x03 ATTOP_EXCHANGE_MTU_RESPONSE
+0x04 ATTOP_FIND_INFORMATION_REQUEST
+0x05 ATTOP_FIND_INFORMATION_RESPONSE
+0x06 ATTOP_FIND_BY_TYPE_VALUE_REQUEST
+0x07 ATTOP_FIND_BY_TYPE_VALUE_RESPONSE
+0x08 ATTOP_READ_BY_TYPE_REQUEST
+0x09 ATTOP_READ_BY_TYPE_RESPONSE
+0x0A ATTOP_READ_REQUEST
+0x0B ATTOP_READ_RESPONSE
+0x0C ATTOP_READ_BLOB_REQUEST
+0x0D ATTOP_READ_BLOB_RESPONSE
+0x0E ATTOP_READ_MULTIPLE_REQUEST
+0x0F ATTOP_READ_MULTIPLE_RESPONSE
+0x10 ATTOP_READ_BY_GROUP_TYPE_REQUEST
+0x11 ATTOP_READ_BY_GROUP_TYPE_RESPONSE
+0x12 ATTOP_WRITE_REQUEST
+0x13 ATTOP_WRITE_RESPONSE
+0x16 ATTOP_PREPARE_WRITE_REQUEST
+0x17 ATTOP_PREPARE_WRITE_RESPONSE
+0x18 ATTOP_EXECUTE_WRITE_REQUEST
+0x19 ATTOP_EXECUTE_WRITE_RESPONSE
+0x1B ATTOP_HANDLE_VALUE_NOTIFICATION
+0x1D ATTOP_HANDLE_VALUE_INDICATION
+0x1E ATTOP_HANDLE_VALUE_CONFIRMATION
+0x52 ATTOP_WRITE_COMMAND
+0xD2 ATTOP_SIGNED_WRITE_COMMAND
+0x1f ATTOP_CONTINUE
+0x9e EMPTY_LE_DATA_PRE
+0x9f EMPTY_LE_DATA
+)
+
+/* ATT error code */
+(
+0x01 ATT_ERR_INVALID_HANDLE
+0x02 ATT_ERR_READ_NOT_PERMITTED
+0x03 ATT_ERR_WRITE_NOT_PERMITTED
+0x04 ATT_ERR_INVALID_PDU
+0x05 ATT_ERR_INSUFFICIENT_AUTHENTICATION
+0x06 ATT_ERR_REQUEST_NOT_SUPPORTED
+0x07 ATT_ERR_INVALID_OFFSET
+0x08 ATT_ERR_INSUFFICIENT_AUTHORIZATION
+0x09 ATT_ERR_PREPARE_QUEUE_FULL
+0x0A ATT_ERR_ATTRIBUTE_NOT_FOUND
+0x0B ATT_ERR_ATTRIBUTE_NOT_LONG
+0x0C ATT_ERR_INSUFFICIENT_ENCRYPTION_KEY_SIZE
+0x0D ATT_ERR_INVALID_ATTRIBUTE_VALUE_LENGTH
+0x0E ATT_ERR_UNLIKELY_ERROR
+0x0F ATT_ERR_INSUFFICIENT_ENCRYPTION
+0x10 ATT_ERR_UNSUPPORTED_GROUP_TYPE
+0x11 ATT_ERR_INSUFFICIENT_RESOURCES
+)
+
+/* GATT Specifications*/
+(
+0X2900 CHARACTERTIC_EXTENDED_PROPERTIES
+0X2901 CHARACTERTIC_USER_DESCRIPTION
+0X2902 CLIENT_CHARACTERTIC_CONFIGURATION
+0X2903 SERVER_CHARACTERTIC_CONFIGURATION
+0X2904 CHARACTERTIC_PRESENTATION_FORMAT
+0X2905 CHARACTERTIC_AGGREGATE
+0X2906 VALID_RANGE
+0X2907 EXTERNAL_REPORT_REFERENCE
+0X2908 REPORT_REFERENCE
+0X290B ENVIR_SENSING_CONFIGURATION
+0X290C ENVIR_SENSING_MEASUREMENT
+0X290D ENVIR_SENSING_TRIGGER_SETTING
+)
+
+
+/*	SERVICE UUID	*/
+(
+0x1800 UUID_SERVICE_GENERIC_ACC
+0x1801 UUID_SERVICE_GENERIC_ATT
+0x180a UUID_SERVICE_DEVICE_INFO
+0x180f UUID_SERVICE_BATTERY
+0x1812 UUID_SERVICE_HIDS
+0x2800 UUID_GATT_PRIMARY_SERVICE
+0x2801 UUID_GATT_SECONDARY_SERVICE
+0X2802 UUID_GATT_INCLUDE
+0X2803 UUID_GATT_CHARACTERISTIC
+0X2A00 UUID_CHRCTR_DEVICE_NAME
+0X2A19 UUID_CHRCTR_BATTERY_LEVEL
+0X2A22 UUID_CHRCTR_KEYBOARD_INPUT
+0X2A23 UUID_CHRCTR_SYSTEM_ID 
+0X2A25 UUID_CHRCTR_SERIAL_NUMBER
+0X2A26 UUID_CHRCTR_FIRMWARE
+0X2A32 UUID_CHRCTR_KEYBOARD_OUTPUT
+0X2A33 UUID_CHRCTR_MOUSE_INPUT
+0X2A4A UUID_CHRCTR_HID_INFO
+0X2A4B UUID_CHRCTR_REPORT_MAP
+0X2A4C UUID_CHRCTR_HID_CTRL_POINT
+0X2A4D UUID_CHRCTR_REPORT
+0X2A4E UUID_CHRCTR_PROTOCOL_MODE
+0X2A50 UUID_CHRCTR_PNP_ID
+)
+
+
+(
+23 ATT_DEFAULT_MTU 
+)
+
+
+
Index: format/ble_protocol_stack/le_l2cap_att_wechat.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/ble_protocol_stack/le_l2cap_att_wechat.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/ble_protocol_stack/le_l2cap_att_wechat.format	(working copy)
@@ -0,0 +1,85 @@
+ifdef COMPILE_WECHAT
+
+amemalloc mem_temp_block2(
+	0 mem_wechat_initreq_base_request
+	2 mem_wechat_authreq_base_request
+	4 mem_wechat_authreq_protocol_version
+	2 mem_wechat_authreq_auth_protocol
+	2 mem_wechat_authreq_eam_mac_no_encrypt
+	2 mem_wechat_authreq_mac_address
+	6 mem_wechat_authreq_device_address
+
+	1 mem_wechat_indication_handle
+	1 mem_wechat_write_handle
+	2 mem_wechat_tx_buffer_ptr
+	2 mem_wechat_rx_buffer_ptr
+	2 mem_wechat_rx_push_data_cb
+	2 mem_wechat_tx_nSeq
+	2 mem_wechat_tx_len
+	2 mem_wechat_tx_address
+	2 mem_wechat_rx_len
+	2 mem_wechat_rx_address
+	1 mem_wechat_receive_push_data
+
+)
+
+xmemalloc(
+
+/*
+wechat Air sync protocol parse
+uint8_t indication handle
+uint8_t write handle
+
+*/
+2 mem_le_wechat_air_sync_ptr
+
+)
+
+(
+17 WECHAT_AIR_SYNC_STRUCT_SIZE
+)
+
+(
+0x0000 ECI_NONE
+0x1127 ECI_REQ_AUTH
+0x1227 ECI_REQ_SEND_DATA
+0x1327 ECI_REQ_INIT
+0x214E ECI_RESPONSE_AUTH
+0x224E ECI_RESPONSE_SEND_DATA
+0x234E ECI_RESPONSE_INIT
+0x3175 ECI_PUSH_RECEIVE_DATA
+0x3275 ECI_PUSH_SWITCH_VIEW
+0x3375 ECI_PUSH_SWITCH_BACKGROUD
+0x2F75 ECI_ERR_DECODE
+)
+
+(
+2 ECI_REQ_INIT_MESSAGE_LENGTH
+18 ECI_REQ_AUTH_MESSAGE_LENGTH
+)
+
+(
+0xFE WECHAT_HEAD_MAGIC_NUMBER
+0x01 WECAHT_HEAD_VERSION
+0x01FE WECHAT_RX_HEAD
+)
+
+(
+//push data
+0x0a 	TAG_RecvDataPush_BasePush
+0x12	TAG_RecvDataPush_Data
+0x18	TAG_RecvDataPush_Type
+)
+
+
+(
+0 WECHAT_PROTOCOL_MESSAGE_B_MAGIC_NUMBER
+1 WECHAT_PROTOCOL_MESSAGE_B_VER
+2 WECHAT_PROTOCOL_MESSAGE_N_LENGTH
+4 WECHAT_PROTOCOL_MESSAGE_N_CMD_ID
+6 WECHAT_PROTOCOL_MESSAGE_N_SEQ
+8 WECHAT_PROTOCOL_MESSAGE_PAYLOAD
+)
+
+endif
+
Index: format/ble_protocol_stack/le_l2cap_signalling.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/ble_protocol_stack/le_l2cap_signalling.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/ble_protocol_stack/le_l2cap_signalling.format	(working copy)
@@ -0,0 +1,14 @@
+
+/* L2CAP Signaling OPCODE */
+(
+0x12 L2CAP_CONNECTION_PARAMETER_UPDATE_REQUEST
+0x13 L2CAP_CONNECTION_PARAMETER_UPDATE_RESPONSE
+)
+
+(
+0x0000 BLE_SIGNALING_CONNECT_PARAMETER_UPDATE_ACCEPTED
+0x0001 BLE_SIGNALING_CONNECT_PARAMETER_UPDATE_REJECTED
+)
+
+
+
Index: format/ble_protocol_stack/le_l2cap_smp.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/ble_protocol_stack/le_l2cap_smp.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/ble_protocol_stack/le_l2cap_smp.format	(working copy)
@@ -0,0 +1,113 @@
+
+
+(
+0x00 LE_PAIRING_MODE_NONE
+0x01 LE_PAIRING_MODE_LAGACY_JUSTWORK
+0x02 LE_PAIRING_MODE_LAGACY_PASSKEY
+0x04 LE_PAIRING_MODE_LAGACY_PASSKEY_RES_INPUT
+0x81 LE_PAIRING_MODE_SECURE_CONNECT_JUSTWORK
+0x82 LE_PAIRING_MODE_SECURE_CONNECT_NUMERIC
+0x83 LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY
+0x84 LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY_RES_INPUT
+
+7 LE_PAIRING_MODE_SECURE_CONNECT_BIT
+)
+
+
+(
+0 FLAG_IOCAP_DISPLAYONLY
+1 FLAG_IOCAP_DISPLAYYESNO
+2 FLAG_IOCAP_KEYBOARDONLY
+3 FLAG_IOCAP_NOINPUTNOOUTPUT
+4 FLAG_IOCAP_KEYBOARDDISPLAY
+
+0x00 FLAG_OOB_DATA_FLAG_NO
+)
+
+(
+0x00 FLAG_LE_NO_BONDING_NO_MITM
+0x01 FLAG_LE_BONDING_NO_MITM
+0x04 FLAG_LE_NO_BONDING_MITM
+0x05 FLAG_LE_BONDING_MITM
+0x09 FLAG_LE_BONDING_NO_MITM_SECURE
+0x0D FLAG_LE_BONDING_MITM_SECURE
+
+2 LE_AUTH_MITM_BIT
+3 LE_AUTH_SECURE_CONNECTION_PAIRING_BIT
+)
+
+//mem_le_pairing_state
+(
+0 FLAG_LE_PAIRING_NULL
+1 FLAG_LE_PAIRING_START
+2 FLAG_LE_PAIRING_SEND_RECURITY_REQ
+3 FLAG_LE_PAIRING_RCV_PAIRING_REQ
+4 FLAG_LE_PAIRING_WAIT_STK_GENERATION
+5 FLAG_LE_PAIRING_RECEIVE_PAIRING_CONFIRM
+6 FLAG_LE_PAIRING_SEND_PAIRING_CONFIRM
+7 FLAG_LE_PAIRING_RECEIVE_PAIRING_RANDOM
+8 FLAG_LE_PAIRING_SEND_PAIRING_RANDOM
+9 FLAG_LE_PAIRING_AFTER_AUTH
+10 FLAG_LE_PAIRING_SEND_START_ENC_RSP
+11 FLAG_LE_PARING_SEND_ENC_INFORMATION
+12 FLAG_LE_PARING_SEND_MASTER_IDENTIFICATION 
+13 FLAG_LE_PARING_SEND_INDENTITY_INFORMATION
+0xff FLAG_LE_PAIRING_END
+)
+
+/* Security Manager Protocol Code */
+(
+0x01 SMP_PAIRING_REQUEST
+0x02 SMP_PAIRING_RESPONSE
+0x03 SMP_PAIRING_CONFIRM
+0x04 SMP_PAIRING_RANDOM
+0x05 SMP_PAIRING_FAILED
+0x06 SMP_ENCRYPTION_INFORMATION
+0x07 SMP_MASTER_IDENTIFICATION
+0x08 SMP_IDENTITY_INFORMATION
+0x09 SMP_IDENTITY_ADDRESS_INFORMATION
+0x0A SMP_SIGNING_INFORMATION
+0x0B SMP_SECURITY_REQUEST
+0x0c SMP_PAIRING_PUBLIC_KEY
+0x0d SMP_PAIRING_DHKEY_CHECK
+)
+
+(// pairing failed reason
+0x00 PAIRING_FAILED_RESERVED
+0X01 PAIRING_FAILED_PASSKEY_ENTRY_FAILED
+0X02 PAIRING_FAILED_OOB_NOT_AVAILABLE
+0X03 PAIRING_FAILED_AUTHENTICATION_REQUIRE
+0X04 PAIRING_FAILED_CONFIRM_VALUE_FAILED
+0X05 PAIRING_FAILED_PAIRING_NOT_SUPPORTED
+0X06 PAIRING_FAILED_ENCRYPTION_KEY_SIZE
+0X07 PAIRING_FAILED_COMMAND_NOT_SUPPORTED
+0X08 PAIRING_FAILED_UNSPECIFIED_REASON
+0X09 PAIRING_FAILED_REPEATED_ATTEMPTS
+0X0A PAIRING_FAILED_INVALID_PARAMETERS
+0X0B PAIRING_FAILED_DHKEY_CHECK_FAILED
+0X0C PAIRING_FAILED_NUMERIC_COMPARISON_FAILED
+0X0D PAIRING_FAILED_BR_EDR_PAIRING_IN_PROGRESS
+0X0E PAIRING_FAILED_KEY_DERIVATION_GENERATION_NOT_ALLOWED
+)
+
+/*LE secure connect state */
+(
+0x00 LE_SC_STAT_NULL
+0x01 LE_SC_STAT_RECEIVE_PUBLIC_KEY
+0x02 LE_SC_STAT_WAIT_SEND_PUBLIC_KEY
+0x03 LE_SC_STAT_SEND_PUBLIC_KEY
+0x04 LE_SC_STAT_RECEIVE_RANDOM
+0x05 LE_SC_STAT_SEND_RANDOM
+0x06 LE_SC_STAT_RECEIVE_DHKEY
+0x07 LE_SC_STAT_WAIT_CONFIRM_GKEY
+0x08 LE_SC_STAT_PASSKEY_WAIT_CONFIRM
+)
+
+
+(
+0 FLAG_LE_SC_CONFRIM_NULL
+1 FLAG_LE_SC_CONFRIM_GKEY_OK
+)
+
+
+
Index: format/ble_protocol_stack/le_ll.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/ble_protocol_stack/le_ll.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/ble_protocol_stack/le_ll.format	(working copy)
@@ -0,0 +1,120 @@
+xmemalloc(
+8 mem_le_local_feature
+1 mem_le_tx_phys
+1 mem_le_rx_phys
+
+2 mem_remote_rx_max_octets
+2 mem_remote_rx_max_time
+2 mem_remote_tx_max_octets
+2 mem_remote_tx_max_time
+2 mem_local_rx_max_octets
+2 mem_local_rx_max_time
+2 mem_local_tx_max_octets
+2 mem_local_tx_max_time
+
+)
+
+/* LE control packet type */
+(
+0x00 LL_CONNECTION_UPDATE_IND
+0x01 LL_CHANNEL_MAP_IND
+0x02 LL_TERMINATE_IND
+0x03 LL_ENC_REQ
+0x04 LL_ENC_RSP
+0x05 LL_START_ENC_REQ
+0x06 LL_START_ENC_RSP
+0x07 LL_UNKNOWN_RSP
+0x08 LL_FEATURE_REQ
+0x09 LL_FEATURE_RSP
+0x0A LL_PAUSE_ENC_REQ
+0x0B LL_PAUSE_ENC_RSP
+0x0C LL_VERSION_IND
+0x0D LL_REJECT_IND
+0x0E LL_SLAVE_FEATURE_REQ
+0x0F LL_CONNECTION_PARAM_REQ
+0x10 LL_CONNECTION_PARAM_RSP
+0x11 LL_REJECT_IND_EXT
+0x12 LL_PING_REQ
+0x13 LL_PING_RSP
+0x14 LL_LENGTH_REQ
+0x15 LL_LENGTH_RSP
+0x16 LL_PHY_REQ
+0x17 LL_PHY_RSP
+0x18 LL_PHY_UPDATE_IND
+0x19 LL_MIN_USED_CHANNELS_IND
+0x1A LL_CTE_REQ
+0x1B LL_CTE_RSP
+0x1C LL_PERIODIC_SYNC_IND
+0x1D LL_CLOCK_ACCURACY_REQ
+0x1E LL_CLOCK_ACCURACY_RSP
+0x1F LL_CIS_REQ
+0x20 LL_CIS_RSP
+0x21 LL_CIS_IND
+0x22 LL_CIS_TERMINATE_IND
+0x23 LL_POWER_CONTROL_REQ
+0x24 LL_POWER_CONTROL_RSP
+0x25 LL_POWER_CHANGE_IND
+)
+
+
+
+(//bit map of mem_le_ll_feature
+//LL_FEATURE_REQ
+0 BIT_LL_FEATURE_LE_ENCRYPTION
+1 BIT_LL_FEATURE_CONNECTION_PARAMETERS_REQUEST_PROCEDURE
+2 BIT_LL_FEATURE_EXTENDED_REJECT_INDICATION
+3 BIT_LL_FEATURE_SLAVE_INITIATED_FEATURES_EXCHANGE
+4 BIT_LL_FEATURE_LE_PING
+5 BIT_LL_FEATURE_LE_DATA_PACKET_LENGTH_EXTENSION
+6 BIT_LL_FEATURE_LL_PRIVACY
+7 BIT_LL_FEATURE_EXTENDED_SCANNER_FILTER_POLICIES
+8 BIT_LL_FEATURE_LE_2M_PHY
+9 BIT_LL_FEATURE_STABLE_MODULATION_INDEX_TRANSMITTER
+10 BIT_LL_FEATURE_STABLE_MODULATION_INDEX_RECEIVER
+11 BIT_LL_FEATURE_LE_CODED_PHY
+12 BIT_LL_FEATURE_LE_EXTENDED_ADVERTISING
+13 BIT_LL_FEATURE_LE_PERIODIC_ADVERTISING
+14 BIT_LL_FEATURE_CHANNEL_SELECTION_ALGORITHM
+15 BIT_LL_FEATURE_LE_POWER_CLASS_1
+16 BIT_LL_FEATURE_MINIMUM_NUMBER_OF_USED_CHANNELS_PROCEDURE
+)
+(//function map of mem_le_ll_feature
+//LL_FEATURE_REQ
+0x1 FUN_LL_FEATURE_LE_ENCRYPTION
+0x2 FUN_LL_FEATURE_CONNECTION_PARAMETERS_REQUEST_PROCEDURE
+0x4 FUN_LL_FEATURE_EXTENDED_REJECT_INDICATION
+0x8 FUN_LL_FEATURE_SLAVE_INITIATED_FEATURES_EXCHANGE
+0x10 FUN_LL_FEATURE_LE_PING
+0x20 FUN_LL_FEATURE_LE_DATA_PACKET_LENGTH_EXTENSION
+0x40 FUN_LL_FEATURE_LL_PRIVACY
+0x80 FUN_LL_FEATURE_EXTENDED_SCANNER_FILTER_POLICIES
+0x100 FUN_LL_FEATURE_LE_2M_PHY
+0x200 FUN_LL_FEATURE_STABLE_MODULATION_INDEX_TRANSMITTER
+0x400 FUN_LL_FEATURE_STABLE_MODULATION_INDEX_RECEIVER
+0x800 FUN_LL_FEATURE_LE_CODED_PHY
+0x1000 FUN_LL_FEATURE_LE_EXTENDED_ADVERTISING
+0x2000 FUN_LL_FEATURE_LE_PERIODIC_ADVERTISING
+0x4000 FUN_LL_FEATURE_CHANNEL_SELECTION_ALGORITHM
+0x8000 FUN_LL_FEATURE_LE_POWER_CLASS_1
+0x10000 FUN_LL_FEATURE_MINIMUM_NUMBER_OF_USED_CHANNELS_PROCEDURE
+)
+
+(//bit of mem_le_tx_phys and mem_le_rx_phys
+0x00 BIT_LE_1M_PHY
+0x01 BIT_LE_2M_PHY
+0x02 BIT_LE_CODED_PHY
+
+0x02 BIT_LE_CODED_PHY_S2
+0x07 BIT_LE_CODED_PHY_S8
+)
+
+(//map of mem_le_tx_phys and mem_le_rx_phys
+0x01 FUN_TX_LL_1M_PHY
+0x02 FUN_TX_LL_2M_PHY
+0x04 FUN_TX_LL_CODED_PHY
+
+0x01 FUN_RX_LL_1M_PHY
+0x02 FUN_RX_LL_2M_PHY
+0x04 FUN_RX_LL_CODED_PHY
+)
+
Index: format/bt.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/bt.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/bt.format	(working copy)
@@ -0,0 +1,654 @@
+
+	width = 32
+	const length = 12000
+
+	/* ========= memory ============== */
+memalloc(
+ 1 mem_le_adv_transmit
+1 mem_le_adv_waitcnt
+1 mem_le_adv_rcv
+1 mem_le_req_rcv
+1 mem_le_scanrsp_rcv
+1 mem_le_conn_rcv
+
+1 mem_current_context
+1 mem_le_ch_mapped
+1 mem_last_freq
+1 mem_rssi
+2 mem_context_ptr
+2 mem_rx_window
+
+
+/* lpo related */
+1 mem_lpm_adjust
+6 mem_sync_clke
+1 mem_lpm_current_mult
+12 mem_gpio_wakeup_cfg
+
+
+4 mem_clkn_bt
+4 mem_clke_bt
+4 mem_dpll_clkn
+
+2 mem_slot_offset
+
+
+1 mem_loadcode_times
+1 mem_select_list_item
+0 mem_temp_reconn_record
+1 mem_record_bt_mode
+2 mem_list_item_ptr
+
+1 mem_rssi_hex
+
+
+2 mem_param_tx_setup
+2 mem_param_rf_setup
+2 mem_param_conn_access
+2 mem_param_clke_cal
+2 mem_param_pll_setup
+2 mem_param_rx_setup
+2 mem_param_dpll_start_delay
+2 mem_param_rt_rthalfslot
+2 mem_param_clke_cal_le_1m
+2 mem_param_clke_cal_le_2m
+2 mem_param_clke_cal_le_coded
+
+)
+
+memalloc test (
+/* test related */
+2 mem_le_test_sync
+2 mem_le_test_pcnt
+2 mem_tst_pktcnt_crc
+2 mem_tst_pktcnt_dmh
+3 mem_tmp_buffer_head
+80 mem_tmp_buffer
+
+)
+
+
+xmemalloc(
+/* patch enable 0x4000-0x403f  */
+
+1 mem_patch00
+1 mem_patch01
+1 mem_patch02
+1 mem_patch03
+1 mem_patch04
+1 mem_patch05
+1 mem_patch06
+1 mem_patch07
+1 mem_patch08
+1 mem_patch09
+1 mem_patch0a
+1 mem_patch0b
+1 mem_patch0c
+1 mem_patch0d
+1 mem_patch0e
+1 mem_patch0f
+1 mem_patch10
+1 mem_patch11
+1 mem_patch12
+1 mem_patch13
+1 mem_patch14
+1 mem_patch15
+1 mem_patch16
+1 mem_patch17
+1 mem_patch18
+1 mem_patch19
+1 mem_patch1a
+1 mem_patch1b
+1 mem_patch1c
+1 mem_patch1d
+1 mem_patch1e
+1 mem_patch1f
+1 mem_patch20
+1 mem_patch21
+1 mem_patch22
+1 mem_patch23
+1 mem_patch24
+1 mem_patch25
+1 mem_patch26
+1 mem_patch27
+1 mem_patch28
+1 mem_patch29
+1 mem_patch2a
+1 mem_patch2b
+1 mem_patch2c
+1 mem_patch2d
+1 mem_patch2e
+1 mem_patch2f
+1 mem_patch30
+1 mem_patch31
+1 mem_patch32
+1 mem_patch33
+1 mem_patch34
+1 mem_patch35
+1 mem_patch36
+1 mem_patch37
+1 mem_patch38
+1 mem_patch39
+1 mem_patch3a
+1 mem_patch3b
+1 mem_patch3c
+1 mem_patch3d
+1 mem_patch3e
+1 mem_patch3f
+
+	/* 3 device contexts  */
+83 mem_context
+1 mem_current_amaddr
+1 mem_lpm_mode
+4 mem_last_clkn
+
+	/* parameters */
+1 mem_fcomp_div
+2 mem_rx_window_sniff
+2 mem_rf_init_ptr
+
+
+1 mem_rf_rccal
+1 mem_handle_num
+
+
+	/* lpm related */
+2 mem_chip_functions
+2 mem_lpm_wake_lock
+2 mem_lpm_interval
+1 mem_lpm_overhead
+1 mem_lpm_hibernate_switch
+1 mem_sniff_unint_lost
+4 mem_sleep_counter   
+4 mem_sleep_counter_all
+6 mem_sleep_clkn
+3 mem_sniff_rcv
+3 mem_sniff_lost
+3 mem_clks_per_lpo
+
+1 mem_lpm_mult
+1 mem_lpm_mult_timeout
+1 mem_lpm_mult_cnt
+
+1 mem_lpm_xtalcnt
+1 mem_lpm_buckcnt
+1 mem_lpm_ldocnt
+1 mem_lpm_isogate
+1 mem_lpm_isogate_stage2
+1 mem_lpm_isogate_final
+1 mem_lpm_ldo_sel
+1 mem_lpm_sysctl
+1 mem_lpm_hv_sel
+
+24 mem_saved_gpio	 
+3 mem_saved_gsel
+8 mem_saved_mark
+1 mem_saved_spidctrl
+2 mem_patch_ptr
+2 mem_patch_len
+
+32 mem_timers
+
+
+/* HCI */
+1 mem_hci_cmd
+1 mem_hci_conn_handle
+3 mem_hci_plap
+1 mem_hci_puap
+2 mem_hci_pnap
+
+
+1 mem_xtal_c_sel
+24 mem_ghpc_table
+12 mem_aac_res_table
+1 mem_tx_power
+1 mem_modem_rssi
+1 mem_gain_fix
+3 mem_gain_table
+1 mem_gain_second_agc_en
+1 mem_system_clk
+
+ifdef DEBUG_RF_INIT
+20 mem_rf_init_data
+endif
+1 mem_otp_charge_pump_x
+1 mem_otp_dpll_ibais_x
+
+1 mem_xtal_freq
+)
+
+(//mem_system_clk
+12 SYSTEM_CLK_12M
+24 SYSTEM_CLK_24M
+)
+
+(//bluetooth tx power
+0x00 TX_POWER_0DB
+0x03 TX_POWER_3DB
+0x05 TX_POWER_5DB
+0x06 TX_POWER_6DB
+0x07 TX_POWER_7DB
+0x0a TX_POWER_10DB
+
+0x83 TX_POWER_F3DB
+0x85 TX_POWER_F5DB
+0x8a TX_POWER_F10DB
+0x94 TX_POWER_F20DB
+0x9e TX_POWER_F30DB
+0xaa TX_POWER_FACTORY
+)
+
+
+	/* context */
+(
+0x01 coffset_mode
+0x02 coffset_tsniff
+0x04 coffset_sniff_anchor
+0x08 coffset_clk_offset
+0x0e coffset_rx_window
+0x10 coffset_plap
+0x16 coffset_conn_handle
+0x17 coffset_arq
+	/* 3.0 only */
+	
+	/* le only */
+0x18 coffset_le_ch
+0x19 coffset_le_hop
+0x1a coffset_le_event_cnt
+0x1c coffset_le_supervision_timer
+0x20 coffset_le_instant
+0x22 coffset_le_channels
+0x23 coffset_le_op
+0x24 coffset_le_access
+0x28 coffset_le_crcinit
+0x2b coffset_le_window_size
+0x2c coffset_le_slave_latency
+0x2e coffset_le_slave_superto
+0x30 coffset_le_channel_map
+0x35 coffset_le_rx_phy
+0x36 coffset_le_tx_phy
+0x37 coffset_le_new_map
+0x37 coffset_le_new_m2s_phy
+0x38 coffset_le_new_s2m_phy
+0x37 coffest_le_new_transmitwindowsize
+0x38 coffest_le_new_transmitwindowoffset
+0x3a coffest_le_new_conninterval
+0x3c coffest_le_new_connslavelatency
+0x3e coffest_le_new_connsupervisiontimeout
+0x40 coffset_le_sk
+0x50 coffset_le_peer_sca
+0x53 coffset_le_transmit_window
+	
+83 context_size
+1 context_num
+)
+
+(
+0 lpm_flag_wake
+1 lpm_flag_loadcode
+)
+
+/* ========= parameters ============== */
+(
+0x0a00 param_snooze_setup_orig
+0x5353 param_snooze_ahead_orig
+
+/* 24Mhz clock setting */
+ifdef CLK24M
+0x1c86 param_tx_setup
+0x0c00 param_rf_setup
+0x0c00 param_conn_access 
+0x1a00 param_rx_setup
+0x0776 param_clke_cal
+0x0a00 param_pll_setup
+4000 param_dpll_start_delay
+7500 param_halfclk
+60084 param_halfclk_neg
+-60084 param_halfclk_neg1
+else
+/* 12Mhz clock setting */
+0x0e43 param_tx_setup
+0x0600 param_rf_setup
+0x0600 param_conn_access 
+0x03bb param_clke_cal
+0x0500 param_pll_setup		// 120 is minimum
+0x0d00 param_rx_setup	// 114us before sync
+2000 param_dpll_start_delay
+3750 param_rt_rthalfslot
+
+480 param_clke_cal_le_1m	//preamble(1B) & access address(4B) time (1+4)*8*1 * 12
+288 	param_clke_cal_le_2m	//preamble(2B) & access address(4B) time (1+4)*8*1 * 12
+282 param_clke_cal_le_coded	//preamble(80us) & access address(256us)-312.5us(0.5slot)
+endif
+
+110 param_lpm_fix
+10 param_lpo_extra
+200 param_lpm_adjmax
+
+-1 param_hibernate_clks
+
+ifdef SIM
+1 param_chgpump_delay_100us
+6 param_chgpump_delay_500us
+12 param_chgpump_delay_1ms
+else
+1000 param_chgpump_delay_100us
+6000 param_chgpump_delay_500us
+12000 param_chgpump_delay_1ms
+endif
+
+
+0x000a04 param_lmp_version
+0x12e9 param_lmp_subversion
+0x0012 param_tisw
+0x0012 param_tpsw
+0x1000 param_tisi
+0x0800 param_tpsi
+39 param_fcomp_div
+2 param_fcomp_mul
+
+)
+
+
+/* ========== flag[6] =============== */
+(
+0        always        /* always 1 */
+1        true          /* set/rstn by verify,compare,icompare (true) */
+2        positive      /* set/rstn by all alu operations (opcode = 0x03,0x13,0x0f,0x1f), if alu output >= 0 */
+3        timeout       /* read only, the timeout from timers */
+4        init_adpcm
+5        zero          /* set/rstn by all alu operations (opcode = 0x03,0x13,0x0f,0x1f), if alu output == 0 */
+6        crc_failed    /* level, cleared by hop_start */
+7        enable_white  /* outside mux decide whether to load bt_clk or response_X */
+8        enable_parity /* level */
+9        enable_crc    /* level */
+10       enable_hec    /* level */
+11       decode_fec1   /* level */
+12       decode_fec2   /* level */
+13       decode_fec0   /* level */
+14       encrypt       /* level */
+15       crc16       /* for caculate ccitt crc16 */
+16       swfine	/* =0 stop_watch count based on oneslot =1 on 1 clock */
+20       rqst_freq    /* pulse, to start calculating frequency */
+21       recalc        /* pulse, to recalculate the fhs_parity */
+22       init_encrypt  /* pulse, issued to initialize encrption */
+23       mhalfbnd    /* half slot boundary of clke_rt, or when clke_bt[0] toggles */
+24       sync          /* sync found as a result of correlation,set/rstn by correlate opcode */
+25       user10    /* user10 */
+26       kc_p_activate  /* pulse to recalc the kc_p */
+27       encode_fec1   /* level */
+28       encode_fec2   /* level */
+29       encode_fec0   /* level */
+30       packet_end    /* pulse */
+32       is_tx         /* level */
+33       is_rx         /* level */
+34       halfslot     /* pulse, read only, when clkn_bt[0] toggles */
+35       oneslot      /* pulse, read only, when clkn_bt[1] toggles */
+36       mslotbnd     /* pulse, read only, when clke_bt[1] toggles */
+37       expire       /* level, read only, when selected clock source exceed timeup value */
+38       meet         /* level, read only, when selected clock source meet timeup value */
+39       tx_clear     /* level, read only, indicate tx pipe is cleared */
+40       user         /* user0 */
+41       master        /* user1 */
+42       rxon         /* user2 */
+43       wake           /* user3 */
+44       user2        /* user4 */
+45       match         /* user5 */
+46       attempt        /* user6 */
+47       user3          /* user7 */
+48       clknt         /* user8 */
+49	   user7 	/* user9 */
+50       synchronize   /* synchronize lpo and regular version of the clock */
+51       lpo_edge  /* read only, 3 clocks after risling edge of lpo clock */
+52       blank         /* C0 only, means pdata == 0 */
+53       modone          /* set divide operation is done */
+55       aes_ready	/* set when aes is ok */
+56       encode_fec3   /* level */
+57       dewhiten_code_calc   /* dewhiten code calculate */
+58       lr_s2en       /* long range s2 enable */
+60	   ble_coded_info	//1:s2 0:s8
+63       never         /* read only, always 0 */
+)
+
+default flag = always
+
+/* ========== reg[6] =============== */
+(
+0        mark   /* for keeping strobes, more permanent */
+1        type   /* save and verify during rx */     /* rw */
+2        temp   /* general purpose register, 64 bits */
+3        contu  /* contr uart */
+3	 contru	/*contr uart*/
+3	 contwu	/*contw uart*/
+4        am_addr      /* verify during rx, read and send during tx */ /* ro */
+5        contw        /* last mem_addr during write */
+6        contr        /* last mem_addr during read */
+7        queue    /* the index of qset*,qisolate* commands, ie, if queue = 3, qset/qisolate operate on bit3 */
+8        debug    /* can be wired out for observation */
+9        access   /* the 72 bit access word */
+10       contus   /* contw uart */
+11       timeup        /* when does certain counter expire */
+12       pwindow       /* bit 71-61 of pdata; because on rx, bits shifts in from 71 down */
+13       fhs_parity    /* re-gernated based on bt_adr( {nap,uap,lap} ) when recalc flag is pulsed */
+14       white_init    /* init value of the whitening */
+15       crc24_init        /* init crc24 lfsr, 24 bits */
+16       contue    /* set interrupts, 40 bits */
+17       rega          /* general purpose register, 32 bits */
+18       regb          /* general purpose register, 32 bits */
+19       regc          /* general purpose register, 17 bits */
+20       regab         /* concat of {rega,regb}, thus 64 bits */
+21       radio_ctrl   /* radio i/f direct i/o ctrl, check following "radio_ctrl" section */
+
+23       freq_index   /* 7 bit read only */
+24       regd    /* 32 bit regext[1,0] */
+25       clkn              /* {clkn_bt, clkn_rt} */
+26       clke              /* {clke_bt, clke_rt} */
+27       stop_watch		
+28       fhs_misc   /* SR, SP, pscan mode */
+29       fhs_class  /* class field in fhs */
+30       fhs0   /* read only, bit 0-71 of fhs word */
+31       fhs1   /* read only, bit 72-142 of fhs word */
+32       bt_adr /* r/w, the bt_addr to access gen and freq hopping, contain only lap and uap */
+33       bt_clk /* r/w, the bt_clk for freq hopping */
+34       clkn_bt  /* read only, native bluetooth clock, free running 3.2KHz  or controlled by RTHALFSLOT register */
+35       clkn_rt  /* read only, native realtime clock, free running 12MHz, count from 0-3749, or controlled by RTHALFSLOT register */
+36       freq_mode
+37       xin   /* x parameter, read only */
+38       N_tx_slot /* the N factor in equations for Xi,Xp,Xprm,Xprs */
+39 	   auxcnt
+40       clke_bt  /* r/w,  external bluetooth clock , free running 3.2KHz or controlled by RTHALFSLOT register */
+41       clke_rt  /* r/w,  external realtime clock, , free running 12MHz, count from 0-3749, or controlled by RTHALFSLOT register */
+42       branch_addr	/* last branch address */
+43       rege         /* 64bit regext[3,2] */
+44       lap
+45       uap
+46       nap         
+47       regext		/* r/w extended 12x32bit registers,  indexed by regext_index */
+48       alarm             /* r/w, lpo wake up time, this is also how lpo and current clock keep sync */
+49       lpo_time          /* read only, this is the value to be copied back to clkn/clke after wakeup */
+50       kc_ls             /* secret key,                71: 0 */
+51       kc_ms             /* secret key,               127:72 */
+52       g1l               /* encryption length                */
+53		mask3ff		/* for mask 0x3ff operation */
+54       aes_ctrl		
+55       regf			/* 64bit regext[5,4] */
+56       regext_index   /* index of regext */
+57	     loopcnt
+58      stack			/* current return address */
+59       stack_ptr		/* stack depth */
+61         pc /* direct goto */
+62       null              /* to nowhere */
+63       pdata /* the shift register */
+)
+default reg = pdata
+
+/* regext_index */
+(
+0 regidx_data
+4 regidx_key
+8 regidx_xor
+12 regidx_result
+)
+/* ========== radio_ctrl========= */
+(
+0 TXGFSK
+1 PSK
+2 PSK3M
+3 RESET
+)
+/* assign BPWR = radio_ctrl[0]; */
+/* assign PARAMP = radio_ctrl[1]; */
+/* assign XTALPU = radio_ctrl[2]; */
+/* assign SYNTHPU = radio_ctrl[3]; */
+/* assign TXPU = radio_ctrl[4]; */
+/* assign RXPU = radio_ctrl[5]; */
+/* assign SLCTRL = radio_ctrl[6]; */
+/* assign XTALSEL_MUX_SEL = radio_ctrl[7] */
+
+
+/* =========== destination[4] ============== */
+(
+0 bucket
+1 rxf
+2 back
+3 mod
+)
+default dest = bucket
+
+/* =========== source[4] ============= */
+(
+1 txf
+3 demod
+)
+default source = 0
+
+
+/* ============== mark ============= */
+(
+5  mark_loopback
+9  mark_context
+13 mark_lpm_mult_enable
+14 mark_usb_first_resp
+15 mark_old_packet
+16 mark_adv
+35 mark_isstr
+36 mark_loadcode
+37 mark_ext_patch
+38 mark_24g
+39 mark_24g_rxmode
+40 mark_eeprom_size
+41 mark_ble_tx_md
+42 mark_ble_rx_md
+43 mark_otp_encrypt
+44 mark_temp
+45 mark_ble_2M
+46 mark_ble_lr_s8
+47 mark_ble_lr
+48 mark_ble_crc_fail
+50 mark_ble_encryption
+51 mark_first_packet
+)
+
+(
+1 reload_type_otp
+2 reload_type_spi
+3 reload_type_iic
+)
+
+
+/* ============== soft timers ============== */
+(
+0 le_adv_interval_timer
+2 le_scan_interval_timer
+9 key_scan_timer
+7 smp_pairing_timer
+11  ui_led_blink  
+
+8 G24_TIMER_NODATA
+6 G24_TIMER_KB_BIT_CONSUMER_BLANK
+13 G24_TIMER_MS_BLANK
+12 G24_TIMER_KB_MUL_BLANK
+10 G24_TIMER_KB_SYS_CRTL_BLANK
+14 G24_TIMER_KB_BLANK
+
+1 USB_TIMER_NAK
+15 USB_TIMER_WAKEUP
+
+3 app_ms_key_scan_timer
+)
+
+(
+
+27 hci_cmd_le_create_conn
+29 hci_cmd_le_disconn
+30 hci_cmd_le_att_req
+)
+
+
+
+/* ============== mode ==========*/
+(
+0 mode_le
+1 mode_master
+)
+
+(
+0 state_inconn
+1 state_insniff
+)
+(
+3 op_disconn
+)
+
+
+
+//mem_lpm_wake_lock
+(
+0 wake_lock_ble_rx
+1 wake_lock_ble_tx
+
+3 wake_lock_key_press
+4 wake_lock_ble_tx_patch
+5 wake_lock_uart_tx
+6 wake_lock_uart_rx
+7 wake_lock_button
+8 wake_lock_cmd
+9 wake_lock_app
+12 wake_lock_l2cap_tx
+13 wake_lock_l2cap_rx
+14 wake_lock_ipc_c512bt
+15 wake_lock_ipc_bt2c51
+
+)
+
+(//mem_fcomp_div
+0x18 XTAL_24M
+0x10 XTAL_16M
+)
+
+( //verion
+6 BLUETOOTH_CORE_SPECIFICATION_4_0
+7 BLUETOOTH_CORE_SPECIFICATION_4_1
+8 BLUETOOTH_CORE_SPECIFICATION_4_2
+9 BLUETOOTH_CORE_SPECIFICATION_5_0
+10 BLUETOOTH_CORE_SPECIFICATION_5_1
+)
+
+(
+0x050e COMPANY_ID_YICHIP
+)
+
+(
+0x33  REC_3_MODE
+0x34  REC_4_MODE
+0x35  REC_4_MODE_STATIC_ADDRESS
+0x36  REC_4_MODE_RANDOM_RESOLVABLE_PRIVATE_ADDRESS
+0x37  REC_4_MODE_RANDOM_NON_RESOLVABLE_PRIVATE_ADDRESS
+)
+
+(
+0 bt_disabled
+1 ble_disabled
+2 module_disable
+)
+
Index: format/command.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/command.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/command.format	(working copy)
@@ -0,0 +1,1446 @@
+
+/* Parse Command:
+TX: take bits from tx fifo, jam it into shift and a destination (rf,bucket)
+RX: take bits from demod,  jam it into shift and a destination (acl,sco,bucket) */
+
+/* Inject Command:
+TX: 0 into shift, send tail of shift into a destination (rf,bucket)
+RX: 0 into shift, send tail of shift into a destination (acl,sco,bucket) */
+
+format
+  ! 15 romdat
+  % d0
+  % d1
+  % d2
+  % d3
+  [8] d0
+  [8] d1
+  [8] d2
+  [8] d3
+end
+
+format
+  ! 15 enable   /* set flag to 1 */
+  % flag
+  [5] opcode
+  [6] 1
+  [6] flag
+  [6] null
+  [9] 0
+end
+ /* High 5 bytes of channel map */
+format
+  ! 15 pulse   /* set flag to 1 */
+  % flag
+  [5] opcode
+  [6] 1
+  [6] flag
+  [6] null
+  [9] 0
+end
+
+format
+  ! 15 disable   /* set flag to 0 */
+  % flag
+  [5] opcode
+  [6] 2
+  [6] flag
+  [6] null
+  [9] 0
+end
+
+format
+  ! 15 set0  /* set selected bit of reg to 0 */
+  % immediate
+  % reg
+  [5] opcode
+  [6] 9
+  [6] never
+  [6] reg
+  [9] immediate
+end
+
+format
+  ! 15 set1  /* set selected bit of reg to 1 */
+  % immediate
+  % reg
+  [5] opcode
+  [6] 9          /* alu op demux */
+  [6] always
+  [6] reg
+  [9] immediate
+end
+
+format
+  ! 15 setflag  /* set selected bit of the reg to the polarity of the flag */
+  % flag
+  % immediate
+  % reg
+  [5] opcode
+  [6] 9
+  [6] flag
+  [6] reg
+  [9] immediate
+end
+
+format
+  ! 15 nsetflag  /* set the selected bit of the reg to the opposite polarity of the flag */
+  % flag
+  % immediate
+  % reg
+  [5] opcode
+  [6] 0x29
+  [6] flag
+  [6] reg
+  [9] immediate
+end
+
+format
+  ! 15 setflip    /* invert the selected bit of the reg */
+  % immediate
+  % reg
+  [5] opcode
+  [6] 10            /* this is alu op */
+  [6] always
+  [6] reg
+  [9] immediate
+end
+
+format
+  ! 0x1f qset1      /* demux the lowest 4 bit of queue and OR it with regr into regw */
+  % reg             /* in short, set the bit in reg indexed by queue to 1 */
+  [5] opcode
+  [6] 9
+  [6] always
+  [6] reg
+  [9] 0
+end
+  
+format
+  ! 0x1f qset0      /* demux the lowest 4 bit of queue and AND it with regr into regw */
+  % reg             /* in short, set the bit in reg indexed by queue to 0 */
+  [5] opcode
+  [6] 9
+  [6] never
+  [6] reg
+  [9] 0
+end
+
+format 
+  ! 0x1f qsetflag   /* set the bit in reg index by queue to same as flag */
+  % flag
+  % reg
+  [5] opcode
+  [6] 9
+  [6] flag
+  [6] reg
+  [9] 0
+end
+
+format 
+  ! 0x1f nqsetflag   /* set the bit in the reg index by queue to opposite of flag */
+  % flag
+  % reg
+  [5] opcode
+  [6] 0x29
+  [6] flag
+  [6] reg
+  [9] 0
+end
+
+format
+  ! 0x1f qsetflip      /* flip the bit in reg index by queue */
+  % reg
+  [5] opcode
+  [6] 10
+  [6] always
+  [6] reg
+  [9] 0
+end
+
+format
+  ! 1 parse       /* take bits out of source (sco_tx,tx_buffer,rx-elas) into pdata and dest (sco_rx,rx_fifo,tx-elas) */
+  % source
+  % dest
+  % immediate
+  [5] opcode
+  [4] source      /* voice, data, demod */
+  [2] 0
+  [6] 0    
+  [2] 0           /* parse or inject */ 
+  [4] dest        /* acl, sco, mod, bucket */
+  [9] immediate   /* number of bits to parse off */
+end
+
+format
+  ! 1 inject      /* shift data from pdata into destination (tx-elas,rx_fifo,sco_rx) */
+  % destination
+  % immediate
+  [5] opcode
+  [4] 0
+  [2] 0
+  [6] 1
+  [2] 0
+  [4] destination /* acl,sco,mod,bucket */
+  [9] immediate   /* number of bits to be injected */
+end
+
+format
+  ! 1 iinject
+  % destination
+  % regr
+  [5] opcode
+  [6] regr       /* contain the number of bits to inject */
+  [6] 3
+  [2] 0
+  [4] destination /* acl,sco,mod,bucket */
+  [9] 0 
+end
+
+format
+  ! 1 stuff  /* automatic parse, stuff_counter decrement on every bit until hits zero */
+  % source
+  % destination
+  [5] opcode
+  [4] source
+  [2] 0
+  [6] 2
+  [2] 0
+  [4] destination
+  [9] 0
+end
+
+format    /* force immediate value into registers */
+  ! 3 force
+  % immediate
+  % regw
+  [5] opcode
+  [6] 0
+  [6] 0    /* alu operation force */
+  [6] regw  /* destination register */
+  [9] immediate
+end
+
+format    /* force whatever is on shift_reg to regsiters */
+  ! 0x13 iforce
+  % regw
+  [5] opcode
+  [6] 0
+  [6] 0    /* alu operation force */
+  [6] regw  /* destination register */
+  [9] 0
+end
+
+format    /* force immediate value into registers */
+  ! 3 increase
+  % immediate
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 1    /* alu operation add */
+  [6] reg
+  [9] immediate
+end
+
+format
+  ! 3 pincrease
+  % immediate
+  [5] opcode
+  [6] -1  /* pdata */
+  [6] 1   /* alu add */
+  [6] -1  /* back to pdata */
+  [9] immediate
+end
+
+format    /* force immediate value into registers */
+  ! 3 and_into
+  % immediate
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 2    /* alu operation and into */
+  [6] reg
+  [9] immediate
+end
+
+format
+  ! 3 and
+  % regr
+  % immediate
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 2    /* alu operation and into */
+  [6] regw
+  [9] immediate
+end
+  
+format
+  ! 0x13 iand    /* pdata & regr -> regw */
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 2    /* alu operation and into */
+  [6] regw
+  [9] 0
+end
+  
+
+format    /* and whatever is in shiftreg with reg */
+  ! 0x13 iand_into
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 2    /* alu operation and into */
+  [6] reg
+  [9] 0
+end
+
+format
+  ! 3 or_into
+  % immediate
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 3    /* alu operation or into */
+  [6] reg
+  [9] immediate
+end
+
+format
+  ! 3 or
+  % regr
+  % immediate
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 3    /* alu operation or into */
+  [6] regw
+  [9] immediate
+end
+
+format
+  ! 0x13 ior
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 3    /* alu operation or into */
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 0x13 ior_into
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 3    /* alu operation or into */
+  [6] reg
+  [9] 0
+end
+
+format
+  ! 3 skip_to   /* jump to location stored in reg */
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 4   /* alu operation copy */
+  [6] rom_addr
+  [9] 0
+end
+
+format
+  ! 3 copy
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 4   /* alu operation copy */
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 deposit   /* copy the register content thru alu to shift register, not prealigned like preload */
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 4   /* alu operation copy */
+  [6] -1  /* pdata */
+  [9] 0
+end
+
+format
+  ! 3 icopy     /* copy the shift register lsb content directly to register, not aligned */
+  % regw
+  [5] opcode
+  [6] -1  /* pdata */
+  [6]  4  /* alu copy */
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 add
+  % regr
+  % immediate
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 1
+  [6] regw
+  [9] immediate
+end
+
+format
+  ! 0x13 iadd       /* regr + pdata -> regw */
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 1
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 sub          /* immediate - regr -> regw */
+  % regr
+  % immediate
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 12
+  [6] regw
+  [9] immediate
+end
+
+format
+  ! 0x13 isub       /* pdata - regr -> regw */
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 12
+  [6] regw
+  [9] 0
+end
+
+
+format
+  ! 3 flip
+  % immediate
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 5
+  [6] reg
+  [9] immediate
+end
+  
+format
+  ! 0x13 iflip  /* use shift register as immediate to do xor */
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 5
+  [6] regw
+  [9] 0
+end
+  
+format
+  ! 3 xor
+  % regr
+  % immediate
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 5
+  [6] regw
+  [9] immediate
+end
+
+format
+  ! 3 xor_into
+  % immediate
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 5
+  [6] reg
+  [9] immediate
+end
+  
+format
+  ! 0x13 ixor  /* pdata xor regr and store result in regw */
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 5
+  [6] regw
+  [9] 0
+end
+  
+format
+  ! 3 invert
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 8
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 pinvert    /* invert pdata into itself */
+  [5] opcode
+  [6] -1
+  [6] 8
+  [6] -1
+  [9] 0
+end
+
+format
+  ! 3 div                 /* regr div immediate div */
+  % reg
+  % immediate
+  [5] opcode
+  [6] reg
+  [6] 13                   /* generate diven pulse to div */
+  [6] null
+  [9] immediate
+end
+
+format
+  ! 0x13 idiv           /* pdata div regr data ready at most after 41 nops */
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 13                   /* generate diven pulse to div */
+  [6] null
+  [9] 0
+end
+
+format
+  ! 0x13 idiv48           /* pdata div regr data 48bit */
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 17                   /* generate diven pulse to div */
+  [6] null
+  [9] 0
+end
+
+format
+  ! 3 remainder            /* harvest div remainder */
+  % regw
+  [5] opcode
+  [6] 0
+  [6] 14
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 quotient             /* harvest div quotient */
+  % regw
+  [5] opcode
+  [6] 0
+  [6] 15
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 rshift
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 6
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 rshift2
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 22
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 rshift3
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 18
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 rshift4
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 35
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 rshift8
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 25
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 rshift16
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 34
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 rshift32
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 30
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 lshift
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 7
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 lshift2
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 23
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 lshift8
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 26
+  [6] regw
+  [9] 0
+end
+
+  
+format
+  ! 3 lshift3
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 19
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 lshift4
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 36
+  [6] regw
+  [9] 0
+end
+  
+
+format
+  ! 3 lshift16
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 32
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 0x13 bcrc         // calculate regr's byte crc value into pdata
+  % regr
+  [5] opcode
+  [6] regr
+  [6] 24
+  [6] 63
+  [9] 0
+end
+
+
+format
+  ! 3 random               /* random number into regw */
+  % reg
+  [5] opcode
+  [6] 0
+  [6] 20
+  [6] reg
+  [9] 0
+end
+
+format                     /* bit reverse within a byte */
+  ! 3 reverse
+  % reg
+  % regw
+  [5] opcode
+  [6] reg
+  [6] 27
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 priority    /* priority encode reg into regw, lsb is the top priority, ie, priority(8'b00010000) = 4 */
+  % reg
+  % regw
+  [5] opcode
+  [6] reg
+  [6] 21
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 7 setsect   /* set a section of pdata */
+  % section    /* 0 sets 17:0 of pdata with set_data, 1 sets 35:18, 2 sets 53:36, 3 sets 71:54 */
+  % set_data
+  [5] opcode
+  [7] 0
+  [2] section
+  [18] set_data
+end
+
+format
+  ! 10 preload   /* load stuff into pdata according to fhs format, check us.v */
+  % reg
+  [5] opcode
+  [6] reg
+  [6] 0
+  [6] -1
+  [9] 0
+end
+
+format  /* load register with pdata content, according to fhs format, check us.v */
+  ! 10 ialigned   /* all bits are in position */
+  % regw
+  [5] opcode
+  [6] -1
+  [6] 0
+  [6] regw
+  [9] 0
+end
+
+format  /* load register to another according to fhs format */
+  ! 10 aligned
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 0
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 4 branch
+  % addr
+  % flag
+  [5] opcode
+  [6] 1
+  [6] flag
+  [15] addr
+end
+
+format
+  ! 4 call
+  % addr
+  % flag
+  [5] opcode
+  [6] 2
+  [6] flag
+  [15] addr
+end
+
+format
+  ! 4 rtn
+  % flag
+  [5] opcode
+  [6] 3
+  [6] flag
+  [15] 0
+end
+
+format
+  ! 0x0d fetch          /* read from memory, data into pdata, address from immediate then mem_ptr */
+  % num_bytes
+  % addr
+  [5] opcode
+  [6] 63
+  [1] addr
+  [1] 0
+  [4] num_bytes
+  [15] addr
+end
+
+format
+  ! 0x0d fetcht          /* read from memory, data into temp, address from immediate won't increment */
+  % num_bytes
+  % addr
+  [5] opcode
+  [6] 2
+  [1] addr
+  [1] 1
+  [4] num_bytes
+  [15] addr
+end
+
+format
+  ! 0x1d ifetch         /* read from memory, data into pdata, address from regr then mem_ptr */
+  % num_bytes
+  % reg
+  [5] opcode
+  [6] 63
+  [2] 0
+  [4] num_bytes
+  [9] 0
+  [6] reg
+end
+
+format
+  ! 0x1d ifetcht         /* read from memory, data into temp, address from regr won't increment */
+  % num_bytes
+  % reg
+  [5] opcode
+  [6] 2
+  [2] 0
+  [4] num_bytes
+  [9] 0
+  [6] reg
+end
+
+format
+  ! 0x0c store          /* write to memory, data from pdata, address from immediate then mem_ptr */
+  % num_bytes
+  % addr
+  [5] opcode
+  [6] 63
+  [1] addr
+  [1] 0
+  [4] num_bytes
+  [15] addr
+end
+
+format
+  ! 0x0c storet          /* write to memory, data from temp, address from immediate won't increment */
+  % num_bytes
+  % addr
+  [5] opcode
+  [6] 2
+  [1] addr
+  [1] 1
+  [4] num_bytes
+  [15] addr
+end
+
+format
+  ! 0x1c istore        /* write pdata to memory, address from regaddr */
+  % num_bytes
+  % regaddr
+  [5] opcode
+  [6] 63            
+  [2] 0
+  [4] num_bytes
+  [9] 0
+  [6] regaddr
+end
+
+format
+  ! 0x1c istoret        /* write temp to memory, address from regaddr */
+  % num_bytes
+  % regaddr
+  [5] opcode
+  [6] 2            
+  [2] 0
+  [4] num_bytes
+  [9] 0
+  [6] regaddr
+end
+
+
+format
+  ! 0x0d crc         // read from memory, count from loopcnt, put crc result into pdata 
+  % addr
+  [5] opcode
+  [6] 63
+  [6] 0
+  [15] addr
+end
+
+format
+  ! 0x1d icrc         /* read from memory, address from reg, count from loopcnt, put crc result into pdata */
+  % reg
+  [5] opcode
+  [6] 63
+  [15] 0
+  [6] reg
+end
+
+
+format
+  ! 0x0c storer          /* write reg to memory, address from immediate then mem_ptr */
+  % reg
+  % num_bytes
+  % addr
+  [5] opcode
+  [6] reg               
+  [1] addr
+  [1] 0
+  [4] num_bytes
+  [15] addr
+end
+
+
+format
+  ! 0x1c istorer        /* write regr to memory, address from regaddr */
+  % regr
+  % num_bytes
+  % regaddr
+  [5] opcode
+  [6] regr            
+  [2] 0
+  [4] num_bytes
+  [9] 0
+  [6] regaddr
+end
+
+
+format
+  ! 0x1c lstorer        /* write regr to memory, address from regaddr, length from loopcnt */
+  % regr
+  % regaddr
+  [5] opcode
+  [6] regr            
+  [6] 0
+  [9] 0
+  [6] regaddr
+end
+
+format
+  ! 0x1c lstore        /* write pdata to memory, address from regaddr, length from loopcnt */
+  % regaddr
+  [5] opcode
+  [6] 63            
+  [6] 0
+  [9] 0
+  [6] regaddr
+end
+
+format
+  ! 0x1c lstorew        /* 32bit write pdata to memory, address from regaddr, length from loopcnt */
+  % regaddr
+  [5] opcode
+  [6] 63
+  [6] 42
+  [9] 0
+  [6] regaddr
+end
+
+
+format
+  ! 0x0d fetchr          /* read reg from memory, address from immediate then mem_ptr */
+  % reg
+  % num_bytes
+  % addr
+  [5] opcode
+  [6] reg               
+  [1] addr
+  [1] 0
+  [4] num_bytes
+  [15] addr
+end
+
+format
+  ! 0x1d ifetchr        /* read regr from memory, address from regaddr */
+  % regr
+  % num_bytes
+  % regaddr
+  [5] opcode
+  [6] regr
+  [2] 0
+  [4] num_bytes
+  [9] 0
+  [6] regaddr
+end
+
+
+
+
+format
+  ! 0x0e jam
+  % immediate
+  % addr
+  [5] opcode
+  [3] 0
+  [16] addr
+  [8] immediate
+end
+
+format			/* 0x242... */
+  ! 4 nbranch
+  % addr
+  % flag
+  [5] opcode
+  [1] 1
+  [5] 1
+  [6] flag
+  [15] addr
+end
+
+format
+  ! 4 ncall
+  % addr
+  % flag
+  [5] opcode
+  [1] 1
+  [5] 2
+  [6] flag
+  [15] addr
+end
+
+format
+  ! 4 nrtn
+  % flag
+  [5] opcode
+  [1] 1
+  [5] 3
+  [6] flag
+  [15] 0
+end
+
+format
+  ! 4 nop
+  % addr  /* no-op for addr+2 clocks */
+  [5] opcode
+  [6] 0     
+  [6] 0     /* always */ 
+  [15] addr
+end
+
+format
+  ! 4 clear_stack
+  [5] opcode
+  [6] 4
+  [6] 0    /* always */
+  [15] 0
+end
+
+format
+  ! 6 until
+  % reg
+  % flag
+  [5] opcode
+  [6] reg
+  [6] flag
+  [6] 1
+  [9] 0
+end
+  
+format
+  ! 6 correlate   /* quit if 1. flag is true 2, regr time up 3, found sync,(cond_true) */
+  % reg          /* expire counter to check against */
+  % flag
+  [5] opcode
+  [6] reg
+  [6] flag
+  [6] 2           /* correlate */
+  [9] 0           
+end
+
+format
+  ! 5 compare   /* sets cond flag,  if reg equals immediate */
+  % immediate
+  % reg
+  % mask
+  [5] opcode
+  [6] reg
+  [3] 0
+  [9] mask
+  [9] immediate
+end
+
+format
+  ! 0x15 icompare   /* sets cond flag,  if reg equals pdata */
+  % mask
+  % reg
+  [5] opcode
+  [6] reg
+  [3] 0
+  [9] mask
+  [9] 0
+end
+
+format   /* sets cond. flag, if reg equals LS half of shift reg with MS half of reg being mask */
+  ! 5 iverify
+  % reg
+  [5] opcode
+  [6] reg
+  [3] 2
+  [18] 0
+end
+
+format
+  ! 0x15 qisolate1
+  % reg
+  [5] opcode
+  [6] reg
+  [3] 3
+  [18] -1
+end
+
+format
+  ! 0x15 qisolate0
+  % reg
+  [5] opcode
+  [6] reg
+  [3] 3
+  [18] 0
+end
+
+	/* REVAB bug: cannot access bit above 35 */
+format
+  ! 5 isolate1
+  % addr
+  % reg
+  [5] opcode
+  [6] reg
+  [3] 3
+  [9] -1
+  [9] addr
+end
+
+format
+  ! 5 isolate0
+  % addr
+  % reg
+  [5] opcode
+  [6] reg
+  [3] 3
+  [9] 0
+  [9] addr
+end
+
+format
+  ! 11 setarg
+  % immediate
+  [5] opcode
+  [27] immediate
+end
+
+format
+  ! 0x1b arg
+  % immediate
+  % reg
+  [5] opcode
+  [6] reg
+  [21] immediate
+end
+
+  
+format
+  ! 0 sleep
+  [5] opcode
+  [27] 0
+end
+
+format
+  ! 0 snooze
+  [5] opcode
+  [6] -1
+  [21] 0
+end
+
+format
+  ! 0 revision
+  % rev_num
+  [5] opcode
+  [27] rev_num
+end
+
+format
+  ! 0x18 loop   /* branch when loopcnt is NOT zero, and decrease loopcnt */
+  % addr
+  [5] opcode
+  [4] 4
+  [8] 0
+  [15] addr
+end
+
+format
+  ! 0x18 beq   /* branch when pdata is equal to immediate */
+  % imme
+  % addr
+  [5] opcode
+  [4] 0
+  [8] imme
+  [15] addr
+end
+
+format
+  ! 0x18 bne   /* branch when pdata is NOT equal to immediate */
+  % imme
+  % addr
+  [5] opcode
+  [4] 1
+  [8] imme
+  [15] addr
+end
+
+format
+  ! 0x18 rtneq   /* return when pdata is equal to immediate */
+  % imme
+  [5] opcode
+  [4] 2
+  [8] imme
+  [15] 0
+end
+
+format
+  ! 0x18 rtnne   /* return when pdata is NOT equal to immediate */
+  % imme
+  [5] opcode
+  [4] 3
+  [8] imme
+  [15] 0
+end
+
+format
+  ! 0x18 bbit1   /* branch when pdata's imme bit is 1 */
+  % imme
+  % addr
+  [5] opcode
+  [4] 5
+  [8] imme
+  [15] addr
+end
+
+format
+  ! 0x18 bbit0   /* branch when pdata's imme bit is 0 */
+  % imme
+  % addr
+  [5] opcode
+  [4] 6
+  [8] imme
+  [15] addr
+end
+
+format
+  ! 0x18 rtnbit1   /* return when pdata's imme bit is 0 */
+  % imme
+  [5] opcode
+  [4] 7
+  [8] imme
+  [15] 0
+end
+
+format
+  ! 0x18 rtnbit0   /* return when pdata's imme bit is 0 */
+  % imme
+  [5] opcode
+  [4] 8
+  [8] imme
+  [15] 0
+end
+
+format
+  ! 8	bpatch
+  % imme
+  % addr
+  [5] opcode
+  [4] 9
+  [8] imme
+  [15] addr
+end
+
+format
+  ! 8	bpatchx
+  % imme
+  % addr
+  [5] opcode
+  [4] 14
+  [8] imme
+  [15] addr
+end
+
+format
+  ! 0x18 bmark1   /* branch when mark's imme bit is 1 */
+  % imme
+  % addr
+  [5] opcode
+  [4] 10
+  [8] imme
+  [15] addr
+end
+
+format
+  ! 0x18 bmark0   /* branch when mark's imme bit is 0 */
+  % imme
+  % addr
+  [5] opcode
+  [4] 11
+  [8] imme
+  [15] addr
+end
+
+format
+  ! 0x18 rtnmark1   /* return when mark's imme bit is 0 */
+  % imme
+  [5] opcode
+  [4] 12
+  [8] imme
+  [15] 0
+end
+
+format
+  ! 0x18 rtnmark0   /* return when mark's imme bit is 0 */
+  % imme
+  [5] opcode
+  [4] 13
+  [8] imme
+  [15] 0
+end
+
+format
+  ! 3 mul32                  /* immediate mult regr */ 
+  % regr
+  % immediate                                  
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 31           
+  [6] regw
+  [9] immediate
+end
+
+format
+  ! 0x13 imul32           /* pdata mult regr 32x32=64bit */  
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 31                   
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 0x13 imults           /* pdata mult regr 32x32=64bit, signed */  
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 16
+  [6] regw
+  [9] 0
+end
+
+
+format
+  ! 3 byteswap
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 33
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 3 shasx          /* SHA256 Sx operation, immediate is Sx */
+  % regr
+  % immediate
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 28
+  [6] regw
+  [9] immediate
+end
+
+
+format
+  ! 0x13 regexrot 	/* regext[0] <- regext[7], regext[1] <- regext[0], regext[2] <- regext[1] ... */
+  [5] opcode
+  [6] 0
+  [6] 29
+  [6] null
+  [9] 0
+end
+
+format
+  ! 0x13 adpcm         // encode adpcm from regr into regw
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 43
+  [6] regw
+  [9] 0
+end
+
+format
+  ! 0x13 pcm         // decode adpcm from regr into regw
+  % regr
+  % regw
+  [5] opcode
+  [6] regr
+  [6] 44
+  [6] regw
+  [9] 0
+end
+
+
Index: format/debug.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/debug.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/debug.format	(working copy)
@@ -0,0 +1,6 @@
+xmemalloc(
+
+1 mem_rf_debug_rx_gpio
+1 mem_rf_debug_tx_gpio
+)
+
Index: format/g24_protocol_stack/24g.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/g24_protocol_stack/24g.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/g24_protocol_stack/24g.format	(working copy)
@@ -0,0 +1,80 @@
+
+xmemalloc g24(
+6 mem_24g_lap
+34 mem_24g_rxbuf
+32 mem_24g_txbuf
+36 mem_24g_txpayload
+32 mem_24g_rxpayload
+1 mem_24g_rxdata_length
+1 mem_24g_pid
+1 mem_24g_no_ack
+3 mem_24g_sta_crc
+3 mem_24g_last_crc
+1 mem_24g_sta_pid
+1 mem_24g_last_pid
+1 mem_24g_datalen
+1 mem_24g_data_type
+1 mem_24g_txlen
+2 mem_24g_rx_window
+1 mem_24g_ch
+1 mem_24g_current_ch_number
+4 mem_24g_addr
+4 mem_24g_ch_map1
+4 mem_24g_ch_map2
+4 mem_24g_ch_map3
+4 mem_24g_ch_map4
+4 mem_24g_tx_btclk
+1 mem_24g_interval
+1 mem_24g_interval_min
+1 mem_24g_interval_max
+2 mem_24g_syncword
+1 mem_24g_syncword_crc8
+1 mem_24g_get_syncword_crc8
+1 mem_24g_pair_switch
+8 mem_24g_enter_hibernate
+
+1 mem_24g_rx_phy
+1 mem_24g_tx_phy
+
+1 mem_24g_ch_map_update
+4 mem_24g_ch_update_map1
+4 mem_24g_ch_update_map2
+4 mem_24g_ch_update_map3
+4 mem_24g_ch_update_map4
+
+1 mem_24g_disable_fec1
+1 mem_24g_off_type
+)
+
+
+xmemalloc g24_tx(
+1 mem_rssi_hex_received
+
+)
+
+
+
+(//mem_24g_data_type
+1 TYPE_MS
+2 TYPE_KB
+0x07 bits_data
+//0-2 data type
+3 bit_abort
+4 bit_hop
+5 bit_sync
+//6-7 channel offset
+)
+
+
+(
+0 ERR_NULL
+1 ERR_SYNC_TO
+2 ERR_HEC
+3 ERR_LR_LEN
+4 ERR_TYPE
+5 ERR_LEN_OVER
+6 ERR_CRC
+)
+
+
+
Index: format/g24_protocol_stack/24g_pair.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/g24_protocol_stack/24g_pair.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/g24_protocol_stack/24g_pair.format	(working copy)
@@ -0,0 +1,52 @@
+
+
+xmemalloc g24(
+4 mem_24g_pair_addr
+1 mem_24g_pair_ch
+1 mem_24g_pair_tx_power
+
+)
+
+xmemalloc g24_tx(
+1 mem_24g_pair_sm
+1 mem_24g_pair_no_ack
+2 mem_24g_pair_timeout_init
+2 mem_24g_pair_timeout
+2 mem_24g_pair_count
+)
+
+xmemalloc g24_rx(
+1 mem_24g_device1_bind_step
+1 mem_24g_device2_bind_step
+1 mem_24g_bind_device_status
+8 mem_24g_bind_payload
+1 mem_24g_device1_bind_disable
+1 mem_24g_device2_bind_disable
+
+)
+
+(//mem_24g_pair_sm
+0 STATE_24G_PAIRING_NULL
+1 STATE_24G_PAIRING_1
+2 STATE_24G_PAIRING_2
+3 STATE_24G_PAIRING_3
+4 STATE_24G_PAIRING_4
+0X11 STATE_24G_PAIRING_1_WAITING_ACK
+0X12 STATE_24G_PAIRING_2_WAITING_ACK
+0X13 STATE_24G_PAIRING_3_WAITING_ACK
+0X14 STATE_24G_PAIRING_4_WAITING_ACK
+0XFF STATE_24G_PAIRING_SUCCESS
+)
+
+(
+0x01 DATATYPE_DEVICE1	//mouse
+0x02 DATATYPE_DEVICE2	//keyboard
+0xaa DATATYPE_BIND		//bind step 1
+0x55 DATATYPE_CONFIG	//bind step 2
+0x22 DATATYPE_OK		//bind step 3
+0xff DATATYPE_ATTEMP	//reconn
+)
+
+(
+5 BIND_MODE_CONTINUE
+)
Index: format/g24_protocol_stack/24g_receiver.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/g24_protocol_stack/24g_receiver.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/g24_protocol_stack/24g_receiver.format	(working copy)
@@ -0,0 +1,50 @@
+
+
+xmemalloc g24_rx(
+2 mem_cb_24g_receive_process
+2 mem_cb_24g_ackpayload
+2 mem_cb_24g_data_device1
+2 mem_cb_24g_data_device2
+34 mem_24g_rxdata_temp
+1 mem_24g_abort_packet
+4 mem_24g_hop_btclk
+1 mem_24g_hop_interval
+1 mem_24g_pair_mode
+1 mem_24g_ackpayload_enable
+1 mem_24g_hop_packet
+1 mem_24g_mode_switch
+1 mem_24g_nodata_timer_enable
+
+1 mem_24g_mode_init
+1 mem_24g_work_mode
+1 mem_24g_time_slice
+1 mem_24g_self_last_ch
+1 mem_24g_self_ch_number
+1 mem_24g_self_config_ch_once
+1 mem_24g_device1_last_ch
+1 mem_24g_device1_ch_number
+1 mem_24g_device1_config_ch_once
+1 mem_24g_device2_last_ch
+1 mem_24g_device2_ch_number
+1 mem_24g_device2_config_ch_once
+1 mem_24g_led_status
+1 mem_24g_bind_mode_continue
+
+1 mem_tx_power_temp
+
+1 mem_24g_mode_B_S_switch
+1 mem_24g_mode_B_S_switch_init
+2 mem_24g_mode_B_S_switch_cnt
+1 mem_24g_mode_B_S_switch_exit
+1 mem_24g_B_S_time_slice
+1 mem_24g_B_S_mode_switch_disable
+
+1 mem_24g_bind_device_living
+)
+
+
+(
+0 bit_ack_24g
+)
+
+
Index: format/g24_protocol_stack/24g_reconn.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/g24_protocol_stack/24g_reconn.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/g24_protocol_stack/24g_reconn.format	(working copy)
@@ -0,0 +1,30 @@
+xmemalloc g24_tx(
+2 mem_24g_reconn_timeout_init
+2 mem_24g_reconn_timeout
+2 mem_24g_reconn_count
+1 mem_24g_reconn_type
+1 mem_24g_fast_conn_enable
+4 mem_24g_fast_conn_addr
+4 mem_24g_receiver_addr
+1 mem_24g_fast_conn_temp_ch
+1 mem_24g_receiver_temp_ch
+1 mem_24g_device_temp_ch
+
+)
+
+xmemalloc g24_rx(
+4 mem_24g_transmitter_addr
+4 mem_24g_device1_addr
+4 mem_24g_device2_addr
+
+)
+
+(//mem_24g_reconn_type
+0 DEFAULT_24G_DEVICE
+1 FAST_CONN_AND_RECEIVER
+2 FAST_CONN_AND_3_0_ADDR
+3 RECEIVER_AND_3_0_ADDR
+4 PAIR_AND_3_0_ADDR
+5 PAIR_AND_RECEIVER
+)
+
Index: format/g24_protocol_stack/24g_rssi.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/g24_protocol_stack/24g_rssi.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/g24_protocol_stack/24g_rssi.format	(working copy)
@@ -0,0 +1,40 @@
+
+xmemalloc g24(
+1 mem_rssi_buff_index
+)
+
+
+xmemalloc g24_tx(
+1 mem_rssi_signal_index
+2 mem_rssi_signal_buf_ptr
+
+)
+
+
+xmemalloc g24_rx(
+1 mem_rssi_noise_avg
+1 mem_rssi_noise_index
+
+1 mem_rssi_noise_self_avg
+1 mem_rssi_noise_device1_avg
+1 mem_rssi_noise_device2_avg
+1 mem_rssi_noise_self_index
+1 mem_rssi_noise_device1_index
+1 mem_rssi_noise_device2_index
+
+2 mem_rssi_noise_buffer_ptr
+2 mem_rssi_noise_self_buffer_ptr
+2 mem_rssi_noise_device1_buffer_ptr
+2 mem_rssi_noise_device2_buffer_ptr
+
+)
+
+
+
+(
+0x50 RSSI_THRESH_NOISE
+)
+
+
+
+
Index: format/g24_protocol_stack/24g_transmitter.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/g24_protocol_stack/24g_transmitter.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/g24_protocol_stack/24g_transmitter.format	(working copy)
@@ -0,0 +1,67 @@
+
+
+xmemalloc g24_tx(
+2 mem_cb_24g_transmit_data
+2 mem_cb_24g_search_receiver
+2 mem_cb_24g_lpm_before
+2 mem_cb_24g_transmit_short_sleep
+2 mem_cb_24g_transmit_long_sleep
+
+1 mem_24g_conn_sm
+
+1 mem_24g_ensure
+2 mem_24g_txfail_cnt
+1 mem_24g_attempt_fail_flag
+
+1 mem_24g_retry
+1 mem_24g_abort_pac
+1 mem_24g_max_retry
+4 mem_24g_device_addr
+3 mem_24g_short_sleep_set
+8 mem_24g_long_sleep_set
+4 mem_24g_long_sleep_set1
+
+1 mem_24g_pac_index
+1 mem_24g_transmit_by_interrupt
+2 mem_24g_transmit_by_interrupt_exit_count
+2 mem_24g_transmit_by_interrupt_exit_count_init
+2 mem_24g_long_sleep_param_update_timer_init
+2 mem_24g_long_sleep_param_update_timer
+
+1 mem_24g_fast_hop_count
+2 mem_24g_retransmit
+)
+
+(
+1 NO_ACK_24G
+0 WITH_ACK_24G
+)
+
+(//mem_24g_conn_sm
+0 STATE_24G_STOP
+0 STATE_24G_START
+1 STATE_24G_PAIR
+2 STATE_24G_RECONN
+)
+
+(//mem_24g_transmit_by_interrupt
+1 G24_TX_TIMER_INT_ENABLE
+0 G24_TX_TIMER_INT_DISABLE
+)
+
+
+(
+1 OFFSET_DATA_TYPE
+2 OFFSET_LR_DATA_TYPE
+)
+
+(
+0x017700 G24_LONG_SLEEP_STEP1	//8ms
+0x36ee80 G24_LONG_SLEEP_STEP2	//300ms
+0x124f80 G24_LONG_SLEEP_STEP3	//100ms
+63500 G24_8MS_INTERVAL_PARAM		//8ms
+12210 G24_4MS_INTERVAL_PARAM
+)
+
+
+
Index: format/g24_protocol_stack/24g_txpower_ctrl.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/g24_protocol_stack/24g_txpower_ctrl.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/g24_protocol_stack/24g_txpower_ctrl.format	(working copy)
@@ -0,0 +1,20 @@
+
+xmemalloc g24_tx(
+1 mem_rssi_avg_received
+1 mem_power_ctrl_level
+1 mem_power_ctrl_pac_succ_cnt
+1 mem_power_ctrl_pac_succ_cnt_init
+
+1 mem_rssi_dis_min_24g
+1 mem_rssi_dis_max_24g
+1 mem_rssi_hex_received_max_value
+
+1 mem_rssi_dis_min_ble
+1 mem_rssi_dis_max_ble
+)
+
+
+(
+50 POWER_CTRL_DECRS_THRESHOLD
+)
+
Index: format/hci.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/hci.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/hci.format	(working copy)
@@ -0,0 +1,520 @@
+
+
+memalloc hci_boot(
+2 mem_hci_opcode_ocf
+1 mem_hci_opcode_ogf
+
+//event head
+1 mem_hci_event_head_type
+1 mem_hci_event_head_event_code
+1 mem_hci_event_para_total_length
+
+//command complete
+1 mem_hci_command_complete_num_hci_command_packet
+0 mem_hci_command_complete_command_opcode
+2 mem_hci_opcode
+0 mem_hci_command_complete_return_parameter
+1 mem_hci_command_complete_return_parameter_status
+0 mem_hci_command_complete_return_parameter_chip_id
+
+)
+
+xmemalloc hci_boot(
+1 mem_hci_uart_tx_gpio
+1 mem_hci_uart_rx_gpio
+1 mem_hci_uart_rts_gpio
+1 mem_hci_uart_cts_gpio
+1 mem_hci_pwm_12mhz_gpio
+)
+
+(
+0x07 HCI_UART_TX_GPIO_NUM
+0x06 HCI_UART_RX_GPIO_NUM
+0x09 HCI_UART_RTS_GPIO_NUM
+0x0a HCI_UART_CTS_GPIO_NUM
+0x0c HCI_PMW_12MHZ_GPIO_NUM
+)
+
+(
+0x00 COMMAND_SUCCEEDED
+0x01 COMMAND_UNKNOWN
+0x0c COMMAND_DISALLOWED
+)
+
+//HCI H4 Packet TYPE
+(
+0x01 HCI_H4_TYPE_CMD
+0x02 HCI_H4_TYPE_ACL
+0x04 HCI_H4_TYPE_EVENT
+)
+
+(
+0x00 BT_ACL_START_NO_FLUSH
+0x01 BT_ACL_CONT
+0x02 BT_ACL_START
+)
+
+// HCI command opcode group field values
+(
+0x01 HCI_OGF_LINK_CONTROL
+0x02 HCI_OGF_LINK_POLICY
+0x03 HCI_OGF_CONTROLLER_AND_BASEBAND
+0x04 HCI_OGF_INFOMATIONAL_PARAM
+0x05 HCI_OGF_STATUS_PARAM
+0x06 HCI_OGF_TEST
+0x08 HCI_OGF_LE_CONTROLLER
+0x3f HCI_OGF_VENDOR_SPECIFIC_DEBUG
+)
+
+// HCI link control opcode command field values, OGF=1
+(
+0x01 HCI_INQUIRY 
+0x02 HCI_INQUIRY_CANCEL 
+0x03 HCI_PERIODIC_INQUIRY_MODE 
+0x04 HCI_EXIT_PERIODIC_INQUIRY_MODE 
+0x05 HCI_CREATE_CONNECTION 
+0x06 HCI_DISCONNECT 
+0x07 HCI_ADD_SCO_CONNECTION 
+0x08 HCI_CREATE_CONNECTION_CANCEL
+0x09 HCI_ACCEPT_CONNECTION 
+0x0A HCI_REJECT_CONNECTION 
+0x0B HCI_LINK_KEY_REQUEST_REPLY 
+0x0C HCI_LINK_KEY_REQUEST_NEGATIVE_REPLY 
+0x0D HCI_PIN_CODE_REQUEST_REPLY 
+0x0E HCI_PIN_CODE_REQUEST_NEGATIVE_REPLY 
+0x0F HCI_CHANGE_CONNECTION_PACKET_TYPE 
+0x11 HCI_AUTHENTICATION_REQUESTED 
+0x13 HCI_SET_CONNECTION_ENCRYPTION 
+0x15 HCI_CHANGE_CONNECTION_LINK_KEY 
+0x17 HCI_MASTER_LINK_KEY 
+0x19 HCI_REMOTE_NAME_REQUEST 
+0x1A HCI_REMOTE_NAME_REQUEST_CANCEL
+0x1B HCI_READ_REMOTE_SUPPORTED_FEATURES 
+0x1C HCI_READ_REMOTE_EXT_FEATURES 
+0x1D HCI_READ_REMOTE_VERSION_INFORMATION 
+0x1F HCI_READ_CLOCK_OFFSET 
+0x20 HCI_READ_LMP_HANDLE
+0x28 HCI_SETUP_SCO_CONNECTION
+0x29 HCI_ACCEPT_SCO_CONNECTION
+0x2A HCI_REJECT_SCO_CONNECTION
+0x2B HCI_IO_CAP_REQUEST_REPLY
+0x2C HCI_USER_CONFIRMATION_REQUEST_REPLY
+0x2D HCI_USER_CONFIRMATION_REQUEST_NEGATIVE_REPLY
+0x2E HCI_USER_PASSKEY_REQUEST_REPLY
+0x2F HCI_USER_PASSKEY_REQUEST_NEGATIVE_REPLY
+0x30 HCI_REMOTE_OOB_DATA_REQUEST_REPLY
+0x33 HCI_REMOTE_OOB_DATA_REQUEST_NEGATIVE_REPLY
+0x34 HCI_IO_CAPABILITY_REQUEST_NEGATIVE_REPLY
+0x35 HCI_CREATE_PHYSICAL_LINK
+0x36 HCI_ACCEPT_PHYSICAL_LINK
+0x37 HCI_DISCONNECT_PHYSICAL_LINK
+0x38 HCI_CREATE_LOGICAL_LINK
+0x39 HCI_ACCEPT_LOGICAL_LINK
+0x3A HCI_DISCONNECT_LOGICAL_LINK
+0x3B HCI_LOGICAL_LINK_CANCEL
+0x3C HCI_FLOW_SPEC_MODIFY
+0x3D HCI_ENHANCED_SETUP_SYNCHRONOUS_CONNECTION
+0x3E HCI_ENHANCED_ACCEPT_SYNCHRONOUS_CONNECTION_REQUEST
+0x3F HCI_TRUNCATED_PAGE
+0x40 HCI_TRUNCATED_PAGE_CANCEL
+0x41 HCI_SET_CONNECTIONLESS_SLAVE_BROADCAST
+0x42 HCI_SET_CONNECTIONLESS_SLAVE_BROADCAST_RECEIVE
+0x43 HCI_START_SYNCHRONIZATION_TRAIN
+0x44 HCI_RECEIVE_SYNCHRONIZATION_TRAIN
+0x45 HCI_REMOTE_OOB_EXTENDED_DATA_REQUEST_REPLY
+)
+
+
+// HCI link policy commands OCF value, OGF=2
+(
+0x01 HCI_HOLD_MODE 
+0x03 HCI_SNIFF_MODE 
+0x04 HCI_EXIT_SNIFF_MODE 
+0x05 HCI_PARK_MODE 
+0x06 HCI_EXIT_PARK_MODE 
+0x07 HCI_QOS_SETUP 
+0x09 HCI_ROLE_DISCOVERY 
+0x0B HCI_SWITCH_ROLE 
+0x0C HCI_READ_LINK_POLICY_SETTINGS 
+0x0D HCI_WRITE_LINK_POLICY_SETTINGS 
+0x0e HCI_READ_DEFAULT_LINK_POLICY_SETTINGS
+0x0f HCI_WRITE_DEFAULT_LINK_POLICY_SETTINGS
+0x10 HCI_FLOW_SPECIFICATION
+0x11 HCI_SNIFF_SUBRATING
+)
+
+// HCI host controller and baseband commands OCF values, OGF=3
+(
+0x01 HCI_SET_EVENT_MASK 
+0x03 HCI_RESET 
+0x05 HCI_SET_EVENT_FILTER 
+0x08 HCI_FLUSH 
+0x09 HCI_READ_PIN_TYPE 
+0x0A HCI_WRITE_PIN_TYPE 
+0x0B HCI_CREATE_NEW_UNIT_KEY 
+0x0D HCI_READ_STORED_LINK_KEY 
+0x11 HCI_WRITE_STORED_LINK_KEY 
+0x12 HCI_DELETE_STORED_LINK_KEY 
+0x13 HCI_WRITE_LOCAL_NAME 
+0x14 HCI_READ_LOCAL_NAME 
+0x15 HCI_READ_CONN_ACCEPT_TIMEOUT 
+0x16 HCI_WRITE_CONN_ACCEPT_TIMEOUT 
+0x17 HCI_READ_PAGE_TIMEOUT 
+0x18 HCI_WRITE_PAGE_TIMEOUT 
+0x19 HCI_READ_SCAN_ENABLE 
+0x1A HCI_WRITE_SCAN_ENABLE 
+0x1B HCI_READ_PAGE_SCAN_ACTIVITY 
+0x1C HCI_WRITE_PAGE_SCAN_ACTIVITY 
+0x1D HCI_READ_INQUIRY_SCAN_ACTIVITY 
+0x1E HCI_WRITE_INQUIRY_SCAN_ACTIVITY 
+0x1F HCI_READ_AUTHENTICATION_ENABLE 
+0x20 HCI_WRITE_AUTHENTICATION_ENABLE 
+0x21 HCI_READ_ENCRYPTION_MODE 
+0x22 HCI_WRITE_ENCRYPTION_MODE 
+0x23 HCI_READ_CLASS_OF_DEVICE 
+0x24 HCI_WRITE_CLASS_OF_DEVICE 
+0x25 HCI_READ_VOICE_SETTING 
+0x26 HCI_WRITE_VOICE_SETTING 
+0x27 HCI_READ_AUTOMATIC_FLUSH_TIMEOUT 
+0x28 HCI_WRITE_AUTOMATIC_FLUSH_TIMEOUT 
+0x29 HCI_READ_NUM_BROADCAST_RETRANSMISSIONS 
+0x2A HCI_WRITE_NUM_BROADCAST_RETRANSMISSIONS 
+0x2B HCI_READ_HOLD_MODE_ACTIVITY 
+0x2C HCI_WRITE_HOLD_MODE_ACTIVITY 
+0x2D HCI_READ_TRANSMIT_POWER_LEVEL 
+0x2E HCI_READ_SCO_FLOW_CONTROL_ENABLE 
+0x2F HCI_WRITE_SCO_FLOW_CONTROL_ENABLE 
+0x31 HCI_SET_CONTROLLER_TO_HOST_FLOW_CONTROL 
+0x33 HCI_HOST_BUFFER_SIZE 
+0x35 HCI_HOST_NUM_COMPLETED_PACKETS 
+0x36 HCI_READ_LINK_SUPERVISION_TIMEOUT 
+0x37 HCI_WRITE_LINK_SUPERVISION_TIMEOUT 
+0x38 HCI_READ_NUMBER_OF_SUPPORTED_IAC 
+0x39 HCI_READ_CURRENT_IAC_LAP 
+0x3A HCI_WRITE_CURRENT_IAC_LAP 
+0x3B HCI_READ_PAGE_SCAN_PERIOD_MODE 
+0x3C HCI_WRITE_PAGE_SCAN_PERIOD_MODE 
+0x3D HCI_READ_PAGE_SCAN_MODE 
+0x3E HCI_WRITE_PAGE_SCAN_MODE 
+0x3F HCI_SET_AFH_CHANNEL_CLASSIFICATION 
+
+
+0x42 HCI_READ_INQUIRY_SCAN_TYPE 
+0x43 HCI_WRITE_INQUIRY_SCAN_TYPE 
+0x44 HCI_READ_INQUIRY_MODE 
+0x45 HCI_WRITE_INQUIRY_MODE 
+0x46 HCI_READ_PAGE_SCAN_TYPE 
+0x47 HCI_WRITE_PAGE_SCAN_TYPE 
+
+0x48 HCI_READ_AFH_CHANNEL_ACCESSMENT_MODE 
+0x49 HCI_WRITE_AFH_CHANNEL_ACCESSMENT_MODE 
+0x51 HCI_READ_EXTENDED_INQUIRY_RESPONSE
+0x52 HCI_WRITE_EXTENDED_INQUIRY_RESPONSE
+0x53 HCI_REFRESH_ENCRYPTION_KEY
+0x55 HCI_READ_SIMPLE_PAIRING_MODE
+0x56 HCI_WRITE_SIMPLE_PAIRING_MODE
+0x57 HCI_READ_LOCAL_OOB_DATA
+0x58 HCI_READ_INQUIRY_RESPONSE_TRANSMIT_POWER_LEVEL
+0x59 HCI_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL
+0x60 HCI_SEND_KEYPRESS_NOTIFICATION
+0x5A HCI_READ_DEFAULT_ERRONEOUS_DATA_REPORTING
+0x5B HCI_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING
+0x5F HCI_ENHANCED_FLUSH
+0x61 HCI_READ_LOGICAL_LINK_ACCEPT_TIMEOUT
+0x62 HCI_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT
+0x63 HCI_SET_EVENT_MASK_PAGE_2
+0x64 HCI_READ_LOCATION_DATA
+0x65 HCI_WRITE_LOCATION_DATA
+0x66 HCI_READ_FLOW_CONTROL_MODE
+0x67 HCI_WRITE_FLOW_CONTROL_MODE
+0x68 HCI_READ_ENHANCE_TRANSMIT_POWER_LEVEL
+0x69 HCI_READ_BEST_EFFORT_FLUSH_TIMEOUT
+0x6A HCI_WRITE_BEST_EFFORT_FLUSH_TIMEOUT
+0x6B HCI_SHORT_RANGE_MODE
+0x6C HCI_READ_LE_HOST_SUPPORT
+0x6D HCI_WRITE_LE_HOST_SUPPORT
+0x6E HCI_SET_MWS_CHANNEL_PARAMETERS
+0x6F HCI_SET_EXTERNAL_FRAME_CONFIGURATION
+0x70 HCI_SET_MWS_SIGNALING
+0x71 HCI_SET_MWS_TRANSPORT_LAYER
+0x72 HCI_SET_MWS_SCAN_FREQUENCY_TABLE
+0x73 HCI_SET_MWS_PATTERN_CONFIGURATION
+0x74 HCI_SET_RESERVED_LT_ADDR
+0x75 HCI_DELETE_RESERVED_LT_ADDR
+0x76 HCI_SET_CONNECTIONLESS_SLAVE_BROADCAST_DATA
+0x77 HCI_READ_SYNCHRONIZATION_TRAIN_PARAMETERS
+0x78 HCI_WRITE_SYNCHRONIZATION_TRAIN_PARAMETERS
+0x79 HCI_READ_SECURE_CONNECTIONS_HOST_SUPPORT
+0x7A HCI_WRITE_SECURE_CONNECTIONS_HOST_SUPPORT
+0x7B HCI_READ_AUTHENTICATED_PAYLOAD_TIMEOUT
+0x7C HCI_WRITE_AUTHENTICATED_PAYLOAD_TIMEOUT
+0x7D HCI_READ_LOCAL_OOB_EXTENDED_DATA
+0x7E HCI_READ_EXTENDED_PAGE_TIMEOUT
+0x7F HCI_WRITE_EXTENDED_PAGE_TIMEOUT
+0x80 HCI_READ_EXTENDED_INQUIRY_LENGTH
+0x81 HCI_WRITE_EXTENDED_INQUIRY_LENGTH
+)
+
+
+// HCI informational parameters OCF values, OGF=4
+(
+0x01 HCI_READ_LOCAL_VERSION_INFORMATION 
+0x02 HCI_READ_LOCAL_SUPPORTED_COMMANDS
+0x03 HCI_READ_LOCAL_SUPPORTED_FEATURES 
+0x04 HCI_READ_LOCAL_EXT_FEATURES 
+0x05 HCI_READ_BUFFER_SIZE 
+0x07 HCI_READ_COUNTRY_CODE 
+0x09 HCI_READ_BD_ADDR 
+0x0A HCI_REJECT_CONNECTION_REQUEST
+0x0B HCI_READ_LOCAL_SUPPORTED_CODECS
+)
+
+// HCI status parameters OCF values, OGF=5
+(
+0x01 HCI_READ_FAILED_CONTACT_COUNTER 
+0x02 HCI_RESET_FAILED_CONTACT_COUNTER 
+0x03 HCI_GET_LINK_QUALITY 
+0x05 HCI_READ_RSSI 
+0x06 HCI_READ_AFH_CHANNEL_MAP
+0x07 HCI_READ_BD_CLOCK
+0x08 HCI_READ_ENCRYPTION_KEY_SIZE
+0x09 HCI_READ_LOCAL_AMP_INFO
+0x0A HCI_READ_LOCAL_AMP_ASSOC
+0x0B HCI_WRITE_REMOTE_AMP_ASSOC
+0x0C HCI_GET_MWS_TRANSPORT_LAYER_CONFIGURATION
+0x0D HCI_SET_TRIGGERED_CLOCK_CAPTURE
+)
+
+// HCI testing command OCF values, OGF=6
+(
+0x01 HCI_READ_LOOPBACK_MODE 
+0x02 HCI_WRITE_LOOPBACK_MODE 
+0x03 HCI_ENABLE_DEVICE_UNDER_TEST_MODE 
+0x04 HCI_WRITE_SIMPLE_PAIRING_DEBUG_MODE
+0x07 HCI_ENABLE_AMP_RECEIVER_REPORTS
+0x08 HCI_AMP_TEST_END
+0x09 HCI_AMP_TEST
+0x0A HCI_WRITE_SECURE_CONNECTIONS_TEST_MODE
+)
+
+// HCI vendor specific command OCF values -OGF=3F
+(
+0x01 HCI_WRITE_BD_ADDR 
+0x02 HCI_READ_INQUIRY_RESPONSE_TIMEOUT 
+0x03 HCI_WRITE_INQUIRY_RESPONSE_TIMEOUT 
+0x04 HCI_READ_PAGE_SCAN_REPETITION_MODE 
+0x05 HCI_WRITE_PAGE_SCAN_REPETITION_MODE 
+0x06 HCI_READ_PAGE_RESPONSE_TIMEOUT 
+0x07 HCI_WRITE_PAGE_RESPONSE_TIMEOUT 
+0x08 HCI_READ_NEW_CONNECTION_TIMEOUT 
+0x09 HCI_WRITE_NEW_CONNECTION_TIMEOUT 
+0x0a HCI_INITIALIZE_BASEBAND 
+0x0b HCI_WRITE_LOCAL_SUPPORTED_FEATURES 
+0x0c HCI_WRITE_PARK_PARAMETERS 
+0x0d HCI_READ_PARK_PARAMETERS 
+0x0e HCI_WRITE_QUALITY_OF_SERVICE 
+0x0f HCI_NOT_USED 
+0x10 HCI_MODIFY_BEACON_PARAMETERS 
+0x11 HCI_UNPARK_USING_PM_ADDR 
+0x12 HCI_WRITE_HOPPING_CHANNELS 
+0x13 HCI_SLEEP_FOREVER_MODE 
+0x14 HCI_WRITE_AUTO_PAGE_SCAN_ENABLE 
+0x15 HCI_READ_AUTO_PAGE_SCAN_ENABLE 
+0x16 HCI_SET_ENCRYPTION_KEY_SIZE 
+0x17 HCI_INVALIDATE_FLASH_AND_REBOOT 
+0x18 HCI_UPDATE_UART_BAUD_RATE 
+0x19 HCI_WRITE_GPIO_1_4_AS_OUTPUT 
+0x1A HCI_WRITE_GPIO_2_LED 
+0x1B HCI_SET_TESTMODE_TYPE 
+0x1C HCI_WRITE_SCO_PCM_INT_PARAM 
+0x1D HCI_READ_SCO_PCM_INT_PARAM 
+0x1E HCI_WRITE_PCM_DATA_FORMAT_PARAM 
+0x1F HCI_READ_PCM_DATA_FORMAT_PARAM 
+0x20 HCI_WRITE_COMFORT_NOISE_PARAM 
+0x21 HCI_READ_COMFORT_NOISE_PARAM 
+0x22 HCI_WRITE_SCO_TS 
+0x23 HCI_READ_SCO_TS 
+0x24 HCI_WRITE_PCM_LOOPBACK_MODE 
+0x25 HCI_READ_PCM_LOOPBACK_MODE 
+0x26 HCI_SET_TRANSMIT_POWER 
+0x27 HCI_SET_SLEEPMODE_PARAM 
+0x28 HCI_READ_SLEEPMODE_PARAM 
+0x29 HCI_SLEEPMODE_CMD 
+0x2A HCI_DELAY_PERIPHERAL_SCO_STARTUP 
+0x2B HCI_WRITE_RECEIVE_ONLY 
+0x2C HCI_WRITE_RATE_CONTROL 
+0x2D HCI_TX_UNMOD_CARRIER 
+0x2E HCI_DOWNLOAD_MINIDRIVER 
+0x2F HCI_CRYSTAL_PPM 
+0x30 HCI_SET_POWER_AMP_BIAS 
+0x31 HCI_SET_HAM_BEHAVIOR 
+0x32 HCI_SET_AFH_BEHAVIOR 
+0x33 HCI_READ_USER_DEFINED_NVRAM 
+0x34 HCI_ENABLE_RADIO 
+0x35 HCI_READ_DIAGNOSTIC_INFO 
+0x36 HCI_GET_HID_DEVICE_LIST 
+0x37 HCI_ADD_HID_DEVICE 
+0x38 HCI_READ_APP_FW_CONFIG_VERSION 
+0x39 HCI_DELETE_HID_DEVICE 
+0x3B HCI_ENABLE_USB_HID_EMULATION 
+// 0x3A available
+// 0x3B available
+0x3C HCI_SEND_LMPDU 
+0x3D HCI_AUTO_PAIR_REQ 
+0x3E HCI_READ_VS_EXTENSION 
+0x3F HCI_WRITE_VS_EXTENSION 
+
+0x77 HCI_OPCODE_FC77
+0x79 HCI_OPCODE_FC79
+0xC4 HCI_DOWNLOAD_PATCH
+0xCC HCI_OPCODE_FCCC
+
+0x00 HCI_VENDOR_CMD_RESET
+0x01 HCI_VENDOR_CMD_CHIPID
+0x02 HCI_VENDOR_CMD_BAUD
+0x03 HCI_VENDOR_CMD_PATCH
+0x04 HCI_VENDOR_CMD_PATCH_DONE
+0x05 HCI_VENDOR_CMD_ECHO
+0x06 HCI_VENDOR_CMD_BDADDR
+
+0x07 HCI_VENDOR_CMD_ENTER_LPM
+0x08 HCI_VENDOR_CMD_COMMU_READY
+
+0x10 HCI_VENDOR_CMD_MEM
+0x11 HCI_VENDOR_CMD_EEP
+
+0X12 HCI_VENDOR_CMD_PATCH_SEC_INIT
+0X13 HCI_VENDOR_CMD_PATCH_SEC
+0x14 HCI_VENDOR_CMD_SET_FLOW_CONTROL
+)
+
+//HCI LE controller command OCF values, OGF=8
+(
+0x01 HCI_LE_SET_EVENT_MASK
+0x02 HCI_LE_READ_BUFFER_SIZE
+0x03 HCI_LE_READ_LOCAL_SUPPORTED_FEATURES
+0x05 HCI_LE_SET_RANDOM_ADDRESS
+0x06 HCI_LE_SET_ADVERTISING_PARAMETERS
+0x07 HCI_LE_READ_ADVERTISING_CHANNEL_TX_POWER
+0x08 HCI_LE_SET_ADVERTISING_DATA
+0x09 HCI_LE_SET_SCAN_RESPONSE_DATA
+0x0A HCI_LE_SET_ADVERTISE_ENABLE
+0x0B HCI_LE_SET_SCAN_PARAMETERS
+0x0C HCI_LE_SET_SCAN_ENABLE
+0x0D HCI_LE_CREATE_CONNECTION
+0x0E HCI_LE_CREATE_CONNECTION_CANCEL
+0x0F HCI_LE_READ_WHITE_LIST_SIZE
+0x10 HCI_LE_CLEAR_WHITE_LIST
+0x11 HCI_LE_ADD_DEVICE_TO_WHITE_LIST
+0x12 HCI_LE_REMOVE_DEVICE_FROM_WHITE_LIST
+0x13 HCI_LE_CONNECTION_UPDATE
+0x14 HCI_LE_SET_HOST_CHANNEL_CLASSIFICATION
+0x15 HCI_LE_READ_CHANNEL_MAP
+0x16 HCI_LE_READ_REMOTE_USED_FEATURES
+0x17 HCI_LE_ENCRYPT
+0x18 HCI_LE_RAND
+0x19 HCI_LE_START_ENCRYPTION
+0x1A HCI_LE_LONG_TERM_KEY_REQUEST_REPLY
+0x1B HCI_LE_LONG_TERM_KEY_REQUEST_NEGATIVE_REPLY
+0x1C HCI_LE_READ_SUPPORTED_STATES
+0x1D HCI_LE_RECEIVER_TEST
+0x1E HCI_LE_TRANSMITTER_TEST
+0x1F HCI_LE_TEST_END
+0x20 HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_REPLY
+0x21 HCI_LE_REMOTE_CONNECTION_PARAMETER_REQUEST_NEGATIVE_REPLY
+)
+// HCI event code
+(
+0x01 HCI_EVENT_INQUIRY_COMPLETE
+0x02 HCI_EVENT_INQUIRY_RESULT
+0x03 HCI_EVENT_CONNECTION_COMPLETE
+0x04 HCI_EVENT_CONNECTION_REQUEST
+0x05 HCI_EVENT_DISCONNECTION_COMPLETE
+0x06 HCI_EVENT_AUTHENTICATION_COMPLETE
+0x07 HCI_EVENT_REMOTE_NAME_REQUEST_COMPLETE
+0x08 HCI_EVENT_ENCRYPTION_CHANGE_COMPLETE
+0x09 HCI_EVENT_CHANGE_CONNECTION_LINK_KEY_COMPLETE
+0x0A HCI_EVENT_MASTER_LINK_KEY_COMPLETE
+0x0B HCI_EVENT_READ_REMOTE_FEATURES_COMPLETE
+0x0C HCI_EVENT_READ_REMOTE_VERSION_INFORMATION_COMPLETE
+0x0D HCI_EVENT_QOS_SETUP_COMPLETE
+0x0E HCI_EVENT_COMMAND_COMPLETE
+0x0F HCI_EVENT_COMMAND_STATUS
+0x10 HCI_EVENT_HARDWARE_ERROR
+0x11 HCI_EVENT_FLUSH_OCCURRED
+0x12 HCI_EVENT_ROLE_CHANGE
+0x13 HCI_EVENT_NUM_COMPLETED_PACKETS
+0x14 HCI_EVENT_MODE_CHANGE
+0x15 HCI_EVENT_RETURN_LINK_KEYS
+0x16 HCI_EVENT_PIN_CODE_REQUEST
+0x17 HCI_EVENT_LINK_KEY_REQUEST
+0x18 HCI_EVENT_LINK_KEY_NOTIFICATION
+0x19 HCI_EVENT_LOOPBACK_COMMAND
+0x1A HCI_EVENT_DATA_BUFFER_OVERFLOW
+0x1B HCI_EVENT_MAX_SLOTS_CHANGE
+0x1C HCI_EVENT_READ_CLOCK_OFFSET_COMPLETE
+0x1D HCI_EVENT_CONNECTION_PACKET_TYPE_CHANGED
+0x1E HCI_EVENT_QOS_VIOLATION
+0x1F HCI_EVENT_PAGE_SCAN_MODE_CHANGE
+0x20 HCI_EVENT_PAGE_SCAN_REPETITION_MODE_CHANGE
+0x21 HCI_EVENT_FLOW_SPECIFICATION_COMPLETE
+0x22 HCI_EVENT_INQUIRY_RESULT_WITHRSSI
+0x23 HCI_EVENT_READ_REMOTE_EXT_FEATURES_COMPLETE
+0x2C HCI_EVENT_SCO_CONNECTION_COMPLETE
+0x2D HCI_EVENT_SCO_CONNECTION_CHANGED
+0x2E HCI_EVENT_SNIFF_SUBRATING
+0x2F HCI_EVENT_EXT_INQUIRY_RESULT
+0x30 HCI_EVENT_ENCRYPT_KEY_REFRESH_COMPLETE
+0x31 HCI_EVENT_IO_CAP_REQ
+0x32 HCI_EVENT_IO_CAP_RESPONSE
+0x33 HCI_EVENT_USER_CONFIRMATION_REQUEST
+0x34 HCI_EVENT_UESR_PASSKEY_REQUEST
+0x35 HCI_EVENT_REMOTE_OOB_DATA_REQUEST
+0x36 HCI_EVENT_SIMPLE_PAIRING_COMPLETE
+0x38 HCI_EVENT_LINK_SUPERVISION_TIMEOUT_CHANGED
+0x39 HCI_EVENT_ENHANCED_FLUSH_COMPLETE
+0x3B HCI_EVENT_USER_PASSKEY_NOTIFICATION
+0x3C HCI_EVENT_KEYPRESS_NOTIFICATION
+0x3D HCI_EVENT_REMOTE_HOST_SUPPORTED_FEATURES_NOTIFICATION 
+0x3E HCI_EVENT_LE_META_EVENT
+0x40 HCI_EVENT_PHYSICAL_LINK_COMPLETE
+0x41 HCI_EVENT_CHANNEL_SELECTED
+0x42 HCI_EVENT_DISCONNECTION_PHYSICAL_LINK_COMPLETE
+0x43 HCI_EVENT_PHYSICAL_LINK_LOSS_EARLY_WARNING
+0x44 HCI_EVENT_PHYSICAL_LINK_RECOVERY
+0x45 HCI_EVENT_LOGICAL_LINK_COMPLETE
+0x46 HCI_EVENT_DISCONNECTION_LOGICAL_LINK_COMPLETE
+0x47 HCI_EVENT_FLOW_SPEC_MODIFY_COMPLETE
+0x48 HCI_EVENT_NUMBER_OF_COMPLETED_DATA_BLOCKS
+0x49 HCI_EVENT_AMP_START_TEST
+0x4A HCI_EVENT_AMP_TEST_END
+0x4B HCI_EVENT_AMP_RECEIVER_REPORT
+0x4C HCI_EVENT_SHORT_RANGE_MODE_CHANGE_COMPLETE
+0x4D HCI_EVENT_AMP_STATUS_CHANGE
+0x4E HCI_EVENT_TRIGGERED_CLOCK_CAPTURE
+0x4F HCI_EVENT_SYNCHRONIZATION_TRAIN_COMPLETE
+0x50 HCI_EVENT_SYNCHRONIZATION_TRAIN_RECEIVED
+0x51 HCI_EVENT_CONNECTIONLESS_SLAVE_BROADCAST_RECEIVE
+0x52 HCI_EVENT_CONNECTIONLESS_SLAVE_BROADCAST_TIMEOUT
+0x53 HCI_EVENT_TRUNCATED_PAGE_COMPLETE
+0x54 HCI_EVENT_SLAVE_PAGE_RESPONSE_TIMEOUT
+0x55 HCI_EVENT_CONNECTIONLESS_SLAVE_BROADCAST_CHANNEL_MAP_CHANGE
+0x56 HCI_EVENT_INQUIRY_RESPONSE_NOTIFICATION
+0x57 HCI_EVENT_AUTHENTICATED_PAYLOAD_TIMEOUT_EXPIRED
+
+0xFE HCI_EVENT_LOGO_TESTING
+0xFF HCI_EVENT_VENDOR_SPECIFIC
+)
+(
+0x01 HCI_VENDOR_EVENT_COMMU_READY
+)
+//HCI LE SUBEVENT CODE
+(
+0x01 HCI_LE_SUBEVENT_CONN_COMPLETE
+0x02 HCI_LE_SUBEVENT_ADV_REPORT
+0x03 HCI_LE_SUBEVENT_CONN_UPDATE_COMPLETE
+0x04 HCI_LE_SUBEVENT_REMOTE_FEATURE_COMPLETE
+0x05 HCI_LE_SUBEVENT_LTK_REQUEST
+0x06 HCI_LE_SUBEVENT_REMOTE_CONN_PARAM_REQ
+)
+
Index: format/hid.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/hid.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/hid.format	(working copy)
@@ -0,0 +1,228 @@
+
+//dpi eeprom addr
+xmemalloc g24_tx_hid(
+
+// adc
+//adc struct
+0 mem_device_vdd_calculate_set
+2 mem_device_vdd_full_vol
+2 mem_device_vdd_empty_vol
+2 mem_device_vdd_low_vol
+2 mem_device_vdd_now_vol
+1 mem_adc_channel_gpio
+1 mem_adc_low_volatage_led_timer_count
+1 mem_device_adc_last_low_voltage_flag
+2 mem_device_discovery_timeout
+2 mem_device_24g_pair_timeout_init
+1 mem_device_direct_timeout
+1 mem_device_24g_reconn_timeout_init
+1 mem_device_24g_pair_tx_power
+1 mem_device_normal_tx_power
+1 mem_rssi_dis_min_24g_init
+1 mem_rssi_dis_max_24g_init
+1 mem_rssi_hex_received_max_value_init
+1 mem_rssi_dis_min_ble_init
+1 mem_rssi_dis_max_ble_init
+
+1 mem_mouse_key
+2 mem_mouse_x
+2 mem_mouse_y
+1 mem_mouse_z
+1 mem_mouse_tz
+1 mem_mouse_xy_h
+1 mem_mouse_key_last
+
+1 mem_device_switch_gpio
+1 mem_device_reuse_2ice_gpio
+1 mem_sensor_motion_gpio
+
+//mouse wheel
+1 mem_whee_a_data_gpio
+1 mem_whee_b_data_gpio
+1 mem_wheel_tb_old_pinlevel
+1 mem_wheel_tb_new_pinlevel
+1 mem_wheel_tog 
+1 mem_mouse_tz_data
+1 mem_mwheel_b_old_pinlevel
+1 mem_mwheel_b_new_pinlevel
+1 mem_mwheel_tog 
+1 mem_mouse_z_data
+1 mem_mouse_wheel_trigger
+1 mem_mouse_wheel_trigger_timer
+
+// usb
+1 mem_wire_usb_interval
+1 mem_usb_addr
+1 mem_usb_vdd_status
+1 mem_usb_keyboard_flag
+
+//three devices param
+//eeprom/flash
+0 mem_device_information_start
+1 mem_device_flag
+1 mem_device1_type
+6 mem_device1_addr
+6 mem_device1_locall_addr
+
+1 mem_device2_type
+6 mem_device2_addr
+6 mem_device2_locall_addr
+
+1 mem_device3_type
+6 mem_device3_addr
+6 mem_device3_locall_addr
+2 mem_store_flag
+1 mem_mouse_dpi
+4 mem_device_24g_addr
+2 mem_random_addr_increase_count
+
+1 mem_keyboard_24g_fn_lock
+1 mem_keyboard_bt1_fn_lock
+1 mem_keyboard_bt2_fn_lock
+1 mem_keyboard_bt3_fn_lock
+1 mem_keyboard_usb_fn_lock
+1 mem_keyboard_bt1_computer_system
+1 mem_keyboard_bt2_computer_system
+1 mem_keyboard_bt3_computer_system
+1 mem_backlight_on_flag
+1 mem_backlight_on_type
+1 mem_backlight_on_level
+1 mem_backlight_breath_speed
+67 mem_mouse_retention
+0 mem_device_information_end
+
+6 mem_device_compare_addr
+3 mem_flash_base
+4 mem_write_flash_head_temp
+1 mem_store_information_delay_timer
+1 mem_store_information_delay_timer_init
+
+// 2.4G
+1 mem_device_search_dongle_interval
+1 mem_device_search_dongle_ch
+1 mem_device_search_dongle_count
+1 mem_device_search_dongle_action
+1 mem_24g_enter_lpm_timer
+1 mem_mouse_24g_enter_lpm_enable
+1 mem_keyboard_led_status
+
+
+// mouse configured param
+8 mem_mouse_flag 
+1 mem_device_number
+1 mem_device_flag_temp
+1 mem_device_otp_flag_temp
+1 mem_device_fast_direct_timeout
+2 mem_device_24g_power_on_fast_conn_timer
+2 mem_device_24g_search_dongle_time_init
+2 mem_device_no_data_timeout
+1 mem_device_direct_timer
+
+10 mem_customer_key_press
+1 mem_customer_key
+1 mem_customer_data_trigger
+1 mem_customer_data_trigger_last
+3 mem_device_set_analog_bit_set
+1 mem_bt_discovery_count
+1 mem_select_device_count
+1 mem_mouse_commbination_key
+1 mem_select_device_button_statue
+1 mem_commbination_key_statue
+1 mem_combination_ui_button_count
+
+
+1 mem_24g_shutdown_flag
+1 mem_24g_long_sleep_set_level
+
+2 mem_tx_power_factory_param
+
+1 mem_mouse_24g_long_sleep_flag
+
+//no motion pin
+1 mem_mouse_long_mult_count
+1 mem_mouse_long_mult_flag
+1 mem_mouse_current_mult_timer
+
+1 mem_reconn_times
+1 mem_reconn_times_init
+2 mem_device_no_data_timer
+8 mem_mouse_rssi_signal_buf				
+4 mem_btclk_sensor
+1 mem_device_fast_conn_flag
+2 mem_device_discovery_timer
+1 mem_device_need_soft_reset
+
+// le
+1 mem_device_le_bb_connected_flag
+1 mem_device_le_reconnect_flag
+1 mem_device_send_secutiry_request_timer
+
+3 mem_device_le_lap_temp
+3 mem_le_adv_ind
+3 mem_le_adv_direct_ind
+20 mem_le_adv_swift_pair
+1 mem_le_data_len
+2 mem_le_keyboard_handle
+2 mem_le_multimedia_handle
+2 mem_le_systemctrl_handle
+2 mem_le_battery_level_handle
+1 mem_le_battery_level_percentage
+2 mem_le_battery_level_updata_timer_init
+2 mem_le_battery_level_updata_timer
+1 mem_le_conn_param_reject
+64 mem_le_tx_buffer0_omemalloc
+0 mem_le_tx_buffer1_omemalloc
+0 mem_le_tx_buffer2_omemalloc
+0 mem_le_tx_buffer3_omemalloc
+//g24 buff
+0 mem_le_rx_buffer
+70 mem_24g_txbuf_new
+75 mem_24g_txpayload_new
+//auth info
+7 mem_ms_auth_appkey
+16 mem_ms_auth_secret
+6 msm_ms_auth_sn
+2 mem_ms_auth_chip_id
+1 mem_ms_version
+8 mem_ms_recv_ackpayload_temp
+//type
+2 mem_ms_tx_pro_key_flag
+1 mem_ms_tx_pro_key_val
+2 mem_ms_long_press_key_index
+2 mem_ms_tx_nor_pro_data_flag
+//rom
+1 mem_le_connect_status_flag
+1 mem_le_start_encrypt_timer
+7 mem_device_addr_temp
+1 mem_lpm_mult_init
+1 mem_qdec_set_flag
+//patch area
+)
+
+
+(
+0 G24_DISCONN_STATE
+1 G24_CONN_STATE
+
+8 G24_CH_NUMBER
+16 G24_CH_POLL_COUNT
+
+0x20 MOUSE_BLE_L2CAP_TXBUFF_SIZE
+
+0x5a USB_INTERFACE_INSERT
+0xa5 USB_INTERFACE_REMOVE
+
+
+10 LE_LPM_DISABLE_TO
+1 LE_LPM_DISABLE
+0 LE_LPM_ENABLE
+
+12 LE_INTERVAL_15MS
+9 LE_INTERVAL_11_25MS//11.25ms
+7 LE_INTERVAL_8_75MS//8.75ms
+6 LE_INTERVAL_7_5MS//7.5ms
+12 CLASSIC_INTERVAL_7_5MS
+14 CLASSIC_INTERVAL_8_75MS
+18 CLASSIC_INTERVAL_11_25MS
+
+)
\ No newline at end of file
Index: format/l2cap.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/l2cap.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/l2cap.format	(working copy)
@@ -0,0 +1,40 @@
+
+
+
+xmemalloc(
+0 mem_l2cap_xmem_start
+
+//*******************L2CAP malloc********************//
+1 mem_used_map
+0 mem_tx_fifo0
+1 mem_tx_fifo0_map
+2 mem_tx_fifo0_ptr
+0 mem_tx_fifo1
+1 mem_tx_fifo1_map
+2 mem_tx_fifo1_ptr
+0 mem_tx_fifo2
+1 mem_tx_fifo2_map
+2 mem_tx_fifo2_ptr
+0 mem_tx_fifo3
+1 mem_tx_fifo3_map
+2 mem_tx_fifo3_ptr
+0 mem_tx_fifo_end
+
+2 mem_l2cap_lpm_txbuf_ptr
+0 mem_l2cap_xmem_end
+
+)
+
+
+//mem_l2cap_lpm_txbuf
+(
+256 l2cap_lpm_txbuf_len
+)
+
+(
+4 L2CAP_TX_FIFO_SIZE
+8 L2CAP_TX_BUFF_CNT
+
+)
+
+
Index: format/memblocks.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/memblocks.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/memblocks.format	(working copy)
@@ -0,0 +1,40 @@
+//
+//
+//Large memory blocks defined in this file.
+//Blocks Shall be defined with absolute address.
+//Blocks' length Shall be specified in comment following Blocks' names.
+//Different blocks MAY be overlap.
+//Blocks defined in this file Shall NOT be overlap with variable in memmap.format.
+
+
+(
+0xf00 mem_dcoc_buf
+0xff0 mem_dcoc_buf_end
+)
+
+
+//l2cap RX buffers
+(
+0xf00 mem_le_l2cap_buf		//0x100
+)
+
+//l2cap TX buffers
+(
+0xd00 mem_ble_tx_buff0
+0x60 mem_ble_l2cap_tx_buff_size
+)
+
+
+//uart buffer
+(
+0xc00 mem_h5rx_buf//0x400
+0xeff mem_h5rx_buf_end
+0xf00 mem_h5tx_buf
+0xfff mem_h5tx_buf_end
+)
+
+
+(
+0x4c00 mem_savelist
+)
+
Index: format/patch.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/patch.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/patch.format	(working copy)
@@ -0,0 +1,516 @@
+
+(
+	  0 patch00_0
+	  1 patch00_1
+	  2 patch00_2
+	  3 patch00_3
+	  4 patch00_4
+	  5 patch00_5
+	  6 patch00_6
+	  7 patch00_7
+	  8 patch01_0
+	  9 patch01_1
+	 10 patch01_2
+	 11 patch01_3
+	 12 patch01_4
+	 13 patch01_5
+	 14 patch01_6
+	 15 patch01_7
+	 16 patch02_0
+	 17 patch02_1
+	 18 patch02_2
+	 19 patch02_3
+	 20 patch02_4
+	 21 patch02_5
+	 22 patch02_6
+	 23 patch02_7
+	 24 patch03_0
+	 25 patch03_1
+	 26 patch03_2
+	 27 patch03_3
+	 28 patch03_4
+	 29 patch03_5
+	 30 patch03_6
+	 31 patch03_7
+	 32 patch04_0
+	 33 patch04_1
+	 34 patch04_2
+	 35 patch04_3
+	 36 patch04_4
+	 37 patch04_5
+	 38 patch04_6
+	 39 patch04_7
+	 40 patch05_0
+	 41 patch05_1
+	 42 patch05_2
+	 43 patch05_3
+	 44 patch05_4
+	 45 patch05_5
+	 46 patch05_6
+	 47 patch05_7
+	 48 patch06_0
+	 49 patch06_1
+	 50 patch06_2
+	 51 patch06_3
+	 52 patch06_4
+	 53 patch06_5
+	 54 patch06_6
+	 55 patch06_7
+	 56 patch07_0
+	 57 patch07_1
+	 58 patch07_2
+	 59 patch07_3
+	 60 patch07_4
+	 61 patch07_5
+	 62 patch07_6
+	 63 patch07_7
+	 64 patch08_0
+	 65 patch08_1
+	 66 patch08_2
+	 67 patch08_3
+	 68 patch08_4
+	 69 patch08_5
+	 70 patch08_6
+	 71 patch08_7
+	 72 patch09_0
+	 73 patch09_1
+	 74 patch09_2
+	 75 patch09_3
+	 76 patch09_4
+	 77 patch09_5
+	 78 patch09_6
+	 79 patch09_7
+	 80 patch0a_0
+	 81 patch0a_1
+	 82 patch0a_2
+	 83 patch0a_3
+	 84 patch0a_4
+	 85 patch0a_5
+	 86 patch0a_6
+	 87 patch0a_7
+	 88 patch0b_0
+	 89 patch0b_1
+	 90 patch0b_2
+	 91 patch0b_3
+	 92 patch0b_4
+	 93 patch0b_5
+	 94 patch0b_6
+	 95 patch0b_7
+	 96 patch0c_0
+	 97 patch0c_1
+	 98 patch0c_2
+	 99 patch0c_3
+	100 patch0c_4
+	101 patch0c_5
+	102 patch0c_6
+	103 patch0c_7
+	104 patch0d_0
+	105 patch0d_1
+	106 patch0d_2
+	107 patch0d_3
+	108 patch0d_4
+	109 patch0d_5
+	110 patch0d_6
+	111 patch0d_7
+	112 patch0e_0
+	113 patch0e_1
+	114 patch0e_2
+	115 patch0e_3
+	116 patch0e_4
+	117 patch0e_5
+	118 patch0e_6
+	119 patch0e_7
+	120 patch0f_0
+	121 patch0f_1
+	122 patch0f_2
+	123 patch0f_3
+	124 patch0f_4
+	125 patch0f_5
+	126 patch0f_6
+	127 patch0f_7
+	128 patch10_0
+	129 patch10_1
+	130 patch10_2
+	131 patch10_3
+	132 patch10_4
+	133 patch10_5
+	134 patch10_6
+	135 patch10_7
+	136 patch11_0
+	137 patch11_1
+	138 patch11_2
+	139 patch11_3
+	140 patch11_4
+	141 patch11_5
+	142 patch11_6
+	143 patch11_7
+	144 patch12_0
+	145 patch12_1
+	146 patch12_2
+	147 patch12_3
+	148 patch12_4
+	149 patch12_5
+	150 patch12_6
+	151 patch12_7
+	152 patch13_0
+	153 patch13_1
+	154 patch13_2
+	155 patch13_3
+	156 patch13_4
+	157 patch13_5
+	158 patch13_6
+	159 patch13_7
+	160 patch14_0
+	161 patch14_1
+	162 patch14_2
+	163 patch14_3
+	164 patch14_4
+	165 patch14_5
+	166 patch14_6
+	167 patch14_7
+	168 patch15_0
+	169 patch15_1
+	170 patch15_2
+	171 patch15_3
+	172 patch15_4
+	173 patch15_5
+	174 patch15_6
+	175 patch15_7
+	176 patch16_0
+	177 patch16_1
+	178 patch16_2
+	179 patch16_3
+	180 patch16_4
+	181 patch16_5
+	182 patch16_6
+	183 patch16_7
+	184 patch17_0
+	185 patch17_1
+	186 patch17_2
+	187 patch17_3
+	188 patch17_4
+	189 patch17_5
+	190 patch17_6
+	191 patch17_7
+	192 patch18_0
+	193 patch18_1
+	194 patch18_2
+	195 patch18_3
+	196 patch18_4
+	197 patch18_5
+	198 patch18_6
+	199 patch18_7
+	200 patch19_0
+	201 patch19_1
+	202 patch19_2
+	203 patch19_3
+	204 patch19_4
+	205 patch19_5
+	206 patch19_6
+	207 patch19_7
+	208 patch1a_0
+	209 patch1a_1
+	210 patch1a_2
+	211 patch1a_3
+	212 patch1a_4
+	213 patch1a_5
+	214 patch1a_6
+	215 patch1a_7
+	216 patch1b_0
+	217 patch1b_1
+	218 patch1b_2
+	219 patch1b_3
+	220 patch1b_4
+	221 patch1b_5
+	222 patch1b_6
+	223 patch1b_7
+	224 patch1c_0
+	225 patch1c_1
+	226 patch1c_2
+	227 patch1c_3
+	228 patch1c_4
+	229 patch1c_5
+	230 patch1c_6
+	231 patch1c_7
+	232 patch1d_0
+	233 patch1d_1
+	234 patch1d_2
+	235 patch1d_3
+	236 patch1d_4
+	237 patch1d_5
+	238 patch1d_6
+	239 patch1d_7
+	240 patch1e_0
+	241 patch1e_1
+	242 patch1e_2
+	243 patch1e_3
+	244 patch1e_4
+	245 patch1e_5
+	246 patch1e_6
+	247 patch1e_7
+	248 patch1f_0
+	249 patch1f_1
+	250 patch1f_2
+	251 patch1f_3
+	252 patch1f_4
+	253 patch1f_5
+	254 patch1f_6
+	255 patch1f_7
+	  0 patch20_0
+	  1 patch20_1
+	  2 patch20_2
+	  3 patch20_3
+	  4 patch20_4
+	  5 patch20_5
+	  6 patch20_6
+	  7 patch20_7
+	  8 patch21_0
+	  9 patch21_1
+	 10 patch21_2
+	 11 patch21_3
+	 12 patch21_4
+	 13 patch21_5
+	 14 patch21_6
+	 15 patch21_7
+	 16 patch22_0
+	 17 patch22_1
+	 18 patch22_2
+	 19 patch22_3
+	 20 patch22_4
+	 21 patch22_5
+	 22 patch22_6
+	 23 patch22_7
+	 24 patch23_0
+	 25 patch23_1
+	 26 patch23_2
+	 27 patch23_3
+	 28 patch23_4
+	 29 patch23_5
+	 30 patch23_6
+	 31 patch23_7
+	 32 patch24_0
+	 33 patch24_1
+	 34 patch24_2
+	 35 patch24_3
+	 36 patch24_4
+	 37 patch24_5
+	 38 patch24_6
+	 39 patch24_7
+	 40 patch25_0
+	 41 patch25_1
+	 42 patch25_2
+	 43 patch25_3
+	 44 patch25_4
+	 45 patch25_5
+	 46 patch25_6
+	 47 patch25_7
+	 48 patch26_0
+	 49 patch26_1
+	 50 patch26_2
+	 51 patch26_3
+	 52 patch26_4
+	 53 patch26_5
+	 54 patch26_6
+	 55 patch26_7
+	 56 patch27_0
+	 57 patch27_1
+	 58 patch27_2
+	 59 patch27_3
+	 60 patch27_4
+	 61 patch27_5
+	 62 patch27_6
+	 63 patch27_7
+	 64 patch28_0
+	 65 patch28_1
+	 66 patch28_2
+	 67 patch28_3
+	 68 patch28_4
+	 69 patch28_5
+	 70 patch28_6
+	 71 patch28_7
+	 72 patch29_0
+	 73 patch29_1
+	 74 patch29_2
+	 75 patch29_3
+	 76 patch29_4
+	 77 patch29_5
+	 78 patch29_6
+	 79 patch29_7
+	 80 patch2a_0
+	 81 patch2a_1
+	 82 patch2a_2
+	 83 patch2a_3
+	 84 patch2a_4
+	 85 patch2a_5
+	 86 patch2a_6
+	 87 patch2a_7
+	 88 patch2b_0
+	 89 patch2b_1
+	 90 patch2b_2
+	 91 patch2b_3
+	 92 patch2b_4
+	 93 patch2b_5
+	 94 patch2b_6
+	 95 patch2b_7
+	 96 patch2c_0
+	 97 patch2c_1
+	 98 patch2c_2
+	 99 patch2c_3
+	100 patch2c_4
+	101 patch2c_5
+	102 patch2c_6
+	103 patch2c_7
+	104 patch2d_0
+	105 patch2d_1
+	106 patch2d_2
+	107 patch2d_3
+	108 patch2d_4
+	109 patch2d_5
+	110 patch2d_6
+	111 patch2d_7
+	112 patch2e_0
+	113 patch2e_1
+	114 patch2e_2
+	115 patch2e_3
+	116 patch2e_4
+	117 patch2e_5
+	118 patch2e_6
+	119 patch2e_7
+	120 patch2f_0
+	121 patch2f_1
+	122 patch2f_2
+	123 patch2f_3
+	124 patch2f_4
+	125 patch2f_5
+	126 patch2f_6
+	127 patch2f_7
+	128 patch30_0
+	129 patch30_1
+	130 patch30_2
+	131 patch30_3
+	132 patch30_4
+	133 patch30_5
+	134 patch30_6
+	135 patch30_7
+	136 patch31_0
+	137 patch31_1
+	138 patch31_2
+	139 patch31_3
+	140 patch31_4
+	141 patch31_5
+	142 patch31_6
+	143 patch31_7
+	144 patch32_0
+	145 patch32_1
+	146 patch32_2
+	147 patch32_3
+	148 patch32_4
+	149 patch32_5
+	150 patch32_6
+	151 patch32_7
+	152 patch33_0
+	153 patch33_1
+	154 patch33_2
+	155 patch33_3
+	156 patch33_4
+	157 patch33_5
+	158 patch33_6
+	159 patch33_7
+	160 patch34_0
+	161 patch34_1
+	162 patch34_2
+	163 patch34_3
+	164 patch34_4
+	165 patch34_5
+	166 patch34_6
+	167 patch34_7
+	168 patch35_0
+	169 patch35_1
+	170 patch35_2
+	171 patch35_3
+	172 patch35_4
+	173 patch35_5
+	174 patch35_6
+	175 patch35_7
+	176 patch36_0
+	177 patch36_1
+	178 patch36_2
+	179 patch36_3
+	180 patch36_4
+	181 patch36_5
+	182 patch36_6
+	183 patch36_7
+	184 patch37_0
+	185 patch37_1
+	186 patch37_2
+	187 patch37_3
+	188 patch37_4
+	189 patch37_5
+	190 patch37_6
+	191 patch37_7
+	192 patch38_0
+	193 patch38_1
+	194 patch38_2
+	195 patch38_3
+	196 patch38_4
+	197 patch38_5
+	198 patch38_6
+	199 patch38_7
+	200 patch39_0
+	201 patch39_1
+	202 patch39_2
+	203 patch39_3
+	204 patch39_4
+	205 patch39_5
+	206 patch39_6
+	207 patch39_7
+	208 patch3a_0
+	209 patch3a_1
+	210 patch3a_2
+	211 patch3a_3
+	212 patch3a_4
+	213 patch3a_5
+	214 patch3a_6
+	215 patch3a_7
+	216 patch3b_0
+	217 patch3b_1
+	218 patch3b_2
+	219 patch3b_3
+	220 patch3b_4
+	221 patch3b_5
+	222 patch3b_6
+	223 patch3b_7
+	224 patch3c_0
+	225 patch3c_1
+	226 patch3c_2
+	227 patch3c_3
+	228 patch3c_4
+	229 patch3c_5
+	230 patch3c_6
+	231 patch3c_7
+	232 patch3d_0
+	233 patch3d_1
+	234 patch3d_2
+	235 patch3d_3
+	236 patch3d_4
+	237 patch3d_5
+	238 patch3d_6
+	239 patch3d_7
+	240 patch3e_0
+	241 patch3e_1
+	242 patch3e_2
+	243 patch3e_3
+	244 patch3e_4
+	245 patch3e_5
+	246 patch3e_6
+	247 patch3e_7
+	248 patch3f_0
+	249 patch3f_1
+	250 patch3f_2
+	251 patch3f_3
+	252 patch3f_4
+	253 patch3f_5
+	254 patch3f_6
+	255 patch3f_7
+
+)
Index: format/regs.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/regs.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/regs.format	(working copy)
@@ -0,0 +1,558 @@
+(
+	0x8000 core_chipid
+	0x8001 core_revid
+	0x8003 core_kick
+	0x8004 core_write_wdt
+	0x8005 core_lpm_wr
+	0x8006 core_misc_ctrl
+	0x8007 core_otp_rdata
+	0x8007 core_efuse_rdata
+	0x800a core_ccm_ctrl
+	0x800b core_write_wdt2
+	0x8010 core_reset
+	0x8011 core_encrypt
+	0x8012 core_lpm_wr2
+	0x8020 core_set_bistfix
+	0x8022 core_ucode_hi
+	0x8023 core_ucode_ctrl
+	0x8024 core_ucode_low
+	0x8025 core_ucode_data
+
+	0x8040 core_halfslot
+	0x8042 core_clksel
+	0x8043 core_uart_clksel
+	0x8043 core_config
+	0x8044 core_otp_addr
+	0x8046 core_otp_din
+	0x8046 core_otp_ctrl2
+	0x8047 core_otp_ctrl
+	0x8047 core_otp_pab
+	0x8048 core_xtal_stable_time
+	0x8049 core_gpio_ds
+	0x804c core_lpm_reg
+	0x8050 core_clkoff
+	0x8052 core_uart_baud
+	0x8054 core_uart_rsaddr
+	0x8056 core_uart_readdr
+	0x8058 core_uart_rrptr
+	0x805a core_uart_tsaddr
+	0x805c core_uart_teaddr
+	0x805e core_uart_twptr
+	0x8060 core_uart_ctrl
+	0x8061 core_nec_ctrl
+	0x8062 core_nec_start_addr
+	0x8064 core_nec_end_addr
+	0x8066 core_nec_rptr
+	0x8068 core_ccm_input_playload_addr
+	0x806a core_ccm_output_playload_addr
+	0x806c core_ccm_aad0
+	0x806d core_ccm_aad1
+	0x806e core_ccm_aad2
+	0x806f  core_bist_ctrl
+	0x8070 core_gpio_conf
+	0x8080 core_spid_ctrl
+	0x8081 core_spid_delay
+	0x8082 core_spid_txlen
+	0x8084 core_spid_txaddr
+	0x8086 core_spid_rxaddr
+	0x8088 core_spid_rxlen
+	0x808a core_iicd_ctrl
+	0x808b core_iicd_scl_low
+	0x808c core_iicd_scl_high
+	0x808d core_iicd_start_setup
+	0x808e core_iicd_start_hold
+	0x808f core_iicd_stop_setup
+	0x8090 core_iicd_data_setup
+	0x8091 core_iicd_data_hold
+	0x8092 core_iicd_txlen
+	0x8094 core_iicd_txaddr
+	0x8096 core_iicd_rxaddr
+	0x8098 core_iicd_rxlen
+	0x809a core_pwm_en
+	0x809b core_pwm_init
+	0x809c core_pwm_pcnt0
+	0x809e core_pwm_ncnt0
+	0x80a0 core_pwm_pcnt1
+	0x80a2 core_pwm_ncnt1
+	0x80a4 core_pwm_pcnt2
+	0x80a6 core_pwm_ncnt2
+	0x80a8 core_pwm_pcnt3
+	0x80aa core_pwm_ncnt3
+	0x80ac core_pwm_pcnt4
+	0x80ae core_pwm_ncnt4
+	0x80b0 core_pwm_pcnt5
+	0x80b2 core_pwm_ncnt5
+	0x80b4 core_pwm_pcnt6
+	0x80b6 core_pwm_ncnt6
+	0x80b8 core_pwm_pcnt7
+	0x80ba core_pwm_ncnt7
+	0x80bc core_pwm_sync
+	0x80bd core_pwm_timermode
+	0x80be core_pwm_autoload
+	0x80bf core_sum_ctrl
+	0x80c0 core_ccm_inptr
+	0x80c2 core_dac_ctrl	
+	0x80c3 core_dac_vol
+	0x80c4 core_dac_saddr
+	0x80c6 core_dac_len
+	0x80c8 core_dac_coef
+	0x80cb core_ccnt_bit
+	0x80cc core_sadc_ctrl
+	0x80cd core_sadc_clkdiv
+	0x80ce core_sadc_saddr
+	0x80d0 core_sadc_eaddr
+	0x80d2 core_keybuf_saddr
+	0x80d4 core_gpio_conf_hi
+
+	0x8100 core_clkn
+	0x8108 core_misc_status
+	0x8109 core_qdec_cntx
+	0x810a core_watchdog_cnt
+	0x810b core_uart_status
+	0x810c core_uart_rbaud
+	0x810e core_uart_txitems
+	0x8110 core_uart_trptr
+	0x8112 core_uart_rxitems
+	0x8114 core_uart_rdptr
+	0x8116 core_uart_rwptr
+	0x8118 core_debug_baud
+	0x811a core_ccm_outptr
+	0x811c core_gpio_in
+	0x811d core_gpio_in1
+	0x811e core_adc_sum
+	0x8120 core_nec_wptr
+	0x8122 core_current_otp_addr
+	0x8122 core_adc_dma_wptr
+	0x8124 core_spid_remain
+	0x8126 core_iicd_remain
+	0x8128 core_dma_status
+	0x8129 core_perf_status
+	0x812a core_adc_in
+	0x812c core_nec_rxitem
+	0x812e core_otpd_remain
+	0x8130 core_lpm_ctrl
+	0x8132 core_lpm_isogate
+	0x8133 core_lpm_ldosel
+	0x8134 core_io_vsel
+	0x8135 core_io_doze_en
+	0x813a core_xtal_cap
+	0x813d core_xtal_ib
+	0x813e core_lpm_xtalcnt
+	0x813f core_lpm_buckcnt
+	0x8140 core_lpm_ldocnt
+	0x8141 core_puwakeup
+	0x8142 core_lpm_sysctl
+	0x8143 core_ucode_flag
+	0x8144 core_peripheral_lock
+	0x8145 core_mpu_s0_saddr
+	0x8147 core_mpu_s0_eaddr
+	0x8149 core_mpu_s1_saddr
+	0x814b core_mpu_s1_eaddr
+	0x814d core_gpio_wakeup_cfg
+	0x8155 core_aes_decode_key_init
+	0x815b core_clk_counter
+	0x815e core_bist_done
+	0x8160 core_bist_fail
+	0x8162 core_dac_rptr	
+	0x8164 core_sadc_data	
+	0x8166 core_rccnt_counter
+		
+	0x8203 core_ice_ctrl
+	0x8204 core_ice_status
+	0x8205 core_ice_break0
+	0x8207 core_ice_break1
+  
+
+	0x8900 modem_en
+	0x8960 core_rf_rx_agc_ctrl
+	0x8961 core_rf_rx_gain_fix
+	0x8968 core_agc_wb_sat_th
+	0x8969 core_agc_nb_sat_th
+	0x89a0 modem_rssi
+	0x89a1 modem_wb_pow
+	0x89a2 modem_nb_pow
+	0x89a3 modem_gain
+	0x89a4 modem_status
+
+	0x8a00 core_bbpll_ctrl0              
+	0x8a01 core_bbpll_ctrl1              
+	0x8a02 core_bbpll_cfg0               
+	0x8a03 core_bbpll_cfg1               
+	0x8a04 core_bbpll_cfg2               
+	0x8a05 core_bbpll_cfg3               
+	0x8a06 core_bbpll_cfg4               
+	0x8a07 core_gpadc_ctrl
+	0x8a08 core_gpadc_cfg0
+	0x8a09 core_gpadc_cfg1
+	0x8a0a core_gpadc_cfg2
+	0x8a0b core_gpadc_cfg3
+	0x8a0c core_gpadc_status
+	0x8a0d core_vtest_ctrl0
+	0x8a0e core_vtest_ctrl1
+	0x8a0f core_ldo_trx_ctrl0
+	0x8a10 core_ldo_trx_ctrl1
+	0x8a11 core_ldo_trx_ctrl2
+	0x8a12 core_ldo_rfpll_ctrl
+    0x8a13 core_ldo_trx_cfg0
+    0x8a14 core_ldo_trx_cfg1
+    0x8a15 core_ldo_trx_cfg2
+    0x8a16 core_ldo_rfpll_mnc_cfg2
+
+    0x8a20 core_rfpll_afc_ctrl0
+    0x8a21 core_rfpll_afc_ctrl1
+    0x8a22 core_rfpll_afc_ctrl2
+    0x8a23 core_rfpll_en_ctrl0
+    0x8a24 core_rfpll_en_ctrl1
+    0x8a25 core_rf_en_ctrl0
+    0x8a26 core_rf_en_ctrl1
+
+	0x8a30 core_rx_force_en_ctrl
+	0x8a31 core_rx_gc_force_val
+	0x8a32 core_rx_lna_isel_force_val
+
+	0x8a40 core_rx_lna_hg_isel_gc7        
+	0x8a41 core_rx_lna_hg_isel_gc6        
+	0x8a42 core_rx_lna_hg_isel_gc5        
+	0x8a43 core_rx_lna_lg_isel_gc4        
+	0x8a44 core_rx_lna_lg_isel_gc3        
+	0x8a45 core_rx_lna_lg_isel_gc2        
+	0x8a46 core_rx_lna_lg_isel_gc1        
+	0x8a47 core_rx_lna_lg_isel_gc0        
+	0x8a48 core_rx_abb_gc_gc8              
+	0x8a49 core_rx_abb_gc_gc7              
+	0x8a4a core_rx_abb_gc_gc6              
+	0x8a4b core_rx_abb_gc_gc5              
+	0x8a4c core_rx_abb_gc_gc4              
+	0x8a4d core_rx_abb_gc_gc3              
+	0x8a4e core_rx_abb_gc_gc2              
+	0x8a4f core_rx_abb_gc_gc1              
+	0x8a50 core_rx_abb_gc_gc0              
+
+	0x8a60 core_tx_ctrl0
+	0x8a61 core_tx_ctrl1
+	0x8a62 core_tx_ctrl2
+	0x8a63 core_tx_ctrl3
+
+	0x8a70 core_rfpll_cal_ctrl0
+	0x8a71 core_rfpll_cal_ctrl1
+	0x8a72 core_rfpll_cal_ctrl2
+	0x8a73 core_rfpll_cal_ctrl3
+	0x8a74 core_rfpll_cal_ctrl4
+	0x8a75 core_rfpll_cal_ctrl5
+	0x8a76 core_rfpll_cal_ctrl6
+	0x8a77 core_rfpll_cal_ctrl7
+	0x8a78 core_rfpll_cal_ctrl8
+	0x8a79 core_rfpll_cal_ctrl9
+	0x8a7a core_rfpll_cal_ctrl10
+	0x8a7b core_rfpll_cal_ctrl11
+	0x8a7c core_rfpll_cal_result0
+	0x8a7d core_rfpll_cal_result1
+	0x8a7e core_rfpll_cal_result2
+
+    0x8a80 core_rfpll_cfg0
+    0x8a81 core_rfpll_cfg1
+    0x8a82 core_rfpll_cfg2
+    0x8a83 core_rfpll_cfg3
+    0x8a84 core_rfpll_cfg4
+    0x8a85 core_rfpll_cfg5
+    0x8a86 core_rfpll_cfg6
+    0x8a87 core_rfpll_cfg7
+
+    0x8a88 core_rx_cfg0
+    0x8a89 core_rx_cfg1
+    0x8a8a core_rx_cfg2
+    0x8a8b core_rx_cfg3
+    0x8a8c core_rx_cfg4
+    0x8a8d core_rx_cfg5
+    0x8a8e core_rx_cfg6
+    0x8a8f core_rx_cfg7
+    0x8a90 core_rx_cfg8
+
+	0x8aa0 core_rx_tiai_dcoc_gc0          
+	0x8aa1 core_rx_tiaq_dcoc_gc0          
+	0x8aa2 core_rx_tiai_dcoc_gc1          
+	0x8aa3 core_rx_tiaq_dcoc_gc1          
+	0x8aa4 core_rx_tiai_dcoc_gc2          
+	0x8aa5 core_rx_tiaq_dcoc_gc2          
+	0x8aa6 core_rx_tiai_dcoc_gc3          
+	0x8aa7 core_rx_tiaq_dcoc_gc3          
+	0x8aa8 core_rx_tiai_dcoc_gc4          
+	0x8aa9 core_rx_tiaq_dcoc_gc4          
+	0x8aaa core_rx_tiai_dcoc_gc5          
+	0x8aab core_rx_tiaq_dcoc_gc5          
+	0x8aac core_rx_tiai_dcoc_gc6          
+	0x8aad core_rx_tiaq_dcoc_gc6          
+	0x8aae core_rx_tiai_dcoc_gc7          
+	0x8aaf core_rx_tiaq_dcoc_gc7          
+	0x8ab0 core_rx_abbi_dcoc_gc0
+	0x8ab1 core_rx_abbq_dcoc_gc0
+	0x8ab2 core_rx_abbi_dcoc_gc1
+	0x8ab3 core_rx_abbq_dcoc_gc1           
+	0x8ab4 core_rx_abbi_dcoc_gc2
+	0x8ab5 core_rx_abbq_dcoc_gc2
+	0x8ab6 core_rx_abbi_dcoc_gc3
+	0x8ab7 core_rx_abbq_dcoc_gc3
+	0x8ab8 core_rx_abbi_dcoc_gc4
+	0x8ab9 core_rx_abbq_dcoc_gc4
+	0x8aba core_rx_abbi_dcoc_gc5
+	0x8abb core_rx_abbq_dcoc_gc5
+	0x8abc core_rx_abbi_dcoc_gc6
+	0x8abd core_rx_abbq_dcoc_gc6
+	0x8abe core_rx_abbi_dcoc_gc7
+	0x8abf core_rx_abbq_dcoc_gc7
+	0x8ac0 core_rx_abbi_dcoc_gc8
+	0x8ac1 core_rx_abbq_dcoc_gc8
+	0x8ac2 core_rx_tiai_dcoc_force
+	0x8ac3 core_rx_tiaq_dcoc_force
+	0x8ac4 core_rx_abbi_dcoc_force
+	0x8ac5 core_rx_abbq_dcoc_force
+	0x8ac8 core_chgpump_ctrl
+
+	0x8c00 core_usb_config
+	0x8c01 core_usb_addr
+	0x8c02 core_usb_rx_saddr
+	0x8c04 core_usb_rx_eaddr
+	0x8c06 core_usb_rxptr
+	0x8c08 core_usb_tx_saddr0
+	0x8c0a core_usb_tx_saddr1
+	0x8c0c core_usb_tx_saddr2
+	0x8c0e core_usb_tx_saddr3
+	0x8c10 core_usb_epmap
+	0x8c11 core_usb_pupd
+	0x8c12 core_usb_hmode
+	0x8c13 core_usb_int_mask
+	0x8c18 core_usb_trig
+	0x8c19 core_usb_stall
+	0x8c1a core_usb_toggle
+	0x8c1b core_usb_clear_nak
+	0x8c20 core_usb_rx_wptr
+	0x8c22 core_usb_status
+	0x8c24 core_usb_stall_status
+	0x8c25 core_usb_txbusy
+	0x8c26 core_usb_sof_cnt
+	0x8c28 core_usb_rxcnt
+
+	
+
+
+
+    
+    
+)
+
+(
+
+4 BIST_CTRL_FIX_SCHED_RAM
+5 BIST_CTRL_FIX_XRAM
+6 BIST_CTRL_FIX_PATCH_RAM
+
+7 AES_EN
+)
+
+(
+4 rx_freq_offset
+2 tx_freq_offset
+)
+
+(
+/* bit difinitions */
+  4 whiteoff_bit
+  6 clksel_rc
+  1 clksel_dpll_24M
+  5 clksel_dpll
+  4 clksel_xtal
+  5 adc_rccal
+  0 bpf_rccal
+  1 demod_clkoff
+)
+
+// retention mem ctrl
+(
+  4 cold_wake
+  5 gpio_latch
+  6 retmem_cs
+  7 isogate
+)
+
+// sys ctrl
+(
+  2 fast_wake
+  3 ice_mode
+  4 reload_code
+)
+
+// lpm_write
+(
+1 lpmreg_sel_counter
+2 lpmreg_sel_scanmode
+)
+
+// lock bits
+(
+0 SPI_LOCK_BIT
+1 PWM_LOCK_BIT
+2 UART_LOCK_BIT
+3 IIC_LOCK_BIT
+4 ADPCM_LOCK_BIT
+5 ROM_LOCK_BIT
+6 OPTION_LOCK
+6 OTP_NOT_LIMIT
+7 OTP_LIMIT
+)
+
+(
+4 LPM_DOZE_EN_BIT	
+)
+
+// misc ctrl
+(
+  0x01 RCCNT_START
+  0x02 SPID_START
+  0x04 IICD_START
+  0x08 OTP_KEY_LOCK
+  0x10 INIT_KEY
+  0x20 SHIFT_KEY
+  0X80 CCNT_START
+)
+// DMA STATUS BIT
+(
+  0 OTPD_CRCOK
+  1 OTPD_DONE
+  2 SPID_CRCOK
+  3 SPID_DONE
+  4 IICD_CRCOK
+  5 IICD_DONE
+  6 IICD_ACK
+)
+
+//bit map of core_uart_status
+(
+1 UART_STATUS_TX_BUSY
+2 UART_STATUS_RX_FIFO_EMPTY
+3 UART_STATUS_RX_FIFO_FULL
+4 UARTB_STATUS_TX_BUSY
+5 UARTB_STATUS_RX_FIFO_EMPTY
+6 UARTB_STATUS_RX_FIFO_FULL
+)
+
+(//core_uart_clksel
+0 UART_CLOCK_SELECT_BIT
+0xFE UART_CLOCK_SELECT_CRYSTAL
+0x01 UART_CLOCK_SELECT_DPLL
+
+24000000 uart_clock_freq_24M
+48000000 uart_clock_freq_48M
+)
+
+
+(//bit map of core_uart_ctrl
+0 BIT_UART_CONTROL_ENABLE
+1 BIT_UART_CONTROL_PARITY
+2 BIT_UART_CONTROL_DATA_LENGTH
+3 BIT_UART_CONTROL_STOP_BIT_SIZE
+4 BIT_UART_CONTROL_FLOW_CONTROL
+5 BIT_UART_CONTROL_7816_SMART_CARD_PROTOCOL
+6 BIT_UART_CONTROL_HALF_DUPLEX_SINGLE_LINE_UART
+7 BIT_UART_CONTROL_RATE_BAUD_SETTING
+)
+(//FUN of core_uart_ctrl
+0x01 FUN_UART_CONTROL_ENABLE
+0x06 FUN_UART_CONTROL_PARITY_ODD
+0x04 FUN_UART_CONTROL_PARITY_EVEN
+0x08 FUN_UART_CONTROL_STOP_2BIT
+0x00 FUN_UART_CONTROL_STOP_1BIT
+0x10 FUN_UART_CONTROL_FLOW_CONTROL_ENABLE
+0x20 FUN_UART_CONTROL_7816_SMART_CARD_PROTOCOL
+0x40 FUN_UART_CONTROL_HALF_DUPLEX_SINGLE_LINE_UART
+0x80 FUN_UART_CONTROL_SETTING_RATE_BAUD
+)
+
+(//bit map of core_nec_control
+0x00 BIT_NEC_ENABLE
+0x01 BIT_NEC_CLK_DIVIDE_NUM
+)
+
+(//FUN  of core_nec_control
+0x01 FUN_NEC_ENABLE
+0x30 FUN_NEC_CLK_DIVIDE_24	//24M , 
+)
+
+0x8b uart_ctrl_default //BCSP
+0x81 uart_ctrl_h4 //H4
+0x81 uart_ctrl_normal
+0x91 uart_ctrl_5line
+0x81 uart_ctrl_57600
+2 uart_baud_len
+0x00 uartclk_crystal
+0x01 uartclk_dpll
+0x1a0 uart_baud_115200
+0xbb uart_baud_256000
+0x340 uart_baud_57600
+0x34 uart_baud_921600
+0x9c4 uart_baud_9600
+
+//core_clkoff
+(
+	0 CLOCK_OFF_AUTH_ROM
+	1 CLOCK_OFF_UC_ROM
+	2 CLOCK_OFF_DEBUG_UART
+	3 CLOCK_OFF_SCHED_RAM
+	4 CLOCK_OFF_TRANCE_FIFO
+	5 CLOCK_OFF_CORDIC
+	6 CLOCK_OFF_OTPD
+	7 CLOCK_OFF_I2C
+	8 CLICK_OFF_SARADC_DMA
+	9 CLOCK_OFF_KEYSCAN
+	9 CLOCK_OFF_NEC
+	0x0a CLOCK_OFF_USB
+	0x0b CLOCK_OFF_QDECODER
+	0x0c CLOCK_OFF_SPI
+	0x0d CLOCK_OFF_PWM
+	0x0e CLOCK_OFF_UARTB
+	0x0f CLOCK_OFF_UART
+)
+
+// gpio config types
+(
+  0 gpcfg_input
+  6 gpcfg_dac_p  
+  7 gpcfg_dac_n
+  8 gpcfg_uart_txd
+  9 gpcfg_uart_rxd
+  10 gpcfg_uart_rts
+  11 gpcfg_uart_cts
+  
+  16 gpcfg_pwm_out0
+  17 gpcfg_pwm_out1
+  18 gpcfg_pwm_out2
+  19 gpcfg_pwm_out3
+  20 gpcfg_pwm_out4
+  21 gpcfg_pwm_out5
+  22 gpcfg_pwm_out6
+  23 gpcfg_pwm_out7
+  24 gpcfg_nec_input
+  
+  31 gpcfg_spid_miso
+  32 gpcfg_spid_ncs
+  33 gpcfg_spid_sck
+  34 gpcfg_spid_mosi
+  35 gpcfg_spid_sdio
+  
+  44 gpcfg_iic_scl
+  45 gpcfg_iic_sda
+  
+  62 gpcfg_output_low
+  63 gpcfg_output_high
+  
+  0x00 gpcfg_high_impedance
+  0x40 gpcfg_pullup
+  0x80 gpcfg_pulldown
+  0xc0 gpcfg_no_ie
+)
+
+(
+16	GPIO_NUMBER
+8	GPIO_NUMBER_EXT
+0xFF  GPIO_DISABLE
+)
+
Index: format/security.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/security.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/security.format	(working copy)
@@ -0,0 +1,63 @@
+
+memalloc (
+16 mem_input_store
+
+2 mem_ec_loopc
+1 mem_aes_cmac_data_length
+
+96 mem_dat
+
+/* ecc calculation */
+32 mem_ax_256 //32 bytes
+32 mem_ay_256 // 32 bytes
+32 mem_az_256 // 32 bytes
+32 mem_bx_256 // 32 bytes
+32 mem_by_256 // 31 bytes
+
+0 mem_bz_256  //32 bytes
+0 mem_tmp1
+24 memahbak
+8 mem_tmp5
+32 mem_cx_256  //32 bytes
+31 mem_cy_256  // 32 bytes
+1 mem_cy5_256 // 1 byte
+32 mem_cz_256 // 32 bytes
+32 mem_k_256 //32 bytes
+32  mem_tmp1_256 //32 bytes
+
+32 mem_tmp5_256
+32  mem_tmp2_256
+0 mem_tmp3_256
+32 mem_t1_256
+0 mem_tmp0_256
+32 mem_t0_256
+32 mem_t2_256
+32 mem_t3_256
+32 mem_t7_256
+
+24 mem_p
+24 mem_a
+24 mem_b
+24 mem_gx
+24 mem_gy
+32 memh0
+
+32 mem_p_256		
+32 mem_a_256
+32 mem_gx_256
+32 mem_gy_256
+16 mem_le_slat
+
+)
+
+xmemalloc(
+5 mem_ccm_pcnt_tx
+5 mem_ccm_pcnt_rx
+4 mem_ccm_last_mic
+0 mem_ccm_iv
+4 mem_ccm_ivm
+4 mem_ccm_ivs
+2 mem_ccm_len
+2 mem_ccm_rx_ptr
+)
+
Index: format/simple_pairing.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/simple_pairing.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/simple_pairing.format	(working copy)
@@ -0,0 +1,68 @@
+
+ifdef SECURE_CONNECTION
+
+memalloc(
+0 mem_sp_state_start
+1 mem_sp_dhkey_invalid
+4 mem_gkey
+0 mem_sp_state_end
+
+32 mem_le_pubkey_remote_x_256
+32 mem_le_pubkey_remote_y_256
+32 mem_le_dhkey_256
+
+16 mem_sp_confirm_remote
+)
+
+xmemalloc(
+1 mem_sc_only_mode
+1 mem_sp_debug_mode
+1 mem_secure_connections_enable
+1 mem_sc_calc
+1 mem_sc_local_key_invalid
+
+
+32 mem_sc_private_key_256
+32 mem_sc_pubkey_local_x_256
+32 mem_sc_pubkey_local_y_256
+
+
+0 mem_sp_state_xmem
+1 mem_authentication_passkey_times
+1 mem_passkey_1bit
+0 mem_sp_state_xmem_end
+)
+endif
+
+/* simple pairing status flag */
+(
+  0x00   SP_FLAG_STANDBY
+  0x02   LE_SP_FLAG_COMMIT_256
+
+)
+
+/* simple pairing calc flag */
+(
+  0x00   SP_CALC_STANDBY
+  0x03   SP_CALC_PUBKEY_256
+  0x04   SP_CALC_DHKEY_256
+)
+
+
+
+/* simple paring invalid flag */
+(
+  0x00   SP_KEY_INVALID
+  0x03   SP_KEY_VALID_256
+
+)
+
+
+//mem_secure_connections_enable
+(
+0 SECURE_CONNECTIONS_LE_BIT
+1 SECURE_CONNECTIONS_BR_BIT
+)
+
+
+  
Index: format/ui.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/ui.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/ui.format	(working copy)
@@ -0,0 +1,148 @@
+/*****************************************************************************/
+/* RCS HEADER -- DO NOT ERASE                                                */
+/* $Author: Administrator $                                                           */
+/* $Id: bt_ui_format.upper,v 1.1 2009-09-28 04:06:17 Administrator Exp $     */
+/************************************************************************/
+
+
+	/* ========= memory ============== */
+memalloc(
+1 mem_ipc_skip_continue_proc
+) 
+
+xmemalloc(
+//UI Work area
+1 mem_ipc_lock_bt
+1 mem_ipc_lock_c51
+8 mem_ipc_fifo_bt2c51
+8 mem_ipc_fifo_c512bt
+
+1 mem_ui_button_timer
+1 mem_ui_button_last_state
+4 mem_ui_timer_last_btclk
+2 mem_ui_state_map
+
+1 mem_ui_button_timeout
+1 mem_ui_button_gpio
+1 mem_ui_led_init_state_set
+
+1 mem_ui_led_struct_num
+2 mem_ui_led_struct_ptr
+
+)
+
+
+//mem_ui_state_map
+(
+9 UI_STATE_BLE_CONNECTED
+10 UI_STATE_BLE_WRITE_RCV
+11 UI_STATE_BLE_ADV
+12 UI_STATE_BTN_DOWN
+)
+
+
+
+/* memui_Commands */
+(
+0 BT_CMD_STANDBY
+13 BT_CMD_START_ADV
+14 BT_CMD_STOP_ADV
+15 BT_CMD_START_DIRECT_ADV
+16 BT_CMD_STOP_DIRECT_ADV
+17 BT_CMD_LE_DISCONNECT
+18 BT_CMD_LE_UPDATE_CONN
+19 BT_CMD_LED_OFF
+20 BT_CMD_LED_ON
+21 BT_CMD_LED_BLINK
+22 BT_CMD_LE_START_CONN
+23 BT_CMD_LE_START_SCAN
+24 BT_CMD_LE_STOP_SCAN
+25 BT_CMD_ENTER_HIBERNATE
+27 BT_CMD_LE_SMP_SECURITY_REQUEST
+31 BT_CMD_STORE_RECONN_INFO_LE
+34 BT_CMD_START_24G
+35 BT_CMD_STOP_24G
+36 BT_CMD_PAIR_24G
+)
+
+(
+0x00 BT_EVT_NULL
+0x0F BT_EVT_DISCOVERY_STOPED
+0x10 BT_EVT_BUTTON_LONG_PRESSED
+0x14 BT_EVT_LE_CONNECTED
+0X15 BT_EVT_LE_DISCONNECTED
+0x17 BT_EVT_BUTTON_ENTER_HIBERNATE
+0x25 BT_EVT_BUTTON_ADJUST_DPI
+0x28 BT_EVT_LE_WRITE_REQUEST
+0x29 BT_EVT_LE_ENC_INFO
+0x2c BT_EVT_BUTTON_DOWN
+0x2d BT_EVT_BUTTON_UP
+0x2e BT_EVT_REMOTE_UNSNIFF
+0x30 BT_EVT_LE_PAIRING_FAIL
+0x31 BT_EVT_LE_PAIRING_SUCCESS
+0x32 BT_EVT_LE_START_ENC
+0X33 BT_EVT_LE_PAUSE_ENC
+0X34 BT_EVT_LE_TK_GENERATE
+0x35 BT_EVT_BT_GKEY_GENERATE
+0x36 BT_EVT_BT_GET_PASSKEY
+0x39 BT_EVT_24G_PAIRING_COMPLETE
+0x3a BT_EVT_24G_ATTEMPT_FAIL
+0x3b BT_EVT_LE_GKEY_GENERATE
+0x3c BT_EVT_24G_ATTEMPT_SUCCESS
+0x3d BT_EVT_STORE_NVRAM
+0x3e BT_EVT_LE_PAIRING_COMPLETE
+0x3F BT_EVT_LE_RECONNECT_COMPLETE
+0x40 BT_EVT_LE_PARSE_CONN_PAPA_UPDATE_RSP
+0x41 BT_EVT_LE_LTK_LOST
+0x42 BT_EVT_LE_UPDATE_PHY
+0x43 BT_EVT_LE_GET_PASSKEY
+0x44 BT_EVT_LE_PARSE_CONN_PARAM_ACCEPTED
+)
+//switch
+(
+0 OFF
+1 ON
+)
+
+
+(
+	160 UI_HUNDRED_MILLISECOND_TIME
+	0XFF UI_BUTTON_GPIO_DISABLE
+)
+
+(
+0x00 UI_BUTTON_STATE_DOWN
+0x01 UI_BUTTON_STATE_UP
+)
+
+//mem_ipc_skip_continue_proc
+(
+	0 IPC_CONTINUE_PROCESS
+	1 IPC_SKIP_CONTINUE_PROCESS
+)
+
+
+(//led style struct 
+0 		LED_OFFSET_LED_TYPE
+1 		LED_OFFSET_BLINK_COUNT
+2		LED_OFFSET_LED_GPIO
+3		LED_OFFSET_ON_TIME
+5		LED_OFFSET_OFF_TIME
+7 		LED_OFFSET_CB_LEDON
+9		LED_OFFSET_CB_LEDOFF
+11		LED_OFFSET_LENGTH
+)
+
+(//LED state
+0 UI_LED_STATE_BLINK_STOP
+1 UI_LED_STATE_BLINK_START
+2 UI_LED_STATE_LIGHTING
+3 UI_LED_STATE_DARKING
+4 UI_LED_STATE_BLINK_LIGHTING
+5 UI_LED_STATE_BLINK_DARKING
+
+0xFF LED_INFINITE_FLASH_NUM
+
+)
+
+
Index: format/usb.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/usb.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/usb.format	(working copy)
@@ -0,0 +1,258 @@
+memalloc usb(
+2 mem_usb_status
+1 mem_usb_fifo_empty
+2 mem_usb_read_len
+65 mem_usb_txbuf
+10 mem_usb_txbuf1
+10 mem_usb_txbuf2
+64 mem_usb_rxbuf
+1 mem_usb_rxbuf_end
+2 mem_bufptr
+1 mem_remain
+2 mem_hidreportdesc_kb
+2 mem_hidreportdesc_m
+19 mem_devicedesc
+60 mem_confdesc
+5 mem_string0
+30 mem_string1
+30 mem_string2
+30 mem_string3
+2 mem_cb_usb_config
+
+1 mem_usb_tx_interval
+9 mem_usb_vid_pid
+2 mem_usb_zero_packet
+2 mem_usb_ones_packet
+2 mem_usb_two_packet
+1 mem_usb0_state
+1 mem_usb_offline_check_gpio
+
+0 mem_usb_clear_mem_start
+0 mem_usb_setup
+1 mem_usb_setup_bmRequestType
+1 mem_usb_setup_bRequest
+1 mem_usb_setup_bValue
+1 mem_usb_setup_bValueH
+2 mem_usb_setup_wIndex
+1 mem_usb_setup_bLength
+1 mem_usb_setup_bLengthH
+64 mem_usb0_set_report_data
+64 mem_usb0_get_report_data
+2 mem_usb_setup_bValue_temp
+1 mem_usb0_get_set_report
+1 mem_usb0_data_ready_report
+1 mem_usb_tx_win_enable
+1 mem_usb_tx_mac_enable
+1 mem_usb_idle_flag
+1 mem_usb_idle_rate
+1 mem_usb_get_protocol_flag
+1 mem_usb_set_protocol_status
+1 mem_usb_set_protocol_value
+1 mem_usb_state
+1 mem_usb_remote_wakeup
+1 mem_usb_clear_remote_wakeup
+1 mem_sdsystem_wakeup_flag
+1 mem_usb_ep0_stall_status
+1 mem_usb_ep1_stall_status
+1 mem_usb_ep2_stall_status
+1 mem_usb_ep3_stall_status
+2 mem_dsc_info_data_pointer
+1 mem_dsc_info_len
+1 mem_usb_ep1_data
+1 mem_usb_ep2_data
+1 mem_usb_tx_enable
+1 mem_usb_device_enumeration_endflag
+1 mem_usb_wakestate_onetime_flag
+1 mem_usb_mac_wakeup_trig
+1 mem_usb_set_high_addr_flag
+1 mem_usb_clear_halt
+16 mem_usb_mouse_data
+16 mem_usb_kb_data
+16 mem_usb_kb_n_key_rollvoer_data
+8 mem_usb_kb_multikey
+8 mem_usb_kb_system
+2 mem_usb_test_cnt
+10 mem_usb_test_kb
+0 mem_usb_clear_mem_end
+64 mem_usb_ccid_buf
+)
+
+//class type
+(
+0x00 STANDARD_REQ
+0x01 CLASS_REQ
+0x02 MANUFACTURER_REQ
+)
+//Standard Request Codes
+(
+0x00 GET_STATUS                // Code for Get Status
+0x01 CLEAR_FEATURE             // Code for Clear Feature
+0x03 SET_FEATURE              // Code for Set Feature
+0x05 SET_ADDRESS              // Code for Set Address
+0x06 GET_DESCRIPTOR           // Code for Get Descriptor
+0x07 SET_DESCRIPTOR           // Code for Set Descriptor(not used)
+0x08 GET_CONFIGURATION        // Code for Get Configuration
+0x09 SET_CONFIGURATION        // Code for Set Configuration
+0x0A GET_INTERFACE            // Code for Get Interface
+0x0B SET_INTERFACE            // Code for Set Interface
+0x0C SYNCH_FRAME              // Code for Synch Frame(not used)
+)
+//Standard Descriptor Types
+(
+0x01 DSC_DEVICE               // Device Descriptor
+0x02 DSC_CONFIG               // Configuration Descriptor
+0x03 DSC_STRING               // String Descriptor
+0x04 DSC_INTERFACE            // Interface Descriptor
+0x05 DSC_ENDPOINT             // Endpoint Descriptor
+)
+//HID Descriptor Types
+(
+0x21 DSC_HID			      // HID Class Descriptor
+0x22 DSC_HID_REPORT			  // HID Report Descriptor
+)
+//Define bmRequestType bitmaps
+(
+0x80 IN_DEVICE                // Request made to device,
+                              // direction is IN
+0x00 OUT_DEVICE               // Request made to device,
+                              // direction is OUT
+0x81 IN_INTERFACE             // Request made to interface,
+                              // direction is IN
+0x01 OUT_INTERFACE            // Request made to interface,
+                              // direction is OUT
+0x82 IN_ENDPOINT              // Request made to endpoint,
+                              // direction is IN
+0x02 OUT_ENDPOINT             // Request made to endpoint,
+)
+//HID Request Codes
+(
+0x01 GET_REPORT 		       // Code for Get Report
+0x02 GET_IDLE				   // Code for Get Idle
+0x03 GET_PROTOCOL			   // Code for Get Protocol
+0x09 SET_REPORT				   // Code for Set Report
+0x0A SET_IDLE				   // Code for Set Idle
+0x0B SET_PROTOCOL			   // Code for Set Protocol
+0xF2 HID_REPORT_ID           
+64 EP0_PACKET_SIZE         
+6 EP1_PACKET_SIZE         
+16 HID_REPORT_SIZE         
+0x001B HID_REPORT_DESCRIPTOR_SIZE    
+)
+//math cordic
+(
+0 TYPE_SIN		
+1 TYPE_ATAN	
+2 TYPE_MULT	
+3 TYPE_DIV		
+4 TYPE_ASIN	
+5 TYPE_SQRT	
+6 TYPE_COS		
+7 TYPE_TAN		 
+)
+   
+(
+0 DFIFO0_IN_EMPTY
+1 DFIFO1_IN_EMPTY
+2 DFIFO2_IN_EMPTY
+3 DFIFO3_IN_EMPTY
+4 DFIFO0_OUT_EMPTY
+5 DFIFO1_OUT_EMPTY
+6 DFIFO2_OUT_EMPTY
+7 DFIFO3_OUT_EMPTY
+)
+
+(
+)
+
+(
+0 USB_STATUS_SETUP
+1 USB_STATUS_SUSPEND
+2 USB_STATUS_NAK
+3 USB_STATUS_RESET
+4 USB_STATUS_ACK
+5 USB_STATUS_RXREADY
+6 USB_STATUS_RXFULL
+7 USB_STATUS_TXDONE0
+8 USB_STATUS_TXDONE1
+9 USB_STATUS_TXDONE2
+10 USB_STATUS_TXDONE3
+)
+
+(
+1 USB_GOT_REPORT_REQ
+2 USB_CONNECTED
+3 USB_SLEEP
+4 USB_RESUME
+5 USB_SETIDLE_1
+)
+
+(
+0x10 USB_EP1_KB
+0x20 USB_EP2_MS
+0x21 USB_EP2_MULTIKEY
+0x22 USB_EP2_SYSTEMKEY
+0x23 USB_EP2_BIT_CONSUMER
+0x24 USB_EP2_N_KEY_ROLLOVER
+0x01 MAC_BOOT_MODE
+0x02 R_KEY
+0x03 LR_KEY
+)
+
+
+(
+0x01ba PC_GET_REPORT
+0x02ba PC_SET_REPORT
+0x0200 PC_SET_REPORT_bValue
+0x0000 PC_SET_REPORT_wIndex
+0x0001 PC_SET_REPORT_bLength
+0xba PC_REPORT_ID
+
+0x01 PC_GET_DATA
+0x00 PC_GET_NONDATA
+)
+
+(
+//--------------------------------------------------
+// Define device states
+0x00 DEV_ATTACHED	// Device is in Attached State
+0x01 DEV_POWERED	// Device is in Powered State
+0x02 DEV_DEFAULT		// Device is in Default State
+0x03 DEV_ADDRESS	// Device is in Addressed State
+0x04 DEV_CONFIGURED	// Device is in Configured State
+0x05 DEV_SUSPENDED	// Device is in Suspended State
+)
+
+(
+// Define wIndex bitmaps
+0x81 IN_EP1                    // Index values used by Set and Clear
+0x01 OUT_EP1                   // commands for Endpoint_Halt
+0x82 IN_EP2              
+0x02 OUT_EP2             
+0x83 IN_EP3              
+0x03 OUT_EP3             
+)
+
+(
+0 EP0_STALL
+1 EP1_IN_STALL
+2 EP1_OUT_STALL
+3 EP2_IN_STALL
+4 EP2_OUT_STALL
+5 EP3_IN_STALL
+6 EP3_OUT_STALL
+)
+
+(
+// Define wValue bitmaps for Standard Feature Selectors
+0x00 ENDPOINT_HALT             // Endpoint_Halt feature selector
+0x01 DEVICE_REMOTE_WAKEUP      // Remote wakeup feature(not used)
+0x00 BOOT_PROTOCOL
+0x01 REPORT_PROTOCOL
+0x01 USB_MAX_NUM_CFG
+)
+
+(
+640 TIMER_NAK_DELAY
+5000 TIMER_WAKEUP_DELAY
+)
+
Index: format/utility.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/utility.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/format/utility.format	(working copy)
@@ -0,0 +1,72 @@
+
+memalloc(
+
+1 mem_fifo_temp
+
+8 mem_pdatatemp
+8 mem_temp //8 bytes
+4 mem_timeup // 4 bytes
+4 mem_rega //4 bytes
+4 mem_regb //4 bytes
+3 mem_regc //3 bytes
+2 mem_contr //2 bytes
+2 mem_contw //2 bytes
+2 mem_contus
+2 mem_contue
+2 mem_contu
+2 mem_queue
+2 mem_loopcnt
+
+4 mem_saved_gpio_in
+
+0 mem_module_rx_error_data_buffer
+0 mem_le_adv_channel_map_temp
+0 mem_le_data_len_temp	//1byte
+0 mem_event_cmd_response_content	//2byte
+0 mem_le_prand		//16byte
+0 mem_AES_CMAC_k	 //16 bytes
+0 mem_regext_index 	//1 bytes
+1 mem_temp_block0
+0 mem_le_data_temp	//15bytes
+15 mem_temp_block1
+0 mem_le_tx_buf_temp //48byte
+0 mem_le_aes_128	//16byte
+0 mem_regext   //64 bytes
+0 mem_AES_CMAC_k1  //16 bytes
+16 mem_temp_block2
+0 mem_AES_CMAC_k2  //16 bytes
+16 mem_temp_block3
+0 mem_AES_CMAC_temp  // 16 bytes
+16 mem_temp_block4
+0 mem_AES_CMAC_M_last // 16 bytes
+1 mem_module_uart_cmd
+1 mem_module_uart_opcode
+1 mem_module_uart_len
+1 mem_module_temp_nl_discard_packet
+12 mem_temp_block5
+0 mem_le_mackey //16 bytes
+0 mem_app_receive_temp
+2 mem_key_value_temp
+2 mem_key_value
+1 mem_key_value_temp1
+1 mem_key_value_temp2
+1 mem_key_value_temp3
+1 mem_key_value_temp4
+1 mem_key_value_temp5
+1 mem_key_value_temp6
+6 mem_temp_block6
+
+3 mem_scale_ratio
+3 mem_xcnt
+2 mem_scale_ratio_temp
+)
+
+
+//util fifo param
+(
+
+8 UTIL_FIFO_LEN
+-1 UTIL_FIFO_OFFSET
+)
+
+
Index: merge_ble_uud_list_files.bat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/merge_ble_uud_list_files.bat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/merge_ble_uud_list_files.bat	(working copy)
@@ -0,0 +1,50 @@
+@echo off
+setlocal enabledelayedexpansion
+
+REM Set file paths
+set EEPROM_FILE=output\eeprom.dat
+set UUID_FILE=ai_mouse_ble_att_uuid_list.dat
+:: 0x3400 offset address
+set MAX_LINES=13312  
+@REM set OUTPUT_FILE=output\eeprom_merged.dat
+set OUTPUT_FILE=output\eeprom.dat
+echo Processing file merge...
+
+
+REM Count lines in eeprom.dat
+for /f %%i in ('type "%EEPROM_FILE%" ^| find /c /v ""') do set EEPROM_LINES=%%i
+
+echo eeprom.dat bytes: %EEPROM_LINES%
+echo Maximum allowed bytes: %MAX_LINES%
+
+REM Check if eeprom.dat exceeds maximum lines
+if %EEPROM_LINES% GTR %MAX_LINES% (
+    echo Error: eeprom.dat exceeds maximum allowed bytes ^(0x3400 = %MAX_LINES%^)
+    exit /b 1
+)
+
+REM Create new file instead of modifying original file
+echo Creating merged file: %OUTPUT_FILE%
+
+REM Copy original eeprom.dat content to new file
+copy "%EEPROM_FILE%" "%OUTPUT_FILE%" >nul
+
+REM Calculate how many "00" lines to add to reach 0x3400 line position
+set /a FILL_LINES=%MAX_LINES%-%EEPROM_LINES%
+
+REM echo Adding %FILL_LINES% "00" lines to reach 0x3400 line position
+
+REM Add "00" lines until reaching 0x3400 line position
+for /l %%i in (1,1,%FILL_LINES%) do echo 00>> "%OUTPUT_FILE%"
+
+REM Append ai_mouse_ble_att_uuid_list.dat content to output file
+type "%UUID_FILE%" >> "%OUTPUT_FILE%"
+
+echo Files merged successfully!
+echo Final line count in %OUTPUT_FILE%:
+for /f %%i in ('type "%OUTPUT_FILE%" ^| find /c /v ""') do echo %%i bytes
+
+echo.
+echo Merge completed! New file: %OUTPUT_FILE%
+
+endlocal
\ No newline at end of file
Index: output/eeprom.dat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/output/eeprom.dat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/output/eeprom.dat	(working copy)
@@ -0,0 +1,14133 @@
+00
+02
+8f
+ab
+f1
+00
+3c
+ae
+c6
+03
+78
+5c
+8d
+07
+e0
+71
+35
+1e
+aa
+55
+e0
+1f
+b1
+a4
+02
+b3
+d0
+ad
+a4
+ab
+52
+a6
+69
+fb
+ad
+01
+a8
+77
+5e
+60
+8c
+ea
+f3
+02
+6f
+3d
+e9
+3a
+de
+dd
+17
+58
+b7
+d7
+7e
+9f
+b6
+5c
+32
+c7
+af
+35
+07
+f8
+c0
+a4
+17
+c8
+a0
+61
+78
+b9
+2e
+9d
+93
+44
+71
+36
+4b
+0f
+3c
+03
+e5
+97
+fc
+d4
+c1
+17
+e0
+6d
+f9
+ac
+60
+c8
+e0
+2a
+b2
+df
+eb
+bb
+d9
+ef
+09
+7d
+10
+23
+61
+7b
+7f
+e3
+68
+d2
+76
+85
+64
+05
+3f
+e8
+e7
+b5
+44
+2a
+88
+9d
+be
+03
+c4
+27
+98
+1c
+ed
+02
+9c
+bc
+4e
+6b
+65
+f0
+1a
+39
+b0
+20
+17
+80
+0a
+6c
+ad
+b3
+67
+71
+d5
+d2
+fa
+d6
+82
+33
+18
+8a
+9a
+2f
+2a
+58
+d0
+2d
+7d
+73
+5e
+34
+7d
+51
+78
+88
+49
+0b
+83
+61
+be
+86
+d7
+a2
+52
+15
+6b
+88
+61
+61
+c7
+00
+9c
+a7
+d1
+a6
+fa
+2f
+ef
+9e
+cd
+2f
+e9
+46
+51
+34
+37
+dd
+d9
+03
+76
+aa
+23
+3f
+3b
+1a
+95
+cb
+09
+ee
+2a
+07
+32
+65
+c9
+1b
+fd
+4d
+9d
+65
+c9
+97
+a8
+94
+94
+a7
+6d
+05
+5a
+e0
+36
+44
+87
+b1
+d8
+3a
+69
+ec
+0e
+1b
+51
+cb
+e4
+f2
+6c
+78
+3c
+8a
+07
+ee
+a7
+15
+76
+41
+b8
+90
+85
+42
+23
+c3
+22
+aa
+9c
+11
+e9
+13
+57
+6b
+18
+57
+ec
+5b
+2f
+2b
+10
+b5
+0c
+53
+bb
+43
+a3
+a7
+04
+22
+9d
+6a
+6d
+12
+e3
+f8
+de
+83
+9a
+47
+d7
+64
+93
+f8
+34
+10
+d0
+36
+60
+49
+8f
+1d
+e1
+2c
+20
+ff
+b4
+e1
+af
+d6
+ee
+f6
+44
+e8
+51
+fd
+95
+42
+1b
+a2
+02
+d6
+f0
+2a
+88
+39
+59
+40
+cc
+37
+3c
+af
+a7
+35
+5d
+eb
+6e
+4b
+bd
+07
+1e
+23
+f6
+64
+a7
+b2
+72
+cf
+bf
+f4
+bd
+ad
+b6
+dd
+e5
+ea
+1d
+96
+16
+b4
+57
+25
+8f
+b6
+17
+05
+39
+ff
+e2
+18
+dc
+ae
+43
+ad
+ff
+df
+63
+53
+5d
+72
+31
+24
+7f
+74
+4f
+95
+76
+28
+58
+03
+fc
+bf
+3c
+9a
+7b
+31
+a8
+4b
+cd
+72
+48
+8a
+ce
+ca
+a6
+9e
+7e
+cf
+c4
+bb
+0a
+59
+5b
+10
+6c
+85
+e0
+b2
+6c
+97
+0f
+1c
+22
+74
+10
+0a
+9f
+b8
+6a
+22
+22
+e9
+53
+c7
+73
+e0
+19
+85
+dd
+4c
+4d
+2d
+cc
+15
+47
+d1
+5c
+a3
+17
+55
+ed
+8c
+83
+ee
+97
+f6
+e0
+ce
+a1
+ee
+b1
+85
+2c
+37
+bd
+35
+b2
+2e
+ec
+81
+b5
+0f
+2d
+f0
+e1
+8a
+74
+bf
+80
+60
+d8
+f6
+76
+ac
+66
+62
+ec
+0c
+e2
+58
+7d
+6a
+f0
+66
+da
+4e
+ca
+cf
+72
+51
+16
+82
+e3
+84
+a1
+9f
+af
+ae
+08
+25
+7b
+a8
+2d
+1e
+50
+83
+c2
+de
+16
+58
+df
+49
+ea
+03
+3d
+69
+68
+2a
+a4
+ab
+00
+27
+5c
+33
+a9
+c5
+f4
+09
+e0
+68
+db
+f3
+0c
+08
+aa
+24
+8c
+2c
+f2
+02
+b1
+a3
+ae
+4c
+b8
+56
+c9
+16
+8d
+a5
+74
+ec
+f5
+55
+3e
+3d
+24
+99
+c6
+97
+da
+83
+4f
+bf
+d9
+4b
+f3
+25
+f1
+2e
+a3
+14
+5b
+a1
+d5
+93
+87
+74
+d4
+eb
+90
+3c
+b8
+3a
+33
+0d
+82
+1c
+25
+73
+dd
+a4
+44
+19
+52
+e7
+a3
+38
+04
+5b
+71
+31
+9e
+3a
+e0
+c2
+e7
+bd
+dc
+f0
+66
+9d
+b7
+c7
+c9
+83
+8d
+57
+78
+51
+87
+24
+35
+46
+3d
+dc
+7d
+43
+94
+67
+65
+98
+c7
+c6
+70
+7b
+4e
+4e
+6d
+4c
+1a
+2c
+b7
+39
+fd
+76
+82
+cc
+b1
+24
+45
+3c
+1a
+0b
+dc
+b1
+a5
+87
+5b
+af
+8e
+00
+39
+52
+73
+dc
+28
+b6
+54
+38
+13
+ba
+60
+d3
+45
+15
+02
+d0
+f3
+92
+da
+c3
+ba
+bf
+70
+d5
+00
+2f
+db
+3f
+e2
+a5
+fb
+03
+c5
+9e
+0a
+f1
+bb
+1f
+67
+ed
+7b
+51
+d7
+b0
+8c
+4d
+fd
+0c
+8f
+54
+de
+78
+42
+dd
+ca
+3e
+a2
+82
+59
+6e
+88
+ec
+24
+da
+56
+08
+d4
+b2
+54
+f1
+91
+a5
+6a
+2e
+c2
+2f
+fc
+b2
+10
+a3
+e1
+c1
+53
+ce
+57
+6e
+e0
+da
+7e
+c3
+81
+75
+d2
+23
+ad
+13
+b7
+11
+ce
+22
+17
+be
+03
+66
+e0
+8b
+d0
+c7
+e7
+da
+eb
+7e
+3b
+2b
+5e
+4c
+5f
+78
+60
+b6
+05
+ec
+11
+65
+7e
+86
+e5
+7d
+05
+da
+fe
+89
+39
+be
+94
+12
+7e
+87
+82
+5b
+63
+93
+13
+42
+4a
+3e
+1b
+c0
+40
+bb
+50
+86
+29
+5d
+ac
+09
+69
+0b
+9c
+c5
+0c
+ee
+5a
+7c
+0f
+4f
+27
+38
+08
+b4
+44
+12
+e5
+17
+fb
+c5
+27
+d2
+59
+3c
+de
+68
+5d
+67
+b0
+2a
+3e
+83
+87
+75
+f6
+41
+c5
+a8
+c7
+ed
+4e
+00
+92
+0b
+9f
+d1
+d8
+df
+b6
+40
+ad
+70
+38
+44
+f6
+61
+af
+b5
+98
+32
+46
+a4
+4e
+bd
+93
+f6
+9e
+2f
+2a
+a8
+83
+c0
+7f
+87
+54
+7b
+ed
+8e
+27
+67
+dc
+97
+50
+96
+b3
+83
+71
+b9
+26
+35
+29
+35
+d5
+bd
+cb
+92
+5e
+6b
+0f
+69
+b2
+75
+95
+aa
+90
+36
+b7
+3b
+87
+7b
+e8
+7e
+41
+8c
+15
+cf
+fe
+7c
+dc
+9b
+66
+43
+0a
+fc
+55
+fb
+94
+62
+8e
+7e
+f5
+fb
+26
+b2
+60
+83
+2d
+e6
+ef
+4d
+7a
+e8
+89
+bf
+e4
+f8
+ce
+6b
+02
+74
+b8
+8b
+51
+4b
+36
+7f
+e1
+ee
+92
+cf
+e0
+3b
+68
+ba
+82
+e2
+24
+51
+17
+41
+c7
+8c
+73
+fc
+c3
+36
+b7
+8e
+5b
+13
+65
+9d
+dc
+a8
+08
+13
+97
+98
+90
+6c
+24
+16
+60
+c3
+55
+ef
+0a
+de
+e4
+29
+8a
+98
+fa
+71
+e7
+a1
+9d
+48
+c9
+00
+22
+13
+2f
+ec
+2d
+ac
+78
+a1
+69
+34
+e6
+ca
+41
+f7
+8f
+fd
+23
+4f
+06
+1d
+3a
+07
+ed
+7a
+bd
+f2
+42
+83
+75
+3c
+72
+40
+7f
+20
+53
+8d
+7a
+36
+7f
+42
+0e
+eb
+4c
+b7
+5b
+bd
+fe
+61
+c0
+98
+cb
+f2
+55
+f9
+78
+82
+34
+81
+14
+2c
+1b
+df
+33
+5f
+ae
+ad
+4a
+98
+e0
+e2
+31
+8f
+7c
+c7
+a8
+3c
+10
+a4
+34
+41
+bd
+53
+47
+62
+2e
+c3
+0c
+48
+f1
+5b
+f0
+17
+99
+11
+7d
+2d
+dd
+de
+75
+f3
+85
+a0
+d3
+0d
+35
+a3
+f8
+b9
+5c
+b5
+bf
+46
+a6
+bf
+1b
+c7
+ba
+08
+e8
+10
+e5
+76
+0e
+60
+be
+4e
+62
+48
+a2
+47
+7b
+e4
+21
+fc
+20
+bb
+03
+51
+8e
+ac
+3d
+ab
+16
+17
+52
+e3
+87
+d9
+ed
+f1
+a7
+76
+67
+92
+2a
+67
+bd
+f8
+53
+6a
+c2
+0b
+8c
+2f
+2f
+95
+b6
+3b
+49
+4b
+8d
+db
+0a
+c7
+90
+e5
+27
+99
+46
+cc
+fc
+00
+89
+fc
+10
+9a
+f5
+6b
+de
+02
+49
+d9
+ee
+0c
+44
+46
+3d
+2d
+69
+f8
+86
+d8
+02
+eb
+05
+7b
+0d
+49
+df
+45
+c3
+fa
+85
+b9
+ad
+fe
+8b
+68
+e9
+fe
+5a
+aa
+ad
+95
+6d
+b2
+af
+1e
+ae
+26
+7d
+b4
+f8
+4f
+ee
+9f
+ef
+5f
+60
+16
+3f
+39
+57
+3c
+41
+6f
+4d
+49
+09
+ac
+2d
+4d
+48
+0c
+89
+4e
+da
+f8
+98
+35
+81
+06
+d8
+fe
+31
+96
+1f
+10
+72
+a2
+49
+3a
+b6
+20
+0b
+9f
+66
+67
+14
+71
+e9
+44
+a1
+c6
+b1
+2e
+9a
+17
+67
+7e
+73
+06
+4f
+73
+43
+db
+3b
+38
+03
+70
+b8
+9d
+55
+6b
+54
+ad
+6c
+78
+f8
+1f
+16
+8f
+e3
+79
+21
+30
+82
+1b
+43
+67
+09
+98
+da
+f7
+de
+2b
+92
+c6
+a7
+d6
+12
+02
+74
+6a
+c8
+db
+af
+32
+97
+09
+a3
+ad
+f9
+60
+77
+c4
+ad
+5e
+2a
+35
+d5
+5f
+da
+7d
+da
+69
+e8
+ce
+e2
+7c
+d6
+31
+f6
+59
+bc
+6f
+85
+d5
+78
+a8
+8e
+ae
+c9
+93
+0e
+9e
+aa
+66
+6b
+d4
+f2
+7e
+7c
+06
+d0
+63
+fd
+a2
+66
+81
+bb
+e4
+89
+7e
+ef
+1d
+8c
+c0
+9e
+44
+e1
+23
+25
+69
+6a
+bb
+63
+81
+ef
+3b
+5c
+a6
+b7
+7f
+a8
+eb
+96
+24
+72
+70
+5f
+18
+cd
+23
+11
+e6
+79
+aa
+fe
+1e
+84
+68
+bc
+1e
+73
+bf
+d7
+ba
+f9
+9d
+43
+b4
+ce
+73
+7e
+53
+64
+fd
+79
+8c
+cf
+be
+90
+f8
+e9
+06
+77
+29
+cb
+e8
+31
+23
+57
+74
+12
+03
+ee
+cd
+91
+6d
+56
+f0
+75
+b1
+0f
+e3
+35
+05
+7d
+82
+b6
+67
+9e
+bb
+d8
+16
+49
+78
+5c
+92
+62
+ae
+6d
+70
+80
+b7
+fa
+b0
+39
+1b
+d4
+d5
+4a
+4c
+9c
+d9
+66
+7e
+1a
+db
+90
+40
+91
+8d
+b5
+a5
+79
+61
+a0
+b5
+b9
+27
+31
+a7
+3d
+4e
+fb
+a2
+bc
+fc
+b4
+19
+2e
+86
+8d
+b6
+21
+15
+48
+bf
+60
+f7
+da
+7f
+53
+f8
+c1
+4d
+81
+4a
+80
+1b
+ff
+11
+db
+82
+20
+6a
+44
+28
+fe
+b8
+78
+2b
+db
+5e
+af
+78
+1b
+f5
+d5
+5e
+95
+0e
+c3
+c0
+40
+73
+02
+70
+1f
+5d
+01
+e8
+7c
+73
+54
+f8
+52
+d7
+9a
+0d
+3d
+e7
+cf
+f3
+31
+fe
+67
+33
+89
+07
+65
+69
+4e
+67
+9b
+2d
+8e
+b9
+bd
+ff
+f1
+c9
+d5
+d8
+5e
+78
+a5
+ea
+a9
+33
+93
+81
+37
+d1
+5f
+c9
+30
+f2
+65
+a9
+59
+45
+85
+84
+1d
+ac
+a2
+4b
+75
+01
+0c
+e0
+00
+b5
+c7
+38
+de
+32
+c8
+3c
+59
+02
+48
+fc
+10
+1a
+29
+da
+80
+52
+2d
+9f
+c4
+ab
+ec
+43
+ee
+d9
+5b
+0c
+30
+34
+f2
+e6
+65
+fe
+f7
+31
+a2
+b5
+37
+0f
+07
+8b
+80
+42
+dc
+c3
+52
+5f
+37
+56
+14
+78
+a8
+d3
+c3
+6f
+74
+ef
+25
+4c
+8c
+5f
+fe
+37
+b1
+5f
+8a
+94
+e2
+4a
+82
+23
+7d
+26
+d4
+dd
+02
+45
+ce
+79
+e2
+2c
+aa
+77
+9c
+4c
+c8
+ac
+0e
+5c
+a8
+4b
+38
+a1
+a7
+36
+42
+d6
+d4
+48
+a8
+de
+cb
+28
+4c
+23
+8b
+14
+5c
+2c
+53
+a6
+52
+95
+2c
+e2
+c8
+63
+87
+df
+4a
+29
+05
+5c
+df
+68
+7f
+b9
+b7
+6e
+71
+82
+72
+83
+bf
+05
+2f
+26
+b5
+be
+e3
+1d
+3c
+d4
+81
+be
+29
+25
+bb
+11
+c7
+70
+96
+26
+13
+66
+6f
+c3
+32
+3a
+0a
+f8
+a0
+9e
+fe
+ea
+ee
+31
+51
+21
+ab
+8b
+bb
+06
+2d
+84
+60
+c6
+ec
+3e
+12
+3f
+53
+e4
+89
+ef
+fa
+b9
+7b
+be
+ef
+b6
+ec
+34
+09
+20
+e6
+5e
+dc
+ff
+3d
+4b
+25
+10
+4c
+05
+9b
+d3
+5a
+38
+c4
+16
+58
+91
+f1
+a0
+cb
+d6
+b8
+27
+3f
+ea
+51
+e7
+2a
+da
+a4
+6a
+b5
+53
+33
+ce
+df
+13
+dc
+8d
+df
+1e
+5d
+5f
+4b
+ee
+f7
+fc
+7c
+fc
+3d
+6d
+b6
+c4
+7b
+a3
+47
+f8
+cc
+ec
+de
+13
+71
+7c
+f7
+b9
+dc
+47
+49
+81
+d8
+e0
+bf
+05
+32
+ce
+ae
+1b
+ba
+f7
+76
+db
+82
+80
+51
+49
+64
+26
+66
+ee
+87
+c8
+07
+ec
+c9
+b4
+23
+6e
+d6
+63
+b3
+34
+5f
+17
+99
+3f
+ce
+21
+c7
+a2
+d3
+2b
+f6
+b4
+ca
+a6
+7c
+ce
+d4
+e4
+fe
+86
+49
+9e
+93
+34
+2a
+a0
+26
+41
+24
+2f
+30
+1c
+ae
+6a
+74
+ef
+d0
+67
+b2
+ce
+20
+d3
+5c
+f4
+de
+ff
+03
+bf
+67
+39
+28
+fe
+cd
+91
+84
+eb
+21
+e4
+4f
+1d
+d6
+23
+2e
+70
+32
+7a
+dd
+ef
+bd
+12
+22
+9e
+0f
+f6
+2d
+13
+da
+73
+2a
+4a
+b0
+20
+71
+2a
+d5
+e8
+cd
+2b
+ff
+61
+2a
+4d
+88
+eb
+0e
+6a
+5f
+a5
+9a
+6d
+b7
+bc
+01
+34
+15
+c9
+da
+60
+b2
+7c
+62
+a4
+0c
+03
+9d
+e7
+8a
+64
+4f
+84
+be
+b2
+ef
+26
+fc
+19
+1e
+c7
+1b
+5c
+99
+5d
+da
+00
+40
+78
+b1
+36
+37
+79
+33
+3c
+e1
+71
+22
+e4
+f6
+89
+19
+f6
+09
+97
+34
+4b
+ab
+d0
+43
+31
+ad
+ea
+99
+28
+18
+1a
+fe
+57
+82
+a7
+ea
+06
+dd
+3b
+5a
+11
+bd
+e6
+74
+37
+b3
+74
+90
+29
+b7
+07
+af
+e3
+8a
+5c
+61
+82
+df
+fe
+10
+1e
+55
+5b
+f7
+a5
+69
+7f
+01
+d0
+4a
+fb
+0d
+ed
+db
+f8
+c9
+ad
+18
+e0
+65
+c1
+a6
+31
+f5
+66
+c2
+aa
+8a
+fe
+7e
+d4
+d2
+5d
+89
+e3
+bc
+d5
+89
+b7
+b5
+c6
+8f
+da
+8c
+6d
+50
+03
+a7
+76
+fd
+ac
+ea
+0a
+2b
+2a
+37
+71
+dc
+20
+91
+19
+0c
+98
+46
+0d
+ed
+c4
+15
+16
+14
+b2
+4c
+31
+8b
+18
+d5
+0f
+a4
+88
+1c
+16
+a8
+d0
+51
+32
+2f
+90
+32
+b0
+69
+bc
+8b
+7c
+36
+f2
+c3
+00
+c7
+16
+5d
+6b
+19
+35
+3b
+a6
+83
+85
+df
+79
+b8
+c8
+b6
+7a
+36
+8e
+5a
+de
+32
+6f
+fc
+e7
+7e
+00
+d1
+f5
+d8
+88
+97
+d8
+46
+8d
+dd
+fe
+44
+75
+96
+84
+16
+53
+b7
+50
+f6
+82
+9b
+c6
+b3
+48
+45
+38
+42
+6c
+2e
+02
+d6
+82
+17
+3b
+02
+f4
+60
+1f
+be
+b7
+f1
+89
+cd
+5f
+8b
+c1
+90
+2d
+ac
+4a
+f5
+b1
+a6
+07
+11
+a7
+07
+e7
+e1
+93
+34
+57
+8e
+aa
+b5
+5b
+60
+5b
+20
+7c
+8f
+d2
+1e
+b6
+93
+04
+60
+c9
+7d
+9e
+02
+a1
+1b
+27
+ed
+f0
+69
+18
+17
+cb
+eb
+b9
+2a
+da
+97
+1d
+07
+3f
+81
+5f
+97
+16
+a8
+9e
+8d
+18
+b3
+a6
+7c
+3d
+78
+c6
+58
+7b
+cb
+95
+e4
+30
+e8
+14
+7a
+8a
+61
+0e
+50
+f1
+1b
+a2
+f4
+ba
+69
+22
+bc
+b7
+84
+f1
+c3
+73
+9e
+46
+76
+9a
+4a
+16
+7e
+73
+71
+5a
+aa
+b7
+50
+ce
+b6
+58
+0d
+f2
+ce
+ec
+5d
+64
+ae
+c0
+93
+bb
+01
+97
+84
+50
+1a
+b8
+d6
+67
+ec
+76
+3a
+bb
+5a
+13
+81
+53
+0e
+32
+56
+9b
+26
+85
+3f
+32
+1e
+37
+bc
+bc
+53
+ba
+44
+0c
+40
+28
+3f
+11
+c9
+5c
+6e
+2d
+f1
+c1
+1f
+82
+68
+32
+26
+50
+1d
+02
+8b
+60
+d9
+24
+36
+94
+38
+94
+90
+5c
+ff
+30
+83
+ed
+81
+e8
+82
+67
+a7
+3c
+ef
+ad
+83
+86
+07
+25
+df
+18
+17
+78
+6b
+b1
+58
+44
+24
+38
+c1
+c0
+2f
+63
+8f
+83
+14
+5c
+d6
+7b
+1e
+21
+e3
+d4
+09
+86
+9d
+41
+c8
+67
+e0
+71
+13
+50
+a6
+8d
+2a
+50
+f1
+ad
+93
+a7
+51
+c2
+d8
+c4
+e7
+73
+dd
+3b
+cb
+4a
+49
+90
+42
+c4
+31
+6c
+b3
+bc
+43
+bb
+90
+fb
+02
+bb
+fe
+b5
+b6
+52
+2f
+24
+9e
+59
+d7
+60
+76
+ee
+32
+f1
+eb
+ff
+0f
+92
+bf
+43
+e9
+52
+80
+32
+01
+98
+66
+20
+d5
+17
+d5
+15
+a2
+47
+b4
+4c
+73
+ca
+9a
+f5
+ee
+ad
+4a
+d0
+fc
+52
+ff
+d5
+bf
+17
+2c
+5e
+c4
+c3
+99
+ec
+ad
+e2
+50
+cf
+68
+45
+ca
+12
+e5
+8d
+1b
+0f
+6d
+b7
+c2
+23
+d5
+e5
+6c
+d9
+15
+63
+ad
+1f
+72
+da
+7c
+d0
+62
+2f
+79
+87
+d5
+9d
+98
+28
+f2
+85
+bc
+4d
+e8
+17
+e1
+67
+d6
+6a
+fd
+21
+60
+7e
+fe
+d9
+f0
+6e
+ec
+e8
+1f
+1e
+97
+37
+c9
+7f
+da
+0f
+0f
+19
+f6
+18
+2a
+26
+df
+a8
+d0
+54
+b9
+b7
+57
+e4
+db
+5b
+ce
+c8
+6c
+1a
+0d
+bd
+88
+66
+94
+4a
+b0
+2a
+5a
+30
+d4
+3c
+4c
+63
+0c
+64
+d7
+a5
+88
+ca
+a6
+6a
+8b
+4f
+9b
+dc
+5c
+58
+62
+98
+80
+97
+f6
+31
+b9
+3c
+b3
+94
+ae
+1a
+00
+02
+51
+59
+76
+d1
+5c
+3b
+0f
+4c
+d0
+54
+1f
+4c
+66
+85
+d5
+b9
+88
+20
+52
+e3
+7c
+33
+db
+ba
+76
+2f
+09
+bf
+1f
+08
+b6
+05
+95
+4f
+8d
+ff
+7c
+89
+9f
+18
+aa
+60
+74
+35
+0f
+d6
+a3
+77
+b9
+86
+a6
+d4
+0d
+fb
+1a
+f6
+75
+0c
+56
+bb
+fb
+05
+07
+31
+4e
+12
+0e
+3d
+5d
+9a
+e7
+d8
+f0
+34
+fc
+d9
+2f
+0e
+72
+e3
+18
+13
+31
+68
+19
+f8
+b6
+43
+5d
+34
+1d
+7a
+aa
+6c
+a5
+3f
+1e
+7c
+11
+3b
+25
+c1
+c4
+21
+62
+95
+b3
+b0
+c2
+1d
+c9
+1d
+0a
+83
+31
+50
+da
+8a
+13
+2e
+36
+ba
+85
+d4
+74
+fc
+17
+ac
+cc
+55
+67
+fb
+fb
+82
+c3
+2e
+21
+2e
+01
+61
+f9
+38
+7a
+86
+62
+b3
+4a
+10
+85
+ee
+08
+3e
+3b
+2f
+e1
+b0
+fc
+0b
+fc
+a2
+fa
+2b
+9f
+41
+64
+70
+0a
+bb
+f6
+7e
+ef
+be
+5e
+94
+c3
+83
+85
+48
+1d
+7c
+66
+dc
+c1
+11
+e8
+33
+55
+0d
+93
+ab
+c0
+ef
+07
+8d
+e7
+f6
+5b
+a3
+77
+b0
+ff
+cf
+8d
+11
+dd
+16
+5f
+f5
+be
+1c
+28
+21
+81
+b2
+16
+f9
+14
+3e
+1b
+32
+2c
+c2
+c2
+7a
+bc
+99
+5b
+c2
+21
+ea
+19
+2c
+85
+07
+b9
+05
+fd
+66
+8f
+7c
+7c
+41
+16
+38
+4f
+76
+23
+87
+7c
+e2
+b4
+7c
+1f
+d3
+a7
+5c
+74
+13
+63
+a9
+1e
+5b
+1f
+bb
+7e
+d6
+d8
+85
+ef
+99
+85
+7e
+96
+c0
+61
+1c
+f4
+e8
+d0
+49
+21
+5e
+19
+01
+8c
+5b
+1d
+df
+dd
+fa
+94
+77
+42
+0c
+9c
+e9
+b3
+f6
+bb
+67
+02
+35
+0a
+b4
+72
+df
+1b
+f9
+5f
+67
+34
+18
+71
+d7
+8c
+f2
+80
+e0
+aa
+d2
+f6
+54
+6b
+34
+62
+5a
+11
+3d
+9c
+ff
+f5
+26
+0d
+85
+76
+6c
+8e
+5a
+84
+fa
+8e
+13
+af
+54
+b7
+a4
+a8
+87
+df
+b9
+01
+35
+de
+14
+20
+80
+37
+72
+48
+69
+89
+f9
+b2
+6e
+57
+b4
+0d
+f3
+21
+b3
+4d
+1f
+ce
+45
+3a
+b1
+70
+05
+f5
+6d
+29
+d8
+d1
+9a
+59
+73
+3b
+fc
+f1
+b0
+81
+d2
+b8
+90
+ef
+52
+76
+36
+ce
+fe
+a2
+ef
+bd
+82
+11
+00
+b0
+23
+f3
+e3
+42
+d8
+3a
+97
+a0
+2f
+13
+05
+91
+d0
+52
+ec
+f0
+b0
+19
+c5
+fd
+db
+ef
+a6
+a3
+43
+7d
+50
+7d
+a6
+27
+8e
+e6
+ac
+2a
+cc
+da
+e4
+4d
+fa
+8d
+c7
+ed
+66
+b5
+78
+d3
+e8
+29
+03
+54
+19
+88
+bc
+61
+af
+4f
+8b
+17
+2c
+ea
+8f
+c8
+7d
+56
+4b
+ea
+7a
+9d
+92
+b4
+7a
+70
+f1
+9d
+8f
+22
+b4
+c9
+c4
+bd
+1d
+12
+ed
+b1
+01
+e2
+7b
+5f
+08
+bd
+86
+d5
+da
+fc
+ea
+54
+b8
+7d
+bf
+92
+9d
+2f
+09
+86
+e3
+ba
+30
+f6
+93
+c8
+39
+8b
+64
+9f
+8c
+0c
+5a
+3a
+fd
+0a
+8e
+e5
+db
+bd
+73
+05
+9b
+5a
+83
+2e
+a0
+cb
+db
+9e
+8c
+a5
+9b
+51
+4f
+e4
+9c
+a4
+aa
+ac
+7b
+ff
+02
+38
+52
+cd
+31
+75
+f7
+d1
+2f
+27
+77
+b7
+26
+e7
+14
+8c
+db
+d8
+39
+85
+c9
+9f
+6f
+85
+0b
+fc
+ee
+e5
+0c
+28
+02
+c7
+e7
+ba
+50
+7f
+72
+45
+8f
+42
+d2
+12
+1b
+58
+df
+51
+6d
+87
+18
+33
+11
+69
+02
+6a
+bc
+4b
+b8
+70
+07
+9a
+49
+e9
+fb
+f9
+82
+b1
+0f
+32
+23
+d3
+eb
+83
+0d
+a4
+8e
+93
+48
+95
+f6
+1a
+71
+5a
+df
+33
+90
+1a
+a8
+f9
+3c
+50
+eb
+c4
+08
+2c
+37
+31
+bb
+37
+70
+a8
+e9
+39
+fd
+ad
+4b
+19
+bd
+1d
+52
+21
+8f
+c7
+92
+74
+07
+fc
+65
+b5
+f1
+07
+6d
+2e
+58
+92
+ff
+3e
+b9
+10
+b9
+c6
+f1
+dd
+a1
+2d
+c9
+af
+cc
+6b
+d5
+8f
+de
+9d
+7b
+14
+fd
+9b
+e3
+1e
+cb
+65
+05
+74
+53
+e3
+52
+37
+61
+f7
+2e
+9e
+c1
+4e
+55
+ac
+58
+24
+e1
+02
+ec
+5c
+1d
+85
+43
+fa
+7c
+0f
+70
+ad
+56
+f0
+2d
+c9
+3f
+9d
+79
+ff
+4f
+b9
+1b
+a1
+4b
+2b
+21
+7f
+b7
+66
+f5
+6d
+81
+ff
+6e
+1d
+d6
+8e
+9c
+b5
+eb
+ac
+51
+7d
+fc
+c1
+42
+78
+28
+72
+9b
+56
+11
+9c
+9c
+6d
+6d
+c2
+c4
+bc
+c4
+46
+bc
+d9
+88
+6e
+d3
+19
+52
+3c
+e0
+5e
+9f
+1a
+b0
+48
+99
+c6
+b9
+97
+45
+5c
+63
+ec
+72
+ac
+41
+8a
+d0
+94
+87
+63
+c7
+01
+17
+a3
+23
+72
+1c
+90
+7d
+45
+d9
+cc
+ad
+79
+66
+2f
+9a
+a9
+ef
+0e
+13
+5d
+b0
+9b
+36
+63
+92
+80
+e7
+21
+a9
+ea
+7b
+26
+64
+33
+f8
+76
+d8
+46
+65
+92
+91
+d7
+50
+81
+87
+7c
+61
+03
+fa
+a6
+c9
+49
+f9
+01
+4e
+2a
+fb
+d8
+15
+be
+2f
+a0
+e5
+2f
+13
+26
+0b
+9f
+d5
+bb
+74
+6e
+18
+54
+b7
+03
+4b
+31
+33
+42
+da
+fa
+13
+96
+a3
+79
+e6
+b3
+e1
+e9
+18
+ac
+5b
+cc
+69
+e8
+58
+78
+c7
+dd
+b5
+22
+f0
+dd
+79
+6c
+de
+78
+26
+c3
+78
+98
+60
+f2
+3d
+b5
+08
+7e
+6a
+13
+86
+07
+57
+6a
+e2
+18
+19
+1b
+c7
+06
+ba
+ff
+45
+3e
+bd
+39
+3a
+b8
+f4
+97
+92
+d9
+52
+6e
+73
+ee
+19
+d6
+2c
+07
+a0
+e5
+ca
+d8
+a4
+48
+18
+ad
+cd
+51
+57
+2d
+f9
+8e
+e5
+29
+9a
+04
+00
+53
+89
+10
+c4
+52
+07
+1d
+23
+25
+35
+6d
+7a
+e4
+da
+94
+38
+2e
+e3
+4a
+76
+49
+1b
+f5
+00
+5a
+57
+26
+7f
+9f
+a4
+6b
+fc
+88
+47
+25
+35
+ea
+84
+36
+12
+2d
+fe
+37
+88
+53
+b4
+2a
+a9
+c9
+e4
+86
+c7
+fd
+f6
+f5
+d8
+c3
+e2
+31
+1c
+57
+2a
+d3
+1d
+38
+a8
+2e
+6d
+6b
+5b
+8d
+15
+8e
+a0
+6e
+76
+5c
+5d
+1c
+67
+25
+e9
+17
+a1
+cc
+0c
+12
+ea
+02
+a4
+80
+80
+6f
+28
+ea
+4d
+50
+0a
+5d
+ee
+d0
+1a
+78
+1b
+3b
+a2
+82
+1e
+3d
+e5
+fd
+db
+20
+e1
+3a
+9d
+1d
+56
+85
+bd
+c6
+a9
+05
+38
+cc
+68
+11
+6e
+0a
+24
+f2
+48
+c0
+d0
+73
+39
+7e
+c0
+29
+15
+da
+19
+79
+b6
+7c
+1b
+b0
+ff
+bb
+f4
+75
+fa
+39
+e8
+c6
+1c
+3d
+52
+4d
+ba
+ea
+8d
+51
+ca
+07
+36
+a8
+fa
+fc
+24
+39
+e8
+3d
+d6
+cb
+07
+43
+8e
+3a
+65
+aa
+26
+f2
+53
+0a
+17
+e4
+e0
+48
+65
+89
+ee
+df
+7c
+a8
+c7
+44
+f4
+59
+7c
+cd
+8a
+4a
+50
+83
+07
+38
+db
+8c
+73
+17
+79
+02
+62
+83
+0c
+e1
+d4
+fd
+f4
+6f
+99
+fe
+f6
+24
+78
+ba
+9a
+9f
+a4
+49
+7c
+76
+2a
+42
+b8
+ac
+63
+b3
+38
+d4
+74
+e2
+a6
+1c
+ec
+ae
+ec
+11
+7f
+f0
+17
+be
+0b
+da
+00
+bc
+9d
+e2
+cc
+27
+0a
+c3
+e4
+79
+5e
+fb
+50
+cc
+f9
+70
+36
+be
+93
+1e
+5a
+32
+e1
+03
+58
+89
+39
+c3
+ec
+fc
+6b
+f5
+10
+a1
+6a
+f6
+19
+ae
+b3
+ef
+ef
+9f
+ac
+68
+2e
+0d
+e3
+2e
+63
+52
+cd
+01
+fa
+6f
+00
+d5
+1b
+43
+d4
+2b
+5d
+c9
+43
+ba
+ba
+48
+43
+4d
+ee
+88
+48
+33
+1a
+87
+1a
+a3
+36
+0f
+49
+f2
+36
+e7
+60
+30
+03
+47
+aa
+d7
+90
+a5
+92
+f4
+10
+30
+8e
+d5
+a3
+76
+82
+eb
+97
+8c
+f3
+c0
+32
+d8
+54
+fc
+45
+1f
+c5
+f1
+09
+bc
+d8
+7a
+e2
+d8
+8e
+d2
+b2
+c8
+d0
+cd
+6c
+82
+2f
+7c
+8f
+93
+a4
+6f
+3e
+c5
+43
+06
+9c
+f4
+a6
+e2
+e6
+75
+19
+49
+13
+84
+eb
+5d
+a4
+73
+f8
+74
+42
+51
+35
+2b
+1a
+93
+81
+29
+52
+b7
+41
+0a
+f2
+00
+98
+d7
+c4
+46
+fe
+30
+cb
+26
+f0
+c7
+73
+fc
+b7
+81
+70
+ac
+ed
+e4
+84
+44
+70
+17
+da
+6d
+0c
+11
+5f
+1c
+ab
+10
+aa
+03
+cb
+9e
+17
+00
+cd
+77
+76
+e7
+55
+28
+ca
+04
+4c
+f0
+5b
+e3
+41
+86
+c0
+67
+14
+54
+74
+e2
+a7
+f3
+f0
+a4
+4c
+1f
+96
+f3
+13
+85
+3f
+7c
+80
+e7
+26
+0e
+a0
+da
+bb
+64
+23
+78
+41
+9c
+02
+aa
+c4
+ec
+79
+08
+1f
+31
+43
+41
+e5
+76
+ce
+d8
+93
+cc
+f7
+d5
+54
+02
+f3
+75
+f8
+7e
+cf
+90
+65
+a7
+c2
+f4
+2f
+9e
+74
+40
+68
+b9
+9c
+1c
+d5
+ad
+ef
+5a
+72
+67
+8e
+79
+38
+22
+1f
+4a
+47
+39
+71
+50
+83
+3d
+94
+9c
+17
+fb
+00
+fa
+ee
+0a
+03
+4a
+b5
+b4
+6c
+ad
+9d
+8f
+12
+07
+54
+26
+09
+f2
+59
+ab
+bf
+6a
+9b
+d8
+72
+38
+78
+32
+75
+65
+3a
+a8
+b0
+79
+94
+c4
+46
+01
+a4
+4a
+79
+a9
+bd
+0f
+3e
+d7
+11
+0a
+bd
+0f
+23
+a6
+13
+2f
+cb
+a0
+b9
+24
+f1
+90
+ec
+d8
+0e
+03
+73
+9b
+7c
+c1
+01
+1f
+e5
+9c
+82
+b9
+ba
+6b
+8b
+07
+8e
+f5
+5c
+a3
+06
+ad
+83
+0a
+e9
+1c
+44
+d5
+5e
+ad
+64
+d9
+b4
+74
+62
+e7
+d7
+67
+bf
+c7
+c5
+05
+9a
+a1
+47
+0e
+d2
+f5
+06
+3d
+3c
+25
+40
+b0
+1c
+62
+27
+2f
+56
+58
+03
+79
+21
+67
+61
+dd
+ac
+16
+4c
+ad
+f8
+11
+d7
+e6
+96
+1a
+6f
+44
+0b
+01
+b7
+1b
+95
+79
+5b
+12
+eb
+01
+15
+f0
+6a
+0d
+6f
+37
+c4
+45
+5d
+63
+bd
+5c
+ea
+ee
+1a
+d2
+57
+e0
+73
+50
+ac
+d9
+aa
+6c
+ed
+ff
+6a
+92
+4b
+dd
+a2
+a7
+ec
+ae
+f4
+4d
+e3
+92
+f3
+86
+8a
+97
+df
+2d
+3f
+9e
+43
+e4
+24
+11
+49
+b2
+e8
+b1
+46
+5c
+95
+fa
+a5
+85
+89
+60
+62
+37
+04
+e8
+dc
+55
+34
+ff
+9f
+0c
+82
+6a
+f5
+3d
+cd
+4b
+74
+9f
+18
+38
+da
+4c
+8e
+02
+3b
+da
+15
+9b
+d1
+3f
+f0
+c8
+af
+7a
+65
+4c
+68
+f5
+4c
+85
+b2
+e2
+a4
+3a
+fb
+21
+88
+86
+b9
+7c
+3f
+e6
+9f
+b3
+f6
+2a
+48
+03
+b2
+60
+d9
+26
+00
+82
+30
+d1
+43
+c7
+96
+ba
+d3
+44
+a3
+a3
+c7
+10
+fb
+fb
+75
+40
+c1
+18
+b0
+a5
+46
+1d
+bc
+85
+c9
+f4
+33
+8a
+a3
+ca
+94
+77
+9b
+62
+5c
+ff
+c1
+46
+ba
+01
+d7
+a9
+a7
+16
+06
+6f
+f2
+5e
+78
+14
+da
+44
+26
+29
+0e
+25
+58
+43
+c5
+d3
+1b
+b8
+f8
+af
+c3
+43
+c9
+e5
+d8
+1d
+1e
+7b
+54
+79
+25
+3f
+d8
+42
+d8
+57
+26
+45
+67
+c1
+f0
+24
+d7
+81
+5c
+eb
+ff
+09
+a7
+9e
+d4
+53
+08
+c3
+fc
+55
+c3
+77
+a6
+54
+27
+c7
+bc
+c6
+cd
+92
+80
+4c
+67
+ec
+f6
+3a
+10
+06
+17
+e2
+01
+4e
+be
+56
+9e
+1f
+56
+68
+d5
+e7
+7f
+b6
+12
+5f
+8a
+2a
+f3
+67
+38
+2b
+fd
+ce
+69
+d6
+0c
+6c
+d8
+83
+8f
+6d
+e5
+34
+ec
+c1
+9a
+ef
+a0
+7e
+02
+60
+fc
+c2
+dc
+3d
+76
+99
+fd
+4b
+be
+f7
+c2
+68
+a4
+49
+a2
+b3
+d4
+b0
+a3
+a8
+dd
+20
+af
+7c
+79
+10
+94
+23
+e0
+05
+78
+a9
+74
+d6
+8c
+2d
+74
+5b
+0d
+00
+09
+bb
+b8
+63
+35
+b8
+e9
+8c
+19
+19
+79
+4c
+a3
+b5
+e5
+51
+73
+41
+52
+34
+86
+b6
+21
+d4
+0f
+b4
+20
+99
+77
+ba
+0a
+7e
+b1
+61
+da
+36
+60
+4a
+42
+f5
+6c
+8b
+7f
+71
+e4
+2e
+83
+f2
+07
+36
+f5
+74
+fc
+d3
+04
+a8
+87
+7f
+d2
+9b
+68
+8d
+b4
+de
+7a
+6d
+33
+68
+7c
+a4
+37
+d4
+e3
+68
+d4
+07
+8f
+7f
+9d
+fe
+73
+fe
+f1
+a0
+26
+60
+2c
+24
+42
+2a
+67
+53
+ae
+a9
+22
+90
+48
+84
+95
+56
+1c
+3d
+55
+17
+6b
+cf
+55
+76
+61
+55
+c1
+65
+c9
+fb
+a5
+ee
+b1
+35
+30
+7f
+08
+04
+68
+bd
+8d
+6b
+d1
+49
+34
+13
+4e
+03
+89
+ab
+f4
+1d
+b1
+51
+8f
+c1
+77
+14
+f1
+40
+24
+d7
+cd
+8c
+28
+63
+46
+bb
+df
+ce
+73
+61
+4c
+74
+27
+b5
+de
+b7
+3f
+57
+83
+dd
+19
+09
+35
+6f
+d6
+e9
+87
+81
+b9
+98
+6a
+60
+88
+e3
+02
+38
+44
+9d
+d2
+a0
+c9
+70
+72
+06
+79
+3d
+94
+38
+80
+84
+92
+c7
+44
+38
+1b
+38
+b0
+f3
+97
+d3
+51
+e1
+7d
+5a
+6d
+2e
+e1
+3f
+b5
+d0
+ca
+59
+65
+82
+21
+5c
+8b
+19
+af
+c4
+8f
+dc
+35
+41
+ba
+1e
+e7
+d8
+e4
+91
+72
+64
+36
+b7
+3d
+c6
+36
+f6
+a7
+ad
+96
+be
+d7
+eb
+f4
+03
+3e
+af
+58
+c9
+dd
+3c
+12
+d2
+32
+ef
+28
+f1
+ad
+6b
+7d
+2c
+1a
+1b
+d6
+3b
+4a
+e0
+0f
+21
+e1
+c7
+7c
+ed
+5d
+1e
+4a
+56
+2c
+ba
+f2
+c2
+d0
+42
+30
+b6
+88
+29
+93
+06
+4f
+ba
+53
+a5
+57
+d5
+90
+f3
+17
+d2
+0f
+20
+1b
+4a
+ad
+6e
+5f
+bc
+c5
+f4
+68
+bf
+d6
+9c
+66
+3c
+20
+56
+1f
+df
+5d
+46
+c4
+67
+5b
+a2
+db
+59
+5c
+7b
+84
+f2
+1a
+63
+5d
+b7
+15
+60
+4d
+45
+1b
+ad
+43
+db
+78
+2c
+d2
+c6
+a4
+68
+70
+88
+76
+dc
+7a
+68
+95
+9e
+df
+45
+15
+af
+39
+de
+21
+d7
+b2
+e5
+ee
+10
+eb
+68
+b7
+61
+34
+0a
+5b
+03
+0f
+93
+fe
+bc
+4c
+60
+e2
+e7
+01
+43
+51
+27
+eb
+bd
+66
+06
+f6
+97
+ec
+da
+e9
+da
+7e
+68
+0f
+2c
+9a
+32
+ba
+d2
+43
+aa
+dd
+2b
+8d
+75
+03
+bd
+10
+df
+50
+07
+70
+91
+0b
+e4
+3c
+65
+38
+24
+73
+3f
+df
+50
+3a
+2f
+e8
+12
+68
+95
+b9
+6a
+32
+8d
+5b
+2f
+3e
+8b
+f7
+8f
+e0
+b9
+c8
+0e
+a3
+c5
+7e
+eb
+94
+3d
+05
+03
+bc
+bd
+5e
+71
+5f
+6a
+36
+36
+9d
+b3
+6b
+98
+ce
+8d
+34
+5a
+84
+dc
+cd
+20
+ce
+c5
+e4
+43
+ad
+ed
+4d
+a8
+c4
+76
+bc
+3c
+3b
+0e
+cb
+7a
+54
+05
+fc
+37
+5f
+eb
+fa
+61
+81
+4b
+83
+4c
+5c
+10
+5a
+fd
+9c
+e1
+e9
+3f
+26
+9a
+82
+06
+d7
+75
+c2
+7a
+e6
+39
+b5
+c5
+56
+7c
+88
+93
+14
+ed
+12
+35
+24
+c6
+d9
+90
+db
+89
+e8
+ed
+ef
+f5
+b9
+2d
+37
+25
+24
+91
+16
+9d
+93
+f9
+bc
+90
+8c
+83
+42
+83
+4d
+be
+ef
+e9
+33
+5e
+43
+1f
+4a
+af
+46
+06
+72
+9c
+90
+5b
+9c
+e0
+0e
+2d
+8f
+0f
+ef
+05
+ab
+36
+8c
+c4
+93
+7c
+d8
+a9
+1f
+52
+94
+a3
+10
+0e
+15
+2c
+9c
+d7
+7f
+1a
+45
+64
+2e
+81
+20
+84
+11
+c4
+e5
+86
+94
+fb
+a6
+d9
+d1
+ec
+08
+12
+25
+6e
+f6
+1f
+b4
+99
+bf
+16
+0f
+d8
+0e
+f8
+a8
+9f
+91
+19
+79
+64
+aa
+ed
+a9
+17
+f5
+f6
+1d
+90
+a4
+1c
+f7
+c0
+a3
+b3
+1b
+4a
+90
+01
+df
+ef
+6e
+a5
+4c
+a1
+77
+8f
+11
+0f
+21
+a2
+8f
+ac
+d7
+79
+45
+77
+38
+6a
+97
+77
+2c
+51
+8c
+79
+20
+23
+67
+45
+b1
+72
+82
+28
+47
+f7
+f3
+1b
+9f
+7e
+52
+20
+69
+66
+17
+aa
+7a
+a1
+16
+39
+09
+b5
+10
+6d
+e2
+08
+44
+8c
+9f
+3b
+01
+84
+5a
+ee
+83
+a5
+3b
+19
+4b
+3b
+23
+c4
+94
+c4
+aa
+da
+ad
+3c
+3e
+6a
+68
+8d
+b5
+21
+8b
+91
+e5
+ac
+a7
+f1
+c1
+c7
+e6
+da
+10
+3f
+23
+0a
+ac
+f4
+f1
+96
+83
+28
+a3
+d1
+0e
+d2
+67
+99
+56
+fb
+53
+3a
+d8
+d5
+d1
+4f
+67
+8d
+33
+2d
+e1
+4d
+79
+1f
+ff
+fe
+3c
+63
+3c
+34
+09
+95
+05
+bb
+84
+3a
+f2
+5e
+1d
+94
+fa
+29
+fd
+aa
+64
+91
+f2
+62
+47
+4a
+86
+ed
+a3
+97
+7f
+95
+1f
+e3
+ff
+b6
+6c
+5e
+fb
+bf
+4b
+9e
+bb
+56
+de
+70
+80
+4c
+19
+a3
+05
+9e
+39
+9b
+9b
+bd
+86
+33
+5f
+53
+19
+90
+72
+aa
+a0
+63
+e1
+ef
+1f
+8a
+1c
+dc
+a6
+7c
+d0
+f1
+eb
+1f
+b2
+db
+2f
+88
+17
+97
+06
+11
+74
+3c
+4b
+a0
+4a
+58
+19
+ad
+b7
+0a
+d5
+5c
+a3
+fd
+56
+3a
+be
+58
+f6
+a4
+4c
+a9
+6a
+0c
+ae
+5b
+13
+b2
+ad
+7c
+44
+fd
+86
+b4
+3e
+4a
+54
+d3
+1c
+02
+fb
+73
+fd
+5e
+58
+e3
+64
+5d
+25
+e8
+6f
+27
+4c
+50
+96
+29
+25
+27
+c1
+a2
+12
+ef
+77
+c9
+c7
+fc
+81
+59
+f4
+35
+84
+c7
+ed
+92
+9b
+8e
+ef
+94
+53
+a3
+c1
+2b
+5d
+0a
+e2
+a1
+24
+11
+8a
+fa
+0a
+5e
+da
+e2
+6c
+42
+02
+10
+06
+9b
+77
+48
+fb
+a7
+30
+83
+0a
+46
+63
+af
+15
+36
+e9
+b6
+b1
+fd
+6b
+9e
+bf
+d9
+6e
+be
+6e
+04
+67
+1d
+53
+e7
+a1
+b5
+2d
+13
+de
+e8
+86
+5c
+a4
+11
+c5
+a3
+31
+7e
+88
+86
+e8
+a3
+27
+a3
+b8
+2c
+a4
+b2
+92
+bf
+17
+4a
+86
+25
+c7
+15
+9d
+3b
+9f
+6a
+bc
+53
+34
+96
+d7
+cd
+67
+01
+88
+64
+0d
+f0
+e3
+99
+87
+2c
+78
+47
+f0
+d7
+f9
+3e
+63
+f5
+ef
+2d
+bb
+81
+ea
+ad
+85
+a3
+50
+83
+8a
+f6
+b5
+48
+cc
+1c
+21
+d4
+85
+ca
+58
+40
+6d
+2b
+96
+f9
+3d
+00
+6b
+cf
+fe
+2e
+cb
+a1
+d2
+11
+57
+28
+11
+ef
+d5
+ec
+76
+e6
+37
+da
+6f
+d1
+93
+d4
+16
+07
+7f
+2f
+f3
+1d
+1a
+a2
+b8
+27
+62
+16
+86
+66
+72
+eb
+b0
+c0
+93
+8d
+87
+15
+77
+76
+76
+f1
+a7
+92
+80
+f1
+c3
+bb
+1f
+b4
+c0
+0a
+33
+36
+5e
+0a
+5b
+d4
+c6
+be
+bd
+70
+62
+ae
+d3
+08
+a2
+01
+03
+df
+04
+2e
+a9
+ee
+a9
+c0
+53
+37
+88
+7a
+b6
+1b
+e9
+20
+b1
+89
+49
+a1
+f5
+70
+17
+24
+dc
+fe
+27
+81
+22
+75
+e6
+fe
+9a
+08
+1f
+8e
+7d
+08
+27
+c5
+41
+14
+92
+74
+af
+bd
+3a
+73
+b9
+50
+4f
+a6
+63
+8e
+16
+9d
+e3
+8b
+a7
+33
+72
+44
+13
+0d
+2b
+23
+cc
+76
+ea
+e9
+81
+c3
+12
+ad
+e6
+a0
+25
+c4
+cf
+d7
+9b
+03
+e0
+d1
+ff
+9b
+4b
+1d
+18
+0f
+4f
+f9
+7a
+55
+bf
+c8
+b0
+88
+6b
+b4
+bc
+0f
+4c
+b5
+11
+56
+63
+c0
+d7
+e1
+48
+93
+33
+71
+52
+1a
+d7
+5a
+bf
+0c
+a9
+b4
+5b
+dd
+a2
+24
+1c
+09
+f0
+12
+b2
+92
+6b
+af
+a4
+dc
+d8
+d1
+ec
+f5
+2f
+b3
+e9
+13
+e4
+cc
+18
+bc
+6d
+62
+0e
+6b
+53
+dd
+63
+2b
+9c
+83
+f9
+dd
+ca
+84
+1c
+e6
+c5
+be
+56
+43
+6b
+78
+1b
+4e
+36
+98
+60
+f3
+fc
+21
+20
+77
+89
+08
+7e
+9e
+b8
+c5
+75
+94
+3a
+f8
+e8
+30
+39
+12
+be
+34
+3b
+22
+01
+e8
+b1
+b8
+19
+a4
+d7
+6f
+3c
+a2
+61
+f9
+f7
+00
+6d
+7b
+7e
+df
+f1
+d0
+8c
+43
+5e
+6a
+e4
+a1
+58
+a9
+78
+f3
+c1
+51
+ca
+ee
+01
+bb
+66
+60
+aa
+66
+16
+24
+b6
+5d
+42
+dc
+92
+f8
+a9
+5b
+64
+cf
+80
+14
+cd
+2d
+49
+d6
+4f
+91
+95
+83
+c9
+82
+0f
+db
+96
+ed
+2f
+ea
+0a
+47
+d1
+c2
+1b
+7d
+1c
+38
+05
+55
+e6
+b5
+c1
+01
+30
+4a
+fe
+a7
+c4
+7f
+86
+a8
+ac
+06
+fa
+9d
+53
+98
+fc
+3b
+2f
+83
+6d
+16
+67
+8e
+94
+ea
+7b
+87
+ef
+65
+67
+dd
+16
+fd
+38
+ea
+94
+6e
+7c
+86
+5c
+63
+73
+f3
+ff
+f4
+75
+08
+bc
+06
+af
+d2
+57
+a5
+65
+de
+4b
+00
+60
+d2
+76
+3f
+1a
+23
+ac
+83
+4a
+b5
+ca
+ed
+37
+08
+ac
+26
+03
+55
+1c
+41
+4e
+26
+70
+45
+e9
+48
+58
+37
+28
+29
+50
+11
+5c
+92
+93
+a8
+43
+3b
+aa
+a0
+72
+69
+0d
+31
+1b
+f8
+de
+b7
+86
+62
+ea
+dc
+e4
+a1
+c8
+fe
+7c
+27
+19
+de
+9e
+77
+87
+71
+85
+af
+0a
+2e
+6c
+29
+ba
+59
+39
+d1
+fe
+13
+3f
+3b
+1f
+9e
+93
+bd
+65
+21
+a1
+38
+e2
+72
+ff
+9b
+26
+c9
+c2
+b8
+24
+b0
+97
+c7
+7b
+b2
+9b
+5d
+1a
+6a
+d0
+22
+55
+3a
+d5
+2a
+87
+89
+fe
+4c
+a9
+e6
+fb
+ac
+54
+c8
+93
+f0
+46
+89
+0d
+24
+e1
+a6
+48
+2d
+fc
+53
+39
+b4
+8a
+2c
+38
+65
+76
+59
+8c
+85
+82
+1c
+2b
+6b
+20
+03
+30
+a1
+d1
+dd
+01
+b6
+d2
+8c
+76
+51
+07
+d4
+cb
+97
+08
+08
+4e
+8b
+c2
+87
+57
+2f
+bb
+75
+40
+bd
+2f
+fc
+af
+32
+05
+55
+3b
+38
+47
+7b
+e7
+a0
+a2
+d8
+64
+61
+bc
+6b
+5a
+8c
+e8
+4f
+1d
+64
+23
+d3
+72
+76
+48
+4a
+ab
+b7
+2c
+c6
+05
+2b
+37
+e9
+94
+7f
+c1
+b2
+55
+13
+30
+72
+5d
+2b
+0a
+5d
+b5
+74
+3f
+c8
+12
+ef
+1b
+bf
+fd
+30
+9e
+53
+b6
+ab
+9e
+31
+a6
+f5
+5e
+33
+a4
+1e
+6f
+8a
+67
+0f
+eb
+6c
+5b
+0d
+c4
+8b
+34
+4d
+52
+02
+06
+d2
+78
+88
+40
+6e
+16
+88
+52
+ab
+56
+71
+46
+06
+e3
+8f
+87
+ef
+f6
+a3
+ab
+54
+5c
+c2
+96
+a9
+97
+69
+e0
+d5
+ee
+4c
+9c
+62
+ba
+62
+60
+58
+4b
+70
+a1
+81
+e0
+bc
+ff
+a8
+a0
+8d
+60
+98
+65
+e2
+10
+e8
+d1
+09
+bc
+3b
+6c
+06
+0f
+d3
+55
+d4
+82
+c0
+27
+58
+4c
+d1
+0b
+a8
+d7
+5f
+23
+f9
+c0
+77
+b1
+94
+29
+a8
+3a
+87
+7f
+e0
+72
+ff
+d6
+16
+05
+c7
+f4
+ff
+3c
+3e
+a2
+27
+59
+34
+f0
+da
+34
+c2
+29
+3f
+e4
+d6
+14
+5e
+f2
+89
+a9
+16
+10
+7a
+bd
+cc
+a4
+2f
+e5
+51
+b2
+bd
+78
+35
+b9
+d8
+dd
+d6
+bd
+39
+d0
+0b
+a2
+2f
+02
+c6
+95
+df
+11
+bd
+18
+5a
+50
+36
+1d
+02
+9e
+43
+63
+32
+f6
+78
+23
+18
+ec
+b9
+34
+be
+73
+f8
+be
+f9
+1b
+44
+ea
+70
+e3
+3e
+4d
+99
+a5
+75
+1f
+36
+64
+46
+eb
+e7
+64
+1d
+69
+8e
+51
+63
+63
+f8
+2a
+64
+84
+a9
+32
+0f
+b0
+39
+42
+e0
+94
+75
+13
+9d
+06
+59
+e2
+3d
+56
+d8
+65
+02
+4e
+0e
+48
+f8
+bb
+25
+91
+35
+a3
+1d
+cc
+c1
+f2
+b6
+58
+e8
+05
+fc
+e3
+25
+12
+f9
+2e
+c5
+c1
+ce
+53
+25
+bd
+4b
+63
+27
+26
+cd
+8f
+c2
+2b
+03
+1b
+db
+5f
+b7
+ae
+0c
+6d
+77
+16
+f3
+c9
+88
+2f
+12
+0e
+69
+bf
+b5
+c5
+b4
+43
+cd
+88
+04
+92
+e0
+2a
+e7
+83
+df
+e3
+92
+6d
+7e
+42
+e4
+43
+16
+a0
+dd
+3d
+b1
+a3
+09
+0a
+3e
+55
+78
+aa
+11
+64
+d1
+b2
+cf
+dc
+53
+3e
+85
+73
+be
+a3
+24
+46
+91
+cf
+2a
+0c
+95
+fb
+ae
+a2
+90
+2b
+a3
+a0
+08
+65
+d4
+b4
+c2
+8f
+19
+6d
+e4
+2b
+7d
+a6
+0b
+9c
+51
+3f
+a4
+81
+ad
+f1
+19
+a9
+36
+71
+97
+01
+c7
+f3
+5d
+2f
+51
+48
+ac
+b9
+0a
+c1
+a3
+25
+0d
+0b
+bc
+20
+84
+38
+18
+e0
+b1
+57
+22
+62
+02
+df
+85
+a5
+ea
+5b
+37
+63
+95
+e5
+ed
+45
+6f
+7a
+ae
+63
+e0
+fe
+b4
+06
+75
+d5
+9e
+b1
+18
+8a
+85
+6f
+e5
+11
+2c
+fb
+a0
+59
+6a
+a1
+0b
+85
+fd
+67
+ee
+14
+60
+75
+10
+47
+eb
+05
+73
+c0
+da
+d5
+cb
+9e
+56
+5e
+0e
+be
+94
+03
+fe
+d2
+b9
+9d
+f6
+63
+68
+b1
+fa
+ce
+35
+f2
+18
+f3
+bf
+74
+e6
+a1
+32
+64
+4b
+ad
+0c
+43
+bc
+f2
+cb
+94
+dc
+c4
+d5
+80
+43
+74
+27
+82
+d7
+72
+88
+67
+ab
+b7
+02
+97
+7c
+43
+94
+2c
+d5
+c8
+e8
+b7
+0d
+dd
+ac
+12
+ea
+02
+38
+d4
+88
+8b
+ad
+72
+d6
+ae
+53
+74
+8f
+70
+55
+b8
+d4
+b6
+3c
+7f
+b7
+d9
+e1
+9d
+c7
+e4
+af
+95
+06
+e6
+5d
+e3
+9c
+9f
+06
+2d
+82
+ee
+68
+3c
+8b
+a5
+51
+a0
+79
+44
+16
+a7
+de
+2b
+c4
+2d
+1a
+36
+43
+96
+86
+1e
+74
+22
+8b
+03
+e7
+45
+dd
+be
+1a
+10
+27
+6f
+87
+e8
+b3
+d2
+17
+e9
+5c
+15
+cc
+43
+db
+c5
+94
+38
+98
+72
+d8
+8e
+a9
+87
+94
+46
+d9
+45
+fb
+b1
+6b
+85
+3d
+96
+f1
+ee
+b7
+e0
+10
+7b
+1d
+ab
+10
+e3
+77
+a7
+44
+a6
+cd
+cf
+4d
+81
+f5
+f1
+74
+41
+3e
+f3
+52
+e3
+17
+84
+78
+13
+ae
+86
+32
+57
+de
+ec
+64
+c5
+f6
+a0
+46
+0b
+d2
+a5
+c5
+53
+c4
+fe
+74
+cd
+0f
+b2
+e7
+e9
+51
+43
+86
+ce
+12
+7c
+88
+b7
+48
+ca
+b0
+70
+a0
+fb
+13
+76
+e5
+f4
+9b
+2c
+3c
+54
+4b
+88
+10
+10
+54
+d4
+91
+22
+ac
+d0
+0a
+72
+f5
+82
+2d
+88
+db
+38
+17
+bc
+ec
+d7
+4f
+bb
+e1
+62
+c1
+37
+3d
+89
+5d
+29
+49
+27
+87
+9f
+65
+cd
+fe
+4d
+7d
+04
+d5
+7d
+49
+bf
+95
+75
+6f
+e6
+e4
+2d
+17
+0f
+83
+66
+ec
+38
+da
+eb
+09
+a0
+d6
+37
+b5
+34
+56
+a4
+f8
+59
+94
+61
+e2
+87
+44
+63
+7f
+ca
+7e
+46
+a7
+03
+16
+65
+77
+58
+fc
+f1
+36
+37
+fe
+b4
+a5
+9a
+59
+01
+ab
+0d
+ac
+54
+c9
+8a
+24
+99
+07
+2f
+22
+2c
+b7
+c6
+1a
+ad
+df
+b6
+6d
+9c
+30
+d3
+af
+50
+32
+b8
+f4
+62
+32
+a6
+22
+bf
+71
+f2
+bb
+0d
+fc
+b7
+93
+2c
+d1
+5e
+c9
+b3
+a7
+1f
+5d
+2b
+e9
+06
+03
+bb
+35
+2e
+a6
+23
+f4
+88
+32
+93
+f0
+ee
+98
+e4
+45
+8e
+c3
+a1
+0a
+d5
+fc
+eb
+c4
+18
+e4
+ad
+8b
+ee
+d4
+62
+e5
+2e
+3c
+46
+10
+6e
+b7
+e6
+9b
+5b
+48
+23
+eb
+fb
+0a
+d2
+61
+a8
+13
+fb
+d6
+47
+6e
+22
+db
+ae
+8a
+b8
+54
+ad
+ac
+f7
+20
+b0
+7b
+cd
+0f
+05
+46
+56
+de
+75
+37
+f8
+a5
+12
+f0
+aa
+a8
+d3
+31
+2b
+99
+25
+09
+0a
+08
+a6
+48
+9a
+01
+b4
+56
+42
+29
+f9
+c4
+c5
+72
+36
+ea
+28
+10
+cf
+b6
+d6
+36
+73
+ea
+5e
+b9
+c1
+1c
+d2
+95
+47
+3a
+a2
+40
+8b
+fc
+4b
+6c
+1d
+51
+50
+9a
+52
+d5
+2b
+d1
+c0
+34
+b7
+40
+97
+cd
+ac
+8f
+7c
+b8
+a8
+54
+49
+0a
+b6
+bb
+a2
+a3
+11
+75
+97
+fa
+86
+f6
+5f
+44
+fa
+4b
+66
+b4
+12
+07
+0b
+33
+f5
+4b
+a5
+ae
+fe
+10
+97
+bc
+f1
+dc
+92
+51
+42
+25
+f4
+56
+7a
+02
+e5
+cf
+49
+fa
+b2
+4f
+a2
+3d
+2d
+f6
+f3
+6f
+80
+b9
+3c
+30
+90
+57
+26
+75
+74
+50
+0d
+d3
+e8
+87
+4d
+31
+2f
+a6
+b4
+6b
+72
+e3
+8f
+26
+e3
+6e
+25
+fd
+53
+5b
+22
+95
+08
+8f
+85
+a0
+b5
+1a
+ed
+cf
+0b
+34
+b4
+89
+ba
+03
+31
+f0
+ea
+c2
+63
+7e
+41
+74
+61
+cf
+0a
+9a
+0e
+90
+4c
+65
+c2
+06
+1a
+d3
+9c
+47
+c0
+e7
+5b
+21
+e7
+38
+9c
+cd
+e4
+63
+13
+7d
+d4
+65
+bb
+6b
+a4
+12
+78
+e5
+6f
+17
+34
+dc
+f4
+a1
+40
+8b
+a6
+b6
+af
+35
+64
+f1
+69
+13
+c6
+26
+32
+31
+f7
+c1
+e5
+9d
+10
+0f
+e9
+4b
+9d
+74
+45
+ed
+c6
+52
+0b
+33
+34
+48
+bd
+3e
+b2
+34
+d2
+e5
+1f
+7c
+13
+55
+07
+59
+58
+e4
+19
+a2
+e1
+17
+fa
+69
+5a
+28
+04
+91
+5b
+68
+1b
+b2
+f5
+6d
+35
+85
+32
+10
+82
+32
+27
+d0
+52
+ad
+ea
+b6
+63
+dc
+1c
+3e
+a8
+8d
+b7
+df
+ba
+8e
+22
+2f
+73
+91
+1c
+ed
+4f
+f3
+f6
+60
+69
+68
+f3
+6c
+bb
+f4
+86
+6b
+38
+d8
+9a
+41
+4c
+61
+64
+aa
+5a
+da
+18
+2c
+da
+89
+d7
+4e
+ff
+19
+fa
+01
+c2
+6d
+5d
+c3
+5b
+6d
+da
+bc
+d3
+26
+bf
+e9
+48
+b0
+b1
+10
+ee
+9b
+d8
+7f
+d6
+f4
+bc
+2e
+ce
+ee
+0c
+9d
+39
+e2
+8d
+11
+2b
+fc
+7f
+45
+73
+46
+6f
+5e
+3c
+8d
+5e
+7e
+8e
+53
+95
+85
+ec
+69
+68
+15
+76
+03
+6d
+25
+33
+71
+28
+55
+b0
+f9
+ac
+74
+30
+6b
+bd
+f9
+dd
+e2
+18
+84
+b8
+dc
+61
+ac
+a9
+8b
+9c
+b3
+2d
+42
+c3
+b6
+dd
+61
+3a
+a4
+2d
+08
+09
+44
+77
+60
+26
+40
+00
+4e
+a5
+a8
+c8
+82
+51
+be
+4b
+81
+19
+9e
+78
+a2
+a3
+d7
+e4
+a7
+63
+3c
+59
+a4
+59
+6e
+93
+66
+31
+88
+ff
+66
+78
+32
+eb
+8e
+ae
+21
+b8
+63
+83
+30
+d3
+4a
+a6
+45
+8e
+18
+bd
+10
+26
+cd
+5b
+e7
+6e
+68
+ad
+c0
+0a
+d7
+54
+7c
+fb
+15
+35
+a3
+6e
+ce
+bd
+25
+6e
+25
+a7
+dd
+c6
+dd
+92
+28
+75
+83
+30
+0b
+97
+5b
+30
+91
+18
+8c
+8d
+61
+6f
+3b
+de
+c8
+02
+f2
+10
+d1
+0e
+8d
+0f
+06
+fc
+b2
+66
+18
+eb
+c4
+64
+7b
+52
+a6
+7e
+e2
+e4
+2d
+26
+07
+86
+c3
+15
+93
+73
+e5
+6b
+3a
+16
+9f
+bd
+75
+53
+73
+de
+3a
+5b
+dd
+97
+66
+51
+41
+a3
+bf
+d1
+89
+87
+13
+83
+aa
+47
+18
+ba
+90
+83
+bc
+d5
+35
+55
+f8
+b0
+46
+2c
+10
+00
+0a
+56
+c9
+be
+35
+f9
+02
+ef
+8f
+fa
+46
+b2
+a7
+0f
+96
+23
+46
+6d
+42
+26
+e5
+a4
+a0
+cb
+05
+10
+21
+09
+9f
+e6
+17
+22
+2d
+c6
+b6
+9b
+79
+c9
+44
+31
+33
+92
+5b
+4a
+56
+d1
+35
+95
+b3
+46
+b4
+34
+3f
+44
+11
+22
+30
+a3
+41
+c3
+b7
+6c
+d0
+59
+9b
+5c
+ff
+70
+89
+6f
+4e
+c7
+91
+d3
+c9
+81
+3b
+9e
+64
+7a
+3e
+52
+3d
+d7
+6b
+d5
+b8
+d8
+a2
+e0
+2a
+57
+a2
+2c
+4a
+d9
+66
+56
+7f
+2e
+fb
+52
+6e
+2b
+96
+0c
+d5
+e8
+53
+84
+df
+e6
+36
+87
+74
+f4
+15
+e6
+78
+92
+c4
+30
+ee
+61
+aa
+55
+40
+00
+00
+40
+05
+00
+01
+06
+22
+01
+00
+00
+00
+00
+00
+00
+00
+00
+3c
+62
+8e
+8b
+1b
+05
+20
+02
+00
+00
+00
+80
+00
+00
+00
+3c
+00
+80
+04
+00
+00
+00
+00
+00
+00
+00
+10
+00
+00
+00
+40
+00
+00
+00
+00
+00
+00
+89
+05
+12
+00
+e0
+44
+30
+00
+00
+00
+00
+08
+00
+aa
+55
+08
+00
+0e
+47
+04
+85
+5a
+01
+02
+04
+22
+1f
+aa
+55
+05
+00
+65
+46
+02
+05
+ff
+0b
+0a
+aa
+55
+1a
+00
+8d
+48
+0e
+08
+0f
+ff
+ff
+ff
+16
+17
+ff
+01
+01
+01
+00
+ff
+ff
+12
+ff
+ff
+ff
+ff
+ff
+01
+00
+ff
+03
+ff
+aa
+55
+02
+00
+ac
+48
+00
+0a
+aa
+55
+03
+00
+af
+48
+05
+02
+05
+aa
+55
+01
+00
+b4
+48
+14
+aa
+55
+01
+00
+b2
+48
+02
+aa
+55
+02
+00
+b6
+48
+02
+06
+aa
+55
+01
+00
+b9
+48
+0a
+aa
+55
+01
+00
+be
+48
+0a
+aa
+55
+02
+00
+bb
+48
+58
+02
+aa
+55
+02
+00
+51
+46
+58
+02
+aa
+55
+01
+00
+54
+46
+64
+aa
+55
+02
+00
+1a
+47
+05
+00
+aa
+55
+01
+00
+53
+46
+64
+aa
+55
+02
+00
+4f
+46
+b0
+04
+aa
+55
+01
+00
+19
+47
+0a
+aa
+55
+02
+00
+1e
+47
+70
+17
+aa
+55
+01
+00
+cf
+43
+08
+aa
+55
+01
+00
+16
+47
+02
+aa
+55
+01
+00
+94
+40
+01
+aa
+55
+01
+00
+c0
+40
+20
+aa
+55
+01
+00
+8b
+48
+20
+aa
+55
+03
+00
+2e
+47
+00
+00
+00
+aa
+55
+08
+00
+78
+46
+00
+34
+ff
+ff
+ff
+ff
+ff
+ff
+aa
+55
+07
+00
+86
+46
+34
+ff
+ff
+ff
+ff
+ff
+ff
+aa
+55
+07
+00
+93
+46
+34
+ff
+ff
+ff
+ff
+ff
+ff
+aa
+55
+0f
+00
+4f
+4e
+03
+00
+20
+20
+00
+03
+00
+22
+22
+00
+03
+00
+30
+23
+00
+aa
+55
+09
+00
+fd
+49
+00
+08
+00
+07
+00
+00
+00
+00
+00
+aa
+55
+01
+00
+be
+4a
+03
+aa
+55
+01
+00
+bd
+4a
+07
+aa
+55
+04
+00
+bf
+4a
+ff
+ff
+1e
+1e
+aa
+55
+01
+00
+60
+4e
+05
+aa
+55
+01
+00
+02
+45
+1e
+aa
+55
+06
+00
+08
+45
+24
+62
+81
+a1
+51
+61
+aa
+55
+05
+00
+fa
+45
+01
+0f
+0f
+0f
+0f
+aa
+55
+01
+00
+38
+47
+02
+aa
+55
+02
+00
+a2
+45
+c0
+12
+aa
+55
+01
+00
+bf
+48
+09
+aa
+55
+04
+00
+d0
+48
+c0
+5d
+00
+00
+aa
+55
+06
+00
+c0
+48
+6a
+63
+00
+80
+bb
+00
+aa
+55
+04
+00
+d4
+48
+f8
+bb
+00
+00
+aa
+55
+06
+00
+c6
+48
+1c
+1f
+01
+00
+77
+01
+aa
+55
+04
+00
+d8
+48
+00
+77
+01
+00
+aa
+55
+01
+00
+55
+46
+94
+aa
+55
+03
+00
+c6
+45
+00
+48
+60
+aa
+55
+02
+00
+34
+46
+05
+00
+aa
+55
+02
+00
+32
+46
+50
+00
+aa
+55
+02
+00
+1c
+47
+64
+00
+aa
+55
+01
+00
+06
+47
+01
+aa
+55
+01
+00
+3c
+47
+02
+aa
+55
+06
+00
+dd
+42
+34
+47
+29
+51
+31
+41
+aa
+55
+01
+00
+97
+43
+07
+aa
+55
+08
+00
+c4
+43
+fb
+00
+48
+08
+fb
+00
+48
+08
+aa
+55
+02
+00
+7d
+47
+96
+00
+aa
+55
+02
+00
+74
+47
+1b
+00
+aa
+55
+02
+00
+9f
+43
+1f
+00
+aa
+55
+04
+00
+76
+47
+23
+00
+27
+00
+aa
+55
+02
+00
+34
+43
+39
+00
+aa
+55
+02
+00
+7a
+47
+13
+00
+aa
+55
+06
+00
+be
+4c
+36
+00
+2e
+00
+32
+00
+aa
+55
+0c
+00
+4c
+43
+1f
+02
+01
+05
+03
+03
+12
+18
+03
+19
+c2
+03
+aa
+55
+11
+00
+5f
+47
+06
+ff
+06
+00
+03
+00
+80
+09
+09
+41
+49
+20
+4d
+6f
+75
+73
+65
+aa
+55
+0b
+00
+6c
+43
+1f
+09
+09
+41
+49
+20
+4d
+6f
+75
+73
+65
+aa
+55
+09
+00
+6d
+42
+08
+41
+49
+20
+4d
+6f
+75
+73
+65
+aa
+55
+09
+00
+1e
+4a
+08
+41
+49
+20
+4d
+6f
+75
+73
+65
+aa
+55
+08
+00
+d5
+42
+06
+00
+09
+00
+20
+00
+2c
+01
+aa
+55
+06
+00
+59
+47
+03
+12
+18
+ff
+00
+00
+aa
+55
+03
+00
+fe
+46
+00
+50
+00
+aa
+55
+02
+00
+f4
+43
+80
+3a
+aa
+55
+01
+00
+fd
+43
+80
+aa
+55
+02
+00
+9b
+4e
+00
+34
+aa
+55
+01
+00
+67
+4e
+ff
+aa
+55
+02
+00
+6c
+4e
+00
+00
+aa
+55
+04
+00
+6f
+4e
+20
+20
+00
+40
+aa
+55
+02
+00
+68
+4e
+00
+00
+aa
+55
+01
+00
+4a
+08
+ff
+aa
+55
+01
+00
+41
+41
+01
+aa
+55
+01
+00
+e9
+45
+07
+aa
+55
+02
+00
+07
+46
+43
+47
+aa
+55
+02
+00
+57
+46
+85
+90
+aa
+55
+02
+00
+5a
+46
+75
+80
+aa
+55
+01
+00
+59
+46
+63
+aa
+55
+01
+00
+3e
+46
+7d
+aa
+55
+01
+00
+1a
+44
+01
+aa
+55
+01
+00
+1d
+44
+02
+aa
+55
+01
+00
+1f
+44
+0a
+aa
+55
+01
+00
+1e
+44
+09
+aa
+55
+06
+00
+44
+46
+94
+00
+78
+00
+80
+00
+aa
+55
+01
+00
+4c
+46
+0c
+aa
+55
+01
+00
+4e
+44
+01
+aa
+55
+04
+00
+b7
+4c
+25
+20
+15
+10
+aa
+55
+11
+00
+d0
+45
+01
+06
+1a
+3a
+4d
+00
+13
+23
+4c
+0f
+2c
+31
+43
+11
+15
+36
+48
+aa
+55
+17
+00
+53
+48
+01
+75
+38
+42
+73
+58
+98
+1d
+a3
+f4
+a9
+f4
+fc
+5a
+a6
+38
+15
+91
+9c
+51
+65
+e6
+9e
+aa
+55
+01
+00
+72
+48
+01
+aa
+55
+0c
+00
+e5
+4c
+0b
+59
+43
+2d
+41
+49
+2d
+4d
+6f
+75
+73
+65
+aa
+55
+10
+00
+c4
+4c
+06
+00
+06
+00
+2b
+00
+90
+01
+06
+00
+09
+00
+20
+00
+2c
+01
+aa
+55
+01
+00
+d5
+4c
+08
+aa
+55
+01
+00
+d9
+4c
+0f
+aa
+55
+01
+00
+dd
+4c
+0e
+aa
+55
+01
+00
+27
+44
+00
+aa
+55
+04
+00
+72
+4c
+26
+0a
+f5
+0c
+aa
+55
+74
+01
+c8
+4a
+ff
+ff
+ff
+ff
+02
+04
+06
+08
+ff
+ff
+ff
+ff
+02
+04
+06
+08
+07
+00
+00
+00
+08
+00
+00
+00
+09
+00
+00
+00
+0a
+00
+00
+00
+0b
+00
+00
+00
+0c
+00
+00
+00
+0d
+00
+00
+00
+0e
+00
+00
+00
+10
+00
+00
+00
+11
+00
+00
+00
+13
+00
+00
+00
+15
+00
+00
+00
+17
+00
+00
+00
+19
+00
+00
+00
+1c
+00
+00
+00
+1f
+00
+00
+00
+22
+00
+00
+00
+25
+00
+00
+00
+29
+00
+00
+00
+2d
+00
+00
+00
+32
+00
+00
+00
+37
+00
+00
+00
+3c
+00
+00
+00
+42
+00
+00
+00
+49
+00
+00
+00
+50
+00
+00
+00
+58
+00
+00
+00
+61
+00
+00
+00
+6b
+00
+00
+00
+76
+00
+00
+00
+82
+00
+00
+00
+8f
+00
+00
+00
+9d
+00
+00
+00
+ad
+00
+00
+00
+be
+00
+00
+00
+d1
+00
+00
+00
+e6
+00
+00
+00
+fd
+00
+00
+00
+17
+01
+00
+00
+33
+01
+00
+00
+51
+01
+00
+00
+73
+01
+00
+00
+98
+01
+00
+00
+c1
+01
+00
+00
+ee
+01
+00
+00
+20
+02
+00
+00
+56
+02
+00
+00
+92
+02
+00
+00
+d4
+02
+00
+00
+1c
+03
+00
+00
+6c
+03
+00
+00
+c3
+03
+00
+00
+24
+04
+00
+00
+8e
+04
+00
+00
+02
+05
+00
+00
+83
+05
+00
+00
+10
+06
+00
+00
+ab
+06
+00
+00
+56
+07
+00
+00
+12
+08
+00
+00
+e0
+08
+00
+00
+c3
+09
+00
+00
+bd
+0a
+00
+00
+d0
+0b
+00
+00
+ff
+0c
+00
+00
+4c
+0e
+00
+00
+ba
+0f
+00
+00
+4c
+11
+00
+00
+07
+13
+00
+00
+ee
+14
+00
+00
+06
+17
+00
+00
+54
+19
+00
+00
+dc
+1b
+00
+00
+a5
+1e
+00
+00
+b6
+21
+00
+00
+15
+25
+00
+00
+ca
+28
+00
+00
+df
+2c
+00
+00
+5b
+31
+00
+00
+4b
+36
+00
+00
+b9
+3b
+00
+00
+b2
+41
+00
+00
+44
+48
+00
+00
+7e
+4f
+00
+00
+71
+57
+00
+00
+2f
+60
+00
+00
+ce
+69
+00
+00
+62
+74
+00
+00
+ff
+7f
+00
+00
+aa
+55
+01
+00
+48
+41
+0c
+aa
+55
+06
+00
+c3
+40
+35
+3f
+64
+db
+7b
+3b
+aa
+55
+01
+00
+a7
+40
+20
+aa
+55
+03
+00
+c9
+40
+00
+08
+b4
+aa
+55
+01
+00
+99
+40
+18
+aa
+55
+01
+00
+1c
+41
+4d
+aa
+55
+0c
+00
+16
+00
+00
+00
+20
+00
+00
+00
+00
+00
+00
+00
+00
+00
+aa
+55
+05
+00
+60
+41
+08
+0e
+05
+03
+00
+aa
+55
+01
+00
+6a
+41
+20
+aa
+55
+02
+00
+9a
+40
+00
+0c
+aa
+55
+05
+00
+43
+41
+ff
+04
+00
+00
+08
+aa
+55
+01
+00
+fa
+01
+5a
+aa
+55
+01
+00
+27
+44
+00
+aa
+55
+04
+00
+23
+44
+00
+07
+ff
+07
+aa
+55
+01
+00
+4f
+44
+a0
+aa
+55
+02
+00
+52
+44
+bc
+02
+aa
+55
+02
+00
+50
+44
+90
+01
+aa
+55
+02
+00
+54
+44
+03
+09
+aa
+55
+03
+00
+49
+41
+88
+40
+ff
+aa
+55
+02
+00
+9c
+40
+49
+41
+aa
+55
+11
+00
+05
+49
+03
+04
+01
+02
+20
+2a
+3f
+15
+14
+1b
+28
+0e
+8a
+8b
+83
+84
+88
+aa
+55
+5a
+00
+19
+49
+09
+5a
+26
+34
+19
+04
+09
+00
+ff
+ff
+09
+5a
+0d
+f0
+1d
+e3
+7d
+d2
+ff
+ff
+09
+5a
+0d
+10
+1d
+ed
+7d
+80
+ff
+ff
+1b
+35
+28
+b4
+29
+46
+2a
+96
+2b
+8c
+2c
+6e
+2d
+64
+38
+5f
+39
+0f
+3a
+32
+3b
+47
+42
+10
+ff
+ff
+54
+2e
+55
+f2
+61
+f4
+63
+70
+75
+52
+76
+41
+77
+ed
+78
+23
+79
+46
+7a
+e5
+7c
+48
+7e
+77
+7f
+01
+0b
+00
+7f
+00
+09
+00
+ff
+ff
+aa
+55
+26
+00
+73
+4e
+09
+5a
+ff
+27
+ab
+40
+b3
+56
+9b
+e6
+a8
+12
+a9
+c0
+be
+e6
+a5
+af
+a0
+21
+a1
+02
+b8
+10
+b9
+0b
+a7
+ff
+b5
+d0
+b6
+00
+ff
+00
+09
+00
+ff
+ff
+aa
+55
+0c
+00
+d1
+49
+05
+b9
+09
+5a
+0b
+72
+0c
+52
+09
+00
+ff
+ff
+aa
+55
+40
+00
+91
+49
+09
+5a
+0d
+10
+0e
+c5
+5b
+9a
+10
+38
+11
+42
+28
+28
+41
+23
+49
+39
+4a
+b0
+4b
+a0
+4c
+90
+4d
+70
+09
+00
+ff
+ff
+09
+5a
+06
+02
+09
+69
+0d
+48
+0e
+9f
+0f
+ba
+09
+00
+ff
+ff
+09
+a5
+26
+34
+19
+04
+60
+07
+69
+04
+7d
+20
+7e
+00
+09
+00
+ff
+ff
+aa
+55
+1c
+00
+dd
+49
+09
+a5
+46
+34
+6a
+c0
+69
+24
+09
+00
+ff
+ff
+09
+5a
+0b
+f3
+09
+00
+ff
+ff
+09
+a5
+0b
+f3
+09
+00
+ff
+ff
+aa
+55
+14
+00
+9e
+4e
+09
+a5
+46
+34
+19
+04
+60
+07
+69
+04
+68
+c3
+7d
+20
+7e
+00
+09
+00
+ff
+ff
+aa
+55
+03
+00
+6c
+4e
+a5
+2e
+00
+55
+aa
+aa
+55
+10
+f8
+ff
+20
+20
+00
+40
+c0
+30
+00
+04
+c0
+30
+80
+27
+20
+60
+00
+00
+6f
+e0
+cc
+bb
+20
+3a
+00
+07
+20
+20
+00
+17
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+c7
+c2
+70
+47
+c3
+00
+6f
+e0
+cc
+e5
+1f
+e0
+fe
+02
+67
+e0
+c7
+c4
+70
+47
+c5
+16
+6f
+20
+cc
+e5
+d8
+c0
+4c
+e6
+d8
+a0
+47
+c6
+20
+40
+7c
+dc
+6f
+e0
+cc
+e5
+1f
+e0
+fe
+04
+67
+e0
+c5
+9f
+20
+60
+00
+00
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+cc
+76
+70
+4c
+77
+00
+6f
+e0
+cc
+e5
+1f
+e0
+fe
+02
+67
+e0
+cc
+78
+70
+4c
+79
+16
+6f
+20
+cc
+e5
+d8
+c0
+4c
+e6
+d8
+a0
+4c
+7a
+20
+40
+7c
+dc
+68
+48
+cc
+e5
+18
+40
+84
+04
+da
+20
+4c
+76
+20
+20
+05
+0d
+6f
+e0
+cc
+bb
+20
+3a
+00
+2a
+20
+20
+00
+33
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+c7
+c2
+70
+47
+c3
+00
+70
+47
+c4
+02
+70
+47
+c5
+14
+70
+47
+c6
+01
+70
+45
+9f
+05
+20
+60
+00
+00
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+cc
+76
+70
+4c
+77
+00
+70
+4c
+78
+02
+70
+4c
+79
+14
+70
+4c
+7a
+01
+d8
+40
+00
+05
+da
+20
+4c
+76
+20
+20
+05
+0d
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+20
+20
+00
+40
+c0
+28
+00
+04
+c0
+28
+80
+1c
+20
+60
+00
+00
+6f
+e0
+cc
+bb
+20
+3a
+00
+07
+20
+20
+00
+11
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+c7
+c2
+70
+47
+c3
+00
+70
+47
+c4
+02
+70
+47
+c5
+12
+6f
+e0
+cc
+e3
+67
+e0
+c7
+c6
+70
+45
+9f
+05
+20
+60
+00
+00
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+cc
+76
+70
+4c
+77
+00
+70
+4c
+78
+02
+70
+4c
+79
+12
+6f
+e0
+cc
+e3
+67
+e0
+cc
+7a
+d8
+40
+00
+05
+da
+20
+4c
+76
+20
+20
+05
+0d
+6f
+e0
+cc
+bb
+20
+3a
+00
+1f
+20
+20
+00
+2b
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+c7
+c2
+70
+47
+c3
+00
+70
+47
+c4
+03
+70
+47
+c5
+13
+6f
+e0
+c7
+7c
+67
+e0
+c7
+c6
+6f
+e0
+cc
+e4
+e7
+e0
+80
+05
+70
+45
+9f
+06
+20
+60
+00
+00
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+cc
+76
+70
+4c
+77
+00
+70
+4c
+78
+03
+70
+4c
+79
+13
+6f
+e0
+c7
+7c
+67
+e0
+cc
+7a
+6f
+e0
+cc
+e4
+e7
+e0
+80
+05
+d8
+40
+00
+06
+da
+20
+4c
+76
+20
+20
+05
+0d
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+20
+20
+00
+40
+c0
+20
+00
+04
+c0
+20
+80
+21
+20
+60
+00
+00
+6f
+e0
+cc
+bb
+20
+3a
+00
+07
+20
+20
+00
+13
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+c7
+c2
+70
+47
+c3
+00
+70
+47
+c4
+30
+70
+47
+c5
+10
+70
+45
+9f
+33
+df
+20
+00
+1f
+d8
+c0
+48
+53
+d8
+a0
+47
+c6
+20
+40
+7c
+dc
+20
+20
+04
+e5
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+cc
+76
+70
+4c
+77
+00
+70
+4c
+78
+30
+70
+4c
+79
+10
+df
+20
+00
+1f
+d8
+c0
+48
+53
+d8
+a0
+4c
+7a
+20
+40
+7c
+dc
+20
+40
+04
+e5
+d8
+40
+00
+34
+da
+20
+4c
+76
+20
+20
+05
+0d
+6f
+e0
+cc
+bb
+20
+3a
+00
+24
+20
+20
+00
+30
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+c7
+c2
+70
+47
+c3
+00
+70
+47
+c4
+03
+70
+47
+c5
+11
+6f
+e0
+c6
+a2
+67
+e0
+c7
+c6
+6f
+e0
+cc
+e1
+e7
+e0
+80
+05
+70
+45
+9f
+06
+20
+60
+00
+00
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+cc
+76
+70
+4c
+77
+00
+70
+4c
+78
+03
+70
+4c
+79
+11
+6f
+e0
+c6
+a2
+67
+e0
+cc
+7a
+6f
+e0
+cc
+e1
+e7
+e0
+80
+05
+d8
+40
+00
+06
+da
+20
+4c
+76
+20
+20
+05
+0d
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+20
+20
+00
+40
+c0
+18
+00
+03
+20
+60
+00
+00
+6f
+e0
+cc
+bb
+20
+3a
+00
+0d
+6f
+e0
+c5
+a0
+79
+20
+7e
+04
+67
+e0
+cc
+76
+70
+4c
+77
+ff
+d8
+40
+00
+02
+da
+20
+4c
+76
+20
+20
+05
+0d
+20
+60
+00
+00
+70
+45
+9f
+02
+6f
+e0
+c5
+a0
+79
+20
+7e
+04
+67
+e0
+c7
+c2
+70
+47
+c3
+ff
+20
+60
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+20
+20
+00
+40
+c0
+10
+00
+03
+20
+60
+00
+00
+6f
+e0
+c5
+77
+c0
+03
+00
+0c
+c0
+08
+00
+0e
+c0
+08
+80
+10
+c0
+09
+00
+12
+c0
+09
+80
+16
+c0
+0b
+00
+19
+c0
+0a
+00
+1b
+20
+60
+00
+00
+d8
+e0
+00
+04
+20
+20
+04
+05
+d8
+e0
+00
+06
+20
+20
+04
+05
+70
+4c
+e1
+01
+20
+20
+03
+9b
+d8
+c0
+45
+75
+20
+40
+03
+d2
+d8
+e0
+00
+08
+20
+20
+04
+05
+70
+4c
+e4
+01
+d8
+e0
+00
+09
+20
+20
+04
+05
+d8
+e0
+00
+0c
+20
+20
+04
+05
+70
+4e
+5e
+00
+d8
+c0
+45
+75
+20
+40
+03
+9d
+d8
+e0
+00
+0a
+20
+20
+04
+05
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+20
+20
+00
+40
+c0
+08
+00
+05
+c0
+08
+80
+18
+c0
+09
+00
+24
+20
+60
+00
+00
+20
+40
+00
+24
+20
+40
+56
+40
+20
+40
+00
+10
+6f
+e0
+ce
+5e
+20
+5a
+00
+14
+6f
+e0
+c6
+a2
+67
+e0
+cc
+e2
+d8
+40
+00
+08
+da
+20
+48
+6a
+da
+40
+00
+82
+20
+20
+6c
+d7
+d8
+40
+00
+01
+da
+20
+4e
+5e
+da
+40
+00
+99
+20
+20
+6c
+d7
+d8
+40
+00
+0f
+da
+20
+4e
+4f
+da
+40
+00
+8a
+20
+20
+6c
+d7
+6f
+e0
+c5
+f9
+c0
+02
+d9
+8c
+c0
+00
+80
+1c
+20
+20
+59
+75
+6f
+e4
+47
+0e
+c2
+9f
+00
+20
+c2
+98
+00
+20
+20
+20
+59
+83
+6f
+e1
+45
+ed
+67
+e1
+45
+f5
+70
+45
+f9
+05
+20
+20
+35
+0a
+d8
+40
+03
+34
+da
+20
+06
+f2
+da
+40
+00
+00
+6f
+e1
+4e
+9b
+20
+20
+6c
+da
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+20
+20
+00
+40
+c0
+00
+00
+05
+c0
+00
+80
+0b
+c0
+01
+00
+15
+20
+60
+00
+00
+6f
+e4
+47
+0e
+c2
+9f
+59
+4b
+6f
+e0
+c6
+78
+c0
+00
+59
+3a
+20
+40
+02
+e4
+20
+20
+4d
+fa
+20
+40
+4d
+89
+58
+00
+4d
+00
+67
+e1
+43
+43
+58
+00
+00
+50
+67
+e1
+43
+45
+58
+00
+06
+f2
+67
+e1
+42
+f9
+70
+42
+e3
+46
+70
+46
+38
+0f
+20
+60
+00
+00
+20
+40
+67
+ff
+20
+40
+4d
+4e
+20
+40
+4d
+53
+20
+40
+58
+fc
+20
+40
+00
+20
+70
+45
+e1
+01
+70
+44
+4e
+01
+70
+0e
+a2
+00
+70
+48
+fa
+01
+70
+48
+ef
+10
+20
+60
+00
+00
+70
+45
+e7
+4a
+6f
+e2
+4c
+b7
+67
+e2
+45
+e3
+20
+60
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+54
+34
+ff
+1e
+f0
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+01
+00
+02
+00
+28
+02
+00
+18
+02
+00
+02
+03
+28
+01
+0a
+03
+00
+02
+00
+2a
+14
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+04
+00
+02
+03
+28
+01
+02
+05
+00
+02
+01
+2a
+02
+c2
+03
+06
+00
+02
+03
+28
+01
+02
+07
+00
+02
+04
+2a
+08
+06
+00
+06
+00
+64
+00
+2c
+01
+08
+00
+02
+00
+28
+02
+01
+18
+09
+00
+02
+03
+28
+01
+20
+0a
+00
+02
+05
+2a
+00
+0b
+00
+02
+02
+29
+02
+00
+00
+0c
+00
+02
+00
+28
+02
+0a
+18
+0d
+00
+02
+03
+28
+01
+02
+0e
+00
+02
+29
+2a
+06
+59
+69
+43
+68
+69
+70
+0f
+00
+02
+03
+28
+01
+02
+10
+00
+02
+50
+2a
+07
+02
+8a
+24
+bb
+c0
+01
+00
+11
+00
+02
+00
+28
+02
+0f
+18
+12
+00
+02
+03
+28
+01
+12
+13
+00
+02
+19
+2a
+01
+64
+14
+00
+02
+02
+29
+02
+00
+00
+15
+00
+02
+03
+28
+01
+04
+16
+00
+02
+4c
+2a
+00
+17
+00
+02
+00
+28
+02
+12
+18
+18
+00
+02
+03
+28
+01
+06
+19
+00
+02
+4e
+2a
+01
+01
+1a
+00
+02
+03
+28
+01
+12
+1b
+00
+02
+4d
+2a
+08
+00
+00
+00
+00
+00
+00
+00
+00
+1c
+00
+02
+02
+29
+02
+00
+00
+1d
+00
+02
+08
+29
+02
+02
+01
+1e
+00
+02
+03
+28
+01
+1a
+1f
+00
+02
+4d
+2a
+07
+00
+00
+00
+00
+00
+00
+00
+20
+00
+02
+02
+29
+02
+00
+00
+21
+00
+02
+08
+29
+02
+01
+01
+22
+00
+02
+03
+28
+01
+12
+23
+00
+02
+4d
+2a
+02
+00
+00
+24
+00
+02
+02
+29
+02
+00
+00
+25
+00
+02
+08
+29
+02
+05
+01
+26
+00
+02
+03
+28
+01
+12
+27
+00
+02
+4d
+2a
+02
+00
+00
+28
+00
+02
+02
+29
+02
+00
+00
+29
+00
+02
+08
+29
+02
+04
+01
+2a
+00
+02
+03
+28
+01
+0e
+2b
+00
+02
+4d
+2a
+02
+00
+00
+2c
+00
+02
+08
+29
+02
+02
+02
+2d
+00
+02
+03
+28
+01
+12
+2e
+00
+02
+4d
+2a
+02
+00
+00
+2f
+00
+02
+02
+29
+02
+00
+00
+30
+00
+02
+08
+29
+02
+c0
+01
+31
+00
+02
+03
+28
+01
+12
+32
+00
+02
+4d
+2a
+02
+00
+00
+33
+00
+02
+02
+29
+02
+00
+00
+34
+00
+02
+08
+29
+02
+cc
+01
+35
+00
+02
+03
+28
+01
+0e
+36
+00
+02
+4d
+2a
+02
+00
+00
+37
+00
+02
+08
+29
+02
+c0
+02
+38
+00
+02
+03
+28
+01
+1a
+39
+00
+02
+33
+2a
+08
+00
+00
+00
+00
+00
+00
+00
+00
+3a
+00
+02
+02
+29
+02
+01
+00
+3b
+00
+02
+03
+28
+01
+02
+3c
+00
+02
+4a
+2a
+04
+01
+01
+00
+03
+3d
+00
+02
+03
+28
+01
+02
+3e
+00
+02
+4b
+2a
+20
+01
+05
+0c
+09
+01
+a1
+01
+85
+05
+15
+00
+25
+01
+75
+01
+95
+18
+0a
+83
+01
+09
+ea
+09
+e9
+09
+e2
+09
+b6
+09
+b5
+09
+cd
+09
+b7
+0a
+23
+02
+0a
+8a
+01
+0a
+94
+01
+0a
+2a
+02
+0a
+92
+01
+0a
+21
+02
+0a
+24
+02
+0a
+07
+03
+0a
+ae
+01
+09
+70
+09
+6f
+09
+30
+09
+b8
+0a
+25
+02
+0a
+26
+02
+0a
+27
+02
+81
+02
+c0
+05
+01
+09
+06
+a1
+01
+85
+02
+75
+01
+95
+08
+05
+07
+19
+e0
+29
+e7
+15
+00
+25
+01
+81
+02
+95
+01
+75
+08
+81
+03
+95
+05
+75
+01
+05
+08
+19
+01
+29
+05
+91
+02
+95
+01
+75
+03
+91
+03
+95
+06
+75
+08
+15
+00
+26
+ff
+00
+05
+07
+19
+00
+2a
+ff
+00
+81
+00
+c0
+05
+01
+09
+02
+a1
+01
+85
+01
+09
+01
+a1
+00
+05
+09
+19
+01
+29
+08
+15
+00
+25
+01
+75
+01
+95
+08
+81
+02
+05
+01
+09
+30
+09
+31
+16
+01
+f8
+26
+ff
+07
+75
+10
+95
+02
+81
+06
+09
+38
+15
+81
+25
+7f
+75
+08
+95
+01
+81
+06
+05
+0c
+0a
+38
+02
+95
+01
+81
+06
+c0
+c0
+05
+01
+09
+80
+a1
+01
+85
+04
+15
+00
+25
+01
+75
+01
+95
+03
+19
+81
+29
+83
+81
+02
+95
+01
+75
+05
+81
+03
+c0
+06
+01
+ff
+09
+01
+a1
+01
+15
+00
+26
+ff
+00
+75
+08
+85
+c0
+95
+3f
+09
+02
+81
+00
+95
+3f
+09
+03
+91
+02
+85
+cc
+95
+3f
+09
+04
+81
+00
+95
+04
+09
+05
+91
+02
+c0
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+
Index: output/memmap.format
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/output/memmap.format	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/output/memmap.format	(working copy)
@@ -0,0 +1,2140 @@
+0x0000 mem_le_adv_transmit
+0x0001 mem_le_adv_waitcnt
+0x0002 mem_le_adv_rcv
+0x0003 mem_le_req_rcv
+0x0004 mem_le_scanrsp_rcv
+0x0005 mem_le_conn_rcv
+0x0006 mem_current_context
+0x0007 mem_le_ch_mapped
+0x0008 mem_last_freq
+0x0009 mem_rssi
+0x000a mem_context_ptr
+0x000c mem_rx_window
+0x000e mem_lpm_adjust
+0x000f mem_sync_clke
+0x0015 mem_lpm_current_mult
+0x0016 mem_gpio_wakeup_cfg
+0x0022 mem_clkn_bt
+0x0026 mem_clke_bt
+0x002a mem_dpll_clkn
+0x002e mem_slot_offset
+0x0030 mem_loadcode_times
+0x0031 mem_select_list_item
+0x0032 mem_temp_reconn_record
+0x0032 mem_record_bt_mode
+0x0033 mem_list_item_ptr
+0x0035 mem_rssi_hex
+0x0036 mem_param_tx_setup
+0x0038 mem_param_rf_setup
+0x003a mem_param_conn_access
+0x003c mem_param_clke_cal
+0x003e mem_param_pll_setup
+0x0040 mem_param_rx_setup
+0x0042 mem_param_dpll_start_delay
+0x0044 mem_param_rt_rthalfslot
+0x0046 mem_param_clke_cal_le_1m
+0x0048 mem_param_clke_cal_le_2m
+0x004a mem_param_clke_cal_le_coded
+0x004c mem_le_rxbuf
+0x0150 mem_le_mic
+0x0154 mem_le_peer_mic
+0x0158 mem_le_mrand
+0x0168 mem_le_state
+0x0169 mem_le_mode
+0x016a mem_le_tsniff
+0x016c mem_le_anchor
+0x0170 mem_le_clk_offset
+0x0176 mem_le_receive_window
+0x0178 mem_le_plap
+0x017e mem_le_conn_handle
+0x017f mem_le_arq
+0x0180 mem_le_ch
+0x0181 mem_le_hop
+0x0182 mem_le_event_count
+0x0184 mem_le_supervision_timer
+0x0188 mem_le_instant
+0x018a mem_le_channels
+0x018b mem_le_op
+0x018c mem_le_access
+0x0190 mem_le_crcinit
+0x0193 mem_le_window_size
+0x0194 mem_le_slave_latency
+0x0196 mem_le_superto
+0x0198 mem_le_channel_map
+0x019d mem_le_rx_phy
+0x019e mem_le_tx_phy
+0x019f mem_le_update_new_param
+0x01a8 mem_le_sk
+0x01b8 mem_le_peer_sca
+0x01b9 mem_le_err_code
+0x01ba mem_le_ll_pairing_fail_reason
+0x01bb mem_ucode_status
+0x01bc mem_spid_tbuf
+0x01bd mem_iicd_tbuf
+0x01bd mem_addr_hi
+0x01be mem_addr_mi
+0x01bf mem_addr_lo
+0x01c0 mem_iicd_addr
+0x01c1 mem_spid_rbuf
+0x01c5 mem_ucode_buf
+0x01c7 mem_ucode_len
+0x01c9 mem_sched_addr
+0x01cb mem_ucode_keybuf
+0x01db mem_otp_temp
+0x01fb mem_app_evt_timer_count
+0x01fc mem_input_store
+0x020c mem_ec_loopc
+0x020e mem_aes_cmac_data_length
+0x020f mem_dat
+0x026f mem_ax_256//32 bytes
+0x028f mem_ay_256// 32 bytes
+0x02af mem_az_256// 32 bytes
+0x02cf mem_bx_256// 32 bytes
+0x02ef mem_by_256// 31 bytes
+0x030f mem_bz_256//32 bytes
+0x030f mem_tmp1
+0x030f memahbak
+0x0327 mem_tmp5
+0x032f mem_cx_256//32 bytes
+0x034f mem_cy_256// 32 bytes
+0x036e mem_cy5_256// 1 byte
+0x036f mem_cz_256// 32 bytes
+0x038f mem_k_256//32 bytes
+0x03af mem_tmp1_256//32 bytes
+0x03cf mem_tmp5_256
+0x03ef mem_tmp2_256
+0x040f mem_tmp3_256
+0x040f mem_t1_256
+0x042f mem_tmp0_256
+0x042f mem_t0_256
+0x044f mem_t2_256
+0x046f mem_t3_256
+0x048f mem_t7_256
+0x04af mem_p
+0x04c7 mem_a
+0x04df mem_b
+0x04f7 mem_gx
+0x050f mem_gy
+0x0527 memh0
+0x0547 mem_p_256
+0x0567 mem_a_256
+0x0587 mem_gx_256
+0x05a7 mem_gy_256
+0x05c7 mem_le_slat
+0x05d7 mem_sp_state_start
+0x05d7 mem_sp_dhkey_invalid
+0x05d8 mem_gkey
+0x05dc mem_sp_state_end
+0x05dc mem_le_pubkey_remote_x_256
+0x05fc mem_le_pubkey_remote_y_256
+0x061c mem_le_dhkey_256
+0x063c mem_sp_confirm_remote
+0x064c mem_ipc_skip_continue_proc
+0x064d mem_fifo_temp
+0x064e mem_pdatatemp
+0x0656 mem_temp//8 bytes
+0x065e mem_timeup// 4 bytes
+0x0662 mem_rega//4 bytes
+0x0666 mem_regb//4 bytes
+0x066a mem_regc//3 bytes
+0x066d mem_contr//2 bytes
+0x066f mem_contw//2 bytes
+0x0671 mem_contus
+0x0673 mem_contue
+0x0675 mem_contu
+0x0677 mem_queue
+0x0679 mem_loopcnt
+0x067b mem_saved_gpio_in
+0x067f mem_module_rx_error_data_buffer
+0x067f mem_le_adv_channel_map_temp
+0x067f mem_le_data_len_temp//1byte
+0x067f mem_event_cmd_response_content//2byte
+0x067f mem_le_prand//16byte
+0x067f mem_AES_CMAC_k//16 bytes
+0x067f mem_regext_index//1 bytes
+0x067f mem_temp_block0
+0x0680 mem_le_data_temp//15bytes
+0x0680 mem_temp_block1
+0x068f mem_le_tx_buf_temp//48byte
+0x068f mem_le_aes_128//16byte
+0x068f mem_regext//64 bytes
+0x068f mem_AES_CMAC_k1//16 bytes
+0x068f mem_temp_block2
+0x069f mem_AES_CMAC_k2//16 bytes
+0x069f mem_temp_block3
+0x06af mem_AES_CMAC_temp// 16 bytes
+0x06af mem_temp_block4
+0x06bf mem_AES_CMAC_M_last// 16 bytes
+0x06bf mem_module_uart_cmd
+0x06c0 mem_module_uart_opcode
+0x06c1 mem_module_uart_len
+0x06c2 mem_module_temp_nl_discard_packet
+0x06c3 mem_temp_block5
+0x06cf mem_le_mackey//16 bytes
+0x06cf mem_app_receive_temp
+0x06cf mem_key_value_temp
+0x06d1 mem_key_value
+0x06d3 mem_key_value_temp1
+0x06d4 mem_key_value_temp2
+0x06d5 mem_key_value_temp3
+0x06d6 mem_key_value_temp4
+0x06d7 mem_key_value_temp5
+0x06d8 mem_key_value_temp6
+0x06d9 mem_temp_block6
+0x06df mem_scale_ratio
+0x06e2 mem_xcnt
+0x06e5 mem_scale_ratio_temp
+0x06e7 mem_hci_opcode_ocf
+0x06e9 mem_hci_opcode_ogf
+0x06ea mem_hci_event_head_type
+0x06eb mem_hci_event_head_event_code
+0x06ec mem_hci_event_para_total_length
+0x06ed mem_hci_command_complete_num_hci_command_packet
+0x06ee mem_hci_command_complete_command_opcode
+0x06ee mem_hci_opcode
+0x06f0 mem_hci_command_complete_return_parameter
+0x06f0 mem_hci_command_complete_return_parameter_status
+0x06f1 mem_hci_command_complete_return_parameter_chip_id
+0x06e7 mem_module_le_rx_data_len
+0x06e9 mem_module_le_rx_data_address
+0x06eb mem_module_le_rx_data_handle
+0x06e7 mem_init_cnt
+0x06e9 mem_data_pre
+0x06eb mem_data_current
+0x06ed mem_data_sum
+0x06f0 mem_data_value
+0x06f2 mem_ui_le_uuid_table_new
+0x0a26 mem_voice_raw_start
+0x0a26 mem_voice_raw
+0x0cf5 mem_voice_raw_end
+0x0cf6 mem_adpcm
+0x0d6e mem_voice_adpcm_buf_config
+0x0d76 mem_voice_adpcm_buf_start
+0x0d76 mem_voice_adpcm_buf
+0x0ea2 mem_voice_queue_count
+0x0ea3 mem_queue_buf
+0x0edf mem_memalloc_mouse_param_end
+0x06e7 mem_malloc_rec_start
+0x06e7 mem_rec_queue_ota_sptr
+0x06e9 mem_rec_queue_ota_eptr
+0x06eb mem_rec_queue_ota_rptr
+0x06ed mem_rec_queue_ota_wptr
+0x06ef mem_rec_queue_ota_buf//1280
+0x06ef mem_rec_voice_raw_start
+0x06ef mem_rec_voice_raw
+0x0a0e mem_rec_voice_raw_end
+0x0a0f mem_rec_voice_queue_count
+0x0a10 mem_rec_queue_buf
+0x0a24 mem_rec_adpcm
+0x0a88 mem_rec_nec_rx_start
+0x0b87 mem_rec_nec_rx_end
+0x0b88 mem_rec_nec_rx_store_start
+0x0c87 mem_rec_nec_rx_store_end
+0x0c88 mem_rec_ota_flash_buf_head
+0x0c8c mem_rec_ota_flash_buf//300
+0x0c8c mem_rec_nec_flash_write_head
+0x0c90 mem_rec_nec_rx_info
+0x0c90 mem_rec_nec_rx_len
+0x0c91 mem_rec_nec_rx_perid_freq
+0x0c93 mem_rec_nec_rx_data
+0x0d92 mem_rec_nec_rx_analysis_end
+0x0d93 mem_rec_nec_rx_count
+0x0d94 mem_rec_nec_timer
+0x0d95 mem_rec_nec_timeout
+0x0d96 mem_rec_nec_usercode
+0x0d98 mem_rec_nec_datacode
+0x0d99 mem_rec_nec_learn_key_num
+0x0d9a mem_rec_nec_learn_key_state
+0x0d9b mem_rec_nec_learn_enable_flag
+0x0d9c mem_rec_nec_learn_timeout
+0x0da0 mem_rec_nec_learn_state
+0x0da1 mem_rec_period_cal
+0x0db5 mem_rec_period_cal_ptr
+0x0db7 mem_rec_period_cal_count
+0x0db8 mem_rec_nec_period_array
+0x0dcc mem_rec_nec_store_sptr
+0x0dce mem_rec_nec_store_eptr
+0x0dd0 mem_rec_nec_store_wptr
+0x0dd2 mem_rec_nec_receive_data0
+0x0dd3 mem_rec_nec_receive_data1
+0x0dd4 mem_rec_nec_receive_data2
+0x0dd5 mem_rec_nec_receive_data
+0x0dd8 mem_rec_nec_data
+0x0dd9 mem_rec_nec_period
+0x0dda mem_rec_nec_duty
+0x0ddb mem_rec_nec_freq
+0x0ddc mem_rec_nec_carry_time
+0x0dde mem_rec_nec_learn_stime
+0x0de2 mem_rec_nec_learn_ntime
+0x0de6 mem_rec_nec_learn_outtime
+0x0dea mem_rec_nec_learn_succ
+0x0deb mem_rec_nec_learn_succ_ptr
+0x0ded mem_rec_nec_learn_send_flag
+0x0dee mem_rec_nec_led_state
+0x0def mem_rec_nec_led_blink_count
+0x0df0 mem_malloc_rec_end
+0x06e7 mem_le_test_sync
+0x06e9 mem_le_test_pcnt
+0x06eb mem_tst_pktcnt_crc
+0x06ed mem_tst_pktcnt_dmh
+0x06ef mem_tmp_buffer_head
+0x06f2 mem_tmp_buffer
+0x06e7 mem_usb_status
+0x06e9 mem_usb_fifo_empty
+0x06ea mem_usb_read_len
+0x06ec mem_usb_txbuf
+0x072d mem_usb_txbuf1
+0x0737 mem_usb_txbuf2
+0x0741 mem_usb_rxbuf
+0x0781 mem_usb_rxbuf_end
+0x0782 mem_bufptr
+0x0784 mem_remain
+0x0785 mem_hidreportdesc_kb
+0x0787 mem_hidreportdesc_m
+0x0789 mem_devicedesc
+0x079c mem_confdesc
+0x07d8 mem_string0
+0x07dd mem_string1
+0x07fb mem_string2
+0x0819 mem_string3
+0x0837 mem_cb_usb_config
+0x0839 mem_usb_tx_interval
+0x083a mem_usb_vid_pid
+0x0843 mem_usb_zero_packet
+0x0845 mem_usb_ones_packet
+0x0847 mem_usb_two_packet
+0x0849 mem_usb0_state
+0x084a mem_usb_offline_check_gpio
+0x084b mem_usb_clear_mem_start
+0x084b mem_usb_setup
+0x084b mem_usb_setup_bmRequestType
+0x084c mem_usb_setup_bRequest
+0x084d mem_usb_setup_bValue
+0x084e mem_usb_setup_bValueH
+0x084f mem_usb_setup_wIndex
+0x0851 mem_usb_setup_bLength
+0x0852 mem_usb_setup_bLengthH
+0x0853 mem_usb0_set_report_data
+0x0893 mem_usb0_get_report_data
+0x08d3 mem_usb_setup_bValue_temp
+0x08d5 mem_usb0_get_set_report
+0x08d6 mem_usb0_data_ready_report
+0x08d7 mem_usb_tx_win_enable
+0x08d8 mem_usb_tx_mac_enable
+0x08d9 mem_usb_idle_flag
+0x08da mem_usb_idle_rate
+0x08db mem_usb_get_protocol_flag
+0x08dc mem_usb_set_protocol_status
+0x08dd mem_usb_set_protocol_value
+0x08de mem_usb_state
+0x08df mem_usb_remote_wakeup
+0x08e0 mem_usb_clear_remote_wakeup
+0x08e1 mem_sdsystem_wakeup_flag
+0x08e2 mem_usb_ep0_stall_status
+0x08e3 mem_usb_ep1_stall_status
+0x08e4 mem_usb_ep2_stall_status
+0x08e5 mem_usb_ep3_stall_status
+0x08e6 mem_dsc_info_data_pointer
+0x08e8 mem_dsc_info_len
+0x08e9 mem_usb_ep1_data
+0x08ea mem_usb_ep2_data
+0x08eb mem_usb_tx_enable
+0x08ec mem_usb_device_enumeration_endflag
+0x08ed mem_usb_wakestate_onetime_flag
+0x08ee mem_usb_mac_wakeup_trig
+0x08ef mem_usb_set_high_addr_flag
+0x08f0 mem_usb_clear_halt
+0x08f1 mem_usb_mouse_data
+0x0901 mem_usb_kb_data
+0x0911 mem_usb_kb_n_key_rollvoer_data
+0x0921 mem_usb_kb_multikey
+0x0929 mem_usb_kb_system
+0x0931 mem_usb_test_cnt
+0x0933 mem_usb_test_kb
+0x093d mem_usb_clear_mem_end
+0x093d mem_usb_ccid_buf
+0x097d mem_dg_rssi_noise_buffer
+0x0a7d mem_dg_rssi_noise_dg_buffer
+0x0b7d mem_dg_rssi_noise_ms_buffer
+0x0c7d mem_dg_rssi_noise_kb_buffer
+
+0x019f mem_le_new_param
+0x019f mem_le_new_transmitwindowsize
+0x01a0 mem_le_new_transmitwindowoffset
+0x01a2 mem_le_new_conninterval
+0x01a4 mem_le_new_connslavelatency
+0x01a6 mem_le_new_connsupervisiontimeout
+0x019f mem_le_new_map
+0x019f mem_le_new_m2s_phy
+0x01a0 mem_le_new_s2m_phy
+0x004c mem_le_rxbuf_data_header
+0x004d mem_le_rxbuf_data_length
+0x004e mem_le_rxbuf_data_payload
+0x004c mem_le_rxbuf_data_ll_header
+0x004d mem_le_rxbuf_data_ll_length
+0x004e mem_le_rxbuf_data_ll_opcode
+0x004f mem_le_rxbuf_data_ll_control_data
+0x004c mem_le_rxbuf_adv_header
+0x004d mem_le_rxbuf_adv_length
+0x004e mem_le_rxbuf_adv_payload
+0x004c mem_le_rxbuf_adv_scan_req_header
+0x004d mem_le_rxbuf_adv_scan_req_length
+0x004e mem_le_rxbuf_adv_scan_req_scan_address
+0x0054 mem_le_rxbuf_adv_scan_req_adv_address
+0x004c mem_le_rxbuf_adv_connect_ind_header
+0x004d mem_le_rxbuf_adv_connect_ind_length
+0x004e mem_le_rxbuf_adv_connect_ind_init_address
+0x0054 mem_le_rxbuf_adv_connect_ind_adv_address
+0x005a mem_le_rxbuf_adv_connect_ind_access_address
+0x005e mem_le_rxbuf_adv_connect_ind_crc_init
+0x0061 mem_le_rxbuf_adv_connect_ind_win_size
+0x0062 mem_le_rxbuf_adv_connect_ind_win_offset
+0x0064 mem_le_rxbuf_adv_connect_ind_interval
+0x0066 mem_le_rxbuf_adv_connect_ind_latency
+0x0068 mem_le_rxbuf_adv_connect_ind_timeout
+0x006a mem_le_rxbuf_adv_connect_ind_channel_map
+0x006f mem_le_rxbuf_adv_connect_ind_hop_and_sca
+0x068f mem_le_search_handle_start
+0x0691 mem_le_search_handle_end
+0x0693 mem_le_att_offset
+0x0693 mem_le_search_att_type_length
+0x0694 mem_le_search_att_type
+0x06a4 mem_le_curr_att_len
+0x06a5 mem_le_cur_attlist_start_ptr
+0x06a7 mem_le_cur_handle_start
+0x06a9 mem_le_cur_handle_end
+0x06ab mem_le_cur_uuid_length
+0x06ac mem_le_cur_uuid
+0x06bc mem_le_cur_handle
+0x004c mem_le_rxbuf_data_att_header
+0x004d mem_le_rxbuf_data_att_length
+0x004e mem_le_rxbuf_data_att_l2cap_length
+0x0050 mem_le_rxbuf_data_att_cid
+0x0052 mem_le_rxbuf_data_att_opcode
+0x0053 mem_le_rxbuf_data_att_payload
+0x004c mem_le_rxbuf_data_continue_header
+0x004d mem_le_rxbuf_data_continue_length
+0x004e mem_le_rxbuf_data_continue_payload
+0x004c mem_le_rxbuf_data_att_write_header
+0x004d mem_le_rxbuf_data_att_write_length
+0x004e mem_le_rxbuf_data_att_write_l2cap_length
+0x0050 mem_le_rxbuf_data_att_write_cid
+0x0052 mem_le_rxbuf_data_att_write_opcode
+0x0053 mem_le_rxbuf_data_att_write_handle
+0x0055 mem_le_rxbuf_data_att_write_payload
+0x004c mem_le_rxbuf_data_prepare_att_write_header
+0x004d mem_le_rxbuf_data_prepare_att_write_length
+0x004e mem_le_rxbuf_data_prepare_att_write_l2cap_length
+0x0050 mem_le_rxbuf_data_prepare_att_write_cid
+0x0052 mem_le_rxbuf_data_prepare_att_write_opcode
+0x0053 mem_le_rxbuf_data_prepare_att_write_handle
+0x0055 mem_le_rxbuf_data_prepare_att_write_offset
+0x0057 mem_le_rxbuf_data_prepare_att_write_payload
+0x01db mem_otp_adc
+0x01e3 mem_otp_adc_ratio
+0x01e4 mem_otp_coordinate
+0x01eb mem_otp_core_ldo
+0x01ec mem_otp_verf_bg
+0x01ed mem_otp_charge_pump
+0x01ee mem_otp_dpll_ibais
+0x01ef mem_otp_temp1
+0x01f7 mem_otp_hv_sel
+0x01f8 mem_otp_ldo_vsel
+0x01f9 mem_otp_load_delay
+0x01fa mem_otp_load_check_sum
+0x4000 mem_patch00
+0x4001 mem_patch01
+0x4002 mem_patch02
+0x4003 mem_patch03
+0x4004 mem_patch04
+0x4005 mem_patch05
+0x4006 mem_patch06
+0x4007 mem_patch07
+0x4008 mem_patch08
+0x4009 mem_patch09
+0x400a mem_patch0a
+0x400b mem_patch0b
+0x400c mem_patch0c
+0x400d mem_patch0d
+0x400e mem_patch0e
+0x400f mem_patch0f
+0x4010 mem_patch10
+0x4011 mem_patch11
+0x4012 mem_patch12
+0x4013 mem_patch13
+0x4014 mem_patch14
+0x4015 mem_patch15
+0x4016 mem_patch16
+0x4017 mem_patch17
+0x4018 mem_patch18
+0x4019 mem_patch19
+0x401a mem_patch1a
+0x401b mem_patch1b
+0x401c mem_patch1c
+0x401d mem_patch1d
+0x401e mem_patch1e
+0x401f mem_patch1f
+0x4020 mem_patch20
+0x4021 mem_patch21
+0x4022 mem_patch22
+0x4023 mem_patch23
+0x4024 mem_patch24
+0x4025 mem_patch25
+0x4026 mem_patch26
+0x4027 mem_patch27
+0x4028 mem_patch28
+0x4029 mem_patch29
+0x402a mem_patch2a
+0x402b mem_patch2b
+0x402c mem_patch2c
+0x402d mem_patch2d
+0x402e mem_patch2e
+0x402f mem_patch2f
+0x4030 mem_patch30
+0x4031 mem_patch31
+0x4032 mem_patch32
+0x4033 mem_patch33
+0x4034 mem_patch34
+0x4035 mem_patch35
+0x4036 mem_patch36
+0x4037 mem_patch37
+0x4038 mem_patch38
+0x4039 mem_patch39
+0x403a mem_patch3a
+0x403b mem_patch3b
+0x403c mem_patch3c
+0x403d mem_patch3d
+0x403e mem_patch3e
+0x403f mem_patch3f
+0x4040 mem_context
+0x4093 mem_current_amaddr
+0x4094 mem_lpm_mode
+0x4095 mem_last_clkn
+0x4099 mem_fcomp_div
+0x409a mem_rx_window_sniff
+0x409c mem_rf_init_ptr
+0x409e mem_rf_rccal
+0x409f mem_handle_num
+0x40a0 mem_chip_functions
+0x40a2 mem_lpm_wake_lock
+0x40a4 mem_lpm_interval
+0x40a6 mem_lpm_overhead
+0x40a7 mem_lpm_hibernate_switch
+0x40a8 mem_sniff_unint_lost
+0x40a9 mem_sleep_counter
+0x40ad mem_sleep_counter_all
+0x40b1 mem_sleep_clkn
+0x40b7 mem_sniff_rcv
+0x40ba mem_sniff_lost
+0x40bd mem_clks_per_lpo
+0x40c0 mem_lpm_mult
+0x40c1 mem_lpm_mult_timeout
+0x40c2 mem_lpm_mult_cnt
+0x40c3 mem_lpm_xtalcnt
+0x40c4 mem_lpm_buckcnt
+0x40c5 mem_lpm_ldocnt
+0x40c6 mem_lpm_isogate
+0x40c7 mem_lpm_isogate_stage2
+0x40c8 mem_lpm_isogate_final
+0x40c9 mem_lpm_ldo_sel
+0x40ca mem_lpm_sysctl
+0x40cb mem_lpm_hv_sel
+0x40cc mem_saved_gpio
+0x40e4 mem_saved_gsel
+0x40e7 mem_saved_mark
+0x40ef mem_saved_spidctrl
+0x40f0 mem_patch_ptr
+0x40f2 mem_patch_len
+0x40f4 mem_timers
+0x4114 mem_hci_cmd
+0x4115 mem_hci_conn_handle
+0x4116 mem_hci_plap
+0x4119 mem_hci_puap
+0x411a mem_hci_pnap
+0x411c mem_xtal_c_sel
+0x411d mem_ghpc_table
+0x4135 mem_aac_res_table
+0x4141 mem_tx_power
+0x4142 mem_modem_rssi
+0x4143 mem_gain_fix
+0x4144 mem_gain_table
+0x4147 mem_gain_second_agc_en
+0x4148 mem_system_clk
+0x4149 mem_rf_init_data
+0x415d mem_otp_charge_pump_x
+0x415e mem_otp_dpll_ibais_x
+0x415f mem_xtal_freq
+0x4160 mem_version
+0x4161 mem_company_id
+0x4163 mem_sub_version
+0x4165 mem_le_dsniff
+0x4167 mem_le_conn_interval
+0x4169 mem_le_tx_ifs_defference
+0x416a mem_le_tx2m_delay
+0x416b mem_le_txheader
+0x416c mem_le_txlen
+0x416d mem_le_txpayload
+0x426d mem_le_name_len
+0x426e mem_le_name
+0x428c mem_le_ltk
+0x429c mem_ltk_exists
+0x429d mem_le_rconfirm
+0x42ad mem_le_srand
+0x42bd mem_le_iat
+0x42be mem_le_rat
+0x42bf mem_le_preq
+0x42c0 mem_le_preq_iocap
+0x42c1 mem_le_preq_oob
+0x42c2 mem_le_preq_auth
+0x42c3 mem_le_preq_max_keysize
+0x42c4 mem_le_preq_init_key_distribution
+0x42c5 mem_le_preq_resp_key_distribution
+0x42c6 mem_le_pres
+0x42c7 mem_le_pres_iocap
+0x42c8 mem_le_pres_oob
+0x42c9 mem_le_pres_auth
+0x42ca mem_le_pres_max_keysize
+0x42cb mem_le_pres_init_key_distribution
+0x42cc mem_le_pres_resp_key_distribution
+0x42cd mem_le_conn_param
+0x42cd mem_le_conn_peer_addr_type
+0x42ce mem_le_conn_peer_addr
+0x42d4 mem_le_conn_own_addr_type
+0x42d5 mem_le_interval_min
+0x42d7 mem_le_interval_max
+0x42d9 mem_le_latency
+0x42db mem_le_timeout
+0x42dd mem_le_lap
+0x42e0 mem_le_uap
+0x42e1 mem_le_nap
+0x42e3 mem_le_local_mtu
+0x42e5 mem_le_remote_mtu
+0x42e7 mem_le_skdm
+0x42ef mem_le_skds
+0x42f7 mem_le_init_superto
+0x42f9 mem_ui_le_uuid_table
+0x42fb mem_le_secure_connect_flag
+0x42fc mem_le_secure_connect_state
+0x42fd mem_le_sc_confirm_gkey_flag
+0x42fe mem_le_pairing_state
+0x42ff mem_le_enc_state
+0x4300 mem_le_pairing_mode
+0x4301 mem_le_tk
+0x4305 mem_le_ediv
+0x4307 mem_le_rand
+0x430f mem_le_irk
+0x431f mem_le_transmit_window
+0x4323 mem_le_configuration
+0x4324 mem_le_fixed_ltk
+0x4334 mem_le_pairing_handle
+0x4336 mem_le_packet_llid
+0x4337 mem_le_l2cap_size
+0x4339 mem_le_packet_len_recved
+0x433b mem_le_payload_ptr
+0x433d mem_le_testtype
+0x433e mem_cmd_le_create_conn
+0x433f mem_le_signaling_identifier
+0x4340 mem_le_l2cap_signaling_conn_param_update_rsp_result
+0x4342 mem_le_md_count
+0x4343 mem_ble_l2cap_tx_buff0_ptr
+0x4345 mem_ble_l2cap_tx_buff_size_ptr
+0x4347 mem_le_scan_enable
+0x4348 mem_le_scan_interval
+0x434a mem_le_scan_window
+0x434c mem_le_adv_data_len
+0x434d mem_le_adv_data
+0x436c mem_le_scan_data_len
+0x436d mem_le_scan_data
+0x438c mem_le_adv_enable
+0x438d mem_le_adv_param
+0x438d mem_le_adv_interval
+0x438f mem_le_adv_type
+0x4390 mem_le_adv_own_addr_type
+0x4391 mem_le_adv_direct_addr
+0x4397 mem_le_adv_channel_map
+0x4398 mem_le_scan_params
+0x4398 mem_le_scan_type
+0x4399 mem_le_scan_own_addr_type
+0x439a mem_le_l2cap_att_states
+0x439b mem_le_att_opcode
+0x439c mem_le_att_handle
+0x439e mem_le_search_res
+0x439f mem_le_notify_handle
+0x43a1 mem_le_search_uuid_length
+0x43a2 mem_le_search_uuid
+0x43b2 mem_le_local_feature
+0x43ba mem_le_tx_phys
+0x43bb mem_le_rx_phys
+0x43bc mem_remote_rx_max_octets
+0x43be mem_remote_rx_max_time
+0x43c0 mem_remote_tx_max_octets
+0x43c2 mem_remote_tx_max_time
+0x43c4 mem_local_rx_max_octets
+0x43c6 mem_local_rx_max_time
+0x43c8 mem_local_tx_max_octets
+0x43ca mem_local_tx_max_time
+0x43cc mem_ucode_ptr
+0x43ce mem_ucode_flag
+0x43cf mem_device_option
+0x43d0 mem_peripheral_lock_flag
+0x43d1 mem_bistfix_val
+0x43d1 mem_bistfix_addr_sched
+0x43d3 mem_bistfix_addr_x
+0x43d5 mem_bistfix_addr_patch
+0x43d7 mem_bistfix_val_xram
+0x43d8 mem_bistfix_val_patchram
+0x43dc mem_cb_check_wakelock
+0x43de mem_cb_before_hibernate
+0x43e0 mem_cb_before_lpm
+0x43e2 mem_cb_le_process
+0x43e4 mem_cb_idle_process
+0x43e6 mem_cb_bb_event_process
+0x43e8 mem_cb_att_write
+0x43ea mem_cb_ble_transmit
+0x43ec mem_cb_event_timer
+0x43ee mem_cb_bt_set_mult
+0x43f0 mem_cb_spi_flash_write_complate
+0x43f2 mem_cb_before_lpm_sleep
+0x43f4 mem_eeprom_base
+0x43f6 mem_wake_up_delay_timer
+0x43f7 mem_app_connection_options
+0x43f8 mem_app_disconn_reason
+0x43fa mem_app_disconn_reason_flag
+0x43fc mem_xrecord_mode
+0x43fd mem_eeprom_block_size
+0x43fe mem_spi_init_clk
+0x43ff mem_spi_init_delay_time
+0x4400 mem_spi_ncs_gpio
+0x4401 mem_nv_data_ptr
+0x4403 mem_nv_data_number
+0x4404 mem_queue_ptr
+0x4406 mem_reference_inter1p8v_2v_adc_io_data
+0x4408 mem_reference_inter1p8v_2p6v_adc_vdcdc_data
+0x440a mem_reference_inter1p8v_1v_adc_io_data
+0x440c mem_reference_inter1p8v_4p6v_adc_vdcdc_data
+0x440e mem_adc_reference3v_ft_data
+0x440e mem_adc_reference3v_gpio1v_ft_data
+0x4410 mem_adc_reference3v_gpio2v_ft_data
+0x4412 mem_adc_reference3v_vdcdc3p6v_ft_data
+0x4414 mem_adc_reference3v_vdcdc4p6v_ft_data
+0x4416 mem_adc_reference3v_inter1v_ft_data
+0x4418 mem_adc_reference3v_inter1v_now_data
+0x441a mem_adc_reference_mode
+0x441b mem_reference_voltage
+0x441d mem_adc_config_flag
+0x441e mem_adc_channel
+0x441f mem_adc_clkdiv
+0x4420 mem_adc_current_value
+0x4422 mem_adc_power_flag//bit0:low power falg ; bit1:no power flag
+0x4423 mem_adc_saddr_ptr
+0x4425 mem_adc_eaddr_ptr
+0x4427 mem_adc_dma_enable
+0x4428 mem_adc_cal_c0
+0x4429 mem_adc_cal_c1
+0x442a mem_adc_cal_c2
+0x442b mem_adc_cal_c3
+0x442c mem_adc_cal_c4
+0x442d mem_adc_cal_c5
+0x442e mem_adc_cal_c6
+0x442f mem_adc_cal_c7
+0x4430 mem_spi_write_addr
+0x4433 mem_spi_write_ptr
+0x4435 mem_spi_write_len
+0x4437 mem_spi_write_flash_sm
+0x4438 mem_spi_cs_gpio
+0x4439 mem_spi_si_gpio
+0x443a mem_spi_so_gpio
+0x443b mem_spi_sclk_gpio
+0x443c mem_spi_wp_gpio
+0x443d mem_spi_hold_gpio
+0x443e mem_eeprom_wp_gpio
+0x443f mem_eeprom_scl_gpio
+0x4440 mem_eeprom_sda_gpio
+0x4441 mem_kscan_ptr
+0x4443 mem_key_num_ptr
+0x4443 mem_keyscan_ptr
+0x4445 mem_key_value_retention
+0x4447 mem_power_param_ptr
+0x4449 mem_seqi
+0x444a mem_set_cdb_on
+0x444b mem_syn_cal_ctrl
+0x444c mem_nec_decode_error_value
+0x444d mem_wdt_always_work
+0x444e mem_power_ctrl_disable
+0x444f mem_ring_ibias_trim
+0x4450 mem_ring_ibias_vtune_low
+0x4452 mem_ring_ibias_vtune_high
+0x4454 mem_ring_ibias_calc_adc_gpio
+0x4455 mem_ring_ibias_calc_adc_channel
+0x4456 mem_rf_debug_rx_gpio
+0x4457 mem_rf_debug_tx_gpio
+0x4458 mem_l2cap_xmem_start
+0x4458 mem_used_map
+0x4459 mem_tx_fifo0
+0x4459 mem_tx_fifo0_map
+0x445a mem_tx_fifo0_ptr
+0x445c mem_tx_fifo1
+0x445c mem_tx_fifo1_map
+0x445d mem_tx_fifo1_ptr
+0x445f mem_tx_fifo2
+0x445f mem_tx_fifo2_map
+0x4460 mem_tx_fifo2_ptr
+0x4462 mem_tx_fifo3
+0x4462 mem_tx_fifo3_map
+0x4463 mem_tx_fifo3_ptr
+0x4465 mem_tx_fifo_end
+0x4465 mem_l2cap_lpm_txbuf_ptr
+0x4467 mem_l2cap_xmem_end
+0x4467 mem_ccm_pcnt_tx
+0x446c mem_ccm_pcnt_rx
+0x4471 mem_ccm_last_mic
+0x4475 mem_ccm_iv
+0x4475 mem_ccm_ivm
+0x4479 mem_ccm_ivs
+0x447d mem_ccm_len
+0x447f mem_ccm_rx_ptr
+0x4481 mem_sc_only_mode
+0x4482 mem_sp_debug_mode
+0x4483 mem_secure_connections_enable
+0x4484 mem_sc_calc
+0x4485 mem_sc_local_key_invalid
+0x4486 mem_sc_private_key_256
+0x44a6 mem_sc_pubkey_local_x_256
+0x44c6 mem_sc_pubkey_local_y_256
+0x44e6 mem_sp_state_xmem
+0x44e6 mem_authentication_passkey_times
+0x44e7 mem_passkey_1bit
+0x44e8 mem_sp_state_xmem_end
+0x44e8 mem_ipc_lock_bt
+0x44e9 mem_ipc_lock_c51
+0x44ea mem_ipc_fifo_bt2c51
+0x44f2 mem_ipc_fifo_c512bt
+0x44fa mem_ui_button_timer
+0x44fb mem_ui_button_last_state
+0x44fc mem_ui_timer_last_btclk
+0x4500 mem_ui_state_map
+0x4502 mem_ui_button_timeout
+0x4503 mem_ui_button_gpio
+0x4504 mem_ui_led_init_state_set
+0x4505 mem_ui_led_struct_num
+0x4506 mem_ui_led_struct_ptr
+0x4508 mem_24g_lap
+0x450e mem_24g_rxbuf
+0x4530 mem_24g_txbuf
+0x4550 mem_24g_txpayload
+0x4574 mem_24g_rxpayload
+0x4594 mem_24g_rxdata_length
+0x4595 mem_24g_pid
+0x4596 mem_24g_no_ack
+0x4597 mem_24g_sta_crc
+0x459a mem_24g_last_crc
+0x459d mem_24g_sta_pid
+0x459e mem_24g_last_pid
+0x459f mem_24g_datalen
+0x45a0 mem_24g_data_type
+0x45a1 mem_24g_txlen
+0x45a2 mem_24g_rx_window
+0x45a4 mem_24g_ch
+0x45a5 mem_24g_current_ch_number
+0x45a6 mem_24g_addr
+0x45aa mem_24g_ch_map1
+0x45ae mem_24g_ch_map2
+0x45b2 mem_24g_ch_map3
+0x45b6 mem_24g_ch_map4
+0x45ba mem_24g_tx_btclk
+0x45be mem_24g_interval
+0x45bf mem_24g_interval_min
+0x45c0 mem_24g_interval_max
+0x45c1 mem_24g_syncword
+0x45c3 mem_24g_syncword_crc8
+0x45c4 mem_24g_get_syncword_crc8
+0x45c5 mem_24g_pair_switch
+0x45c6 mem_24g_enter_hibernate
+0x45ce mem_24g_rx_phy
+0x45cf mem_24g_tx_phy
+0x45d0 mem_24g_ch_map_update
+0x45d1 mem_24g_ch_update_map1
+0x45d5 mem_24g_ch_update_map2
+0x45d9 mem_24g_ch_update_map3
+0x45dd mem_24g_ch_update_map4
+0x45e1 mem_24g_disable_fec1
+0x45e2 mem_24g_off_type
+0x45e3 mem_24g_pair_addr
+0x45e7 mem_24g_pair_ch
+0x45e8 mem_24g_pair_tx_power
+0x45e9 mem_rssi_buff_index
+0x45ea mem_24g_device1_bind_step
+0x45eb mem_24g_device2_bind_step
+0x45ec mem_24g_bind_device_status
+0x45ed mem_24g_bind_payload
+0x45f5 mem_24g_device1_bind_disable
+0x45f6 mem_24g_device2_bind_disable
+0x45f7 mem_cb_24g_receive_process
+0x45f9 mem_cb_24g_ackpayload
+0x45fb mem_cb_24g_data_device1
+0x45fd mem_cb_24g_data_device2
+0x45ff mem_24g_rxdata_temp
+0x4621 mem_24g_abort_packet
+0x4622 mem_24g_hop_btclk
+0x4626 mem_24g_hop_interval
+0x4627 mem_24g_pair_mode
+0x4628 mem_24g_ackpayload_enable
+0x4629 mem_24g_hop_packet
+0x462a mem_24g_mode_switch
+0x462b mem_24g_nodata_timer_enable
+0x462c mem_24g_mode_init
+0x462d mem_24g_work_mode
+0x462e mem_24g_time_slice
+0x462f mem_24g_self_last_ch
+0x4630 mem_24g_self_ch_number
+0x4631 mem_24g_self_config_ch_once
+0x4632 mem_24g_device1_last_ch
+0x4633 mem_24g_device1_ch_number
+0x4634 mem_24g_device1_config_ch_once
+0x4635 mem_24g_device2_last_ch
+0x4636 mem_24g_device2_ch_number
+0x4637 mem_24g_device2_config_ch_once
+0x4638 mem_24g_led_status
+0x4639 mem_24g_bind_mode_continue
+0x463a mem_tx_power_temp
+0x463b mem_24g_mode_B_S_switch
+0x463c mem_24g_mode_B_S_switch_init
+0x463d mem_24g_mode_B_S_switch_cnt
+0x463f mem_24g_mode_B_S_switch_exit
+0x4640 mem_24g_B_S_time_slice
+0x4641 mem_24g_B_S_mode_switch_disable
+0x4642 mem_24g_bind_device_living
+0x4643 mem_24g_transmitter_addr
+0x4647 mem_24g_device1_addr
+0x464b mem_24g_device2_addr
+0x464f mem_rssi_noise_avg
+0x4650 mem_rssi_noise_index
+0x4651 mem_rssi_noise_self_avg
+0x4652 mem_rssi_noise_device1_avg
+0x4653 mem_rssi_noise_device2_avg
+0x4654 mem_rssi_noise_self_index
+0x4655 mem_rssi_noise_device1_index
+0x4656 mem_rssi_noise_device2_index
+0x4657 mem_rssi_noise_buffer_ptr
+0x4659 mem_rssi_noise_self_buffer_ptr
+0x465b mem_rssi_noise_device1_buffer_ptr
+0x465d mem_rssi_noise_device2_buffer_ptr
+0x465f mem_car_le_24g_tx_pair_mode
+0x4660 mem_car_le_24g_ch_count
+0x4662 mem_car_24g_addr_other
+0x4666 mem_car_24g_tx_payload_temp
+0x4672 mem_car_24g_rx_payload_temp
+0x467e mem_car_24g_loselink_count
+0x467f mem_car_ble_connted_flag
+0x4680 mem_car_full_control_remote_lap
+0x4684 mem_100ms_adv_control_timer
+0x4686 mem_100ms_factory_test_control_timer
+0x4688 mem_pwm_flag
+0x4689 mem_period_count
+0x468a mem_timer_count
+0x468b mem_car_motor_gpio_num
+0x468c mem_car_motor_gpio_map
+0x468c mem_car_motor_left_gpio
+0x468d mem_car_motor_right_gpio
+0x468e mem_car_motor_front_gpio
+0x468f mem_car_motor_back_gpio
+0x4690 mem_car_pwm_gpio
+0x4691 mem_otp_lot_xy_temp
+0x4697 mem_f_flag
+0x4698 mem_b_flag
+0x4699 mem_adv_control_start_flag
+0x469a mem_stop_4w1_flag
+0x469b mem_factory_control_flag
+0x469c mem_car_gpio_control_mode
+0x469d mem_car_le_queue_each_size
+0x469e mem_car_le_queue_length
+0x469f mem_car_le_queue_current_num
+0x46a0 mem_car_le_queue_read_ptr
+0x46a1 mem_car_le_queue_write_ptr
+0x46a2 mem_car_le_queue_ele
+0x46f2 mem_car_ble_write_data
+0x46fd mem_car_ble_att_list
+0x488d mem_otp_sys_cfg_temp
+0x48c9 mem_ad_indexTable
+0x48d9 mem_ad_stepsizeTable
+0x4a3d mem_ad_state_valpred
+0x4a41 mem_ad_state_index
+0x4a45 mem_ad_in_numSamples
+0x4a46 mem_ad_in_ptr
+0x4a48 mem_ad_out_ptr
+0x4a4a mem_ad_sign
+0x4a4b mem_ad_delta
+0x4a4c mem_ad_step
+0x4a50 mem_ad_valpred
+0x4a54 mem_ad_index
+0x4a58 mem_ad_vpdiff
+0x4a5c mem_ad_inputbuffer
+0x4a60 mem_ad_bufferstep
+0x465f mem_dg_kb_bind_flag
+0x4660 mem_dg_kb_data_sta_data
+0x4668 mem_dg_kb_data_last_data
+0x4670 mem_dg_kb_multikey_sta_data
+0x4673 mem_dg_kb_multikey_last_data
+0x4676 mem_dg_kb_system_sta_data
+0x4679 mem_dg_kb_system_last_data
+0x467c mem_dg_kb_blank_data_enable
+0x467d mem_dg_kb_mul_blank_data_enable
+0x467e mem_dg_kb_system_crtl_blank_data_enable
+0x467f mem_dg_ms_blank_data_enable
+0x4680 mem_dg_sys_config
+0x4681 mem_dg_usb_vid_pid
+0x468a mem_dg_usb_tx_interval
+0x468b mem_dg_usb_device_name
+0x46ab mem_dg_kb_bind_success
+0x46ac mem_dg_pc_sleep_flag
+0x46ad mem_dg_24g_tx_power_default
+0x46ae mem_dg_kb_bit_consumer_blank_data_enable
+0x46af mem_dg_kb_bit_consumer_sta_data
+0x46b3 mem_dg_kb_bit_consumer_last_data
+0x46b7 mem_dg_device_version
+0x45ea mem_rssi_hex_received
+0x45eb mem_24g_pair_sm
+0x45ec mem_24g_pair_no_ack
+0x45ed mem_24g_pair_timeout_init
+0x45ef mem_24g_pair_timeout
+0x45f1 mem_24g_pair_count
+0x45f3 mem_24g_reconn_timeout_init
+0x45f5 mem_24g_reconn_timeout
+0x45f7 mem_24g_reconn_count
+0x45f9 mem_24g_reconn_type
+0x45fa mem_24g_fast_conn_enable
+0x45fb mem_24g_fast_conn_addr
+0x45ff mem_24g_receiver_addr
+0x4603 mem_24g_fast_conn_temp_ch
+0x4604 mem_24g_receiver_temp_ch
+0x4605 mem_24g_device_temp_ch
+0x4606 mem_rssi_signal_index
+0x4607 mem_rssi_signal_buf_ptr
+0x4609 mem_cb_24g_transmit_data
+0x460b mem_cb_24g_search_receiver
+0x460d mem_cb_24g_lpm_before
+0x460f mem_cb_24g_transmit_short_sleep
+0x4611 mem_cb_24g_transmit_long_sleep
+0x4613 mem_24g_conn_sm
+0x4614 mem_24g_ensure
+0x4615 mem_24g_txfail_cnt
+0x4617 mem_24g_attempt_fail_flag
+0x4618 mem_24g_retry
+0x4619 mem_24g_abort_pac
+0x461a mem_24g_max_retry
+0x461b mem_24g_device_addr
+0x461f mem_24g_short_sleep_set
+0x4622 mem_24g_long_sleep_set
+0x462a mem_24g_long_sleep_set1
+0x462e mem_24g_pac_index
+0x462f mem_24g_transmit_by_interrupt
+0x4630 mem_24g_transmit_by_interrupt_exit_count
+0x4632 mem_24g_transmit_by_interrupt_exit_count_init
+0x4634 mem_24g_long_sleep_param_update_timer_init
+0x4636 mem_24g_long_sleep_param_update_timer
+0x4638 mem_24g_fast_hop_count
+0x4639 mem_24g_retransmit
+0x463b mem_rssi_avg_received
+0x463c mem_power_ctrl_level
+0x463d mem_power_ctrl_pac_succ_cnt
+0x463e mem_power_ctrl_pac_succ_cnt_init
+0x463f mem_rssi_dis_min_24g
+0x4640 mem_rssi_dis_max_24g
+0x4641 mem_rssi_hex_received_max_value
+0x4642 mem_rssi_dis_min_ble
+0x4643 mem_rssi_dis_max_ble
+0x4644 mem_device_vdd_calculate_set
+0x4644 mem_device_vdd_full_vol
+0x4646 mem_device_vdd_empty_vol
+0x4648 mem_device_vdd_low_vol
+0x464a mem_device_vdd_now_vol
+0x464c mem_adc_channel_gpio
+0x464d mem_adc_low_volatage_led_timer_count
+0x464e mem_device_adc_last_low_voltage_flag
+0x464f mem_device_discovery_timeout
+0x4651 mem_device_24g_pair_timeout_init
+0x4653 mem_device_direct_timeout
+0x4654 mem_device_24g_reconn_timeout_init
+0x4655 mem_device_24g_pair_tx_power
+0x4656 mem_device_normal_tx_power
+0x4657 mem_rssi_dis_min_24g_init
+0x4658 mem_rssi_dis_max_24g_init
+0x4659 mem_rssi_hex_received_max_value_init
+0x465a mem_rssi_dis_min_ble_init
+0x465b mem_rssi_dis_max_ble_init
+0x465c mem_mouse_key
+0x465d mem_mouse_x
+0x465f mem_mouse_y
+0x4661 mem_mouse_z
+0x4662 mem_mouse_tz
+0x4663 mem_mouse_xy_h
+0x4664 mem_mouse_key_last
+0x4665 mem_device_switch_gpio
+0x4666 mem_device_reuse_2ice_gpio
+0x4667 mem_sensor_motion_gpio
+0x4668 mem_whee_a_data_gpio
+0x4669 mem_whee_b_data_gpio
+0x466a mem_wheel_tb_old_pinlevel
+0x466b mem_wheel_tb_new_pinlevel
+0x466c mem_wheel_tog
+0x466d mem_mouse_tz_data
+0x466e mem_mwheel_b_old_pinlevel
+0x466f mem_mwheel_b_new_pinlevel
+0x4670 mem_mwheel_tog
+0x4671 mem_mouse_z_data
+0x4672 mem_mouse_wheel_trigger
+0x4673 mem_mouse_wheel_trigger_timer
+0x4674 mem_wire_usb_interval
+0x4675 mem_usb_addr
+0x4676 mem_usb_vdd_status
+0x4677 mem_usb_keyboard_flag
+0x4678 mem_device_information_start
+0x4678 mem_device_flag
+0x4679 mem_device1_type
+0x467a mem_device1_addr
+0x4680 mem_device1_locall_addr
+0x4686 mem_device2_type
+0x4687 mem_device2_addr
+0x468d mem_device2_locall_addr
+0x4693 mem_device3_type
+0x4694 mem_device3_addr
+0x469a mem_device3_locall_addr
+0x46a0 mem_store_flag
+0x46a2 mem_mouse_dpi
+0x46a3 mem_device_24g_addr
+0x46a7 mem_random_addr_increase_count
+0x46a9 mem_keyboard_24g_fn_lock
+0x46aa mem_keyboard_bt1_fn_lock
+0x46ab mem_keyboard_bt2_fn_lock
+0x46ac mem_keyboard_bt3_fn_lock
+0x46ad mem_keyboard_usb_fn_lock
+0x46ae mem_keyboard_bt1_computer_system
+0x46af mem_keyboard_bt2_computer_system
+0x46b0 mem_keyboard_bt3_computer_system
+0x46b1 mem_backlight_on_flag
+0x46b2 mem_backlight_on_type
+0x46b3 mem_backlight_on_level
+0x46b4 mem_backlight_breath_speed
+0x46b5 mem_mouse_retention
+0x46f8 mem_device_information_end
+0x46f8 mem_device_compare_addr
+0x46fe mem_flash_base
+0x4701 mem_write_flash_head_temp
+0x4705 mem_store_information_delay_timer
+0x4706 mem_store_information_delay_timer_init
+0x4707 mem_device_search_dongle_interval
+0x4708 mem_device_search_dongle_ch
+0x4709 mem_device_search_dongle_count
+0x470a mem_device_search_dongle_action
+0x470b mem_24g_enter_lpm_timer
+0x470c mem_mouse_24g_enter_lpm_enable
+0x470d mem_keyboard_led_status
+0x470e mem_mouse_flag
+0x4716 mem_device_number
+0x4717 mem_device_flag_temp
+0x4718 mem_device_otp_flag_temp
+0x4719 mem_device_fast_direct_timeout
+0x471a mem_device_24g_power_on_fast_conn_timer
+0x471c mem_device_24g_search_dongle_time_init
+0x471e mem_device_no_data_timeout
+0x4720 mem_device_direct_timer
+0x4721 mem_customer_key_press
+0x472b mem_customer_key
+0x472c mem_customer_data_trigger
+0x472d mem_customer_data_trigger_last
+0x472e mem_device_set_analog_bit_set
+0x4731 mem_bt_discovery_count
+0x4732 mem_select_device_count
+0x4733 mem_mouse_commbination_key
+0x4734 mem_select_device_button_statue
+0x4735 mem_commbination_key_statue
+0x4736 mem_combination_ui_button_count
+0x4737 mem_24g_shutdown_flag
+0x4738 mem_24g_long_sleep_set_level
+0x4739 mem_tx_power_factory_param
+0x473b mem_mouse_24g_long_sleep_flag
+0x473c mem_mouse_long_mult_count
+0x473d mem_mouse_long_mult_flag
+0x473e mem_mouse_current_mult_timer
+0x473f mem_reconn_times
+0x4740 mem_reconn_times_init
+0x4741 mem_device_no_data_timer
+0x4743 mem_mouse_rssi_signal_buf
+0x474b mem_btclk_sensor
+0x474f mem_device_fast_conn_flag
+0x4750 mem_device_discovery_timer
+0x4752 mem_device_need_soft_reset
+0x4753 mem_device_le_bb_connected_flag
+0x4754 mem_device_le_reconnect_flag
+0x4755 mem_device_send_secutiry_request_timer
+0x4756 mem_device_le_lap_temp
+0x4759 mem_le_adv_ind
+0x475c mem_le_adv_direct_ind
+0x475f mem_le_adv_swift_pair
+0x4773 mem_le_data_len
+0x4774 mem_le_keyboard_handle
+0x4776 mem_le_multimedia_handle
+0x4778 mem_le_systemctrl_handle
+0x477a mem_le_battery_level_handle
+0x477c mem_le_battery_level_percentage
+0x477d mem_le_battery_level_updata_timer_init
+0x477f mem_le_battery_level_updata_timer
+0x4781 mem_le_conn_param_reject
+0x4782 mem_le_tx_buffer0_omemalloc
+0x47c2 mem_le_tx_buffer1_omemalloc
+0x47c2 mem_le_tx_buffer2_omemalloc
+0x47c2 mem_le_tx_buffer3_omemalloc
+0x47c2 mem_le_rx_buffer
+0x47c2 mem_24g_txbuf_new
+0x4808 mem_24g_txpayload_new
+0x4853 mem_ms_auth_appkey
+0x485a mem_ms_auth_secret
+0x486a msm_ms_auth_sn
+0x4870 mem_ms_auth_chip_id
+0x4872 mem_ms_version
+0x4873 mem_ms_recv_ackpayload_temp
+0x487b mem_ms_tx_pro_key_flag
+0x487d mem_ms_tx_pro_key_val
+0x487e mem_ms_long_press_key_index
+0x4880 mem_ms_tx_nor_pro_data_flag
+0x4882 mem_le_connect_status_flag
+0x4883 mem_le_start_encrypt_timer
+0x4884 mem_device_addr_temp
+0x488b mem_lpm_mult_init
+0x488c mem_qdec_set_flag
+0x488d mem_power_on_flag
+0x488e mem_keyboard_flag
+0x4896 mem_keyboard_switch_count_temp
+0x4897 mem_keyboard_switch_device_to_g24
+0x489a mem_keyboard_switch_device_to_bt1
+0x489d mem_keyboard_switch_device_to_bt2
+0x48a0 mem_keyboard_switch_device_to_bt3
+0x48a3 mem_keyboard_switch_device_to_usb
+0x48a6 mem_keyboard_switch_device_flag
+0x48a7 mem_keyboard_switch_g24_enable
+0x48a8 mem_keyboard_switch_bt_enable
+0x48a9 mem_keyboard_switch_g24_press_timer
+0x48aa mem_keyboard_switch_bt_press_timer
+0x48ab mem_keyboard_vdd_full_vol
+0x48ad mem_keyboard_vdd_empty_vol
+0x48af mem_keyboard_vdd_low_vol
+0x48b1 mem_keyboard_power_type
+0x48b2 mem_rgb_pwm_conf
+0x48b8 mem_rgb_pwm_breathe_flag
+0x48b9 mem_rgb_on_color_temp
+0x48ba mem_rgb_on_color
+0x48c1 mem_pwm_lpm_mode_flag
+0x48c2 mem_keyboard_rgb_on_timer
+0x48c4 mem_ui_check_timer_setup
+0x48c8 mem_customize_timer_setup
+0x48ca mem_backlight_breathe_type
+0x48cb mem_keyboard_le_lap_temp
+0x48ce mem_keyboard_le_change_vid_pid_flag
+0x48cf mem_keybaord_le_pnp_vid_source
+0x48d0 mem_keyboard_le_vid
+0x48d2 mem_keyboard_le_pid
+0x48d4 mem_keyboard_le_product_version
+0x48d6 mem_keyboard_le_hid_map
+0x48d8 mem_keyboard_blob_response_consumer_customize
+0x48ee mem_le_search_service_uuid
+0x48fe mem_le_connect_ios_mac_flag
+0x48ff mem_le_search_mac_uuid
+0x4901 mem_le_search_mac_manu_name
+0x490a mem_keybord_appearance
+0x490c mem_keyboard_le_send_conn_param_update
+0x490d mem_keyboard_le_send_conn_param_update_timer
+0x490e mem_le_start_auto_reco_timer
+0x490f mem_keyboard_pb_button_gpio
+0x4910 mem_mcu_stb_gpio
+0x4911 mem_mcu_clk_gpio
+0x4912 mem_mcu_rstb_gpio
+0x4913 mem_keyboard_num_led_gpio
+0x4914 mem_keyboard_caps_led_gpio
+0x4915 mem_keyboard_scroll_led_gpio
+0x4916 mem_keyboard_power_led_gpio
+0x4917 mem_keyboard_low_voltage_alarm_gpio
+0x4918 mem_keyboard_24g_led_gpio
+0x4919 mem_keyboard_bt1_led_gpio
+0x491a mem_keyboard_bt2_led_gpio
+0x491b mem_keyboard_bt3_led_gpio
+0x491c mem_keyboard_led_r_gpio
+0x491d mem_keyboard_led_g_gpio
+0x491e mem_keyboard_led_b_gpio
+0x491f mem_key_row_gpio
+0x4927 mem_key_col_gpio
+0x493c mem_key_excol_gpio
+0x4948 mem_kb_row_ptr
+0x494a mem_kb_col_ptr
+0x494c mem_kb_excol_ptr
+0x494e mem_keyscan_value_current
+0x4963 mem_keyscan_value_check
+0x4978 mem_keyscan_value_old
+0x498d mem_keyscan_exmcu_value
+0x4998 mem_keyscan_value_ptr
+0x499a mem_keyscan_exmcu_value_ptr
+0x499c mem_keyscan_value_temp
+0x499d mem_keyscan_col_loop_count
+0x499e mem_keyscan_exmcu_wait_wake_count
+0x49a0 mem_same_keyvalue_timerout_flag
+0x49a1 mem_same_keyvalue_timer_init
+0x49a3 mem_same_keyvalue_timer
+0x49a5 mem_keyboard_current_col_press_key_count
+0x49a6 mem_keyboard_all_press_key_count
+0x49a7 mem_keyboard_same_row_press_key_count
+0x49a8 mem_keyboard_ghost_flag
+0x49a9 mem_keyboard_data_change_flag
+0x49aa mem_keyboard_keyvalue_temp
+0x49ab mem_keyboard_press_flag_temp
+0x49ac mem_keyboard_keyvalue_bit_loop_count
+0x49ad mem_keyboard_keyvalue_buffer
+0x49b7 mem_keboard_n_key_rollover_send_flag
+0x49b8 mem_keyboard_n_key_rollover_data
+0x49c7 mem_keyboard_keyvalue_map
+0x4a6f mem_keyboard_tx_data
+0x4a79 mem_keyboard_data_send_flag
+0x4a7a mem_keyboard_fn_flag
+0x4a7b mem_keyboard_control_key_flag
+0x4a7c mem_keyboard_alt_flag
+0x4a7d mem_keyboard_shift_flag
+0x4a7e mem_keyboard_bt_button_flag
+0x4a7f mem_keyboard_pairing_type
+0x4a80 mem_24g_repeat_send_flag
+0x4a81 mem_keyboard_led_status_get
+0x4a82 mem_keyboard_led_status_get_timer
+0x4a83 mem_keyboard_led_status_get_timer_last
+0x4a84 mem_keyboard_fn_esc_f1_f12
+0x4a84 mem_keyboard_fn_first
+0x4a85 mem_keyboard_fn_esc
+0x4a86 mem_keyboard_fn_f1
+0x4a87 mem_keyboard_fn_f2
+0x4a88 mem_keyboard_fn_f3
+0x4a89 mem_keyboard_fn_f4
+0x4a8a mem_keyboard_fn_f5
+0x4a8b mem_keyboard_fn_f6
+0x4a8c mem_keyboard_fn_f7
+0x4a8d mem_keyboard_fn_f8
+0x4a8e mem_keyboard_fn_f9
+0x4a8f mem_keyboard_fn_f10
+0x4a90 mem_keyboard_fn_f11
+0x4a91 mem_keyboard_fn_f12
+0x4a92 mem_keyboard_fn_del
+0x4a93 mem_keyboard_fn_lock_flag
+0x4a94 mem_keyboard_fn_lock_keyvalue
+0x4a95 mem_keyboard_commbination_key_bt
+0x4a97 mem_keyboard_commbination_key_24g
+0x4a99 mem_keyboard_commbination_fast_conn_bt
+0x4a9b mem_keyboard_commbination_press_type
+0x4a9c mem_keyboard_commbination_key_step
+0x4a9d mem_keyboard_commbination_control_key_value
+0x4a9e mem_keyboard_commbination_standard_key_value
+0x4a9f mem_keyboard_commbination_control_key_delay_release_timer
+0x4aa0 mem_keyboard_consumer_key_status
+0x4aa1 mem_kb_computer_system
+0x4aa2 mem_keyboard_device_info_store_flag
+0x4aa3 mem_otp_store_device_info_flag
+0x4aa4 mem_otp_store_system_flag
+0x4aa5 mem_otp_read_retention_memory
+0x4abd mem_otp_read_retention_offset
+0x4abf mem_otp_read_retention_max_size
+0x4ac1 mem_keyboard_device_poweron_timer_init
+0x4ac2 mem_keyboard_device_poweron_timer
+0x4ac3 mem_keyboard_num_caps_scoll_led_on_timer
+0x4ac5 mem_keyboard_mode_led_on_timer
+0x4ac6 mem_keyboard_adc_low_volatage_led_timer_count
+0x4ac7 mem_adc_low_volatage_led_blink_timer
+0x4ac9 mem_keyboard_low_volatage_led_flag
+0x4aca mem_keyboard_low_volatage_led_blink_count
+0x4acb mem_keyboard_low_volatage_led_blink_new_data_enable
+0x4acc mem_keyboard_pair_led_flag
+0x4acd mem_keyboard_pair_led_blink_count
+0x4ace mem_usb_vdd_status_current
+0x4acf mem_usb_vdd_status_last
+0x4ad0 mem_usb_wait_updata_timer
+0x4ad1 mem_keyboard_usb_vid_pid
+0x488d mem_mouse_param_config
+0x488d mem_lbutton_gpio
+0x488e mem_mbutton_gpio
+0x488f mem_rbutton_gpio
+0x4890 mem_bk_button_gpio
+0x4891 mem_fw_button_gpio
+0x4892 mem_dpi_button_gpio
+0x4893 mem_mouse_sensor_sclk_gpio
+0x4894 mem_mouse_sensor_sdio_gpio
+0x4895 mem_select_sensor_angle_gpio
+0x4896 mem_sensor_angle_default
+0x4897 mem_sensor_angle_gnd
+0x4898 mem_sensor_angle_vin
+0x4899 mem_config_sensor_dpi
+0x489a mem_whee_ta_data_gpio
+0x489b mem_whee_tb_data_gpio
+0x489c mem_matrix_public_gpio
+0x489d mem_config_select_device_button_gpio
+0x489e mem_customer_key_gpio
+0x489f mem_firebutton_gpio
+0x48a0 mem_dpi_another_button_gpio
+0x48a1 mem_mouse_logo_led_gpio
+0x48a2 mem_mouse_1io2led_multi_24gled
+0x48a3 mem_mouse_1io2led_multi_bt1led
+0x48a4 mem_mouse_1io2led_multi_bt2led
+0x48a5 mem_mouse_low_voltage_alarm_gpio
+0x48a6 mem_mouse_dpi_gpio
+0x48a7 mem_mouse_param_config_end
+0x48a7 mem_device_temp_gpio
+0x48a8 mem_mouse_multi_led_blink_enable
+0x48a9 mem_mouse_multi_led_type
+0x48aa mem_mouse_multi_led_state
+0x48ab mem_mouse_multi_led_blink_type//00:rtn	01:24g blink	02:le blink		03:reconn blink 	04:low blink	05:dpi blink
+0x48ac mem_mouse_le_reconn_blink_limit
+0x48ad mem_mouse_multi_led_powon_timer_init//power on time
+0x48ae mem_mouse_multi_led_powon_timer
+0x48af mem_mouse_multi_24gled_blink_timer_init//24gled blink time
+0x48b0 mem_mouse_multi_le_discovery_blink_timer_init//le discovery blink time
+0x48b1 mem_mouse_multi_le_reconn_blink_timer_init//le reconn blink time
+0x48b2 mem_mouse_dpi_led_blink_timer_init//dpi blink time
+0x48b3 mem_mouse_multi_led_blink_timer
+0x48b4 mem_mouse_low_led_blink_timer//low blink time
+0x48b5 mem_mouse_low_led_blink_half_timer
+0x48b6 mem_mouse_multi_24gled_blink_count_init//24g count
+0x48b7 mem_mouse_multi_le_reconn_blink_count_init//le reconn count
+0x48b8 mem_mouse_multi_led_blink_count
+0x48b9 mem_mouse_multi_lowled_blink_count_init//low count
+0x48ba mem_mouse_multi_low_led_blink_count
+0x48bb mem_mouse_logo_led_on_time_init
+0x48bd mem_mouse_dpi_led_delay_count
+0x48be mem_mouse_dpi_led_delay_count_init
+0x48bf mem_mouse_24g_fast_hop_count_2ms
+0x48c0 mem_mouse_24g_short_sleep_set_4ms
+0x48c3 mem_mouse_24g_long_sleep_set_4ms
+0x48c6 mem_mouse_24g_short_sleep_set_8ms
+0x48c9 mem_mouse_24g_long_sleep_set_8ms
+0x48cc mem_mouse_24g_tsniff
+0x48d0 mem_mouse_24g_tsniff_2ms
+0x48d4 mem_mouse_24g_tsniff_4ms
+0x48d8 mem_mouse_24g_tsniff_8ms
+0x48dc mem_mouse_24g_short_sleep_set_init
+0x48df mem_mouse_24g_tx_count
+0x48e0 mem_mouse_24g_tx_time_last
+0x48e6 mem_mouse_24g_tx_time_last_delt
+0x48ea mem_mouse_24g_tx_time_sum
+0x48ef mem_mouse_24g_tx_time_sum_count
+0x48f0 mem_mouse_24g_tx_time_offset
+0x48f1 mem_mouse_24g_sleep_miss
+0x48f2 mem_mouse_24g_sleep_time_temp
+0x48f6 mem_mouse_24g_sleep_miss_temp
+0x48fa mem_mouse_sleep_deal_type
+0x48fb mem_sensor_id1
+0x48fc mem_sensor_id2
+0x48fd mem_mouse_move_flag
+0x48fe mem_mouse_asm_flag
+0x48ff mem_mouse_x_pre
+0x4901 mem_mouse_y_pre
+0x4903 mem_mouse_data_xtemp
+0x4904 mem_mouse_data_ytemp
+0x4905 mem_mouse_dpi_seting
+0x4905 mem_320x_dpi_0
+0x4906 mem_320x_dpi_1
+0x4907 mem_320x_dpi_2
+0x4908 mem_320x_dpi_3
+0x4909 mem_3212_dpi_0
+0x490a mem_3212_dpi_1
+0x490b mem_3212_dpi_2
+0x490c mem_3212_dpi_3
+0x490d mem_ka8g2_dpi_0
+0x490e mem_ka8g2_dpi_1
+0x490f mem_ka8g2_dpi_2
+0x4910 mem_ka8g2_dpi_3
+0x4911 mem_sensor_s201_dpi
+0x4911 mem_sensor_s201_dpi_0
+0x4912 mem_sensor_s201_dpi_1
+0x4913 mem_sensor_s201_dpi_2
+0x4914 mem_sensor_s201_dpi_3
+0x4915 mem_sensor_s201_dpi_4
+0x4916 mem_mouse_cpi_count
+0x4917 mem_mouse_dpi_button_state
+0x4918 mem_mouse_dpi_long_press_flag
+0x4919 mem_sensor_3212_init
+0x4923 mem_sensor_3204_init
+0x492d mem_sensor_3205_init
+0x4937 mem_sensor_32xx_init
+0x4951 mem_sensor_32xx_init_1
+0x4973 mem_sensor_8650_init
+0x4991 mem_sensor_ka8ul_init
+0x49af mem_sensor_8009_init
+0x49bf mem_sensor_ka8g2_init
+0x49d1 mem_sensor_p6520_init
+0x49dd mem_sensor_ka5857_init
+0x49e9 mem_sensor_poweron_init
+0x49f1 mem_sensor_ka8g2_poweron_init
+0x49f9 mem_mouse_clear_sensor_data_flag
+0x49fa mem_config_sensor_type
+0x49fb mem_config_sensor_angle
+0x49fc mem_bluetooth_125hz_cnt
+0x49fd mem_customer_key_press_init
+0x4a07 mem_mouse_lkey_press_status
+0x4a08 mem_mouse_rkey_press_status
+0x4a09 mem_mouse_mkey_press_status
+0x4a0a mem_mouse_bkkey_press_status
+0x4a0b mem_mouse_fwkey_press_status
+0x4a0c mem_mouse_dpikey_press_status
+0x4a0d mem_mouse_pbkey_press_status
+0x4a0e mem_mouse_customerkey_press_status
+0x4a0f mem_mouse_key_temp
+0x4a10 mem_mouse_key_status
+0x4a11 mem_mouse_matrix_key_cow_count
+0x4a12 mem_mouse_matrix_key_row_count
+0x4a13 mem_mouse_ghost_flag
+0x4a14 mem_fire_key_status
+0x4a15 mem_fire_key_delay
+0x4a19 mem_fire_key_flag
+0x4a1a mem_dpi_another_press_status
+0x4a1b mem_dpi_another_button_state
+0x4a1c mem_dpi_another_button_down_enable
+0x4a1d mem_mouse_key_temp_patch
+0x4a1e mem_le_name_patch_len
+0x4a1f mem_le_name_patch
+0x4a32 mem_device_flag_last
+0x4a33 mem_device_flag_value
+0x4a34 mem_mouse_le_addr1_last
+0x4a3a mem_mouse_le_addr1_temp
+0x4a40 mem_mouse_le_locall_addr1_last
+0x4a46 mem_mouse_le_locall_addr1_temp
+0x4a4c mem_mouse_le_addr2_last
+0x4a52 mem_mouse_le_addr2_temp
+0x4a58 mem_mouse_le_locall_addr2_last
+0x4a5e mem_mouse_le_locall_addr2_temp
+0x4a64 mem_mouse_dpi_last
+0x4a65 mem_mouse_dpi_temp
+0x4a66 mem_mouse_otp_dpi_value
+0x4a67 mem_mouse_24g_addr_last
+0x4a6b mem_mouse_24g_addr_temp
+0x4a6f mem_random_addr_increase_count_last
+0x4a71 mem_random_addr_increase_count_temp
+0x4a73 mem_otp_offset_le_addr2
+0x4a75 mem_otp_offset_le_addr2_end
+0x4a77 mem_otp_offset_le_locall_addr2
+0x4a79 mem_otp_offset_le_locall_addr2_end
+0x4a7b mem_otp_offset_dpi
+0x4a7d mem_otp_offset_dpi_end
+0x4a7f mem_otp_offset_device_flag
+0x4a81 mem_otp_offset_device_flag_end
+0x4a83 mem_otp_offset_24g_addr
+0x4a85 mem_otp_offset_24g_addr_end
+0x4a87 mem_otp_offset_le_addr1
+0x4a89 mem_otp_offset_le_addr1_end
+0x4a8b mem_otp_offset_le_locall_addr1
+0x4a8d mem_otp_offset_le_locall_addr1_end
+0x4a8f mem_otp_offset_le_addr_increase_count
+0x4a91 mem_otp_offset_le_addr_increase_count_end
+0x4a93 mem_otp_offset_app_initflag
+0x4a95 mem_usb_tx_interval_retention
+0x4a96 mem_usb_vid_pid_retention
+0x4a9f mem_usb_device_name_retention
+0x4abd mem_mouse_commbination_key_bt
+0x4abe mem_mouse_commbination_key_24g
+0x4abf mem_mouse_commbination_key_dpi
+0x4ac0 mem_mouse_commbination_key_select_device
+0x4ac1 mem_mouse_commbination_dpi_timer
+0x4ac2 mem_mouse_commbination_select_device_timer
+0x4ac3 mem_mouse_commbination_key_count
+0x4ac4 mem_mouse_pair_flag
+0x4ac5 mem_mouse_le_send_conn_param_update
+0x4ac6 mem_mouse_le_send_conn_param_update_timer
+0x4ac7 mem_att_write_resposnse_error_insufficient_auth
+0x4ac8 mem_ad_indexTable1
+0x4ad8 mem_ad_stepsizeTable1
+0x4c3c mem_ad_state_valpred1
+0x4c40 mem_ad_state_index1
+0x4c44 mem_ad_in_numSamples1
+0x4c45 mem_ad_in_ptr1
+0x4c47 mem_ad_out_ptr1
+0x4c49 mem_ad_sign1
+0x4c4a mem_ad_delta1
+0x4c4b mem_ad_step1
+0x4c4f mem_ad_valpred1
+0x4c53 mem_ad_index1
+0x4c57 mem_ad_vpdiff1
+0x4c5b mem_ad_inputbuffer1
+0x4c5f mem_ad_bufferstep1
+0x4c60 mem_ad_val1
+0x4c64 mem_ad_outputbuffer1
+0x4c68 mem_ad_diff1
+0x4c6c mem_ms_audio_enable_flag
+0x4c6d mem_ms_audio_enable_timer
+0x4c6e mem_ms_adc_mode
+0x4c6f mem_voice_enable
+0x4c70 mem_adc_dma_rptr
+0x4c72 mem_adc_audio_saddr_ptr
+0x4c74 mem_adc_audio_eaddr_ptr
+0x4c76 mem_ms_24g_temp_buff
+0x4cb4 mem_ms_nor_pro_temp_buff
+0x4cb7 mem_24g_pair_addr_new
+0x4cbb mem_ms_rf_data_flag
+0x4cbc mem_ms_tx_data_type
+0x4cbd mem_device_tx_heart_data_flag
+0x4cbe mem_le_protocol_rx_handle
+0x4cc0 mem_le_protocol_tx_handle
+0x4cc2 mem_le_audio_tx_handle
+0x4cc4 mem_ms_le_interval_min_voice
+0x4ccc mem_ms_le_interval_min_new
+0x4cd4 mem_ms_le_lpm_flag
+0x4cd5 mem_ms_audio_key_gpio
+0x4cd6 mem_ms_audio_key_state
+0x4cd7 mem_ms_audio_key_press_status
+0x4cd8 mem_ms_audio_key_press_count
+0x4cd9 mem_ms_one_pullup_key_gpio
+0x4cda mem_ms_one_pullup_key_state
+0x4cdb mem_ms_one_pullup_key_press_status
+0x4cdc mem_ms_one_pullup_key_press_count
+0x4cdd mem_ms_transmit_key_gpio
+0x4cde mem_ms_transmit_key_state
+0x4cdf mem_ms_transmit_key_press_status
+0x4ce0 mem_ms_transmit_key_press_count
+0x4ce1 mem_mouse_dpi_type
+0x4ce2 mem_mouse_last_dpi
+0x4ce3 mem_mouse_dpi_set_result
+0x4ce4 mem_mouse_battery_type
+0x4ce5 mem_mouse_device_type
+0x4cf9 mem_ms_le_spi_reset_type
+0x4cfa mem_spid_tbuf_new
+0x4cfb mem_addr_hi_new
+0x4cfc mem_spid_rbuf_new
+0x4d00 mem_le_tx_buffer0_omemalloc_new
+0x4d50 mem_le_tx_buffer1_omemalloc_new
+0x4da0 mem_le_tx_buffer2_omemalloc_new
+0x4df0 mem_le_tx_buffer3_omemalloc_new
+0x4e40 mem_rxpayload_temp
+0x4e4a mem_mouse_key_fuction_info_temp
+0x4e4f mem_mouse_key_information_start
+0x4e4f mem_mouse_b4_fuction_info
+0x4e54 mem_mouse_b5_fuction_info
+0x4e59 mem_mouse_dpi_fuction_info
+0x4e5e mem_mouse_key_information_set_flag
+0x4e5f mem_store_key_info_delay_timer
+0x4e60 mem_store_key_info_delay_timer_init
+0x4e61 mem_mouse_fuction_key
+0x4e62 mem_mouse_fuction_key_last
+0x4e63 mem_mouse_m_key_press_flag
+0x4e64 mem_mouse_m_key_press_count
+0x4e65 mem_mouse_app_format_end
+0x4e65 mem_voice_empty_flag
+0x4e66 mem_zcode_temp_param0//zcode num
+0x4e67 mem_zcode_current_number
+0x4e68 mem_eeprom_start_addr
+0x4e6a mem_eeprom_address
+0x4e6c mem_xip_flash_offset
+0x4e6f mem_zcode_head
+0x4e73 mem_sensor_8650_init_new
+0x4e9b mem_eeprom_att_list_base
+0x4e9d mem_mouse_le_delay_enter_lpm_time
+0x4e9e mem_sensor_ka8g2_init_new
+0x4eb4 mem_24g_matrix_cnt
+0x4644 mem_remote_lpm_gpio_config_flag
+0x4648 mem_remote_lpm_gpio_config_io_temp
+0x4649 mem_24g_tx_led_map
+0x464a mem_24g_led_count
+0x464b mem_24g_lpm_timer_count
+0x464d mem_24g_lpm_enter_count
+0x464f mem_remote_otp_lot_xy_temp
+0x4655 mem_remote_full_control_remote_lap
+0x4659 mem_remote_car_key_conf0
+0x4659 mem_remote_car_key_conf0_pin
+0x465a mem_remote_car_key_conf1
+0x465a mem_remote_car_key_conf1_pin
+0x465b mem_remote_car_key_conf2
+0x465b mem_remote_car_key_conf2_pin
+0x465c mem_remote_car_key_conf3
+0x465c mem_remote_car_key_conf3_pin
+0x465d mem_remote_car_key_conf4
+0x465d mem_remote_car_key_conf4_pin
+0x465e mem_remote_car_key_conf5
+0x465e mem_remote_car_key_conf5_pin
+0x465f mem_remote_car_key_conf6
+0x465f mem_remote_car_key_conf6_pin
+0x4660 mem_remote_le_24g_recv_ack_flag
+0x4661 mem_key_public_gpio
+0x4662 mem_remote_mult_key
+0x4663 mem_remote_le_24g_ch_count
+0x4665 mem_le_24g_tx_send_flag
+0x4666 mem_remote_le_24g_tx_pair_mode
+0x4667 mem_remote_24g_addr_other
+0x466b mem_remote_24g_tx_payload_temp
+0x4677 mem_remote_24g_rx_payload_temp
+0x4508 mem_hci_uart_tx_gpio
+0x4509 mem_hci_uart_rx_gpio
+0x450a mem_hci_uart_rts_gpio
+0x450b mem_hci_uart_cts_gpio
+0x450c mem_hci_pwm_12mhz_gpio
+0x4508 mem_soft_version_num
+0x450a mem_module_wake_up_gpio
+0x450b mem_module_state_gpio
+0x450c mem_module_connect_state_gpio
+0x450d mem_current_packet_length
+0x450f mem_module_state
+0x4510 mem_module_mcu_wake_pin
+0x4511 mem_module_mcu_wake_delay_us
+0x4515 mem_module_le_lpm_mult
+0x4516 mem_module_bluetooth_stauts_by_command
+0x4517 mem_module_uart_rx_buffer
+0x4519 mem_module_uart_rx_buffer_end
+0x451b mem_module_uart_tx_buffer
+0x451d mem_module_uart_tx_buffer_end
+0x451f mem_module_uarta_baud_rate
+0x4521 mem_module_read_vdd_flag
+0x4522 mem_module_read_vdd_count
+0x4523 mem_module_vdd_quotient
+0x4524 mem_module_vdd_remainder
+0x4525 mem_module_ble_data_uart_max_length
+0x4526 mem_module_flag
+0x4528 mem_module_hci_notify_len
+0x4529 mem_module_hci_notify_handle
+0x452b mem_module_hci_nofiy_addr
+0x452d mem_module_hci_notify_type
+0x452e mem_le_conn_flag
+0x452f mem_module_le_att_list
+0x4787 mem_module_le_att_list_end
+0x4787 mem_module_nv_data
+0x4787 mem_module_nv_data0
+0x47a9 mem_module_nv_data1
+0x47cb mem_module_nv_data2
+0x47ed mem_module_nv_data3
+0x480f mem_module_nv_data4
+0x4831 mem_module_nv_data_end
+0x4508 mem_xmalloc_rec_start
+0x4508 mem_rec_le_att_list
+0x49c7 mem_rec_led_style
+0x49c7 mem_rec_led_style_type
+0x49c8 mem_rec_led_style_blink_count
+0x49c9 mem_rec_led_style_gpio
+0x49ca mem_rec_led_style_on_time
+0x49cc mem_rec_led_style_off_time
+0x49ce mem_rec_led_style_on_callback
+0x49d0 mem_rec_led_style_off_callback
+0x49d2 mem_rec_led2_style
+0x49d2 mem_rec_led2_style_type
+0x49d3 mem_rec_led2_style_blink_count
+0x49d4 mem_rec_led2_style_gpio
+0x49d5 mem_rec_led2_style_on_time
+0x49d7 mem_rec_led2_style_off_time
+0x49d9 mem_rec_led2_style_on_callback
+0x49db mem_rec_led2_style_off_callback
+0x49dd mem_rec_le_pair_led_style
+0x49dd mem_rec_le_pair_led_style_type
+0x49de mem_rec_le_pair_led_style_blink_count
+0x49df mem_rec_le_pair_led_style_gpio
+0x49e0 mem_rec_le_pair_led_style_on_time
+0x49e2 mem_rec_le_pair_led_style_off_time
+0x49e4 mem_rec_le_reconn_led_style
+0x49e4 mem_rec_le_reconn_led_style_type
+0x49e5 mem_rec_le_reconn_led_style_blink_count
+0x49e6 mem_rec_le_reconn_led_style_gpio
+0x49e7 mem_rec_le_reconn_led_style_on_time
+0x49e9 mem_rec_le_reconn_led_style_off_time
+0x49eb mem_rec_adc_low_led_style
+0x49eb mem_rec_adc_low_led_style_type
+0x49ec mem_rec_adc_low_led_style_blink_count
+0x49ed mem_rec_adc_low_led_style_gpio
+0x49ee mem_rec_adc_low_led_style_on_time
+0x49f0 mem_rec_adc_low_led_style_off_time
+0x49f2 mem_rec_ui_timer_btclk
+0x49f6 mem_rec_ui_timer_count
+0x49f7 mem_rec_cb_timer
+0x49f9 mem_rec_tscan_timer
+0x49fa mem_rec_tscan_timeout
+0x49fb mem_rec_tscan_row_nums
+0x49fc mem_rec_tscan_col_nums
+0x49fd mem_rec_tscan_col_gpio_ptr
+0x49ff mem_rec_tscan_row_scanned
+0x4a00 mem_rec_tscan_col_scanned
+0x4a01 mem_rec_tscan_record_row
+0x4a02 mem_rec_tscan_record_col
+0x4a03 mem_rec_tscan_row_gpio
+0x4a0d mem_rec_tscan_col_gpio
+0x4a17 mem_rec_tscan_sequence
+0x4a18 mem_rec_tscan_gpio_nums
+0x4a19 mem_rec_tscan_row_scan_loop_count
+0x4a1a mem_rec_key_state
+0x4a1a mem_rec_tscan_gndkey_state
+0x4a1b mem_rec_tscan_key_state
+0x4a1c mem_rec_tscan_record_temp
+0x4a1e mem_rec_tscan_key_need_send_flag
+0x4a1f mem_rec_tscan_current_key_num
+0x4a20 mem_rec_gpio_wakeup_source
+0x4a21 mem_rec_tscan_gndkey_record_temp
+0x4a22 mem_rec_tscan_gndkey_need_send_flag
+0x4a23 mem_rec_tscan_key_nums_list
+0x4a4b mem_rec_tscan_gndkey_nums_list
+0x4a55 mem_rec_tscan_key_num_bit
+0x4a5d mem_rec_tscan_combin_key_num_bit
+0x4a65 mem_rec_tscan_current_gpio_ptr
+0x4a67 mem_rec_tscan_record_now
+0x4a69 mem_rec_combin_key_timeout
+0x4a6a mem_rec_combin_key_timer
+0x4a6b mem_rec_gpio_bit_first
+0x4a6c mem_rec_gpio_bit_second
+0x4a6d mem_rec_gpio_bit_check
+0x4a6e mem_rec_gpio_for_wake_pullup
+0x4a6f mem_rec_keypad_type
+0x4a70 mem_rec_key_keyboard_value_list
+0x4b10 mem_rec_key_consumer_value_list
+0x4b40 mem_rec_key_mouse_value_list
+0x4b80 mem_rec_key_nec_value_list
+0x4bb0 mem_rec_key_press_le
+0x4bb0 mem_rec_key1_press_le
+0x4bb3 mem_rec_key2_press_le
+0x4bb6 mem_rec_key3_press_le
+0x4bb9 mem_rec_key4_press_le
+0x4bbc mem_rec_key5_press_le
+0x4bbf mem_rec_key6_press_le
+0x4bc2 mem_rec_key7_press_le
+0x4bc5 mem_rec_key8_press_le
+0x4bc8 mem_rec_key9_press_le
+0x4bcb mem_rec_key10_press_le
+0x4bce mem_rec_key11_press_le
+0x4bd1 mem_rec_key12_press_le
+0x4bd4 mem_rec_key13_press_le
+0x4bd7 mem_rec_key14_press_le
+0x4bda mem_rec_key15_press_le
+0x4bdd mem_rec_key16_press_le
+0x4be0 mem_rec_key17_press_le
+0x4be3 mem_rec_key18_press_le
+0x4be6 mem_rec_key19_press_le
+0x4be9 mem_rec_key20_press_le
+0x4bec mem_rec_key21_press_le
+0x4bef mem_rec_key_release_le
+0x4bf2 mem_rec_key_map
+0x4c07 mem_rec_gnd_key_offset
+0x4c08 mem_rec_keypad_fun
+0x4c09 mem_rec_le_enable_notify
+0x4c0a mem_rec_le_data_len
+0x4c0b mem_rec_le_connect_state
+0x4c0c mem_rec_report_id1_handle
+0x4c0e mem_rec_report_id2_handle
+0x4c10 mem_rec_report_id3_handle
+0x4c12 mem_rec_report_id4_handle
+0x4c14 mem_rec_queue_each_size
+0x4c15 mem_rec_queue_length
+0x4c16 mem_rec_queue_curr_num
+0x4c17 mem_rec_queue_read_ptr
+0x4c18 mem_rec_queue_write_ptr
+0x4c19 mem_rec_queue_ele
+0x4c39 mem_rec_ad_indexTable1
+0x4c49 mem_rec_ad_stepsizeTable1
+0x4dad mem_rec_ad_state_valpred1
+0x4db1 mem_rec_ad_state_index1
+0x4db5 mem_rec_ad_in_numSamples1
+0x4db6 mem_rec_ad_in_ptr1
+0x4db8 mem_rec_ad_out_ptr1
+0x4dba mem_rec_ad_sign1
+0x4dbb mem_rec_ad_delta1
+0x4dbc mem_rec_ad_step1
+0x4dc0 mem_rec_ad_valpred1
+0x4dc4 mem_rec_ad_index1
+0x4dc8 mem_rec_ad_vpdiff1
+0x4dcc mem_rec_ad_inputbuffer1
+0x4dd0 mem_rec_ad_bufferstep1
+0x4dd1 mem_rec_ad_val1
+0x4dd5 mem_rec_ad_outputbuffer1
+0x4dd9 mem_rec_ad_diff1
+0x4ddd mem_rec_voice_enable
+0x4dde mem_rec_voice_notify
+0x4df2 mem_rec_adc_dma_rptr
+0x4df4 mem_rec_voice_notify_apk_handle
+0x4df6 mem_rec_voice_notify_box_handle
+0x4df8 mem_rec_control_notify_apk_handle
+0x4dfa mem_rec_control_notify_box_handle
+0x4dfc mem_rec_white_list_num
+0x4dfd mem_rec_le_scan_filter_policy
+0x4dfe mem_rec_white_list_flash_write_head
+0x4e02 mem_rec_white_list
+0x4e32 mem_rec_le_req_type
+0x4e33 mem_rec_nec_send_gpio
+0x4e34 mem_rec_nec_receive_gpio
+0x4e35 mem_rec_ota_write_index
+0x4e37 mem_rec_ota_write_length
+0x4e3b mem_rec_ota_write_data_addr
+0x4e3d mem_rec_ota_write_flash_addr
+0x4e40 mem_rec_ota_write_flash_addr_start
+0x4e43 mem_rec_ota_total_sum
+0x4e47 mem_rec_ota_update_flash_mode
+0x4e48 mem_rec_ota_version
+0x4e4a mem_rec_ota_buck_size
+0x4e4c mem_rec_ota_packet_max_len
+0x4e4e mem_rec_ota_work_mode
+0x4e4f mem_rec_ota_notify_handle
+0x4e51 mem_rec_ota_notify_opcode
+0x4e52 mem_rec_ota_notify_result
+0x4e53 mem_rec_ota_notify_data
+0x4e5c mem_rec_ota_le_conn_update_param
+0x4e5c mem_rec_ota_le_interval_min
+0x4e5e mem_rec_ota_le_interval_max
+0x4e60 mem_rec_ota_le_latency
+0x4e62 mem_rec_ota_le_timeout
+0x4e64 mem_rec_ota_reset_timeout
+0x4e65 mem_rec_ota_le_conn_param_update
+0x4e66 mem_rec_ota_enable
+0x4e67 mem_rec_le_packet_size
+0x4e68 mem_rec_ota_flash_base_addr
+0x4e6b mem_rec_ota_flash_offset_addr
+0x4e6e mem_rec_queue_ota_count
+0x4e70 mem_rec_ota_queue_size
+0x4e72 mem_rec_code_a_flash_addr
+0x4e75 mem_rec_code_b_flash_addr
+0x4e78 mem_xmalloc_rec_end
+0x4508 mem_ble_shutter_enable_notify
+0x4509 mem_ble_shutter_reconn_adv_interval
+0x450b mem_ble_shutter_discovery_adv_interval
+0x450d mem_ble_shutter_reconn_timeout
+0x450f mem_ble_shutter_reconn_timer
+0x4511 mem_ble_shutter_reconn_blink_on_time
+0x4513 mem_ble_shutter_reconn_blink_off_time
+0x4515 mem_ble_shutter_discovery_blink_on_time
+0x4517 mem_ble_shutter_discovery_blink_off_time
+0x4519 mem_ble_shutter_interval_min
+0x451b mem_ble_shutter_interval_max
+0x451d mem_ble_shutter_latency
+0x451f mem_ble_shutter_timeout
+0x4521 mem_ble_shutter_interval_min_new
+0x4523 mem_ble_shutter_interval_max_new
+0x4525 mem_ble_shutter_latency_new
+0x4527 mem_ble_shutter_timeout_new
+0x4529 mem_ble_shutter_discovery_timeout
+0x452b mem_ble_shutter_connect_timeout
+0x452d mem_shutter_sleep_timeout
+0x452f mem_shutter_sleep_timer
+0x4531 mem_shutter_hard_soft_switch_case
+0x4532 mem_shutter_soft_switch_button_gpio
+0x4533 mem_shutter_soft_switch_power_state
+0x4534 mem_shutter_soft_switch_poweron_time
+0x4535 mem_shutter_soft_switch_poweroff_time
+0x4536 mem_shutter_soft_switch_poweron_callback_function
+0x4538 mem_shutter_soft_switch_poweroff_callback_function
+0x453a mem_shutter_keyscan
+0x453a mem_shutter_key_num
+0x453b mem_cb_shutter_keycan
+0x453d mem_shutter_key_conf0
+0x453e mem_shutter_key_conf1
+0x453f mem_key0_press
+0x4544 mem_key1_press
+0x4549 mem_key2_press
+0x454e mem_key0_release
+0x4553 mem_key1_release
+0x4558 mem_key2_release
+0x455d mem_ble_data_buffer1
+0x4562 mem_ble_data_buffer2
+0x4567 mem_ble_data_buffer3
+0x456c mem_ble_data_buffer4
+0x4571 mem_ble_data_buffer5
+0x4576 mem_ble_data_buffer6
+0x457b mem_ble_data_buffer7
+0x4580 mem_ble_data_buffer8
+0x4585 mem_ble_data_buffer9_58
+0x45b7 mem_queue_each_size
+0x45b8 mem_queue_length
+0x45b9 mem_queue_curr_num
+0x45ba mem_queue_read_ptr
+0x45bb mem_queue_write_ptr
+0x45bc mem_queue_ele
+0x45dc mem_shutter_nv_data
+0x4686 mem_shutter_led_struct_app_led
+0x4686 mem_shutter_led_struct_app_led_type
+0x4687 mem_shutter_led_struct_app_led_blink_count
+0x4688 mem_shutter_led_struct_app_led_gpio
+0x4689 mem_shutter_led_struct_app_led_on_time
+0x468b mem_shutter_led_struct_app_led_off_time
+0x468d mem_shutter_led_struct_app_led_on_callback
+0x468f mem_shutter_led_struct_app_led_off_callback
+0x4691 mem_shutter_power_off_led_style
+0x4691 mem_shutter_power_off_led_style_type
+0x4692 mem_shutter_power_off_led_style_blink_count
+0x4693 mem_shutter_power_off_led_style_gpio
+0x4694 mem_shutter_power_off_led_style_on_time
+0x4696 mem_shutter_power_off_led_style_off_time
+0x4698 mem_shutter_power_off_led_style_on_callback
+0x469a mem_shutter_power_off_led_style_off_callback
+0x469c mem_shutter_soft_swtich_botton_down
+0x469d mem_shutter_soft_swtich_led_struct_temp
+0x46a8 mem_shutter_power_off_timeout
+0x46a9 mem_shutter_power_off_timer
+0x46aa mem_shutter_key_conf0_temp
+0x46ac mem_shutter_led_struct_app_led_gpio_temp
+0x46ad mem_shutter_hard_soft_switch_case_temp
+0x46ae mem_shutter_soft_switch_button_gpio_temp
+0x46af mem_shutter_soft_switch_first_power_on
+0x46b0 mem_shutter_dy_conf
+0x46b1 mem_shutter_1s_timer
+0x46b2 mem_shutter_timer_625us
+0x46b4 mem_rf_init_data_new
+0x46bf mem_key_value_xmem
+0x46c1 mem_shutter_le_hid_map
+0x47a7 mem_shutter_le_uuid_sup
+0x4943 mem_shutter_le_map_len_android
+0x4945 mem_shutter_le_map_len_ios
+0x4947 mem_dy_le_search_service_uuid
+0x4957 mem_iphone_flag
+0x4958 mem_send_data_delay
+0x4959 mem_key_send_clk
+0x495d mem_shutter_key_state0
+0x4967 mem_shutter_key_state1
+0x4971 mem_shutter_key_state2
+0x497b mem_shutter_key_state3
+0x4985 mem_shutter_key_state4
+0x498f mem_shutter_key_state5
+0x4999 mem_shutter_key_state6
+0x49a3 mem_shutter_key_state7
+0x49ad mem_shutter_key_state8
+0x49b7 mem_dy_key0_press
+0x49c1 mem_dy_key1_press
+0x49cb mem_dy_key2_press
+0x49d5 mem_dy_key3_press
+0x49df mem_dy_key4_press
+0x49e9 mem_dy_key5_press
+0x49f3 mem_dy_key6_press
+0x49fd mem_dy_key7_press
+0x4a07 mem_dy_key8_press
+0x4a11 mem_key0_release_new
+0x4a20 mem_key1_release_new
+0x4a2f mem_key2_release_new
+0x4a3e mem_key3_release_new
+0x4a4d mem_key4_release_new
+0x4a5c mem_key5_release_new
+0x4a6b mem_key6_release_new
+0x4a7a mem_key7_release_new
+0x4a89 mem_key8_release_new
+0x4a98 mem_key0_long_press
+0x4a9b mem_key1_long_press
+0x4a9e mem_key2_long_press
+0x4aa1 mem_key3_long_press
+0x4aa4 mem_key4_long_press
+0x4aa7 mem_key5_long_press
+0x4aaa mem_key6_long_press
+0x4aad mem_key7_long_press
+0x4ab0 mem_key8_long_press
+0x4ab3 mem_key0_long_release
+0x4ab6 mem_key1_long_release
+0x4ab9 mem_key2_long_release
+0x4abc mem_key3_long_release
+0x4abf mem_key4_long_release
+0x4ac2 mem_key5_long_release
+0x4ac5 mem_key6_long_release
+0x4ac8 mem_key7_long_release
+0x4acb mem_key8_long_release
+0x4ace mem_combine_key0
+0x4ad0 mem_combine_key1
+0x4ad2 mem_combine_key2
+0x4ad4 mem_combine_key3
+0x4ad6 mem_combine_key4
+0x4ad8 mem_combine_key5
+0x4ada mem_combine_key_state0
+0x4adc mem_combine_key0_press
+0x4ae6 mem_combine_key1_press
+0x4af0 mem_combine_key2_press
+0x4afa mem_combine_key3_press
+0x4b04 mem_combine_key4_press
+0x4b0e mem_combine_key5_press
+0x4b18 mem_combine_key_release
+0x4b22 mem_shutter_move_data
+0x4b26 mem_key0_press_i
+0x4b30 mem_key1_press_i
+0x4b3a mem_key2_press_i
+0x4b44 mem_key3_press_i
+0x4b4e mem_key4_press_i
+0x4b58 mem_key5_press_i
+0x4b62 mem_key6_press_i
+0x4b6c mem_key7_press_i
+0x4b76 mem_key0_release_new_i
+0x4b85 mem_key1_release_new_i
+0x4b94 mem_key2_release_new_i
+0x4ba3 mem_key3_release_new_i
+0x4bb2 mem_key4_release_new_i
+0x4bc1 mem_key5_release_new_i
+0x4bd0 mem_key6_release_new_i
+0x4bdf mem_key7_release_new_i
+0x4bee mem_key8_release_new_i
+0x4bfd mem_key0_long_press_i
+0x4c00 mem_key1_long_press_i
+0x4c03 mem_key2_long_press_i
+0x4c06 mem_key3_long_press_i
+0x4c09 mem_key4_long_press_i
+0x4c0c mem_key5_long_press_i
+0x4c0f mem_key6_long_press_i
+0x4c12 mem_key7_long_press_i
+0x4c15 mem_key8_long_press_i
+0x4c18 mem_key0_long_release_i
+0x4c1b mem_key1_long_release_i
+0x4c1e mem_key2_long_release_i
+0x4c21 mem_key3_long_release_i
+0x4c24 mem_key4_long_release_i
+0x4c27 mem_key5_long_release_i
+0x4c2a mem_key6_long_release_i
+0x4c2d mem_key7_long_release_i
+0x4c30 mem_key8_long_release_i
+0x4c33 mem_key3_release_new_t
+0x4c3d mem_key3_release_new_i_t
+0x4c47 mem_key3_press_count
+0x4c48 mem_shutter_like_timeout
+0x4c49 mem_shutter_key_pressed
+0x4c4a mem_shutter_combine_key_release
+0x4c4b mem_shutter_mousekey_value_list
+0x4e71 mem_shutter_back_count
+0x4e72 mem_shutter_le_conned
+0x4e73 mem_move_config
+0x4e73 mem_shutter_iphone_beyond_x_count
+0x4e74 mem_shutter_iphone_beyond_y_count
+0x4e75 mem_shutter_move_data_x
+0x4e77 mem_shutter_move_data_y
+0x4e79 mem_last_shutter_le_iphone_flag
+0x4e7a mem_move_config_end
+0x4e7a mem_shutter_back_count_cache
+0x4e7b mem_shutter_iphone_beyond_x_cache
+0x4e7c mem_shutter_iphone_beyond_y_cache
+0x4e7d mem_shutter_iphone_move_mid
+0x4e87 mem_shutter_long_key_released_flag
+0x4e88 mem_shutter_move_mid_timer
+0x4e89 mem_shutter_pairing_success
+0x4e8a mem_combine_key_release_value
+0x4e8c mem_last_press_key_value
+0x4e8d mem_shutter_first_move
+0x4e8e mem_move_mode_set
+0x4e8f mem_move_mode_key_index
+0x4e90 mem_move_mode_trigger_enable
+0x4e91 mem_shutter_android_move_mid
+0x4e96 mem_shutter_iphone_up_mid
+0x4ea0 mem_shutter_iphone_like_mid
+0x4eaa mem_shutter_key_num_conf
+0x4eab mem_shutter_dy_key_conf
+0x4eb4 mem_le_dy_adv_data
+0x4ebf mem_le_dy_scan_data
+0x4ecb mem_ble_shutter_dy_interval_min_android
+0x4ed3 mem_ble_shutter_dy_interval_min_ios
+0x4edb mem_shutter_ble_discovery_time_conf
+0x4ee3 mem_queue_dy_each_size
+0x4ee5 mem_shutter_led_on_light_dark_led_conf
+0x4eec mem_shutter_led_off_light_dark_led_conf
+0x4ef3 mem_shutter_reconn_blink_on_time_conf
+0x4ef7 mem_shutter_discovery_blink_on_time_conf
+0x4efb mem_shutter_efuse_start_offset
+0x4efd mem_shutter_efuse_end_offset
+0x4eff mem_initial_move_conf
+0x4eff mem_android_initial_move_x
+0x4f01 mem_android_initial_move_y
+0x4f03 mem_iphone_initial_move_x
+0x4f05 mem_iphone_initial_move_y
+0x4f07 mem_otp_move_config
+0x4f07 mem_otp_shutter_move_data_x
+0x4f09 mem_otp_shutter_move_data_y
+0x4f0b mem_otp_last_shutter_le_iphone_flag
+0x4f0c mem_otp_move_config_end
+0x4f0c mem_otp_write_offset_addr
+0x4f0e mem_otp_read_offset_addr
+0x4f10 mem_otp_read_ios_android_addr
+0x4f12 mem_shutter_le_pairing_handle
+0x4f14 mem_shutter_temp_count
+0x4f16 mem_shutter_first_read_flag
+0x4f17 mem_shutter_valid_data_flag
+0x4f18 mem_shutter_volume_timer
+0x4f19 mem_shutter_link_timer
+0x4f1a mem_shutter_link_data
+0x4f22 mem_shutter_link_data_i
+0x4f2a mem_shutter_link_loop_flag
+0x4f2b mem_shutter_end
+
Index: output/otp.dat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/output/otp.dat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/output/otp.dat	(working copy)
@@ -0,0 +1,11957 @@
+0b
+00
+02
+00
+00
+00
+00
+00
+00
+00
+00
+8f
+ab
+f1
+00
+3c
+ae
+c6
+03
+78
+5c
+8d
+07
+e0
+71
+35
+1e
+aa
+55
+e0
+1f
+b1
+a4
+02
+b3
+d0
+ad
+a4
+ab
+52
+a6
+69
+fb
+ad
+01
+a8
+77
+5e
+60
+8c
+ea
+f3
+02
+6f
+3d
+e9
+3a
+de
+dd
+17
+58
+b7
+d7
+7e
+9f
+b6
+5c
+32
+c7
+af
+35
+07
+f8
+c0
+a4
+17
+c8
+a0
+61
+78
+b9
+2e
+9d
+93
+44
+71
+36
+4b
+0f
+3c
+03
+e5
+97
+fc
+d4
+c1
+17
+e0
+6d
+f9
+ac
+60
+c8
+e0
+2a
+b2
+df
+eb
+bb
+d9
+ef
+09
+7d
+10
+23
+61
+7b
+7f
+e3
+68
+d2
+76
+85
+64
+05
+3f
+e8
+e7
+b5
+44
+2a
+88
+9d
+be
+03
+c4
+27
+98
+1c
+ed
+02
+9c
+bc
+4e
+6b
+65
+f0
+1a
+39
+b0
+20
+17
+80
+0a
+6c
+ad
+b3
+67
+71
+d5
+d2
+fa
+d6
+82
+33
+18
+8a
+9a
+2f
+2a
+58
+d0
+2d
+7d
+73
+5e
+34
+7d
+51
+78
+88
+49
+0b
+83
+61
+be
+86
+d7
+a2
+52
+15
+6b
+88
+61
+61
+c7
+00
+9c
+a7
+d1
+a6
+fa
+2f
+ef
+9e
+cd
+2f
+e9
+46
+51
+34
+37
+dd
+d9
+03
+76
+aa
+23
+3f
+3b
+1a
+95
+cb
+09
+ee
+2a
+07
+32
+65
+c9
+1b
+fd
+4d
+9d
+65
+c9
+97
+a8
+94
+94
+a7
+6d
+05
+5a
+e0
+36
+44
+87
+b1
+d8
+3a
+69
+ec
+0e
+1b
+51
+cb
+e4
+f2
+6c
+78
+3c
+8a
+07
+ee
+a7
+15
+76
+41
+b8
+90
+85
+42
+23
+c3
+22
+aa
+9c
+11
+e9
+13
+57
+6b
+18
+57
+ec
+5b
+2f
+2b
+10
+b5
+0c
+53
+bb
+43
+a3
+a7
+04
+22
+9d
+6a
+6d
+12
+e3
+f8
+de
+83
+9a
+47
+d7
+64
+93
+f8
+34
+10
+d0
+36
+60
+49
+8f
+1d
+e1
+2c
+20
+ff
+b4
+e1
+af
+d6
+ee
+f6
+44
+e8
+51
+fd
+95
+42
+1b
+a2
+02
+d6
+f0
+2a
+88
+39
+59
+40
+cc
+37
+3c
+af
+a7
+35
+5d
+eb
+6e
+4b
+bd
+07
+1e
+23
+f6
+64
+a7
+b2
+72
+cf
+bf
+f4
+bd
+ad
+b6
+dd
+e5
+ea
+1d
+96
+16
+b4
+57
+25
+8f
+b6
+17
+05
+39
+ff
+e2
+18
+dc
+ae
+43
+ad
+ff
+df
+63
+53
+5d
+72
+31
+24
+7f
+74
+4f
+95
+76
+28
+58
+03
+fc
+bf
+3c
+9a
+7b
+31
+a8
+4b
+cd
+72
+48
+8a
+ce
+ca
+a6
+9e
+7e
+cf
+c4
+bb
+0a
+59
+5b
+10
+6c
+85
+e0
+b2
+6c
+97
+0f
+1c
+22
+74
+10
+0a
+9f
+b8
+6a
+22
+22
+e9
+53
+c7
+73
+e0
+19
+85
+dd
+4c
+4d
+2d
+cc
+15
+47
+d1
+5c
+a3
+17
+55
+ed
+8c
+83
+ee
+97
+f6
+e0
+ce
+a1
+ee
+b1
+85
+2c
+37
+bd
+35
+b2
+2e
+ec
+81
+b5
+0f
+2d
+f0
+e1
+8a
+74
+bf
+80
+60
+d8
+f6
+76
+ac
+66
+62
+ec
+0c
+e2
+58
+7d
+6a
+f0
+66
+da
+4e
+ca
+cf
+72
+51
+16
+82
+e3
+84
+a1
+9f
+af
+ae
+08
+25
+7b
+a8
+2d
+1e
+50
+83
+c2
+de
+16
+58
+df
+49
+ea
+03
+3d
+69
+68
+2a
+a4
+ab
+00
+27
+5c
+33
+a9
+c5
+f4
+09
+e0
+68
+db
+f3
+0c
+08
+aa
+24
+8c
+2c
+f2
+02
+b1
+a3
+ae
+4c
+b8
+56
+c9
+16
+8d
+a5
+74
+ec
+f5
+55
+3e
+3d
+24
+99
+c6
+97
+da
+83
+4f
+bf
+d9
+4b
+f3
+25
+f1
+2e
+a3
+14
+5b
+a1
+d5
+93
+87
+74
+d4
+eb
+90
+3c
+b8
+3a
+33
+0d
+82
+1c
+25
+73
+dd
+a4
+44
+19
+52
+e7
+a3
+38
+04
+5b
+71
+31
+9e
+3a
+e0
+c2
+e7
+bd
+dc
+f0
+66
+9d
+b7
+c7
+c9
+83
+8d
+57
+78
+51
+87
+24
+35
+46
+3d
+dc
+7d
+43
+94
+67
+65
+98
+c7
+c6
+70
+7b
+4e
+4e
+6d
+4c
+1a
+2c
+b7
+39
+fd
+76
+82
+cc
+b1
+24
+45
+3c
+1a
+0b
+dc
+b1
+a5
+87
+5b
+af
+8e
+00
+39
+52
+73
+dc
+28
+b6
+54
+38
+13
+ba
+60
+d3
+45
+15
+02
+d0
+f3
+92
+da
+c3
+ba
+bf
+70
+d5
+00
+2f
+db
+3f
+e2
+a5
+fb
+03
+c5
+9e
+0a
+f1
+bb
+1f
+67
+ed
+7b
+51
+d7
+b0
+8c
+4d
+fd
+0c
+8f
+54
+de
+78
+42
+dd
+ca
+3e
+a2
+82
+59
+6e
+88
+ec
+24
+da
+56
+08
+d4
+b2
+54
+f1
+91
+a5
+6a
+2e
+c2
+2f
+fc
+b2
+10
+a3
+e1
+c1
+53
+ce
+57
+6e
+e0
+da
+7e
+c3
+81
+75
+d2
+23
+ad
+13
+b7
+11
+ce
+22
+17
+be
+03
+66
+e0
+8b
+d0
+c7
+e7
+da
+eb
+7e
+3b
+2b
+5e
+4c
+5f
+78
+60
+b6
+05
+ec
+11
+65
+7e
+86
+e5
+7d
+05
+da
+fe
+89
+39
+be
+94
+12
+7e
+87
+82
+5b
+63
+93
+13
+42
+4a
+3e
+1b
+c0
+40
+bb
+50
+86
+29
+5d
+ac
+09
+69
+0b
+9c
+c5
+0c
+ee
+5a
+7c
+0f
+4f
+27
+38
+08
+b4
+44
+12
+e5
+17
+fb
+c5
+27
+d2
+59
+3c
+de
+68
+5d
+67
+b0
+2a
+3e
+83
+87
+75
+f6
+41
+c5
+a8
+c7
+ed
+4e
+00
+92
+0b
+9f
+d1
+d8
+df
+b6
+40
+ad
+70
+38
+44
+f6
+61
+af
+b5
+98
+32
+46
+a4
+4e
+bd
+93
+f6
+9e
+2f
+2a
+a8
+83
+c0
+7f
+87
+54
+7b
+ed
+8e
+27
+67
+dc
+97
+50
+96
+b3
+83
+71
+b9
+26
+35
+29
+35
+d5
+bd
+cb
+92
+5e
+6b
+0f
+69
+b2
+75
+95
+aa
+90
+36
+b7
+3b
+87
+7b
+e8
+7e
+41
+8c
+15
+cf
+fe
+7c
+dc
+9b
+66
+43
+0a
+fc
+55
+fb
+94
+62
+8e
+7e
+f5
+fb
+26
+b2
+60
+83
+2d
+e6
+ef
+4d
+7a
+e8
+89
+bf
+e4
+f8
+ce
+6b
+02
+74
+b8
+8b
+51
+4b
+36
+7f
+e1
+ee
+92
+cf
+e0
+3b
+68
+ba
+82
+e2
+24
+51
+17
+41
+c7
+8c
+73
+fc
+c3
+36
+b7
+8e
+5b
+13
+65
+9d
+dc
+a8
+08
+13
+97
+98
+90
+6c
+24
+16
+60
+c3
+55
+ef
+0a
+de
+e4
+29
+8a
+98
+fa
+71
+e7
+a1
+9d
+48
+c9
+00
+22
+13
+2f
+ec
+2d
+ac
+78
+a1
+69
+34
+e6
+ca
+41
+f7
+8f
+fd
+23
+4f
+06
+1d
+3a
+07
+ed
+7a
+bd
+f2
+42
+83
+75
+3c
+72
+40
+7f
+20
+53
+8d
+7a
+36
+7f
+42
+0e
+eb
+4c
+b7
+5b
+bd
+fe
+61
+c0
+98
+cb
+f2
+55
+f9
+78
+82
+34
+81
+14
+2c
+1b
+df
+33
+5f
+ae
+ad
+4a
+98
+e0
+e2
+31
+8f
+7c
+c7
+a8
+3c
+10
+a4
+34
+41
+bd
+53
+47
+62
+2e
+c3
+0c
+48
+f1
+5b
+f0
+17
+99
+11
+7d
+2d
+dd
+de
+75
+f3
+85
+a0
+d3
+0d
+35
+a3
+f8
+b9
+5c
+b5
+bf
+46
+a6
+bf
+1b
+c7
+ba
+08
+e8
+10
+e5
+76
+0e
+60
+be
+4e
+62
+48
+a2
+47
+7b
+e4
+21
+fc
+20
+bb
+03
+51
+8e
+ac
+3d
+ab
+16
+17
+52
+e3
+87
+d9
+ed
+f1
+a7
+76
+67
+92
+2a
+67
+bd
+f8
+53
+6a
+c2
+0b
+8c
+2f
+2f
+95
+b6
+3b
+49
+4b
+8d
+db
+0a
+c7
+90
+e5
+27
+99
+46
+cc
+fc
+00
+89
+fc
+10
+9a
+f5
+6b
+de
+02
+49
+d9
+ee
+0c
+44
+46
+3d
+2d
+69
+f8
+86
+d8
+02
+eb
+05
+7b
+0d
+49
+df
+45
+c3
+fa
+85
+b9
+ad
+fe
+8b
+68
+e9
+fe
+5a
+aa
+ad
+95
+6d
+b2
+af
+1e
+ae
+26
+7d
+b4
+f8
+4f
+ee
+9f
+ef
+5f
+60
+16
+3f
+39
+57
+3c
+41
+6f
+4d
+49
+09
+ac
+2d
+4d
+48
+0c
+89
+4e
+da
+f8
+98
+35
+81
+06
+d8
+fe
+31
+96
+1f
+10
+72
+a2
+49
+3a
+b6
+20
+0b
+9f
+66
+67
+14
+71
+e9
+44
+a1
+c6
+b1
+2e
+9a
+17
+67
+7e
+73
+06
+4f
+73
+43
+db
+3b
+38
+03
+70
+b8
+9d
+55
+6b
+54
+ad
+6c
+78
+f8
+1f
+16
+8f
+e3
+79
+21
+30
+82
+1b
+43
+67
+09
+98
+da
+f7
+de
+2b
+92
+c6
+a7
+d6
+12
+02
+74
+6a
+c8
+db
+af
+32
+97
+09
+a3
+ad
+f9
+60
+77
+c4
+ad
+5e
+2a
+35
+d5
+5f
+da
+7d
+da
+69
+e8
+ce
+e2
+7c
+d6
+31
+f6
+59
+bc
+6f
+85
+d5
+78
+a8
+8e
+ae
+c9
+93
+0e
+9e
+aa
+66
+6b
+d4
+f2
+7e
+7c
+06
+d0
+63
+fd
+a2
+66
+81
+bb
+e4
+89
+7e
+ef
+1d
+8c
+c0
+9e
+44
+e1
+23
+25
+69
+6a
+bb
+63
+81
+ef
+3b
+5c
+a6
+b7
+7f
+a8
+eb
+96
+24
+72
+70
+5f
+18
+cd
+23
+11
+e6
+79
+aa
+fe
+1e
+84
+68
+bc
+1e
+73
+bf
+d7
+ba
+f9
+9d
+43
+b4
+ce
+73
+7e
+53
+64
+fd
+79
+8c
+cf
+be
+90
+f8
+e9
+06
+77
+29
+cb
+e8
+31
+23
+57
+74
+12
+03
+ee
+cd
+91
+6d
+56
+f0
+75
+b1
+0f
+e3
+35
+05
+7d
+82
+b6
+67
+9e
+bb
+d8
+16
+49
+78
+5c
+92
+62
+ae
+6d
+70
+80
+b7
+fa
+b0
+39
+1b
+d4
+d5
+4a
+4c
+9c
+d9
+66
+7e
+1a
+db
+90
+40
+91
+8d
+b5
+a5
+79
+61
+a0
+b5
+b9
+27
+31
+a7
+3d
+4e
+fb
+a2
+bc
+fc
+b4
+19
+2e
+86
+8d
+b6
+21
+15
+48
+bf
+60
+f7
+da
+7f
+53
+f8
+c1
+4d
+81
+4a
+80
+1b
+ff
+11
+db
+82
+20
+6a
+44
+28
+fe
+b8
+78
+2b
+db
+5e
+af
+78
+1b
+f5
+d5
+5e
+95
+0e
+c3
+c0
+40
+73
+02
+70
+1f
+5d
+01
+e8
+7c
+73
+54
+f8
+52
+d7
+9a
+0d
+3d
+e7
+cf
+f3
+31
+fe
+67
+33
+89
+07
+65
+69
+4e
+67
+9b
+2d
+8e
+b9
+bd
+ff
+f1
+c9
+d5
+d8
+5e
+78
+a5
+ea
+a9
+33
+93
+81
+37
+d1
+5f
+c9
+30
+f2
+65
+a9
+59
+45
+85
+84
+1d
+ac
+a2
+4b
+75
+01
+0c
+e0
+00
+b5
+c7
+38
+de
+32
+c8
+3c
+59
+02
+48
+fc
+10
+1a
+29
+da
+80
+52
+2d
+9f
+c4
+ab
+ec
+43
+ee
+d9
+5b
+0c
+30
+34
+f2
+e6
+65
+fe
+f7
+31
+a2
+b5
+37
+0f
+07
+8b
+80
+42
+dc
+c3
+52
+5f
+37
+56
+14
+78
+a8
+d3
+c3
+6f
+74
+ef
+25
+4c
+8c
+5f
+fe
+37
+b1
+5f
+8a
+94
+e2
+4a
+82
+23
+7d
+26
+d4
+dd
+02
+45
+ce
+79
+e2
+2c
+aa
+77
+9c
+4c
+c8
+ac
+0e
+5c
+a8
+4b
+38
+a1
+a7
+36
+42
+d6
+d4
+48
+a8
+de
+cb
+28
+4c
+23
+8b
+14
+5c
+2c
+53
+a6
+52
+95
+2c
+e2
+c8
+63
+87
+df
+4a
+29
+05
+5c
+df
+68
+7f
+b9
+b7
+6e
+71
+82
+72
+83
+bf
+05
+2f
+26
+b5
+be
+e3
+1d
+3c
+d4
+81
+be
+29
+25
+bb
+11
+c7
+70
+96
+26
+13
+66
+6f
+c3
+32
+3a
+0a
+f8
+a0
+9e
+fe
+ea
+ee
+31
+51
+21
+ab
+8b
+bb
+06
+2d
+84
+60
+c6
+ec
+3e
+12
+3f
+53
+e4
+89
+ef
+fa
+b9
+7b
+be
+ef
+b6
+ec
+34
+09
+20
+e6
+5e
+dc
+ff
+3d
+4b
+25
+10
+4c
+05
+9b
+d3
+5a
+38
+c4
+16
+58
+91
+f1
+a0
+cb
+d6
+b8
+27
+3f
+ea
+51
+e7
+2a
+da
+a4
+6a
+b5
+53
+33
+ce
+df
+13
+dc
+8d
+df
+1e
+5d
+5f
+4b
+ee
+f7
+fc
+7c
+fc
+3d
+6d
+b6
+c4
+7b
+a3
+47
+f8
+cc
+ec
+de
+13
+71
+7c
+f7
+b9
+dc
+47
+49
+81
+d8
+e0
+bf
+05
+32
+ce
+ae
+1b
+ba
+f7
+76
+db
+82
+80
+51
+49
+64
+26
+66
+ee
+87
+c8
+07
+ec
+c9
+b4
+23
+6e
+d6
+63
+b3
+34
+5f
+17
+99
+3f
+ce
+21
+c7
+a2
+d3
+2b
+f6
+b4
+ca
+a6
+7c
+ce
+d4
+e4
+fe
+86
+49
+9e
+93
+34
+2a
+a0
+26
+41
+24
+2f
+30
+1c
+ae
+6a
+74
+ef
+d0
+67
+b2
+ce
+20
+d3
+5c
+f4
+de
+ff
+03
+bf
+67
+39
+28
+fe
+cd
+91
+84
+eb
+21
+e4
+4f
+1d
+d6
+23
+2e
+70
+32
+7a
+dd
+ef
+bd
+12
+22
+9e
+0f
+f6
+2d
+13
+da
+73
+2a
+4a
+b0
+20
+71
+2a
+d5
+e8
+cd
+2b
+ff
+61
+2a
+4d
+88
+eb
+0e
+6a
+5f
+a5
+9a
+6d
+b7
+bc
+01
+34
+15
+c9
+da
+60
+b2
+7c
+62
+a4
+0c
+03
+9d
+e7
+8a
+64
+4f
+84
+be
+b2
+ef
+26
+fc
+19
+1e
+c7
+1b
+5c
+99
+5d
+da
+00
+40
+78
+b1
+36
+37
+79
+33
+3c
+e1
+71
+22
+e4
+f6
+89
+19
+f6
+09
+97
+34
+4b
+ab
+d0
+43
+31
+ad
+ea
+99
+28
+18
+1a
+fe
+57
+82
+a7
+ea
+06
+dd
+3b
+5a
+11
+bd
+e6
+74
+37
+b3
+74
+90
+29
+b7
+07
+af
+e3
+8a
+5c
+61
+82
+df
+fe
+10
+1e
+55
+5b
+f7
+a5
+69
+7f
+01
+d0
+4a
+fb
+0d
+ed
+db
+f8
+c9
+ad
+18
+e0
+65
+c1
+a6
+31
+f5
+66
+c2
+aa
+8a
+fe
+7e
+d4
+d2
+5d
+89
+e3
+bc
+d5
+89
+b7
+b5
+c6
+8f
+da
+8c
+6d
+50
+03
+a7
+76
+fd
+ac
+ea
+0a
+2b
+2a
+37
+71
+dc
+20
+91
+19
+0c
+98
+46
+0d
+ed
+c4
+15
+16
+14
+b2
+4c
+31
+8b
+18
+d5
+0f
+a4
+88
+1c
+16
+a8
+d0
+51
+32
+2f
+90
+32
+b0
+69
+bc
+8b
+7c
+36
+f2
+c3
+00
+c7
+16
+5d
+6b
+19
+35
+3b
+a6
+83
+85
+df
+79
+b8
+c8
+b6
+7a
+36
+8e
+5a
+de
+32
+6f
+fc
+e7
+7e
+00
+d1
+f5
+d8
+88
+97
+d8
+46
+8d
+dd
+fe
+44
+75
+96
+84
+16
+53
+b7
+50
+f6
+82
+9b
+c6
+b3
+48
+45
+38
+42
+6c
+2e
+02
+d6
+82
+17
+3b
+02
+f4
+60
+1f
+be
+b7
+f1
+89
+cd
+5f
+8b
+c1
+90
+2d
+ac
+4a
+f5
+b1
+a6
+07
+11
+a7
+07
+e7
+e1
+93
+34
+57
+8e
+aa
+b5
+5b
+60
+5b
+20
+7c
+8f
+d2
+1e
+b6
+93
+04
+60
+c9
+7d
+9e
+02
+a1
+1b
+27
+ed
+f0
+69
+18
+17
+cb
+eb
+b9
+2a
+da
+97
+1d
+07
+3f
+81
+5f
+97
+16
+a8
+9e
+8d
+18
+b3
+a6
+7c
+3d
+78
+c6
+58
+7b
+cb
+95
+e4
+30
+e8
+14
+7a
+8a
+61
+0e
+50
+f1
+1b
+a2
+f4
+ba
+69
+22
+bc
+b7
+84
+f1
+c3
+73
+9e
+46
+76
+9a
+4a
+16
+7e
+73
+71
+5a
+aa
+b7
+50
+ce
+b6
+58
+0d
+f2
+ce
+ec
+5d
+64
+ae
+c0
+93
+bb
+01
+97
+84
+50
+1a
+b8
+d6
+67
+ec
+76
+3a
+bb
+5a
+13
+81
+53
+0e
+32
+56
+9b
+26
+85
+3f
+32
+1e
+37
+bc
+bc
+53
+ba
+44
+0c
+40
+28
+3f
+11
+c9
+5c
+6e
+2d
+f1
+c1
+1f
+82
+68
+32
+26
+50
+1d
+02
+8b
+60
+d9
+24
+36
+94
+38
+94
+90
+5c
+ff
+30
+83
+ed
+81
+e8
+82
+67
+a7
+3c
+ef
+ad
+83
+86
+07
+25
+df
+18
+17
+78
+6b
+b1
+58
+44
+24
+38
+c1
+c0
+2f
+63
+8f
+83
+14
+5c
+d6
+7b
+1e
+21
+e3
+d4
+09
+86
+9d
+41
+c8
+67
+e0
+71
+13
+50
+a6
+8d
+2a
+50
+f1
+ad
+93
+a7
+51
+c2
+d8
+c4
+e7
+73
+dd
+3b
+cb
+4a
+49
+90
+42
+c4
+31
+6c
+b3
+bc
+43
+bb
+90
+fb
+02
+bb
+fe
+b5
+b6
+52
+2f
+24
+9e
+59
+d7
+60
+76
+ee
+32
+f1
+eb
+ff
+0f
+92
+bf
+43
+e9
+52
+80
+32
+01
+98
+66
+20
+d5
+17
+d5
+15
+a2
+47
+b4
+4c
+73
+ca
+9a
+f5
+ee
+ad
+4a
+d0
+fc
+52
+ff
+d5
+bf
+17
+2c
+5e
+c4
+c3
+99
+ec
+ad
+e2
+50
+cf
+68
+45
+ca
+12
+e5
+8d
+1b
+0f
+6d
+b7
+c2
+23
+d5
+e5
+6c
+d9
+15
+63
+ad
+1f
+72
+da
+7c
+d0
+62
+2f
+79
+87
+d5
+9d
+98
+28
+f2
+85
+bc
+4d
+e8
+17
+e1
+67
+d6
+6a
+fd
+21
+60
+7e
+fe
+d9
+f0
+6e
+ec
+e8
+1f
+1e
+97
+37
+c9
+7f
+da
+0f
+0f
+19
+f6
+18
+2a
+26
+df
+a8
+d0
+54
+b9
+b7
+57
+e4
+db
+5b
+ce
+c8
+6c
+1a
+0d
+bd
+88
+66
+94
+4a
+b0
+2a
+5a
+30
+d4
+3c
+4c
+63
+0c
+64
+d7
+a5
+88
+ca
+a6
+6a
+8b
+4f
+9b
+dc
+5c
+58
+62
+98
+80
+97
+f6
+31
+b9
+3c
+b3
+94
+ae
+1a
+00
+02
+51
+59
+76
+d1
+5c
+3b
+0f
+4c
+d0
+54
+1f
+4c
+66
+85
+d5
+b9
+88
+20
+52
+e3
+7c
+33
+db
+ba
+76
+2f
+09
+bf
+1f
+08
+b6
+05
+95
+4f
+8d
+ff
+7c
+89
+9f
+18
+aa
+60
+74
+35
+0f
+d6
+a3
+77
+b9
+86
+a6
+d4
+0d
+fb
+1a
+f6
+75
+0c
+56
+bb
+fb
+05
+07
+31
+4e
+12
+0e
+3d
+5d
+9a
+e7
+d8
+f0
+34
+fc
+d9
+2f
+0e
+72
+e3
+18
+13
+31
+68
+19
+f8
+b6
+43
+5d
+34
+1d
+7a
+aa
+6c
+a5
+3f
+1e
+7c
+11
+3b
+25
+c1
+c4
+21
+62
+95
+b3
+b0
+c2
+1d
+c9
+1d
+0a
+83
+31
+50
+da
+8a
+13
+2e
+36
+ba
+85
+d4
+74
+fc
+17
+ac
+cc
+55
+67
+fb
+fb
+82
+c3
+2e
+21
+2e
+01
+61
+f9
+38
+7a
+86
+62
+b3
+4a
+10
+85
+ee
+08
+3e
+3b
+2f
+e1
+b0
+fc
+0b
+fc
+a2
+fa
+2b
+9f
+41
+64
+70
+0a
+bb
+f6
+7e
+ef
+be
+5e
+94
+c3
+83
+85
+48
+1d
+7c
+66
+dc
+c1
+11
+e8
+33
+55
+0d
+93
+ab
+c0
+ef
+07
+8d
+e7
+f6
+5b
+a3
+77
+b0
+ff
+cf
+8d
+11
+dd
+16
+5f
+f5
+be
+1c
+28
+21
+81
+b2
+16
+f9
+14
+3e
+1b
+32
+2c
+c2
+c2
+7a
+bc
+99
+5b
+c2
+21
+ea
+19
+2c
+85
+07
+b9
+05
+fd
+66
+8f
+7c
+7c
+41
+16
+38
+4f
+76
+23
+87
+7c
+e2
+b4
+7c
+1f
+d3
+a7
+5c
+74
+13
+63
+a9
+1e
+5b
+1f
+bb
+7e
+d6
+d8
+85
+ef
+99
+85
+7e
+96
+c0
+61
+1c
+f4
+e8
+d0
+49
+21
+5e
+19
+01
+8c
+5b
+1d
+df
+dd
+fa
+94
+77
+42
+0c
+9c
+e9
+b3
+f6
+bb
+67
+02
+35
+0a
+b4
+72
+df
+1b
+f9
+5f
+67
+34
+18
+71
+d7
+8c
+f2
+80
+e0
+aa
+d2
+f6
+54
+6b
+34
+62
+5a
+11
+3d
+9c
+ff
+f5
+26
+0d
+85
+76
+6c
+8e
+5a
+84
+fa
+8e
+13
+af
+54
+b7
+a4
+a8
+87
+df
+b9
+01
+35
+de
+14
+20
+80
+37
+72
+48
+69
+89
+f9
+b2
+6e
+57
+b4
+0d
+f3
+21
+b3
+4d
+1f
+ce
+45
+3a
+b1
+70
+05
+f5
+6d
+29
+d8
+d1
+9a
+59
+73
+3b
+fc
+f1
+b0
+81
+d2
+b8
+90
+ef
+52
+76
+36
+ce
+fe
+a2
+ef
+bd
+82
+11
+00
+b0
+23
+f3
+e3
+42
+d8
+3a
+97
+a0
+2f
+13
+05
+91
+d0
+52
+ec
+f0
+b0
+19
+c5
+fd
+db
+ef
+a6
+a3
+43
+7d
+50
+7d
+a6
+27
+8e
+e6
+ac
+2a
+cc
+da
+e4
+4d
+fa
+8d
+c7
+ed
+66
+b5
+78
+d3
+e8
+29
+03
+54
+19
+88
+bc
+61
+af
+4f
+8b
+17
+2c
+ea
+8f
+c8
+7d
+56
+4b
+ea
+7a
+9d
+92
+b4
+7a
+70
+f1
+9d
+8f
+22
+b4
+c9
+c4
+bd
+1d
+12
+ed
+b1
+01
+e2
+7b
+5f
+08
+bd
+86
+d5
+da
+fc
+ea
+54
+b8
+7d
+bf
+92
+9d
+2f
+09
+86
+e3
+ba
+30
+f6
+93
+c8
+39
+8b
+64
+9f
+8c
+0c
+5a
+3a
+fd
+0a
+8e
+e5
+db
+bd
+73
+05
+9b
+5a
+83
+2e
+a0
+cb
+db
+9e
+8c
+a5
+9b
+51
+4f
+e4
+9c
+a4
+aa
+ac
+7b
+ff
+02
+38
+52
+cd
+31
+75
+f7
+d1
+2f
+27
+77
+b7
+26
+e7
+14
+8c
+db
+d8
+39
+85
+c9
+9f
+6f
+85
+0b
+fc
+ee
+e5
+0c
+28
+02
+c7
+e7
+ba
+50
+7f
+72
+45
+8f
+42
+d2
+12
+1b
+58
+df
+51
+6d
+87
+18
+33
+11
+69
+02
+6a
+bc
+4b
+b8
+70
+07
+9a
+49
+e9
+fb
+f9
+82
+b1
+0f
+32
+23
+d3
+eb
+83
+0d
+a4
+8e
+93
+48
+95
+f6
+1a
+71
+5a
+df
+33
+90
+1a
+a8
+f9
+3c
+50
+eb
+c4
+08
+2c
+37
+31
+bb
+37
+70
+a8
+e9
+39
+fd
+ad
+4b
+19
+bd
+1d
+52
+21
+8f
+c7
+92
+74
+07
+fc
+65
+b5
+f1
+07
+6d
+2e
+58
+92
+ff
+3e
+b9
+10
+b9
+c6
+f1
+dd
+a1
+2d
+c9
+af
+cc
+6b
+d5
+8f
+de
+9d
+7b
+14
+fd
+9b
+e3
+1e
+cb
+65
+05
+74
+53
+e3
+52
+37
+61
+f7
+2e
+9e
+c1
+4e
+55
+ac
+58
+24
+e1
+02
+ec
+5c
+1d
+85
+43
+fa
+7c
+0f
+70
+ad
+56
+f0
+2d
+c9
+3f
+9d
+79
+ff
+4f
+b9
+1b
+a1
+4b
+2b
+21
+7f
+b7
+66
+f5
+6d
+81
+ff
+6e
+1d
+d6
+8e
+9c
+b5
+eb
+ac
+51
+7d
+fc
+c1
+42
+78
+28
+72
+9b
+56
+11
+9c
+9c
+6d
+6d
+c2
+c4
+bc
+c4
+46
+bc
+d9
+88
+6e
+d3
+19
+52
+3c
+e0
+5e
+9f
+1a
+b0
+48
+99
+c6
+b9
+97
+45
+5c
+63
+ec
+72
+ac
+41
+8a
+d0
+94
+87
+63
+c7
+01
+17
+a3
+23
+72
+1c
+90
+7d
+45
+d9
+cc
+ad
+79
+66
+2f
+9a
+a9
+ef
+0e
+13
+5d
+b0
+9b
+36
+63
+92
+80
+e7
+21
+a9
+ea
+7b
+26
+64
+33
+f8
+76
+d8
+46
+65
+92
+91
+d7
+50
+81
+87
+7c
+61
+03
+fa
+a6
+c9
+49
+f9
+01
+4e
+2a
+fb
+d8
+15
+be
+2f
+a0
+e5
+2f
+13
+26
+0b
+9f
+d5
+bb
+74
+6e
+18
+54
+b7
+03
+4b
+31
+33
+42
+da
+fa
+13
+96
+a3
+79
+e6
+b3
+e1
+e9
+18
+ac
+5b
+cc
+69
+e8
+58
+78
+c7
+dd
+b5
+22
+f0
+dd
+79
+6c
+de
+78
+26
+c3
+78
+98
+60
+f2
+3d
+b5
+08
+7e
+6a
+13
+86
+07
+57
+6a
+e2
+18
+19
+1b
+c7
+06
+ba
+ff
+45
+3e
+bd
+39
+3a
+b8
+f4
+97
+92
+d9
+52
+6e
+73
+ee
+19
+d6
+2c
+07
+a0
+e5
+ca
+d8
+a4
+48
+18
+ad
+cd
+51
+57
+2d
+f9
+8e
+e5
+29
+9a
+04
+00
+53
+89
+10
+c4
+52
+07
+1d
+23
+25
+35
+6d
+7a
+e4
+da
+94
+38
+2e
+e3
+4a
+76
+49
+1b
+f5
+00
+5a
+57
+26
+7f
+9f
+a4
+6b
+fc
+88
+47
+25
+35
+ea
+84
+36
+12
+2d
+fe
+37
+88
+53
+b4
+2a
+a9
+c9
+e4
+86
+c7
+fd
+f6
+f5
+d8
+c3
+e2
+31
+1c
+57
+2a
+d3
+1d
+38
+a8
+2e
+6d
+6b
+5b
+8d
+15
+8e
+a0
+6e
+76
+5c
+5d
+1c
+67
+25
+e9
+17
+a1
+cc
+0c
+12
+ea
+02
+a4
+80
+80
+6f
+28
+ea
+4d
+50
+0a
+5d
+ee
+d0
+1a
+78
+1b
+3b
+a2
+82
+1e
+3d
+e5
+fd
+db
+20
+e1
+3a
+9d
+1d
+56
+85
+bd
+c6
+a9
+05
+38
+cc
+68
+11
+6e
+0a
+24
+f2
+48
+c0
+d0
+73
+39
+7e
+c0
+29
+15
+da
+19
+79
+b6
+7c
+1b
+b0
+ff
+bb
+f4
+75
+fa
+39
+e8
+c6
+1c
+3d
+52
+4d
+ba
+ea
+8d
+51
+ca
+07
+36
+a8
+fa
+fc
+24
+39
+e8
+3d
+d6
+cb
+07
+43
+8e
+3a
+65
+aa
+26
+f2
+53
+0a
+17
+e4
+e0
+48
+65
+89
+ee
+df
+7c
+a8
+c7
+44
+f4
+59
+7c
+cd
+8a
+4a
+50
+83
+07
+38
+db
+8c
+73
+17
+79
+02
+62
+83
+0c
+e1
+d4
+fd
+f4
+6f
+99
+fe
+f6
+24
+78
+ba
+9a
+9f
+a4
+49
+7c
+76
+2a
+42
+b8
+ac
+63
+b3
+38
+d4
+74
+e2
+a6
+1c
+ec
+ae
+ec
+11
+7f
+f0
+17
+be
+0b
+da
+00
+bc
+9d
+e2
+cc
+27
+0a
+c3
+e4
+79
+5e
+fb
+50
+cc
+f9
+70
+36
+be
+93
+1e
+5a
+32
+e1
+03
+58
+89
+39
+c3
+ec
+fc
+6b
+f5
+10
+a1
+6a
+f6
+19
+ae
+b3
+ef
+ef
+9f
+ac
+68
+2e
+0d
+e3
+2e
+63
+52
+cd
+01
+fa
+6f
+00
+d5
+1b
+43
+d4
+2b
+5d
+c9
+43
+ba
+ba
+48
+43
+4d
+ee
+88
+48
+33
+1a
+87
+1a
+a3
+36
+0f
+49
+f2
+36
+e7
+60
+30
+03
+47
+aa
+d7
+90
+a5
+92
+f4
+10
+30
+8e
+d5
+a3
+76
+82
+eb
+97
+8c
+f3
+c0
+32
+d8
+54
+fc
+45
+1f
+c5
+f1
+09
+bc
+d8
+7a
+e2
+d8
+8e
+d2
+b2
+c8
+d0
+cd
+6c
+82
+2f
+7c
+8f
+93
+a4
+6f
+3e
+c5
+43
+06
+9c
+f4
+a6
+e2
+e6
+75
+19
+49
+13
+84
+eb
+5d
+a4
+73
+f8
+74
+42
+51
+35
+2b
+1a
+93
+81
+29
+52
+b7
+41
+0a
+f2
+00
+98
+d7
+c4
+46
+fe
+30
+cb
+26
+f0
+c7
+73
+fc
+b7
+81
+70
+ac
+ed
+e4
+84
+44
+70
+17
+da
+6d
+0c
+11
+5f
+1c
+ab
+10
+aa
+03
+cb
+9e
+17
+00
+cd
+77
+76
+e7
+55
+28
+ca
+04
+4c
+f0
+5b
+e3
+41
+86
+c0
+67
+14
+54
+74
+e2
+a7
+f3
+f0
+a4
+4c
+1f
+96
+f3
+13
+85
+3f
+7c
+80
+e7
+26
+0e
+a0
+da
+bb
+64
+23
+78
+41
+9c
+02
+aa
+c4
+ec
+79
+08
+1f
+31
+43
+41
+e5
+76
+ce
+d8
+93
+cc
+f7
+d5
+54
+02
+f3
+75
+f8
+7e
+cf
+90
+65
+a7
+c2
+f4
+2f
+9e
+74
+40
+68
+b9
+9c
+1c
+d5
+ad
+ef
+5a
+72
+67
+8e
+79
+38
+22
+1f
+4a
+47
+39
+71
+50
+83
+3d
+94
+9c
+17
+fb
+00
+fa
+ee
+0a
+03
+4a
+b5
+b4
+6c
+ad
+9d
+8f
+12
+07
+54
+26
+09
+f2
+59
+ab
+bf
+6a
+9b
+d8
+72
+38
+78
+32
+75
+65
+3a
+a8
+b0
+79
+94
+c4
+46
+01
+a4
+4a
+79
+a9
+bd
+0f
+3e
+d7
+11
+0a
+bd
+0f
+23
+a6
+13
+2f
+cb
+a0
+b9
+24
+f1
+90
+ec
+d8
+0e
+03
+73
+9b
+7c
+c1
+01
+1f
+e5
+9c
+82
+b9
+ba
+6b
+8b
+07
+8e
+f5
+5c
+a3
+06
+ad
+83
+0a
+e9
+1c
+44
+d5
+5e
+ad
+64
+d9
+b4
+74
+62
+e7
+d7
+67
+bf
+c7
+c5
+05
+9a
+a1
+47
+0e
+d2
+f5
+06
+3d
+3c
+25
+40
+b0
+1c
+62
+27
+2f
+56
+58
+03
+79
+21
+67
+61
+dd
+ac
+16
+4c
+ad
+f8
+11
+d7
+e6
+96
+1a
+6f
+44
+0b
+01
+b7
+1b
+95
+79
+5b
+12
+eb
+01
+15
+f0
+6a
+0d
+6f
+37
+c4
+45
+5d
+63
+bd
+5c
+ea
+ee
+1a
+d2
+57
+e0
+73
+50
+ac
+d9
+aa
+6c
+ed
+ff
+6a
+92
+4b
+dd
+a2
+a7
+ec
+ae
+f4
+4d
+e3
+92
+f3
+86
+8a
+97
+df
+2d
+3f
+9e
+43
+e4
+24
+11
+49
+b2
+e8
+b1
+46
+5c
+95
+fa
+a5
+85
+89
+60
+62
+37
+04
+e8
+dc
+55
+34
+ff
+9f
+0c
+82
+6a
+f5
+3d
+cd
+4b
+74
+9f
+18
+38
+da
+4c
+8e
+02
+3b
+da
+15
+9b
+d1
+3f
+f0
+c8
+af
+7a
+65
+4c
+68
+f5
+4c
+85
+b2
+e2
+a4
+3a
+fb
+21
+88
+86
+b9
+7c
+3f
+e6
+9f
+b3
+f6
+2a
+48
+03
+b2
+60
+d9
+26
+00
+82
+30
+d1
+43
+c7
+96
+ba
+d3
+44
+a3
+a3
+c7
+10
+fb
+fb
+75
+40
+c1
+18
+b0
+a5
+46
+1d
+bc
+85
+c9
+f4
+33
+8a
+a3
+ca
+94
+77
+9b
+62
+5c
+ff
+c1
+46
+ba
+01
+d7
+a9
+a7
+16
+06
+6f
+f2
+5e
+78
+14
+da
+44
+26
+29
+0e
+25
+58
+43
+c5
+d3
+1b
+b8
+f8
+af
+c3
+43
+c9
+e5
+d8
+1d
+1e
+7b
+54
+79
+25
+3f
+d8
+42
+d8
+57
+26
+45
+67
+c1
+f0
+24
+d7
+81
+5c
+eb
+ff
+09
+a7
+9e
+d4
+53
+08
+c3
+fc
+55
+c3
+77
+a6
+54
+27
+c7
+bc
+c6
+cd
+92
+80
+4c
+67
+ec
+f6
+3a
+10
+06
+17
+e2
+01
+4e
+be
+56
+9e
+1f
+56
+68
+d5
+e7
+7f
+b6
+12
+5f
+8a
+2a
+f3
+67
+38
+2b
+fd
+ce
+69
+d6
+0c
+6c
+d8
+83
+8f
+6d
+e5
+34
+ec
+c1
+9a
+ef
+a0
+7e
+02
+60
+fc
+c2
+dc
+3d
+76
+99
+fd
+4b
+be
+f7
+c2
+68
+a4
+49
+a2
+b3
+d4
+b0
+a3
+a8
+dd
+20
+af
+7c
+79
+10
+94
+23
+e0
+05
+78
+a9
+74
+d6
+8c
+2d
+74
+5b
+0d
+00
+09
+bb
+b8
+63
+35
+b8
+e9
+8c
+19
+19
+79
+4c
+a3
+b5
+e5
+51
+73
+41
+52
+34
+86
+b6
+21
+d4
+0f
+b4
+20
+99
+77
+ba
+0a
+7e
+b1
+61
+da
+36
+60
+4a
+42
+f5
+6c
+8b
+7f
+71
+e4
+2e
+83
+f2
+07
+36
+f5
+74
+fc
+d3
+04
+a8
+87
+7f
+d2
+9b
+68
+8d
+b4
+de
+7a
+6d
+33
+68
+7c
+a4
+37
+d4
+e3
+68
+d4
+07
+8f
+7f
+9d
+fe
+73
+fe
+f1
+a0
+26
+60
+2c
+24
+42
+2a
+67
+53
+ae
+a9
+22
+90
+48
+84
+95
+56
+1c
+3d
+55
+17
+6b
+cf
+55
+76
+61
+55
+c1
+65
+c9
+fb
+a5
+ee
+b1
+35
+30
+7f
+08
+04
+68
+bd
+8d
+6b
+d1
+49
+34
+13
+4e
+03
+89
+ab
+f4
+1d
+b1
+51
+8f
+c1
+77
+14
+f1
+40
+24
+d7
+cd
+8c
+28
+63
+46
+bb
+df
+ce
+73
+61
+4c
+74
+27
+b5
+de
+b7
+3f
+57
+83
+dd
+19
+09
+35
+6f
+d6
+e9
+87
+81
+b9
+98
+6a
+60
+88
+e3
+02
+38
+44
+9d
+d2
+a0
+c9
+70
+72
+06
+79
+3d
+94
+38
+80
+84
+92
+c7
+44
+38
+1b
+38
+b0
+f3
+97
+d3
+51
+e1
+7d
+5a
+6d
+2e
+e1
+3f
+b5
+d0
+ca
+59
+65
+82
+21
+5c
+8b
+19
+af
+c4
+8f
+dc
+35
+41
+ba
+1e
+e7
+d8
+e4
+91
+72
+64
+36
+b7
+3d
+c6
+36
+f6
+a7
+ad
+96
+be
+d7
+eb
+f4
+03
+3e
+af
+58
+c9
+dd
+3c
+12
+d2
+32
+ef
+28
+f1
+ad
+6b
+7d
+2c
+1a
+1b
+d6
+3b
+4a
+e0
+0f
+21
+e1
+c7
+7c
+ed
+5d
+1e
+4a
+56
+2c
+ba
+f2
+c2
+d0
+42
+30
+b6
+88
+29
+93
+06
+4f
+ba
+53
+a5
+57
+d5
+90
+f3
+17
+d2
+0f
+20
+1b
+4a
+ad
+6e
+5f
+bc
+c5
+f4
+68
+bf
+d6
+9c
+66
+3c
+20
+56
+1f
+df
+5d
+46
+c4
+67
+5b
+a2
+db
+59
+5c
+7b
+84
+f2
+1a
+63
+5d
+b7
+15
+60
+4d
+45
+1b
+ad
+43
+db
+78
+2c
+d2
+c6
+a4
+68
+70
+88
+76
+dc
+7a
+68
+95
+9e
+df
+45
+15
+af
+39
+de
+21
+d7
+b2
+e5
+ee
+10
+eb
+68
+b7
+61
+34
+0a
+5b
+03
+0f
+93
+fe
+bc
+4c
+60
+e2
+e7
+01
+43
+51
+27
+eb
+bd
+66
+06
+f6
+97
+ec
+da
+e9
+da
+7e
+68
+0f
+2c
+9a
+32
+ba
+d2
+43
+aa
+dd
+2b
+8d
+75
+03
+bd
+10
+df
+50
+07
+70
+91
+0b
+e4
+3c
+65
+38
+24
+73
+3f
+df
+50
+3a
+2f
+e8
+12
+68
+95
+b9
+6a
+32
+8d
+5b
+2f
+3e
+8b
+f7
+8f
+e0
+b9
+c8
+0e
+a3
+c5
+7e
+eb
+94
+3d
+05
+03
+bc
+bd
+5e
+71
+5f
+6a
+36
+36
+9d
+b3
+6b
+98
+ce
+8d
+34
+5a
+84
+dc
+cd
+20
+ce
+c5
+e4
+43
+ad
+ed
+4d
+a8
+c4
+76
+bc
+3c
+3b
+0e
+cb
+7a
+54
+05
+fc
+37
+5f
+eb
+fa
+61
+81
+4b
+83
+4c
+5c
+10
+5a
+fd
+9c
+e1
+e9
+3f
+26
+9a
+82
+06
+d7
+75
+c2
+7a
+e6
+39
+b5
+c5
+56
+7c
+88
+93
+14
+ed
+12
+35
+24
+c6
+d9
+90
+db
+89
+e8
+ed
+ef
+f5
+b9
+2d
+37
+25
+24
+91
+16
+9d
+93
+f9
+bc
+90
+8c
+83
+42
+83
+4d
+be
+ef
+e9
+33
+5e
+43
+1f
+4a
+af
+46
+06
+72
+9c
+90
+5b
+9c
+e0
+0e
+2d
+8f
+0f
+ef
+05
+ab
+36
+8c
+c4
+93
+7c
+d8
+a9
+1f
+52
+94
+a3
+10
+0e
+15
+2c
+9c
+d7
+7f
+1a
+45
+64
+2e
+81
+20
+84
+11
+c4
+e5
+86
+94
+fb
+a6
+d9
+d1
+ec
+08
+12
+25
+6e
+f6
+1f
+b4
+99
+bf
+16
+0f
+d8
+0e
+f8
+a8
+9f
+91
+19
+79
+64
+aa
+ed
+a9
+17
+f5
+f6
+1d
+90
+a4
+1c
+f7
+c0
+a3
+b3
+1b
+4a
+90
+01
+df
+ef
+6e
+a5
+4c
+a1
+77
+8f
+11
+0f
+21
+a2
+8f
+ac
+d7
+79
+45
+77
+38
+6a
+97
+77
+2c
+51
+8c
+79
+20
+23
+67
+45
+b1
+72
+82
+28
+47
+f7
+f3
+1b
+9f
+7e
+52
+20
+69
+66
+17
+aa
+7a
+a1
+16
+39
+09
+b5
+10
+6d
+e2
+08
+44
+8c
+9f
+3b
+01
+84
+5a
+ee
+83
+a5
+3b
+19
+4b
+3b
+23
+c4
+94
+c4
+aa
+da
+ad
+3c
+3e
+6a
+68
+8d
+b5
+21
+8b
+91
+e5
+ac
+a7
+f1
+c1
+c7
+e6
+da
+10
+3f
+23
+0a
+ac
+f4
+f1
+96
+83
+28
+a3
+d1
+0e
+d2
+67
+99
+56
+fb
+53
+3a
+d8
+d5
+d1
+4f
+67
+8d
+33
+2d
+e1
+4d
+79
+1f
+ff
+fe
+3c
+63
+3c
+34
+09
+95
+05
+bb
+84
+3a
+f2
+5e
+1d
+94
+fa
+29
+fd
+aa
+64
+91
+f2
+62
+47
+4a
+86
+ed
+a3
+97
+7f
+95
+1f
+e3
+ff
+b6
+6c
+5e
+fb
+bf
+4b
+9e
+bb
+56
+de
+70
+80
+4c
+19
+a3
+05
+9e
+39
+9b
+9b
+bd
+86
+33
+5f
+53
+19
+90
+72
+aa
+a0
+63
+e1
+ef
+1f
+8a
+1c
+dc
+a6
+7c
+d0
+f1
+eb
+1f
+b2
+db
+2f
+88
+17
+97
+06
+11
+74
+3c
+4b
+a0
+4a
+58
+19
+ad
+b7
+0a
+d5
+5c
+a3
+fd
+56
+3a
+be
+58
+f6
+a4
+4c
+a9
+6a
+0c
+ae
+5b
+13
+b2
+ad
+7c
+44
+fd
+86
+b4
+3e
+4a
+54
+d3
+1c
+02
+fb
+73
+fd
+5e
+58
+e3
+64
+5d
+25
+e8
+6f
+27
+4c
+50
+96
+29
+25
+27
+c1
+a2
+12
+ef
+77
+c9
+c7
+fc
+81
+59
+f4
+35
+84
+c7
+ed
+92
+9b
+8e
+ef
+94
+53
+a3
+c1
+2b
+5d
+0a
+e2
+a1
+24
+11
+8a
+fa
+0a
+5e
+da
+e2
+6c
+42
+02
+10
+06
+9b
+77
+48
+fb
+a7
+30
+83
+0a
+46
+63
+af
+15
+36
+e9
+b6
+b1
+fd
+6b
+9e
+bf
+d9
+6e
+be
+6e
+04
+67
+1d
+53
+e7
+a1
+b5
+2d
+13
+de
+e8
+86
+5c
+a4
+11
+c5
+a3
+31
+7e
+88
+86
+e8
+a3
+27
+a3
+b8
+2c
+a4
+b2
+92
+bf
+17
+4a
+86
+25
+c7
+15
+9d
+3b
+9f
+6a
+bc
+53
+34
+96
+d7
+cd
+67
+01
+88
+64
+0d
+f0
+e3
+99
+87
+2c
+78
+47
+f0
+d7
+f9
+3e
+63
+f5
+ef
+2d
+bb
+81
+ea
+ad
+85
+a3
+50
+83
+8a
+f6
+b5
+48
+cc
+1c
+21
+d4
+85
+ca
+58
+40
+6d
+2b
+96
+f9
+3d
+00
+6b
+cf
+fe
+2e
+cb
+a1
+d2
+11
+57
+28
+11
+ef
+d5
+ec
+76
+e6
+37
+da
+6f
+d1
+93
+d4
+16
+07
+7f
+2f
+f3
+1d
+1a
+a2
+b8
+27
+62
+16
+86
+66
+72
+eb
+b0
+c0
+93
+8d
+87
+15
+77
+76
+76
+f1
+a7
+92
+80
+f1
+c3
+bb
+1f
+b4
+c0
+0a
+33
+36
+5e
+0a
+5b
+d4
+c6
+be
+bd
+70
+62
+ae
+d3
+08
+a2
+01
+03
+df
+04
+2e
+a9
+ee
+a9
+c0
+53
+37
+88
+7a
+b6
+1b
+e9
+20
+b1
+89
+49
+a1
+f5
+70
+17
+24
+dc
+fe
+27
+81
+22
+75
+e6
+fe
+9a
+08
+1f
+8e
+7d
+08
+27
+c5
+41
+14
+92
+74
+af
+bd
+3a
+73
+b9
+50
+4f
+a6
+63
+8e
+16
+9d
+e3
+8b
+a7
+33
+72
+44
+13
+0d
+2b
+23
+cc
+76
+ea
+e9
+81
+c3
+12
+ad
+e6
+a0
+25
+c4
+cf
+d7
+9b
+03
+e0
+d1
+ff
+9b
+4b
+1d
+18
+0f
+4f
+f9
+7a
+55
+bf
+c8
+b0
+88
+6b
+b4
+bc
+0f
+4c
+b5
+11
+56
+63
+c0
+d7
+e1
+48
+93
+33
+71
+52
+1a
+d7
+5a
+bf
+0c
+a9
+b4
+5b
+dd
+a2
+24
+1c
+09
+f0
+12
+b2
+92
+6b
+af
+a4
+dc
+d8
+d1
+ec
+f5
+2f
+b3
+e9
+13
+e4
+cc
+18
+bc
+6d
+62
+0e
+6b
+53
+dd
+63
+2b
+9c
+83
+f9
+dd
+ca
+84
+1c
+e6
+c5
+be
+56
+43
+6b
+78
+1b
+4e
+36
+98
+60
+f3
+fc
+21
+20
+77
+89
+08
+7e
+9e
+b8
+c5
+75
+94
+3a
+f8
+e8
+30
+39
+12
+be
+34
+3b
+22
+01
+e8
+b1
+b8
+19
+a4
+d7
+6f
+3c
+a2
+61
+f9
+f7
+00
+6d
+7b
+7e
+df
+f1
+d0
+8c
+43
+5e
+6a
+e4
+a1
+58
+a9
+78
+f3
+c1
+51
+ca
+ee
+01
+bb
+66
+60
+aa
+66
+16
+24
+b6
+5d
+42
+dc
+92
+f8
+a9
+5b
+64
+cf
+80
+14
+cd
+2d
+49
+d6
+4f
+91
+95
+83
+c9
+82
+0f
+db
+96
+ed
+2f
+ea
+0a
+47
+d1
+c2
+1b
+7d
+1c
+38
+05
+55
+e6
+b5
+c1
+01
+30
+4a
+fe
+a7
+c4
+7f
+86
+a8
+ac
+06
+fa
+9d
+53
+98
+fc
+3b
+2f
+83
+6d
+16
+67
+8e
+94
+ea
+7b
+87
+ef
+65
+67
+dd
+16
+fd
+38
+ea
+94
+6e
+7c
+86
+5c
+63
+73
+f3
+ff
+f4
+75
+08
+bc
+06
+af
+d2
+57
+a5
+65
+de
+4b
+00
+60
+d2
+76
+3f
+1a
+23
+ac
+83
+4a
+b5
+ca
+ed
+37
+08
+ac
+26
+03
+55
+1c
+41
+4e
+26
+70
+45
+e9
+48
+58
+37
+28
+29
+50
+11
+5c
+92
+93
+a8
+43
+3b
+aa
+a0
+72
+69
+0d
+31
+1b
+f8
+de
+b7
+86
+62
+ea
+dc
+e4
+a1
+c8
+fe
+7c
+27
+19
+de
+9e
+77
+87
+71
+85
+af
+0a
+2e
+6c
+29
+ba
+59
+39
+d1
+fe
+13
+3f
+3b
+1f
+9e
+93
+bd
+65
+21
+a1
+38
+e2
+72
+ff
+9b
+26
+c9
+c2
+b8
+24
+b0
+97
+c7
+7b
+b2
+9b
+5d
+1a
+6a
+d0
+22
+55
+3a
+d5
+2a
+87
+89
+fe
+4c
+a9
+e6
+fb
+ac
+54
+c8
+93
+f0
+46
+89
+0d
+24
+e1
+a6
+48
+2d
+fc
+53
+39
+b4
+8a
+2c
+38
+65
+76
+59
+8c
+85
+82
+1c
+2b
+6b
+20
+03
+30
+a1
+d1
+dd
+01
+b6
+d2
+8c
+76
+51
+07
+d4
+cb
+97
+08
+08
+4e
+8b
+c2
+87
+57
+2f
+bb
+75
+40
+bd
+2f
+fc
+af
+32
+05
+55
+3b
+38
+47
+7b
+e7
+a0
+a2
+d8
+64
+61
+bc
+6b
+5a
+8c
+e8
+4f
+1d
+64
+23
+d3
+72
+76
+48
+4a
+ab
+b7
+2c
+c6
+05
+2b
+37
+e9
+94
+7f
+c1
+b2
+55
+13
+30
+72
+5d
+2b
+0a
+5d
+b5
+74
+3f
+c8
+12
+ef
+1b
+bf
+fd
+30
+9e
+53
+b6
+ab
+9e
+31
+a6
+f5
+5e
+33
+a4
+1e
+6f
+8a
+67
+0f
+eb
+6c
+5b
+0d
+c4
+8b
+34
+4d
+52
+02
+06
+d2
+78
+88
+40
+6e
+16
+88
+52
+ab
+56
+71
+46
+06
+e3
+8f
+87
+ef
+f6
+a3
+ab
+54
+5c
+c2
+96
+a9
+97
+69
+e0
+d5
+ee
+4c
+9c
+62
+ba
+62
+60
+58
+4b
+70
+a1
+81
+e0
+bc
+ff
+a8
+a0
+8d
+60
+98
+65
+e2
+10
+e8
+d1
+09
+bc
+3b
+6c
+06
+0f
+d3
+55
+d4
+82
+c0
+27
+58
+4c
+d1
+0b
+a8
+d7
+5f
+23
+f9
+c0
+77
+b1
+94
+29
+a8
+3a
+87
+7f
+e0
+72
+ff
+d6
+16
+05
+c7
+f4
+ff
+3c
+3e
+a2
+27
+59
+34
+f0
+da
+34
+c2
+29
+3f
+e4
+d6
+14
+5e
+f2
+89
+a9
+16
+10
+7a
+bd
+cc
+a4
+2f
+e5
+51
+b2
+bd
+78
+35
+b9
+d8
+dd
+d6
+bd
+39
+d0
+0b
+a2
+2f
+02
+c6
+95
+df
+11
+bd
+18
+5a
+50
+36
+1d
+02
+9e
+43
+63
+32
+f6
+78
+23
+18
+ec
+b9
+34
+be
+73
+f8
+be
+f9
+1b
+44
+ea
+70
+e3
+3e
+4d
+99
+a5
+75
+1f
+36
+64
+46
+eb
+e7
+64
+1d
+69
+8e
+51
+63
+63
+f8
+2a
+64
+84
+a9
+32
+0f
+b0
+39
+42
+e0
+94
+75
+13
+9d
+06
+59
+e2
+3d
+56
+d8
+65
+02
+4e
+0e
+48
+f8
+bb
+25
+91
+35
+a3
+1d
+cc
+c1
+f2
+b6
+58
+e8
+05
+fc
+e3
+25
+12
+f9
+2e
+c5
+c1
+ce
+53
+25
+bd
+4b
+63
+27
+26
+cd
+8f
+c2
+2b
+03
+1b
+db
+5f
+b7
+ae
+0c
+6d
+77
+16
+f3
+c9
+88
+2f
+12
+0e
+69
+bf
+b5
+c5
+b4
+43
+cd
+88
+04
+92
+e0
+2a
+e7
+83
+df
+e3
+92
+6d
+7e
+42
+e4
+43
+16
+a0
+dd
+3d
+b1
+a3
+09
+0a
+3e
+55
+78
+aa
+11
+64
+d1
+b2
+cf
+dc
+53
+3e
+85
+73
+be
+a3
+24
+46
+91
+cf
+2a
+0c
+95
+fb
+ae
+a2
+90
+2b
+a3
+a0
+08
+65
+d4
+b4
+c2
+8f
+19
+6d
+e4
+2b
+7d
+a6
+0b
+9c
+51
+3f
+a4
+81
+ad
+f1
+19
+a9
+36
+71
+97
+01
+c7
+f3
+5d
+2f
+51
+48
+ac
+b9
+0a
+c1
+a3
+25
+0d
+0b
+bc
+20
+84
+38
+18
+e0
+b1
+57
+22
+62
+02
+df
+85
+a5
+ea
+5b
+37
+63
+95
+e5
+ed
+45
+6f
+7a
+ae
+63
+e0
+fe
+b4
+06
+75
+d5
+9e
+b1
+18
+8a
+85
+6f
+e5
+11
+2c
+fb
+a0
+59
+6a
+a1
+0b
+85
+fd
+67
+ee
+14
+60
+75
+10
+47
+eb
+05
+73
+c0
+da
+d5
+cb
+9e
+56
+5e
+0e
+be
+94
+03
+fe
+d2
+b9
+9d
+f6
+63
+68
+b1
+fa
+ce
+35
+f2
+18
+f3
+bf
+74
+e6
+a1
+32
+64
+4b
+ad
+0c
+43
+bc
+f2
+cb
+94
+dc
+c4
+d5
+80
+43
+74
+27
+82
+d7
+72
+88
+67
+ab
+b7
+02
+97
+7c
+43
+94
+2c
+d5
+c8
+e8
+b7
+0d
+dd
+ac
+12
+ea
+02
+38
+d4
+88
+8b
+ad
+72
+d6
+ae
+53
+74
+8f
+70
+55
+b8
+d4
+b6
+3c
+7f
+b7
+d9
+e1
+9d
+c7
+e4
+af
+95
+06
+e6
+5d
+e3
+9c
+9f
+06
+2d
+82
+ee
+68
+3c
+8b
+a5
+51
+a0
+79
+44
+16
+a7
+de
+2b
+c4
+2d
+1a
+36
+43
+96
+86
+1e
+74
+22
+8b
+03
+e7
+45
+dd
+be
+1a
+10
+27
+6f
+87
+e8
+b3
+d2
+17
+e9
+5c
+15
+cc
+43
+db
+c5
+94
+38
+98
+72
+d8
+8e
+a9
+87
+94
+46
+d9
+45
+fb
+b1
+6b
+85
+3d
+96
+f1
+ee
+b7
+e0
+10
+7b
+1d
+ab
+10
+e3
+77
+a7
+44
+a6
+cd
+cf
+4d
+81
+f5
+f1
+74
+41
+3e
+f3
+52
+e3
+17
+84
+78
+13
+ae
+86
+32
+57
+de
+ec
+64
+c5
+f6
+a0
+46
+0b
+d2
+a5
+c5
+53
+c4
+fe
+74
+cd
+0f
+b2
+e7
+e9
+51
+43
+86
+ce
+12
+7c
+88
+b7
+48
+ca
+b0
+70
+a0
+fb
+13
+76
+e5
+f4
+9b
+2c
+3c
+54
+4b
+88
+10
+10
+54
+d4
+91
+22
+ac
+d0
+0a
+72
+f5
+82
+2d
+88
+db
+38
+17
+bc
+ec
+d7
+4f
+bb
+e1
+62
+c1
+37
+3d
+89
+5d
+29
+49
+27
+87
+9f
+65
+cd
+fe
+4d
+7d
+04
+d5
+7d
+49
+bf
+95
+75
+6f
+e6
+e4
+2d
+17
+0f
+83
+66
+ec
+38
+da
+eb
+09
+a0
+d6
+37
+b5
+34
+56
+a4
+f8
+59
+94
+61
+e2
+87
+44
+63
+7f
+ca
+7e
+46
+a7
+03
+16
+65
+77
+58
+fc
+f1
+36
+37
+fe
+b4
+a5
+9a
+59
+01
+ab
+0d
+ac
+54
+c9
+8a
+24
+99
+07
+2f
+22
+2c
+b7
+c6
+1a
+ad
+df
+b6
+6d
+9c
+30
+d3
+af
+50
+32
+b8
+f4
+62
+32
+a6
+22
+bf
+71
+f2
+bb
+0d
+fc
+b7
+93
+2c
+d1
+5e
+c9
+b3
+a7
+1f
+5d
+2b
+e9
+06
+03
+bb
+35
+2e
+a6
+23
+f4
+88
+32
+93
+f0
+ee
+98
+e4
+45
+8e
+c3
+a1
+0a
+d5
+fc
+eb
+c4
+18
+e4
+ad
+8b
+ee
+d4
+62
+e5
+2e
+3c
+46
+10
+6e
+b7
+e6
+9b
+5b
+48
+23
+eb
+fb
+0a
+d2
+61
+a8
+13
+fb
+d6
+47
+6e
+22
+db
+ae
+8a
+b8
+54
+ad
+ac
+f7
+20
+b0
+7b
+cd
+0f
+05
+46
+56
+de
+75
+37
+f8
+a5
+12
+f0
+aa
+a8
+d3
+31
+2b
+99
+25
+09
+0a
+08
+a6
+48
+9a
+01
+b4
+56
+42
+29
+f9
+c4
+c5
+72
+36
+ea
+28
+10
+cf
+b6
+d6
+36
+73
+ea
+5e
+b9
+c1
+1c
+d2
+95
+47
+3a
+a2
+40
+8b
+fc
+4b
+6c
+1d
+51
+50
+9a
+52
+d5
+2b
+d1
+c0
+34
+b7
+40
+97
+cd
+ac
+8f
+7c
+b8
+a8
+54
+49
+0a
+b6
+bb
+a2
+a3
+11
+75
+97
+fa
+86
+f6
+5f
+44
+fa
+4b
+66
+b4
+12
+07
+0b
+33
+f5
+4b
+a5
+ae
+fe
+10
+97
+bc
+f1
+dc
+92
+51
+42
+25
+f4
+56
+7a
+02
+e5
+cf
+49
+fa
+b2
+4f
+a2
+3d
+2d
+f6
+f3
+6f
+80
+b9
+3c
+30
+90
+57
+26
+75
+74
+50
+0d
+d3
+e8
+87
+4d
+31
+2f
+a6
+b4
+6b
+72
+e3
+8f
+26
+e3
+6e
+25
+fd
+53
+5b
+22
+95
+08
+8f
+85
+a0
+b5
+1a
+ed
+cf
+0b
+34
+b4
+89
+ba
+03
+31
+f0
+ea
+c2
+63
+7e
+41
+74
+61
+cf
+0a
+9a
+0e
+90
+4c
+65
+c2
+06
+1a
+d3
+9c
+47
+c0
+e7
+5b
+21
+e7
+38
+9c
+cd
+e4
+63
+13
+7d
+d4
+65
+bb
+6b
+a4
+12
+78
+e5
+6f
+17
+34
+dc
+f4
+a1
+40
+8b
+a6
+b6
+af
+35
+64
+f1
+69
+13
+c6
+26
+32
+31
+f7
+c1
+e5
+9d
+10
+0f
+e9
+4b
+9d
+74
+45
+ed
+c6
+52
+0b
+33
+34
+48
+bd
+3e
+b2
+34
+d2
+e5
+1f
+7c
+13
+55
+07
+59
+58
+e4
+19
+a2
+e1
+17
+fa
+69
+5a
+28
+04
+91
+5b
+68
+1b
+b2
+f5
+6d
+35
+85
+32
+10
+82
+32
+27
+d0
+52
+ad
+ea
+b6
+63
+dc
+1c
+3e
+a8
+8d
+b7
+df
+ba
+8e
+22
+2f
+73
+91
+1c
+ed
+4f
+f3
+f6
+60
+69
+68
+f3
+6c
+bb
+f4
+86
+6b
+38
+d8
+9a
+41
+4c
+61
+64
+aa
+5a
+da
+18
+2c
+da
+89
+d7
+4e
+ff
+19
+fa
+01
+c2
+6d
+5d
+c3
+5b
+6d
+da
+bc
+d3
+26
+bf
+e9
+48
+b0
+b1
+10
+ee
+9b
+d8
+7f
+d6
+f4
+bc
+2e
+ce
+ee
+0c
+9d
+39
+e2
+8d
+11
+2b
+fc
+7f
+45
+73
+46
+6f
+5e
+3c
+8d
+5e
+7e
+8e
+53
+95
+85
+ec
+69
+68
+15
+76
+03
+6d
+25
+33
+71
+28
+55
+b0
+f9
+ac
+74
+30
+6b
+bd
+f9
+dd
+e2
+18
+84
+b8
+dc
+61
+ac
+a9
+8b
+9c
+b3
+2d
+42
+c3
+b6
+dd
+61
+3a
+a4
+2d
+08
+09
+44
+77
+60
+26
+40
+00
+4e
+a5
+a8
+c8
+82
+51
+be
+4b
+81
+19
+9e
+78
+a2
+a3
+d7
+e4
+a7
+63
+3c
+59
+a4
+59
+6e
+93
+66
+31
+88
+ff
+66
+78
+32
+eb
+8e
+ae
+21
+b8
+63
+83
+30
+d3
+4a
+a6
+45
+8e
+18
+bd
+10
+26
+cd
+5b
+e7
+6e
+68
+ad
+c0
+0a
+d7
+54
+7c
+fb
+15
+35
+a3
+6e
+ce
+bd
+25
+6e
+25
+a7
+dd
+c6
+dd
+92
+28
+75
+83
+30
+0b
+97
+5b
+30
+91
+18
+8c
+8d
+61
+6f
+3b
+de
+c8
+02
+f2
+10
+d1
+0e
+8d
+0f
+06
+fc
+b2
+66
+18
+eb
+c4
+64
+7b
+52
+a6
+7e
+e2
+e4
+2d
+26
+07
+86
+c3
+15
+93
+73
+e5
+6b
+3a
+16
+9f
+bd
+75
+53
+73
+de
+3a
+5b
+dd
+97
+66
+51
+41
+a3
+bf
+d1
+89
+87
+13
+83
+aa
+47
+18
+ba
+90
+83
+bc
+d5
+35
+55
+f8
+b0
+46
+2c
+10
+00
+0a
+56
+c9
+be
+35
+f9
+02
+ef
+8f
+fa
+46
+b2
+a7
+0f
+96
+23
+46
+6d
+42
+26
+e5
+a4
+a0
+cb
+05
+10
+21
+09
+9f
+e6
+17
+22
+2d
+c6
+b6
+9b
+79
+c9
+44
+31
+33
+92
+5b
+4a
+56
+d1
+35
+95
+b3
+46
+b4
+34
+3f
+44
+11
+22
+30
+a3
+41
+c3
+b7
+6c
+d0
+59
+9b
+5c
+ff
+70
+89
+6f
+4e
+c7
+91
+d3
+c9
+81
+3b
+9e
+64
+7a
+3e
+52
+3d
+d7
+6b
+d5
+b8
+d8
+a2
+e0
+2a
+57
+a2
+2c
+4a
+d9
+66
+56
+7f
+2e
+fb
+52
+6e
+2b
+96
+0c
+d5
+e8
+53
+84
+df
+e6
+36
+87
+74
+f4
+15
+e6
+78
+92
+c4
+30
+ee
+61
+aa
+55
+40
+00
+00
+40
+05
+00
+01
+06
+22
+01
+00
+00
+00
+00
+00
+00
+00
+00
+3c
+62
+8e
+8b
+1b
+05
+20
+02
+00
+00
+00
+80
+00
+00
+00
+3c
+00
+80
+04
+00
+00
+00
+00
+00
+00
+00
+10
+00
+00
+00
+40
+00
+00
+00
+00
+00
+00
+89
+05
+12
+00
+e0
+44
+30
+00
+00
+00
+00
+08
+00
+aa
+55
+08
+00
+0e
+47
+04
+85
+5a
+01
+02
+04
+22
+1f
+aa
+55
+05
+00
+65
+46
+02
+05
+ff
+0b
+0a
+aa
+55
+1a
+00
+8d
+48
+0e
+08
+0f
+ff
+ff
+ff
+16
+17
+ff
+01
+01
+01
+00
+ff
+ff
+12
+ff
+ff
+ff
+ff
+ff
+01
+00
+ff
+03
+ff
+aa
+55
+02
+00
+ac
+48
+00
+0a
+aa
+55
+03
+00
+af
+48
+05
+02
+05
+aa
+55
+01
+00
+b4
+48
+14
+aa
+55
+01
+00
+b2
+48
+02
+aa
+55
+02
+00
+b6
+48
+02
+06
+aa
+55
+01
+00
+b9
+48
+0a
+aa
+55
+01
+00
+be
+48
+0a
+aa
+55
+02
+00
+bb
+48
+58
+02
+aa
+55
+02
+00
+51
+46
+58
+02
+aa
+55
+01
+00
+54
+46
+64
+aa
+55
+02
+00
+1a
+47
+05
+00
+aa
+55
+01
+00
+53
+46
+64
+aa
+55
+02
+00
+4f
+46
+b0
+04
+aa
+55
+01
+00
+19
+47
+0a
+aa
+55
+02
+00
+1e
+47
+70
+17
+aa
+55
+01
+00
+cf
+43
+08
+aa
+55
+01
+00
+16
+47
+02
+aa
+55
+01
+00
+94
+40
+01
+aa
+55
+01
+00
+c0
+40
+20
+aa
+55
+01
+00
+8b
+48
+20
+aa
+55
+03
+00
+2e
+47
+00
+00
+00
+aa
+55
+08
+00
+78
+46
+00
+34
+ff
+ff
+ff
+ff
+ff
+ff
+aa
+55
+07
+00
+86
+46
+34
+ff
+ff
+ff
+ff
+ff
+ff
+aa
+55
+07
+00
+93
+46
+34
+ff
+ff
+ff
+ff
+ff
+ff
+aa
+55
+0f
+00
+4f
+4e
+03
+00
+20
+20
+00
+03
+00
+22
+22
+00
+03
+00
+30
+23
+00
+aa
+55
+09
+00
+fd
+49
+00
+08
+00
+07
+00
+00
+00
+00
+00
+aa
+55
+01
+00
+be
+4a
+03
+aa
+55
+01
+00
+bd
+4a
+07
+aa
+55
+04
+00
+bf
+4a
+ff
+ff
+1e
+1e
+aa
+55
+01
+00
+60
+4e
+05
+aa
+55
+01
+00
+02
+45
+1e
+aa
+55
+06
+00
+08
+45
+24
+62
+81
+a1
+51
+61
+aa
+55
+05
+00
+fa
+45
+01
+0f
+0f
+0f
+0f
+aa
+55
+01
+00
+38
+47
+02
+aa
+55
+02
+00
+a2
+45
+c0
+12
+aa
+55
+01
+00
+bf
+48
+09
+aa
+55
+04
+00
+d0
+48
+c0
+5d
+00
+00
+aa
+55
+06
+00
+c0
+48
+6a
+63
+00
+80
+bb
+00
+aa
+55
+04
+00
+d4
+48
+f8
+bb
+00
+00
+aa
+55
+06
+00
+c6
+48
+1c
+1f
+01
+00
+77
+01
+aa
+55
+04
+00
+d8
+48
+00
+77
+01
+00
+aa
+55
+01
+00
+55
+46
+94
+aa
+55
+03
+00
+c6
+45
+00
+48
+60
+aa
+55
+02
+00
+34
+46
+05
+00
+aa
+55
+02
+00
+32
+46
+50
+00
+aa
+55
+02
+00
+1c
+47
+64
+00
+aa
+55
+01
+00
+06
+47
+01
+aa
+55
+01
+00
+3c
+47
+02
+aa
+55
+06
+00
+dd
+42
+34
+47
+29
+51
+31
+41
+aa
+55
+01
+00
+97
+43
+07
+aa
+55
+08
+00
+c4
+43
+fb
+00
+48
+08
+fb
+00
+48
+08
+aa
+55
+02
+00
+7d
+47
+96
+00
+aa
+55
+02
+00
+74
+47
+1b
+00
+aa
+55
+02
+00
+9f
+43
+1f
+00
+aa
+55
+04
+00
+76
+47
+23
+00
+27
+00
+aa
+55
+02
+00
+34
+43
+39
+00
+aa
+55
+02
+00
+7a
+47
+13
+00
+aa
+55
+06
+00
+be
+4c
+36
+00
+2e
+00
+32
+00
+aa
+55
+0c
+00
+4c
+43
+1f
+02
+01
+05
+03
+03
+12
+18
+03
+19
+c2
+03
+aa
+55
+11
+00
+5f
+47
+06
+ff
+06
+00
+03
+00
+80
+09
+09
+41
+49
+20
+4d
+6f
+75
+73
+65
+aa
+55
+0b
+00
+6c
+43
+1f
+09
+09
+41
+49
+20
+4d
+6f
+75
+73
+65
+aa
+55
+09
+00
+6d
+42
+08
+41
+49
+20
+4d
+6f
+75
+73
+65
+aa
+55
+09
+00
+1e
+4a
+08
+41
+49
+20
+4d
+6f
+75
+73
+65
+aa
+55
+08
+00
+d5
+42
+06
+00
+09
+00
+20
+00
+2c
+01
+aa
+55
+06
+00
+59
+47
+03
+12
+18
+ff
+00
+00
+aa
+55
+03
+00
+fe
+46
+00
+50
+00
+aa
+55
+02
+00
+f4
+43
+80
+3a
+aa
+55
+01
+00
+fd
+43
+80
+aa
+55
+02
+00
+9b
+4e
+00
+34
+aa
+55
+01
+00
+67
+4e
+ff
+aa
+55
+02
+00
+6c
+4e
+00
+00
+aa
+55
+04
+00
+6f
+4e
+20
+20
+00
+40
+aa
+55
+02
+00
+68
+4e
+00
+00
+aa
+55
+01
+00
+4a
+08
+ff
+aa
+55
+01
+00
+41
+41
+01
+aa
+55
+01
+00
+e9
+45
+07
+aa
+55
+02
+00
+07
+46
+43
+47
+aa
+55
+02
+00
+57
+46
+85
+90
+aa
+55
+02
+00
+5a
+46
+75
+80
+aa
+55
+01
+00
+59
+46
+63
+aa
+55
+01
+00
+3e
+46
+7d
+aa
+55
+01
+00
+1a
+44
+01
+aa
+55
+01
+00
+1d
+44
+02
+aa
+55
+01
+00
+1f
+44
+0a
+aa
+55
+01
+00
+1e
+44
+09
+aa
+55
+06
+00
+44
+46
+94
+00
+78
+00
+80
+00
+aa
+55
+01
+00
+4c
+46
+0c
+aa
+55
+01
+00
+4e
+44
+01
+aa
+55
+04
+00
+b7
+4c
+25
+20
+15
+10
+aa
+55
+11
+00
+d0
+45
+01
+06
+1a
+3a
+4d
+00
+13
+23
+4c
+0f
+2c
+31
+43
+11
+15
+36
+48
+aa
+55
+17
+00
+53
+48
+01
+75
+38
+42
+73
+58
+98
+1d
+a3
+f4
+a9
+f4
+fc
+5a
+a6
+38
+15
+91
+9c
+51
+65
+e6
+9e
+aa
+55
+01
+00
+72
+48
+01
+aa
+55
+0c
+00
+e5
+4c
+0b
+59
+43
+2d
+41
+49
+2d
+4d
+6f
+75
+73
+65
+aa
+55
+10
+00
+c4
+4c
+06
+00
+06
+00
+2b
+00
+90
+01
+06
+00
+09
+00
+20
+00
+2c
+01
+aa
+55
+01
+00
+d5
+4c
+08
+aa
+55
+01
+00
+d9
+4c
+0f
+aa
+55
+01
+00
+dd
+4c
+0e
+aa
+55
+01
+00
+27
+44
+00
+aa
+55
+04
+00
+72
+4c
+26
+0a
+f5
+0c
+aa
+55
+74
+01
+c8
+4a
+ff
+ff
+ff
+ff
+02
+04
+06
+08
+ff
+ff
+ff
+ff
+02
+04
+06
+08
+07
+00
+00
+00
+08
+00
+00
+00
+09
+00
+00
+00
+0a
+00
+00
+00
+0b
+00
+00
+00
+0c
+00
+00
+00
+0d
+00
+00
+00
+0e
+00
+00
+00
+10
+00
+00
+00
+11
+00
+00
+00
+13
+00
+00
+00
+15
+00
+00
+00
+17
+00
+00
+00
+19
+00
+00
+00
+1c
+00
+00
+00
+1f
+00
+00
+00
+22
+00
+00
+00
+25
+00
+00
+00
+29
+00
+00
+00
+2d
+00
+00
+00
+32
+00
+00
+00
+37
+00
+00
+00
+3c
+00
+00
+00
+42
+00
+00
+00
+49
+00
+00
+00
+50
+00
+00
+00
+58
+00
+00
+00
+61
+00
+00
+00
+6b
+00
+00
+00
+76
+00
+00
+00
+82
+00
+00
+00
+8f
+00
+00
+00
+9d
+00
+00
+00
+ad
+00
+00
+00
+be
+00
+00
+00
+d1
+00
+00
+00
+e6
+00
+00
+00
+fd
+00
+00
+00
+17
+01
+00
+00
+33
+01
+00
+00
+51
+01
+00
+00
+73
+01
+00
+00
+98
+01
+00
+00
+c1
+01
+00
+00
+ee
+01
+00
+00
+20
+02
+00
+00
+56
+02
+00
+00
+92
+02
+00
+00
+d4
+02
+00
+00
+1c
+03
+00
+00
+6c
+03
+00
+00
+c3
+03
+00
+00
+24
+04
+00
+00
+8e
+04
+00
+00
+02
+05
+00
+00
+83
+05
+00
+00
+10
+06
+00
+00
+ab
+06
+00
+00
+56
+07
+00
+00
+12
+08
+00
+00
+e0
+08
+00
+00
+c3
+09
+00
+00
+bd
+0a
+00
+00
+d0
+0b
+00
+00
+ff
+0c
+00
+00
+4c
+0e
+00
+00
+ba
+0f
+00
+00
+4c
+11
+00
+00
+07
+13
+00
+00
+ee
+14
+00
+00
+06
+17
+00
+00
+54
+19
+00
+00
+dc
+1b
+00
+00
+a5
+1e
+00
+00
+b6
+21
+00
+00
+15
+25
+00
+00
+ca
+28
+00
+00
+df
+2c
+00
+00
+5b
+31
+00
+00
+4b
+36
+00
+00
+b9
+3b
+00
+00
+b2
+41
+00
+00
+44
+48
+00
+00
+7e
+4f
+00
+00
+71
+57
+00
+00
+2f
+60
+00
+00
+ce
+69
+00
+00
+62
+74
+00
+00
+ff
+7f
+00
+00
+aa
+55
+01
+00
+48
+41
+0c
+aa
+55
+06
+00
+c3
+40
+35
+3f
+64
+db
+7b
+3b
+aa
+55
+01
+00
+a7
+40
+20
+aa
+55
+03
+00
+c9
+40
+00
+08
+b4
+aa
+55
+01
+00
+99
+40
+18
+aa
+55
+01
+00
+1c
+41
+4d
+aa
+55
+0c
+00
+16
+00
+00
+00
+20
+00
+00
+00
+00
+00
+00
+00
+00
+00
+aa
+55
+05
+00
+60
+41
+08
+0e
+05
+03
+00
+aa
+55
+01
+00
+6a
+41
+20
+aa
+55
+02
+00
+9a
+40
+00
+0c
+aa
+55
+05
+00
+43
+41
+ff
+04
+00
+00
+08
+aa
+55
+01
+00
+fa
+01
+5a
+aa
+55
+01
+00
+27
+44
+00
+aa
+55
+04
+00
+23
+44
+00
+07
+ff
+07
+aa
+55
+01
+00
+4f
+44
+a0
+aa
+55
+02
+00
+52
+44
+bc
+02
+aa
+55
+02
+00
+50
+44
+90
+01
+aa
+55
+02
+00
+54
+44
+03
+09
+aa
+55
+03
+00
+49
+41
+88
+40
+ff
+aa
+55
+02
+00
+9c
+40
+49
+41
+aa
+55
+11
+00
+05
+49
+03
+04
+01
+02
+20
+2a
+3f
+15
+14
+1b
+28
+0e
+8a
+8b
+83
+84
+88
+aa
+55
+5a
+00
+19
+49
+09
+5a
+26
+34
+19
+04
+09
+00
+ff
+ff
+09
+5a
+0d
+f0
+1d
+e3
+7d
+d2
+ff
+ff
+09
+5a
+0d
+10
+1d
+ed
+7d
+80
+ff
+ff
+1b
+35
+28
+b4
+29
+46
+2a
+96
+2b
+8c
+2c
+6e
+2d
+64
+38
+5f
+39
+0f
+3a
+32
+3b
+47
+42
+10
+ff
+ff
+54
+2e
+55
+f2
+61
+f4
+63
+70
+75
+52
+76
+41
+77
+ed
+78
+23
+79
+46
+7a
+e5
+7c
+48
+7e
+77
+7f
+01
+0b
+00
+7f
+00
+09
+00
+ff
+ff
+aa
+55
+26
+00
+73
+4e
+09
+5a
+ff
+27
+ab
+40
+b3
+56
+9b
+e6
+a8
+12
+a9
+c0
+be
+e6
+a5
+af
+a0
+21
+a1
+02
+b8
+10
+b9
+0b
+a7
+ff
+b5
+d0
+b6
+00
+ff
+00
+09
+00
+ff
+ff
+aa
+55
+0c
+00
+d1
+49
+05
+b9
+09
+5a
+0b
+72
+0c
+52
+09
+00
+ff
+ff
+aa
+55
+40
+00
+91
+49
+09
+5a
+0d
+10
+0e
+c5
+5b
+9a
+10
+38
+11
+42
+28
+28
+41
+23
+49
+39
+4a
+b0
+4b
+a0
+4c
+90
+4d
+70
+09
+00
+ff
+ff
+09
+5a
+06
+02
+09
+69
+0d
+48
+0e
+9f
+0f
+ba
+09
+00
+ff
+ff
+09
+a5
+26
+34
+19
+04
+60
+07
+69
+04
+7d
+20
+7e
+00
+09
+00
+ff
+ff
+aa
+55
+1c
+00
+dd
+49
+09
+a5
+46
+34
+6a
+c0
+69
+24
+09
+00
+ff
+ff
+09
+5a
+0b
+f3
+09
+00
+ff
+ff
+09
+a5
+0b
+f3
+09
+00
+ff
+ff
+aa
+55
+14
+00
+9e
+4e
+09
+a5
+46
+34
+19
+04
+60
+07
+69
+04
+68
+c3
+7d
+20
+7e
+00
+09
+00
+ff
+ff
+aa
+55
+03
+00
+6c
+4e
+a5
+2e
+00
+55
+aa
+aa
+55
+10
+f8
+ff
+20
+20
+00
+40
+c0
+30
+00
+04
+c0
+30
+80
+27
+20
+60
+00
+00
+6f
+e0
+cc
+bb
+20
+3a
+00
+07
+20
+20
+00
+17
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+c7
+c2
+70
+47
+c3
+00
+6f
+e0
+cc
+e5
+1f
+e0
+fe
+02
+67
+e0
+c7
+c4
+70
+47
+c5
+16
+6f
+20
+cc
+e5
+d8
+c0
+4c
+e6
+d8
+a0
+47
+c6
+20
+40
+7c
+dc
+6f
+e0
+cc
+e5
+1f
+e0
+fe
+04
+67
+e0
+c5
+9f
+20
+60
+00
+00
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+cc
+76
+70
+4c
+77
+00
+6f
+e0
+cc
+e5
+1f
+e0
+fe
+02
+67
+e0
+cc
+78
+70
+4c
+79
+16
+6f
+20
+cc
+e5
+d8
+c0
+4c
+e6
+d8
+a0
+4c
+7a
+20
+40
+7c
+dc
+68
+48
+cc
+e5
+18
+40
+84
+04
+da
+20
+4c
+76
+20
+20
+05
+0d
+6f
+e0
+cc
+bb
+20
+3a
+00
+2a
+20
+20
+00
+33
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+c7
+c2
+70
+47
+c3
+00
+70
+47
+c4
+02
+70
+47
+c5
+14
+70
+47
+c6
+01
+70
+45
+9f
+05
+20
+60
+00
+00
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+cc
+76
+70
+4c
+77
+00
+70
+4c
+78
+02
+70
+4c
+79
+14
+70
+4c
+7a
+01
+d8
+40
+00
+05
+da
+20
+4c
+76
+20
+20
+05
+0d
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+20
+20
+00
+40
+c0
+28
+00
+04
+c0
+28
+80
+1c
+20
+60
+00
+00
+6f
+e0
+cc
+bb
+20
+3a
+00
+07
+20
+20
+00
+11
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+c7
+c2
+70
+47
+c3
+00
+70
+47
+c4
+02
+70
+47
+c5
+12
+6f
+e0
+cc
+e3
+67
+e0
+c7
+c6
+70
+45
+9f
+05
+20
+60
+00
+00
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+cc
+76
+70
+4c
+77
+00
+70
+4c
+78
+02
+70
+4c
+79
+12
+6f
+e0
+cc
+e3
+67
+e0
+cc
+7a
+d8
+40
+00
+05
+da
+20
+4c
+76
+20
+20
+05
+0d
+6f
+e0
+cc
+bb
+20
+3a
+00
+1f
+20
+20
+00
+2b
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+c7
+c2
+70
+47
+c3
+00
+70
+47
+c4
+03
+70
+47
+c5
+13
+6f
+e0
+c7
+7c
+67
+e0
+c7
+c6
+6f
+e0
+cc
+e4
+e7
+e0
+80
+05
+70
+45
+9f
+06
+20
+60
+00
+00
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+cc
+76
+70
+4c
+77
+00
+70
+4c
+78
+03
+70
+4c
+79
+13
+6f
+e0
+c7
+7c
+67
+e0
+cc
+7a
+6f
+e0
+cc
+e4
+e7
+e0
+80
+05
+d8
+40
+00
+06
+da
+20
+4c
+76
+20
+20
+05
+0d
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+20
+20
+00
+40
+c0
+20
+00
+04
+c0
+20
+80
+21
+20
+60
+00
+00
+6f
+e0
+cc
+bb
+20
+3a
+00
+07
+20
+20
+00
+13
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+c7
+c2
+70
+47
+c3
+00
+70
+47
+c4
+30
+70
+47
+c5
+10
+70
+45
+9f
+33
+df
+20
+00
+1f
+d8
+c0
+48
+53
+d8
+a0
+47
+c6
+20
+40
+7c
+dc
+20
+20
+04
+e5
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+cc
+76
+70
+4c
+77
+00
+70
+4c
+78
+30
+70
+4c
+79
+10
+df
+20
+00
+1f
+d8
+c0
+48
+53
+d8
+a0
+4c
+7a
+20
+40
+7c
+dc
+20
+40
+04
+e5
+d8
+40
+00
+34
+da
+20
+4c
+76
+20
+20
+05
+0d
+6f
+e0
+cc
+bb
+20
+3a
+00
+24
+20
+20
+00
+30
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+c7
+c2
+70
+47
+c3
+00
+70
+47
+c4
+03
+70
+47
+c5
+11
+6f
+e0
+c6
+a2
+67
+e0
+c7
+c6
+6f
+e0
+cc
+e1
+e7
+e0
+80
+05
+70
+45
+9f
+06
+20
+60
+00
+00
+6f
+e0
+c5
+a0
+79
+20
+7e
+07
+67
+e0
+cc
+76
+70
+4c
+77
+00
+70
+4c
+78
+03
+70
+4c
+79
+11
+6f
+e0
+c6
+a2
+67
+e0
+cc
+7a
+6f
+e0
+cc
+e1
+e7
+e0
+80
+05
+d8
+40
+00
+06
+da
+20
+4c
+76
+20
+20
+05
+0d
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+20
+20
+00
+40
+c0
+18
+00
+03
+20
+60
+00
+00
+6f
+e0
+cc
+bb
+20
+3a
+00
+0d
+6f
+e0
+c5
+a0
+79
+20
+7e
+04
+67
+e0
+cc
+76
+70
+4c
+77
+ff
+d8
+40
+00
+02
+da
+20
+4c
+76
+20
+20
+05
+0d
+20
+60
+00
+00
+70
+45
+9f
+02
+6f
+e0
+c5
+a0
+79
+20
+7e
+04
+67
+e0
+c7
+c2
+70
+47
+c3
+ff
+20
+60
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+20
+20
+00
+40
+c0
+10
+00
+03
+20
+60
+00
+00
+6f
+e0
+c5
+77
+c0
+03
+00
+0c
+c0
+08
+00
+0e
+c0
+08
+80
+10
+c0
+09
+00
+12
+c0
+09
+80
+16
+c0
+0b
+00
+19
+c0
+0a
+00
+1b
+20
+60
+00
+00
+d8
+e0
+00
+04
+20
+20
+04
+05
+d8
+e0
+00
+06
+20
+20
+04
+05
+70
+4c
+e1
+01
+20
+20
+03
+9b
+d8
+c0
+45
+75
+20
+40
+03
+d2
+d8
+e0
+00
+08
+20
+20
+04
+05
+70
+4c
+e4
+01
+d8
+e0
+00
+09
+20
+20
+04
+05
+d8
+e0
+00
+0c
+20
+20
+04
+05
+70
+4e
+5e
+00
+d8
+c0
+45
+75
+20
+40
+03
+9d
+d8
+e0
+00
+0a
+20
+20
+04
+05
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+20
+20
+00
+40
+c0
+08
+00
+05
+c0
+08
+80
+18
+c0
+09
+00
+24
+20
+60
+00
+00
+20
+40
+00
+24
+20
+40
+56
+40
+20
+40
+00
+10
+6f
+e0
+ce
+5e
+20
+5a
+00
+14
+6f
+e0
+c6
+a2
+67
+e0
+cc
+e2
+d8
+40
+00
+08
+da
+20
+48
+6a
+da
+40
+00
+82
+20
+20
+6c
+d7
+d8
+40
+00
+01
+da
+20
+4e
+5e
+da
+40
+00
+99
+20
+20
+6c
+d7
+d8
+40
+00
+0f
+da
+20
+4e
+4f
+da
+40
+00
+8a
+20
+20
+6c
+d7
+6f
+e0
+c5
+f9
+c0
+02
+d9
+8c
+c0
+00
+80
+1c
+20
+20
+59
+75
+6f
+e4
+47
+0e
+c2
+9f
+00
+20
+c2
+98
+00
+20
+20
+20
+59
+83
+6f
+e1
+45
+ed
+67
+e1
+45
+f5
+70
+45
+f9
+05
+20
+20
+35
+0a
+d8
+40
+03
+34
+da
+20
+06
+f2
+da
+40
+00
+00
+6f
+e1
+4e
+9b
+20
+20
+6c
+da
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+20
+20
+00
+40
+c0
+00
+00
+05
+c0
+00
+80
+0b
+c0
+01
+00
+15
+20
+60
+00
+00
+6f
+e4
+47
+0e
+c2
+9f
+59
+4b
+6f
+e0
+c6
+78
+c0
+00
+59
+3a
+20
+40
+02
+e4
+20
+20
+4d
+fa
+20
+40
+4d
+89
+58
+00
+4d
+00
+67
+e1
+43
+43
+58
+00
+00
+50
+67
+e1
+43
+45
+58
+00
+06
+f2
+67
+e1
+42
+f9
+70
+42
+e3
+46
+70
+46
+38
+0f
+20
+60
+00
+00
+20
+40
+67
+ff
+20
+40
+4d
+4e
+20
+40
+4d
+53
+20
+40
+58
+fc
+20
+40
+00
+20
+70
+45
+e1
+01
+70
+44
+4e
+01
+70
+0e
+a2
+00
+70
+48
+fa
+01
+70
+48
+ef
+10
+20
+60
+00
+00
+70
+45
+e7
+4a
+6f
+e2
+4c
+b7
+67
+e2
+45
+e3
+20
+60
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+54
+34
+24
Index: output/program.lis
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/output/program.lis	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/output/program.lis	(working copy)
@@ -0,0 +1,35474 @@
+              include "bt_format "
+              org 0x0000
+
+p_start:
+0000 20200040 branch p_patch_array 
+
+p_zcode:
+0001 20000001 nop 1 
+0002 20000001 nop 1 
+0003 20000001 nop 1 
+0004 20000001 nop 1 
+0005 20000001 nop 1 
+0006 20000001 nop 1 
+0007 20000001 nop 1 
+0008 20000001 nop 1 
+0009 20000001 nop 1 
+000a 20000001 nop 1 
+000b 20000001 nop 1 
+000c 20000001 nop 1 
+000d 20000001 nop 1 
+000e 20000001 nop 1 
+000f 20000001 nop 1 
+0010 20000001 nop 1 
+0011 20000001 nop 1 
+0012 20000001 nop 1 
+0013 20000001 nop 1 
+0014 20000001 nop 1 
+0015 20000001 nop 1 
+0016 20000001 nop 1 
+0017 20000001 nop 1 
+0018 20000001 nop 1 
+0019 20000001 nop 1 
+001a 20000001 nop 1 
+001b 20000001 nop 1 
+001c 20000001 nop 1 
+001d 20000001 nop 1 
+001e 20000001 nop 1 
+001f 20000001 nop 1 
+0020 20000001 nop 1 
+0021 20000001 nop 1 
+0022 20000001 nop 1 
+0023 20000001 nop 1 
+0024 20000001 nop 1 
+0025 20000001 nop 1 
+0026 20000001 nop 1 
+0027 20000001 nop 1 
+0028 20000001 nop 1 
+0029 20000001 nop 1 
+002a 20000001 nop 1 
+002b 20000001 nop 1 
+002c 20000001 nop 1 
+002d 20000001 nop 1 
+002e 20000001 nop 1 
+002f 20000001 nop 1 
+0030 20000001 nop 1 
+0031 20000001 nop 1 
+0032 20000001 nop 1 
+0033 20000001 nop 1 
+0034 20000001 nop 1 
+0035 20000001 nop 1 
+0036 20000001 nop 1 
+0037 20000001 nop 1 
+0038 20000001 nop 1 
+0039 20000001 nop 1 
+003a 20000001 nop 1 
+003b 20000001 nop 1 
+003c 20000001 nop 1 
+003d 20000001 nop 1 
+003e 20000001 nop 1 
+003f 20000001 nop 1 
+
+p_patch_array:
+0040 c2840067 bbit1 8 ,pf_patch_ext 
+0041 c000007b beq patch00_0 ,p_soft_reset 
+0042 c001008d beq patch00_2 ,p_main_loop 
+0043 c00800a1 beq patch02_0 ,p_shutdown_radio 
+0044 c00c8081 beq patch03_1 ,p_set_tx_power 
+0045 c00d00a3 beq patch03_2 ,p_initialize_radio_cont 
+0046 c010d801 beq patch04_1 ,mouse_soft_reset 
+0047 c01280b0 beq patch04_5 ,p_lpm_sleep 
+0048 c0140085 beq patch05_0 ,p_lpm_dispatch 
+0049 c03902ea beq patch0e_2 ,p_mouse_cb_fuction 
+004a c03980dc beq patch0e_3 ,p_mouse_load_device_info_check 
+004b c03a02f4 beq patch0e_4 ,p_mouse_default_init 
+004c c03a81ea beq patch0e_5 ,p_mouse_param_info_init 
+004d c03c81ec beq patch0f_1 ,p_mouse_start_work 
+004e c03e80fa beq patch0f_5 ,p_mouse_before_hibernate 
+004f c03f0185 beq patch0f_6 ,p_mouse_setgpio_hibernate 
+0050 c04080bd beq patch10_1 ,p_mouse_adc_read 
+0051 c04100ca beq patch10_2 ,p_mouse_adc_bat_percent_lowpower_out 
+0052 c04181a8 beq patch10_3 ,p_mouse_motion 
+0053 c04381f2 beq patch10_7 ,p_mouse_setting_sensor_type 
+0054 c04401a1 beq patch11_0 ,p_mouse_check_key_gpio 
+0055 c0448099 beq patch11_1 ,p_mouse_3io6key_check 
+0056 c0458195 beq patch11_3 ,p_mouse_init_sensor 
+0057 c0478123 beq patch11_7 ,p_mouse_priority_bb_event 
+0058 c0488200 beq patch12_1 ,p_mouse_le_parse_att 
+0059 c0480143 beq patch12_0 ,p_mouse_le 
+005a c04980fd beq patch12_3 ,p_mouse_bb_event_timer 
+005b c04a01ee beq patch12_4 ,p_mouse_start_discovery 
+005c c04c0348 beq patch13_0 ,p_mouse_store_dpi_info_check 
+005d c052834c beq patch14_5 ,p_mouse_24g_package_data 
+005e c05485c6 beq patch15_1 ,p_mouse_multi_led_type_blink 
+005f c06780f8 beq patch19_7 ,p_app_init 
+0060 c04d0556 beq patch13_2 ,p_mouse_idle 
+0061 c07f86c7 beq patch1f_7 ,p_sadc_calibration 
+0062 c0750096 beq patch1d_2 ,p_otp_read_data 
+0063 c07580ec beq patch1d_3 ,p_spid_init 
+0064 c07600de beq patch1d_4 ,p_spid_write_reg 
+0065 c07680e4 beq patch1d_5 ,p_spid_read_regs 
+0066 2020233e branch assert 
+
+pf_patch_ext:
+0067 c001069d beq patch20_2 ,p_enable_adc 
+0068 c02201f4 beq patch28_4 ,p_le_slave_more_data 
+0069 c03301f6 beq patch2c_6 ,p_le_parse_ll 
+006a c04c0372 beq patch33_0 ,p_g24_dispatch 
+006b c04d8547 beq patch33_3 ,p_g24_receive_payload 
+006c c0510539 beq patch34_2 ,p_g24_read_len_pid_crc 
+006d c04f8517 beq patch33_7 ,p_g24_transmit_packet 
+006e c0500521 beq patch34_0 ,p_g24_transmit_prep 
+006f c0548084 beq patch35_1 ,p_g24_chamap_param_update 
+0070 c05602f6 beq patch35_4 ,p_g24_pair_dispatch 
+0071 c05e8318 beq patch37_5 ,p_g24_reconn_dispatch 
+0072 c05f0536 beq patch37_6 ,p_g24_txbuf_clear 
+0073 c05f817a beq patch37_7 ,p_g24_reconn_device_fail 
+0074 c061043e beq patch38_2 ,p_g24_transmit_no_interrupt 
+0075 c0630367 beq patch38_6 ,p_g24_transmit_loop 
+0076 c066032a beq patch39_4 ,p_g24_transmit_hop_process 
+0077 c0668423 beq patch39_5 ,p_g24_send_abort_packet 
+0078 c07980ae beq patch3e_3 ,p_initialize_radio2 
+0079 c17f8000 rtneq patch3f_7 
+007a 2020233e branch assert 
+
+p_soft_reset:
+007b 2435a002 nbranch soft_reset + 1 ,wake 
+007c 37d98200 until null ,lpo_edge 
+007d 37d98200 until null ,lpo_edge 
+007e 20800000 clear_stack 
+007f 70808073 jam 0x73 ,core_spid_ctrl 
+0080 20202003 branch soft_reset + 2 
+
+p_set_tx_power:
+0081 6fe0c141 fetch 1 ,mem_tx_power 
+0082 c04a2240 beq tx_power_f20db ,set_tx_power_f20db 
+0083 20202222 branch set_tx_power_3db 
+
+p_g24_chamap_param_update:
+
+p_mouse_store_device_info:
+0084 20600000 rtn 
+
+p_lpm_dispatch:
+0085 204023f0 call lpo_calibration 
+0086 6fe1c0bd fetch 3 ,mem_clks_per_lpo 
+0087 207a0000 rtn blank 
+0088 6fe0c8a8 fetch 1 ,mem_mouse_multi_led_blink_enable 
+0089 247a0000 nrtn blank 
+008a 6fe0ce9d fetch 1 ,mem_mouse_le_delay_enter_lpm_time 
+008b 247a0000 nrtn blank 
+008c 20202467 branch lpm_dispatch + 4 
+
+p_main_loop:
+008d 20407540 call sp_calc_sequence_256 
+008e 20407436 call sp_calc_sequence_256_check 
+008f 20402a23 call le_advertising_dispatch 
+0090 2040202a call idle_dispatch 
+0091 20403722 call app_process_idle 
+0092 204030ed call g24_dispatch 
+0093 20402018 call connection_dispatch 
+0094 20402463 call lpm_dispatch 
+0095 2020008d branch p_main_loop 
+
+p_otp_read_data:
+0096 20406b28 call enable_otp_read 
+0097 20406b63 call otp_read_data1 
+0098 20206b26 branch otp_disable_chgpump 
+
+p_mouse_3io6key_check:
+0099 1a627e00 copy regc ,pdata 
+009a 67e0ca10 store 1 ,mem_mouse_key_status 
+009b 1fe3fe00 lshift pdata ,pdata 
+009c 1fe22400 copy pdata ,regb 
+009d 18422600 copy temp ,regc 
+009e 20406ef1 call gpio_out_active 
+009f 1a620400 copy regc ,temp 
+00a0 20205248 branch mouse_3io6key_check_next 
+
+p_shutdown_radio:
+00a1 70890000 jam 0 ,0x8900 
+00a2 20202156 branch shutdown_radio + 1 
+
+p_initialize_radio_cont:
+00a3 37d98200 until null ,lpo_edge 
+00a4 7089460d jam 0x0d ,0x8946 
+00a5 70896f10 jam 0x10 ,0x896f 
+00a6 708a13cd jam 0xcd ,0x8a13 
+00a7 6ff08a06 fetch 1 ,0x8a06 
+00a8 1fe17efc and pdata ,0xfc ,pdata 
+00a9 67f08a06 store 1 ,0x8a06 
+00aa 37d98200 until null ,lpo_edge 
+00ab 70813c88 jam 0x88 ,0x813c 
+00ac 37d98200 until null ,lpo_edge 
+00ad 20202255 branch initialize_radio_cont + 6 
+
+p_initialize_radio2:
+00ae 37d98200 until null ,lpo_edge 
+00af 20202267 branch initialize_radio2 + 1 
+
+p_lpm_sleep:
+00b0 20406f4b call lpm_puchk_set_check 
+
+p_lpm_sleep_skip_cb_function:
+00b1 6fe240ad fetch 4 ,mem_sleep_counter_all 
+00b2 9840fe00 iadd temp ,pdata 
+00b3 67e240ad store 4 ,mem_sleep_counter_all 
+00b4 204023d7 call lpm_save_context 
+00b5 6fe0c0cb fetch 1 ,mem_lpm_hv_sel 
+00b6 79207e04 set1 lpm_doze_en_bit ,pdata 
+00b7 204023c3 call lpm_write_sel_hv 
+00b8 2455a3ad ncall lpm_preon_counter ,wake 
+00b9 37d98200 until null ,lpo_edge 
+00ba 1b227e00 copy clkn ,pdata 
+00bb 67e340b1 store 6 ,mem_sleep_clkn 
+00bc 20202413 branch lpm_sleep_skip_cb_function + 10 
+
+p_mouse_adc_read:
+00bd 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+00be c4098000 rtnbit0 mouse_enable_adc 
+00bf 6fe0cc6e fetch 1 ,mem_ms_adc_mode 
+00c0 c1800000 rtnne adc_battery 
+00c1 20404ea0 call mouse_adc_gpio_set 
+
+p_mouse_adc_read_start:
+00c2 20406fb2 call enable_adc 
+00c3 20406f8e call vdd_calculate_by_mode 
+00c4 67e1464a store 2 ,mem_device_vdd_now_vol 
+
+p_mouse_adc_data_process:
+00c5 6fe1464a fetch 2 ,mem_device_vdd_now_vol 
+00c6 1fe6fc0a div pdata ,10 
+00c7 20407d61 call get_div_result 
+00c8 67e1464a store 2 ,mem_device_vdd_now_vol 
+00c9 20204eb4 branch mouse_adc_data_process 
+
+p_mouse_adc_bat_percent_lowpower_out:
+00ca efe40011 ifetch 8 ,rega 
+00cb 67e4064e store 8 ,mem_pdatatemp 
+
+p_mouse_adc_bat_percent_lowpower_out_battery:
+00cc 20407057 call adc_clear_no_power_flag 
+00cd 204000d6 call p_adc_clear_low_power_flag 
+00ce 6fe10654 fetch 2 ,mem_pdatatemp + 6 
+00cf 68490650 fetcht 2 ,mem_pdatatemp + 2 
+00d0 98467c00 isub temp ,null 
+00d1 24417054 ncall adc_set_no_power_flag ,positive 
+00d2 68490652 fetcht 2 ,mem_pdatatemp + 4 
+00d3 98467c00 isub temp ,null 
+00d4 244100d9 ncall p_adc_set_low_power_flag ,positive 
+00d5 20204ed0 branch mouse_adc_bat_level_set 
+
+p_adc_clear_low_power_flag:
+00d6 6848c422 fetcht 1 ,mem_adc_power_flag 
+00d7 793f8400 set0 0 ,temp 
+00d8 20207059 branch adc_set_power_flag 
+
+p_adc_set_low_power_flag:
+00d9 6848c422 fetcht 1 ,mem_adc_power_flag 
+00da 79200400 set1 0 ,temp 
+00db 20207059 branch adc_set_power_flag 
+
+p_mouse_load_device_info_check:
+00dc 704e6610 jam zcode_10 ,mem_zcode_temp_param0 
+00dd 202007d6 branch p_zcode_entrance 
+
+p_spid_write_reg:
+00de 6fe101bc fetch 2 ,mem_spid_tbuf 
+00df 67e14cfa store 2 ,mem_spid_tbuf_new 
+00e0 70808202 jam 2 ,core_spid_txlen 
+00e1 70808800 jam 0 ,core_spid_rxlen 
+00e2 70800602 jam spid_start ,core_misc_ctrl 
+00e3 20206bd6 branch wait_spid_done 
+
+p_spid_read_regs:
+00e4 6fe101bc fetch 2 ,mem_spid_tbuf 
+00e5 67e0ccfa store 1 ,mem_spid_tbuf_new 
+00e6 70808201 jam 1 ,core_spid_txlen 
+00e7 60590088 storet 2 ,core_spid_rxlen 
+00e8 70800602 jam spid_start ,core_misc_ctrl 
+00e9 20406bd6 call wait_spid_done 
+00ea 6fe0ccfc fetch 1 ,mem_spid_rbuf_new 
+00eb 20600000 rtn 
+
+p_spid_init:
+
+p_spid_init_common:
+00ec 6fe0c3fe fetch 1 ,mem_spi_init_clk 
+00ed 67f08080 store 1 ,core_spid_ctrl 
+00ee 6fe0c3ff fetch 1 ,mem_spi_init_delay_time 
+00ef 67f08081 store 1 ,core_spid_delay 
+00f0 58004cfa setarg mem_spid_tbuf_new 
+00f1 67f10084 store 2 ,core_spid_txaddr 
+00f2 58004cfc setarg mem_spid_rbuf_new 
+00f3 67f10086 store 2 ,core_spid_rxaddr 
+00f4 20206968 branch twspi_disable 
+
+p_mouse_lpm_wake_param_init:
+00f5 58000000 setarg 0 
+00f6 67e08ea2 store 1 ,mem_voice_queue_count 
+00f7 20600000 rtn 
+
+p_app_init:
+
+p_mouse_init:
+00f8 205580f5 call p_mouse_lpm_wake_param_init ,wake 
+00f9 20204d11 branch mouse_init 
+
+p_mouse_before_hibernate:
+00fa 20407388 call disable_authrom 
+00fb 20404e42 call mouse_setgpio_hibernate 
+00fc 20204e3f branch mouse_before_hibernate_next 
+
+p_mouse_bb_event_timer:
+00fd 20400120 call p_mouse_le_send_conn_param_update_timer 
+00fe 20400111 call p_mouse_enter_lpm_timer 
+00ff 20405a29 call mouse_low_voltage_led_timer 
+0100 20404ea5 call mouse_adc_read 
+0101 204059f2 call mouse_logo_led_on_timer 
+0102 20405a81 call mouse_led_multi_timer 
+0103 20405a00 call mouse_dpi_led_blink_delay_timer 
+0104 20405050 call mouse_dpi_key_check_long_press 
+0105 204054ab call mouse_bt_discovery_check 
+0106 204054d7 call mouse_commbination_key_process 
+0107 204054ba call mouse_commbination_dpi_check_timer 
+0108 204054cb call mouse_commbination_key_select_device_timer 
+0109 204003c9 call p_mouse_key_info_store_delay_timer 
+010a 20405527 call mouse_current_mult_update_timer 
+010b 20404fd6 call mouse_wheel_trigger_timer 
+010c 20405538 call mouse_store_information_delay_timer 
+010d 2040552f call mouse_check_no_data_timeout_timer 
+010e 20400116 call p_mouse_m_key_long_press_timer 
+010f 2040011b call p_mouse_24g_long_sleep_param_update_timer 
+0110 202054a4 branch mouse_bb_event_timer_next 
+
+p_mouse_enter_lpm_timer:
+0111 6fe0ce9d fetch 1 ,mem_mouse_le_delay_enter_lpm_time 
+0112 207a0000 rtn blank 
+0113 1fe0ffff pincrease -1 
+0114 67e0ce9d store 1 ,mem_mouse_le_delay_enter_lpm_time 
+0115 20600000 rtn 
+
+p_mouse_m_key_long_press_timer:
+0116 6fe0ce63 fetch 1 ,mem_mouse_m_key_press_flag 
+0117 207a0000 rtn blank 
+0118 da604e64 arg mem_mouse_m_key_press_count ,regc 
+0119 da40041b arg p_g24_send_http_info_enable ,regb 
+011a 20203755 branch timer_single_step 
+
+p_mouse_24g_long_sleep_param_update_timer:
+011b da604636 arg mem_24g_long_sleep_param_update_timer ,regc 
+011c da40011e arg p_mouse_24g_long_sleep_normal_param ,regb 
+011d 20203755 branch timer_single_step 
+
+p_mouse_24g_long_sleep_normal_param:
+011e 704cbd01 jam 1 ,mem_device_tx_heart_data_flag 
+011f 202058f9 branch mouse_24g_long_sleep_normal_param 
+
+p_mouse_le_send_conn_param_update_timer:
+0120 da604ac6 arg mem_mouse_le_send_conn_param_update_timer ,regc 
+0121 da405408 arg mouse_updata_le_param ,regb 
+0122 20203755 branch timer_single_step 
+
+p_mouse_priority_bb_event:
+0123 1a627e00 copy regc ,pdata 
+0124 c01d013d beq bt_evt_24g_attempt_fail ,p_mouse_24g_attempt_fail 
+0125 c0200131 beq bt_evt_le_parse_conn_papa_update_rsp ,p_mouse_le_conn_param_update_rsp_recieved 
+0126 c00a0136 beq bt_evt_le_connected ,p_mouse_le_bb_event_connected 
+0127 c00a8139 beq bt_evt_le_disconnected ,p_mouse_le_bb_disconnected 
+0128 c019012a beq bt_evt_le_start_enc ,p_mouse_le_ll_start_encryt 
+0129 202053dc branch mouse_priority_bb_event + 2 
+
+p_mouse_le_ll_start_encryt:
+012a 6fe0c754 fetch 1 ,mem_device_le_reconnect_flag 
+012b c000812e beq 1 ,p_mouse_le_ll_reconn_start_encryt 
+012c 70488314 jam 20 ,mem_le_start_encrypt_timer 
+012d 2020540f branch mouse_le_ll_enable_start_enc_flag 
+
+p_mouse_le_ll_reconn_start_encryt:
+012e 20405408 call mouse_updata_le_param 
+012f 70488305 jam 5 ,mem_le_start_encrypt_timer 
+0130 2020540f branch mouse_le_ll_enable_start_enc_flag 
+
+p_mouse_le_conn_param_update_rsp_recieved:
+0131 6fe0cac5 fetch 1 ,mem_mouse_le_send_conn_param_update 
+0132 247a0000 nrtn blank 
+0133 704ac501 jam 1 ,mem_mouse_le_send_conn_param_update 
+0134 704ac61e jam 30 ,mem_mouse_le_send_conn_param_update_timer 
+0135 20600000 rtn 
+
+p_mouse_le_bb_event_connected:
+0136 204053e9 call mouse_le_bb_event_connected 
+0137 704e9d64 jam 0x64 ,mem_mouse_le_delay_enter_lpm_time 
+0138 20600000 rtn 
+
+p_mouse_le_bb_disconnected:
+0139 58000000 setarg 0 
+013a 67e0cac5 store 1 ,mem_mouse_le_send_conn_param_update 
+013b 67e0cac6 store 1 ,mem_mouse_le_send_conn_param_update_timer 
+013c 202053f9 branch mouse_le_bb_disconnected 
+
+p_mouse_24g_attempt_fail:
+013d 2040592b call mouse_soft_agc_disable 
+013e 20405933 call device_fetch_normal_tx_power 
+013f 6fe0c617 fetch 1 ,mem_24g_attempt_fail_flag 
+0140 243a590a nbranch mouse_24g_hibernate_set ,blank 
+0141 704e6611 jam zcode_11 ,mem_zcode_temp_param0 
+0142 202007d6 branch p_zcode_entrance 
+
+p_mouse_le:
+0143 6fe0cc6f fetch 1 ,mem_voice_enable 
+0144 247a0000 nrtn blank 
+0145 20402a06 call le_fifo_check_nearly_full 
+0146 247a0000 nrtn blank 
+0147 6fe0c74f fetch 1 ,mem_device_fast_conn_flag 
+0148 c07f814c beq 0xff ,p_mouse_le_next 
+0149 6fe0c882 fetch 1 ,mem_le_connect_status_flag 
+014a 1fe17e03 and pdata ,0x03 ,pdata 
+014b c1818000 rtnne 0x03 
+
+p_mouse_le_next:
+014c 6fe0ccd4 fetch 1 ,mem_ms_le_lpm_flag 
+014d 205a0178 call p_mouse_le_lpm_set ,blank 
+014e 6fe0c9f9 fetch 1 ,mem_mouse_clear_sensor_data_flag 
+014f 205a538b call mouse_clear_sensor_data_by_reset ,blank 
+0150 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+0151 c2808175 bbit1 mouse_24g_pairing_flag ,p_mouse_le_send_empty_packet 
+0152 c2800175 bbit1 mouse_select_device_flag ,p_mouse_le_send_empty_packet 
+0153 c2828175 bbit1 mouse_bt_discovery_button_down_flag ,p_mouse_le_send_empty_packet 
+0154 c2830175 bbit1 mouse_bt_discovery_button_long_down_flag ,p_mouse_le_send_empty_packet 
+0155 204001a8 call p_mouse_motion 
+0156 204053cb call mouse_check_125hz 
+0157 24740000 nrtn user 
+0158 204053d5 call mouse_current_mult_update 
+0159 2040015b call p_mouse_data_xy_release 
+015a 2020544c branch mouse_le_package + 5 
+
+p_mouse_data_xy_release:
+015b 6fe0c667 fetch 1 ,mem_sensor_motion_gpio 
+015c c1ff8000 rtnne gpio_disable 
+015d 6fe0c73d fetch 1 ,mem_mouse_long_mult_flag 
+015e 207a0000 rtn blank 
+015f 6fe0ccf9 fetch 1 ,mem_ms_le_spi_reset_type 
+0160 c0008164 beq 1 ,p_mouse_le_p32xx_spi_reset 
+0161 c001016d beq 2 ,p_mouse_le_p3212_spi_reset 
+0162 c0018171 beq 3 ,p_mouse_le_pka8g2_spi_reset 
+0163 20600000 rtn 
+
+p_mouse_le_p32xx_spi_reset:
+0164 58000000 setarg pan_reg_pid_l 
+0165 20406971 call twspi_read 
+0166 c0985333 bne p32xx_id1 ,mouse_p3065_judge 
+
+p_mouse_le_sensor_poweron_set:
+0167 6fe0c73d fetch 1 ,mem_mouse_long_mult_flag 
+0168 1fe0ffff increase -1 ,pdata 
+0169 67e0c73d store 1 ,mem_mouse_long_mult_flag 
+016a 58000000 setarg 0 
+016b 67e2465d store 4 ,mem_mouse_x 
+016c 202052fd branch mouse_sensor_poweron 
+
+p_mouse_le_p3212_spi_reset:
+016d 58000000 setarg pan_reg_pid_l 
+016e 20406971 call twspi_read 
+016f c098526c bne p32xx_id1 ,mouse_twspi_reset 
+0170 20200167 branch p_mouse_le_sensor_poweron_set 
+
+p_mouse_le_pka8g2_spi_reset:
+0171 58000000 setarg pan_reg_pid_l 
+0172 20406971 call twspi_read 
+0173 c0ac526c bne pka8g2_id1 ,mouse_twspi_reset 
+0174 20200167 branch p_mouse_le_sensor_poweron_set 
+
+p_mouse_le_send_empty_packet:
+0175 58000000 setarg 0 
+0176 67e3c65c store 7 ,mem_mouse_key 
+0177 2020683e branch hid_device_le_send_mouse_data 
+
+p_mouse_le_lpm_set:
+0178 704cd401 jam 1 ,mem_ms_le_lpm_flag 
+0179 20206820 branch hid_device_enable_lpm 
+
+p_g24_reconn_device_fail:
+017a 6fe0c5fa fetch 1 ,mem_24g_fast_conn_enable 
+017b 203a3201 branch g24_ch ,blank 
+017c 6fe145f7 fetch 2 ,mem_24g_reconn_count 
+017d 1fe0fe01 increase 1 ,pdata 
+017e 67e145f7 store 2 ,mem_24g_reconn_count 
+017f 2feffe09 isolate1 9 ,pdata 
+0180 6fe0c5f9 fetch 1 ,mem_24g_reconn_type 
+0181 c0028183 beq pair_and_receiver ,p_g24_reconn_pair_and_receiver 
+0182 20203565 branch g24_reconn_device_fail + 7 
+
+p_g24_reconn_pair_and_receiver:
+0183 2020b51f branch g24_reconn_receiver_addr ,true 
+0184 2020327a branch g24_pair_init_param 
+
+p_mouse_setgpio_hibernate:
+0185 20400187 call p_mouse_sensor_spi_reset 
+0186 20204e44 branch mouse_setgpio_hibernate + 2 
+
+p_mouse_sensor_spi_reset:
+0187 2040526f call mouse_read_sensor_id 
+0188 c01853ab beq p32xx_id1 ,mouse_set_sdio_high 
+0189 c018d3ab beq p3065_id1 ,mouse_set_sdio_high 
+018a c02c53ab beq pka8g2_id1 ,mouse_set_sdio_high 
+018b 2040526c call mouse_twspi_reset 
+018c 200004b0 nop 1200 
+018d 20200187 branch p_mouse_sensor_spi_reset 
+
+p_mouse_ka8g2_id2_judge:
+018e 204052fd call mouse_sensor_poweron 
+018f 6fe0c8fc fetch 1 ,mem_sensor_id2 
+0190 c02c8192 beq pka8g2_id2 ,p_mouse_ka8g2_init_param 
+0191 202052e7 branch mouse_ka8g2_id2_judge + 2 
+
+p_mouse_ka8g2_init_param:
+0192 7049fa0b jam ka8g2 ,mem_config_sensor_type 
+0193 da604e9e arg mem_sensor_ka8g2_init_new ,regc 
+0194 202052ab branch mouse_sensor_wr_seq 
+
+p_mouse_init_sensor:
+0195 2040526f call mouse_read_sensor_id 
+0196 c0180199 beq p32xx_id1 ,p_mouse_init_p32xx_id2_judge 
+0197 c02c018e beq pka8g2_id1 ,p_mouse_ka8g2_id2_judge 
+0198 20205267 branch mouse_init_sensor + 3 
+
+p_mouse_init_p32xx_id2_judge:
+0199 6fe0c8fc fetch 1 ,mem_sensor_id2 
+019a c02d019c beq p_mx8650 ,p_mouse_mx8650_init_param 
+019b 20205278 branch mouse_init_p32xx_id2_judge + 2 
+
+p_mouse_mx8650_init_param:
+019c 7049fa05 jam mx8650 ,mem_config_sensor_type 
+019d 204052f0 call mouse_sensor_reset 
+019e 20407c97 call delay_10ms 
+019f da604e73 arg mem_sensor_8650_init_new ,regc 
+01a0 20205301 branch mouse_sensor_poweron_end 
+
+p_mouse_check_key_gpio:
+01a1 6fe0c737 fetch 1 ,mem_24g_shutdown_flag 
+01a2 245a51b9 ncall mouse_check_key_gpio_once ,blank 
+01a3 da200000 arg 0 ,rega 
+01a4 204051bc call mouse_check_lkey_gpio 
+01a5 204051c5 call mouse_check_rkey_gpio 
+01a6 204051ce call mouse_check_mkey_gpio 
+01a7 202051b7 branch mouse_check_key_gpio_next 
+
+p_mouse_motion:
+01a8 704cbb00 jam 0 ,mem_ms_rf_data_flag 
+01a9 2040684e call hid_device_copy_key_data 
+01aa 78547c00 disable user 
+01ab 58000000 setarg 0 
+01ac 67e3465d store 6 ,mem_mouse_x 
+01ad 204001de call p_mouse_check_sensor_data 
+01ae 204053ab call mouse_set_sdio_high 
+01af 20404f38 call mouse_zwheel 
+01b0 20404f3d call mouse_t_zwheel 
+01b1 204001bf call p_mouse_key 
+01b2 6fe0c72b fetch 1 ,mem_customer_key 
+01b3 245a7dbc ncall enable_user ,blank 
+01b4 6fe0c65c fetch 1 ,mem_mouse_key 
+01b5 1fe17e1f and_into 0x1f ,pdata 
+01b6 67e0c65c store 1 ,mem_mouse_key 
+01b7 204001d2 call p_mouse_check_idle_key_state 
+01b8 6fe0ce61 fetch 1 ,mem_mouse_fuction_key 
+01b9 245a7dbc ncall enable_user ,blank 
+01ba 204001d9 call p_mem_mouse_key_ior 
+01bb 24345853 nbranch mouse_drawing_optima_init ,user 
+01bc 704cbd00 jam 0 ,mem_device_tx_heart_data_flag 
+01bd 704cbb01 jam 1 ,mem_ms_rf_data_flag 
+01be 20204f36 branch mouse_motion_rf_data 
+
+p_mouse_key:
+01bf 20405170 call mouse_check_firekey_gpio 
+01c0 6fe0ca19 fetch 1 ,mem_fire_key_flag 
+01c1 243a5184 nbranch fire_key_press ,blank 
+01c2 6fe0ca14 fetch 1 ,mem_fire_key_status 
+01c3 243a5183 nbranch fire_key_process ,blank 
+01c4 204051ac call mouse_check_key_gpio 
+01c5 204001c7 call p_mouse_m_key_press_check 
+01c6 202050d0 branch mouse_key_next 
+
+p_mouse_m_key_press_check:
+01c7 1a227e00 copy rega ,pdata 
+01c8 c00201cd beq mouse_m_button ,p_mouse_m_key_press 
+
+p_mouse_m_key_release:
+01c9 6fe0ce63 fetch 1 ,mem_mouse_m_key_press_flag 
+01ca 207a0000 rtn blank 
+01cb 704e6300 jam 0 ,mem_mouse_m_key_press_flag 
+01cc 20600000 rtn 
+
+p_mouse_m_key_press:
+01cd 6fe0ce63 fetch 1 ,mem_mouse_m_key_press_flag 
+01ce 247a0000 nrtn blank 
+01cf 704e6301 jam 1 ,mem_mouse_m_key_press_flag 
+01d0 704e6432 jam 0x32 ,mem_mouse_m_key_press_count 
+01d1 20600000 rtn 
+
+p_mouse_check_idle_key_state:
+01d2 6fe0ce61 fetch 1 ,mem_mouse_fuction_key 
+01d3 6848ce62 fetcht 1 ,mem_mouse_fuction_key_last 
+01d4 67e0ce62 store 1 ,mem_mouse_fuction_key_last 
+01d5 9842fe00 ixor temp ,pdata 
+01d6 1fe67c00 sub pdata ,0 ,null 
+01d7 20628000 rtn zero 
+01d8 20207dbc branch enable_user 
+
+p_mem_mouse_key_ior:
+01d9 6fe0c65c fetch 1 ,mem_mouse_key 
+01da 6848ce61 fetcht 1 ,mem_mouse_fuction_key 
+01db 9841fe00 ior temp ,pdata 
+01dc 67e0c65c store 1 ,mem_mouse_key 
+01dd 20600000 rtn 
+
+p_mouse_check_sensor_data:
+01de 6fe0c437 fetch 1 ,mem_spi_write_flash_sm 
+01df c1800000 rtnne flash_sm_no_buys 
+01e0 20404f1b call mouse_sensor_spi_init 
+01e1 6fe0c9fa fetch 1 ,mem_config_sensor_type 
+01e2 c00181e6 beq p3212 ,p_mouse_p3212_sensor_motion 
+01e3 c00581e8 beq ka8g2 ,p_mouse_pka8g2_sensor_motion 
+
+p_mouse_p32xx_sensor_motion:
+01e4 704cf901 jam 1 ,mem_ms_le_spi_reset_type 
+01e5 20205319 branch mouse_p32xx_sensor_motion 
+
+p_mouse_p3212_sensor_motion:
+01e6 704cf902 jam 2 ,mem_ms_le_spi_reset_type 
+01e7 2020533d branch mouse_p3212_sensor_motion 
+
+p_mouse_pka8g2_sensor_motion:
+01e8 704cf903 jam 3 ,mem_ms_le_spi_reset_type 
+01e9 2020535b branch mouse_pka8g2_sensor_motion 
+
+p_mouse_param_info_init:
+01ea 704e6601 jam zcode_01 ,mem_zcode_temp_param0 
+01eb 202007d6 branch p_zcode_entrance 
+
+p_mouse_start_work:
+01ec 704e6600 jam zcode_00 ,mem_zcode_temp_param0 
+01ed 202007d6 branch p_zcode_entrance 
+
+p_mouse_start_discovery:
+01ee 20405303 call mouse_sensor_powerdown 
+01ef 204003d0 call p_mouse_eeprom_load_le_att_list_info 
+01f0 204002e4 call p_mouse_le_param_default 
+01f1 20205545 branch mouse_start_discovery + 1 
+
+p_mouse_setting_sensor_type:
+01f2 20400187 call p_mouse_sensor_spi_reset 
+01f3 2020506c branch mouse_setting_sensor_type + 1 
+
+p_le_slave_more_data:
+01f4 20400703 call p_le_audio_data_out_from_queue 
+01f5 20202556 branch le_slave_more_data + 1 
+
+p_le_parse_ll:
+01f6 6fe0c336 fetch 1 ,mem_le_packet_llid 
+01f7 c1000000 rtneq llid_reserved 
+01f8 c00181fa beq llid_le_ll ,p_le_parse_ll_next 
+01f9 202028c0 branch le_parse_l2cap 
+
+p_le_parse_ll_next:
+01fa 6fe0804e fetch 1 ,mem_le_rxbuf_data_ll_opcode 
+01fb c00a01fd beq ll_length_req ,p_le_parse_length_req 
+01fc 20203029 branch le_parse_ll + 1 
+
+p_le_parse_length_req:
+01fd 6fe20053 fetch 4 ,mem_le_rxbuf_data_ll_control_data + 4 
+01fe 203a303d branch p_le_send_unknown_rsp ,blank 
+01ff 2020308c branch le_parse_length_req 
+
+p_mouse_le_parse_att:
+0200 1a220c00 copy rega ,contr 
+0201 efe18006 ifetch 3 ,contr 
+0202 67e1c39b store 3 ,mem_le_att_opcode 
+0203 c0060216 beq attop_read_blob_request ,p_le_parse_att_read_blob_request 
+0204 c005021f beq attop_read_request ,p_mouse_le_parse_att_read_request 
+0205 c009024c beq attop_write_request ,p_mouse_le_parse_att_write_request 
+0206 c0290259 beq attop_write_command ,p_le_parse_att_write_command 
+0207 c00b0209 beq attop_prepare_write_request ,p_le_parse_att_prepare_write_request 
+0208 20202b76 branch le_parse_att2 
+
+p_le_parse_att_prepare_write_request:
+0209 20402a06 call le_fifo_check_nearly_full 
+020a 245a6924 ncall l2cap_malloc_free ,blank 
+020b 20402dac call le_parse_att_prepare_write_request 
+020c 6fe1433b fetch 2 ,mem_le_payload_ptr 
+020d 1fe08c07 add pdata ,7 ,contr 
+020e efe10006 ifetch 2 ,contr 
+020f 247a0000 nrtn blank 
+0210 20402a06 call le_fifo_check_nearly_full 
+0211 245a6924 ncall l2cap_malloc_free ,blank 
+0212 6fe1433b fetch 2 ,mem_le_payload_ptr 
+0213 1fe22200 copy pdata ,rega 
+0214 1a20a209 add rega ,9 ,rega 
+0215 2020025a branch p_le_parse_att_write_command + 1 
+
+p_le_parse_att_read_blob_request:
+0216 efe10006 ifetch 2 ,contr 
+0217 67e10693 store 2 ,mem_le_att_offset 
+0218 98002200 iforce rega 
+0219 6849439c fetcht 2 ,mem_le_att_handle 
+
+p_le_send_att_read_blob_response:
+021a 20402cad call le_att_get_handle_ptr 
+021b 203a2de1 branch le_send_att_error_response_notfound ,blank 
+021c efe10006 ifetch 2 ,contr 
+021d 9a267200 isub rega ,loopcnt 
+021e 20202d32 branch le_send_att_read_blob_response + 4 
+
+p_mouse_le_parse_att_read_request:
+021f 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+0220 c31d822e bbit0 mouse_enable_le_battery_service_cancel ,p_le_parse_att_read_request 
+0221 20402da5 call le_check_encrypt_state 
+0222 6849439c fetcht 2 ,mem_le_att_handle 
+0223 6fe0c323 fetch 1 ,mem_le_configuration 
+0224 c2818229 bbit1 bit_ble_read_auth ,p_mouse_le_send_att_read_response_check_auth 
+
+p_mouse_le_send_att_read_response:
+0225 6fe1439c fetch 2 ,mem_le_att_handle 
+0226 c009ade1 beq 0x13 ,le_send_att_error_response_notfound 
+0227 6849439c fetcht 2 ,mem_le_att_handle 
+0228 20200232 branch p_le_send_att_read_response 
+
+p_mouse_le_send_att_read_response_check_auth:
+0229 6fe14334 fetch 2 ,mem_le_pairing_handle 
+022a 98467c00 isub temp ,null 
+022b 24228225 nbranch p_mouse_le_send_att_read_response ,zero 
+022c 24340225 nbranch p_mouse_le_send_att_read_response ,user 
+022d 20202d24 branch le_send_att_read_response_error_insufficient_auth 
+
+p_le_parse_att_read_request:
+022e 20402da5 call le_check_encrypt_state 
+022f 6849439c fetcht 2 ,mem_le_att_handle 
+0230 6fe0c323 fetch 1 ,mem_le_configuration 
+0231 c2818240 bbit1 bit_ble_read_auth ,p_le_send_att_read_response_check_auth 
+
+p_le_send_att_read_response:
+0232 20402cb0 call le_att_get_handle_ptr2 
+0233 2422ade1 nbranch le_send_att_error_response_notfound ,zero 
+0234 20542d26 call le_send_att_read_response_check_handle ,user 
+0235 20740000 rtn user 
+0236 20402cbb call le_att_get_handle_ptr_found 
+0237 18c08dfe increase -2 ,contr 
+0238 efe10006 ifetch 2 ,contr 
+0239 d8402a00 arg uuid_chrctr_device_name ,temp 
+023a 98467c00 isub temp ,null 
+023b 2022ad14 branch le_send_device_name ,zero 
+023c d8402a4b arg uuid_chrctr_report_map ,temp 
+023d 98467c00 isub temp ,null 
+023e 20228245 branch p_le_modify_report_map_header ,zero 
+023f 20202d05 branch le_send_att_read_response_next 
+
+p_le_send_att_read_response_check_auth:
+0240 6fe14334 fetch 2 ,mem_le_pairing_handle 
+0241 98467c00 isub temp ,null 
+0242 24228232 nbranch p_le_send_att_read_response ,zero 
+0243 24340232 nbranch p_le_send_att_read_response ,user 
+0244 20202d24 branch le_send_att_read_response_error_insufficient_auth 
+
+p_le_modify_report_map_header:
+0245 18c22600 copy contr ,regc 
+0246 20402e24 call le_get_search_max_mtu_data 
+0247 1a620c00 copy regc ,contr 
+0248 e8410006 ifetcht 2 ,contr 
+0249 18408401 increase 1 ,temp 
+024a 20407db2 call not_greater_than 
+024b 20202d0b branch le_send_att_read_response_less 
+
+p_mouse_le_parse_att_write_request:
+024c 20400259 call p_le_parse_att_write_command 
+024d 20402a06 call le_fifo_check_nearly_full 
+024e 245a6924 ncall l2cap_malloc_free ,blank 
+
+p_hid_device_le_parse_att_write_request:
+024f 6fe0c74f fetch 1 ,mem_device_fast_conn_flag 
+0250 c07fad8a beq 0xff ,le_send_att_write_response_check_auth 
+0251 6fe0c74f fetch 1 ,mem_device_fast_conn_flag 
+0252 203a2d8a branch le_send_att_write_response_check_auth ,blank 
+0253 6fe0c882 fetch 1 ,mem_le_connect_status_flag 
+0254 c280ad8a bbit1 ll_start_enc_flag ,le_send_att_write_response_check_auth 
+0255 6fe0cac7 fetch 1 ,mem_att_write_resposnse_error_insufficient_auth 
+0256 243a2d24 nbranch le_send_att_read_response_error_insufficient_auth ,blank 
+0257 704ac701 jam 1 ,mem_att_write_resposnse_error_insufficient_auth 
+0258 20202d8a branch le_send_att_write_response_check_auth 
+
+p_le_parse_att_write_command:
+0259 20402dc8 call le_parse_att_write_command 
+025a 6849439c fetcht 2 ,mem_le_att_handle 
+025b 6fe14cbe fetch 2 ,mem_le_protocol_rx_handle 
+025c 98467c00 isub temp ,null 
+025d 24628000 nrtn zero 
+
+p_mouse_le_receive_driver_data:
+025e 1a220c00 copy rega ,contr 
+025f efe08006 ifetch 1 ,contr 
+0260 c1800000 rtnne start_flag 
+0261 efe08006 ifetch 1 ,contr 
+0262 efe08006 ifetch 1 ,contr 
+0263 c003026c beq opcode_voice_start ,p_ms_le_receive_voice_start_data 
+0264 c0038276 beq opcode_voice_end ,p_ms_le_receive_voice_end_data 
+0265 c008027e beq opcode_get_device_info ,p_ms_le_receive_get_device_info_data 
+0266 c0088289 beq opcode_get_dpi ,p_ms_le_receive_get_dpi_data 
+0267 c0090295 beq opcode_set_dpi ,p_ms_le_receive_set_dpi_data 
+0268 c00982a0 beq opcode_get_battery ,p_ms_le_receive_get_battery_data 
+0269 c00b02a3 beq opcode_get_device_type ,p_ms_le_receive_get_device_type_data 
+026a c00a02ae beq opcode_set_key_fuction ,p_ms_le_receive_set_key_fuction_data 
+026b 20600000 rtn 
+
+p_ms_le_receive_voice_start_data:
+026c 20402a06 call le_fifo_check_nearly_full 
+026d 245a6924 ncall l2cap_malloc_free ,blank 
+026e 2040068c call p_audio_enable 
+026f 58000002 setarg 0x02 
+0270 67e0c782 store 1 ,mem_le_tx_buffer0_omemalloc 
+0271 58000006 setarg opcode_voice_start 
+0272 e7e08005 istore 1 ,contw 
+0273 58000010 setarg 0x10 
+0274 e7e08005 istore 1 ,contw 
+0275 202002c2 branch p_ms_le_tx_protocol_header_interface 
+
+p_ms_le_receive_voice_end_data:
+0276 20402a06 call le_fifo_check_nearly_full 
+0277 245a6924 ncall l2cap_malloc_free ,blank 
+0278 20400681 call p_audio_disable 
+0279 58000001 setarg 0x01 
+027a 67e0c782 store 1 ,mem_le_tx_buffer0_omemalloc 
+027b 58000007 setarg opcode_voice_end 
+027c e7e08005 istore 1 ,contw 
+027d 202002c2 branch p_ms_le_tx_protocol_header_interface 
+
+p_ms_le_receive_get_device_info_data:
+027e 20402a06 call le_fifo_check_nearly_full 
+027f 245a6924 ncall l2cap_malloc_free ,blank 
+0280 58000030 setarg device_info_len 
+0281 67e0c782 store 1 ,mem_le_tx_buffer0_omemalloc 
+0282 58000010 setarg opcode_get_device_info 
+0283 e7e08005 istore 1 ,contw 
+0284 df20001f arg auth_len ,loopcnt 
+0285 d8c04853 arg mem_ms_auth_appkey ,contr 
+0286 20407cdc call memcpy 
+0287 204004e5 call p_g24_ms_info_set 
+0288 202002c2 branch p_ms_le_tx_protocol_header_interface 
+
+p_ms_le_receive_get_dpi_data:
+0289 704ce101 jam app_ask ,mem_mouse_dpi_type 
+
+p_ms_le_tx_dpi_info:
+028a 20402a06 call le_fifo_check_nearly_full 
+028b 245a6924 ncall l2cap_malloc_free ,blank 
+028c 58000003 setarg nor_pro_header_len 
+028d 67e0c782 store 1 ,mem_le_tx_buffer0_omemalloc 
+028e 58000011 setarg opcode_get_dpi 
+028f e7e08005 istore 1 ,contw 
+0290 6fe0c6a2 fetch 1 ,mem_mouse_dpi 
+0291 e7e08005 istore 1 ,contw 
+0292 6fe0cce1 fetch 1 ,mem_mouse_dpi_type 
+0293 e7e08005 istore 1 ,contw 
+0294 202002c2 branch p_ms_le_tx_protocol_header_interface 
+
+p_ms_le_receive_set_dpi_data:
+0295 1a220c00 copy rega ,contr 
+0296 204003d2 call p_mouse_receive_dpi_check 
+0297 20402a06 call le_fifo_check_nearly_full 
+0298 245a6924 ncall l2cap_malloc_free ,blank 
+0299 58000002 setarg set_dpi_len 
+029a 67e0c782 store 1 ,mem_le_tx_buffer0_omemalloc 
+029b 58000012 setarg opcode_set_dpi 
+029c e7e08005 istore 1 ,contw 
+029d 6fe0cce3 fetch 1 ,mem_mouse_dpi_set_result 
+029e e7e08005 istore 1 ,contw 
+029f 202002c2 branch p_ms_le_tx_protocol_header_interface 
+
+p_ms_le_receive_get_battery_data:
+02a0 20402a06 call le_fifo_check_nearly_full 
+02a1 245a6924 ncall l2cap_malloc_free ,blank 
+02a2 2020551f branch mouse_le_battery_level_updata 
+
+p_ms_le_receive_get_device_type_data:
+02a3 20402a06 call le_fifo_check_nearly_full 
+02a4 245a6924 ncall l2cap_malloc_free ,blank 
+02a5 6fe0cce5 fetch 1 ,mem_mouse_device_type 
+02a6 1fe0fe02 increase 2 ,pdata 
+02a7 67e0c782 store 1 ,mem_le_tx_buffer0_omemalloc 
+02a8 58000016 setarg opcode_get_device_type 
+02a9 e7e08005 istore 1 ,contw 
+02aa 6f20cce5 fetchr loopcnt ,1 ,mem_mouse_device_type 
+02ab d8c04ce6 arg mem_mouse_device_type + 1 ,contr 
+02ac 20407cdc call memcpy 
+02ad 202002c2 branch p_ms_le_tx_protocol_header_interface 
+
+p_ms_le_receive_set_key_fuction_data:
+02ae 1a220c00 copy rega ,contr 
+02af 2040039d call p_mouse_receive_key_fuction_check 
+02b0 20402a06 call le_fifo_check_nearly_full 
+02b1 245a6924 ncall l2cap_malloc_free ,blank 
+02b2 58000007 setarg 0x07 
+02b3 67e0c782 store 1 ,mem_le_tx_buffer0_omemalloc 
+02b4 58000014 setarg opcode_set_key_fuction 
+02b5 e7e08005 istore 1 ,contw 
+02b6 58000001 setarg 1 
+02b7 e7e08005 istore 1 ,contw 
+02b8 202002c2 branch p_ms_le_tx_protocol_header_interface 
+
+p_ms_le_tx_key_state_interface:
+02b9 6048c873 storet 1 ,mem_ms_recv_ackpayload_temp 
+02ba 20402a06 call le_fifo_check_nearly_full 
+02bb 245a6924 ncall l2cap_malloc_free ,blank 
+02bc 58000002 setarg key_state_payload_len 
+02bd 67e0c782 store 1 ,mem_le_tx_buffer0_omemalloc 
+02be 6fe0c873 fetch 1 ,mem_ms_recv_ackpayload_temp 
+02bf e7e08005 istore 1 ,contw 
+02c0 6fe0c87d fetch 1 ,mem_ms_tx_pro_key_val 
+02c1 e7e08005 istore 1 ,contw 
+
+p_ms_le_tx_protocol_header_interface:
+02c2 da20003f arg 63 ,rega 
+02c3 68494cc0 fetcht 2 ,mem_le_protocol_tx_handle 
+02c4 20402dcc call le_att_malloc_tx_notify 
+02c5 58000000 setarg start_flag 
+02c6 e7e08005 istore 1 ,contw 
+02c7 df20003e arg 62 ,loopcnt 
+02c8 d8c04782 arg mem_le_tx_buffer0_omemalloc ,contr 
+02c9 20407cce call memcpy_fast 
+02ca df20003e arg 62 ,loopcnt 
+02cb d8a04782 arg mem_le_tx_buffer0_omemalloc ,contw 
+02cc 20207ca5 branch memset0 
+
+p_ms_le_tx_audio_data:
+02cd da20003f arg 63 ,rega 
+02ce 68494cc2 fetcht 2 ,mem_le_audio_tx_handle 
+02cf 20402dcc call le_att_malloc_tx_notify 
+02d0 5800003c setarg voice_queue_unit 
+02d1 e7e08005 istore 1 ,contw 
+02d2 df20003c arg voice_queue_unit ,loopcnt 
+02d3 d8c00ea3 arg mem_queue_buf ,contr 
+02d4 20407cdc call memcpy 
+02d5 58000000 setarg 0 
+02d6 e7e10005 istore 2 ,contw 
+02d7 20600000 rtn 
+
+p_voice_updata_connect_param_req:
+02d8 6fe0c678 fetch 1 ,mem_device_flag 
+02d9 c1000000 rtneq mode_24g_device 
+02da d8c04cc4 arg mem_ms_le_interval_min_voice ,contr 
+
+p_le_updata_connect_param:
+02db d8a042d5 arg mem_le_interval_min ,contw 
+02dc df200008 arg 8 ,loopcnt 
+02dd 20407cdc call memcpy 
+02de 20202e71 branch le_l2cap_tx_update_req 
+
+p_ms_updata_connect_param_req:
+02df 6fe0c678 fetch 1 ,mem_device_flag 
+02e0 c1000000 rtneq mode_24g_device 
+02e1 2040552c call mouse_long_mult_init 
+02e2 d8c04ccc arg mem_ms_le_interval_min_new ,contr 
+02e3 202002db branch p_le_updata_connect_param 
+
+p_mouse_le_param_default:
+02e4 6fe44ccc fetch 8 ,mem_ms_le_interval_min_new 
+02e5 67e442d5 store 8 ,mem_le_interval_min 
+02e6 70409400 jam 0 ,mem_lpm_mode 
+02e7 704cd400 jam 0 ,mem_ms_le_lpm_flag 
+02e8 704ac700 jam 0 ,mem_att_write_resposnse_error_insufficient_auth 
+02e9 20600000 rtn 
+
+p_mouse_cb_fuction:
+02ea 580002ed setarg p_mouse_24g_short_sleep 
+02eb 67e1460f store 2 ,mem_cb_24g_transmit_short_sleep 
+02ec 20204d25 branch mouse_cb_fuction + 3 
+
+p_mouse_24g_short_sleep:
+02ed 6fe0c8fa fetch 1 ,mem_mouse_sleep_deal_type 
+02ee 203a35ee branch g24_short_sleep ,blank 
+02ef 20403694 call g24_lpm_wait 
+02f0 24740000 nrtn user 
+02f1 2040369e call g24_setgpio_lpm_before 
+02f2 20407de6 call clear_wake 
+02f3 20205b06 branch mouse_24g_short_sleep + 4 
+
+p_mouse_default_init:
+02f4 704e6602 jam zcode_02 ,mem_zcode_temp_param0 
+02f5 202007d6 branch p_zcode_entrance 
+
+p_g24_pair_dispatch:
+02f6 7045f900 jam default_24g_device ,mem_24g_reconn_type 
+02f7 6fe145f1 fetch 2 ,mem_24g_pair_count 
+02f8 1fe0fe01 increase 1 ,pdata 
+02f9 67e145f1 store 2 ,mem_24g_pair_count 
+02fa 6fe0c5f1 fetch 1 ,mem_24g_pair_count 
+02fb 1fe17eff and pdata ,0xff ,pdata 
+02fc 247a0000 nrtn blank 
+02fd 6fe0c5eb fetch 1 ,mem_24g_pair_sm 
+02fe c07fb2d6 beq state_24g_pairing_success ,g24_pair_exit 
+02ff c0010304 beq state_24g_pairing_2 ,p_g24_pair_sm_2 
+0300 c001830a beq state_24g_pairing_3 ,p_g24_pair_sm_3 
+0301 c0020310 beq state_24g_pairing_4 ,p_g24_pair_sm_4 
+
+p_g24_pair_sm_1:
+0302 7047c2ff jam datatype_attemp ,mem_24g_txbuf_new 
+0303 20200311 branch p_g24_pair_sm_prep 
+
+p_g24_pair_sm_2:
+0304 6fe0c5c5 fetch 1 ,mem_24g_pair_switch 
+0305 203a0308 branch p_g24_pair_sm_2_skip ,blank 
+0306 6fe2461b fetch 4 ,mem_24g_device_addr 
+0307 20403215 call g24_update_addr_and_synccrc8 
+
+p_g24_pair_sm_2_skip:
+0308 7047c2aa jam datatype_bind ,mem_24g_txbuf_new 
+0309 20200311 branch p_g24_pair_sm_prep 
+
+p_g24_pair_sm_3:
+030a 7047c255 jam datatype_config ,mem_24g_txbuf_new 
+030b 6fe0c5c5 fetch 1 ,mem_24g_pair_switch 
+030c 203a0311 branch p_g24_pair_sm_prep ,blank 
+030d 6fe245ff fetch 4 ,mem_24g_receiver_addr 
+030e 67e247c4 store 4 ,mem_24g_txbuf_new + 2 
+030f 20200313 branch p_g24_pair_sm_common 
+
+p_g24_pair_sm_4:
+0310 7047c222 jam datatype_ok ,mem_24g_txbuf_new 
+
+p_g24_pair_sm_prep:
+0311 6fe2461b fetch 4 ,mem_24g_device_addr 
+0312 67e247c4 store 4 ,mem_24g_txbuf_new + 2 
+
+p_g24_pair_sm_common:
+0313 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+0314 1fe17e07 and_into bits_data ,pdata 
+0315 67e0c7c3 store 1 ,mem_24g_txbuf_new + 1 
+0316 7047c800 jam 0 ,mem_24g_txbuf_new + 6 
+0317 202032a5 branch g24_pair_sm_common + 4 
+
+p_g24_reconn_dispatch:
+0318 6fe145f7 fetch 2 ,mem_24g_reconn_count 
+0319 d84001f8 arg 0x01f8 ,temp 
+031a 98417e00 iand temp ,pdata 
+031b 203a031d branch p_g24_reconn_dispatch_next ,blank 
+031c 20203537 branch g24_reconn_dispatch + 5 
+
+p_g24_reconn_dispatch_next:
+031d 20400323 call p_g24_reconn_data_prep 
+031e 2040362a call g24_transmit_receive_ack 
+031f 242c355e nbranch g24_reconn_device_fail ,sync 
+0320 2437b55e nbranch g24_reconn_device_fail ,user3 
+0321 20403647 call g24_ackpayload_parse 
+0322 20204d5d branch mouse_g24_reconn_dispatch_set 
+
+p_g24_reconn_data_prep:
+0323 7047c2ff jam datatype_attemp ,mem_24g_txbuf_new 
+0324 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+0325 67e0c7c3 store 1 ,mem_24g_txbuf_new + 1 
+0326 6fe2461b fetch 4 ,mem_24g_device_addr 
+0327 67e247c4 store 4 ,mem_24g_txbuf_new + 2 
+0328 70459f06 jam 6 ,mem_24g_datalen 
+0329 20200521 branch p_g24_transmit_prep 
+
+p_g24_transmit_hop_process:
+032a 6848c618 fetcht 1 ,mem_24g_retry 
+032b 6fe0c638 fetch 1 ,mem_24g_fast_hop_count 
+032c 98467c00 isub temp ,null 
+032d 24213675 nbranch g24_tx_fast_hop ,positive 
+032e 18408401 increase 1 ,temp 
+032f 6048c618 storet 1 ,mem_24g_retry 
+0330 6fe0c638 fetch 1 ,mem_24g_fast_hop_count 
+0331 c0028336 beq 5 ,p_g24_transmit_hop_process_4ms 
+0332 6fe0c618 fetch 1 ,mem_24g_retry 
+0333 c003033a beq 6 ,p_g24_hop_ch_disable 
+0334 c006033a beq 12 ,p_g24_hop_ch_disable 
+0335 20600000 rtn 
+
+p_g24_transmit_hop_process_4ms:
+0336 6fe0c618 fetch 1 ,mem_24g_retry 
+0337 c001833a beq 3 ,p_g24_hop_ch_disable 
+0338 c003033a beq 6 ,p_g24_hop_ch_disable 
+0339 20600000 rtn 
+
+p_g24_hop_ch_disable:
+033a 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+033b 793ffe04 set0 bit_hop ,pdata 
+033c 67e0c5a0 store 1 ,mem_24g_data_type 
+033d 2040033f call p_g24_txpayload_type_update 
+033e 20203673 branch g24_hop_ch_disable + 4 
+
+p_g24_txpayload_type_update:
+033f 1fe9fe00 lshift3 pdata ,pdata 
+0340 6848c595 fetcht 1 ,mem_24g_pid 
+0341 18410403 and temp ,0x03 ,temp 
+0342 18438400 lshift temp ,temp 
+0343 9841fe00 ior temp ,pdata 
+0344 6848c596 fetcht 1 ,mem_24g_no_ack 
+0345 9840fe00 iadd temp ,pdata 
+0346 67e0c809 store 1 ,mem_24g_txpayload_new + offset_data_type 
+0347 20600000 rtn 
+
+p_mouse_store_dpi_info_check:
+
+p_mouse_store_eerpom_dpi:
+0348 d8400001 arg 1 ,temp 
+0349 da2046a2 arg mem_mouse_dpi ,rega 
+034a da40002a arg 0x2a ,regb 
+034b 20206cc9 branch iicd_write_protect_eep_data 
+
+p_mouse_24g_package_data:
+034c c6930000 rtnmark0 mark_24g 
+034d 204001a8 call p_mouse_motion 
+034e 20400408 call p_mouse_g24_tx_info_check 
+034f 24740000 nrtn user 
+0350 6fe0c73b fetch 1 ,mem_mouse_24g_long_sleep_flag 
+0351 70473b00 jam 0 ,mem_mouse_24g_long_sleep_flag 
+0352 245a59ba ncall mouse_24g_short_sleep_clear_wake ,blank 
+0353 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+0354 c30a0357 bbit0 mouse_enable_keyboard ,p_mouse_24g_mouse_package_data 
+0355 6fe0c72b fetch 1 ,mem_customer_key 
+0356 243a59dc nbranch mouse_24g_keyboard_package_data ,blank 
+
+p_mouse_24g_mouse_package_data:
+0357 2040538e call mouse_data_xy_release 
+0358 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+0359 c280d9d6 bbit1 1 ,mouse_24g_mouse_package_data_now 
+035a 6848c7c3 fetcht 1 ,mem_24g_txbuf_new + 1 
+035b 6fe0c65c fetch 1 ,mem_mouse_key 
+035c 9841fe00 ior temp ,pdata 
+035d 67e0c65c store 1 ,mem_mouse_key 
+035e 6848c7c8 fetcht 1 ,mem_24g_txbuf_new + 6 
+035f 6fe0c661 fetch 1 ,mem_mouse_z 
+0360 9840fe00 iadd temp ,pdata 
+0361 67e0c661 store 1 ,mem_mouse_z 
+0362 6848c7c9 fetcht 1 ,mem_24g_txbuf_new + 7 
+0363 6fe0c662 fetch 1 ,mem_mouse_tz 
+0364 9840fe00 iadd temp ,pdata 
+0365 67e0c662 store 1 ,mem_mouse_tz 
+0366 202059d6 branch mouse_24g_mouse_package_data_now 
+
+p_g24_transmit_loop:
+0367 2040362a call g24_transmit_receive_ack 
+0368 242c3638 nbranch g24_retransmit ,sync 
+0369 2437b638 nbranch g24_retransmit ,user3 
+036a 20403647 call g24_ackpayload_parse 
+036b 20400388 call p_g24_parse_receive_work_data 
+036c 20405b33 call mouse_24g_transmit_callback 
+036d 2040036f call p_g24_rxpayload_clear 
+036e 2020361f branch g24_transmit_no_ack 
+
+p_g24_rxpayload_clear:
+036f df200008 arg 8 ,loopcnt 
+0370 d8a04574 arg mem_24g_rxpayload ,contw 
+0371 20207ca5 branch memset0 
+
+p_g24_dispatch:
+0372 c513b37c bmark1 mark_24g_rxmode ,g24_receive_dispatch 
+0373 c6930000 rtnmark0 mark_24g 
+
+p_g24_transmit_dispatch:
+0374 6fe0c613 fetch 1 ,mem_24g_conn_sm 
+0375 c28082f6 bbit1 state_24g_pair ,p_g24_pair_dispatch 
+0376 c2810318 bbit1 state_24g_reconn ,p_g24_reconn_dispatch 
+0377 6fe0cc6c fetch 1 ,mem_ms_audio_enable_flag 
+0378 245a36bb ncall g24_transmit_by_interrupt_enable ,blank 
+0379 6fe0c62f fetch 1 ,mem_24g_transmit_by_interrupt 
+037a c000837c beq g24_tx_timer_int_enable ,p_g24_transmit_by_interrupt 
+037b 2020043e branch p_g24_transmit_no_interrupt 
+
+p_g24_transmit_by_interrupt:
+037c 20403224 call g24_timer_check 
+037d 24740000 nrtn user 
+037e 204036b5 call g24_interval_calibrate 
+037f 6fe08ea2 fetch 1 ,mem_voice_queue_count 
+0380 245a0411 ncall p_g24_send_audio_info_enable ,blank 
+0381 6fe14630 fetch 2 ,mem_24g_transmit_by_interrupt_exit_count 
+0382 1fe0fe01 increase 1 ,pdata 
+0383 67e14630 store 2 ,mem_24g_transmit_by_interrupt_exit_count 
+0384 68494632 fetcht 2 ,mem_24g_transmit_by_interrupt_exit_count_init 
+0385 98467c00 isub temp ,null 
+0386 2042b6aa call g24_transmit_by_interrupt_exit ,zero 
+0387 202035e0 branch g24_transmit_no_interrupt 
+
+p_g24_parse_receive_work_data:
+0388 204003dd call p_mouse_g24_tx_flag_clr_check 
+0389 6fe0c594 fetch 1 ,mem_24g_rxdata_length 
+038a 207a0000 rtn blank 
+
+p_g24_receive_ack_data:
+038b 6fe0c574 fetch 1 ,mem_24g_rxpayload 
+038c c1e00000 rtnne report_id_pro_data 
+038d 6fe0c575 fetch 1 ,mem_24g_rxpayload + 1 
+038e c1800000 rtnne start_flag 
+038f 6fe0c594 fetch 1 ,mem_24g_rxdata_length 
+0390 67e0c873 store 1 ,mem_ms_recv_ackpayload_temp 
+0391 1fe27200 copy pdata ,loopcnt 
+0392 d8c04575 arg mem_24g_rxpayload + 1 ,contr 
+0393 d8a04874 arg mem_ms_recv_ackpayload_temp + 1 ,contw 
+0394 20407cdc call memcpy 
+
+p_g24_receive_ack_data_next:
+0395 6fe0c577 fetch 1 ,mem_24g_rxpayload + 3 
+0396 c0038399 beq opcode_voice_end ,p_mouse_receive_dg_voice_end_data 
+0397 704e6620 jam zcode_20 ,mem_zcode_temp_param0 
+0398 202007d6 branch p_zcode_entrance 
+
+p_mouse_receive_dg_voice_end_data:
+0399 d8e00005 arg voice_end ,queue 
+039a 20200405 branch p_ms_tx_nor_pro_flag_enable 
+
+p_mouse_g24_tx_dpi_data:
+039b d8e00007 arg get_dpi ,queue 
+039c 20200405 branch p_ms_tx_nor_pro_flag_enable 
+
+p_mouse_receive_key_fuction_check:
+039d d8a04e41 arg mem_rxpayload_temp + 1 ,contw 
+
+p_memcpy_9:
+039e df200009 arg 9 ,loopcnt 
+039f 20407cdc call memcpy 
+03a0 6fe0ce44 fetch 1 ,mem_rxpayload_temp + 4 
+03a1 c00083a5 beq b4_fuction ,p_mouse_receive_b4key_data 
+03a2 c00103a7 beq b5_fuction ,p_mouse_receive_b5key_data 
+03a3 c00183a9 beq dpi_fuction ,p_mouse_receive_dpikey_data 
+03a4 20600000 rtn 
+
+p_mouse_receive_b4key_data:
+03a5 da604e4f arg mem_mouse_b4_fuction_info ,regc 
+03a6 202003ab branch p_mouse_key_info_compare_interface 
+
+p_mouse_receive_b5key_data:
+03a7 da604e54 arg mem_mouse_b5_fuction_info ,regc 
+03a8 202003ab branch p_mouse_key_info_compare_interface 
+
+p_mouse_receive_dpikey_data:
+03a9 da604e59 arg mem_mouse_dpi_fuction_info ,regc 
+03aa 202003ab branch p_mouse_key_info_compare_interface 
+
+p_mouse_key_info_compare_interface:
+03ab 1a620c00 copy regc ,contr 
+03ac d8a04e4a arg mem_mouse_key_fuction_info_temp ,contw 
+03ad 204003b1 call p_memcpy_5 
+03ae 204003b3 call p_g24_key_info_updata_check 
+03af d8c04e4a arg mem_mouse_key_fuction_info_temp ,contr 
+03b0 1a620a00 copy regc ,contw 
+
+p_memcpy_5:
+03b1 df200005 arg 5 ,loopcnt 
+03b2 20207cdc branch memcpy 
+
+p_g24_key_info_updata_check:
+03b3 6fe0ce45 fetch 1 ,mem_rxpayload_temp + 5 
+03b4 c00183c0 beq app_key ,p_g24_key_info_updata_app_check 
+03b5 df200005 arg 5 ,loopcnt 
+03b6 da204e45 arg mem_rxpayload_temp + 5 ,rega 
+03b7 da404e4a arg mem_mouse_key_fuction_info_temp ,regb 
+03b8 20407d66 call compare_loop 
+03b9 20628000 rtn zero 
+03ba d8c04e45 arg mem_rxpayload_temp + 5 ,contr 
+03bb d8a04e4a arg mem_mouse_key_fuction_info_temp ,contw 
+03bc 204003b1 call p_memcpy_5 
+03bd 202003c6 branch p_mouse_store_key_info_delay 
+
+p_g24_key_info_updata_app_long_check:
+03be 6048ce4d storet 1 ,mem_mouse_key_fuction_info_temp + 3 
+03bf 202003c6 branch p_mouse_store_key_info_delay 
+
+p_g24_key_info_updata_app_check:
+03c0 67e0ce4a store 1 ,mem_mouse_key_fuction_info_temp 
+03c1 6fe0ce46 fetch 1 ,mem_rxpayload_temp + 6 
+03c2 6848ce47 fetcht 1 ,mem_rxpayload_temp + 7 
+03c3 c00083be beq press_long ,p_g24_key_info_updata_app_long_check 
+03c4 6048ce4c storet 1 ,mem_mouse_key_fuction_info_temp + 2 
+03c5 202003c6 branch p_mouse_store_key_info_delay 
+
+p_mouse_store_key_info_delay:
+03c6 6fe0ce60 fetch 1 ,mem_store_key_info_delay_timer_init 
+03c7 67e0ce5f store 1 ,mem_store_key_info_delay_timer 
+03c8 20600000 rtn 
+
+p_mouse_key_info_store_delay_timer:
+03c9 da604e5f arg mem_store_key_info_delay_timer ,regc 
+03ca da4003cc arg p_mouse_store_key_info_check ,regb 
+03cb 20203755 branch timer_single_step 
+
+p_mouse_store_key_info_check:
+03cc d8400010 arg 16 ,temp 
+03cd da204e4f arg mem_mouse_key_information_start ,rega 
+03ce da40008a arg mouse_value_eeprom_offect ,regb 
+03cf 20206cc9 branch iicd_write_protect_eep_data 
+
+p_mouse_eeprom_load_le_att_list_info:
+03d0 704e6612 jam zcode_12 ,mem_zcode_temp_param0 
+03d1 202007d6 branch p_zcode_entrance 
+
+p_mouse_receive_dpi_check:
+03d2 d8a04e41 arg mem_rxpayload_temp + 1 ,contw 
+
+p_memcpy_4:
+03d3 df200004 arg 4 ,loopcnt 
+03d4 20407cdc call memcpy 
+03d5 704ce300 jam 0 ,mem_mouse_dpi_set_result 
+03d6 6fe0ce44 fetch 1 ,mem_rxpayload_temp + 4 
+03d7 1fe67c0a sub pdata ,10 ,null 
+03d8 24610000 nrtn positive 
+03d9 67e0c6a2 store 1 ,mem_mouse_dpi 
+03da 67e0cce2 store 1 ,mem_mouse_last_dpi 
+03db 704ce301 jam 1 ,mem_mouse_dpi_set_result 
+03dc 20205025 branch mouse_dpi_level_store 
+
+p_mouse_g24_tx_flag_clr_check:
+03dd 6fe0ccbc fetch 1 ,mem_ms_tx_data_type 
+03de 2feffe04 isolate1 http_bit ,pdata 
+03df 204083e7 call p_g24_clr_tx_http_info_flag ,true 
+03e0 2feffe05 isolate1 audio_bit ,pdata 
+03e1 204083e9 call p_g24_clr_tx_audio_info_flag ,true 
+03e2 2feffe06 isolate1 spec_pro_bit ,pdata 
+03e3 204083eb call p_g24_clr_tx_spec_info_flag_check ,true 
+03e4 2feffe07 isolate1 nor_pro_bit ,pdata 
+03e5 204083f1 call p_g24_clr_tx_nor_pro_flag_check ,true 
+03e6 20600000 rtn 
+
+p_g24_clr_tx_http_info_flag:
+03e7 793ffe04 set0 http_bit ,pdata 
+03e8 20200413 branch p_g24_store_ms_tx_flag 
+
+p_g24_clr_tx_audio_info_flag:
+03e9 793ffe05 set0 audio_bit ,pdata 
+03ea 20200413 branch p_g24_store_ms_tx_flag 
+
+p_g24_clr_tx_spec_info_flag_check:
+03eb 204003ef call p_g24_clr_tx_spec_info_flag 
+03ec d8400000 arg 0 ,temp 
+03ed 6049487b storet 2 ,mem_ms_tx_pro_key_flag 
+03ee 20600000 rtn 
+
+p_g24_clr_tx_spec_info_flag:
+03ef 793ffe06 set0 spec_pro_bit ,pdata 
+03f0 20200413 branch p_g24_store_ms_tx_flag 
+
+p_g24_clr_tx_nor_pro_flag_check:
+03f1 204003f5 call p_g24_clr_tx_nor_info_flag 
+03f2 d8400000 arg 0 ,temp 
+03f3 60494880 storet 2 ,mem_ms_tx_nor_pro_data_flag 
+03f4 20600000 rtn 
+
+p_g24_clr_tx_nor_info_flag:
+03f5 793ffe07 set0 nor_pro_bit ,pdata 
+03f6 20200413 branch p_g24_store_ms_tx_flag 
+
+p_ms_param_bit_set1:
+03f7 f9207e00 qset1 pdata 
+
+p_istore_2_contw_rtn:
+03f8 e7e10005 istore 2 ,contw 
+03f9 20600000 rtn 
+
+p_ms_param_bit_set0:
+03fa f93ffe00 qset0 pdata 
+03fb 202003f8 branch p_istore_2_contw_rtn 
+
+p_ms_long_press_key_index_enable:
+03fc 6fe1487e fetch 2 ,mem_ms_long_press_key_index 
+03fd d8a0487e arg mem_ms_long_press_key_index ,contw 
+03fe 202003f7 branch p_ms_param_bit_set1 
+
+p_ms_long_press_key_index_disable:
+03ff 6fe1487e fetch 2 ,mem_ms_long_press_key_index 
+0400 d8a0487e arg mem_ms_long_press_key_index ,contw 
+0401 202003fa branch p_ms_param_bit_set0 
+
+p_ms_tx_pro_key_flag_enable:
+0402 6fe1487b fetch 2 ,mem_ms_tx_pro_key_flag 
+0403 d8a0487b arg mem_ms_tx_pro_key_flag ,contw 
+0404 202003f7 branch p_ms_param_bit_set1 
+
+p_ms_tx_nor_pro_flag_enable:
+0405 6fe14880 fetch 2 ,mem_ms_tx_nor_pro_data_flag 
+0406 d8a04880 arg mem_ms_tx_nor_pro_data_flag ,contw 
+0407 202003f7 branch p_ms_param_bit_set1 
+
+p_mouse_g24_tx_info_check:
+0408 2040040c call p_mouse_g24_tx_flag_check 
+
+p_mouse_tx_device_info_check:
+0409 6fe0ccbc fetch 1 ,mem_ms_tx_data_type 
+040a 207a0000 rtn blank 
+040b 20207dbc branch enable_user 
+
+p_mouse_g24_tx_flag_check:
+040c 6fe1487b fetch 2 ,mem_ms_tx_pro_key_flag 
+040d 243a0415 nbranch p_g24_send_spec_info_enable ,blank 
+040e 6fe14880 fetch 2 ,mem_ms_tx_nor_pro_data_flag 
+040f 243a0418 nbranch p_g24_send_nor_info_enable ,blank 
+0410 20600000 rtn 
+
+p_g24_send_audio_info_enable:
+0411 6fe0ccbc fetch 1 ,mem_ms_tx_data_type 
+0412 79207e05 set1 audio_bit ,pdata 
+
+p_g24_store_ms_tx_flag:
+0413 67e0ccbc store 1 ,mem_ms_tx_data_type 
+0414 20600000 rtn 
+
+p_g24_send_spec_info_enable:
+0415 6fe0ccbc fetch 1 ,mem_ms_tx_data_type 
+0416 79207e06 set1 spec_pro_bit ,pdata 
+0417 20200413 branch p_g24_store_ms_tx_flag 
+
+p_g24_send_nor_info_enable:
+0418 6fe0ccbc fetch 1 ,mem_ms_tx_data_type 
+0419 79207e07 set1 nor_pro_bit ,pdata 
+041a 20200413 branch p_g24_store_ms_tx_flag 
+
+p_g24_send_http_info_enable:
+041b 6fe0ccbc fetch 1 ,mem_ms_tx_data_type 
+041c 79207e04 set1 http_bit ,pdata 
+041d 20200413 branch p_g24_store_ms_tx_flag 
+
+p_g24_nodata_transmit:
+041e 6fe0c619 fetch 1 ,mem_24g_abort_pac 
+041f 205a0423 call p_g24_send_abort_packet ,blank 
+0420 6fe0ccbd fetch 1 ,mem_device_tx_heart_data_flag 
+0421 245a0435 ncall p_g24_send_slow_heart_info ,blank 
+0422 20203680 branch g24_nodata_transmit + 2 
+
+p_g24_send_abort_packet:
+0423 6fe0ccbd fetch 1 ,mem_device_tx_heart_data_flag 
+0424 247a0000 nrtn blank 
+0425 7045a001 jam type_ms ,mem_24g_data_type 
+0426 6fe0c737 fetch 1 ,mem_24g_shutdown_flag 
+0427 79407e00 setflip 0 ,pdata 
+0428 67e0c619 store 1 ,mem_24g_abort_pac 
+0429 2040360e call g24_transmit_rf_ctrl_clear 
+042a 67e0c7c2 store 1 ,mem_24g_txbuf_new 
+042b 58000000 setarg 0 
+042c 67e3c7c3 store 7 ,mem_24g_txbuf_new + 1 
+042d 6fe2461b fetch 4 ,mem_24g_device_addr 
+042e 67e247ca store 4 ,mem_24g_txbuf_new + 8 
+042f 70459f0c jam 12 ,mem_24g_datalen 
+0430 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+0431 79207e03 set1 bit_abort ,pdata 
+0432 67e0c5a0 store 1 ,mem_24g_data_type 
+0433 20400521 call p_g24_transmit_prep 
+0434 202035e3 branch g24_transmit_start 
+
+p_g24_send_slow_heart_info:
+0435 70461900 jam 0 ,mem_24g_abort_pac 
+0436 7045a001 jam type_ms ,mem_24g_data_type 
+0437 2040360e call g24_transmit_rf_ctrl_clear 
+0438 70459f01 jam 1 ,mem_24g_datalen 
+0439 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+043a 79207e03 set1 heart_bit ,pdata 
+043b 67e0c7c2 store 1 ,mem_24g_txbuf_new 
+043c 20400521 call p_g24_transmit_prep 
+043d 20203612 branch g24_transmit_process 
+
+p_g24_transmit_no_interrupt:
+043e 20400441 call p_g24_txdata_prep 
+043f 2434041e nbranch p_g24_nodata_transmit ,user 
+0440 202035e3 branch g24_transmit_start 
+
+p_g24_txdata_prep:
+0441 20400444 call p_g24_package_data 
+0442 24740000 nrtn user 
+0443 20200521 branch p_g24_transmit_prep 
+
+p_g24_package_data:
+0444 6fe14609 fetch 2 ,mem_cb_24g_transmit_data 
+0445 20407d7b call callback_func 
+0446 20340450 branch p_g24_accumulate_data_set ,user 
+0447 6fe3c7c3 fetch 7 ,mem_24g_txbuf_new + 1 
+0448 207a0000 rtn blank 
+0449 20207dbc branch enable_user 
+
+p_g24_accumulate_data:
+044a 70461900 jam 0 ,mem_24g_abort_pac 
+044b 1a20fe01 add rega ,1 ,pdata 
+044c 67e0c59f store 1 ,mem_24g_datalen 
+044d 2040360e call g24_transmit_rf_ctrl_clear 
+044e 67e0c7c2 store 1 ,mem_24g_txbuf_new 
+044f 2020360b branch g24_accumulate_data + 5 
+
+p_g24_accumulate_data_set:
+0450 70461900 jam 0 ,mem_24g_abort_pac 
+0451 6fe0ccbc fetch 1 ,mem_ms_tx_data_type 
+0452 c000044a beq 0 ,p_g24_accumulate_data 
+0453 c2830458 bbit1 spec_pro_bit ,p_g24_send_spec_pro_info_check 
+0454 c283849b bbit1 nor_pro_bit ,p_g24_send_nor_pro_info_check 
+0455 c28284f8 bbit1 audio_bit ,p_g24_send_audio_info_check 
+0456 c28204f6 bbit1 http_bit ,p_g24_send_http_info_check 
+0457 20600000 rtn 
+
+p_g24_send_spec_pro_info_check:
+0458 6fe1487b fetch 2 ,mem_ms_tx_pro_key_flag 
+0459 c280045d bbit1 audio_key_bit ,p_g24_tx_audio_key_info 
+045a c281047e bbit1 transmit_key_bit ,p_g24_tx_transmit_key_info 
+045b c285048a bbit1 one_pullup_key_bit ,p_g24_tx_one_pullup_key_info 
+045c 20600000 rtn 
+
+p_g24_tx_audio_key_info:
+045d 6fe0ce4f fetch 1 ,mem_mouse_b4_fuction_info 
+045e c0018477 beq app_key ,p_b4_app_key_function 
+
+p_g24_tx_audio_key_info_next:
+045f d8400020 arg opcode_voice_key ,temp 
+
+p_g24_tx_key_info_check:
+0460 6fe0ccbb fetch 1 ,mem_ms_rf_data_flag 
+0461 203a046d branch p_g24_only_send_key_info_interface ,blank 
+
+p_g24_send_key_info_interface:
+0462 6048cc79 storet 1 ,mem_ms_24g_temp_buff + 3 
+0463 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+0464 79207e06 set1 spec_pro_bit ,pdata 
+0465 67e0cc76 store 1 ,mem_ms_24g_temp_buff 
+0466 704c7700 jam start_flag ,mem_ms_24g_temp_buff + 1 
+0467 704c7802 jam key_state_payload_len ,mem_ms_24g_temp_buff + 2 
+0468 6fe0c87d fetch 1 ,mem_ms_tx_pro_key_val 
+0469 67e0cc7a store 1 ,mem_ms_24g_temp_buff + 4 
+046a d8400005 arg key_state_info_len ,temp 
+046b da204c76 arg mem_ms_24g_temp_buff ,rega 
+046c 2020050d branch p_g24_send_rf_other_data 
+
+p_g24_only_send_key_info_interface:
+046d 6048c7c5 storet 1 ,mem_24g_txbuf_new + 3 
+046e 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+046f 79207e06 set1 spec_pro_bit ,pdata 
+0470 67e0c7c2 store 1 ,mem_24g_txbuf_new 
+0471 7047c300 jam start_flag ,mem_24g_txbuf_new + 1 
+0472 7047c402 jam key_state_payload_len ,mem_24g_txbuf_new + 2 
+0473 6fe0c87d fetch 1 ,mem_ms_tx_pro_key_val 
+0474 67e0c7c6 store 1 ,mem_24g_txbuf_new + 4 
+0475 70459f05 jam key_state_info_len ,mem_24g_datalen 
+0476 20600000 rtn 
+
+p_b4_app_key_function:
+0477 6fe0c87d fetch 1 ,mem_ms_tx_pro_key_val 
+0478 c001847c beq long_press ,p_b4_app_key_long_function 
+0479 c002047c beq long_release ,p_b4_app_key_long_function 
+047a 6848ce51 fetcht 1 ,mem_mouse_b4_fuction_info + 2 
+047b 20200460 branch p_g24_tx_key_info_check 
+
+p_b4_app_key_long_function:
+047c 6848ce52 fetcht 1 ,mem_mouse_b4_fuction_info + 3 
+047d 20200460 branch p_g24_tx_key_info_check 
+
+p_g24_tx_transmit_key_info:
+047e 6fe0ce54 fetch 1 ,mem_mouse_b5_fuction_info 
+047f c0018481 beq app_key ,p_b5_app_key_function 
+0480 20200486 branch p_g24_tx_transmit_key_info_next 
+
+p_b5_app_key_function:
+0481 6fe0c87d fetch 1 ,mem_ms_tx_pro_key_val 
+0482 c0018488 beq long_press ,p_b5_app_key_long_function 
+0483 c0020488 beq long_release ,p_b5_app_key_long_function 
+0484 6848ce56 fetcht 1 ,mem_mouse_b5_fuction_info + 2 
+0485 20200460 branch p_g24_tx_key_info_check 
+
+p_g24_tx_transmit_key_info_next:
+0486 d8400022 arg opcode_transmit_key ,temp 
+0487 20200460 branch p_g24_tx_key_info_check 
+
+p_b5_app_key_long_function:
+0488 6848ce57 fetcht 1 ,mem_mouse_b5_fuction_info + 3 
+0489 20200460 branch p_g24_tx_key_info_check 
+
+p_g24_tx_one_pullup_key_info:
+048a 6fe0ce59 fetch 1 ,mem_mouse_dpi_fuction_info 
+048b c001848d beq app_key ,p_dpi_app_key_function 
+048c 20200492 branch p_g24_tx_one_pullup_key_info_next 
+
+p_dpi_app_key_function:
+048d 6fe0c87d fetch 1 ,mem_ms_tx_pro_key_val 
+048e c0018494 beq long_press ,p_dpi_app_key_long_function 
+048f c0020494 beq long_release ,p_dpi_app_key_long_function 
+0490 6848ce5b fetcht 1 ,mem_mouse_dpi_fuction_info + 2 
+0491 20200460 branch p_g24_tx_key_info_check 
+
+p_g24_tx_one_pullup_key_info_next:
+0492 d8400030 arg opcode_one_pullup_key ,temp 
+0493 20200460 branch p_g24_tx_key_info_check 
+
+p_dpi_app_key_long_function:
+0494 6848ce5c fetcht 1 ,mem_mouse_dpi_fuction_info + 3 
+0495 20200460 branch p_g24_tx_key_info_check 
+
+p_g24_audio_data_out_from_queue:
+0496 6fe0cc6f fetch 1 ,mem_voice_enable 
+0497 207a0000 rtn blank 
+0498 6fe08ea2 fetch 1 ,mem_voice_queue_count 
+0499 207a0000 rtn blank 
+049a 2020070d branch p_voice_out_queue 
+
+p_g24_send_nor_pro_info_check:
+049b 6fe14880 fetch 2 ,mem_ms_tx_nor_pro_data_flag 
+049c c28204a5 bbit1 voice_start ,p_g24_voice_on_set 
+049d c28284a9 bbit1 voice_end ,p_g24_voice_off_set 
+049e c28304ad bbit1 device_info ,p_g24_tx_device_info 
+049f c28384af bbit1 get_dpi ,p_g24_get_dpi 
+04a0 c28404b1 bbit1 set_dpi ,p_g24_set_dpi 
+04a1 c28484b3 bbit1 get_battery ,p_g24_get_battery 
+04a2 c28604b5 bbit1 get_device_type ,p_g24_get_device_type 
+04a3 c28504b7 bbit1 set_key_fuction ,p_g24_set_key_fuction 
+04a4 20600000 rtn 
+
+p_g24_voice_on_set:
+04a5 2040068c call p_audio_enable 
+04a6 d8400002 arg 2 ,temp 
+04a7 704cb410 jam voice_start_data ,mem_ms_nor_pro_temp_buff 
+04a8 202004b9 branch p_g24_send_nor_pro_respond_info_check 
+
+p_g24_voice_off_set:
+04a9 20400681 call p_audio_disable 
+04aa 6fe0ccbb fetch 1 ,mem_ms_rf_data_flag 
+04ab 203a04de branch p_g24_only_send_nor_same_pro_respond_info ,blank 
+04ac 202004d6 branch p_g24_send_nor_pro_same_respond_info 
+
+p_g24_tx_device_info:
+04ad 704e6640 jam zcode_40 ,mem_zcode_temp_param0 
+04ae 202007d6 branch p_zcode_entrance 
+
+p_g24_get_dpi:
+04af 704e6641 jam zcode_41 ,mem_zcode_temp_param0 
+04b0 202007d6 branch p_zcode_entrance 
+
+p_g24_set_dpi:
+04b1 704e6650 jam zcode_50 ,mem_zcode_temp_param0 
+04b2 202007d6 branch p_zcode_entrance 
+
+p_g24_get_battery:
+04b3 704e6651 jam zcode_51 ,mem_zcode_temp_param0 
+04b4 202007d6 branch p_zcode_entrance 
+
+p_g24_get_device_type:
+04b5 704e6660 jam zcode_60 ,mem_zcode_temp_param0 
+04b6 202007d6 branch p_zcode_entrance 
+
+p_g24_set_key_fuction:
+04b7 704e6661 jam zcode_61 ,mem_zcode_temp_param0 
+04b8 202007d6 branch p_zcode_entrance 
+
+p_g24_send_nor_pro_respond_info_check:
+04b9 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+04ba 79207e07 set1 nor_pro_bit ,pdata 
+04bb 67e0cc76 store 1 ,mem_ms_24g_temp_buff 
+04bc 704c7700 jam start_flag ,mem_ms_24g_temp_buff + 1 
+04bd 6048cc78 storet 1 ,mem_ms_24g_temp_buff + 2 
+04be 6fe0c876 fetch 1 ,mem_ms_recv_ackpayload_temp + 3 
+04bf 67e0cc79 store 1 ,mem_ms_24g_temp_buff + 3 
+04c0 1840f3ff add temp ,-1 ,loopcnt 
+04c1 d8c04cb4 arg mem_ms_nor_pro_temp_buff ,contr 
+04c2 d8a04c7a arg mem_ms_24g_temp_buff + 4 ,contw 
+04c3 20407cdc call memcpy 
+04c4 1840f203 add temp ,nor_pro_header_len ,loopcnt 
+04c5 1f222200 copy loopcnt ,rega 
+04c6 d8a047c2 arg mem_24g_txbuf_new ,contw 
+04c7 6fe0ccbb fetch 1 ,mem_ms_rf_data_flag 
+04c8 245a04ce ncall p_g24_rf_data_fii_fifo ,blank 
+04c9 d8c04c76 arg mem_ms_24g_temp_buff ,contr 
+04ca 20407cdc call memcpy 
+04cb 1a227e00 copy rega ,pdata 
+04cc 67e0c59f store 1 ,mem_24g_datalen 
+04cd 20600000 rtn 
+
+p_g24_rf_data_fii_fifo:
+04ce 18a22600 copy contw ,regc 
+04cf 1a20a208 add rega ,8 ,rega 
+04d0 2040360e call g24_transmit_rf_ctrl_clear 
+04d1 1a620a00 copy regc ,contw 
+04d2 e7e08005 istore 1 ,contw 
+04d3 6fe3c65c fetch 7 ,mem_mouse_key 
+04d4 e7e38005 istore 7 ,contw 
+04d5 20600000 rtn 
+
+p_g24_send_nor_pro_same_respond_info:
+04d6 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+04d7 79207e07 set1 nor_pro_bit ,pdata 
+04d8 67e0cc76 store 1 ,mem_ms_24g_temp_buff 
+04d9 6fe24874 fetch 4 ,mem_ms_recv_ackpayload_temp + 1 
+04da 67e24c77 store 4 ,mem_ms_24g_temp_buff + 1 
+04db d8400005 arg nor_pro_res_len ,temp 
+04dc da204c76 arg mem_ms_24g_temp_buff ,rega 
+04dd 2020050d branch p_g24_send_rf_other_data 
+
+p_g24_only_send_nor_same_pro_respond_info:
+04de 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+04df 79207e07 set1 nor_pro_bit ,pdata 
+04e0 67e0c7c2 store 1 ,mem_24g_txbuf_new 
+04e1 6fe24874 fetch 4 ,mem_ms_recv_ackpayload_temp + 1 
+04e2 67e247c3 store 4 ,mem_24g_txbuf_new + 1 
+04e3 70459f05 jam nor_pro_res_len ,mem_24g_datalen 
+04e4 20600000 rtn 
+
+p_g24_ms_info_set:
+04e5 6fe0c9fa fetch 1 ,mem_config_sensor_type 
+04e6 e7e08005 istore 1 ,contw 
+04e7 6fe0c6a2 fetch 1 ,mem_mouse_dpi 
+04e8 e7e08005 istore 1 ,contw 
+04e9 6fe0c77c fetch 1 ,mem_le_battery_level_percentage 
+04ea e7e08005 istore 1 ,contw 
+04eb 6fe0c872 fetch 1 ,mem_ms_version 
+04ec e7e08005 istore 1 ,contw 
+04ed df200003 arg 3 ,loopcnt 
+04ee d8c04e4f arg mem_mouse_b4_fuction_info ,contr 
+
+p_g24_send_device_info_loop:
+04ef efe08006 ifetch 1 ,contr 
+04f0 e7e08005 istore 1 ,contw 
+04f1 18c08c01 increase 1 ,contr 
+04f2 efe18006 ifetch 3 ,contr 
+04f3 e7e18005 istore 3 ,contw 
+04f4 c20004ef loop p_g24_send_device_info_loop 
+04f5 20600000 rtn 
+
+p_g24_send_http_info_check:
+04f6 704e6630 jam zcode_30 ,mem_zcode_temp_param0 
+04f7 202007d6 branch p_zcode_entrance 
+
+p_g24_send_audio_info_check:
+04f8 20400496 call p_g24_audio_data_out_from_queue 
+04f9 6fe0ccbb fetch 1 ,mem_ms_rf_data_flag 
+04fa 203a0505 branch p_g24_only_send_audio_info ,blank 
+
+p_g24_send_audio_info:
+04fb 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+04fc 79207e05 set1 audio_bit ,pdata 
+04fd 67e0cc76 store 1 ,mem_ms_24g_temp_buff 
+04fe df20003c arg voice_queue_unit ,loopcnt 
+04ff d8c00ea3 arg mem_queue_buf ,contr 
+0500 d8a04c77 arg mem_ms_24g_temp_buff + 1 ,contw 
+0501 20407cdc call memcpy 
+0502 d840003d arg 61 ,temp 
+0503 da204c76 arg mem_ms_24g_temp_buff ,rega 
+0504 2020050d branch p_g24_send_rf_other_data 
+
+p_g24_only_send_audio_info:
+0505 70459f3d jam 61 ,mem_24g_datalen 
+0506 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+0507 79207e05 set1 audio_bit ,pdata 
+0508 67e0c7c2 store 1 ,mem_24g_txbuf_new 
+0509 df20003c arg voice_queue_unit ,loopcnt 
+050a d8c00ea3 arg mem_queue_buf ,contr 
+050b d8a047c3 arg mem_24g_txbuf_new + 1 ,contw 
+050c 20207cdc branch memcpy 
+
+p_g24_send_rf_other_data:
+050d 1840fe08 add temp ,8 ,pdata 
+050e 67e0c59f store 1 ,mem_24g_datalen 
+050f 2040360e call g24_transmit_rf_ctrl_clear 
+0510 67e0c7c2 store 1 ,mem_24g_txbuf_new 
+0511 6fe3c65c fetch 7 ,mem_mouse_key 
+0512 67e3c7c3 store 7 ,mem_24g_txbuf_new + 1 
+0513 18427200 copy temp ,loopcnt 
+0514 1a220c00 copy rega ,contr 
+0515 d8a047ca arg mem_24g_txbuf_new + 8 ,contw 
+0516 20207cdc branch memcpy 
+
+p_g24_transmit_packet:
+0517 6fe0c5e1 fetch 1 ,mem_24g_disable_fec1 
+0518 243a051b nbranch p_g24_transmit_nolr ,blank 
+0519 784efc00 disable encode_fec0 
+051a 782dfc00 enable encode_fec1 
+
+p_g24_transmit_nolr:
+051b 7823fc00 enable enable_white 
+051c 7824fc00 enable enable_crc 
+051d 6fe0c5a1 fetch 1 ,mem_24g_txlen 
+051e 98007200 iforce loopcnt 
+051f d8c04808 arg mem_24g_txpayload_new ,contr 
+0520 20203192 branch g24tr_loop 
+
+p_g24_transmit_prep:
+0521 6fe0c59f fetch 1 ,mem_24g_datalen 
+0522 1fe0fe03 increase 3 ,pdata 
+0523 67e0c5a1 store 1 ,mem_24g_txlen 
+0524 6fe0c5c3 fetch 1 ,mem_24g_syncword_crc8 
+0525 67e0c808 store 1 ,mem_24g_txpayload_new 
+0526 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+0527 1fe9fe00 lshift3 pdata ,pdata 
+0528 6848c595 fetcht 1 ,mem_24g_pid 
+0529 18410403 and temp ,0x03 ,temp 
+052a 18438400 lshift temp ,temp 
+052b 9841fe00 ior temp ,pdata 
+052c 6848c596 fetcht 1 ,mem_24g_no_ack 
+052d 9840fe00 iadd temp ,pdata 
+052e e7e08005 istore 1 ,contw 
+052f 6fe0c59f fetch 1 ,mem_24g_datalen 
+0530 e7e08005 istore 1 ,contw 
+0531 6fe0c59f fetch 1 ,mem_24g_datalen 
+0532 98007200 iforce loopcnt 
+0533 d8c047c2 arg mem_24g_txbuf_new ,contr 
+0534 20407cdc call memcpy 
+0535 202031db branch g24_transmit_prep_next 
+
+p_g24_txbuf_clear:
+0536 df20000a arg 10 ,loopcnt 
+0537 d8a047c2 arg mem_24g_txbuf_new ,contw 
+0538 20207ca5 branch memset0 
+
+p_g24_read_len_pid_crc:
+0539 6fe0c50f fetch 1 ,mem_24g_rxbuf + 1 
+053a 67e0c594 store 1 ,mem_24g_rxdata_length 
+053b 1fe0fe01 increase 1 ,pdata 
+053c d8c0450f arg mem_24g_rxbuf + 1 ,contr 
+053d 98c08c00 iadd contr ,contr 
+053e efe18006 ifetch 3 ,contr 
+053f 67e1c597 store 3 ,mem_24g_sta_crc 
+0540 6fe0c50e fetch 1 ,mem_24g_rxbuf 
+0541 1fe30400 rshift pdata ,temp 
+0542 18410403 and temp ,0x03 ,temp 
+0543 6048c59d storet 1 ,mem_24g_sta_pid 
+0544 1fe97e00 rshift3 pdata ,pdata 
+0545 67e0c50e store 1 ,mem_24g_rxbuf 
+0546 20600000 rtn 
+
+p_g24_receive_payload:
+0547 2040315c call g24_receive_byte 
+0548 67e0c50e store 1 ,mem_24g_rxbuf 
+0549 c513854f bmark1 mark_24g_rxmode ,p_g24_receive_skip 
+054a 6fe0c50e fetch 1 ,mem_24g_rxbuf 
+054b 1fe97e00 rshift3 pdata ,pdata 
+054c 6848c5a0 fetcht 1 ,mem_24g_data_type 
+054d a8400e00 icompare bits_data ,temp 
+054e 2420b16b nbranch g24_type_error ,true 
+
+p_g24_receive_skip:
+054f 2040315c call g24_receive_byte 
+0550 e7e08005 istore 1 ,contw 
+0551 1fe67c1f sub pdata ,0x1f ,null 
+0552 2421316d nbranch g24_len_over_error ,positive 
+0553 1fe27200 copy pdata ,loopcnt 
+0554 2022b133 branch g24rx_nopayload ,zero 
+0555 20203130 branch g24rx_loop 
+
+p_mouse_idle:
+0556 2040575a call mouse_idle + 1 
+0557 20400561 call p_mouse_dpi_level_check 
+0558 2040055c call p_mouse_fuction_key 
+0559 204006d8 call p_voice_adpcm_enter_queue 
+055a 2040056a call p_mouse_g24_hop_set 
+055b 20200703 branch p_le_audio_data_out_from_queue 
+
+p_mouse_fuction_key:
+055c 70472b00 jam 0 ,mem_customer_key 
+055d 20400585 call p_mouse_audio_key_scan 
+055e 204005f1 call p_mouse_one_pullup_key_scan 
+055f 2040063a call p_mouse_transmit_key_scan 
+0560 20200572 branch p_mouse_bb_event_10ms_timer 
+
+p_mouse_dpi_level_check:
+0561 6fe0c6a2 fetch 1 ,mem_mouse_dpi 
+0562 6848cce2 fetcht 1 ,mem_mouse_last_dpi 
+0563 98467c00 isub temp ,null 
+0564 20628000 rtn zero 
+0565 67e0cce2 store 1 ,mem_mouse_last_dpi 
+0566 704ce100 jam auto_in ,mem_mouse_dpi_type 
+0567 6fe0c678 fetch 1 ,mem_device_flag 
+0568 c000039b beq mode_24g_device ,p_mouse_g24_tx_dpi_data 
+0569 2020028a branch p_ms_le_tx_dpi_info 
+
+p_mouse_g24_hop_set:
+056a 6fe0c678 fetch 1 ,mem_device_flag 
+056b c1800000 rtnne mode_24g_device 
+056c 6fe08ea2 fetch 1 ,mem_voice_queue_count 
+056d 203a0570 branch p_mouse_default_hop_set ,blank 
+
+p_mouse_audio_hop_set:
+056e 70463805 jam 0x05 ,mem_24g_fast_hop_count 
+056f 20600000 rtn 
+
+p_mouse_default_hop_set:
+0570 7046380f jam 0x0f ,mem_24g_fast_hop_count 
+0571 20600000 rtn 
+
+p_mouse_bb_event_10ms_timer:
+0572 d8e00003 arg app_ms_key_scan_timer ,queue 
+0573 20407cf1 call timer_check 
+0574 247a0000 nrtn blank 
+0575 204005d5 call p_mouse_audio_key_long_press_check 
+0576 2040061e call p_mouse_one_pullup_key_long_press_check 
+0577 20400665 call p_mouse_transmit_key_long_press_check 
+0578 2040057c call p_app_audio_enable_set 
+
+p_mouse_bb_event_10ms_timer_init:
+0579 d8e00003 arg app_ms_key_scan_timer ,queue 
+057a 58000010 setarg 16 
+057b 20207ce3 branch timer_init 
+
+p_app_audio_enable_set:
+057c 6fe0cc6d fetch 1 ,mem_ms_audio_enable_timer 
+057d 207a0000 rtn blank 
+057e 1fe0ffff increase -1 ,pdata 
+057f 67e0cc6d store 1 ,mem_ms_audio_enable_timer 
+0580 247a0000 nrtn blank 
+
+p_audio_data_get_enable:
+0581 704c6f01 jam 1 ,mem_voice_enable 
+0582 d8a00a26 arg mem_voice_raw_start ,contw 
+0583 df2002d0 arg audio_buf_len ,loopcnt 
+0584 20207ca3 branch clear_mem 
+
+p_mouse_audio_key_scan:
+0585 6fe0ccd5 fetch 1 ,mem_ms_audio_key_gpio 
+0586 c17f8000 rtneq gpio_disable 
+0587 704a1d01 jam mouse_audio_key ,mem_mouse_key_temp_patch 
+0588 6848ccd5 fetcht 1 ,mem_ms_audio_key_gpio 
+0589 20400590 call p_mouse_audio_key_check 
+058a 67e0ccd7 store 1 ,mem_ms_audio_key_press_status 
+058b 20405203 call mouse_matrix_public_gpio_reset 
+058c 6fe0ccd7 fetch 1 ,mem_ms_audio_key_press_status 
+058d c00005b5 beq 0 ,p_audio_key_up 
+058e c003859a beq 7 ,p_audio_key_down 
+058f 20600000 rtn 
+
+p_mouse_audio_key_check:
+0590 20406ee0 call gpio_get_bit 
+0591 6848c89c fetcht 1 ,mem_matrix_public_gpio 
+0592 20208598 branch p_mouse_check_audio_button_connect_gnd ,true 
+0593 6848c89c fetcht 1 ,mem_matrix_public_gpio 
+0594 20406ef1 call gpio_out_active 
+0595 6848ccd5 fetcht 1 ,mem_ms_audio_key_gpio 
+0596 6fe0ccd7 fetch 1 ,mem_ms_audio_key_press_status 
+0597 20205157 branch mouse_check_key_connect_gnd_new 
+
+p_mouse_check_audio_button_connect_gnd:
+0598 6fe0ccd7 fetch 1 ,mem_ms_audio_key_press_status 
+0599 20205157 branch mouse_check_key_connect_gnd_new 
+
+p_audio_key_down:
+059a 6fe0ccd6 fetch 1 ,mem_ms_audio_key_state 
+059b c1008000 rtneq key_down 
+059c 704cd601 jam key_down ,mem_ms_audio_key_state 
+059d 6fe2ce4f fetch 5 ,mem_mouse_b4_fuction_info 
+
+p_app_key_replace:
+059e 67e2ce4a store 5 ,mem_mouse_key_fuction_info_temp 
+059f 6fe0ce4a fetch 1 ,mem_mouse_key_fuction_info_temp 
+05a0 c00085a6 beq ms_key ,p_mouse_key_value_replace 
+05a1 c00105a3 beq kb_key ,p_keyboard_key_value_replace 
+05a2 20600000 rtn 
+
+p_keyboard_key_value_replace:
+05a3 6fe1ce4c fetch 3 ,mem_mouse_key_fuction_info_temp + 2 
+05a4 67e1c9fe store 3 ,mem_customer_key_press_init + 1 
+05a5 2020522c branch mouse_customerkey_press 
+
+p_mouse_key_value_replace:
+05a6 6a20ce61 fetchr rega ,1 ,mem_mouse_fuction_key 
+05a7 6fe0ce4c fetch 1 ,mem_mouse_key_fuction_info_temp + 2 
+05a8 c07f85ab beq dpi_value ,p_mouse_dpi_process_new 
+05a9 9a21a200 ior rega ,rega 
+05aa 202005b3 branch p_storer_mouse_function_key 
+
+p_mouse_dpi_process_new:
+05ab 6220ce61 storer rega ,1 ,mem_mouse_fuction_key 
+05ac 2040501b call mouse_dpi_process 
+05ad 6a20ce61 fetchr rega ,1 ,mem_mouse_fuction_key 
+05ae 20600000 rtn 
+
+p_app_key_clear:
+05af 6fe0ce4c fetch 1 ,mem_mouse_key_fuction_info_temp + 2 
+05b0 c17f8000 rtneq dpi_value 
+05b1 1fe47e00 invert pdata ,pdata 
+05b2 9a212200 iand rega ,rega 
+
+p_storer_mouse_function_key:
+05b3 6220ce61 storer rega ,1 ,mem_mouse_fuction_key 
+05b4 20600000 rtn 
+
+p_audio_key_up:
+05b5 6fe0ccd6 fetch 1 ,mem_ms_audio_key_state 
+05b6 c1000000 rtneq key_up 
+05b7 704cd600 jam key_up ,mem_ms_audio_key_state 
+05b8 6fe2ce4f fetch 5 ,mem_mouse_b4_fuction_info 
+05b9 67e2ce4a store 5 ,mem_mouse_key_fuction_info_temp 
+05ba 6a20ce61 fetchr rega ,1 ,mem_mouse_fuction_key 
+05bb 6fe0ce4a fetch 1 ,mem_mouse_key_fuction_info_temp 
+05bc c00085af beq ms_key ,p_app_key_clear 
+05bd c001522f beq kb_key ,mouse_customerkey_release 
+05be 704cd800 jam 0 ,mem_ms_audio_key_press_count 
+05bf 70487d01 jam signle_press ,mem_ms_tx_pro_key_val 
+05c0 6fe1487e fetch 2 ,mem_ms_long_press_key_index 
+05c1 2feffe00 isolate1 audio_key_bit ,pdata 
+05c2 2040861c call p_ms_key_long_release ,true 
+05c3 d8e00000 arg audio_key_bit ,queue 
+05c4 204003ff call p_ms_long_press_key_index_disable 
+05c5 202005e4 branch p_mouse_audio_key_state_enable 
+
+p_mouse_multi_led_type_blink:
+05c6 6fe0c8ab fetch 1 ,mem_mouse_multi_led_blink_type 
+05c7 c00305c9 beq 6 ,p_mouse_multi_led_type_blink_next 
+05c8 20205a90 branch mouse_multi_led_type_blink + 2 
+
+p_mouse_multi_led_type_blink_next:
+05c9 da6048b3 arg mem_mouse_multi_led_blink_timer ,regc 
+05ca da4005cc arg p_mouse_multi_led_blink ,regb 
+05cb 20203755 branch timer_single_step 
+
+p_mouse_multi_led_blink:
+05cc 20405a59 call mouse_multi_dpi_led_blink_timer_init 
+05cd 20205aa0 branch mouse_multi_led_blink + 1 
+
+p_mouse_fuction_key_led_blink:
+05ce 7048ab06 jam 6 ,mem_mouse_multi_led_blink_type 
+05cf 7048a801 jam on ,mem_mouse_multi_led_blink_enable 
+05d0 7048a901 jam multi_led_blink ,mem_mouse_multi_led_type 
+05d1 20600000 rtn 
+
+p_mouse_fuction_key_led_stop_blink:
+05d2 7048a800 jam off ,mem_mouse_multi_led_blink_enable 
+05d3 7048a901 jam multi_led_blink ,mem_mouse_multi_led_type 
+05d4 20205abc branch mouse_device_led_off 
+
+p_mouse_audio_key_long_press_check:
+05d5 6fe0ccd6 fetch 1 ,mem_ms_audio_key_state 
+05d6 c1000000 rtneq key_up 
+05d7 6fe0ce4f fetch 1 ,mem_mouse_b4_fuction_info 
+05d8 c1818000 rtnne app_key 
+05d9 6fe1487e fetch 2 ,mem_ms_long_press_key_index 
+05da c3800000 rtnbit1 audio_key_bit 
+05db 6fe0ccd8 fetch 1 ,mem_ms_audio_key_press_count 
+05dc 1fe0fe01 increase 1 ,pdata 
+05dd 67e0ccd8 store 1 ,mem_ms_audio_key_press_count 
+05de 1fe67c32 sub pdata ,key_long_press ,null 
+05df 20610000 rtn positive 
+05e0 70487d03 jam long_press ,mem_ms_tx_pro_key_val 
+05e1 204005ce call p_mouse_fuction_key_led_blink 
+05e2 d8e00000 arg audio_key_bit ,queue 
+05e3 204003fc call p_ms_long_press_key_index_enable 
+
+p_mouse_audio_key_state_enable:
+05e4 6fe0cac4 fetch 1 ,mem_mouse_pair_flag 
+05e5 207a0000 rtn blank 
+05e6 6fe0c678 fetch 1 ,mem_device_flag 
+05e7 c0000402 beq mode_24g_device ,p_ms_tx_pro_key_flag_enable 
+
+p_le_audio_app_key_set:
+05e8 6fe0c87d fetch 1 ,mem_ms_tx_pro_key_val 
+05e9 c00185ed beq long_press ,p_le_audio_app_key_long_set 
+05ea c00205ed beq long_release ,p_le_audio_app_key_long_set 
+05eb c00085ef beq signle_press ,p_le_audio_key_single_set 
+05ec 20600000 rtn 
+
+p_le_audio_app_key_long_set:
+05ed 6848ce52 fetcht 1 ,mem_mouse_b4_fuction_info + 3 
+05ee 202002b9 branch p_ms_le_tx_key_state_interface 
+
+p_le_audio_key_single_set:
+05ef 6848ce51 fetcht 1 ,mem_mouse_b4_fuction_info + 2 
+05f0 202002b9 branch p_ms_le_tx_key_state_interface 
+
+p_mouse_one_pullup_key_scan:
+05f1 6fe0ccd9 fetch 1 ,mem_ms_one_pullup_key_gpio 
+05f2 c17f8000 rtneq gpio_disable 
+05f3 704a1d04 jam mouse_one_pullup_key ,mem_mouse_key_temp_patch 
+05f4 6848ccd9 fetcht 1 ,mem_ms_one_pullup_key_gpio 
+05f5 204005fc call p_mouse_one_pullup_key_check 
+05f6 67e0ccdb store 1 ,mem_ms_one_pullup_key_press_status 
+05f7 20405203 call mouse_matrix_public_gpio_reset 
+05f8 6fe0ccdb fetch 1 ,mem_ms_one_pullup_key_press_status 
+05f9 c000060b beq 0 ,p_one_pullup_key_up 
+05fa c0038606 beq 7 ,p_one_pullup_key_down 
+05fb 20600000 rtn 
+
+p_mouse_one_pullup_key_check:
+05fc 20406ee0 call gpio_get_bit 
+05fd 6848c89c fetcht 1 ,mem_matrix_public_gpio 
+05fe 20208604 branch p_mouse_check_one_pullup_button_connect_gnd ,true 
+05ff 6848c89c fetcht 1 ,mem_matrix_public_gpio 
+0600 20406ef1 call gpio_out_active 
+0601 6848ccd9 fetcht 1 ,mem_ms_one_pullup_key_gpio 
+0602 6fe0ccdb fetch 1 ,mem_ms_one_pullup_key_press_status 
+0603 20205157 branch mouse_check_key_connect_gnd_new 
+
+p_mouse_check_one_pullup_button_connect_gnd:
+0604 6fe0ccdb fetch 1 ,mem_ms_one_pullup_key_press_status 
+0605 20205157 branch mouse_check_key_connect_gnd_new 
+
+p_one_pullup_key_down:
+0606 6fe0ccda fetch 1 ,mem_ms_one_pullup_key_state 
+0607 c1008000 rtneq key_down 
+0608 704cda01 jam key_down ,mem_ms_one_pullup_key_state 
+0609 6fe2ce59 fetch 5 ,mem_mouse_dpi_fuction_info 
+060a 2020059e branch p_app_key_replace 
+
+p_one_pullup_key_up:
+060b 6fe0ccda fetch 1 ,mem_ms_one_pullup_key_state 
+060c c1000000 rtneq key_up 
+060d 704cda00 jam key_up ,mem_ms_one_pullup_key_state 
+060e 6fe2ce59 fetch 5 ,mem_mouse_dpi_fuction_info 
+060f 67e2ce4a store 5 ,mem_mouse_key_fuction_info_temp 
+0610 6a20ce61 fetchr rega ,1 ,mem_mouse_fuction_key 
+0611 6fe0ce4a fetch 1 ,mem_mouse_key_fuction_info_temp 
+0612 c00085af beq ms_key ,p_app_key_clear 
+0613 c001522f beq kb_key ,mouse_customerkey_release 
+0614 704cdc00 jam 0 ,mem_ms_one_pullup_key_press_count 
+0615 70487d01 jam signle_press ,mem_ms_tx_pro_key_val 
+0616 6fe1487e fetch 2 ,mem_ms_long_press_key_index 
+0617 2feffe0a isolate1 one_pullup_key_bit ,pdata 
+0618 2040861c call p_ms_key_long_release ,true 
+0619 d8e0000a arg one_pullup_key_bit ,queue 
+061a 204003ff call p_ms_long_press_key_index_disable 
+061b 2020062d branch p_mouse_one_pullup_key_state_enable 
+
+p_ms_key_long_release:
+061c 70487d04 jam long_release ,mem_ms_tx_pro_key_val 
+061d 202005d2 branch p_mouse_fuction_key_led_stop_blink 
+
+p_mouse_one_pullup_key_long_press_check:
+061e 6fe0ccda fetch 1 ,mem_ms_one_pullup_key_state 
+061f c1000000 rtneq key_up 
+0620 6fe0ce59 fetch 1 ,mem_mouse_dpi_fuction_info 
+0621 c1818000 rtnne app_key 
+0622 6fe1487e fetch 2 ,mem_ms_long_press_key_index 
+0623 c3850000 rtnbit1 one_pullup_key_bit 
+0624 6fe0ccdc fetch 1 ,mem_ms_one_pullup_key_press_count 
+0625 1fe0fe01 increase 1 ,pdata 
+0626 67e0ccdc store 1 ,mem_ms_one_pullup_key_press_count 
+0627 1fe67c32 sub pdata ,key_long_press ,null 
+0628 20610000 rtn positive 
+0629 70487d03 jam long_press ,mem_ms_tx_pro_key_val 
+062a 204005ce call p_mouse_fuction_key_led_blink 
+062b d8e0000a arg one_pullup_key_bit ,queue 
+062c 204003fc call p_ms_long_press_key_index_enable 
+
+p_mouse_one_pullup_key_state_enable:
+062d 6fe0cac4 fetch 1 ,mem_mouse_pair_flag 
+062e 207a0000 rtn blank 
+062f 6fe0c678 fetch 1 ,mem_device_flag 
+0630 c0000402 beq mode_24g_device ,p_ms_tx_pro_key_flag_enable 
+
+p_le_one_pullup_app_key_set:
+0631 6fe0c87d fetch 1 ,mem_ms_tx_pro_key_val 
+0632 c0018636 beq long_press ,p_le_one_pullup_app_key_long_set 
+0633 c0020636 beq long_release ,p_le_one_pullup_app_key_long_set 
+0634 c0008638 beq signle_press ,p_le_one_pullup_key_single_set 
+0635 20600000 rtn 
+
+p_le_one_pullup_app_key_long_set:
+0636 6848ce5c fetcht 1 ,mem_mouse_dpi_fuction_info + 3 
+0637 202002b9 branch p_ms_le_tx_key_state_interface 
+
+p_le_one_pullup_key_single_set:
+0638 6848ce5b fetcht 1 ,mem_mouse_dpi_fuction_info + 2 
+0639 202002b9 branch p_ms_le_tx_key_state_interface 
+
+p_mouse_transmit_key_scan:
+063a 6fe0ccdd fetch 1 ,mem_ms_transmit_key_gpio 
+063b c17f8000 rtneq gpio_disable 
+063c 704a1d03 jam mouse_transmit_key ,mem_mouse_key_temp_patch 
+063d 6848ccdd fetcht 1 ,mem_ms_transmit_key_gpio 
+063e 20400645 call p_mouse_transmit_key_check 
+063f 67e0ccdf store 1 ,mem_ms_transmit_key_press_status 
+0640 20405203 call mouse_matrix_public_gpio_reset 
+0641 6fe0ccdf fetch 1 ,mem_ms_transmit_key_press_status 
+0642 c0000654 beq 0 ,p_transmit_key_up 
+0643 c003864f beq 7 ,p_transmit_key_down 
+0644 20600000 rtn 
+
+p_mouse_transmit_key_check:
+0645 20406ee0 call gpio_get_bit 
+0646 6848c89c fetcht 1 ,mem_matrix_public_gpio 
+0647 2020864d branch p_mouse_check_transmit_button_connect_gnd ,true 
+0648 6848c89c fetcht 1 ,mem_matrix_public_gpio 
+0649 20406ef1 call gpio_out_active 
+064a 6848ccdd fetcht 1 ,mem_ms_transmit_key_gpio 
+064b 6fe0ccdf fetch 1 ,mem_ms_transmit_key_press_status 
+064c 20205157 branch mouse_check_key_connect_gnd_new 
+
+p_mouse_check_transmit_button_connect_gnd:
+064d 6fe0ccdf fetch 1 ,mem_ms_transmit_key_press_status 
+064e 20205157 branch mouse_check_key_connect_gnd_new 
+
+p_transmit_key_down:
+064f 6fe0ccde fetch 1 ,mem_ms_transmit_key_state 
+0650 c1008000 rtneq key_down 
+0651 704cde01 jam key_down ,mem_ms_transmit_key_state 
+0652 6fe2ce54 fetch 5 ,mem_mouse_b5_fuction_info 
+0653 2020059e branch p_app_key_replace 
+
+p_transmit_key_up:
+0654 6fe0ccde fetch 1 ,mem_ms_transmit_key_state 
+0655 c1000000 rtneq key_up 
+0656 704cde00 jam key_up ,mem_ms_transmit_key_state 
+0657 6fe2ce54 fetch 5 ,mem_mouse_b5_fuction_info 
+0658 67e2ce4a store 5 ,mem_mouse_key_fuction_info_temp 
+0659 6a20ce61 fetchr rega ,1 ,mem_mouse_fuction_key 
+065a 6fe0ce4a fetch 1 ,mem_mouse_key_fuction_info_temp 
+065b c00085af beq ms_key ,p_app_key_clear 
+065c c001522f beq kb_key ,mouse_customerkey_release 
+065d 704ce000 jam 0 ,mem_ms_transmit_key_press_count 
+065e 70487d01 jam signle_press ,mem_ms_tx_pro_key_val 
+065f 6fe1487e fetch 2 ,mem_ms_long_press_key_index 
+0660 2feffe02 isolate1 transmit_key_bit ,pdata 
+0661 2040861c call p_ms_key_long_release ,true 
+0662 d8e00002 arg transmit_key_bit ,queue 
+0663 204003ff call p_ms_long_press_key_index_disable 
+0664 20200674 branch p_mouse_transmit_key_state_enable 
+
+p_mouse_transmit_key_long_press_check:
+0665 6fe0ccde fetch 1 ,mem_ms_transmit_key_state 
+0666 c1000000 rtneq key_up 
+0667 6fe0ce54 fetch 1 ,mem_mouse_b5_fuction_info 
+0668 c1818000 rtnne app_key 
+0669 6fe1487e fetch 2 ,mem_ms_long_press_key_index 
+066a c3810000 rtnbit1 transmit_key_bit 
+066b 6fe0cce0 fetch 1 ,mem_ms_transmit_key_press_count 
+066c 1fe0fe01 increase 1 ,pdata 
+066d 67e0cce0 store 1 ,mem_ms_transmit_key_press_count 
+066e 1fe67c32 sub pdata ,key_long_press ,null 
+066f 20610000 rtn positive 
+0670 70487d03 jam long_press ,mem_ms_tx_pro_key_val 
+0671 204005ce call p_mouse_fuction_key_led_blink 
+0672 d8e00002 arg transmit_key_bit ,queue 
+0673 204003fc call p_ms_long_press_key_index_enable 
+
+p_mouse_transmit_key_state_enable:
+0674 6fe0cac4 fetch 1 ,mem_mouse_pair_flag 
+0675 207a0000 rtn blank 
+0676 6fe0c678 fetch 1 ,mem_device_flag 
+0677 c0000402 beq mode_24g_device ,p_ms_tx_pro_key_flag_enable 
+
+p_le_transmit_app_key_set:
+0678 6fe0c87d fetch 1 ,mem_ms_tx_pro_key_val 
+0679 c001867d beq long_press ,p_le_transmit_app_key_long_set 
+067a c002067d beq long_release ,p_le_transmit_app_key_long_set 
+067b c000867f beq signle_press ,p_le_transmit_key_single_set 
+067c 20600000 rtn 
+
+p_le_transmit_app_key_long_set:
+067d 6848ce57 fetcht 1 ,mem_mouse_b5_fuction_info + 3 
+067e 202002b9 branch p_ms_le_tx_key_state_interface 
+
+p_le_transmit_key_single_set:
+067f 6848ce56 fetcht 1 ,mem_mouse_b5_fuction_info + 2 
+0680 202002b9 branch p_ms_le_tx_key_state_interface 
+
+p_audio_disable:
+0681 6fe0cc6c fetch 1 ,mem_ms_audio_enable_flag 
+0682 207a0000 rtn blank 
+0683 704c6c00 jam 0 ,mem_ms_audio_enable_flag 
+0684 70409401 jam 1 ,mem_lpm_mode 
+0685 704c6f00 jam 0 ,mem_voice_enable 
+0686 70442700 jam 0 ,mem_adc_dma_enable 
+0687 7046380f jam 0x0f ,mem_24g_fast_hop_count 
+0688 700ea200 jam 0 ,mem_voice_queue_count 
+0689 7080cc00 jam 0 ,core_sadc_ctrl 
+068a 704c6e00 jam adc_battery ,mem_ms_adc_mode 
+068b 202002df branch p_ms_updata_connect_param_req 
+
+p_audio_enable:
+068c 6fe0cc6c fetch 1 ,mem_ms_audio_enable_flag 
+068d 247a0000 nrtn blank 
+068e 704c6c01 jam 1 ,mem_ms_audio_enable_flag 
+068f 70409400 jam 0 ,mem_lpm_mode 
+0690 704c6d02 jam 2 ,mem_ms_audio_enable_timer 
+
+p_audio_enable_config:
+0691 70807400 jam 0 ,0x8074 
+0692 70807600 jam 0 ,0x8076 
+0693 204002d8 call p_voice_updata_connect_param_req 
+0694 20400717 call p_voice_queue_init 
+
+p_audio_init:
+0695 20406f53 call sadc_calibration 
+0696 70441e00 jam 0x00 ,mem_adc_channel 
+0697 70441f01 jam 1 ,mem_adc_clkdiv 
+0698 70442701 jam 1 ,mem_adc_dma_enable 
+0699 704c6e01 jam adc_audio ,mem_ms_adc_mode 
+069a 6fe14c72 fetch 2 ,mem_adc_audio_saddr_ptr 
+069b 67e14c70 store 2 ,mem_adc_dma_rptr 
+069c 2020069d branch p_enable_adc 
+
+p_enable_adc:
+069d 6fe0cc6e fetch 1 ,mem_ms_adc_mode 
+069e c00006a1 beq adc_battery ,p_enable_adc_battery 
+069f c00086a6 beq adc_audio ,p_enable_adc_audio 
+06a0 20600000 rtn 
+
+p_enable_adc_battery:
+06a1 708ac600 jam 0x00 ,0x8ac6 
+06a2 708ac730 jam 0x30 ,0x8ac7 
+06a3 70441e09 jam 0x09 ,mem_adc_channel 
+06a4 70441f0a jam 0x0a ,mem_adc_clkdiv 
+06a5 20206fb3 branch enable_adc + 1 
+
+p_enable_adc_audio:
+06a6 708ac61b jam 0x1b ,0x8ac6 
+06a7 708ac71f jam 0x1f ,0x8ac7 
+06a8 20406f6b call sadc_cal_write 
+06a9 6ff08a09 fetch 1 ,core_gpadc_cfg1 
+06aa 793ffe07 set0 7 ,pdata 
+06ab 67f08a09 store 1 ,core_gpadc_cfg1 
+06ac 708a0770 jam 0x70 ,core_gpadc_ctrl 
+06ad 708a0843 jam 0x43 ,core_gpadc_cfg0 
+06ae 708a0b0c jam 0x0c ,core_gpadc_cfg3 
+06af 708a0aef jam 0xef ,core_gpadc_cfg2 
+06b0 20407007 call sadc_channel 
+06b1 6fe0c41f fetch 1 ,mem_adc_clkdiv 
+06b2 67f080cd store 1 ,core_sadc_clkdiv 
+06b3 20000bb8 nop 3000 
+06b4 204006d0 call p_sadc_read 
+06b5 7080cd00 jam 0 ,core_sadc_clkdiv 
+06b6 202006b7 branch p_sadc_audio_dma 
+
+p_sadc_audio_dma:
+06b7 6fe0c427 fetch 1 ,mem_adc_dma_enable 
+06b8 207a0000 rtn blank 
+06b9 6ff08a09 fetch 1 ,core_gpadc_cfg1 
+06ba 79207e07 set1 7 ,pdata 
+06bb 67f08a09 store 1 ,core_gpadc_cfg1 
+06bc 6fe0c41f fetch 1 ,mem_adc_clkdiv 
+06bd 67f080cd store 1 ,core_sadc_clkdiv 
+06be 6fe14c72 fetch 2 ,mem_adc_audio_saddr_ptr 
+06bf 67f100ce store 2 ,core_sadc_saddr 
+06c0 6fe14c74 fetch 2 ,mem_adc_audio_eaddr_ptr 
+06c1 67f100d0 store 2 ,core_sadc_eaddr 
+06c2 7080cc8b jam 0x8b ,core_sadc_ctrl 
+06c3 20000bb8 nop 3000 
+06c4 7080cc83 jam 0x83 ,core_sadc_ctrl 
+06c5 7080cd02 jam 2 ,core_sadc_clkdiv 
+06c6 20600000 rtn 
+
+p_sadc_calibration:
+06c7 20758000 rtn wake 
+06c8 708a0777 jam 0x77 ,core_gpadc_ctrl 
+06c9 708a08c9 jam 0xc9 ,core_gpadc_cfg0 
+06ca 708a0b00 jam 0x00 ,core_gpadc_cfg3 
+06cb 6fe0c41f fetch 1 ,mem_adc_clkdiv 
+06cc 67f080cd store 1 ,core_sadc_clkdiv 
+06cd 204006d0 call p_sadc_read 
+06ce 68590164 fetcht 2 ,core_sadc_data 
+06cf 20206f5e branch sadc_calibration + 11 
+
+p_sadc_read:
+06d0 7080cc83 jam 0x83 ,core_sadc_ctrl 
+06d1 6fe0cc6e fetch 1 ,mem_ms_adc_mode 
+06d2 245a06d6 ncall p_sadc_ctrl_set ,blank 
+06d3 2040700e call sar_adc_read_wait 
+06d4 7080cc80 jam 0x80 ,core_sadc_ctrl 
+06d5 20600000 rtn 
+
+p_sadc_ctrl_set:
+06d6 7080cc8b jam 0x8b ,core_sadc_ctrl 
+06d7 20600000 rtn 
+
+p_voice_adpcm_enter_queue:
+06d8 6fe0cc6f fetch 1 ,mem_voice_enable 
+06d9 207a0000 rtn blank 
+06da 204006ed call p_audio_get_len 
+06db 1fe67cf0 sub pdata ,audio_buf_uint ,null 
+06dc 20610000 rtn positive 
+
+p_voice_enter_queue:
+06dd 6fe08ea2 fetch 1 ,mem_voice_queue_count 
+06de d8400005 arg voice_queue_max_count ,temp 
+06df 184085ff increase -1 ,temp 
+06e0 98467c00 isub temp ,null 
+06e1 202106f9 branch p_audio_update_adc_rptr ,positive 
+06e2 2040071c call p_audio_adpcm_encode 
+06e3 204006f9 call p_audio_update_adc_rptr 
+06e4 58000d76 setarg mem_voice_adpcm_buf_start 
+06e5 204060ac call rec_queue_enter_config 
+06e6 d8c00cf6 arg mem_adpcm ,contr 
+06e7 df20003c arg voice_queue_unit ,loopcnt 
+06e8 204060c0 call rec_enter_queue 
+06e9 6fe08ea2 fetch 1 ,mem_voice_queue_count 
+06ea 1fe0fe01 increase 1 ,pdata 
+06eb 67e08ea2 store 1 ,mem_voice_queue_count 
+06ec 20600000 rtn 
+
+p_audio_get_len:
+06ed 6ff10122 fetch 2 ,core_adc_dma_wptr 
+06ee 1fe22200 copy pdata ,rega 
+06ef 68494c70 fetcht 2 ,mem_adc_dma_rptr 
+06f0 98467e00 isub temp ,pdata 
+06f1 242106f3 nbranch p_audio_get_len_wptr_over ,positive 
+06f2 20600000 rtn 
+
+p_audio_get_len_wptr_over:
+06f3 1a220400 copy rega ,temp 
+06f4 6fe14c70 fetch 2 ,mem_adc_dma_rptr 
+06f5 98460400 isub temp ,temp 
+06f6 580002d0 setarg audio_buf_len 
+06f7 98467e00 isub temp ,pdata 
+06f8 20600000 rtn 
+
+p_audio_update_adc_rptr:
+06f9 6fe14c70 fetch 2 ,mem_adc_dma_rptr 
+06fa 1fe0fef0 increase audio_buf_uint ,pdata 
+06fb d8400cf5 arg mem_voice_raw_end ,temp 
+06fc 18408401 increase 1 ,temp 
+06fd 98467c00 isub temp ,null 
+06fe 20228700 branch p_audio_adc_dma_ptr_over ,zero 
+06ff 20200701 branch p_store_adc_dma_rptr 
+
+p_audio_adc_dma_ptr_over:
+0700 58000a26 setarg mem_voice_raw_start 
+
+p_store_adc_dma_rptr:
+0701 67e14c70 store 2 ,mem_adc_dma_rptr 
+0702 20600000 rtn 
+
+p_le_audio_data_out_from_queue:
+0703 6fe0c678 fetch 1 ,mem_device_flag 
+0704 c1000000 rtneq mode_24g_device 
+0705 6fe0cc6f fetch 1 ,mem_voice_enable 
+0706 207a0000 rtn blank 
+0707 6fe08ea2 fetch 1 ,mem_voice_queue_count 
+0708 207a0000 rtn blank 
+0709 20402a06 call le_fifo_check_nearly_full 
+070a 247a0000 nrtn blank 
+070b 2040070d call p_voice_out_queue 
+070c 202002cd branch p_ms_le_tx_audio_data 
+
+p_voice_out_queue:
+070d 58000d76 setarg mem_voice_adpcm_buf_start 
+070e 204060b6 call rec_queue_out_config 
+070f df20003c arg voice_queue_unit ,loopcnt 
+0710 d8a00ea3 arg mem_queue_buf ,contw 
+0711 20406068 call rec_out_queue 
+0712 6fe08ea2 fetch 1 ,mem_voice_queue_count 
+0713 1fe0ffff increase -1 ,pdata 
+0714 67e08ea2 store 1 ,mem_voice_queue_count 
+0715 58000ea3 setarg mem_queue_buf 
+0716 20600000 rtn 
+
+p_voice_queue_init:
+0717 58000d76 setarg mem_voice_adpcm_buf_start 
+0718 d840012c arg voice_queue_size ,temp 
+0719 20406048 call rec_queue_init_config 
+071a 700ea200 jam 0 ,mem_voice_queue_count 
+071b 20600000 rtn 
+
+p_audio_adpcm_encode:
+071c 704c4478 jam 120 ,mem_ad_in_numsamples1 
+071d 6fe14c70 fetch 2 ,mem_adc_dma_rptr 
+071e 67e14c45 store 2 ,mem_ad_in_ptr1 
+071f 58000cf6 setarg mem_adpcm 
+0720 67e14c47 store 2 ,mem_ad_out_ptr1 
+
+p_adpcm_encode:
+0721 6fe24c3c fetch 4 ,mem_ad_state_valpred1 
+0722 67e24c4f store 4 ,mem_ad_valpred1 
+0723 6fe24c40 fetch 4 ,mem_ad_state_index1 
+0724 67e24c53 store 4 ,mem_ad_index1 
+0725 6fe0cc53 fetch 1 ,mem_ad_index1 
+0726 1febfe00 lshift2 pdata ,pdata 
+0727 d8404ad8 arg mem_ad_stepsizetable1 ,temp 
+0728 98408400 iadd temp ,temp 
+0729 efe20002 ifetch 4 ,temp 
+072a 67e24c4b store 4 ,mem_ad_step1 
+072b 704c5f01 jam 1 ,mem_ad_bufferstep1 
+
+p_adpcm_encode_loop:
+072c 204007cf call p_adpcm_get_val_from_inp 
+072d 6fe24c60 fetch 4 ,mem_ad_val1 
+072e 684a4c4f fetcht 4 ,mem_ad_valpred1 
+072f 98467e00 isub temp ,pdata 
+0730 67e24c68 store 4 ,mem_ad_diff1 
+0731 20400766 call p_adpcm_encode_cal_delta 
+0732 2040076d call p_adpcm_set_diff_by_sign 
+0733 704c4a00 jam 0 ,mem_ad_delta1 
+0734 6fe24c4b fetch 4 ,mem_ad_step1 
+0735 1fe97e00 rshift3 pdata ,pdata 
+0736 67e24c57 store 4 ,mem_ad_vpdiff1 
+0737 20400774 call p_check_diff_big_step1 
+0738 6fe24c4b fetch 4 ,mem_ad_step1 
+0739 1fe37e00 rshift pdata ,pdata 
+073a 67e24c4b store 4 ,mem_ad_step1 
+073b 20400782 call p_check_diff_big_step2 
+073c 6fe24c4b fetch 4 ,mem_ad_step1 
+073d 1fe37e00 rshift pdata ,pdata 
+073e 67e24c4b store 4 ,mem_ad_step1 
+073f 2040078a call p_check_diff_big_step3 
+0740 20400792 call p_check_sign_deal1 
+0741 2040079d call p_adpcm_check_valpred_more_32767 
+0742 6fe0cc4a fetch 1 ,mem_ad_delta1 
+0743 6848cc49 fetcht 1 ,mem_ad_sign1 
+0744 9841fe00 ior temp ,pdata 
+0745 67e0cc4a store 1 ,mem_ad_delta1 
+0746 6fe0cc4a fetch 1 ,mem_ad_delta1 
+0747 d8404ac8 arg mem_ad_indextable1 ,temp 
+0748 98408400 iadd temp ,temp 
+0749 efe08002 ifetch 1 ,temp 
+074a 20405f49 call rec_char_2_int32 
+074b 684a4c53 fetcht 4 ,mem_ad_index1 
+074c 9840fe00 iadd temp ,pdata 
+074d 67e24c53 store 4 ,mem_ad_index1 
+074e 204007aa call p_adpcm_check_index_less_0 
+074f 204007af call p_adpcm_check_index_big_88 
+0750 6fe24c53 fetch 4 ,mem_ad_index1 
+0751 1febfe00 lshift2 pdata ,pdata 
+0752 d8404ad8 arg mem_ad_stepsizetable1 ,temp 
+0753 98408400 iadd temp ,temp 
+0754 efe20002 ifetch 4 ,temp 
+0755 67e24c4b store 4 ,mem_ad_step1 
+0756 204007b9 call p_adpcm_check_bufferstep 
+0757 6fe0cc5f fetch 1 ,mem_ad_bufferstep1 
+0758 d8400001 arg 0x01 ,temp 
+0759 9842fe00 ixor temp ,pdata 
+075a 67e0cc5f store 1 ,mem_ad_bufferstep1 
+075b 6fe0cc44 fetch 1 ,mem_ad_in_numsamples1 
+075c 1fe0ffff increase -1 ,pdata 
+075d 67e0cc44 store 1 ,mem_ad_in_numsamples1 
+075e 243a072c nbranch p_adpcm_encode_loop ,blank 
+075f 6fe0cc5f fetch 1 ,mem_ad_bufferstep1 
+0760 205a07c9 call p_adpcm_set_bufferstep_to_outp ,blank 
+0761 6fe24c4f fetch 4 ,mem_ad_valpred1 
+0762 67e24c3c store 4 ,mem_ad_state_valpred1 
+0763 6fe24c53 fetch 4 ,mem_ad_index1 
+0764 67e24c40 store 4 ,mem_ad_state_index1 
+0765 20600000 rtn 
+
+p_adpcm_encode_cal_delta:
+0766 6fe24c68 fetch 4 ,mem_ad_diff1 
+0767 c28f876a bbit1 31 ,p_adpcm_encode_cal_smaller_zero 
+0768 58000000 setarg 0 
+0769 2020076b branch p_store_ad_sign1 
+
+p_adpcm_encode_cal_smaller_zero:
+076a 58000008 setarg 8 
+
+p_store_ad_sign1:
+076b 67e0cc49 store 1 ,mem_ad_sign1 
+076c 20600000 rtn 
+
+p_adpcm_set_diff_by_sign:
+076d 6fe0cc49 fetch 1 ,mem_ad_sign1 
+076e 243a0770 nbranch p_adpcm_diff_negation ,blank 
+076f 20600000 rtn 
+
+p_adpcm_diff_negation:
+0770 6fe24c68 fetch 4 ,mem_ad_diff1 
+0771 1fe67e00 sub pdata ,0 ,pdata 
+0772 67e24c68 store 4 ,mem_ad_diff1 
+0773 20600000 rtn 
+
+p_check_diff_big_step1:
+0774 6fe24c68 fetch 4 ,mem_ad_diff1 
+0775 684a4c4b fetcht 4 ,mem_ad_step1 
+0776 98467e00 isub temp ,pdata 
+0777 c38f8000 rtnbit1 31 
+0778 704c4a04 jam 4 ,mem_ad_delta1 
+
+p_check_diff_big_common:
+0779 6fe24c68 fetch 4 ,mem_ad_diff1 
+077a 684a4c4b fetcht 4 ,mem_ad_step1 
+077b 98467e00 isub temp ,pdata 
+077c 67e24c68 store 4 ,mem_ad_diff1 
+
+p_check_diff_big_common_next:
+077d 6fe24c57 fetch 4 ,mem_ad_vpdiff1 
+077e 684a4c4b fetcht 4 ,mem_ad_step1 
+077f 9840fe00 iadd temp ,pdata 
+0780 67e24c57 store 4 ,mem_ad_vpdiff1 
+0781 20600000 rtn 
+
+p_check_diff_big_step2:
+0782 6fe24c68 fetch 4 ,mem_ad_diff1 
+0783 684a4c4b fetcht 4 ,mem_ad_step1 
+0784 98467e00 isub temp ,pdata 
+0785 c38f8000 rtnbit1 31 
+0786 6fe0cc4a fetch 1 ,mem_ad_delta1 
+0787 1fe1fe02 or pdata ,2 ,pdata 
+0788 67e0cc4a store 1 ,mem_ad_delta1 
+0789 20200779 branch p_check_diff_big_common 
+
+p_check_diff_big_step3:
+078a 6fe24c68 fetch 4 ,mem_ad_diff1 
+078b 684a4c4b fetcht 4 ,mem_ad_step1 
+078c 98467e00 isub temp ,pdata 
+078d c38f8000 rtnbit1 31 
+078e 6fe0cc4a fetch 1 ,mem_ad_delta1 
+078f 1fe1fe01 or pdata ,1 ,pdata 
+0790 67e0cc4a store 1 ,mem_ad_delta1 
+0791 2020077d branch p_check_diff_big_common_next 
+
+p_check_sign_deal1:
+0792 6fe0cc49 fetch 1 ,mem_ad_sign1 
+0793 203a0799 branch p_valpred_add_vpdiff ,blank 
+
+p_valpred_sub_vpdiff:
+0794 6fe24c4f fetch 4 ,mem_ad_valpred1 
+0795 684a4c57 fetcht 4 ,mem_ad_vpdiff1 
+0796 98467e00 isub temp ,pdata 
+
+p_valpred1_store:
+0797 67e24c4f store 4 ,mem_ad_valpred1 
+0798 20600000 rtn 
+
+p_valpred_add_vpdiff:
+0799 6fe24c4f fetch 4 ,mem_ad_valpred1 
+079a 684a4c57 fetcht 4 ,mem_ad_vpdiff1 
+079b 9840fe00 iadd temp ,pdata 
+079c 20200797 branch p_valpred1_store 
+
+p_adpcm_check_valpred_more_32767:
+079d 6fe24c4f fetch 4 ,mem_ad_valpred1 
+079e d8407fff arg 32767 ,temp 
+079f 98467e00 isub temp ,pdata 
+07a0 c30f87a6 bbit0 31 ,p_adpcm_valpred_more_32767 
+
+p_adpcm_check_valpred_less_f32767:
+07a1 6fe24c4f fetch 4 ,mem_ad_valpred1 
+07a2 d85f8001 arg -32767 ,temp 
+07a3 98467e00 isub temp ,pdata 
+07a4 c28f87a8 bbit1 31 ,p_adpcm_valpred_less_f32767 
+07a5 20600000 rtn 
+
+p_adpcm_valpred_more_32767:
+07a6 58007fff setarg 32767 
+07a7 20200797 branch p_valpred1_store 
+
+p_adpcm_valpred_less_f32767:
+07a8 5fff8001 setarg -32767 
+07a9 20200797 branch p_valpred1_store 
+
+p_adpcm_check_index_less_0:
+07aa 6fe24c53 fetch 4 ,mem_ad_index1 
+07ab d8400000 arg 0 ,temp 
+07ac 98467e00 isub temp ,pdata 
+07ad c28f87b4 bbit1 31 ,p_adpcm_set_0_index 
+07ae 20600000 rtn 
+
+p_adpcm_check_index_big_88:
+07af 6fe24c53 fetch 4 ,mem_ad_index1 
+07b0 d8400058 arg 88 ,temp 
+07b1 98467e00 isub temp ,pdata 
+07b2 c30f87b7 bbit0 31 ,p_adpcm_set_88_index 
+07b3 20600000 rtn 
+
+p_adpcm_set_0_index:
+07b4 58000000 setarg 0 
+
+p_adpcm_store_index1:
+07b5 67e24c53 store 4 ,mem_ad_index1 
+07b6 20600000 rtn 
+
+p_adpcm_set_88_index:
+07b7 58000058 setarg 88 
+07b8 202007b5 branch p_adpcm_store_index1 
+
+p_adpcm_check_bufferstep:
+07b9 6fe0cc5f fetch 1 ,mem_ad_bufferstep1 
+07ba 203a07bf branch p_adpcm_bufferstep_eque_0 ,blank 
+
+p_adpcm_bufferstep_neque_0:
+07bb 6fe0cc4a fetch 1 ,mem_ad_delta1 
+07bc 1fe17e0f and pdata ,0x0f ,pdata 
+07bd 67e24c64 store 4 ,mem_ad_outputbuffer1 
+07be 20600000 rtn 
+
+p_adpcm_bufferstep_eque_0:
+07bf 6fe0cc4a fetch 1 ,mem_ad_delta1 
+07c0 1ff27e00 lshift4 ,pdata ,pdata 
+07c1 1fe17ef0 and pdata ,0xf0 ,pdata 
+07c2 684a4c64 fetcht 4 ,mem_ad_outputbuffer1 
+07c3 9841fe00 ior temp ,pdata 
+07c4 68494c47 fetcht 2 ,mem_ad_out_ptr1 
+07c5 e7e08002 istore 1 ,temp 
+07c6 18408401 increase 1 ,temp 
+07c7 60494c47 storet 2 ,mem_ad_out_ptr1 
+07c8 20600000 rtn 
+
+p_adpcm_set_bufferstep_to_outp:
+07c9 6fe24c64 fetch 4 ,mem_ad_outputbuffer1 
+07ca 68494c47 fetcht 2 ,mem_ad_out_ptr1 
+07cb e7e08002 istore 1 ,temp 
+07cc 18408401 increase 1 ,temp 
+07cd 60494c47 storet 2 ,mem_ad_out_ptr1 
+07ce 20600000 rtn 
+
+p_adpcm_get_val_from_inp:
+07cf 68494c45 fetcht 2 ,mem_ad_in_ptr1 
+07d0 efe10002 ifetch 2 ,temp 
+07d1 18408402 increase 2 ,temp 
+07d2 60494c45 storet 2 ,mem_ad_in_ptr1 
+07d3 20405f43 call rec_int16_2_int32 
+07d4 67e24c60 store 4 ,mem_ad_val1 
+07d5 20600000 rtn 
+
+p_zcode_entrance:
+07d6 6848ce66 fetcht 1 ,mem_zcode_temp_param0 
+07d7 18518400 rshift4 temp ,temp 
+07d8 6fe0ce67 fetch 1 ,mem_zcode_current_number 
+07d9 98467c00 isub temp ,null 
+07da 202287f4 branch p_zcode_run ,zero 
+07db 6048ce67 storet 1 ,mem_zcode_current_number 
+07dc 18408401 increase 1 ,temp 
+07dd 58000100 setarg zcode_buff_size 
+07de 984f8400 imul32 temp ,temp 
+07df 6fe14e6c fetch 2 ,mem_xip_flash_offset 
+07e0 98467e00 isub temp ,pdata 
+07e1 68494e68 fetcht 2 ,mem_eeprom_start_addr 
+07e2 9840fe00 iadd temp ,pdata 
+07e3 67e14e6a store 2 ,mem_eeprom_address 
+
+p_zcode_read_loop:
+07e4 6fe14e6a fetch 2 ,mem_eeprom_address 
+07e5 1ff0fe00 byteswap pdata ,pdata 
+07e6 67e101be store 2 ,mem_addr_mi 
+07e7 d8400100 arg zcode_buff_size ,temp 
+07e8 da200e00 arg mem_zcode_buff ,rega 
+07e9 20406cdd call iicd_read_eep 
+07ea 6fe20e00 fetch 4 ,mem_zcode_buff 
+07eb 684a4e6f fetcht 4 ,mem_zcode_head 
+07ec 98467c00 isub temp ,null 
+07ed 242287e4 nbranch p_zcode_read_loop ,zero 
+07ee 58000e00 setarg mem_zcode_buff 
+07ef 67e140f0 store 2 ,mem_patch_ptr 
+07f0 7040f240 jam zcode_code_size ,mem_patch_len 
+07f1 20406aff call load_ucode 
+07f2 58000000 setarg 0 
+07f3 67e240f0 store 4 ,mem_patch_ptr 
+
+p_zcode_run:
+07f4 6fe0ce66 fetch 1 ,mem_zcode_temp_param0 
+07f5 20200001 branch p_zcode 
+              org 0x2000
+
+start:
+2000 20402369 call lpmstate 
+
+soft_reset:
+2001 44804000 bpatch patch00_0 ,mem_patch00 
+2002 20800000 clear_stack 
+2003 204069e4 call load_otp_set_init 
+2004 20403717 call app_param_init 
+2005 20402244 call initialize_radio 
+2006 20406ca3 call iic_init_360khz 
+2007 20402347 call init_param 
+2008 204068d2 call l2cap_init 
+2009 4480c000 bpatch patch00_1 ,mem_patch00 
+200a 2040775d call ui_init 
+200b 2040370a call app_init 
+200c 20407435 call publickey_init 
+200d 2055a421 call lpm_recover_clk ,wake 
+
+main_loop:
+200e 44814000 bpatch patch00_2 ,mem_patch00 
+200f 20407540 call sp_calc_sequence_256 
+2010 20407436 call sp_calc_sequence_256_check 
+2011 20402a23 call le_advertising_dispatch 
+2012 2040202a call idle_dispatch 
+2013 20403722 call app_process_idle 
+2014 20402018 call connection_dispatch 
+2015 204030ed call g24_dispatch 
+2016 20402463 call lpm_dispatch 
+2017 2020200e branch main_loop 
+
+connection_dispatch:
+2018 2040201d call connection_incontext 
+2019 c6848000 rtnmark0 mark_context 
+201a 793f8009 set0 mark_context ,mark 
+201b 20402041 call context_save 
+201c 20202591 branch le_disable 
+
+connection_incontext:
+201d 4481c000 bpatch patch00_3 ,mem_patch00 
+201e 20402066 call context_search_insniff 
+201f 2422a025 nbranch connection_nosniff ,zero 
+2020 20402036 call context_load 
+2021 1a208c01 add rega ,coffset_mode ,contr 
+2022 efe08006 ifetch 1 ,contr 
+2023 c280250d bbit1 mode_le ,le_conn_dispatch 
+2024 20600000 rtn 
+
+connection_nosniff:
+2025 70000600 jam 0 ,mem_current_context 
+2026 20402047 call context_get_next 
+2027 1f227c00 copy loopcnt ,null 
+2028 20628000 rtn zero 
+2029 2020233e branch assert 
+
+idle_dispatch:
+202a 6fe0c114 fetch 1 ,mem_hci_cmd 
+202b 207a0000 rtn blank 
+202c c00da033 beq hci_cmd_le_create_conn ,idle_le_create_conn 
+202d 2040205f call context_search_conn_handle 
+202e 20628000 rtn zero 
+202f 20402062 call context_search_plap 
+2030 20628000 rtn zero 
+
+idle_exit:
+2031 70411400 jam 0 ,mem_hci_cmd 
+2032 20600000 rtn 
+
+idle_le_create_conn:
+2033 70433e1b jam hci_cmd_le_create_conn ,mem_cmd_le_create_conn 
+2034 70411400 jam 0 ,mem_hci_cmd 
+2035 20600000 rtn 
+
+context_load:
+2036 44824000 bpatch patch00_4 ,mem_patch00 
+2037 79200009 set1 mark_context ,mark 
+2038 1a227e00 deposit rega 
+2039 67e1000a store 2 ,mem_context_ptr 
+203a 18007253 force context_size ,loopcnt 
+203b d8a00168 arg mem_le_state ,contw 
+203c 1a208c01 add rega ,coffset_mode ,contr 
+203d efe08006 ifetch 1 ,contr 
+203e 1a220c00 copy rega ,contr 
+203f c2807cdc bbit1 mode_le ,memcpy 
+2040 20600000 rtn 
+
+context_save:
+2041 4482c000 bpatch patch00_5 ,mem_patch00 
+2042 6fe1000a fetch 2 ,mem_context_ptr 
+2043 98000a00 iforce contw 
+2044 18007253 force context_size ,loopcnt 
+2045 d8c00168 arg mem_le_state ,contr 
+2046 20207cdc branch memcpy 
+
+context_get_next:
+2047 df200001 arg context_num ,loopcnt 
+2048 68488006 fetcht 1 ,mem_current_context 
+
+context_get_next_loop:
+2049 18408401 increase 1 ,temp 
+204a 2841fe01 compare context_num ,temp ,0xff 
+204b 2420a04d nbranch context_get_next_cont ,true 
+204c d8400000 arg 0 ,temp 
+
+context_get_next_cont:
+204d 60488006 storet 1 ,mem_current_context 
+204e 184ffe53 mul32 temp ,context_size ,pdata 
+204f da204040 arg mem_context ,rega 
+2050 9a20a200 iadd rega ,rega 
+2051 efe08011 ifetch 1 ,rega 
+2052 c280a054 bbit1 state_insniff ,context_get_next_sniff 
+2053 c3800000 rtnbit1 state_inconn 
+
+context_get_next_sniff:
+2054 c2002049 loop context_get_next_loop 
+2055 20600000 rtn 
+
+context_new:
+2056 44834000 bpatch patch00_6 ,mem_patch00 
+2057 da602073 arg context_search_empty ,regc 
+2058 20402069 call context_search 
+2059 24628000 nrtn zero 
+205a 1a227e00 deposit rega 
+205b 67e1000a store 2 ,mem_context_ptr 
+205c 20207dba branch enable_zero 
+
+context_check_idle:
+205d da6020ad arg context_check_inconn ,regc 
+205e 20202069 branch context_search 
+
+context_search_conn_handle:
+205f 6848c115 fetcht 1 ,mem_hci_conn_handle 
+
+context_search_conn_handle2:
+2060 da60207b arg context_search_handle ,regc 
+2061 20202069 branch context_search 
+
+context_search_plap:
+2062 4483c000 bpatch patch00_7 ,mem_patch00 
+2063 684b4116 fetcht 6 ,mem_hci_plap 
+
+context_search_plap2:
+2064 da602075 arg context_search_lap ,regc 
+2065 20202069 branch context_search 
+
+context_search_insniff:
+2066 da602081 arg context_search_sniff ,regc 
+2067 20202069 branch context_search 
+
+context_search_sniff_window:
+2068 da6020c7 arg context_search_window ,regc 
+
+context_search:
+2069 44844001 bpatch patch01_0 ,mem_patch01 
+206a da204040 arg mem_context ,rega 
+206b df200001 arg context_num ,loopcnt 
+
+context_search_loop:
+206c efe08011 ifetch 1 ,rega 
+206d 1a627a00 copy regc ,pc 
+
+context_search_next:
+206e 4484c001 bpatch patch01_1 ,mem_patch01 
+206f 1a20a253 increase context_size ,rega 
+2070 c200206c loop context_search_loop 
+2071 18007c01 force 1 ,null 
+2072 20600000 rtn 
+
+context_search_empty:
+2073 c280206e bbit1 state_inconn ,context_search_next 
+2074 20207dba branch enable_zero 
+
+context_search_lap:
+2075 c300206e bbit0 state_inconn ,context_search_next 
+
+context_search_lap_cont:
+2076 1a208c10 add rega ,coffset_plap ,contr 
+2077 efe30006 ifetch 6 ,contr 
+2078 98467c00 isub temp ,null 
+2079 20628000 rtn zero 
+207a 2020206e branch context_search_next 
+
+context_search_handle:
+207b c300206e bbit0 state_inconn ,context_search_next 
+207c 1a208c16 add rega ,coffset_conn_handle ,contr 
+207d efe08006 ifetch 1 ,contr 
+207e 98467c00 isub temp ,null 
+207f 20628000 rtn zero 
+2080 2020206e branch context_search_next 
+
+context_search_sniff:
+2081 c300a06e bbit0 state_insniff ,context_search_next 
+
+context_search_sniff_loop:
+2082 204020b4 call context_get_anchor 
+2083 2040209d call sign_pdata_temp 
+2084 98467e00 isub temp ,pdata 
+2085 1fe0fe01 increase 1 ,pdata 
+2086 20212097 branch context_search_sniff_miss ,positive 
+2087 18c22400 copy contr ,regb 
+2088 67e48656 store 9 ,mem_temp 
+2089 44854001 bpatch patch01_2 ,mem_patch01 
+208a 6fe0c484 fetch 1 ,mem_sc_calc 
+208b 243a2090 nbranch context_search_sniff_sc ,blank 
+208c 6fe48656 fetch 9 ,mem_temp 
+208d 1a420c00 copy regb ,contr 
+208e 1fe0fe05 increase 5 ,pdata 
+208f 20202093 branch context_search_meet1 
+
+context_search_sniff_sc:
+2090 6fe48656 fetch 9 ,mem_temp 
+2091 1a420c00 copy regb ,contr 
+2092 1fe0fe14 increase 20 ,pdata 
+
+context_search_meet1:
+2093 2421206e nbranch context_search_next ,positive 
+
+context_search_meet:
+2094 18424200 copy temp ,bt_clk 
+2095 204020c0 call context_next_anchor 
+2096 20207dba branch enable_zero 
+
+context_search_sniff_miss:
+2097 98002400 iforce regb 
+2098 1a208c02 add rega ,coffset_tsniff ,contr 
+2099 efe10006 ifetch 2 ,contr 
+209a 203a2094 branch context_search_meet ,blank 
+209b 204020c0 call context_next_anchor 
+209c 20202082 branch context_search_sniff_loop 
+
+sign_pdata_temp:
+209d 1ff11600 rshift16 pdata ,timeup 
+209e 196c9600 rshift8 timeup ,timeup 
+209f 2022a0a7 branch sign_pdata_temp_p0 ,zero 
+20a0 29601e0f compare 0xf ,timeup ,0xf 
+20a1 24608000 nrtn true 
+20a2 18511600 rshift16 temp ,timeup 
+20a3 196c9600 rshift8 timeup ,timeup 
+20a4 24628000 nrtn zero 
+20a5 7920041c set1 28 ,temp 
+20a6 20600000 rtn 
+
+sign_pdata_temp_p0:
+20a7 18511600 rshift16 temp ,timeup 
+20a8 196c9600 rshift8 timeup ,timeup 
+20a9 29601e0f compare 0xf ,timeup ,0xf 
+20aa 24608000 nrtn true 
+20ab 79207e1c set1 28 ,pdata 
+20ac 20600000 rtn 
+
+context_check_inconn:
+20ad c300206e bbit0 state_inconn ,context_search_next 
+20ae 20207dba branch enable_zero 
+
+context_check_a_wack:
+20af c300206e bbit0 state_inconn ,context_search_next 
+20b0 1a208c01 add rega ,coffset_mode ,contr 
+20b1 efe08006 ifetch 1 ,contr 
+20b2 c280206e bbit1 mode_le ,context_search_next 
+20b3 20600000 rtn 
+
+context_get_anchor:
+20b4 1a208c01 add rega ,coffset_mode ,contr 
+20b5 e8408006 ifetcht 1 ,contr 
+20b6 1c427e00 deposit clkn_bt 
+20b7 284ffe01 isolate1 mode_master ,temp 
+20b8 1a208c04 add rega ,coffset_sniff_anchor ,contr 
+20b9 e8420006 ifetcht 4 ,contr 
+20ba 20608000 rtn true 
+20bb 1a208c08 add rega ,coffset_clk_offset ,contr 
+20bc efe30006 ifetch 6 ,contr 
+20bd 20402109 call calc_clke2 
+20be 1d027e00 deposit clke_bt 
+20bf 20600000 rtn 
+
+context_next_anchor:
+20c0 1a208c02 add rega ,coffset_tsniff ,contr 
+20c1 1a208a04 add rega ,coffset_sniff_anchor ,contw 
+20c2 efe10006 ifetch 2 ,contr 
+20c3 98409600 iadd temp ,timeup 
+20c4 19627e00 deposit timeup 
+20c5 e7e20005 istore 4 ,contw 
+20c6 202025de branch le_context_nextevent 
+
+context_search_window:
+20c7 c300a06e bbit0 state_insniff ,context_search_next 
+20c8 204020b4 call context_get_anchor 
+20c9 9b60fe00 iadd stop_watch ,pdata 
+20ca 9b60fe00 iadd stop_watch ,pdata 
+20cb 98e0fe00 iadd queue ,pdata 
+20cc 98467c00 isub temp ,null 
+20cd 2421206e nbranch context_search_next ,positive 
+20ce 20207dba branch enable_zero 
+
+end_of_packet:
+20cf 4485c001 bpatch patch01_3 ,mem_patch01 
+20d0 785d7c00 disable lr_s2en 
+20d1 784efc00 disable encode_fec0 
+20d2 784e7c00 disable encode_fec2 
+20d3 7846fc00 disable decode_fec0 
+20d4 78467c00 disable decode_fec2 
+20d5 7844fc00 disable enable_crc 
+20d6 78477c00 disable encrypt 
+20d7 7843fc00 disable enable_white 
+20d8 2030a155 branch shutdown_radio ,is_rx 
+20d9 37d38200 until null ,tx_clear 
+20da 20000064 nop 100 
+20db 20202155 branch shutdown_radio 
+
+sniff_check_window:
+20dc 44864001 bpatch patch01_4 ,mem_patch01 
+20dd 78487c00 disable swfine 
+20de 18423600 copy temp ,stop_watch 
+20df 20402068 call context_search_sniff_window 
+20e0 78547c00 disable user 
+20e1 24628000 nrtn zero 
+20e2 18003600 force 0 ,stop_watch 
+20e3 20207dbc branch enable_user 
+
+calc_slot_offset:
+20e4 4486c001 bpatch patch01_5 ,mem_patch01 
+20e5 37d10200 until null ,halfslot 
+20e6 1b427e00 deposit clke 
+20e7 98000c00 iforce contr 
+20e8 1ff17e00 rshift16 ,pdata ,pdata 
+20e9 9c467200 isub clkn_bt ,loopcnt 
+20ea 1f217203 and_into 3 ,loopcnt 
+20eb 2422a0ee nbranch calc_bt_portion ,zero 
+20ec 18007e00 force 0 ,pdata 
+20ed 202020f2 branch calc_skip_bt 
+
+calc_bt_portion:
+20ee 68490044 fetcht 2 ,mem_param_rt_rthalfslot 
+20ef 18007e00 force 0 ,pdata 
+
+calc_slot_offset_loop:
+20f0 9840fe00 iadd temp ,pdata 
+20f1 c20020f0 loop calc_slot_offset_loop 
+
+calc_skip_bt:
+20f2 98c0fe00 iadd contr ,pdata 
+20f3 1fe6fc0c div pdata ,12 
+20f4 20407d61 call get_div_result 
+20f5 67e1002e store 2 ,mem_slot_offset 
+20f6 20600000 rtn 
+
+calc_clke_offset:
+20f7 44874001 bpatch patch01_6 ,mem_patch01 
+20f8 1b427e00 deposit clke 
+20f9 1b220400 copy clkn ,temp 
+20fa 98467c00 isub temp ,null 
+20fb 7d217e2c nsetflag positive ,44 ,pdata 
+20fc 98460400 isub temp ,temp 
+20fd 6fe10044 fetch 2 ,mem_param_rt_rthalfslot 
+20fe 284c000f isolate0 15 ,temp 
+20ff 2020a105 branch calc_clke_pos ,true 
+2100 18426000 copy temp ,alarm 
+2101 d8410000 arg 0x10000 ,temp 
+2102 6fe10044 fetch 2 ,mem_param_rt_rthalfslot 
+2103 98467e00 isub temp ,pdata 
+2104 9e008400 iadd alarm ,temp 
+
+calc_clke_pos:
+2105 604b0170 storet 6 ,mem_le_clk_offset 
+2106 20600000 rtn 
+
+calc_clke:
+2107 78587c00 disable clknt 
+2108 6fe30170 fetch 6 ,mem_le_clk_offset 
+
+calc_clke2:
+2109 9b20e000 iadd clkn ,alarm 
+210a 1e00e00a increase 10 ,alarm 
+210b 6fe10044 fetch 2 ,mem_param_rt_rthalfslot 
+210c 9e067e00 isub alarm ,pdata 
+210d 2fec000f isolate0 15 ,pdata 
+210e 2020a115 branch calc_clke_pos_adj ,true 
+210f 58010000 setarg 0x10000 
+2110 6b010044 fetchr regd ,2 ,mem_param_rt_rthalfslot 
+2111 9b067e00 isub regd ,pdata 
+2112 9e00e000 iadd alarm ,alarm 
+
+calc_clke_pos2:
+2113 1e023400 copy alarm ,clke 
+2114 20600000 rtn 
+
+calc_clke_pos_adj:
+2115 18007c00 force 0 ,null 
+2116 20202113 branch calc_clke_pos2 
+
+qsetxor:
+2117 1fe97e00 rshift3 pdata ,pdata 
+2118 ea208005 ifetchr rega ,1 ,contw 
+2119 9a22fe00 ixor rega ,pdata 
+211a 2fec0006 isolate0 6 ,pdata 
+211b 2020211e branch qset_p 
+
+qset1_p:
+211c 2fcc0000 isolate0 0 ,null 
+
+qset_start:
+211d d8a08ac2 arg 0x8ac2 ,contw 
+
+qset_p:
+211e efe08005 ifetch 1 ,contw 
+211f f920fe00 qsetflag true ,pdata 
+2120 e7e08005 istore 1 ,contw 
+2121 20600000 rtn 
+
+rx_dcoc_avg:
+2122 2000003c nop 60 
+
+btdma:
+2123 58000f00 setarg mem_dcoc_buf 
+2124 67f10982 store 2 ,0x8982 
+2125 58000ff0 setarg mem_dcoc_buf_end 
+2126 67f10984 store 2 ,0x8984 
+2127 70898109 jam 0x9 ,0x8981 
+2128 70898103 jam 0x3 ,0x8981 
+2129 70898006 jam 0x6 ,0x8980 
+212a 2000003c nop 60 
+212b da200000 arg 0 ,rega 
+212c da400000 arg 0 ,regb 
+212d df200010 arg 16 ,loopcnt 
+212e d8c00f00 arg mem_dcoc_buf ,contr 
+
+rx_dcoc_loop:
+212f efe10006 ifetch 2 ,contr 
+2130 9a20a200 iadd rega ,rega 
+2131 efe10006 ifetch 2 ,contr 
+2132 9a40a400 iadd regb ,regb 
+2133 c200212f loop rx_dcoc_loop 
+2134 20600000 rtn 
+
+rx_dcoc:
+2135 4487c001 bpatch patch01_7 ,mem_patch01 
+2136 20758000 rtn wake 
+2137 20402164 call set_sync_on 
+2138 d8400027 arg 39 ,temp 
+2139 20402173 call set_freq_rx 
+213a 204021aa call rf_rx_enable 
+213b 708a257f jam 0x7f ,0x8a25 
+213c 708a301a jam 0x1a ,0x8a30 
+213d 708a3178 jam 0x78 ,0x8a31 
+213e 708a8fb2 jam 0xb2 ,0x8a8f 
+213f 708ac200 jam 0 ,0x8ac2 
+2140 708ac300 jam 0 ,0x8ac3 
+2141 d8e00006 arg 6 ,queue 
+2142 20402122 call rx_dcoc_avg 
+2143 2a2ffe0d isolate1 13 ,rega 
+2144 2040211d call qset_start 
+2145 2a4ffe0d isolate1 13 ,regb 
+2146 2040211e call qset_p 
+2147 d8e00005 arg 5 ,queue 
+
+rx_dcoc_loop2:
+2148 2040211c call qset1_p 
+2149 2040211e call qset_p 
+214a 20402122 call rx_dcoc_avg 
+214b d8a08ac2 arg 0x8ac2 ,contw 
+214c 1a31fe00 rshift4 rega ,pdata 
+214d 20402117 call qsetxor 
+214e 1a51fe00 rshift4 regb ,pdata 
+214f 20402117 call qsetxor 
+2150 18e08fff increase -1 ,queue 
+2151 20212148 branch rx_dcoc_loop2 ,positive 
+2152 708a8f52 jam 0x52 ,0x8a8f 
+2153 708a3002 jam 2 ,0x8a30 
+2154 70898100 jam 0 ,0x8981 
+
+shutdown_radio:
+2155 44884002 bpatch patch02_0 ,mem_patch02 
+2156 204066e5 call rf_debug_shutdown_radio_line 
+2157 78507c00 disable is_tx 
+2158 7850fc00 disable is_rx 
+2159 58000200 setarg 0x0200 
+215a 67f20a23 store 4 ,0x8a23 
+215b 708a01fa jam 0xfa ,0x8a01 
+215c 2000000c nop 12 
+215d 708a0f00 jam 0 ,0x8a0f 
+215e 708a121a jam 0x1a ,0x8a12 
+215f 708a142b jam 0x2b ,0x8a14 
+2160 18002a08 force 8 ,radio_ctrl 
+2161 18002a00 force 0 ,radio_ctrl 
+2162 70890000 jam 0 ,0x8900 
+2163 202022f3 branch gain_control 
+
+set_sync_on:
+2164 4488c002 bpatch patch02_1 ,mem_patch02 
+2165 708a0f60 jam 0x60 ,0x8a0f 
+2166 708a10aa jam 0xaa ,0x8a10 
+2167 708a127a jam 0x7a ,0x8a12 
+2168 708a2500 jam 0x00 ,0x8a25 
+2169 708a2600 jam 0x00 ,0x8a26 
+216a 2000003c nop 60 
+216b 708a2020 jam 0x20 ,0x8a20 
+216c 708a23f5 jam 0xf5 ,0x8a23 
+216d 708a2412 jam 0x12 ,0x8a24 
+216e 708a2410 jam 0x10 ,0x8a24 
+216f 2000003c nop 60 
+2170 708a1260 jam 0x60 ,0x8a12 
+2171 708a23dd jam 0xdd ,0x8a23 
+2172 20600000 rtn 
+
+set_freq_rx:
+2173 44894002 bpatch patch02_2 ,mem_patch02 
+2174 70890001 jam 0x01 ,0x8900 
+2175 708a239d jam 0x9d ,0x8a23 
+2176 708a2402 jam 0x02 ,0x8a24 
+2177 20000014 nop 20 
+2178 708a7065 jam 0x65 ,0x8a70 
+2179 708a239f jam 0x9f ,0x8a23 
+217a 20402193 call set_lemode 
+217b 60488008 storet 1 ,mem_last_freq 
+217c 18408401 increase 1 ,temp 
+
+aac_res_lookup:
+217d 4489c002 bpatch patch02_3 ,mem_patch02 
+217e 1851fe00 rshift4 temp ,pdata 
+217f d8c04135 arg mem_aac_res_table ,contr 
+2180 98c08c00 iadd contr ,contr 
+2181 efe08006 ifetch 1 ,contr 
+2182 6a308a71 fetchr rega ,1 ,0x8a71 
+2183 1a21220f and_into 0xf ,rega 
+2184 9a21fe00 ior rega ,pdata 
+2185 67f08a71 store 1 ,0x8a71 
+2186 204021d4 call calc_freq 
+2187 20000090 nop 144 
+2188 6fe0c099 fetch 1 ,mem_fcomp_div 
+2189 c00c218b beq xtal_24m ,aac_res_lookup_end 
+218a 20000024 nop 36 
+
+aac_res_lookup_end:
+218b 708a2080 jam 0x80 ,0x8a20 
+218c 20600000 rtn 
+
+set_lemode_2m_16m:
+218d 58008312 setarg 0x8312 
+218e 67f10907 store 2 ,0x8907 
+218f 2020219b branch set_lemode_2m 
+
+set_lemode_1m_16m:
+2190 58004189 setarg 0x4189 
+2191 67f10907 store 2 ,0x8907 
+2192 202021a6 branch set_lemode_1m 
+
+set_lemode:
+2193 448a4002 bpatch patch02_4 ,mem_patch02 
+2194 708a8211 jam 0x11 ,0x8a82 
+2195 708a8d12 jam 0x12 ,0x8a8d 
+2196 708a8e0a jam 0x0a ,0x8a8e 
+2197 6fe0c099 fetch 1 ,mem_fcomp_div 
+2198 c008218d beq xtal_16m ,set_lemode_2m_16m 
+2199 58005762 setarg 0x5762 
+219a 67f10907 store 2 ,0x8907 
+
+set_lemode_2m:
+219b 70890103 jam 3 ,0x8901 
+219c 70893003 jam 3 ,0x8930 
+219d c6168000 rtnmark1 mark_ble_2m 
+219e 70890101 jam 1 ,0x8901 
+219f 708a8207 jam 0x07 ,0x8a82 
+21a0 708a8d44 jam 0x44 ,0x8a8d 
+21a1 708a8e0a jam 0x0a ,0x8a8e 
+21a2 6fe0c099 fetch 1 ,mem_fcomp_div 
+21a3 c0082190 beq xtal_16m ,set_lemode_1m_16m 
+21a4 58002bb1 setarg 0x2bb1 
+21a5 67f10907 store 2 ,0x8907 
+
+set_lemode_1m:
+21a6 c6978000 rtnmark0 mark_ble_lr 
+21a7 70893024 jam 0x24 ,0x8930 
+21a8 70890105 jam 5 ,0x8901 
+21a9 20600000 rtn 
+
+rf_rx_enable:
+21aa 448ac002 bpatch patch02_5 ,mem_patch02 
+21ab 204066df call rf_debug_rx_gpio_high 
+21ac 204021be call rf_rx_agc_set 
+21ad 18002a08 force 8 ,radio_ctrl 
+21ae 18002a00 force 0 ,radio_ctrl 
+21af 580aaada setarg 0x0aaada 
+21b0 67f18a0f store 3 ,0x8a0f 
+21b1 708a2540 jam 0x40 ,0x8a25 
+21b2 708a2610 jam 0x10 ,0x8a26 
+21b3 2000003c nop 60 
+21b4 708a01fb jam 0xfb ,0x8a01 
+21b5 708a25ff jam 0xff ,0x8a25 
+21b6 708a2630 jam 0x30 ,0x8a26 
+21b7 708a16fe jam 0xfe ,0x8a16 
+21b8 20000014 nop 20 
+21b9 708a1000 jam 0x00 ,0x8a10 
+21ba 708a1108 jam 0x08 ,0x8a11 
+21bb 20000078 nop 120 
+21bc 7089000d jam 0xd ,0x8900 
+21bd 20600000 rtn 
+
+rf_rx_agc_set:
+21be 6fe0c143 fetch 1 ,mem_gain_fix 
+21bf c07fa1c5 beq 0xff ,rf_rx_enable_no_soft_agc 
+21c0 d8c04144 arg mem_gain_table ,contr 
+21c1 98c08c00 iadd contr ,contr 
+21c2 efe08006 ifetch 1 ,contr 
+21c3 67f08961 store 1 ,core_rf_rx_gain_fix 
+21c4 70896027 jam 0x27 ,core_rf_rx_agc_ctrl 
+
+rf_rx_enable_no_soft_agc:
+21c5 6848c147 fetcht 1 ,mem_gain_second_agc_en 
+21c6 6ff08960 fetch 1 ,core_rf_rx_agc_ctrl 
+21c7 9841fe00 ior temp ,pdata 
+21c8 67f08960 store 1 ,core_rf_rx_agc_ctrl 
+21c9 20600000 rtn 
+
+set_freq_tx_int:
+21ca 70890003 jam 0x03 ,0x8900 
+21cb 708a2402 jam 0x02 ,0x8a24 
+21cc 20000014 nop 20 
+21cd 708a7065 jam 0x65 ,0x8a70 
+21ce 708a23df jam 0xdf ,0x8a23 
+21cf 20402193 call set_lemode 
+21d0 204021ee call ghp_lookup 
+21d1 60488008 storet 1 ,mem_last_freq 
+21d2 18408402 increase 2 ,temp 
+21d3 2020217d branch aac_res_lookup 
+
+calc_freq:
+21d4 448b4002 bpatch patch02_6 ,mem_patch02 
+21d5 58000960 setarg 2400 
+21d6 9840fe00 iadd temp ,pdata 
+21d7 1fe22200 copy pdata ,rega 
+21d8 6848c099 fetcht 1 ,mem_fcomp_div 
+21d9 18430400 rshift temp ,temp 
+21da 9846fc00 idiv temp 
+21db 20407d64 call wait_div_end 
+21dc 1807fe00 quotient pdata 
+21dd 1fec8e00 rshift8 pdata ,queue 
+21de 60f0890a storer queue ,1 ,0x890a 
+21df 67f08909 store 1 ,0x8909 
+21e0 18077e00 remainder pdata 
+21e1 1ff07e00 lshift16 pdata ,pdata 
+21e2 1fed7e00 lshift8 pdata ,pdata 
+21e3 9846fc00 idiv temp 
+21e4 20407d64 call wait_div_end 
+21e5 1807fe00 quotient pdata 
+21e6 67f1890b store 3 ,0x890b 
+21e7 62308a22 storer rega ,1 ,0x8a22 
+21e8 1a2ca200 rshift8 rega ,rega 
+21e9 62308a21 storer rega ,1 ,0x8a21 
+21ea 708a20a0 jam 0xa0 ,0x8a20 
+21eb 708a20e0 jam 0xe0 ,0x8a20 
+21ec 708a20a0 jam 0xa0 ,0x8a20 
+21ed 20600000 rtn 
+
+ghp_lookup:
+21ee 1840fe02 add temp ,2 ,pdata 
+21ef 1fe97e00 rshift3 pdata ,pdata 
+21f0 1fe17ffe and_into -2 ,pdata 
+21f1 d8c0411d arg mem_ghpc_table ,contr 
+21f2 c596a1f4 bmark0 mark_ble_2m ,ghp_1m 
+21f3 18c08c0c increase 12 ,contr 
+
+ghp_1m:
+21f4 98c08c00 iadd contr ,contr 
+21f5 ea210006 ifetchr rega ,2 ,contr 
+21f6 efe10006 ifetch 2 ,contr 
+21f7 9a267e00 isub rega ,pdata 
+21f8 18408c02 add temp ,2 ,contr 
+21f9 18c10c0f and_into 0xf ,contr 
+21fa 98cffe00 imul32 contr ,pdata 
+21fb 1ff1fe00 rshift4 pdata ,pdata 
+21fc 9a20fe00 iadd rega ,pdata 
+21fd 67f10905 store 2 ,0x8905 
+21fe 20600000 rtn 
+
+set_freq_tx:
+21ff 448bc002 bpatch patch02_7 ,mem_patch02 
+2200 204021ca call set_freq_tx_int 
+2201 20000258 nop 600 
+
+txon:
+2202 448c4003 bpatch patch03_0 ,mem_patch03 
+2203 580aaa7e setarg 0x0aaa7e 
+2204 67f18a0f store 3 ,0x8a0f 
+2205 2000003c nop 60 
+2206 708a2500 jam 0x00 ,0x8a25 
+2207 708a260d jam 0x0d ,0x8a26 
+2208 708a16f6 jam 0xf6 ,0x8a16 
+2209 2000001e nop 30 
+220a 708a151b jam 0x1b ,0x8a15 
+220b 20402212 call set_tx_power 
+220c 20000014 nop 20 
+220d 708a260f jam 0x0f ,0x8a26 
+220e 20000014 nop 20 
+220f 708a10a8 jam 0xa8 ,0x8a10 
+2210 708a1100 jam 0x00 ,0x8a11 
+2211 20600000 rtn 
+
+set_tx_power:
+2212 448cc003 bpatch patch03_1 ,mem_patch03 
+2213 6fe0c141 fetch 1 ,mem_tx_power 
+2214 c000221d beq tx_power_0db ,set_tx_power_0db 
+2215 c001a222 beq tx_power_3db ,set_tx_power_3db 
+2216 c002a227 beq tx_power_5db ,set_tx_power_5db 
+2217 c003a22b beq tx_power_7db ,set_tx_power_7db 
+2218 c005222f beq tx_power_10db ,set_tx_power_10db 
+2219 c041a234 beq tx_power_f3db ,set_tx_power_f3db 
+221a c042a238 beq tx_power_f5db ,set_tx_power_f5db 
+221b c045223c beq tx_power_f10db ,set_tx_power_f10db 
+221c c04a2240 beq tx_power_f20db ,set_tx_power_f20db 
+
+set_tx_power_0db:
+221d 708a1417 jam 0x17 ,0x8a14 
+221e 58251a3f setarg 0x251a3f 
+221f 67f18a60 store 3 ,0x8a60 
+
+set_tx_power_8a63_28:
+2220 708a6328 jam 0x28 ,0x8a63 
+2221 20600000 rtn 
+
+set_tx_power_3db:
+2222 708a1425 jam 0x25 ,0x8a14 
+2223 58a91c2d setarg 0xa91c2d 
+2224 67f18a60 store 3 ,0x8a60 
+
+set_tx_power_8a63_2f:
+2225 708a632f jam 0x2f ,0x8a63 
+2226 20600000 rtn 
+
+set_tx_power_5db:
+2227 708a1425 jam 0x25 ,0x8a14 
+2228 58a91c3f setarg 0xa91c3f 
+2229 67f18a60 store 3 ,0x8a60 
+222a 20202225 branch set_tx_power_8a63_2f 
+
+set_tx_power_7db:
+222b 708a1425 jam 0x25 ,0x8a14 
+222c 58a9383f setarg 0xa9383f 
+222d 67f18a60 store 3 ,0x8a60 
+222e 20202225 branch set_tx_power_8a63_2f 
+
+set_tx_power_10db:
+222f 708a1425 jam 0x25 ,0x8a14 
+2230 58a93f3f setarg 0xa93f3f 
+2231 67f18a60 store 3 ,0x8a60 
+2232 708a631f jam 0x1f ,0x8a63 
+2233 20600000 rtn 
+
+set_tx_power_f3db:
+2234 708a1417 jam 0x17 ,0x8a14 
+2235 58251827 setarg 0x251827 
+2236 67f18a60 store 3 ,0x8a60 
+2237 20202220 branch set_tx_power_8a63_28 
+
+set_tx_power_f5db:
+2238 708a1417 jam 0x17 ,0x8a14 
+2239 5825181c setarg 0x25181c 
+223a 67f18a60 store 3 ,0x8a60 
+223b 20202220 branch set_tx_power_8a63_28 
+
+set_tx_power_f10db:
+223c 708a1417 jam 0x17 ,0x8a14 
+223d 5825180b setarg 0x25180b 
+223e 67f18a60 store 3 ,0x8a60 
+223f 20202220 branch set_tx_power_8a63_28 
+
+set_tx_power_f20db:
+2240 708a1417 jam 0x17 ,0x8a14 
+2241 58251000 setarg 0x251000 
+2242 67f18a60 store 3 ,0x8a60 
+2243 20202220 branch set_tx_power_8a63_28 
+
+initialize_radio:
+2244 70804206 jam clksel_rc ,core_clksel 
+
+initialize_radio_wait:
+2245 6fe1409c fetch 2 ,mem_rf_init_ptr 
+2246 c3072245 bbit0 14 ,initialize_radio_wait 
+2247 98000c00 iforce contr 
+2248 d8408a00 arg 0x8a00 ,temp 
+
+initialize_radio_loop:
+2249 efe08006 ifetch 1 ,contr 
+224a c07fa24f beq 0xff ,initialize_radio_cont 
+224b 98418a00 ior temp ,contw 
+224c efe08006 ifetch 1 ,contr 
+224d e7e08005 istore 1 ,contw 
+224e 20202249 branch initialize_radio_loop 
+
+initialize_radio_cont:
+224f 448d4003 bpatch patch03_2 ,mem_patch03 
+2250 37d98200 until null ,lpo_edge 
+2251 7089460d jam 0x0d ,0x8946 
+2252 70896f10 jam 0x10 ,0x896f 
+2253 708a13cd jam 0xcd ,0x8a13 
+2254 708a0610 jam 0x10 ,0x8a06 
+2255 708a844a jam 0x4a ,0x8a84 
+2256 708a8540 jam 0x40 ,0x8a85 
+2257 708a16fe jam 0xfe ,0x8a16 
+2258 6fe0c44d fetch 1 ,mem_wdt_always_work 
+2259 205a711d call wdt_set_disable ,blank 
+225a 37d98200 until null ,lpo_edge 
+225b 70813b5f jam 0x5f ,0x813b 
+
+initialize_radio_cont_next:
+225c 6fe0c099 fetch 1 ,mem_fcomp_div 
+225d c0082276 beq xtal_16m ,initialize_radio_16m 
+225e 6fe0c44f fetch 1 ,mem_ring_ibias_trim 
+225f 1fe1fe04 or_into 0x04 ,pdata 
+2260 67f08a02 store 1 ,0x8a02 
+2261 70890f01 jam 0x01 ,0x890f 
+2262 708a8024 jam 0x24 ,0x8a80 
+2263 708a8162 jam 0x62 ,0x8a81 
+2264 58e61212 setarg 0xe61212 
+2265 67f18a73 store 3 ,0x8a73 
+
+initialize_radio2:
+2266 4779c03e bpatchx patch3e_3 ,mem_patch3e 
+2267 708a8660 jam 0x60 ,0x8a86 
+2268 708a8b3b jam 0x3b ,0x8a8b 
+2269 2040229d call dpll_on 
+226a 70804300 jam 0 ,core_config 
+226b 70804205 jam clksel_dpll ,core_clksel 
+226c 58557474 setarg 0x557474 
+226d 67f18968 store 3 ,0x8968 
+226e 7089606e jam 0x6e ,0x8960 
+226f 20402135 call rx_dcoc 
+2270 20402287 call rfpll_aac_ghpc 
+2271 20402281 call set_xtal_cap 
+2272 7041480c jam system_clk_12m ,mem_system_clk 
+2273 20406f53 call sadc_calibration 
+2274 204022cb call dpll_ring_ibias_calc 
+2275 20206ac9 branch set_bistfix_save_patchram 
+
+initialize_radio_16m:
+2276 6fe0c44f fetch 1 ,mem_ring_ibias_trim 
+2277 1fe1fe06 or_into 0x06 ,pdata 
+2278 67f08a02 store 1 ,0x8a02 
+2279 70890f00 jam 0x00 ,0x890f 
+227a 708a8023 jam 0x23 ,0x8a80 
+227b 708a81b0 jam 0xb0 ,0x8a81 
+227c 58e40909 setarg 0xe40909 
+227d 67f18a73 store 3 ,0x8a73 
+227e 708a762a jam 0x2a ,0x8a76 
+227f 70890204 jam 0x04 ,0x8902 
+2280 20202266 branch initialize_radio2 
+
+set_xtal_cap:
+2281 20758000 rtn wake 
+2282 37d98200 until null ,lpo_edge 
+2283 6fe0c11c fetch 1 ,mem_xtal_c_sel 
+2284 67f0813a store 1 ,core_xtal_cap 
+2285 37d98200 until null ,lpo_edge 
+2286 20600000 rtn 
+
+rfpll_aac_ghpc:
+2287 448dc003 bpatch patch03_3 ,mem_patch03 
+2288 20758000 rtn wake 
+2289 20402164 call set_sync_on 
+228a 70890003 jam 3 ,0x8900 
+228b 708a7001 jam 0x1 ,0x8a70 
+228c da40411d arg mem_ghpc_table ,regb 
+228d db004135 arg mem_aac_res_table ,regd 
+228e 20402293 call rfpll_aac_ghpc_once 
+228f 7920002d set1 mark_ble_2m ,mark 
+2290 20402293 call rfpll_aac_ghpc_once 
+2291 708a7061 jam 0x61 ,0x8a70 
+2292 20202155 branch shutdown_radio 
+
+rfpll_aac_ghpc_once:
+2293 20402193 call set_lemode 
+2294 df200006 arg 6 ,loopcnt 
+2295 da600000 arg 0 ,regc 
+
+rfpll_cal_loop:
+2296 1a620400 copy regc ,temp 
+2297 204022ab call aac_ghpc 
+2298 1a40a402 increase 2 ,regb 
+2299 1b00b001 increase 1 ,regd 
+229a 1a60a610 increase 16 ,regc 
+229b c2002296 loop rfpll_cal_loop 
+229c 20600000 rtn 
+
+dpll_on:
+229d 6fe0c099 fetch 1 ,mem_fcomp_div 
+229e c00c22a3 beq xtal_24m ,dpll_on_24m 
+229f 6fe0c44f fetch 1 ,mem_ring_ibias_trim 
+22a0 1fe1fe06 or_into 0x06 ,pdata 
+22a1 67f08a02 store 1 ,0x8a02 
+22a2 708a05e0 jam 0xe0 ,0x8a05 
+
+dpll_on_24m:
+22a3 708a00d8 jam 0xd8 ,0x8a00 
+22a4 2000003c nop 60 
+22a5 708a01a0 jam 0xa0 ,0x8a01 
+22a6 708a00df jam 0xdf ,0x8a00 
+22a7 708a01fa jam 0xfa ,0x8a01 
+22a8 20000014 nop 20 
+22a9 708a009f jam 0x9f ,0x8a00 
+22aa 20600000 rtn 
+
+aac_ghpc:
+22ab 448e4003 bpatch patch03_4 ,mem_patch03 
+22ac 708a2030 jam 0x30 ,0x8a20 
+22ad 708a23dd jam 0xdd ,0x8a23 
+22ae 204021d4 call calc_freq 
+
+wait_cal_done:
+22af 6ff08a7c fetch 1 ,0x8a7c 
+22b0 c30022af bbit0 0 ,wait_cal_done 
+22b1 708a7b30 jam 0x30 ,0x8a7b 
+22b2 204022c5 call read_cal_result 
+22b3 98002200 iforce rega 
+22b4 708a7b40 jam 0x40 ,0x8a7b 
+22b5 204022c5 call read_cal_result 
+22b6 9a267e00 isub rega ,pdata 
+22b7 1fef847d mul32 pdata ,125 ,temp 
+22b8 58b00000 setarg 0xb00000 
+22b9 9846fc00 idiv temp 
+22ba 20407d64 call wait_div_end 
+22bb 1807fe00 quotient pdata 
+22bc c596a2be bmark0 mark_ble_2m ,aac_ghpc_1m 
+22bd 1fe3fe00 lshift pdata ,pdata 
+
+aac_ghpc_1m:
+22be e7e10012 istore 2 ,regb 
+22bf 708a7b20 jam 0x20 ,0x8a7b 
+22c0 6ff08a7e fetch 1 ,0x8a7e 
+22c1 1ff27e00 lshift4 pdata ,pdata 
+22c2 e7e08018 istore 1 ,regd 
+22c3 708a7b00 jam 0 ,0x8a7b 
+22c4 20600000 rtn 
+
+read_cal_result:
+22c5 6ff10a7d fetch 2 ,0x8a7d 
+22c6 1ff0fe00 byteswap pdata ,pdata 
+22c7 68588a7c fetcht 1 ,0x8a7c 
+22c8 18500400 lshift16 temp ,temp 
+22c9 9841fe00 ior temp ,pdata 
+22ca 20600000 rtn 
+
+dpll_ring_ibias_calc:
+22cb 448ec003 bpatch patch03_5 ,mem_patch03 
+22cc 20600000 rtn 
+
+save_rssi:
+22cd 448f4003 bpatch patch03_6 ,mem_patch03 
+22ce 6ff089a2 fetch 1 ,modem_nb_pow 
+22cf 2feffe06 isolate1 6 ,pdata 
+22d0 7920fe07 setflag true ,7 ,pdata 
+22d1 67e0c142 store 1 ,mem_modem_rssi 
+22d2 6ff089a3 fetch 1 ,modem_gain 
+22d3 1fe1040f and pdata ,0x0f ,temp 
+22d4 18438400 lshift temp ,temp 
+22d5 1ff1fe00 rshift4 pdata ,pdata 
+22d6 98408400 iadd temp ,temp 
+22d7 184fa203 mul32 temp ,3 ,rega 
+22d8 6fe0c142 fetch 1 ,mem_modem_rssi 
+22d9 204022e3 call byte_sign_extern 
+22da 1fe67e00 sub pdata ,0 ,pdata 
+22db 9a20fe00 iadd rega ,pdata 
+22dc 1fe0fff7 increase -9 ,pdata 
+22dd 1fe17fff and pdata ,0x1ff ,pdata 
+22de 2feffe08 isolate1 8 ,pdata 
+22df 2420a2e1 nbranch save_rssi_store ,true 
+22e0 58000000 setarg 0 
+
+save_rssi_store:
+22e1 67e08035 store 1 ,mem_rssi_hex 
+22e2 202022e8 branch rssi_hex2dec 
+
+byte_sign_extern:
+22e3 2feffe07 isolate1 7 ,pdata 
+22e4 24608000 nrtn true 
+22e5 d840ff00 arg 0xff00 ,temp 
+22e6 9841fe00 ior temp ,pdata 
+22e7 20600000 rtn 
+
+rssi_hex2dec:
+22e8 6fe08035 fetch 1 ,mem_rssi_hex 
+22e9 204022ec call bcd 
+22ea 67e08009 store 1 ,mem_rssi 
+22eb 20600000 rtn 
+
+bcd:
+22ec 1fe17eff and_into 0xff ,pdata 
+22ed 1fe6fc0a div pdata ,10 
+22ee 20407d61 call get_div_result 
+22ef 1ff27e00 lshift4 pdata ,pdata 
+22f0 18070400 remainder temp 
+22f1 9841fe00 ior temp ,pdata 
+22f2 20600000 rtn 
+
+gain_control:
+22f3 448fc003 bpatch patch03_7 ,mem_patch03 
+22f4 6fe0c143 fetch 1 ,mem_gain_fix 
+22f5 c17f8000 rtneq 0xff 
+22f6 242c231a nbranch gain_increase ,sync 
+22f7 6fe0c142 fetch 1 ,mem_modem_rssi 
+22f8 1fe67cf0 sub pdata ,0xf0 ,null 
+22f9 2421231e nbranch gain_descend ,positive 
+22fa 1fe67c7f sub pdata ,0x7f ,null 
+22fb 2021231e branch gain_descend ,positive 
+22fc 6a308961 fetchr rega ,1 ,core_rf_rx_gain_fix 
+22fd 6fe0c143 fetch 1 ,mem_gain_fix 
+22fe c1000000 rtneq 0 
+22ff d8c04144 arg mem_gain_table ,contr 
+2300 98c08c00 iadd contr ,contr 
+2301 efe08006 ifetch 1 ,contr 
+2302 9a267c00 isub rega ,null 
+2303 24628000 nrtn zero 
+2304 18c08dfe increase -2 ,contr 
+2305 e8408006 ifetcht 1 ,contr 
+2306 1851fe00 rshift4 temp ,pdata 
+2307 1a31a400 rshift4 rega ,regb 
+2308 9a462400 isub regb ,regb 
+2309 18417e0f and temp ,0xf ,pdata 
+230a 1a21220f and rega ,0xf ,rega 
+230b 9a262200 isub rega ,rega 
+230c 1a23fe00 lshift rega ,pdata 
+230d 9a40a400 iadd regb ,regb 
+230e 1a4fa403 mul32 regb ,3 ,regb 
+230f 6848c142 fetcht 1 ,mem_modem_rssi 
+2310 18417e80 and temp ,0x80 ,pdata 
+2311 207a0000 rtn blank 
+
+add_negative:
+2312 58000100 setarg 0x100 
+2313 98460400 isub temp ,temp 
+2314 1a427e00 copy regb ,pdata 
+2315 98467e00 isub temp ,pdata 
+2316 20610000 rtn positive 
+2317 1fe17eff and pdata ,0xff ,pdata 
+2318 c17f8000 rtneq 0xff 
+2319 c17f0000 rtneq 0xfe 
+
+gain_increase:
+231a 6fe0c143 fetch 1 ,mem_gain_fix 
+231b c000a323 beq 1 ,set_rx_gain0 
+231c c0012325 beq 2 ,set_rx_gain1 
+231d 20202323 branch set_rx_gain0 
+
+gain_descend:
+231e 6fe0c143 fetch 1 ,mem_gain_fix 
+231f c0002325 beq 0 ,set_rx_gain1 
+2320 c000a321 beq 1 ,set_rx_gain2 
+
+set_rx_gain2:
+2321 70414302 jam 2 ,mem_gain_fix 
+2322 20600000 rtn 
+
+set_rx_gain0:
+2323 70414300 jam 0 ,mem_gain_fix 
+2324 20600000 rtn 
+
+set_rx_gain1:
+2325 70414301 jam 1 ,mem_gain_fix 
+2326 20600000 rtn 
+
+ahead_window:
+2327 1fe20400 copy pdata ,temp 
+2328 44904004 bpatch patch04_0 ,mem_patch04 
+2329 18427e00 copy temp ,pdata 
+232a 20407d2e call clk2bt 
+232b 1c307e00 lshift16 bt_clk ,pdata 
+232c 79207e2c set1 44 ,pdata 
+232d 20407d14 call clk_diff 
+232e 793ffe2c set0 44 ,pdata 
+232f 20402336 call get_clk 
+2330 20407d14 call clk_diff 
+2331 20740000 rtn user 
+2332 20407d21 call clk2rt 
+2333 98003600 iforce stop_watch 
+2334 37c18200 until null ,timeout 
+2335 20600000 rtn 
+
+get_clk:
+2336 1b220400 copy clkn ,temp 
+2337 20748000 rtn master 
+2338 1b420400 copy clke ,temp 
+2339 20600000 rtn 
+
+get_clkbt:
+233a 1c427e00 deposit clkn_bt 
+233b 20748000 rtn master 
+233c 1d027e00 deposit clke_bt 
+233d 20600000 rtn 
+
+assert:
+233e 4490c004 bpatch patch04_1 ,mem_patch04 
+233f 2020233e branch assert 
+
+sleep:
+2340 207a0000 rtn blank 
+2341 1fe37e00 rshift pdata ,pdata 
+2342 1fe0fffd increase -3 ,pdata 
+
+sleep_loop:
+2343 1fe0ffff increase -1 ,pdata 
+2344 2422a343 nbranch sleep_loop ,zero 
+2345 18007e00 force 0 ,pdata 
+2346 20600000 rtn 
+
+init_param:
+2347 58000e43 setarg param_tx_setup 
+2348 67e10036 store 2 ,mem_param_tx_setup 
+2349 58000600 setarg param_rf_setup 
+234a 67e10038 store 2 ,mem_param_rf_setup 
+234b 58000600 setarg param_conn_access 
+234c 67e1003a store 2 ,mem_param_conn_access 
+234d 58000d00 setarg param_rx_setup 
+234e 67e10040 store 2 ,mem_param_rx_setup 
+234f 580003bb setarg param_clke_cal 
+2350 67e1003c store 2 ,mem_param_clke_cal 
+2351 58000500 setarg param_pll_setup 
+2352 67e1003e store 2 ,mem_param_pll_setup 
+2353 580007d0 setarg param_dpll_start_delay 
+2354 67e10042 store 2 ,mem_param_dpll_start_delay 
+2355 58000ea6 setarg param_rt_rthalfslot 
+2356 67e10044 store 2 ,mem_param_rt_rthalfslot 
+2357 580001e0 setarg param_clke_cal_le_1m 
+2358 67e10046 store 2 ,mem_param_clke_cal_le_1m 
+2359 58000120 setarg param_clke_cal_le_2m 
+235a 67e10048 store 2 ,mem_param_clke_cal_le_2m 
+235b 5800011a setarg param_clke_cal_le_coded 
+235c 67e1004a store 2 ,mem_param_clke_cal_le_coded 
+235d 44914004 bpatch patch04_2 ,mem_patch04 
+235e 20758000 rtn wake 
+235f 58000017 setarg att_default_mtu 
+2360 67e142e5 store 2 ,mem_le_remote_mtu 
+2361 7041698b jam param_t_ifs_150us + param_sync_time_difference ,mem_le_tx_ifs_defference 
+2362 58000d00 setarg mem_ble_tx_buff0 
+2363 67e14343 store 2 ,mem_ble_l2cap_tx_buff0_ptr 
+2364 58000060 setarg mem_ble_l2cap_tx_buff_size 
+2365 67e14345 store 2 ,mem_ble_l2cap_tx_buff_size_ptr 
+2366 1c437e00 rshift clkn_bt ,pdata 
+2367 67e24095 store 4 ,mem_last_clkn 
+2368 20600000 rtn 
+
+lpmstate:
+2369 5800ee21 setarg 0xee21 
+236a 67f10050 store 2 ,core_clkoff 
+236b 6e12011c fetchr alarm ,4 ,core_gpio_in 
+236c 6ff08132 fetch 1 ,core_lpm_isogate 
+236d c302a383 bbit0 gpio_latch ,power_up 
+236e 7835fc00 enable wake 
+236f c2822377 bbit1 cold_wake ,lpmwake 
+2370 7855fc00 disable wake 
+2371 1ce27e00 deposit auxcnt 
+2372 243a2377 nbranch lpmwake ,blank 
+2373 6ff08142 fetch 1 ,core_lpm_sysctl 
+2374 c2822377 bbit1 reload_code ,lpmwake 
+2375 d85fffff arg param_hibernate_clks ,temp 
+2376 2020241d branch lpm_enter_sleep 
+
+lpmwake:
+2377 20402387 call lpm_poweron_retmem 
+2378 2055a3c9 call lpm_load_context ,wake 
+2379 37d98200 until null ,lpo_edge 
+237a 6ff08132 fetch 1 ,core_lpm_isogate 
+237b 793ffe05 set0 gpio_latch ,pdata 
+237c 67f08132 store 1 ,core_lpm_isogate 
+237d 37d98200 until null ,lpo_edge 
+237e 2435a384 nbranch boot_load ,wake 
+237f 20406aaf call set_bistfix_wake 
+2380 6602067b storer alarm ,4 ,mem_saved_gpio_in 
+2381 70800608 jam otp_key_lock ,core_misc_ctrl 
+2382 20600000 rtn 
+
+power_up:
+2383 20402387 call lpm_poweron_retmem 
+
+boot_load:
+2384 20406a20 call loadcode 
+2385 6602067b storer alarm ,4 ,mem_saved_gpio_in 
+2386 20600000 rtn 
+
+lpm_poweron_retmem:
+2387 37d98200 until null ,lpo_edge 
+2388 6ff08133 fetch 1 ,core_lpm_ldosel 
+2389 1fe17e88 and_into 0x88 ,pdata 
+238a 67f08133 store 1 ,core_lpm_ldosel 
+238b 37d98200 until null ,lpo_edge 
+238c 6ff08132 fetch 1 ,core_lpm_isogate 
+238d 1fe1fe0f or_into 0xf ,pdata 
+238e 67f08132 store 1 ,core_lpm_isogate 
+238f 37d98200 until null ,lpo_edge 
+2390 79207e07 set1 isogate ,pdata 
+2391 67f08132 store 1 ,core_lpm_isogate 
+2392 37d98200 until null ,lpo_edge 
+2393 79207e06 set1 retmem_cs ,pdata 
+2394 67f08132 store 1 ,core_lpm_isogate 
+2395 37d98200 until null ,lpo_edge 
+2396 20600000 rtn 
+
+xtal_fast_wake:
+2397 37d98200 until null ,lpo_edge 
+2398 70813d76 jam 0x76 ,core_xtal_ib 
+2399 37d98200 until null ,lpo_edge 
+239a 70813a37 jam 0x37 ,core_xtal_cap 
+239b 20600000 rtn 
+
+lpm_write_lock:
+239c 6fe0c3cf fetch 1 ,mem_device_option 
+239d 1ff27e00 lshift4 pdata ,pdata 
+239e 67f08143 store 1 ,core_ucode_flag 
+239f 37d98200 until null ,lpo_edge 
+23a0 6fe0c3d0 fetch 1 ,mem_peripheral_lock_flag 
+23a1 79207e05 set1 rom_lock_bit ,pdata 
+23a2 79207e06 set1 option_lock ,pdata 
+23a3 67f08144 store 1 ,core_peripheral_lock 
+23a4 202023c4 branch lpm_write_wait 
+
+lpm_write_ice_disable:
+23a5 6ff08142 fetch 1 ,core_lpm_sysctl 
+23a6 793ffe03 set0 ice_mode ,pdata 
+23a7 67f08142 store 1 ,core_lpm_sysctl 
+23a8 20600000 rtn 
+
+lpm_write_ice_enable:
+23a9 6ff08142 fetch 1 ,core_lpm_sysctl 
+23aa 79207e03 set1 ice_mode ,pdata 
+23ab 67f08142 store 1 ,core_lpm_sysctl 
+23ac 20600000 rtn 
+
+lpm_preon_counter:
+23ad 6fe1c0c3 fetch 3 ,mem_lpm_xtalcnt 
+23ae d8a0813e arg core_lpm_xtalcnt ,contw 
+
+lpm_write_3bytes:
+23af df200003 arg 3 ,loopcnt 
+23b0 202023b3 branch lpm_write_loop 
+
+lpm_write_mpu_s0:
+23b1 d8a08145 arg core_mpu_s0_saddr ,contw 
+
+lpm_write_dword:
+23b2 df200004 arg 4 ,loopcnt 
+
+lpm_write_loop:
+23b3 37d98200 until null ,lpo_edge 
+23b4 e7e08005 istore 1 ,contw 
+23b5 1fecfe00 rshift8 pdata ,pdata 
+23b6 c20023b3 loop lpm_write_loop 
+23b7 202023c4 branch lpm_write_wait 
+
+lpm_write_mpu_s1:
+23b8 d8a08149 arg core_mpu_s1_saddr ,contw 
+23b9 202023b2 branch lpm_write_dword 
+
+lpm_disable_exen_output:
+23ba 6ff08133 fetch 1 ,core_lpm_ldosel 
+23bb 793ffe03 set0 3 ,pdata 
+23bc 67f08133 store 1 ,core_lpm_ldosel 
+23bd 20600000 rtn 
+
+lpm_disable_io_dozed:
+23be 6fe0c0cb fetch 1 ,mem_lpm_hv_sel 
+23bf 207a0000 rtn blank 
+23c0 793ffe04 set0 lpm_doze_en_bit ,pdata 
+23c1 202023c3 branch lpm_write_sel_hv 
+
+lpm_save_sel_hv:
+23c2 67e0c0cb store 1 ,mem_lpm_hv_sel 
+
+lpm_write_sel_hv:
+23c3 67f08135 store 1 ,core_io_doze_en 
+
+lpm_write_wait:
+23c4 37d98200 until null ,lpo_edge 
+23c5 37d98200 until null ,lpo_edge 
+23c6 20600000 rtn 
+
+lpm_write_io_vsel:
+23c7 67f08134 store 1 ,core_io_vsel 
+23c8 202023c4 branch lpm_write_wait 
+
+lpm_load_context:
+23c9 204023be call lpm_disable_io_dozed 
+23ca 6fe0c0ef fetch 1 ,mem_saved_spidctrl 
+23cb 67f08080 store 1 ,core_spid_ctrl 
+23cc d8c040cc arg mem_saved_gpio ,contr 
+23cd d8a08070 arg core_gpio_conf ,contw 
+23ce 20407c91 call memcpy16 
+23cf d8a080d4 arg core_gpio_conf_hi ,contw 
+23d0 20407c8b call memcpy8 
+23d1 680440e7 fetchr mark ,8 ,mem_saved_mark 
+23d2 d8c0814d arg core_gpio_wakeup_cfg ,contr 
+23d3 d8a00016 arg mem_gpio_wakeup_cfg ,contw 
+23d4 df20000c arg 12 ,loopcnt 
+23d5 20407cdc call memcpy 
+23d6 20206aff branch load_ucode 
+
+lpm_save_context:
+23d7 600440e7 storer mark ,8 ,mem_saved_mark 
+23d8 d8c08070 arg core_gpio_conf ,contr 
+23d9 d8a040cc arg mem_saved_gpio ,contw 
+23da 20407c91 call memcpy16 
+23db d8c080d4 arg core_gpio_conf_hi ,contr 
+23dc 20407c8b call memcpy8 
+23dd 6ff08080 fetch 1 ,core_spid_ctrl 
+23de 67e0c0ef store 1 ,mem_saved_spidctrl 
+23df 18422400 copy temp ,regb 
+23e0 202023e1 branch lpm_write_gpio_wakeup 
+
+lpm_write_gpio_wakeup:
+23e1 df20000c arg 12 ,loopcnt 
+23e2 da200016 arg mem_gpio_wakeup_cfg ,rega 
+23e3 da60814d arg core_gpio_wakeup_cfg ,regc 
+23e4 37d98200 until null ,lpo_edge 
+
+lpm_write_gpio_loop:
+23e5 efe08011 ifetch 1 ,rega 
+23e6 e8408013 ifetcht 1 ,regc 
+23e7 98467c00 isub temp ,null 
+23e8 2022a3eb branch lpm_write_gpio_loop_next ,zero 
+23e9 e7e08013 istore 1 ,regc 
+23ea 37d98200 until null ,lpo_edge 
+
+lpm_write_gpio_loop_next:
+23eb 1a20a201 increase 1 ,rega 
+23ec 1a60a601 increase 1 ,regc 
+23ed c20023e5 loop lpm_write_gpio_loop 
+23ee 1a420400 copy regb ,temp 
+23ef 20600000 rtn 
+
+lpo_calibration:
+23f0 4491c004 bpatch patch04_3 ,mem_patch04 
+23f1 6ff080cb fetch 1 ,core_ccnt_bit 
+23f2 243a23f7 nbranch lpo_cal_inited ,blank 
+23f3 6fe1c0bd fetch 3 ,mem_clks_per_lpo 
+23f4 247a0000 nrtn blank 
+23f5 7080cb0c jam 0xc ,core_ccnt_bit 
+23f6 70800680 jam ccnt_start ,core_misc_ctrl 
+
+lpo_cal_inited:
+23f7 6ff08129 fetch 1 ,core_perf_status 
+23f8 c4008000 rtnbit0 1 
+23f9 6ff1815b fetch 3 ,core_clk_counter 
+23fa 67e1c0bd store 3 ,mem_clks_per_lpo 
+23fb 20600000 rtn 
+
+lpm_doze:
+23fc 6fe0c0ca fetch 1 ,mem_lpm_sysctl 
+23fd 79207e04 set1 reload_code ,pdata 
+23fe 67e0c0ca store 1 ,mem_lpm_sysctl 
+
+lpm_hibernate:
+23ff 44924004 bpatch patch04_4 ,mem_patch04 
+2400 d85fffff arg param_hibernate_clks ,temp 
+2401 6fe0c0a7 fetch 1 ,mem_lpm_hibernate_switch 
+2402 67e0c0c8 store 1 ,mem_lpm_isogate_final 
+2403 6fe0c0ca fetch 1 ,mem_lpm_sysctl 
+2404 67f08142 store 1 ,core_lpm_sysctl 
+2405 37d98200 until null ,lpo_edge 
+
+lpm_sleep:
+2406 4492c004 bpatch patch04_5 ,mem_patch04 
+2407 6fe143f2 fetch 2 ,mem_cb_before_lpm_sleep 
+2408 20407d7b call callback_func 
+
+lpm_sleep_skip_cb_function:
+2409 6fe240ad fetch 4 ,mem_sleep_counter_all 
+240a 9840fe00 iadd temp ,pdata 
+240b 67e240ad store 4 ,mem_sleep_counter_all 
+240c 204023d7 call lpm_save_context 
+240d 6fe0c0cb fetch 1 ,mem_lpm_hv_sel 
+240e 79207e04 set1 lpm_doze_en_bit ,pdata 
+240f 204023c3 call lpm_write_sel_hv 
+2410 2455a3ad ncall lpm_preon_counter ,wake 
+2411 37d98200 until null ,lpo_edge 
+2412 632340b1 storer clkn ,6 ,mem_sleep_clkn 
+2413 20406abf call set_bistfix_save_xram 
+2414 6fe1c0c6 fetch 3 ,mem_lpm_isogate 
+2415 6a20c0c9 fetchr rega ,1 ,mem_lpm_ldo_sel 
+2416 df200003 arg 3 ,loopcnt 
+
+lpm_sleep_loop:
+2417 37d98200 until null ,lpo_edge 
+2418 67f08132 store 1 ,core_lpm_isogate 
+2419 1fecfe00 rshift8 pdata ,pdata 
+241a c2002417 loop lpm_sleep_loop 
+241b 37d98200 until null ,lpo_edge 
+241c 62308133 storer rega ,1 ,core_lpm_ldosel 
+
+lpm_enter_sleep:
+241d 37d98200 until null ,lpo_edge 
+241e 605a004c storet 4 ,core_lpm_reg 
+241f 70800501 jam lpmreg_sel_counter ,core_lpm_wr 
+2420 37df8200 until null ,never 
+
+lpm_recover_clk:
+2421 44934004 bpatch patch04_6 ,mem_patch04 
+2422 58000000 setarg 0 
+2423 1ce27c00 copy auxcnt ,null 
+2424 2022a42c branch lpm_recover_timeout ,zero 
+2425 6ff0813e fetch 1 ,core_lpm_xtalcnt 
+2426 6858813f fetcht 1 ,core_lpm_buckcnt 
+2427 98467c00 isub temp ,null 
+2428 2021242a branch lpm_recover_xtal ,positive 
+2429 18427e00 deposit temp 
+
+lpm_recover_xtal:
+242a 9ce67e00 isub auxcnt ,pdata 
+242b 1fe0fe01 increase 1 ,pdata 
+
+lpm_recover_timeout:
+242c 1fe0fe08 increase 8 ,pdata 
+242d 37d98200 until null ,lpo_edge 
+242e 9e20fe00 iadd lpo_time ,pdata 
+242f 684a40a9 fetcht 4 ,mem_sleep_counter 
+2430 9840fe00 iadd temp ,pdata 
+2431 6849c0bd fetcht 3 ,mem_clks_per_lpo 
+2432 984ffe00 imul32 temp ,pdata 
+2433 1fecfe00 rshift8 pdata ,pdata 
+2434 1ff1fe00 rshift4 pdata ,pdata 
+2435 1fe0fe6e increase param_lpm_fix ,pdata 
+2436 68490044 fetcht 2 ,mem_param_rt_rthalfslot 
+2437 9846fc00 idiv temp 
+2438 20407d61 call get_div_result 
+2439 1ff07e00 lshift16 pdata ,pdata 
+243a 18070400 remainder temp 
+243b 9841fe00 ior temp ,pdata 
+243c 684b40b1 fetcht 6 ,mem_sleep_clkn 
+243d 20407d07 call clk_add 
+243e 18423200 copy temp ,clkn 
+243f 6fe34048 fetch 6 ,mem_context + coffset_clk_offset 
+2440 20402109 call calc_clke2 
+2441 1b427e00 deposit clke 
+2442 67e3064e store 6 ,mem_pdatatemp 
+2443 1ce27e00 deposit auxcnt 
+2444 e7e08005 istore 1 ,contw 
+2445 6ff0811d fetch 1 ,core_gpio_in1 
+2446 1fe1fef0 or_into 0xf0 ,pdata 
+2447 e7e08005 istore 1 ,contw 
+2448 20600000 rtn 
+
+lpm_adjust_clk:
+2449 4493c004 bpatch patch04_7 ,mem_patch04 
+244a c584a460 bmark0 mark_context ,lpm_clear_counter 
+244b 684a40ad fetcht 4 ,mem_sleep_counter_all 
+244c dfe00600 arg 0x600 ,pdata 
+244d 98467c00 isub temp ,null 
+244e 20610000 rtn positive 
+244f 18422200 copy temp ,rega 
+2450 684b000f fetcht 6 ,mem_sync_clke 
+2451 1d627e00 deposit rege 
+2452 20407d12 call clk_diff_rt 
+2453 1a220400 copy rega ,temp 
+2454 1fed7e00 lshift8 pdata ,pdata 
+2455 1ff27e00 lshift4 pdata ,pdata 
+2456 9846fc00 idiv temp 
+2457 20407d61 call get_div_result 
+2458 d84000c8 arg param_lpm_adjmax ,temp 
+2459 20407d6e call ceiling 
+245a 67e0800e store 1 ,mem_lpm_adjust 
+245b 2434245d nbranch lpm_adjust_positive ,user 
+245c 1fe67e00 sub pdata ,0 ,pdata 
+
+lpm_adjust_positive:
+245d 6849c0bd fetcht 3 ,mem_clks_per_lpo 
+245e 9840fe00 iadd temp ,pdata 
+245f 67e1c0bd store 3 ,mem_clks_per_lpo 
+
+lpm_clear_counter:
+2460 58000000 setarg 0 
+2461 67e240ad store 4 ,mem_sleep_counter_all 
+2462 20600000 rtn 
+
+lpm_dispatch:
+2463 44944005 bpatch patch05_0 ,mem_patch05 
+2464 204023f0 call lpo_calibration 
+2465 6fe1c0bd fetch 3 ,mem_clks_per_lpo 
+2466 207a0000 rtn blank 
+2467 6fe0c094 fetch 1 ,mem_lpm_mode 
+2468 207a0000 rtn blank 
+2469 6fe0c483 fetch 1 ,mem_secure_connections_enable 
+246a 203a246d branch lpm_dispatch_next ,blank 
+246b 6fe0c485 fetch 1 ,mem_sc_local_key_invalid 
+246c 207a0000 rtn blank 
+
+lpm_dispatch_next:
+246d 6fe0c484 fetch 1 ,mem_sc_calc 
+246e 247a0000 nrtn blank 
+246f da6020af arg context_check_a_wack ,regc 
+2470 20402069 call context_search 
+2471 20628000 rtn zero 
+2472 204024c6 call lpm_check_wake_lock 
+2473 247a0000 nrtn blank 
+2474 2040205d call context_check_idle 
+2475 2422a494 nbranch lpm_dispatch_unconn ,zero 
+2476 20758000 rtn wake 
+2477 4494c005 bpatch patch05_1 ,mem_patch05 
+2478 68488015 fetcht 1 ,mem_lpm_current_mult 
+2479 6fe14042 fetch 2 ,mem_context + coffset_tsniff 
+247a 984ffe00 imul32 temp ,pdata 
+247b 18518400 rshift4 temp ,temp 
+247c 184b0400 rshift2 temp ,temp 
+247d 98467e00 isub temp ,pdata 
+247e 684a4044 fetcht 4 ,mem_context + coffset_sniff_anchor 
+247f 9840fe00 iadd temp ,pdata 
+2480 6848c0a6 fetcht 1 ,mem_lpm_overhead 
+2481 98467e00 isub temp ,pdata 
+2482 1ff06000 lshift16 pdata ,alarm 
+2483 6fe1404e fetch 2 ,mem_context + coffset_rx_window 
+2484 1fe37e00 rshift pdata ,pdata 
+2485 20407d2e call clk2bt 
+2486 1e027e00 deposit alarm 
+2487 20407d14 call clk_diff 
+2488 1b420400 copy clke ,temp 
+2489 20407d12 call clk_diff_rt 
+248a 20740000 rtn user 
+
+lpm_dispatch_sleep:
+248b 20407d27 call clk2lpo 
+
+lpm_dispatch_lpo:
+248c 44954005 bpatch patch05_2 ,mem_patch05 
+248d 6fe0c0c3 fetch 1 ,mem_lpm_xtalcnt 
+248e 98467c00 isub temp ,null 
+248f 20212460 branch lpm_clear_counter ,positive 
+2490 604a40a9 storet 4 ,mem_sleep_counter 
+2491 2040373a call app_will_enter_lpm 
+2492 684a40a9 fetcht 4 ,mem_sleep_counter 
+2493 20202406 branch lpm_sleep 
+
+lpm_dispatch_unconn:
+2494 4495c005 bpatch patch05_3 ,mem_patch05 
+2495 6fe0c38c fetch 1 ,mem_le_adv_enable 
+2496 243a2498 nbranch lpm_unconn_cont ,blank 
+2497 20600000 rtn 
+
+lpm_unconn_cont:
+2498 6fe140a4 fetch 2 ,mem_lpm_interval 
+2499 207a0000 rtn blank 
+
+lpm_sleep_btclk:
+249a 6848c0a6 fetcht 1 ,mem_lpm_overhead 
+249b 98467e00 isub temp ,pdata 
+249c d8401d4c arg 7500 ,temp 
+249d 984ffe00 imul32 temp ,pdata 
+249e 2020248b branch lpm_dispatch_sleep 
+
+lpm_mult_wait_timeout:
+249f 6fe143ee fetch 2 ,mem_cb_bt_set_mult 
+24a0 20407d7b call callback_func 
+24a1 243a24b7 nbranch lpm_mult_short ,blank 
+24a2 70001500 jam 0 ,mem_lpm_current_mult 
+24a3 c586a4b7 bmark0 mark_lpm_mult_enable ,lpm_mult_short 
+24a4 6fe0c0c2 fetch 1 ,mem_lpm_mult_cnt 
+24a5 203a24bb branch lpm_mult_long ,blank 
+24a6 1fe0ffff increase -1 ,pdata 
+24a7 67e0c0c2 store 1 ,mem_lpm_mult_cnt 
+24a8 20600000 rtn 
+
+lpm_match:
+24a9 7040a800 jam 0 ,mem_sniff_unint_lost 
+24aa 6fe1c0b7 fetch 3 ,mem_sniff_rcv 
+24ab 1fe0fe01 increase 1 ,pdata 
+24ac 67e1c0b7 store 3 ,mem_sniff_rcv 
+24ad 20600000 rtn 
+
+lpm_lost:
+24ae 44964005 bpatch patch05_4 ,mem_patch05 
+24af 70001500 jam 0 ,mem_lpm_current_mult 
+24b0 6fe1c0ba fetch 3 ,mem_sniff_lost 
+24b1 1fe0fe01 increase 1 ,pdata 
+24b2 67e1c0ba store 3 ,mem_sniff_lost 
+24b3 6fe0c0a8 fetch 1 ,mem_sniff_unint_lost 
+24b4 1fe0fe01 increase 1 ,pdata 
+24b5 67e0c0a8 store 1 ,mem_sniff_unint_lost 
+24b6 20600000 rtn 
+
+lpm_mult_short:
+24b7 70001500 jam 0 ,mem_lpm_current_mult 
+24b8 6fe0c0c1 fetch 1 ,mem_lpm_mult_timeout 
+24b9 67e0c0c2 store 1 ,mem_lpm_mult_cnt 
+24ba 20600000 rtn 
+
+lpm_mult_long:
+24bb 6848c0c0 fetcht 1 ,mem_lpm_mult 
+24bc 60488015 storet 1 ,mem_lpm_current_mult 
+24bd 20600000 rtn 
+
+lpm_get_wake_lock:
+24be 6fe140a2 fetch 2 ,mem_lpm_wake_lock 
+24bf f9207e00 qset1 pdata 
+24c0 67e140a2 store 2 ,mem_lpm_wake_lock 
+24c1 20600000 rtn 
+
+lpm_put_wake_lock:
+24c2 6fe140a2 fetch 2 ,mem_lpm_wake_lock 
+24c3 f93ffe00 qset0 pdata 
+24c4 67e140a2 store 2 ,mem_lpm_wake_lock 
+24c5 20600000 rtn 
+
+lpm_check_wake_lock:
+24c6 4496c005 bpatch patch05_5 ,mem_patch05 
+24c7 20403738 call app_check_wake_lock 
+24c8 6fe140a2 fetch 2 ,mem_lpm_wake_lock 
+24c9 1fe22200 copy pdata ,rega 
+24ca 6fe1c462 fetch 3 ,mem_tx_fifo3 
+24cb 7d3a2201 nsetflag blank ,wake_lock_ble_tx ,rega 
+24cc 6fe444ea fetch util_fifo_len ,mem_ipc_fifo_bt2c51 
+24cd 7d3a220f nsetflag blank ,wake_lock_ipc_bt2c51 ,rega 
+24ce 6fe444f2 fetch util_fifo_len ,mem_ipc_fifo_c512bt 
+24cf 7d3a220e nsetflag blank ,wake_lock_ipc_c512bt ,rega 
+24d0 6fe0c114 fetch 1 ,mem_hci_cmd 
+24d1 7d3a2208 nsetflag blank ,wake_lock_cmd ,rega 
+24d2 6fe0c3cf fetch 1 ,mem_device_option 
+24d3 2fe1fe0a compare dvc_op_module ,pdata ,0xff 
+24d4 2040a4d8 call lpm_uart_wake_lock ,true 
+24d5 1a227e00 copy rega ,pdata 
+24d6 67e140a2 store 2 ,mem_lpm_wake_lock 
+24d7 20600000 rtn 
+
+lpm_uart_wake_lock:
+24d8 6ff10112 fetch 2 ,core_uart_rxitems 
+24d9 7d3a2206 nsetflag blank ,wake_lock_uart_rx ,rega 
+24da 6ff1010e fetch 2 ,core_uart_txitems 
+24db 7d3a2205 nsetflag blank ,wake_lock_uart_tx ,rega 
+24dc 20600000 rtn 
+
+le_init_conn:
+24dd 471dc027 bpatchx patch27_3 ,mem_patch27 
+24de 7855fc00 disable wake 
+24df 70017e01 jam 1 ,mem_le_conn_handle 
+24e0 70016803 jam 3 ,mem_le_state 
+24e1 70017f01 jam 1 ,mem_le_arq 
+24e2 5fffffff setarg -1 
+24e3 67e10182 store 2 ,mem_le_event_count 
+24e4 18007e00 force 0 ,pdata 
+24e5 67e08180 store 1 ,mem_le_ch 
+24e6 67e0818b store 1 ,mem_le_op 
+24e7 67e1c0b7 store 3 ,mem_sniff_rcv 
+24e8 67e1c0ba store 3 ,mem_sniff_lost 
+24e9 2040283a call le_clear_enc 
+24ea 70416b01 jam 1 ,mem_le_txheader 
+24eb 70416c00 jam 0 ,mem_le_txlen 
+24ec 70019d01 jam fun_rx_ll_1m_phy ,mem_le_rx_phy 
+24ed 70019e01 jam fun_tx_ll_1m_phy ,mem_le_tx_phy 
+24ee 70439a00 jam 0 ,mem_le_l2cap_att_states 
+24ef 20202914 branch le_supervision_flush 
+
+le_init_master:
+24f0 471e4027 bpatchx patch27_4 ,mem_patch27 
+24f1 7834fc00 enable master 
+24f2 70016903 jam lemode_master ,mem_le_mode 
+24f3 70439c01 jam 1 ,mem_le_att_handle 
+24f4 70068f01 jam 1 ,mem_le_search_handle_start 
+24f5 5800ffff setarg 0xffff 
+24f6 67e10691 store 2 ,mem_le_search_handle_end 
+24f7 18007e00 force 0 ,pdata 
+24f8 67e2c46c store 5 ,mem_ccm_pcnt_rx 
+24f9 79207e27 set1 le_ccm_directionbit ,pdata 
+24fa 67e2c467 store 5 ,mem_ccm_pcnt_tx 
+24fb 202024dd branch le_init_conn 
+
+le_init_slave:
+24fc 471ec027 bpatchx patch27_5 ,mem_patch27 
+24fd 7854fc00 disable master 
+24fe 58000017 setarg 0x17 
+24ff 67e142e5 store 2 ,mem_le_remote_mtu 
+2500 1fe0fe04 increase 4 ,pdata 
+2501 67e143bc store 2 ,mem_remote_rx_max_octets 
+2502 70016901 jam lemode_slave ,mem_le_mode 
+2503 70438c00 jam 0 ,mem_le_adv_enable 
+2504 70001500 jam 0 ,mem_lpm_current_mult 
+2505 20402567 call le_clear_pairing_state 
+2506 6fe10196 fetch 2 ,mem_le_superto 
+2507 67e142f7 store 2 ,mem_le_init_superto 
+2508 6fe1016a fetch 2 ,mem_le_tsniff 
+2509 1feffe05 mul32 pdata ,5 ,pdata 
+250a 1ff1fe00 rshift4 pdata ,pdata 
+250b 67e10196 store 2 ,mem_le_superto 
+250c 202024dd branch le_init_conn 
+
+le_conn_dispatch:
+250d 471f4027 bpatchx patch27_6 ,mem_patch27 
+250e 2040258d call le_enable 
+250f 6fe08168 fetch 1 ,mem_le_state 
+2510 2feffe04 isolate1 lestate_encryption ,pdata 
+2511 79208032 setflag true ,mark_ble_encryption ,mark 
+2512 20403727 call app_process_ble 
+2513 6fe08169 fetch 1 ,mem_le_mode 
+2514 c280a516 bbit1 mode_master ,le_master_dispatch 
+2515 20202527 branch le_slave_dispatch 
+
+le_master_dispatch:
+2516 471fc027 bpatchx patch27_7 ,mem_patch27 
+2517 7834fc00 enable master 
+2518 2040290a call le_supervision_update 
+2519 20212524 branch le_master_disconn ,positive 
+251a 204025d0 call le_setup 
+251b 2040284f call le_prepare_tx 
+251c 7856fc00 disable match 
+251d 2040270e call le_transmit_receive_sifs 
+251e 24768000 nrtn match 
+251f 6fe08005 fetch 1 ,mem_le_conn_rcv 
+2520 1fe0fe01 increase 1 ,pdata 
+2521 67e08005 store 1 ,mem_le_conn_rcv 
+2522 20402801 call le_acknowledge 
+2523 20202525 branch le_disable_master 
+
+le_master_disconn:
+2524 2040255b call le_disconnect 
+
+le_disable_master:
+2525 7854fc00 disable master 
+2526 20600000 rtn 
+
+le_slave_dispatch:
+2527 47204028 bpatchx patch28_0 ,mem_patch28 
+2528 70434200 jam 0 ,mem_le_md_count 
+2529 793f8030 set0 mark_ble_crc_fail ,mark 
+252a 20407540 call sp_calc_sequence_256 
+252b 20402fd3 call le_secure_connect_sm 
+252c 78577c00 disable attempt 
+252d 2040290a call le_supervision_update 
+252e 2021255b branch le_slave_disconn ,positive 
+252f 6fe0819d fetch 1 ,mem_le_rx_phy 
+2530 20402579 call le_enable_phy_by_pdata 
+2531 204025d0 call le_setup 
+2532 20402627 call le_receive_slave 
+2533 242c254d nbranch le_slave_unsync ,sync 
+2534 2040256c call le_got_first_packet 
+2535 2036a538 branch le_slave_match ,match 
+2536 c5182538 bmark1 mark_ble_crc_fail ,le_slave_crc_fail 
+2537 20202547 branch le_slave_cont 
+
+le_slave_crc_fail:
+
+le_slave_match:
+2538 4720c028 bpatchx patch28_1 ,mem_patch28 
+2539 6fe0c342 fetch 1 ,mem_le_md_count 
+253a 1fe0fe01 pincrease 1 
+253b 67e0c342 store 1 ,mem_le_md_count 
+253c c0062547 beq le_md_max_count ,le_slave_cont 
+253d 20402801 call le_acknowledge 
+253e 2040284f call le_prepare_tx 
+253f 6fe0819e fetch 1 ,mem_le_tx_phy 
+2540 20402579 call le_enable_phy_by_pdata 
+2541 2040271f call le_transmit 
+2542 204028b2 call le_parse 
+2543 6fe143ea fetch 2 ,mem_cb_ble_transmit 
+2544 20407d7b call callback_func 
+2545 20402551 call le_check_md 
+2546 20342555 branch le_slave_more_data ,user 
+
+le_slave_cont:
+2547 47214028 bpatchx patch28_2 ,mem_patch28 
+2548 20402f98 call le_pairing_sm 
+2549 20402f8f call le_check_paring_time 
+254a 20407831 call check_51cmd 
+254b 6fe0818b fetch 1 ,mem_le_op 
+254c c281a55b bbit1 op_disconn ,le_slave_disconn 
+
+le_slave_unsync:
+254d 4721c028 bpatchx patch28_3 ,mem_patch28 
+254e 204020cf call end_of_packet 
+254f 20402984 call le_lpm_set_mult 
+2550 202020f7 branch calc_clke_offset 
+
+le_check_md:
+2551 c5157dbc bmark1 mark_ble_rx_md ,enable_user 
+2552 c514fdbc bmark1 mark_ble_tx_md ,enable_user 
+2553 c5187dbc bmark1 mark_ble_crc_fail ,enable_user 
+2554 20207dbe branch disable_user 
+
+le_slave_more_data:
+2555 47224028 bpatchx patch28_4 ,mem_patch28 
+2556 78377c00 enable attempt 
+2557 20402712 call le_transmit_receive_sifs_notx 
+2558 2036a538 branch le_slave_match ,match 
+2559 c5182538 bmark1 mark_ble_crc_fail ,le_slave_crc_fail 
+255a 20202547 branch le_slave_cont 
+
+le_slave_disconn:
+
+le_disconnect:
+255b 4722c028 bpatchx patch28_5 ,mem_patch28 
+255c 20402562 call le_clear_connection_info 
+255d 20403777 call app_disconn_reason_collect_ble 
+255e 20402567 call le_clear_pairing_state 
+255f 20402fe1 call le_sc_state_clear 
+2560 70064d15 jam bt_evt_le_disconnected ,mem_fifo_temp 
+2561 20207819 branch ui_ipc_send_event 
+
+le_clear_connection_info:
+2562 d8a04458 arg mem_used_map ,contw 
+2563 20407c9b call memset0_16 
+2564 70017e00 jam 0 ,mem_le_conn_handle 
+2565 70016900 jam lemode_idle ,mem_le_mode 
+2566 70016800 jam 0 ,mem_le_state 
+
+le_clear_pairing_state:
+2567 47234028 bpatchx patch28_6 ,mem_patch28 
+2568 7042ff00 jam flag_le_enc_null ,mem_le_enc_state 
+2569 7042fe00 jam flag_le_pairing_null ,mem_le_pairing_state 
+256a 20407440 call sp_clear_flags 
+256b 20600000 rtn 
+
+le_got_first_packet:
+256c 4723c028 bpatchx patch28_7 ,mem_patch28 
+256d 6fe08005 fetch 1 ,mem_le_conn_rcv 
+256e 1fe0fe01 increase 1 ,pdata 
+256f 67e08005 store 1 ,mem_le_conn_rcv 
+2570 6fe08168 fetch 1 ,mem_le_state 
+2571 c3818000 rtnbit1 lestate_got_first_packet 
+2572 79207e03 set1 lestate_got_first_packet ,pdata 
+2573 67e08168 store 1 ,mem_le_state 
+2574 6fe142f7 fetch 2 ,mem_le_init_superto 
+2575 67e10196 store 2 ,mem_le_superto 
+2576 58000000 setarg 0 
+2577 67e2431f store 4 ,mem_le_transmit_window 
+2578 20600000 rtn 
+
+le_enable_phy_by_pdata:
+2579 1fe20400 copy pdata ,temp 
+257a 47244029 bpatchx patch29_0 ,mem_patch29 
+
+le_enable_phy_by_pdata1:
+257b 18427e00 copy temp ,pdata 
+257c c280258d bbit1 bit_le_1m_phy ,le_enable 
+257d c280a582 bbit1 bit_le_2m_phy ,le_enable_2m 
+257e c301258d bbit0 bit_le_coded_phy ,le_enable 
+257f c283a589 bbit1 bit_le_coded_phy_s8 ,le_enable_coded_s8 
+2580 c2812585 bbit1 bit_le_coded_phy_s2 ,le_enable_coded_s2 
+2581 2020258d branch le_enable 
+
+le_enable_2m:
+2582 793f802f set0 mark_ble_lr ,mark 
+2583 7920002d set1 mark_ble_2m ,mark 
+2584 20600000 rtn 
+
+le_enable_coded_s2:
+
+le_enable_coded:
+2585 793f802d set0 mark_ble_2m ,mark 
+2586 7920002f set1 mark_ble_lr ,mark 
+2587 793f802e set0 mark_ble_lr_s8 ,mark 
+2588 20600000 rtn 
+
+le_enable_coded_s8:
+2589 793f802d set0 mark_ble_2m ,mark 
+258a 7920002f set1 mark_ble_lr ,mark 
+258b 7920002e set1 mark_ble_lr_s8 ,mark 
+258c 20600000 rtn 
+
+le_enable:
+258d 4724c029 bpatchx patch29_1 ,mem_patch29 
+258e 793f802d set0 mark_ble_2m ,mark 
+258f 793f802f set0 mark_ble_lr ,mark 
+2590 20600000 rtn 
+
+le_disable:
+2591 47254029 bpatchx patch29_2 ,mem_patch29 
+2592 793f8032 set0 mark_ble_encryption ,mark 
+2593 70890101 jam 0x01 ,0x8901 
+2594 70892080 jam 0x80 ,0x8920 
+2595 70893003 jam 0x03 ,0x8930 
+2596 20600000 rtn 
+
+le_prep:
+2597 4725c029 bpatchx patch29_3 ,mem_patch29 
+2598 7844fc00 disable enable_crc 
+2599 7843fc00 disable enable_white 
+259a 6fe18190 fetch 3 ,mem_le_crcinit 
+259b 98001e00 iforce crc24_init 
+259c 6fe08007 fetch 1 ,mem_le_ch_mapped 
+
+le_prep_next:
+259d 1fed8400 reverse pdata ,temp 
+259e 79200401 set1 1 ,temp 
+259f 18431c00 rshift temp ,white_init 
+25a0 20600000 rtn 
+
+le_rx_setfreq:
+25a1 204025aa call le_setfreq 
+
+le_rf_rx_enable:
+25a2 20402173 call set_freq_rx 
+25a3 6fe1003e fetch 2 ,mem_param_pll_setup 
+25a4 20402340 call sleep 
+25a5 202021aa branch rf_rx_enable 
+
+le_tx_setfreq:
+25a6 2036a202 branch txon ,match 
+25a7 c5182202 bmark1 mark_ble_crc_fail ,txon 
+
+le_tx_setfreq0:
+25a8 204025aa call le_setfreq 
+25a9 202021ff branch set_freq_tx 
+
+le_setfreq:
+25aa 47264029 bpatchx patch29_4 ,mem_patch29 
+25ab 20402164 call set_sync_on 
+25ac 6fe0c33d fetch 1 ,mem_le_testtype 
+25ad 243a25bd nbranch le_ctf_test ,blank 
+25ae 6fe08007 fetch 1 ,mem_le_ch_mapped 
+25af 1fe67c24 sub pdata ,36 ,null 
+25b0 202125b7 branch le_ctf_normal ,positive 
+25b1 18000400 force 0 ,temp 
+25b2 c1128000 rtneq 37 
+25b3 18000418 force 24 ,temp 
+25b4 c1130000 rtneq 38 
+25b5 1800044e force 78 ,temp 
+25b6 20600000 rtn 
+
+le_ctf_normal:
+25b7 1fe67c0a sub pdata ,10 ,null 
+25b8 202125ba branch le_ctf_low ,positive 
+25b9 1fe0fe01 increase 1 ,pdata 
+
+le_ctf_low:
+25ba 1fe3fe00 lshift pdata ,pdata 
+25bb 1fe08402 add pdata ,2 ,temp 
+25bc 20600000 rtn 
+
+le_ctf_test:
+25bd 6fe08007 fetch 1 ,mem_le_ch_mapped 
+25be 1fe38400 lshift pdata ,temp 
+25bf 20600000 rtn 
+
+le_sca_map:
+25c0 d84001f4 arg 500 ,temp 
+25c1 207a0000 rtn blank 
+25c2 d84000fa arg 250 ,temp 
+25c3 c1008000 rtneq 1 
+25c4 d8400096 arg 150 ,temp 
+25c5 c1010000 rtneq 2 
+25c6 d8400064 arg 100 ,temp 
+25c7 c1018000 rtneq 3 
+25c8 d840004b arg 75 ,temp 
+25c9 c1020000 rtneq 4 
+25ca d8400032 arg 50 ,temp 
+25cb c1028000 rtneq 5 
+25cc d8400028 arg 40 ,temp 
+25cd c1030000 rtneq 6 
+25ce d8400014 arg 20 ,temp 
+25cf 20600000 rtn 
+
+le_setup:
+25d0 4726c029 bpatchx patch29_5 ,mem_patch29 
+25d1 78287c00 enable swfine 
+25d2 6fe2018c fetch 4 ,mem_le_access 
+25d3 98001200 iforce access 
+25d4 20402605 call le_map_channel 
+25d5 58000200 setarg 0x200 
+25d6 2034a5d9 branch le_setup_master ,master 
+25d7 6fe10176 fetch 2 ,mem_le_receive_window 
+25d8 1fe37e00 rshift pdata ,pdata 
+
+le_setup_master:
+25d9 6849003e fetcht 2 ,mem_param_pll_setup 
+25da 9840fe00 iadd temp ,pdata 
+25db 20402327 call ahead_window 
+25dc 1b427e00 deposit clke 
+25dd 20600000 rtn 
+
+le_context_nextevent:
+25de 47274029 bpatchx patch29_6 ,mem_patch29 
+25df 20407c53 call push_stack_rega_b_c 
+25e0 67210679 storer loopcnt ,2 ,mem_loopcnt 
+25e1 1a208c01 add rega ,coffset_mode ,contr 
+25e2 efe08006 ifetch 1 ,contr 
+25e3 c4000000 rtnbit0 mode_le 
+25e4 1a208a1a add rega ,coffset_le_event_cnt ,contw 
+25e5 efe10005 ifetch 2 ,contw 
+25e6 1fe0fe01 increase 1 ,pdata 
+25e7 e7e10005 istore 2 ,contw 
+25e8 20402780 call le_update_param 
+25e9 204027a2 call le_update_channel_map 
+25ea 204027ab call le_update_phy 
+25eb 204025ef call le_context_nexthop 
+25ec 20407c62 call pop_stack_rega_b_c 
+25ed 6f210679 fetchr loopcnt ,2 ,mem_loopcnt 
+25ee 20600000 rtn 
+
+le_context_nexthop:
+25ef 1a208c19 add rega ,coffset_le_hop ,contr 
+25f0 efe08006 ifetch 1 ,contr 
+25f1 1a208a18 add rega ,coffset_le_ch ,contw 
+25f2 e8408005 ifetcht 1 ,contw 
+25f3 9840fe00 iadd temp ,pdata 
+25f4 1fe67c24 sub pdata ,36 ,null 
+25f5 202125f7 branch le_nexthop_nowrap ,positive 
+25f6 1fe0ffdb increase -37 ,pdata 
+
+le_nexthop_nowrap:
+25f7 e7e08005 istore 1 ,contw 
+25f8 20600000 rtn 
+
+le_calc_channel_map:
+25f9 1a208c30 add rega ,coffset_le_channel_map ,contr 
+25fa efe28006 ifetch 5 ,contr 
+25fb 18000400 force 0 ,temp 
+25fc 18007225 force 37 ,loopcnt 
+
+le_count_channels_loop:
+25fd c30025ff bbit0 0 ,le_count_channels_notused 
+25fe 18408401 increase 1 ,temp 
+
+le_count_channels_notused:
+25ff 1fe37e00 rshift pdata ,pdata 
+2600 c20025fd loop le_count_channels_loop 
+2601 1840ffff add temp ,-1 ,pdata 
+2602 1a208a22 add rega ,coffset_le_channels ,contw 
+2603 e7e08005 istore 1 ,contw 
+2604 20600000 rtn 
+
+le_map_channel:
+2605 4727c029 bpatchx patch29_7 ,mem_patch29 
+2606 6fe08180 fetch 1 ,mem_le_ch 
+2607 98000e00 iforce queue 
+2608 684a8198 fetcht 5 ,mem_le_channel_map 
+2609 a84fffff qisolate1 temp 
+260a 2020a61a branch le_map_channel_end ,true 
+
+le_map_channel_next:
+260b 6fe0818a fetch 1 ,mem_le_channels 
+260c 98e67e00 isub queue ,pdata 
+260d 20212610 branch le_map_channel_cont ,positive 
+260e 1fe60fff sub pdata ,-1 ,queue 
+260f 2020260b branch le_map_channel_next 
+
+le_map_channel_cont:
+2610 18e27200 copy queue ,loopcnt 
+2611 18000e00 force 0 ,queue 
+
+le_map_channel_loop:
+2612 a84fffff qisolate1 temp 
+2613 2020a615 branch le_map_channel_skip ,true 
+2614 1f20f201 increase 1 ,loopcnt 
+
+le_map_channel_skip:
+2615 1f227e00 deposit loopcnt 
+2616 203a261a branch le_map_channel_end ,blank 
+2617 18e08e01 increase 1 ,queue 
+2618 1f20f3ff increase -1 ,loopcnt 
+2619 20202612 branch le_map_channel_loop 
+
+le_map_channel_end:
+261a 18e27e00 deposit queue 
+261b 67e08007 store 1 ,mem_le_ch_mapped 
+261c 20600000 rtn 
+
+le_wait_tx:
+261d 2034a620 branch le_wait_master ,master 
+261e 37c18200 until null ,timeout 
+261f 20600000 rtn 
+
+le_wait_master:
+2620 d9600ea0 arg 0xea0 ,timeup 
+2621 34730200 until clkn_rt ,meet 
+2622 20600000 rtn 
+
+le_receive_adv:
+2623 78487c00 disable swfine 
+2624 6fe1434a fetch 2 ,mem_le_scan_window 
+2625 1fe21600 copy pdata ,timeup 
+2626 2020262d branch le_receive_packet 
+
+le_receive_slave:
+2627 4728402a bpatchx patch2a_0 ,mem_patch2a 
+2628 20402692 call le_dec_init 
+2629 78287c00 enable swfine 
+262a 6fe10176 fetch 2 ,mem_le_receive_window 
+262b 684a431f fetcht 4 ,mem_le_transmit_window 
+262c 98409600 iadd temp ,timeup 
+
+le_receive_packet:
+262d 204025a1 call le_rx_setfreq 
+
+le_receive_rxon:
+262e 4728c02a bpatchx patch2a_1 ,mem_patch2a 
+262f 20402597 call le_prep 
+2630 c597a635 bmark0 mark_ble_lr ,le_receive_nolr 
+2631 783cfc00 pulse dewhiten_code_calc 
+2632 2000001e nop 30 
+2633 20402597 call le_prep 
+2634 19699600 lshift3 timeup ,timeup 
+
+le_receive_nolr:
+2635 7856fc00 disable match 
+2636 7826fc00 enable decode_fec0 
+2637 7830fc00 enable is_rx 
+2638 78507c00 disable is_tx 
+2639 19623600 copy timeup ,stop_watch 
+263a 37c18400 correlate null ,timeout 
+263b 2037263e branch le_receive_on_attempt ,attempt 
+263c 1b420400 copy clke ,temp 
+263d 604b000f storet 6 ,mem_sync_clke 
+
+le_receive_on_attempt:
+263e 242c26ce nbranch le_unsync_end ,sync 
+263f 78287c00 enable swfine 
+2640 6fe0c169 fetch 1 ,mem_le_tx_ifs_defference 
+2641 d8404e20 arg param_20ms_init ,temp 
+2642 98408400 iadd temp ,temp 
+2643 6fe0c148 fetch 1 ,mem_system_clk 
+2644 984fb600 imul32 temp ,stop_watch 
+2645 204066e7 call rf_debug_rx_sync_line 
+2646 2037264b branch le_receive_skip ,attempt 
+2647 204026d3 call calc_clke_all_modem 
+2648 6fe08168 fetch 1 ,mem_le_state 
+2649 c301a64b bbit0 lestate_got_first_packet ,le_receive_skip 
+264a 2055a449 call lpm_adjust_clk ,wake 
+
+le_receive_skip:
+264b 204022cd call save_rssi 
+264c 7823fc00 enable enable_white 
+264d 7824fc00 enable enable_crc 
+264e 09800008 parse demod ,bucket ,8 
+264f 19897e00 rshift3 pwindow ,pdata 
+2650 67e0804c store 1 ,mem_le_rxbuf_data_header 
+2651 09800008 parse demod ,bucket ,8 
+2652 19897e00 rshift3 pwindow ,pdata 
+2653 67e0804d store 1 ,mem_le_rxbuf_data_length 
+2654 1fe27200 copy pdata ,loopcnt 
+2655 2022a671 branch le_rx_nopayload ,zero 
+2656 c519265c bmark1 mark_ble_encryption ,le_rx_dec 
+
+le_rx_loop:
+2657 09800008 parse demod ,bucket ,8 
+2658 19897e00 rshift3 pwindow ,pdata 
+2659 e7e08005 istore 1 ,contw 
+265a c2002657 loop le_rx_loop 
+265b 20202671 branch le_rx_nopayload 
+
+le_rx_dec:
+265c 18a22400 copy contw ,regb 
+265d 4729402a bpatchx patch2a_2 ,mem_patch2a 
+265e 204027fa call le_check_retransmit 
+265f 6a20804d fetchr rega ,1 ,mem_le_rxbuf_data_length 
+2660 1a20a3fc increase -4 ,rega 
+2661 242126ce nbranch le_crc_fail_consecutive ,positive 
+2662 20402697 call le_dec_start 
+2663 1a420a00 copy regb ,contw 
+2664 d8400000 arg 0 ,temp 
+2665 6f20804d fetchr loopcnt ,1 ,mem_le_rxbuf_data_length 
+2666 1f20f3fc increase -4 ,loopcnt 
+2667 2022a66f branch le_rx_dec_loop_end ,zero 
+
+le_rx_dec_loop:
+2668 09800008 parse demod ,bucket ,8 
+2669 19897e00 rshift3 pwindow ,pdata 
+266a e7e08005 istore 1 ,contw 
+266b 18408401 increase 1 ,temp 
+266c 18417c0f and temp ,0xf ,null 
+266d 2042a6b5 call le_dec ,zero 
+266e c2002668 loop le_rx_dec_loop 
+
+le_rx_dec_loop_end:
+266f 204026bd call le_dec_end 
+2670 1a420a00 copy regb ,contw 
+
+le_rx_nopayload:
+2671 4729c02a bpatchx patch2a_3 ,mem_patch2a 
+2672 09800018 parse demod ,bucket ,24 
+2673 1fef7e00 rshift32 pdata ,pdata 
+2674 1ff17e00 rshift16 pdata ,pdata 
+2675 e7e18005 istore 3 ,contw 
+2676 78287c00 enable swfine 
+2677 204026eb call le_set_until_tx_timer 
+2678 202326c9 branch le_crc_fail ,crc_failed 
+2679 c5992683 bmark0 mark_ble_encryption ,le_rx_match 
+267a 6fe0804d fetch 1 ,mem_le_rxbuf_data_length 
+267b 203a2683 branch le_rx_match ,blank 
+267c 1fe0fffc increase -4 ,pdata 
+267d 67e0804d store 1 ,mem_le_rxbuf_data_length 
+267e 204072b9 call wait_ccm_done 
+267f 6ff08108 fetch 1 ,core_misc_status 
+2680 c303a6ce bbit0 7 ,le_crc_fail_consecutive 
+2681 1800700c force regidx_result ,regext_index 
+2682 65e20154 storer regext ,4 ,mem_le_peer_mic 
+
+le_rx_match:
+2683 204066e6 call rf_debug_rx_crc_line 
+2684 7836fc00 enable match 
+2685 793f8030 set0 mark_ble_crc_fail ,mark 
+
+le_crc_fail_tx:
+2686 472a402a bpatchx patch2a_4 ,mem_patch2a 
+2687 204072bb call ccm_ctrl_clr 
+2688 6fe0819d fetch 1 ,mem_le_rx_phy 
+2689 7d3e7e07 nsetflag ble_coded_info ,bit_le_coded_phy_s8 ,pdata 
+268a 67e0819d store 1 ,mem_le_rx_phy 
+268b 2040268d call le_match_set_sync_on 
+268c 2020268f branch le_match_set_txfreq 
+
+le_match_set_sync_on:
+268d 7846fc00 disable decode_fec0 
+268e 20202164 branch set_sync_on 
+
+le_match_set_txfreq:
+268f 472ac02a bpatchx patch2a_5 ,mem_patch2a 
+2690 68488008 fetcht 1 ,mem_last_freq 
+2691 202021ca branch set_freq_tx_int 
+
+le_dec_init:
+2692 c6990000 rtnmark0 mark_ble_encryption 
+2693 20407356 call load_sk 
+2694 1800700c force regidx_result ,regext_index 
+2695 2040735e call aes_clear 
+2696 2020735d branch aes_clear_data 
+
+le_dec_start:
+2697 472b402a bpatchx patch2a_6 ,mem_patch2a 
+2698 70806c00 jam 0 ,core_ccm_aad0 
+2699 70806d01 jam 1 ,core_ccm_aad1 
+269a 6fe0804c fetch 1 ,mem_le_rxbuf_data_header 
+269b 1fe17e03 and_into 0x3 ,pdata 
+269c 67f0806e store 1 ,core_ccm_aad2 
+269d 5800004e setarg mem_le_rxbuf_data_payload 
+269e 67f10068 store 2 ,core_ccm_input_playload_addr 
+269f 67f1006a store 2 ,core_ccm_output_playload_addr 
+26a0 6a20804d fetchr rega ,1 ,mem_le_rxbuf_data_length 
+26a1 1a20a3fc increase -4 ,rega 
+26a2 684ac46c fetcht 5 ,mem_ccm_pcnt_rx 
+26a3 280ffe0f isolate1 mark_old_packet ,mark 
+26a4 2040a6ab call le_pcnt_rx_sub1 ,true 
+26a5 20407253 call ccm_b0 
+26a6 58000000 setarg 0 
+26a7 67f100c0 store 2 ,core_ccm_inptr 
+26a8 70800a06 jam 6 ,core_ccm_ctrl 
+26a9 70800a07 jam 7 ,core_ccm_ctrl 
+26aa 20600000 rtn 
+
+le_pcnt_rx_sub1:
+26ab 18467c00 sub temp ,0 ,null 
+26ac 2022a6b0 branch le_pcnt_rx_sub1_0 ,zero 
+26ad 184085ff increase -1 ,temp 
+26ae 79200427 set1 le_ccm_directionbit ,temp 
+26af 20600000 rtn 
+
+le_pcnt_rx_sub1_0:
+26b0 58ffffff setarg 0xffffff 
+26b1 1ff07e00 lshift16 pdata ,pdata 
+26b2 d840ffff arg 0xffff ,temp 
+26b3 98418400 ior temp ,temp 
+26b4 20600000 rtn 
+
+le_dec:
+26b5 18a22400 copy contw ,regb 
+26b6 6fe0804d fetch 1 ,mem_le_rxbuf_data_length 
+26b7 1fe0fffc increase -4 ,pdata 
+26b8 98467c00 isub temp ,null 
+26b9 20628000 rtn zero 
+26ba 605900c0 storet 2 ,core_ccm_inptr 
+26bb 1a420a00 copy regb ,contw 
+26bc 20600000 rtn 
+
+le_dec_end:
+26bd 09800020 parse demod ,bucket ,32 
+26be 1fef7e00 rshift32 pdata ,pdata 
+26bf 1fecfe00 rshift8 pdata ,pdata 
+26c0 e7e20005 istore 4 ,contw 
+26c1 18a22400 copy contw ,regb 
+26c2 18007000 force regidx_data ,regext_index 
+26c3 1fe25e00 copy pdata ,regext 
+26c4 605900c0 storet 2 ,core_ccm_inptr 
+26c5 20600000 rtn 
+
+le_retransmit_end_of_packet:
+26c6 204026eb call le_set_until_tx_timer 
+26c7 204020cf call end_of_packet 
+26c8 20202683 branch le_rx_match 
+
+le_crc_fail:
+26c9 204066e8 call rf_debug_rx_crc_fail_line 
+26ca c50826ce bmark1 mark_adv ,le_crc_fail_consecutive 
+26cb c51826ce bmark1 mark_ble_crc_fail ,le_crc_fail_consecutive 
+26cc 79200030 set1 mark_ble_crc_fail ,mark 
+26cd 20202686 branch le_crc_fail_tx 
+
+le_unsync_end:
+
+le_crc_fail_consecutive:
+26ce 793f8030 set0 mark_ble_crc_fail ,mark 
+26cf 202026d0 branch le_end_of_packet 
+
+le_end_of_packet:
+26d0 472bc02a bpatchx patch2a_7 ,mem_patch2a 
+26d1 204072bb call ccm_ctrl_clr 
+26d2 202020cf branch end_of_packet 
+
+calc_clke_all_modem:
+26d3 684b000f fetcht 6 ,mem_sync_clke 
+26d4 1b427e00 copy clke ,pdata 
+26d5 20407d14 call clk_diff 
+26d6 1fe20400 copy pdata ,temp 
+26d7 204026dd call calc_clke_all_modem_1 
+26d8 1b425600 copy clke ,rege 
+26d9 1d227e00 copy clke_rt ,pdata 
+26da 9840fe00 iadd temp ,pdata 
+26db 1fe25200 copy pdata ,clke_rt 
+26dc 20600000 rtn 
+
+calc_clke_all_modem_1:
+26dd c517a6e3 bmark1 mark_ble_lr ,calc_clke_modem_coded 
+26de c516a6e7 bmark1 mark_ble_2m ,calc_clke_modem_2m 
+26df 6fe10046 fetch 2 ,mem_param_clke_cal_le_1m 
+26e0 1fe25200 copy pdata ,clke_rt 
+26e1 1c225000 copy bt_clk ,clke_bt 
+26e2 20600000 rtn 
+
+calc_clke_modem_coded:
+26e3 6fe1004a fetch 2 ,mem_param_clke_cal_le_coded 
+26e4 1fe25200 copy pdata ,clke_rt 
+26e5 1c20d001 add bt_clk ,1 ,clke_bt 
+26e6 20600000 rtn 
+
+calc_clke_modem_2m:
+26e7 6fe10048 fetch 2 ,mem_param_clke_cal_le_2m 
+26e8 1fe25200 copy pdata ,clke_rt 
+26e9 1c225000 copy bt_clk ,clke_bt 
+26ea 20600000 rtn 
+
+le_set_until_tx_timer:
+26eb 6fe0804d fetch 1 ,mem_le_rxbuf_data_length 
+26ec 1fe08405 add pdata ,5 ,temp 
+26ed 18498400 lshift3 temp ,temp 
+26ee 6fe0819d fetch 1 ,mem_le_rx_phy 
+26ef c517a6f2 bmark1 mark_ble_lr ,le_set_until_tx_timer_rx_lr 
+26f0 c28026f4 bbit1 bit_le_1m_phy ,le_set_until_tx_timer_rx_1m 
+26f1 c280a6f5 bbit1 bit_le_2m_phy ,le_set_until_tx_timer_rx_2m 
+
+le_set_until_tx_timer_rx_lr:
+26f2 203e26f7 branch le_set_until_tx_timer_rx_coded_s2 ,ble_coded_info 
+26f3 202026fa branch le_set_until_tx_timer_rx_coded_s8 
+
+le_set_until_tx_timer_rx_1m:
+26f4 202026ff branch le_calc_stop_watch 
+
+le_set_until_tx_timer_rx_2m:
+26f5 18430400 rshift temp ,temp 
+26f6 202026ff branch le_calc_stop_watch 
+
+le_set_until_tx_timer_rx_coded_s2:
+26f7 18408403 add temp ,3 ,temp 
+26f8 18438400 lshift temp ,temp 
+26f9 202026fc branch le_set_until_tx_timer_rx_coded 
+
+le_set_until_tx_timer_rx_coded_s8:
+26fa 18408403 add temp ,3 ,temp 
+26fb 18498400 lshift3 temp ,temp 
+
+le_set_until_tx_timer_rx_coded:
+26fc 58000028 setarg param_coded_c1_term1_time_40us 
+26fd 98408400 iadd temp ,temp 
+26fe 202026ff branch le_calc_stop_watch 
+
+le_calc_stop_watch:
+26ff 6fe0c148 fetch 1 ,mem_system_clk 
+2700 984f8400 imul32 temp ,temp 
+2701 da204e20 arg param_20ms_init ,rega 
+2702 9a2ffe00 imul32 rega ,pdata 
+2703 98460400 isub temp ,temp 
+2704 1b627e00 copy stop_watch ,pdata 
+2705 98463600 isub temp ,stop_watch 
+2706 20600000 rtn 
+
+le_transmit_receive_sifs_without_change_mode:
+2707 2040271f call le_transmit 
+2708 68488008 fetcht 1 ,mem_last_freq 
+2709 20402173 call set_freq_rx 
+270a 204021aa call rf_rx_enable 
+270b 78287c00 enable swfine 
+270c d960157c arg 5500 ,timeup 
+270d 2020262e branch le_receive_rxon 
+
+le_transmit_receive_sifs:
+270e 472c402b bpatchx patch2b_0 ,mem_patch2b 
+270f 6fe0819e fetch 1 ,mem_le_tx_phy 
+2710 20402579 call le_enable_phy_by_pdata 
+2711 2040271f call le_transmit 
+
+le_transmit_receive_sifs_notx:
+2712 6fe0819d fetch 1 ,mem_le_rx_phy 
+2713 20402579 call le_enable_phy_by_pdata 
+2714 68488008 fetcht 1 ,mem_last_freq 
+2715 20402173 call set_freq_rx 
+2716 204021aa call rf_rx_enable 
+2717 78287c00 enable swfine 
+2718 d960157c arg 5500 ,timeup 
+2719 c597a62e bmark0 mark_ble_lr ,le_receive_rxon 
+271a d9602134 arg 8500 ,timeup 
+271b 2020262e branch le_receive_rxon 
+
+le_transmit_norx:
+271c 472cc02b bpatchx patch2b_1 ,mem_patch2b 
+271d 2040271f call le_transmit 
+271e 202020cf branch end_of_packet 
+
+le_transmit:
+271f 472d402b bpatchx patch2b_2 ,mem_patch2b 
+2720 20402597 call le_prep 
+2721 204025a6 call le_tx_setfreq 
+2722 204066ed call rf_debug_tx_on_line 
+2723 79202a00 set1 txgfsk ,radio_ctrl 
+2724 782efc00 enable encode_fec0 
+2725 78307c00 enable is_tx 
+2726 7850fc00 disable is_rx 
+2727 2040261d call le_wait_tx 
+2728 785d7c00 disable lr_s2en 
+2729 c517a762 bmark1 mark_ble_lr ,le_transmit_lr 
+272a c516a774 bmark1 mark_ble_2m ,le_transmit_2m 
+272b 19317e00 rshift16 access ,pdata 
+272c 1fecfe00 rshift8 pdata ,pdata 
+272d 1ff1fe00 rshift4 pdata ,pdata 
+272e 08008628 inject mod ,40 
+
+le_transmit_packet:
+272f 7823fc00 enable enable_white 
+2730 7824fc00 enable enable_crc 
+2731 472dc02b bpatchx patch2b_3 ,mem_patch2b 
+2732 6fe0c16b fetch 1 ,mem_le_txheader 
+2733 08008608 inject mod ,8 
+2734 efe08006 ifetch 1 ,contr 
+2735 1fe27200 copy pdata ,loopcnt 
+2736 08008608 inject mod ,8 
+2737 1f267c00 sub loopcnt ,0 ,null 
+2738 2022a740 branch le_tr_nopayload ,zero 
+2739 6ff0800a fetch 1 ,core_ccm_ctrl 
+273a 203a273c branch le_transmit_packet_not_enc ,blank 
+273b c5192757 bmark1 mark_ble_encryption ,le_transmit_packet_enc 
+
+le_transmit_packet_not_enc:
+273c d8c0416d arg mem_le_txpayload ,contr 
+
+le_tr_loop:
+273d efe08006 ifetch 1 ,contr 
+273e 08008608 inject mod ,8 
+273f c200273d loop le_tr_loop 
+
+le_tr_nopayload:
+2740 78247c00 enable enable_parity 
+2741 08008618 inject mod ,24 
+2742 78447c00 disable enable_parity 
+2743 c597a747 bmark0 mark_ble_lr ,le_transmit_skip 
+2744 7843fc00 disable enable_white 
+2745 58000000 setarg 0 
+2746 08008603 inject mod ,3 
+
+le_transmit_skip:
+2747 37d38200 until null ,tx_clear 
+2748 20000064 nop 100 
+2749 472e402b bpatchx patch2b_4 ,mem_patch2b 
+274a 784efc00 disable encode_fec0 
+274b 785c7c00 disable encode_fec3 
+274c 20402164 call set_sync_on 
+274d 204066eb call rf_debug_tx_off_line 
+
+le_check_start_pause_enc:
+274e 6fe0c16b fetch 1 ,mem_le_txheader 
+274f 1fe17e03 and pdata ,llid_le_ll ,pdata 
+2750 c1818000 rtnne llid_le_ll 
+2751 6fe0c2ff fetch 1 ,mem_le_enc_state 
+2752 c001283a beq flag_le_enc_pause ,le_clear_enc 
+2753 c1828000 rtnne flag_le_send_start_enc_req 
+2754 6fe0c16d fetch 1 ,mem_le_txpayload 
+2755 c002a835 beq ll_start_enc_req ,le_set_enc 
+2756 20600000 rtn 
+
+le_transmit_packet_enc:
+2757 1f20f3fc increase -4 ,loopcnt 
+2758 1f220400 copy loopcnt ,temp 
+2759 204072a6 call ccm_wait_enc 
+275a d8c0416d arg mem_le_txpayload ,contr 
+
+le_transmit_packet_enc_loop:
+275b efe08006 ifetch 1 ,contr 
+275c 08008608 inject mod ,8 
+275d c200275b loop le_transmit_packet_enc_loop 
+275e 204072ab call ccm_check_enc_done 
+275f 1de27e00 copy regext ,pdata 
+2760 08008620 inject mod ,32 
+2761 20202740 branch le_tr_nopayload 
+
+le_transmit_lr:
+2762 df20000a arg 10 ,loopcnt 
+
+le_transmit_lr_preamble_loop:
+2763 5800003c setarg 0x3c 
+2764 08008608 inject mod ,8 
+2765 c2002763 loop le_transmit_lr_preamble_loop 
+2766 784efc00 disable encode_fec0 
+2767 783c7c00 enable encode_fec3 
+2768 19317e00 rshift16 access ,pdata 
+2769 1ff17e00 rshift16 pdata ,pdata 
+276a 1ff1fe00 rshift4 pdata ,pdata 
+276b 08008620 inject mod ,32 
+276c c5172771 bmark1 mark_ble_lr_s8 ,le_transmit_lr_s8 
+
+le_transmit_lr_s2:
+276d 58000001 setarg 1 
+276e 08008605 inject mod ,5 
+276f 783d7c00 enable lr_s2en 
+2770 2020272f branch le_transmit_packet 
+
+le_transmit_lr_s8:
+2771 58000000 setarg 0 
+2772 08008605 inject mod ,5 
+2773 2020272f branch le_transmit_packet 
+
+le_transmit_2m:
+2774 6fe0c148 fetch 1 ,mem_system_clk 
+2775 6848c16a fetcht 1 ,mem_le_tx2m_delay 
+2776 9840fe00 iadd temp ,pdata 
+2777 20402340 call sleep 
+2778 19317e00 rshift16 access ,pdata 
+2779 1fecfe00 rshift8 pdata ,pdata 
+277a 1ff18400 rshift4 pdata ,temp 
+277b 18427e00 copy temp ,pdata 
+277c 08008608 inject mod ,8 
+277d 18427e00 copy temp ,pdata 
+277e 08008628 inject mod ,40 
+277f 2020272f branch le_transmit_packet 
+
+le_update_param:
+2780 da602784 arg le_update_param_ahead1_cb ,regc 
+2781 da40279a arg le_update_param_cb ,regb 
+2782 d8e00005 arg lestate_update_param ,queue 
+2783 202027d9 branch le_check_update_flag 
+
+le_update_param_ahead1_cb:
+2784 1a208c04 add rega ,coffset_sniff_anchor ,contr 
+2785 e8420006 ifetcht 4 ,contr 
+2786 1a208c37 add rega ,coffest_le_new_transmitwindowsize ,contr 
+2787 efe08006 ifetch 1 ,contr 
+2788 1a208a2b add rega ,coffset_le_window_size ,contw 
+2789 e7e08005 istore 1 ,contw 
+278a efe10006 ifetch 2 ,contr 
+278b 1febfe00 lshift2 pdata ,pdata 
+278c 98409600 iadd temp ,timeup 
+278d 1a208a04 add rega ,coffset_sniff_anchor ,contw 
+278e 19627e00 deposit timeup 
+278f e7e20005 istore 4 ,contw 
+2790 efe10006 ifetch 2 ,contr 
+2791 1febfe00 lshift2 pdata ,pdata 
+2792 1a208a02 add rega ,coffset_tsniff ,contw 
+2793 e7e10005 istore 2 ,contw 
+2794 efe10006 ifetch 2 ,contr 
+2795 1a208a2c add rega ,coffset_le_slave_latency ,contw 
+2796 e7e10005 istore 2 ,contw 
+2797 efe10006 ifetch 2 ,contr 
+2798 67e142f7 store 2 ,mem_le_init_superto 
+2799 20202917 branch le_receive_window_size 
+
+le_update_param_cb:
+279a efe08011 ifetch 1 ,rega 
+279b 793ffe03 set0 lestate_got_first_packet ,pdata 
+279c e7e08011 istore 1 ,rega 
+279d 62210662 storer rega ,2 ,mem_rega 
+279e 70064d44 jam bt_evt_le_parse_conn_param_accepted ,mem_fifo_temp 
+279f 20407819 call ui_ipc_send_event 
+27a0 6a210662 fetchr rega ,2 ,mem_rega 
+27a1 20600000 rtn 
+
+le_update_channel_map:
+27a2 da600000 arg 0 ,regc 
+27a3 da4027a6 arg le_update_channel_map_cb ,regb 
+27a4 d8e00006 arg lestate_update_map ,queue 
+27a5 202027d9 branch le_check_update_flag 
+
+le_update_channel_map_cb:
+27a6 1a208c37 add rega ,coffset_le_new_map ,contr 
+27a7 efe28006 ifetch 5 ,contr 
+27a8 1a208a30 add rega ,coffset_le_channel_map ,contw 
+27a9 e7e28005 istore 5 ,contw 
+27aa 202025f9 branch le_calc_channel_map 
+
+le_update_phy:
+27ab da600000 arg 0 ,regc 
+27ac da4027af arg le_update_phy_cb ,regb 
+27ad d8e00007 arg lestate_update_phy ,queue 
+27ae 202027d9 branch le_check_update_flag 
+
+le_update_phy_cb:
+27af 1a208c37 add rega ,coffset_le_new_m2s_phy ,contr 
+27b0 efe08006 ifetch 1 ,contr 
+27b1 204027bc call le_update_phy_cb_m2s 
+27b2 e7e08005 istore 1 ,contw 
+27b3 1a208c38 add rega ,coffset_le_new_s2m_phy ,contr 
+27b4 efe08006 ifetch 1 ,contr 
+27b5 204027ca call le_update_phy_cb_s2m 
+27b6 e7e08005 istore 1 ,contw 
+27b7 62210662 storer rega ,2 ,mem_rega 
+27b8 70064d42 jam bt_evt_le_update_phy ,mem_fifo_temp 
+27b9 20407819 call ui_ipc_send_event 
+27ba 6a210662 fetchr rega ,2 ,mem_rega 
+27bb 20600000 rtn 
+
+le_update_phy_cb_m2s:
+27bc 205a27c4 call le_update_phy_cb_m2s_no_change ,blank 
+27bd 1a208a35 add rega ,coffset_le_rx_phy ,contw 
+27be 24748000 nrtn master 
+27bf 6848c3ba fetcht 1 ,mem_le_tx_phys 
+27c0 284ffe07 isolate1 bit_le_coded_phy_s8 ,temp 
+27c1 7920fe07 setflag true ,bit_le_coded_phy_s8 ,pdata 
+27c2 1a208a36 add rega ,coffset_le_tx_phy ,contw 
+27c3 20600000 rtn 
+
+le_update_phy_cb_m2s_no_change:
+27c4 1a208c35 add rega ,coffset_le_rx_phy ,contr 
+27c5 efe08006 ifetch 1 ,contr 
+27c6 24748000 nrtn master 
+27c7 1a208c36 add rega ,coffset_le_tx_phy ,contr 
+27c8 efe08006 ifetch 1 ,contr 
+27c9 20600000 rtn 
+
+le_update_phy_cb_s2m:
+27ca 205a27d3 call le_update_phy_cb_s2m_no_change ,blank 
+27cb 6848c3ba fetcht 1 ,mem_le_tx_phys 
+27cc 284ffe07 isolate1 bit_le_coded_phy_s8 ,temp 
+27cd 7920fe07 setflag true ,bit_le_coded_phy_s8 ,pdata 
+27ce 1a208a36 add rega ,coffset_le_tx_phy ,contw 
+27cf 24748000 nrtn master 
+27d0 793ffe07 set0 bit_le_coded_phy_s8 ,pdata 
+27d1 1a208a35 add rega ,coffset_le_rx_phy ,contw 
+27d2 20600000 rtn 
+
+le_update_phy_cb_s2m_no_change:
+27d3 1a208c36 add rega ,coffset_le_tx_phy ,contr 
+27d4 efe08006 ifetch 1 ,contr 
+27d5 24748000 nrtn master 
+27d6 1a208c35 add rega ,coffset_le_rx_phy ,contr 
+27d7 efe08006 ifetch 1 ,contr 
+27d8 20600000 rtn 
+
+le_check_update_flag:
+27d9 472ec02b bpatchx patch2b_5 ,mem_patch2b 
+27da efe08011 ifetch 1 ,rega 
+27db afec0000 qisolate0 pdata 
+27dc 20608000 rtn true 
+27dd 1a208c1a add rega ,coffset_le_event_cnt ,contr 
+27de e8410006 ifetcht 2 ,contr 
+27df 1a208c20 add rega ,coffset_le_instant ,contr 
+27e0 efe10006 ifetch 2 ,contr 
+27e1 98467e00 isub temp ,pdata 
+27e2 2022a7e9 branch le_update ,zero 
+27e3 242127ee nbranch le_check_update_small ,positive 
+27e4 1fe67c01 sub pdata ,1 ,null 
+27e5 2022a7e7 branch le_update_ahead1 ,zero 
+27e6 20600000 rtn 
+
+le_update_ahead1:
+27e7 1a627e00 copy regc ,pdata 
+27e8 20207d7b branch callback_func 
+
+le_update:
+27e9 efe08011 ifetch 1 ,rega 
+27ea f93ffe00 qset0 pdata 
+27eb e7e08011 istore 1 ,rega 
+27ec 1a427e00 copy regb ,pdata 
+27ed 20207d7b branch callback_func 
+
+le_check_update_small:
+27ee 1a208c1a add rega ,coffset_le_event_cnt ,contr 
+27ef efe10006 ifetch 2 ,contr 
+27f0 1a208c20 add rega ,coffset_le_instant ,contr 
+27f1 efe10006 ifetch 2 ,contr 
+27f2 98467e00 isub temp ,pdata 
+27f3 d840ffff arg 0xffff ,temp 
+27f4 98467c00 isub temp ,null 
+27f5 2022a7e9 branch le_update ,zero 
+27f6 d840f000 arg 0xf000 ,temp 
+27f7 98467c00 isub temp ,null 
+27f8 242127e9 nbranch le_update ,positive 
+27f9 20600000 rtn 
+
+le_check_retransmit:
+27fa 6848817f fetcht 1 ,mem_le_arq 
+27fb 6fe0804c fetch 1 ,mem_le_rxbuf_data_header 
+27fc 1fe37e00 rshift pdata ,pdata 
+27fd 9842fe00 ixor temp ,pdata 
+27fe 2feffe02 isolate1 nesn ,pdata 
+27ff 7920800f setflag true ,mark_old_packet ,mark 
+2800 20600000 rtn 
+
+le_acknowledge:
+2801 472f402b bpatchx patch2b_6 ,mem_patch2b 
+2802 20402914 call le_supervision_flush 
+2803 c6180000 rtnmark1 mark_ble_crc_fail 
+2804 20402828 call le_check_wak 
+2805 6fe0804c fetch 1 ,mem_le_rxbuf_data_header 
+2806 2feffe04 isolate1 md ,pdata 
+2807 7920802a setflag true ,mark_ble_rx_md ,mark 
+2808 1fe37e00 rshift pdata ,pdata 
+2809 9842fe00 ixor temp ,pdata 
+280a 2feffe02 isolate1 nesn ,pdata 
+280b 7920800f setflag true ,mark_old_packet ,mark 
+280c c6078000 rtnmark1 mark_old_packet 
+280d 6fe0804d fetch 1 ,mem_le_rxbuf_data_length 
+280e 203a281a branch le_ack_unenc ,blank 
+280f 6fe08168 fetch 1 ,mem_le_state 
+2810 c302281a bbit0 lestate_encryption ,le_ack_unenc 
+2811 684a0154 fetcht 4 ,mem_le_peer_mic 
+2812 6fe24471 fetch 4 ,mem_ccm_last_mic 
+2813 98467c00 isub temp ,null 
+2814 2022a33e branch assert ,zero 
+2815 604a4471 storet 4 ,mem_ccm_last_mic 
+2816 6fe2c46c fetch 5 ,mem_ccm_pcnt_rx 
+2817 1fe0fe01 increase 1 ,pdata 
+2818 79207e27 set1 le_ccm_directionbit ,pdata 
+2819 67e2c46c store 5 ,mem_ccm_pcnt_rx 
+
+le_ack_unenc:
+281a 6848817f fetcht 1 ,mem_le_arq 
+281b 79400402 setflip nesn ,temp 
+281c 6048817f storet 1 ,mem_le_arq 
+281d 6fe0c323 fetch 1 ,mem_le_configuration 
+281e c4030000 rtnbit0 bit_ble_deal_bb_packet 
+281f 472fc02b bpatchx patch2b_7 ,mem_patch2b 
+2820 6fe0804d fetch 1 ,mem_le_rxbuf_data_length 
+2821 207a0000 rtn blank 
+2822 6fe0804c fetch 1 ,mem_le_rxbuf_data_header 
+2823 2fe00601 compare llid_continue ,pdata ,3 
+2824 2020ae43 branch le_parse_writing_attribute_continue ,true 
+2825 2fe00602 compare llid_start ,pdata ,3 
+2826 2020ae31 branch le_parse_writing_attribute_start ,true 
+2827 20600000 rtn 
+
+le_check_wak:
+2828 4730402c bpatchx patch2c_0 ,mem_patch2c 
+2829 6848817f fetcht 1 ,mem_le_arq 
+282a 284c0005 isolate0 wak ,temp 
+282b 20608000 rtn true 
+282c 6fe0804c fetch 1 ,mem_le_rxbuf_data_header 
+282d 1fe3fe00 lshift pdata ,pdata 
+282e 9842fe00 ixor temp ,pdata 
+282f c4018000 rtnbit0 sn 
+2830 793f8405 set0 wak ,temp 
+2831 79400403 setflip sn ,temp 
+2832 6048817f storet 1 ,mem_le_arq 
+2833 28400603 compare 3 ,temp ,3 
+2834 20600000 rtn 
+
+le_set_enc:
+2835 6fe08168 fetch 1 ,mem_le_state 
+2836 79207e04 set1 lestate_encryption ,pdata 
+2837 67e08168 store 1 ,mem_le_state 
+2838 79200032 set1 mark_ble_encryption ,mark 
+2839 20600000 rtn 
+
+le_clear_enc:
+283a 4730c02c bpatchx patch2c_1 ,mem_patch2c 
+283b 7042ff00 jam flag_le_enc_null ,mem_le_enc_state 
+283c dfe00000 arg 0 ,pdata 
+283d 67e24471 store 4 ,mem_ccm_last_mic 
+283e 67e2c467 store 5 ,mem_ccm_pcnt_tx 
+283f 79207e27 set1 le_ccm_directionbit ,pdata 
+2840 67e2c46c store 5 ,mem_ccm_pcnt_rx 
+2841 6fe08168 fetch 1 ,mem_le_state 
+2842 793ffe04 set0 lestate_encryption ,pdata 
+2843 67e08168 store 1 ,mem_le_state 
+2844 793f8032 set0 mark_ble_encryption ,mark 
+2845 20600000 rtn 
+
+le_scan_check_sender_addr_type:
+2846 da200001 arg 1 ,rega 
+2847 6fe0804c fetch 1 ,mem_le_rxbuf_adv_connect_ind_header 
+2848 c3830000 rtnbit1 le_sender_addr_bit 
+2849 da200000 arg 0 ,rega 
+284a 20600000 rtn 
+
+le_get_master_rx_max:
+284b 18c20a00 copy contr ,contw 
+284c 684943bc fetcht 2 ,mem_remote_rx_max_octets 
+284d 18a20c00 copy contw ,contr 
+284e 20600000 rtn 
+
+le_prepare_tx:
+284f 4731402c bpatchx patch2c_2 ,mem_patch2c 
+2850 6fe0817f fetch 1 ,mem_le_arq 
+2851 c3828000 rtnbit1 wak 
+2852 20402870 call le_check_tx_md 
+2853 204029ee call le_fifo_get_first_tx_ptr 
+2854 203a2894 branch le_send_empty ,blank 
+2855 efe10006 ifetch 2 ,contr 
+2856 e8410006 ifetcht 2 ,contr 
+2857 18422200 copy temp ,rega 
+2858 9a267e00 isub rega ,pdata 
+2859 2040284b call le_get_master_rx_max 
+285a 20407db2 call not_greater_than 
+285b 1fe20400 copy pdata ,temp 
+285c e8208006 ifetchr type ,1 ,contr 
+285d 1a227e00 copy rega ,pdata 
+285e 98c0fe00 iadd contr ,pdata 
+285f 67e1066d store 2 ,mem_contr 
+2860 20402884 call le_update_tx_type 
+2861 20402896 call le_send_packet 
+2862 204029ee call le_fifo_get_first_tx_ptr 
+2863 efe10006 ifetch 2 ,contr 
+2864 1fe22200 copy pdata ,rega 
+2865 18c22600 copy contr ,regc 
+2866 e8410006 ifetcht 2 ,contr 
+2867 18422400 copy temp ,regb 
+2868 9a467e00 isub regb ,pdata 
+2869 2040284b call le_get_master_rx_max 
+286a 20407db2 call not_greater_than 
+286b 9a40fe00 iadd regb ,pdata 
+286c e7e10013 istore 2 ,regc 
+286d 9a267c00 isub rega ,null 
+286e 24628000 nrtn zero 
+286f 20202a08 branch le_fifo_release_first_node 
+
+le_check_tx_md:
+2870 20402877 call le_check_continue 
+2871 c6148000 rtnmark1 mark_ble_tx_md 
+2872 6fe0c323 fetch 1 ,mem_le_configuration 
+2873 c3012882 bbit0 bit_ble_transmit_packet_by_md ,le_clear_md 
+2874 204029f2 call le_fifo_get_second_tx_ptr 
+2875 203a2882 branch le_clear_md ,blank 
+2876 20202880 branch le_set_md 
+
+le_check_continue:
+2877 204029ee call le_fifo_get_first_tx_ptr 
+2878 203a2882 branch le_clear_md ,blank 
+2879 efe10006 ifetch 2 ,contr 
+287a e8410006 ifetcht 2 ,contr 
+287b 98462200 isub temp ,rega 
+287c 2040284b call le_get_master_rx_max 
+287d 18427e00 copy temp ,pdata 
+287e 9a267c00 isub rega ,null 
+287f 20212882 branch le_clear_md ,positive 
+
+le_set_md:
+2880 79200029 set1 mark_ble_tx_md ,mark 
+2881 20600000 rtn 
+
+le_clear_md:
+2882 793f8029 set0 mark_ble_tx_md ,mark 
+2883 20600000 rtn 
+
+le_update_tx_type:
+2884 1a227e00 copy rega ,pdata 
+2885 207a0000 rtn blank 
+2886 d8200001 arg llid_continue ,type 
+2887 20600000 rtn 
+
+le_att_check_notification_enable:
+2888 4731c02c bpatchx patch2c_3 ,mem_patch2c 
+2889 18408401 increase 1 ,temp 
+288a 20402cad call le_att_get_handle_ptr 
+288b 18c08dfe increase -2 ,contr 
+288c efe10006 ifetch 2 ,contr 
+288d d8402902 arg client_charactertic_configuration ,temp 
+288e 98467c00 isub temp ,null 
+288f 24628000 nrtn zero 
+2890 18c08c01 increase 1 ,contr 
+2891 18c22200 copy contr ,rega 
+2892 efe08006 ifetch 1 ,contr 
+2893 20600000 rtn 
+
+le_send_empty:
+2894 18000400 force 0 ,temp 
+2895 18000201 force 1 ,type 
+
+le_send_packet:
+2896 4732402c bpatchx patch2c_4 ,mem_patch2c 
+2897 6048c16c storet 1 ,mem_le_txlen 
+2898 6848817f fetcht 1 ,mem_le_arq 
+2899 79200405 set1 wak ,temp 
+289a 18417efc and temp ,0xfc ,pdata 
+289b 9821fe00 ior type ,pdata 
+289c 67e0817f store 1 ,mem_le_arq 
+289d 1fe17e1f and_into 0x1f ,pdata 
+289e 280ffe29 isolate1 mark_ble_tx_md ,mark 
+289f 7920fe04 setflag true ,md ,pdata 
+28a0 67e0c16b store 1 ,mem_le_txheader 
+28a1 6fe0c16b fetch 1 ,mem_le_txheader 
+28a2 28200601 compare 1 ,type ,3 
+28a3 2420a8a6 nbranch le_send_no_txlen ,true 
+28a4 6fe0c16c fetch 1 ,mem_le_txlen 
+28a5 207a0000 rtn blank 
+
+le_send_no_txlen:
+28a6 c51928ac bmark1 mark_ble_encryption ,le_send_packet_enc 
+28a7 6f20c16c fetchr loopcnt ,1 ,mem_le_txlen 
+28a8 6fe1066d fetch 2 ,mem_contr 
+28a9 1fe20c00 copy pdata ,contr 
+28aa d8a0416d arg mem_le_txpayload ,contw 
+28ab 20207cce branch memcpy_fast 
+
+le_send_packet_enc:
+28ac 20407356 call load_sk 
+28ad 2020728d branch le_encrypt_new_start 
+
+get_lpm_wake_ble_rx_lock:
+28ae d8e00000 arg wake_lock_ble_rx ,queue 
+28af 202024be branch lpm_get_wake_lock 
+
+put_lpm_wake_ble_rx_lock:
+28b0 d8e00000 arg wake_lock_ble_rx ,queue 
+28b1 202024c2 branch lpm_put_wake_lock 
+
+le_parse:
+28b2 4732c02c bpatchx patch2c_5 ,mem_patch2c 
+28b3 c6078000 rtnmark1 mark_old_packet 
+28b4 c6180000 rtnmark1 mark_ble_crc_fail 
+28b5 6fe0804c fetch 1 ,mem_le_rxbuf_data_header 
+28b6 1fe17e03 and pdata ,0x3 ,pdata 
+28b7 67e0c336 store 1 ,mem_le_packet_llid 
+28b8 6fe0804d fetch 1 ,mem_le_rxbuf_data_length 
+28b9 207a0000 rtn blank 
+28ba 5800004e setarg mem_le_rxbuf_data_payload 
+28bb 67e1433b store 2 ,mem_le_payload_ptr 
+28bc 4733402c bpatchx patch2c_6 ,mem_patch2c 
+28bd 6fe0c336 fetch 1 ,mem_le_packet_llid 
+28be c1000000 rtneq llid_reserved 
+28bf c001b028 beq llid_le_ll ,le_parse_ll 
+
+le_parse_l2cap:
+28c0 204028cd call le_check_l2cap_complete 
+28c1 243428ae nbranch get_lpm_wake_ble_rx_lock ,user 
+28c2 204028b0 call put_lpm_wake_ble_rx_lock 
+28c3 58000000 setarg 0 
+28c4 67e14339 store 2 ,mem_le_packet_len_recved 
+28c5 6fe1433b fetch 2 ,mem_le_payload_ptr 
+28c6 1fe08c02 add pdata ,2 ,contr 
+28c7 4733c02c bpatchx patch2c_7 ,mem_patch2c 
+28c8 efe10006 ifetch 2 ,contr 
+28c9 c0022b6e beq le_l2cap_cid_att ,le_parse_att 
+28ca c0032ea6 beq le_l2cap_cid_smp ,le_parse_smp 
+28cb c002ae68 beq le_l2cap_cid_signal ,le_parse_signaling 
+28cc 20600000 rtn 
+
+le_check_l2cap_complete:
+28cd 6fe0c336 fetch 1 ,mem_le_packet_llid 
+28ce c00128dc beq llid_start ,le_check_l2cap_llid_start 
+28cf c000a8f3 beq llid_continue ,le_check_l2cap_llid_continue 
+28d0 20600000 rtn 
+
+le_check_l2cap_cid_legal:
+28d1 20407dbc call enable_user 
+28d2 d8400004 arg le_l2cap_cid_att ,temp 
+28d3 9fe67c00 isub pdata ,null 
+28d4 20628000 rtn zero 
+28d5 d8400005 arg le_l2cap_cid_signal ,temp 
+28d6 9fe67c00 isub pdata ,null 
+28d7 20628000 rtn zero 
+28d8 d8400006 arg le_l2cap_cid_smp ,temp 
+28d9 9fe67c00 isub pdata ,null 
+28da 20628000 rtn zero 
+28db 20207dbe branch disable_user 
+
+le_check_l2cap_llid_start:
+28dc 6fe1433b fetch 2 ,mem_le_payload_ptr 
+28dd 1fe20c00 copy pdata ,contr 
+28de efe10006 ifetch 2 ,contr 
+28df 67e14337 store 2 ,mem_le_l2cap_size 
+28e0 efe10006 ifetch 2 ,contr 
+28e1 204028d1 call le_check_l2cap_cid_legal 
+28e2 24740000 nrtn user 
+28e3 6848804d fetcht 1 ,mem_le_rxbuf_data_length 
+28e4 60494339 storet 2 ,mem_le_packet_len_recved 
+28e5 6fe14337 fetch 2 ,mem_le_l2cap_size 
+28e6 1fe0fe04 increase 4 ,pdata 
+28e7 98467c00 isub temp ,null 
+28e8 2022fdbc branch enable_user ,zero 
+28e9 6f20804d fetchr loopcnt ,1 ,mem_le_rxbuf_data_length 
+28ea d8a00f00 arg mem_le_l2cap_buf ,contw 
+28eb 6fe1433b fetch 2 ,mem_le_payload_ptr 
+28ec 1fe20c00 copy pdata ,contr 
+28ed 20407cce call memcpy_fast 
+28ee 20207dbe branch disable_user 
+
+le_check_l2cap_continue_legal:
+28ef 20407dbc call enable_user 
+28f0 6fe14339 fetch 2 ,mem_le_packet_len_recved 
+28f1 247a0000 nrtn blank 
+28f2 20207dbe branch disable_user 
+
+le_check_l2cap_llid_continue:
+28f3 204028ef call le_check_l2cap_continue_legal 
+28f4 24740000 nrtn user 
+28f5 6fe14339 fetch 2 ,mem_le_packet_len_recved 
+28f6 d8a00f00 arg mem_le_l2cap_buf ,contw 
+28f7 98a0a200 iadd contw ,rega 
+28f8 6848804d fetcht 1 ,mem_le_rxbuf_data_length 
+28f9 9840fe00 iadd temp ,pdata 
+28fa 67e14339 store 2 ,mem_le_packet_len_recved 
+28fb 6f20804d fetchr loopcnt ,1 ,mem_le_rxbuf_data_length 
+28fc 1a220a00 copy rega ,contw 
+28fd 6fe1433b fetch 2 ,mem_le_payload_ptr 
+28fe 1fe20c00 copy pdata ,contr 
+28ff 20407cce call memcpy_fast 
+2900 58000f00 setarg mem_le_l2cap_buf 
+2901 67e1433b store 2 ,mem_le_payload_ptr 
+2902 6fe14337 fetch 2 ,mem_le_l2cap_size 
+2903 1fe0fe04 increase 4 ,pdata 
+2904 68494339 fetcht 2 ,mem_le_packet_len_recved 
+2905 98467c00 isub temp ,null 
+2906 2022fdbc branch enable_user ,zero 
+2907 20207dbe branch disable_user 
+
+le_writeatt_cb:
+2908 6fe143e8 fetch 2 ,mem_cb_att_write 
+2909 20207d7b branch callback_func 
+
+le_supervision_update:
+290a 4734402d bpatchx patch2d_0 ,mem_patch2d 
+290b 684a0184 fetcht 4 ,mem_le_supervision_timer 
+290c 2040233a call get_clkbt 
+290d 98461600 isub temp ,timeup 
+290e 19627e00 deposit timeup 
+290f 68490196 fetcht 2 ,mem_le_superto 
+2910 18520400 lshift4 temp ,temp 
+2911 18438400 lshift temp ,temp 
+2912 98467e00 isub temp ,pdata 
+2913 20600000 rtn 
+
+le_supervision_flush:
+2914 2040233a call get_clkbt 
+2915 67e20184 store 4 ,mem_le_supervision_timer 
+2916 20600000 rtn 
+
+le_receive_window_size:
+2917 4734c02d bpatchx patch2d_1 ,mem_patch2d 
+2918 1a208c50 add rega ,coffset_le_peer_sca ,contr 
+2919 efe08006 ifetch 1 ,contr 
+291a 204025c0 call le_sca_map 
+291b 1a208c02 add rega ,coffset_tsniff ,contr 
+291c efe10006 ifetch 2 ,contr 
+291d 984ffe00 imul32 temp ,pdata 
+291e 68490044 fetcht 2 ,mem_param_rt_rthalfslot 
+291f 984ffe00 imul32 temp ,pdata 
+2920 d84f4240 arg 1000000 ,temp 
+2921 9846fc00 idiv temp 
+2922 d8400682 arg param_windown_size ,temp 
+2923 6fe0c148 fetch 1 ,mem_system_clk 
+2924 984f8400 imul32 temp ,temp 
+2925 1a208c2b add rega ,coffset_le_window_size ,contr 
+2926 efe08006 ifetch 1 ,contr 
+2927 984ffe00 imul32 temp ,pdata 
+2928 9840fe00 iadd temp ,pdata 
+2929 67e2431f store 4 ,mem_le_transmit_window 
+292a 6fe1409a fetch 2 ,mem_rx_window_sniff 
+292b 20407d64 call wait_div_end 
+292c 18078400 quotient temp 
+292d 9840fe00 iadd temp ,pdata 
+292e 1a208a0e add rega ,coffset_rx_window ,contw 
+292f e7e10005 istore 2 ,contw 
+2930 20600000 rtn 
+
+le_modified_name:
+2931 4735402d bpatchx patch2d_2 ,mem_patch2d 
+2932 20402934 call le_modified_name_att_list 
+2933 20202948 branch le_modified_name_adv 
+
+le_modified_name_att_list:
+2934 70069302 jam 2 ,mem_le_search_att_type_length 
+2935 d8402a00 arg uuid_chrctr_device_name ,temp 
+2936 60490694 storet 2 ,mem_le_search_att_type 
+2937 20402cbe call le_att_get_uuid_ptr 
+2938 207a0000 rtn blank 
+2939 efe08006 ifetch 1 ,contr 
+293a 18c20a00 copy contr ,contw 
+293b 6848c26d fetcht 1 ,mem_le_name_len 
+293c 18427200 copy temp ,loopcnt 
+293d 98467c00 isub temp ,null 
+293e 24212945 nbranch le_name_length_longer_than_att ,positive 
+293f 98460400 isub temp ,temp 
+2940 d8c0426e arg mem_le_name ,contr 
+2941 20407cce call memcpy_fast 
+2942 18427200 copy temp ,loopcnt 
+2943 2442a980 ncall memcpy_empty ,zero 
+2944 20600000 rtn 
+
+le_name_length_longer_than_att:
+2945 1fe27200 copy pdata ,loopcnt 
+2946 d8c0426e arg mem_le_name ,contr 
+2947 20207cce branch memcpy_fast 
+
+le_modified_name_adv:
+2948 da60436c arg mem_le_adv_data_len + 32 ,regc 
+2949 da20434d arg mem_le_adv_data ,rega 
+294a 20402955 call le_modified_name_adv_and_scan 
+294b 58000000 setarg 0 
+294c 79347e00 setflag user ,0 ,pdata 
+294d 67e0864e store 1 ,mem_pdatatemp 
+294e da60438c arg mem_le_scan_data_len + 32 ,regc 
+294f da20436d arg mem_le_scan_data ,rega 
+2950 20402955 call le_modified_name_adv_and_scan 
+2951 20740000 rtn user 
+2952 6fe0864e fetch 1 ,mem_pdatatemp 
+2953 203a233e branch assert ,blank 
+2954 20600000 rtn 
+
+le_modified_name_adv_and_scan:
+2955 4735c02d bpatchx patch2d_3 ,mem_patch2d 
+2956 20407dbc call enable_user 
+2957 20407ca8 call clear_temp_block 
+2958 da400000 arg 0 ,regb 
+2959 d8a00680 arg mem_le_data_temp ,contw 
+295a 2040296f call le_modified_name_adv_loop 
+295b 6fe0c26d fetch 1 ,mem_le_name_len 
+295c 1fe08401 add pdata ,1 ,temp 
+295d 9a40a200 iadd regb ,rega 
+295e 1a20a202 increase 2 ,rega 
+295f 1a267c1f sub rega ,0x1f ,null 
+2960 2421296d nbranch le_modified_name_adv_and_scan_name_overflow ,positive 
+2961 e0408005 istoret 1 ,contw 
+2962 d8400009 arg gap_adtype_local_name_complete ,temp 
+2963 e0408005 istoret 1 ,contw 
+2964 98007200 iforce loopcnt 
+2965 20407cce call memcpy_fast 
+2966 1a222400 copy rega ,regb 
+
+le_modified_name_adv_and_scan_store_data:
+2967 1a427e00 deposit regb 
+2968 67e0867f store 1 ,mem_le_data_len_temp 
+2969 d8c0067f arg mem_le_data_len_temp ,contr 
+296a 5fffffe0 setarg -32 
+296b 9a608a00 iadd regc ,contw 
+296c 20207c8f branch memcpy32 
+
+le_modified_name_adv_and_scan_name_overflow:
+296d 20407dbe call disable_user 
+296e 20202967 branch le_modified_name_adv_and_scan_store_data 
+
+le_modified_name_adv_loop:
+296f efe08011 ifetch 1 ,rega 
+2970 207a0000 rtn blank 
+2971 1fe0fe01 pincrease 1 
+2972 e8408006 ifetcht 1 ,contr 
+2973 18467c09 sub temp ,gap_adtype_local_name_complete ,null 
+2974 2022a97e branch le_modified_name_adv_found_name ,zero 
+2975 9a40a400 iadd regb ,regb 
+2976 1a220c00 copy rega ,contr 
+2977 98007200 iforce loopcnt 
+2978 20407cce call memcpy_fast 
+2979 18c22200 copy contr ,rega 
+
+le_modified_name_adv_loop2:
+297a 1a227e00 deposit rega 
+297b 9a667c00 isub regc ,null 
+297c 20610000 rtn positive 
+297d 2020296f branch le_modified_name_adv_loop 
+
+le_modified_name_adv_found_name:
+297e 9a20a200 iadd rega ,rega 
+297f 2020297a branch le_modified_name_adv_loop2 
+
+memcpy_empty:
+2980 58000020 setarg space 
+2981 e7e08005 istore 1 ,contw 
+2982 c2002980 loop memcpy_empty 
+2983 20600000 rtn 
+
+le_lpm_set_mult:
+2984 4736402d bpatchx patch2d_4 ,mem_patch2d 
+2985 7855fc00 disable wake 
+2986 20372988 branch le_lpm_set_mult_attempt ,attempt 
+2987 2436a997 nbranch le_lpm_lost ,match 
+
+le_lpm_set_mult_attempt:
+2988 204024a9 call lpm_match 
+2989 6fe1409a fetch 2 ,mem_rx_window_sniff 
+298a 67e10176 store 2 ,mem_le_receive_window 
+298b 6fe0c323 fetch 1 ,mem_le_configuration 
+298c c282a4b7 bbit1 bit_ble_short_mult ,lpm_mult_short 
+298d c507a4b7 bmark1 mark_old_packet ,lpm_mult_short 
+298e 6fe0804d fetch 1 ,mem_le_rxbuf_data_length 
+298f 243a24b7 nbranch lpm_mult_short ,blank 
+2990 6fe0c16c fetch 1 ,mem_le_txlen 
+2991 243a24b7 nbranch lpm_mult_short ,blank 
+2992 6fe08168 fetch 1 ,mem_le_state 
+2993 c282a4b7 bbit1 lestate_update_param ,lpm_mult_short 
+2994 c283a4b7 bbit1 lestate_update_phy ,lpm_mult_short 
+2995 c28324b7 bbit1 lestate_update_map ,lpm_mult_short 
+2996 2020249f branch lpm_mult_wait_timeout 
+
+le_lpm_lost:
+2997 6fe0c0a8 fetch 1 ,mem_sniff_unint_lost 
+2998 1fe67c1e sub pdata ,30 ,null 
+2999 242124ae nbranch lpm_lost ,positive 
+299a 6849409a fetcht 2 ,mem_rx_window_sniff 
+299b 18430400 rshift temp ,temp 
+299c 6fe10176 fetch 2 ,mem_le_receive_window 
+299d 9840fe00 iadd temp ,pdata 
+299e 67e10176 store 2 ,mem_le_receive_window 
+299f 202024ae branch lpm_lost 
+
+le_set_config_fixed_tk:
+29a0 d8e00000 arg bit_ble_passkey_fixed_key ,queue 
+29a1 202029b5 branch le_set_config 
+
+le_clr_config_fixed_tk:
+29a2 d8e00000 arg bit_ble_passkey_fixed_key ,queue 
+29a3 202029ba branch le_clr_config 
+
+le_set_config_fixed_ltk:
+29a4 d8e00001 arg bit_ble_pairing_fixed_ltk ,queue 
+29a5 202029b5 branch le_set_config 
+
+le_clr_config_fixed_ltk:
+29a6 d8e00001 arg bit_ble_pairing_fixed_ltk ,queue 
+29a7 202029ba branch le_clr_config 
+
+le_set_config_more_data:
+29a8 d8e00002 arg bit_ble_transmit_packet_by_md ,queue 
+29a9 202029b5 branch le_set_config 
+
+le_clr_config_more_data:
+29aa d8e00002 arg bit_ble_transmit_packet_by_md ,queue 
+29ab 202029ba branch le_clr_config 
+
+le_set_config_read_authentication:
+29ac d8e00003 arg bit_ble_read_auth ,queue 
+29ad 202029b5 branch le_set_config 
+
+le_clr_config_read_authentication:
+29ae d8e00003 arg bit_ble_read_auth ,queue 
+29af 202029ba branch le_clr_config 
+
+le_set_config_write_authentication:
+29b0 d8e00004 arg bit_ble_write_auth ,queue 
+29b1 202029b5 branch le_set_config 
+
+le_clr_config_write_authentication:
+29b2 d8e00004 arg bit_ble_write_auth ,queue 
+29b3 202029ba branch le_clr_config 
+
+le_set_config_short_mult:
+29b4 d8e00005 arg bit_ble_short_mult ,queue 
+
+le_set_config:
+29b5 6fe0c323 fetch 1 ,mem_le_configuration 
+29b6 f9207e00 qset1 pdata 
+29b7 67e0c323 store 1 ,mem_le_configuration 
+29b8 20600000 rtn 
+
+le_clr_config_short_mult:
+29b9 d8e00005 arg bit_ble_short_mult ,queue 
+
+le_clr_config:
+29ba 6fe0c323 fetch 1 ,mem_le_configuration 
+29bb f93ffe00 qset0 pdata 
+29bc 67e0c323 store 1 ,mem_le_configuration 
+29bd 20600000 rtn 
+
+le_set_fixed_ltk:
+29be 58112233 setarg 0x112233 
+29bf 67e1c324 store 3 ,mem_le_fixed_ltk 
+29c0 58445566 setarg 0x445566 
+29c1 e7e18005 istore 3 ,contw 
+29c2 58778899 setarg 0x778899 
+29c3 e7e18005 istore 3 ,contw 
+29c4 58001122 setarg 0x001122 
+29c5 e7e18005 istore 3 ,contw 
+29c6 58334455 setarg 0x334455 
+29c7 e7e18005 istore 3 ,contw 
+29c8 58000066 setarg 0x66 
+29c9 20207dce branch istore_1_contw_rtn 
+
+le_set_justwork:
+29ca 59000302 setarg 0x01000302 
+29cb 67e242c6 store 4 ,mem_le_pres 
+29cc 58010010 setarg 0x010010 
+29cd 67e1c2ca store 3 ,mem_le_pres_max_keysize 
+29ce 70430001 jam 1 ,mem_le_pairing_mode 
+29cf 20600000 rtn 
+
+le_fifo_malloc_tx_empty:
+29d0 da200000 arg 0 ,rega 
+29d1 d8200001 arg llid_empty ,type 
+29d2 202029e3 branch le_fifo_malloc_tx 
+
+le_fifo_malloc_tx_ll:
+29d3 4736c02d bpatchx patch2d_5 ,mem_patch2d 
+29d4 d8200003 arg llid_le_ll ,type 
+29d5 204029e3 call le_fifo_malloc_tx 
+29d6 1a427e00 copy regb ,pdata 
+29d7 e7e08005 istore 1 ,contw 
+29d8 20600000 rtn 
+
+le_fifo_malloc_tx_l2cap:
+29d9 4737402d bpatchx patch2d_6 ,mem_patch2d 
+29da 18000202 force llid_start ,type 
+29db 1a20a204 increase 4 ,rega 
+29dc 204029e3 call le_fifo_malloc_tx 
+29dd 1a20a3fc increase -4 ,rega 
+29de 1a227e00 copy rega ,pdata 
+29df e7e10005 istore 2 ,contw 
+29e0 1a427e00 copy regb ,pdata 
+29e1 e7e10005 istore 2 ,contw 
+29e2 20600000 rtn 
+
+le_fifo_malloc_tx:
+29e3 4737c02d bpatchx patch2d_7 ,mem_patch2d 
+29e4 1a20a205 increase 5 ,rega 
+29e5 204068e5 call ble_l2cap_malloc 
+29e6 1a20a3fb increase -5 ,rega 
+29e7 1a227e00 copy rega ,pdata 
+29e8 e7e10005 istore 2 ,contw 
+29e9 58000000 setarg 0 
+29ea e7e10005 istore 2 ,contw 
+29eb 18227e00 copy type ,pdata 
+29ec e7e08005 istore 1 ,contw 
+29ed 20600000 rtn 
+
+le_fifo_get_first_tx_ptr:
+29ee 4738402e bpatchx patch2e_0 ,mem_patch2e 
+29ef 2040691f call l2cap_malloc_fifo_out 
+29f0 1fe20c00 copy pdata ,contr 
+29f1 20600000 rtn 
+
+le_fifo_get_second_tx_ptr:
+29f2 6fe14460 fetch 2 ,mem_tx_fifo2_ptr 
+29f3 20600000 rtn 
+
+le_fifo_get_last_tx_ptr:
+29f4 204029f7 call le_fifo_get_last_tx_ptr0 
+29f5 1fe20c00 copy pdata ,contr 
+29f6 20600000 rtn 
+
+le_fifo_get_last_tx_ptr0:
+29f7 6fe14463 fetch 2 ,mem_tx_fifo3_ptr 
+29f8 20600000 rtn 
+
+le_fifo_get_first_l2cap_ptr:
+29f9 204029ee call le_fifo_get_first_tx_ptr 
+29fa 18c08c05 increase 5 ,contr 
+29fb 20600000 rtn 
+
+le_fifo_get_first_att_ptr:
+29fc 204029ee call le_fifo_get_first_tx_ptr 
+29fd 18c08c09 increase 9 ,contr 
+29fe 20600000 rtn 
+
+le_fifo_get_last_att_ptr:
+29ff 204029f4 call le_fifo_get_last_tx_ptr 
+2a00 18c08c09 increase 9 ,contr 
+2a01 20600000 rtn 
+
+le_fifo_get_last_l2cap_ptr:
+2a02 204029f4 call le_fifo_get_last_tx_ptr 
+2a03 18c08c05 increase 5 ,contr 
+2a04 20600000 rtn 
+
+le_fifo_check_full:
+2a05 20206935 branch l2cap_malloc_is_fifo_full 
+
+le_fifo_check_nearly_full:
+2a06 20206938 branch l2cap_malloc_is_fifo_nearly_full 
+
+le_fifo_check_empty:
+2a07 2020693b branch l2cap_malloc_is_fifo_empty 
+
+le_fifo_release_first_node:
+2a08 20206924 branch l2cap_malloc_free 
+
+le_set_dle:
+2a09 67e443c4 store 8 ,mem_local_rx_max_octets 
+2a0a 20202a1a branch le_set_feature_data_packet_length_extension 
+
+le_set_phys:
+2a0b 184122ff and temp ,0xff ,rega 
+2a0c 20402a10 call le_set_tx_phy 
+2a0d 184ca200 rshift8 temp ,rega 
+
+le_set_rx_phy:
+2a0e 6220c3bb storer rega ,1 ,mem_le_rx_phys 
+2a0f 20202a11 branch le_set_phy_common 
+
+le_set_tx_phy:
+2a10 6220c3ba storer rega ,1 ,mem_le_tx_phys 
+
+le_set_phy_common:
+2a11 2a2ffe01 isolate1 bit_le_2m_phy ,rega 
+2a12 2040aa16 call le_set_feature_2m_phy ,true 
+2a13 2a2ffe02 isolate1 bit_le_coded_phy ,rega 
+2a14 2040aa18 call le_set_feature_coded_phy ,true 
+2a15 20600000 rtn 
+
+le_set_feature_2m_phy:
+2a16 d8e00008 arg bit_ll_feature_le_2m_phy ,queue 
+2a17 20202a1b branch le_set_feature 
+
+le_set_feature_coded_phy:
+2a18 d8e0000b arg bit_ll_feature_le_coded_phy ,queue 
+2a19 20202a1b branch le_set_feature 
+
+le_set_feature_data_packet_length_extension:
+2a1a d8e00005 arg bit_ll_feature_le_data_packet_length_extension ,queue 
+
+le_set_feature:
+2a1b 6fe443b2 fetch 8 ,mem_le_local_feature 
+2a1c f9207e00 qset1 pdata 
+2a1d 67e443b2 store 8 ,mem_le_local_feature 
+2a1e 20600000 rtn 
+
+le_set_fixed_ltk_justwork:
+2a1f 204029a4 call le_set_config_fixed_ltk 
+2a20 204029ca call le_set_justwork 
+2a21 204029be call le_set_fixed_ltk 
+2a22 202029ac branch le_set_config_read_authentication 
+
+le_advertising_dispatch:
+2a23 70019d01 jam fun_rx_ll_1m_phy ,mem_le_rx_phy 
+2a24 70019e01 jam fun_tx_ll_1m_phy ,mem_le_tx_phy 
+2a25 793f8030 set0 mark_ble_crc_fail ,mark 
+2a26 79200010 set1 mark_adv ,mark 
+2a27 793f8032 set0 mark_ble_encryption ,mark 
+2a28 2040258d call le_enable 
+2a29 20402a2d call le_scan 
+2a2a 20402aad call le_adv 
+2a2b 793f8010 set0 mark_adv ,mark 
+2a2c 20202591 branch le_disable 
+
+le_scan:
+2a2d 4738c02e bpatchx patch2e_1 ,mem_patch2e 
+2a2e 6fe0c347 fetch 1 ,mem_le_scan_enable 
+2a2f c1808000 rtnne le_scan_enable 
+2a30 d8e00002 arg le_scan_interval_timer ,queue 
+2a31 20407cf1 call timer_check 
+2a32 247a0000 nrtn blank 
+2a33 6fe14348 fetch 2 ,mem_le_scan_interval 
+2a34 6849434a fetcht 2 ,mem_le_scan_window 
+2a35 98467e00 isub temp ,pdata 
+2a36 d8e00002 arg le_scan_interval_timer ,queue 
+2a37 20407ce3 call timer_init 
+2a38 7854fc00 disable master 
+2a39 20402ada call le_init_adv 
+2a3a 20402a4c call le_wait_adv 
+2a3b 24768000 nrtn match 
+2a3c 4739402e bpatchx patch2e_2 ,mem_patch2e 
+2a3d 6fe3004e fetch 6 ,mem_le_rxbuf + 2 
+2a3e 67e30178 store 6 ,mem_le_plap 
+2a3f 6fe08002 fetch 1 ,mem_le_adv_rcv 
+2a40 1fe0fe01 increase 1 ,pdata 
+2a41 67e08002 store 1 ,mem_le_adv_rcv 
+2a42 20402a53 call le_create_conn 
+2a43 20748000 rtn master 
+2a44 20402b01 call le_send_scan_request 
+2a45 24768000 nrtn match 
+2a46 6fe08004 fetch 1 ,mem_le_scanrsp_rcv 
+2a47 1fe0fe01 increase 1 ,pdata 
+2a48 67e08004 store 1 ,mem_le_scanrsp_rcv 
+2a49 6fe48054 fetch 9 ,mem_le_rxbuf + 8 
+2a4a 67e4867f store 9 ,mem_temp_block0 
+2a4b 20600000 rtn 
+
+le_wait_adv:
+2a4c 4739c02e bpatchx patch2e_3 ,mem_patch2e 
+2a4d 20402b4d call le_next_adv_channel 
+2a4e 20402623 call le_receive_adv 
+2a4f 6fe08001 fetch 1 ,mem_le_adv_waitcnt 
+2a50 1fe0fe01 increase 1 ,pdata 
+2a51 67e08001 store 1 ,mem_le_adv_waitcnt 
+2a52 20600000 rtn 
+
+le_create_conn:
+2a53 473a402e bpatchx patch2e_4 ,mem_patch2e 
+2a54 6fe0c33e fetch 1 ,mem_cmd_le_create_conn 
+2a55 c18d8000 rtnne hci_cmd_le_create_conn 
+2a56 6fe30178 fetch 6 ,mem_le_plap 
+2a57 684b42ce fetcht 6 ,mem_le_conn_peer_addr 
+2a58 98467c00 isub temp ,null 
+2a59 24628000 nrtn zero 
+2a5a 20402056 call context_new 
+2a5b 24628000 nrtn zero 
+2a5c 20402a66 call le_connect_request 
+2a5d 204024f0 call le_init_master 
+2a5e 204030cb call le_send_version_ind 
+2a5f 70064d14 jam bt_evt_le_connected ,mem_fifo_temp 
+2a60 20407819 call ui_ipc_send_event 
+2a61 70411400 jam 0 ,mem_hci_cmd 
+2a62 7001b800 jam 0 ,mem_le_peer_sca 
+2a63 70434700 jam 0 ,mem_le_scan_enable 
+2a64 70433e00 jam 0 ,mem_cmd_le_create_conn 
+2a65 20202041 branch context_save 
+
+le_connect_request:
+2a66 473ac02e bpatchx patch2e_5 ,mem_patch2e 
+2a67 18007fff force -1 ,pdata 
+2a68 38080001 setsect 2 ,1 
+2a69 67e28198 store 5 ,mem_le_channel_map 
+2a6a da200168 arg mem_le_state ,rega 
+2a6b 204025f9 call le_calc_channel_map 
+2a6c 18007204 force 4 ,loopcnt 
+2a6d d8a0018c arg mem_le_access ,contw 
+2a6e 20407dee call generate_random_loop 
+2a6f 6fe142db fetch 2 ,mem_le_timeout 
+2a70 67e10196 store 2 ,mem_le_superto 
+
+le_con_req_hop_retry:
+2a71 180a7e00 random pdata 
+2a72 1fe17e0f and_into 0xf ,pdata 
+2a73 1fe67c04 sub pdata ,4 ,null 
+2a74 20212a71 branch le_con_req_hop_retry ,positive 
+2a75 67e08181 store 1 ,mem_le_hop 
+2a76 473b402e bpatchx patch2e_6 ,mem_patch2e 
+2a77 68494167 fetcht 2 ,mem_le_conn_interval 
+2a78 6049016a storet 2 ,mem_le_tsniff 
+2a79 18422600 copy temp ,regc 
+2a7a 1c40fe07 add clkn_bt ,7 ,pdata 
+2a7b 9a66fc00 idiv regc 
+2a7c 20407d64 call wait_div_end 
+2a7d 18072200 remainder rega 
+2a7e 9a267e00 isub rega ,pdata 
+2a7f 9a60fe00 iadd regc ,pdata 
+2a80 68494165 fetcht 2 ,mem_le_dsniff 
+2a81 9840fe00 iadd temp ,pdata 
+2a82 67e2016c store 4 ,mem_le_anchor 
+2a83 9c462200 isub clkn_bt ,rega 
+2a84 1a20a3fa increase -6 ,rega 
+2a85 da402205 arg 0x2205 ,regb 
+2a86 6fe0c2d4 fetch 1 ,mem_le_conn_own_addr_type 
+2a87 7d3a2406 nsetflag blank ,le_sender_addr_bit ,regb 
+2a88 6fe0c2cd fetch 1 ,mem_le_conn_peer_addr_type 
+2a89 7d3a2407 nsetflag blank ,le_receiver_addr_bit ,regb 
+2a8a 1a427e00 copy regb ,pdata 
+2a8b 67e1416b store 2 ,mem_le_txheader 
+2a8c 6fe342dd fetch 6 ,mem_le_lap 
+2a8d e7e30005 istore 6 ,contw 
+2a8e 6fe30178 fetch 6 ,mem_le_plap 
+2a8f e7e30005 istore 6 ,contw 
+2a90 6fe2018c fetch 4 ,mem_le_access 
+2a91 e7e20005 istore 4 ,contw 
+2a92 180a7e00 random pdata 
+2a93 e7e10005 istore 2 ,contw 
+2a94 180a7e00 random pdata 
+2a95 e7e08005 istore 1 ,contw 
+2a96 18007e02 force 2 ,pdata 
+2a97 e7e08005 istore 1 ,contw 
+2a98 1a2b7e00 rshift2 rega ,pdata 
+2a99 e7e10005 istore 2 ,contw 
+2a9a 1a6b7e00 rshift2 regc ,pdata 
+2a9b e7e10005 istore 2 ,contw 
+2a9c 473bc02e bpatchx patch2e_7 ,mem_patch2e 
+2a9d 58000000 setarg 0 
+2a9e e7e10005 istore 2 ,contw 
+2a9f 6fe142db fetch 2 ,mem_le_timeout 
+2aa0 e7e10005 istore 2 ,contw 
+2aa1 6fe28198 fetch 5 ,mem_le_channel_map 
+2aa2 e7e28005 istore 5 ,contw 
+2aa3 6fe08181 fetch 1 ,mem_le_hop 
+2aa4 d84000a0 arg param_le_sca ,temp 
+2aa5 9841fe00 ior temp ,pdata 
+2aa6 e7e08005 istore 1 ,contw 
+2aa7 2040271c call le_transmit_norx 
+2aa8 5800416b setarg mem_le_txheader 
+2aa9 1fe08c12 add pdata ,18 ,contr 
+2aaa efe18006 ifetch 3 ,contr 
+2aab 67e18190 store 3 ,mem_le_crcinit 
+2aac 20600000 rtn 
+
+le_adv:
+2aad 70000724 jam 36 ,mem_le_ch_mapped 
+2aae 70067f00 jam 0 ,mem_le_adv_channel_map_temp 
+2aaf 20402ad4 call le_send_adv_protect_txbuf 
+2ab0 20402ab2 call le_adv_loop 
+2ab1 20202ad7 branch le_send_adv_recover_txbuf 
+
+le_adv_loop:
+2ab2 473c402f bpatchx patch2f_0 ,mem_patch2f 
+2ab3 6fe0c38c fetch 1 ,mem_le_adv_enable 
+2ab4 207a0000 rtn blank 
+2ab5 d8e00000 arg le_adv_interval_timer ,queue 
+2ab6 20407cf1 call timer_check 
+2ab7 247a0000 nrtn blank 
+2ab8 78287c00 enable swfine 
+2ab9 20402ada call le_init_adv 
+2aba 20402b4d call le_next_adv_channel 
+2abb 20402ae3 call le_send_adv_ind 
+2abc 2436aac4 nbranch le_adv_not_match ,match 
+2abd 6fe08003 fetch 1 ,mem_le_req_rcv 
+2abe 1fe0fe01 increase 1 ,pdata 
+2abf 67e08003 store 1 ,mem_le_req_rcv 
+2ac0 6fe0804c fetch 1 ,mem_le_rxbuf_adv_header 
+2ac1 1fe17e0f and pdata ,0x0f ,pdata 
+2ac2 c001ab12 beq scan_req ,le_send_scan_response 
+2ac3 c002ab25 beq connect_req ,le_parse_connect_req 
+
+le_adv_not_match:
+2ac4 473cc02f bpatchx patch2f_1 ,mem_patch2f 
+2ac5 6fe0867f fetch 1 ,mem_le_adv_channel_map_temp 
+2ac6 6848c397 fetcht 1 ,mem_le_adv_channel_map 
+2ac7 98467c00 isub temp ,null 
+2ac8 2422aab2 nbranch le_adv_loop ,zero 
+2ac9 6fe0c3cf fetch 1 ,mem_device_option 
+2aca 1fe67c0e sub pdata ,dvc_op_car ,null 
+2acb 2022bad9 branch car_le_stop_random_delay_check ,zero 
+2acc 180a7e00 random pdata 
+2acd d84001ff arg 0x1ff ,temp 
+2ace 98417e00 iand temp ,pdata 
+2acf 1fe0fefa add pdata ,250 ,pdata 
+2ad0 20407c93 call delay 
+2ad1 d8e00000 arg le_adv_interval_timer ,queue 
+2ad2 6fe1438d fetch 2 ,mem_le_adv_interval 
+2ad3 20207ce3 branch timer_init 
+
+le_send_adv_protect_txbuf:
+2ad4 d8a0068f arg mem_le_tx_buf_temp ,contw 
+2ad5 d8c0416b arg mem_le_txheader ,contr 
+2ad6 20207c8e branch memcpy48 
+
+le_send_adv_recover_txbuf:
+2ad7 d8c0068f arg mem_le_tx_buf_temp ,contr 
+2ad8 d8a0416b arg mem_le_txheader ,contw 
+2ad9 20207c8e branch memcpy48 
+
+le_init_adv:
+2ada 473d402f bpatchx patch2f_2 ,mem_patch2f 
+2adb 7854fc00 disable master 
+
+le_adv_access:
+2adc 588e89be setarg 0x8e89be 
+2add 1fed7e00 lshift8 pdata ,pdata 
+2ade 1fe1fed6 or_into 0xd6 ,pdata 
+2adf 98001200 iforce access 
+2ae0 58555555 setarg 0x555555 
+2ae1 67e18190 store 3 ,mem_le_crcinit 
+2ae2 20600000 rtn 
+
+le_send_adv_ind:
+2ae3 473dc02f bpatchx patch2f_3 ,mem_patch2f 
+2ae4 6fe0c38f fetch 1 ,mem_le_adv_type 
+2ae5 6848c390 fetcht 1 ,mem_le_adv_own_addr_type 
+2ae6 18520400 lshift4 temp ,temp 
+2ae7 184b8400 lshift2 temp ,temp 
+2ae8 98408400 iadd temp ,temp 
+2ae9 6048c16b storet 1 ,mem_le_txheader 
+2aea c000aaf4 beq adv_direct_ind ,le_send_adv_direct_ind 
+2aeb 6848c34c fetcht 1 ,mem_le_adv_data_len 
+2aec 1840fe06 add temp ,6 ,pdata 
+2aed 67e0c16c store 1 ,mem_le_txlen 
+2aee 6fe342dd fetch 6 ,mem_le_lap 
+2aef 67e3416d store 6 ,mem_le_txpayload 
+2af0 18427200 copy temp ,loopcnt 
+2af1 d8c0434d arg mem_le_adv_data ,contr 
+2af2 20407cce call memcpy_fast 
+2af3 20202afa branch le_send_adv_transmit 
+
+le_send_adv_direct_ind:
+2af4 5800000c setarg 12 
+2af5 67e0c16c store 1 ,mem_le_txlen 
+2af6 6fe342dd fetch 6 ,mem_le_lap 
+2af7 67e3416d store 6 ,mem_le_txpayload 
+2af8 6fe34116 fetch 6 ,mem_hci_plap 
+2af9 e7e30005 istore 6 ,contw 
+
+le_send_adv_transmit:
+2afa 473e402f bpatchx patch2f_4 ,mem_patch2f 
+2afb 6fe08000 fetch 1 ,mem_le_adv_transmit 
+2afc 1fe0fe01 increase 1 ,pdata 
+2afd 67e08000 store 1 ,mem_le_adv_transmit 
+2afe db600708 arg 1800 ,stop_watch 
+2aff 7856fc00 disable match 
+2b00 20202707 branch le_transmit_receive_sifs_without_change_mode 
+
+le_send_scan_request:
+2b01 473ec02f bpatchx patch2f_5 ,mem_patch2f 
+2b02 6fe0c398 fetch 1 ,mem_le_scan_type 
+2b03 c1808000 rtnne le_scan_type_active 
+2b04 6fe08000 fetch 1 ,mem_le_adv_transmit 
+2b05 1fe0fe01 increase 1 ,pdata 
+2b06 67e08000 store 1 ,mem_le_adv_transmit 
+2b07 d8400c03 arg 0x0c03 ,temp 
+2b08 6fe0c399 fetch 1 ,mem_le_scan_own_addr_type 
+2b09 7d3a0406 nsetflag blank ,le_sender_addr_bit ,temp 
+2b0a 1a227e00 copy rega ,pdata 
+2b0b 7d3a0407 nsetflag blank ,le_receiver_addr_bit ,temp 
+2b0c 6049416b storet 2 ,mem_le_txheader 
+2b0d 6fe342dd fetch 6 ,mem_le_lap 
+2b0e e7e30005 istore 6 ,contw 
+2b0f 6fe30178 fetch 6 ,mem_le_plap 
+2b10 e7e30005 istore 6 ,contw 
+2b11 20202707 branch le_transmit_receive_sifs_without_change_mode 
+
+le_send_scan_response:
+2b12 473f402f bpatchx patch2f_6 ,mem_patch2f 
+2b13 6fe30054 fetch 6 ,mem_le_rxbuf_adv_scan_req_adv_address 
+2b14 684b42dd fetcht 6 ,mem_le_lap 
+2b15 98467c00 isub temp ,null 
+2b16 24628000 nrtn zero 
+2b17 d8400004 arg scan_rsp ,temp 
+2b18 6fe0c390 fetch 1 ,mem_le_adv_own_addr_type 
+2b19 7d3a0406 nsetflag blank ,le_sender_addr_bit ,temp 
+2b1a 6048c16b storet 1 ,mem_le_txheader 
+2b1b 6848c36c fetcht 1 ,mem_le_scan_data_len 
+2b1c 1840fe06 add temp ,6 ,pdata 
+2b1d 67e0c16c store 1 ,mem_le_txlen 
+2b1e 6fe342dd fetch 6 ,mem_le_lap 
+2b1f 67e3416d store 6 ,mem_le_txpayload 
+2b20 d8c0436d arg mem_le_scan_data ,contr 
+2b21 18427200 copy temp ,loopcnt 
+2b22 20407cce call memcpy_fast 
+2b23 2040271c call le_transmit_norx 
+2b24 20202ac4 branch le_adv_not_match 
+
+le_parse_connect_req:
+2b25 6fe30054 fetch 6 ,mem_le_rxbuf_adv_connect_ind_adv_address 
+2b26 684b42dd fetcht 6 ,mem_le_lap 
+2b27 98467c00 isub temp ,null 
+2b28 24628000 nrtn zero 
+2b29 20402846 call le_scan_check_sender_addr_type 
+2b2a 6220c2cd storer rega ,1 ,mem_le_conn_peer_addr_type 
+2b2b 6fe3004e fetch 6 ,mem_le_rxbuf_adv_connect_ind_init_address 
+2b2c 67e30178 store 6 ,mem_le_plap 
+2b2d 6fe4005a fetch 8 ,mem_le_rxbuf_adv_connect_ind_access_address 
+2b2e 67e4018c store 8 ,mem_le_access 
+2b2f 68490062 fetcht 2 ,mem_le_rxbuf_adv_connect_ind_win_offset 
+2b30 473fc02f bpatchx patch2f_7 ,mem_patch2f 
+2b31 184b8400 lshift2 temp ,temp 
+2b32 6fe10064 fetch 2 ,mem_le_rxbuf_adv_connect_ind_interval 
+2b33 1febfe00 lshift2 pdata ,pdata 
+2b34 67e1016a store 2 ,mem_le_tsniff 
+2b35 67e2016c store 4 ,mem_le_anchor 
+2b36 98467e00 isub temp ,pdata 
+2b37 1fe0d1fe add pdata ,-2 ,clke_bt 
+2b38 6fe48066 fetch 9 ,mem_le_rxbuf_adv_connect_ind_latency 
+2b39 67e48194 store 9 ,mem_le_slave_latency 
+2b3a 6fe0806f fetch 1 ,mem_le_rxbuf_adv_connect_ind_hop_and_sca 
+2b3b 1fe1041f and pdata ,0x1f ,temp 
+2b3c 60488181 storet 1 ,mem_le_hop 
+2b3d 1ff18400 rshift4 pdata ,temp 
+2b3e 18430400 rshift temp ,temp 
+2b3f 604881b8 storet 1 ,mem_le_peer_sca 
+2b40 da200168 arg mem_le_state ,rega 
+2b41 20402917 call le_receive_window_size 
+2b42 da200168 arg mem_le_state ,rega 
+2b43 204025f9 call le_calc_channel_map 
+2b44 204024fc call le_init_slave 
+2b45 20402056 call context_new 
+2b46 24628000 nrtn zero 
+2b47 47404030 bpatchx patch30_0 ,mem_patch30 
+2b48 204020f7 call calc_clke_offset 
+2b49 20402e85 call le_l2cap_reset_signaling_identifier 
+2b4a 70064d14 jam bt_evt_le_connected ,mem_fifo_temp 
+2b4b 20407819 call ui_ipc_send_event 
+2b4c 20202041 branch context_save 
+
+le_next_adv_channel:
+2b4d 4740c030 bpatchx patch30_1 ,mem_patch30 
+2b4e 6fe08007 fetch 1 ,mem_le_ch_mapped 
+2b4f c012ab5c beq 37 ,le_next_adv_channel_curr_channel_37 
+2b50 c0132b65 beq 38 ,le_next_adv_channel_curr_channel_38 
+2b51 c013ab52 beq 39 ,le_next_adv_channel_curr_channel_39 
+
+le_next_adv_channel_curr_channel_39:
+2b52 6848c397 fetcht 1 ,mem_le_adv_channel_map 
+2b53 284ffe00 isolate1 bit_adv_channel_map_37 ,temp 
+2b54 2020ab61 branch set_le_next_adv_channel_37 ,true 
+2b55 284ffe01 isolate1 bit_adv_channel_map_38 ,temp 
+2b56 2020ab6a branch set_le_next_adv_channel_38 ,true 
+
+set_le_next_adv_channel_39:
+2b57 70000727 jam 39 ,mem_le_ch_mapped 
+2b58 6fe0867f fetch 1 ,mem_le_adv_channel_map_temp 
+2b59 79207e02 set1 bit_adv_channel_map_39 ,pdata 
+
+set_le_adv_channel_map_temp:
+2b5a 67e0867f store 1 ,mem_le_adv_channel_map_temp 
+2b5b 20600000 rtn 
+
+le_next_adv_channel_curr_channel_37:
+2b5c 6848c397 fetcht 1 ,mem_le_adv_channel_map 
+2b5d 284ffe01 isolate1 bit_adv_channel_map_38 ,temp 
+2b5e 2020ab6a branch set_le_next_adv_channel_38 ,true 
+2b5f 284ffe02 isolate1 bit_adv_channel_map_39 ,temp 
+2b60 2020ab57 branch set_le_next_adv_channel_39 ,true 
+
+set_le_next_adv_channel_37:
+2b61 70000725 jam 37 ,mem_le_ch_mapped 
+2b62 6fe0867f fetch 1 ,mem_le_adv_channel_map_temp 
+2b63 79207e00 set1 bit_adv_channel_map_37 ,pdata 
+2b64 20202b5a branch set_le_adv_channel_map_temp 
+
+le_next_adv_channel_curr_channel_38:
+2b65 6848c397 fetcht 1 ,mem_le_adv_channel_map 
+2b66 284ffe02 isolate1 bit_adv_channel_map_39 ,temp 
+2b67 2020ab57 branch set_le_next_adv_channel_39 ,true 
+2b68 284ffe00 isolate1 bit_adv_channel_map_37 ,temp 
+2b69 2020ab61 branch set_le_next_adv_channel_37 ,true 
+
+set_le_next_adv_channel_38:
+2b6a 70000726 jam 38 ,mem_le_ch_mapped 
+2b6b 6fe0867f fetch 1 ,mem_le_adv_channel_map_temp 
+2b6c 79207e01 set1 bit_adv_channel_map_38 ,pdata 
+2b6d 20202b5a branch set_le_adv_channel_map_temp 
+
+le_parse_att:
+2b6e 18c22200 copy contr ,rega 
+2b6f 6fe0c3cf fetch 1 ,mem_device_option 
+2b70 c0036558 beq dvc_op_shutter_dy ,shutter_dy_le_parse_att 
+2b71 c007c90b beq dvc_op_keyboard ,keyboard_le_parse_att 
+2b72 c0045469 beq dvc_op_mouse ,mouse_le_parse_att 
+2b73 1a220c00 copy rega ,contr 
+2b74 efe18006 ifetch 3 ,contr 
+2b75 67e1c39b store 3 ,mem_le_att_opcode 
+
+le_parse_att2:
+2b76 c0012b8b beq attop_exchange_mtu_request ,le_parse_att_exchange_mtu_request 
+2b77 c001ab90 beq attop_exchange_mtu_response ,le_parse_att_exchange_mtu_response 
+2b78 c0022b93 beq attop_find_information_request ,le_parse_att_find_information_request 
+2b79 c0032bd5 beq attop_find_by_type_value_request ,le_parse_att_find_by_type_value_request 
+2b7a c0042c22 beq attop_read_by_type_request ,le_parse_att_read_by_type_request 
+2b7b c0052cf7 beq attop_read_request ,le_parse_att_read_request 
+2b7c c0062d2a beq attop_read_blob_request ,le_parse_att_read_blob_request 
+2b7d c0082d41 beq attop_read_by_group_type_request ,le_parse_att_read_by_group_type_request 
+2b7e c0092d86 beq attop_write_request ,le_parse_att_write_request 
+2b7f c00b2dac beq attop_prepare_write_request ,le_parse_att_prepare_write_request 
+2b80 c00c2dbf beq attop_execute_write_request ,le_parse_att_execute_write_request 
+2b81 c00f2dc4 beq attop_handle_value_confirmation ,le_parse_handle_value_confirmation 
+2b82 c0292dc8 beq attop_write_command ,le_parse_att_write_command 
+2b83 20600000 rtn 
+
+le_send_att_exchange_mtu_requset:
+2b84 18002203 force 3 ,rega 
+2b85 20402dee call le_fifo_malloc_tx_l2cap_gatt 
+2b86 58000002 setarg attop_exchange_mtu_request 
+
+le_send_att_exchange_mtu_common:
+2b87 e7e08005 istore 1 ,contw 
+2b88 6fe142e3 fetch 2 ,mem_le_local_mtu 
+2b89 e7e10005 istore 2 ,contw 
+2b8a 20600000 rtn 
+
+le_parse_att_exchange_mtu_request:
+2b8b 20402b90 call le_parse_att_exchange_mtu_response 
+
+le_send_att_exchange_mtu_response:
+2b8c 18002203 force 3 ,rega 
+2b8d 20402dee call le_fifo_malloc_tx_l2cap_gatt 
+2b8e 58000003 setarg attop_exchange_mtu_response 
+2b8f 20202b87 branch le_send_att_exchange_mtu_common 
+
+le_parse_att_exchange_mtu_response:
+2b90 1fecfe00 rshift8 pdata ,pdata 
+2b91 67e142e5 store 2 ,mem_le_remote_mtu 
+2b92 20600000 rtn 
+
+le_parse_att_find_information_request:
+2b93 20402e1f call le_get_search_handle_start_end_common 
+2b94 20407dbc call enable_user 
+2b95 20202ba1 branch le_send_att_find_information_response 
+
+le_att_handle_inrange:
+2b96 efe10006 ifetch 2 ,contr 
+2b97 1fe17eff and_into 0xff ,pdata 
+2b98 207a0000 rtn blank 
+2b99 9a467c00 isub regb ,null 
+2b9a 20628000 rtn zero 
+2b9b 24610000 nrtn positive 
+2b9c 9a667c00 isub regc ,null 
+2b9d 20628000 rtn zero 
+2b9e 20217dcc branch enable_blank ,positive 
+2b9f 18007c01 force 1 ,null 
+2ba0 20600000 rtn 
+
+le_send_att_find_information_response:
+2ba1 d9600003 arg 3 ,timeup 
+2ba2 20402ca5 call le_init_attlist_search 
+
+le_send_att_find_information_res_loop:
+2ba3 20402b96 call le_att_handle_inrange 
+2ba4 203a2bd3 branch le_send_att_find_information_res_end ,blank 
+2ba5 24212bd1 nbranch le_send_att_find_information_res_next ,positive 
+2ba6 18c08dfe increase -2 ,contr 
+2ba7 20407c6f call store_contr 
+2ba8 20407c66 call get_contw 
+2ba9 24342bc1 nbranch le_send_att_find_information_res_store_info2 ,user 
+2baa 20407c53 call push_stack_rega_b_c 
+2bab 6162065e storer timeup ,4 ,mem_timeup 
+2bac 1800221e force 30 ,rega 
+2bad 20402dee call le_fifo_malloc_tx_l2cap_gatt 
+2bae 6962065e fetchr timeup ,4 ,mem_timeup 
+2baf 20407c62 call pop_stack_rega_b_c 
+2bb0 20407dbe call disable_user 
+2bb1 58000005 setarg attop_find_information_response 
+2bb2 e7e08005 istore 1 ,contw 
+2bb3 20407c69 call get_contr 
+2bb4 efe10006 ifetch 2 ,contr 
+2bb5 ea208006 ifetchr rega ,1 ,contr 
+2bb6 1a267c10 sub rega ,16 ,null 
+2bb7 2022abbd branch le_send_att_find_information_res_uuid128 ,zero 
+2bb8 1a267c02 sub rega ,2 ,null 
+2bb9 2422ade1 nbranch le_send_att_error_response_notfound ,zero 
+
+le_send_att_find_information_res_uuid16:
+2bba 58000001 setarg uuid_size_16bit 
+2bbb e7e08005 istore 1 ,contw 
+2bbc 20202bc6 branch le_send_att_find_information_res_store_info 
+
+le_send_att_find_information_res_uuid128:
+2bbd 58000002 setarg uuid_size_128bit 
+2bbe e7e08005 istore 1 ,contw 
+2bbf d9600001 arg 1 ,timeup 
+2bc0 20202bc6 branch le_send_att_find_information_res_store_info 
+
+le_send_att_find_information_res_store_info2:
+2bc1 20407c69 call get_contr 
+2bc2 efe10006 ifetch 2 ,contr 
+2bc3 efe08006 ifetch 1 ,contr 
+2bc4 9a267c00 isub rega ,null 
+2bc5 2422abd3 nbranch le_send_att_find_information_res_end ,zero 
+
+le_send_att_find_information_res_store_info:
+2bc6 20407c69 call get_contr 
+2bc7 efe10006 ifetch 2 ,contr 
+2bc8 1fe17eff and_into 0xff ,pdata 
+2bc9 e7e10005 istore 2 ,contw 
+2bca ef208006 ifetchr loopcnt ,1 ,contr 
+2bcb 20407cdc call memcpy 
+2bcc 20407c6c call store_contw 
+2bcd 196097ff increase -1 ,timeup 
+2bce 2022abd3 branch le_send_att_find_information_res_end ,zero 
+
+le_send_att_find_information_res_cont:
+2bcf 20402cbb call le_att_contr_add_len 
+2bd0 20202ba3 branch le_send_att_find_information_res_loop 
+
+le_send_att_find_information_res_next:
+2bd1 20402cbb call le_att_contr_add_len 
+2bd2 20202bcf branch le_send_att_find_information_res_cont 
+
+le_send_att_find_information_res_end:
+2bd3 20342de1 branch le_send_att_error_response_notfound ,user 
+2bd4 20202e12 branch le_send_auto_len_by_mem 
+
+le_parse_att_find_by_type_value_request:
+2bd5 20402e1f call le_get_search_handle_start_end_common 
+2bd6 efe10006 ifetch 2 ,contr 
+2bd7 67e143a2 store 2 ,mem_le_search_uuid 
+2bd8 20407c6f call store_contr 
+2bd9 d8a00693 arg mem_le_search_att_type_length ,contw 
+2bda 6fe14337 fetch 2 ,mem_le_l2cap_size 
+2bdb 1fe0fff9 increase -7 ,pdata 
+2bdc 20402e2d call le_get_search_common2 
+2bdd 20202be8 branch le_send_att_find_by_type_value_response 
+
+le_start_end_handle_check_1:
+2bde 78547c00 disable user 
+2bdf 6849068f fetcht 2 ,mem_le_search_handle_start 
+2be0 6fe10691 fetch 2 ,mem_le_search_handle_end 
+2be1 98467c00 isub temp ,null 
+2be2 24212be5 nbranch le_start_end_handle_check_1_fail ,positive 
+2be3 18427e00 deposit temp 
+2be4 c1800000 rtnne 0 
+
+le_start_end_handle_check_1_fail:
+2be5 78347c00 enable user 
+2be6 7001b901 jam att_err_invalid_handle ,mem_le_err_code 
+2be7 20202de3 branch le_send_att_error_response 
+
+le_send_att_find_by_type_value_response:
+2be8 20402bde call le_start_end_handle_check_1 
+2be9 20740000 rtn user 
+2bea 684943a2 fetcht 2 ,mem_le_search_uuid 
+2beb 58002800 setarg uuid_gatt_primary_service 
+2bec 98467c00 isub temp ,null 
+2bed 2022abef branch le_send_att_find_by_type_value_res_primary ,zero 
+2bee 20202de1 branch le_send_att_error_response_notfound 
+
+le_send_att_find_by_type_value_res_primary:
+2bef 70439e00 jam le_find_by_type_val_res_not_found ,mem_le_search_res 
+2bf0 6849068f fetcht 2 ,mem_le_search_handle_start 
+2bf1 60490656 storet 2 ,mem_temp 
+2bf2 20402ce2 call le_att_get_handle_info 
+2bf3 243a2de1 nbranch le_send_att_error_response_notfound ,blank 
+
+le_send_att_find_primary_search_loop:
+2bf4 68490656 fetcht 2 ,mem_temp 
+2bf5 20402ce2 call le_att_get_handle_info 
+2bf6 243a2c08 nbranch le_send_att_error_response_notfound2 ,blank 
+2bf7 18c22200 copy contr ,rega 
+2bf8 6fe086a4 fetch 1 ,mem_le_curr_att_len 
+2bf9 1fe27200 copy pdata ,loopcnt 
+2bfa 68488693 fetcht 1 ,mem_le_search_att_type_length 
+2bfb 98467c00 isub temp ,null 
+2bfc 2422ac04 nbranch le_send_att_find_primary_search_loop1 ,zero 
+2bfd da400694 arg mem_le_search_att_type ,regb 
+2bfe 20407d66 call string_compare 
+2bff 2022ac0b branch le_send_att_find_primary_search_end_start_handle_found ,zero 
+2c00 6fe106ac fetch 2 ,mem_le_cur_uuid 
+2c01 684943a2 fetcht 2 ,mem_le_search_uuid 
+2c02 98467c00 isub temp ,null 
+2c03 2022ac13 branch le_send_att_find_primary_search_end_ending_handle_found ,zero 
+
+le_send_att_find_primary_search_loop1:
+2c04 6fe10656 fetch 2 ,mem_temp 
+2c05 1fe0fe01 increase 1 ,pdata 
+2c06 67e10656 store 2 ,mem_temp 
+2c07 20202bf4 branch le_send_att_find_primary_search_loop 
+
+le_send_att_error_response_notfound2:
+2c08 6fe0c39e fetch 1 ,mem_le_search_res 
+2c09 c000ac13 beq le_find_by_type_val_res_found_starting_handle ,le_send_att_find_primary_search_end_ending_handle_found 
+2c0a 20202de1 branch le_send_att_error_response_notfound 
+
+le_send_att_find_primary_search_end_start_handle_found:
+2c0b 6fe106ac fetch 2 ,mem_le_cur_uuid 
+2c0c 684943a2 fetcht 2 ,mem_le_search_uuid 
+2c0d 98467c00 isub temp ,null 
+2c0e 2422ac04 nbranch le_send_att_find_primary_search_loop1 ,zero 
+2c0f 70439e01 jam le_find_by_type_val_res_found_starting_handle ,mem_le_search_res 
+2c10 68490656 fetcht 2 ,mem_temp 
+2c11 604906a7 storet 2 ,mem_le_cur_handle_start 
+2c12 20202c04 branch le_send_att_find_primary_search_loop1 
+
+le_send_att_find_primary_search_end_ending_handle_found:
+2c13 6fe0c39e fetch 1 ,mem_le_search_res 
+2c14 c0002c04 beq le_find_by_type_val_res_not_found ,le_send_att_find_primary_search_loop1 
+2c15 70439e02 jam le_find_by_type_val_res_found_ending_handle ,mem_le_search_res 
+2c16 68490656 fetcht 2 ,mem_temp 
+2c17 184085ff increase -1 ,temp 
+2c18 604906a9 storet 2 ,mem_le_cur_handle_end 
+
+le_send_att_find_primary_search_end:
+2c19 da200005 arg 5 ,rega 
+2c1a 20402dee call le_fifo_malloc_tx_l2cap_gatt 
+2c1b 58000007 setarg attop_find_by_type_value_response 
+2c1c e7e08005 istore 1 ,contw 
+2c1d 6fe106a7 fetch 2 ,mem_le_cur_handle_start 
+2c1e e7e10005 istore 2 ,contw 
+2c1f 6fe106a9 fetch 2 ,mem_le_cur_handle_end 
+2c20 e7e10005 istore 2 ,contw 
+2c21 20600000 rtn 
+
+le_parse_att_read_by_type_request:
+2c22 20402e1f call le_get_search_handle_start_end_common 
+2c23 20402e28 call le_get_search_att_type 
+2c24 20202c25 branch le_send_att_read_by_type_response 
+
+le_send_att_read_by_type_response:
+2c25 6849068f fetcht 2 ,mem_le_search_handle_start 
+2c26 60490656 storet 2 ,mem_temp 
+2c27 20402ca5 call le_init_attlist_search 
+2c28 20402cb0 call le_att_get_handle_ptr2 
+2c29 18c08dfe increase -2 ,contr 
+2c2a 18c27e00 copy contr ,pdata 
+2c2b 67e106a5 store 2 ,mem_le_cur_attlist_start_ptr 
+2c2c 68490694 fetcht 2 ,mem_le_search_att_type 
+2c2d 58002a00 setarg uuid_chrctr_device_name 
+2c2e 98467c00 isub temp ,null 
+2c2f 2022ac90 branch le_send_att_read_by_type_res_device_name ,zero 
+2c30 58002803 setarg uuid_gatt_characteristic 
+2c31 98467c00 isub temp ,null 
+2c32 2422ac7a nbranch le_send_att_read_by_type_res_not_characteristic ,zero 
+2c33 d9600002 arg 2 ,timeup 
+
+le_send_att_read_by_type_response_loop:
+2c34 20402df5 call le_att_check_handle_end 
+2c35 24212c57 nbranch le_send_att_read_by_type_response_end ,positive 
+2c36 68490656 fetcht 2 ,mem_temp 
+2c37 20402ce0 call le_att_get_handle_info_from_ptr 
+2c38 243a2c57 nbranch le_send_att_read_by_type_response_end ,blank 
+2c39 20402df9 call le_att_same_type 
+2c3a 2422ac55 nbranch le_send_att_read_by_type_response_next_handle ,zero 
+2c3b 24342c59 nbranch le_send_att_read_by_type_res_found_next ,user 
+2c3c 78547c00 disable user 
+2c3d 20402e24 call le_get_search_max_mtu_data 
+2c3e 1fe22200 copy pdata ,rega 
+2c3f 20402dee call le_fifo_malloc_tx_l2cap_gatt 
+2c40 58000009 setarg attop_read_by_type_response 
+2c41 e7e08005 istore 1 ,contw 
+2c42 18a26000 copy contw ,alarm 
+2c43 18a08a01 increase 1 ,contw 
+2c44 20402c67 call le_send_att_read_by_type_write_properties 
+2c45 20402df1 call le_att_next_handle 
+2c46 20402ce0 call le_att_get_handle_info_from_ptr 
+2c47 20402c6e call le_send_att_read_by_type_write_uuid 
+2c48 6fe086ab fetch 1 ,mem_le_cur_uuid_length 
+2c49 1fe0a205 add pdata ,5 ,rega 
+2c4a e2208030 istorer rega ,1 ,alarm 
+2c4b 1a267c07 sub rega ,7 ,null 
+2c4c 2442fdc0 ncall enable_user2 ,zero 
+2c4d 2042fdc2 call disable_user2 ,zero 
+2c4e 20402e24 call le_get_search_max_mtu_data 
+2c4f 1fe0fffe increase -2 ,pdata 
+2c50 9a26fc00 idiv rega 
+2c51 20407d64 call wait_div_end 
+2c52 18079600 quotient timeup 
+2c53 196097ff increase -1 ,timeup 
+2c54 2022ac57 branch le_send_att_read_by_type_response_end ,zero 
+
+le_send_att_read_by_type_response_next_handle:
+2c55 20402df1 call le_att_next_handle 
+2c56 20202c34 branch le_send_att_read_by_type_response_loop 
+
+le_send_att_read_by_type_response_end:
+2c57 20342de1 branch le_send_att_error_response_notfound ,user 
+2c58 20202e12 branch le_send_auto_len_by_mem 
+
+le_send_att_read_by_type_res_found_next:
+2c59 20402e02 call le_store_att_record 
+2c5a 20402df1 call le_att_next_handle 
+2c5b 20402ce0 call le_att_get_handle_info_from_ptr 
+2c5c 20402d74 call le_send_att_read_by_type_res_check_pair_length_type 
+2c5d 243a2c57 nbranch le_send_att_read_by_type_response_end ,blank 
+2c5e 20407c66 call get_contw 
+2c5f 6fe10656 fetch 2 ,mem_temp 
+2c60 1fe0ffff increase -1 ,pdata 
+2c61 e7e10005 istore 2 ,contw 
+2c62 20402e0e call le_write_att_record_common 
+2c63 20402c6e call le_send_att_read_by_type_write_uuid 
+2c64 196097ff increase -1 ,timeup 
+2c65 2022ac57 branch le_send_att_read_by_type_response_end ,zero 
+2c66 20202c55 branch le_send_att_read_by_type_response_next_handle 
+
+le_send_att_read_by_type_write_properties:
+2c67 6fe10656 fetch 2 ,mem_temp 
+2c68 e7e10005 istore 2 ,contw 
+2c69 6fe086a4 fetch 1 ,mem_le_curr_att_len 
+2c6a 1fe27200 copy pdata ,loopcnt 
+2c6b 20407c69 call get_contr 
+2c6c 20407cce call memcpy_fast 
+2c6d 20207c6c branch store_contw 
+
+le_send_att_read_by_type_write_uuid:
+2c6e 20407c66 call get_contw 
+2c6f 6fe10656 fetch 2 ,mem_temp 
+2c70 e7e10005 istore 2 ,contw 
+2c71 20407c6c call store_contw 
+2c72 6fe086ab fetch 1 ,mem_le_cur_uuid_length 
+2c73 1fe27200 copy pdata ,loopcnt 
+2c74 20407c66 call get_contw 
+2c75 20407c69 call get_contr 
+2c76 9f260c00 isub loopcnt ,contr 
+2c77 18c08dff increase -1 ,contr 
+2c78 20407cce call memcpy_fast 
+2c79 20207c6c branch store_contw 
+
+le_send_att_read_by_type_res_not_characteristic:
+2c7a 47414030 bpatchx patch30_2 ,mem_patch30 
+2c7b 20402cbe call le_att_get_uuid_ptr 
+2c7c 203a2de1 branch le_send_att_error_response_notfound ,blank 
+2c7d 18c22600 copy contr ,regc 
+2c7e 20402e24 call le_get_search_max_mtu_data 
+2c7f 1a620c00 copy regc ,contr 
+2c80 e8408006 ifetcht 1 ,contr 
+2c81 18408404 increase 4 ,temp 
+2c82 20407db2 call not_greater_than 
+2c83 1fe22600 copy pdata ,regc 
+2c84 1fe22200 copy pdata ,rega 
+2c85 20407c6f call store_contr 
+2c86 20402dee call le_fifo_malloc_tx_l2cap_gatt 
+2c87 58000009 setarg attop_read_by_type_response 
+2c88 e7e08005 istore 1 ,contw 
+2c89 1a60fffe add regc ,-2 ,pdata 
+2c8a 1fe0f3fe add pdata ,-2 ,loopcnt 
+2c8b e7e08005 istore 1 ,contw 
+2c8c 6fe106bc fetch 2 ,mem_le_cur_handle 
+2c8d e7e10005 istore 2 ,contw 
+2c8e 20407c69 call get_contr 
+2c8f 20207cce branch memcpy_fast 
+
+le_send_att_read_by_type_res_device_name:
+2c90 20402cbe call le_att_get_uuid_ptr 
+2c91 203a2de1 branch le_send_att_error_response_notfound ,blank 
+2c92 18c08dfb increase -5 ,contr 
+2c93 efe10006 ifetch 2 ,contr 
+2c94 67e10656 store 2 ,mem_temp 
+2c95 20402e24 call le_get_search_max_mtu_data 
+2c96 6848c26d fetcht 1 ,mem_le_name_len 
+2c97 18408404 increase 4 ,temp 
+2c98 20407db2 call not_greater_than 
+2c99 1fe22600 copy pdata ,regc 
+2c9a 1fe22200 copy pdata ,rega 
+2c9b 20402dee call le_fifo_malloc_tx_l2cap_gatt 
+2c9c 58000009 setarg attop_read_by_type_response 
+2c9d e7e08005 istore 1 ,contw 
+2c9e 1a60fffe add regc ,-2 ,pdata 
+2c9f 1fe0f3fe add pdata ,-2 ,loopcnt 
+2ca0 e7e08005 istore 1 ,contw 
+2ca1 6fe10656 fetch 2 ,mem_temp 
+2ca2 e7e10005 istore 2 ,contw 
+2ca3 d8c0426e arg mem_le_name ,contr 
+2ca4 20207cce branch memcpy_fast 
+
+le_init_attlist_search:
+2ca5 4741c030 bpatchx patch30_3 ,mem_patch30 
+2ca6 6fe1068f fetch 2 ,mem_le_search_handle_start 
+2ca7 98002400 iforce regb 
+2ca8 6fe10691 fetch 2 ,mem_le_search_handle_end 
+2ca9 98002600 iforce regc 
+2caa 6fe142f9 fetch 2 ,mem_ui_le_uuid_table 
+2cab 98000c00 iforce contr 
+2cac 20207dbc branch enable_user 
+
+le_att_get_handle_ptr:
+2cad 20402cb0 call le_att_get_handle_ptr2 
+2cae 2022acbb branch le_att_get_handle_ptr_found ,zero 
+2caf 20600000 rtn 
+
+le_att_get_handle_ptr2:
+2cb0 47424030 bpatchx patch30_4 ,mem_patch30 
+2cb1 6fe142f9 fetch 2 ,mem_ui_le_uuid_table 
+2cb2 98000c00 iforce contr 
+
+le_att_get_handle_loop1:
+2cb3 efe10006 ifetch 2 ,contr 
+2cb4 1fe17eff and_into 0xff ,pdata 
+2cb5 207a0000 rtn blank 
+2cb6 98467c00 isub temp ,null 
+2cb7 20628000 rtn zero 
+2cb8 20402cbb call le_att_contr_add_len 
+2cb9 20402cbb call le_att_contr_add_len 
+2cba 20202cb3 branch le_att_get_handle_loop1 
+
+le_att_get_handle_ptr_found:
+
+le_att_contr_add_len:
+2cbb efe08006 ifetch 1 ,contr 
+2cbc 98c08c00 iadd contr ,contr 
+2cbd 20600000 rtn 
+
+le_att_get_uuid_ptr:
+2cbe 4742c030 bpatchx patch30_5 ,mem_patch30 
+2cbf 6fe142f9 fetch 2 ,mem_ui_le_uuid_table 
+2cc0 98000c00 iforce contr 
+
+le_att_get_uuid_loop:
+2cc1 efe10006 ifetch 2 ,contr 
+2cc2 1fe17eff and_into 0xff ,pdata 
+2cc3 207a0000 rtn blank 
+2cc4 67e106bc store 2 ,mem_le_cur_handle 
+2cc5 efe08006 ifetch 1 ,contr 
+2cc6 18c20a00 copy contr ,contw 
+2cc7 98c08c00 iadd contr ,contr 
+2cc8 68488693 fetcht 1 ,mem_le_search_att_type_length 
+2cc9 98467c00 isub temp ,null 
+2cca 2422acd1 nbranch le_att_get_uuid_ptr_next ,zero 
+2ccb 1fe27200 copy pdata ,loopcnt 
+2ccc 18a22400 copy contw ,regb 
+2ccd da200694 arg mem_le_search_att_type ,rega 
+2cce 20407d66 call string_compare 
+2ccf 20628000 rtn zero 
+2cd0 6fe08693 fetch 1 ,mem_le_search_att_type_length 
+
+le_att_get_uuid_ptr_next:
+2cd1 98a08c00 iadd contw ,contr 
+2cd2 20402cbb call le_att_contr_add_len 
+2cd3 20202cc1 branch le_att_get_uuid_loop 
+
+le_att_get_last_handle:
+2cd4 d8400001 arg 0x01 ,temp 
+2cd5 6fe142f9 fetch 2 ,mem_ui_le_uuid_table 
+2cd6 98000c00 iforce contr 
+2cd7 18c20a00 copy contr ,contw 
+
+le_att_get_last_handle_loop:
+2cd8 efe10006 ifetch 2 ,contr 
+2cd9 1fe17eff and_into 0xff ,pdata 
+2cda 207a0000 rtn blank 
+2cdb 1fe08401 add pdata ,1 ,temp 
+2cdc 20402cbb call le_att_contr_add_len 
+2cdd 20402cbb call le_att_contr_add_len 
+2cde 18c20a00 copy contr ,contw 
+2cdf 20202cd8 branch le_att_get_last_handle_loop 
+
+le_att_get_handle_info_from_ptr:
+2ce0 6fe106a5 fetch 2 ,mem_le_cur_attlist_start_ptr 
+2ce1 20202ce4 branch le_att_get_handle_info_fast 
+
+le_att_get_handle_info:
+2ce2 47434030 bpatchx patch30_6 ,mem_patch30 
+2ce3 6fe142f9 fetch 2 ,mem_ui_le_uuid_table 
+
+le_att_get_handle_info_fast:
+2ce4 98000c00 iforce contr 
+
+le_att_get_handle_loop:
+2ce5 efe10006 ifetch 2 ,contr 
+2ce6 1fe17eff and_into 0xff ,pdata 
+2ce7 203a2ced branch le_att_unfind_handle ,blank 
+2ce8 98467c00 isub temp ,null 
+2ce9 2022acee branch le_att_finded_handle ,zero 
+2cea 20402cbb call le_att_contr_add_len 
+2ceb 20402cbb call le_att_contr_add_len 
+2cec 20202ce5 branch le_att_get_handle_loop 
+
+le_att_unfind_handle:
+2ced 20207dca branch disable_blank 
+
+le_att_finded_handle:
+2cee efe08006 ifetch 1 ,contr 
+2cef 67e086ab store 1 ,mem_le_cur_uuid_length 
+2cf0 1fe27200 copy pdata ,loopcnt 
+2cf1 d8a006ac arg mem_le_cur_uuid ,contw 
+2cf2 20407cce call memcpy_fast 
+2cf3 efe08006 ifetch 1 ,contr 
+2cf4 67e086a4 store 1 ,mem_le_curr_att_len 
+2cf5 20407c6f call store_contr 
+2cf6 20207dcc branch enable_blank 
+
+le_parse_att_read_request:
+2cf7 20402da5 call le_check_encrypt_state 
+2cf8 6849439c fetcht 2 ,mem_le_att_handle 
+2cf9 6fe0c323 fetch 1 ,mem_le_configuration 
+2cfa c281ad20 bbit1 bit_ble_read_auth ,le_send_att_read_response_check_auth 
+
+le_send_att_read_response:
+2cfb 20402cb0 call le_att_get_handle_ptr2 
+2cfc 2422ade1 nbranch le_send_att_error_response_notfound ,zero 
+2cfd 20542d26 call le_send_att_read_response_check_handle ,user 
+2cfe 20740000 rtn user 
+2cff 20402cbb call le_att_get_handle_ptr_found 
+2d00 18c08dfe increase -2 ,contr 
+2d01 efe10006 ifetch 2 ,contr 
+2d02 d8402a00 arg uuid_chrctr_device_name ,temp 
+2d03 98467c00 isub temp ,null 
+2d04 2022ad14 branch le_send_device_name ,zero 
+
+le_send_att_read_response_next:
+2d05 18c22600 copy contr ,regc 
+2d06 20402e24 call le_get_search_max_mtu_data 
+2d07 1a620c00 copy regc ,contr 
+2d08 e8408006 ifetcht 1 ,contr 
+2d09 18408401 increase 1 ,temp 
+2d0a 20407db2 call not_greater_than 
+
+le_send_att_read_response_less:
+2d0b 1fe22600 copy pdata ,regc 
+2d0c 1fe22200 copy pdata ,rega 
+2d0d 20407c6f call store_contr 
+2d0e 20402dee call le_fifo_malloc_tx_l2cap_gatt 
+2d0f 5800000b setarg attop_read_response 
+2d10 e7e08005 istore 1 ,contw 
+2d11 1a60f3ff add regc ,-1 ,loopcnt 
+2d12 20407c69 call get_contr 
+2d13 20207cdc branch memcpy 
+
+le_send_device_name:
+2d14 20402e24 call le_get_search_max_mtu_data 
+2d15 6848c26d fetcht 1 ,mem_le_name_len 
+2d16 18408401 increase 1 ,temp 
+2d17 20407db2 call not_greater_than 
+2d18 1fe22600 copy pdata ,regc 
+2d19 1fe22200 copy pdata ,rega 
+2d1a 20402dee call le_fifo_malloc_tx_l2cap_gatt 
+2d1b 5800000b setarg attop_read_response 
+2d1c e7e08005 istore 1 ,contw 
+2d1d 1a60f3ff add regc ,-1 ,loopcnt 
+2d1e d8c0426e arg mem_le_name ,contr 
+2d1f 20207cdc branch memcpy 
+
+le_send_att_read_response_check_auth:
+2d20 6fe14334 fetch 2 ,mem_le_pairing_handle 
+2d21 98467c00 isub temp ,null 
+2d22 2422acfb nbranch le_send_att_read_response ,zero 
+2d23 24342cfb nbranch le_send_att_read_response ,user 
+
+le_send_att_read_response_error_insufficient_auth:
+2d24 7001b905 jam att_err_insufficient_authentication ,mem_le_err_code 
+2d25 20202de3 branch le_send_att_error_response 
+
+le_send_att_read_response_check_handle:
+2d26 18c08dfe increase -2 ,contr 
+2d27 efe10006 ifetch 2 ,contr 
+2d28 c2872d24 bbit1 bit_of_att_handle_read_authenticated ,le_send_att_read_response_error_insufficient_auth 
+2d29 20207dbe branch disable_user 
+
+le_parse_att_read_blob_request:
+2d2a efe10006 ifetch 2 ,contr 
+2d2b 67e10693 store 2 ,mem_le_att_offset 
+2d2c 98002200 iforce rega 
+2d2d 6849439c fetcht 2 ,mem_le_att_handle 
+
+le_send_att_read_blob_response:
+2d2e 20402cad call le_att_get_handle_ptr 
+2d2f 203a2de1 branch le_send_att_error_response_notfound ,blank 
+2d30 efe08006 ifetch 1 ,contr 
+2d31 9a267200 isub rega ,loopcnt 
+2d32 24212de1 nbranch le_send_att_error_response_notfound ,positive 
+2d33 20407c6f call store_contr 
+2d34 20402e24 call le_get_search_max_mtu_data 
+2d35 1f208401 add loopcnt ,1 ,temp 
+2d36 20407db2 call not_greater_than 
+
+le_send_att_read_blob_response_less:
+2d37 1fe22200 copy pdata ,rega 
+2d38 1fe22600 copy pdata ,regc 
+2d39 20402dee call le_fifo_malloc_tx_l2cap_gatt 
+2d3a 5800000d setarg attop_read_blob_response 
+2d3b e7e08005 istore 1 ,contw 
+2d3c 1a60f3ff add regc ,-1 ,loopcnt 
+2d3d 68490693 fetcht 2 ,mem_le_att_offset 
+2d3e 20407c69 call get_contr 
+2d3f 98408c00 iadd temp ,contr 
+2d40 20207cce branch memcpy_fast 
+
+le_parse_att_read_by_group_type_request:
+2d41 20402e1f call le_get_search_handle_start_end_common 
+2d42 20402e28 call le_get_search_att_type 
+2d43 20202d44 branch le_send_att_read_by_group_type_response 
+
+le_send_att_read_by_group_type_response:
+2d44 d9600002 arg 2 ,timeup 
+2d45 6849068f fetcht 2 ,mem_le_search_handle_start 
+2d46 60490656 storet 2 ,mem_temp 
+2d47 20402cb0 call le_att_get_handle_ptr2 
+2d48 18c08dfe increase -2 ,contr 
+2d49 18c27e00 copy contr ,pdata 
+2d4a 67e106a5 store 2 ,mem_le_cur_attlist_start_ptr 
+
+le_send_att_read_by_group_type_response_loop:
+2d4b 20402df5 call le_att_check_handle_end 
+2d4c 24212d7c nbranch le_send_att_read_by_group_type_end0 ,positive 
+2d4d 68490656 fetcht 2 ,mem_temp 
+2d4e 20402ce0 call le_att_get_handle_info_from_ptr 
+2d4f 243a2d7f nbranch le_send_att_read_by_group_type_end1 ,blank 
+2d50 20402df9 call le_att_same_type 
+2d51 2422ad72 nbranch le_send_att_read_by_group_type_next_handle ,zero 
+2d52 19627e00 copy timeup ,pdata 
+2d53 c0002d7f beq 0 ,le_send_att_read_by_group_type_end1 
+2d54 24342d68 nbranch le_send_att_read_by_group_type_store_write_record ,user 
+2d55 78547c00 disable user 
+2d56 20402e24 call le_get_search_max_mtu_data 
+2d57 1fe22200 copy pdata ,rega 
+2d58 20402dee call le_fifo_malloc_tx_l2cap_gatt 
+2d59 58000011 setarg attop_read_by_group_type_response 
+2d5a e7e08005 istore 1 ,contw 
+2d5b 6fe086a4 fetch 1 ,mem_le_curr_att_len 
+2d5c 1fe0a204 add pdata ,4 ,rega 
+2d5d e2208005 istorer rega ,1 ,contw 
+2d5e 20407c6c call store_contw 
+2d5f 1a267c06 sub rega ,6 ,null 
+2d60 2442fdc0 ncall enable_user2 ,zero 
+2d61 2042fdc2 call disable_user2 ,zero 
+2d62 20402e24 call le_get_search_max_mtu_data 
+2d63 1fe0fffe increase -2 ,pdata 
+2d64 9a26fc00 idiv rega 
+2d65 20407d64 call wait_div_end 
+2d66 18079600 quotient timeup 
+2d67 20202d6e branch le_send_att_read_by_group_type_store_record 
+
+le_send_att_read_by_group_type_store_write_record:
+2d68 20402d76 call le_send_att_read_by_group_type_check_pair_length_type 
+2d69 243a2d7f nbranch le_send_att_read_by_group_type_end1 ,blank 
+2d6a 6fe10656 fetch 2 ,mem_temp 
+2d6b 1fe0ffff increase -1 ,pdata 
+2d6c 67e106a9 store 2 ,mem_le_cur_handle_end 
+2d6d 20402e08 call le_write_att_record 
+
+le_send_att_read_by_group_type_store_record:
+2d6e 6fe10656 fetch 2 ,mem_temp 
+2d6f 67e106a7 store 2 ,mem_le_cur_handle_start 
+2d70 20402e02 call le_store_att_record 
+2d71 196097ff increase -1 ,timeup 
+
+le_send_att_read_by_group_type_next_handle:
+2d72 20402df1 call le_att_next_handle 
+2d73 20202d4b branch le_send_att_read_by_group_type_response_loop 
+
+le_send_att_read_by_type_res_check_pair_length_type:
+2d74 6fe086ab fetch 1 ,mem_le_cur_uuid_length 
+2d75 20202d77 branch le_send_att_read_by_group_type_check_pair_length_type + 1 
+
+le_send_att_read_by_group_type_check_pair_length_type:
+2d76 6fe086a4 fetch 1 ,mem_le_curr_att_len 
+2d77 20362d7a branch le_send_att_read_by_group_type_check_pair_length_type_16byte ,user2 
+2d78 1fe0fffe increase -2 ,pdata 
+2d79 20600000 rtn 
+
+le_send_att_read_by_group_type_check_pair_length_type_16byte:
+2d7a 1fe0fff0 increase -16 ,pdata 
+2d7b 20600000 rtn 
+
+le_send_att_read_by_group_type_end0:
+2d7c 6fe10656 fetch 2 ,mem_temp 
+2d7d 67e106a9 store 2 ,mem_le_cur_handle_end 
+2d7e 20202d83 branch le_send_att_read_by_group_type_end_common 
+
+le_send_att_read_by_group_type_end1:
+2d7f 6fe10656 fetch 2 ,mem_temp 
+2d80 1fe0ffff increase -1 ,pdata 
+2d81 67e106a9 store 2 ,mem_le_cur_handle_end 
+2d82 20202d83 branch le_send_att_read_by_group_type_end_common 
+
+le_send_att_read_by_group_type_end_common:
+2d83 20342de1 branch le_send_att_error_response_notfound ,user 
+2d84 20402e08 call le_write_att_record 
+2d85 20202e12 branch le_send_auto_len_by_mem 
+
+le_parse_att_write_request:
+2d86 18c22200 copy contr ,rega 
+2d87 6fe14337 fetch 2 ,mem_le_l2cap_size 
+2d88 1fe0a5fd add pdata ,-3 ,regb 
+2d89 20402908 call le_writeatt_cb 
+
+le_send_att_write_response_check_auth:
+2d8a 4743c030 bpatchx patch30_7 ,mem_patch30 
+2d8b 20402da5 call le_check_encrypt_state 
+2d8c 6849439c fetcht 2 ,mem_le_att_handle 
+2d8d 20402cb0 call le_att_get_handle_ptr2 
+2d8e 2422ada3 nbranch le_send_att_write_response_error_invalid_handle ,zero 
+2d8f 20542d9f call le_send_att_write_response_check_handle ,user 
+2d90 20740000 rtn user 
+2d91 6fe0c323 fetch 1 ,mem_le_configuration 
+2d92 c3022d9a bbit0 bit_ble_write_auth ,le_send_att_write_response 
+2d93 6849439c fetcht 2 ,mem_le_att_handle 
+2d94 6fe14334 fetch 2 ,mem_le_pairing_handle 
+2d95 98467c00 isub temp ,null 
+2d96 2422ad9a nbranch le_send_att_write_response ,zero 
+2d97 20402da5 call le_check_encrypt_state 
+2d98 24342d9a nbranch le_send_att_write_response ,user 
+2d99 20202d24 branch le_send_att_read_response_error_insufficient_auth 
+
+le_send_att_write_response:
+2d9a 18002201 force 1 ,rega 
+2d9b 20402dee call le_fifo_malloc_tx_l2cap_gatt 
+2d9c 58000013 setarg attop_write_response 
+2d9d e7e08005 istore 1 ,contw 
+2d9e 20600000 rtn 
+
+le_send_att_write_response_check_handle:
+2d9f 18c08dfe increase -2 ,contr 
+2da0 efe10006 ifetch 2 ,contr 
+2da1 c287ad24 bbit1 bit_of_att_handle_write_authenticated ,le_send_att_read_response_error_insufficient_auth 
+2da2 20207dbe branch disable_user 
+
+le_send_att_write_response_error_invalid_handle:
+2da3 7001b901 jam att_err_invalid_handle ,mem_le_err_code 
+2da4 20202de3 branch le_send_att_error_response 
+
+le_check_encrypt_state:
+2da5 47444031 bpatchx patch31_0 ,mem_patch31 
+2da6 20407dbe call disable_user 
+2da7 6fe0c300 fetch 1 ,mem_le_pairing_mode 
+2da8 c1000000 rtneq le_pairing_mode_none 
+2da9 6fe0c040 fetch 1 ,mem_context 
+2daa c3820000 rtnbit1 lestate_encryption 
+2dab 20207dbc branch enable_user 
+
+le_parse_att_prepare_write_request:
+2dac 18c0a202 add contr ,2 ,rega 
+2dad 6fe14337 fetch 2 ,mem_le_l2cap_size 
+2dae 1fe0a5fb add pdata ,-5 ,regb 
+2daf 20402908 call le_writeatt_cb 
+2db0 20202db1 branch le_send_att_prepare_write_response 
+
+le_send_att_prepare_write_response:
+2db1 6fe14337 fetch 2 ,mem_le_l2cap_size 
+2db2 1fe22200 copy pdata ,rega 
+2db3 20402dee call le_fifo_malloc_tx_l2cap_gatt 
+2db4 58000017 setarg attop_prepare_write_response 
+2db5 e7e08005 istore 1 ,contw 
+2db6 6fe1439c fetch 2 ,mem_le_att_handle 
+2db7 e7e10005 istore 2 ,contw 
+2db8 6fe14337 fetch 2 ,mem_le_l2cap_size 
+2db9 1fe0f3fb add pdata ,-5 ,loopcnt 
+2dba 6fe1433b fetch 2 ,mem_le_payload_ptr 
+2dbb 1fe08c07 add pdata ,7 ,contr 
+2dbc efe10006 ifetch 2 ,contr 
+2dbd e7e10005 istore 2 ,contw 
+2dbe 20207cce branch memcpy_fast 
+
+le_parse_att_execute_write_request:
+
+le_send_att_execute_write_response:
+2dbf 18002201 force 1 ,rega 
+2dc0 20402dee call le_fifo_malloc_tx_l2cap_gatt 
+2dc1 58000019 setarg attop_execute_write_response 
+2dc2 e7e08005 istore 1 ,contw 
+2dc3 20600000 rtn 
+
+le_parse_handle_value_confirmation:
+2dc4 6fe0c39a fetch 1 ,mem_le_l2cap_att_states 
+2dc5 793ffe00 set0 ble_l2cap_recv_confirmation_packet ,pdata 
+2dc6 67e0c39a store 1 ,mem_le_l2cap_att_states 
+2dc7 20600000 rtn 
+
+le_parse_att_write_command:
+2dc8 18c22200 copy contr ,rega 
+2dc9 6fe14337 fetch 2 ,mem_le_l2cap_size 
+2dca 1fe0a5fd add pdata ,-3 ,regb 
+2dcb 20202908 branch le_writeatt_cb 
+
+le_att_malloc_tx_notify:
+2dcc 18422600 copy temp ,regc 
+2dcd 1a20a203 increase 3 ,rega 
+2dce 20402dee call le_fifo_malloc_tx_l2cap_gatt 
+2dcf 1a20a3fd increase -3 ,rega 
+2dd0 5800001b setarg attop_handle_value_notification 
+2dd1 e7e08005 istore 1 ,contw 
+2dd2 1a620400 copy regc ,temp 
+2dd3 e0410005 istoret 2 ,contw 
+2dd4 20600000 rtn 
+
+le_att_malloc_tx_indication:
+2dd5 6fe0c39a fetch 1 ,mem_le_l2cap_att_states 
+2dd6 79207e00 set1 ble_l2cap_send_indication_packet ,pdata 
+2dd7 67e0c39a store 1 ,mem_le_l2cap_att_states 
+2dd8 18422600 copy temp ,regc 
+2dd9 1a20a203 increase 3 ,rega 
+2dda 20402dee call le_fifo_malloc_tx_l2cap_gatt 
+2ddb 1a20a3fd increase -3 ,rega 
+2ddc 5800001d setarg attop_handle_value_indication 
+2ddd e7e08005 istore 1 ,contw 
+2dde 1a620400 copy regc ,temp 
+2ddf e0410005 istoret 2 ,contw 
+2de0 20600000 rtn 
+
+le_send_att_error_response_notfound:
+2de1 4744c031 bpatchx patch31_1 ,mem_patch31 
+2de2 7001b90a jam att_err_attribute_not_found ,mem_le_err_code 
+
+le_send_att_error_response:
+2de3 18002205 force 5 ,rega 
+2de4 20402dee call le_fifo_malloc_tx_l2cap_gatt 
+2de5 58000001 setarg attop_error_response 
+2de6 e7e08005 istore 1 ,contw 
+2de7 6fe0c39b fetch 1 ,mem_le_att_opcode 
+2de8 e7e08005 istore 1 ,contw 
+2de9 6fe1439c fetch 2 ,mem_le_att_handle 
+2dea e7e10005 istore 2 ,contw 
+2deb 6fe081b9 fetch 1 ,mem_le_err_code 
+2dec e7e08005 istore 1 ,contw 
+2ded 20600000 rtn 
+
+le_fifo_malloc_tx_l2cap_gatt:
+2dee 47454031 bpatchx patch31_2 ,mem_patch31 
+2def 18002404 force le_l2cap_cid_att ,regb 
+2df0 202029d9 branch le_fifo_malloc_tx_l2cap 
+
+le_att_next_handle:
+2df1 68490656 fetcht 2 ,mem_temp 
+2df2 18408401 increase 1 ,temp 
+2df3 60490656 storet 2 ,mem_temp 
+2df4 20600000 rtn 
+
+le_att_check_handle_end:
+2df5 68490656 fetcht 2 ,mem_temp 
+2df6 6fe10691 fetch 2 ,mem_le_search_handle_end 
+2df7 98467c00 isub temp ,null 
+2df8 20600000 rtn 
+
+le_att_same_type:
+2df9 4745c031 bpatchx patch31_3 ,mem_patch31 
+2dfa 68488693 fetcht 1 ,mem_le_search_att_type_length 
+2dfb da200694 arg mem_le_search_att_type ,rega 
+
+le_att_check_same_common:
+2dfc 6fe086ab fetch 1 ,mem_le_cur_uuid_length 
+2dfd 1fe27200 copy pdata ,loopcnt 
+2dfe 98467c00 isub temp ,null 
+2dff 24628000 nrtn zero 
+2e00 da4006ac arg mem_le_cur_uuid ,regb 
+2e01 20207d66 branch string_compare 
+
+le_store_att_record:
+2e02 47464031 bpatchx patch31_4 ,mem_patch31 
+2e03 6fe086a4 fetch 1 ,mem_le_curr_att_len 
+2e04 67e0867f store 1 ,mem_temp_block0 
+2e05 1fe27200 copy pdata ,loopcnt 
+2e06 20407c69 call get_contr 
+2e07 20207cce branch memcpy_fast 
+
+le_write_att_record:
+2e08 4746c031 bpatchx patch31_5 ,mem_patch31 
+2e09 20407c66 call get_contw 
+2e0a 6fe106a7 fetch 2 ,mem_le_cur_handle_start 
+2e0b e7e10005 istore 2 ,contw 
+2e0c 6fe106a9 fetch 2 ,mem_le_cur_handle_end 
+2e0d e7e10005 istore 2 ,contw 
+
+le_write_att_record_common:
+2e0e 6fe0867f fetch 1 ,mem_temp_block0 
+2e0f 1fe27200 copy pdata ,loopcnt 
+2e10 20407cce call memcpy_fast 
+2e11 20207c6c branch store_contw 
+
+le_send_auto_len_by_mem:
+2e12 47474031 bpatchx patch31_6 ,mem_patch31 
+2e13 20407c66 call get_contw 
+2e14 204029ff call le_fifo_get_last_att_ptr 
+2e15 18a27e00 copy contw ,pdata 
+2e16 98c62200 isub contr ,rega 
+2e17 20402a02 call le_fifo_get_last_l2cap_ptr 
+2e18 1a227e00 copy rega ,pdata 
+2e19 e7e10006 istore 2 ,contr 
+2e1a 1a20a204 increase 4 ,rega 
+2e1b 204029f4 call le_fifo_get_last_tx_ptr 
+2e1c 1a227e00 copy rega ,pdata 
+2e1d e7e08006 istore 1 ,contr 
+2e1e 20600000 rtn 
+
+le_get_search_handle_start_end_common:
+2e1f 1fecfe00 rshift8 pdata ,pdata 
+2e20 67e1068f store 2 ,mem_le_search_handle_start 
+2e21 efe10006 ifetch 2 ,contr 
+2e22 67e10691 store 2 ,mem_le_search_handle_end 
+2e23 20600000 rtn 
+
+le_get_search_max_mtu_data:
+2e24 4747c031 bpatchx patch31_7 ,mem_patch31 
+2e25 6fe142e5 fetch 2 ,mem_le_remote_mtu 
+2e26 684942e3 fetcht 2 ,mem_le_local_mtu 
+2e27 20207db2 branch not_greater_than 
+
+le_get_search_att_type:
+2e28 47484032 bpatchx patch32_0 ,mem_patch32 
+2e29 20407c6f call store_contr 
+2e2a d8a00693 arg mem_le_search_att_type_length ,contw 
+
+le_get_search_common:
+2e2b 6fe14337 fetch 2 ,mem_le_l2cap_size 
+2e2c 1fe0fffb increase -5 ,pdata 
+
+le_get_search_common2:
+2e2d e7e08005 istore 1 ,contw 
+2e2e 1fe27200 copy pdata ,loopcnt 
+2e2f 20407c69 call get_contr 
+2e30 20207cce branch memcpy_fast 
+
+le_parse_writing_attribute_start:
+2e31 6fe10050 fetch 2 ,mem_le_rxbuf_data_att_cid 
+2e32 c1820000 rtnne le_l2cap_cid_att 
+2e33 6fe0c39a fetch 1 ,mem_le_l2cap_att_states 
+2e34 79207e01 set1 ble_l2cap_deal_with_continue_packet ,pdata 
+2e35 67e0c39a store 1 ,mem_le_l2cap_att_states 
+2e36 6fe18052 fetch 3 ,mem_le_rxbuf_data_att_opcode 
+2e37 67e1c39b store 3 ,mem_le_att_opcode 
+2e38 7920000f set1 mark_old_packet ,mark 
+2e39 c0092e4c beq attop_write_request ,le_parse_attribute_write_request 
+2e3a c0292e51 beq attop_write_command ,le_parse_attribute_write_command 
+2e3b c00c2dbf beq attop_execute_write_request ,le_parse_att_execute_write_request 
+2e3c c0012b8b beq attop_exchange_mtu_request ,le_parse_att_exchange_mtu_request 
+2e3d c00f2dc4 beq attop_handle_value_confirmation ,le_parse_handle_value_confirmation 
+2e3e 793f800f set0 mark_old_packet ,mark 
+
+le_clear_l2cap_att_states_deal_with_contiune_packet:
+2e3f 6fe0c39a fetch 1 ,mem_le_l2cap_att_states 
+2e40 793ffe01 set0 ble_l2cap_deal_with_continue_packet ,pdata 
+2e41 67e0c39a store 1 ,mem_le_l2cap_att_states 
+2e42 20600000 rtn 
+
+le_parse_writing_attribute_continue:
+2e43 6fe0c39a fetch 1 ,mem_le_l2cap_att_states 
+2e44 c4008000 rtnbit0 ble_l2cap_deal_with_continue_packet 
+2e45 7920000f set1 mark_old_packet ,mark 
+2e46 20402e5c call le_parse_l2cap_continue_common 
+2e47 20402e62 call le_parse_attribute_check_complete_packet 
+2e48 20542e3f call le_clear_l2cap_att_states_deal_with_contiune_packet ,user 
+2e49 6fe0c39b fetch 1 ,mem_le_att_opcode 
+2e4a c0092d8a beq attop_write_request ,le_send_att_write_response_check_auth 
+2e4b 20600000 rtn 
+
+le_parse_attribute_write_request:
+2e4c 20402e51 call le_parse_attribute_write_command 
+2e4d 20202e4e branch le_send_attribute_write_response_check_auth 
+
+le_send_attribute_write_response_check_auth:
+2e4e 20402e62 call le_parse_attribute_check_complete_packet 
+2e4f 24740000 nrtn user 
+2e50 20202d8a branch le_send_att_write_response_check_auth 
+
+le_parse_attribute_write_command:
+2e51 4748c032 bpatchx patch32_1 ,mem_patch32 
+2e52 20402e55 call le_parse_attribute_check_complete_packet_init 
+2e53 da200055 arg mem_le_rxbuf_data_att_write_payload ,rega 
+2e54 20202908 branch le_writeatt_cb 
+
+le_parse_attribute_check_complete_packet_init:
+2e55 6fe0804d fetch 1 ,mem_le_rxbuf_data_att_write_length 
+2e56 1fe0a5f9 add pdata ,-7 ,regb 
+2e57 1fe0fffc increase -4 ,pdata 
+2e58 67e14339 store 2 ,mem_le_packet_len_recved 
+2e59 6849004e fetcht 2 ,mem_le_rxbuf_data_att_write_l2cap_length 
+2e5a 60494337 storet 2 ,mem_le_l2cap_size 
+2e5b 20600000 rtn 
+
+le_parse_l2cap_continue_common:
+2e5c 6a40804d fetchr regb ,1 ,mem_le_rxbuf_data_continue_length 
+2e5d 6fe14339 fetch 2 ,mem_le_packet_len_recved 
+2e5e 9a408400 iadd regb ,temp 
+2e5f 60494339 storet 2 ,mem_le_packet_len_recved 
+2e60 da20004e arg mem_le_rxbuf_data_continue_payload ,rega 
+2e61 20202908 branch le_writeatt_cb 
+
+le_parse_attribute_check_complete_packet:
+2e62 20407dbe call disable_user 
+2e63 6fe14339 fetch 2 ,mem_le_packet_len_recved 
+2e64 68494337 fetcht 2 ,mem_le_l2cap_size 
+2e65 98467c00 isub temp ,null 
+2e66 24628000 nrtn zero 
+2e67 20207dbc branch enable_user 
+
+le_parse_signaling:
+2e68 efe08006 ifetch 1 ,contr 
+2e69 e8408006 ifetcht 1 ,contr 
+2e6a e8410006 ifetcht 2 ,contr 
+2e6b c009ae6d beq l2cap_connection_parameter_update_response ,le_l2cap_parse_conn_parameter_update_rsp 
+2e6c 20600000 rtn 
+
+le_l2cap_parse_conn_parameter_update_rsp:
+2e6d efe10006 ifetch 2 ,contr 
+2e6e 67e14340 store 2 ,mem_le_l2cap_signaling_conn_param_update_rsp_result 
+2e6f 70064d40 jam bt_evt_le_parse_conn_papa_update_rsp ,mem_fifo_temp 
+2e70 20207819 branch ui_ipc_send_event 
+
+le_l2cap_tx_update_req:
+2e71 da20000c arg 0x0c ,rega 
+2e72 da600012 arg l2cap_connection_parameter_update_request ,regc 
+2e73 20402e79 call le_fifo_malloc_tx_l2cap_signaling 
+2e74 58000008 setarg 0x08 
+2e75 e7e10005 istore 2 ,contw 
+2e76 6fe442d5 fetch 8 ,mem_le_interval_min 
+2e77 e7e40005 istore 8 ,contw 
+2e78 20600000 rtn 
+
+le_fifo_malloc_tx_l2cap_signaling:
+2e79 20402e81 call le_l2cap_update_signaling_identifier 
+2e7a da400005 arg le_l2cap_cid_signal ,regb 
+2e7b 204029d9 call le_fifo_malloc_tx_l2cap 
+2e7c 1a627e00 copy regc ,pdata 
+2e7d e7e08005 istore 1 ,contw 
+2e7e 6fe0c33f fetch 1 ,mem_le_signaling_identifier 
+2e7f e7e08005 istore 1 ,contw 
+2e80 20600000 rtn 
+
+le_l2cap_update_signaling_identifier:
+2e81 6fe0c33f fetch 1 ,mem_le_signaling_identifier 
+2e82 1fe0fe01 pincrease 1 
+2e83 67e0c33f store 1 ,mem_le_signaling_identifier 
+2e84 c1800000 rtnne 0 
+
+le_l2cap_reset_signaling_identifier:
+2e85 70433f01 jam 1 ,mem_le_signaling_identifier 
+2e86 20600000 rtn 
+
+le_pairing_mode_init:
+2e87 6fe0c300 fetch 1 ,mem_le_pairing_mode 
+2e88 c0002e96 beq le_pairing_mode_none ,le_set_no_pairing 
+2e89 c000ae99 beq le_pairing_mode_lagacy_justwork ,le_set_pairing_mode_lagacy_just_work 
+2e8a c0012e9b beq le_pairing_mode_lagacy_passkey ,le_set_pairing_mode_lagacy_passkey 
+2e8b c040ae8f beq le_pairing_mode_secure_connect_justwork ,le_set_pairing_mode_secure_justwork 
+2e8c c0412e91 beq le_pairing_mode_secure_connect_numeric ,le_set_pairing_mode_secure_numeric 
+2e8d c041ae94 beq le_pairing_mode_secure_connect_passkey ,le_set_pairing_mode_secure_passkey 
+2e8e 20600000 rtn 
+
+le_set_pairing_mode_secure_justwork:
+2e8f 7042c90d jam flag_le_bonding_mitm_secure ,mem_le_pres_auth 
+2e90 20202e97 branch le_set_noinputnooutput 
+
+le_set_pairing_mode_secure_numeric:
+2e91 7042c90d jam flag_le_bonding_mitm_secure ,mem_le_pres_auth 
+2e92 7042c701 jam flag_iocap_displayyesno ,mem_le_pres_iocap 
+2e93 20600000 rtn 
+
+le_set_pairing_mode_secure_passkey:
+2e94 7042c90d jam flag_le_bonding_mitm_secure ,mem_le_pres_auth 
+2e95 20202e9c branch le_set_displayonly 
+
+le_set_no_pairing:
+2e96 7042c900 jam flag_le_no_bonding_no_mitm ,mem_le_pres_auth 
+
+le_set_noinputnooutput:
+2e97 7042c703 jam flag_iocap_noinputnooutput ,mem_le_pres_iocap 
+2e98 20600000 rtn 
+
+le_set_pairing_mode_lagacy_just_work:
+2e99 7042c905 jam flag_le_bonding_mitm ,mem_le_pres_auth 
+2e9a 20202e97 branch le_set_noinputnooutput 
+
+le_set_pairing_mode_lagacy_passkey:
+2e9b 7042c905 jam flag_le_bonding_mitm ,mem_le_pres_auth 
+
+le_set_displayonly:
+2e9c 7042c700 jam flag_iocap_displayonly ,mem_le_pres_iocap 
+2e9d 20600000 rtn 
+
+le_secure_connection_enable:
+2e9e 6fe0c483 fetch 1 ,mem_secure_connections_enable 
+2e9f 79207e00 set1 secure_connections_le_bit ,pdata 
+2ea0 67e0c483 store 1 ,mem_secure_connections_enable 
+2ea1 20600000 rtn 
+
+le_secure_connection_disable:
+2ea2 6fe0c483 fetch 1 ,mem_secure_connections_enable 
+2ea3 793ffe00 set0 secure_connections_le_bit ,pdata 
+2ea4 67e0c483 store 1 ,mem_secure_connections_enable 
+2ea5 20600000 rtn 
+
+le_parse_smp:
+2ea6 efe08006 ifetch 1 ,contr 
+2ea7 c000aeba beq smp_pairing_request ,le_parse_smp_pairing_request 
+2ea8 c001aee1 beq smp_pairing_confirm ,le_parse_smp_pairing_confirm 
+2ea9 c0022f02 beq smp_pairing_random ,le_parse_smp_pairing_random 
+2eaa c002af0f beq smp_pairing_failed ,le_parse_smp_pairing_failed 
+2eab c003af78 beq smp_master_identification ,le_parse_smp_master_identification 
+2eac c0042f64 beq smp_identity_information ,le_parse_smp_identity_information 
+2ead c004af74 beq smp_identity_address_information ,le_parse_smp_identity_address_information 
+2eae c0052f78 beq smp_signing_information ,le_parse_smp_signing_information 
+2eaf c005af78 beq smp_security_request ,le_parse_smp_security_request 
+2eb0 c0062f79 beq smp_pairing_public_key ,le_parse_smp_public_key 
+2eb1 c006af7e beq smp_pairing_dhkey_check ,le_parse_smp_dhkey_check 
+2eb2 20600000 rtn 
+
+le_send_smp_security_request:
+2eb3 18002202 force 2 ,rega 
+2eb4 20403025 call le_fifo_malloc_tx_l2cap_smp 
+2eb5 5800000b setarg smp_security_request 
+2eb6 e7e08005 istore 1 ,contw 
+2eb7 6fe0c2c9 fetch 1 ,mem_le_pres_auth 
+2eb8 e7e08005 istore 1 ,contw 
+2eb9 20600000 rtn 
+
+le_parse_smp_pairing_request:
+2eba 67e0c2bf store 1 ,mem_le_preq 
+2ebb efe30006 ifetch 6 ,contr 
+2ebc e7e30005 istore 6 ,contw 
+2ebd 6fe0c300 fetch 1 ,mem_le_pairing_mode 
+2ebe c0002f15 beq le_pairing_mode_none ,le_smp_pairing_fail_reason_not_support_pairing 
+2ebf 20402edc call le_send_smp_pairing_response 
+2ec0 6fe0c481 fetch 1 ,mem_sc_only_mode 
+2ec1 203a2ec6 branch le_parse_smp_pairing_request2 ,blank 
+2ec2 6fe0c2c2 fetch 1 ,mem_le_preq_auth 
+2ec3 c301b794 bbit0 le_auth_secure_connection_pairing_bit ,app_ble_disconnect 
+2ec4 6fe0c300 fetch 1 ,mem_le_pairing_mode 
+2ec5 c303b794 bbit0 le_pairing_mode_secure_connect_bit ,app_ble_disconnect 
+
+le_parse_smp_pairing_request2:
+2ec6 7042fe03 jam flag_le_pairing_rcv_pairing_req ,mem_le_pairing_state 
+2ec7 6fe0c2c0 fetch 1 ,mem_le_preq_iocap 
+2ec8 c0002ece beq flag_iocap_displayonly ,le_set_tk_0 
+2ec9 c000aece beq flag_iocap_displayyesno ,le_set_tk_0 
+2eca c001aece beq flag_iocap_noinputnooutput ,le_set_tk_0 
+2ecb 6fe0c300 fetch 1 ,mem_le_pairing_mode 
+2ecc c0012ed1 beq le_pairing_mode_lagacy_passkey ,le_parse_smp_pairing_req_passkey 
+2ecd c1418000 rtneq le_pairing_mode_secure_connect_passkey 
+
+le_set_tk_0:
+2ece dfe00000 arg 0 ,pdata 
+2ecf 67e24301 store 4 ,mem_le_tk 
+2ed0 20600000 rtn 
+
+le_parse_smp_pairing_req_passkey:
+2ed1 6fe0c323 fetch 1 ,mem_le_configuration 
+2ed2 c2802eda bbit1 bit_ble_passkey_fixed_key ,le_parse_smp_pairing_req_fixed_passkey 
+
+le_genernate_tk:
+2ed3 da204301 arg mem_le_tk ,rega 
+2ed4 1a220a00 copy rega ,contw 
+2ed5 df200003 arg 3 ,loopcnt 
+2ed6 20407dee call generate_random_loop 
+2ed7 6fe14303 fetch 2 ,mem_le_tk + 2 
+2ed8 1fe17e07 and_into 0x7 ,pdata 
+2ed9 67e14303 store 2 ,mem_le_tk + 2 
+
+le_parse_smp_pairing_req_fixed_passkey:
+2eda 70064d34 jam bt_evt_le_tk_generate ,mem_fifo_temp 
+2edb 20207819 branch ui_ipc_send_event 
+
+le_send_smp_pairing_response:
+2edc 18002207 force 7 ,rega 
+2edd 20403025 call le_fifo_malloc_tx_l2cap_smp 
+2ede 6fe3c2c6 fetch 7 ,mem_le_pres 
+2edf e7e38005 istore 7 ,contw 
+2ee0 20600000 rtn 
+
+le_parse_smp_pairing_confirm:
+2ee1 7042fe05 jam flag_le_pairing_receive_pairing_confirm ,mem_le_pairing_state 
+2ee2 d8a0429d arg mem_le_rconfirm ,contw 
+2ee3 20407c91 call memcpy16 
+2ee4 6fe0c300 fetch 1 ,mem_le_pairing_mode 
+2ee5 c0022ee9 beq le_pairing_mode_lagacy_passkey_res_input ,le_parse_smp_pairing_confirm_passkey_res_input 
+2ee6 c041aeeb beq le_pairing_mode_secure_connect_passkey ,le_parse_smp_pairing_confirm_secure_passkey 
+2ee7 c0422eee beq le_pairing_mode_secure_connect_passkey_res_input ,le_parse_smp_pairing_confirm_sc_passkey_res_input 
+2ee8 20202ef1 branch le_send_smp_pairing_confirm 
+
+le_parse_smp_pairing_confirm_passkey_res_input:
+2ee9 70064d43 jam bt_evt_le_get_passkey ,mem_fifo_temp 
+2eea 20207819 branch ui_ipc_send_event 
+
+le_parse_smp_pairing_confirm_secure_passkey:
+2eeb 7042fb02 jam le_sp_flag_commit_256 ,mem_le_secure_connect_flag 
+2eec 7042fc08 jam le_sc_stat_passkey_wait_confirm ,mem_le_secure_connect_state 
+2eed 20600000 rtn 
+
+le_parse_smp_pairing_confirm_sc_passkey_res_input:
+2eee 6fe24301 fetch 4 ,mem_le_tk 
+2eef 203a2ee9 branch le_parse_smp_pairing_confirm_passkey_res_input ,blank 
+2ef0 20202eeb branch le_parse_smp_pairing_confirm_secure_passkey 
+
+le_send_smp_pairing_confirm:
+2ef1 7042fe06 jam flag_le_pairing_send_pairing_confirm ,mem_le_pairing_state 
+2ef2 6fe0c300 fetch 1 ,mem_le_pairing_mode 
+2ef3 c283aefa bbit1 le_pairing_mode_secure_connect_bit ,le_send_smp_pairing_confirm_sc 
+2ef4 20407244 call generate_confirm 
+2ef5 18002211 force 17 ,rega 
+2ef6 20403025 call le_fifo_malloc_tx_l2cap_smp 
+2ef7 58000003 setarg smp_pairing_confirm 
+2ef8 e7e08005 istore 1 ,contw 
+2ef9 20207363 branch store_aes_result 
+
+le_send_smp_pairing_confirm_sc:
+2efa d8a042ad arg mem_le_srand ,contw 
+2efb 20407ded call generate_random 
+2efc 204071a4 call function_f4_cb 
+2efd 18002211 force 17 ,rega 
+2efe 20403025 call le_fifo_malloc_tx_l2cap_smp 
+2eff 58000003 setarg smp_pairing_confirm 
+2f00 e7e08005 istore 1 ,contw 
+2f01 202071e0 branch load_inverse_result 
+
+le_parse_smp_pairing_random:
+2f02 18c22200 copy contr ,rega 
+2f03 6fe0c300 fetch 1 ,mem_le_pairing_mode 
+2f04 c283af17 bbit1 le_pairing_mode_secure_connect_bit ,le_parse_smp_pairing_random_sc 
+2f05 1a220c00 copy rega ,contr 
+2f06 2040723c call authenticate_rconfirm 
+2f07 2022af2c branch le_parse_smp_pairing_random_success ,zero 
+
+le_send_pairing_confirm_value_failed:
+2f08 7001ba04 jam pairing_failed_confirm_value_failed ,mem_le_ll_pairing_fail_reason 
+
+le_send_pairing_failed:
+2f09 18002202 force 2 ,rega 
+2f0a 20403025 call le_fifo_malloc_tx_l2cap_smp 
+2f0b 58000005 setarg smp_pairing_failed 
+2f0c e7e08005 istore 1 ,contw 
+2f0d 6fe081ba fetch 1 ,mem_le_ll_pairing_fail_reason 
+2f0e e7e08005 istore 1 ,contw 
+
+le_parse_smp_pairing_failed:
+2f0f 47494032 bpatchx patch32_2 ,mem_patch32 
+2f10 18000e07 force smp_pairing_timer ,queue 
+2f11 20407ce2 call timer_stop 
+2f12 7042fe00 jam flag_le_pairing_null ,mem_le_pairing_state 
+2f13 70064d30 jam bt_evt_le_pairing_fail ,mem_fifo_temp 
+2f14 20207819 branch ui_ipc_send_event 
+
+le_smp_pairing_fail_reason_not_support_pairing:
+2f15 7001ba05 jam pairing_failed_pairing_not_supported ,mem_le_ll_pairing_fail_reason 
+2f16 20202f09 branch le_send_pairing_failed 
+
+le_parse_smp_pairing_random_sc:
+2f17 d8a00158 arg mem_le_mrand ,contw 
+2f18 1a220c00 copy rega ,contr 
+2f19 20407c91 call memcpy16 
+2f1a 6fe0c300 fetch 1 ,mem_le_pairing_mode 
+2f1b c041af23 beq le_pairing_mode_secure_connect_passkey ,le_parse_smp_pairing_random_sc_passkey 
+2f1c c0422f23 beq le_pairing_mode_secure_connect_passkey_res_input ,le_parse_smp_pairing_random_sc_passkey 
+2f1d 2040712e call function_g2 
+2f1e 20402f31 call le_send_smp_pairing_random 
+2f1f 6fe0c300 fetch 1 ,mem_le_pairing_mode 
+2f20 c1c10000 rtnne le_pairing_mode_secure_connect_numeric 
+2f21 70064d3b jam bt_evt_le_gkey_generate ,mem_fifo_temp 
+2f22 20207819 branch ui_ipc_send_event 
+
+le_parse_smp_pairing_random_sc_passkey:
+2f23 20407199 call function_f4_ca 
+2f24 d8a006af arg mem_aes_cmac_temp ,contw 
+2f25 204071e0 call load_inverse_result 
+2f26 da2006af arg mem_aes_cmac_temp ,rega 
+2f27 da40429d arg mem_le_rconfirm ,regb 
+2f28 df200010 arg 16 ,loopcnt 
+2f29 20407d66 call string_compare 
+2f2a 2422af08 nbranch le_send_pairing_confirm_value_failed ,zero 
+2f2b 20202f31 branch le_send_smp_pairing_random 
+
+le_parse_smp_pairing_random_success:
+2f2c 20407238 call generate_stk 
+2f2d 70064d31 jam bt_evt_le_pairing_success ,mem_fifo_temp 
+2f2e 20407819 call ui_ipc_send_event 
+2f2f 70429c01 jam 1 ,mem_ltk_exists 
+2f30 7042fe09 jam flag_le_pairing_after_auth ,mem_le_pairing_state 
+
+le_send_smp_pairing_random:
+2f31 18002211 force 17 ,rega 
+2f32 20403025 call le_fifo_malloc_tx_l2cap_smp 
+2f33 58000004 setarg smp_pairing_random 
+2f34 e7e08005 istore 1 ,contw 
+2f35 d8c042ad arg mem_le_srand ,contr 
+2f36 20207c91 branch memcpy16 
+
+le_send_smp_encryption_information:
+2f37 18002211 force 17 ,rega 
+2f38 20403025 call le_fifo_malloc_tx_l2cap_smp 
+2f39 58000006 setarg smp_encryption_information 
+2f3a e7e08005 istore 1 ,contw 
+2f3b 6fe0c323 fetch 1 ,mem_le_configuration 
+2f3c c280af3f bbit1 bit_ble_pairing_fixed_ltk ,le_send_fixed_ltk 
+2f3d d8c0428c arg mem_le_ltk ,contr 
+2f3e 20207c91 branch memcpy16 
+
+le_send_fixed_ltk:
+2f3f d8c04324 arg mem_le_fixed_ltk ,contr 
+2f40 20207c91 branch memcpy16 
+
+le_send_smp_master_identification:
+2f41 d8a04305 arg mem_le_ediv ,contw 
+2f42 1800720a force 10 ,loopcnt 
+2f43 20407dee call generate_random_loop 
+2f44 1800220b force 11 ,rega 
+2f45 20403025 call le_fifo_malloc_tx_l2cap_smp 
+2f46 58000007 setarg smp_master_identification 
+2f47 e7e08005 istore 1 ,contw 
+2f48 6fe14305 fetch 2 ,mem_le_ediv 
+2f49 e7e10005 istore 2 ,contw 
+2f4a 6fe44307 fetch 8 ,mem_le_rand 
+2f4b e7e40005 istore 8 ,contw 
+2f4c 20600000 rtn 
+
+le_send_smp_identity_information:
+2f4d 18002211 force 17 ,rega 
+2f4e 20403025 call le_fifo_malloc_tx_l2cap_smp 
+2f4f 58000008 setarg smp_identity_information 
+2f50 e7e08005 istore 1 ,contw 
+2f51 58000000 setarg 0 
+2f52 e7e40005 istore 8 ,contw 
+2f53 e7e40005 istore 8 ,contw 
+2f54 20600000 rtn 
+
+le_send_smp_identity_address_information:
+2f55 18002208 force 8 ,rega 
+2f56 20403025 call le_fifo_malloc_tx_l2cap_smp 
+2f57 58000009 setarg smp_identity_address_information 
+2f58 e7e08005 istore 1 ,contw 
+2f59 6fe0c2d4 fetch 1 ,mem_le_conn_own_addr_type 
+2f5a e7e08005 istore 1 ,contw 
+2f5b 6fe342dd fetch 6 ,mem_le_lap 
+2f5c e7e30005 istore 6 ,contw 
+2f5d 20600000 rtn 
+
+le_send_pairing_fail_unspecified_reason:
+2f5e 7001ba08 jam pairing_failed_unspecified_reason ,mem_le_ll_pairing_fail_reason 
+2f5f 20202f09 branch le_send_pairing_failed 
+
+le_check_init_key_distribution:
+2f60 6fe0c2cb fetch 1 ,mem_le_pres_init_key_distribution 
+2f61 6848c2cb fetcht 1 ,mem_le_pres_init_key_distribution 
+2f62 98417e00 iand temp ,pdata 
+2f63 20600000 rtn 
+
+le_parse_smp_identity_information:
+2f64 d8a0430f arg mem_le_irk ,contw 
+2f65 20407c91 call memcpy16 
+2f66 20402f60 call le_check_init_key_distribution 
+2f67 2fec0001 isolate0 le_initator_irk_bit ,pdata 
+2f68 2020af5e branch le_send_pairing_fail_unspecified_reason ,true 
+2f69 6fe0c3cf fetch 1 ,mem_device_option 
+2f6a c1850000 rtnne dvc_op_module 
+2f6b 20402f6e call le_check_master_addr_type 
+2f6c 24740000 nrtn user 
+2f6d 2020379e branch app_ble_store_reconn_info 
+
+le_check_master_addr_type:
+2f6e 20407dbe call disable_user 
+2f6f 6fe0c2cd fetch 1 ,mem_le_conn_peer_addr_type 
+2f70 c1000000 rtneq master_public_addr 
+2f71 6fe0c2c4 fetch 1 ,mem_le_preq_init_key_distribution 
+2f72 c4008000 rtnbit0 le_initator_irk_bit 
+2f73 20207dbc branch enable_user 
+
+le_parse_smp_identity_address_information:
+2f74 20402f60 call le_check_init_key_distribution 
+2f75 2fec0001 isolate0 le_initator_irk_bit ,pdata 
+2f76 2020af5e branch le_send_pairing_fail_unspecified_reason ,true 
+2f77 20600000 rtn 
+
+le_parse_smp_master_identification:
+
+le_parse_smp_signing_information:
+
+le_parse_smp_security_request:
+2f78 20600000 rtn 
+
+le_parse_smp_public_key:
+2f79 d8a005dc arg mem_le_pubkey_remote_x_256 ,contw 
+2f7a 20407c83 call memcpy64 
+2f7b 7042fb02 jam le_sp_flag_commit_256 ,mem_le_secure_connect_flag 
+2f7c 7042fc01 jam le_sc_stat_receive_public_key ,mem_le_secure_connect_state 
+2f7d 20600000 rtn 
+
+le_parse_smp_dhkey_check:
+2f7e d8a0063c arg mem_sp_confirm_remote ,contw 
+2f7f 20407c91 call memcpy16 
+2f80 7042fc06 jam le_sc_stat_receive_dhkey ,mem_le_secure_connect_state 
+2f81 7042fb02 jam le_sp_flag_commit_256 ,mem_le_secure_connect_flag 
+2f82 20600000 rtn 
+
+le_send_smp_pairing_public_key:
+2f83 18002241 force 65 ,rega 
+2f84 20403025 call le_fifo_malloc_tx_l2cap_smp 
+2f85 5800000c setarg smp_pairing_public_key 
+2f86 e7e08005 istore 1 ,contw 
+2f87 d8c044a6 arg mem_sc_pubkey_local_x_256 ,contr 
+2f88 20207c83 branch memcpy64 
+
+le_send_smp_pairing_dhkey_check:
+2f89 20407145 call function_f6_eb 
+2f8a 18002211 force 17 ,rega 
+2f8b 20403025 call le_fifo_malloc_tx_l2cap_smp 
+2f8c 5800000d setarg smp_pairing_dhkey_check 
+2f8d e7e08005 istore 1 ,contw 
+2f8e 202071e0 branch load_inverse_result 
+
+le_check_paring_time:
+2f8f 6fe0c2fe fetch 1 ,mem_le_pairing_state 
+2f90 c17f8000 rtneq flag_le_pairing_end 
+2f91 d8400003 arg flag_le_pairing_rcv_pairing_req ,temp 
+2f92 98467c00 isub temp ,null 
+2f93 24610000 nrtn positive 
+2f94 d8e00007 arg smp_pairing_timer ,queue 
+2f95 20407cf1 call timer_check 
+2f96 247a0000 nrtn blank 
+2f97 20202f5e branch le_send_pairing_fail_unspecified_reason 
+
+le_pairing_sm:
+2f98 4749c032 bpatchx patch32_3 ,mem_patch32 
+2f99 20402a06 call le_fifo_check_nearly_full 
+2f9a 247a0000 nrtn blank 
+2f9b 6fe0c2fe fetch 1 ,mem_le_pairing_state 
+2f9c c0002fa5 beq flag_le_pairing_null ,le_pairing_sm_null 
+2f9d c000afab beq flag_le_pairing_start ,le_pairing_sm_start 
+2f9e c0012fa5 beq flag_le_pairing_send_recurity_req ,le_pairing_sm_send_sec_req 
+2f9f c001afad beq flag_le_pairing_rcv_pairing_req ,le_pairing_sm_rcv_pairing_req 
+2fa0 c004afb1 beq flag_le_pairing_after_auth ,le_pairing_sm_after_auth 
+2fa1 c005afc1 beq flag_le_paring_send_enc_information ,le_pairng_sm_send_enc_information 
+2fa2 c0062fc3 beq flag_le_paring_send_master_identification ,le_pairng_sm_send_master_indentification 
+2fa3 c006afca beq flag_le_paring_send_indentity_information ,le_pairng_sm_send_indentity_information 
+2fa4 20600000 rtn 
+
+le_pairing_sm_null:
+
+le_pairing_sm_send_sec_req:
+2fa5 6fe0c2ff fetch 1 ,mem_le_enc_state 
+2fa6 c1820000 rtnne flag_le_send_start_enc_rsp 
+2fa7 7042ffff jam flag_le_enc_end ,mem_le_enc_state 
+2fa8 7042feff jam flag_le_pairing_end ,mem_le_pairing_state 
+2fa9 70064d3f jam bt_evt_le_reconnect_complete ,mem_fifo_temp 
+2faa 20207819 branch ui_ipc_send_event 
+
+le_pairing_sm_start:
+2fab 7042fe02 jam flag_le_pairing_send_recurity_req ,mem_le_pairing_state 
+2fac 20202eb3 branch le_send_smp_security_request 
+
+le_pairing_sm_rcv_pairing_req:
+2fad 7042fe04 jam flag_le_pairing_wait_stk_generation ,mem_le_pairing_state 
+2fae 58017700 setarg timer_smp_pairing_timeout 
+2faf d8e00007 arg smp_pairing_timer ,queue 
+2fb0 20207ce3 branch timer_init 
+
+le_pairing_sm_after_auth:
+2fb1 6fe0c2ff fetch 1 ,mem_le_enc_state 
+2fb2 c0022fb4 beq flag_le_send_start_enc_rsp ,le_pairing_sm_after_auth_start_enc 
+2fb3 20600000 rtn 
+
+le_pairing_sm_after_auth_start_enc:
+2fb4 6fe0c300 fetch 1 ,mem_le_pairing_mode 
+2fb5 c283afbf bbit1 le_pairing_mode_secure_connect_bit ,le_pairing_sm_after_auth_start_enc_sc 
+2fb6 7042fe0b jam flag_le_paring_send_enc_information ,mem_le_pairing_state 
+2fb7 20402f37 call le_send_smp_encryption_information 
+
+le_pairing_sm_after_auth_start_enc_common:
+2fb8 70064d29 jam bt_evt_le_enc_info ,mem_fifo_temp 
+2fb9 20407819 call ui_ipc_send_event 
+2fba 6fe0c3cf fetch 1 ,mem_device_option 
+2fbb c1850000 rtnne dvc_op_module 
+2fbc 20402f6e call le_check_master_addr_type 
+2fbd 20740000 rtn user 
+2fbe 2020379e branch app_ble_store_reconn_info 
+
+le_pairing_sm_after_auth_start_enc_sc:
+2fbf 7042fe0c jam flag_le_paring_send_master_identification ,mem_le_pairing_state 
+2fc0 20202fb8 branch le_pairing_sm_after_auth_start_enc_common 
+
+le_pairng_sm_send_enc_information:
+2fc1 7042fe0c jam flag_le_paring_send_master_identification ,mem_le_pairing_state 
+2fc2 20202f41 branch le_send_smp_master_identification 
+
+le_pairng_sm_send_master_indentification:
+2fc3 6fe0c2c5 fetch 1 ,mem_le_preq_resp_key_distribution 
+2fc4 6848c2cc fetcht 1 ,mem_le_pres_resp_key_distribution 
+2fc5 98417e00 iand temp ,pdata 
+2fc6 2fec0001 isolate0 le_initator_irk_bit ,pdata 
+2fc7 2020afcc branch le_parse_start_enc_rsp_after_auth_end ,true 
+2fc8 7042fe0d jam flag_le_paring_send_indentity_information ,mem_le_pairing_state 
+2fc9 20202f4d branch le_send_smp_identity_information 
+
+le_pairng_sm_send_indentity_information:
+2fca 20402f55 call le_send_smp_identity_address_information 
+2fcb 20202fcc branch le_parse_start_enc_rsp_after_auth_end 
+
+le_parse_start_enc_rsp_after_auth_end:
+2fcc 474a4032 bpatchx patch32_4 ,mem_patch32 
+2fcd 18000e07 force smp_pairing_timer ,queue 
+2fce 20407ce2 call timer_stop 
+2fcf 7042ffff jam flag_le_enc_end ,mem_le_enc_state 
+2fd0 7042feff jam flag_le_pairing_end ,mem_le_pairing_state 
+2fd1 70064d3e jam bt_evt_le_pairing_complete ,mem_fifo_temp 
+2fd2 20207819 branch ui_ipc_send_event 
+
+le_secure_connect_sm:
+2fd3 474ac032 bpatchx patch32_5 ,mem_patch32 
+2fd4 6fe0c300 fetch 1 ,mem_le_pairing_mode 
+2fd5 c4038000 rtnbit0 le_pairing_mode_secure_connect_bit 
+2fd6 6fe0c2fb fetch 1 ,mem_le_secure_connect_flag 
+2fd7 c1810000 rtnne le_sp_flag_commit_256 
+2fd8 7042fb00 jam sp_flag_standby ,mem_le_secure_connect_flag 
+2fd9 6fe0c2fc fetch 1 ,mem_le_secure_connect_state 
+2fda c000b01b beq le_sc_stat_receive_public_key ,le_sc_sm_receive_public_key 
+2fdb c0013022 beq le_sc_stat_wait_send_public_key ,le_sc_sm_wait_send_public_key 
+2fdc c001b013 beq le_sc_stat_send_public_key ,le_sc_sm_send_public_key 
+2fdd c0032ff8 beq le_sc_stat_receive_dhkey ,le_sc_sm_receive_dhkey 
+2fde c003afef beq le_sc_stat_wait_confirm_gkey ,le_sc_sm_wait_confirm_gkey 
+2fdf c0042fe5 beq le_sc_stat_passkey_wait_confirm ,le_sc_sm_passkey_wait_confirm 
+2fe0 20600000 rtn 
+
+le_sc_state_clear:
+2fe1 7042fb00 jam sp_flag_standby ,mem_le_secure_connect_flag 
+2fe2 7042fc00 jam le_sc_stat_null ,mem_le_secure_connect_state 
+2fe3 7042fd00 jam flag_le_sc_confrim_null ,mem_le_sc_confirm_gkey_flag 
+2fe4 20600000 rtn 
+
+le_sc_sm_passkey_wait_confirm:
+2fe5 6fe0c4e6 fetch 1 ,mem_authentication_passkey_times 
+2fe6 1fe20e00 copy pdata ,queue 
+2fe7 1fe0fe01 increase 1 ,pdata 
+2fe8 67e0c4e6 store 1 ,mem_authentication_passkey_times 
+2fe9 6fe24301 fetch 4 ,mem_le_tk 
+2fea afefffff qisolate1 pdata 
+2feb 58000080 setarg 0x80 
+2fec 7920fe00 setflag true ,0 ,pdata 
+2fed 67e0c4e7 store 1 ,mem_passkey_1bit 
+2fee 20203017 branch le_sc_sm_ready_send_pairing_confirm 
+
+le_sc_sm_wait_confirm_gkey:
+2fef 6fe0c2fd fetch 1 ,mem_le_sc_confirm_gkey_flag 
+2ff0 7042fd00 jam flag_le_sc_confrim_null ,mem_le_sc_confirm_gkey_flag 
+2ff1 c000aff4 beq flag_le_sc_confrim_gkey_ok ,le_sc_confirm_gkey_ok 
+2ff2 7042fb02 jam le_sp_flag_commit_256 ,mem_le_secure_connect_flag 
+2ff3 20600000 rtn 
+
+le_sc_confirm_gkey_ok:
+2ff4 70064d31 jam bt_evt_le_pairing_success ,mem_fifo_temp 
+2ff5 20407819 call ui_ipc_send_event 
+2ff6 7042fe09 jam flag_le_pairing_after_auth ,mem_le_pairing_state 
+2ff7 20202f89 branch le_send_smp_pairing_dhkey_check 
+
+le_sc_sm_receive_dhkey:
+2ff8 6fe085d7 fetch 1 ,mem_sp_dhkey_invalid 
+2ff9 c001affc beq sp_key_valid_256 ,le_dhkey_ready 
+2ffa 7042fb02 jam le_sp_flag_commit_256 ,mem_le_secure_connect_flag 
+2ffb 20600000 rtn 
+
+le_dhkey_ready:
+2ffc 2040716c call function_f5 
+2ffd 6fe0c300 fetch 1 ,mem_le_pairing_mode 
+2ffe c041b001 beq le_pairing_mode_secure_connect_passkey ,le_dhkey_ready_common 
+2fff c0423001 beq le_pairing_mode_secure_connect_passkey_res_input ,le_dhkey_ready_common 
+3000 20402ece call le_set_tk_0 
+
+le_dhkey_ready_common:
+3001 20407159 call function_f6_ea 
+3002 da2006af arg mem_aes_cmac_temp ,rega 
+3003 da40063c arg mem_sp_confirm_remote ,regb 
+3004 df200010 arg 16 ,loopcnt 
+3005 20407d66 call string_compare 
+3006 2022b009 branch le_dhkey_check_ok ,zero 
+
+le_dhkey_check_fail:
+3007 7001ba0b jam pairing_failed_dhkey_check_failed ,mem_le_ll_pairing_fail_reason 
+3008 20202f09 branch le_send_pairing_failed 
+
+le_dhkey_check_ok:
+3009 20407449 call sp_calc_check_publickey_256 
+300a 2422b007 nbranch le_dhkey_check_fail ,zero 
+300b 70429c01 jam 1 ,mem_ltk_exists 
+300c 6fe0c300 fetch 1 ,mem_le_pairing_mode 
+300d c040aff4 beq le_pairing_mode_secure_connect_justwork ,le_sc_confirm_gkey_ok 
+300e c041aff4 beq le_pairing_mode_secure_connect_passkey ,le_sc_confirm_gkey_ok 
+300f c0422ff4 beq le_pairing_mode_secure_connect_passkey_res_input ,le_sc_confirm_gkey_ok 
+3010 7042fb02 jam le_sp_flag_commit_256 ,mem_le_secure_connect_flag 
+3011 7042fc07 jam le_sc_stat_wait_confirm_gkey ,mem_le_secure_connect_state 
+3012 20600000 rtn 
+
+le_sc_sm_send_public_key:
+3013 6fe0c300 fetch 1 ,mem_le_pairing_mode 
+3014 c041b018 beq le_pairing_mode_secure_connect_passkey ,le_sc_sm_send_public_key_passkey 
+3015 c0423018 beq le_pairing_mode_secure_connect_passkey_res_input ,le_sc_sm_send_public_key_passkey 
+3016 7044e700 jam 0 ,mem_passkey_1bit 
+
+le_sc_sm_ready_send_pairing_confirm:
+3017 20202ef1 branch le_send_smp_pairing_confirm 
+
+le_sc_sm_send_public_key_passkey:
+3018 7044e600 jam 0 ,mem_authentication_passkey_times 
+3019 c1420000 rtneq le_pairing_mode_secure_connect_passkey_res_input 
+301a 20202ed1 branch le_parse_smp_pairing_req_passkey 
+
+le_sc_sm_receive_public_key:
+301b 7042fb02 jam le_sp_flag_commit_256 ,mem_le_secure_connect_flag 
+301c 6fe0c485 fetch 1 ,mem_sc_local_key_invalid 
+301d c001b01f beq sp_key_valid_256 ,le_public_key_ready 
+301e 20600000 rtn 
+
+le_public_key_ready:
+301f 7042fc02 jam le_sc_stat_wait_send_public_key ,mem_le_secure_connect_state 
+3020 7005d700 jam sp_key_invalid ,mem_sp_dhkey_invalid 
+3021 2020752a branch sp_dhkey_calc_256 
+
+le_sc_sm_wait_send_public_key:
+3022 7042fb02 jam le_sp_flag_commit_256 ,mem_le_secure_connect_flag 
+3023 7042fc03 jam le_sc_stat_send_public_key ,mem_le_secure_connect_state 
+3024 20202f83 branch le_send_smp_pairing_public_key 
+
+le_fifo_malloc_tx_l2cap_smp:
+3025 474b4032 bpatchx patch32_6 ,mem_patch32 
+3026 18002406 force le_l2cap_cid_smp ,regb 
+3027 202029d9 branch le_fifo_malloc_tx_l2cap 
+
+le_parse_ll:
+3028 6fe0804e fetch 1 ,mem_le_rxbuf_data_ll_opcode 
+3029 c000303f beq ll_connection_update_ind ,le_parse_connection_update_ind 
+302a c000b047 beq ll_channel_map_ind ,le_parse_channel_map_ind 
+302b c001304f beq ll_terminate_ind ,le_parse_terminate_ind 
+302c c001b053 beq ll_enc_req ,le_parse_enc_req 
+302d c0023071 beq ll_enc_rsp ,le_parse_enc_rsp 
+302e c002b076 beq ll_start_enc_req ,le_parse_start_enc_req 
+302f c003307a beq ll_start_enc_rsp ,le_parse_start_enc_rsp 
+3030 c003b07f beq ll_unknown_rsp ,le_parse_unknown_rsp 
+3031 c0043080 beq ll_feature_req ,le_parse_feature_req 
+3032 c004b081 beq ll_feature_rsp ,le_parse_feature_rsp 
+3033 c0053082 beq ll_pause_enc_req ,le_parse_pause_enc_req 
+3034 c005b086 beq ll_pause_enc_rsp ,le_parse_pause_enc_rsp 
+3035 c0063087 beq ll_version_ind ,le_parse_version_ind 
+3036 c006b089 beq ll_reject_ind ,le_parse_reject_ind 
+3037 c009308a beq ll_ping_req ,le_parse_ping_req 
+3038 c009b08b beq ll_ping_rsp ,le_parse_ping_rsp 
+3039 c00a308c beq ll_length_req ,le_parse_length_req 
+303a c00ab08e beq ll_length_rsp ,le_parse_length_rsp 
+303b c00b3099 beq ll_phy_req ,le_parse_phy_req 
+303c c00c309a beq ll_phy_update_ind ,le_parse_phy_update_ind 
+
+p_le_send_unknown_rsp:
+303d 6a60804e fetchr regc ,1 ,mem_le_rxbuf_data_ll_opcode 
+303e 202030bd branch le_send_unknown_rsp 
+
+le_parse_connection_update_ind:
+303f efe48006 ifetch 9 ,contr 
+3040 67e4819f store 9 ,mem_le_new_param 
+3041 efe10006 ifetch 2 ,contr 
+3042 67e10188 store 2 ,mem_le_instant 
+3043 6fe08168 fetch 1 ,mem_le_state 
+3044 79207e05 set1 lestate_update_param ,pdata 
+3045 67e08168 store 1 ,mem_le_state 
+3046 20600000 rtn 
+
+le_parse_channel_map_ind:
+3047 efe28006 ifetch 5 ,contr 
+3048 67e2819f store 5 ,mem_le_new_map 
+3049 efe10006 ifetch 2 ,contr 
+304a 67e10188 store 2 ,mem_le_instant 
+
+le_update_map_enable:
+304b 6fe08168 fetch 1 ,mem_le_state 
+304c 79207e06 set1 lestate_update_map ,pdata 
+304d 67e08168 store 1 ,mem_le_state 
+304e 20600000 rtn 
+
+le_parse_terminate_ind:
+304f 58000014 setarg 20 
+3050 67e10196 store 2 ,mem_le_superto 
+3051 67e142f7 store 2 ,mem_le_init_superto 
+3052 20600000 rtn 
+
+le_parse_enc_req:
+3053 efe40006 ifetch 8 ,contr 
+3054 67e44307 store 8 ,mem_le_rand 
+3055 efe10006 ifetch 2 ,contr 
+3056 67e14305 store 2 ,mem_le_ediv 
+3057 efe40006 ifetch 8 ,contr 
+3058 67e442e7 store 8 ,mem_le_skdm 
+3059 efe20006 ifetch 4 ,contr 
+305a 67e24475 store 4 ,mem_ccm_ivm 
+305b 204030aa call le_send_enc_rsp 
+305c 474bc032 bpatchx patch32_7 ,mem_patch32 
+305d 6fe0c2fe fetch 1 ,mem_le_pairing_state 
+305e c004b065 beq flag_le_pairing_after_auth ,le_parse_enc_req_after_auth 
+305f 6fe0c323 fetch 1 ,mem_le_configuration 
+3060 c280b068 bbit1 bit_ble_pairing_fixed_ltk ,le_parse_enc_req_fixed_ltk 
+3061 6fe0c403 fetch 1 ,mem_nv_data_number 
+3062 245a6e88 ncall load_device_list_mode_4 ,blank 
+3063 6fe0c29c fetch 1 ,mem_ltk_exists 
+3064 c000306d beq 0 ,le_ltk_lost 
+
+le_parse_enc_req_after_auth:
+3065 7042ff01 jam flag_le_rcv_enc_start ,mem_le_enc_state 
+3066 204030b8 call le_send_start_enc_req 
+3067 2020724a branch generate_sk 
+
+le_parse_enc_req_fixed_ltk:
+3068 70429c01 jam 1 ,mem_ltk_exists 
+3069 d8c04324 arg mem_le_fixed_ltk ,contr 
+306a d8a0428c arg mem_le_ltk ,contw 
+306b 20407c91 call memcpy16 
+306c 20203065 branch le_parse_enc_req_after_auth 
+
+le_ltk_lost:
+306d 7042ff00 jam flag_le_enc_null ,mem_le_enc_state 
+306e 7042fe00 jam flag_le_enc_null ,mem_le_pairing_state 
+306f 70064d41 jam bt_evt_le_ltk_lost ,mem_fifo_temp 
+3070 20207819 branch ui_ipc_send_event 
+
+le_parse_enc_rsp:
+3071 efe40006 ifetch 8 ,contr 
+3072 67e442ef store 8 ,mem_le_skds 
+3073 efe20006 ifetch 4 ,contr 
+3074 67e24479 store 4 ,mem_ccm_ivs 
+3075 2020724a branch generate_sk 
+
+le_parse_start_enc_req:
+3076 6fe08168 fetch 1 ,mem_le_state 
+3077 79207e04 set1 lestate_encryption ,pdata 
+3078 67e08168 store 1 ,mem_le_state 
+3079 20600000 rtn 
+
+le_parse_start_enc_rsp:
+307a 20748000 rtn master 
+307b 70064d32 jam bt_evt_le_start_enc ,mem_fifo_temp 
+307c 20407819 call ui_ipc_send_event 
+307d 7042ff04 jam flag_le_send_start_enc_rsp ,mem_le_enc_state 
+307e 202030bb branch le_send_start_enc_rsp 
+
+le_parse_unknown_rsp:
+307f 20600000 rtn 
+
+le_parse_feature_req:
+3080 202030c2 branch le_send_feature_rsp 
+
+le_parse_feature_rsp:
+3081 20600000 rtn 
+
+le_parse_pause_enc_req:
+3082 7042ff02 jam flag_le_enc_pause ,mem_le_enc_state 
+3083 204030c9 call le_send_pause_enc_rsp 
+3084 70064d33 jam bt_evt_le_pause_enc ,mem_fifo_temp 
+3085 20207819 branch ui_ipc_send_event 
+
+le_parse_pause_enc_rsp:
+3086 20600000 rtn 
+
+le_parse_version_ind:
+3087 20748000 rtn master 
+3088 202030cb branch le_send_version_ind 
+
+le_parse_reject_ind:
+3089 20600000 rtn 
+
+le_parse_ping_req:
+308a 202030d7 branch le_send_ping_rsp 
+
+le_parse_ping_rsp:
+308b 20600000 rtn 
+
+le_parse_length_req:
+308c 2040308e call le_parse_length_rsp 
+308d 202030db branch le_send_data_length_res 
+
+le_parse_length_rsp:
+308e efe40006 ifetch 8 ,contr 
+308f 67e443bc store 8 ,mem_remote_rx_max_octets 
+3090 6fe143bc fetch 2 ,mem_remote_rx_max_octets 
+3091 684943c8 fetcht 2 ,mem_local_tx_max_octets 
+3092 20407db2 call not_greater_than 
+3093 67e143bc store 2 ,mem_remote_rx_max_octets 
+3094 6fe143c0 fetch 2 ,mem_remote_tx_max_octets 
+3095 684943c4 fetcht 2 ,mem_local_rx_max_octets 
+3096 20407db2 call not_greater_than 
+3097 67e143c0 store 2 ,mem_remote_tx_max_octets 
+3098 20600000 rtn 
+
+le_parse_phy_req:
+3099 202030e1 branch le_send_phy_rsp 
+
+le_parse_phy_update_ind:
+309a efe10006 ifetch 2 ,contr 
+309b 67e1019f store 2 ,mem_le_new_m2s_phy 
+309c efe10006 ifetch 2 ,contr 
+309d 67e10188 store 2 ,mem_le_instant 
+309e 207a0000 rtn blank 
+309f 6fe08168 fetch 1 ,mem_le_state 
+30a0 79207e07 set1 lestate_update_phy ,pdata 
+30a1 67e08168 store 1 ,mem_le_state 
+30a2 20600000 rtn 
+
+le_send_terminate_ind_user_terminated:
+30a3 da600013 arg error_remote_user_terminated_connection ,regc 
+
+le_send_terminate_ind:
+30a4 da200002 arg 2 ,rega 
+30a5 da400002 arg ll_terminate_ind ,regb 
+30a6 204029d3 call le_fifo_malloc_tx_ll 
+30a7 1a627e00 copy regc ,pdata 
+30a8 e7e08005 istore 1 ,contw 
+30a9 20600000 rtn 
+
+le_send_enc_rsp:
+30aa d8a042ef arg mem_le_skds ,contw 
+30ab 18007208 force 8 ,loopcnt 
+30ac 20407dee call generate_random_loop 
+30ad d8a04479 arg mem_ccm_ivs ,contw 
+30ae 18007204 force 4 ,loopcnt 
+30af 20407dee call generate_random_loop 
+30b0 da20000d arg 13 ,rega 
+30b1 da400004 arg ll_enc_rsp ,regb 
+30b2 204029d3 call le_fifo_malloc_tx_ll 
+30b3 6fe442ef fetch 8 ,mem_le_skds 
+30b4 e7e40005 istore 8 ,contw 
+30b5 6fe24479 fetch 4 ,mem_ccm_ivs 
+30b6 e7e20005 istore 4 ,contw 
+30b7 20600000 rtn 
+
+le_send_start_enc_req:
+30b8 7042ff05 jam flag_le_send_start_enc_req ,mem_le_enc_state 
+30b9 da400005 arg ll_start_enc_req ,regb 
+30ba 202030eb branch le_send_ll_one_lenth 
+
+le_send_start_enc_rsp:
+30bb da400006 arg ll_start_enc_rsp ,regb 
+30bc 202030eb branch le_send_ll_one_lenth 
+
+le_send_unknown_rsp:
+30bd da200002 arg 2 ,rega 
+30be da400007 arg ll_unknown_rsp ,regb 
+30bf 204029d3 call le_fifo_malloc_tx_ll 
+30c0 e2608005 istorer regc ,1 ,contw 
+30c1 20600000 rtn 
+
+le_send_feature_rsp:
+30c2 da200009 arg 9 ,rega 
+30c3 da400009 arg ll_feature_rsp ,regb 
+30c4 204029d3 call le_fifo_malloc_tx_ll 
+30c5 6fe443b2 fetch 8 ,mem_le_local_feature 
+30c6 1fe1fe01 or pdata ,fun_ll_feature_le_encryption ,pdata 
+30c7 e7e40005 istore 8 ,contw 
+30c8 20600000 rtn 
+
+le_send_pause_enc_rsp:
+30c9 da40000b arg ll_pause_enc_rsp ,regb 
+30ca 202030eb branch le_send_ll_one_lenth 
+
+le_send_version_ind:
+30cb da200006 arg 6 ,rega 
+30cc da40000c arg ll_version_ind ,regb 
+30cd 204029d3 call le_fifo_malloc_tx_ll 
+30ce 6fe2c160 fetch 5 ,mem_version 
+30cf e7e28005 istore 5 ,contw 
+30d0 20600000 rtn 
+
+le_send_reject_ind:
+30d1 da200002 arg 2 ,rega 
+30d2 da40000d arg ll_reject_ind ,regb 
+30d3 204029d3 call le_fifo_malloc_tx_ll 
+30d4 58000006 setarg le_err_pin_or_key_missing 
+30d5 e7e08005 istore 1 ,contw 
+30d6 20600000 rtn 
+
+le_send_ping_rsp:
+30d7 da400013 arg ll_ping_rsp ,regb 
+30d8 202030eb branch le_send_ll_one_lenth 
+
+le_send_data_length_req:
+30d9 da400014 arg ll_length_req ,regb 
+30da 202030dc branch le_send_data_length 
+
+le_send_data_length_res:
+30db da400015 arg ll_length_rsp ,regb 
+
+le_send_data_length:
+30dc da200009 arg 9 ,rega 
+30dd 204029d3 call le_fifo_malloc_tx_ll 
+30de 6fe443c4 fetch 8 ,mem_local_rx_max_octets 
+30df e7e40005 istore 8 ,contw 
+30e0 20600000 rtn 
+
+le_send_phy_rsp:
+30e1 da200003 arg 3 ,rega 
+30e2 da400017 arg ll_phy_rsp ,regb 
+30e3 204029d3 call le_fifo_malloc_tx_ll 
+30e4 6fe0c3ba fetch 1 ,mem_le_tx_phys 
+30e5 1fe17e07 and pdata ,0x07 ,pdata 
+30e6 e7e08005 istore 1 ,contw 
+30e7 6fe0c3bb fetch 1 ,mem_le_rx_phys 
+30e8 1fe17e07 and pdata ,0x07 ,pdata 
+30e9 e7e08005 istore 1 ,contw 
+30ea 20600000 rtn 
+
+le_send_ll_one_lenth:
+30eb da200001 arg 1 ,rega 
+30ec 202029d3 branch le_fifo_malloc_tx_ll 
+
+g24_dispatch:
+30ed 474c4033 bpatchx patch33_0 ,mem_patch33 
+30ee c513b37c bmark1 mark_24g_rxmode ,g24_receive_dispatch 
+30ef c6930000 rtnmark0 mark_24g 
+30f0 202035db branch g24_transmit_dispatch 
+
+g24_prep:
+30f1 474cc033 bpatchx patch33_1 ,mem_patch33 
+30f2 7844fc00 disable enable_crc 
+30f3 7843fc00 disable enable_white 
+30f4 58555555 setarg 0x555555 
+30f5 98001e00 iforce crc24_init 
+30f6 6fe0c5a4 fetch 1 ,mem_24g_ch 
+30f7 2020259d branch le_prep_next 
+
+g24_receive_packet:
+30f8 474d4033 bpatchx patch33_2 ,mem_patch33 
+30f9 6fe0c5ce fetch 1 ,mem_24g_rx_phy 
+30fa 20402579 call le_enable_phy_by_pdata 
+30fb 6fe245a6 fetch 4 ,mem_24g_addr 
+30fc 98001200 iforce access 
+30fd 20402164 call set_sync_on 
+30fe 6848c5a4 fetcht 1 ,mem_24g_ch 
+30ff 204025a2 call le_rf_rx_enable 
+
+g24_receive_rxon:
+3100 204030f1 call g24_prep 
+3101 c597b105 bmark0 mark_ble_lr ,g24_receive_nolr 
+3102 783cfc00 pulse dewhiten_code_calc 
+3103 2000001e nop 30 
+3104 204030f1 call g24_prep 
+
+g24_receive_nolr:
+3105 7857fc00 disable user3 
+3106 7826fc00 enable decode_fec0 
+3107 7830fc00 enable is_rx 
+3108 78507c00 disable is_tx 
+3109 78287c00 enable swfine 
+310a 6fe145a2 fetch 2 ,mem_24g_rx_window 
+310b 98003600 iforce stop_watch 
+310c 37c18400 correlate null ,timeout 
+310d 242c315f nbranch g24_sync_timeout ,sync 
+310e 204066e7 call rf_debug_rx_sync_line 
+310f c517b114 bmark1 mark_ble_lr ,g24_receive_skip_fec1 
+3110 6fe0c5e1 fetch 1 ,mem_24g_disable_fec1 
+3111 243a3114 nbranch g24_receive_skip_fec1 ,blank 
+3112 7846fc00 disable decode_fec0 
+3113 7825fc00 enable decode_fec1 
+
+g24_receive_skip_fec1:
+3114 7823fc00 enable enable_white 
+3115 7824fc00 enable enable_crc 
+3116 2040315c call g24_receive_byte 
+3117 67e0c5c4 store 1 ,mem_24g_get_syncword_crc8 
+3118 6848c5c3 fetcht 1 ,mem_24g_syncword_crc8 
+3119 98467c00 isub temp ,null 
+311a 2422b167 nbranch g24_hec_error ,zero 
+
+g24_receive_payload:
+311b 474dc033 bpatchx patch33_3 ,mem_patch33 
+311c 7858fc00 disable user7 
+311d 280ffe2f isolate1 mark_ble_lr ,mark 
+311e 2040b14e call g24_lr_receive_pdu_len ,true 
+311f 2038b169 branch g24_lr_len_error ,user7 
+3120 2040315c call g24_receive_byte 
+3121 67e0c50e store 1 ,mem_24g_rxbuf 
+3122 c513b127 bmark1 mark_24g_rxmode ,g24_receive_skip 
+3123 6fe0c50e fetch 1 ,mem_24g_rxbuf 
+3124 6848c5a0 fetcht 1 ,mem_24g_data_type 
+3125 a8400e00 icompare bits_data ,temp 
+3126 2420b16b nbranch g24_type_error ,true 
+
+g24_receive_skip:
+3127 2040315c call g24_receive_byte 
+3128 280ffe2f isolate1 mark_ble_lr ,mark 
+3129 2040b157 call g24_lr_receive_payload_len ,true 
+312a e7e08005 istore 1 ,contw 
+312b 1fe97e00 rshift3 pdata ,pdata 
+312c 1fe67c1f sub pdata ,0x1f ,null 
+312d 2421316d nbranch g24_len_over_error ,positive 
+312e 1fe27200 copy pdata ,loopcnt 
+312f 2022b133 branch g24rx_nopayload ,zero 
+
+g24rx_loop:
+3130 2040315c call g24_receive_byte 
+3131 e7e08005 istore 1 ,contw 
+3132 c2003130 loop g24rx_loop 
+
+g24rx_nopayload:
+3133 c513b138 bmark1 mark_24g_rxmode ,g24_receive_skip_rssi 
+3134 18a22200 copy contw ,rega 
+3135 2040315c call g24_receive_byte 
+3136 67e0c5ea store 1 ,mem_rssi_hex_received 
+3137 1a220a00 copy rega ,contw 
+
+g24_receive_skip_rssi:
+3138 09800018 parse demod ,bucket ,24 
+3139 1fef7e00 rshift32 pdata ,pdata 
+313a 1ff17e00 rshift16 pdata ,pdata 
+313b e7e18005 istore 3 ,contw 
+313c 6fe0c5e1 fetch 1 ,mem_24g_disable_fec1 
+313d 243a314c nbranch g24_receive_skip_disable_fec1 ,blank 
+313e 7845fc00 disable decode_fec1 
+
+g24_receive_skip_next:
+313f 280ffe27 isolate1 mark_24g_rxmode ,mark 
+3140 2040b5a0 call save_rssi_dec ,true 
+3141 2023316f branch g24_crc_error ,crc_failed 
+3142 204066e6 call rf_debug_rx_crc_line 
+3143 474e4033 bpatchx patch33_4 ,mem_patch33 
+3144 7837fc00 enable user3 
+3145 2040268f call le_match_set_txfreq 
+3146 c6138000 rtnmark1 mark_24g_rxmode 
+3147 6fe0c5ea fetch 1 ,mem_rssi_hex_received 
+3148 6848c641 fetcht 1 ,mem_rssi_hex_received_max_value 
+3149 98467c00 isub temp ,null 
+314a 20417db4 call copy_temp2pdata ,positive 
+314b 202035a3 branch rssi_signal 
+
+g24_receive_skip_disable_fec1:
+314c 7846fc00 disable decode_fec0 
+314d 2020313f branch g24_receive_skip_next 
+
+g24_lr_receive_pdu_len:
+314e 2040315c call g24_receive_byte 
+314f 1fe67c01 sub pdata ,1 ,null 
+3150 20217dc4 branch enable_user7 ,positive 
+3151 1fe0fffe increase -2 ,pdata 
+3152 c513b155 bmark1 mark_24g_rxmode ,g24_lr_receive_pdu_norssi 
+3153 203a7dc4 branch enable_user7 ,blank 
+3154 1fe0ffff increase -1 ,pdata 
+
+g24_lr_receive_pdu_norssi:
+3155 67e08656 store 1 ,mem_temp 
+3156 20600000 rtn 
+
+g24_lr_receive_payload_len:
+3157 1fe17e07 and_into 0x07 ,pdata 
+3158 68488656 fetcht 1 ,mem_temp 
+3159 18498400 lshift3 temp ,temp 
+315a 9841fe00 ior temp ,pdata 
+315b 20600000 rtn 
+
+g24_receive_byte:
+315c 09800008 parse demod ,bucket ,8 
+315d 19897e00 rshift3 pwindow ,pdata 
+315e 20600000 rtn 
+
+g24_sync_timeout:
+315f 7045e201 jam err_sync_to ,mem_24g_off_type 
+3160 280ffe27 isolate1 mark_24g_rxmode ,mark 
+3161 2040b5bb call rssi_noise ,true 
+
+g24_end_of_packet:
+3162 474ec033 bpatchx patch33_5 ,mem_patch33 
+3163 20402591 call le_disable 
+3164 784dfc00 disable encode_fec1 
+3165 7845fc00 disable decode_fec1 
+3166 202020cf branch end_of_packet 
+
+g24_hec_error:
+3167 7045e202 jam err_hec ,mem_24g_off_type 
+3168 20203162 branch g24_end_of_packet 
+
+g24_lr_len_error:
+3169 7045e203 jam err_lr_len ,mem_24g_off_type 
+316a 20203162 branch g24_end_of_packet 
+
+g24_type_error:
+316b 7045e204 jam err_type ,mem_24g_off_type 
+316c 20203162 branch g24_end_of_packet 
+
+g24_len_over_error:
+316d 7045e205 jam err_len_over ,mem_24g_off_type 
+316e 20203162 branch g24_end_of_packet 
+
+g24_crc_error:
+316f 7045e206 jam err_crc ,mem_24g_off_type 
+3170 20203162 branch g24_end_of_packet 
+
+g24_set_freq_tx:
+3171 20402164 call set_sync_on 
+3172 6848c5a4 fetcht 1 ,mem_24g_ch 
+3173 202021ff branch set_freq_tx 
+
+g24_transmit:
+3174 474f4033 bpatchx patch33_6 ,mem_patch33 
+3175 6fe0c5cf fetch 1 ,mem_24g_tx_phy 
+3176 20402579 call le_enable_phy_by_pdata 
+3177 6fe245a6 fetch 4 ,mem_24g_addr 
+3178 98001200 iforce access 
+3179 204030f1 call g24_prep 
+317a 20403171 call g24_set_freq_tx 
+317b 79202a00 set1 txgfsk ,radio_ctrl 
+317c 782efc00 enable encode_fec0 
+317d 78307c00 enable is_tx 
+317e 7850fc00 disable is_rx 
+317f 204066ed call rf_debug_tx_on_line 
+3180 785d7c00 disable lr_s2en 
+3181 c517b1a6 bmark1 mark_ble_lr ,g24_transmit_lr 
+3182 c516b1b8 bmark1 mark_ble_2m ,g24_transmit_2m 
+3183 19317e00 rshift16 access ,pdata 
+3184 1fecfe00 rshift8 pdata ,pdata 
+3185 1ff1fe00 rshift4 pdata ,pdata 
+3186 08008628 inject mod ,40 
+
+g24_transmit_packet:
+3187 474fc033 bpatchx patch33_7 ,mem_patch33 
+3188 c517b18d bmark1 mark_ble_lr ,g24_transmit_nolr 
+3189 6fe0c5e1 fetch 1 ,mem_24g_disable_fec1 
+318a 243a318d nbranch g24_transmit_nolr ,blank 
+318b 784efc00 disable encode_fec0 
+318c 782dfc00 enable encode_fec1 
+
+g24_transmit_nolr:
+318d 7823fc00 enable enable_white 
+318e 7824fc00 enable enable_crc 
+318f 6fe0c5a1 fetch 1 ,mem_24g_txlen 
+3190 98007200 iforce loopcnt 
+3191 d8c04550 arg mem_24g_txpayload ,contr 
+
+g24tr_loop:
+3192 efe08006 ifetch 1 ,contr 
+3193 08008608 inject mod ,8 
+3194 c2003192 loop g24tr_loop 
+3195 78247c00 enable enable_parity 
+3196 08008618 inject mod ,24 
+3197 78447c00 disable enable_parity 
+3198 c597b19c bmark0 mark_ble_lr ,g24_transmit_skip 
+3199 7843fc00 disable enable_white 
+319a 58000000 setarg 0 
+319b 08008603 inject mod ,3 
+
+g24_transmit_skip:
+319c 37d38200 until null ,tx_clear 
+319d 20000064 nop 100 
+319e 785d7c00 disable lr_s2en 
+319f 784efc00 disable encode_fec0 
+31a0 6fe0c5e1 fetch 1 ,mem_24g_disable_fec1 
+31a1 243a31a3 nbranch g24_transmit_skip_disable_fec1 ,blank 
+31a2 784dfc00 disable encode_fec1 
+
+g24_transmit_skip_disable_fec1:
+31a3 785c7c00 disable encode_fec3 
+31a4 20402164 call set_sync_on 
+31a5 202066eb branch rf_debug_tx_off_line 
+
+g24_transmit_lr:
+31a6 df20000a arg 10 ,loopcnt 
+
+g24_transmit_lr_preamble_loop:
+31a7 5800003c setarg 0x3c 
+31a8 08008608 inject mod ,8 
+31a9 c20031a7 loop g24_transmit_lr_preamble_loop 
+31aa 784efc00 disable encode_fec0 
+31ab 783c7c00 enable encode_fec3 
+31ac 19317e00 rshift16 access ,pdata 
+31ad 1ff17e00 rshift16 pdata ,pdata 
+31ae 1ff1fe00 rshift4 pdata ,pdata 
+31af 08008620 inject mod ,32 
+31b0 c51731b5 bmark1 mark_ble_lr_s8 ,g24_transmit_lr_s8 
+
+g24_transmit_lr_s2:
+31b1 58000001 setarg 1 
+31b2 08008605 inject mod ,5 
+31b3 783d7c00 enable lr_s2en 
+31b4 20203187 branch g24_transmit_packet 
+
+g24_transmit_lr_s8:
+31b5 58000000 setarg 0 
+31b6 08008605 inject mod ,5 
+31b7 20203187 branch g24_transmit_packet 
+
+g24_transmit_2m:
+31b8 6fe0c148 fetch 1 ,mem_system_clk 
+31b9 1fe37200 rshift pdata ,loopcnt 
+
+g24_transmit_2m_dealy:
+31ba 20000002 nop 2 
+31bb c20031ba loop g24_transmit_2m_dealy 
+31bc 19317e00 rshift16 access ,pdata 
+31bd 1fecfe00 rshift8 pdata ,pdata 
+31be 1ff18400 rshift4 pdata ,temp 
+31bf 18427e00 copy temp ,pdata 
+31c0 08008608 inject mod ,8 
+31c1 18427e00 copy temp ,pdata 
+31c2 08008628 inject mod ,40 
+31c3 20203187 branch g24_transmit_packet 
+
+g24_transmit_prep:
+31c4 47504034 bpatchx patch34_0 ,mem_patch34 
+31c5 6fe0c5cf fetch 1 ,mem_24g_tx_phy 
+31c6 c28131e5 bbit1 bit_le_coded_phy ,g24_lr_transmit_prep 
+31c7 6fe0c59f fetch 1 ,mem_24g_datalen 
+31c8 1fe0fe03 increase 3 ,pdata 
+31c9 67e0c5a1 store 1 ,mem_24g_txlen 
+31ca 6fe0c5c3 fetch 1 ,mem_24g_syncword_crc8 
+31cb 67e0c550 store 1 ,mem_24g_txpayload 
+31cc 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+31cd e7e08005 istore 1 ,contw 
+31ce 6fe0c59f fetch 1 ,mem_24g_datalen 
+
+g24_transmit_prep_pdu:
+31cf 1fe9fe00 lshift3 pdata ,pdata 
+31d0 6848c595 fetcht 1 ,mem_24g_pid 
+31d1 18410403 and temp ,0x03 ,temp 
+31d2 18438400 lshift temp ,temp 
+31d3 9841fe00 ior temp ,pdata 
+31d4 6848c596 fetcht 1 ,mem_24g_no_ack 
+31d5 9840fe00 iadd temp ,pdata 
+31d6 e7e08005 istore 1 ,contw 
+31d7 6fe0c59f fetch 1 ,mem_24g_datalen 
+31d8 98007200 iforce loopcnt 
+31d9 d8c04530 arg mem_24g_txbuf ,contr 
+31da 20407cdc call memcpy 
+
+g24_transmit_prep_next:
+31db 4750c034 bpatchx patch34_1 ,mem_patch34 
+31dc c6938000 rtnmark0 mark_24g_rxmode 
+31dd 6fe08035 fetch 1 ,mem_rssi_hex 
+31de e7e08005 istore 1 ,contw 
+31df 6fe0c5cf fetch 1 ,mem_24g_tx_phy 
+31e0 c3810000 rtnbit1 bit_le_coded_phy 
+31e1 6fe0c5a1 fetch 1 ,mem_24g_txlen 
+31e2 1fe0fe01 increase 1 ,pdata 
+31e3 67e0c5a1 store 1 ,mem_24g_txlen 
+31e4 20600000 rtn 
+
+g24_lr_transmit_prep:
+31e5 6fe0c59f fetch 1 ,mem_24g_datalen 
+31e6 1fe0fe04 increase 4 ,pdata 
+31e7 c593b1e9 bmark0 mark_24g_rxmode ,g24_lr_transmit_prep_skip 
+31e8 1fe0fe01 increase 1 ,pdata 
+
+g24_lr_transmit_prep_skip:
+31e9 67e0c5a1 store 1 ,mem_24g_txlen 
+31ea 6fe0c5c3 fetch 1 ,mem_24g_syncword_crc8 
+31eb 67e0c550 store 1 ,mem_24g_txpayload 
+31ec 6fe0c5a1 fetch 1 ,mem_24g_txlen 
+31ed 1fe0fffe increase -2 ,pdata 
+31ee e7e08005 istore 1 ,contw 
+31ef 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+31f0 e7e08005 istore 1 ,contw 
+31f1 58000000 setarg 0 
+31f2 202031cf branch g24_transmit_prep_pdu 
+
+g24_read_len_pid_crc:
+31f3 47514034 bpatchx patch34_2 ,mem_patch34 
+31f4 6fe0c50f fetch 1 ,mem_24g_rxbuf + 1 
+31f5 1fe97e00 rshift3 pdata ,pdata 
+31f6 67e0c594 store 1 ,mem_24g_rxdata_length 
+31f7 1fe0fe01 increase 1 ,pdata 
+31f8 d8c0450f arg mem_24g_rxbuf + 1 ,contr 
+31f9 98c08c00 iadd contr ,contr 
+31fa efe18006 ifetch 3 ,contr 
+31fb 67e1c597 store 3 ,mem_24g_sta_crc 
+31fc 6fe0c50f fetch 1 ,mem_24g_rxbuf + 1 
+31fd 1fe37e00 rshift pdata ,pdata 
+31fe 1fe17e03 and pdata ,0x03 ,pdata 
+31ff 67e0c59d store 1 ,mem_24g_sta_pid 
+3200 20600000 rtn 
+
+g24_ch:
+3201 4751c034 bpatchx patch34_3 ,mem_patch34 
+3202 6848c5a5 fetcht 1 ,mem_24g_current_ch_number 
+3203 20403206 call g24_ch_map_size 
+3204 6048c5a5 storet 1 ,mem_24g_current_ch_number 
+3205 20600000 rtn 
+
+g24_ch_map_size:
+3206 47524034 bpatchx patch34_4 ,mem_patch34 
+3207 2040320b call g24_ch_calc 
+3208 18408401 increase 1 ,temp 
+3209 18410403 and_into 3 ,temp 
+320a 20600000 rtn 
+
+g24_ch_calc:
+320b 4752c034 bpatchx patch34_5 ,mem_patch34 
+320c 6fe0c5a6 fetch 1 ,mem_24g_addr 
+320d 1fe17e03 and_into 0x03 ,pdata 
+320e 1fefa204 mul32 pdata ,4 ,rega 
+320f 580045aa setarg mem_24g_ch_map1 
+3210 9a20fe00 iadd rega ,pdata 
+3211 98408c00 iadd temp ,contr 
+3212 efe08006 ifetch 1 ,contr 
+3213 67e0c5a4 store 1 ,mem_24g_ch 
+3214 20600000 rtn 
+
+g24_update_addr_and_synccrc8:
+3215 67e245a6 store 4 ,mem_24g_addr 
+3216 47534034 bpatchx patch34_6 ,mem_patch34 
+
+g24_syncword_crc8:
+3217 da200000 arg 0 ,rega 
+3218 df200004 arg 4 ,loopcnt 
+3219 d8c045a6 arg mem_24g_addr ,contr 
+
+g24_syncword_crc8_loop:
+321a efe08006 ifetch 1 ,contr 
+321b 9a20a200 iadd rega ,rega 
+321c c200321a loop g24_syncword_crc8_loop 
+321d 1a227e00 copy rega ,pdata 
+321e 67e145c1 store 2 ,mem_24g_syncword 
+321f 6fe0c5c1 fetch 1 ,mem_24g_syncword 
+3220 6848c5c2 fetcht 1 ,mem_24g_syncword + 1 
+3221 9840fe00 iadd temp ,pdata 
+3222 67e0c5c3 store 1 ,mem_24g_syncword_crc8 
+3223 20600000 rtn 
+
+g24_timer_check:
+3224 4753c034 bpatchx patch34_7 ,mem_patch34 
+3225 20407dbe call disable_user 
+3226 684a45ba fetcht 4 ,mem_24g_tx_btclk 
+3227 1c427e00 copy clkn_bt ,pdata 
+3228 98467c00 isub temp ,null 
+3229 24413234 ncall g24_timer_timeout ,positive 
+322a 1fe22400 copy pdata ,regb 
+322b 6fe245ba fetch 4 ,mem_24g_tx_btclk 
+322c 6848c5be fetcht 1 ,mem_24g_interval 
+322d 98408400 iadd temp ,temp 
+322e 1a427e00 copy regb ,pdata 
+322f 98467c00 isub temp ,null 
+3230 24610000 nrtn positive 
+3231 793ffe1c set0 28 ,pdata 
+3232 67e245ba store 4 ,mem_24g_tx_btclk 
+3233 20207dbc branch enable_user 
+
+g24_timer_timeout:
+3234 20628000 rtn zero 
+3235 79207e1c set1 28 ,pdata 
+3236 20600000 rtn 
+
+g24_timer_init:
+3237 58000000 setarg 0 
+3238 67e245ba store 4 ,mem_24g_tx_btclk 
+3239 20600000 rtn 
+
+g24_chmap_param_init:
+323a 47544035 bpatchx patch35_0 ,mem_patch35 
+323b 38001300 setsect 0 ,0x1300 
+323c 3805908b setsect 1 ,0x1908b 
+323d 380b6150 setsect 2 ,0x36150 
+323e 380c3d20 setsect 3 ,0x3d20 
+323f 67e4c5aa store 9 ,mem_24g_ch_map1 
+3240 38003a1a setsect 0 ,0x3a1a 
+3241 3804c453 setsect 1 ,0xc453 
+3242 3808d312 setsect 2 ,0xd312 
+3243 380c0001 setsect 3 ,0x1 
+3244 e7e38005 istore 7 ,contw 
+3245 6fe0c5d0 fetch 1 ,mem_24g_ch_map_update 
+3246 207a0000 rtn blank 
+3247 d8c045d1 arg mem_24g_ch_update_map1 ,contr 
+3248 d8a045aa arg mem_24g_ch_map1 ,contw 
+3249 20207c91 branch memcpy16 
+
+g24_chamap_param_update:
+324a 4754c035 bpatchx patch35_1 ,mem_patch35 
+324b 584e001e setarg 0x4e001e 
+324c 67e1c5d2 store 3 ,mem_24g_ch_update_map1 + 1 
+324d 58032303 setarg 0x032303 
+324e e7e18005 istore 3 ,contw 
+324f 58250642 setarg 0x250642 
+3250 e7e18005 istore 3 ,contw 
+3251 58094c06 setarg 0x094c06 
+3252 e7e18005 istore 3 ,contw 
+3253 583c0927 setarg 0x3c0927 
+3254 e7e18005 istore 3 ,contw 
+3255 7045d001 jam 1 ,mem_24g_ch_map_update 
+3256 20600000 rtn 
+
+g24_rx_window_init:
+3257 47554035 bpatchx patch35_2 ,mem_patch35 
+3258 d8406978 arg 0x6978 ,temp 
+3259 c513b25e bmark1 mark_24g_rxmode ,g24_rx_window_store 
+325a d84012c0 arg 0x12c0 ,temp 
+325b 6fe0c5ce fetch 1 ,mem_24g_rx_phy 
+325c c301325e bbit0 2 ,g24_rx_window_store 
+325d d8402ee0 arg 0x2ee0 ,temp 
+
+g24_rx_window_store:
+325e 604945a2 storet 2 ,mem_24g_rx_window 
+325f 20600000 rtn 
+
+g24_enable_1m:
+3260 7045ce01 jam 0x01 ,mem_24g_rx_phy 
+3261 7045cf01 jam 0x01 ,mem_24g_tx_phy 
+3262 20600000 rtn 
+
+g24_enable_2m:
+3263 7045ce02 jam 0x02 ,mem_24g_rx_phy 
+3264 7045cf02 jam 0x02 ,mem_24g_tx_phy 
+3265 20600000 rtn 
+
+g24_pair_param_init:
+3266 4755c035 bpatchx patch35_3 ,mem_patch35 
+3267 7045e74e jam 0x4e ,mem_24g_pair_ch 
+3268 58101520 setarg 0x101520 
+3269 67e1c5e3 store 3 ,mem_24g_pair_addr 
+326a 58000005 setarg 0x05 
+326b 20207dce branch istore_1_contw_rtn 
+
+g24_pair_timeout_timer:
+326c da6045ef arg mem_24g_pair_timeout ,regc 
+326d da403653 arg g24_stop_24g_mode ,regb 
+326e 2020375c branch timer_single_step_2b 
+
+g24_pair_start:
+326f 79200026 set1 mark_24g ,mark 
+3270 6fe0c613 fetch 1 ,mem_24g_conn_sm 
+3271 793ffe02 set0 state_24g_reconn ,pdata 
+3272 79207e01 set1 state_24g_pair ,pdata 
+3273 67e0c613 store 1 ,mem_24g_conn_sm 
+3274 58000000 setarg 0 
+3275 67e145f5 store 2 ,mem_24g_reconn_timeout 
+3276 6fe145ed fetch 2 ,mem_24g_pair_timeout_init 
+3277 67e145ef store 2 ,mem_24g_pair_timeout 
+3278 7045ec00 jam 0 ,mem_24g_pair_no_ack 
+3279 204032b4 call g24_pair_sm_reinit 
+
+g24_pair_init_param:
+327a 70459500 jam 0 ,mem_24g_pid 
+327b 6fe0c5e7 fetch 1 ,mem_24g_pair_ch 
+327c 67e0c5a4 store 1 ,mem_24g_ch 
+327d 6fe0c5e8 fetch 1 ,mem_24g_pair_tx_power 
+327e 67e0c141 store 1 ,mem_tx_power 
+327f 6fe245e3 fetch 4 ,mem_24g_pair_addr 
+3280 20203215 branch g24_update_addr_and_synccrc8 
+
+g24_pair_dispatch:
+3281 47564035 bpatchx patch35_4 ,mem_patch35 
+3282 7045f900 jam default_24g_device ,mem_24g_reconn_type 
+3283 6fe145f1 fetch 2 ,mem_24g_pair_count 
+3284 1fe0fe01 increase 1 ,pdata 
+3285 67e145f1 store 2 ,mem_24g_pair_count 
+3286 6fe0c5f1 fetch 1 ,mem_24g_pair_count 
+3287 1fe17eff and pdata ,0xff ,pdata 
+3288 247a0000 nrtn blank 
+3289 6fe0c5eb fetch 1 ,mem_24g_pair_sm 
+328a c07fb2d6 beq state_24g_pairing_success ,g24_pair_exit 
+328b c000b290 beq state_24g_pairing_1 ,g24_pair_sm_1 
+328c c0013292 beq state_24g_pairing_2 ,g24_pair_sm_2 
+328d c001b298 beq state_24g_pairing_3 ,g24_pair_sm_3 
+328e c002329e beq state_24g_pairing_4 ,g24_pair_sm_4 
+328f 20600000 rtn 
+
+g24_pair_sm_1:
+3290 704530ff jam datatype_attemp ,mem_24g_txbuf 
+3291 2020329f branch g24_pair_sm_prep 
+
+g24_pair_sm_2:
+3292 6fe0c5c5 fetch 1 ,mem_24g_pair_switch 
+3293 203a3296 branch g24_pair_sm_2_skip ,blank 
+3294 6fe2461b fetch 4 ,mem_24g_device_addr 
+3295 20403215 call g24_update_addr_and_synccrc8 
+
+g24_pair_sm_2_skip:
+3296 704530aa jam datatype_bind ,mem_24g_txbuf 
+3297 2020329f branch g24_pair_sm_prep 
+
+g24_pair_sm_3:
+3298 70453055 jam datatype_config ,mem_24g_txbuf 
+3299 6fe0c5c5 fetch 1 ,mem_24g_pair_switch 
+329a 203a329f branch g24_pair_sm_prep ,blank 
+329b 6fe245ff fetch 4 ,mem_24g_receiver_addr 
+329c 67e24532 store 4 ,mem_24g_txbuf + 2 
+329d 202032a1 branch g24_pair_sm_common 
+
+g24_pair_sm_4:
+329e 70453022 jam datatype_ok ,mem_24g_txbuf 
+
+g24_pair_sm_prep:
+329f 6fe2461b fetch 4 ,mem_24g_device_addr 
+32a0 67e24532 store 4 ,mem_24g_txbuf + 2 
+
+g24_pair_sm_common:
+32a1 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+32a2 1fe17e07 and_into bits_data ,pdata 
+32a3 67e0c531 store 1 ,mem_24g_txbuf + 1 
+32a4 70453600 jam 0 ,mem_24g_txbuf + 6 
+32a5 70459f07 jam 7 ,mem_24g_datalen 
+32a6 204031c4 call g24_transmit_prep 
+32a7 2040362a call g24_transmit_receive_ack 
+32a8 246c0000 nrtn sync 
+32a9 24778000 nrtn user3 
+32aa 20403553 call g24_txbuf_clear 
+32ab 20403647 call g24_ackpayload_parse 
+
+g24_pair_sm_common_next:
+32ac 4756c035 bpatchx patch35_5 ,mem_patch35 
+32ad 6fe0c5eb fetch 1 ,mem_24g_pair_sm 
+32ae c17f8000 rtneq state_24g_pairing_success 
+32af c000b2b9 beq state_24g_pairing_1 ,g24_pair_sm_1_waiting_ack 
+32b0 c00132bb beq state_24g_pairing_2 ,g24_pair_sm_2_waiting_ack 
+32b1 c001b2c1 beq state_24g_pairing_3 ,g24_pair_sm_3_waiting_ack 
+32b2 c00232c9 beq state_24g_pairing_4 ,g24_pair_sm_4_waiting_ack 
+32b3 20600000 rtn 
+
+g24_pair_sm_reinit:
+32b4 7045eb02 jam state_24g_pairing_2 ,mem_24g_pair_sm 
+32b5 6fe0c5c5 fetch 1 ,mem_24g_pair_switch 
+32b6 207a0000 rtn blank 
+32b7 7045eb01 jam state_24g_pairing_1 ,mem_24g_pair_sm 
+32b8 20600000 rtn 
+
+g24_pair_sm_1_waiting_ack:
+32b9 7045eb02 jam state_24g_pairing_2 ,mem_24g_pair_sm 
+32ba 20203625 branch g24_transmit_abandon 
+
+g24_pair_sm_2_waiting_ack:
+32bb 6fe0c5c5 fetch 1 ,mem_24g_pair_switch 
+32bc 203a32bf branch g24_pair_sm_2_waiting_ack_skip ,blank 
+32bd 6fe24576 fetch 4 ,mem_24g_rxpayload + 2 
+32be 67e245ff store 4 ,mem_24g_receiver_addr 
+
+g24_pair_sm_2_waiting_ack_skip:
+32bf 7045eb03 jam state_24g_pairing_3 ,mem_24g_pair_sm 
+32c0 20203625 branch g24_transmit_abandon 
+
+g24_pair_sm_3_waiting_ack:
+32c1 6fe0c5c5 fetch 1 ,mem_24g_pair_switch 
+32c2 203a32c7 branch g24_pair_sm_3_waiting_ack_skip ,blank 
+32c3 6fe24576 fetch 4 ,mem_24g_rxpayload + 2 
+32c4 684a461b fetcht 4 ,mem_24g_device_addr 
+32c5 98467c00 isub temp ,null 
+32c6 24628000 nrtn zero 
+
+g24_pair_sm_3_waiting_ack_skip:
+32c7 7045eb04 jam state_24g_pairing_4 ,mem_24g_pair_sm 
+32c8 20203625 branch g24_transmit_abandon 
+
+g24_pair_sm_4_waiting_ack:
+32c9 6fe0c5c5 fetch 1 ,mem_24g_pair_switch 
+32ca 203a32cf branch g24_pair_sm_4_waiting_ack_skip ,blank 
+32cb 6fe24576 fetch 4 ,mem_24g_rxpayload + 2 
+32cc 684a45ff fetcht 4 ,mem_24g_receiver_addr 
+32cd 98467c00 isub temp ,null 
+32ce 24628000 nrtn zero 
+
+g24_pair_sm_4_waiting_ack_skip:
+32cf 7045ebff jam state_24g_pairing_success ,mem_24g_pair_sm 
+32d0 70064d39 jam bt_evt_24g_pairing_complete ,mem_fifo_temp 
+32d1 20407819 call ui_ipc_send_event 
+32d2 58000000 setarg 0 
+32d3 67e145ef store 2 ,mem_24g_pair_timeout 
+32d4 6fe24576 fetch 4 ,mem_24g_rxpayload + 2 
+32d5 20403215 call g24_update_addr_and_synccrc8 
+
+g24_pair_exit:
+32d6 6fe0c613 fetch 1 ,mem_24g_conn_sm 
+32d7 793ffe01 set0 state_24g_pair ,pdata 
+32d8 67e0c613 store 1 ,mem_24g_conn_sm 
+32d9 20203625 branch g24_transmit_abandon 
+
+g24_bind_mode_enable:
+32da 70462d01 jam dongle_bind ,mem_24g_work_mode 
+32db 70462c00 jam clear_init ,mem_24g_mode_init 
+32dc 20600000 rtn 
+
+g24_bind_init:
+32dd 6fe0c62c fetch 1 ,mem_24g_mode_init 
+32de c3808000 rtnbit1 dongle_bind 
+32df 79207e01 set1 dongle_bind ,pdata 
+32e0 67e0c62c store 1 ,mem_24g_mode_init 
+32e1 58000000 setarg 0 
+32e2 67e1c5ea store 3 ,mem_24g_device1_bind_step 
+32e3 67e0c5f5 store 1 ,mem_24g_device1_bind_disable 
+32e4 67e0c5f6 store 1 ,mem_24g_device2_bind_disable 
+32e5 67e24643 store 4 ,mem_24g_transmitter_addr 
+32e6 70462801 jam 1 ,mem_24g_ackpayload_enable 
+32e7 2020327a branch g24_pair_init_param 
+
+g24_bind_ackpayload_prep:
+32e8 70459f08 jam 0x08 ,mem_24g_datalen 
+32e9 d8c045ed arg mem_24g_bind_payload ,contr 
+32ea d8a04530 arg mem_24g_txbuf ,contw 
+32eb 20207c8b branch memcpy8 
+
+g24_bind_data_process:
+32ec 47574035 bpatchx patch35_6 ,mem_patch35 
+32ed 20403397 call g24_rx_interrupt_clear 
+32ee 204030f8 call g24_receive_packet 
+32ef 2437b397 nbranch g24_rx_interrupt_clear ,user3 
+32f0 204032fb call g24_bind_data_parse 
+32f1 204033ca call g24_transmit_ack 
+32f2 20403372 call g24_bind_device_status_check 
+32f3 20403e80 call dongle_kb_bind_soft_reset 
+32f4 6fe0c5c5 fetch 1 ,mem_24g_pair_switch 
+32f5 207a0000 rtn blank 
+32f6 6fe24643 fetch 4 ,mem_24g_transmitter_addr 
+32f7 207a0000 rtn blank 
+32f8 20203215 branch g24_update_addr_and_synccrc8 
+
+g24_bind_data_error:
+32f9 20403397 call g24_rx_interrupt_clear 
+32fa 20203162 branch g24_end_of_packet 
+
+g24_bind_data_parse:
+32fb 70463905 jam bind_mode_continue ,mem_24g_bind_mode_continue 
+32fc d8c0450e arg mem_24g_rxbuf ,contr 
+32fd d8a045ff arg mem_24g_rxdata_temp ,contw 
+32fe 20407c8b call memcpy8 
+32ff 4757c035 bpatchx patch35_7 ,mem_patch35 
+3300 6fe0c601 fetch 1 ,mem_24g_rxdata_temp + 2 
+3301 c0553306 beq datatype_bind ,g24_bind_first_step 
+3302 c02ab317 beq datatype_config ,g24_bind_second_step 
+3303 c0113338 beq datatype_ok ,g24_bind_third_step 
+3304 c07fb573 beq datatype_attemp ,g24_data_attemp 
+3305 20600000 rtn 
+
+g24_bind_first_step:
+3306 6fe0c602 fetch 1 ,mem_24g_rxdata_temp + 3 
+3307 c000b30a beq datatype_device1 ,g24_bind_first_step_device1 
+3308 c0013312 beq datatype_device2 ,g24_bind_first_step_device2 
+3309 20600000 rtn 
+
+g24_bind_first_step_device1:
+330a 6fe0c5f5 fetch 1 ,mem_24g_device1_bind_disable 
+330b 247a0000 nrtn blank 
+330c 7045ea01 jam 1 ,mem_24g_device1_bind_step 
+
+g24_bind_dvc1_payload_cfg:
+330d 7045ed01 jam datatype_device1 ,mem_24g_bind_payload 
+
+g24_bind_payload_cfg:
+330e 7045ee80 jam 0x80 ,mem_24g_bind_payload + 1 
+330f 6fe34508 fetch 6 ,mem_24g_lap 
+3310 67e345ef store 6 ,mem_24g_bind_payload + 2 
+3311 20600000 rtn 
+
+g24_bind_first_step_device2:
+3312 6fe0c5f6 fetch 1 ,mem_24g_device2_bind_disable 
+3313 247a0000 nrtn blank 
+3314 7045eb01 jam 1 ,mem_24g_device2_bind_step 
+
+g24_bind_dvc2_payload_cfg:
+3315 7045ed02 jam datatype_device2 ,mem_24g_bind_payload 
+3316 2020330e branch g24_bind_payload_cfg 
+
+g24_bind_second_step:
+3317 6fe0c5c5 fetch 1 ,mem_24g_pair_switch 
+3318 203a331d branch g24_bind_second_step_skip ,blank 
+3319 6fe24603 fetch 4 ,mem_24g_rxdata_temp + 4 
+331a 684a4508 fetcht 4 ,mem_24g_lap 
+331b 98467c00 isub temp ,null 
+331c 24628000 nrtn zero 
+
+g24_bind_second_step_skip:
+331d 6fe0c602 fetch 1 ,mem_24g_rxdata_temp + 3 
+331e c000b321 beq datatype_device1 ,g24_bind_second_step_device1 
+331f c001332e beq datatype_device2 ,g24_bind_second_step_device2 
+3320 20600000 rtn 
+
+g24_bind_second_step_device1:
+3321 6fe0c5f5 fetch 1 ,mem_24g_device1_bind_disable 
+3322 247a0000 nrtn blank 
+3323 6fe0c5ea fetch 1 ,mem_24g_device1_bind_step 
+3324 c000b326 beq 1 ,g24_bind_dvc1_step_set2 
+3325 20600000 rtn 
+
+g24_bind_dvc1_step_set2:
+3326 7045ea02 jam 2 ,mem_24g_device1_bind_step 
+3327 6fe0c5c5 fetch 1 ,mem_24g_pair_switch 
+3328 203a330d branch g24_bind_dvc1_payload_cfg ,blank 
+
+g24_bind_dvc1_payload_cfg_transmitter_addr:
+3329 7045ed01 jam datatype_device1 ,mem_24g_bind_payload 
+
+g24_bind_payload_cfg_transmitter_addr:
+332a 7045ee80 jam 0x80 ,mem_24g_bind_payload + 1 
+332b 6fe24643 fetch 4 ,mem_24g_transmitter_addr 
+332c 67e245ef store 4 ,mem_24g_bind_payload + 2 
+332d 20207dbc branch enable_user 
+
+g24_bind_second_step_device2:
+332e 6fe0c5f6 fetch 1 ,mem_24g_device2_bind_disable 
+332f 247a0000 nrtn blank 
+3330 6fe0c5eb fetch 1 ,mem_24g_device2_bind_step 
+3331 c000b333 beq 1 ,g24_bind_dvc2_step_set2 
+3332 20600000 rtn 
+
+g24_bind_dvc2_step_set2:
+3333 7045eb02 jam 2 ,mem_24g_device2_bind_step 
+3334 6fe0c5c5 fetch 1 ,mem_24g_pair_switch 
+3335 203a3315 branch g24_bind_dvc2_payload_cfg ,blank 
+3336 7045ed02 jam datatype_device2 ,mem_24g_bind_payload 
+3337 2020332a branch g24_bind_payload_cfg_transmitter_addr 
+
+g24_bind_third_step:
+3338 6fe0c5c5 fetch 1 ,mem_24g_pair_switch 
+3339 203a333e branch g24_bind_third_step_skip ,blank 
+333a 6fe24603 fetch 4 ,mem_24g_rxdata_temp + 4 
+333b 684a4643 fetcht 4 ,mem_24g_transmitter_addr 
+333c 98467c00 isub temp ,null 
+333d 24628000 nrtn zero 
+
+g24_bind_third_step_skip:
+333e 6fe0c602 fetch 1 ,mem_24g_rxdata_temp + 3 
+333f c000b342 beq datatype_device1 ,g24_bind_third_step_device1 
+3340 c001334f beq datatype_device2 ,g24_bind_third_step_device2 
+3341 20600000 rtn 
+
+g24_bind_third_step_device1:
+3342 6fe0c5f5 fetch 1 ,mem_24g_device1_bind_disable 
+3343 247a0000 nrtn blank 
+3344 6fe0c5ea fetch 1 ,mem_24g_device1_bind_step 
+3345 c0013347 beq 2 ,g24_bind_dvc1_step_success 
+3346 20600000 rtn 
+
+g24_bind_dvc1_step_success:
+3347 7045f501 jam 1 ,mem_24g_device1_bind_disable 
+3348 2040330d call g24_bind_dvc1_payload_cfg 
+3349 6fe0c5ec fetch 1 ,mem_24g_bind_device_status 
+334a 1fe1fe01 or_into 0x01 ,pdata 
+334b 67e0c5ec store 1 ,mem_24g_bind_device_status 
+
+g24_bind_exit:
+334c 58000000 setarg 0 
+334d 67e145ea store 2 ,mem_24g_device1_bind_step 
+334e 20600000 rtn 
+
+g24_bind_third_step_device2:
+334f 6fe0c5f6 fetch 1 ,mem_24g_device2_bind_disable 
+3350 247a0000 nrtn blank 
+3351 6fe0c5eb fetch 1 ,mem_24g_device2_bind_step 
+3352 c0803354 bne 0 ,g24_bind_dvc2_step_success 
+3353 20600000 rtn 
+
+g24_bind_dvc2_step_success:
+3354 7045f601 jam 1 ,mem_24g_device2_bind_disable 
+3355 20403315 call g24_bind_dvc2_payload_cfg 
+3356 6fe0c5ec fetch 1 ,mem_24g_bind_device_status 
+3357 1fe1fe02 or_into 0x02 ,pdata 
+3358 67e0c5ec store 1 ,mem_24g_bind_device_status 
+3359 2040334c call g24_bind_exit 
+335a 20203e7a branch dongle_g24_store_dvc2_bind_flag 
+
+g24_binding_device_check:
+335b 6fe0c511 fetch 1 ,mem_24g_rxbuf + 3 
+335c c000b35f beq datatype_device1 ,g24_binding_dvc1_status 
+335d c0013363 beq datatype_device2 ,g24_binding_dvc2_status 
+335e 20600000 rtn 
+
+g24_binding_dvc1_status:
+335f 6fe0c642 fetch 1 ,mem_24g_bind_device_living 
+3360 c4000000 rtnbit0 0 
+
+disable_user3:
+3361 7857fc00 disable user3 
+3362 20600000 rtn 
+
+g24_binding_dvc2_status:
+3363 6fe0c642 fetch 1 ,mem_24g_bind_device_living 
+3364 c4008000 rtnbit0 1 
+3365 20203361 branch disable_user3 
+
+g24_binding_dvc1_living:
+3366 6fe0c627 fetch 1 ,mem_24g_pair_mode 
+3367 247a0000 nrtn blank 
+3368 6fe0c642 fetch 1 ,mem_24g_bind_device_living 
+3369 1fe1fe01 or_into 0x01 ,pdata 
+336a 67e0c642 store 1 ,mem_24g_bind_device_living 
+336b 20600000 rtn 
+
+g24_binding_dvc2_living:
+336c 6fe0c627 fetch 1 ,mem_24g_pair_mode 
+336d 247a0000 nrtn blank 
+336e 6fe0c642 fetch 1 ,mem_24g_bind_device_living 
+336f 1fe1fe02 or_into 0x02 ,pdata 
+3370 67e0c642 store 1 ,mem_24g_bind_device_living 
+3371 20600000 rtn 
+
+g24_bind_device_status_check:
+3372 6fe0c5ec fetch 1 ,mem_24g_bind_device_status 
+3373 207a0000 rtn blank 
+
+g24_bind_device_status:
+3374 6fe0c602 fetch 1 ,mem_24g_rxdata_temp + 3 
+3375 c000b366 beq datatype_device1 ,g24_binding_dvc1_living 
+3376 c001336c beq datatype_device2 ,g24_binding_dvc2_living 
+3377 20600000 rtn 
+
+g24_receive_init:
+3378 79200027 set1 mark_24g_rxmode ,mark 
+3379 6fe0c141 fetch 1 ,mem_tx_power 
+337a 67e0c63a store 1 ,mem_tx_power_temp 
+337b 202035ae branch rssi_receiver_buff_init 
+
+g24_receive_dispatch:
+337c 6fe145f7 fetch 2 ,mem_cb_24g_receive_process 
+337d 20207d7b branch callback_func 
+
+g24_ackpayload_prep:
+337e 47584036 bpatchx patch36_0 ,mem_patch36 
+337f 70459f00 jam 0 ,mem_24g_datalen 
+3380 6fe0c628 fetch 1 ,mem_24g_ackpayload_enable 
+3381 207a0000 rtn blank 
+3382 6fe145f9 fetch 2 ,mem_cb_24g_ackpayload 
+3383 20207d7b branch callback_func 
+
+g24_receive_packet_start:
+3384 204033c7 call g24_receive_transmit_ack 
+3385 2437b397 nbranch g24_rx_interrupt_clear ,user3 
+
+g24_receive_packet_parse:
+3386 204033b9 call g24_receive_packet_parse_pid_crc 
+3387 24343397 nbranch g24_rx_interrupt_clear ,user 
+3388 6fe0c594 fetch 1 ,mem_24g_rxdata_length 
+3389 203a3397 branch g24_rx_interrupt_clear ,blank 
+338a 1fe0fe02 increase 2 ,pdata 
+338b 98007200 iforce loopcnt 
+338c d8c0450e arg mem_24g_rxbuf ,contr 
+338d d8a045ff arg mem_24g_rxdata_temp ,contw 
+338e 20407cdc call memcpy 
+338f 70462a00 jam 0 ,mem_24g_mode_switch 
+3390 6fe0c627 fetch 1 ,mem_24g_pair_mode 
+3391 205a33d4 call g24_enable_nodata_timer ,blank 
+3392 4758c036 bpatchx patch36_1 ,mem_patch36 
+3393 6fe0c601 fetch 1 ,mem_24g_rxdata_temp + 2 
+3394 c000b39d beq datatype_device1 ,g24_data_device1 
+3395 c00133ac beq datatype_device2 ,g24_data_device2 
+3396 c07fb39b beq datatype_attemp ,g24_data_receive_attemp 
+
+g24_rx_interrupt_clear:
+3397 47594036 bpatchx patch36_2 ,mem_patch36 
+3398 d8a0450e arg mem_24g_rxbuf ,contw 
+3399 df200042 arg 66 ,loopcnt 
+339a 20207ca3 branch clear_mem 
+
+g24_data_receive_attemp:
+339b 20403374 call g24_bind_device_status 
+339c 20203573 branch g24_data_attemp 
+
+g24_data_device1:
+339d 20403366 call g24_binding_dvc1_living 
+339e 20403504 call g24_ch_timer_reinit 
+339f 6fe0c621 fetch 1 ,mem_24g_abort_packet 
+33a0 6848c5ff fetcht 1 ,mem_24g_rxdata_temp 
+33a1 284ffe03 isolate1 bit_abort ,temp 
+33a2 7920fe00 setflag true ,0 ,pdata 
+33a3 67e0c621 store 1 ,mem_24g_abort_packet 
+33a4 c000b3b2 beq 1 ,g24_data_attemp_device1_abort 
+33a5 6fe0c629 fetch 1 ,mem_24g_hop_packet 
+33a6 6848c5ff fetcht 1 ,mem_24g_rxdata_temp 
+33a7 284ffe04 isolate1 bit_hop ,temp 
+33a8 7920fe00 setflag true ,0 ,pdata 
+33a9 67e0c629 store 1 ,mem_24g_hop_packet 
+33aa 6fe145fb fetch 2 ,mem_cb_24g_data_device1 
+33ab 20207d7b branch callback_func 
+
+g24_data_device2:
+33ac 2040336c call g24_binding_dvc2_living 
+33ad 6848c5ff fetcht 1 ,mem_24g_rxdata_temp 
+33ae 284ffe03 isolate1 bit_abort ,temp 
+33af 2020b3b7 branch g24_data_attemp_device2_abort ,true 
+33b0 6fe145fd fetch 2 ,mem_cb_24g_data_device2 
+33b1 20207d7b branch callback_func 
+
+g24_data_attemp_device1_abort:
+33b2 6fe0c5f5 fetch 1 ,mem_24g_device1_bind_disable 
+33b3 247a0000 nrtn blank 
+33b4 7045f501 jam 1 ,mem_24g_device1_bind_disable 
+33b5 6fe24609 fetch 4 ,mem_24g_rxdata_temp + 10 
+33b6 2020357b branch g24_store_device1_addr 
+
+g24_data_attemp_device2_abort:
+33b7 6fe24609 fetch 4 ,mem_24g_rxdata_temp + 10 
+33b8 20203581 branch g24_store_device2_addr 
+
+g24_receive_packet_parse_pid_crc:
+33b9 20407dbe call disable_user 
+33ba 6fe0c59d fetch 1 ,mem_24g_sta_pid 
+33bb 6848c59e fetcht 1 ,mem_24g_last_pid 
+33bc 98467c00 isub temp ,null 
+33bd 2442fdbc ncall enable_user ,zero 
+33be 6fe0c59d fetch 1 ,mem_24g_sta_pid 
+33bf 67e0c59e store 1 ,mem_24g_last_pid 
+33c0 6fe1c597 fetch 3 ,mem_24g_sta_crc 
+33c1 6849c59a fetcht 3 ,mem_24g_last_crc 
+33c2 98467c00 isub temp ,null 
+33c3 2442fdbc ncall enable_user ,zero 
+33c4 6fe1c597 fetch 3 ,mem_24g_sta_crc 
+33c5 67e1c59a store 3 ,mem_24g_last_crc 
+33c6 20600000 rtn 
+
+g24_receive_transmit_ack:
+33c7 20403397 call g24_rx_interrupt_clear 
+33c8 204030f8 call g24_receive_packet 
+33c9 24778000 nrtn user3 
+
+g24_transmit_ack:
+33ca 6fe0c50e fetch 1 ,mem_24g_rxbuf 
+33cb 67e0c5a0 store 1 ,mem_24g_data_type 
+33cc 204031f3 call g24_read_len_pid_crc 
+33cd 6fe0c50f fetch 1 ,mem_24g_rxbuf + 1 
+33ce 2feffe00 isolate1 bit_ack_24g ,pdata 
+33cf 2020b3d3 branch g24tx_no_ack ,true 
+
+g24tx_with_ack:
+33d0 2040337e call g24_ackpayload_prep 
+33d1 204031c4 call g24_transmit_prep 
+33d2 20403174 call g24_transmit 
+
+g24tx_no_ack:
+33d3 20203162 branch g24_end_of_packet 
+
+g24_enable_nodata_timer:
+33d4 70462b01 jam 1 ,mem_24g_nodata_timer_enable 
+
+g24_enable_nodata_timer_init:
+33d5 58000280 setarg timer_nodata_delay 
+33d6 d8e00008 arg g24_timer_nodata ,queue 
+33d7 20207ce3 branch timer_init 
+
+g24_mode_switch_init:
+33d8 4759c036 bpatchx patch36_3 ,mem_patch36 
+33d9 70462a01 jam 1 ,mem_24g_mode_switch 
+33da 70462e00 jam 0 ,mem_24g_time_slice 
+33db 7045beff jam 0xff ,mem_24g_interval 
+33dc 20203237 branch g24_timer_init 
+
+g24_mode_switch_bind_work:
+33dd 475a4036 bpatchx patch36_4 ,mem_patch36 
+33de 6fe0c62a fetch 1 ,mem_24g_mode_switch 
+33df 207a0000 rtn blank 
+33e0 20403224 call g24_timer_check 
+33e1 24740000 nrtn user 
+33e2 204033ea call g24_bind_mode_continue 
+33e3 6fe0c62e fetch 1 ,mem_24g_time_slice 
+33e4 1fe0fe01 increase 1 ,pdata 
+33e5 1fe17e01 and_into 1 ,pdata 
+33e6 67e0c62e store 1 ,mem_24g_time_slice 
+33e7 c00033ef beq 0 ,g24_work_mode_switch 
+33e8 c000b3f2 beq 1 ,g24_bind_mode_switch 
+33e9 20600000 rtn 
+
+g24_bind_mode_continue:
+33ea 6fe0c639 fetch 1 ,mem_24g_bind_mode_continue 
+33eb 207a0000 rtn blank 
+33ec 1fe0ffff increase -1 ,pdata 
+33ed 67e0c639 store 1 ,mem_24g_bind_mode_continue 
+33ee 20600000 rtn 
+
+g24_work_mode_switch:
+33ef 6fe0c639 fetch 1 ,mem_24g_bind_mode_continue 
+33f0 247a0000 nrtn blank 
+33f1 20203436 branch g24_switch_work_mode 
+
+g24_bind_mode_switch:
+33f2 6fe0c639 fetch 1 ,mem_24g_bind_mode_continue 
+33f3 247a0000 nrtn blank 
+33f4 202032da branch g24_bind_mode_enable 
+
+g24_mode_b_s_switch_init:
+33f5 6fe0c641 fetch 1 ,mem_24g_b_s_mode_switch_disable 
+33f6 247a0000 nrtn blank 
+33f7 6fe0c63f fetch 1 ,mem_24g_mode_b_s_switch_exit 
+33f8 205a3425 call g24_mode_b_s_switch_start ,blank 
+33f9 6fe0c63c fetch 1 ,mem_24g_mode_b_s_switch_init 
+33fa c3800000 rtnbit1 0 
+33fb 79207e00 set1 0 ,pdata 
+33fc 67e0c63c store 1 ,mem_24g_mode_b_s_switch_init 
+33fd 70463b01 jam 1 ,mem_24g_mode_b_s_switch 
+33fe 70464000 jam 0 ,mem_24g_b_s_time_slice 
+33ff 58000000 setarg 0 
+3400 67e1463d store 2 ,mem_24g_mode_b_s_switch_cnt 
+3401 7045be60 jam 0x60 ,mem_24g_interval 
+3402 20203237 branch g24_timer_init 
+
+g24_mode_switch_bind_search:
+3403 475ac036 bpatchx patch36_5 ,mem_patch36 
+3404 6fe0c62d fetch 1 ,mem_24g_work_mode 
+3405 c1000000 rtneq dongle_work 
+3406 6fe0c641 fetch 1 ,mem_24g_b_s_mode_switch_disable 
+3407 247a0000 nrtn blank 
+3408 6fe0c63f fetch 1 ,mem_24g_mode_b_s_switch_exit 
+3409 247a0000 nrtn blank 
+340a 6fe0c63b fetch 1 ,mem_24g_mode_b_s_switch 
+340b 207a0000 rtn blank 
+340c 6fe0c642 fetch 1 ,mem_24g_bind_device_living 
+340d 2fe00603 compare 3 ,pdata ,3 
+340e 2020b421 branch g24_mode_b_s_switch_exit ,true 
+340f 20403224 call g24_timer_check 
+3410 24740000 nrtn user 
+3411 6fe1463d fetch 2 ,mem_24g_mode_b_s_switch_cnt 
+3412 1fe0fe01 increase 1 ,pdata 
+3413 67e1463d store 2 ,mem_24g_mode_b_s_switch_cnt 
+3414 d84007d0 arg 0x7d0 ,temp 
+3415 98467c00 isub temp ,null 
+3416 20213421 branch g24_mode_b_s_switch_exit ,positive 
+3417 6fe0c640 fetch 1 ,mem_24g_b_s_time_slice 
+3418 1fe0fe01 increase 1 ,pdata 
+3419 1fe17e01 and_into 1 ,pdata 
+341a 67e0c640 store 1 ,mem_24g_b_s_time_slice 
+341b c00034ea beq 0 ,g24_search_mode_enable 
+341c c000b2da beq 1 ,g24_bind_mode_enable 
+341d 20600000 rtn 
+
+g24_mode_switch_search:
+341e 6fe0c639 fetch 1 ,mem_24g_bind_mode_continue 
+341f 243a32da nbranch g24_bind_mode_enable ,blank 
+3420 202034ea branch g24_search_mode_enable 
+
+g24_mode_b_s_switch_exit:
+3421 70463f01 jam 1 ,mem_24g_mode_b_s_switch_exit 
+3422 202034ea branch g24_search_mode_enable 
+
+g24_mode_b_s_switch_stop:
+3423 70463b00 jam 0 ,mem_24g_mode_b_s_switch 
+3424 20600000 rtn 
+
+g24_mode_b_s_switch_start:
+3425 70463b01 jam 1 ,mem_24g_mode_b_s_switch 
+3426 20600000 rtn 
+
+g24_work_init:
+3427 475b4036 bpatchx patch36_6 ,mem_patch36 
+3428 6fe0c62c fetch 1 ,mem_24g_mode_init 
+3429 c3800000 rtnbit1 dongle_work 
+342a 79207e00 set1 dongle_work ,pdata 
+342b 67e0c62c store 1 ,mem_24g_mode_init 
+342c 6fe0c63a fetch 1 ,mem_tx_power_temp 
+342d 67e0c141 store 1 ,mem_tx_power 
+342e 70462800 jam 0 ,mem_24g_ackpayload_enable 
+342f 7008eb00 jam 0 ,mem_usb_tx_enable 
+3430 70462101 jam 1 ,mem_24g_abort_packet 
+3431 70459500 jam 0 ,mem_24g_pid 
+3432 6fe24508 fetch 4 ,mem_24g_lap 
+3433 20403215 call g24_update_addr_and_synccrc8 
+3434 20403201 call g24_ch 
+3435 20203397 branch g24_rx_interrupt_clear 
+
+g24_switch_work_mode:
+3436 70462800 jam 0 ,mem_24g_ackpayload_enable 
+
+g24_work_mode_enable:
+3437 70462d00 jam dongle_work ,mem_24g_work_mode 
+3438 70462c00 jam clear_init ,mem_24g_mode_init 
+3439 20600000 rtn 
+
+g24_work_mode_start:
+343a 6fe0c62d fetch 1 ,mem_24g_work_mode 
+343b c1800000 rtnne dongle_work 
+343c 20403427 call g24_work_init 
+343d 204034ee call g24_ch_process 
+343e 20203384 branch g24_receive_packet_start 
+
+g24_bind_mode_auto:
+343f 475bc036 bpatchx patch36_7 ,mem_patch36 
+3440 6fe0c62d fetch 1 ,mem_24g_work_mode 
+3441 c1808000 rtnne dongle_bind 
+3442 204032dd call g24_bind_init 
+3443 204032ec call g24_bind_data_process 
+3444 6fe0c627 fetch 1 ,mem_24g_pair_mode 
+3445 247a0000 nrtn blank 
+3446 6fe0c5ec fetch 1 ,mem_24g_bind_device_status 
+3447 207a0000 rtn blank 
+3448 70462a00 jam 0 ,mem_24g_mode_switch 
+3449 20403436 call g24_switch_work_mode 
+344a 204033d4 call g24_enable_nodata_timer 
+344b 20203237 branch g24_timer_init 
+
+g24_search_mode_init:
+344c 6fe0c62c fetch 1 ,mem_24g_mode_init 
+344d c3838000 rtnbit1 dongle_search 
+344e 79207e07 set1 dongle_search ,pdata 
+344f 67e0c62c store 1 ,mem_24g_mode_init 
+3450 6fe0c63a fetch 1 ,mem_tx_power_temp 
+3451 67e0c141 store 1 ,mem_tx_power 
+3452 70462e00 jam 0 ,mem_24g_time_slice 
+3453 70462801 jam 1 ,mem_24g_ackpayload_enable 
+3454 58000000 setarg 0 
+3455 67e1c654 store 3 ,mem_rssi_noise_self_index 
+3456 67e3c631 store 7 ,mem_24g_self_config_ch_once 
+3457 204034dc call g24_receiver_addr_check 
+3458 24628000 nrtn zero 
+3459 6fe0c5a5 fetch 1 ,mem_24g_current_ch_number 
+345a 67e0c630 store 1 ,mem_24g_self_ch_number 
+345b 6fe0c5a4 fetch 1 ,mem_24g_ch 
+345c 67e0c62f store 1 ,mem_24g_self_last_ch 
+345d 20600000 rtn 
+
+g24_search_mode_auto:
+345e 475c4037 bpatchx patch37_0 ,mem_patch37 
+345f 6fe0c62d fetch 1 ,mem_24g_work_mode 
+3460 c1838000 rtnne dongle_search 
+3461 2040344c call g24_search_mode_init 
+3462 20403484 call g24_auto_addr_ch_search 
+3463 204033c7 call g24_receive_transmit_ack 
+3464 2437b397 nbranch g24_rx_interrupt_clear ,user3 
+3465 204034dc call g24_receiver_addr_check 
+3466 2042b386 call g24_receive_packet_parse ,zero 
+3467 6fe0c621 fetch 1 ,mem_24g_abort_packet 
+3468 205a3423 call g24_mode_b_s_switch_stop ,blank 
+3469 70462d00 jam dongle_work ,mem_24g_work_mode 
+346a 6fe0c62c fetch 1 ,mem_24g_mode_init 
+346b 79207e00 set1 dongle_work ,pdata 
+346c 67e0c62c store 1 ,mem_24g_mode_init 
+346d 6fe0c628 fetch 1 ,mem_24g_ackpayload_enable 
+346e 1fe67c02 sub pdata ,2 ,null 
+346f 2442b4da ncall g24_ackpayload_disable ,zero 
+3470 20403397 call g24_rx_interrupt_clear 
+3471 204033d4 call g24_enable_nodata_timer 
+3472 204034dc call g24_receiver_addr_check 
+3473 2022b47d branch g24_self_ch_num_reinit ,zero 
+3474 6fe245a6 fetch 4 ,mem_24g_addr 
+3475 684a464b fetcht 4 ,mem_24g_device2_addr 
+3476 98467c00 isub temp ,null 
+3477 2022b480 branch g24_device2_ch_num_reinit ,zero 
+3478 6fe245a6 fetch 4 ,mem_24g_addr 
+3479 684a4647 fetcht 4 ,mem_24g_device1_addr 
+347a 98467c00 isub temp ,null 
+347b 2022b482 branch g24_device1_ch_num_reinit ,zero 
+347c 20600000 rtn 
+
+g24_self_ch_num_reinit:
+347d 6fe0c630 fetch 1 ,mem_24g_self_ch_number 
+
+g24_current_ch_num_reinit:
+347e 67e0c5a5 store 1 ,mem_24g_current_ch_number 
+347f 20600000 rtn 
+
+g24_device2_ch_num_reinit:
+3480 6fe0c636 fetch 1 ,mem_24g_device2_ch_number 
+3481 2020347e branch g24_current_ch_num_reinit 
+
+g24_device1_ch_num_reinit:
+3482 6fe0c633 fetch 1 ,mem_24g_device1_ch_number 
+3483 2020347e branch g24_current_ch_num_reinit 
+
+g24_auto_addr_ch_search:
+3484 475cc037 bpatchx patch37_1 ,mem_patch37 
+3485 6fe0c62e fetch 1 ,mem_24g_time_slice 
+3486 1fe0fe01 increase 1 ,pdata 
+3487 1fe17e03 and_into 3 ,pdata 
+3488 67e0c62e store 1 ,mem_24g_time_slice 
+3489 c00034a8 beq 0 ,g24_auto_bind_config_device2 
+348a c000b4c2 beq 1 ,g24_auto_bind_config_self 
+348b c001348e beq 2 ,g24_auto_bind_config_device1 
+348c c001b4c2 beq 3 ,g24_auto_bind_config_self 
+348d 20600000 rtn 
+
+g24_auto_bind_config_device1:
+348e 2040330d call g24_bind_dvc1_payload_cfg 
+348f 6fe24647 fetch 4 ,mem_24g_device1_addr 
+3490 203a3484 branch g24_auto_addr_ch_search ,blank 
+3491 20403215 call g24_update_addr_and_synccrc8 
+3492 6fe0c634 fetch 1 ,mem_24g_device1_config_ch_once 
+3493 205a34a3 call g24_device1_config_ch_once ,blank 
+3494 6fe0c632 fetch 1 ,mem_24g_device1_last_ch 
+3495 67e0c5a4 store 1 ,mem_24g_ch 
+3496 6848c655 fetcht 1 ,mem_rssi_noise_device1_index 
+3497 6a21465b fetchr rega ,2 ,mem_rssi_noise_device1_buffer_ptr 
+3498 20403583 call rssi_store 
+3499 6048c655 storet 1 ,mem_rssi_noise_device1_index 
+349a 2040358c call rssi_average 
+349b 6048c652 storet 1 ,mem_rssi_noise_device1_avg 
+349c 18467c50 sub temp ,rssi_thresh_noise ,null 
+349d 24610000 nrtn positive 
+349e 6848c633 fetcht 1 ,mem_24g_device1_ch_number 
+349f 20403206 call g24_ch_map_size 
+34a0 6048c633 storet 1 ,mem_24g_device1_ch_number 
+34a1 67e0c632 store 1 ,mem_24g_device1_last_ch 
+34a2 20600000 rtn 
+
+g24_device1_config_ch_once:
+34a3 70463401 jam 1 ,mem_24g_device1_config_ch_once 
+34a4 d8400000 arg 0 ,temp 
+34a5 2040320b call g24_ch_calc 
+34a6 67e0c632 store 1 ,mem_24g_device1_last_ch 
+34a7 20600000 rtn 
+
+g24_auto_bind_config_device2:
+34a8 20403315 call g24_bind_dvc2_payload_cfg 
+34a9 6fe2464b fetch 4 ,mem_24g_device2_addr 
+34aa 203a3484 branch g24_auto_addr_ch_search ,blank 
+34ab 20403215 call g24_update_addr_and_synccrc8 
+34ac 6fe0c637 fetch 1 ,mem_24g_device2_config_ch_once 
+34ad 205a34bd call g24_device2_config_ch_once ,blank 
+34ae 6fe0c635 fetch 1 ,mem_24g_device2_last_ch 
+34af 67e0c5a4 store 1 ,mem_24g_ch 
+34b0 6848c656 fetcht 1 ,mem_rssi_noise_device2_index 
+34b1 6a21465d fetchr rega ,2 ,mem_rssi_noise_device2_buffer_ptr 
+34b2 20403583 call rssi_store 
+34b3 6048c656 storet 1 ,mem_rssi_noise_device2_index 
+34b4 2040358c call rssi_average 
+34b5 6048c653 storet 1 ,mem_rssi_noise_device2_avg 
+34b6 18467c50 sub temp ,rssi_thresh_noise ,null 
+34b7 24610000 nrtn positive 
+34b8 6848c636 fetcht 1 ,mem_24g_device2_ch_number 
+34b9 20403206 call g24_ch_map_size 
+34ba 6048c636 storet 1 ,mem_24g_device2_ch_number 
+34bb 67e0c635 store 1 ,mem_24g_device2_last_ch 
+34bc 20600000 rtn 
+
+g24_device2_config_ch_once:
+34bd 70463701 jam 1 ,mem_24g_device2_config_ch_once 
+34be d8400000 arg 0 ,temp 
+34bf 2040320b call g24_ch_calc 
+34c0 67e0c635 store 1 ,mem_24g_device2_last_ch 
+34c1 20600000 rtn 
+
+g24_auto_bind_config_self:
+34c2 2040330d call g24_bind_dvc1_payload_cfg 
+34c3 6fe24508 fetch 4 ,mem_24g_lap 
+34c4 20403215 call g24_update_addr_and_synccrc8 
+34c5 6fe0c631 fetch 1 ,mem_24g_self_config_ch_once 
+34c6 205a34d6 call g24_self_config_ch_once ,blank 
+34c7 6fe0c62f fetch 1 ,mem_24g_self_last_ch 
+34c8 67e0c5a4 store 1 ,mem_24g_ch 
+34c9 6848c654 fetcht 1 ,mem_rssi_noise_self_index 
+34ca 6a214659 fetchr rega ,2 ,mem_rssi_noise_self_buffer_ptr 
+34cb 20403583 call rssi_store 
+34cc 6048c654 storet 1 ,mem_rssi_noise_self_index 
+34cd 2040358c call rssi_average 
+34ce 6048c651 storet 1 ,mem_rssi_noise_self_avg 
+34cf 18467c50 sub temp ,rssi_thresh_noise ,null 
+34d0 24610000 nrtn positive 
+34d1 6848c630 fetcht 1 ,mem_24g_self_ch_number 
+34d2 20403206 call g24_ch_map_size 
+34d3 6048c630 storet 1 ,mem_24g_self_ch_number 
+34d4 67e0c62f store 1 ,mem_24g_self_last_ch 
+34d5 20600000 rtn 
+
+g24_self_config_ch_once:
+34d6 70463101 jam 1 ,mem_24g_self_config_ch_once 
+34d7 6fe0c62f fetch 1 ,mem_24g_self_last_ch 
+34d8 67e0c5a4 store 1 ,mem_24g_ch 
+34d9 20600000 rtn 
+
+g24_ackpayload_disable:
+34da 70462800 jam 0 ,mem_24g_ackpayload_enable 
+34db 20600000 rtn 
+
+g24_receiver_addr_check:
+34dc 6fe245a6 fetch 4 ,mem_24g_addr 
+34dd 684a4508 fetcht 4 ,mem_24g_lap 
+34de 98467c00 isub temp ,null 
+34df 20600000 rtn 
+
+g24_nodata_process:
+34e0 6fe0c628 fetch 1 ,mem_24g_ackpayload_enable 
+34e1 c1010000 rtneq 2 
+34e2 6fe0c62b fetch 1 ,mem_24g_nodata_timer_enable 
+34e3 207a0000 rtn blank 
+34e4 d8e00008 arg g24_timer_nodata ,queue 
+34e5 20407cf1 call timer_check 
+34e6 247a0000 nrtn blank 
+34e7 70462b00 jam 0 ,mem_24g_nodata_timer_enable 
+34e8 70463900 jam 0 ,mem_24g_bind_mode_continue 
+34e9 204033f5 call g24_mode_b_s_switch_init 
+
+g24_search_mode_enable:
+34ea 475d4037 bpatchx patch37_2 ,mem_patch37 
+34eb 70462d07 jam dongle_search ,mem_24g_work_mode 
+34ec 70462c00 jam clear_init ,mem_24g_mode_init 
+34ed 20203397 branch g24_rx_interrupt_clear 
+
+g24_ch_process:
+34ee 475dc037 bpatchx patch37_3 ,mem_patch37 
+34ef 6fe0c621 fetch 1 ,mem_24g_abort_packet 
+34f0 c000b5c2 beq 1 ,rssi_noise_monitor 
+34f1 6fe0c629 fetch 1 ,mem_24g_hop_packet 
+34f2 c000b502 beq 1 ,g24_ch_receive_hop_pac 
+34f3 684a4622 fetcht 4 ,mem_24g_hop_btclk 
+34f4 1c427e00 copy clkn_bt ,pdata 
+34f5 98467c00 isub temp ,null 
+34f6 24413234 ncall g24_timer_timeout ,positive 
+34f7 1fe22400 copy pdata ,regb 
+34f8 6fe24622 fetch 4 ,mem_24g_hop_btclk 
+34f9 6848c626 fetcht 1 ,mem_24g_hop_interval 
+34fa 98408400 iadd temp ,temp 
+34fb 1a427e00 copy regb ,pdata 
+34fc 98467c00 isub temp ,null 
+34fd 24610000 nrtn positive 
+34fe 793ffe1c set0 28 ,pdata 
+34ff 67e24622 store 4 ,mem_24g_hop_btclk 
+3500 70462101 jam 1 ,mem_24g_abort_packet 
+3501 20203201 branch g24_ch 
+
+g24_ch_receive_hop_pac:
+3502 70462900 jam 0 ,mem_24g_hop_packet 
+3503 20203201 branch g24_ch 
+
+g24_ch_timer_reinit:
+3504 1c427e00 copy clkn_bt ,pdata 
+3505 67e24622 store 4 ,mem_24g_hop_btclk 
+3506 20600000 rtn 
+
+g24_reconn_timeout_timer:
+3507 da6045f5 arg mem_24g_reconn_timeout ,regc 
+3508 da403653 arg g24_stop_24g_mode ,regb 
+3509 2020375c branch timer_single_step_2b 
+
+g24_reconn_start:
+350a 475e4037 bpatchx patch37_4 ,mem_patch37 
+350b 79200026 set1 mark_24g ,mark 
+350c 6fe0c613 fetch 1 ,mem_24g_conn_sm 
+350d 793ffe01 set0 state_24g_pair ,pdata 
+350e 79207e02 set1 state_24g_reconn ,pdata 
+350f 67e0c613 store 1 ,mem_24g_conn_sm 
+3510 6fe0c5fa fetch 1 ,mem_24g_fast_conn_enable 
+3511 203a351f branch g24_reconn_receiver_addr ,blank 
+3512 6fe0c5f9 fetch 1 ,mem_24g_reconn_type 
+3513 c000b517 beq fast_conn_and_receiver ,g24_reconn_fast_conn 
+3514 c0013517 beq fast_conn_and_3_0_addr ,g24_reconn_fast_conn 
+3515 c001b526 beq receiver_and_3_0_addr ,g24_reconn_device_3_0_addr 
+3516 c0023526 beq pair_and_3_0_addr ,g24_reconn_device_3_0_addr 
+
+g24_reconn_fast_conn:
+3517 6fe0c5e8 fetch 1 ,mem_24g_pair_tx_power 
+3518 67e0c141 store 1 ,mem_tx_power 
+3519 6848c603 fetcht 1 ,mem_24g_fast_conn_temp_ch 
+351a 6048c5a5 storet 1 ,mem_24g_current_ch_number 
+351b 6fe245fb fetch 4 ,mem_24g_fast_conn_addr 
+351c 20403530 call g24_ch_syncword_crc8_init 
+351d 6048c603 storet 1 ,mem_24g_fast_conn_temp_ch 
+351e 20600000 rtn 
+
+g24_reconn_receiver_addr:
+351f 70414103 jam tx_power_3db ,mem_tx_power 
+3520 6848c604 fetcht 1 ,mem_24g_receiver_temp_ch 
+3521 6048c5a5 storet 1 ,mem_24g_current_ch_number 
+3522 6fe245ff fetch 4 ,mem_24g_receiver_addr 
+3523 20403530 call g24_ch_syncword_crc8_init 
+3524 6048c604 storet 1 ,mem_24g_receiver_temp_ch 
+3525 20600000 rtn 
+
+g24_reconn_device_3_0_addr:
+3526 70414103 jam tx_power_3db ,mem_tx_power 
+3527 6848c605 fetcht 1 ,mem_24g_device_temp_ch 
+3528 6048c5a5 storet 1 ,mem_24g_current_ch_number 
+3529 6fe2461b fetch 4 ,mem_24g_device_addr 
+352a 20403530 call g24_ch_syncword_crc8_init 
+352b 6048c605 storet 1 ,mem_24g_device_temp_ch 
+352c 20600000 rtn 
+
+g24_store_receiver_addr:
+352d 6fe24576 fetch 4 ,mem_24g_rxpayload + 2 
+352e 207a0000 rtn blank 
+352f 67e245ff store 4 ,mem_24g_receiver_addr 
+
+g24_ch_syncword_crc8_init:
+3530 20403215 call g24_update_addr_and_synccrc8 
+3531 20203201 branch g24_ch 
+
+g24_reconn_dispatch:
+3532 475ec037 bpatchx patch37_5 ,mem_patch37 
+3533 6fe145f7 fetch 2 ,mem_24g_reconn_count 
+3534 d84001f8 arg 0x01f8 ,temp 
+3535 98417e00 iand temp ,pdata 
+3536 203a353b branch g24_reconn_dispatch_next ,blank 
+3537 6fe145f7 fetch 2 ,mem_24g_reconn_count 
+3538 1fe0fe01 increase 1 ,pdata 
+3539 67e145f7 store 2 ,mem_24g_reconn_count 
+353a 20600000 rtn 
+
+g24_reconn_dispatch_next:
+353b 20403557 call g24_reconn_data_prep 
+353c 2040362a call g24_transmit_receive_ack 
+353d 242c355e nbranch g24_reconn_device_fail ,sync 
+353e 2437b55e nbranch g24_reconn_device_fail ,user3 
+353f 20403647 call g24_ackpayload_parse 
+3540 6fe0c3cf fetch 1 ,mem_device_option 
+3541 c0044d5d beq dvc_op_mouse ,mouse_g24_reconn_dispatch_set 
+3542 6fe245e3 fetch 4 ,mem_24g_pair_addr 
+3543 684a45a6 fetcht 4 ,mem_24g_addr 
+3544 98467c00 isub temp ,null 
+3545 2022b26f branch g24_pair_start ,zero 
+
+g24_reconn_dispatch_success:
+3546 6fe2461b fetch 4 ,mem_24g_device_addr 
+3547 684a45a6 fetcht 4 ,mem_24g_addr 
+3548 98467c00 isub temp ,null 
+3549 2042b52d call g24_store_receiver_addr ,zero 
+354a 6fe0c613 fetch 1 ,mem_24g_conn_sm 
+354b 793ffe02 set0 state_24g_reconn ,pdata 
+354c 67e0c613 store 1 ,mem_24g_conn_sm 
+354d 58000000 setarg 0 
+354e 67e145ef store 2 ,mem_24g_pair_timeout 
+354f 67e145f7 store 2 ,mem_24g_reconn_count 
+3550 67e145f5 store 2 ,mem_24g_reconn_timeout 
+3551 70064d3c jam bt_evt_24g_attempt_success ,mem_fifo_temp 
+3552 20407819 call ui_ipc_send_event 
+
+g24_txbuf_clear:
+3553 475f4037 bpatchx patch37_6 ,mem_patch37 
+3554 df200020 arg 32 ,loopcnt 
+3555 d8a04530 arg mem_24g_txbuf ,contw 
+3556 20207ca5 branch memset0 
+
+g24_reconn_data_prep:
+3557 704530ff jam datatype_attemp ,mem_24g_txbuf 
+3558 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+3559 67e0c531 store 1 ,mem_24g_txbuf + 1 
+355a 6fe2461b fetch 4 ,mem_24g_device_addr 
+355b 67e24532 store 4 ,mem_24g_txbuf + 2 
+355c 70459f06 jam 6 ,mem_24g_datalen 
+355d 202031c4 branch g24_transmit_prep 
+
+g24_reconn_device_fail:
+355e 475fc037 bpatchx patch37_7 ,mem_patch37 
+355f 6fe0c5fa fetch 1 ,mem_24g_fast_conn_enable 
+3560 203a3201 branch g24_ch ,blank 
+3561 6fe145f7 fetch 2 ,mem_24g_reconn_count 
+3562 1fe0fe01 increase 1 ,pdata 
+3563 67e145f7 store 2 ,mem_24g_reconn_count 
+3564 2feffe09 isolate1 9 ,pdata 
+3565 6fe0c5f9 fetch 1 ,mem_24g_reconn_type 
+3566 c000b56b beq fast_conn_and_receiver ,g24_reconn_fast_conn_and_receiver 
+3567 c001356d beq fast_conn_and_3_0_addr ,g24_reconn_fast_conn_and_3_0 
+3568 c001b56f beq receiver_and_3_0_addr ,g24_reconn_receiver_and_3_0 
+3569 c0023571 beq pair_and_3_0_addr ,g24_reconn_pair_and_3_0 
+356a 2020351f branch g24_reconn_receiver_addr 
+
+g24_reconn_fast_conn_and_receiver:
+356b 2020b51f branch g24_reconn_receiver_addr ,true 
+356c 20203517 branch g24_reconn_fast_conn 
+
+g24_reconn_fast_conn_and_3_0:
+356d 2020b526 branch g24_reconn_device_3_0_addr ,true 
+356e 20203517 branch g24_reconn_fast_conn 
+
+g24_reconn_receiver_and_3_0:
+356f 2020b526 branch g24_reconn_device_3_0_addr ,true 
+3570 2020351f branch g24_reconn_receiver_addr 
+
+g24_reconn_pair_and_3_0:
+3571 2020b526 branch g24_reconn_device_3_0_addr ,true 
+3572 2020327a branch g24_pair_init_param 
+
+g24_data_attemp:
+3573 6fe0c602 fetch 1 ,mem_24g_rxdata_temp + 3 
+3574 c000b577 beq datatype_device1 ,g24_data_attemp_device1 
+3575 c001357d beq datatype_device2 ,g24_data_attemp_device2 
+3576 20600000 rtn 
+
+g24_data_attemp_device1:
+3577 6fe0c5f5 fetch 1 ,mem_24g_device1_bind_disable 
+3578 247a0000 nrtn blank 
+3579 6fe24603 fetch 4 ,mem_24g_rxdata_temp + 4 
+357a 67e24643 store 4 ,mem_24g_transmitter_addr 
+
+g24_store_device1_addr:
+357b 67e24647 store 4 ,mem_24g_device1_addr 
+357c 20600000 rtn 
+
+g24_data_attemp_device2:
+357d 6fe0c5f6 fetch 1 ,mem_24g_device2_bind_disable 
+357e 247a0000 nrtn blank 
+357f 6fe24603 fetch 4 ,mem_24g_rxdata_temp + 4 
+3580 67e24643 store 4 ,mem_24g_transmitter_addr 
+
+g24_store_device2_addr:
+3581 67e2464b store 4 ,mem_24g_device2_addr 
+3582 20600000 rtn 
+
+rssi_store:
+3583 47604038 bpatchx patch38_0 ,mem_patch38 
+3584 1a227e00 copy rega ,pdata 
+3585 98408a00 iadd temp ,contw 
+3586 6fe08009 fetch 1 ,mem_rssi 
+3587 e7e08005 istore 1 ,contw 
+3588 18408401 increase 1 ,temp 
+3589 6fe0c5e9 fetch 1 ,mem_rssi_buff_index 
+358a 98410400 iand temp ,temp 
+358b 20600000 rtn 
+
+rssi_average:
+358c 4760c038 bpatchx patch38_1 ,mem_patch38 
+358d 6fe0c5e9 fetch 1 ,mem_rssi_buff_index 
+358e 1fe0fe01 increase 1 ,pdata 
+358f 67e10679 store 2 ,mem_loopcnt 
+3590 1fe27200 copy pdata ,loopcnt 
+3591 1a220c00 copy rega ,contr 
+3592 dfe00000 arg 0 ,pdata 
+
+rssi_average_loop:
+3593 e8408006 ifetcht 1 ,contr 
+3594 9840fe00 iadd temp ,pdata 
+3595 c2003593 loop rssi_average_loop 
+3596 68490679 fetcht 2 ,mem_loopcnt 
+3597 9846fc00 idiv temp 
+3598 20407d64 call wait_div_end 
+3599 18078400 quotient temp 
+359a c6138000 rtnmark1 mark_24g_rxmode 
+359b 18427e00 copy temp ,pdata 
+359c c6930000 rtnmark0 mark_24g 
+359d 204022ec call bcd 
+359e 1fe20400 copy pdata ,temp 
+359f 20600000 rtn 
+
+save_rssi_dec:
+35a0 202022cd branch save_rssi 
+
+rssi_transmitter_buff_init:
+35a1 6fe14607 fetch 2 ,mem_rssi_signal_buf_ptr 
+35a2 202035b5 branch rssi_buff_clear 
+
+rssi_signal:
+35a3 1fe22200 copy pdata ,rega 
+35a4 6848c606 fetcht 1 ,mem_rssi_signal_index 
+35a5 6fe14607 fetch 2 ,mem_rssi_signal_buf_ptr 
+35a6 98408a00 iadd temp ,contw 
+35a7 1a227e00 copy rega ,pdata 
+35a8 e7e08005 istore 1 ,contw 
+35a9 18408401 increase 1 ,temp 
+35aa 6fe0c5e9 fetch 1 ,mem_rssi_buff_index 
+35ab 98410400 iand temp ,temp 
+35ac 6048c606 storet 1 ,mem_rssi_signal_index 
+35ad 20600000 rtn 
+
+rssi_receiver_buff_init:
+35ae 6fe14657 fetch 2 ,mem_rssi_noise_buffer_ptr 
+35af 204035b5 call rssi_buff_clear 
+35b0 6fe14659 fetch 2 ,mem_rssi_noise_self_buffer_ptr 
+35b1 204035b5 call rssi_buff_clear 
+35b2 6fe1465b fetch 2 ,mem_rssi_noise_device1_buffer_ptr 
+35b3 204035b5 call rssi_buff_clear 
+35b4 6fe1465d fetch 2 ,mem_rssi_noise_device2_buffer_ptr 
+
+rssi_buff_clear:
+35b5 207a0000 rtn blank 
+35b6 1fe20a00 copy pdata ,contw 
+35b7 6fe0c5e9 fetch 1 ,mem_rssi_buff_index 
+35b8 1fe0fe01 increase 1 ,pdata 
+35b9 1fe27200 copy pdata ,loopcnt 
+35ba 20207ca3 branch clear_mem 
+
+rssi_noise:
+35bb 204035a0 call save_rssi_dec 
+35bc 207a0000 rtn blank 
+35bd 6848c650 fetcht 1 ,mem_rssi_noise_index 
+35be 6a214657 fetchr rega ,2 ,mem_rssi_noise_buffer_ptr 
+35bf 20403583 call rssi_store 
+35c0 6048c650 storet 1 ,mem_rssi_noise_index 
+35c1 20600000 rtn 
+
+rssi_noise_monitor:
+35c2 6a214657 fetchr rega ,2 ,mem_rssi_noise_buffer_ptr 
+35c3 2040358c call rssi_average 
+35c4 6048c64f storet 1 ,mem_rssi_noise_avg 
+35c5 18467c50 sub temp ,rssi_thresh_noise ,null 
+35c6 24610000 nrtn positive 
+35c7 20203201 branch g24_ch 
+
+g24_transmit_init:
+35c8 6fe24508 fetch 4 ,mem_24g_lap 
+35c9 67e2461b store 4 ,mem_24g_device_addr 
+35ca 202035a1 branch rssi_transmitter_buff_init 
+
+g24_interval_param_4ms:
+35cb 58002fb2 setarg g24_4ms_interval_param 
+35cc 67e1c61f store 3 ,mem_24g_short_sleep_set 
+35cd 58100c0c setarg 0x100c0c 
+35ce 67e1c5be store 3 ,mem_24g_interval 
+35cf 5800bb80 setarg 0x00bb80 
+35d0 67e1c622 store 3 ,mem_24g_long_sleep_set 
+35d1 70463805 jam 5 ,mem_24g_fast_hop_count 
+35d2 20600000 rtn 
+
+g24_interval_param_8ms:
+35d3 5800f80c setarg g24_8ms_interval_param 
+35d4 67e1c61f store 3 ,mem_24g_short_sleep_set 
+35d5 581c1919 setarg 0x1c1919 
+35d6 67e1c5be store 3 ,mem_24g_interval 
+35d7 58017700 setarg 0x017700 
+35d8 67e1c622 store 3 ,mem_24g_long_sleep_set 
+35d9 7046380b jam 11 ,mem_24g_fast_hop_count 
+35da 20600000 rtn 
+
+g24_transmit_dispatch:
+35db 6fe0c613 fetch 1 ,mem_24g_conn_sm 
+35dc c280b281 bbit1 state_24g_pair ,g24_pair_dispatch 
+35dd c2813532 bbit1 state_24g_reconn ,g24_reconn_dispatch 
+35de 6fe0c62f fetch 1 ,mem_24g_transmit_by_interrupt 
+35df c000b6a0 beq g24_tx_timer_int_enable ,g24_transmit_by_interrupt 
+
+g24_transmit_no_interrupt:
+35e0 47614038 bpatchx patch38_2 ,mem_patch38 
+35e1 204035fd call g24_txdata_prep 
+35e2 2434367e nbranch g24_nodata_transmit ,user 
+
+g24_transmit_start:
+35e3 4761c038 bpatchx patch38_3 ,mem_patch38 
+35e4 20403612 call g24_transmit_process 
+35e5 204036c8 call power_ctrl_start 
+35e6 6fe0c3cf fetch 1 ,mem_device_option 
+35e7 c0045923 beq dvc_op_mouse ,mouse_24g_transmit_start 
+
+g24_transmit_start_next:
+35e8 6fe44622 fetch 8 ,mem_24g_long_sleep_set 
+35e9 67e445c6 store 8 ,mem_24g_enter_hibernate 
+35ea 6fe14634 fetch 2 ,mem_24g_long_sleep_param_update_timer_init 
+35eb 67e14636 store 2 ,mem_24g_long_sleep_param_update_timer 
+35ec 6fe1460f fetch 2 ,mem_cb_24g_transmit_short_sleep 
+35ed 20207d7b branch callback_func 
+
+g24_short_sleep:
+35ee 47624038 bpatchx patch38_4 ,mem_patch38 
+35ef 20403694 call g24_lpm_wait 
+35f0 24740000 nrtn user 
+35f1 2040369e call g24_setgpio_lpm_before 
+35f2 20407de6 call clear_wake 
+35f3 6fe1c61f fetch 3 ,mem_24g_short_sleep_set 
+35f4 202035fa branch g24_long_seep2 
+
+g24_long_sleep:
+35f5 4762c038 bpatchx patch38_5 ,mem_patch38 
+35f6 20403694 call g24_lpm_wait 
+35f7 24740000 nrtn user 
+35f8 2040369e call g24_setgpio_lpm_before 
+35f9 6fe445c6 fetch 8 ,mem_24g_enter_hibernate 
+
+g24_long_seep2:
+35fa 20407d27 call clk2lpo 
+35fb 604a40a9 storet 4 ,mem_sleep_counter 
+35fc 20202406 branch lpm_sleep 
+
+g24_txdata_prep:
+35fd 20403600 call g24_package_data 
+35fe 24740000 nrtn user 
+35ff 202031c4 branch g24_transmit_prep 
+
+g24_package_data:
+3600 6fe14609 fetch 2 ,mem_cb_24g_transmit_data 
+3601 20407d7b call callback_func 
+3602 20343606 branch g24_accumulate_data ,user 
+3603 6fe3c531 fetch 7 ,mem_24g_txbuf + 1 
+3604 207a0000 rtn blank 
+3605 20207dbc branch enable_user 
+
+g24_accumulate_data:
+3606 70461900 jam 0 ,mem_24g_abort_pac 
+3607 1a20fe01 add rega ,1 ,pdata 
+3608 67e0c59f store 1 ,mem_24g_datalen 
+3609 2040360e call g24_transmit_rf_ctrl_clear 
+360a 67e0c530 store 1 ,mem_24g_txbuf 
+360b 1a420c00 copy regb ,contr 
+360c 1a227200 copy rega ,loopcnt 
+360d 20207cdc branch memcpy 
+
+g24_transmit_rf_ctrl_clear:
+360e 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+360f 1fe17e07 and_into bits_data ,pdata 
+3610 67e0c5a0 store 1 ,mem_24g_data_type 
+3611 20600000 rtn 
+
+g24_transmit_process:
+3612 58000000 setarg 0 
+3613 67e0c618 store 1 ,mem_24g_retry 
+3614 67e14639 store 2 ,mem_24g_retransmit 
+
+g24_transmit_loop:
+3615 47634038 bpatchx patch38_6 ,mem_patch38 
+3616 2040362a call g24_transmit_receive_ack 
+3617 6fe0c596 fetch 1 ,mem_24g_no_ack 
+3618 c000b61f beq no_ack_24g ,g24_transmit_no_ack 
+3619 242c3638 nbranch g24_retransmit ,sync 
+361a 2437b638 nbranch g24_retransmit ,user3 
+361b 20403647 call g24_ackpayload_parse 
+361c 6fe0c3cf fetch 1 ,mem_device_option 
+361d 1fe67c08 sub pdata ,dvc_op_mouse ,null 
+361e 2042db33 call mouse_24g_transmit_callback ,zero 
+
+g24_transmit_no_ack:
+361f 204036fc call power_ctrl_pac_succ_incrs 
+
+g24_transmit_next_packet:
+3620 20403553 call g24_txbuf_clear 
+3621 6fe0c595 fetch 1 ,mem_24g_pid 
+3622 1fe0fe01 increase 1 ,pdata 
+3623 67e0c595 store 1 ,mem_24g_pid 
+3624 2040366d call g24_hop_enable_packet 
+
+g24_transmit_abandon:
+3625 4763c038 bpatchx patch38_7 ,mem_patch38 
+3626 58000000 setarg 0 
+3627 67e0c614 store 1 ,mem_24g_ensure 
+3628 67e14615 store 2 ,mem_24g_txfail_cnt 
+3629 20600000 rtn 
+
+g24_transmit_receive_ack:
+362a 47644039 bpatchx patch39_0 ,mem_patch39 
+362b 7857fc00 disable user3 
+362c 20403174 call g24_transmit 
+362d 6fe0c596 fetch 1 ,mem_24g_no_ack 
+362e c000b162 beq no_ack_24g ,g24_end_of_packet 
+362f 18002a00 force 0 ,radio_ctrl 
+3630 6fe245a6 fetch 4 ,mem_24g_addr 
+3631 98001200 iforce access 
+3632 68488008 fetcht 1 ,mem_last_freq 
+3633 20402173 call set_freq_rx 
+3634 204021aa call rf_rx_enable 
+3635 20403100 call g24_receive_rxon 
+3636 2057b162 call g24_end_of_packet ,user3 
+3637 20600000 rtn 
+
+g24_retransmit:
+3638 4764c039 bpatchx patch39_1 ,mem_patch39 
+3639 6fe0c3cf fetch 1 ,mem_device_option 
+363a c00459df beq dvc_op_mouse ,mouse_g24_retransmit 
+
+g24_retransmit0:
+363b 6fe0c619 fetch 1 ,mem_24g_abort_pac 
+363c 247a0000 nrtn blank 
+363d 6fe14615 fetch 2 ,mem_24g_txfail_cnt 
+363e 1fe0fe01 increase 1 ,pdata 
+363f 67e14615 store 2 ,mem_24g_txfail_cnt 
+3640 6fe0c616 fetch 1 ,mem_24g_txfail_cnt + 1 
+3641 c282364f bbit1 4 ,g24_tx_attempt_fail 
+3642 20403655 call g24_transmit_hop_process 
+3643 6fe14639 fetch 2 ,mem_24g_retransmit 
+3644 1fe0fe01 increase 1 ,pdata 
+3645 67e14639 store 2 ,mem_24g_retransmit 
+3646 20203615 branch g24_transmit_loop 
+
+g24_ackpayload_parse:
+3647 47654039 bpatchx patch39_2 ,mem_patch39 
+3648 204031f3 call g24_read_len_pid_crc 
+3649 6fe0c594 fetch 1 ,mem_24g_rxdata_length 
+364a 207a0000 rtn blank 
+364b 98007200 iforce loopcnt 
+364c d8c04510 arg mem_24g_rxbuf + 2 ,contr 
+364d d8a04574 arg mem_24g_rxpayload ,contw 
+364e 20207cdc branch memcpy 
+
+g24_tx_attempt_fail:
+364f 4765c039 bpatchx patch39_3 ,mem_patch39 
+3650 58000000 setarg 0 
+3651 67e14615 store 2 ,mem_24g_txfail_cnt 
+3652 70461701 jam 1 ,mem_24g_attempt_fail_flag 
+
+g24_stop_24g_mode:
+3653 70064d3a jam bt_evt_24g_attempt_fail ,mem_fifo_temp 
+3654 20207819 branch ui_ipc_send_event 
+
+g24_transmit_hop_process:
+3655 47664039 bpatchx patch39_4 ,mem_patch39 
+3656 6fe0c3cf fetch 1 ,mem_device_option 
+3657 c0044d70 beq dvc_op_mouse ,mouse_g24_transmit_hop_process 
+
+g24_transmit_hop_process_next:
+3658 6848c618 fetcht 1 ,mem_24g_retry 
+3659 6fe0c638 fetch 1 ,mem_24g_fast_hop_count 
+365a 98467c00 isub temp ,null 
+365b 24213675 nbranch g24_tx_fast_hop ,positive 
+365c 18408401 increase 1 ,temp 
+365d 6048c618 storet 1 ,mem_24g_retry 
+365e 6fe0c638 fetch 1 ,mem_24g_fast_hop_count 
+365f c002b664 beq 5 ,g24_transmit_hop_process_4ms 
+3660 6fe0c618 fetch 1 ,mem_24g_retry 
+3661 c003366f beq 6 ,g24_hop_ch_disable 
+3662 c006366f beq 12 ,g24_hop_ch_disable 
+3663 20600000 rtn 
+
+g24_transmit_hop_process_4ms:
+3664 6fe0c618 fetch 1 ,mem_24g_retry 
+3665 c001b66f beq 3 ,g24_hop_ch_disable 
+3666 c003366f beq 6 ,g24_hop_ch_disable 
+3667 20600000 rtn 
+
+g24_hop_ch_enable:
+
+g24_txpayload_type_update:
+3668 c517b66b bmark1 mark_ble_lr ,g24_lr_type_update 
+3669 67e0c551 store 1 ,mem_24g_txpayload + offset_data_type 
+366a 20600000 rtn 
+
+g24_lr_type_update:
+366b 67e0c552 store 1 ,mem_24g_txpayload + offset_lr_data_type 
+366c 20600000 rtn 
+
+g24_hop_enable_packet:
+366d 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+366e c4020000 rtnbit0 bit_hop 
+
+g24_hop_ch_disable:
+366f 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+3670 793ffe04 set0 bit_hop ,pdata 
+3671 67e0c5a0 store 1 ,mem_24g_data_type 
+3672 20403668 call g24_txpayload_type_update 
+3673 20403700 call power_ctrl_pac_succ_decrs 
+3674 20203201 branch g24_ch 
+
+g24_tx_fast_hop:
+3675 6fe245a6 fetch 4 ,mem_24g_addr 
+3676 684a45fb fetcht 4 ,mem_24g_fast_conn_addr 
+3677 98467c00 isub temp ,null 
+3678 2022b201 branch g24_ch ,zero 
+3679 204036ee call power_ctrl_txpower_incrs 
+367a 20403700 call power_ctrl_pac_succ_decrs 
+367b 20203201 branch g24_ch 
+
+g24_search_receiver:
+367c 6fe1460b fetch 2 ,mem_cb_24g_search_receiver 
+367d 20207d7b branch callback_func 
+
+g24_nodata_transmit:
+367e 6fe0c619 fetch 1 ,mem_24g_abort_pac 
+367f 205a3685 call g24_send_abort_packet ,blank 
+3680 6fe0c62f fetch 1 ,mem_24g_transmit_by_interrupt 
+3681 c1008000 rtneq g24_tx_timer_int_enable 
+3682 2040367c call g24_search_receiver 
+3683 6fe14611 fetch 2 ,mem_cb_24g_transmit_long_sleep 
+3684 20207d7b branch callback_func 
+
+g24_send_abort_packet:
+3685 4766c039 bpatchx patch39_5 ,mem_patch39 
+3686 70461901 jam 1 ,mem_24g_abort_pac 
+3687 7045a001 jam type_ms ,mem_24g_data_type 
+3688 2040360e call g24_transmit_rf_ctrl_clear 
+3689 67e0c530 store 1 ,mem_24g_txbuf 
+368a 58000000 setarg 0 
+368b 67e3c531 store 7 ,mem_24g_txbuf + 1 
+368c 6fe2461b fetch 4 ,mem_24g_device_addr 
+368d 67e24538 store 4 ,mem_24g_txbuf + 8 
+368e 70459f0c jam 12 ,mem_24g_datalen 
+368f 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+3690 79207e03 set1 bit_abort ,pdata 
+3691 67e0c5a0 store 1 ,mem_24g_data_type 
+3692 204031c4 call g24_transmit_prep 
+3693 202035e3 branch g24_transmit_start 
+
+g24_lpm_wait:
+3694 47674039 bpatchx patch39_6 ,mem_patch39 
+3695 78347c00 enable user 
+3696 204023f0 call lpo_calibration 
+3697 6fe1c0bd fetch 3 ,mem_clks_per_lpo 
+3698 203a7dbe branch disable_user ,blank 
+3699 6fe0c094 fetch 1 ,mem_lpm_mode 
+369a 203a7dbe branch disable_user ,blank 
+369b 6fe0c62f fetch 1 ,mem_24g_transmit_by_interrupt 
+369c c000fdbe beq g24_tx_timer_int_enable ,disable_user 
+369d 20600000 rtn 
+
+g24_setgpio_lpm_before:
+369e 6fe1460d fetch 2 ,mem_cb_24g_lpm_before 
+369f 20207d7b branch callback_func 
+
+g24_transmit_by_interrupt:
+36a0 20403224 call g24_timer_check 
+36a1 24740000 nrtn user 
+36a2 204036b5 call g24_interval_calibrate 
+36a3 6fe14630 fetch 2 ,mem_24g_transmit_by_interrupt_exit_count 
+36a4 1fe0fe01 increase 1 ,pdata 
+36a5 67e14630 store 2 ,mem_24g_transmit_by_interrupt_exit_count 
+36a6 68494632 fetcht 2 ,mem_24g_transmit_by_interrupt_exit_count_init 
+36a7 98467c00 isub temp ,null 
+36a8 2042b6aa call g24_transmit_by_interrupt_exit ,zero 
+36a9 202035e0 branch g24_transmit_no_interrupt 
+
+g24_transmit_by_interrupt_exit:
+36aa 70462f00 jam g24_tx_timer_int_disable ,mem_24g_transmit_by_interrupt 
+36ab 58000000 setarg 0 
+36ac 67e14630 store 2 ,mem_24g_transmit_by_interrupt_exit_count 
+36ad 58000064 setarg 100 
+36ae 67e14632 store 2 ,mem_24g_transmit_by_interrupt_exit_count_init 
+
+g24_interval_min:
+36af 70462e00 jam 0 ,mem_24g_pac_index 
+36b0 6fe0c5bf fetch 1 ,mem_24g_interval_min 
+
+g24_interval_store:
+36b1 67e0c5be store 1 ,mem_24g_interval 
+36b2 20600000 rtn 
+
+g24_interval_max:
+36b3 6fe0c5c0 fetch 1 ,mem_24g_interval_max 
+36b4 202036b1 branch g24_interval_store 
+
+g24_interval_calibrate:
+36b5 6fe0c62e fetch 1 ,mem_24g_pac_index 
+36b6 1fe0fe01 increase 1 ,pdata 
+36b7 67e0c62e store 1 ,mem_24g_pac_index 
+36b8 c00236b3 beq 4 ,g24_interval_max 
+36b9 c002b6af beq 5 ,g24_interval_min 
+36ba 20600000 rtn 
+
+g24_transmit_by_interrupt_enable:
+36bb 70462f01 jam g24_tx_timer_int_enable ,mem_24g_transmit_by_interrupt 
+36bc 58000000 setarg 0 
+36bd 67e14630 store 2 ,mem_24g_transmit_by_interrupt_exit_count 
+36be 20600000 rtn 
+
+g24_factory_check:
+36bf df200002 arg 2 ,loopcnt 
+36c0 d8c045a6 arg mem_24g_addr ,contr 
+
+pdata_0xff_check:
+36c1 20407dbc call enable_user 
+36c2 5800ffff setarg 0xffff 
+
+pdata_0xff_check_loop:
+36c3 e8410006 ifetcht 2 ,contr 
+36c4 98467c00 isub temp ,null 
+36c5 2442fdbe ncall disable_user ,zero 
+36c6 c20036c3 loop pdata_0xff_check_loop 
+36c7 20600000 rtn 
+
+power_ctrl_start:
+36c8 4767c039 bpatchx patch39_7 ,mem_patch39 
+36c9 6fe0c44e fetch 1 ,mem_power_ctrl_disable 
+36ca 247a0000 nrtn blank 
+36cb 6fe14500 fetch 2 ,mem_ui_state_map 
+36cc c3858000 rtnbit1 ui_state_ble_adv 
+36cd 6a214607 fetchr rega ,2 ,mem_rssi_signal_buf_ptr 
+36ce 2040358c call rssi_average 
+36cf 6048c63b storet 1 ,mem_rssi_avg_received 
+36d0 6fe0c640 fetch 1 ,mem_rssi_dis_max_24g 
+36d1 c51336d3 bmark1 mark_24g ,power_ctrl_start_next 
+36d2 6fe0c643 fetch 1 ,mem_rssi_dis_max_ble 
+
+power_ctrl_start_next:
+36d3 98467c00 isub temp ,null 
+36d4 242136ed nbranch power_ctrl_txpower_incrs_force ,positive 
+36d5 6fe0c63d fetch 1 ,mem_power_ctrl_pac_succ_cnt 
+36d6 1fe67c02 sub pdata ,2 ,null 
+36d7 242136db nbranch power_ctrl_txpower_decrs_check ,positive 
+36d8 6fe0c63d fetch 1 ,mem_power_ctrl_pac_succ_cnt 
+36d9 c00036ee beq 0 ,power_ctrl_txpower_incrs 
+36da 20600000 rtn 
+
+power_ctrl_txpower_decrs_check:
+36db 6fe0c63d fetch 1 ,mem_power_ctrl_pac_succ_cnt 
+36dc 6848c63e fetcht 1 ,mem_power_ctrl_pac_succ_cnt_init 
+36dd 98467c00 isub temp ,null 
+36de 24628000 nrtn zero 
+36df 70463d00 jam 0 ,mem_power_ctrl_pac_succ_cnt 
+
+power_ctrl_txpower_decrs:
+36e0 6848c63b fetcht 1 ,mem_rssi_avg_received 
+36e1 6fe0c63f fetch 1 ,mem_rssi_dis_min_24g 
+36e2 c51336e4 bmark1 mark_24g ,power_ctrl_txpower_decrs_next 
+36e3 6fe0c642 fetch 1 ,mem_rssi_dis_min_ble 
+
+power_ctrl_txpower_decrs_next:
+36e4 98467c00 isub temp ,null 
+36e5 24610000 nrtn positive 
+36e6 6fe0c63c fetch 1 ,mem_power_ctrl_level 
+36e7 c00036fa beq 0 ,power_ctrl_decrs_level0 
+36e8 1fe0ffff increase -1 ,pdata 
+36e9 67e0c63c store 1 ,mem_power_ctrl_level 
+36ea c00136f6 beq 2 ,power_ctrl_decrs_level2 
+36eb c000b6f8 beq 1 ,power_ctrl_decrs_level1 
+36ec 202036fa branch power_ctrl_decrs_level0 
+
+power_ctrl_txpower_incrs_force:
+36ed 70463d00 jam 0 ,mem_power_ctrl_pac_succ_cnt 
+
+power_ctrl_txpower_incrs:
+36ee 6fe0c63c fetch 1 ,mem_power_ctrl_level 
+36ef c001b6f4 beq 3 ,power_ctrl_incrs_level3 
+36f0 1fe0fe01 increase 1 ,pdata 
+36f1 67e0c63c store 1 ,mem_power_ctrl_level 
+36f2 c000b6f8 beq 1 ,power_ctrl_incrs_level1 
+36f3 c00136f6 beq 2 ,power_ctrl_incrs_level2 
+
+power_ctrl_incrs_level3:
+36f4 70414105 jam tx_power_5db ,mem_tx_power 
+36f5 20600000 rtn 
+
+power_ctrl_decrs_level2:
+
+power_ctrl_incrs_level2:
+36f6 70414103 jam tx_power_3db ,mem_tx_power 
+36f7 20600000 rtn 
+
+power_ctrl_decrs_level1:
+
+power_ctrl_incrs_level1:
+36f8 70414100 jam tx_power_0db ,mem_tx_power 
+36f9 20600000 rtn 
+
+power_ctrl_decrs_level0:
+36fa 70414185 jam tx_power_f5db ,mem_tx_power 
+36fb 20600000 rtn 
+
+power_ctrl_pac_succ_incrs:
+36fc 6fe0c63d fetch 1 ,mem_power_ctrl_pac_succ_cnt 
+36fd 1fe0fe01 increase 1 ,pdata 
+36fe 67e0c63d store 1 ,mem_power_ctrl_pac_succ_cnt 
+36ff 20600000 rtn 
+
+power_ctrl_pac_succ_decrs:
+3700 6fe0c63d fetch 1 ,mem_power_ctrl_pac_succ_cnt 
+3701 1fe67c02 sub pdata ,2 ,null 
+3702 24413708 ncall power_ctrl_pac_succ_cnt_reinit ,positive 
+3703 6fe0c63d fetch 1 ,mem_power_ctrl_pac_succ_cnt 
+3704 c1000000 rtneq 0 
+3705 1fe0ffff increase -1 ,pdata 
+3706 67e0c63d store 1 ,mem_power_ctrl_pac_succ_cnt 
+3707 20600000 rtn 
+
+power_ctrl_pac_succ_cnt_reinit:
+3708 70463d03 jam 3 ,mem_power_ctrl_pac_succ_cnt 
+3709 20600000 rtn 
+
+app_init:
+370a 44e7c019 bpatch patch19_7 ,mem_patch19 
+370b 6fe0c3cf fetch 1 ,mem_device_option 
+370c 203a370a branch app_init ,blank 
+370d c0023cd1 beq dvc_op_dongle ,dongle_init 
+370e c004e0c8 beq dvc_op_shutter ,shutter_init 
+370f c0054a31 beq dvc_op_module ,module_init 
+3710 c00737c1 beq dvc_op_car ,car_init 
+3711 c0036286 beq dvc_op_shutter_dy ,shutter_dy_init 
+3712 c006badf beq dvc_op_remote_car ,remote_car_init 
+3713 c007beae beq dvc_op_keyboard ,keyboard_init 
+3714 c00666f2 beq dvc_op_hci_boot ,hci_init 
+3715 c0044d11 beq dvc_op_mouse ,mouse_init 
+3716 20600000 rtn 
+
+app_param_init:
+3717 20758000 rtn wake 
+3718 20406f7c call adc_init_data 
+3719 6fe0c3cf fetch 1 ,mem_device_option 
+371a c004e1f3 beq dvc_op_shutter ,shutter_default_init 
+371b c00361f3 beq dvc_op_shutter_dy ,shutter_default_init 
+371c c0023cdc beq dvc_op_dongle ,dongle_default_init 
+371d c0044d82 beq dvc_op_mouse ,mouse_default_init 
+371e c007bea1 beq dvc_op_keyboard ,keyboard_default_init 
+371f c006baee beq dvc_op_remote_car ,remote_car_default_init 
+3720 c00737d3 beq dvc_op_car ,car_default_init 
+3721 20600000 rtn 
+
+app_process_idle:
+3722 20407762 call ui_dispatch 
+3723 20407831 call check_51cmd 
+3724 20403729 call app_process_bb_event 
+3725 6fe143e4 fetch 2 ,mem_cb_idle_process 
+3726 20207d7b branch callback_func 
+
+app_process_ble:
+3727 6fe143e2 fetch 2 ,mem_cb_le_process 
+3728 20207d7b branch callback_func 
+
+app_process_bb_event:
+3729 44e8401a bpatch patch1a_0 ,mem_patch1a 
+372a da2044ea arg mem_ipc_fifo_bt2c51 ,rega 
+372b 20407d99 call fifo_out 
+372c 207a0000 rtn blank 
+372d 1fe22600 copy pdata ,regc 
+372e 20403732 call app_event_normal_process 
+372f 20203736 branch app_process_bb_event_priority 
+
+app_discard_event:
+3730 da600000 arg 0 ,regc 
+3731 20600000 rtn 
+
+app_event_normal_process:
+3732 c0083745 beq bt_evt_button_long_pressed ,app_evt_button_long_pressed 
+3733 c00a373c beq bt_evt_le_connected ,app_le_event_bb_connected 
+3734 c00ab740 beq bt_evt_le_disconnected ,app_le_event_bb_disconn 
+3735 20600000 rtn 
+
+app_process_bb_event_priority:
+3736 6fe143e6 fetch 2 ,mem_cb_bb_event_process 
+3737 20207d7b branch callback_func 
+
+app_check_wake_lock:
+3738 6fe143dc fetch 2 ,mem_cb_check_wakelock 
+3739 20207d7b branch callback_func 
+
+app_will_enter_lpm:
+373a 6fe143e0 fetch 2 ,mem_cb_before_lpm 
+373b 20207d7b branch callback_func 
+
+app_le_event_bb_connected:
+373c 6fe14500 fetch 2 ,mem_ui_state_map 
+373d 79207e09 set1 ui_state_ble_connected ,pdata 
+373e 67e14500 store 2 ,mem_ui_state_map 
+373f 20600000 rtn 
+
+app_le_event_bb_disconn:
+3740 70439a00 jam 0 ,mem_le_l2cap_att_states 
+3741 6fe14500 fetch 2 ,mem_ui_state_map 
+3742 793ffe09 set0 ui_state_ble_connected ,pdata 
+3743 67e14500 store 2 ,mem_ui_state_map 
+3744 202037a2 branch app_lpm_mult_disable 
+
+app_evt_button_long_pressed:
+3745 6fe143fa fetch app_disc_rsn_size ,mem_app_disconn_reason_flag 
+3746 79207e00 set1 app_disc_by_button ,pdata 
+3747 67e143fa store app_disc_rsn_size ,mem_app_disconn_reason_flag 
+3748 20600000 rtn 
+
+app_evt_timer:
+3749 67e081fb store 1 ,mem_app_evt_timer_count 
+
+app_evt_100ms_loop:
+374a 44e8c01a bpatch patch1a_1 ,mem_patch1a 
+374b 6fe081fb fetch 1 ,mem_app_evt_timer_count 
+374c 207a0000 rtn blank 
+374d 1fe0ffff increase -1 ,pdata 
+374e 67e081fb store 1 ,mem_app_evt_timer_count 
+374f 2040776e call ui_button_polling 
+3750 20403783 call app_lpm_wake_auto_lock_timer 
+3751 20406be1 call flash_write_spi_sm_timer 
+3752 6fe143ec fetch 2 ,mem_cb_event_timer 
+3753 20407d7b call callback_func 
+3754 2020374a branch app_evt_100ms_loop 
+
+timer_single_step:
+3755 efe08013 ifetch 1 ,regc 
+3756 207a0000 rtn blank 
+3757 1fe0ffff pincrease -1 
+3758 e7e08013 istore 1 ,regc 
+3759 247a0000 nrtn blank 
+375a 1a427e00 copy regb ,pdata 
+375b 20207d7b branch callback_func 
+
+timer_single_step_2b:
+375c efe10013 ifetch 2 ,regc 
+375d 207a0000 rtn blank 
+375e 1fe0ffff pincrease -1 
+375f e7e10013 istore 2 ,regc 
+3760 247a0000 nrtn blank 
+3761 1a427e00 copy regb ,pdata 
+3762 20207d7b branch callback_func 
+
+app_power_timer:
+3763 68494447 fetcht 2 ,mem_power_param_ptr 
+3764 1840a601 add temp ,power_timer_offset ,regc 
+3765 da403767 arg app_power_timer_timeout ,regb 
+3766 20203755 branch timer_single_step 
+
+app_power_timer_timeout:
+3767 204037b8 call app_got_power_state_common 
+3768 c000b76a beq power_starting ,app_enter_power_stanby_state 
+
+app_enter_power_off_state:
+3769 2020379c branch app_enter_hibernate 
+
+app_enter_power_stanby_state:
+376a 58000002 setarg power_standby 
+376b e7e08013 istore 1 ,regc 
+376c 1840a408 add temp ,power_standby_cb_offset ,regb 
+
+app_power_cb_common:
+376d efe10012 ifetch 2 ,regb 
+376e 20207d7b branch callback_func 
+
+app_bb_hibernate:
+376f 20403771 call app_disconn_reason_clear 
+3770 2020379c branch app_enter_hibernate 
+
+app_disconn_reason_clear:
+3771 58000000 setarg 0 
+3772 67e143f8 store app_disc_rsn_size ,mem_app_disconn_reason 
+3773 20600000 rtn 
+
+app_disconn_reason_flag_clear:
+3774 58000000 setarg 0 
+3775 67e143fa store app_disc_rsn_size ,mem_app_disconn_reason_flag 
+3776 20600000 rtn 
+
+app_disconn_reason_collect_ble:
+3777 6fe143fa fetch app_disc_rsn_size ,mem_app_disconn_reason_flag 
+3778 79207e07 set1 app_disc_ble ,pdata 
+3779 67e143f8 store app_disc_rsn_size ,mem_app_disconn_reason 
+377a 58000000 setarg 0 
+377b 67e143fa store app_disc_rsn_size ,mem_app_disconn_reason_flag 
+377c 20600000 rtn 
+
+app_get_lpm_wake_lock:
+377d d8e00009 arg wake_lock_app ,queue 
+377e 202024be branch lpm_get_wake_lock 
+
+app_put_lpm_wake_lock:
+377f d8e00009 arg wake_lock_app ,queue 
+3780 202024c2 branch lpm_put_wake_lock 
+
+app_lpm_wake_auto_lock:
+3781 7043f605 jam lpm_wake_up_delay_timer ,mem_wake_up_delay_timer 
+3782 2020377d branch app_get_lpm_wake_lock 
+
+app_lpm_wake_auto_lock_timer:
+3783 da6043f6 arg mem_wake_up_delay_timer ,regc 
+3784 da40377f arg app_put_lpm_wake_lock ,regb 
+3785 20203755 branch timer_single_step 
+
+app_ble_start_direct_adv:
+3786 70064d0f jam bt_cmd_start_direct_adv ,mem_fifo_temp 
+3787 20207824 branch ui_ipc_send_cmd 
+
+app_ble_stop_direct_adv:
+3788 70064d10 jam bt_cmd_stop_direct_adv ,mem_fifo_temp 
+3789 20207824 branch ui_ipc_send_cmd 
+
+app_ble_stop_adv:
+378a 70064d0e jam bt_cmd_stop_adv ,mem_fifo_temp 
+378b 20207824 branch ui_ipc_send_cmd 
+
+app_ble_start_adv:
+378c 70064d0d jam bt_cmd_start_adv ,mem_fifo_temp 
+378d 20207824 branch ui_ipc_send_cmd 
+
+app_ble_start_scan:
+378e 70064d17 jam bt_cmd_le_start_scan ,mem_fifo_temp 
+378f 20207824 branch ui_ipc_send_cmd 
+
+app_ble_stop_scan:
+3790 70064d18 jam bt_cmd_le_stop_scan ,mem_fifo_temp 
+3791 20207824 branch ui_ipc_send_cmd 
+
+app_ble_start_conn:
+3792 70064d16 jam bt_cmd_le_start_conn ,mem_fifo_temp 
+3793 20207824 branch ui_ipc_send_cmd 
+
+app_ble_disconnect:
+3794 70064d11 jam bt_cmd_le_disconnect ,mem_fifo_temp 
+3795 20207824 branch ui_ipc_send_cmd 
+
+app_led_start_blink:
+3796 70064d15 jam bt_cmd_led_blink ,mem_fifo_temp 
+3797 20207824 branch ui_ipc_send_cmd 
+
+app_led_on:
+3798 70064d14 jam bt_cmd_led_on ,mem_fifo_temp 
+3799 20207824 branch ui_ipc_send_cmd 
+
+app_led_stop_blink:
+
+app_led_off:
+379a 70064d13 jam bt_cmd_led_off ,mem_fifo_temp 
+379b 20207824 branch ui_ipc_send_cmd 
+
+app_enter_hibernate:
+379c 70064d19 jam bt_cmd_enter_hibernate ,mem_fifo_temp 
+379d 20207824 branch ui_ipc_send_cmd 
+
+app_ble_store_reconn_info:
+379e 70064d1f jam bt_cmd_store_reconn_info_le ,mem_fifo_temp 
+379f 20207824 branch ui_ipc_send_cmd 
+
+app_lpm_mult_enable:
+37a0 7920000d set1 mark_lpm_mult_enable ,mark 
+37a1 20600000 rtn 
+
+app_lpm_mult_disable:
+37a2 793f800d set0 mark_lpm_mult_enable ,mark 
+37a3 20600000 rtn 
+
+app_button_long_pressed:
+37a4 204037b8 call app_got_power_state_common 
+37a5 c00137ae beq power_standby ,app_power_shutting_down 
+
+app_power_starting:
+37a6 58000001 setarg power_starting 
+37a7 e7e08013 istore 1 ,regc 
+37a8 1840a203 add temp ,power_starting_timeout_offset ,rega 
+37a9 1840a406 add temp ,power_starting_cb_offset ,regb 
+
+app_power_common:
+37aa e8408011 ifetcht 1 ,rega 
+37ab 1a60a601 increase 1 ,regc 
+37ac e0408013 istoret 1 ,regc 
+37ad 2020376d branch app_power_cb_common 
+
+app_power_shutting_down:
+37ae 58000000 setarg power_off 
+37af e7e08013 istore 1 ,regc 
+37b0 6fe14500 fetch 2 ,mem_ui_state_map 
+37b1 c304b7b4 bbit0 ui_state_ble_connected ,app_power_off_end 
+37b2 204030a3 call le_send_terminate_ind_user_terminated 
+37b3 20403794 call app_ble_disconnect 
+
+app_power_off_end:
+37b4 68494447 fetcht 2 ,mem_power_param_ptr 
+37b5 1840a202 add temp ,power_off_timeout_offset ,rega 
+37b6 1840a404 add temp ,power_off_cb_offset ,regb 
+37b7 202037aa branch app_power_common 
+
+app_got_power_state_common:
+37b8 68494447 fetcht 2 ,mem_power_param_ptr 
+37b9 1840a600 add temp ,power_state_offset ,regc 
+37ba efe08013 ifetch 1 ,regc 
+37bb 20600000 rtn 
+
+app_event_button_up:
+37bc 204037b8 call app_got_power_state_common 
+37bd c08037bf bne power_off ,app_power_release 
+37be 2020379c branch app_enter_hibernate 
+
+app_power_release:
+37bf 1840a40a add temp ,ui_butten_up_cb_offset ,regb 
+37c0 2020376d branch app_power_cb_common 
+
+car_init:
+37c1 20407384 call enable_authrom 
+37c2 20758000 rtn wake 
+37c3 5800398b setarg car_idle_process 
+37c4 67e143e4 store 2 ,mem_cb_idle_process 
+37c5 58003a9c setarg car_cb_event_timer 
+37c6 67e143ec store 2 ,mem_cb_event_timer 
+37c7 580039be setarg car_cb_24g_ackpayload 
+37c8 67e145f9 store 2 ,mem_cb_24g_ackpayload 
+37c9 58003933 setarg car_ble_receive_data 
+37ca 67e143e8 store 2 ,mem_cb_att_write 
+37cb 58003924 setarg car_process_bb_event 
+37cc 67e143e6 store 2 ,mem_cb_bb_event_process 
+37cd 44974005 bpatch patch05_6 ,mem_patch05 
+37ce 204038f3 call car_init_environment 
+37cf 20403904 call car_add_mac_to_local_name 
+37d0 20402931 call le_modified_name 
+37d1 2040391d call car_le_param_init 
+37d2 2020789d branch queue_init 
+
+car_default_init:
+37d3 7041410a jam 0x0a ,mem_tx_power 
+37d4 7045cf84 jam 0x84 ,mem_24g_tx_phy 
+37d5 7045ce84 jam 0x84 ,mem_24g_rx_phy 
+37d6 58ffffff setarg 0xffffff 
+37d7 67e1c680 store 3 ,mem_car_full_control_remote_lap 
+37d8 704683ff jam 0xff ,mem_car_full_control_remote_lap + 3 
+37d9 58000000 setarg 0 
+37da 67e1c2dd store 3 ,mem_le_lap 
+37db 58220101 setarg 0x220101 
+37dc 67e1c2e0 store 3 ,mem_le_lap + 3 
+37dd 58ffffff setarg 0xffffff 
+37de 67e1c68c store 3 ,mem_car_motor_gpio_map 
+37df 70468fff jam 0xff ,mem_car_motor_gpio_map + 3 
+37e0 70469b01 jam 0x01 ,mem_factory_control_flag 
+37e1 58241404 setarg 0x241404 
+37e2 67e1c5aa store 3 ,mem_24g_ch_map1 
+37e3 7045ad34 jam 0x34 ,mem_24g_ch_map1 + 3 
+37e4 70469010 jam 0x10 ,mem_car_pwm_gpio 
+37e5 70469a01 jam 0x01 ,mem_stop_4w1_flag 
+37e6 70439707 jam 0x07 ,mem_le_adv_channel_map 
+37e7 70438c01 jam 0x01 ,mem_le_adv_enable 
+37e8 580000f0 setarg 0xf0 
+37e9 67e1438d store 2 ,mem_le_adv_interval 
+37ea 58000801 setarg 0x801 
+37eb 67e143b2 store 2 ,mem_le_local_feature 
+37ec 7043ba84 jam 0x84 ,mem_le_tx_phys 
+37ed 7043bb84 jam 0x84 ,mem_le_rx_phys 
+37ee 58504708 setarg 0x504708 
+37ef 67e1c26d store 3 ,mem_le_name_len 
+37f0 58435734 setarg 0x435734 
+37f1 67e1c270 store 3 ,mem_le_name_len + 3 
+37f2 585f5241 setarg 0x5f5241 
+37f3 67e1c273 store 3 ,mem_le_name_len + 6 
+37f4 70434c1f jam 0x1f ,mem_le_adv_data_len 
+37f5 58050102 setarg 0x50102 
+37f6 67e1c34d store 3 ,mem_le_adv_data 
+37f7 58000008 setarg 0x08 
+37f8 67e142d5 store 2 ,mem_le_interval_min 
+37f9 58000010 setarg 0x10 
+37fa 67e142d7 store 2 ,mem_le_interval_max 
+37fb 58000000 setarg 0 
+37fc 67e142d9 store 2 ,mem_le_latency 
+37fd 5800012c setarg 0x12c 
+37fe 67e142db store 2 ,mem_le_timeout 
+37ff 5800469d setarg mem_car_le_queue_each_size 
+3800 67e14404 store 2 ,mem_queue_ptr 
+3801 58000414 setarg 0x414 
+3802 67e2c69d store 5 ,mem_car_le_queue_each_size 
+3803 580046fd setarg mem_car_ble_att_list 
+3804 67e142f9 store 2 ,mem_ui_le_uuid_table 
+3805 38020001 setsect 0 ,0x20001 
+3806 38060000 setsect 1 ,0x20000 
+3807 38081022 setsect 2 ,0x1022 
+3808 380c0060 setsect 3 ,0x60 
+3809 67e4c6fd store 9 ,mem_car_ble_att_list 
+380a 38020002 setsect 0 ,0x20002 
+380b 380600c0 setsect 1 ,0x200c0 
+380c 380a0012 setsect 2 ,0x20012 
+380d 380c000c setsect 3 ,0xc 
+380e 67e4c705 store 9 ,mem_car_ble_att_list + 8 
+380f 38020502 setsect 0 ,0x20502 
+3810 3804004a setsect 1 ,0x4a 
+3811 38080040 setsect 2 ,0x40 
+3812 380c0808 setsect 3 ,0x808 
+3813 67e4c70e store 9 ,mem_car_ble_att_list + 17 
+3814 38010229 setsect 0 ,0x10229 
+3815 38054000 setsect 1 ,0x14000 
+3816 38082000 setsect 2 ,0x2000 
+3817 380ca000 setsect 3 ,0xa000 
+3818 67e4c717 store 9 ,mem_car_ble_att_list + 26 
+3819 38000002 setsect 0 ,0x02 
+381a 38040186 setsect 1 ,0x186 
+381b 38083020 setsect 2 ,0x3020 
+381c 380c04a0 setsect 3 ,0x4a0 
+381d 67e4c720 store 9 ,mem_car_ble_att_list + 35 
+381e 3800074e setsect 0 ,0x74e 
+381f 38040080 setsect 1 ,0x80 
+3820 380932a0 setsect 2 ,0x132a0 
+3821 380dcd04 setsect 3 ,0x1cd04 
+3822 67e4c729 store 9 ,mem_car_ble_att_list + 44 
+3823 38002074 setsect 0 ,0x2074 
+3824 38041153 setsect 1 ,0x1153 
+3825 380af4d2 setsect 2 ,0x2f4d2 
+3826 380dcdd5 setsect 3 ,0x1cdd5 
+3827 67e4c732 store 9 ,mem_car_ble_att_list + 53 
+3828 38002065 setsect 0 ,0x2065 
+3829 38040808 setsect 1 ,0x808 
+382a 380a0202 setsect 2 ,0x20202 
+382b 380c2080 setsect 3 ,0x2080 
+382c 67e4c73b store 9 ,mem_car_ble_att_list + 62 
+382d 38030200 setsect 0 ,0x30200 
+382e 38044a00 setsect 1 ,0x4a00 
+382f 380894e0 setsect 2 ,0x94e0 
+3830 380c0800 setsect 3 ,0x800 
+3831 67e4c744 store 9 ,mem_car_ble_att_list + 71 
+3832 38022a01 setsect 0 ,0x22a01 
+3833 38040000 setsect 1 ,0x0 
+3834 380800a0 setsect 2 ,0xa0 
+3835 380c0c08 setsect 3 ,0xc08 
+3836 67e4c74d store 9 ,mem_car_ble_att_list + 80 
+3837 38020128 setsect 0 ,0x20128 
+3838 380402c0 setsect 1 ,0x2c0 
+3839 38084020 setsect 2 ,0x4020 
+383a 380c20a8 setsect 3 ,0x20a8 
+383b 67e4c756 store 9 ,mem_car_ble_att_list + 89 
+383c 38000010 setsect 0 ,0x10 
+383d 38054008 setsect 1 ,0x14008 
+383e 380ac000 setsect 2 ,0x2c000 
+383f 380c3004 setsect 3 ,0x3004 
+3840 67e4c75f store 9 ,mem_car_ble_att_list + 98 
+3841 38000200 setsect 0 ,0x200 
+3842 38048a00 setsect 1 ,0x8a00 
+3843 380bff00 setsect 2 ,0x3ff00 
+3844 380c0037 setsect 3 ,0x37 
+3845 67e4c768 store 9 ,mem_car_ble_att_list + 107 
+3846 38000302 setsect 0 ,0x302 
+3847 3804804a setsect 1 ,0x804a 
+3848 380800e1 setsect 2 ,0xe1 
+3849 380fc408 setsect 3 ,0x3c408 
+384a 67e4c771 store 9 ,mem_car_ble_att_list + 116 
+384b 380004ff setsect 0 ,0x4ff 
+384c 38040000 setsect 1 ,0x0 
+384d 3808f000 setsect 2 ,0xf000 
+384e 380c0800 setsect 3 ,0x800 
+384f 67e4c77a store 9 ,mem_car_ble_att_list + 125 
+3850 38022902 setsect 0 ,0x22902 
+3851 38040000 setsect 1 ,0x0 
+3852 38080100 setsect 2 ,0x100 
+3853 380c0c08 setsect 3 ,0xc08 
+3854 67e4c783 store 9 ,mem_car_ble_att_list + 134 
+3855 38000128 setsect 0 ,0x128 
+3856 38040442 setsect 1 ,0x442 
+3857 380b2020 setsect 2 ,0x32020 
+3858 380c07ff setsect 3 ,0x7ff 
+3859 67e4c78c store 9 ,mem_car_ble_att_list + 143 
+385a 58000000 setarg 0 
+385b 67e1c795 store 3 ,mem_car_ble_att_list + 152 
+385c 7041480c jam 0x0c ,mem_system_clk 
+385d 58643f35 setarg 0x643f35 
+385e 67e1c0c3 store 3 ,mem_lpm_xtalcnt 
+385f 583b2f8f setarg 0x3b2f8f 
+3860 67e1c0c6 store 3 ,mem_lpm_isogate 
+3861 7040a720 jam 0x20 ,mem_lpm_hibernate_switch 
+3862 7040c900 jam 0x00 ,mem_lpm_ldo_sel 
+3863 7040ca08 jam 0x08 ,mem_lpm_sysctl 
+3864 7040cbb4 jam 0xb4 ,mem_lpm_hv_sel 
+3865 70409918 jam 0x18 ,mem_fcomp_div 
+3866 70411c3e jam 0x3e ,mem_xtal_c_sel 
+3867 58050e08 setarg 0x50e08 
+3868 67e1c160 store 3 ,mem_version 
+3869 58000003 setarg 0x3 
+386a 67e14163 store 2 ,mem_version + 3 
+386b 70416a20 jam 0x20 ,mem_le_tx2m_delay 
+386c 704143ff jam 0xff ,mem_gain_fix 
+386d 58000c00 setarg 0xc00 
+386e 67e1409a store 2 ,mem_rx_window_sniff 
+386f 58000004 setarg 0x4 
+3870 67e1c144 store 3 ,mem_gain_table 
+3871 70414708 jam 0x08 ,mem_gain_second_agc_en 
+3872 70444fa0 jam 0xa0 ,mem_ring_ibias_trim 
+3873 580002bc setarg 0x2bc 
+3874 67e14452 store 2 ,mem_ring_ibias_vtune_high 
+3875 58000190 setarg 0x190 
+3876 67e14450 store 2 ,mem_ring_ibias_vtune_low 
+3877 70445403 jam 0x03 ,mem_ring_ibias_calc_adc_gpio 
+3878 70445509 jam 0x09 ,mem_ring_ibias_calc_adc_channel 
+3879 704149ff jam 0xff ,mem_rf_init_data 
+387a 58004149 setarg mem_rf_init_data 
+387b 67e1409c store 2 ,mem_rf_init_ptr 
+387c 20406b28 call enable_otp_read 
+387d da20488d arg mem_otp_sys_cfg_temp ,rega 
+387e da401f00 arg otp_sys_param_cfg ,regb 
+387f df20003c arg 60 ,loopcnt 
+3880 20406b62 call otp_read_data 
+3881 20406b25 call disable_otp 
+3882 6fe0c88d fetch 1 ,mem_otp_sys_cfg_temp 
+3883 245a38b9 ncall car_system_clk ,blank 
+3884 6fe1c88e fetch 3 ,mem_otp_sys_cfg_temp + 1 
+3885 245a38bb ncall car_lpm_xtalcnt ,blank 
+3886 6fe1c891 fetch 3 ,mem_otp_sys_cfg_temp + 4 
+3887 245a38bd ncall car_lpm_isogate ,blank 
+3888 6fe0c894 fetch 1 ,mem_otp_sys_cfg_temp + 7 
+3889 245a38bf ncall car_lpm_hibernate_switch ,blank 
+388a 6fe0c895 fetch 1 ,mem_otp_sys_cfg_temp + 8 
+388b 245a38c1 ncall car_lpm_ldo_sel ,blank 
+388c 6fe0c896 fetch 1 ,mem_otp_sys_cfg_temp + 9 
+388d 245a38c3 ncall car_lpm_sysctl ,blank 
+388e 6fe0c897 fetch 1 ,mem_otp_sys_cfg_temp + 10 
+388f 245a38c5 ncall car_lpm_hv_sel ,blank 
+3890 6fe0c898 fetch 1 ,mem_otp_sys_cfg_temp + 11 
+3891 245a38c7 ncall car_fcomp_div ,blank 
+3892 6fe0c899 fetch 1 ,mem_otp_sys_cfg_temp + 12 
+3893 245a38c9 ncall car_xtal_c_sel ,blank 
+3894 6fe2c89a fetch 5 ,mem_otp_sys_cfg_temp + 13 
+3895 245a38cb ncall car_version ,blank 
+3896 6fe0c89f fetch 1 ,mem_otp_sys_cfg_temp + 18 
+3897 245a38cd ncall car_le_tx2m_delay ,blank 
+3898 6fe0c8a0 fetch 1 ,mem_otp_sys_cfg_temp + 19 
+3899 245a38cf ncall car_gain_fix ,blank 
+389a 6fe148a1 fetch 2 ,mem_otp_sys_cfg_temp + 20 
+389b 245a38d1 ncall car_rx_window_sniff ,blank 
+389c 6fe1c8a3 fetch 3 ,mem_otp_sys_cfg_temp + 22 
+389d 245a38d3 ncall car_gain_table ,blank 
+389e 6fe0c8a6 fetch 1 ,mem_otp_sys_cfg_temp + 25 
+389f 245a38d5 ncall car_gain_second_agc_en ,blank 
+38a0 6fe0c8a7 fetch 1 ,mem_otp_sys_cfg_temp + 26 
+38a1 245a38d7 ncall car_ring_ibias_trim ,blank 
+38a2 6fe148a8 fetch 2 ,mem_otp_sys_cfg_temp + 27 
+38a3 245a38d9 ncall car_ring_ibias_vtune_high ,blank 
+38a4 6fe148aa fetch 2 ,mem_otp_sys_cfg_temp + 29 
+38a5 245a38db ncall car_ring_ibias_vtune_low ,blank 
+38a6 6fe0c8ac fetch 1 ,mem_otp_sys_cfg_temp + 31 
+38a7 245a38dd ncall car_ring_ibias_calc_adc_gpio ,blank 
+38a8 6fe0c8ad fetch 1 ,mem_otp_sys_cfg_temp + 32 
+38a9 245a38df ncall car_ring_ibias_calc_adc_channel ,blank 
+38aa 6fe0c8b2 fetch 1 ,mem_otp_sys_cfg_temp + 37 
+38ab 245a38e1 ncall car_tx_power ,blank 
+38ac 6fe0c8b3 fetch 1 ,mem_otp_sys_cfg_temp + 38 
+38ad 245a38e3 ncall car_24g_tx_phy ,blank 
+38ae 6fe0c8b4 fetch 1 ,mem_otp_sys_cfg_temp + 39 
+38af 245a38e5 ncall car_24g_rx_phy ,blank 
+38b0 6fe248b5 fetch 4 ,mem_otp_sys_cfg_temp + 40 
+38b1 245a38e7 ncall car_motor_gpio_map ,blank 
+38b2 6fe0c8b9 fetch 1 ,mem_otp_sys_cfg_temp + 44 
+38b3 245a38ea ncall car_pwm_gpio ,blank 
+38b4 6fe248bb fetch 4 ,mem_otp_sys_cfg_temp + 46 
+38b5 245a38ef ncall car_24g_addr ,blank 
+38b6 6fe248bf fetch 4 ,mem_otp_sys_cfg_temp + 50 
+38b7 245a38f1 ncall car_24g_ch_map1 ,blank 
+38b8 20600000 rtn 
+
+car_system_clk:
+38b9 67e0c148 store 1 ,mem_system_clk 
+38ba 20600000 rtn 
+
+car_lpm_xtalcnt:
+38bb 67e1c0c3 store 3 ,mem_lpm_xtalcnt 
+38bc 20600000 rtn 
+
+car_lpm_isogate:
+38bd 67e1c0c6 store 3 ,mem_lpm_isogate 
+38be 20600000 rtn 
+
+car_lpm_hibernate_switch:
+38bf 67e0c0a7 store 1 ,mem_lpm_hibernate_switch 
+38c0 20600000 rtn 
+
+car_lpm_ldo_sel:
+38c1 67e0c0c9 store 1 ,mem_lpm_ldo_sel 
+38c2 20600000 rtn 
+
+car_lpm_sysctl:
+38c3 67e0c0ca store 1 ,mem_lpm_sysctl 
+38c4 20600000 rtn 
+
+car_lpm_hv_sel:
+38c5 67e0c0cb store 1 ,mem_lpm_hv_sel 
+38c6 20600000 rtn 
+
+car_fcomp_div:
+38c7 67e0c099 store 1 ,mem_fcomp_div 
+38c8 20600000 rtn 
+
+car_xtal_c_sel:
+38c9 67e0c11c store 1 ,mem_xtal_c_sel 
+38ca 20600000 rtn 
+
+car_version:
+38cb 67e2c160 store 5 ,mem_version 
+38cc 20600000 rtn 
+
+car_le_tx2m_delay:
+38cd 67e0c16a store 1 ,mem_le_tx2m_delay 
+38ce 20600000 rtn 
+
+car_gain_fix:
+38cf 67e0c143 store 1 ,mem_gain_fix 
+38d0 20600000 rtn 
+
+car_rx_window_sniff:
+38d1 67e1409a store 2 ,mem_rx_window_sniff 
+38d2 20600000 rtn 
+
+car_gain_table:
+38d3 67e1c144 store 3 ,mem_gain_table 
+38d4 20600000 rtn 
+
+car_gain_second_agc_en:
+38d5 67e0c147 store 1 ,mem_gain_second_agc_en 
+38d6 20600000 rtn 
+
+car_ring_ibias_trim:
+38d7 67e0c44f store 1 ,mem_ring_ibias_trim 
+38d8 20600000 rtn 
+
+car_ring_ibias_vtune_high:
+38d9 67e14452 store 2 ,mem_ring_ibias_vtune_high 
+38da 20600000 rtn 
+
+car_ring_ibias_vtune_low:
+38db 67e14450 store 2 ,mem_ring_ibias_vtune_low 
+38dc 20600000 rtn 
+
+car_ring_ibias_calc_adc_gpio:
+38dd 67e0c454 store 1 ,mem_ring_ibias_calc_adc_gpio 
+38de 20600000 rtn 
+
+car_ring_ibias_calc_adc_channel:
+38df 67e0c455 store 1 ,mem_ring_ibias_calc_adc_channel 
+38e0 20600000 rtn 
+
+car_tx_power:
+38e1 67e0c141 store 1 ,mem_tx_power 
+38e2 20600000 rtn 
+
+car_24g_tx_phy:
+38e3 67e0c5cf store 1 ,mem_24g_tx_phy 
+38e4 20600000 rtn 
+
+car_24g_rx_phy:
+38e5 67e0c5ce store 1 ,mem_24g_rx_phy 
+38e6 20600000 rtn 
+
+car_motor_gpio_map:
+38e7 67e2468c store 4 ,mem_car_motor_gpio_map 
+38e8 70469c01 jam 1 ,mem_car_gpio_control_mode 
+38e9 20600000 rtn 
+
+car_pwm_gpio:
+38ea 6fe0c69c fetch 1 ,mem_car_gpio_control_mode 
+38eb 247a0000 nrtn blank 
+38ec 6fe0c8b9 fetch 1 ,mem_otp_sys_cfg_temp + 44 
+38ed 67e0c690 store 1 ,mem_car_pwm_gpio 
+38ee 20600000 rtn 
+
+car_24g_addr:
+38ef 67e245a6 store 4 ,mem_24g_addr 
+38f0 20600000 rtn 
+
+car_24g_ch_map1:
+38f1 67e245aa store 4 ,mem_24g_ch_map1 
+38f2 20600000 rtn 
+
+car_init_environment:
+38f3 5800000f setarg 15 
+38f4 67e14684 store 2 ,mem_100ms_adv_control_timer 
+38f5 5800012c setarg 300 
+38f6 67e14686 store 2 ,mem_100ms_factory_test_control_timer 
+38f7 2040394f call car_whitening_24g_addr 
+38f8 20403963 call car_get_rxid 
+38f9 204038fb call car_rxid_check 
+38fa 20203981 branch car_pwm_control_init 
+
+car_rxid_check:
+38fb da2042dd arg mem_le_lap ,rega 
+38fc da404680 arg mem_car_full_control_remote_lap ,regb 
+38fd df200004 arg 4 ,loopcnt 
+38fe 20407d66 call string_compare 
+38ff 24628000 nrtn zero 
+3900 6fe0c2dd fetch 1 ,mem_le_lap 
+3901 1fe0ffff pincrease -1 
+3902 67e0c2dd store 1 ,mem_le_lap 
+3903 20600000 rtn 
+
+car_add_mac_to_local_name:
+3904 6fe0c26d fetch 1 ,mem_le_name_len 
+3905 d8a0426e arg mem_le_name_len + 1 ,contw 
+3906 98a0a400 iadd contw ,regb 
+3907 1fe0fe10 add pdata ,16 ,pdata 
+3908 67e0c26d store 1 ,mem_le_name_len 
+3909 df200006 arg 6 ,loopcnt 
+390a da2042e2 arg mem_le_lap + 5 ,rega 
+390b 1a420a00 copy regb ,contw 
+
+car_add_mac_to_local_name_loop:
+390c e8408011 ifetcht 1 ,rega 
+390d 18417ef0 and temp ,0xf0 ,pdata 
+390e 1ff1fe00 rshift4 pdata ,pdata 
+390f 20403917 call car_convert_hex_to_ascii 
+3910 e7e08005 istore 1 ,contw 
+3911 18417e0f and temp ,0x0f ,pdata 
+3912 20403917 call car_convert_hex_to_ascii 
+3913 e7e08005 istore 1 ,contw 
+3914 1a20a3ff increase -1 ,rega 
+3915 c200390c loop car_add_mac_to_local_name_loop 
+3916 20600000 rtn 
+
+car_convert_hex_to_ascii:
+3917 1fe67c09 sub pdata ,9 ,null 
+3918 2021391b branch car_convert_hex_to_ascii_0_9 ,positive 
+
+car_convert_hex_to_ascii_a_f:
+3919 1fe0fe37 add pdata ,0x37 ,pdata 
+391a 20600000 rtn 
+
+car_convert_hex_to_ascii_0_9:
+391b 1fe0fe30 add pdata ,0x30 ,pdata 
+391c 20600000 rtn 
+
+car_le_param_init:
+391d 7042e317 jam 0x17 ,mem_le_local_mtu 
+391e 5800001b setarg 0x1b 
+391f 67e14334 store 2 ,mem_le_pairing_handle 
+3920 204029a4 call le_set_config_fixed_ltk 
+3921 204029be call le_set_fixed_ltk 
+3922 204029ca call le_set_justwork 
+3923 202029ac branch le_set_config_read_authentication 
+
+car_process_bb_event:
+3924 1a627e00 deposit regc 
+3925 c00a3930 beq bt_evt_le_connected ,car_ble_connted 
+3926 c00ab928 beq bt_evt_le_disconnected ,car_ble_disconnted 
+3927 20600000 rtn 
+
+car_ble_disconnted:
+3928 70467f00 jam 0 ,mem_car_ble_connted_flag 
+3929 2040394b call car_gpio_control_stop 
+392a 70468900 jam 0x0 ,mem_period_count 
+392b 70469a01 jam 1 ,mem_stop_4w1_flag 
+392c 58000000 setarg 0 
+392d 67e1c6f2 store 3 ,mem_car_ble_write_data 
+392e 2040789d call queue_init 
+392f 2020378c branch app_ble_start_adv 
+
+car_ble_connted:
+3930 70467f01 jam 1 ,mem_car_ble_connted_flag 
+3931 20403adc call car_check_close_ice 
+3932 202037a0 branch app_lpm_mult_enable 
+
+car_ble_receive_data:
+3933 6fe1439c fetch 2 ,mem_le_att_handle 
+3934 c008b936 beq handle_of_write ,car_ble_receive_writeatt 
+3935 20600000 rtn 
+
+car_ble_receive_writeatt:
+3936 4497c005 bpatch patch05_7 ,mem_patch05 
+3937 1a427200 copy regb ,loopcnt 
+3938 1a220c00 copy rega ,contr 
+3939 d8a046f2 arg mem_car_ble_write_data ,contw 
+393a 20407cdc call memcpy 
+393b 6fe0c6f2 fetch 1 ,mem_car_ble_write_data 
+393c 207a0000 rtn blank 
+
+car_ble_receive_writeatt_parse:
+393d 2040394b call car_gpio_control_stop 
+393e 70468904 jam 0x4 ,mem_period_count 
+393f 6fe0c6f4 fetch 1 ,mem_car_ble_write_data + 2 
+3940 c1810000 rtnne 0x02 
+3941 6fe0c6fa fetch 1 ,mem_car_ble_write_data + 8 
+3942 c000ba60 beq 0x01 ,car_f + 3 
+3943 c0013a65 beq 0x02 ,car_b + 3 
+3944 c001ba6f beq 0x03 ,car_r + 3 
+3945 c0023a6a beq 0x04 ,car_l + 3 
+3946 c050ba74 beq 0xa1 ,car_fr 
+3947 c0513a71 beq 0xa2 ,car_fl 
+3948 c051ba7a beq 0xa3 ,car_br 
+3949 c0523a77 beq 0xa4 ,car_bl 
+394a 20600000 rtn 
+
+car_gpio_control_stop:
+394b 6fe0c69c fetch 1 ,mem_car_gpio_control_mode 
+394c 207a0000 rtn blank 
+394d 20403acd call car_fb_motor_stop 
+394e 20203ac1 branch car_lr_motor_stop 
+
+car_whitening_24g_addr:
+394f df200004 arg 4 ,loopcnt 
+3950 da6045a6 arg mem_24g_addr ,regc 
+3951 da4000ae arg 0xae ,regb 
+
+car_24g_whitening_loop:
+3952 20403956 call car_24g_whitening_byte 
+3953 1a60a601 increase 1 ,regc 
+3954 c2003952 loop car_24g_whitening_loop 
+3955 20600000 rtn 
+
+car_24g_whitening_byte:
+3956 da200001 arg 1 ,rega 
+
+car_24g_whitening_byte_loop:
+3957 1a43a400 lshift regb ,regb 
+3958 2a4ffe07 isolate1 7 ,regb 
+3959 2040b95e call car_24g_whitening_byte_xor ,true 
+395a 1a23a200 lshift rega ,rega 
+395b 1a227e00 deposit rega 
+395c c3840000 rtnbit1 8 
+395d 20203957 branch car_24g_whitening_byte_loop 
+
+car_24g_whitening_byte_xor:
+395e efe08013 ifetch 1 ,regc 
+395f 9a22fe00 ixor rega ,pdata 
+3960 e7e08013 istore 1 ,regc 
+3961 1a42a411 xor regb ,0x11 ,regb 
+3962 20600000 rtn 
+
+car_get_rxid:
+3963 20406b28 call enable_otp_read 
+3964 da204691 arg mem_otp_lot_xy_temp ,rega 
+3965 da401fda arg otp_mac_addr ,regb 
+3966 df200006 arg 6 ,loopcnt 
+3967 20406b62 call otp_read_data 
+3968 20406b25 call disable_otp 
+3969 6fe34691 fetch 6 ,mem_otp_lot_xy_temp 
+396a 207a0000 rtn blank 
+396b 6fe14691 fetch 2 ,mem_otp_lot_xy_temp 
+396c 67e142dd store 2 ,mem_le_lap 
+396d 6fe0c694 fetch 1 ,mem_otp_lot_xy_temp + 3 
+396e 67e0c2df store 1 ,mem_le_lap + 2 
+396f 6fe0c696 fetch 1 ,mem_otp_lot_xy_temp + 5 
+3970 67e0c2e0 store 1 ,mem_le_lap + 3 
+3971 6fe0c692 fetch 1 ,mem_otp_lot_xy_temp + 1 
+3972 1fe67c1a sub pdata ,26 ,null 
+3973 24610000 nrtn positive 
+3974 6fe0c693 fetch 1 ,mem_otp_lot_xy_temp + 2 
+3975 207a0000 rtn blank 
+3976 180a7e00 random pdata 
+3977 1fe17e07 and_into 0x07 ,pdata 
+3978 1fe3fe00 lshift pdata ,pdata 
+3979 1ff27e00 lshift4 pdata ,pdata 
+397a 6848c692 fetcht 1 ,mem_otp_lot_xy_temp + 1 
+397b 9840fe00 iadd temp ,pdata 
+397c 67e0c2de store 1 ,mem_le_lap + 1 
+397d da2042de arg mem_le_lap + 1 ,rega 
+397e da401fdb arg otp_mac_addr_piecenum ,regb 
+397f df200001 arg 1 ,loopcnt 
+3980 20206b33 branch otp_write 
+
+car_pwm_control_init:
+3981 6fe0c69c fetch 1 ,mem_car_gpio_control_mode 
+3982 247a0000 nrtn blank 
+3983 da200000 arg 0 ,rega 
+3984 204070b9 call pwm_init 
+3985 da204650 arg 18000 ,rega 
+3986 da401770 arg 6000 ,regb 
+3987 dfe00000 arg 0 ,pdata 
+3988 204070de call pwm_duty_cycle_set 
+3989 6fe0c690 fetch 1 ,mem_car_pwm_gpio 
+398a 20207100 branch pwm_enable 
+
+car_idle_process:
+398b 44984006 bpatch patch06_0 ,mem_patch06 
+398c dfe0000a arg 10 ,pdata 
+398d 2040710e call wdt_init_config 
+398e 204039a7 call car_pwm_io_control 
+398f 6fe0c67f fetch 1 ,mem_car_ble_connted_flag 
+3990 247a0000 nrtn blank 
+3991 6fe14660 fetch 2 ,mem_car_le_24g_ch_count 
+3992 1fe0fe01 increase 1 ,pdata 
+3993 67e14660 store 2 ,mem_car_le_24g_ch_count 
+3994 1ff1fe00 rshift4 pdata ,pdata 
+3995 204039fb call car_set_24g_ch 
+3996 204039ae call car_g24_sim_rx 
+3997 20403a0f call car_stop_run 
+3998 5800450e setarg mem_24g_rxbuf 
+3999 1fe0fe02 increase 2 ,pdata 
+399a 1fe20c00 copy pdata ,contr 
+399b df20000c arg len_of_24g_payload ,loopcnt 
+399c dfe00000 arg 0 ,pdata 
+399d 20407dd0 call cal_sum 
+399e 1fe17eff and pdata ,0xff ,pdata 
+399f 6848c51c fetcht 1 ,mem_24g_rxbuf + 14 
+39a0 98467c00 isub temp ,null 
+39a1 24628000 nrtn zero 
+39a2 6fe0c510 fetch 1 ,mem_24g_rxbuf + 2 
+39a3 4498c006 bpatch patch06_1 ,mem_patch06 
+39a4 c0553a88 beq g24_tx_pair_request ,car_recive_pair_request 
+39a5 c0663a21 beq g24_tx_remote_control ,car_set_motor 
+39a6 20600000 rtn 
+
+car_pwm_io_control:
+39a7 6fe0c69c fetch 1 ,mem_car_gpio_control_mode 
+39a8 247a0000 nrtn blank 
+39a9 204039c4 call car_soft_timer_process 
+39aa 204039e5 call car_pwm_change_500hz 
+39ab 204039f1 call car_period_change_timer 
+39ac 204039d7 call car_pwm_change_1khz 
+39ad 20600000 rtn 
+
+car_g24_sim_rx:
+39ae d8400004 arg 4 ,temp 
+39af d8e00005 arg 5 ,queue 
+39b0 204020dc call sniff_check_window 
+39b1 20740000 rtn user 
+39b2 79200027 set1 mark_24g_rxmode ,mark 
+39b3 58008ca0 setarg 0x8ca0 
+39b4 67e145a2 store 2 ,mem_24g_rx_window 
+39b5 70462801 jam 1 ,mem_24g_ackpayload_enable 
+39b6 6fe0c5ce fetch 1 ,mem_24g_rx_phy 
+39b7 20402579 call le_enable_phy_by_pdata 
+39b8 20403217 call g24_syncword_crc8 
+39b9 204033c7 call g24_receive_transmit_ack 
+39ba 204031f3 call g24_read_len_pid_crc 
+39bb 20403162 call g24_end_of_packet 
+39bc 24778000 nrtn user3 
+39bd 20600000 rtn 
+
+car_cb_24g_ackpayload:
+39be 70459f0b jam len_of_ack_payload ,mem_24g_datalen 
+39bf 6fe3c666 fetch 7 ,mem_car_24g_tx_payload_temp 
+39c0 67e3c530 store 7 ,mem_24g_txbuf 
+39c1 6fe2466d fetch 4 ,mem_car_24g_tx_payload_temp + 7 
+39c2 67e24537 store 4 ,mem_24g_txbuf + 7 
+39c3 20600000 rtn 
+
+car_soft_timer_process:
+39c4 da200008 arg 8 ,rega 
+
+car_soft_timer_process_check_timer:
+39c5 d8e0000c arg 12 ,queue 
+39c6 20407cf1 call timer_check 
+39c7 203a39cf branch car_soft_timer_timeout ,blank 
+39c8 9a267c00 isub rega ,null 
+39c9 2022b9cb branch car_soft_timer_process_wait_timeout ,zero 
+39ca 20610000 rtn positive 
+
+car_soft_timer_process_wait_timeout:
+39cb d8e0000c arg 12 ,queue 
+39cc 20407cf1 call timer_check 
+39cd 203a39cf branch car_soft_timer_timeout ,blank 
+39ce 202039cb branch car_soft_timer_process_wait_timeout 
+
+car_soft_timer_timeout:
+39cf 6fe0c688 fetch 1 ,mem_pwm_flag 
+39d0 c00139d5 beq 2 ,car_timer_500hz_enable 
+39d1 c001b9d3 beq 3 ,car_timer_1khz_enable 
+39d2 20600000 rtn 
+
+car_timer_1khz_enable:
+39d3 70468801 jam 1 ,mem_pwm_flag 
+39d4 20600000 rtn 
+
+car_timer_500hz_enable:
+39d5 70468800 jam 0 ,mem_pwm_flag 
+39d6 20600000 rtn 
+
+car_pwm_change_1khz:
+39d7 6fe0c689 fetch 1 ,mem_period_count 
+39d8 207a0000 rtn blank 
+39d9 6848c688 fetcht 1 ,mem_pwm_flag 
+39da 2841fe01 compare 1 ,temp ,0xff 
+39db 24608000 nrtn true 
+39dc 70468802 jam 2 ,mem_pwm_flag 
+39dd da201770 arg 6000 ,rega 
+39de da401770 arg 6000 ,regb 
+39df dfe00000 arg 0 ,pdata 
+39e0 204070de call pwm_duty_cycle_set 
+39e1 6fe0c68a fetch 1 ,mem_timer_count 
+39e2 d8e0000c arg 12 ,queue 
+39e3 20407ce3 call timer_init 
+39e4 20600000 rtn 
+
+car_pwm_change_500hz:
+39e5 6848c688 fetcht 1 ,mem_pwm_flag 
+39e6 2841fe00 compare 0 ,temp ,0xff 
+39e7 24608000 nrtn true 
+39e8 70468803 jam 3 ,mem_pwm_flag 
+39e9 da204650 arg 18000 ,rega 
+39ea da401770 arg 6000 ,regb 
+39eb dfe00000 arg 0 ,pdata 
+39ec 204070de call pwm_duty_cycle_set 
+39ed 5800000c setarg 12 
+39ee d8e0000c arg 12 ,queue 
+39ef 20407ce3 call timer_init 
+39f0 20600000 rtn 
+
+car_period_change_timer:
+39f1 6fe0c689 fetch 1 ,mem_period_count 
+39f2 d84003e8 arg 0x3e8 ,temp 
+39f3 984ffe00 imul32 temp ,pdata 
+39f4 d8400271 arg 0x271 ,temp 
+39f5 9846fc00 idiv temp 
+39f6 20407d64 call wait_div_end 
+39f7 1807fe00 quotient pdata 
+39f8 1fe0fe01 pincrease 1 
+39f9 67e0c68a store 1 ,mem_timer_count 
+39fa 20600000 rtn 
+
+car_set_24g_ch:
+39fb c0003a00 beq 0 ,car_set_ch0 
+39fc c000ba03 beq 1 ,car_set_ch1 
+39fd c0013a06 beq 2 ,car_set_ch2 
+39fe c001ba09 beq 3 ,car_set_ch3 
+39ff 20203a0c branch car_set_ch_reset 
+
+car_set_ch0:
+3a00 6fe0c5aa fetch 1 ,mem_24g_ch_map1 
+3a01 67e0c5a4 store 1 ,mem_24g_ch 
+3a02 20600000 rtn 
+
+car_set_ch1:
+3a03 6fe0c5ab fetch 1 ,mem_24g_ch_map1 + 1 
+3a04 67e0c5a4 store 1 ,mem_24g_ch 
+3a05 20600000 rtn 
+
+car_set_ch2:
+3a06 6fe0c5ac fetch 1 ,mem_24g_ch_map1 + 2 
+3a07 67e0c5a4 store 1 ,mem_24g_ch 
+3a08 20600000 rtn 
+
+car_set_ch3:
+3a09 6fe0c5ad fetch 1 ,mem_24g_ch_map1 + 3 
+3a0a 67e0c5a4 store 1 ,mem_24g_ch 
+3a0b 20600000 rtn 
+
+car_set_ch_reset:
+3a0c 58000000 setarg 0 
+3a0d 67e14660 store 2 ,mem_car_le_24g_ch_count 
+3a0e 20600000 rtn 
+
+car_stop_run:
+3a0f 6fe0c65f fetch 1 ,mem_car_le_24g_tx_pair_mode 
+3a10 207a0000 rtn blank 
+3a11 6fe0c67e fetch 1 ,mem_car_24g_loselink_count 
+3a12 d840000f arg 15 ,temp 
+3a13 98467c00 isub temp ,null 
+3a14 24610000 nrtn positive 
+3a15 70467e00 jam 0 ,mem_car_24g_loselink_count 
+3a16 58000000 setarg 0 
+3a17 67e1467b store 2 ,mem_car_24g_rx_payload_temp + 9 
+3a18 2040394b call car_gpio_control_stop 
+3a19 70468904 jam 0x4 ,mem_period_count 
+3a1a 70438c00 jam 0 ,mem_le_adv_enable 
+3a1b 70469901 jam 1 ,mem_adv_control_start_flag 
+3a1c 6fe0c69a fetch 1 ,mem_stop_4w1_flag 
+3a1d 207a0000 rtn blank 
+3a1e 70468900 jam 0x0 ,mem_period_count 
+3a1f 70438c01 jam 1 ,mem_le_adv_enable 
+3a20 20600000 rtn 
+
+car_set_motor:
+3a21 44994006 bpatch patch06_2 ,mem_patch06 
+3a22 6fe3c510 fetch 7 ,mem_24g_rxbuf + 2 
+3a23 67e3c672 store 7 ,mem_car_24g_rx_payload_temp 
+3a24 6fe2c517 fetch 5 ,mem_24g_rxbuf + 9 
+3a25 67e2c679 store 5 ,mem_car_24g_rx_payload_temp + 7 
+3a26 da204673 arg mem_car_24g_rx_payload_temp + 1 ,rega 
+3a27 6fe24662 fetch 4 ,mem_car_24g_addr_other 
+3a28 203a3a7d branch car_reconnect ,blank 
+3a29 da404662 arg mem_car_24g_addr_other ,regb 
+3a2a df200004 arg 4 ,loopcnt 
+3a2b 20407d66 call string_compare 
+3a2c 24628000 nrtn zero 
+3a2d da204677 arg mem_car_24g_rx_payload_temp + 5 ,rega 
+3a2e da404680 arg mem_car_full_control_remote_lap ,regb 
+3a2f df200004 arg 4 ,loopcnt 
+3a30 20407d66 call string_compare 
+3a31 2022ba3c branch car_run_factory_mode_select ,zero 
+3a32 da204677 arg mem_car_24g_rx_payload_temp + 5 ,rega 
+3a33 da4042dd arg mem_le_lap ,regb 
+3a34 df200004 arg 4 ,loopcnt 
+3a35 20407d66 call string_compare 
+3a36 2422ba38 nbranch car_set_unconnect ,zero 
+3a37 20203a40 branch car_run_mode_select 
+
+car_set_unconnect:
+3a38 70465f00 jam g24_unconnect ,mem_car_le_24g_tx_pair_mode 
+3a39 58000000 setarg 0 
+3a3a 67e24662 store 4 ,mem_car_24g_addr_other 
+3a3b 20600000 rtn 
+
+car_run_factory_mode_select:
+3a3c 6fe0c69b fetch 1 ,mem_factory_control_flag 
+3a3d c0003a38 beq 0 ,car_set_unconnect 
+3a3e c000ba40 beq 1 ,car_run_mode_select 
+3a3f 20600000 rtn 
+
+car_run_mode_select:
+3a40 70467e00 jam 0 ,mem_car_24g_loselink_count 
+3a41 6fe1467b fetch 2 ,mem_car_24g_rx_payload_temp + 9 
+3a42 203a3a18 branch car_stop_run + 9 ,blank 
+3a43 20403a47 call car_pwm_mode_adv_flag_init 
+3a44 20403a50 call car_factory_mode_time 
+3a45 20403a55 call car_motor_mode_1 
+3a46 20203a59 branch car_motor_mode_2 
+
+car_pwm_mode_adv_flag_init:
+3a47 6fe0c69c fetch 1 ,mem_car_gpio_control_mode 
+3a48 247a0000 nrtn blank 
+3a49 70438c01 jam 1 ,mem_le_adv_enable 
+3a4a 70439701 jam 1 ,mem_le_adv_channel_map 
+3a4b 70469a00 jam 0 ,mem_stop_4w1_flag 
+3a4c 70469900 jam 0 ,mem_adv_control_start_flag 
+3a4d 5800000f setarg 15 
+3a4e 67e14684 store 2 ,mem_100ms_adv_control_timer 
+3a4f 20600000 rtn 
+
+car_factory_mode_time:
+3a50 6fe0c69b fetch 1 ,mem_factory_control_flag 
+3a51 207a0000 rtn blank 
+3a52 5800012c setarg 300 
+3a53 67e14686 store 2 ,mem_100ms_factory_test_control_timer 
+3a54 20600000 rtn 
+
+car_motor_mode_1:
+3a55 6fe0c67c fetch 1 ,mem_car_24g_rx_payload_temp + 10 
+3a56 c000ba62 beq 1 ,car_b 
+3a57 c0013a5d beq 2 ,car_f 
+3a58 20600000 rtn 
+
+car_motor_mode_2:
+3a59 6fe0c67b fetch 1 ,mem_car_24g_rx_payload_temp + 9 
+3a5a c000ba67 beq 1 ,car_l 
+3a5b c0013a6c beq 2 ,car_r 
+3a5c 20600000 rtn 
+
+car_f:
+3a5d 6fe0c67b fetch 1 ,mem_car_24g_rx_payload_temp + 9 
+3a5e c000ba71 beq 1 ,car_fl 
+3a5f c0013a74 beq 2 ,car_fr 
+3a60 7046890a jam 0x0a ,mem_period_count 
+3a61 20203ac9 branch car_lr_motor_right 
+
+car_b:
+3a62 6fe0c67b fetch 1 ,mem_car_24g_rx_payload_temp + 9 
+3a63 c000ba77 beq 1 ,car_bl 
+3a64 c0013a7a beq 2 ,car_br 
+3a65 70468928 jam 0x28 ,mem_period_count 
+3a66 20203ac5 branch car_lr_motor_left 
+
+car_l:
+3a67 6fe0c67c fetch 1 ,mem_car_24g_rx_payload_temp + 10 
+3a68 c000ba77 beq 1 ,car_bl 
+3a69 c0013a71 beq 2 ,car_fl 
+3a6a 7046893a jam 0x3a ,mem_period_count 
+3a6b 20203ad5 branch car_fb_motor_back 
+
+car_r:
+3a6c 6fe0c67c fetch 1 ,mem_car_24g_rx_payload_temp + 10 
+3a6d c000ba7a beq 1 ,car_br 
+3a6e c0013a74 beq 2 ,car_fr 
+3a6f 70468940 jam 0x40 ,mem_period_count 
+3a70 20203ad1 branch car_fb_motor_front 
+
+car_fl:
+3a71 7046891c jam 0x1c ,mem_period_count 
+3a72 20403ac9 call car_lr_motor_right 
+3a73 20203ad5 branch car_fb_motor_back 
+
+car_fr:
+3a74 70468922 jam 0x22 ,mem_period_count 
+3a75 20403ac9 call car_lr_motor_right 
+3a76 20203ad1 branch car_fb_motor_front 
+
+car_bl:
+3a77 70468934 jam 0x34 ,mem_period_count 
+3a78 20403ac5 call car_lr_motor_left 
+3a79 20203ad5 branch car_fb_motor_back 
+
+car_br:
+3a7a 7046892e jam 0x2e ,mem_period_count 
+3a7b 20403ac5 call car_lr_motor_left 
+3a7c 20203ad1 branch car_fb_motor_front 
+
+car_reconnect:
+3a7d da204677 arg mem_car_24g_rx_payload_temp + 5 ,rega 
+3a7e da404680 arg mem_car_full_control_remote_lap ,regb 
+3a7f df200004 arg 4 ,loopcnt 
+3a80 20407d66 call string_compare 
+3a81 2022ba88 branch car_recive_pair_request ,zero 
+3a82 da204677 arg mem_car_24g_rx_payload_temp + 5 ,rega 
+3a83 da4042dd arg mem_le_lap ,regb 
+3a84 df200004 arg 4 ,loopcnt 
+3a85 20407d66 call string_compare 
+3a86 24628000 nrtn zero 
+3a87 20203a88 branch car_recive_pair_request 
+
+car_recive_pair_request:
+3a88 6fe3c510 fetch 7 ,mem_24g_rxbuf + 2 
+3a89 67e3c672 store 7 ,mem_car_24g_rx_payload_temp 
+3a8a 6fe0c65f fetch 1 ,mem_car_le_24g_tx_pair_mode 
+3a8b c0003a8e beq g24_unconnect ,car_send_pair_response 
+3a8c c000ba97 beq g24_connected ,car_send_pair_response_juge 
+3a8d 20600000 rtn 
+
+car_send_pair_response:
+3a8e 20403adc call car_check_close_ice 
+3a8f 70465f01 jam g24_connected ,mem_car_le_24g_tx_pair_mode 
+3a90 704666bb jam g24_rx_pair_respones ,mem_car_24g_tx_payload_temp 
+3a91 6fe24673 fetch 4 ,mem_car_24g_rx_payload_temp + 1 
+3a92 67e24662 store 4 ,mem_car_24g_addr_other 
+3a93 67e2466b store 4 ,mem_car_24g_tx_payload_temp + 5 
+3a94 6fe242dd fetch 4 ,mem_le_lap 
+3a95 67e24667 store 4 ,mem_car_24g_tx_payload_temp + 1 
+3a96 20600000 rtn 
+
+car_send_pair_response_juge:
+3a97 da204673 arg mem_car_24g_rx_payload_temp + 1 ,rega 
+3a98 da404662 arg mem_car_24g_addr_other ,regb 
+3a99 df200004 arg 4 ,loopcnt 
+3a9a 20407d66 call string_compare 
+3a9b 2022ba8e branch car_send_pair_response ,zero 
+
+car_cb_event_timer:
+3a9c 6fe0c67e fetch 1 ,mem_car_24g_loselink_count 
+3a9d 1fe0fe01 increase 1 ,pdata 
+3a9e 67e0c67e store 1 ,mem_car_24g_loselink_count 
+3a9f 20403aa1 call car_100ms_timer_adv_control 
+3aa0 20203aae branch car_100ms_timer_factory_test_control 
+
+car_100ms_timer_adv_control:
+3aa1 6fe0c69c fetch 1 ,mem_car_gpio_control_mode 
+3aa2 247a0000 nrtn blank 
+3aa3 6fe0c699 fetch 1 ,mem_adv_control_start_flag 
+3aa4 207a0000 rtn blank 
+3aa5 da604684 arg mem_100ms_adv_control_timer ,regc 
+3aa6 da403aa8 arg car_100ms_timer_adv_control_timeout ,regb 
+3aa7 2020375c branch timer_single_step_2b 
+
+car_100ms_timer_adv_control_timeout:
+3aa8 5800000f setarg 15 
+3aa9 67e14684 store 2 ,mem_100ms_adv_control_timer 
+3aaa 70439707 jam 7 ,mem_le_adv_channel_map 
+3aab 70469900 jam 0 ,mem_adv_control_start_flag 
+3aac 70469a01 jam 1 ,mem_stop_4w1_flag 
+3aad 20600000 rtn 
+
+car_100ms_timer_factory_test_control:
+3aae 6fe0c69b fetch 1 ,mem_factory_control_flag 
+3aaf 207a0000 rtn blank 
+3ab0 da604686 arg mem_100ms_factory_test_control_timer ,regc 
+3ab1 da403ab3 arg car_100ms_timer_factory_test_timeout ,regb 
+3ab2 2020375c branch timer_single_step_2b 
+
+car_100ms_timer_factory_test_timeout:
+3ab3 5800012c setarg 300 
+3ab4 67e14686 store 2 ,mem_100ms_factory_test_control_timer 
+3ab5 70469b00 jam 0 ,mem_factory_control_flag 
+3ab6 20600000 rtn 
+
+car_motor1_status_select:
+3ab7 efe08006 ifetch 1 ,contr 
+3ab8 c0003ac1 beq turn_front ,car_lr_motor_stop 
+3ab9 c000bac5 beq turn_left ,car_lr_motor_left 
+3aba c0013ac9 beq turn_right ,car_lr_motor_right 
+3abb 20600000 rtn 
+
+car_motor2_status_select:
+3abc efe08006 ifetch 1 ,contr 
+3abd c0003acd beq motor_stop ,car_fb_motor_stop 
+3abe c0013ad1 beq go_back ,car_fb_motor_front 
+3abf c000bad5 beq go_front ,car_fb_motor_back 
+3ac0 20600000 rtn 
+
+car_lr_motor_stop:
+3ac1 6848c68c fetcht 1 ,mem_car_motor_left_gpio 
+3ac2 20406eed call gpio_out_inactive 
+3ac3 6848c68d fetcht 1 ,mem_car_motor_right_gpio 
+3ac4 20206eed branch gpio_out_inactive 
+
+car_lr_motor_left:
+3ac5 6848c68c fetcht 1 ,mem_car_motor_left_gpio 
+3ac6 20406ef1 call gpio_out_active 
+3ac7 6848c68d fetcht 1 ,mem_car_motor_right_gpio 
+3ac8 20206eed branch gpio_out_inactive 
+
+car_lr_motor_right:
+3ac9 6848c68c fetcht 1 ,mem_car_motor_left_gpio 
+3aca 20406eed call gpio_out_inactive 
+3acb 6848c68d fetcht 1 ,mem_car_motor_right_gpio 
+3acc 20206ef1 branch gpio_out_active 
+
+car_fb_motor_stop:
+3acd 6848c68e fetcht 1 ,mem_car_motor_front_gpio 
+3ace 20406eed call gpio_out_inactive 
+3acf 6848c68f fetcht 1 ,mem_car_motor_back_gpio 
+3ad0 20206eed branch gpio_out_inactive 
+
+car_fb_motor_front:
+3ad1 6848c68e fetcht 1 ,mem_car_motor_front_gpio 
+3ad2 20406ef1 call gpio_out_active 
+3ad3 6848c68f fetcht 1 ,mem_car_motor_back_gpio 
+3ad4 20206eed branch gpio_out_inactive 
+
+car_fb_motor_back:
+3ad5 6848c68e fetcht 1 ,mem_car_motor_front_gpio 
+3ad6 20406eed call gpio_out_inactive 
+3ad7 6848c68f fetcht 1 ,mem_car_motor_back_gpio 
+3ad8 20206ef1 branch gpio_out_active 
+
+car_le_stop_random_delay_check:
+3ad9 6fe0c69a fetch 1 ,mem_stop_4w1_flag 
+3ada 203a2ad1 branch le_adv_not_match + 13 ,blank 
+3adb 20202acc branch le_adv_not_match + 8 
+
+car_check_close_ice:
+3adc 6fe0c69c fetch 1 ,mem_car_gpio_control_mode 
+3add 207a0000 rtn blank 
+3ade 202023a5 branch lpm_write_ice_disable 
+
+remote_car_init:
+3adf 20407384 call enable_authrom 
+3ae0 4499c006 bpatch patch06_3 ,mem_patch06 
+3ae1 6fe0c666 fetch 1 ,mem_remote_le_24g_tx_pair_mode 
+3ae2 205a23a9 call lpm_write_ice_enable ,blank 
+3ae3 20403b97 call remote_car_set__lpm_timer_set 
+3ae4 20758000 rtn wake 
+3ae5 2040711d call wdt_set_disable 
+3ae6 58003bec setarg remote_car_idle_process 
+3ae7 67e143e4 store 2 ,mem_cb_idle_process 
+3ae8 58003ca4 setarg remote_car_cb_event_timer 
+3ae9 67e143ec store 2 ,mem_cb_event_timer 
+3aea 20403ba5 call remote_car_get_txid 
+3aeb 20403bc3 call remote_car_txid_check 
+3aec 20403bcc call remote_car_whitening_24g_addr 
+3aed 20203be0 branch remote_car_lpm_gpio_config_flag_init 
+
+remote_car_default_init:
+3aee 7041410a jam 0x0a ,mem_tx_power 
+3aef 7045cf84 jam 0x84 ,mem_24g_tx_phy 
+3af0 7045ce84 jam 0x84 ,mem_24g_rx_phy 
+3af1 58ffffff setarg 0xffffff 
+3af2 67e1c655 store 3 ,mem_remote_full_control_remote_lap 
+3af3 704658ff jam 0xff ,mem_remote_full_control_remote_lap + 3 
+3af4 58000000 setarg 0 
+3af5 67e1c2dd store 3 ,mem_le_lap 
+3af6 58220101 setarg 0x220101 
+3af7 67e1c2e0 store 3 ,mem_le_lap + 3 
+3af8 58858c0c setarg 0x858c0c 
+3af9 67e1c659 store 3 ,mem_remote_car_key_conf0 
+3afa 70465c05 jam 0x05 ,mem_remote_car_key_conf0 + 3 
+3afb 7046490d jam 0x0d ,mem_24g_tx_led_map 
+3afc 70466112 jam 0x12 ,mem_key_public_gpio 
+3afd 58241404 setarg 0x241404 
+3afe 67e1c5aa store 3 ,mem_24g_ch_map1 
+3aff 7045ad34 jam 0x34 ,mem_24g_ch_map1 + 3 
+3b00 7041480c jam 0x0c ,mem_system_clk 
+3b01 58643f35 setarg 0x643f35 
+3b02 67e1c0c3 store 3 ,mem_lpm_xtalcnt 
+3b03 583b2f8f setarg 0x3b2f8f 
+3b04 67e1c0c6 store 3 ,mem_lpm_isogate 
+3b05 7040a720 jam 0x20 ,mem_lpm_hibernate_switch 
+3b06 7040c900 jam 0x00 ,mem_lpm_ldo_sel 
+3b07 7040ca08 jam 0x08 ,mem_lpm_sysctl 
+3b08 7040cbb4 jam 0xb4 ,mem_lpm_hv_sel 
+3b09 70409918 jam 0x18 ,mem_fcomp_div 
+3b0a 70411c3e jam 0x3e ,mem_xtal_c_sel 
+3b0b 58050e08 setarg 0x50e08 
+3b0c 67e1c160 store 3 ,mem_version 
+3b0d 58000003 setarg 0x3 
+3b0e 67e14163 store 2 ,mem_version + 3 
+3b0f 70416a20 jam 0x20 ,mem_le_tx2m_delay 
+3b10 704143ff jam 0xff ,mem_gain_fix 
+3b11 58000c00 setarg 0xc00 
+3b12 67e1409a store 2 ,mem_rx_window_sniff 
+3b13 58000004 setarg 0x4 
+3b14 67e1c144 store 3 ,mem_gain_table 
+3b15 70414708 jam 0x08 ,mem_gain_second_agc_en 
+3b16 70444fa0 jam 0xa0 ,mem_ring_ibias_trim 
+3b17 580002bc setarg 0x2bc 
+3b18 67e14452 store 2 ,mem_ring_ibias_vtune_high 
+3b19 58000190 setarg 0x190 
+3b1a 67e14450 store 2 ,mem_ring_ibias_vtune_low 
+3b1b 70445403 jam 0x03 ,mem_ring_ibias_calc_adc_gpio 
+3b1c 70445509 jam 0x09 ,mem_ring_ibias_calc_adc_channel 
+3b1d 704149ff jam 0xff ,mem_rf_init_data 
+3b1e 58004149 setarg mem_rf_init_data 
+3b1f 67e1409c store 2 ,mem_rf_init_ptr 
+3b20 20406b28 call enable_otp_read 
+3b21 da20488d arg mem_otp_sys_cfg_temp ,rega 
+3b22 da401f00 arg otp_sys_param_cfg ,regb 
+3b23 df20003c arg 60 ,loopcnt 
+3b24 20406b62 call otp_read_data 
+3b25 20406b25 call disable_otp 
+3b26 6fe0c88d fetch 1 ,mem_otp_sys_cfg_temp 
+3b27 245a3b5f ncall remote_car_system_clk ,blank 
+3b28 6fe1c88e fetch 3 ,mem_otp_sys_cfg_temp + 1 
+3b29 245a3b61 ncall remote_car_lpm_xtalcnt ,blank 
+3b2a 6fe1c891 fetch 3 ,mem_otp_sys_cfg_temp + 4 
+3b2b 245a3b63 ncall remote_car_lpm_isogate ,blank 
+3b2c 6fe0c894 fetch 1 ,mem_otp_sys_cfg_temp + 7 
+3b2d 245a3b65 ncall remote_car_lpm_hibernate_switch ,blank 
+3b2e 6fe0c895 fetch 1 ,mem_otp_sys_cfg_temp + 8 
+3b2f 245a3b67 ncall remote_car_lpm_ldo_sel ,blank 
+3b30 6fe0c896 fetch 1 ,mem_otp_sys_cfg_temp + 9 
+3b31 245a3b69 ncall remote_car_lpm_sysctl ,blank 
+3b32 6fe0c897 fetch 1 ,mem_otp_sys_cfg_temp + 10 
+3b33 245a3b6b ncall remote_car_lpm_hv_sel ,blank 
+3b34 6fe0c898 fetch 1 ,mem_otp_sys_cfg_temp + 11 
+3b35 245a3b6d ncall remote_car_fcomp_div ,blank 
+3b36 6fe0c899 fetch 1 ,mem_otp_sys_cfg_temp + 12 
+3b37 245a3b6f ncall remote_car_xtal_c_sel ,blank 
+3b38 6fe2c89a fetch 5 ,mem_otp_sys_cfg_temp + 13 
+3b39 245a3b71 ncall remote_car_version ,blank 
+3b3a 6fe0c89f fetch 1 ,mem_otp_sys_cfg_temp + 18 
+3b3b 245a3b73 ncall remote_car_le_tx2m_delay ,blank 
+3b3c 6fe0c8a0 fetch 1 ,mem_otp_sys_cfg_temp + 19 
+3b3d 245a3b75 ncall remote_car_gain_fix ,blank 
+3b3e 6fe148a1 fetch 2 ,mem_otp_sys_cfg_temp + 20 
+3b3f 245a3b77 ncall remote_car_rx_window_sniff ,blank 
+3b40 6fe1c8a3 fetch 3 ,mem_otp_sys_cfg_temp + 22 
+3b41 245a3b79 ncall remote_car_gain_table ,blank 
+3b42 6fe0c8a6 fetch 1 ,mem_otp_sys_cfg_temp + 25 
+3b43 245a3b7b ncall remote_car_gain_second_agc_en ,blank 
+3b44 6fe0c8a7 fetch 1 ,mem_otp_sys_cfg_temp + 26 
+3b45 245a3b7d ncall remote_car_ring_ibias_trim ,blank 
+3b46 6fe148a8 fetch 2 ,mem_otp_sys_cfg_temp + 27 
+3b47 245a3b7f ncall remote_car_ring_ibias_vtune_high ,blank 
+3b48 6fe148aa fetch 2 ,mem_otp_sys_cfg_temp + 29 
+3b49 245a3b81 ncall remote_car_ring_ibias_vtune_low ,blank 
+3b4a 6fe0c8ac fetch 1 ,mem_otp_sys_cfg_temp + 31 
+3b4b 245a3b83 ncall remote_car_ring_ibias_calc_adc_gpio ,blank 
+3b4c 6fe0c8ad fetch 1 ,mem_otp_sys_cfg_temp + 32 
+3b4d 245a3b85 ncall remote_car_ring_ibias_calc_adc_channel ,blank 
+3b4e 6fe0c8b2 fetch 1 ,mem_otp_sys_cfg_temp + 37 
+3b4f 245a3b87 ncall remote_car_tx_power ,blank 
+3b50 6fe0c8b3 fetch 1 ,mem_otp_sys_cfg_temp + 38 
+3b51 245a3b89 ncall remote_car_24g_tx_phy ,blank 
+3b52 6fe0c8b4 fetch 1 ,mem_otp_sys_cfg_temp + 39 
+3b53 245a3b8b ncall remote_car_24g_rx_phy ,blank 
+3b54 6fe248b5 fetch 4 ,mem_otp_sys_cfg_temp + 40 
+3b55 245a3b8d ncall remote_car_key_conf0 ,blank 
+3b56 6fe0c8b9 fetch 1 ,mem_otp_sys_cfg_temp + 44 
+3b57 245a3b8f ncall remote_car_key_public_gpio ,blank 
+3b58 6fe0c8ba fetch 1 ,mem_otp_sys_cfg_temp + 45 
+3b59 245a3b91 ncall remote_car_24g_tx_led_map ,blank 
+3b5a 6fe248bb fetch 4 ,mem_otp_sys_cfg_temp + 46 
+3b5b 245a3b93 ncall remote_car_24g_addr ,blank 
+3b5c 6fe248bf fetch 4 ,mem_otp_sys_cfg_temp + 50 
+3b5d 245a3b95 ncall remote_car_24g_ch_map1 ,blank 
+3b5e 20600000 rtn 
+
+remote_car_system_clk:
+3b5f 67e0c148 store 1 ,mem_system_clk 
+3b60 20600000 rtn 
+
+remote_car_lpm_xtalcnt:
+3b61 67e1c0c3 store 3 ,mem_lpm_xtalcnt 
+3b62 20600000 rtn 
+
+remote_car_lpm_isogate:
+3b63 67e1c0c6 store 3 ,mem_lpm_isogate 
+3b64 20600000 rtn 
+
+remote_car_lpm_hibernate_switch:
+3b65 67e0c0a7 store 1 ,mem_lpm_hibernate_switch 
+3b66 20600000 rtn 
+
+remote_car_lpm_ldo_sel:
+3b67 67e0c0c9 store 1 ,mem_lpm_ldo_sel 
+3b68 20600000 rtn 
+
+remote_car_lpm_sysctl:
+3b69 67e0c0ca store 1 ,mem_lpm_sysctl 
+3b6a 20600000 rtn 
+
+remote_car_lpm_hv_sel:
+3b6b 67e0c0cb store 1 ,mem_lpm_hv_sel 
+3b6c 20600000 rtn 
+
+remote_car_fcomp_div:
+3b6d 67e0c099 store 1 ,mem_fcomp_div 
+3b6e 20600000 rtn 
+
+remote_car_xtal_c_sel:
+3b6f 67e0c11c store 1 ,mem_xtal_c_sel 
+3b70 20600000 rtn 
+
+remote_car_version:
+3b71 67e2c160 store 5 ,mem_version 
+3b72 20600000 rtn 
+
+remote_car_le_tx2m_delay:
+3b73 67e0c16a store 1 ,mem_le_tx2m_delay 
+3b74 20600000 rtn 
+
+remote_car_gain_fix:
+3b75 67e0c143 store 1 ,mem_gain_fix 
+3b76 20600000 rtn 
+
+remote_car_rx_window_sniff:
+3b77 67e1409a store 2 ,mem_rx_window_sniff 
+3b78 20600000 rtn 
+
+remote_car_gain_table:
+3b79 67e1c144 store 3 ,mem_gain_table 
+3b7a 20600000 rtn 
+
+remote_car_gain_second_agc_en:
+3b7b 67e0c147 store 1 ,mem_gain_second_agc_en 
+3b7c 20600000 rtn 
+
+remote_car_ring_ibias_trim:
+3b7d 67e0c44f store 1 ,mem_ring_ibias_trim 
+3b7e 20600000 rtn 
+
+remote_car_ring_ibias_vtune_high:
+3b7f 67e14452 store 2 ,mem_ring_ibias_vtune_high 
+3b80 20600000 rtn 
+
+remote_car_ring_ibias_vtune_low:
+3b81 67e14450 store 2 ,mem_ring_ibias_vtune_low 
+3b82 20600000 rtn 
+
+remote_car_ring_ibias_calc_adc_gpio:
+3b83 67e0c454 store 1 ,mem_ring_ibias_calc_adc_gpio 
+3b84 20600000 rtn 
+
+remote_car_ring_ibias_calc_adc_channel:
+3b85 67e0c455 store 1 ,mem_ring_ibias_calc_adc_channel 
+3b86 20600000 rtn 
+
+remote_car_tx_power:
+3b87 67e0c141 store 1 ,mem_tx_power 
+3b88 20600000 rtn 
+
+remote_car_24g_tx_phy:
+3b89 67e0c5cf store 1 ,mem_24g_tx_phy 
+3b8a 20600000 rtn 
+
+remote_car_24g_rx_phy:
+3b8b 67e0c5ce store 1 ,mem_24g_rx_phy 
+3b8c 20600000 rtn 
+
+remote_car_key_conf0:
+3b8d 67e24659 store 4 ,mem_remote_car_key_conf0 
+3b8e 20600000 rtn 
+
+remote_car_key_public_gpio:
+3b8f 67e0c661 store 1 ,mem_key_public_gpio 
+3b90 20600000 rtn 
+
+remote_car_24g_tx_led_map:
+3b91 67e0c649 store 1 ,mem_24g_tx_led_map 
+3b92 20600000 rtn 
+
+remote_car_24g_addr:
+3b93 67e245a6 store 4 ,mem_24g_addr 
+3b94 20600000 rtn 
+
+remote_car_24g_ch_map1:
+3b95 67e245aa store 4 ,mem_24g_ch_map1 
+3b96 20600000 rtn 
+
+remote_car_set__lpm_timer_set:
+3b97 6fe0c666 fetch 1 ,mem_remote_le_24g_tx_pair_mode 
+3b98 c0003b9b beq g24_unconnect ,remote_car_set_uconnect_lpm_time 
+3b99 c000bba0 beq g24_connected ,remote_car_set_connected_lpm_time 
+3b9a 20600000 rtn 
+
+remote_car_set_uconnect_lpm_time:
+3b9b 58000000 setarg 0 
+3b9c 67e1464b store 2 ,mem_24g_lpm_timer_count 
+3b9d 5800012c setarg 300 
+3b9e 67e1464d store 2 ,mem_24g_lpm_enter_count 
+3b9f 20600000 rtn 
+
+remote_car_set_connected_lpm_time:
+3ba0 58000000 setarg 0 
+3ba1 67e1464b store 2 ,mem_24g_lpm_timer_count 
+3ba2 5800000f setarg 15 
+3ba3 67e1464d store 2 ,mem_24g_lpm_enter_count 
+3ba4 20600000 rtn 
+
+remote_car_get_txid:
+3ba5 20406b28 call enable_otp_read 
+3ba6 da20464f arg mem_remote_otp_lot_xy_temp ,rega 
+3ba7 da401fda arg otp_mac_addr ,regb 
+3ba8 df200006 arg 6 ,loopcnt 
+3ba9 20406b62 call otp_read_data 
+3baa 20406b25 call disable_otp 
+3bab 6fe3464f fetch 6 ,mem_remote_otp_lot_xy_temp 
+3bac 207a0000 rtn blank 
+3bad 6fe1464f fetch 2 ,mem_remote_otp_lot_xy_temp 
+3bae 67e142dd store 2 ,mem_le_lap 
+3baf 6fe0c652 fetch 1 ,mem_remote_otp_lot_xy_temp + 3 
+3bb0 67e0c2df store 1 ,mem_le_lap + 2 
+3bb1 6fe0c654 fetch 1 ,mem_remote_otp_lot_xy_temp + 5 
+3bb2 67e0c2e0 store 1 ,mem_le_lap + 3 
+3bb3 6fe0c650 fetch 1 ,mem_remote_otp_lot_xy_temp + 1 
+3bb4 1fe67c1a sub pdata ,26 ,null 
+3bb5 24610000 nrtn positive 
+3bb6 6fe0c651 fetch 1 ,mem_remote_otp_lot_xy_temp + 2 
+3bb7 207a0000 rtn blank 
+3bb8 180a7e00 random pdata 
+3bb9 1fe17e07 and_into 0x07 ,pdata 
+3bba 1fe3fe00 lshift pdata ,pdata 
+3bbb 1ff27e00 lshift4 pdata ,pdata 
+3bbc 6848c650 fetcht 1 ,mem_remote_otp_lot_xy_temp + 1 
+3bbd 9840fe00 iadd temp ,pdata 
+3bbe 67e0c2de store 1 ,mem_le_lap + 1 
+3bbf da2042de arg mem_le_lap + 1 ,rega 
+3bc0 da401fdb arg otp_mac_addr_piecenum ,regb 
+3bc1 df200001 arg 1 ,loopcnt 
+3bc2 20206b33 branch otp_write 
+
+remote_car_txid_check:
+3bc3 da2042dd arg mem_le_lap ,rega 
+3bc4 da404655 arg mem_remote_full_control_remote_lap ,regb 
+3bc5 df200004 arg 4 ,loopcnt 
+3bc6 20407d66 call string_compare 
+3bc7 24628000 nrtn zero 
+3bc8 6fe0c2dd fetch 1 ,mem_le_lap 
+3bc9 1fe0ffff pincrease -1 
+3bca 67e0c2dd store 1 ,mem_le_lap 
+3bcb 20600000 rtn 
+
+remote_car_whitening_24g_addr:
+3bcc df200004 arg 4 ,loopcnt 
+3bcd da6045a6 arg mem_24g_addr ,regc 
+3bce da4000ae arg 0xae ,regb 
+
+remote_car_24g_whitening_loop:
+3bcf 20403bd3 call remote_car_24g_whitening_byte 
+3bd0 1a60a601 increase 1 ,regc 
+3bd1 c2003bcf loop remote_car_24g_whitening_loop 
+3bd2 20600000 rtn 
+
+remote_car_24g_whitening_byte:
+3bd3 da200001 arg 1 ,rega 
+
+remote_car_24g_whitening_byte_loop:
+3bd4 1a43a400 lshift regb ,regb 
+3bd5 2a4ffe07 isolate1 7 ,regb 
+3bd6 2040bbdb call remote_car_24g_whitening_byte_xor ,true 
+3bd7 1a23a200 lshift rega ,rega 
+3bd8 1a227e00 deposit rega 
+3bd9 c3840000 rtnbit1 8 
+3bda 20203bd4 branch remote_car_24g_whitening_byte_loop 
+
+remote_car_24g_whitening_byte_xor:
+3bdb efe08013 ifetch 1 ,regc 
+3bdc 9a22fe00 ixor rega ,pdata 
+3bdd e7e08013 istore 1 ,regc 
+3bde 1a42a411 xor regb ,0x11 ,regb 
+3bdf 20600000 rtn 
+
+remote_car_lpm_gpio_config_flag_init:
+3be0 d8400000 arg 0 ,temp 
+3be1 d8c0465a arg mem_remote_car_key_conf0 + 1 ,contr 
+3be2 df200002 arg 2 ,loopcnt 
+
+remote_car_iocfg_pullup_loop:
+3be3 efe08006 ifetch 1 ,contr 
+3be4 793ffe07 set0 7 ,pdata 
+3be5 1fe20e00 copy pdata ,queue 
+3be6 58000000 setarg 0 
+3be7 f9207e00 qset1 pdata 
+3be8 98408400 iadd temp ,temp 
+3be9 c2003be3 loop remote_car_iocfg_pullup_loop 
+3bea 604a4644 storet 4 ,mem_remote_lpm_gpio_config_flag 
+3beb 20600000 rtn 
+
+remote_car_idle_process:
+3bec 449a4006 bpatch patch06_4 ,mem_patch06 
+3bed 6fe14663 fetch 2 ,mem_remote_le_24g_ch_count 
+3bee 1fe0fe01 increase 1 ,pdata 
+3bef 67e14663 store 2 ,mem_remote_le_24g_ch_count 
+3bf0 1feb7e00 rshift2 pdata ,pdata 
+3bf1 20403bf7 call remote_car_set_24g_ch 
+3bf2 20403c32 call remote_car_g24_recved_ack_parse 
+
+remote_car_24g_matching_process:
+3bf3 6fe0c666 fetch 1 ,mem_remote_le_24g_tx_pair_mode 
+3bf4 c0003c0b beq g24_unconnect ,remote_car_send_pair_request 
+3bf5 c000bc45 beq g24_connected ,remote_car_send_remote_control 
+3bf6 20600000 rtn 
+
+remote_car_set_24g_ch:
+3bf7 c0003bfc beq 0 ,remote_car_set_ch0 
+3bf8 c000bbff beq 1 ,remote_car_set_ch1 
+3bf9 c0013c02 beq 2 ,remote_car_set_ch2 
+3bfa c001bc05 beq 3 ,remote_car_set_ch3 
+3bfb 20203c08 branch remote_car_set_ch_reset 
+
+remote_car_set_ch0:
+3bfc 6fe0c5aa fetch 1 ,mem_24g_ch_map1 
+3bfd 67e0c5a4 store 1 ,mem_24g_ch 
+3bfe 20600000 rtn 
+
+remote_car_set_ch1:
+3bff 6fe0c5ab fetch 1 ,mem_24g_ch_map1 + 1 
+3c00 67e0c5a4 store 1 ,mem_24g_ch 
+3c01 20600000 rtn 
+
+remote_car_set_ch2:
+3c02 6fe0c5ac fetch 1 ,mem_24g_ch_map1 + 2 
+3c03 67e0c5a4 store 1 ,mem_24g_ch 
+3c04 20600000 rtn 
+
+remote_car_set_ch3:
+3c05 6fe0c5ad fetch 1 ,mem_24g_ch_map1 + 3 
+3c06 67e0c5a4 store 1 ,mem_24g_ch 
+3c07 20600000 rtn 
+
+remote_car_set_ch_reset:
+3c08 58000000 setarg 0 
+3c09 67e14663 store 2 ,mem_remote_le_24g_ch_count 
+3c0a 20600000 rtn 
+
+remote_car_send_pair_request:
+3c0b 70466baa jam g24_tx_pair_request ,mem_remote_24g_tx_payload_temp 
+3c0c 6fe242dd fetch 4 ,mem_le_lap 
+3c0d 67e2466c store 4 ,mem_remote_24g_tx_payload_temp + 1 
+3c0e 20203c0f branch remote_car_g24_sim_tx_with_datalen_set 
+
+remote_car_g24_sim_tx_with_datalen_set:
+3c0f 793f8027 set0 mark_24g_rxmode ,mark 
+3c10 58002ee0 setarg 0x2ee0 
+3c11 67e145a2 store 2 ,mem_24g_rx_window 
+3c12 6fe3c66b fetch 7 ,mem_remote_24g_tx_payload_temp 
+3c13 67e3c530 store 7 ,mem_24g_txbuf 
+3c14 6fe2c672 fetch 5 ,mem_remote_24g_tx_payload_temp + 7 
+3c15 67e2c537 store 5 ,mem_24g_txbuf + 7 
+3c16 df20000c arg len_of_24g_payload ,loopcnt 
+3c17 dfe00000 arg 0 ,pdata 
+3c18 d8c04530 arg mem_24g_txbuf ,contr 
+3c19 20407dd0 call cal_sum 
+3c1a e7e08005 istore 1 ,contw 
+3c1b 5800000c setarg len_of_24g_payload 
+3c1c 1fe0fe01 increase 1 ,pdata 
+3c1d 67e0c59f store 1 ,mem_24g_datalen 
+3c1e 20203c1f branch remote_car_g24_sim_tx 
+
+remote_car_g24_sim_tx:
+3c1f 6fe0c5cf fetch 1 ,mem_24g_tx_phy 
+3c20 20402579 call le_enable_phy_by_pdata 
+3c21 20403217 call g24_syncword_crc8 
+3c22 70003588 jam 0x88 ,mem_rssi_hex 
+3c23 204031c4 call g24_transmit_prep 
+3c24 2040362a call g24_transmit_receive_ack 
+3c25 20403162 call g24_end_of_packet 
+3c26 6fe0c596 fetch 1 ,mem_24g_no_ack 
+3c27 c000bc2b beq no_ack_24g ,remote_car_g24_transmit_no_ack 
+3c28 2437bc2b nbranch remote_car_g24_transmit_no_ack ,user3 
+3c29 242c3c2b nbranch remote_car_g24_transmit_no_ack ,sync 
+3c2a 20403c30 call remote_car_24g_recved_ack 
+
+remote_car_g24_transmit_no_ack:
+3c2b 180a7e00 random pdata 
+3c2c d84001ff arg 0x1ff ,temp 
+3c2d 98417e00 iand temp ,pdata 
+3c2e 1fe0fefa add pdata ,250 ,pdata 
+3c2f 20207c93 branch delay 
+
+remote_car_24g_recved_ack:
+3c30 70466001 jam 1 ,mem_remote_le_24g_recv_ack_flag 
+3c31 20600000 rtn 
+
+remote_car_g24_recved_ack_parse:
+3c32 6fe0c660 fetch 1 ,mem_remote_le_24g_recv_ack_flag 
+3c33 207a0000 rtn blank 
+3c34 70466000 jam 0 ,mem_remote_le_24g_recv_ack_flag 
+3c35 6fe0c510 fetch 1 ,mem_24g_rxbuf + 2 
+3c36 c05dbc38 beq g24_rx_pair_respones ,remote_car_g24_tx_connected 
+3c37 20600000 rtn 
+
+remote_car_g24_tx_connected:
+3c38 6fe0c666 fetch 1 ,mem_remote_le_24g_tx_pair_mode 
+3c39 247a0000 nrtn blank 
+3c3a da204515 arg mem_24g_rxbuf + 7 ,rega 
+3c3b da4042dd arg mem_le_lap ,regb 
+3c3c df200004 arg 4 ,loopcnt 
+3c3d 20407d66 call string_compare 
+3c3e 24628000 nrtn zero 
+3c3f 204023a5 call lpm_write_ice_disable 
+3c40 70466601 jam g24_connected ,mem_remote_le_24g_tx_pair_mode 
+3c41 6fe24511 fetch 4 ,mem_24g_rxbuf + 3 
+3c42 67e24667 store 4 ,mem_remote_24g_addr_other 
+3c43 67e24670 store 4 ,mem_remote_24g_tx_payload_temp + 5 
+3c44 20203ba0 branch remote_car_set_connected_lpm_time 
+
+remote_car_send_remote_control:
+3c45 449ac006 bpatch patch06_5 ,mem_patch06 
+3c46 6fe0c665 fetch 1 ,mem_le_24g_tx_send_flag 
+3c47 1fe0fe01 increase 1 ,pdata 
+3c48 67e0c665 store 1 ,mem_le_24g_tx_send_flag 
+3c49 70466b00 jam 0 ,mem_remote_24g_tx_payload_temp 
+3c4a 58000000 setarg 0 
+3c4b 67e1c674 store 3 ,mem_remote_24g_tx_payload_temp + 9 
+3c4c 70466bcc jam g24_tx_remote_control ,mem_remote_24g_tx_payload_temp 
+3c4d 20403c52 call remote_car_scan_key 
+3c4e 20403c83 call remote_car_set_tx_key_led 
+3c4f 6fe0c665 fetch 1 ,mem_le_24g_tx_send_flag 
+3c50 c0643c8a beq 200 ,remote_car_24g_tx_send_none 
+3c51 20203c0f branch remote_car_g24_sim_tx_with_datalen_set 
+
+remote_car_scan_key:
+3c52 6848c661 fetcht 1 ,mem_key_public_gpio 
+3c53 20406eed call gpio_out_inactive 
+3c54 20403c66 call remote_car_key_scan_fb 
+3c55 20403c58 call remote_car_key_scan_lr 
+3c56 6848c661 fetcht 1 ,mem_key_public_gpio 
+3c57 20206f0b branch gpio_set_high_impedance 
+
+remote_car_key_scan_lr:
+3c58 6848c65c fetcht 1 ,mem_remote_car_key_conf3 
+3c59 20406eed call gpio_out_inactive 
+3c5a 6848c65c fetcht 1 ,mem_remote_car_key_conf3 
+3c5b 20406ed7 call gpio_config_input 
+3c5c 20406ee0 call gpio_get_bit 
+3c5d 2020bc7d branch remote_car_set_keyr ,true 
+3c5e 6848c65c fetcht 1 ,mem_remote_car_key_conf3 
+3c5f 20406ef1 call gpio_out_active 
+3c60 200004b0 nop 1200 
+3c61 6848c65b fetcht 1 ,mem_remote_car_key_conf2 
+3c62 20406ed7 call gpio_config_input 
+3c63 20406ee0 call gpio_get_bit 
+3c64 2020bc7a branch remote_car_set_keyl ,true 
+3c65 20600000 rtn 
+
+remote_car_key_scan_fb:
+3c66 6848c659 fetcht 1 ,mem_remote_car_key_conf0 
+3c67 20406eed call gpio_out_inactive 
+3c68 6848c659 fetcht 1 ,mem_remote_car_key_conf0 
+3c69 20406ed7 call gpio_config_input 
+3c6a 20406ee0 call gpio_get_bit 
+3c6b 2020bc74 branch remote_car_set_keyf ,true 
+3c6c 6848c659 fetcht 1 ,mem_remote_car_key_conf0 
+3c6d 20406ef1 call gpio_out_active 
+3c6e 200004b0 nop 1200 
+3c6f 6848c65a fetcht 1 ,mem_remote_car_key_conf1 
+3c70 20406ed7 call gpio_config_input 
+3c71 20406ee0 call gpio_get_bit 
+3c72 2020bc77 branch remote_car_set_keyb ,true 
+3c73 20600000 rtn 
+
+remote_car_set_keyf:
+3c74 70467401 jam 1 ,mem_remote_24g_tx_payload_temp + 9 
+3c75 70466500 jam 0 ,mem_le_24g_tx_send_flag 
+3c76 20600000 rtn 
+
+remote_car_set_keyb:
+3c77 70467402 jam 2 ,mem_remote_24g_tx_payload_temp + 9 
+3c78 70466500 jam 0 ,mem_le_24g_tx_send_flag 
+3c79 20600000 rtn 
+
+remote_car_set_keyl:
+3c7a 70467501 jam 1 ,mem_remote_24g_tx_payload_temp + 10 
+3c7b 70466500 jam 0 ,mem_le_24g_tx_send_flag 
+3c7c 20600000 rtn 
+
+remote_car_set_keyr:
+3c7d 70467502 jam 2 ,mem_remote_24g_tx_payload_temp + 10 
+3c7e 70466500 jam 0 ,mem_le_24g_tx_send_flag 
+3c7f 20600000 rtn 
+
+remote_car_set_keym:
+3c80 70467601 jam 1 ,mem_remote_24g_tx_payload_temp + 11 
+3c81 70466500 jam 0 ,mem_le_24g_tx_send_flag 
+3c82 20600000 rtn 
+
+remote_car_set_tx_key_led:
+3c83 6fe1c674 fetch 3 ,mem_remote_24g_tx_payload_temp + 9 
+3c84 203a3c99 branch remote_car_24g_led_off + 1 ,blank 
+3c85 58000000 setarg 0 
+3c86 67e1464b store 2 ,mem_24g_lpm_timer_count 
+3c87 5800000f setarg 15 
+3c88 67e1464d store 2 ,mem_24g_lpm_enter_count 
+3c89 20203c96 branch remote_car_24g_led_on 
+
+remote_car_24g_tx_send_none:
+3c8a 6fe0c665 fetch 1 ,mem_le_24g_tx_send_flag 
+3c8b 1fe0ffff increase -1 ,pdata 
+3c8c 67e0c665 store 1 ,mem_le_24g_tx_send_flag 
+3c8d 20600000 rtn 
+
+remote_car_24g_set_led:
+3c8e 6fe0c666 fetch 1 ,mem_remote_le_24g_tx_pair_mode 
+3c8f c1008000 rtneq g24_connected 
+3c90 6fe0c64a fetch 1 ,mem_24g_led_count 
+3c91 1fe0fe01 increase 1 ,pdata 
+3c92 67e0c64a store 1 ,mem_24g_led_count 
+3c93 c0013c96 beq 2 ,remote_car_24g_led_on 
+3c94 c0023c98 beq 4 ,remote_car_24g_led_off 
+3c95 20600000 rtn 
+
+remote_car_24g_led_on:
+3c96 6848c649 fetcht 1 ,mem_24g_tx_led_map 
+3c97 20206eed branch gpio_out_inactive 
+
+remote_car_24g_led_off:
+3c98 70464a00 jam 0 ,mem_24g_led_count 
+3c99 6848c649 fetcht 1 ,mem_24g_tx_led_map 
+3c9a 20206ef1 branch gpio_out_active 
+
+remote_car_lpm_timeout_set:
+3c9b 6fe1464d fetch 2 ,mem_24g_lpm_enter_count 
+3c9c 207a0000 rtn blank 
+3c9d 6849464b fetcht 2 ,mem_24g_lpm_timer_count 
+3c9e 9842fe00 ixor temp ,pdata 
+3c9f 205a3ca6 call remote_car_enter_lpm ,blank 
+3ca0 6fe1464b fetch 2 ,mem_24g_lpm_timer_count 
+3ca1 1fe0fe01 increase 1 ,pdata 
+3ca2 67e1464b store 2 ,mem_24g_lpm_timer_count 
+3ca3 20600000 rtn 
+
+remote_car_cb_event_timer:
+3ca4 20403c8e call remote_car_24g_set_led 
+3ca5 20203c9b branch remote_car_lpm_timeout_set 
+
+remote_car_enter_lpm:
+3ca6 204023a5 call lpm_write_ice_disable 
+3ca7 20403cab call remote_car_enter_lpm_gpio_config 
+3ca8 20403cc2 call remote_car_wakeup_config 
+3ca9 d85fffff arg -1 ,temp 
+3caa 20202406 branch lpm_sleep 
+
+remote_car_enter_lpm_gpio_config:
+3cab df200018 arg 24 ,loopcnt 
+3cac 70464800 jam 0 ,mem_remote_lpm_gpio_config_io_temp 
+
+remote_car_enter_lpm_gpio_config_loopcnt:
+3cad 6848c648 fetcht 1 ,mem_remote_lpm_gpio_config_io_temp 
+3cae 18420e00 copy temp ,queue 
+3caf 6fe24644 fetch 4 ,mem_remote_lpm_gpio_config_flag 
+3cb0 afefffff qisolate1 pdata 
+3cb1 2020bcb3 branch remote_car_enter_lpm_gpio_config_pull_up ,true 
+3cb2 18418480 or temp ,0x80 ,temp 
+
+remote_car_enter_lpm_gpio_config_pull_up:
+3cb3 20406ed7 call gpio_config_input 
+3cb4 6fe0c648 fetch 1 ,mem_remote_lpm_gpio_config_io_temp 
+3cb5 1fe0fe01 pincrease 1 
+3cb6 67e0c648 store 1 ,mem_remote_lpm_gpio_config_io_temp 
+3cb7 c2003cad loop remote_car_enter_lpm_gpio_config_loopcnt 
+3cb8 20600000 rtn 
+
+remote_car_set_value:
+3cb9 58000030 setarg 0x30 
+
+remote_car_gpio_wakeup_cfg:
+3cba 18a20c00 copy contw ,contr 
+3cbb e8408006 ifetcht 1 ,contr 
+3cbc 9840fe00 iadd temp ,pdata 
+3cbd e7e08005 istore 1 ,contw 
+3cbe d8a00016 arg mem_gpio_wakeup_cfg ,contw 
+3cbf d8c0465b arg mem_remote_car_key_conf0 + 2 ,contr 
+3cc0 c2003cc7 loop remote_car_wakeup_config_loop 
+3cc1 20600000 rtn 
+
+remote_car_wakeup_config:
+3cc2 58000000 setarg 0 
+3cc3 67e60016 store 0x0c ,mem_gpio_wakeup_cfg 
+3cc4 d8a00016 arg mem_gpio_wakeup_cfg ,contw 
+3cc5 d8c0465a arg mem_remote_car_key_conf0 + 1 ,contr 
+3cc6 df200002 arg 2 ,loopcnt 
+
+remote_car_wakeup_config_loop:
+3cc7 efe08006 ifetch 1 ,contr 
+3cc8 793ffe07 set0 7 ,pdata 
+3cc9 1fe6fc02 div pdata ,2 
+3cca 20407d64 call wait_div_end 
+3ccb 1807fe00 quotient pdata 
+3ccc 98a08a00 iadd contw ,contw 
+3ccd 18077e00 remainder pdata 
+3cce 243a3cb9 nbranch remote_car_set_value ,blank 
+3ccf 58000003 setarg 0x03 
+3cd0 20203cba branch remote_car_gpio_wakeup_cfg 
+
+dongle_init:
+3cd1 58003d04 setarg dongle_dispatch 
+3cd2 67e145f7 store 2 ,mem_cb_24g_receive_process 
+3cd3 58003dfe setarg dongle_g24_mouse 
+3cd4 67e145fb store 2 ,mem_cb_24g_data_device1 
+3cd5 58003e0f setarg dongle_g24_kb 
+3cd6 67e145fd store 2 ,mem_cb_24g_data_device2 
+3cd7 58003dd0 setarg dongle_ackpayload_prep 
+3cd8 67e145f9 store 2 ,mem_cb_24g_ackpayload 
+3cd9 58003d13 setarg dongle_usb_config 
+3cda 67e10837 store 2 ,mem_cb_usb_config 
+3cdb 20207902 branch usb_init 
+
+dongle_default_init:
+3cdc 449b4006 bpatch patch06_6 ,mem_patch06 
+3cdd 20403d09 call dongle_read_kb_bind_status 
+3cde 20403cff call dongle_xtal_select 
+3cdf 6fe0c680 fetch 1 ,mem_dg_sys_config 
+3ce0 2feffe05 isolate1 dg_enable_eeprom ,pdata 
+3ce1 2020bce5 branch dongle_default_no_eeprom ,true 
+3ce2 6fe0c680 fetch 1 ,mem_dg_sys_config 
+3ce3 2feffe06 isolate1 dg_enable_new_chmap ,pdata 
+3ce4 2040b24a call g24_chamap_param_update ,true 
+
+dongle_default_no_eeprom:
+3ce5 6fe0c6ad fetch 1 ,mem_dg_24g_tx_power_default 
+3ce6 67e0c141 store 1 ,mem_tx_power 
+3ce7 7045e9ff jam 0xff ,mem_rssi_buff_index 
+3ce8 5800097d setarg mem_dg_rssi_noise_buffer 
+3ce9 67e14657 store 2 ,mem_rssi_noise_buffer_ptr 
+3cea 58000a7d setarg mem_dg_rssi_noise_dg_buffer 
+3ceb 67e14659 store 2 ,mem_rssi_noise_self_buffer_ptr 
+3cec 58000b7d setarg mem_dg_rssi_noise_ms_buffer 
+3ced 67e1465b store 2 ,mem_rssi_noise_device1_buffer_ptr 
+3cee 58000c7d setarg mem_dg_rssi_noise_kb_buffer 
+3cef 67e1465d store 2 ,mem_rssi_noise_device2_buffer_ptr 
+3cf0 7045e885 jam tx_power_f5db ,mem_24g_pair_tx_power 
+3cf1 7046ab00 jam 0 ,mem_dg_kb_bind_success 
+3cf2 70464200 jam 0 ,mem_24g_bind_device_living 
+3cf3 20403260 call g24_enable_1m 
+3cf4 6fe0c680 fetch 1 ,mem_dg_sys_config 
+3cf5 2feffe03 isolate1 dg_enable_24g_2m ,pdata 
+3cf6 2040b263 call g24_enable_2m ,true 
+3cf7 20403378 call g24_receive_init 
+3cf8 20403266 call g24_pair_param_init 
+3cf9 2040323a call g24_chmap_param_init 
+3cfa 6fe0c68a fetch 1 ,mem_dg_usb_tx_interval 
+3cfb 67e08839 store 1 ,mem_usb_tx_interval 
+3cfc 6fe4c681 fetch 9 ,mem_dg_usb_vid_pid 
+3cfd 67e4883a store 9 ,mem_usb_vid_pid 
+3cfe 20600000 rtn 
+
+dongle_xtal_select:
+3cff 70409918 jam xtal_24m ,mem_fcomp_div 
+3d00 6fe0c680 fetch 1 ,mem_dg_sys_config 
+3d01 c4038000 rtnbit0 dg_enable_xtal_24m 
+3d02 70409910 jam xtal_16m ,mem_fcomp_div 
+3d03 20600000 rtn 
+
+dongle_dispatch:
+3d04 6fe0c627 fetch 1 ,mem_24g_pair_mode 
+3d05 c0003dc0 beq 0x00 ,dongle_auto_bind 
+3d06 c000bd3d beq 0x01 ,dongle_pc_bind 
+3d07 c007bd39 beq 0x0f ,dongle_all_powerful 
+3d08 20600000 rtn 
+
+dongle_read_kb_bind_status:
+3d09 449bc006 bpatch patch06_7 ,mem_patch06 
+3d0a da401fdf arg dongle_kb_bind_efuse_offect ,regb 
+3d0b da20465f arg mem_dg_kb_bind_flag ,rega 
+3d0c df200001 arg 1 ,loopcnt 
+3d0d 20206b62 branch otp_read_data 
+
+dongle_write_kb_bind_status:
+3d0e 449c4007 bpatch patch07_0 ,mem_patch07 
+3d0f df200001 arg 1 ,loopcnt 
+3d10 da20465f arg mem_dg_kb_bind_flag ,rega 
+3d11 da401fdf arg dongle_kb_bind_efuse_offect ,regb 
+3d12 20206b33 branch otp_write 
+
+dongle_usb_config:
+3d13 6fe0c680 fetch 1 ,mem_dg_sys_config 
+3d14 c2823d17 bbit1 dg_enable_kb_icon ,dongle_usb_config_kb 
+3d15 6fe0c65f fetch 1 ,mem_dg_kb_bind_flag 
+3d16 c0ad3d1b bne dongle_kb_bind_success ,dongle_usb_config_param 
+
+dongle_usb_config_kb:
+3d17 70465f5a jam dongle_kb_bind_success ,mem_dg_kb_bind_flag 
+3d18 6ff21404 fetch 4 ,usb_devicedata_addr + 9 
+3d19 79207e1d set1 29 ,pdata 
+3d1a 67e20792 store 4 ,mem_devicedesc + 9 
+
+dongle_usb_config_param:
+3d1b 449cc007 bpatch patch07_1 ,mem_patch07 
+3d1c 20403d33 call dongle_usb_device_name 
+3d1d 20407956 call usb_tx_interval_config 
+3d1e 20403d20 call dongle_usb_vid_pid_config 
+3d1f 20203d29 branch dongle_usb_hid_icon_config 
+
+dongle_usb_vid_pid_config:
+3d20 6fe0883a fetch 1 ,mem_usb_vid_pid 
+3d21 207a0000 rtn blank 
+3d22 6fe0c65f fetch 1 ,mem_dg_kb_bind_flag 
+3d23 c02d3d27 beq dongle_kb_bind_success ,dongle_usb_vid_pid_for_suit 
+
+dongle_usb_vid_pid_for_mouse_only_auto_pair:
+3d24 6fe2083b fetch 4 ,mem_usb_vid_pid + 1 
+
+dongle_usb_vid_pid_store:
+3d25 67e20792 store 4 ,mem_devicedesc + 9 
+3d26 20600000 rtn 
+
+dongle_usb_vid_pid_for_suit:
+3d27 6fe2083f fetch 4 ,mem_usb_vid_pid + 5 
+3d28 20203d25 branch dongle_usb_vid_pid_store 
+
+dongle_usb_hid_icon_config:
+3d29 6fe0c65f fetch 1 ,mem_dg_kb_bind_flag 
+3d2a c02d3d2f beq dongle_kb_bind_success ,dongle_usb_kb_hidreportdesc 
+3d2b 580092aa setarg usb_kbdata_vendor_define_addr 
+3d2c 67e10785 store 2 ,mem_hidreportdesc_kb 
+3d2d 7007b61a jam 0x1a ,mem_confdesc + 26 
+3d2e 20600000 rtn 
+
+dongle_usb_kb_hidreportdesc:
+3d2f 580092c5 setarg usb_kbdata_addr 
+3d30 67e10785 store 2 ,mem_hidreportdesc_kb 
+3d31 7007b641 jam 0x41 ,mem_confdesc + 26 
+3d32 20600000 rtn 
+
+dongle_usb_device_name:
+3d33 6fe0c68b fetch 1 ,mem_dg_usb_device_name 
+3d34 207a0000 rtn blank 
+3d35 d8c0468b arg mem_dg_usb_device_name ,contr 
+3d36 d8a007fb arg mem_string2 ,contw 
+3d37 df200020 arg 32 ,loopcnt 
+3d38 20207cdc branch memcpy 
+
+dongle_all_powerful:
+3d39 20403436 call g24_switch_work_mode 
+
+dongle_all_powerful_loop:
+3d3a 20403dc8 call dongle_work_mode_auto 
+3d3b 20403d8e call dongle_usb_dispatch 
+3d3c 20203d3a branch dongle_all_powerful_loop 
+
+dongle_pc_bind:
+3d3d 20403436 call g24_switch_work_mode 
+
+dongle_pc_bind_loop:
+3d3e 20403dc8 call dongle_work_mode_auto 
+3d3f 2040343f call g24_bind_mode_auto 
+3d40 20403d8e call dongle_usb_dispatch 
+3d41 20203d3e branch dongle_pc_bind_loop 
+
+dongle_g24_blank_data_process:
+3d42 449d4007 bpatch patch07_2 ,mem_patch07 
+3d43 20403d48 call dongle_g24_ms_blank_data 
+3d44 20403d57 call dongle_g24_kb_blank_data 
+3d45 20403d67 call dongle_g24_kb_sys_ctrl_blank_data 
+3d46 20403d81 call dongle_g24_kb_bit_consumer_blank_data 
+3d47 20203d74 branch dongle_g24_kb_mul_blank_data 
+
+dongle_g24_ms_blank_data:
+3d48 6fe0c67f fetch 1 ,mem_dg_ms_blank_data_enable 
+3d49 207a0000 rtn blank 
+3d4a d8e0000d arg g24_timer_ms_blank ,queue 
+3d4b 20407cf1 call timer_check 
+3d4c 247a0000 nrtn blank 
+3d4d 70467f00 jam 0 ,mem_dg_ms_blank_data_enable 
+3d4e 58000001 setarg ms_report_id 
+3d4f 67e088f1 store 1 ,mem_usb_mouse_data 
+3d50 58000000 setarg 0 
+3d51 e7e38005 istore 7 ,contw 
+
+dongle_usb_tx_ms_data:
+3d52 7008ea20 jam usb_ep2_ms ,mem_usb_ep2_data 
+
+dongle_usb_tx_enable_ep2:
+3d53 6fe088eb fetch 1 ,mem_usb_tx_enable 
+3d54 79207e02 set1 2 ,pdata 
+3d55 67e088eb store 1 ,mem_usb_tx_enable 
+3d56 20600000 rtn 
+
+dongle_g24_kb_blank_data:
+3d57 6fe0c67c fetch 1 ,mem_dg_kb_blank_data_enable 
+3d58 207a0000 rtn blank 
+3d59 d8e0000e arg g24_timer_kb_blank ,queue 
+3d5a 20407cf1 call timer_check 
+3d5b 247a0000 nrtn blank 
+3d5c 70467c00 jam 0 ,mem_dg_kb_blank_data_enable 
+3d5d d8a00901 arg mem_usb_kb_data ,contw 
+3d5e 20407c9b call memset0_16 
+3d5f 6fe40901 fetch 8 ,mem_usb_kb_data 
+3d60 67e44668 store 8 ,mem_dg_kb_data_last_data 
+
+dongle_usb_tx_kb_data:
+3d61 70090100 jam kb_normal_report_id ,mem_usb_kb_data 
+
+dongle_usb_tx_enable_ep1:
+3d62 7008e910 jam usb_ep1_kb ,mem_usb_ep1_data 
+3d63 6fe088eb fetch 1 ,mem_usb_tx_enable 
+3d64 79207e01 set1 1 ,pdata 
+3d65 67e088eb store 1 ,mem_usb_tx_enable 
+3d66 20600000 rtn 
+
+dongle_g24_kb_sys_ctrl_blank_data:
+3d67 6fe0c67e fetch 1 ,mem_dg_kb_system_crtl_blank_data_enable 
+3d68 207a0000 rtn blank 
+3d69 d8e0000a arg g24_timer_kb_sys_crtl_blank ,queue 
+3d6a 20407cf1 call timer_check 
+3d6b 247a0000 nrtn blank 
+3d6c 70467e00 jam 0 ,mem_dg_kb_system_crtl_blank_data_enable 
+3d6d d8a00929 arg mem_usb_kb_system ,contw 
+3d6e 20407c9b call memset0_16 
+3d6f 70092902 jam kb_system_conctrl_report_id ,mem_usb_kb_system 
+3d70 6fe10929 fetch 2 ,mem_usb_kb_system 
+3d71 67e14676 store 2 ,mem_dg_kb_system_sta_data 
+
+dongle_usb_tx_sys_ctrl_data:
+3d72 7008ea22 jam usb_ep2_systemkey ,mem_usb_ep2_data 
+3d73 20203d53 branch dongle_usb_tx_enable_ep2 
+
+dongle_g24_kb_mul_blank_data:
+3d74 6fe0c67d fetch 1 ,mem_dg_kb_mul_blank_data_enable 
+3d75 207a0000 rtn blank 
+3d76 d8e0000c arg g24_timer_kb_mul_blank ,queue 
+3d77 20407cf1 call timer_check 
+3d78 247a0000 nrtn blank 
+3d79 70467d00 jam 0 ,mem_dg_kb_mul_blank_data_enable 
+3d7a d8a00921 arg mem_usb_kb_multikey ,contw 
+3d7b 20407c9b call memset0_16 
+3d7c 70092103 jam kb_multikey_report_id ,mem_usb_kb_multikey 
+3d7d 6fe18921 fetch 3 ,mem_usb_kb_multikey 
+3d7e 67e1c673 store 3 ,mem_dg_kb_multikey_last_data 
+
+dongle_usb_tx_multikey_data:
+3d7f 7008ea21 jam usb_ep2_multikey ,mem_usb_ep2_data 
+3d80 20203d53 branch dongle_usb_tx_enable_ep2 
+
+dongle_g24_kb_bit_consumer_blank_data:
+3d81 6fe0c6ae fetch 1 ,mem_dg_kb_bit_consumer_blank_data_enable 
+3d82 207a0000 rtn blank 
+3d83 d8e00006 arg g24_timer_kb_bit_consumer_blank ,queue 
+3d84 20407cf1 call timer_check 
+3d85 247a0000 nrtn blank 
+3d86 7046ae00 jam 0 ,mem_dg_kb_bit_consumer_blank_data_enable 
+3d87 d8a00921 arg mem_usb_kb_multikey ,contw 
+3d88 20407c9b call memset0_16 
+3d89 70092105 jam kb_bit_consumer_report_id ,mem_usb_kb_multikey 
+3d8a 6fe20921 fetch 4 ,mem_usb_kb_multikey 
+3d8b 67e246b3 store 4 ,mem_dg_kb_bit_consumer_last_data 
+
+dongle_usb_tx_bit_consumer_data:
+3d8c 7008ea23 jam usb_ep2_bit_consumer ,mem_usb_ep2_data 
+3d8d 20203d53 branch dongle_usb_tx_enable_ep2 
+
+dongle_usb_dispatch:
+3d8e 449dc007 bpatch patch07_3 ,mem_patch07 
+3d8f 6fe088df fetch 1 ,mem_usb_remote_wakeup 
+3d90 205a3dda call dongle_clear_pc_sleep_flag ,blank 
+3d91 204078f6 call usb_isr 
+3d92 6fe088d5 fetch 1 ,mem_usb0_get_set_report 
+3d93 207a0000 rtn blank 
+3d94 7008d500 jam 0 ,mem_usb0_get_set_report 
+3d95 6fe108d3 fetch 2 ,mem_usb_setup_bvalue_temp 
+3d96 d84002ba arg pc_set_report ,temp 
+3d97 98467c00 isub temp ,null 
+3d98 24628000 nrtn zero 
+3d99 6fe08853 fetch 1 ,mem_usb0_set_report_data 
+3d9a c1dd0000 rtnne pc_report_id 
+3d9b 6fe08854 fetch 1 ,mem_usb0_set_report_data + 1 
+3d9c c0503da3 beq command_mode ,dongle_dispose_cmd_mode 
+3d9d c050bda9 beq command_bind ,dongle_dispose_cmd_bind 
+3d9e c0533db5 beq command_current_project ,dongle_dispose_cmd_current_project 
+3d9f c053bdb7 beq command_current_mode ,dongle_dispose_cmd_current_mode 
+3da0 c054bdbd beq command_current_fw_version ,dongle_dispose_cmd_current_fw_version 
+
+dongle_usb0_data_ready_report_set0:
+3da1 7008d600 jam 0 ,mem_usb0_data_ready_report 
+3da2 20600000 rtn 
+
+dongle_dispose_cmd_mode:
+3da3 6fe08855 fetch 1 ,mem_usb0_set_report_data + 2 
+3da4 c040bda6 beq com_mode_bind ,dongle_enter_bind_mode 
+3da5 20203da1 branch dongle_usb0_data_ready_report_set0 
+
+dongle_enter_bind_mode:
+3da6 204032da call g24_bind_mode_enable 
+
+dongle_usb0_data_ready_report_set1:
+3da7 7008d601 jam 1 ,mem_usb0_data_ready_report 
+3da8 20600000 rtn 
+
+dongle_dispose_cmd_bind:
+3da9 6fe08855 fetch 1 ,mem_usb0_set_report_data + 2 
+3daa c000bdae beq com_bind_get ,dongle_dispose_cmd_get_bind 
+3dab c0423db1 beq com_bind_exit ,dongle_dispose_cmd_exit_bind 
+3dac c053bdb3 beq com_read_mode ,dongle_dispose_cmd_read_mode 
+3dad 20203da1 branch dongle_usb0_data_ready_report_set0 
+
+dongle_dispose_cmd_get_bind:
+3dae 6fe0c5ec fetch 1 ,mem_24g_bind_device_status 
+3daf 67e08894 store 1 ,mem_usb0_get_report_data + 1 
+3db0 20203da7 branch dongle_usb0_data_ready_report_set1 
+
+dongle_dispose_cmd_exit_bind:
+3db1 20403437 call g24_work_mode_enable 
+3db2 20203dae branch dongle_dispose_cmd_get_bind 
+
+dongle_dispose_cmd_read_mode:
+
+dongle_dispose_in_bind_mode:
+3db3 700894a1 jam command_bind ,mem_usb0_get_report_data + 1 
+3db4 20203da7 branch dongle_usb0_data_ready_report_set1 
+
+dongle_dispose_cmd_current_project:
+3db5 70089415 jam product_id ,mem_usb0_get_report_data + 1 
+3db6 20203da7 branch dongle_usb0_data_ready_report_set1 
+
+dongle_dispose_cmd_current_mode:
+3db7 6fe0c62d fetch 1 ,mem_24g_work_mode 
+3db8 c0003dbb beq dongle_work ,dongle_dispose_in_work_mode 
+3db9 c000bdb3 beq dongle_bind ,dongle_dispose_in_bind_mode 
+3dba 20600000 rtn 
+
+dongle_dispose_in_work_mode:
+3dbb 700894a0 jam command_mode ,mem_usb0_get_report_data + 1 
+3dbc 20203da7 branch dongle_usb0_data_ready_report_set1 
+
+dongle_dispose_cmd_current_fw_version:
+3dbd 6fe246b7 fetch 4 ,mem_dg_device_version 
+3dbe 67e20894 store 4 ,mem_usb0_get_report_data + 1 
+3dbf 20203da7 branch dongle_usb0_data_ready_report_set1 
+
+dongle_auto_bind:
+3dc0 204033d8 call g24_mode_switch_init 
+
+dongle_auto_bind_loop:
+3dc1 204033dd call g24_mode_switch_bind_work 
+3dc2 20403403 call g24_mode_switch_bind_search 
+3dc3 20403dc8 call dongle_work_mode_auto 
+3dc4 2040343f call g24_bind_mode_auto 
+3dc5 2040345e call g24_search_mode_auto 
+3dc6 20403d8e call dongle_usb_dispatch 
+3dc7 20203dc1 branch dongle_auto_bind_loop 
+
+dongle_work_mode_auto:
+3dc8 449e4007 bpatch patch07_4 ,mem_patch07 
+3dc9 6fe0c62d fetch 1 ,mem_24g_work_mode 
+3dca c1800000 rtnne dongle_work 
+3dcb 2040343a call g24_work_mode_start 
+3dcc 20403d42 call dongle_g24_blank_data_process 
+3dcd 6fe0c627 fetch 1 ,mem_24g_pair_mode 
+3dce 247a0000 nrtn blank 
+3dcf 202034e0 branch g24_nodata_process 
+
+dongle_ackpayload_prep:
+3dd0 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+3dd1 c000bdd3 beq datatype_device1 ,dongle_ackpayload_prep_mouse 
+3dd2 c0013ddc beq datatype_device2 ,dongle_ackpayload_prep_keyboard 
+
+dongle_ackpayload_prep_mouse:
+3dd3 6fe0c6ac fetch 1 ,mem_dg_pc_sleep_flag 
+3dd4 c2803de2 bbit1 0 ,dongle_pc_sleep_ackpayload_prep_mouse 
+3dd5 20203dde branch dongle_ackpayload_prep_end 
+
+dongle_set_pc_sleep_flag:
+3dd6 6fe0c3cf fetch 1 ,mem_device_option 
+3dd7 c1820000 rtnne dvc_op_dongle 
+3dd8 7046ac03 jam 3 ,mem_dg_pc_sleep_flag 
+3dd9 20600000 rtn 
+
+dongle_clear_pc_sleep_flag:
+3dda 7046ac00 jam 0 ,mem_dg_pc_sleep_flag 
+3ddb 20600000 rtn 
+
+dongle_ackpayload_prep_keyboard:
+3ddc 6fe0c6ac fetch 1 ,mem_dg_pc_sleep_flag 
+3ddd c280bde6 bbit1 1 ,dongle_pc_sleep_ackpayload_prep_keyboard 
+
+dongle_ackpayload_prep_end:
+3dde 6fe0c628 fetch 1 ,mem_24g_ackpayload_enable 
+3ddf c000bded beq bind_ackpayload ,dongle_g24_bind_ackpayload_prep 
+3de0 c001bdf6 beq kb_led_ackpayload ,dongle_g24_kb_led_ackpayload_prep 
+3de1 20600000 rtn 
+
+dongle_pc_sleep_ackpayload_prep_mouse:
+3de2 6fe0c6ac fetch 1 ,mem_dg_pc_sleep_flag 
+3de3 793ffe00 set0 0 ,pdata 
+3de4 67e0c6ac store 1 ,mem_dg_pc_sleep_flag 
+3de5 20203de9 branch dongle_pc_sleep_ackpayload_prep 
+
+dongle_pc_sleep_ackpayload_prep_keyboard:
+3de6 6fe0c6ac fetch 1 ,mem_dg_pc_sleep_flag 
+3de7 793ffe01 set0 1 ,pdata 
+3de8 67e0c6ac store 1 ,mem_dg_pc_sleep_flag 
+
+dongle_pc_sleep_ackpayload_prep:
+3de9 70459f01 jam 0x01 ,mem_24g_datalen 
+3dea 580000ff setarg 0xff 
+3deb 67e0c530 store 1 ,mem_24g_txbuf 
+3dec 20600000 rtn 
+
+dongle_g24_bind_ackpayload_prep:
+3ded 449ec007 bpatch patch07_5 ,mem_patch07 
+3dee 70462801 jam 1 ,mem_24g_ackpayload_enable 
+3def 6fe0c62d fetch 1 ,mem_24g_work_mode 
+3df0 c1000000 rtneq dongle_work 
+3df1 6fe0c627 fetch 1 ,mem_24g_pair_mode 
+3df2 247a0000 nrtn blank 
+3df3 2040335b call g24_binding_device_check 
+3df4 24778000 nrtn user3 
+3df5 202032e8 branch g24_bind_ackpayload_prep 
+
+dongle_g24_kb_led_ackpayload_prep:
+3df6 6fe0c510 fetch 1 ,mem_24g_rxbuf + 2 
+3df7 c000b2e8 beq datatype_device1 ,g24_bind_ackpayload_prep 
+3df8 c07fb2e8 beq datatype_attemp ,g24_bind_ackpayload_prep 
+3df9 7008d700 jam 0 ,mem_usb_tx_win_enable 
+3dfa 70459f01 jam 0x01 ,mem_24g_datalen 
+3dfb 6fe0c638 fetch 1 ,mem_24g_led_status 
+3dfc 67e0c530 store 1 ,mem_24g_txbuf 
+3dfd 20600000 rtn 
+
+dongle_g24_mouse:
+3dfe 58000001 setarg ms_report_id 
+3dff 67e088f1 store 1 ,mem_usb_mouse_data 
+3e00 6fe3c602 fetch 7 ,mem_24g_rxdata_temp + 3 
+3e01 e7e38005 istore 7 ,contw 
+3e02 6fe0c602 fetch 1 ,mem_24g_rxdata_temp + 3 
+3e03 245a3e07 ncall dongle_g24_ms_enable_blank_data_forcibly ,blank 
+3e04 6fe0c602 fetch 1 ,mem_24g_rxdata_temp + 3 
+3e05 205a3e0b call dongle_g24_ms_disable_blank_data_forcibly ,blank 
+3e06 20203d52 branch dongle_usb_tx_ms_data 
+
+dongle_g24_ms_enable_blank_data_forcibly:
+3e07 70467f01 jam 1 ,mem_dg_ms_blank_data_enable 
+3e08 58000180 setarg timer_ms_blank_delay 
+3e09 d8e0000d arg g24_timer_ms_blank ,queue 
+3e0a 20207ce3 branch timer_init 
+
+dongle_g24_ms_disable_blank_data_forcibly:
+3e0b 70467f00 jam 0 ,mem_dg_ms_blank_data_enable 
+3e0c 58000000 setarg 0 
+3e0d d8e0000d arg g24_timer_ms_blank ,queue 
+3e0e 20207ce3 branch timer_init 
+
+dongle_g24_kb:
+3e0f 6fe0c602 fetch 1 ,mem_24g_rxdata_temp + 3 
+3e10 c0003e15 beq 0 ,dongle_g24_kb_type0 
+3e11 c0013e60 beq 2 ,dongle_g24_kb_type2 
+3e12 c001be30 beq 3 ,dongle_g24_kb_type3 
+3e13 c002be48 beq 5 ,dongle_g24_kb_type_bit_consumer 
+3e14 20203397 branch g24_rx_interrupt_clear 
+
+dongle_g24_kb_type0:
+3e15 6fe0c604 fetch 1 ,mem_24g_rxdata_temp + 5 
+3e16 67e0c628 store 1 ,mem_24g_ackpayload_enable 
+3e17 70460400 jam 0 ,mem_24g_rxdata_temp + 5 
+3e18 d8a00901 arg mem_usb_kb_data ,contw 
+3e19 d8c04603 arg mem_24g_rxdata_temp + 4 ,contr 
+3e1a df200008 arg 8 ,loopcnt 
+3e1b 20407cdc call memcpy 
+3e1c 6fe40901 fetch 8 ,mem_usb_kb_data 
+3e1d 245a3e28 ncall dongle_g24_kb_enable_blank_data_forcibly ,blank 
+3e1e 6fe40901 fetch 8 ,mem_usb_kb_data 
+3e1f 205a3e2c call dongle_g24_kb_disable_blank_data_forcibly ,blank 
+3e20 6fe40901 fetch 8 ,mem_usb_kb_data 
+3e21 67e44660 store 8 ,mem_dg_kb_data_sta_data 
+3e22 684c4668 fetcht 8 ,mem_dg_kb_data_last_data 
+3e23 98467c00 isub temp ,null 
+3e24 2442bd62 ncall dongle_usb_tx_enable_ep1 ,zero 
+3e25 6fe44660 fetch 8 ,mem_dg_kb_data_sta_data 
+3e26 67e44668 store 8 ,mem_dg_kb_data_last_data 
+3e27 20203397 branch g24_rx_interrupt_clear 
+
+dongle_g24_kb_enable_blank_data_forcibly:
+3e28 70467c01 jam 1 ,mem_dg_kb_blank_data_enable 
+3e29 58000180 setarg timer_kb_blank_delay 
+3e2a d8e0000e arg g24_timer_kb_blank ,queue 
+3e2b 20207ce3 branch timer_init 
+
+dongle_g24_kb_disable_blank_data_forcibly:
+3e2c 70467c00 jam 0 ,mem_dg_kb_blank_data_enable 
+3e2d 58000000 setarg 0 
+3e2e d8e0000e arg g24_timer_kb_blank ,queue 
+3e2f 20207ce3 branch timer_init 
+
+dongle_g24_kb_type3:
+3e30 d8a00921 arg mem_usb_kb_multikey ,contw 
+3e31 d8c04602 arg mem_24g_rxdata_temp + 3 ,contr 
+3e32 df200003 arg 3 ,loopcnt 
+3e33 20407cdc call memcpy 
+3e34 6fe10922 fetch 2 ,mem_usb_kb_multikey + 1 
+3e35 245a3e40 ncall dongle_g24_kb_mul_enable_blank_data_forcibly ,blank 
+3e36 6fe10922 fetch 2 ,mem_usb_kb_multikey + 1 
+3e37 205a3e44 call dongle_g24_kb_mul_disable_blank_data_forcibly ,blank 
+3e38 6fe18921 fetch 3 ,mem_usb_kb_multikey 
+3e39 67e1c670 store 3 ,mem_dg_kb_multikey_sta_data 
+3e3a 6849c673 fetcht 3 ,mem_dg_kb_multikey_last_data 
+3e3b 98467c00 isub temp ,null 
+3e3c 2442bd7f ncall dongle_usb_tx_multikey_data ,zero 
+3e3d 6fe1c670 fetch 3 ,mem_dg_kb_multikey_sta_data 
+3e3e 67e1c673 store 3 ,mem_dg_kb_multikey_last_data 
+3e3f 20203397 branch g24_rx_interrupt_clear 
+
+dongle_g24_kb_mul_enable_blank_data_forcibly:
+3e40 70467d01 jam 1 ,mem_dg_kb_mul_blank_data_enable 
+3e41 58000180 setarg timer_kb_mul_blank_delay 
+3e42 d8e0000c arg g24_timer_kb_mul_blank ,queue 
+3e43 20207ce3 branch timer_init 
+
+dongle_g24_kb_mul_disable_blank_data_forcibly:
+3e44 70467d00 jam 0 ,mem_dg_kb_mul_blank_data_enable 
+3e45 58000000 setarg 0 
+3e46 d8e0000c arg g24_timer_kb_mul_blank ,queue 
+3e47 20207ce3 branch timer_init 
+
+dongle_g24_kb_type_bit_consumer:
+3e48 d8a00921 arg mem_usb_kb_multikey ,contw 
+3e49 d8c04602 arg mem_24g_rxdata_temp + 3 ,contr 
+3e4a df200004 arg 4 ,loopcnt 
+3e4b 20407cdc call memcpy 
+3e4c 6fe18922 fetch 3 ,mem_usb_kb_multikey + 1 
+3e4d 245a3e58 ncall dongle_g24_kb_bit_consumer_enable_blank_data_forcibly ,blank 
+3e4e 6fe18922 fetch 3 ,mem_usb_kb_multikey + 1 
+3e4f 205a3e5c call dongle_g24_kb_bit_consumer_disable_blank_data_forcibly ,blank 
+3e50 6fe18922 fetch 3 ,mem_usb_kb_multikey + 1 
+3e51 67e1c6af store 3 ,mem_dg_kb_bit_consumer_sta_data 
+3e52 6849c6b3 fetcht 3 ,mem_dg_kb_bit_consumer_last_data 
+3e53 98467c00 isub temp ,null 
+3e54 2442bd8c ncall dongle_usb_tx_bit_consumer_data ,zero 
+3e55 6fe1c6af fetch 3 ,mem_dg_kb_bit_consumer_sta_data 
+3e56 67e1c6b3 store 3 ,mem_dg_kb_bit_consumer_last_data 
+3e57 20203397 branch g24_rx_interrupt_clear 
+
+dongle_g24_kb_bit_consumer_enable_blank_data_forcibly:
+3e58 7046ae01 jam 1 ,mem_dg_kb_bit_consumer_blank_data_enable 
+3e59 58000180 setarg timer_kb_mul_blank_delay 
+3e5a d8e00006 arg g24_timer_kb_bit_consumer_blank ,queue 
+3e5b 20207ce3 branch timer_init 
+
+dongle_g24_kb_bit_consumer_disable_blank_data_forcibly:
+3e5c 7046ae00 jam 0 ,mem_dg_kb_bit_consumer_blank_data_enable 
+3e5d 58000000 setarg 0 
+3e5e d8e00006 arg g24_timer_kb_bit_consumer_blank ,queue 
+3e5f 20207ce3 branch timer_init 
+
+dongle_g24_kb_type2:
+3e60 d8a00929 arg mem_usb_kb_system ,contw 
+3e61 d8c04602 arg mem_24g_rxdata_temp + 3 ,contr 
+3e62 df200002 arg 2 ,loopcnt 
+3e63 20407cdc call memcpy 
+3e64 6fe10929 fetch 2 ,mem_usb_kb_system 
+3e65 245a3e70 ncall dongle_g24_kb_sys_enable_blank_data_forcibly ,blank 
+3e66 6fe10929 fetch 2 ,mem_usb_kb_system 
+3e67 205a3e74 call dongle_g24_kb_sys_disable_blank_data_forcibly ,blank 
+3e68 6fe10929 fetch 2 ,mem_usb_kb_system 
+3e69 67e14676 store 2 ,mem_dg_kb_system_sta_data 
+3e6a 68494679 fetcht 2 ,mem_dg_kb_system_last_data 
+3e6b 98467c00 isub temp ,null 
+3e6c 2442be78 ncall dongle_usb_tx_sys_data ,zero 
+3e6d 6fe14676 fetch 2 ,mem_dg_kb_system_sta_data 
+3e6e 67e14679 store 2 ,mem_dg_kb_system_last_data 
+3e6f 20203397 branch g24_rx_interrupt_clear 
+
+dongle_g24_kb_sys_enable_blank_data_forcibly:
+3e70 70467e01 jam 1 ,mem_dg_kb_system_crtl_blank_data_enable 
+3e71 58000180 setarg timer_kb_sys_crtl_blank_delay 
+3e72 d8e0000a arg g24_timer_kb_sys_crtl_blank ,queue 
+3e73 20207ce3 branch timer_init 
+
+dongle_g24_kb_sys_disable_blank_data_forcibly:
+3e74 70467e00 jam 0 ,mem_dg_kb_system_crtl_blank_data_enable 
+3e75 58000000 setarg 0 
+3e76 d8e0000a arg g24_timer_kb_sys_crtl_blank ,queue 
+3e77 20207ce3 branch timer_init 
+
+dongle_usb_tx_sys_data:
+3e78 7008ea22 jam usb_ep2_systemkey ,mem_usb_ep2_data 
+3e79 20203d53 branch dongle_usb_tx_enable_ep2 
+
+dongle_g24_store_dvc2_bind_flag:
+3e7a 6fe0c3cf fetch 1 ,mem_device_option 
+3e7b c1820000 rtnne dvc_op_dongle 
+3e7c 6fe0c65f fetch 1 ,mem_dg_kb_bind_flag 
+3e7d c12d0000 rtneq dongle_kb_bind_success 
+
+dongle_prep_soft_reset:
+3e7e 7046ab01 jam 1 ,mem_dg_kb_bind_success 
+3e7f 20600000 rtn 
+
+dongle_kb_bind_soft_reset:
+3e80 6fe0c3cf fetch 1 ,mem_device_option 
+3e81 c1820000 rtnne dvc_op_dongle 
+3e82 6fe0c6ab fetch 1 ,mem_dg_kb_bind_success 
+3e83 207a0000 rtn blank 
+3e84 70065600 jam 0 ,mem_temp 
+
+dongle_wirte_efuse_bind_status:
+3e85 70465f5a jam dongle_kb_bind_success ,mem_dg_kb_bind_flag 
+3e86 20403d0e call dongle_write_kb_bind_status 
+3e87 20403d09 call dongle_read_kb_bind_status 
+3e88 6fe08656 fetch 1 ,mem_temp 
+3e89 1fe0fe01 increase 1 ,pdata 
+3e8a 67e08656 store 1 ,mem_temp 
+3e8b c07fec99 beq 0xff ,soft_reset_chip 
+3e8c 6fe0c65f fetch 1 ,mem_dg_kb_bind_flag 
+3e8d c0ad3e85 bne dongle_kb_bind_success ,dongle_wirte_efuse_bind_status 
+3e8e 20206c99 branch soft_reset_chip 
+
+keyboard_softreset_process:
+3e8f 20403e9a call keyboard_wakeup_from_power_check 
+3e90 24342002 nbranch soft_reset + 1 ,user 
+3e91 6fe0c88d fetch 1 ,mem_power_on_flag 
+3e92 203a2002 branch soft_reset + 1 ,blank 
+3e93 6fe0c90f fetch 1 ,mem_keyboard_pb_button_gpio 
+3e94 c17f8000 rtneq ui_button_gpio_disable 
+3e95 1fe20e00 copy pdata ,queue 
+3e96 6fe2067b fetch 4 ,mem_saved_gpio_in 
+3e97 afec0000 qisolate0 pdata 
+3e98 2040c69b call keyboard_pb_set ,true 
+3e99 20202003 branch soft_reset + 2 
+
+keyboard_wakeup_from_power_check:
+3e9a 78547c00 disable user 
+3e9b 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+3e9c c3044e1b bbit0 keyboard_enable_wakeup_from_power ,mouse_wakeup_from_poweron 
+3e9d 6ff08132 fetch 1 ,core_lpm_isogate 
+3e9e c2824e1b bbit1 cold_wake ,mouse_wakeup_from_poweron 
+3e9f 78347c00 enable user 
+3ea0 20204e1b branch mouse_wakeup_from_poweron 
+
+keyboard_default_init:
+3ea1 204067ff call hid_device_default_parm_init 
+3ea2 20403ea5 call keyboard_xtal_init 
+3ea3 20403eaa call keyboard_24g_phy_select 
+3ea4 20203266 branch g24_pair_param_init 
+
+keyboard_xtal_init:
+3ea5 70409910 jam xtal_16m ,mem_fcomp_div 
+3ea6 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+3ea7 c3848000 rtnbit1 keyboard_enable_16m 
+3ea8 70409918 jam xtal_24m ,mem_fcomp_div 
+3ea9 20600000 rtn 
+
+keyboard_24g_phy_select:
+3eaa 20403260 call g24_enable_1m 
+3eab 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+3eac c40a0000 rtnbit0 keyboard_enable_24g_2m_phy 
+3ead 20203263 branch g24_enable_2m 
+
+keyboard_init:
+3eae 20407384 call enable_authrom 
+3eaf 20403ebd call keyboard_setting_config 
+3eb0 20403ef9 call keyboard_gpio_init 
+3eb1 204040eb call keyboard_low_vol_mult_set 
+3eb2 20406f4e call lpm_config_puchk_disable 
+3eb3 20758000 rtn wake 
+3eb4 2040404e call keyboard_cb_fuction 
+3eb5 6fe0c678 fetch 1 ,mem_device_flag 
+3eb6 c00249d7 beq mode_usb_device ,keyboard_usb_mode_start 
+
+keyboard_init_wireless:
+3eb7 6fe14500 fetch 2 ,mem_ui_state_map 
+3eb8 c28648c5 bbit1 ui_state_btn_down ,keyboard_start_discovery 
+3eb9 70489600 jam 0 ,mem_keyboard_switch_count_temp 
+3eba 204042e3 call keyboard_check_select_device_by_switch 
+3ebb 70489601 jam 1 ,mem_keyboard_switch_count_temp 
+3ebc 2020430e branch keyboard_start_work 
+
+keyboard_setting_config:
+3ebd 20758000 rtn wake 
+3ebe 204035c8 call g24_transmit_init 
+3ebf 2040323a call g24_chmap_param_init 
+3ec0 20403edb call keyboard_param_init 
+3ec1 20404161 call keyboard_device_led_all_off 
+3ec2 20404203 call keyboard_rgb_off 
+3ec3 204041b7 call keyboard_pwm_init 
+3ec4 20402a1f call le_set_fixed_ltk_justwork 
+3ec5 449f4007 bpatch patch07_6 ,mem_patch07 
+3ec6 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+3ec7 c287bf31 bbit1 keyboard_enable_otp ,keyboard_load_otp_info 
+3ec8 c2873f96 bbit1 keyboard_enable_eeprom ,keyboard_load_eeprom_info 
+3ec9 c2863fd5 bbit1 keyboard_enable_flash ,keyboard_load_flash_info 
+3eca 20600000 rtn 
+
+keyboard_param_common_init:
+3ecb 58009000 setarg mouse_ble_att_list_addr 
+3ecc 67e142f9 store 2 ,mem_ui_le_uuid_table 
+3ecd 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+3ece c291e80c bbit1 keyboard_enable_mouse ,hid_device_param_common_init 
+3ecf 580095b8 setarg keyboard_ble_hid_map_n_key_rollover_keyboard_addr 
+3ed0 67e148d6 store 2 ,mem_keyboard_le_hid_map 
+3ed1 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+3ed2 c290680c bbit1 keyboard_enable_26_n_key_rollover ,hid_device_param_common_init 
+3ed3 c290e80c bbit1 keyboard_enable_full_n_key_rollover ,hid_device_param_common_init 
+3ed4 580094fc setarg keyboard_ble_hid_map_magic_keyboard_addr 
+3ed5 67e148d6 store 2 ,mem_keyboard_le_hid_map 
+3ed6 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+3ed7 c291680c bbit1 keyboard_enable_magic_keyboard ,hid_device_param_common_init 
+3ed8 5800944a setarg keyboard_ble_hid_map_only_keyboard_addr 
+3ed9 67e148d6 store 2 ,mem_keyboard_le_hid_map 
+3eda 2020680c branch hid_device_param_common_init 
+
+keyboard_param_init:
+3edb 20403ef4 call keyboard_compare_addr_init 
+3edc 20403ecb call keyboard_param_common_init 
+3edd 20404093 call keyboard_adc_vol_init 
+3ede 6fe0cac1 fetch 1 ,mem_keyboard_device_poweron_timer_init 
+3edf 67e0cac2 store 1 ,mem_keyboard_device_poweron_timer 
+3ee0 7049a000 jam 0 ,mem_same_keyvalue_timerout_flag 
+3ee1 d8a0475f arg mem_le_adv_swift_pair ,contw 
+3ee2 df200014 arg 20 ,loopcnt 
+3ee3 20407ca3 call clear_mem 
+3ee4 6fe0c26d fetch 1 ,mem_le_name_len 
+3ee5 1fe67c0c sub pdata ,12 ,null 
+3ee6 24213ef2 nbranch keyboard_ble_name_set_no_swift_pair ,positive 
+3ee7 5806ff06 setarg 0x06ff06 
+3ee8 67e1c75f store 3 ,mem_le_adv_swift_pair 
+3ee9 58000300 setarg 0x000300 
+3eea e7e18005 istore 3 ,contw 
+3eeb 58000080 setarg 0x80 
+3eec e7e08005 istore 1 ,contw 
+
+keyboard_ble_store_le_name:
+3eed 6fe0c26d fetch 1 ,mem_le_name_len 
+3eee 1fe0fe01 increase 1 ,pdata 
+3eef 1fe27200 copy pdata ,loopcnt 
+3ef0 d8c0436d arg mem_le_scan_data ,contr 
+3ef1 20207cdc branch memcpy 
+
+keyboard_ble_name_set_no_swift_pair:
+3ef2 d8a0475f arg mem_le_adv_swift_pair ,contw 
+3ef3 20203eed branch keyboard_ble_store_le_name 
+
+keyboard_compare_addr_init:
+3ef4 d8400000 arg 0 ,temp 
+3ef5 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+3ef6 c287e81d bbit1 keyboard_enable_otp ,hid_device_compare_addr_store 
+3ef7 d85fffff arg 0xffffff ,temp 
+3ef8 2020681d branch hid_device_compare_addr_store 
+
+keyboard_gpio_init:
+3ef9 20407de6 call clear_wake 
+3efa 6848c90f fetcht 1 ,mem_keyboard_pb_button_gpio 
+3efb 20404f0a call device_gpio_config_input_pu 
+3efc 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+3efd 2feffe0a isolate1 keyboard_disable_ice ,pdata 
+3efe 2040a3a5 call lpm_write_ice_disable ,true 
+3eff 5800491f setarg mem_key_row_gpio 
+3f00 67e14948 store 2 ,mem_kb_row_ptr 
+3f01 58004927 setarg mem_key_col_gpio 
+3f02 67e1494a store 2 ,mem_kb_col_ptr 
+3f03 5800493c setarg mem_key_excol_gpio 
+3f04 67e1494c store 2 ,mem_kb_excol_ptr 
+3f05 20403f0f call keyboard_key_row_init 
+3f06 6fe1494a fetch 2 ,mem_kb_col_ptr 
+3f07 1fe22400 copy pdata ,regb 
+3f08 df200014 arg 20 ,loopcnt 
+
+keyboard_key_cow_init:
+3f09 e8408012 ifetcht 1 ,regb 
+3f0a 284ffe07 isolate1 7 ,temp 
+3f0b 2440ef0b ncall gpio_set_high_impedance ,true 
+3f0c 1a40a401 increase 1 ,regb 
+3f0d c2003f09 loop keyboard_key_cow_init 
+3f0e 20600000 rtn 
+
+keyboard_key_row_init:
+3f0f 6fe14948 fetch 2 ,mem_kb_row_ptr 
+3f10 1fe22400 copy pdata ,regb 
+3f11 df200008 arg 8 ,loopcnt 
+
+keyboard_key_row_init_loop:
+3f12 e8408012 ifetcht 1 ,regb 
+3f13 18467cff sub temp ,ui_button_gpio_disable ,null 
+3f14 2442bf18 ncall keyboard_gpio_set_low_pullup ,zero 
+3f15 1a40a401 increase 1 ,regb 
+3f16 c2003f12 loop keyboard_key_row_init_loop 
+3f17 202023e1 branch lpm_write_gpio_wakeup 
+
+keyboard_gpio_set_low_pullup:
+3f18 20406f0b call gpio_set_high_impedance 
+3f19 e8408012 ifetcht 1 ,regb 
+3f1a 20206ec0 branch gpio_set_low_pullup 
+
+keyboard_gpio_pu_idle:
+3f1b d8c08070 arg core_gpio_conf ,contr 
+3f1c df200010 arg gpio_number ,loopcnt 
+
+keyboard_gpio_pu_idle_loop:
+3f1d efe08006 ifetch 1 ,contr 
+3f1e 243a3f22 nbranch keyboard_gpio_pu_idle_configured ,blank 
+3f1f 58000040 setarg gpcfg_pullup 
+3f20 18c08bff add contr ,-1 ,contw 
+3f21 e7e08005 istore 1 ,contw 
+
+keyboard_gpio_pu_idle_configured:
+3f22 c2003f1d loop keyboard_gpio_pu_idle_loop 
+3f23 dfe080dc arg core_gpio_conf_hi + gpio_number_ext ,pdata 
+3f24 98c67c00 isub contr ,null 
+3f25 20628000 rtn zero 
+3f26 df200008 arg gpio_number_ext ,loopcnt 
+3f27 d8c080d4 arg core_gpio_conf_hi ,contr 
+3f28 20203f1d branch keyboard_gpio_pu_idle_loop 
+
+keyboard_key_row_wake_set:
+3f29 6fe0c9a0 fetch 1 ,mem_same_keyvalue_timerout_flag 
+3f2a 203a6eac branch gpio_set_wake ,blank 
+3f2b 20206ea5 branch gpio_set_wake_by_current_state 
+
+keyboard_pairing_check_otp_offset:
+3f2c 6fe14abd fetch 2 ,mem_otp_read_retention_offset 
+3f2d 68494abf fetcht 2 ,mem_otp_read_retention_max_size 
+3f2e 98467c00 isub temp ,null 
+3f2f 24610000 nrtn positive 
+3f30 2020233e branch assert 
+
+keyboard_load_otp_info:
+3f31 6fe0c678 fetch 1 ,mem_device_flag 
+3f32 c0003f35 beq mode_24g_device ,keyboard_load_otp_device_info_g24_init 
+3f33 c000bf3f beq mode_bt_device1 ,keyboard_load_otp_device_info_ble_init 
+3f34 20600000 rtn 
+
+keyboard_load_otp_device_info_g24_init:
+3f35 db000008 arg 8 ,regd 
+3f36 6fe14abf fetch 2 ,mem_otp_read_retention_max_size 
+3f37 9b06fc00 idiv regd 
+3f38 20407d64 call wait_div_end 
+3f39 1807fe00 quotient pdata 
+3f3a 67e1064e store 2 ,mem_pdatatemp 
+3f3b dfe01fbc arg 0x1fbc ,pdata 
+3f3c d8400004 arg 4 ,temp 
+3f3d dd600004 arg 4 ,rege 
+3f3e 20203f49 branch keyboard_load_otp_device_info 
+
+keyboard_load_otp_device_info_ble_init:
+3f3f db000020 arg 32 ,regd 
+3f40 6fe14abf fetch 2 ,mem_otp_read_retention_max_size 
+3f41 9b06fc00 idiv regd 
+3f42 20407d64 call wait_div_end 
+3f43 1807fe00 quotient pdata 
+3f44 67e1064e store 2 ,mem_pdatatemp 
+3f45 dfe01fb0 arg 0x1fb0 ,pdata 
+3f46 d8400010 arg 16 ,temp 
+3f47 dd600010 arg 16 ,rege 
+3f48 20203f49 branch keyboard_load_otp_device_info 
+
+keyboard_load_otp_device_info:
+3f49 67e10650 store 2 ,mem_pdatatemp + 2 
+3f4a 60488656 storet 1 ,mem_temp 
+3f4b da204aa5 arg mem_otp_read_retention_memory ,rega 
+3f4c da600000 arg 0 ,regc 
+
+keyboard_load_otp_info_check_page_loop:
+3f4d 6fe10650 fetch 2 ,mem_pdatatemp + 2 
+3f4e 1fe22400 copy pdata ,regb 
+3f4f 6f208656 fetchr loopcnt ,1 ,mem_temp 
+3f50 da204aa5 arg mem_otp_read_retention_memory ,rega 
+3f51 20406b62 call otp_read_data 
+3f52 6fe44aa5 fetch 8 ,mem_otp_read_retention_memory 
+3f53 684c4aad fetcht 8 ,mem_otp_read_retention_memory + 8 
+3f54 9841fe00 ior temp ,pdata 
+3f55 684c4ab5 fetcht 8 ,mem_otp_read_retention_memory + 16 
+3f56 9841fe00 ior temp ,pdata 
+3f57 203a3f5f branch keyboard_load_otp_info_check_first_time ,blank 
+3f58 1a60a601 increase 1 ,regc 
+3f59 6fe1064e fetch 2 ,mem_pdatatemp 
+3f5a 9a667c00 isub regc ,null 
+3f5b 6fe10650 fetch 2 ,mem_pdatatemp + 2 
+3f5c 9b067e00 isub regd ,pdata 
+3f5d 67e10650 store 2 ,mem_pdatatemp + 2 
+3f5e 20203f4d branch keyboard_load_otp_info_check_page_loop 
+
+keyboard_load_otp_info_check_first_time:
+3f5f 1a667c00 sub regc ,0 ,null 
+3f60 2022bf72 branch keyboard_load_otp_info_check_first_time_process ,zero 
+
+keyboard_load_otp_info_check_first_time_loop_init:
+3f61 6fe10650 fetch 2 ,mem_pdatatemp + 2 
+3f62 9b00fe00 iadd regd ,pdata 
+
+keyboard_load_otp_info_check_first_time_loop:
+3f63 9d667e00 isub rege ,pdata 
+3f64 67e10650 store 2 ,mem_pdatatemp + 2 
+3f65 6fe10650 fetch 2 ,mem_pdatatemp + 2 
+3f66 1fe22400 copy pdata ,regb 
+3f67 6f208656 fetchr loopcnt ,1 ,mem_temp 
+3f68 da204aa5 arg mem_otp_read_retention_memory ,rega 
+3f69 20406b62 call otp_read_data 
+3f6a 6fe44aa5 fetch 8 ,mem_otp_read_retention_memory 
+3f6b 684c4aad fetcht 8 ,mem_otp_read_retention_memory + 8 
+3f6c 9841fe00 ior temp ,pdata 
+3f6d 684c4ab5 fetcht 8 ,mem_otp_read_retention_memory + 16 
+3f6e 9841fe00 ior temp ,pdata 
+3f6f 203a3f74 branch keyboard_load_otp_info_check_offset_process ,blank 
+3f70 6fe10650 fetch 2 ,mem_pdatatemp + 2 
+3f71 20203f63 branch keyboard_load_otp_info_check_first_time_loop 
+
+keyboard_load_otp_info_check_first_time_process:
+3f72 6560cabd storer rege ,1 ,mem_otp_read_retention_offset 
+3f73 20600000 rtn 
+
+keyboard_load_otp_info_check_offset_process:
+3f74 58001fc0 setarg 0x1fc0 
+3f75 68490650 fetcht 2 ,mem_pdatatemp + 2 
+3f76 98467e00 isub temp ,pdata 
+3f77 67e14abd store 2 ,mem_otp_read_retention_offset 
+3f78 18427e00 copy temp ,pdata 
+3f79 9d60a400 iadd rege ,regb 
+3f7a 6f208656 fetchr loopcnt ,1 ,mem_temp 
+3f7b da204aa5 arg mem_otp_read_retention_memory ,rega 
+3f7c 20406b62 call otp_read_data 
+3f7d 6fe0c678 fetch 1 ,mem_device_flag 
+3f7e c0003f81 beq mode_24g_device ,keyboard_load_otp_info_check_offset_process_g24 
+3f7f c000bf87 beq mode_bt_device1 ,keyboard_load_otp_info_check_offset_process_ble 
+3f80 20600000 rtn 
+
+keyboard_load_otp_info_check_offset_process_g24:
+3f81 6fe34aa5 fetch 6 ,mem_otp_read_retention_memory 
+3f82 67e246a3 store 4 ,mem_device_24g_addr 
+3f83 6fe246a3 fetch 4 ,mem_device_24g_addr 
+3f84 67e245ff store 4 ,mem_24g_receiver_addr 
+3f85 67e245a6 store 4 ,mem_24g_addr 
+3f86 20600000 rtn 
+
+keyboard_load_otp_info_check_offset_process_ble:
+3f87 6fe0caa5 fetch 1 ,mem_otp_read_retention_memory 
+3f88 1fe67c03 sub pdata ,system_os_mac ,null 
+3f89 24417dcc ncall set_pdata_0 ,positive 
+3f8a 67e0caa1 store 1 ,mem_kb_computer_system 
+3f8b 6fe0caa6 fetch 1 ,mem_otp_read_retention_memory + 1 
+3f8c 67e0c679 store 1 ,mem_device1_type 
+3f8d 6fe34aa7 fetch 6 ,mem_otp_read_retention_memory + 2 
+3f8e 67e3467a store 6 ,mem_device1_addr 
+3f8f 6fe34aad fetch 6 ,mem_otp_read_retention_memory + 8 
+3f90 67e34680 store 6 ,mem_device1_locall_addr 
+3f91 68494ab3 fetcht 2 ,mem_otp_read_retention_memory + 14 
+3f92 180a7e00 random pdata 
+3f93 9840fe00 iadd temp ,pdata 
+3f94 67e146a7 store 2 ,mem_random_addr_increase_count 
+3f95 202067d5 branch hid_device_select_reconn_device 
+
+keyboard_load_eeprom_info:
+3f96 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+3f97 c31ebf9d bbit0 keyboard_enable_sda_multi_r_line ,keyboard_load_eeprom_device_info_next 
+3f98 6848c440 fetcht 1 ,mem_eeprom_sda_gpio 
+3f99 20404f0a call device_gpio_config_input_pu 
+3f9a 6848c440 fetcht 1 ,mem_eeprom_sda_gpio 
+3f9b 20406ee0 call gpio_get_bit 
+3f9c 2020bf96 branch keyboard_load_eeprom_info ,true 
+
+keyboard_load_eeprom_device_info_next:
+3f9d 20404049 call keyboard_eeprom_init 
+3f9e d8400080 arg 128 ,temp 
+3f9f da204678 arg mem_device_flag ,rega 
+3fa0 da400000 arg keyboard_info_eeprom_offect ,regb 
+3fa1 20406cd7 call iicd_read_eep_data 
+
+keyboard_load_info_check:
+3fa2 449fc007 bpatch patch07_7 ,mem_patch07 
+3fa3 20403fc6 call keyboard_app_initflag_check 
+3fa4 6fe0c678 fetch 1 ,mem_device_flag 
+3fa5 c0003faa beq mode_24g_device ,keyboard_load_info_24g 
+3fa6 c000bfb0 beq mode_bt_device1 ,keyboard_load_info_bt1 
+3fa7 c0013fbb beq mode_bt_device2 ,keyboard_load_info_bt2 
+3fa8 c001bfbf beq mode_bt_device3 ,keyboard_load_info_bt3 
+3fa9 c0023fc3 beq mode_usb_device ,keyboard_load_info_usb 
+
+keyboard_load_info_24g:
+3faa 704aa100 jam system_os_windows ,mem_kb_computer_system 
+3fab 6fe0c6a9 fetch 1 ,mem_keyboard_24g_fn_lock 
+
+keyboard_load_info_fn_lock:
+3fac 1fe67c01 sub pdata ,1 ,null 
+3fad 2442fdcc ncall set_pdata_0 ,zero 
+3fae 67e0ca93 store 1 ,mem_keyboard_fn_lock_flag 
+3faf 20600000 rtn 
+
+keyboard_load_info_bt1:
+3fb0 6fe0c6aa fetch 1 ,mem_keyboard_bt1_fn_lock 
+3fb1 20403fac call keyboard_load_info_fn_lock 
+3fb2 6fe0c6ae fetch 1 ,mem_keyboard_bt1_computer_system 
+3fb3 1fe67c03 sub pdata ,system_os_mac ,null 
+3fb4 24417dcc ncall set_pdata_0 ,positive 
+
+keyboard_load_info_bt:
+3fb5 67e0caa1 store 1 ,mem_kb_computer_system 
+3fb6 684946a7 fetcht 2 ,mem_random_addr_increase_count 
+3fb7 180a7e00 random pdata 
+3fb8 9840fe00 iadd temp ,pdata 
+3fb9 67e146a7 store 2 ,mem_random_addr_increase_count 
+3fba 20600000 rtn 
+
+keyboard_load_info_bt2:
+3fbb 6fe0c6ab fetch 1 ,mem_keyboard_bt2_fn_lock 
+3fbc 20403fac call keyboard_load_info_fn_lock 
+3fbd 6fe0c6af fetch 1 ,mem_keyboard_bt2_computer_system 
+3fbe 20203fb5 branch keyboard_load_info_bt 
+
+keyboard_load_info_bt3:
+3fbf 6fe0c6ac fetch 1 ,mem_keyboard_bt3_fn_lock 
+3fc0 20403fac call keyboard_load_info_fn_lock 
+3fc1 6fe0c6b0 fetch 1 ,mem_keyboard_bt3_computer_system 
+3fc2 20203fb5 branch keyboard_load_info_bt 
+
+keyboard_load_info_usb:
+3fc3 704aa100 jam system_os_windows ,mem_kb_computer_system 
+3fc4 6fe0c6ad fetch 1 ,mem_keyboard_usb_fn_lock 
+3fc5 20203fac branch keyboard_load_info_fn_lock 
+
+keyboard_app_initflag_check:
+3fc6 6fe146a0 fetch 2 ,mem_store_flag 
+3fc7 d840aa55 arg eeprom_init_flag ,temp 
+3fc8 98467c00 isub temp ,null 
+3fc9 2022e7cf branch hid_device_load_device_info ,zero 
+3fca 604946a0 storet 2 ,mem_store_flag 
+3fcb 204067f8 call hid_device_ble_init_address 
+3fcc 6fe0c717 fetch 1 ,mem_device_flag_temp 
+3fcd 67e0c678 store 1 ,mem_device_flag 
+3fce 6fe245fb fetch 4 ,mem_24g_fast_conn_addr 
+3fcf 67e245ff store 4 ,mem_24g_receiver_addr 
+3fd0 67e245a6 store 4 ,mem_24g_addr 
+3fd1 6fe0caa2 fetch 1 ,mem_keyboard_device_info_store_flag 
+3fd2 79207e00 set1 keyboard_store_eepromm_flag_all_info ,pdata 
+3fd3 67e0caa2 store 1 ,mem_keyboard_device_info_store_flag 
+3fd4 20203fd7 branch keyboard_store_device_info 
+
+keyboard_load_flash_info:
+3fd5 204067b6 call hid_device_load_flash_info_check 
+3fd6 20203fa2 branch keyboard_load_info_check 
+
+keyboard_store_device_info:
+3fd7 44a04008 bpatch patch08_0 ,mem_patch08 
+3fd8 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+3fd9 c287bfdd bbit1 keyboard_enable_otp ,keyboard_store_otp_device_info 
+3fda c2874004 bbit1 keyboard_enable_eeprom ,keyboard_store_eeprom_device_info 
+3fdb c28667bb bbit1 keyboard_enable_flash ,hid_device_store_flash_device_info 
+3fdc 20600000 rtn 
+
+keyboard_store_otp_device_info:
+3fdd 6fe0c678 fetch 1 ,mem_device_flag 
+3fde c0003fe1 beq mode_24g_device ,keyboard_store_otp_device_info_g24 
+3fdf c000bfeb beq mode_bt_device1 ,keyboard_store_otp_device_info_ble 
+3fe0 20600000 rtn 
+
+keyboard_store_otp_device_info_g24:
+3fe1 68494abd fetcht 2 ,mem_otp_read_retention_offset 
+3fe2 58001fc0 setarg 0x1fc0 
+3fe3 98462400 isub temp ,regb 
+3fe4 da2046a3 arg mem_device_24g_addr ,rega 
+3fe5 df200004 arg 4 ,loopcnt 
+3fe6 20406b33 call otp_write 
+3fe7 68494abd fetcht 2 ,mem_otp_read_retention_offset 
+3fe8 18408404 increase 4 ,temp 
+3fe9 60494abd storet 2 ,mem_otp_read_retention_offset 
+3fea 20600000 rtn 
+
+keyboard_store_otp_device_info_ble:
+3feb 704aa301 jam 1 ,mem_otp_store_device_info_flag 
+3fec 6fe0caa4 fetch 1 ,mem_otp_store_system_flag 
+3fed 207a0000 rtn blank 
+
+keyboard_wirte_otp_ble:
+3fee 68494abd fetcht 2 ,mem_otp_read_retention_offset 
+3fef 58001fc0 setarg 0x1fc0 
+3ff0 98467e00 isub temp ,pdata 
+3ff1 67e1064e store 2 ,mem_pdatatemp 
+3ff2 1fe22400 copy pdata ,regb 
+3ff3 da204aa1 arg mem_kb_computer_system ,rega 
+3ff4 df200001 arg 1 ,loopcnt 
+3ff5 20406b33 call otp_write 
+3ff6 6fe1064e fetch 2 ,mem_pdatatemp 
+3ff7 1fe0a401 add pdata ,1 ,regb 
+3ff8 da204679 arg mem_device1_type ,rega 
+3ff9 df20000d arg 13 ,loopcnt 
+3ffa 20406b33 call otp_write 
+3ffb 6fe1064e fetch 2 ,mem_pdatatemp 
+3ffc 1fe0a40e add pdata ,14 ,regb 
+3ffd da2046a7 arg mem_random_addr_increase_count ,rega 
+3ffe df200002 arg 2 ,loopcnt 
+3fff 20406b33 call otp_write 
+4000 68494abd fetcht 2 ,mem_otp_read_retention_offset 
+4001 18408410 increase 16 ,temp 
+4002 60494abd storet 2 ,mem_otp_read_retention_offset 
+4003 20600000 rtn 
+
+keyboard_store_eeprom_device_info:
+4004 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+4005 c31ec00b bbit0 keyboard_enable_sda_multi_r_line ,keyboard_store_eeprom_device_info_next 
+4006 6848c440 fetcht 1 ,mem_eeprom_sda_gpio 
+4007 20404f0a call device_gpio_config_input_pu 
+4008 6848c440 fetcht 1 ,mem_eeprom_sda_gpio 
+4009 20406ee0 call gpio_get_bit 
+400a 2020c4b9 branch keyboard_store_device_info_delay ,true 
+
+keyboard_store_eeprom_device_info_next:
+400b 20404049 call keyboard_eeprom_init 
+
+keyboard_store_eeprom_device_info_typer_check:
+400c 6fe0caa2 fetch 1 ,mem_keyboard_device_info_store_flag 
+400d c2804014 bbit1 keyboard_store_eepromm_flag_all_info ,keyboard_store_eeprom_device_all_info 
+400e c280c019 bbit1 keyboard_store_eepromm_flag_ble_addr ,keyboard_store_eeprom_device_info_ble_addr 
+400f c2814025 bbit1 keyboard_store_eepromm_flag_g24_addr ,keyboard_store_eeprom_device_info_g24_addr 
+4010 c281c02d bbit1 keyboard_store_eepromm_flag_fn_lock ,keyboard_store_eeprom_device_info_fn_lock 
+4011 c2824035 bbit1 keyboard_store_eepromm_flag_computer_system ,keyboard_store_eeprom_device_info_device_os 
+4012 c282c03d bbit1 keyboard_store_eepromm_flag_rgb_type ,keyboard_store_eeprom_device_info_rgb_tpye 
+4013 20600000 rtn 
+
+keyboard_store_eeprom_device_all_info:
+4014 704aa200 jam 0 ,mem_keyboard_device_info_store_flag 
+4015 d8400080 arg 128 ,temp 
+4016 da204678 arg mem_device_flag ,rega 
+4017 da400000 arg keyboard_info_eeprom_offect ,regb 
+4018 20206cc9 branch iicd_write_protect_eep_data 
+
+keyboard_store_eeprom_device_info_ble_addr:
+4019 6fe0caa2 fetch 1 ,mem_keyboard_device_info_store_flag 
+401a 793ffe01 set0 keyboard_store_eepromm_flag_ble_addr ,pdata 
+401b 67e0caa2 store 1 ,mem_keyboard_device_info_store_flag 
+401c d8400027 arg 39 ,temp 
+401d da204679 arg mem_device1_type ,rega 
+401e da400001 arg keyboard_ble_addr_eeprom_offect ,regb 
+401f 20406cc9 call iicd_write_protect_eep_data 
+4020 d8400002 arg 2 ,temp 
+4021 da2046a7 arg mem_random_addr_increase_count ,rega 
+4022 da40002f arg keyboard_random_addr_count_eeprom_offset ,regb 
+4023 20406cc9 call iicd_write_protect_eep_data 
+4024 2020400c branch keyboard_store_eeprom_device_info_typer_check 
+
+keyboard_store_eeprom_device_info_g24_addr:
+4025 6fe0caa2 fetch 1 ,mem_keyboard_device_info_store_flag 
+4026 793ffe02 set0 keyboard_store_eepromm_flag_g24_addr ,pdata 
+4027 67e0caa2 store 1 ,mem_keyboard_device_info_store_flag 
+4028 d8400004 arg 4 ,temp 
+4029 da2046a3 arg mem_device_24g_addr ,rega 
+402a da40002b arg keyboard_g24_addr_eeprom_offect ,regb 
+402b 20406cc9 call iicd_write_protect_eep_data 
+402c 2020400c branch keyboard_store_eeprom_device_info_typer_check 
+
+keyboard_store_eeprom_device_info_fn_lock:
+402d 6fe0caa2 fetch 1 ,mem_keyboard_device_info_store_flag 
+402e 793ffe03 set0 keyboard_store_eepromm_flag_fn_lock ,pdata 
+402f 67e0caa2 store 1 ,mem_keyboard_device_info_store_flag 
+4030 d8400005 arg 5 ,temp 
+4031 da2046a9 arg mem_keyboard_24g_fn_lock ,rega 
+4032 da400031 arg keyboard_fn_flag_eeprom_offset ,regb 
+4033 20406cc9 call iicd_write_protect_eep_data 
+4034 2020400c branch keyboard_store_eeprom_device_info_typer_check 
+
+keyboard_store_eeprom_device_info_device_os:
+4035 6fe0caa2 fetch 1 ,mem_keyboard_device_info_store_flag 
+4036 793ffe04 set0 keyboard_store_eepromm_flag_computer_system ,pdata 
+4037 67e0caa2 store 1 ,mem_keyboard_device_info_store_flag 
+4038 d8400003 arg 3 ,temp 
+4039 da2046ae arg mem_keyboard_bt1_computer_system ,rega 
+403a da400036 arg keyboard_computer_system_eeprom_offset ,regb 
+403b 20406cc9 call iicd_write_protect_eep_data 
+403c 2020400c branch keyboard_store_eeprom_device_info_typer_check 
+
+keyboard_store_eeprom_device_info_rgb_tpye:
+403d 6fe0caa2 fetch 1 ,mem_keyboard_device_info_store_flag 
+403e 793ffe05 set0 keyboard_store_eepromm_flag_rgb_type ,pdata 
+403f 67e0caa2 store 1 ,mem_keyboard_device_info_store_flag 
+4040 d8400004 arg 4 ,temp 
+4041 da2046b1 arg mem_backlight_on_flag ,rega 
+4042 da400039 arg keyboard_rgb_tpye_offset ,regb 
+4043 20406cc9 call iicd_write_protect_eep_data 
+4044 2020400c branch keyboard_store_eeprom_device_info_typer_check 
+
+keyboard_store_device_number:
+4045 d8400001 arg 1 ,temp 
+4046 da204678 arg mem_device_flag ,rega 
+4047 da400000 arg keyboard_device_number_eeprom_offect ,regb 
+4048 20206cc9 branch iicd_write_protect_eep_data 
+
+keyboard_eeprom_init:
+4049 20406cb2 call iicd_read_init_pin 
+404a 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+404b 2feffe0d isolate1 keyboard_enable_2k_eeprom ,pdata 
+404c 2020ecb7 branch set_eeprom_size_2k ,true 
+404d 20206cba branch clear_eeprom_size_2k 
+
+keyboard_cb_fuction:
+404e 44a0c008 bpatch patch08_1 ,mem_patch08 
+404f 580068c4 setarg hid_device_before_lpm_set 
+4050 67e143f2 store 2 ,mem_cb_before_lpm_sleep 
+4051 58004862 setarg keyboard_24g_package_data 
+4052 67e14609 store 2 ,mem_cb_24g_transmit_data 
+4053 58004871 setarg keyboard_24g_search_dongle 
+4054 67e1460b store 2 ,mem_cb_24g_search_receiver 
+4055 5800478f setarg keyboard_lpm_before_common 
+4056 67e1460d store 2 ,mem_cb_24g_lpm_before 
+4057 58004875 setarg keyboard_le 
+4058 67e143e2 store 2 ,mem_cb_le_process 
+4059 580047aa setarg keyboard_process_lpm_before 
+405a 67e143e0 store 2 ,mem_cb_before_lpm 
+405b 58004066 setarg keyboard_priority_bb_event 
+405c 67e143e6 store 2 ,mem_cb_bb_event_process 
+405d 580042dd setarg keyboard_idle 
+405e 67e143e4 store 2 ,mem_cb_idle_process 
+405f 580047ac setarg keyboard_before_hibernate 
+4060 67e143de store 2 ,mem_cb_before_hibernate 
+4061 58005420 setarg mouse_le_bb_event_connect_complete 
+4062 67e143e8 store 2 ,mem_cb_att_write 
+4063 58004075 setarg keyboard_bb_event_timer 
+4064 67e143ec store 2 ,mem_cb_event_timer 
+4065 202068cb branch hid_device_cb_fuction 
+
+keyboard_priority_bb_event:
+4066 44a14008 bpatch patch08_2 ,mem_patch08 
+4067 1a627e00 copy regc ,pdata 
+4068 c01948b3 beq bt_evt_le_start_enc ,keyboard_le_ll_start_encryt 
+4069 c02048bb beq bt_evt_le_parse_conn_papa_update_rsp ,keyboard_le_conn_param_update_rsp_recieved 
+406a c00ac8a2 beq bt_evt_le_disconnected ,keyboard_le_bb_disconnected 
+406b c00a4893 beq bt_evt_le_connected ,keyboard_le_bb_event_connected 
+406c c00848c0 beq bt_evt_button_long_pressed ,keyboard_bb_event_discovery_btn 
+406d c018d406 beq bt_evt_le_pairing_success ,mouse_le_pairing_success 
+406e c014d408 beq bt_evt_le_enc_info ,mouse_le_enc_info 
+406f c01f379e beq bt_evt_le_pairing_complete ,app_ble_store_reconn_info 
+4070 c0225428 beq bt_evt_le_parse_conn_param_accepted ,mouse_le_parse_conn_param_accepted 
+4071 c01cc7b8 beq bt_evt_24g_pairing_complete ,keyboard_24g_pairing_complete 
+4072 c01e47ca beq bt_evt_24g_attempt_success ,keyboard_24g_attempt_success 
+4073 c01d47e6 beq bt_evt_24g_attempt_fail ,keyboard_24g_attempt_fail 
+4074 20600000 rtn 
+
+keyboard_bb_event_timer:
+4075 44a1c008 bpatch patch08_3 ,mem_patch08 
+4076 204040e0 call keyboard_low_voltage_param_set 
+4077 204040cc call keyboard_adc_read 
+4078 204040dd call keyboard_adc_gpio_set_before_hibernate 
+4079 20404100 call keyboard_low_voltage_led_timer 
+407a 20404186 call keyboard_num_capslock_led_on_timer 
+407b 204041ab call keyboard_rgb_on_timer 
+407c 20404131 call keyboard_device_poweron_timer 
+407d 2040413e call keyboard_mode_led_timer 
+407e 20404146 call keyboard_device_pair_led_timer 
+407f 20404267 call keyboard_key_press_timer 
+4080 2040428f call keyboard_commbination_key_process 
+4081 204042c4 call keyboard_same_key_long_press_timer 
+4082 2040326c call g24_pair_timeout_timer 
+4083 20403507 call g24_reconn_timeout_timer 
+4084 204058f6 call mouse_24g_long_sleep_param_update_timer 
+4085 204042b5 call keyboard_24g_repeat_send_data 
+4086 204042bf call keyboard_24g_led_status_get_timer 
+4087 20404299 call keyboard_check_discovery_timeout_timer 
+4088 204042a4 call keyboard_check_direct_timeout_timer 
+4089 2040550d call mouse_le_enable_att_list_timer 
+408a 204042ad call keyboard_le_battery_updata_timer 
+408b 20405510 call mouse_le_send_smp_security_request_timer 
+408c 204042b2 call keyboard_le_send_conn_param_update_timer 
+408d 204042a1 call keyboard_le_auto_recognize_timer 
+408e 20405527 call mouse_current_mult_update_timer 
+408f 2040429e call keyboard_store_information_delay_timer 
+4090 204042c9 call keyboard_commbination_delay_release_timer 
+4091 204042cc call keyboard_usb_updata_timer 
+4092 202042d5 branch keyboard_check_no_data_timeout_timer 
+
+keyboard_adc_vol_init:
+4093 44a24008 bpatch patch08_4 ,mem_patch08 
+4094 6fe0c8b1 fetch 1 ,mem_keyboard_power_type 
+4095 c0004098 beq keyboard_battary_1v5 ,keyboard_adc_vol_1v5_init 
+4096 c000c09d beq keyboard_battary_3v0 ,keyboard_adc_vol_3v0_init 
+4097 c00140a2 beq keyboard_battary_4v2 ,keyboard_adc_vol_4v2_init 
+
+keyboard_adc_vol_1v5_init:
+4098 58560094 setarg 0x560094 
+4099 67e1c8ab store 3 ,mem_keyboard_vdd_full_vol 
+409a 58006d00 setarg 0x006d00 
+409b e7e18005 istore 3 ,contw 
+409c 20600000 rtn 
+
+keyboard_adc_vol_3v0_init:
+409d 58d4012c setarg 0xd4012c 
+409e 67e1c8ab store 3 ,mem_keyboard_vdd_full_vol 
+409f 5800e600 setarg 0x00e600 
+40a0 e7e18005 istore 3 ,contw 
+40a1 20600000 rtn 
+
+keyboard_adc_vol_4v2_init:
+40a2 5ac01270 setarg 0x2c01270 
+40a3 67e1c8ab store 3 ,mem_keyboard_vdd_full_vol 
+40a4 58014001 setarg 0x014001 
+40a5 e7e18005 istore 3 ,contw 
+40a6 20600000 rtn 
+
+keyboard_adc_init:
+40a7 204040a9 call keyboard_adc_gpio_set 
+40a8 202040e0 branch keyboard_low_voltage_param_set 
+
+keyboard_adc_gpio_set:
+40a9 6fe0c41d fetch 1 ,mem_adc_config_flag 
+40aa c1810000 rtnne adc_config_gpio 
+40ab 6fe0c41e fetch 1 ,mem_adc_channel 
+40ac 204040b2 call keyboard_channel_set_gpio 
+40ad 18427e00 copy temp ,pdata 
+40ae 67e0c64c store 1 ,mem_adc_channel_gpio 
+40af 79207e07 set1 gpio_active_bit ,pdata 
+40b0 d8400000 arg gpcfg_input ,temp 
+40b1 20206f1c branch gpio_config_function 
+
+keyboard_channel_set_gpio:
+40b2 d8400012 arg 18 ,temp 
+40b3 c1030000 rtneq 0x6 
+40b4 d840000a arg 10 ,temp 
+40b5 c1038000 rtneq 0x7 
+40b6 d8400009 arg 9 ,temp 
+40b7 c1040000 rtneq 0x8 
+40b8 d840000c arg 12 ,temp 
+40b9 c1048000 rtneq 0x9 
+40ba d8400006 arg 6 ,temp 
+40bb c1050000 rtneq 0xa 
+40bc d8400014 arg 20 ,temp 
+40bd c1058000 rtneq 0xb 
+40be d8400015 arg 21 ,temp 
+40bf c1060000 rtneq 0xc 
+40c0 d8400016 arg 22 ,temp 
+40c1 c1068000 rtneq 0xd 
+40c2 d840000d arg 13 ,temp 
+40c3 20600000 rtn 
+
+keyboard_adc_read_start:
+40c4 204040a7 call keyboard_adc_init 
+40c5 20406fb2 call enable_adc 
+40c6 20406f8e call vdd_calculate_by_mode 
+40c7 1fe6fc0a div pdata ,10 
+40c8 20407d61 call get_div_result 
+40c9 67e1464a store 2 ,mem_device_vdd_now_vol 
+40ca da204644 arg mem_device_vdd_calculate_set ,rega 
+40cb 20204ec4 branch mouse_adc_bat_percent_lowpower_out 
+
+keyboard_adc_read:
+40cc 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+40cd c4058000 rtnbit0 keyboard_enable_adc 
+40ce 204040c4 call keyboard_adc_read_start 
+
+keyboard_adc_data_process:
+40cf 6fe0c422 fetch 1 ,mem_adc_power_flag 
+40d0 c280c7af bbit1 1 ,keyboard_power_down 
+40d1 c30040d6 bbit0 0 ,keyboard_adc_no_low_voltage 
+40d2 70464e01 jam 1 ,mem_device_adc_last_low_voltage_flag 
+40d3 202040d4 branch keyboard_adc_low_voltage 
+
+keyboard_adc_low_voltage:
+40d4 d8e00002 arg keyboard_low_voltage_flag ,queue 
+40d5 20204a25 branch keyboard_enable_function_flag 
+
+keyboard_adc_no_low_voltage:
+40d6 d8e00002 arg keyboard_low_voltage_flag ,queue 
+40d7 20404a29 call keyboard_disable_function_flag 
+40d8 704ac60c jam 12 ,mem_keyboard_adc_low_volatage_led_timer_count 
+40d9 6fe0c64e fetch 1 ,mem_device_adc_last_low_voltage_flag 
+40da 207a0000 rtn blank 
+40db 70464e00 jam 0 ,mem_device_adc_last_low_voltage_flag 
+40dc 20204184 branch keyboard_low_voltage_led_off 
+
+keyboard_adc_gpio_set_before_hibernate:
+40dd 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+40de c4058000 rtnbit0 keyboard_enable_adc 
+40df 20204e5e branch mouse_adc_gpio_set_before_hibernate + 2 
+
+keyboard_low_voltage_param_set:
+40e0 6fe348ab fetch 6 ,mem_keyboard_vdd_full_vol 
+40e1 67e34644 store 6 ,mem_device_vdd_full_vol 
+40e2 6fe0c64e fetch 1 ,mem_device_adc_last_low_voltage_flag 
+40e3 203a40e8 branch keyboard_low_voltage_param_reset ,blank 
+40e4 6fe148af fetch 2 ,mem_keyboard_vdd_low_vol 
+40e5 1fe0fe05 increase 5 ,pdata 
+40e6 67e14648 store 2 ,mem_device_vdd_low_vol 
+40e7 20600000 rtn 
+
+keyboard_low_voltage_param_reset:
+40e8 6fe148af fetch 2 ,mem_keyboard_vdd_low_vol 
+40e9 67e14648 store 2 ,mem_device_vdd_low_vol 
+40ea 20600000 rtn 
+
+keyboard_low_vol_mult_set:
+40eb 6fe0c678 fetch 1 ,mem_device_flag 
+40ec c08040f3 bne mode_24g_device ,keyboard_low_vol_mult_ble_set 
+40ed 204035d3 call g24_interval_param_8ms 
+40ee 585d4800 setarg 0x5d4800 
+40ef 67e2462a store 4 ,mem_24g_long_sleep_set1 
+40f0 6fe0c422 fetch 1 ,mem_adc_power_flag 
+40f1 c4000000 rtnbit0 0 
+40f2 202058fc branch mouse_24g_long_sleep_set 
+
+keyboard_low_vol_mult_ble_set:
+40f3 580000a0 setarg 160 
+40f4 204040f9 call keyboard_mult_auto_get 
+40f5 6fe0c422 fetch 1 ,mem_adc_power_flag 
+40f6 c4000000 rtnbit0 0 
+40f7 58000050 setarg 80 
+40f8 202040f9 branch keyboard_mult_auto_get 
+
+keyboard_mult_auto_get:
+40f9 684942d5 fetcht 2 ,mem_le_interval_min 
+40fa 9846fc00 idiv temp 
+40fb 20407d61 call get_div_result 
+40fc 67e0c88b store 1 ,mem_lpm_mult_init 
+40fd 6fe0c73e fetch 1 ,mem_mouse_current_mult_timer 
+40fe 203a552a branch mouse_current_mult_reinit ,blank 
+40ff 20600000 rtn 
+
+keyboard_low_voltage_led_timer:
+4100 704acb00 jam 0 ,mem_keyboard_low_volatage_led_blink_new_data_enable 
+4101 6fe14750 fetch 2 ,mem_device_discovery_timer 
+4102 247a0000 nrtn blank 
+4103 6fe145ef fetch 2 ,mem_24g_pair_timeout 
+4104 247a0000 nrtn blank 
+4105 6fe145f5 fetch 2 ,mem_24g_reconn_timeout 
+4106 247a0000 nrtn blank 
+4107 6fe0cac2 fetch 1 ,mem_keyboard_device_poweron_timer 
+4108 247a0000 nrtn blank 
+4109 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+410a c4058000 rtnbit0 keyboard_enable_adc 
+410b c4148000 rtnbit0 keyboard_enable_low_led 
+410c c4010000 rtnbit0 keyboard_low_voltage_flag 
+410d c295411b bbit1 keyboard_enable_low_voltage_led_blink_n_second ,keyboard_low_voltage_led_blink_new_data 
+410e 44a2c008 bpatch patch08_5 ,mem_patch08 
+410f 6fe0cac6 fetch 1 ,mem_keyboard_adc_low_volatage_led_timer_count 
+4110 1fe0fe01 increase 1 ,pdata 
+4111 67e0cac6 store 1 ,mem_keyboard_adc_low_volatage_led_timer_count 
+4112 1fe67c14 sub pdata ,20 ,null 
+4113 24414119 ncall keyboard_adc_low_volatage_led_timer_count_clean ,positive 
+4114 c0014182 beq 2 ,keyboard_low_voltage_led_on 
+4115 c0024184 beq 4 ,keyboard_low_voltage_led_off 
+4116 c0034182 beq 6 ,keyboard_low_voltage_led_on 
+4117 c0044184 beq 8 ,keyboard_low_voltage_led_off 
+4118 20600000 rtn 
+
+keyboard_adc_low_volatage_led_timer_count_clean:
+4119 704ac601 jam 1 ,mem_keyboard_adc_low_volatage_led_timer_count 
+411a 20204184 branch keyboard_low_voltage_led_off 
+
+keyboard_low_voltage_led_blink_new_data:
+411b 6fe1471e fetch 2 ,mem_device_no_data_timeout 
+411c 68494741 fetcht 2 ,mem_device_no_data_timer 
+411d 98460400 isub temp ,temp 
+411e 6fe14ac7 fetch 2 ,mem_adc_low_volatage_led_blink_timer 
+411f 98467c00 isub temp ,null 
+4120 24214184 nbranch keyboard_low_voltage_led_off ,positive 
+4121 704acb01 jam 1 ,mem_keyboard_low_volatage_led_blink_new_data_enable 
+4122 6fe0cac9 fetch 1 ,mem_keyboard_low_volatage_led_flag 
+4123 1fe0fe01 increase 1 ,pdata 
+4124 67e0cac9 store 1 ,mem_keyboard_low_volatage_led_flag 
+4125 6848caca fetcht 1 ,mem_keyboard_low_volatage_led_blink_count 
+4126 18408401 increase 1 ,temp 
+4127 98467c00 isub temp ,null 
+4128 24214182 nbranch keyboard_low_voltage_led_on ,positive 
+4129 20404184 call keyboard_low_voltage_led_off 
+412a 6fe0cac9 fetch 1 ,mem_keyboard_low_volatage_led_flag 
+412b 6848caca fetcht 1 ,mem_keyboard_low_volatage_led_blink_count 
+412c 184f8402 mul32 temp ,2 ,temp 
+412d 98467c00 isub temp ,null 
+412e 24628000 nrtn zero 
+412f 704ac900 jam 0 ,mem_keyboard_low_volatage_led_flag 
+4130 20600000 rtn 
+
+keyboard_device_poweron_timer:
+4131 6fe0cac2 fetch 1 ,mem_keyboard_device_poweron_timer 
+4132 207a0000 rtn blank 
+4133 1fe0ffff increase -1 ,pdata 
+4134 67e0cac2 store 1 ,mem_keyboard_device_poweron_timer 
+4135 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+4136 c2944139 bbit1 keyboard_enable_030_power_led ,keyboard_device_poweron_030_led 
+4137 203a4166 branch keyboard_device_led_off ,blank 
+4138 2020416c branch keyboard_device_led_on 
+
+keyboard_device_poweron_030_led:
+4139 203a413c branch keyboard_power_led_off ,blank 
+
+keyboard_power_led_on:
+413a 6848c916 fetcht 1 ,mem_keyboard_power_led_gpio 
+413b 20206ef1 branch gpio_out_active 
+
+keyboard_power_led_off:
+413c 6848c916 fetcht 1 ,mem_keyboard_power_led_gpio 
+413d 20206eed branch gpio_out_inactive 
+
+keyboard_mode_led_timer:
+413e 6fe14741 fetch 2 ,mem_device_no_data_timer 
+413f 207a0000 rtn blank 
+4140 6fe0cac5 fetch 1 ,mem_keyboard_mode_led_on_timer 
+4141 207a0000 rtn blank 
+4142 1fe0ffff increase -1 ,pdata 
+4143 67e0cac5 store 1 ,mem_keyboard_mode_led_on_timer 
+4144 c280416c bbit1 0 ,keyboard_device_led_on 
+4145 20204166 branch keyboard_device_led_off 
+
+keyboard_device_pair_led_timer:
+4146 6fe0c678 fetch 1 ,mem_device_flag 
+4147 c000414b beq mode_24g_device ,keyboard_device_24g_pair_led 
+4148 6fe14750 fetch 2 ,mem_device_discovery_timer 
+4149 207a0000 rtn blank 
+414a 2020414d branch keyboard_device_pair_led 
+
+keyboard_device_24g_pair_led:
+414b 6fe145ef fetch 2 ,mem_24g_pair_timeout 
+414c 207a0000 rtn blank 
+
+keyboard_device_pair_led:
+414d 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+414e 2fec0028 isolate0 keyboard_enable_030_power_led ,pdata 
+414f 2040c15f call keyboard_device_clear_power_timer ,true 
+4150 6fe0cacc fetch 1 ,mem_keyboard_pair_led_flag 
+4151 1fe0fe01 increase 1 ,pdata 
+4152 67e0cacc store 1 ,mem_keyboard_pair_led_flag 
+4153 6848cacd fetcht 1 ,mem_keyboard_pair_led_blink_count 
+4154 18408401 increase 1 ,temp 
+4155 98467c00 isub temp ,null 
+4156 2421416c nbranch keyboard_device_led_on ,positive 
+4157 20404166 call keyboard_device_led_off 
+4158 6fe0cacc fetch 1 ,mem_keyboard_pair_led_flag 
+4159 6848cacd fetcht 1 ,mem_keyboard_pair_led_blink_count 
+415a 184f8402 mul32 temp ,2 ,temp 
+415b 98467c00 isub temp ,null 
+415c 24628000 nrtn zero 
+415d 704acc00 jam 0 ,mem_keyboard_pair_led_flag 
+415e 20600000 rtn 
+
+keyboard_device_clear_power_timer:
+415f 704ac200 jam 0 ,mem_keyboard_device_poweron_timer 
+4160 20600000 rtn 
+
+keyboard_device_led_all_off:
+4161 44a34008 bpatch patch08_6 ,mem_patch08 
+4162 2040413c call keyboard_power_led_off 
+4163 20404166 call keyboard_device_led_off 
+4164 2040419d call keyboard_numlock_led_off 
+4165 202041a3 branch keyboard_capslock_led_off 
+
+keyboard_device_led_off:
+4166 6fe0c678 fetch 1 ,mem_device_flag 
+4167 c0004172 beq mode_24g_device ,keyboard_device_24g_led_off 
+4168 c000c174 beq mode_bt_device1 ,keyboard_device_bt1_led_off 
+4169 c0014176 beq mode_bt_device2 ,keyboard_device_bt2_led_off 
+416a c001c178 beq mode_bt_device3 ,keyboard_device_bt3_led_off 
+416b 20600000 rtn 
+
+keyboard_device_led_on:
+416c 6fe0c678 fetch 1 ,mem_device_flag 
+416d c000417a beq mode_24g_device ,keyboard_device_24g_led_on 
+416e c000c17c beq mode_bt_device1 ,keyboard_device_bt1_led_on 
+416f c001417e beq mode_bt_device2 ,keyboard_device_bt2_led_on 
+4170 c001c180 beq mode_bt_device3 ,keyboard_device_bt3_led_on 
+4171 20600000 rtn 
+
+keyboard_device_24g_led_off:
+4172 6848c918 fetcht 1 ,mem_keyboard_24g_led_gpio 
+4173 20206eed branch gpio_out_inactive 
+
+keyboard_device_bt1_led_off:
+4174 6848c919 fetcht 1 ,mem_keyboard_bt1_led_gpio 
+4175 20206eed branch gpio_out_inactive 
+
+keyboard_device_bt2_led_off:
+4176 6848c91a fetcht 1 ,mem_keyboard_bt2_led_gpio 
+4177 20206eed branch gpio_out_inactive 
+
+keyboard_device_bt3_led_off:
+4178 6848c91b fetcht 1 ,mem_keyboard_bt3_led_gpio 
+4179 20206eed branch gpio_out_inactive 
+
+keyboard_device_24g_led_on:
+417a 6848c918 fetcht 1 ,mem_keyboard_24g_led_gpio 
+417b 20206ef1 branch gpio_out_active 
+
+keyboard_device_bt1_led_on:
+417c 6848c919 fetcht 1 ,mem_keyboard_bt1_led_gpio 
+417d 20206ef1 branch gpio_out_active 
+
+keyboard_device_bt2_led_on:
+417e 6848c91a fetcht 1 ,mem_keyboard_bt2_led_gpio 
+417f 20206ef1 branch gpio_out_active 
+
+keyboard_device_bt3_led_on:
+4180 6848c91b fetcht 1 ,mem_keyboard_bt3_led_gpio 
+4181 20206ef1 branch gpio_out_active 
+
+keyboard_low_voltage_led_on:
+4182 6848c917 fetcht 1 ,mem_keyboard_low_voltage_alarm_gpio 
+4183 20206ef1 branch gpio_out_active 
+
+keyboard_low_voltage_led_off:
+4184 6848c917 fetcht 1 ,mem_keyboard_low_voltage_alarm_gpio 
+4185 20206eed branch gpio_out_inactive 
+
+keyboard_num_capslock_led_on_timer:
+4186 6fe0cace fetch 1 ,mem_usb_vdd_status_current 
+4187 c02d4193 beq usb_interface_insert ,keyboard_usb_led_check 
+4188 6fe14741 fetch 2 ,mem_device_no_data_timer 
+4189 207a0000 rtn blank 
+418a 6fe1471e fetch 2 ,mem_device_no_data_timeout 
+418b 68494741 fetcht 2 ,mem_device_no_data_timer 
+418c 98460400 isub temp ,temp 
+418d 6fe14ac3 fetch 2 ,mem_keyboard_num_caps_scoll_led_on_timer 
+418e 98467e00 isub temp ,pdata 
+418f 20214196 branch keyboard_num_cap_scoll_led_check ,positive 
+4190 2040419d call keyboard_numlock_led_off 
+4191 204041a9 call keyboard_scrolllock_led_off 
+4192 202041a3 branch keyboard_capslock_led_off 
+
+keyboard_usb_led_check:
+4193 6fe0c638 fetch 1 ,mem_24g_led_status 
+4194 67e0c70d store 1 ,mem_keyboard_led_status 
+4195 20204196 branch keyboard_num_cap_scoll_led_check 
+
+keyboard_num_cap_scoll_led_check:
+4196 20404199 call keyboard_numlock_led_check_on 
+4197 204041a5 call keyboard_scrolllock_led_check_on 
+4198 2020419f branch keyboard_capslock_led_check_on 
+
+keyboard_numlock_led_check_on:
+4199 6fe0c70d fetch 1 ,mem_keyboard_led_status 
+419a c300419d bbit0 kb_pc_keysel_numlock ,keyboard_numlock_led_off 
+
+keyboard_numlock_led_on:
+419b 6848c913 fetcht 1 ,mem_keyboard_num_led_gpio 
+419c 20206ef1 branch gpio_out_active 
+
+keyboard_numlock_led_off:
+419d 6848c913 fetcht 1 ,mem_keyboard_num_led_gpio 
+419e 20206eed branch gpio_out_inactive 
+
+keyboard_capslock_led_check_on:
+419f 6fe0c70d fetch 1 ,mem_keyboard_led_status 
+41a0 c300c1a3 bbit0 kb_pc_keysel_capslock ,keyboard_capslock_led_off 
+41a1 6848c914 fetcht 1 ,mem_keyboard_caps_led_gpio 
+41a2 20206ef1 branch gpio_out_active 
+
+keyboard_capslock_led_off:
+41a3 6848c914 fetcht 1 ,mem_keyboard_caps_led_gpio 
+41a4 20206eed branch gpio_out_inactive 
+
+keyboard_scrolllock_led_check_on:
+41a5 6fe0c70d fetch 1 ,mem_keyboard_led_status 
+41a6 c30141a9 bbit0 kb_pc_keysel_scrolllock ,keyboard_scrolllock_led_off 
+41a7 6848c915 fetcht 1 ,mem_keyboard_scroll_led_gpio 
+41a8 20206ef1 branch gpio_out_active 
+
+keyboard_scrolllock_led_off:
+41a9 6848c915 fetcht 1 ,mem_keyboard_scroll_led_gpio 
+41aa 20206eed branch gpio_out_inactive 
+
+keyboard_rgb_on_timer:
+41ab 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+41ac c4158000 rtnbit0 keyboard_enable_backlight 
+41ad 6fe14741 fetch 2 ,mem_device_no_data_timer 
+41ae 207a0000 rtn blank 
+41af 6fe1471e fetch 2 ,mem_device_no_data_timeout 
+41b0 68494741 fetcht 2 ,mem_device_no_data_timer 
+41b1 98460400 isub temp ,temp 
+41b2 6fe148c2 fetch 2 ,mem_keyboard_rgb_on_timer 
+41b3 98467e00 isub temp ,pdata 
+41b4 20610000 rtn positive 
+41b5 7046b100 jam 0 ,mem_backlight_on_flag 
+41b6 20204203 branch keyboard_rgb_off 
+
+keyboard_pwm_init:
+41b7 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+41b8 c4158000 rtnbit0 keyboard_enable_backlight 
+41b9 da200000 arg 0 ,rega 
+41ba 204070b9 call pwm_init 
+41bb 6fe348b2 fetch 6 ,mem_rgb_pwm_conf 
+41bc 67e3064e store 6 ,mem_pdatatemp 
+41bd 204070ca call pwm_out_set 
+41be 6fe148b2 fetch 2 ,mem_rgb_pwm_conf 
+41bf 20207103 branch pwm_disable 
+
+keyboard_rgb_pwm_disable:
+41c0 6fe0c91c fetch 1 ,mem_keyboard_led_r_gpio 
+41c1 20407103 call pwm_disable 
+41c2 6fe0c91d fetch 1 ,mem_keyboard_led_g_gpio 
+41c3 20407103 call pwm_disable 
+41c4 6fe0c91e fetch 1 ,mem_keyboard_led_b_gpio 
+41c5 20207103 branch pwm_disable 
+
+keyboard_rgb_pwm_set:
+41c6 6fe348b2 fetch 6 ,mem_rgb_pwm_conf 
+41c7 67e3064e store 6 ,mem_pdatatemp 
+41c8 202070ca branch pwm_out_set 
+
+keyboard_load_rgb:
+41c9 44a3c008 bpatch patch08_7 ,mem_patch08 
+41ca 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+41cb c4158000 rtnbit0 keyboard_enable_backlight 
+41cc 6fe0c6b1 fetch 1 ,mem_backlight_on_flag 
+41cd 204041de call keyboard_rgb_mode_switch_next 
+41ce 6fe0c6b2 fetch 1 ,mem_backlight_on_type 
+41cf 202041ef branch keyboard_rgb_on_type_switch_next 
+
+keyboard_rgb_mode_switch:
+41d0 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+41d1 c4158000 rtnbit0 keyboard_enable_backlight 
+41d2 204044ca call keyboard_keyvalue_clear_temp 
+41d3 6fe0c9ab fetch 1 ,mem_keyboard_press_flag_temp 
+41d4 c4000000 rtnbit0 0 
+41d5 6fe0caa2 fetch 1 ,mem_keyboard_device_info_store_flag 
+41d6 79207e05 set1 keyboard_store_eepromm_flag_rgb_type ,pdata 
+41d7 67e0caa2 store 1 ,mem_keyboard_device_info_store_flag 
+41d8 204044b7 call keyboard_store_eeprom_or_flash 
+41d9 7048ca00 jam 0 ,mem_backlight_breathe_type 
+41da 7048b800 jam 0 ,mem_rgb_pwm_breathe_flag 
+41db 7048b70a jam 10 ,mem_rgb_pwm_conf + 5 
+41dc 6fe0c6b1 fetch 1 ,mem_backlight_on_flag 
+41dd 1fe0fe01 increase 1 ,pdata 
+
+keyboard_rgb_mode_switch_next:
+41de 1fe67c02 sub pdata ,rgb_backlight_status_breathe ,null 
+41df 24417dcc ncall set_pdata_0 ,positive 
+41e0 67e0c6b1 store 1 ,mem_backlight_on_flag 
+41e1 20600000 rtn 
+
+keyboard_rgb_on_type_switch:
+41e2 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+41e3 c4158000 rtnbit0 keyboard_enable_backlight 
+41e4 204044ca call keyboard_keyvalue_clear_temp 
+41e5 6fe0c9ab fetch 1 ,mem_keyboard_press_flag_temp 
+41e6 c4000000 rtnbit0 0 
+41e7 6fe0c6b1 fetch 1 ,mem_backlight_on_flag 
+41e8 c1808000 rtnne rgb_backlight_status_on 
+41e9 6fe0caa2 fetch 1 ,mem_keyboard_device_info_store_flag 
+41ea 79207e05 set1 keyboard_store_eepromm_flag_rgb_type ,pdata 
+41eb 67e0caa2 store 1 ,mem_keyboard_device_info_store_flag 
+41ec 204044b7 call keyboard_store_eeprom_or_flash 
+41ed 6fe0c6b2 fetch 1 ,mem_backlight_on_type 
+41ee 1fe0fe01 increase 1 ,pdata 
+
+keyboard_rgb_on_type_switch_next:
+41ef 1fe67c06 sub pdata ,rgb_backlight_on_tpye_white ,null 
+41f0 24417dcc ncall set_pdata_0 ,positive 
+41f1 67e0c6b2 store 1 ,mem_backlight_on_type 
+41f2 20600000 rtn 
+
+keyboard_rgb_process:
+41f3 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+41f4 c4158000 rtnbit0 keyboard_enable_backlight 
+41f5 684a48c4 fetcht 4 ,mem_ui_check_timer_setup 
+41f6 1c427e00 copy clkn_bt ,pdata 
+41f7 98467e00 isub temp ,pdata 
+41f8 684948c8 fetcht 2 ,mem_customize_timer_setup 
+41f9 9846fc00 idiv temp 
+41fa 20407d64 call wait_div_end 
+41fb 1807fe00 quotient pdata 
+41fc 207a0000 rtn blank 
+41fd 1c420400 copy clkn_bt ,temp 
+41fe 604a48c4 storet 4 ,mem_ui_check_timer_setup 
+41ff 6fe0c6b1 fetch 1 ,mem_backlight_on_flag 
+4200 c0014209 beq rgb_backlight_status_breathe ,keyboard_rbg_breathe_process 
+4201 c000c244 beq rgb_backlight_status_on ,keyboard_rgb_on_process 
+4202 7046b100 jam 0 ,mem_backlight_on_flag 
+
+keyboard_rgb_off:
+4203 44a44009 bpatch patch09_0 ,mem_patch09 
+4204 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+4205 c4158000 rtnbit0 keyboard_enable_backlight 
+4206 204041c0 call keyboard_rgb_pwm_disable 
+4207 7048b900 jam 0 ,mem_rgb_on_color_temp 
+4208 2020424e branch keyboard_rgb_led_control 
+
+keyboard_rbg_breathe_process:
+4209 6fe0c8b8 fetch 1 ,mem_rgb_pwm_breathe_flag 
+420a 203a4211 branch keyboard_rbg_breathe_up ,blank 
+420b 6fe0c8b7 fetch 1 ,mem_rgb_pwm_conf + 5 
+420c 1fe67c05 sub pdata ,5 ,null 
+420d 2021421a branch keyboard_rbg_breathe_color_switch ,positive 
+420e 1fe0ffff increase -1 ,pdata 
+420f 67e0c8b7 store 1 ,mem_rgb_pwm_conf + 5 
+4210 20204221 branch keyboard_rgb_pwm 
+
+keyboard_rbg_breathe_up:
+4211 6fe0c8b7 fetch 1 ,mem_rgb_pwm_conf + 5 
+4212 1fe0fe01 increase 1 ,pdata 
+4213 67e0c8b7 store 1 ,mem_rgb_pwm_conf + 5 
+4214 20404221 call keyboard_rgb_pwm 
+4215 6fe0c8b7 fetch 1 ,mem_rgb_pwm_conf + 5 
+4216 1fe67c5a sub pdata ,90 ,null 
+4217 20610000 rtn positive 
+4218 7048b801 jam 1 ,mem_rgb_pwm_breathe_flag 
+4219 20600000 rtn 
+
+keyboard_rbg_breathe_color_switch:
+421a 7048b800 jam 0 ,mem_rgb_pwm_breathe_flag 
+421b 6fe0c8ca fetch 1 ,mem_backlight_breathe_type 
+421c 1fe0fe01 increase 1 ,pdata 
+421d 1fe67c06 sub pdata ,rgb_backlight_breathe_tpye_white ,null 
+421e 24417dcc ncall set_pdata_0 ,positive 
+421f 67e0c8ca store 1 ,mem_backlight_breathe_type 
+4220 20600000 rtn 
+
+keyboard_rgb_pwm:
+4221 204041b7 call keyboard_pwm_init 
+4222 20404207 call keyboard_rgb_off + 4 
+4223 20204224 branch keyboard_breathe_tpye_select 
+
+keyboard_breathe_tpye_select:
+4224 6fe0c8ca fetch 1 ,mem_backlight_breathe_type 
+4225 c001422c beq rgb_backlight_breathe_tpye_red ,keyboard_breathe_tpye_red 
+4226 c000c231 beq rgb_backlight_breathe_tpye_green ,keyboard_breathe_tpye_green 
+4227 c0004236 beq rgb_backlight_breathe_tpye_blue ,keyboard_breathe_tpye_blue 
+4228 c001c23b beq rgb_backlight_breathe_tpye_cyan ,keyboard_breathe_tpye_cyan 
+4229 c002c23d beq rgb_backlight_breathe_tpye_orange ,keyboard_breathe_tpye_orange 
+422a c002423f beq rgb_backlight_breathe_tpye_purple ,keyboard_breathe_tpye_purple 
+422b c0034241 beq rgb_backlight_breathe_tpye_white ,keyboard_breathe_tpye_white 
+
+keyboard_breathe_tpye_red:
+422c 6fe0c91c fetch 1 ,mem_keyboard_led_r_gpio 
+422d 67e0c8b2 store 1 ,mem_rgb_pwm_conf 
+422e 58000001 setarg 0x01 
+422f 67e0c8b3 store 1 ,mem_rgb_pwm_conf + 1 
+4230 202041c6 branch keyboard_rgb_pwm_set 
+
+keyboard_breathe_tpye_green:
+4231 6fe0c91d fetch 1 ,mem_keyboard_led_g_gpio 
+4232 67e0c8b2 store 1 ,mem_rgb_pwm_conf 
+4233 58000002 setarg 0x02 
+4234 67e0c8b3 store 1 ,mem_rgb_pwm_conf + 1 
+4235 202041c6 branch keyboard_rgb_pwm_set 
+
+keyboard_breathe_tpye_blue:
+4236 6fe0c91e fetch 1 ,mem_keyboard_led_b_gpio 
+4237 67e0c8b2 store 1 ,mem_rgb_pwm_conf 
+4238 58000004 setarg 0x04 
+4239 67e0c8b3 store 1 ,mem_rgb_pwm_conf + 1 
+423a 202041c6 branch keyboard_rgb_pwm_set 
+
+keyboard_breathe_tpye_cyan:
+423b 20404231 call keyboard_breathe_tpye_green 
+423c 20204236 branch keyboard_breathe_tpye_blue 
+
+keyboard_breathe_tpye_orange:
+423d 2040422c call keyboard_breathe_tpye_red 
+423e 20204231 branch keyboard_breathe_tpye_green 
+
+keyboard_breathe_tpye_purple:
+423f 2040422c call keyboard_breathe_tpye_red 
+4240 20204236 branch keyboard_breathe_tpye_blue 
+
+keyboard_breathe_tpye_white:
+4241 2040422c call keyboard_breathe_tpye_red 
+4242 20404231 call keyboard_breathe_tpye_green 
+4243 20204236 branch keyboard_breathe_tpye_blue 
+
+keyboard_rgb_on_process:
+4244 204041c0 call keyboard_rgb_pwm_disable 
+4245 6fe0c6b2 fetch 1 ,mem_backlight_on_type 
+4246 1fe67c06 sub pdata ,rgb_backlight_on_tpye_white ,null 
+4247 24417dcc ncall set_pdata_0 ,positive 
+4248 67e0c6b2 store 1 ,mem_backlight_on_type 
+4249 d8c048ba arg mem_rgb_on_color ,contr 
+424a 98c08c00 iadd contr ,contr 
+424b efe08006 ifetch 1 ,contr 
+424c 67e0c8b9 store 1 ,mem_rgb_on_color_temp 
+424d 2020424e branch keyboard_rgb_led_control 
+
+keyboard_rgb_led_control:
+424e 6fe0c8b9 fetch 1 ,mem_rgb_on_color_temp 
+424f 2feffe02 isolate1 keyboard_rgb_red_status ,pdata 
+4250 2040c25b call keyboard_rgb_red_led_on ,true 
+4251 2440c25d ncall keyboard_rgb_red_led_off ,true 
+4252 6fe0c8b9 fetch 1 ,mem_rgb_on_color_temp 
+4253 2feffe01 isolate1 keyboard_rgb_green_status ,pdata 
+4254 2040c25f call keyboard_rgb_green_led_on ,true 
+4255 2440c261 ncall keyboard_rgb_green_led_off ,true 
+4256 6fe0c8b9 fetch 1 ,mem_rgb_on_color_temp 
+4257 2feffe00 isolate1 keyboard_rgb_blue_status ,pdata 
+4258 2040c263 call keyboard_rgb_blue_led_on ,true 
+4259 2440c265 ncall keyboard_rgb_blue_led_off ,true 
+425a 20600000 rtn 
+
+keyboard_rgb_red_led_on:
+425b 6848c91c fetcht 1 ,mem_keyboard_led_r_gpio 
+425c 20206eed branch gpio_out_inactive 
+
+keyboard_rgb_red_led_off:
+425d 6848c91c fetcht 1 ,mem_keyboard_led_r_gpio 
+425e 20206ef1 branch gpio_out_active 
+
+keyboard_rgb_green_led_on:
+425f 6848c91d fetcht 1 ,mem_keyboard_led_g_gpio 
+4260 20206eed branch gpio_out_inactive 
+
+keyboard_rgb_green_led_off:
+4261 6848c91d fetcht 1 ,mem_keyboard_led_g_gpio 
+4262 20206ef1 branch gpio_out_active 
+
+keyboard_rgb_blue_led_on:
+4263 6848c91e fetcht 1 ,mem_keyboard_led_b_gpio 
+4264 20206eed branch gpio_out_inactive 
+
+keyboard_rgb_blue_led_off:
+4265 6848c91e fetcht 1 ,mem_keyboard_led_b_gpio 
+4266 20206ef1 branch gpio_out_active 
+
+keyboard_key_press_timer:
+4267 6fe0c8a6 fetch 1 ,mem_keyboard_switch_device_flag 
+4268 c280426d bbit1 keyboard_flag_g24_device_button ,keyboard_device_select_g24_press_timer 
+4269 20404278 call keyboard_device_select_g24_nopress_timer 
+426a 6fe0c8a6 fetch 1 ,mem_keyboard_switch_device_flag 
+426b c280c27e bbit1 keyboard_flag_bt_device_button ,keyboard_device_select_bt_press_timer 
+426c 20204289 branch keyboard_device_select_bt_nopress_timer 
+
+keyboard_device_select_g24_press_timer:
+426d 6fe0c8a9 fetch 1 ,mem_keyboard_switch_g24_press_timer 
+426e 1fe67c64 sub pdata ,100 ,null 
+426f 24610000 nrtn positive 
+4270 1fe0fe01 increase 1 ,pdata 
+4271 67e0c8a9 store 1 ,mem_keyboard_switch_g24_press_timer 
+4272 c18c8000 rtnne 25 
+4273 7048a700 jam 0 ,mem_keyboard_switch_g24_enable 
+4274 6fe0c678 fetch 1 ,mem_device_flag 
+4275 c1020000 rtneq mode_usb_device 
+4276 204048e6 call keyboard_stop_bluetooth_mode 
+4277 20204680 branch keyboard_24g_start_pair_mode 
+
+keyboard_device_select_g24_nopress_timer:
+4278 7048a900 jam 0 ,mem_keyboard_switch_g24_press_timer 
+4279 6fe0c8a7 fetch 1 ,mem_keyboard_switch_g24_enable 
+427a 207a0000 rtn blank 
+427b 7048a700 jam 0 ,mem_keyboard_switch_g24_enable 
+427c 20404045 call keyboard_store_device_number 
+427d 20206c99 branch soft_reset_chip 
+
+keyboard_device_select_bt_press_timer:
+427e 6fe0c8aa fetch 1 ,mem_keyboard_switch_bt_press_timer 
+427f 1fe67c64 sub pdata ,100 ,null 
+4280 24610000 nrtn positive 
+4281 1fe0fe01 increase 1 ,pdata 
+4282 67e0c8aa store 1 ,mem_keyboard_switch_bt_press_timer 
+4283 c18c8000 rtnne 25 
+4284 7048a800 jam 0 ,mem_keyboard_switch_bt_enable 
+4285 6fe0c678 fetch 1 ,mem_device_flag 
+4286 c1020000 rtneq mode_usb_device 
+4287 20406824 call hid_device_le_send_empty_packet 
+4288 20204675 branch keyboard_long_button_bt_discovery 
+
+keyboard_device_select_bt_nopress_timer:
+4289 7048aa00 jam 0 ,mem_keyboard_switch_bt_press_timer 
+428a 6fe0c8a8 fetch 1 ,mem_keyboard_switch_bt_enable 
+428b 207a0000 rtn blank 
+428c 7048a800 jam 0 ,mem_keyboard_switch_bt_enable 
+428d 20404045 call keyboard_store_device_number 
+428e 20206c99 branch soft_reset_chip 
+
+keyboard_commbination_key_process:
+428f 6fe0c735 fetch 1 ,mem_commbination_key_statue 
+4290 c1808000 rtnne commbination_key_state_down 
+4291 da604736 arg mem_combination_ui_button_count ,regc 
+4292 da404294 arg keyboard_commbination_key_press_type_check ,regb 
+4293 20203755 branch timer_single_step 
+
+keyboard_commbination_key_press_type_check:
+4294 6fe0ca9b fetch 1 ,mem_keyboard_commbination_press_type 
+4295 c000c680 beq keyboard_commbination_press_type_24g_pair ,keyboard_24g_start_pair_mode 
+4296 c0014675 beq keyboard_commbination_press_type_bt_pair ,keyboard_long_button_bt_discovery 
+4297 c001d3ad beq keyboard_commbination_press_type_bt_fast_conn ,mouse_bluetooth_fast_conn_init 
+4298 20600000 rtn 
+
+keyboard_check_discovery_timeout_timer:
+4299 da604750 arg mem_device_discovery_timer ,regc 
+429a da40429c arg keyboard_check_discovery_timeout ,regb 
+429b 2020375c branch timer_single_step_2b 
+
+keyboard_check_discovery_timeout:
+429c 204048e9 call keyboard_stop_discovery 
+429d 202047af branch keyboard_power_down 
+
+keyboard_store_information_delay_timer:
+429e da604705 arg mem_store_information_delay_timer ,regc 
+429f da403fd7 arg keyboard_store_device_info ,regb 
+42a0 20203755 branch timer_single_step 
+
+keyboard_le_auto_recognize_timer:
+42a1 da60490e arg mem_le_start_auto_reco_timer ,regc 
+42a2 da4048fd arg keyboard_le_send_att_find_by_type_value_request_ancs ,regb 
+42a3 20203755 branch timer_single_step 
+
+keyboard_check_direct_timeout_timer:
+42a4 da604720 arg mem_device_direct_timer ,regc 
+42a5 da4042aa arg keyboard_check_direct_timeout ,regb 
+42a6 20403755 call timer_single_step 
+42a7 6fe0c720 fetch 1 ,mem_device_direct_timer 
+42a8 c000b788 beq 1 ,app_ble_stop_direct_adv 
+42a9 20600000 rtn 
+
+keyboard_check_direct_timeout:
+42aa 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+42ab c28d48c5 bbit1 keyboard_enable_bt_reconnect_timeout_enter_discovery ,keyboard_start_discovery 
+42ac 20204e35 branch mouse_app_enter_hibernate 
+
+keyboard_le_battery_updata_timer:
+42ad 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+42ae c38c8000 rtnbit1 keyboard_enable_le_battery_service_cancel 
+42af da60477f arg mem_le_battery_level_updata_timer ,regc 
+42b0 da40551f arg mouse_le_battery_level_updata ,regb 
+42b1 20203755 branch timer_single_step 
+
+keyboard_le_send_conn_param_update_timer:
+42b2 da60490d arg mem_keyboard_le_send_conn_param_update_timer ,regc 
+42b3 da405408 arg mouse_updata_le_param ,regb 
+42b4 20203755 branch timer_single_step 
+
+keyboard_24g_repeat_send_data:
+42b5 6fe0ca80 fetch 1 ,mem_24g_repeat_send_flag 
+42b6 207a0000 rtn blank 
+42b7 704a8000 jam 0 ,mem_24g_repeat_send_flag 
+42b8 6fe0c9a0 fetch 1 ,mem_same_keyvalue_timerout_flag 
+42b9 247a0000 nrtn blank 
+42ba 6fe145ef fetch 2 ,mem_24g_pair_timeout 
+42bb 247a0000 nrtn blank 
+42bc 7049a901 jam 1 ,mem_keyboard_data_change_flag 
+42bd 204035fd call g24_txdata_prep 
+42be 20204828 branch keyboard_g24_transmit_process 
+
+keyboard_24g_led_status_get_timer:
+42bf da604a82 arg mem_keyboard_led_status_get_timer ,regc 
+42c0 da4042c2 arg keyboard_24g_led_status_clear ,regb 
+42c1 20203755 branch timer_single_step 
+
+keyboard_24g_led_status_clear:
+42c2 704a8100 jam 0 ,mem_keyboard_led_status_get 
+42c3 20600000 rtn 
+
+keyboard_same_key_long_press_timer:
+42c4 da6049a3 arg mem_same_keyvalue_timer ,regc 
+42c5 da4042c7 arg keyboard_long_press_timerout ,regb 
+42c6 2020375c branch timer_single_step_2b 
+
+keyboard_long_press_timerout:
+42c7 7049a001 jam 1 ,mem_same_keyvalue_timerout_flag 
+42c8 202047af branch keyboard_power_down 
+
+keyboard_commbination_delay_release_timer:
+42c9 da604a9f arg mem_keyboard_commbination_control_key_delay_release_timer ,regc 
+42ca da404547 arg keyboard_commbination_key_null_set ,regb 
+42cb 20203755 branch timer_single_step 
+
+keyboard_usb_updata_timer:
+42cc 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+42cd c4120000 rtnbit0 keyboard_enable_usb 
+42ce 6fe0cad0 fetch 1 ,mem_usb_wait_updata_timer 
+42cf 207a0000 rtn blank 
+42d0 1fe0ffff increase -1 ,pdata 
+42d1 67e0cad0 store 1 ,mem_usb_wait_updata_timer 
+42d2 247a0000 nrtn blank 
+42d3 70409401 jam 1 ,mem_lpm_mode 
+42d4 202047af branch keyboard_power_down 
+
+keyboard_check_no_data_timeout_timer:
+42d5 6fe0cace fetch 1 ,mem_usb_vdd_status_current 
+42d6 c12d0000 rtneq usb_interface_insert 
+42d7 da604741 arg mem_device_no_data_timer ,regc 
+42d8 da4042da arg keyboard_check_no_data_timeout ,regb 
+42d9 2020375c branch timer_single_step_2b 
+
+keyboard_check_no_data_timeout:
+42da 6fe0c678 fetch 1 ,mem_device_flag 
+42db c00047fb beq mode_24g_device ,keyboard_24g_hibernate_set 
+42dc 202053c6 branch mouse_disconnect 
+
+keyboard_idle:
+42dd 44a4c009 bpatch patch09_1 ,mem_patch09 
+42de 20404330 call kscan_dispatch 
+42df 204041f3 call keyboard_rgb_process 
+42e0 204049fa call keyboard_usb_isr 
+42e1 204049ff call keyboard_usb_mode 
+42e2 202042e3 branch keyboard_check_select_device_by_switch 
+
+keyboard_check_select_device_by_switch:
+42e3 44a54009 bpatch patch09_2 ,mem_patch09 
+42e4 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+42e5 c41c0000 rtnbit0 keyboard_enable_select_device_by_switch_gpio 
+42e6 c29dc2f0 bbit1 keyboard_enable_select_device_by_switch_gpio_g24_connect_vdd ,keyboard_check_select_device_by_switch_vdd_check 
+42e7 c29e42f0 bbit1 keyboard_enable_select_device_by_switch_gpio_bt_connect_vdd ,keyboard_check_select_device_by_switch_vdd_check 
+42e8 6848c665 fetcht 1 ,mem_device_switch_gpio 
+42e9 20404f0a call device_gpio_config_input_pu 
+42ea 6848c665 fetcht 1 ,mem_device_switch_gpio 
+42eb 20406ee0 call gpio_get_bit 
+42ec 2020c2fd branch keyboard_check_select_device_by_switch_gnd ,true 
+42ed 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+42ee c29cc302 bbit1 keyboard_enable_select_device_by_switch_gpio_g24_connect_gnd ,keyboard_select_btdevice 
+42ef 20204308 branch keyboard_check_select_24g_device 
+
+keyboard_check_select_device_by_switch_vdd_check:
+42f0 6848c665 fetcht 1 ,mem_device_switch_gpio 
+42f1 20404f06 call device_gpio_config_input_pd 
+42f2 6848c665 fetcht 1 ,mem_device_switch_gpio 
+42f3 20406ee0 call gpio_get_bit 
+42f4 2420c2f8 nbranch keyboard_check_select_device_by_switch_vdd ,true 
+42f5 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+42f6 c29dc302 bbit1 keyboard_enable_select_device_by_switch_gpio_g24_connect_vdd ,keyboard_select_btdevice 
+42f7 20204308 branch keyboard_check_select_24g_device 
+
+keyboard_check_select_device_by_switch_vdd:
+42f8 6848c665 fetcht 1 ,mem_device_switch_gpio 
+42f9 20404f0a call device_gpio_config_input_pu 
+42fa 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+42fb c29dc308 bbit1 keyboard_enable_select_device_by_switch_gpio_g24_connect_vdd ,keyboard_check_select_24g_device 
+42fc 20204302 branch keyboard_select_btdevice 
+
+keyboard_check_select_device_by_switch_gnd:
+42fd 6848c665 fetcht 1 ,mem_device_switch_gpio 
+42fe 20404f06 call device_gpio_config_input_pd 
+42ff 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+4300 c29cc308 bbit1 keyboard_enable_select_device_by_switch_gpio_g24_connect_gnd ,keyboard_check_select_24g_device 
+4301 20204302 branch keyboard_select_btdevice 
+
+keyboard_select_btdevice:
+4302 6fe0c678 fetch 1 ,mem_device_flag 
+4303 c1008000 rtneq mode_bt_device1 
+4304 70467801 jam mode_bt_device1 ,mem_device_flag 
+4305 6fe0c896 fetch 1 ,mem_keyboard_switch_count_temp 
+4306 243a6c99 nbranch soft_reset_chip ,blank 
+4307 202048e6 branch keyboard_stop_bluetooth_mode 
+
+keyboard_check_select_24g_device:
+4308 6fe0c678 fetch 1 ,mem_device_flag 
+4309 c1000000 rtneq mode_24g_device 
+430a 70467800 jam mode_24g_device ,mem_device_flag 
+430b 6fe0c896 fetch 1 ,mem_keyboard_switch_count_temp 
+430c 243a6c99 nbranch soft_reset_chip ,blank 
+430d 20204804 branch keyboard_24g_stop 
+
+keyboard_start_work:
+430e 44a5c009 bpatch patch09_3 ,mem_patch09 
+430f 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+4310 c305c31a bbit0 keyboard_enable_adc ,keyboard_start_work_next 
+4311 204040c4 call keyboard_adc_read_start 
+4312 6fe14646 fetch 2 ,mem_device_vdd_empty_vol 
+4313 1fe6fc02 div pdata ,2 
+4314 20407d61 call get_div_result 
+4315 6849464a fetcht 2 ,mem_device_vdd_now_vol 
+4316 98467c00 isub temp ,null 
+4317 2021430e branch keyboard_start_work ,positive 
+4318 6fe0c422 fetch 1 ,mem_adc_power_flag 
+4319 c280c7af bbit1 1 ,keyboard_power_down 
+
+keyboard_start_work_next:
+431a 6fe0ca7f fetch 1 ,mem_keyboard_pairing_type 
+431b 205a4670 call keyboard_enable_bt_button_pairing ,blank 
+431c 6fe0ca7e fetch 1 ,mem_keyboard_bt_button_flag 
+431d 247a0000 nrtn blank 
+431e 6fe0c678 fetch 1 ,mem_device_flag 
+431f c000432d beq mode_24g_device ,keyboard_24g_start_mode 
+4320 204053c1 call mouse_bluetooth_fast_conn_disable 
+4321 c000c324 beq mode_bt_device1 ,keyboard_start_ble1_reconnect 
+4322 c0014329 beq mode_bt_device2 ,keyboard_start_ble2_reconnect 
+4323 c001c32b beq mode_bt_device3 ,keyboard_start_ble3_reconnect 
+
+keyboard_start_ble1_reconnect:
+4324 6fe3467a fetch 6 ,mem_device1_addr 
+
+keyboard_start_ble_reconnect:
+4325 684b46f8 fetcht 6 ,mem_device_compare_addr 
+4326 98467c00 isub temp ,null 
+4327 2022d3ad branch mouse_bluetooth_fast_conn_init ,zero 
+4328 20204e09 branch mouse_start_reconnect_device 
+
+keyboard_start_ble2_reconnect:
+4329 6fe34687 fetch 6 ,mem_device2_addr 
+432a 20204325 branch keyboard_start_ble_reconnect 
+
+keyboard_start_ble3_reconnect:
+432b 6fe34694 fetch 6 ,mem_device3_addr 
+432c 20204325 branch keyboard_start_ble_reconnect 
+
+keyboard_24g_start_mode:
+432d 20403e9a call keyboard_wakeup_from_power_check 
+432e 20345988 branch mouse_24g_reconn_dongle_start ,user 
+432f 2020594d branch mouse_24g_reconn_general_dongle 
+
+kscan_dispatch:
+4330 44a64009 bpatch patch09_4 ,mem_patch09 
+4331 20404334 call keyboard_keyscan 
+4332 204043b5 call keyboard_key_process 
+4333 202045b4 branch keyboard_special_key_check 
+
+keyboard_keyscan:
+4334 20403ef9 call keyboard_gpio_init 
+4335 204043af call keyboard_stb_state_low 
+4336 58000000 setarg 0 
+4337 67e1499e store 2 ,mem_keyscan_exmcu_wait_wake_count 
+4338 d8c0494e arg mem_keyscan_value_current ,contr 
+4339 d8a04963 arg mem_keyscan_value_check ,contw 
+433a df200014 arg 20 ,loopcnt 
+433b 20407cdc call memcpy 
+433c 5800494e setarg mem_keyscan_value_current 
+433d 67e14998 store 2 ,mem_keyscan_value_ptr 
+433e 5800498d setarg mem_keyscan_exmcu_value 
+433f 67e1499a store 2 ,mem_keyscan_exmcu_value_ptr 
+4340 204043ad call keyboard_stb_state_high 
+4341 204043ab call keyboard_clk_input 
+
+keyboard_keyscan_exmcu_start_check:
+4342 6fe1499e fetch 2 ,mem_keyscan_exmcu_wait_wake_count 
+4343 1fe0fe01 increase 1 ,pdata 
+4344 67e1499e store 2 ,mem_keyscan_exmcu_wait_wake_count 
+4345 c284c334 bbit1 9 ,keyboard_keyscan 
+4346 6848c911 fetcht 1 ,mem_mcu_clk_gpio 
+4347 20406ee0 call gpio_get_bit 
+4348 2420c342 nbranch keyboard_keyscan_exmcu_start_check ,true 
+4349 204043af call keyboard_stb_state_low 
+
+keyboard_keyscan_wait_wake_next:
+434a 6848c911 fetcht 1 ,mem_mcu_clk_gpio 
+434b 20406ee0 call gpio_get_bit 
+434c 2020c34a branch keyboard_keyscan_wait_wake_next ,true 
+434d 20404372 call keyboard_keyscan_get_exmcu_value 
+434e 20404386 call keyboard_keyscan_get_mcu_value 
+434f 204043ab call keyboard_clk_input 
+4350 204043ad call keyboard_stb_state_high 
+
+keyboard_keyscan_copy_value:
+4351 6fe1494c fetch 2 ,mem_kb_excol_ptr 
+4352 1fe22400 copy pdata ,regb 
+4353 70499d00 jam 0 ,mem_keyscan_col_loop_count 
+
+keyboard_compare_col_excol_gpio_loop:
+4354 e8408012 ifetcht 1 ,regb 
+4355 6fe1494a fetch 2 ,mem_kb_col_ptr 
+4356 1fe22200 copy pdata ,rega 
+4357 1a222600 copy rega ,regc 
+4358 df200014 arg 20 ,loopcnt 
+
+keyboard_compare_col_gpio_loop:
+4359 efe08011 ifetch 1 ,rega 
+435a 98467c00 isub temp ,null 
+435b 2022c366 branch keyboard_copy_value_exmcu_to_mcu ,zero 
+435c 1a20a201 increase 1 ,rega 
+435d c2004359 loop keyboard_compare_col_gpio_loop 
+
+keyboard_compare_col_excol_gpio_loop_next:
+435e 1a40a401 increase 1 ,regb 
+435f 6fe0c99d fetch 1 ,mem_keyscan_col_loop_count 
+4360 1fe0fe01 increase 1 ,pdata 
+4361 67e0c99d store 1 ,mem_keyscan_col_loop_count 
+4362 1fe67c0b sub pdata ,11 ,null 
+4363 20214354 branch keyboard_compare_col_excol_gpio_loop ,positive 
+4364 20403f1b call keyboard_gpio_pu_idle 
+4365 20203f0f branch keyboard_key_row_init 
+
+keyboard_copy_value_exmcu_to_mcu:
+4366 6fe14998 fetch 2 ,mem_keyscan_value_ptr 
+4367 1fe20a00 copy pdata ,contw 
+4368 1a227e00 copy rega ,pdata 
+4369 9a667e00 isub regc ,pdata 
+436a 98a08a00 iadd contw ,contw 
+436b 6fe1499a fetch 2 ,mem_keyscan_exmcu_value_ptr 
+436c 1fe22600 copy pdata ,regc 
+436d 6fe0c99d fetch 1 ,mem_keyscan_col_loop_count 
+436e 9a60a600 iadd regc ,regc 
+436f efe08013 ifetch 1 ,regc 
+4370 e7e08005 istore 1 ,contw 
+4371 2020435e branch keyboard_compare_col_excol_gpio_loop_next 
+
+keyboard_keyscan_get_exmcu_value:
+4372 70499d00 jam 0 ,mem_keyscan_col_loop_count 
+
+keyboard_keyscan_exmcu_start_loop:
+4373 204043a9 call keyboard_clk_state_low 
+4374 2040437a call keyboard_keyscan_exmcu_get_col_value 
+4375 204043a7 call keyboard_clk_state_high 
+4376 2040437a call keyboard_keyscan_exmcu_get_col_value 
+4377 1fe67c0b sub pdata ,11 ,null 
+4378 20214373 branch keyboard_keyscan_exmcu_start_loop ,positive 
+4379 202043a9 branch keyboard_clk_state_low 
+
+keyboard_keyscan_exmcu_get_col_value:
+437a 70499c00 jam 0 ,mem_keyscan_value_temp 
+437b 20404399 call keyboard_keyscan_get_col_value 
+437c 6fe1499a fetch 2 ,mem_keyscan_exmcu_value_ptr 
+
+keyboard_keyscan_value_store:
+437d 1fe20a00 copy pdata ,contw 
+437e 6fe0c99d fetch 1 ,mem_keyscan_col_loop_count 
+437f 98a08a00 iadd contw ,contw 
+4380 6fe0c99c fetch 1 ,mem_keyscan_value_temp 
+4381 e7e08005 istore 1 ,contw 
+4382 6fe0c99d fetch 1 ,mem_keyscan_col_loop_count 
+4383 1fe0fe01 increase 1 ,pdata 
+4384 67e0c99d store 1 ,mem_keyscan_col_loop_count 
+4385 20600000 rtn 
+
+keyboard_keyscan_get_mcu_value:
+4386 6fe1494a fetch 2 ,mem_kb_col_ptr 
+4387 1fe22400 copy pdata ,regb 
+4388 70499d00 jam 0 ,mem_keyscan_col_loop_count 
+
+keyboard_keyscan_mcu_start:
+4389 70499c00 jam 0 ,mem_keyscan_value_temp 
+438a e8408012 ifetcht 1 ,regb 
+438b 284ffe07 isolate1 7 ,temp 
+438c 2020c393 branch keyboard_keyscan_mcu_start_loop ,true 
+438d 20406ef1 call gpio_out_active 
+438e 20404399 call keyboard_keyscan_get_col_value 
+438f e8408012 ifetcht 1 ,regb 
+4390 20406eed call gpio_out_inactive 
+4391 e8408012 ifetcht 1 ,regb 
+4392 20404f0a call device_gpio_config_input_pu 
+
+keyboard_keyscan_mcu_start_loop:
+4393 1a40a401 increase 1 ,regb 
+4394 6fe14998 fetch 2 ,mem_keyscan_value_ptr 
+4395 2040437d call keyboard_keyscan_value_store 
+4396 1fe67c13 sub pdata ,19 ,null 
+4397 20214389 branch keyboard_keyscan_mcu_start ,positive 
+4398 20600000 rtn 
+
+keyboard_keyscan_get_col_value:
+4399 44a6c009 bpatch patch09_5 ,mem_patch09 
+439a 20000078 nop 120 
+439b 6fe14948 fetch 2 ,mem_kb_row_ptr 
+439c 1fe22600 copy pdata ,regc 
+439d df200008 arg 8 ,loopcnt 
+
+keyboard_keyscan_get_col_value_loop:
+439e e8408013 ifetcht 1 ,regc 
+439f 20406ee0 call gpio_get_bit 
+43a0 6fe0c99c fetch 1 ,mem_keyscan_value_temp 
+43a1 1fe37e00 rshift pdata ,pdata 
+43a2 7920fe07 setflag true ,7 ,pdata 
+43a3 67e0c99c store 1 ,mem_keyscan_value_temp 
+43a4 1a60a601 increase 1 ,regc 
+43a5 c200439e loop keyboard_keyscan_get_col_value_loop 
+43a6 20600000 rtn 
+
+keyboard_clk_state_high:
+43a7 6848c911 fetcht 1 ,mem_mcu_clk_gpio 
+43a8 20206eed branch gpio_out_inactive 
+
+keyboard_clk_state_low:
+43a9 6848c911 fetcht 1 ,mem_mcu_clk_gpio 
+43aa 20206ef1 branch gpio_out_active 
+
+keyboard_clk_input:
+43ab 6848c911 fetcht 1 ,mem_mcu_clk_gpio 
+43ac 20206ed7 branch gpio_config_input 
+
+keyboard_stb_state_high:
+43ad 6848c910 fetcht 1 ,mem_mcu_stb_gpio 
+43ae 20206eed branch gpio_out_inactive 
+
+keyboard_stb_state_low:
+43af 6848c910 fetcht 1 ,mem_mcu_stb_gpio 
+43b0 20206ef1 branch gpio_out_active 
+
+keyboard_press_change_or_no_key:
+43b1 7049a000 jam 0 ,mem_same_keyvalue_timerout_flag 
+43b2 6fe149a1 fetch 2 ,mem_same_keyvalue_timer_init 
+43b3 67e149a3 store 2 ,mem_same_keyvalue_timer 
+43b4 20600000 rtn 
+
+keyboard_key_process:
+43b5 da20494e arg mem_keyscan_value_current ,rega 
+43b6 da404963 arg mem_keyscan_value_check ,regb 
+43b7 df200014 arg 20 ,loopcnt 
+43b8 20407d66 call string_compare 
+43b9 2422c3b1 nbranch keyboard_press_change_or_no_key ,zero 
+43ba 204043f1 call keyboard_keyscan_value_current_zero_check 
+43bb 205a43b1 call keyboard_press_change_or_no_key ,blank 
+43bc 204043fd call keyboard_ghost_key_check 
+43bd 6fe0c9a8 fetch 1 ,mem_keyboard_ghost_flag 
+43be 247a0000 nrtn blank 
+43bf 6fe0ca9c fetch 1 ,mem_keyboard_commbination_key_step 
+43c0 c1008000 rtneq cammbination_key_press 
+43c1 c1010000 rtneq cammbination_key_hold 
+43c2 c1020000 rtneq cammbination_key_wait_release 
+43c3 70499d00 jam 0 ,mem_keyscan_col_loop_count 
+43c4 da20494e arg mem_keyscan_value_current ,rega 
+43c5 da404978 arg mem_keyscan_value_old ,regb 
+
+keyboard_keyvalue_process:
+43c6 e8408011 ifetcht 1 ,rega 
+43c7 efe08012 ifetch 1 ,regb 
+43c8 9842fe00 ixor temp ,pdata 
+43c9 203a43e9 branch keyboard_keyvalue_process_loop ,blank 
+43ca 67e0c99c store 1 ,mem_keyscan_value_temp 
+43cb 6048c9ab storet 1 ,mem_keyboard_press_flag_temp 
+43cc e0408012 istoret 1 ,regb 
+43cd 7049a901 jam 1 ,mem_keyboard_data_change_flag 
+43ce 7049ac00 jam 0 ,mem_keyboard_keyvalue_bit_loop_count 
+
+keyboard_keyvalue_change:
+43cf 6fe0c99c fetch 1 ,mem_keyscan_value_temp 
+43d0 c30043de bbit0 0 ,keyboard_keyvalue_change_loop 
+43d1 6fe0c99d fetch 1 ,mem_keyscan_col_loop_count 
+43d2 1feffe08 mul32 pdata ,8 ,pdata 
+43d3 6848c9ac fetcht 1 ,mem_keyboard_keyvalue_bit_loop_count 
+43d4 9840fe00 iadd temp ,pdata 
+43d5 d8c049c7 arg mem_keyboard_keyvalue_map ,contr 
+43d6 98c08c00 iadd contr ,contr 
+43d7 efe08006 ifetch 1 ,contr 
+43d8 67e0c9aa store 1 ,mem_keyboard_keyvalue_temp 
+43d9 44a74009 bpatch patch09_6 ,mem_patch09 
+43da 2040442e call keyboard_keyvalue_normal_replace 
+43db 20404435 call keyboard_keyvalue_fn_replace 
+43dc 204044dc call keyboard_keyvalue_commbination_replace 
+43dd 20404564 call keyboard_keyvalue_in_out 
+
+keyboard_keyvalue_change_loop:
+43de 6fe0c99c fetch 1 ,mem_keyscan_value_temp 
+43df 1fe37e00 rshift pdata ,pdata 
+43e0 67e0c99c store 1 ,mem_keyscan_value_temp 
+43e1 6fe0c9ab fetch 1 ,mem_keyboard_press_flag_temp 
+43e2 1fe37e00 rshift pdata ,pdata 
+43e3 67e0c9ab store 1 ,mem_keyboard_press_flag_temp 
+43e4 6fe0c9ac fetch 1 ,mem_keyboard_keyvalue_bit_loop_count 
+43e5 1fe0fe01 increase 1 ,pdata 
+43e6 67e0c9ac store 1 ,mem_keyboard_keyvalue_bit_loop_count 
+43e7 1fe67c07 sub pdata ,7 ,null 
+43e8 202143cf branch keyboard_keyvalue_change ,positive 
+
+keyboard_keyvalue_process_loop:
+43e9 1a20a201 increase 1 ,rega 
+43ea 1a40a401 increase 1 ,regb 
+43eb 6fe0c99d fetch 1 ,mem_keyscan_col_loop_count 
+43ec 1fe0fe01 increase 1 ,pdata 
+43ed 67e0c99d store 1 ,mem_keyscan_col_loop_count 
+43ee 1fe67c13 sub pdata ,19 ,null 
+43ef 202143c6 branch keyboard_keyvalue_process ,positive 
+43f0 20600000 rtn 
+
+keyboard_keyscan_value_current_zero_check:
+43f1 6fe4494e fetch 8 ,mem_keyscan_value_current 
+43f2 243a41c9 nbranch keyboard_load_rgb ,blank 
+43f3 6fe44956 fetch 8 ,mem_keyscan_value_current + 8 
+43f4 243a41c9 nbranch keyboard_load_rgb ,blank 
+43f5 6fe2495e fetch 4 ,mem_keyscan_value_current + 16 
+43f6 243a41c9 nbranch keyboard_load_rgb ,blank 
+43f7 6fe0ca9f fetch 1 ,mem_keyboard_commbination_control_key_delay_release_timer 
+43f8 247a0000 nrtn blank 
+43f9 6fe0ca9c fetch 1 ,mem_keyboard_commbination_key_step 
+43fa c1030000 rtneq cammbination_key_null 
+43fb 704a9c00 jam cammbination_key_free ,mem_keyboard_commbination_key_step 
+43fc 20600000 rtn 
+
+keyboard_ghost_key_check:
+43fd 44a7c009 bpatch patch09_7 ,mem_patch09 
+43fe 7049a800 jam 0 ,mem_keyboard_ghost_flag 
+43ff 7049a600 jam 0 ,mem_keyboard_all_press_key_count 
+4400 da20494e arg mem_keyscan_value_current ,rega 
+4401 df200014 arg 20 ,loopcnt 
+
+keyboard_ghost_key_check_loop:
+4402 7049a500 jam 0 ,mem_keyboard_current_col_press_key_count 
+4403 efe08011 ifetch 1 ,rega 
+4404 203a4429 branch keyboard_ghost_key_check_next_loop ,blank 
+
+keyboard_current_col_press_key_count_check:
+4405 6848c9a5 fetcht 1 ,mem_keyboard_current_col_press_key_count 
+4406 18408401 increase 1 ,temp 
+4407 6048c9a5 storet 1 ,mem_keyboard_current_col_press_key_count 
+4408 1fe20400 copy pdata ,temp 
+4409 1fe0ffff increase -1 ,pdata 
+440a 98417e00 iand temp ,pdata 
+440b 2422c405 nbranch keyboard_current_col_press_key_count_check ,zero 
+440c 6fe0c9a5 fetch 1 ,mem_keyboard_current_col_press_key_count 
+440d 6848c9a6 fetcht 1 ,mem_keyboard_all_press_key_count 
+440e 98408400 iadd temp ,temp 
+440f 6048c9a6 storet 1 ,mem_keyboard_all_press_key_count 
+4410 1fe67c01 sub pdata ,1 ,null 
+4411 20214429 branch keyboard_ghost_key_check_next_loop ,positive 
+4412 18467c02 sub temp ,2 ,null 
+4413 20214429 branch keyboard_ghost_key_check_next_loop ,positive 
+4414 70499d00 jam 0 ,mem_keyscan_col_loop_count 
+4415 7049a700 jam 0 ,mem_keyboard_same_row_press_key_count 
+4416 e8408011 ifetcht 1 ,rega 
+4417 da40494e arg mem_keyscan_value_current ,regb 
+
+keyboard_same_row_key_check:
+4418 6fe0c99d fetch 1 ,mem_keyscan_col_loop_count 
+4419 1fe0fe01 increase 1 ,pdata 
+441a 67e0c99d store 1 ,mem_keyscan_col_loop_count 
+441b 1fe67c13 sub pdata ,19 ,null 
+441c 24214429 nbranch keyboard_ghost_key_check_next_loop ,positive 
+441d efe08012 ifetch 1 ,regb 
+441e 98417c00 iand temp ,null 
+441f 2022c42c branch keyboard_same_row_key_check_loop ,zero 
+4420 6fe0c9a7 fetch 1 ,mem_keyboard_same_row_press_key_count 
+4421 1fe0fe01 increase 1 ,pdata 
+4422 67e0c9a7 store 1 ,mem_keyboard_same_row_press_key_count 
+4423 1fe67c01 sub pdata ,1 ,null 
+4424 2021442c branch keyboard_same_row_key_check_loop ,positive 
+4425 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+4426 c3908000 rtnbit1 keyboard_enable_full_n_key_rollover 
+4427 7049a801 jam 1 ,mem_keyboard_ghost_flag 
+4428 20600000 rtn 
+
+keyboard_ghost_key_check_next_loop:
+4429 1a20a201 increase 1 ,rega 
+442a c2004402 loop keyboard_ghost_key_check_loop 
+442b 20600000 rtn 
+
+keyboard_same_row_key_check_loop:
+442c 1a40a401 increase 1 ,regb 
+442d 20204418 branch keyboard_same_row_key_check 
+
+keyboard_keyvalue_normal_replace:
+442e 6fe0c9aa fetch 1 ,mem_keyboard_keyvalue_temp 
+442f c07341e2 beq hid_key_right_alt ,keyboard_rgb_on_type_switch 
+4430 c073c1d0 beq hid_key_right_gui ,keyboard_rgb_mode_switch 
+4431 6fe0caa1 fetch 1 ,mem_kb_computer_system 
+4432 c1000000 rtneq system_os_windows 
+4433 c1008000 rtneq system_os_android 
+4434 20600000 rtn 
+
+keyboard_keyvalue_fn_replace:
+4435 6fe0c9ab fetch 1 ,mem_keyboard_press_flag_temp 
+4436 2feffe00 isolate1 0 ,pdata 
+4437 2040c4f0 call keyboard_commbination_delay_release_clear ,true 
+4438 6fe0ca7a fetch 1 ,mem_keyboard_fn_flag 
+4439 245a445b ncall keyboard_keyvalue_fn_replace_press ,blank 
+443a 6fe0c74f fetch 1 ,mem_device_fast_conn_flag 
+443b c17f8000 rtneq 0xff 
+443c 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+443d c31a4440 bbit0 keyboard_enable_fn_lock ,keyboard_fn_lock_check 
+443e 6fe0ca93 fetch 1 ,mem_keyboard_fn_lock_flag 
+443f 20204441 branch keyboard_fn_lock_check + 1 
+
+keyboard_fn_lock_check:
+4440 6fe0ca84 fetch 1 ,mem_keyboard_fn_first 
+4441 6848ca7a fetcht 1 ,mem_keyboard_fn_flag 
+4442 9842fe00 ixor temp ,pdata 
+4443 20628000 rtn zero 
+4444 44a8400a bpatch patch0a_0 ,mem_patch0a 
+4445 6fe0c9aa fetch 1 ,mem_keyboard_keyvalue_temp 
+4446 c014c451 beq hid_key_esc ,keyboard_keyvalue_fn_esc 
+4447 c0264459 beq hid_key_delete ,keyboard_keyvalue_fn_delete 
+4448 1fe67c45 sub pdata ,hid_key_f12 ,null 
+4449 24610000 nrtn positive 
+444a d840003a arg hid_key_f1 ,temp 
+444b 98467e00 isub temp ,pdata 
+444c 24610000 nrtn positive 
+444d d8c04a86 arg mem_keyboard_fn_f1 ,contr 
+444e 98c08c00 iadd contr ,contr 
+444f efe08006 ifetch 1 ,contr 
+4450 202044aa branch keyboard_keyvalue_store_temp 
+
+keyboard_keyvalue_fn_esc:
+4451 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+4452 c31a4457 bbit0 keyboard_enable_fn_lock ,keyboard_keyvalue_fn_esc_next 
+4453 6fe0ca85 fetch 1 ,mem_keyboard_fn_esc 
+4454 6848ca94 fetcht 1 ,mem_keyboard_fn_lock_keyvalue 
+4455 98467c00 isub temp ,null 
+4456 20628000 rtn zero 
+
+keyboard_keyvalue_fn_esc_next:
+4457 6fe0ca85 fetch 1 ,mem_keyboard_fn_esc 
+4458 202044aa branch keyboard_keyvalue_store_temp 
+
+keyboard_keyvalue_fn_delete:
+4459 6fe0ca92 fetch 1 ,mem_keyboard_fn_del 
+445a 202044aa branch keyboard_keyvalue_store_temp 
+
+keyboard_keyvalue_fn_replace_press:
+445b 44a8c00a bpatch patch0a_1 ,mem_patch0a 
+445c 20404468 call keyboard_keyvalue_fn_lock_replace 
+445d 6fe0c9aa fetch 1 ,mem_keyboard_keyvalue_temp 
+445e c029448d beq hid_key_up_arrow ,keyboard_keyvalue_fn_up_arrow 
+445f c028c491 beq hid_key_down_arrow ,keyboard_keyvalue_fn_down_arrow 
+4460 c0284495 beq hid_key_left_arrow ,keyboard_keyvalue_fn_left_arrow 
+4461 c027c499 beq hid_key_right_arrow ,keyboard_keyvalue_fn_right_arrow 
+4462 c070449d beq hid_key_left_ctrl ,keyboard_keyvalue_fn_left_ctrl 
+4463 c01644a7 beq hid_key_space ,keyboard_keyvalue_fn_space 
+4464 c00a44ac beq hid_key_q ,keyboard_keyvalue_os_android 
+4465 c00d44bc beq hid_key_w ,keyboard_keyvalue_os_windows 
+4466 c00444c3 beq hid_key_e ,keyboard_keyvalue_os_ios 
+4467 20600000 rtn 
+
+keyboard_keyvalue_fn_lock_replace:
+4468 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+4469 c41a0000 rtnbit0 keyboard_enable_fn_lock 
+446a 6fe0c9aa fetch 1 ,mem_keyboard_keyvalue_temp 
+446b 6848ca94 fetcht 1 ,mem_keyboard_fn_lock_keyvalue 
+446c 98467c00 isub temp ,null 
+446d 24628000 nrtn zero 
+446e 204044ca call keyboard_keyvalue_clear_temp 
+446f 6fe0c9ab fetch 1 ,mem_keyboard_press_flag_temp 
+4470 c4000000 rtnbit0 0 
+4471 6fe0ca93 fetch 1 ,mem_keyboard_fn_lock_flag 
+4472 1fe0fe01 increase 1 ,pdata 
+4473 1fe17e01 and_into 0x01 ,pdata 
+4474 67e0ca93 store 1 ,mem_keyboard_fn_lock_flag 
+4475 6fe0caa2 fetch 1 ,mem_keyboard_device_info_store_flag 
+4476 79207e03 set1 keyboard_store_eepromm_flag_fn_lock ,pdata 
+4477 67e0caa2 store 1 ,mem_keyboard_device_info_store_flag 
+4478 6fe0c678 fetch 1 ,mem_device_flag 
+4479 c000447e beq mode_24g_device ,keyboard_keyvalue_fn_lock_24g 
+447a c000c481 beq mode_bt_device1 ,keyboard_keyvalue_fn_lock_bt1 
+447b c0014484 beq mode_bt_device2 ,keyboard_keyvalue_fn_lock_bt2 
+447c c001c487 beq mode_bt_device3 ,keyboard_keyvalue_fn_lock_bt3 
+447d c002448a beq mode_usb_device ,keyboard_keyvalue_fn_lock_usb 
+
+keyboard_keyvalue_fn_lock_24g:
+447e 6fe0ca93 fetch 1 ,mem_keyboard_fn_lock_flag 
+447f 67e0c6a9 store 1 ,mem_keyboard_24g_fn_lock 
+4480 202044b7 branch keyboard_store_eeprom_or_flash 
+
+keyboard_keyvalue_fn_lock_bt1:
+4481 6fe0ca93 fetch 1 ,mem_keyboard_fn_lock_flag 
+4482 67e0c6aa store 1 ,mem_keyboard_bt1_fn_lock 
+4483 202044b7 branch keyboard_store_eeprom_or_flash 
+
+keyboard_keyvalue_fn_lock_bt2:
+4484 6fe0ca93 fetch 1 ,mem_keyboard_fn_lock_flag 
+4485 67e0c6ab store 1 ,mem_keyboard_bt2_fn_lock 
+4486 202044b7 branch keyboard_store_eeprom_or_flash 
+
+keyboard_keyvalue_fn_lock_bt3:
+4487 6fe0ca93 fetch 1 ,mem_keyboard_fn_lock_flag 
+4488 67e0c6ac store 1 ,mem_keyboard_bt3_fn_lock 
+4489 202044b7 branch keyboard_store_eeprom_or_flash 
+
+keyboard_keyvalue_fn_lock_usb:
+448a 6fe0ca93 fetch 1 ,mem_keyboard_fn_lock_flag 
+448b 67e0c6ad store 1 ,mem_keyboard_usb_fn_lock 
+448c 202044b7 branch keyboard_store_eeprom_or_flash 
+
+keyboard_keyvalue_fn_up_arrow:
+448d 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+448e c4180000 rtnbit0 keyboard_enable_fn_arrow 
+448f 5800004b setarg hid_key_page_up 
+4490 202044aa branch keyboard_keyvalue_store_temp 
+
+keyboard_keyvalue_fn_down_arrow:
+4491 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+4492 c4180000 rtnbit0 keyboard_enable_fn_arrow 
+4493 5800004e setarg hid_key_page_down 
+4494 202044aa branch keyboard_keyvalue_store_temp 
+
+keyboard_keyvalue_fn_left_arrow:
+4495 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+4496 c4180000 rtnbit0 keyboard_enable_fn_arrow 
+4497 5800004a setarg hid_key_home 
+4498 202044aa branch keyboard_keyvalue_store_temp 
+
+keyboard_keyvalue_fn_right_arrow:
+4499 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+449a c4180000 rtnbit0 keyboard_enable_fn_arrow 
+449b 5800004d setarg hid_key_end 
+449c 202044aa branch keyboard_keyvalue_store_temp 
+
+keyboard_keyvalue_fn_left_ctrl:
+449d 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+449e c4188000 rtnbit0 keyboard_enable_fn_left_ctrl_osk 
+449f 6fe0c74f fetch 1 ,mem_device_fast_conn_flag 
+44a0 c17f8000 rtneq 0xff 
+44a1 6fe0caa1 fetch 1 ,mem_kb_computer_system 
+44a2 c00044a5 beq system_os_windows ,keyboard_keyvalue_windows_osk 
+44a3 580000f7 setarg hid_key_os_soft_kb 
+44a4 202044aa branch keyboard_keyvalue_store_temp 
+
+keyboard_keyvalue_windows_osk:
+44a5 580000aa setarg hid_key_osk 
+44a6 202044aa branch keyboard_keyvalue_store_temp 
+
+keyboard_keyvalue_fn_space:
+44a7 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+44a8 c4190000 rtnbit0 keyboard_enable_fn_space_language 
+44a9 580000ab setarg hid_key_language 
+
+keyboard_keyvalue_store_temp:
+44aa 67e0c9aa store 1 ,mem_keyboard_keyvalue_temp 
+44ab 20600000 rtn 
+
+keyboard_keyvalue_os_android:
+44ac 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+44ad c4198000 rtnbit0 keyboard_enable_fn_os_switch 
+44ae 204044ca call keyboard_keyvalue_clear_temp 
+44af 6fe0c9ab fetch 1 ,mem_keyboard_press_flag_temp 
+44b0 c4000000 rtnbit0 0 
+44b1 704aa101 jam system_os_android ,mem_kb_computer_system 
+
+keyboard_keyvalue_os_switch_end:
+44b2 704ac506 jam 6 ,mem_keyboard_mode_led_on_timer 
+44b3 204044cc call keyboard_store_computer_system 
+44b4 6fe0caa2 fetch 1 ,mem_keyboard_device_info_store_flag 
+44b5 79207e04 set1 keyboard_store_eepromm_flag_computer_system ,pdata 
+44b6 67e0caa2 store 1 ,mem_keyboard_device_info_store_flag 
+
+keyboard_store_eeprom_or_flash:
+44b7 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+44b8 c3878000 rtnbit1 keyboard_enable_otp 
+
+keyboard_store_device_info_delay:
+44b9 6fe0c706 fetch 1 ,mem_store_information_delay_timer_init 
+44ba 67e0c705 store 1 ,mem_store_information_delay_timer 
+44bb 20600000 rtn 
+
+keyboard_keyvalue_os_windows:
+44bc 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+44bd c4198000 rtnbit0 keyboard_enable_fn_os_switch 
+44be 204044ca call keyboard_keyvalue_clear_temp 
+44bf 6fe0c9ab fetch 1 ,mem_keyboard_press_flag_temp 
+44c0 c4000000 rtnbit0 0 
+44c1 704aa100 jam system_os_windows ,mem_kb_computer_system 
+44c2 202044b2 branch keyboard_keyvalue_os_switch_end 
+
+keyboard_keyvalue_os_ios:
+44c3 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+44c4 c4198000 rtnbit0 keyboard_enable_fn_os_switch 
+44c5 204044ca call keyboard_keyvalue_clear_temp 
+44c6 6fe0c9ab fetch 1 ,mem_keyboard_press_flag_temp 
+44c7 c4000000 rtnbit0 0 
+44c8 704aa102 jam system_os_ios ,mem_kb_computer_system 
+44c9 202044b2 branch keyboard_keyvalue_os_switch_end 
+
+keyboard_keyvalue_clear_temp:
+44ca 58000000 setarg 0 
+44cb 202044aa branch keyboard_keyvalue_store_temp 
+
+keyboard_store_computer_system:
+44cc 44a9400a bpatch patch0a_2 ,mem_patch0a 
+44cd 6fe0c678 fetch 1 ,mem_device_flag 
+44ce c1000000 rtneq mode_24g_device 
+44cf c1020000 rtneq mode_usb_device 
+44d0 c000c4d3 beq mode_bt_device1 ,keyboard_store_computer_system_bt1 
+44d1 c00144d6 beq mode_bt_device2 ,keyboard_store_computer_system_bt2 
+44d2 c001c4d9 beq mode_bt_device3 ,keyboard_store_computer_system_bt3 
+
+keyboard_store_computer_system_bt1:
+44d3 6848caa1 fetcht 1 ,mem_kb_computer_system 
+44d4 6048c6ae storet 1 ,mem_keyboard_bt1_computer_system 
+44d5 20600000 rtn 
+
+keyboard_store_computer_system_bt2:
+44d6 6848caa1 fetcht 1 ,mem_kb_computer_system 
+44d7 6048c6af storet 1 ,mem_keyboard_bt2_computer_system 
+44d8 20600000 rtn 
+
+keyboard_store_computer_system_bt3:
+44d9 6848caa1 fetcht 1 ,mem_kb_computer_system 
+44da 6048c6b0 storet 1 ,mem_keyboard_bt3_computer_system 
+44db 20600000 rtn 
+
+keyboard_keyvalue_commbination_replace:
+44dc 6fe0c9aa fetch 1 ,mem_keyboard_keyvalue_temp 
+44dd c02344f2 beq hid_key_print_screen ,keyboard_commination_screen_shot_replace 
+44de c025c4f8 beq hid_key_page_up ,keyboard_commination_pageup_replace 
+44df c02744fe beq hid_key_page_down ,keyboard_commination_pagedown_replace 
+44e0 c0254500 beq hid_key_home ,keyboard_commination_home_replace 
+44e1 c026c502 beq hid_key_end ,keyboard_commination_end_replace 
+44e2 c052c504 beq hid_key_select_all ,keyboard_commination_select_all 
+44e3 c053450b beq hid_key_copy ,keyboard_commbination_copy 
+44e4 c053c50d beq hid_key_paste ,keyboard_commbination_paste 
+44e5 c054450f beq hid_key_cut ,keyboard_commbination_cut 
+44e6 c054c511 beq hid_key_all_os_lock ,keyboard_commination_os_lock 
+44e7 c055451c beq hid_key_osk ,keyboard_commbination_osk 
+44e8 c056c523 beq hid_key_search ,keyboard_commbination_search 
+44e9 c055c52a beq hid_key_language ,keyboard_commbination_language 
+44ea c0564535 beq hid_key_app_tiling ,keyboard_commbination_app_tiling 
+44eb 20600000 rtn 
+
+keyboard_commbination_delay_release_set:
+44ec 6fe0c9ab fetch 1 ,mem_keyboard_press_flag_temp 
+44ed c4000000 rtnbit0 0 
+44ee 704a9f0a jam 10 ,mem_keyboard_commbination_control_key_delay_release_timer 
+44ef 20600000 rtn 
+
+keyboard_commbination_delay_release_clear:
+44f0 704a9f00 jam 0 ,mem_keyboard_commbination_control_key_delay_release_timer 
+44f1 20600000 rtn 
+
+keyboard_commination_screen_shot_replace:
+44f2 6fe0caa1 fetch 1 ,mem_kb_computer_system 
+44f3 c1000000 rtneq system_os_windows 
+44f4 c1008000 rtneq system_os_android 
+44f5 704a9d0a jam left_shift_gui ,mem_keyboard_commbination_control_key_value 
+44f6 704a9e20 jam hid_key_3 ,mem_keyboard_commbination_standard_key_value 
+44f7 2020453e branch keyboard_commbination_keypress 
+
+keyboard_commination_pageup_replace:
+44f8 704a9e52 jam hid_key_up_arrow ,mem_keyboard_commbination_standard_key_value 
+
+keyboard_commination_ios_mac_command_commiation:
+44f9 6fe0caa1 fetch 1 ,mem_kb_computer_system 
+44fa c1000000 rtneq system_os_windows 
+44fb c1008000 rtneq system_os_android 
+44fc 704a9d08 jam left_gui ,mem_keyboard_commbination_control_key_value 
+44fd 2020453e branch keyboard_commbination_keypress 
+
+keyboard_commination_pagedown_replace:
+44fe 704a9e51 jam hid_key_down_arrow ,mem_keyboard_commbination_standard_key_value 
+44ff 202044f9 branch keyboard_commination_ios_mac_command_commiation 
+
+keyboard_commination_home_replace:
+4500 704a9e50 jam hid_key_left_arrow ,mem_keyboard_commbination_standard_key_value 
+4501 202044f9 branch keyboard_commination_ios_mac_command_commiation 
+
+keyboard_commination_end_replace:
+4502 704a9e4f jam hid_key_right_arrow ,mem_keyboard_commbination_standard_key_value 
+4503 202044f9 branch keyboard_commination_ios_mac_command_commiation 
+
+keyboard_commination_select_all:
+4504 704a9e04 jam hid_key_a ,mem_keyboard_commbination_standard_key_value 
+
+keyboard_commbination_text_edit:
+4505 704a9d01 jam left_control ,mem_keyboard_commbination_control_key_value 
+4506 6fe0caa1 fetch 1 ,mem_kb_computer_system 
+4507 c000453e beq system_os_windows ,keyboard_commbination_keypress 
+4508 c000c53e beq system_os_android ,keyboard_commbination_keypress 
+4509 704a9d08 jam left_gui ,mem_keyboard_commbination_control_key_value 
+450a 2020453e branch keyboard_commbination_keypress 
+
+keyboard_commbination_copy:
+450b 704a9e06 jam hid_key_c ,mem_keyboard_commbination_standard_key_value 
+450c 20204505 branch keyboard_commbination_text_edit 
+
+keyboard_commbination_paste:
+450d 704a9e19 jam hid_key_v ,mem_keyboard_commbination_standard_key_value 
+450e 20204505 branch keyboard_commbination_text_edit 
+
+keyboard_commbination_cut:
+450f 704a9e1b jam hid_key_x ,mem_keyboard_commbination_standard_key_value 
+4510 20204505 branch keyboard_commbination_text_edit 
+
+keyboard_commination_os_lock:
+4511 6fe0caa1 fetch 1 ,mem_kb_computer_system 
+4512 c0004516 beq system_os_windows ,keyboard_commination_windows_lock 
+4513 c001c519 beq system_os_mac ,keyboard_commination_mac_lock 
+4514 580000fa setarg hid_key_ios_android_os_lock 
+4515 202044aa branch keyboard_keyvalue_store_temp 
+
+keyboard_commination_windows_lock:
+4516 704a9d08 jam left_gui ,mem_keyboard_commbination_control_key_value 
+4517 704a9e0f jam hid_key_l ,mem_keyboard_commbination_standard_key_value 
+4518 2020453e branch keyboard_commbination_keypress 
+
+keyboard_commination_mac_lock:
+4519 704a9d09 jam left_gui_control ,mem_keyboard_commbination_control_key_value 
+451a 704a9e14 jam hid_key_q ,mem_keyboard_commbination_standard_key_value 
+451b 2020453e branch keyboard_commbination_keypress 
+
+keyboard_commbination_osk:
+451c 6fe0caa1 fetch 1 ,mem_kb_computer_system 
+451d c0004520 beq system_os_windows ,keyboard_commbination_windows_osk 
+451e 580000f7 setarg hid_key_os_soft_kb 
+451f 202044aa branch keyboard_keyvalue_store_temp 
+
+keyboard_commbination_windows_osk:
+4520 704a9d09 jam left_gui_control ,mem_keyboard_commbination_control_key_value 
+4521 704a9e12 jam hid_key_o ,mem_keyboard_commbination_standard_key_value 
+4522 2020453e branch keyboard_commbination_keypress 
+
+keyboard_commbination_search:
+4523 6fe0caa1 fetch 1 ,mem_kb_computer_system 
+4524 c001c527 beq system_os_mac ,keyboard_commbination_mac_search 
+4525 580000f5 setarg hid_key_ac_search 
+4526 202044aa branch keyboard_keyvalue_store_temp 
+
+keyboard_commbination_mac_search:
+4527 704a9d08 jam left_gui ,mem_keyboard_commbination_control_key_value 
+4528 704a9e2c jam hid_key_space ,mem_keyboard_commbination_standard_key_value 
+4529 2020453e branch keyboard_commbination_keypress 
+
+keyboard_commbination_language:
+452a 6fe0caa1 fetch 1 ,mem_kb_computer_system 
+452b c0004531 beq system_os_windows ,keyboard_commbination_language_windows 
+452c c000c533 beq system_os_android ,keyboard_commbination_language_android 
+452d 704a9d01 jam left_control ,mem_keyboard_commbination_control_key_value 
+
+keyboard_commbination_language_next:
+452e 704a9e2c jam hid_key_space ,mem_keyboard_commbination_standard_key_value 
+452f 204044ec call keyboard_commbination_delay_release_set 
+4530 2020453e branch keyboard_commbination_keypress 
+
+keyboard_commbination_language_windows:
+4531 704a9d08 jam left_gui ,mem_keyboard_commbination_control_key_value 
+4532 2020452e branch keyboard_commbination_language_next 
+
+keyboard_commbination_language_android:
+4533 704a9d02 jam left_shift ,mem_keyboard_commbination_control_key_value 
+4534 2020452e branch keyboard_commbination_language_next 
+
+keyboard_commbination_app_tiling:
+4535 6fe0caa1 fetch 1 ,mem_kb_computer_system 
+4536 c000453b beq system_os_windows ,keyboard_commbination_app_tiling_windows_android 
+4537 c000c53b beq system_os_android ,keyboard_commbination_app_tiling_windows_android 
+4538 704a9d01 jam left_control ,mem_keyboard_commbination_control_key_value 
+4539 704a9e52 jam hid_key_up_arrow ,mem_keyboard_commbination_standard_key_value 
+453a 2020453e branch keyboard_commbination_keypress 
+
+keyboard_commbination_app_tiling_windows_android:
+453b 704a9d08 jam left_gui ,mem_keyboard_commbination_control_key_value 
+453c 704a9e2b jam hid_key_tab ,mem_keyboard_commbination_standard_key_value 
+453d 2020453e branch keyboard_commbination_keypress 
+
+keyboard_commbination_keypress:
+453e 7049aa00 jam 0 ,mem_keyboard_keyvalue_temp 
+453f 6fe0c9ab fetch 1 ,mem_keyboard_press_flag_temp 
+4540 c3004545 bbit0 0 ,keyboard_commbination_key_wait_release_set 
+4541 6fe0ca9c fetch 1 ,mem_keyboard_commbination_key_step 
+4542 c001c551 beq cammbination_key_complete ,keyboard_commbination_key_hold_set 
+
+keyboard_commbination_key_press_set:
+4543 704a9c01 jam cammbination_key_press ,mem_keyboard_commbination_key_step 
+4544 20600000 rtn 
+
+keyboard_commbination_key_wait_release_set:
+4545 704a9c04 jam cammbination_key_wait_release ,mem_keyboard_commbination_key_step 
+4546 20600000 rtn 
+
+keyboard_commbination_key_null_set:
+4547 704a9c06 jam cammbination_key_null ,mem_keyboard_commbination_key_step 
+4548 20600000 rtn 
+
+keyboard_commbination_key_value_store:
+4549 67e0ca70 store 1 ,mem_keyboard_tx_data + 1 
+454a 6048ca72 storet 1 ,mem_keyboard_tx_data + 3 
+454b 20407dbc call enable_user 
+454c 704a6f00 jam hid_reportid_key_standard ,mem_keyboard_tx_data 
+454d 202046e6 branch keyboard_motion_data_check_next 
+
+keyboard_commbination_key_press_process:
+454e 6fe0ca9d fetch 1 ,mem_keyboard_commbination_control_key_value 
+454f d8400000 arg 0 ,temp 
+4550 20404549 call keyboard_commbination_key_value_store 
+
+keyboard_commbination_key_hold_set:
+4551 704a9c02 jam cammbination_key_hold ,mem_keyboard_commbination_key_step 
+4552 20600000 rtn 
+
+keyboard_commbination_key_hold_process:
+4553 704a9c03 jam cammbination_key_complete ,mem_keyboard_commbination_key_step 
+4554 6fe0ca9d fetch 1 ,mem_keyboard_commbination_control_key_value 
+4555 6848ca9e fetcht 1 ,mem_keyboard_commbination_standard_key_value 
+4556 20204549 branch keyboard_commbination_key_value_store 
+
+keyboard_commbination_key_wait_release_process:
+4557 704a6f00 jam hid_reportid_key_standard ,mem_keyboard_tx_data 
+4558 6fe0ca9d fetch 1 ,mem_keyboard_commbination_control_key_value 
+4559 d8400000 arg 0 ,temp 
+455a 20404549 call keyboard_commbination_key_value_store 
+455b 6fe0ca9f fetch 1 ,mem_keyboard_commbination_control_key_delay_release_timer 
+455c 203a4547 branch keyboard_commbination_key_null_set ,blank 
+
+keyboard_commbination_key_release_set:
+455d 704a9c05 jam cammbination_key_release ,mem_keyboard_commbination_key_step 
+455e 20600000 rtn 
+
+keyboard_commbination_key_release_process:
+455f 2020454b branch keyboard_commbination_key_value_store + 2 
+
+keyboard_commbination_key_null_process:
+4560 704a9c00 jam cammbination_key_free ,mem_keyboard_commbination_key_step 
+4561 dfe00000 arg 0 ,pdata 
+4562 d8400000 arg 0 ,temp 
+4563 20204549 branch keyboard_commbination_key_value_store 
+
+keyboard_keyvalue_in_out:
+4564 6fe0c9aa fetch 1 ,mem_keyboard_keyvalue_temp 
+4565 d84000e0 arg hid_key_left_ctrl ,temp 
+4566 98467c00 isub temp ,null 
+4567 24214576 nbranch keyboard_keyvalue_standard ,positive 
+4568 1fe67ce7 sub pdata ,hid_key_right_gui ,null 
+4569 242145ad nbranch keyboard_keyvalue_consumer ,positive 
+456a 1fe17e07 and_into 0x07 ,pdata 
+456b 1fe20e00 copy pdata ,queue 
+456c 6fe0c9ab fetch 1 ,mem_keyboard_press_flag_temp 
+456d c2804572 bbit1 0 ,keyboard_keyvalue_control_key_in 
+
+keyboard_keyvalue_control_key_out:
+456e 6fe0c9ad fetch 1 ,mem_keyboard_keyvalue_buffer 
+456f f93ffe00 qset0 pdata 
+4570 67e0c9ad store 1 ,mem_keyboard_keyvalue_buffer 
+4571 20600000 rtn 
+
+keyboard_keyvalue_control_key_in:
+4572 6fe0c9ad fetch 1 ,mem_keyboard_keyvalue_buffer 
+4573 f9207e00 qset1 pdata 
+4574 67e0c9ad store 1 ,mem_keyboard_keyvalue_buffer 
+4575 20600000 rtn 
+
+keyboard_keyvalue_standard:
+4576 7049b500 jam 0 ,mem_keyboard_keyvalue_buffer + 8 
+4577 6fe0c9ab fetch 1 ,mem_keyboard_press_flag_temp 
+4578 c280458d bbit1 0 ,keyboard_keyvalue_standard_in 
+
+keyboard_keyvalue_standard_out:
+4579 6848c9aa fetcht 1 ,mem_keyboard_keyvalue_temp 
+457a df200006 arg 6 ,loopcnt 
+457b d8c049af arg mem_keyboard_keyvalue_buffer + 2 ,contr 
+
+keyboard_keyvalue_standard_out_loop:
+457c efe08006 ifetch 1 ,contr 
+457d 98467c00 isub temp ,null 
+457e 2422c585 nbranch keyboard_keyvalue_standard_out_next ,zero 
+457f efe08006 ifetch 1 ,contr 
+4580 18c08dfe increase -2 ,contr 
+4581 e7e08006 istore 1 ,contr 
+4582 207a0000 rtn blank 
+4583 18c08c01 increase 1 ,contr 
+4584 e0408006 istoret 1 ,contr 
+
+keyboard_keyvalue_standard_out_next:
+4585 c200457c loop keyboard_keyvalue_standard_out_loop 
+4586 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+4587 c290c58a bbit1 keyboard_enable_full_n_key_rollover ,keyboard_keyvalue_standard_out_n_key_rollover 
+4588 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+4589 c4100000 rtnbit0 keyboard_enable_26_n_key_rollover 
+
+keyboard_keyvalue_standard_out_n_key_rollover:
+458a 2040459f call keyboard_keyvalue_n_key_rollover_data_in_out 
+458b f93ffe00 qset0 pdata 
+458c 20207dce branch istore_1_contw_rtn 
+
+keyboard_keyvalue_standard_in:
+458d 6848c9aa fetcht 1 ,mem_keyboard_keyvalue_temp 
+458e df200006 arg 6 ,loopcnt 
+458f d8c049af arg mem_keyboard_keyvalue_buffer + 2 ,contr 
+
+keyboard_keyvalue_standard_in_loop:
+4590 efe08006 ifetch 1 ,contr 
+4591 203a459c branch keyboard_keyvalue_standard_in_data ,blank 
+4592 98467c00 isub temp ,null 
+4593 20628000 rtn zero 
+4594 c2004590 loop keyboard_keyvalue_standard_in_loop 
+4595 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+4596 c290c599 bbit1 keyboard_enable_full_n_key_rollover ,keyboard_keyvalue_standard_in_n_key_rollover 
+4597 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+4598 c4100000 rtnbit0 keyboard_enable_26_n_key_rollover 
+
+keyboard_keyvalue_standard_in_n_key_rollover:
+4599 2040459f call keyboard_keyvalue_n_key_rollover_data_in_out 
+459a f9207e00 qset1 pdata 
+459b 20207dce branch istore_1_contw_rtn 
+
+keyboard_keyvalue_standard_in_data:
+459c 18c08dff increase -1 ,contr 
+459d e0408006 istoret 1 ,contr 
+459e 20600000 rtn 
+
+keyboard_keyvalue_n_key_rollover_data_in_out:
+459f 44a9c00a bpatch patch0a_3 ,mem_patch0a 
+45a0 6fe0c9aa fetch 1 ,mem_keyboard_keyvalue_temp 
+45a1 1fe67c70 sub pdata ,0x70 ,null 
+45a2 24610000 nrtn positive 
+45a3 7049b701 jam 1 ,mem_keboard_n_key_rollover_send_flag 
+45a4 7049a901 jam 1 ,mem_keyboard_data_change_flag 
+45a5 1fe6fc08 div pdata ,8 
+45a6 20407d64 call wait_div_end 
+45a7 1807fe00 quotient pdata 
+45a8 18070e00 remainder queue 
+45a9 d8a049b9 arg mem_keyboard_n_key_rollover_data + 1 ,contw 
+45aa 98a08a00 iadd contw ,contw 
+45ab 58000000 setarg 0 
+45ac 20600000 rtn 
+
+keyboard_keyvalue_consumer:
+45ad 704aa001 jam keyboard_consumer_key_press ,mem_keyboard_consumer_key_status 
+45ae 6fe0c9ab fetch 1 ,mem_keyboard_press_flag_temp 
+45af 2fec0000 isolate0 0 ,pdata 
+45b0 2040c5b2 call keyboard_consumer_key_release_status ,true 
+45b1 20204576 branch keyboard_keyvalue_standard 
+
+keyboard_consumer_key_release_status:
+45b2 704aa002 jam keyboard_consumer_key_release ,mem_keyboard_consumer_key_status 
+45b3 20600000 rtn 
+
+keyboard_special_key_check:
+45b4 20404660 call keyboard_pairing_button_check 
+45b5 204045f2 call keyboard_device_select 
+45b6 704a7a00 jam 0 ,mem_keyboard_fn_flag 
+45b7 704a7b00 jam 0 ,mem_keyboard_control_key_flag 
+45b8 704a7c00 jam 0 ,mem_keyboard_alt_flag 
+45b9 704a7d00 jam 0 ,mem_keyboard_shift_flag 
+45ba 704a7e00 jam 0 ,mem_keyboard_bt_button_flag 
+45bb 6fe0c9ad fetch 1 ,mem_keyboard_keyvalue_buffer 
+45bc 245a468f ncall keyborad_control_key_set ,blank 
+45bd d8c049af arg mem_keyboard_keyvalue_buffer + 2 ,contr 
+45be df200006 arg 6 ,loopcnt 
+
+keyboard_special_key_check_loop:
+45bf efe08006 ifetch 1 ,contr 
+45c0 1fe67c7f sub pdata ,hid_key_fn ,null 
+45c1 2042c699 call keyboard_fn_set ,zero 
+45c2 1fe67cae sub pdata ,hid_key_pb ,null 
+45c3 2042c69b call keyboard_pb_set ,zero 
+45c4 c20045bf loop keyboard_special_key_check_loop 
+45c5 204045c9 call keyboard_commbination_key_press_check 
+45c6 6fe0ca7f fetch 1 ,mem_keyboard_pairing_type 
+45c7 203a4670 branch keyboard_enable_bt_button_pairing ,blank 
+45c8 20600000 rtn 
+
+keyboard_commbination_key_press_check:
+45c9 44aa400a bpatch patch0a_4 ,mem_patch0a 
+45ca 704a9b00 jam 0 ,mem_keyboard_commbination_press_type 
+45cb 6fe0c678 fetch 1 ,mem_device_flag 
+45cc c08045d7 bne mode_24g_device ,keyboard_commbination_key_press_check_bt 
+45cd 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+45ce c4098000 rtnbit0 keyboard_enable_commbination_key_by_24g_pairing 
+45cf 6fe149af fetch 2 ,mem_keyboard_keyvalue_buffer + 2 
+45d0 68494a97 fetcht 2 ,mem_keyboard_commbination_key_24g 
+45d1 98467c00 isub temp ,null 
+45d2 2022c5e8 branch keyboard_commbination_key_down_24g ,zero 
+45d3 18508400 byteswap temp ,temp 
+45d4 98467c00 isub temp ,null 
+45d5 2022c5e8 branch keyboard_commbination_key_down_24g ,zero 
+45d6 202054e6 branch mouse_commbination_key_up 
+
+keyboard_commbination_key_press_check_bt:
+45d7 6fe149af fetch 2 ,mem_keyboard_keyvalue_buffer + 2 
+45d8 68494a99 fetcht 2 ,mem_keyboard_commbination_fast_conn_bt 
+45d9 98467c00 isub temp ,null 
+45da 2022c5ec branch keyboard_commbination_key_down_bt_fast_conn ,zero 
+45db 18508400 byteswap temp ,temp 
+45dc 98467c00 isub temp ,null 
+45dd 2022c5ec branch keyboard_commbination_key_down_bt_fast_conn ,zero 
+45de 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+45df c30dd4e6 bbit0 keyboard_enable_commbination_key_by_bt_discovery ,mouse_commbination_key_up 
+45e0 6fe149af fetch 2 ,mem_keyboard_keyvalue_buffer + 2 
+45e1 68494a95 fetcht 2 ,mem_keyboard_commbination_key_bt 
+45e2 98467c00 isub temp ,null 
+45e3 2022c5ea branch keyboard_commbination_key_down_bt ,zero 
+45e4 18508400 byteswap temp ,temp 
+45e5 98467c00 isub temp ,null 
+45e6 2022c5ea branch keyboard_commbination_key_down_bt ,zero 
+45e7 202054e6 branch mouse_commbination_key_up 
+
+keyboard_commbination_key_down_24g:
+45e8 704a9b01 jam keyboard_commbination_press_type_24g_pair ,mem_keyboard_commbination_press_type 
+45e9 202045ee branch keyboard_commbination_key_down 
+
+keyboard_commbination_key_down_bt:
+45ea 704a9b02 jam keyboard_commbination_press_type_bt_pair ,mem_keyboard_commbination_press_type 
+45eb 202045ee branch keyboard_commbination_key_down 
+
+keyboard_commbination_key_down_bt_fast_conn:
+45ec 704a9b03 jam keyboard_commbination_press_type_bt_fast_conn ,mem_keyboard_commbination_press_type 
+45ed 202045ee branch keyboard_commbination_key_down 
+
+keyboard_commbination_key_down:
+45ee 6fe0c735 fetch 1 ,mem_commbination_key_statue 
+45ef c1008000 rtneq commbination_key_state_down 
+45f0 70473501 jam commbination_key_state_down ,mem_commbination_key_statue 
+45f1 20600000 rtn 
+
+keyboard_device_select:
+45f2 20407dbe call disable_user 
+45f3 20404600 call keyboard_device_select_g24 
+45f4 20404616 call keyboard_device_select_bt1 
+45f5 20404627 call keyboard_device_select_bt2 
+45f6 20404638 call keyboard_device_select_bt3 
+45f7 2040464e call keyboard_device_select_usb 
+45f8 203445fe branch keyboard_clear_change_flag ,user 
+45f9 6fe0c8a6 fetch 1 ,mem_keyboard_switch_device_flag 
+45fa 793ffe00 set0 keyboard_flag_g24_device_button ,pdata 
+45fb 793ffe01 set0 keyboard_flag_bt_device_button ,pdata 
+45fc 67e0c8a6 store 1 ,mem_keyboard_switch_device_flag 
+45fd 20600000 rtn 
+
+keyboard_clear_change_flag:
+45fe 7049a900 jam 0 ,mem_keyboard_data_change_flag 
+45ff 20600000 rtn 
+
+keyboard_device_select_g24:
+4600 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+4601 c4080000 rtnbit0 keyboard_enable_24g 
+4602 6fe0c897 fetch 1 ,mem_keyboard_switch_device_to_g24 
+4603 207a0000 rtn blank 
+4604 6fe149af fetch 2 ,mem_keyboard_keyvalue_buffer + 2 
+4605 68494898 fetcht 2 ,mem_keyboard_switch_device_to_g24 + 1 
+4606 98467c00 isub temp ,null 
+4607 2022c60c branch keyboard_device_select_g24_press ,zero 
+4608 18508400 byteswap temp ,temp 
+4609 98467c00 isub temp ,null 
+460a 2022c60c branch keyboard_device_select_g24_press ,zero 
+460b 20600000 rtn 
+
+keyboard_device_select_g24_press:
+460c 20407dbc call enable_user 
+460d 6fe0c8a6 fetch 1 ,mem_keyboard_switch_device_flag 
+460e 79207e00 set1 keyboard_flag_g24_device_button ,pdata 
+460f 793ffe01 set0 keyboard_flag_bt_device_button ,pdata 
+4610 67e0c8a6 store 1 ,mem_keyboard_switch_device_flag 
+4611 6fe0c678 fetch 1 ,mem_device_flag 
+4612 c1000000 rtneq mode_24g_device 
+4613 70467800 jam mode_24g_device ,mem_device_flag 
+4614 7048a701 jam 1 ,mem_keyboard_switch_g24_enable 
+4615 20600000 rtn 
+
+keyboard_device_select_bt1:
+4616 6fe0c89a fetch 1 ,mem_keyboard_switch_device_to_bt1 
+4617 207a0000 rtn blank 
+4618 6fe149af fetch 2 ,mem_keyboard_keyvalue_buffer + 2 
+4619 6849489b fetcht 2 ,mem_keyboard_switch_device_to_bt1 + 1 
+461a 98467c00 isub temp ,null 
+461b 2022c620 branch keyboard_device_select_bt1_press ,zero 
+461c 18508400 byteswap temp ,temp 
+461d 98467c00 isub temp ,null 
+461e 2022c620 branch keyboard_device_select_bt1_press ,zero 
+461f 20600000 rtn 
+
+keyboard_device_select_bt1_press:
+4620 20407dbc call enable_user 
+4621 20404649 call keyboard_device_select_bt_set_press_flag 
+4622 6fe0c678 fetch 1 ,mem_device_flag 
+4623 c1008000 rtneq mode_bt_device1 
+4624 70467801 jam mode_bt_device1 ,mem_device_flag 
+4625 7048a801 jam 1 ,mem_keyboard_switch_bt_enable 
+4626 20600000 rtn 
+
+keyboard_device_select_bt2:
+4627 6fe0c89d fetch 1 ,mem_keyboard_switch_device_to_bt2 
+4628 207a0000 rtn blank 
+4629 6fe149af fetch 2 ,mem_keyboard_keyvalue_buffer + 2 
+462a 6849489e fetcht 2 ,mem_keyboard_switch_device_to_bt2 + 1 
+462b 98467c00 isub temp ,null 
+462c 2022c631 branch keyboard_device_select_bt2_press ,zero 
+462d 18508400 byteswap temp ,temp 
+462e 98467c00 isub temp ,null 
+462f 2022c631 branch keyboard_device_select_bt2_press ,zero 
+4630 20600000 rtn 
+
+keyboard_device_select_bt2_press:
+4631 20407dbc call enable_user 
+4632 20404649 call keyboard_device_select_bt_set_press_flag 
+4633 6fe0c678 fetch 1 ,mem_device_flag 
+4634 c1010000 rtneq mode_bt_device2 
+4635 70467802 jam mode_bt_device2 ,mem_device_flag 
+4636 7048a801 jam 1 ,mem_keyboard_switch_bt_enable 
+4637 20600000 rtn 
+
+keyboard_device_select_bt3:
+4638 6fe0c8a0 fetch 1 ,mem_keyboard_switch_device_to_bt3 
+4639 207a0000 rtn blank 
+463a 6fe149af fetch 2 ,mem_keyboard_keyvalue_buffer + 2 
+463b 684948a1 fetcht 2 ,mem_keyboard_switch_device_to_bt3 + 1 
+463c 98467c00 isub temp ,null 
+463d 2022c642 branch keyboard_device_select_bt3_press ,zero 
+463e 18508400 byteswap temp ,temp 
+463f 98467c00 isub temp ,null 
+4640 2022c642 branch keyboard_device_select_bt3_press ,zero 
+4641 20600000 rtn 
+
+keyboard_device_select_bt3_press:
+4642 20407dbc call enable_user 
+4643 20404649 call keyboard_device_select_bt_set_press_flag 
+4644 6fe0c678 fetch 1 ,mem_device_flag 
+4645 c1018000 rtneq mode_bt_device3 
+4646 70467803 jam mode_bt_device3 ,mem_device_flag 
+4647 7048a801 jam 1 ,mem_keyboard_switch_bt_enable 
+4648 20600000 rtn 
+
+keyboard_device_select_bt_set_press_flag:
+4649 6fe0c8a6 fetch 1 ,mem_keyboard_switch_device_flag 
+464a 793ffe00 set0 keyboard_flag_g24_device_button ,pdata 
+464b 79207e01 set1 keyboard_flag_bt_device_button ,pdata 
+464c 67e0c8a6 store 1 ,mem_keyboard_switch_device_flag 
+464d 20600000 rtn 
+
+keyboard_device_select_usb:
+464e 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+464f c4120000 rtnbit0 keyboard_enable_usb 
+4650 6fe0c8a3 fetch 1 ,mem_keyboard_switch_device_to_usb 
+4651 207a0000 rtn blank 
+4652 6fe149af fetch 2 ,mem_keyboard_keyvalue_buffer + 2 
+4653 684948a4 fetcht 2 ,mem_keyboard_switch_device_to_usb + 1 
+4654 98467c00 isub temp ,null 
+4655 2022c65a branch keyboard_device_select_usb_press ,zero 
+4656 18508400 byteswap temp ,temp 
+4657 98467c00 isub temp ,null 
+4658 2022c65a branch keyboard_device_select_usb_press ,zero 
+4659 20600000 rtn 
+
+keyboard_device_select_usb_press:
+465a 20407dbc call enable_user 
+465b 6fe0c678 fetch 1 ,mem_device_flag 
+465c c1020000 rtneq mode_usb_device 
+465d 70467804 jam mode_usb_device ,mem_device_flag 
+465e 20404045 call keyboard_store_device_number 
+465f 20206c99 branch soft_reset_chip 
+
+keyboard_pairing_button_check:
+4660 6fe0ca7f fetch 1 ,mem_keyboard_pairing_type 
+4661 247a0000 nrtn blank 
+4662 6848c90f fetcht 1 ,mem_keyboard_pb_button_gpio 
+4663 18467cff sub temp ,ui_button_gpio_disable ,null 
+4664 20628000 rtn zero 
+4665 20406ee0 call gpio_get_bit 
+4666 2420c66c nbranch keyboard_pairing_button_release ,true 
+4667 df200008 arg 8 ,loopcnt 
+4668 d8a049ad arg mem_keyboard_keyvalue_buffer ,contw 
+4669 20407ca3 call clear_mem 
+466a 7049afae jam hid_key_pb ,mem_keyboard_keyvalue_buffer + 2 
+466b 20600000 rtn 
+
+keyboard_pairing_button_release:
+466c 6fe0c9af fetch 1 ,mem_keyboard_keyvalue_buffer + 2 
+466d c1d70000 rtnne hid_key_pb 
+466e 7049af00 jam hid_key_null ,mem_keyboard_keyvalue_buffer + 2 
+466f 20600000 rtn 
+
+keyboard_enable_bt_button_pairing:
+4670 44aac00a bpatch patch0a_5 ,mem_patch0a 
+4671 6fe0ca7e fetch 1 ,mem_keyboard_bt_button_flag 
+4672 207a0000 rtn blank 
+4673 6fe0c678 fetch 1 ,mem_device_flag 
+4674 c0004680 beq mode_24g_device ,keyboard_24g_start_pair_mode 
+
+keyboard_long_button_bt_discovery:
+4675 44ab400a bpatch patch0a_6 ,mem_patch0a 
+4676 20403f2c call keyboard_pairing_check_otp_offset 
+4677 7049a900 jam 0 ,mem_keyboard_data_change_flag 
+4678 6fe0c678 fetch 1 ,mem_device_flag 
+4679 c1000000 rtneq mode_24g_device 
+467a 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+467b c3820000 rtnbit1 keyboard_bt_discovery_button_long_down_flag 
+467c d8e00004 arg keyboard_bt_discovery_button_long_down_flag ,queue 
+467d 20404a25 call keyboard_enable_function_flag 
+467e 20403745 call app_evt_button_long_pressed 
+467f 202048c0 branch keyboard_bb_event_discovery_btn 
+
+keyboard_24g_start_pair_mode:
+4680 44abc00a bpatch patch0a_7 ,mem_patch0a 
+4681 20404161 call keyboard_device_led_all_off 
+4682 20403f2c call keyboard_pairing_check_otp_offset 
+4683 7049a900 jam 0 ,mem_keyboard_data_change_flag 
+4684 6fe145ef fetch 2 ,mem_24g_pair_timeout 
+4685 247a0000 nrtn blank 
+4686 58000000 setarg 0 
+4687 67e14741 store 2 ,mem_device_no_data_timer 
+4688 67e145f5 store 2 ,mem_24g_reconn_timeout 
+4689 67e0c5f9 store 1 ,mem_24g_reconn_type 
+468a d8e00000 arg keyboard_24g_pairing_flag ,queue 
+468b 20404a25 call keyboard_enable_function_flag 
+468c 204048e9 call keyboard_stop_discovery 
+468d 7045a002 jam type_kb ,mem_24g_data_type 
+468e 2020326f branch g24_pair_start 
+
+keyborad_control_key_set:
+468f 67e0ca7b store 1 ,mem_keyboard_control_key_flag 
+4690 1fe17e44 and_into 0x44 ,pdata 
+4691 245a4697 ncall keyboard_alt_flag_set ,blank 
+4692 6fe0ca7b fetch 1 ,mem_keyboard_control_key_flag 
+4693 1fe17e22 and_into 0x22 ,pdata 
+4694 207a0000 rtn blank 
+4695 704a7d01 jam 1 ,mem_keyboard_shift_flag 
+4696 20600000 rtn 
+
+keyboard_alt_flag_set:
+4697 704a7c01 jam 1 ,mem_keyboard_alt_flag 
+4698 20600000 rtn 
+
+keyboard_fn_set:
+4699 704a7a01 jam 1 ,mem_keyboard_fn_flag 
+469a 20600000 rtn 
+
+keyboard_pb_set:
+469b 704a7e01 jam 1 ,mem_keyboard_bt_button_flag 
+469c 20600000 rtn 
+
+keyboard_motion:
+469d 44ac400b bpatch patch0b_0 ,mem_patch0b 
+469e 78547c00 disable user 
+469f 70472b00 jam 0 ,mem_customer_key 
+46a0 70472c00 jam 0 ,mem_customer_data_trigger 
+46a1 70472d00 jam 0 ,mem_customer_data_trigger_last 
+46a2 6fe0ca9c fetch 1 ,mem_keyboard_commbination_key_step 
+46a3 c000c54e beq cammbination_key_press ,keyboard_commbination_key_press_process 
+46a4 c0014553 beq cammbination_key_hold ,keyboard_commbination_key_hold_process 
+46a5 c001c553 beq cammbination_key_complete ,keyboard_commbination_key_hold_process 
+46a6 c0024557 beq cammbination_key_wait_release ,keyboard_commbination_key_wait_release_process 
+46a7 c0034560 beq cammbination_key_null ,keyboard_commbination_key_null_process 
+46a8 6fe0c9a9 fetch 1 ,mem_keyboard_data_change_flag 
+46a9 203a46ba branch keyboard_no_key_press ,blank 
+46aa 1fe0ffff increase -1 ,pdata 
+46ab 67e0c9a9 store 1 ,mem_keyboard_data_change_flag 
+46ac 204046b7 call keyboard_current_mult_update 
+46ad 704a820a jam 10 ,mem_keyboard_led_status_get_timer 
+46ae 20405535 call mouse_no_data_timer_init 
+46af 6fe0ca9c fetch 1 ,mem_keyboard_commbination_key_step 
+46b0 c002c55f beq cammbination_key_release ,keyboard_commbination_key_release_process 
+46b1 d8a04a6f arg mem_keyboard_tx_data ,contw 
+46b2 df20000a arg 10 ,loopcnt 
+46b3 20407ca3 call clear_mem 
+46b4 204046ca call keyboard_motion_data_check 
+46b5 704a7900 jam 0 ,mem_keyboard_data_send_flag 
+46b6 20600000 rtn 
+
+keyboard_current_mult_update:
+46b7 7040c003 jam 3 ,mem_lpm_mult 
+46b8 70473e0a jam 10 ,mem_mouse_current_mult_timer 
+46b9 20600000 rtn 
+
+keyboard_no_key_press:
+46ba 6fe0c678 fetch 1 ,mem_device_flag 
+46bb c1800000 rtnne mode_24g_device 
+46bc 6fe0ca81 fetch 1 ,mem_keyboard_led_status_get 
+46bd 207a0000 rtn blank 
+46be 6fe0ca80 fetch 1 ,mem_24g_repeat_send_flag 
+46bf 247a0000 nrtn blank 
+46c0 6848ca83 fetcht 1 ,mem_keyboard_led_status_get_timer_last 
+46c1 6fe0ca82 fetch 1 ,mem_keyboard_led_status_get_timer 
+46c2 98467c00 isub temp ,null 
+46c3 67e0ca83 store 1 ,mem_keyboard_led_status_get_timer_last 
+46c4 20628000 rtn zero 
+46c5 d8a04a6f arg mem_keyboard_tx_data ,contw 
+46c6 df20000a arg 10 ,loopcnt 
+46c7 20407ca3 call clear_mem 
+46c8 20407dbc call enable_user 
+46c9 202046e6 branch keyboard_motion_data_check_next 
+
+keyboard_motion_data_check:
+46ca 44acc00b bpatch patch0b_1 ,mem_patch0b 
+46cb 6fe0caa0 fetch 1 ,mem_keyboard_consumer_key_status 
+46cc c001474b beq keyboard_consumer_key_release ,keyboard_value_consumer_release 
+46cd 6fe0c9b7 fetch 1 ,mem_keboard_n_key_rollover_send_flag 
+46ce 243a46ec nbranch keyboard_motion_data_check_n_key_rollover_key ,blank 
+46cf d8c049af arg mem_keyboard_keyvalue_buffer + 2 ,contr 
+46d0 df200006 arg 6 ,loopcnt 
+
+keyboard_value_tpye_check:
+46d1 efe08006 ifetch 1 ,contr 
+46d2 1fe67ce7 sub pdata ,hid_key_right_gui ,null 
+46d3 242146f5 nbranch keyboard_value_tpye_consumer_set ,positive 
+46d4 c20046d1 loop keyboard_value_tpye_check 
+46d5 6fe0c9a6 fetch 1 ,mem_keyboard_all_press_key_count 
+46d6 205a46ef call keyboard_value_release_all_key ,blank 
+46d7 704a6f00 jam hid_reportid_key_standard ,mem_keyboard_tx_data 
+46d8 44ad400b bpatch patch0b_2 ,mem_patch0b 
+46d9 da2049ad arg mem_keyboard_keyvalue_buffer ,rega 
+46da d8a04a70 arg mem_keyboard_tx_data + 1 ,contw 
+46db df200008 arg 8 ,loopcnt 
+
+keyboard_tx_data_store:
+46dc e8408011 ifetcht 1 ,rega 
+46dd 6fe0c74f fetch 1 ,mem_device_fast_conn_flag 
+46de c07fc6e3 beq 0xff ,keyboard_tx_data_store_loop 
+46df 18467c7f sub temp ,hid_key_fn ,null 
+46e0 2422c6e3 nbranch keyboard_tx_data_store_loop ,zero 
+46e1 1a20a201 increase 1 ,rega 
+46e2 e8408011 ifetcht 1 ,rega 
+
+keyboard_tx_data_store_loop:
+46e3 e0408005 istoret 1 ,contw 
+46e4 1a20a201 increase 1 ,rega 
+46e5 c20046dc loop keyboard_tx_data_store 
+
+keyboard_motion_data_check_next:
+46e6 44adc00b bpatch patch0b_3 ,mem_patch0b 
+46e7 20404756 call keyboard_device_data_tpye_check 
+46e8 6fe0ca79 fetch 1 ,mem_keyboard_data_send_flag 
+46e9 c000fdbc beq device_data_tpye_mouse ,enable_user 
+
+device_send_keyboard_data:
+46ea 2040522c call mouse_customerkey_press 
+46eb 20207dbc branch enable_user 
+
+keyboard_motion_data_check_n_key_rollover_key:
+46ec 7049b700 jam 0 ,mem_keboard_n_key_rollover_send_flag 
+46ed 704a6f08 jam hid_reportid_n_key_rollover ,mem_keyboard_tx_data 
+46ee 202046e6 branch keyboard_motion_data_check_next 
+
+keyboard_value_release_all_key:
+46ef d8a049b8 arg mem_keyboard_n_key_rollover_data ,contw 
+46f0 df20000f arg 15 ,loopcnt 
+46f1 20407ca3 call clear_mem 
+46f2 d8a049ad arg mem_keyboard_keyvalue_buffer ,contw 
+46f3 df20000a arg 10 ,loopcnt 
+46f4 20207ca3 branch clear_mem 
+
+keyboard_value_tpye_consumer_set:
+46f5 1fe20400 copy pdata ,temp 
+46f6 44ae400b bpatch patch0b_4 ,mem_patch0b 
+46f7 18427e00 copy temp ,pdata 
+46f8 704a6f05 jam hid_reportid_bit_consumer_key ,mem_keyboard_tx_data 
+46f9 6848c9a6 fetcht 1 ,mem_keyboard_all_press_key_count 
+46fa 18467c00 sub temp ,hid_key_null ,null 
+46fb 2022c74b branch keyboard_value_consumer_all_key_release ,zero 
+46fc c0744715 beq hid_key_multikey_media ,keyboard_value_media 
+46fd c074c718 beq hid_key_multikey_vol_down ,keyboard_value_vol_down 
+46fe c075471a beq hid_key_multikey_vol_up ,keyboard_value_vol_up 
+46ff c075c71c beq hid_key_multikey_mute ,keyboard_value_mute 
+4700 c076471e beq hid_key_multikey_pre_track ,keyboard_value_pre_track 
+4701 c076c720 beq hid_key_multikey_next_track ,keyboard_value_next_track 
+4702 c0774722 beq hid_key_multikey_paly ,keyboard_value_play 
+4703 c077c724 beq hid_key_multikey_stop ,keyboard_value_stop 
+4704 c0784726 beq hid_key_ac_home ,keyboard_value_ac_home 
+4705 c078c728 beq hid_key_mail ,keyboard_value_mail 
+4706 c079472a beq hid_key_my_computer ,keyboard_value_my_computer 
+4707 c079c72c beq hid_key_ac_favorites ,keyboard_value_ac_favorites 
+4708 c07a472e beq hid_key_calculator ,keyboard_value_calculator 
+4709 c07ac730 beq hid_key_ac_search ,keyboard_value_ac_search 
+470a c07b4732 beq hid_key_ac_back ,keyboard_value_ac_back 
+470b c07bc737 beq hid_key_os_soft_kb ,keyboard_value_os_soft_kb 
+470c c07c473d beq hid_key_light_down ,keyboard_value_light_down 
+470d c07cc73f beq hid_key_light_up ,keyboard_value_light_up 
+470e c07d4741 beq hid_key_ios_android_os_lock ,keyboard_value_os_lock 
+470f c07dc743 beq hid_key_mac_eject ,keyboard_value_mac_eject 
+4710 c07e4745 beq hid_key_ac_forward ,keyboard_value_ac_forward 
+4711 c07ec747 beq hid_key_ac_stop ,keyboard_value_ac_stop 
+4712 c07f4749 beq hid_key_ac_refresh ,keyboard_value_ac_refresh 
+4713 c07fc752 beq hid_key_system_sleep ,keyboard_value_system_sleep 
+4714 202046e6 branch keyboard_motion_data_check_next 
+
+keyboard_value_media:
+4715 58000001 setarg 0x000001 
+
+keyboard_consumer_value_store:
+4716 67e1ca70 store 3 ,mem_keyboard_tx_data + 1 
+4717 202046e6 branch keyboard_motion_data_check_next 
+
+keyboard_value_vol_down:
+4718 58000002 setarg 0x000002 
+4719 20204716 branch keyboard_consumer_value_store 
+
+keyboard_value_vol_up:
+471a 58000004 setarg 0x000004 
+471b 20204716 branch keyboard_consumer_value_store 
+
+keyboard_value_mute:
+471c 58000008 setarg 0x000008 
+471d 20204716 branch keyboard_consumer_value_store 
+
+keyboard_value_pre_track:
+471e 58000010 setarg 0x000010 
+471f 20204716 branch keyboard_consumer_value_store 
+
+keyboard_value_next_track:
+4720 58000020 setarg 0x000020 
+4721 20204716 branch keyboard_consumer_value_store 
+
+keyboard_value_play:
+4722 58000040 setarg 0x000040 
+4723 20204716 branch keyboard_consumer_value_store 
+
+keyboard_value_stop:
+4724 58000080 setarg 0x000080 
+4725 20204716 branch keyboard_consumer_value_store 
+
+keyboard_value_ac_home:
+4726 58000100 setarg 0x000100 
+4727 20204716 branch keyboard_consumer_value_store 
+
+keyboard_value_mail:
+4728 58000200 setarg 0x000200 
+4729 20204716 branch keyboard_consumer_value_store 
+
+keyboard_value_my_computer:
+472a 58000400 setarg 0x000400 
+472b 20204716 branch keyboard_consumer_value_store 
+
+keyboard_value_ac_favorites:
+472c 58000800 setarg 0x000800 
+472d 20204716 branch keyboard_consumer_value_store 
+
+keyboard_value_calculator:
+472e 58001000 setarg 0x001000 
+472f 20204716 branch keyboard_consumer_value_store 
+
+keyboard_value_ac_search:
+4730 58002000 setarg 0x002000 
+4731 20204716 branch keyboard_consumer_value_store 
+
+keyboard_value_ac_back:
+4732 6fe0caa1 fetch 1 ,mem_kb_computer_system 
+4733 c0014726 beq system_os_ios ,keyboard_value_ac_home 
+4734 c001c726 beq system_os_mac ,keyboard_value_ac_home 
+4735 58004000 setarg 0x004000 
+4736 20204716 branch keyboard_consumer_value_store 
+
+keyboard_value_os_soft_kb:
+4737 6fe0caa1 fetch 1 ,mem_kb_computer_system 
+4738 c000c73b beq system_os_android ,keyboard_value_os_soft_kb_android 
+4739 58010000 setarg 0x010000 
+473a 20204716 branch keyboard_consumer_value_store 
+
+keyboard_value_os_soft_kb_android:
+473b 58008000 setarg 0x008000 
+473c 20204716 branch keyboard_consumer_value_store 
+
+keyboard_value_light_down:
+473d 58020000 setarg 0x020000 
+473e 20204716 branch keyboard_consumer_value_store 
+
+keyboard_value_light_up:
+473f 58040000 setarg 0x040000 
+4740 20204716 branch keyboard_consumer_value_store 
+
+keyboard_value_os_lock:
+4741 58080000 setarg 0x080000 
+4742 20204716 branch keyboard_consumer_value_store 
+
+keyboard_value_mac_eject:
+4743 58100000 setarg 0x100000 
+4744 20204716 branch keyboard_consumer_value_store 
+
+keyboard_value_ac_forward:
+4745 58200000 setarg 0x200000 
+4746 20204716 branch keyboard_consumer_value_store 
+
+keyboard_value_ac_stop:
+4747 58400000 setarg 0x400000 
+4748 20204716 branch keyboard_consumer_value_store 
+
+keyboard_value_ac_refresh:
+4749 58800000 setarg 0x800000 
+474a 20204716 branch keyboard_consumer_value_store 
+
+keyboard_value_consumer_all_key_release:
+
+keyboard_value_consumer_release:
+474b 7049a902 jam 2 ,mem_keyboard_data_change_flag 
+474c 6fe0c9a6 fetch 1 ,mem_keyboard_all_press_key_count 
+474d 205a46ef call keyboard_value_release_all_key ,blank 
+474e 704aa000 jam keyboard_consumer_key_standby ,mem_keyboard_consumer_key_status 
+474f 58000005 setarg hid_reportid_bit_consumer_key 
+4750 67e1ca6f store 3 ,mem_keyboard_tx_data 
+4751 202046e6 branch keyboard_motion_data_check_next 
+
+keyboard_value_system_sleep:
+4752 704a6f02 jam hid_reportid_system_ctrl ,mem_keyboard_tx_data 
+4753 58000002 setarg 0x02 
+4754 67e0ca70 store 1 ,mem_keyboard_tx_data + 1 
+4755 202046e6 branch keyboard_motion_data_check_next 
+
+keyboard_device_data_tpye_check:
+4756 6fe0c678 fetch 1 ,mem_device_flag 
+4757 c080475d bne mode_24g_device ,keyboard_device_data_tpye_check_next 
+4758 704a8000 jam 0 ,mem_24g_repeat_send_flag 
+4759 6fe14a6f fetch 2 ,mem_keyboard_tx_data 
+475a 245a47e4 ncall keyboard_set_repeat_send_flag ,blank 
+475b 6fe34a72 fetch 6 ,mem_keyboard_tx_data + 3 
+475c 245a47e4 ncall keyboard_set_repeat_send_flag ,blank 
+
+keyboard_device_data_tpye_check_next:
+475d 2040684b call hid_device_clear_key_data 
+475e 704a7900 jam device_data_tpye_keyboard ,mem_keyboard_data_send_flag 
+475f 44aec00b bpatch patch0b_5 ,mem_patch0b 
+4760 6fe0ca6f fetch 1 ,mem_keyboard_tx_data 
+4761 c000476d beq hid_reportid_key_standard ,keyboard_standard_data_send 
+4762 c000c768 beq hid_reportid_mouse ,keyboard_mouse_data_send 
+4763 c001c780 beq hid_reportid_consumer_key ,keyboard_consumer_data_send 
+4764 c002c785 beq hid_reportid_bit_consumer_key ,keyboard_bit_consumer_data_send 
+4765 c0014787 beq hid_reportid_system_ctrl ,keyboard_system_control_data_send 
+4766 c004478c beq hid_reportid_n_key_rollover ,keyboard_n_key_rollover_send 
+4767 20600000 rtn 
+
+keyboard_mouse_data_send:
+4768 704a7901 jam device_data_tpye_mouse ,mem_keyboard_data_send_flag 
+4769 d8c04a70 arg mem_keyboard_tx_data + 1 ,contr 
+476a d8a0465c arg mem_mouse_key ,contw 
+476b df200007 arg 7 ,loopcnt 
+476c 20207cdc branch memcpy 
+
+keyboard_standard_data_send:
+476d 6fe0c678 fetch 1 ,mem_device_flag 
+476e c0804772 bne mode_24g_device ,keyboard_standard_data_send_end 
+476f 204047d9 call keyboard_24g_led_get_status_check 
+4770 6fe0ca81 fetch 1 ,mem_keyboard_led_status_get 
+4771 67e0ca71 store 1 ,mem_keyboard_tx_data + 2 
+
+keyboard_standard_data_send_end:
+4772 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+4773 c2914778 bbit1 keyboard_enable_magic_keyboard ,keyboard_magic_data_send 
+4774 d8c04a6f arg mem_keyboard_tx_data ,contr 
+4775 d8a04721 arg mem_customer_key_press ,contw 
+4776 df200009 arg 9 ,loopcnt 
+4777 20207cdc branch memcpy 
+
+keyboard_magic_data_send:
+4778 704a7800 jam 0 ,mem_keyboard_tx_data + 9 
+4779 6fe0ca7a fetch 1 ,mem_keyboard_fn_flag 
+477a 203a477c branch keyboard_magic_data_send_end ,blank 
+477b 704a7801 jam 1 ,mem_keyboard_tx_data + 9 
+
+keyboard_magic_data_send_end:
+477c d8c04a6f arg mem_keyboard_tx_data ,contr 
+477d d8a04721 arg mem_customer_key_press ,contw 
+477e df20000a arg 10 ,loopcnt 
+477f 20207cdc branch memcpy 
+
+keyboard_consumer_data_send:
+4780 58000003 setarg hid_reportid_consumer_key 
+
+keyboard_consumer_data_store:
+4781 67e0c721 store 1 ,mem_customer_key_press 
+4782 6fe1ca70 fetch 3 ,mem_keyboard_tx_data + 1 
+4783 67e1c722 store 3 ,mem_customer_key_press + 1 
+4784 20600000 rtn 
+
+keyboard_bit_consumer_data_send:
+4785 58000005 setarg hid_reportid_bit_consumer_key 
+4786 20204781 branch keyboard_consumer_data_store 
+
+keyboard_system_control_data_send:
+4787 58000002 setarg hid_reportid_system_ctrl 
+4788 67e0c721 store 1 ,mem_customer_key_press 
+4789 6fe0ca70 fetch 1 ,mem_keyboard_tx_data + 1 
+478a 67e0c722 store 1 ,mem_customer_key_press + 1 
+478b 20600000 rtn 
+
+keyboard_n_key_rollover_send:
+478c 58000008 setarg hid_reportid_n_key_rollover 
+478d 67e0c721 store 1 ,mem_customer_key_press 
+478e 20600000 rtn 
+
+keyboard_lpm_before_common:
+478f 44af400b bpatch patch0b_6 ,mem_patch0b 
+4790 20407de6 call clear_wake 
+4791 6848c90f fetcht 1 ,mem_keyboard_pb_button_gpio 
+4792 20406eac call gpio_set_wake 
+4793 6fe1494a fetch 2 ,mem_kb_col_ptr 
+4794 1fe22400 copy pdata ,regb 
+4795 df200014 arg 20 ,loopcnt 
+
+keyboard_key_col_wake_init:
+4796 e8408012 ifetcht 1 ,regb 
+4797 284ffe07 isolate1 7 ,temp 
+4798 2440eef1 ncall gpio_out_active ,true 
+4799 1a40a401 increase 1 ,regb 
+479a c2004796 loop keyboard_key_col_wake_init 
+479b 20403f1b call keyboard_gpio_pu_idle 
+479c 70488c00 jam 0 ,mem_qdec_set_flag 
+479d 6fe14948 fetch 2 ,mem_kb_row_ptr 
+479e 1fe22400 copy pdata ,regb 
+479f df200008 arg 8 ,loopcnt 
+
+keyboard_key_row_wake_init:
+47a0 e8408012 ifetcht 1 ,regb 
+47a1 18467cff sub temp ,ui_button_gpio_disable ,null 
+47a2 2442bf29 ncall keyboard_key_row_wake_set ,zero 
+47a3 1a40a401 increase 1 ,regb 
+47a4 c20047a0 loop keyboard_key_row_wake_init 
+47a5 20406f4b call lpm_puchk_set_check 
+47a6 6848c666 fetcht 1 ,mem_device_reuse_2ice_gpio 
+47a7 20404f0a call device_gpio_config_input_pu 
+47a8 20404f0e call mouse_gpio_set_analog 
+47a9 202040dd branch keyboard_adc_gpio_set_before_hibernate 
+
+keyboard_process_lpm_before:
+47aa c6130000 rtnmark1 mark_24g 
+47ab 2020478f branch keyboard_lpm_before_common 
+
+keyboard_before_hibernate:
+47ac 44afc00b bpatch patch0b_7 ,mem_patch0b 
+47ad 20407388 call disable_authrom 
+47ae 202047b3 branch keyboard_setgpio_hibernate 
+
+keyboard_power_down:
+47af 44b0400c bpatch patch0c_0 ,mem_patch0c 
+47b0 20404161 call keyboard_device_led_all_off 
+
+keyboard_app_enter_hibernate:
+47b1 204047b3 call keyboard_setgpio_hibernate 
+47b2 2020379c branch app_enter_hibernate 
+
+keyboard_setgpio_hibernate:
+47b3 44b0c00c bpatch patch0c_1 ,mem_patch0c 
+47b4 20407de6 call clear_wake 
+47b5 20404161 call keyboard_device_led_all_off 
+47b6 20404203 call keyboard_rgb_off 
+47b7 2020478f branch keyboard_lpm_before_common 
+
+keyboard_24g_pairing_complete:
+47b8 204047e1 call keyboard_get_24g_led_enable 
+47b9 20405535 call mouse_no_data_timer_init 
+47ba d8e00000 arg keyboard_24g_pairing_flag ,queue 
+47bb 20404a29 call keyboard_disable_function_flag 
+47bc 58000000 setarg 0 
+47bd 67e145ef store 2 ,mem_24g_pair_timeout 
+47be 67e145f5 store 2 ,mem_24g_reconn_timeout 
+47bf 67e0c613 store 1 ,mem_24g_conn_sm 
+47c0 67e0c8fd store 1 ,mem_mouse_move_flag 
+47c1 67e0c5f9 store 1 ,mem_24g_reconn_type 
+47c2 6fe245a6 fetch 4 ,mem_24g_addr 
+47c3 67e245ff store 4 ,mem_24g_receiver_addr 
+47c4 67e246a3 store 4 ,mem_device_24g_addr 
+47c5 204047d3 call keyboard_24g_fast_conn_check 
+47c6 6fe0caa2 fetch 1 ,mem_keyboard_device_info_store_flag 
+47c7 79207e02 set1 keyboard_store_eepromm_flag_g24_addr ,pdata 
+47c8 67e0caa2 store 1 ,mem_keyboard_device_info_store_flag 
+47c9 202044b9 branch keyboard_store_device_info_delay 
+
+keyboard_24g_attempt_success:
+47ca 204047e1 call keyboard_get_24g_led_enable 
+47cb 6fe245a6 fetch 4 ,mem_24g_addr 
+47cc 67e245ff store 4 ,mem_24g_receiver_addr 
+47cd 67e246a3 store 4 ,mem_device_24g_addr 
+47ce 20403530 call g24_ch_syncword_crc8_init 
+47cf 204047d3 call keyboard_24g_fast_conn_check 
+47d0 70461300 jam 0 ,mem_24g_conn_sm 
+47d1 7045f900 jam 0 ,mem_24g_reconn_type 
+47d2 20205535 branch mouse_no_data_timer_init 
+
+keyboard_24g_fast_conn_check:
+47d3 6fe245a6 fetch 4 ,mem_24g_addr 
+47d4 684a45fb fetcht 4 ,mem_24g_fast_conn_addr 
+47d5 98467c00 isub temp ,null 
+47d6 2422d3c1 nbranch mouse_bluetooth_fast_conn_disable ,zero 
+47d7 70474fff jam 0xff ,mem_device_fast_conn_flag 
+47d8 20600000 rtn 
+
+keyboard_24g_led_get_status_check:
+47d9 df200006 arg 6 ,loopcnt 
+47da d8c04a72 arg mem_keyboard_tx_data + 3 ,contr 
+
+keyboard_24g_led_data_check:
+47db efe08006 ifetch 1 ,contr 
+47dc c029c7e1 beq hid_key_num_lock ,keyboard_get_24g_led_enable 
+47dd c01cc7e1 beq hid_key_caps_lock ,keyboard_get_24g_led_enable 
+47de c023c7e1 beq hid_key_scroll_lock ,keyboard_get_24g_led_enable 
+47df c20047db loop keyboard_24g_led_data_check 
+47e0 20600000 rtn 
+
+keyboard_get_24g_led_enable:
+47e1 704a8103 jam 0x03 ,mem_keyboard_led_status_get 
+47e2 7049a901 jam 1 ,mem_keyboard_data_change_flag 
+47e3 20600000 rtn 
+
+keyboard_set_repeat_send_flag:
+47e4 704a8001 jam 1 ,mem_24g_repeat_send_flag 
+47e5 20600000 rtn 
+
+keyboard_24g_attempt_fail:
+47e6 6fe0c617 fetch 1 ,mem_24g_attempt_fail_flag 
+47e7 243a47fb nbranch keyboard_24g_hibernate_set ,blank 
+47e8 6fe0c5f9 fetch 1 ,mem_24g_reconn_type 
+47e9 c00147f3 beq fast_conn_and_3_0_addr ,keyboard_24g_fast_conn_attempt_fail 
+47ea c000c7f3 beq fast_conn_and_receiver ,keyboard_24g_fast_conn_attempt_fail 
+47eb c001c7ed beq receiver_and_3_0_addr ,keyboard_24g_attempt_fail_enter_hibernate 
+47ec 202047ed branch keyboard_24g_attempt_fail_enter_hibernate 
+
+keyboard_24g_attempt_fail_enter_hibernate:
+47ed 20404804 call keyboard_24g_stop 
+47ee 6fe0c73f fetch 1 ,mem_reconn_times 
+47ef 243a5836 nbranch mouse_polling_device ,blank 
+47f0 6fe0c678 fetch 1 ,mem_device_flag 
+47f1 c00047af beq mode_24g_device ,keyboard_power_down 
+47f2 20600000 rtn 
+
+keyboard_24g_fast_conn_attempt_fail:
+47f3 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+47f4 c288d952 bbit1 keyboard_enable_auto_24g_paring ,mouse_24g_start_auto_pair 
+47f5 c3095988 bbit0 keyboard_enable_24g_auto_pair_nerver_been_paired ,mouse_24g_reconn_dongle_start 
+47f6 6fe246a3 fetch 4 ,mem_device_24g_addr 
+47f7 684a46f8 fetcht 4 ,mem_device_compare_addr 
+47f8 98467c00 isub temp ,null 
+47f9 2022c680 branch keyboard_24g_start_pair_mode ,zero 
+47fa 20205988 branch mouse_24g_reconn_dongle_start 
+
+keyboard_24g_hibernate_set:
+47fb 44b1400c bpatch patch0c_2 ,mem_patch0c 
+47fc 70461700 jam 0 ,mem_24g_attempt_fail_flag 
+47fd 20403620 call g24_transmit_next_packet 
+47fe 5fffffff setarg -1 
+47ff 67e445c6 store 8 ,mem_24g_enter_hibernate 
+4800 58000000 setarg 0 
+4801 67e3c65c store 7 ,mem_mouse_key 
+4802 70473701 jam 1 ,mem_24g_shutdown_flag 
+4803 20204821 branch keyboard_g24_long_sleep 
+
+keyboard_24g_stop:
+4804 793f8026 set0 mark_24g ,mark 
+4805 70461300 jam state_24g_stop ,mem_24g_conn_sm 
+4806 d8e00000 arg keyboard_24g_pairing_flag ,queue 
+4807 20204a29 branch keyboard_disable_function_flag 
+
+keyboard_g24_reconn_dispatch:
+4808 6fe145f7 fetch 2 ,mem_24g_reconn_count 
+4809 1fe17ee0 and_into 0xe0 ,pdata 
+480a 203a480f branch keyboard_g24_reconn_dispatch_next ,blank 
+480b 6fe145f7 fetch 2 ,mem_24g_reconn_count 
+480c 1fe0fe01 increase 1 ,pdata 
+480d 67e145f7 store 2 ,mem_24g_reconn_count 
+480e 20600000 rtn 
+
+keyboard_g24_reconn_dispatch_next:
+480f 20403557 call g24_reconn_data_prep 
+4810 2040362a call g24_transmit_receive_ack 
+4811 242c355e nbranch g24_reconn_device_fail ,sync 
+4812 2437b55e nbranch g24_reconn_device_fail ,user3 
+4813 204068bc call hid_device_g24_ackpayload_parse 
+4814 20203540 branch g24_reconn_dispatch_next + 5 
+
+keyboard_g24_transmit_no_interrupt:
+4815 204035fd call g24_txdata_prep 
+4816 2434481a nbranch keyboard_g24_nodata_transmit ,user 
+
+keyboard_g24_transmit_start:
+4817 20404828 call keyboard_g24_transmit_process 
+4818 20404855 call keyboard_power_ctrl_start 
+4819 2020485b branch keyboard_g24_transmit_start_next 
+
+keyboard_g24_nodata_transmit:
+481a 6fe4494e fetch 8 ,mem_keyscan_value_current 
+481b 243a485b nbranch keyboard_g24_transmit_start_next ,blank 
+481c 6fe44956 fetch 8 ,mem_keyscan_value_current + 8 
+481d 243a485b nbranch keyboard_g24_transmit_start_next ,blank 
+481e 6fe2495e fetch 4 ,mem_keyscan_value_current + 16 
+481f 243a485b nbranch keyboard_g24_transmit_start_next ,blank 
+4820 2040367c call g24_search_receiver 
+
+keyboard_g24_long_sleep:
+4821 20404848 call keyboard_g24_lpm_wait 
+4822 24740000 nrtn user 
+4823 2040369e call g24_setgpio_lpm_before 
+4824 6fe0c737 fetch 1 ,mem_24g_shutdown_flag 
+4825 245a47b3 ncall keyboard_setgpio_hibernate ,blank 
+4826 6fe445c6 fetch 8 ,mem_24g_enter_hibernate 
+4827 202035fa branch g24_long_seep2 
+
+keyboard_g24_transmit_process:
+4828 44b1c00c bpatch patch0c_3 ,mem_patch0c 
+4829 70461800 jam 0 ,mem_24g_retry 
+
+keyboard_g24_transmit_loop:
+482a 69610040 fetchr timeup ,2 ,mem_param_rx_setup 
+482b 34730200 until clkn_rt ,meet 
+482c 2040362a call g24_transmit_receive_ack 
+482d 6fe0c596 fetch 1 ,mem_24g_no_ack 
+482e c000b61f beq no_ack_24g ,g24_transmit_no_ack 
+482f 242c4834 nbranch keyboard_g24_retransmit ,sync 
+4830 2437c834 nbranch keyboard_g24_retransmit ,user3 
+4831 204068bc call hid_device_g24_ackpayload_parse 
+4832 70473700 jam 0 ,mem_24g_shutdown_flag 
+4833 2020361f branch g24_transmit_no_ack 
+
+keyboard_g24_retransmit:
+4834 6fe0c619 fetch 1 ,mem_24g_abort_pac 
+4835 247a0000 nrtn blank 
+4836 6fe14615 fetch 2 ,mem_24g_txfail_cnt 
+4837 1fe0fe01 increase 1 ,pdata 
+4838 67e14615 store 2 ,mem_24g_txfail_cnt 
+4839 6fe0c615 fetch 1 ,mem_24g_txfail_cnt 
+483a c07fb64f beq 0xff ,g24_tx_attempt_fail 
+483b 6fe0c618 fetch 1 ,mem_24g_retry 
+483c 1fe0fe01 increase 1 ,pdata 
+483d 67e0c618 store 1 ,mem_24g_retry 
+483e 1fe17e03 and_into 0x03 ,pdata 
+483f 203a4841 branch keyboard_g24_tx_fast_hop ,blank 
+4840 2020482a branch keyboard_g24_transmit_loop 
+
+keyboard_g24_tx_fast_hop:
+4841 20404330 call kscan_dispatch 
+4842 6fe0c8a6 fetch 1 ,mem_keyboard_switch_device_flag 
+4843 243a6c99 nbranch soft_reset_chip ,blank 
+4844 6fe0ca9b fetch 1 ,mem_keyboard_commbination_press_type 
+4845 243a361f nbranch g24_transmit_no_ack ,blank 
+4846 20403675 call g24_tx_fast_hop 
+4847 2020482a branch keyboard_g24_transmit_loop 
+
+keyboard_g24_lpm_wait:
+4848 78347c00 enable user 
+4849 204023f0 call lpo_calibration 
+484a 6fe1c0bd fetch 3 ,mem_clks_per_lpo 
+484b 203a7dbe branch disable_user ,blank 
+484c 6fe0ca7a fetch 1 ,mem_keyboard_fn_flag 
+484d 243a7dbe nbranch disable_user ,blank 
+484e 6fe0ca7b fetch 1 ,mem_keyboard_control_key_flag 
+484f 243a7dbe nbranch disable_user ,blank 
+4850 6fe0ca9f fetch 1 ,mem_keyboard_commbination_control_key_delay_release_timer 
+4851 243a7dbe nbranch disable_user ,blank 
+4852 6fe0c62f fetch 1 ,mem_24g_transmit_by_interrupt 
+4853 c000fdbe beq g24_tx_timer_int_enable ,disable_user 
+4854 20203699 branch g24_lpm_wait + 5 
+
+keyboard_power_ctrl_start:
+4855 6fe245a6 fetch 4 ,mem_24g_addr 
+4856 684a45fb fetcht 4 ,mem_24g_fast_conn_addr 
+4857 98467c00 isub temp ,null 
+4858 2422b6c9 nbranch power_ctrl_start + 1 ,zero 
+4859 704141aa jam tx_power_factory ,mem_tx_power 
+485a 20600000 rtn 
+
+keyboard_g24_transmit_start_next:
+485b 6fe44622 fetch 8 ,mem_24g_long_sleep_set 
+485c 67e445c6 store 8 ,mem_24g_enter_hibernate 
+485d 6fe14634 fetch 2 ,mem_24g_long_sleep_param_update_timer_init 
+485e 67e14636 store 2 ,mem_24g_long_sleep_param_update_timer 
+
+keyboard_g24_short_sleep:
+485f 44b2400c bpatch patch0c_4 ,mem_patch0c 
+4860 20404848 call keyboard_g24_lpm_wait 
+4861 202035f0 branch g24_short_sleep + 2 
+
+keyboard_24g_package_data:
+4862 c6930000 rtnmark0 mark_24g 
+4863 2040469d call keyboard_motion 
+4864 24740000 nrtn user 
+4865 6fe0c72b fetch 1 ,mem_customer_key 
+4866 243a4868 nbranch keyboard_24g_keyboard_package_data ,blank 
+4867 202059c7 branch mouse_24g_mouse_package_data 
+
+keyboard_24g_keyboard_package_data:
+4868 7045a002 jam type_kb ,mem_24g_data_type 
+4869 6fe0c721 fetch 1 ,mem_customer_key_press 
+486a c004486d beq hid_reportid_n_key_rollover ,keyboard_24g_keyboard_package_n_key_rollover_data 
+486b da20000a arg 10 ,rega 
+486c 20206852 branch hid_device_24g_keyboard_package_data_set 
+
+keyboard_24g_keyboard_package_n_key_rollover_data:
+486d 67e0c9b8 store 1 ,mem_keyboard_n_key_rollover_data 
+486e da20000f arg 15 ,rega 
+486f da4049b8 arg mem_keyboard_n_key_rollover_data ,regb 
+4870 20600000 rtn 
+
+keyboard_24g_search_dongle:
+4871 44b2c00c bpatch patch0c_5 ,mem_patch0c 
+4872 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+4873 c40a8000 rtnbit0 keyboard_enable_24g_search_dongle 
+4874 20206888 branch hid_device_24g_search_dongle 
+
+keyboard_le:
+4875 44b3400c bpatch patch0c_6 ,mem_patch0c 
+4876 20402a06 call le_fifo_check_nearly_full 
+4877 247a0000 nrtn blank 
+4878 6fe0c74f fetch 1 ,mem_device_fast_conn_flag 
+4879 c07fc87d beq 0xff ,keyboard_le_next 
+487a 6fe0c882 fetch 1 ,mem_le_connect_status_flag 
+487b 1fe17e03 and pdata ,0x03 ,pdata 
+487c c1818000 rtnne 0x03 
+
+keyboard_le_next:
+487d 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+487e c2806824 bbit1 keyboard_24g_pairing_flag ,hid_device_le_send_empty_packet 
+487f c281e824 bbit1 keyboard_bt_discovery_button_down_flag ,hid_device_le_send_empty_packet 
+4880 c2826824 bbit1 keyboard_bt_discovery_button_long_down_flag ,hid_device_le_send_empty_packet 
+4881 2040469d call keyboard_motion 
+4882 24740000 nrtn user 
+4883 20404fd1 call mouse_wheel_trigger 
+4884 2020683c branch hid_device_send_package_data_check 
+
+keyboard_le_fill_n_key_rollover_key_data:
+4885 7047730e jam 14 ,mem_le_data_len 
+4886 6849439f fetcht 2 ,mem_le_notify_handle 
+4887 6fe0c773 fetch 1 ,mem_le_data_len 
+4888 1fe22200 copy pdata ,rega 
+4889 20402dcc call le_att_malloc_tx_notify 
+488a 6848c773 fetcht 1 ,mem_le_data_len 
+488b 18427200 copy temp ,loopcnt 
+488c d8c049b9 arg mem_keyboard_n_key_rollover_data + 1 ,contr 
+488d 20207cdc branch memcpy 
+
+keyboard_le_fill_standard_key_data:
+488e 70477309 jam 9 ,mem_le_data_len 
+488f 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+4890 c2916831 bbit1 keyboard_enable_magic_keyboard ,keyoard_le_fill_standard_key_data_send 
+4891 70477308 jam 8 ,mem_le_data_len 
+4892 20206831 branch keyoard_le_fill_standard_key_data_send 
+
+keyboard_le_bb_event_connected:
+4893 204041c9 call keyboard_load_rgb 
+4894 70473d00 jam 0 ,mem_mouse_long_mult_flag 
+4895 70475301 jam 1 ,mem_device_le_bb_connected_flag 
+4896 20405960 call mouse_24g_first_store_reconn_info 
+4897 6fe0c754 fetch 1 ,mem_device_le_reconnect_flag 
+4898 243a489a nbranch keyboard_le_bb_event_connected_next ,blank 
+4899 70475514 jam 0x14 ,mem_device_send_secutiry_request_timer 
+
+keyboard_le_bb_event_connected_next:
+489a 6fe143fa fetch app_disc_rsn_size ,mem_app_disconn_reason_flag 
+489b 793ffe00 set0 app_disc_by_button ,pdata 
+489c 67e143fa store app_disc_rsn_size ,mem_app_disconn_reason_flag 
+489d 70472000 jam 0 ,mem_device_direct_timer 
+489e 6fe1477d fetch 2 ,mem_le_battery_level_updata_timer_init 
+489f 67e1477f store 2 ,mem_le_battery_level_updata_timer 
+48a0 20405535 call mouse_no_data_timer_init 
+48a1 202048e9 branch keyboard_stop_discovery 
+
+keyboard_le_bb_disconnected:
+48a2 58000000 setarg 0 
+48a3 67e1477f store 2 ,mem_le_battery_level_updata_timer 
+48a4 67e0c90c store 1 ,mem_keyboard_le_send_conn_param_update 
+48a5 67e0c90d store 1 ,mem_keyboard_le_send_conn_param_update_timer 
+48a6 67e0c753 store 1 ,mem_device_le_bb_connected_flag 
+
+keyboard_le_bb_disconnected_next:
+48a7 70478100 jam le_lpm_enable ,mem_le_conn_param_reject 
+48a8 204029aa call le_clr_config_more_data 
+48a9 70429c00 jam 0 ,mem_ltk_exists 
+48aa 202048ab branch keyboard_bb_disconnected 
+
+keyboard_bb_disconnected:
+48ab 6fe143f8 fetch app_disc_rsn_size ,mem_app_disconn_reason 
+48ac c283c8af bbit1 app_disc_ble ,keyboard_le_event_bb_disconn 
+48ad c2803771 bbit1 app_disc_by_button ,app_disconn_reason_clear 
+48ae 202048c5 branch keyboard_start_discovery 
+
+keyboard_le_event_bb_disconn:
+48af 70488200 jam 0 ,mem_le_connect_status_flag 
+48b0 6fe143f8 fetch app_disc_rsn_size ,mem_app_disconn_reason 
+48b1 c2803771 bbit1 app_disc_by_button ,app_disconn_reason_clear 
+48b2 202047af branch keyboard_power_down 
+
+keyboard_le_ll_start_encryt:
+48b3 6fe0c754 fetch 1 ,mem_device_le_reconnect_flag 
+48b4 c000c8b8 beq 1 ,keyboard_le_ll_reconn_start_encryt 
+48b5 70488314 jam 20 ,mem_le_start_encrypt_timer 
+48b6 70490e05 jam 5 ,mem_le_start_auto_reco_timer 
+48b7 2020540f branch mouse_le_ll_enable_start_enc_flag 
+
+keyboard_le_ll_reconn_start_encryt:
+48b8 20405408 call mouse_updata_le_param 
+48b9 70488305 jam 5 ,mem_le_start_encrypt_timer 
+48ba 2020540f branch mouse_le_ll_enable_start_enc_flag 
+
+keyboard_le_conn_param_update_rsp_recieved:
+48bb 6fe0c90c fetch 1 ,mem_keyboard_le_send_conn_param_update 
+48bc 247a0000 nrtn blank 
+48bd 70490c01 jam 1 ,mem_keyboard_le_send_conn_param_update 
+48be 70490d1e jam 30 ,mem_keyboard_le_send_conn_param_update_timer 
+48bf 20600000 rtn 
+
+keyboard_bb_event_discovery_btn:
+48c0 280ffe26 isolate1 mark_24g ,mark 
+48c1 2040c804 call keyboard_24g_stop ,true 
+48c2 204053c6 call mouse_disconnect 
+48c3 70488200 jam 0 ,mem_le_connect_status_flag 
+48c4 202048c5 branch keyboard_start_discovery 
+
+keyboard_start_discovery:
+48c5 44b3c00c bpatch patch0c_7 ,mem_patch0c 
+48c6 20404163 call keyboard_device_led_all_off + 2 
+48c7 58000000 setarg 0 
+48c8 67e1477f store 2 ,mem_le_battery_level_updata_timer 
+48c9 67e14aa3 store 2 ,mem_otp_store_device_info_flag 
+48ca 704aa1ff jam 0xff ,mem_kb_computer_system 
+48cb 6fe14500 fetch 2 ,mem_ui_state_map 
+48cc 2feffe0b isolate1 ui_state_ble_adv ,pdata 
+48cd 2040d565 call mouse_stop_le_adv ,true 
+48ce 204053c1 call mouse_bluetooth_fast_conn_disable 
+48cf 6fe14500 fetch 2 ,mem_ui_state_map 
+48d0 c285c8d9 bbit1 ui_state_ble_adv ,keyboard_start_discovery_norandom 
+48d1 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+48d2 c30c48d9 bbit0 keyboard_enable_ble_random_addre ,keyboard_start_discovery_norandom 
+48d3 684946a7 fetcht 2 ,mem_random_addr_increase_count 
+48d4 18408401 increase 1 ,temp 
+48d5 604946a7 storet 2 ,mem_random_addr_increase_count 
+48d6 604942de storet 2 ,mem_le_lap + 1 
+48d7 180a7e00 random pdata 
+48d8 67e0c2dd store 1 ,mem_le_lap 
+
+keyboard_start_discovery_norandom:
+48d9 6fe1c756 fetch 3 ,mem_device_le_lap_temp 
+48da 67e1c2e0 store 3 ,mem_le_lap + 3 
+48db 204037a2 call app_lpm_mult_disable 
+48dc 6fe1464f fetch 2 ,mem_device_discovery_timeout 
+48dd 67e14750 store 2 ,mem_device_discovery_timer 
+48de 58000000 setarg 0 
+48df 67e14741 store 2 ,mem_device_no_data_timer 
+48e0 67e1477f store 2 ,mem_le_battery_level_updata_timer 
+48e1 67e0c720 store 1 ,mem_device_direct_timer 
+48e2 d8e00001 arg keyboard_store_memory_flag ,queue 
+48e3 20404a25 call keyboard_enable_function_flag 
+48e4 20404a2f call keyboard_bt_discovery_button_down_disable 
+48e5 20205455 branch mouse_check_51cmd_adv 
+
+keyboard_stop_bluetooth_mode:
+48e6 6fe14500 fetch 2 ,mem_ui_state_map 
+48e7 c284b794 bbit1 ui_state_ble_connected ,app_ble_disconnect 
+48e8 202048e9 branch keyboard_stop_discovery 
+
+keyboard_stop_discovery:
+48e9 44b4400d bpatch patch0d_0 ,mem_patch0d 
+48ea 58000000 setarg 0 
+48eb 67e14750 store 2 ,mem_device_discovery_timer 
+48ec d8e00004 arg keyboard_bt_discovery_button_long_down_flag ,queue 
+48ed 20404a29 call keyboard_disable_function_flag 
+48ee 20405565 call mouse_stop_le_adv 
+48ef 6fe0cac2 fetch 1 ,mem_keyboard_device_poweron_timer 
+48f0 203a4163 branch keyboard_device_led_all_off + 2 ,blank 
+48f1 20600000 rtn 
+
+keyboard_store_remote_bdaddr:
+48f2 44b4c00d bpatch patch0d_1 ,mem_patch0d 
+48f3 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+48f4 c4008000 rtnbit0 keyboard_store_memory_flag 
+48f5 d8e00001 arg keyboard_store_memory_flag ,queue 
+48f6 20404a29 call keyboard_disable_function_flag 
+48f7 204067e4 call hid_device_check_device_addr 
+48f8 204067c1 call hid_device_before_store_reconn_info 
+48f9 6fe0caa2 fetch 1 ,mem_keyboard_device_info_store_flag 
+48fa 79207e01 set1 keyboard_store_eepromm_flag_ble_addr ,pdata 
+48fb 67e0caa2 store 1 ,mem_keyboard_device_info_store_flag 
+48fc 202044b9 branch keyboard_store_device_info_delay 
+
+keyboard_le_send_att_find_by_type_value_request_ancs:
+48fd 7048fe01 jam 1 ,mem_le_connect_ios_mac_flag 
+48fe da200017 arg 23 ,rega 
+48ff da400004 arg le_l2cap_cid_att ,regb 
+4900 204029d9 call le_fifo_malloc_tx_l2cap 
+4901 58000006 setarg attop_find_by_type_value_request 
+4902 e7e08005 istore 1 ,contw 
+4903 58000001 setarg 0x0001 
+4904 e7e10005 istore 2 ,contw 
+4905 5800ffff setarg 0xffff 
+4906 e7e10005 istore 2 ,contw 
+4907 58002800 setarg 0x2800 
+4908 e7e10005 istore 2 ,contw 
+4909 d8c048ee arg mem_le_search_service_uuid ,contr 
+490a 20207c91 branch memcpy16 
+
+keyboard_le_parse_att:
+490b 44b5400d bpatch patch0d_2 ,mem_patch0d 
+490c 1a220c00 copy rega ,contr 
+490d efe18006 ifetch 3 ,contr 
+490e 67e1c39b store 3 ,mem_le_att_opcode 
+490f c000c919 beq attop_error_response ,keyboard_le_send_att_find_by_type_value_request_mac 
+4910 c003c95c beq attop_find_by_type_value_response ,keyboard_le_parse_att_find_by_type_value_rsp 
+4911 c004c938 beq attop_read_by_type_response ,keyboard_le_send_att_read_by_type_rsp_mac 
+4912 c005c952 beq attop_read_response ,keyboard_le_parse_att_manu_resp 
+4913 c0044971 beq attop_read_by_type_request ,keyboard_le_parse_att_read_by_type_request 
+4914 c0064986 beq attop_read_blob_request ,keyboard_le_parse_att_read_blob_request 
+4915 c005499f beq attop_read_request ,keyboard_le_parse_att_read_request 
+4916 c00949c5 beq attop_write_request ,keyboard_le_parse_att_write_request 
+4917 c02949cb beq attop_write_command ,keyboard_le_parse_att_write_command 
+4918 20202b76 branch le_parse_att2 
+
+keyboard_le_send_att_find_by_type_value_request_mac:
+4919 6fe0c8fe fetch 1 ,mem_le_connect_ios_mac_flag 
+491a 207a0000 rtn blank 
+491b 6fe0c8fe fetch 1 ,mem_le_connect_ios_mac_flag 
+491c c0014962 beq 2 ,keyboard_le_parse_att_not_find_mac_report 
+491d 7048fe02 jam 2 ,mem_le_connect_ios_mac_flag 
+491e da200009 arg 9 ,rega 
+491f da400004 arg le_l2cap_cid_att ,regb 
+4920 204029d9 call le_fifo_malloc_tx_l2cap 
+4921 58000006 setarg attop_find_by_type_value_request 
+4922 e7e08005 istore 1 ,contw 
+4923 58000001 setarg 0x0001 
+4924 e7e10005 istore 2 ,contw 
+4925 5800ffff setarg 0xffff 
+4926 e7e10005 istore 2 ,contw 
+4927 58002800 setarg 0x2800 
+4928 e7e10005 istore 2 ,contw 
+4929 df200002 arg 2 ,loopcnt 
+492a d8c048ff arg mem_le_search_mac_uuid ,contr 
+492b 20207cdc branch memcpy 
+
+keyboard_le_parse_att_find_by_type_value_rsp_mac:
+492c da200007 arg 7 ,rega 
+492d da400004 arg le_l2cap_cid_att ,regb 
+492e 204029d9 call le_fifo_malloc_tx_l2cap 
+492f 58000008 setarg attop_read_by_type_request 
+4930 e7e08005 istore 1 ,contw 
+4931 6849433b fetcht 2 ,mem_le_payload_ptr 
+4932 18408405 increase 5 ,temp 
+4933 efe20002 ifetch 4 ,temp 
+4934 e7e20005 istore 4 ,contw 
+4935 58002803 setarg 0x2803 
+4936 e7e10005 istore 2 ,contw 
+4937 20600000 rtn 
+
+keyboard_le_send_att_read_by_type_rsp_mac:
+4938 6fe0c8fe fetch 1 ,mem_le_connect_ios_mac_flag 
+4939 207a0000 rtn blank 
+493a 6fe14337 fetch 2 ,mem_le_l2cap_size 
+493b 1fe0fffe increase -2 ,pdata 
+493c 1fe6fc07 div pdata ,7 
+493d 20407d64 call wait_div_end 
+493e 1807f200 quotient loopcnt 
+493f 6fe1433b fetch 2 ,mem_le_payload_ptr 
+4940 1fe08c06 add pdata ,6 ,contr 
+
+keyboard_le_check_att_read_type_manu_loop:
+4941 18c08c03 increase 3 ,contr 
+4942 efe10006 ifetch 2 ,contr 
+4943 1fe22600 copy pdata ,regc 
+4944 efe10006 ifetch 2 ,contr 
+4945 d8402a29 arg 0x2a29 ,temp 
+4946 98467c00 isub temp ,null 
+4947 2022c94a branch keyboard_le_send_att_read_by_type_rsp_manufactory ,zero 
+4948 c2004941 loop keyboard_le_check_att_read_type_manu_loop 
+4949 20204962 branch keyboard_le_parse_att_not_find_mac_report 
+
+keyboard_le_send_att_read_by_type_rsp_manufactory:
+494a da200003 arg 3 ,rega 
+494b da400004 arg le_l2cap_cid_att ,regb 
+494c 204029d9 call le_fifo_malloc_tx_l2cap 
+494d 5800000a setarg attop_read_request 
+494e e7e08005 istore 1 ,contw 
+494f 1a627e00 copy regc ,pdata 
+4950 e7e10005 istore 2 ,contw 
+4951 20600000 rtn 
+
+keyboard_le_parse_att_manu_resp:
+4952 6fe0c8fe fetch 1 ,mem_le_connect_ios_mac_flag 
+4953 207a0000 rtn blank 
+4954 6fe14337 fetch 2 ,mem_le_l2cap_size 
+4955 df200009 arg 9 ,loopcnt 
+4956 6fe1433b fetch 2 ,mem_le_payload_ptr 
+4957 1fe0a205 add pdata ,5 ,rega 
+4958 da404901 arg mem_le_search_mac_manu_name ,regb 
+4959 20407d66 call string_compare 
+495a 2022c965 branch keyboard_le_parse_att_find_mac_report ,zero 
+495b 20204962 branch keyboard_le_parse_att_not_find_mac_report 
+
+keyboard_le_parse_att_find_by_type_value_rsp:
+495c 6fe0c8fe fetch 1 ,mem_le_connect_ios_mac_flag 
+495d 207a0000 rtn blank 
+495e 6fe0c8fe fetch 1 ,mem_le_connect_ios_mac_flag 
+495f c001492c beq 2 ,keyboard_le_parse_att_find_by_type_value_rsp_mac 
+
+keyboard_le_parse_att_find_ios_report:
+4960 704aa102 jam system_os_ios ,mem_kb_computer_system 
+4961 20204966 branch keyboard_store_computer_system_ble 
+
+keyboard_le_parse_att_not_find_mac_report:
+4962 6fe0c2cd fetch 1 ,mem_le_conn_peer_addr_type 
+4963 67e0caa1 store 1 ,mem_kb_computer_system 
+4964 20204966 branch keyboard_store_computer_system_ble 
+
+keyboard_le_parse_att_find_mac_report:
+4965 704aa103 jam system_os_mac ,mem_kb_computer_system 
+
+keyboard_store_computer_system_ble:
+4966 7048fe00 jam 0 ,mem_le_connect_ios_mac_flag 
+4967 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+4968 c307c96d bbit0 keyboard_enable_otp ,keyboard_store_computer_system_info 
+4969 704aa401 jam 1 ,mem_otp_store_system_flag 
+496a 6fe0caa3 fetch 1 ,mem_otp_store_device_info_flag 
+496b 207a0000 rtn blank 
+496c 20203fee branch keyboard_wirte_otp_ble 
+
+keyboard_store_computer_system_info:
+496d 6fe0caa2 fetch 1 ,mem_keyboard_device_info_store_flag 
+496e 79207e04 set1 keyboard_store_eepromm_flag_computer_system ,pdata 
+496f 67e0caa2 store 1 ,mem_keyboard_device_info_store_flag 
+4970 202044b9 branch keyboard_store_device_info_delay 
+
+keyboard_le_parse_att_read_by_type_request:
+4971 20402e1f call le_get_search_handle_start_end_common 
+4972 20402e28 call le_get_search_att_type 
+
+keyboard_le_send_att_read_by_type_response:
+4973 6849068f fetcht 2 ,mem_le_search_handle_start 
+4974 60490656 storet 2 ,mem_temp 
+4975 20402ca5 call le_init_attlist_search 
+4976 20402cb0 call le_att_get_handle_ptr2 
+4977 18c08dfe increase -2 ,contr 
+4978 18c27e00 copy contr ,pdata 
+4979 67e106a5 store 2 ,mem_le_cur_attlist_start_ptr 
+497a 68490694 fetcht 2 ,mem_le_search_att_type 
+497b 58002a50 setarg uuid_chrctr_pnp_id 
+497c 98467c00 isub temp ,null 
+497d 2022c97f branch keyboard_le_send_att_read_by_type_res_pnp_id ,zero 
+497e 20202c2d branch le_send_att_read_by_type_response + 8 
+
+keyboard_le_send_att_read_by_type_res_pnp_id:
+497f 6fe0c8ce fetch 1 ,mem_keyboard_le_change_vid_pid_flag 
+4980 203a2c2d branch le_send_att_read_by_type_response + 8 ,blank 
+4981 20402cbe call le_att_get_uuid_ptr 
+4982 203a2de1 branch le_send_att_error_response_notfound ,blank 
+4983 d8c048cf arg mem_keyboard_le_change_vid_pid_flag + 1 ,contr 
+4984 18007e0b force 11 ,pdata 
+4985 20202c83 branch le_send_att_read_by_type_res_not_characteristic + 9 
+
+keyboard_le_parse_att_read_blob_request:
+4986 efe10006 ifetch 2 ,contr 
+4987 67e10693 store 2 ,mem_le_att_offset 
+4988 98002200 iforce rega 
+4989 6849439c fetcht 2 ,mem_le_att_handle 
+498a 6fe14334 fetch 2 ,mem_le_pairing_handle 
+498b 98467c00 isub temp ,null 
+498c 2422ad2e nbranch le_send_att_read_blob_response ,zero 
+498d 6fe10693 fetch 2 ,mem_le_att_offset 
+498e 1fe67c42 sub pdata ,66 ,null 
+498f 2422c999 nbranch keyboard_le_send_att_read_blob_response ,zero 
+4990 58000017 setarg 23 
+4991 1fe22200 copy pdata ,rega 
+4992 1fe22600 copy pdata ,regc 
+4993 20402dee call le_fifo_malloc_tx_l2cap_gatt 
+4994 5800000d setarg attop_read_blob_response 
+4995 e7e08005 istore 1 ,contw 
+4996 d8c048d8 arg mem_keyboard_blob_response_consumer_customize ,contr 
+4997 1a60f3ff add regc ,-1 ,loopcnt 
+4998 20207cce branch memcpy_fast 
+
+keyboard_le_send_att_read_blob_response:
+4999 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+499a c291ad2e bbit1 keyboard_enable_mouse ,le_send_att_read_blob_response 
+499b 6fe148d6 fetch 2 ,mem_keyboard_le_hid_map 
+499c 1fe20c00 copy pdata ,contr 
+499d efe10006 ifetch 2 ,contr 
+499e 20202d31 branch le_send_att_read_blob_response + 3 
+
+keyboard_le_parse_att_read_request:
+499f 6849439c fetcht 2 ,mem_le_att_handle 
+49a0 6fe0c323 fetch 1 ,mem_le_configuration 
+49a1 c281c9bf bbit1 bit_ble_read_auth ,keyboard_le_send_att_read_response_check_auth 
+
+keyboard_le_send_att_read_response:
+49a2 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+49a3 c305c9a5 bbit0 keyboard_enable_adc ,keyboard_le_send_att_read_response + 3 
+49a4 c30cc9a7 bbit0 keyboard_enable_le_battery_service_cancel ,keyboard_le_send_att_read_response_next 
+49a5 6fe1439c fetch 2 ,mem_le_att_handle 
+49a6 c0182de1 beq 0x30 ,le_send_att_error_response_notfound 
+
+keyboard_le_send_att_read_response_next:
+49a7 6fe1439c fetch 2 ,mem_le_att_handle 
+49a8 c002c9b7 beq 0x05 ,keyboard_le_send_att_appearance 
+49a9 c00849ba beq 0x10 ,keyboard_le_send_att_pnp_id 
+
+keyboard_le_send_att_read_response_next_1:
+49aa 6849439c fetcht 2 ,mem_le_att_handle 
+49ab 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+49ac c291acfb bbit1 keyboard_enable_mouse ,le_send_att_read_response 
+49ad 6fe14334 fetch 2 ,mem_le_pairing_handle 
+49ae 98467c00 isub temp ,null 
+49af 2422acfb nbranch le_send_att_read_response ,zero 
+49b0 20402e24 call le_get_search_max_mtu_data 
+49b1 684948d6 fetcht 2 ,mem_keyboard_le_hid_map 
+49b2 18420c00 copy temp ,contr 
+49b3 e8410006 ifetcht 2 ,contr 
+49b4 18408401 increase 1 ,temp 
+49b5 20407db2 call not_greater_than 
+49b6 20202d0b branch le_send_att_read_response_less 
+
+keyboard_le_send_att_appearance:
+49b7 d8c0490a arg mem_keybord_appearance ,contr 
+49b8 18007e03 force 3 ,pdata 
+49b9 20202d0b branch le_send_att_read_response_less 
+
+keyboard_le_send_att_pnp_id:
+49ba 6fe0c8ce fetch 1 ,mem_keyboard_le_change_vid_pid_flag 
+49bb 203a49aa branch keyboard_le_send_att_read_response_next_1 ,blank 
+49bc d8c048cf arg mem_keyboard_le_change_vid_pid_flag + 1 ,contr 
+49bd 18007e08 force 8 ,pdata 
+49be 20202d0b branch le_send_att_read_response_less 
+
+keyboard_le_send_att_read_response_check_auth:
+49bf 6fe14334 fetch 2 ,mem_le_pairing_handle 
+49c0 98467c00 isub temp ,null 
+49c1 2422c9a2 nbranch keyboard_le_send_att_read_response ,zero 
+49c2 20402da5 call le_check_encrypt_state 
+49c3 243449a7 nbranch keyboard_le_send_att_read_response_next ,user 
+49c4 20202d24 branch le_send_att_read_response_error_insufficient_auth 
+
+keyboard_le_parse_att_write_request:
+49c5 18c22200 copy contr ,rega 
+49c6 6fe14337 fetch 2 ,mem_le_l2cap_size 
+49c7 1fe0a5fd add pdata ,-3 ,regb 
+49c8 20402908 call le_writeatt_cb 
+49c9 204049cc call keyboard_le_parse_att_write_command + 1 
+49ca 20206878 branch hid_device_le_parse_att_write_request 
+
+keyboard_le_parse_att_write_command:
+49cb 20402dc8 call le_parse_att_write_command 
+49cc 6fe0c74f fetch 1 ,mem_device_fast_conn_flag 
+49cd c07fc9d1 beq 0xff ,keyboard_le_fast_conn_led_get 
+49ce 6fe1439c fetch 2 ,mem_le_att_handle 
+49cf c012c9d4 beq 0x25 ,keyboard_le_led_get 
+49d0 20600000 rtn 
+
+keyboard_le_fast_conn_led_get:
+49d1 6fe1439c fetch 2 ,mem_le_att_handle 
+49d2 c010c9d4 beq 0x21 ,keyboard_le_led_get 
+49d3 20600000 rtn 
+
+keyboard_le_led_get:
+49d4 6fe08055 fetch 1 ,mem_le_rxbuf + 9 
+49d5 67e0c70d store 1 ,mem_keyboard_led_status 
+49d6 20600000 rtn 
+
+keyboard_usb_mode_start:
+49d7 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+49d8 c4060000 rtnbit0 mouse_enable_usb 
+49d9 204049db call keyboard_usb_check_enable 
+49da 202049ec branch keyboard_usb_interface_check_power_on 
+
+keyboard_usb_check_enable:
+49db 6fe4cad1 fetch 9 ,mem_keyboard_usb_vid_pid 
+49dc 67e4883a store 9 ,mem_usb_vid_pid 
+49dd 580049e1 setarg keyboard_usb_config_param 
+49de 67e10837 store 2 ,mem_cb_usb_config 
+49df 704ace5a jam usb_interface_insert ,mem_usb_vdd_status_current 
+49e0 20600000 rtn 
+
+keyboard_usb_config_param:
+49e1 7046775a jam dongle_kb_bind_success ,mem_usb_keyboard_flag 
+49e2 70083901 jam 0x01 ,mem_usb_tx_interval 
+49e3 20407956 call usb_tx_interval_config 
+49e4 204049e7 call keyboard_usb_vid_pid_config 
+49e5 6fe0c677 fetch 1 ,mem_usb_keyboard_flag 
+49e6 20203d2a branch dongle_usb_hid_icon_config + 1 
+
+keyboard_usb_vid_pid_config:
+49e7 6fe0883a fetch 1 ,mem_usb_vid_pid 
+49e8 207a0000 rtn blank 
+49e9 6fe0c677 fetch 1 ,mem_usb_keyboard_flag 
+49ea c02d3d27 beq dongle_kb_bind_success ,dongle_usb_vid_pid_for_suit 
+49eb 20203d24 branch dongle_usb_vid_pid_for_mouse_only_auto_pair 
+
+keyboard_usb_interface_check_power_on:
+49ec 6fe0cace fetch 1 ,mem_usb_vdd_status_current 
+49ed c02d49f1 beq usb_interface_insert ,keyboard_usb_insert 
+
+keyboard_usb_vdd_status_store:
+49ee 6fe0cace fetch 1 ,mem_usb_vdd_status_current 
+49ef 67e0cacf store 1 ,mem_usb_vdd_status_last 
+49f0 20600000 rtn 
+
+keyboard_usb_insert:
+49f1 204049ee call keyboard_usb_vdd_status_store 
+49f2 58000000 setarg 0 
+49f3 67e145ef store 2 ,mem_24g_pair_timeout 
+49f4 67e145f5 store 2 ,mem_24g_reconn_timeout 
+49f5 70409400 jam 0 ,mem_lpm_mode 
+49f6 6fe0cad0 fetch 1 ,mem_usb_wait_updata_timer 
+49f7 205a7902 call usb_init ,blank 
+49f8 704ad032 jam 50 ,mem_usb_wait_updata_timer 
+49f9 20600000 rtn 
+
+keyboard_usb_isr:
+49fa 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+49fb c4120000 rtnbit0 keyboard_enable_usb 
+49fc 6fe0c678 fetch 1 ,mem_device_flag 
+49fd c1820000 rtnne mode_usb_device 
+49fe 202078f6 branch usb_isr 
+
+keyboard_usb_mode:
+49ff 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+4a00 c4120000 rtnbit0 keyboard_enable_usb 
+4a01 6fe0c678 fetch 1 ,mem_device_flag 
+4a02 c1820000 rtnne mode_usb_device 
+4a03 6ff08c01 fetch 1 ,core_usb_addr 
+4a04 67e0c675 store 1 ,mem_usb_addr 
+4a05 c4038000 rtnbit0 7 
+4a06 704ad000 jam 0 ,mem_usb_wait_updata_timer 
+4a07 58000000 setarg 0 
+4a08 67e14741 store 2 ,mem_device_no_data_timer 
+4a09 20404804 call keyboard_24g_stop 
+4a0a 204048e6 call keyboard_stop_bluetooth_mode 
+4a0b 2040469d call keyboard_motion 
+4a0c 24740000 nrtn user 
+4a0d 6fe0c72b fetch 1 ,mem_customer_key 
+4a0e c000e85b beq 1 ,hid_device_push_keyboard_data_to_usb 
+4a0f 20206856 branch hid_device_push_mouse_data_to_usb 
+
+keyboard_usb_tx_kb_normal_data:
+4a10 7008e900 jam 0 ,mem_usb_ep1_data 
+4a11 df200009 arg 9 ,loopcnt 
+4a12 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+4a13 c2917c24 bbit1 keyboard_enable_magic_keyboard ,usb_tx_kb_normal_data + 4 
+4a14 20207c22 branch usb_tx_kb_normal_data + 2 
+
+keyboard_push_n_key_rollover_key_data_to_usb:
+4a15 20403d53 call dongle_usb_tx_enable_ep2 
+4a16 7008ea24 jam usb_ep2_n_key_rollover ,mem_usb_ep2_data 
+4a17 58000008 setarg kb_n_key_rollover_report_id 
+4a18 67e08911 store 1 ,mem_usb_kb_n_key_rollvoer_data 
+4a19 d8c049b9 arg mem_keyboard_n_key_rollover_data + 1 ,contr 
+4a1a d8a00912 arg mem_usb_kb_n_key_rollvoer_data + 1 ,contw 
+4a1b df20000e arg 14 ,loopcnt 
+4a1c 20207cdc branch memcpy 
+
+keyboard_ui_ipc_send_event:
+4a1d 6fe0864d fetch 1 ,mem_fifo_temp 
+4a1e df200008 arg 8 ,loopcnt 
+4a1f d8c044ea arg mem_ipc_fifo_bt2c51 ,contr 
+
+ui_ipc_fifo_check:
+4a20 e8408006 ifetcht 1 ,contr 
+4a21 98467c00 isub temp ,null 
+4a22 20628000 rtn zero 
+4a23 c2004a20 loop ui_ipc_fifo_check 
+4a24 2020781c branch ui_ipc_send_event + 3 
+
+keyboard_enable_function_flag:
+4a25 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+4a26 f9207e00 qset1 pdata 
+4a27 67e4488e store keyboard_flag_len ,mem_keyboard_flag 
+4a28 20600000 rtn 
+
+keyboard_disable_function_flag:
+4a29 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+4a2a f93ffe00 qset0 pdata 
+4a2b 67e4488e store keyboard_flag_len ,mem_keyboard_flag 
+4a2c 20600000 rtn 
+
+keyboard_bt_discovery_button_down_enable:
+4a2d d8e00003 arg keyboard_bt_discovery_button_down_flag ,queue 
+4a2e 20204a25 branch keyboard_enable_function_flag 
+
+keyboard_bt_discovery_button_down_disable:
+4a2f d8e00003 arg keyboard_bt_discovery_button_down_flag ,queue 
+4a30 20204a29 branch keyboard_disable_function_flag 
+
+module_init:
+4a31 2035ca43 branch module_lpm_uart_init ,wake 
+4a32 20402931 call le_modified_name 
+4a33 58004a5e setarg module_process_idle 
+4a34 67e143e4 store 2 ,mem_cb_idle_process 
+4a35 58004a61 setarg module_process_bb_event 
+4a36 67e143e6 store 2 ,mem_cb_bb_event_process 
+4a37 58004a5a setarg module_lpm_lock 
+4a38 67e143dc store 2 ,mem_cb_check_wakelock 
+4a39 58004b0a setarg module_hci_cmd_transmit_le_notify 
+4a3a 67e143ea store 2 ,mem_cb_ble_transmit 
+4a3b 58004ce1 setarg module_le_receive_data 
+4a3c 67e143e8 store 2 ,mem_cb_att_write 
+4a3d 58004cf2 setarg module_bb_event_timer 
+4a3e 67e143ec store 2 ,mem_cb_event_timer 
+4a3f 44b6400d bpatch patch0d_4 ,mem_patch0d 
+4a40 20404a43 call module_lpm_uart_init 
+4a41 20404a55 call module_gpio_init 
+4a42 20204c6c branch module_hci_event_enter_standby_mode 
+
+module_lpm_uart_init:
+4a43 6ff08060 fetch 1 ,core_uart_ctrl 
+4a44 793ffe00 set0 bit_uart_control_enable ,pdata 
+4a45 67f08060 store 1 ,core_uart_ctrl 
+4a46 6fe44517 fetch 8 ,mem_module_uart_rx_buffer 
+4a47 20406d5b call uarta_init_dma_mem 
+4a48 6fe1451f fetch uart_baud_len ,mem_module_uarta_baud_rate 
+4a49 20406d66 call uarta_init_baud_rate 
+4a4a 20406d75 call uart_clock_select_main_freq_crystal 
+4a4b 70807708 jam gpcfg_uart_txd ,core_gpio_conf + hci_uart_tx_gpio_num 
+4a4c 70807649 jam gpcfg_uart_rxd | gpcfg_pullup ,core_gpio_conf + hci_uart_rx_gpio_num 
+4a4d 7080790a jam gpcfg_uart_rts ,core_gpio_conf + hci_uart_rts_gpio_num 
+4a4e 70807a0b jam gpcfg_uart_cts ,core_gpio_conf + hci_uart_cts_gpio_num 
+4a4f d8400081 arg fun_uart_control_enable | fun_uart_control_setting_rate_baud ,temp 
+4a50 6fe14526 fetch 2 ,mem_module_flag 
+4a51 2feffe00 isolate1 module_flag_uart_flow_control ,pdata 
+4a52 79208404 setflag true ,bit_uart_control_flow_control ,temp 
+4a53 60588060 storet 1 ,core_uart_ctrl 
+4a54 20600000 rtn 
+
+module_gpio_init:
+4a55 6848c50c fetcht 1 ,mem_module_connect_state_gpio 
+4a56 20406ef1 call gpio_config_output 
+4a57 20404a84 call module_set_conn_pin_low 
+4a58 6848c50a fetcht 1 ,mem_module_wake_up_gpio 
+4a59 20206ed7 branch gpio_config_input 
+
+module_lpm_lock:
+4a5a 6848c50a fetcht 1 ,mem_module_wake_up_gpio 
+4a5b 20406ee0 call gpio_get_bit 
+4a5c 2420b77f nbranch app_put_lpm_wake_lock ,true 
+4a5d 2020377d branch app_get_lpm_wake_lock 
+
+module_process_idle:
+4a5e 20406935 call l2cap_malloc_is_fifo_full 
+4a5f 247a0000 nrtn blank 
+4a60 20204a86 branch module_process_check_hci_command_complete 
+
+module_process_bb_event:
+4a61 1a627e00 copy regc ,pdata 
+4a62 c00a4a73 beq bt_evt_le_connected ,module_process_le_conn 
+4a63 c00aca6f beq bt_evt_le_disconnected ,module_process_bb_even_le_disconn 
+4a64 c0184ca6 beq bt_evt_le_pairing_fail ,module_hci_event_le_pairing_fail 
+4a65 c018cca8 beq bt_evt_le_pairing_success ,module_hci_event_le_pairing_success 
+4a66 c0194cb2 beq bt_evt_le_start_enc ,module_hci_event_start_enc 
+4a67 c019ccb0 beq bt_evt_le_pause_enc ,module_hci_event_pause_enc 
+4a68 c01a4ca0 beq bt_evt_le_tk_generate ,module_hci_event_le_tk 
+4a69 c01ecc80 beq bt_evt_store_nvram ,module_hci_event_store_device 
+4a6a c020ca79 beq bt_evt_le_ltk_lost ,module_process_ble_ltk_lost 
+4a6b c0214a7b beq bt_evt_le_update_phy ,module_process_ble_update_phy 
+4a6c c021cc9e beq bt_evt_le_get_passkey ,module_hci_event_passkey_entry_mode 
+4a6d c01dcc89 beq bt_evt_le_gkey_generate ,module_hci_event_gkey_generate 
+4a6e 20600000 rtn 
+
+module_process_bb_even_le_disconn:
+4a6f 204029aa call le_clr_config_more_data 
+4a70 70452800 jam 0 ,mem_module_hci_notify_len 
+4a71 20404a77 call module_disconn_start 
+4a72 20204c52 branch module_hci_event_le_disconnect 
+
+module_process_le_conn:
+4a73 20404a7e call module_conn_start 
+4a74 6fe0c515 fetch 1 ,mem_module_le_lpm_mult 
+4a75 67e0c0c0 store 1 ,mem_lpm_mult 
+4a76 20204c50 branch module_hci_event_le_connect 
+
+module_disconn_start:
+4a77 20404ad3 call module_start_adv_discovery_by_command 
+4a78 20204a7c branch module_set_conn_pin_high 
+
+module_process_ble_ltk_lost:
+4a79 204030d1 call le_send_reject_ind 
+4a7a 20202eb3 branch le_send_smp_security_request 
+
+module_process_ble_update_phy:
+4a7b 20204cc2 branch module_hci_event_le_update_phy 
+
+module_set_conn_pin_high:
+4a7c 6848c50c fetcht 1 ,mem_module_connect_state_gpio 
+4a7d 20206ef1 branch gpio_out_active 
+
+module_conn_start:
+4a7e 20404a80 call module_stop_adv_discovery 
+4a7f 20204a84 branch module_set_conn_pin_low 
+
+module_stop_adv_discovery:
+4a80 6fe0c50f fetch 1 ,mem_module_state 
+4a81 2feffe01 isolate1 moudle_state_ble_bit ,pdata 
+4a82 2040b78a call app_ble_stop_adv ,true 
+4a83 20600000 rtn 
+
+module_set_conn_pin_low:
+4a84 6848c50c fetcht 1 ,mem_module_connect_state_gpio 
+4a85 20206eed branch gpio_out_inactive 
+
+module_process_check_hci_command_complete:
+4a86 6ff0810b fetch 1 ,core_uart_status 
+4a87 c3810000 rtnbit1 uart_status_rx_fifo_empty 
+4a88 20406d89 call uarta_prepare_rx 
+4a89 efe08003 ifetch 1 ,contru 
+4a8a c080ca9c bne 0x01 ,module_hci_in_excp 
+4a8b 6ff10112 fetch 2 ,core_uart_rxitems 
+4a8c 1fe67c02 sub pdata ,2 ,null 
+4a8d 20610000 rtn positive 
+4a8e efe08003 ifetch 1 ,contru 
+4a8f 67e086c0 store 1 ,mem_module_uart_opcode 
+4a90 e8408003 ifetcht 1 ,contru 
+4a91 18622200 copy contru ,rega 
+4a92 604886c1 storet 1 ,mem_module_uart_len 
+4a93 18408403 add temp ,3 ,temp 
+4a94 6ff10112 fetch 2 ,core_uart_rxitems 
+4a95 98460400 isub temp ,temp 
+4a96 24610000 nrtn positive 
+4a97 7006c201 jam hci_discard_packet ,mem_module_temp_nl_discard_packet 
+4a98 20404aaa call module_hci_cmd_control 
+4a99 6fe086c2 fetch 1 ,mem_module_temp_nl_discard_packet 
+4a9a c1000000 rtneq hci_not_discard_packet 
+4a9b 20204aa5 branch module_hci_dicard_packet 
+
+module_hci_in_excp:
+4a9c 20407c97 call delay_10ms 
+4a9d 20404c8f call module_hci_event_invalid_packet 
+4a9e 20204a9f branch module_hci_release_except 
+
+module_hci_release_except:
+4a9f 44b6c00d bpatch patch0d_5 ,mem_patch0d 
+4aa0 20406d89 call uarta_prepare_rx 
+4aa1 6ff10112 fetch 2 ,core_uart_rxitems 
+4aa2 207a0000 rtn blank 
+4aa3 98608600 iadd contru ,contru 
+4aa4 20204aa9 branch module_hci_dicard_bytes 
+
+module_hci_dicard_packet:
+4aa5 20406d89 call uarta_prepare_rx 
+4aa6 18608602 increase 2 ,contu 
+4aa7 efe08003 ifetch 1 ,contu 
+4aa8 98608600 iadd contu ,contu 
+
+module_hci_dicard_bytes:
+4aa9 20206d8f branch uarta_rxdone 
+
+module_hci_cmd_control:
+4aaa 44b7400d bpatch patch0d_6 ,mem_patch0d 
+4aab 6fe086c0 fetch 1 ,mem_module_uart_opcode 
+4aac c000cac7 beq hci_cmd_set_le_addr_req ,module_hci_cmd_set_le_addr 
+4aad c0014acc beq hci_cmd_set_visibility_req ,module_hci_cmd_set_visibility 
+4aae c0024ada beq hci_cmd_set_le_name_req ,module_hci_cmd_set_le_name 
+4aaf c004cade beq hci_cmd_le_data_req ,module_hci_cmd_receive_le_data 
+4ab0 c005cb35 beq hci_cmd_status_irq ,module_hci_cmd_inquire_status 
+4ab1 c007cb36 beq hci_cmd_set_uart_baud_req ,module_hci_cmd_set_uart_baud 
+4ab2 c0084b3e beq hci_cmd_version_req ,module_hci_cmd_version_request 
+4ab3 c0094b42 beq hci_cmd_ble_disconnect ,module_hci_cmd_ble_disconnect 
+4ab4 c0134b46 beq hci_cmd_set_nvram_req ,module_hci_cmd_set_nvram 
+4ab5 c0154b4b beq hci_cmd_auto_adv_scan ,module_hci_cmd_auto_adv 
+4ab6 c015cb7e beq hci_cmd_power_req ,module_hci_cmd_power_request 
+4ab7 c0164b84 beq hci_cmd_power_set ,module_hci_cmd_power_set 
+4ab8 c0184b8b beq hci_cmd_passkey_entry ,module_hci_cmd_passkey_entry 
+4ab9 c019cb90 beq hci_cmd_le_set_pairing ,module_hci_cmd_le_set_pairing_mode 
+4aba c01acbbd beq hci_cmd_le_set_scan_data ,module_hci_cmd_le_set_scan_data 
+4abb c01b4bc6 beq hci_cmd_le_send_conn_update_req ,module_hci_cmd_le_send_conn_update_req 
+4abc c01bcbcf beq hci_cmd_le_set_adv_parm ,module_hci_cmd_set_le_adv_parameter 
+4abd c01c4bd5 beq hci_cmd_le_start_pairing ,module_hci_cmd_le_start_pairing 
+4abe c0204bdd beq hci_cmd_set_wake_gpio ,module_hci_cmd_set_wake_gpio 
+4abf c0214be7 beq hci_cmd_set_tx_power ,module_hci_cmd_set_tx_power 
+4ac0 c0244bec beq hci_cmd_le_confirm_gkey ,module_hci_cmd_le_confirm_gkey 
+4ac1 c028cbf7 beq hci_cmd_reset_chip_req ,module_hci_cmd_reset_chip 
+4ac2 c03b4bfb beq hci_cmd_delete_customize_service ,module_hci_cmd_delete_customize_service 
+4ac3 c03bcc01 beq hci_cmd_add_service_uuid ,module_hci_cmd_add_service_uuid 
+4ac4 c03c4c06 beq hci_cmd_add_characteristic_uuid ,module_hci_cmd_add_characteristic_uuid 
+4ac5 c03d4c3c beq hci_cmd_passkey_entry_input ,module_hci_cmd_le_passkey_entry_input 
+4ac6 20204c4a branch module_hci_event_receive_invalid_cmd 
+
+module_hci_cmd_set_le_addr:
+4ac7 6fe086c1 fetch 1 ,mem_module_uart_len 
+4ac8 c0834c4a bne 6 ,module_hci_event_receive_invalid_cmd 
+4ac9 efe30003 ifetch 6 ,contru 
+4aca 67e342dd store 6 ,mem_le_lap 
+4acb 20204c4d branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_set_visibility:
+4acc 6fe086c1 fetch 1 ,mem_module_uart_len 
+4acd c080cc4a bne 1 ,module_hci_event_receive_invalid_cmd 
+4ace e8408003 ifetcht 1 ,contru 
+4acf 6048c516 storet 1 ,mem_module_bluetooth_stauts_by_command 
+4ad0 20404c4d call module_hci_event_receive_valid_cmd 
+4ad1 6fe14500 fetch 2 ,mem_ui_state_map 
+4ad2 c3848000 rtnbit1 ui_state_ble_connected 
+
+module_start_adv_discovery_by_command:
+
+moudle_start_adv_by_command:
+4ad3 6fe0c50f fetch 1 ,mem_module_state 
+4ad4 2feffe01 isolate1 moudle_state_ble_bit ,pdata 
+4ad5 24608000 nrtn true 
+4ad6 6848c516 fetcht 1 ,mem_module_bluetooth_stauts_by_command 
+4ad7 284ffe02 isolate1 2 ,temp 
+4ad8 2020b78c branch app_ble_start_adv ,true 
+4ad9 2020378a branch app_ble_stop_adv 
+
+module_hci_cmd_set_le_name:
+4ada dfe0001d arg 29 ,pdata 
+4adb d8a0426d arg mem_le_name_len ,contw 
+4adc 20404bc0 call module_hci_cmd_receive_store_mem 
+4add 20202931 branch le_modified_name 
+
+module_hci_cmd_receive_le_data:
+4ade 6fe14500 fetch 2 ,mem_ui_state_map 
+4adf c304cc4a bbit0 ui_state_ble_connected ,module_hci_event_receive_invalid_cmd 
+4ae0 20404b32 call module_check_ble_encrypt_state 
+4ae1 20344c4a branch module_hci_event_receive_invalid_cmd ,user 
+4ae2 7006c200 jam hci_not_discard_packet ,mem_module_temp_nl_discard_packet 
+4ae3 6fe14526 fetch 2 ,mem_module_flag 
+4ae4 c2844b03 bbit1 module_flag_ble_data_finish ,module_hci_cmd_receive_le_data_finish 
+4ae5 6fe0c528 fetch 1 ,mem_module_hci_notify_len 
+4ae6 247a0000 nrtn blank 
+4ae7 7006c201 jam hci_discard_packet ,mem_module_temp_nl_discard_packet 
+4ae8 efe10003 ifetch 2 ,contru 
+4ae9 67e14529 store 2 ,mem_module_hci_notify_handle 
+4aea 6061452b storer contru ,2 ,mem_module_hci_nofiy_addr 
+4aeb 6fe086c1 fetch 1 ,mem_module_uart_len 
+4aec 1fe0fffe pincrease -2 
+4aed 24214c4a nbranch module_hci_event_receive_invalid_cmd ,positive 
+4aee 2022cc4a branch module_hci_event_receive_invalid_cmd ,zero 
+4aef 67e0c528 store 1 ,mem_module_hci_notify_len 
+4af0 68494529 fetcht 2 ,mem_module_hci_notify_handle 
+4af1 184085ff increase -1 ,temp 
+4af2 20402cb0 call le_att_get_handle_ptr2 
+4af3 203a4b06 branch module_hci_cmd_transmit_handle_error ,blank 
+4af4 e8420006 ifetcht 4 ,contr 
+4af5 59280302 setarg 0x01280302 
+4af6 98467c00 isub temp ,null 
+4af7 2422cb06 nbranch module_hci_cmd_transmit_handle_error ,zero 
+4af8 efe08006 ifetch 1 ,contr 
+4af9 67e0c52d store 1 ,mem_module_hci_notify_type 
+4afa 1fe17e30 and_into 0x30 ,pdata 
+4afb 203a4b06 branch module_hci_cmd_transmit_handle_error ,blank 
+4afc 7006c200 jam hci_not_discard_packet ,mem_module_temp_nl_discard_packet 
+4afd 204029a8 call le_set_config_more_data 
+4afe 20404b0a call module_hci_cmd_transmit_le_notify 
+4aff 20404b0a call module_hci_cmd_transmit_le_notify 
+4b00 20404b0a call module_hci_cmd_transmit_le_notify 
+4b01 6fe14526 fetch 2 ,mem_module_flag 
+4b02 c4040000 rtnbit0 module_flag_ble_data_finish 
+
+module_hci_cmd_receive_le_data_finish:
+4b03 7006c201 jam hci_discard_packet ,mem_module_temp_nl_discard_packet 
+4b04 20404d07 call module_clear_le_tx_data_flag 
+4b05 20204c4d branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_transmit_handle_error:
+4b06 70452800 jam 0 ,mem_module_hci_notify_len 
+4b07 7006c201 jam hci_discard_packet ,mem_module_temp_nl_discard_packet 
+4b08 20404d07 call module_clear_le_tx_data_flag 
+4b09 20204c4a branch module_hci_event_receive_invalid_cmd 
+
+module_hci_cmd_transmit_le_notify:
+4b0a 6fe0c528 fetch 1 ,mem_module_hci_notify_len 
+4b0b 207a0000 rtn blank 
+4b0c 20402a06 call le_fifo_check_nearly_full 
+4b0d 247a0000 nrtn blank 
+4b0e 20404b2d call module_get_le_remote_mtu 
+4b0f 44b7c00d bpatch patch0d_7 ,mem_patch0d 
+4b10 6fe142e3 fetch 2 ,mem_le_local_mtu 
+4b11 20407db2 call not_greater_than 
+4b12 1fe20400 copy pdata ,temp 
+4b13 6fe0c39a fetch 1 ,mem_le_l2cap_att_states 
+4b14 c3800000 rtnbit1 ble_l2cap_recv_confirmation_packet 
+4b15 1840fffd add temp ,-3 ,pdata 
+4b16 d84000fb arg 251 ,temp 
+4b17 20407db2 call not_greater_than 
+4b18 6848c528 fetcht 1 ,mem_module_hci_notify_len 
+4b19 20407db2 call not_greater_than 
+4b1a 1fe22200 copy pdata ,rega 
+4b1b 18427e00 copy temp ,pdata 
+4b1c 9a267e00 isub rega ,pdata 
+4b1d 67e0c528 store 1 ,mem_module_hci_notify_len 
+4b1e 20404b28 call module_hci_cmd_transmit_le_notify_malloc_l2cap 
+4b1f 6fe1452b fetch 2 ,mem_module_hci_nofiy_addr 
+4b20 1fe20600 copy pdata ,contru 
+4b21 1a227200 copy rega ,loopcnt 
+4b22 20406dbd call uart_copy_rx_bytes_fast 
+4b23 18627e00 copy contru ,pdata 
+4b24 67e1452b store 2 ,mem_module_hci_nofiy_addr 
+4b25 6fe0c528 fetch 1 ,mem_module_hci_notify_len 
+4b26 247a0000 nrtn blank 
+4b27 20204d05 branch module_set_le_tx_data_flag 
+
+module_hci_cmd_transmit_le_notify_malloc_l2cap:
+4b28 68494529 fetcht 2 ,mem_module_hci_notify_handle 
+4b29 6fe0c52d fetch 1 ,mem_module_hci_notify_type 
+4b2a c282add5 bbit1 bit_characteristic_indicate ,le_att_malloc_tx_indication 
+4b2b c2822dcc bbit1 bit_characteristic_notify ,le_att_malloc_tx_notify 
+4b2c 20600000 rtn 
+
+module_get_le_remote_mtu:
+4b2d d8400017 arg 0x17 ,temp 
+4b2e 6fe14526 fetch 2 ,mem_module_flag 
+4b2f c3808000 rtnbit1 module_flag_ble_send_mtu23 
+4b30 684942e5 fetcht 2 ,mem_le_remote_mtu 
+4b31 20600000 rtn 
+
+module_check_ble_encrypt_state:
+4b32 6fe14526 fetch 2 ,mem_module_flag 
+4b33 c2812da5 bbit1 module_flag_ble_data_encrypt ,le_check_encrypt_state 
+4b34 20207dbe branch disable_user 
+
+module_hci_cmd_inquire_status:
+4b35 20204c70 branch module_hci_event_status_res 
+
+module_hci_cmd_set_uart_baud:
+4b36 6f2086c1 fetchr loopcnt ,1 ,mem_module_uart_len 
+4b37 20407d35 call string2dec_from_uart 
+4b38 20406d6a call uart_calc_baud_rate_config 
+4b39 67e1451f store uart_baud_len ,mem_module_uarta_baud_rate 
+4b3a 20404c4d call module_hci_event_receive_valid_cmd 
+4b3b 20406da1 call wait_uarttx 
+4b3c 6fe1451f fetch uart_baud_len ,mem_module_uarta_baud_rate 
+4b3d 20206d66 branch uarta_init_baud_rate 
+
+module_hci_cmd_version_request:
+4b3e da200002 arg 2 ,rega 
+4b3f da404508 arg mem_soft_version_num ,regb 
+4b40 d8400000 arg 0 ,temp 
+4b41 20204c54 branch module_hci_event_set_cmd 
+
+module_hci_cmd_ble_disconnect:
+4b42 6fe14500 fetch 2 ,mem_ui_state_map 
+4b43 c304cc4a bbit0 ui_state_ble_connected ,module_hci_event_receive_invalid_cmd 
+
+module_hci_cmd_ble_disconnect_doing:
+4b44 20404c4d call module_hci_event_receive_valid_cmd 
+4b45 20203794 branch app_ble_disconnect 
+
+module_hci_cmd_set_nvram:
+4b46 6f2086c1 fetchr loopcnt ,1 ,mem_module_uart_len 
+4b47 6fe14401 fetch 2 ,mem_nv_data_ptr 
+4b48 1fe20a00 icopy contw 
+4b49 20406dbd call uart_copy_rx_bytes_fast 
+4b4a 20204c4d branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_auto_adv:
+4b4b df200040 arg 0x40 ,loopcnt 
+4b4c d8a0434c arg mem_le_adv_data_len ,contw 
+4b4d 20407ca3 call clear_mem 
+4b4e 58000000 setarg 0 
+4b4f 67e08666 store 1 ,mem_regb 
+4b50 1a220600 copy rega ,contru 
+
+module_hci_cmd_auto_adv_loop:
+4b51 18627e00 copy contru ,pdata 
+4b52 67e1066a store 2 ,mem_regc 
+4b53 20404b79 call module_hci_cmd_auto_adv_adv_analys 
+4b54 6fe08666 fetch 1 ,mem_regb 
+4b55 68488656 fetcht 1 ,mem_temp 
+4b56 18408401 increase 1 ,temp 
+4b57 9840fe00 iadd temp ,pdata 
+4b58 67e08666 store 1 ,mem_regb 
+4b59 1fe67c1f sub pdata ,31 ,null 
+4b5a 24214b65 nbranch module_hci_cmd_auto_adv_store_scan ,positive 
+
+module_hci_cmd_auto_adv_store_adv:
+4b5b 6848c34c fetcht 1 ,mem_le_adv_data_len 
+4b5c 5800434d setarg mem_le_adv_data 
+4b5d 9840fe00 iadd temp ,pdata 
+4b5e 67e1066f store 2 ,mem_contw 
+4b5f 68488656 fetcht 1 ,mem_temp 
+4b60 18408401 increase 1 ,temp 
+4b61 6fe0c34c fetch 1 ,mem_le_adv_data_len 
+4b62 9840fe00 iadd temp ,pdata 
+4b63 67e0c34c store 1 ,mem_le_adv_data_len 
+4b64 20204b6e branch module_hci_cmd_auto_adv_store_common 
+
+module_hci_cmd_auto_adv_store_scan:
+4b65 6848c36c fetcht 1 ,mem_le_scan_data_len 
+4b66 5800436d setarg mem_le_scan_data 
+4b67 9840fe00 iadd temp ,pdata 
+4b68 67e1066f store 2 ,mem_contw 
+4b69 68488656 fetcht 1 ,mem_temp 
+4b6a 18408401 increase 1 ,temp 
+4b6b 6fe0c36c fetch 1 ,mem_le_scan_data_len 
+4b6c 9840fe00 iadd temp ,pdata 
+4b6d 67e0c36c store 1 ,mem_le_scan_data_len 
+
+module_hci_cmd_auto_adv_store_common:
+4b6e 6fe1066f fetch 2 ,mem_contw 
+4b6f 1fe20a00 copy pdata ,contw 
+4b70 6fe1066a fetch 2 ,mem_regc 
+4b71 1fe20600 copy pdata ,contru 
+4b72 18427200 copy temp ,loopcnt 
+4b73 20406dbd call uart_copy_rx_bytes_fast 
+4b74 6fe086c1 fetch 1 ,mem_module_uart_len 
+4b75 68488666 fetcht 1 ,mem_regb 
+4b76 98467c00 isub temp ,null 
+4b77 2422cb51 nbranch module_hci_cmd_auto_adv_loop ,zero 
+4b78 20204c4d branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_auto_adv_adv_analys:
+4b79 efe08003 ifetch 1 ,contru 
+4b7a 67e08656 store 1 ,mem_temp 
+4b7b efe08003 ifetch 1 ,contru 
+4b7c 67e08662 store 1 ,mem_rega 
+4b7d 20600000 rtn 
+
+module_hci_cmd_power_request:
+4b7e d8400000 arg 0 ,temp 
+4b7f da200002 arg 2 ,rega 
+4b80 6fe14523 fetch 2 ,mem_module_vdd_quotient 
+4b81 67e1067f store 2 ,mem_event_cmd_response_content 
+4b82 da40067f arg mem_event_cmd_response_content ,regb 
+4b83 20204c54 branch module_hci_event_set_cmd 
+
+module_hci_cmd_power_set:
+4b84 6fe086c1 fetch 1 ,mem_module_uart_len 
+4b85 c080cc4a bne 1 ,module_hci_event_receive_invalid_cmd 
+4b86 efe08003 ifetch 1 ,contru 
+4b87 67e0c521 store 1 ,mem_module_read_vdd_flag 
+4b88 58000000 setarg 0x00 
+4b89 67e14523 store 2 ,mem_module_vdd_quotient 
+4b8a 20204c4d branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_passkey_entry:
+4b8b 6fe086c1 fetch 1 ,mem_module_uart_len 
+4b8c c0824c4a bne 4 ,module_hci_event_receive_invalid_cmd 
+4b8d 6fe14500 fetch 2 ,mem_ui_state_map 
+4b8e c284cc3c bbit1 ui_state_ble_connected ,module_hci_cmd_le_passkey_entry_input 
+4b8f 20204c4a branch module_hci_event_receive_invalid_cmd 
+
+module_hci_cmd_le_set_pairing_mode:
+4b90 efe08003 ifetch 1 ,contru 
+4b91 1fe20400 copy pdata ,temp 
+4b92 c040cb9f beq le_pairing_mode_secure_connect_justwork ,module_le_set_pairing_mode_secure_justwork 
+4b93 c0414ba3 beq le_pairing_mode_secure_connect_numeric ,module_le_set_pairing_mode_secure_numeric 
+4b94 c041cba8 beq le_pairing_mode_secure_connect_passkey ,module_le_set_pairing_mode_secure_passkey 
+4b95 c0424bac beq le_pairing_mode_secure_connect_passkey_res_input ,module_le_set_pairing_mode_secure_passkey_res_input 
+4b96 67e0c300 store 1 ,mem_le_pairing_mode 
+4b97 204074ed call sc_reset 
+4b98 20402ea2 call le_secure_connection_disable 
+4b99 6fe0c300 fetch 1 ,mem_le_pairing_mode 
+4b9a c0004bb0 beq le_pairing_mode_none ,module_le_set_no_pairing 
+4b9b c000cbb3 beq le_pairing_mode_lagacy_justwork ,module_le_set_pairing_mode_lagacy_just_work 
+4b9c c0014bb5 beq le_pairing_mode_lagacy_passkey ,module_le_set_pairing_mode_lagacy_passkey 
+4b9d c0024bb7 beq le_pairing_mode_lagacy_passkey_res_input ,module_le_set_pairing_mode_lagacy_passkey_res_input 
+4b9e 20204c4a branch module_hci_event_receive_invalid_cmd 
+
+module_le_set_pairing_mode_secure_justwork:
+4b9f 6048c300 storet 1 ,mem_le_pairing_mode 
+4ba0 20402e9e call le_secure_connection_enable 
+4ba1 7042c90d jam flag_le_bonding_mitm_secure ,mem_le_pres_auth 
+4ba2 20204bb1 branch module_le_set_noinputnooutput 
+
+module_le_set_pairing_mode_secure_numeric:
+4ba3 6048c300 storet 1 ,mem_le_pairing_mode 
+4ba4 20402e9e call le_secure_connection_enable 
+4ba5 7042c90d jam flag_le_bonding_mitm_secure ,mem_le_pres_auth 
+4ba6 7042c701 jam flag_iocap_displayyesno ,mem_le_pres_iocap 
+4ba7 20204c4d branch module_hci_event_receive_valid_cmd 
+
+module_le_set_pairing_mode_secure_passkey:
+4ba8 6048c300 storet 1 ,mem_le_pairing_mode 
+4ba9 20402e9e call le_secure_connection_enable 
+4baa 7042c90d jam flag_le_bonding_mitm_secure ,mem_le_pres_auth 
+4bab 20204bbb branch module_le_set_displayonly 
+
+module_le_set_pairing_mode_secure_passkey_res_input:
+4bac 6048c300 storet 1 ,mem_le_pairing_mode 
+4bad 20402e9e call le_secure_connection_enable 
+4bae 7042c90d jam flag_le_bonding_mitm_secure ,mem_le_pres_auth 
+4baf 20204bb9 branch module_le_set_keboadonly 
+
+module_le_set_no_pairing:
+4bb0 7042c900 jam flag_le_no_bonding_no_mitm ,mem_le_pres_auth 
+
+module_le_set_noinputnooutput:
+4bb1 7042c703 jam flag_iocap_noinputnooutput ,mem_le_pres_iocap 
+4bb2 20204c4d branch module_hci_event_receive_valid_cmd 
+
+module_le_set_pairing_mode_lagacy_just_work:
+4bb3 7042c901 jam flag_le_bonding_no_mitm ,mem_le_pres_auth 
+4bb4 20204bb1 branch module_le_set_noinputnooutput 
+
+module_le_set_pairing_mode_lagacy_passkey:
+4bb5 7042c905 jam flag_le_bonding_mitm ,mem_le_pres_auth 
+4bb6 20204bbb branch module_le_set_displayonly 
+
+module_le_set_pairing_mode_lagacy_passkey_res_input:
+4bb7 7042c905 jam flag_le_bonding_mitm ,mem_le_pres_auth 
+4bb8 20204bb9 branch module_le_set_keboadonly 
+
+module_le_set_keboadonly:
+4bb9 7042c702 jam flag_iocap_keyboardonly ,mem_le_pres_iocap 
+4bba 20204c4d branch module_hci_event_receive_valid_cmd 
+
+module_le_set_displayonly:
+4bbb 7042c700 jam flag_iocap_displayonly ,mem_le_pres_iocap 
+4bbc 20204c4d branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_le_set_scan_data:
+4bbd dfe0001f arg 31 ,pdata 
+4bbe d8a0436c arg mem_le_scan_data_len ,contw 
+4bbf 20204bc0 branch module_hci_cmd_receive_store_mem 
+
+module_hci_cmd_receive_store_mem:
+4bc0 6f2086c1 fetchr loopcnt ,1 ,mem_module_uart_len 
+4bc1 9f267c00 isub loopcnt ,null 
+4bc2 24214c4a nbranch module_hci_event_receive_invalid_cmd ,positive 
+4bc3 e7208005 istorer loopcnt ,1 ,contw 
+4bc4 20406dbd call uart_copy_rx_bytes_fast 
+4bc5 20204c4d branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_le_send_conn_update_req:
+4bc6 6fe14500 fetch 2 ,mem_ui_state_map 
+4bc7 c304cc4a bbit0 ui_state_ble_connected ,module_hci_event_receive_invalid_cmd 
+4bc8 6fe086c1 fetch 1 ,mem_module_uart_len 
+4bc9 c0844c4a bne 0x08 ,module_hci_event_receive_invalid_cmd 
+4bca efe40003 ifetch 8 ,contru 
+4bcb 67e442d5 store 8 ,mem_le_interval_min 
+4bcc 70064d12 jam bt_cmd_le_update_conn ,mem_fifo_temp 
+4bcd 20407824 call ui_ipc_send_cmd 
+4bce 20204c4d branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_set_le_adv_parameter:
+4bcf efe10003 ifetch 2 ,contru 
+4bd0 67e1438d store 2 ,mem_le_adv_interval 
+4bd1 6048c0a6 storet 1 ,mem_lpm_overhead 
+4bd2 9840fe00 iadd temp ,pdata 
+4bd3 67e140a4 store 2 ,mem_lpm_interval 
+4bd4 20204c4d branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_le_start_pairing:
+4bd5 6fe0c300 fetch 1 ,mem_le_pairing_mode 
+4bd6 203a4c4a branch module_hci_event_receive_invalid_cmd ,blank 
+4bd7 6fe0c2fe fetch 1 ,mem_le_pairing_state 
+4bd8 c0804c4a bne flag_le_pairing_null ,module_hci_event_receive_invalid_cmd 
+4bd9 6fe0c2ff fetch 1 ,mem_le_enc_state 
+4bda c0804c4a bne flag_le_enc_null ,module_hci_event_receive_invalid_cmd 
+4bdb 20407899 call check_51cmd_le_smp_sec_req 
+4bdc 20204c4d branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_set_wake_gpio:
+4bdd 6fe086c1 fetch 1 ,mem_module_uart_len 
+4bde c082cc4a bne 5 ,module_hci_event_receive_invalid_cmd 
+4bdf efe08003 ifetch 1 ,contru 
+4be0 67e0c510 store 1 ,mem_module_mcu_wake_pin 
+4be1 efe20003 ifetch 4 ,contru 
+4be2 67e24511 store 4 ,mem_module_mcu_wake_delay_us 
+4be3 6848c510 fetcht 1 ,mem_module_mcu_wake_pin 
+4be4 20406ef1 call gpio_config_output 
+4be5 20404cdf call module_set_mcu_wake_pin_low 
+4be6 20204c4d branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_set_tx_power:
+4be7 6fe086c1 fetch 1 ,mem_module_uart_len 
+4be8 c080cc4a bne 0x01 ,module_hci_event_receive_invalid_cmd 
+4be9 efe08003 ifetch 1 ,contru 
+4bea 67e0c141 store 1 ,mem_tx_power 
+4beb 20204c4d branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_le_confirm_gkey:
+4bec efe08003 ifetch 1 ,contru 
+4bed c000cbf5 beq 0x01 ,module_hci_cmd_le_confirm_gkey_fail 
+4bee 6fe0c2fc fetch 1 ,mem_le_secure_connect_state 
+4bef c001cbf3 beq le_sc_stat_send_public_key ,module_hci_cmd_le_confirm_gkey_ok 
+4bf0 c0034bf3 beq le_sc_stat_receive_dhkey ,module_hci_cmd_le_confirm_gkey_ok 
+4bf1 c003cbf3 beq le_sc_stat_wait_confirm_gkey ,module_hci_cmd_le_confirm_gkey_ok 
+4bf2 20204c4a branch module_hci_event_receive_invalid_cmd 
+
+module_hci_cmd_le_confirm_gkey_ok:
+4bf3 7042fd01 jam flag_le_sc_confrim_gkey_ok ,mem_le_sc_confirm_gkey_flag 
+4bf4 20204c4d branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_le_confirm_gkey_fail:
+4bf5 20402f08 call le_send_pairing_confirm_value_failed 
+4bf6 20204c4d branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_reset_chip:
+4bf7 20404c4d call module_hci_event_receive_valid_cmd 
+4bf8 20406da1 call wait_uarttx 
+4bf9 70801001 jam 0x01 ,core_reset 
+4bfa 2020233e branch assert 
+
+module_hci_cmd_delete_customize_service:
+4bfb d8400001 arg 0x0001 ,temp 
+4bfc 20402cb0 call le_att_get_handle_ptr2 
+4bfd 18c08bfe add contr ,-2 ,contw 
+4bfe 58000000 setarg 0x0000 
+4bff e7e10005 istore 2 ,contw 
+4c00 20204c4d branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_add_service_uuid:
+4c01 20404c0a call module_hci_cmd_add_service_uuid_set_uuid 
+4c02 20404c38 call uart_copy_rx_bytes_len_data 
+4c03 58000000 setarg 0x0000 
+4c04 e7e10005 istore 2 ,contw 
+4c05 20204cb9 branch module_hci_event_uuid_handle 
+
+module_hci_cmd_add_characteristic_uuid:
+4c06 efe08003 ifetch 1 ,contru 
+4c07 20404c0e call module_hci_cmd_add_characteristic_uuid_set_handle 
+4c08 20404c15 call module_hci_cmd_add_characteristic_uuid_set_uuid 
+4c09 20204cb9 branch module_hci_event_uuid_handle 
+
+module_hci_cmd_add_service_uuid_set_uuid:
+4c0a 20404c35 call le_att_creat_new_handle 
+4c0b 58280002 setarg 0x280002 
+4c0c e7e18005 istore 3 ,contw 
+4c0d 20600000 rtn 
+
+module_hci_cmd_add_characteristic_uuid_set_handle:
+4c0e 67e0864e store 1 ,mem_pdatatemp 
+4c0f 20404c35 call le_att_creat_new_handle 
+4c10 59280302 setarg 0x01280302 
+4c11 e7e20005 istore 4 ,contw 
+4c12 6fe0864e fetch 1 ,mem_pdatatemp 
+4c13 e7e18005 istore 3 ,contw 
+4c14 20600000 rtn 
+
+module_hci_cmd_add_characteristic_uuid_set_uuid:
+4c15 20402cd4 call le_att_get_last_handle 
+4c16 efe08003 ifetch 1 ,contru 
+4c17 1fe1721f and pdata ,0x1f ,loopcnt 
+4c18 1fe22200 copy pdata ,rega 
+4c19 2a2ffe07 isolate1 bit_of_write_authenticated ,rega 
+4c1a 7920840f setflag true ,bit_of_att_handle_write_authenticated ,temp 
+4c1b 2a2ffe06 isolate1 bit_of_read_authenticated ,rega 
+4c1c 7920840e setflag true ,bit_of_att_handle_read_authenticated ,temp 
+4c1d e0410005 istoret 2 ,contw 
+4c1e 1f227e00 copy loopcnt ,pdata 
+4c1f e7e08005 istore 1 ,contw 
+4c20 20406dd0 call uart_copy_rx_bytes 
+4c21 20404c38 call uart_copy_rx_bytes_len_data 
+4c22 58000000 setarg 0 
+4c23 e7e10005 istore 2 ,contw 
+4c24 184104ff and temp ,0xff ,temp 
+4c25 184085ff increase -1 ,temp 
+4c26 20402cb0 call le_att_get_handle_ptr2 
+4c27 18c08c04 add contr ,4 ,contr 
+4c28 efe08006 ifetch 1 ,contr 
+4c29 c2824c2d bbit1 bit_characteristic_notify ,module_hci_cmd_add_characteristic_uuid_set_ccc_uuid 
+4c2a c282cc2d bbit1 bit_characteristic_indicate ,module_hci_cmd_add_characteristic_uuid_set_ccc_uuid 
+4c2b 18408401 increase 1 ,temp 
+4c2c 20600000 rtn 
+
+module_hci_cmd_add_characteristic_uuid_set_ccc_uuid:
+4c2d 20402cd4 call le_att_get_last_handle 
+4c2e 2a2ffe05 isolate1 bit_of_notify_authenticated ,rega 
+4c2f 7920840f setflag true ,bit_of_att_handle_write_authenticated ,temp 
+4c30 e0410005 istoret 2 ,contw 
+4c31 5a290202 setarg 0x02290202 
+4c32 e7e40005 istore 8 ,contw 
+4c33 184085ff increase -1 ,temp 
+4c34 20600000 rtn 
+
+le_att_creat_new_handle:
+4c35 20402cd4 call le_att_get_last_handle 
+4c36 e0410005 istoret 2 ,contw 
+4c37 20600000 rtn 
+
+uart_copy_rx_bytes_len_data:
+4c38 efe08003 ifetch 1 ,contru 
+4c39 1fe27200 copy pdata ,loopcnt 
+4c3a e7e08005 istore 1 ,contw 
+4c3b 20206dd0 branch uart_copy_rx_bytes 
+
+module_hci_cmd_le_passkey_entry_input:
+4c3c 6fe0c2fe fetch 1 ,mem_le_pairing_state 
+4c3d c082cc4a bne flag_le_pairing_receive_pairing_confirm ,module_hci_event_receive_invalid_cmd 
+4c3e 6fe0c300 fetch 1 ,mem_le_pairing_mode 
+4c3f c0024c48 beq le_pairing_mode_lagacy_passkey_res_input ,module_hci_cmd_passkey_entry_res_input 
+4c40 c0424c42 beq le_pairing_mode_secure_connect_passkey_res_input ,module_hci_cmd_passkey_entry_sc_res_input 
+4c41 20204c4a branch module_hci_event_receive_invalid_cmd 
+
+module_hci_cmd_passkey_entry_sc_res_input:
+4c42 7042fb02 jam le_sp_flag_commit_256 ,mem_le_secure_connect_flag 
+4c43 7042fc08 jam le_sc_stat_passkey_wait_confirm ,mem_le_secure_connect_state 
+4c44 20204c45 branch module_hci_cmd_receive_ble_passkey 
+
+module_hci_cmd_receive_ble_passkey:
+4c45 efe20003 ifetch 4 ,contru 
+4c46 67e24301 store 4 ,mem_le_tk 
+4c47 20204c4d branch module_hci_event_receive_valid_cmd 
+
+module_hci_cmd_passkey_entry_res_input:
+4c48 20404c45 call module_hci_cmd_receive_ble_passkey 
+4c49 20202ef1 branch le_send_smp_pairing_confirm 
+
+module_hci_event_receive_invalid_cmd:
+4c4a d8400001 arg 1 ,temp 
+4c4b da200000 arg 0 ,rega 
+4c4c 20204c54 branch module_hci_event_set_cmd 
+
+module_hci_event_receive_valid_cmd:
+4c4d d8400000 arg 0 ,temp 
+4c4e da200000 arg 0 ,rega 
+4c4f 20204c54 branch module_hci_event_set_cmd 
+
+module_hci_event_le_connect:
+4c50 7006c002 jam hci_event_le_conn_rep ,mem_module_uart_opcode 
+4c51 20204c6d branch module_hci_event_enter_standby_mode_len0 
+
+module_hci_event_le_disconnect:
+4c52 7006c005 jam hci_event_le_dis_rep ,mem_module_uart_opcode 
+4c53 20204c6d branch module_hci_event_enter_standby_mode_len0 
+
+module_hci_event_set_cmd:
+4c54 6fe086c0 fetch 1 ,mem_module_uart_opcode 
+4c55 1fe22600 copy pdata ,regc 
+4c56 7006c006 jam hci_event_cmd_res ,mem_module_uart_opcode 
+4c57 58000002 setarg 2 
+4c58 9a20fe00 iadd rega ,pdata 
+4c59 20404cc8 call module_hci_prepare_tx 
+4c5a 1a627e00 copy regc ,pdata 
+4c5b e7e08003 istore 1 ,contwu 
+4c5c e0408003 istoret 1 ,contwu 
+4c5d 1a227200 copy rega ,loopcnt 
+4c5e 1a420c00 copy regb ,contr 
+4c5f 20406db7 call uart_copy_tx_bytes 
+4c60 20204cd2 branch module_hci_transmit_tx 
+
+module_hci_event_receive_le_data:
+4c61 7006c008 jam hci_event_le_data_rep ,mem_module_uart_opcode 
+4c62 1f20fe02 add loopcnt ,2 ,pdata 
+4c63 20404cc8 call module_hci_prepare_tx 
+4c64 6fe106eb fetch 2 ,mem_module_le_rx_data_handle 
+4c65 e7e10003 istore 2 ,contwu 
+4c66 6fe106e9 fetch 2 ,mem_module_le_rx_data_address 
+4c67 1fe20c00 icopy contr 
+4c68 20406da4 call uart_copy_tx_bytes_fast 
+4c69 18c27e00 copy contr ,pdata 
+4c6a 67e106e9 store 2 ,mem_module_le_rx_data_address 
+4c6b 20204cd2 branch module_hci_transmit_tx 
+
+module_hci_event_enter_standby_mode:
+4c6c 7006c009 jam hci_event_standby_rep ,mem_module_uart_opcode 
+
+module_hci_event_enter_standby_mode_len0:
+4c6d 58000000 setarg 0 
+4c6e 20404cc8 call module_hci_prepare_tx 
+4c6f 20204cd2 branch module_hci_transmit_tx 
+
+module_hci_event_status_res:
+4c70 7006c00a jam hci_event_status_res ,mem_module_uart_opcode 
+4c71 58000001 setarg 1 
+4c72 20404cc8 call module_hci_prepare_tx 
+4c73 20404c7a call module_hci_read_bt_status 
+4c74 6fe14500 fetch 2 ,mem_ui_state_map 
+4c75 d8e00009 arg ui_state_ble_connected ,queue 
+4c76 afefffff qisolate1 pdata 
+4c77 79208405 setflag true ,5 ,temp 
+4c78 e0408003 istoret 1 ,contwu 
+4c79 20204cd2 branch module_hci_transmit_tx 
+
+module_hci_read_bt_status:
+4c7a d8400000 arg 0 ,temp 
+4c7b 6fe0c38c fetch 1 ,mem_le_adv_enable 
+4c7c d8e00000 arg 0 ,queue 
+4c7d afefffff qisolate1 pdata 
+4c7e 79208402 setflag true ,2 ,temp 
+4c7f 20600000 rtn 
+
+module_hci_event_store_device:
+4c80 7006c00d jam hci_event_nvram_rep ,mem_module_uart_opcode 
+4c81 6fe0c403 fetch 1 ,mem_nv_data_number 
+4c82 1feffe22 mul32 pdata ,34 ,pdata 
+4c83 1fe27200 icopy loopcnt 
+4c84 20404cc8 call module_hci_prepare_tx 
+4c85 6fe14401 fetch 2 ,mem_nv_data_ptr 
+4c86 1fe20c00 icopy contr 
+4c87 20406da4 call uart_copy_tx_bytes_fast 
+4c88 20204cd2 branch module_hci_transmit_tx 
+
+module_hci_event_gkey_generate:
+4c89 7006c00e jam hci_event_gkey ,mem_module_uart_opcode 
+4c8a 58000004 setarg 4 
+4c8b 20404cc8 call module_hci_prepare_tx 
+4c8c 6fe205d8 fetch 4 ,mem_gkey 
+4c8d e7e20003 istore 4 ,contwu 
+4c8e 20204cd2 branch module_hci_transmit_tx 
+
+module_hci_event_invalid_packet:
+4c8f 7006c00f jam hci_event_invalid_packet ,mem_module_uart_opcode 
+4c90 6ff10112 fetch 2 ,core_uart_rxitems 
+4c91 d8400040 arg 0x40 ,temp 
+4c92 20407db2 call not_greater_than 
+4c93 1fe22200 copy pdata ,rega 
+4c94 1fe27200 copy pdata ,loopcnt 
+4c95 20406d89 call uarta_prepare_rx 
+4c96 d8a0067f arg mem_module_rx_error_data_buffer ,contw 
+4c97 20406dbd call uart_copy_rx_bytes_fast 
+4c98 1a227e00 copy rega ,pdata 
+4c99 1a227200 copy rega ,loopcnt 
+4c9a 20404cc8 call module_hci_prepare_tx 
+4c9b d8c0067f arg mem_module_rx_error_data_buffer ,contr 
+4c9c 20406da4 call uart_copy_tx_bytes_fast 
+4c9d 20204cd2 branch module_hci_transmit_tx 
+
+module_hci_event_passkey_entry_mode:
+4c9e 7006c010 jam hci_event_get_passkey ,mem_module_uart_opcode 
+4c9f 20204c6d branch module_hci_event_enter_standby_mode_len0 
+
+module_hci_event_le_tk:
+4ca0 7006c011 jam hci_event_le_tk ,mem_module_uart_opcode 
+4ca1 58000004 setarg 4 
+4ca2 20404cc8 call module_hci_prepare_tx 
+4ca3 6fe24301 fetch 4 ,mem_le_tk 
+4ca4 e7e20003 istore 4 ,contwu 
+4ca5 20204cd2 branch module_hci_transmit_tx 
+
+module_hci_event_le_pairing_fail:
+4ca6 da200180 arg flag_ble_pairing_fail ,rega 
+4ca7 20204caa branch module_hci_event_pairing_completed 
+
+module_hci_event_le_pairing_success:
+4ca8 da200080 arg flag_ble_pairing_success ,rega 
+4ca9 20204caa branch module_hci_event_pairing_completed 
+
+module_hci_event_pairing_completed:
+4caa 7006c014 jam hci_event_le_pairing_state ,mem_module_uart_opcode 
+4cab 58000002 setarg 2 
+4cac 20404cc8 call module_hci_prepare_tx 
+4cad 1a227e00 copy rega ,pdata 
+4cae e7e10003 istore 2 ,contwu 
+4caf 20204cd2 branch module_hci_transmit_tx 
+
+module_hci_event_pause_enc:
+4cb0 da600000 arg flag_event_pause_enc ,regc 
+4cb1 20204cb3 branch module_hci_event_enc 
+
+module_hci_event_start_enc:
+4cb2 da600001 arg flag_event_start_enc ,regc 
+
+module_hci_event_enc:
+4cb3 7006c015 jam hci_event_le_encryption_state ,mem_module_uart_opcode 
+4cb4 58000001 setarg 1 
+4cb5 20404cc8 call module_hci_prepare_tx 
+4cb6 1a627e00 copy regc ,pdata 
+4cb7 e7e08003 istore 1 ,contwu 
+4cb8 20204cd2 branch module_hci_transmit_tx 
+
+module_hci_event_uuid_handle:
+4cb9 60490656 storet 2 ,mem_temp 
+4cba 7006c029 jam hci_event_uuid_handle ,mem_module_uart_opcode 
+4cbb 58000002 setarg 2 
+4cbc 20404cc8 call module_hci_prepare_tx 
+4cbd 68490656 fetcht 2 ,mem_temp 
+4cbe e0410003 istoret 2 ,contwu 
+4cbf 20204cd2 branch module_hci_transmit_tx 
+
+module_hci_event_le_input_passkey:
+4cc0 7006c02b jam hci_event_le_input_gkey ,mem_module_uart_opcode 
+4cc1 20204c6d branch module_hci_event_enter_standby_mode_len0 
+
+module_hci_event_le_update_phy:
+4cc2 7006c040 jam hci_ble_update_phy_event ,mem_module_uart_opcode 
+4cc3 58000002 setarg 2 
+4cc4 20404cc8 call module_hci_prepare_tx 
+4cc5 6fe14075 fetch 2 ,mem_context + coffset_le_rx_phy 
+4cc6 e7e10003 istore 2 ,contwu 
+4cc7 20204cd2 branch module_hci_transmit_tx 
+
+module_hci_prepare_tx:
+4cc8 7006bf02 jam 0x02 ,mem_module_uart_cmd 
+4cc9 67e086c1 store 1 ,mem_module_uart_len 
+4cca 604c0656 storet 8 ,mem_temp 
+4ccb 44b8400e bpatch patch0e_0 ,mem_patch0e 
+4ccc 20404cd4 call module_set_mcu_wake_pin_high_delay 
+4ccd 684c0656 fetcht 8 ,mem_temp 
+4cce 20406d95 call uarta_prepare_tx_register_push 
+4ccf 6fe186bf fetch 3 ,mem_module_uart_cmd 
+4cd0 e7e18003 istore 3 ,contwu 
+4cd1 20600000 rtn 
+
+module_hci_transmit_tx:
+4cd2 44b8c00e bpatch patch0e_1 ,mem_patch0e 
+4cd3 20206d97 branch uarta_send_register_pop 
+
+module_set_mcu_wake_pin_high_delay:
+4cd4 20404cdd call module_check_mcu_wake_pin_high 
+4cd5 20608000 rtn true 
+
+module_set_mcu_wake_pin_h_delay:
+4cd6 20404cdb call module_set_mcu_wake_pin_high 
+4cd7 6fe24511 fetch 4 ,mem_module_mcu_wake_delay_us 
+4cd8 1feb7e00 rshift2 pdata ,pdata 
+4cd9 207a0000 rtn blank 
+4cda 20207c93 branch delay 
+
+module_set_mcu_wake_pin_high:
+4cdb 6848c510 fetcht 1 ,mem_module_mcu_wake_pin 
+4cdc 20206ef1 branch gpio_out_active 
+
+module_check_mcu_wake_pin_high:
+4cdd 6848c510 fetcht 1 ,mem_module_mcu_wake_pin 
+4cde 20206efc branch gpio_check_active 
+
+module_set_mcu_wake_pin_low:
+4cdf 6848c510 fetcht 1 ,mem_module_mcu_wake_pin 
+4ce0 20206eed branch gpio_out_inactive 
+
+module_le_receive_data:
+4ce1 622106e9 storer rega ,2 ,mem_module_le_rx_data_address 
+4ce2 624106e7 storer regb ,2 ,mem_module_le_rx_data_len 
+4ce3 6fe1439c fetch 2 ,mem_le_att_handle 
+4ce4 67e106eb store 2 ,mem_module_le_rx_data_handle 
+4ce5 20404b32 call module_check_ble_encrypt_state 
+4ce6 20740000 rtn user 
+
+module_le_receive_data_ok:
+4ce7 684906e7 fetcht 2 ,mem_module_le_rx_data_len 
+4ce8 6fe0c525 fetch 1 ,mem_module_ble_data_uart_max_length 
+4ce9 20407db2 call not_greater_than 
+4cea 1fe27200 copy pdata ,loopcnt 
+4ceb 18427e00 copy temp ,pdata 
+4cec 9f267e00 isub loopcnt ,pdata 
+4ced 67e106e7 store 2 ,mem_module_le_rx_data_len 
+4cee 20404c61 call module_hci_event_receive_le_data 
+4cef 6fe106e7 fetch 2 ,mem_module_le_rx_data_len 
+4cf0 207a0000 rtn blank 
+4cf1 20204ce7 branch module_le_receive_data_ok 
+
+module_bb_event_timer:
+4cf2 20600000 rtn 
+
+module_read_vdd_timer:
+4cf3 6fe0c521 fetch 1 ,mem_module_read_vdd_flag 
+4cf4 207a0000 rtn blank 
+4cf5 6fe0c522 fetch 1 ,mem_module_read_vdd_count 
+4cf6 207a0000 rtn blank 
+4cf7 1fe0ffff increase -1 ,pdata 
+4cf8 67e0c522 store 1 ,mem_module_read_vdd_count 
+4cf9 247a0000 nrtn blank 
+4cfa 70452205 jam flag_module_read_vdd_count ,mem_module_read_vdd_count 
+4cfb 20406fb2 call enable_adc 
+4cfc 20406f8e call vdd_calculate_by_mode 
+4cfd 1fe6fc0a div pdata ,10 
+4cfe 20407d61 call get_div_result 
+4cff 1fe6fc64 div pdata ,100 
+4d00 20407d61 call get_div_result 
+4d01 18070400 remainder temp 
+4d02 67e0c523 store 1 ,mem_module_vdd_quotient 
+4d03 6048c524 storet 1 ,mem_module_vdd_remainder 
+4d04 20600000 rtn 
+
+module_set_le_tx_data_flag:
+4d05 d8e00008 arg module_flag_ble_data_finish ,queue 
+4d06 20204d0d branch module_set_state 
+
+module_clear_le_tx_data_flag:
+4d07 d8e00008 arg module_flag_ble_data_finish ,queue 
+4d08 20204d09 branch module_clr_state 
+
+module_clr_state:
+4d09 6fe14526 fetch 2 ,mem_module_flag 
+4d0a f93ffe00 qset0 pdata 
+4d0b 67e14526 store 2 ,mem_module_flag 
+4d0c 20600000 rtn 
+
+module_set_state:
+4d0d 6fe14526 fetch 2 ,mem_module_flag 
+4d0e f9207e00 qset1 pdata 
+4d0f 67e14526 store 2 ,mem_module_flag 
+4d10 20600000 rtn 
+
+mouse_init:
+4d11 20407384 call enable_authrom 
+4d12 2055cd20 call mouse_wake_gpio_set ,wake 
+4d13 20404d40 call mouse_setting_config 
+4d14 20404dec call mouse_le_name_modify 
+4d15 20405260 call mouse_init_sunt 
+4d16 20758000 rtn wake 
+4d17 20405b83 call mouse_usb_check_enable 
+4d18 2040506b call mouse_setting_sensor_type 
+4d19 20405853 call mouse_drawing_optima_init 
+4d1a 20404d22 call mouse_cb_fuction 
+4d1b 20405303 call mouse_sensor_powerdown 
+
+mouse_init_wireless:
+4d1c 6fe14500 fetch 2 ,mem_ui_state_map 
+4d1d c2865544 bbit1 ui_state_btn_down ,mouse_start_discovery 
+4d1e 204057d7 call mouse_check_select_device_by_switch_once 
+4d1f 20204df5 branch mouse_start_work 
+
+mouse_wake_gpio_set:
+4d20 20405203 call mouse_matrix_public_gpio_reset 
+4d21 20206f4e branch lpm_config_puchk_disable 
+
+mouse_cb_fuction:
+4d22 44b9400e bpatch patch0e_2 ,mem_patch0e 
+4d23 58005b02 setarg mouse_24g_short_sleep 
+4d24 67e1460f store 2 ,mem_cb_24g_transmit_short_sleep 
+4d25 58005af7 setarg mouse_24g_long_sleep 
+4d26 67e14611 store 2 ,mem_cb_24g_transmit_long_sleep 
+4d27 580059f0 setarg mouse_24g_before_lpm_sleep 
+4d28 67e143f2 store 2 ,mem_cb_before_lpm_sleep 
+4d29 580059bc setarg mouse_24g_package_data 
+4d2a 67e14609 store 2 ,mem_cb_24g_transmit_data 
+4d2b 58006886 setarg mouse_24g_search_dongle 
+4d2c 67e1460b store 2 ,mem_cb_24g_search_receiver 
+4d2d 58004e75 setarg mouse_lpm_before_common 
+4d2e 67e1460d store 2 ,mem_cb_24g_lpm_before 
+4d2f 58005438 setarg mouse_le 
+4d30 67e143e2 store 2 ,mem_cb_le_process 
+4d31 58004e70 setarg mouse_process_lpm_before 
+4d32 67e143e0 store 2 ,mem_cb_before_lpm 
+4d33 580053da setarg mouse_priority_bb_event 
+4d34 67e143e6 store 2 ,mem_cb_bb_event_process 
+4d35 58005759 setarg mouse_idle 
+4d36 67e143e4 store 2 ,mem_cb_idle_process 
+4d37 58004e3d setarg mouse_before_hibernate 
+4d38 67e143de store 2 ,mem_cb_before_hibernate 
+4d39 58005420 setarg mouse_le_bb_event_connect_complete 
+4d3a 67e143e8 store 2 ,mem_cb_att_write 
+4d3b 58005494 setarg mouse_bb_event_timer 
+4d3c 67e143ec store 2 ,mem_cb_event_timer 
+4d3d 58004e2d setarg mouse_lpm_check_wake_lock 
+4d3e 67e143dc store 2 ,mem_cb_check_wakelock 
+4d3f 202068cb branch hid_device_cb_fuction 
+
+mouse_setting_config:
+4d40 20758000 rtn wake 
+4d41 204035c8 call g24_transmit_init 
+4d42 2040323a call g24_chmap_param_init 
+4d43 20405b7f call mouse_24g_send_time_long_wake 
+4d44 20404ee5 call mouse_gpio_init 
+4d45 20404d88 call mouse_param_info_init 
+4d46 20405a4b call mouse_device_multi_led_parm_init 
+4d47 20402a1f call le_set_fixed_ltk_justwork 
+
+mouse_load_device_info_check:
+4d48 44b9c00e bpatch patch0e_3 ,mem_patch0e 
+4d49 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+4d4a c288d640 bbit1 mouse_enable_eeprom ,mouse_load_eeprom_info_check 
+4d4b c2885650 bbit1 mouse_enable_flash ,mouse_load_flash_info_check 
+4d4c c2895685 bbit1 mouse_enable_otp ,mouse_load_otp_info_check 
+4d4d 20600000 rtn 
+
+mouse_xtal_init:
+4d4e 70409910 jam xtal_16m ,mem_fcomp_div 
+4d4f 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+4d50 c3858000 rtnbit1 mouse_enable_16m 
+4d51 70409918 jam xtal_24m ,mem_fcomp_div 
+4d52 20600000 rtn 
+
+mouse_24g_phy_select:
+4d53 20403260 call g24_enable_1m 
+4d54 7048fa00 jam 0 ,mem_mouse_sleep_deal_type 
+4d55 7045e100 jam 0 ,mem_24g_disable_fec1 
+4d56 70444e00 jam 0 ,mem_power_ctrl_disable 
+4d57 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+4d58 c41e8000 rtnbit0 mouse_enable_24g_2m_phy 
+4d59 7048fa01 jam 1 ,mem_mouse_sleep_deal_type 
+4d5a 7045e101 jam 1 ,mem_24g_disable_fec1 
+4d5b 70444e01 jam 1 ,mem_power_ctrl_disable 
+4d5c 20203263 branch g24_enable_2m 
+
+mouse_g24_reconn_dispatch_set:
+4d5d 4778403e bpatchx patch3e_0 ,mem_patch3e 
+4d5e 6fe0c594 fetch 1 ,mem_24g_rxdata_length 
+4d5f 203a4d65 branch mouse_receiver_addr_check ,blank 
+
+mouse_g24_reconn_dispatch:
+4d60 6fe245e3 fetch 4 ,mem_24g_pair_addr 
+4d61 684a45a6 fetcht 4 ,mem_24g_addr 
+4d62 98467c00 isub temp ,null 
+4d63 2022cd6c branch mouse_g24_reconn_mode_judge ,zero 
+4d64 20203546 branch g24_reconn_dispatch_success 
+
+mouse_receiver_addr_check:
+4d65 6fe245fb fetch 4 ,mem_24g_fast_conn_addr 
+4d66 684a45a6 fetcht 4 ,mem_24g_addr 
+4d67 98467c00 isub temp ,null 
+4d68 2022cd60 branch mouse_g24_reconn_dispatch ,zero 
+4d69 6fe24576 fetch 4 ,mem_24g_rxpayload + 2 
+4d6a 207a0000 rtn blank 
+4d6b 20204d60 branch mouse_g24_reconn_dispatch 
+
+mouse_g24_reconn_mode_judge:
+4d6c 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+4d6d c298596c bbit1 mouse_enable_auto_24g_paring ,mouse_24g_pair_mode_check 
+4d6e c29f596c bbit1 mouse_enable_24g_first_auto_pairing ,mouse_24g_pair_mode_check 
+4d6f 2020351f branch g24_reconn_receiver_addr 
+
+mouse_g24_transmit_hop_process:
+4d70 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+4d71 c31eb658 bbit0 mouse_enable_24g_2m_phy ,g24_transmit_hop_process_next 
+
+mouse_g24_transmit_hop_process_new:
+4d72 6848c618 fetcht 1 ,mem_24g_retry 
+4d73 6fe0c638 fetch 1 ,mem_24g_fast_hop_count 
+4d74 98467c00 isub temp ,null 
+4d75 24213675 nbranch g24_tx_fast_hop ,positive 
+4d76 18408401 increase 1 ,temp 
+4d77 6048c618 storet 1 ,mem_24g_retry 
+4d78 6fe0c638 fetch 1 ,mem_24g_fast_hop_count 
+4d79 c007cd7e beq 15 ,mouse_g24_transmit_hop_process_4ms 
+4d7a 6fe0c618 fetch 1 ,mem_24g_retry 
+4d7b c00a366f beq 20 ,g24_hop_ch_disable 
+4d7c c00f366f beq 30 ,g24_hop_ch_disable 
+4d7d 20600000 rtn 
+
+mouse_g24_transmit_hop_process_4ms:
+4d7e 6fe0c618 fetch 1 ,mem_24g_retry 
+4d7f c005366f beq 10 ,g24_hop_ch_disable 
+4d80 c007b66f beq 15 ,g24_hop_ch_disable 
+4d81 20600000 rtn 
+
+mouse_default_init:
+4d82 44ba400e bpatch patch0e_4 ,mem_patch0e 
+4d83 204067ff call hid_device_default_parm_init 
+4d84 20404d4e call mouse_xtal_init 
+4d85 20404d53 call mouse_24g_phy_select 
+4d86 204058fc call mouse_24g_long_sleep_set 
+4d87 20203266 branch g24_pair_param_init 
+
+mouse_param_info_init:
+4d88 44bac00e bpatch patch0e_5 ,mem_patch0e 
+4d89 20404d93 call mouse_param_common_init 
+4d8a 20404da5 call mouse_report_rate_parm_init 
+4d8b 20404dd3 call mouse_sensor_set_angle 
+
+mouse_spi_parm_init:
+4d8c 58000a77 setarg 0x0a77 
+4d8d 67e143fe store 2 ,mem_spi_init_clk 
+4d8e 38001224 setsect 0 ,0x1224 
+4d8f 38044000 setsect 1 ,0x4000 
+4d90 38080000 setsect 2 ,0x0 
+4d91 e7e28005 istore 5 ,contw 
+4d92 20600000 rtn 
+
+mouse_param_common_init:
+4d93 58009000 setarg mouse_ble_att_list_addr 
+4d94 67e142f9 store 2 ,mem_ui_le_uuid_table 
+4d95 70491700 jam dpi_button_state_up ,mem_mouse_dpi_button_state 
+4d96 58000000 setarg 0 
+4d97 67e3c65c store 7 ,mem_mouse_key 
+4d98 6fe0c502 fetch 1 ,mem_ui_button_timeout 
+4d99 67e0c731 store 1 ,mem_bt_discovery_count 
+4d9a 67e0c732 store 1 ,mem_select_device_count 
+4d9b 7045a001 jam type_ms ,mem_24g_data_type 
+4d9c 7045fa01 jam 1 ,mem_24g_fast_conn_enable 
+4d9d 704ac400 jam 0 ,mem_mouse_pair_flag 
+4d9e 20404da0 call mouse_compare_addr_init 
+4d9f 2020680c branch hid_device_param_common_init 
+
+mouse_compare_addr_init:
+4da0 d8400000 arg 0 ,temp 
+4da1 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+4da2 c289681d bbit1 mouse_enable_otp ,hid_device_compare_addr_store 
+4da3 d85fffff arg 0xffffff ,temp 
+4da4 2020681d branch hid_device_compare_addr_store 
+
+mouse_report_rate_parm_init:
+4da5 20404dae call mouse_24g_report_rate_parm_init 
+4da6 6fe1c61f fetch 3 ,mem_24g_short_sleep_set 
+4da7 67e1c8dc store 3 ,mem_mouse_24g_short_sleep_set_init 
+
+mouse_le_report_rate_parm_init:
+4da8 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+4da9 c40d8000 rtnbit0 mouse_enable_bt_125hz 
+4daa 58000006 setarg le_interval_7_5ms 
+
+mouse_le_interval_store:
+4dab 67e142d5 store 2 ,mem_le_interval_min 
+4dac 67e142d7 store 2 ,mem_le_interval_min + 2 
+4dad 20600000 rtn 
+
+mouse_24g_report_rate_parm_init:
+4dae 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+4daf c28ccdb2 bbit1 mouse_enable_24g_500hz ,mouse_g24_interval_param_2ms 
+4db0 c28c4db9 bbit1 mouse_enable_24g_250hz ,mouse_g24_interval_param_4ms 
+4db1 20204dc6 branch mouse_g24_interval_param_8ms 
+
+mouse_g24_interval_param_2ms:
+4db2 6fe0c8bf fetch 1 ,mem_mouse_24g_fast_hop_count_2ms 
+4db3 67e0c638 store 1 ,mem_24g_fast_hop_count 
+4db4 6fe248d0 fetch 4 ,mem_mouse_24g_tsniff_2ms 
+4db5 67e248cc store 4 ,mem_mouse_24g_tsniff 
+
+mouse_report_rate_set_500hz:
+4db6 58080606 setarg 0x080606 
+4db7 67e1c5be store 3 ,mem_24g_interval 
+4db8 202036bb branch g24_transmit_by_interrupt_enable 
+
+mouse_g24_interval_param_4ms:
+4db9 6fe1c8c0 fetch 3 ,mem_mouse_24g_short_sleep_set_4ms 
+4dba 67e1c61f store 3 ,mem_24g_short_sleep_set 
+4dbb 6fe1c8c3 fetch 3 ,mem_mouse_24g_long_sleep_set_4ms 
+4dbc 67e1c622 store 3 ,mem_24g_long_sleep_set 
+4dbd 6fe248d4 fetch 4 ,mem_mouse_24g_tsniff_4ms 
+4dbe 67e248cc store 4 ,mem_mouse_24g_tsniff 
+4dbf 58100c0c setarg 0x100c0c 
+4dc0 67e1c5be store 3 ,mem_24g_interval 
+4dc1 70463805 jam 0x05 ,mem_24g_fast_hop_count 
+4dc2 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+4dc3 c41e8000 rtnbit0 mouse_enable_24g_2m_phy 
+4dc4 7046380f jam 0x0f ,mem_24g_fast_hop_count 
+4dc5 20600000 rtn 
+
+mouse_g24_interval_param_8ms:
+4dc6 6fe1c8c6 fetch 3 ,mem_mouse_24g_short_sleep_set_8ms 
+4dc7 67e1c61f store 3 ,mem_24g_short_sleep_set 
+4dc8 6fe1c8c9 fetch 3 ,mem_mouse_24g_long_sleep_set_8ms 
+4dc9 67e1c622 store 3 ,mem_24g_long_sleep_set 
+4dca 6fe248d8 fetch 4 ,mem_mouse_24g_tsniff_8ms 
+4dcb 67e248cc store 4 ,mem_mouse_24g_tsniff 
+4dcc 581c1919 setarg 0x1c1919 
+4dcd 67e1c5be store 3 ,mem_24g_interval 
+4dce 7046380b jam 0x0b ,mem_24g_fast_hop_count 
+4dcf 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+4dd0 c41e8000 rtnbit0 mouse_enable_24g_2m_phy 
+4dd1 7046381e jam 0x1e ,mem_24g_fast_hop_count 
+4dd2 20600000 rtn 
+
+mouse_sensor_set_angle:
+4dd3 44bb400e bpatch patch0e_6 ,mem_patch0e 
+4dd4 20404de9 call mouse_set_sensor_angle_float 
+4dd5 6fe0c895 fetch 1 ,mem_select_sensor_angle_gpio 
+4dd6 c17f8000 rtneq gpio_disable 
+4dd7 6fe0c895 fetch 1 ,mem_select_sensor_angle_gpio 
+4dd8 20405258 call mouse_gpio_config_pu_check 
+4dd9 6848c895 fetcht 1 ,mem_select_sensor_angle_gpio 
+4dda 20406ee0 call gpio_get_bit 
+4ddb 2020cde5 branch mouse_set_sensor_angle_gnd ,true 
+4ddc 6fe0c895 fetch 1 ,mem_select_sensor_angle_gpio 
+4ddd 2040525c call mouse_gpio_config_pd_check 
+4dde 6848c895 fetcht 1 ,mem_select_sensor_angle_gpio 
+4ddf 20406ee0 call gpio_get_bit 
+4de0 2020cde9 branch mouse_set_sensor_angle_float ,true 
+
+mouse_set_sensor_angle_vin:
+4de1 6fe0c895 fetch 1 ,mem_select_sensor_angle_gpio 
+4de2 20405258 call mouse_gpio_config_pu_check 
+4de3 6fe0c898 fetch 1 ,mem_sensor_angle_vin 
+4de4 20204dea branch mouse_store_sensor_angle 
+
+mouse_set_sensor_angle_gnd:
+4de5 6fe0c895 fetch 1 ,mem_select_sensor_angle_gpio 
+4de6 2040525c call mouse_gpio_config_pd_check 
+4de7 6fe0c897 fetch 1 ,mem_sensor_angle_gnd 
+4de8 20204dea branch mouse_store_sensor_angle 
+
+mouse_set_sensor_angle_float:
+4de9 6fe0c896 fetch 1 ,mem_sensor_angle_default 
+
+mouse_store_sensor_angle:
+4dea 67e0c9fb store 1 ,mem_config_sensor_angle 
+4deb 20600000 rtn 
+
+mouse_le_name_modify:
+4dec 44bc400f bpatch patch0f_0 ,mem_patch0f 
+4ded 20758000 rtn wake 
+4dee 6fe0ca1e fetch 1 ,mem_le_name_patch_len 
+4def 207a0000 rtn blank 
+4df0 1fe0f201 add pdata ,1 ,loopcnt 
+4df1 d8c04a1e arg mem_le_name_patch_len ,contr 
+4df2 d8a0426d arg mem_le_name_len ,contw 
+4df3 20407cdc call memcpy 
+4df4 20202948 branch le_modified_name_adv 
+
+mouse_start_work:
+4df5 44bcc00f bpatch patch0f_1 ,mem_patch0f 
+4df6 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+4df7 c29f594b bbit1 mouse_enable_24g_first_auto_pairing ,mouse_24g_first_start_auto_pair_mode 
+4df8 6fe0c678 fetch 1 ,mem_device_flag 
+4df9 c000593a beq mode_24g_device ,mouse_24g_start_mode 
+
+mouse_le_fast_conn_judge:
+4dfa 20405a70 call mouse_device_le_reconn_led_config 
+4dfb 204053c1 call mouse_bluetooth_fast_conn_disable 
+4dfc 6fe0c678 fetch 1 ,mem_device_flag 
+4dfd c000ce00 beq mode_bt_device1 ,mouse_le_device1_judge 
+4dfe c0014e05 beq mode_bt_device2 ,mouse_le_device2_judge 
+4dff 20600000 rtn 
+
+mouse_le_device1_judge:
+4e00 6fe3467a fetch 6 ,mem_device1_addr 
+4e01 684b46f8 fetcht 6 ,mem_device_compare_addr 
+4e02 98467c00 isub temp ,null 
+4e03 2022d3ad branch mouse_bluetooth_fast_conn_init ,zero 
+4e04 20204e09 branch mouse_start_reconnect_device 
+
+mouse_le_device2_judge:
+4e05 6fe34687 fetch 6 ,mem_device2_addr 
+4e06 684b46f8 fetcht 6 ,mem_device_compare_addr 
+4e07 98467c00 isub temp ,null 
+4e08 2022d3ad branch mouse_bluetooth_fast_conn_init ,zero 
+
+mouse_start_reconnect_device:
+4e09 44bd400f bpatch patch0f_2 ,mem_patch0f 
+4e0a da204679 arg mem_device1_type ,rega 
+4e0b 6fe0c678 fetch 1 ,mem_device_flag 
+4e0c 1fe0ffff increase -1 ,pdata 
+4e0d 1feffe0d mul32 pdata ,13 ,pdata 
+4e0e 9a20a200 iadd rega ,rega 
+4e0f efe08011 ifetch 1 ,rega 
+4e10 67e0c3fc store 1 ,mem_xrecord_mode 
+
+mouse_start_reconnect:
+4e11 6fe0c3fc fetch 1 ,mem_xrecord_mode 
+4e12 c01a4e1e beq rec_4_mode ,mouse4_0_check_reconn_target 
+4e13 202053ad branch mouse_bluetooth_fast_conn_init 
+
+mouse_wakeup_from_power_check:
+4e14 44bdc00f bpatch patch0f_3 ,mem_patch0f 
+4e15 78547c00 disable user 
+4e16 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+4e17 c3054e1b bbit0 mouse_enable_wakeup_from_power ,mouse_wakeup_from_poweron 
+4e18 6ff08132 fetch 1 ,core_lpm_isogate 
+4e19 c2824e1b bbit1 cold_wake ,mouse_wakeup_from_poweron 
+4e1a 78347c00 enable user 
+
+mouse_wakeup_from_poweron:
+4e1b 6fe0c740 fetch 1 ,mem_reconn_times_init 
+4e1c 67e0c73f store 1 ,mem_reconn_times 
+4e1d 20600000 rtn 
+
+mouse4_0_check_reconn_target:
+4e1e 70475401 jam 1 ,mem_device_le_reconnect_flag 
+4e1f 6848c719 fetcht 1 ,mem_device_fast_direct_timeout 
+4e20 6fe0c74f fetch 1 ,mem_device_fast_conn_flag 
+4e21 c07fce23 beq 0xff ,mouse4_0_check_reconn_target_next 
+4e22 6848c653 fetcht 1 ,mem_device_direct_timeout 
+
+mouse4_0_check_reconn_target_next:
+4e23 6048c720 storet 1 ,mem_device_direct_timer 
+4e24 204037a2 call app_lpm_mult_disable 
+4e25 6fe1c75c fetch 3 ,mem_le_adv_direct_ind 
+4e26 67e1c351 store 3 ,mem_le_adv_data + 4 
+4e27 2040545e call mouse_le_check_adv_flag 
+4e28 58000004 setarg adv_flag_bredr_not_supported 
+4e29 e7e08006 istore 1 ,contr 
+4e2a d8c0436d arg mem_le_scan_data ,contr 
+4e2b 20405465 call mouse_le_adv_data_update 
+4e2c 20207860 branch check_51cmd_adv 
+
+mouse_lpm_check_wake_lock:
+4e2d c513377d bmark1 mark_24g ,app_get_lpm_wake_lock 
+4e2e 6fe0c9f9 fetch 1 ,mem_mouse_clear_sensor_data_flag 
+4e2f 203a377d branch app_get_lpm_wake_lock ,blank 
+4e30 6fe0c781 fetch 1 ,mem_le_conn_param_reject 
+4e31 c000b77d beq le_lpm_disable ,app_get_lpm_wake_lock 
+4e32 6fe0c672 fetch 1 ,mem_mouse_wheel_trigger 
+4e33 243a377d nbranch app_get_lpm_wake_lock ,blank 
+4e34 2020377f branch app_put_lpm_wake_lock 
+
+mouse_app_enter_hibernate:
+4e35 44be400f bpatch patch0f_4 ,mem_patch0f 
+4e36 58000006 setarg pan_reg_config 
+4e37 20406971 call twspi_read 
+4e38 c281ce3b bbit1 3 ,mouse_app_enter_hibernate_next 
+4e39 204052f0 call mouse_sensor_reset 
+4e3a 20405303 call mouse_sensor_powerdown 
+
+mouse_app_enter_hibernate_next:
+4e3b 20404e42 call mouse_setgpio_hibernate 
+4e3c 2020379c branch app_enter_hibernate 
+
+mouse_before_hibernate:
+4e3d 44bec00f bpatch patch0f_5 ,mem_patch0f 
+4e3e 20407388 call disable_authrom 
+
+mouse_before_hibernate_next:
+4e3f 2040567d call mouse_flash_power_down 
+4e40 6848c667 fetcht 1 ,mem_sensor_motion_gpio 
+4e41 20206ecd branch gpio_clr_wake 
+
+mouse_setgpio_hibernate:
+4e42 44bf400f bpatch patch0f_6 ,mem_patch0f 
+4e43 204053ab call mouse_set_sdio_high 
+4e44 20407de6 call clear_wake 
+4e45 20404fc9 call mouse_before_hibernate_wheel_gpio_set 
+4e46 6fe0c894 fetch 1 ,mem_mouse_sensor_sdio_gpio 
+4e47 20405254 call mouse_gpio_config_output_high 
+4e48 6848c665 fetcht 1 ,mem_device_switch_gpio 
+4e49 20404f02 call mouse_gpio_set_pupd_by_input 
+
+mouse_setgpio_hibernate_next:
+4e4a 20404e75 call mouse_lpm_before_common 
+4e4b 6848c666 fetcht 1 ,mem_device_reuse_2ice_gpio 
+4e4c 20404f0a call device_gpio_config_input_pu 
+4e4d 20404f0e call mouse_gpio_set_analog 
+4e4e 204059fc call mouse_logo_led_off 
+4e4f 20405ace call mouse_device_multi_led_all_off 
+4e50 20404e5c call mouse_adc_gpio_set_before_hibernate 
+4e51 20204e52 branch mouse_wheel_gpio_set_before_hibernate 
+
+mouse_wheel_gpio_set_before_hibernate:
+4e52 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+4e53 c41e0000 rtnbit0 mouse_enable_wheel_wake_up_cancel 
+
+mouse_wheel_gpio_clr_wakeup:
+4e54 6848c668 fetcht 1 ,mem_whee_a_data_gpio 
+4e55 20406ecd call gpio_clr_wake 
+4e56 6848c669 fetcht 1 ,mem_whee_b_data_gpio 
+4e57 20406ecd call gpio_clr_wake 
+4e58 6848c668 fetcht 1 ,mem_whee_a_data_gpio 
+4e59 20404f06 call device_gpio_config_input_pd 
+4e5a 6848c669 fetcht 1 ,mem_whee_b_data_gpio 
+4e5b 20204f06 branch device_gpio_config_input_pd 
+
+mouse_adc_gpio_set_before_hibernate:
+4e5c 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+4e5d c4098000 rtnbit0 mouse_enable_adc 
+4e5e 6fe0c41d fetch 1 ,mem_adc_config_flag 
+4e5f c1810000 rtnne adc_config_gpio 
+4e60 6848c64c fetcht 1 ,mem_adc_channel_gpio 
+4e61 20206f05 branch gpio_set_analog 
+
+mouse_gpio_pd_idle:
+4e62 d8c08070 arg core_gpio_conf ,contr 
+4e63 df200010 arg gpio_number ,loopcnt 
+
+mouse_gpio_pd_idle_loop:
+4e64 efe08006 ifetch 1 ,contr 
+4e65 243a4e69 nbranch mouse_gpio_pd_idle_configured ,blank 
+4e66 58000080 setarg gpcfg_pulldown 
+4e67 18c08bff add contr ,-1 ,contw 
+4e68 e7e08005 istore 1 ,contw 
+
+mouse_gpio_pd_idle_configured:
+4e69 c2004e64 loop mouse_gpio_pd_idle_loop 
+4e6a dfe080dc arg core_gpio_conf_hi + gpio_number_ext ,pdata 
+4e6b 98c67c00 isub contr ,null 
+4e6c 20628000 rtn zero 
+
+mouse_gpio_pd_idle_ext:
+4e6d df200008 arg gpio_number_ext ,loopcnt 
+4e6e d8c080d4 arg core_gpio_conf_hi ,contr 
+4e6f 20204e64 branch mouse_gpio_pd_idle_loop 
+
+mouse_process_lpm_before:
+4e70 c6130000 rtnmark1 mark_24g 
+4e71 20404e75 call mouse_lpm_before_common 
+4e72 6fe08015 fetch 1 ,mem_lpm_current_mult 
+4e73 247a0000 nrtn blank 
+4e74 20206ecd branch gpio_clr_wake 
+
+mouse_lpm_before_common:
+4e75 44bfc00f bpatch patch0f_7 ,mem_patch0f 
+4e76 70488c00 jam 0 ,mem_qdec_set_flag 
+4e77 20407de6 call clear_wake 
+4e78 6848c89c fetcht 1 ,mem_matrix_public_gpio 
+4e79 20406ef1 call gpio_out_active 
+4e7a 6848c89c fetcht 1 ,mem_matrix_public_gpio 
+4e7b 20406ecd call gpio_clr_wake 
+4e7c 20404f42 call mouse_wheel_check 
+4e7d 6fe0c893 fetch 1 ,mem_mouse_sensor_sclk_gpio 
+4e7e 20405254 call mouse_gpio_config_output_high 
+4e7f 20406968 call twspi_disable 
+4e80 6848c88d fetcht 1 ,mem_lbutton_gpio 
+4e81 20406eac call gpio_set_wake 
+4e82 6848c88f fetcht 1 ,mem_rbutton_gpio 
+4e83 20406eac call gpio_set_wake 
+4e84 6848c88e fetcht 1 ,mem_mbutton_gpio 
+4e85 20406eac call gpio_set_wake 
+4e86 6848c890 fetcht 1 ,mem_bk_button_gpio 
+4e87 20406eac call gpio_set_wake 
+4e88 6848c891 fetcht 1 ,mem_fw_button_gpio 
+4e89 20406eac call gpio_set_wake 
+4e8a 6848c892 fetcht 1 ,mem_dpi_button_gpio 
+4e8b 20406eac call gpio_set_wake 
+4e8c 6848c89d fetcht 1 ,mem_config_select_device_button_gpio 
+4e8d 20406eac call gpio_set_wake 
+4e8e 6848c89e fetcht 1 ,mem_customer_key_gpio 
+4e8f 20406eac call gpio_set_wake 
+4e90 20404e62 call mouse_gpio_pd_idle 
+4e91 6848c668 fetcht 1 ,mem_whee_a_data_gpio 
+4e92 20406ea5 call gpio_set_wake_by_current_state 
+4e93 6848c669 fetcht 1 ,mem_whee_b_data_gpio 
+4e94 20406ea5 call gpio_set_wake_by_current_state 
+4e95 6848c89a fetcht 1 ,mem_whee_ta_data_gpio 
+4e96 20406ea5 call gpio_set_wake_by_current_state 
+4e97 6848c89b fetcht 1 ,mem_whee_tb_data_gpio 
+4e98 20406ea5 call gpio_set_wake_by_current_state 
+4e99 6848c667 fetcht 1 ,mem_sensor_motion_gpio 
+4e9a 20206eac branch gpio_set_wake 
+
+mouse_set_mult:
+4e9b 6fe14500 fetch 2 ,mem_ui_state_map 
+4e9c c4048000 rtnbit0 ui_state_ble_connected 
+4e9d 1a227e00 copy rega ,pdata 
+4e9e 243a29b4 nbranch le_set_config_short_mult ,blank 
+4e9f 202029b9 branch le_clr_config_short_mult 
+
+mouse_adc_gpio_set:
+4ea0 44c04010 bpatch patch10_0 ,mem_patch10 
+4ea1 6fe0c41d fetch 1 ,mem_adc_config_flag 
+4ea2 c1810000 rtnne adc_config_gpio 
+4ea3 6848c64c fetcht 1 ,mem_adc_channel_gpio 
+4ea4 20206f0b branch gpio_set_high_impedance 
+
+mouse_adc_read:
+4ea5 44c0c010 bpatch patch10_1 ,mem_patch10 
+4ea6 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+4ea7 c4098000 rtnbit0 mouse_enable_adc 
+4ea8 20404ea0 call mouse_adc_gpio_set 
+
+mouse_adc_read_start:
+4ea9 20406fb2 call enable_adc 
+4eaa 20406f8e call vdd_calculate_by_mode 
+4eab 67e1464a store 2 ,mem_device_vdd_now_vol 
+4eac 6fe0c41d fetch 1 ,mem_adc_config_flag 
+4ead c0814eb4 bne adc_config_gpio ,mouse_adc_data_process 
+4eae 6849464a fetcht 2 ,mem_device_vdd_now_vol 
+4eaf 184ffe08 mul32 temp ,8 ,pdata 
+4eb0 1fe6fc0a div pdata ,10 
+4eb1 20407d61 call get_div_result 
+4eb2 9840fe00 iadd temp ,pdata 
+4eb3 67e1464a store 2 ,mem_device_vdd_now_vol 
+
+mouse_adc_data_process:
+4eb4 da204644 arg mem_device_vdd_calculate_set ,rega 
+4eb5 20404ec4 call mouse_adc_bat_percent_lowpower_out 
+4eb6 6fe0c422 fetch 1 ,mem_adc_power_flag 
+4eb7 c280ce35 bbit1 1 ,mouse_app_enter_hibernate 
+4eb8 c3004ebd bbit0 0 ,mouse_adc_no_low_voltage 
+4eb9 70464e01 jam 1 ,mem_device_adc_last_low_voltage_flag 
+4eba 20204ebb branch mouse_adc_low_voltage 
+
+mouse_adc_low_voltage:
+4ebb d8e00004 arg mouse_low_voltage_flag ,queue 
+4ebc 2020582e branch mouse_enable_function_flag 
+
+mouse_adc_no_low_voltage:
+4ebd d8e00004 arg mouse_low_voltage_flag ,queue 
+4ebe 20405832 call mouse_disable_function_flag 
+4ebf 70464d01 jam 1 ,mem_adc_low_volatage_led_timer_count 
+4ec0 6fe0c64e fetch 1 ,mem_device_adc_last_low_voltage_flag 
+4ec1 207a0000 rtn blank 
+4ec2 70464e00 jam 0 ,mem_device_adc_last_low_voltage_flag 
+4ec3 20205a43 branch mouse_low_voltage_led_off_judge 
+
+mouse_adc_bat_percent_lowpower_out:
+4ec4 44c14010 bpatch patch10_2 ,mem_patch10 
+4ec5 efe40011 ifetch 8 ,rega 
+4ec6 67e4064e store 8 ,mem_pdatatemp 
+
+mouse_adc_bat_percent_lowpower_out_battery:
+4ec7 20407057 call adc_clear_no_power_flag 
+4ec8 20407051 call adc_clear_low_power_flag 
+4ec9 6fe10654 fetch 2 ,mem_pdatatemp + 6 
+4eca 68490650 fetcht 2 ,mem_pdatatemp + 2 
+4ecb 98467c00 isub temp ,null 
+4ecc 24417054 ncall adc_set_no_power_flag ,positive 
+4ecd 68490652 fetcht 2 ,mem_pdatatemp + 4 
+4ece 98467c00 isub temp ,null 
+4ecf 2441704e ncall adc_set_low_power_flag ,positive 
+
+mouse_adc_bat_level_set:
+4ed0 6fe10654 fetch 2 ,mem_pdatatemp + 6 
+4ed1 6849064e fetcht 2 ,mem_pdatatemp 
+4ed2 98467c00 isub temp ,null 
+4ed3 20214ee1 branch mouse_adc_bat_level_100_percent ,positive 
+4ed4 68490650 fetcht 2 ,mem_pdatatemp + 2 
+4ed5 98467e00 isub temp ,pdata 
+4ed6 24214ee3 nbranch mouse_adc_bat_level_0_percent ,positive 
+4ed7 203a4ee3 branch mouse_adc_bat_level_0_percent ,blank 
+4ed8 1fefa264 mul32 pdata ,100 ,rega 
+4ed9 6fe1064e fetch 2 ,mem_pdatatemp 
+4eda 68490650 fetcht 2 ,mem_pdatatemp + 2 
+4edb 98460400 isub temp ,temp 
+4edc 1a227e00 copy rega ,pdata 
+4edd 9846fc00 idiv temp 
+4ede 20407d61 call get_div_result 
+4edf 67e0c77c store 1 ,mem_le_battery_level_percentage 
+4ee0 20600000 rtn 
+
+mouse_adc_bat_level_100_percent:
+4ee1 70477c64 jam 100 ,mem_le_battery_level_percentage 
+4ee2 20600000 rtn 
+
+mouse_adc_bat_level_0_percent:
+4ee3 70477c00 jam 0 ,mem_le_battery_level_percentage 
+4ee4 20600000 rtn 
+
+mouse_gpio_init:
+4ee5 6848c43e fetcht 1 ,mem_eeprom_wp_gpio 
+4ee6 20406ef1 call gpio_config_output 
+4ee7 6848c88d fetcht 1 ,mem_lbutton_gpio 
+4ee8 20404f0a call device_gpio_config_input_pu 
+4ee9 6848c88f fetcht 1 ,mem_rbutton_gpio 
+4eea 20404f0a call device_gpio_config_input_pu 
+4eeb 6848c88e fetcht 1 ,mem_mbutton_gpio 
+4eec 20404f0a call device_gpio_config_input_pu 
+4eed 6848c890 fetcht 1 ,mem_bk_button_gpio 
+4eee 20404f0a call device_gpio_config_input_pu 
+4eef 6848c891 fetcht 1 ,mem_fw_button_gpio 
+4ef0 20404f0a call device_gpio_config_input_pu 
+4ef1 6848c892 fetcht 1 ,mem_dpi_button_gpio 
+4ef2 20404f0a call device_gpio_config_input_pu 
+4ef3 6848c89c fetcht 1 ,mem_matrix_public_gpio 
+4ef4 20404f0a call device_gpio_config_input_pu 
+4ef5 6848c89d fetcht 1 ,mem_config_select_device_button_gpio 
+4ef6 20404f0a call device_gpio_config_input_pu 
+4ef7 6848c89e fetcht 1 ,mem_customer_key_gpio 
+4ef8 20404f0a call device_gpio_config_input_pu 
+4ef9 2040591f call mouse_wheel_gpio_init 
+4efa 6848c89a fetcht 1 ,mem_whee_ta_data_gpio 
+4efb 20404f0a call device_gpio_config_input_pu 
+4efc 6848c89b fetcht 1 ,mem_whee_tb_data_gpio 
+4efd 20404f0a call device_gpio_config_input_pu 
+4efe 6848c667 fetcht 1 ,mem_sensor_motion_gpio 
+4eff 20404f0a call device_gpio_config_input_pu 
+4f00 6848c665 fetcht 1 ,mem_device_switch_gpio 
+4f01 20204f0a branch device_gpio_config_input_pu 
+
+mouse_gpio_set_pupd_by_input:
+4f02 18410e7f and temp ,0x7f ,queue 
+4f03 6ff2011c fetch 4 ,core_gpio_in 
+4f04 afefffff qisolate1 pdata 
+4f05 2020cf0a branch device_gpio_config_input_pu ,true 
+
+device_gpio_config_input_pd:
+4f06 18467cff sub temp ,ui_button_gpio_disable ,null 
+4f07 20628000 rtn zero 
+4f08 79200407 set1 gpio_active_bit ,temp 
+4f09 20206ed7 branch gpio_config_input 
+
+device_gpio_config_input_pu:
+4f0a 18467cff sub temp ,ui_button_gpio_disable ,null 
+4f0b 20628000 rtn zero 
+4f0c 793f8407 set0 gpio_active_bit ,temp 
+4f0d 20206ed7 branch gpio_config_input 
+
+mouse_gpio_set_analog:
+4f0e 6fe1c72e fetch 3 ,mem_device_set_analog_bit_set 
+4f0f 67e1864e store 3 ,mem_pdatatemp 
+4f10 df200018 arg 24 ,loopcnt 
+4f11 d8400000 arg 0 ,temp 
+
+mouse_gpio_set_analog_bit_loop:
+4f12 6fe1864e fetch 3 ,mem_pdatatemp 
+4f13 2feffe00 isolate1 0 ,pdata 
+4f14 2040ef05 call gpio_set_analog ,true 
+4f15 6fe1864e fetch 3 ,mem_pdatatemp 
+4f16 1fe3fe00 lshift pdata ,pdata 
+4f17 67e1864e store 3 ,mem_pdatatemp 
+4f18 18408401 increase 1 ,temp 
+4f19 c2004f12 loop mouse_gpio_set_analog_bit_loop 
+4f1a 20600000 rtn 
+
+mouse_sensor_spi_init:
+4f1b 20404f20 call mouse_spid_init_pin 
+4f1c 7043fe73 jam 0x73 ,mem_spi_init_clk 
+4f1d 20404f1f call mouse_spi_init 
+4f1e 2020696c branch twspi_enable 
+
+mouse_spi_write_flash_cb:
+
+mouse_spi_init:
+4f1f 20206bbc branch spid_init 
+
+mouse_spid_init_pin:
+4f20 6fe0c893 fetch 1 ,mem_mouse_sensor_sclk_gpio 
+4f21 d8400021 arg gpcfg_spid_sck ,temp 
+4f22 20406f1d call gpio_config_function_int 
+4f23 6fe0c894 fetch 1 ,mem_mouse_sensor_sdio_gpio 
+4f24 d8400023 arg gpcfg_spid_sdio ,temp 
+4f25 20206f1d branch gpio_config_function_int 
+
+mouse_motion:
+4f26 44c1c010 bpatch patch10_3 ,mem_patch10 
+4f27 2040684e call hid_device_copy_key_data 
+4f28 78547c00 disable user 
+4f29 58000000 setarg 0 
+4f2a 67e3465d store 6 ,mem_mouse_x 
+4f2b 2040530c call mouse_check_sensor_data 
+4f2c 58000089 setarg 0x0089 
+4f2d 20406970 call twspi_write 
+4f2e 2040506b call mouse_setting_sensor_type 
+4f2f 20404f38 call mouse_zwheel 
+4f30 20404f3d call mouse_t_zwheel 
+4f31 204050ca call mouse_key 
+4f32 6fe0c65c fetch 1 ,mem_mouse_key 
+4f33 1fe17e1f and_into 0x1f ,pdata 
+4f34 67e0c65c store 1 ,mem_mouse_key 
+4f35 24345853 nbranch mouse_drawing_optima_init ,user 
+
+mouse_motion_rf_data:
+4f36 20405841 call mouse_drawing_optima 
+4f37 20205535 branch mouse_no_data_timer_init 
+
+mouse_zwheel:
+4f38 6fe0c671 fetch 1 ,mem_mouse_z_data 
+4f39 207a0000 rtn blank 
+4f3a 67e0c661 store 1 ,mem_mouse_z 
+4f3b 70467100 jam 0 ,mem_mouse_z_data 
+4f3c 20207dbc branch enable_user 
+
+mouse_t_zwheel:
+4f3d 6fe0c66d fetch 1 ,mem_mouse_tz_data 
+4f3e 207a0000 rtn blank 
+4f3f 67e0c662 store 1 ,mem_mouse_tz 
+4f40 70466d00 jam 0 ,mem_mouse_tz_data 
+4f41 20207dbc branch enable_user 
+
+mouse_wheel_check:
+4f42 44c24010 bpatch patch10_4 ,mem_patch10 
+4f43 2040591f call mouse_wheel_gpio_init 
+4f44 20404f51 call mouse_t_wheel_scan 
+4f45 20404f8d call mouse_wheel_scan 
+4f46 6fe0c66b fetch 1 ,mem_wheel_tb_new_pinlevel 
+4f47 6848c66a fetcht 1 ,mem_wheel_tb_old_pinlevel 
+4f48 67e0c66a store 1 ,mem_wheel_tb_old_pinlevel 
+4f49 98467c00 isub temp ,null 
+4f4a 2422b781 nbranch app_lpm_wake_auto_lock ,zero 
+4f4b 6fe0c66f fetch 1 ,mem_mwheel_b_new_pinlevel 
+4f4c 6848c66e fetcht 1 ,mem_mwheel_b_old_pinlevel 
+4f4d 67e0c66e store 1 ,mem_mwheel_b_old_pinlevel 
+4f4e 98467c00 isub temp ,null 
+4f4f 2422b781 nbranch app_lpm_wake_auto_lock ,zero 
+4f50 20600000 rtn 
+
+mouse_t_wheel_scan:
+4f51 6fe0c89a fetch 1 ,mem_whee_ta_data_gpio 
+4f52 c17f8000 rtneq gpio_disable 
+4f53 da200000 arg 0 ,rega 
+4f54 6848c89a fetcht 1 ,mem_whee_ta_data_gpio 
+4f55 20406ee0 call gpio_get_bit 
+4f56 7920a200 setflag true ,0 ,rega 
+4f57 6848c89b fetcht 1 ,mem_whee_tb_data_gpio 
+4f58 20406ee0 call gpio_get_bit 
+4f59 7920a201 setflag true ,1 ,rega 
+4f5a 1a227e00 copy rega ,pdata 
+4f5b 67e0c66b store 1 ,mem_wheel_tb_new_pinlevel 
+4f5c c000cf61 beq 0x01 ,mouse_t_wheel_scan_judge1 
+4f5d c0014f65 beq 0x02 ,mouse_t_wheel_scan_judge2 
+4f5e 6fe0c66c fetch 1 ,mem_wheel_tog 
+4f5f c283cf71 bbit1 7 ,mouse_t_wheel_scan_judge3 
+4f60 20600000 rtn 
+
+mouse_t_wheel_scan_judge1:
+4f61 6fe0c66a fetch 1 ,mem_wheel_tb_old_pinlevel 
+4f62 c0004f69 beq 0 ,mouse_t_wheel_scan_judge11 
+4f63 c001cf6b beq 3 ,mouse_t_wheel_scan_judge12 
+4f64 20600000 rtn 
+
+mouse_t_wheel_scan_judge2:
+4f65 6fe0c66a fetch 1 ,mem_wheel_tb_old_pinlevel 
+4f66 c0004f6d beq 0 ,mouse_t_wheel_scan_judge21 
+4f67 c001cf6f beq 3 ,mouse_t_wheel_scan_judge22 
+4f68 20600000 rtn 
+
+mouse_t_wheel_scan_judge11:
+4f69 70466c82 jam 0x82 ,mem_wheel_tog 
+4f6a 20600000 rtn 
+
+mouse_t_wheel_scan_judge12:
+4f6b 70466c81 jam 0x81 ,mem_wheel_tog 
+4f6c 20600000 rtn 
+
+mouse_t_wheel_scan_judge21:
+4f6d 70466c80 jam 0x80 ,mem_wheel_tog 
+4f6e 20600000 rtn 
+
+mouse_t_wheel_scan_judge22:
+4f6f 70466c83 jam 0x83 ,mem_wheel_tog 
+4f70 20600000 rtn 
+
+mouse_t_wheel_scan_judge3:
+4f71 6fe0c66c fetch 1 ,mem_wheel_tog 
+4f72 793ffe07 set0 7 ,pdata 
+4f73 67e0c66c store 1 ,mem_wheel_tog 
+4f74 c0004f79 beq 0 ,mouse_t_wheel_scan_judge30 
+4f75 c000cf7c beq 1 ,mouse_t_wheel_scan_judge31 
+4f76 c0014f7f beq 2 ,mouse_t_wheel_scan_judge32 
+4f77 c001cf82 beq 3 ,mouse_t_wheel_scan_judge33 
+4f78 20600000 rtn 
+
+mouse_t_wheel_scan_judge30:
+4f79 6fe0c66b fetch 1 ,mem_wheel_tb_new_pinlevel 
+4f7a c001cf85 beq 3 ,mouse_wheel_t_forward 
+4f7b 20600000 rtn 
+
+mouse_t_wheel_scan_judge31:
+4f7c 6fe0c66b fetch 1 ,mem_wheel_tb_new_pinlevel 
+4f7d c0004f85 beq 0 ,mouse_wheel_t_forward 
+4f7e 20600000 rtn 
+
+mouse_t_wheel_scan_judge32:
+4f7f 6fe0c66b fetch 1 ,mem_wheel_tb_new_pinlevel 
+4f80 c001cf89 beq 3 ,mouse_wheel_t_back 
+4f81 20600000 rtn 
+
+mouse_t_wheel_scan_judge33:
+4f82 6fe0c66b fetch 1 ,mem_wheel_tb_new_pinlevel 
+4f83 c0004f89 beq 0 ,mouse_wheel_t_back 
+4f84 20600000 rtn 
+
+mouse_wheel_t_forward:
+4f85 6fe0c66d fetch 1 ,mem_mouse_tz_data 
+4f86 1fe0fe01 increase 1 ,pdata 
+4f87 67e0c66d store 1 ,mem_mouse_tz_data 
+4f88 20600000 rtn 
+
+mouse_wheel_t_back:
+4f89 6fe0c66d fetch 1 ,mem_mouse_tz_data 
+4f8a 1fe0ffff increase -1 ,pdata 
+4f8b 67e0c66d store 1 ,mem_mouse_tz_data 
+4f8c 20600000 rtn 
+
+mouse_wheel_scan:
+4f8d 6fe0c668 fetch 1 ,mem_whee_a_data_gpio 
+4f8e c17f8000 rtneq gpio_disable 
+4f8f da200000 arg 0 ,rega 
+4f90 6848c668 fetcht 1 ,mem_whee_a_data_gpio 
+4f91 20406ee0 call gpio_get_bit 
+4f92 7920a200 setflag true ,0 ,rega 
+4f93 6848c669 fetcht 1 ,mem_whee_b_data_gpio 
+4f94 20406ee0 call gpio_get_bit 
+4f95 7920a201 setflag true ,1 ,rega 
+4f96 1a227e00 copy rega ,pdata 
+4f97 67e0c66f store 1 ,mem_mwheel_b_new_pinlevel 
+4f98 c000cf9d beq 0x01 ,mouse_wheel_scan_judge1 
+4f99 c0014fa1 beq 0x02 ,mouse_wheel_scan_judge2 
+4f9a 6fe0c670 fetch 1 ,mem_mwheel_tog 
+4f9b c283cfad bbit1 7 ,mouse_wheel_scan_judge3 
+4f9c 20600000 rtn 
+
+mouse_wheel_scan_judge1:
+4f9d 6fe0c66e fetch 1 ,mem_mwheel_b_old_pinlevel 
+4f9e c0004fa5 beq 0 ,mouse_wheel_scan_judge11 
+4f9f c001cfa7 beq 3 ,mouse_wheel_scan_judge12 
+4fa0 20600000 rtn 
+
+mouse_wheel_scan_judge2:
+4fa1 6fe0c66e fetch 1 ,mem_mwheel_b_old_pinlevel 
+4fa2 c0004fa9 beq 0 ,mouse_wheel_scan_judge21 
+4fa3 c001cfab beq 3 ,mouse_wheel_scan_judge22 
+4fa4 20600000 rtn 
+
+mouse_wheel_scan_judge11:
+4fa5 70467082 jam 0x82 ,mem_mwheel_tog 
+4fa6 20600000 rtn 
+
+mouse_wheel_scan_judge12:
+4fa7 70467081 jam 0x81 ,mem_mwheel_tog 
+4fa8 20600000 rtn 
+
+mouse_wheel_scan_judge21:
+4fa9 70467080 jam 0x80 ,mem_mwheel_tog 
+4faa 20600000 rtn 
+
+mouse_wheel_scan_judge22:
+4fab 70467083 jam 0x83 ,mem_mwheel_tog 
+4fac 20600000 rtn 
+
+mouse_wheel_scan_judge3:
+4fad 6fe0c670 fetch 1 ,mem_mwheel_tog 
+4fae 793ffe07 set0 7 ,pdata 
+4faf 67e0c670 store 1 ,mem_mwheel_tog 
+4fb0 c0004fb5 beq 0 ,mouse_wheel_scan_judge30 
+4fb1 c000cfb8 beq 1 ,mouse_wheel_scan_judge31 
+4fb2 c0014fbb beq 2 ,mouse_wheel_scan_judge32 
+4fb3 c001cfbe beq 3 ,mouse_wheel_scan_judge33 
+4fb4 20600000 rtn 
+
+mouse_wheel_scan_judge30:
+4fb5 6fe0c66f fetch 1 ,mem_mwheel_b_new_pinlevel 
+4fb6 c001cfc1 beq 3 ,mouse_wheel_forward 
+4fb7 20600000 rtn 
+
+mouse_wheel_scan_judge31:
+4fb8 6fe0c66f fetch 1 ,mem_mwheel_b_new_pinlevel 
+4fb9 c0004fc1 beq 0 ,mouse_wheel_forward 
+4fba 20600000 rtn 
+
+mouse_wheel_scan_judge32:
+4fbb 6fe0c66f fetch 1 ,mem_mwheel_b_new_pinlevel 
+4fbc c001cfc5 beq 3 ,mouse_wheel_back 
+4fbd 20600000 rtn 
+
+mouse_wheel_scan_judge33:
+4fbe 6fe0c66f fetch 1 ,mem_mwheel_b_new_pinlevel 
+4fbf c0004fc5 beq 0 ,mouse_wheel_back 
+4fc0 20600000 rtn 
+
+mouse_wheel_forward:
+4fc1 6fe0c671 fetch 1 ,mem_mouse_z_data 
+4fc2 1fe0fe01 increase 1 ,pdata 
+4fc3 67e0c671 store 1 ,mem_mouse_z_data 
+4fc4 20600000 rtn 
+
+mouse_wheel_back:
+4fc5 6fe0c671 fetch 1 ,mem_mouse_z_data 
+4fc6 1fe0ffff increase -1 ,pdata 
+4fc7 67e0c671 store 1 ,mem_mouse_z_data 
+4fc8 20600000 rtn 
+
+mouse_before_hibernate_wheel_gpio_set:
+4fc9 6848c668 fetcht 1 ,mem_whee_a_data_gpio 
+4fca 20404f02 call mouse_gpio_set_pupd_by_input 
+4fcb 6848c669 fetcht 1 ,mem_whee_b_data_gpio 
+4fcc 20404f02 call mouse_gpio_set_pupd_by_input 
+4fcd 6848c89a fetcht 1 ,mem_whee_ta_data_gpio 
+4fce 20404f02 call mouse_gpio_set_pupd_by_input 
+4fcf 6848c89b fetcht 1 ,mem_whee_tb_data_gpio 
+4fd0 20204f02 branch mouse_gpio_set_pupd_by_input 
+
+mouse_wheel_trigger:
+4fd1 6fe14661 fetch 2 ,mem_mouse_z 
+4fd2 207a0000 rtn blank 
+4fd3 70467201 jam 1 ,mem_mouse_wheel_trigger 
+4fd4 7046730a jam 10 ,mem_mouse_wheel_trigger_timer 
+4fd5 20600000 rtn 
+
+mouse_wheel_trigger_timer:
+4fd6 da604673 arg mem_mouse_wheel_trigger_timer ,regc 
+4fd7 da404fd9 arg mouse_wheel_trigger_disable ,regb 
+4fd8 20203755 branch timer_single_step 
+
+mouse_wheel_trigger_disable:
+4fd9 70467200 jam 0 ,mem_mouse_wheel_trigger 
+4fda 20600000 rtn 
+
+mouse_dpi_check:
+4fdb 6fe0c892 fetch 1 ,mem_dpi_button_gpio 
+4fdc c17f8000 rtneq gpio_disable 
+4fdd da200000 arg 0 ,rega 
+4fde 704a0f05 jam mouse_dpi_key ,mem_mouse_key_temp 
+4fdf 6848c892 fetcht 1 ,mem_dpi_button_gpio 
+4fe0 20404fe8 call mouse_dpi_key_check 
+4fe1 67e0ca0c store 1 ,mem_mouse_dpikey_press_status 
+4fe2 6fe0c89c fetch 1 ,mem_matrix_public_gpio 
+4fe3 c07fcffc beq gpio_disable ,mouse_3io6key_dpi_check_end 
+4fe4 20405203 call mouse_matrix_public_gpio_reset 
+
+mouse_dpi_check_exit:
+4fe5 1a227e00 copy rega ,pdata 
+4fe6 c282d004 bbit1 mouse_dpi_key ,mouse_dpi_down 
+4fe7 2020500b branch mouse_dpi_up 
+
+mouse_dpi_key_check:
+4fe8 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+4fe9 c295d002 bbit1 mouse_enable_dpi_key_connect_gnd ,mouse_dpi_key_connect_gnd 
+4fea 6fe0ca0c fetch 1 ,mem_mouse_dpikey_press_status 
+4feb 1fe22600 copy pdata ,regc 
+4fec 6fe0c89c fetch 1 ,mem_matrix_public_gpio 
+4fed c07fcff8 beq gpio_disable ,mouse_dpi_3io6key_check 
+4fee 6fe0ca13 fetch 1 ,mem_mouse_ghost_flag 
+4fef 243a4fff nbranch mouse_dpi_check_end ,blank 
+
+mouse_dpi_key_connect_matrix:
+4ff0 20406ee0 call gpio_get_bit 
+4ff1 6848c89c fetcht 1 ,mem_matrix_public_gpio 
+4ff2 2020d002 branch mouse_dpi_key_connect_gnd ,true 
+4ff3 6848c89c fetcht 1 ,mem_matrix_public_gpio 
+4ff4 20406ef1 call gpio_out_active 
+4ff5 6848c892 fetcht 1 ,mem_dpi_button_gpio 
+4ff6 6fe0ca0c fetch 1 ,mem_mouse_dpikey_press_status 
+4ff7 20205236 branch mouse_check_key_connect_gnd 
+
+mouse_dpi_3io6key_check:
+4ff8 6fe0c892 fetch 1 ,mem_dpi_button_gpio 
+4ff9 20405256 call mouse_gpio_config_output_low 
+4ffa 6848c892 fetcht 1 ,mem_dpi_button_gpio 
+4ffb 20205242 branch mouse_3io6key_check 
+
+mouse_3io6key_dpi_check_end:
+4ffc 6848c892 fetcht 1 ,mem_dpi_button_gpio 
+4ffd 20404f0a call device_gpio_config_input_pu 
+4ffe 20204fe5 branch mouse_dpi_check_exit 
+
+mouse_dpi_check_end:
+4fff 70491700 jam dpi_button_state_up ,mem_mouse_dpi_button_state 
+5000 704a0c00 jam 0 ,mem_mouse_dpikey_press_status 
+5001 20600000 rtn 
+
+mouse_dpi_key_connect_gnd:
+5002 6fe0ca0c fetch 1 ,mem_mouse_dpikey_press_status 
+5003 20205236 branch mouse_check_key_connect_gnd 
+
+mouse_dpi_down:
+5004 6fe0c917 fetch 1 ,mem_mouse_dpi_button_state 
+5005 c1008000 rtneq dpi_button_state_down 
+5006 70491701 jam dpi_button_state_down ,mem_mouse_dpi_button_state 
+5007 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5008 c3940000 rtnbit1 mouse_enable_select_device_by_dpi_button 
+5009 c39b0000 rtnbit1 mouse_enable_dpi_key_long_press_disconvery 
+500a 2020501b branch mouse_dpi_process 
+
+mouse_dpi_up:
+500b 6fe0c917 fetch 1 ,mem_mouse_dpi_button_state 
+500c c1000000 rtneq dpi_button_state_up 
+500d 70491700 jam dpi_button_state_up ,mem_mouse_dpi_button_state 
+500e 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+500f c2945012 bbit1 mouse_enable_select_device_by_dpi_button ,mouse_dpi_up_next 
+5010 c29b5012 bbit1 mouse_enable_dpi_key_long_press_disconvery ,mouse_dpi_up_next 
+5011 20600000 rtn 
+
+mouse_dpi_up_next:
+5012 6fe0c918 fetch 1 ,mem_mouse_dpi_long_press_flag 
+5013 243a5016 nbranch mouse_dpi_up_after_long_press ,blank 
+5014 6fe0c732 fetch 1 ,mem_select_device_count 
+5015 245a501b ncall mouse_dpi_process ,blank 
+
+mouse_dpi_up_after_long_press:
+5016 70491800 jam 0 ,mem_mouse_dpi_long_press_flag 
+5017 6fe0c502 fetch 1 ,mem_ui_button_timeout 
+5018 67e0c732 store 1 ,mem_select_device_count 
+5019 67e0c731 store 1 ,mem_bt_discovery_count 
+501a 20600000 rtn 
+
+mouse_dpi_process:
+501b 44c2c010 bpatch patch10_5 ,mem_patch10 
+501c 2040504c call mouse_dpi_ghost_check 
+501d 20740000 rtn user 
+
+mouse_dpi_process_skip_ghost:
+501e 6fe0c6a2 fetch 1 ,mem_mouse_dpi 
+501f 1fe20400 copy pdata ,temp 
+5020 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5021 c28ad028 bbit1 mouse_enable_double_dpi_key ,mouse_double_dpi_check 
+5022 18427e00 copy temp ,pdata 
+5023 1fe0fe01 increase 1 ,pdata 
+5024 1fe17e03 and pdata ,0x03 ,pdata 
+
+mouse_dpi_level_store:
+5025 67e0c6a2 store 1 ,mem_mouse_dpi 
+5026 20405068 call mouse_setting_dpi 
+5027 2020557a branch mouse_store_dpi_info_check 
+
+mouse_double_dpi_check:
+5028 6fe0ca1c fetch 1 ,mem_dpi_another_button_down_enable 
+5029 243a5045 nbranch mouse_another_dpi_button_down ,blank 
+
+mouse_dpi_increase:
+502a 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+502b c28e5039 bbit1 mouse_enable_dpi_level_4 ,mouse_dpi_increase_level_4 
+502c 18427e00 copy temp ,pdata 
+502d c1008000 rtneq mouse_dpi_level2 
+
+mouse_dpi_increase_level:
+502e c0005035 beq mouse_dpi_level1 ,mouse_dpi_level_3 
+502f c0015033 beq mouse_dpi_level3 ,mouse_dpi_level_2 
+5030 20600000 rtn 
+
+mouse_dpi_level_1:
+5031 58000002 setarg 2 
+5032 20205025 branch mouse_dpi_level_store 
+
+mouse_dpi_level_2:
+5033 58000000 setarg 0 
+5034 20205025 branch mouse_dpi_level_store 
+
+mouse_dpi_level_3:
+5035 58000001 setarg 1 
+5036 20205025 branch mouse_dpi_level_store 
+
+mouse_dpi_level_4:
+5037 58000003 setarg 3 
+5038 20205025 branch mouse_dpi_level_store 
+
+mouse_dpi_increase_level_4:
+5039 18427e00 copy temp ,pdata 
+503a c1008000 rtneq mouse_dpi_level2 
+503b c0005035 beq mouse_dpi_level1 ,mouse_dpi_level_3 
+503c c0015037 beq mouse_dpi_level3 ,mouse_dpi_level_4 
+503d c001d033 beq mouse_dpi_level4 ,mouse_dpi_level_2 
+503e 20600000 rtn 
+
+mouse_dpi_decrease_level_4:
+503f 18427e00 copy temp ,pdata 
+5040 c1010000 rtneq mouse_dpi_level3 
+5041 c0005037 beq mouse_dpi_level1 ,mouse_dpi_level_4 
+5042 c000d033 beq mouse_dpi_level2 ,mouse_dpi_level_2 
+5043 c001d031 beq mouse_dpi_level4 ,mouse_dpi_level_1 
+5044 20600000 rtn 
+
+mouse_another_dpi_button_down:
+
+mouse_dpi_decrease:
+5045 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5046 c28e503f bbit1 mouse_enable_dpi_level_4 ,mouse_dpi_decrease_level_4 
+5047 18427e00 copy temp ,pdata 
+5048 c1010000 rtneq mouse_dpi_level3 
+
+mouse_dpi_decrease_level:
+5049 c0005031 beq mouse_dpi_level1 ,mouse_dpi_level_1 
+504a c000d033 beq mouse_dpi_level2 ,mouse_dpi_level_2 
+504b 20600000 rtn 
+
+mouse_dpi_ghost_check:
+504c 78547c00 disable user 
+504d 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+504e c3958000 rtnbit1 mouse_enable_dpi_key_connect_gnd 
+504f 202057b1 branch mouse_ghost_key_value_check 
+
+mouse_dpi_key_check_long_press:
+5050 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5051 c2945054 bbit1 mouse_enable_select_device_by_dpi_button ,mouse_select_device_by_dpi_button 
+5052 c29b505b bbit1 mouse_enable_dpi_key_long_press_disconvery ,mouse_discovery_by_dpi_button 
+5053 20600000 rtn 
+
+mouse_select_device_by_dpi_button:
+5054 6fe0c917 fetch 1 ,mem_mouse_dpi_button_state 
+5055 c1808000 rtnne dpi_button_state_down 
+5056 da604732 arg mem_select_device_count ,regc 
+5057 da405059 arg mouse_ready_reconnection_by_dpi_button ,regb 
+5058 20203755 branch timer_single_step 
+
+mouse_ready_reconnection_by_dpi_button:
+5059 70491801 jam 1 ,mem_mouse_dpi_long_press_flag 
+505a 202057f6 branch mouse_ready_reconnection_by_button 
+
+mouse_discovery_by_dpi_button:
+505b 6fe0c917 fetch 1 ,mem_mouse_dpi_button_state 
+505c c1808000 rtnne dpi_button_state_down 
+505d da604731 arg mem_bt_discovery_count ,regc 
+505e da405060 arg mouse_long_dpi_button_bt_discovery ,regb 
+505f 20203755 branch timer_single_step 
+
+mouse_long_dpi_button_bt_discovery:
+5060 70491801 jam 1 ,mem_mouse_dpi_long_press_flag 
+5061 202054b2 branch mouse_long_button_bt_discovery 
+
+mouse_setting_dpi_4_level:
+5062 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5063 c38e0000 rtnbit1 mouse_enable_dpi_level_4 
+5064 6fe0c6a2 fetch 1 ,mem_mouse_dpi 
+5065 c1818000 rtnne mouse_dpi_level4 
+5066 7046a200 jam mouse_dpi_level1 ,mem_mouse_dpi 
+5067 20600000 rtn 
+
+mouse_setting_dpi:
+5068 44c34010 bpatch patch10_6 ,mem_patch10 
+5069 20405062 call mouse_setting_dpi_4_level 
+506a 20405a1e call mouse_dpi_led_blink_delay 
+
+mouse_setting_sensor_type:
+506b 44c3c010 bpatch patch10_7 ,mem_patch10 
+506c 6fe0c9fa fetch 1 ,mem_config_sensor_type 
+506d c006508f beq s201x ,mouse_seting_s201_dpi 
+506e c001d0a9 beq p3212 ,mouse_seting_3212_dpi 
+506f c005d0bd beq ka8g2 ,mouse_seting_ka8g2_dpi 
+5070 6fe0c6a2 fetch 1 ,mem_mouse_dpi 
+5071 c0005077 beq mouse_dpi_level1 ,mouse_set_cpi0 
+5072 c000d075 beq mouse_dpi_level2 ,mouse_set_cpi1 
+5073 c0015079 beq mouse_dpi_level3 ,mouse_set_cpi2 
+5074 c001d07b beq mouse_dpi_level4 ,mouse_set_cpi3 
+
+mouse_set_cpi1:
+5075 6848c906 fetcht 1 ,mem_320x_dpi_1 
+5076 2020507c branch mouse_dpi_store 
+
+mouse_set_cpi0:
+5077 6848c905 fetcht 1 ,mem_320x_dpi_0 
+5078 2020507c branch mouse_dpi_store 
+
+mouse_set_cpi2:
+5079 6848c907 fetcht 1 ,mem_320x_dpi_2 
+507a 2020507c branch mouse_dpi_store 
+
+mouse_set_cpi3:
+507b 6848c908 fetcht 1 ,mem_320x_dpi_3 
+
+mouse_dpi_store:
+507c 6fe0c9fa fetch 1 ,mem_config_sensor_type 
+507d c002508b beq p3065_xy ,mouse_3065xy_set_dpi 
+507e c002d08b beq mx8650 ,mouse_3065xy_set_dpi 
+507f c004508d beq ka8 ,mouse_ka8_set_dpi 
+5080 c003d08d beq p6520 ,mouse_ka8_set_dpi 
+5081 c003508b beq p8009 ,mouse_3065xy_set_dpi 
+
+mouse_dpi_write:
+5082 6048c916 storet 1 ,mem_mouse_cpi_count 
+5083 58000006 setarg mouse_dpi_address 
+5084 20406971 call twspi_read 
+5085 1fe104f8 and pdata ,0xf8 ,temp 
+5086 6fe0c916 fetch 1 ,mem_mouse_cpi_count 
+5087 9840fe00 iadd temp ,pdata 
+5088 1fed7e00 lshift8 pdata ,pdata 
+5089 1fe0fe06 add pdata ,mouse_dpi_address ,pdata 
+508a 20206970 branch twspi_write 
+
+mouse_3065xy_set_dpi:
+508b 184085ff increase -1 ,temp 
+508c 20205082 branch mouse_dpi_write 
+
+mouse_ka8_set_dpi:
+508d 18408402 increase 2 ,temp 
+508e 20205082 branch mouse_dpi_write 
+
+mouse_seting_s201_dpi:
+508f 6fe0c6a2 fetch 1 ,mem_mouse_dpi 
+5090 c0005095 beq mouse_dpi_level1 ,mouse_set_s201_dpi_0 
+5091 c000d099 beq mouse_dpi_level2 ,mouse_set_s201_dpi_2 
+5092 c001509b beq mouse_dpi_level3 ,mouse_set_s201_dpi_3 
+5093 c001d09d beq mouse_dpi_level4 ,mouse_set_s201_dpi_4 
+5094 20600000 rtn 
+
+mouse_set_s201_dpi_0:
+5095 6fe0c911 fetch 1 ,mem_sensor_s201_dpi_0 
+5096 2020509e branch mouse_dpi_s201_store 
+
+mouse_set_s201_dpi_1:
+5097 6fe0c912 fetch 1 ,mem_sensor_s201_dpi_1 
+5098 2020509e branch mouse_dpi_s201_store 
+
+mouse_set_s201_dpi_2:
+5099 6fe0c913 fetch 1 ,mem_sensor_s201_dpi_2 
+509a 2020509e branch mouse_dpi_s201_store 
+
+mouse_set_s201_dpi_3:
+509b 6fe0c914 fetch 1 ,mem_sensor_s201_dpi_3 
+509c 2020509e branch mouse_dpi_s201_store 
+
+mouse_set_s201_dpi_4:
+509d 6fe0c915 fetch 1 ,mem_sensor_s201_dpi_4 
+
+mouse_dpi_s201_store:
+509e 1fe22200 copy pdata ,rega 
+509f 5800c309 setarg 0xc309 
+50a0 20406970 call twspi_write 
+50a1 1a227e00 copy rega ,pdata 
+50a2 1fed7e00 lshift8 pdata ,pdata 
+50a3 1fe0fe23 add pdata ,0x23 ,pdata 
+50a4 20406970 call twspi_write 
+
+mouse_sensor_enable_wp:
+50a5 58000009 setarg 0x0009 
+50a6 20206970 branch twspi_write 
+
+mouse_sensor_disable_wp:
+50a7 58005a09 setarg 0x5a09 
+50a8 20206970 branch twspi_write 
+
+mouse_seting_3212_dpi:
+50a9 6fe0c6a2 fetch 1 ,mem_mouse_dpi 
+50aa c00050b0 beq mouse_dpi_level1 ,mouse_set_p3212_cpi0 
+50ab c000d0ae beq mouse_dpi_level2 ,mouse_set_p3212_cpi1 
+50ac c00150b2 beq mouse_dpi_level3 ,mouse_set_p3212_cpi2 
+50ad c001d0b4 beq mouse_dpi_level4 ,mouse_set_p3212_cpi3 
+
+mouse_set_p3212_cpi1:
+50ae 6fe0c90a fetch 1 ,mem_3212_dpi_1 
+50af 202050b5 branch mouse_p3212_dpi 
+
+mouse_set_p3212_cpi0:
+50b0 6fe0c909 fetch 1 ,mem_3212_dpi_0 
+50b1 202050b5 branch mouse_p3212_dpi 
+
+mouse_set_p3212_cpi2:
+50b2 6fe0c90b fetch 1 ,mem_3212_dpi_2 
+50b3 202050b5 branch mouse_p3212_dpi 
+
+mouse_set_p3212_cpi3:
+50b4 6fe0c90c fetch 1 ,mem_3212_dpi_3 
+
+mouse_p3212_dpi:
+50b5 67e0c916 store 1 ,mem_mouse_cpi_count 
+50b6 1fed7e00 lshift8 pdata ,pdata 
+50b7 1fe22200 copy pdata ,rega 
+50b8 1fe0fe0d add pdata ,mouse_p3212_dpi_xaddress ,pdata 
+50b9 20406970 call twspi_write 
+50ba 1a227e00 copy rega ,pdata 
+50bb 1fe0fe0e add pdata ,mouse_p3212_dpi_yaddress ,pdata 
+50bc 20206970 branch twspi_write 
+
+mouse_seting_ka8g2_dpi:
+50bd 6fe0c6a2 fetch 1 ,mem_mouse_dpi 
+50be c00050c4 beq mouse_dpi_level1 ,mouse_set_pka8g2_cpi0 
+50bf c000d0c2 beq mouse_dpi_level2 ,mouse_set_pka8g2_cpi1 
+50c0 c00150c6 beq mouse_dpi_level3 ,mouse_set_pka8g2_cpi2 
+50c1 c001d0c8 beq mouse_dpi_level4 ,mouse_set_pka8g2_cpi3 
+
+mouse_set_pka8g2_cpi1:
+50c2 6fe0c90e fetch 1 ,mem_ka8g2_dpi_1 
+50c3 202050b5 branch mouse_p3212_dpi 
+
+mouse_set_pka8g2_cpi0:
+50c4 6fe0c90d fetch 1 ,mem_ka8g2_dpi_0 
+50c5 202050b5 branch mouse_p3212_dpi 
+
+mouse_set_pka8g2_cpi2:
+50c6 6fe0c90f fetch 1 ,mem_ka8g2_dpi_2 
+50c7 202050b5 branch mouse_p3212_dpi 
+
+mouse_set_pka8g2_cpi3:
+50c8 6fe0c910 fetch 1 ,mem_ka8g2_dpi_3 
+50c9 202050b5 branch mouse_p3212_dpi 
+
+mouse_key:
+50ca 20405170 call mouse_check_firekey_gpio 
+50cb 6fe0ca19 fetch 1 ,mem_fire_key_flag 
+50cc 243a5184 nbranch fire_key_press ,blank 
+50cd 6fe0ca14 fetch 1 ,mem_fire_key_status 
+50ce 243a5183 nbranch fire_key_process ,blank 
+50cf 204051ac call mouse_check_key_gpio 
+
+mouse_key_next:
+50d0 204050e0 call mouse_ghost_key_check 
+50d1 20404e9b call mouse_set_mult 
+50d2 204050db call mouse_24g_key 
+50d3 1a227e00 copy rega ,pdata 
+50d4 6848c664 fetcht 1 ,mem_mouse_key_last 
+50d5 67e0c664 store 1 ,mem_mouse_key_last 
+50d6 67e0c65c store 1 ,mem_mouse_key 
+50d7 9842fe00 ixor temp ,pdata 
+50d8 1fe67c00 sub pdata ,0 ,null 
+50d9 20628000 rtn zero 
+50da 20207dbc branch enable_user 
+
+mouse_24g_key:
+50db c6930000 rtnmark0 mark_24g 
+50dc 1a227e00 copy rega ,pdata 
+50dd 207a0000 rtn blank 
+50de 67e0c65c store 1 ,mem_mouse_key 
+50df 20207dbc branch enable_user 
+
+mouse_ghost_key_check:
+50e0 704a1100 jam 0 ,mem_mouse_matrix_key_cow_count 
+50e1 704a1200 jam 0 ,mem_mouse_matrix_key_row_count 
+50e2 704a1300 jam 0 ,mem_mouse_ghost_flag 
+50e3 1fe22400 copy pdata ,regb 
+50e4 6848c88d fetcht 1 ,mem_lbutton_gpio 
+50e5 6fe0c890 fetch 1 ,mem_bk_button_gpio 
+50e6 98467c00 isub temp ,null 
+50e7 2022d0f0 branch mouse_matrix_ghost_key_l_bk ,zero 
+50e8 6fe0c891 fetch 1 ,mem_fw_button_gpio 
+50e9 98467c00 isub temp ,null 
+50ea 2022d0f5 branch mouse_matrix_ghost_key_l_fw ,zero 
+50eb 6848c88e fetcht 1 ,mem_mbutton_gpio 
+50ec 6fe0c890 fetch 1 ,mem_bk_button_gpio 
+50ed 98467c00 isub temp ,null 
+50ee 2022d104 branch mouse_ghost_key_mbk_rfw ,zero 
+50ef 20205107 branch mouse_ghost_key_mfw_rbk 
+
+mouse_matrix_ghost_key_l_bk:
+50f0 6848c88e fetcht 1 ,mem_mbutton_gpio 
+50f1 6fe0c891 fetch 1 ,mem_fw_button_gpio 
+50f2 98467c00 isub temp ,null 
+50f3 2022d0fa branch mouse_ghost_key_lbk_mfw ,zero 
+50f4 202050fd branch mouse_ghost_key_lbk_rfw 
+
+mouse_matrix_ghost_key_l_fw:
+50f5 6848c88e fetcht 1 ,mem_mbutton_gpio 
+50f6 6fe0c890 fetch 1 ,mem_bk_button_gpio 
+50f7 98467c00 isub temp ,null 
+50f8 2022d0ff branch mouse_ghost_key_lfw_mbk ,zero 
+50f9 20205102 branch mouse_ghost_key_lfw_rbk 
+
+mouse_ghost_key_lbk_mfw:
+50fa 20405113 call mouse_ghost_key_check_l_bk 
+50fb 2040511f call mouse_ghost_key_check_m_fw 
+50fc 20205109 branch mouse_ghost_key_check_next 
+
+mouse_ghost_key_lbk_rfw:
+50fd 20405113 call mouse_ghost_key_check_l_bk 
+50fe 20205105 branch mouse_ghost_key_rfw 
+
+mouse_ghost_key_lfw_mbk:
+50ff 2040511c call mouse_ghost_key_check_l_fw 
+5100 20405116 call mouse_ghost_key_check_m_bk 
+5101 20205109 branch mouse_ghost_key_check_next 
+
+mouse_ghost_key_lfw_rbk:
+5102 2040511c call mouse_ghost_key_check_l_fw 
+5103 20205108 branch mouse_ghost_key_rbk 
+
+mouse_ghost_key_mbk_rfw:
+5104 20405116 call mouse_ghost_key_check_m_bk 
+
+mouse_ghost_key_rfw:
+5105 20405122 call mouse_ghost_key_check_r_fw 
+5106 20205109 branch mouse_ghost_key_check_next 
+
+mouse_ghost_key_mfw_rbk:
+5107 2040511f call mouse_ghost_key_check_m_fw 
+
+mouse_ghost_key_rbk:
+5108 20405119 call mouse_ghost_key_check_r_bk 
+
+mouse_ghost_key_check_next:
+5109 20405125 call mouse_ghost_key_check_bk_fw 
+510a 20405128 call mouse_ghost_key_check_lmr 
+510b 6fe0ca12 fetch 1 ,mem_mouse_matrix_key_row_count 
+510c 207a0000 rtn blank 
+510d 6fe0ca11 fetch 1 ,mem_mouse_matrix_key_cow_count 
+510e 207a0000 rtn blank 
+510f 704a1301 jam 1 ,mem_mouse_ghost_flag 
+5110 6fe0c664 fetch 1 ,mem_mouse_key_last 
+5111 1fe22200 copy pdata ,rega 
+5112 20600000 rtn 
+
+mouse_ghost_key_check_l_bk:
+5113 1a417e09 and regb ,mouse_l_bk_button ,pdata 
+5114 c004d130 beq mouse_l_bk_button ,mouse_matrix_cow_more_than_one_key 
+5115 20600000 rtn 
+
+mouse_ghost_key_check_m_bk:
+5116 1a417e12 and regb ,mouse_m_bk_button ,pdata 
+5117 c0095130 beq mouse_m_bk_button ,mouse_matrix_cow_more_than_one_key 
+5118 20600000 rtn 
+
+mouse_ghost_key_check_r_bk:
+5119 1a417e0a and regb ,mouse_r_bk_button ,pdata 
+511a c0055130 beq mouse_r_bk_button ,mouse_matrix_cow_more_than_one_key 
+511b 20600000 rtn 
+
+mouse_ghost_key_check_l_fw:
+511c 1a417e11 and regb ,mouse_l_fw_button ,pdata 
+511d c008d130 beq mouse_l_fw_button ,mouse_matrix_cow_more_than_one_key 
+511e 20600000 rtn 
+
+mouse_ghost_key_check_m_fw:
+511f 1a417e14 and regb ,mouse_m_fw_button ,pdata 
+5120 c00a5130 beq mouse_m_fw_button ,mouse_matrix_cow_more_than_one_key 
+5121 20600000 rtn 
+
+mouse_ghost_key_check_r_fw:
+5122 1a417e12 and regb ,mouse_r_fw_button ,pdata 
+5123 c0095130 beq mouse_r_fw_button ,mouse_matrix_cow_more_than_one_key 
+5124 20600000 rtn 
+
+mouse_ghost_key_check_bk_fw:
+5125 1a417e18 and regb ,mouse_bk_fw_button ,pdata 
+5126 c00c512e beq mouse_bk_fw_button ,mouse_matrix_row_more_than_one_key 
+5127 20600000 rtn 
+
+mouse_ghost_key_check_lmr:
+5128 18417e07 and temp ,mouse_lmr_button ,pdata 
+5129 c001d12e beq mouse_lr_button ,mouse_matrix_row_more_than_one_key 
+512a c002d12e beq mouse_lm_button ,mouse_matrix_row_more_than_one_key 
+512b c003512e beq mouse_rm_button ,mouse_matrix_row_more_than_one_key 
+512c c003d12e beq mouse_lmr_button ,mouse_matrix_row_more_than_one_key 
+512d 20600000 rtn 
+
+mouse_matrix_row_more_than_one_key:
+512e 704a1201 jam 1 ,mem_mouse_matrix_key_row_count 
+512f 20600000 rtn 
+
+mouse_matrix_cow_more_than_one_key:
+5130 704a1101 jam 1 ,mem_mouse_matrix_key_cow_count 
+5131 20600000 rtn 
+
+mouse_dpi_another_gpio_check:
+5132 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5133 c40a8000 rtnbit0 mouse_enable_double_dpi_key 
+5134 c316513a bbit0 mouse_enable_another_dpi_key_connect_gnd ,mouse_dpi_another_gpio_connect_vin_check 
+
+mouse_dpi_another_gpio_connect_gnd_check:
+5135 6fe0c8a0 fetch 1 ,mem_dpi_another_button_gpio 
+5136 20405254 call mouse_gpio_config_output_high 
+5137 20405148 call mouse_dpi_another_check 
+5138 6848c8a0 fetcht 1 ,mem_dpi_another_button_gpio 
+5139 20204f0a branch device_gpio_config_input_pu 
+
+mouse_dpi_another_gpio_connect_vin_check:
+513a 6fe0c8a0 fetch 1 ,mem_dpi_another_button_gpio 
+513b 20405256 call mouse_gpio_config_output_low 
+513c 704a1d00 jam mouse_dpi_another_key ,mem_mouse_key_temp_patch 
+513d 6848c8a0 fetcht 1 ,mem_dpi_another_button_gpio 
+513e 6fe0ca1a fetch 1 ,mem_dpi_another_press_status 
+513f 20405161 call mouse_check_key_connect_vin_new 
+5140 2040514c call mouse_dpi_another_state_check 
+5141 6848c8a0 fetcht 1 ,mem_dpi_another_button_gpio 
+5142 20204f0a branch device_gpio_config_input_pu 
+
+mouse_dpi_another_down_new:
+5143 20404f0a call device_gpio_config_input_pu 
+5144 6fe0ca1b fetch 1 ,mem_dpi_another_button_state 
+5145 c1008000 rtneq dpi_button_state_down 
+5146 704a1b01 jam dpi_button_state_down ,mem_dpi_another_button_state 
+5147 2020501b branch mouse_dpi_process 
+
+mouse_dpi_another_check:
+5148 704a1d00 jam mouse_dpi_another_key ,mem_mouse_key_temp_patch 
+5149 6848c8a0 fetcht 1 ,mem_dpi_another_button_gpio 
+514a 6fe0ca1a fetch 1 ,mem_dpi_another_press_status 
+514b 20405157 call mouse_check_key_connect_gnd_new 
+
+mouse_dpi_another_state_check:
+514c 67e0ca1a store 1 ,mem_dpi_another_press_status 
+514d 6fe0ca1c fetch 1 ,mem_dpi_another_button_down_enable 
+514e 203a5153 branch mouse_dpi_another_up ,blank 
+
+mouse_dpi_another_down:
+514f 6fe0ca1b fetch 1 ,mem_dpi_another_button_state 
+5150 c1008000 rtneq dpi_button_state_down 
+5151 704a1b01 jam dpi_button_state_down ,mem_dpi_another_button_state 
+5152 2020501b branch mouse_dpi_process 
+
+mouse_dpi_another_up:
+5153 6fe0ca1b fetch 1 ,mem_dpi_another_button_state 
+5154 c1000000 rtneq dpi_button_state_up 
+5155 704a1b00 jam dpi_button_state_up ,mem_dpi_another_button_state 
+5156 20600000 rtn 
+
+mouse_check_key_connect_gnd_new:
+5157 1fe3fe00 lshift pdata ,pdata 
+5158 1fe22400 copy pdata ,regb 
+5159 20406ee0 call gpio_get_bit 
+515a 7920a400 setflag true ,0 ,regb 
+515b 1a417e07 and regb ,0x07 ,pdata 
+515c 6848ca1d fetcht 1 ,mem_mouse_key_temp_patch 
+515d 18420e00 copy temp ,queue 
+515e c003d16c beq 0x07 ,mouse_another_dpi_key_press 
+515f c000516e beq 0x00 ,mouse_another_dpi_key_release 
+5160 20600000 rtn 
+
+mouse_check_key_connect_vin_new:
+5161 1fe3fe00 lshift pdata ,pdata 
+5162 1fe22400 copy pdata ,regb 
+5163 20404f06 call device_gpio_config_input_pd 
+5164 20406ee0 call gpio_get_bit 
+5165 7920a400 setflag true ,0 ,regb 
+5166 1a417e07 and regb ,0x07 ,pdata 
+5167 6848ca1d fetcht 1 ,mem_mouse_key_temp_patch 
+5168 18420e00 copy temp ,queue 
+5169 c003d16c beq 0x07 ,mouse_another_dpi_key_press 
+516a c000516e beq 0x00 ,mouse_another_dpi_key_release 
+516b 20600000 rtn 
+
+mouse_another_dpi_key_press:
+516c 704a1c01 jam 1 ,mem_dpi_another_button_down_enable 
+516d 20600000 rtn 
+
+mouse_another_dpi_key_release:
+516e 704a1c00 jam 0 ,mem_dpi_another_button_down_enable 
+516f 20600000 rtn 
+
+mouse_check_firekey_gpio:
+5170 da400000 arg 0 ,regb 
+5171 6fe0c89f fetch 1 ,mem_firebutton_gpio 
+5172 c17f8000 rtneq gpio_disable 
+5173 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5174 c317517d bbit0 mouse_enable_fire_key_connect_gnd ,mouse_check_firekey_connect_vin 
+
+mouse_check_firekey_connect_gnd:
+5175 6848c89f fetcht 1 ,mem_firebutton_gpio 
+5176 20404f0a call device_gpio_config_input_pu 
+5177 6848c89f fetcht 1 ,mem_firebutton_gpio 
+5178 20406ee0 call gpio_get_bit 
+5179 7920a400 setflag true ,0 ,regb 
+
+mouse_firekey_state_store:
+517a 1a427e00 copy regb ,pdata 
+517b 67e0ca19 store 1 ,mem_fire_key_flag 
+517c 20600000 rtn 
+
+mouse_check_firekey_connect_vin:
+517d 6848c89f fetcht 1 ,mem_firebutton_gpio 
+517e 20404f06 call device_gpio_config_input_pd 
+517f 6848c89f fetcht 1 ,mem_firebutton_gpio 
+5180 20406ee0 call gpio_get_bit 
+5181 7d20a400 nsetflag true ,0 ,regb 
+5182 2020517a branch mouse_firekey_state_store 
+
+fire_key_process:
+5183 c002519c beq 4 ,fire_key_process_end 
+
+fire_key_press:
+5184 2040519f call firekey_clkn_bt_timer_check 
+5185 6fe24a15 fetch 4 ,mem_fire_key_delay 
+5186 d84000a0 arg 0xa0 ,temp 
+5187 98408400 iadd temp ,temp 
+5188 1c427e00 copy clkn_bt ,pdata 
+5189 98467c00 isub temp ,null 
+518a 24610000 nrtn positive 
+518b 67e24a15 store 4 ,mem_fire_key_delay 
+518c 6fe0ca14 fetch 1 ,mem_fire_key_status 
+518d c0005192 beq 0 ,fire_key_process_start 
+518e c000d195 beq 1 ,fire_key_process_release1 
+518f c0015198 beq 2 ,fire_key_process_start2 
+5190 c001d19a beq 3 ,fire_key_process_release2 
+5191 20600000 rtn 
+
+fire_key_process_start:
+5192 704a1401 jam 1 ,mem_fire_key_status 
+
+fire_key_down:
+5193 70465c01 jam 1 ,mem_mouse_key 
+5194 20207dbc branch enable_user 
+
+fire_key_process_release1:
+5195 704a1402 jam 2 ,mem_fire_key_status 
+
+fire_key_release:
+5196 70465c00 jam 0 ,mem_mouse_key 
+5197 20207dbc branch enable_user 
+
+fire_key_process_start2:
+5198 704a1403 jam 3 ,mem_fire_key_status 
+5199 20205193 branch fire_key_down 
+
+fire_key_process_release2:
+519a 704a1400 jam 0 ,mem_fire_key_status 
+519b 20205196 branch fire_key_release 
+
+fire_key_process_end:
+519c 704a1400 jam 0 ,mem_fire_key_status 
+519d 70465c00 jam 0 ,mem_mouse_key 
+519e 20600000 rtn 
+
+firekey_clkn_bt_timer_check:
+519f 684a4a15 fetcht 4 ,mem_fire_key_delay 
+51a0 1c427e00 copy clkn_bt ,pdata 
+51a1 98467c00 isub temp ,null 
+51a2 244151a4 ncall firekey_clkn_bt_timer_timeout ,positive 
+51a3 20600000 rtn 
+
+firekey_clkn_bt_timer_timeout:
+51a4 58000000 setarg 0 
+51a5 67e24a15 store 4 ,mem_fire_key_delay 
+51a6 20600000 rtn 
+
+mouse_key_check_once:
+51a7 204051b9 call mouse_check_key_gpio_once 
+51a8 204051ac call mouse_check_key_gpio 
+51a9 58000000 setarg 0x00 
+51aa 67e1ca07 store 3 ,mem_mouse_lkey_press_status 
+51ab 20600000 rtn 
+
+mouse_check_key_gpio:
+51ac 44c44011 bpatch patch11_0 ,mem_patch11 
+51ad 6fe0c737 fetch 1 ,mem_24g_shutdown_flag 
+51ae 245a51b9 ncall mouse_check_key_gpio_once ,blank 
+51af da200000 arg 0 ,rega 
+51b0 204051bc call mouse_check_lkey_gpio 
+51b1 204051c5 call mouse_check_rkey_gpio 
+51b2 204051ce call mouse_check_mkey_gpio 
+51b3 204051d7 call mouse_check_bkkey_gpio 
+51b4 204051f3 call mouse_check_fwkey_gpio 
+51b5 20405170 call mouse_check_firekey_gpio 
+51b6 20405210 call mouse_check_customerkey_gpio 
+
+mouse_check_key_gpio_next:
+51b7 1a227e00 copy rega ,pdata 
+51b8 20600000 rtn 
+
+mouse_check_key_gpio_once:
+51b9 58030303 setarg 0x030303 
+51ba 67e1ca07 store 3 ,mem_mouse_lkey_press_status 
+51bb 20600000 rtn 
+
+mouse_check_lkey_gpio:
+51bc 6fe0c88d fetch 1 ,mem_lbutton_gpio 
+51bd 20405254 call mouse_gpio_config_output_high 
+51be 704a0f00 jam mouse_l_key ,mem_mouse_key_temp 
+51bf 6848c88d fetcht 1 ,mem_lbutton_gpio 
+51c0 6fe0ca07 fetch 1 ,mem_mouse_lkey_press_status 
+51c1 20405236 call mouse_check_key_connect_gnd 
+51c2 67e0ca07 store 1 ,mem_mouse_lkey_press_status 
+51c3 6848c88d fetcht 1 ,mem_lbutton_gpio 
+51c4 20204f0a branch device_gpio_config_input_pu 
+
+mouse_check_rkey_gpio:
+51c5 6fe0c88f fetch 1 ,mem_rbutton_gpio 
+51c6 20405254 call mouse_gpio_config_output_high 
+51c7 704a0f01 jam mouse_r_key ,mem_mouse_key_temp 
+51c8 6848c88f fetcht 1 ,mem_rbutton_gpio 
+51c9 6fe0ca08 fetch 1 ,mem_mouse_rkey_press_status 
+51ca 20405236 call mouse_check_key_connect_gnd 
+51cb 67e0ca08 store 1 ,mem_mouse_rkey_press_status 
+51cc 6848c88f fetcht 1 ,mem_rbutton_gpio 
+51cd 20204f0a branch device_gpio_config_input_pu 
+
+mouse_check_mkey_gpio:
+51ce 6fe0c88e fetch 1 ,mem_mbutton_gpio 
+51cf 20405254 call mouse_gpio_config_output_high 
+51d0 704a0f02 jam mouse_m_key ,mem_mouse_key_temp 
+51d1 6848c88e fetcht 1 ,mem_mbutton_gpio 
+51d2 6fe0ca09 fetch 1 ,mem_mouse_mkey_press_status 
+51d3 20405236 call mouse_check_key_connect_gnd 
+51d4 67e0ca09 store 1 ,mem_mouse_mkey_press_status 
+51d5 6848c88e fetcht 1 ,mem_mbutton_gpio 
+51d6 20204f0a branch device_gpio_config_input_pu 
+
+mouse_check_bkkey_gpio:
+51d7 6fe0c890 fetch 1 ,mem_bk_button_gpio 
+51d8 c17f8000 rtneq gpio_disable 
+51d9 704a0f03 jam mouse_bk_key ,mem_mouse_key_temp 
+51da 6fe0ca0a fetch 1 ,mem_mouse_bkkey_press_status 
+51db 1fe22600 copy pdata ,regc 
+51dc 6848c890 fetcht 1 ,mem_bk_button_gpio 
+51dd 6fe0c89c fetch 1 ,mem_matrix_public_gpio 
+51de c07fd1ec beq gpio_disable ,mouse_3io6key_bk_check 
+51df 20406ee0 call gpio_get_bit 
+51e0 2020d1e8 branch mouse_check_bk_button_connect_gnd ,true 
+51e1 6848c89c fetcht 1 ,mem_matrix_public_gpio 
+51e2 20406ef1 call gpio_out_active 
+51e3 6848c890 fetcht 1 ,mem_bk_button_gpio 
+51e4 6fe0ca0a fetch 1 ,mem_mouse_bkkey_press_status 
+51e5 20405236 call mouse_check_key_connect_gnd 
+
+mouse_check_bkkey_gpio_end:
+51e6 67e0ca0a store 1 ,mem_mouse_bkkey_press_status 
+51e7 20205203 branch mouse_matrix_public_gpio_reset 
+
+mouse_check_bk_button_connect_gnd:
+51e8 6848c89c fetcht 1 ,mem_matrix_public_gpio 
+51e9 6fe0ca0a fetch 1 ,mem_mouse_bkkey_press_status 
+51ea 20405236 call mouse_check_key_connect_gnd 
+51eb 202051e6 branch mouse_check_bkkey_gpio_end 
+
+mouse_3io6key_bk_check:
+51ec 6fe0c890 fetch 1 ,mem_bk_button_gpio 
+51ed 20405256 call mouse_gpio_config_output_low 
+51ee 6848c890 fetcht 1 ,mem_bk_button_gpio 
+51ef 20405242 call mouse_3io6key_check 
+51f0 67e0ca0a store 1 ,mem_mouse_bkkey_press_status 
+51f1 6848c890 fetcht 1 ,mem_bk_button_gpio 
+51f2 20204f0a branch device_gpio_config_input_pu 
+
+mouse_check_fwkey_gpio:
+51f3 6fe0c891 fetch 1 ,mem_fw_button_gpio 
+51f4 c17f8000 rtneq gpio_disable 
+51f5 704a0f04 jam mouse_fw_key ,mem_mouse_key_temp 
+51f6 6fe0ca0b fetch 1 ,mem_mouse_fwkey_press_status 
+51f7 1fe22600 copy pdata ,regc 
+51f8 6848c891 fetcht 1 ,mem_fw_button_gpio 
+51f9 6fe0c89c fetch 1 ,mem_matrix_public_gpio 
+51fa c07fd209 beq gpio_disable ,mouse_3io6key_fw_check 
+51fb 20406ee0 call gpio_get_bit 
+51fc 2020d205 branch mouse_check_fw_button_connect_gnd ,true 
+51fd 6848c89c fetcht 1 ,mem_matrix_public_gpio 
+51fe 20406ef1 call gpio_out_active 
+51ff 6848c891 fetcht 1 ,mem_fw_button_gpio 
+5200 6fe0ca0b fetch 1 ,mem_mouse_fwkey_press_status 
+5201 20405236 call mouse_check_key_connect_gnd 
+
+mouse_check_fwkey_gpio_end:
+5202 67e0ca0b store 1 ,mem_mouse_fwkey_press_status 
+
+mouse_matrix_public_gpio_reset:
+5203 6848c89c fetcht 1 ,mem_matrix_public_gpio 
+5204 20204f0a branch device_gpio_config_input_pu 
+
+mouse_check_fw_button_connect_gnd:
+5205 6848c89c fetcht 1 ,mem_matrix_public_gpio 
+5206 6fe0ca0b fetch 1 ,mem_mouse_fwkey_press_status 
+5207 20405236 call mouse_check_key_connect_gnd 
+5208 20205202 branch mouse_check_fwkey_gpio_end 
+
+mouse_3io6key_fw_check:
+5209 6fe0c891 fetch 1 ,mem_fw_button_gpio 
+520a 20405256 call mouse_gpio_config_output_low 
+520b 6848c891 fetcht 1 ,mem_fw_button_gpio 
+520c 20405242 call mouse_3io6key_check 
+520d 67e0ca0b store 1 ,mem_mouse_fwkey_press_status 
+520e 6848c891 fetcht 1 ,mem_fw_button_gpio 
+520f 20204f0a branch device_gpio_config_input_pu 
+
+mouse_check_customerkey_gpio:
+5210 70472b00 jam 0 ,mem_customer_key 
+5211 6fe0c89e fetch 1 ,mem_customer_key_gpio 
+5212 c17f8000 rtneq gpio_disable 
+5213 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5214 c40a0000 rtnbit0 mouse_enable_keyboard 
+5215 c297d221 bbit1 mouse_enable_customer_key_connect_vin ,mouse_customer_key_connect_vin 
+
+mouse_customer_key_connect_gnd:
+5216 704a0f07 jam mouse_customer_key ,mem_mouse_key_temp 
+5217 6848c89e fetcht 1 ,mem_customer_key_gpio 
+5218 6fe0ca0e fetch 1 ,mem_mouse_customerkey_press_status 
+5219 20405236 call mouse_check_key_connect_gnd 
+521a 67e0ca0e store 1 ,mem_mouse_customerkey_press_status 
+
+mouse_check_customerkey_state:
+521b 1a227e00 copy rega ,pdata 
+521c c283d22c bbit1 mouse_customer_key ,mouse_customerkey_press 
+521d 2040522f call mouse_customerkey_release 
+
+mouse_check_customerkey_gpio_exit:
+521e 6fe0c72c fetch 1 ,mem_customer_data_trigger 
+521f 67e0c72d store 1 ,mem_customer_data_trigger_last 
+5220 20600000 rtn 
+
+mouse_customer_key_connect_vin:
+5221 704a0f07 jam mouse_customer_key ,mem_mouse_key_temp 
+5222 6fe0ca0e fetch 1 ,mem_mouse_customerkey_press_status 
+5223 1fe22600 copy pdata ,regc 
+5224 6fe0c89e fetch 1 ,mem_customer_key_gpio 
+5225 20405256 call mouse_gpio_config_output_low 
+5226 6848c89e fetcht 1 ,mem_customer_key_gpio 
+5227 20405242 call mouse_3io6key_check 
+5228 67e0ca0e store 1 ,mem_mouse_customerkey_press_status 
+5229 2040521b call mouse_check_customerkey_state 
+522a 6848c89e fetcht 1 ,mem_customer_key_gpio 
+522b 20204f0a branch device_gpio_config_input_pu 
+
+mouse_customerkey_press:
+522c 70472c01 jam 1 ,mem_customer_data_trigger 
+522d 20405232 call mouse_customer_key_need_send 
+522e 2020521e branch mouse_check_customerkey_gpio_exit 
+
+mouse_customerkey_release:
+522f 70472c00 jam 0 ,mem_customer_data_trigger 
+5230 6fe0c72d fetch 1 ,mem_customer_data_trigger_last 
+5231 207a0000 rtn blank 
+
+mouse_customer_key_need_send:
+5232 70472b01 jam 1 ,mem_customer_key 
+5233 20600000 rtn 
+
+mouse_key_release:
+5234 f93fa200 qset0 rega 
+5235 20600000 rtn 
+
+mouse_check_key_connect_gnd:
+5236 1fe3fe00 lshift pdata ,pdata 
+5237 1fe22400 copy pdata ,regb 
+5238 20406ee0 call gpio_get_bit 
+5239 7920a400 setflag true ,0 ,regb 
+
+mouse_check_key_connect_gnd_next:
+523a 1a417e07 and regb ,0x07 ,pdata 
+523b 6848ca0f fetcht 1 ,mem_mouse_key_temp 
+523c 18420e00 copy temp ,queue 
+523d c003d240 beq 0x07 ,mouse_key_press 
+523e c0005234 beq 0x00 ,mouse_key_release 
+523f 20600000 rtn 
+
+mouse_key_press:
+5240 f9202200 qset1 rega 
+5241 20600000 rtn 
+
+mouse_3io6key_check:
+5242 44c4c011 bpatch patch11_1 ,mem_patch11 
+5243 1a627e00 copy regc ,pdata 
+5244 67e0ca10 store 1 ,mem_mouse_key_status 
+5245 1fe3fe00 lshift pdata ,pdata 
+5246 1fe22400 copy pdata ,regb 
+5247 18422600 copy temp ,regc 
+
+mouse_3io6key_check_next:
+5248 20404f06 call device_gpio_config_input_pd 
+5249 1a620400 copy regc ,temp 
+524a 20406ee0 call gpio_get_bit 
+524b 7d20a400 nsetflag true ,0 ,regb 
+524c 2040524e call mouse_check_press 
+524d 2020523a branch mouse_check_key_connect_gnd_next 
+
+mouse_check_press:
+524e 6848ca10 fetcht 1 ,mem_mouse_key_status 
+524f 18410401 and_into 0x01 ,temp 
+5250 1a417e01 and regb ,0x01 ,pdata 
+5251 98467c00 isub temp ,null 
+5252 2422d3d5 nbranch mouse_current_mult_update ,zero 
+5253 20600000 rtn 
+
+mouse_gpio_config_output_high:
+5254 d840003f arg gpcfg_output_high ,temp 
+5255 20206f1d branch gpio_config_function_int 
+
+mouse_gpio_config_output_low:
+5256 d840003e arg gpcfg_output_low ,temp 
+5257 20206f1d branch gpio_config_function_int 
+
+mouse_gpio_config_pu_check:
+5258 67e0c8a7 store 1 ,mem_device_temp_gpio 
+5259 20405254 call mouse_gpio_config_output_high 
+525a 6848c8a7 fetcht 1 ,mem_device_temp_gpio 
+525b 20204f0a branch device_gpio_config_input_pu 
+
+mouse_gpio_config_pd_check:
+525c 67e0c8a7 store 1 ,mem_device_temp_gpio 
+525d 20405256 call mouse_gpio_config_output_low 
+525e 6848c8a7 fetcht 1 ,mem_device_temp_gpio 
+525f 20204f06 branch device_gpio_config_input_pd 
+
+mouse_init_sunt:
+5260 44c54011 bpatch patch11_2 ,mem_patch11 
+5261 20404f1b call mouse_sensor_spi_init 
+5262 20758000 rtn wake 
+
+mouse_init_sensor_wakeup:
+5263 204052fd call mouse_sensor_poweron 
+
+mouse_init_sensor:
+5264 44c5c011 bpatch patch11_3 ,mem_patch11 
+5265 2040526f call mouse_read_sensor_id 
+5266 c0185276 beq p32xx_id1 ,mouse_init_p32xx_id2_judge 
+5267 c018d2dc beq p3065_id1 ,mouse_init_p3065 
+5268 c02c52e5 beq pka8g2_id1 ,mouse_ka8g2_id2_judge 
+5269 2040526c call mouse_twspi_reset 
+526a 20001af4 nop 6900 
+526b 20205264 branch mouse_init_sensor 
+
+mouse_twspi_reset:
+526c 6848c893 fetcht 1 ,mem_mouse_sensor_sclk_gpio 
+526d 20406953 call twspi_reset 
+526e 20204f20 branch mouse_spid_init_pin 
+
+mouse_read_sensor_id:
+526f 58000001 setarg pan_reg_pid_h 
+5270 20406971 call twspi_read 
+5271 67e0c8fc store 1 ,mem_sensor_id2 
+5272 58000000 setarg pan_reg_pid_l 
+5273 20406971 call twspi_read 
+5274 67e0c8fb store 1 ,mem_sensor_id1 
+5275 20600000 rtn 
+
+mouse_init_p32xx_id2_judge:
+5276 6fe0c8fc fetch 1 ,mem_sensor_id2 
+5277 c02d5285 beq p_mx8650 ,mouse_mx8650_init_param 
+5278 c06c528a beq p8009_id2 ,mouse_8009_init_param 
+5279 c068d27f beq p3205_tj3t_id2 ,mouse_s210x_3205_3t_judge 
+527a c06952a2 beq p3204_tj3l_id2 ,mouse_3204_3l_init_param 
+527b c00152a9 beq p3212_id2 ,mouse_3212_init_param 
+527c c02a52b2 beq pka8_id2 ,mouse_ka8_init_param_check 
+527d c02852d9 beq p6520a_id2 ,mouse_p6520_init_param 
+527e 20205264 branch mouse_init_sensor 
+
+mouse_s210x_3205_3t_judge:
+527f 58000049 setarg 0x49 
+5280 20406971 call twspi_read 
+5281 c050d283 beq 0xa1 ,mouse_s201x_init_param 
+5282 20205299 branch mouse_3205_3t_init_param 
+
+mouse_s201x_init_param:
+5283 7049fa0c jam s201x ,mem_config_sensor_type 
+5284 20600000 rtn 
+
+mouse_mx8650_init_param:
+5285 7049fa05 jam mx8650 ,mem_config_sensor_type 
+5286 204052f0 call mouse_sensor_reset 
+5287 20407c97 call delay_10ms 
+5288 da604973 arg mem_sensor_8650_init ,regc 
+5289 20205301 branch mouse_sensor_poweron_end 
+
+mouse_8009_init_param:
+528a 58000016 setarg 0x16 
+528b 20406971 call twspi_read 
+528c 1fe67cbd sub pdata ,0xbd ,null 
+528d 2422d260 nbranch mouse_init_sunt ,zero 
+528e 58000019 setarg 0x19 
+528f 20406971 call twspi_read 
+5290 1fe67c55 sub pdata ,0x55 ,null 
+5291 2422d260 nbranch mouse_init_sunt ,zero 
+5292 5800001b setarg 0x1b 
+5293 20406971 call twspi_read 
+5294 1fe67c1d sub pdata ,0x1d ,null 
+5295 2422d260 nbranch mouse_init_sunt ,zero 
+5296 7049fa06 jam p8009 ,mem_config_sensor_type 
+5297 da6049af arg mem_sensor_8009_init ,regc 
+5298 202052ab branch mouse_sensor_wr_seq 
+
+mouse_3205_3t_init_param:
+5299 7049fa00 jam p3205 ,mem_config_sensor_type 
+529a da60492d arg mem_sensor_3205_init ,regc 
+529b 204052ab call mouse_sensor_wr_seq 
+529c da604937 arg mem_sensor_32xx_init ,regc 
+529d 204052ab call mouse_sensor_wr_seq 
+529e 58000943 setarg 0x0943 
+529f 20406970 call twspi_write 
+52a0 da604951 arg mem_sensor_32xx_init_1 ,regc 
+52a1 202052ab branch mouse_sensor_wr_seq 
+
+mouse_3204_3l_init_param:
+52a2 7049fa02 jam p3204 ,mem_config_sensor_type 
+52a3 da604923 arg mem_sensor_3204_init ,regc 
+52a4 204052ab call mouse_sensor_wr_seq 
+52a5 da604937 arg mem_sensor_32xx_init ,regc 
+52a6 204052ab call mouse_sensor_wr_seq 
+52a7 da604951 arg mem_sensor_32xx_init_1 ,regc 
+52a8 202052ab branch mouse_sensor_wr_seq 
+
+mouse_3212_init_param:
+52a9 7049fa03 jam p3212 ,mem_config_sensor_type 
+52aa da604919 arg mem_sensor_3212_init ,regc 
+
+mouse_sensor_wr_seq:
+52ab efe10013 ifetch 2 ,regc 
+52ac d840ffff arg 0xffff ,temp 
+52ad 98467c00 isub temp ,null 
+52ae 20628000 rtn zero 
+52af 20406970 call twspi_write 
+52b0 1a60a602 increase 2 ,regc 
+52b1 202052ab branch mouse_sensor_wr_seq 
+
+mouse_ka8_init_param_check:
+52b2 204050a7 call mouse_sensor_disable_wp 
+52b3 58009a5b setarg 0x9a5b 
+52b4 20406970 call twspi_write 
+52b5 5800000d setarg 0x0d 
+52b6 20406971 call twspi_read 
+52b7 1fe67c12 sub pdata ,0x12 ,null 
+52b8 2022d2c6 branch mouse_ka8ul_init_param ,zero 
+52b9 1fe67c0a sub pdata ,0x0a ,null 
+52ba 2422d2c9 nbranch mouse_ka8hd_sensor_judge ,zero 
+52bb 5800000e setarg 0x0e 
+52bc 20406971 call twspi_read 
+52bd 1fe67ce5 sub pdata ,0xe5 ,null 
+52be 2422d264 nbranch mouse_init_sensor ,zero 
+52bf 58000010 setarg 0x10 
+52c0 20406971 call twspi_read 
+52c1 1fe67ca5 sub pdata ,0xa5 ,null 
+52c2 2022d2c6 branch mouse_ka8ul_init_param ,zero 
+52c3 204052d6 call mouse_enable_ka8_sensor_wp 
+
+mouse_ka8_init_param:
+52c4 7049fa08 jam ka8 ,mem_config_sensor_type 
+52c5 20600000 rtn 
+
+mouse_ka8ul_init_param:
+52c6 7049fa09 jam ka8_ul ,mem_config_sensor_type 
+52c7 da604991 arg mem_sensor_ka8ul_init ,regc 
+52c8 202052ab branch mouse_sensor_wr_seq 
+
+mouse_ka8hd_sensor_judge:
+52c9 1fe67c10 sub pdata ,0x10 ,null 
+52ca 2422d264 nbranch mouse_init_sensor ,zero 
+52cb 5800000e setarg 0x0e 
+52cc 20406971 call twspi_read 
+52cd 1fe67cc5 sub pdata ,0xc5 ,null 
+52ce 2422d264 nbranch mouse_init_sensor ,zero 
+52cf 58000010 setarg 0x10 
+52d0 20406971 call twspi_read 
+52d1 1fe67c38 sub pdata ,0x38 ,null 
+52d2 2422d264 nbranch mouse_init_sensor ,zero 
+
+mouse_ka8hd_init_param:
+52d3 204052d6 call mouse_enable_ka8_sensor_wp 
+52d4 7049fa0a jam ka8_hd ,mem_config_sensor_type 
+52d5 20600000 rtn 
+
+mouse_enable_ka8_sensor_wp:
+52d6 5800005b setarg 0x005b 
+52d7 20406970 call twspi_write 
+52d8 202050a5 branch mouse_sensor_enable_wp 
+
+mouse_p6520_init_param:
+52d9 7049fa07 jam p6520 ,mem_config_sensor_type 
+52da da6049d1 arg mem_sensor_p6520_init ,regc 
+52db 202052ab branch mouse_sensor_wr_seq 
+
+mouse_init_p3065:
+52dc 204052fd call mouse_sensor_poweron 
+52dd 6fe0c8fc fetch 1 ,mem_sensor_id2 
+52de c03852e3 beq p3065_xy_id2 ,mouse_p3065xy_init_param 
+52df c00052e1 beq p3065_id2 ,mouse_p3065_init_param 
+52e0 20205264 branch mouse_init_sensor 
+
+mouse_p3065_init_param:
+52e1 7049fa01 jam p3065 ,mem_config_sensor_type 
+52e2 20600000 rtn 
+
+mouse_p3065xy_init_param:
+52e3 7049fa04 jam p3065_xy ,mem_config_sensor_type 
+52e4 20600000 rtn 
+
+mouse_ka8g2_id2_judge:
+52e5 204052fd call mouse_sensor_poweron 
+52e6 6fe0c8fc fetch 1 ,mem_sensor_id2 
+52e7 c02bd2ed beq ka5857_id2 ,mouse_ka5857_init_param 
+52e8 c02cd2ea beq pka8g2_id2 ,mouse_ka8g2_init_param 
+52e9 20205276 branch mouse_init_p32xx_id2_judge 
+
+mouse_ka8g2_init_param:
+52ea 7049fa0b jam ka8g2 ,mem_config_sensor_type 
+52eb da6049bf arg mem_sensor_ka8g2_init ,regc 
+52ec 202052ab branch mouse_sensor_wr_seq 
+
+mouse_ka5857_init_param:
+52ed 7049fa0d jam ka5857 ,mem_config_sensor_type 
+52ee da6049dd arg mem_sensor_ka5857_init ,regc 
+52ef 20205301 branch mouse_sensor_poweron_end 
+
+mouse_sensor_reset:
+52f0 d8408006 arg 0x8006 ,temp 
+52f1 6fe0c9fa fetch 1 ,mem_config_sensor_type 
+52f2 c085d2f4 bne ka8g2 ,mouse_sensor_reset_end 
+52f3 d8409706 arg 0x9706 ,temp 
+
+mouse_sensor_reset_end:
+52f4 18427e00 copy temp ,pdata 
+52f5 20406970 call twspi_write 
+52f6 20002ee0 nop 12000 
+52f7 20600000 rtn 
+
+mouse_sensor_poweron_init:
+52f8 da6049e9 arg mem_sensor_poweron_init ,regc 
+52f9 6fe0c9fa fetch 1 ,mem_config_sensor_type 
+52fa c1858000 rtnne ka8g2 
+52fb da6049f1 arg mem_sensor_ka8g2_poweron_init ,regc 
+52fc 20600000 rtn 
+
+mouse_sensor_poweron:
+52fd 44c64011 bpatch patch11_4 ,mem_patch11 
+52fe 20404f1b call mouse_sensor_spi_init 
+52ff 204052f0 call mouse_sensor_reset 
+5300 204052f8 call mouse_sensor_poweron_init 
+
+mouse_sensor_poweron_end:
+5301 204052ab call mouse_sensor_wr_seq 
+5302 2020506b branch mouse_setting_sensor_type 
+
+mouse_sensor_powerdown:
+5303 44c6c011 bpatch patch11_5 ,mem_patch11 
+5304 20405260 call mouse_init_sunt 
+5305 20404f1b call mouse_sensor_spi_init 
+5306 d8400806 arg 0x0806 ,temp 
+5307 6fe0c9fa fetch 1 ,mem_config_sensor_type 
+5308 c085d30a bne ka8g2 ,mouse_sensor_powerdown_end 
+5309 d8401f06 arg 0x1f06 ,temp 
+
+mouse_sensor_powerdown_end:
+530a 18427e00 copy temp ,pdata 
+530b 20206970 branch twspi_write 
+
+mouse_check_sensor_data:
+530c 6fe0c437 fetch 1 ,mem_spi_write_flash_sm 
+530d c1800000 rtnne flash_sm_no_buys 
+530e 6fe0c9fa fetch 1 ,mem_config_sensor_type 
+530f c0005319 beq p3205 ,mouse_p32xx_sensor_motion 
+5310 c000d319 beq p3065 ,mouse_p32xx_sensor_motion 
+5311 c0045319 beq ka8 ,mouse_p32xx_sensor_motion 
+5312 c0015319 beq p3204 ,mouse_p32xx_sensor_motion 
+5313 c001d33d beq p3212 ,mouse_p3212_sensor_motion 
+5314 c0025319 beq p3065_xy ,mouse_p32xx_sensor_motion 
+5315 c0035365 beq p8009 ,mouse_p8009_sensor_motion 
+5316 c005d35b beq ka8g2 ,mouse_pka8g2_sensor_motion 
+5317 c006d35b beq ka5857 ,mouse_pka8g2_sensor_motion 
+5318 20205319 branch mouse_p32xx_sensor_motion 
+
+mouse_p32xx_sensor_motion:
+5319 20405387 call mouse_clear_sensor_data 
+531a 78547c00 disable user 
+531b 6fe0c667 fetch 1 ,mem_sensor_motion_gpio 
+531c c07fd320 beq gpio_disable ,mouse_p32xx_sensor_motion_2 
+531d 6848c667 fetcht 1 ,mem_sensor_motion_gpio 
+531e 20406ee0 call gpio_get_bit 
+531f 24608000 nrtn true 
+
+mouse_p32xx_sensor_motion_2:
+5320 58000000 setarg pan_reg_pid_l 
+5321 20406971 call twspi_read 
+5322 c0985333 bne p32xx_id1 ,mouse_p3065_judge 
+
+mouse_p32xx_sensor_motion_1:
+5323 58000002 setarg pan_reg_motion_staus 
+5324 20406971 call twspi_read 
+5325 c4038000 rtnbit0 7 
+5326 2040539e call mouse_read_sensor_common 
+5327 6fe0c65d fetch 1 ,mem_mouse_x 
+5328 20405397 call mouse_data_extsign 
+5329 67e1465d store 2 ,mem_mouse_x 
+532a 6fe0c65f fetch 1 ,mem_mouse_y 
+532b 20405397 call mouse_data_extsign 
+532c 67e1465f store 2 ,mem_mouse_y 
+532d 6fe0c9fb fetch 1 ,mem_config_sensor_angle 
+532e c0005335 beq mouse_6clk_angle ,mouse_motion32xx_6clk_direction_selection 
+532f c000d337 beq mouse_9clk_angle ,mouse_motion32xx_9clk_direction_selection 
+5330 c0015339 beq mouse_12clk_angle ,mouse_motion32xx_12clk_direction_selection 
+5331 c001d33b beq mouse_3clk_angle ,mouse_motion32xx_3clk_direction_selection 
+5332 20600000 rtn 
+
+mouse_p3065_judge:
+5333 c018d323 beq p3065_id1 ,mouse_p32xx_sensor_motion_1 
+5334 2020526c branch mouse_twspi_reset 
+
+mouse_motion32xx_6clk_direction_selection:
+5335 20405370 call mouse_motion_6clk_direction_dispose 
+5336 202053a4 branch mouse_sensor_sdio_low 
+
+mouse_motion32xx_9clk_direction_selection:
+5337 20405378 call mouse_motion_9clk_direction_dispose 
+5338 202053a4 branch mouse_sensor_sdio_low 
+
+mouse_motion32xx_12clk_direction_selection:
+5339 20405374 call mouse_motion_12clk_direction_dispose 
+533a 202053a4 branch mouse_sensor_sdio_low 
+
+mouse_motion32xx_3clk_direction_selection:
+533b 20405380 call mouse_motion_3clk_direction_dispose 
+533c 202053a4 branch mouse_sensor_sdio_low 
+
+mouse_p3212_sensor_motion:
+533d 20405387 call mouse_clear_sensor_data 
+533e 6fe0c667 fetch 1 ,mem_sensor_motion_gpio 
+533f c07fd343 beq gpio_disable ,mouse_p3212_sensor_motion_1 
+5340 6848c667 fetcht 1 ,mem_sensor_motion_gpio 
+5341 20406ee0 call gpio_get_bit 
+5342 24608000 nrtn true 
+
+mouse_p3212_sensor_motion_1:
+5343 58000000 setarg pan_reg_pid_l 
+5344 20406971 call twspi_read 
+5345 c098526c bne p32xx_id1 ,mouse_twspi_reset 
+
+mouse_p3212_sensor_motion_2:
+5346 58000002 setarg pan_reg_motion_staus 
+5347 20406971 call twspi_read 
+5348 c4038000 rtnbit0 7 
+5349 2040539e call mouse_read_sensor_common 
+534a 20405359 call mouse_read_3212sensor_xy_high 
+534b 67e0c663 store 1 ,mem_mouse_xy_h 
+534c 1ff1fe00 rshift4 pdata ,pdata 
+534d 2040539b call mouse_data_extsign_bit3 
+534e 67e0c65e store 1 ,mem_mouse_x + 1 
+534f 6fe0c663 fetch 1 ,mem_mouse_xy_h 
+5350 1fe17e0f and pdata ,0x0f ,pdata 
+5351 2040539b call mouse_data_extsign_bit3 
+5352 67e0c660 store 1 ,mem_mouse_y + 1 
+5353 6fe0c9fb fetch 1 ,mem_config_sensor_angle 
+5354 c0005370 beq mouse_6clk_angle ,mouse_motion_6clk_direction_dispose 
+5355 c000d378 beq mouse_9clk_angle ,mouse_motion_9clk_direction_dispose 
+5356 c0015374 beq mouse_12clk_angle ,mouse_motion_12clk_direction_dispose 
+5357 c001d380 beq mouse_3clk_angle ,mouse_motion_3clk_direction_dispose 
+5358 20600000 rtn 
+
+mouse_read_3212sensor_xy_high:
+5359 58000012 setarg 0x12 
+535a 20206971 branch twspi_read 
+
+mouse_pka8g2_sensor_motion:
+535b 20405387 call mouse_clear_sensor_data 
+535c 6fe0c667 fetch 1 ,mem_sensor_motion_gpio 
+535d c07fd361 beq gpio_disable ,mouse_pka8g2_sensor_motion_1 
+535e 6848c667 fetcht 1 ,mem_sensor_motion_gpio 
+535f 20406ee0 call gpio_get_bit 
+5360 24608000 nrtn true 
+
+mouse_pka8g2_sensor_motion_1:
+5361 58000000 setarg pan_reg_pid_l 
+5362 20406971 call twspi_read 
+5363 c0ac526c bne pka8g2_id1 ,mouse_twspi_reset 
+5364 20205346 branch mouse_p3212_sensor_motion_2 
+
+mouse_p8009_sensor_motion:
+5365 20405387 call mouse_clear_sensor_data 
+5366 78547c00 disable user 
+5367 58000002 setarg pan_reg_motion_staus 
+5368 20406971 call twspi_read 
+5369 c4038000 rtnbit0 7 
+536a 58000008 setarg pan_reg_opration_state 
+536b 20406971 call twspi_read 
+536c 203a5326 branch mouse_p32xx_sensor_motion_1 + 3 ,blank 
+536d 58000000 setarg 0 
+536e 67e3465d store 6 ,mem_mouse_x 
+536f 20600000 rtn 
+
+mouse_motion_6clk_direction_dispose:
+5370 6fe1465d fetch 2 ,mem_mouse_x 
+5371 1fe67e00 sub pdata ,0 ,pdata 
+5372 67e1465d store 2 ,mem_mouse_x 
+5373 20207dbc branch enable_user 
+
+mouse_motion_12clk_direction_dispose:
+5374 6fe1465f fetch 2 ,mem_mouse_y 
+5375 1fe67e00 sub pdata ,0 ,pdata 
+5376 67e1465f store 2 ,mem_mouse_y 
+5377 20207dbc branch enable_user 
+
+mouse_motion_9clk_direction_dispose:
+5378 6fe1465f fetch 2 ,mem_mouse_y 
+5379 1fe67e00 sub pdata ,0 ,pdata 
+537a 67e1465f store 2 ,mem_mouse_y 
+537b 6fe1465d fetch 2 ,mem_mouse_x 
+537c 1fe67e00 sub pdata ,0 ,pdata 
+537d 67e1465d store 2 ,mem_mouse_x 
+537e 20405382 call mouse_sensor_data_swap_places 
+537f 20207dbc branch enable_user 
+
+mouse_motion_3clk_direction_dispose:
+5380 20405382 call mouse_sensor_data_swap_places 
+5381 20207dbc branch enable_user 
+
+mouse_sensor_data_swap_places:
+5382 6fe1465f fetch 2 ,mem_mouse_y 
+5383 6849465d fetcht 2 ,mem_mouse_x 
+5384 67e1465d store 2 ,mem_mouse_x 
+5385 6049465f storet 2 ,mem_mouse_y 
+5386 20600000 rtn 
+
+mouse_clear_sensor_data:
+5387 6fe0c8fd fetch 1 ,mem_mouse_move_flag 
+5388 205a539e call mouse_read_sensor_common ,blank 
+5389 7048fd01 jam 1 ,mem_mouse_move_flag 
+538a 20600000 rtn 
+
+mouse_clear_sensor_data_by_reset:
+538b 7049f901 jam 1 ,mem_mouse_clear_sensor_data_flag 
+538c 204029a8 call le_set_config_more_data 
+
+mouse_init_sensor_reset:
+538d 20205260 branch mouse_init_sunt 
+
+mouse_data_xy_release:
+538e 6fe0c667 fetch 1 ,mem_sensor_motion_gpio 
+538f c1ff8000 rtnne gpio_disable 
+5390 6fe0c73d fetch 1 ,mem_mouse_long_mult_flag 
+5391 207a0000 rtn blank 
+5392 1fe0ffff increase -1 ,pdata 
+5393 67e0c73d store 1 ,mem_mouse_long_mult_flag 
+5394 58000000 setarg 0 
+5395 67e2465d store 4 ,mem_mouse_x 
+5396 2020538d branch mouse_init_sensor_reset 
+
+mouse_data_extsign:
+5397 c4038000 rtnbit0 7 
+5398 d840ff00 arg 0xff00 ,temp 
+
+mouse_data_ior:
+5399 9841fe00 ior temp ,pdata 
+539a 20600000 rtn 
+
+mouse_data_extsign_bit3:
+539b c4018000 rtnbit0 3 
+539c d84000f0 arg 0xf0 ,temp 
+539d 20205399 branch mouse_data_ior 
+
+mouse_read_sensor_common:
+539e dfe00003 arg pan_reg_delta_x ,pdata 
+539f 20406971 call twspi_read 
+53a0 67e1465d store 2 ,mem_mouse_x 
+53a1 dfe00004 arg pan_reg_delta_y ,pdata 
+53a2 20406971 call twspi_read 
+53a3 2020586a branch mouse_data_y_store 
+
+mouse_sensor_sdio_low:
+53a4 6848c894 fetcht 1 ,mem_mouse_sensor_sdio_gpio 
+53a5 20406ee0 call gpio_get_bit 
+53a6 20608000 rtn true 
+53a7 5800000a setarg 0x0a 
+53a8 20406971 call twspi_read 
+53a9 200003e8 nop 1000 
+53aa 202053a4 branch mouse_sensor_sdio_low 
+
+mouse_set_sdio_high:
+53ab 58008100 setarg 0x8100 
+53ac 20206970 branch twspi_write 
+
+mouse_bluetooth_fast_conn_init:
+53ad 70474fff jam 0xff ,mem_device_fast_conn_flag 
+
+mouse_ble_fast_conn_init:
+53ae 7043fc34 jam 0x34 ,mem_xrecord_mode 
+53af 580f0f0f setarg 0x0f0f0f 
+53b0 67e1c2dd store 3 ,mem_le_lap 
+53b1 67e1c2e0 store 3 ,mem_le_lap + 3 
+53b2 20204e11 branch mouse_start_reconnect 
+
+mouse_buletooth_fast_conn_end:
+53b3 44c74011 bpatch patch11_6 ,mem_patch11 
+53b4 204067d5 call hid_device_select_reconn_device 
+53b5 204053c1 call mouse_bluetooth_fast_conn_disable 
+53b6 6fe0c678 fetch 1 ,mem_device_flag 
+53b7 c000d3ba beq mode_bt_device1 ,mouse_device1_check_auto_discover 
+53b8 c00153bc beq mode_bt_device2 ,mouse_device2_check_auto_discover 
+53b9 20600000 rtn 
+
+mouse_device1_check_auto_discover:
+53ba 6fe3467a fetch 6 ,mem_device1_addr 
+53bb 202053bd branch mouse_device_check_auto_discover 
+
+mouse_device2_check_auto_discover:
+53bc 6fe34687 fetch 6 ,mem_device2_addr 
+
+mouse_device_check_auto_discover:
+53bd 684b46f8 fetcht 6 ,mem_device_compare_addr 
+53be 98467c00 isub temp ,null 
+53bf 2022d544 branch mouse_start_discovery ,zero 
+53c0 20204e09 branch mouse_start_reconnect_device 
+
+mouse_bluetooth_fast_conn_disable:
+53c1 70474f5a jam 0x5a ,mem_device_fast_conn_flag 
+53c2 20600000 rtn 
+
+mouse_stop_bluetooth_mode:
+53c3 6fe14500 fetch 2 ,mem_ui_state_map 
+53c4 c284b794 bbit1 ui_state_ble_connected ,app_ble_disconnect 
+53c5 20205562 branch mouse_stop_discovery 
+
+mouse_disconnect:
+53c6 58000000 setarg 0 
+53c7 67e14741 store 2 ,mem_device_no_data_timer 
+53c8 6fe14500 fetch 2 ,mem_ui_state_map 
+53c9 c284b794 bbit1 ui_state_ble_connected ,app_ble_disconnect 
+53ca 20600000 rtn 
+
+mouse_check_125hz:
+53cb 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+53cc c40d8000 rtnbit0 mouse_enable_bt_125hz 
+
+mouse_bluetooth_125hz:
+53cd 243453d3 nbranch mouse_bluetooth_125hz_clear ,user 
+53ce 6fe0c9fc fetch 1 ,mem_bluetooth_125hz_cnt 
+53cf 1fe0fe01 increase 1 ,pdata 
+53d0 1fe17e0f and_into 0x0f ,pdata 
+53d1 67e0c9fc store 1 ,mem_bluetooth_125hz_cnt 
+53d2 247a0000 nrtn blank 
+
+mouse_bluetooth_125hz_clear:
+53d3 7049fc00 jam 0 ,mem_bluetooth_125hz_cnt 
+53d4 20207dbe branch disable_user 
+
+mouse_current_mult_update:
+53d5 6fe0c667 fetch 1 ,mem_sensor_motion_gpio 
+53d6 c1ff8000 rtnne gpio_disable 
+53d7 7040c000 jam 0 ,mem_lpm_mult 
+53d8 70473e1e jam 30 ,mem_mouse_current_mult_timer 
+53d9 20600000 rtn 
+
+mouse_priority_bb_event:
+53da 44c7c011 bpatch patch11_7 ,mem_patch11 
+53db 1a627e00 copy regc ,pdata 
+53dc c00a53e9 beq bt_evt_le_connected ,mouse_le_bb_event_connected 
+53dd c00ad3f9 beq bt_evt_le_disconnected ,mouse_le_bb_disconnected 
+53de c008553f beq bt_evt_button_long_pressed ,mouse_bb_event_discovery_btn 
+53df c018d406 beq bt_evt_le_pairing_success ,mouse_le_pairing_success 
+53e0 c014d408 beq bt_evt_le_enc_info ,mouse_le_enc_info 
+53e1 c019540a beq bt_evt_le_start_enc ,mouse_le_ll_start_encryt 
+53e2 c01f379e beq bt_evt_le_pairing_complete ,app_ble_store_reconn_info 
+53e3 c0205415 beq bt_evt_le_parse_conn_papa_update_rsp ,mouse_le_conn_param_update_rsp_recieved 
+53e4 c01cd9a8 beq bt_evt_24g_pairing_complete ,mouse_24g_pairing_complete 
+53e5 c01d5971 beq bt_evt_24g_attempt_fail ,mouse_24g_attempt_fail 
+53e6 c01e5997 beq bt_evt_24g_attempt_success ,mouse_24g_attempt_success 
+53e7 c0225428 beq bt_evt_le_parse_conn_param_accepted ,mouse_le_parse_conn_param_accepted 
+53e8 20600000 rtn 
+
+mouse_le_bb_event_connected:
+53e9 20405a62 call mouse_device_poweron_led_config 
+53ea 70473d00 jam 0 ,mem_mouse_long_mult_flag 
+53eb 2040538d call mouse_init_sensor_reset 
+53ec 70475301 jam 1 ,mem_device_le_bb_connected_flag 
+53ed 20405960 call mouse_24g_first_store_reconn_info 
+53ee 6fe0c754 fetch 1 ,mem_device_le_reconnect_flag 
+53ef 243a53f1 nbranch mouse_le_bb_event_connected_next ,blank 
+53f0 70475514 jam 0x14 ,mem_device_send_secutiry_request_timer 
+
+mouse_le_bb_event_connected_next:
+53f1 6fe143fa fetch app_disc_rsn_size ,mem_app_disconn_reason_flag 
+53f2 793ffe00 set0 app_disc_by_button ,pdata 
+53f3 67e143fa store app_disc_rsn_size ,mem_app_disconn_reason_flag 
+53f4 70472000 jam 0 ,mem_device_direct_timer 
+53f5 6fe1477d fetch 2 ,mem_le_battery_level_updata_timer_init 
+53f6 67e1477f store 2 ,mem_le_battery_level_updata_timer 
+53f7 20405535 call mouse_no_data_timer_init 
+53f8 20205562 branch mouse_stop_discovery 
+
+mouse_le_bb_disconnected:
+53f9 58000000 setarg 0 
+53fa 67e1477f store 2 ,mem_le_battery_level_updata_timer 
+53fb 70475300 jam 0 ,mem_device_le_bb_connected_flag 
+53fc d8400006 arg le_interval_7_5ms ,temp 
+53fd 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+53fe c28dd400 bbit1 mouse_enable_bt_125hz ,mouse_le_bb_disconnected_next 
+53ff d8400007 arg le_interval_8_75ms ,temp 
+
+mouse_le_bb_disconnected_next:
+5400 604942d5 storet 2 ,mem_le_interval_min 
+5401 604942d7 storet 2 ,mem_le_interval_min + 2 
+5402 70478100 jam le_lpm_enable ,mem_le_conn_param_reject 
+5403 7049f900 jam 0 ,mem_mouse_clear_sensor_data_flag 
+5404 204029aa call le_clr_config_more_data 
+5405 20205484 branch mouse_bb_disconnected 
+
+mouse_le_pairing_success:
+5406 d8e00002 arg ll_pairing_success_flag ,queue 
+5407 20205411 branch mouse_le_enable_connect_flag 
+
+mouse_le_enc_info:
+
+mouse_updata_le_param:
+5408 70064d12 jam bt_cmd_le_update_conn ,mem_fifo_temp 
+5409 20207824 branch ui_ipc_send_cmd 
+
+mouse_le_ll_start_encryt:
+540a 6fe0c754 fetch 1 ,mem_device_le_reconnect_flag 
+540b c000d40d beq 1 ,mouse_le_ll_reconn_start_encryt 
+540c 2020540f branch mouse_le_ll_enable_start_enc_flag 
+
+mouse_le_ll_reconn_start_encryt:
+540d 20405408 call mouse_updata_le_param 
+540e 70488314 jam 20 ,mem_le_start_encrypt_timer 
+
+mouse_le_ll_enable_start_enc_flag:
+540f d8e00001 arg ll_start_enc_flag ,queue 
+5410 20205411 branch mouse_le_enable_connect_flag 
+
+mouse_le_enable_connect_flag:
+5411 6fe0c882 fetch 1 ,mem_le_connect_status_flag 
+5412 f9207e00 qset1 pdata 
+5413 67e0c882 store 1 ,mem_le_connect_status_flag 
+5414 20600000 rtn 
+
+mouse_le_conn_param_update_rsp_recieved:
+5415 6fe14340 fetch 2 ,mem_le_l2cap_signaling_conn_param_update_rsp_result 
+5416 c1000000 rtneq ble_signaling_connect_parameter_update_accepted 
+5417 6fe0816a fetch 1 ,mem_le_tsniff 
+5418 1feb7e00 rshift2 pdata ,pdata 
+5419 1fe67c0c sub pdata ,le_interval_15ms ,null 
+541a 20610000 rtn positive 
+541b 58000009 setarg le_interval_11_25ms 
+541c 20404dab call mouse_le_interval_store 
+541d 20405408 call mouse_updata_le_param 
+
+mouse_le_conn_param_lpm_disable:
+541e 70478101 jam le_lpm_disable ,mem_le_conn_param_reject 
+541f 20600000 rtn 
+
+mouse_le_bb_event_connect_complete:
+5420 6fe0c754 fetch 1 ,mem_device_le_reconnect_flag 
+5421 247a0000 nrtn blank 
+5422 6fe0c39c fetch 1 ,mem_le_att_handle 
+5423 1fe67e22 sub pdata ,34 ,pdata 
+5424 24628000 nrtn zero 
+5425 70488300 jam 0 ,mem_le_start_encrypt_timer 
+
+mouse_le_write_enable:
+5426 d8e00000 arg write_req_enable_flag ,queue 
+5427 20205411 branch mouse_le_enable_connect_flag 
+
+mouse_le_parse_conn_param_accepted:
+5428 6fe081a2 fetch 1 ,mem_le_new_conninterval 
+5429 1fe67c0c sub pdata ,le_interval_15ms ,null 
+542a 2421541e nbranch mouse_le_conn_param_lpm_disable ,positive 
+542b 20404dab call mouse_le_interval_store 
+542c 6fe081a4 fetch 1 ,mem_le_new_connslavelatency 
+542d 203a5434 branch mouse_le_lpm_mult_reinit ,blank 
+542e 6848c88b fetcht 1 ,mem_lpm_mult_init 
+542f 98467c00 isub temp ,null 
+5430 20215434 branch mouse_le_lpm_mult_reinit ,positive 
+5431 6fe081a4 fetch 1 ,mem_le_new_connslavelatency 
+5432 67e0c0c0 store 1 ,mem_lpm_mult 
+5433 20205436 branch mouse_le_conn_param_lpm_enable 
+
+mouse_le_lpm_mult_reinit:
+5434 6fe0c88b fetch 1 ,mem_lpm_mult_init 
+5435 67e0c0c0 store 1 ,mem_lpm_mult 
+
+mouse_le_conn_param_lpm_enable:
+5436 70478100 jam le_lpm_enable ,mem_le_conn_param_reject 
+5437 20600000 rtn 
+
+mouse_le:
+5438 44c84012 bpatch patch12_0 ,mem_patch12 
+5439 20402a06 call le_fifo_check_nearly_full 
+543a 247a0000 nrtn blank 
+543b 6fe0c74f fetch 1 ,mem_device_fast_conn_flag 
+543c c07fd440 beq 0xff ,mouse_le_next 
+543d 6fe0c882 fetch 1 ,mem_le_connect_status_flag 
+543e 1fe17e03 and pdata ,0x03 ,pdata 
+543f c1818000 rtnne 0x03 
+
+mouse_le_next:
+5440 6fe0c9f9 fetch 1 ,mem_mouse_clear_sensor_data_flag 
+5441 205a538b call mouse_clear_sensor_data_by_reset ,blank 
+5442 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5443 c280e824 bbit1 mouse_24g_pairing_flag ,hid_device_le_send_empty_packet 
+5444 c2806824 bbit1 mouse_select_device_flag ,hid_device_le_send_empty_packet 
+5445 c282e824 bbit1 mouse_bt_discovery_button_down_flag ,hid_device_le_send_empty_packet 
+5446 c2836824 bbit1 mouse_bt_discovery_button_long_down_flag ,hid_device_le_send_empty_packet 
+
+mouse_le_package:
+5447 20404f26 call mouse_motion 
+5448 204053cb call mouse_check_125hz 
+5449 24740000 nrtn user 
+544a 204053d5 call mouse_current_mult_update 
+544b 2040538e call mouse_data_xy_release 
+544c 20404fd1 call mouse_wheel_trigger 
+544d 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+544e c30a683e bbit0 mouse_enable_keyboard ,hid_device_le_send_mouse_data 
+544f 2020683c branch hid_device_send_package_data_check 
+
+mouse_fill_battery_level_le:
+5450 da200001 arg 1 ,rega 
+5451 6849477a fetcht 2 ,mem_le_battery_level_handle 
+5452 20402dcc call le_att_malloc_tx_notify 
+5453 6fe0c77c fetch 1 ,mem_le_battery_level_percentage 
+5454 20207dce branch istore_1_contw_rtn 
+
+mouse_check_51cmd_adv:
+5455 70475400 jam 0 ,mem_device_le_reconnect_flag 
+5456 6fe1c759 fetch 3 ,mem_le_adv_ind 
+5457 67e1c351 store 3 ,mem_le_adv_data + 4 
+5458 2040545e call mouse_le_check_adv_flag 
+5459 58000005 setarg adv_flag_bredr_not_supported | adv_flag_limited_discoverable 
+545a e7e08006 istore 1 ,contr 
+545b d8c0475f arg mem_le_adv_swift_pair ,contr 
+545c 20405465 call mouse_le_adv_data_update 
+545d 20207860 branch check_51cmd_adv 
+
+mouse_le_check_adv_flag:
+545e da20434d arg mem_le_adv_data ,rega 
+
+mouse_le_check_adv_flag_loop:
+545f efe08011 ifetch 1 ,rega 
+5460 207a0000 rtn blank 
+5461 98c0a200 iadd contr ,rega 
+5462 efe08006 ifetch 1 ,contr 
+5463 c1008000 rtneq 0x01 
+5464 2020545f branch mouse_le_check_adv_flag_loop 
+
+mouse_le_adv_data_update:
+5465 d8a04358 arg mem_le_adv_data + 11 ,contw 
+5466 df200013 arg 19 ,loopcnt 
+5467 20407cdc call memcpy 
+5468 20202948 branch le_modified_name_adv 
+
+mouse_le_parse_att:
+5469 44c8c012 bpatch patch12_1 ,mem_patch12 
+546a 1a220c00 copy rega ,contr 
+546b efe18006 ifetch 3 ,contr 
+546c 67e1c39b store 3 ,mem_le_att_opcode 
+546d c0055470 beq attop_read_request ,mouse_le_parse_att_read_request 
+546e c009547f beq attop_write_request ,mouse_le_parse_att_write_request 
+546f 20202b76 branch le_parse_att2 
+
+mouse_le_parse_att_read_request:
+5470 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5471 c31dacf7 bbit0 mouse_enable_le_battery_service_cancel ,le_parse_att_read_request 
+5472 20402da5 call le_check_encrypt_state 
+5473 6849439c fetcht 2 ,mem_le_att_handle 
+5474 6fe0c323 fetch 1 ,mem_le_configuration 
+5475 c281d47a bbit1 bit_ble_read_auth ,mouse_le_send_att_read_response_check_auth 
+
+mouse_le_send_att_read_response:
+5476 6fe1439c fetch 2 ,mem_le_att_handle 
+5477 c0182de1 beq 0x30 ,le_send_att_error_response_notfound 
+5478 6849439c fetcht 2 ,mem_le_att_handle 
+5479 20202cfb branch le_send_att_read_response 
+
+mouse_le_send_att_read_response_check_auth:
+547a 6fe14334 fetch 2 ,mem_le_pairing_handle 
+547b 98467c00 isub temp ,null 
+547c 2422d476 nbranch mouse_le_send_att_read_response ,zero 
+547d 24345476 nbranch mouse_le_send_att_read_response ,user 
+547e 20202d24 branch le_send_att_read_response_error_insufficient_auth 
+
+mouse_le_parse_att_write_request:
+547f 18c22200 copy contr ,rega 
+5480 6fe14337 fetch 2 ,mem_le_l2cap_size 
+5481 1fe0a5fd add pdata ,-3 ,regb 
+5482 20402908 call le_writeatt_cb 
+5483 20206878 branch hid_device_le_parse_att_write_request 
+
+mouse_bb_disconnected:
+5484 44c94012 bpatch patch12_2 ,mem_patch12 
+5485 2040548a call mouse_bb_discon_clear_stack 
+5486 6fe143f8 fetch app_disc_rsn_size ,mem_app_disconn_reason 
+5487 c283d490 bbit1 app_disc_ble ,mouse4_0_event_bb_disconn 
+5488 c2803771 bbit1 app_disc_by_button ,app_disconn_reason_clear 
+5489 20205544 branch mouse_start_discovery 
+
+mouse_bb_discon_clear_stack:
+548a 58000000 setarg 0 
+548b 67e4466a store 8 ,mem_wheel_tb_old_pinlevel 
+548c e7e10005 istore 2 ,contw 
+548d 7048fd00 jam 0 ,mem_mouse_move_flag 
+548e 70429c00 jam 0 ,mem_ltk_exists 
+548f 20600000 rtn 
+
+mouse4_0_event_bb_disconn:
+5490 70488200 jam 0 ,mem_le_connect_status_flag 
+5491 6fe143f8 fetch app_disc_rsn_size ,mem_app_disconn_reason 
+5492 c2803771 bbit1 app_disc_by_button ,app_disconn_reason_clear 
+5493 20204e35 branch mouse_app_enter_hibernate 
+
+mouse_bb_event_timer:
+5494 44c9c012 bpatch patch12_3 ,mem_patch12 
+5495 20405a29 call mouse_low_voltage_led_timer 
+5496 20404ea5 call mouse_adc_read 
+5497 204059f2 call mouse_logo_led_on_timer 
+5498 20405a81 call mouse_led_multi_timer 
+5499 20405a00 call mouse_dpi_led_blink_delay_timer 
+549a 20405050 call mouse_dpi_key_check_long_press 
+549b 204054ab call mouse_bt_discovery_check 
+549c 204054d7 call mouse_commbination_key_process 
+549d 204054ba call mouse_commbination_dpi_check_timer 
+549e 204054cb call mouse_commbination_key_select_device_timer 
+549f 20405527 call mouse_current_mult_update_timer 
+54a0 20404fd6 call mouse_wheel_trigger_timer 
+54a1 20405538 call mouse_store_information_delay_timer 
+54a2 2040552f call mouse_check_no_data_timeout_timer 
+54a3 204058f6 call mouse_24g_long_sleep_param_update_timer 
+
+mouse_bb_event_timer_next:
+54a4 2040326c call g24_pair_timeout_timer 
+54a5 20403507 call g24_reconn_timeout_timer 
+54a6 204054fa call mouse_check_discovery_timeout_timer 
+54a7 204054ff call mouse_check_direct_timeout_timer 
+54a8 2040550d call mouse_le_enable_att_list_timer 
+54a9 2040551a call mouse_le_battery_updata_timer 
+54aa 20205510 branch mouse_le_send_smp_security_request_timer 
+
+mouse_bt_discovery_check:
+54ab 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+54ac c41b8000 rtnbit0 mouse_enable_pb_button_long_press_disconvery 
+
+mouse_bt_discovery_by_pb_button:
+54ad 6fe0c734 fetch 1 ,mem_select_device_button_statue 
+54ae c1808000 rtnne pb_button_state_down 
+54af da604731 arg mem_bt_discovery_count ,regc 
+54b0 da4054b2 arg mouse_long_button_bt_discovery ,regb 
+54b1 20203755 branch timer_single_step 
+
+mouse_long_button_bt_discovery:
+54b2 6fe0c678 fetch 1 ,mem_device_flag 
+54b3 c1000000 rtneq mode_24g_device 
+54b4 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+54b5 c3830000 rtnbit1 mouse_bt_discovery_button_long_down_flag 
+54b6 d8e00006 arg mouse_bt_discovery_button_long_down_flag ,queue 
+54b7 2040582e call mouse_enable_function_flag 
+54b8 20403745 call app_evt_button_long_pressed 
+54b9 2020553f branch mouse_bb_event_discovery_btn 
+
+mouse_commbination_dpi_check_timer:
+54ba 6fe0cabf fetch 1 ,mem_mouse_commbination_key_dpi 
+54bb c17f8000 rtneq gpio_disable 
+54bc 6fe0cac4 fetch 1 ,mem_mouse_pair_flag 
+54bd 207a0000 rtn blank 
+54be 204051ac call mouse_check_key_gpio 
+54bf 1a217e07 and rega ,0x07 ,pdata 
+54c0 6848cabf fetcht 1 ,mem_mouse_commbination_key_dpi 
+54c1 98467c00 isub temp ,null 
+54c2 2022d4c6 branch mouse_commbination_dpi_check ,zero 
+54c3 6fe0cac1 fetch 1 ,mem_mouse_commbination_dpi_timer 
+
+mouse_commbination_key_count_init:
+54c4 67e0cac3 store 1 ,mem_mouse_commbination_key_count 
+54c5 20600000 rtn 
+
+mouse_commbination_dpi_check:
+54c6 da604ac3 arg mem_mouse_commbination_key_count ,regc 
+54c7 da40501e arg mouse_dpi_process_skip_ghost ,regb 
+54c8 20203755 branch timer_single_step 
+
+mouse_retransmit_commbination_key_check:
+54c9 6fe0c737 fetch 1 ,mem_24g_shutdown_flag 
+54ca 207a0000 rtn blank 
+
+mouse_commbination_key_select_device_timer:
+54cb 6fe0cac0 fetch 1 ,mem_mouse_commbination_key_select_device 
+54cc c17f8000 rtneq gpio_disable 
+54cd 204051ac call mouse_check_key_gpio 
+54ce 1a217e07 and rega ,0x07 ,pdata 
+54cf 6848cac0 fetcht 1 ,mem_mouse_commbination_key_select_device 
+54d0 98467c00 isub temp ,null 
+54d1 2022d4d4 branch mouse_check_mouse_key_select_device_set ,zero 
+54d2 6fe0cac2 fetch 1 ,mem_mouse_commbination_select_device_timer 
+54d3 202054c4 branch mouse_commbination_key_count_init 
+
+mouse_check_mouse_key_select_device_set:
+54d4 da604ac3 arg mem_mouse_commbination_key_count ,regc 
+54d5 da4057f6 arg mouse_ready_reconnection_by_button ,regb 
+54d6 20203755 branch timer_single_step 
+
+mouse_commbination_key_process:
+54d7 6fe0c678 fetch 1 ,mem_device_flag 
+54d8 c00054dd beq mode_24g_device ,mouse_24g_commbination_key_process 
+54d9 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+54da c41a8000 rtnbit0 mouse_enable_commbination_key_by_bt_discovery 
+54db 6848cabd fetcht 1 ,mem_mouse_commbination_key_bt 
+54dc 202054e0 branch mouse_commbination_key_start 
+
+mouse_24g_commbination_key_process:
+54dd 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+54de c4190000 rtnbit0 mouse_enable_commbination_key_by_24g_pairing 
+54df 6848cabe fetcht 1 ,mem_mouse_commbination_key_24g 
+
+mouse_commbination_key_start:
+54e0 6048c733 storet 1 ,mem_mouse_commbination_key 
+54e1 204051ac call mouse_check_key_gpio 
+54e2 1a217e07 and rega ,0x07 ,pdata 
+54e3 6848c733 fetcht 1 ,mem_mouse_commbination_key 
+54e4 98467c00 isub temp ,null 
+54e5 2022d4ec branch mouse_commbination_key_down ,zero 
+
+mouse_commbination_key_up:
+54e6 6fe0c502 fetch 1 ,mem_ui_button_timeout 
+54e7 67e0c736 store 1 ,mem_combination_ui_button_count 
+54e8 6fe0c735 fetch 1 ,mem_commbination_key_statue 
+54e9 c1000000 rtneq commbination_key_state_up 
+54ea 70473500 jam commbination_key_state_up ,mem_commbination_key_statue 
+54eb 20600000 rtn 
+
+mouse_commbination_key_down:
+54ec 204054f1 call mouse_combination_ui_timer 
+54ed 6fe0c735 fetch 1 ,mem_commbination_key_statue 
+54ee c1008000 rtneq commbination_key_state_down 
+54ef 70473501 jam commbination_key_state_down ,mem_commbination_key_statue 
+54f0 20600000 rtn 
+
+mouse_combination_ui_timer:
+54f1 da405965 arg mouse_24g_start_pair_mode ,regb 
+54f2 da604736 arg mem_combination_ui_button_count ,regc 
+54f3 6fe0c678 fetch 1 ,mem_device_flag 
+54f4 c0003755 beq mode_24g_device ,timer_single_step 
+54f5 da4054b2 arg mouse_long_button_bt_discovery ,regb 
+54f6 20403755 call timer_single_step 
+54f7 6fe0c736 fetch 1 ,mem_combination_ui_button_count 
+54f8 c000d820 beq 1 ,mouse_bt_discovery_button_down_enable 
+54f9 20600000 rtn 
+
+mouse_check_discovery_timeout_timer:
+54fa da604750 arg mem_device_discovery_timer ,regc 
+54fb da4054fd arg mouse_check_discovery_timeout ,regb 
+54fc 2020375c branch timer_single_step_2b 
+
+mouse_check_discovery_timeout:
+54fd 20405562 call mouse_stop_discovery 
+54fe 20204e35 branch mouse_app_enter_hibernate 
+
+mouse_check_direct_timeout_timer:
+54ff da604720 arg mem_device_direct_timer ,regc 
+5500 da405505 arg mouse_check_direct_timeout ,regb 
+5501 20403755 call timer_single_step 
+5502 6fe0c720 fetch 1 ,mem_device_direct_timer 
+5503 c000b788 beq 1 ,app_ble_stop_direct_adv 
+5504 20600000 rtn 
+
+mouse_check_direct_timeout:
+5505 6fe0c74f fetch 1 ,mem_device_fast_conn_flag 
+5506 c07fd3b3 beq 0xff ,mouse_buletooth_fast_conn_end 
+5507 6fe0c73f fetch 1 ,mem_reconn_times 
+5508 243a5836 nbranch mouse_polling_device ,blank 
+5509 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+550a c299d544 bbit1 mouse_enable_bt_reconnect_timeout_enter_discovery ,mouse_start_discovery 
+550b c29f595d bbit1 mouse_enable_24g_first_auto_pairing ,mouse_24g_first_bb_event_reconn_timeout 
+550c 20204e35 branch mouse_app_enter_hibernate 
+
+mouse_le_enable_att_list_timer:
+550d da604883 arg mem_le_start_encrypt_timer ,regc 
+550e da405426 arg mouse_le_write_enable ,regb 
+550f 20203755 branch timer_single_step 
+
+mouse_le_send_smp_security_request_timer:
+5510 6fe0c753 fetch 1 ,mem_device_le_bb_connected_flag 
+5511 207a0000 rtn blank 
+5512 da604755 arg mem_device_send_secutiry_request_timer ,regc 
+5513 da405515 arg mouse_le_pairing_sm_start_check ,regb 
+5514 20203755 branch timer_single_step 
+
+mouse_le_pairing_sm_start_check:
+5515 6fe0c754 fetch 1 ,mem_device_le_reconnect_flag 
+5516 247a0000 nrtn blank 
+5517 6fe0c2fe fetch 1 ,mem_le_pairing_state 
+5518 c1800000 rtnne flag_le_pairing_null 
+5519 20202fab branch le_pairing_sm_start 
+
+mouse_le_battery_updata_timer:
+551a 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+551b c39d8000 rtnbit1 mouse_enable_le_battery_service_cancel 
+551c da60477f arg mem_le_battery_level_updata_timer ,regc 
+551d da40551f arg mouse_le_battery_level_updata ,regb 
+551e 20203755 branch timer_single_step 
+
+mouse_le_battery_level_updata:
+551f 6fe1477d fetch 2 ,mem_le_battery_level_updata_timer_init 
+5520 67e1477f store 2 ,mem_le_battery_level_updata_timer 
+5521 20205450 branch mouse_fill_battery_level_le 
+
+mouse_le_enable_att_list:
+5522 6fe0c882 fetch 1 ,mem_le_connect_status_flag 
+5523 c3810000 rtnbit1 ll_pairing_success_flag 
+5524 20405408 call mouse_updata_le_param 
+5525 d8e00000 arg write_req_enable_flag ,queue 
+5526 20205411 branch mouse_le_enable_connect_flag 
+
+mouse_current_mult_update_timer:
+5527 da60473e arg mem_mouse_current_mult_timer ,regc 
+5528 da40552a arg mouse_current_mult_reinit ,regb 
+5529 20203755 branch timer_single_step 
+
+mouse_current_mult_reinit:
+552a 6fe0c88b fetch 1 ,mem_lpm_mult_init 
+552b 67e0c0c0 store 1 ,mem_lpm_mult 
+
+mouse_long_mult_init:
+552c 6fe0c73c fetch 1 ,mem_mouse_long_mult_count 
+552d 67e0c73d store 1 ,mem_mouse_long_mult_flag 
+552e 20600000 rtn 
+
+mouse_check_no_data_timeout_timer:
+552f da604741 arg mem_device_no_data_timer ,regc 
+5530 da405532 arg mouse_check_no_data_timeout ,regb 
+5531 2020375c branch timer_single_step_2b 
+
+mouse_check_no_data_timeout:
+5532 6fe0c678 fetch 1 ,mem_device_flag 
+5533 c000590a beq mode_24g_device ,mouse_24g_hibernate_set 
+5534 202053c6 branch mouse_disconnect 
+
+mouse_no_data_timer_init:
+5535 6fe1471e fetch 2 ,mem_device_no_data_timeout 
+5536 67e14741 store 2 ,mem_device_no_data_timer 
+5537 20600000 rtn 
+
+mouse_store_information_delay_timer:
+5538 da604705 arg mem_store_information_delay_timer ,regc 
+5539 da40553b arg mouse_store_device_info_check ,regb 
+553a 20203755 branch timer_single_step 
+
+mouse_store_device_info_check:
+553b 20405574 call mouse_store_device_info 
+553c 6fe0c752 fetch 1 ,mem_device_need_soft_reset 
+553d 243a5801 nbranch mouse_soft_reset ,blank 
+553e 20600000 rtn 
+
+mouse_bb_event_discovery_btn:
+553f 280ffe26 isolate1 mark_24g ,mark 
+5540 2040d936 call mouse_24g_stop ,true 
+5541 204053c6 call mouse_disconnect 
+5542 70488200 jam 0 ,mem_le_connect_status_flag 
+5543 20205544 branch mouse_start_discovery 
+
+mouse_start_discovery:
+5544 44ca4012 bpatch patch12_4 ,mem_patch12 
+5545 20405a7a call mouse_device_discovery_led_config 
+5546 6fe14500 fetch 2 ,mem_ui_state_map 
+5547 2feffe0b isolate1 ui_state_ble_adv ,pdata 
+5548 2040d565 call mouse_stop_le_adv ,true 
+5549 204053c1 call mouse_bluetooth_fast_conn_disable 
+554a 6fe14500 fetch 2 ,mem_ui_state_map 
+554b c285d554 bbit1 ui_state_ble_adv ,mouse_start_discovery_norandom 
+554c 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+554d c3045554 bbit0 mouse_enable_ble_random_addre ,mouse_start_discovery_norandom 
+554e 6848c6a7 fetcht 1 ,mem_random_addr_increase_count 
+554f 18408401 increase 1 ,temp 
+5550 6048c6a7 storet 1 ,mem_random_addr_increase_count 
+5551 6048c2df storet 1 ,mem_le_lap + 2 
+5552 180a7e00 random pdata 
+5553 67e142dd store 2 ,mem_le_lap 
+
+mouse_start_discovery_norandom:
+5554 6fe1c756 fetch 3 ,mem_device_le_lap_temp 
+5555 67e1c2e0 store 3 ,mem_le_lap + 3 
+5556 204037a2 call app_lpm_mult_disable 
+5557 6fe1464f fetch 2 ,mem_device_discovery_timeout 
+5558 67e14750 store 2 ,mem_device_discovery_timer 
+5559 58000000 setarg 0 
+555a 67e14741 store 2 ,mem_device_no_data_timer 
+555b 67e1477f store 2 ,mem_le_battery_level_updata_timer 
+555c 67e0c720 store 1 ,mem_device_direct_timer 
+555d 67e0c9f9 store 1 ,mem_mouse_clear_sensor_data_flag 
+555e d8e00002 arg mouse_store_eeprom_flag ,queue 
+555f 2040582e call mouse_enable_function_flag 
+5560 20405822 call mouse_bt_discovery_button_down_disable 
+5561 20205455 branch mouse_check_51cmd_adv 
+
+mouse_stop_discovery:
+5562 44cac012 bpatch patch12_5 ,mem_patch12 
+5563 d8e00006 arg mouse_bt_discovery_button_long_down_flag ,queue 
+5564 20405832 call mouse_disable_function_flag 
+
+mouse_stop_le_adv:
+5565 58000000 setarg 0 
+5566 67e0c720 store 1 ,mem_device_direct_timer 
+5567 67e14750 store 2 ,mem_device_discovery_timer 
+5568 20207866 branch check_51cmd_stop_adv 
+
+mouse_store_remote_bdaddr:
+5569 44cb4012 bpatch patch12_6 ,mem_patch12 
+556a 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+556b c4010000 rtnbit0 mouse_store_eeprom_flag 
+556c d8e00002 arg mouse_store_eeprom_flag ,queue 
+556d 20405832 call mouse_disable_function_flag 
+556e 204067e4 call hid_device_check_device_addr 
+
+mouse_unplug_clean_bdaddr:
+556f 204067c1 call hid_device_before_store_reconn_info 
+5570 20205571 branch mouse_store_device_info_delay 
+
+mouse_store_device_info_delay:
+5571 6fe0c706 fetch 1 ,mem_store_information_delay_timer_init 
+5572 67e0c705 store 1 ,mem_store_information_delay_timer 
+5573 20600000 rtn 
+
+mouse_store_device_info:
+5574 44cbc012 bpatch patch12_7 ,mem_patch12 
+5575 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5576 c288d580 bbit1 mouse_enable_eeprom ,mouse_store_eeprom_device_info 
+5577 c2885588 bbit1 mouse_enable_flash ,mouse_store_flash_device_info 
+5578 c289558a bbit1 mouse_enable_otp ,mouse_store_otp_device_info 
+5579 20600000 rtn 
+
+mouse_store_dpi_info_check:
+557a 44cc4013 bpatch patch13_0 ,mem_patch13 
+557b 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+557c c288d584 bbit1 mouse_enable_eeprom ,mouse_store_eerpom_dpi 
+557d c2895612 bbit1 mouse_enable_otp ,mouse_store_otp_dpi 
+557e c2885588 bbit1 mouse_enable_flash ,mouse_store_flash_device_info 
+557f 20600000 rtn 
+
+mouse_store_eeprom_device_info:
+5580 d8400080 arg 128 ,temp 
+5581 da204678 arg mem_device_flag ,rega 
+5582 da400000 arg mouse_info_eeprom_offect ,regb 
+5583 20206cc9 branch iicd_write_protect_eep_data 
+
+mouse_store_eerpom_dpi:
+5584 d8400001 arg 1 ,temp 
+5585 da2046a2 arg mem_mouse_dpi ,rega 
+5586 da40005a arg mouse_dpi_eeprom_offect ,regb 
+5587 20206cc9 branch iicd_write_protect_eep_data 
+
+mouse_store_flash_device_info:
+5588 204067bb call hid_device_store_flash_device_info 
+5589 20204f1b branch mouse_sensor_spi_init 
+
+mouse_store_otp_device_info:
+558a 2040558e call mouse_write_otp_app_initflag 
+558b 20405594 call mouse_write_otp_device_flag 
+558c 204055bb call mouse_write_otp_device_info 
+558d 202055fc branch mouse_write_otp_le_addr_increase_count_info 
+
+mouse_write_otp_app_initflag:
+558e 20405699 call mouse_otp_load_app_initflag 
+558f 6fe146a0 fetch 2 ,mem_store_flag 
+5590 d840aa55 arg eeprom_init_flag ,temp 
+5591 98467c00 isub temp ,null 
+5592 20628000 rtn zero 
+5593 2020569d branch mouse_otp_store_app_initflag 
+
+mouse_write_otp_device_flag:
+5594 6a414a7f fetchr regb ,2 ,mem_otp_offset_device_flag 
+5595 1a422600 copy regb ,regc 
+
+mouse_write_otp_device_flag_loop:
+5596 204056ad call mouse_read_otp_device_flag_common 
+5597 6fe0c718 fetch 1 ,mem_device_otp_flag_temp 
+5598 203a55a0 branch mouse_device_flag_store ,blank 
+5599 67e0ca32 store 1 ,mem_device_flag_last 
+559a 1a60a601 increase 1 ,regc 
+559b 6fe14a81 fetch 2 ,mem_otp_offset_device_flag_end 
+559c 9a667c00 isub regc ,null 
+559d 24610000 nrtn positive 
+559e 1a622400 copy regc ,regb 
+559f 20205596 branch mouse_write_otp_device_flag_loop 
+
+mouse_device_flag_store:
+55a0 6fe0ca32 fetch 1 ,mem_device_flag_last 
+55a1 1fe17ef0 and pdata ,0xf0 ,pdata 
+55a2 203a55aa branch mouse_device_flag_store_check ,blank 
+55a3 6fe0c678 fetch 1 ,mem_device_flag 
+55a4 204055b8 call mouse_device_flag_otp_store_judge 
+55a5 67e0ca33 store 1 ,mem_device_flag_value 
+
+mouse_devoce_flag_store_end:
+55a6 df200001 arg 1 ,loopcnt 
+55a7 1a622400 copy regc ,regb 
+55a8 da204a33 arg mem_device_flag_value ,rega 
+55a9 20206b33 branch otp_write 
+
+mouse_device_flag_store_check:
+55aa 6848ca32 fetcht 1 ,mem_device_flag_last 
+55ab 6fe0c678 fetch 1 ,mem_device_flag 
+55ac 204055b8 call mouse_device_flag_otp_store_judge 
+55ad 98467c00 isub temp ,null 
+55ae 20628000 rtn zero 
+55af 1ff27e00 lshift4 pdata ,pdata 
+55b0 9840fe00 iadd temp ,pdata 
+55b1 67e0ca33 store 1 ,mem_device_flag_value 
+55b2 1a627e00 copy regc ,pdata 
+55b3 68494a7f fetcht 2 ,mem_otp_offset_device_flag 
+55b4 98467c00 isub temp ,null 
+55b5 2022d5a6 branch mouse_devoce_flag_store_end ,zero 
+55b6 1a60a7ff increase -1 ,regc 
+55b7 202055a6 branch mouse_devoce_flag_store_end 
+
+mouse_device_flag_otp_store_judge:
+55b8 c1800000 rtnne mode_24g_device 
+55b9 1fe0fe04 increase 4 ,pdata 
+55ba 20600000 rtn 
+
+mouse_write_otp_device_info:
+55bb 6fe0c678 fetch 1 ,mem_device_flag 
+55bc c00055c0 beq mode_24g_device ,mouse_write_otp_24g_addr 
+55bd c000d5d4 beq mode_bt_device1 ,mouse_write_otp_le_device1 
+55be c00155e8 beq mode_bt_device2 ,mouse_write_otp_le_device2 
+55bf 20600000 rtn 
+
+mouse_write_otp_24g_addr:
+55c0 6a414a83 fetchr regb ,2 ,mem_otp_offset_24g_addr 
+55c1 1a422600 copy regb ,regc 
+
+mouse_otp_store_24g_addr_loop:
+55c2 20405726 call mouse_read_otp_24g_addr_common 
+55c3 6fe24a6b fetch 4 ,mem_mouse_24g_addr_temp 
+55c4 203a55cc branch mouse_24g_addr_store ,blank 
+55c5 67e24a67 store 4 ,mem_mouse_24g_addr_last 
+55c6 1a60a604 increase 4 ,regc 
+55c7 6fe14a85 fetch 2 ,mem_otp_offset_24g_addr_end 
+55c8 9a667c00 isub regc ,null 
+55c9 24610000 nrtn positive 
+55ca 1a622400 copy regc ,regb 
+55cb 202055c2 branch mouse_otp_store_24g_addr_loop 
+
+mouse_24g_addr_store:
+55cc 6fe24a67 fetch 4 ,mem_mouse_24g_addr_last 
+55cd 684a46a3 fetcht 4 ,mem_device_24g_addr 
+55ce 98467c00 isub temp ,null 
+55cf 20628000 rtn zero 
+55d0 df200004 arg 4 ,loopcnt 
+55d1 da2046a3 arg mem_device_24g_addr ,rega 
+55d2 1a622400 copy regc ,regb 
+55d3 20206b33 branch otp_write 
+
+mouse_write_otp_le_device1:
+55d4 6a414a87 fetchr regb ,2 ,mem_otp_offset_le_addr1 
+55d5 1a422600 copy regb ,regc 
+
+mouse_otp_store_le_addr1_loop:
+55d6 204056d3 call mouse_read_otp_le_addr1_common 
+55d7 6fe34a3a fetch 6 ,mem_mouse_le_addr1_temp 
+55d8 203a55e0 branch mouse_le_addr1_store ,blank 
+55d9 67e34a34 store 6 ,mem_mouse_le_addr1_last 
+55da 1a60a606 increase 6 ,regc 
+55db 6fe14a89 fetch 2 ,mem_otp_offset_le_addr1_end 
+55dc 9a667c00 isub regc ,null 
+55dd 24610000 nrtn positive 
+55de 1a622400 copy regc ,regb 
+55df 202055d6 branch mouse_otp_store_le_addr1_loop 
+
+mouse_le_addr1_store:
+55e0 6fe34a34 fetch 6 ,mem_mouse_le_addr1_last 
+55e1 684b467a fetcht 6 ,mem_device1_addr 
+55e2 98467c00 isub temp ,null 
+55e3 20628000 rtn zero 
+55e4 df200006 arg 6 ,loopcnt 
+55e5 da20467a arg mem_device1_addr ,rega 
+55e6 1a622400 copy regc ,regb 
+55e7 20206b33 branch otp_write 
+
+mouse_write_otp_le_device2:
+55e8 6a414a73 fetchr regb ,2 ,mem_otp_offset_le_addr2 
+55e9 1a422600 copy regb ,regc 
+
+mouse_otp_store_le_addr2_loop:
+55ea 204056fc call mouse_read_otp_le_addr2_common 
+55eb 6fe34a52 fetch 6 ,mem_mouse_le_addr2_temp 
+55ec 203a55f4 branch mouse_le_addr2_store ,blank 
+55ed 67e34a4c store 6 ,mem_mouse_le_addr2_last 
+55ee 1a60a606 increase 6 ,regc 
+55ef 6fe14a75 fetch 2 ,mem_otp_offset_le_addr2_end 
+55f0 9a667c00 isub regc ,null 
+55f1 24610000 nrtn positive 
+55f2 1a622400 copy regc ,regb 
+55f3 202055ea branch mouse_otp_store_le_addr2_loop 
+
+mouse_le_addr2_store:
+55f4 6fe34a4c fetch 6 ,mem_mouse_le_addr2_last 
+55f5 684b4687 fetcht 6 ,mem_device2_addr 
+55f6 98467c00 isub temp ,null 
+55f7 20628000 rtn zero 
+55f8 df200006 arg 6 ,loopcnt 
+55f9 da204687 arg mem_device2_addr ,rega 
+55fa 1a622400 copy regc ,regb 
+55fb 20206b33 branch otp_write 
+
+mouse_write_otp_le_addr_increase_count_info:
+55fc 6fe0c678 fetch 1 ,mem_device_flag 
+55fd c1000000 rtneq mode_24g_device 
+55fe 6a414a8f fetchr regb ,2 ,mem_otp_offset_le_addr_increase_count 
+55ff 1a422600 copy regb ,regc 
+
+mouse_otp_store_le_addr_increase_count_loop:
+5600 20405738 call mouse_read_otp_le_addr_increase_count_common 
+5601 6fe0ca71 fetch 1 ,mem_random_addr_increase_count_temp 
+5602 203a560a branch mouse_le_addr_increase_count_store ,blank 
+5603 67e0ca6f store 1 ,mem_random_addr_increase_count_last 
+5604 1a60a601 increase 1 ,regc 
+5605 6fe14a91 fetch 2 ,mem_otp_offset_le_addr_increase_count_end 
+5606 9a667c00 isub regc ,null 
+5607 24610000 nrtn positive 
+5608 1a622400 copy regc ,regb 
+5609 20205600 branch mouse_otp_store_le_addr_increase_count_loop 
+
+mouse_le_addr_increase_count_store:
+560a 6fe0ca6f fetch 1 ,mem_random_addr_increase_count_last 
+560b 6848c6a7 fetcht 1 ,mem_random_addr_increase_count 
+560c 98467c00 isub temp ,null 
+560d 20628000 rtn zero 
+560e df200001 arg 1 ,loopcnt 
+560f da2046a7 arg mem_random_addr_increase_count ,rega 
+5610 1a622400 copy regc ,regb 
+5611 20206b33 branch otp_write 
+
+mouse_store_otp_dpi:
+5612 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5613 c4070000 rtnbit0 mouse_enable_load_and_store_dpi 
+5614 6a414a7b fetchr regb ,2 ,mem_otp_offset_dpi 
+5615 1a422600 copy regb ,regc 
+
+mouse_otp_store_dpi_loop:
+5616 2040574c call mouse_read_otp_dpi_common 
+5617 6fe0ca65 fetch 1 ,mem_mouse_dpi_temp 
+5618 203a5620 branch mouse_otp_dpi_store ,blank 
+5619 67e0ca64 store 1 ,mem_mouse_dpi_last 
+561a 1a60a601 increase 1 ,regc 
+561b 6fe14a7d fetch 2 ,mem_otp_offset_dpi_end 
+561c 9a667c00 isub regc ,null 
+561d 24610000 nrtn positive 
+561e 1a622400 copy regc ,regb 
+561f 20205616 branch mouse_otp_store_dpi_loop 
+
+mouse_otp_dpi_store:
+5620 6fe0ca64 fetch 1 ,mem_mouse_dpi_last 
+5621 1fe17ef0 and pdata ,0xf0 ,pdata 
+5622 203a562a branch mouse_dpi_store_last_check ,blank 
+5623 6fe0c6a2 fetch 1 ,mem_mouse_dpi 
+5624 20405638 call mouse_dpi_otp_store_judge 
+5625 67e0ca66 store 1 ,mem_mouse_otp_dpi_value 
+
+mouse_dpi_store_end:
+5626 df200001 arg 1 ,loopcnt 
+5627 1a622400 copy regc ,regb 
+5628 da204a66 arg mem_mouse_otp_dpi_value ,rega 
+5629 20206b33 branch otp_write 
+
+mouse_dpi_store_last_check:
+562a 6848ca64 fetcht 1 ,mem_mouse_dpi_last 
+562b 6fe0c6a2 fetch 1 ,mem_mouse_dpi 
+562c 20405638 call mouse_dpi_otp_store_judge 
+562d 98467c00 isub temp ,null 
+562e 20628000 rtn zero 
+562f 1ff27e00 lshift4 pdata ,pdata 
+5630 9840fe00 iadd temp ,pdata 
+5631 67e0ca66 store 1 ,mem_mouse_otp_dpi_value 
+5632 1a627e00 copy regc ,pdata 
+5633 68494a7b fetcht 2 ,mem_otp_offset_dpi 
+5634 98467c00 isub temp ,null 
+5635 2022d626 branch mouse_dpi_store_end ,zero 
+5636 1a60a7ff increase -1 ,regc 
+5637 20205626 branch mouse_dpi_store_end 
+
+mouse_dpi_otp_store_judge:
+5638 c1800000 rtnne mouse_dpi_level1 
+5639 1fe0fe07 increase 7 ,pdata 
+563a 20600000 rtn 
+
+mouse_device_flag_check:
+563b 6fe0c678 fetch 1 ,mem_device_flag 
+563c 1fe67c04 sub pdata ,4 ,null 
+563d 20610000 rtn positive 
+563e 20407dcc call set_pdata_0 
+563f 202056bb branch mouse_store_device_flag 
+
+mouse_load_eeprom_info_check:
+5640 20406cb2 call iicd_read_init_pin 
+5641 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5642 2feffe09 isolate1 mouse_enable_2k_eeprom ,pdata 
+5643 2440ecba ncall clear_eeprom_size_2k ,true 
+5644 2040ecb7 call set_eeprom_size_2k ,true 
+5645 20405648 call mouse_eeprom_load_recon_info 
+5646 2040563b call mouse_device_flag_check 
+5647 20205689 branch mouse_app_initflag_load_check 
+
+mouse_eeprom_load_recon_info:
+5648 d8400080 arg 128 ,temp 
+5649 da204678 arg mem_device_flag ,rega 
+564a da400000 arg mouse_info_eeprom_offect ,regb 
+564b 20206cd7 branch iicd_read_eep_data 
+
+mouse_load_eeprom_dpi:
+564c d8400001 arg 1 ,temp 
+564d da2046a2 arg mem_mouse_dpi ,rega 
+564e da40005a arg mouse_dpi_eeprom_offect ,regb 
+564f 20206cd7 branch iicd_read_eep_data 
+
+mouse_load_flash_info_check:
+5650 204067b6 call hid_device_load_flash_info_check 
+5651 2040563b call mouse_device_flag_check 
+5652 20405689 call mouse_app_initflag_load_check 
+5653 20204f1b branch mouse_sensor_spi_init 
+
+mouse_information_flash_parameters:
+5654 580046f8 setarg mem_device_information_end 
+5655 d8404678 arg mem_device_information_start ,temp 
+5656 98460400 isub temp ,temp 
+5657 6fe1c6fe fetch 3 ,mem_flash_base 
+5658 da204678 arg mem_device_information_start ,rega 
+5659 20600000 rtn 
+
+mouse_spid_flash_release_form_powerdown:
+565a 700656ab jam flash_command_release_from_powerdown ,mem_temp 
+
+mouse_spid_write_flash_cmd:
+565b 204070bf call delay_nop100 
+565c 20406c1c call spid_unlock_flash 
+565d da204701 arg mem_write_flash_head_temp ,rega 
+565e 68488656 fetcht 1 ,mem_temp 
+565f 20405663 call mouse_spid_write_flash_cmd_common 
+5660 202070bf branch delay_nop100 
+
+mouse_spid_flash_powerdown:
+5661 700656b9 jam flash_command_powerdown ,mem_temp 
+5662 2020565b branch mouse_spid_write_flash_cmd 
+
+mouse_spid_write_flash_cmd_common:
+5663 e0408011 istoret 1 ,rega 
+5664 1ff10400 rshift16 pdata ,temp 
+5665 e0408005 istoret 1 ,contw 
+5666 1fec8400 rshift8 pdata ,temp 
+5667 e0408005 istoret 1 ,contw 
+5668 e7e08005 istore 1 ,contw 
+5669 1a227e00 deposit rega 
+566a 67f10084 store 2 ,core_spid_txaddr 
+566b 58000000 setarg 0 
+566c 67f10088 store 2 ,core_spid_rxlen 
+566d 70800602 jam spid_start ,core_misc_ctrl 
+566e 20206bd6 branch wait_spid_done 
+
+mouse_flash_erase_sector:
+566f 6fe1c6fe fetch 3 ,mem_flash_base 
+5670 67e1c430 store 3 ,mem_spi_write_addr 
+5671 20206bf0 branch spid_flash_erase_sector + 2 
+
+mouse_spid_write_flash:
+5672 1fe22600 copy pdata ,regc 
+5673 1a227e00 copy rega ,pdata 
+5674 1fe0fffc increase -4 ,pdata 
+5675 1fe22400 copy pdata ,regb 
+5676 efe20012 ifetch 4 ,regb 
+5677 67e24701 store 4 ,mem_write_flash_head_temp 
+5678 1a627e00 copy regc ,pdata 
+5679 20406c32 call spid_write_flash 
+567a 6fe24701 fetch 4 ,mem_write_flash_head_temp 
+567b e7e20012 istore 4 ,regb 
+567c 20600000 rtn 
+
+mouse_flash_power_down:
+567d 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+567e c4080000 rtnbit0 mouse_enable_flash 
+567f 20405661 call mouse_spid_flash_powerdown 
+5680 2040696c call twspi_enable 
+5681 6848c438 fetcht 1 ,mem_spi_cs_gpio 
+5682 20406eed call gpio_out_inactive 
+5683 6848c43d fetcht 1 ,mem_spi_hold_gpio 
+5684 20204f06 branch device_gpio_config_input_pd 
+
+mouse_load_otp_info_check:
+5685 2040573e call mouse_read_otp_dpi 
+5686 204056a1 call mouse_read_otp_device_flag 
+5687 2040563b call mouse_device_flag_check 
+5688 204056bf call mouse_read_otp_device_info 
+
+mouse_app_initflag_load_check:
+5689 44ccc013 bpatch patch13_1 ,mem_patch13 
+568a 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+568b 2feffe12 isolate1 mouse_enable_otp ,pdata 
+568c 2040d699 call mouse_otp_load_app_initflag ,true 
+568d 6fe146a0 fetch 2 ,mem_store_flag 
+568e d840aa55 arg eeprom_init_flag ,temp 
+568f 98467c00 isub temp ,null 
+5690 2022e7cf branch hid_device_load_device_info ,zero 
+
+mouse_app_initflag_load:
+5691 604946a0 storet 2 ,mem_store_flag 
+5692 204067f8 call hid_device_ble_init_address 
+5693 6fe0c717 fetch 1 ,mem_device_flag_temp 
+5694 67e0c678 store 1 ,mem_device_flag 
+5695 67e0c6a7 store 1 ,mem_random_addr_increase_count 
+
+mouse_load_default_dpi:
+5696 6fe0c899 fetch 1 ,mem_config_sensor_dpi 
+
+mouse_temp_store_dpi:
+5697 67e0c6a2 store 1 ,mem_mouse_dpi 
+5698 20600000 rtn 
+
+mouse_otp_load_app_initflag:
+5699 df200002 arg 2 ,loopcnt 
+569a 6a414a93 fetchr regb ,2 ,mem_otp_offset_app_initflag 
+569b da2046a0 arg mem_store_flag ,rega 
+569c 20206b62 branch otp_read_data 
+
+mouse_otp_store_app_initflag:
+569d df200002 arg 2 ,loopcnt 
+569e da2046a0 arg mem_store_flag ,rega 
+569f 6a414a93 fetchr regb ,2 ,mem_otp_offset_app_initflag 
+56a0 20206b33 branch otp_write 
+
+mouse_read_otp_device_flag:
+56a1 6a414a7f fetchr regb ,2 ,mem_otp_offset_device_flag 
+56a2 1a422600 copy regb ,regc 
+
+mouse_read_otp_device_flag_loop:
+56a3 204056ad call mouse_read_otp_device_flag_common 
+56a4 6fe0c718 fetch 1 ,mem_device_otp_flag_temp 
+56a5 203a56b0 branch mouse_device_flag_load ,blank 
+56a6 67e0ca32 store 1 ,mem_device_flag_last 
+56a7 1a60a601 increase 1 ,regc 
+56a8 6fe14a81 fetch 2 ,mem_otp_offset_device_flag_end 
+56a9 9a667c00 isub regc ,null 
+56aa 242156b0 nbranch mouse_device_flag_load ,positive 
+56ab 1a622400 copy regc ,regb 
+56ac 202056a3 branch mouse_read_otp_device_flag_loop 
+
+mouse_read_otp_device_flag_common:
+56ad df200001 arg 1 ,loopcnt 
+56ae da204718 arg mem_device_otp_flag_temp ,rega 
+56af 20206b62 branch otp_read_data 
+
+mouse_device_flag_load:
+56b0 6fe0ca32 fetch 1 ,mem_device_flag_last 
+56b1 1fe20400 copy pdata ,temp 
+56b2 1fe17ef0 and pdata ,0xf0 ,pdata 
+56b3 203a56b6 branch mouse_device_flag_load_last ,blank 
+56b4 1ff1fe00 rshift4 pdata ,pdata 
+56b5 202056b7 branch mouse_device_flag_load_end 
+
+mouse_device_flag_load_last:
+56b6 18427e00 copy temp ,pdata 
+
+mouse_device_flag_load_end:
+56b7 1fe67c00 sub pdata ,0 ,null 
+56b8 2022d6bd branch mouse_device_flag_temp_load ,zero 
+56b9 1fe67c04 sub pdata ,4 ,null 
+56ba 2042fdcc call set_pdata_0 ,zero 
+
+mouse_store_device_flag:
+56bb 67e0c678 store 1 ,mem_device_flag 
+56bc 20600000 rtn 
+
+mouse_device_flag_temp_load:
+56bd 6fe0c717 fetch 1 ,mem_device_flag_temp 
+56be 202056bb branch mouse_store_device_flag 
+
+mouse_read_otp_device_info:
+56bf 2040571a call mouse_read_otp_24g_addr 
+56c0 204056c3 call mouse_read_otp_le_device1 
+56c1 204056c5 call mouse_read_otp_le_device2 
+56c2 2020572c branch mouse_read_otp_le_addr_increase_count_info 
+
+mouse_read_otp_le_device1:
+56c3 204056c7 call mouse_read_otp_le_device1_addr 
+56c4 202056d9 branch mouse_read_otp_le_device1_locall_addr 
+
+mouse_read_otp_le_device2:
+56c5 204056f0 call mouse_read_otp_le_device2_addr 
+56c6 20205702 branch mouse_read_otp_le_device2_locall_addr 
+
+mouse_read_otp_le_device1_addr:
+56c7 6a414a87 fetchr regb ,2 ,mem_otp_offset_le_addr1 
+56c8 1a422600 copy regb ,regc 
+
+mouse_read_otp_le_device1_addr_loop:
+56c9 204056d3 call mouse_read_otp_le_addr1_common 
+56ca 6fe34a3a fetch 6 ,mem_mouse_le_addr1_temp 
+56cb 203a56d6 branch mouse_le_addr1_load ,blank 
+56cc 67e34a34 store 6 ,mem_mouse_le_addr1_last 
+56cd 1a60a606 increase 6 ,regc 
+56ce 6fe14a89 fetch 2 ,mem_otp_offset_le_addr1_end 
+56cf 9a667c00 isub regc ,null 
+56d0 242156d6 nbranch mouse_le_addr1_load ,positive 
+56d1 1a622400 copy regc ,regb 
+56d2 202056c9 branch mouse_read_otp_le_device1_addr_loop 
+
+mouse_read_otp_le_addr1_common:
+56d3 df200006 arg 6 ,loopcnt 
+56d4 da204a3a arg mem_mouse_le_addr1_temp ,rega 
+56d5 20206b62 branch otp_read_data 
+
+mouse_le_addr1_load:
+56d6 6fe34a34 fetch 6 ,mem_mouse_le_addr1_last 
+56d7 67e3467a store 6 ,mem_device1_addr 
+56d8 20600000 rtn 
+
+mouse_read_otp_le_device1_locall_addr:
+56d9 6a414a8b fetchr regb ,2 ,mem_otp_offset_le_locall_addr1 
+56da 1a422600 copy regb ,regc 
+
+mouse_read_otp_le_device1_locall_addr_loop:
+56db 204056e5 call mouse_read_otp_le_locall_addr1_common 
+56dc 6fe34a46 fetch 6 ,mem_mouse_le_locall_addr1_temp 
+56dd 203a56e8 branch mouse_le_locall_addr1_load ,blank 
+56de 67e34a40 store 6 ,mem_mouse_le_locall_addr1_last 
+56df 1a60a606 increase 6 ,regc 
+56e0 6fe14a8d fetch 2 ,mem_otp_offset_le_locall_addr1_end 
+56e1 9a667c00 isub regc ,null 
+56e2 242156e8 nbranch mouse_le_locall_addr1_load ,positive 
+56e3 1a622400 copy regc ,regb 
+56e4 202056db branch mouse_read_otp_le_device1_locall_addr_loop 
+
+mouse_read_otp_le_locall_addr1_common:
+56e5 df200006 arg 6 ,loopcnt 
+56e6 da204a46 arg mem_mouse_le_locall_addr1_temp ,rega 
+56e7 20206b62 branch otp_read_data 
+
+mouse_le_locall_addr1_load:
+56e8 6fe34a40 fetch 6 ,mem_mouse_le_locall_addr1_last 
+56e9 684b46f8 fetcht 6 ,mem_device_compare_addr 
+56ea 98467c00 isub temp ,null 
+56eb 2042d6ee call mouse_device_le_locall_addr1_init ,zero 
+56ec 67e34680 store 6 ,mem_device1_locall_addr 
+56ed 20600000 rtn 
+
+mouse_device_le_locall_addr1_init:
+56ee 6fe342dd fetch 6 ,mem_le_lap 
+56ef 20600000 rtn 
+
+mouse_read_otp_le_device2_addr:
+56f0 6a414a73 fetchr regb ,2 ,mem_otp_offset_le_addr2 
+56f1 1a422600 copy regb ,regc 
+
+mouse_read_otp_le_device2_addr_loop:
+56f2 204056fc call mouse_read_otp_le_addr2_common 
+56f3 6fe34a52 fetch 6 ,mem_mouse_le_addr2_temp 
+56f4 203a56ff branch mouse_le_addr2_load ,blank 
+56f5 67e34a4c store 6 ,mem_mouse_le_addr2_last 
+56f6 1a60a606 increase 6 ,regc 
+56f7 6fe14a75 fetch 2 ,mem_otp_offset_le_addr2_end 
+56f8 9a667c00 isub regc ,null 
+56f9 242156ff nbranch mouse_le_addr2_load ,positive 
+56fa 1a622400 copy regc ,regb 
+56fb 202056f2 branch mouse_read_otp_le_device2_addr_loop 
+
+mouse_read_otp_le_addr2_common:
+56fc df200006 arg 6 ,loopcnt 
+56fd da204a52 arg mem_mouse_le_addr2_temp ,rega 
+56fe 20206b62 branch otp_read_data 
+
+mouse_le_addr2_load:
+56ff 6fe34a4c fetch 6 ,mem_mouse_le_addr2_last 
+5700 67e34687 store 6 ,mem_device2_addr 
+5701 20600000 rtn 
+
+mouse_read_otp_le_device2_locall_addr:
+5702 6a414a77 fetchr regb ,2 ,mem_otp_offset_le_locall_addr2 
+5703 1a422600 copy regb ,regc 
+
+mouse_read_otp_le_device2_locall_addr_loop:
+5704 2040570e call mouse_read_otp_le_locall_addr2_common 
+5705 6fe34a5e fetch 6 ,mem_mouse_le_locall_addr2_temp 
+5706 203a5711 branch mouse_le_locall_addr2_load ,blank 
+5707 67e34a58 store 6 ,mem_mouse_le_locall_addr2_last 
+5708 1a60a606 increase 6 ,regc 
+5709 6fe14a79 fetch 2 ,mem_otp_offset_le_locall_addr2_end 
+570a 9a667c00 isub regc ,null 
+570b 24215711 nbranch mouse_le_locall_addr2_load ,positive 
+570c 1a622400 copy regc ,regb 
+570d 20205704 branch mouse_read_otp_le_device2_locall_addr_loop 
+
+mouse_read_otp_le_locall_addr2_common:
+570e df200006 arg 6 ,loopcnt 
+570f da204a5e arg mem_mouse_le_locall_addr2_temp ,rega 
+5710 20206b62 branch otp_read_data 
+
+mouse_le_locall_addr2_load:
+5711 6fe34a58 fetch 6 ,mem_mouse_le_locall_addr2_last 
+5712 684b46f8 fetcht 6 ,mem_device_compare_addr 
+5713 98467c00 isub temp ,null 
+5714 2042d717 call mouse_device_le_locall_addr2_init ,zero 
+5715 67e3468d store 6 ,mem_device2_locall_addr 
+5716 20600000 rtn 
+
+mouse_device_le_locall_addr2_init:
+5717 6fe342dd fetch 6 ,mem_le_lap 
+5718 1fe0ff00 add pdata ,0x0100 ,pdata 
+5719 20600000 rtn 
+
+mouse_read_otp_24g_addr:
+571a 6a414a83 fetchr regb ,2 ,mem_otp_offset_24g_addr 
+571b 1a422600 copy regb ,regc 
+
+mouse_read_otp_24g_addr_loop:
+571c 20405726 call mouse_read_otp_24g_addr_common 
+571d 6fe24a6b fetch 4 ,mem_mouse_24g_addr_temp 
+571e 203a5729 branch mouse_24g_addr_load ,blank 
+571f 67e24a67 store 4 ,mem_mouse_24g_addr_last 
+5720 1a60a604 increase 4 ,regc 
+5721 6fe14a85 fetch 2 ,mem_otp_offset_24g_addr_end 
+5722 9a667c00 isub regc ,null 
+5723 24215729 nbranch mouse_24g_addr_load ,positive 
+5724 1a622400 copy regc ,regb 
+5725 2020571c branch mouse_read_otp_24g_addr_loop 
+
+mouse_read_otp_24g_addr_common:
+5726 df200004 arg 4 ,loopcnt 
+5727 da204a6b arg mem_mouse_24g_addr_temp ,rega 
+5728 20206b62 branch otp_read_data 
+
+mouse_24g_addr_load:
+5729 6fe24a67 fetch 4 ,mem_mouse_24g_addr_last 
+572a 67e246a3 store 4 ,mem_device_24g_addr 
+572b 20600000 rtn 
+
+mouse_read_otp_le_addr_increase_count_info:
+572c 6a414a8f fetchr regb ,2 ,mem_otp_offset_le_addr_increase_count 
+572d 1a422600 copy regb ,regc 
+
+mouse_read_otp_le_addr_increase_count_loop:
+572e 20405738 call mouse_read_otp_le_addr_increase_count_common 
+572f 6fe0ca71 fetch 1 ,mem_random_addr_increase_count_temp 
+5730 203a573b branch mouse_le_addr_increase_count_load ,blank 
+5731 67e0ca6f store 1 ,mem_random_addr_increase_count_last 
+5732 1a60a601 increase 1 ,regc 
+5733 6fe14a91 fetch 2 ,mem_otp_offset_le_addr_increase_count_end 
+5734 9a667c00 isub regc ,null 
+5735 2421573b nbranch mouse_le_addr_increase_count_load ,positive 
+5736 1a622400 copy regc ,regb 
+5737 2020572e branch mouse_read_otp_le_addr_increase_count_loop 
+
+mouse_read_otp_le_addr_increase_count_common:
+5738 df200001 arg 1 ,loopcnt 
+5739 da204a71 arg mem_random_addr_increase_count_temp ,rega 
+573a 20206b62 branch otp_read_data 
+
+mouse_le_addr_increase_count_load:
+573b 6fe0ca6f fetch 1 ,mem_random_addr_increase_count_last 
+573c 67e0c6a7 store 1 ,mem_random_addr_increase_count 
+573d 20600000 rtn 
+
+mouse_read_otp_dpi:
+573e 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+573f c3075696 bbit0 mouse_enable_load_and_store_dpi ,mouse_load_default_dpi 
+5740 6a414a7b fetchr regb ,2 ,mem_otp_offset_dpi 
+5741 1a422600 copy regb ,regc 
+
+mouse_read_otp_dpi_loop:
+5742 2040574c call mouse_read_otp_dpi_common 
+5743 6fe0ca65 fetch 1 ,mem_mouse_dpi_temp 
+5744 203a574f branch mouse_dpi_load ,blank 
+5745 67e0ca64 store 1 ,mem_mouse_dpi_last 
+5746 1a60a601 increase 1 ,regc 
+5747 6fe14a7d fetch 2 ,mem_otp_offset_dpi_end 
+5748 9a667c00 isub regc ,null 
+5749 2421574f nbranch mouse_dpi_load ,positive 
+574a 1a622400 copy regc ,regb 
+574b 20205742 branch mouse_read_otp_dpi_loop 
+
+mouse_read_otp_dpi_common:
+574c df200001 arg 1 ,loopcnt 
+574d da204a65 arg mem_mouse_dpi_temp ,rega 
+574e 20206b62 branch otp_read_data 
+
+mouse_dpi_load:
+574f 6fe0ca64 fetch 1 ,mem_mouse_dpi_last 
+5750 1fe20400 copy pdata ,temp 
+5751 1fe17ef0 and pdata ,0xf0 ,pdata 
+5752 203a5755 branch mouse_dpi_load_last ,blank 
+5753 1ff1fe00 rshift4 pdata ,pdata 
+5754 20205756 branch mouse_dpi_load_end 
+
+mouse_dpi_load_last:
+5755 18427e00 copy temp ,pdata 
+
+mouse_dpi_load_end:
+5756 1fe67c07 sub pdata ,7 ,null 
+5757 2042fdcc call set_pdata_0 ,zero 
+5758 20205697 branch mouse_temp_store_dpi 
+
+mouse_idle:
+5759 44cd4013 bpatch patch13_2 ,mem_patch13 
+575a 20405add call mouse_low_voltage_led_no_enter_lpm 
+575b 2040789a call ui_check_paring_button 
+575c 20404fdb call mouse_dpi_check 
+575d 20405132 call mouse_dpi_another_gpio_check 
+575e 20405767 call mouse_select_device_check 
+575f 204057b8 call mouse_check_select_device_by_switch 
+5760 20405815 call mouse_bt_button_check 
+5761 20404f42 call mouse_wheel_check 
+5762 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5763 c4060000 rtnbit0 mouse_enable_usb 
+5764 44cdc013 bpatch patch13_3 ,mem_patch13 
+5765 20405b87 call mouse_usb_isr 
+5766 20205bb0 branch mouse_usb_mode 
+
+mouse_select_device_check:
+5767 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5768 c294d76b bbit1 mouse_enable_select_device_by_pb_button ,mouse_select_device_by_pb_button 
+5769 c29bd76b bbit1 mouse_enable_pb_button_long_press_disconvery ,mouse_select_device_by_pb_button 
+576a 20600000 rtn 
+
+mouse_select_device_by_pb_button:
+576b 2040576d call mouse_select_device_by_pb_button_check 
+576c 2020577e branch mouse_select_device_by_pb_button_exit 
+
+mouse_select_device_by_pb_button_check:
+576d 44ce4013 bpatch patch13_4 ,mem_patch13 
+576e da200000 arg 0 ,rega 
+576f 704a0f06 jam mouse_pb_key ,mem_mouse_key_temp 
+5770 6848c89d fetcht 1 ,mem_config_select_device_button_gpio 
+5771 20405781 call mouse_pb_button_check 
+5772 67e0ca0d store 1 ,mem_mouse_pbkey_press_status 
+5773 6fe0c89c fetch 1 ,mem_matrix_public_gpio 
+5774 c07fd77c beq gpio_disable ,mouse_3io6key_pb_button_check_end 
+5775 20205203 branch mouse_matrix_public_gpio_reset 
+
+mouse_retransmit_select_device_by_pb_button:
+5776 6fe0c89d fetch 1 ,mem_config_select_device_button_gpio 
+5777 c17f8000 rtneq gpio_disable 
+5778 2040576d call mouse_select_device_by_pb_button_check 
+5779 1a227e00 copy rega ,pdata 
+577a c28357a4 bbit1 mouse_pb_key ,mouse_select_device_button_down + 2 
+577b 20205797 branch mouse_select_device_button_up 
+
+mouse_3io6key_pb_button_check_end:
+577c 6848c89d fetcht 1 ,mem_config_select_device_button_gpio 
+577d 20404f0a call device_gpio_config_input_pu 
+
+mouse_select_device_by_pb_button_exit:
+577e 1a227e00 copy rega ,pdata 
+577f c28357a2 bbit1 mouse_pb_key ,mouse_select_device_button_down 
+5780 20205797 branch mouse_select_device_button_up 
+
+mouse_pb_button_check:
+5781 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5782 c296d78d bbit1 mouse_enable_pb_button_connect_gnd ,mouse_pb_button_connect_gnd 
+5783 6fe0ca0d fetch 1 ,mem_mouse_pbkey_press_status 
+5784 1fe22600 copy pdata ,regc 
+5785 6fe0c89c fetch 1 ,mem_matrix_public_gpio 
+5786 c07fd242 beq gpio_disable ,mouse_3io6key_check 
+5787 6fe0ca13 fetch 1 ,mem_mouse_ghost_flag 
+5788 243a578a nbranch mouse_select_device_by_pb_button_end ,blank 
+5789 2020578f branch mouse_pb_button_connect_matrix 
+
+mouse_select_device_by_pb_button_end:
+578a 70473400 jam pb_button_state_up ,mem_select_device_button_statue 
+578b 704a0d00 jam 0 ,mem_mouse_pbkey_press_status 
+578c 20600000 rtn 
+
+mouse_pb_button_connect_gnd:
+578d 6fe0ca0d fetch 1 ,mem_mouse_pbkey_press_status 
+578e 20205236 branch mouse_check_key_connect_gnd 
+
+mouse_pb_button_connect_matrix:
+578f 20406ee0 call gpio_get_bit 
+5790 6848c89c fetcht 1 ,mem_matrix_public_gpio 
+5791 2020d78d branch mouse_pb_button_connect_gnd ,true 
+5792 6848c89c fetcht 1 ,mem_matrix_public_gpio 
+5793 20406ef1 call gpio_out_active 
+5794 6848c89d fetcht 1 ,mem_config_select_device_button_gpio 
+5795 6fe0ca0d fetch 1 ,mem_mouse_pbkey_press_status 
+5796 20205236 branch mouse_check_key_connect_gnd 
+
+mouse_select_device_button_up:
+5797 6fe0c734 fetch 1 ,mem_select_device_button_statue 
+5798 c1000000 rtneq pb_button_state_up 
+5799 70473400 jam pb_button_state_up ,mem_select_device_button_statue 
+579a 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+579b c39a0000 rtnbit1 mouse_enable_pb_button_short_press_enter_discovery 
+579c 6fe0c731 fetch 1 ,mem_bt_discovery_count 
+579d 1fe67c14 sub pdata ,20 ,null 
+579e 244157f6 ncall mouse_ready_reconnection_by_button ,positive 
+579f 6fe0c502 fetch 1 ,mem_ui_button_timeout 
+57a0 67e0c731 store 1 ,mem_bt_discovery_count 
+57a1 20600000 rtn 
+
+mouse_select_device_button_down:
+57a2 204057ae call mouse_select_device_ghost_check 
+57a3 20740000 rtn user 
+57a4 6fe0c734 fetch 1 ,mem_select_device_button_statue 
+57a5 c1008000 rtneq pb_button_state_down 
+57a6 70473401 jam pb_button_state_down ,mem_select_device_button_statue 
+57a7 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+57a8 c29a54b2 bbit1 mouse_enable_pb_button_short_press_enter_discovery ,mouse_long_button_bt_discovery 
+57a9 6fe0c720 fetch 1 ,mem_device_direct_timer 
+57aa 207a0000 rtn blank 
+57ab 6fe0c653 fetch 1 ,mem_device_direct_timeout 
+57ac 67e0c720 store 1 ,mem_device_direct_timer 
+57ad 20600000 rtn 
+
+mouse_select_device_ghost_check:
+57ae 78547c00 disable user 
+57af 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+57b0 c3968000 rtnbit1 mouse_enable_pb_button_connect_gnd 
+
+mouse_ghost_key_value_check:
+57b1 6fe0ca07 fetch 1 ,mem_mouse_lkey_press_status 
+57b2 207a0000 rtn blank 
+57b3 6fe0ca08 fetch 1 ,mem_mouse_rkey_press_status 
+57b4 207a0000 rtn blank 
+57b5 6fe0ca09 fetch 1 ,mem_mouse_mkey_press_status 
+57b6 207a0000 rtn blank 
+57b7 20207dbc branch enable_user 
+
+mouse_check_select_device_by_switch:
+57b8 44cec013 bpatch patch13_5 ,mem_patch13 
+57b9 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+57ba c4150000 rtnbit0 mouse_enable_select_device_by_switch_gpio 
+57bb c30b57bf bbit0 mouse_enable_switch_gpio_connect_vin ,mouse_switch_gpio_connect_gnd_check 
+
+mouse_switch_gpio_connect_vin_check:
+57bc 204057c2 call mouse_switch_gpio_connect_vin 
+57bd 6fe0c665 fetch 1 ,mem_device_switch_gpio 
+57be 20205258 branch mouse_gpio_config_pu_check 
+
+mouse_switch_gpio_connect_gnd_check:
+57bf 204057c8 call mouse_switch_gpio_connect_gnd 
+57c0 6fe0c665 fetch 1 ,mem_device_switch_gpio 
+57c1 2020525c branch mouse_gpio_config_pd_check 
+
+mouse_switch_gpio_connect_vin:
+57c2 6fe0c665 fetch 1 ,mem_device_switch_gpio 
+57c3 2040525c call mouse_gpio_config_pd_check 
+57c4 6848c665 fetcht 1 ,mem_device_switch_gpio 
+57c5 20406ee0 call gpio_get_bit 
+57c6 2020d7ce branch mouse_select_btdevice ,true 
+57c7 202057d2 branch mouse_select_24gdevice 
+
+mouse_switch_gpio_connect_gnd:
+57c8 6fe0c665 fetch 1 ,mem_device_switch_gpio 
+57c9 20405258 call mouse_gpio_config_pu_check 
+57ca 6848c665 fetcht 1 ,mem_device_switch_gpio 
+57cb 20406ee0 call gpio_get_bit 
+57cc 2020d7d2 branch mouse_select_24gdevice ,true 
+57cd 202057ce branch mouse_select_btdevice 
+
+mouse_select_btdevice:
+57ce 6fe0c678 fetch 1 ,mem_device_flag 
+57cf c1008000 rtneq mode_bt_device1 
+57d0 70467801 jam mode_bt_device1 ,mem_device_flag 
+57d1 202057d5 branch mouse_select_device_set 
+
+mouse_select_24gdevice:
+57d2 6fe0c678 fetch 1 ,mem_device_flag 
+57d3 c1000000 rtneq mode_24g_device 
+57d4 70467800 jam mode_24g_device ,mem_device_flag 
+
+mouse_select_device_set:
+57d5 204057f0 call mouse_select_device_stop_set 
+57d6 20205801 branch mouse_soft_reset 
+
+mouse_check_select_device_by_switch_once:
+57d7 44cf4013 bpatch patch13_6 ,mem_patch13 
+57d8 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+57d9 c4150000 rtnbit0 mouse_enable_select_device_by_switch_gpio 
+57da c30b57de bbit0 mouse_enable_switch_gpio_connect_vin ,mouse_switch_gpio_connect_gnd_check_once 
+
+mouse_switch_gpio_connect_vin_check_once:
+57db 204057e1 call mouse_switch_gpio_connect_vin_once 
+57dc 6fe0c665 fetch 1 ,mem_device_switch_gpio 
+57dd 20205258 branch mouse_gpio_config_pu_check 
+
+mouse_switch_gpio_connect_gnd_check_once:
+57de 204057e7 call mouse_switch_gpio_connect_gnd_once 
+57df 6fe0c665 fetch 1 ,mem_device_switch_gpio 
+57e0 2020525c branch mouse_gpio_config_pd_check 
+
+mouse_switch_gpio_connect_vin_once:
+57e1 6fe0c665 fetch 1 ,mem_device_switch_gpio 
+57e2 2040525c call mouse_gpio_config_pd_check 
+57e3 6848c665 fetcht 1 ,mem_device_switch_gpio 
+57e4 20406ee0 call gpio_get_bit 
+57e5 2020d7f2 branch mouse_check_select_btdevice ,true 
+57e6 202057ed branch mouse_check_select_24g_device 
+
+mouse_switch_gpio_connect_gnd_once:
+57e7 6fe0c665 fetch 1 ,mem_device_switch_gpio 
+57e8 20405258 call mouse_gpio_config_pu_check 
+57e9 6848c665 fetcht 1 ,mem_device_switch_gpio 
+57ea 20406ee0 call gpio_get_bit 
+57eb 2020d7ed branch mouse_check_select_24g_device ,true 
+57ec 202057f2 branch mouse_check_select_btdevice 
+
+mouse_check_select_24g_device:
+57ed 6fe0c678 fetch 1 ,mem_device_flag 
+57ee c1000000 rtneq mode_24g_device 
+57ef 70467800 jam mode_24g_device ,mem_device_flag 
+
+mouse_select_device_stop_set:
+57f0 20405936 call mouse_24g_stop 
+57f1 202053c3 branch mouse_stop_bluetooth_mode 
+
+mouse_check_select_btdevice:
+57f2 6fe0c678 fetch 1 ,mem_device_flag 
+57f3 c1008000 rtneq mode_bt_device1 
+57f4 70467801 jam mode_bt_device1 ,mem_device_flag 
+57f5 202057f0 branch mouse_select_device_stop_set 
+
+mouse_ready_reconnection_by_button:
+57f6 44cfc013 bpatch patch13_7 ,mem_patch13 
+57f7 6fe0c716 fetch 1 ,mem_device_number 
+57f8 c1008000 rtneq 1 
+57f9 20405803 call mouse_select_device_number 
+57fa 6048c678 storet 1 ,mem_device_flag 
+
+mouse_store_device_number_before_reset:
+57fb 20405818 call mouse_select_device_enable 
+57fc 204053c3 call mouse_stop_bluetooth_mode 
+57fd 20403745 call app_evt_button_long_pressed 
+57fe 2040581a call mouse_select_device_disable 
+57ff 70475201 jam 1 ,mem_device_need_soft_reset 
+5800 20205571 branch mouse_store_device_info_delay 
+
+mouse_soft_reset:
+5801 20405818 call mouse_select_device_enable 
+5802 20206c99 branch soft_reset_chip 
+
+mouse_select_device_number:
+5803 6848c678 fetcht 1 ,mem_device_flag 
+5804 18408401 increase 1 ,temp 
+5805 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5806 c287d80b bbit1 mouse_enable_24g ,mouse_select_device_number_24g 
+5807 18467c02 sub temp ,2 ,null 
+5808 20610000 rtn positive 
+
+mouse_select_device_count_clean_bt:
+5809 d8400001 arg 1 ,temp 
+580a 20600000 rtn 
+
+mouse_select_device_number_24g:
+580b 6fe0c716 fetch 1 ,mem_device_number 
+580c 1fe0ffff increase -1 ,pdata 
+580d 98467c00 isub temp ,null 
+580e 20610000 rtn positive 
+
+mouse_select_device_count_clean_24g:
+580f d8400000 arg 0 ,temp 
+5810 20600000 rtn 
+
+mouse_store_device_number2eeprom:
+5811 d8400001 arg 1 ,temp 
+5812 da204678 arg mem_device_flag ,rega 
+5813 da400000 arg 0 ,regb 
+5814 20206cc9 branch iicd_write_protect_eep_data 
+
+mouse_bt_button_check:
+5815 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5816 c41a0000 rtnbit0 mouse_enable_pb_button_short_press_enter_discovery 
+5817 2020576b branch mouse_select_device_by_pb_button 
+
+mouse_select_device_enable:
+5818 d8e00000 arg mouse_select_device_flag ,queue 
+5819 2020582e branch mouse_enable_function_flag 
+
+mouse_select_device_disable:
+581a d8e00000 arg mouse_select_device_flag ,queue 
+581b 20205832 branch mouse_disable_function_flag 
+
+mouse_bt_cannel_reconn_enable:
+581c d8e00003 arg mouse_bt_cannel_reconn_flag ,queue 
+581d 2020582e branch mouse_enable_function_flag 
+
+mouse_bt_cannel_reconn_disable:
+581e d8e00003 arg mouse_bt_cannel_reconn_flag ,queue 
+581f 20205832 branch mouse_disable_function_flag 
+
+mouse_bt_discovery_button_down_enable:
+5820 d8e00005 arg mouse_bt_discovery_button_down_flag ,queue 
+5821 2020582e branch mouse_enable_function_flag 
+
+mouse_bt_discovery_button_down_disable:
+5822 d8e00005 arg mouse_bt_discovery_button_down_flag ,queue 
+5823 20205832 branch mouse_disable_function_flag 
+
+mouse_adc_read_enable:
+5824 d8e00013 arg mouse_enable_adc ,queue 
+5825 2020582e branch mouse_enable_function_flag 
+
+mouse_24g_set_250hz:
+5826 d8e00018 arg mouse_enable_24g_250hz ,queue 
+5827 2020582e branch mouse_enable_function_flag 
+
+mouse_24g_search_dongle_enable:
+5828 d8e0000d arg mouse_enable_24g_search_dongle ,queue 
+5829 2020582e branch mouse_enable_function_flag 
+
+mouse_16m_enable:
+582a d8e0000b arg mouse_enable_16m ,queue 
+582b 2020582e branch mouse_enable_function_flag 
+
+mouse_dpi_4level_enable:
+582c d8e0001c arg mouse_enable_dpi_level_4 ,queue 
+582d 2020582e branch mouse_enable_function_flag 
+
+mouse_enable_function_flag:
+582e 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+582f f9207e00 qset1 pdata 
+5830 67e4470e store mouse_flag_len ,mem_mouse_flag 
+5831 20600000 rtn 
+
+mouse_disable_function_flag:
+5832 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5833 f93ffe00 qset0 pdata 
+5834 67e4470e store mouse_flag_len ,mem_mouse_flag 
+5835 20600000 rtn 
+
+mouse_polling_device:
+5836 44d04014 bpatch patch14_0 ,mem_patch14 
+5837 6fe0c73f fetch 1 ,mem_reconn_times 
+5838 1fe0ffff increase -1 ,pdata 
+5839 67e0c73f store 1 ,mem_reconn_times 
+583a 6848c678 fetcht 1 ,mem_device_flag 
+583b 18467c01 sub temp ,1 ,null 
+583c 2442d803 ncall mouse_select_device_number ,zero 
+583d 6048c678 storet 1 ,mem_device_flag 
+583e 20405811 call mouse_store_device_number2eeprom 
+583f 204067c1 call hid_device_before_store_reconn_info 
+5840 20204e09 branch mouse_start_reconnect_device 
+
+mouse_drawing_optima:
+5841 44d0c014 bpatch patch14_1 ,mem_patch14 
+5842 6fe0c9fa fetch 1 ,mem_config_sensor_type 
+5843 c1018000 rtneq p3212 
+5844 c1058000 rtneq ka8g2 
+5845 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5846 c41c0000 rtnbit0 mouse_enable_smoother 
+5847 6fe2465d fetch 4 ,mem_mouse_x 
+5848 207a0000 rtn blank 
+5849 204058e6 call mouse_data_abs_check 
+584a 58000003 setarg 0x03 
+584b 204058dc call mouse_pdata_greater_than_check 
+584c 205a58d8 call mouse_disable_asm ,blank 
+584d 245a58da ncall mouse_enable_asm ,blank 
+584e 58000002 setarg 0x02 
+584f 204058e1 call mouse_data_less_than_check 
+5850 205a58d8 call mouse_disable_asm ,blank 
+5851 6fe0c8fe fetch 1 ,mem_mouse_asm_flag 
+5852 c000d858 beq 1 ,mouse_drawing_optima_modify 
+
+mouse_drawing_optima_init:
+5853 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5854 c41c0000 rtnbit0 mouse_enable_smoother 
+5855 df200005 arg 5 ,loopcnt 
+5856 d8a048fe arg mem_mouse_asm_flag ,contw 
+5857 20207ca3 branch clear_mem 
+
+mouse_drawing_optima_modify:
+5858 2040586c call mouse_drawing_optima_xy_offset_modify 
+5859 6fe148ff fetch 2 ,mem_mouse_x_pre 
+585a 67e106e9 store 2 ,mem_data_pre 
+585b 6fe1465d fetch 2 ,mem_mouse_x 
+585c 67e106eb store 2 ,mem_data_current 
+585d 204058a2 call mouse_drawing_optima_data_x 
+585e 6fe106e9 fetch 2 ,mem_data_pre 
+585f 67e148ff store 2 ,mem_mouse_x_pre 
+5860 6fe106eb fetch 2 ,mem_data_current 
+5861 67e1465d store 2 ,mem_mouse_x 
+5862 6fe14901 fetch 2 ,mem_mouse_y_pre 
+5863 67e106e9 store 2 ,mem_data_pre 
+5864 6fe1465f fetch 2 ,mem_mouse_y 
+5865 67e106eb store 2 ,mem_data_current 
+5866 204058aa call mouse_drawing_optima_data_y 
+5867 6fe106e9 fetch 2 ,mem_data_pre 
+5868 67e14901 store 2 ,mem_mouse_y_pre 
+5869 6fe106eb fetch 2 ,mem_data_current 
+
+mouse_data_y_store:
+586a 67e1465f store 2 ,mem_mouse_y 
+586b 20600000 rtn 
+
+mouse_drawing_optima_xy_offset_modify:
+586c 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+586d c41c8000 rtnbit0 mouse_enable_xy_offset 
+586e 44d14014 bpatch patch14_2 ,mem_patch14 
+586f 6fe148ff fetch 2 ,mem_mouse_x_pre 
+5870 67e106f0 store 2 ,mem_data_value 
+5871 2040587f call mouse_pre_xy_data_judge 
+5872 67e148ff store 2 ,mem_mouse_x_pre 
+5873 6fe1465d fetch 2 ,mem_mouse_x 
+5874 67e106f0 store 2 ,mem_data_value 
+5875 2040588d call mouse_current_xy_data_judge 
+5876 67e1465d store 2 ,mem_mouse_x 
+5877 6fe14901 fetch 2 ,mem_mouse_y_pre 
+5878 67e106f0 store 2 ,mem_data_value 
+5879 2040587f call mouse_pre_xy_data_judge 
+587a 67e14901 store 2 ,mem_mouse_y_pre 
+587b 6fe1465f fetch 2 ,mem_mouse_y 
+587c 67e106f0 store 2 ,mem_data_value 
+587d 2040588d call mouse_current_xy_data_judge 
+587e 2020586a branch mouse_data_y_store 
+
+mouse_pre_xy_data_judge:
+587f 6fe086f1 fetch 1 ,mem_data_value + 1 
+5880 203a5882 branch mouse_pre_xy_pdata_offset ,blank 
+5881 20205887 branch mouse_pre_xy_ndata_offset 
+
+mouse_pre_xy_pdata_offset:
+5882 6fe086f0 fetch 1 ,mem_data_value 
+5883 2040589a call mouse_pre_xy_get_0_4_times 
+5884 67e086f0 store 1 ,mem_data_value 
+
+mouse_xy_data_offset_new:
+5885 6fe106f0 fetch 2 ,mem_data_value 
+5886 20600000 rtn 
+
+mouse_pre_xy_ndata_offset:
+5887 6fe086f0 fetch 1 ,mem_data_value 
+5888 204058d4 call mouse_pdata_invert 
+5889 2040589a call mouse_pre_xy_get_0_4_times 
+588a 205a7dca call disable_blank ,blank 
+588b 204058d0 call mouse_pdata_get_new_value 
+588c 20205885 branch mouse_xy_data_offset_new 
+
+mouse_current_xy_data_judge:
+588d 6fe086f1 fetch 1 ,mem_data_value + 1 
+588e 203a5890 branch mouse_current_xy_pdata_offset ,blank 
+588f 20205894 branch mouse_current_xy_ndata_offset 
+
+mouse_current_xy_pdata_offset:
+5890 6fe086f0 fetch 1 ,mem_data_value 
+5891 2040589d call mouse_current_xy_get_0_6_times 
+5892 67e086f0 store 1 ,mem_data_value 
+5893 20205885 branch mouse_xy_data_offset_new 
+
+mouse_current_xy_ndata_offset:
+5894 6fe086f0 fetch 1 ,mem_data_value 
+5895 204058d4 call mouse_pdata_invert 
+5896 2040589d call mouse_current_xy_get_0_6_times 
+5897 205a7dca call disable_blank ,blank 
+5898 204058d0 call mouse_pdata_get_new_value 
+5899 20205885 branch mouse_xy_data_offset_new 
+
+mouse_pre_xy_get_0_4_times:
+589a 1feffe04 mul32 pdata ,4 ,pdata 
+589b 1fe6fc05 div pdata ,5 
+589c 2020589f branch mouse_div_end 
+
+mouse_current_xy_get_0_6_times:
+589d 1feffe0c mul32 pdata ,12 ,pdata 
+589e 1fe6fc0a div pdata ,10 
+
+mouse_div_end:
+589f 20407d64 call wait_div_end 
+58a0 1807fe00 quotient pdata 
+58a1 20600000 rtn 
+
+mouse_drawing_optima_data_x:
+58a2 6fe106e9 fetch 2 ,mem_data_pre 
+58a3 684906eb fetcht 2 ,mem_data_current 
+58a4 9840fe00 iadd temp ,pdata 
+58a5 6848c903 fetcht 1 ,mem_mouse_data_xtemp 
+58a6 9840fe00 iadd temp ,pdata 
+58a7 1fe10401 and pdata ,0x01 ,temp 
+58a8 6048c903 storet 1 ,mem_mouse_data_xtemp 
+58a9 202058b2 branch mouse_drawing_optima_data 
+
+mouse_drawing_optima_data_y:
+58aa 6fe106e9 fetch 2 ,mem_data_pre 
+58ab 684906eb fetcht 2 ,mem_data_current 
+58ac 9840fe00 iadd temp ,pdata 
+58ad 6848c904 fetcht 1 ,mem_mouse_data_ytemp 
+58ae 9840fe00 iadd temp ,pdata 
+58af 1fe10401 and pdata ,0x01 ,temp 
+58b0 6048c904 storet 1 ,mem_mouse_data_ytemp 
+58b1 202058b2 branch mouse_drawing_optima_data 
+
+mouse_drawing_optima_data:
+58b2 67e186ed store 3 ,mem_data_sum 
+58b3 2feffe10 isolate1 16 ,pdata 
+58b4 2020d8bc branch mouse_data_sum_overflow ,true 
+58b5 6fe086ee fetch 1 ,mem_data_sum + 1 
+58b6 c07fd8c3 beq 0xff ,mouse_data_sum_n 
+58b7 6fe086ed fetch 1 ,mem_data_sum 
+
+mouse_data_store_pre:
+58b8 1fe37e00 rshift pdata ,pdata 
+58b9 67e106e9 store 2 ,mem_data_pre 
+58ba 67e106eb store 2 ,mem_data_current 
+58bb 20600000 rtn 
+
+mouse_data_sum_overflow:
+58bc 6fe086ee fetch 1 ,mem_data_sum + 1 
+58bd c00058c0 beq 0 ,mouse_data_sum_overflow_p 
+58be 6fe186ed fetch 3 ,mem_data_sum 
+58bf 202058b8 branch mouse_data_store_pre 
+
+mouse_data_sum_overflow_p:
+58c0 7006ef00 jam 0 ,mem_data_sum + 2 
+58c1 6fe086ed fetch 1 ,mem_data_sum 
+58c2 202058b8 branch mouse_data_store_pre 
+
+mouse_data_sum_n:
+58c3 6fe086ed fetch 1 ,mem_data_sum 
+58c4 204058ce call mouse_pdata_get_half 
+58c5 67e086e9 store 1 ,mem_data_pre 
+58c6 67e086eb store 1 ,mem_data_current 
+58c7 203a58cc branch mouse_data_zero ,blank 
+58c8 580000ff setarg 0xff 
+
+mouse_data_set_direction:
+58c9 67e086ea store 1 ,mem_data_pre + 1 
+58ca 67e086ec store 1 ,mem_data_current + 1 
+58cb 20600000 rtn 
+
+mouse_data_zero:
+58cc 58000000 setarg 0 
+58cd 202058c9 branch mouse_data_set_direction 
+
+mouse_pdata_get_half:
+58ce 204058d4 call mouse_pdata_invert 
+58cf 1fe37e00 rshift pdata ,pdata 
+
+mouse_pdata_get_new_value:
+58d0 204058d5 call mouse_rega_in_out 
+58d1 1fe67e00 sub pdata ,0 ,pdata 
+58d2 67e086f0 store 1 ,mem_data_value 
+58d3 20600000 rtn 
+
+mouse_pdata_invert:
+58d4 1fe67e00 sub pdata ,0 ,pdata 
+
+mouse_rega_in_out:
+58d5 67e08662 store 1 ,mem_rega 
+58d6 6fe08662 fetch 1 ,mem_rega 
+58d7 20600000 rtn 
+
+mouse_disable_asm:
+58d8 7048fe00 jam 0 ,mem_mouse_asm_flag 
+58d9 20600000 rtn 
+
+mouse_enable_asm:
+58da 7048fe01 jam 1 ,mem_mouse_asm_flag 
+58db 20600000 rtn 
+
+mouse_pdata_greater_than_check:
+58dc 9a267c00 isub rega ,null 
+58dd 24217dca nbranch disable_blank ,positive 
+58de 9a467c00 isub regb ,null 
+58df 24217dca nbranch disable_blank ,positive 
+58e0 20207dcc branch enable_blank 
+
+mouse_data_less_than_check:
+58e1 9a267c00 isub rega ,null 
+58e2 24610000 nrtn positive 
+58e3 9a467c00 isub regb ,null 
+58e4 24610000 nrtn positive 
+58e5 20207dcc branch enable_blank 
+
+mouse_data_abs_check:
+58e6 6fe1465d fetch 2 ,mem_mouse_x 
+58e7 204058ed call mouse_data_abs 
+58e8 1fe22200 copy pdata ,rega 
+58e9 6fe1465f fetch 2 ,mem_mouse_y 
+58ea 204058ed call mouse_data_abs 
+58eb 1fe22400 copy pdata ,regb 
+58ec 20600000 rtn 
+
+mouse_data_abs:
+58ed 67e106eb store 2 ,mem_data_current 
+58ee 6fe086ec fetch 1 ,mem_data_current + 1 
+58ef c07fd8f3 beq 0xff ,mouse_data_reversal 
+58f0 6fe086eb fetch 1 ,mem_data_current 
+
+mouse_data_abs_store:
+58f1 1fe17eff and_into 0xff ,pdata 
+58f2 20600000 rtn 
+
+mouse_data_reversal:
+58f3 6fe106eb fetch 2 ,mem_data_current 
+58f4 1fe67e00 sub pdata ,0 ,pdata 
+58f5 202058f1 branch mouse_data_abs_store 
+
+mouse_24g_long_sleep_param_update_timer:
+58f6 da604636 arg mem_24g_long_sleep_param_update_timer ,regc 
+58f7 da4058f9 arg mouse_24g_long_sleep_normal_param ,regb 
+58f8 20203755 branch timer_single_step 
+
+mouse_24g_long_sleep_normal_param:
+58f9 6fe2462a fetch 4 ,mem_24g_long_sleep_set1 
+58fa 67e245c6 store 4 ,mem_24g_enter_hibernate 
+58fb 2020552c branch mouse_long_mult_init 
+
+mouse_24g_long_sleep_set:
+58fc 6fe0c738 fetch 1 ,mem_24g_long_sleep_set_level 
+58fd c0005904 beq 0x00 ,mouse_24g_long_sleep_set_30ms 
+58fe c000d906 beq 0x01 ,mouse_24g_long_sleep_set_50ms 
+58ff c0015901 beq 0x02 ,mouse_24g_long_sleep_set_80ms 
+5900 c001d908 beq 0x03 ,mouse_24g_long_sleep_set_100ms 
+
+mouse_24g_long_sleep_set_80ms:
+5901 580ea600 setarg 0x0ea600 
+
+mouse_24g_long_sleep_set_end:
+5902 67e2462a store 4 ,mem_24g_long_sleep_set1 
+5903 20600000 rtn 
+
+mouse_24g_long_sleep_set_30ms:
+5904 5805e740 setarg 0x05e740 
+5905 20205902 branch mouse_24g_long_sleep_set_end 
+
+mouse_24g_long_sleep_set_50ms:
+5906 580927c0 setarg 0x0927c0 
+5907 20205902 branch mouse_24g_long_sleep_set_end 
+
+mouse_24g_long_sleep_set_100ms:
+5908 58124f80 setarg 0x124f80 
+5909 20205902 branch mouse_24g_long_sleep_set_end 
+
+mouse_24g_hibernate_set:
+590a 44d1c014 bpatch patch14_3 ,mem_patch14 
+590b 704ac400 jam 0 ,mem_mouse_pair_flag 
+590c 70461700 jam 0 ,mem_24g_attempt_fail_flag 
+590d 20403620 call g24_transmit_next_packet 
+590e 5fffffff setarg -1 
+590f 67e445c6 store 8 ,mem_24g_enter_hibernate 
+5910 58000000 setarg 0 
+5911 67e3c65c store 7 ,mem_mouse_key 
+5912 70473701 jam 1 ,mem_24g_shutdown_flag 
+5913 20405303 call mouse_sensor_powerdown 
+5914 20404e42 call mouse_setgpio_hibernate 
+5915 20205af7 branch mouse_24g_long_sleep 
+
+mouse_wakeup_24g:
+5916 44d24014 bpatch patch14_4 ,mem_patch14 
+5917 6fe0c737 fetch 1 ,mem_24g_shutdown_flag 
+5918 245a591b ncall mouse_wakeup_24g_from_long_sleep ,blank 
+5919 70473700 jam 0 ,mem_24g_shutdown_flag 
+591a 20600000 rtn 
+
+mouse_wakeup_24g_from_long_sleep:
+591b 704ac401 jam 1 ,mem_mouse_pair_flag 
+591c 20405263 call mouse_init_sensor_wakeup 
+591d 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+591e c41e0000 rtnbit0 mouse_enable_wheel_wake_up_cancel 
+
+mouse_wheel_gpio_init:
+591f 6848c668 fetcht 1 ,mem_whee_a_data_gpio 
+5920 20404f0a call device_gpio_config_input_pu 
+5921 6848c669 fetcht 1 ,mem_whee_b_data_gpio 
+5922 20204f0a branch device_gpio_config_input_pu 
+
+mouse_24g_transmit_start:
+5923 20405927 call mouse_24g_fast_conn_mode_check 
+5924 6fe0c737 fetch 1 ,mem_24g_shutdown_flag 
+5925 243a5b02 nbranch mouse_24g_short_sleep ,blank 
+5926 202035e8 branch g24_transmit_start_next 
+
+mouse_24g_fast_conn_mode_check:
+5927 6fe245ff fetch 4 ,mem_24g_receiver_addr 
+5928 684a45fb fetcht 4 ,mem_24g_fast_conn_addr 
+5929 98467c00 isub temp ,null 
+592a 2022d92d branch mouse_soft_agc_enable ,zero 
+
+mouse_soft_agc_disable:
+592b 704143ff jam 0xff ,mem_gain_fix 
+592c 20600000 rtn 
+
+mouse_soft_agc_enable:
+592d 70414300 jam 0 ,mem_gain_fix 
+592e 704141aa jam tx_power_factory ,mem_tx_power 
+592f 20600000 rtn 
+
+device_store_normal_tx_power:
+5930 6fe0c141 fetch 1 ,mem_tx_power 
+5931 67e0c656 store 1 ,mem_device_normal_tx_power 
+5932 20600000 rtn 
+
+device_fetch_normal_tx_power:
+5933 6fe0c656 fetch 1 ,mem_device_normal_tx_power 
+5934 67e0c141 store 1 ,mem_tx_power 
+5935 20600000 rtn 
+
+mouse_24g_stop:
+5936 793f8026 set0 mark_24g ,mark 
+5937 70461300 jam state_24g_stop ,mem_24g_conn_sm 
+5938 d8e00001 arg mouse_24g_pairing_flag ,queue 
+5939 20205832 branch mouse_disable_function_flag 
+
+mouse_24g_start_mode:
+593a 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+593b c307d948 bbit0 mouse_enable_24g ,mouse_24g_mode_setup_error 
+593c 20405a69 call mouse_device_24g_pair_led_config 
+593d 20404e14 call mouse_wakeup_from_power_check 
+593e 20345988 branch mouse_24g_reconn_dongle_start ,user 
+593f 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5940 c298594d bbit1 mouse_enable_auto_24g_paring ,mouse_24g_reconn_general_dongle 
+5941 c318d94d bbit0 mouse_enable_24g_power_on_pairing ,mouse_24g_reconn_general_dongle 
+5942 204051a7 call mouse_key_check_once 
+5943 1a217e07 and rega ,0x07 ,pdata 
+5944 6848cabe fetcht 1 ,mem_mouse_commbination_key_24g 
+5945 98467c00 isub temp ,null 
+5946 2022d965 branch mouse_24g_start_pair_mode ,zero 
+5947 2020594d branch mouse_24g_reconn_general_dongle 
+
+mouse_24g_mode_setup_error:
+5948 6fe0c73f fetch 1 ,mem_reconn_times 
+5949 243a5836 nbranch mouse_polling_device ,blank 
+594a 20600000 rtn 
+
+mouse_24g_first_start_auto_pair_mode:
+594b 20404e14 call mouse_wakeup_from_power_check 
+594c 20345956 branch mouse_24g_first_start_reconn ,user 
+
+mouse_24g_reconn_general_dongle:
+594d 70467800 jam mode_24g_device ,mem_device_flag 
+594e 6fe1471a fetch 2 ,mem_device_24g_power_on_fast_conn_timer 
+594f 67e145f5 store 2 ,mem_24g_reconn_timeout 
+5950 7045f901 jam fast_conn_and_receiver ,mem_24g_reconn_type 
+5951 2020350a branch g24_reconn_start 
+
+mouse_24g_start_auto_pair:
+5952 6fe145ed fetch 2 ,mem_24g_pair_timeout_init 
+5953 67e145f5 store 2 ,mem_24g_reconn_timeout 
+5954 7045f904 jam pair_and_3_0_addr ,mem_24g_reconn_type 
+5955 2020350a branch g24_reconn_start 
+
+mouse_24g_first_start_reconn:
+5956 6fe0c678 fetch 1 ,mem_device_flag 
+5957 c0005988 beq mode_24g_device ,mouse_24g_reconn_dongle_start 
+5958 204053c1 call mouse_bluetooth_fast_conn_disable 
+
+mouse_24g_first_bluetooth_reconnect:
+5959 20405936 call mouse_24g_stop 
+595a 70467801 jam mode_bt_device1 ,mem_device_flag 
+595b 204067d5 call hid_device_select_reconn_device 
+595c 20204dfa branch mouse_le_fast_conn_judge 
+
+mouse_24g_first_bb_event_reconn_timeout:
+595d 20404e14 call mouse_wakeup_from_power_check 
+595e 20344e35 branch mouse_app_enter_hibernate ,user 
+595f 20205544 branch mouse_start_discovery 
+
+mouse_24g_first_store_reconn_info:
+5960 20404e14 call mouse_wakeup_from_power_check 
+5961 20740000 rtn user 
+5962 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5963 c29f5571 bbit1 mouse_enable_24g_first_auto_pairing ,mouse_store_device_info_delay 
+5964 20600000 rtn 
+
+mouse_24g_start_pair_mode:
+5965 20405a69 call mouse_device_24g_pair_led_config 
+5966 7045f900 jam 0 ,mem_24g_reconn_type 
+5967 d8e00001 arg mouse_24g_pairing_flag ,queue 
+5968 2040582e call mouse_enable_function_flag 
+5969 58000000 setarg 0 
+596a 67e145f5 store 2 ,mem_24g_reconn_timeout 
+596b 20405562 call mouse_stop_discovery 
+
+mouse_24g_pair_mode_check:
+596c 7045a001 jam type_ms ,mem_24g_data_type 
+596d 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+596e c30a326f bbit0 mouse_enable_keyboard ,g24_pair_start 
+596f 7045a002 jam type_kb ,mem_24g_data_type 
+5970 2020326f branch g24_pair_start 
+
+mouse_24g_attempt_fail:
+5971 2040592b call mouse_soft_agc_disable 
+5972 20405933 call device_fetch_normal_tx_power 
+5973 6fe0c617 fetch 1 ,mem_24g_attempt_fail_flag 
+5974 243a590a nbranch mouse_24g_hibernate_set ,blank 
+5975 6fe0c5f9 fetch 1 ,mem_24g_reconn_type 
+5976 c0015980 beq fast_conn_and_3_0_addr ,mouse_24g_fast_conn_attempt_fail 
+5977 c000d980 beq fast_conn_and_receiver ,mouse_24g_fast_conn_attempt_fail 
+5978 c002598c beq pair_and_3_0_addr ,mouse_24g_auto_pair_attempt_fail 
+5979 c001d991 beq receiver_and_3_0_addr ,mouse_reconn_dongle_attempt_fail 
+
+mouse_24g_attempt_fail_enter_hibernate:
+597a 20405936 call mouse_24g_stop 
+597b 6fe0c73f fetch 1 ,mem_reconn_times 
+597c 243a5836 nbranch mouse_polling_device ,blank 
+597d 6fe0c678 fetch 1 ,mem_device_flag 
+597e c0004e35 beq mode_24g_device ,mouse_app_enter_hibernate 
+597f 20600000 rtn 
+
+mouse_24g_fast_conn_attempt_fail:
+5980 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5981 c29f5952 bbit1 mouse_enable_24g_first_auto_pairing ,mouse_24g_start_auto_pair 
+5982 c2985952 bbit1 mouse_enable_auto_24g_paring ,mouse_24g_start_auto_pair 
+5983 c31d5988 bbit0 mouse_enable_24g_auto_pair_nerver_been_paired ,mouse_24g_reconn_dongle_start 
+5984 6fe246a3 fetch 4 ,mem_device_24g_addr 
+5985 684a46f8 fetcht 4 ,mem_device_compare_addr 
+5986 98467c00 isub temp ,null 
+5987 2022d965 branch mouse_24g_start_pair_mode ,zero 
+
+mouse_24g_reconn_dongle_start:
+5988 6fe145f3 fetch 2 ,mem_24g_reconn_timeout_init 
+5989 67e145f5 store 2 ,mem_24g_reconn_timeout 
+598a 7045f903 jam receiver_and_3_0_addr ,mem_24g_reconn_type 
+598b 2020350a branch g24_reconn_start 
+
+mouse_24g_auto_pair_attempt_fail:
+598c 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+598d c31f597a bbit0 mouse_enable_24g_first_auto_pairing ,mouse_24g_attempt_fail_enter_hibernate 
+598e 6fe0c716 fetch 1 ,mem_device_number 
+598f c000d97a beq 1 ,mouse_24g_attempt_fail_enter_hibernate 
+5990 20205959 branch mouse_24g_first_bluetooth_reconnect 
+
+mouse_reconn_dongle_attempt_fail:
+5991 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5992 c31f597a bbit0 mouse_enable_24g_first_auto_pairing ,mouse_24g_attempt_fail_enter_hibernate 
+5993 c288d97a bbit1 mouse_enable_eeprom ,mouse_24g_attempt_fail_enter_hibernate 
+5994 c288597a bbit1 mouse_enable_flash ,mouse_24g_attempt_fail_enter_hibernate 
+5995 c289597a bbit1 mouse_enable_otp ,mouse_24g_attempt_fail_enter_hibernate 
+5996 20205952 branch mouse_24g_start_auto_pair 
+
+mouse_24g_attempt_success:
+5997 6fe245a6 fetch 4 ,mem_24g_addr 
+5998 67e245ff store 4 ,mem_24g_receiver_addr 
+5999 67e246a3 store 4 ,mem_device_24g_addr 
+599a 20403530 call g24_ch_syncword_crc8_init 
+599b 20405535 call mouse_no_data_timer_init 
+599c 20405a62 call mouse_device_poweron_led_config 
+599d 2040538d call mouse_init_sensor_reset 
+599e 70473d00 jam 0 ,mem_mouse_long_mult_flag 
+599f 70461300 jam 0 ,mem_24g_conn_sm 
+59a0 7045f900 jam 0 ,mem_24g_reconn_type 
+59a1 6fe245ff fetch 4 ,mem_24g_receiver_addr 
+59a2 684a45fb fetcht 4 ,mem_24g_fast_conn_addr 
+59a3 98467c00 isub temp ,null 
+59a4 20628000 rtn zero 
+59a5 2040592b call mouse_soft_agc_disable 
+59a6 20405933 call device_fetch_normal_tx_power 
+59a7 20205960 branch mouse_24g_first_store_reconn_info 
+
+mouse_24g_pairing_complete:
+59a8 2040592b call mouse_soft_agc_disable 
+59a9 20405933 call device_fetch_normal_tx_power 
+59aa 2040538d call mouse_init_sensor_reset 
+59ab 2040539e call mouse_read_sensor_common 
+59ac 20405a62 call mouse_device_poweron_led_config 
+59ad 20405535 call mouse_no_data_timer_init 
+59ae d8e00001 arg mouse_24g_pairing_flag ,queue 
+59af 20405832 call mouse_disable_function_flag 
+59b0 58000000 setarg 0 
+59b1 67e145ef store 2 ,mem_24g_pair_timeout 
+59b2 67e145f5 store 2 ,mem_24g_reconn_timeout 
+59b3 67e0c613 store 1 ,mem_24g_conn_sm 
+59b4 67e0c8fd store 1 ,mem_mouse_move_flag 
+59b5 67e0c5f9 store 1 ,mem_24g_reconn_type 
+59b6 6fe245a6 fetch 4 ,mem_24g_addr 
+59b7 67e245ff store 4 ,mem_24g_receiver_addr 
+59b8 67e246a3 store 4 ,mem_device_24g_addr 
+59b9 20205571 branch mouse_store_device_info_delay 
+
+mouse_24g_short_sleep_clear_wake:
+59ba 20407de6 call clear_wake 
+59bb 202023e1 branch lpm_write_gpio_wakeup 
+
+mouse_24g_package_data:
+59bc 44d2c014 bpatch patch14_5 ,mem_patch14 
+59bd c6930000 rtnmark0 mark_24g 
+59be 20404f26 call mouse_motion 
+59bf 24740000 nrtn user 
+59c0 6fe0c73b fetch 1 ,mem_mouse_24g_long_sleep_flag 
+59c1 70473b00 jam 0 ,mem_mouse_24g_long_sleep_flag 
+59c2 245a59ba ncall mouse_24g_short_sleep_clear_wake ,blank 
+59c3 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+59c4 c30a59c7 bbit0 mouse_enable_keyboard ,mouse_24g_mouse_package_data 
+59c5 6fe0c72b fetch 1 ,mem_customer_key 
+59c6 243a59dc nbranch mouse_24g_keyboard_package_data ,blank 
+
+mouse_24g_mouse_package_data:
+59c7 2040538e call mouse_data_xy_release 
+59c8 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+59c9 c280d9d6 bbit1 1 ,mouse_24g_mouse_package_data_now 
+59ca 6848c531 fetcht 1 ,mem_24g_txbuf + 1 
+59cb 6fe0c65c fetch 1 ,mem_mouse_key 
+59cc 9841fe00 ior temp ,pdata 
+59cd 67e0c65c store 1 ,mem_mouse_key 
+59ce 6848c536 fetcht 1 ,mem_24g_txbuf + 6 
+59cf 6fe0c661 fetch 1 ,mem_mouse_z 
+59d0 9840fe00 iadd temp ,pdata 
+59d1 67e0c661 store 1 ,mem_mouse_z 
+59d2 6848c537 fetcht 1 ,mem_24g_txbuf + 7 
+59d3 6fe0c662 fetch 1 ,mem_mouse_tz 
+59d4 9840fe00 iadd temp ,pdata 
+59d5 67e0c662 store 1 ,mem_mouse_tz 
+
+mouse_24g_mouse_package_data_now:
+59d6 7045a001 jam type_ms ,mem_24g_data_type 
+59d7 da200007 arg 7 ,rega 
+59d8 da40465c arg mem_mouse_key ,regb 
+59d9 6fe14661 fetch 2 ,mem_mouse_z 
+59da 207a0000 rtn blank 
+59db 202036bb branch g24_transmit_by_interrupt_enable 
+
+mouse_24g_keyboard_package_data:
+59dc 7045a002 jam type_kb ,mem_24g_data_type 
+59dd da200009 arg 9 ,rega 
+59de 20206852 branch hid_device_24g_keyboard_package_data_set 
+
+mouse_g24_retransmit:
+59df 6fe0c752 fetch 1 ,mem_device_need_soft_reset 
+59e0 247a0000 nrtn blank 
+59e1 204059e3 call mouse_g24_retransmit_100ms_timer 
+59e2 2020363b branch g24_retransmit0 
+
+mouse_g24_retransmit_100ms_timer:
+59e3 d8e0000c arg 12 ,queue 
+59e4 20407cf1 call timer_check 
+59e5 247a0000 nrtn blank 
+
+mouse_g24_retransmit_100ms_timer_next:
+59e6 20405776 call mouse_retransmit_select_device_by_pb_button 
+59e7 204054c9 call mouse_retransmit_commbination_key_check 
+59e8 204059ed call mouse_dpi_check_once 
+59e9 20405050 call mouse_dpi_key_check_long_press 
+
+mouse_g24_retransmit_100ms_timer_init:
+59ea d8e0000c arg 12 ,queue 
+59eb 580000a0 setarg 160 
+59ec 20207ce3 branch timer_init 
+
+mouse_dpi_check_once:
+59ed 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+59ee c4140000 rtnbit0 mouse_enable_select_device_by_dpi_button 
+59ef 20204fdb branch mouse_dpi_check 
+
+mouse_24g_before_lpm_sleep:
+59f0 20406f4b call lpm_puchk_set_check 
+59f1 202068c4 branch hid_device_before_lpm_set 
+
+mouse_logo_led_on_timer:
+59f2 6fe0c8a1 fetch 1 ,mem_mouse_logo_led_gpio 
+59f3 c17f8000 rtneq gpio_disable 
+59f4 6fe14741 fetch 2 ,mem_device_no_data_timer 
+59f5 207a0000 rtn blank 
+59f6 6fe1471e fetch 2 ,mem_device_no_data_timeout 
+59f7 68494741 fetcht 2 ,mem_device_no_data_timer 
+59f8 98460400 isub temp ,temp 
+59f9 6fe148bb fetch 2 ,mem_mouse_logo_led_on_time_init 
+59fa 98467e00 isub temp ,pdata 
+59fb 202159fe branch mouse_logo_led_on ,positive 
+
+mouse_logo_led_off:
+59fc 6848c8a1 fetcht 1 ,mem_mouse_logo_led_gpio 
+59fd 20205ab6 branch mouse_led_off 
+
+mouse_logo_led_on:
+59fe 6848c8a1 fetcht 1 ,mem_mouse_logo_led_gpio 
+59ff 20205ab5 branch mouse_led_on 
+
+mouse_dpi_led_blink_delay_timer:
+5a00 da6048bd arg mem_mouse_dpi_led_delay_count ,regc 
+5a01 da405a03 arg mouse_dpi_led_blink_init ,regb 
+5a02 20203755 branch timer_single_step 
+
+mouse_dpi_led_blink_init:
+5a03 44d34014 bpatch patch14_6 ,mem_patch14 
+5a04 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5a05 c28e5a0b bbit1 mouse_enable_dpi_level_4 ,mouse_dpi_led_blink_set_4_level 
+
+mouse_dpi_led_blink_set_3_level:
+5a06 6fe0c6a2 fetch 1 ,mem_mouse_dpi 
+5a07 c0005a13 beq mouse_dpi_level1 ,mouse_dpi_level_2_blink 
+5a08 c000da15 beq mouse_dpi_level2 ,mouse_dpi_level_3_blink 
+5a09 c0015a11 beq mouse_dpi_level3 ,mouse_dpi_level_1_blink 
+5a0a 20600000 rtn 
+
+mouse_dpi_led_blink_set_4_level:
+5a0b 6fe0c6a2 fetch 1 ,mem_mouse_dpi 
+5a0c c0005a15 beq mouse_dpi_level1 ,mouse_dpi_level_3_blink 
+5a0d c000da17 beq mouse_dpi_level2 ,mouse_dpi_level_4_blink 
+5a0e c0015a11 beq mouse_dpi_level3 ,mouse_dpi_level_1_blink 
+5a0f c001da13 beq mouse_dpi_level4 ,mouse_dpi_level_2_blink 
+5a10 20600000 rtn 
+
+mouse_dpi_level_1_blink:
+5a11 58000002 setarg 2 
+5a12 20205a19 branch mouse_multi_dpi_led_blink_enable 
+
+mouse_dpi_level_2_blink:
+5a13 58000004 setarg 4 
+5a14 20205a19 branch mouse_multi_dpi_led_blink_enable 
+
+mouse_dpi_level_3_blink:
+5a15 58000006 setarg 6 
+5a16 20205a19 branch mouse_multi_dpi_led_blink_enable 
+
+mouse_dpi_level_4_blink:
+5a17 58000008 setarg 8 
+5a18 20205a19 branch mouse_multi_dpi_led_blink_enable 
+
+mouse_multi_dpi_led_blink_enable:
+5a19 67e0c8b8 store 1 ,mem_mouse_multi_led_blink_count 
+5a1a 7048ab04 jam 4 ,mem_mouse_multi_led_blink_type 
+5a1b 20405a59 call mouse_multi_dpi_led_blink_timer_init 
+5a1c 7048a901 jam multi_led_blink ,mem_mouse_multi_led_type 
+5a1d 20205a66 branch mouse_multi_led_enable 
+
+mouse_dpi_led_blink_delay:
+5a1e 6fe0cac4 fetch 1 ,mem_mouse_pair_flag 
+5a1f 207a0000 rtn blank 
+5a20 6fe0c8be fetch 1 ,mem_mouse_dpi_led_delay_count_init 
+5a21 203a5a03 branch mouse_dpi_led_blink_init ,blank 
+5a22 67e0c8bd store 1 ,mem_mouse_dpi_led_delay_count 
+5a23 20600000 rtn 
+
+mouse_check_dpi_blink:
+5a24 78547c00 disable user 
+5a25 6fe0c8ab fetch 1 ,mem_mouse_multi_led_blink_type 
+5a26 1fe67c04 sub pdata ,4 ,null 
+5a27 24628000 nrtn zero 
+5a28 20207dbc branch enable_user 
+
+mouse_low_voltage_led_timer:
+5a29 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5a2a c4118000 rtnbit0 mouse_enable_low_led 
+5a2b c4020000 rtnbit0 mouse_low_voltage_flag 
+5a2c 6fe0cac4 fetch 1 ,mem_mouse_pair_flag 
+5a2d 207a0000 rtn blank 
+5a2e 20405a24 call mouse_check_dpi_blink 
+5a2f 20740000 rtn user 
+5a30 6fe0c8ba fetch 1 ,mem_mouse_multi_low_led_blink_count 
+5a31 203a5a47 branch mouse_low_led_blink_count_init_judge ,blank 
+
+mouse_low_led_blink_timer:
+5a32 6848c64d fetcht 1 ,mem_adc_low_volatage_led_timer_count 
+5a33 18408401 increase 1 ,temp 
+5a34 6048c64d storet 1 ,mem_adc_low_volatage_led_timer_count 
+5a35 6fe0c8b4 fetch 1 ,mem_mouse_low_led_blink_timer 
+5a36 98467c00 isub temp ,null 
+5a37 24415a3f ncall mouse_low_led_timer_count_clean ,positive 
+5a38 6fe0c8b5 fetch 1 ,mem_mouse_low_led_blink_half_timer 
+5a39 98467c00 isub temp ,null 
+5a3a 24215a43 nbranch mouse_low_voltage_led_off_judge ,positive 
+
+mouse_low_voltage_led_on_judge:
+5a3b 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5a3c c2925aaa bbit1 mouse_enable_low_for_led ,mouse_device_led_on 
+
+mouse_low_voltage_led_on:
+5a3d 6848c8a5 fetcht 1 ,mem_mouse_low_voltage_alarm_gpio 
+5a3e 20205ab5 branch mouse_led_on 
+
+mouse_low_led_timer_count_clean:
+5a3f 70464d01 jam 1 ,mem_adc_low_volatage_led_timer_count 
+5a40 6fe0c8ba fetch 1 ,mem_mouse_multi_low_led_blink_count 
+5a41 1fe0ffff increase -1 ,pdata 
+5a42 67e0c8ba store 1 ,mem_mouse_multi_low_led_blink_count 
+
+mouse_low_voltage_led_off_judge:
+5a43 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5a44 c2925abc bbit1 mouse_enable_low_for_led ,mouse_device_led_off 
+
+mouse_low_voltage_led_off:
+5a45 6848c8a5 fetcht 1 ,mem_mouse_low_voltage_alarm_gpio 
+5a46 20205ab6 branch mouse_led_off 
+
+mouse_low_led_blink_count_init_judge:
+5a47 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5a48 c2915a43 bbit1 mouse_enable_low_led_blink_limit ,mouse_low_voltage_led_off_judge 
+5a49 20405a52 call mouse_multi_low_led_blink_count_init 
+5a4a 20205a32 branch mouse_low_led_blink_timer 
+
+mouse_device_multi_led_parm_init:
+5a4b 7048a800 jam 0 ,mem_mouse_multi_led_blink_enable 
+5a4c 20405ace call mouse_device_multi_led_all_off 
+5a4d 7048ab00 jam 0 ,mem_mouse_multi_led_blink_type 
+5a4e 6fe0c8b4 fetch 1 ,mem_mouse_low_led_blink_timer 
+5a4f 1fe37e00 rshift pdata ,pdata 
+5a50 67e0c8b5 store 1 ,mem_mouse_low_led_blink_half_timer 
+5a51 20600000 rtn 
+
+mouse_multi_low_led_blink_count_init:
+5a52 6fe0c8b9 fetch 1 ,mem_mouse_multi_lowled_blink_count_init 
+5a53 67e0c8ba store 1 ,mem_mouse_multi_low_led_blink_count 
+5a54 20600000 rtn 
+
+mouse_multi_led_blink_timer_init:
+5a55 6fe0c8ab fetch 1 ,mem_mouse_multi_led_blink_type 
+5a56 c000da5c beq 1 ,mouse_device_24g_led_blink_timer_init 
+5a57 c0015a5e beq 2 ,mouse_device_le_discovery_led_blink_timer_init 
+5a58 c001da60 beq 3 ,mouse_device_le_reconn_led_blink_timer_init 
+
+mouse_multi_dpi_led_blink_timer_init:
+5a59 6fe0c8b2 fetch 1 ,mem_mouse_dpi_led_blink_timer_init 
+
+mouse_store_multi_led_blink_timer:
+5a5a 67e0c8b3 store 1 ,mem_mouse_multi_led_blink_timer 
+5a5b 20600000 rtn 
+
+mouse_device_24g_led_blink_timer_init:
+5a5c 6fe0c8af fetch 1 ,mem_mouse_multi_24gled_blink_timer_init 
+5a5d 20205a5a branch mouse_store_multi_led_blink_timer 
+
+mouse_device_le_discovery_led_blink_timer_init:
+5a5e 6fe0c8b0 fetch 1 ,mem_mouse_multi_le_discovery_blink_timer_init 
+5a5f 20205a5a branch mouse_store_multi_led_blink_timer 
+
+mouse_device_le_reconn_led_blink_timer_init:
+5a60 6fe0c8b1 fetch 1 ,mem_mouse_multi_le_reconn_blink_timer_init 
+5a61 20205a5a branch mouse_store_multi_led_blink_timer 
+
+mouse_device_poweron_led_config:
+5a62 44d3c014 bpatch patch14_7 ,mem_patch14 
+5a63 6fe0c8ad fetch 1 ,mem_mouse_multi_led_powon_timer_init 
+5a64 67e0c8ae store 1 ,mem_mouse_multi_led_powon_timer 
+5a65 7048a900 jam multi_led_on ,mem_mouse_multi_led_type 
+
+mouse_multi_led_enable:
+5a66 7048aa00 jam off ,mem_mouse_multi_led_state 
+5a67 7048a801 jam on ,mem_mouse_multi_led_blink_enable 
+5a68 20600000 rtn 
+
+mouse_device_24g_pair_led_config:
+5a69 44d44015 bpatch patch15_0 ,mem_patch15 
+5a6a 20405a7c call mouse_multi_led_blink_enable_init 
+5a6b 7048ab01 jam 1 ,mem_mouse_multi_led_blink_type 
+5a6c 6fe0c8ac fetch 1 ,mem_mouse_le_reconn_blink_limit 
+5a6d 207a0000 rtn blank 
+5a6e 6fe0c8b6 fetch 1 ,mem_mouse_multi_24gled_blink_count_init 
+5a6f 20205a78 branch mouse_device_led_blink_count_init 
+
+mouse_device_le_reconn_led_config:
+5a70 4769c03a bpatchx patch3a_3 ,mem_patch3a 
+5a71 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5a72 c4108000 rtnbit0 mouse_enable_bt_reconn_led_effect 
+5a73 20405a7c call mouse_multi_led_blink_enable_init 
+5a74 7048ab03 jam 3 ,mem_mouse_multi_led_blink_type 
+5a75 6fe0c8ac fetch 1 ,mem_mouse_le_reconn_blink_limit 
+5a76 207a0000 rtn blank 
+5a77 6fe0c8b7 fetch 1 ,mem_mouse_multi_le_reconn_blink_count_init 
+
+mouse_device_led_blink_count_init:
+5a78 67e0c8b8 store 1 ,mem_mouse_multi_led_blink_count 
+5a79 20600000 rtn 
+
+mouse_device_discovery_led_config:
+5a7a 7048ac00 jam 0 ,mem_mouse_le_reconn_blink_limit 
+5a7b 7048ab02 jam 2 ,mem_mouse_multi_led_blink_type 
+
+mouse_multi_led_blink_enable_init:
+5a7c 476a403a bpatchx patch3a_4 ,mem_patch3a 
+5a7d 7048b30a jam 0x0a ,mem_mouse_multi_led_blink_timer 
+5a7e 7048a801 jam 1 ,mem_mouse_multi_led_blink_enable 
+5a7f 7048a901 jam multi_led_blink ,mem_mouse_multi_led_type 
+5a80 20205aa9 branch mouse_device_multi_led_on 
+
+mouse_led_multi_timer:
+5a81 6fe0c8a8 fetch 1 ,mem_mouse_multi_led_blink_enable 
+5a82 207a0000 rtn blank 
+5a83 6fe0c8a9 fetch 1 ,mem_mouse_multi_led_type 
+5a84 c000da8e beq multi_led_blink ,mouse_multi_led_type_blink 
+
+mouse_device_multi_led_type_on:
+5a85 6fe0c8ae fetch 1 ,mem_mouse_multi_led_powon_timer 
+5a86 203a5a8a branch mouse_device_poweron_led_off ,blank 
+5a87 1fe0ffff increase -1 ,pdata 
+5a88 67e0c8ae store 1 ,mem_mouse_multi_led_powon_timer 
+5a89 20205aaa branch mouse_device_led_on 
+
+mouse_device_poweron_led_off:
+5a8a 7048a800 jam 0 ,mem_mouse_multi_led_blink_enable 
+5a8b 704ac401 jam 1 ,mem_mouse_pair_flag 
+5a8c 20405a52 call mouse_multi_low_led_blink_count_init 
+5a8d 20205abc branch mouse_device_led_off 
+
+mouse_multi_led_type_blink:
+5a8e 44d4c015 bpatch patch15_1 ,mem_patch15 
+5a8f 6fe0c8ab fetch 1 ,mem_mouse_multi_led_blink_type 
+5a90 207a0000 rtn blank 
+5a91 c0025a96 beq 4 ,mouse_device_led_blink_limit 
+5a92 20205a93 branch mouse_device_led_blink_judge 
+
+mouse_device_led_blink_judge:
+5a93 6fe0c8ac fetch 1 ,mem_mouse_le_reconn_blink_limit 
+5a94 c000da96 beq 1 ,mouse_device_led_blink_limit 
+5a95 20205a98 branch mouse_multi_led_type_blink_next 
+
+mouse_device_led_blink_limit:
+5a96 6fe0c8b8 fetch 1 ,mem_mouse_multi_led_blink_count 
+5a97 203a5ab7 branch mouse_multi_led_off_judge ,blank 
+
+mouse_multi_led_type_blink_next:
+5a98 da6048b3 arg mem_mouse_multi_led_blink_timer ,regc 
+5a99 da405a9b arg mouse_multi_led_type_blink_start ,regb 
+5a9a 20203755 branch timer_single_step 
+
+mouse_multi_led_type_blink_start:
+5a9b 6fe0c8ab fetch 1 ,mem_mouse_multi_led_blink_type 
+5a9c c0025aa3 beq 4 ,mouse_multi_led_blink_count_decrease 
+5a9d 6fe0c8ac fetch 1 ,mem_mouse_le_reconn_blink_limit 
+5a9e c000daa3 beq 1 ,mouse_multi_led_blink_count_decrease 
+
+mouse_multi_led_blink:
+5a9f 20405a55 call mouse_multi_led_blink_timer_init 
+5aa0 6fe0c8aa fetch 1 ,mem_mouse_multi_led_state 
+5aa1 c000dab9 beq on ,mouse_multi_led_off_judge_next 
+5aa2 20205aa7 branch mouse_multi_led_on_judge 
+
+mouse_multi_led_blink_count_decrease:
+5aa3 6fe0c8b8 fetch 1 ,mem_mouse_multi_led_blink_count 
+5aa4 1fe0ffff increase -1 ,pdata 
+5aa5 67e0c8b8 store 1 ,mem_mouse_multi_led_blink_count 
+5aa6 20205a9f branch mouse_multi_led_blink 
+
+mouse_multi_led_on_judge:
+5aa7 6fe0c8ab fetch 1 ,mem_mouse_multi_led_blink_type 
+5aa8 c0025ad8 beq 4 ,mouse_multi_dpi_led_on_judge 
+
+mouse_device_multi_led_on:
+5aa9 7048aa01 jam on ,mem_mouse_multi_led_state 
+
+mouse_device_led_on:
+5aaa 44d54015 bpatch patch15_2 ,mem_patch15 
+5aab 6fe0c678 fetch 1 ,mem_device_flag 
+5aac c0005ab0 beq mode_24g_device ,mouse_device_24g_led_on 
+5aad c000dab2 beq mode_bt_device1 ,mouse_device_bt1_led_on 
+5aae c0015ab4 beq mode_bt_device2 ,mouse_device_bt2_led_on 
+5aaf 20600000 rtn 
+
+mouse_device_24g_led_on:
+5ab0 6848c8a2 fetcht 1 ,mem_mouse_1io2led_multi_24gled 
+5ab1 20205ab5 branch mouse_led_on 
+
+mouse_device_bt1_led_on:
+5ab2 6848c8a3 fetcht 1 ,mem_mouse_1io2led_multi_bt1led 
+5ab3 20205ab5 branch mouse_led_on 
+
+mouse_device_bt2_led_on:
+5ab4 6848c8a4 fetcht 1 ,mem_mouse_1io2led_multi_bt2led 
+
+mouse_led_on:
+5ab5 20206ef1 branch gpio_out_active 
+
+mouse_led_off:
+5ab6 20206eed branch gpio_out_inactive 
+
+mouse_multi_led_off_judge:
+5ab7 7048a800 jam 0 ,mem_mouse_multi_led_blink_enable 
+5ab8 7048ab00 jam 0 ,mem_mouse_multi_led_blink_type 
+
+mouse_multi_led_off_judge_next:
+5ab9 6fe0c8ab fetch 1 ,mem_mouse_multi_led_blink_type 
+5aba c0025ad3 beq 4 ,mouse_multi_dpi_led_off_judge 
+
+mouse_device_multi_led_off:
+5abb 7048aa00 jam off ,mem_mouse_multi_led_state 
+
+mouse_device_led_off:
+5abc 44d5c015 bpatch patch15_3 ,mem_patch15 
+5abd 6fe0c678 fetch 1 ,mem_device_flag 
+5abe c0005ac2 beq mode_24g_device ,mouse_device_24g_led_off 
+5abf c000dac6 beq mode_bt_device1 ,mouse_device_bt1_led_off 
+5ac0 c0015aca beq mode_bt_device2 ,mouse_device_bt2_led_off 
+5ac1 20600000 rtn 
+
+mouse_device_24g_led_off:
+5ac2 6848c8a2 fetcht 1 ,mem_mouse_1io2led_multi_24gled 
+5ac3 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5ac4 c3105ab6 bbit0 mouse_enable_1io2led ,mouse_led_off 
+5ac5 20206f05 branch gpio_set_analog 
+
+mouse_device_bt1_led_off:
+5ac6 6848c8a3 fetcht 1 ,mem_mouse_1io2led_multi_bt1led 
+5ac7 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5ac8 c3105ab6 bbit0 mouse_enable_1io2led ,mouse_led_off 
+5ac9 20206f05 branch gpio_set_analog 
+
+mouse_device_bt2_led_off:
+5aca 6848c8a4 fetcht 1 ,mem_mouse_1io2led_multi_bt2led 
+5acb 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5acc c3105ab6 bbit0 mouse_enable_1io2led ,mouse_led_off 
+5acd 20206f05 branch gpio_set_analog 
+
+mouse_device_multi_led_all_off:
+5ace 20405ac2 call mouse_device_24g_led_off 
+5acf 20405ac6 call mouse_device_bt1_led_off 
+5ad0 20405aca call mouse_device_bt2_led_off 
+5ad1 20405a43 call mouse_low_voltage_led_off_judge 
+5ad2 20205ad3 branch mouse_multi_dpi_led_off_judge 
+
+mouse_multi_dpi_led_off_judge:
+5ad3 7048aa00 jam off ,mem_mouse_multi_led_state 
+5ad4 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5ad5 c292dabb bbit1 mouse_enable_dpi_for_led ,mouse_device_multi_led_off 
+
+mouse_multi_dpi_led_off:
+5ad6 6848c8a6 fetcht 1 ,mem_mouse_dpi_gpio 
+5ad7 20205ab6 branch mouse_led_off 
+
+mouse_multi_dpi_led_on_judge:
+5ad8 7048aa01 jam on ,mem_mouse_multi_led_state 
+5ad9 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5ada c292daa9 bbit1 mouse_enable_dpi_for_led ,mouse_device_multi_led_on 
+
+mouse_multi_dpi_led_on:
+5adb 6848c8a6 fetcht 1 ,mem_mouse_dpi_gpio 
+5adc 20205ab5 branch mouse_led_on 
+
+mouse_low_voltage_led_no_enter_lpm:
+5add 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5ade c4020000 rtnbit0 mouse_low_voltage_flag 
+5adf 6fe0c64d fetch 1 ,mem_adc_low_volatage_led_timer_count 
+5ae0 6848c8b5 fetcht 1 ,mem_mouse_low_led_blink_half_timer 
+5ae1 1fe67c02 sub pdata ,temp ,null 
+5ae2 20215ae9 branch mouse_lpm_mode_clear ,positive 
+
+mouse_low_voltage_led_no_enter_lpm_next:
+5ae3 6fe0c678 fetch 1 ,mem_device_flag 
+5ae4 c0005ae6 beq mode_24g_device ,g24_transmit_by_interrupt_exit_check 
+5ae5 20206820 branch hid_device_enable_lpm 
+
+g24_transmit_by_interrupt_exit_check:
+5ae6 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5ae7 c38c0000 rtnbit1 mouse_enable_24g_250hz 
+5ae8 202036aa branch g24_transmit_by_interrupt_exit 
+
+mouse_lpm_mode_clear:
+5ae9 6fe0c678 fetch 1 ,mem_device_flag 
+5aea c00036bb beq mode_24g_device ,g24_transmit_by_interrupt_enable 
+5aeb 20206822 branch hid_device_disable_lpm 
+
+mouse_store_signal_rssi:
+5aec 6fe08009 fetch 1 ,mem_rssi 
+5aed 202035a3 branch rssi_signal 
+
+mouse_le_transmit:
+5aee 20405aec call mouse_store_signal_rssi 
+5aef 202036c8 branch power_ctrl_start 
+
+mouse_set_lpm_mult:
+5af0 6fe14500 fetch 2 ,mem_ui_state_map 
+5af1 c4048000 rtnbit0 ui_state_ble_connected 
+
+mouse_le_set_lpm_mult:
+5af2 6fe0c882 fetch 1 ,mem_le_connect_status_flag 
+5af3 2fe00603 compare 3 ,pdata ,3 
+5af4 2420fdca nbranch disable_blank ,true 
+5af5 204037a0 call app_lpm_mult_enable 
+5af6 20207dcc branch enable_blank 
+
+mouse_24g_long_sleep:
+5af7 44d64015 bpatch patch15_4 ,mem_patch15 
+5af8 20403694 call g24_lpm_wait 
+5af9 24740000 nrtn user 
+5afa 70473b01 jam 1 ,mem_mouse_24g_long_sleep_flag 
+5afb 2040369e call g24_setgpio_lpm_before 
+5afc 7048f100 jam 0 ,mem_mouse_24g_sleep_miss 
+5afd 20405b7f call mouse_24g_send_time_long_wake 
+5afe 6fe0c737 fetch 1 ,mem_24g_shutdown_flag 
+5aff 245a4e42 ncall mouse_setgpio_hibernate ,blank 
+5b00 6fe445c6 fetch 8 ,mem_24g_enter_hibernate 
+5b01 202035fa branch g24_long_seep2 
+
+mouse_24g_short_sleep:
+5b02 6fe0c8fa fetch 1 ,mem_mouse_sleep_deal_type 
+5b03 203a35ee branch g24_short_sleep ,blank 
+5b04 20403694 call g24_lpm_wait 
+5b05 24740000 nrtn user 
+5b06 6fe0c8f1 fetch 1 ,mem_mouse_24g_sleep_miss 
+5b07 7048f100 jam 0 ,mem_mouse_24g_sleep_miss 
+5b08 1fe67c00 sub pdata ,0 ,null 
+5b09 2422db0f nbranch mouse_24g_short_sleep_last_miss ,zero 
+5b0a 68494639 fetcht 2 ,mem_24g_retransmit 
+5b0b 18467c00 sub temp ,0 ,null 
+5b0c 2022db22 branch mouse_24g_short_sleep_default ,zero 
+5b0d 6fe248e6 fetch 4 ,mem_mouse_24g_tx_time_last_delt 
+5b0e 203a5b22 branch mouse_24g_short_sleep_default ,blank 
+
+mouse_24g_short_sleep_last_miss:
+5b0f 684a48f6 fetcht 4 ,mem_mouse_24g_sleep_miss_temp 
+5b10 284ffe1f isolate1 31 ,temp 
+5b11 2020db2e branch mouse_24g_sub_miss_temp ,true 
+5b12 6fe248e6 fetch 4 ,mem_mouse_24g_tx_time_last_delt 
+5b13 9840fe00 iadd temp ,pdata 
+
+mouse_24g_short_sleep_notify:
+5b14 684a48cc fetcht 4 ,mem_mouse_24g_tsniff 
+5b15 98460400 isub temp ,temp 
+5b16 604a48f6 storet 4 ,mem_mouse_24g_sleep_miss_temp 
+5b17 24215b25 nbranch mouse_24g_short_sleep_long ,positive 
+5b18 6fe1c61f fetch 3 ,mem_24g_short_sleep_set 
+5b19 98467e00 isub temp ,pdata 
+5b1a 24215b2c nbranch mouse_24g_short_sleep_2 ,positive 
+5b1b d8400600 arg 0x600 ,temp 
+5b1c 98467c00 isub temp ,null 
+5b1d 24215b2c nbranch mouse_24g_short_sleep_2 ,positive 
+
+mouse_24g_short_sleep2:
+5b1e 7048f0fa jam 250 ,mem_mouse_24g_tx_time_offset 
+
+mouse_24g_short_sleep3:
+5b1f 20407d27 call clk2lpo 
+5b20 604a40a9 storet 4 ,mem_sleep_counter 
+5b21 20202406 branch lpm_sleep 
+
+mouse_24g_short_sleep_default:
+5b22 20405b29 call mouse_24g_miss_temp_clear 
+5b23 6fe1c61f fetch 3 ,mem_24g_short_sleep_set 
+5b24 20205b1e branch mouse_24g_short_sleep2 
+
+mouse_24g_short_sleep_long:
+5b25 18460400 sub temp ,0 ,temp 
+5b26 6fe1c61f fetch 3 ,mem_24g_short_sleep_set 
+5b27 9840fe00 iadd temp ,pdata 
+5b28 20205b1e branch mouse_24g_short_sleep2 
+
+mouse_24g_miss_temp_clear:
+5b29 58000000 setarg 0 
+5b2a 67e248f6 store 4 ,mem_mouse_24g_sleep_miss_temp 
+5b2b 20600000 rtn 
+
+mouse_24g_short_sleep_2:
+5b2c 7048f101 jam 1 ,mem_mouse_24g_sleep_miss 
+5b2d 20600000 rtn 
+
+mouse_24g_sub_miss_temp:
+5b2e dfffffff arg -1 ,pdata 
+5b2f 98465e00 isub temp ,regext 
+5b30 6fe248e6 fetch 4 ,mem_mouse_24g_tx_time_last_delt 
+5b31 9de67e00 isub regext ,pdata 
+5b32 20205b14 branch mouse_24g_short_sleep_notify 
+
+mouse_24g_transmit_callback:
+5b33 20405b35 call mouse_24g_send_time_check 
+5b34 20205916 branch mouse_wakeup_24g 
+
+mouse_24g_send_time_check:
+5b35 6fe0c8fa fetch 1 ,mem_mouse_sleep_deal_type 
+5b36 207a0000 rtn blank 
+5b37 6fe0c62f fetch 1 ,mem_24g_transmit_by_interrupt 
+5b38 c000db7b beq g24_tx_timer_int_enable ,mouse_24g_send_timer_first 
+5b39 6fe0c8df fetch 1 ,mem_mouse_24g_tx_count 
+5b3a 203a5b7b branch mouse_24g_send_timer_first ,blank 
+5b3b 1b227e00 copy clkn ,pdata 
+5b3c 684b48e0 fetcht 6 ,mem_mouse_24g_tx_time_last 
+5b3d 67e348e0 store 6 ,mem_mouse_24g_tx_time_last 
+5b3e 20407d12 call clk_diff_rt 
+5b3f 67e248e6 store 4 ,mem_mouse_24g_tx_time_last_delt 
+5b40 6fe0c8f1 fetch 1 ,mem_mouse_24g_sleep_miss 
+5b41 247a0000 nrtn blank 
+5b42 6fe14639 fetch 2 ,mem_24g_retransmit 
+5b43 247a0000 nrtn blank 
+5b44 6fe248f6 fetch 4 ,mem_mouse_24g_sleep_miss_temp 
+5b45 247a0000 nrtn blank 
+5b46 6fe248e6 fetch 4 ,mem_mouse_24g_tx_time_last_delt 
+5b47 684a48cc fetcht 4 ,mem_mouse_24g_tsniff 
+5b48 18438400 lshift temp ,temp 
+5b49 98467c00 isub temp ,null 
+5b4a 20215b7f branch mouse_24g_send_time_long_wake ,positive 
+5b4b 684ac8ea fetcht 5 ,mem_mouse_24g_tx_time_sum 
+5b4c 9840fe00 iadd temp ,pdata 
+5b4d 67e2c8ea store 5 ,mem_mouse_24g_tx_time_sum 
+5b4e 6848c8df fetcht 1 ,mem_mouse_24g_tx_count 
+5b4f 6fe0c8ef fetch 1 ,mem_mouse_24g_tx_time_sum_count 
+5b50 98467c00 isub temp ,null 
+5b51 2022db55 branch mouse_24g_send_time_check_average ,zero 
+5b52 18408401 increase 1 ,temp 
+5b53 6048c8df storet 1 ,mem_mouse_24g_tx_count 
+5b54 20600000 rtn 
+
+mouse_24g_send_time_check_average:
+5b55 7048df01 jam 1 ,mem_mouse_24g_tx_count 
+5b56 d8400000 arg 0 ,temp 
+5b57 6fe2c8ea fetch 5 ,mem_mouse_24g_tx_time_sum 
+5b58 604ac8ea storet 5 ,mem_mouse_24g_tx_time_sum 
+5b59 6848c8ef fetcht 1 ,mem_mouse_24g_tx_time_sum_count 
+5b5a 9846fc00 idiv temp 
+5b5b 20407d64 call wait_div_end 
+5b5c 1807a200 quotient rega 
+5b5d 6fe248cc fetch 4 ,mem_mouse_24g_tsniff 
+5b5e 6848c8f0 fetcht 1 ,mem_mouse_24g_tx_time_offset 
+5b5f 98460400 isub temp ,temp 
+5b60 1a227e00 copy rega ,pdata 
+5b61 98467e00 isub temp ,pdata 
+5b62 20215b6f branch mouse_24g_send_time_check_average_late ,positive 
+5b63 1fe67e00 sub pdata ,0 ,pdata 
+5b64 1feb7e00 rshift2 pdata ,pdata 
+5b65 6849c61f fetcht 3 ,mem_24g_short_sleep_set 
+5b66 98408400 iadd temp ,temp 
+5b67 44d6c015 bpatch patch15_5 ,mem_patch15 
+5b68 6fe1c8dc fetch 3 ,mem_mouse_24g_short_sleep_set_init 
+5b69 da201800 arg 0x1800 ,rega 
+5b6a 9a20fe00 iadd rega ,pdata 
+5b6b 98467c00 isub temp ,null 
+5b6c 24215b79 nbranch mouse_24g_send_time_check_average_min ,positive 
+
+mouse_24g_short_sleep_storet:
+5b6d 6049c61f storet 3 ,mem_24g_short_sleep_set 
+5b6e 20600000 rtn 
+
+mouse_24g_send_time_check_average_late:
+5b6f 1feb0400 rshift2 pdata ,temp 
+5b70 6fe1c61f fetch 3 ,mem_24g_short_sleep_set 
+5b71 98460400 isub temp ,temp 
+5b72 44d74015 bpatch patch15_6 ,mem_patch15 
+5b73 6fe1c8dc fetch 3 ,mem_mouse_24g_short_sleep_set_init 
+5b74 da201800 arg 0x1800 ,rega 
+5b75 9a267e00 isub rega ,pdata 
+5b76 98467c00 isub temp ,null 
+5b77 20215b79 branch mouse_24g_send_time_check_average_min ,positive 
+5b78 20205b6d branch mouse_24g_short_sleep_storet 
+
+mouse_24g_send_time_check_average_min:
+5b79 67e1c61f store 3 ,mem_24g_short_sleep_set 
+5b7a 20600000 rtn 
+
+mouse_24g_send_timer_first:
+5b7b 7048df01 jam 1 ,mem_mouse_24g_tx_count 
+5b7c 1b227e00 copy clkn ,pdata 
+5b7d 67e348e0 store 6 ,mem_mouse_24g_tx_time_last 
+5b7e 20600000 rtn 
+
+mouse_24g_send_time_long_wake:
+5b7f 58000000 setarg 0 
+5b80 67e0c8df store 1 ,mem_mouse_24g_tx_count 
+5b81 67e2c8ea store 5 ,mem_mouse_24g_tx_time_sum 
+5b82 20600000 rtn 
+
+mouse_usb_check_enable:
+5b83 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5b84 c4060000 rtnbit0 mouse_enable_usb 
+5b85 704676a5 jam usb_interface_remove ,mem_usb_vdd_status 
+5b86 20600000 rtn 
+
+mouse_usb_isr:
+5b87 20405b8b call mouse_usb_interface_check 
+5b88 6fe0c676 fetch 1 ,mem_usb_vdd_status 
+5b89 c1ad0000 rtnne usb_interface_insert 
+5b8a 202078f6 branch usb_isr 
+
+mouse_usb_interface_check:
+5b8b 44d7c015 bpatch patch15_7 ,mem_patch15 
+5b8c 6848884a fetcht 1 ,mem_usb_offline_check_gpio 
+5b8d 20406ee0 call gpio_get_bit 
+5b8e 2420dba4 nbranch mouse_usb_mode_disable ,true 
+
+mouse_usb_mode_enable:
+5b8f 6fe0c676 fetch 1 ,mem_usb_vdd_status 
+5b90 c12d0000 rtneq usb_interface_insert 
+5b91 7046765a jam usb_interface_insert ,mem_usb_vdd_status 
+5b92 58000000 setarg 0 
+5b93 67e145ef store 2 ,mem_24g_pair_timeout 
+5b94 67e145f5 store 2 ,mem_24g_reconn_timeout 
+5b95 70409400 jam 0 ,mem_lpm_mode 
+5b96 2040712c call select_system_clk_12m_dpll 
+5b97 20405936 call mouse_24g_stop 
+5b98 204053c3 call mouse_stop_bluetooth_mode 
+5b99 7855fc00 disable wake 
+5b9a 2040538d call mouse_init_sensor_reset 
+5b9b 58005bd7 setarg mouse_usb_config_param 
+5b9c 67e10837 store 2 ,mem_cb_usb_config 
+5b9d 6fe0ca95 fetch 1 ,mem_usb_tx_interval_retention 
+5b9e 67e08839 store 1 ,mem_usb_tx_interval 
+5b9f d8c04a96 arg mem_usb_vid_pid_retention ,contr 
+5ba0 d8a0083a arg mem_usb_vid_pid ,contw 
+5ba1 df200009 arg 9 ,loopcnt 
+5ba2 20407cdc call memcpy 
+5ba3 20207902 branch usb_init 
+
+mouse_usb_mode_disable:
+5ba4 6fe0c677 fetch 1 ,mem_usb_keyboard_flag 
+5ba5 c1528000 rtneq usb_interface_remove 
+5ba6 704676a5 jam usb_interface_remove ,mem_usb_vdd_status 
+5ba7 7008ec00 jam 0 ,mem_usb_device_enumeration_endflag 
+5ba8 7006e700 jam 0 ,mem_usb_status 
+5ba9 7008de00 jam 0 ,mem_usb_state 
+5baa 6ff10050 fetch 2 ,core_clkoff 
+5bab 79207e0a set1 clock_off_usb ,pdata 
+5bac 67f10050 store 2 ,core_clkoff 
+5bad 70409401 jam 1 ,mem_lpm_mode 
+5bae 2040712c call select_system_clk_12m_dpll 
+5baf 20205801 branch mouse_soft_reset 
+
+mouse_usb_mode:
+5bb0 6ff08c01 fetch 1 ,core_usb_addr 
+5bb1 67e0c675 store 1 ,mem_usb_addr 
+5bb2 c4038000 rtnbit0 7 
+5bb3 20405bc2 call mouse_usb_timer_check 
+5bb4 24740000 nrtn user 
+5bb5 20404f26 call mouse_motion 
+5bb6 24740000 nrtn user 
+5bb7 6ff08c25 fetch 1 ,core_usb_txbusy 
+5bb8 c3810000 rtnbit1 2 
+5bb9 20205bba branch mouse_push_data_to_usb 
+
+mouse_push_data_to_usb:
+5bba 6ff08c01 fetch 1 ,core_usb_addr 
+5bbb c4038000 rtnbit0 7 
+5bbc 44d84016 bpatch patch16_0 ,mem_patch16 
+5bbd 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5bbe c30a6856 bbit0 mouse_enable_keyboard ,hid_device_push_mouse_data_to_usb 
+5bbf 6fe0c72b fetch 1 ,mem_customer_key 
+5bc0 c000e85b beq 1 ,hid_device_push_keyboard_data_to_usb 
+5bc1 20206856 branch hid_device_push_mouse_data_to_usb 
+
+mouse_usb_timer_check:
+5bc2 20407dbe call disable_user 
+5bc3 684a474b fetcht 4 ,mem_btclk_sensor 
+5bc4 1c427e00 copy clkn_bt ,pdata 
+5bc5 98467c00 isub temp ,null 
+5bc6 24415bd1 ncall mouse_usb_timer_timeout ,positive 
+5bc7 1fe22400 copy pdata ,regb 
+5bc8 6fe2474b fetch 4 ,mem_btclk_sensor 
+5bc9 6848c674 fetcht 1 ,mem_wire_usb_interval 
+5bca 98408400 iadd temp ,temp 
+5bcb 1a427e00 copy regb ,pdata 
+5bcc 98467c00 isub temp ,null 
+5bcd 24610000 nrtn positive 
+5bce 793ffe1c set0 28 ,pdata 
+5bcf 67e2474b store 4 ,mem_btclk_sensor 
+5bd0 20207dbc branch enable_user 
+
+mouse_usb_timer_timeout:
+5bd1 20628000 rtn zero 
+5bd2 79207e1c set1 28 ,pdata 
+5bd3 20600000 rtn 
+
+mouse_usb_timer_init:
+5bd4 58000000 setarg 0 
+5bd5 67e2474b store 4 ,mem_btclk_sensor 
+5bd6 20600000 rtn 
+
+mouse_usb_config_param:
+5bd7 44d8c016 bpatch patch16_1 ,mem_patch16 
+5bd8 20405be1 call mouse_usb_config_kb_check 
+5bd9 20405bea call mouse_usb_report_rate_set 
+5bda 20405be6 call mouse_usb_config_param_setup 
+
+mouse_usb_device_name_config:
+5bdb 6fe0ca9f fetch 1 ,mem_usb_device_name_retention 
+5bdc 207a0000 rtn blank 
+5bdd d8c04a9f arg mem_usb_device_name_retention ,contr 
+5bde d8a007fb arg mem_string2 ,contw 
+5bdf df20001e arg 30 ,loopcnt 
+5be0 20207cdc branch memcpy 
+
+mouse_usb_config_kb_check:
+5be1 704677c0 jam dongle_kb_bind_otp_offect ,mem_usb_keyboard_flag 
+5be2 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5be3 c40a0000 rtnbit0 mouse_enable_keyboard 
+5be4 7046775a jam dongle_kb_bind_success ,mem_usb_keyboard_flag 
+5be5 20600000 rtn 
+
+mouse_usb_config_param_setup:
+5be6 20407956 call usb_tx_interval_config 
+5be7 20403d20 call dongle_usb_vid_pid_config 
+
+mouse_usb_hid_icon_config:
+5be8 6fe0c677 fetch 1 ,mem_usb_keyboard_flag 
+5be9 20203d2a branch dongle_usb_hid_icon_config + 1 
+
+mouse_usb_report_rate_set:
+5bea 20405bd4 call mouse_usb_timer_init 
+5beb 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+5bec c28edbf1 bbit1 mouse_enable_usb_250 ,mouse_usb_report_rate_set_250hz 
+5bed c28f5bf3 bbit1 mouse_enable_usb_500 ,mouse_usb_report_rate_set_500hz 
+5bee c28fdbf5 bbit1 mouse_enable_usb_1000 ,mouse_usb_report_rate_set_1000hz 
+
+mouse_usb_report_rate_set_125hz:
+5bef 70467420 jam 32 ,mem_wire_usb_interval 
+5bf0 20600000 rtn 
+
+mouse_usb_report_rate_set_250hz:
+5bf1 70467410 jam 16 ,mem_wire_usb_interval 
+5bf2 20600000 rtn 
+
+mouse_usb_report_rate_set_500hz:
+5bf3 70467408 jam 8 ,mem_wire_usb_interval 
+5bf4 20600000 rtn 
+
+mouse_usb_report_rate_set_1000hz:
+5bf5 70467404 jam 4 ,mem_wire_usb_interval 
+5bf6 20600000 rtn 
+
+rec_cb_function:
+5bf7 58005bfa setarg rec_process_idle 
+5bf8 67e143e4 store 2 ,mem_cb_idle_process 
+5bf9 20600000 rtn 
+
+rec_process_idle:
+5bfa 20405bfc call rec_ui_timer_check 
+5bfb 20600000 rtn 
+
+rec_ui_timer_check:
+5bfc 44d94016 bpatch patch16_2 ,mem_patch16 
+5bfd da200000 arg 0 ,rega 
+5bfe 684a49f2 fetcht 4 ,mem_rec_ui_timer_btclk 
+5bff 1c422400 copy clkn_bt ,regb 
+5c00 1a427e00 copy regb ,pdata 
+5c01 98467c00 isub temp ,null 
+5c02 244177f4 ncall ui_timer_timeout ,positive 
+
+rec_ui_timer_check_loop:
+5c03 1a427e00 copy regb ,pdata 
+5c04 18408408 increase 8 ,temp 
+5c05 98467c00 isub temp ,null 
+5c06 24215c0e nbranch rec_ui_timer_check_end ,positive 
+5c07 1a20a201 increase 1 ,rega 
+5c08 1a217e0f and rega ,0x0f ,pdata 
+5c09 243a5c03 nbranch rec_ui_timer_check_loop ,blank 
+5c0a da200000 arg 0 ,rega 
+5c0b 20405c13 call rec_ui_timer_check_send_evt 
+
+rec_ui_timer_init:
+5c0c 644249f2 storer clkn_bt ,4 ,mem_rec_ui_timer_btclk 
+5c0d 20600000 rtn 
+
+rec_ui_timer_check_end:
+5c0e 1a227e00 copy rega ,pdata 
+5c0f 207a0000 rtn blank 
+5c10 184085f8 increase -8 ,temp 
+5c11 793f841c set0 28 ,temp 
+5c12 604a49f2 storet 4 ,mem_rec_ui_timer_btclk 
+
+rec_ui_timer_check_send_evt:
+5c13 67e0c9f6 store 1 ,mem_rec_ui_timer_count 
+
+rec_evt_timer_loop:
+5c14 6fe0c9f6 fetch 1 ,mem_rec_ui_timer_count 
+5c15 207a0000 rtn blank 
+5c16 1fe0ffff increase -1 ,pdata 
+5c17 67e0c9f6 store 1 ,mem_rec_ui_timer_count 
+5c18 6fe149f7 fetch 2 ,mem_rec_cb_timer 
+5c19 20407d7b call callback_func 
+5c1a 20205c14 branch rec_evt_timer_loop 
+
+rec_tscan:
+5c1b 44d9c016 bpatch patch16_3 ,mem_patch16 
+5c1c 6fe0c9fb fetch 1 ,mem_rec_tscan_row_nums 
+5c1d 207a0000 rtn blank 
+5c1e 704a0000 jam 0 ,mem_rec_tscan_col_scanned 
+5c1f 704a1700 jam 0 ,mem_rec_tscan_sequence 
+5c20 20405d0a call rec_gpio_wakeup_disable 
+
+rec_tscan_gnd_process:
+5c21 20405ca3 call rec_tscan_get_gndkey_state 
+5c22 6fe0ca22 fetch 1 ,mem_rec_tscan_gndkey_need_send_flag 
+5c23 247a0000 nrtn blank 
+5c24 20405d1b call rec_tscan_gpio_set_before_lpm 
+5c25 204023e1 call lpm_write_gpio_wakeup 
+
+rec_tscan_process:
+5c26 44da4016 bpatch patch16_4 ,mem_patch16 
+5c27 20405c2c call rec_tscan_col_state_init 
+5c28 20405c32 call rec_tscan_row_state_init 
+5c29 20405c3f call rec_tscan_get_row_state 
+5c2a 20405c77 call rec_tscan_pull_up_current_col_gpio 
+5c2b 20205c7a branch rec_tscan_col_state_next_gpio_check 
+
+rec_tscan_col_state_init:
+5c2c da204a0d arg mem_rec_tscan_col_gpio ,rega 
+5c2d 6fe0ca00 fetch 1 ,mem_rec_tscan_col_scanned 
+5c2e 9a20a200 iadd rega ,rega 
+5c2f 622149fd storer rega ,2 ,mem_rec_tscan_col_gpio_ptr 
+5c30 e8408011 ifetcht 1 ,rega 
+5c31 20206ef1 branch gpio_config_output 
+
+rec_tscan_row_state_init:
+5c32 6fe0c9fb fetch 1 ,mem_rec_tscan_row_nums 
+5c33 207a0000 rtn blank 
+5c34 6848ca00 fetcht 1 ,mem_rec_tscan_col_scanned 
+5c35 98467e00 isub temp ,pdata 
+5c36 98007200 iforce loopcnt 
+5c37 da204a03 arg mem_rec_tscan_row_gpio ,rega 
+5c38 6fe0ca00 fetch 1 ,mem_rec_tscan_col_scanned 
+5c39 9a20a200 iadd rega ,rega 
+
+rec_tscan_row_gpio_config_input_pull_up:
+5c3a efe08011 ifetch 1 ,rega 
+5c3b 20405cf3 call rec_gpio_weak_pullup 
+5c3c 1a20a201 increase 1 ,rega 
+5c3d c2005c3a loop rec_tscan_row_gpio_config_input_pull_up 
+5c3e 20600000 rtn 
+
+rec_tscan_get_row_state:
+5c3f 7049ff00 jam 0 ,mem_rec_tscan_row_scanned 
+5c40 6fe0c9fb fetch 1 ,mem_rec_tscan_row_nums 
+5c41 6848ca00 fetcht 1 ,mem_rec_tscan_col_scanned 
+5c42 98467e00 isub temp ,pdata 
+5c43 67e0ca19 store 1 ,mem_rec_tscan_row_scan_loop_count 
+5c44 da204a03 arg mem_rec_tscan_row_gpio ,rega 
+5c45 6fe0ca00 fetch 1 ,mem_rec_tscan_col_scanned 
+5c46 9a20a200 iadd rega ,rega 
+
+rec_tscan_get_row_state_loop:
+5c47 e8408011 ifetcht 1 ,rega 
+5c48 6048ca6d storet 1 ,mem_rec_gpio_bit_check 
+5c49 20405ce4 call rec_tscan_debounce 
+5c4a 24740000 nrtn user 
+5c4b 2040dc5c call rec_tscan_record_key_coord ,true 
+5c4c 1a20a201 increase 1 ,rega 
+5c4d 6fe0c9ff fetch 1 ,mem_rec_tscan_row_scanned 
+5c4e 1fe0fe01 increase 1 ,pdata 
+5c4f 67e0c9ff store 1 ,mem_rec_tscan_row_scanned 
+5c50 6848ca17 fetcht 1 ,mem_rec_tscan_sequence 
+5c51 18408401 increase 1 ,temp 
+5c52 6048ca17 storet 1 ,mem_rec_tscan_sequence 
+5c53 6848ca19 fetcht 1 ,mem_rec_tscan_row_scan_loop_count 
+5c54 98467c00 isub temp ,null 
+5c55 24215c47 nbranch rec_tscan_get_row_state_loop ,positive 
+5c56 6fe14a01 fetch 2 ,mem_rec_tscan_record_row 
+5c57 207a0000 rtn blank 
+5c58 67e14a67 store 2 ,mem_rec_tscan_record_now 
+5c59 58000000 setarg 0 
+5c5a 67e14a01 store 2 ,mem_rec_tscan_record_row 
+5c5b 20600000 rtn 
+
+rec_tscan_record_key_coord:
+5c5c 62214a65 storer rega ,2 ,mem_rec_tscan_current_gpio_ptr 
+5c5d 6fe0c9ff fetch 1 ,mem_rec_tscan_row_scanned 
+5c5e 1fe20e00 copy pdata ,queue 
+5c5f 6848ca01 fetcht 1 ,mem_rec_tscan_record_row 
+5c60 f9200400 qset1 temp 
+5c61 6048ca01 storet 1 ,mem_rec_tscan_record_row 
+5c62 6fe0ca00 fetch 1 ,mem_rec_tscan_col_scanned 
+5c63 1fe20e00 copy pdata ,queue 
+5c64 6848ca02 fetcht 1 ,mem_rec_tscan_record_col 
+5c65 f9200400 qset1 temp 
+5c66 6048ca02 storet 1 ,mem_rec_tscan_record_col 
+5c67 20405c6a call rec_tscan_combin_key_num_output 
+5c68 6a214a65 fetchr rega ,2 ,mem_rec_tscan_current_gpio_ptr 
+5c69 20600000 rtn 
+
+rec_tscan_combin_key_num_output:
+5c6a 68494a01 fetcht 2 ,mem_rec_tscan_record_row 
+5c6b da204a23 arg mem_rec_tscan_key_nums_list ,rega 
+
+rec_tscan_combin_key_num_loop:
+5c6c efe10011 ifetch 2 ,rega 
+5c6d 207a0000 rtn blank 
+5c6e 98467c00 isub temp ,null 
+5c6f 2042dc72 call rec_tscan_output_combin_key_num ,zero 
+5c70 1a20a202 increase 2 ,rega 
+5c71 20205c6c branch rec_tscan_combin_key_num_loop 
+
+rec_tscan_output_combin_key_num:
+5c72 68e0ca17 fetchr queue ,1 ,mem_rec_tscan_sequence 
+5c73 6fe44a55 fetch 8 ,mem_rec_tscan_key_num_bit 
+5c74 f9207e00 qset1 pdata 
+5c75 67e44a55 store 8 ,mem_rec_tscan_key_num_bit 
+5c76 20600000 rtn 
+
+rec_tscan_pull_up_current_col_gpio:
+5c77 6fe149fd fetch 2 ,mem_rec_tscan_col_gpio_ptr 
+5c78 efe0803f ifetch 1 ,pdata 
+5c79 20205cf3 branch rec_gpio_weak_pullup 
+
+rec_tscan_col_state_next_gpio_check:
+5c7a 6fe0ca00 fetch 1 ,mem_rec_tscan_col_scanned 
+5c7b 1fe0fe01 increase 1 ,pdata 
+5c7c 67e0ca00 store 1 ,mem_rec_tscan_col_scanned 
+5c7d 6848c9fc fetcht 1 ,mem_rec_tscan_col_nums 
+5c7e 98467c00 isub temp ,null 
+5c7f 24215c26 nbranch rec_tscan_process ,positive 
+5c80 6fe14a67 fetch 2 ,mem_rec_tscan_record_now 
+5c81 203a5c8e branch rec_tscan_key_up ,blank 
+
+rec_tscan_key_down:
+5c82 67e14a1c store 2 ,mem_rec_tscan_record_temp 
+5c83 6fe0ca1e fetch 1 ,mem_rec_tscan_key_need_send_flag 
+5c84 243a5ca0 nbranch rec_tscan_key_value_clear ,blank 
+5c85 6fe0ca1b fetch 1 ,mem_rec_tscan_key_state 
+5c86 c1008000 rtneq key_down 
+5c87 704a1b01 jam key_down ,mem_rec_tscan_key_state 
+5c88 704a1e01 jam 1 ,mem_rec_tscan_key_need_send_flag 
+5c89 44dac016 bpatch patch16_5 ,mem_patch16 
+5c8a 20405c9c call rec_tscan_key_num_output 
+5c8b 6fe14500 fetch 2 ,mem_ui_state_map 
+5c8c c3858000 rtnbit1 ui_state_ble_adv 
+5c8d 20205db7 branch rec_led_start_on 
+
+rec_tscan_key_up:
+5c8e 6fe0ca1b fetch 1 ,mem_rec_tscan_key_state 
+5c8f c1000000 rtneq key_up 
+5c90 704a1b00 jam key_up ,mem_rec_tscan_key_state 
+5c91 6fe14500 fetch 2 ,mem_ui_state_map 
+5c92 c285dc96 bbit1 ui_state_ble_adv ,rec_tscan_key_up_send 
+5c93 6fe08da0 fetch 1 ,mem_rec_nec_learn_state 
+5c94 243a5c96 nbranch rec_tscan_key_up_send ,blank 
+5c95 20405db9 call rec_led_start_off 
+
+rec_tscan_key_up_send:
+5c96 58000000 setarg 0 
+5c97 67e44a55 store 8 ,mem_rec_tscan_key_num_bit 
+5c98 67e0ca1e store 1 ,mem_rec_tscan_key_need_send_flag 
+
+rec_tscan_key_up_config:
+5c99 704a1f00 jam 0 ,mem_rec_tscan_current_key_num 
+5c9a da604bef arg mem_rec_key_release_le ,regc 
+5c9b 2020618e branch push_buffer_in_queue 
+
+rec_tscan_key_num_output:
+5c9c 20405d4c call rec_tscan_key_num_check 
+
+rec_tscan_record_init:
+5c9d 58000000 setarg 0 
+5c9e 67e14a1c store 2 ,mem_rec_tscan_record_temp 
+5c9f 20600000 rtn 
+
+rec_tscan_key_value_clear:
+5ca0 58000000 setarg 0 
+5ca1 67e14a67 store 2 ,mem_rec_tscan_record_now 
+5ca2 20600000 rtn 
+
+rec_tscan_get_gndkey_state:
+5ca3 da200000 arg 0 ,rega 
+5ca4 da400000 arg 0 ,regb 
+5ca5 18007000 force 0 ,regext_index 
+5ca6 6fe0ca18 fetch 1 ,mem_rec_tscan_gpio_nums 
+5ca7 98007200 iforce loopcnt 
+5ca8 da604a0d arg mem_rec_tscan_col_gpio ,regc 
+
+rec_tscan_get_gndkey_loop:
+5ca9 20405d0b call rec_save_regc 
+5caa 20405d10 call rec_save_rega 
+5cab efe08013 ifetch 1 ,regc 
+5cac 20405cf3 call rec_gpio_weak_pullup 
+5cad 20405d12 call rec_rescue_rega 
+5cae 20405d0d call rec_rescue_regc 
+5caf e8408013 ifetcht 1 ,regc 
+5cb0 6048ca6d storet 1 ,mem_rec_gpio_bit_check 
+5cb1 20405ce4 call rec_tscan_debounce 
+5cb2 24740000 nrtn user 
+5cb3 1a420e00 copy regb ,queue 
+5cb4 2040dcdc call rec_tscan_store_gndkey_press_state ,true 
+5cb5 2440dcde ncall rec_tscan_store_gndkey_release_state ,true 
+5cb6 1a60a601 increase 1 ,regc 
+5cb7 1a40a401 increase 1 ,regb 
+5cb8 c2005ca9 loop rec_tscan_get_gndkey_loop 
+5cb9 1a227e00 copy rega ,pdata 
+5cba 203a5cc5 branch rec_tscan_gndkey_up ,blank 
+
+rec_tscan_gndkey_down:
+5cbb 67e0ca21 store 1 ,mem_rec_tscan_gndkey_record_temp 
+5cbc 6fe0ca1a fetch 1 ,mem_rec_tscan_gndkey_state 
+5cbd c1008000 rtneq key_down 
+5cbe 704a1a01 jam key_down ,mem_rec_tscan_gndkey_state 
+5cbf 704a2201 jam 1 ,mem_rec_tscan_gndkey_need_send_flag 
+5cc0 44db4016 bpatch patch16_6 ,mem_patch16 
+5cc1 20405ccf call rec_tscan_gndkey_num_output 
+5cc2 6fe14500 fetch 2 ,mem_ui_state_map 
+5cc3 c3858000 rtnbit1 ui_state_ble_adv 
+5cc4 20205db7 branch rec_led_start_on 
+
+rec_tscan_gndkey_up:
+5cc5 6fe0ca1a fetch 1 ,mem_rec_tscan_gndkey_state 
+5cc6 c1000000 rtneq key_up 
+5cc7 704a1a00 jam key_up ,mem_rec_tscan_gndkey_state 
+5cc8 6fe14500 fetch 2 ,mem_ui_state_map 
+5cc9 c285dccd bbit1 ui_state_ble_adv ,rec_tscan_gndkey_up_send 
+5cca 6fe08da0 fetch 1 ,mem_rec_nec_learn_state 
+5ccb 243a5ccd nbranch rec_tscan_gndkey_up_send ,blank 
+5ccc 20405db9 call rec_led_start_off 
+
+rec_tscan_gndkey_up_send:
+5ccd 704a2200 jam 0 ,mem_rec_tscan_gndkey_need_send_flag 
+5cce 20205c99 branch rec_tscan_key_up_config 
+
+rec_tscan_gndkey_num_output:
+5ccf 20405cd2 call rec_tscan_gndkey_num_check 
+
+rec_tscan_gndkey_record_param_init:
+5cd0 704a2100 jam 0 ,mem_rec_tscan_gndkey_record_temp 
+5cd1 20600000 rtn 
+
+rec_tscan_gndkey_num_check:
+5cd2 6848ca21 fetcht 1 ,mem_rec_tscan_gndkey_record_temp 
+5cd3 da204a4b arg mem_rec_tscan_gndkey_nums_list ,rega 
+5cd4 da400000 arg 0 ,regb 
+
+rec_tscan_gndkey_num_loop:
+5cd5 efe08011 ifetch 1 ,rega 
+5cd6 207a0000 rtn blank 
+5cd7 98467c00 isub temp ,null 
+5cd8 2022dd3f branch rec_tscan_output_gndkey_num ,zero 
+5cd9 1a20a201 increase 1 ,rega 
+5cda 1a40a401 increase 1 ,regb 
+5cdb 20205cd5 branch rec_tscan_gndkey_num_loop 
+
+rec_tscan_store_gndkey_press_state:
+5cdc f9202200 qset1 rega 
+5cdd 20600000 rtn 
+
+rec_tscan_store_gndkey_release_state:
+5cde f93fa200 qset0 rega 
+5cdf 20600000 rtn 
+
+rec_gpio_bit_first_set:
+5ce0 704a6b01 jam 1 ,mem_rec_gpio_bit_first 
+5ce1 20600000 rtn 
+
+rec_gpio_bit_second_set:
+5ce2 704a6c01 jam 1 ,mem_rec_gpio_bit_second 
+5ce3 20600000 rtn 
+
+rec_tscan_debounce:
+5ce4 20407dbe call disable_user 
+5ce5 704a6b00 jam 0 ,mem_rec_gpio_bit_first 
+5ce6 704a6c00 jam 0 ,mem_rec_gpio_bit_second 
+5ce7 6848ca6d fetcht 1 ,mem_rec_gpio_bit_check 
+5ce8 20406ee0 call gpio_get_bit 
+5ce9 2040dce0 call rec_gpio_bit_first_set ,true 
+5cea 200004b0 nop 1200 
+5ceb 6848ca6d fetcht 1 ,mem_rec_gpio_bit_check 
+5cec 20406ee0 call gpio_get_bit 
+5ced 2040dce2 call rec_gpio_bit_second_set ,true 
+5cee 6fe0ca6b fetch 1 ,mem_rec_gpio_bit_first 
+5cef 6848ca6c fetcht 1 ,mem_rec_gpio_bit_second 
+5cf0 98467c00 isub temp ,null 
+5cf1 24628000 nrtn zero 
+5cf2 20207dbc branch enable_user 
+
+rec_gpio_weak_pullup:
+5cf3 67e0ca6e store 1 ,mem_rec_gpio_for_wake_pullup 
+5cf4 20405d07 call rec_gpio_set_input 
+5cf5 6fe0ca6e fetch 1 ,mem_rec_gpio_for_wake_pullup 
+
+rec_gpio_set_lpm_weak_pullup:
+5cf6 da600001 arg 0x01 ,regc 
+5cf7 1fe6fc02 div pdata ,2 
+5cf8 20407d64 call wait_div_end 
+5cf9 18078400 quotient temp 
+5cfa 18077e00 remainder pdata 
+5cfb 245a5d05 ncall rec_gpio_set_0x10_regc ,blank 
+5cfc 18427e00 copy temp ,pdata 
+5cfd d8a0814d arg core_gpio_wakeup_cfg ,contw 
+5cfe 37d98200 until null ,lpo_edge 
+5cff 37d98200 until null ,lpo_edge 
+5d00 98a08a00 iadd contw ,contw 
+5d01 efe08005 ifetch 1 ,contw 
+5d02 9a61fe00 ior regc ,pdata 
+5d03 e7e08005 istore 1 ,contw 
+5d04 202023c4 branch lpm_write_wait 
+
+rec_gpio_set_0x10_regc:
+5d05 da600010 arg 0x10 ,regc 
+5d06 20600000 rtn 
+
+rec_gpio_set_input:
+5d07 1fe1fe80 or pdata ,0x80 ,pdata 
+5d08 d8400000 arg gpcfg_input ,temp 
+5d09 20206f1c branch gpio_config_function 
+
+rec_gpio_wakeup_disable:
+5d0a 20206f4e branch lpm_config_puchk_disable 
+
+rec_save_regc:
+5d0b 1a627e00 copy regc ,pdata 
+5d0c 20205d15 branch rec_save_reg 
+
+rec_rescue_regc:
+5d0d 20405d18 call rec_rescue_reg 
+5d0e 1fe22600 copy pdata ,regc 
+5d0f 20600000 rtn 
+
+rec_save_rega:
+5d10 1a227e00 copy rega ,pdata 
+5d11 20205d15 branch rec_save_reg 
+
+rec_rescue_rega:
+5d12 20405d18 call rec_rescue_reg 
+5d13 1fe22200 copy pdata ,rega 
+5d14 20600000 rtn 
+
+rec_save_reg:
+5d15 1f00f001 increase 1 ,regext_index 
+5d16 1fe25e00 copy pdata ,regext 
+5d17 20600000 rtn 
+
+rec_rescue_reg:
+5d18 1de27e00 copy regext ,pdata 
+5d19 1f00f1ff increase -1 ,regext_index 
+5d1a 20600000 rtn 
+
+rec_tscan_gpio_set_before_lpm:
+5d1b 20405d21 call rec_tscan_gpio_config_high_impedance 
+5d1c 20405d24 call rec_tscan_gpio_config_tri_angle_wakeup 
+5d1d 20405d0a call rec_gpio_wakeup_disable 
+
+rec_gpio_wakeup_enable:
+5d1e 580000f0 setarg 0xf0 
+5d1f 67f08141 store 1 ,core_puwakeup 
+5d20 202023c4 branch lpm_write_wait 
+
+rec_tscan_gpio_config_high_impedance:
+5d21 6fe0ca18 fetch 1 ,mem_rec_tscan_gpio_nums 
+5d22 da204a0d arg mem_rec_tscan_col_gpio ,rega 
+5d23 20205d28 branch rec_gpio_config_high_impedance 
+
+rec_tscan_gpio_config_tri_angle_wakeup:
+5d24 6a40ca20 fetchr regb ,1 ,mem_rec_gpio_wakeup_source 
+5d25 6fe0ca18 fetch 1 ,mem_rec_tscan_gpio_nums 
+5d26 da204a0d arg mem_rec_tscan_col_gpio ,rega 
+5d27 20205d2e branch rec_gpio_wakeup_config 
+
+rec_gpio_config_high_impedance:
+5d28 1fe27200 copy pdata ,loopcnt 
+
+rec_high_impedance_loop:
+5d29 e8408011 ifetcht 1 ,rega 
+5d2a 20406f0b call gpio_set_high_impedance 
+5d2b 1a20a201 increase 1 ,rega 
+5d2c c2005d29 loop rec_high_impedance_loop 
+5d2d 20600000 rtn 
+
+rec_gpio_wakeup_config:
+5d2e 1fe27200 copy pdata ,loopcnt 
+
+rec_gpio_wakeup_config_loop:
+5d2f e8408011 ifetcht 1 ,rega 
+5d30 18437e00 rshift temp ,pdata 
+5d31 d8a00016 arg mem_gpio_wakeup_cfg ,contw 
+5d32 98a08a00 iadd contw ,contw 
+5d33 20405d3a call rec_gpio_wakeup_addr_search 
+5d34 e8408005 ifetcht 1 ,contw 
+5d35 9841fe00 ior temp ,pdata 
+5d36 e7e08005 istore 1 ,contw 
+5d37 1a20a201 increase 1 ,rega 
+5d38 c2005d2f loop rec_gpio_wakeup_config_loop 
+5d39 20600000 rtn 
+
+rec_gpio_wakeup_addr_search:
+5d3a 1a427e00 copy regb ,pdata 
+5d3b 284c0000 isolate0 0 ,temp 
+5d3c 20608000 rtn true 
+5d3d 1ff27e00 lshift4 pdata ,pdata 
+5d3e 20600000 rtn 
+
+rec_tscan_output_gndkey_num:
+5d3f 44dbc016 bpatch patch16_7 ,mem_patch16 
+5d40 1a427e00 copy regb ,pdata 
+5d41 6848cc07 fetcht 1 ,mem_rec_gnd_key_offset 
+5d42 9840fe00 iadd temp ,pdata 
+
+rec_tscan_output_key_map:
+5d43 da604bf2 arg mem_rec_key_map ,regc 
+5d44 9a60a600 iadd regc ,regc 
+5d45 efe08013 ifetch 1 ,regc 
+5d46 67e0ca1f store 1 ,mem_rec_tscan_current_key_num 
+5d47 1fe0ffff increase -1 ,pdata 
+5d48 1feffe03 mul32 pdata ,max_queue_unit ,pdata 
+5d49 da604bb0 arg mem_rec_key_press_le ,regc 
+5d4a 9a60a600 iadd regc ,regc 
+5d4b 20205d59 branch rec_push_buffer_in_queue 
+
+rec_tscan_key_num_check:
+5d4c 68494a1c fetcht 2 ,mem_rec_tscan_record_temp 
+5d4d da204a23 arg mem_rec_tscan_key_nums_list ,rega 
+5d4e da400000 arg 0 ,regb 
+
+rec_tscan_key_num_loop:
+5d4f efe10011 ifetch 2 ,rega 
+5d50 207a0000 rtn blank 
+5d51 98467c00 isub temp ,null 
+5d52 2022dd56 branch rec_tscan_output_key_num ,zero 
+5d53 1a20a202 increase 2 ,rega 
+5d54 1a40a401 increase 1 ,regb 
+5d55 20205d4f branch rec_tscan_key_num_loop 
+
+rec_tscan_output_key_num:
+5d56 44dc4017 bpatch patch17_0 ,mem_patch17 
+5d57 1a427e00 copy regb ,pdata 
+5d58 20205d43 branch rec_tscan_output_key_map 
+
+rec_push_buffer_in_queue:
+5d59 44dcc017 bpatch patch17_1 ,mem_patch17 
+5d5a 6fe0cc0b fetch 1 ,mem_rec_le_connect_state 
+5d5b 243a5d5e nbranch rec_puch_buffer_in_queue_check ,blank 
+
+rec_push_buffer_in_queue_end:
+5d5c 20405d61 call rec_key_type_select 
+5d5d 2020618e branch push_buffer_in_queue 
+
+rec_puch_buffer_in_queue_check:
+5d5e 6fe0cc09 fetch 1 ,mem_rec_le_enable_notify 
+5d5f 207a0000 rtn blank 
+5d60 20205d5c branch rec_push_buffer_in_queue_end 
+
+rec_key_type_select:
+5d61 efe08013 ifetch 1 ,regc 
+5d62 1a60a601 increase 1 ,regc 
+5d63 c0005d68 beq keypad_type_consumer ,rec_set_key_type_consumer 
+5d64 c000dd6a beq keypad_type_mouse ,rec_set_key_type_mouse 
+5d65 c0015d6c beq keypad_type_keypad ,rec_set_key_type_keypad 
+5d66 c001dd6e beq keypad_type_nec ,rec_set_key_type_nec 
+5d67 20600000 rtn 
+
+rec_set_key_type_consumer:
+5d68 704a6f00 jam keypad_type_consumer ,mem_rec_keypad_type 
+5d69 20600000 rtn 
+
+rec_set_key_type_mouse:
+5d6a 704a6f01 jam keypad_type_mouse ,mem_rec_keypad_type 
+5d6b 20600000 rtn 
+
+rec_set_key_type_keypad:
+5d6c 704a6f02 jam keypad_type_keypad ,mem_rec_keypad_type 
+5d6d 20600000 rtn 
+
+rec_set_key_type_nec:
+5d6e 704a6f03 jam keypad_type_nec ,mem_rec_keypad_type 
+5d6f 20600000 rtn 
+
+rec_tscan_key_send:
+5d70 44dd4017 bpatch patch17_2 ,mem_patch17 
+5d71 204061a2 call queue_pop_one_byte 
+5d72 24740000 nrtn user 
+5d73 67e0cc08 store 1 ,mem_rec_keypad_fun 
+5d74 6fe0ca1f fetch 1 ,mem_rec_tscan_current_key_num 
+5d75 205a5e05 call rec_nec_disable ,blank 
+
+rec_tscan_send_keypad:
+5d76 6fe14500 fetch 2 ,mem_ui_state_map 
+5d77 c304dd7e bbit0 ui_state_ble_connected ,rec_send_nec_keypad 
+5d78 6fe0ca6f fetch 1 ,mem_rec_keypad_type 
+5d79 c0005d88 beq keypad_type_consumer ,rec_le_send_consumer 
+5d7a c000dd9c beq keypad_type_mouse ,rec_le_send_mouse 
+5d7b c0015da9 beq keypad_type_keypad ,rec_le_send_keyboard 
+5d7c c001dd7e beq keypad_type_nec ,rec_send_nec_keypad 
+5d7d 20600000 rtn 
+
+rec_send_nec_keypad:
+5d7e 6fe0ca1f fetch 1 ,mem_rec_tscan_current_key_num 
+5d7f c0005e05 beq 0x00 ,rec_nec_disable 
+5d80 6fe0cc08 fetch 1 ,mem_rec_keypad_fun 
+5d81 1fe0ffff pincrease -1 
+5d82 1feffe03 mul32 pdata ,3 ,pdata 
+5d83 d8404b80 arg mem_rec_key_nec_value_list ,temp 
+5d84 98408c00 iadd temp ,contr 
+5d85 efe10006 ifetch 2 ,contr 
+5d86 e8408006 ifetcht 1 ,contr 
+5d87 20205e01 branch rec_nec_6122_start 
+
+rec_le_send_consumer:
+5d88 20402a06 call le_fifo_check_nearly_full 
+5d89 247a0000 nrtn blank 
+5d8a 6fe0cc08 fetch 1 ,mem_rec_keypad_fun 
+5d8b 1fe0ffff pincrease -1 
+5d8c 1feffe03 mul32 pdata ,3 ,pdata 
+5d8d d8404b10 arg mem_rec_key_consumer_value_list ,temp 
+5d8e 98408c00 iadd temp ,contr 
+5d8f df200003 arg 3 ,loopcnt 
+5d90 d8a0064e arg mem_pdatatemp ,contw 
+5d91 20407cdc call memcpy 
+5d92 704c0a03 jam 3 ,mem_rec_le_data_len 
+5d93 68494c0e fetcht 2 ,mem_rec_report_id2_handle 
+
+rec_le_send_data:
+5d94 6fe0cc09 fetch 1 ,mem_rec_le_enable_notify 
+5d95 207a0000 rtn blank 
+5d96 6a20cc0a fetchr rega ,1 ,mem_rec_le_data_len 
+5d97 20402dcc call le_att_malloc_tx_notify 
+5d98 6848cc0a fetcht 1 ,mem_rec_le_data_len 
+5d99 18427200 copy temp ,loopcnt 
+5d9a d8c0064e arg mem_pdatatemp ,contr 
+5d9b 20207cdc branch memcpy 
+
+rec_le_send_mouse:
+5d9c 20402a06 call le_fifo_check_nearly_full 
+5d9d 247a0000 nrtn blank 
+5d9e 6fe0cc08 fetch 1 ,mem_rec_keypad_fun 
+5d9f 1fe0ffff pincrease -1 
+5da0 1feffe04 mul32 pdata ,4 ,pdata 
+5da1 d8404b40 arg mem_rec_key_mouse_value_list ,temp 
+5da2 98408c00 iadd temp ,contr 
+5da3 df200004 arg 4 ,loopcnt 
+5da4 d8a0064e arg mem_pdatatemp ,contw 
+5da5 20407cdc call memcpy 
+5da6 704c0a04 jam 4 ,mem_rec_le_data_len 
+5da7 68494c12 fetcht 2 ,mem_rec_report_id4_handle 
+5da8 20205d94 branch rec_le_send_data 
+
+rec_le_send_keyboard:
+5da9 20402a06 call le_fifo_check_nearly_full 
+5daa 247a0000 nrtn blank 
+5dab 6fe0cc08 fetch 1 ,mem_rec_keypad_fun 
+5dac 1fe0ffff pincrease -1 
+5dad 1feffe0a mul32 pdata ,10 ,pdata 
+5dae d8404a70 arg mem_rec_key_keyboard_value_list ,temp 
+5daf 98408c00 iadd temp ,contr 
+5db0 efe10006 ifetch 2 ,contr 
+
+rec_le_fill_standard_key_data:
+5db1 df200008 arg 8 ,loopcnt 
+5db2 d8a0064e arg mem_pdatatemp ,contw 
+5db3 20407cdc call memcpy 
+5db4 704c0a08 jam 8 ,mem_rec_le_data_len 
+5db5 68494c0c fetcht 2 ,mem_rec_report_id1_handle 
+5db6 20205d94 branch rec_le_send_data 
+
+rec_led_start_on:
+5db7 da200000 arg 0 ,rega 
+5db8 202077a8 branch ui_led_on_global 
+
+rec_led_start_off:
+5db9 da200000 arg 0 ,rega 
+5dba 202077ad branch ui_led_off_global 
+
+rec_nec_send_userdata_6122:
+5dbb 67e10d96 store 2 ,mem_rec_nec_usercode 
+5dbc 60488d98 storet 1 ,mem_rec_nec_datacode 
+5dbd 18007000 force 0 ,regext_index 
+5dbe 20405dcd call rec_nec_init_6122 
+5dbf 20405dd9 call rec_nec_send_boot_6122 
+5dc0 6fe08d96 fetch 1 ,mem_rec_nec_usercode 
+5dc1 20405de5 call rec_nec_send_byte_6122 
+5dc2 6fe08d97 fetch 1 ,mem_rec_nec_usercode + 1 
+5dc3 20405de5 call rec_nec_send_byte_6122 
+5dc4 6fe08d98 fetch 1 ,mem_rec_nec_datacode 
+5dc5 20405de5 call rec_nec_send_byte_6122 
+5dc6 6fe08d98 fetch 1 ,mem_rec_nec_datacode 
+5dc7 1fe47e00 invert pdata ,pdata 
+5dc8 20405de5 call rec_nec_send_byte_6122 
+5dc9 5800023a setarg 570 
+5dca 20405dde call rec_nec_carrier 
+5dcb 58000001 setarg 1 
+5dcc 20205ddc branch rec_nec_empty 
+
+rec_nec_init_6122:
+5dcd 58000000 setarg 0 
+5dce 204070bc call pwm_init + 3 
+5dcf 20407103 call pwm_disable 
+5dd0 20405dd3 call rec_pwm_duty_cycle_set 
+5dd1 6fe0ce33 fetch 1 ,mem_rec_nec_send_gpio 
+5dd2 20207100 branch pwm_enable 
+
+rec_pwm_duty_cycle_set:
+5dd3 da20009d arg 157 ,rega 
+5dd4 da40009d arg 157 ,regb 
+5dd5 dfe00000 arg 0 ,pdata 
+5dd6 204070de call pwm_duty_cycle_set 
+5dd7 70809a00 jam 0 ,core_pwm_en 
+5dd8 20600000 rtn 
+
+rec_nec_send_boot_6122:
+5dd9 58002328 setarg 9000 
+5dda 20405dde call rec_nec_carrier 
+5ddb 58001194 setarg 4500 
+
+rec_nec_empty:
+5ddc 70809a00 jam 0 ,core_pwm_en 
+5ddd 20205de0 branch rec_nec_delay_us 
+
+rec_nec_carrier:
+5dde 70809a01 jam 1 ,core_pwm_en 
+5ddf 20205de0 branch rec_nec_delay_us 
+
+rec_nec_delay_us:
+5de0 207a0000 rtn blank 
+
+rec_nec_delay_us_loop:
+5de1 1fe0ffff increase -1 ,pdata 
+5de2 20000008 nop 8 
+5de3 243a5de1 nbranch rec_nec_delay_us_loop ,blank 
+5de4 20600000 rtn 
+
+rec_nec_send_byte_6122:
+5de5 df200008 arg 8 ,loopcnt 
+
+rec_nec_send_byte_loop_6122:
+5de6 20405d15 call rec_save_reg 
+5de7 20405dec call rec_nec_send_bit_6122 
+5de8 20405d18 call rec_rescue_reg 
+5de9 1fe37e00 rshift pdata ,pdata 
+5dea c2005de6 loop rec_nec_send_byte_loop_6122 
+5deb 20600000 rtn 
+
+rec_nec_send_bit_6122:
+5dec c3005def bbit0 0 ,rec_nec_send_bit0_6122 
+5ded c2805df2 bbit1 0 ,rec_nec_send_bit1_6122 
+5dee 20600000 rtn 
+
+rec_nec_send_bit0_6122:
+5def da20023a arg 570 ,rega 
+5df0 da400226 arg 550 ,regb 
+5df1 20205df5 branch rec_nec_send_bit 
+
+rec_nec_send_bit1_6122:
+5df2 da20023a arg 570 ,rega 
+5df3 da400690 arg 1680 ,regb 
+5df4 20205df5 branch rec_nec_send_bit 
+
+rec_nec_send_bit:
+5df5 1a227e00 copy rega ,pdata 
+5df6 20405dde call rec_nec_carrier 
+5df7 1a427e00 copy regb ,pdata 
+5df8 20205ddc branch rec_nec_empty 
+
+rec_nec_send_repeat_6122:
+5df9 58002328 setarg 9000 
+5dfa 20405dde call rec_nec_carrier 
+5dfb 580008ca setarg 2250 
+5dfc 20405ddc call rec_nec_empty 
+5dfd 58000230 setarg 560 
+5dfe 20405dde call rec_nec_carrier 
+5dff 58000001 setarg 1 
+5e00 20205ddc branch rec_nec_empty 
+
+rec_nec_6122_start:
+5e01 20405dbb call rec_nec_send_userdata_6122 
+5e02 20405e0c call rec_nec_send_repeat_6122_timer_init 
+5e03 700d9410 jam 16 ,mem_rec_nec_timer 
+5e04 20600000 rtn 
+
+rec_nec_disable:
+5e05 20405e10 call rec_nec_send_repeat_6122_timer_clear 
+
+rec_nec_6122_stop:
+5e06 20407103 call pwm_disable 
+
+rec_nec_io_disable:
+5e07 6fe0ce33 fetch 1 ,mem_rec_nec_send_gpio 
+
+rec_gpio_config_output_low:
+5e08 d840003e arg gpcfg_output_low ,temp 
+5e09 20206f1d branch gpio_config_function_int 
+
+rec_gpio_config_output_high:
+5e0a d840003f arg gpcfg_output_high ,temp 
+5e0b 20206f1d branch gpio_config_function_int 
+
+rec_nec_send_repeat_6122_timer_init:
+5e0c 5800002b setarg 43 
+
+rec_nec_timer_set:
+5e0d 67e08d95 store 1 ,mem_rec_nec_timeout 
+5e0e 67e08d94 store 1 ,mem_rec_nec_timer 
+5e0f 20600000 rtn 
+
+rec_nec_send_repeat_6122_timer_clear:
+5e10 58000000 setarg 0 
+5e11 20205e0d branch rec_nec_timer_set 
+
+rec_nec_rx_num:
+5e12 6ff10120 fetch 2 ,core_nec_wptr 
+5e13 68590066 fetcht 2 ,core_nec_rptr 
+5e14 98467e00 isub temp ,pdata 
+5e15 24215e17 nbranch rec_nec_rptr_big_wptr ,positive 
+5e16 20600000 rtn 
+
+rec_nec_rptr_big_wptr:
+5e17 68590120 fetcht 2 ,core_nec_wptr 
+5e18 6ff10066 fetch 2 ,core_nec_rptr 
+5e19 98460400 isub temp ,temp 
+5e1a 58000100 setarg nec_store_buf_size 
+5e1b 98467e00 isub temp ,pdata 
+5e1c 20600000 rtn 
+
+rec_nec_receive_data:
+5e1d 6ff10066 fetch 2 ,core_nec_rptr 
+5e1e e841803f ifetcht 3 ,pdata 
+5e1f 60488dd2 storet 1 ,mem_rec_nec_receive_data0 
+5e20 184c8400 rshift8 temp ,temp 
+5e21 60488dd3 storet 1 ,mem_rec_nec_receive_data1 
+5e22 184c8400 rshift8 temp ,temp 
+5e23 60488dd4 storet 1 ,mem_rec_nec_receive_data2 
+5e24 6fe08dd2 fetch 1 ,mem_rec_nec_receive_data0 
+5e25 1fe17e80 and_into 0x80 ,pdata 
+5e26 c0c05e28 bne 0x80 ,rec_nec_receive_one_data 
+5e27 20205e33 branch rec_nec_receive_two_data 
+
+rec_nec_receive_one_data:
+5e28 6fe08dd2 fetch 1 ,mem_rec_nec_receive_data0 
+5e29 67e08dd5 store 1 ,mem_rec_nec_receive_data 
+5e2a 6ff10066 fetch 2 ,core_nec_rptr 
+5e2b 68590064 fetcht 2 ,core_nec_end_addr 
+5e2c 98467e00 isub temp ,pdata 
+5e2d 20215e5b branch rec_nec_rptr_reset ,positive 
+5e2e 6ff10066 fetch 2 ,core_nec_rptr 
+5e2f 1fe0fe01 increase 1 ,pdata 
+5e30 67f10066 store 2 ,core_nec_rptr 
+5e31 700dd801 jam 1 ,mem_rec_nec_data 
+5e32 20600000 rtn 
+
+rec_nec_receive_two_data:
+5e33 6fe08dd4 fetch 1 ,mem_rec_nec_receive_data2 
+5e34 1fe17e80 and_into 0x80 ,pdata 
+5e35 c0405e46 beq 0x80 ,rec_nec_receive_three_data 
+5e36 6fe08dd3 fetch 1 ,mem_rec_nec_receive_data1 
+5e37 1fed7e00 lshift8 pdata ,pdata 
+5e38 1fe37e00 rshift pdata ,pdata 
+5e39 68488dd2 fetcht 1 ,mem_rec_nec_receive_data0 
+5e3a 1841047f and_into 0x7f ,temp 
+5e3b 9841fe00 ior temp ,pdata 
+5e3c 67e10dd5 store 2 ,mem_rec_nec_receive_data 
+5e3d 6ff10066 fetch 2 ,core_nec_rptr 
+5e3e 68590064 fetcht 2 ,core_nec_end_addr 
+5e3f 98467e00 isub temp ,pdata 
+5e40 20215e5b branch rec_nec_rptr_reset ,positive 
+5e41 6ff10066 fetch 2 ,core_nec_rptr 
+5e42 1fe0fe02 increase 2 ,pdata 
+5e43 67f10066 store 2 ,core_nec_rptr 
+5e44 700dd802 jam 2 ,mem_rec_nec_data 
+5e45 20600000 rtn 
+
+rec_nec_receive_three_data:
+5e46 6fe08dd4 fetch 1 ,mem_rec_nec_receive_data2 
+5e47 1fe17e7f and_into 0x7f ,pdata 
+5e48 1ff07e00 lshift16 pdata ,pdata 
+5e49 1fe32200 rshift pdata ,rega 
+5e4a 6fe08dd3 fetch 1 ,mem_rec_nec_receive_data1 
+5e4b 1fed7e00 lshift8 pdata ,pdata 
+5e4c 1fe37e00 rshift pdata ,pdata 
+5e4d 68488dd2 fetcht 1 ,mem_rec_nec_receive_data0 
+5e4e 1841047f and_into 0x7f ,temp 
+5e4f 9841fe00 ior temp ,pdata 
+5e50 9a21fe00 ior rega ,pdata 
+5e51 67e18dd5 store 3 ,mem_rec_nec_receive_data 
+5e52 6ff10066 fetch 2 ,core_nec_rptr 
+5e53 68590064 fetcht 2 ,core_nec_end_addr 
+5e54 98467e00 isub temp ,pdata 
+5e55 20215e5b branch rec_nec_rptr_reset ,positive 
+5e56 6ff10066 fetch 2 ,core_nec_rptr 
+5e57 1fe0fe03 increase 3 ,pdata 
+5e58 67f10066 store 2 ,core_nec_rptr 
+5e59 700dd803 jam 3 ,mem_rec_nec_data 
+5e5a 20600000 rtn 
+
+rec_nec_rptr_reset:
+5e5b d8400a88 arg mem_rec_nec_rx_start ,temp 
+5e5c 9840fe00 iadd temp ,pdata 
+5e5d 67f10066 store 2 ,core_nec_rptr 
+5e5e 20600000 rtn 
+
+rec_nec_receiver_init_wtr:
+5e5f 58000b88 setarg mem_rec_nec_rx_store_start 
+5e60 67e10dcc store 2 ,mem_rec_nec_store_sptr 
+5e61 67e10dd0 store 2 ,mem_rec_nec_store_wptr 
+5e62 20600000 rtn 
+
+rec_nec_carry_time:
+5e63 20405e6c call rec_nec_carry_store 
+5e64 6fe08dd5 fetch 1 ,mem_rec_nec_receive_data 
+5e65 68490ddc fetcht 2 ,mem_rec_nec_carry_time 
+5e66 9840fe00 iadd temp ,pdata 
+5e67 67e10ddc store 2 ,mem_rec_nec_carry_time 
+5e68 58000000 setarg 0 
+5e69 67e18dd5 store 3 ,mem_rec_nec_receive_data 
+5e6a 67e08dd8 store 1 ,mem_rec_nec_data 
+5e6b 20600000 rtn 
+
+rec_nec_carry_store:
+5e6c 6fe08db7 fetch 1 ,mem_rec_period_cal_count 
+5e6d 1fe67c14 sub pdata ,20 ,null 
+5e6e 20628000 rtn zero 
+5e6f 1fe0fe01 increase 1 ,pdata 
+5e70 67e08db7 store 1 ,mem_rec_period_cal_count 
+5e71 6fe08dd5 fetch 1 ,mem_rec_nec_receive_data 
+5e72 68490db5 fetcht 2 ,mem_rec_period_cal_ptr 
+5e73 e7e08002 istore 1 ,temp 
+5e74 18408401 increase 1 ,temp 
+5e75 60490db5 storet 2 ,mem_rec_period_cal_ptr 
+5e76 20600000 rtn 
+
+rec_nec_receive_run_time:
+5e77 6ff20100 fetch 4 ,core_clkn 
+5e78 684a0dde fetcht 4 ,mem_rec_nec_learn_stime 
+5e79 98467e00 isub temp ,pdata 
+5e7a 20600000 rtn 
+
+rec_nec_receive_timeout:
+5e7b 684a0de6 fetcht 4 ,mem_rec_nec_learn_outtime 
+5e7c 98467c00 isub temp ,null 
+5e7d 20600000 rtn 
+
+rec_nec_update_timeout:
+5e7e 6ff20100 fetch 4 ,core_clkn 
+5e7f 67e20dde store 4 ,mem_rec_nec_learn_stime 
+5e80 5800026c setarg 620 
+5e81 67e20de6 store 4 ,mem_rec_nec_learn_outtime 
+5e82 20600000 rtn 
+
+rec_nec_learn_analysis:
+5e83 6fe08d93 fetch 1 ,mem_rec_nec_rx_count 
+5e84 207a0000 rtn blank 
+5e85 1feffe04 mul32 pdata ,4 ,pdata 
+5e86 1fe0fff6 increase -10 ,pdata 
+5e87 1fe27200 copy pdata ,loopcnt 
+5e88 67e08c90 store 1 ,mem_rec_nec_rx_len 
+5e89 d8c00b88 arg mem_rec_nec_rx_store_start ,contr 
+5e8a 18c08c06 increase 6 ,contr 
+5e8b d8a00c93 arg mem_rec_nec_rx_data ,contw 
+5e8c 20207cdc branch memcpy 
+
+rec_audio_adpcm_encode:
+5e8d 704db528 jam 40 ,mem_rec_ad_in_numsamples1 
+5e8e 6fe14df2 fetch 2 ,mem_rec_adc_dma_rptr 
+5e8f 67e14db6 store 2 ,mem_rec_ad_in_ptr1 
+5e90 58000a24 setarg mem_rec_adpcm 
+5e91 67e14db8 store 2 ,mem_rec_ad_out_ptr1 
+
+rec_adpcm_encode:
+5e92 6fe24dad fetch 4 ,mem_rec_ad_state_valpred1 
+5e93 67e24dc0 store 4 ,mem_rec_ad_valpred1 
+5e94 6fe24db1 fetch 4 ,mem_rec_ad_state_index1 
+5e95 67e24dc4 store 4 ,mem_rec_ad_index1 
+5e96 6fe0cdc4 fetch 1 ,mem_rec_ad_index1 
+5e97 1febfe00 lshift2 pdata ,pdata 
+5e98 d8404c49 arg mem_rec_ad_stepsizetable1 ,temp 
+5e99 98408400 iadd temp ,temp 
+5e9a efe20002 ifetch 4 ,temp 
+5e9b 67e24dbc store 4 ,mem_rec_ad_step1 
+5e9c 704dd001 jam 1 ,mem_rec_ad_bufferstep1 
+
+rec_adpcm_encode_loop:
+5e9d 20405f3c call rec_adpcm_get_val_from_inp 
+5e9e 6fe24dd1 fetch 4 ,mem_rec_ad_val1 
+5e9f 684a4dc0 fetcht 4 ,mem_rec_ad_valpred1 
+5ea0 98467e00 isub temp ,pdata 
+5ea1 67e24dd9 store 4 ,mem_rec_ad_diff1 
+5ea2 20405ed7 call rec_adpcm_encode_cal_delta 
+5ea3 20405ede call rec_adpcm_set_diff_by_sign 
+5ea4 704dbb00 jam 0 ,mem_rec_ad_delta1 
+5ea5 6fe24dbc fetch 4 ,mem_rec_ad_step1 
+5ea6 1fe97e00 rshift3 pdata ,pdata 
+5ea7 67e24dc8 store 4 ,mem_rec_ad_vpdiff1 
+5ea8 20405ee5 call rec_check_diff_big_step1 
+5ea9 6fe24dbc fetch 4 ,mem_rec_ad_step1 
+5eaa 1fe37e00 rshift pdata ,pdata 
+5eab 67e24dbc store 4 ,mem_rec_ad_step1 
+5eac 20405ef3 call rec_check_diff_big_step2 
+5ead 6fe24dbc fetch 4 ,mem_rec_ad_step1 
+5eae 1fe37e00 rshift pdata ,pdata 
+5eaf 67e24dbc store 4 ,mem_rec_ad_step1 
+5eb0 20405efb call rec_check_diff_big_step3 
+5eb1 20405f03 call rec_check_sign_deal1 
+5eb2 20405f0e call rec_adpcm_check_valpred_more_32767 
+5eb3 6fe0cdbb fetch 1 ,mem_rec_ad_delta1 
+5eb4 6848cdba fetcht 1 ,mem_rec_ad_sign1 
+5eb5 9841fe00 ior temp ,pdata 
+5eb6 67e0cdbb store 1 ,mem_rec_ad_delta1 
+5eb7 6fe0cdbb fetch 1 ,mem_rec_ad_delta1 
+5eb8 d8404c39 arg mem_rec_ad_indextable1 ,temp 
+5eb9 98408400 iadd temp ,temp 
+5eba efe08002 ifetch 1 ,temp 
+5ebb 20405f49 call rec_char_2_int32 
+5ebc 684a4dc4 fetcht 4 ,mem_rec_ad_index1 
+5ebd 9840fe00 iadd temp ,pdata 
+5ebe 67e24dc4 store 4 ,mem_rec_ad_index1 
+5ebf 20405f1b call rec_adpcm_check_index_less_0 
+5ec0 20405f20 call rec_adpcm_check_index_big_88 
+5ec1 6fe24dc4 fetch 4 ,mem_rec_ad_index1 
+5ec2 1febfe00 lshift2 pdata ,pdata 
+5ec3 d8404c49 arg mem_rec_ad_stepsizetable1 ,temp 
+5ec4 98408400 iadd temp ,temp 
+5ec5 efe20002 ifetch 4 ,temp 
+5ec6 67e24dbc store 4 ,mem_rec_ad_step1 
+5ec7 20405f2a call rec_adpcm_check_bufferstep 
+5ec8 6fe0cdd0 fetch 1 ,mem_rec_ad_bufferstep1 
+5ec9 d8400001 arg 0x01 ,temp 
+5eca 9842fe00 ixor temp ,pdata 
+5ecb 67e0cdd0 store 1 ,mem_rec_ad_bufferstep1 
+5ecc 6fe0cdb5 fetch 1 ,mem_rec_ad_in_numsamples1 
+5ecd 1fe0ffff increase -1 ,pdata 
+5ece 67e0cdb5 store 1 ,mem_rec_ad_in_numsamples1 
+5ecf 243a5e9d nbranch rec_adpcm_encode_loop ,blank 
+5ed0 6fe0cdd0 fetch 1 ,mem_rec_ad_bufferstep1 
+5ed1 205a5f3a call rec_adpcm_set_bufferstep_to_outp ,blank 
+5ed2 6fe24dc0 fetch 4 ,mem_rec_ad_valpred1 
+5ed3 67e24dad store 4 ,mem_rec_ad_state_valpred1 
+5ed4 6fe24dc4 fetch 4 ,mem_rec_ad_index1 
+5ed5 67e24db1 store 4 ,mem_rec_ad_state_index1 
+5ed6 20600000 rtn 
+
+rec_adpcm_encode_cal_delta:
+5ed7 6fe24dd9 fetch 4 ,mem_rec_ad_diff1 
+5ed8 c28fdedc bbit1 31 ,rec_adpcm_encode_cal_smaller_zero 
+5ed9 58000000 setarg 0 
+
+rec_adpcm_encode_store_sign1:
+5eda 67e0cdba store 1 ,mem_rec_ad_sign1 
+5edb 20600000 rtn 
+
+rec_adpcm_encode_cal_smaller_zero:
+5edc 58000008 setarg 8 
+5edd 20205eda branch rec_adpcm_encode_store_sign1 
+
+rec_adpcm_set_diff_by_sign:
+5ede 6fe0cdba fetch 1 ,mem_rec_ad_sign1 
+5edf 243a5ee1 nbranch rec_adpcm_diff_negation ,blank 
+5ee0 20600000 rtn 
+
+rec_adpcm_diff_negation:
+5ee1 6fe24dd9 fetch 4 ,mem_rec_ad_diff1 
+5ee2 1fe67e00 sub pdata ,0 ,pdata 
+5ee3 67e24dd9 store 4 ,mem_rec_ad_diff1 
+5ee4 20600000 rtn 
+
+rec_check_diff_big_step1:
+5ee5 6fe24dd9 fetch 4 ,mem_rec_ad_diff1 
+5ee6 684a4dbc fetcht 4 ,mem_rec_ad_step1 
+5ee7 98467e00 isub temp ,pdata 
+5ee8 c38f8000 rtnbit1 31 
+5ee9 704dbb04 jam 4 ,mem_rec_ad_delta1 
+
+rec_check_diff_big_common:
+5eea 6fe24dd9 fetch 4 ,mem_rec_ad_diff1 
+5eeb 684a4dbc fetcht 4 ,mem_rec_ad_step1 
+5eec 98467e00 isub temp ,pdata 
+5eed 67e24dd9 store 4 ,mem_rec_ad_diff1 
+
+rec_check_diff_big_common_next:
+5eee 6fe24dc8 fetch 4 ,mem_rec_ad_vpdiff1 
+5eef 684a4dbc fetcht 4 ,mem_rec_ad_step1 
+5ef0 9840fe00 iadd temp ,pdata 
+5ef1 67e24dc8 store 4 ,mem_rec_ad_vpdiff1 
+5ef2 20600000 rtn 
+
+rec_check_diff_big_step2:
+5ef3 6fe24dd9 fetch 4 ,mem_rec_ad_diff1 
+5ef4 684a4dbc fetcht 4 ,mem_rec_ad_step1 
+5ef5 98467e00 isub temp ,pdata 
+5ef6 c38f8000 rtnbit1 31 
+5ef7 6fe0cdbb fetch 1 ,mem_rec_ad_delta1 
+5ef8 1fe1fe02 or pdata ,2 ,pdata 
+5ef9 67e0cdbb store 1 ,mem_rec_ad_delta1 
+5efa 20205eea branch rec_check_diff_big_common 
+
+rec_check_diff_big_step3:
+5efb 6fe24dd9 fetch 4 ,mem_rec_ad_diff1 
+5efc 684a4dbc fetcht 4 ,mem_rec_ad_step1 
+5efd 98467e00 isub temp ,pdata 
+5efe c38f8000 rtnbit1 31 
+5eff 6fe0cdbb fetch 1 ,mem_rec_ad_delta1 
+5f00 1fe1fe01 or pdata ,1 ,pdata 
+5f01 67e0cdbb store 1 ,mem_rec_ad_delta1 
+5f02 20205eee branch rec_check_diff_big_common_next 
+
+rec_check_sign_deal1:
+5f03 6fe0cdba fetch 1 ,mem_rec_ad_sign1 
+5f04 203a5f0a branch rec_valpred_add_vpdiff ,blank 
+
+rec_valpred_sub_vpdiff:
+5f05 6fe24dc0 fetch 4 ,mem_rec_ad_valpred1 
+5f06 684a4dc8 fetcht 4 ,mem_rec_ad_vpdiff1 
+5f07 98467e00 isub temp ,pdata 
+
+rec_valpred1_store:
+5f08 67e24dc0 store 4 ,mem_rec_ad_valpred1 
+5f09 20600000 rtn 
+
+rec_valpred_add_vpdiff:
+5f0a 6fe24dc0 fetch 4 ,mem_rec_ad_valpred1 
+5f0b 684a4dc8 fetcht 4 ,mem_rec_ad_vpdiff1 
+5f0c 9840fe00 iadd temp ,pdata 
+5f0d 20205f08 branch rec_valpred1_store 
+
+rec_adpcm_check_valpred_more_32767:
+5f0e 6fe24dc0 fetch 4 ,mem_rec_ad_valpred1 
+5f0f d8407fff arg 32767 ,temp 
+5f10 98467e00 isub temp ,pdata 
+5f11 c30fdf17 bbit0 31 ,rec_adpcm_valpred_more_32767 
+
+rec_adpcm_check_valpred_less_f32767:
+5f12 6fe24dc0 fetch 4 ,mem_rec_ad_valpred1 
+5f13 d85f8001 arg -32767 ,temp 
+5f14 98467e00 isub temp ,pdata 
+5f15 c28fdf19 bbit1 31 ,rec_adpcm_valpred_less_f32767 
+5f16 20600000 rtn 
+
+rec_adpcm_valpred_more_32767:
+5f17 58007fff setarg 32767 
+5f18 20205f08 branch rec_valpred1_store 
+
+rec_adpcm_valpred_less_f32767:
+5f19 5fff8001 setarg -32767 
+5f1a 20205f08 branch rec_valpred1_store 
+
+rec_adpcm_check_index_less_0:
+5f1b 6fe24dc4 fetch 4 ,mem_rec_ad_index1 
+5f1c d8400000 arg 0 ,temp 
+5f1d 98467e00 isub temp ,pdata 
+5f1e c28fdf25 bbit1 31 ,rec_adpcm_set_0_index 
+5f1f 20600000 rtn 
+
+rec_adpcm_check_index_big_88:
+5f20 6fe24dc4 fetch 4 ,mem_rec_ad_index1 
+5f21 d8400058 arg 88 ,temp 
+5f22 98467e00 isub temp ,pdata 
+5f23 c30fdf28 bbit0 31 ,rec_adpcm_set_88_index 
+5f24 20600000 rtn 
+
+rec_adpcm_set_0_index:
+5f25 58000000 setarg 0 
+
+rec_adpcm_store_index1:
+5f26 67e24dc4 store 4 ,mem_rec_ad_index1 
+5f27 20600000 rtn 
+
+rec_adpcm_set_88_index:
+5f28 58000058 setarg 88 
+5f29 20205f26 branch rec_adpcm_store_index1 
+
+rec_adpcm_check_bufferstep:
+5f2a 6fe0cdd0 fetch 1 ,mem_rec_ad_bufferstep1 
+5f2b 203a5f30 branch rec_adpcm_bufferstep_eque_0 ,blank 
+
+rec_adpcm_bufferstep_neque_0:
+5f2c 6fe0cdbb fetch 1 ,mem_rec_ad_delta1 
+5f2d 1fe17e0f and pdata ,0x0f ,pdata 
+5f2e 67e24dd5 store 4 ,mem_rec_ad_outputbuffer1 
+5f2f 20600000 rtn 
+
+rec_adpcm_bufferstep_eque_0:
+5f30 6fe0cdbb fetch 1 ,mem_rec_ad_delta1 
+5f31 1ff27e00 lshift4 ,pdata ,pdata 
+5f32 1fe17ef0 and pdata ,0xf0 ,pdata 
+5f33 684a4dd5 fetcht 4 ,mem_rec_ad_outputbuffer1 
+5f34 9841fe00 ior temp ,pdata 
+
+rec_adpcm_bufferstep_increase_out_ptr1:
+5f35 68494db8 fetcht 2 ,mem_rec_ad_out_ptr1 
+5f36 e7e08002 istore 1 ,temp 
+5f37 18408401 increase 1 ,temp 
+5f38 60494db8 storet 2 ,mem_rec_ad_out_ptr1 
+5f39 20600000 rtn 
+
+rec_adpcm_set_bufferstep_to_outp:
+5f3a 6fe24dd5 fetch 4 ,mem_rec_ad_outputbuffer1 
+5f3b 20205f35 branch rec_adpcm_bufferstep_increase_out_ptr1 
+
+rec_adpcm_get_val_from_inp:
+5f3c 68494db6 fetcht 2 ,mem_rec_ad_in_ptr1 
+5f3d efe10002 ifetch 2 ,temp 
+5f3e 18408402 increase 2 ,temp 
+5f3f 60494db6 storet 2 ,mem_rec_ad_in_ptr1 
+5f40 20405f43 call rec_int16_2_int32 
+5f41 67e24dd1 store 4 ,mem_rec_ad_val1 
+5f42 20600000 rtn 
+
+rec_int16_2_int32:
+5f43 c287df45 bbit1 15 ,rec_int16_2_int32_less_0 
+5f44 20600000 rtn 
+
+rec_int16_2_int32_less_0:
+5f45 d840ffff arg 0xffff ,temp 
+5f46 18500400 lshift16 temp ,temp 
+
+rec_calca_ixor:
+5f47 9842fe00 ixor temp ,pdata 
+5f48 20600000 rtn 
+
+rec_char_2_int32:
+5f49 c283df4b bbit1 7 ,rec_char_2_int32_less_0 
+5f4a 20600000 rtn 
+
+rec_char_2_int32_less_0:
+5f4b d85fffff arg 0xffffff ,temp 
+5f4c 184d0400 lshift8 temp ,temp 
+5f4d 20205f47 branch rec_calca_ixor 
+
+rec_voice_notify_apk:
+5f4e da200014 arg 20 ,rega 
+5f4f 68494df4 fetcht 2 ,mem_rec_voice_notify_apk_handle 
+
+rec_le_notify_data:
+5f50 20402dcc call le_att_malloc_tx_notify 
+5f51 d8c04dde arg mem_rec_voice_notify ,contr 
+5f52 df200014 arg 20 ,loopcnt 
+5f53 20207cdc branch memcpy 
+
+rec_voice_start_apk:
+5f54 70064e01 jam 0x01 ,mem_pdatatemp 
+
+rec_voice_notify_apk_data:
+5f55 704c0a01 jam 1 ,mem_rec_le_data_len 
+5f56 68494df8 fetcht 2 ,mem_rec_control_notify_apk_handle 
+5f57 20205d94 branch rec_le_send_data 
+
+rec_voice_end_apk:
+5f58 70064e00 jam 0x00 ,mem_pdatatemp 
+5f59 20205f55 branch rec_voice_notify_apk_data 
+
+rec_voice_notify_box:
+5f5a da200014 arg 20 ,rega 
+5f5b 68494df6 fetcht 2 ,mem_rec_voice_notify_box_handle 
+5f5c 20205f50 branch rec_le_notify_data 
+
+rec_voice_start_box:
+5f5d 58000221 setarg 0x221 
+
+rec_voice_notify_box_data:
+5f5e 67e1864e store 3 ,mem_pdatatemp 
+5f5f 704c0a03 jam 3 ,mem_rec_le_data_len 
+5f60 68494dfa fetcht 2 ,mem_rec_control_notify_box_handle 
+5f61 20205d94 branch rec_le_send_data 
+
+rec_voice_end_box:
+5f62 5800cccc setarg 0xcccc 
+5f63 20205f5e branch rec_voice_notify_box_data 
+
+rec_ota_process:
+5f64 44ddc017 bpatch patch17_3 ,mem_patch17 
+5f65 1a220c00 copy rega ,contr 
+5f66 efe08006 ifetch 1 ,contr 
+5f67 c1dd0000 rtnne ota_command 
+5f68 efe08006 ifetch 1 ,contr 
+5f69 67e0ce51 store 1 ,mem_rec_ota_notify_opcode 
+5f6a c0085f77 beq ota_portocol_version_request ,rec_ota_parse_protocol_version_req 
+5f6b c008df7f beq ota_buck_size_request ,rec_ota_parse_buck_size_req 
+5f6c c00adf86 beq ota_start_request ,rec_ota_parse_start_req 
+5f6d c00b5fb2 beq ota_data_write_cmd ,rec_ota_parse_data_write_cmd 
+5f6e c00bdfbf beq ota_data_write_request ,rec_ota_prep_data_write_rsp 
+5f6f c00c5fcd beq ota_end_request ,rec_ota_parse_end_req 
+
+rec_ota_init:
+5f70 5fffffff setarg -1 
+5f71 67e14e35 store 2 ,mem_rec_ota_write_index 
+5f72 58000000 setarg 0 
+5f73 67e24e43 store 4 ,mem_rec_ota_total_sum 
+5f74 67e14e37 store 2 ,mem_rec_ota_write_length 
+5f75 704e5200 jam ota_result_success ,mem_rec_ota_notify_result 
+5f76 20600000 rtn 
+
+rec_ota_parse_protocol_version_req:
+5f77 da200005 arg 5 ,rega 
+5f78 20405fc4 call rec_ota_tx_notify_success 
+5f79 6fe14e48 fetch 2 ,mem_rec_ota_version 
+5f7a e7e10005 istore 2 ,contw 
+5f7b 704e6501 jam ota_le_conn_param_update_enable ,mem_rec_ota_le_conn_param_update 
+5f7c 6fe44e5c fetch 8 ,mem_rec_ota_le_conn_update_param 
+5f7d 67e442d5 store 8 ,mem_le_interval_min 
+5f7e 20202e71 branch le_l2cap_tx_update_req 
+
+rec_ota_parse_buck_size_req:
+5f7f da200007 arg 7 ,rega 
+5f80 20405fc4 call rec_ota_tx_notify_success 
+5f81 6fe14e4a fetch 2 ,mem_rec_ota_buck_size 
+5f82 e7e10005 istore 2 ,contw 
+5f83 6fe14e4c fetch 2 ,mem_rec_ota_packet_max_len 
+5f84 e7e10005 istore 2 ,contw 
+5f85 20600000 rtn 
+
+rec_ota_parse_start_req:
+5f86 efe08006 ifetch 1 ,contr 
+5f87 67e0ce47 store 1 ,mem_rec_ota_update_flash_mode 
+5f88 c0005f92 beq ota_update_flash_normal ,rec_ota_parse_start_req_update_normal 
+
+rec_ota_tx_flashmode_not_support:
+5f89 da200004 arg 4 ,rega 
+5f8a 704e5203 jam ota_result_flashmode_not_support ,mem_rec_ota_notify_result 
+5f8b 20405fc5 call rec_ota_tx_notify_common 
+5f8c 6fe0ce47 fetch 1 ,mem_rec_ota_update_flash_mode 
+5f8d 20207dce branch istore_1_contw_rtn 
+
+rec_ota_tx_start_req_success:
+5f8e da200004 arg 4 ,rega 
+5f8f 20405fc4 call rec_ota_tx_notify_success 
+5f90 6fe0ce47 fetch 1 ,mem_rec_ota_update_flash_mode 
+5f91 20207dce branch istore_1_contw_rtn 
+
+rec_ota_parse_start_req_update_normal:
+5f92 20405f8e call rec_ota_tx_start_req_success 
+5f93 20405f70 call rec_ota_init 
+5f94 58000000 setarg 0 
+5f95 67e1ce6b store 3 ,mem_rec_ota_flash_offset_addr 
+5f96 704e6601 jam 1 ,mem_rec_ota_enable 
+5f97 58000000 setarg 0 
+5f98 d8400010 arg 0x10 ,temp 
+5f99 da200c8c arg mem_rec_ota_flash_buf ,rega 
+5f9a 20406c43 call spid_read_flash 
+5f9b 20405fa8 call rec_ota_set_flash_start_addr 
+5f9c 6a21ce68 fetchr rega ,3 ,mem_rec_ota_flash_base_addr 
+5f9d df200009 arg 9 ,loopcnt 
+
+rec_erase_num_sector_flash:
+5f9e 18007000 force 0 ,regext_index 
+
+rec_erase_num_sector_flash_loop:
+5f9f 2040608e call rec_spi_wait_flash 
+5fa0 6221c430 storer rega ,3 ,mem_spi_write_addr 
+5fa1 2040609f call rec_save_loopcnt_rega 
+5fa2 20406bee call spid_flash_erase_sector 
+5fa3 204060a1 call rec_rescue_rega_loopcnt 
+5fa4 58001000 setarg 4096 
+5fa5 9a20a200 iadd rega ,rega 
+5fa6 c2005f9f loop rec_erase_num_sector_flash_loop 
+5fa7 20600000 rtn 
+
+rec_ota_set_flash_start_addr:
+5fa8 4778c03e bpatchx patch3e_1 ,mem_patch3e 
+5fa9 6849ce75 fetcht 3 ,mem_rec_code_b_flash_addr 
+5faa 6049ce68 storet 3 ,mem_rec_ota_flash_base_addr 
+5fab 6049ce40 storet 3 ,mem_rec_ota_write_flash_addr_start 
+5fac 6fe08c8c fetch 1 ,mem_rec_ota_flash_buf 
+5fad c1300000 rtneq 0x60 
+5fae 6849ce72 fetcht 3 ,mem_rec_code_a_flash_addr 
+5faf 6049ce68 storet 3 ,mem_rec_ota_flash_base_addr 
+5fb0 6049ce40 storet 3 ,mem_rec_ota_write_flash_addr_start 
+5fb1 20600000 rtn 
+
+rec_ota_parse_data_write_cmd:
+
+rec_ota_parse_data_write_req:
+
+rec_ota_parse_data_write_data_store:
+5fb2 68494337 fetcht 2 ,mem_le_l2cap_size 
+5fb3 184085f8 increase -8 ,temp 
+5fb4 6fe14e37 fetch 2 ,mem_rec_ota_write_length 
+5fb5 9840fe00 iadd temp ,pdata 
+5fb6 67e14e37 store 2 ,mem_rec_ota_write_length 
+5fb7 18427200 copy temp ,loopcnt 
+5fb8 1a220c00 copy rega ,contr 
+5fb9 18c08c05 increase 5 ,contr 
+5fba 20406052 call rec_queue_ota_push 
+5fbb 6fe14e35 fetch 2 ,mem_rec_ota_write_index 
+5fbc 1fe0fe01 increase 1 ,pdata 
+5fbd 67e14e35 store 2 ,mem_rec_ota_write_index 
+5fbe 20600000 rtn 
+
+rec_ota_prep_data_write_rsp:
+5fbf 20405fb2 call rec_ota_parse_data_write_req 
+5fc0 704e5200 jam ota_result_success ,mem_rec_ota_notify_result 
+5fc1 704e5117 jam ota_data_write_request ,mem_rec_ota_notify_opcode 
+5fc2 da200003 arg 3 ,rega 
+5fc3 20205fc5 branch rec_ota_tx_notify_common 
+
+rec_ota_tx_notify_success:
+5fc4 704e5200 jam ota_result_success ,mem_rec_ota_notify_result 
+
+rec_ota_tx_notify_common:
+5fc5 68494e4f fetcht 2 ,mem_rec_ota_notify_handle 
+5fc6 20402dcc call le_att_malloc_tx_notify 
+5fc7 580000ab setarg ota_event 
+5fc8 e7e08005 istore 1 ,contw 
+5fc9 6fe0ce52 fetch 1 ,mem_rec_ota_notify_result 
+5fca e7e08005 istore 1 ,contw 
+5fcb 6fe0ce51 fetch 1 ,mem_rec_ota_notify_opcode 
+5fcc 20207dce branch istore_1_contw_rtn 
+
+rec_ota_parse_end_req:
+5fcd 18007000 force 0 ,regext_index 
+5fce 20406097 call rec_save_contr 
+5fcf 20405ff2 call rec_ota_data2flash_remain 
+5fd0 704e6600 jam 0 ,mem_rec_ota_enable 
+5fd1 58000000 setarg 0 
+5fd2 67e1ce6b store 3 ,mem_rec_ota_flash_offset_addr 
+5fd3 67e24e43 store 4 ,mem_rec_ota_total_sum 
+5fd4 20406007 call rec_ota_sum_all 
+5fd5 20406099 call rec_rescue_contr 
+5fd6 18c08c01 increase 1 ,contr 
+5fd7 efe20006 ifetch 4 ,contr 
+5fd8 67e2064e store 4 ,mem_pdatatemp 
+5fd9 efe20006 ifetch 4 ,contr 
+5fda 67e20652 store 4 ,mem_pdatatemp + 4 
+5fdb 6fe2064e fetch 4 ,mem_pdatatemp 
+5fdc 684a4e37 fetcht 4 ,mem_rec_ota_write_length 
+5fdd 98467c00 isub temp ,null 
+5fde 2422dfee nbranch rec_ota_tx_length_error ,zero 
+5fdf 6fe24e43 fetch 4 ,mem_rec_ota_total_sum 
+5fe0 684a0652 fetcht 4 ,mem_pdatatemp + 4 
+5fe1 98467c00 isub temp ,null 
+5fe2 2422dff0 nbranch rec_ota_result_error_write_flash ,zero 
+5fe3 20406070 call rec_ota_updata_head 
+5fe4 704e6402 jam 2 ,mem_rec_ota_reset_timeout 
+
+rec_ota_tx_end_req_return:
+5fe5 da20000c arg 0x0c ,rega 
+5fe6 20405fc5 call rec_ota_tx_notify_common 
+5fe7 6fe0ce47 fetch 1 ,mem_rec_ota_update_flash_mode 
+5fe8 e7e08005 istore 1 ,contw 
+5fe9 6fe24e37 fetch 4 ,mem_rec_ota_write_length 
+5fea e7e20005 istore 4 ,contw 
+5feb 6fe24e43 fetch 4 ,mem_rec_ota_total_sum 
+5fec e7e20005 istore 4 ,contw 
+5fed 20600000 rtn 
+
+rec_ota_tx_length_error:
+5fee 704e5205 jam ota_result_length_error ,mem_rec_ota_notify_result 
+5fef 20205fe5 branch rec_ota_tx_end_req_return 
+
+rec_ota_result_error_write_flash:
+5ff0 704e5207 jam ota_result_write_flash_error ,mem_rec_ota_notify_result 
+5ff1 20600000 rtn 
+
+rec_ota_data2flash_remain:
+5ff2 6fe0ce66 fetch 1 ,mem_rec_ota_enable 
+5ff3 207a0000 rtn blank 
+5ff4 20406001 call rec_ota_queue_count_256 
+5ff5 20610000 rtn positive 
+5ff6 68494e6e fetcht 2 ,mem_rec_queue_ota_count 
+5ff7 204060a7 call rec_save_temp 
+5ff8 18427200 copy temp ,loopcnt 
+5ff9 d8a00c8c arg mem_rec_ota_flash_buf ,contw 
+5ffa 20406061 call rec_queue_ota_pop 
+5ffb 2040608e call rec_spi_wait_flash 
+5ffc 204060a9 call rec_rescue_temp 
+5ffd 204060a7 call rec_save_temp 
+5ffe 20406041 call rec_ota_data2flash 
+5fff 204060a9 call rec_rescue_temp 
+6000 2020603d branch rec_ota_increase_flash_offset_addr 
+
+rec_ota_queue_count_256:
+6001 6fe14e6e fetch 2 ,mem_rec_queue_ota_count 
+6002 d8400100 arg 256 ,temp 
+6003 98467c00 isub temp ,null 
+6004 20600000 rtn 
+
+rec_ota_sum_page:
+6005 df200100 arg 0x100 ,loopcnt 
+6006 20206017 branch rec_ota_sum 
+
+rec_ota_sum_all:
+6007 6fe14e37 fetch 2 ,mem_rec_ota_write_length 
+6008 68494e6b fetcht 2 ,mem_rec_ota_flash_offset_addr 
+6009 98467e00 isub temp ,pdata 
+600a 20628000 rtn zero 
+600b 20405d15 call rec_save_reg 
+600c 2040601d call rec_ota_data_from_flash_len 
+600d 20405d18 call rec_rescue_reg 
+600e 20406013 call rec_ota_sum_len 
+600f 6fe24e43 fetch 4 ,mem_rec_ota_total_sum 
+6010 9840fe00 iadd temp ,pdata 
+6011 67e24e43 store 4 ,mem_rec_ota_total_sum 
+6012 20206007 branch rec_ota_sum_all 
+
+rec_ota_sum_len:
+6013 d8400100 arg 0x100 ,temp 
+6014 98467c00 isub temp ,null 
+6015 20216005 branch rec_ota_sum_page ,positive 
+6016 1fe27200 copy pdata ,loopcnt 
+
+rec_ota_sum:
+6017 d8c00c8c arg mem_rec_ota_flash_buf ,contr 
+6018 d8400000 arg 0 ,temp 
+
+rec_ota_sum_loop:
+6019 efe08006 ifetch 1 ,contr 
+601a 98408400 iadd temp ,temp 
+601b c2006019 loop rec_ota_sum_loop 
+601c 20600000 rtn 
+
+rec_ota_data_from_flash_len:
+601d d8400100 arg 0x100 ,temp 
+601e 98467c00 isub temp ,null 
+601f 2021602b branch rec_ota_data_from_flash_page ,positive 
+6020 20405d15 call rec_save_reg 
+6021 1fe27200 copy pdata ,loopcnt 
+6022 20406026 call rec_ota_data_from_flash 
+6023 20405d18 call rec_rescue_reg 
+6024 1fe20400 copy pdata ,temp 
+6025 2020603d branch rec_ota_increase_flash_offset_addr 
+
+rec_ota_data_from_flash:
+6026 6fe1ce68 fetch 3 ,mem_rec_ota_flash_base_addr 
+6027 6a41ce6b fetchr regb ,3 ,mem_rec_ota_flash_offset_addr 
+6028 9a40fe00 iadd regb ,pdata 
+6029 da200c8c arg mem_rec_ota_flash_buf ,rega 
+602a 20206c43 branch spid_read_flash 
+
+rec_ota_data_from_flash_page:
+602b d8400100 arg 0x100 ,temp 
+602c 20406026 call rec_ota_data_from_flash 
+602d d8400100 arg 0x100 ,temp 
+602e 2020603d branch rec_ota_increase_flash_offset_addr 
+
+rec_ota_polling:
+602f 6fe0ce66 fetch 1 ,mem_rec_ota_enable 
+6030 245a6032 ncall rec_ota_data2flash_page ,blank 
+6031 20600000 rtn 
+
+rec_ota_data2flash_page:
+6032 6fe0ce66 fetch 1 ,mem_rec_ota_enable 
+6033 207a0000 rtn blank 
+6034 20406001 call rec_ota_queue_count_256 
+6035 24610000 nrtn positive 
+6036 df200100 arg 256 ,loopcnt 
+6037 d8a00c8c arg mem_rec_ota_flash_buf ,contw 
+6038 20406061 call rec_queue_ota_pop 
+6039 2040608e call rec_spi_wait_flash 
+603a d8400100 arg 256 ,temp 
+603b 20406041 call rec_ota_data2flash 
+603c d8400100 arg 256 ,temp 
+
+rec_ota_increase_flash_offset_addr:
+603d 6fe14e6b fetch 2 ,mem_rec_ota_flash_offset_addr 
+603e 9840fe00 iadd temp ,pdata 
+603f 67e14e6b store 2 ,mem_rec_ota_flash_offset_addr 
+6040 20600000 rtn 
+
+rec_ota_data2flash:
+6041 6fe1ce68 fetch 3 ,mem_rec_ota_flash_base_addr 
+6042 6a41ce6b fetchr regb ,3 ,mem_rec_ota_flash_offset_addr 
+6043 9a40fe00 iadd regb ,pdata 
+6044 da200c8c arg mem_rec_ota_flash_buf ,rega 
+6045 20206c29 branch spid_write_flash_data 
+
+rec_queue_ota_init:
+6046 580006ef setarg mem_rec_queue_ota_buf 
+6047 68494e70 fetcht 2 ,mem_rec_ota_queue_size 
+
+rec_queue_init_config:
+6048 184085ff increase -1 ,temp 
+6049 1fe20a00 copy pdata ,contw 
+604a 18a08bf8 increase -8 ,contw 
+604b e7e10005 istore 2 ,contw 
+604c 9840fe00 iadd temp ,pdata 
+604d e7e10005 istore 2 ,contw 
+604e 98467e00 isub temp ,pdata 
+604f e7e10005 istore 2 ,contw 
+6050 e7e10005 istore 2 ,contw 
+6051 20600000 rtn 
+
+rec_queue_ota_push:
+6052 20406097 call rec_save_contr 
+6053 44de4017 bpatch patch17_4 ,mem_patch17 
+6054 6fe14e6e fetch 2 ,mem_rec_queue_ota_count 
+6055 9f20fe00 iadd loopcnt ,pdata 
+6056 67e14e6e store 2 ,mem_rec_queue_ota_count 
+6057 580006ef setarg mem_rec_queue_ota_buf 
+6058 204060ac call rec_queue_enter_config 
+6059 20406099 call rec_rescue_contr 
+605a 204060c0 call rec_enter_queue 
+605b 6fe14e6e fetch 2 ,mem_rec_queue_ota_count 
+605c 68494e70 fetcht 2 ,mem_rec_ota_queue_size 
+605d 98467c00 isub temp ,null 
+605e 20416060 call rec_queue_ota_data_loss ,positive 
+605f 20600000 rtn 
+
+rec_queue_ota_data_loss:
+6060 20600000 rtn 
+
+rec_queue_ota_pop:
+6061 2040609b call rec_save_contw 
+6062 6fe14e6e fetch 2 ,mem_rec_queue_ota_count 
+6063 9f267e00 isub loopcnt ,pdata 
+6064 67e14e6e store 2 ,mem_rec_queue_ota_count 
+6065 580006ef setarg mem_rec_queue_ota_buf 
+6066 204060b6 call rec_queue_out_config 
+6067 2040609d call rec_rescue_contw 
+
+rec_out_queue:
+6068 18627e00 copy contu ,pdata 
+6069 98467c00 isub temp ,null 
+606a 2022a33e branch assert ,zero 
+
+rec_out_queue_loop:
+606b efe08003 ifetch 1 ,contru 
+606c e7e08005 istore 1 ,contw 
+606d c200606b loop rec_out_queue_loop 
+606e e0610011 istorer contru ,2 ,rega 
+606f 20600000 rtn 
+
+rec_ota_updata_head:
+6070 20406079 call rec_ota_read_head 
+6071 58000000 setarg 0 
+6072 20406085 call rec_spid_flash_erase_page 
+
+rec_ota_write_head_check:
+6073 44dec017 bpatch patch17_5 ,mem_patch17 
+6074 6fe08c8c fetch 1 ,mem_rec_ota_flash_buf 
+6075 c030607d beq 0x60 ,rec_ota_write_head_b 
+6076 c0786077 beq 0xf0 ,rec_ota_write_head_a 
+
+rec_ota_write_head_a:
+6077 6fe1ce72 fetch 3 ,mem_rec_code_a_flash_addr 
+6078 2020607e branch rec_ota_write_head 
+
+rec_ota_read_head:
+6079 58000000 setarg 0 
+607a d8400100 arg 0x100 ,temp 
+607b da200c8c arg mem_rec_ota_flash_buf ,rega 
+607c 20206c43 branch spid_read_flash 
+
+rec_ota_write_head_b:
+607d 6fe1ce75 fetch 3 ,mem_rec_code_b_flash_addr 
+
+rec_ota_write_head:
+607e 1fe0fe02 increase 2 ,pdata 
+607f 1ff0fe00 byteswap pdata ,pdata 
+6080 67e10c8c store 2 ,mem_rec_ota_flash_buf 
+6081 d8400100 arg 0x100 ,temp 
+6082 da200c8c arg mem_rec_ota_flash_buf ,rega 
+6083 58000000 setarg 0 
+6084 20206c29 branch spid_write_flash_data 
+
+rec_spid_flash_erase_page:
+6085 67e1c430 store 3 ,mem_spi_write_addr 
+6086 2040608e call rec_spi_wait_flash 
+6087 20406c16 call spid_init_flash 
+6088 20406c1c call spid_unlock_flash 
+6089 da2001bc arg mem_spid_tbuf ,rega 
+608a 70808204 jam 4 ,core_spid_txlen 
+608b 6fe1c430 fetch 3 ,mem_spi_write_addr 
+608c d8400081 arg flash_command_page_erase ,temp 
+608d 20206c36 branch spid_write_flash_common 
+
+rec_spi_wait_flash:
+608e 580001bc setarg mem_spid_tbuf 
+608f 67f10084 store 2 ,core_spid_txaddr 
+6090 580001c1 setarg mem_spid_rbuf 
+6091 67f10086 store 2 ,core_spid_rxaddr 
+6092 70808300 jam 0 ,core_spid_txlen + 1 
+6093 58000005 setarg flash_read_satus 
+6094 20406bcd call spid_read_reg 
+6095 c280608e bbit1 flash_status_wip ,rec_spi_wait_flash 
+6096 20600000 rtn 
+
+rec_save_contr:
+6097 18c27e00 copy contr ,pdata 
+6098 20205d15 branch rec_save_reg 
+
+rec_rescue_contr:
+6099 20405d18 call rec_rescue_reg 
+609a 20207c6a branch get_contr_end 
+
+rec_save_contw:
+609b 18a27e00 copy contw ,pdata 
+609c 20205d15 branch rec_save_reg 
+
+rec_rescue_contw:
+609d 20405d18 call rec_rescue_reg 
+609e 20207c67 branch get_contw_end 
+
+rec_save_loopcnt_rega:
+609f 204060a5 call rec_save_loopcnt 
+60a0 20205d10 branch rec_save_rega 
+
+rec_rescue_rega_loopcnt:
+60a1 20405d12 call rec_rescue_rega 
+
+rec_rescue_loopcnt:
+60a2 20405d18 call rec_rescue_reg 
+60a3 1fe27200 copy pdata ,loopcnt 
+60a4 20600000 rtn 
+
+rec_save_loopcnt:
+60a5 1f227e00 copy loopcnt ,pdata 
+60a6 20205d15 branch rec_save_reg 
+
+rec_save_temp:
+60a7 18427e00 copy temp ,pdata 
+60a8 20205d15 branch rec_save_reg 
+
+rec_rescue_temp:
+60a9 20405d18 call rec_rescue_reg 
+60aa 1fe20400 copy pdata ,temp 
+60ab 20600000 rtn 
+
+rec_queue_enter_config:
+60ac 1fe0fff8 increase -8 ,pdata 
+60ad e941003f ifetchr contus ,2 ,pdata 
+60ae 1fe0fe02 increase 2 ,pdata 
+60af ea01003f ifetchr contue ,2 ,pdata 
+60b0 1fe0fe02 increase 2 ,pdata 
+60b1 e841003f ifetchr temp ,2 ,pdata 
+60b2 1fe0fe02 increase 2 ,pdata 
+60b3 e861003f ifetchr contu ,2 ,pdata 
+60b4 1fe22200 copy pdata ,rega 
+60b5 20600000 rtn 
+
+rec_queue_out_config:
+60b6 1fe0fff8 increase -8 ,pdata 
+60b7 e941003f ifetchr contus ,2 ,pdata 
+60b8 1fe0fe02 increase 2 ,pdata 
+60b9 ea01003f ifetchr contue ,2 ,pdata 
+60ba 1fe0fe02 increase 2 ,pdata 
+60bb e861003f ifetchr contu ,2 ,pdata 
+60bc 1fe22200 copy pdata ,rega 
+60bd 1fe0fe02 increase 2 ,pdata 
+60be e841003f ifetchr temp ,2 ,pdata 
+60bf 20600000 rtn 
+
+rec_enter_queue:
+
+rec_enter_queue_loop:
+60c0 efe08006 ifetch 1 ,contr 
+60c1 e7e08003 istore 1 ,contwu 
+60c2 c20060c0 loop rec_enter_queue_loop 
+60c3 e0610011 istorer contwu ,2 ,rega 
+60c4 18627e00 copy contwu ,pdata 
+60c5 98467c00 isub temp ,null 
+60c6 2022a33e branch assert ,zero 
+60c7 20600000 rtn 
+
+shutter_init:
+60c8 20407384 call enable_authrom 
+60c9 20758000 rtn wake 
+60ca 58006143 setarg shutter_process_idle 
+60cb 67e143e4 store 2 ,mem_cb_idle_process 
+60cc 580060f3 setarg shutter_process_bb_event 
+60cd 67e143e6 store 2 ,mem_cb_bb_event_process 
+60ce 580061a7 setarg ble_shutter_receive_data 
+60cf 67e143e8 store 2 ,mem_cb_att_write 
+60d0 5800612a setarg shutter_le_bb_event_timer 
+60d1 67e143ec store 2 ,mem_cb_event_timer 
+60d2 58006182 setarg shutter_key_change 
+60d3 67e1453b store 2 ,mem_cb_shutter_keycan 
+60d4 204060dc call shutter_common_init 
+60d5 44df4017 bpatch patch17_6 ,mem_patch17 
+60d6 204061b3 call shutter_load_buffer_config_form_datarom 
+
+shutter_power_switch:
+60d7 6fe0c531 fetch 1 ,mem_shutter_hard_soft_switch_case 
+60d8 c00060ea beq hard_switch ,shutter_hart_swtich_power_on 
+60d9 6fe0c532 fetch 1 ,mem_shutter_soft_switch_button_gpio 
+60da 67e0c503 store 1 ,mem_ui_button_gpio 
+60db 202061be branch ui_soft_swtich_init 
+
+shutter_common_init:
+60dc 58006147 setarg shutter_le_before_hibernate 
+60dd 67e143de store 2 ,mem_cb_before_hibernate 
+60de 58006145 setarg shutter_process_lpm_before 
+60df 67e143e0 store 2 ,mem_cb_before_lpm 
+60e0 5800615d setarg shutter_soft_swtich_power_on 
+60e1 67e14536 store 2 ,mem_shutter_soft_switch_poweron_callback_function 
+60e2 580061b7 setarg shutter_soft_swtich_power_off 
+60e3 67e14538 store 2 ,mem_shutter_soft_switch_poweroff_callback_function 
+60e4 70416007 jam 7 ,mem_version 
+60e5 20402948 call le_modified_name_adv 
+60e6 204061aa call shutter_init_param 
+60e7 2040705b call keyscan_key_init 
+60e8 2040789d call queue_init 
+60e9 2020779a branch ui_led_init_global 
+
+shutter_hart_swtich_power_on:
+60ea 704503ff jam ui_button_gpio_disable ,mem_ui_button_gpio 
+60eb 70453301 jam ss_state_power_on ,mem_shutter_soft_switch_power_state 
+60ec 2020615d branch shutter_start_reconnect 
+
+shutter_le_scale_lpm_lock:
+60ed 6fe0c533 fetch 1 ,mem_shutter_soft_switch_power_state 
+60ee c001377d beq ss_state_power_off ,app_get_lpm_wake_lock 
+60ef 20406945 call l2cap_malloc_get_full_map 
+60f0 6fe0c458 fetch 1 ,mem_used_map 
+60f1 243a377d nbranch app_get_lpm_wake_lock ,blank 
+60f2 2020377f branch app_put_lpm_wake_lock 
+
+shutter_process_bb_event:
+60f3 1a627e00 copy regc ,pdata 
+60f4 c00a60fc beq bt_evt_le_connected ,ble_shutter_process_baseband_connect 
+60f5 c00ae100 beq bt_evt_le_disconnected ,ble_shutter_process_baseband_disconnect 
+60f6 c01fe103 beq bt_evt_le_reconnect_complete ,ble_shutter_process_reconnect_complete 
+60f7 c020610b beq bt_evt_le_parse_conn_papa_update_rsp ,ble_shutter_process_parse_connect_parameter_update_response 
+60f8 c00861d3 beq bt_evt_button_long_pressed ,ui_soft_switch_botton_long_press 
+60f9 c0166111 beq bt_evt_button_down ,shutter_process_soft_swtich_button_down 
+60fa c016e11c beq bt_evt_button_up ,shutter_process_soft_swtich_button_up 
+60fb 20600000 rtn 
+
+ble_shutter_process_baseband_connect:
+60fc 2040614a call shutter_stop_bluetooth_discovery 
+60fd 58000000 setarg 0 
+60fe 67e1450f store 2 ,mem_ble_shutter_reconn_timer 
+60ff 2020379a branch app_led_off 
+
+ble_shutter_process_baseband_disconnect:
+6100 2040789d call queue_init 
+6101 70450800 jam 0 ,mem_ble_shutter_enable_notify 
+6102 2020615d branch shutter_start_reconnect 
+
+ble_shutter_process_reconnect_complete:
+6103 2040789d call queue_init 
+6104 70450801 jam 1 ,mem_ble_shutter_enable_notify 
+6105 204065b3 call shutter_dy_check_iphone 
+6106 204037a0 call app_lpm_mult_enable 
+6107 243a632b nbranch ble_parameter_updata_response_ios ,blank 
+6108 6fe44ecb fetch 8 ,mem_ble_shutter_dy_interval_min_android 
+6109 67e442d5 store 8 ,mem_le_interval_min 
+610a 20202e71 branch le_l2cap_tx_update_req 
+
+ble_shutter_process_parse_connect_parameter_update_response:
+610b 6fe14340 fetch 2 ,mem_le_l2cap_signaling_conn_param_update_rsp_result 
+610c c1000000 rtneq ble_signaling_connect_parameter_update_accepted 
+610d 6fe44521 fetch 8 ,mem_ble_shutter_interval_min_new 
+610e 207a0000 rtn blank 
+610f 67e442d5 store 8 ,mem_le_interval_min 
+6110 20202e71 branch le_l2cap_tx_update_req 
+
+shutter_process_soft_swtich_button_down:
+6111 6fe0c531 fetch 1 ,mem_shutter_hard_soft_switch_case 
+6112 c1000000 rtneq hard_switch 
+6113 6fe0c533 fetch 1 ,mem_shutter_soft_switch_power_state 
+6114 c1808000 rtnne ss_state_power_on 
+6115 20406117 call shutter_store_currenct_led_state 
+6116 20203798 branch app_led_on 
+
+shutter_store_currenct_led_state:
+6117 70469c01 jam 1 ,mem_shutter_soft_swtich_botton_down 
+6118 df20000b arg 11 ,loopcnt 
+6119 d8a0469d arg mem_shutter_soft_swtich_led_struct_temp ,contw 
+611a d8c04686 arg mem_shutter_led_struct_app_led ,contr 
+611b 20207cdc branch memcpy 
+
+shutter_process_soft_swtich_button_up:
+611c 6fe0c531 fetch 1 ,mem_shutter_hard_soft_switch_case 
+611d c1000000 rtneq hard_switch 
+611e 6fe0c533 fetch 1 ,mem_shutter_soft_switch_power_state 
+611f c000e121 beq ss_state_power_on ,shutter_load_currenct_led_state 
+6120 202061cf branch ui_soft_switch_botton_up 
+
+shutter_load_currenct_led_state:
+6121 6fe0c69c fetch 1 ,mem_shutter_soft_swtich_botton_down 
+6122 c1808000 rtnne 1 
+6123 70469c00 jam 0 ,mem_shutter_soft_swtich_botton_down 
+6124 6fe14500 fetch 2 ,mem_ui_state_map 
+6125 c284b79a bbit1 ui_state_ble_connected ,app_led_off 
+6126 df20000b arg 11 ,loopcnt 
+6127 d8c0469d arg mem_shutter_soft_swtich_led_struct_temp ,contr 
+6128 d8a04686 arg mem_shutter_led_struct_app_led ,contw 
+6129 20207cdc branch memcpy 
+
+shutter_le_bb_event_timer:
+612a 2040612d call shutter_check_sleep_timer 
+612b 20406134 call shutter_check_power_off_timer 
+612c 2020613e branch ble_shutter_reconn_timer 
+
+shutter_check_sleep_timer:
+612d da60452f arg mem_shutter_sleep_timer ,regc 
+612e da406130 arg shutter_sleep_timeout ,regb 
+612f 2020375c branch timer_single_step_2b 
+
+shutter_sleep_timeout:
+6130 70453302 jam ss_state_power_off ,mem_shutter_soft_switch_power_state 
+6131 2040379a call app_led_off 
+6132 2040616b call shutter_disconnect_current_connection 
+6133 202061bb branch shutter_wait_power_off 
+
+shutter_check_power_off_timer:
+6134 da6046a9 arg mem_shutter_power_off_timer ,regc 
+6135 da406137 arg shutter_check_power_off_timeout ,regb 
+6136 20203755 branch timer_single_step 
+
+shutter_check_power_off_timeout:
+6137 6fe14500 fetch 2 ,mem_ui_state_map 
+6138 c284e1bb bbit1 ui_state_ble_connected ,shutter_wait_power_off 
+6139 6fe0c686 fetch 1 ,mem_shutter_led_struct_app_led_type 
+613a c000e1bb beq ui_led_state_blink_start ,shutter_wait_power_off 
+613b c00261bb beq ui_led_state_blink_lighting ,shutter_wait_power_off 
+613c c002e1bb beq ui_led_state_blink_darking ,shutter_wait_power_off 
+613d 2020379c branch app_enter_hibernate 
+
+ble_shutter_reconn_timer:
+613e 6fe0c533 fetch 1 ,mem_shutter_soft_switch_power_state 
+613f c1808000 rtnne ss_state_power_on 
+6140 da60450f arg mem_ble_shutter_reconn_timer ,regc 
+6141 da40614e arg shutter_start_bluetooth_discovery ,regb 
+6142 2020375c branch timer_single_step_2b 
+
+shutter_process_idle:
+6143 20406193 call shutter_send_data_to_master 
+6144 2020708b branch keyscan_key_process 
+
+shutter_process_lpm_before:
+6145 20406f32 call gpio_set_before_lpm 
+6146 2020707f branch keyscan_process_lpm_before 
+
+shutter_le_before_hibernate:
+6147 704503ff jam ui_button_gpio_disable ,mem_ui_button_gpio 
+6148 20406f32 call gpio_set_before_lpm 
+6149 20207388 branch disable_authrom 
+
+shutter_stop_bluetooth_discovery:
+
+ble_shutter_stop_bluetooth_discovery:
+614a 6fe1452b fetch 2 ,mem_ble_shutter_connect_timeout 
+614b 67e1452d store 2 ,mem_shutter_sleep_timeout 
+614c 67e1452f store 2 ,mem_shutter_sleep_timer 
+614d 2020378a branch app_ble_stop_adv 
+
+shutter_start_bluetooth_discovery:
+614e 6fe0c533 fetch 1 ,mem_shutter_soft_switch_power_state 
+614f c1808000 rtnne ss_state_power_on 
+
+ble_shutter_start_discovery:
+6150 6fe14500 fetch 2 ,mem_ui_state_map 
+6151 c3848000 rtnbit1 ui_state_ble_connected 
+6152 6fe14529 fetch 2 ,mem_ble_shutter_discovery_timeout 
+6153 67e1452d store 2 ,mem_shutter_sleep_timeout 
+6154 67e1452f store 2 ,mem_shutter_sleep_timer 
+6155 6fe1450b fetch 2 ,mem_ble_shutter_discovery_adv_interval 
+6156 204061e4 call shutter_ble_adv_interval_set 
+6157 20403796 call app_led_start_blink 
+6158 6fe24515 fetch 4 ,mem_ble_shutter_discovery_blink_on_time 
+6159 67e24689 store 4 ,mem_shutter_led_struct_app_led_on_time 
+615a 6fe14500 fetch 2 ,mem_ui_state_map 
+615b c3858000 rtnbit1 ui_state_ble_adv 
+615c 2020378c branch app_ble_start_adv 
+
+shutter_soft_swtich_power_on:
+
+shutter_start_reconnect:
+615d 6fe0c533 fetch 1 ,mem_shutter_soft_switch_power_state 
+615e c1808000 rtnne ss_state_power_on 
+
+ble_shutter_start_reconnect:
+615f 6fe1450f fetch 2 ,mem_ble_shutter_reconn_timer 
+6160 6849450d fetcht 2 ,mem_ble_shutter_reconn_timeout 
+6161 6049450f storet 2 ,mem_ble_shutter_reconn_timer 
+6162 247a0000 nrtn blank 
+6163 6fe14509 fetch 2 ,mem_ble_shutter_reconn_adv_interval 
+6164 204061e4 call shutter_ble_adv_interval_set 
+6165 20403796 call app_led_start_blink 
+6166 6fe24511 fetch 4 ,mem_ble_shutter_reconn_blink_on_time 
+6167 67e24689 store 4 ,mem_shutter_led_struct_app_led_on_time 
+6168 6fe14500 fetch 2 ,mem_ui_state_map 
+6169 c3858000 rtnbit1 ui_state_ble_adv 
+616a 2020378c branch app_ble_start_adv 
+
+shutter_disconnect_current_connection:
+616b 6fe14500 fetch 2 ,mem_ui_state_map 
+616c c284b794 bbit1 ui_state_ble_connected ,app_ble_disconnect 
+616d 2020614a branch shutter_stop_bluetooth_discovery 
+
+shutter_check_data_enable:
+616e 20407dbe call disable_user 
+616f 6fe14500 fetch 2 ,mem_ui_state_map 
+6170 c284e172 bbit1 ui_state_ble_connected ,shutter_check_ble_data_enable 
+6171 20600000 rtn 
+
+shutter_check_ble_data_enable:
+6172 6fe0c508 fetch 1 ,mem_ble_shutter_enable_notify 
+6173 207a0000 rtn blank 
+6174 20207dbc branch enable_user 
+
+shutter_check_bluetooth_conn:
+6175 20407dbe call disable_user 
+6176 6fe14500 fetch 2 ,mem_ui_state_map 
+6177 c3848000 rtnbit1 ui_state_ble_connected 
+6178 20207dbc branch enable_user 
+
+shutter_change_bluetooth_status_bt_disconn:
+
+ble_shutter_change_bluetooth_status_bt_disconn:
+6179 2020615d branch shutter_start_reconnect 
+
+shutter_check_send_data:
+617a 78567c00 disable user2 
+617b 6fe1452d fetch 2 ,mem_shutter_sleep_timeout 
+617c 67e1452f store 2 ,mem_shutter_sleep_timer 
+617d 20406175 call shutter_check_bluetooth_conn 
+617e 20346179 branch shutter_change_bluetooth_status_bt_disconn ,user 
+617f 2040616e call shutter_check_data_enable 
+6180 24740000 nrtn user 
+6181 20207dc0 branch enable_user2 
+
+shutter_key_change:
+6182 2040617a call shutter_check_send_data 
+6183 24760000 nrtn user2 
+6184 1a227e00 deposit rega 
+6185 203a6189 branch shutter_key_release ,blank 
+
+shutter_key_press:
+6186 20403798 call app_led_on 
+6187 da60453f arg mem_key0_press ,regc 
+6188 2020618b branch push_queue_press_or_release 
+
+shutter_key_release:
+6189 2040379a call app_led_off 
+618a da60454e arg mem_key0_release ,regc 
+
+push_queue_press_or_release:
+618b dfe00005 arg max_queue_num ,pdata 
+618c 98effe00 imul32 queue ,pdata 
+618d 9a60a600 iadd regc ,regc 
+
+push_buffer_in_queue:
+618e efe08013 ifetch 1 ,regc 
+618f 207a0000 rtn blank 
+6190 2040619f call queue_push_one_byte 
+6191 1a60a601 increase 1 ,regc 
+6192 2020618e branch push_buffer_in_queue 
+
+shutter_send_data_to_master:
+6193 6fe14500 fetch 2 ,mem_ui_state_map 
+6194 c284e196 bbit1 ui_state_ble_connected ,pop_queue_to_ble_data 
+6195 20600000 rtn 
+
+pop_queue_to_ble_data:
+6196 20402a06 call le_fifo_check_nearly_full 
+6197 247a0000 nrtn blank 
+6198 204061a2 call queue_pop_one_byte 
+6199 24740000 nrtn user 
+619a 1fe0ffff pincrease -1 
+619b 1feffe05 mul32 pdata ,shutter_ble_data_buffer ,pdata 
+619c d840455d arg mem_ble_data_buffer1 ,temp 
+619d 98408c00 iadd temp ,contr 
+619e 202061e8 branch le_send_notify_from_list 
+
+queue_push_one_byte:
+619f 67e0864e store 1 ,mem_pdatatemp 
+61a0 da20064e arg mem_pdatatemp ,rega 
+61a1 202078a2 branch queue_push 
+
+queue_pop_one_byte:
+61a2 da20064e arg mem_pdatatemp ,rega 
+61a3 204078ba call queue_pop 
+61a4 24740000 nrtn user 
+61a5 6fe0864e fetch 1 ,mem_pdatatemp 
+61a6 20600000 rtn 
+
+ble_shutter_receive_data:
+61a7 6fe1439c fetch 2 ,mem_le_att_handle 
+61a8 c00c6103 beq gatt_keyboard_write_handle ,ble_shutter_process_reconnect_complete 
+61a9 20600000 rtn 
+
+shutter_init_param:
+61aa 7046a802 jam 0x02 ,mem_shutter_power_off_timeout 
+61ab 58200008 setarg 0x00200008 
+61ac 67e24519 store 4 ,mem_ble_shutter_interval_min 
+61ad 592c0005 setarg 0x012c0005 
+61ae e7e20005 istore 4 ,contw 
+61af 7042e317 jam 0x17 ,mem_le_local_mtu 
+61b0 5800001b setarg 0x1b 
+61b1 67e14334 store 2 ,mem_le_pairing_handle 
+61b2 20202a1f branch le_set_fixed_ltk_justwork 
+
+shutter_load_buffer_config_form_datarom:
+61b3 df200028 arg ble_key_value_list_size ,loopcnt 
+61b4 d8a0455d arg mem_ble_data_buffer1 ,contw 
+61b5 d8c097bd arg ble_shutter_key_value_list_addr ,contr 
+61b6 20207cce branch memcpy_fast 
+
+shutter_soft_swtich_power_off:
+61b7 da200000 arg 0 ,rega 
+61b8 da604691 arg mem_shutter_power_off_led_style ,regc 
+61b9 204077b8 call ui_led_set_style_global 
+61ba 2040616b call shutter_disconnect_current_connection 
+
+shutter_wait_power_off:
+61bb 6fe0c6a8 fetch 1 ,mem_shutter_power_off_timeout 
+61bc 67e0c6a9 store 1 ,mem_shutter_power_off_timer 
+61bd 20600000 rtn 
+
+ui_soft_swtich_init:
+61be 58000000 setarg ss_state_power_up 
+61bf 204061ca call ui_soft_swtich_init_power_on_time 
+61c0 7044fb01 jam ui_button_state_up ,mem_ui_button_last_state 
+61c1 20407764 call ui_button_init 
+61c2 2040776e call ui_button_polling 
+
+ui_soft_switch_first_power_on:
+61c3 6fe0c6af fetch 1 ,mem_shutter_soft_switch_first_power_on 
+61c4 203a61c7 branch ui_soft_swtich_init_next ,blank 
+61c5 6ff08132 fetch 1 ,core_lpm_isogate 
+61c6 c28261d6 bbit1 cold_wake ,ui_soft_switch_power_on 
+
+ui_soft_swtich_init_next:
+61c7 6fe14500 fetch 2 ,mem_ui_state_map 
+61c8 c3860000 rtnbit1 ui_state_btn_down 
+61c9 2020379c branch app_enter_hibernate 
+
+ui_soft_swtich_init_power_on_time:
+61ca 68494447 fetcht 2 ,mem_power_param_ptr 
+61cb e7e08002 istore 1 ,temp 
+61cc efe08005 ifetch 1 ,contw 
+61cd 67e0c502 store 1 ,mem_ui_button_timeout 
+61ce 20600000 rtn 
+
+ui_soft_switch_botton_up:
+61cf 6fe14447 fetch 2 ,mem_power_param_ptr 
+61d0 efe0803f ifetch 1 ,pdata 
+61d1 c1800000 rtnne ss_state_power_up 
+61d2 2020379c branch app_enter_hibernate 
+
+ui_soft_switch_botton_long_press:
+61d3 68494447 fetcht 2 ,mem_power_param_ptr 
+61d4 efe08002 ifetch 1 ,temp 
+61d5 c000e1de beq ss_state_power_on ,ui_soft_switch_power_off 
+
+ui_soft_switch_power_on:
+61d6 58000001 setarg ss_state_power_on 
+61d7 68494447 fetcht 2 ,mem_power_param_ptr 
+61d8 e7e08002 istore 1 ,temp 
+61d9 18408c02 add temp ,ss_power_off_time ,contr 
+61da efe08006 ifetch 1 ,contr 
+61db e7e08002 istore 1 ,mem_ui_button_timeout 
+61dc efe10006 ifetch 2 ,contr 
+61dd 20207d7b branch callback_func 
+
+ui_soft_switch_power_off:
+61de 58000002 setarg ss_state_power_off 
+61df 204061ca call ui_soft_swtich_init_power_on_time 
+61e0 18408c05 add temp ,ss_power_off_cb ,contr 
+61e1 efe10006 ifetch 2 ,contr 
+61e2 203a379c branch app_enter_hibernate ,blank 
+61e3 20207d7b branch callback_func 
+
+shutter_ble_adv_interval_set:
+61e4 67e140a4 store 2 ,mem_lpm_interval 
+61e5 1fe0fffc increase -4 ,pdata 
+61e6 67e1438d store 2 ,mem_le_adv_interval 
+61e7 20600000 rtn 
+
+le_send_notify_from_list:
+61e8 efe08006 ifetch 1 ,contr 
+61e9 1fe22200 copy pdata ,rega 
+61ea e8410006 ifetcht 2 ,contr 
+61eb 20407c6f call store_contr 
+61ec 20402dcc call le_att_malloc_tx_notify 
+61ed 1a227200 copy rega ,loopcnt 
+61ee 20407c69 call get_contr 
+61ef 20207cdc branch memcpy 
+
+shutter_le_uuid_table_conf:
+61f0 58009684 setarg ble_shutter_gatt_list_addr 
+61f1 67e142f9 store 2 ,mem_ui_le_uuid_table 
+61f2 20600000 rtn 
+
+shutter_default_init:
+61f3 6fe146aa fetch 2 ,mem_shutter_key_conf0_temp 
+61f4 67e1453d store 2 ,mem_shutter_key_conf0 
+61f5 6fe0c6ac fetch 1 ,mem_shutter_led_struct_app_led_gpio_temp 
+61f6 67e0c688 store 1 ,mem_shutter_led_struct_app_led_gpio 
+61f7 67e0c693 store 1 ,mem_shutter_power_off_led_style_gpio 
+61f8 6fe0c6ad fetch 1 ,mem_shutter_hard_soft_switch_case_temp 
+61f9 67e0c531 store 1 ,mem_shutter_hard_soft_switch_case 
+61fa 6fe0c6ae fetch 1 ,mem_shutter_soft_switch_button_gpio_temp 
+61fb 67e0c532 store 1 ,mem_shutter_soft_switch_button_gpio 
+61fc 58000002 setarg 0x0002 
+61fd 67e1453f store 2 ,mem_key0_press 
+61fe 58000001 setarg 0x0001 
+61ff 67e14544 store 2 ,mem_key1_press 
+6200 58000006 setarg 0x0006 
+6201 67e1454e store 2 ,mem_key0_release 
+6202 67e14553 store 2 ,mem_key1_release 
+6203 58004533 setarg mem_shutter_soft_switch_power_state 
+6204 67e14447 store 2 ,mem_power_param_ptr 
+6205 58201400 setarg 0x201400 
+6206 67e1c533 store 3 ,mem_shutter_soft_switch_power_state 
+6207 70409401 jam 0x01 ,mem_lpm_mode 
+6208 58000100 setarg 0x0100 
+6209 67e140a4 store 2 ,mem_lpm_interval 
+620a 7040a608 jam 0x08 ,mem_lpm_overhead 
+620b 7040c005 jam 0x05 ,mem_lpm_mult 
+620c 7040c102 jam 0x02 ,mem_lpm_mult_timeout 
+620d 58000096 setarg 0x0096 
+620e 67e14511 store 2 ,mem_ble_shutter_reconn_blink_on_time 
+620f e7e10005 istore 2 ,contw 
+6210 58000296 setarg 0x0296 
+6211 67e14515 store 2 ,mem_ble_shutter_discovery_blink_on_time 
+6212 e7e10005 istore 2 ,contw 
+6213 38000010 setsect 0 ,0x10 
+6214 38048008 setsect 1 ,0x8008 
+6215 380ac000 setsect 2 ,0x2c000 
+6216 380c0004 setsect 3 ,0x04 
+6217 67e44521 store 8 ,mem_ble_shutter_interval_min_new 
+6218 70450501 jam 0x01 ,mem_ui_led_struct_num 
+6219 58004686 setarg mem_shutter_led_struct_app_led 
+621a 67e14506 store 2 ,mem_ui_led_struct_ptr 
+621b 58000000 setarg 0x0000 
+621c 67e14686 store 2 ,mem_shutter_led_struct_app_led 
+621d 380001a0 setsect 0 ,0x1a0 
+621e 38040068 setsect 1 ,0x68 
+621f 38080000 setsect 2 ,0x00 
+6220 380c0000 setsect 3 ,0x00 
+6221 67e44689 store 8 ,mem_shutter_led_struct_app_led_on_time 
+6222 58000301 setarg 0x0301 
+6223 67e14691 store 2 ,mem_shutter_power_off_led_style 
+6224 380001a0 setsect 0 ,0x1a0 
+6225 380400e8 setsect 1 ,0xe8 
+6226 38080000 setsect 2 ,0x00 
+6227 380c0000 setsect 3 ,0x00 
+6228 67e44694 store 8 ,mem_shutter_power_off_led_style_on_time 
+6229 5800000e setarg 0x000e 
+622a 67e14509 store 2 ,mem_ble_shutter_reconn_adv_interval 
+622b 58000140 setarg 0x0140 
+622c 67e1450b store 2 ,mem_ble_shutter_discovery_adv_interval 
+622d 67e1438d store 2 ,mem_le_adv_interval 
+622e 58000050 setarg 0x0050 
+622f 67e1450d store 2 ,mem_ble_shutter_reconn_timeout 
+6230 70439707 jam 0x07 ,mem_le_adv_channel_map 
+6231 70438c00 jam 0x00 ,mem_le_adv_enable 
+6232 380000fb setsect 0 ,0xfb 
+6233 3806c212 setsect 1 ,0x2c212 
+6234 3808800f setsect 2 ,0x800f 
+6235 380c0021 setsect 3 ,0x21 
+6236 67e443c4 store 8 ,mem_local_rx_max_octets 
+6237 38000bb8 setsect 0 ,0x0bb8 
+6238 380402ee setsect 1 ,0x02ee 
+6239 67e24529 store 4 ,mem_ble_shutter_discovery_timeout 
+623a 580045b7 setarg mem_queue_each_size 
+623b 67e14404 store 2 ,mem_queue_ptr 
+623c 58002001 setarg 0x2001 
+623d 67e145b7 store 2 ,mem_queue_each_size 
+623e 70434c1f jam 0x1f ,mem_le_adv_data_len 
+623f 38010102 setsect 0 ,0x10102 
+6240 380480c1 setsect 1 ,0x80c1 
+6241 38098120 setsect 2 ,0x18120 
+6242 380c640c setsect 3 ,0x640c 
+6243 67e4c34d store 9 ,mem_le_adv_data 
+6244 380003c1 setsect 0 ,0x3c1 
+6245 e7e10005 istore 2 ,contw 
+6246 70436c1f jam 0x1f ,mem_le_scan_data_len 
+6247 3802090d setsect 0 ,0x2090d 
+6248 38074c15 setsect 1 ,0x34c15 
+6249 380a8532 setsect 2 ,0x28532 
+624a 380dd1d5 setsect 3 ,0x1d1d5 
+624b 67e4c36d store 9 ,mem_le_scan_data 
+624c 38026574 setsect 0 ,0x26574 
+624d 3804001c setsect 1 ,0x1c 
+624e e7e18005 istore 3 ,contw 
+624f 5800453a setarg mem_shutter_keyscan 
+6250 67e14443 store 2 ,mem_keyscan_ptr 
+6251 70453a02 jam 0x02 ,mem_shutter_key_num 
+6252 580045dc setarg mem_shutter_nv_data 
+6253 67e14401 store 2 ,mem_nv_data_ptr 
+6254 70440305 jam 0x05 ,mem_nv_data_number 
+6255 6fe0c6b0 fetch 1 ,mem_shutter_dy_conf 
+6256 c00061f0 beq shutter_type ,shutter_le_uuid_table_conf 
+6257 c000e283 beq shutter_dy_type ,shutter_dy_le_uuid_table_conf 
+6258 20600000 rtn 
+
+shutter_dy_6_key_conf:
+6259 6fe34eab fetch shutter_six_key ,mem_shutter_dy_key_conf 
+625a 67e3453d store shutter_six_key ,mem_shutter_key_conf0 
+625b 70453a06 jam shutter_six_key ,mem_shutter_key_num 
+625c 5800453a setarg mem_shutter_key_num 
+625d 67e14443 store 2 ,mem_keyscan_ptr 
+625e 20600000 rtn 
+
+shutter_dy_7_key_conf:
+625f 6fe3ceab fetch shutter_seven_key ,mem_shutter_dy_key_conf 
+6260 67e3c53d store shutter_seven_key ,mem_shutter_key_conf0 
+6261 70453a07 jam shutter_seven_key ,mem_shutter_key_num 
+6262 5800453a setarg mem_shutter_key_num 
+6263 67e14443 store 2 ,mem_keyscan_ptr 
+6264 20600000 rtn 
+
+shutter_dy_8_key_conf:
+6265 6fe44eab fetch shutter_eight_key ,mem_shutter_dy_key_conf 
+6266 67e4453d store shutter_eight_key ,mem_shutter_key_conf0 
+6267 70453a08 jam shutter_eight_key ,mem_shutter_key_num 
+6268 5800453a setarg mem_shutter_key_num 
+6269 67e14443 store 2 ,mem_keyscan_ptr 
+626a 20600000 rtn 
+
+shutter_dy_key_conf:
+626b 6fe0ceaa fetch 1 ,mem_shutter_key_num_conf 
+626c c0036259 beq shutter_six_key ,shutter_dy_6_key_conf 
+626d c003e25f beq shutter_seven_key ,shutter_dy_7_key_conf 
+626e c0046265 beq shutter_eight_key ,shutter_dy_8_key_conf 
+626f 20600000 rtn 
+
+shutter_dy_adv_conf:
+6270 44dfc017 bpatch patch17_7 ,mem_patch17 
+6271 6fe44edb fetch 8 ,mem_shutter_ble_discovery_time_conf 
+6272 67e44529 store 8 ,mem_ble_shutter_discovery_timeout 
+6273 58000096 setarg 0x0096 
+6274 67e1450d store 2 ,mem_ble_shutter_reconn_timeout 
+6275 6fe3cee5 fetch 7 ,mem_shutter_led_on_light_dark_led_conf 
+6276 67e3c686 store 7 ,mem_shutter_led_struct_app_led 
+6277 6fe3ceec fetch 7 ,mem_shutter_led_off_light_dark_led_conf 
+6278 67e3c691 store 7 ,mem_shutter_power_off_led_style 
+6279 6fe24ef3 fetch 4 ,mem_shutter_reconn_blink_on_time_conf 
+627a 67e24511 store 4 ,mem_ble_shutter_reconn_blink_on_time 
+627b 6fe24ef7 fetch 4 ,mem_shutter_discovery_blink_on_time_conf 
+627c 67e24515 store 4 ,mem_ble_shutter_discovery_blink_on_time 
+627d 5800000e setarg 0x000e 
+627e 67e14509 store 2 ,mem_ble_shutter_reconn_adv_interval 
+627f 58000140 setarg 0x0140 
+6280 67e1450b store 2 ,mem_ble_shutter_discovery_adv_interval 
+6281 67e1438d store 2 ,mem_le_adv_interval 
+6282 20600000 rtn 
+
+shutter_dy_le_uuid_table_conf:
+6283 580047a7 setarg mem_shutter_le_uuid_sup 
+6284 67e142f9 store 2 ,mem_ui_le_uuid_table 
+6285 20600000 rtn 
+
+shutter_dy_init:
+6286 20407384 call enable_authrom 
+6287 20758000 rtn wake 
+6288 2040626b call shutter_dy_key_conf 
+6289 20406270 call shutter_dy_adv_conf 
+628a 580062c1 setarg shutter_dy_process_idle 
+628b 67e143e4 store 2 ,mem_cb_idle_process 
+628c 5800631a setarg shutter_dy_process_bb_event 
+628d 67e143e6 store 2 ,mem_cb_bb_event_process 
+628e 58006548 setarg ble_shutter_dy_receive_data 
+628f 67e143e8 store 2 ,mem_cb_att_write 
+6290 580062f2 setarg shutter_dy_le_bb_event_timer 
+6291 67e143ec store 2 ,mem_cb_event_timer 
+6292 5800634d setarg shutter_dy_key_change 
+6293 67e1453b store 2 ,mem_cb_shutter_keycan 
+6294 580062ab setarg shutter_dy_le_before_hibernate 
+6295 67e143de store 2 ,mem_cb_before_hibernate 
+6296 580062a9 setarg shutter_dy_process_lpm_before 
+6297 67e143e0 store 2 ,mem_cb_before_lpm 
+6298 5800615d setarg shutter_soft_swtich_power_on 
+6299 67e14536 store 2 ,mem_shutter_soft_switch_poweron_callback_function 
+629a 580061b7 setarg shutter_soft_swtich_power_off 
+629b 67e14538 store 2 ,mem_shutter_soft_switch_poweroff_callback_function 
+629c 70416007 jam 7 ,mem_version 
+629d 20402948 call le_modified_name_adv 
+629e 204061aa call shutter_init_param 
+629f 2040705b call keyscan_key_init 
+62a0 2040789d call queue_init 
+62a1 2040779a call ui_led_init_global 
+62a2 6fe14f12 fetch 2 ,mem_shutter_le_pairing_handle 
+62a3 67e14334 store 2 ,mem_le_pairing_handle 
+62a4 6fe44521 fetch 8 ,mem_ble_shutter_interval_min_new 
+62a5 67e44519 store 8 ,mem_ble_shutter_interval_min 
+62a6 204062cb call shutter_dy_iphone_every_move_max_set 
+62a7 44e04018 bpatch patch18_0 ,mem_patch18 
+62a8 202060d7 branch shutter_power_switch 
+
+shutter_dy_process_lpm_before:
+62a9 20406f32 call gpio_set_before_lpm 
+62aa 2020707f branch keyscan_process_lpm_before 
+
+shutter_dy_le_before_hibernate:
+62ab 704503ff jam ui_button_gpio_disable ,mem_ui_button_gpio 
+62ac 20406f32 call gpio_set_before_lpm 
+62ad 204062af call dy_set_key_gpio_before_hiernate 
+62ae 20207388 branch disable_authrom 
+
+dy_set_key_gpio_before_hiernate:
+62af 6fe0c6ad fetch 1 ,mem_shutter_hard_soft_switch_case_temp 
+62b0 207a0000 rtn blank 
+62b1 6fe0ceaa fetch 1 ,mem_shutter_key_num_conf 
+62b2 1fe27200 copy pdata ,loopcnt 
+62b3 da20453d arg mem_shutter_key_conf0 ,rega 
+
+dy_set_key_gpio_loop:
+62b4 efe08011 ifetch 1 ,rega 
+62b5 6848c6ae fetcht 1 ,mem_shutter_soft_switch_button_gpio_temp 
+62b6 98467c00 isub temp ,null 
+62b7 2022e2bc branch dy_set_key_gpio_loop_end ,zero 
+62b8 1fe67cff sub pdata ,0xff ,null 
+62b9 2022e2bc branch dy_set_key_gpio_loop_end ,zero 
+62ba 1fe20400 copy pdata ,temp 
+62bb 204062bf call dy_shutter_gpio_config_input_pd 
+
+dy_set_key_gpio_loop_end:
+62bc 1a20a201 increase 1 ,rega 
+62bd c20062b4 loop dy_set_key_gpio_loop 
+62be 20600000 rtn 
+
+dy_shutter_gpio_config_input_pd:
+62bf 79200407 set1 gpio_active_bit ,temp 
+62c0 20206ed7 branch gpio_config_input 
+
+shutter_dy_process_idle:
+62c1 204062d8 call shutter_dy_shutter_send_data_to_master 
+62c2 d8e00009 arg key_scan_timer ,queue 
+62c3 20407cf1 call timer_check 
+62c4 247a0000 nrtn blank 
+62c5 58000020 setarg 0x20 
+62c6 d8e00009 arg key_scan_timer ,queue 
+62c7 20407ce3 call timer_init 
+62c8 78547c00 disable user 
+62c9 2040707f call keyscan_process_lpm_before 
+62ca 202063b7 branch shutter_dy_keyscan_key_process 
+
+shutter_dy_iphone_every_move_max_set:
+62cb 5800002b setarg 0x2b 
+62cc 1feffe0a mul32 pdata ,every_payload_len ,pdata 
+62cd d8404c4b arg mem_shutter_mousekey_value_list ,temp 
+62ce 9840a200 iadd temp ,rega 
+62cf 1a20a203 increase 3 ,rega 
+62d0 d8400fff arg iphone_once_max_move_value ,temp 
+62d1 e0408011 istoret 1 ,rega 
+62d2 1a20a20b increase 11 ,rega 
+62d3 dfe00fff arg 0xfff ,pdata 
+62d4 98467e00 isub temp ,pdata 
+62d5 1ff27e00 lshift4 pdata ,pdata 
+62d6 e7e10011 istore 2 ,rega 
+62d7 20600000 rtn 
+
+shutter_dy_shutter_send_data_to_master:
+62d8 6fe14500 fetch 2 ,mem_ui_state_map 
+62d9 c284e2dd bbit1 ui_state_ble_connected ,shutter_dy_pop_queue_to_ble_data 
+62da d8a045b9 arg mem_queue_curr_num ,contw 
+62db df200023 arg 35 ,loopcnt 
+62dc 20207ca3 branch clear_mem 
+
+shutter_dy_pop_queue_to_ble_data:
+62dd 20402a06 call le_fifo_check_nearly_full 
+62de 247a0000 nrtn blank 
+62df 204078ea call queue_empty 
+62e0 207a0000 rtn blank 
+62e1 684a4959 fetcht 4 ,mem_key_send_clk 
+62e2 1c427e00 copy clkn_bt ,pdata 
+62e3 98460400 isub temp ,temp 
+62e4 20628000 rtn zero 
+62e5 242162e9 nbranch shutter_dy_pop_queue_to_ble_data2 ,positive 
+62e6 6fe0c958 fetch 1 ,mem_send_data_delay 
+62e7 98467c00 isub temp ,null 
+62e8 20610000 rtn positive 
+
+shutter_dy_pop_queue_to_ble_data2:
+62e9 1c427e00 copy clkn_bt ,pdata 
+62ea 67e24959 store 4 ,mem_key_send_clk 
+62eb 204061a2 call queue_pop_one_byte 
+62ec 24740000 nrtn user 
+62ed 1fe0ffff pincrease -1 
+62ee 1feffe0a mul32 pdata ,10 ,pdata 
+62ef d8404c4b arg mem_shutter_mousekey_value_list ,temp 
+62f0 98408c00 iadd temp ,contr 
+62f1 202061e8 branch le_send_notify_from_list 
+
+shutter_dy_le_bb_event_timer:
+62f2 204066d9 call shutter_dy_shutter_1s_timer 
+62f3 204065ef call shutter_dy_link_key_loop_timer 
+62f4 204065dd call shutter_dy_long_key_volume_timer 
+62f5 204062f9 call shutter_dy_iphone_move_mid_timer 
+62f6 2040630e call shutter_dy_clear_key_state_timer 
+62f7 2040612d call shutter_check_sleep_timer 
+62f8 20206314 branch shutter_dy_check_power_off_timer 
+
+shutter_dy_iphone_move_mid_timer:
+62f9 da604e88 arg mem_shutter_move_mid_timer ,regc 
+62fa da4062fc arg shutter_dy_iphone_move_mid_timeout ,regb 
+62fb 20203755 branch timer_single_step 
+
+shutter_dy_iphone_move_mid_timeout:
+62fc 204078ea call queue_empty 
+62fd 247a0000 nrtn blank 
+62fe 6fe146bf fetch 2 ,mem_key_value_xmem 
+62ff 247a0000 nrtn blank 
+
+shutter_dy_iphone_move_mid:
+6300 204065b3 call shutter_dy_check_iphone 
+6301 207a0000 rtn blank 
+6302 18e27e00 copy queue ,pdata 
+6303 2fe00e04 compare 0x04 ,pdata ,0x07 
+6304 2020e30a branch shutter_dy_iphone_up_mid ,true 
+6305 18e27e00 copy queue ,pdata 
+6306 2fe00e01 compare 0x01 ,pdata ,0x07 
+6307 2020e30c branch shutter_dy_iphone_like_mid ,true 
+6308 da604e7d arg mem_shutter_iphone_move_mid ,regc 
+6309 2020618e branch push_buffer_in_queue 
+
+shutter_dy_iphone_up_mid:
+630a da604e96 arg mem_shutter_iphone_up_mid ,regc 
+630b 2020618e branch push_buffer_in_queue 
+
+shutter_dy_iphone_like_mid:
+630c da604ea0 arg mem_shutter_iphone_like_mid ,regc 
+630d 2020618e branch push_buffer_in_queue 
+
+shutter_dy_clear_key_state_timer:
+630e da604c48 arg mem_shutter_like_timeout ,regc 
+630f da406311 arg shutter_dy_clear_key_state_timeout ,regb 
+6310 20203755 branch timer_single_step 
+
+shutter_dy_clear_key_state_timeout:
+6311 df20000a arg shutter_key_conf_sate_bytes ,loopcnt 
+6312 d8a04967 arg mem_shutter_key_state1 ,contw 
+6313 20207ca3 branch clear_mem 
+
+shutter_dy_check_power_off_timer:
+6314 da6046a9 arg mem_shutter_power_off_timer ,regc 
+6315 da406317 arg shutter_dy_check_power_off_timeout ,regb 
+6316 20203755 branch timer_single_step 
+
+shutter_dy_check_power_off_timeout:
+6317 6fe14500 fetch 2 ,mem_ui_state_map 
+6318 c284e1bb bbit1 ui_state_ble_connected ,shutter_wait_power_off 
+6319 2020379c branch app_enter_hibernate 
+
+shutter_dy_process_bb_event:
+631a 1a627e00 copy regc ,pdata 
+631b c00a633c beq bt_evt_le_connected ,ble_shutter_dy_process_baseband_connect 
+631c c00ae337 beq bt_evt_le_disconnected ,ble_shutter_dy_process_baseband_disconnect 
+631d c018e32e beq bt_evt_le_pairing_success ,ble_shutter_dy_pairing_success 
+631e c0206322 beq bt_evt_le_parse_conn_papa_update_rsp ,ble_dy_shutter_process_parse_connect_parameter_update_response 
+631f c1200000 rtneq bt_evt_le_parse_conn_papa_update_rsp 
+6320 c019654b beq bt_evt_le_start_enc ,shutter_dy_le_find_service_hand_by_uuid 
+6321 202060f3 branch shutter_process_bb_event 
+
+ble_dy_shutter_process_parse_connect_parameter_update_response:
+6322 6fe14340 fetch 2 ,mem_le_l2cap_signaling_conn_param_update_rsp_result 
+6323 c1000000 rtneq ble_signaling_connect_parameter_update_accepted 
+6324 6fe44521 fetch 8 ,mem_ble_shutter_interval_min_new 
+6325 207a0000 rtn blank 
+6326 204065b3 call shutter_dy_check_iphone 
+6327 243a632b nbranch ble_parameter_updata_response_ios ,blank 
+6328 6fe44ecb fetch 8 ,mem_ble_shutter_dy_interval_min_android 
+6329 67e442d5 store 8 ,mem_le_interval_min 
+632a 20202e71 branch le_l2cap_tx_update_req 
+
+ble_parameter_updata_response_ios:
+632b 6fe44ed3 fetch 8 ,mem_ble_shutter_dy_interval_min_ios 
+632c 67e442d5 store 8 ,mem_le_interval_min 
+632d 20202e71 branch le_l2cap_tx_update_req 
+
+ble_shutter_dy_pairing_success:
+632e 704e8901 jam 1 ,mem_shutter_pairing_success 
+632f 20406606 call shutter_dy_clear_move_config 
+6330 6fe14eff fetch 2 ,mem_android_initial_move_x 
+6331 67e14e75 store 2 ,mem_shutter_move_data_x 
+6332 68494f01 fetcht 2 ,mem_android_initial_move_y 
+6333 58000fff setarg 0xfff 
+6334 98467e00 isub temp ,pdata 
+6335 67e14e77 store 2 ,mem_shutter_move_data_y 
+6336 20600000 rtn 
+
+ble_shutter_dy_process_baseband_disconnect:
+6337 704e7200 jam 0 ,mem_shutter_le_conned 
+6338 704e8900 jam 0 ,mem_shutter_pairing_success 
+6339 204063f6 call shutter_dy_move_mode_disable 
+633a 20406348 call shutter_dy_over_clear 
+633b 20206100 branch ble_shutter_process_baseband_disconnect 
+
+ble_shutter_dy_process_baseband_connect:
+633c 1c427e00 copy clkn_bt ,pdata 
+633d 67e24959 store 4 ,mem_key_send_clk 
+633e 204065ac call shutter_dy_remote_not_iphone 
+633f 202060fc branch ble_shutter_process_baseband_connect 
+
+shutter_dy_check_send_data:
+6340 78567c00 disable user2 
+6341 6fe1452d fetch 2 ,mem_shutter_sleep_timeout 
+6342 67e1452f store 2 ,mem_shutter_sleep_timer 
+6343 20406175 call shutter_check_bluetooth_conn 
+6344 20346179 branch shutter_change_bluetooth_status_bt_disconn ,user 
+6345 2040616e call shutter_check_data_enable 
+6346 24740000 nrtn user 
+6347 20207dc0 branch enable_user2 
+
+shutter_dy_over_clear:
+6348 704e8c00 jam 0 ,mem_last_press_key_value 
+6349 20600000 rtn 
+
+shutter_dy_key_value_filter:
+634a 18e27e00 copy queue ,pdata 
+634b c1808000 rtnne shutter_like_key_num 
+634c 20206354 branch shutter_dy_key_press_next 
+
+shutter_dy_key_change:
+634d 20406340 call shutter_dy_check_send_data 
+634e 24760000 nrtn user2 
+634f 1a227e00 deposit rega 
+6350 203a637f branch shutter_dy_shutter_key_release ,blank 
+
+shutter_dy_key_press:
+6351 44e0c018 bpatch patch18_1 ,mem_patch18 
+6352 6fe0cf2a fetch 1 ,mem_shutter_link_loop_flag 
+6353 243a634a nbranch shutter_dy_key_value_filter ,blank 
+
+shutter_dy_key_press_next:
+6354 704c4901 jam 1 ,mem_shutter_key_pressed 
+6355 20403798 call app_led_on 
+6356 20406374 call shutter_dy_key_press_clk 
+6357 204063a9 call shutter_dy_jude_queue_size 
+6358 20216348 branch shutter_dy_over_clear ,positive 
+6359 18e27e00 copy queue ,pdata 
+635a 6848ce8c fetcht 1 ,mem_last_press_key_value 
+635b 98467c00 isub temp ,null 
+635c 2442e36e ncall shutter_dy_iphone_check_move_mid ,zero 
+635d 18e27e00 copy queue ,pdata 
+635e 67e0ce8c store 1 ,mem_last_press_key_value 
+635f 6848ce8f fetcht 1 ,mem_move_mode_key_index 
+6360 98467c00 isub temp ,null 
+6361 2022e36c branch shutter_dy_key_move_to_specify_location ,zero 
+6362 6fe0ce90 fetch 1 ,mem_move_mode_trigger_enable 
+6363 243a6367 nbranch shutter_dy_move_set ,blank 
+
+shutter_dy_page_set:
+6364 204065b5 call shutter_dy_le_get_press_ptr 
+6365 dfe0000a arg max_queue_new_press ,pdata 
+6366 202063a2 branch shutter_dy_push_queue_press_or_release 
+
+shutter_dy_move_set:
+6367 20406602 call shutter_dy_jude_clear_move_config 
+6368 18e27e00 copy queue ,pdata 
+6369 c000e364 beq shutter_like_key_num ,shutter_dy_page_set 
+636a 2040648c call shutter_dy_check_move_data 
+636b 2020643d branch shutter_dy_move_to_specify_location 
+
+shutter_dy_key_move_to_specify_location:
+636c 704e8d01 jam 1 ,mem_shutter_first_move 
+636d 2020643d branch shutter_dy_move_to_specify_location 
+
+shutter_dy_iphone_check_move_mid:
+636e 44e14018 bpatch patch18_2 ,mem_patch18 
+636f 6fe0ce90 fetch 1 ,mem_move_mode_trigger_enable 
+6370 203a6300 branch shutter_dy_iphone_move_mid ,blank 
+6371 18e27e00 copy queue ,pdata 
+6372 c000e300 beq shutter_like_key_num ,shutter_dy_iphone_move_mid 
+6373 20600000 rtn 
+
+shutter_dy_key_press_clk:
+6374 dfe0000a arg shutter_key_conf_sate_bytes ,pdata 
+6375 98effe00 imul32 queue ,pdata 
+6376 da60495d arg mem_shutter_key_state0 ,regc 
+6377 9a60a600 iadd regc ,regc 
+6378 1c427e00 copy clkn_bt ,pdata 
+6379 e7e20013 istore key_state_press_clk_length ,regc 
+637a 1a60a604 increase key_state_press_count_offset ,regc 
+637b efe08013 ifetch 1 ,regc 
+637c 1fe0fe01 increase 1 ,pdata 
+637d e7e08013 istore 1 ,regc 
+637e 20600000 rtn 
+
+shutter_dy_shutter_key_release:
+637f 44e1c018 bpatch patch18_3 ,mem_patch18 
+6380 6fe0ce90 fetch 1 ,mem_move_mode_trigger_enable 
+6381 205a6393 call shutter_dy_key_release_led ,blank 
+
+shutter_dy_shutter_key_release_time:
+6382 dfe0000a arg shutter_key_conf_sate_bytes ,pdata 
+6383 98effe00 imul32 queue ,pdata 
+6384 da60495d arg mem_shutter_key_state0 ,regc 
+6385 9a60a600 iadd regc ,regc 
+6386 e8420013 ifetcht 4 ,regc 
+6387 18467c00 sub temp ,0 ,null 
+6388 20628000 rtn zero 
+6389 1c427e00 copy clkn_bt ,pdata 
+638a 98460400 isub temp ,temp 
+638b 244177f4 ncall ui_timer_timeout ,positive 
+638c 1a608c09 add regc ,key_state_longpress_offset ,contr 
+638d efe08006 ifetch 1 ,contr 
+638e 243a63ae nbranch shutter_dy_push_queue_long_release ,blank 
+638f 1a60a605 increase key_state_release_clk_offset ,regc 
+6390 1c427e00 copy clkn_bt ,pdata 
+6391 e7e20013 istore key_state_release_clk_length ,regc 
+6392 20600000 rtn 
+
+shutter_dy_key_release_led:
+6393 6fe0cf2a fetch 1 ,mem_shutter_link_loop_flag 
+6394 243a3798 nbranch app_led_on ,blank 
+6395 2020379a branch app_led_off 
+
+shutter_dy_push_queue_release:
+6396 1a608c04 add regc ,4 ,contr 
+6397 efe08006 ifetch 1 ,contr 
+6398 20206399 branch shutter_dy_push_queue_release1 
+
+shutter_dy_push_queue_release1:
+6399 204063b4 call shutter_clear_dy_key_state 
+639a 6fe0ce90 fetch 1 ,mem_move_mode_trigger_enable 
+639b 243a63a5 nbranch shutter_dy_move_mode_queue_release ,blank 
+
+shutter_dy_push_queue_release1_next:
+639c 204063a9 call shutter_dy_jude_queue_size 
+639d 20216348 branch shutter_dy_over_clear ,positive 
+639e 204065bb call shutter_dy_le_get_release_ptr 
+639f 18e27e00 copy queue ,pdata 
+63a0 c001e5c3 beq shutter_photo_key_num ,shutter_dy_le_get_release_ptr_volume 
+63a1 dfe0000f arg max_queue_num_release ,pdata 
+
+shutter_dy_push_queue_press_or_release:
+63a2 98effe00 imul32 queue ,pdata 
+63a3 9a60a600 iadd regc ,regc 
+63a4 2020618e branch push_buffer_in_queue 
+
+shutter_dy_move_mode_queue_release:
+63a5 18e27e00 copy queue ,pdata 
+63a6 c000e39c beq shutter_like_key_num ,shutter_dy_push_queue_release1_next 
+63a7 c001e39c beq shutter_photo_key_num ,shutter_dy_push_queue_release1_next 
+63a8 20600000 rtn 
+
+shutter_dy_jude_queue_size:
+63a9 204078f2 call queue_get_size 
+63aa e8408006 ifetcht 1 ,contr 
+63ab 98467e00 isub temp ,pdata 
+63ac 1fe67c0a sub pdata ,max_queue_new_press ,null 
+63ad 20600000 rtn 
+
+shutter_dy_push_queue_long_release:
+63ae 704e8701 jam 1 ,mem_shutter_long_key_released_flag 
+63af 204063b4 call shutter_clear_dy_key_state 
+63b0 204065ec call shutter_dy_clear_volume_timer 
+63b1 da604ab3 arg mem_key0_long_release ,regc 
+63b2 dfe00003 arg max_queue_num_long_release ,pdata 
+63b3 202063a2 branch shutter_dy_push_queue_press_or_release 
+
+shutter_clear_dy_key_state:
+63b4 df20000a arg shutter_key_conf_sate_bytes ,loopcnt 
+63b5 1a620a00 copy regc ,contw 
+63b6 20207ca3 branch clear_mem 
+
+shutter_dy_keyscan_key_process:
+63b7 6fe146bf fetch 2 ,mem_key_value_xmem 
+63b8 67e14445 store 2 ,mem_key_value_retention 
+63b9 20406407 call shutter_dy_keyscan_key_process_next 
+63ba 6fe14445 fetch 2 ,mem_key_value_retention 
+63bb 67e146bf store 2 ,mem_key_value_xmem 
+63bc d8e00000 arg 0 ,queue 
+63bd 6fe0c53a fetch 1 ,mem_shutter_key_num 
+63be 1fe27200 copy pdata ,loopcnt 
+63bf da60495d arg mem_shutter_key_state0 ,regc 
+
+shutter_dy_keyscan_key_check_release_loop:
+63c0 1f227e00 copy loopcnt ,pdata 
+63c1 67e10656 store 2 ,mem_temp 
+63c2 1a627e00 copy regc ,pdata 
+63c3 67e1066a store 2 ,mem_regc 
+63c4 18e27e00 copy queue ,pdata 
+63c5 67e10658 store 2 ,mem_temp + 2 
+63c6 204063fd call shutter_dy_keyscan_key_check_release 
+63c7 6fe1066a fetch 2 ,mem_regc 
+63c8 1fe22600 copy pdata ,regc 
+63c9 6fe10658 fetch 2 ,mem_temp + 2 
+63ca 1fe20e00 copy pdata ,queue 
+63cb 204063d4 call shutter_dy_keyscan_key_check_long_press 
+63cc 6fe10658 fetch 2 ,mem_temp + 2 
+63cd 1fe08e01 add pdata ,1 ,queue 
+63ce 6fe1066a fetch 2 ,mem_regc 
+63cf 1fe0a60a add pdata ,shutter_key_conf_sate_bytes ,regc 
+63d0 6fe10656 fetch 2 ,mem_temp 
+63d1 1fe27200 copy pdata ,loopcnt 
+63d2 c20063c0 loop shutter_dy_keyscan_key_check_release_loop 
+63d3 20600000 rtn 
+
+shutter_dy_keyscan_key_check_long_press:
+63d4 efe20013 ifetch key_state_press_clk_length ,regc 
+63d5 207a0000 rtn blank 
+63d6 1fe20400 copy pdata ,temp 
+63d7 1c427e00 copy clkn_bt ,pdata 
+63d8 98460400 isub temp ,temp 
+63d9 24610000 nrtn positive 
+63da 580009c4 setarg 2500 
+63db 98467c00 isub temp ,null 
+63dc 20610000 rtn positive 
+63dd 1c427e00 copy clkn_bt ,pdata 
+63de e7e20013 istore 4 ,regc 
+63df 1a60a609 increase key_state_longpress_offset ,regc 
+63e0 58000001 setarg 1 
+63e1 e7e08013 istore key_state_longpress_length ,regc 
+63e2 6fe0ce87 fetch 1 ,mem_shutter_long_key_released_flag 
+63e3 207a0000 rtn blank 
+63e4 704e8700 jam 0 ,mem_shutter_long_key_released_flag 
+63e5 44e24018 bpatch patch18_4 ,mem_patch18 
+63e6 204065d8 call shutter_dy_long_key_function 
+63e7 6fe0ce8e fetch 1 ,mem_move_mode_set 
+63e8 c00063eb beq move_combine_key ,shutter_dy_key_long_press_set_key_normal 
+63e9 c000e3ee beq move_single_key ,shutter_dy_key_long_press_set_move_trigger 
+63ea 20600000 rtn 
+
+shutter_dy_key_long_press_set_key_normal:
+63eb 204063f8 call shutter_dy_long_press_android_or_ios 
+63ec dfe00003 arg max_queue_num_long ,pdata 
+63ed 202063a2 branch shutter_dy_push_queue_press_or_release 
+
+shutter_dy_key_long_press_set_move_trigger:
+63ee 18e27e00 copy queue ,pdata 
+63ef 6848ce8f fetcht 1 ,mem_move_mode_key_index 
+63f0 98467c00 isub temp ,null 
+63f1 2422e3eb nbranch shutter_dy_key_long_press_set_key_normal ,zero 
+63f2 6fe0ce90 fetch 1 ,mem_move_mode_trigger_enable 
+63f3 79407e00 setflip 0 ,pdata 
+63f4 67e0ce90 store 1 ,mem_move_mode_trigger_enable 
+63f5 247a0000 nrtn blank 
+
+shutter_dy_move_mode_disable:
+63f6 704e9000 jam 0 ,mem_move_mode_trigger_enable 
+63f7 2020379a branch app_led_off 
+
+shutter_dy_long_press_android_or_ios:
+63f8 da604a98 arg mem_key0_long_press ,regc 
+63f9 204065b3 call shutter_dy_check_iphone 
+63fa 207a0000 rtn blank 
+63fb da604bfd arg mem_key0_long_press_i ,regc 
+63fc 20600000 rtn 
+
+shutter_dy_keyscan_key_check_release:
+63fd 1a60a405 add regc ,key_state_release_clk_offset ,regb 
+63fe efe20012 ifetch key_state_release_clk_length ,regb 
+63ff 207a0000 rtn blank 
+6400 1fe20400 copy pdata ,temp 
+6401 1c427e00 copy clkn_bt ,pdata 
+6402 98460400 isub temp ,temp 
+6403 244177f4 ncall ui_timer_timeout ,positive 
+6404 580003e8 setarg 1000 
+6405 98467c00 isub temp ,null 
+6406 20206396 branch shutter_dy_push_queue_release 
+
+shutter_dy_keyscan_key_process_next:
+6407 6fe14443 fetch 2 ,mem_key_num_ptr 
+6408 efe0803f ifetch 1 ,pdata 
+6409 207a0000 rtn blank 
+640a 58000000 setarg 0 
+640b 67e106cf store 2 ,mem_key_value_temp 
+640c 20407067 call keyscan_scan_key 
+640d 24347793 nbranch lpm_button_clean_wake_lock ,user 
+640e 20407791 call lpm_button_get_wake_lock 
+640f 78547c00 disable user 
+6410 6fe0c38c fetch 1 ,mem_le_adv_enable 
+6411 247a0000 nrtn blank 
+6412 44e2c018 bpatch patch18_5 ,mem_patch18 
+6413 6fe0ce8e fetch 1 ,mem_move_mode_set 
+6414 c000e418 beq move_single_key ,shutter_dy_skip_check_combine_key 
+6415 20406472 call shutter_dy_check_combine_key_release 
+6416 20406425 call shutter_dy_check_combine_key 
+6417 20740000 rtn user 
+
+shutter_dy_skip_check_combine_key:
+6418 2040641e call shutter_dy_single_key_led 
+6419 6fe106cf fetch 2 ,mem_key_value_temp 
+641a 67e106d6 store 2 ,mem_key_value_temp4 
+641b 7006d800 jam 0 ,mem_key_value_temp6 
+641c 18000e00 force 0 ,queue 
+641d 2020709f branch keyscan_key_lp1 
+
+shutter_dy_single_key_led:
+641e 6fe0ce8c fetch 1 ,mem_last_press_key_value 
+641f 6848ce8f fetcht 1 ,mem_move_mode_key_index 
+6420 98467c00 isub temp ,null 
+6421 2022b798 branch app_led_on ,zero 
+6422 6fe0ce90 fetch 1 ,mem_move_mode_trigger_enable 
+6423 243a379a nbranch app_led_off ,blank 
+6424 20600000 rtn 
+
+shutter_dy_check_combine_key:
+6425 d8e00000 arg 0 ,queue 
+
+shutter_dy_check_combine_key_loop:
+6426 da404ace arg mem_combine_key0 ,regb 
+6427 dfe00002 arg 2 ,pdata 
+6428 98effe00 imul32 queue ,pdata 
+6429 9a40a400 iadd regb ,regb 
+642a efe10012 ifetch 2 ,regb 
+642b 207a0000 rtn blank 
+642c 684906cf fetcht 2 ,mem_key_value_temp 
+642d 9842fc00 ixor temp ,null 
+642e 2022e431 branch shutter_dy_check_combine_key_parse ,zero 
+642f 18e08e01 increase 1 ,queue 
+6430 20206426 branch shutter_dy_check_combine_key_loop 
+
+shutter_dy_check_combine_key_parse:
+6431 67e14ada store 2 ,mem_combine_key_state0 
+6432 20403798 call app_led_on 
+6433 da604adc arg mem_combine_key0_press ,regc 
+6434 dfe0000a arg max_queue_num_combinekey ,pdata 
+6435 98effe00 imul32 queue ,pdata 
+6436 9a60a600 iadd regc ,regc 
+6437 20406439 call shutter_dy_push_buffer_in_queue 
+6438 2020647d branch shutter_dy_combine_key_enableuser 
+
+shutter_dy_push_buffer_in_queue:
+6439 20406602 call shutter_dy_jude_clear_move_config 
+643a efe08013 ifetch 1 ,regc 
+643b 207a0000 rtn blank 
+643c 2040648c call shutter_dy_check_move_data 
+
+shutter_dy_move_to_specify_location:
+643d 20406602 call shutter_dy_jude_clear_move_config 
+643e 204065b3 call shutter_dy_check_iphone 
+643f 243a6444 nbranch shutter_dy_move_ios_to_specify_location ,blank 
+6440 dfe0001c arg 0x1c ,pdata 
+6441 2040619f call queue_push_one_byte 
+6442 dfe0001d arg 0x1d ,pdata 
+6443 2020619f branch queue_push_one_byte 
+
+shutter_dy_move_ios_to_specify_location:
+6444 20406453 call shutter_dy_move_down_left_corner 
+6445 2040645e call shutter_dy_move_x_max 
+6446 20406468 call shutter_dy_move_y_max 
+6447 dfe00029 arg 0x29 ,pdata 
+6448 2020619f branch queue_push_one_byte 
+
+shutter_dy_move_down_left_corner_count_set:
+6449 6848ce71 fetcht 1 ,mem_shutter_back_count 
+644a 204065b3 call shutter_dy_check_iphone 
+644b 207a0000 rtn blank 
+644c 6848ce74 fetcht 1 ,mem_shutter_iphone_beyond_y_count 
+644d 18408401 increase 1 ,temp 
+644e 6fe0ce8d fetch 1 ,mem_shutter_first_move 
+644f 207a0000 rtn blank 
+6450 6848ce71 fetcht 1 ,mem_shutter_back_count 
+6451 704e8d00 jam 0 ,mem_shutter_first_move 
+6452 20600000 rtn 
+
+shutter_dy_move_down_left_corner:
+6453 20406449 call shutter_dy_move_down_left_corner_count_set 
+6454 18427e00 copy temp ,pdata 
+6455 207a0000 rtn blank 
+6456 67e0ce7a store 1 ,mem_shutter_back_count_cache 
+
+shutter_dy_move_down_left_corner_loop:
+6457 dfe0002b arg 0x2b ,pdata 
+6458 2040619f call queue_push_one_byte 
+6459 6fe0ce7a fetch 1 ,mem_shutter_back_count_cache 
+645a 1fe0ffff increase -1 ,pdata 
+645b 67e0ce7a store 1 ,mem_shutter_back_count_cache 
+645c 207a0000 rtn blank 
+645d 20206457 branch shutter_dy_move_down_left_corner_loop 
+
+shutter_dy_move_x_max:
+645e 6fe0ce73 fetch 1 ,mem_shutter_iphone_beyond_x_count 
+645f 207a0000 rtn blank 
+6460 67e0ce7b store 1 ,mem_shutter_iphone_beyond_x_cache 
+
+shutter_dy_move_x_max_number:
+6461 dfe0002c arg 0x2c ,pdata 
+6462 2040619f call queue_push_one_byte 
+6463 6fe0ce7b fetch 1 ,mem_shutter_iphone_beyond_x_cache 
+6464 1fe0ffff increase -1 ,pdata 
+6465 67e0ce7b store 1 ,mem_shutter_iphone_beyond_x_cache 
+6466 207a0000 rtn blank 
+6467 20206461 branch shutter_dy_move_x_max_number 
+
+shutter_dy_move_y_max:
+6468 6fe0ce74 fetch 1 ,mem_shutter_iphone_beyond_y_count 
+6469 207a0000 rtn blank 
+646a 67e0ce7c store 1 ,mem_shutter_iphone_beyond_y_cache 
+
+shutter_dy_move_y_max_number:
+646b dfe0002d arg 0x2d ,pdata 
+646c 2040619f call queue_push_one_byte 
+646d 6fe0ce7c fetch 1 ,mem_shutter_iphone_beyond_y_cache 
+646e 1fe0ffff increase -1 ,pdata 
+646f 67e0ce7c store 1 ,mem_shutter_iphone_beyond_y_cache 
+6470 207a0000 rtn blank 
+6471 2020646b branch shutter_dy_move_y_max_number 
+
+shutter_dy_check_combine_key_release:
+6472 6fe14ada fetch 2 ,mem_combine_key_state0 
+6473 207a0000 rtn blank 
+6474 684906cf fetcht 2 ,mem_key_value_temp 
+6475 18467c00 sub temp ,0 ,null 
+6476 2022e480 branch shutter_dy_check_combine_key_release_all ,zero 
+6477 98467c00 isub temp ,null 
+6478 20628000 rtn zero 
+6479 60494ada storet 2 ,mem_combine_key_state0 
+647a 6fe14e8a fetch 2 ,mem_combine_key_release_value 
+647b 98467c00 isub temp ,null 
+647c 2042b79a call app_led_off ,zero 
+
+shutter_dy_combine_key_enableuser:
+647d 6fe106cf fetch 2 ,mem_key_value_temp 
+647e 67e14445 store 2 ,mem_key_value_retention 
+647f 20207dbc branch enable_user 
+
+shutter_dy_check_combine_key_release_all:
+6480 704e8701 jam 1 ,mem_shutter_long_key_released_flag 
+6481 2040379a call app_led_off 
+6482 da604b18 arg mem_combine_key_release ,regc 
+6483 20406439 call shutter_dy_push_buffer_in_queue 
+6484 58000000 setarg 0 
+6485 67e14ada store 2 ,mem_combine_key_state0 
+6486 7046b132 jam 50 ,mem_shutter_1s_timer 
+6487 2040647d call shutter_dy_combine_key_enableuser 
+6488 6fe0c53a fetch 1 ,mem_shutter_key_num 
+6489 1feff20a mul32 pdata ,shutter_key_conf_sate_bytes ,loopcnt 
+648a d8a0495d arg mem_shutter_key_state0 ,contw 
+648b 20207ca3 branch clear_mem 
+
+shutter_dy_check_move_data:
+648c 44e34018 bpatch patch18_6 ,mem_patch18 
+648d 6fe0ce8e fetch 1 ,mem_move_mode_set 
+648e c000e491 beq move_single_key ,shutter_dy_check_move_data_single_key 
+648f c0006497 beq move_combine_key ,shutter_dy_check_move_data_combine_key 
+6490 20600000 rtn 
+
+shutter_dy_check_move_data_single_key:
+6491 18e27e00 copy queue ,pdata 
+6492 c002e4c0 beq shutter_left_key_num ,shutter_dy_move_left 
+6493 c0006507 beq shutter_right_key_num ,shutter_dy_move_right 
+6494 c002650f beq shutter_up_key_num ,shutter_dy_move_up 
+6495 c0016539 beq shutter_down_key_num ,shutter_dy_move_down 
+6496 20600000 rtn 
+
+shutter_dy_check_move_data_combine_key:
+6497 efe08013 ifetch 1 ,regc 
+6498 c000e4c0 beq 0x01 ,shutter_dy_move_left 
+6499 c0016507 beq 0x02 ,shutter_dy_move_right 
+649a c001e50f beq 0x03 ,shutter_dy_move_up 
+649b c0026539 beq 0x04 ,shutter_dy_move_down 
+649c c002e49e beq 0x05 ,shutter_dy_get_move_data 
+649d 20600000 rtn 
+
+shutter_dy_get_move_data:
+649e 204065b3 call shutter_dy_check_iphone 
+649f 243a64a8 nbranch shutter_dy_get_move_data_iphone ,blank 
+64a0 5800001b setarg 0x1b 
+64a1 1feffe0a mul32 pdata ,every_payload_len ,pdata 
+64a2 d8404c4b arg mem_shutter_mousekey_value_list ,temp 
+64a3 98408a00 iadd temp ,contw 
+64a4 18a08a05 increase 5 ,contw 
+64a5 6fe24b22 fetch 4 ,mem_shutter_move_data 
+64a6 e7e20005 istore 4 ,contw 
+64a7 20600000 rtn 
+
+shutter_dy_get_move_data_iphone:
+64a8 58000029 setarg 0x29 
+64a9 1feffe0a mul32 pdata ,every_payload_len ,pdata 
+64aa d8404c4b arg mem_shutter_mousekey_value_list ,temp 
+64ab 98408a00 iadd temp ,contw 
+64ac 18a08a03 increase 3 ,contw 
+64ad 6fe14e75 fetch 2 ,mem_shutter_move_data_x 
+64ae e7e18005 istore 3 ,contw 
+64af 18a08a07 increase 7 ,contw 
+64b0 6fe14e77 fetch 2 ,mem_shutter_move_data_y 
+64b1 1ff27e00 lshift4 pdata ,pdata 
+64b2 1fed7e00 lshift8 pdata ,pdata 
+64b3 e7e18005 istore 3 ,contw 
+64b4 20600000 rtn 
+
+shutter_dy_move_x_empty_check:
+64b5 6fe0ce73 fetch 1 ,mem_shutter_iphone_beyond_x_count 
+64b6 207a0000 rtn blank 
+64b7 1fe0ffff increase -1 ,pdata 
+64b8 67e0ce73 store 1 ,mem_shutter_iphone_beyond_x_count 
+64b9 dfe00fff arg iphone_once_max_move_value ,pdata 
+64ba 20600000 rtn 
+
+shutter_dy_every_move_size_set:
+64bb d8400055 arg android_every_move_size ,temp 
+64bc 204065b3 call shutter_dy_check_iphone 
+64bd 207a0000 rtn blank 
+64be d8400007 arg iphone_every_move_size ,temp 
+64bf 20600000 rtn 
+
+shutter_dy_move_left:
+64c0 204064bb call shutter_dy_every_move_size_set 
+64c1 6fe14e75 fetch 2 ,mem_shutter_move_data_x 
+64c2 98467c00 isub temp ,null 
+64c3 244164b5 ncall shutter_dy_move_x_empty_check ,positive 
+64c4 24610000 nrtn positive 
+64c5 98467e00 isub temp ,pdata 
+
+shutter_dy_move_store_x:
+64c6 67e14e75 store 2 ,mem_shutter_move_data_x 
+
+shutter_dy_move_data_store:
+64c7 44e3c018 bpatch patch18_7 ,mem_patch18 
+64c8 204065b3 call shutter_dy_check_iphone 
+64c9 203a64e2 branch shutter_dy_move_android_data_store ,blank 
+64ca 6fe14e75 fetch 2 ,mem_shutter_move_data_x 
+64cb 68494e77 fetcht 2 ,mem_shutter_move_data_y 
+64cc 184d0400 lshift8 temp ,temp 
+64cd 18520400 lshift4 temp ,temp 
+64ce 9840fe00 iadd temp ,pdata 
+64cf 67e1cb22 store 3 ,mem_shutter_move_data 
+64d0 204064d2 call shutter_dy_get_ios_move_data 
+64d1 202064da branch shutter_dy_move_ios_release_data 
+
+shutter_dy_get_ios_move_data:
+64d2 58000028 setarg 0x28 
+64d3 1feffe0a mul32 pdata ,every_payload_len ,pdata 
+64d4 d8404c4b arg mem_shutter_mousekey_value_list ,temp 
+64d5 98408a00 iadd temp ,contw 
+64d6 18a08a03 increase 3 ,contw 
+64d7 6fe1cb22 fetch 3 ,mem_shutter_move_data 
+64d8 e7e18005 istore 3 ,contw 
+64d9 20600000 rtn 
+
+shutter_dy_move_ios_release_data:
+64da 58000029 setarg 0x29 
+64db 1feffe0a mul32 pdata ,every_payload_len ,pdata 
+64dc d8404c4b arg mem_shutter_mousekey_value_list ,temp 
+64dd 98408a00 iadd temp ,contw 
+64de 18a08a03 increase 3 ,contw 
+64df 6fe1cb22 fetch 3 ,mem_shutter_move_data 
+64e0 e7e18005 istore 3 ,contw 
+64e1 20600000 rtn 
+
+shutter_dy_move_android_data_store:
+64e2 6fe14e75 fetch 2 ,mem_shutter_move_data_x 
+64e3 68494e77 fetcht 2 ,mem_shutter_move_data_y 
+64e4 18500400 lshift16 temp ,temp 
+64e5 9840fe00 iadd temp ,pdata 
+64e6 67e24b22 store 4 ,mem_shutter_move_data 
+64e7 204064e9 call shutter_dy_move_android_release_data 
+64e8 202064f1 branch shutter_dy_data_android_xy_data 
+
+shutter_dy_move_android_release_data:
+64e9 5800001b setarg 0x1b 
+64ea 1feffe0a mul32 pdata ,every_payload_len ,pdata 
+64eb d8404c4b arg mem_shutter_mousekey_value_list ,temp 
+64ec 98408a00 iadd temp ,contw 
+64ed 18a08a05 increase 5 ,contw 
+64ee 6fe24b22 fetch 4 ,mem_shutter_move_data 
+64ef e7e20005 istore 4 ,contw 
+64f0 20600000 rtn 
+
+shutter_dy_data_android_xy_data:
+64f1 5800001c setarg 0x1c 
+64f2 1feffe0a mul32 pdata ,every_payload_len ,pdata 
+64f3 d8404c4b arg mem_shutter_mousekey_value_list ,temp 
+64f4 98408a00 iadd temp ,contw 
+64f5 18a08a05 increase 5 ,contw 
+64f6 6fe24b22 fetch 4 ,mem_shutter_move_data 
+64f7 e7e20005 istore 4 ,contw 
+64f8 20600000 rtn 
+
+shutter_dy_move_x_check_max:
+64f9 6fe14e75 fetch 2 ,mem_shutter_move_data_x 
+64fa d8400fff arg iphone_once_max_move_value ,temp 
+64fb 98460400 isub temp ,temp 
+64fc 24610000 nrtn positive 
+64fd 18427e00 copy temp ,pdata 
+64fe 6848ce73 fetcht 1 ,mem_shutter_iphone_beyond_x_count 
+64ff 18467c03 sub temp ,0x03 ,null 
+6500 2022e504 branch shutter_dy_clear_move_x ,zero 
+6501 18408401 increase 1 ,temp 
+6502 6048ce73 storet 1 ,mem_shutter_iphone_beyond_x_count 
+6503 202064c6 branch shutter_dy_move_store_x 
+
+shutter_dy_clear_move_x:
+6504 704e7300 jam 0 ,mem_shutter_iphone_beyond_x_count 
+6505 dfe00000 arg 0 ,pdata 
+6506 202064c6 branch shutter_dy_move_store_x 
+
+shutter_dy_move_right:
+6507 204065b3 call shutter_dy_check_iphone 
+6508 245a64f9 ncall shutter_dy_move_x_check_max ,blank 
+6509 204064bb call shutter_dy_every_move_size_set 
+650a 6fe14e75 fetch 2 ,mem_shutter_move_data_x 
+
+shutter_dy_move_right_next:
+650b 9840fe00 iadd temp ,pdata 
+650c d8400fff arg 0xfff ,temp 
+650d 20407d6e call ceiling 
+650e 202064c6 branch shutter_dy_move_store_x 
+
+shutter_dy_move_up:
+650f 204065b3 call shutter_dy_check_iphone 
+6510 203a6523 branch shutter_dy_dnroid_up_check_y ,blank 
+
+shutter_dy_move_y_check_max:
+6511 204064bb call shutter_dy_every_move_size_set 
+6512 6fe14e77 fetch 2 ,mem_shutter_move_data_y 
+6513 98467e00 isub temp ,pdata 
+6514 67e14e77 store 2 ,mem_shutter_move_data_y 
+6515 68494e77 fetcht 2 ,mem_shutter_move_data_y 
+6516 58000fff setarg 0xfff 
+6517 98467e00 isub temp ,pdata 
+6518 d8400fff arg iphone_once_max_move_value ,temp 
+6519 98460400 isub temp ,temp 
+651a 242164c7 nbranch shutter_dy_move_data_store ,positive 
+651b 58000fff setarg 0xfff 
+651c 98467e00 isub temp ,pdata 
+651d 6848ce74 fetcht 1 ,mem_shutter_iphone_beyond_y_count 
+651e 18467c05 sub temp ,0x05 ,null 
+651f 2022e52a branch shutter_dy_clear_move_y ,zero 
+6520 18408401 increase 1 ,temp 
+6521 6048ce74 storet 1 ,mem_shutter_iphone_beyond_y_count 
+6522 20206537 branch shutter_dy_move_store_y 
+
+shutter_dy_dnroid_up_check_y:
+6523 204064bb call shutter_dy_every_move_size_set 
+6524 6fe14e77 fetch 2 ,mem_shutter_move_data_y 
+6525 98467c00 isub temp ,null 
+6526 24610000 nrtn positive 
+6527 98467e00 isub temp ,pdata 
+6528 67e14e77 store 2 ,mem_shutter_move_data_y 
+6529 202064c7 branch shutter_dy_move_data_store 
+
+shutter_dy_clear_move_y:
+652a 704e7400 jam 0 ,mem_shutter_iphone_beyond_y_count 
+
+shutter_dy_android_move_y_empty_check:
+652b 58000fff setarg 0xfff 
+652c 20206537 branch shutter_dy_move_store_y 
+
+shutter_dy_move_y_empty_check:
+652d 204065b3 call shutter_dy_check_iphone 
+652e 203a652b branch shutter_dy_android_move_y_empty_check ,blank 
+652f 6fe0ce74 fetch 1 ,mem_shutter_iphone_beyond_y_count 
+6530 203a652b branch shutter_dy_android_move_y_empty_check ,blank 
+6531 1fe0ffff increase -1 ,pdata 
+6532 67e0ce74 store 1 ,mem_shutter_iphone_beyond_y_count 
+6533 5800ffff setarg 0xffff 
+6534 d8400fff arg iphone_once_max_move_value ,temp 
+6535 98467e00 isub temp ,pdata 
+6536 9a20fe00 iadd rega ,pdata 
+
+shutter_dy_move_store_y:
+6537 67e14e77 store 2 ,mem_shutter_move_data_y 
+6538 202064c7 branch shutter_dy_move_data_store 
+
+shutter_dy_move_down:
+6539 204065b3 call shutter_dy_check_iphone 
+653a 203a6542 branch shutter_dy_move_android_down ,blank 
+
+shutter_dy_move_down_next:
+653b 204064bb call shutter_dy_every_move_size_set 
+653c 6fe14e77 fetch 2 ,mem_shutter_move_data_y 
+653d 9840fe00 iadd temp ,pdata 
+653e d8400fff arg 0xfff ,temp 
+653f 98462200 isub temp ,rega 
+6540 2041652d call shutter_dy_move_y_empty_check ,positive 
+6541 20206537 branch shutter_dy_move_store_y 
+
+shutter_dy_move_android_down:
+6542 204064bb call shutter_dy_every_move_size_set 
+6543 6fe14e77 fetch 2 ,mem_shutter_move_data_y 
+6544 9840fe00 iadd temp ,pdata 
+6545 d8400fff arg 0xfff ,temp 
+6546 20407d6e call ceiling 
+6547 20206537 branch shutter_dy_move_store_y 
+
+ble_shutter_dy_receive_data:
+6548 6fe1439c fetch 2 ,mem_le_att_handle 
+6549 c0126103 beq gatt_keyboard_write_handle_new ,ble_shutter_process_reconnect_complete 
+654a 20600000 rtn 
+
+shutter_dy_le_find_service_hand_by_uuid:
+654b da200017 arg 23 ,rega 
+654c da400004 arg le_l2cap_cid_att ,regb 
+654d 204029d9 call le_fifo_malloc_tx_l2cap 
+654e 58000006 setarg attop_find_by_type_value_request 
+654f e7e08005 istore 1 ,contw 
+6550 58000001 setarg 0x0001 
+6551 e7e10005 istore 2 ,contw 
+6552 5800ffff setarg 0xffff 
+6553 e7e10005 istore 2 ,contw 
+6554 58002800 setarg 0x2800 
+6555 e7e10005 istore 2 ,contw 
+6556 d8c04947 arg mem_dy_le_search_service_uuid ,contr 
+6557 20207c91 branch memcpy16 
+
+shutter_dy_le_parse_att:
+6558 44e44019 bpatch patch19_0 ,mem_patch19 
+6559 1a220c00 copy rega ,contr 
+655a efe18006 ifetch 3 ,contr 
+655b 67e1c39b store 3 ,mem_le_att_opcode 
+655c c003e587 beq attop_find_by_type_value_response ,shutter_dy_le_parse_att_find_by_type_value_rsp 
+655d c000e5a8 beq attop_error_response ,shutter_dy_le_parse_error_rsp 
+655e c0056577 beq attop_read_request ,shutter_dy_le_parse_att_read_request 
+655f c0066561 beq attop_read_blob_request ,shutter_dy_le_parse_att_read_blob_request 
+6560 20202b76 branch le_parse_att2 
+
+shutter_dy_le_parse_att_read_blob_request:
+6561 efe10006 ifetch 2 ,contr 
+6562 67e10693 store 2 ,mem_le_att_offset 
+6563 98002200 iforce rega 
+6564 6849439c fetcht 2 ,mem_le_att_handle 
+6565 6fe14334 fetch 2 ,mem_le_pairing_handle 
+6566 98467c00 isub temp ,null 
+6567 2422ad2e nbranch le_send_att_read_blob_response ,zero 
+6568 204065b3 call shutter_dy_check_iphone 
+6569 243a656c nbranch shutter_dy_le_parse_att_read_blob_request_ios ,blank 
+656a 68494943 fetcht 2 ,mem_shutter_le_map_len_android 
+656b 2020656d branch shutter_dy_le_parse_att_read_blob_request2 
+
+shutter_dy_le_parse_att_read_blob_request_ios:
+656c 68494945 fetcht 2 ,mem_shutter_le_map_len_ios 
+
+shutter_dy_le_parse_att_read_blob_request2:
+656d d8c046c1 arg mem_shutter_le_hid_map ,contr 
+656e 20407c6f call store_contr 
+656f 18427e00 copy temp ,pdata 
+6570 9a267e00 isub rega ,pdata 
+6571 24212de1 nbranch le_send_att_error_response_notfound ,positive 
+6572 1fe0fe01 increase 1 ,pdata 
+6573 1fe67c17 sub pdata ,23 ,null 
+6574 20212d37 branch le_send_att_read_blob_response_less ,positive 
+6575 18007e17 force 23 ,pdata 
+6576 20202d37 branch le_send_att_read_blob_response_less 
+
+shutter_dy_le_parse_att_read_request:
+6577 6849439c fetcht 2 ,mem_le_att_handle 
+6578 6fe0c323 fetch 1 ,mem_le_configuration 
+6579 c281e57b bbit1 bit_ble_read_auth ,shutter_dy_le_send_att_read_response_check_auth 
+657a 20202cfb branch le_send_att_read_response 
+
+shutter_dy_le_send_att_read_response_check_auth:
+657b 6fe14334 fetch 2 ,mem_le_pairing_handle 
+657c 98467c00 isub temp ,null 
+657d 2422acfb nbranch le_send_att_read_response ,zero 
+657e 20402da5 call le_check_encrypt_state 
+657f 24346581 nbranch shutter_dy_le_send_att_read_response ,user 
+6580 20202d24 branch le_send_att_read_response_error_insufficient_auth 
+
+shutter_dy_le_send_att_read_response:
+6581 6fe14334 fetch 2 ,mem_le_pairing_handle 
+6582 98467c00 isub temp ,null 
+6583 2422acfb nbranch le_send_att_read_response ,zero 
+6584 d8c046c1 arg mem_shutter_le_hid_map ,contr 
+6585 18007e17 force 23 ,pdata 
+6586 20202d0b branch le_send_att_read_response_less 
+
+shutter_dy_le_parse_att_find_by_type_value_rsp:
+
+shutter_dy_le_remote_iphone:
+6587 44e4c019 bpatch patch19_1 ,mem_patch19 
+6588 704e7105 jam 5 ,mem_shutter_back_count 
+6589 70495701 jam 1 ,mem_iphone_flag 
+658a 704e7901 jam 1 ,mem_last_shutter_le_iphone_flag 
+658b 704958f0 jam 240 ,mem_send_data_delay 
+658c 704e880a jam 10 ,mem_shutter_move_mid_timer 
+658d 704e8d01 jam 1 ,mem_shutter_first_move 
+658e 20406642 call shutter_dy_load_move_config_info 
+658f 6fe0ce89 fetch 1 ,mem_shutter_pairing_success 
+6590 207a0000 rtn blank 
+6591 20406606 call shutter_dy_clear_move_config 
+6592 d8400fff arg iphone_once_max_move_value ,temp 
+6593 6fe14f03 fetch 2 ,mem_iphone_initial_move_x 
+6594 da204e75 arg mem_shutter_move_data_x ,rega 
+6595 da404e73 arg mem_shutter_iphone_beyond_x_count ,regb 
+6596 204065a1 call shutter_dy_iphone_move_initial_set 
+6597 d8400fff arg iphone_once_max_move_value ,temp 
+6598 6fe14f05 fetch 2 ,mem_iphone_initial_move_y 
+6599 da204e77 arg mem_shutter_move_data_y ,rega 
+659a da404e74 arg mem_shutter_iphone_beyond_y_count ,regb 
+659b 204065a1 call shutter_dy_iphone_move_initial_set 
+659c 58000fff setarg 0xfff 
+659d 68494e77 fetcht 2 ,mem_shutter_move_data_y 
+659e 98467e00 isub temp ,pdata 
+659f 67e14e77 store 2 ,mem_shutter_move_data_y 
+65a0 20600000 rtn 
+
+shutter_dy_iphone_move_initial_set:
+65a1 9846fc00 idiv temp 
+65a2 20407d64 call wait_div_end 
+65a3 1807fe00 quotient pdata 
+65a4 18070400 remainder temp 
+65a5 e7e08012 istore 1 ,regb 
+65a6 e0410011 istoret 2 ,rega 
+65a7 20600000 rtn 
+
+shutter_dy_le_parse_error_rsp:
+65a8 18c08dfe increase -2 ,contr 
+65a9 efe08006 ifetch 1 ,contr 
+65aa c00365b1 beq attop_find_by_type_value_request ,shutter_dy_not_iphone_read_conf 
+65ab 20600000 rtn 
+
+shutter_dy_remote_not_iphone:
+65ac 704e7101 jam 1 ,mem_shutter_back_count 
+65ad 70495700 jam 0 ,mem_iphone_flag 
+65ae 704e7900 jam 0 ,mem_last_shutter_le_iphone_flag 
+65af 7049580a jam 10 ,mem_send_data_delay 
+65b0 20600000 rtn 
+
+shutter_dy_not_iphone_read_conf:
+65b1 204065ac call shutter_dy_remote_not_iphone 
+65b2 20206642 branch shutter_dy_load_move_config_info 
+
+shutter_dy_check_iphone:
+65b3 6fe0c957 fetch 1 ,mem_iphone_flag 
+65b4 20600000 rtn 
+
+shutter_dy_le_get_press_ptr:
+65b5 da6049b7 arg mem_dy_key0_press ,regc 
+65b6 204065b3 call shutter_dy_check_iphone 
+65b7 207a0000 rtn blank 
+65b8 70495878 jam 120 ,mem_send_data_delay 
+65b9 da604b26 arg mem_key0_press_i ,regc 
+65ba 20600000 rtn 
+
+shutter_dy_le_get_release_ptr:
+
+shutter_dy_le_get_release_ptr_set:
+65bb da604a11 arg mem_key0_release_new ,regc 
+65bc 204065b3 call shutter_dy_check_iphone 
+65bd 207a0000 rtn blank 
+65be da604b76 arg mem_key0_release_new_i ,regc 
+65bf 7049580c jam 12 ,mem_send_data_delay 
+65c0 18e27e00 copy queue ,pdata 
+65c1 c1008000 rtneq shutter_like_key_num 
+65c2 20600000 rtn 
+
+shutter_dy_le_get_release_ptr_volume:
+65c3 44e54019 bpatch patch19_2 ,mem_patch19 
+65c4 6fe0cc47 fetch 1 ,mem_key3_press_count 
+65c5 79407e00 setflip 0 ,pdata 
+65c6 67e0cc47 store 1 ,mem_key3_press_count 
+65c7 c00065cc beq 0 ,shutter_dy_le_get_release_ptr_set_volume_inc 
+65c8 c000e5ca beq 1 ,shutter_dy_le_get_release_ptr_set_volume_dec 
+65c9 20600000 rtn 
+
+shutter_dy_le_get_release_ptr_set_volume_dec:
+65ca 204065d3 call shutter_dy_le_get_vol_dec_ptr 
+65cb 2020618e branch push_buffer_in_queue 
+
+shutter_dy_le_get_release_ptr_set_volume_inc:
+65cc 204065ce call shutter_dy_le_get_vol_inc_ptr 
+65cd 2020618e branch push_buffer_in_queue 
+
+shutter_dy_le_get_vol_inc_ptr:
+65ce da604a3e arg mem_key3_release_new ,regc 
+65cf 204065b3 call shutter_dy_check_iphone 
+65d0 207a0000 rtn blank 
+65d1 da604ba3 arg mem_key3_release_new_i ,regc 
+65d2 20600000 rtn 
+
+shutter_dy_le_get_vol_dec_ptr:
+65d3 da604c33 arg mem_key3_release_new_t ,regc 
+65d4 204065b3 call shutter_dy_check_iphone 
+65d5 207a0000 rtn blank 
+65d6 da604c3d arg mem_key3_release_new_i_t ,regc 
+65d7 20600000 rtn 
+
+shutter_dy_long_key_function:
+65d8 18e27e00 copy queue ,pdata 
+65d9 c000e5fa beq shutter_like_key_num ,shutter_dy_link_key_long_press 
+65da c00165e8 beq shutter_down_key_num ,shutter_dy_loop_send_volume_dec_page 
+65db c00265e4 beq shutter_up_key_num ,shutter_dy_loop_send_volume_inc_page 
+65dc 20600000 rtn 
+
+shutter_dy_long_key_volume_timer:
+65dd da604f18 arg mem_shutter_volume_timer ,regc 
+65de da4065e0 arg shutter_dy_long_key_volume_timeout ,regb 
+65df 20203755 branch timer_single_step 
+
+shutter_dy_long_key_volume_timeout:
+65e0 704f1804 jam 4 ,mem_shutter_volume_timer 
+65e1 6fe0cc47 fetch 1 ,mem_key3_press_count 
+65e2 203a65e4 branch shutter_dy_loop_send_volume_inc_page ,blank 
+65e3 202065e8 branch shutter_dy_loop_send_volume_dec_page 
+
+shutter_dy_loop_send_volume_inc_page:
+65e4 704c4700 jam 0 ,mem_key3_press_count 
+65e5 704f1804 jam 4 ,mem_shutter_volume_timer 
+65e6 da604aa4 arg mem_key4_long_press ,regc 
+65e7 2020618e branch push_buffer_in_queue 
+
+shutter_dy_loop_send_volume_dec_page:
+65e8 704c4701 jam 1 ,mem_key3_press_count 
+65e9 704f1804 jam 4 ,mem_shutter_volume_timer 
+65ea da604a9e arg mem_key2_long_press ,regc 
+65eb 2020618e branch push_buffer_in_queue 
+
+shutter_dy_clear_volume_timer:
+65ec 704c4700 jam 0 ,mem_key3_press_count 
+65ed 704f1800 jam 0 ,mem_shutter_volume_timer 
+65ee 20600000 rtn 
+
+shutter_dy_link_key_loop_timer:
+65ef da604f19 arg mem_shutter_link_timer ,regc 
+65f0 da4065f2 arg shutter_dy_link_key_loop_timeout ,regb 
+65f1 20203755 branch timer_single_step 
+
+shutter_dy_link_key_loop_timeout:
+65f2 704f1902 jam 2 ,mem_shutter_link_timer 
+65f3 204065f5 call shutter_dy_link_data_android_or_ios 
+65f4 2020618e branch push_buffer_in_queue 
+
+shutter_dy_link_data_android_or_ios:
+65f5 da604f1a arg mem_shutter_link_data ,regc 
+65f6 204065b3 call shutter_dy_check_iphone 
+65f7 207a0000 rtn blank 
+65f8 da604f22 arg mem_shutter_link_data_i ,regc 
+65f9 20600000 rtn 
+
+shutter_dy_link_key_long_press:
+65fa 6fe0cf2a fetch 1 ,mem_shutter_link_loop_flag 
+65fb 243a65ff nbranch shutter_dy_clear_link_key_timer ,blank 
+65fc 704f2a01 jam 1 ,mem_shutter_link_loop_flag 
+65fd 704f1902 jam 2 ,mem_shutter_link_timer 
+65fe 20600000 rtn 
+
+shutter_dy_clear_link_key_timer:
+65ff 704f2a00 jam 0 ,mem_shutter_link_loop_flag 
+6600 704f1900 jam 0 ,mem_shutter_link_timer 
+6601 20600000 rtn 
+
+shutter_dy_jude_clear_move_config:
+6602 6fe0ce72 fetch 1 ,mem_shutter_le_conned 
+6603 247a0000 nrtn blank 
+6604 704e7201 jam 1 ,mem_shutter_le_conned 
+6605 202064c7 branch shutter_dy_move_data_store 
+
+shutter_dy_clear_move_config:
+6606 58000000 setarg 0 
+6607 67e3ce73 store 7 ,mem_move_config 
+6608 20600000 rtn 
+
+shutter_dy_write_otp_convert_data:
+6609 204065b3 call shutter_dy_check_iphone 
+660a c000e611 beq 0x01 ,shutter_dy_store_ios_config_data 
+660b c0006623 beq 0x00 ,shutter_dy_store_android_config 
+660c 20600000 rtn 
+
+shutter_dy_read_otp_convert_data:
+660d 6fe0cf0b fetch 1 ,mem_otp_last_shutter_le_iphone_flag 
+660e c000e62a beq 0x01 ,shutter_dy_get_ios_config 
+660f c000663c beq 0x00 ,shutter_dy_get_android_config 
+6610 20600000 rtn 
+
+shutter_dy_store_ios_config_data:
+6611 6fe0ce73 fetch 1 ,mem_shutter_iphone_beyond_x_count 
+6612 1fefffff mul32 pdata ,iphone_once_max_move_value ,pdata 
+6613 1fe20400 copy pdata ,temp 
+6614 6fe14e75 fetch 2 ,mem_shutter_move_data_x 
+6615 9840fe00 iadd temp ,pdata 
+6616 67e14f07 store 2 ,mem_otp_shutter_move_data_x 
+6617 6fe0ce74 fetch 1 ,mem_shutter_iphone_beyond_y_count 
+6618 1fefffff mul32 pdata ,iphone_once_max_move_value ,pdata 
+6619 1fe20400 copy pdata ,temp 
+661a 6fe14e77 fetch 2 ,mem_shutter_move_data_y 
+661b 1fe22200 copy pdata ,rega 
+661c 58000fff setarg 0xfff 
+661d 9a267e00 isub rega ,pdata 
+661e 9840fe00 iadd temp ,pdata 
+661f 67e14f09 store 2 ,mem_otp_shutter_move_data_y 
+6620 204065b3 call shutter_dy_check_iphone 
+6621 67e0cf0b store 1 ,mem_otp_last_shutter_le_iphone_flag 
+6622 20600000 rtn 
+
+shutter_dy_store_android_config:
+6623 6fe14e75 fetch 2 ,mem_shutter_move_data_x 
+6624 67e14f07 store 2 ,mem_otp_shutter_move_data_x 
+6625 6fe14e77 fetch 2 ,mem_shutter_move_data_y 
+6626 67e14f09 store 2 ,mem_otp_shutter_move_data_y 
+6627 204065b3 call shutter_dy_check_iphone 
+6628 67e0cf0b store 1 ,mem_otp_last_shutter_le_iphone_flag 
+6629 20600000 rtn 
+
+shutter_dy_get_ios_config:
+662a 6fe14f07 fetch 2 ,mem_otp_shutter_move_data_x 
+662b 1fe6fdff div pdata ,iphone_once_max_move_value 
+662c 20407d64 call wait_div_end 
+662d 1807fe00 quotient pdata 
+662e 18070400 remainder temp 
+662f 67e0ce73 store 1 ,mem_shutter_iphone_beyond_x_count 
+6630 18427e00 copy temp ,pdata 
+6631 67e14e75 store 2 ,mem_shutter_move_data_x 
+6632 6fe14f09 fetch 2 ,mem_otp_shutter_move_data_y 
+6633 1fe6fdff div pdata ,iphone_once_max_move_value 
+6634 20407d64 call wait_div_end 
+6635 1807fe00 quotient pdata 
+6636 18070400 remainder temp 
+6637 67e0ce74 store 1 ,mem_shutter_iphone_beyond_y_count 
+6638 58000fff setarg 0xfff 
+6639 98467e00 isub temp ,pdata 
+663a 67e14e77 store 2 ,mem_shutter_move_data_y 
+663b 20600000 rtn 
+
+shutter_dy_get_android_config:
+663c 6fe14f07 fetch 2 ,mem_otp_shutter_move_data_x 
+663d 67e14e75 store 2 ,mem_shutter_move_data_x 
+663e 6fe14f09 fetch 2 ,mem_otp_shutter_move_data_y 
+663f 67e14e77 store 2 ,mem_shutter_move_data_y 
+6640 20600000 rtn 
+
+shutter_dy_store_move_config_info:
+6641 202066bd branch shutter_dy_campare_effective_addr_write_otp 
+
+shutter_dy_load_move_config_info:
+6642 202066a4 branch shutter_dy_campare_effective_addr_read_otp 
+
+shutter_dy_shutter_uart_config_loop:
+6643 20406665 call shutter_dy_update_read_check_addr 
+6644 6fe14f0e fetch 2 ,mem_otp_read_offset_addr 
+6645 204066d0 call shutter_dy_shutter_read_move_config_from_otp_addr 
+6646 704f1600 jam 0 ,mem_shutter_first_read_flag 
+6647 6fe2cf07 fetch 5 ,mem_otp_move_config 
+6648 704f1700 jam 0 ,mem_shutter_valid_data_flag 
+6649 704f1400 jam 0 ,mem_shutter_temp_count 
+664a 20406669 call shutter_dy_campare_otp_data 
+664b 6fe0cf14 fetch 1 ,mem_shutter_temp_count 
+664c c1000000 rtneq 0 
+664d 20206643 branch shutter_dy_shutter_uart_config_loop 
+
+shutter_dy_shutter_get_first_read_addr:
+664e 6fe14efb fetch 2 ,mem_shutter_efuse_start_offset 
+664f 1fe0fffb increase -5 ,pdata 
+6650 67e14f0e store 2 ,mem_otp_read_offset_addr 
+6651 20600000 rtn 
+
+shutter_dy_shutter_next_read_addr:
+6652 6fe14f0e fetch 2 ,mem_otp_read_offset_addr 
+6653 1fe0fffb increase -5 ,pdata 
+6654 67e14f0e store 2 ,mem_otp_read_offset_addr 
+6655 20600000 rtn 
+
+shutter_dy_shutter_last_read_addr:
+6656 6fe14f0e fetch 2 ,mem_otp_read_offset_addr 
+6657 1fe0fe05 pincrease 5 
+6658 67e14f0e store 2 ,mem_otp_read_offset_addr 
+6659 20600000 rtn 
+
+shutter_dy_shutter_read_ios_android_addr:
+665a 6fe14f10 fetch 2 ,mem_otp_read_ios_android_addr 
+665b 1fe0fe05 pincrease 5 
+665c 67e14f10 store 2 ,mem_otp_read_ios_android_addr 
+665d 6fe14f10 fetch 2 ,mem_otp_read_ios_android_addr 
+665e 1fe20400 copy pdata ,temp 
+665f 6fe14efb fetch 2 ,mem_shutter_efuse_start_offset 
+6660 98467e00 isub temp ,pdata 
+6661 d8400005 arg shutter_para_total_num ,temp 
+6662 98467c00 isub temp ,null 
+6663 24216689 nbranch shutter_dy_shutter_not_find_ios_or_android ,positive 
+6664 20600000 rtn 
+
+shutter_dy_update_read_check_addr:
+6665 6fe0cf16 fetch 1 ,mem_shutter_first_read_flag 
+6666 c000e64e beq 0x01 ,shutter_dy_shutter_get_first_read_addr 
+6667 c0006652 beq 0x00 ,shutter_dy_shutter_next_read_addr 
+6668 20600000 rtn 
+
+shutter_dy_campare_otp_data:
+6669 da400000 arg 0x0 ,regb 
+666a 1a420400 copy regb ,temp 
+666b 6fe14f07 fetch 2 ,mem_otp_shutter_move_data_x 
+666c a843fe00 icompare 0xffff ,temp 
+666d 2440e679 ncall shutter_dy_set_shutter_valid_data_flag ,true 
+666e da400000 arg 0x0 ,regb 
+666f 1a420400 copy regb ,temp 
+6670 6fe14f09 fetch 2 ,mem_otp_shutter_move_data_y 
+6671 a843fe00 icompare 0xffff ,temp 
+6672 2440e679 ncall shutter_dy_set_shutter_valid_data_flag ,true 
+6673 da400000 arg 0x0 ,regb 
+6674 1a420400 copy regb ,temp 
+6675 6fe0cf0b fetch 1 ,mem_otp_last_shutter_le_iphone_flag 
+6676 a841fe00 icompare 0xff ,temp 
+6677 2440e679 ncall shutter_dy_set_shutter_valid_data_flag ,true 
+6678 20600000 rtn 
+
+shutter_dy_set_shutter_valid_data_flag:
+6679 6fe0cf14 fetch 1 ,mem_shutter_temp_count 
+667a 1fe0fe01 pincrease 1 
+667b 67e0cf14 store 1 ,mem_shutter_temp_count 
+667c 20600000 rtn 
+
+shutter_dy_shutter_judge_ios_or_android:
+667d 704f1401 jam 1 ,mem_shutter_temp_count 
+667e 2040665a call shutter_dy_shutter_read_ios_android_addr 
+667f 6fe14f10 fetch 2 ,mem_otp_read_ios_android_addr 
+6680 204066d0 call shutter_dy_shutter_read_move_config_from_otp_addr 
+6681 204065b3 call shutter_dy_check_iphone 
+6682 1fe20400 copy pdata ,temp 
+6683 6fe0cf0b fetch 1 ,mem_otp_last_shutter_le_iphone_flag 
+6684 a841fe00 icompare 0xff ,temp 
+6685 2040e6a2 call shutter_dy_clear_temp_count ,true 
+6686 6fe0cf14 fetch 1 ,mem_shutter_temp_count 
+6687 c1000000 rtneq 0 
+6688 2020667d branch shutter_dy_shutter_judge_ios_or_android 
+
+shutter_dy_shutter_not_find_ios_or_android:
+6689 44e5c019 bpatch patch19_3 ,mem_patch19 
+668a 204066a2 call shutter_dy_clear_temp_count 
+668b 204065b3 call shutter_dy_check_iphone 
+668c 203a668e branch shutter_dy_shutter_android_save_init_loaction ,blank 
+668d 20206693 branch shutter_dy_shutter_ios_save_init_loaction 
+
+shutter_dy_shutter_android_save_init_loaction:
+668e 6fe14eff fetch 2 ,mem_android_initial_move_x 
+668f 67e14e75 store 2 ,mem_shutter_move_data_x 
+6690 6fe14f01 fetch 2 ,mem_android_initial_move_y 
+6691 67e14e77 store 2 ,mem_shutter_move_data_y 
+6692 20206641 branch shutter_dy_store_move_config_info 
+
+shutter_dy_shutter_ios_save_init_loaction:
+6693 d8400fff arg iphone_once_max_move_value ,temp 
+6694 6fe14f03 fetch 2 ,mem_iphone_initial_move_x 
+6695 da204e75 arg mem_shutter_move_data_x ,rega 
+6696 da404e73 arg mem_shutter_iphone_beyond_x_count ,regb 
+6697 204065a1 call shutter_dy_iphone_move_initial_set 
+6698 d8400fff arg iphone_once_max_move_value ,temp 
+6699 6fe14f05 fetch 2 ,mem_iphone_initial_move_y 
+669a da204e77 arg mem_shutter_move_data_y ,rega 
+669b da404e74 arg mem_shutter_iphone_beyond_y_count ,regb 
+669c 204065a1 call shutter_dy_iphone_move_initial_set 
+669d 58000fff setarg 0xfff 
+669e 68494e77 fetcht 2 ,mem_shutter_move_data_y 
+669f 98467e00 isub temp ,pdata 
+66a0 67e14e77 store 2 ,mem_shutter_move_data_y 
+66a1 20206641 branch shutter_dy_store_move_config_info 
+
+shutter_dy_clear_temp_count:
+66a2 704f1400 jam 0 ,mem_shutter_temp_count 
+66a3 20600000 rtn 
+
+shutter_dy_campare_effective_addr_read_otp:
+66a4 44e64019 bpatch patch19_4 ,mem_patch19 
+66a5 704f1601 jam 1 ,mem_shutter_first_read_flag 
+66a6 20406643 call shutter_dy_shutter_uart_config_loop 
+66a7 6fe14efd fetch 2 ,mem_shutter_efuse_end_offset 
+66a8 1fe20400 copy pdata ,temp 
+66a9 6fe14f0e fetch 2 ,mem_otp_read_offset_addr 
+66aa 98467e00 isub temp ,pdata 
+66ab d8400000 arg 0x0 ,temp 
+66ac 98467c00 isub temp ,null 
+66ad 24610000 nrtn positive 
+66ae 6fe14f0e fetch 2 ,mem_otp_read_offset_addr 
+66af 1fe20400 copy pdata ,temp 
+66b0 6fe14efb fetch 2 ,mem_shutter_efuse_start_offset 
+66b1 1fe0fffb increase -5 ,pdata 
+66b2 98467e00 isub temp ,pdata 
+66b3 6fe14f0e fetch 2 ,mem_otp_read_offset_addr 
+66b4 67e14f10 store 2 ,mem_otp_read_ios_android_addr 
+66b5 2040667d call shutter_dy_shutter_judge_ios_or_android 
+66b6 6fe14f10 fetch 2 ,mem_otp_read_ios_android_addr 
+66b7 2442e6d0 ncall shutter_dy_shutter_read_move_config_from_otp_addr ,zero 
+66b8 704f1400 jam 0 ,mem_shutter_temp_count 
+66b9 20406669 call shutter_dy_campare_otp_data 
+66ba 6fe0cf14 fetch 1 ,mem_shutter_temp_count 
+66bb c1000000 rtneq 0 
+66bc 2020660d branch shutter_dy_read_otp_convert_data 
+
+shutter_dy_campare_effective_addr_write_otp:
+66bd 44e6c019 bpatch patch19_5 ,mem_patch19 
+66be 704f1601 jam 1 ,mem_shutter_first_read_flag 
+66bf 20406643 call shutter_dy_shutter_uart_config_loop 
+66c0 68494efd fetcht 2 ,mem_shutter_efuse_end_offset 
+66c1 6fe14f0e fetch 2 ,mem_otp_read_offset_addr 
+66c2 98467e00 isub temp ,pdata 
+66c3 d8400000 arg 0x0 ,temp 
+66c4 98467c00 isub temp ,null 
+66c5 24610000 nrtn positive 
+66c6 68494f0e fetcht 2 ,mem_otp_read_offset_addr 
+66c7 6fe14efb fetch 2 ,mem_shutter_efuse_start_offset 
+66c8 98467e00 isub temp ,pdata 
+66c9 d8400000 arg 0x0 ,temp 
+66ca 98467c00 isub temp ,null 
+66cb 24610000 nrtn positive 
+66cc 6fe14f0e fetch 2 ,mem_otp_read_offset_addr 
+66cd 67e14f0c store 2 ,mem_otp_write_offset_addr 
+66ce 20406609 call shutter_dy_write_otp_convert_data 
+66cf 202066d5 branch shutter_dy_shutter_write_move_config_to_otp_addr 
+
+shutter_dy_shutter_read_move_config_from_otp_addr:
+66d0 1fe22400 copy pdata ,regb 
+66d1 44e74019 bpatch patch19_6 ,mem_patch19 
+66d2 df200005 arg shutter_para_total_num ,loopcnt 
+66d3 da204f07 arg mem_otp_move_config ,rega 
+66d4 20206b62 branch otp_read_data 
+
+shutter_dy_shutter_write_move_config_to_otp_addr:
+66d5 df200005 arg shutter_para_total_num ,loopcnt 
+66d6 da204f07 arg mem_otp_move_config ,rega 
+66d7 6a414f0c fetchr regb ,2 ,mem_otp_write_offset_addr 
+66d8 20206b33 branch otp_write 
+
+shutter_dy_shutter_1s_timer:
+66d9 da6046b1 arg mem_shutter_1s_timer ,regc 
+66da da406641 arg shutter_dy_store_move_config_info ,regb 
+66db 20203755 branch timer_single_step 
+
+rf_debug_rx_gpio_low:
+66dc 6fe0c456 fetch 1 ,mem_rf_debug_rx_gpio 
+
+rf_debug_gpio_low:
+66dd d840003e arg gpcfg_output_low ,temp 
+66de 20206f1c branch gpio_config_function 
+
+rf_debug_rx_on_line:
+
+rf_debug_rx_gpio_high:
+66df 6fe0c456 fetch 1 ,mem_rf_debug_rx_gpio 
+
+rf_debug_gpio_high:
+66e0 d840003f arg gpcfg_output_high ,temp 
+66e1 20206f1c branch gpio_config_function 
+
+rf_debug_rx_gpio_h_l_h:
+66e2 204066df call rf_debug_rx_gpio_high 
+
+rf_debug_rx_gpio_l_h:
+66e3 204066dc call rf_debug_rx_gpio_low 
+66e4 202066df branch rf_debug_rx_gpio_high 
+
+rf_debug_rx_gpio_l_h_l:
+
+rf_debug_shutdown_radio_line:
+66e5 204066e3 call rf_debug_rx_gpio_l_h 
+
+rf_debug_rx_crc_line:
+66e6 202066dc branch rf_debug_rx_gpio_low 
+
+rf_debug_rx_sync_line:
+66e7 202066e3 branch rf_debug_rx_gpio_l_h 
+
+rf_debug_rx_crc_fail_line:
+66e8 204066e3 call rf_debug_rx_gpio_l_h 
+66e9 202066e5 branch rf_debug_rx_gpio_l_h_l 
+
+rf_debug_rx_match_line:
+
+rf_debug_rx_crc_error_line:
+
+rf_debug_rx_sync_timeout_line:
+66ea 202066dc branch rf_debug_rx_gpio_low 
+
+rf_debug_tx_off_line:
+
+rf_debug_tx_gpio_low:
+66eb 6fe0c457 fetch 1 ,mem_rf_debug_tx_gpio 
+66ec 202066dd branch rf_debug_gpio_low 
+
+rf_debug_tx_on_line:
+
+rf_debug_tx_gpio_high:
+66ed 6fe0c457 fetch 1 ,mem_rf_debug_tx_gpio 
+66ee 202066e0 branch rf_debug_gpio_high 
+
+rf_debug_tx_gpio_l_h_l:
+66ef 204066eb call rf_debug_tx_gpio_low 
+66f0 204066ed call rf_debug_tx_gpio_high 
+66f1 202066eb branch rf_debug_tx_gpio_low 
+
+hci_init:
+66f2 20800000 clear_stack 
+66f3 2040711d call wdt_set_disable 
+66f4 204066fd call hci_init_clksel_xtal 
+66f5 204066ff call hci_init_uart_default_config 
+66f6 20406713 call hci_init_uart_config 
+66f7 2040672f call hci_init_pwm_default_config 
+66f8 20406733 call hci_init_pwm 
+66f9 7006ed01 jam 1 ,mem_hci_command_complete_num_hci_command_packet 
+66fa 7006ea04 jam hci_h4_type_event ,mem_hci_event_head_type 
+
+hci_process_loop:
+66fb 2040673e call hci_process_check_uart_rx 
+66fc 202066fb branch hci_process_loop 
+
+hci_init_clksel_xtal:
+66fd 70804204 jam clksel_xtal ,core_clksel 
+66fe 20600000 rtn 
+
+hci_init_uart_default_config:
+66ff 20406703 call hci_init_uart_default_config_tx 
+6700 20406707 call hci_init_uart_default_config_rx 
+6701 2040670b call hci_init_uart_default_config_rts 
+6702 2020670f branch hci_init_uart_default_config_cts 
+
+hci_init_uart_default_config_tx:
+6703 6fe0c508 fetch 1 ,mem_hci_uart_tx_gpio 
+6704 247a0000 nrtn blank 
+6705 70450807 jam hci_uart_tx_gpio_num ,mem_hci_uart_tx_gpio 
+6706 20600000 rtn 
+
+hci_init_uart_default_config_rx:
+6707 6fe0c509 fetch 1 ,mem_hci_uart_rx_gpio 
+6708 247a0000 nrtn blank 
+6709 70450906 jam hci_uart_rx_gpio_num ,mem_hci_uart_rx_gpio 
+670a 20600000 rtn 
+
+hci_init_uart_default_config_rts:
+670b 6fe0c50a fetch 1 ,mem_hci_uart_rts_gpio 
+670c 247a0000 nrtn blank 
+670d 70450a09 jam hci_uart_rts_gpio_num ,mem_hci_uart_rts_gpio 
+670e 20600000 rtn 
+
+hci_init_uart_default_config_cts:
+670f 6fe0c50b fetch 1 ,mem_hci_uart_cts_gpio 
+6710 247a0000 nrtn blank 
+6711 70450b0a jam hci_uart_cts_gpio_num ,mem_hci_uart_cts_gpio 
+6712 20600000 rtn 
+
+hci_init_uart_config:
+6713 58000c00 setarg mem_h5rx_buf 
+6714 67e1064e store 2 ,mem_pdatatemp 
+6715 58000eff setarg mem_h5rx_buf_end 
+6716 e7e10005 istore 2 ,contw 
+6717 58000f00 setarg mem_h5tx_buf 
+6718 e7e10005 istore 2 ,contw 
+6719 58000fff setarg mem_h5tx_buf_end 
+671a e7e10005 istore 2 ,contw 
+671b 6fe4064e fetch 8 ,mem_pdatatemp 
+671c 20406d5b call uarta_init_dma_mem 
+671d 20406d75 call uart_clock_select_main_freq_crystal 
+671e d841c200 arg 115200 ,temp 
+671f 20406d68 call uarta_calc_baud_rate_config 
+6720 6fe0c508 fetch 1 ,mem_hci_uart_tx_gpio 
+6721 d8400008 arg gpcfg_uart_txd ,temp 
+6722 20406f1d call gpio_config_function_int 
+6723 6fe0c509 fetch 1 ,mem_hci_uart_rx_gpio 
+6724 d8400049 arg gpcfg_uart_rxd | gpcfg_pullup ,temp 
+6725 20406f1d call gpio_config_function_int 
+6726 6fe0c50a fetch 1 ,mem_hci_uart_rts_gpio 
+6727 d840000a arg gpcfg_uart_rts ,temp 
+6728 20406f1d call gpio_config_function_int 
+6729 6fe0c50b fetch 1 ,mem_hci_uart_cts_gpio 
+672a d840000b arg gpcfg_uart_cts ,temp 
+672b 20406f1d call gpio_config_function_int 
+672c d8400081 arg fun_uart_control_enable | fun_uart_control_setting_rate_baud ,temp 
+672d 60588060 storet 1 ,core_uart_ctrl 
+672e 20207d78 branch clean_xmem 
+
+hci_init_pwm_default_config:
+672f 6fe0c50c fetch 1 ,mem_hci_pwm_12mhz_gpio 
+6730 247a0000 nrtn blank 
+6731 70450c0c jam hci_pmw_12mhz_gpio_num ,mem_hci_pwm_12mhz_gpio 
+6732 20600000 rtn 
+
+hci_init_pwm:
+6733 6fe0c50c fetch 1 ,mem_hci_pwm_12mhz_gpio 
+6734 d8400010 arg gpcfg_pwm_out0 ,temp 
+6735 20406f1d call gpio_config_function_int 
+6736 da200040 arg 0x40 ,rega 
+6737 204070b9 call pwm_init 
+6738 da200000 arg 0 ,rega 
+6739 da400000 arg 0 ,regb 
+673a 58000000 setarg 0 
+673b 204070de call pwm_duty_cycle_set 
+673c d8e00000 arg 0 ,queue 
+673d 20207106 branch pwm_set_select 
+
+hci_process_check_uart_rx:
+673e 6ff10112 fetch 2 ,core_uart_rxitems 
+673f 1fe0a3fc add pdata ,-4 ,rega 
+6740 24610000 nrtn positive 
+6741 20406d89 call uarta_prepare_rx 
+6742 efe08003 ifetch 1 ,contru 
+6743 c000e746 beq hci_h4_type_cmd ,hci_parse_packet_cmd 
+6744 20407c97 call delay_10ms 
+6745 20206d91 branch uarta_clear_current_rx 
+
+hci_parse_packet_cmd:
+6746 efe10003 ifetch 2 ,contru 
+6747 67e106ee store 2 ,mem_hci_opcode 
+6748 d84003ff arg 0x3ff ,temp 
+6749 98410400 iand temp ,temp 
+674a 604906e7 storet 2 ,mem_hci_opcode_ocf 
+674b 1feb7e00 rshift2 pdata ,pdata 
+674c 1fecfe00 rshift8 pdata ,pdata 
+674d 67e086e9 store 1 ,mem_hci_opcode_ogf 
+674e efe08003 ifetch 1 ,contru 
+674f 1fe0ffff pincrease -1 
+6750 9a267c00 isub rega ,null 
+6751 20610000 rtn positive 
+6752 20406754 call hci_parse_complete_packet 
+6753 202067af branch hci_drop_current_packet 
+
+hci_parse_complete_packet:
+6754 6fe086e9 fetch 1 ,mem_hci_opcode_ogf 
+6755 c01fe757 beq hci_ogf_vendor_specific_debug ,hci_parse_packet_cmd_ogf_vendorspecific_debug 
+6756 2020679b branch hci_send_event_command_complete_error_command_nuknown 
+
+hci_parse_packet_cmd_ogf_vendorspecific_debug:
+6757 44e9401a bpatch patch1a_2 ,mem_patch1a 
+6758 6fe086e7 fetch 1 ,mem_hci_opcode_ocf 
+6759 c000679a beq hci_vendor_cmd_reset ,hci_normal_reply 
+675a c000e762 beq hci_vendor_cmd_chipid ,phci_grp_vendor_chipid 
+675b c0016767 beq hci_vendor_cmd_baud ,phci_grp_vendor_baud 
+675c c001e775 beq hci_vendor_cmd_patch ,phci_grp_vendor_patch 
+675d c002677f beq hci_vendor_cmd_patch_done ,phci_grp_vendor_done 
+675e c002e79a beq hci_vendor_cmd_echo ,hci_normal_reply 
+675f c0086790 beq hci_vendor_cmd_mem ,phci_grp_vendor_mem 
+6760 c00a6796 beq hci_vendor_cmd_set_flow_control ,phci_grp_vendor_flow_control 
+6761 2020679a branch hci_normal_reply 
+
+phci_grp_vendor_chipid:
+6762 7006f000 jam command_succeeded ,mem_hci_command_complete_return_parameter 
+6763 6ff10000 fetch 2 ,core_chipid 
+6764 67e106f1 store 2 ,mem_hci_command_complete_return_parameter_chip_id 
+6765 df200003 arg 3 ,loopcnt 
+6766 202067a2 branch hci_send_event_command_complete 
+
+phci_grp_vendor_baud:
+6767 efe10003 ifetch 2 ,contu 
+6768 67f10052 store 2 ,core_uart_baud 
+6769 20600000 rtn 
+
+phci_grp_vendor_patch_common:
+676a efe08003 ifetch 1 ,contu 
+676b 1fe20400 copy pdata ,temp 
+676c 67f08024 store 1 ,core_ucode_low 
+676d efe08003 ifetch 1 ,contu 
+676e 98408400 iadd temp ,temp 
+676f 79207e07 set1 7 ,pdata 
+6770 67f08023 store 1 ,core_ucode_ctrl 
+6771 efe08003 ifetch 1 ,contu 
+6772 98408400 iadd temp ,temp 
+6773 1fe27200 copy pdata ,loopcnt 
+6774 20600000 rtn 
+
+phci_grp_vendor_patch:
+6775 2040676a call phci_grp_vendor_patch_common 
+
+phci_grp_vendor_patch_loop:
+6776 efe08003 ifetch 1 ,contu 
+6777 67f08025 store 1 ,core_ucode_data 
+6778 98408400 iadd temp ,temp 
+6779 c2006776 loop phci_grp_vendor_patch_loop 
+
+phci_grp_vendor_patch_check_sum:
+677a 184104ff and temp ,0xff ,temp 
+677b efe08003 ifetch 1 ,contu 
+677c 98467c00 isub temp ,null 
+677d 2422e78e nbranch phci_grp_vendor_patch_bad ,zero 
+677e 2020679a branch hci_normal_reply 
+
+phci_grp_vendor_done:
+677f df200020 arg 0x20 ,loopcnt 
+6780 d8a04000 arg mem_patch00 ,contw 
+6781 d8400000 arg 0 ,temp 
+
+phci_grp_vendor_done_loop:
+6782 efe08003 ifetch 1 ,contu 
+6783 e7e08005 istore 1 ,contw 
+6784 98408400 iadd temp ,temp 
+6785 c2006782 loop phci_grp_vendor_done_loop 
+6786 184104ff and temp ,0xff ,temp 
+6787 efe08003 ifetch 1 ,contu 
+6788 98467c00 isub temp ,null 
+6789 2422e78e nbranch phci_grp_vendor_patch_bad ,zero 
+678a 70802300 jam 0 ,core_ucode_ctrl 
+678b 2040679a call hci_normal_reply 
+678c 20406da1 call wait_uarttx 
+678d 20202001 branch soft_reset 
+
+phci_grp_vendor_patch_bad:
+678e 70802300 jam 0 ,core_ucode_ctrl 
+678f 2020679b branch hci_send_event_command_complete_error_command_nuknown 
+
+phci_grp_vendor_mem:
+6790 efe08003 ifetch 1 ,contu 
+6791 1fe27200 copy pdata ,loopcnt 
+6792 efe10003 ifetch 2 ,contu 
+6793 1fe20a00 copy pdata ,contw 
+6794 20406dd0 call uart_copy_rx_bytes 
+6795 2020679a branch hci_normal_reply 
+
+phci_grp_vendor_flow_control:
+6796 6ff08060 fetch 1 ,core_uart_ctrl 
+6797 79207e04 set1 bit_uart_control_flow_control ,pdata 
+6798 67f08060 store 1 ,core_uart_ctrl 
+6799 2020679a branch hci_normal_reply 
+
+hci_normal_reply:
+679a 2020679f branch hci_send_event_command_complete_without_payload 
+
+hci_send_event_command_complete_error_command_nuknown:
+679b 7006f001 jam command_unknown ,mem_hci_command_complete_return_parameter 
+679c 202067a0 branch hci_send_event_command_complete_without_payload + 1 
+
+hci_send_event_command_complete_error_command_disallowed:
+679d 7006f00c jam command_disallowed ,mem_hci_command_complete_return_parameter 
+679e 202067a0 branch hci_send_event_command_complete_without_payload + 1 
+
+hci_send_event_command_complete_without_payload:
+679f 7006f000 jam command_succeeded ,mem_hci_command_complete_return_parameter 
+67a0 df200001 arg 1 ,loopcnt 
+67a1 202067a2 branch hci_send_event_command_complete 
+
+hci_send_event_command_complete:
+67a2 7006eb0e jam hci_event_command_complete ,mem_hci_event_head_event_code 
+67a3 1f20fe03 add loopcnt ,3 ,pdata 
+67a4 67e086ec store 1 ,mem_hci_event_para_total_length 
+67a5 204067ab call hci_prepare_send_event 
+67a6 6fe186ed fetch 3 ,mem_hci_command_complete_num_hci_command_packet 
+67a7 e7e18003 istore 3 ,contwu 
+67a8 d8c006f0 arg mem_hci_command_complete_return_parameter ,contr 
+67a9 20406db7 call uart_copy_tx_bytes 
+67aa 20206d97 branch uarta_send_register_pop 
+
+hci_prepare_send_event:
+67ab 20406d95 call uarta_prepare_tx_register_push 
+67ac 6fe186ea fetch 3 ,mem_hci_event_head_type 
+67ad e7e18003 istore 3 ,contwu 
+67ae 20600000 rtn 
+
+hci_drop_current_packet:
+67af 20406d89 call uarta_prepare_rx 
+67b0 18608603 increase 3 ,contru 
+67b1 efe08003 ifetch 1 ,contru 
+67b2 98608600 iadd contru ,contru 
+67b3 20206d8f branch uarta_rxdone 
+
+cmd_exit:
+67b4 70411400 jam 0 ,mem_hci_cmd 
+67b5 20600000 rtn 
+
+hid_device_load_flash_info_check:
+67b6 20406c16 call spid_init_flash 
+67b7 2040565a call mouse_spid_flash_release_form_powerdown 
+67b8 20405654 call mouse_information_flash_parameters 
+67b9 20406c43 call spid_read_flash 
+67ba 20205661 branch mouse_spid_flash_powerdown 
+
+hid_device_store_flash_device_info:
+67bb 20406c16 call spid_init_flash 
+67bc 2040565a call mouse_spid_flash_release_form_powerdown 
+67bd 2040566f call mouse_flash_erase_sector 
+67be 20405654 call mouse_information_flash_parameters 
+67bf 20405672 call mouse_spid_write_flash 
+67c0 20205661 branch mouse_spid_flash_powerdown 
+
+hid_device_before_store_reconn_info:
+67c1 da204679 arg mem_device1_type ,rega 
+67c2 6fe0c678 fetch 1 ,mem_device_flag 
+67c3 1fe0ffff increase -1 ,pdata 
+67c4 1feffe0d mul32 pdata ,13 ,pdata 
+67c5 9a20a200 iadd rega ,rega 
+67c6 6fe08032 fetch 1 ,mem_record_bt_mode 
+67c7 e7e08011 istore 1 ,rega 
+67c8 c01a67ca beq rec_4_mode ,hid_device_store_le_device 
+67c9 20600000 rtn 
+
+hid_device_store_le_device:
+67ca 6fe30178 fetch 6 ,mem_le_plap 
+67cb e7e30005 istore 6 ,contw 
+67cc 6fe342dd fetch 6 ,mem_le_lap 
+67cd e7e30005 istore 6 ,contw 
+67ce 20600000 rtn 
+
+hid_device_load_device_info:
+67cf 44e9c01a bpatch patch1a_3 ,mem_patch1a 
+67d0 204067d5 call hid_device_select_reconn_device 
+67d1 6fe246a3 fetch 4 ,mem_device_24g_addr 
+67d2 67e245ff store 4 ,mem_24g_receiver_addr 
+67d3 67e245a6 store 4 ,mem_24g_addr 
+67d4 20600000 rtn 
+
+hid_device_select_reconn_device:
+67d5 44ea401a bpatch patch1a_4 ,mem_patch1a 
+67d6 da204679 arg mem_device1_type ,rega 
+67d7 6fe0c678 fetch 1 ,mem_device_flag 
+67d8 c1000000 rtneq mode_24g_device 
+67d9 1fe0ffff increase -1 ,pdata 
+67da 1feffe0d mul32 pdata ,13 ,pdata 
+67db 9a20a200 iadd rega ,rega 
+67dc efe08011 ifetch 1 ,rega 
+67dd 67e0c3fc store 1 ,mem_xrecord_mode 
+67de c19a0000 rtnne rec_4_mode 
+
+hid_device_load_le_device:
+67df efe30006 ifetch 6 ,contr 
+67e0 67e34116 store 6 ,mem_hci_plap 
+67e1 efe30006 ifetch 6 ,contr 
+67e2 67e342dd store 6 ,mem_le_lap 
+67e3 20600000 rtn 
+
+hid_device_check_device_addr:
+67e4 6fe08032 fetch 1 ,mem_record_bt_mode 
+67e5 c19a0000 rtnne rec_4_mode 
+
+hid_device_check_le_device_addr:
+67e6 67e0c884 store 1 ,mem_device_addr_temp 
+67e7 6fe30178 fetch 6 ,mem_le_plap 
+
+hid_device_check_bt_device_addr_common:
+67e8 67e34885 store 6 ,mem_device_addr_temp + 1 
+67e9 6fe3c884 fetch 7 ,mem_device_addr_temp 
+67ea d8c04679 arg mem_device1_type ,contr 
+67eb df200003 arg 3 ,loopcnt 
+
+hid_device_check_device_addr_end:
+67ec e8438006 ifetcht 7 ,contr 
+67ed 98467c00 isub temp ,null 
+67ee 2022e7f2 branch hid_device_clean_addr ,zero 
+67ef 18c08c07 increase 7 ,contr 
+67f0 c20067ec loop hid_device_check_device_addr_end 
+67f1 20600000 rtn 
+
+hid_device_clean_addr:
+67f2 18c08dfa increase -6 ,contr 
+67f3 18c20a00 copy contr ,contw 
+67f4 684b4885 fetcht 6 ,mem_device_addr_temp + 1 
+67f5 18408403 increase 3 ,temp 
+67f6 e0430005 istoret 6 ,contw 
+67f7 20600000 rtn 
+
+hid_device_ble_init_address:
+67f8 6fe342dd fetch 6 ,mem_le_lap 
+67f9 67e34680 store 6 ,mem_device1_locall_addr 
+67fa 1fe0ff00 add pdata ,0x0100 ,pdata 
+67fb 67e3468d store 6 ,mem_device2_locall_addr 
+67fc 1fe0ff00 add pdata ,0x0100 ,pdata 
+67fd 67e3469a store 6 ,mem_device3_locall_addr 
+67fe 20600000 rtn 
+
+hid_device_default_parm_init:
+67ff 704503ff jam 0xff ,mem_ui_button_gpio 
+6800 70450500 jam 0 ,mem_ui_led_struct_num 
+6801 6fe14651 fetch 2 ,mem_device_24g_pair_timeout_init 
+6802 67e145ed store 2 ,mem_24g_pair_timeout_init 
+6803 6fe0c654 fetch 1 ,mem_device_24g_reconn_timeout_init 
+6804 67e145f3 store 2 ,mem_24g_reconn_timeout_init 
+6805 6fe2c657 fetch 5 ,mem_rssi_dis_min_24g_init 
+6806 67e2c63f store 5 ,mem_rssi_dis_min_24g 
+6807 6fe0c655 fetch 1 ,mem_device_24g_pair_tx_power 
+6808 67e0c5e8 store 1 ,mem_24g_pair_tx_power 
+6809 6fe0c5d0 fetch 1 ,mem_24g_ch_map_update 
+680a 245a324a ncall g24_chamap_param_update ,blank 
+680b 20600000 rtn 
+
+hid_device_param_common_init:
+680c 7040c103 jam 3 ,mem_lpm_mult_timeout 
+680d 7040a608 jam 8 ,mem_lpm_overhead 
+680e 70473400 jam pb_button_state_up ,mem_select_device_button_statue 
+680f 70473500 jam commbination_key_state_up ,mem_commbination_key_statue 
+6810 58000200 setarg 0x0200 
+6811 67e140a4 store 2 ,mem_lpm_interval 
+6812 7042e317 jam 0x17 ,mem_le_local_mtu 
+6813 7042e517 jam 0x17 ,mem_le_remote_mtu 
+6814 6fe0c678 fetch 1 ,mem_device_flag 
+6815 67e0c717 store 1 ,mem_device_flag_temp 
+6816 6fe1c2e0 fetch 3 ,mem_le_lap + 3 
+6817 67e1c756 store 3 ,mem_device_le_lap_temp 
+6818 58004782 setarg mem_le_tx_buffer0_omemalloc 
+6819 67e14343 store 2 ,mem_ble_l2cap_tx_buff0_ptr 
+681a 58000020 setarg mouse_ble_l2cap_txbuff_size 
+681b 67e14345 store 2 ,mem_ble_l2cap_tx_buff_size_ptr 
+681c 20205930 branch device_store_normal_tx_power 
+
+hid_device_compare_addr_store:
+681d 6049c6f8 storet 3 ,mem_device_compare_addr 
+681e 6049c6fb storet 3 ,mem_device_compare_addr + 3 
+681f 20600000 rtn 
+
+hid_device_enable_lpm:
+6820 70409401 jam 1 ,mem_lpm_mode 
+6821 20600000 rtn 
+
+hid_device_disable_lpm:
+6822 70409400 jam 0 ,mem_lpm_mode 
+6823 20600000 rtn 
+
+hid_device_le_send_empty_packet:
+6824 70472c00 jam 0 ,mem_customer_data_trigger 
+
+hid_device_le_send_package_data:
+6825 44eac01a bpatch patch1a_5 ,mem_patch1a 
+6826 6fe0c72c fetch 1 ,mem_customer_data_trigger 
+6827 205a684b call hid_device_clear_key_data ,blank 
+
+hid_device_le_fill_package_data:
+6828 6fe0c721 fetch 1 ,mem_customer_key_press 
+6829 c000682e beq hid_reportid_key_standard ,hid_device_le_fill_standard_key_data 
+682a c002e833 beq hid_reportid_bit_consumer_key ,hid_device_le_fill_bit_consumer_key_data 
+682b c001e836 beq hid_reportid_consumer_key ,hid_device_le_fill_multimedia_key_data 
+682c c0016839 beq hid_reportid_system_ctrl ,hid_device_le_fill_systemctrl_key_data 
+682d c0044885 beq hid_reportid_n_key_rollover ,keyboard_le_fill_n_key_rollover_key_data 
+
+hid_device_le_fill_standard_key_data:
+682e 6fe0c3cf fetch 1 ,mem_device_option 
+682f c007c88e beq dvc_op_keyboard ,keyboard_le_fill_standard_key_data 
+
+mouse_le_fill_standard_key_data:
+6830 70477308 jam 8 ,mem_le_data_len 
+
+keyoard_le_fill_standard_key_data_send:
+6831 68494774 fetcht 2 ,mem_le_keyboard_handle 
+6832 20206843 branch hid_device_le_fill_data 
+
+hid_device_le_fill_bit_consumer_key_data:
+6833 70477304 jam 4 ,mem_le_data_len 
+6834 68494776 fetcht 2 ,mem_le_multimedia_handle 
+6835 20206843 branch hid_device_le_fill_data 
+
+hid_device_le_fill_multimedia_key_data:
+6836 70477303 jam 3 ,mem_le_data_len 
+6837 68494776 fetcht 2 ,mem_le_multimedia_handle 
+6838 20206843 branch hid_device_le_fill_data 
+
+hid_device_le_fill_systemctrl_key_data:
+6839 70477302 jam 2 ,mem_le_data_len 
+683a 68494778 fetcht 2 ,mem_le_systemctrl_handle 
+683b 20206843 branch hid_device_le_fill_data 
+
+hid_device_send_package_data_check:
+683c 6fe0c72b fetch 1 ,mem_customer_key 
+683d c000e825 beq 1 ,hid_device_le_send_package_data 
+
+hid_device_le_send_mouse_data:
+683e 70477307 jam 7 ,mem_le_data_len 
+683f 6fe3c65c fetch 7 ,mem_mouse_key 
+6840 67e3c722 store 7 ,mem_customer_key_press + 1 
+6841 6849439f fetcht 2 ,mem_le_notify_handle 
+6842 20206843 branch hid_device_le_fill_data 
+
+hid_device_le_fill_data:
+6843 44eb401a bpatch patch1a_6 ,mem_patch1a 
+6844 6fe0c773 fetch 1 ,mem_le_data_len 
+6845 1fe22200 copy pdata ,rega 
+6846 20402dcc call le_att_malloc_tx_notify 
+6847 6848c773 fetcht 1 ,mem_le_data_len 
+6848 18427200 copy temp ,loopcnt 
+6849 d8c04722 arg mem_customer_key_press + 1 ,contr 
+684a 20207cdc branch memcpy 
+
+hid_device_clear_key_data:
+684b df200009 arg 9 ,loopcnt 
+684c d8a04722 arg mem_customer_key_press + 1 ,contw 
+684d 20207ca3 branch clear_mem 
+
+hid_device_copy_key_data:
+684e df20000a arg 10 ,loopcnt 
+684f d8c049fd arg mem_customer_key_press_init ,contr 
+6850 d8a04721 arg mem_customer_key_press ,contw 
+6851 20207cdc branch memcpy 
+
+hid_device_24g_keyboard_package_data_set:
+6852 6fe0c72c fetch 1 ,mem_customer_data_trigger 
+6853 205a684b call hid_device_clear_key_data ,blank 
+6854 da404721 arg mem_customer_key_press ,regb 
+6855 20600000 rtn 
+
+hid_device_push_mouse_data_to_usb:
+6856 58000001 setarg ms_report_id 
+6857 67e088f1 store 1 ,mem_usb_mouse_data 
+6858 6fe3c65c fetch 7 ,mem_mouse_key 
+6859 e7e38005 istore 7 ,contw 
+685a 20203d52 branch dongle_usb_tx_ms_data 
+
+hid_device_push_keyboard_data_to_usb:
+685b 6fe0c72c fetch 1 ,mem_customer_data_trigger 
+685c 205a684b call hid_device_clear_key_data ,blank 
+
+hid_device_push_keyboard_package_data_to_usb:
+685d 44b5c00d bpatch patch0d_3 ,mem_patch0d 
+685e 6fe0c721 fetch 1 ,mem_customer_key_press 
+685f c0006864 beq hid_reportid_key_standard ,hid_device_push_standard_keyboard_data_to_usb 
+6860 c0016869 beq kb_system_conctrl_report_id ,hid_device_push_systemctrl_key_data_to_usb 
+6861 c001e86f beq kb_multikey_report_id ,hid_device_push_multimedia_key_data_to_usb 
+6862 c002e875 beq hid_reportid_bit_consumer_key ,hid_device_push_bit_consumer_key_data_to_usb 
+6863 c0044a15 beq hid_reportid_n_key_rollover ,keyboard_push_n_key_rollover_key_data_to_usb 
+
+hid_device_push_standard_keyboard_data_to_usb:
+6864 20403d61 call dongle_usb_tx_kb_data 
+6865 d8c04722 arg mem_customer_key_press + 1 ,contr 
+6866 d8a00901 arg mem_usb_kb_data ,contw 
+6867 df200009 arg 9 ,loopcnt 
+6868 20207cdc branch memcpy 
+
+hid_device_push_systemctrl_key_data_to_usb:
+6869 7008ea22 jam usb_ep2_systemkey ,mem_usb_ep2_data 
+686a 58000002 setarg kb_system_conctrl_report_id 
+686b 67e08929 store 1 ,mem_usb_kb_system 
+686c 6fe0c722 fetch 1 ,mem_customer_key_press + 1 
+686d e7e08005 istore 1 ,contw 
+686e 20203d53 branch dongle_usb_tx_enable_ep2 
+
+hid_device_push_multimedia_key_data_to_usb:
+686f 7008ea21 jam usb_ep2_multikey ,mem_usb_ep2_data 
+6870 58000003 setarg kb_multikey_report_id 
+6871 67e08921 store 1 ,mem_usb_kb_multikey 
+6872 6fe1c722 fetch 3 ,mem_customer_key_press + 1 
+6873 e7e18005 istore 3 ,contw 
+6874 20203d53 branch dongle_usb_tx_enable_ep2 
+
+hid_device_push_bit_consumer_key_data_to_usb:
+6875 7008ea23 jam usb_ep2_bit_consumer ,mem_usb_ep2_data 
+6876 58000005 setarg kb_bit_consumer_report_id 
+6877 20206871 branch hid_device_push_multimedia_key_data_to_usb + 2 
+
+hid_device_le_parse_att_write_request:
+6878 6fe0c74f fetch 1 ,mem_device_fast_conn_flag 
+6879 c07fad8a beq 0xff ,le_send_att_write_response_check_auth 
+687a 6fe0c74f fetch 1 ,mem_device_fast_conn_flag 
+687b 203a2d8a branch le_send_att_write_response_check_auth ,blank 
+687c 6fe0c882 fetch 1 ,mem_le_connect_status_flag 
+687d c280ad8a bbit1 ll_start_enc_flag ,le_send_att_write_response_check_auth 
+687e 5800001a setarg 0x001a 
+687f 6849439c fetcht 2 ,mem_le_att_handle 
+6880 98467c00 isub temp ,null 
+6881 2422ad8a nbranch le_send_att_write_response_check_auth ,zero 
+6882 20202d24 branch le_send_att_read_response_error_insufficient_auth 
+
+hid_device_24g_search_dongle_init:
+6883 58000000 setarg 0 
+6884 67e1c70a store 3 ,mem_device_search_dongle_action 
+6885 20600000 rtn 
+
+mouse_24g_search_dongle:
+6886 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+6887 c4068000 rtnbit0 mouse_enable_24g_search_dongle 
+
+hid_device_24g_search_dongle:
+6888 6fe0c73d fetch 1 ,mem_mouse_long_mult_flag 
+6889 207a0000 rtn blank 
+688a 6fe0c619 fetch 1 ,mem_24g_abort_pac 
+688b 207a0000 rtn blank 
+688c 6fe0c707 fetch 1 ,mem_device_search_dongle_interval 
+688d 1fe0fe01 increase 1 ,pdata 
+688e 1fe17e03 and_into 3 ,pdata 
+688f 67e0c707 store 1 ,mem_device_search_dongle_interval 
+6890 247a0000 nrtn blank 
+6891 70470800 jam 0 ,mem_device_search_dongle_ch 
+
+hid_device_24g_search_dongle_loop:
+6892 44ebc01a bpatch patch1a_7 ,mem_patch1a 
+6893 6fe0c708 fetch 1 ,mem_device_search_dongle_ch 
+6894 1fe0fe01 increase 1 ,pdata 
+6895 67e0c708 store 1 ,mem_device_search_dongle_ch 
+6896 1fe67c08 sub pdata ,g24_ch_number ,null 
+6897 2421689e nbranch hid_device_24g_search_dongle_loop_end ,positive 
+6898 20403557 call g24_reconn_data_prep 
+6899 2040362a call g24_transmit_receive_ack 
+689a 242c68a4 nbranch hid_device_24g_search_dongle_loop_retry ,sync 
+689b 2437e8a4 nbranch hid_device_24g_search_dongle_loop_retry ,user3 
+689c 204068bc call hid_device_g24_ackpayload_parse 
+689d 204068b1 call hid_device_24g_search_dongle_success 
+
+hid_device_24g_search_dongle_loop_end:
+689e 20403553 call g24_txbuf_clear 
+689f 6fe0c709 fetch 1 ,mem_device_search_dongle_count 
+68a0 1fe0fe01 increase 1 ,pdata 
+68a1 67e0c709 store 1 ,mem_device_search_dongle_count 
+68a2 c00868a6 beq g24_ch_poll_count ,hid_device_24g_search_dongle_check 
+68a3 20600000 rtn 
+
+hid_device_24g_search_dongle_loop_retry:
+68a4 20403201 call g24_ch 
+68a5 20206892 branch hid_device_24g_search_dongle_loop 
+
+hid_device_24g_search_dongle_check:
+68a6 44ec401b bpatch patch1b_0 ,mem_patch1b 
+68a7 70470900 jam 0 ,mem_device_search_dongle_count 
+68a8 6fe0c70a fetch 1 ,mem_device_search_dongle_action 
+68a9 c3800000 rtnbit1 g24_disconn_state 
+68aa 79207e00 set1 g24_disconn_state ,pdata 
+68ab 67e0c70a store 1 ,mem_device_search_dongle_action 
+68ac 6fe1471c fetch 2 ,mem_device_24g_search_dongle_time_init 
+68ad 67e14741 store 2 ,mem_device_no_data_timer 
+68ae 6fe0c3cf fetch 1 ,mem_device_option 
+68af c0045303 beq dvc_op_mouse ,mouse_sensor_powerdown 
+68b0 20600000 rtn 
+
+hid_device_24g_search_dongle_success:
+68b1 6fe0c619 fetch 1 ,mem_24g_abort_pac 
+68b2 203a6883 branch hid_device_24g_search_dongle_init ,blank 
+68b3 70470900 jam 0 ,mem_device_search_dongle_count 
+68b4 6fe0c70a fetch 1 ,mem_device_search_dongle_action 
+68b5 c4000000 rtnbit0 g24_disconn_state 
+68b6 793ffe00 set0 g24_disconn_state ,pdata 
+68b7 67e0c70a store 1 ,mem_device_search_dongle_action 
+68b8 20405535 call mouse_no_data_timer_init 
+68b9 6fe0c3cf fetch 1 ,mem_device_option 
+68ba c0045263 beq dvc_op_mouse ,mouse_init_sensor_wakeup 
+68bb 20600000 rtn 
+
+hid_device_g24_ackpayload_parse:
+68bc 20403647 call g24_ackpayload_parse 
+68bd 6fe0c50f fetch 1 ,mem_24g_rxbuf + 1 
+68be 2fe1f008 compare 0x08 ,pdata ,0xf8 
+68bf 24608000 nrtn true 
+68c0 6fe0c510 fetch 1 ,mem_24g_rxbuf + 2 
+68c1 c07fd90a beq 0xff ,mouse_24g_hibernate_set 
+68c2 67e0c70d store 1 ,mem_keyboard_led_status 
+68c3 20600000 rtn 
+
+hid_device_before_lpm_set:
+68c4 6fe0c678 fetch 1 ,mem_device_flag 
+68c5 c1800000 rtnne mode_24g_device 
+68c6 6fe0c5e1 fetch 1 ,mem_24g_disable_fec1 
+68c7 207a0000 rtn blank 
+
+hid_device_peripheral_clock_off:
+68c8 70804202 jam 2 ,core_clksel 
+68c9 708130f8 jam 0xf8 ,core_lpm_ctrl 
+68ca 20600000 rtn 
+
+hid_device_cb_fuction:
+68cb 58004f1f setarg mouse_spi_write_flash_cb 
+68cc 67e143f0 store 2 ,mem_cb_spi_flash_write_complate 
+68cd 58005aee setarg mouse_le_transmit 
+68ce 67e143ea store 2 ,mem_cb_ble_transmit 
+68cf 58005af0 setarg mouse_set_lpm_mult 
+68d0 67e143ee store 2 ,mem_cb_bt_set_mult 
+68d1 20600000 rtn 
+
+l2cap_init:
+68d2 2035e8d7 branch l2cap_init_wake ,wake 
+68d3 58004467 setarg mem_l2cap_xmem_end 
+68d4 d8a04458 arg mem_l2cap_xmem_start ,contw 
+68d5 98a67200 isub contw ,loopcnt 
+68d6 20407ca3 call clear_mem 
+
+l2cap_init_wake:
+68d7 20600000 rtn 
+
+check_l2cap_map:
+68d8 d8e00000 arg 0 ,queue 
+68d9 da400000 arg 0 ,regb 
+
+check_l2cap_map_loop:
+68da 18e67c07 sub queue ,7 ,null 
+68db 24610000 nrtn positive 
+68dc aa2fffff qisolate1 rega 
+68dd 2020e8df branch check_l2cap_map_used ,true 
+68de 202068e3 branch check_l2cap_map_used2 
+
+check_l2cap_map_used:
+68df 18427e00 copy temp ,pdata 
+68e0 203a68e3 branch check_l2cap_map_used2 ,blank 
+68e1 f9202400 qset1 regb 
+68e2 184085ff increase -1 ,temp 
+
+check_l2cap_map_used2:
+68e3 18e08e01 increase 1 ,queue 
+68e4 202068da branch check_l2cap_map_loop 
+
+ble_l2cap_malloc:
+68e5 6b014343 fetchr regd ,2 ,mem_ble_l2cap_tx_buff0_ptr 
+68e6 6d614345 fetchr rege ,2 ,mem_ble_l2cap_tx_buff_size_ptr 
+68e7 20407dbe call disable_user 
+68e8 202068e9 branch host_l2cap_malloc 
+
+host_l2cap_malloc:
+68e9 44ed401b bpatch patch1b_2 ,mem_patch1b 
+68ea 20406935 call l2cap_malloc_is_fifo_full 
+68eb 243a233e nbranch assert ,blank 
+68ec 20406945 call l2cap_malloc_get_full_map 
+68ed df200008 arg 8 ,loopcnt 
+
+host_l2cap_malloc_loop:
+68ee 6848c458 fetcht 1 ,mem_used_map 
+68ef 1f260e08 sub loopcnt ,8 ,queue 
+68f0 a84fffff qisolate1 temp 
+68f1 2020e8f6 branch host_l2cap_malloc_next_buffer ,true 
+68f2 204068fd call host_l2cap_malloc_check_buffer_enough 
+68f3 242168f6 nbranch host_l2cap_malloc_next_buffer ,positive 
+68f4 20406913 call host_l2cap_malloc_into_fifo 
+68f5 202068fa branch host_l2cap_malloc_succ 
+
+host_l2cap_malloc_next_buffer:
+68f6 1d627e00 copy rege ,pdata 
+68f7 9b00b000 iadd regd ,regd 
+68f8 c20068ee loop host_l2cap_malloc_loop 
+68f9 2020233e branch assert 
+
+host_l2cap_malloc_succ:
+68fa 1b027e00 copy regd ,pdata 
+68fb 1b020a00 copy regd ,contw 
+68fc 20600000 rtn 
+
+host_l2cap_malloc_check_buffer_enough:
+68fd 44edc01b bpatch patch1b_3 ,mem_patch1b 
+68fe 1f260e08 sub loopcnt ,8 ,queue 
+68ff d8400000 arg 0 ,temp 
+6900 d9600000 arg 0 ,timeup 
+
+host_l2cap_malloc_check_buffer_enough_loop:
+6901 18e27e00 copy queue ,pdata 
+6902 c004690e beq 8 ,host_l2cap_malloc_check_buffer_enough_end 
+6903 6fe0c458 fetch 1 ,mem_used_map 
+6904 afefffff qisolate1 pdata 
+6905 2020e90e branch host_l2cap_malloc_check_buffer_enough_end ,true 
+6906 f9201600 qset1 timeup 
+6907 1d627e00 copy rege ,pdata 
+6908 98408400 iadd temp ,temp 
+6909 18e08e01 increase 1 ,queue 
+690a 1a227e00 copy rega ,pdata 
+690b 98467c00 isub temp ,null 
+690c 2022e90e branch host_l2cap_malloc_check_buffer_enough_end ,zero 
+690d 20216901 branch host_l2cap_malloc_check_buffer_enough_loop ,positive 
+
+host_l2cap_malloc_check_buffer_enough_end:
+690e 18427e00 copy temp ,pdata 
+690f 9a267c00 isub rega ,null 
+6910 24628000 nrtn zero 
+6911 f9201600 qset1 timeup 
+6912 20600000 rtn 
+
+host_l2cap_malloc_into_fifo:
+6913 44ee401b bpatch patch1b_4 ,mem_patch1b 
+6914 20406935 call l2cap_malloc_is_fifo_full 
+6915 243a233e nbranch assert ,blank 
+6916 2040693b call l2cap_malloc_is_fifo_empty 
+6917 203a691c branch host_l2cap_malloc_into_fifo_no_push ,blank 
+6918 6fe4c45c fetch 9 ,mem_tx_fifo1 
+6919 67e4c459 store 9 ,mem_tx_fifo0 
+691a 58000000 setarg 0 
+691b e7e18005 istore 3 ,contw 
+
+host_l2cap_malloc_into_fifo_no_push:
+691c 6160c462 storer timeup ,1 ,mem_tx_fifo3_map 
+691d 63014463 storer regd ,2 ,mem_tx_fifo3_ptr 
+691e 20600000 rtn 
+
+l2cap_malloc_fifo_out:
+691f 44eec01b bpatch patch1b_5 ,mem_patch1b 
+6920 2040693e call l2cap_malloc_fifo_get_first_ptr 
+6921 18c08c01 increase 1 ,contr 
+6922 efe10006 ifetch 2 ,contr 
+6923 20600000 rtn 
+
+l2cap_malloc_free:
+6924 44ef401b bpatch patch1b_6 ,mem_patch1b 
+6925 2040693e call l2cap_malloc_fifo_get_first_ptr 
+6926 18c20a00 copy contr ,contw 
+6927 18c20400 copy contr ,temp 
+6928 58000000 setarg 0 
+6929 e7e18005 istore 3 ,contw 
+692a 20600000 rtn 
+
+l2cap_malloc_discard:
+692b 44efc01b bpatch patch1b_7 ,mem_patch1b 
+692c 2040693b call l2cap_malloc_is_fifo_empty 
+692d 203a233e branch assert ,blank 
+692e 6fe1c45f fetch 3 ,mem_tx_fifo2 
+692f 67e1c462 store 3 ,mem_tx_fifo3 
+6930 6fe1c45c fetch 3 ,mem_tx_fifo1 
+6931 67e1c45f store 3 ,mem_tx_fifo2 
+6932 6fe1c459 fetch 3 ,mem_tx_fifo0 
+6933 67e1c45c store 3 ,mem_tx_fifo1 
+6934 20600000 rtn 
+
+l2cap_malloc_is_fifo_full:
+6935 44f0401c bpatch patch1c_0 ,mem_patch1c 
+6936 6fe1c459 fetch 3 ,mem_tx_fifo0 
+6937 20600000 rtn 
+
+l2cap_malloc_is_fifo_nearly_full:
+6938 44f0c01c bpatch patch1c_1 ,mem_patch1c 
+6939 6fe1c45c fetch 3 ,mem_tx_fifo1 
+693a 20600000 rtn 
+
+l2cap_malloc_is_fifo_empty:
+693b 44f1401c bpatch patch1c_2 ,mem_patch1c 
+693c 6fe1c462 fetch 3 ,mem_tx_fifo3 
+693d 20600000 rtn 
+
+l2cap_malloc_fifo_get_first_ptr:
+693e 2040693b call l2cap_malloc_is_fifo_empty 
+693f 203a6943 branch l2cap_malloc_fifo_get_first_ptr_empty ,blank 
+6940 d8c04459 arg mem_tx_fifo0 ,contr 
+
+l2cap_malloc_free_loop:
+6941 efe18006 ifetch 3 ,contr 
+6942 203a6941 branch l2cap_malloc_free_loop ,blank 
+
+l2cap_malloc_fifo_get_first_ptr_empty:
+6943 18c08dfd increase -3 ,contr 
+6944 20600000 rtn 
+
+l2cap_malloc_get_full_map:
+6945 44f1c01c bpatch patch1c_3 ,mem_patch1c 
+6946 df200004 arg 4 ,loopcnt 
+6947 d8c04459 arg mem_tx_fifo0_map ,contr 
+6948 d8400000 arg 0 ,temp 
+
+l2cap_malloc_get_full_map_loop:
+6949 efe18006 ifetch 3 ,contr 
+694a 1fe17eff and pdata ,0xff ,pdata 
+694b 98418400 ior temp ,temp 
+694c c2006949 loop l2cap_malloc_get_full_map_loop 
+694d 6048c458 storet 1 ,mem_used_map 
+694e 20600000 rtn 
+
+l2cap_lpm_get_wake_lock:
+694f d8e0000c arg wake_lock_l2cap_tx ,queue 
+6950 202024be branch lpm_get_wake_lock 
+
+l2cap_lpm_put_wake_lock:
+6951 d8e0000c arg wake_lock_l2cap_tx ,queue 
+6952 202024c2 branch lpm_put_wake_lock 
+
+twspi_reset:
+6953 44f2c01c bpatch patch1c_5 ,mem_patch1c 
+6954 18467cff sub temp ,ui_button_gpio_disable ,null 
+6955 20628000 rtn zero 
+6956 18427e00 copy temp ,pdata 
+6957 1fe17eff and_into 0xff ,pdata 
+6958 1fe67c0f sub pdata ,gpio_number + -1 ,null 
+6959 24216965 nbranch twspi_reset_ext ,positive 
+695a d8a08070 arg core_gpio_conf ,contw 
+
+twspi_reset_next:
+695b 98a08a00 iadd contw ,contw 
+695c 18a22200 copy contw ,rega 
+695d d840003e arg gpcfg_output_low ,temp 
+695e e0408005 istoret 1 ,contw 
+695f 20406968 call twspi_disable 
+6960 2000001e nop 30 
+6961 1a220a00 copy rega ,contw 
+6962 d840003f arg gpcfg_output_high ,temp 
+6963 e0408005 istoret 1 ,contw 
+6964 2020696c branch twspi_enable 
+
+twspi_reset_ext:
+6965 d8a080d4 arg core_gpio_conf_hi ,contw 
+6966 1fe0fff0 increase -16 ,pdata 
+6967 2020695b branch twspi_reset_next 
+
+twspi_disable:
+6968 6ff08081 fetch 1 ,core_spid_delay 
+6969 1fe17e7f and_into 0x7f ,pdata 
+696a 67f08081 store 1 ,core_spid_delay 
+696b 20600000 rtn 
+
+twspi_enable:
+696c 6ff08081 fetch 1 ,core_spid_delay 
+696d 1fe1fe80 or_into 0x80 ,pdata 
+696e 67f08081 store 1 ,core_spid_delay 
+696f 20600000 rtn 
+
+twspi_write:
+6970 20206bc6 branch spid_write_reg 
+
+twspi_read:
+6971 20206bcd branch spid_read_reg 
+
+aes_disable:
+6972 6ff0806f fetch 1 ,core_bist_ctrl 
+6973 793ffe07 set0 aes_en ,pdata 
+6974 67f0806f store 1 ,core_bist_ctrl 
+6975 20600000 rtn 
+
+read_function_aes:
+6976 2434697a nbranch read_function ,user 
+6977 6ff0806f fetch 1 ,core_bist_ctrl 
+6978 79207e07 set1 aes_en ,pdata 
+6979 67f0806f store 1 ,core_bist_ctrl 
+
+read_function:
+697a 18427c00 copy temp ,null 
+697b 2022e97d branch read_fuction_zero ,zero 
+697c 1a627a00 copy regc ,pc 
+
+read_fuction_zero:
+697d 2fcc0000 isolate0 0 ,null 
+697e 20206ae9 branch set_ucode_status 
+
+get_block_header:
+697f 18000404 force 4 ,temp 
+
+get_block_header0:
+6980 da2001c5 arg mem_ucode_buf ,rega 
+6981 20406972 call aes_disable 
+6982 2040697a call read_function 
+6983 da2055aa arg 0x55aa ,rega 
+6984 6fe101c5 fetch 2 ,mem_ucode_buf 
+6985 e8410006 ifetcht 2 ,contr 
+6986 9a267c00 isub rega ,null 
+6987 20600000 rtn 
+
+read_first_block:
+6988 2054699a call load_aes_reinit ,user 
+6989 d8400002 arg 2 ,temp 
+698a da2043cc arg mem_ucode_ptr ,rega 
+698b 2040697a call read_function 
+698c 6fe143cc fetch 2 ,mem_ucode_ptr 
+
+read_first_block_cont:
+698d 67e101be store 2 ,mem_addr_mi 
+698e 20546990 call get_iv ,user 
+698f 20600000 rtn 
+
+get_iv:
+6990 d8400010 arg 16 ,temp 
+6991 da2001cb arg mem_ucode_keybuf ,rega 
+6992 20406972 call aes_disable 
+6993 2040697a call read_function 
+
+set_iv:
+6994 d8c001cb arg mem_ucode_keybuf ,contr 
+6995 df200010 arg 16 ,loopcnt 
+6996 20407341 call aes_load_data 
+6997 204072c8 call aes_init 
+6998 2040735d call aes_clear_data 
+6999 202072c2 branch do_aes_cbc 
+
+load_aes_reinit:
+699a 70802300 jam 0x0 ,core_ucode_ctrl 
+699b 20406972 call aes_disable 
+699c 2020735d branch aes_clear_data 
+
+load_storage:
+699d 58000000 setarg 0 
+699e 67e10677 store 2 ,mem_queue 
+699f 7856fc00 disable match 
+69a0 2040697f call get_block_header 
+69a1 24628000 nrtn zero 
+69a2 7836fc00 enable match 
+69a3 58008000 setarg 0x8000 
+69a4 67f18022 store 3 ,core_ucode_hi 
+69a5 da208025 arg core_ucode_data ,rega 
+69a6 20406976 call read_function_aes 
+69a7 70802300 jam 0x0 ,core_ucode_ctrl 
+69a8 6fe081bb fetch 1 ,mem_ucode_status 
+69a9 c4000000 rtnbit0 0 
+
+load_storage_loop:
+69aa d8400006 arg 6 ,temp 
+69ab 20406980 call get_block_header0 
+69ac 2422e9ba nbranch load_data_checksum_compare ,zero 
+69ad ea210006 ifetchr rega ,2 ,contr 
+69ae 2040697a call read_function 
+69af 204069b1 call load_data_checksum_calc 
+69b0 202069aa branch load_storage_loop 
+
+load_data_checksum_calc:
+69b1 6fe10677 fetch 2 ,mem_queue 
+69b2 df200006 arg 6 ,loopcnt 
+69b3 d8c001c5 arg mem_ucode_buf ,contr 
+69b4 20407dd0 call cal_sum 
+69b5 6f2101c7 fetchr loopcnt ,2 ,mem_ucode_len 
+69b6 1a220c00 copy rega ,contr 
+69b7 20407dd0 call cal_sum 
+69b8 67e10677 store 2 ,mem_queue 
+69b9 20600000 rtn 
+
+load_data_checksum_compare:
+69ba 6fe081fa fetch 1 ,mem_otp_load_check_sum 
+69bb c02d69c8 beq 0x5a ,load_data_checksum_ok 
+69bc da20aa55 arg 0xaa55 ,rega 
+69bd 6fe101c5 fetch 2 ,mem_ucode_buf 
+69be 9a267c00 isub rega ,null 
+69bf 2422e9ca nbranch load_data_checksum_compare_fail ,zero 
+69c0 da2055aa arg 0x55aa ,rega 
+69c1 6fe101c7 fetch 2 ,mem_ucode_len 
+69c2 9a267c00 isub rega ,null 
+69c3 2422e9ca nbranch load_data_checksum_compare_fail ,zero 
+69c4 6fe101c9 fetch 2 ,mem_sched_addr 
+69c5 68490677 fetcht 2 ,mem_queue 
+69c6 98467c00 isub temp ,null 
+69c7 2422e9ca nbranch load_data_checksum_compare_fail ,zero 
+
+load_data_checksum_ok:
+69c8 7920220f set1 15 ,rega 
+69c9 2020697d branch read_fuction_zero 
+
+load_data_checksum_compare_fail:
+69ca 7001bb00 jam 0 ,mem_ucode_status 
+69cb 20600000 rtn 
+
+loadcode_lock_load_ucode:
+69cc 1fe17eff and pdata ,0xff ,pdata 
+69cd 1ff1fe00 rshift4 pdata ,pdata 
+69ce 67e0c3cf store 1 ,mem_device_option 
+69cf 20206a11 branch loadcode_load_key 
+
+loadcode_lock:
+69d0 6ff10143 fetch 2 ,core_ucode_flag 
+69d1 243a69cc nbranch loadcode_lock_load_ucode ,blank 
+69d2 20406a11 call loadcode_load_key 
+69d3 6fe143cf fetch 2 ,mem_device_option 
+69d4 207a0000 rtn blank 
+69d5 204069d7 call loadcode_set_lock 
+69d6 2020239c branch lpm_write_lock 
+
+loadcode_set_lock:
+69d7 6fe0c3cf fetch 1 ,mem_device_option 
+69d8 207a0000 rtn blank 
+69d9 1fe1040f and pdata ,0xf ,temp 
+69da 6048c3cf storet 1 ,mem_device_option 
+69db 1ff1fe00 rshift4 pdata ,pdata 
+69dc 9842fe00 ixor temp ,pdata 
+69dd c087ebb8 bne 0xf ,app_lpm_mpu_lock_24g_ble 
+69de 20206b7b branch app_lpm_lock_check 
+
+load_otp_hv_vsel:
+69df 6fe081f7 fetch 1 ,mem_otp_hv_sel 
+69e0 245a23c2 ncall lpm_save_sel_hv ,blank 
+69e1 6fe081f8 fetch 1 ,mem_otp_ldo_vsel 
+69e2 207a0000 rtn blank 
+69e3 202023c7 branch lpm_write_io_vsel 
+
+load_otp_set_init:
+69e4 44f3401c bpatch patch1c_6 ,mem_patch1c 
+69e5 24758000 nrtn wake 
+69e6 6fe1415d fetch 2 ,mem_otp_charge_pump_x 
+69e7 207a0000 rtn blank 
+69e8 67e101ed store 2 ,mem_otp_charge_pump 
+69e9 202069fb branch set_otp_config2 
+
+set_otp_config:
+69ea 204069df call load_otp_hv_vsel 
+69eb 6fe201eb fetch 4 ,mem_otp_core_ldo 
+69ec 207a0000 rtn blank 
+69ed 37d98200 until null ,lpo_edge 
+69ee 6ff08136 fetch 1 ,0x8136 
+69ef 1fe17ef0 and pdata ,0xf0 ,pdata 
+69f0 684881eb fetcht 1 ,mem_otp_core_ldo 
+69f1 9841fe00 ior temp ,pdata 
+69f2 67f08136 store 1 ,0x8136 
+69f3 37d98200 until null ,lpo_edge 
+69f4 6ff08138 fetch 1 ,0x8138 
+69f5 1fe17e07 and pdata ,0x7 ,pdata 
+69f6 684881ec fetcht 1 ,mem_otp_verf_bg 
+69f7 18498400 lshift3 temp ,temp 
+69f8 9841fe00 ior temp ,pdata 
+69f9 67f08138 store 1 ,0x8138 
+69fa 37d98200 until null ,lpo_edge 
+
+set_otp_config2:
+69fb 6ff08acb fetch 1 ,0x8acb 
+69fc 1fe17ef0 and pdata ,0xf0 ,pdata 
+69fd 684881ed fetcht 1 ,mem_otp_charge_pump 
+69fe 6048c15d storet 1 ,mem_otp_charge_pump_x 
+69ff 9841fe00 ior temp ,pdata 
+6a00 67f08acb store 1 ,0x8acb 
+6a01 6fe081ee fetch 1 ,mem_otp_dpll_ibais 
+6a02 67e0c15e store 1 ,mem_otp_dpll_ibais_x 
+6a03 2feffe03 isolate1 3 ,pdata 
+6a04 6ff08a06 fetch 1 ,0x8a06 
+6a05 7920fe07 setflag true ,7 ,pdata 
+6a06 67f08a06 store 1 ,0x8a06 
+6a07 6fe081ee fetch 1 ,mem_otp_dpll_ibais 
+6a08 1fe10407 and pdata ,7 ,temp 
+6a09 18520400 lshift4 temp ,temp 
+6a0a 18438400 lshift temp ,temp 
+6a0b 6048c44f storet 1 ,mem_ring_ibias_trim 
+6a0c 6ff08a02 fetch 1 ,0x8a02 
+6a0d 1fe17e1f and pdata ,0x1f ,pdata 
+6a0e 9841fe00 ior temp ,pdata 
+6a0f 67f08a02 store 1 ,0x8a02 
+6a10 20600000 rtn 
+
+loadcode_load_key:
+6a11 78547c00 disable user 
+6a12 6fe0c3ce fetch 1 ,mem_ucode_flag 
+6a13 c4018000 rtnbit0 otp_uflag_aes 
+6a14 20406a67 call loadcode_check_otp_lock 
+6a15 dfe00ff0 arg otp_offset_ucode_key_l ,pdata 
+6a16 9a40a400 iadd regb ,regb 
+6a17 18007210 force 16 ,loopcnt 
+6a18 da2001cb arg mem_ucode_keybuf ,rega 
+6a19 20406b62 call otp_read_data 
+6a1a 70800608 jam otp_key_lock ,core_misc_ctrl 
+6a1b d8c001cb arg mem_ucode_keybuf ,contr 
+6a1c 2040734d call load_key 
+6a1d d8a001cb arg mem_ucode_keybuf ,contw 
+6a1e 20407c9b call memset0_16 
+6a1f 20207dbc branch enable_user 
+
+loadcode:
+6a20 70805025 jam 0x25 ,core_clkoff 
+6a21 20406b28 call enable_otp_read 
+6a22 da400000 arg otp_offset_patch_ptr ,regb 
+6a23 1800720b force 11 ,loopcnt 
+6a24 da2043cc arg mem_ucode_ptr ,rega 
+6a25 20406b63 call otp_read_data1 
+6a26 6ee2c3cc fetchr regf ,5 ,mem_ucode_ptr 
+6a27 6d6343d1 fetchr rege ,6 ,mem_bistfix_val 
+6a28 6fe0c3ce fetch 1 ,mem_ucode_flag 
+6a29 c3026a31 bbit0 otp_uflag_bist ,loadcode_nobist 
+6a2a 70806f07 jam 0x7 ,core_bist_ctrl 
+
+loadcode_bistwait:
+6a2b 6ff0815e fetch 1 ,core_bist_done 
+6a2c c083ea2b bne 7 ,loadcode_bistwait 
+6a2d 6ff08160 fetch 1 ,core_bist_fail 
+6a2e 1ff27e00 lshift4 pdata ,pdata 
+6a2f 67f0806f store 1 ,core_bist_ctrl 
+6a30 20206a34 branch loadcode_otp 
+
+loadcode_nobist:
+6a31 20406adc call set_bistfix 
+6a32 20407d78 call clean_xmem 
+6a33 20407d76 call clean_smem 
+
+loadcode_otp:
+6a34 66e2c3cc storer regf ,5 ,mem_ucode_ptr 
+6a35 656343d1 storer rege ,6 ,mem_bistfix_val 
+6a36 20406a67 call loadcode_check_otp_lock 
+6a37 dfe00fd0 arg otp_offset_adc_param_l ,pdata 
+6a38 9a40a400 iadd regb ,regb 
+6a39 df200020 arg 32 ,loopcnt 
+6a3a da2001db arg mem_otp_temp ,rega 
+6a3b 20406b62 call otp_read_data 
+6a3c 204069ea call set_otp_config 
+6a3d 204069d0 call loadcode_lock 
+6a3e 6fe0c3ce fetch 1 ,mem_ucode_flag 
+6a3f c301ea49 bbit0 otp_uflag_aes ,loadcode_unenc 
+6a40 6848c3d0 fetcht 1 ,mem_peripheral_lock_flag 
+6a41 dfe00000 arg 0 ,pdata 
+6a42 79207e06 set1 otp_not_limit ,pdata 
+6a43 79207e07 set1 otp_limit ,pdata 
+6a44 98412200 iand temp ,rega 
+6a45 1a267c00 sub rega ,0 ,null 
+6a46 2022eaab branch loadcode_error ,zero 
+6a47 9a267c00 isub rega ,null 
+6a48 2022eaab branch loadcode_error ,zero 
+
+loadcode_unenc:
+6a49 70003000 jam 0 ,mem_loadcode_times 
+6a4a da606b0c arg otp_load_code ,regc 
+
+loadcode_otp_loop:
+6a4b 20406a9f call loadcode_timeout 
+6a4c 24216aab nbranch loadcode_error ,positive 
+6a4d 6fe143cc fetch 2 ,mem_ucode_ptr 
+6a4e 203a6a56 branch loadcode_otp_end ,blank 
+6a4f 2040698d call read_first_block_cont 
+6a50 2040699d call load_storage 
+6a51 2436ea56 nbranch loadcode_otp_end ,match 
+6a52 6fe081bb fetch 1 ,mem_ucode_status 
+6a53 2fe00603 compare 3 ,pdata ,3 
+6a54 2420ea4b nbranch loadcode_otp_loop ,true 
+6a55 20406a64 call run_otp_code 
+
+loadcode_otp_end:
+6a56 20406b25 call disable_otp 
+6a57 70003000 jam 0 ,mem_loadcode_times 
+
+loadcode_iic_loop:
+6a58 20406a9f call loadcode_timeout 
+6a59 24216aab nbranch loadcode_error ,positive 
+6a5a 6fe0c3ce fetch 1 ,mem_ucode_flag 
+6a5b c2816a77 bbit1 otp_uflag_skip_eep ,loadcode_spi 
+6a5c 20406a91 call iicd_load_gpio_init 
+6a5d 20406cba call clear_eeprom_size_2k 
+6a5e 20406a99 call loadcode_iic_by_eeprom 
+6a5f 2436ea6e nbranch loadcode_iic_eeprom_2k ,match 
+6a60 6fe081bb fetch 1 ,mem_ucode_status 
+6a61 2fe00603 compare 3 ,pdata ,3 
+6a62 2420ea58 nbranch loadcode_iic_loop ,true 
+6a63 20206a77 branch loadcode_spi 
+
+run_otp_code:
+6a64 580001ff setarg 0x1ff 
+6a65 dfa00000 arg 0 ,pc 
+6a66 20600000 rtn 
+
+loadcode_check_otp_lock:
+6a67 da401000 arg otp_offset_h ,regb 
+6a68 6ff08144 fetch 1 ,core_peripheral_lock 
+6a69 c283ea6c bbit1 otp_limit ,loadcode_otp_lock 
+6a6a 6fe0c3d0 fetch 1 ,mem_peripheral_lock_flag 
+6a6b c4038000 rtnbit0 otp_limit 
+
+loadcode_otp_lock:
+6a6c da400000 arg 0 ,regb 
+6a6d 20600000 rtn 
+
+loadcode_iic_eeprom_2k:
+6a6e 20406cb7 call set_eeprom_size_2k 
+6a6f 6fe0c3ce fetch 1 ,mem_ucode_flag 
+6a70 c2816a77 bbit1 otp_uflag_skip_eep ,loadcode_spi 
+6a71 20406a99 call loadcode_iic_by_eeprom 
+6a72 2436ea77 nbranch loadcode_spi ,match 
+6a73 6fe081bb fetch 1 ,mem_ucode_status 
+6a74 2fe00603 compare 3 ,pdata ,3 
+6a75 2420ea58 nbranch loadcode_iic_loop ,true 
+6a76 20206a87 branch loadcode_hci 
+
+loadcode_spi:
+6a77 70003000 jam 0 ,mem_loadcode_times 
+
+loadcode_spi_loop:
+6a78 20406a9f call loadcode_timeout 
+6a79 24216aab nbranch loadcode_error ,positive 
+6a7a 6fe0c3ce fetch 1 ,mem_ucode_flag 
+6a7b c280ea87 bbit1 otp_uflag_skip_flash ,loadcode_hci 
+6a7c 20406c16 call spid_init_flash 
+6a7d 200000c8 nop 200 
+6a7e 20406c25 call spid_flash_release_form_powerdown 
+6a7f 20000064 nop 100 
+6a80 da606c62 arg spid_load_flash ,regc 
+6a81 20406988 call read_first_block 
+6a82 2040699d call load_storage 
+6a83 2436ea87 nbranch loadcode_hci ,match 
+6a84 6fe081bb fetch 1 ,mem_ucode_status 
+6a85 2fe00603 compare 3 ,pdata ,3 
+6a86 2420ea78 nbranch loadcode_spi_loop ,true 
+
+loadcode_hci:
+6a87 20406a8b call clear_key_buf 
+6a88 6fe0c3ce fetch 1 ,mem_ucode_flag 
+6a89 c4000000 rtnbit0 otp_uflag_hci 
+6a8a 202066f2 branch hci_init 
+
+clear_key_buf:
+6a8b d8a001cb arg mem_ucode_keybuf ,contw 
+6a8c 20407c9b call memset0_16 
+6a8d 18007004 force regidx_key ,regext_index 
+6a8e 2040735e call aes_clear 
+6a8f 70805021 jam 0x21 ,core_clkoff 
+6a90 20600000 rtn 
+
+iicd_load_gpio_init:
+6a91 6fe0c440 fetch 1 ,mem_eeprom_sda_gpio 
+6a92 6848c43f fetcht 1 ,mem_eeprom_scl_gpio 
+6a93 98467c00 isub temp ,null 
+6a94 2422ecb2 nbranch iicd_read_init_pin ,zero 
+
+iicd_load_default_gpio:
+6a95 70443e04 jam 4 ,mem_eeprom_wp_gpio 
+6a96 70443f08 jam 8 ,mem_eeprom_scl_gpio 
+6a97 70444007 jam 7 ,mem_eeprom_sda_gpio 
+6a98 20206cb2 branch iicd_read_init_pin 
+
+loadcode_iic_by_eeprom:
+6a99 58000000 setarg 0x0 
+6a9a 67e101be store 2 ,mem_addr_mi 
+6a9b da606cdd arg iicd_read_eep ,regc 
+6a9c 20406c9b call iic_init_600khz 
+6a9d 20406988 call read_first_block 
+6a9e 2020699d branch load_storage 
+
+loadcode_timeout:
+6a9f 20406aa5 call loadcode_error_delay 
+6aa0 6fe08030 fetch 1 ,mem_loadcode_times 
+6aa1 1fe0fe01 increase 1 ,pdata 
+6aa2 1fe67c03 sub pdata ,3 ,null 
+6aa3 67e08030 store 1 ,mem_loadcode_times 
+6aa4 20600000 rtn 
+
+loadcode_error_delay:
+6aa5 6fe08030 fetch 1 ,mem_loadcode_times 
+6aa6 207a0000 rtn blank 
+6aa7 6fe081f9 fetch 1 ,mem_otp_load_delay 
+6aa8 207a0000 rtn blank 
+6aa9 1fe27200 copy pdata ,loopcnt 
+6aaa 20207c98 branch delay_ms_wait 
+
+loadcode_error:
+6aab 20406a8b call clear_key_buf 
+6aac 20406972 call aes_disable 
+6aad 20407d7e call ice_break 
+6aae 20600000 rtn 
+
+set_bistfix_wake:
+6aaf 20406adc call set_bistfix 
+6ab0 20406ab7 call set_bistfix_wake_xram 
+
+set_bistfix_wake_patchram:
+6ab1 6ff0806f fetch 1 ,core_bist_ctrl 
+6ab2 c4030000 rtnbit0 bist_ctrl_fix_patch_ram 
+6ab3 20406ad1 call set_bistfix_set_patchram_addr 
+6ab4 df200004 arg 4 ,loopcnt 
+6ab5 d8c043d8 arg mem_bistfix_val_patchram ,contr 
+6ab6 20206b07 branch load_ucode_loop 
+
+set_bistfix_wake_xram:
+6ab7 6ff0806f fetch 1 ,core_bist_ctrl 
+6ab8 c4028000 rtnbit0 bist_ctrl_fix_xram 
+6ab9 684943d3 fetcht 2 ,mem_bistfix_addr_x 
+6aba 18490400 rshift3 temp ,temp 
+6abb dfe04000 arg 0x4000 ,pdata 
+6abc 98408a00 iadd temp ,contw 
+6abd 6fe0c3d7 fetch 1 ,mem_bistfix_val_xram 
+6abe 20207dce branch istore_1_contw_rtn 
+
+set_bistfix_save_xram:
+6abf 4779403e bpatchx patch3e_2 ,mem_patch3e 
+6ac0 6ff0806f fetch 1 ,core_bist_ctrl 
+6ac1 c4028000 rtnbit0 bist_ctrl_fix_xram 
+6ac2 6a2143d3 fetchr rega ,2 ,mem_bistfix_addr_x 
+6ac3 1a292200 rshift3 rega ,rega 
+6ac4 dfe04000 arg 0x4000 ,pdata 
+6ac5 9a208c00 iadd rega ,contr 
+6ac6 efe08006 ifetch 1 ,contr 
+6ac7 67e0c3d7 store 1 ,mem_bistfix_val_xram 
+6ac8 20600000 rtn 
+
+set_bistfix_save_patchram:
+6ac9 20758000 rtn wake 
+6aca 6ff0806f fetch 1 ,core_bist_ctrl 
+6acb c4030000 rtnbit0 bist_ctrl_fix_patch_ram 
+6acc 20406ad1 call set_bistfix_set_patchram_addr 
+6acd 2000000a nop 10 
+6ace df200004 arg 4 ,loopcnt 
+6acf d8a043d8 arg mem_bistfix_val_patchram ,contw 
+6ad0 20206afa branch save_ucode_loop 
+
+set_bistfix_set_patchram_addr:
+6ad1 70802200 jam 0 ,core_ucode_hi 
+6ad2 6fe143d5 fetch 2 ,mem_bistfix_addr_patch 
+6ad3 1ff1fe00 rshift4 pdata ,pdata 
+6ad4 1fe37e00 rshift pdata ,pdata 
+6ad5 1ff18400 rshift4 pdata ,temp 
+6ad6 184b0400 rshift2 temp ,temp 
+6ad7 79200407 set1 7 ,temp 
+6ad8 60588023 storet 1 ,core_ucode_ctrl 
+6ad9 1febfe00 lshift2 pdata ,pdata 
+6ada 67f08024 store 1 ,core_ucode_low 
+6adb 20600000 rtn 
+
+set_bistfix:
+6adc 6fe0c3ce fetch 1 ,mem_ucode_flag 
+6add 1fe17ee0 and_into 0xe0 ,pdata 
+6ade 207a0000 rtn blank 
+6adf 1fe37e00 rshift pdata ,pdata 
+6ae0 67f0806f store 1 ,core_bist_ctrl 
+6ae1 58000001 setarg 1 
+6ae2 d8c043d1 arg mem_bistfix_val ,contr 
+
+set_bistfix_loop:
+6ae3 e8410006 ifetcht 2 ,contr 
+6ae4 6059004c storet 2 ,core_lpm_reg 
+6ae5 67f08020 store 1 ,core_set_bistfix 
+6ae6 1fe3fe00 lshift pdata ,pdata 
+6ae7 c301eae3 bbit0 3 ,set_bistfix_loop 
+6ae8 20600000 rtn 
+
+set_ucode_status:
+6ae9 6fe081bb fetch 1 ,mem_ucode_status 
+6aea 1fe3fe00 lshift pdata ,pdata 
+6aeb 7920fe00 setflag true ,0 ,pdata 
+6aec 2a2c000f isolate0 15 ,rega 
+6aed 20608000 rtn true 
+6aee 67e081bb store 1 ,mem_ucode_status 
+6aef 20600000 rtn 
+
+decrypt_code:
+6af0 6ff0806f fetch 1 ,core_bist_ctrl 
+6af1 c4038000 rtnbit0 aes_en 
+6af2 20206af6 branch decrypt_code_skip 
+
+decrypt_code_loop:
+6af3 6ff08128 fetch 1 ,core_dma_status 
+6af4 afefffff qisolate1 pdata 
+6af5 20608000 rtn true 
+
+decrypt_code_skip:
+6af6 6ff08108 fetch 1 ,core_misc_status 
+6af7 c300eaf3 bbit0 1 ,decrypt_code_loop 
+6af8 204072c2 call do_aes_cbc 
+6af9 20206af3 branch decrypt_code_loop 
+
+save_ucode_loop:
+6afa 6ff08025 fetch 1 ,core_ucode_data 
+6afb e7e08005 istore 1 ,contw 
+6afc c2006afa loop save_ucode_loop 
+6afd 70802300 jam 0x0 ,core_ucode_ctrl 
+6afe 20600000 rtn 
+
+load_ucode:
+6aff 6fe140f0 fetch 2 ,mem_patch_ptr 
+6b00 207a0000 rtn blank 
+6b01 70802380 jam 0x80 ,core_ucode_ctrl 
+6b02 70802200 jam 0 ,core_ucode_hi 
+6b03 70802400 jam 0 ,core_ucode_low 
+6b04 684940f2 fetcht 2 ,mem_patch_len 
+6b05 184bf200 lshift2 temp ,loopcnt 
+6b06 98000c00 iforce contr 
+
+load_ucode_loop:
+6b07 efe08006 ifetch 1 ,contr 
+6b08 67f08025 store 1 ,core_ucode_data 
+6b09 c2006b07 loop load_ucode_loop 
+6b0a 70802300 jam 0x0 ,core_ucode_ctrl 
+6b0b 20600000 rtn 
+
+otp_load_code:
+6b0c 18427200 copy temp ,loopcnt 
+6b0d 6fe101be fetch 2 ,mem_addr_mi 
+6b0e 98408400 iadd temp ,temp 
+6b0f 604901be storet 2 ,mem_addr_mi 
+6b10 98002400 iforce regb 
+6b11 1a225c00 copy rega ,nap 
+6b12 70800610 jam init_key ,core_misc_ctrl 
+6b13 20406b62 call otp_read_data 
+6b14 1dc22200 copy nap ,rega 
+6b15 2a2c000f isolate0 15 ,rega 
+6b16 20608000 rtn true 
+6b17 205a7dc8 call enable_true ,blank 
+6b18 20206ae9 branch set_ucode_status 
+
+otp_enable_chgpump25:
+6b19 708ac801 jam 0x1 ,core_chgpump_ctrl 
+6b1a 2000012c nop 300 
+6b1b 708ac805 jam 0x5 ,core_chgpump_ctrl 
+6b1c 20000064 nop 100 
+6b1d 708ac825 jam 0x25 ,core_chgpump_ctrl 
+6b1e 200003e8 nop 1000 
+6b1f 708ac827 jam 0x27 ,core_chgpump_ctrl 
+6b20 2000012c nop 300 
+6b21 20600000 rtn 
+
+otp_enable_chgpump65:
+6b22 20406b19 call otp_enable_chgpump25 
+6b23 708ac83f jam 0x3f ,core_chgpump_ctrl 
+6b24 20600000 rtn 
+
+disable_otp:
+6b25 70804783 jam 0x83 ,core_otp_ctrl 
+
+otp_disable_chgpump:
+6b26 708ac800 jam 0 ,core_chgpump_ctrl 
+6b27 20600000 rtn 
+
+enable_otp_read:
+6b28 20406b19 call otp_enable_chgpump25 
+
+otp_reset:
+6b29 70804782 jam 0x82 ,core_otp_ctrl 
+6b2a 2000000c nop 12 
+6b2b 70804780 jam 0x80 ,core_otp_ctrl 
+6b2c 70804782 jam 0x82 ,core_otp_ctrl 
+6b2d 20000096 nop 150 
+6b2e 20600000 rtn 
+
+otp_set_addr:
+6b2f 1a49a400 lshift3 regb ,regb 
+6b30 62510044 storer regb ,2 ,core_otp_addr 
+6b31 70804600 jam 0 ,core_otp_din 
+6b32 20600000 rtn 
+
+otp_write:
+6b33 44f4c01d bpatch patch1d_1 ,mem_patch1d 
+6b34 20406b22 call otp_enable_chgpump65 
+6b35 20406b2f call otp_set_addr 
+6b36 20406b29 call otp_reset 
+
+otp_program:
+6b37 e8408011 ifetcht 1 ,rega 
+6b38 1a20a201 increase 1 ,rega 
+6b39 18000e00 force 0 ,queue 
+
+otp_program_bit:
+6b3a a84c0000 qisolate0 temp 
+6b3b 2020eb5a branch otp_skip_0 ,true 
+6b3c 6ff08046 fetch 1 ,core_otp_din 
+6b3d 79207e06 set1 6 ,pdata 
+6b3e 79207e07 set1 7 ,pdata 
+6b3f 67f08046 store 1 ,core_otp_din 
+6b40 70804702 jam 0x02 ,core_otp_ctrl 
+6b41 70804782 jam 0x82 ,core_otp_ctrl 
+6b42 793ffe07 set0 7 ,pdata 
+6b43 67f08046 store 1 ,core_otp_din 
+6b44 7080478a jam 0x8a ,core_otp_ctrl 
+6b45 2000000b nop 11 
+6b46 708047ca jam 0xca ,core_otp_ctrl 
+6b47 20000021 nop 33 
+6b48 7080474a jam 0x4a ,core_otp_ctrl 
+6b49 2000002c nop 44 
+6b4a 708047ca jam 0xca ,core_otp_ctrl 
+6b4b 20000016 nop 22 
+6b4c 7080478a jam 0x8a ,core_otp_ctrl 
+6b4d 20000021 nop 33 
+6b4e 70804782 jam 0x82 ,core_otp_ctrl 
+6b4f 20000001 nop 1 
+6b50 70804792 jam 0x92 ,core_otp_ctrl 
+6b51 2000000a nop 10 
+6b52 708047b2 jam 0xb2 ,core_otp_ctrl 
+6b53 6ff08007 fetch 1 ,core_otp_rdata 
+6b54 70804792 jam 0x92 ,core_otp_ctrl 
+6b55 20000001 nop 1 
+6b56 70804782 jam 0x82 ,core_otp_ctrl 
+6b57 20000001 nop 1 
+6b58 afec0000 qisolate0 pdata 
+6b59 2020eb3a branch otp_program_bit ,true 
+
+otp_skip_0:
+6b5a 6ff10044 fetch 2 ,core_otp_addr 
+6b5b 1fe0fe01 increase 1 ,pdata 
+6b5c 67f10044 store 2 ,core_otp_addr 
+6b5d 18e08e01 increase 1 ,queue 
+6b5e 28e01e08 compare 8 ,queue ,0xf 
+6b5f 2420eb3a nbranch otp_program_bit ,true 
+6b60 c2006b37 loop otp_program 
+6b61 20206b26 branch otp_disable_chgpump 
+
+otp_read_data:
+6b62 44f5401d bpatch patch1d_2 ,mem_patch1d 
+
+otp_read_data1:
+6b63 20406b2f call otp_set_addr 
+6b64 708047a2 jam 0xa2 ,core_otp_ctrl 
+6b65 1a40a408 increase 8 ,regb 
+6b66 d8e00000 arg 0 ,queue 
+6b67 5fffffff setarg -1 
+
+otp_read_data_loop:
+6b68 68588007 fetcht 1 ,core_otp_rdata 
+6b69 e0408011 istoret 1 ,rega 
+6b6a 984c7e00 bcrc temp 
+6b6b 70800620 jam shift_key ,core_misc_ctrl 
+6b6c 62510044 storer regb ,2 ,core_otp_addr 
+6b6d 2a2ffe0f isolate1 15 ,rega 
+6b6e 2020eb71 branch otp_read_noinc ,true 
+6b6f 1a20a201 increase 1 ,rega 
+6b70 20206b77 branch otp_read_unenc 
+
+otp_read_noinc:
+6b71 24346b77 nbranch otp_read_unenc ,user 
+6b72 18e08e01 increase 1 ,queue 
+6b73 28e01e00 compare 0 ,queue ,0xf 
+6b74 2420eb77 nbranch otp_read_unenc ,true 
+6b75 204072c2 call do_aes_cbc 
+6b76 70800610 jam init_key ,core_misc_ctrl 
+
+otp_read_unenc:
+6b77 1a40a408 increase 8 ,regb 
+6b78 c2006b68 loop otp_read_data_loop 
+6b79 70804782 jam 0x82 ,core_otp_ctrl 
+6b7a 20600000 rtn 
+
+app_lpm_lock_check:
+6b7b 6fe0c3cf fetch 1 ,mem_device_option 
+6b7c c0056b8c beq dvc_op_module ,app_lpm_module_lock 
+6b7d c0026b90 beq dvc_op_dongle ,app_lpm_dongle_lock 
+6b7e c0046b96 beq dvc_op_mouse ,app_lpm_mouse_lock 
+6b7f c004eba0 beq dvc_op_shutter ,app_lpm_shutter_lock 
+6b80 c0036ba0 beq dvc_op_shutter_dy ,app_lpm_shutter_lock 
+6b81 c0066b8c beq dvc_op_hci_boot ,app_lpm_hciboot_lock 
+6b82 c006eba7 beq dvc_op_remote_car ,app_lpm_car_lock_application_and_ble 
+6b83 c0076ba4 beq dvc_op_car ,app_lpm_car_lock 
+6b84 c007eb89 beq dvc_op_keyboard ,app_lpm_kb_lock 
+6b85 c000ebb0 beq dvc_op_2g4 ,app_lpm_mpu_lock_ble 
+6b86 c0016bb5 beq dvc_op_ble ,app_lpm_mpu_lock_24g 
+6b87 c003eb9c beq dvc_op_mouse_2g4 ,app_lpm_mouse_lock_24g 
+6b88 20206bb8 branch app_lpm_mpu_lock_24g_ble 
+
+app_lpm_kb_lock:
+6b89 dfe04a31 arg module_init ,pdata 
+6b8a d84066d9 arg shutter_dy_shutter_1s_timer ,temp 
+6b8b 20206bad branch app_mpu_s0_lock 
+
+app_lpm_module_lock:
+
+app_lpm_hciboot_lock:
+6b8c dfe037c1 arg car_init ,pdata 
+6b8d d8404a2f arg keyboard_bt_discovery_button_down_disable ,temp 
+6b8e 20406bad call app_mpu_s0_lock 
+6b8f 20206bb5 branch app_lpm_mpu_lock_24g 
+
+app_lpm_dongle_lock:
+6b90 dfe03e8f arg keyboard_softreset_process ,pdata 
+6b91 d84066d9 arg shutter_dy_shutter_1s_timer ,temp 
+6b92 20406bad call app_mpu_s0_lock 
+6b93 dfe037c1 arg car_init ,pdata 
+6b94 d8403cc7 arg remote_car_wakeup_config_loop ,temp 
+6b95 20206bb2 branch app_mpu_s1_lock 
+
+app_lpm_mouse_lock:
+6b96 dfe037c1 arg car_init ,pdata 
+6b97 d8404d0d arg module_set_state ,temp 
+6b98 20406bad call app_mpu_s0_lock 
+6b99 dfe05bf7 arg rec_cb_function ,pdata 
+6b9a d84066d9 arg shutter_dy_shutter_1s_timer ,temp 
+6b9b 20206bb2 branch app_mpu_s1_lock 
+
+app_lpm_mouse_lock_24g:
+6b9c dfe037c1 arg car_init ,pdata 
+6b9d d8404d0d arg module_set_state ,temp 
+6b9e 20406bad call app_mpu_s0_lock 
+6b9f 20206bb0 branch app_lpm_mpu_lock_ble 
+
+app_lpm_shutter_lock:
+6ba0 dfe037c1 arg car_init ,pdata 
+6ba1 d84060c0 arg rec_enter_queue ,temp 
+6ba2 20406bad call app_mpu_s0_lock 
+6ba3 20206bb5 branch app_lpm_mpu_lock_24g 
+
+app_lpm_car_lock:
+6ba4 dfe03cd1 arg dongle_init ,pdata 
+6ba5 d84066d9 arg shutter_dy_shutter_1s_timer ,temp 
+6ba6 20206bad branch app_mpu_s0_lock 
+
+app_lpm_car_lock_application_and_ble:
+6ba7 dfe03cd1 arg dongle_init ,pdata 
+6ba8 d84066d9 arg shutter_dy_shutter_1s_timer ,temp 
+6ba9 20406bad call app_mpu_s0_lock 
+6baa dfe02ae3 arg le_send_adv_ind ,pdata 
+6bab d84030eb arg le_send_ll_one_lenth ,temp 
+6bac 20206bb2 branch app_mpu_s1_lock 
+
+app_mpu_s0_lock:
+6bad 18500400 lshift16 temp ,temp 
+6bae 9841fe00 ior temp ,pdata 
+6baf 202023b1 branch lpm_write_mpu_s0 
+
+app_lpm_mpu_lock_ble:
+6bb0 dfe02b6e arg le_parse_att ,pdata 
+6bb1 d84030eb arg le_send_ll_one_lenth ,temp 
+
+app_mpu_s1_lock:
+6bb2 18500400 lshift16 temp ,temp 
+6bb3 9841fe00 ior temp ,pdata 
+6bb4 202023b8 branch lpm_write_mpu_s1 
+
+app_lpm_mpu_lock_24g:
+6bb5 dfe030f1 arg g24_prep ,pdata 
+6bb6 d84036bf arg g24_factory_check ,temp 
+6bb7 20206bb2 branch app_mpu_s1_lock 
+
+app_lpm_mpu_lock_24g_ble:
+6bb8 20406bb5 call app_lpm_mpu_lock_24g 
+6bb9 dfe02b6e arg le_parse_att ,pdata 
+6bba d84030eb arg le_send_ll_one_lenth ,temp 
+6bbb 20206bad branch app_mpu_s0_lock 
+
+spid_init:
+6bbc 44f5c01d bpatch patch1d_3 ,mem_patch1d 
+
+spid_init_common:
+6bbd 6fe0c3fe fetch 1 ,mem_spi_init_clk 
+6bbe 67f08080 store 1 ,core_spid_ctrl 
+6bbf 6fe0c3ff fetch 1 ,mem_spi_init_delay_time 
+6bc0 67f08081 store 1 ,core_spid_delay 
+6bc1 580001bc setarg mem_spid_tbuf 
+6bc2 67f10084 store 2 ,core_spid_txaddr 
+6bc3 580001c1 setarg mem_spid_rbuf 
+6bc4 67f10086 store 2 ,core_spid_rxaddr 
+6bc5 20206968 branch twspi_disable 
+
+spid_write_reg:
+6bc6 79207e07 set1 7 ,pdata 
+6bc7 67e101bc store 2 ,mem_spid_tbuf 
+6bc8 44f6401d bpatch patch1d_4 ,mem_patch1d 
+6bc9 70808202 jam 2 ,core_spid_txlen 
+6bca 70808800 jam 0 ,core_spid_rxlen 
+6bcb 70800602 jam spid_start ,core_misc_ctrl 
+6bcc 20206bd6 branch wait_spid_done 
+
+spid_read_reg:
+6bcd 18000401 force 1 ,temp 
+
+spid_read_regs:
+6bce 67e081bc store 1 ,mem_spid_tbuf 
+6bcf 44f6c01d bpatch patch1d_5 ,mem_patch1d 
+6bd0 70808201 jam 1 ,core_spid_txlen 
+6bd1 60590088 storet 2 ,core_spid_rxlen 
+6bd2 70800602 jam spid_start ,core_misc_ctrl 
+6bd3 20406bd6 call wait_spid_done 
+6bd4 6fe081c1 fetch 1 ,mem_spid_rbuf 
+6bd5 20600000 rtn 
+
+wait_spid_done:
+6bd6 20000005 nop 5 
+6bd7 6ff08128 fetch 1 ,core_dma_status 
+6bd8 c301ebd6 bbit0 spid_done ,wait_spid_done 
+6bd9 20600000 rtn 
+
+flash_write:
+6bda 78547c00 disable user 
+6bdb 1fe22400 copy pdata ,regb 
+6bdc 6fe0c437 fetch 1 ,mem_spi_write_flash_sm 
+6bdd c1800000 rtnne flash_sm_no_buys 
+6bde 78347c00 enable user 
+6bdf 1a427e00 copy regb ,pdata 
+6be0 20206be8 branch spid_flash_write_start 
+
+flash_write_spi_sm_timer:
+6be1 6fe0c437 fetch 1 ,mem_spi_write_flash_sm 
+6be2 c000ebe8 beq flash_sm_start ,spid_flash_write_start 
+6be3 c0016bee beq flash_sm_erase_sector ,spid_flash_erase_sector 
+6be4 c001ebf6 beq flash_sm_wait_erase_sector ,spid_flash_wait_erase_sector 
+6be5 c0026bfa beq flash_sm_write_data ,spid_flash_write_data 
+6be6 c002ec01 beq flash_sm_wait_write_data ,spid_flash_wait_write_data 
+6be7 20600000 rtn 
+
+spid_flash_write_start:
+6be8 67e1c430 store 3 ,mem_spi_write_addr 
+6be9 1a227e00 copy rega ,pdata 
+6bea 67e14433 store 2 ,mem_spi_write_ptr 
+6beb 60494435 storet 2 ,mem_spi_write_len 
+6bec 70443702 jam flash_sm_erase_sector ,mem_spi_write_flash_sm 
+6bed 20206c16 branch spid_init_flash 
+
+spid_flash_erase_sector:
+6bee 20406c16 call spid_init_flash 
+6bef 70443703 jam flash_sm_wait_erase_sector ,mem_spi_write_flash_sm 
+6bf0 20406c1c call spid_unlock_flash 
+6bf1 da2001bc arg mem_spid_tbuf ,rega 
+6bf2 70808204 jam 4 ,core_spid_txlen 
+6bf3 6fe1c430 fetch 3 ,mem_spi_write_addr 
+6bf4 d8400020 arg flash_command_sector_erase ,temp 
+6bf5 20206c36 branch spid_write_flash_common 
+
+spid_flash_wait_erase_sector:
+6bf6 20406c16 call spid_init_flash 
+6bf7 20406c59 call wait_spid_flash_done 
+6bf8 70443704 jam flash_sm_write_data ,mem_spi_write_flash_sm 
+6bf9 20600000 rtn 
+
+spid_flash_write_data:
+6bfa 44f7401d bpatch patch1d_6 ,mem_patch1d 
+6bfb 20406c16 call spid_init_flash 
+6bfc 70443705 jam flash_sm_wait_write_data ,mem_spi_write_flash_sm 
+6bfd 20406c1c call spid_unlock_flash 
+6bfe 20406c0e call spid_flash_data_preserve 
+6bff 20406c32 call spid_write_flash 
+6c00 20206c09 branch spid_flash_data_recover 
+
+spid_flash_wait_write_data:
+6c01 20406c16 call spid_init_flash 
+6c02 20406c1c call spid_unlock_flash 
+6c03 58000005 setarg flash_read_satus 
+6c04 20406bcd call spid_read_reg 
+6c05 c3800000 rtnbit1 flash_status_wip 
+6c06 70443700 jam flash_sm_no_buys ,mem_spi_write_flash_sm 
+6c07 6fe143f0 fetch 2 ,mem_cb_spi_flash_write_complate 
+6c08 20207d7b branch callback_func 
+
+spid_flash_data_recover:
+6c09 6fe20656 fetch 4 ,mem_temp 
+6c0a 68494433 fetcht 2 ,mem_spi_write_ptr 
+
+spid_flash_data_recover_comm:
+6c0b 184085fc increase -4 ,temp 
+6c0c e7e20002 istore 4 ,temp 
+6c0d 20600000 rtn 
+
+spid_flash_data_preserve:
+6c0e 68494433 fetcht 2 ,mem_spi_write_ptr 
+6c0f 18422200 copy temp ,rega 
+6c10 184085fc increase -4 ,temp 
+6c11 efe20002 ifetch 4 ,temp 
+6c12 67e20656 store 4 ,mem_temp 
+6c13 68494435 fetcht 2 ,mem_spi_write_len 
+6c14 6fe1c430 fetch 3 ,mem_spi_write_addr 
+6c15 20600000 rtn 
+
+spid_init_flash:
+6c16 44f7c01d bpatch patch1d_7 ,mem_patch1d 
+6c17 20406c81 call spi_gpio_init 
+6c18 20406968 call twspi_disable 
+6c19 58000000 setarg 0 
+6c1a 67e201bc store 4 ,mem_spid_tbuf 
+6c1b 20600000 rtn 
+
+spid_unlock_flash:
+6c1c 7001bc06 jam flash_command_write_enable ,mem_spid_tbuf 
+
+spid_sendcmd_common:
+6c1d 58000000 setarg 0 
+6c1e 67f10088 store 2 ,core_spid_rxlen 
+6c1f 58000001 setarg 1 
+6c20 67f10082 store 2 ,core_spid_txlen 
+6c21 580001bc setarg mem_spid_tbuf 
+6c22 67f10084 store 2 ,core_spid_txaddr 
+6c23 70800602 jam spid_start ,core_misc_ctrl 
+6c24 20206bd6 branch wait_spid_done 
+
+spid_flash_release_form_powerdown:
+6c25 7001bcab jam flash_command_release_from_powerdown ,mem_spid_tbuf 
+6c26 20206c1d branch spid_sendcmd_common 
+
+spid_flash_powerdown:
+6c27 7001bcb9 jam flash_command_powerdown ,mem_spid_tbuf 
+6c28 20206c1d branch spid_sendcmd_common 
+
+spid_write_flash_data:
+6c29 67e1864e store 3 ,mem_pdatatemp 
+6c2a 60490656 storet 2 ,mem_temp 
+6c2b 62210662 storer rega ,2 ,mem_rega 
+6c2c 44f8401e bpatch patch1e_0 ,mem_patch1e 
+6c2d 20406c1c call spid_unlock_flash 
+6c2e 6fe1864e fetch 3 ,mem_pdatatemp 
+6c2f 68490656 fetcht 2 ,mem_temp 
+6c30 6a210662 fetchr rega ,2 ,mem_rega 
+6c31 20206c32 branch spid_write_flash 
+
+spid_write_flash:
+6c32 18408404 increase 4 ,temp 
+6c33 60590082 storet 2 ,core_spid_txlen 
+6c34 d8400002 arg flash_command_write_data ,temp 
+6c35 1a20a3fc increase -4 ,rega 
+
+spid_write_flash_common:
+6c36 e0408011 istoret 1 ,rega 
+6c37 1ff10400 rshift16 pdata ,temp 
+6c38 e0408005 istoret 1 ,contw 
+6c39 1fec8400 rshift8 pdata ,temp 
+6c3a e0408005 istoret 1 ,contw 
+6c3b e7e08005 istore 1 ,contw 
+6c3c 1a227e00 deposit rega 
+6c3d 67f10084 store 2 ,core_spid_txaddr 
+6c3e 58000000 setarg 0 
+6c3f 67f10088 store 2 ,core_spid_rxlen 
+6c40 70800602 jam spid_start ,core_misc_ctrl 
+6c41 20406bd6 call wait_spid_done 
+6c42 20206c59 branch wait_spid_flash_done 
+
+spid_read_flash:
+6c43 60590088 storet 2 ,core_spid_rxlen 
+6c44 1ff10400 rshift16 pdata ,temp 
+6c45 604881bd storet 1 ,mem_addr_hi 
+6c46 1fec8400 rshift8 pdata ,temp 
+6c47 604881be storet 1 ,mem_addr_mi 
+6c48 67e081bf store 1 ,mem_addr_lo 
+6c49 58000004 setarg 4 
+6c4a 67f10082 store 2 ,core_spid_txlen 
+6c4b 7001bc03 jam flash_command_read_data ,mem_spid_tbuf 
+6c4c 580001bc setarg mem_spid_tbuf 
+6c4d 67f10084 store 2 ,core_spid_txaddr 
+6c4e 1a227e00 deposit rega 
+6c4f 67f10086 store 2 ,core_spid_rxaddr 
+6c50 6ff08080 fetch 1 ,core_spid_ctrl 
+6c51 2a2c000f isolate0 15 ,rega 
+6c52 7920fe06 setflag true ,6 ,pdata 
+6c53 67f08080 store 1 ,core_spid_ctrl 
+6c54 70800602 jam spid_start ,core_misc_ctrl 
+
+spid_read_flash_wait:
+6c55 6ff08128 fetch 1 ,core_dma_status 
+6c56 c283ec55 bbit1 7 ,spid_read_flash_wait 
+6c57 d8e00003 arg spid_done ,queue 
+6c58 20206bd6 branch wait_spid_done 
+
+wait_spid_flash_done:
+6c59 580007d0 setarg 2000 
+6c5a 20402340 call sleep 
+6c5b 20406c1c call spid_unlock_flash 
+6c5c 580001c1 setarg mem_spid_rbuf 
+6c5d 67f10086 store 2 ,core_spid_rxaddr 
+6c5e 58000005 setarg flash_read_satus 
+6c5f 20406bcd call spid_read_reg 
+6c60 c2806c59 bbit1 flash_status_wip ,wait_spid_flash_done 
+6c61 20600000 rtn 
+
+spid_load_flash:
+6c62 60590088 storet 2 ,core_spid_rxlen 
+6c63 58000004 setarg 4 
+6c64 67f10082 store 2 ,core_spid_txlen 
+6c65 7001bc03 jam 3 ,mem_spid_tbuf 
+6c66 580001bc setarg mem_spid_tbuf 
+6c67 67f10084 store 2 ,core_spid_txaddr 
+6c68 1a227e00 deposit rega 
+6c69 67f10086 store 2 ,core_spid_rxaddr 
+6c6a 6ff08080 fetch 1 ,core_spid_ctrl 
+6c6b 2a2c000f isolate0 15 ,rega 
+6c6c 7920fe06 setflag true ,6 ,pdata 
+6c6d 67f08080 store 1 ,core_spid_ctrl 
+6c6e 70800602 jam spid_start ,core_misc_ctrl 
+
+spi_load_flash_wait:
+6c6f 6ff08128 fetch 1 ,core_dma_status 
+6c70 c283ec6f bbit1 7 ,spi_load_flash_wait 
+6c71 d8e00003 arg spid_done ,queue 
+6c72 20406af0 call decrypt_code 
+6c73 20406bd6 call wait_spid_done 
+6c74 2feffe02 isolate1 spid_crcok ,pdata 
+6c75 20406ae9 call set_ucode_status 
+6c76 6fe081bd fetch 1 ,mem_addr_hi 
+6c77 1ff02400 lshift16 pdata ,regb 
+6c78 6fe101be fetch 2 ,mem_addr_mi 
+6c79 1ff0fe00 byteswap pdata ,pdata 
+6c7a 9a41fe00 ior regb ,pdata 
+6c7b 9840fe00 iadd temp ,pdata 
+6c7c 67e081bf store 1 ,mem_addr_lo 
+6c7d 1fecfe00 rshift8 pdata ,pdata 
+6c7e 1ff0fe00 byteswap pdata ,pdata 
+6c7f 67e101bd store 2 ,mem_addr_hi 
+6c80 20600000 rtn 
+
+spi_gpio_init:
+6c81 6fe0c438 fetch 1 ,mem_spi_cs_gpio 
+6c82 6848c43a fetcht 1 ,mem_spi_so_gpio 
+6c83 98467c00 isub temp ,null 
+6c84 2422ec86 nbranch spi_pin_set ,zero 
+6c85 20406c92 call spi_gpio_default_init 
+
+spi_pin_set:
+6c86 6fe0c438 fetch 1 ,mem_spi_cs_gpio 
+6c87 d8400020 arg gpcfg_spid_ncs ,temp 
+6c88 20406f1d call gpio_config_function_int 
+6c89 6fe0c43b fetch 1 ,mem_spi_sclk_gpio 
+6c8a d8400021 arg gpcfg_spid_sck ,temp 
+6c8b 20406f1d call gpio_config_function_int 
+6c8c 6fe0c439 fetch 1 ,mem_spi_si_gpio 
+6c8d d8400022 arg gpcfg_spid_mosi ,temp 
+6c8e 20406f1d call gpio_config_function_int 
+6c8f 6fe0c43a fetch 1 ,mem_spi_so_gpio 
+6c90 d840001f arg gpcfg_spid_miso ,temp 
+6c91 20206f1d branch gpio_config_function_int 
+
+spi_gpio_default_init:
+6c92 70443801 jam 1 ,mem_spi_cs_gpio 
+6c93 70443903 jam 3 ,mem_spi_si_gpio 
+6c94 70443a00 jam 0 ,mem_spi_so_gpio 
+6c95 70443b02 jam 2 ,mem_spi_sclk_gpio 
+6c96 70443c0b jam 11 ,mem_spi_wp_gpio 
+6c97 70443d0a jam 10 ,mem_spi_hold_gpio 
+6c98 20600000 rtn 
+
+soft_reset_chip:
+6c99 70801001 jam 1 ,core_reset 
+6c9a 20600000 rtn 
+
+iic_init_600khz:
+6c9b 70808b05 jam 5 ,core_iicd_scl_low 
+6c9c 70808c07 jam 7 ,core_iicd_scl_high 
+6c9d 70808d07 jam 7 ,core_iicd_start_setup 
+6c9e 70808e07 jam 7 ,core_iicd_start_hold 
+6c9f 70808f07 jam 7 ,core_iicd_stop_setup 
+6ca0 70809005 jam 5 ,core_iicd_data_setup 
+6ca1 70809100 jam 0 ,core_iicd_data_hold 
+6ca2 20600000 rtn 
+
+iic_init_360khz:
+6ca3 70808b0c jam 12 ,core_iicd_scl_low 
+6ca4 70808c0d jam 13 ,core_iicd_scl_high 
+6ca5 70808d0d jam 13 ,core_iicd_start_setup 
+6ca6 70808e0d jam 13 ,core_iicd_start_hold 
+6ca7 70808f0d jam 13 ,core_iicd_stop_setup 
+6ca8 7080900c jam 12 ,core_iicd_data_setup 
+6ca9 70809100 jam 0 ,core_iicd_data_hold 
+6caa 20600000 rtn 
+
+iicd_init_pin:
+6cab 20406cce call iicd_eeprom_write_enable 
+
+iicd_init_pin_scl_sda:
+6cac 6fe0c43f fetch 1 ,mem_eeprom_scl_gpio 
+6cad d840006c arg gpcfg_iic_scl | gpcfg_pullup ,temp 
+6cae 20406f1d call gpio_config_function_int 
+6caf 6fe0c440 fetch 1 ,mem_eeprom_sda_gpio 
+6cb0 d840006d arg gpcfg_iic_sda | gpcfg_pullup ,temp 
+6cb1 20206f1d branch gpio_config_function_int 
+
+iicd_read_init_pin:
+6cb2 20406cd5 call iicd_eeprom_write_disable 
+6cb3 20206cac branch iicd_init_pin_scl_sda 
+
+wait_iicd_done:
+6cb4 6ff08128 fetch 1 ,core_dma_status 
+6cb5 c302ecb4 bbit0 iicd_done ,wait_iicd_done 
+6cb6 20600000 rtn 
+
+set_eeprom_size_2k:
+6cb7 79200028 set1 mark_eeprom_size ,mark 
+6cb8 7043fd08 jam 0x08 ,mem_eeprom_block_size 
+6cb9 20600000 rtn 
+
+clear_eeprom_size_2k:
+6cba 793f8028 set0 mark_eeprom_size ,mark 
+6cbb 7043fd20 jam 0x20 ,mem_eeprom_block_size 
+6cbc 20600000 rtn 
+
+iicd_read_eep_data_size_2k:
+6cbd 6fe0c3f4 fetch 1 ,mem_eeprom_base 
+6cbe 9a40fe00 iadd regb ,pdata 
+6cbf 67e081be store 1 ,mem_addr_mi 
+6cc0 20206cc4 branch iicd_read_eep_size_2k 
+
+iicd_read_eep_size_2k_lcadcode:
+6cc1 6fe101be fetch 2 ,mem_addr_mi 
+6cc2 1ff0fe00 byteswap pdata ,pdata 
+6cc3 67e081be store 1 ,mem_addr_mi 
+
+iicd_read_eep_size_2k:
+6cc4 58000003 setarg 3 
+6cc5 67f10092 store 2 ,core_iicd_txlen 
+6cc6 7001bda0 jam 0xa0 ,mem_iicd_tbuf 
+6cc7 7001bfa1 jam 0xa1 ,mem_iicd_tbuf + 2 
+6cc8 20206ce3 branch iicd_read_eep_common 
+
+iicd_write_protect_eep_data:
+6cc9 60490656 storet 2 ,mem_temp 
+6cca 20406cce call iicd_eeprom_write_enable 
+6ccb 68490656 fetcht 2 ,mem_temp 
+6ccc 20406cfa call iicd_write_eep_data 
+6ccd 20206cd5 branch iicd_eeprom_write_disable 
+
+iicd_eeprom_write_enable:
+6cce 6fe0c43e fetch 1 ,mem_eeprom_wp_gpio 
+6ccf c17f8000 rtneq gpio_disable 
+6cd0 c3036cd3 bbit0 6 ,iicd_wp_gpio_output_low 
+6cd1 580249f0 setarg 150000 
+6cd2 20402340 call sleep 
+
+iicd_wp_gpio_output_low:
+6cd3 6848c43e fetcht 1 ,mem_eeprom_wp_gpio 
+6cd4 20206ef1 branch gpio_out_active 
+
+iicd_eeprom_write_disable:
+6cd5 6848c43e fetcht 1 ,mem_eeprom_wp_gpio 
+6cd6 20206eed branch gpio_out_inactive 
+
+iicd_read_eep_data:
+6cd7 44f8c01e bpatch patch1e_1 ,mem_patch1e 
+6cd8 c5146cbd bmark1 mark_eeprom_size ,iicd_read_eep_data_size_2k 
+6cd9 6fe143f4 fetch 2 ,mem_eeprom_base 
+
+iicd_read_eep_data_next:
+6cda 9a40fe00 iadd regb ,pdata 
+6cdb 1ff0fe00 byteswap pdata ,pdata 
+6cdc 67e101be store 2 ,mem_addr_mi 
+
+iicd_read_eep:
+6cdd 44f9401e bpatch patch1e_2 ,mem_patch1e 
+6cde c5146cc1 bmark1 mark_eeprom_size ,iicd_read_eep_size_2k_lcadcode 
+6cdf 58000004 setarg 4 
+6ce0 67f10092 store 2 ,core_iicd_txlen 
+6ce1 7001bda0 jam 0xa0 ,mem_iicd_tbuf 
+6ce2 7001c0a1 jam 0xa1 ,mem_iicd_tbuf + 3 
+
+iicd_read_eep_common:
+6ce3 580001bd setarg mem_iicd_tbuf 
+6ce4 67f10094 store 2 ,core_iicd_txaddr 
+6ce5 60590098 storet 2 ,core_iicd_rxlen 
+6ce6 62310096 storer rega ,2 ,core_iicd_rxaddr 
+6ce7 58000002 setarg 2 
+6ce8 2a2c000f isolate0 15 ,rega 
+6ce9 7920fe00 setflag true ,0 ,pdata 
+6cea 67f0808a store 1 ,core_iicd_ctrl 
+6ceb 70800604 jam iicd_start ,core_misc_ctrl 
+6cec d8e00005 arg iicd_done ,queue 
+6ced 20406af0 call decrypt_code 
+6cee 20406cb4 call wait_iicd_done 
+6cef 2feffe04 isolate1 iicd_crcok ,pdata 
+6cf0 20406ae9 call set_ucode_status 
+6cf1 c5146cf5 bmark1 mark_eeprom_size ,iicd_read_eep_load_code_size_2k 
+
+iicd_inc_addr:
+6cf2 6fe101be fetch 2 ,mem_addr_mi 
+6cf3 1ff0fe00 byteswap pdata ,pdata 
+6cf4 20206cf6 branch iicd_set_addr 
+
+iicd_read_eep_load_code_size_2k:
+6cf5 6fe081be fetch 1 ,mem_addr_mi 
+
+iicd_set_addr:
+6cf6 9840fe00 iadd temp ,pdata 
+6cf7 1ff0fe00 byteswap pdata ,pdata 
+6cf8 67e101be store 2 ,mem_addr_mi 
+6cf9 20600000 rtn 
+
+iicd_write_eep_data:
+6cfa 6fe143f4 fetch 2 ,mem_eeprom_base 
+6cfb 9a40fe00 iadd regb ,pdata 
+6cfc 67e1064e store 2 ,mem_pdatatemp 
+6cfd 44f9c01e bpatch patch1e_3 ,mem_patch1e 
+6cfe 60490656 storet 2 ,mem_temp 
+6cff 6221066d storer rega ,2 ,mem_contr 
+
+iicd_write_eep_loop:
+6d00 20406d0f call iicd_eep_transparency 
+6d01 68490666 fetcht 2 ,mem_regb 
+6d02 6a21066d fetchr rega ,2 ,mem_contr 
+6d03 6fe1064e fetch 2 ,mem_pdatatemp 
+6d04 20406d30 call iicd_write_eep 
+6d05 6fe10666 fetch 2 ,mem_regb 
+6d06 6849066d fetcht 2 ,mem_contr 
+6d07 98408400 iadd temp ,temp 
+6d08 6049066d storet 2 ,mem_contr 
+6d09 6849064e fetcht 2 ,mem_pdatatemp 
+6d0a 98408400 iadd temp ,temp 
+6d0b 6049064e storet 2 ,mem_pdatatemp 
+6d0c 6fe10656 fetch 2 ,mem_temp 
+6d0d 243a6d00 nbranch iicd_write_eep_loop ,blank 
+6d0e 20600000 rtn 
+
+iicd_eep_transparency:
+6d0f 44fa401e bpatch patch1e_4 ,mem_patch1e 
+6d10 6fe0c3fd fetch 1 ,mem_eeprom_block_size 
+6d11 1fe0ffff increase -1 ,pdata 
+6d12 6849064e fetcht 2 ,mem_pdatatemp 
+6d13 9841fe00 ior temp ,pdata 
+6d14 1fe0fe01 increase 1 ,pdata 
+6d15 67e1866a store 3 ,mem_regc 
+6d16 6fe10656 fetch 2 ,mem_temp 
+6d17 9840fe00 iadd temp ,pdata 
+6d18 6849866a fetcht 3 ,mem_regc 
+6d19 98467e00 isub temp ,pdata 
+6d1a 24216d21 nbranch iicd_eep_deal_short_packet ,positive 
+6d1b 67e10656 store 2 ,mem_temp 
+6d1c 6fe1866a fetch 3 ,mem_regc 
+6d1d 6849064e fetcht 2 ,mem_pdatatemp 
+6d1e 98467e00 isub temp ,pdata 
+6d1f 67e10666 store 2 ,mem_regb 
+6d20 20600000 rtn 
+
+iicd_eep_deal_short_packet:
+6d21 6fe10656 fetch 2 ,mem_temp 
+6d22 67e10666 store 2 ,mem_regb 
+6d23 58000000 setarg 0 
+6d24 67e10656 store 2 ,mem_temp 
+6d25 20600000 rtn 
+
+iicd_write_eep_size_2k:
+6d26 1a427e00 copy regb ,pdata 
+6d27 18408402 increase 2 ,temp 
+6d28 60590092 storet 2 ,core_iicd_txlen 
+6d29 1a20a3fe increase -2 ,rega 
+6d2a e8418011 ifetcht 3 ,rega 
+6d2b 18422400 copy temp ,regb 
+6d2c d84000a0 arg 0xa0 ,temp 
+6d2d e0408011 istoret 1 ,rega 
+6d2e e7e08005 istore 1 ,contw 
+6d2f 20206d3d branch iicd_write_eep_common 
+
+iicd_write_eep:
+6d30 1fe22400 copy pdata ,regb 
+6d31 44fac01e bpatch patch1e_5 ,mem_patch1e 
+6d32 c5146d26 bmark1 mark_eeprom_size ,iicd_write_eep_size_2k 
+6d33 1a427e00 copy regb ,pdata 
+6d34 18408403 increase 3 ,temp 
+6d35 60590092 storet 2 ,core_iicd_txlen 
+6d36 1a20a3fd increase -3 ,rega 
+6d37 e8418011 ifetcht 3 ,rega 
+6d38 18422400 copy temp ,regb 
+6d39 d84000a0 arg 0xa0 ,temp 
+6d3a e0408011 istoret 1 ,rega 
+6d3b 1ff0fe00 byteswap pdata ,pdata 
+6d3c e7e10005 istore 2 ,contw 
+
+iicd_write_eep_common:
+6d3d 62310094 storer rega ,2 ,core_iicd_txaddr 
+6d3e 58000000 setarg 0 
+6d3f 67f10098 store 2 ,core_iicd_rxlen 
+6d40 70808a01 jam 1 ,core_iicd_ctrl 
+6d41 70800604 jam iicd_start ,core_misc_ctrl 
+6d42 20406cb4 call wait_iicd_done 
+6d43 e2418011 istorer regb ,3 ,rega 
+
+iic_check_eeprom_standby:
+6d44 44fb401e bpatch patch1e_6 ,mem_patch1e 
+6d45 7001c000 jam 0 ,mem_iicd_tbuf + 3 
+
+iic_check_eeprom_standby_wait:
+6d46 58000001 setarg 1 
+6d47 67f10092 store 2 ,core_iicd_txlen 
+6d48 7001bda0 jam 0xa0 ,mem_iicd_tbuf 
+6d49 580001bd setarg mem_iicd_tbuf 
+6d4a 67f10094 store 2 ,core_iicd_txaddr 
+6d4b 58000000 setarg 0 
+6d4c 67f10098 store 2 ,core_iicd_rxlen 
+6d4d 67f10096 store 2 ,core_iicd_rxaddr 
+6d4e 58000003 setarg 3 
+6d4f 67f0808a store 1 ,core_iicd_ctrl 
+6d50 70800604 jam iicd_start ,core_misc_ctrl 
+6d51 20406cb4 call wait_iicd_done 
+6d52 6ff08128 fetch 1 ,core_dma_status 
+6d53 c4030000 rtnbit0 iicd_ack 
+6d54 200005dc nop 1500 
+6d55 6fe081c0 fetch 1 ,mem_iicd_tbuf + 3 
+6d56 1fe0fe01 increase 1 ,pdata 
+6d57 67e081c0 store 1 ,mem_iicd_tbuf + 3 
+6d58 1fe67c28 sub pdata ,40 ,null 
+6d59 24610000 nrtn positive 
+6d5a 20206d46 branch iic_check_eeprom_standby_wait 
+
+uarta_init_dma_mem:
+6d5b 20407dbc call enable_user 
+6d5c 20206d5d branch uart_init_dma_mem 
+
+uart_init_dma_mem:
+6d5d 1ff10400 rshift16 pdata ,temp 
+6d5e 20546d81 call uarta_init_rx ,user 
+6d5f 1fef7e00 rshift32 pdata ,pdata 
+6d60 1ff10400 rshift16 pdata ,temp 
+6d61 20546d7d call uarta_init_tx ,user 
+6d62 6ff10050 fetch 2 ,core_clkoff 
+6d63 793ffe0f set0 clock_off_uart ,pdata 
+6d64 67f10050 store 2 ,core_clkoff 
+6d65 20600000 rtn 
+
+uarta_init_baud_rate:
+6d66 67f10052 store uart_baud_len ,core_uart_baud 
+6d67 20600000 rtn 
+
+uarta_calc_baud_rate_config:
+6d68 20406d6a call uart_calc_baud_rate_config 
+6d69 20206d66 branch uarta_init_baud_rate 
+
+uart_calc_baud_rate_config:
+6d6a 20406d6f call uart_calc_baud_rate_config_choice_uart_clock 
+6d6b 9846fc00 idiv temp 
+6d6c 20407d64 call wait_div_end 
+6d6d 1807fe00 quotient pdata 
+6d6e 20600000 rtn 
+
+uart_calc_baud_rate_config_choice_uart_clock:
+6d6f 6ff08043 fetch 1 ,core_uart_clksel 
+6d70 c3006d73 bbit0 uart_clock_select_bit ,uart_calc_baud_rate_config_choice_uart_clock_crystal 
+6d71 5adc6c00 setarg uart_clock_freq_48m 
+6d72 20600000 rtn 
+
+uart_calc_baud_rate_config_choice_uart_clock_crystal:
+6d73 596e3600 setarg uart_clock_freq_24m 
+6d74 20600000 rtn 
+
+uart_clock_select_main_freq_crystal:
+6d75 6ff08043 fetch 1 ,core_uart_clksel 
+6d76 1fe17efe and pdata ,uart_clock_select_crystal ,pdata 
+6d77 67f08043 store 1 ,core_uart_clksel 
+6d78 20600000 rtn 
+
+uart_clock_select_main_freq_dpll:
+6d79 6ff08043 fetch 1 ,core_uart_clksel 
+6d7a 1fe1fe01 or pdata ,uart_clock_select_dpll ,pdata 
+6d7b 67f08043 store 1 ,core_uart_clksel 
+6d7c 20600000 rtn 
+
+uarta_init_tx:
+6d7d 67f1005a store 2 ,core_uart_tsaddr 
+6d7e 67f1005e store 2 ,core_uart_twptr 
+6d7f 6059005c storet 2 ,core_uart_teaddr 
+6d80 20600000 rtn 
+
+uarta_init_rx:
+6d81 67f10054 store 2 ,core_uart_rsaddr 
+6d82 67f10058 store 2 ,core_uart_rrptr 
+6d83 60590056 storet 2 ,core_uart_readdr 
+6d84 20600000 rtn 
+
+uarta_prepare_tx:
+6d85 6951005a fetchr contus ,2 ,core_uart_tsaddr 
+6d86 6a11005c fetchr contue ,2 ,core_uart_teaddr 
+6d87 6871005e fetchr contu ,2 ,core_uart_twptr 
+6d88 20600000 rtn 
+
+uarta_prepare_rx:
+6d89 69510054 fetchr contus ,2 ,core_uart_rsaddr 
+6d8a 6a110056 fetchr contue ,2 ,core_uart_readdr 
+6d8b 68710058 fetchr contu ,2 ,core_uart_rrptr 
+6d8c 20600000 rtn 
+
+uarta_send:
+6d8d 6071005e storer contu ,2 ,core_uart_twptr 
+6d8e 20600000 rtn 
+
+uarta_rxdone:
+6d8f 60710058 storer contu ,2 ,core_uart_rrptr 
+6d90 20600000 rtn 
+
+uarta_clear_current_rx:
+6d91 20406d89 call uarta_prepare_rx 
+6d92 6ff10112 fetch 2 ,core_uart_rxitems 
+6d93 98608600 iadd contu ,contu 
+6d94 20206d8f branch uarta_rxdone 
+
+uarta_prepare_tx_register_push:
+6d95 20406d99 call uart_register_push 
+6d96 20206d85 branch uarta_prepare_tx 
+
+uarta_send_register_pop:
+6d97 20406d8d call uarta_send 
+6d98 20206d9d branch uart_register_pop 
+
+uart_register_push:
+6d99 60610675 storer contu ,2 ,mem_contu 
+6d9a 61410673 storer contus ,2 ,mem_contue 
+6d9b 62010671 storer contue ,2 ,mem_contus 
+6d9c 20600000 rtn 
+
+uart_register_pop:
+6d9d 68610675 fetchr contu ,2 ,mem_contu 
+6d9e 69410673 fetchr contus ,2 ,mem_contue 
+6d9f 6a010671 fetchr contue ,2 ,mem_contus 
+6da0 20600000 rtn 
+
+wait_uarttx:
+6da1 6ff1010e fetch 2 ,core_uart_txitems 
+6da2 243a6da1 nbranch wait_uarttx ,blank 
+6da3 20600000 rtn 
+
+uart_copy_tx_bytes_fast:
+6da4 1f227e00 deposit loopcnt 
+6da5 207a0000 rtn blank 
+
+uart_copy_tx_bytes_fast_loop:
+6da6 1f20f3f8 increase -8 ,loopcnt 
+6da7 20416db1 call uart_tx_8_bytes ,positive 
+6da8 20628000 rtn zero 
+6da9 20216da6 branch uart_copy_tx_bytes_fast_loop ,positive 
+6daa 1f20f208 increase 8 ,loopcnt 
+
+uart_copy_tx_bytes_fast_loop_four:
+6dab 1f20f3fc increase -4 ,loopcnt 
+6dac 20416db4 call uart_tx_4_bytes ,positive 
+6dad 20628000 rtn zero 
+6dae 20216dab branch uart_copy_tx_bytes_fast_loop_four ,positive 
+6daf 1f20f204 increase 4 ,loopcnt 
+6db0 20206db7 branch uart_copy_tx_bytes 
+
+uart_tx_8_bytes:
+6db1 efe40006 ifetch 8 ,contr 
+6db2 e7e40003 istore 8 ,contu 
+6db3 20600000 rtn 
+
+uart_tx_4_bytes:
+6db4 efe20006 ifetch 4 ,contr 
+6db5 e7e20003 istore 4 ,contu 
+6db6 20600000 rtn 
+
+uart_copy_tx_bytes:
+6db7 1f227e00 deposit loopcnt 
+6db8 207a0000 rtn blank 
+
+uart_copy_tx_bytes_loop:
+6db9 efe08006 ifetch 1 ,contr 
+6dba e7e08003 istore 1 ,contu 
+6dbb c2006db9 loop uart_copy_tx_bytes_loop 
+6dbc 20600000 rtn 
+
+uart_copy_rx_bytes_fast:
+6dbd 1f227e00 deposit loopcnt 
+6dbe 207a0000 rtn blank 
+
+uart_copy_rx_bytes_fast_loop:
+6dbf 1f20f3f8 increase -8 ,loopcnt 
+6dc0 20416dca call uart_rx_8_bytes ,positive 
+6dc1 20628000 rtn zero 
+6dc2 20216dbf branch uart_copy_rx_bytes_fast_loop ,positive 
+6dc3 1f20f208 increase 8 ,loopcnt 
+
+uart_copy_rx_bytes_fast_loop_four:
+6dc4 1f20f3fc increase -4 ,loopcnt 
+6dc5 20416dcd call uart_rx_4_bytes ,positive 
+6dc6 20628000 rtn zero 
+6dc7 20216dc4 branch uart_copy_rx_bytes_fast_loop_four ,positive 
+6dc8 1f20f204 increase 4 ,loopcnt 
+6dc9 20206dd0 branch uart_copy_rx_bytes 
+
+uart_rx_8_bytes:
+6dca efe40003 ifetch 8 ,contu 
+6dcb e7e40005 istore 8 ,contw 
+6dcc 20600000 rtn 
+
+uart_rx_4_bytes:
+6dcd efe20003 ifetch 4 ,contu 
+6dce e7e20005 istore 4 ,contw 
+6dcf 20600000 rtn 
+
+uart_copy_rx_bytes:
+6dd0 1f227e00 deposit loopcnt 
+6dd1 207a0000 rtn blank 
+
+uart_copy_rx_bytes_loop:
+6dd2 efe08003 ifetch 1 ,contu 
+6dd3 e7e08005 istore 1 ,contw 
+6dd4 c2006dd2 loop uart_copy_rx_bytes_loop 
+6dd5 20600000 rtn 
+
+app_store_nvram_event:
+6dd6 70064d3d jam bt_evt_store_nvram ,mem_fifo_temp 
+6dd7 20207819 branch ui_ipc_send_event 
+
+check_51cmd_update_device_record:
+6dd8 44fbc01e bpatch patch1e_7 ,mem_patch1e 
+6dd9 6fe0c403 fetch 1 ,mem_nv_data_number 
+6dda 207a0000 rtn blank 
+6ddb 20406e79 call check_nvram 
+6ddc 2042ee7f call init_device_list ,zero 
+6ddd 20407dc2 call disable_user2 
+6dde 20406e0b call nvram_find_addr_from_bd_list 
+
+write_device_record:
+6ddf 6fe0c403 fetch 1 ,mem_nv_data_number 
+6de0 1fe22600 icopy regc 
+6de1 68494401 fetcht 2 ,mem_nv_data_ptr 
+6de2 60490033 storet 2 ,mem_list_item_ptr 
+
+write_device_loop_find:
+6de3 1a627e00 copy regc ,pdata 
+6de4 203a6dd6 branch app_store_nvram_event ,blank 
+6de5 1a60a7ff increase -1 ,regc 
+6de6 18422200 copy temp ,rega 
+6de7 efe08011 ifetch 1 ,rega 
+6de8 68488031 fetcht 1 ,mem_select_list_item 
+6de9 98467c00 isub temp ,null 
+6dea 2042edf3 call set_index_finded_device ,zero 
+6deb 20216def branch write_device_loop_find0 ,positive 
+6dec efe08011 ifetch 1 ,rega 
+6ded 1fe0fe01 increase 1 ,pdata 
+6dee e7e08011 istore 1 ,rega 
+
+write_device_loop_find0:
+6def 68490033 fetcht 2 ,mem_list_item_ptr 
+6df0 18408422 increase nv_data_len ,temp 
+6df1 60490033 storet 2 ,mem_list_item_ptr 
+6df2 20206de3 branch write_device_loop_find 
+
+set_index_finded_device:
+6df3 58000000 setarg 0 
+6df4 e7e08011 istore 1 ,rega 
+6df5 6fe08032 fetch 1 ,mem_temp_reconn_record 
+6df6 e7e08005 istore 1 ,contw 
+6df7 c099ee00 bne rec_3_mode ,set_index_finded_device_ble_mode 
+
+set_index_find_device_master_addr:
+6df8 efe30006 ifetch 6 ,contr 
+6df9 e7e40005 istore 8 ,contw 
+6dfa 58000000 setarg 0 
+6dfb e7e40005 istore 8 ,contw 
+6dfc 1a420c00 copy regb ,contr 
+
+store_rec_data_common:
+6dfd 20407c91 call memcpy16 
+6dfe 18007c01 force 1 ,null 
+6dff 20600000 rtn 
+
+set_index_finded_device_ble_mode:
+6e00 c01b6e04 beq rec_4_mode_random_resolvable_private_address ,set_index_finded_device_irk 
+6e01 c01bee08 beq rec_4_mode_random_non_resolvable_private_address ,set_index_finded_device_ediv 
+6e02 da40428c arg mem_le_ltk ,regb 
+6e03 20206df8 branch set_index_find_device_master_addr 
+
+set_index_finded_device_irk:
+6e04 d8c0430f arg mem_le_irk ,contr 
+6e05 20407c91 call memcpy16 
+
+store_ble_rec_data_common:
+6e06 d8c0428c arg mem_le_ltk ,contr 
+6e07 20206dfd branch store_rec_data_common 
+
+set_index_finded_device_ediv:
+6e08 d8c04307 arg mem_le_rand ,contr 
+6e09 20407c91 call memcpy16 
+6e0a 20206e06 branch store_ble_rec_data_common 
+
+nvram_find_addr_from_bd_list:
+6e0b 44fc401f bpatch patch1f_0 ,mem_patch1f 
+6e0c 20407dbe call disable_user 
+6e0d 6fe0c403 fetch 1 ,mem_nv_data_number 
+6e0e 207a0000 rtn blank 
+6e0f 6fe14500 fetch 2 ,mem_ui_state_map 
+6e10 c4048000 rtnbit0 ui_state_ble_connected 
+
+find_addr_from_bd_list_ble_mode:
+6e11 6fe0c2cd fetch 1 ,mem_le_conn_peer_addr_type 
+6e12 c0006e26 beq master_public_addr ,find_addr_from_bd_list_public_device_addr 
+6e13 6fe0817d fetch 1 ,mem_le_plap + 5 
+6e14 2fe180c0 compare 0xc0 ,pdata ,0xc0 
+6e15 2020ee19 branch find_addr_from_bd_list_static_addr ,true 
+6e16 2fe18040 compare 0x40 ,pdata ,0xc0 
+6e17 2020ee2b branch find_addr_from_bd_list_random_addr ,true 
+6e18 20206e20 branch find_addr_from_bd_list_random_non_resolvable_private_address_sc_or_legacy 
+
+find_addr_from_bd_list_static_addr:
+6e19 20366e1d branch find_addr_from_bd_list_static_addr_reconnect ,user2 
+6e1a 6fe0c2c4 fetch 1 ,mem_le_preq_init_key_distribution 
+6e1b c300ee26 bbit0 le_initator_irk_bit ,find_addr_from_bd_list_public_device_addr 
+6e1c 20206e20 branch find_addr_from_bd_list_static_addr_sc_or_legacy 
+
+find_addr_from_bd_list_static_addr_reconnect:
+6e1d 20406e26 call find_addr_from_bd_list_public_device_addr 
+6e1e 20740000 rtn user 
+6e1f 20206e20 branch find_addr_from_bd_list_static_addr_sc_or_legacy 
+
+find_addr_from_bd_list_static_addr_sc_or_legacy:
+
+find_addr_from_bd_list_random_non_resolvable_private_address_sc_or_legacy:
+6e20 6fe0c300 fetch 1 ,mem_le_pairing_mode 
+6e21 c283ee23 bbit1 le_pairing_mode_secure_connect_bit ,find_addr_from_bd_list_random_non_resolvable_private_address_sc 
+6e22 20206e29 branch find_addr_from_bd_list_random_non_resolvable_private_address 
+
+find_addr_from_bd_list_static_addr_sc:
+
+find_addr_from_bd_list_random_non_resolvable_private_address_sc:
+6e23 6fe30178 fetch 6 ,mem_le_plap 
+6e24 67e44307 store 8 ,mem_le_rand 
+6e25 20206e29 branch find_addr_from_bd_list_random_non_resolvable_private_address 
+
+find_addr_from_bd_list_public_device_addr:
+6e26 70003235 jam rec_4_mode_static_address ,mem_temp_reconn_record 
+6e27 6fe30178 fetch 6 ,mem_le_plap 
+6e28 20206e2d branch find_addr_from_bd_list_common 
+
+find_addr_from_bd_list_random_non_resolvable_private_address:
+6e29 70003237 jam rec_4_mode_random_non_resolvable_private_address ,mem_temp_reconn_record 
+6e2a 20206e2d branch find_addr_from_bd_list_common 
+
+find_addr_from_bd_list_random_addr:
+6e2b 70003236 jam rec_4_mode_random_resolvable_private_address ,mem_temp_reconn_record 
+6e2c 20206e2d branch find_addr_from_bd_list_common 
+
+find_addr_from_bd_list_common:
+6e2d 44fcc01f bpatch patch1f_1 ,mem_patch1f 
+6e2e 6fe14401 fetch 2 ,mem_nv_data_ptr 
+6e2f e840803f ifetcht 1 ,pdata 
+6e30 1fe0fe01 pincrease 1 
+6e31 67e10033 store 2 ,mem_list_item_ptr 
+6e32 60488031 storet 1 ,mem_select_list_item 
+6e33 6fe0c403 fetch 1 ,mem_nv_data_number 
+6e34 1fe22600 icopy regc 
+
+nvram_find_addr_from_list:
+6e35 6fe10033 fetch 2 ,mem_list_item_ptr 
+6e36 1fe22200 copy pdata ,rega 
+6e37 20406e45 call nvram_find_addr_from_list_compare 
+6e38 20740000 rtn user 
+6e39 68490033 fetcht 2 ,mem_list_item_ptr 
+6e3a 18408422 increase nv_data_len ,temp 
+6e3b 60490033 storet 2 ,mem_list_item_ptr 
+6e3c 184085ff increase -1 ,temp 
+6e3d efe08002 ifetch 1 ,temp 
+6e3e 67e08031 store 1 ,mem_select_list_item 
+6e3f 1a60a7ff increase -1 ,regc 
+6e40 2422ee35 nbranch nvram_find_addr_from_list ,zero 
+6e41 6fe0c403 fetch 1 ,mem_nv_data_number 
+6e42 1fe0ffff pincrease decreased_one 
+6e43 67e08031 store 1 ,mem_select_list_item 
+6e44 20600000 rtn 
+
+nvram_find_addr_from_list_compare:
+6e45 6fe08032 fetch 1 ,mem_temp_reconn_record 
+6e46 c099ee4c bne rec_3_mode ,find_addr_from_list_compare_ble_mode 
+
+find_master_addr_from_list_compare:
+6e47 da400032 arg mem_temp_reconn_record ,regb 
+6e48 df200007 arg 7 ,loopcnt 
+6e49 20407d66 call string_compare 
+6e4a 2022fdbc branch enable_user ,zero 
+6e4b 20600000 rtn 
+
+find_addr_from_list_compare_ble_mode:
+6e4c c01b6e4f beq rec_4_mode_random_resolvable_private_address ,find_irk_form_list_compare 
+6e4d c01bee6a beq rec_4_mode_random_non_resolvable_private_address ,find_ediv_form_list_compare 
+6e4e 20206e47 branch find_master_addr_from_list_compare 
+
+find_irk_form_list_compare:
+6e4f e8408011 ifetcht 1 ,rega 
+6e50 98467c00 isub temp ,null 
+6e51 24628000 nrtn zero 
+6e52 d8a0067f arg mem_le_prand ,contw 
+6e53 df200010 arg 16 ,loopcnt 
+6e54 20407ca3 call clear_mem 
+6e55 6fe1817b fetch 3 ,mem_le_plap + 3 
+6e56 67e1867f store 3 ,mem_le_prand 
+6e57 20406e61 call genernate_master_macaddress 
+6e58 6fe1069c fetch 2 ,mem_le_aes_128 + 13 
+6e59 1ff0fe00 byteswap pdata ,pdata 
+6e5a 1fed0400 lshift8 pdata ,temp 
+6e5b efe08006 ifetch 1 ,contr 
+6e5c 9840fe00 iadd temp ,pdata 
+6e5d 68498178 fetcht 3 ,mem_le_plap 
+6e5e 98467c00 isub temp ,null 
+6e5f 2022fdbc branch enable_user ,zero 
+6e60 20600000 rtn 
+
+genernate_master_macaddress:
+6e61 d8c0067f arg mem_le_prand ,contr 
+6e62 2040734f call load_data128 
+6e63 efe08011 ifetch 1 ,rega 
+6e64 20407350 call load_regext 
+6e65 18006c38 force 0x38 ,aes_ctrl 
+6e66 18006c00 force 0x0 ,aes_ctrl 
+6e67 204072bd call wait_aes 
+6e68 d8a0068f arg mem_le_aes_128 ,contw 
+6e69 20207363 branch store_aes_result 
+
+find_ediv_form_list_compare:
+6e6a e8408011 ifetcht 1 ,rega 
+6e6b 98467c00 isub temp ,null 
+6e6c 24628000 nrtn zero 
+6e6d 18c22200 copy contr ,rega 
+6e6e 18c0a608 add contr ,8 ,regc 
+6e6f da404307 arg mem_le_rand ,regb 
+6e70 df200008 arg 8 ,loopcnt 
+6e71 20407d66 call string_compare 
+6e72 2022fdbc branch enable_user ,zero 
+6e73 1a622200 copy regc ,rega 
+6e74 da40430f arg mem_le_irk ,regb 
+6e75 df200008 arg 8 ,loopcnt 
+6e76 20407d66 call string_compare 
+6e77 2022fdbc branch enable_user ,zero 
+6e78 20600000 rtn 
+
+check_nvram:
+6e79 6fe14401 fetch 2 ,mem_nv_data_ptr 
+6e7a e840803f ifetcht 1 ,pdata 
+6e7b 1fe0fe22 pincrease nv_data_len 
+6e7c efe0803f ifetch 1 ,pdata 
+6e7d 98467c00 isub temp ,null 
+6e7e 20600000 rtn 
+
+init_device_list:
+6e7f 6fe0c403 fetch 1 ,mem_nv_data_number 
+6e80 1fe27200 icopy loopcnt 
+6e81 68494401 fetcht 2 ,mem_nv_data_ptr 
+6e82 58000000 setarg 0 
+
+init_device_list_loop:
+6e83 e7e08002 istore 1 ,temp 
+6e84 18408422 increase nv_data_len ,temp 
+6e85 1fe0fe01 pincrease 1 
+6e86 c2006e83 loop init_device_list_loop 
+6e87 20600000 rtn 
+
+load_device_list_mode_4:
+6e88 20407dc0 call enable_user2 
+6e89 20406e0b call nvram_find_addr_from_bd_list 
+6e8a 24346e93 nbranch clear_ltk_exists ,user 
+6e8b 6fe10033 fetch 2 ,mem_list_item_ptr 
+6e8c 1fe08c01 add pdata ,1 ,contr 
+6e8d d8a0430f arg mem_le_irk ,contw 
+6e8e 20407c91 call memcpy16 
+6e8f d8a0428c arg mem_le_ltk ,contw 
+6e90 20407c91 call memcpy16 
+6e91 70429c01 jam 1 ,mem_ltk_exists 
+6e92 20600000 rtn 
+
+clear_ltk_exists:
+6e93 70429c00 jam 0 ,mem_ltk_exists 
+6e94 20600000 rtn 
+
+eeprom_store_le_reconn_info:
+6e95 70003234 jam rec_4_mode ,mem_record_bt_mode 
+6e96 20206e97 branch eeprom_store_reconn_info 
+
+eeprom_store_reconn_info:
+6e97 6fe0c3cf fetch 1 ,mem_device_option 
+6e98 c0056dd8 beq dvc_op_module ,check_51cmd_update_device_record 
+6e99 c0045569 beq dvc_op_mouse ,mouse_store_remote_bdaddr 
+6e9a c007c8f2 beq dvc_op_keyboard ,keyboard_store_remote_bdaddr 
+6e9b 20600000 rtn 
+
+get_gpio_wakeup_index:
+6e9c 18417e1f and temp ,0x1f ,pdata 
+6e9d 1fe37e00 rshift pdata ,pdata 
+6e9e d8a00016 arg mem_gpio_wakeup_cfg ,contw 
+6e9f 98a08a00 iadd contw ,contw 
+6ea0 de0000f0 arg 0xf0 ,alarm 
+6ea1 284c0000 isolate0 0 ,temp 
+6ea2 20608000 rtn true 
+6ea3 de00000f arg 0xf ,alarm 
+6ea4 20600000 rtn 
+
+gpio_set_wake_by_current_state:
+6ea5 44fd401f bpatch patch1f_2 ,mem_patch1f 
+6ea6 18467cff sub temp ,gpio_disable ,null 
+6ea7 20628000 rtn zero 
+6ea8 79200407 set1 gpio_active_bit ,temp 
+6ea9 20406ee0 call gpio_get_bit 
+6eaa 2420eebc nbranch gpio_set_qdec_mode ,true 
+6eab 7d208407 nsetflag true ,gpio_active_bit ,temp 
+
+gpio_set_wake:
+6eac 44fdc01f bpatch patch1f_3 ,mem_patch1f 
+6ead 18467cff sub temp ,ui_button_gpio_disable ,null 
+6eae 20628000 rtn zero 
+6eaf d9000004 arg 4 ,debug 
+6eb0 284ffe07 isolate1 gpio_active_bit ,temp 
+6eb1 2020eeb3 branch gpio_set_wake_high ,true 
+6eb2 d9000002 arg 2 ,debug 
+
+gpio_set_wake_high:
+6eb3 20406e9c call get_gpio_wakeup_index 
+6eb4 284c0000 isolate0 0 ,temp 
+6eb5 2020eeb7 branch gpio_set_wake_low4bit ,true 
+6eb6 19121000 lshift4 debug ,debug 
+
+gpio_set_wake_low4bit:
+6eb7 efe08005 ifetch 1 ,contw 
+6eb8 9e017e00 iand alarm ,pdata 
+6eb9 9901fe00 ior debug ,pdata 
+6eba e7e08005 istore 1 ,contw 
+6ebb 20600000 rtn 
+
+gpio_set_qdec_mode:
+6ebc 70488c01 jam 1 ,mem_qdec_set_flag 
+6ebd 20406f0b call gpio_set_high_impedance 
+6ebe d9000006 arg 6 ,debug 
+6ebf 20206eb3 branch gpio_set_wake_high 
+
+gpio_set_low_pullup:
+6ec0 44fe401f bpatch patch1f_4 ,mem_patch1f 
+6ec1 18467cff sub temp ,ui_button_gpio_disable ,null 
+6ec2 20628000 rtn zero 
+6ec3 d9000001 arg 1 ,debug 
+6ec4 20406e9c call get_gpio_wakeup_index 
+6ec5 284c0000 isolate0 0 ,temp 
+6ec6 2020eec8 branch gpio_set_low_pullup_low4bit ,true 
+6ec7 19121000 lshift4 debug ,debug 
+
+gpio_set_low_pullup_low4bit:
+6ec8 efe08005 ifetch 1 ,contw 
+6ec9 9e017e00 iand alarm ,pdata 
+6eca 9901fe00 ior debug ,pdata 
+6ecb e7e08005 istore 1 ,contw 
+6ecc 20600000 rtn 
+
+gpio_clr_wake:
+6ecd 44fec01f bpatch patch1f_5 ,mem_patch1f 
+6ece 18467cff sub temp ,ui_button_gpio_disable ,null 
+6ecf 20628000 rtn zero 
+6ed0 20406e9c call get_gpio_wakeup_index 
+6ed1 efe08005 ifetch 1 ,contw 
+6ed2 9e017e00 iand alarm ,pdata 
+6ed3 e7e08005 istore 1 ,contw 
+6ed4 20600000 rtn 
+
+gpio_config_input_nowake:
+6ed5 20406ecd call gpio_clr_wake 
+6ed6 20206eda branch gpio_config_input_without_wake 
+
+gpio_config_input:
+6ed7 18467cff sub temp ,ui_button_gpio_disable ,null 
+6ed8 20628000 rtn zero 
+6ed9 2455eeac ncall gpio_set_wake ,wake 
+
+gpio_config_input_without_wake:
+6eda 20406f10 call gpio_addr 
+6edb 58000000 setarg 0 
+6edc 284ffe07 isolate1 gpio_active_bit ,temp 
+6edd 7d20fe06 nsetflag true ,6 ,pdata 
+6ede 7920fe07 setflag true ,7 ,pdata 
+6edf 20206f09 branch gpio_write 
+
+gpio_get_bit:
+6ee0 44ff401f bpatch patch1f_6 ,mem_patch1f 
+6ee1 d8a0811c arg core_gpio_in ,contw 
+6ee2 18410e07 and temp ,0x07 ,queue 
+6ee3 18497e00 rshift3 temp ,pdata 
+6ee4 1fe17e03 and_into 3 ,pdata 
+6ee5 98a08a00 iadd contw ,contw 
+6ee6 efe08005 ifetch 1 ,contw 
+6ee7 284ffe07 isolate1 gpio_active_bit ,temp 
+6ee8 2020eeeb branch gpio_get_bit_reverse ,true 
+6ee9 afec0000 qisolate0 pdata 
+6eea 20600000 rtn 
+
+gpio_get_bit_reverse:
+6eeb afefffff qisolate1 pdata 
+6eec 20600000 rtn 
+
+gpio_out_inactive:
+6eed 18467cff sub temp ,ui_button_gpio_disable ,null 
+6eee 20628000 rtn zero 
+6eef 2fcffe07 isolate1 gpio_active_bit ,null 
+6ef0 20206ef4 branch gpio_out_flag 
+
+gpio_config_output:
+
+gpio_out_active:
+6ef1 18467cff sub temp ,ui_button_gpio_disable ,null 
+6ef2 20628000 rtn zero 
+6ef3 2fcc0007 isolate0 gpio_active_bit ,null 
+
+gpio_out_flag:
+6ef4 58000000 setarg 0 
+6ef5 7d20fe07 nsetflag true ,gpio_active_bit ,pdata 
+6ef6 98428400 ixor temp ,temp 
+
+gpio_out:
+6ef7 20406f10 call gpio_addr 
+6ef8 5800003f setarg gpcfg_output_high 
+6ef9 284ffe07 isolate1 gpio_active_bit ,temp 
+6efa 7920fe00 setflag true ,0 ,pdata 
+6efb 20206f09 branch gpio_write 
+
+gpio_check_active:
+6efc 18467cff sub temp ,ui_button_gpio_disable ,null 
+6efd 2022fdc6 branch disable_true ,zero 
+6efe 20406f10 call gpio_addr 
+6eff efe08005 ifetch 1 ,contw 
+6f00 c2806f03 bbit1 0 ,gpio_check_active_high 
+6f01 284c0007 isolate0 gpio_active_bit ,temp 
+6f02 20600000 rtn 
+
+gpio_check_active_high:
+6f03 284ffe07 isolate1 gpio_active_bit ,temp 
+6f04 20600000 rtn 
+
+gpio_set_analog:
+6f05 18467cff sub temp ,ui_button_gpio_disable ,null 
+6f06 20628000 rtn zero 
+6f07 20406f10 call gpio_addr 
+6f08 580000c0 setarg gpcfg_no_ie 
+
+gpio_write:
+6f09 e7e08005 istore 1 ,contw 
+6f0a 20600000 rtn 
+
+gpio_set_high_impedance:
+6f0b 18467cff sub temp ,ui_button_gpio_disable ,null 
+6f0c 20628000 rtn zero 
+6f0d 20406f10 call gpio_addr 
+6f0e 58000000 setarg gpcfg_high_impedance 
+6f0f 20206f09 branch gpio_write 
+
+gpio_addr:
+6f10 18417e3f and temp ,0x3f ,pdata 
+6f11 1fe67c0f sub pdata ,gpio_number + -1 ,null 
+6f12 24216f16 nbranch gpio_addr_ext ,positive 
+6f13 d8a08070 arg core_gpio_conf ,contw 
+
+gpio_addr_next:
+6f14 98a08a00 iadd contw ,contw 
+6f15 20600000 rtn 
+
+gpio_addr_ext:
+6f16 d8a080d4 arg core_gpio_conf_hi ,contw 
+6f17 1fe0fff0 increase -16 ,pdata 
+6f18 20206f14 branch gpio_addr_next 
+
+gpio_config_param:
+6f19 1fe104ff and pdata ,0xff ,temp 
+6f1a 1fecfe00 rshift8 pdata ,pdata 
+6f1b 20206f1d branch gpio_config_function_int 
+
+gpio_config_function:
+6f1c c4038000 rtnbit0 gpio_active_bit 
+
+gpio_config_function_int:
+6f1d c17f8000 rtneq gpio_disable 
+6f1e 1fe17e3f and_into 0x3f ,pdata 
+6f1f 1fe67c0f sub pdata ,gpio_number + -1 ,null 
+6f20 24216f25 nbranch gpio_config_function_int_ext ,positive 
+6f21 d8a08070 arg core_gpio_conf ,contw 
+
+gpio_config_function_int_next:
+6f22 98a08a00 iadd contw ,contw 
+6f23 e0408005 istoret 1 ,contw 
+6f24 20600000 rtn 
+
+gpio_config_function_int_ext:
+6f25 d8a080d4 arg core_gpio_conf_hi ,contw 
+6f26 1fe0fff0 increase -16 ,pdata 
+6f27 20206f22 branch gpio_config_function_int_next 
+
+gpio_get_config:
+6f28 1841043f and_into 0x3f ,temp 
+6f29 18467c0f sub temp ,gpio_number + -1 ,null 
+6f2a 24216f2f nbranch gpio_get_config_ext ,positive 
+6f2b 58008070 setarg core_gpio_conf 
+
+gpio_get_config_next:
+6f2c 98408c00 iadd temp ,contr 
+6f2d efe08006 ifetch 1 ,contr 
+6f2e 20600000 rtn 
+
+gpio_get_config_ext:
+6f2f 580080d4 setarg core_gpio_conf_hi 
+6f30 184085f0 increase -16 ,temp 
+6f31 20206f2c branch gpio_get_config_next 
+
+gpio_set_before_lpm:
+6f32 df200010 arg gpio_number ,loopcnt 
+6f33 d8c08070 arg core_gpio_conf ,contr 
+
+setgpio_loop:
+6f34 18c20a00 copy contr ,contw 
+6f35 efe08006 ifetch 1 ,contr 
+6f36 c00fef45 beq gpcfg_spid_miso ,setgpio_pullup 
+6f37 c0106f45 beq gpcfg_spid_ncs ,setgpio_pullup 
+6f38 c010ef45 beq gpcfg_spid_sck ,setgpio_pullup 
+6f39 c0116f45 beq gpcfg_spid_mosi ,setgpio_pullup 
+6f3a c011ef45 beq gpcfg_spid_sdio ,setgpio_pullup 
+6f3b c0166f45 beq gpcfg_iic_scl ,setgpio_pullup 
+6f3c c016ef45 beq gpcfg_iic_sda ,setgpio_pullup 
+6f3d c0006f45 beq gpcfg_input ,setgpio_pullup 
+
+setgpio_loop_end:
+6f3e c2006f34 loop setgpio_loop 
+6f3f dfe080dc arg core_gpio_conf_hi + gpio_number_ext ,pdata 
+6f40 98c67c00 isub contr ,null 
+6f41 20628000 rtn zero 
+
+gpio_set_before_lpm_ext:
+6f42 df200008 arg gpio_number_ext ,loopcnt 
+6f43 d8c080d4 arg core_gpio_conf_hi ,contr 
+6f44 20206f34 branch setgpio_loop 
+
+setgpio_pullup:
+6f45 58000040 setarg gpcfg_pullup 
+6f46 e7e08005 istore 1 ,contw 
+6f47 20206f3e branch setgpio_loop_end 
+
+setgpio_pulldown:
+6f48 58000080 setarg gpcfg_pulldown 
+6f49 e7e08005 istore 1 ,contw 
+6f4a 20206f3e branch setgpio_loop_end 
+
+lpm_puchk_set_check:
+6f4b 6fe0c88c fetch 1 ,mem_qdec_set_flag 
+6f4c 203a6f4e branch lpm_config_puchk_disable ,blank 
+6f4d 20206f51 branch lpm_config_puchk_enable 
+
+lpm_config_puchk_disable:
+6f4e 58000010 setarg 0x10 
+
+lpm_config_puchk_set:
+6f4f 67f08141 store 1 ,core_puwakeup 
+6f50 202023c4 branch lpm_write_wait 
+
+lpm_config_puchk_enable:
+6f51 58000080 setarg 0x80 
+6f52 20206f4f branch lpm_config_puchk_set 
+
+sadc_calibration:
+6f53 44ffc01f bpatch patch1f_7 ,mem_patch1f 
+6f54 20758000 rtn wake 
+6f55 708a0777 jam 0x77 ,core_gpadc_ctrl 
+6f56 708a08c9 jam 0xc9 ,core_gpadc_cfg0 
+6f57 708a0b01 jam 0x01 ,core_gpadc_cfg3 
+6f58 6fe0c41f fetch 1 ,mem_adc_clkdiv 
+6f59 67f080cd store 1 ,core_sadc_clkdiv 
+6f5a 7080cc03 jam 0x03 ,core_sadc_ctrl 
+6f5b 2040700e call sar_adc_read_wait 
+6f5c 68590164 fetcht 2 ,core_sadc_data 
+6f5d 7080cc00 jam 0x00 ,core_sadc_ctrl 
+6f5e 708a08c1 jam 0xc1 ,core_gpadc_cfg0 
+
+sadc_cal_read:
+6f5f df200008 arg 8 ,loopcnt 
+6f60 da204428 arg mem_adc_cal_c0 ,rega 
+6f61 708a0a05 jam 0x05 ,core_gpadc_cfg2 
+
+sadc_cal_read_loop:
+6f62 6ff08a0c fetch 1 ,core_gpadc_status 
+6f63 e7e08011 istore 1 ,rega 
+6f64 1a20a201 increase 1 ,rega 
+6f65 6ff08a0a fetch 1 ,core_gpadc_cfg2 
+6f66 1fe0fe20 increase 0x20 ,pdata 
+6f67 67f08a0a store 1 ,core_gpadc_cfg2 
+6f68 c2006f62 loop sadc_cal_read_loop 
+6f69 708a0700 jam 0x00 ,core_gpadc_ctrl 
+6f6a 20600000 rtn 
+
+sadc_cal_write:
+6f6b 6ff080cc fetch 1 ,core_sadc_ctrl 
+6f6c 79207e01 set1 1 ,pdata 
+6f6d 67f080cc store 1 ,core_sadc_ctrl 
+6f6e df200008 arg 8 ,loopcnt 
+6f6f da204428 arg mem_adc_cal_c0 ,rega 
+6f70 708a0a15 jam 0x15 ,core_gpadc_cfg2 
+
+sadc_cal_write_loop:
+6f71 efe08011 ifetch 1 ,rega 
+6f72 67f08a09 store 1 ,core_gpadc_cfg1 
+6f73 1a20a201 increase 1 ,rega 
+6f74 6ff08a0a fetch 1 ,core_gpadc_cfg2 
+6f75 1fe0fe20 increase 0x20 ,pdata 
+6f76 67f08a0a store 1 ,core_gpadc_cfg2 
+6f77 c2006f71 loop sadc_cal_write_loop 
+6f78 6ff080cc fetch 1 ,core_sadc_ctrl 
+6f79 793ffe01 set0 1 ,pdata 
+6f7a 67f080cc store 1 ,core_sadc_ctrl 
+6f7b 20600000 rtn 
+
+adc_init_data:
+6f7c 47004020 bpatchx patch20_0 ,mem_patch20 
+6f7d 6fe401db fetch 8 ,mem_otp_adc 
+6f7e 207a0000 rtn blank 
+6f7f 67e44406 store 8 ,mem_reference_inter1p8v_2v_adc_io_data 
+6f80 20406b28 call enable_otp_read 
+6f81 20406a67 call loadcode_check_otp_lock 
+6f82 dfe00fc0 arg otp_offset_adc_param_l_c0 ,pdata 
+6f83 9a40a400 iadd regb ,regb 
+6f84 df20000a arg 10 ,loopcnt 
+6f85 da2001db arg mem_otp_temp ,rega 
+6f86 20406b62 call otp_read_data 
+6f87 20406b25 call disable_otp 
+6f88 6fe401db fetch 8 ,mem_otp_temp 
+6f89 207a0000 rtn blank 
+6f8a 67e4440e store 8 ,mem_adc_reference3v_gpio1v_ft_data 
+6f8b efe10006 ifetch 2 ,contr 
+6f8c e7e10005 istore 2 ,contw 
+6f8d 20600000 rtn 
+
+vdd_calculate_by_mode:
+6f8e 4700c020 bpatchx patch20_1 ,mem_patch20 
+6f8f 6fe0c41a fetch 1 ,mem_adc_reference_mode 
+6f90 c000ef93 beq sadc_reference_inter3v ,vdd_reference_inter3v_calculate 
+6f91 c0016fd1 beq sadc_reference_inter1p8v_div2 ,vdd_reference_inter1p8v_calculate 
+6f92 20206f93 branch vdd_reference_inter3v_calculate 
+
+vdd_reference_inter3v_calculate:
+6f93 6fe0c41d fetch 1 ,mem_adc_config_flag 
+6f94 c000ef97 beq adc_config_hvin ,vdd_reference_inter3v_calculate_by_mode_vdcdc 
+6f95 c0016f9e beq adc_config_gpio ,vdd_reference_inter3v_calculate_by_mode_gpio 
+6f96 20600000 rtn 
+
+vdd_reference_inter3v_calculate_by_mode_vdcdc:
+6f97 580003e8 setarg 1000 
+6f98 67e1441b store 2 ,mem_reference_voltage 
+6f99 68494412 fetcht 2 ,mem_adc_reference3v_vdcdc3p6v_ft_data 
+6f9a 6fe14414 fetch 2 ,mem_adc_reference3v_vdcdc4p6v_ft_data 
+6f9b da600e10 arg 3600 ,regc 
+6f9c 2040702a call vdd_calculate 
+6f9d 20206fa4 branch mul1v_div1v_to_cal 
+
+vdd_reference_inter3v_calculate_by_mode_gpio:
+6f9e 580003e8 setarg 1000 
+6f9f 67e1441b store 2 ,mem_reference_voltage 
+6fa0 6849440e fetcht 2 ,mem_adc_reference3v_gpio1v_ft_data 
+6fa1 6fe14410 fetch 2 ,mem_adc_reference3v_gpio2v_ft_data 
+6fa2 da6003e8 arg 1000 ,regc 
+6fa3 2040702a call vdd_calculate 
+
+mul1v_div1v_to_cal:
+6fa4 68494416 fetcht 2 ,mem_adc_reference3v_inter1v_ft_data 
+6fa5 984ffe00 imul32 temp ,pdata 
+6fa6 68494418 fetcht 2 ,mem_adc_reference3v_inter1v_now_data 
+6fa7 9846fc00 idiv temp 
+6fa8 20207d61 branch get_div_result 
+
+enable_adc_init_config:
+6fa9 20406f6b call sadc_cal_write 
+6faa 6ff08a09 fetch 1 ,core_gpadc_cfg1 
+6fab 793ffe07 set0 7 ,pdata 
+6fac 67f08a09 store 1 ,core_gpadc_cfg1 
+6fad 708a0777 jam 0x77 ,core_gpadc_ctrl 
+6fae 708a08c1 jam 0xc1 ,core_gpadc_cfg0 
+6faf 708a0d61 jam 0x61 ,core_vtest_ctrl0 
+6fb0 708a0b00 jam 0x00 ,core_gpadc_cfg3 
+6fb1 20600000 rtn 
+
+enable_adc:
+6fb2 47014020 bpatchx patch20_2 ,mem_patch20 
+6fb3 6fe0c41a fetch 1 ,mem_adc_reference_mode 
+6fb4 c000efb7 beq sadc_reference_inter3v ,enable_adc_reference_source_inter3v 
+6fb5 c0016fee beq sadc_reference_inter1p8v_div2 ,enable_adc_reference_source_inter1p8v 
+6fb6 20206fb7 branch enable_adc_reference_source_inter3v 
+
+enable_adc_reference_source_inter3v:
+6fb7 20406fa9 call enable_adc_init_config 
+6fb8 20407007 call sadc_channel 
+6fb9 6fe0c41f fetch 1 ,mem_adc_clkdiv 
+6fba 67f080cd store 1 ,core_sadc_clkdiv 
+6fbb 20407011 call sadc_read 
+6fbc 708a0d60 jam 0x60 ,core_vtest_ctrl0 
+6fbd 7080cd00 jam 0x00 ,core_sadc_clkdiv 
+
+read_adc_inter1v:
+6fbe 20406fa9 call enable_adc_init_config 
+6fbf 6fe0c41f fetch 1 ,mem_adc_clkdiv 
+6fc0 67f080cd store 1 ,core_sadc_clkdiv 
+6fc1 708a0b50 jam 0x50 ,core_gpadc_cfg3 
+6fc2 708a0ec0 jam 0xc0 ,core_vtest_ctrl1 
+6fc3 df00000b arg 0xb ,regext_index 
+6fc4 6de14420 fetchr regext ,2 ,mem_adc_current_value 
+6fc5 7080cc03 jam 0x03 ,core_sadc_ctrl 
+6fc6 2040700e call sar_adc_read_wait 
+6fc7 68590164 fetcht 2 ,core_sadc_data 
+6fc8 60494418 storet 2 ,mem_adc_reference3v_inter1v_now_data 
+6fc9 7080cc06 jam 0x06 ,core_sadc_ctrl 
+6fca 20407017 call sadc_read_wait2 
+6fcb df00000b arg 0xb ,regext_index 
+6fcc 65e14420 storer regext ,2 ,mem_adc_current_value 
+6fcd 708a0d60 jam 0x60 ,core_vtest_ctrl0 
+6fce 7080cd00 jam 0x00 ,core_sadc_clkdiv 
+6fcf 7080cc00 jam 0x00 ,core_sadc_ctrl 
+6fd0 20600000 rtn 
+
+vdd_reference_inter1p8v_calculate:
+6fd1 6fe0c41d fetch 1 ,mem_adc_config_flag 
+6fd2 c000efd5 beq adc_config_hvin ,vdd_reference_inter1p8v_calculate_by_mode_vdcdc 
+6fd3 c0016fdb beq adc_config_gpio ,vdd_reference_inter1p8v_div2_calculate_by_mode_gpio 
+6fd4 20600000 rtn 
+
+vdd_reference_inter1p8v_calculate_by_mode_vdcdc:
+6fd5 580007d0 setarg 2000 
+6fd6 67e1441b store 2 ,mem_reference_voltage 
+6fd7 68494408 fetcht 2 ,mem_reference_inter1p8v_2p6v_adc_vdcdc_data 
+6fd8 6fe1440c fetch 2 ,mem_reference_inter1p8v_4p6v_adc_vdcdc_data 
+6fd9 da600a28 arg 2600 ,regc 
+6fda 2020702a branch vdd_calculate 
+
+vdd_reference_inter1p8v_div2_calculate_by_mode_gpio:
+6fdb 580003e8 setarg 1000 
+6fdc 67e1441b store 2 ,mem_reference_voltage 
+6fdd 68494406 fetcht 2 ,mem_reference_inter1p8v_2v_adc_io_data 
+6fde 6fe1440a fetch 2 ,mem_reference_inter1p8v_1v_adc_io_data 
+6fdf da6007d0 arg 2000 ,regc 
+
+vdd_calculate00:
+6fe0 98462200 isub temp ,rega 
+6fe1 6fe14420 fetch 2 ,mem_adc_current_value 
+6fe2 98467e00 isub temp ,pdata 
+6fe3 24216fe8 nbranch vdd_calculate11 ,positive 
+6fe4 20407039 call vdd_calculate_common 
+6fe5 9a467e00 isub regb ,pdata 
+6fe6 24217dcc nbranch set_pdata_0 ,positive 
+6fe7 20207030 branch vdd_calculate2 
+
+vdd_calculate11:
+6fe8 18427e00 copy temp ,pdata 
+6fe9 68494420 fetcht 2 ,mem_adc_current_value 
+6fea 98467e00 isub temp ,pdata 
+6feb 20407039 call vdd_calculate_common 
+6fec 9a40fe00 iadd regb ,pdata 
+6fed 20207030 branch vdd_calculate2 
+
+enable_adc_reference_source_inter1p8v:
+6fee 6fe0c41d fetch 1 ,mem_adc_config_flag 
+6fef c000eff8 beq adc_config_hvin ,enable_adc_reference_source_inter1p8v_vdcdc 
+
+enable_adc_reference_source_inter1p8v_div2_gpio:
+6ff0 20406f6b call sadc_cal_write 
+6ff1 6ff08a09 fetch 1 ,core_gpadc_cfg1 
+6ff2 793ffe07 set0 7 ,pdata 
+6ff3 67f08a09 store 1 ,core_gpadc_cfg1 
+6ff4 708a0777 jam 0x77 ,core_gpadc_ctrl 
+6ff5 708a0841 jam 0x41 ,core_gpadc_cfg0 
+6ff6 708ac614 jam 0x14 ,0x8ac6 
+6ff7 20206fff branch enable_adc_reference_source_inter1p8v_common 
+
+enable_adc_reference_source_inter1p8v_vdcdc:
+6ff8 20406f6b call sadc_cal_write 
+6ff9 6ff08a09 fetch 1 ,core_gpadc_cfg1 
+6ffa 793ffe07 set0 7 ,pdata 
+6ffb 67f08a09 store 1 ,core_gpadc_cfg1 
+6ffc 708a0777 jam 0x77 ,core_gpadc_ctrl 
+6ffd 708a0841 jam 0x41 ,core_gpadc_cfg0 
+6ffe 708ac610 jam 0x10 ,0x8ac6 
+
+enable_adc_reference_source_inter1p8v_common:
+6fff 708a0b00 jam 0x00 ,core_gpadc_cfg3 
+7000 20407007 call sadc_channel 
+7001 6fe0c41f fetch 1 ,mem_adc_clkdiv 
+7002 67f080cd store 1 ,core_sadc_clkdiv 
+7003 20407011 call sadc_read 
+7004 7080cd00 jam 0x00 ,core_sadc_clkdiv 
+7005 708ac600 jam 0x00 ,0x8ac6 
+7006 20600000 rtn 
+
+sadc_channel:
+7007 6fe0c41e fetch 1 ,mem_adc_channel 
+7008 1ff27e00 lshift4 pdata ,pdata 
+7009 68588a0b fetcht 1 ,core_gpadc_cfg3 
+700a 1841040f and_into 0x0f ,temp 
+700b 98418400 ior temp ,temp 
+700c 60588a0b storet 1 ,core_gpadc_cfg3 
+700d 20600000 rtn 
+
+sar_adc_read_wait:
+700e 6ff08129 fetch 1 ,core_perf_status 
+700f c302f00e bbit0 saradc_done ,sar_adc_read_wait 
+7010 20600000 rtn 
+
+sadc_read:
+7011 4701c020 bpatchx patch20_3 ,mem_patch20 
+7012 7080cc03 jam 0x03 ,core_sadc_ctrl 
+7013 2040700e call sar_adc_read_wait 
+7014 68590164 fetcht 2 ,core_sadc_data 
+7015 60494420 storet 2 ,mem_adc_current_value 
+7016 7080cc06 jam 0x06 ,core_sadc_ctrl 
+
+sadc_read_wait2:
+7017 6ff08129 fetch 1 ,core_perf_status 
+7018 c282f017 bbit1 saradc_done ,sadc_read_wait2 
+7019 7080cc00 jam 0x00 ,core_sadc_ctrl 
+701a 20600000 rtn 
+
+sadc_dma:
+701b 6fe0c427 fetch 1 ,mem_adc_dma_enable 
+701c 207a0000 rtn blank 
+701d 6ff08a09 fetch 1 ,core_gpadc_cfg1 
+701e 79207e07 set1 7 ,pdata 
+701f 67f08a09 store 1 ,core_gpadc_cfg1 
+7020 6fe0c41f fetch 1 ,mem_adc_clkdiv 
+7021 67f080cd store 1 ,core_sadc_clkdiv 
+7022 6fe14423 fetch 2 ,mem_adc_saddr_ptr 
+7023 67f100ce store 2 ,core_sadc_saddr 
+7024 6fe14425 fetch 2 ,mem_adc_eaddr_ptr 
+7025 67f100d0 store 2 ,core_sadc_eaddr 
+7026 7080cc0b jam 0x0b ,core_sadc_ctrl 
+7027 200003e8 nop 1000 
+7028 7080cc03 jam 0x03 ,core_sadc_ctrl 
+7029 20600000 rtn 
+
+vdd_calculate:
+702a 98462200 isub temp ,rega 
+702b 6fe14420 fetch 2 ,mem_adc_current_value 
+702c 98467e00 isub temp ,pdata 
+702d 24217032 nbranch vdd_calculate1 ,positive 
+702e 20407039 call vdd_calculate_common 
+702f 9a40fe00 iadd regb ,pdata 
+
+vdd_calculate2:
+7030 9a26fc00 idiv rega 
+7031 20207d61 branch get_div_result 
+
+vdd_calculate1:
+7032 18427e00 copy temp ,pdata 
+7033 68494420 fetcht 2 ,mem_adc_current_value 
+7034 98467e00 isub temp ,pdata 
+7035 20407039 call vdd_calculate_common 
+7036 9a467e00 isub regb ,pdata 
+7037 24217dcc nbranch set_pdata_0 ,positive 
+7038 20207030 branch vdd_calculate2 
+
+vdd_calculate_common:
+7039 6849441b fetcht 2 ,mem_reference_voltage 
+703a 984fa400 imul32 temp ,regb 
+703b 1a627e00 copy regc ,pdata 
+703c 9a2ffe00 imul32 rega ,pdata 
+703d 20600000 rtn 
+
+adc_bat_percent_lowpower_out:
+703e efe40011 ifetch 8 ,rega 
+703f 67e4064e store 8 ,mem_pdatatemp 
+7040 6fe1064e fetch 2 ,mem_pdatatemp 
+7041 68490650 fetcht 2 ,mem_pdatatemp + 2 
+7042 98462200 isub temp ,rega 
+7043 6fe10654 fetch 2 ,mem_pdatatemp + 6 
+7044 98462400 isub temp ,regb 
+7045 68490652 fetcht 2 ,mem_pdatatemp + 4 
+7046 98467c00 isub temp ,null 
+7047 2441704e ncall adc_set_low_power_flag ,positive 
+7048 1a4ffe64 mul32 regb ,100 ,pdata 
+7049 9a26fc00 idiv rega 
+704a 20407d64 call wait_div_end 
+704b 1807fe00 quotient pdata 
+704c 205a7054 call adc_set_no_power_flag ,blank 
+704d 20600000 rtn 
+
+adc_set_low_power_flag:
+704e 6fe0c422 fetch 1 ,mem_adc_power_flag 
+704f 79207e00 set1 0 ,pdata 
+7050 20207059 branch adc_set_power_flag 
+
+adc_clear_low_power_flag:
+7051 6fe0c422 fetch 1 ,mem_adc_power_flag 
+7052 793ffe00 set0 0 ,pdata 
+7053 20207059 branch adc_set_power_flag 
+
+adc_set_no_power_flag:
+7054 6848c422 fetcht 1 ,mem_adc_power_flag 
+7055 79200401 set1 1 ,temp 
+7056 20207059 branch adc_set_power_flag 
+
+adc_clear_no_power_flag:
+7057 6848c422 fetcht 1 ,mem_adc_power_flag 
+7058 793f8401 set0 1 ,temp 
+
+adc_set_power_flag:
+7059 6048c422 storet 1 ,mem_adc_power_flag 
+705a 20600000 rtn 
+
+keyscan_key_init:
+705b 6fe14443 fetch 2 ,mem_key_num_ptr 
+705c efe0803f ifetch 1 ,pdata 
+
+keyscan_key_init_next:
+705d 207a0000 rtn blank 
+705e 1fe27200 copy pdata ,loopcnt 
+705f 6fe14443 fetch 2 ,mem_keyscan_ptr 
+7060 1fe0fe03 increase 3 ,pdata 
+7061 1fe22200 copy pdata ,rega 
+
+keyscan_key_init_lp1:
+7062 e8408011 ifetcht 1 ,rega 
+7063 20406ed7 call gpio_config_input 
+7064 1a20a201 increase key_conf_struct_len ,rega 
+7065 c2007062 loop keyscan_key_init_lp1 
+
+keyscan_key_init_end:
+7066 20600000 rtn 
+
+keyscan_scan_key:
+7067 6fe14443 fetch 2 ,mem_keyscan_ptr 
+7068 1fe0fe03 increase 3 ,pdata 
+7069 1fe22200 copy pdata ,rega 
+706a 18002400 force 0 ,regb 
+706b 58000000 setarg 0 
+706c 67e106cf store 2 ,mem_key_value_temp 
+
+keyscan_scan_key_lp1:
+706d e8408011 ifetcht 1 ,rega 
+706e 20406ee0 call gpio_get_bit 
+706f 47024020 bpatchx patch20_4 ,mem_patch20 
+7070 6fe106cf fetch 2 ,mem_key_value_temp 
+7071 1a420e00 copy regb ,queue 
+7072 f920fe00 qsetflag true ,pdata 
+7073 67e106cf store 2 ,mem_key_value_temp 
+7074 1a20a201 increase key_conf_struct_len ,rega 
+7075 1a40a401 increase 1 ,regb 
+7076 6fe14443 fetch 2 ,mem_key_num_ptr 
+7077 efe0803f ifetch 1 ,pdata 
+
+keyscan_scan_key_lp1_next:
+7078 9a42fc00 ixor regb ,null 
+7079 2422f06d nbranch keyscan_scan_key_lp1 ,zero 
+707a 6fe106cf fetch 2 ,mem_key_value_temp 
+707b 68494445 fetcht 2 ,mem_key_value_retention 
+707c 9842fc00 ixor temp ,null 
+707d 20628000 rtn zero 
+707e 20207dbc branch enable_user 
+
+keyscan_process_lpm_before:
+707f 6fe14443 fetch 2 ,mem_key_num_ptr 
+7080 efe0803f ifetch 1 ,pdata 
+
+keyscan_process_lpm_before_next:
+7081 207a0000 rtn blank 
+7082 1fe27200 copy pdata ,loopcnt 
+7083 6fe14443 fetch 2 ,mem_keyscan_ptr 
+7084 1fe0fe03 increase 3 ,pdata 
+7085 1fe22200 copy pdata ,rega 
+
+keyscan_process_lpm_before_lp1:
+7086 e8408011 ifetcht 1 ,rega 
+7087 20406ea5 call gpio_set_wake_by_current_state 
+7088 1a20a201 increase key_conf_struct_len ,rega 
+7089 c2007086 loop keyscan_process_lpm_before_lp1 
+
+keyscan_process_lpm_before_end:
+708a 20600000 rtn 
+
+keyscan_key_process:
+708b d8e00009 arg key_scan_timer ,queue 
+708c 20407cf1 call timer_check 
+708d 247a0000 nrtn blank 
+708e 58000020 setarg 0x20 
+708f d8e00009 arg key_scan_timer ,queue 
+7090 20407ce3 call timer_init 
+7091 78547c00 disable user 
+7092 2040707f call keyscan_process_lpm_before 
+7093 4702c020 bpatchx patch20_5 ,mem_patch20 
+7094 6fe14443 fetch 2 ,mem_key_num_ptr 
+7095 efe0803f ifetch 1 ,pdata 
+
+keyscan_key_process_next:
+7096 207a0000 rtn blank 
+7097 20407067 call keyscan_scan_key 
+7098 24347793 nbranch lpm_button_clean_wake_lock ,user 
+7099 20407791 call lpm_button_get_wake_lock 
+709a 78547c00 disable user 
+709b 6fe106cf fetch 2 ,mem_key_value_temp 
+709c 67e106d6 store 2 ,mem_key_value_temp4 
+709d 7006d800 jam 0 ,mem_key_value_temp6 
+709e 18000e00 force 0 ,queue 
+
+keyscan_key_lp1:
+709f 6fe14445 fetch 2 ,mem_key_value_retention 
+70a0 1fe30400 rshift pdata ,temp 
+70a1 60494445 storet 2 ,mem_key_value_retention 
+70a2 1fe17e01 and pdata ,0x01 ,pdata 
+70a3 684906d6 fetcht 2 ,mem_key_value_temp4 
+70a4 18412201 and temp ,0x01 ,rega 
+70a5 18430400 rshift temp ,temp 
+70a6 604906d6 storet 2 ,mem_key_value_temp4 
+70a7 9a22fc00 ixor rega ,null 
+70a8 2442f0b4 ncall keyscan_send_key_data ,zero 
+70a9 6fe14443 fetch 2 ,mem_key_num_ptr 
+70aa efe0803f ifetch 1 ,pdata 
+
+keyscan_key_lp1_next:
+70ab 684886d8 fetcht 1 ,mem_key_value_temp6 
+70ac 18408401 increase 1 ,temp 
+70ad 604886d8 storet 1 ,mem_key_value_temp6 
+70ae 18420e00 copy temp ,queue 
+70af 98e2fc00 ixor queue ,null 
+70b0 2422f09f nbranch keyscan_key_lp1 ,zero 
+70b1 6fe106cf fetch 2 ,mem_key_value_temp 
+70b2 67e14445 store 2 ,mem_key_value_retention 
+70b3 20600000 rtn 
+
+keyscan_send_key_data:
+70b4 47034020 bpatchx patch20_6 ,mem_patch20 
+70b5 6fe14443 fetch 2 ,mem_keyscan_ptr 
+70b6 1fe0fe01 increase 1 ,pdata 
+70b7 efe1003f ifetch 2 ,pdata 
+70b8 20207d7b branch callback_func 
+
+pwm_init:
+70b9 6ff08042 fetch 1 ,core_clksel 
+70ba 9a21fe00 ior rega ,pdata 
+70bb 67f08042 store 1 ,core_clksel 
+70bc 6ff10050 fetch 2 ,core_clkoff 
+70bd 793ffe0d set0 clock_off_pwm ,pdata 
+70be 67f10050 store 2 ,core_clkoff 
+
+delay_nop100:
+70bf 20000064 nop 100 
+70c0 20600000 rtn 
+
+pwm_clk_set:
+70c1 6ff08042 fetch 1 ,core_clksel 
+70c2 c28370c6 bbit1 6 ,pwm_24m_clk_set 
+70c3 c283f0c8 bbit1 7 ,pwm_33k_clk_set 
+
+pwm_12m_clk_set:
+70c4 58b71b00 setarg pwm_12mhz 
+70c5 20600000 rtn 
+
+pwm_24m_clk_set:
+70c6 596e3600 setarg pwm_24mhz 
+70c7 20600000 rtn 
+
+pwm_33k_clk_set:
+70c8 580080e8 setarg pwm_33khz 
+70c9 20600000 rtn 
+
+pwm_out_set:
+70ca 68498650 fetcht 3 ,mem_pdatatemp + 2 
+70cb 204070c1 call pwm_clk_set 
+70cc 9846fc00 idiv temp 
+70cd 20407d64 call wait_div_end 
+70ce 18078400 quotient temp 
+70cf 6fe08653 fetch 1 ,mem_pdatatemp + 5 
+70d0 984ffe00 imul32 temp ,pdata 
+70d1 1fe6fc64 div pdata ,100 
+70d2 20407d64 call wait_div_end 
+70d3 1807a200 quotient rega 
+70d4 18427e00 copy temp ,pdata 
+70d5 9a262400 isub rega ,regb 
+70d6 6fe0864f fetch 1 ,mem_pdatatemp + 1 
+70d7 204070de call pwm_duty_cycle_set 
+70d8 6fe0864e fetch 1 ,mem_pdatatemp 
+70d9 6848864f fetcht 1 ,mem_pdatatemp + 1 
+70da 1841040f and_into 0x0f ,temp 
+70db 184d0400 lshift8 temp ,temp 
+70dc 9841fe00 ior temp ,pdata 
+70dd 20207100 branch pwm_enable 
+
+pwm_duty_cycle_set:
+70de 98000e00 iforce queue 
+70df 204070ec call pwm_duty_cycle_set_without_autoload 
+70e0 202070e1 branch pwm_autoload_set 
+
+pwm_autoload_set:
+70e1 6ff080be fetch 1 ,core_pwm_autoload 
+70e2 f9207e00 qset1 pdata 
+70e3 67f080be store 1 ,core_pwm_autoload 
+70e4 68588042 fetcht 1 ,core_clksel 
+70e5 284ffe07 isolate1 7 ,temp 
+70e6 2040f0ea call delay_1clk_of_33k ,true 
+70e7 f93ffe00 qset0 pdata 
+70e8 67f080be store 1 ,core_pwm_autoload 
+70e9 20600000 rtn 
+
+delay_1clk_of_33k:
+70ea 200001e0 nop 480 
+70eb 20600000 rtn 
+
+pwm_duty_cycle_set_without_autoload:
+70ec 1fe17e0f and_into 0x0f ,pdata 
+70ed d8a0809c arg core_pwm_pcnt0 ,contw 
+70ee 1feffe04 mul32 pdata ,4 ,pdata 
+70ef 98a08a00 iadd contw ,contw 
+70f0 1a227e00 copy rega ,pdata 
+70f1 e7e10005 istore 2 ,contw 
+70f2 1a427e00 copy regb ,pdata 
+70f3 e7e10005 istore 2 ,contw 
+70f4 20600000 rtn 
+
+pwm_init_bit_set:
+70f5 28effe06 isolate1 6 ,queue 
+
+pwm_init_bit_set_process:
+70f6 18e10e0f and queue ,0x0f ,queue 
+70f7 6ff0809b fetch 1 ,core_pwm_init 
+70f8 f920fe00 qsetflag true ,pdata 
+70f9 67f0809b store 1 ,core_pwm_init 
+70fa 20600000 rtn 
+
+pwm_gpio_select:
+70fb 2040710b call pwm_select_channel 
+
+pwm_gpio_select_process:
+70fc 1fed7e00 lshift8 pdata ,pdata 
+70fd 18e08410 add queue ,gpcfg_pwm_out0 ,temp 
+70fe 9841fe00 ior temp ,pdata 
+70ff 20206f19 branch gpio_config_param 
+
+pwm_enable:
+7100 78347c00 enable user 
+7101 204070fb call pwm_gpio_select 
+7102 20207106 branch pwm_set_select 
+
+pwm_disable:
+7103 78547c00 disable user 
+7104 2040710b call pwm_select_channel 
+7105 20207106 branch pwm_set_select 
+
+pwm_set_select:
+7106 18e10e0f and queue ,0x0f ,queue 
+7107 6ff0809a fetch 1 ,core_pwm_en 
+7108 f9347e00 qsetflag user ,pdata 
+7109 67f0809a store 1 ,core_pwm_en 
+710a 20600000 rtn 
+
+pwm_select_channel:
+710b 1fec8e00 rshift8 pdata ,queue 
+710c 18e10e0f and queue ,0x0f ,queue 
+710d 20600000 rtn 
+
+wdt_init_config:
+710e 1fe20400 copy pdata ,temp 
+710f 4703c020 bpatchx patch20_7 ,mem_patch20 
+7110 2040711b call wdt_set_enable 
+7111 58000800 setarg 2048 
+7112 98467e00 isub temp ,pdata 
+7113 1fe20400 copy pdata ,temp 
+7114 18518400 rshift4 temp ,temp 
+7115 60588004 storet 1 ,core_write_wdt 
+7116 20000578 nop 1400 
+7117 1fe20400 copy pdata ,temp 
+7118 1841040f and_into 0x0f ,temp 
+7119 6058800b storet 1 ,core_write_wdt2 
+711a 20600000 rtn 
+
+wdt_set_enable:
+711b 78367c00 enable user2 
+711c 2020711f branch wdt_init_set 
+
+wdt_set_disable:
+711d 47044021 bpatchx patch21_0 ,mem_patch21 
+711e 78567c00 disable user2 
+
+wdt_init_set:
+711f 6ff08043 fetch 1 ,core_config 
+7120 79367e03 setflag user2 ,3 ,pdata 
+7121 67f08043 store 1 ,core_config 
+7122 20600000 rtn 
+
+nec_init_config:
+7123 67f20062 store 4 ,core_nec_start_addr 
+7124 67f10066 store 2 ,core_nec_rptr 
+7125 60588061 storet 1 ,core_nec_ctrl 
+7126 20600000 rtn 
+
+select_system_clk_12m_xtal:
+7127 70804204 jam clksel_xtal ,core_clksel 
+
+select_system_clk_12m_common:
+7128 7041480c jam system_clk_12m ,mem_system_clk 
+7129 58000ea5 setarg 3749 
+712a 67f10040 store 2 ,core_halfslot 
+712b 20600000 rtn 
+
+select_system_clk_12m_dpll:
+712c 70804205 jam clksel_dpll ,core_clksel 
+712d 20207128 branch select_system_clk_12m_common 
+
+function_g2:
+712e 4704c021 bpatchx patch21_1 ,mem_patch21 
+712f 70020e50 jam 80 ,mem_aes_cmac_data_length 
+7130 d8a0020f arg mem_dat ,contw 
+7131 d8c042ad arg mem_le_srand ,contr 
+7132 20407c91 call memcpy16 
+7133 d8c044a6 arg mem_sc_pubkey_local_x_256 ,contr 
+7134 20407c8f call memcpy32 
+7135 d8c005dc arg mem_le_pubkey_remote_x_256 ,contr 
+7136 20407c8f call memcpy32 
+7137 204071e9 call inverse_memdat 
+7138 d8c00158 arg mem_le_mrand ,contr 
+7139 204071e4 call store_inverse_k 
+713a 204071af call function_aes_cmac 
+713b d8a006af arg mem_aes_cmac_temp ,contw 
+713c 204071e0 call load_inverse_result 
+713d 580f4240 setarg 1000000 
+713e 1fe22200 copy pdata ,rega 
+713f 6fe206af fetch 4 ,mem_aes_cmac_temp 
+7140 9a26fc00 idiv rega 
+7141 20407d64 call wait_div_end 
+7142 18077e00 remainder pdata 
+7143 67e205d8 store 4 ,mem_gkey 
+7144 20600000 rtn 
+
+function_f6_eb:
+7145 70020e41 jam 65 ,mem_aes_cmac_data_length 
+7146 d8a0020f arg mem_dat ,contw 
+7147 20407194 call store_addr_common_a 
+7148 2040718f call store_addr_common_b 
+7149 6fe1c2c7 fetch 3 ,mem_le_pres + 1 
+714a e7e18005 istore 3 ,contw 
+714b 20407155 call get_r 
+714c d8c00158 arg mem_le_mrand ,contr 
+714d 20407c91 call memcpy16 
+714e d8c042ad arg mem_le_srand ,contr 
+714f 20407c91 call memcpy16 
+7150 204071e9 call inverse_memdat 
+7151 d8c006cf arg mem_le_mackey ,contr 
+7152 d8a0067f arg mem_aes_cmac_k ,contw 
+7153 20407c91 call memcpy16 
+7154 202071af branch function_aes_cmac 
+
+get_r:
+7155 6fe24301 fetch 4 ,mem_le_tk 
+7156 e7e20005 istore 4 ,contw 
+7157 20407c9d call memset0_4 
+7158 20207c9c branch memset0_8 
+
+function_f6_ea:
+7159 47054021 bpatchx patch21_2 ,mem_patch21 
+715a 70020e41 jam 65 ,mem_aes_cmac_data_length 
+715b d8a0020f arg mem_dat ,contw 
+715c 2040718f call store_addr_common_b 
+715d 20407194 call store_addr_common_a 
+715e 6fe1c2c0 fetch 3 ,mem_le_preq + 1 
+715f e7e18005 istore 3 ,contw 
+7160 20407155 call get_r 
+7161 d8c042ad arg mem_le_srand ,contr 
+7162 20407c91 call memcpy16 
+7163 d8c00158 arg mem_le_mrand ,contr 
+7164 20407c91 call memcpy16 
+7165 204071e9 call inverse_memdat 
+7166 d8c006cf arg mem_le_mackey ,contr 
+7167 d8a0067f arg mem_aes_cmac_k ,contw 
+7168 20407c91 call memcpy16 
+7169 204071af call function_aes_cmac 
+716a d8a006af arg mem_aes_cmac_temp ,contw 
+716b 202071e0 branch load_inverse_result 
+
+function_f5:
+716c 70020e20 jam 32 ,mem_aes_cmac_data_length 
+716d d8c0061c arg mem_le_dhkey_256 ,contr 
+716e d8a0020f arg mem_dat ,contw 
+716f 20407c8f call memcpy32 
+7170 204071e9 call inverse_memdat 
+7171 d8c005c7 arg mem_le_slat ,contr 
+7172 204071e4 call store_inverse_k 
+7173 204071af call function_aes_cmac 
+7174 d8a0067f arg mem_aes_cmac_k ,contw 
+7175 20407363 call store_aes_result 
+7176 d8400001 arg 1 ,temp 
+7177 2040717e call function_f5_common 
+7178 d8a0428c arg mem_le_ltk ,contw 
+7179 204071e0 call load_inverse_result 
+717a d8400000 arg 0 ,temp 
+717b 2040717e call function_f5_common 
+717c d8a006cf arg mem_le_mackey ,contw 
+717d 20207363 branch store_aes_result 
+
+function_f5_common:
+717e 4705c021 bpatchx patch21_3 ,mem_patch21 
+717f 70020e35 jam 53 ,mem_aes_cmac_data_length 
+7180 58000100 setarg 0x100 
+7181 67e1020f store 2 ,mem_dat 
+7182 2040718f call store_addr_common_b 
+7183 20407194 call store_addr_common_a 
+7184 d8c042ad arg mem_le_srand ,contr 
+7185 20407c91 call memcpy16 
+7186 d8c00158 arg mem_le_mrand ,contr 
+7187 20407c91 call memcpy16 
+7188 58006c65 setarg 0x6c65 
+7189 e7e10005 istore 2 ,contw 
+718a 58006274 setarg 0x6274 
+718b e7e10005 istore 2 ,contw 
+718c e0408005 istoret 1 ,contw 
+718d 204071e9 call inverse_memdat 
+718e 202071af branch function_aes_cmac 
+
+store_addr_common_b:
+718f 6fe342dd fetch 6 ,mem_le_lap 
+7190 e7e30005 istore 6 ,contw 
+7191 6fe0c2d4 fetch 1 ,mem_le_conn_own_addr_type 
+7192 e7e08005 istore 1 ,contw 
+7193 20600000 rtn 
+
+store_addr_common_a:
+7194 6fe30178 fetch 6 ,mem_le_plap 
+7195 e7e30005 istore 6 ,contw 
+7196 6fe0c2cd fetch 1 ,mem_le_conn_peer_addr_type 
+7197 e7e08005 istore 1 ,contw 
+7198 20600000 rtn 
+
+function_f4_ca:
+7199 70020e41 jam 65 ,mem_aes_cmac_data_length 
+719a 6fe0c4e7 fetch 1 ,mem_passkey_1bit 
+719b 67e0820f store 1 ,mem_dat 
+719c d8c044a6 arg mem_sc_pubkey_local_x_256 ,contr 
+719d 20407c8f call memcpy32 
+719e d8c005dc arg mem_le_pubkey_remote_x_256 ,contr 
+719f 20407c8f call memcpy32 
+71a0 204071e9 call inverse_memdat 
+71a1 d8c00158 arg mem_le_mrand ,contr 
+71a2 204071e4 call store_inverse_k 
+71a3 202071af branch function_aes_cmac 
+
+function_f4_cb:
+71a4 70020e41 jam 65 ,mem_aes_cmac_data_length 
+71a5 6fe0c4e7 fetch 1 ,mem_passkey_1bit 
+71a6 67e0820f store 1 ,mem_dat 
+71a7 d8c005dc arg mem_le_pubkey_remote_x_256 ,contr 
+71a8 20407c8f call memcpy32 
+71a9 d8c044a6 arg mem_sc_pubkey_local_x_256 ,contr 
+71aa 20407c8f call memcpy32 
+71ab 204071e9 call inverse_memdat 
+71ac d8c042ad arg mem_le_srand ,contr 
+71ad 204071e4 call store_inverse_k 
+71ae 202071af branch function_aes_cmac 
+
+function_aes_cmac:
+71af 47064021 bpatchx patch21_4 ,mem_patch21 
+71b0 204071fe call function_aes_cmac_generate_subkey 
+71b1 6fe0820e fetch 1 ,mem_aes_cmac_data_length 
+71b2 1fe20400 copy pdata ,temp 
+
+function_ceil16:
+71b3 1fe0fe0f increase 15 ,pdata 
+71b4 1ff1fe00 rshift4 pdata ,pdata 
+71b5 1fe22400 copy pdata ,regb 
+71b6 203a71c1 branch function_aes_cmac_set_flag_0_balnk ,blank 
+71b7 18417e0f and temp ,0x0f ,pdata 
+71b8 243a71c4 nbranch function_aes_cmac_set_flag_0 ,blank 
+71b9 da60068f arg mem_aes_cmac_k1 ,regc 
+71ba dfe0020f arg mem_dat ,pdata 
+71bb 1fe0fff0 increase -16 ,pdata 
+71bc 9840a200 iadd temp ,rega 
+71bd d8a006bf arg mem_aes_cmac_m_last ,contw 
+71be df200004 arg 4 ,loopcnt 
+71bf 20407cab call xor_loop 
+71c0 202071cf branch function_aes_cmac_aes 
+
+function_aes_cmac_set_flag_0_balnk:
+71c1 da400001 arg 1 ,regb 
+71c2 da200000 arg 0 ,rega 
+71c3 202071c5 branch function_aes_cmac_set_flag_0_common 
+
+function_aes_cmac_set_flag_0:
+71c4 1841220f and temp ,0x0f ,rega 
+
+function_aes_cmac_set_flag_0_common:
+71c5 dfe0020f arg mem_dat ,pdata 
+71c6 9840fe00 iadd temp ,pdata 
+71c7 9a260c00 isub rega ,contr 
+71c8 d8a006af arg mem_aes_cmac_temp ,contw 
+71c9 20407224 call function_aes_cmac_padding 
+71ca da60069f arg mem_aes_cmac_k2 ,regc 
+71cb da2006af arg mem_aes_cmac_temp ,rega 
+71cc d8a006bf arg mem_aes_cmac_m_last ,contw 
+71cd df200004 arg 4 ,loopcnt 
+71ce 20407cab call xor_loop 
+
+function_aes_cmac_aes:
+71cf 2040735d call aes_clear_data 
+71d0 204072c8 call aes_init 
+71d1 d8c0020f arg mem_dat ,contr 
+
+function_aes_cmac_aes_loop:
+71d2 1a40a5ff increase -1 ,regb 
+71d3 1a427e00 deposit regb 
+71d4 203a71d8 branch function_aes_cmac_aes_loop_end ,blank 
+71d5 2040734f call load_data128 
+71d6 204072c2 call do_aes_cbc 
+71d7 202071d2 branch function_aes_cmac_aes_loop 
+
+function_aes_cmac_aes_loop_end:
+71d8 d8a006af arg mem_aes_cmac_temp ,contw 
+71d9 20407363 call store_aes_result 
+71da d8c006bf arg mem_aes_cmac_m_last ,contr 
+71db 2040734f call load_data128 
+71dc 204072c8 call aes_init 
+71dd d8c006af arg mem_aes_cmac_temp ,contr 
+71de 2040734f call load_data128 
+71df 202072c2 branch do_aes_cbc 
+
+load_inverse_result:
+71e0 18a22200 copy contw ,rega 
+71e1 20407363 call store_aes_result 
+71e2 df200010 arg 16 ,loopcnt 
+71e3 20207cb3 branch inverse_data 
+
+store_inverse_k:
+71e4 d8a0067f arg mem_aes_cmac_k ,contw 
+71e5 20407c91 call memcpy16 
+
+inverse_k:
+71e6 df200010 arg 16 ,loopcnt 
+71e7 da20067f arg mem_aes_cmac_k ,rega 
+71e8 20207cb3 branch inverse_data 
+
+inverse_memdat:
+71e9 6fe0820e fetch 1 ,mem_aes_cmac_data_length 
+71ea 1fe27200 copy pdata ,loopcnt 
+71eb da20020f arg mem_dat ,rega 
+71ec 20207cb3 branch inverse_data 
+
+bn_lshift_0_inverse:
+71ed efe08011 ifetch 1 ,rega 
+71ee 1fe3fe00 lshift pdata ,pdata 
+71ef 2a6ffe00 isolate1 0 ,regc 
+71f0 7920fe00 setflag true ,0 ,pdata 
+71f1 2feffe08 isolate1 8 ,pdata 
+71f2 7920a600 setflag true ,0 ,regc 
+71f3 e7e08011 istore 1 ,rega 
+71f4 1a20a3ff increase -1 ,rega 
+71f5 c20071ed loop bn_lshift_0_inverse 
+71f6 20600000 rtn 
+
+function_aes_cmac_k1_inverse:
+71f7 da20068f arg mem_aes_cmac_k1 ,rega 
+
+function_aes_cmac_inverse_common:
+71f8 1a20a20f increase 15 ,rega 
+71f9 18007210 force 16 ,loopcnt 
+71fa 18002600 force 0 ,regc 
+71fb 202071ed branch bn_lshift_0_inverse 
+
+function_aes_cmac_k2_inverse:
+71fc da20069f arg mem_aes_cmac_k2 ,rega 
+71fd 202071f8 branch function_aes_cmac_inverse_common 
+
+function_aes_cmac_generate_subkey:
+71fe d8c0067f arg mem_aes_cmac_k ,contr 
+71ff 2040734d call load_key 
+7200 18007008 force regidx_xor ,regext_index 
+7201 2040735e call aes_clear 
+7202 2040735d call aes_clear_data 
+7203 204072bf call do_aes_ocb 
+7204 d8a0068f arg mem_aes_cmac_k1 ,contw 
+7205 20407363 call store_aes_result 
+
+function_aes_cmac_k1:
+7206 4706c021 bpatchx patch21_5 ,mem_patch21 
+7207 6fe0868f fetch 1 ,mem_aes_cmac_k1 
+7208 2feffe07 isolate1 7 ,pdata 
+7209 2420f20f nbranch function_aes_cmac_k1_0 ,true 
+720a 204071f7 call function_aes_cmac_k1_inverse 
+720b da60068f arg mem_aes_cmac_k1 ,regc 
+720c d8a0068f arg mem_aes_cmac_k1 ,contw 
+720d 20407219 call function_aes_cmac_xor_rb 
+720e 20207210 branch function_aes_cmac_k2 
+
+function_aes_cmac_k1_0:
+720f 204071f7 call function_aes_cmac_k1_inverse 
+
+function_aes_cmac_k2:
+7210 d8c0068f arg mem_aes_cmac_k1 ,contr 
+7211 d8a0069f arg mem_aes_cmac_k2 ,contw 
+7212 20407c91 call memcpy16 
+7213 6fe0869f fetch 1 ,mem_aes_cmac_k2 
+7214 2feffe07 isolate1 7 ,pdata 
+7215 2420f1fc nbranch function_aes_cmac_k2_inverse ,true 
+7216 204071fc call function_aes_cmac_k2_inverse 
+7217 da60069f arg mem_aes_cmac_k2 ,regc 
+7218 d8a0069f arg mem_aes_cmac_k2 ,contw 
+
+function_aes_cmac_xor_rb:
+7219 df200003 arg 3 ,loopcnt 
+
+function_aes_cmac_xor_rb_loop:
+721a d8400000 arg 0 ,temp 
+721b 20407220 call function_aes_cmac_xor_loop_common 
+721c 1a60a604 increase 4 ,regc 
+721d c200721a loop function_aes_cmac_xor_rb_loop 
+721e d8408700 arg 0x8700 ,temp 
+721f 18500400 lshift16 temp ,temp 
+
+function_aes_cmac_xor_loop_common:
+7220 efe20013 ifetch 4 ,regc 
+7221 9842fe00 ixor temp ,pdata 
+7222 e7e20005 istore 4 ,contw 
+7223 20600000 rtn 
+
+function_aes_cmac_padding:
+7224 47074021 bpatchx patch21_6 ,mem_patch21 
+7225 df200010 arg 16 ,loopcnt 
+7226 dfe00000 arg 0 ,pdata 
+
+function_aes_cmac_padding_loop:
+7227 9a267c00 isub rega ,null 
+7228 2022f22f branch function_aes_cmac_padding_beq_length ,zero 
+7229 20217232 branch function_aes_cmac_padding_big_length ,positive 
+722a e8408006 ifetcht 1 ,contr 
+722b e0408005 istoret 1 ,contw 
+
+function_aes_cmac_padding_loop2:
+722c 1fe0fe01 increase 1 ,pdata 
+722d c2007227 loop function_aes_cmac_padding_loop 
+722e 20600000 rtn 
+
+function_aes_cmac_padding_beq_length:
+722f d8400080 arg 0x80 ,temp 
+
+function_aes_cmac_padding_common:
+7230 e0408005 istoret 1 ,contw 
+7231 2020722c branch function_aes_cmac_padding_loop2 
+
+function_aes_cmac_padding_big_length:
+7232 d8400000 arg 0 ,temp 
+7233 20207230 branch function_aes_cmac_padding_common 
+
+concatenate_temp24:
+7234 184d0400 lshift8 temp ,temp 
+
+concatenate_temp16:
+7235 18500400 lshift16 temp ,temp 
+7236 98418400 ior temp ,temp 
+7237 20600000 rtn 
+
+generate_stk:
+7238 4707c021 bpatchx patch21_7 ,mem_patch21 
+7239 204072f4 call function_s1 
+723a d8a0428c arg mem_le_ltk ,contw 
+723b 20207363 branch store_aes_result 
+
+authenticate_rconfirm:
+723c d8a042ad arg mem_le_srand ,contw 
+723d 2034f23f branch authenticate_mconfirm ,master 
+723e d8a00158 arg mem_le_mrand ,contw 
+
+authenticate_mconfirm:
+723f 18c22200 copy contr ,rega 
+7240 20407c91 call memcpy16 
+7241 20407309 call function_c1 
+7242 d8c0429d arg mem_le_rconfirm ,contr 
+7243 2020737c branch compare_res 
+
+generate_confirm:
+7244 da200158 arg mem_le_mrand ,rega 
+7245 2034f247 branch generate_mrand ,master 
+7246 da2042ad arg mem_le_srand ,rega 
+
+generate_mrand:
+7247 1a220a00 copy rega ,contw 
+7248 20407ded call generate_random 
+7249 20207309 branch function_c1 
+
+generate_sk:
+724a d8c042e7 arg mem_le_skdm ,contr 
+724b 2040734f call load_data128 
+724c d8c0428c arg mem_le_ltk ,contr 
+724d 20407350 call load_regext 
+724e 18006c38 force 0x38 ,aes_ctrl 
+724f 18006c00 force 0x0 ,aes_ctrl 
+7250 204072bd call wait_aes 
+7251 d8a001a8 arg mem_le_sk ,contw 
+7252 20207363 branch store_aes_result 
+
+ccm_b0:
+7253 18007008 force regidx_xor ,regext_index 
+7254 18007e49 force 0x49 ,pdata 
+7255 2020725a branch iv_common 
+
+first_block_counter:
+7256 18007e49 force 0x49 ,pdata 
+7257 20207259 branch first_block 
+
+first_block_data:
+7258 18007e01 force 1 ,pdata 
+
+first_block:
+7259 18007000 force regidx_data ,regext_index 
+
+iv_common:
+725a 184d5e00 lshift8 temp ,regext 
+725b 9de1de00 ior regext ,regext 
+725c 1f00f001 increase 1 ,regext_index 
+725d 184cde00 rshift8 temp ,regext 
+725e 1df15e00 rshift16 regext ,regext 
+725f 6fe14475 fetch 2 ,mem_ccm_iv 
+7260 1ff07e00 lshift16 pdata ,pdata 
+7261 9de1de00 ior regext ,regext 
+7262 1f00f001 increase 1 ,regext_index 
+7263 ede20006 ifetchr regext ,4 ,contr 
+7264 1f00f001 increase 1 ,regext_index 
+7265 efe10006 ifetch 2 ,contr 
+7266 1a30de00 byteswap rega ,regext 
+7267 1df05e00 lshift16 regext ,regext 
+7268 9de1de00 ior regext ,regext 
+7269 1f00f001 increase 1 ,regext_index 
+726a 20600000 rtn 
+
+generate_mic:
+726b 1a608c01 add regc ,1 ,contr 
+726c efe08006 ifetch 1 ,contr 
+726d 98002200 iforce rega 
+726e 20407256 call first_block_counter 
+726f 204072bf call do_aes_ocb 
+7270 18007000 force regidx_data ,regext_index 
+7271 efe08013 ifetch 1 ,regc 
+7272 1fe17e03 and_into 0x3 ,pdata 
+7273 1ff05e00 lshift16 pdata ,regext 
+7274 79205e08 set1 8 ,regext 
+7275 20407358 call clear_hidata 
+7276 204072c2 call do_aes_cbc 
+7277 1a227200 copy rega ,loopcnt 
+7278 1a608c02 add regc ,2 ,contr 
+7279 20407337 call padding_data 
+
+generate_mic_loop:
+727a 20407341 call aes_load_data 
+727b 204072c2 call do_aes_cbc 
+727c 1f227e00 deposit loopcnt 
+727d 203a727f branch generate_mic_end ,blank 
+727e 2020727a branch generate_mic_loop 
+
+generate_mic_end:
+727f 1800700c force regidx_result ,regext_index 
+7280 1de27e00 deposit regext 
+7281 67e20150 store 4 ,mem_le_mic 
+7282 20600000 rtn 
+
+aes_crypt_data:
+7283 1a20a201 increase 1 ,rega 
+7284 20407258 call first_block_data 
+7285 1a620c00 copy regc ,contr 
+7286 2040734b call aes_load_xor 
+7287 204072c5 call do_aes_ctr 
+7288 2040736a call store_enc_data 
+7289 1a60a610 increase 16 ,regc 
+728a 1a40a5f0 increase -16 ,regb 
+728b 20217283 branch aes_crypt_data ,positive 
+728c 20600000 rtn 
+
+le_encrypt_new_start:
+728d 204072b2 call ccm_init_common 
+728e 47084022 bpatchx patch22_0 ,mem_patch22 
+728f 70806c00 jam 0 ,core_ccm_aad0 
+7290 70806d01 jam 1 ,core_ccm_aad1 
+7291 6fe0c16b fetch 1 ,mem_le_txheader 
+7292 1fe17e03 and_into 0x3 ,pdata 
+7293 67f0806e store 1 ,core_ccm_aad2 
+7294 6fe1066d fetch 2 ,mem_contr 
+7295 67f10068 store 2 ,core_ccm_input_playload_addr 
+7296 5800416d setarg mem_le_txpayload 
+7297 67f1006a store 2 ,core_ccm_output_playload_addr 
+7298 6a20c16c fetchr rega ,1 ,mem_le_txlen 
+7299 684ac467 fetcht 5 ,mem_ccm_pcnt_tx 
+729a 20407253 call ccm_b0 
+729b 70800a02 jam 2 ,core_ccm_ctrl 
+729c 70800a03 jam 3 ,core_ccm_ctrl 
+729d 6fe0c16c fetch 1 ,mem_le_txlen 
+729e 67f100c0 store 2 ,core_ccm_inptr 
+729f 1fe0fe04 increase 4 ,pdata 
+72a0 67e0c16c store 1 ,mem_le_txlen 
+72a1 6fe2c467 fetch 5 ,mem_ccm_pcnt_tx 
+72a2 1fe0fe01 increase 1 ,pdata 
+72a3 793ffe27 set0 le_ccm_directionbit ,pdata 
+72a4 67e2c467 store 5 ,mem_ccm_pcnt_tx 
+72a5 20600000 rtn 
+
+ccm_wait_enc:
+72a6 6ff1011a fetch 2 ,core_ccm_outptr 
+72a7 98467c00 isub temp ,null 
+72a8 20628000 rtn zero 
+72a9 247a0000 nrtn blank 
+72aa 202072a6 branch ccm_wait_enc 
+
+ccm_check_enc_done:
+72ab 6ff08108 fetch 1 ,core_misc_status 
+72ac c303233e bbit0 6 ,assert 
+
+ccm_enc_done:
+72ad 5800416d setarg mem_le_txpayload 
+72ae 98408a00 iadd temp ,contw 
+72af df00000c arg regidx_result ,regext_index 
+72b0 e5e20005 istorer regext ,4 ,contw 
+72b1 202072bb branch ccm_ctrl_clr 
+
+ccm_init_common:
+72b2 4708c022 bpatchx patch22_1 ,mem_patch22 
+72b3 1800700c force regidx_result ,regext_index 
+72b4 2040735e call aes_clear 
+72b5 2040735d call aes_clear_data 
+72b6 58000000 setarg 0 
+72b7 67f100c0 store 2 ,core_ccm_inptr 
+72b8 20600000 rtn 
+
+wait_ccm_done:
+72b9 6ff08108 fetch 1 ,core_misc_status 
+72ba c30372b9 bbit0 6 ,wait_ccm_done 
+
+ccm_ctrl_clr:
+72bb 70800a00 jam 0 ,core_ccm_ctrl 
+72bc 20600000 rtn 
+
+wait_aes:
+72bd 243bf2bd nbranch wait_aes ,aes_ready 
+72be 20600000 rtn 
+
+do_aes_ocb:
+72bf 18006c30 force 0x30 ,aes_ctrl 
+72c0 18006c00 force 0x0 ,aes_ctrl 
+72c1 202072bd branch wait_aes 
+
+do_aes_cbc:
+72c2 18006c32 force 0x32 ,aes_ctrl 
+72c3 18006c02 force 0x2 ,aes_ctrl 
+72c4 202072bd branch wait_aes 
+
+do_aes_ctr:
+72c5 18006c34 force 0x34 ,aes_ctrl 
+72c6 18006c04 force 0x4 ,aes_ctrl 
+72c7 202072bd branch wait_aes 
+
+aes_init:
+72c8 18006c01 force 1 ,aes_ctrl 
+72c9 18006c00 force 0 ,aes_ctrl 
+72ca 20600000 rtn 
+
+wait_keyinit_done:
+72cb 6ff08155 fetch 1 ,core_aes_decode_key_init 
+72cc c30172cb bbit0 2 ,wait_keyinit_done 
+72cd 20600000 rtn 
+
+dec_key_initial:
+72ce 67f100d2 store 2 ,core_keybuf_saddr 
+72cf 18006cc0 force 0xc0 ,aes_ctrl 
+72d0 18006c80 force 0x80 ,aes_ctrl 
+72d1 202072cb branch wait_keyinit_done 
+
+do_aes_ecb_dec:
+72d2 18007000 force regidx_data ,regext_index 
+72d3 1a420c00 copy regb ,contr 
+72d4 18007204 force 4 ,loopcnt 
+72d5 204072e1 call aes_ecb_dec_loop 
+72d6 18006d80 force 0x180 ,aes_ctrl 
+72d7 18006c80 force 0x80 ,aes_ctrl 
+72d8 204072bd call wait_aes 
+
+ecb_dec_generate:
+72d9 1800700c force regidx_result ,regext_index 
+72da 1a620a00 copy regc ,contw 
+72db 18007204 force 4 ,loopcnt 
+
+ecb_dec_generate_loop:
+72dc 1de27e00 copy regext ,pdata 
+72dd e7e20005 istore 4 ,contw 
+72de 1f00f001 increase 1 ,regext_index 
+72df c20072dc loop ecb_dec_generate_loop 
+72e0 20600000 rtn 
+
+aes_ecb_dec_loop:
+72e1 efe10006 ifetch 2 ,contr 
+72e2 e8410006 ifetcht 2 ,contr 
+72e3 18500400 lshift16 temp ,temp 
+72e4 9841de00 ior temp ,regext 
+72e5 1f00f001 increase 1 ,regext_index 
+72e6 c20072e1 loop aes_ecb_dec_loop 
+72e7 20600000 rtn 
+
+do_aes_cbc_dec:
+72e8 18007008 force regidx_xor ,regext_index 
+72e9 1a220c00 copy rega ,contr 
+72ea 18007204 force 4 ,loopcnt 
+72eb 204072e1 call aes_ecb_dec_loop 
+72ec 18007000 force regidx_data ,regext_index 
+72ed 1a420c00 copy regb ,contr 
+72ee 18007204 force 4 ,loopcnt 
+72ef 204072e1 call aes_ecb_dec_loop 
+72f0 18006d82 force 0x182 ,aes_ctrl 
+72f1 18006c82 force 0x82 ,aes_ctrl 
+72f2 204072bd call wait_aes 
+72f3 202072d9 branch ecb_dec_generate 
+
+function_s1:
+72f4 18007000 force regidx_data ,regext_index 
+72f5 6fe20158 fetch 4 ,mem_le_mrand 
+72f6 98005e00 iforce regext 
+72f7 1f00f001 increase 1 ,regext_index 
+72f8 efe20006 ifetch 4 ,contr 
+72f9 98005e00 iforce regext 
+72fa 1f00f001 increase 1 ,regext_index 
+72fb 6fe242ad fetch 4 ,mem_le_srand 
+72fc 98005e00 iforce regext 
+72fd 1f00f001 increase 1 ,regext_index 
+72fe efe20006 ifetch 4 ,contr 
+72ff 98005e00 iforce regext 
+7300 1f00f001 increase 1 ,regext_index 
+7301 2040735e call aes_clear 
+7302 1f00f1fc increase -4 ,regext_index 
+7303 6fe24301 fetch 4 ,mem_le_tk 
+7304 1fe25e00 copy pdata ,regext 
+7305 1f00f004 increase 4 ,regext_index 
+7306 18006c38 force 0x38 ,aes_ctrl 
+7307 18006c08 force 0x8 ,aes_ctrl 
+7308 202072bd branch wait_aes 
+
+function_c1:
+7309 47094022 bpatchx patch22_2 ,mem_patch22 
+730a 6fe342dd fetch 6 ,mem_le_lap 
+730b 684b0178 fetcht 6 ,mem_le_plap 
+730c 2034f30f branch function_c1_master ,master 
+730d 6fe30178 fetch 6 ,mem_le_plap 
+730e 684b42dd fetcht 6 ,mem_le_lap 
+
+function_c1_master:
+730f 18007008 force regidx_xor ,regext_index 
+7310 18425e00 copy temp ,regext 
+7311 1f00f001 increase 1 ,regext_index 
+7312 184f5e00 rshift32 temp ,regext 
+7313 1ff07e00 lshift16 pdata ,pdata 
+7314 9de1de00 ior regext ,regext 
+7315 1f00f001 increase 1 ,regext_index 
+7316 1fef5e00 rshift32 pdata ,regext 
+7317 1f00f001 increase 1 ,regext_index 
+7318 18005e00 force 0 ,regext 
+7319 18007e00 force 0 ,pdata 
+731a 6fe0c2cd fetch 1 ,mem_le_conn_peer_addr_type 
+731b 6848c390 fetcht 1 ,mem_le_adv_own_addr_type 
+731c 2434f31f nbranch function_c1_irat ,master 
+731d 6fe0c2d4 fetch 1 ,mem_le_conn_own_addr_type 
+731e 6848c2cd fetcht 1 ,mem_le_conn_peer_addr_type 
+
+function_c1_irat:
+731f 67e0c2bd store 1 ,mem_le_iat 
+7320 6048c2be storet 1 ,mem_le_rat 
+7321 18007000 force regidx_data ,regext_index 
+7322 da4042bd arg mem_le_iat ,regb 
+7323 18007204 force 4 ,loopcnt 
+
+function_c1_loop1:
+7324 efe20011 ifetch 4 ,rega 
+7325 e8420012 ifetcht 4 ,regb 
+7326 9842de00 ixor temp ,regext 
+7327 1f00f001 increase 1 ,regext_index 
+7328 1a20a204 increase 4 ,rega 
+7329 1a40a404 increase 4 ,regb 
+732a c2007324 loop function_c1_loop1 
+732b 2040735e call aes_clear 
+732c 1f00f1fc increase -4 ,regext_index 
+732d 6fe24301 fetch 4 ,mem_le_tk 
+732e 1fe25e00 copy pdata ,regext 
+732f 1f00f004 increase 4 ,regext_index 
+7330 18006c38 force 0x38 ,aes_ctrl 
+7331 18006c0c force 0xc ,aes_ctrl 
+7332 204072bd call wait_aes 
+7333 2040735d call aes_clear_data 
+7334 18006c3a force 0x3a ,aes_ctrl 
+7335 18006c08 force 0x8 ,aes_ctrl 
+7336 202072bd branch wait_aes 
+
+padding_data:
+7337 2f200600 compare 0 ,loopcnt ,3 
+7338 20608000 rtn true 
+7339 18c27e00 deposit contr 
+733a 9f208a00 iadd loopcnt ,contw 
+733b 18007e00 force 0 ,pdata 
+
+padding_loop:
+733c e7e08005 istore 1 ,contw 
+733d 1f20f201 increase 1 ,loopcnt 
+733e 2f200600 compare 0 ,loopcnt ,3 
+733f 20608000 rtn true 
+7340 2020733c branch padding_loop 
+
+aes_load_data:
+7341 18007000 force regidx_data ,regext_index 
+
+load_data_loop:
+7342 1f227e00 deposit loopcnt 
+7343 203a7346 branch load_data_padding ,blank 
+7344 efe20006 ifetch 4 ,contr 
+7345 1f20f3fc increase -4 ,loopcnt 
+
+load_data_padding:
+7346 98005e00 iforce regext 
+7347 1f00f001 increase 1 ,regext_index 
+7348 2f001e04 compare regidx_key ,regext_index ,0xf 
+7349 20608000 rtn true 
+734a 20207342 branch load_data_loop 
+
+aes_load_xor:
+734b 18007008 force regidx_xor ,regext_index 
+734c 20207350 branch load_regext 
+
+load_key:
+734d 18007004 force regidx_key ,regext_index 
+734e 20207350 branch load_regext 
+
+load_data128:
+734f 18007000 force regidx_data ,regext_index 
+
+load_regext:
+7350 18007204 force 4 ,loopcnt 
+
+load_regext_loop:
+7351 efe20006 ifetch 4 ,contr 
+7352 98005e00 iforce regext 
+7353 1f00f001 increase 1 ,regext_index 
+7354 c2007351 loop load_regext_loop 
+7355 20600000 rtn 
+
+load_sk:
+7356 d8c001a8 arg mem_le_sk ,contr 
+7357 2020734d branch load_key 
+
+clear_hidata:
+7358 18007204 force 4 ,loopcnt 
+7359 20207360 branch clear_data_rest 
+
+regext_clear:
+735a 18007000 force 0 ,regext_index 
+735b 18007210 force 16 ,loopcnt 
+735c 2020735f branch clear_loop 
+
+aes_clear_data:
+735d 18007000 force regidx_data ,regext_index 
+
+aes_clear:
+735e 18007204 force 4 ,loopcnt 
+
+clear_loop:
+735f 18005e00 force 0 ,regext 
+
+clear_data_rest:
+7360 1f00f001 increase 1 ,regext_index 
+7361 c200735f loop clear_loop 
+7362 20600000 rtn 
+
+store_aes_result:
+7363 1800700c force regidx_result ,regext_index 
+7364 18007204 force 4 ,loopcnt 
+
+send_aes_result_loop:
+7365 1de27e00 deposit regext 
+7366 e7e20005 istore 4 ,contw 
+7367 1f00f001 increase 1 ,regext_index 
+7368 c2007365 loop send_aes_result_loop 
+7369 20600000 rtn 
+
+store_enc_data:
+736a 1800700c force regidx_result ,regext_index 
+736b 1a620a00 copy regc ,contw 
+736c 1a40f201 add regb ,1 ,loopcnt 
+736d 1f267c0f sub loopcnt ,15 ,null 
+736e 20217370 branch store_enc_loop ,positive 
+736f 18007210 force 16 ,loopcnt 
+
+store_enc_loop:
+7370 1de27e00 deposit regext 
+7371 1f267c03 sub loopcnt ,3 ,null 
+7372 20217378 branch store_enc_byte ,positive 
+7373 e7e20005 istore 4 ,contw 
+7374 1f20f3fc increase -4 ,loopcnt 
+7375 20628000 rtn zero 
+7376 1f00f001 increase 1 ,regext_index 
+7377 20207370 branch store_enc_loop 
+
+store_enc_byte:
+7378 e7e08005 istore 1 ,contw 
+7379 1fecfe00 rshift8 pdata ,pdata 
+737a c2007378 loop store_enc_byte 
+737b 20600000 rtn 
+
+compare_res:
+737c 1800700c force regidx_result ,regext_index 
+737d 18007204 force 4 ,loopcnt 
+
+compare_res_loop:
+737e efe20006 ifetch 4 ,contr 
+737f 9de67c00 isub regext ,null 
+7380 24628000 nrtn zero 
+7381 1f00f001 increase 1 ,regext_index 
+7382 c200737e loop compare_res_loop 
+7383 20207dba branch enable_zero 
+
+enable_authrom:
+7384 6ff08050 fetch 1 ,core_clkoff 
+7385 793ffe00 set0 clock_off_auth_rom ,pdata 
+7386 67f08050 store 1 ,core_clkoff 
+7387 20600000 rtn 
+
+disable_authrom:
+7388 6ff08050 fetch 1 ,core_clkoff 
+7389 79207e00 set1 clock_off_auth_rom ,pdata 
+738a 67f08050 store 1 ,core_clkoff 
+738b 20600000 rtn 
+
+init_memp:
+738c d8a004af arg mem_p ,contw 
+738d 3803ffff setsect 0 ,0x3ffff 
+738e 3807ffff setsect 1 ,0x3ffff 
+738f 380bffff setsect 2 ,0x3ffff 
+7390 380ffbff setsect 3 ,0x3fbff 
+7391 e7e48005 istore 9 ,contw 
+7392 3803ffff setsect 0 ,0x3ffff 
+7393 3807ffff setsect 1 ,0x3ffff 
+7394 380bffff setsect 2 ,0x3ffff 
+7395 380fffff setsect 3 ,0x3ffff 
+7396 e7e48005 istore 9 ,contw 
+7397 3803ffff setsect 0 ,0x3ffff 
+7398 3807ffff setsect 1 ,0x3ffff 
+7399 380bcfff setsect 2 ,0x3cfff 
+739a 380fffff setsect 3 ,0x3ffff 
+739b e7e48005 istore 9 ,contw 
+739c 3803ffff setsect 0 ,0x3ffff 
+739d 3807ffff setsect 1 ,0x3ffff 
+739e 380bffef setsect 2 ,0x3ffef 
+739f 380fffff setsect 3 ,0x3ffff 
+73a0 e7e48005 istore 9 ,contw 
+73a1 3803ffff setsect 0 ,0x3ffff 
+73a2 3807ffff setsect 1 ,0x3ffff 
+73a3 380bffff setsect 2 ,0x3ffff 
+73a4 380fffff setsect 3 ,0x3ffff 
+73a5 e7e48005 istore 9 ,contw 
+73a6 3803ffff setsect 0 ,0x3ffff 
+73a7 38066c7f setsect 1 ,0x26c7f 
+73a8 3808146b setsect 2 ,0x146b 
+73a9 380f7bb3 setsect 3 ,0x37bb3 
+73aa e7e48005 istore 9 ,contw 
+73ab 3801feb8 setsect 0 ,0x1feb8 
+73ac 38050c12 setsect 1 ,0x10c12 
+73ad 380ab722 setsect 2 ,0x2b722 
+73ae 380e9fa6 setsect 3 ,0x29fa6 
+73af e7e48005 istore 9 ,contw 
+73b0 3800e70f setsect 0 ,0xe70f 
+73b1 38056720 setsect 1 ,0x16720 
+73b2 3808519e setsect 2 ,0x519e 
+73b3 380d9084 setsect 3 ,0x19084 
+73b4 e7e48005 istore 9 ,contw 
+73b5 38031012 setsect 0 ,0x31012 
+73b6 380760bf setsect 1 ,0x360bf 
+73b7 380bf0af setsect 2 ,0x3f0af 
+73b8 380c03d3 setsect 3 ,0x3d3 
+73b9 e7e48005 istore 9 ,contw 
+73ba 3803a188 setsect 0 ,0x3a188 
+73bb 38043ad0 setsect 1 ,0x3ad0 
+73bc 380bcbf2 setsect 2 ,0x3cbf2 
+73bd 380e43d9 setsect 3 ,0x243d9 
+73be e7e48005 istore 9 ,contw 
+73bf 3802b030 setsect 0 ,0x2b030 
+73c0 38076a03 setsect 1 ,0x36a03 
+73c1 38091188 setsect 2 ,0x11188 
+73c2 380de520 setsect 3 ,0x1e520 
+73c3 e7e48005 istore 9 ,contw 
+73c4 3803a11e setsect 0 ,0x3a11e 
+73c5 3804fe5d setsect 1 ,0xfe5d 
+73c6 3808dd57 setsect 2 ,0xdd57 
+73c7 380dac93 setsect 3 ,0x1ac93 
+73c8 e7e48005 istore 9 ,contw 
+73c9 380011ed setsect 0 ,0x11ed 
+73ca 380618c4 setsect 1 ,0x218c4 
+73cb 38088da7 setsect 2 ,0x8da7 
+73cc 380e57ff setsect 3 ,0x257ff 
+73cd e7e48005 istore 9 ,contw 
+73ce 3803192b setsect 0 ,0x3192b 
+73cf 38074641 setsect 1 ,0x34641 
+73d0 3809be0c setsect 2 ,0x1be0c 
+73d1 380f66ad setsect 3 ,0x366ad 
+73d2 e7e48005 istore 9 ,contw 
+73d3 38001f83 setsect 0 ,0x1f83 
+73d4 38055a23 setsect 1 ,0x15a23 
+73d5 380bf9b0 setsect 2 ,0x3f9b0 
+73d6 380c3949 setsect 3 ,0x3949 
+73d7 e7e48005 istore 9 ,contw 
+73d8 38013a51 setsect 0 ,0x13a51 
+73d9 380553fd setsect 1 ,0x153fd 
+73da 380b372a setsect 2 ,0x3372a 
+73db 380cf1bb setsect 3 ,0xf1bb 
+73dc e7e48005 istore 9 ,contw 
+73dd 3803ae85 setsect 0 ,0x3ae85 
+73de 3805eed9 setsect 1 ,0x1eed9 
+73df 38089e66 setsect 2 ,0x9e66 
+73e0 380c01a8 setsect 3 ,0x1a8 
+73e1 e7e40005 istore 8 ,contw 
+73e2 20600000 rtn 
+
+init_memp_256:
+73e3 d8a00547 arg mem_p_256 ,contw 
+73e4 3803ffff setsect 0 ,0x3ffff 
+73e5 3807ffff setsect 1 ,0x3ffff 
+73e6 380bffff setsect 2 ,0x3ffff 
+73e7 380fffff setsect 3 ,0x3ffff 
+73e8 e7e48005 istore 9 ,contw 
+73e9 3803ffff setsect 0 ,0x3ffff 
+73ea 3804003f setsect 1 ,0x3f 
+73eb 38080000 setsect 2 ,0x0 
+73ec 380c0000 setsect 3 ,0x0 
+73ed e7e48005 istore 9 ,contw 
+73ee 38000000 setsect 0 ,0x0 
+73ef 38040000 setsect 1 ,0x0 
+73f0 38081000 setsect 2 ,0x1000 
+73f1 380c0000 setsect 3 ,0x0 
+73f2 e7e48005 istore 9 ,contw 
+73f3 3803ff00 setsect 0 ,0x3ff00 
+73f4 3807ffff setsect 1 ,0x3ffff 
+73f5 380bffcf setsect 2 ,0x3ffcf 
+73f6 380fffff setsect 3 ,0x3ffff 
+73f7 e7e48005 istore 9 ,contw 
+73f8 3803ffff setsect 0 ,0x3ffff 
+73f9 3807ffff setsect 1 ,0x3ffff 
+73fa 380bffff setsect 2 ,0x3ffff 
+73fb 380c03ff setsect 3 ,0x3ff 
+73fc e7e48005 istore 9 ,contw 
+73fd 38000000 setsect 0 ,0x0 
+73fe 38040000 setsect 1 ,0x0 
+73ff 38080000 setsect 2 ,0x0 
+7400 380c0000 setsect 3 ,0x0 
+7401 e7e48005 istore 9 ,contw 
+7402 38010000 setsect 0 ,0x10000 
+7403 38040000 setsect 1 ,0x0 
+7404 380bf000 setsect 2 ,0x3f000 
+7405 380fffff setsect 3 ,0x3ffff 
+7406 e7e48005 istore 9 ,contw 
+7407 380296ff setsect 0 ,0x296ff 
+7408 38062630 setsect 1 ,0x22630 
+7409 380b945d setsect 2 ,0x3945d 
+740a 380fd284 setsect 3 ,0x3d284 
+740b e7e48005 istore 9 ,contw 
+740c 380333a0 setsect 0 ,0x333a0 
+740d 38044b7a setsect 1 ,0x4b7a 
+740e 380837d8 setsect 2 ,0x37d8 
+740f 380fc9dc setsect 3 ,0x3c9dc 
+7410 e7e48005 istore 9 ,contw 
+7411 3803a440 setsect 0 ,0x3a440 
+7412 3805b958 setsect 1 ,0x1b958 
+7413 380b8bce setsect 2 ,0x38bce 
+7414 380d091f setsect 3 ,0x1091f 
+7415 e7e48005 istore 9 ,contw 
+7416 3802e12c setsect 0 ,0x2e12c 
+7417 3805f47c setsect 1 ,0x1f47c 
+7418 380b56b1 setsect 2 ,0x356b1 
+7419 380efd47 setsect 3 ,0x2fd47 
+741a e7e48005 istore 9 ,contw 
+741b 38006837 setsect 0 ,0x6837 
+741c 3806ed90 setsect 1 ,0x2ed90 
+741d 3809ecec setsect 2 ,0x1ecec 
+741e 380dacc5 setsect 3 ,0x1acc5 
+741f e7e48005 istore 9 ,contw 
+7420 38023357 setsect 0 ,0x23357 
+7421 38058af3 setsect 1 ,0x18af3 
+7422 3808f9e1 setsect 2 ,0xf9e1 
+7423 380d29f0 setsect 3 ,0x129f0 
+7424 e7e48005 istore 9 ,contw 
+7425 3802e7eb setsect 0 ,0x2e7eb 
+7426 3807e6e3 setsect 1 ,0x3e6e3 
+7427 380be1a7 setsect 2 ,0x3e1a7 
+7428 380d0b8b setsect 3 ,0x10b8b 
+7429 e7e48005 istore 9 ,contw 
+742a 38024fe3 setsect 0 ,0x24fe3 
+742b 380420ef setsect 1 ,0x20ef 
+742c 3809b5a6 setsect 2 ,0x1b5a6 
+742d 380cdc2f setsect 3 ,0xdc2f 
+742e e7e48005 istore 9 ,contw 
+742f 38013860 setsect 0 ,0x13860 
+7430 3806bd69 setsect 1 ,0x2bd69 
+7431 3808391a setsect 2 ,0x391a 
+7432 380db222 setsect 3 ,0x1b222 
+7433 e7e48005 istore 9 ,contw 
+7434 20600000 rtn 
+
+publickey_init:
+7435 202074ea branch sp_initialize_256 
+
+sp_calc_sequence_256_check:
+7436 4709c022 bpatchx patch22_3 ,mem_patch22 
+7437 6fe0c483 fetch 1 ,mem_secure_connections_enable 
+7438 207a0000 rtn blank 
+7439 6fe0c485 fetch 1 ,mem_sc_local_key_invalid 
+743a c1018000 rtneq sp_key_valid_256 
+743b 6fe0c484 fetch 1 ,mem_sc_calc 
+743c c00074ea beq sp_calc_standby ,sp_initialize_256 
+743d 20600000 rtn 
+
+stop_publickey_calc_256:
+743e 70448400 jam sp_calc_standby ,mem_sc_calc 
+743f 20600000 rtn 
+
+sp_clear_flags:
+7440 470a4022 bpatchx patch22_4 ,mem_patch22 
+7441 580005dc setarg mem_sp_state_end 
+7442 d8a005d7 arg mem_sp_state_start ,contw 
+7443 98a67200 isub contw ,loopcnt 
+7444 20407ca3 call clear_mem 
+7445 580044e8 setarg mem_sp_state_xmem_end 
+7446 d8a044e6 arg mem_sp_state_xmem ,contw 
+7447 98a67200 isub contw ,loopcnt 
+7448 20207ca3 branch clear_mem 
+
+sp_calc_check_publickey_256:
+7449 20407464 call sp_calc_b256 
+744a da2005fc arg mem_le_pubkey_remote_y_256 ,rega 
+744b d8a0048f arg mem_t7_256 ,contw 
+744c 2040770a call bn_sqrmod_256 
+744d da2005dc arg mem_le_pubkey_remote_x_256 ,rega 
+744e d8a0044f arg mem_t2_256 ,contw 
+744f 2040770a call bn_sqrmod_256 
+7450 da20044f arg mem_t2_256 ,rega 
+7451 da4005dc arg mem_le_pubkey_remote_x_256 ,regb 
+7452 d8a0044f arg mem_t2_256 ,contw 
+7453 20407672 call bn_mulmod_256 
+7454 da200567 arg mem_a_256 ,rega 
+7455 da4005dc arg mem_le_pubkey_remote_x_256 ,regb 
+7456 d8a0046f arg mem_t3_256 ,contw 
+7457 20407672 call bn_mulmod_256 
+7458 da20046f arg mem_t3_256 ,rega 
+7459 da40044f arg mem_t2_256 ,regb 
+745a d8a0044f arg mem_t2_256 ,contw 
+745b 2040770e call bn_addmod_256 
+745c da20042f arg mem_t0_256 ,rega 
+745d da40044f arg mem_t2_256 ,regb 
+745e d8a0042f arg mem_t0_256 ,contw 
+745f 2040770e call bn_addmod_256 
+7460 df200020 arg 32 ,loopcnt 
+7461 da20048f arg mem_t7_256 ,rega 
+7462 da40042f arg mem_t0_256 ,regb 
+7463 20207d66 branch string_compare 
+
+sp_calc_b256:
+7464 da2005a7 arg mem_gy_256 ,rega 
+7465 d8a0042f arg mem_t0_256 ,contw 
+7466 2040770a call bn_sqrmod_256 
+7467 da200587 arg mem_gx_256 ,rega 
+7468 d8a0044f arg mem_t2_256 ,contw 
+7469 2040770a call bn_sqrmod_256 
+746a da20044f arg mem_t2_256 ,rega 
+746b da400587 arg mem_gx_256 ,regb 
+746c d8a0044f arg mem_t2_256 ,contw 
+746d 20407672 call bn_mulmod_256 
+746e da200567 arg mem_a_256 ,rega 
+746f da400587 arg mem_gx_256 ,regb 
+7470 d8a0046f arg mem_t3_256 ,contw 
+7471 20407672 call bn_mulmod_256 
+7472 da20046f arg mem_t3_256 ,rega 
+7473 da40044f arg mem_t2_256 ,regb 
+7474 d8a0044f arg mem_t2_256 ,contw 
+7475 2040770e call bn_addmod_256 
+7476 da20042f arg mem_t0_256 ,rega 
+7477 da40044f arg mem_t2_256 ,regb 
+7478 d8a0042f arg mem_t0_256 ,contw 
+7479 20207727 branch bn_submod_256 
+
+random_generator:
+747a 18e08fff increase -1 ,queue 
+747b 24610000 nrtn positive 
+747c 180a7e00 random pdata 
+747d e7e10005 istore 2 ,contw 
+747e 2020747a branch random_generator 
+
+compare4:
+747f 18e08fff increase -1 ,queue 
+7480 2421748a nbranch compare4_success ,positive 
+7481 efe20011 ifetch 4 ,rega 
+7482 1fe20400 copy pdata ,temp 
+7483 efe20012 ifetch 4 ,regb 
+7484 9842fe00 iflip temp ,pdata 
+7485 2422f489 nbranch compare4_failed ,zero 
+7486 1a20a204 increase 4 ,rega 
+7487 1a40a404 increase 4 ,regb 
+7488 2020747f branch compare4 
+
+compare4_failed:
+7489 20207dc6 branch disable_true 
+
+compare4_success:
+748a 20207dc8 branch enable_true 
+
+bn_testbit:
+748b 1fe10e07 and pdata ,7 ,queue 
+748c 1fe97e00 rshift3 pdata ,pdata 
+748d 98c08c00 iadd contr ,contr 
+748e efe08006 ifetch 1 ,contr 
+748f afec0000 qisolate0 pdata 
+7490 20600000 rtn 
+
+bn_eq_zero:
+7491 efe40006 ifetch 8 ,contr 
+7492 247a0000 nrtn blank 
+7493 efe40006 ifetch 8 ,contr 
+7494 247a0000 nrtn blank 
+7495 efe40006 ifetch 8 ,contr 
+7496 20600000 rtn 
+
+bn_eq_0:
+7497 efe20011 ifetch 4 ,rega 
+7498 98000400 iforce temp 
+7499 efe20012 ifetch 4 ,regb 
+749a 98467c00 isub temp ,null 
+749b 24628000 nrtn zero 
+749c 1a20a204 increase 4 ,rega 
+749d 1a40a404 increase 4 ,regb 
+749e c2007497 loop bn_eq_0 
+749f 20600000 rtn 
+
+bn_bigeq:
+74a0 18007206 force 6 ,loopcnt 
+74a1 1a20a214 increase 20 ,rega 
+74a2 1a40a414 increase 20 ,regb 
+
+bn_bigeq_0:
+74a3 efe20012 ifetch 4 ,regb 
+74a4 98000400 iforce temp 
+74a5 efe20011 ifetch 4 ,rega 
+74a6 98467e00 isub temp ,pdata 
+74a7 24610000 nrtn positive 
+74a8 247a0000 nrtn blank 
+74a9 1a20a3fc increase -4 ,rega 
+74aa 1a40a5fc increase -4 ,regb 
+74ab c20074a3 loop bn_bigeq_0 
+74ac 20600000 rtn 
+
+bn_add:
+74ad 18007206 force 6 ,loopcnt 
+74ae 18002600 force 0 ,regc 
+
+bn_add_0:
+74af efe20011 ifetch 4 ,rega 
+74b0 98000400 iforce temp 
+74b1 efe20012 ifetch 4 ,regb 
+74b2 9840fe00 iadd temp ,pdata 
+74b3 9a60fe00 iadd regc ,pdata 
+74b4 e7e20005 istore 4 ,contw 
+74b5 2feffe20 isolate1 32 ,pdata 
+74b6 7920a600 setflag true ,0 ,regc 
+74b7 1a20a204 increase 4 ,rega 
+74b8 1a40a404 increase 4 ,regb 
+74b9 c20074af loop bn_add_0 
+74ba 20600000 rtn 
+
+bn_sub:
+74bb 18007206 force 6 ,loopcnt 
+74bc 18002600 force 0 ,regc 
+
+bn_sub_0:
+74bd efe20012 ifetch 4 ,regb 
+74be 98000400 iforce temp 
+74bf efe20011 ifetch 4 ,rega 
+74c0 98467e00 isub temp ,pdata 
+74c1 9a667e00 isub regc ,pdata 
+74c2 e7e20005 istore 4 ,contw 
+74c3 2feffe20 isolate1 32 ,pdata 
+74c4 7920a600 setflag true ,0 ,regc 
+74c5 1a20a204 increase 4 ,rega 
+74c6 1a40a404 increase 4 ,regb 
+74c7 c20074bd loop bn_sub_0 
+74c8 20600000 rtn 
+
+bn_rshift6:
+74c9 18007206 force 6 ,loopcnt 
+74ca 1a20a214 increase 20 ,rega 
+
+bn_rshift:
+74cb 18002600 force 0 ,regc 
+
+bn_rshift_0:
+74cc efe20011 ifetch 4 ,rega 
+74cd 2feffe00 isolate1 0 ,pdata 
+74ce 7920a601 setflag true ,1 ,regc 
+74cf 1fe37e00 rshift pdata ,pdata 
+74d0 2a6ffe00 isolate1 0 ,regc 
+74d1 7920fe1f setflag true ,31 ,pdata 
+74d2 e7e20011 istore 4 ,rega 
+74d3 1a20a3fc increase -4 ,rega 
+74d4 1a632600 rshift regc ,regc 
+74d5 c20074cc loop bn_rshift_0 
+74d6 20600000 rtn 
+
+bn_lshift:
+74d7 18007206 force 6 ,loopcnt 
+74d8 18002600 force 0 ,regc 
+
+bn_lshift_0:
+74d9 efe20011 ifetch 4 ,rega 
+74da 2feffe1f isolate1 31 ,pdata 
+74db 7920a601 setflag true ,1 ,regc 
+74dc 1fe3fe00 lshift pdata ,pdata 
+74dd 2a6ffe00 isolate1 0 ,regc 
+74de 7920fe00 setflag true ,0 ,pdata 
+74df e7e20011 istore 4 ,rega 
+74e0 1a20a204 increase 4 ,rega 
+74e1 1a632600 rshift regc ,regc 
+74e2 c20074d9 loop bn_lshift_0 
+74e3 20600000 rtn 
+
+bn_load:
+74e4 18007206 force 6 ,loopcnt 
+
+bn_load_0:
+74e5 efe20006 ifetch 4 ,contr 
+74e6 98005e00 iforce regext 
+74e7 1f00f001 increase 1 ,regext_index 
+74e8 c20074e5 loop bn_load_0 
+74e9 20600000 rtn 
+
+sp_initialize_256:
+74ea 470ac022 bpatchx patch22_5 ,mem_patch22 
+74eb 6fe0c483 fetch 1 ,mem_secure_connections_enable 
+74ec 243a750b nbranch sp_pubkey_calc_256 ,blank 
+
+sc_reset:
+74ed 70448400 jam sp_calc_standby ,mem_sc_calc 
+74ee 70448500 jam sp_key_invalid ,mem_sc_local_key_invalid 
+74ef 20600000 rtn 
+
+sp_wait_pubkey_calc_256_done:
+74f0 6fe0c483 fetch 1 ,mem_secure_connections_enable 
+74f1 207a0000 rtn blank 
+74f2 6fe0c485 fetch 1 ,mem_sc_local_key_invalid 
+74f3 c1018000 rtneq sp_key_valid_256 
+74f4 20407540 call sp_calc_sequence_256 
+74f5 202074f0 branch sp_wait_pubkey_calc_256_done 
+
+sp_debug_private_256:
+74f6 d8a04486 arg mem_sc_private_key_256 ,contw 
+74f7 38001abd setsect 0 ,0x1abd 
+74f8 3805b34f setsect 1 ,0x1b34f 
+74f9 38099b8a setsect 2 ,0x19b8a 
+74fa 380e6562 setsect 3 ,0x26562 
+74fb e7e48005 istore 9 ,contw 
+74fc 380340b7 setsect 0 ,0x340b7 
+74fd 38041efa setsect 1 ,0x1efa 
+74fe 3808aff6 setsect 2 ,0xaff6 
+74ff 380cfd41 setsect 3 ,0xfd41 
+7500 e7e48005 istore 9 ,contw 
+7501 3803d210 setsect 0 ,0x3d210 
+7502 38066cf8 setsect 1 ,0x26cf8 
+7503 380b874c setsect 2 ,0x3874c 
+7504 380f157c setsect 3 ,0x3157c 
+7505 e7e48005 istore 9 ,contw 
+7506 3802d4a3 setsect 0 ,0x2d4a3 
+7507 3807d27d setsect 1 ,0x3d27d 
+7508 38080003 setsect 2 ,0x3 
+7509 e7e28005 istore 5 ,contw 
+750a 20600000 rtn 
+
+sp_pubkey_calc_256:
+750b 6fe0c485 fetch 1 ,mem_sc_local_key_invalid 
+750c c1800000 rtnne sp_key_invalid 
+750d 6fe0c484 fetch 1 ,mem_sc_calc 
+750e c1800000 rtnne sp_calc_standby 
+750f 204073e3 call init_memp_256 
+7510 d8a04486 arg mem_sc_private_key_256 ,contw 
+7511 18000e0f force 15 ,queue 
+7512 2040747a call random_generator 
+7513 180a7e00 random pdata 
+7514 1fe37e00 rshift pdata ,pdata 
+7515 e7e10005 istore 2 ,contw 
+7516 6fe0c482 fetch 1 ,mem_sp_debug_mode 
+7517 245a74f6 ncall sp_debug_private_256 ,blank 
+7518 d8a0038f arg mem_k_256 ,contw 
+7519 d8c04486 arg mem_sc_private_key_256 ,contr 
+751a 20407c8f call memcpy32 
+751b d8a0026f arg mem_ax_256 ,contw 
+751c d8c00587 arg mem_gx_256 ,contr 
+751d 20407c83 call memcpy64 
+751e d8a002af arg mem_az_256 ,contw 
+751f 20407c9f call clear_mem_256 
+7520 7002af01 jam 1 ,mem_az_256 
+7521 20407558 call eckp_calc_init_256 
+7522 70448403 jam sp_calc_pubkey_256 ,mem_sc_calc 
+7523 20600000 rtn 
+
+sp_pubkey_generated_256:
+7524 d8a044a6 arg mem_sc_pubkey_local_x_256 ,contw 
+7525 d8c002cf arg mem_bx_256 ,contr 
+7526 20407c83 call memcpy64 
+7527 70448503 jam sp_key_valid_256 ,mem_sc_local_key_invalid 
+7528 70448400 jam sp_calc_standby ,mem_sc_calc 
+7529 20600000 rtn 
+
+sp_dhkey_calc_256:
+752a 6fe085d7 fetch 1 ,mem_sp_dhkey_invalid 
+752b c1800000 rtnne sp_key_invalid 
+752c 6fe0c484 fetch 1 ,mem_sc_calc 
+752d c1800000 rtnne sp_calc_standby 
+752e d8a0038f arg mem_k_256 ,contw 
+752f d8c04486 arg mem_sc_private_key_256 ,contr 
+7530 20407c8f call memcpy32 
+7531 d8a0026f arg mem_ax_256 ,contw 
+7532 d8c005dc arg mem_le_pubkey_remote_x_256 ,contr 
+7533 20407c83 call memcpy64 
+7534 d8a002af arg mem_az_256 ,contw 
+7535 20407c9f call clear_mem_256 
+7536 7002af01 jam 1 ,mem_az_256 
+7537 20407558 call eckp_calc_init_256 
+7538 70448404 jam sp_calc_dhkey_256 ,mem_sc_calc 
+7539 20600000 rtn 
+
+sp_dhkey_generated_256:
+753a d8a0061c arg mem_le_dhkey_256 ,contw 
+753b d8c002cf arg mem_bx_256 ,contr 
+753c 20407c8f call memcpy32 
+753d 7005d703 jam sp_key_valid_256 ,mem_sp_dhkey_invalid 
+753e 70448400 jam sp_calc_standby ,mem_sc_calc 
+753f 20600000 rtn 
+
+sp_calc_sequence_256:
+7540 6fe0c483 fetch 1 ,mem_secure_connections_enable 
+7541 207a0000 rtn blank 
+7542 6fe0c484 fetch 1 ,mem_sc_calc 
+7543 207a0000 rtn blank 
+7544 1fe0fe80 increase 0x80 ,pdata 
+7545 67e0c484 store 1 ,mem_sc_calc 
+7546 c3838000 rtnbit1 7 
+7547 6fe1020c fetch 2 ,mem_ec_loopc 
+7548 203a754a branch sp_calc_sequence_done_256 ,blank 
+7549 20207550 branch eckp_calc_256 
+
+sp_calc_sequence_done_256:
+754a 470b4022 bpatchx patch22_6 ,mem_patch22 
+754b 20407565 call ecunmapz_256 
+754c 6fe0c484 fetch 1 ,mem_sc_calc 
+754d c001f524 beq sp_calc_pubkey_256 ,sp_pubkey_generated_256 
+754e c002753a beq sp_calc_dhkey_256 ,sp_dhkey_generated_256 
+754f 20600000 rtn 
+
+eckp_calc_256:
+7550 20407577 call ecdbl_256 
+7551 6fe1020c fetch 2 ,mem_ec_loopc 
+7552 1fe0ffff increase -1 ,pdata 
+7553 67e1020c store 2 ,mem_ec_loopc 
+7554 d8c0038f arg mem_k_256 ,contr 
+7555 2040748b call bn_testbit 
+7556 20608000 rtn true 
+7557 202075c8 branch ecadd_256 
+
+eckp_calc_init_256:
+7558 470bc022 bpatchx patch22_7 ,mem_patch22 
+7559 58000100 setarg 256 
+755a 67e1020c store 2 ,mem_ec_loopc 
+
+eckp_calc_init_256_1:
+755b 6fe1020c fetch 2 ,mem_ec_loopc 
+755c 207a0000 rtn blank 
+755d 1fe0ffff increase -1 ,pdata 
+755e 67e1020c store 2 ,mem_ec_loopc 
+755f d8c0038f arg mem_k_256 ,contr 
+7560 2040748b call bn_testbit 
+7561 2020f55b branch eckp_calc_init_256_1 ,true 
+7562 d8c0026f arg mem_ax_256 ,contr 
+7563 d8a0032f arg mem_cx_256 ,contw 
+7564 20207c82 branch memcpy96 
+
+ecunmapz_256:
+7565 da20036f arg mem_cz_256 ,rega 
+7566 d8a0046f arg mem_t3_256 ,contw 
+7567 20407634 call bn_invmod_256 
+7568 da20046f arg mem_t3_256 ,rega 
+7569 d8a0040f arg mem_t1_256 ,contw 
+756a 2040770a call bn_sqrmod_256 
+756b da20032f arg mem_cx_256 ,rega 
+756c da40040f arg mem_t1_256 ,regb 
+756d d8a002cf arg mem_bx_256 ,contw 
+756e 20407672 call bn_mulmod_256 
+756f da20046f arg mem_t3_256 ,rega 
+7570 da40040f arg mem_t1_256 ,regb 
+7571 d8a0044f arg mem_t2_256 ,contw 
+7572 20407672 call bn_mulmod_256 
+7573 da20034f arg mem_cy_256 ,rega 
+7574 da40044f arg mem_t2_256 ,regb 
+7575 d8a002ef arg mem_by_256 ,contw 
+7576 20207672 branch bn_mulmod_256 
+
+ecdbl_256:
+7577 da20036f arg mem_cz_256 ,rega 
+7578 d8a0044f arg mem_t2_256 ,contw 
+7579 2040770a call bn_sqrmod_256 
+757a da20044f arg mem_t2_256 ,rega 
+757b d8a0046f arg mem_t3_256 ,contw 
+757c 2040770a call bn_sqrmod_256 
+757d da200567 arg mem_a_256 ,rega 
+757e da40046f arg mem_t3_256 ,regb 
+757f d8a0046f arg mem_t3_256 ,contw 
+7580 20407672 call bn_mulmod_256 
+7581 da20032f arg mem_cx_256 ,rega 
+7582 d8a0044f arg mem_t2_256 ,contw 
+7583 2040770a call bn_sqrmod_256 
+7584 d8c0044f arg mem_t2_256 ,contr 
+7585 d8a0040f arg mem_t1_256 ,contw 
+7586 20407c8f call memcpy32 
+7587 da20040f arg mem_t1_256 ,rega 
+7588 20407711 call bn_lshiftmod_256 
+7589 da20044f arg mem_t2_256 ,rega 
+758a da40040f arg mem_t1_256 ,regb 
+758b d8a0044f arg mem_t2_256 ,contw 
+758c 2040770e call bn_addmod_256 
+758d da20044f arg mem_t2_256 ,rega 
+758e da40046f arg mem_t3_256 ,regb 
+758f d8a0044f arg mem_t2_256 ,contw 
+7590 2040770e call bn_addmod_256 
+7591 d8c0032f arg mem_cx_256 ,contr 
+7592 d8a0040f arg mem_t1_256 ,contw 
+7593 20407c8f call memcpy32 
+7594 da20034f arg mem_cy_256 ,rega 
+7595 d8a0046f arg mem_t3_256 ,contw 
+7596 2040770a call bn_sqrmod_256 
+7597 da20040f arg mem_t1_256 ,rega 
+7598 20407711 call bn_lshiftmod_256 
+7599 da20040f arg mem_t1_256 ,rega 
+759a 20407711 call bn_lshiftmod_256 
+759b da20040f arg mem_t1_256 ,rega 
+759c da40046f arg mem_t3_256 ,regb 
+759d d8a0040f arg mem_t1_256 ,contw 
+759e 20407672 call bn_mulmod_256 
+759f da20046f arg mem_t3_256 ,rega 
+75a0 d8a0042f arg mem_t0_256 ,contw 
+75a1 2040770a call bn_sqrmod_256 
+75a2 da20042f arg mem_t0_256 ,rega 
+75a3 20407711 call bn_lshiftmod_256 
+75a4 da20042f arg mem_t0_256 ,rega 
+75a5 20407711 call bn_lshiftmod_256 
+75a6 da20042f arg mem_t0_256 ,rega 
+75a7 20407711 call bn_lshiftmod_256 
+75a8 d8c0034f arg mem_cy_256 ,contr 
+75a9 d8a0046f arg mem_t3_256 ,contw 
+75aa 20407c8f call memcpy32 
+75ab da20046f arg mem_t3_256 ,rega 
+75ac 20407711 call bn_lshiftmod_256 
+75ad da20046f arg mem_t3_256 ,rega 
+75ae da40036f arg mem_cz_256 ,regb 
+75af d8a0036f arg mem_cz_256 ,contw 
+75b0 20407672 call bn_mulmod_256 
+75b1 da20044f arg mem_t2_256 ,rega 
+75b2 d8a0046f arg mem_t3_256 ,contw 
+75b3 2040770a call bn_sqrmod_256 
+75b4 da20046f arg mem_t3_256 ,rega 
+75b5 da40040f arg mem_t1_256 ,regb 
+75b6 d8a0046f arg mem_t3_256 ,contw 
+75b7 20407727 call bn_submod_256 
+75b8 da20046f arg mem_t3_256 ,rega 
+75b9 da40040f arg mem_t1_256 ,regb 
+75ba d8a0032f arg mem_cx_256 ,contw 
+75bb 20407727 call bn_submod_256 
+75bc da20040f arg mem_t1_256 ,rega 
+75bd da40032f arg mem_cx_256 ,regb 
+75be d8a0046f arg mem_t3_256 ,contw 
+75bf 20407727 call bn_submod_256 
+75c0 da20046f arg mem_t3_256 ,rega 
+75c1 da40044f arg mem_t2_256 ,regb 
+75c2 d8a0046f arg mem_t3_256 ,contw 
+75c3 20407672 call bn_mulmod_256 
+75c4 da20046f arg mem_t3_256 ,rega 
+75c5 da40042f arg mem_t0_256 ,regb 
+75c6 d8a0034f arg mem_cy_256 ,contw 
+75c7 20207727 branch bn_submod_256 
+
+ecadd_256:
+75c8 da2002af arg mem_az_256 ,rega 
+75c9 d8a0048f arg mem_t7_256 ,contw 
+75ca 2040770a call bn_sqrmod_256 
+75cb da20032f arg mem_cx_256 ,rega 
+75cc da40048f arg mem_t7_256 ,regb 
+75cd d8a0042f arg mem_t0_256 ,contw 
+75ce 20407672 call bn_mulmod_256 
+75cf da2002af arg mem_az_256 ,rega 
+75d0 da40048f arg mem_t7_256 ,regb 
+75d1 d8a0048f arg mem_t7_256 ,contw 
+75d2 20407672 call bn_mulmod_256 
+75d3 da20034f arg mem_cy_256 ,rega 
+75d4 da40048f arg mem_t7_256 ,regb 
+75d5 d8a0040f arg mem_t1_256 ,contw 
+75d6 20407672 call bn_mulmod_256 
+75d7 da20036f arg mem_cz_256 ,rega 
+75d8 d8a0048f arg mem_t7_256 ,contw 
+75d9 2040770a call bn_sqrmod_256 
+75da da20026f arg mem_ax_256 ,rega 
+75db da40048f arg mem_t7_256 ,regb 
+75dc d8a0044f arg mem_t2_256 ,contw 
+75dd 20407672 call bn_mulmod_256 
+75de da20036f arg mem_cz_256 ,rega 
+75df da40048f arg mem_t7_256 ,regb 
+75e0 d8a0048f arg mem_t7_256 ,contw 
+75e1 20407672 call bn_mulmod_256 
+75e2 da20028f arg mem_ay_256 ,rega 
+75e3 da40048f arg mem_t7_256 ,regb 
+75e4 d8a0046f arg mem_t3_256 ,contw 
+75e5 20407672 call bn_mulmod_256 
+75e6 da40042f arg mem_t0_256 ,regb 
+75e7 da20044f arg mem_t2_256 ,rega 
+75e8 d8a0048f arg mem_t7_256 ,contw 
+75e9 20407727 call bn_submod_256 
+75ea da20042f arg mem_t0_256 ,rega 
+75eb da40044f arg mem_t2_256 ,regb 
+75ec d8a0042f arg mem_t0_256 ,contw 
+75ed 2040770e call bn_addmod_256 
+75ee da40040f arg mem_t1_256 ,regb 
+75ef da20046f arg mem_t3_256 ,rega 
+75f0 d8a0044f arg mem_t2_256 ,contw 
+75f1 20407727 call bn_submod_256 
+75f2 da20040f arg mem_t1_256 ,rega 
+75f3 da40046f arg mem_t3_256 ,regb 
+75f4 d8a0040f arg mem_t1_256 ,contw 
+75f5 2040770e call bn_addmod_256 
+75f6 da20040f arg mem_t1_256 ,rega 
+75f7 da40048f arg mem_t7_256 ,regb 
+75f8 d8a0040f arg mem_t1_256 ,contw 
+75f9 20407672 call bn_mulmod_256 
+75fa da20036f arg mem_cz_256 ,rega 
+75fb da4002af arg mem_az_256 ,regb 
+75fc d8a0046f arg mem_t3_256 ,contw 
+75fd 20407672 call bn_mulmod_256 
+75fe da20046f arg mem_t3_256 ,rega 
+75ff da40048f arg mem_t7_256 ,regb 
+7600 d8a0036f arg mem_cz_256 ,contw 
+7601 20407672 call bn_mulmod_256 
+7602 da20048f arg mem_t7_256 ,rega 
+7603 d8a0048f arg mem_t7_256 ,contw 
+7604 2040770a call bn_sqrmod_256 
+7605 da20048f arg mem_t7_256 ,rega 
+7606 da40042f arg mem_t0_256 ,regb 
+7607 d8a0046f arg mem_t3_256 ,contw 
+7608 20407672 call bn_mulmod_256 
+7609 da20048f arg mem_t7_256 ,rega 
+760a da40040f arg mem_t1_256 ,regb 
+760b d8a0040f arg mem_t1_256 ,contw 
+760c 20407672 call bn_mulmod_256 
+760d da20044f arg mem_t2_256 ,rega 
+760e d8a0032f arg mem_cx_256 ,contw 
+760f 2040770a call bn_sqrmod_256 
+7610 da20032f arg mem_cx_256 ,rega 
+7611 da40046f arg mem_t3_256 ,regb 
+7612 d8a0032f arg mem_cx_256 ,contw 
+7613 20407727 call bn_submod_256 
+7614 d8c0032f arg mem_cx_256 ,contr 
+7615 d8a0048f arg mem_t7_256 ,contw 
+7616 20407c8f call memcpy32 
+7617 da20048f arg mem_t7_256 ,rega 
+7618 20407711 call bn_lshiftmod_256 
+7619 da20046f arg mem_t3_256 ,rega 
+761a da40048f arg mem_t7_256 ,regb 
+761b d8a0046f arg mem_t3_256 ,contw 
+761c 20407727 call bn_submod_256 
+761d da20046f arg mem_t3_256 ,rega 
+761e da40044f arg mem_t2_256 ,regb 
+761f d8a0044f arg mem_t2_256 ,contw 
+7620 20407672 call bn_mulmod_256 
+7621 da20044f arg mem_t2_256 ,rega 
+7622 da40040f arg mem_t1_256 ,regb 
+7623 d8a0034f arg mem_cy_256 ,contw 
+7624 20407727 call bn_submod_256 
+7625 da20034f arg mem_cy_256 ,rega 
+7626 da400547 arg mem_p_256 ,regb 
+7627 d8a0034f arg mem_cy_256 ,contw 
+7628 18002600 force 0 ,regc 
+7629 6fe0834f fetch 1 ,mem_cy_256 
+762a 2feffe00 isolate1 0 ,pdata 
+762b 2040f70c call bn_add_256 ,true 
+762c 1a626000 copy regc ,alarm 
+762d da20034f arg mem_cy_256 ,rega 
+762e 2040773c call bn_rshift_256 
+762f 6fe0836e fetch 1 ,mem_cy5_256 
+7630 2e0ffe00 isolate1 0 ,alarm 
+7631 7920fe07 setflag true ,7 ,pdata 
+7632 67e0836e store 1 ,mem_cy5_256 
+7633 20600000 rtn 
+
+bn_invmod_256:
+7634 18a21600 copy contw ,timeup 
+7635 d8a0042f arg mem_tmp0_256 ,contw 
+7636 20407c9f call clear_mem_256 
+7637 18007e00 force 0 ,pdata 
+7638 67e2044f store 4 ,mem_t2_256 
+7639 70042f01 jam 1 ,mem_tmp0_256 
+763a d8a003af arg mem_tmp1_256 ,contw 
+763b 20407ca1 call clear_mem_512 
+763c d8c00547 arg mem_p_256 ,contr 
+763d d8a003ef arg mem_tmp2_256 ,contw 
+763e 20407c8f call memcpy32 
+763f 1a220c00 copy rega ,contr 
+7640 d8a0040f arg mem_tmp3_256 ,contw 
+7641 20407c8f call memcpy32 
+
+bn_invmod_256_2:
+7642 d8c0040f arg mem_tmp3_256 ,contr 
+7643 20407746 call bn_eq_zero_256 
+7644 203a766b branch bn_invmod_256_0 ,blank 
+7645 da20040f arg mem_tmp3_256 ,rega 
+7646 da40042f arg mem_tmp0_256 ,regb 
+7647 20407749 call bn_rshifteven_256 
+7648 da2003ef arg mem_tmp2_256 ,rega 
+7649 da4003af arg mem_tmp1_256 ,regb 
+764a 20407749 call bn_rshifteven_256 
+764b da20040f arg mem_tmp3_256 ,rega 
+764c da4003ef arg mem_tmp2_256 ,regb 
+764d 20407742 call bn_bigeq_256 
+764e 2021765d branch bn_invmod_256_1 ,positive 
+764f da2003ef arg mem_tmp2_256 ,rega 
+7650 da40040f arg mem_tmp3_256 ,regb 
+7651 1a220a00 copy rega ,contw 
+7652 2040773a call bn_sub_256 
+7653 da20042f arg mem_tmp0_256 ,rega 
+7654 da4003af arg mem_tmp1_256 ,regb 
+7655 1a420a00 copy regb ,contw 
+7656 2040770c call bn_add_256 
+7657 efe08011 ifetch 1 ,rega 
+7658 9a60a600 iadd regc ,regc 
+7659 efe08012 ifetch 1 ,regb 
+765a 9a60fe00 iadd regc ,pdata 
+765b e7e08012 istore 1 ,regb 
+765c 20207642 branch bn_invmod_256_2 
+
+bn_invmod_256_1:
+765d da20040f arg mem_tmp3_256 ,rega 
+765e da4003ef arg mem_tmp2_256 ,regb 
+765f 1a220a00 copy rega ,contw 
+7660 2040773a call bn_sub_256 
+7661 da2003af arg mem_tmp1_256 ,rega 
+7662 da40042f arg mem_tmp0_256 ,regb 
+7663 1a420a00 copy regb ,contw 
+7664 2040770c call bn_add_256 
+7665 efe08011 ifetch 1 ,rega 
+7666 9a60a600 iadd regc ,regc 
+7667 efe08012 ifetch 1 ,regb 
+7668 9a60fe00 iadd regc ,pdata 
+7669 e7e08012 istore 1 ,regb 
+766a 20207642 branch bn_invmod_256_2 
+
+bn_invmod_256_0:
+766b da2003af arg mem_tmp1_256 ,rega 
+766c 19620a00 copy timeup ,contw 
+766d 2040769b call bn_p256mod 
+766e da200547 arg mem_p_256 ,rega 
+766f 19622400 copy timeup ,regb 
+7670 19620a00 copy timeup ,contw 
+7671 20207727 branch bn_submod_256 
+
+bn_mulmod_256:
+7672 18a21600 copy contw ,timeup 
+7673 18007000 force 0 ,regext_index 
+7674 d8a003af arg mem_tmp1_256 ,contw 
+7675 20407ca1 call clear_mem_512 
+7676 d8a0068f arg mem_regext ,contw 
+7677 20407ca1 call clear_mem_512 
+7678 1a220c00 copy rega ,contr 
+7679 70068f00 jam 0 ,mem_regext 
+767a 58000000 setarg 0 
+767b 20407704 call bn_load_mem 
+767c 1a420c00 copy regb ,contr 
+767d 20407708 call bn_load_256 
+767e 18000e00 force 0 ,queue 
+767f d8a003af arg mem_tmp1_256 ,contw 
+
+bn_mulmod_256_1:
+7680 d840068f arg mem_regext ,temp 
+7681 18e22400 copy queue ,regb 
+7682 1a4bfe00 lshift2 regb ,pdata 
+7683 9840a400 iadd temp ,regb 
+7684 18000400 force 0 ,temp 
+7685 18002600 force 0 ,regc 
+
+bn_mulmod_256_0:
+7686 efe20005 ifetch 4 ,contw 
+7687 98002200 iforce rega 
+7688 efe20012 ifetch 4 ,regb 
+7689 1a627000 copy regc ,regext_index 
+768a 9deffe00 imul32 regext ,pdata 
+768b 9a20fe00 iadd rega ,pdata 
+768c 9840fe00 iadd temp ,pdata 
+768d e7e20005 istore 4 ,contw 
+768e 1fef0400 rshift32 pdata ,temp 
+768f 1a60a601 increase 1 ,regc 
+7690 2a61fe08 compare 8 ,regc ,0xff 
+7691 2420f686 nbranch bn_mulmod_256_0 ,true 
+7692 18427e00 deposit temp 
+7693 e7e20005 istore 4 ,contw 
+7694 18a08be0 increase -32 ,contw 
+7695 18e08e01 increase 1 ,queue 
+7696 28e1fe08 compare 8 ,queue ,0xff 
+7697 2420f680 nbranch bn_mulmod_256_1 ,true 
+7698 da2003af arg mem_tmp1_256 ,rega 
+7699 19620a00 copy timeup ,contw 
+769a 2020769b branch bn_p256mod 
+
+bn_p256mod:
+769b 470c4023 bpatchx patch23_0 ,mem_patch23 
+769c 18a21600 copy contw ,timeup 
+769d 1a226000 copy rega ,alarm 
+769e da4003ef arg mem_tmp2_256 ,regb 
+769f 1a420a00 copy regb ,contw 
+76a0 20407c9d call memset0_4 
+76a1 e7e40005 istore 8 ,contw 
+76a2 1a208c2c add rega ,44 ,contr 
+76a3 20407c8b call memcpy8 
+76a4 20407c85 call memcpy12 
+76a5 1a422200 copy regb ,rega 
+76a6 20407711 call bn_lshiftmod_256 
+76a7 da4003ef arg mem_tmp2_256 ,regb 
+76a8 1e022200 copy alarm ,rega 
+76a9 19620a00 copy timeup ,contw 
+76aa 2040770e call bn_addmod_256 
+76ab da4003ef arg mem_tmp2_256 ,regb 
+76ac 1a420a00 copy regb ,contw 
+76ad 20407c9d call memset0_4 
+76ae e7e40005 istore 8 ,contw 
+76af 1e008c30 add alarm ,48 ,contr 
+76b0 20407c91 call memcpy16 
+76b1 20407c9d call memset0_4 
+76b2 1a422200 copy regb ,rega 
+76b3 20407711 call bn_lshiftmod_256 
+76b4 da4003ef arg mem_tmp2_256 ,regb 
+76b5 19622200 copy timeup ,rega 
+76b6 1a220a00 copy rega ,contw 
+76b7 2040770e call bn_addmod_256 
+76b8 da4003ef arg mem_tmp2_256 ,regb 
+76b9 1a420a00 copy regb ,contw 
+76ba 1e008c20 add alarm ,32 ,contr 
+76bb 20407c85 call memcpy12 
+76bc 20407c9d call memset0_4 
+76bd e7e40005 istore 8 ,contw 
+76be 1e008c38 add alarm ,56 ,contr 
+76bf 20407c8b call memcpy8 
+76c0 19622200 copy timeup ,rega 
+76c1 1a220a00 copy rega ,contw 
+76c2 2040770e call bn_addmod_256 
+76c3 da4003ef arg mem_tmp2_256 ,regb 
+76c4 1a420a00 copy regb ,contw 
+76c5 1e008c24 add alarm ,36 ,contr 
+76c6 20407c85 call memcpy12 
+76c7 1e008c34 add alarm ,52 ,contr 
+76c8 20407c85 call memcpy12 
+76c9 1e008c34 add alarm ,52 ,contr 
+76ca 20407c86 call memcpy4 
+76cb 1e008c20 add alarm ,32 ,contr 
+76cc 20407c86 call memcpy4 
+76cd 19622200 copy timeup ,rega 
+76ce 1a220a00 copy rega ,contw 
+76cf 2040770e call bn_addmod_256 
+76d0 da4003ef arg mem_tmp2_256 ,regb 
+76d1 1a420a00 copy regb ,contw 
+76d2 1e008c2c add alarm ,44 ,contr 
+76d3 20407c85 call memcpy12 
+76d4 20407c9d call memset0_4 
+76d5 e7e40005 istore 8 ,contw 
+76d6 1e008c20 add alarm ,32 ,contr 
+76d7 20407c86 call memcpy4 
+76d8 1e008c28 add alarm ,40 ,contr 
+76d9 20407c86 call memcpy4 
+76da 19622200 copy timeup ,rega 
+76db 1a220a00 copy rega ,contw 
+76dc 20407727 call bn_submod_256 
+76dd da4003ef arg mem_tmp2_256 ,regb 
+76de 1a420a00 copy regb ,contw 
+76df 1e008c30 add alarm ,48 ,contr 
+76e0 20407c8b call memcpy8 
+76e1 20407c8b call memcpy8 
+76e2 18007e00 force 0 ,pdata 
+76e3 e7e40005 istore 8 ,contw 
+76e4 1e008c24 add alarm ,36 ,contr 
+76e5 20407c86 call memcpy4 
+76e6 1e008c2c add alarm ,44 ,contr 
+76e7 20407c86 call memcpy4 
+76e8 19622200 copy timeup ,rega 
+76e9 1a220a00 copy rega ,contw 
+76ea 20407727 call bn_submod_256 
+76eb da4003ef arg mem_tmp2_256 ,regb 
+76ec 1a420a00 copy regb ,contw 
+76ed 1e008c34 add alarm ,52 ,contr 
+76ee 20407c85 call memcpy12 
+76ef 1e008c20 add alarm ,32 ,contr 
+76f0 20407c85 call memcpy12 
+76f1 20407c9d call memset0_4 
+76f2 1e008c30 add alarm ,48 ,contr 
+76f3 20407c86 call memcpy4 
+76f4 19622200 copy timeup ,rega 
+76f5 1a220a00 copy rega ,contw 
+76f6 20407727 call bn_submod_256 
+76f7 da4003ef arg mem_tmp2_256 ,regb 
+76f8 1a420a00 copy regb ,contw 
+76f9 1e008c38 add alarm ,56 ,contr 
+76fa 20407c8b call memcpy8 
+76fb 20407c9d call memset0_4 
+76fc 1e008c24 add alarm ,36 ,contr 
+76fd 20407c85 call memcpy12 
+76fe 20407c9d call memset0_4 
+76ff 1e008c34 add alarm ,52 ,contr 
+7700 20407c86 call memcpy4 
+7701 19622200 copy timeup ,rega 
+7702 1a220a00 copy rega ,contw 
+7703 20207727 branch bn_submod_256 
+
+bn_load_mem:
+7704 18007220 force 32 ,loopcnt 
+7705 d8a0068f arg mem_regext ,contw 
+7706 98a08a00 iadd contw ,contw 
+7707 20207cdc branch memcpy 
+
+bn_load_256:
+7708 18007208 force 8 ,loopcnt 
+7709 202074e5 branch bn_load_0 
+
+bn_sqrmod_256:
+770a 1a222400 copy rega ,regb 
+770b 20207672 branch bn_mulmod_256 
+
+bn_add_256:
+770c 18007208 force 8 ,loopcnt 
+770d 202074ae branch bn_add + 1 
+
+bn_addmod_256:
+770e 2040770c call bn_add_256 
+770f 18a22200 copy contw ,rega 
+7710 20207712 branch bn_lshiftmod_ismod_256 
+
+bn_lshiftmod_256:
+7711 2040773f call bn_lshift_256 
+
+bn_lshiftmod_ismod_256:
+7712 2a6ffe00 isolate1 0 ,regc 
+7713 2020f71b branch bn_lshiftmod_p_256 ,true 
+7714 da400547 arg mem_p_256 ,regb 
+7715 1a222600 copy rega ,regc 
+7716 1a20a3e0 increase -32 ,rega 
+7717 20407742 call bn_bigeq_256 
+7718 24610000 nrtn positive 
+7719 1a622200 copy regc ,rega 
+771a 20207723 branch sub_p2_256 
+
+bn_lshiftmod_p_256:
+771b 20407723 call sub_p2_256 
+771c 1a222600 copy rega ,regc 
+771d 1a20a3e0 increase -32 ,rega 
+771e da400547 arg mem_p_256 ,regb 
+771f 20407742 call bn_bigeq_256 
+7720 24610000 nrtn positive 
+7721 1a622200 copy regc ,rega 
+7722 20207723 branch sub_p2_256 
+
+sub_p2_256:
+7723 1a20a3e0 increase -32 ,rega 
+7724 da400547 arg mem_p_256 ,regb 
+7725 1a220a00 copy rega ,contw 
+7726 2020773a branch bn_sub_256 
+
+bn_submod_256:
+7727 2040773a call bn_sub_256 
+7728 2020f731 branch bn_submod_256_np ,true 
+7729 18a0a3e0 add contw ,-32 ,rega 
+772a da400547 arg mem_p_256 ,regb 
+772b 20407742 call bn_bigeq_256 
+772c 24610000 nrtn positive 
+772d da400547 arg mem_p_256 ,regb 
+772e 18a0a3e0 add contw ,-32 ,rega 
+772f 1a220a00 copy rega ,contw 
+7730 2020773a branch bn_sub_256 
+
+bn_submod_256_np:
+7731 18a0a3e0 add contw ,-32 ,rega 
+7732 da400547 arg mem_p_256 ,regb 
+7733 1a220a00 copy rega ,contw 
+7734 2040770c call bn_add_256 
+7735 20608000 rtn true 
+7736 18a0a3e0 add contw ,-32 ,rega 
+7737 da400547 arg mem_p_256 ,regb 
+7738 1a220a00 copy rega ,contw 
+7739 2020770c branch bn_add_256 
+
+bn_sub_256:
+773a 18007208 force 8 ,loopcnt 
+773b 202074bc branch bn_sub + 1 
+
+bn_rshift_256:
+773c 18007208 force 8 ,loopcnt 
+773d 1a20a21c increase 28 ,rega 
+773e 202074cb branch bn_rshift 
+
+bn_lshift_256:
+773f 18007208 force 8 ,loopcnt 
+7740 18002600 force 0 ,regc 
+7741 202074d9 branch bn_lshift_0 
+
+bn_bigeq_256:
+7742 18007208 force 8 ,loopcnt 
+7743 1a20a21c increase 28 ,rega 
+7744 1a40a41c increase 28 ,regb 
+7745 202074a3 branch bn_bigeq_0 
+
+bn_eq_zero_256:
+7746 efe40006 ifetch 8 ,contr 
+7747 247a0000 nrtn blank 
+7748 20207491 branch bn_eq_zero 
+
+bn_rshifteven_256:
+7749 1a226000 copy rega ,alarm 
+
+bn_rshifteven_256_1:
+774a 1e022200 copy alarm ,rega 
+774b efe08011 ifetch 1 ,rega 
+774c 2feffe00 isolate1 0 ,pdata 
+774d 20608000 rtn true 
+774e 2040773c call bn_rshift_256 
+774f efe08012 ifetch 1 ,regb 
+7750 2fec0000 isolate0 0 ,pdata 
+7751 2020f759 branch bn_rshifteven_256_0 ,true 
+7752 da200547 arg mem_p_256 ,rega 
+7753 1a420a00 copy regb ,contw 
+7754 2040770c call bn_add_256 
+7755 efe08012 ifetch 1 ,regb 
+7756 9a60fe00 iadd regc ,pdata 
+7757 e7e08012 istore 1 ,regb 
+7758 1a40a5e0 increase -32 ,regb 
+
+bn_rshifteven_256_0:
+7759 1a40a220 add regb ,32 ,rega 
+775a 18007209 force 9 ,loopcnt 
+775b 204074cb call bn_rshift 
+775c 2020774a branch bn_rshifteven_256_1 
+
+ui_init:
+775d 20758000 rtn wake 
+775e 204023ba call lpm_disable_exen_output 
+775f 20407764 call ui_button_init 
+7760 20407809 call ui_timer_init 
+7761 2020779a branch ui_led_init_global 
+
+ui_dispatch:
+7762 204077bd call ui_led_dispatch 
+7763 202077f8 branch ui_timer_check 
+
+ui_button_init:
+7764 6fe0c503 fetch 1 ,mem_ui_button_gpio 
+7765 c17f8000 rtneq ui_button_gpio_disable 
+7766 98000400 iforce temp 
+7767 20406ef1 call gpio_config_output 
+7768 6848c503 fetcht 1 ,mem_ui_button_gpio 
+7769 20406eed call gpio_out_inactive 
+776a 20000064 nop 100 
+776b 6848c503 fetcht 1 ,mem_ui_button_gpio 
+776c 20406ed7 call gpio_config_input 
+776d 2020776e branch ui_button_polling 
+
+ui_button_polling:
+776e 470cc023 bpatchx patch23_1 ,mem_patch23 
+776f 6fe0c503 fetch 1 ,mem_ui_button_gpio 
+7770 c17f8000 rtneq ui_button_gpio_disable 
+7771 1fe20400 copy pdata ,temp 
+7772 20406ee0 call gpio_get_bit 
+7773 2420f780 nbranch ui_button_up ,true 
+
+ui_button_down:
+7774 2040778a call ui_button_check_long_press 
+7775 6fe14500 fetch 2 ,mem_ui_state_map 
+7776 79207e0c set1 ui_state_btn_down ,pdata 
+7777 67e14500 store 2 ,mem_ui_state_map 
+7778 6fe0c4fb fetch 1 ,mem_ui_button_last_state 
+7779 c1000000 rtneq ui_button_state_down 
+777a 7044fb00 jam ui_button_state_down ,mem_ui_button_last_state 
+777b 6fe0c502 fetch 1 ,mem_ui_button_timeout 
+777c 67e0c4fa store 1 ,mem_ui_button_timer 
+777d 20407791 call lpm_button_get_wake_lock 
+777e 70064d2c jam bt_evt_button_down ,mem_fifo_temp 
+777f 20207819 branch ui_ipc_send_event 
+
+ui_button_up:
+7780 6fe14500 fetch 2 ,mem_ui_state_map 
+7781 793ffe0c set0 ui_state_btn_down ,pdata 
+7782 67e14500 store 2 ,mem_ui_state_map 
+7783 6fe0c4fb fetch 1 ,mem_ui_button_last_state 
+7784 c1008000 rtneq ui_button_state_up 
+7785 7044fb01 jam ui_button_state_up ,mem_ui_button_last_state 
+7786 7044fa00 jam 0 ,mem_ui_button_timer 
+7787 20407793 call lpm_button_clean_wake_lock 
+7788 70064d2d jam bt_evt_button_up ,mem_fifo_temp 
+7789 20207819 branch ui_ipc_send_event 
+
+ui_button_check_long_press:
+778a 6fe0c4fa fetch 1 ,mem_ui_button_timer 
+778b 207a0000 rtn blank 
+778c 1fe0ffff increase -1 ,pdata 
+778d 67e0c4fa store 1 ,mem_ui_button_timer 
+778e 247a0000 nrtn blank 
+778f 70064d10 jam bt_evt_button_long_pressed ,mem_fifo_temp 
+7790 20207819 branch ui_ipc_send_event 
+
+lpm_button_get_wake_lock:
+7791 d8e00007 arg wake_lock_button ,queue 
+7792 202024be branch lpm_get_wake_lock 
+
+lpm_button_clean_wake_lock:
+7793 d8e00007 arg wake_lock_button ,queue 
+7794 202024c2 branch lpm_put_wake_lock 
+
+calc_curr_struct_prt:
+7795 470d4023 bpatchx patch23_2 ,mem_patch23 
+7796 6fe14506 fetch 2 ,mem_ui_led_struct_ptr 
+7797 1a2fa40b mul32 rega ,led_offset_length ,regb 
+7798 9a40a400 iadd regb ,regb 
+7799 20600000 rtn 
+
+ui_led_init_global:
+779a 6fe0c505 fetch 1 ,mem_ui_led_struct_num 
+779b 207a0000 rtn blank 
+779c 1fe27200 copy pdata ,loopcnt 
+779d 6fe14506 fetch 2 ,mem_ui_led_struct_ptr 
+779e 1fe22400 copy pdata ,regb 
+
+ui_led_init_loop:
+779f 1a40a602 add regb ,led_offset_led_gpio ,regc 
+77a0 e8408013 ifetcht 1 ,regc 
+77a1 204077a5 call ui_led_init_set 
+77a2 1a40a40b increase led_offset_length ,regb 
+77a3 c200779f loop ui_led_init_loop 
+77a4 20600000 rtn 
+
+ui_led_init_set:
+77a5 6fe0c504 fetch 1 ,mem_ui_led_init_state_set 
+77a6 203a6eed branch gpio_out_inactive ,blank 
+77a7 20206ef1 branch gpio_out_active 
+
+ui_led_on_global:
+77a8 20407795 call calc_curr_struct_prt 
+77a9 58000002 setarg ui_led_state_lighting 
+77aa e7e08012 istore 1 ,regb 
+77ab 204077f2 call ui_led_stop_timer 
+77ac 202077c9 branch ui_led_on_static 
+
+ui_led_blink_stop_global:
+
+ui_led_off_global:
+77ad 20407795 call calc_curr_struct_prt 
+77ae 58000003 setarg ui_led_state_darking 
+77af e7e08012 istore 1 ,regb 
+77b0 204077f2 call ui_led_stop_timer 
+77b1 202077c6 branch ui_led_off_static 
+
+ui_led_blink_start_global:
+77b2 20407795 call calc_curr_struct_prt 
+77b3 58000001 setarg ui_led_state_blink_start 
+77b4 e7e08012 istore 1 ,regb 
+77b5 580000ff setarg led_infinite_flash_num 
+77b6 e7e08005 istore 1 ,contw 
+77b7 202077c6 branch ui_led_off_static 
+
+ui_led_set_style_global:
+77b8 20407795 call calc_curr_struct_prt 
+77b9 df20000b arg led_offset_length ,loopcnt 
+77ba 1a620c00 copy regc ,contr 
+77bb 1a420a00 copy regb ,contw 
+77bc 20207cce branch memcpy_fast 
+
+ui_led_dispatch:
+77bd 6fe0c505 fetch 1 ,mem_ui_led_struct_num 
+77be 207a0000 rtn blank 
+77bf da200000 arg 0 ,rega 
+
+ui_led_blink_polling:
+77c0 204077cc call ui_led_change_style_by_type 
+77c1 1a20a201 increase 1 ,rega 
+77c2 6fe0c505 fetch 1 ,mem_ui_led_struct_num 
+77c3 9a267c00 isub rega ,null 
+77c4 20628000 rtn zero 
+77c5 202077c0 branch ui_led_blink_polling 
+
+ui_led_off_static:
+77c6 1a40a602 add regb ,led_offset_led_gpio ,regc 
+77c7 e8408013 ifetcht 1 ,regc 
+77c8 20206eed branch gpio_out_inactive 
+
+ui_led_on_static:
+77c9 1a40a602 add regb ,led_offset_led_gpio ,regc 
+77ca e8408013 ifetcht 1 ,regc 
+77cb 20206ef1 branch gpio_out_active 
+
+ui_led_change_style_by_type:
+77cc 1a208e0b add rega ,ui_led_blink ,queue 
+77cd 20407cf1 call timer_check 
+77ce 247a0000 nrtn blank 
+77cf 20407795 call calc_curr_struct_prt 
+77d0 efe08012 ifetch 1 ,regb 
+77d1 c00177c9 beq ui_led_state_lighting ,ui_led_on_static 
+77d2 c001f7c6 beq ui_led_state_darking ,ui_led_off_static 
+77d3 c00077c6 beq ui_led_state_blink_stop ,ui_led_off_static 
+77d4 c002f7e0 beq ui_led_state_blink_darking ,ui_led_blink_state_darking 
+
+ui_led_blink_state_lighting:
+77d5 204077c9 call ui_led_on_static 
+77d6 1a40a607 add regb ,led_offset_cb_ledon ,regc 
+77d7 20407c4b call push_stack 
+77d8 efe10013 ifetch 2 ,regc 
+77d9 20407d7b call callback_func 
+77da 20407c57 call pop_stack 
+77db 58000005 setarg ui_led_state_blink_darking 
+77dc e7e08012 istore 1 ,regb 
+77dd 1a40a603 add regb ,led_offset_on_time ,regc 
+77de efe10013 ifetch 2 ,regc 
+77df 202077f0 branch ui_led_blink_timer_start 
+
+ui_led_blink_state_darking:
+77e0 204077c6 call ui_led_off_static 
+77e1 1a40a609 add regb ,led_offset_cb_ledoff ,regc 
+77e2 20407c4b call push_stack 
+77e3 efe10013 ifetch 2 ,regc 
+77e4 20407d7b call callback_func 
+77e5 20407c57 call pop_stack 
+77e6 1a40a601 add regb ,led_offset_blink_count ,regc 
+77e7 efe08013 ifetch 1 ,regc 
+77e8 c07ff7ec beq led_infinite_flash_num ,ui_led_blink_infinite 
+77e9 1fe0ffff increase -1 ,pdata 
+77ea e7e08013 istore 1 ,regc 
+77eb 203a77ad branch ui_led_blink_stop_global ,blank 
+
+ui_led_blink_infinite:
+77ec 58000004 setarg ui_led_state_blink_lighting 
+77ed e7e08012 istore 1 ,regb 
+77ee 1a40a605 add regb ,led_offset_off_time ,regc 
+77ef efe10013 ifetch 2 ,regc 
+
+ui_led_blink_timer_start:
+77f0 1a208e0b add rega ,ui_led_blink ,queue 
+77f1 20207ce3 branch timer_init 
+
+ui_led_stop_timer:
+77f2 58000000 setarg 0 
+77f3 202077f0 branch ui_led_blink_timer_start 
+
+ui_timer_timeout:
+77f4 58001000 setarg 0x1000 
+77f5 1ff07e00 lshift16 pdata ,pdata 
+77f6 9a40a400 iadd regb ,regb 
+77f7 20600000 rtn 
+
+ui_timer_check:
+77f8 470dc023 bpatchx patch23_3 ,mem_patch23 
+77f9 da200000 arg 0 ,rega 
+77fa 684a44fc fetcht 4 ,mem_ui_timer_last_btclk 
+77fb 1c422400 copy clkn_bt ,regb 
+77fc 1a427e00 copy regb ,pdata 
+77fd 98467c00 isub temp ,null 
+77fe 244177f4 ncall ui_timer_timeout ,positive 
+
+ui_timer_check_loop:
+77ff 1a427e00 copy regb ,pdata 
+7800 184084a0 increase 160 ,temp 
+7801 184084a0 increase 160 ,temp 
+7802 98467c00 isub temp ,null 
+7803 2421780c nbranch ui_timer_check_end ,positive 
+7804 1a20a201 increase 1 ,rega 
+7805 1a217e0f and rega ,0x0f ,pdata 
+7806 243a77ff nbranch ui_timer_check_loop ,blank 
+7807 da200000 arg 0 ,rega 
+7808 20407812 call ui_timer_check_send_evt 
+
+ui_timer_init:
+7809 1c427e00 copy clkn_bt ,pdata 
+780a 67e244fc store 4 ,mem_ui_timer_last_btclk 
+780b 20600000 rtn 
+
+ui_timer_check_end:
+780c 1a227e00 copy rega ,pdata 
+780d 207a0000 rtn blank 
+780e 18408560 increase -160 ,temp 
+780f 18408560 increase -160 ,temp 
+7810 793f841c set0 28 ,temp 
+7811 604a44fc storet 4 ,mem_ui_timer_last_btclk 
+
+ui_timer_check_send_evt:
+7812 20203749 branch app_evt_timer 
+
+ui_ipc_get_lock:
+7813 7044e801 jam 1 ,mem_ipc_lock_bt 
+
+ui_ipc_get_lock_wait:
+7814 6fe0c4e9 fetch 1 ,mem_ipc_lock_c51 
+7815 243a7814 nbranch ui_ipc_get_lock_wait ,blank 
+7816 20600000 rtn 
+
+ui_ipc_put_lock:
+7817 7044e800 jam 0 ,mem_ipc_lock_bt 
+7818 20600000 rtn 
+
+ui_ipc_send_event:
+7819 470e4023 bpatchx patch23_4 ,mem_patch23 
+781a 6fe0c3cf fetch 1 ,mem_device_option 
+781b c007ca1d beq dvc_op_keyboard ,keyboard_ui_ipc_send_event 
+781c 20407813 call ui_ipc_get_lock 
+781d 1a227e00 copy rega ,pdata 
+781e 67e20662 store 4 ,mem_rega 
+781f da2044ea arg mem_ipc_fifo_bt2c51 ,rega 
+7820 20407d8d call fifo_in 
+7821 6fe20662 fetch 4 ,mem_rega 
+7822 1fe22200 copy pdata ,rega 
+7823 20207817 branch ui_ipc_put_lock 
+
+ui_ipc_send_cmd:
+7824 470ec023 bpatchx patch23_5 ,mem_patch23 
+7825 20407813 call ui_ipc_get_lock 
+7826 1a227e00 copy rega ,pdata 
+7827 67e20662 store 4 ,mem_rega 
+7828 da2044f2 arg mem_ipc_fifo_c512bt ,rega 
+7829 20407d8d call fifo_in 
+782a 6fe20662 fetch 4 ,mem_rega 
+782b 1fe22200 copy pdata ,rega 
+782c 20207817 branch ui_ipc_put_lock 
+
+ui_ipc_clean_all_fifo:
+782d 58000000 setarg 0 
+782e 67e444f2 store util_fifo_len ,mem_ipc_fifo_c512bt 
+782f 67e444ea store util_fifo_len ,mem_ipc_fifo_bt2c51 
+7830 20600000 rtn 
+
+check_51cmd:
+7831 470f4023 bpatchx patch23_6 ,mem_patch23 
+7832 6fe0c114 fetch 1 ,mem_hci_cmd 
+7833 247a0000 nrtn blank 
+7834 da2044f2 arg mem_ipc_fifo_c512bt ,rega 
+7835 20407da5 call fifo_is_empty 
+7836 207a0000 rtn blank 
+7837 70064c00 jam ipc_continue_process ,mem_ipc_skip_continue_proc 
+7838 2040783c call check_51cmd_once 
+7839 6fe0864c fetch 1 ,mem_ipc_skip_continue_proc 
+783a 203a7831 branch check_51cmd ,blank 
+783b 20600000 rtn 
+
+check_51cmd_once:
+783c 20407813 call ui_ipc_get_lock 
+783d da2044f2 arg mem_ipc_fifo_c512bt ,rega 
+783e 20407d99 call fifo_out 
+783f 1fe20400 copy pdata ,temp 
+7840 20407817 call ui_ipc_put_lock 
+7841 470fc023 bpatchx patch23_7 ,mem_patch23 
+7842 18427e00 copy temp ,pdata 
+7843 207a0000 rtn blank 
+7844 c006f860 beq bt_cmd_start_adv ,check_51cmd_adv 
+7845 c0077866 beq bt_cmd_stop_adv ,check_51cmd_stop_adv 
+7846 c007f86b beq bt_cmd_start_direct_adv ,check_51cmd_direct_adv 
+7847 c0087871 beq bt_cmd_stop_direct_adv ,check_51cmd_stop_direct_adv 
+7848 c009f87b beq bt_cmd_led_off ,check_51cmd_led_off 
+7849 c00a787d beq bt_cmd_led_on ,check_51cmd_led_on 
+784a c00af87f beq bt_cmd_led_blink ,check_51cmd_led_start_blink 
+784b c00b7889 beq bt_cmd_le_start_conn ,check_51cmd_le_start_con 
+784c c00bf88c beq bt_cmd_le_start_scan ,check_51cmd_start_scan 
+784d c00c788e beq bt_cmd_le_stop_scan ,check_51cmd_stop_scan 
+784e c00cf891 beq bt_cmd_enter_hibernate ,check_51cmd_hibernate 
+784f 67e0864d store 1 ,mem_fifo_temp 
+
+check_51cmd_once_continue:
+7850 6fe0864d fetch 1 ,mem_fifo_temp 
+7851 c584f859 bmark0 mark_context ,check_51cmd_check_idle 
+7852 47104024 bpatchx patch24_0 ,mem_patch24 
+7853 6fe0864d fetch 1 ,mem_fifo_temp 
+7854 c008f876 beq bt_cmd_le_disconnect ,check_51cmd_le_disconnect 
+7855 c00df899 beq bt_cmd_le_smp_security_request ,check_51cmd_le_smp_sec_req 
+7856 c009787a beq bt_cmd_le_update_conn ,check_51cmd_ble_update_connect_param 
+7857 c00fee95 beq bt_cmd_store_reconn_info_le ,eeprom_store_le_reconn_info 
+7858 20600000 rtn 
+
+check_51cmd_check_idle:
+7859 67e0864d store 1 ,mem_fifo_temp 
+785a 2040205d call context_check_idle 
+785b 2022f85e branch check_51cmd_restore ,zero 
+785c 20402062 call context_search_plap 
+785d 24628000 nrtn zero 
+
+check_51cmd_restore:
+785e 70064c01 jam ipc_skip_continue_process ,mem_ipc_skip_continue_proc 
+785f 20207824 branch ui_ipc_send_cmd 
+
+check_51cmd_adv:
+7860 70438c01 jam on ,mem_le_adv_enable 
+7861 70438f00 jam adv_ind ,mem_le_adv_type 
+7862 6fe14500 fetch 2 ,mem_ui_state_map 
+7863 79207e0b set1 ui_state_ble_adv ,pdata 
+7864 67e14500 store 2 ,mem_ui_state_map 
+7865 20600000 rtn 
+
+check_51cmd_stop_adv:
+7866 6fe14500 fetch 2 ,mem_ui_state_map 
+7867 793ffe0b set0 ui_state_ble_adv ,pdata 
+7868 67e14500 store 2 ,mem_ui_state_map 
+7869 70438c00 jam off ,mem_le_adv_enable 
+786a 20600000 rtn 
+
+check_51cmd_direct_adv:
+786b 70438c01 jam on ,mem_le_adv_enable 
+786c 70438f01 jam adv_direct_ind ,mem_le_adv_type 
+786d 6fe14500 fetch 2 ,mem_ui_state_map 
+786e 79207e0b set1 ui_state_ble_adv ,pdata 
+786f 67e14500 store 2 ,mem_ui_state_map 
+7870 20600000 rtn 
+
+check_51cmd_stop_direct_adv:
+7871 6fe14500 fetch 2 ,mem_ui_state_map 
+7872 793ffe0b set0 ui_state_ble_adv ,pdata 
+7873 67e14500 store 2 ,mem_ui_state_map 
+7874 70438c00 jam off ,mem_le_adv_enable 
+7875 20600000 rtn 
+
+check_51cmd_le_disconnect:
+7876 58000014 setarg 20 
+7877 67e10196 store 2 ,mem_le_superto 
+7878 67e142f7 store 2 ,mem_le_init_superto 
+7879 202030a3 branch le_send_terminate_ind_user_terminated 
+
+check_51cmd_ble_update_connect_param:
+787a 20202e71 branch le_l2cap_tx_update_req 
+
+check_51cmd_led_off:
+787b da200000 arg 0 ,rega 
+787c 202077ad branch ui_led_off_global 
+
+check_51cmd_led_on:
+787d da200000 arg 0 ,rega 
+787e 202077a8 branch ui_led_on_global 
+
+check_51cmd_led_start_blink:
+787f da200000 arg 0 ,rega 
+7880 20407795 call calc_curr_struct_prt 
+7881 efe08012 ifetch 1 ,regb 
+7882 c000f886 beq ui_led_state_blink_start ,check_51cmd_led_start_blink_in_blink 
+7883 c0027886 beq ui_led_state_blink_lighting ,check_51cmd_led_start_blink_in_blink 
+7884 c002f886 beq ui_led_state_blink_darking ,check_51cmd_led_start_blink_in_blink 
+7885 202077b2 branch ui_led_blink_start_global 
+
+check_51cmd_led_start_blink_in_blink:
+7886 efe08006 ifetch 1 ,contr 
+7887 c17f8000 rtneq led_infinite_flash_num 
+7888 202077b2 branch ui_led_blink_start_global 
+
+check_51cmd_le_start_con:
+7889 70434701 jam on ,mem_le_scan_enable 
+788a 7041141b jam hci_cmd_le_create_conn ,mem_hci_cmd 
+788b 20600000 rtn 
+
+check_51cmd_start_scan:
+788c 70434701 jam on ,mem_le_scan_enable 
+788d 20600000 rtn 
+
+check_51cmd_stop_scan:
+788e 70434700 jam off ,mem_le_scan_enable 
+788f 70411400 jam 0 ,mem_hci_cmd 
+7890 20600000 rtn 
+
+check_51cmd_hibernate:
+7891 6fe143de fetch 2 ,mem_cb_before_hibernate 
+7892 20407d7b call callback_func 
+7893 6fe0c503 fetch 1 ,mem_ui_button_gpio 
+7894 c07ff897 beq ui_button_gpio_disable ,check_51cmd_hibernate_btn_disabled 
+7895 1fe20400 copy pdata ,temp 
+7896 20406ed7 call gpio_config_input 
+
+check_51cmd_hibernate_btn_disabled:
+7897 2040782d call ui_ipc_clean_all_fifo 
+7898 202023ff branch lpm_hibernate 
+
+check_51cmd_le_smp_sec_req:
+7899 20202eb3 branch le_send_smp_security_request 
+
+ui_check_paring_button:
+789a 6fe0c500 fetch 1 ,mem_ui_state_map 
+789b c4060000 rtnbit0 ui_state_btn_down 
+789c 20600000 rtn 
+
+queue_init:
+789d 6fe14404 fetch 2 ,mem_queue_ptr 
+789e 1fe08a02 add pdata ,queue_offset_curr_num ,contw 
+789f 58000000 setarg 0 
+78a0 e7e18005 istore 3 ,contw 
+78a1 20600000 rtn 
+
+queue_push:
+78a2 4710c024 bpatchx patch24_1 ,mem_patch24 
+78a3 20407dbe call disable_user 
+78a4 204078ee call queue_full 
+78a5 207a0000 rtn blank 
+78a6 6fe14404 fetch 2 ,mem_queue_ptr 
+78a7 1fe0a402 add pdata ,queue_offset_curr_num ,regb 
+78a8 e8408012 ifetcht 1 ,regb 
+78a9 18408401 increase 1 ,temp 
+78aa e0408012 istoret 1 ,regb 
+78ab e840803f ifetcht 1 ,pdata 
+78ac 18427200 copy temp ,loopcnt 
+78ad 1fe0a404 add pdata ,queue_offset_write_ptr ,regb 
+78ae efe08012 ifetch 1 ,regb 
+78af 984ffe00 imul32 temp ,pdata 
+78b0 98c08a00 iadd contr ,contw 
+78b1 1a220c00 copy rega ,contr 
+
+calc_queue_next_ptr:
+78b2 20407cdc call memcpy 
+78b3 204078f2 call queue_get_size 
+78b4 1fe0ffff pincrease -1 
+78b5 e8408012 ifetcht 1 ,regb 
+78b6 18408401 increase 1 ,temp 
+78b7 98410400 iand temp ,temp 
+78b8 e0408012 istoret 1 ,regb 
+78b9 20207dbc branch enable_user 
+
+queue_pop:
+78ba 47114024 bpatchx patch24_2 ,mem_patch24 
+78bb 20407dbe call disable_user 
+78bc 204078ea call queue_empty 
+78bd 207a0000 rtn blank 
+78be 6fe14404 fetch 2 ,mem_queue_ptr 
+78bf 1fe0a402 add pdata ,queue_offset_curr_num ,regb 
+78c0 e8408012 ifetcht 1 ,regb 
+78c1 184085ff increase -1 ,temp 
+78c2 e0408012 istoret 1 ,regb 
+78c3 e840803f ifetcht 1 ,pdata 
+78c4 18427200 copy temp ,loopcnt 
+78c5 1fe0a403 add pdata ,queue_offset_read_ptr ,regb 
+78c6 efe08012 ifetch 1 ,regb 
+78c7 984ffe00 imul32 temp ,pdata 
+78c8 98c08c00 iadd contr ,contr 
+78c9 18c08c01 increase 1 ,contr 
+78ca 1a220a00 copy rega ,contw 
+78cb 202078b2 branch calc_queue_next_ptr 
+
+queue_get_new_ele:
+78cc 20407dbe call disable_user 
+78cd 204078ea call queue_empty 
+78ce 207a0000 rtn blank 
+78cf 6fe14404 fetch 2 ,mem_queue_ptr 
+78d0 e840803f ifetcht 1 ,pdata 
+78d1 18427200 copy temp ,loopcnt 
+78d2 1fe0a403 add pdata ,queue_offset_read_ptr ,regb 
+78d3 efe08012 ifetch 1 ,regb 
+78d4 984ffe00 imul32 temp ,pdata 
+78d5 98c08c00 iadd contr ,contr 
+78d6 18c08c01 increase 1 ,contr 
+78d7 18c22400 copy contr ,regb 
+78d8 1a220a00 copy rega ,contw 
+78d9 20407cdc call memcpy 
+78da 20207dbc branch enable_user 
+
+queue_store_new_ele:
+78db 20407dbe call disable_user 
+78dc 204078ea call queue_empty 
+78dd 207a0000 rtn blank 
+78de 6fe14404 fetch 2 ,mem_queue_ptr 
+78df e840803f ifetcht 1 ,pdata 
+78e0 18427200 copy temp ,loopcnt 
+78e1 1fe0a403 add pdata ,queue_offset_read_ptr ,regb 
+78e2 efe08012 ifetch 1 ,regb 
+78e3 984ffe00 imul32 temp ,pdata 
+78e4 98c08c00 iadd contr ,contr 
+78e5 18c08a02 add contr ,2 ,contw 
+78e6 1a220c00 copy rega ,contr 
+78e7 1f20f3ff increase -1 ,loopcnt 
+78e8 20407cdc call memcpy 
+78e9 20207dbc branch enable_user 
+
+queue_empty:
+78ea 6fe14404 fetch 2 ,mem_queue_ptr 
+78eb 1fe08c02 add pdata ,queue_offset_curr_num ,contr 
+78ec efe08006 ifetch 1 ,contr 
+78ed 20600000 rtn 
+
+queue_full:
+78ee 204078f2 call queue_get_size 
+78ef e8408006 ifetcht 1 ,contr 
+78f0 98467e00 isub temp ,pdata 
+78f1 20600000 rtn 
+
+queue_get_size:
+78f2 6fe14404 fetch 2 ,mem_queue_ptr 
+78f3 1fe08c01 add pdata ,queue_offset_length ,contr 
+78f4 efe08006 ifetch 1 ,contr 
+78f5 20600000 rtn 
+
+usb_isr:
+78f6 4711c024 bpatchx patch24_3 ,mem_patch24 
+78f7 6ff08c22 fetch 1 ,core_usb_status 
+78f8 2feffe03 isolate1 usb_status_reset ,pdata 
+78f9 2040f905 call usb_init_restart ,true 
+78fa 6ff10c22 fetch 2 ,core_usb_status 
+78fb 67f10c22 store 2 ,core_usb_status 
+78fc 67e106e7 store 2 ,mem_usb_status 
+78fd 20407963 call usb_nak_state_judge 
+78fe 20407994 call usb_rx 
+78ff 20407b8a call usb0_tx 
+7900 20407bd3 call usb_tx 
+7901 2020795b branch usb_nak_state 
+
+usb_init:
+7902 47124024 bpatchx patch24_4 ,mem_patch24 
+7903 20407384 call enable_authrom 
+7904 20407922 call usb_init_param 
+
+usb_init_restart:
+7905 708c0000 jam 0x00 ,core_usb_config 
+7906 20002710 nop 10000 
+7907 708c1200 jam 0x0 ,core_usb_hmode 
+7908 6ff10050 fetch 2 ,core_clkoff 
+7909 793ffe0a set0 clock_off_usb ,pdata 
+790a 67f10050 store 2 ,core_clkoff 
+790b 708c1021 jam 0x21 ,core_usb_epmap 
+790c 708c119d jam 0x9d ,core_usb_pupd 
+790d 708c003c jam 0x3c ,core_usb_config 
+790e 58000741 setarg mem_usb_rxbuf 
+790f 67f10c02 store 2 ,core_usb_rx_saddr 
+7910 67f10c06 store 2 ,core_usb_rxptr 
+7911 58000781 setarg mem_usb_rxbuf_end 
+7912 67f10c04 store 2 ,core_usb_rx_eaddr 
+7913 708c1280 jam 0x80 ,core_usb_hmode 
+7914 708c0100 jam 0 ,core_usb_addr 
+7915 708c22ff jam 0xff ,core_usb_status 
+7916 5800093d setarg mem_usb_clear_mem_end 
+7917 d8a0084b arg mem_usb_clear_mem_start ,contw 
+7918 98a67200 isub contw ,loopcnt 
+7919 20207ca3 branch clear_mem 
+
+usb_offline_check_init:
+791a 6848884a fetcht 1 ,mem_usb_offline_check_gpio 
+791b 20206ed7 branch gpio_config_input 
+
+usb_offline_state:
+791c 6fe088ec fetch 1 ,mem_usb_device_enumeration_endflag 
+791d 207a0000 rtn blank 
+791e 6848884a fetcht 1 ,mem_usb_offline_check_gpio 
+791f 20406ee0 call gpio_get_bit 
+7920 2020f905 branch usb_init_restart ,true 
+7921 20600000 rtn 
+
+usb_init_param:
+7922 70084902 jam dev_default ,mem_usb0_state 
+7923 58000000 setarg 0x0 
+7924 67e08784 store 1 ,mem_remain 
+7925 67e10843 store 2 ,mem_usb_zero_packet 
+7926 1fe0fe01 pincrease 1 
+7927 67e10845 store 2 ,mem_usb_ones_packet 
+7928 1fe0fe01 pincrease 1 
+7929 67e10847 store 2 ,mem_usb_two_packet 
+792a d8a007d8 arg mem_string0 ,contw 
+792b 58030404 setarg 0x030404 
+792c e7e18005 istore 3 ,contw 
+792d 58000409 setarg 0x0409 
+792e e7e10005 istore 2 ,contw 
+792f d8a007dd arg mem_string1 ,contw 
+7930 38015906 setsect 0 ,0x15906 
+7931 380610d2 setsect 1 ,0x210d2 
+7932 38090494 setsect 2 ,0x10494 
+7933 380c0001 setsect 3 ,0x1 
+7934 e7e48005 istore 9 ,contw 
+7935 d8a007fb arg mem_string2 ,contw 
+7936 3801570f setsect 0 ,0x1570f 
+7937 38055c9a setsect 1 ,0x15c9a 
+7938 380a56c6 setsect 2 ,0x256c6 
+7939 380dcdcd setsect 3 ,0x1cdcd 
+793a e7e48005 istore 9 ,contw 
+793b 38014420 setsect 0 ,0x14420 
+793c 38065d99 setsect 1 ,0x25d99 
+793d 380a5636 setsect 2 ,0x25636 
+793e 380c0001 setsect 3 ,0x1 
+793f e7e38005 istore 7 ,contw 
+7940 d8a00819 arg mem_string3 ,contw 
+7941 3801620a setsect 0 ,0x1620a 
+7942 38040c8c setsect 1 ,0xc8c 
+7943 380b0333 setsect 2 ,0x30333 
+7944 380cc0c0 setsect 3 ,0xc0c0 
+7945 e7e48005 istore 9 ,contw 
+7946 38003130 setsect 0 ,0x3130 
+7947 e7e10005 istore 2 ,contw 
+7948 580092aa setarg usb_kbdata_vendor_define_addr 
+7949 67e10785 store 2 ,mem_hidreportdesc_kb 
+794a 58009307 setarg usb_msdata_addr 
+794b 67e10787 store 2 ,mem_hidreportdesc_m 
+794c d8c093fb arg usb_devicedata_addr ,contr 
+794d d8a00789 arg mem_devicedesc ,contw 
+794e df200013 arg 19 ,loopcnt 
+794f 20407cdc call memcpy 
+7950 d8c0940e arg usb_confdata_addr ,contr 
+7951 d8a0079c arg mem_confdesc ,contw 
+7952 df20003c arg 60 ,loopcnt 
+7953 20407cdc call memcpy 
+
+usb_config_cb:
+7954 6fe10837 fetch 2 ,mem_cb_usb_config 
+7955 20207d7b branch callback_func 
+
+usb_tx_interval_config:
+7956 6fe08839 fetch 1 ,mem_usb_tx_interval 
+7957 207a0000 rtn blank 
+7958 67e087be store 1 ,mem_confdesc + 34 
+7959 67e087d7 store 1 ,mem_confdesc + 59 
+795a 20600000 rtn 
+
+usb_nak_state:
+795b d8e00001 arg usb_timer_nak ,queue 
+795c 20407cf1 call timer_check 
+795d 247a0000 nrtn blank 
+795e 6fe088ed fetch 1 ,mem_usb_wakestate_onetime_flag 
+795f 247a0000 nrtn blank 
+7960 6fe088ec fetch 1 ,mem_usb_device_enumeration_endflag 
+7961 245a7c3a ncall usb_mac_wakeup_judge ,blank 
+7962 20600000 rtn 
+
+usb_nak_state_judge:
+7963 6fe086e7 fetch 1 ,mem_usb_status 
+7964 c2817966 bbit1 usb_status_nak ,usb_nak_state_timer_init 
+7965 20600000 rtn 
+
+usb_nak_state_timer_init:
+7966 2040796b call usb0_attached_state_judge 
+7967 20407cf0 call timer_reinit 
+7968 58000280 setarg timer_nak_delay 
+7969 d8e00001 arg usb_timer_nak ,queue 
+796a 20207ce3 branch timer_init 
+
+usb0_attached_state_judge:
+796b 6fe088de fetch 1 ,mem_usb_state 
+796c c0817970 bne usb_connected ,usb_clear_halt_dispose 
+796d 7008ed00 jam 0 ,mem_usb_wakestate_onetime_flag 
+796e 7008ee00 jam 0 ,mem_usb_mac_wakeup_trig 
+796f 20600000 rtn 
+
+usb_clear_halt_dispose:
+7970 6fe088f0 fetch 1 ,mem_usb_clear_halt 
+7971 207a0000 rtn blank 
+7972 7008f000 jam 0 ,mem_usb_clear_halt 
+7973 7008de02 jam usb_connected ,mem_usb_state 
+7974 7008ec01 jam 1 ,mem_usb_device_enumeration_endflag 
+7975 20600000 rtn 
+
+usb_rx_no_data:
+7976 6fe086e7 fetch 1 ,mem_usb_status 
+7977 c28079a1 bbit1 usb_status_setup ,usb_class_type 
+7978 20600000 rtn 
+
+usb_rx_len:
+7979 69510c02 fetchr contus ,2 ,core_usb_rx_saddr 
+797a 6a110c04 fetchr contue ,2 ,core_usb_rx_eaddr 
+797b 68710c06 fetchr contu ,2 ,core_usb_rxptr 
+797c efe10003 ifetch 2 ,contu 
+797d 1fec8400 rshift8 pdata ,temp 
+797e 18518400 rshift4 temp ,temp 
+797f d8c00fff arg 0xfff ,contr 
+7980 98c17200 iand contr ,loopcnt 
+7981 672106ea storer loopcnt ,2 ,mem_usb_read_len 
+7982 20600000 rtn 
+
+usb_rx_data:
+7983 6ff08c25 fetch 1 ,core_usb_txbusy 
+7984 c3830000 rtnbit1 usb_status_rxfull 
+7985 20407979 call usb_rx_len 
+
+usb_rx_read:
+7986 efe08003 ifetch 1 ,contu 
+7987 e7e08005 istore 1 ,contw 
+7988 c2007986 loop usb_rx_read 
+7989 60710c06 storer contu ,2 ,core_usb_rxptr 
+798a 20600000 rtn 
+
+usb_rx_ep13:
+798b d8a0093d arg mem_usb_ccid_buf ,contw 
+798c 20407986 call usb_rx_read 
+798d d8400941 arg mem_usb_ccid_buf + 4 ,temp 
+798e 60590c0e storet 2 ,core_usb_tx_saddr3 
+798f 6fe0893e fetch 1 ,mem_usb_ccid_buf + 1 
+7990 1fe0fe06 pincrease 6 
+7991 e7e08002 istore 1 ,temp 
+7992 708c1808 jam 0x8 ,core_usb_trig 
+7993 20600000 rtn 
+
+usb_rx:
+7994 4712c024 bpatchx patch24_5 ,mem_patch24 
+7995 6fe086e7 fetch 1 ,mem_usb_status 
+7996 c4028000 rtnbit0 usb_status_rxready 
+7997 20407979 call usb_rx_len 
+7998 2841fe0d compare 13 ,temp ,0xff 
+7999 2020f98b branch usb_rx_ep13 ,true 
+799a d8a0084b arg mem_usb_setup ,contw 
+799b 20407986 call usb_rx_read 
+799c 6fe086ea fetch 1 ,mem_usb_read_len 
+799d c0007976 beq 0x00 ,usb_rx_no_data 
+799e c000f9a8 beq 0x01 ,usb_out_one_byte 
+799f 1fe67c07 sub pdata ,7 ,null 
+79a0 20610000 rtn positive 
+
+usb_class_type:
+79a1 47134024 bpatchx patch24_6 ,mem_patch24 
+79a2 793f8023 set0 mark_isstr ,mark 
+79a3 6fe0884b fetch 1 ,mem_usb_setup_bmrequesttype 
+79a4 1fe17e80 and_into 0x80 ,pdata 
+79a5 c04079ac beq in_device ,usb_in_device 
+79a6 c00079b4 beq out_device ,usb_out_device 
+79a7 2020233e branch assert 
+
+usb_out_one_byte:
+79a8 6fe0884b fetch 1 ,mem_usb_setup 
+79a9 c3838000 rtnbit1 7 
+79aa 20407b5e call usb_get_led_status 
+79ab 202079db branch usb0_reply_zerolen 
+
+usb_in_device:
+79ac 6fe0884b fetch 1 ,mem_usb_setup_bmrequesttype 
+79ad 1ff1fe00 rshift4 pdata ,pdata 
+79ae 1fe37e00 rshift pdata ,pdata 
+79af 1fe17e03 and_into 0x03 ,pdata 
+79b0 c00079bc beq standard_req ,usb_in_standard_req 
+79b1 c000f9c2 beq class_req ,usb_in_class_req 
+79b2 c00179c7 beq manufacturer_req ,usb_in_manufacturer_req 
+79b3 2020233e branch assert 
+
+usb_out_device:
+79b4 6fe0884b fetch 1 ,mem_usb_setup_bmrequesttype 
+79b5 1ff1fe00 rshift4 pdata ,pdata 
+79b6 1fe37e00 rshift pdata ,pdata 
+79b7 1fe17e03 and_into 0x03 ,pdata 
+79b8 c00079c8 beq standard_req ,usb_out_standard_req 
+79b9 c000f9d0 beq class_req ,usb_out_class_req 
+79ba c00179d5 beq manufacturer_req ,usb_out_manufacturer_req 
+79bb 2020233e branch assert 
+
+usb_in_standard_req:
+79bc 6fe0884c fetch 1 ,mem_usb_setup_brequest 
+79bd c00479dd beq get_configuration ,usb0_request_get_configuration 
+79be c00379f3 beq get_descriptor ,usb0_request_get_descriptor 
+79bf c0057a38 beq get_interface ,usb0_request_get_interface 
+79c0 c0007a4a beq get_status ,usb0_request_get_status 
+79c1 202079d6 branch usb0_force_stall 
+
+usb_in_class_req:
+79c2 6fe0884c fetch 1 ,mem_usb_setup_brequest 
+79c3 c0017a7f beq get_idle ,usb_get_idle 
+79c4 c000fa83 beq get_report ,usb_get_report 
+79c5 c001fa95 beq get_protocol ,usb_get_protocol_req 
+79c6 202079d6 branch usb0_force_stall 
+
+usb_in_manufacturer_req:
+79c7 202079d6 branch usb0_force_stall 
+
+usb_out_standard_req:
+79c8 6fe0884c fetch 1 ,mem_usb_setup_brequest 
+79c9 c000fa9f beq clear_feature ,usb0_request_clear_feature 
+79ca c001facf beq set_feature ,usb0_request_set_feature 
+79cb c002fafb beq set_address ,usb0_request_set_address 
+79cc c004fb14 beq set_configuration ,usb0_request_set_configuration 
+79cd c005fb2f beq set_interface ,usb0_request_set_interface 
+79ce c003f9d6 beq set_descriptor ,usb0_force_stall 
+79cf 202079d6 branch usb0_force_stall 
+
+usb_out_class_req:
+79d0 6fe0884c fetch 1 ,mem_usb_setup_brequest 
+79d1 c0057b40 beq set_idle ,usb_set_idle 
+79d2 c004fb52 beq set_report ,usb_set_report 
+79d3 c005fb70 beq set_protocol ,usb_set_protocol_req 
+79d4 202079d6 branch usb0_force_stall 
+
+usb_out_manufacturer_req:
+79d5 202079d6 branch usb0_force_stall 
+
+usb0_force_stall:
+79d6 4713c024 bpatchx patch24_7 ,mem_patch24 
+79d7 6ff08c19 fetch 1 ,core_usb_stall 
+79d8 79207e00 set1 0 ,pdata 
+79d9 67f08c19 store 1 ,core_usb_stall 
+79da 202079db branch usb0_reply_zerolen 
+
+usb0_reply_zerolen:
+79db 708c1b01 jam 0x1 ,core_usb_clear_nak 
+79dc 20600000 rtn 
+
+usb0_request_get_configuration:
+79dd 6fe0884b fetch 1 ,mem_usb_setup_bmrequesttype 
+79de c0c079d6 bne in_device ,usb0_force_stall 
+79df 6fe0884f fetch 1 ,mem_usb_setup_windex 
+79e0 c08079d6 bne 0 ,usb0_force_stall 
+79e1 6fe08850 fetch 1 ,mem_usb_setup_windex + 1 
+79e2 c08079d6 bne 0 ,usb0_force_stall 
+79e3 6fe08851 fetch 1 ,mem_usb_setup_blength 
+79e4 c080f9d6 bne 1 ,usb0_force_stall 
+79e5 6fe08852 fetch 1 ,mem_usb_setup_blengthh 
+79e6 c08079d6 bne 0 ,usb0_force_stall 
+79e7 6fe0884d fetch 1 ,mem_usb_setup_bvalue 
+79e8 c08079d6 bne 0 ,usb0_force_stall 
+79e9 6fe0884e fetch 1 ,mem_usb_setup_bvalue + 1 
+79ea c08079d6 bne 0 ,usb0_force_stall 
+79eb 6fe08849 fetch 1 ,mem_usb0_state 
+79ec c00279ef beq dev_configured ,usb0_request_get_cfg_dev_cfg 
+79ed c001f9f1 beq dev_address ,usb0_request_get_cfg_dev_addr 
+79ee 202079d6 branch usb0_force_stall 
+
+usb0_request_get_cfg_dev_cfg:
+79ef da400001 arg 1 ,regb 
+79f0 20207a64 branch usb_send_ones_packet 
+
+usb0_request_get_cfg_dev_addr:
+79f1 da400001 arg 1 ,regb 
+79f2 20207a62 branch usb_send_zero_packet 
+
+usb0_request_get_descriptor:
+79f3 47144025 bpatchx patch25_0 ,mem_patch25 
+79f4 6fe0884e fetch 1 ,mem_usb_setup_bvalueh 
+79f5 c000fa06 beq dsc_device ,dsc_device_info 
+79f6 c0017a1f beq dsc_config ,dsc_config_info 
+79f7 c001fa22 beq dsc_string ,dsc_string_info 
+79f8 c010f9fb beq dsc_hid ,dsc_hid_info 
+79f9 c0117a30 beq dsc_hid_report ,dsc_hid_report_info 
+79fa 202079d6 branch usb0_force_stall 
+
+dsc_hid_info:
+79fb 7008db00 jam 0 ,mem_usb_get_protocol_flag 
+79fc 6fe0884f fetch 1 ,mem_usb_setup_windex 
+79fd c0007a00 beq 0 ,dsc_hid_info_interface0 
+79fe c000fa03 beq 1 ,dsc_hid_info_interface1 
+79ff 202079d6 branch usb0_force_stall 
+
+dsc_hid_info_interface0:
+7a00 6a4087af fetchr regb ,1 ,mem_confdesc + 19 
+7a01 da2007af arg mem_confdesc + 19 ,rega 
+7a02 20207b7f branch usb0_respond 
+
+dsc_hid_info_interface1:
+7a03 6a4087c8 fetchr regb ,1 ,mem_confdesc + 44 
+7a04 da2007c8 arg mem_confdesc + 44 ,rega 
+7a05 20207b7f branch usb0_respond 
+
+dsc_device_info:
+7a06 6fe088ef fetch 1 ,mem_usb_set_high_addr_flag 
+7a07 245a7a17 ncall usb_set_high_addr ,blank 
+7a08 58000789 setarg mem_devicedesc 
+7a09 68488789 fetcht 1 ,mem_devicedesc 
+
+dsc_info_set_data_len:
+7a0a 67e108e6 store 2 ,mem_dsc_info_data_pointer 
+7a0b 604888e8 storet 1 ,mem_dsc_info_len 
+7a0c 6fe08851 fetch 1 ,mem_usb_setup_blength 
+7a0d 98467c00 isub temp ,null 
+7a0e 24217a15 nbranch dsc_info_set_current_data_len ,positive 
+
+dsc_info_set_initial_data_len:
+7a0f 6fe088e8 fetch 1 ,mem_dsc_info_len 
+
+dsc_info_set_data_size_completed:
+7a10 98002400 iforce regb 
+7a11 6fe108e6 fetch 2 ,mem_dsc_info_data_pointer 
+7a12 1fe0fe01 add pdata ,1 ,pdata 
+7a13 98002200 iforce rega 
+7a14 20207b7f branch usb0_respond 
+
+dsc_info_set_current_data_len:
+7a15 6fe08851 fetch 1 ,mem_usb_setup_blength 
+7a16 20207a10 branch dsc_info_set_data_size_completed 
+
+usb_set_high_addr:
+7a17 6ff08c01 fetch 1 ,core_usb_addr 
+7a18 245a7a1b ncall usb0_set_addr ,blank 
+7a19 7008ef00 jam 0 ,mem_usb_set_high_addr_flag 
+7a1a 20600000 rtn 
+
+usb0_set_addr:
+7a1b 6ff08c01 fetch 1 ,core_usb_addr 
+7a1c 79207e07 set1 7 ,pdata 
+7a1d 67f08c01 store 1 ,core_usb_addr 
+7a1e 20600000 rtn 
+
+dsc_config_info:
+7a1f 5800079c setarg mem_confdesc 
+7a20 6848879c fetcht 1 ,mem_confdesc 
+7a21 20207a0a branch dsc_info_set_data_len 
+
+dsc_string_info:
+7a22 6fe0884d fetch 1 ,mem_usb_setup_bvalue 
+7a23 1fe67c03 sub pdata ,3 ,null 
+7a24 242179d6 nbranch usb0_force_stall ,positive 
+7a25 6fe0884d fetch 1 ,mem_usb_setup_bvalue 
+7a26 da2007d8 arg mem_string0 ,rega 
+7a27 c0007b7d beq 0 ,usb0_respond_length 
+7a28 79200023 set1 mark_isstr ,mark 
+7a29 da2007dd arg mem_string1 ,rega 
+7a2a c000fb7d beq 1 ,usb0_respond_length 
+7a2b da2007fb arg mem_string2 ,rega 
+7a2c c0017b7d beq 2 ,usb0_respond_length 
+7a2d da200819 arg mem_string3 ,rega 
+7a2e c001fb7d beq 3 ,usb0_respond_length 
+7a2f 20600000 rtn 
+
+dsc_hid_report_info:
+7a30 6fe1084f fetch 2 ,mem_usb_setup_windex 
+7a31 c000fa34 beq 1 ,dsc_hid_report_info0 
+7a32 6a210785 fetchr rega ,2 ,mem_hidreportdesc_kb 
+7a33 20207b7d branch usb0_respond_length 
+
+dsc_hid_report_info0:
+7a34 7008ec01 jam 1 ,mem_usb_device_enumeration_endflag 
+7a35 7008de01 jam usb_got_report_req ,mem_usb_state 
+7a36 6a210787 fetchr rega ,2 ,mem_hidreportdesc_m 
+7a37 20207b7d branch usb0_respond_length 
+
+usb0_request_get_interface:
+7a38 6fe08849 fetch 1 ,mem_usb0_state 
+7a39 c08279d6 bne dev_configured ,usb0_force_stall 
+7a3a 6fe0884b fetch 1 ,mem_usb_setup_bmrequesttype 
+7a3b c0c0f9d6 bne in_interface ,usb0_force_stall 
+7a3c 6fe0884d fetch 1 ,mem_usb_setup_bvalue 
+7a3d c08079d6 bne 0 ,usb0_force_stall 
+7a3e 6fe0884e fetch 1 ,mem_usb_setup_bvalueh 
+7a3f c08079d6 bne 0 ,usb0_force_stall 
+7a40 6fe08851 fetch 1 ,mem_usb_setup_blength 
+7a41 c080f9d6 bne 1 ,usb0_force_stall 
+7a42 6fe08852 fetch 1 ,mem_usb_setup_blengthh 
+7a43 c08079d6 bne 0 ,usb0_force_stall 
+7a44 6fe0884f fetch 1 ,mem_usb_setup_windex 
+7a45 c08079d6 bne 0 ,usb0_force_stall 
+7a46 6fe08850 fetch 1 ,mem_usb_setup_windex + 1 
+7a47 c08079d6 bne 0 ,usb0_force_stall 
+7a48 da400001 arg 1 ,regb 
+7a49 20207a62 branch usb_send_zero_packet 
+
+usb0_request_get_status:
+7a4a 6fe08849 fetch 1 ,mem_usb0_state 
+7a4b c00179d6 beq dev_default ,usb0_force_stall 
+7a4c 6fe0884d fetch 1 ,mem_usb_setup_bvalue 
+7a4d c08079d6 bne 0 ,usb0_force_stall 
+7a4e 6fe0884e fetch 1 ,mem_usb_setup_bvalueh 
+7a4f c08079d6 bne 0 ,usb0_force_stall 
+7a50 6fe08851 fetch 1 ,mem_usb_setup_blength 
+7a51 c08179d6 bne 2 ,usb0_force_stall 
+7a52 6fe08852 fetch 1 ,mem_usb_setup_blengthh 
+7a53 c08079d6 bne 0 ,usb0_force_stall 
+7a54 6fe08850 fetch 1 ,mem_usb_setup_windex + 1 
+7a55 c08079d6 bne 0 ,usb0_force_stall 
+7a56 6fe0884b fetch 1 ,mem_usb_setup_bmrequesttype 
+7a57 c0407a5d beq in_device ,usb0_get_status_in_device 
+7a58 c040fa68 beq in_interface ,usb0_get_status_in_interface 
+7a59 c0417a6c beq in_endpoint ,usb0_get_status_in_endpoint 
+7a5a 202079d6 branch usb0_force_stall 
+
+usb0_sdsystem_dispose:
+7a5b 7008e101 jam 1 ,mem_sdsystem_wakeup_flag 
+7a5c 20207a66 branch usb_send_two_packet 
+
+usb0_get_status_in_device:
+7a5d 6fe0884f fetch 1 ,mem_usb_setup_windex 
+7a5e c08079d6 bne 0 ,usb0_force_stall 
+7a5f da400002 arg 2 ,regb 
+7a60 6fe088df fetch 1 ,mem_usb_remote_wakeup 
+7a61 c000fa5b beq 0x01 ,usb0_sdsystem_dispose 
+
+usb_send_zero_packet:
+7a62 da200843 arg mem_usb_zero_packet ,rega 
+7a63 20207b7f branch usb0_respond 
+
+usb_send_ones_packet:
+7a64 da200845 arg mem_usb_ones_packet ,rega 
+7a65 20207b7f branch usb0_respond 
+
+usb_send_two_packet:
+7a66 da200847 arg mem_usb_two_packet ,rega 
+7a67 20207b7f branch usb0_respond 
+
+usb0_get_status_in_interface:
+7a68 6fe08849 fetch 1 ,mem_usb0_state 
+7a69 c08279d6 bne dev_configured ,usb0_force_stall 
+7a6a da400002 arg 2 ,regb 
+7a6b 20207a62 branch usb_send_zero_packet 
+
+usb0_get_status_in_endpoint:
+7a6c 6fe08849 fetch 1 ,mem_usb0_state 
+7a6d c08279d6 bne dev_configured ,usb0_force_stall 
+7a6e 6fe0884f fetch 1 ,mem_usb_setup_windex 
+7a6f c040fa79 beq in_ep1 ,usb0_get_status_in_ep_in_ep1 
+7a70 c0417a7b beq in_ep2 ,usb0_get_status_in_ep_in_ep2 
+7a71 c041fa7d beq in_ep3 ,usb0_get_status_in_ep_in_ep3 
+7a72 1fe17e7f and_into 0x7f ,pdata 
+7a73 c0007a75 beq 0x00 ,usb0_get_status_in_ep_in_ep0 
+7a74 202079d6 branch usb0_force_stall 
+
+usb0_get_status_in_ep_in_ep0:
+7a75 6fe088e2 fetch 1 ,mem_usb_ep0_stall_status 
+
+usb0_get_status_in_ep_in_ack:
+7a76 da400002 arg 2 ,regb 
+7a77 c000fa64 beq 1 ,usb_send_ones_packet 
+7a78 20207a62 branch usb_send_zero_packet 
+
+usb0_get_status_in_ep_in_ep1:
+7a79 6fe088e3 fetch 1 ,mem_usb_ep1_stall_status 
+7a7a 20207a76 branch usb0_get_status_in_ep_in_ack 
+
+usb0_get_status_in_ep_in_ep2:
+7a7b 6fe088e4 fetch 1 ,mem_usb_ep2_stall_status 
+7a7c 20207a76 branch usb0_get_status_in_ep_in_ack 
+
+usb0_get_status_in_ep_in_ep3:
+7a7d 6fe088e5 fetch 1 ,mem_usb_ep3_stall_status 
+7a7e 20207a76 branch usb0_get_status_in_ep_in_ack 
+
+usb_get_idle:
+7a7f 7008d901 jam 1 ,mem_usb_idle_flag 
+7a80 da2008da arg mem_usb_idle_rate ,rega 
+7a81 da400001 arg 1 ,regb 
+7a82 20207b7f branch usb0_respond 
+
+usb_get_report:
+7a83 4714c025 bpatchx patch25_1 ,mem_patch25 
+7a84 6fe1084d fetch 2 ,mem_usb_setup_bvalue 
+7a85 d84001ba arg pc_get_report ,temp 
+7a86 98467c00 isub temp ,null 
+7a87 2422f9d6 nbranch usb0_force_stall ,zero 
+
+usb_get_report_dispose:
+7a88 6fe088d6 fetch 1 ,mem_usb0_data_ready_report 
+7a89 243a7a92 nbranch usb_get_report_data_success ,blank 
+7a8a 70089300 jam pc_get_nondata ,mem_usb0_get_report_data 
+
+usb_get_report_send_data:
+7a8b 6fe08851 fetch 1 ,mem_usb_setup_blength 
+7a8c 98002400 iforce regb 
+7a8d da200893 arg mem_usb0_get_report_data ,rega 
+7a8e 20407b7f call usb0_respond 
+
+usb_get_report_data_release:
+7a8f d8a00893 arg mem_usb0_get_report_data ,contw 
+7a90 df200040 arg 64 ,loopcnt 
+7a91 20207ca5 branch memset0 
+
+usb_get_report_data_success:
+7a92 7008d600 jam 0 ,mem_usb0_data_ready_report 
+7a93 70089301 jam pc_get_data ,mem_usb0_get_report_data 
+7a94 20207a8b branch usb_get_report_send_data 
+
+usb_get_protocol_req:
+7a95 6fe08851 fetch 1 ,mem_usb_setup_blength 
+7a96 c080f9d6 bne 1 ,usb0_force_stall 
+7a97 7008db01 jam 1 ,mem_usb_get_protocol_flag 
+7a98 da400001 arg 1 ,regb 
+7a99 6fe088dd fetch 1 ,mem_usb_set_protocol_value 
+7a9a c0007a9d beq 0 ,usb_get_report_protocol 
+7a9b c000fa9e beq 1 ,usb_get_boot_protocol 
+7a9c 20207a62 branch usb_send_zero_packet 
+
+usb_get_report_protocol:
+7a9d 20207a64 branch usb_send_ones_packet 
+
+usb_get_boot_protocol:
+7a9e 20207a62 branch usb_send_zero_packet 
+
+usb0_request_clear_feature:
+7a9f 6fe08849 fetch 1 ,mem_usb0_state 
+7aa0 c08279d6 bne dev_configured ,usb0_force_stall 
+7aa1 6fe08851 fetch 1 ,mem_usb_setup_blength 
+7aa2 c08079d6 bne 0 ,usb0_force_stall 
+7aa3 6fe08852 fetch 1 ,mem_usb_setup_blengthh 
+7aa4 c08079d6 bne 0 ,usb0_force_stall 
+7aa5 6fe0884e fetch 1 ,mem_usb_setup_bvalueh 
+7aa6 c08079d6 bne 0 ,usb0_force_stall 
+7aa7 6fe08850 fetch 1 ,mem_usb_setup_windex + 1 
+7aa8 c08079d6 bne 0 ,usb0_force_stall 
+7aa9 6fe0884b fetch 1 ,mem_usb_setup_bmrequesttype 
+7aaa c0007aae beq out_device ,usb0_request_clear_feature_out_device 
+7aab c000fabc beq out_interface ,usb0_request_clear_feature_out_interface 
+7aac c0017abd beq out_endpoint ,usb0_request_clear_feature_out_endpoint 
+7aad 202079d6 branch usb0_force_stall 
+
+usb0_request_clear_feature_out_device:
+7aae 47154025 bpatchx patch25_2 ,mem_patch25 
+7aaf 6fe0884d fetch 1 ,mem_usb_setup_bvalue 
+7ab0 c080f9d6 bne device_remote_wakeup ,usb0_force_stall 
+7ab1 6ff08c00 fetch 1 ,core_usb_config 
+7ab2 793ffe07 set0 7 ,pdata 
+7ab3 67f08c00 store 1 ,core_usb_config 
+7ab4 7008df00 jam 0 ,mem_usb_remote_wakeup 
+7ab5 7008e001 jam 1 ,mem_usb_clear_remote_wakeup 
+7ab6 6fe088e1 fetch 1 ,mem_sdsystem_wakeup_flag 
+7ab7 203a79db branch usb0_reply_zerolen ,blank 
+7ab8 7008e100 jam 0 ,mem_sdsystem_wakeup_flag 
+7ab9 7008e000 jam 0 ,mem_usb_clear_remote_wakeup 
+7aba 7008de02 jam usb_connected ,mem_usb_state 
+7abb 202079db branch usb0_reply_zerolen 
+
+usb0_request_clear_feature_out_interface:
+7abc 202079d6 branch usb0_force_stall 
+
+usb0_request_clear_feature_out_endpoint:
+7abd 6fe0884d fetch 1 ,mem_usb_setup_bvalue 
+7abe c08079d6 bne endpoint_halt ,usb0_force_stall 
+7abf 6fe0884f fetch 1 ,mem_usb_setup_windex 
+7ac0 c040fac8 beq in_ep1 ,usb0_force_stall_ep1_in_off 
+7ac1 c0417acb beq in_ep2 ,usb0_force_stall_ep2_in_off 
+7ac2 c041facd beq in_ep3 ,usb0_force_stall_ep3_in_off 
+7ac3 1fe17e7f and_into 0x7f ,pdata 
+7ac4 c0007ac6 beq 0x00 ,usb0_force_stall_ep0_in_off 
+7ac5 202079d6 branch usb0_force_stall 
+
+usb0_force_stall_ep0_in_off:
+7ac6 7008e200 jam 0 ,mem_usb_ep0_stall_status 
+7ac7 202079db branch usb0_reply_zerolen 
+
+usb0_force_stall_ep1_in_off:
+7ac8 7008e300 jam 0 ,mem_usb_ep1_stall_status 
+
+usb0_force_stall_ep1_in_off_reply:
+7ac9 7008f001 jam 1 ,mem_usb_clear_halt 
+7aca 202079db branch usb0_reply_zerolen 
+
+usb0_force_stall_ep2_in_off:
+7acb 7008e400 jam 0 ,mem_usb_ep2_stall_status 
+7acc 20207ac9 branch usb0_force_stall_ep1_in_off_reply 
+
+usb0_force_stall_ep3_in_off:
+7acd 7008e500 jam 0 ,mem_usb_ep3_stall_status 
+7ace 20207ac9 branch usb0_force_stall_ep1_in_off_reply 
+
+usb0_request_set_feature:
+7acf 6fe08851 fetch 1 ,mem_usb_setup_blength 
+7ad0 c08079d6 bne 0 ,usb0_force_stall 
+7ad1 6fe08852 fetch 1 ,mem_usb_setup_blengthh 
+7ad2 c08079d6 bne 0 ,usb0_force_stall 
+7ad3 6fe0884b fetch 1 ,mem_usb_setup_bmrequesttype 
+7ad4 c0007ad8 beq out_device ,usb0_request_set_feature_out_device 
+7ad5 c000fae7 beq out_interface ,usb0_request_set_feature_out_interface 
+7ad6 c0017ae8 beq out_endpoint ,usb0_request_set_feature_out_endpoint 
+7ad7 202079d6 branch usb0_force_stall 
+
+usb0_request_set_feature_out_device:
+7ad8 4715c025 bpatchx patch25_3 ,mem_patch25 
+7ad9 6fe0884d fetch 1 ,mem_usb_setup_bvalue 
+7ada c080f9d6 bne device_remote_wakeup ,usb0_force_stall 
+7adb 20403dd6 call dongle_set_pc_sleep_flag 
+7adc 6ff08c00 fetch 1 ,core_usb_config 
+7add 79207e07 set1 7 ,pdata 
+7ade 67f08c00 store 1 ,core_usb_config 
+7adf 7008df01 jam 1 ,mem_usb_remote_wakeup 
+7ae0 7008de03 jam usb_sleep ,mem_usb_state 
+7ae1 7008d700 jam 0 ,mem_usb_tx_win_enable 
+7ae2 204079db call usb0_reply_zerolen 
+
+usb_wakeup_timer_reinit:
+7ae3 20407cf0 call timer_reinit 
+7ae4 58001388 setarg timer_wakeup_delay 
+7ae5 d8e0000f arg usb_timer_wakeup ,queue 
+7ae6 20207ce3 branch timer_init 
+
+usb0_request_set_feature_out_interface:
+7ae7 202079d6 branch usb0_force_stall 
+
+usb0_request_set_feature_out_endpoint:
+7ae8 6fe0884d fetch 1 ,mem_usb_setup_bvalue 
+7ae9 c08079d6 bne endpoint_halt ,usb0_force_stall 
+7aea 6fe0884e fetch 1 ,mem_usb_setup_bvalueh 
+7aeb c08079d6 bne 0 ,usb0_force_stall 
+7aec 6fe0884f fetch 1 ,mem_usb_setup_windex 
+7aed c040faf5 beq in_ep1 ,usb0_force_stall_ep1_in_on 
+7aee c0417af7 beq in_ep2 ,usb0_force_stall_ep2_in_on 
+7aef c041faf9 beq in_ep3 ,usb0_force_stall_ep3_in_on 
+7af0 1fe17e7f and_into 0x7f ,pdata 
+7af1 c0007af3 beq 0x00 ,usb0_force_stall_ep0_in_on 
+7af2 202079d6 branch usb0_force_stall 
+
+usb0_force_stall_ep0_in_on:
+7af3 7008e201 jam 1 ,mem_usb_ep0_stall_status 
+7af4 202079db branch usb0_reply_zerolen 
+
+usb0_force_stall_ep1_in_on:
+7af5 7008e301 jam 1 ,mem_usb_ep1_stall_status 
+7af6 202079db branch usb0_reply_zerolen 
+
+usb0_force_stall_ep2_in_on:
+7af7 7008e401 jam 1 ,mem_usb_ep2_stall_status 
+7af8 202079db branch usb0_reply_zerolen 
+
+usb0_force_stall_ep3_in_on:
+7af9 7008e501 jam 1 ,mem_usb_ep3_stall_status 
+7afa 202079db branch usb0_reply_zerolen 
+
+usb0_request_set_address:
+7afb 6fe0884b fetch 1 ,mem_usb_setup_bmrequesttype 
+7afc c08079d6 bne out_device ,usb0_force_stall 
+7afd 6fe0884f fetch 1 ,mem_usb_setup_windex 
+7afe c08079d6 bne 0 ,usb0_force_stall 
+7aff 6fe08850 fetch 1 ,mem_usb_setup_windex + 1 
+7b00 c08079d6 bne 0 ,usb0_force_stall 
+7b01 6fe08851 fetch 1 ,mem_usb_setup_blength 
+7b02 c08079d6 bne 0 ,usb0_force_stall 
+7b03 6fe08852 fetch 1 ,mem_usb_setup_blengthh 
+7b04 c08079d6 bne 0 ,usb0_force_stall 
+7b05 6fe0884e fetch 1 ,mem_usb_setup_bvalueh 
+7b06 c08079d6 bne 0 ,usb0_force_stall 
+7b07 6fe0884d fetch 1 ,mem_usb_setup_bvalue 
+7b08 1fe17e80 and_into 0x80 ,pdata 
+7b09 c08079d6 bne 0 ,usb0_force_stall 
+7b0a 6fe0884d fetch 1 ,mem_usb_setup_bvalue 
+7b0b c0807b12 bne 0 ,usb_usb0_state_set_dev_addr 
+
+usb_usb0_state_set_dev_default:
+7b0c 70084902 jam dev_default ,mem_usb0_state 
+
+usb0_request_set_wait_address:
+7b0d 6fe0884d fetch 1 ,mem_usb_setup_bvalue 
+7b0e 67f08c01 store 1 ,core_usb_addr 
+7b0f 204079db call usb0_reply_zerolen 
+7b10 7008ef01 jam 1 ,mem_usb_set_high_addr_flag 
+7b11 20600000 rtn 
+
+usb_usb0_state_set_dev_addr:
+7b12 70084903 jam dev_address ,mem_usb0_state 
+7b13 20207b0d branch usb0_request_set_wait_address 
+
+usb0_request_set_configuration:
+7b14 6fe08849 fetch 1 ,mem_usb0_state 
+7b15 c00179d6 beq dev_default ,usb0_force_stall 
+7b16 6fe0884b fetch 1 ,mem_usb_setup_bmrequesttype 
+7b17 c08079d6 bne out_device ,usb0_force_stall 
+7b18 6fe0884f fetch 1 ,mem_usb_setup_windex 
+7b19 c08079d6 bne 0 ,usb0_force_stall 
+7b1a 6fe08850 fetch 1 ,mem_usb_setup_windex + 1 
+7b1b c08079d6 bne 0 ,usb0_force_stall 
+7b1c 6fe08851 fetch 1 ,mem_usb_setup_blength 
+7b1d c08079d6 bne 0 ,usb0_force_stall 
+7b1e 6fe08852 fetch 1 ,mem_usb_setup_blengthh 
+7b1f c08079d6 bne 0 ,usb0_force_stall 
+7b20 6fe0884e fetch 1 ,mem_usb_setup_bvalue + 1 
+7b21 c08079d6 bne 0 ,usb0_force_stall 
+7b22 6fe0884d fetch 1 ,mem_usb_setup_bvalue 
+7b23 1fe67c01 sub pdata ,usb_max_num_cfg ,null 
+7b24 242179d6 nbranch usb0_force_stall ,positive 
+7b25 6fe08849 fetch 1 ,mem_usb0_state 
+7b26 c001fb29 beq dev_address ,usb0_request_set_cfg_addr_state 
+7b27 c0027b29 beq dev_configured ,usb0_request_set_cfg_cfg_state 
+7b28 202079d6 branch usb0_force_stall 
+
+usb0_request_set_cfg_addr_state:
+
+usb0_request_set_cfg_cfg_state:
+7b29 6fe0884d fetch 1 ,mem_usb_setup_bvalue 
+7b2a c0007b2d beq 0 ,usb0_request_set_cfg_stay_addr_state 
+7b2b 70084904 jam dev_configured ,mem_usb0_state 
+7b2c 202079db branch usb0_reply_zerolen 
+
+usb0_request_set_cfg_stay_addr_state:
+7b2d 70084903 jam dev_address ,mem_usb0_state 
+7b2e 202079db branch usb0_reply_zerolen 
+
+usb0_request_set_interface:
+7b2f 6fe08849 fetch 1 ,mem_usb0_state 
+7b30 c08279d6 bne dev_configured ,usb0_force_stall 
+7b31 6fe0884b fetch 1 ,mem_usb_setup_bmrequesttype 
+7b32 c080f9d6 bne out_interface ,usb0_force_stall 
+7b33 6fe0884d fetch 1 ,mem_usb_setup_bvalue 
+7b34 c08079d6 bne 0 ,usb0_force_stall 
+7b35 6fe0884e fetch 1 ,mem_usb_setup_bvalueh 
+7b36 c08079d6 bne 0 ,usb0_force_stall 
+7b37 6fe08851 fetch 1 ,mem_usb_setup_blength 
+7b38 c08079d6 bne 0 ,usb0_force_stall 
+7b39 6fe08852 fetch 1 ,mem_usb_setup_blengthh 
+7b3a c08079d6 bne 0 ,usb0_force_stall 
+7b3b 6fe0884f fetch 1 ,mem_usb_setup_windex 
+7b3c c08079d6 bne 0 ,usb0_force_stall 
+7b3d 6fe08850 fetch 1 ,mem_usb_setup_windex + 1 
+7b3e c08079d6 bne 0 ,usb0_force_stall 
+7b3f 202079db branch usb0_reply_zerolen 
+
+usb_set_idle:
+7b40 47164025 bpatchx patch25_4 ,mem_patch25 
+7b41 7008d901 jam 1 ,mem_usb_idle_flag 
+7b42 6fe0884e fetch 1 ,mem_usb_setup_bvalueh 
+7b43 67e088da store 1 ,mem_usb_idle_rate 
+7b44 6fe0884f fetch 1 ,mem_usb_setup_windex 
+7b45 1fe67c01 sub pdata ,1 ,null 
+7b46 2042fb4e call usb_clear_remote_wakeup_set0 ,zero 
+7b47 6fe088de fetch 1 ,mem_usb_state 
+7b48 c08279db bne usb_resume ,usb0_reply_zerolen 
+7b49 7008de02 jam usb_connected ,mem_usb_state 
+7b4a 204079db call usb0_reply_zerolen 
+7b4b 20007530 nop 30000 
+7b4c 20007530 nop 30000 
+7b4d 20600000 rtn 
+
+usb_clear_remote_wakeup_set0:
+7b4e 7008ec01 jam 1 ,mem_usb_device_enumeration_endflag 
+7b4f 7008e000 jam 0 ,mem_usb_clear_remote_wakeup 
+7b50 7008de04 jam usb_resume ,mem_usb_state 
+7b51 20600000 rtn 
+
+usb_set_report:
+7b52 4716c025 bpatchx patch25_5 ,mem_patch25 
+7b53 20003a98 nop 15000 
+7b54 d8a00853 arg mem_usb0_set_report_data ,contw 
+7b55 20407983 call usb_rx_data 
+7b56 7008d501 jam 1 ,mem_usb0_get_set_report 
+7b57 20407b62 call usb_set_report_resume_judge 
+7b58 6fe1084d fetch 2 ,mem_usb_setup_bvalue 
+7b59 67e108d3 store 2 ,mem_usb_setup_bvalue_temp 
+7b5a 708c1b02 jam 0x02 ,core_usb_clear_nak 
+7b5b 6fe088d7 fetch 1 ,mem_usb_tx_win_enable 
+7b5c 207a0000 rtn blank 
+7b5d 6fe08853 fetch 1 ,mem_usb0_set_report_data 
+
+usb_get_led_status:
+7b5e 67e0c638 store 1 ,mem_24g_led_status 
+7b5f 7008d700 jam 0 ,mem_usb_tx_win_enable 
+7b60 70462803 jam kb_led_ackpayload ,mem_24g_ackpayload_enable 
+7b61 20600000 rtn 
+
+usb_set_report_resume_judge:
+7b62 6fe1084d fetch 2 ,mem_usb_setup_bvalue 
+7b63 d8400200 arg pc_set_report_bvalue ,temp 
+7b64 98467c00 isub temp ,null 
+7b65 24628000 nrtn zero 
+7b66 6fe1084f fetch 2 ,mem_usb_setup_windex 
+7b67 d8400000 arg pc_set_report_windex ,temp 
+7b68 98467c00 isub temp ,null 
+7b69 24628000 nrtn zero 
+7b6a 6fe10851 fetch 2 ,mem_usb_setup_blength 
+7b6b d8400001 arg pc_set_report_blength ,temp 
+7b6c 98467c00 isub temp ,null 
+7b6d 24628000 nrtn zero 
+7b6e 7008d701 jam 1 ,mem_usb_tx_win_enable 
+7b6f 20600000 rtn 
+
+usb_set_protocol_req:
+7b70 6fe08851 fetch 1 ,mem_usb_setup_blength 
+7b71 c08079d6 bne 0 ,usb0_force_stall 
+7b72 6fe0884d fetch 1 ,mem_usb_setup_bvalue 
+7b73 c0007b76 beq boot_protocol ,usb_set_boot_protocol 
+7b74 c000fb79 beq report_protocol ,usb_set_report_protocol 
+7b75 202079d6 branch usb0_force_stall 
+
+usb_set_boot_protocol:
+7b76 7008dc00 jam 0 ,mem_usb_set_protocol_status 
+7b77 7008dd01 jam 1 ,mem_usb_set_protocol_value 
+7b78 202079db branch usb0_reply_zerolen 
+
+usb_set_report_protocol:
+7b79 7008d801 jam 1 ,mem_usb_tx_mac_enable 
+7b7a 7008dc01 jam 1 ,mem_usb_set_protocol_status 
+7b7b 7008dd00 jam 0 ,mem_usb_set_protocol_value 
+7b7c 202079db branch usb0_reply_zerolen 
+
+usb0_respond_length:
+7b7d ea408011 ifetchr regb ,1 ,rega 
+7b7e 1a20a201 increase 1 ,rega 
+
+usb0_respond:
+7b7f 47174025 bpatchx patch25_6 ,mem_patch25 
+7b80 7920000e set1 mark_usb_first_resp ,mark 
+7b81 c591fb84 bmark0 mark_isstr ,usb0_respond_nostr 
+7b82 1a40a401 increase 1 ,regb 
+7b83 1a43a400 lshift regb ,regb 
+
+usb0_respond_nostr:
+7b84 62210782 storer rega ,2 ,mem_bufptr 
+7b85 62408784 storer regb ,1 ,mem_remain 
+7b86 20207b8a branch usb0_tx 
+7b87 20600000 rtn 
+
+usb_no_respond_data:
+7b88 d8e00000 arg 0 ,queue 
+7b89 20207bcb branch usb_trig 
+
+usb0_tx:
+7b8a 4717c025 bpatchx patch25_7 ,mem_patch25 
+7b8b 6ff08c25 fetch 1 ,core_usb_txbusy 
+7b8c c3800000 rtnbit1 0 
+7b8d 6fe08784 fetch 1 ,mem_remain 
+7b8e 207a0000 rtn blank 
+7b8f 1fe27200 copy pdata ,loopcnt 
+7b90 98000400 iforce temp 
+7b91 6fe10851 fetch 2 ,mem_usb_setup_blength 
+7b92 1fe67c40 sub pdata ,ep0_packet_size ,null 
+7b93 20217b98 branch usb0_tx_short ,positive 
+7b94 1f267c40 sub loopcnt ,ep0_packet_size ,null 
+7b95 20217b9c branch usb0_tx_info ,positive 
+7b96 18007240 force ep0_packet_size ,loopcnt 
+7b97 20207b9c branch usb0_tx_info 
+
+usb0_tx_short:
+7b98 9f267c00 isub loopcnt ,null 
+7b99 20217b9c branch usb0_tx_info ,positive 
+7b9a 98007200 iforce loopcnt 
+7b9b 67e08784 store 1 ,mem_remain 
+
+usb0_tx_info:
+7b9c 6fe08784 fetch 1 ,mem_remain 
+7b9d 9f267e00 isub loopcnt ,pdata 
+7b9e 67e08784 store 1 ,mem_remain 
+7b9f 1f20ffff add loopcnt ,-1 ,pdata 
+7ba0 67e086ec store 1 ,mem_usb_txbuf 
+7ba1 c591fbae bmark0 mark_isstr ,usb0_tx_nostr 
+7ba2 1fe37e00 rshift pdata ,pdata 
+7ba3 1f20ffff add loopcnt ,-1 ,pdata 
+7ba4 67e086ec store 1 ,mem_usb_txbuf 
+7ba5 c5877bae bmark0 mark_usb_first_resp ,usb0_tx_nostr 
+7ba6 793f800e set0 mark_usb_first_resp ,mark 
+7ba7 e0408005 istoret 1 ,contw 
+7ba8 58000003 setarg 3 
+7ba9 e7e08005 istore 1 ,contw 
+7baa 1f20f3ff increase -1 ,loopcnt 
+7bab 1f227e00 copy loopcnt ,pdata 
+7bac 2422fbae nbranch usb0_tx_nostr ,zero 
+7bad 1f20f201 increase 1 ,loopcnt 
+
+usb0_tx_nostr:
+7bae 6fe10782 fetch 2 ,mem_bufptr 
+7baf 1fe20c00 copy pdata ,contr 
+
+usb0_tx0:
+7bb0 efe08006 ifetch 1 ,contr 
+7bb1 e7e08005 istore 1 ,contw 
+7bb2 c591fbb5 bmark0 mark_isstr ,usb0_tx1 
+7bb3 58000000 setarg 0 
+7bb4 e7e08005 istore 1 ,contw 
+
+usb0_tx1:
+7bb5 c2007bb0 loop usb0_tx0 
+7bb6 18c27e00 copy contr ,pdata 
+7bb7 67e10782 store 2 ,mem_bufptr 
+7bb8 580006ec setarg mem_usb_txbuf 
+7bb9 67f10c08 store 2 ,core_usb_tx_saddr0 
+7bba d8e00000 arg 0 ,queue 
+7bbb 20407bcb call usb_trig 
+7bbc 6fe08784 fetch 1 ,mem_remain 
+7bbd 247a0000 nrtn blank 
+7bbe 708c1b02 jam 2 ,core_usb_clear_nak 
+7bbf 6fe088de fetch 1 ,mem_usb_state 
+7bc0 c1808000 rtnne usb_got_report_req 
+7bc1 7008de02 jam usb_connected ,mem_usb_state 
+7bc2 20600000 rtn 
+
+usb_tx_ep1:
+7bc3 da20072d arg mem_usb_txbuf1 ,rega 
+7bc4 d8e00001 arg 1 ,queue 
+7bc5 62310c0a storer rega ,2 ,core_usb_tx_saddr1 
+
+usb_tx_buf:
+7bc6 1f20ffff add loopcnt ,-1 ,pdata 
+7bc7 e7e08011 istore 1 ,rega 
+
+usb_tx_loop:
+7bc8 efe08006 ifetch 1 ,contr 
+7bc9 e7e08005 istore 1 ,contw 
+7bca c2007bc8 loop usb_tx_loop 
+
+usb_trig:
+7bcb 58000000 setarg 0 
+7bcc f9207e00 qset1 pdata 
+7bcd 67f08c18 store 1 ,core_usb_trig 
+7bce 20600000 rtn 
+
+usb_tx_ep2:
+7bcf d8e00002 arg 2 ,queue 
+7bd0 da200737 arg mem_usb_txbuf2 ,rega 
+7bd1 62310c0c storer rega ,2 ,core_usb_tx_saddr2 
+7bd2 20207bc6 branch usb_tx_buf 
+
+usb_tx:
+7bd3 47184026 bpatchx patch26_0 ,mem_patch26 
+7bd4 6fe088eb fetch 1 ,mem_usb_tx_enable 
+7bd5 207a0000 rtn blank 
+7bd6 6ff08c25 fetch 1 ,core_usb_txbusy 
+7bd7 1fe17e0f and_into 0x0f ,pdata 
+7bd8 243a7c32 nbranch usb_inwake_state_tx_dispose ,blank 
+7bd9 6fe088ec fetch 1 ,mem_usb_device_enumeration_endflag 
+7bda 203a7bfe branch usb_tx_fifo_release ,blank 
+7bdb 6fe088de fetch 1 ,mem_usb_state 
+7bdc c001fc42 beq usb_sleep ,usb_windows_wakeup 
+7bdd c0817bfe bne usb_connected ,usb_tx_fifo_release 
+7bde 6fe088e0 fetch 1 ,mem_usb_clear_remote_wakeup 
+7bdf 243a7bfe nbranch usb_tx_fifo_release ,blank 
+7be0 20407be2 call usb_tx_data_ep1 
+7be1 20207bee branch usb_tx_data_ep2 
+
+usb_tx_data_ep1:
+7be2 6ff08c25 fetch 1 ,core_usb_txbusy 
+7be3 c3808000 rtnbit1 1 
+7be4 6fe088eb fetch 1 ,mem_usb_tx_enable 
+7be5 c4008000 rtnbit0 1 
+7be6 6fe088eb fetch 1 ,mem_usb_tx_enable 
+7be7 793ffe01 set0 1 ,pdata 
+7be8 67e088eb store 1 ,mem_usb_tx_enable 
+7be9 4718c026 bpatchx patch26_1 ,mem_patch26 
+7bea 6fe088e9 fetch 1 ,mem_usb_ep1_data 
+7beb 207a0000 rtn blank 
+7bec c0087c20 beq usb_ep1_kb ,usb_tx_kb_normal_data 
+7bed 2020233e branch assert 
+
+usb_tx_data_ep2:
+7bee 6ff08c25 fetch 1 ,core_usb_txbusy 
+7bef c3810000 rtnbit1 2 
+7bf0 6fe088eb fetch 1 ,mem_usb_tx_enable 
+7bf1 c4010000 rtnbit0 2 
+7bf2 6fe088eb fetch 1 ,mem_usb_tx_enable 
+7bf3 793ffe02 set0 2 ,pdata 
+7bf4 67e088eb store 1 ,mem_usb_tx_enable 
+7bf5 47194026 bpatchx patch26_2 ,mem_patch26 
+7bf6 6fe088ea fetch 1 ,mem_usb_ep2_data 
+7bf7 207a0000 rtn blank 
+7bf8 c0107c01 beq usb_ep2_ms ,usb_tx_ms_data 
+7bf9 c010fc1c beq usb_ep2_multikey ,usb_tx_kb_multikey_data 
+7bfa c0117c26 beq usb_ep2_systemkey ,usb_tx_kb_systemkey_data 
+7bfb c011fc2a beq usb_ep2_bit_consumer ,usb_tx_kb_bit_consumer_data 
+7bfc c0127c2e beq usb_ep2_n_key_rollover ,usb_tx_kb_n_key_rollover_data 
+7bfd 2020233e branch assert 
+
+usb_tx_fifo_release:
+7bfe d8a008f1 arg mem_usb_mouse_data ,contw 
+7bff df200040 arg 64 ,loopcnt 
+7c00 20207ca5 branch memset0 
+
+usb_tx_ms_data:
+7c01 6fe088d9 fetch 1 ,mem_usb_idle_flag 
+7c02 684888db fetcht 1 ,mem_usb_get_protocol_flag 
+7c03 98417e00 iand temp ,pdata 
+7c04 203a7c18 branch usb_tx_ms_data_normal_mode ,blank 
+7c05 684888dc fetcht 1 ,mem_usb_set_protocol_status 
+7c06 9840fe00 iadd temp ,pdata 
+7c07 c000fc09 beq mac_boot_mode ,usb_tx_ms_data_mac_boot_mode 
+7c08 20207c18 branch usb_tx_ms_data_normal_mode 
+
+usb_tx_ms_data_mac_boot_mode:
+7c09 7008ea00 jam 0 ,mem_usb_ep2_data 
+
+usb_tx_ms_data_mac_boot_regroup:
+7c0a 6fe088f2 fetch 1 ,mem_usb_mouse_data + 1 
+7c0b c0017c19 beq r_key ,usb_tx_mac_boot_ms_regroup_r_or_lrkey 
+7c0c c001fc19 beq lr_key ,usb_tx_mac_boot_ms_regroup_r_or_lrkey 
+7c0d 6fe088f2 fetch 1 ,mem_usb_mouse_data + 1 
+7c0e 67e088f1 store 1 ,mem_usb_mouse_data 
+7c0f 6fe088f3 fetch 1 ,mem_usb_mouse_data + 2 
+7c10 e7e08005 istore 1 ,contw 
+7c11 6fe088f5 fetch 1 ,mem_usb_mouse_data + 4 
+7c12 e7e08005 istore 1 ,contw 
+7c13 6fe088f7 fetch 1 ,mem_usb_mouse_data + 6 
+7c14 e7e08005 istore 1 ,contw 
+7c15 df200004 arg 4 ,loopcnt 
+7c16 d8c008f1 arg mem_usb_mouse_data ,contr 
+7c17 20207bcf branch usb_tx_ep2 
+
+usb_tx_ms_data_normal_mode:
+7c18 7008ea00 jam 0 ,mem_usb_ep2_data 
+
+usb_tx_mac_boot_ms_regroup_r_or_lrkey:
+7c19 df200008 arg 8 ,loopcnt 
+7c1a d8c008f1 arg mem_usb_mouse_data ,contr 
+7c1b 20207bcf branch usb_tx_ep2 
+
+usb_tx_kb_multikey_data:
+7c1c 7008ea00 jam 0 ,mem_usb_ep2_data 
+7c1d df200003 arg 3 ,loopcnt 
+7c1e d8c00921 arg mem_usb_kb_multikey ,contr 
+7c1f 20207bcf branch usb_tx_ep2 
+
+usb_tx_kb_normal_data:
+7c20 6fe0c3cf fetch 1 ,mem_device_option 
+7c21 c007ca10 beq dvc_op_keyboard ,keyboard_usb_tx_kb_normal_data 
+7c22 7008e900 jam 0 ,mem_usb_ep1_data 
+7c23 df200008 arg 8 ,loopcnt 
+7c24 d8c00901 arg mem_usb_kb_data ,contr 
+7c25 20207bc3 branch usb_tx_ep1 
+
+usb_tx_kb_systemkey_data:
+7c26 7008ea00 jam 0 ,mem_usb_ep2_data 
+7c27 df200002 arg 2 ,loopcnt 
+7c28 d8c00929 arg mem_usb_kb_system ,contr 
+7c29 20207bcf branch usb_tx_ep2 
+
+usb_tx_kb_bit_consumer_data:
+7c2a 7008ea00 jam 0 ,mem_usb_ep2_data 
+7c2b df200004 arg 4 ,loopcnt 
+7c2c d8c00921 arg mem_usb_kb_multikey ,contr 
+7c2d 20207bcf branch usb_tx_ep2 
+
+usb_tx_kb_n_key_rollover_data:
+7c2e 7008ea00 jam 0 ,mem_usb_ep2_data 
+7c2f df20000f arg 15 ,loopcnt 
+7c30 d8c00911 arg mem_usb_kb_n_key_rollvoer_data ,contr 
+7c31 20207bcf branch usb_tx_ep2 
+
+usb_inwake_state_tx_dispose:
+7c32 6fe088de fetch 1 ,mem_usb_state 
+7c33 c0017c35 beq usb_connected ,usb_mac_wakeup_trig 
+7c34 20600000 rtn 
+
+usb_mac_wakeup_trig:
+7c35 6ff08c00 fetch 1 ,core_usb_config 
+7c36 79207e07 set1 7 ,pdata 
+7c37 67f08c00 store 1 ,core_usb_config 
+7c38 7008ee01 jam 1 ,mem_usb_mac_wakeup_trig 
+7c39 20600000 rtn 
+
+usb_mac_wakeup_judge:
+7c3a 6fe088de fetch 1 ,mem_usb_state 
+7c3b c1018000 rtneq usb_sleep 
+7c3c c0017c3e beq usb_connected ,usb_mac_wakeup 
+7c3d 20600000 rtn 
+
+usb_mac_wakeup:
+7c3e 6fe088ee fetch 1 ,mem_usb_mac_wakeup_trig 
+7c3f 207a0000 rtn blank 
+7c40 7008ed01 jam 1 ,mem_usb_wakestate_onetime_flag 
+7c41 20207c45 branch usb_wakeup 
+
+usb_windows_wakeup:
+7c42 d8e0000f arg usb_timer_wakeup ,queue 
+7c43 20407cf1 call timer_check 
+7c44 247a0000 nrtn blank 
+
+usb_wakeup:
+7c45 6ff08c00 fetch 1 ,core_usb_config 
+7c46 c4038000 rtnbit0 7 
+7c47 708c00fc jam 0xfc ,core_usb_config 
+7c48 20007530 nop 30000 
+7c49 708c003c jam 0x3c ,core_usb_config 
+7c4a 20600000 rtn 
+
+push_stack:
+7c4b 60a1066f storer contw ,2 ,mem_contw 
+7c4c 604c0656 storet 8 ,mem_temp 
+7c4d 6162065e storer timeup ,4 ,mem_timeup 
+7c4e 20407c53 call push_stack_rega_b_c 
+7c4f 60c1066d storer contr ,2 ,mem_contr 
+7c50 67210679 storer loopcnt ,2 ,mem_loopcnt 
+7c51 60e10677 storer queue ,2 ,mem_queue 
+7c52 20600000 rtn 
+
+push_stack_rega_b_c:
+7c53 62220662 storer rega ,4 ,mem_rega 
+7c54 62420666 storer regb ,4 ,mem_regb 
+7c55 6261866a storer regc ,3 ,mem_regc 
+7c56 20600000 rtn 
+
+pop_stack:
+7c57 4719c026 bpatchx patch26_3 ,mem_patch26 
+7c58 6fe1066f fetch 2 ,mem_contw 
+7c59 98000a00 iforce contw 
+7c5a 684c0656 fetcht 8 ,mem_temp 
+7c5b 6962065e fetchr timeup ,4 ,mem_timeup 
+7c5c 20407c62 call pop_stack_rega_b_c 
+7c5d 6f210679 fetchr loopcnt ,2 ,mem_loopcnt 
+7c5e 68e10677 fetchr queue ,2 ,mem_queue 
+7c5f 6fe1066d fetch 2 ,mem_contr 
+7c60 98000c00 iforce contr 
+7c61 20600000 rtn 
+
+pop_stack_rega_b_c:
+7c62 6a220662 fetchr rega ,4 ,mem_rega 
+7c63 6a420666 fetchr regb ,4 ,mem_regb 
+7c64 6a61866a fetchr regc ,3 ,mem_regc 
+7c65 20600000 rtn 
+
+get_contw:
+7c66 6fe1066f fetch 2 ,mem_contw 
+
+get_contw_end:
+7c67 1fe20a00 copy pdata ,contw 
+7c68 20600000 rtn 
+
+get_contr:
+7c69 6fe1066d fetch 2 ,mem_contr 
+
+get_contr_end:
+7c6a 1fe20c00 copy pdata ,contr 
+7c6b 20600000 rtn 
+
+store_contw:
+7c6c 18a27e00 copy contw ,pdata 
+7c6d 67e1066f store 2 ,mem_contw 
+7c6e 20600000 rtn 
+
+store_contr:
+7c6f 18c27e00 copy contr ,pdata 
+7c70 67e1066d store 2 ,mem_contr 
+7c71 20600000 rtn 
+
+save_cont_pointers:
+7c72 18a27e00 copy contw ,pdata 
+7c73 67e1066f store 2 ,mem_contw 
+7c74 18c27e00 copy contr ,pdata 
+7c75 67e1066d store 2 ,mem_contr 
+7c76 20600000 rtn 
+
+load_cont_pointers:
+7c77 6fe1066f fetch 2 ,mem_contw 
+7c78 1fe20a00 copy pdata ,contw 
+7c79 6fe1066d fetch 2 ,mem_contr 
+7c7a 1fe20c00 copy pdata ,contr 
+7c7b 20600000 rtn 
+
+get_diff:
+7c7c 98462200 isub temp ,rega 
+7c7d 20610000 rtn positive 
+7c7e da200100 arg 0x100 ,rega 
+7c7f 9a20fe00 iadd rega ,pdata 
+7c80 98462200 isub temp ,rega 
+7c81 20600000 rtn 
+
+memcpy96:
+7c82 20407c8f call memcpy32 
+
+memcpy64:
+7c83 20407c8f call memcpy32 
+7c84 20207c8f branch memcpy32 
+
+memcpy12:
+7c85 20407c8b call memcpy8 
+
+memcpy4:
+7c86 efe08006 ifetch 1 ,contr 
+7c87 e7e08005 istore 1 ,contw 
+
+memcpy3:
+7c88 efe18006 ifetch 3 ,contr 
+7c89 e7e18005 istore 3 ,contw 
+7c8a 20600000 rtn 
+
+memcpy8:
+7c8b efe40006 ifetch 8 ,contr 
+7c8c e7e40005 istore 8 ,contw 
+7c8d 20600000 rtn 
+
+memcpy48:
+7c8e 20407c91 call memcpy16 
+
+memcpy32:
+7c8f 20407c8b call memcpy8 
+
+memcpy24:
+7c90 20407c8b call memcpy8 
+
+memcpy16:
+7c91 20407c8b call memcpy8 
+7c92 20207c8b branch memcpy8 
+
+delay:
+7c93 1fe0ffff increase -1 ,pdata 
+7c94 20000026 nop 38 
+7c95 243a7c93 nbranch delay ,blank 
+7c96 20600000 rtn 
+
+delay_10ms:
+7c97 df20000a arg 10 ,loopcnt 
+
+delay_ms_wait:
+7c98 20002ee0 nop 12000 
+7c99 c2007c98 loop delay_ms_wait 
+7c9a 20600000 rtn 
+
+memset0_16:
+7c9b 20407c9c call memset0_8 
+
+memset0_8:
+7c9c 20407c9d call memset0_4 
+
+memset0_4:
+7c9d 18007204 force 4 ,loopcnt 
+7c9e 20207ca5 branch memset0 
+
+clear_mem_256:
+7c9f 18007220 force 32 ,loopcnt 
+7ca0 20207ca5 branch memset0 
+
+clear_mem_512:
+7ca1 18007240 force 64 ,loopcnt 
+7ca2 20207ca5 branch memset0 
+
+clear_mem:
+7ca3 1f227e00 deposit loopcnt 
+7ca4 207a0000 rtn blank 
+
+memset0:
+7ca5 18007e00 force 0 ,pdata 
+7ca6 e7e00005 lstore contw 
+7ca7 20600000 rtn 
+
+clear_temp_block:
+7ca8 df200020 arg 32 ,loopcnt 
+7ca9 d8a0067f arg mem_temp_block0 ,contw 
+7caa 20207ca3 branch clear_mem 
+
+xor_loop:
+7cab efe20013 ifetch 4 ,regc 
+7cac e8420011 ifetcht 4 ,rega 
+7cad 9842fe00 ixor temp ,pdata 
+7cae e7e20005 istore 4 ,contw 
+7caf 1a20a204 increase 4 ,rega 
+7cb0 1a60a604 increase 4 ,regc 
+7cb1 c2007cab loop xor_loop 
+7cb2 20600000 rtn 
+
+inverse_data:
+7cb3 471a4026 bpatchx patch26_4 ,mem_patch26 
+7cb4 1f227e00 copy loopcnt ,pdata 
+7cb5 1fe67c01 sub pdata ,1 ,null 
+7cb6 20610000 rtn positive 
+7cb7 9a20a400 iadd rega ,regb 
+7cb8 1a40a5ff increase -1 ,regb 
+7cb9 1f237200 rshift loopcnt ,loopcnt 
+
+inverse_loop:
+7cba e8408011 ifetcht 1 ,rega 
+7cbb efe08012 ifetch 1 ,regb 
+7cbc e7e08011 istore 1 ,rega 
+7cbd e0408012 istoret 1 ,regb 
+7cbe 1a40a5ff increase -1 ,regb 
+7cbf 1a20a201 increase 1 ,rega 
+7cc0 c2007cba loop inverse_loop 
+7cc1 20600000 rtn 
+
+le2be_6byte:
+
+inverse_data_6byte:
+7cc2 1fef0400 rshift32 pdata ,temp 
+7cc3 20407cc8 call inverse_data_4byte 
+7cc4 18508400 byteswap temp ,temp 
+7cc5 1ff07e00 lshift16 pdata ,pdata 
+7cc6 9841fe00 ior temp ,pdata 
+7cc7 20600000 rtn 
+
+le2be_4byte:
+
+inverse_data_4byte:
+7cc8 1ff10c00 rshift16 pdata ,contr 
+7cc9 18d08c00 byteswap contr ,contr 
+7cca 1ff0fe00 byteswap pdata ,pdata 
+7ccb 1ff07e00 lshift16 pdata ,pdata 
+7ccc 98c1fe00 ior contr ,pdata 
+7ccd 20600000 rtn 
+
+memcpy_fast:
+7cce 471ac026 bpatchx patch26_5 ,mem_patch26 
+7ccf 1f227e00 deposit loopcnt 
+7cd0 207a0000 rtn blank 
+
+memcpy_fast_loop:
+7cd1 1f20f3f8 increase -8 ,loopcnt 
+7cd2 20417c8b call memcpy8 ,positive 
+7cd3 20628000 rtn zero 
+7cd4 20217cd1 branch memcpy_fast_loop ,positive 
+7cd5 1f20f208 increase 8 ,loopcnt 
+
+memcpy_fast_loop_four:
+7cd6 1f20f3fc increase -4 ,loopcnt 
+7cd7 20417c86 call memcpy4 ,positive 
+7cd8 20628000 rtn zero 
+7cd9 20217cd6 branch memcpy_fast_loop_four ,positive 
+7cda 1f20f204 increase 4 ,loopcnt 
+7cdb 20207cdc branch memcpy 
+
+memcpy:
+7cdc 1f227e00 deposit loopcnt 
+7cdd 207a0000 rtn blank 
+
+memcpy_loop:
+7cde efe08006 ifetch 1 ,contr 
+7cdf e7e08005 istore 1 ,contw 
+7ce0 c2007cde loop memcpy_loop 
+7ce1 20600000 rtn 
+
+timer_stop:
+7ce2 58000000 setarg 0 
+
+timer_init:
+7ce3 67e1064e store 2 ,mem_pdatatemp 
+7ce4 471b4026 bpatchx patch26_6 ,mem_patch26 
+7ce5 20407cf1 call timer_check 
+7ce6 6849064e fetcht 2 ,mem_pdatatemp 
+7ce7 d8a040f4 arg mem_timers ,contw 
+7ce8 18e3fe00 lshift queue ,pdata 
+7ce9 98a08a00 iadd contw ,contw 
+7cea e0410005 istoret 2 ,contw 
+7ceb 20600000 rtn 
+
+timer_check_timeout:
+7cec d9600800 arg 0x800 ,timeup 
+7ced 19701600 lshift16 timeup ,timeup 
+7cee 9960fe00 iadd timeup ,pdata 
+7cef 20600000 rtn 
+
+timer_reinit:
+7cf0 d8e00000 arg 0 ,queue 
+
+timer_check:
+7cf1 471bc026 bpatchx patch26_7 ,mem_patch26 
+7cf2 684a4095 fetcht 4 ,mem_last_clkn 
+7cf3 1c437e00 rshift clkn_bt ,pdata 
+7cf4 67e24095 store 4 ,mem_last_clkn 
+7cf5 98467c00 isub temp ,null 
+7cf6 24417cec ncall timer_check_timeout ,positive 
+7cf7 98461600 isub temp ,timeup 
+7cf8 19620400 copy timeup ,temp 
+7cf9 d8c040f4 arg mem_timers ,contr 
+7cfa 18c20a00 copy contr ,contw 
+7cfb df200010 arg 16 ,loopcnt 
+
+timer_loop:
+7cfc efe10006 ifetch 2 ,contr 
+7cfd 98467e00 isub temp ,pdata 
+7cfe 20217d00 branch timer_counting ,positive 
+7cff 18007e00 force 0 ,pdata 
+
+timer_counting:
+7d00 e7e10005 istore 2 ,contw 
+7d01 c2007cfc loop timer_loop 
+7d02 d8c040f4 arg mem_timers ,contr 
+7d03 18e3fe00 lshift queue ,pdata 
+7d04 98c08c00 iadd contr ,contr 
+7d05 efe10006 ifetch 2 ,contr 
+7d06 20600000 rtn 
+
+clk_add:
+7d07 98408400 iadd temp ,temp 
+7d08 18427200 copy temp ,loopcnt 
+7d09 6fe10044 fetch 2 ,mem_param_rt_rthalfslot 
+7d0a 9f267e00 isub loopcnt ,pdata 
+7d0b 20610000 rtn positive 
+7d0c 1fe67e00 sub pdata ,0 ,pdata 
+7d0d 18510400 rshift16 temp ,temp 
+7d0e 18408401 increase 1 ,temp 
+7d0f 18500400 lshift16 temp ,temp 
+7d10 98418400 ior temp ,temp 
+7d11 20600000 rtn 
+
+clk_diff_rt:
+7d12 20407d14 call clk_diff 
+7d13 20207d21 branch clk2rt 
+
+clk_diff:
+7d14 78547c00 disable user 
+7d15 98467e00 isub temp ,pdata 
+7d16 20217d19 branch clk_diff_pos ,positive 
+7d17 78347c00 enable user 
+7d18 1fe67e00 sub pdata ,0 ,pdata 
+
+clk_diff_pos:
+7d19 c4078000 rtnbit0 15 
+7d1a 1fe22800 copy pdata ,regab 
+7d1b d8410000 arg 0x10000 ,temp 
+7d1c 6fe10044 fetch 2 ,mem_param_rt_rthalfslot 
+7d1d 98467e00 isub temp ,pdata 
+7d1e 9a80fe00 iadd regab ,pdata 
+7d1f 793ffe40 set0 64 ,pdata 
+7d20 20600000 rtn 
+
+clk2rt:
+7d21 68490044 fetcht 2 ,mem_param_rt_rthalfslot 
+7d22 98000c00 iforce contr 
+7d23 1ff17e00 rshift16 pdata ,pdata 
+7d24 984ffe00 imul32 temp ,pdata 
+7d25 98c0fe00 iadd contr ,pdata 
+7d26 20600000 rtn 
+
+clk2lpo:
+7d27 1fed7e00 lshift8 pdata ,pdata 
+7d28 1ff27e00 lshift4 pdata ,pdata 
+7d29 6849c0bd fetcht 3 ,mem_clks_per_lpo 
+7d2a 9846fc00 idiv temp 
+7d2b 20407d64 call wait_div_end 
+7d2c 18078400 quotient temp 
+7d2d 20600000 rtn 
+
+clk2bt:
+7d2e 68490044 fetcht 2 ,mem_param_rt_rthalfslot 
+7d2f 9846fc00 idiv temp 
+7d30 20407d61 call get_div_result 
+7d31 1ff07e00 lshift16 pdata ,pdata 
+7d32 18070400 remainder temp 
+7d33 98418400 ior temp ,temp 
+7d34 20600000 rtn 
+
+string2dec_from_uart:
+7d35 d8400000 arg 0 ,temp 
+
+string2dec_from_uart_done:
+7d36 18422800 copy temp ,regab 
+7d37 efe08003 ifetch 1 ,contu 
+7d38 20407d41 call uchar2dialog 
+7d39 1a820400 copy regab ,temp 
+7d3a 20407d72 call swap 
+7d3b da40000a arg 10 ,regb 
+7d3c 9a4ffe00 imul32 regb ,pdata 
+7d3d 9840fe00 iadd temp ,pdata 
+7d3e 1fe20400 copy pdata ,temp 
+7d3f c2007d36 loop string2dec_from_uart_done 
+7d40 20600000 rtn 
+
+uchar2dialog:
+7d41 d840003a arg 0x3a ,temp 
+7d42 98467c00 isub temp ,null 
+7d43 24217d4a nbranch uchar2dialog_number ,positive 
+7d44 d8400061 arg 0x61 ,temp 
+7d45 98467c00 isub temp ,null 
+7d46 20217d4d branch uchar2dialog_a2f ,positive 
+7d47 d8400037 arg 0x37 ,temp 
+7d48 98467e00 isub temp ,pdata 
+7d49 20600000 rtn 
+
+uchar2dialog_number:
+7d4a d8400030 arg 0x30 ,temp 
+7d4b 98467e00 isub temp ,pdata 
+7d4c 20600000 rtn 
+
+uchar2dialog_a2f:
+7d4d d8400057 arg 0x57 ,temp 
+7d4e 98467e00 isub temp ,pdata 
+7d4f 20600000 rtn 
+
+right_shift_n:
+7d50 1f267c00 sub loopcnt ,0 ,null 
+7d51 20628000 rtn zero 
+
+right_shift_n_loop:
+7d52 1fe37e00 rshift pdata ,pdata 
+7d53 c2007d52 loop right_shift_n_loop 
+7d54 20600000 rtn 
+
+left_shift_n:
+7d55 18007e01 force 1 ,pdata 
+7d56 1f267c00 sub loopcnt ,0 ,null 
+7d57 20628000 rtn zero 
+
+left_shift_n_loop:
+7d58 1fe3fe00 lshift pdata ,pdata 
+7d59 c2007d58 loop left_shift_n_loop 
+7d5a 20600000 rtn 
+
+calc_average:
+7d5b 58000000 setarg 0 
+7d5c 1f222200 copy loopcnt ,rega 
+
+calc_average_loop:
+7d5d e8410006 ifetcht 2 ,contr 
+7d5e 9840fe00 iadd temp ,pdata 
+7d5f c2007d5d loop calc_average_loop 
+7d60 9a26fc00 idiv rega 
+
+get_div_result:
+7d61 20407d64 call wait_div_end 
+7d62 1807fe00 quotient pdata 
+7d63 20600000 rtn 
+
+wait_div_end:
+7d64 207a8000 rtn modone 
+7d65 20207d64 branch wait_div_end 
+
+compare_loop:
+
+string_compare:
+7d66 efe08011 ifetch 1 ,rega 
+7d67 e8408012 ifetcht 1 ,regb 
+7d68 98467c00 isub temp ,null 
+7d69 24628000 nrtn zero 
+7d6a 1a20a201 increase 1 ,rega 
+7d6b 1a40a401 increase 1 ,regb 
+7d6c c2007d66 loop string_compare 
+7d6d 20207dba branch enable_zero 
+
+ceiling:
+7d6e 98467c00 isub temp ,null 
+7d6f 24610000 nrtn positive 
+7d70 18427e00 deposit temp 
+7d71 20600000 rtn 
+
+swap:
+7d72 9840fe00 iadd temp ,pdata 
+7d73 98460400 isub temp ,temp 
+7d74 98467e00 isub temp ,pdata 
+7d75 20600000 rtn 
+
+clean_smem:
+7d76 d8a00000 arg 0 ,contw 
+7d77 20207d79 branch clean_mem 
+
+clean_xmem:
+7d78 d8a04000 arg 0x4000 ,contw 
+
+clean_mem:
+7d79 df201000 arg 0x1000 ,loopcnt 
+7d7a 20207ca5 branch memset0 
+
+callback_func:
+7d7b 207a0000 rtn blank 
+7d7c 1fe27a00 copy pdata ,pc 
+
+ice_break_disable_wdt:
+7d7d 2040711d call wdt_set_disable 
+
+ice_break:
+7d7e 70820301 jam 0x1 ,core_ice_ctrl 
+7d7f 20600000 rtn 
+
+ice_setbp:
+7d80 67f10205 store 2 ,core_ice_break0 
+7d81 6ff08203 fetch 1 ,core_ice_ctrl 
+7d82 79207e04 set1 4 ,pdata 
+7d83 67f08203 store 1 ,core_ice_ctrl 
+7d84 20600000 rtn 
+
+ice_setbp2:
+7d85 67f10207 store 2 ,core_ice_break1 
+7d86 6ff08203 fetch 1 ,core_ice_ctrl 
+7d87 79207e06 set1 6 ,pdata 
+7d88 67f08203 store 1 ,core_ice_ctrl 
+7d89 20600000 rtn 
+
+ice_set_write_bp:
+7d8a 67f10205 store 2 ,core_ice_break0 
+7d8b 70820330 jam 0x30 ,core_ice_ctrl 
+7d8c 20600000 rtn 
+
+fifo_in:
+7d8d 471c4027 bpatchx patch27_0 ,mem_patch27 
+7d8e e8440011 ifetcht util_fifo_len ,rega 
+7d8f 18417eff and temp ,0xff ,pdata 
+7d90 243a7d93 nbranch fifo_in_push ,blank 
+7d91 184cfe00 rshift8 temp ,pdata 
+7d92 e7e40011 istore util_fifo_len ,rega 
+
+fifo_in_push:
+7d93 1a20a207 increase util_fifo_len + util_fifo_offset ,rega 
+7d94 efe08011 ifetch 1 ,rega 
+7d95 243a233e nbranch assert ,blank 
+7d96 6fe0864d fetch 1 ,mem_fifo_temp 
+7d97 e7e08011 istore 1 ,rega 
+7d98 20600000 rtn 
+
+fifo_out:
+7d99 471cc027 bpatchx patch27_1 ,mem_patch27 
+7d9a df200008 arg util_fifo_len ,loopcnt 
+7d9b efe40011 ifetch util_fifo_len ,rega 
+7d9c 207a0000 rtn blank 
+
+fifo_out_loop:
+7d9d efe08011 ifetch 1 ,rega 
+7d9e 243a7da2 nbranch fifo_out_end ,blank 
+7d9f 1a20a201 increase 1 ,rega 
+7da0 c2007d9d loop fifo_out_loop 
+7da1 2020233e branch assert 
+
+fifo_out_end:
+7da2 d8400000 arg 0 ,temp 
+7da3 e0408011 istoret 1 ,rega 
+7da4 20600000 rtn 
+
+fifo_is_empty:
+7da5 efe40011 ifetch util_fifo_len ,rega 
+7da6 20600000 rtn 
+
+fifo_is_full:
+7da7 efe08011 ifetch 1 ,rega 
+7da8 20600000 rtn 
+
+fifo_is_near_full:
+7da9 efe10011 ifetch 2 ,rega 
+7daa 20600000 rtn 
+
+fifo_content_count:
+7dab d8400000 arg 0 ,temp 
+
+fifo_content_count_loop:
+7dac 6fe08006 fetch 1 ,contr 
+7dad c2007dac loop fifo_content_count_loop ,blank 
+7dae 18408401 increase 1 ,temp 
+7daf c2007dac loop fifo_content_count_loop 
+7db0 18427e00 copy temp ,pdata 
+7db1 20600000 rtn 
+
+not_greater_than:
+7db2 98467c00 isub temp ,null 
+7db3 24610000 nrtn positive 
+
+copy_temp2pdata:
+7db4 18427e00 copy temp ,pdata 
+7db5 20600000 rtn 
+
+disable_positive:
+7db6 18007dff force -1 ,null 
+7db7 20600000 rtn 
+
+enable_positive:
+
+disable_zero:
+7db8 18007c01 force 1 ,null 
+7db9 20600000 rtn 
+
+enable_zero:
+7dba 18007c00 force 0 ,null 
+7dbb 20600000 rtn 
+
+enable_user:
+7dbc 78347c00 enable user 
+7dbd 20600000 rtn 
+
+disable_user:
+7dbe 78547c00 disable user 
+7dbf 20600000 rtn 
+
+enable_user2:
+7dc0 78367c00 enable user2 
+7dc1 20600000 rtn 
+
+disable_user2:
+7dc2 78567c00 disable user2 
+7dc3 20600000 rtn 
+
+enable_user7:
+7dc4 7838fc00 enable user7 
+7dc5 20600000 rtn 
+
+disable_true:
+7dc6 7840fc00 disable true 
+7dc7 20600000 rtn 
+
+enable_true:
+7dc8 7820fc00 enable true 
+7dc9 20600000 rtn 
+
+disable_blank:
+7dca 58000001 setarg 1 
+7dcb 20600000 rtn 
+
+enable_blank:
+
+set_pdata_0:
+7dcc 58000000 setarg 0 
+7dcd 20600000 rtn 
+
+istore_1_contw_rtn:
+7dce e7e08005 istore 1 ,contw 
+7dcf 20600000 rtn 
+
+cal_sum:
+7dd0 1f267c00 sub loopcnt ,0 ,null 
+7dd1 20628000 rtn zero 
+
+cal_sum_loop:
+7dd2 e8408006 ifetcht 1 ,contr 
+7dd3 9840fe00 iadd temp ,pdata 
+7dd4 c2007dd2 loop cal_sum_loop 
+7dd5 20600000 rtn 
+
+reverse_byte:
+7dd6 1f227e00 copy loopcnt ,pdata 
+7dd7 207a0000 rtn blank 
+7dd8 18c27e00 copy contr ,pdata 
+7dd9 9f20fe00 iadd loopcnt ,pdata 
+7dda 1fe0ffff increase -1 ,pdata 
+7ddb 1fe20c00 copy pdata ,contr 
+
+reverse_loop:
+7ddc efe08006 ifetch 1 ,contr 
+7ddd 18c08dfe increase -2 ,contr 
+7dde e7e08005 istore 1 ,contw 
+7ddf c2007ddc loop reverse_loop 
+7de0 20600000 rtn 
+
+lshift14:
+7de1 1ff07e00 lshift16 pdata ,pdata 
+
+rshift2:
+7de2 1feb7e00 rshift2 pdata ,pdata 
+7de3 20600000 rtn 
+
+lshift6:
+7de4 1fed7e00 lshift8 pdata ,pdata 
+7de5 20207de2 branch rshift2 
+
+clear_wake:
+7de6 471d4027 bpatchx patch27_2 ,mem_patch27 
+7de7 58000000 setarg 0 
+7de8 79207e15 set1 21 ,pdata 
+7de9 67e40016 store 8 ,mem_gpio_wakeup_cfg 
+7dea 58000000 setarg 0 
+7deb e7e20005 istore 4 ,contw 
+7dec 20600000 rtn 
+
+generate_random:
+7ded df200010 arg 16 ,loopcnt 
+
+generate_random_loop:
+7dee 180a7e00 random pdata 
+7def e7e08005 istore 1 ,contw 
+7df0 c2007dee loop generate_random_loop 
+7df1 20600000 rtn 
+              org 0x10001
+
+z_entrance0:
+10001 c0000005 beq zcode_00 ,z_mouse_start_work 
+10002 c000800b beq zcode_01 ,z_mouse_param_info_init 
+10003 c0010015 beq zcode_02 ,z_mouse_default_init 
+10004 20600000 rtn 
+
+z_mouse_start_work:
+10005 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+10006 c29f594b bbit1 mouse_enable_24g_first_auto_pairing ,mouse_24g_first_start_auto_pair_mode 
+10007 6fe0c678 fetch 1 ,mem_device_flag 
+10008 c000593a beq mode_24g_device ,mouse_24g_start_mode 
+10009 204002e4 call p_mouse_le_param_default 
+1000a 20204dfa branch mouse_le_fast_conn_judge 
+
+z_mouse_param_info_init:
+1000b 20404d89 call mouse_param_info_init + 1 
+1000c 58004d00 setarg mem_le_tx_buffer0_omemalloc_new 
+1000d 67e14343 store 2 ,mem_ble_l2cap_tx_buff0_ptr 
+1000e 58000050 setarg mouse_ble_l2cap_txbuff_size_new 
+1000f 67e14345 store 2 ,mem_ble_l2cap_tx_buff_size_ptr 
+10010 580006f2 setarg mem_ui_le_uuid_table_new 
+10011 67e142f9 store 2 ,mem_ui_le_uuid_table 
+10012 7042e346 jam 70 ,mem_le_local_mtu 
+10013 7046380f jam 0x0f ,mem_24g_fast_hop_count 
+10014 20600000 rtn 
+
+z_mouse_default_init:
+10015 204067ff call hid_device_default_parm_init 
+10016 20404d4e call mouse_xtal_init 
+10017 20404d53 call mouse_24g_phy_select 
+10018 204058fc call mouse_24g_long_sleep_set 
+10019 20400020 call z_g24_pair_param_init 
+1001a 7045e101 jam 1 ,mem_24g_disable_fec1 
+1001b 70444e01 jam 1 ,mem_power_ctrl_disable 
+1001c 700ea200 jam 0 ,mem_voice_queue_count 
+1001d 7048fa01 jam 1 ,mem_mouse_sleep_deal_type 
+1001e 7048ef10 jam 0x10 ,mem_mouse_24g_tx_time_sum_count 
+1001f 20600000 rtn 
+
+z_g24_pair_param_init:
+10020 7045e74a jam 0x4a ,mem_24g_pair_ch 
+10021 6fe24cb7 fetch 4 ,mem_24g_pair_addr_new 
+10022 67e245e3 store 4 ,mem_24g_pair_addr 
+10023 20600000 rtn 
+              org 0x20001
+
+z_entrance1:
+20001 c0080005 beq zcode_10 ,z_mouse_load_device_info_check 
+20002 c0088018 beq zcode_11 ,z_mouse_24g_attempt_fail 
+20003 c0090024 beq zcode_12 ,z_mouse_eeprom_load_le_att_list_info 
+20004 20600000 rtn 
+
+z_mouse_load_device_info_check:
+20005 20400024 call z_mouse_eeprom_load_le_att_list_info 
+20006 20405640 call mouse_load_eeprom_info_check 
+20007 20400010 call z_mouse_load_key_info_check_flag 
+20008 6fe0ce5e fetch 1 ,mem_mouse_key_information_set_flag 
+20009 205a0014 call z_mouse_load_key_info_check ,blank 
+2000a 6fe0c6a2 fetch 1 ,mem_mouse_dpi 
+2000b 67e0cce2 store 1 ,mem_mouse_last_dpi 
+2000c d8400008 arg 8 ,temp 
+2000d da20486a arg msm_ms_auth_sn ,rega 
+2000e da400082 arg mouse_auth_info_offset ,regb 
+2000f 20206cd7 branch iicd_read_eep_data 
+
+z_mouse_load_key_info_check_flag:
+20010 d8400001 arg 1 ,temp 
+20011 da204e5e arg mem_mouse_key_information_set_flag ,rega 
+20012 da400099 arg mouse_value_flag_offect ,regb 
+20013 20206cd7 branch iicd_read_eep_data 
+
+z_mouse_load_key_info_check:
+20014 d840000f arg 15 ,temp 
+20015 da204e4f arg mem_mouse_key_information_start ,rega 
+20016 da40008a arg mouse_value_eeprom_offect ,regb 
+20017 20206cd7 branch iicd_read_eep_data 
+
+z_mouse_24g_attempt_fail:
+20018 6fe0c5f9 fetch 1 ,mem_24g_reconn_type 
+20019 c002d98c beq pair_and_receiver ,mouse_24g_auto_pair_attempt_fail 
+2001a c000801c beq fast_conn_and_receiver ,z_mouse_24g_fast_conn_attempt_fail 
+2001b 20205975 branch mouse_24g_attempt_fail + 4 
+
+z_mouse_24g_fast_conn_attempt_fail:
+2001c 6fe4470e fetch mouse_flag_len ,mem_mouse_flag 
+2001d c29f0020 bbit1 mouse_enable_24g_first_auto_pairing ,z_mouse_24g_start_auto_pair 
+2001e c2980020 bbit1 mouse_enable_auto_24g_paring ,z_mouse_24g_start_auto_pair 
+2001f 20205983 branch mouse_24g_fast_conn_attempt_fail + 3 
+
+z_mouse_24g_start_auto_pair:
+20020 6fe145ed fetch 2 ,mem_24g_pair_timeout_init 
+20021 67e145f5 store 2 ,mem_24g_reconn_timeout 
+20022 7045f905 jam pair_and_receiver ,mem_24g_reconn_type 
+20023 2020350a branch g24_reconn_start 
+
+z_mouse_eeprom_load_le_att_list_info:
+20024 d8400334 arg 820 ,temp 
+20025 da2006f2 arg mem_ui_le_uuid_table_new ,rega 
+20026 da400000 arg 0x00 ,regb 
+20027 6fe14e9b fetch 2 ,mem_eeprom_att_list_base 
+20028 20206cda branch iicd_read_eep_data_next 
+              org 0x30001
+
+z_entrance2:
+30001 c0100003 beq zcode_20 ,z_g24_receive_ack_data_next 
+30002 20600000 rtn 
+
+z_g24_receive_ack_data_next:
+30003 6fe0c577 fetch 1 ,mem_24g_rxpayload + 3 
+30004 c003000c beq opcode_voice_start ,z_mouse_receive_dg_voice_start_data 
+30005 c008000e beq opcode_get_device_info ,z_mouse_receive_dg_get_device_info_data 
+30006 c0088010 beq opcode_get_dpi ,z_mouse_receive_dg_get_dpi_data 
+30007 c0090012 beq opcode_set_dpi ,z_mouse_receive_dg_set_dpi_data 
+30008 c0098016 beq opcode_get_battery ,z_mouse_receive_dg_get_battery_data 
+30009 c00b0019 beq opcode_get_device_type ,z_mouse_receive_dg_get_device_type_data 
+3000a c00a001b beq opcode_set_key_fuction ,z_mouse_receive_dg_set_key_fuction_data 
+3000b 20600000 rtn 
+
+z_mouse_receive_dg_voice_start_data:
+3000c d8e00004 arg voice_start ,queue 
+3000d 20200405 branch p_ms_tx_nor_pro_flag_enable 
+
+z_mouse_receive_dg_get_device_info_data:
+3000e d8e00006 arg device_info ,queue 
+3000f 20200405 branch p_ms_tx_nor_pro_flag_enable 
+
+z_mouse_receive_dg_get_dpi_data:
+30010 704ce101 jam app_ask ,mem_mouse_dpi_type 
+30011 2020039b branch p_mouse_g24_tx_dpi_data 
+
+z_mouse_receive_dg_set_dpi_data:
+30012 d8c04575 arg mem_24g_rxpayload + 1 ,contr 
+30013 204003d2 call p_mouse_receive_dpi_check 
+30014 d8e00008 arg set_dpi ,queue 
+30015 20200405 branch p_ms_tx_nor_pro_flag_enable 
+
+z_mouse_receive_dg_get_battery_data:
+30016 704ce401 jam app_ask ,mem_mouse_battery_type 
+30017 d8e00009 arg get_battery ,queue 
+30018 20200405 branch p_ms_tx_nor_pro_flag_enable 
+
+z_mouse_receive_dg_get_device_type_data:
+30019 d8e0000c arg get_device_type ,queue 
+3001a 20200405 branch p_ms_tx_nor_pro_flag_enable 
+
+z_mouse_receive_dg_set_key_fuction_data:
+3001b 704e5e00 jam 0 ,mem_mouse_key_information_set_flag 
+3001c d8c04575 arg mem_24g_rxpayload + 1 ,contr 
+3001d 2040039d call p_mouse_receive_key_fuction_check 
+3001e d8e0000a arg set_key_fuction ,queue 
+3001f 20200405 branch p_ms_tx_nor_pro_flag_enable 
+              org 0x40001
+
+z_entrance3:
+40001 c0180003 beq zcode_30 ,z_g24_send_http_info_check 
+40002 20600000 rtn 
+
+z_g24_send_http_info_check:
+40003 6fe0ccbb fetch 1 ,mem_ms_rf_data_flag 
+40004 203a000d branch z_g24_only_send_http_info ,blank 
+
+z_g24_send_rf_http_info:
+40005 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+40006 79207e04 set1 http_bit ,pdata 
+40007 67e0cc76 store 1 ,mem_ms_24g_temp_buff 
+40008 704c77ff jam 0xff ,mem_ms_24g_temp_buff + 1 
+40009 d8400002 arg 2 ,temp 
+4000a da204c76 arg mem_ms_24g_temp_buff ,rega 
+4000b 2020050d branch p_g24_send_rf_other_data 
+4000c 20600000 rtn 
+
+z_g24_only_send_http_info:
+4000d 70459f02 jam 2 ,mem_24g_datalen 
+4000e 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+4000f 79207e04 set1 http_bit ,pdata 
+40010 67e0c7c2 store 1 ,mem_24g_txbuf_new 
+40011 7047c3ff jam 0xff ,mem_24g_txbuf_new + 1 
+40012 20600000 rtn 
+              org 0x50001
+
+z_entrance4:
+50001 c0200004 beq zcode_40 ,z_g24_tx_device_info 
+50002 c0208021 beq zcode_41 ,z_g24_get_dpi 
+50003 20600000 rtn 
+
+z_g24_tx_device_info:
+50004 6fe0ccbb fetch 1 ,mem_ms_rf_data_flag 
+50005 203a0007 branch z_g24_only_send_device_info ,blank 
+50006 20200013 branch z_g24_send_device_info 
+
+z_g24_only_send_device_info:
+50007 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+50008 79207e07 set1 nor_pro_bit ,pdata 
+50009 67e0c7c2 store 1 ,mem_24g_txbuf_new 
+5000a 7047c300 jam start_flag ,mem_24g_txbuf_new + 1 
+5000b 7047c430 jam device_info_len ,mem_24g_txbuf_new + 2 
+5000c 7047c510 jam opcode_get_device_info ,mem_24g_txbuf_new + 3 
+5000d 70459f33 jam device_info_len + nor_pro_header_len ,mem_24g_datalen 
+5000e df20001f arg auth_len ,loopcnt 
+5000f d8c04853 arg mem_ms_auth_appkey ,contr 
+50010 d8a047c6 arg mem_24g_txbuf_new + 4 ,contw 
+50011 20407cdc call memcpy 
+50012 202004e5 branch p_g24_ms_info_set 
+
+z_g24_send_device_info:
+50013 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+50014 79207e07 set1 nor_pro_bit ,pdata 
+50015 67e0cc76 store 1 ,mem_ms_24g_temp_buff 
+50016 704c7700 jam start_flag ,mem_ms_24g_temp_buff + 1 
+50017 704c7830 jam device_info_len ,mem_ms_24g_temp_buff + 2 
+50018 704c7910 jam opcode_get_device_info ,mem_ms_24g_temp_buff + 3 
+50019 df20001f arg auth_len ,loopcnt 
+5001a d8c04853 arg mem_ms_auth_appkey ,contr 
+5001b d8a04c7a arg mem_ms_24g_temp_buff + 4 ,contw 
+5001c 20407cdc call memcpy 
+5001d 204004e5 call p_g24_ms_info_set 
+5001e d8400034 arg device_info_len + 4 ,temp 
+5001f da204c76 arg mem_ms_24g_temp_buff ,rega 
+50020 2020050d branch p_g24_send_rf_other_data 
+
+z_g24_get_dpi:
+50021 6fe0ccbb fetch 1 ,mem_ms_rf_data_flag 
+50022 203a0024 branch z_g24_only_send_dpi_info ,blank 
+50023 20200030 branch z_g24_send_dpi_info 
+
+z_g24_only_send_dpi_info:
+50024 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+50025 79207e07 set1 nor_pro_bit ,pdata 
+50026 67e0c7c2 store 1 ,mem_24g_txbuf_new 
+50027 7047c300 jam start_flag ,mem_24g_txbuf_new + 1 
+50028 7047c403 jam nor_pro_header_len ,mem_24g_txbuf_new + 2 
+50029 7047c511 jam opcode_get_dpi ,mem_24g_txbuf_new + 3 
+5002a 6fe0c6a2 fetch 1 ,mem_mouse_dpi 
+5002b 67e0c7c6 store 1 ,mem_24g_txbuf_new + 4 
+5002c 6fe0cce1 fetch 1 ,mem_mouse_dpi_type 
+5002d e7e08005 istore 1 ,contw 
+5002e 70459f06 jam nor_pro_get_dpi_len ,mem_24g_datalen 
+5002f 20600000 rtn 
+
+z_g24_send_dpi_info:
+50030 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+50031 79207e07 set1 nor_pro_bit ,pdata 
+50032 67e0cc76 store 1 ,mem_ms_24g_temp_buff 
+50033 704c7700 jam start_flag ,mem_ms_24g_temp_buff + 1 
+50034 704c7803 jam nor_pro_header_len ,mem_ms_24g_temp_buff + 2 
+50035 704c7911 jam opcode_get_dpi ,mem_ms_24g_temp_buff + 3 
+50036 6fe0c6a2 fetch 1 ,mem_mouse_dpi 
+50037 67e0cc7a store 1 ,mem_ms_24g_temp_buff + 4 
+50038 6fe0cce1 fetch 1 ,mem_mouse_dpi_type 
+50039 e7e08005 istore 1 ,contw 
+5003a d8400006 arg nor_pro_get_dpi_len ,temp 
+5003b da204c76 arg mem_ms_24g_temp_buff ,rega 
+5003c 2020050d branch p_g24_send_rf_other_data 
+              org 0x60001
+
+z_entrance5:
+60001 c0280004 beq zcode_50 ,z_g24_set_dpi 
+60002 c028801c beq zcode_51 ,z_g24_get_battery 
+60003 20600000 rtn 
+
+z_g24_set_dpi:
+60004 6fe0ccbb fetch 1 ,mem_ms_rf_data_flag 
+60005 203a0007 branch z_g24_only_set_dpi_info ,blank 
+60006 20200011 branch z_g24_set_dpi_info 
+
+z_g24_only_set_dpi_info:
+60007 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+60008 79207e07 set1 nor_pro_bit ,pdata 
+60009 67e0c7c2 store 1 ,mem_24g_txbuf_new 
+6000a 7047c300 jam start_flag ,mem_24g_txbuf_new + 1 
+6000b 7047c402 jam set_dpi_len ,mem_24g_txbuf_new + 2 
+6000c 7047c512 jam opcode_set_dpi ,mem_24g_txbuf_new + 3 
+6000d 6fe0cce3 fetch 1 ,mem_mouse_dpi_set_result 
+6000e 67e0c7c6 store 1 ,mem_24g_txbuf_new + 4 
+6000f 70459f05 jam nor_pro_res_len ,mem_24g_datalen 
+60010 20600000 rtn 
+
+z_g24_set_dpi_info:
+60011 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+60012 79207e07 set1 nor_pro_bit ,pdata 
+60013 67e0cc76 store 1 ,mem_ms_24g_temp_buff 
+60014 704c7700 jam start_flag ,mem_ms_24g_temp_buff + 1 
+60015 704c7802 jam set_dpi_len ,mem_ms_24g_temp_buff + 2 
+60016 704c7912 jam opcode_set_dpi ,mem_ms_24g_temp_buff + 3 
+60017 6fe0cce3 fetch 1 ,mem_mouse_dpi_set_result 
+60018 67e0cc7a store 1 ,mem_ms_24g_temp_buff + 4 
+60019 d8400005 arg nor_pro_res_len ,temp 
+6001a da204c76 arg mem_ms_24g_temp_buff ,rega 
+6001b 2020050d branch p_g24_send_rf_other_data 
+
+z_g24_get_battery:
+6001c 6fe0ccbb fetch 1 ,mem_ms_rf_data_flag 
+6001d 203a001f branch z_g24_only_send_battery_info ,blank 
+6001e 2020002b branch z_g24_send_battery_info 
+
+z_g24_only_send_battery_info:
+6001f 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+60020 79207e07 set1 nor_pro_bit ,pdata 
+60021 67e0c7c2 store 1 ,mem_24g_txbuf_new 
+60022 7047c300 jam start_flag ,mem_24g_txbuf_new + 1 
+60023 7047c403 jam nor_pro_header_len ,mem_24g_txbuf_new + 2 
+60024 7047c513 jam opcode_get_battery ,mem_24g_txbuf_new + 3 
+60025 6fe0c77c fetch 1 ,mem_le_battery_level_percentage 
+60026 67e0c7c6 store 1 ,mem_24g_txbuf_new + 4 
+60027 6fe0cce4 fetch 1 ,mem_mouse_battery_type 
+60028 e7e08005 istore 1 ,contw 
+60029 70459f06 jam nor_pro_get_dpi_len ,mem_24g_datalen 
+6002a 20600000 rtn 
+
+z_g24_send_battery_info:
+6002b 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+6002c 79207e07 set1 nor_pro_bit ,pdata 
+6002d 67e0cc76 store 1 ,mem_ms_24g_temp_buff 
+6002e 704c7700 jam start_flag ,mem_ms_24g_temp_buff + 1 
+6002f 704c7803 jam nor_pro_header_len ,mem_ms_24g_temp_buff + 2 
+60030 704c7913 jam opcode_get_battery ,mem_ms_24g_temp_buff + 3 
+60031 6fe0c77c fetch 1 ,mem_le_battery_level_percentage 
+60032 67e0cc7a store 1 ,mem_ms_24g_temp_buff + 4 
+60033 6fe0cce4 fetch 1 ,mem_mouse_battery_type 
+60034 e7e08005 istore 1 ,contw 
+60035 d8400006 arg nor_pro_get_dpi_len ,temp 
+60036 da204c76 arg mem_ms_24g_temp_buff ,rega 
+60037 2020050d branch p_g24_send_rf_other_data 
+              org 0x70001
+
+z_entrance6:
+70001 c0300004 beq zcode_60 ,z_g24_get_device_type 
+70002 c0308027 beq zcode_61 ,z_g24_set_key_fuction 
+70003 20600000 rtn 
+
+z_g24_get_device_type:
+70004 6fe0ccbb fetch 1 ,mem_ms_rf_data_flag 
+70005 203a0007 branch z_g24_only_send_device_type_info ,blank 
+70006 20200017 branch z_g24_send_device_type_info 
+
+z_g24_only_send_device_type_info:
+70007 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+70008 79207e07 set1 nor_pro_bit ,pdata 
+70009 67e0c7c2 store 1 ,mem_24g_txbuf_new 
+7000a 7047c300 jam start_flag ,mem_24g_txbuf_new + 1 
+7000b 6fe0cce5 fetch 1 ,mem_mouse_device_type 
+7000c 1fe0fe02 increase 2 ,pdata 
+7000d 67e0c7c4 store 1 ,mem_24g_txbuf_new + 2 
+7000e 7047c516 jam opcode_get_device_type ,mem_24g_txbuf_new + 3 
+7000f 6f20cce5 fetchr loopcnt ,1 ,mem_mouse_device_type 
+70010 d8c04ce6 arg mem_mouse_device_type + 1 ,contr 
+70011 d8a047c6 arg mem_24g_txbuf_new + 4 ,contw 
+70012 20407cdc call memcpy 
+70013 6fe0cce5 fetch 1 ,mem_mouse_device_type 
+70014 1fe0fe04 increase 4 ,pdata 
+70015 67e0c59f store 1 ,mem_24g_datalen 
+70016 20600000 rtn 
+
+z_g24_send_device_type_info:
+70017 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+70018 79207e07 set1 nor_pro_bit ,pdata 
+70019 67e0cc76 store 1 ,mem_ms_24g_temp_buff 
+7001a 704c7700 jam start_flag ,mem_ms_24g_temp_buff + 1 
+7001b 6fe0cce5 fetch 1 ,mem_mouse_device_type 
+7001c 1fe0fe02 increase 2 ,pdata 
+7001d 67e0cc78 store 1 ,mem_ms_24g_temp_buff + 2 
+7001e 704c7916 jam opcode_get_device_type ,mem_ms_24g_temp_buff + 3 
+7001f 6f20cce5 fetchr loopcnt ,1 ,mem_mouse_device_type 
+70020 d8c04ce6 arg mem_mouse_device_type + 1 ,contr 
+70021 d8a04c7a arg mem_ms_24g_temp_buff + 4 ,contw 
+70022 20407cdc call memcpy 
+70023 6848cce5 fetcht 1 ,mem_mouse_device_type 
+70024 18408404 increase 4 ,temp 
+70025 da204c76 arg mem_ms_24g_temp_buff ,rega 
+70026 2020050d branch p_g24_send_rf_other_data 
+
+z_g24_set_key_fuction:
+70027 6fe0ccbb fetch 1 ,mem_ms_rf_data_flag 
+70028 203a002a branch z_g24_only_set_key_fuction_info ,blank 
+70029 20200033 branch z_g24_set_key_fuction_info 
+
+z_g24_only_set_key_fuction_info:
+7002a 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+7002b 79207e07 set1 nor_pro_bit ,pdata 
+7002c 67e0c7c2 store 1 ,mem_24g_txbuf_new 
+7002d 7047c300 jam start_flag ,mem_24g_txbuf_new + 1 
+7002e 7047c402 jam set_dpi_len ,mem_24g_txbuf_new + 2 
+7002f 7047c514 jam opcode_set_key_fuction ,mem_24g_txbuf_new + 3 
+70030 7047c601 jam 1 ,mem_24g_txbuf_new + 4 
+70031 70459f05 jam nor_pro_res_len ,mem_24g_datalen 
+70032 20600000 rtn 
+
+z_g24_set_key_fuction_info:
+70033 6fe0c5a0 fetch 1 ,mem_24g_data_type 
+70034 79207e07 set1 nor_pro_bit ,pdata 
+70035 67e0cc76 store 1 ,mem_ms_24g_temp_buff 
+70036 704c7700 jam start_flag ,mem_ms_24g_temp_buff + 1 
+70037 704c7802 jam set_dpi_len ,mem_ms_24g_temp_buff + 2 
+70038 704c7914 jam opcode_set_key_fuction ,mem_ms_24g_temp_buff + 3 
+70039 704c7a01 jam 1 ,mem_ms_24g_temp_buff + 4 
+7003a d8400005 arg nor_pro_res_len ,temp 
+7003b da204c76 arg mem_ms_24g_temp_buff ,rega 
+7003c 2020050d branch p_g24_send_rf_other_data 
+
Index: output/romcode.rom
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/output/romcode.rom	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/output/romcode.rom	(working copy)
@@ -0,0 +1,24350 @@
+20402369
+44804000
+20800000
+204069e4
+20403717
+20402244
+20406ca3
+20402347
+204068d2
+4480c000
+2040775d
+2040370a
+20407435
+2055a421
+44814000
+20407540
+20407436
+20402a23
+2040202a
+20403722
+20402018
+204030ed
+20402463
+2020200e
+2040201d
+c6848000
+793f8009
+20402041
+20202591
+4481c000
+20402066
+2422a025
+20402036
+1a208c01
+efe08006
+c280250d
+20600000
+70000600
+20402047
+1f227c00
+20628000
+2020233e
+6fe0c114
+207a0000
+c00da033
+2040205f
+20628000
+20402062
+20628000
+70411400
+20600000
+70433e1b
+70411400
+20600000
+44824000
+79200009
+1a227e00
+67e1000a
+18007253
+d8a00168
+1a208c01
+efe08006
+1a220c00
+c2807cdc
+20600000
+4482c000
+6fe1000a
+98000a00
+18007253
+d8c00168
+20207cdc
+df200001
+68488006
+18408401
+2841fe01
+2420a04d
+d8400000
+60488006
+184ffe53
+da204040
+9a20a200
+efe08011
+c280a054
+c3800000
+c2002049
+20600000
+44834000
+da602073
+20402069
+24628000
+1a227e00
+67e1000a
+20207dba
+da6020ad
+20202069
+6848c115
+da60207b
+20202069
+4483c000
+684b4116
+da602075
+20202069
+da602081
+20202069
+da6020c7
+44844001
+da204040
+df200001
+efe08011
+1a627a00
+4484c001
+1a20a253
+c200206c
+18007c01
+20600000
+c280206e
+20207dba
+c300206e
+1a208c10
+efe30006
+98467c00
+20628000
+2020206e
+c300206e
+1a208c16
+efe08006
+98467c00
+20628000
+2020206e
+c300a06e
+204020b4
+2040209d
+98467e00
+1fe0fe01
+20212097
+18c22400
+67e48656
+44854001
+6fe0c484
+243a2090
+6fe48656
+1a420c00
+1fe0fe05
+20202093
+6fe48656
+1a420c00
+1fe0fe14
+2421206e
+18424200
+204020c0
+20207dba
+98002400
+1a208c02
+efe10006
+203a2094
+204020c0
+20202082
+1ff11600
+196c9600
+2022a0a7
+29601e0f
+24608000
+18511600
+196c9600
+24628000
+7920041c
+20600000
+18511600
+196c9600
+29601e0f
+24608000
+79207e1c
+20600000
+c300206e
+20207dba
+c300206e
+1a208c01
+efe08006
+c280206e
+20600000
+1a208c01
+e8408006
+1c427e00
+284ffe01
+1a208c04
+e8420006
+20608000
+1a208c08
+efe30006
+20402109
+1d027e00
+20600000
+1a208c02
+1a208a04
+efe10006
+98409600
+19627e00
+e7e20005
+202025de
+c300a06e
+204020b4
+9b60fe00
+9b60fe00
+98e0fe00
+98467c00
+2421206e
+20207dba
+4485c001
+785d7c00
+784efc00
+784e7c00
+7846fc00
+78467c00
+7844fc00
+78477c00
+7843fc00
+2030a155
+37d38200
+20000064
+20202155
+44864001
+78487c00
+18423600
+20402068
+78547c00
+24628000
+18003600
+20207dbc
+4486c001
+37d10200
+1b427e00
+98000c00
+1ff17e00
+9c467200
+1f217203
+2422a0ee
+18007e00
+202020f2
+68490044
+18007e00
+9840fe00
+c20020f0
+98c0fe00
+1fe6fc0c
+20407d61
+67e1002e
+20600000
+44874001
+1b427e00
+1b220400
+98467c00
+7d217e2c
+98460400
+6fe10044
+284c000f
+2020a105
+18426000
+d8410000
+6fe10044
+98467e00
+9e008400
+604b0170
+20600000
+78587c00
+6fe30170
+9b20e000
+1e00e00a
+6fe10044
+9e067e00
+2fec000f
+2020a115
+58010000
+6b010044
+9b067e00
+9e00e000
+1e023400
+20600000
+18007c00
+20202113
+1fe97e00
+ea208005
+9a22fe00
+2fec0006
+2020211e
+2fcc0000
+d8a08ac2
+efe08005
+f920fe00
+e7e08005
+20600000
+2000003c
+58000f00
+67f10982
+58000ff0
+67f10984
+70898109
+70898103
+70898006
+2000003c
+da200000
+da400000
+df200010
+d8c00f00
+efe10006
+9a20a200
+efe10006
+9a40a400
+c200212f
+20600000
+4487c001
+20758000
+20402164
+d8400027
+20402173
+204021aa
+708a257f
+708a301a
+708a3178
+708a8fb2
+708ac200
+708ac300
+d8e00006
+20402122
+2a2ffe0d
+2040211d
+2a4ffe0d
+2040211e
+d8e00005
+2040211c
+2040211e
+20402122
+d8a08ac2
+1a31fe00
+20402117
+1a51fe00
+20402117
+18e08fff
+20212148
+708a8f52
+708a3002
+70898100
+44884002
+204066e5
+78507c00
+7850fc00
+58000200
+67f20a23
+708a01fa
+2000000c
+708a0f00
+708a121a
+708a142b
+18002a08
+18002a00
+70890000
+202022f3
+4488c002
+708a0f60
+708a10aa
+708a127a
+708a2500
+708a2600
+2000003c
+708a2020
+708a23f5
+708a2412
+708a2410
+2000003c
+708a1260
+708a23dd
+20600000
+44894002
+70890001
+708a239d
+708a2402
+20000014
+708a7065
+708a239f
+20402193
+60488008
+18408401
+4489c002
+1851fe00
+d8c04135
+98c08c00
+efe08006
+6a308a71
+1a21220f
+9a21fe00
+67f08a71
+204021d4
+20000090
+6fe0c099
+c00c218b
+20000024
+708a2080
+20600000
+58008312
+67f10907
+2020219b
+58004189
+67f10907
+202021a6
+448a4002
+708a8211
+708a8d12
+708a8e0a
+6fe0c099
+c008218d
+58005762
+67f10907
+70890103
+70893003
+c6168000
+70890101
+708a8207
+708a8d44
+708a8e0a
+6fe0c099
+c0082190
+58002bb1
+67f10907
+c6978000
+70893024
+70890105
+20600000
+448ac002
+204066df
+204021be
+18002a08
+18002a00
+580aaada
+67f18a0f
+708a2540
+708a2610
+2000003c
+708a01fb
+708a25ff
+708a2630
+708a16fe
+20000014
+708a1000
+708a1108
+20000078
+7089000d
+20600000
+6fe0c143
+c07fa1c5
+d8c04144
+98c08c00
+efe08006
+67f08961
+70896027
+6848c147
+6ff08960
+9841fe00
+67f08960
+20600000
+70890003
+708a2402
+20000014
+708a7065
+708a23df
+20402193
+204021ee
+60488008
+18408402
+2020217d
+448b4002
+58000960
+9840fe00
+1fe22200
+6848c099
+18430400
+9846fc00
+20407d64
+1807fe00
+1fec8e00
+60f0890a
+67f08909
+18077e00
+1ff07e00
+1fed7e00
+9846fc00
+20407d64
+1807fe00
+67f1890b
+62308a22
+1a2ca200
+62308a21
+708a20a0
+708a20e0
+708a20a0
+20600000
+1840fe02
+1fe97e00
+1fe17ffe
+d8c0411d
+c596a1f4
+18c08c0c
+98c08c00
+ea210006
+efe10006
+9a267e00
+18408c02
+18c10c0f
+98cffe00
+1ff1fe00
+9a20fe00
+67f10905
+20600000
+448bc002
+204021ca
+20000258
+448c4003
+580aaa7e
+67f18a0f
+2000003c
+708a2500
+708a260d
+708a16f6
+2000001e
+708a151b
+20402212
+20000014
+708a260f
+20000014
+708a10a8
+708a1100
+20600000
+448cc003
+6fe0c141
+c000221d
+c001a222
+c002a227
+c003a22b
+c005222f
+c041a234
+c042a238
+c045223c
+c04a2240
+708a1417
+58251a3f
+67f18a60
+708a6328
+20600000
+708a1425
+58a91c2d
+67f18a60
+708a632f
+20600000
+708a1425
+58a91c3f
+67f18a60
+20202225
+708a1425
+58a9383f
+67f18a60
+20202225
+708a1425
+58a93f3f
+67f18a60
+708a631f
+20600000
+708a1417
+58251827
+67f18a60
+20202220
+708a1417
+5825181c
+67f18a60
+20202220
+708a1417
+5825180b
+67f18a60
+20202220
+708a1417
+58251000
+67f18a60
+20202220
+70804206
+6fe1409c
+c3072245
+98000c00
+d8408a00
+efe08006
+c07fa24f
+98418a00
+efe08006
+e7e08005
+20202249
+448d4003
+37d98200
+7089460d
+70896f10
+708a13cd
+708a0610
+708a844a
+708a8540
+708a16fe
+6fe0c44d
+205a711d
+37d98200
+70813b5f
+6fe0c099
+c0082276
+6fe0c44f
+1fe1fe04
+67f08a02
+70890f01
+708a8024
+708a8162
+58e61212
+67f18a73
+4779c03e
+708a8660
+708a8b3b
+2040229d
+70804300
+70804205
+58557474
+67f18968
+7089606e
+20402135
+20402287
+20402281
+7041480c
+20406f53
+204022cb
+20206ac9
+6fe0c44f
+1fe1fe06
+67f08a02
+70890f00
+708a8023
+708a81b0
+58e40909
+67f18a73
+708a762a
+70890204
+20202266
+20758000
+37d98200
+6fe0c11c
+67f0813a
+37d98200
+20600000
+448dc003
+20758000
+20402164
+70890003
+708a7001
+da40411d
+db004135
+20402293
+7920002d
+20402293
+708a7061
+20202155
+20402193
+df200006
+da600000
+1a620400
+204022ab
+1a40a402
+1b00b001
+1a60a610
+c2002296
+20600000
+6fe0c099
+c00c22a3
+6fe0c44f
+1fe1fe06
+67f08a02
+708a05e0
+708a00d8
+2000003c
+708a01a0
+708a00df
+708a01fa
+20000014
+708a009f
+20600000
+448e4003
+708a2030
+708a23dd
+204021d4
+6ff08a7c
+c30022af
+708a7b30
+204022c5
+98002200
+708a7b40
+204022c5
+9a267e00
+1fef847d
+58b00000
+9846fc00
+20407d64
+1807fe00
+c596a2be
+1fe3fe00
+e7e10012
+708a7b20
+6ff08a7e
+1ff27e00
+e7e08018
+708a7b00
+20600000
+6ff10a7d
+1ff0fe00
+68588a7c
+18500400
+9841fe00
+20600000
+448ec003
+20600000
+448f4003
+6ff089a2
+2feffe06
+7920fe07
+67e0c142
+6ff089a3
+1fe1040f
+18438400
+1ff1fe00
+98408400
+184fa203
+6fe0c142
+204022e3
+1fe67e00
+9a20fe00
+1fe0fff7
+1fe17fff
+2feffe08
+2420a2e1
+58000000
+67e08035
+202022e8
+2feffe07
+24608000
+d840ff00
+9841fe00
+20600000
+6fe08035
+204022ec
+67e08009
+20600000
+1fe17eff
+1fe6fc0a
+20407d61
+1ff27e00
+18070400
+9841fe00
+20600000
+448fc003
+6fe0c143
+c17f8000
+242c231a
+6fe0c142
+1fe67cf0
+2421231e
+1fe67c7f
+2021231e
+6a308961
+6fe0c143
+c1000000
+d8c04144
+98c08c00
+efe08006
+9a267c00
+24628000
+18c08dfe
+e8408006
+1851fe00
+1a31a400
+9a462400
+18417e0f
+1a21220f
+9a262200
+1a23fe00
+9a40a400
+1a4fa403
+6848c142
+18417e80
+207a0000
+58000100
+98460400
+1a427e00
+98467e00
+20610000
+1fe17eff
+c17f8000
+c17f0000
+6fe0c143
+c000a323
+c0012325
+20202323
+6fe0c143
+c0002325
+c000a321
+70414302
+20600000
+70414300
+20600000
+70414301
+20600000
+1fe20400
+44904004
+18427e00
+20407d2e
+1c307e00
+79207e2c
+20407d14
+793ffe2c
+20402336
+20407d14
+20740000
+20407d21
+98003600
+37c18200
+20600000
+1b220400
+20748000
+1b420400
+20600000
+1c427e00
+20748000
+1d027e00
+20600000
+4490c004
+2020233e
+207a0000
+1fe37e00
+1fe0fffd
+1fe0ffff
+2422a343
+18007e00
+20600000
+58000e43
+67e10036
+58000600
+67e10038
+58000600
+67e1003a
+58000d00
+67e10040
+580003bb
+67e1003c
+58000500
+67e1003e
+580007d0
+67e10042
+58000ea6
+67e10044
+580001e0
+67e10046
+58000120
+67e10048
+5800011a
+67e1004a
+44914004
+20758000
+58000017
+67e142e5
+7041698b
+58000d00
+67e14343
+58000060
+67e14345
+1c437e00
+67e24095
+20600000
+5800ee21
+67f10050
+6e12011c
+6ff08132
+c302a383
+7835fc00
+c2822377
+7855fc00
+1ce27e00
+243a2377
+6ff08142
+c2822377
+d85fffff
+2020241d
+20402387
+2055a3c9
+37d98200
+6ff08132
+793ffe05
+67f08132
+37d98200
+2435a384
+20406aaf
+6602067b
+70800608
+20600000
+20402387
+20406a20
+6602067b
+20600000
+37d98200
+6ff08133
+1fe17e88
+67f08133
+37d98200
+6ff08132
+1fe1fe0f
+67f08132
+37d98200
+79207e07
+67f08132
+37d98200
+79207e06
+67f08132
+37d98200
+20600000
+37d98200
+70813d76
+37d98200
+70813a37
+20600000
+6fe0c3cf
+1ff27e00
+67f08143
+37d98200
+6fe0c3d0
+79207e05
+79207e06
+67f08144
+202023c4
+6ff08142
+793ffe03
+67f08142
+20600000
+6ff08142
+79207e03
+67f08142
+20600000
+6fe1c0c3
+d8a0813e
+df200003
+202023b3
+d8a08145
+df200004
+37d98200
+e7e08005
+1fecfe00
+c20023b3
+202023c4
+d8a08149
+202023b2
+6ff08133
+793ffe03
+67f08133
+20600000
+6fe0c0cb
+207a0000
+793ffe04
+202023c3
+67e0c0cb
+67f08135
+37d98200
+37d98200
+20600000
+67f08134
+202023c4
+204023be
+6fe0c0ef
+67f08080
+d8c040cc
+d8a08070
+20407c91
+d8a080d4
+20407c8b
+680440e7
+d8c0814d
+d8a00016
+df20000c
+20407cdc
+20206aff
+600440e7
+d8c08070
+d8a040cc
+20407c91
+d8c080d4
+20407c8b
+6ff08080
+67e0c0ef
+18422400
+202023e1
+df20000c
+da200016
+da60814d
+37d98200
+efe08011
+e8408013
+98467c00
+2022a3eb
+e7e08013
+37d98200
+1a20a201
+1a60a601
+c20023e5
+1a420400
+20600000
+4491c004
+6ff080cb
+243a23f7
+6fe1c0bd
+247a0000
+7080cb0c
+70800680
+6ff08129
+c4008000
+6ff1815b
+67e1c0bd
+20600000
+6fe0c0ca
+79207e04
+67e0c0ca
+44924004
+d85fffff
+6fe0c0a7
+67e0c0c8
+6fe0c0ca
+67f08142
+37d98200
+4492c004
+6fe143f2
+20407d7b
+6fe240ad
+9840fe00
+67e240ad
+204023d7
+6fe0c0cb
+79207e04
+204023c3
+2455a3ad
+37d98200
+632340b1
+20406abf
+6fe1c0c6
+6a20c0c9
+df200003
+37d98200
+67f08132
+1fecfe00
+c2002417
+37d98200
+62308133
+37d98200
+605a004c
+70800501
+37df8200
+44934004
+58000000
+1ce27c00
+2022a42c
+6ff0813e
+6858813f
+98467c00
+2021242a
+18427e00
+9ce67e00
+1fe0fe01
+1fe0fe08
+37d98200
+9e20fe00
+684a40a9
+9840fe00
+6849c0bd
+984ffe00
+1fecfe00
+1ff1fe00
+1fe0fe6e
+68490044
+9846fc00
+20407d61
+1ff07e00
+18070400
+9841fe00
+684b40b1
+20407d07
+18423200
+6fe34048
+20402109
+1b427e00
+67e3064e
+1ce27e00
+e7e08005
+6ff0811d
+1fe1fef0
+e7e08005
+20600000
+4493c004
+c584a460
+684a40ad
+dfe00600
+98467c00
+20610000
+18422200
+684b000f
+1d627e00
+20407d12
+1a220400
+1fed7e00
+1ff27e00
+9846fc00
+20407d61
+d84000c8
+20407d6e
+67e0800e
+2434245d
+1fe67e00
+6849c0bd
+9840fe00
+67e1c0bd
+58000000
+67e240ad
+20600000
+44944005
+204023f0
+6fe1c0bd
+207a0000
+6fe0c094
+207a0000
+6fe0c483
+203a246d
+6fe0c485
+207a0000
+6fe0c484
+247a0000
+da6020af
+20402069
+20628000
+204024c6
+247a0000
+2040205d
+2422a494
+20758000
+4494c005
+68488015
+6fe14042
+984ffe00
+18518400
+184b0400
+98467e00
+684a4044
+9840fe00
+6848c0a6
+98467e00
+1ff06000
+6fe1404e
+1fe37e00
+20407d2e
+1e027e00
+20407d14
+1b420400
+20407d12
+20740000
+20407d27
+44954005
+6fe0c0c3
+98467c00
+20212460
+604a40a9
+2040373a
+684a40a9
+20202406
+4495c005
+6fe0c38c
+243a2498
+20600000
+6fe140a4
+207a0000
+6848c0a6
+98467e00
+d8401d4c
+984ffe00
+2020248b
+6fe143ee
+20407d7b
+243a24b7
+70001500
+c586a4b7
+6fe0c0c2
+203a24bb
+1fe0ffff
+67e0c0c2
+20600000
+7040a800
+6fe1c0b7
+1fe0fe01
+67e1c0b7
+20600000
+44964005
+70001500
+6fe1c0ba
+1fe0fe01
+67e1c0ba
+6fe0c0a8
+1fe0fe01
+67e0c0a8
+20600000
+70001500
+6fe0c0c1
+67e0c0c2
+20600000
+6848c0c0
+60488015
+20600000
+6fe140a2
+f9207e00
+67e140a2
+20600000
+6fe140a2
+f93ffe00
+67e140a2
+20600000
+4496c005
+20403738
+6fe140a2
+1fe22200
+6fe1c462
+7d3a2201
+6fe444ea
+7d3a220f
+6fe444f2
+7d3a220e
+6fe0c114
+7d3a2208
+6fe0c3cf
+2fe1fe0a
+2040a4d8
+1a227e00
+67e140a2
+20600000
+6ff10112
+7d3a2206
+6ff1010e
+7d3a2205
+20600000
+471dc027
+7855fc00
+70017e01
+70016803
+70017f01
+5fffffff
+67e10182
+18007e00
+67e08180
+67e0818b
+67e1c0b7
+67e1c0ba
+2040283a
+70416b01
+70416c00
+70019d01
+70019e01
+70439a00
+20202914
+471e4027
+7834fc00
+70016903
+70439c01
+70068f01
+5800ffff
+67e10691
+18007e00
+67e2c46c
+79207e27
+67e2c467
+202024dd
+471ec027
+7854fc00
+58000017
+67e142e5
+1fe0fe04
+67e143bc
+70016901
+70438c00
+70001500
+20402567
+6fe10196
+67e142f7
+6fe1016a
+1feffe05
+1ff1fe00
+67e10196
+202024dd
+471f4027
+2040258d
+6fe08168
+2feffe04
+79208032
+20403727
+6fe08169
+c280a516
+20202527
+471fc027
+7834fc00
+2040290a
+20212524
+204025d0
+2040284f
+7856fc00
+2040270e
+24768000
+6fe08005
+1fe0fe01
+67e08005
+20402801
+20202525
+2040255b
+7854fc00
+20600000
+47204028
+70434200
+793f8030
+20407540
+20402fd3
+78577c00
+2040290a
+2021255b
+6fe0819d
+20402579
+204025d0
+20402627
+242c254d
+2040256c
+2036a538
+c5182538
+20202547
+4720c028
+6fe0c342
+1fe0fe01
+67e0c342
+c0062547
+20402801
+2040284f
+6fe0819e
+20402579
+2040271f
+204028b2
+6fe143ea
+20407d7b
+20402551
+20342555
+47214028
+20402f98
+20402f8f
+20407831
+6fe0818b
+c281a55b
+4721c028
+204020cf
+20402984
+202020f7
+c5157dbc
+c514fdbc
+c5187dbc
+20207dbe
+47224028
+78377c00
+20402712
+2036a538
+c5182538
+20202547
+4722c028
+20402562
+20403777
+20402567
+20402fe1
+70064d15
+20207819
+d8a04458
+20407c9b
+70017e00
+70016900
+70016800
+47234028
+7042ff00
+7042fe00
+20407440
+20600000
+4723c028
+6fe08005
+1fe0fe01
+67e08005
+6fe08168
+c3818000
+79207e03
+67e08168
+6fe142f7
+67e10196
+58000000
+67e2431f
+20600000
+1fe20400
+47244029
+18427e00
+c280258d
+c280a582
+c301258d
+c283a589
+c2812585
+2020258d
+793f802f
+7920002d
+20600000
+793f802d
+7920002f
+793f802e
+20600000
+793f802d
+7920002f
+7920002e
+20600000
+4724c029
+793f802d
+793f802f
+20600000
+47254029
+793f8032
+70890101
+70892080
+70893003
+20600000
+4725c029
+7844fc00
+7843fc00
+6fe18190
+98001e00
+6fe08007
+1fed8400
+79200401
+18431c00
+20600000
+204025aa
+20402173
+6fe1003e
+20402340
+202021aa
+2036a202
+c5182202
+204025aa
+202021ff
+47264029
+20402164
+6fe0c33d
+243a25bd
+6fe08007
+1fe67c24
+202125b7
+18000400
+c1128000
+18000418
+c1130000
+1800044e
+20600000
+1fe67c0a
+202125ba
+1fe0fe01
+1fe3fe00
+1fe08402
+20600000
+6fe08007
+1fe38400
+20600000
+d84001f4
+207a0000
+d84000fa
+c1008000
+d8400096
+c1010000
+d8400064
+c1018000
+d840004b
+c1020000
+d8400032
+c1028000
+d8400028
+c1030000
+d8400014
+20600000
+4726c029
+78287c00
+6fe2018c
+98001200
+20402605
+58000200
+2034a5d9
+6fe10176
+1fe37e00
+6849003e
+9840fe00
+20402327
+1b427e00
+20600000
+47274029
+20407c53
+67210679
+1a208c01
+efe08006
+c4000000
+1a208a1a
+efe10005
+1fe0fe01
+e7e10005
+20402780
+204027a2
+204027ab
+204025ef
+20407c62
+6f210679
+20600000
+1a208c19
+efe08006
+1a208a18
+e8408005
+9840fe00
+1fe67c24
+202125f7
+1fe0ffdb
+e7e08005
+20600000
+1a208c30
+efe28006
+18000400
+18007225
+c30025ff
+18408401
+1fe37e00
+c20025fd
+1840ffff
+1a208a22
+e7e08005
+20600000
+4727c029
+6fe08180
+98000e00
+684a8198
+a84fffff
+2020a61a
+6fe0818a
+98e67e00
+20212610
+1fe60fff
+2020260b
+18e27200
+18000e00
+a84fffff
+2020a615
+1f20f201
+1f227e00
+203a261a
+18e08e01
+1f20f3ff
+20202612
+18e27e00
+67e08007
+20600000
+2034a620
+37c18200
+20600000
+d9600ea0
+34730200
+20600000
+78487c00
+6fe1434a
+1fe21600
+2020262d
+4728402a
+20402692
+78287c00
+6fe10176
+684a431f
+98409600
+204025a1
+4728c02a
+20402597
+c597a635
+783cfc00
+2000001e
+20402597
+19699600
+7856fc00
+7826fc00
+7830fc00
+78507c00
+19623600
+37c18400
+2037263e
+1b420400
+604b000f
+242c26ce
+78287c00
+6fe0c169
+d8404e20
+98408400
+6fe0c148
+984fb600
+204066e7
+2037264b
+204026d3
+6fe08168
+c301a64b
+2055a449
+204022cd
+7823fc00
+7824fc00
+09800008
+19897e00
+67e0804c
+09800008
+19897e00
+67e0804d
+1fe27200
+2022a671
+c519265c
+09800008
+19897e00
+e7e08005
+c2002657
+20202671
+18a22400
+4729402a
+204027fa
+6a20804d
+1a20a3fc
+242126ce
+20402697
+1a420a00
+d8400000
+6f20804d
+1f20f3fc
+2022a66f
+09800008
+19897e00
+e7e08005
+18408401
+18417c0f
+2042a6b5
+c2002668
+204026bd
+1a420a00
+4729c02a
+09800018
+1fef7e00
+1ff17e00
+e7e18005
+78287c00
+204026eb
+202326c9
+c5992683
+6fe0804d
+203a2683
+1fe0fffc
+67e0804d
+204072b9
+6ff08108
+c303a6ce
+1800700c
+65e20154
+204066e6
+7836fc00
+793f8030
+472a402a
+204072bb
+6fe0819d
+7d3e7e07
+67e0819d
+2040268d
+2020268f
+7846fc00
+20202164
+472ac02a
+68488008
+202021ca
+c6990000
+20407356
+1800700c
+2040735e
+2020735d
+472b402a
+70806c00
+70806d01
+6fe0804c
+1fe17e03
+67f0806e
+5800004e
+67f10068
+67f1006a
+6a20804d
+1a20a3fc
+684ac46c
+280ffe0f
+2040a6ab
+20407253
+58000000
+67f100c0
+70800a06
+70800a07
+20600000
+18467c00
+2022a6b0
+184085ff
+79200427
+20600000
+58ffffff
+1ff07e00
+d840ffff
+98418400
+20600000
+18a22400
+6fe0804d
+1fe0fffc
+98467c00
+20628000
+605900c0
+1a420a00
+20600000
+09800020
+1fef7e00
+1fecfe00
+e7e20005
+18a22400
+18007000
+1fe25e00
+605900c0
+20600000
+204026eb
+204020cf
+20202683
+204066e8
+c50826ce
+c51826ce
+79200030
+20202686
+793f8030
+202026d0
+472bc02a
+204072bb
+202020cf
+684b000f
+1b427e00
+20407d14
+1fe20400
+204026dd
+1b425600
+1d227e00
+9840fe00
+1fe25200
+20600000
+c517a6e3
+c516a6e7
+6fe10046
+1fe25200
+1c225000
+20600000
+6fe1004a
+1fe25200
+1c20d001
+20600000
+6fe10048
+1fe25200
+1c225000
+20600000
+6fe0804d
+1fe08405
+18498400
+6fe0819d
+c517a6f2
+c28026f4
+c280a6f5
+203e26f7
+202026fa
+202026ff
+18430400
+202026ff
+18408403
+18438400
+202026fc
+18408403
+18498400
+58000028
+98408400
+202026ff
+6fe0c148
+984f8400
+da204e20
+9a2ffe00
+98460400
+1b627e00
+98463600
+20600000
+2040271f
+68488008
+20402173
+204021aa
+78287c00
+d960157c
+2020262e
+472c402b
+6fe0819e
+20402579
+2040271f
+6fe0819d
+20402579
+68488008
+20402173
+204021aa
+78287c00
+d960157c
+c597a62e
+d9602134
+2020262e
+472cc02b
+2040271f
+202020cf
+472d402b
+20402597
+204025a6
+204066ed
+79202a00
+782efc00
+78307c00
+7850fc00
+2040261d
+785d7c00
+c517a762
+c516a774
+19317e00
+1fecfe00
+1ff1fe00
+08008628
+7823fc00
+7824fc00
+472dc02b
+6fe0c16b
+08008608
+efe08006
+1fe27200
+08008608
+1f267c00
+2022a740
+6ff0800a
+203a273c
+c5192757
+d8c0416d
+efe08006
+08008608
+c200273d
+78247c00
+08008618
+78447c00
+c597a747
+7843fc00
+58000000
+08008603
+37d38200
+20000064
+472e402b
+784efc00
+785c7c00
+20402164
+204066eb
+6fe0c16b
+1fe17e03
+c1818000
+6fe0c2ff
+c001283a
+c1828000
+6fe0c16d
+c002a835
+20600000
+1f20f3fc
+1f220400
+204072a6
+d8c0416d
+efe08006
+08008608
+c200275b
+204072ab
+1de27e00
+08008620
+20202740
+df20000a
+5800003c
+08008608
+c2002763
+784efc00
+783c7c00
+19317e00
+1ff17e00
+1ff1fe00
+08008620
+c5172771
+58000001
+08008605
+783d7c00
+2020272f
+58000000
+08008605
+2020272f
+6fe0c148
+6848c16a
+9840fe00
+20402340
+19317e00
+1fecfe00
+1ff18400
+18427e00
+08008608
+18427e00
+08008628
+2020272f
+da602784
+da40279a
+d8e00005
+202027d9
+1a208c04
+e8420006
+1a208c37
+efe08006
+1a208a2b
+e7e08005
+efe10006
+1febfe00
+98409600
+1a208a04
+19627e00
+e7e20005
+efe10006
+1febfe00
+1a208a02
+e7e10005
+efe10006
+1a208a2c
+e7e10005
+efe10006
+67e142f7
+20202917
+efe08011
+793ffe03
+e7e08011
+62210662
+70064d44
+20407819
+6a210662
+20600000
+da600000
+da4027a6
+d8e00006
+202027d9
+1a208c37
+efe28006
+1a208a30
+e7e28005
+202025f9
+da600000
+da4027af
+d8e00007
+202027d9
+1a208c37
+efe08006
+204027bc
+e7e08005
+1a208c38
+efe08006
+204027ca
+e7e08005
+62210662
+70064d42
+20407819
+6a210662
+20600000
+205a27c4
+1a208a35
+24748000
+6848c3ba
+284ffe07
+7920fe07
+1a208a36
+20600000
+1a208c35
+efe08006
+24748000
+1a208c36
+efe08006
+20600000
+205a27d3
+6848c3ba
+284ffe07
+7920fe07
+1a208a36
+24748000
+793ffe07
+1a208a35
+20600000
+1a208c36
+efe08006
+24748000
+1a208c35
+efe08006
+20600000
+472ec02b
+efe08011
+afec0000
+20608000
+1a208c1a
+e8410006
+1a208c20
+efe10006
+98467e00
+2022a7e9
+242127ee
+1fe67c01
+2022a7e7
+20600000
+1a627e00
+20207d7b
+efe08011
+f93ffe00
+e7e08011
+1a427e00
+20207d7b
+1a208c1a
+efe10006
+1a208c20
+efe10006
+98467e00
+d840ffff
+98467c00
+2022a7e9
+d840f000
+98467c00
+242127e9
+20600000
+6848817f
+6fe0804c
+1fe37e00
+9842fe00
+2feffe02
+7920800f
+20600000
+472f402b
+20402914
+c6180000
+20402828
+6fe0804c
+2feffe04
+7920802a
+1fe37e00
+9842fe00
+2feffe02
+7920800f
+c6078000
+6fe0804d
+203a281a
+6fe08168
+c302281a
+684a0154
+6fe24471
+98467c00
+2022a33e
+604a4471
+6fe2c46c
+1fe0fe01
+79207e27
+67e2c46c
+6848817f
+79400402
+6048817f
+6fe0c323
+c4030000
+472fc02b
+6fe0804d
+207a0000
+6fe0804c
+2fe00601
+2020ae43
+2fe00602
+2020ae31
+20600000
+4730402c
+6848817f
+284c0005
+20608000
+6fe0804c
+1fe3fe00
+9842fe00
+c4018000
+793f8405
+79400403
+6048817f
+28400603
+20600000
+6fe08168
+79207e04
+67e08168
+79200032
+20600000
+4730c02c
+7042ff00
+dfe00000
+67e24471
+67e2c467
+79207e27
+67e2c46c
+6fe08168
+793ffe04
+67e08168
+793f8032
+20600000
+da200001
+6fe0804c
+c3830000
+da200000
+20600000
+18c20a00
+684943bc
+18a20c00
+20600000
+4731402c
+6fe0817f
+c3828000
+20402870
+204029ee
+203a2894
+efe10006
+e8410006
+18422200
+9a267e00
+2040284b
+20407db2
+1fe20400
+e8208006
+1a227e00
+98c0fe00
+67e1066d
+20402884
+20402896
+204029ee
+efe10006
+1fe22200
+18c22600
+e8410006
+18422400
+9a467e00
+2040284b
+20407db2
+9a40fe00
+e7e10013
+9a267c00
+24628000
+20202a08
+20402877
+c6148000
+6fe0c323
+c3012882
+204029f2
+203a2882
+20202880
+204029ee
+203a2882
+efe10006
+e8410006
+98462200
+2040284b
+18427e00
+9a267c00
+20212882
+79200029
+20600000
+793f8029
+20600000
+1a227e00
+207a0000
+d8200001
+20600000
+4731c02c
+18408401
+20402cad
+18c08dfe
+efe10006
+d8402902
+98467c00
+24628000
+18c08c01
+18c22200
+efe08006
+20600000
+18000400
+18000201
+4732402c
+6048c16c
+6848817f
+79200405
+18417efc
+9821fe00
+67e0817f
+1fe17e1f
+280ffe29
+7920fe04
+67e0c16b
+6fe0c16b
+28200601
+2420a8a6
+6fe0c16c
+207a0000
+c51928ac
+6f20c16c
+6fe1066d
+1fe20c00
+d8a0416d
+20207cce
+20407356
+2020728d
+d8e00000
+202024be
+d8e00000
+202024c2
+4732c02c
+c6078000
+c6180000
+6fe0804c
+1fe17e03
+67e0c336
+6fe0804d
+207a0000
+5800004e
+67e1433b
+4733402c
+6fe0c336
+c1000000
+c001b028
+204028cd
+243428ae
+204028b0
+58000000
+67e14339
+6fe1433b
+1fe08c02
+4733c02c
+efe10006
+c0022b6e
+c0032ea6
+c002ae68
+20600000
+6fe0c336
+c00128dc
+c000a8f3
+20600000
+20407dbc
+d8400004
+9fe67c00
+20628000
+d8400005
+9fe67c00
+20628000
+d8400006
+9fe67c00
+20628000
+20207dbe
+6fe1433b
+1fe20c00
+efe10006
+67e14337
+efe10006
+204028d1
+24740000
+6848804d
+60494339
+6fe14337
+1fe0fe04
+98467c00
+2022fdbc
+6f20804d
+d8a00f00
+6fe1433b
+1fe20c00
+20407cce
+20207dbe
+20407dbc
+6fe14339
+247a0000
+20207dbe
+204028ef
+24740000
+6fe14339
+d8a00f00
+98a0a200
+6848804d
+9840fe00
+67e14339
+6f20804d
+1a220a00
+6fe1433b
+1fe20c00
+20407cce
+58000f00
+67e1433b
+6fe14337
+1fe0fe04
+68494339
+98467c00
+2022fdbc
+20207dbe
+6fe143e8
+20207d7b
+4734402d
+684a0184
+2040233a
+98461600
+19627e00
+68490196
+18520400
+18438400
+98467e00
+20600000
+2040233a
+67e20184
+20600000
+4734c02d
+1a208c50
+efe08006
+204025c0
+1a208c02
+efe10006
+984ffe00
+68490044
+984ffe00
+d84f4240
+9846fc00
+d8400682
+6fe0c148
+984f8400
+1a208c2b
+efe08006
+984ffe00
+9840fe00
+67e2431f
+6fe1409a
+20407d64
+18078400
+9840fe00
+1a208a0e
+e7e10005
+20600000
+4735402d
+20402934
+20202948
+70069302
+d8402a00
+60490694
+20402cbe
+207a0000
+efe08006
+18c20a00
+6848c26d
+18427200
+98467c00
+24212945
+98460400
+d8c0426e
+20407cce
+18427200
+2442a980
+20600000
+1fe27200
+d8c0426e
+20207cce
+da60436c
+da20434d
+20402955
+58000000
+79347e00
+67e0864e
+da60438c
+da20436d
+20402955
+20740000
+6fe0864e
+203a233e
+20600000
+4735c02d
+20407dbc
+20407ca8
+da400000
+d8a00680
+2040296f
+6fe0c26d
+1fe08401
+9a40a200
+1a20a202
+1a267c1f
+2421296d
+e0408005
+d8400009
+e0408005
+98007200
+20407cce
+1a222400
+1a427e00
+67e0867f
+d8c0067f
+5fffffe0
+9a608a00
+20207c8f
+20407dbe
+20202967
+efe08011
+207a0000
+1fe0fe01
+e8408006
+18467c09
+2022a97e
+9a40a400
+1a220c00
+98007200
+20407cce
+18c22200
+1a227e00
+9a667c00
+20610000
+2020296f
+9a20a200
+2020297a
+58000020
+e7e08005
+c2002980
+20600000
+4736402d
+7855fc00
+20372988
+2436a997
+204024a9
+6fe1409a
+67e10176
+6fe0c323
+c282a4b7
+c507a4b7
+6fe0804d
+243a24b7
+6fe0c16c
+243a24b7
+6fe08168
+c282a4b7
+c283a4b7
+c28324b7
+2020249f
+6fe0c0a8
+1fe67c1e
+242124ae
+6849409a
+18430400
+6fe10176
+9840fe00
+67e10176
+202024ae
+d8e00000
+202029b5
+d8e00000
+202029ba
+d8e00001
+202029b5
+d8e00001
+202029ba
+d8e00002
+202029b5
+d8e00002
+202029ba
+d8e00003
+202029b5
+d8e00003
+202029ba
+d8e00004
+202029b5
+d8e00004
+202029ba
+d8e00005
+6fe0c323
+f9207e00
+67e0c323
+20600000
+d8e00005
+6fe0c323
+f93ffe00
+67e0c323
+20600000
+58112233
+67e1c324
+58445566
+e7e18005
+58778899
+e7e18005
+58001122
+e7e18005
+58334455
+e7e18005
+58000066
+20207dce
+59000302
+67e242c6
+58010010
+67e1c2ca
+70430001
+20600000
+da200000
+d8200001
+202029e3
+4736c02d
+d8200003
+204029e3
+1a427e00
+e7e08005
+20600000
+4737402d
+18000202
+1a20a204
+204029e3
+1a20a3fc
+1a227e00
+e7e10005
+1a427e00
+e7e10005
+20600000
+4737c02d
+1a20a205
+204068e5
+1a20a3fb
+1a227e00
+e7e10005
+58000000
+e7e10005
+18227e00
+e7e08005
+20600000
+4738402e
+2040691f
+1fe20c00
+20600000
+6fe14460
+20600000
+204029f7
+1fe20c00
+20600000
+6fe14463
+20600000
+204029ee
+18c08c05
+20600000
+204029ee
+18c08c09
+20600000
+204029f4
+18c08c09
+20600000
+204029f4
+18c08c05
+20600000
+20206935
+20206938
+2020693b
+20206924
+67e443c4
+20202a1a
+184122ff
+20402a10
+184ca200
+6220c3bb
+20202a11
+6220c3ba
+2a2ffe01
+2040aa16
+2a2ffe02
+2040aa18
+20600000
+d8e00008
+20202a1b
+d8e0000b
+20202a1b
+d8e00005
+6fe443b2
+f9207e00
+67e443b2
+20600000
+204029a4
+204029ca
+204029be
+202029ac
+70019d01
+70019e01
+793f8030
+79200010
+793f8032
+2040258d
+20402a2d
+20402aad
+793f8010
+20202591
+4738c02e
+6fe0c347
+c1808000
+d8e00002
+20407cf1
+247a0000
+6fe14348
+6849434a
+98467e00
+d8e00002
+20407ce3
+7854fc00
+20402ada
+20402a4c
+24768000
+4739402e
+6fe3004e
+67e30178
+6fe08002
+1fe0fe01
+67e08002
+20402a53
+20748000
+20402b01
+24768000
+6fe08004
+1fe0fe01
+67e08004
+6fe48054
+67e4867f
+20600000
+4739c02e
+20402b4d
+20402623
+6fe08001
+1fe0fe01
+67e08001
+20600000
+473a402e
+6fe0c33e
+c18d8000
+6fe30178
+684b42ce
+98467c00
+24628000
+20402056
+24628000
+20402a66
+204024f0
+204030cb
+70064d14
+20407819
+70411400
+7001b800
+70434700
+70433e00
+20202041
+473ac02e
+18007fff
+38080001
+67e28198
+da200168
+204025f9
+18007204
+d8a0018c
+20407dee
+6fe142db
+67e10196
+180a7e00
+1fe17e0f
+1fe67c04
+20212a71
+67e08181
+473b402e
+68494167
+6049016a
+18422600
+1c40fe07
+9a66fc00
+20407d64
+18072200
+9a267e00
+9a60fe00
+68494165
+9840fe00
+67e2016c
+9c462200
+1a20a3fa
+da402205
+6fe0c2d4
+7d3a2406
+6fe0c2cd
+7d3a2407
+1a427e00
+67e1416b
+6fe342dd
+e7e30005
+6fe30178
+e7e30005
+6fe2018c
+e7e20005
+180a7e00
+e7e10005
+180a7e00
+e7e08005
+18007e02
+e7e08005
+1a2b7e00
+e7e10005
+1a6b7e00
+e7e10005
+473bc02e
+58000000
+e7e10005
+6fe142db
+e7e10005
+6fe28198
+e7e28005
+6fe08181
+d84000a0
+9841fe00
+e7e08005
+2040271c
+5800416b
+1fe08c12
+efe18006
+67e18190
+20600000
+70000724
+70067f00
+20402ad4
+20402ab2
+20202ad7
+473c402f
+6fe0c38c
+207a0000
+d8e00000
+20407cf1
+247a0000
+78287c00
+20402ada
+20402b4d
+20402ae3
+2436aac4
+6fe08003
+1fe0fe01
+67e08003
+6fe0804c
+1fe17e0f
+c001ab12
+c002ab25
+473cc02f
+6fe0867f
+6848c397
+98467c00
+2422aab2
+6fe0c3cf
+1fe67c0e
+2022bad9
+180a7e00
+d84001ff
+98417e00
+1fe0fefa
+20407c93
+d8e00000
+6fe1438d
+20207ce3
+d8a0068f
+d8c0416b
+20207c8e
+d8c0068f
+d8a0416b
+20207c8e
+473d402f
+7854fc00
+588e89be
+1fed7e00
+1fe1fed6
+98001200
+58555555
+67e18190
+20600000
+473dc02f
+6fe0c38f
+6848c390
+18520400
+184b8400
+98408400
+6048c16b
+c000aaf4
+6848c34c
+1840fe06
+67e0c16c
+6fe342dd
+67e3416d
+18427200
+d8c0434d
+20407cce
+20202afa
+5800000c
+67e0c16c
+6fe342dd
+67e3416d
+6fe34116
+e7e30005
+473e402f
+6fe08000
+1fe0fe01
+67e08000
+db600708
+7856fc00
+20202707
+473ec02f
+6fe0c398
+c1808000
+6fe08000
+1fe0fe01
+67e08000
+d8400c03
+6fe0c399
+7d3a0406
+1a227e00
+7d3a0407
+6049416b
+6fe342dd
+e7e30005
+6fe30178
+e7e30005
+20202707
+473f402f
+6fe30054
+684b42dd
+98467c00
+24628000
+d8400004
+6fe0c390
+7d3a0406
+6048c16b
+6848c36c
+1840fe06
+67e0c16c
+6fe342dd
+67e3416d
+d8c0436d
+18427200
+20407cce
+2040271c
+20202ac4
+6fe30054
+684b42dd
+98467c00
+24628000
+20402846
+6220c2cd
+6fe3004e
+67e30178
+6fe4005a
+67e4018c
+68490062
+473fc02f
+184b8400
+6fe10064
+1febfe00
+67e1016a
+67e2016c
+98467e00
+1fe0d1fe
+6fe48066
+67e48194
+6fe0806f
+1fe1041f
+60488181
+1ff18400
+18430400
+604881b8
+da200168
+20402917
+da200168
+204025f9
+204024fc
+20402056
+24628000
+47404030
+204020f7
+20402e85
+70064d14
+20407819
+20202041
+4740c030
+6fe08007
+c012ab5c
+c0132b65
+c013ab52
+6848c397
+284ffe00
+2020ab61
+284ffe01
+2020ab6a
+70000727
+6fe0867f
+79207e02
+67e0867f
+20600000
+6848c397
+284ffe01
+2020ab6a
+284ffe02
+2020ab57
+70000725
+6fe0867f
+79207e00
+20202b5a
+6848c397
+284ffe02
+2020ab57
+284ffe00
+2020ab61
+70000726
+6fe0867f
+79207e01
+20202b5a
+18c22200
+6fe0c3cf
+c0036558
+c007c90b
+c0045469
+1a220c00
+efe18006
+67e1c39b
+c0012b8b
+c001ab90
+c0022b93
+c0032bd5
+c0042c22
+c0052cf7
+c0062d2a
+c0082d41
+c0092d86
+c00b2dac
+c00c2dbf
+c00f2dc4
+c0292dc8
+20600000
+18002203
+20402dee
+58000002
+e7e08005
+6fe142e3
+e7e10005
+20600000
+20402b90
+18002203
+20402dee
+58000003
+20202b87
+1fecfe00
+67e142e5
+20600000
+20402e1f
+20407dbc
+20202ba1
+efe10006
+1fe17eff
+207a0000
+9a467c00
+20628000
+24610000
+9a667c00
+20628000
+20217dcc
+18007c01
+20600000
+d9600003
+20402ca5
+20402b96
+203a2bd3
+24212bd1
+18c08dfe
+20407c6f
+20407c66
+24342bc1
+20407c53
+6162065e
+1800221e
+20402dee
+6962065e
+20407c62
+20407dbe
+58000005
+e7e08005
+20407c69
+efe10006
+ea208006
+1a267c10
+2022abbd
+1a267c02
+2422ade1
+58000001
+e7e08005
+20202bc6
+58000002
+e7e08005
+d9600001
+20202bc6
+20407c69
+efe10006
+efe08006
+9a267c00
+2422abd3
+20407c69
+efe10006
+1fe17eff
+e7e10005
+ef208006
+20407cdc
+20407c6c
+196097ff
+2022abd3
+20402cbb
+20202ba3
+20402cbb
+20202bcf
+20342de1
+20202e12
+20402e1f
+efe10006
+67e143a2
+20407c6f
+d8a00693
+6fe14337
+1fe0fff9
+20402e2d
+20202be8
+78547c00
+6849068f
+6fe10691
+98467c00
+24212be5
+18427e00
+c1800000
+78347c00
+7001b901
+20202de3
+20402bde
+20740000
+684943a2
+58002800
+98467c00
+2022abef
+20202de1
+70439e00
+6849068f
+60490656
+20402ce2
+243a2de1
+68490656
+20402ce2
+243a2c08
+18c22200
+6fe086a4
+1fe27200
+68488693
+98467c00
+2422ac04
+da400694
+20407d66
+2022ac0b
+6fe106ac
+684943a2
+98467c00
+2022ac13
+6fe10656
+1fe0fe01
+67e10656
+20202bf4
+6fe0c39e
+c000ac13
+20202de1
+6fe106ac
+684943a2
+98467c00
+2422ac04
+70439e01
+68490656
+604906a7
+20202c04
+6fe0c39e
+c0002c04
+70439e02
+68490656
+184085ff
+604906a9
+da200005
+20402dee
+58000007
+e7e08005
+6fe106a7
+e7e10005
+6fe106a9
+e7e10005
+20600000
+20402e1f
+20402e28
+20202c25
+6849068f
+60490656
+20402ca5
+20402cb0
+18c08dfe
+18c27e00
+67e106a5
+68490694
+58002a00
+98467c00
+2022ac90
+58002803
+98467c00
+2422ac7a
+d9600002
+20402df5
+24212c57
+68490656
+20402ce0
+243a2c57
+20402df9
+2422ac55
+24342c59
+78547c00
+20402e24
+1fe22200
+20402dee
+58000009
+e7e08005
+18a26000
+18a08a01
+20402c67
+20402df1
+20402ce0
+20402c6e
+6fe086ab
+1fe0a205
+e2208030
+1a267c07
+2442fdc0
+2042fdc2
+20402e24
+1fe0fffe
+9a26fc00
+20407d64
+18079600
+196097ff
+2022ac57
+20402df1
+20202c34
+20342de1
+20202e12
+20402e02
+20402df1
+20402ce0
+20402d74
+243a2c57
+20407c66
+6fe10656
+1fe0ffff
+e7e10005
+20402e0e
+20402c6e
+196097ff
+2022ac57
+20202c55
+6fe10656
+e7e10005
+6fe086a4
+1fe27200
+20407c69
+20407cce
+20207c6c
+20407c66
+6fe10656
+e7e10005
+20407c6c
+6fe086ab
+1fe27200
+20407c66
+20407c69
+9f260c00
+18c08dff
+20407cce
+20207c6c
+47414030
+20402cbe
+203a2de1
+18c22600
+20402e24
+1a620c00
+e8408006
+18408404
+20407db2
+1fe22600
+1fe22200
+20407c6f
+20402dee
+58000009
+e7e08005
+1a60fffe
+1fe0f3fe
+e7e08005
+6fe106bc
+e7e10005
+20407c69
+20207cce
+20402cbe
+203a2de1
+18c08dfb
+efe10006
+67e10656
+20402e24
+6848c26d
+18408404
+20407db2
+1fe22600
+1fe22200
+20402dee
+58000009
+e7e08005
+1a60fffe
+1fe0f3fe
+e7e08005
+6fe10656
+e7e10005
+d8c0426e
+20207cce
+4741c030
+6fe1068f
+98002400
+6fe10691
+98002600
+6fe142f9
+98000c00
+20207dbc
+20402cb0
+2022acbb
+20600000
+47424030
+6fe142f9
+98000c00
+efe10006
+1fe17eff
+207a0000
+98467c00
+20628000
+20402cbb
+20402cbb
+20202cb3
+efe08006
+98c08c00
+20600000
+4742c030
+6fe142f9
+98000c00
+efe10006
+1fe17eff
+207a0000
+67e106bc
+efe08006
+18c20a00
+98c08c00
+68488693
+98467c00
+2422acd1
+1fe27200
+18a22400
+da200694
+20407d66
+20628000
+6fe08693
+98a08c00
+20402cbb
+20202cc1
+d8400001
+6fe142f9
+98000c00
+18c20a00
+efe10006
+1fe17eff
+207a0000
+1fe08401
+20402cbb
+20402cbb
+18c20a00
+20202cd8
+6fe106a5
+20202ce4
+47434030
+6fe142f9
+98000c00
+efe10006
+1fe17eff
+203a2ced
+98467c00
+2022acee
+20402cbb
+20402cbb
+20202ce5
+20207dca
+efe08006
+67e086ab
+1fe27200
+d8a006ac
+20407cce
+efe08006
+67e086a4
+20407c6f
+20207dcc
+20402da5
+6849439c
+6fe0c323
+c281ad20
+20402cb0
+2422ade1
+20542d26
+20740000
+20402cbb
+18c08dfe
+efe10006
+d8402a00
+98467c00
+2022ad14
+18c22600
+20402e24
+1a620c00
+e8408006
+18408401
+20407db2
+1fe22600
+1fe22200
+20407c6f
+20402dee
+5800000b
+e7e08005
+1a60f3ff
+20407c69
+20207cdc
+20402e24
+6848c26d
+18408401
+20407db2
+1fe22600
+1fe22200
+20402dee
+5800000b
+e7e08005
+1a60f3ff
+d8c0426e
+20207cdc
+6fe14334
+98467c00
+2422acfb
+24342cfb
+7001b905
+20202de3
+18c08dfe
+efe10006
+c2872d24
+20207dbe
+efe10006
+67e10693
+98002200
+6849439c
+20402cad
+203a2de1
+efe08006
+9a267200
+24212de1
+20407c6f
+20402e24
+1f208401
+20407db2
+1fe22200
+1fe22600
+20402dee
+5800000d
+e7e08005
+1a60f3ff
+68490693
+20407c69
+98408c00
+20207cce
+20402e1f
+20402e28
+20202d44
+d9600002
+6849068f
+60490656
+20402cb0
+18c08dfe
+18c27e00
+67e106a5
+20402df5
+24212d7c
+68490656
+20402ce0
+243a2d7f
+20402df9
+2422ad72
+19627e00
+c0002d7f
+24342d68
+78547c00
+20402e24
+1fe22200
+20402dee
+58000011
+e7e08005
+6fe086a4
+1fe0a204
+e2208005
+20407c6c
+1a267c06
+2442fdc0
+2042fdc2
+20402e24
+1fe0fffe
+9a26fc00
+20407d64
+18079600
+20202d6e
+20402d76
+243a2d7f
+6fe10656
+1fe0ffff
+67e106a9
+20402e08
+6fe10656
+67e106a7
+20402e02
+196097ff
+20402df1
+20202d4b
+6fe086ab
+20202d77
+6fe086a4
+20362d7a
+1fe0fffe
+20600000
+1fe0fff0
+20600000
+6fe10656
+67e106a9
+20202d83
+6fe10656
+1fe0ffff
+67e106a9
+20202d83
+20342de1
+20402e08
+20202e12
+18c22200
+6fe14337
+1fe0a5fd
+20402908
+4743c030
+20402da5
+6849439c
+20402cb0
+2422ada3
+20542d9f
+20740000
+6fe0c323
+c3022d9a
+6849439c
+6fe14334
+98467c00
+2422ad9a
+20402da5
+24342d9a
+20202d24
+18002201
+20402dee
+58000013
+e7e08005
+20600000
+18c08dfe
+efe10006
+c287ad24
+20207dbe
+7001b901
+20202de3
+47444031
+20407dbe
+6fe0c300
+c1000000
+6fe0c040
+c3820000
+20207dbc
+18c0a202
+6fe14337
+1fe0a5fb
+20402908
+20202db1
+6fe14337
+1fe22200
+20402dee
+58000017
+e7e08005
+6fe1439c
+e7e10005
+6fe14337
+1fe0f3fb
+6fe1433b
+1fe08c07
+efe10006
+e7e10005
+20207cce
+18002201
+20402dee
+58000019
+e7e08005
+20600000
+6fe0c39a
+793ffe00
+67e0c39a
+20600000
+18c22200
+6fe14337
+1fe0a5fd
+20202908
+18422600
+1a20a203
+20402dee
+1a20a3fd
+5800001b
+e7e08005
+1a620400
+e0410005
+20600000
+6fe0c39a
+79207e00
+67e0c39a
+18422600
+1a20a203
+20402dee
+1a20a3fd
+5800001d
+e7e08005
+1a620400
+e0410005
+20600000
+4744c031
+7001b90a
+18002205
+20402dee
+58000001
+e7e08005
+6fe0c39b
+e7e08005
+6fe1439c
+e7e10005
+6fe081b9
+e7e08005
+20600000
+47454031
+18002404
+202029d9
+68490656
+18408401
+60490656
+20600000
+68490656
+6fe10691
+98467c00
+20600000
+4745c031
+68488693
+da200694
+6fe086ab
+1fe27200
+98467c00
+24628000
+da4006ac
+20207d66
+47464031
+6fe086a4
+67e0867f
+1fe27200
+20407c69
+20207cce
+4746c031
+20407c66
+6fe106a7
+e7e10005
+6fe106a9
+e7e10005
+6fe0867f
+1fe27200
+20407cce
+20207c6c
+47474031
+20407c66
+204029ff
+18a27e00
+98c62200
+20402a02
+1a227e00
+e7e10006
+1a20a204
+204029f4
+1a227e00
+e7e08006
+20600000
+1fecfe00
+67e1068f
+efe10006
+67e10691
+20600000
+4747c031
+6fe142e5
+684942e3
+20207db2
+47484032
+20407c6f
+d8a00693
+6fe14337
+1fe0fffb
+e7e08005
+1fe27200
+20407c69
+20207cce
+6fe10050
+c1820000
+6fe0c39a
+79207e01
+67e0c39a
+6fe18052
+67e1c39b
+7920000f
+c0092e4c
+c0292e51
+c00c2dbf
+c0012b8b
+c00f2dc4
+793f800f
+6fe0c39a
+793ffe01
+67e0c39a
+20600000
+6fe0c39a
+c4008000
+7920000f
+20402e5c
+20402e62
+20542e3f
+6fe0c39b
+c0092d8a
+20600000
+20402e51
+20202e4e
+20402e62
+24740000
+20202d8a
+4748c032
+20402e55
+da200055
+20202908
+6fe0804d
+1fe0a5f9
+1fe0fffc
+67e14339
+6849004e
+60494337
+20600000
+6a40804d
+6fe14339
+9a408400
+60494339
+da20004e
+20202908
+20407dbe
+6fe14339
+68494337
+98467c00
+24628000
+20207dbc
+efe08006
+e8408006
+e8410006
+c009ae6d
+20600000
+efe10006
+67e14340
+70064d40
+20207819
+da20000c
+da600012
+20402e79
+58000008
+e7e10005
+6fe442d5
+e7e40005
+20600000
+20402e81
+da400005
+204029d9
+1a627e00
+e7e08005
+6fe0c33f
+e7e08005
+20600000
+6fe0c33f
+1fe0fe01
+67e0c33f
+c1800000
+70433f01
+20600000
+6fe0c300
+c0002e96
+c000ae99
+c0012e9b
+c040ae8f
+c0412e91
+c041ae94
+20600000
+7042c90d
+20202e97
+7042c90d
+7042c701
+20600000
+7042c90d
+20202e9c
+7042c900
+7042c703
+20600000
+7042c905
+20202e97
+7042c905
+7042c700
+20600000
+6fe0c483
+79207e00
+67e0c483
+20600000
+6fe0c483
+793ffe00
+67e0c483
+20600000
+efe08006
+c000aeba
+c001aee1
+c0022f02
+c002af0f
+c003af78
+c0042f64
+c004af74
+c0052f78
+c005af78
+c0062f79
+c006af7e
+20600000
+18002202
+20403025
+5800000b
+e7e08005
+6fe0c2c9
+e7e08005
+20600000
+67e0c2bf
+efe30006
+e7e30005
+6fe0c300
+c0002f15
+20402edc
+6fe0c481
+203a2ec6
+6fe0c2c2
+c301b794
+6fe0c300
+c303b794
+7042fe03
+6fe0c2c0
+c0002ece
+c000aece
+c001aece
+6fe0c300
+c0012ed1
+c1418000
+dfe00000
+67e24301
+20600000
+6fe0c323
+c2802eda
+da204301
+1a220a00
+df200003
+20407dee
+6fe14303
+1fe17e07
+67e14303
+70064d34
+20207819
+18002207
+20403025
+6fe3c2c6
+e7e38005
+20600000
+7042fe05
+d8a0429d
+20407c91
+6fe0c300
+c0022ee9
+c041aeeb
+c0422eee
+20202ef1
+70064d43
+20207819
+7042fb02
+7042fc08
+20600000
+6fe24301
+203a2ee9
+20202eeb
+7042fe06
+6fe0c300
+c283aefa
+20407244
+18002211
+20403025
+58000003
+e7e08005
+20207363
+d8a042ad
+20407ded
+204071a4
+18002211
+20403025
+58000003
+e7e08005
+202071e0
+18c22200
+6fe0c300
+c283af17
+1a220c00
+2040723c
+2022af2c
+7001ba04
+18002202
+20403025
+58000005
+e7e08005
+6fe081ba
+e7e08005
+47494032
+18000e07
+20407ce2
+7042fe00
+70064d30
+20207819
+7001ba05
+20202f09
+d8a00158
+1a220c00
+20407c91
+6fe0c300
+c041af23
+c0422f23
+2040712e
+20402f31
+6fe0c300
+c1c10000
+70064d3b
+20207819
+20407199
+d8a006af
+204071e0
+da2006af
+da40429d
+df200010
+20407d66
+2422af08
+20202f31
+20407238
+70064d31
+20407819
+70429c01
+7042fe09
+18002211
+20403025
+58000004
+e7e08005
+d8c042ad
+20207c91
+18002211
+20403025
+58000006
+e7e08005
+6fe0c323
+c280af3f
+d8c0428c
+20207c91
+d8c04324
+20207c91
+d8a04305
+1800720a
+20407dee
+1800220b
+20403025
+58000007
+e7e08005
+6fe14305
+e7e10005
+6fe44307
+e7e40005
+20600000
+18002211
+20403025
+58000008
+e7e08005
+58000000
+e7e40005
+e7e40005
+20600000
+18002208
+20403025
+58000009
+e7e08005
+6fe0c2d4
+e7e08005
+6fe342dd
+e7e30005
+20600000
+7001ba08
+20202f09
+6fe0c2cb
+6848c2cb
+98417e00
+20600000
+d8a0430f
+20407c91
+20402f60
+2fec0001
+2020af5e
+6fe0c3cf
+c1850000
+20402f6e
+24740000
+2020379e
+20407dbe
+6fe0c2cd
+c1000000
+6fe0c2c4
+c4008000
+20207dbc
+20402f60
+2fec0001
+2020af5e
+20600000
+20600000
+d8a005dc
+20407c83
+7042fb02
+7042fc01
+20600000
+d8a0063c
+20407c91
+7042fc06
+7042fb02
+20600000
+18002241
+20403025
+5800000c
+e7e08005
+d8c044a6
+20207c83
+20407145
+18002211
+20403025
+5800000d
+e7e08005
+202071e0
+6fe0c2fe
+c17f8000
+d8400003
+98467c00
+24610000
+d8e00007
+20407cf1
+247a0000
+20202f5e
+4749c032
+20402a06
+247a0000
+6fe0c2fe
+c0002fa5
+c000afab
+c0012fa5
+c001afad
+c004afb1
+c005afc1
+c0062fc3
+c006afca
+20600000
+6fe0c2ff
+c1820000
+7042ffff
+7042feff
+70064d3f
+20207819
+7042fe02
+20202eb3
+7042fe04
+58017700
+d8e00007
+20207ce3
+6fe0c2ff
+c0022fb4
+20600000
+6fe0c300
+c283afbf
+7042fe0b
+20402f37
+70064d29
+20407819
+6fe0c3cf
+c1850000
+20402f6e
+20740000
+2020379e
+7042fe0c
+20202fb8
+7042fe0c
+20202f41
+6fe0c2c5
+6848c2cc
+98417e00
+2fec0001
+2020afcc
+7042fe0d
+20202f4d
+20402f55
+20202fcc
+474a4032
+18000e07
+20407ce2
+7042ffff
+7042feff
+70064d3e
+20207819
+474ac032
+6fe0c300
+c4038000
+6fe0c2fb
+c1810000
+7042fb00
+6fe0c2fc
+c000b01b
+c0013022
+c001b013
+c0032ff8
+c003afef
+c0042fe5
+20600000
+7042fb00
+7042fc00
+7042fd00
+20600000
+6fe0c4e6
+1fe20e00
+1fe0fe01
+67e0c4e6
+6fe24301
+afefffff
+58000080
+7920fe00
+67e0c4e7
+20203017
+6fe0c2fd
+7042fd00
+c000aff4
+7042fb02
+20600000
+70064d31
+20407819
+7042fe09
+20202f89
+6fe085d7
+c001affc
+7042fb02
+20600000
+2040716c
+6fe0c300
+c041b001
+c0423001
+20402ece
+20407159
+da2006af
+da40063c
+df200010
+20407d66
+2022b009
+7001ba0b
+20202f09
+20407449
+2422b007
+70429c01
+6fe0c300
+c040aff4
+c041aff4
+c0422ff4
+7042fb02
+7042fc07
+20600000
+6fe0c300
+c041b018
+c0423018
+7044e700
+20202ef1
+7044e600
+c1420000
+20202ed1
+7042fb02
+6fe0c485
+c001b01f
+20600000
+7042fc02
+7005d700
+2020752a
+7042fb02
+7042fc03
+20202f83
+474b4032
+18002406
+202029d9
+6fe0804e
+c000303f
+c000b047
+c001304f
+c001b053
+c0023071
+c002b076
+c003307a
+c003b07f
+c0043080
+c004b081
+c0053082
+c005b086
+c0063087
+c006b089
+c009308a
+c009b08b
+c00a308c
+c00ab08e
+c00b3099
+c00c309a
+6a60804e
+202030bd
+efe48006
+67e4819f
+efe10006
+67e10188
+6fe08168
+79207e05
+67e08168
+20600000
+efe28006
+67e2819f
+efe10006
+67e10188
+6fe08168
+79207e06
+67e08168
+20600000
+58000014
+67e10196
+67e142f7
+20600000
+efe40006
+67e44307
+efe10006
+67e14305
+efe40006
+67e442e7
+efe20006
+67e24475
+204030aa
+474bc032
+6fe0c2fe
+c004b065
+6fe0c323
+c280b068
+6fe0c403
+245a6e88
+6fe0c29c
+c000306d
+7042ff01
+204030b8
+2020724a
+70429c01
+d8c04324
+d8a0428c
+20407c91
+20203065
+7042ff00
+7042fe00
+70064d41
+20207819
+efe40006
+67e442ef
+efe20006
+67e24479
+2020724a
+6fe08168
+79207e04
+67e08168
+20600000
+20748000
+70064d32
+20407819
+7042ff04
+202030bb
+20600000
+202030c2
+20600000
+7042ff02
+204030c9
+70064d33
+20207819
+20600000
+20748000
+202030cb
+20600000
+202030d7
+20600000
+2040308e
+202030db
+efe40006
+67e443bc
+6fe143bc
+684943c8
+20407db2
+67e143bc
+6fe143c0
+684943c4
+20407db2
+67e143c0
+20600000
+202030e1
+efe10006
+67e1019f
+efe10006
+67e10188
+207a0000
+6fe08168
+79207e07
+67e08168
+20600000
+da600013
+da200002
+da400002
+204029d3
+1a627e00
+e7e08005
+20600000
+d8a042ef
+18007208
+20407dee
+d8a04479
+18007204
+20407dee
+da20000d
+da400004
+204029d3
+6fe442ef
+e7e40005
+6fe24479
+e7e20005
+20600000
+7042ff05
+da400005
+202030eb
+da400006
+202030eb
+da200002
+da400007
+204029d3
+e2608005
+20600000
+da200009
+da400009
+204029d3
+6fe443b2
+1fe1fe01
+e7e40005
+20600000
+da40000b
+202030eb
+da200006
+da40000c
+204029d3
+6fe2c160
+e7e28005
+20600000
+da200002
+da40000d
+204029d3
+58000006
+e7e08005
+20600000
+da400013
+202030eb
+da400014
+202030dc
+da400015
+da200009
+204029d3
+6fe443c4
+e7e40005
+20600000
+da200003
+da400017
+204029d3
+6fe0c3ba
+1fe17e07
+e7e08005
+6fe0c3bb
+1fe17e07
+e7e08005
+20600000
+da200001
+202029d3
+474c4033
+c513b37c
+c6930000
+202035db
+474cc033
+7844fc00
+7843fc00
+58555555
+98001e00
+6fe0c5a4
+2020259d
+474d4033
+6fe0c5ce
+20402579
+6fe245a6
+98001200
+20402164
+6848c5a4
+204025a2
+204030f1
+c597b105
+783cfc00
+2000001e
+204030f1
+7857fc00
+7826fc00
+7830fc00
+78507c00
+78287c00
+6fe145a2
+98003600
+37c18400
+242c315f
+204066e7
+c517b114
+6fe0c5e1
+243a3114
+7846fc00
+7825fc00
+7823fc00
+7824fc00
+2040315c
+67e0c5c4
+6848c5c3
+98467c00
+2422b167
+474dc033
+7858fc00
+280ffe2f
+2040b14e
+2038b169
+2040315c
+67e0c50e
+c513b127
+6fe0c50e
+6848c5a0
+a8400e00
+2420b16b
+2040315c
+280ffe2f
+2040b157
+e7e08005
+1fe97e00
+1fe67c1f
+2421316d
+1fe27200
+2022b133
+2040315c
+e7e08005
+c2003130
+c513b138
+18a22200
+2040315c
+67e0c5ea
+1a220a00
+09800018
+1fef7e00
+1ff17e00
+e7e18005
+6fe0c5e1
+243a314c
+7845fc00
+280ffe27
+2040b5a0
+2023316f
+204066e6
+474e4033
+7837fc00
+2040268f
+c6138000
+6fe0c5ea
+6848c641
+98467c00
+20417db4
+202035a3
+7846fc00
+2020313f
+2040315c
+1fe67c01
+20217dc4
+1fe0fffe
+c513b155
+203a7dc4
+1fe0ffff
+67e08656
+20600000
+1fe17e07
+68488656
+18498400
+9841fe00
+20600000
+09800008
+19897e00
+20600000
+7045e201
+280ffe27
+2040b5bb
+474ec033
+20402591
+784dfc00
+7845fc00
+202020cf
+7045e202
+20203162
+7045e203
+20203162
+7045e204
+20203162
+7045e205
+20203162
+7045e206
+20203162
+20402164
+6848c5a4
+202021ff
+474f4033
+6fe0c5cf
+20402579
+6fe245a6
+98001200
+204030f1
+20403171
+79202a00
+782efc00
+78307c00
+7850fc00
+204066ed
+785d7c00
+c517b1a6
+c516b1b8
+19317e00
+1fecfe00
+1ff1fe00
+08008628
+474fc033
+c517b18d
+6fe0c5e1
+243a318d
+784efc00
+782dfc00
+7823fc00
+7824fc00
+6fe0c5a1
+98007200
+d8c04550
+efe08006
+08008608
+c2003192
+78247c00
+08008618
+78447c00
+c597b19c
+7843fc00
+58000000
+08008603
+37d38200
+20000064
+785d7c00
+784efc00
+6fe0c5e1
+243a31a3
+784dfc00
+785c7c00
+20402164
+202066eb
+df20000a
+5800003c
+08008608
+c20031a7
+784efc00
+783c7c00
+19317e00
+1ff17e00
+1ff1fe00
+08008620
+c51731b5
+58000001
+08008605
+783d7c00
+20203187
+58000000
+08008605
+20203187
+6fe0c148
+1fe37200
+20000002
+c20031ba
+19317e00
+1fecfe00
+1ff18400
+18427e00
+08008608
+18427e00
+08008628
+20203187
+47504034
+6fe0c5cf
+c28131e5
+6fe0c59f
+1fe0fe03
+67e0c5a1
+6fe0c5c3
+67e0c550
+6fe0c5a0
+e7e08005
+6fe0c59f
+1fe9fe00
+6848c595
+18410403
+18438400
+9841fe00
+6848c596
+9840fe00
+e7e08005
+6fe0c59f
+98007200
+d8c04530
+20407cdc
+4750c034
+c6938000
+6fe08035
+e7e08005
+6fe0c5cf
+c3810000
+6fe0c5a1
+1fe0fe01
+67e0c5a1
+20600000
+6fe0c59f
+1fe0fe04
+c593b1e9
+1fe0fe01
+67e0c5a1
+6fe0c5c3
+67e0c550
+6fe0c5a1
+1fe0fffe
+e7e08005
+6fe0c5a0
+e7e08005
+58000000
+202031cf
+47514034
+6fe0c50f
+1fe97e00
+67e0c594
+1fe0fe01
+d8c0450f
+98c08c00
+efe18006
+67e1c597
+6fe0c50f
+1fe37e00
+1fe17e03
+67e0c59d
+20600000
+4751c034
+6848c5a5
+20403206
+6048c5a5
+20600000
+47524034
+2040320b
+18408401
+18410403
+20600000
+4752c034
+6fe0c5a6
+1fe17e03
+1fefa204
+580045aa
+9a20fe00
+98408c00
+efe08006
+67e0c5a4
+20600000
+67e245a6
+47534034
+da200000
+df200004
+d8c045a6
+efe08006
+9a20a200
+c200321a
+1a227e00
+67e145c1
+6fe0c5c1
+6848c5c2
+9840fe00
+67e0c5c3
+20600000
+4753c034
+20407dbe
+684a45ba
+1c427e00
+98467c00
+24413234
+1fe22400
+6fe245ba
+6848c5be
+98408400
+1a427e00
+98467c00
+24610000
+793ffe1c
+67e245ba
+20207dbc
+20628000
+79207e1c
+20600000
+58000000
+67e245ba
+20600000
+47544035
+38001300
+3805908b
+380b6150
+380c3d20
+67e4c5aa
+38003a1a
+3804c453
+3808d312
+380c0001
+e7e38005
+6fe0c5d0
+207a0000
+d8c045d1
+d8a045aa
+20207c91
+4754c035
+584e001e
+67e1c5d2
+58032303
+e7e18005
+58250642
+e7e18005
+58094c06
+e7e18005
+583c0927
+e7e18005
+7045d001
+20600000
+47554035
+d8406978
+c513b25e
+d84012c0
+6fe0c5ce
+c301325e
+d8402ee0
+604945a2
+20600000
+7045ce01
+7045cf01
+20600000
+7045ce02
+7045cf02
+20600000
+4755c035
+7045e74e
+58101520
+67e1c5e3
+58000005
+20207dce
+da6045ef
+da403653
+2020375c
+79200026
+6fe0c613
+793ffe02
+79207e01
+67e0c613
+58000000
+67e145f5
+6fe145ed
+67e145ef
+7045ec00
+204032b4
+70459500
+6fe0c5e7
+67e0c5a4
+6fe0c5e8
+67e0c141
+6fe245e3
+20203215
+47564035
+7045f900
+6fe145f1
+1fe0fe01
+67e145f1
+6fe0c5f1
+1fe17eff
+247a0000
+6fe0c5eb
+c07fb2d6
+c000b290
+c0013292
+c001b298
+c002329e
+20600000
+704530ff
+2020329f
+6fe0c5c5
+203a3296
+6fe2461b
+20403215
+704530aa
+2020329f
+70453055
+6fe0c5c5
+203a329f
+6fe245ff
+67e24532
+202032a1
+70453022
+6fe2461b
+67e24532
+6fe0c5a0
+1fe17e07
+67e0c531
+70453600
+70459f07
+204031c4
+2040362a
+246c0000
+24778000
+20403553
+20403647
+4756c035
+6fe0c5eb
+c17f8000
+c000b2b9
+c00132bb
+c001b2c1
+c00232c9
+20600000
+7045eb02
+6fe0c5c5
+207a0000
+7045eb01
+20600000
+7045eb02
+20203625
+6fe0c5c5
+203a32bf
+6fe24576
+67e245ff
+7045eb03
+20203625
+6fe0c5c5
+203a32c7
+6fe24576
+684a461b
+98467c00
+24628000
+7045eb04
+20203625
+6fe0c5c5
+203a32cf
+6fe24576
+684a45ff
+98467c00
+24628000
+7045ebff
+70064d39
+20407819
+58000000
+67e145ef
+6fe24576
+20403215
+6fe0c613
+793ffe01
+67e0c613
+20203625
+70462d01
+70462c00
+20600000
+6fe0c62c
+c3808000
+79207e01
+67e0c62c
+58000000
+67e1c5ea
+67e0c5f5
+67e0c5f6
+67e24643
+70462801
+2020327a
+70459f08
+d8c045ed
+d8a04530
+20207c8b
+47574035
+20403397
+204030f8
+2437b397
+204032fb
+204033ca
+20403372
+20403e80
+6fe0c5c5
+207a0000
+6fe24643
+207a0000
+20203215
+20403397
+20203162
+70463905
+d8c0450e
+d8a045ff
+20407c8b
+4757c035
+6fe0c601
+c0553306
+c02ab317
+c0113338
+c07fb573
+20600000
+6fe0c602
+c000b30a
+c0013312
+20600000
+6fe0c5f5
+247a0000
+7045ea01
+7045ed01
+7045ee80
+6fe34508
+67e345ef
+20600000
+6fe0c5f6
+247a0000
+7045eb01
+7045ed02
+2020330e
+6fe0c5c5
+203a331d
+6fe24603
+684a4508
+98467c00
+24628000
+6fe0c602
+c000b321
+c001332e
+20600000
+6fe0c5f5
+247a0000
+6fe0c5ea
+c000b326
+20600000
+7045ea02
+6fe0c5c5
+203a330d
+7045ed01
+7045ee80
+6fe24643
+67e245ef
+20207dbc
+6fe0c5f6
+247a0000
+6fe0c5eb
+c000b333
+20600000
+7045eb02
+6fe0c5c5
+203a3315
+7045ed02
+2020332a
+6fe0c5c5
+203a333e
+6fe24603
+684a4643
+98467c00
+24628000
+6fe0c602
+c000b342
+c001334f
+20600000
+6fe0c5f5
+247a0000
+6fe0c5ea
+c0013347
+20600000
+7045f501
+2040330d
+6fe0c5ec
+1fe1fe01
+67e0c5ec
+58000000
+67e145ea
+20600000
+6fe0c5f6
+247a0000
+6fe0c5eb
+c0803354
+20600000
+7045f601
+20403315
+6fe0c5ec
+1fe1fe02
+67e0c5ec
+2040334c
+20203e7a
+6fe0c511
+c000b35f
+c0013363
+20600000
+6fe0c642
+c4000000
+7857fc00
+20600000
+6fe0c642
+c4008000
+20203361
+6fe0c627
+247a0000
+6fe0c642
+1fe1fe01
+67e0c642
+20600000
+6fe0c627
+247a0000
+6fe0c642
+1fe1fe02
+67e0c642
+20600000
+6fe0c5ec
+207a0000
+6fe0c602
+c000b366
+c001336c
+20600000
+79200027
+6fe0c141
+67e0c63a
+202035ae
+6fe145f7
+20207d7b
+47584036
+70459f00
+6fe0c628
+207a0000
+6fe145f9
+20207d7b
+204033c7
+2437b397
+204033b9
+24343397
+6fe0c594
+203a3397
+1fe0fe02
+98007200
+d8c0450e
+d8a045ff
+20407cdc
+70462a00
+6fe0c627
+205a33d4
+4758c036
+6fe0c601
+c000b39d
+c00133ac
+c07fb39b
+47594036
+d8a0450e
+df200042
+20207ca3
+20403374
+20203573
+20403366
+20403504
+6fe0c621
+6848c5ff
+284ffe03
+7920fe00
+67e0c621
+c000b3b2
+6fe0c629
+6848c5ff
+284ffe04
+7920fe00
+67e0c629
+6fe145fb
+20207d7b
+2040336c
+6848c5ff
+284ffe03
+2020b3b7
+6fe145fd
+20207d7b
+6fe0c5f5
+247a0000
+7045f501
+6fe24609
+2020357b
+6fe24609
+20203581
+20407dbe
+6fe0c59d
+6848c59e
+98467c00
+2442fdbc
+6fe0c59d
+67e0c59e
+6fe1c597
+6849c59a
+98467c00
+2442fdbc
+6fe1c597
+67e1c59a
+20600000
+20403397
+204030f8
+24778000
+6fe0c50e
+67e0c5a0
+204031f3
+6fe0c50f
+2feffe00
+2020b3d3
+2040337e
+204031c4
+20403174
+20203162
+70462b01
+58000280
+d8e00008
+20207ce3
+4759c036
+70462a01
+70462e00
+7045beff
+20203237
+475a4036
+6fe0c62a
+207a0000
+20403224
+24740000
+204033ea
+6fe0c62e
+1fe0fe01
+1fe17e01
+67e0c62e
+c00033ef
+c000b3f2
+20600000
+6fe0c639
+207a0000
+1fe0ffff
+67e0c639
+20600000
+6fe0c639
+247a0000
+20203436
+6fe0c639
+247a0000
+202032da
+6fe0c641
+247a0000
+6fe0c63f
+205a3425
+6fe0c63c
+c3800000
+79207e00
+67e0c63c
+70463b01
+70464000
+58000000
+67e1463d
+7045be60
+20203237
+475ac036
+6fe0c62d
+c1000000
+6fe0c641
+247a0000
+6fe0c63f
+247a0000
+6fe0c63b
+207a0000
+6fe0c642
+2fe00603
+2020b421
+20403224
+24740000
+6fe1463d
+1fe0fe01
+67e1463d
+d84007d0
+98467c00
+20213421
+6fe0c640
+1fe0fe01
+1fe17e01
+67e0c640
+c00034ea
+c000b2da
+20600000
+6fe0c639
+243a32da
+202034ea
+70463f01
+202034ea
+70463b00
+20600000
+70463b01
+20600000
+475b4036
+6fe0c62c
+c3800000
+79207e00
+67e0c62c
+6fe0c63a
+67e0c141
+70462800
+7008eb00
+70462101
+70459500
+6fe24508
+20403215
+20403201
+20203397
+70462800
+70462d00
+70462c00
+20600000
+6fe0c62d
+c1800000
+20403427
+204034ee
+20203384
+475bc036
+6fe0c62d
+c1808000
+204032dd
+204032ec
+6fe0c627
+247a0000
+6fe0c5ec
+207a0000
+70462a00
+20403436
+204033d4
+20203237
+6fe0c62c
+c3838000
+79207e07
+67e0c62c
+6fe0c63a
+67e0c141
+70462e00
+70462801
+58000000
+67e1c654
+67e3c631
+204034dc
+24628000
+6fe0c5a5
+67e0c630
+6fe0c5a4
+67e0c62f
+20600000
+475c4037
+6fe0c62d
+c1838000
+2040344c
+20403484
+204033c7
+2437b397
+204034dc
+2042b386
+6fe0c621
+205a3423
+70462d00
+6fe0c62c
+79207e00
+67e0c62c
+6fe0c628
+1fe67c02
+2442b4da
+20403397
+204033d4
+204034dc
+2022b47d
+6fe245a6
+684a464b
+98467c00
+2022b480
+6fe245a6
+684a4647
+98467c00
+2022b482
+20600000
+6fe0c630
+67e0c5a5
+20600000
+6fe0c636
+2020347e
+6fe0c633
+2020347e
+475cc037
+6fe0c62e
+1fe0fe01
+1fe17e03
+67e0c62e
+c00034a8
+c000b4c2
+c001348e
+c001b4c2
+20600000
+2040330d
+6fe24647
+203a3484
+20403215
+6fe0c634
+205a34a3
+6fe0c632
+67e0c5a4
+6848c655
+6a21465b
+20403583
+6048c655
+2040358c
+6048c652
+18467c50
+24610000
+6848c633
+20403206
+6048c633
+67e0c632
+20600000
+70463401
+d8400000
+2040320b
+67e0c632
+20600000
+20403315
+6fe2464b
+203a3484
+20403215
+6fe0c637
+205a34bd
+6fe0c635
+67e0c5a4
+6848c656
+6a21465d
+20403583
+6048c656
+2040358c
+6048c653
+18467c50
+24610000
+6848c636
+20403206
+6048c636
+67e0c635
+20600000
+70463701
+d8400000
+2040320b
+67e0c635
+20600000
+2040330d
+6fe24508
+20403215
+6fe0c631
+205a34d6
+6fe0c62f
+67e0c5a4
+6848c654
+6a214659
+20403583
+6048c654
+2040358c
+6048c651
+18467c50
+24610000
+6848c630
+20403206
+6048c630
+67e0c62f
+20600000
+70463101
+6fe0c62f
+67e0c5a4
+20600000
+70462800
+20600000
+6fe245a6
+684a4508
+98467c00
+20600000
+6fe0c628
+c1010000
+6fe0c62b
+207a0000
+d8e00008
+20407cf1
+247a0000
+70462b00
+70463900
+204033f5
+475d4037
+70462d07
+70462c00
+20203397
+475dc037
+6fe0c621
+c000b5c2
+6fe0c629
+c000b502
+684a4622
+1c427e00
+98467c00
+24413234
+1fe22400
+6fe24622
+6848c626
+98408400
+1a427e00
+98467c00
+24610000
+793ffe1c
+67e24622
+70462101
+20203201
+70462900
+20203201
+1c427e00
+67e24622
+20600000
+da6045f5
+da403653
+2020375c
+475e4037
+79200026
+6fe0c613
+793ffe01
+79207e02
+67e0c613
+6fe0c5fa
+203a351f
+6fe0c5f9
+c000b517
+c0013517
+c001b526
+c0023526
+6fe0c5e8
+67e0c141
+6848c603
+6048c5a5
+6fe245fb
+20403530
+6048c603
+20600000
+70414103
+6848c604
+6048c5a5
+6fe245ff
+20403530
+6048c604
+20600000
+70414103
+6848c605
+6048c5a5
+6fe2461b
+20403530
+6048c605
+20600000
+6fe24576
+207a0000
+67e245ff
+20403215
+20203201
+475ec037
+6fe145f7
+d84001f8
+98417e00
+203a353b
+6fe145f7
+1fe0fe01
+67e145f7
+20600000
+20403557
+2040362a
+242c355e
+2437b55e
+20403647
+6fe0c3cf
+c0044d5d
+6fe245e3
+684a45a6
+98467c00
+2022b26f
+6fe2461b
+684a45a6
+98467c00
+2042b52d
+6fe0c613
+793ffe02
+67e0c613
+58000000
+67e145ef
+67e145f7
+67e145f5
+70064d3c
+20407819
+475f4037
+df200020
+d8a04530
+20207ca5
+704530ff
+6fe0c5a0
+67e0c531
+6fe2461b
+67e24532
+70459f06
+202031c4
+475fc037
+6fe0c5fa
+203a3201
+6fe145f7
+1fe0fe01
+67e145f7
+2feffe09
+6fe0c5f9
+c000b56b
+c001356d
+c001b56f
+c0023571
+2020351f
+2020b51f
+20203517
+2020b526
+20203517
+2020b526
+2020351f
+2020b526
+2020327a
+6fe0c602
+c000b577
+c001357d
+20600000
+6fe0c5f5
+247a0000
+6fe24603
+67e24643
+67e24647
+20600000
+6fe0c5f6
+247a0000
+6fe24603
+67e24643
+67e2464b
+20600000
+47604038
+1a227e00
+98408a00
+6fe08009
+e7e08005
+18408401
+6fe0c5e9
+98410400
+20600000
+4760c038
+6fe0c5e9
+1fe0fe01
+67e10679
+1fe27200
+1a220c00
+dfe00000
+e8408006
+9840fe00
+c2003593
+68490679
+9846fc00
+20407d64
+18078400
+c6138000
+18427e00
+c6930000
+204022ec
+1fe20400
+20600000
+202022cd
+6fe14607
+202035b5
+1fe22200
+6848c606
+6fe14607
+98408a00
+1a227e00
+e7e08005
+18408401
+6fe0c5e9
+98410400
+6048c606
+20600000
+6fe14657
+204035b5
+6fe14659
+204035b5
+6fe1465b
+204035b5
+6fe1465d
+207a0000
+1fe20a00
+6fe0c5e9
+1fe0fe01
+1fe27200
+20207ca3
+204035a0
+207a0000
+6848c650
+6a214657
+20403583
+6048c650
+20600000
+6a214657
+2040358c
+6048c64f
+18467c50
+24610000
+20203201
+6fe24508
+67e2461b
+202035a1
+58002fb2
+67e1c61f
+58100c0c
+67e1c5be
+5800bb80
+67e1c622
+70463805
+20600000
+5800f80c
+67e1c61f
+581c1919
+67e1c5be
+58017700
+67e1c622
+7046380b
+20600000
+6fe0c613
+c280b281
+c2813532
+6fe0c62f
+c000b6a0
+47614038
+204035fd
+2434367e
+4761c038
+20403612
+204036c8
+6fe0c3cf
+c0045923
+6fe44622
+67e445c6
+6fe14634
+67e14636
+6fe1460f
+20207d7b
+47624038
+20403694
+24740000
+2040369e
+20407de6
+6fe1c61f
+202035fa
+4762c038
+20403694
+24740000
+2040369e
+6fe445c6
+20407d27
+604a40a9
+20202406
+20403600
+24740000
+202031c4
+6fe14609
+20407d7b
+20343606
+6fe3c531
+207a0000
+20207dbc
+70461900
+1a20fe01
+67e0c59f
+2040360e
+67e0c530
+1a420c00
+1a227200
+20207cdc
+6fe0c5a0
+1fe17e07
+67e0c5a0
+20600000
+58000000
+67e0c618
+67e14639
+47634038
+2040362a
+6fe0c596
+c000b61f
+242c3638
+2437b638
+20403647
+6fe0c3cf
+1fe67c08
+2042db33
+204036fc
+20403553
+6fe0c595
+1fe0fe01
+67e0c595
+2040366d
+4763c038
+58000000
+67e0c614
+67e14615
+20600000
+47644039
+7857fc00
+20403174
+6fe0c596
+c000b162
+18002a00
+6fe245a6
+98001200
+68488008
+20402173
+204021aa
+20403100
+2057b162
+20600000
+4764c039
+6fe0c3cf
+c00459df
+6fe0c619
+247a0000
+6fe14615
+1fe0fe01
+67e14615
+6fe0c616
+c282364f
+20403655
+6fe14639
+1fe0fe01
+67e14639
+20203615
+47654039
+204031f3
+6fe0c594
+207a0000
+98007200
+d8c04510
+d8a04574
+20207cdc
+4765c039
+58000000
+67e14615
+70461701
+70064d3a
+20207819
+47664039
+6fe0c3cf
+c0044d70
+6848c618
+6fe0c638
+98467c00
+24213675
+18408401
+6048c618
+6fe0c638
+c002b664
+6fe0c618
+c003366f
+c006366f
+20600000
+6fe0c618
+c001b66f
+c003366f
+20600000
+c517b66b
+67e0c551
+20600000
+67e0c552
+20600000
+6fe0c5a0
+c4020000
+6fe0c5a0
+793ffe04
+67e0c5a0
+20403668
+20403700
+20203201
+6fe245a6
+684a45fb
+98467c00
+2022b201
+204036ee
+20403700
+20203201
+6fe1460b
+20207d7b
+6fe0c619
+205a3685
+6fe0c62f
+c1008000
+2040367c
+6fe14611
+20207d7b
+4766c039
+70461901
+7045a001
+2040360e
+67e0c530
+58000000
+67e3c531
+6fe2461b
+67e24538
+70459f0c
+6fe0c5a0
+79207e03
+67e0c5a0
+204031c4
+202035e3
+47674039
+78347c00
+204023f0
+6fe1c0bd
+203a7dbe
+6fe0c094
+203a7dbe
+6fe0c62f
+c000fdbe
+20600000
+6fe1460d
+20207d7b
+20403224
+24740000
+204036b5
+6fe14630
+1fe0fe01
+67e14630
+68494632
+98467c00
+2042b6aa
+202035e0
+70462f00
+58000000
+67e14630
+58000064
+67e14632
+70462e00
+6fe0c5bf
+67e0c5be
+20600000
+6fe0c5c0
+202036b1
+6fe0c62e
+1fe0fe01
+67e0c62e
+c00236b3
+c002b6af
+20600000
+70462f01
+58000000
+67e14630
+20600000
+df200002
+d8c045a6
+20407dbc
+5800ffff
+e8410006
+98467c00
+2442fdbe
+c20036c3
+20600000
+4767c039
+6fe0c44e
+247a0000
+6fe14500
+c3858000
+6a214607
+2040358c
+6048c63b
+6fe0c640
+c51336d3
+6fe0c643
+98467c00
+242136ed
+6fe0c63d
+1fe67c02
+242136db
+6fe0c63d
+c00036ee
+20600000
+6fe0c63d
+6848c63e
+98467c00
+24628000
+70463d00
+6848c63b
+6fe0c63f
+c51336e4
+6fe0c642
+98467c00
+24610000
+6fe0c63c
+c00036fa
+1fe0ffff
+67e0c63c
+c00136f6
+c000b6f8
+202036fa
+70463d00
+6fe0c63c
+c001b6f4
+1fe0fe01
+67e0c63c
+c000b6f8
+c00136f6
+70414105
+20600000
+70414103
+20600000
+70414100
+20600000
+70414185
+20600000
+6fe0c63d
+1fe0fe01
+67e0c63d
+20600000
+6fe0c63d
+1fe67c02
+24413708
+6fe0c63d
+c1000000
+1fe0ffff
+67e0c63d
+20600000
+70463d03
+20600000
+44e7c019
+6fe0c3cf
+203a370a
+c0023cd1
+c004e0c8
+c0054a31
+c00737c1
+c0036286
+c006badf
+c007beae
+c00666f2
+c0044d11
+20600000
+20758000
+20406f7c
+6fe0c3cf
+c004e1f3
+c00361f3
+c0023cdc
+c0044d82
+c007bea1
+c006baee
+c00737d3
+20600000
+20407762
+20407831
+20403729
+6fe143e4
+20207d7b
+6fe143e2
+20207d7b
+44e8401a
+da2044ea
+20407d99
+207a0000
+1fe22600
+20403732
+20203736
+da600000
+20600000
+c0083745
+c00a373c
+c00ab740
+20600000
+6fe143e6
+20207d7b
+6fe143dc
+20207d7b
+6fe143e0
+20207d7b
+6fe14500
+79207e09
+67e14500
+20600000
+70439a00
+6fe14500
+793ffe09
+67e14500
+202037a2
+6fe143fa
+79207e00
+67e143fa
+20600000
+67e081fb
+44e8c01a
+6fe081fb
+207a0000
+1fe0ffff
+67e081fb
+2040776e
+20403783
+20406be1
+6fe143ec
+20407d7b
+2020374a
+efe08013
+207a0000
+1fe0ffff
+e7e08013
+247a0000
+1a427e00
+20207d7b
+efe10013
+207a0000
+1fe0ffff
+e7e10013
+247a0000
+1a427e00
+20207d7b
+68494447
+1840a601
+da403767
+20203755
+204037b8
+c000b76a
+2020379c
+58000002
+e7e08013
+1840a408
+efe10012
+20207d7b
+20403771
+2020379c
+58000000
+67e143f8
+20600000
+58000000
+67e143fa
+20600000
+6fe143fa
+79207e07
+67e143f8
+58000000
+67e143fa
+20600000
+d8e00009
+202024be
+d8e00009
+202024c2
+7043f605
+2020377d
+da6043f6
+da40377f
+20203755
+70064d0f
+20207824
+70064d10
+20207824
+70064d0e
+20207824
+70064d0d
+20207824
+70064d17
+20207824
+70064d18
+20207824
+70064d16
+20207824
+70064d11
+20207824
+70064d15
+20207824
+70064d14
+20207824
+70064d13
+20207824
+70064d19
+20207824
+70064d1f
+20207824
+7920000d
+20600000
+793f800d
+20600000
+204037b8
+c00137ae
+58000001
+e7e08013
+1840a203
+1840a406
+e8408011
+1a60a601
+e0408013
+2020376d
+58000000
+e7e08013
+6fe14500
+c304b7b4
+204030a3
+20403794
+68494447
+1840a202
+1840a404
+202037aa
+68494447
+1840a600
+efe08013
+20600000
+204037b8
+c08037bf
+2020379c
+1840a40a
+2020376d
+20407384
+20758000
+5800398b
+67e143e4
+58003a9c
+67e143ec
+580039be
+67e145f9
+58003933
+67e143e8
+58003924
+67e143e6
+44974005
+204038f3
+20403904
+20402931
+2040391d
+2020789d
+7041410a
+7045cf84
+7045ce84
+58ffffff
+67e1c680
+704683ff
+58000000
+67e1c2dd
+58220101
+67e1c2e0
+58ffffff
+67e1c68c
+70468fff
+70469b01
+58241404
+67e1c5aa
+7045ad34
+70469010
+70469a01
+70439707
+70438c01
+580000f0
+67e1438d
+58000801
+67e143b2
+7043ba84
+7043bb84
+58504708
+67e1c26d
+58435734
+67e1c270
+585f5241
+67e1c273
+70434c1f
+58050102
+67e1c34d
+58000008
+67e142d5
+58000010
+67e142d7
+58000000
+67e142d9
+5800012c
+67e142db
+5800469d
+67e14404
+58000414
+67e2c69d
+580046fd
+67e142f9
+38020001
+38060000
+38081022
+380c0060
+67e4c6fd
+38020002
+380600c0
+380a0012
+380c000c
+67e4c705
+38020502
+3804004a
+38080040
+380c0808
+67e4c70e
+38010229
+38054000
+38082000
+380ca000
+67e4c717
+38000002
+38040186
+38083020
+380c04a0
+67e4c720
+3800074e
+38040080
+380932a0
+380dcd04
+67e4c729
+38002074
+38041153
+380af4d2
+380dcdd5
+67e4c732
+38002065
+38040808
+380a0202
+380c2080
+67e4c73b
+38030200
+38044a00
+380894e0
+380c0800
+67e4c744
+38022a01
+38040000
+380800a0
+380c0c08
+67e4c74d
+38020128
+380402c0
+38084020
+380c20a8
+67e4c756
+38000010
+38054008
+380ac000
+380c3004
+67e4c75f
+38000200
+38048a00
+380bff00
+380c0037
+67e4c768
+38000302
+3804804a
+380800e1
+380fc408
+67e4c771
+380004ff
+38040000
+3808f000
+380c0800
+67e4c77a
+38022902
+38040000
+38080100
+380c0c08
+67e4c783
+38000128
+38040442
+380b2020
+380c07ff
+67e4c78c
+58000000
+67e1c795
+7041480c
+58643f35
+67e1c0c3
+583b2f8f
+67e1c0c6
+7040a720
+7040c900
+7040ca08
+7040cbb4
+70409918
+70411c3e
+58050e08
+67e1c160
+58000003
+67e14163
+70416a20
+704143ff
+58000c00
+67e1409a
+58000004
+67e1c144
+70414708
+70444fa0
+580002bc
+67e14452
+58000190
+67e14450
+70445403
+70445509
+704149ff
+58004149
+67e1409c
+20406b28
+da20488d
+da401f00
+df20003c
+20406b62
+20406b25
+6fe0c88d
+245a38b9
+6fe1c88e
+245a38bb
+6fe1c891
+245a38bd
+6fe0c894
+245a38bf
+6fe0c895
+245a38c1
+6fe0c896
+245a38c3
+6fe0c897
+245a38c5
+6fe0c898
+245a38c7
+6fe0c899
+245a38c9
+6fe2c89a
+245a38cb
+6fe0c89f
+245a38cd
+6fe0c8a0
+245a38cf
+6fe148a1
+245a38d1
+6fe1c8a3
+245a38d3
+6fe0c8a6
+245a38d5
+6fe0c8a7
+245a38d7
+6fe148a8
+245a38d9
+6fe148aa
+245a38db
+6fe0c8ac
+245a38dd
+6fe0c8ad
+245a38df
+6fe0c8b2
+245a38e1
+6fe0c8b3
+245a38e3
+6fe0c8b4
+245a38e5
+6fe248b5
+245a38e7
+6fe0c8b9
+245a38ea
+6fe248bb
+245a38ef
+6fe248bf
+245a38f1
+20600000
+67e0c148
+20600000
+67e1c0c3
+20600000
+67e1c0c6
+20600000
+67e0c0a7
+20600000
+67e0c0c9
+20600000
+67e0c0ca
+20600000
+67e0c0cb
+20600000
+67e0c099
+20600000
+67e0c11c
+20600000
+67e2c160
+20600000
+67e0c16a
+20600000
+67e0c143
+20600000
+67e1409a
+20600000
+67e1c144
+20600000
+67e0c147
+20600000
+67e0c44f
+20600000
+67e14452
+20600000
+67e14450
+20600000
+67e0c454
+20600000
+67e0c455
+20600000
+67e0c141
+20600000
+67e0c5cf
+20600000
+67e0c5ce
+20600000
+67e2468c
+70469c01
+20600000
+6fe0c69c
+247a0000
+6fe0c8b9
+67e0c690
+20600000
+67e245a6
+20600000
+67e245aa
+20600000
+5800000f
+67e14684
+5800012c
+67e14686
+2040394f
+20403963
+204038fb
+20203981
+da2042dd
+da404680
+df200004
+20407d66
+24628000
+6fe0c2dd
+1fe0ffff
+67e0c2dd
+20600000
+6fe0c26d
+d8a0426e
+98a0a400
+1fe0fe10
+67e0c26d
+df200006
+da2042e2
+1a420a00
+e8408011
+18417ef0
+1ff1fe00
+20403917
+e7e08005
+18417e0f
+20403917
+e7e08005
+1a20a3ff
+c200390c
+20600000
+1fe67c09
+2021391b
+1fe0fe37
+20600000
+1fe0fe30
+20600000
+7042e317
+5800001b
+67e14334
+204029a4
+204029be
+204029ca
+202029ac
+1a627e00
+c00a3930
+c00ab928
+20600000
+70467f00
+2040394b
+70468900
+70469a01
+58000000
+67e1c6f2
+2040789d
+2020378c
+70467f01
+20403adc
+202037a0
+6fe1439c
+c008b936
+20600000
+4497c005
+1a427200
+1a220c00
+d8a046f2
+20407cdc
+6fe0c6f2
+207a0000
+2040394b
+70468904
+6fe0c6f4
+c1810000
+6fe0c6fa
+c000ba60
+c0013a65
+c001ba6f
+c0023a6a
+c050ba74
+c0513a71
+c051ba7a
+c0523a77
+20600000
+6fe0c69c
+207a0000
+20403acd
+20203ac1
+df200004
+da6045a6
+da4000ae
+20403956
+1a60a601
+c2003952
+20600000
+da200001
+1a43a400
+2a4ffe07
+2040b95e
+1a23a200
+1a227e00
+c3840000
+20203957
+efe08013
+9a22fe00
+e7e08013
+1a42a411
+20600000
+20406b28
+da204691
+da401fda
+df200006
+20406b62
+20406b25
+6fe34691
+207a0000
+6fe14691
+67e142dd
+6fe0c694
+67e0c2df
+6fe0c696
+67e0c2e0
+6fe0c692
+1fe67c1a
+24610000
+6fe0c693
+207a0000
+180a7e00
+1fe17e07
+1fe3fe00
+1ff27e00
+6848c692
+9840fe00
+67e0c2de
+da2042de
+da401fdb
+df200001
+20206b33
+6fe0c69c
+247a0000
+da200000
+204070b9
+da204650
+da401770
+dfe00000
+204070de
+6fe0c690
+20207100
+44984006
+dfe0000a
+2040710e
+204039a7
+6fe0c67f
+247a0000
+6fe14660
+1fe0fe01
+67e14660
+1ff1fe00
+204039fb
+204039ae
+20403a0f
+5800450e
+1fe0fe02
+1fe20c00
+df20000c
+dfe00000
+20407dd0
+1fe17eff
+6848c51c
+98467c00
+24628000
+6fe0c510
+4498c006
+c0553a88
+c0663a21
+20600000
+6fe0c69c
+247a0000
+204039c4
+204039e5
+204039f1
+204039d7
+20600000
+d8400004
+d8e00005
+204020dc
+20740000
+79200027
+58008ca0
+67e145a2
+70462801
+6fe0c5ce
+20402579
+20403217
+204033c7
+204031f3
+20403162
+24778000
+20600000
+70459f0b
+6fe3c666
+67e3c530
+6fe2466d
+67e24537
+20600000
+da200008
+d8e0000c
+20407cf1
+203a39cf
+9a267c00
+2022b9cb
+20610000
+d8e0000c
+20407cf1
+203a39cf
+202039cb
+6fe0c688
+c00139d5
+c001b9d3
+20600000
+70468801
+20600000
+70468800
+20600000
+6fe0c689
+207a0000
+6848c688
+2841fe01
+24608000
+70468802
+da201770
+da401770
+dfe00000
+204070de
+6fe0c68a
+d8e0000c
+20407ce3
+20600000
+6848c688
+2841fe00
+24608000
+70468803
+da204650
+da401770
+dfe00000
+204070de
+5800000c
+d8e0000c
+20407ce3
+20600000
+6fe0c689
+d84003e8
+984ffe00
+d8400271
+9846fc00
+20407d64
+1807fe00
+1fe0fe01
+67e0c68a
+20600000
+c0003a00
+c000ba03
+c0013a06
+c001ba09
+20203a0c
+6fe0c5aa
+67e0c5a4
+20600000
+6fe0c5ab
+67e0c5a4
+20600000
+6fe0c5ac
+67e0c5a4
+20600000
+6fe0c5ad
+67e0c5a4
+20600000
+58000000
+67e14660
+20600000
+6fe0c65f
+207a0000
+6fe0c67e
+d840000f
+98467c00
+24610000
+70467e00
+58000000
+67e1467b
+2040394b
+70468904
+70438c00
+70469901
+6fe0c69a
+207a0000
+70468900
+70438c01
+20600000
+44994006
+6fe3c510
+67e3c672
+6fe2c517
+67e2c679
+da204673
+6fe24662
+203a3a7d
+da404662
+df200004
+20407d66
+24628000
+da204677
+da404680
+df200004
+20407d66
+2022ba3c
+da204677
+da4042dd
+df200004
+20407d66
+2422ba38
+20203a40
+70465f00
+58000000
+67e24662
+20600000
+6fe0c69b
+c0003a38
+c000ba40
+20600000
+70467e00
+6fe1467b
+203a3a18
+20403a47
+20403a50
+20403a55
+20203a59
+6fe0c69c
+247a0000
+70438c01
+70439701
+70469a00
+70469900
+5800000f
+67e14684
+20600000
+6fe0c69b
+207a0000
+5800012c
+67e14686
+20600000
+6fe0c67c
+c000ba62
+c0013a5d
+20600000
+6fe0c67b
+c000ba67
+c0013a6c
+20600000
+6fe0c67b
+c000ba71
+c0013a74
+7046890a
+20203ac9
+6fe0c67b
+c000ba77
+c0013a7a
+70468928
+20203ac5
+6fe0c67c
+c000ba77
+c0013a71
+7046893a
+20203ad5
+6fe0c67c
+c000ba7a
+c0013a74
+70468940
+20203ad1
+7046891c
+20403ac9
+20203ad5
+70468922
+20403ac9
+20203ad1
+70468934
+20403ac5
+20203ad5
+7046892e
+20403ac5
+20203ad1
+da204677
+da404680
+df200004
+20407d66
+2022ba88
+da204677
+da4042dd
+df200004
+20407d66
+24628000
+20203a88
+6fe3c510
+67e3c672
+6fe0c65f
+c0003a8e
+c000ba97
+20600000
+20403adc
+70465f01
+704666bb
+6fe24673
+67e24662
+67e2466b
+6fe242dd
+67e24667
+20600000
+da204673
+da404662
+df200004
+20407d66
+2022ba8e
+6fe0c67e
+1fe0fe01
+67e0c67e
+20403aa1
+20203aae
+6fe0c69c
+247a0000
+6fe0c699
+207a0000
+da604684
+da403aa8
+2020375c
+5800000f
+67e14684
+70439707
+70469900
+70469a01
+20600000
+6fe0c69b
+207a0000
+da604686
+da403ab3
+2020375c
+5800012c
+67e14686
+70469b00
+20600000
+efe08006
+c0003ac1
+c000bac5
+c0013ac9
+20600000
+efe08006
+c0003acd
+c0013ad1
+c000bad5
+20600000
+6848c68c
+20406eed
+6848c68d
+20206eed
+6848c68c
+20406ef1
+6848c68d
+20206eed
+6848c68c
+20406eed
+6848c68d
+20206ef1
+6848c68e
+20406eed
+6848c68f
+20206eed
+6848c68e
+20406ef1
+6848c68f
+20206eed
+6848c68e
+20406eed
+6848c68f
+20206ef1
+6fe0c69a
+203a2ad1
+20202acc
+6fe0c69c
+207a0000
+202023a5
+20407384
+4499c006
+6fe0c666
+205a23a9
+20403b97
+20758000
+2040711d
+58003bec
+67e143e4
+58003ca4
+67e143ec
+20403ba5
+20403bc3
+20403bcc
+20203be0
+7041410a
+7045cf84
+7045ce84
+58ffffff
+67e1c655
+704658ff
+58000000
+67e1c2dd
+58220101
+67e1c2e0
+58858c0c
+67e1c659
+70465c05
+7046490d
+70466112
+58241404
+67e1c5aa
+7045ad34
+7041480c
+58643f35
+67e1c0c3
+583b2f8f
+67e1c0c6
+7040a720
+7040c900
+7040ca08
+7040cbb4
+70409918
+70411c3e
+58050e08
+67e1c160
+58000003
+67e14163
+70416a20
+704143ff
+58000c00
+67e1409a
+58000004
+67e1c144
+70414708
+70444fa0
+580002bc
+67e14452
+58000190
+67e14450
+70445403
+70445509
+704149ff
+58004149
+67e1409c
+20406b28
+da20488d
+da401f00
+df20003c
+20406b62
+20406b25
+6fe0c88d
+245a3b5f
+6fe1c88e
+245a3b61
+6fe1c891
+245a3b63
+6fe0c894
+245a3b65
+6fe0c895
+245a3b67
+6fe0c896
+245a3b69
+6fe0c897
+245a3b6b
+6fe0c898
+245a3b6d
+6fe0c899
+245a3b6f
+6fe2c89a
+245a3b71
+6fe0c89f
+245a3b73
+6fe0c8a0
+245a3b75
+6fe148a1
+245a3b77
+6fe1c8a3
+245a3b79
+6fe0c8a6
+245a3b7b
+6fe0c8a7
+245a3b7d
+6fe148a8
+245a3b7f
+6fe148aa
+245a3b81
+6fe0c8ac
+245a3b83
+6fe0c8ad
+245a3b85
+6fe0c8b2
+245a3b87
+6fe0c8b3
+245a3b89
+6fe0c8b4
+245a3b8b
+6fe248b5
+245a3b8d
+6fe0c8b9
+245a3b8f
+6fe0c8ba
+245a3b91
+6fe248bb
+245a3b93
+6fe248bf
+245a3b95
+20600000
+67e0c148
+20600000
+67e1c0c3
+20600000
+67e1c0c6
+20600000
+67e0c0a7
+20600000
+67e0c0c9
+20600000
+67e0c0ca
+20600000
+67e0c0cb
+20600000
+67e0c099
+20600000
+67e0c11c
+20600000
+67e2c160
+20600000
+67e0c16a
+20600000
+67e0c143
+20600000
+67e1409a
+20600000
+67e1c144
+20600000
+67e0c147
+20600000
+67e0c44f
+20600000
+67e14452
+20600000
+67e14450
+20600000
+67e0c454
+20600000
+67e0c455
+20600000
+67e0c141
+20600000
+67e0c5cf
+20600000
+67e0c5ce
+20600000
+67e24659
+20600000
+67e0c661
+20600000
+67e0c649
+20600000
+67e245a6
+20600000
+67e245aa
+20600000
+6fe0c666
+c0003b9b
+c000bba0
+20600000
+58000000
+67e1464b
+5800012c
+67e1464d
+20600000
+58000000
+67e1464b
+5800000f
+67e1464d
+20600000
+20406b28
+da20464f
+da401fda
+df200006
+20406b62
+20406b25
+6fe3464f
+207a0000
+6fe1464f
+67e142dd
+6fe0c652
+67e0c2df
+6fe0c654
+67e0c2e0
+6fe0c650
+1fe67c1a
+24610000
+6fe0c651
+207a0000
+180a7e00
+1fe17e07
+1fe3fe00
+1ff27e00
+6848c650
+9840fe00
+67e0c2de
+da2042de
+da401fdb
+df200001
+20206b33
+da2042dd
+da404655
+df200004
+20407d66
+24628000
+6fe0c2dd
+1fe0ffff
+67e0c2dd
+20600000
+df200004
+da6045a6
+da4000ae
+20403bd3
+1a60a601
+c2003bcf
+20600000
+da200001
+1a43a400
+2a4ffe07
+2040bbdb
+1a23a200
+1a227e00
+c3840000
+20203bd4
+efe08013
+9a22fe00
+e7e08013
+1a42a411
+20600000
+d8400000
+d8c0465a
+df200002
+efe08006
+793ffe07
+1fe20e00
+58000000
+f9207e00
+98408400
+c2003be3
+604a4644
+20600000
+449a4006
+6fe14663
+1fe0fe01
+67e14663
+1feb7e00
+20403bf7
+20403c32
+6fe0c666
+c0003c0b
+c000bc45
+20600000
+c0003bfc
+c000bbff
+c0013c02
+c001bc05
+20203c08
+6fe0c5aa
+67e0c5a4
+20600000
+6fe0c5ab
+67e0c5a4
+20600000
+6fe0c5ac
+67e0c5a4
+20600000
+6fe0c5ad
+67e0c5a4
+20600000
+58000000
+67e14663
+20600000
+70466baa
+6fe242dd
+67e2466c
+20203c0f
+793f8027
+58002ee0
+67e145a2
+6fe3c66b
+67e3c530
+6fe2c672
+67e2c537
+df20000c
+dfe00000
+d8c04530
+20407dd0
+e7e08005
+5800000c
+1fe0fe01
+67e0c59f
+20203c1f
+6fe0c5cf
+20402579
+20403217
+70003588
+204031c4
+2040362a
+20403162
+6fe0c596
+c000bc2b
+2437bc2b
+242c3c2b
+20403c30
+180a7e00
+d84001ff
+98417e00
+1fe0fefa
+20207c93
+70466001
+20600000
+6fe0c660
+207a0000
+70466000
+6fe0c510
+c05dbc38
+20600000
+6fe0c666
+247a0000
+da204515
+da4042dd
+df200004
+20407d66
+24628000
+204023a5
+70466601
+6fe24511
+67e24667
+67e24670
+20203ba0
+449ac006
+6fe0c665
+1fe0fe01
+67e0c665
+70466b00
+58000000
+67e1c674
+70466bcc
+20403c52
+20403c83
+6fe0c665
+c0643c8a
+20203c0f
+6848c661
+20406eed
+20403c66
+20403c58
+6848c661
+20206f0b
+6848c65c
+20406eed
+6848c65c
+20406ed7
+20406ee0
+2020bc7d
+6848c65c
+20406ef1
+200004b0
+6848c65b
+20406ed7
+20406ee0
+2020bc7a
+20600000
+6848c659
+20406eed
+6848c659
+20406ed7
+20406ee0
+2020bc74
+6848c659
+20406ef1
+200004b0
+6848c65a
+20406ed7
+20406ee0
+2020bc77
+20600000
+70467401
+70466500
+20600000
+70467402
+70466500
+20600000
+70467501
+70466500
+20600000
+70467502
+70466500
+20600000
+70467601
+70466500
+20600000
+6fe1c674
+203a3c99
+58000000
+67e1464b
+5800000f
+67e1464d
+20203c96
+6fe0c665
+1fe0ffff
+67e0c665
+20600000
+6fe0c666
+c1008000
+6fe0c64a
+1fe0fe01
+67e0c64a
+c0013c96
+c0023c98
+20600000
+6848c649
+20206eed
+70464a00
+6848c649
+20206ef1
+6fe1464d
+207a0000
+6849464b
+9842fe00
+205a3ca6
+6fe1464b
+1fe0fe01
+67e1464b
+20600000
+20403c8e
+20203c9b
+204023a5
+20403cab
+20403cc2
+d85fffff
+20202406
+df200018
+70464800
+6848c648
+18420e00
+6fe24644
+afefffff
+2020bcb3
+18418480
+20406ed7
+6fe0c648
+1fe0fe01
+67e0c648
+c2003cad
+20600000
+58000030
+18a20c00
+e8408006
+9840fe00
+e7e08005
+d8a00016
+d8c0465b
+c2003cc7
+20600000
+58000000
+67e60016
+d8a00016
+d8c0465a
+df200002
+efe08006
+793ffe07
+1fe6fc02
+20407d64
+1807fe00
+98a08a00
+18077e00
+243a3cb9
+58000003
+20203cba
+58003d04
+67e145f7
+58003dfe
+67e145fb
+58003e0f
+67e145fd
+58003dd0
+67e145f9
+58003d13
+67e10837
+20207902
+449b4006
+20403d09
+20403cff
+6fe0c680
+2feffe05
+2020bce5
+6fe0c680
+2feffe06
+2040b24a
+6fe0c6ad
+67e0c141
+7045e9ff
+5800097d
+67e14657
+58000a7d
+67e14659
+58000b7d
+67e1465b
+58000c7d
+67e1465d
+7045e885
+7046ab00
+70464200
+20403260
+6fe0c680
+2feffe03
+2040b263
+20403378
+20403266
+2040323a
+6fe0c68a
+67e08839
+6fe4c681
+67e4883a
+20600000
+70409918
+6fe0c680
+c4038000
+70409910
+20600000
+6fe0c627
+c0003dc0
+c000bd3d
+c007bd39
+20600000
+449bc006
+da401fdf
+da20465f
+df200001
+20206b62
+449c4007
+df200001
+da20465f
+da401fdf
+20206b33
+6fe0c680
+c2823d17
+6fe0c65f
+c0ad3d1b
+70465f5a
+6ff21404
+79207e1d
+67e20792
+449cc007
+20403d33
+20407956
+20403d20
+20203d29
+6fe0883a
+207a0000
+6fe0c65f
+c02d3d27
+6fe2083b
+67e20792
+20600000
+6fe2083f
+20203d25
+6fe0c65f
+c02d3d2f
+580092aa
+67e10785
+7007b61a
+20600000
+580092c5
+67e10785
+7007b641
+20600000
+6fe0c68b
+207a0000
+d8c0468b
+d8a007fb
+df200020
+20207cdc
+20403436
+20403dc8
+20403d8e
+20203d3a
+20403436
+20403dc8
+2040343f
+20403d8e
+20203d3e
+449d4007
+20403d48
+20403d57
+20403d67
+20403d81
+20203d74
+6fe0c67f
+207a0000
+d8e0000d
+20407cf1
+247a0000
+70467f00
+58000001
+67e088f1
+58000000
+e7e38005
+7008ea20
+6fe088eb
+79207e02
+67e088eb
+20600000
+6fe0c67c
+207a0000
+d8e0000e
+20407cf1
+247a0000
+70467c00
+d8a00901
+20407c9b
+6fe40901
+67e44668
+70090100
+7008e910
+6fe088eb
+79207e01
+67e088eb
+20600000
+6fe0c67e
+207a0000
+d8e0000a
+20407cf1
+247a0000
+70467e00
+d8a00929
+20407c9b
+70092902
+6fe10929
+67e14676
+7008ea22
+20203d53
+6fe0c67d
+207a0000
+d8e0000c
+20407cf1
+247a0000
+70467d00
+d8a00921
+20407c9b
+70092103
+6fe18921
+67e1c673
+7008ea21
+20203d53
+6fe0c6ae
+207a0000
+d8e00006
+20407cf1
+247a0000
+7046ae00
+d8a00921
+20407c9b
+70092105
+6fe20921
+67e246b3
+7008ea23
+20203d53
+449dc007
+6fe088df
+205a3dda
+204078f6
+6fe088d5
+207a0000
+7008d500
+6fe108d3
+d84002ba
+98467c00
+24628000
+6fe08853
+c1dd0000
+6fe08854
+c0503da3
+c050bda9
+c0533db5
+c053bdb7
+c054bdbd
+7008d600
+20600000
+6fe08855
+c040bda6
+20203da1
+204032da
+7008d601
+20600000
+6fe08855
+c000bdae
+c0423db1
+c053bdb3
+20203da1
+6fe0c5ec
+67e08894
+20203da7
+20403437
+20203dae
+700894a1
+20203da7
+70089415
+20203da7
+6fe0c62d
+c0003dbb
+c000bdb3
+20600000
+700894a0
+20203da7
+6fe246b7
+67e20894
+20203da7
+204033d8
+204033dd
+20403403
+20403dc8
+2040343f
+2040345e
+20403d8e
+20203dc1
+449e4007
+6fe0c62d
+c1800000
+2040343a
+20403d42
+6fe0c627
+247a0000
+202034e0
+6fe0c5a0
+c000bdd3
+c0013ddc
+6fe0c6ac
+c2803de2
+20203dde
+6fe0c3cf
+c1820000
+7046ac03
+20600000
+7046ac00
+20600000
+6fe0c6ac
+c280bde6
+6fe0c628
+c000bded
+c001bdf6
+20600000
+6fe0c6ac
+793ffe00
+67e0c6ac
+20203de9
+6fe0c6ac
+793ffe01
+67e0c6ac
+70459f01
+580000ff
+67e0c530
+20600000
+449ec007
+70462801
+6fe0c62d
+c1000000
+6fe0c627
+247a0000
+2040335b
+24778000
+202032e8
+6fe0c510
+c000b2e8
+c07fb2e8
+7008d700
+70459f01
+6fe0c638
+67e0c530
+20600000
+58000001
+67e088f1
+6fe3c602
+e7e38005
+6fe0c602
+245a3e07
+6fe0c602
+205a3e0b
+20203d52
+70467f01
+58000180
+d8e0000d
+20207ce3
+70467f00
+58000000
+d8e0000d
+20207ce3
+6fe0c602
+c0003e15
+c0013e60
+c001be30
+c002be48
+20203397
+6fe0c604
+67e0c628
+70460400
+d8a00901
+d8c04603
+df200008
+20407cdc
+6fe40901
+245a3e28
+6fe40901
+205a3e2c
+6fe40901
+67e44660
+684c4668
+98467c00
+2442bd62
+6fe44660
+67e44668
+20203397
+70467c01
+58000180
+d8e0000e
+20207ce3
+70467c00
+58000000
+d8e0000e
+20207ce3
+d8a00921
+d8c04602
+df200003
+20407cdc
+6fe10922
+245a3e40
+6fe10922
+205a3e44
+6fe18921
+67e1c670
+6849c673
+98467c00
+2442bd7f
+6fe1c670
+67e1c673
+20203397
+70467d01
+58000180
+d8e0000c
+20207ce3
+70467d00
+58000000
+d8e0000c
+20207ce3
+d8a00921
+d8c04602
+df200004
+20407cdc
+6fe18922
+245a3e58
+6fe18922
+205a3e5c
+6fe18922
+67e1c6af
+6849c6b3
+98467c00
+2442bd8c
+6fe1c6af
+67e1c6b3
+20203397
+7046ae01
+58000180
+d8e00006
+20207ce3
+7046ae00
+58000000
+d8e00006
+20207ce3
+d8a00929
+d8c04602
+df200002
+20407cdc
+6fe10929
+245a3e70
+6fe10929
+205a3e74
+6fe10929
+67e14676
+68494679
+98467c00
+2442be78
+6fe14676
+67e14679
+20203397
+70467e01
+58000180
+d8e0000a
+20207ce3
+70467e00
+58000000
+d8e0000a
+20207ce3
+7008ea22
+20203d53
+6fe0c3cf
+c1820000
+6fe0c65f
+c12d0000
+7046ab01
+20600000
+6fe0c3cf
+c1820000
+6fe0c6ab
+207a0000
+70065600
+70465f5a
+20403d0e
+20403d09
+6fe08656
+1fe0fe01
+67e08656
+c07fec99
+6fe0c65f
+c0ad3e85
+20206c99
+20403e9a
+24342002
+6fe0c88d
+203a2002
+6fe0c90f
+c17f8000
+1fe20e00
+6fe2067b
+afec0000
+2040c69b
+20202003
+78547c00
+6fe4488e
+c3044e1b
+6ff08132
+c2824e1b
+78347c00
+20204e1b
+204067ff
+20403ea5
+20403eaa
+20203266
+70409910
+6fe4488e
+c3848000
+70409918
+20600000
+20403260
+6fe4488e
+c40a0000
+20203263
+20407384
+20403ebd
+20403ef9
+204040eb
+20406f4e
+20758000
+2040404e
+6fe0c678
+c00249d7
+6fe14500
+c28648c5
+70489600
+204042e3
+70489601
+2020430e
+20758000
+204035c8
+2040323a
+20403edb
+20404161
+20404203
+204041b7
+20402a1f
+449f4007
+6fe4488e
+c287bf31
+c2873f96
+c2863fd5
+20600000
+58009000
+67e142f9
+6fe4488e
+c291e80c
+580095b8
+67e148d6
+6fe4488e
+c290680c
+c290e80c
+580094fc
+67e148d6
+6fe4488e
+c291680c
+5800944a
+67e148d6
+2020680c
+20403ef4
+20403ecb
+20404093
+6fe0cac1
+67e0cac2
+7049a000
+d8a0475f
+df200014
+20407ca3
+6fe0c26d
+1fe67c0c
+24213ef2
+5806ff06
+67e1c75f
+58000300
+e7e18005
+58000080
+e7e08005
+6fe0c26d
+1fe0fe01
+1fe27200
+d8c0436d
+20207cdc
+d8a0475f
+20203eed
+d8400000
+6fe4488e
+c287e81d
+d85fffff
+2020681d
+20407de6
+6848c90f
+20404f0a
+6fe4488e
+2feffe0a
+2040a3a5
+5800491f
+67e14948
+58004927
+67e1494a
+5800493c
+67e1494c
+20403f0f
+6fe1494a
+1fe22400
+df200014
+e8408012
+284ffe07
+2440ef0b
+1a40a401
+c2003f09
+20600000
+6fe14948
+1fe22400
+df200008
+e8408012
+18467cff
+2442bf18
+1a40a401
+c2003f12
+202023e1
+20406f0b
+e8408012
+20206ec0
+d8c08070
+df200010
+efe08006
+243a3f22
+58000040
+18c08bff
+e7e08005
+c2003f1d
+dfe080dc
+98c67c00
+20628000
+df200008
+d8c080d4
+20203f1d
+6fe0c9a0
+203a6eac
+20206ea5
+6fe14abd
+68494abf
+98467c00
+24610000
+2020233e
+6fe0c678
+c0003f35
+c000bf3f
+20600000
+db000008
+6fe14abf
+9b06fc00
+20407d64
+1807fe00
+67e1064e
+dfe01fbc
+d8400004
+dd600004
+20203f49
+db000020
+6fe14abf
+9b06fc00
+20407d64
+1807fe00
+67e1064e
+dfe01fb0
+d8400010
+dd600010
+20203f49
+67e10650
+60488656
+da204aa5
+da600000
+6fe10650
+1fe22400
+6f208656
+da204aa5
+20406b62
+6fe44aa5
+684c4aad
+9841fe00
+684c4ab5
+9841fe00
+203a3f5f
+1a60a601
+6fe1064e
+9a667c00
+6fe10650
+9b067e00
+67e10650
+20203f4d
+1a667c00
+2022bf72
+6fe10650
+9b00fe00
+9d667e00
+67e10650
+6fe10650
+1fe22400
+6f208656
+da204aa5
+20406b62
+6fe44aa5
+684c4aad
+9841fe00
+684c4ab5
+9841fe00
+203a3f74
+6fe10650
+20203f63
+6560cabd
+20600000
+58001fc0
+68490650
+98467e00
+67e14abd
+18427e00
+9d60a400
+6f208656
+da204aa5
+20406b62
+6fe0c678
+c0003f81
+c000bf87
+20600000
+6fe34aa5
+67e246a3
+6fe246a3
+67e245ff
+67e245a6
+20600000
+6fe0caa5
+1fe67c03
+24417dcc
+67e0caa1
+6fe0caa6
+67e0c679
+6fe34aa7
+67e3467a
+6fe34aad
+67e34680
+68494ab3
+180a7e00
+9840fe00
+67e146a7
+202067d5
+6fe4488e
+c31ebf9d
+6848c440
+20404f0a
+6848c440
+20406ee0
+2020bf96
+20404049
+d8400080
+da204678
+da400000
+20406cd7
+449fc007
+20403fc6
+6fe0c678
+c0003faa
+c000bfb0
+c0013fbb
+c001bfbf
+c0023fc3
+704aa100
+6fe0c6a9
+1fe67c01
+2442fdcc
+67e0ca93
+20600000
+6fe0c6aa
+20403fac
+6fe0c6ae
+1fe67c03
+24417dcc
+67e0caa1
+684946a7
+180a7e00
+9840fe00
+67e146a7
+20600000
+6fe0c6ab
+20403fac
+6fe0c6af
+20203fb5
+6fe0c6ac
+20403fac
+6fe0c6b0
+20203fb5
+704aa100
+6fe0c6ad
+20203fac
+6fe146a0
+d840aa55
+98467c00
+2022e7cf
+604946a0
+204067f8
+6fe0c717
+67e0c678
+6fe245fb
+67e245ff
+67e245a6
+6fe0caa2
+79207e00
+67e0caa2
+20203fd7
+204067b6
+20203fa2
+44a04008
+6fe4488e
+c287bfdd
+c2874004
+c28667bb
+20600000
+6fe0c678
+c0003fe1
+c000bfeb
+20600000
+68494abd
+58001fc0
+98462400
+da2046a3
+df200004
+20406b33
+68494abd
+18408404
+60494abd
+20600000
+704aa301
+6fe0caa4
+207a0000
+68494abd
+58001fc0
+98467e00
+67e1064e
+1fe22400
+da204aa1
+df200001
+20406b33
+6fe1064e
+1fe0a401
+da204679
+df20000d
+20406b33
+6fe1064e
+1fe0a40e
+da2046a7
+df200002
+20406b33
+68494abd
+18408410
+60494abd
+20600000
+6fe4488e
+c31ec00b
+6848c440
+20404f0a
+6848c440
+20406ee0
+2020c4b9
+20404049
+6fe0caa2
+c2804014
+c280c019
+c2814025
+c281c02d
+c2824035
+c282c03d
+20600000
+704aa200
+d8400080
+da204678
+da400000
+20206cc9
+6fe0caa2
+793ffe01
+67e0caa2
+d8400027
+da204679
+da400001
+20406cc9
+d8400002
+da2046a7
+da40002f
+20406cc9
+2020400c
+6fe0caa2
+793ffe02
+67e0caa2
+d8400004
+da2046a3
+da40002b
+20406cc9
+2020400c
+6fe0caa2
+793ffe03
+67e0caa2
+d8400005
+da2046a9
+da400031
+20406cc9
+2020400c
+6fe0caa2
+793ffe04
+67e0caa2
+d8400003
+da2046ae
+da400036
+20406cc9
+2020400c
+6fe0caa2
+793ffe05
+67e0caa2
+d8400004
+da2046b1
+da400039
+20406cc9
+2020400c
+d8400001
+da204678
+da400000
+20206cc9
+20406cb2
+6fe4488e
+2feffe0d
+2020ecb7
+20206cba
+44a0c008
+580068c4
+67e143f2
+58004862
+67e14609
+58004871
+67e1460b
+5800478f
+67e1460d
+58004875
+67e143e2
+580047aa
+67e143e0
+58004066
+67e143e6
+580042dd
+67e143e4
+580047ac
+67e143de
+58005420
+67e143e8
+58004075
+67e143ec
+202068cb
+44a14008
+1a627e00
+c01948b3
+c02048bb
+c00ac8a2
+c00a4893
+c00848c0
+c018d406
+c014d408
+c01f379e
+c0225428
+c01cc7b8
+c01e47ca
+c01d47e6
+20600000
+44a1c008
+204040e0
+204040cc
+204040dd
+20404100
+20404186
+204041ab
+20404131
+2040413e
+20404146
+20404267
+2040428f
+204042c4
+2040326c
+20403507
+204058f6
+204042b5
+204042bf
+20404299
+204042a4
+2040550d
+204042ad
+20405510
+204042b2
+204042a1
+20405527
+2040429e
+204042c9
+204042cc
+202042d5
+44a24008
+6fe0c8b1
+c0004098
+c000c09d
+c00140a2
+58560094
+67e1c8ab
+58006d00
+e7e18005
+20600000
+58d4012c
+67e1c8ab
+5800e600
+e7e18005
+20600000
+5ac01270
+67e1c8ab
+58014001
+e7e18005
+20600000
+204040a9
+202040e0
+6fe0c41d
+c1810000
+6fe0c41e
+204040b2
+18427e00
+67e0c64c
+79207e07
+d8400000
+20206f1c
+d8400012
+c1030000
+d840000a
+c1038000
+d8400009
+c1040000
+d840000c
+c1048000
+d8400006
+c1050000
+d8400014
+c1058000
+d8400015
+c1060000
+d8400016
+c1068000
+d840000d
+20600000
+204040a7
+20406fb2
+20406f8e
+1fe6fc0a
+20407d61
+67e1464a
+da204644
+20204ec4
+6fe4488e
+c4058000
+204040c4
+6fe0c422
+c280c7af
+c30040d6
+70464e01
+202040d4
+d8e00002
+20204a25
+d8e00002
+20404a29
+704ac60c
+6fe0c64e
+207a0000
+70464e00
+20204184
+6fe4488e
+c4058000
+20204e5e
+6fe348ab
+67e34644
+6fe0c64e
+203a40e8
+6fe148af
+1fe0fe05
+67e14648
+20600000
+6fe148af
+67e14648
+20600000
+6fe0c678
+c08040f3
+204035d3
+585d4800
+67e2462a
+6fe0c422
+c4000000
+202058fc
+580000a0
+204040f9
+6fe0c422
+c4000000
+58000050
+202040f9
+684942d5
+9846fc00
+20407d61
+67e0c88b
+6fe0c73e
+203a552a
+20600000
+704acb00
+6fe14750
+247a0000
+6fe145ef
+247a0000
+6fe145f5
+247a0000
+6fe0cac2
+247a0000
+6fe4488e
+c4058000
+c4148000
+c4010000
+c295411b
+44a2c008
+6fe0cac6
+1fe0fe01
+67e0cac6
+1fe67c14
+24414119
+c0014182
+c0024184
+c0034182
+c0044184
+20600000
+704ac601
+20204184
+6fe1471e
+68494741
+98460400
+6fe14ac7
+98467c00
+24214184
+704acb01
+6fe0cac9
+1fe0fe01
+67e0cac9
+6848caca
+18408401
+98467c00
+24214182
+20404184
+6fe0cac9
+6848caca
+184f8402
+98467c00
+24628000
+704ac900
+20600000
+6fe0cac2
+207a0000
+1fe0ffff
+67e0cac2
+6fe4488e
+c2944139
+203a4166
+2020416c
+203a413c
+6848c916
+20206ef1
+6848c916
+20206eed
+6fe14741
+207a0000
+6fe0cac5
+207a0000
+1fe0ffff
+67e0cac5
+c280416c
+20204166
+6fe0c678
+c000414b
+6fe14750
+207a0000
+2020414d
+6fe145ef
+207a0000
+6fe4488e
+2fec0028
+2040c15f
+6fe0cacc
+1fe0fe01
+67e0cacc
+6848cacd
+18408401
+98467c00
+2421416c
+20404166
+6fe0cacc
+6848cacd
+184f8402
+98467c00
+24628000
+704acc00
+20600000
+704ac200
+20600000
+44a34008
+2040413c
+20404166
+2040419d
+202041a3
+6fe0c678
+c0004172
+c000c174
+c0014176
+c001c178
+20600000
+6fe0c678
+c000417a
+c000c17c
+c001417e
+c001c180
+20600000
+6848c918
+20206eed
+6848c919
+20206eed
+6848c91a
+20206eed
+6848c91b
+20206eed
+6848c918
+20206ef1
+6848c919
+20206ef1
+6848c91a
+20206ef1
+6848c91b
+20206ef1
+6848c917
+20206ef1
+6848c917
+20206eed
+6fe0cace
+c02d4193
+6fe14741
+207a0000
+6fe1471e
+68494741
+98460400
+6fe14ac3
+98467e00
+20214196
+2040419d
+204041a9
+202041a3
+6fe0c638
+67e0c70d
+20204196
+20404199
+204041a5
+2020419f
+6fe0c70d
+c300419d
+6848c913
+20206ef1
+6848c913
+20206eed
+6fe0c70d
+c300c1a3
+6848c914
+20206ef1
+6848c914
+20206eed
+6fe0c70d
+c30141a9
+6848c915
+20206ef1
+6848c915
+20206eed
+6fe4488e
+c4158000
+6fe14741
+207a0000
+6fe1471e
+68494741
+98460400
+6fe148c2
+98467e00
+20610000
+7046b100
+20204203
+6fe4488e
+c4158000
+da200000
+204070b9
+6fe348b2
+67e3064e
+204070ca
+6fe148b2
+20207103
+6fe0c91c
+20407103
+6fe0c91d
+20407103
+6fe0c91e
+20207103
+6fe348b2
+67e3064e
+202070ca
+44a3c008
+6fe4488e
+c4158000
+6fe0c6b1
+204041de
+6fe0c6b2
+202041ef
+6fe4488e
+c4158000
+204044ca
+6fe0c9ab
+c4000000
+6fe0caa2
+79207e05
+67e0caa2
+204044b7
+7048ca00
+7048b800
+7048b70a
+6fe0c6b1
+1fe0fe01
+1fe67c02
+24417dcc
+67e0c6b1
+20600000
+6fe4488e
+c4158000
+204044ca
+6fe0c9ab
+c4000000
+6fe0c6b1
+c1808000
+6fe0caa2
+79207e05
+67e0caa2
+204044b7
+6fe0c6b2
+1fe0fe01
+1fe67c06
+24417dcc
+67e0c6b2
+20600000
+6fe4488e
+c4158000
+684a48c4
+1c427e00
+98467e00
+684948c8
+9846fc00
+20407d64
+1807fe00
+207a0000
+1c420400
+604a48c4
+6fe0c6b1
+c0014209
+c000c244
+7046b100
+44a44009
+6fe4488e
+c4158000
+204041c0
+7048b900
+2020424e
+6fe0c8b8
+203a4211
+6fe0c8b7
+1fe67c05
+2021421a
+1fe0ffff
+67e0c8b7
+20204221
+6fe0c8b7
+1fe0fe01
+67e0c8b7
+20404221
+6fe0c8b7
+1fe67c5a
+20610000
+7048b801
+20600000
+7048b800
+6fe0c8ca
+1fe0fe01
+1fe67c06
+24417dcc
+67e0c8ca
+20600000
+204041b7
+20404207
+20204224
+6fe0c8ca
+c001422c
+c000c231
+c0004236
+c001c23b
+c002c23d
+c002423f
+c0034241
+6fe0c91c
+67e0c8b2
+58000001
+67e0c8b3
+202041c6
+6fe0c91d
+67e0c8b2
+58000002
+67e0c8b3
+202041c6
+6fe0c91e
+67e0c8b2
+58000004
+67e0c8b3
+202041c6
+20404231
+20204236
+2040422c
+20204231
+2040422c
+20204236
+2040422c
+20404231
+20204236
+204041c0
+6fe0c6b2
+1fe67c06
+24417dcc
+67e0c6b2
+d8c048ba
+98c08c00
+efe08006
+67e0c8b9
+2020424e
+6fe0c8b9
+2feffe02
+2040c25b
+2440c25d
+6fe0c8b9
+2feffe01
+2040c25f
+2440c261
+6fe0c8b9
+2feffe00
+2040c263
+2440c265
+20600000
+6848c91c
+20206eed
+6848c91c
+20206ef1
+6848c91d
+20206eed
+6848c91d
+20206ef1
+6848c91e
+20206eed
+6848c91e
+20206ef1
+6fe0c8a6
+c280426d
+20404278
+6fe0c8a6
+c280c27e
+20204289
+6fe0c8a9
+1fe67c64
+24610000
+1fe0fe01
+67e0c8a9
+c18c8000
+7048a700
+6fe0c678
+c1020000
+204048e6
+20204680
+7048a900
+6fe0c8a7
+207a0000
+7048a700
+20404045
+20206c99
+6fe0c8aa
+1fe67c64
+24610000
+1fe0fe01
+67e0c8aa
+c18c8000
+7048a800
+6fe0c678
+c1020000
+20406824
+20204675
+7048aa00
+6fe0c8a8
+207a0000
+7048a800
+20404045
+20206c99
+6fe0c735
+c1808000
+da604736
+da404294
+20203755
+6fe0ca9b
+c000c680
+c0014675
+c001d3ad
+20600000
+da604750
+da40429c
+2020375c
+204048e9
+202047af
+da604705
+da403fd7
+20203755
+da60490e
+da4048fd
+20203755
+da604720
+da4042aa
+20403755
+6fe0c720
+c000b788
+20600000
+6fe4488e
+c28d48c5
+20204e35
+6fe4488e
+c38c8000
+da60477f
+da40551f
+20203755
+da60490d
+da405408
+20203755
+6fe0ca80
+207a0000
+704a8000
+6fe0c9a0
+247a0000
+6fe145ef
+247a0000
+7049a901
+204035fd
+20204828
+da604a82
+da4042c2
+20203755
+704a8100
+20600000
+da6049a3
+da4042c7
+2020375c
+7049a001
+202047af
+da604a9f
+da404547
+20203755
+6fe4488e
+c4120000
+6fe0cad0
+207a0000
+1fe0ffff
+67e0cad0
+247a0000
+70409401
+202047af
+6fe0cace
+c12d0000
+da604741
+da4042da
+2020375c
+6fe0c678
+c00047fb
+202053c6
+44a4c009
+20404330
+204041f3
+204049fa
+204049ff
+202042e3
+44a54009
+6fe4488e
+c41c0000
+c29dc2f0
+c29e42f0
+6848c665
+20404f0a
+6848c665
+20406ee0
+2020c2fd
+6fe4488e
+c29cc302
+20204308
+6848c665
+20404f06
+6848c665
+20406ee0
+2420c2f8
+6fe4488e
+c29dc302
+20204308
+6848c665
+20404f0a
+6fe4488e
+c29dc308
+20204302
+6848c665
+20404f06
+6fe4488e
+c29cc308
+20204302
+6fe0c678
+c1008000
+70467801
+6fe0c896
+243a6c99
+202048e6
+6fe0c678
+c1000000
+70467800
+6fe0c896
+243a6c99
+20204804
+44a5c009
+6fe4488e
+c305c31a
+204040c4
+6fe14646
+1fe6fc02
+20407d61
+6849464a
+98467c00
+2021430e
+6fe0c422
+c280c7af
+6fe0ca7f
+205a4670
+6fe0ca7e
+247a0000
+6fe0c678
+c000432d
+204053c1
+c000c324
+c0014329
+c001c32b
+6fe3467a
+684b46f8
+98467c00
+2022d3ad
+20204e09
+6fe34687
+20204325
+6fe34694
+20204325
+20403e9a
+20345988
+2020594d
+44a64009
+20404334
+204043b5
+202045b4
+20403ef9
+204043af
+58000000
+67e1499e
+d8c0494e
+d8a04963
+df200014
+20407cdc
+5800494e
+67e14998
+5800498d
+67e1499a
+204043ad
+204043ab
+6fe1499e
+1fe0fe01
+67e1499e
+c284c334
+6848c911
+20406ee0
+2420c342
+204043af
+6848c911
+20406ee0
+2020c34a
+20404372
+20404386
+204043ab
+204043ad
+6fe1494c
+1fe22400
+70499d00
+e8408012
+6fe1494a
+1fe22200
+1a222600
+df200014
+efe08011
+98467c00
+2022c366
+1a20a201
+c2004359
+1a40a401
+6fe0c99d
+1fe0fe01
+67e0c99d
+1fe67c0b
+20214354
+20403f1b
+20203f0f
+6fe14998
+1fe20a00
+1a227e00
+9a667e00
+98a08a00
+6fe1499a
+1fe22600
+6fe0c99d
+9a60a600
+efe08013
+e7e08005
+2020435e
+70499d00
+204043a9
+2040437a
+204043a7
+2040437a
+1fe67c0b
+20214373
+202043a9
+70499c00
+20404399
+6fe1499a
+1fe20a00
+6fe0c99d
+98a08a00
+6fe0c99c
+e7e08005
+6fe0c99d
+1fe0fe01
+67e0c99d
+20600000
+6fe1494a
+1fe22400
+70499d00
+70499c00
+e8408012
+284ffe07
+2020c393
+20406ef1
+20404399
+e8408012
+20406eed
+e8408012
+20404f0a
+1a40a401
+6fe14998
+2040437d
+1fe67c13
+20214389
+20600000
+44a6c009
+20000078
+6fe14948
+1fe22600
+df200008
+e8408013
+20406ee0
+6fe0c99c
+1fe37e00
+7920fe07
+67e0c99c
+1a60a601
+c200439e
+20600000
+6848c911
+20206eed
+6848c911
+20206ef1
+6848c911
+20206ed7
+6848c910
+20206eed
+6848c910
+20206ef1
+7049a000
+6fe149a1
+67e149a3
+20600000
+da20494e
+da404963
+df200014
+20407d66
+2422c3b1
+204043f1
+205a43b1
+204043fd
+6fe0c9a8
+247a0000
+6fe0ca9c
+c1008000
+c1010000
+c1020000
+70499d00
+da20494e
+da404978
+e8408011
+efe08012
+9842fe00
+203a43e9
+67e0c99c
+6048c9ab
+e0408012
+7049a901
+7049ac00
+6fe0c99c
+c30043de
+6fe0c99d
+1feffe08
+6848c9ac
+9840fe00
+d8c049c7
+98c08c00
+efe08006
+67e0c9aa
+44a74009
+2040442e
+20404435
+204044dc
+20404564
+6fe0c99c
+1fe37e00
+67e0c99c
+6fe0c9ab
+1fe37e00
+67e0c9ab
+6fe0c9ac
+1fe0fe01
+67e0c9ac
+1fe67c07
+202143cf
+1a20a201
+1a40a401
+6fe0c99d
+1fe0fe01
+67e0c99d
+1fe67c13
+202143c6
+20600000
+6fe4494e
+243a41c9
+6fe44956
+243a41c9
+6fe2495e
+243a41c9
+6fe0ca9f
+247a0000
+6fe0ca9c
+c1030000
+704a9c00
+20600000
+44a7c009
+7049a800
+7049a600
+da20494e
+df200014
+7049a500
+efe08011
+203a4429
+6848c9a5
+18408401
+6048c9a5
+1fe20400
+1fe0ffff
+98417e00
+2422c405
+6fe0c9a5
+6848c9a6
+98408400
+6048c9a6
+1fe67c01
+20214429
+18467c02
+20214429
+70499d00
+7049a700
+e8408011
+da40494e
+6fe0c99d
+1fe0fe01
+67e0c99d
+1fe67c13
+24214429
+efe08012
+98417c00
+2022c42c
+6fe0c9a7
+1fe0fe01
+67e0c9a7
+1fe67c01
+2021442c
+6fe4488e
+c3908000
+7049a801
+20600000
+1a20a201
+c2004402
+20600000
+1a40a401
+20204418
+6fe0c9aa
+c07341e2
+c073c1d0
+6fe0caa1
+c1000000
+c1008000
+20600000
+6fe0c9ab
+2feffe00
+2040c4f0
+6fe0ca7a
+245a445b
+6fe0c74f
+c17f8000
+6fe4488e
+c31a4440
+6fe0ca93
+20204441
+6fe0ca84
+6848ca7a
+9842fe00
+20628000
+44a8400a
+6fe0c9aa
+c014c451
+c0264459
+1fe67c45
+24610000
+d840003a
+98467e00
+24610000
+d8c04a86
+98c08c00
+efe08006
+202044aa
+6fe4488e
+c31a4457
+6fe0ca85
+6848ca94
+98467c00
+20628000
+6fe0ca85
+202044aa
+6fe0ca92
+202044aa
+44a8c00a
+20404468
+6fe0c9aa
+c029448d
+c028c491
+c0284495
+c027c499
+c070449d
+c01644a7
+c00a44ac
+c00d44bc
+c00444c3
+20600000
+6fe4488e
+c41a0000
+6fe0c9aa
+6848ca94
+98467c00
+24628000
+204044ca
+6fe0c9ab
+c4000000
+6fe0ca93
+1fe0fe01
+1fe17e01
+67e0ca93
+6fe0caa2
+79207e03
+67e0caa2
+6fe0c678
+c000447e
+c000c481
+c0014484
+c001c487
+c002448a
+6fe0ca93
+67e0c6a9
+202044b7
+6fe0ca93
+67e0c6aa
+202044b7
+6fe0ca93
+67e0c6ab
+202044b7
+6fe0ca93
+67e0c6ac
+202044b7
+6fe0ca93
+67e0c6ad
+202044b7
+6fe4488e
+c4180000
+5800004b
+202044aa
+6fe4488e
+c4180000
+5800004e
+202044aa
+6fe4488e
+c4180000
+5800004a
+202044aa
+6fe4488e
+c4180000
+5800004d
+202044aa
+6fe4488e
+c4188000
+6fe0c74f
+c17f8000
+6fe0caa1
+c00044a5
+580000f7
+202044aa
+580000aa
+202044aa
+6fe4488e
+c4190000
+580000ab
+67e0c9aa
+20600000
+6fe4488e
+c4198000
+204044ca
+6fe0c9ab
+c4000000
+704aa101
+704ac506
+204044cc
+6fe0caa2
+79207e04
+67e0caa2
+6fe4488e
+c3878000
+6fe0c706
+67e0c705
+20600000
+6fe4488e
+c4198000
+204044ca
+6fe0c9ab
+c4000000
+704aa100
+202044b2
+6fe4488e
+c4198000
+204044ca
+6fe0c9ab
+c4000000
+704aa102
+202044b2
+58000000
+202044aa
+44a9400a
+6fe0c678
+c1000000
+c1020000
+c000c4d3
+c00144d6
+c001c4d9
+6848caa1
+6048c6ae
+20600000
+6848caa1
+6048c6af
+20600000
+6848caa1
+6048c6b0
+20600000
+6fe0c9aa
+c02344f2
+c025c4f8
+c02744fe
+c0254500
+c026c502
+c052c504
+c053450b
+c053c50d
+c054450f
+c054c511
+c055451c
+c056c523
+c055c52a
+c0564535
+20600000
+6fe0c9ab
+c4000000
+704a9f0a
+20600000
+704a9f00
+20600000
+6fe0caa1
+c1000000
+c1008000
+704a9d0a
+704a9e20
+2020453e
+704a9e52
+6fe0caa1
+c1000000
+c1008000
+704a9d08
+2020453e
+704a9e51
+202044f9
+704a9e50
+202044f9
+704a9e4f
+202044f9
+704a9e04
+704a9d01
+6fe0caa1
+c000453e
+c000c53e
+704a9d08
+2020453e
+704a9e06
+20204505
+704a9e19
+20204505
+704a9e1b
+20204505
+6fe0caa1
+c0004516
+c001c519
+580000fa
+202044aa
+704a9d08
+704a9e0f
+2020453e
+704a9d09
+704a9e14
+2020453e
+6fe0caa1
+c0004520
+580000f7
+202044aa
+704a9d09
+704a9e12
+2020453e
+6fe0caa1
+c001c527
+580000f5
+202044aa
+704a9d08
+704a9e2c
+2020453e
+6fe0caa1
+c0004531
+c000c533
+704a9d01
+704a9e2c
+204044ec
+2020453e
+704a9d08
+2020452e
+704a9d02
+2020452e
+6fe0caa1
+c000453b
+c000c53b
+704a9d01
+704a9e52
+2020453e
+704a9d08
+704a9e2b
+2020453e
+7049aa00
+6fe0c9ab
+c3004545
+6fe0ca9c
+c001c551
+704a9c01
+20600000
+704a9c04
+20600000
+704a9c06
+20600000
+67e0ca70
+6048ca72
+20407dbc
+704a6f00
+202046e6
+6fe0ca9d
+d8400000
+20404549
+704a9c02
+20600000
+704a9c03
+6fe0ca9d
+6848ca9e
+20204549
+704a6f00
+6fe0ca9d
+d8400000
+20404549
+6fe0ca9f
+203a4547
+704a9c05
+20600000
+2020454b
+704a9c00
+dfe00000
+d8400000
+20204549
+6fe0c9aa
+d84000e0
+98467c00
+24214576
+1fe67ce7
+242145ad
+1fe17e07
+1fe20e00
+6fe0c9ab
+c2804572
+6fe0c9ad
+f93ffe00
+67e0c9ad
+20600000
+6fe0c9ad
+f9207e00
+67e0c9ad
+20600000
+7049b500
+6fe0c9ab
+c280458d
+6848c9aa
+df200006
+d8c049af
+efe08006
+98467c00
+2422c585
+efe08006
+18c08dfe
+e7e08006
+207a0000
+18c08c01
+e0408006
+c200457c
+6fe4488e
+c290c58a
+6fe4488e
+c4100000
+2040459f
+f93ffe00
+20207dce
+6848c9aa
+df200006
+d8c049af
+efe08006
+203a459c
+98467c00
+20628000
+c2004590
+6fe4488e
+c290c599
+6fe4488e
+c4100000
+2040459f
+f9207e00
+20207dce
+18c08dff
+e0408006
+20600000
+44a9c00a
+6fe0c9aa
+1fe67c70
+24610000
+7049b701
+7049a901
+1fe6fc08
+20407d64
+1807fe00
+18070e00
+d8a049b9
+98a08a00
+58000000
+20600000
+704aa001
+6fe0c9ab
+2fec0000
+2040c5b2
+20204576
+704aa002
+20600000
+20404660
+204045f2
+704a7a00
+704a7b00
+704a7c00
+704a7d00
+704a7e00
+6fe0c9ad
+245a468f
+d8c049af
+df200006
+efe08006
+1fe67c7f
+2042c699
+1fe67cae
+2042c69b
+c20045bf
+204045c9
+6fe0ca7f
+203a4670
+20600000
+44aa400a
+704a9b00
+6fe0c678
+c08045d7
+6fe4488e
+c4098000
+6fe149af
+68494a97
+98467c00
+2022c5e8
+18508400
+98467c00
+2022c5e8
+202054e6
+6fe149af
+68494a99
+98467c00
+2022c5ec
+18508400
+98467c00
+2022c5ec
+6fe4488e
+c30dd4e6
+6fe149af
+68494a95
+98467c00
+2022c5ea
+18508400
+98467c00
+2022c5ea
+202054e6
+704a9b01
+202045ee
+704a9b02
+202045ee
+704a9b03
+202045ee
+6fe0c735
+c1008000
+70473501
+20600000
+20407dbe
+20404600
+20404616
+20404627
+20404638
+2040464e
+203445fe
+6fe0c8a6
+793ffe00
+793ffe01
+67e0c8a6
+20600000
+7049a900
+20600000
+6fe4488e
+c4080000
+6fe0c897
+207a0000
+6fe149af
+68494898
+98467c00
+2022c60c
+18508400
+98467c00
+2022c60c
+20600000
+20407dbc
+6fe0c8a6
+79207e00
+793ffe01
+67e0c8a6
+6fe0c678
+c1000000
+70467800
+7048a701
+20600000
+6fe0c89a
+207a0000
+6fe149af
+6849489b
+98467c00
+2022c620
+18508400
+98467c00
+2022c620
+20600000
+20407dbc
+20404649
+6fe0c678
+c1008000
+70467801
+7048a801
+20600000
+6fe0c89d
+207a0000
+6fe149af
+6849489e
+98467c00
+2022c631
+18508400
+98467c00
+2022c631
+20600000
+20407dbc
+20404649
+6fe0c678
+c1010000
+70467802
+7048a801
+20600000
+6fe0c8a0
+207a0000
+6fe149af
+684948a1
+98467c00
+2022c642
+18508400
+98467c00
+2022c642
+20600000
+20407dbc
+20404649
+6fe0c678
+c1018000
+70467803
+7048a801
+20600000
+6fe0c8a6
+793ffe00
+79207e01
+67e0c8a6
+20600000
+6fe4488e
+c4120000
+6fe0c8a3
+207a0000
+6fe149af
+684948a4
+98467c00
+2022c65a
+18508400
+98467c00
+2022c65a
+20600000
+20407dbc
+6fe0c678
+c1020000
+70467804
+20404045
+20206c99
+6fe0ca7f
+247a0000
+6848c90f
+18467cff
+20628000
+20406ee0
+2420c66c
+df200008
+d8a049ad
+20407ca3
+7049afae
+20600000
+6fe0c9af
+c1d70000
+7049af00
+20600000
+44aac00a
+6fe0ca7e
+207a0000
+6fe0c678
+c0004680
+44ab400a
+20403f2c
+7049a900
+6fe0c678
+c1000000
+6fe4488e
+c3820000
+d8e00004
+20404a25
+20403745
+202048c0
+44abc00a
+20404161
+20403f2c
+7049a900
+6fe145ef
+247a0000
+58000000
+67e14741
+67e145f5
+67e0c5f9
+d8e00000
+20404a25
+204048e9
+7045a002
+2020326f
+67e0ca7b
+1fe17e44
+245a4697
+6fe0ca7b
+1fe17e22
+207a0000
+704a7d01
+20600000
+704a7c01
+20600000
+704a7a01
+20600000
+704a7e01
+20600000
+44ac400b
+78547c00
+70472b00
+70472c00
+70472d00
+6fe0ca9c
+c000c54e
+c0014553
+c001c553
+c0024557
+c0034560
+6fe0c9a9
+203a46ba
+1fe0ffff
+67e0c9a9
+204046b7
+704a820a
+20405535
+6fe0ca9c
+c002c55f
+d8a04a6f
+df20000a
+20407ca3
+204046ca
+704a7900
+20600000
+7040c003
+70473e0a
+20600000
+6fe0c678
+c1800000
+6fe0ca81
+207a0000
+6fe0ca80
+247a0000
+6848ca83
+6fe0ca82
+98467c00
+67e0ca83
+20628000
+d8a04a6f
+df20000a
+20407ca3
+20407dbc
+202046e6
+44acc00b
+6fe0caa0
+c001474b
+6fe0c9b7
+243a46ec
+d8c049af
+df200006
+efe08006
+1fe67ce7
+242146f5
+c20046d1
+6fe0c9a6
+205a46ef
+704a6f00
+44ad400b
+da2049ad
+d8a04a70
+df200008
+e8408011
+6fe0c74f
+c07fc6e3
+18467c7f
+2422c6e3
+1a20a201
+e8408011
+e0408005
+1a20a201
+c20046dc
+44adc00b
+20404756
+6fe0ca79
+c000fdbc
+2040522c
+20207dbc
+7049b700
+704a6f08
+202046e6
+d8a049b8
+df20000f
+20407ca3
+d8a049ad
+df20000a
+20207ca3
+1fe20400
+44ae400b
+18427e00
+704a6f05
+6848c9a6
+18467c00
+2022c74b
+c0744715
+c074c718
+c075471a
+c075c71c
+c076471e
+c076c720
+c0774722
+c077c724
+c0784726
+c078c728
+c079472a
+c079c72c
+c07a472e
+c07ac730
+c07b4732
+c07bc737
+c07c473d
+c07cc73f
+c07d4741
+c07dc743
+c07e4745
+c07ec747
+c07f4749
+c07fc752
+202046e6
+58000001
+67e1ca70
+202046e6
+58000002
+20204716
+58000004
+20204716
+58000008
+20204716
+58000010
+20204716
+58000020
+20204716
+58000040
+20204716
+58000080
+20204716
+58000100
+20204716
+58000200
+20204716
+58000400
+20204716
+58000800
+20204716
+58001000
+20204716
+58002000
+20204716
+6fe0caa1
+c0014726
+c001c726
+58004000
+20204716
+6fe0caa1
+c000c73b
+58010000
+20204716
+58008000
+20204716
+58020000
+20204716
+58040000
+20204716
+58080000
+20204716
+58100000
+20204716
+58200000
+20204716
+58400000
+20204716
+58800000
+20204716
+7049a902
+6fe0c9a6
+205a46ef
+704aa000
+58000005
+67e1ca6f
+202046e6
+704a6f02
+58000002
+67e0ca70
+202046e6
+6fe0c678
+c080475d
+704a8000
+6fe14a6f
+245a47e4
+6fe34a72
+245a47e4
+2040684b
+704a7900
+44aec00b
+6fe0ca6f
+c000476d
+c000c768
+c001c780
+c002c785
+c0014787
+c004478c
+20600000
+704a7901
+d8c04a70
+d8a0465c
+df200007
+20207cdc
+6fe0c678
+c0804772
+204047d9
+6fe0ca81
+67e0ca71
+6fe4488e
+c2914778
+d8c04a6f
+d8a04721
+df200009
+20207cdc
+704a7800
+6fe0ca7a
+203a477c
+704a7801
+d8c04a6f
+d8a04721
+df20000a
+20207cdc
+58000003
+67e0c721
+6fe1ca70
+67e1c722
+20600000
+58000005
+20204781
+58000002
+67e0c721
+6fe0ca70
+67e0c722
+20600000
+58000008
+67e0c721
+20600000
+44af400b
+20407de6
+6848c90f
+20406eac
+6fe1494a
+1fe22400
+df200014
+e8408012
+284ffe07
+2440eef1
+1a40a401
+c2004796
+20403f1b
+70488c00
+6fe14948
+1fe22400
+df200008
+e8408012
+18467cff
+2442bf29
+1a40a401
+c20047a0
+20406f4b
+6848c666
+20404f0a
+20404f0e
+202040dd
+c6130000
+2020478f
+44afc00b
+20407388
+202047b3
+44b0400c
+20404161
+204047b3
+2020379c
+44b0c00c
+20407de6
+20404161
+20404203
+2020478f
+204047e1
+20405535
+d8e00000
+20404a29
+58000000
+67e145ef
+67e145f5
+67e0c613
+67e0c8fd
+67e0c5f9
+6fe245a6
+67e245ff
+67e246a3
+204047d3
+6fe0caa2
+79207e02
+67e0caa2
+202044b9
+204047e1
+6fe245a6
+67e245ff
+67e246a3
+20403530
+204047d3
+70461300
+7045f900
+20205535
+6fe245a6
+684a45fb
+98467c00
+2422d3c1
+70474fff
+20600000
+df200006
+d8c04a72
+efe08006
+c029c7e1
+c01cc7e1
+c023c7e1
+c20047db
+20600000
+704a8103
+7049a901
+20600000
+704a8001
+20600000
+6fe0c617
+243a47fb
+6fe0c5f9
+c00147f3
+c000c7f3
+c001c7ed
+202047ed
+20404804
+6fe0c73f
+243a5836
+6fe0c678
+c00047af
+20600000
+6fe4488e
+c288d952
+c3095988
+6fe246a3
+684a46f8
+98467c00
+2022c680
+20205988
+44b1400c
+70461700
+20403620
+5fffffff
+67e445c6
+58000000
+67e3c65c
+70473701
+20204821
+793f8026
+70461300
+d8e00000
+20204a29
+6fe145f7
+1fe17ee0
+203a480f
+6fe145f7
+1fe0fe01
+67e145f7
+20600000
+20403557
+2040362a
+242c355e
+2437b55e
+204068bc
+20203540
+204035fd
+2434481a
+20404828
+20404855
+2020485b
+6fe4494e
+243a485b
+6fe44956
+243a485b
+6fe2495e
+243a485b
+2040367c
+20404848
+24740000
+2040369e
+6fe0c737
+245a47b3
+6fe445c6
+202035fa
+44b1c00c
+70461800
+69610040
+34730200
+2040362a
+6fe0c596
+c000b61f
+242c4834
+2437c834
+204068bc
+70473700
+2020361f
+6fe0c619
+247a0000
+6fe14615
+1fe0fe01
+67e14615
+6fe0c615
+c07fb64f
+6fe0c618
+1fe0fe01
+67e0c618
+1fe17e03
+203a4841
+2020482a
+20404330
+6fe0c8a6
+243a6c99
+6fe0ca9b
+243a361f
+20403675
+2020482a
+78347c00
+204023f0
+6fe1c0bd
+203a7dbe
+6fe0ca7a
+243a7dbe
+6fe0ca7b
+243a7dbe
+6fe0ca9f
+243a7dbe
+6fe0c62f
+c000fdbe
+20203699
+6fe245a6
+684a45fb
+98467c00
+2422b6c9
+704141aa
+20600000
+6fe44622
+67e445c6
+6fe14634
+67e14636
+44b2400c
+20404848
+202035f0
+c6930000
+2040469d
+24740000
+6fe0c72b
+243a4868
+202059c7
+7045a002
+6fe0c721
+c004486d
+da20000a
+20206852
+67e0c9b8
+da20000f
+da4049b8
+20600000
+44b2c00c
+6fe4488e
+c40a8000
+20206888
+44b3400c
+20402a06
+247a0000
+6fe0c74f
+c07fc87d
+6fe0c882
+1fe17e03
+c1818000
+6fe4488e
+c2806824
+c281e824
+c2826824
+2040469d
+24740000
+20404fd1
+2020683c
+7047730e
+6849439f
+6fe0c773
+1fe22200
+20402dcc
+6848c773
+18427200
+d8c049b9
+20207cdc
+70477309
+6fe4488e
+c2916831
+70477308
+20206831
+204041c9
+70473d00
+70475301
+20405960
+6fe0c754
+243a489a
+70475514
+6fe143fa
+793ffe00
+67e143fa
+70472000
+6fe1477d
+67e1477f
+20405535
+202048e9
+58000000
+67e1477f
+67e0c90c
+67e0c90d
+67e0c753
+70478100
+204029aa
+70429c00
+202048ab
+6fe143f8
+c283c8af
+c2803771
+202048c5
+70488200
+6fe143f8
+c2803771
+202047af
+6fe0c754
+c000c8b8
+70488314
+70490e05
+2020540f
+20405408
+70488305
+2020540f
+6fe0c90c
+247a0000
+70490c01
+70490d1e
+20600000
+280ffe26
+2040c804
+204053c6
+70488200
+202048c5
+44b3c00c
+20404163
+58000000
+67e1477f
+67e14aa3
+704aa1ff
+6fe14500
+2feffe0b
+2040d565
+204053c1
+6fe14500
+c285c8d9
+6fe4488e
+c30c48d9
+684946a7
+18408401
+604946a7
+604942de
+180a7e00
+67e0c2dd
+6fe1c756
+67e1c2e0
+204037a2
+6fe1464f
+67e14750
+58000000
+67e14741
+67e1477f
+67e0c720
+d8e00001
+20404a25
+20404a2f
+20205455
+6fe14500
+c284b794
+202048e9
+44b4400d
+58000000
+67e14750
+d8e00004
+20404a29
+20405565
+6fe0cac2
+203a4163
+20600000
+44b4c00d
+6fe4488e
+c4008000
+d8e00001
+20404a29
+204067e4
+204067c1
+6fe0caa2
+79207e01
+67e0caa2
+202044b9
+7048fe01
+da200017
+da400004
+204029d9
+58000006
+e7e08005
+58000001
+e7e10005
+5800ffff
+e7e10005
+58002800
+e7e10005
+d8c048ee
+20207c91
+44b5400d
+1a220c00
+efe18006
+67e1c39b
+c000c919
+c003c95c
+c004c938
+c005c952
+c0044971
+c0064986
+c005499f
+c00949c5
+c02949cb
+20202b76
+6fe0c8fe
+207a0000
+6fe0c8fe
+c0014962
+7048fe02
+da200009
+da400004
+204029d9
+58000006
+e7e08005
+58000001
+e7e10005
+5800ffff
+e7e10005
+58002800
+e7e10005
+df200002
+d8c048ff
+20207cdc
+da200007
+da400004
+204029d9
+58000008
+e7e08005
+6849433b
+18408405
+efe20002
+e7e20005
+58002803
+e7e10005
+20600000
+6fe0c8fe
+207a0000
+6fe14337
+1fe0fffe
+1fe6fc07
+20407d64
+1807f200
+6fe1433b
+1fe08c06
+18c08c03
+efe10006
+1fe22600
+efe10006
+d8402a29
+98467c00
+2022c94a
+c2004941
+20204962
+da200003
+da400004
+204029d9
+5800000a
+e7e08005
+1a627e00
+e7e10005
+20600000
+6fe0c8fe
+207a0000
+6fe14337
+df200009
+6fe1433b
+1fe0a205
+da404901
+20407d66
+2022c965
+20204962
+6fe0c8fe
+207a0000
+6fe0c8fe
+c001492c
+704aa102
+20204966
+6fe0c2cd
+67e0caa1
+20204966
+704aa103
+7048fe00
+6fe4488e
+c307c96d
+704aa401
+6fe0caa3
+207a0000
+20203fee
+6fe0caa2
+79207e04
+67e0caa2
+202044b9
+20402e1f
+20402e28
+6849068f
+60490656
+20402ca5
+20402cb0
+18c08dfe
+18c27e00
+67e106a5
+68490694
+58002a50
+98467c00
+2022c97f
+20202c2d
+6fe0c8ce
+203a2c2d
+20402cbe
+203a2de1
+d8c048cf
+18007e0b
+20202c83
+efe10006
+67e10693
+98002200
+6849439c
+6fe14334
+98467c00
+2422ad2e
+6fe10693
+1fe67c42
+2422c999
+58000017
+1fe22200
+1fe22600
+20402dee
+5800000d
+e7e08005
+d8c048d8
+1a60f3ff
+20207cce
+6fe4488e
+c291ad2e
+6fe148d6
+1fe20c00
+efe10006
+20202d31
+6849439c
+6fe0c323
+c281c9bf
+6fe4488e
+c305c9a5
+c30cc9a7
+6fe1439c
+c0182de1
+6fe1439c
+c002c9b7
+c00849ba
+6849439c
+6fe4488e
+c291acfb
+6fe14334
+98467c00
+2422acfb
+20402e24
+684948d6
+18420c00
+e8410006
+18408401
+20407db2
+20202d0b
+d8c0490a
+18007e03
+20202d0b
+6fe0c8ce
+203a49aa
+d8c048cf
+18007e08
+20202d0b
+6fe14334
+98467c00
+2422c9a2
+20402da5
+243449a7
+20202d24
+18c22200
+6fe14337
+1fe0a5fd
+20402908
+204049cc
+20206878
+20402dc8
+6fe0c74f
+c07fc9d1
+6fe1439c
+c012c9d4
+20600000
+6fe1439c
+c010c9d4
+20600000
+6fe08055
+67e0c70d
+20600000
+6fe4488e
+c4060000
+204049db
+202049ec
+6fe4cad1
+67e4883a
+580049e1
+67e10837
+704ace5a
+20600000
+7046775a
+70083901
+20407956
+204049e7
+6fe0c677
+20203d2a
+6fe0883a
+207a0000
+6fe0c677
+c02d3d27
+20203d24
+6fe0cace
+c02d49f1
+6fe0cace
+67e0cacf
+20600000
+204049ee
+58000000
+67e145ef
+67e145f5
+70409400
+6fe0cad0
+205a7902
+704ad032
+20600000
+6fe4488e
+c4120000
+6fe0c678
+c1820000
+202078f6
+6fe4488e
+c4120000
+6fe0c678
+c1820000
+6ff08c01
+67e0c675
+c4038000
+704ad000
+58000000
+67e14741
+20404804
+204048e6
+2040469d
+24740000
+6fe0c72b
+c000e85b
+20206856
+7008e900
+df200009
+6fe4488e
+c2917c24
+20207c22
+20403d53
+7008ea24
+58000008
+67e08911
+d8c049b9
+d8a00912
+df20000e
+20207cdc
+6fe0864d
+df200008
+d8c044ea
+e8408006
+98467c00
+20628000
+c2004a20
+2020781c
+6fe4488e
+f9207e00
+67e4488e
+20600000
+6fe4488e
+f93ffe00
+67e4488e
+20600000
+d8e00003
+20204a25
+d8e00003
+20204a29
+2035ca43
+20402931
+58004a5e
+67e143e4
+58004a61
+67e143e6
+58004a5a
+67e143dc
+58004b0a
+67e143ea
+58004ce1
+67e143e8
+58004cf2
+67e143ec
+44b6400d
+20404a43
+20404a55
+20204c6c
+6ff08060
+793ffe00
+67f08060
+6fe44517
+20406d5b
+6fe1451f
+20406d66
+20406d75
+70807708
+70807649
+7080790a
+70807a0b
+d8400081
+6fe14526
+2feffe00
+79208404
+60588060
+20600000
+6848c50c
+20406ef1
+20404a84
+6848c50a
+20206ed7
+6848c50a
+20406ee0
+2420b77f
+2020377d
+20406935
+247a0000
+20204a86
+1a627e00
+c00a4a73
+c00aca6f
+c0184ca6
+c018cca8
+c0194cb2
+c019ccb0
+c01a4ca0
+c01ecc80
+c020ca79
+c0214a7b
+c021cc9e
+c01dcc89
+20600000
+204029aa
+70452800
+20404a77
+20204c52
+20404a7e
+6fe0c515
+67e0c0c0
+20204c50
+20404ad3
+20204a7c
+204030d1
+20202eb3
+20204cc2
+6848c50c
+20206ef1
+20404a80
+20204a84
+6fe0c50f
+2feffe01
+2040b78a
+20600000
+6848c50c
+20206eed
+6ff0810b
+c3810000
+20406d89
+efe08003
+c080ca9c
+6ff10112
+1fe67c02
+20610000
+efe08003
+67e086c0
+e8408003
+18622200
+604886c1
+18408403
+6ff10112
+98460400
+24610000
+7006c201
+20404aaa
+6fe086c2
+c1000000
+20204aa5
+20407c97
+20404c8f
+20204a9f
+44b6c00d
+20406d89
+6ff10112
+207a0000
+98608600
+20204aa9
+20406d89
+18608602
+efe08003
+98608600
+20206d8f
+44b7400d
+6fe086c0
+c000cac7
+c0014acc
+c0024ada
+c004cade
+c005cb35
+c007cb36
+c0084b3e
+c0094b42
+c0134b46
+c0154b4b
+c015cb7e
+c0164b84
+c0184b8b
+c019cb90
+c01acbbd
+c01b4bc6
+c01bcbcf
+c01c4bd5
+c0204bdd
+c0214be7
+c0244bec
+c028cbf7
+c03b4bfb
+c03bcc01
+c03c4c06
+c03d4c3c
+20204c4a
+6fe086c1
+c0834c4a
+efe30003
+67e342dd
+20204c4d
+6fe086c1
+c080cc4a
+e8408003
+6048c516
+20404c4d
+6fe14500
+c3848000
+6fe0c50f
+2feffe01
+24608000
+6848c516
+284ffe02
+2020b78c
+2020378a
+dfe0001d
+d8a0426d
+20404bc0
+20202931
+6fe14500
+c304cc4a
+20404b32
+20344c4a
+7006c200
+6fe14526
+c2844b03
+6fe0c528
+247a0000
+7006c201
+efe10003
+67e14529
+6061452b
+6fe086c1
+1fe0fffe
+24214c4a
+2022cc4a
+67e0c528
+68494529
+184085ff
+20402cb0
+203a4b06
+e8420006
+59280302
+98467c00
+2422cb06
+efe08006
+67e0c52d
+1fe17e30
+203a4b06
+7006c200
+204029a8
+20404b0a
+20404b0a
+20404b0a
+6fe14526
+c4040000
+7006c201
+20404d07
+20204c4d
+70452800
+7006c201
+20404d07
+20204c4a
+6fe0c528
+207a0000
+20402a06
+247a0000
+20404b2d
+44b7c00d
+6fe142e3
+20407db2
+1fe20400
+6fe0c39a
+c3800000
+1840fffd
+d84000fb
+20407db2
+6848c528
+20407db2
+1fe22200
+18427e00
+9a267e00
+67e0c528
+20404b28
+6fe1452b
+1fe20600
+1a227200
+20406dbd
+18627e00
+67e1452b
+6fe0c528
+247a0000
+20204d05
+68494529
+6fe0c52d
+c282add5
+c2822dcc
+20600000
+d8400017
+6fe14526
+c3808000
+684942e5
+20600000
+6fe14526
+c2812da5
+20207dbe
+20204c70
+6f2086c1
+20407d35
+20406d6a
+67e1451f
+20404c4d
+20406da1
+6fe1451f
+20206d66
+da200002
+da404508
+d8400000
+20204c54
+6fe14500
+c304cc4a
+20404c4d
+20203794
+6f2086c1
+6fe14401
+1fe20a00
+20406dbd
+20204c4d
+df200040
+d8a0434c
+20407ca3
+58000000
+67e08666
+1a220600
+18627e00
+67e1066a
+20404b79
+6fe08666
+68488656
+18408401
+9840fe00
+67e08666
+1fe67c1f
+24214b65
+6848c34c
+5800434d
+9840fe00
+67e1066f
+68488656
+18408401
+6fe0c34c
+9840fe00
+67e0c34c
+20204b6e
+6848c36c
+5800436d
+9840fe00
+67e1066f
+68488656
+18408401
+6fe0c36c
+9840fe00
+67e0c36c
+6fe1066f
+1fe20a00
+6fe1066a
+1fe20600
+18427200
+20406dbd
+6fe086c1
+68488666
+98467c00
+2422cb51
+20204c4d
+efe08003
+67e08656
+efe08003
+67e08662
+20600000
+d8400000
+da200002
+6fe14523
+67e1067f
+da40067f
+20204c54
+6fe086c1
+c080cc4a
+efe08003
+67e0c521
+58000000
+67e14523
+20204c4d
+6fe086c1
+c0824c4a
+6fe14500
+c284cc3c
+20204c4a
+efe08003
+1fe20400
+c040cb9f
+c0414ba3
+c041cba8
+c0424bac
+67e0c300
+204074ed
+20402ea2
+6fe0c300
+c0004bb0
+c000cbb3
+c0014bb5
+c0024bb7
+20204c4a
+6048c300
+20402e9e
+7042c90d
+20204bb1
+6048c300
+20402e9e
+7042c90d
+7042c701
+20204c4d
+6048c300
+20402e9e
+7042c90d
+20204bbb
+6048c300
+20402e9e
+7042c90d
+20204bb9
+7042c900
+7042c703
+20204c4d
+7042c901
+20204bb1
+7042c905
+20204bbb
+7042c905
+20204bb9
+7042c702
+20204c4d
+7042c700
+20204c4d
+dfe0001f
+d8a0436c
+20204bc0
+6f2086c1
+9f267c00
+24214c4a
+e7208005
+20406dbd
+20204c4d
+6fe14500
+c304cc4a
+6fe086c1
+c0844c4a
+efe40003
+67e442d5
+70064d12
+20407824
+20204c4d
+efe10003
+67e1438d
+6048c0a6
+9840fe00
+67e140a4
+20204c4d
+6fe0c300
+203a4c4a
+6fe0c2fe
+c0804c4a
+6fe0c2ff
+c0804c4a
+20407899
+20204c4d
+6fe086c1
+c082cc4a
+efe08003
+67e0c510
+efe20003
+67e24511
+6848c510
+20406ef1
+20404cdf
+20204c4d
+6fe086c1
+c080cc4a
+efe08003
+67e0c141
+20204c4d
+efe08003
+c000cbf5
+6fe0c2fc
+c001cbf3
+c0034bf3
+c003cbf3
+20204c4a
+7042fd01
+20204c4d
+20402f08
+20204c4d
+20404c4d
+20406da1
+70801001
+2020233e
+d8400001
+20402cb0
+18c08bfe
+58000000
+e7e10005
+20204c4d
+20404c0a
+20404c38
+58000000
+e7e10005
+20204cb9
+efe08003
+20404c0e
+20404c15
+20204cb9
+20404c35
+58280002
+e7e18005
+20600000
+67e0864e
+20404c35
+59280302
+e7e20005
+6fe0864e
+e7e18005
+20600000
+20402cd4
+efe08003
+1fe1721f
+1fe22200
+2a2ffe07
+7920840f
+2a2ffe06
+7920840e
+e0410005
+1f227e00
+e7e08005
+20406dd0
+20404c38
+58000000
+e7e10005
+184104ff
+184085ff
+20402cb0
+18c08c04
+efe08006
+c2824c2d
+c282cc2d
+18408401
+20600000
+20402cd4
+2a2ffe05
+7920840f
+e0410005
+5a290202
+e7e40005
+184085ff
+20600000
+20402cd4
+e0410005
+20600000
+efe08003
+1fe27200
+e7e08005
+20206dd0
+6fe0c2fe
+c082cc4a
+6fe0c300
+c0024c48
+c0424c42
+20204c4a
+7042fb02
+7042fc08
+20204c45
+efe20003
+67e24301
+20204c4d
+20404c45
+20202ef1
+d8400001
+da200000
+20204c54
+d8400000
+da200000
+20204c54
+7006c002
+20204c6d
+7006c005
+20204c6d
+6fe086c0
+1fe22600
+7006c006
+58000002
+9a20fe00
+20404cc8
+1a627e00
+e7e08003
+e0408003
+1a227200
+1a420c00
+20406db7
+20204cd2
+7006c008
+1f20fe02
+20404cc8
+6fe106eb
+e7e10003
+6fe106e9
+1fe20c00
+20406da4
+18c27e00
+67e106e9
+20204cd2
+7006c009
+58000000
+20404cc8
+20204cd2
+7006c00a
+58000001
+20404cc8
+20404c7a
+6fe14500
+d8e00009
+afefffff
+79208405
+e0408003
+20204cd2
+d8400000
+6fe0c38c
+d8e00000
+afefffff
+79208402
+20600000
+7006c00d
+6fe0c403
+1feffe22
+1fe27200
+20404cc8
+6fe14401
+1fe20c00
+20406da4
+20204cd2
+7006c00e
+58000004
+20404cc8
+6fe205d8
+e7e20003
+20204cd2
+7006c00f
+6ff10112
+d8400040
+20407db2
+1fe22200
+1fe27200
+20406d89
+d8a0067f
+20406dbd
+1a227e00
+1a227200
+20404cc8
+d8c0067f
+20406da4
+20204cd2
+7006c010
+20204c6d
+7006c011
+58000004
+20404cc8
+6fe24301
+e7e20003
+20204cd2
+da200180
+20204caa
+da200080
+20204caa
+7006c014
+58000002
+20404cc8
+1a227e00
+e7e10003
+20204cd2
+da600000
+20204cb3
+da600001
+7006c015
+58000001
+20404cc8
+1a627e00
+e7e08003
+20204cd2
+60490656
+7006c029
+58000002
+20404cc8
+68490656
+e0410003
+20204cd2
+7006c02b
+20204c6d
+7006c040
+58000002
+20404cc8
+6fe14075
+e7e10003
+20204cd2
+7006bf02
+67e086c1
+604c0656
+44b8400e
+20404cd4
+684c0656
+20406d95
+6fe186bf
+e7e18003
+20600000
+44b8c00e
+20206d97
+20404cdd
+20608000
+20404cdb
+6fe24511
+1feb7e00
+207a0000
+20207c93
+6848c510
+20206ef1
+6848c510
+20206efc
+6848c510
+20206eed
+622106e9
+624106e7
+6fe1439c
+67e106eb
+20404b32
+20740000
+684906e7
+6fe0c525
+20407db2
+1fe27200
+18427e00
+9f267e00
+67e106e7
+20404c61
+6fe106e7
+207a0000
+20204ce7
+20600000
+6fe0c521
+207a0000
+6fe0c522
+207a0000
+1fe0ffff
+67e0c522
+247a0000
+70452205
+20406fb2
+20406f8e
+1fe6fc0a
+20407d61
+1fe6fc64
+20407d61
+18070400
+67e0c523
+6048c524
+20600000
+d8e00008
+20204d0d
+d8e00008
+20204d09
+6fe14526
+f93ffe00
+67e14526
+20600000
+6fe14526
+f9207e00
+67e14526
+20600000
+20407384
+2055cd20
+20404d40
+20404dec
+20405260
+20758000
+20405b83
+2040506b
+20405853
+20404d22
+20405303
+6fe14500
+c2865544
+204057d7
+20204df5
+20405203
+20206f4e
+44b9400e
+58005b02
+67e1460f
+58005af7
+67e14611
+580059f0
+67e143f2
+580059bc
+67e14609
+58006886
+67e1460b
+58004e75
+67e1460d
+58005438
+67e143e2
+58004e70
+67e143e0
+580053da
+67e143e6
+58005759
+67e143e4
+58004e3d
+67e143de
+58005420
+67e143e8
+58005494
+67e143ec
+58004e2d
+67e143dc
+202068cb
+20758000
+204035c8
+2040323a
+20405b7f
+20404ee5
+20404d88
+20405a4b
+20402a1f
+44b9c00e
+6fe4470e
+c288d640
+c2885650
+c2895685
+20600000
+70409910
+6fe4470e
+c3858000
+70409918
+20600000
+20403260
+7048fa00
+7045e100
+70444e00
+6fe4470e
+c41e8000
+7048fa01
+7045e101
+70444e01
+20203263
+4778403e
+6fe0c594
+203a4d65
+6fe245e3
+684a45a6
+98467c00
+2022cd6c
+20203546
+6fe245fb
+684a45a6
+98467c00
+2022cd60
+6fe24576
+207a0000
+20204d60
+6fe4470e
+c298596c
+c29f596c
+2020351f
+6fe4470e
+c31eb658
+6848c618
+6fe0c638
+98467c00
+24213675
+18408401
+6048c618
+6fe0c638
+c007cd7e
+6fe0c618
+c00a366f
+c00f366f
+20600000
+6fe0c618
+c005366f
+c007b66f
+20600000
+44ba400e
+204067ff
+20404d4e
+20404d53
+204058fc
+20203266
+44bac00e
+20404d93
+20404da5
+20404dd3
+58000a77
+67e143fe
+38001224
+38044000
+38080000
+e7e28005
+20600000
+58009000
+67e142f9
+70491700
+58000000
+67e3c65c
+6fe0c502
+67e0c731
+67e0c732
+7045a001
+7045fa01
+704ac400
+20404da0
+2020680c
+d8400000
+6fe4470e
+c289681d
+d85fffff
+2020681d
+20404dae
+6fe1c61f
+67e1c8dc
+6fe4470e
+c40d8000
+58000006
+67e142d5
+67e142d7
+20600000
+6fe4470e
+c28ccdb2
+c28c4db9
+20204dc6
+6fe0c8bf
+67e0c638
+6fe248d0
+67e248cc
+58080606
+67e1c5be
+202036bb
+6fe1c8c0
+67e1c61f
+6fe1c8c3
+67e1c622
+6fe248d4
+67e248cc
+58100c0c
+67e1c5be
+70463805
+6fe4470e
+c41e8000
+7046380f
+20600000
+6fe1c8c6
+67e1c61f
+6fe1c8c9
+67e1c622
+6fe248d8
+67e248cc
+581c1919
+67e1c5be
+7046380b
+6fe4470e
+c41e8000
+7046381e
+20600000
+44bb400e
+20404de9
+6fe0c895
+c17f8000
+6fe0c895
+20405258
+6848c895
+20406ee0
+2020cde5
+6fe0c895
+2040525c
+6848c895
+20406ee0
+2020cde9
+6fe0c895
+20405258
+6fe0c898
+20204dea
+6fe0c895
+2040525c
+6fe0c897
+20204dea
+6fe0c896
+67e0c9fb
+20600000
+44bc400f
+20758000
+6fe0ca1e
+207a0000
+1fe0f201
+d8c04a1e
+d8a0426d
+20407cdc
+20202948
+44bcc00f
+6fe4470e
+c29f594b
+6fe0c678
+c000593a
+20405a70
+204053c1
+6fe0c678
+c000ce00
+c0014e05
+20600000
+6fe3467a
+684b46f8
+98467c00
+2022d3ad
+20204e09
+6fe34687
+684b46f8
+98467c00
+2022d3ad
+44bd400f
+da204679
+6fe0c678
+1fe0ffff
+1feffe0d
+9a20a200
+efe08011
+67e0c3fc
+6fe0c3fc
+c01a4e1e
+202053ad
+44bdc00f
+78547c00
+6fe4470e
+c3054e1b
+6ff08132
+c2824e1b
+78347c00
+6fe0c740
+67e0c73f
+20600000
+70475401
+6848c719
+6fe0c74f
+c07fce23
+6848c653
+6048c720
+204037a2
+6fe1c75c
+67e1c351
+2040545e
+58000004
+e7e08006
+d8c0436d
+20405465
+20207860
+c513377d
+6fe0c9f9
+203a377d
+6fe0c781
+c000b77d
+6fe0c672
+243a377d
+2020377f
+44be400f
+58000006
+20406971
+c281ce3b
+204052f0
+20405303
+20404e42
+2020379c
+44bec00f
+20407388
+2040567d
+6848c667
+20206ecd
+44bf400f
+204053ab
+20407de6
+20404fc9
+6fe0c894
+20405254
+6848c665
+20404f02
+20404e75
+6848c666
+20404f0a
+20404f0e
+204059fc
+20405ace
+20404e5c
+20204e52
+6fe4470e
+c41e0000
+6848c668
+20406ecd
+6848c669
+20406ecd
+6848c668
+20404f06
+6848c669
+20204f06
+6fe4470e
+c4098000
+6fe0c41d
+c1810000
+6848c64c
+20206f05
+d8c08070
+df200010
+efe08006
+243a4e69
+58000080
+18c08bff
+e7e08005
+c2004e64
+dfe080dc
+98c67c00
+20628000
+df200008
+d8c080d4
+20204e64
+c6130000
+20404e75
+6fe08015
+247a0000
+20206ecd
+44bfc00f
+70488c00
+20407de6
+6848c89c
+20406ef1
+6848c89c
+20406ecd
+20404f42
+6fe0c893
+20405254
+20406968
+6848c88d
+20406eac
+6848c88f
+20406eac
+6848c88e
+20406eac
+6848c890
+20406eac
+6848c891
+20406eac
+6848c892
+20406eac
+6848c89d
+20406eac
+6848c89e
+20406eac
+20404e62
+6848c668
+20406ea5
+6848c669
+20406ea5
+6848c89a
+20406ea5
+6848c89b
+20406ea5
+6848c667
+20206eac
+6fe14500
+c4048000
+1a227e00
+243a29b4
+202029b9
+44c04010
+6fe0c41d
+c1810000
+6848c64c
+20206f0b
+44c0c010
+6fe4470e
+c4098000
+20404ea0
+20406fb2
+20406f8e
+67e1464a
+6fe0c41d
+c0814eb4
+6849464a
+184ffe08
+1fe6fc0a
+20407d61
+9840fe00
+67e1464a
+da204644
+20404ec4
+6fe0c422
+c280ce35
+c3004ebd
+70464e01
+20204ebb
+d8e00004
+2020582e
+d8e00004
+20405832
+70464d01
+6fe0c64e
+207a0000
+70464e00
+20205a43
+44c14010
+efe40011
+67e4064e
+20407057
+20407051
+6fe10654
+68490650
+98467c00
+24417054
+68490652
+98467c00
+2441704e
+6fe10654
+6849064e
+98467c00
+20214ee1
+68490650
+98467e00
+24214ee3
+203a4ee3
+1fefa264
+6fe1064e
+68490650
+98460400
+1a227e00
+9846fc00
+20407d61
+67e0c77c
+20600000
+70477c64
+20600000
+70477c00
+20600000
+6848c43e
+20406ef1
+6848c88d
+20404f0a
+6848c88f
+20404f0a
+6848c88e
+20404f0a
+6848c890
+20404f0a
+6848c891
+20404f0a
+6848c892
+20404f0a
+6848c89c
+20404f0a
+6848c89d
+20404f0a
+6848c89e
+20404f0a
+2040591f
+6848c89a
+20404f0a
+6848c89b
+20404f0a
+6848c667
+20404f0a
+6848c665
+20204f0a
+18410e7f
+6ff2011c
+afefffff
+2020cf0a
+18467cff
+20628000
+79200407
+20206ed7
+18467cff
+20628000
+793f8407
+20206ed7
+6fe1c72e
+67e1864e
+df200018
+d8400000
+6fe1864e
+2feffe00
+2040ef05
+6fe1864e
+1fe3fe00
+67e1864e
+18408401
+c2004f12
+20600000
+20404f20
+7043fe73
+20404f1f
+2020696c
+20206bbc
+6fe0c893
+d8400021
+20406f1d
+6fe0c894
+d8400023
+20206f1d
+44c1c010
+2040684e
+78547c00
+58000000
+67e3465d
+2040530c
+58000089
+20406970
+2040506b
+20404f38
+20404f3d
+204050ca
+6fe0c65c
+1fe17e1f
+67e0c65c
+24345853
+20405841
+20205535
+6fe0c671
+207a0000
+67e0c661
+70467100
+20207dbc
+6fe0c66d
+207a0000
+67e0c662
+70466d00
+20207dbc
+44c24010
+2040591f
+20404f51
+20404f8d
+6fe0c66b
+6848c66a
+67e0c66a
+98467c00
+2422b781
+6fe0c66f
+6848c66e
+67e0c66e
+98467c00
+2422b781
+20600000
+6fe0c89a
+c17f8000
+da200000
+6848c89a
+20406ee0
+7920a200
+6848c89b
+20406ee0
+7920a201
+1a227e00
+67e0c66b
+c000cf61
+c0014f65
+6fe0c66c
+c283cf71
+20600000
+6fe0c66a
+c0004f69
+c001cf6b
+20600000
+6fe0c66a
+c0004f6d
+c001cf6f
+20600000
+70466c82
+20600000
+70466c81
+20600000
+70466c80
+20600000
+70466c83
+20600000
+6fe0c66c
+793ffe07
+67e0c66c
+c0004f79
+c000cf7c
+c0014f7f
+c001cf82
+20600000
+6fe0c66b
+c001cf85
+20600000
+6fe0c66b
+c0004f85
+20600000
+6fe0c66b
+c001cf89
+20600000
+6fe0c66b
+c0004f89
+20600000
+6fe0c66d
+1fe0fe01
+67e0c66d
+20600000
+6fe0c66d
+1fe0ffff
+67e0c66d
+20600000
+6fe0c668
+c17f8000
+da200000
+6848c668
+20406ee0
+7920a200
+6848c669
+20406ee0
+7920a201
+1a227e00
+67e0c66f
+c000cf9d
+c0014fa1
+6fe0c670
+c283cfad
+20600000
+6fe0c66e
+c0004fa5
+c001cfa7
+20600000
+6fe0c66e
+c0004fa9
+c001cfab
+20600000
+70467082
+20600000
+70467081
+20600000
+70467080
+20600000
+70467083
+20600000
+6fe0c670
+793ffe07
+67e0c670
+c0004fb5
+c000cfb8
+c0014fbb
+c001cfbe
+20600000
+6fe0c66f
+c001cfc1
+20600000
+6fe0c66f
+c0004fc1
+20600000
+6fe0c66f
+c001cfc5
+20600000
+6fe0c66f
+c0004fc5
+20600000
+6fe0c671
+1fe0fe01
+67e0c671
+20600000
+6fe0c671
+1fe0ffff
+67e0c671
+20600000
+6848c668
+20404f02
+6848c669
+20404f02
+6848c89a
+20404f02
+6848c89b
+20204f02
+6fe14661
+207a0000
+70467201
+7046730a
+20600000
+da604673
+da404fd9
+20203755
+70467200
+20600000
+6fe0c892
+c17f8000
+da200000
+704a0f05
+6848c892
+20404fe8
+67e0ca0c
+6fe0c89c
+c07fcffc
+20405203
+1a227e00
+c282d004
+2020500b
+6fe4470e
+c295d002
+6fe0ca0c
+1fe22600
+6fe0c89c
+c07fcff8
+6fe0ca13
+243a4fff
+20406ee0
+6848c89c
+2020d002
+6848c89c
+20406ef1
+6848c892
+6fe0ca0c
+20205236
+6fe0c892
+20405256
+6848c892
+20205242
+6848c892
+20404f0a
+20204fe5
+70491700
+704a0c00
+20600000
+6fe0ca0c
+20205236
+6fe0c917
+c1008000
+70491701
+6fe4470e
+c3940000
+c39b0000
+2020501b
+6fe0c917
+c1000000
+70491700
+6fe4470e
+c2945012
+c29b5012
+20600000
+6fe0c918
+243a5016
+6fe0c732
+245a501b
+70491800
+6fe0c502
+67e0c732
+67e0c731
+20600000
+44c2c010
+2040504c
+20740000
+6fe0c6a2
+1fe20400
+6fe4470e
+c28ad028
+18427e00
+1fe0fe01
+1fe17e03
+67e0c6a2
+20405068
+2020557a
+6fe0ca1c
+243a5045
+6fe4470e
+c28e5039
+18427e00
+c1008000
+c0005035
+c0015033
+20600000
+58000002
+20205025
+58000000
+20205025
+58000001
+20205025
+58000003
+20205025
+18427e00
+c1008000
+c0005035
+c0015037
+c001d033
+20600000
+18427e00
+c1010000
+c0005037
+c000d033
+c001d031
+20600000
+6fe4470e
+c28e503f
+18427e00
+c1010000
+c0005031
+c000d033
+20600000
+78547c00
+6fe4470e
+c3958000
+202057b1
+6fe4470e
+c2945054
+c29b505b
+20600000
+6fe0c917
+c1808000
+da604732
+da405059
+20203755
+70491801
+202057f6
+6fe0c917
+c1808000
+da604731
+da405060
+20203755
+70491801
+202054b2
+6fe4470e
+c38e0000
+6fe0c6a2
+c1818000
+7046a200
+20600000
+44c34010
+20405062
+20405a1e
+44c3c010
+6fe0c9fa
+c006508f
+c001d0a9
+c005d0bd
+6fe0c6a2
+c0005077
+c000d075
+c0015079
+c001d07b
+6848c906
+2020507c
+6848c905
+2020507c
+6848c907
+2020507c
+6848c908
+6fe0c9fa
+c002508b
+c002d08b
+c004508d
+c003d08d
+c003508b
+6048c916
+58000006
+20406971
+1fe104f8
+6fe0c916
+9840fe00
+1fed7e00
+1fe0fe06
+20206970
+184085ff
+20205082
+18408402
+20205082
+6fe0c6a2
+c0005095
+c000d099
+c001509b
+c001d09d
+20600000
+6fe0c911
+2020509e
+6fe0c912
+2020509e
+6fe0c913
+2020509e
+6fe0c914
+2020509e
+6fe0c915
+1fe22200
+5800c309
+20406970
+1a227e00
+1fed7e00
+1fe0fe23
+20406970
+58000009
+20206970
+58005a09
+20206970
+6fe0c6a2
+c00050b0
+c000d0ae
+c00150b2
+c001d0b4
+6fe0c90a
+202050b5
+6fe0c909
+202050b5
+6fe0c90b
+202050b5
+6fe0c90c
+67e0c916
+1fed7e00
+1fe22200
+1fe0fe0d
+20406970
+1a227e00
+1fe0fe0e
+20206970
+6fe0c6a2
+c00050c4
+c000d0c2
+c00150c6
+c001d0c8
+6fe0c90e
+202050b5
+6fe0c90d
+202050b5
+6fe0c90f
+202050b5
+6fe0c910
+202050b5
+20405170
+6fe0ca19
+243a5184
+6fe0ca14
+243a5183
+204051ac
+204050e0
+20404e9b
+204050db
+1a227e00
+6848c664
+67e0c664
+67e0c65c
+9842fe00
+1fe67c00
+20628000
+20207dbc
+c6930000
+1a227e00
+207a0000
+67e0c65c
+20207dbc
+704a1100
+704a1200
+704a1300
+1fe22400
+6848c88d
+6fe0c890
+98467c00
+2022d0f0
+6fe0c891
+98467c00
+2022d0f5
+6848c88e
+6fe0c890
+98467c00
+2022d104
+20205107
+6848c88e
+6fe0c891
+98467c00
+2022d0fa
+202050fd
+6848c88e
+6fe0c890
+98467c00
+2022d0ff
+20205102
+20405113
+2040511f
+20205109
+20405113
+20205105
+2040511c
+20405116
+20205109
+2040511c
+20205108
+20405116
+20405122
+20205109
+2040511f
+20405119
+20405125
+20405128
+6fe0ca12
+207a0000
+6fe0ca11
+207a0000
+704a1301
+6fe0c664
+1fe22200
+20600000
+1a417e09
+c004d130
+20600000
+1a417e12
+c0095130
+20600000
+1a417e0a
+c0055130
+20600000
+1a417e11
+c008d130
+20600000
+1a417e14
+c00a5130
+20600000
+1a417e12
+c0095130
+20600000
+1a417e18
+c00c512e
+20600000
+18417e07
+c001d12e
+c002d12e
+c003512e
+c003d12e
+20600000
+704a1201
+20600000
+704a1101
+20600000
+6fe4470e
+c40a8000
+c316513a
+6fe0c8a0
+20405254
+20405148
+6848c8a0
+20204f0a
+6fe0c8a0
+20405256
+704a1d00
+6848c8a0
+6fe0ca1a
+20405161
+2040514c
+6848c8a0
+20204f0a
+20404f0a
+6fe0ca1b
+c1008000
+704a1b01
+2020501b
+704a1d00
+6848c8a0
+6fe0ca1a
+20405157
+67e0ca1a
+6fe0ca1c
+203a5153
+6fe0ca1b
+c1008000
+704a1b01
+2020501b
+6fe0ca1b
+c1000000
+704a1b00
+20600000
+1fe3fe00
+1fe22400
+20406ee0
+7920a400
+1a417e07
+6848ca1d
+18420e00
+c003d16c
+c000516e
+20600000
+1fe3fe00
+1fe22400
+20404f06
+20406ee0
+7920a400
+1a417e07
+6848ca1d
+18420e00
+c003d16c
+c000516e
+20600000
+704a1c01
+20600000
+704a1c00
+20600000
+da400000
+6fe0c89f
+c17f8000
+6fe4470e
+c317517d
+6848c89f
+20404f0a
+6848c89f
+20406ee0
+7920a400
+1a427e00
+67e0ca19
+20600000
+6848c89f
+20404f06
+6848c89f
+20406ee0
+7d20a400
+2020517a
+c002519c
+2040519f
+6fe24a15
+d84000a0
+98408400
+1c427e00
+98467c00
+24610000
+67e24a15
+6fe0ca14
+c0005192
+c000d195
+c0015198
+c001d19a
+20600000
+704a1401
+70465c01
+20207dbc
+704a1402
+70465c00
+20207dbc
+704a1403
+20205193
+704a1400
+20205196
+704a1400
+70465c00
+20600000
+684a4a15
+1c427e00
+98467c00
+244151a4
+20600000
+58000000
+67e24a15
+20600000
+204051b9
+204051ac
+58000000
+67e1ca07
+20600000
+44c44011
+6fe0c737
+245a51b9
+da200000
+204051bc
+204051c5
+204051ce
+204051d7
+204051f3
+20405170
+20405210
+1a227e00
+20600000
+58030303
+67e1ca07
+20600000
+6fe0c88d
+20405254
+704a0f00
+6848c88d
+6fe0ca07
+20405236
+67e0ca07
+6848c88d
+20204f0a
+6fe0c88f
+20405254
+704a0f01
+6848c88f
+6fe0ca08
+20405236
+67e0ca08
+6848c88f
+20204f0a
+6fe0c88e
+20405254
+704a0f02
+6848c88e
+6fe0ca09
+20405236
+67e0ca09
+6848c88e
+20204f0a
+6fe0c890
+c17f8000
+704a0f03
+6fe0ca0a
+1fe22600
+6848c890
+6fe0c89c
+c07fd1ec
+20406ee0
+2020d1e8
+6848c89c
+20406ef1
+6848c890
+6fe0ca0a
+20405236
+67e0ca0a
+20205203
+6848c89c
+6fe0ca0a
+20405236
+202051e6
+6fe0c890
+20405256
+6848c890
+20405242
+67e0ca0a
+6848c890
+20204f0a
+6fe0c891
+c17f8000
+704a0f04
+6fe0ca0b
+1fe22600
+6848c891
+6fe0c89c
+c07fd209
+20406ee0
+2020d205
+6848c89c
+20406ef1
+6848c891
+6fe0ca0b
+20405236
+67e0ca0b
+6848c89c
+20204f0a
+6848c89c
+6fe0ca0b
+20405236
+20205202
+6fe0c891
+20405256
+6848c891
+20405242
+67e0ca0b
+6848c891
+20204f0a
+70472b00
+6fe0c89e
+c17f8000
+6fe4470e
+c40a0000
+c297d221
+704a0f07
+6848c89e
+6fe0ca0e
+20405236
+67e0ca0e
+1a227e00
+c283d22c
+2040522f
+6fe0c72c
+67e0c72d
+20600000
+704a0f07
+6fe0ca0e
+1fe22600
+6fe0c89e
+20405256
+6848c89e
+20405242
+67e0ca0e
+2040521b
+6848c89e
+20204f0a
+70472c01
+20405232
+2020521e
+70472c00
+6fe0c72d
+207a0000
+70472b01
+20600000
+f93fa200
+20600000
+1fe3fe00
+1fe22400
+20406ee0
+7920a400
+1a417e07
+6848ca0f
+18420e00
+c003d240
+c0005234
+20600000
+f9202200
+20600000
+44c4c011
+1a627e00
+67e0ca10
+1fe3fe00
+1fe22400
+18422600
+20404f06
+1a620400
+20406ee0
+7d20a400
+2040524e
+2020523a
+6848ca10
+18410401
+1a417e01
+98467c00
+2422d3d5
+20600000
+d840003f
+20206f1d
+d840003e
+20206f1d
+67e0c8a7
+20405254
+6848c8a7
+20204f0a
+67e0c8a7
+20405256
+6848c8a7
+20204f06
+44c54011
+20404f1b
+20758000
+204052fd
+44c5c011
+2040526f
+c0185276
+c018d2dc
+c02c52e5
+2040526c
+20001af4
+20205264
+6848c893
+20406953
+20204f20
+58000001
+20406971
+67e0c8fc
+58000000
+20406971
+67e0c8fb
+20600000
+6fe0c8fc
+c02d5285
+c06c528a
+c068d27f
+c06952a2
+c00152a9
+c02a52b2
+c02852d9
+20205264
+58000049
+20406971
+c050d283
+20205299
+7049fa0c
+20600000
+7049fa05
+204052f0
+20407c97
+da604973
+20205301
+58000016
+20406971
+1fe67cbd
+2422d260
+58000019
+20406971
+1fe67c55
+2422d260
+5800001b
+20406971
+1fe67c1d
+2422d260
+7049fa06
+da6049af
+202052ab
+7049fa00
+da60492d
+204052ab
+da604937
+204052ab
+58000943
+20406970
+da604951
+202052ab
+7049fa02
+da604923
+204052ab
+da604937
+204052ab
+da604951
+202052ab
+7049fa03
+da604919
+efe10013
+d840ffff
+98467c00
+20628000
+20406970
+1a60a602
+202052ab
+204050a7
+58009a5b
+20406970
+5800000d
+20406971
+1fe67c12
+2022d2c6
+1fe67c0a
+2422d2c9
+5800000e
+20406971
+1fe67ce5
+2422d264
+58000010
+20406971
+1fe67ca5
+2022d2c6
+204052d6
+7049fa08
+20600000
+7049fa09
+da604991
+202052ab
+1fe67c10
+2422d264
+5800000e
+20406971
+1fe67cc5
+2422d264
+58000010
+20406971
+1fe67c38
+2422d264
+204052d6
+7049fa0a
+20600000
+5800005b
+20406970
+202050a5
+7049fa07
+da6049d1
+202052ab
+204052fd
+6fe0c8fc
+c03852e3
+c00052e1
+20205264
+7049fa01
+20600000
+7049fa04
+20600000
+204052fd
+6fe0c8fc
+c02bd2ed
+c02cd2ea
+20205276
+7049fa0b
+da6049bf
+202052ab
+7049fa0d
+da6049dd
+20205301
+d8408006
+6fe0c9fa
+c085d2f4
+d8409706
+18427e00
+20406970
+20002ee0
+20600000
+da6049e9
+6fe0c9fa
+c1858000
+da6049f1
+20600000
+44c64011
+20404f1b
+204052f0
+204052f8
+204052ab
+2020506b
+44c6c011
+20405260
+20404f1b
+d8400806
+6fe0c9fa
+c085d30a
+d8401f06
+18427e00
+20206970
+6fe0c437
+c1800000
+6fe0c9fa
+c0005319
+c000d319
+c0045319
+c0015319
+c001d33d
+c0025319
+c0035365
+c005d35b
+c006d35b
+20205319
+20405387
+78547c00
+6fe0c667
+c07fd320
+6848c667
+20406ee0
+24608000
+58000000
+20406971
+c0985333
+58000002
+20406971
+c4038000
+2040539e
+6fe0c65d
+20405397
+67e1465d
+6fe0c65f
+20405397
+67e1465f
+6fe0c9fb
+c0005335
+c000d337
+c0015339
+c001d33b
+20600000
+c018d323
+2020526c
+20405370
+202053a4
+20405378
+202053a4
+20405374
+202053a4
+20405380
+202053a4
+20405387
+6fe0c667
+c07fd343
+6848c667
+20406ee0
+24608000
+58000000
+20406971
+c098526c
+58000002
+20406971
+c4038000
+2040539e
+20405359
+67e0c663
+1ff1fe00
+2040539b
+67e0c65e
+6fe0c663
+1fe17e0f
+2040539b
+67e0c660
+6fe0c9fb
+c0005370
+c000d378
+c0015374
+c001d380
+20600000
+58000012
+20206971
+20405387
+6fe0c667
+c07fd361
+6848c667
+20406ee0
+24608000
+58000000
+20406971
+c0ac526c
+20205346
+20405387
+78547c00
+58000002
+20406971
+c4038000
+58000008
+20406971
+203a5326
+58000000
+67e3465d
+20600000
+6fe1465d
+1fe67e00
+67e1465d
+20207dbc
+6fe1465f
+1fe67e00
+67e1465f
+20207dbc
+6fe1465f
+1fe67e00
+67e1465f
+6fe1465d
+1fe67e00
+67e1465d
+20405382
+20207dbc
+20405382
+20207dbc
+6fe1465f
+6849465d
+67e1465d
+6049465f
+20600000
+6fe0c8fd
+205a539e
+7048fd01
+20600000
+7049f901
+204029a8
+20205260
+6fe0c667
+c1ff8000
+6fe0c73d
+207a0000
+1fe0ffff
+67e0c73d
+58000000
+67e2465d
+2020538d
+c4038000
+d840ff00
+9841fe00
+20600000
+c4018000
+d84000f0
+20205399
+dfe00003
+20406971
+67e1465d
+dfe00004
+20406971
+2020586a
+6848c894
+20406ee0
+20608000
+5800000a
+20406971
+200003e8
+202053a4
+58008100
+20206970
+70474fff
+7043fc34
+580f0f0f
+67e1c2dd
+67e1c2e0
+20204e11
+44c74011
+204067d5
+204053c1
+6fe0c678
+c000d3ba
+c00153bc
+20600000
+6fe3467a
+202053bd
+6fe34687
+684b46f8
+98467c00
+2022d544
+20204e09
+70474f5a
+20600000
+6fe14500
+c284b794
+20205562
+58000000
+67e14741
+6fe14500
+c284b794
+20600000
+6fe4470e
+c40d8000
+243453d3
+6fe0c9fc
+1fe0fe01
+1fe17e0f
+67e0c9fc
+247a0000
+7049fc00
+20207dbe
+6fe0c667
+c1ff8000
+7040c000
+70473e1e
+20600000
+44c7c011
+1a627e00
+c00a53e9
+c00ad3f9
+c008553f
+c018d406
+c014d408
+c019540a
+c01f379e
+c0205415
+c01cd9a8
+c01d5971
+c01e5997
+c0225428
+20600000
+20405a62
+70473d00
+2040538d
+70475301
+20405960
+6fe0c754
+243a53f1
+70475514
+6fe143fa
+793ffe00
+67e143fa
+70472000
+6fe1477d
+67e1477f
+20405535
+20205562
+58000000
+67e1477f
+70475300
+d8400006
+6fe4470e
+c28dd400
+d8400007
+604942d5
+604942d7
+70478100
+7049f900
+204029aa
+20205484
+d8e00002
+20205411
+70064d12
+20207824
+6fe0c754
+c000d40d
+2020540f
+20405408
+70488314
+d8e00001
+20205411
+6fe0c882
+f9207e00
+67e0c882
+20600000
+6fe14340
+c1000000
+6fe0816a
+1feb7e00
+1fe67c0c
+20610000
+58000009
+20404dab
+20405408
+70478101
+20600000
+6fe0c754
+247a0000
+6fe0c39c
+1fe67e22
+24628000
+70488300
+d8e00000
+20205411
+6fe081a2
+1fe67c0c
+2421541e
+20404dab
+6fe081a4
+203a5434
+6848c88b
+98467c00
+20215434
+6fe081a4
+67e0c0c0
+20205436
+6fe0c88b
+67e0c0c0
+70478100
+20600000
+44c84012
+20402a06
+247a0000
+6fe0c74f
+c07fd440
+6fe0c882
+1fe17e03
+c1818000
+6fe0c9f9
+205a538b
+6fe4470e
+c280e824
+c2806824
+c282e824
+c2836824
+20404f26
+204053cb
+24740000
+204053d5
+2040538e
+20404fd1
+6fe4470e
+c30a683e
+2020683c
+da200001
+6849477a
+20402dcc
+6fe0c77c
+20207dce
+70475400
+6fe1c759
+67e1c351
+2040545e
+58000005
+e7e08006
+d8c0475f
+20405465
+20207860
+da20434d
+efe08011
+207a0000
+98c0a200
+efe08006
+c1008000
+2020545f
+d8a04358
+df200013
+20407cdc
+20202948
+44c8c012
+1a220c00
+efe18006
+67e1c39b
+c0055470
+c009547f
+20202b76
+6fe4470e
+c31dacf7
+20402da5
+6849439c
+6fe0c323
+c281d47a
+6fe1439c
+c0182de1
+6849439c
+20202cfb
+6fe14334
+98467c00
+2422d476
+24345476
+20202d24
+18c22200
+6fe14337
+1fe0a5fd
+20402908
+20206878
+44c94012
+2040548a
+6fe143f8
+c283d490
+c2803771
+20205544
+58000000
+67e4466a
+e7e10005
+7048fd00
+70429c00
+20600000
+70488200
+6fe143f8
+c2803771
+20204e35
+44c9c012
+20405a29
+20404ea5
+204059f2
+20405a81
+20405a00
+20405050
+204054ab
+204054d7
+204054ba
+204054cb
+20405527
+20404fd6
+20405538
+2040552f
+204058f6
+2040326c
+20403507
+204054fa
+204054ff
+2040550d
+2040551a
+20205510
+6fe4470e
+c41b8000
+6fe0c734
+c1808000
+da604731
+da4054b2
+20203755
+6fe0c678
+c1000000
+6fe4470e
+c3830000
+d8e00006
+2040582e
+20403745
+2020553f
+6fe0cabf
+c17f8000
+6fe0cac4
+207a0000
+204051ac
+1a217e07
+6848cabf
+98467c00
+2022d4c6
+6fe0cac1
+67e0cac3
+20600000
+da604ac3
+da40501e
+20203755
+6fe0c737
+207a0000
+6fe0cac0
+c17f8000
+204051ac
+1a217e07
+6848cac0
+98467c00
+2022d4d4
+6fe0cac2
+202054c4
+da604ac3
+da4057f6
+20203755
+6fe0c678
+c00054dd
+6fe4470e
+c41a8000
+6848cabd
+202054e0
+6fe4470e
+c4190000
+6848cabe
+6048c733
+204051ac
+1a217e07
+6848c733
+98467c00
+2022d4ec
+6fe0c502
+67e0c736
+6fe0c735
+c1000000
+70473500
+20600000
+204054f1
+6fe0c735
+c1008000
+70473501
+20600000
+da405965
+da604736
+6fe0c678
+c0003755
+da4054b2
+20403755
+6fe0c736
+c000d820
+20600000
+da604750
+da4054fd
+2020375c
+20405562
+20204e35
+da604720
+da405505
+20403755
+6fe0c720
+c000b788
+20600000
+6fe0c74f
+c07fd3b3
+6fe0c73f
+243a5836
+6fe4470e
+c299d544
+c29f595d
+20204e35
+da604883
+da405426
+20203755
+6fe0c753
+207a0000
+da604755
+da405515
+20203755
+6fe0c754
+247a0000
+6fe0c2fe
+c1800000
+20202fab
+6fe4470e
+c39d8000
+da60477f
+da40551f
+20203755
+6fe1477d
+67e1477f
+20205450
+6fe0c882
+c3810000
+20405408
+d8e00000
+20205411
+da60473e
+da40552a
+20203755
+6fe0c88b
+67e0c0c0
+6fe0c73c
+67e0c73d
+20600000
+da604741
+da405532
+2020375c
+6fe0c678
+c000590a
+202053c6
+6fe1471e
+67e14741
+20600000
+da604705
+da40553b
+20203755
+20405574
+6fe0c752
+243a5801
+20600000
+280ffe26
+2040d936
+204053c6
+70488200
+20205544
+44ca4012
+20405a7a
+6fe14500
+2feffe0b
+2040d565
+204053c1
+6fe14500
+c285d554
+6fe4470e
+c3045554
+6848c6a7
+18408401
+6048c6a7
+6048c2df
+180a7e00
+67e142dd
+6fe1c756
+67e1c2e0
+204037a2
+6fe1464f
+67e14750
+58000000
+67e14741
+67e1477f
+67e0c720
+67e0c9f9
+d8e00002
+2040582e
+20405822
+20205455
+44cac012
+d8e00006
+20405832
+58000000
+67e0c720
+67e14750
+20207866
+44cb4012
+6fe4470e
+c4010000
+d8e00002
+20405832
+204067e4
+204067c1
+20205571
+6fe0c706
+67e0c705
+20600000
+44cbc012
+6fe4470e
+c288d580
+c2885588
+c289558a
+20600000
+44cc4013
+6fe4470e
+c288d584
+c2895612
+c2885588
+20600000
+d8400080
+da204678
+da400000
+20206cc9
+d8400001
+da2046a2
+da40005a
+20206cc9
+204067bb
+20204f1b
+2040558e
+20405594
+204055bb
+202055fc
+20405699
+6fe146a0
+d840aa55
+98467c00
+20628000
+2020569d
+6a414a7f
+1a422600
+204056ad
+6fe0c718
+203a55a0
+67e0ca32
+1a60a601
+6fe14a81
+9a667c00
+24610000
+1a622400
+20205596
+6fe0ca32
+1fe17ef0
+203a55aa
+6fe0c678
+204055b8
+67e0ca33
+df200001
+1a622400
+da204a33
+20206b33
+6848ca32
+6fe0c678
+204055b8
+98467c00
+20628000
+1ff27e00
+9840fe00
+67e0ca33
+1a627e00
+68494a7f
+98467c00
+2022d5a6
+1a60a7ff
+202055a6
+c1800000
+1fe0fe04
+20600000
+6fe0c678
+c00055c0
+c000d5d4
+c00155e8
+20600000
+6a414a83
+1a422600
+20405726
+6fe24a6b
+203a55cc
+67e24a67
+1a60a604
+6fe14a85
+9a667c00
+24610000
+1a622400
+202055c2
+6fe24a67
+684a46a3
+98467c00
+20628000
+df200004
+da2046a3
+1a622400
+20206b33
+6a414a87
+1a422600
+204056d3
+6fe34a3a
+203a55e0
+67e34a34
+1a60a606
+6fe14a89
+9a667c00
+24610000
+1a622400
+202055d6
+6fe34a34
+684b467a
+98467c00
+20628000
+df200006
+da20467a
+1a622400
+20206b33
+6a414a73
+1a422600
+204056fc
+6fe34a52
+203a55f4
+67e34a4c
+1a60a606
+6fe14a75
+9a667c00
+24610000
+1a622400
+202055ea
+6fe34a4c
+684b4687
+98467c00
+20628000
+df200006
+da204687
+1a622400
+20206b33
+6fe0c678
+c1000000
+6a414a8f
+1a422600
+20405738
+6fe0ca71
+203a560a
+67e0ca6f
+1a60a601
+6fe14a91
+9a667c00
+24610000
+1a622400
+20205600
+6fe0ca6f
+6848c6a7
+98467c00
+20628000
+df200001
+da2046a7
+1a622400
+20206b33
+6fe4470e
+c4070000
+6a414a7b
+1a422600
+2040574c
+6fe0ca65
+203a5620
+67e0ca64
+1a60a601
+6fe14a7d
+9a667c00
+24610000
+1a622400
+20205616
+6fe0ca64
+1fe17ef0
+203a562a
+6fe0c6a2
+20405638
+67e0ca66
+df200001
+1a622400
+da204a66
+20206b33
+6848ca64
+6fe0c6a2
+20405638
+98467c00
+20628000
+1ff27e00
+9840fe00
+67e0ca66
+1a627e00
+68494a7b
+98467c00
+2022d626
+1a60a7ff
+20205626
+c1800000
+1fe0fe07
+20600000
+6fe0c678
+1fe67c04
+20610000
+20407dcc
+202056bb
+20406cb2
+6fe4470e
+2feffe09
+2440ecba
+2040ecb7
+20405648
+2040563b
+20205689
+d8400080
+da204678
+da400000
+20206cd7
+d8400001
+da2046a2
+da40005a
+20206cd7
+204067b6
+2040563b
+20405689
+20204f1b
+580046f8
+d8404678
+98460400
+6fe1c6fe
+da204678
+20600000
+700656ab
+204070bf
+20406c1c
+da204701
+68488656
+20405663
+202070bf
+700656b9
+2020565b
+e0408011
+1ff10400
+e0408005
+1fec8400
+e0408005
+e7e08005
+1a227e00
+67f10084
+58000000
+67f10088
+70800602
+20206bd6
+6fe1c6fe
+67e1c430
+20206bf0
+1fe22600
+1a227e00
+1fe0fffc
+1fe22400
+efe20012
+67e24701
+1a627e00
+20406c32
+6fe24701
+e7e20012
+20600000
+6fe4470e
+c4080000
+20405661
+2040696c
+6848c438
+20406eed
+6848c43d
+20204f06
+2040573e
+204056a1
+2040563b
+204056bf
+44ccc013
+6fe4470e
+2feffe12
+2040d699
+6fe146a0
+d840aa55
+98467c00
+2022e7cf
+604946a0
+204067f8
+6fe0c717
+67e0c678
+67e0c6a7
+6fe0c899
+67e0c6a2
+20600000
+df200002
+6a414a93
+da2046a0
+20206b62
+df200002
+da2046a0
+6a414a93
+20206b33
+6a414a7f
+1a422600
+204056ad
+6fe0c718
+203a56b0
+67e0ca32
+1a60a601
+6fe14a81
+9a667c00
+242156b0
+1a622400
+202056a3
+df200001
+da204718
+20206b62
+6fe0ca32
+1fe20400
+1fe17ef0
+203a56b6
+1ff1fe00
+202056b7
+18427e00
+1fe67c00
+2022d6bd
+1fe67c04
+2042fdcc
+67e0c678
+20600000
+6fe0c717
+202056bb
+2040571a
+204056c3
+204056c5
+2020572c
+204056c7
+202056d9
+204056f0
+20205702
+6a414a87
+1a422600
+204056d3
+6fe34a3a
+203a56d6
+67e34a34
+1a60a606
+6fe14a89
+9a667c00
+242156d6
+1a622400
+202056c9
+df200006
+da204a3a
+20206b62
+6fe34a34
+67e3467a
+20600000
+6a414a8b
+1a422600
+204056e5
+6fe34a46
+203a56e8
+67e34a40
+1a60a606
+6fe14a8d
+9a667c00
+242156e8
+1a622400
+202056db
+df200006
+da204a46
+20206b62
+6fe34a40
+684b46f8
+98467c00
+2042d6ee
+67e34680
+20600000
+6fe342dd
+20600000
+6a414a73
+1a422600
+204056fc
+6fe34a52
+203a56ff
+67e34a4c
+1a60a606
+6fe14a75
+9a667c00
+242156ff
+1a622400
+202056f2
+df200006
+da204a52
+20206b62
+6fe34a4c
+67e34687
+20600000
+6a414a77
+1a422600
+2040570e
+6fe34a5e
+203a5711
+67e34a58
+1a60a606
+6fe14a79
+9a667c00
+24215711
+1a622400
+20205704
+df200006
+da204a5e
+20206b62
+6fe34a58
+684b46f8
+98467c00
+2042d717
+67e3468d
+20600000
+6fe342dd
+1fe0ff00
+20600000
+6a414a83
+1a422600
+20405726
+6fe24a6b
+203a5729
+67e24a67
+1a60a604
+6fe14a85
+9a667c00
+24215729
+1a622400
+2020571c
+df200004
+da204a6b
+20206b62
+6fe24a67
+67e246a3
+20600000
+6a414a8f
+1a422600
+20405738
+6fe0ca71
+203a573b
+67e0ca6f
+1a60a601
+6fe14a91
+9a667c00
+2421573b
+1a622400
+2020572e
+df200001
+da204a71
+20206b62
+6fe0ca6f
+67e0c6a7
+20600000
+6fe4470e
+c3075696
+6a414a7b
+1a422600
+2040574c
+6fe0ca65
+203a574f
+67e0ca64
+1a60a601
+6fe14a7d
+9a667c00
+2421574f
+1a622400
+20205742
+df200001
+da204a65
+20206b62
+6fe0ca64
+1fe20400
+1fe17ef0
+203a5755
+1ff1fe00
+20205756
+18427e00
+1fe67c07
+2042fdcc
+20205697
+44cd4013
+20405add
+2040789a
+20404fdb
+20405132
+20405767
+204057b8
+20405815
+20404f42
+6fe4470e
+c4060000
+44cdc013
+20405b87
+20205bb0
+6fe4470e
+c294d76b
+c29bd76b
+20600000
+2040576d
+2020577e
+44ce4013
+da200000
+704a0f06
+6848c89d
+20405781
+67e0ca0d
+6fe0c89c
+c07fd77c
+20205203
+6fe0c89d
+c17f8000
+2040576d
+1a227e00
+c28357a4
+20205797
+6848c89d
+20404f0a
+1a227e00
+c28357a2
+20205797
+6fe4470e
+c296d78d
+6fe0ca0d
+1fe22600
+6fe0c89c
+c07fd242
+6fe0ca13
+243a578a
+2020578f
+70473400
+704a0d00
+20600000
+6fe0ca0d
+20205236
+20406ee0
+6848c89c
+2020d78d
+6848c89c
+20406ef1
+6848c89d
+6fe0ca0d
+20205236
+6fe0c734
+c1000000
+70473400
+6fe4470e
+c39a0000
+6fe0c731
+1fe67c14
+244157f6
+6fe0c502
+67e0c731
+20600000
+204057ae
+20740000
+6fe0c734
+c1008000
+70473401
+6fe4470e
+c29a54b2
+6fe0c720
+207a0000
+6fe0c653
+67e0c720
+20600000
+78547c00
+6fe4470e
+c3968000
+6fe0ca07
+207a0000
+6fe0ca08
+207a0000
+6fe0ca09
+207a0000
+20207dbc
+44cec013
+6fe4470e
+c4150000
+c30b57bf
+204057c2
+6fe0c665
+20205258
+204057c8
+6fe0c665
+2020525c
+6fe0c665
+2040525c
+6848c665
+20406ee0
+2020d7ce
+202057d2
+6fe0c665
+20405258
+6848c665
+20406ee0
+2020d7d2
+202057ce
+6fe0c678
+c1008000
+70467801
+202057d5
+6fe0c678
+c1000000
+70467800
+204057f0
+20205801
+44cf4013
+6fe4470e
+c4150000
+c30b57de
+204057e1
+6fe0c665
+20205258
+204057e7
+6fe0c665
+2020525c
+6fe0c665
+2040525c
+6848c665
+20406ee0
+2020d7f2
+202057ed
+6fe0c665
+20405258
+6848c665
+20406ee0
+2020d7ed
+202057f2
+6fe0c678
+c1000000
+70467800
+20405936
+202053c3
+6fe0c678
+c1008000
+70467801
+202057f0
+44cfc013
+6fe0c716
+c1008000
+20405803
+6048c678
+20405818
+204053c3
+20403745
+2040581a
+70475201
+20205571
+20405818
+20206c99
+6848c678
+18408401
+6fe4470e
+c287d80b
+18467c02
+20610000
+d8400001
+20600000
+6fe0c716
+1fe0ffff
+98467c00
+20610000
+d8400000
+20600000
+d8400001
+da204678
+da400000
+20206cc9
+6fe4470e
+c41a0000
+2020576b
+d8e00000
+2020582e
+d8e00000
+20205832
+d8e00003
+2020582e
+d8e00003
+20205832
+d8e00005
+2020582e
+d8e00005
+20205832
+d8e00013
+2020582e
+d8e00018
+2020582e
+d8e0000d
+2020582e
+d8e0000b
+2020582e
+d8e0001c
+2020582e
+6fe4470e
+f9207e00
+67e4470e
+20600000
+6fe4470e
+f93ffe00
+67e4470e
+20600000
+44d04014
+6fe0c73f
+1fe0ffff
+67e0c73f
+6848c678
+18467c01
+2442d803
+6048c678
+20405811
+204067c1
+20204e09
+44d0c014
+6fe0c9fa
+c1018000
+c1058000
+6fe4470e
+c41c0000
+6fe2465d
+207a0000
+204058e6
+58000003
+204058dc
+205a58d8
+245a58da
+58000002
+204058e1
+205a58d8
+6fe0c8fe
+c000d858
+6fe4470e
+c41c0000
+df200005
+d8a048fe
+20207ca3
+2040586c
+6fe148ff
+67e106e9
+6fe1465d
+67e106eb
+204058a2
+6fe106e9
+67e148ff
+6fe106eb
+67e1465d
+6fe14901
+67e106e9
+6fe1465f
+67e106eb
+204058aa
+6fe106e9
+67e14901
+6fe106eb
+67e1465f
+20600000
+6fe4470e
+c41c8000
+44d14014
+6fe148ff
+67e106f0
+2040587f
+67e148ff
+6fe1465d
+67e106f0
+2040588d
+67e1465d
+6fe14901
+67e106f0
+2040587f
+67e14901
+6fe1465f
+67e106f0
+2040588d
+2020586a
+6fe086f1
+203a5882
+20205887
+6fe086f0
+2040589a
+67e086f0
+6fe106f0
+20600000
+6fe086f0
+204058d4
+2040589a
+205a7dca
+204058d0
+20205885
+6fe086f1
+203a5890
+20205894
+6fe086f0
+2040589d
+67e086f0
+20205885
+6fe086f0
+204058d4
+2040589d
+205a7dca
+204058d0
+20205885
+1feffe04
+1fe6fc05
+2020589f
+1feffe0c
+1fe6fc0a
+20407d64
+1807fe00
+20600000
+6fe106e9
+684906eb
+9840fe00
+6848c903
+9840fe00
+1fe10401
+6048c903
+202058b2
+6fe106e9
+684906eb
+9840fe00
+6848c904
+9840fe00
+1fe10401
+6048c904
+202058b2
+67e186ed
+2feffe10
+2020d8bc
+6fe086ee
+c07fd8c3
+6fe086ed
+1fe37e00
+67e106e9
+67e106eb
+20600000
+6fe086ee
+c00058c0
+6fe186ed
+202058b8
+7006ef00
+6fe086ed
+202058b8
+6fe086ed
+204058ce
+67e086e9
+67e086eb
+203a58cc
+580000ff
+67e086ea
+67e086ec
+20600000
+58000000
+202058c9
+204058d4
+1fe37e00
+204058d5
+1fe67e00
+67e086f0
+20600000
+1fe67e00
+67e08662
+6fe08662
+20600000
+7048fe00
+20600000
+7048fe01
+20600000
+9a267c00
+24217dca
+9a467c00
+24217dca
+20207dcc
+9a267c00
+24610000
+9a467c00
+24610000
+20207dcc
+6fe1465d
+204058ed
+1fe22200
+6fe1465f
+204058ed
+1fe22400
+20600000
+67e106eb
+6fe086ec
+c07fd8f3
+6fe086eb
+1fe17eff
+20600000
+6fe106eb
+1fe67e00
+202058f1
+da604636
+da4058f9
+20203755
+6fe2462a
+67e245c6
+2020552c
+6fe0c738
+c0005904
+c000d906
+c0015901
+c001d908
+580ea600
+67e2462a
+20600000
+5805e740
+20205902
+580927c0
+20205902
+58124f80
+20205902
+44d1c014
+704ac400
+70461700
+20403620
+5fffffff
+67e445c6
+58000000
+67e3c65c
+70473701
+20405303
+20404e42
+20205af7
+44d24014
+6fe0c737
+245a591b
+70473700
+20600000
+704ac401
+20405263
+6fe4470e
+c41e0000
+6848c668
+20404f0a
+6848c669
+20204f0a
+20405927
+6fe0c737
+243a5b02
+202035e8
+6fe245ff
+684a45fb
+98467c00
+2022d92d
+704143ff
+20600000
+70414300
+704141aa
+20600000
+6fe0c141
+67e0c656
+20600000
+6fe0c656
+67e0c141
+20600000
+793f8026
+70461300
+d8e00001
+20205832
+6fe4470e
+c307d948
+20405a69
+20404e14
+20345988
+6fe4470e
+c298594d
+c318d94d
+204051a7
+1a217e07
+6848cabe
+98467c00
+2022d965
+2020594d
+6fe0c73f
+243a5836
+20600000
+20404e14
+20345956
+70467800
+6fe1471a
+67e145f5
+7045f901
+2020350a
+6fe145ed
+67e145f5
+7045f904
+2020350a
+6fe0c678
+c0005988
+204053c1
+20405936
+70467801
+204067d5
+20204dfa
+20404e14
+20344e35
+20205544
+20404e14
+20740000
+6fe4470e
+c29f5571
+20600000
+20405a69
+7045f900
+d8e00001
+2040582e
+58000000
+67e145f5
+20405562
+7045a001
+6fe4470e
+c30a326f
+7045a002
+2020326f
+2040592b
+20405933
+6fe0c617
+243a590a
+6fe0c5f9
+c0015980
+c000d980
+c002598c
+c001d991
+20405936
+6fe0c73f
+243a5836
+6fe0c678
+c0004e35
+20600000
+6fe4470e
+c29f5952
+c2985952
+c31d5988
+6fe246a3
+684a46f8
+98467c00
+2022d965
+6fe145f3
+67e145f5
+7045f903
+2020350a
+6fe4470e
+c31f597a
+6fe0c716
+c000d97a
+20205959
+6fe4470e
+c31f597a
+c288d97a
+c288597a
+c289597a
+20205952
+6fe245a6
+67e245ff
+67e246a3
+20403530
+20405535
+20405a62
+2040538d
+70473d00
+70461300
+7045f900
+6fe245ff
+684a45fb
+98467c00
+20628000
+2040592b
+20405933
+20205960
+2040592b
+20405933
+2040538d
+2040539e
+20405a62
+20405535
+d8e00001
+20405832
+58000000
+67e145ef
+67e145f5
+67e0c613
+67e0c8fd
+67e0c5f9
+6fe245a6
+67e245ff
+67e246a3
+20205571
+20407de6
+202023e1
+44d2c014
+c6930000
+20404f26
+24740000
+6fe0c73b
+70473b00
+245a59ba
+6fe4470e
+c30a59c7
+6fe0c72b
+243a59dc
+2040538e
+6fe0c5a0
+c280d9d6
+6848c531
+6fe0c65c
+9841fe00
+67e0c65c
+6848c536
+6fe0c661
+9840fe00
+67e0c661
+6848c537
+6fe0c662
+9840fe00
+67e0c662
+7045a001
+da200007
+da40465c
+6fe14661
+207a0000
+202036bb
+7045a002
+da200009
+20206852
+6fe0c752
+247a0000
+204059e3
+2020363b
+d8e0000c
+20407cf1
+247a0000
+20405776
+204054c9
+204059ed
+20405050
+d8e0000c
+580000a0
+20207ce3
+6fe4470e
+c4140000
+20204fdb
+20406f4b
+202068c4
+6fe0c8a1
+c17f8000
+6fe14741
+207a0000
+6fe1471e
+68494741
+98460400
+6fe148bb
+98467e00
+202159fe
+6848c8a1
+20205ab6
+6848c8a1
+20205ab5
+da6048bd
+da405a03
+20203755
+44d34014
+6fe4470e
+c28e5a0b
+6fe0c6a2
+c0005a13
+c000da15
+c0015a11
+20600000
+6fe0c6a2
+c0005a15
+c000da17
+c0015a11
+c001da13
+20600000
+58000002
+20205a19
+58000004
+20205a19
+58000006
+20205a19
+58000008
+20205a19
+67e0c8b8
+7048ab04
+20405a59
+7048a901
+20205a66
+6fe0cac4
+207a0000
+6fe0c8be
+203a5a03
+67e0c8bd
+20600000
+78547c00
+6fe0c8ab
+1fe67c04
+24628000
+20207dbc
+6fe4470e
+c4118000
+c4020000
+6fe0cac4
+207a0000
+20405a24
+20740000
+6fe0c8ba
+203a5a47
+6848c64d
+18408401
+6048c64d
+6fe0c8b4
+98467c00
+24415a3f
+6fe0c8b5
+98467c00
+24215a43
+6fe4470e
+c2925aaa
+6848c8a5
+20205ab5
+70464d01
+6fe0c8ba
+1fe0ffff
+67e0c8ba
+6fe4470e
+c2925abc
+6848c8a5
+20205ab6
+6fe4470e
+c2915a43
+20405a52
+20205a32
+7048a800
+20405ace
+7048ab00
+6fe0c8b4
+1fe37e00
+67e0c8b5
+20600000
+6fe0c8b9
+67e0c8ba
+20600000
+6fe0c8ab
+c000da5c
+c0015a5e
+c001da60
+6fe0c8b2
+67e0c8b3
+20600000
+6fe0c8af
+20205a5a
+6fe0c8b0
+20205a5a
+6fe0c8b1
+20205a5a
+44d3c014
+6fe0c8ad
+67e0c8ae
+7048a900
+7048aa00
+7048a801
+20600000
+44d44015
+20405a7c
+7048ab01
+6fe0c8ac
+207a0000
+6fe0c8b6
+20205a78
+4769c03a
+6fe4470e
+c4108000
+20405a7c
+7048ab03
+6fe0c8ac
+207a0000
+6fe0c8b7
+67e0c8b8
+20600000
+7048ac00
+7048ab02
+476a403a
+7048b30a
+7048a801
+7048a901
+20205aa9
+6fe0c8a8
+207a0000
+6fe0c8a9
+c000da8e
+6fe0c8ae
+203a5a8a
+1fe0ffff
+67e0c8ae
+20205aaa
+7048a800
+704ac401
+20405a52
+20205abc
+44d4c015
+6fe0c8ab
+207a0000
+c0025a96
+20205a93
+6fe0c8ac
+c000da96
+20205a98
+6fe0c8b8
+203a5ab7
+da6048b3
+da405a9b
+20203755
+6fe0c8ab
+c0025aa3
+6fe0c8ac
+c000daa3
+20405a55
+6fe0c8aa
+c000dab9
+20205aa7
+6fe0c8b8
+1fe0ffff
+67e0c8b8
+20205a9f
+6fe0c8ab
+c0025ad8
+7048aa01
+44d54015
+6fe0c678
+c0005ab0
+c000dab2
+c0015ab4
+20600000
+6848c8a2
+20205ab5
+6848c8a3
+20205ab5
+6848c8a4
+20206ef1
+20206eed
+7048a800
+7048ab00
+6fe0c8ab
+c0025ad3
+7048aa00
+44d5c015
+6fe0c678
+c0005ac2
+c000dac6
+c0015aca
+20600000
+6848c8a2
+6fe4470e
+c3105ab6
+20206f05
+6848c8a3
+6fe4470e
+c3105ab6
+20206f05
+6848c8a4
+6fe4470e
+c3105ab6
+20206f05
+20405ac2
+20405ac6
+20405aca
+20405a43
+20205ad3
+7048aa00
+6fe4470e
+c292dabb
+6848c8a6
+20205ab6
+7048aa01
+6fe4470e
+c292daa9
+6848c8a6
+20205ab5
+6fe4470e
+c4020000
+6fe0c64d
+6848c8b5
+1fe67c02
+20215ae9
+6fe0c678
+c0005ae6
+20206820
+6fe4470e
+c38c0000
+202036aa
+6fe0c678
+c00036bb
+20206822
+6fe08009
+202035a3
+20405aec
+202036c8
+6fe14500
+c4048000
+6fe0c882
+2fe00603
+2420fdca
+204037a0
+20207dcc
+44d64015
+20403694
+24740000
+70473b01
+2040369e
+7048f100
+20405b7f
+6fe0c737
+245a4e42
+6fe445c6
+202035fa
+6fe0c8fa
+203a35ee
+20403694
+24740000
+6fe0c8f1
+7048f100
+1fe67c00
+2422db0f
+68494639
+18467c00
+2022db22
+6fe248e6
+203a5b22
+684a48f6
+284ffe1f
+2020db2e
+6fe248e6
+9840fe00
+684a48cc
+98460400
+604a48f6
+24215b25
+6fe1c61f
+98467e00
+24215b2c
+d8400600
+98467c00
+24215b2c
+7048f0fa
+20407d27
+604a40a9
+20202406
+20405b29
+6fe1c61f
+20205b1e
+18460400
+6fe1c61f
+9840fe00
+20205b1e
+58000000
+67e248f6
+20600000
+7048f101
+20600000
+dfffffff
+98465e00
+6fe248e6
+9de67e00
+20205b14
+20405b35
+20205916
+6fe0c8fa
+207a0000
+6fe0c62f
+c000db7b
+6fe0c8df
+203a5b7b
+1b227e00
+684b48e0
+67e348e0
+20407d12
+67e248e6
+6fe0c8f1
+247a0000
+6fe14639
+247a0000
+6fe248f6
+247a0000
+6fe248e6
+684a48cc
+18438400
+98467c00
+20215b7f
+684ac8ea
+9840fe00
+67e2c8ea
+6848c8df
+6fe0c8ef
+98467c00
+2022db55
+18408401
+6048c8df
+20600000
+7048df01
+d8400000
+6fe2c8ea
+604ac8ea
+6848c8ef
+9846fc00
+20407d64
+1807a200
+6fe248cc
+6848c8f0
+98460400
+1a227e00
+98467e00
+20215b6f
+1fe67e00
+1feb7e00
+6849c61f
+98408400
+44d6c015
+6fe1c8dc
+da201800
+9a20fe00
+98467c00
+24215b79
+6049c61f
+20600000
+1feb0400
+6fe1c61f
+98460400
+44d74015
+6fe1c8dc
+da201800
+9a267e00
+98467c00
+20215b79
+20205b6d
+67e1c61f
+20600000
+7048df01
+1b227e00
+67e348e0
+20600000
+58000000
+67e0c8df
+67e2c8ea
+20600000
+6fe4470e
+c4060000
+704676a5
+20600000
+20405b8b
+6fe0c676
+c1ad0000
+202078f6
+44d7c015
+6848884a
+20406ee0
+2420dba4
+6fe0c676
+c12d0000
+7046765a
+58000000
+67e145ef
+67e145f5
+70409400
+2040712c
+20405936
+204053c3
+7855fc00
+2040538d
+58005bd7
+67e10837
+6fe0ca95
+67e08839
+d8c04a96
+d8a0083a
+df200009
+20407cdc
+20207902
+6fe0c677
+c1528000
+704676a5
+7008ec00
+7006e700
+7008de00
+6ff10050
+79207e0a
+67f10050
+70409401
+2040712c
+20205801
+6ff08c01
+67e0c675
+c4038000
+20405bc2
+24740000
+20404f26
+24740000
+6ff08c25
+c3810000
+20205bba
+6ff08c01
+c4038000
+44d84016
+6fe4470e
+c30a6856
+6fe0c72b
+c000e85b
+20206856
+20407dbe
+684a474b
+1c427e00
+98467c00
+24415bd1
+1fe22400
+6fe2474b
+6848c674
+98408400
+1a427e00
+98467c00
+24610000
+793ffe1c
+67e2474b
+20207dbc
+20628000
+79207e1c
+20600000
+58000000
+67e2474b
+20600000
+44d8c016
+20405be1
+20405bea
+20405be6
+6fe0ca9f
+207a0000
+d8c04a9f
+d8a007fb
+df20001e
+20207cdc
+704677c0
+6fe4470e
+c40a0000
+7046775a
+20600000
+20407956
+20403d20
+6fe0c677
+20203d2a
+20405bd4
+6fe4470e
+c28edbf1
+c28f5bf3
+c28fdbf5
+70467420
+20600000
+70467410
+20600000
+70467408
+20600000
+70467404
+20600000
+58005bfa
+67e143e4
+20600000
+20405bfc
+20600000
+44d94016
+da200000
+684a49f2
+1c422400
+1a427e00
+98467c00
+244177f4
+1a427e00
+18408408
+98467c00
+24215c0e
+1a20a201
+1a217e0f
+243a5c03
+da200000
+20405c13
+644249f2
+20600000
+1a227e00
+207a0000
+184085f8
+793f841c
+604a49f2
+67e0c9f6
+6fe0c9f6
+207a0000
+1fe0ffff
+67e0c9f6
+6fe149f7
+20407d7b
+20205c14
+44d9c016
+6fe0c9fb
+207a0000
+704a0000
+704a1700
+20405d0a
+20405ca3
+6fe0ca22
+247a0000
+20405d1b
+204023e1
+44da4016
+20405c2c
+20405c32
+20405c3f
+20405c77
+20205c7a
+da204a0d
+6fe0ca00
+9a20a200
+622149fd
+e8408011
+20206ef1
+6fe0c9fb
+207a0000
+6848ca00
+98467e00
+98007200
+da204a03
+6fe0ca00
+9a20a200
+efe08011
+20405cf3
+1a20a201
+c2005c3a
+20600000
+7049ff00
+6fe0c9fb
+6848ca00
+98467e00
+67e0ca19
+da204a03
+6fe0ca00
+9a20a200
+e8408011
+6048ca6d
+20405ce4
+24740000
+2040dc5c
+1a20a201
+6fe0c9ff
+1fe0fe01
+67e0c9ff
+6848ca17
+18408401
+6048ca17
+6848ca19
+98467c00
+24215c47
+6fe14a01
+207a0000
+67e14a67
+58000000
+67e14a01
+20600000
+62214a65
+6fe0c9ff
+1fe20e00
+6848ca01
+f9200400
+6048ca01
+6fe0ca00
+1fe20e00
+6848ca02
+f9200400
+6048ca02
+20405c6a
+6a214a65
+20600000
+68494a01
+da204a23
+efe10011
+207a0000
+98467c00
+2042dc72
+1a20a202
+20205c6c
+68e0ca17
+6fe44a55
+f9207e00
+67e44a55
+20600000
+6fe149fd
+efe0803f
+20205cf3
+6fe0ca00
+1fe0fe01
+67e0ca00
+6848c9fc
+98467c00
+24215c26
+6fe14a67
+203a5c8e
+67e14a1c
+6fe0ca1e
+243a5ca0
+6fe0ca1b
+c1008000
+704a1b01
+704a1e01
+44dac016
+20405c9c
+6fe14500
+c3858000
+20205db7
+6fe0ca1b
+c1000000
+704a1b00
+6fe14500
+c285dc96
+6fe08da0
+243a5c96
+20405db9
+58000000
+67e44a55
+67e0ca1e
+704a1f00
+da604bef
+2020618e
+20405d4c
+58000000
+67e14a1c
+20600000
+58000000
+67e14a67
+20600000
+da200000
+da400000
+18007000
+6fe0ca18
+98007200
+da604a0d
+20405d0b
+20405d10
+efe08013
+20405cf3
+20405d12
+20405d0d
+e8408013
+6048ca6d
+20405ce4
+24740000
+1a420e00
+2040dcdc
+2440dcde
+1a60a601
+1a40a401
+c2005ca9
+1a227e00
+203a5cc5
+67e0ca21
+6fe0ca1a
+c1008000
+704a1a01
+704a2201
+44db4016
+20405ccf
+6fe14500
+c3858000
+20205db7
+6fe0ca1a
+c1000000
+704a1a00
+6fe14500
+c285dccd
+6fe08da0
+243a5ccd
+20405db9
+704a2200
+20205c99
+20405cd2
+704a2100
+20600000
+6848ca21
+da204a4b
+da400000
+efe08011
+207a0000
+98467c00
+2022dd3f
+1a20a201
+1a40a401
+20205cd5
+f9202200
+20600000
+f93fa200
+20600000
+704a6b01
+20600000
+704a6c01
+20600000
+20407dbe
+704a6b00
+704a6c00
+6848ca6d
+20406ee0
+2040dce0
+200004b0
+6848ca6d
+20406ee0
+2040dce2
+6fe0ca6b
+6848ca6c
+98467c00
+24628000
+20207dbc
+67e0ca6e
+20405d07
+6fe0ca6e
+da600001
+1fe6fc02
+20407d64
+18078400
+18077e00
+245a5d05
+18427e00
+d8a0814d
+37d98200
+37d98200
+98a08a00
+efe08005
+9a61fe00
+e7e08005
+202023c4
+da600010
+20600000
+1fe1fe80
+d8400000
+20206f1c
+20206f4e
+1a627e00
+20205d15
+20405d18
+1fe22600
+20600000
+1a227e00
+20205d15
+20405d18
+1fe22200
+20600000
+1f00f001
+1fe25e00
+20600000
+1de27e00
+1f00f1ff
+20600000
+20405d21
+20405d24
+20405d0a
+580000f0
+67f08141
+202023c4
+6fe0ca18
+da204a0d
+20205d28
+6a40ca20
+6fe0ca18
+da204a0d
+20205d2e
+1fe27200
+e8408011
+20406f0b
+1a20a201
+c2005d29
+20600000
+1fe27200
+e8408011
+18437e00
+d8a00016
+98a08a00
+20405d3a
+e8408005
+9841fe00
+e7e08005
+1a20a201
+c2005d2f
+20600000
+1a427e00
+284c0000
+20608000
+1ff27e00
+20600000
+44dbc016
+1a427e00
+6848cc07
+9840fe00
+da604bf2
+9a60a600
+efe08013
+67e0ca1f
+1fe0ffff
+1feffe03
+da604bb0
+9a60a600
+20205d59
+68494a1c
+da204a23
+da400000
+efe10011
+207a0000
+98467c00
+2022dd56
+1a20a202
+1a40a401
+20205d4f
+44dc4017
+1a427e00
+20205d43
+44dcc017
+6fe0cc0b
+243a5d5e
+20405d61
+2020618e
+6fe0cc09
+207a0000
+20205d5c
+efe08013
+1a60a601
+c0005d68
+c000dd6a
+c0015d6c
+c001dd6e
+20600000
+704a6f00
+20600000
+704a6f01
+20600000
+704a6f02
+20600000
+704a6f03
+20600000
+44dd4017
+204061a2
+24740000
+67e0cc08
+6fe0ca1f
+205a5e05
+6fe14500
+c304dd7e
+6fe0ca6f
+c0005d88
+c000dd9c
+c0015da9
+c001dd7e
+20600000
+6fe0ca1f
+c0005e05
+6fe0cc08
+1fe0ffff
+1feffe03
+d8404b80
+98408c00
+efe10006
+e8408006
+20205e01
+20402a06
+247a0000
+6fe0cc08
+1fe0ffff
+1feffe03
+d8404b10
+98408c00
+df200003
+d8a0064e
+20407cdc
+704c0a03
+68494c0e
+6fe0cc09
+207a0000
+6a20cc0a
+20402dcc
+6848cc0a
+18427200
+d8c0064e
+20207cdc
+20402a06
+247a0000
+6fe0cc08
+1fe0ffff
+1feffe04
+d8404b40
+98408c00
+df200004
+d8a0064e
+20407cdc
+704c0a04
+68494c12
+20205d94
+20402a06
+247a0000
+6fe0cc08
+1fe0ffff
+1feffe0a
+d8404a70
+98408c00
+efe10006
+df200008
+d8a0064e
+20407cdc
+704c0a08
+68494c0c
+20205d94
+da200000
+202077a8
+da200000
+202077ad
+67e10d96
+60488d98
+18007000
+20405dcd
+20405dd9
+6fe08d96
+20405de5
+6fe08d97
+20405de5
+6fe08d98
+20405de5
+6fe08d98
+1fe47e00
+20405de5
+5800023a
+20405dde
+58000001
+20205ddc
+58000000
+204070bc
+20407103
+20405dd3
+6fe0ce33
+20207100
+da20009d
+da40009d
+dfe00000
+204070de
+70809a00
+20600000
+58002328
+20405dde
+58001194
+70809a00
+20205de0
+70809a01
+20205de0
+207a0000
+1fe0ffff
+20000008
+243a5de1
+20600000
+df200008
+20405d15
+20405dec
+20405d18
+1fe37e00
+c2005de6
+20600000
+c3005def
+c2805df2
+20600000
+da20023a
+da400226
+20205df5
+da20023a
+da400690
+20205df5
+1a227e00
+20405dde
+1a427e00
+20205ddc
+58002328
+20405dde
+580008ca
+20405ddc
+58000230
+20405dde
+58000001
+20205ddc
+20405dbb
+20405e0c
+700d9410
+20600000
+20405e10
+20407103
+6fe0ce33
+d840003e
+20206f1d
+d840003f
+20206f1d
+5800002b
+67e08d95
+67e08d94
+20600000
+58000000
+20205e0d
+6ff10120
+68590066
+98467e00
+24215e17
+20600000
+68590120
+6ff10066
+98460400
+58000100
+98467e00
+20600000
+6ff10066
+e841803f
+60488dd2
+184c8400
+60488dd3
+184c8400
+60488dd4
+6fe08dd2
+1fe17e80
+c0c05e28
+20205e33
+6fe08dd2
+67e08dd5
+6ff10066
+68590064
+98467e00
+20215e5b
+6ff10066
+1fe0fe01
+67f10066
+700dd801
+20600000
+6fe08dd4
+1fe17e80
+c0405e46
+6fe08dd3
+1fed7e00
+1fe37e00
+68488dd2
+1841047f
+9841fe00
+67e10dd5
+6ff10066
+68590064
+98467e00
+20215e5b
+6ff10066
+1fe0fe02
+67f10066
+700dd802
+20600000
+6fe08dd4
+1fe17e7f
+1ff07e00
+1fe32200
+6fe08dd3
+1fed7e00
+1fe37e00
+68488dd2
+1841047f
+9841fe00
+9a21fe00
+67e18dd5
+6ff10066
+68590064
+98467e00
+20215e5b
+6ff10066
+1fe0fe03
+67f10066
+700dd803
+20600000
+d8400a88
+9840fe00
+67f10066
+20600000
+58000b88
+67e10dcc
+67e10dd0
+20600000
+20405e6c
+6fe08dd5
+68490ddc
+9840fe00
+67e10ddc
+58000000
+67e18dd5
+67e08dd8
+20600000
+6fe08db7
+1fe67c14
+20628000
+1fe0fe01
+67e08db7
+6fe08dd5
+68490db5
+e7e08002
+18408401
+60490db5
+20600000
+6ff20100
+684a0dde
+98467e00
+20600000
+684a0de6
+98467c00
+20600000
+6ff20100
+67e20dde
+5800026c
+67e20de6
+20600000
+6fe08d93
+207a0000
+1feffe04
+1fe0fff6
+1fe27200
+67e08c90
+d8c00b88
+18c08c06
+d8a00c93
+20207cdc
+704db528
+6fe14df2
+67e14db6
+58000a24
+67e14db8
+6fe24dad
+67e24dc0
+6fe24db1
+67e24dc4
+6fe0cdc4
+1febfe00
+d8404c49
+98408400
+efe20002
+67e24dbc
+704dd001
+20405f3c
+6fe24dd1
+684a4dc0
+98467e00
+67e24dd9
+20405ed7
+20405ede
+704dbb00
+6fe24dbc
+1fe97e00
+67e24dc8
+20405ee5
+6fe24dbc
+1fe37e00
+67e24dbc
+20405ef3
+6fe24dbc
+1fe37e00
+67e24dbc
+20405efb
+20405f03
+20405f0e
+6fe0cdbb
+6848cdba
+9841fe00
+67e0cdbb
+6fe0cdbb
+d8404c39
+98408400
+efe08002
+20405f49
+684a4dc4
+9840fe00
+67e24dc4
+20405f1b
+20405f20
+6fe24dc4
+1febfe00
+d8404c49
+98408400
+efe20002
+67e24dbc
+20405f2a
+6fe0cdd0
+d8400001
+9842fe00
+67e0cdd0
+6fe0cdb5
+1fe0ffff
+67e0cdb5
+243a5e9d
+6fe0cdd0
+205a5f3a
+6fe24dc0
+67e24dad
+6fe24dc4
+67e24db1
+20600000
+6fe24dd9
+c28fdedc
+58000000
+67e0cdba
+20600000
+58000008
+20205eda
+6fe0cdba
+243a5ee1
+20600000
+6fe24dd9
+1fe67e00
+67e24dd9
+20600000
+6fe24dd9
+684a4dbc
+98467e00
+c38f8000
+704dbb04
+6fe24dd9
+684a4dbc
+98467e00
+67e24dd9
+6fe24dc8
+684a4dbc
+9840fe00
+67e24dc8
+20600000
+6fe24dd9
+684a4dbc
+98467e00
+c38f8000
+6fe0cdbb
+1fe1fe02
+67e0cdbb
+20205eea
+6fe24dd9
+684a4dbc
+98467e00
+c38f8000
+6fe0cdbb
+1fe1fe01
+67e0cdbb
+20205eee
+6fe0cdba
+203a5f0a
+6fe24dc0
+684a4dc8
+98467e00
+67e24dc0
+20600000
+6fe24dc0
+684a4dc8
+9840fe00
+20205f08
+6fe24dc0
+d8407fff
+98467e00
+c30fdf17
+6fe24dc0
+d85f8001
+98467e00
+c28fdf19
+20600000
+58007fff
+20205f08
+5fff8001
+20205f08
+6fe24dc4
+d8400000
+98467e00
+c28fdf25
+20600000
+6fe24dc4
+d8400058
+98467e00
+c30fdf28
+20600000
+58000000
+67e24dc4
+20600000
+58000058
+20205f26
+6fe0cdd0
+203a5f30
+6fe0cdbb
+1fe17e0f
+67e24dd5
+20600000
+6fe0cdbb
+1ff27e00
+1fe17ef0
+684a4dd5
+9841fe00
+68494db8
+e7e08002
+18408401
+60494db8
+20600000
+6fe24dd5
+20205f35
+68494db6
+efe10002
+18408402
+60494db6
+20405f43
+67e24dd1
+20600000
+c287df45
+20600000
+d840ffff
+18500400
+9842fe00
+20600000
+c283df4b
+20600000
+d85fffff
+184d0400
+20205f47
+da200014
+68494df4
+20402dcc
+d8c04dde
+df200014
+20207cdc
+70064e01
+704c0a01
+68494df8
+20205d94
+70064e00
+20205f55
+da200014
+68494df6
+20205f50
+58000221
+67e1864e
+704c0a03
+68494dfa
+20205d94
+5800cccc
+20205f5e
+44ddc017
+1a220c00
+efe08006
+c1dd0000
+efe08006
+67e0ce51
+c0085f77
+c008df7f
+c00adf86
+c00b5fb2
+c00bdfbf
+c00c5fcd
+5fffffff
+67e14e35
+58000000
+67e24e43
+67e14e37
+704e5200
+20600000
+da200005
+20405fc4
+6fe14e48
+e7e10005
+704e6501
+6fe44e5c
+67e442d5
+20202e71
+da200007
+20405fc4
+6fe14e4a
+e7e10005
+6fe14e4c
+e7e10005
+20600000
+efe08006
+67e0ce47
+c0005f92
+da200004
+704e5203
+20405fc5
+6fe0ce47
+20207dce
+da200004
+20405fc4
+6fe0ce47
+20207dce
+20405f8e
+20405f70
+58000000
+67e1ce6b
+704e6601
+58000000
+d8400010
+da200c8c
+20406c43
+20405fa8
+6a21ce68
+df200009
+18007000
+2040608e
+6221c430
+2040609f
+20406bee
+204060a1
+58001000
+9a20a200
+c2005f9f
+20600000
+4778c03e
+6849ce75
+6049ce68
+6049ce40
+6fe08c8c
+c1300000
+6849ce72
+6049ce68
+6049ce40
+20600000
+68494337
+184085f8
+6fe14e37
+9840fe00
+67e14e37
+18427200
+1a220c00
+18c08c05
+20406052
+6fe14e35
+1fe0fe01
+67e14e35
+20600000
+20405fb2
+704e5200
+704e5117
+da200003
+20205fc5
+704e5200
+68494e4f
+20402dcc
+580000ab
+e7e08005
+6fe0ce52
+e7e08005
+6fe0ce51
+20207dce
+18007000
+20406097
+20405ff2
+704e6600
+58000000
+67e1ce6b
+67e24e43
+20406007
+20406099
+18c08c01
+efe20006
+67e2064e
+efe20006
+67e20652
+6fe2064e
+684a4e37
+98467c00
+2422dfee
+6fe24e43
+684a0652
+98467c00
+2422dff0
+20406070
+704e6402
+da20000c
+20405fc5
+6fe0ce47
+e7e08005
+6fe24e37
+e7e20005
+6fe24e43
+e7e20005
+20600000
+704e5205
+20205fe5
+704e5207
+20600000
+6fe0ce66
+207a0000
+20406001
+20610000
+68494e6e
+204060a7
+18427200
+d8a00c8c
+20406061
+2040608e
+204060a9
+204060a7
+20406041
+204060a9
+2020603d
+6fe14e6e
+d8400100
+98467c00
+20600000
+df200100
+20206017
+6fe14e37
+68494e6b
+98467e00
+20628000
+20405d15
+2040601d
+20405d18
+20406013
+6fe24e43
+9840fe00
+67e24e43
+20206007
+d8400100
+98467c00
+20216005
+1fe27200
+d8c00c8c
+d8400000
+efe08006
+98408400
+c2006019
+20600000
+d8400100
+98467c00
+2021602b
+20405d15
+1fe27200
+20406026
+20405d18
+1fe20400
+2020603d
+6fe1ce68
+6a41ce6b
+9a40fe00
+da200c8c
+20206c43
+d8400100
+20406026
+d8400100
+2020603d
+6fe0ce66
+245a6032
+20600000
+6fe0ce66
+207a0000
+20406001
+24610000
+df200100
+d8a00c8c
+20406061
+2040608e
+d8400100
+20406041
+d8400100
+6fe14e6b
+9840fe00
+67e14e6b
+20600000
+6fe1ce68
+6a41ce6b
+9a40fe00
+da200c8c
+20206c29
+580006ef
+68494e70
+184085ff
+1fe20a00
+18a08bf8
+e7e10005
+9840fe00
+e7e10005
+98467e00
+e7e10005
+e7e10005
+20600000
+20406097
+44de4017
+6fe14e6e
+9f20fe00
+67e14e6e
+580006ef
+204060ac
+20406099
+204060c0
+6fe14e6e
+68494e70
+98467c00
+20416060
+20600000
+20600000
+2040609b
+6fe14e6e
+9f267e00
+67e14e6e
+580006ef
+204060b6
+2040609d
+18627e00
+98467c00
+2022a33e
+efe08003
+e7e08005
+c200606b
+e0610011
+20600000
+20406079
+58000000
+20406085
+44dec017
+6fe08c8c
+c030607d
+c0786077
+6fe1ce72
+2020607e
+58000000
+d8400100
+da200c8c
+20206c43
+6fe1ce75
+1fe0fe02
+1ff0fe00
+67e10c8c
+d8400100
+da200c8c
+58000000
+20206c29
+67e1c430
+2040608e
+20406c16
+20406c1c
+da2001bc
+70808204
+6fe1c430
+d8400081
+20206c36
+580001bc
+67f10084
+580001c1
+67f10086
+70808300
+58000005
+20406bcd
+c280608e
+20600000
+18c27e00
+20205d15
+20405d18
+20207c6a
+18a27e00
+20205d15
+20405d18
+20207c67
+204060a5
+20205d10
+20405d12
+20405d18
+1fe27200
+20600000
+1f227e00
+20205d15
+18427e00
+20205d15
+20405d18
+1fe20400
+20600000
+1fe0fff8
+e941003f
+1fe0fe02
+ea01003f
+1fe0fe02
+e841003f
+1fe0fe02
+e861003f
+1fe22200
+20600000
+1fe0fff8
+e941003f
+1fe0fe02
+ea01003f
+1fe0fe02
+e861003f
+1fe22200
+1fe0fe02
+e841003f
+20600000
+efe08006
+e7e08003
+c20060c0
+e0610011
+18627e00
+98467c00
+2022a33e
+20600000
+20407384
+20758000
+58006143
+67e143e4
+580060f3
+67e143e6
+580061a7
+67e143e8
+5800612a
+67e143ec
+58006182
+67e1453b
+204060dc
+44df4017
+204061b3
+6fe0c531
+c00060ea
+6fe0c532
+67e0c503
+202061be
+58006147
+67e143de
+58006145
+67e143e0
+5800615d
+67e14536
+580061b7
+67e14538
+70416007
+20402948
+204061aa
+2040705b
+2040789d
+2020779a
+704503ff
+70453301
+2020615d
+6fe0c533
+c001377d
+20406945
+6fe0c458
+243a377d
+2020377f
+1a627e00
+c00a60fc
+c00ae100
+c01fe103
+c020610b
+c00861d3
+c0166111
+c016e11c
+20600000
+2040614a
+58000000
+67e1450f
+2020379a
+2040789d
+70450800
+2020615d
+2040789d
+70450801
+204065b3
+204037a0
+243a632b
+6fe44ecb
+67e442d5
+20202e71
+6fe14340
+c1000000
+6fe44521
+207a0000
+67e442d5
+20202e71
+6fe0c531
+c1000000
+6fe0c533
+c1808000
+20406117
+20203798
+70469c01
+df20000b
+d8a0469d
+d8c04686
+20207cdc
+6fe0c531
+c1000000
+6fe0c533
+c000e121
+202061cf
+6fe0c69c
+c1808000
+70469c00
+6fe14500
+c284b79a
+df20000b
+d8c0469d
+d8a04686
+20207cdc
+2040612d
+20406134
+2020613e
+da60452f
+da406130
+2020375c
+70453302
+2040379a
+2040616b
+202061bb
+da6046a9
+da406137
+20203755
+6fe14500
+c284e1bb
+6fe0c686
+c000e1bb
+c00261bb
+c002e1bb
+2020379c
+6fe0c533
+c1808000
+da60450f
+da40614e
+2020375c
+20406193
+2020708b
+20406f32
+2020707f
+704503ff
+20406f32
+20207388
+6fe1452b
+67e1452d
+67e1452f
+2020378a
+6fe0c533
+c1808000
+6fe14500
+c3848000
+6fe14529
+67e1452d
+67e1452f
+6fe1450b
+204061e4
+20403796
+6fe24515
+67e24689
+6fe14500
+c3858000
+2020378c
+6fe0c533
+c1808000
+6fe1450f
+6849450d
+6049450f
+247a0000
+6fe14509
+204061e4
+20403796
+6fe24511
+67e24689
+6fe14500
+c3858000
+2020378c
+6fe14500
+c284b794
+2020614a
+20407dbe
+6fe14500
+c284e172
+20600000
+6fe0c508
+207a0000
+20207dbc
+20407dbe
+6fe14500
+c3848000
+20207dbc
+2020615d
+78567c00
+6fe1452d
+67e1452f
+20406175
+20346179
+2040616e
+24740000
+20207dc0
+2040617a
+24760000
+1a227e00
+203a6189
+20403798
+da60453f
+2020618b
+2040379a
+da60454e
+dfe00005
+98effe00
+9a60a600
+efe08013
+207a0000
+2040619f
+1a60a601
+2020618e
+6fe14500
+c284e196
+20600000
+20402a06
+247a0000
+204061a2
+24740000
+1fe0ffff
+1feffe05
+d840455d
+98408c00
+202061e8
+67e0864e
+da20064e
+202078a2
+da20064e
+204078ba
+24740000
+6fe0864e
+20600000
+6fe1439c
+c00c6103
+20600000
+7046a802
+58200008
+67e24519
+592c0005
+e7e20005
+7042e317
+5800001b
+67e14334
+20202a1f
+df200028
+d8a0455d
+d8c097bd
+20207cce
+da200000
+da604691
+204077b8
+2040616b
+6fe0c6a8
+67e0c6a9
+20600000
+58000000
+204061ca
+7044fb01
+20407764
+2040776e
+6fe0c6af
+203a61c7
+6ff08132
+c28261d6
+6fe14500
+c3860000
+2020379c
+68494447
+e7e08002
+efe08005
+67e0c502
+20600000
+6fe14447
+efe0803f
+c1800000
+2020379c
+68494447
+efe08002
+c000e1de
+58000001
+68494447
+e7e08002
+18408c02
+efe08006
+e7e08002
+efe10006
+20207d7b
+58000002
+204061ca
+18408c05
+efe10006
+203a379c
+20207d7b
+67e140a4
+1fe0fffc
+67e1438d
+20600000
+efe08006
+1fe22200
+e8410006
+20407c6f
+20402dcc
+1a227200
+20407c69
+20207cdc
+58009684
+67e142f9
+20600000
+6fe146aa
+67e1453d
+6fe0c6ac
+67e0c688
+67e0c693
+6fe0c6ad
+67e0c531
+6fe0c6ae
+67e0c532
+58000002
+67e1453f
+58000001
+67e14544
+58000006
+67e1454e
+67e14553
+58004533
+67e14447
+58201400
+67e1c533
+70409401
+58000100
+67e140a4
+7040a608
+7040c005
+7040c102
+58000096
+67e14511
+e7e10005
+58000296
+67e14515
+e7e10005
+38000010
+38048008
+380ac000
+380c0004
+67e44521
+70450501
+58004686
+67e14506
+58000000
+67e14686
+380001a0
+38040068
+38080000
+380c0000
+67e44689
+58000301
+67e14691
+380001a0
+380400e8
+38080000
+380c0000
+67e44694
+5800000e
+67e14509
+58000140
+67e1450b
+67e1438d
+58000050
+67e1450d
+70439707
+70438c00
+380000fb
+3806c212
+3808800f
+380c0021
+67e443c4
+38000bb8
+380402ee
+67e24529
+580045b7
+67e14404
+58002001
+67e145b7
+70434c1f
+38010102
+380480c1
+38098120
+380c640c
+67e4c34d
+380003c1
+e7e10005
+70436c1f
+3802090d
+38074c15
+380a8532
+380dd1d5
+67e4c36d
+38026574
+3804001c
+e7e18005
+5800453a
+67e14443
+70453a02
+580045dc
+67e14401
+70440305
+6fe0c6b0
+c00061f0
+c000e283
+20600000
+6fe34eab
+67e3453d
+70453a06
+5800453a
+67e14443
+20600000
+6fe3ceab
+67e3c53d
+70453a07
+5800453a
+67e14443
+20600000
+6fe44eab
+67e4453d
+70453a08
+5800453a
+67e14443
+20600000
+6fe0ceaa
+c0036259
+c003e25f
+c0046265
+20600000
+44dfc017
+6fe44edb
+67e44529
+58000096
+67e1450d
+6fe3cee5
+67e3c686
+6fe3ceec
+67e3c691
+6fe24ef3
+67e24511
+6fe24ef7
+67e24515
+5800000e
+67e14509
+58000140
+67e1450b
+67e1438d
+20600000
+580047a7
+67e142f9
+20600000
+20407384
+20758000
+2040626b
+20406270
+580062c1
+67e143e4
+5800631a
+67e143e6
+58006548
+67e143e8
+580062f2
+67e143ec
+5800634d
+67e1453b
+580062ab
+67e143de
+580062a9
+67e143e0
+5800615d
+67e14536
+580061b7
+67e14538
+70416007
+20402948
+204061aa
+2040705b
+2040789d
+2040779a
+6fe14f12
+67e14334
+6fe44521
+67e44519
+204062cb
+44e04018
+202060d7
+20406f32
+2020707f
+704503ff
+20406f32
+204062af
+20207388
+6fe0c6ad
+207a0000
+6fe0ceaa
+1fe27200
+da20453d
+efe08011
+6848c6ae
+98467c00
+2022e2bc
+1fe67cff
+2022e2bc
+1fe20400
+204062bf
+1a20a201
+c20062b4
+20600000
+79200407
+20206ed7
+204062d8
+d8e00009
+20407cf1
+247a0000
+58000020
+d8e00009
+20407ce3
+78547c00
+2040707f
+202063b7
+5800002b
+1feffe0a
+d8404c4b
+9840a200
+1a20a203
+d8400fff
+e0408011
+1a20a20b
+dfe00fff
+98467e00
+1ff27e00
+e7e10011
+20600000
+6fe14500
+c284e2dd
+d8a045b9
+df200023
+20207ca3
+20402a06
+247a0000
+204078ea
+207a0000
+684a4959
+1c427e00
+98460400
+20628000
+242162e9
+6fe0c958
+98467c00
+20610000
+1c427e00
+67e24959
+204061a2
+24740000
+1fe0ffff
+1feffe0a
+d8404c4b
+98408c00
+202061e8
+204066d9
+204065ef
+204065dd
+204062f9
+2040630e
+2040612d
+20206314
+da604e88
+da4062fc
+20203755
+204078ea
+247a0000
+6fe146bf
+247a0000
+204065b3
+207a0000
+18e27e00
+2fe00e04
+2020e30a
+18e27e00
+2fe00e01
+2020e30c
+da604e7d
+2020618e
+da604e96
+2020618e
+da604ea0
+2020618e
+da604c48
+da406311
+20203755
+df20000a
+d8a04967
+20207ca3
+da6046a9
+da406317
+20203755
+6fe14500
+c284e1bb
+2020379c
+1a627e00
+c00a633c
+c00ae337
+c018e32e
+c0206322
+c1200000
+c019654b
+202060f3
+6fe14340
+c1000000
+6fe44521
+207a0000
+204065b3
+243a632b
+6fe44ecb
+67e442d5
+20202e71
+6fe44ed3
+67e442d5
+20202e71
+704e8901
+20406606
+6fe14eff
+67e14e75
+68494f01
+58000fff
+98467e00
+67e14e77
+20600000
+704e7200
+704e8900
+204063f6
+20406348
+20206100
+1c427e00
+67e24959
+204065ac
+202060fc
+78567c00
+6fe1452d
+67e1452f
+20406175
+20346179
+2040616e
+24740000
+20207dc0
+704e8c00
+20600000
+18e27e00
+c1808000
+20206354
+20406340
+24760000
+1a227e00
+203a637f
+44e0c018
+6fe0cf2a
+243a634a
+704c4901
+20403798
+20406374
+204063a9
+20216348
+18e27e00
+6848ce8c
+98467c00
+2442e36e
+18e27e00
+67e0ce8c
+6848ce8f
+98467c00
+2022e36c
+6fe0ce90
+243a6367
+204065b5
+dfe0000a
+202063a2
+20406602
+18e27e00
+c000e364
+2040648c
+2020643d
+704e8d01
+2020643d
+44e14018
+6fe0ce90
+203a6300
+18e27e00
+c000e300
+20600000
+dfe0000a
+98effe00
+da60495d
+9a60a600
+1c427e00
+e7e20013
+1a60a604
+efe08013
+1fe0fe01
+e7e08013
+20600000
+44e1c018
+6fe0ce90
+205a6393
+dfe0000a
+98effe00
+da60495d
+9a60a600
+e8420013
+18467c00
+20628000
+1c427e00
+98460400
+244177f4
+1a608c09
+efe08006
+243a63ae
+1a60a605
+1c427e00
+e7e20013
+20600000
+6fe0cf2a
+243a3798
+2020379a
+1a608c04
+efe08006
+20206399
+204063b4
+6fe0ce90
+243a63a5
+204063a9
+20216348
+204065bb
+18e27e00
+c001e5c3
+dfe0000f
+98effe00
+9a60a600
+2020618e
+18e27e00
+c000e39c
+c001e39c
+20600000
+204078f2
+e8408006
+98467e00
+1fe67c0a
+20600000
+704e8701
+204063b4
+204065ec
+da604ab3
+dfe00003
+202063a2
+df20000a
+1a620a00
+20207ca3
+6fe146bf
+67e14445
+20406407
+6fe14445
+67e146bf
+d8e00000
+6fe0c53a
+1fe27200
+da60495d
+1f227e00
+67e10656
+1a627e00
+67e1066a
+18e27e00
+67e10658
+204063fd
+6fe1066a
+1fe22600
+6fe10658
+1fe20e00
+204063d4
+6fe10658
+1fe08e01
+6fe1066a
+1fe0a60a
+6fe10656
+1fe27200
+c20063c0
+20600000
+efe20013
+207a0000
+1fe20400
+1c427e00
+98460400
+24610000
+580009c4
+98467c00
+20610000
+1c427e00
+e7e20013
+1a60a609
+58000001
+e7e08013
+6fe0ce87
+207a0000
+704e8700
+44e24018
+204065d8
+6fe0ce8e
+c00063eb
+c000e3ee
+20600000
+204063f8
+dfe00003
+202063a2
+18e27e00
+6848ce8f
+98467c00
+2422e3eb
+6fe0ce90
+79407e00
+67e0ce90
+247a0000
+704e9000
+2020379a
+da604a98
+204065b3
+207a0000
+da604bfd
+20600000
+1a60a405
+efe20012
+207a0000
+1fe20400
+1c427e00
+98460400
+244177f4
+580003e8
+98467c00
+20206396
+6fe14443
+efe0803f
+207a0000
+58000000
+67e106cf
+20407067
+24347793
+20407791
+78547c00
+6fe0c38c
+247a0000
+44e2c018
+6fe0ce8e
+c000e418
+20406472
+20406425
+20740000
+2040641e
+6fe106cf
+67e106d6
+7006d800
+18000e00
+2020709f
+6fe0ce8c
+6848ce8f
+98467c00
+2022b798
+6fe0ce90
+243a379a
+20600000
+d8e00000
+da404ace
+dfe00002
+98effe00
+9a40a400
+efe10012
+207a0000
+684906cf
+9842fc00
+2022e431
+18e08e01
+20206426
+67e14ada
+20403798
+da604adc
+dfe0000a
+98effe00
+9a60a600
+20406439
+2020647d
+20406602
+efe08013
+207a0000
+2040648c
+20406602
+204065b3
+243a6444
+dfe0001c
+2040619f
+dfe0001d
+2020619f
+20406453
+2040645e
+20406468
+dfe00029
+2020619f
+6848ce71
+204065b3
+207a0000
+6848ce74
+18408401
+6fe0ce8d
+207a0000
+6848ce71
+704e8d00
+20600000
+20406449
+18427e00
+207a0000
+67e0ce7a
+dfe0002b
+2040619f
+6fe0ce7a
+1fe0ffff
+67e0ce7a
+207a0000
+20206457
+6fe0ce73
+207a0000
+67e0ce7b
+dfe0002c
+2040619f
+6fe0ce7b
+1fe0ffff
+67e0ce7b
+207a0000
+20206461
+6fe0ce74
+207a0000
+67e0ce7c
+dfe0002d
+2040619f
+6fe0ce7c
+1fe0ffff
+67e0ce7c
+207a0000
+2020646b
+6fe14ada
+207a0000
+684906cf
+18467c00
+2022e480
+98467c00
+20628000
+60494ada
+6fe14e8a
+98467c00
+2042b79a
+6fe106cf
+67e14445
+20207dbc
+704e8701
+2040379a
+da604b18
+20406439
+58000000
+67e14ada
+7046b132
+2040647d
+6fe0c53a
+1feff20a
+d8a0495d
+20207ca3
+44e34018
+6fe0ce8e
+c000e491
+c0006497
+20600000
+18e27e00
+c002e4c0
+c0006507
+c002650f
+c0016539
+20600000
+efe08013
+c000e4c0
+c0016507
+c001e50f
+c0026539
+c002e49e
+20600000
+204065b3
+243a64a8
+5800001b
+1feffe0a
+d8404c4b
+98408a00
+18a08a05
+6fe24b22
+e7e20005
+20600000
+58000029
+1feffe0a
+d8404c4b
+98408a00
+18a08a03
+6fe14e75
+e7e18005
+18a08a07
+6fe14e77
+1ff27e00
+1fed7e00
+e7e18005
+20600000
+6fe0ce73
+207a0000
+1fe0ffff
+67e0ce73
+dfe00fff
+20600000
+d8400055
+204065b3
+207a0000
+d8400007
+20600000
+204064bb
+6fe14e75
+98467c00
+244164b5
+24610000
+98467e00
+67e14e75
+44e3c018
+204065b3
+203a64e2
+6fe14e75
+68494e77
+184d0400
+18520400
+9840fe00
+67e1cb22
+204064d2
+202064da
+58000028
+1feffe0a
+d8404c4b
+98408a00
+18a08a03
+6fe1cb22
+e7e18005
+20600000
+58000029
+1feffe0a
+d8404c4b
+98408a00
+18a08a03
+6fe1cb22
+e7e18005
+20600000
+6fe14e75
+68494e77
+18500400
+9840fe00
+67e24b22
+204064e9
+202064f1
+5800001b
+1feffe0a
+d8404c4b
+98408a00
+18a08a05
+6fe24b22
+e7e20005
+20600000
+5800001c
+1feffe0a
+d8404c4b
+98408a00
+18a08a05
+6fe24b22
+e7e20005
+20600000
+6fe14e75
+d8400fff
+98460400
+24610000
+18427e00
+6848ce73
+18467c03
+2022e504
+18408401
+6048ce73
+202064c6
+704e7300
+dfe00000
+202064c6
+204065b3
+245a64f9
+204064bb
+6fe14e75
+9840fe00
+d8400fff
+20407d6e
+202064c6
+204065b3
+203a6523
+204064bb
+6fe14e77
+98467e00
+67e14e77
+68494e77
+58000fff
+98467e00
+d8400fff
+98460400
+242164c7
+58000fff
+98467e00
+6848ce74
+18467c05
+2022e52a
+18408401
+6048ce74
+20206537
+204064bb
+6fe14e77
+98467c00
+24610000
+98467e00
+67e14e77
+202064c7
+704e7400
+58000fff
+20206537
+204065b3
+203a652b
+6fe0ce74
+203a652b
+1fe0ffff
+67e0ce74
+5800ffff
+d8400fff
+98467e00
+9a20fe00
+67e14e77
+202064c7
+204065b3
+203a6542
+204064bb
+6fe14e77
+9840fe00
+d8400fff
+98462200
+2041652d
+20206537
+204064bb
+6fe14e77
+9840fe00
+d8400fff
+20407d6e
+20206537
+6fe1439c
+c0126103
+20600000
+da200017
+da400004
+204029d9
+58000006
+e7e08005
+58000001
+e7e10005
+5800ffff
+e7e10005
+58002800
+e7e10005
+d8c04947
+20207c91
+44e44019
+1a220c00
+efe18006
+67e1c39b
+c003e587
+c000e5a8
+c0056577
+c0066561
+20202b76
+efe10006
+67e10693
+98002200
+6849439c
+6fe14334
+98467c00
+2422ad2e
+204065b3
+243a656c
+68494943
+2020656d
+68494945
+d8c046c1
+20407c6f
+18427e00
+9a267e00
+24212de1
+1fe0fe01
+1fe67c17
+20212d37
+18007e17
+20202d37
+6849439c
+6fe0c323
+c281e57b
+20202cfb
+6fe14334
+98467c00
+2422acfb
+20402da5
+24346581
+20202d24
+6fe14334
+98467c00
+2422acfb
+d8c046c1
+18007e17
+20202d0b
+44e4c019
+704e7105
+70495701
+704e7901
+704958f0
+704e880a
+704e8d01
+20406642
+6fe0ce89
+207a0000
+20406606
+d8400fff
+6fe14f03
+da204e75
+da404e73
+204065a1
+d8400fff
+6fe14f05
+da204e77
+da404e74
+204065a1
+58000fff
+68494e77
+98467e00
+67e14e77
+20600000
+9846fc00
+20407d64
+1807fe00
+18070400
+e7e08012
+e0410011
+20600000
+18c08dfe
+efe08006
+c00365b1
+20600000
+704e7101
+70495700
+704e7900
+7049580a
+20600000
+204065ac
+20206642
+6fe0c957
+20600000
+da6049b7
+204065b3
+207a0000
+70495878
+da604b26
+20600000
+da604a11
+204065b3
+207a0000
+da604b76
+7049580c
+18e27e00
+c1008000
+20600000
+44e54019
+6fe0cc47
+79407e00
+67e0cc47
+c00065cc
+c000e5ca
+20600000
+204065d3
+2020618e
+204065ce
+2020618e
+da604a3e
+204065b3
+207a0000
+da604ba3
+20600000
+da604c33
+204065b3
+207a0000
+da604c3d
+20600000
+18e27e00
+c000e5fa
+c00165e8
+c00265e4
+20600000
+da604f18
+da4065e0
+20203755
+704f1804
+6fe0cc47
+203a65e4
+202065e8
+704c4700
+704f1804
+da604aa4
+2020618e
+704c4701
+704f1804
+da604a9e
+2020618e
+704c4700
+704f1800
+20600000
+da604f19
+da4065f2
+20203755
+704f1902
+204065f5
+2020618e
+da604f1a
+204065b3
+207a0000
+da604f22
+20600000
+6fe0cf2a
+243a65ff
+704f2a01
+704f1902
+20600000
+704f2a00
+704f1900
+20600000
+6fe0ce72
+247a0000
+704e7201
+202064c7
+58000000
+67e3ce73
+20600000
+204065b3
+c000e611
+c0006623
+20600000
+6fe0cf0b
+c000e62a
+c000663c
+20600000
+6fe0ce73
+1fefffff
+1fe20400
+6fe14e75
+9840fe00
+67e14f07
+6fe0ce74
+1fefffff
+1fe20400
+6fe14e77
+1fe22200
+58000fff
+9a267e00
+9840fe00
+67e14f09
+204065b3
+67e0cf0b
+20600000
+6fe14e75
+67e14f07
+6fe14e77
+67e14f09
+204065b3
+67e0cf0b
+20600000
+6fe14f07
+1fe6fdff
+20407d64
+1807fe00
+18070400
+67e0ce73
+18427e00
+67e14e75
+6fe14f09
+1fe6fdff
+20407d64
+1807fe00
+18070400
+67e0ce74
+58000fff
+98467e00
+67e14e77
+20600000
+6fe14f07
+67e14e75
+6fe14f09
+67e14e77
+20600000
+202066bd
+202066a4
+20406665
+6fe14f0e
+204066d0
+704f1600
+6fe2cf07
+704f1700
+704f1400
+20406669
+6fe0cf14
+c1000000
+20206643
+6fe14efb
+1fe0fffb
+67e14f0e
+20600000
+6fe14f0e
+1fe0fffb
+67e14f0e
+20600000
+6fe14f0e
+1fe0fe05
+67e14f0e
+20600000
+6fe14f10
+1fe0fe05
+67e14f10
+6fe14f10
+1fe20400
+6fe14efb
+98467e00
+d8400005
+98467c00
+24216689
+20600000
+6fe0cf16
+c000e64e
+c0006652
+20600000
+da400000
+1a420400
+6fe14f07
+a843fe00
+2440e679
+da400000
+1a420400
+6fe14f09
+a843fe00
+2440e679
+da400000
+1a420400
+6fe0cf0b
+a841fe00
+2440e679
+20600000
+6fe0cf14
+1fe0fe01
+67e0cf14
+20600000
+704f1401
+2040665a
+6fe14f10
+204066d0
+204065b3
+1fe20400
+6fe0cf0b
+a841fe00
+2040e6a2
+6fe0cf14
+c1000000
+2020667d
+44e5c019
+204066a2
+204065b3
+203a668e
+20206693
+6fe14eff
+67e14e75
+6fe14f01
+67e14e77
+20206641
+d8400fff
+6fe14f03
+da204e75
+da404e73
+204065a1
+d8400fff
+6fe14f05
+da204e77
+da404e74
+204065a1
+58000fff
+68494e77
+98467e00
+67e14e77
+20206641
+704f1400
+20600000
+44e64019
+704f1601
+20406643
+6fe14efd
+1fe20400
+6fe14f0e
+98467e00
+d8400000
+98467c00
+24610000
+6fe14f0e
+1fe20400
+6fe14efb
+1fe0fffb
+98467e00
+6fe14f0e
+67e14f10
+2040667d
+6fe14f10
+2442e6d0
+704f1400
+20406669
+6fe0cf14
+c1000000
+2020660d
+44e6c019
+704f1601
+20406643
+68494efd
+6fe14f0e
+98467e00
+d8400000
+98467c00
+24610000
+68494f0e
+6fe14efb
+98467e00
+d8400000
+98467c00
+24610000
+6fe14f0e
+67e14f0c
+20406609
+202066d5
+1fe22400
+44e74019
+df200005
+da204f07
+20206b62
+df200005
+da204f07
+6a414f0c
+20206b33
+da6046b1
+da406641
+20203755
+6fe0c456
+d840003e
+20206f1c
+6fe0c456
+d840003f
+20206f1c
+204066df
+204066dc
+202066df
+204066e3
+202066dc
+202066e3
+204066e3
+202066e5
+202066dc
+6fe0c457
+202066dd
+6fe0c457
+202066e0
+204066eb
+204066ed
+202066eb
+20800000
+2040711d
+204066fd
+204066ff
+20406713
+2040672f
+20406733
+7006ed01
+7006ea04
+2040673e
+202066fb
+70804204
+20600000
+20406703
+20406707
+2040670b
+2020670f
+6fe0c508
+247a0000
+70450807
+20600000
+6fe0c509
+247a0000
+70450906
+20600000
+6fe0c50a
+247a0000
+70450a09
+20600000
+6fe0c50b
+247a0000
+70450b0a
+20600000
+58000c00
+67e1064e
+58000eff
+e7e10005
+58000f00
+e7e10005
+58000fff
+e7e10005
+6fe4064e
+20406d5b
+20406d75
+d841c200
+20406d68
+6fe0c508
+d8400008
+20406f1d
+6fe0c509
+d8400049
+20406f1d
+6fe0c50a
+d840000a
+20406f1d
+6fe0c50b
+d840000b
+20406f1d
+d8400081
+60588060
+20207d78
+6fe0c50c
+247a0000
+70450c0c
+20600000
+6fe0c50c
+d8400010
+20406f1d
+da200040
+204070b9
+da200000
+da400000
+58000000
+204070de
+d8e00000
+20207106
+6ff10112
+1fe0a3fc
+24610000
+20406d89
+efe08003
+c000e746
+20407c97
+20206d91
+efe10003
+67e106ee
+d84003ff
+98410400
+604906e7
+1feb7e00
+1fecfe00
+67e086e9
+efe08003
+1fe0ffff
+9a267c00
+20610000
+20406754
+202067af
+6fe086e9
+c01fe757
+2020679b
+44e9401a
+6fe086e7
+c000679a
+c000e762
+c0016767
+c001e775
+c002677f
+c002e79a
+c0086790
+c00a6796
+2020679a
+7006f000
+6ff10000
+67e106f1
+df200003
+202067a2
+efe10003
+67f10052
+20600000
+efe08003
+1fe20400
+67f08024
+efe08003
+98408400
+79207e07
+67f08023
+efe08003
+98408400
+1fe27200
+20600000
+2040676a
+efe08003
+67f08025
+98408400
+c2006776
+184104ff
+efe08003
+98467c00
+2422e78e
+2020679a
+df200020
+d8a04000
+d8400000
+efe08003
+e7e08005
+98408400
+c2006782
+184104ff
+efe08003
+98467c00
+2422e78e
+70802300
+2040679a
+20406da1
+20202001
+70802300
+2020679b
+efe08003
+1fe27200
+efe10003
+1fe20a00
+20406dd0
+2020679a
+6ff08060
+79207e04
+67f08060
+2020679a
+2020679f
+7006f001
+202067a0
+7006f00c
+202067a0
+7006f000
+df200001
+202067a2
+7006eb0e
+1f20fe03
+67e086ec
+204067ab
+6fe186ed
+e7e18003
+d8c006f0
+20406db7
+20206d97
+20406d95
+6fe186ea
+e7e18003
+20600000
+20406d89
+18608603
+efe08003
+98608600
+20206d8f
+70411400
+20600000
+20406c16
+2040565a
+20405654
+20406c43
+20205661
+20406c16
+2040565a
+2040566f
+20405654
+20405672
+20205661
+da204679
+6fe0c678
+1fe0ffff
+1feffe0d
+9a20a200
+6fe08032
+e7e08011
+c01a67ca
+20600000
+6fe30178
+e7e30005
+6fe342dd
+e7e30005
+20600000
+44e9c01a
+204067d5
+6fe246a3
+67e245ff
+67e245a6
+20600000
+44ea401a
+da204679
+6fe0c678
+c1000000
+1fe0ffff
+1feffe0d
+9a20a200
+efe08011
+67e0c3fc
+c19a0000
+efe30006
+67e34116
+efe30006
+67e342dd
+20600000
+6fe08032
+c19a0000
+67e0c884
+6fe30178
+67e34885
+6fe3c884
+d8c04679
+df200003
+e8438006
+98467c00
+2022e7f2
+18c08c07
+c20067ec
+20600000
+18c08dfa
+18c20a00
+684b4885
+18408403
+e0430005
+20600000
+6fe342dd
+67e34680
+1fe0ff00
+67e3468d
+1fe0ff00
+67e3469a
+20600000
+704503ff
+70450500
+6fe14651
+67e145ed
+6fe0c654
+67e145f3
+6fe2c657
+67e2c63f
+6fe0c655
+67e0c5e8
+6fe0c5d0
+245a324a
+20600000
+7040c103
+7040a608
+70473400
+70473500
+58000200
+67e140a4
+7042e317
+7042e517
+6fe0c678
+67e0c717
+6fe1c2e0
+67e1c756
+58004782
+67e14343
+58000020
+67e14345
+20205930
+6049c6f8
+6049c6fb
+20600000
+70409401
+20600000
+70409400
+20600000
+70472c00
+44eac01a
+6fe0c72c
+205a684b
+6fe0c721
+c000682e
+c002e833
+c001e836
+c0016839
+c0044885
+6fe0c3cf
+c007c88e
+70477308
+68494774
+20206843
+70477304
+68494776
+20206843
+70477303
+68494776
+20206843
+70477302
+68494778
+20206843
+6fe0c72b
+c000e825
+70477307
+6fe3c65c
+67e3c722
+6849439f
+20206843
+44eb401a
+6fe0c773
+1fe22200
+20402dcc
+6848c773
+18427200
+d8c04722
+20207cdc
+df200009
+d8a04722
+20207ca3
+df20000a
+d8c049fd
+d8a04721
+20207cdc
+6fe0c72c
+205a684b
+da404721
+20600000
+58000001
+67e088f1
+6fe3c65c
+e7e38005
+20203d52
+6fe0c72c
+205a684b
+44b5c00d
+6fe0c721
+c0006864
+c0016869
+c001e86f
+c002e875
+c0044a15
+20403d61
+d8c04722
+d8a00901
+df200009
+20207cdc
+7008ea22
+58000002
+67e08929
+6fe0c722
+e7e08005
+20203d53
+7008ea21
+58000003
+67e08921
+6fe1c722
+e7e18005
+20203d53
+7008ea23
+58000005
+20206871
+6fe0c74f
+c07fad8a
+6fe0c74f
+203a2d8a
+6fe0c882
+c280ad8a
+5800001a
+6849439c
+98467c00
+2422ad8a
+20202d24
+58000000
+67e1c70a
+20600000
+6fe4470e
+c4068000
+6fe0c73d
+207a0000
+6fe0c619
+207a0000
+6fe0c707
+1fe0fe01
+1fe17e03
+67e0c707
+247a0000
+70470800
+44ebc01a
+6fe0c708
+1fe0fe01
+67e0c708
+1fe67c08
+2421689e
+20403557
+2040362a
+242c68a4
+2437e8a4
+204068bc
+204068b1
+20403553
+6fe0c709
+1fe0fe01
+67e0c709
+c00868a6
+20600000
+20403201
+20206892
+44ec401b
+70470900
+6fe0c70a
+c3800000
+79207e00
+67e0c70a
+6fe1471c
+67e14741
+6fe0c3cf
+c0045303
+20600000
+6fe0c619
+203a6883
+70470900
+6fe0c70a
+c4000000
+793ffe00
+67e0c70a
+20405535
+6fe0c3cf
+c0045263
+20600000
+20403647
+6fe0c50f
+2fe1f008
+24608000
+6fe0c510
+c07fd90a
+67e0c70d
+20600000
+6fe0c678
+c1800000
+6fe0c5e1
+207a0000
+70804202
+708130f8
+20600000
+58004f1f
+67e143f0
+58005aee
+67e143ea
+58005af0
+67e143ee
+20600000
+2035e8d7
+58004467
+d8a04458
+98a67200
+20407ca3
+20600000
+d8e00000
+da400000
+18e67c07
+24610000
+aa2fffff
+2020e8df
+202068e3
+18427e00
+203a68e3
+f9202400
+184085ff
+18e08e01
+202068da
+6b014343
+6d614345
+20407dbe
+202068e9
+44ed401b
+20406935
+243a233e
+20406945
+df200008
+6848c458
+1f260e08
+a84fffff
+2020e8f6
+204068fd
+242168f6
+20406913
+202068fa
+1d627e00
+9b00b000
+c20068ee
+2020233e
+1b027e00
+1b020a00
+20600000
+44edc01b
+1f260e08
+d8400000
+d9600000
+18e27e00
+c004690e
+6fe0c458
+afefffff
+2020e90e
+f9201600
+1d627e00
+98408400
+18e08e01
+1a227e00
+98467c00
+2022e90e
+20216901
+18427e00
+9a267c00
+24628000
+f9201600
+20600000
+44ee401b
+20406935
+243a233e
+2040693b
+203a691c
+6fe4c45c
+67e4c459
+58000000
+e7e18005
+6160c462
+63014463
+20600000
+44eec01b
+2040693e
+18c08c01
+efe10006
+20600000
+44ef401b
+2040693e
+18c20a00
+18c20400
+58000000
+e7e18005
+20600000
+44efc01b
+2040693b
+203a233e
+6fe1c45f
+67e1c462
+6fe1c45c
+67e1c45f
+6fe1c459
+67e1c45c
+20600000
+44f0401c
+6fe1c459
+20600000
+44f0c01c
+6fe1c45c
+20600000
+44f1401c
+6fe1c462
+20600000
+2040693b
+203a6943
+d8c04459
+efe18006
+203a6941
+18c08dfd
+20600000
+44f1c01c
+df200004
+d8c04459
+d8400000
+efe18006
+1fe17eff
+98418400
+c2006949
+6048c458
+20600000
+d8e0000c
+202024be
+d8e0000c
+202024c2
+44f2c01c
+18467cff
+20628000
+18427e00
+1fe17eff
+1fe67c0f
+24216965
+d8a08070
+98a08a00
+18a22200
+d840003e
+e0408005
+20406968
+2000001e
+1a220a00
+d840003f
+e0408005
+2020696c
+d8a080d4
+1fe0fff0
+2020695b
+6ff08081
+1fe17e7f
+67f08081
+20600000
+6ff08081
+1fe1fe80
+67f08081
+20600000
+20206bc6
+20206bcd
+6ff0806f
+793ffe07
+67f0806f
+20600000
+2434697a
+6ff0806f
+79207e07
+67f0806f
+18427c00
+2022e97d
+1a627a00
+2fcc0000
+20206ae9
+18000404
+da2001c5
+20406972
+2040697a
+da2055aa
+6fe101c5
+e8410006
+9a267c00
+20600000
+2054699a
+d8400002
+da2043cc
+2040697a
+6fe143cc
+67e101be
+20546990
+20600000
+d8400010
+da2001cb
+20406972
+2040697a
+d8c001cb
+df200010
+20407341
+204072c8
+2040735d
+202072c2
+70802300
+20406972
+2020735d
+58000000
+67e10677
+7856fc00
+2040697f
+24628000
+7836fc00
+58008000
+67f18022
+da208025
+20406976
+70802300
+6fe081bb
+c4000000
+d8400006
+20406980
+2422e9ba
+ea210006
+2040697a
+204069b1
+202069aa
+6fe10677
+df200006
+d8c001c5
+20407dd0
+6f2101c7
+1a220c00
+20407dd0
+67e10677
+20600000
+6fe081fa
+c02d69c8
+da20aa55
+6fe101c5
+9a267c00
+2422e9ca
+da2055aa
+6fe101c7
+9a267c00
+2422e9ca
+6fe101c9
+68490677
+98467c00
+2422e9ca
+7920220f
+2020697d
+7001bb00
+20600000
+1fe17eff
+1ff1fe00
+67e0c3cf
+20206a11
+6ff10143
+243a69cc
+20406a11
+6fe143cf
+207a0000
+204069d7
+2020239c
+6fe0c3cf
+207a0000
+1fe1040f
+6048c3cf
+1ff1fe00
+9842fe00
+c087ebb8
+20206b7b
+6fe081f7
+245a23c2
+6fe081f8
+207a0000
+202023c7
+44f3401c
+24758000
+6fe1415d
+207a0000
+67e101ed
+202069fb
+204069df
+6fe201eb
+207a0000
+37d98200
+6ff08136
+1fe17ef0
+684881eb
+9841fe00
+67f08136
+37d98200
+6ff08138
+1fe17e07
+684881ec
+18498400
+9841fe00
+67f08138
+37d98200
+6ff08acb
+1fe17ef0
+684881ed
+6048c15d
+9841fe00
+67f08acb
+6fe081ee
+67e0c15e
+2feffe03
+6ff08a06
+7920fe07
+67f08a06
+6fe081ee
+1fe10407
+18520400
+18438400
+6048c44f
+6ff08a02
+1fe17e1f
+9841fe00
+67f08a02
+20600000
+78547c00
+6fe0c3ce
+c4018000
+20406a67
+dfe00ff0
+9a40a400
+18007210
+da2001cb
+20406b62
+70800608
+d8c001cb
+2040734d
+d8a001cb
+20407c9b
+20207dbc
+70805025
+20406b28
+da400000
+1800720b
+da2043cc
+20406b63
+6ee2c3cc
+6d6343d1
+6fe0c3ce
+c3026a31
+70806f07
+6ff0815e
+c083ea2b
+6ff08160
+1ff27e00
+67f0806f
+20206a34
+20406adc
+20407d78
+20407d76
+66e2c3cc
+656343d1
+20406a67
+dfe00fd0
+9a40a400
+df200020
+da2001db
+20406b62
+204069ea
+204069d0
+6fe0c3ce
+c301ea49
+6848c3d0
+dfe00000
+79207e06
+79207e07
+98412200
+1a267c00
+2022eaab
+9a267c00
+2022eaab
+70003000
+da606b0c
+20406a9f
+24216aab
+6fe143cc
+203a6a56
+2040698d
+2040699d
+2436ea56
+6fe081bb
+2fe00603
+2420ea4b
+20406a64
+20406b25
+70003000
+20406a9f
+24216aab
+6fe0c3ce
+c2816a77
+20406a91
+20406cba
+20406a99
+2436ea6e
+6fe081bb
+2fe00603
+2420ea58
+20206a77
+580001ff
+dfa00000
+20600000
+da401000
+6ff08144
+c283ea6c
+6fe0c3d0
+c4038000
+da400000
+20600000
+20406cb7
+6fe0c3ce
+c2816a77
+20406a99
+2436ea77
+6fe081bb
+2fe00603
+2420ea58
+20206a87
+70003000
+20406a9f
+24216aab
+6fe0c3ce
+c280ea87
+20406c16
+200000c8
+20406c25
+20000064
+da606c62
+20406988
+2040699d
+2436ea87
+6fe081bb
+2fe00603
+2420ea78
+20406a8b
+6fe0c3ce
+c4000000
+202066f2
+d8a001cb
+20407c9b
+18007004
+2040735e
+70805021
+20600000
+6fe0c440
+6848c43f
+98467c00
+2422ecb2
+70443e04
+70443f08
+70444007
+20206cb2
+58000000
+67e101be
+da606cdd
+20406c9b
+20406988
+2020699d
+20406aa5
+6fe08030
+1fe0fe01
+1fe67c03
+67e08030
+20600000
+6fe08030
+207a0000
+6fe081f9
+207a0000
+1fe27200
+20207c98
+20406a8b
+20406972
+20407d7e
+20600000
+20406adc
+20406ab7
+6ff0806f
+c4030000
+20406ad1
+df200004
+d8c043d8
+20206b07
+6ff0806f
+c4028000
+684943d3
+18490400
+dfe04000
+98408a00
+6fe0c3d7
+20207dce
+4779403e
+6ff0806f
+c4028000
+6a2143d3
+1a292200
+dfe04000
+9a208c00
+efe08006
+67e0c3d7
+20600000
+20758000
+6ff0806f
+c4030000
+20406ad1
+2000000a
+df200004
+d8a043d8
+20206afa
+70802200
+6fe143d5
+1ff1fe00
+1fe37e00
+1ff18400
+184b0400
+79200407
+60588023
+1febfe00
+67f08024
+20600000
+6fe0c3ce
+1fe17ee0
+207a0000
+1fe37e00
+67f0806f
+58000001
+d8c043d1
+e8410006
+6059004c
+67f08020
+1fe3fe00
+c301eae3
+20600000
+6fe081bb
+1fe3fe00
+7920fe00
+2a2c000f
+20608000
+67e081bb
+20600000
+6ff0806f
+c4038000
+20206af6
+6ff08128
+afefffff
+20608000
+6ff08108
+c300eaf3
+204072c2
+20206af3
+6ff08025
+e7e08005
+c2006afa
+70802300
+20600000
+6fe140f0
+207a0000
+70802380
+70802200
+70802400
+684940f2
+184bf200
+98000c00
+efe08006
+67f08025
+c2006b07
+70802300
+20600000
+18427200
+6fe101be
+98408400
+604901be
+98002400
+1a225c00
+70800610
+20406b62
+1dc22200
+2a2c000f
+20608000
+205a7dc8
+20206ae9
+708ac801
+2000012c
+708ac805
+20000064
+708ac825
+200003e8
+708ac827
+2000012c
+20600000
+20406b19
+708ac83f
+20600000
+70804783
+708ac800
+20600000
+20406b19
+70804782
+2000000c
+70804780
+70804782
+20000096
+20600000
+1a49a400
+62510044
+70804600
+20600000
+44f4c01d
+20406b22
+20406b2f
+20406b29
+e8408011
+1a20a201
+18000e00
+a84c0000
+2020eb5a
+6ff08046
+79207e06
+79207e07
+67f08046
+70804702
+70804782
+793ffe07
+67f08046
+7080478a
+2000000b
+708047ca
+20000021
+7080474a
+2000002c
+708047ca
+20000016
+7080478a
+20000021
+70804782
+20000001
+70804792
+2000000a
+708047b2
+6ff08007
+70804792
+20000001
+70804782
+20000001
+afec0000
+2020eb3a
+6ff10044
+1fe0fe01
+67f10044
+18e08e01
+28e01e08
+2420eb3a
+c2006b37
+20206b26
+44f5401d
+20406b2f
+708047a2
+1a40a408
+d8e00000
+5fffffff
+68588007
+e0408011
+984c7e00
+70800620
+62510044
+2a2ffe0f
+2020eb71
+1a20a201
+20206b77
+24346b77
+18e08e01
+28e01e00
+2420eb77
+204072c2
+70800610
+1a40a408
+c2006b68
+70804782
+20600000
+6fe0c3cf
+c0056b8c
+c0026b90
+c0046b96
+c004eba0
+c0036ba0
+c0066b8c
+c006eba7
+c0076ba4
+c007eb89
+c000ebb0
+c0016bb5
+c003eb9c
+20206bb8
+dfe04a31
+d84066d9
+20206bad
+dfe037c1
+d8404a2f
+20406bad
+20206bb5
+dfe03e8f
+d84066d9
+20406bad
+dfe037c1
+d8403cc7
+20206bb2
+dfe037c1
+d8404d0d
+20406bad
+dfe05bf7
+d84066d9
+20206bb2
+dfe037c1
+d8404d0d
+20406bad
+20206bb0
+dfe037c1
+d84060c0
+20406bad
+20206bb5
+dfe03cd1
+d84066d9
+20206bad
+dfe03cd1
+d84066d9
+20406bad
+dfe02ae3
+d84030eb
+20206bb2
+18500400
+9841fe00
+202023b1
+dfe02b6e
+d84030eb
+18500400
+9841fe00
+202023b8
+dfe030f1
+d84036bf
+20206bb2
+20406bb5
+dfe02b6e
+d84030eb
+20206bad
+44f5c01d
+6fe0c3fe
+67f08080
+6fe0c3ff
+67f08081
+580001bc
+67f10084
+580001c1
+67f10086
+20206968
+79207e07
+67e101bc
+44f6401d
+70808202
+70808800
+70800602
+20206bd6
+18000401
+67e081bc
+44f6c01d
+70808201
+60590088
+70800602
+20406bd6
+6fe081c1
+20600000
+20000005
+6ff08128
+c301ebd6
+20600000
+78547c00
+1fe22400
+6fe0c437
+c1800000
+78347c00
+1a427e00
+20206be8
+6fe0c437
+c000ebe8
+c0016bee
+c001ebf6
+c0026bfa
+c002ec01
+20600000
+67e1c430
+1a227e00
+67e14433
+60494435
+70443702
+20206c16
+20406c16
+70443703
+20406c1c
+da2001bc
+70808204
+6fe1c430
+d8400020
+20206c36
+20406c16
+20406c59
+70443704
+20600000
+44f7401d
+20406c16
+70443705
+20406c1c
+20406c0e
+20406c32
+20206c09
+20406c16
+20406c1c
+58000005
+20406bcd
+c3800000
+70443700
+6fe143f0
+20207d7b
+6fe20656
+68494433
+184085fc
+e7e20002
+20600000
+68494433
+18422200
+184085fc
+efe20002
+67e20656
+68494435
+6fe1c430
+20600000
+44f7c01d
+20406c81
+20406968
+58000000
+67e201bc
+20600000
+7001bc06
+58000000
+67f10088
+58000001
+67f10082
+580001bc
+67f10084
+70800602
+20206bd6
+7001bcab
+20206c1d
+7001bcb9
+20206c1d
+67e1864e
+60490656
+62210662
+44f8401e
+20406c1c
+6fe1864e
+68490656
+6a210662
+20206c32
+18408404
+60590082
+d8400002
+1a20a3fc
+e0408011
+1ff10400
+e0408005
+1fec8400
+e0408005
+e7e08005
+1a227e00
+67f10084
+58000000
+67f10088
+70800602
+20406bd6
+20206c59
+60590088
+1ff10400
+604881bd
+1fec8400
+604881be
+67e081bf
+58000004
+67f10082
+7001bc03
+580001bc
+67f10084
+1a227e00
+67f10086
+6ff08080
+2a2c000f
+7920fe06
+67f08080
+70800602
+6ff08128
+c283ec55
+d8e00003
+20206bd6
+580007d0
+20402340
+20406c1c
+580001c1
+67f10086
+58000005
+20406bcd
+c2806c59
+20600000
+60590088
+58000004
+67f10082
+7001bc03
+580001bc
+67f10084
+1a227e00
+67f10086
+6ff08080
+2a2c000f
+7920fe06
+67f08080
+70800602
+6ff08128
+c283ec6f
+d8e00003
+20406af0
+20406bd6
+2feffe02
+20406ae9
+6fe081bd
+1ff02400
+6fe101be
+1ff0fe00
+9a41fe00
+9840fe00
+67e081bf
+1fecfe00
+1ff0fe00
+67e101bd
+20600000
+6fe0c438
+6848c43a
+98467c00
+2422ec86
+20406c92
+6fe0c438
+d8400020
+20406f1d
+6fe0c43b
+d8400021
+20406f1d
+6fe0c439
+d8400022
+20406f1d
+6fe0c43a
+d840001f
+20206f1d
+70443801
+70443903
+70443a00
+70443b02
+70443c0b
+70443d0a
+20600000
+70801001
+20600000
+70808b05
+70808c07
+70808d07
+70808e07
+70808f07
+70809005
+70809100
+20600000
+70808b0c
+70808c0d
+70808d0d
+70808e0d
+70808f0d
+7080900c
+70809100
+20600000
+20406cce
+6fe0c43f
+d840006c
+20406f1d
+6fe0c440
+d840006d
+20206f1d
+20406cd5
+20206cac
+6ff08128
+c302ecb4
+20600000
+79200028
+7043fd08
+20600000
+793f8028
+7043fd20
+20600000
+6fe0c3f4
+9a40fe00
+67e081be
+20206cc4
+6fe101be
+1ff0fe00
+67e081be
+58000003
+67f10092
+7001bda0
+7001bfa1
+20206ce3
+60490656
+20406cce
+68490656
+20406cfa
+20206cd5
+6fe0c43e
+c17f8000
+c3036cd3
+580249f0
+20402340
+6848c43e
+20206ef1
+6848c43e
+20206eed
+44f8c01e
+c5146cbd
+6fe143f4
+9a40fe00
+1ff0fe00
+67e101be
+44f9401e
+c5146cc1
+58000004
+67f10092
+7001bda0
+7001c0a1
+580001bd
+67f10094
+60590098
+62310096
+58000002
+2a2c000f
+7920fe00
+67f0808a
+70800604
+d8e00005
+20406af0
+20406cb4
+2feffe04
+20406ae9
+c5146cf5
+6fe101be
+1ff0fe00
+20206cf6
+6fe081be
+9840fe00
+1ff0fe00
+67e101be
+20600000
+6fe143f4
+9a40fe00
+67e1064e
+44f9c01e
+60490656
+6221066d
+20406d0f
+68490666
+6a21066d
+6fe1064e
+20406d30
+6fe10666
+6849066d
+98408400
+6049066d
+6849064e
+98408400
+6049064e
+6fe10656
+243a6d00
+20600000
+44fa401e
+6fe0c3fd
+1fe0ffff
+6849064e
+9841fe00
+1fe0fe01
+67e1866a
+6fe10656
+9840fe00
+6849866a
+98467e00
+24216d21
+67e10656
+6fe1866a
+6849064e
+98467e00
+67e10666
+20600000
+6fe10656
+67e10666
+58000000
+67e10656
+20600000
+1a427e00
+18408402
+60590092
+1a20a3fe
+e8418011
+18422400
+d84000a0
+e0408011
+e7e08005
+20206d3d
+1fe22400
+44fac01e
+c5146d26
+1a427e00
+18408403
+60590092
+1a20a3fd
+e8418011
+18422400
+d84000a0
+e0408011
+1ff0fe00
+e7e10005
+62310094
+58000000
+67f10098
+70808a01
+70800604
+20406cb4
+e2418011
+44fb401e
+7001c000
+58000001
+67f10092
+7001bda0
+580001bd
+67f10094
+58000000
+67f10098
+67f10096
+58000003
+67f0808a
+70800604
+20406cb4
+6ff08128
+c4030000
+200005dc
+6fe081c0
+1fe0fe01
+67e081c0
+1fe67c28
+24610000
+20206d46
+20407dbc
+20206d5d
+1ff10400
+20546d81
+1fef7e00
+1ff10400
+20546d7d
+6ff10050
+793ffe0f
+67f10050
+20600000
+67f10052
+20600000
+20406d6a
+20206d66
+20406d6f
+9846fc00
+20407d64
+1807fe00
+20600000
+6ff08043
+c3006d73
+5adc6c00
+20600000
+596e3600
+20600000
+6ff08043
+1fe17efe
+67f08043
+20600000
+6ff08043
+1fe1fe01
+67f08043
+20600000
+67f1005a
+67f1005e
+6059005c
+20600000
+67f10054
+67f10058
+60590056
+20600000
+6951005a
+6a11005c
+6871005e
+20600000
+69510054
+6a110056
+68710058
+20600000
+6071005e
+20600000
+60710058
+20600000
+20406d89
+6ff10112
+98608600
+20206d8f
+20406d99
+20206d85
+20406d8d
+20206d9d
+60610675
+61410673
+62010671
+20600000
+68610675
+69410673
+6a010671
+20600000
+6ff1010e
+243a6da1
+20600000
+1f227e00
+207a0000
+1f20f3f8
+20416db1
+20628000
+20216da6
+1f20f208
+1f20f3fc
+20416db4
+20628000
+20216dab
+1f20f204
+20206db7
+efe40006
+e7e40003
+20600000
+efe20006
+e7e20003
+20600000
+1f227e00
+207a0000
+efe08006
+e7e08003
+c2006db9
+20600000
+1f227e00
+207a0000
+1f20f3f8
+20416dca
+20628000
+20216dbf
+1f20f208
+1f20f3fc
+20416dcd
+20628000
+20216dc4
+1f20f204
+20206dd0
+efe40003
+e7e40005
+20600000
+efe20003
+e7e20005
+20600000
+1f227e00
+207a0000
+efe08003
+e7e08005
+c2006dd2
+20600000
+70064d3d
+20207819
+44fbc01e
+6fe0c403
+207a0000
+20406e79
+2042ee7f
+20407dc2
+20406e0b
+6fe0c403
+1fe22600
+68494401
+60490033
+1a627e00
+203a6dd6
+1a60a7ff
+18422200
+efe08011
+68488031
+98467c00
+2042edf3
+20216def
+efe08011
+1fe0fe01
+e7e08011
+68490033
+18408422
+60490033
+20206de3
+58000000
+e7e08011
+6fe08032
+e7e08005
+c099ee00
+efe30006
+e7e40005
+58000000
+e7e40005
+1a420c00
+20407c91
+18007c01
+20600000
+c01b6e04
+c01bee08
+da40428c
+20206df8
+d8c0430f
+20407c91
+d8c0428c
+20206dfd
+d8c04307
+20407c91
+20206e06
+44fc401f
+20407dbe
+6fe0c403
+207a0000
+6fe14500
+c4048000
+6fe0c2cd
+c0006e26
+6fe0817d
+2fe180c0
+2020ee19
+2fe18040
+2020ee2b
+20206e20
+20366e1d
+6fe0c2c4
+c300ee26
+20206e20
+20406e26
+20740000
+20206e20
+6fe0c300
+c283ee23
+20206e29
+6fe30178
+67e44307
+20206e29
+70003235
+6fe30178
+20206e2d
+70003237
+20206e2d
+70003236
+20206e2d
+44fcc01f
+6fe14401
+e840803f
+1fe0fe01
+67e10033
+60488031
+6fe0c403
+1fe22600
+6fe10033
+1fe22200
+20406e45
+20740000
+68490033
+18408422
+60490033
+184085ff
+efe08002
+67e08031
+1a60a7ff
+2422ee35
+6fe0c403
+1fe0ffff
+67e08031
+20600000
+6fe08032
+c099ee4c
+da400032
+df200007
+20407d66
+2022fdbc
+20600000
+c01b6e4f
+c01bee6a
+20206e47
+e8408011
+98467c00
+24628000
+d8a0067f
+df200010
+20407ca3
+6fe1817b
+67e1867f
+20406e61
+6fe1069c
+1ff0fe00
+1fed0400
+efe08006
+9840fe00
+68498178
+98467c00
+2022fdbc
+20600000
+d8c0067f
+2040734f
+efe08011
+20407350
+18006c38
+18006c00
+204072bd
+d8a0068f
+20207363
+e8408011
+98467c00
+24628000
+18c22200
+18c0a608
+da404307
+df200008
+20407d66
+2022fdbc
+1a622200
+da40430f
+df200008
+20407d66
+2022fdbc
+20600000
+6fe14401
+e840803f
+1fe0fe22
+efe0803f
+98467c00
+20600000
+6fe0c403
+1fe27200
+68494401
+58000000
+e7e08002
+18408422
+1fe0fe01
+c2006e83
+20600000
+20407dc0
+20406e0b
+24346e93
+6fe10033
+1fe08c01
+d8a0430f
+20407c91
+d8a0428c
+20407c91
+70429c01
+20600000
+70429c00
+20600000
+70003234
+20206e97
+6fe0c3cf
+c0056dd8
+c0045569
+c007c8f2
+20600000
+18417e1f
+1fe37e00
+d8a00016
+98a08a00
+de0000f0
+284c0000
+20608000
+de00000f
+20600000
+44fd401f
+18467cff
+20628000
+79200407
+20406ee0
+2420eebc
+7d208407
+44fdc01f
+18467cff
+20628000
+d9000004
+284ffe07
+2020eeb3
+d9000002
+20406e9c
+284c0000
+2020eeb7
+19121000
+efe08005
+9e017e00
+9901fe00
+e7e08005
+20600000
+70488c01
+20406f0b
+d9000006
+20206eb3
+44fe401f
+18467cff
+20628000
+d9000001
+20406e9c
+284c0000
+2020eec8
+19121000
+efe08005
+9e017e00
+9901fe00
+e7e08005
+20600000
+44fec01f
+18467cff
+20628000
+20406e9c
+efe08005
+9e017e00
+e7e08005
+20600000
+20406ecd
+20206eda
+18467cff
+20628000
+2455eeac
+20406f10
+58000000
+284ffe07
+7d20fe06
+7920fe07
+20206f09
+44ff401f
+d8a0811c
+18410e07
+18497e00
+1fe17e03
+98a08a00
+efe08005
+284ffe07
+2020eeeb
+afec0000
+20600000
+afefffff
+20600000
+18467cff
+20628000
+2fcffe07
+20206ef4
+18467cff
+20628000
+2fcc0007
+58000000
+7d20fe07
+98428400
+20406f10
+5800003f
+284ffe07
+7920fe00
+20206f09
+18467cff
+2022fdc6
+20406f10
+efe08005
+c2806f03
+284c0007
+20600000
+284ffe07
+20600000
+18467cff
+20628000
+20406f10
+580000c0
+e7e08005
+20600000
+18467cff
+20628000
+20406f10
+58000000
+20206f09
+18417e3f
+1fe67c0f
+24216f16
+d8a08070
+98a08a00
+20600000
+d8a080d4
+1fe0fff0
+20206f14
+1fe104ff
+1fecfe00
+20206f1d
+c4038000
+c17f8000
+1fe17e3f
+1fe67c0f
+24216f25
+d8a08070
+98a08a00
+e0408005
+20600000
+d8a080d4
+1fe0fff0
+20206f22
+1841043f
+18467c0f
+24216f2f
+58008070
+98408c00
+efe08006
+20600000
+580080d4
+184085f0
+20206f2c
+df200010
+d8c08070
+18c20a00
+efe08006
+c00fef45
+c0106f45
+c010ef45
+c0116f45
+c011ef45
+c0166f45
+c016ef45
+c0006f45
+c2006f34
+dfe080dc
+98c67c00
+20628000
+df200008
+d8c080d4
+20206f34
+58000040
+e7e08005
+20206f3e
+58000080
+e7e08005
+20206f3e
+6fe0c88c
+203a6f4e
+20206f51
+58000010
+67f08141
+202023c4
+58000080
+20206f4f
+44ffc01f
+20758000
+708a0777
+708a08c9
+708a0b01
+6fe0c41f
+67f080cd
+7080cc03
+2040700e
+68590164
+7080cc00
+708a08c1
+df200008
+da204428
+708a0a05
+6ff08a0c
+e7e08011
+1a20a201
+6ff08a0a
+1fe0fe20
+67f08a0a
+c2006f62
+708a0700
+20600000
+6ff080cc
+79207e01
+67f080cc
+df200008
+da204428
+708a0a15
+efe08011
+67f08a09
+1a20a201
+6ff08a0a
+1fe0fe20
+67f08a0a
+c2006f71
+6ff080cc
+793ffe01
+67f080cc
+20600000
+47004020
+6fe401db
+207a0000
+67e44406
+20406b28
+20406a67
+dfe00fc0
+9a40a400
+df20000a
+da2001db
+20406b62
+20406b25
+6fe401db
+207a0000
+67e4440e
+efe10006
+e7e10005
+20600000
+4700c020
+6fe0c41a
+c000ef93
+c0016fd1
+20206f93
+6fe0c41d
+c000ef97
+c0016f9e
+20600000
+580003e8
+67e1441b
+68494412
+6fe14414
+da600e10
+2040702a
+20206fa4
+580003e8
+67e1441b
+6849440e
+6fe14410
+da6003e8
+2040702a
+68494416
+984ffe00
+68494418
+9846fc00
+20207d61
+20406f6b
+6ff08a09
+793ffe07
+67f08a09
+708a0777
+708a08c1
+708a0d61
+708a0b00
+20600000
+47014020
+6fe0c41a
+c000efb7
+c0016fee
+20206fb7
+20406fa9
+20407007
+6fe0c41f
+67f080cd
+20407011
+708a0d60
+7080cd00
+20406fa9
+6fe0c41f
+67f080cd
+708a0b50
+708a0ec0
+df00000b
+6de14420
+7080cc03
+2040700e
+68590164
+60494418
+7080cc06
+20407017
+df00000b
+65e14420
+708a0d60
+7080cd00
+7080cc00
+20600000
+6fe0c41d
+c000efd5
+c0016fdb
+20600000
+580007d0
+67e1441b
+68494408
+6fe1440c
+da600a28
+2020702a
+580003e8
+67e1441b
+68494406
+6fe1440a
+da6007d0
+98462200
+6fe14420
+98467e00
+24216fe8
+20407039
+9a467e00
+24217dcc
+20207030
+18427e00
+68494420
+98467e00
+20407039
+9a40fe00
+20207030
+6fe0c41d
+c000eff8
+20406f6b
+6ff08a09
+793ffe07
+67f08a09
+708a0777
+708a0841
+708ac614
+20206fff
+20406f6b
+6ff08a09
+793ffe07
+67f08a09
+708a0777
+708a0841
+708ac610
+708a0b00
+20407007
+6fe0c41f
+67f080cd
+20407011
+7080cd00
+708ac600
+20600000
+6fe0c41e
+1ff27e00
+68588a0b
+1841040f
+98418400
+60588a0b
+20600000
+6ff08129
+c302f00e
+20600000
+4701c020
+7080cc03
+2040700e
+68590164
+60494420
+7080cc06
+6ff08129
+c282f017
+7080cc00
+20600000
+6fe0c427
+207a0000
+6ff08a09
+79207e07
+67f08a09
+6fe0c41f
+67f080cd
+6fe14423
+67f100ce
+6fe14425
+67f100d0
+7080cc0b
+200003e8
+7080cc03
+20600000
+98462200
+6fe14420
+98467e00
+24217032
+20407039
+9a40fe00
+9a26fc00
+20207d61
+18427e00
+68494420
+98467e00
+20407039
+9a467e00
+24217dcc
+20207030
+6849441b
+984fa400
+1a627e00
+9a2ffe00
+20600000
+efe40011
+67e4064e
+6fe1064e
+68490650
+98462200
+6fe10654
+98462400
+68490652
+98467c00
+2441704e
+1a4ffe64
+9a26fc00
+20407d64
+1807fe00
+205a7054
+20600000
+6fe0c422
+79207e00
+20207059
+6fe0c422
+793ffe00
+20207059
+6848c422
+79200401
+20207059
+6848c422
+793f8401
+6048c422
+20600000
+6fe14443
+efe0803f
+207a0000
+1fe27200
+6fe14443
+1fe0fe03
+1fe22200
+e8408011
+20406ed7
+1a20a201
+c2007062
+20600000
+6fe14443
+1fe0fe03
+1fe22200
+18002400
+58000000
+67e106cf
+e8408011
+20406ee0
+47024020
+6fe106cf
+1a420e00
+f920fe00
+67e106cf
+1a20a201
+1a40a401
+6fe14443
+efe0803f
+9a42fc00
+2422f06d
+6fe106cf
+68494445
+9842fc00
+20628000
+20207dbc
+6fe14443
+efe0803f
+207a0000
+1fe27200
+6fe14443
+1fe0fe03
+1fe22200
+e8408011
+20406ea5
+1a20a201
+c2007086
+20600000
+d8e00009
+20407cf1
+247a0000
+58000020
+d8e00009
+20407ce3
+78547c00
+2040707f
+4702c020
+6fe14443
+efe0803f
+207a0000
+20407067
+24347793
+20407791
+78547c00
+6fe106cf
+67e106d6
+7006d800
+18000e00
+6fe14445
+1fe30400
+60494445
+1fe17e01
+684906d6
+18412201
+18430400
+604906d6
+9a22fc00
+2442f0b4
+6fe14443
+efe0803f
+684886d8
+18408401
+604886d8
+18420e00
+98e2fc00
+2422f09f
+6fe106cf
+67e14445
+20600000
+47034020
+6fe14443
+1fe0fe01
+efe1003f
+20207d7b
+6ff08042
+9a21fe00
+67f08042
+6ff10050
+793ffe0d
+67f10050
+20000064
+20600000
+6ff08042
+c28370c6
+c283f0c8
+58b71b00
+20600000
+596e3600
+20600000
+580080e8
+20600000
+68498650
+204070c1
+9846fc00
+20407d64
+18078400
+6fe08653
+984ffe00
+1fe6fc64
+20407d64
+1807a200
+18427e00
+9a262400
+6fe0864f
+204070de
+6fe0864e
+6848864f
+1841040f
+184d0400
+9841fe00
+20207100
+98000e00
+204070ec
+202070e1
+6ff080be
+f9207e00
+67f080be
+68588042
+284ffe07
+2040f0ea
+f93ffe00
+67f080be
+20600000
+200001e0
+20600000
+1fe17e0f
+d8a0809c
+1feffe04
+98a08a00
+1a227e00
+e7e10005
+1a427e00
+e7e10005
+20600000
+28effe06
+18e10e0f
+6ff0809b
+f920fe00
+67f0809b
+20600000
+2040710b
+1fed7e00
+18e08410
+9841fe00
+20206f19
+78347c00
+204070fb
+20207106
+78547c00
+2040710b
+20207106
+18e10e0f
+6ff0809a
+f9347e00
+67f0809a
+20600000
+1fec8e00
+18e10e0f
+20600000
+1fe20400
+4703c020
+2040711b
+58000800
+98467e00
+1fe20400
+18518400
+60588004
+20000578
+1fe20400
+1841040f
+6058800b
+20600000
+78367c00
+2020711f
+47044021
+78567c00
+6ff08043
+79367e03
+67f08043
+20600000
+67f20062
+67f10066
+60588061
+20600000
+70804204
+7041480c
+58000ea5
+67f10040
+20600000
+70804205
+20207128
+4704c021
+70020e50
+d8a0020f
+d8c042ad
+20407c91
+d8c044a6
+20407c8f
+d8c005dc
+20407c8f
+204071e9
+d8c00158
+204071e4
+204071af
+d8a006af
+204071e0
+580f4240
+1fe22200
+6fe206af
+9a26fc00
+20407d64
+18077e00
+67e205d8
+20600000
+70020e41
+d8a0020f
+20407194
+2040718f
+6fe1c2c7
+e7e18005
+20407155
+d8c00158
+20407c91
+d8c042ad
+20407c91
+204071e9
+d8c006cf
+d8a0067f
+20407c91
+202071af
+6fe24301
+e7e20005
+20407c9d
+20207c9c
+47054021
+70020e41
+d8a0020f
+2040718f
+20407194
+6fe1c2c0
+e7e18005
+20407155
+d8c042ad
+20407c91
+d8c00158
+20407c91
+204071e9
+d8c006cf
+d8a0067f
+20407c91
+204071af
+d8a006af
+202071e0
+70020e20
+d8c0061c
+d8a0020f
+20407c8f
+204071e9
+d8c005c7
+204071e4
+204071af
+d8a0067f
+20407363
+d8400001
+2040717e
+d8a0428c
+204071e0
+d8400000
+2040717e
+d8a006cf
+20207363
+4705c021
+70020e35
+58000100
+67e1020f
+2040718f
+20407194
+d8c042ad
+20407c91
+d8c00158
+20407c91
+58006c65
+e7e10005
+58006274
+e7e10005
+e0408005
+204071e9
+202071af
+6fe342dd
+e7e30005
+6fe0c2d4
+e7e08005
+20600000
+6fe30178
+e7e30005
+6fe0c2cd
+e7e08005
+20600000
+70020e41
+6fe0c4e7
+67e0820f
+d8c044a6
+20407c8f
+d8c005dc
+20407c8f
+204071e9
+d8c00158
+204071e4
+202071af
+70020e41
+6fe0c4e7
+67e0820f
+d8c005dc
+20407c8f
+d8c044a6
+20407c8f
+204071e9
+d8c042ad
+204071e4
+202071af
+47064021
+204071fe
+6fe0820e
+1fe20400
+1fe0fe0f
+1ff1fe00
+1fe22400
+203a71c1
+18417e0f
+243a71c4
+da60068f
+dfe0020f
+1fe0fff0
+9840a200
+d8a006bf
+df200004
+20407cab
+202071cf
+da400001
+da200000
+202071c5
+1841220f
+dfe0020f
+9840fe00
+9a260c00
+d8a006af
+20407224
+da60069f
+da2006af
+d8a006bf
+df200004
+20407cab
+2040735d
+204072c8
+d8c0020f
+1a40a5ff
+1a427e00
+203a71d8
+2040734f
+204072c2
+202071d2
+d8a006af
+20407363
+d8c006bf
+2040734f
+204072c8
+d8c006af
+2040734f
+202072c2
+18a22200
+20407363
+df200010
+20207cb3
+d8a0067f
+20407c91
+df200010
+da20067f
+20207cb3
+6fe0820e
+1fe27200
+da20020f
+20207cb3
+efe08011
+1fe3fe00
+2a6ffe00
+7920fe00
+2feffe08
+7920a600
+e7e08011
+1a20a3ff
+c20071ed
+20600000
+da20068f
+1a20a20f
+18007210
+18002600
+202071ed
+da20069f
+202071f8
+d8c0067f
+2040734d
+18007008
+2040735e
+2040735d
+204072bf
+d8a0068f
+20407363
+4706c021
+6fe0868f
+2feffe07
+2420f20f
+204071f7
+da60068f
+d8a0068f
+20407219
+20207210
+204071f7
+d8c0068f
+d8a0069f
+20407c91
+6fe0869f
+2feffe07
+2420f1fc
+204071fc
+da60069f
+d8a0069f
+df200003
+d8400000
+20407220
+1a60a604
+c200721a
+d8408700
+18500400
+efe20013
+9842fe00
+e7e20005
+20600000
+47074021
+df200010
+dfe00000
+9a267c00
+2022f22f
+20217232
+e8408006
+e0408005
+1fe0fe01
+c2007227
+20600000
+d8400080
+e0408005
+2020722c
+d8400000
+20207230
+184d0400
+18500400
+98418400
+20600000
+4707c021
+204072f4
+d8a0428c
+20207363
+d8a042ad
+2034f23f
+d8a00158
+18c22200
+20407c91
+20407309
+d8c0429d
+2020737c
+da200158
+2034f247
+da2042ad
+1a220a00
+20407ded
+20207309
+d8c042e7
+2040734f
+d8c0428c
+20407350
+18006c38
+18006c00
+204072bd
+d8a001a8
+20207363
+18007008
+18007e49
+2020725a
+18007e49
+20207259
+18007e01
+18007000
+184d5e00
+9de1de00
+1f00f001
+184cde00
+1df15e00
+6fe14475
+1ff07e00
+9de1de00
+1f00f001
+ede20006
+1f00f001
+efe10006
+1a30de00
+1df05e00
+9de1de00
+1f00f001
+20600000
+1a608c01
+efe08006
+98002200
+20407256
+204072bf
+18007000
+efe08013
+1fe17e03
+1ff05e00
+79205e08
+20407358
+204072c2
+1a227200
+1a608c02
+20407337
+20407341
+204072c2
+1f227e00
+203a727f
+2020727a
+1800700c
+1de27e00
+67e20150
+20600000
+1a20a201
+20407258
+1a620c00
+2040734b
+204072c5
+2040736a
+1a60a610
+1a40a5f0
+20217283
+20600000
+204072b2
+47084022
+70806c00
+70806d01
+6fe0c16b
+1fe17e03
+67f0806e
+6fe1066d
+67f10068
+5800416d
+67f1006a
+6a20c16c
+684ac467
+20407253
+70800a02
+70800a03
+6fe0c16c
+67f100c0
+1fe0fe04
+67e0c16c
+6fe2c467
+1fe0fe01
+793ffe27
+67e2c467
+20600000
+6ff1011a
+98467c00
+20628000
+247a0000
+202072a6
+6ff08108
+c303233e
+5800416d
+98408a00
+df00000c
+e5e20005
+202072bb
+4708c022
+1800700c
+2040735e
+2040735d
+58000000
+67f100c0
+20600000
+6ff08108
+c30372b9
+70800a00
+20600000
+243bf2bd
+20600000
+18006c30
+18006c00
+202072bd
+18006c32
+18006c02
+202072bd
+18006c34
+18006c04
+202072bd
+18006c01
+18006c00
+20600000
+6ff08155
+c30172cb
+20600000
+67f100d2
+18006cc0
+18006c80
+202072cb
+18007000
+1a420c00
+18007204
+204072e1
+18006d80
+18006c80
+204072bd
+1800700c
+1a620a00
+18007204
+1de27e00
+e7e20005
+1f00f001
+c20072dc
+20600000
+efe10006
+e8410006
+18500400
+9841de00
+1f00f001
+c20072e1
+20600000
+18007008
+1a220c00
+18007204
+204072e1
+18007000
+1a420c00
+18007204
+204072e1
+18006d82
+18006c82
+204072bd
+202072d9
+18007000
+6fe20158
+98005e00
+1f00f001
+efe20006
+98005e00
+1f00f001
+6fe242ad
+98005e00
+1f00f001
+efe20006
+98005e00
+1f00f001
+2040735e
+1f00f1fc
+6fe24301
+1fe25e00
+1f00f004
+18006c38
+18006c08
+202072bd
+47094022
+6fe342dd
+684b0178
+2034f30f
+6fe30178
+684b42dd
+18007008
+18425e00
+1f00f001
+184f5e00
+1ff07e00
+9de1de00
+1f00f001
+1fef5e00
+1f00f001
+18005e00
+18007e00
+6fe0c2cd
+6848c390
+2434f31f
+6fe0c2d4
+6848c2cd
+67e0c2bd
+6048c2be
+18007000
+da4042bd
+18007204
+efe20011
+e8420012
+9842de00
+1f00f001
+1a20a204
+1a40a404
+c2007324
+2040735e
+1f00f1fc
+6fe24301
+1fe25e00
+1f00f004
+18006c38
+18006c0c
+204072bd
+2040735d
+18006c3a
+18006c08
+202072bd
+2f200600
+20608000
+18c27e00
+9f208a00
+18007e00
+e7e08005
+1f20f201
+2f200600
+20608000
+2020733c
+18007000
+1f227e00
+203a7346
+efe20006
+1f20f3fc
+98005e00
+1f00f001
+2f001e04
+20608000
+20207342
+18007008
+20207350
+18007004
+20207350
+18007000
+18007204
+efe20006
+98005e00
+1f00f001
+c2007351
+20600000
+d8c001a8
+2020734d
+18007204
+20207360
+18007000
+18007210
+2020735f
+18007000
+18007204
+18005e00
+1f00f001
+c200735f
+20600000
+1800700c
+18007204
+1de27e00
+e7e20005
+1f00f001
+c2007365
+20600000
+1800700c
+1a620a00
+1a40f201
+1f267c0f
+20217370
+18007210
+1de27e00
+1f267c03
+20217378
+e7e20005
+1f20f3fc
+20628000
+1f00f001
+20207370
+e7e08005
+1fecfe00
+c2007378
+20600000
+1800700c
+18007204
+efe20006
+9de67c00
+24628000
+1f00f001
+c200737e
+20207dba
+6ff08050
+793ffe00
+67f08050
+20600000
+6ff08050
+79207e00
+67f08050
+20600000
+d8a004af
+3803ffff
+3807ffff
+380bffff
+380ffbff
+e7e48005
+3803ffff
+3807ffff
+380bffff
+380fffff
+e7e48005
+3803ffff
+3807ffff
+380bcfff
+380fffff
+e7e48005
+3803ffff
+3807ffff
+380bffef
+380fffff
+e7e48005
+3803ffff
+3807ffff
+380bffff
+380fffff
+e7e48005
+3803ffff
+38066c7f
+3808146b
+380f7bb3
+e7e48005
+3801feb8
+38050c12
+380ab722
+380e9fa6
+e7e48005
+3800e70f
+38056720
+3808519e
+380d9084
+e7e48005
+38031012
+380760bf
+380bf0af
+380c03d3
+e7e48005
+3803a188
+38043ad0
+380bcbf2
+380e43d9
+e7e48005
+3802b030
+38076a03
+38091188
+380de520
+e7e48005
+3803a11e
+3804fe5d
+3808dd57
+380dac93
+e7e48005
+380011ed
+380618c4
+38088da7
+380e57ff
+e7e48005
+3803192b
+38074641
+3809be0c
+380f66ad
+e7e48005
+38001f83
+38055a23
+380bf9b0
+380c3949
+e7e48005
+38013a51
+380553fd
+380b372a
+380cf1bb
+e7e48005
+3803ae85
+3805eed9
+38089e66
+380c01a8
+e7e40005
+20600000
+d8a00547
+3803ffff
+3807ffff
+380bffff
+380fffff
+e7e48005
+3803ffff
+3804003f
+38080000
+380c0000
+e7e48005
+38000000
+38040000
+38081000
+380c0000
+e7e48005
+3803ff00
+3807ffff
+380bffcf
+380fffff
+e7e48005
+3803ffff
+3807ffff
+380bffff
+380c03ff
+e7e48005
+38000000
+38040000
+38080000
+380c0000
+e7e48005
+38010000
+38040000
+380bf000
+380fffff
+e7e48005
+380296ff
+38062630
+380b945d
+380fd284
+e7e48005
+380333a0
+38044b7a
+380837d8
+380fc9dc
+e7e48005
+3803a440
+3805b958
+380b8bce
+380d091f
+e7e48005
+3802e12c
+3805f47c
+380b56b1
+380efd47
+e7e48005
+38006837
+3806ed90
+3809ecec
+380dacc5
+e7e48005
+38023357
+38058af3
+3808f9e1
+380d29f0
+e7e48005
+3802e7eb
+3807e6e3
+380be1a7
+380d0b8b
+e7e48005
+38024fe3
+380420ef
+3809b5a6
+380cdc2f
+e7e48005
+38013860
+3806bd69
+3808391a
+380db222
+e7e48005
+20600000
+202074ea
+4709c022
+6fe0c483
+207a0000
+6fe0c485
+c1018000
+6fe0c484
+c00074ea
+20600000
+70448400
+20600000
+470a4022
+580005dc
+d8a005d7
+98a67200
+20407ca3
+580044e8
+d8a044e6
+98a67200
+20207ca3
+20407464
+da2005fc
+d8a0048f
+2040770a
+da2005dc
+d8a0044f
+2040770a
+da20044f
+da4005dc
+d8a0044f
+20407672
+da200567
+da4005dc
+d8a0046f
+20407672
+da20046f
+da40044f
+d8a0044f
+2040770e
+da20042f
+da40044f
+d8a0042f
+2040770e
+df200020
+da20048f
+da40042f
+20207d66
+da2005a7
+d8a0042f
+2040770a
+da200587
+d8a0044f
+2040770a
+da20044f
+da400587
+d8a0044f
+20407672
+da200567
+da400587
+d8a0046f
+20407672
+da20046f
+da40044f
+d8a0044f
+2040770e
+da20042f
+da40044f
+d8a0042f
+20207727
+18e08fff
+24610000
+180a7e00
+e7e10005
+2020747a
+18e08fff
+2421748a
+efe20011
+1fe20400
+efe20012
+9842fe00
+2422f489
+1a20a204
+1a40a404
+2020747f
+20207dc6
+20207dc8
+1fe10e07
+1fe97e00
+98c08c00
+efe08006
+afec0000
+20600000
+efe40006
+247a0000
+efe40006
+247a0000
+efe40006
+20600000
+efe20011
+98000400
+efe20012
+98467c00
+24628000
+1a20a204
+1a40a404
+c2007497
+20600000
+18007206
+1a20a214
+1a40a414
+efe20012
+98000400
+efe20011
+98467e00
+24610000
+247a0000
+1a20a3fc
+1a40a5fc
+c20074a3
+20600000
+18007206
+18002600
+efe20011
+98000400
+efe20012
+9840fe00
+9a60fe00
+e7e20005
+2feffe20
+7920a600
+1a20a204
+1a40a404
+c20074af
+20600000
+18007206
+18002600
+efe20012
+98000400
+efe20011
+98467e00
+9a667e00
+e7e20005
+2feffe20
+7920a600
+1a20a204
+1a40a404
+c20074bd
+20600000
+18007206
+1a20a214
+18002600
+efe20011
+2feffe00
+7920a601
+1fe37e00
+2a6ffe00
+7920fe1f
+e7e20011
+1a20a3fc
+1a632600
+c20074cc
+20600000
+18007206
+18002600
+efe20011
+2feffe1f
+7920a601
+1fe3fe00
+2a6ffe00
+7920fe00
+e7e20011
+1a20a204
+1a632600
+c20074d9
+20600000
+18007206
+efe20006
+98005e00
+1f00f001
+c20074e5
+20600000
+470ac022
+6fe0c483
+243a750b
+70448400
+70448500
+20600000
+6fe0c483
+207a0000
+6fe0c485
+c1018000
+20407540
+202074f0
+d8a04486
+38001abd
+3805b34f
+38099b8a
+380e6562
+e7e48005
+380340b7
+38041efa
+3808aff6
+380cfd41
+e7e48005
+3803d210
+38066cf8
+380b874c
+380f157c
+e7e48005
+3802d4a3
+3807d27d
+38080003
+e7e28005
+20600000
+6fe0c485
+c1800000
+6fe0c484
+c1800000
+204073e3
+d8a04486
+18000e0f
+2040747a
+180a7e00
+1fe37e00
+e7e10005
+6fe0c482
+245a74f6
+d8a0038f
+d8c04486
+20407c8f
+d8a0026f
+d8c00587
+20407c83
+d8a002af
+20407c9f
+7002af01
+20407558
+70448403
+20600000
+d8a044a6
+d8c002cf
+20407c83
+70448503
+70448400
+20600000
+6fe085d7
+c1800000
+6fe0c484
+c1800000
+d8a0038f
+d8c04486
+20407c8f
+d8a0026f
+d8c005dc
+20407c83
+d8a002af
+20407c9f
+7002af01
+20407558
+70448404
+20600000
+d8a0061c
+d8c002cf
+20407c8f
+7005d703
+70448400
+20600000
+6fe0c483
+207a0000
+6fe0c484
+207a0000
+1fe0fe80
+67e0c484
+c3838000
+6fe1020c
+203a754a
+20207550
+470b4022
+20407565
+6fe0c484
+c001f524
+c002753a
+20600000
+20407577
+6fe1020c
+1fe0ffff
+67e1020c
+d8c0038f
+2040748b
+20608000
+202075c8
+470bc022
+58000100
+67e1020c
+6fe1020c
+207a0000
+1fe0ffff
+67e1020c
+d8c0038f
+2040748b
+2020f55b
+d8c0026f
+d8a0032f
+20207c82
+da20036f
+d8a0046f
+20407634
+da20046f
+d8a0040f
+2040770a
+da20032f
+da40040f
+d8a002cf
+20407672
+da20046f
+da40040f
+d8a0044f
+20407672
+da20034f
+da40044f
+d8a002ef
+20207672
+da20036f
+d8a0044f
+2040770a
+da20044f
+d8a0046f
+2040770a
+da200567
+da40046f
+d8a0046f
+20407672
+da20032f
+d8a0044f
+2040770a
+d8c0044f
+d8a0040f
+20407c8f
+da20040f
+20407711
+da20044f
+da40040f
+d8a0044f
+2040770e
+da20044f
+da40046f
+d8a0044f
+2040770e
+d8c0032f
+d8a0040f
+20407c8f
+da20034f
+d8a0046f
+2040770a
+da20040f
+20407711
+da20040f
+20407711
+da20040f
+da40046f
+d8a0040f
+20407672
+da20046f
+d8a0042f
+2040770a
+da20042f
+20407711
+da20042f
+20407711
+da20042f
+20407711
+d8c0034f
+d8a0046f
+20407c8f
+da20046f
+20407711
+da20046f
+da40036f
+d8a0036f
+20407672
+da20044f
+d8a0046f
+2040770a
+da20046f
+da40040f
+d8a0046f
+20407727
+da20046f
+da40040f
+d8a0032f
+20407727
+da20040f
+da40032f
+d8a0046f
+20407727
+da20046f
+da40044f
+d8a0046f
+20407672
+da20046f
+da40042f
+d8a0034f
+20207727
+da2002af
+d8a0048f
+2040770a
+da20032f
+da40048f
+d8a0042f
+20407672
+da2002af
+da40048f
+d8a0048f
+20407672
+da20034f
+da40048f
+d8a0040f
+20407672
+da20036f
+d8a0048f
+2040770a
+da20026f
+da40048f
+d8a0044f
+20407672
+da20036f
+da40048f
+d8a0048f
+20407672
+da20028f
+da40048f
+d8a0046f
+20407672
+da40042f
+da20044f
+d8a0048f
+20407727
+da20042f
+da40044f
+d8a0042f
+2040770e
+da40040f
+da20046f
+d8a0044f
+20407727
+da20040f
+da40046f
+d8a0040f
+2040770e
+da20040f
+da40048f
+d8a0040f
+20407672
+da20036f
+da4002af
+d8a0046f
+20407672
+da20046f
+da40048f
+d8a0036f
+20407672
+da20048f
+d8a0048f
+2040770a
+da20048f
+da40042f
+d8a0046f
+20407672
+da20048f
+da40040f
+d8a0040f
+20407672
+da20044f
+d8a0032f
+2040770a
+da20032f
+da40046f
+d8a0032f
+20407727
+d8c0032f
+d8a0048f
+20407c8f
+da20048f
+20407711
+da20046f
+da40048f
+d8a0046f
+20407727
+da20046f
+da40044f
+d8a0044f
+20407672
+da20044f
+da40040f
+d8a0034f
+20407727
+da20034f
+da400547
+d8a0034f
+18002600
+6fe0834f
+2feffe00
+2040f70c
+1a626000
+da20034f
+2040773c
+6fe0836e
+2e0ffe00
+7920fe07
+67e0836e
+20600000
+18a21600
+d8a0042f
+20407c9f
+18007e00
+67e2044f
+70042f01
+d8a003af
+20407ca1
+d8c00547
+d8a003ef
+20407c8f
+1a220c00
+d8a0040f
+20407c8f
+d8c0040f
+20407746
+203a766b
+da20040f
+da40042f
+20407749
+da2003ef
+da4003af
+20407749
+da20040f
+da4003ef
+20407742
+2021765d
+da2003ef
+da40040f
+1a220a00
+2040773a
+da20042f
+da4003af
+1a420a00
+2040770c
+efe08011
+9a60a600
+efe08012
+9a60fe00
+e7e08012
+20207642
+da20040f
+da4003ef
+1a220a00
+2040773a
+da2003af
+da40042f
+1a420a00
+2040770c
+efe08011
+9a60a600
+efe08012
+9a60fe00
+e7e08012
+20207642
+da2003af
+19620a00
+2040769b
+da200547
+19622400
+19620a00
+20207727
+18a21600
+18007000
+d8a003af
+20407ca1
+d8a0068f
+20407ca1
+1a220c00
+70068f00
+58000000
+20407704
+1a420c00
+20407708
+18000e00
+d8a003af
+d840068f
+18e22400
+1a4bfe00
+9840a400
+18000400
+18002600
+efe20005
+98002200
+efe20012
+1a627000
+9deffe00
+9a20fe00
+9840fe00
+e7e20005
+1fef0400
+1a60a601
+2a61fe08
+2420f686
+18427e00
+e7e20005
+18a08be0
+18e08e01
+28e1fe08
+2420f680
+da2003af
+19620a00
+2020769b
+470c4023
+18a21600
+1a226000
+da4003ef
+1a420a00
+20407c9d
+e7e40005
+1a208c2c
+20407c8b
+20407c85
+1a422200
+20407711
+da4003ef
+1e022200
+19620a00
+2040770e
+da4003ef
+1a420a00
+20407c9d
+e7e40005
+1e008c30
+20407c91
+20407c9d
+1a422200
+20407711
+da4003ef
+19622200
+1a220a00
+2040770e
+da4003ef
+1a420a00
+1e008c20
+20407c85
+20407c9d
+e7e40005
+1e008c38
+20407c8b
+19622200
+1a220a00
+2040770e
+da4003ef
+1a420a00
+1e008c24
+20407c85
+1e008c34
+20407c85
+1e008c34
+20407c86
+1e008c20
+20407c86
+19622200
+1a220a00
+2040770e
+da4003ef
+1a420a00
+1e008c2c
+20407c85
+20407c9d
+e7e40005
+1e008c20
+20407c86
+1e008c28
+20407c86
+19622200
+1a220a00
+20407727
+da4003ef
+1a420a00
+1e008c30
+20407c8b
+20407c8b
+18007e00
+e7e40005
+1e008c24
+20407c86
+1e008c2c
+20407c86
+19622200
+1a220a00
+20407727
+da4003ef
+1a420a00
+1e008c34
+20407c85
+1e008c20
+20407c85
+20407c9d
+1e008c30
+20407c86
+19622200
+1a220a00
+20407727
+da4003ef
+1a420a00
+1e008c38
+20407c8b
+20407c9d
+1e008c24
+20407c85
+20407c9d
+1e008c34
+20407c86
+19622200
+1a220a00
+20207727
+18007220
+d8a0068f
+98a08a00
+20207cdc
+18007208
+202074e5
+1a222400
+20207672
+18007208
+202074ae
+2040770c
+18a22200
+20207712
+2040773f
+2a6ffe00
+2020f71b
+da400547
+1a222600
+1a20a3e0
+20407742
+24610000
+1a622200
+20207723
+20407723
+1a222600
+1a20a3e0
+da400547
+20407742
+24610000
+1a622200
+20207723
+1a20a3e0
+da400547
+1a220a00
+2020773a
+2040773a
+2020f731
+18a0a3e0
+da400547
+20407742
+24610000
+da400547
+18a0a3e0
+1a220a00
+2020773a
+18a0a3e0
+da400547
+1a220a00
+2040770c
+20608000
+18a0a3e0
+da400547
+1a220a00
+2020770c
+18007208
+202074bc
+18007208
+1a20a21c
+202074cb
+18007208
+18002600
+202074d9
+18007208
+1a20a21c
+1a40a41c
+202074a3
+efe40006
+247a0000
+20207491
+1a226000
+1e022200
+efe08011
+2feffe00
+20608000
+2040773c
+efe08012
+2fec0000
+2020f759
+da200547
+1a420a00
+2040770c
+efe08012
+9a60fe00
+e7e08012
+1a40a5e0
+1a40a220
+18007209
+204074cb
+2020774a
+20758000
+204023ba
+20407764
+20407809
+2020779a
+204077bd
+202077f8
+6fe0c503
+c17f8000
+98000400
+20406ef1
+6848c503
+20406eed
+20000064
+6848c503
+20406ed7
+2020776e
+470cc023
+6fe0c503
+c17f8000
+1fe20400
+20406ee0
+2420f780
+2040778a
+6fe14500
+79207e0c
+67e14500
+6fe0c4fb
+c1000000
+7044fb00
+6fe0c502
+67e0c4fa
+20407791
+70064d2c
+20207819
+6fe14500
+793ffe0c
+67e14500
+6fe0c4fb
+c1008000
+7044fb01
+7044fa00
+20407793
+70064d2d
+20207819
+6fe0c4fa
+207a0000
+1fe0ffff
+67e0c4fa
+247a0000
+70064d10
+20207819
+d8e00007
+202024be
+d8e00007
+202024c2
+470d4023
+6fe14506
+1a2fa40b
+9a40a400
+20600000
+6fe0c505
+207a0000
+1fe27200
+6fe14506
+1fe22400
+1a40a602
+e8408013
+204077a5
+1a40a40b
+c200779f
+20600000
+6fe0c504
+203a6eed
+20206ef1
+20407795
+58000002
+e7e08012
+204077f2
+202077c9
+20407795
+58000003
+e7e08012
+204077f2
+202077c6
+20407795
+58000001
+e7e08012
+580000ff
+e7e08005
+202077c6
+20407795
+df20000b
+1a620c00
+1a420a00
+20207cce
+6fe0c505
+207a0000
+da200000
+204077cc
+1a20a201
+6fe0c505
+9a267c00
+20628000
+202077c0
+1a40a602
+e8408013
+20206eed
+1a40a602
+e8408013
+20206ef1
+1a208e0b
+20407cf1
+247a0000
+20407795
+efe08012
+c00177c9
+c001f7c6
+c00077c6
+c002f7e0
+204077c9
+1a40a607
+20407c4b
+efe10013
+20407d7b
+20407c57
+58000005
+e7e08012
+1a40a603
+efe10013
+202077f0
+204077c6
+1a40a609
+20407c4b
+efe10013
+20407d7b
+20407c57
+1a40a601
+efe08013
+c07ff7ec
+1fe0ffff
+e7e08013
+203a77ad
+58000004
+e7e08012
+1a40a605
+efe10013
+1a208e0b
+20207ce3
+58000000
+202077f0
+58001000
+1ff07e00
+9a40a400
+20600000
+470dc023
+da200000
+684a44fc
+1c422400
+1a427e00
+98467c00
+244177f4
+1a427e00
+184084a0
+184084a0
+98467c00
+2421780c
+1a20a201
+1a217e0f
+243a77ff
+da200000
+20407812
+1c427e00
+67e244fc
+20600000
+1a227e00
+207a0000
+18408560
+18408560
+793f841c
+604a44fc
+20203749
+7044e801
+6fe0c4e9
+243a7814
+20600000
+7044e800
+20600000
+470e4023
+6fe0c3cf
+c007ca1d
+20407813
+1a227e00
+67e20662
+da2044ea
+20407d8d
+6fe20662
+1fe22200
+20207817
+470ec023
+20407813
+1a227e00
+67e20662
+da2044f2
+20407d8d
+6fe20662
+1fe22200
+20207817
+58000000
+67e444f2
+67e444ea
+20600000
+470f4023
+6fe0c114
+247a0000
+da2044f2
+20407da5
+207a0000
+70064c00
+2040783c
+6fe0864c
+203a7831
+20600000
+20407813
+da2044f2
+20407d99
+1fe20400
+20407817
+470fc023
+18427e00
+207a0000
+c006f860
+c0077866
+c007f86b
+c0087871
+c009f87b
+c00a787d
+c00af87f
+c00b7889
+c00bf88c
+c00c788e
+c00cf891
+67e0864d
+6fe0864d
+c584f859
+47104024
+6fe0864d
+c008f876
+c00df899
+c009787a
+c00fee95
+20600000
+67e0864d
+2040205d
+2022f85e
+20402062
+24628000
+70064c01
+20207824
+70438c01
+70438f00
+6fe14500
+79207e0b
+67e14500
+20600000
+6fe14500
+793ffe0b
+67e14500
+70438c00
+20600000
+70438c01
+70438f01
+6fe14500
+79207e0b
+67e14500
+20600000
+6fe14500
+793ffe0b
+67e14500
+70438c00
+20600000
+58000014
+67e10196
+67e142f7
+202030a3
+20202e71
+da200000
+202077ad
+da200000
+202077a8
+da200000
+20407795
+efe08012
+c000f886
+c0027886
+c002f886
+202077b2
+efe08006
+c17f8000
+202077b2
+70434701
+7041141b
+20600000
+70434701
+20600000
+70434700
+70411400
+20600000
+6fe143de
+20407d7b
+6fe0c503
+c07ff897
+1fe20400
+20406ed7
+2040782d
+202023ff
+20202eb3
+6fe0c500
+c4060000
+20600000
+6fe14404
+1fe08a02
+58000000
+e7e18005
+20600000
+4710c024
+20407dbe
+204078ee
+207a0000
+6fe14404
+1fe0a402
+e8408012
+18408401
+e0408012
+e840803f
+18427200
+1fe0a404
+efe08012
+984ffe00
+98c08a00
+1a220c00
+20407cdc
+204078f2
+1fe0ffff
+e8408012
+18408401
+98410400
+e0408012
+20207dbc
+47114024
+20407dbe
+204078ea
+207a0000
+6fe14404
+1fe0a402
+e8408012
+184085ff
+e0408012
+e840803f
+18427200
+1fe0a403
+efe08012
+984ffe00
+98c08c00
+18c08c01
+1a220a00
+202078b2
+20407dbe
+204078ea
+207a0000
+6fe14404
+e840803f
+18427200
+1fe0a403
+efe08012
+984ffe00
+98c08c00
+18c08c01
+18c22400
+1a220a00
+20407cdc
+20207dbc
+20407dbe
+204078ea
+207a0000
+6fe14404
+e840803f
+18427200
+1fe0a403
+efe08012
+984ffe00
+98c08c00
+18c08a02
+1a220c00
+1f20f3ff
+20407cdc
+20207dbc
+6fe14404
+1fe08c02
+efe08006
+20600000
+204078f2
+e8408006
+98467e00
+20600000
+6fe14404
+1fe08c01
+efe08006
+20600000
+4711c024
+6ff08c22
+2feffe03
+2040f905
+6ff10c22
+67f10c22
+67e106e7
+20407963
+20407994
+20407b8a
+20407bd3
+2020795b
+47124024
+20407384
+20407922
+708c0000
+20002710
+708c1200
+6ff10050
+793ffe0a
+67f10050
+708c1021
+708c119d
+708c003c
+58000741
+67f10c02
+67f10c06
+58000781
+67f10c04
+708c1280
+708c0100
+708c22ff
+5800093d
+d8a0084b
+98a67200
+20207ca3
+6848884a
+20206ed7
+6fe088ec
+207a0000
+6848884a
+20406ee0
+2020f905
+20600000
+70084902
+58000000
+67e08784
+67e10843
+1fe0fe01
+67e10845
+1fe0fe01
+67e10847
+d8a007d8
+58030404
+e7e18005
+58000409
+e7e10005
+d8a007dd
+38015906
+380610d2
+38090494
+380c0001
+e7e48005
+d8a007fb
+3801570f
+38055c9a
+380a56c6
+380dcdcd
+e7e48005
+38014420
+38065d99
+380a5636
+380c0001
+e7e38005
+d8a00819
+3801620a
+38040c8c
+380b0333
+380cc0c0
+e7e48005
+38003130
+e7e10005
+580092aa
+67e10785
+58009307
+67e10787
+d8c093fb
+d8a00789
+df200013
+20407cdc
+d8c0940e
+d8a0079c
+df20003c
+20407cdc
+6fe10837
+20207d7b
+6fe08839
+207a0000
+67e087be
+67e087d7
+20600000
+d8e00001
+20407cf1
+247a0000
+6fe088ed
+247a0000
+6fe088ec
+245a7c3a
+20600000
+6fe086e7
+c2817966
+20600000
+2040796b
+20407cf0
+58000280
+d8e00001
+20207ce3
+6fe088de
+c0817970
+7008ed00
+7008ee00
+20600000
+6fe088f0
+207a0000
+7008f000
+7008de02
+7008ec01
+20600000
+6fe086e7
+c28079a1
+20600000
+69510c02
+6a110c04
+68710c06
+efe10003
+1fec8400
+18518400
+d8c00fff
+98c17200
+672106ea
+20600000
+6ff08c25
+c3830000
+20407979
+efe08003
+e7e08005
+c2007986
+60710c06
+20600000
+d8a0093d
+20407986
+d8400941
+60590c0e
+6fe0893e
+1fe0fe06
+e7e08002
+708c1808
+20600000
+4712c024
+6fe086e7
+c4028000
+20407979
+2841fe0d
+2020f98b
+d8a0084b
+20407986
+6fe086ea
+c0007976
+c000f9a8
+1fe67c07
+20610000
+47134024
+793f8023
+6fe0884b
+1fe17e80
+c04079ac
+c00079b4
+2020233e
+6fe0884b
+c3838000
+20407b5e
+202079db
+6fe0884b
+1ff1fe00
+1fe37e00
+1fe17e03
+c00079bc
+c000f9c2
+c00179c7
+2020233e
+6fe0884b
+1ff1fe00
+1fe37e00
+1fe17e03
+c00079c8
+c000f9d0
+c00179d5
+2020233e
+6fe0884c
+c00479dd
+c00379f3
+c0057a38
+c0007a4a
+202079d6
+6fe0884c
+c0017a7f
+c000fa83
+c001fa95
+202079d6
+202079d6
+6fe0884c
+c000fa9f
+c001facf
+c002fafb
+c004fb14
+c005fb2f
+c003f9d6
+202079d6
+6fe0884c
+c0057b40
+c004fb52
+c005fb70
+202079d6
+202079d6
+4713c024
+6ff08c19
+79207e00
+67f08c19
+202079db
+708c1b01
+20600000
+6fe0884b
+c0c079d6
+6fe0884f
+c08079d6
+6fe08850
+c08079d6
+6fe08851
+c080f9d6
+6fe08852
+c08079d6
+6fe0884d
+c08079d6
+6fe0884e
+c08079d6
+6fe08849
+c00279ef
+c001f9f1
+202079d6
+da400001
+20207a64
+da400001
+20207a62
+47144025
+6fe0884e
+c000fa06
+c0017a1f
+c001fa22
+c010f9fb
+c0117a30
+202079d6
+7008db00
+6fe0884f
+c0007a00
+c000fa03
+202079d6
+6a4087af
+da2007af
+20207b7f
+6a4087c8
+da2007c8
+20207b7f
+6fe088ef
+245a7a17
+58000789
+68488789
+67e108e6
+604888e8
+6fe08851
+98467c00
+24217a15
+6fe088e8
+98002400
+6fe108e6
+1fe0fe01
+98002200
+20207b7f
+6fe08851
+20207a10
+6ff08c01
+245a7a1b
+7008ef00
+20600000
+6ff08c01
+79207e07
+67f08c01
+20600000
+5800079c
+6848879c
+20207a0a
+6fe0884d
+1fe67c03
+242179d6
+6fe0884d
+da2007d8
+c0007b7d
+79200023
+da2007dd
+c000fb7d
+da2007fb
+c0017b7d
+da200819
+c001fb7d
+20600000
+6fe1084f
+c000fa34
+6a210785
+20207b7d
+7008ec01
+7008de01
+6a210787
+20207b7d
+6fe08849
+c08279d6
+6fe0884b
+c0c0f9d6
+6fe0884d
+c08079d6
+6fe0884e
+c08079d6
+6fe08851
+c080f9d6
+6fe08852
+c08079d6
+6fe0884f
+c08079d6
+6fe08850
+c08079d6
+da400001
+20207a62
+6fe08849
+c00179d6
+6fe0884d
+c08079d6
+6fe0884e
+c08079d6
+6fe08851
+c08179d6
+6fe08852
+c08079d6
+6fe08850
+c08079d6
+6fe0884b
+c0407a5d
+c040fa68
+c0417a6c
+202079d6
+7008e101
+20207a66
+6fe0884f
+c08079d6
+da400002
+6fe088df
+c000fa5b
+da200843
+20207b7f
+da200845
+20207b7f
+da200847
+20207b7f
+6fe08849
+c08279d6
+da400002
+20207a62
+6fe08849
+c08279d6
+6fe0884f
+c040fa79
+c0417a7b
+c041fa7d
+1fe17e7f
+c0007a75
+202079d6
+6fe088e2
+da400002
+c000fa64
+20207a62
+6fe088e3
+20207a76
+6fe088e4
+20207a76
+6fe088e5
+20207a76
+7008d901
+da2008da
+da400001
+20207b7f
+4714c025
+6fe1084d
+d84001ba
+98467c00
+2422f9d6
+6fe088d6
+243a7a92
+70089300
+6fe08851
+98002400
+da200893
+20407b7f
+d8a00893
+df200040
+20207ca5
+7008d600
+70089301
+20207a8b
+6fe08851
+c080f9d6
+7008db01
+da400001
+6fe088dd
+c0007a9d
+c000fa9e
+20207a62
+20207a64
+20207a62
+6fe08849
+c08279d6
+6fe08851
+c08079d6
+6fe08852
+c08079d6
+6fe0884e
+c08079d6
+6fe08850
+c08079d6
+6fe0884b
+c0007aae
+c000fabc
+c0017abd
+202079d6
+47154025
+6fe0884d
+c080f9d6
+6ff08c00
+793ffe07
+67f08c00
+7008df00
+7008e001
+6fe088e1
+203a79db
+7008e100
+7008e000
+7008de02
+202079db
+202079d6
+6fe0884d
+c08079d6
+6fe0884f
+c040fac8
+c0417acb
+c041facd
+1fe17e7f
+c0007ac6
+202079d6
+7008e200
+202079db
+7008e300
+7008f001
+202079db
+7008e400
+20207ac9
+7008e500
+20207ac9
+6fe08851
+c08079d6
+6fe08852
+c08079d6
+6fe0884b
+c0007ad8
+c000fae7
+c0017ae8
+202079d6
+4715c025
+6fe0884d
+c080f9d6
+20403dd6
+6ff08c00
+79207e07
+67f08c00
+7008df01
+7008de03
+7008d700
+204079db
+20407cf0
+58001388
+d8e0000f
+20207ce3
+202079d6
+6fe0884d
+c08079d6
+6fe0884e
+c08079d6
+6fe0884f
+c040faf5
+c0417af7
+c041faf9
+1fe17e7f
+c0007af3
+202079d6
+7008e201
+202079db
+7008e301
+202079db
+7008e401
+202079db
+7008e501
+202079db
+6fe0884b
+c08079d6
+6fe0884f
+c08079d6
+6fe08850
+c08079d6
+6fe08851
+c08079d6
+6fe08852
+c08079d6
+6fe0884e
+c08079d6
+6fe0884d
+1fe17e80
+c08079d6
+6fe0884d
+c0807b12
+70084902
+6fe0884d
+67f08c01
+204079db
+7008ef01
+20600000
+70084903
+20207b0d
+6fe08849
+c00179d6
+6fe0884b
+c08079d6
+6fe0884f
+c08079d6
+6fe08850
+c08079d6
+6fe08851
+c08079d6
+6fe08852
+c08079d6
+6fe0884e
+c08079d6
+6fe0884d
+1fe67c01
+242179d6
+6fe08849
+c001fb29
+c0027b29
+202079d6
+6fe0884d
+c0007b2d
+70084904
+202079db
+70084903
+202079db
+6fe08849
+c08279d6
+6fe0884b
+c080f9d6
+6fe0884d
+c08079d6
+6fe0884e
+c08079d6
+6fe08851
+c08079d6
+6fe08852
+c08079d6
+6fe0884f
+c08079d6
+6fe08850
+c08079d6
+202079db
+47164025
+7008d901
+6fe0884e
+67e088da
+6fe0884f
+1fe67c01
+2042fb4e
+6fe088de
+c08279db
+7008de02
+204079db
+20007530
+20007530
+20600000
+7008ec01
+7008e000
+7008de04
+20600000
+4716c025
+20003a98
+d8a00853
+20407983
+7008d501
+20407b62
+6fe1084d
+67e108d3
+708c1b02
+6fe088d7
+207a0000
+6fe08853
+67e0c638
+7008d700
+70462803
+20600000
+6fe1084d
+d8400200
+98467c00
+24628000
+6fe1084f
+d8400000
+98467c00
+24628000
+6fe10851
+d8400001
+98467c00
+24628000
+7008d701
+20600000
+6fe08851
+c08079d6
+6fe0884d
+c0007b76
+c000fb79
+202079d6
+7008dc00
+7008dd01
+202079db
+7008d801
+7008dc01
+7008dd00
+202079db
+ea408011
+1a20a201
+47174025
+7920000e
+c591fb84
+1a40a401
+1a43a400
+62210782
+62408784
+20207b8a
+20600000
+d8e00000
+20207bcb
+4717c025
+6ff08c25
+c3800000
+6fe08784
+207a0000
+1fe27200
+98000400
+6fe10851
+1fe67c40
+20217b98
+1f267c40
+20217b9c
+18007240
+20207b9c
+9f267c00
+20217b9c
+98007200
+67e08784
+6fe08784
+9f267e00
+67e08784
+1f20ffff
+67e086ec
+c591fbae
+1fe37e00
+1f20ffff
+67e086ec
+c5877bae
+793f800e
+e0408005
+58000003
+e7e08005
+1f20f3ff
+1f227e00
+2422fbae
+1f20f201
+6fe10782
+1fe20c00
+efe08006
+e7e08005
+c591fbb5
+58000000
+e7e08005
+c2007bb0
+18c27e00
+67e10782
+580006ec
+67f10c08
+d8e00000
+20407bcb
+6fe08784
+247a0000
+708c1b02
+6fe088de
+c1808000
+7008de02
+20600000
+da20072d
+d8e00001
+62310c0a
+1f20ffff
+e7e08011
+efe08006
+e7e08005
+c2007bc8
+58000000
+f9207e00
+67f08c18
+20600000
+d8e00002
+da200737
+62310c0c
+20207bc6
+47184026
+6fe088eb
+207a0000
+6ff08c25
+1fe17e0f
+243a7c32
+6fe088ec
+203a7bfe
+6fe088de
+c001fc42
+c0817bfe
+6fe088e0
+243a7bfe
+20407be2
+20207bee
+6ff08c25
+c3808000
+6fe088eb
+c4008000
+6fe088eb
+793ffe01
+67e088eb
+4718c026
+6fe088e9
+207a0000
+c0087c20
+2020233e
+6ff08c25
+c3810000
+6fe088eb
+c4010000
+6fe088eb
+793ffe02
+67e088eb
+47194026
+6fe088ea
+207a0000
+c0107c01
+c010fc1c
+c0117c26
+c011fc2a
+c0127c2e
+2020233e
+d8a008f1
+df200040
+20207ca5
+6fe088d9
+684888db
+98417e00
+203a7c18
+684888dc
+9840fe00
+c000fc09
+20207c18
+7008ea00
+6fe088f2
+c0017c19
+c001fc19
+6fe088f2
+67e088f1
+6fe088f3
+e7e08005
+6fe088f5
+e7e08005
+6fe088f7
+e7e08005
+df200004
+d8c008f1
+20207bcf
+7008ea00
+df200008
+d8c008f1
+20207bcf
+7008ea00
+df200003
+d8c00921
+20207bcf
+6fe0c3cf
+c007ca10
+7008e900
+df200008
+d8c00901
+20207bc3
+7008ea00
+df200002
+d8c00929
+20207bcf
+7008ea00
+df200004
+d8c00921
+20207bcf
+7008ea00
+df20000f
+d8c00911
+20207bcf
+6fe088de
+c0017c35
+20600000
+6ff08c00
+79207e07
+67f08c00
+7008ee01
+20600000
+6fe088de
+c1018000
+c0017c3e
+20600000
+6fe088ee
+207a0000
+7008ed01
+20207c45
+d8e0000f
+20407cf1
+247a0000
+6ff08c00
+c4038000
+708c00fc
+20007530
+708c003c
+20600000
+60a1066f
+604c0656
+6162065e
+20407c53
+60c1066d
+67210679
+60e10677
+20600000
+62220662
+62420666
+6261866a
+20600000
+4719c026
+6fe1066f
+98000a00
+684c0656
+6962065e
+20407c62
+6f210679
+68e10677
+6fe1066d
+98000c00
+20600000
+6a220662
+6a420666
+6a61866a
+20600000
+6fe1066f
+1fe20a00
+20600000
+6fe1066d
+1fe20c00
+20600000
+18a27e00
+67e1066f
+20600000
+18c27e00
+67e1066d
+20600000
+18a27e00
+67e1066f
+18c27e00
+67e1066d
+20600000
+6fe1066f
+1fe20a00
+6fe1066d
+1fe20c00
+20600000
+98462200
+20610000
+da200100
+9a20fe00
+98462200
+20600000
+20407c8f
+20407c8f
+20207c8f
+20407c8b
+efe08006
+e7e08005
+efe18006
+e7e18005
+20600000
+efe40006
+e7e40005
+20600000
+20407c91
+20407c8b
+20407c8b
+20407c8b
+20207c8b
+1fe0ffff
+20000026
+243a7c93
+20600000
+df20000a
+20002ee0
+c2007c98
+20600000
+20407c9c
+20407c9d
+18007204
+20207ca5
+18007220
+20207ca5
+18007240
+20207ca5
+1f227e00
+207a0000
+18007e00
+e7e00005
+20600000
+df200020
+d8a0067f
+20207ca3
+efe20013
+e8420011
+9842fe00
+e7e20005
+1a20a204
+1a60a604
+c2007cab
+20600000
+471a4026
+1f227e00
+1fe67c01
+20610000
+9a20a400
+1a40a5ff
+1f237200
+e8408011
+efe08012
+e7e08011
+e0408012
+1a40a5ff
+1a20a201
+c2007cba
+20600000
+1fef0400
+20407cc8
+18508400
+1ff07e00
+9841fe00
+20600000
+1ff10c00
+18d08c00
+1ff0fe00
+1ff07e00
+98c1fe00
+20600000
+471ac026
+1f227e00
+207a0000
+1f20f3f8
+20417c8b
+20628000
+20217cd1
+1f20f208
+1f20f3fc
+20417c86
+20628000
+20217cd6
+1f20f204
+20207cdc
+1f227e00
+207a0000
+efe08006
+e7e08005
+c2007cde
+20600000
+58000000
+67e1064e
+471b4026
+20407cf1
+6849064e
+d8a040f4
+18e3fe00
+98a08a00
+e0410005
+20600000
+d9600800
+19701600
+9960fe00
+20600000
+d8e00000
+471bc026
+684a4095
+1c437e00
+67e24095
+98467c00
+24417cec
+98461600
+19620400
+d8c040f4
+18c20a00
+df200010
+efe10006
+98467e00
+20217d00
+18007e00
+e7e10005
+c2007cfc
+d8c040f4
+18e3fe00
+98c08c00
+efe10006
+20600000
+98408400
+18427200
+6fe10044
+9f267e00
+20610000
+1fe67e00
+18510400
+18408401
+18500400
+98418400
+20600000
+20407d14
+20207d21
+78547c00
+98467e00
+20217d19
+78347c00
+1fe67e00
+c4078000
+1fe22800
+d8410000
+6fe10044
+98467e00
+00020001
+18000228
+03020002
+030a0128
+2a000200
+00000014
+00000000
+00000000
+00000000
+00000000
+02000400
+02012803
+01020005
+03c2022a
+03020006
+07020128
+2a040200
+06000608
+2c006400
+02000801
+01022800
+02000918
+20012803
+0502000a
+000b002a
+02290202
+000c0000
+02280002
+000d180a
+01280302
+02000e02
+59062a29
+69684369
+02000f70
+02012803
+50020010
+3502072a
+01aa2212
+02001100
+12022800
+02001218
+06012803
+4e020013
+1401012a
+28030200
+00151201
+082a4d02
+00000000
+00000000
+02020016
+00000229
+08020017
+01020229
+03020018
+191a0128
+2a4d0200
+00000007
+00000000
+0202001a
+00000229
+0802001b
+01010229
+0302001c
+1d120128
+2a4d0200
+1e000002
+29020200
+1f000002
+29080200
+20010302
+28030200
+00211201
+022a4d02
+00220000
+02290202
+00230000
+02290802
+00240104
+01280302
+0200250e
+00022a4d
+02002600
+02022908
+02002702
+02012803
+4b020028
+0c05f52a
+01a10109
+00150585
+01750125
+830a1895
+09ea0901
+09e209e9
+09b509b6
+0ab709cd
+8a0a0223
+01940a01
+0a022a0a
+210a0192
+02240a02
+0a03070a
+700901ae
+30096f09
+250ab809
+02260a02
+8102270a
+0105c002
+01a10609
+01750285
+07050895
+e729e019
+01250015
+01950281
+03810875
+01750595
+01190805
+02910529
+03750195
+06950391
+00150875
+0500ff26
+2a001907
+008100ff
+090105c0
+8501a102
+a1010901
+19090500
+15082901
+75012500
+81089501
+09010502
+16310930
+ff26f801
+95107507
+09068102
+25811538
+9508757f
+05068101
+02380a0c
+06810195
+0105c0c0
+01a18009
+00150485
+01750125
+81190395
+02818329
+05750195
+29c00381
+28030200
+002a1a01
+082a3302
+00000000
+00000000
+0202002b
+00010229
+0302002c
+2d020128
+2a4a0200
+00010104
+02002e03
+0f022800
+02002f18
+12012803
+19020030
+3164012a
+29020200
+32000002
+28030200
+00330401
+002a4c02
+061a0000
+8809ffbc
+048501a1
+ff2a0019
+26001500
+087500ff
+00810195
+010541c0
+01a10609
+08950175
+e0190705
+0015e729
+02810125
+08750195
+05950381
+08050175
+05290119
+01950291
+03910375
+08750695
+ff260015
+19070500
+00ff2a00
+f3c00081
+02090105
+018501a1
+00a10109
+01190905
+00150529
+05950125
+02810175
+03750195
+01050181
+31093009
+26F80116
+107507FF
+06810295
+81153809
+08757f25
+06810195
+380a0c05
+81019502
+05c0c006
+a1800901
+05028501
+29811901
+25001588
+75089501
+c0068101
+09ff0006
+8501a10e
+751f95BA
+00ff2608
+01090015
+BA850291
+08751f95
+1500ff26
+81010900
+0c05C002
+01a10109
+00150585
+01750125
+830a1895
+09ea0901
+09e209e9
+09b509b6
+0ab709cd
+8a0a0223
+01940a01
+0a022a0a
+210a0192
+02240a02
+0a03070a
+700901ae
+30096f09
+250ab809
+02260a02
+8102270a
+0c05c002
+01a10109
+00150385
+19038026
+03802a00
+01951075
+12c00081
+02000112
+40000000
+10203151
+02010002
+093b0100
+02003b02
+32a00001
+00000409
+01010301
+00210900
+22010002
+0507001a
+00400381
+01040902
+01030100
+21090002
+01000200
+0700f322
+40038205
+00b00200
+01090c05
+058501a1
+01250015
+18950175
+0901830a
+09e909ea
+09b609e2
+09cd09b5
+02230ab7
+0a018a0a
+2a0a0194
+01920a02
+0a02210a
+070a0224
+01ae0a03
+6f097009
+b8093009
+0a02250a
+270a0226
+c0028102
+06090105
+028501a1
+08950175
+e0190705
+0015e729
+02810125
+08750195
+05950381
+08050175
+05290119
+01950291
+03910375
+08750695
+ff260015
+19070500
+00ff2a00
+05c00081
+a1800901
+15048501
+75012500
+19039501
+81832981
+75019502
+c0038105
+0c0500ba
+01a10109
+00150585
+01750125
+830a1895
+09ea0901
+09e209e9
+09b509b6
+0ab709cd
+8a0a0223
+01940a01
+0a022a0a
+210a0192
+02240a02
+0a03070a
+700901ae
+30096f09
+250ab809
+02260a02
+8102270a
+0105c002
+01a10609
+01750285
+07050895
+e729e019
+01250015
+01950281
+03810875
+01750595
+01190805
+02910529
+03750195
+06950391
+00150875
+0500ff26
+2a001907
+008100ff
+0309ff05
+01950875
+05c00281
+a1800901
+15048501
+75012500
+19039501
+81832981
+75019502
+c0038105
+0c0500ca
+01a10109
+00150585
+01750125
+830a1895
+09ea0901
+09e209e9
+09b509b6
+0ab709cd
+8a0a0223
+01940a01
+0a022a0a
+210a0192
+02240a02
+0a03070a
+700901ae
+30096f09
+250ab809
+02260a02
+8102270a
+0105c002
+01a10609
+01750285
+07050895
+e729e019
+01250015
+01950281
+03810875
+01750595
+01190805
+02910529
+03750195
+06950391
+00150875
+0500ff26
+2a001907
+008100ff
+090105c0
+8501a106
+75709501
+25001501
+19070501
+00ff2a00
+05c00281
+a1800901
+15048501
+75012500
+19039501
+81832981
+75019502
+c0038105
+00020001
+18010228
+03020002
+03200128
+2a050200
+00040001
+02290202
+00050000
+02280002
+00061800
+01280302
+02000702
+43132a00
+73706968
+422d6165
+2020454c
+20202020
+00082020
+01280302
+02000902
+c1022a01
+02000a03
+02012803
+0402000b
+0006082a
+00640006
+000c012c
+02280002
+000d180a
+01280302
+02000e02
+02072a50
+8266248a
+000f0001
+02280002
+00101812
+01280302
+02001106
+01012a4e
+03020012
+13120128
+2a4d0200
+14000002
+29020200
+15000002
+29080200
+16010202
+28030200
+00171201
+022a4d02
+00180000
+02290202
+00190000
+02290802
+001a0103
+01280302
+02001b02
+051b2a4b
+a101090c
+09028501
+09ea09e9
+153009e2
+750c2501
+81019510
+001cc000
+01280302
+02001d02
+11042a4a
+1e010001
+28030200
+001f0401
+012a4c02
+02002000
+0f022800
+02002118
+12012803
+19020022
+0063012a
+00130200
+13020002
+02000100
+00040013
+06001302
+00130200
+13020005
+02000000
+28000017
+00001702
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00009692
\ No newline at end of file
Index: program/app.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/app.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/app.prog	(working copy)
@@ -0,0 +1,331 @@
+app_init:
+	bpatch patch19_7,mem_patch19
+	fetch 1,mem_device_option
+	branch app_init,blank				/* wait ram to be initialized */
+	beq DVC_OP_DONGLE,dongle_init
+	beq DVC_OP_SHUTTER,shutter_init
+	beq DVC_OP_MODULE,module_init
+	beq DVC_OP_CAR,car_init
+	beq DVC_OP_SHUTTER_DY,shutter_dy_init
+	beq DVC_OP_REMOTE_CAR,remote_car_init
+	beq DVC_OP_KEYBOARD,keyboard_init
+	beq DVC_OP_HCI_BOOT,hci_init
+//	beq DVC_OP_TEST,test_init
+	beq DVC_OP_MOUSE,mouse_init
+	rtn
+
+
+app_param_init:
+	rtn wake
+	call adc_init_data
+	fetch 1,mem_device_option
+	beq DVC_OP_SHUTTER,shutter_default_init
+	beq DVC_OP_SHUTTER_DY,shutter_default_init
+	beq DVC_OP_DONGLE,dongle_default_init
+	beq DVC_OP_MOUSE,mouse_default_init
+	beq DVC_OP_KEYBOARD,keyboard_default_init
+	beq DVC_OP_REMOTE_CAR,remote_car_default_init
+	beq DVC_OP_CAR,car_default_init
+	rtn
+	
+app_process_idle:
+	call ui_dispatch
+	call check_51cmd
+	call app_process_bb_event
+	fetch 2,mem_cb_idle_process
+	branch callback_func
+
+app_process_ble:
+	fetch 2,mem_cb_le_process
+	branch callback_func
+
+app_process_bb_event:
+	bpatch patch1a_0,mem_patch1a
+	//return if c51 need to process bb event
+	arg mem_ipc_fifo_bt2c51,rega
+	call fifo_out
+	rtn blank
+	//reaching here mains c51 cannot get bb event.
+	copy pdata,regc
+	call app_event_normal_process
+	branch app_process_bb_event_priority
+	
+app_discard_event:
+	arg 0,regc
+	rtn
+
+//************************************************//
+//*APP BB EVENT NORMAL PROCESS**//
+//************************************************//
+app_event_normal_process:
+	beq BT_EVT_BUTTON_LONG_PRESSED,app_evt_button_long_pressed
+	beq BT_EVT_LE_CONNECTED,app_le_event_bb_connected
+	beq BT_EVT_LE_DISCONNECTED,app_le_event_bb_disconn
+	rtn
+
+
+
+app_process_bb_event_priority:
+	fetch 2,mem_cb_bb_event_process
+	branch callback_func
+	
+app_check_wake_lock:
+	fetch 2,mem_cb_check_wakelock
+	branch callback_func
+	
+app_will_enter_lpm:
+	fetch 2,mem_cb_before_lpm
+	branch callback_func
+
+app_le_event_bb_connected:
+	fetch 2,mem_ui_state_map
+	set1 UI_STATE_BLE_CONNECTED,pdata
+	store 2,mem_ui_state_map
+	rtn
+	
+app_le_event_bb_disconn:
+	jam 0,mem_le_l2cap_att_states
+	fetch 2,mem_ui_state_map
+	set0 UI_STATE_BLE_CONNECTED,pdata
+	store 2,mem_ui_state_map
+	branch app_lpm_mult_disable
+	
+
+app_evt_button_long_pressed:
+	fetch APP_DISC_RSN_SIZE,mem_app_disconn_reason_flag
+	set1 APP_DISC_BY_BUTTON,pdata
+	store APP_DISC_RSN_SIZE,mem_app_disconn_reason_flag
+	rtn
+	
+
+app_evt_timer:
+	store 1,mem_app_evt_timer_count
+app_evt_100ms_loop:
+	bpatch patch1a_1,mem_patch1a
+	fetch 1,mem_app_evt_timer_count
+	rtn blank
+	increase -1,pdata
+	store 1,mem_app_evt_timer_count
+	call ui_button_polling
+	call app_lpm_wake_auto_lock_timer
+	call flash_write_spi_sm_timer
+	fetch 2,mem_cb_event_timer
+	call callback_func
+	branch app_evt_100ms_loop
+
+
+//regc:timer addr
+//regb:timer up call back fuction
+timer_single_step:
+	ifetch 1,regc
+	rtn blank
+	pincrease -1
+	istore 1,regc
+	nrtn blank
+	copy regb,pdata
+	branch callback_func
+
+//regc:timer addr
+//regb:timer up call back fuction
+timer_single_step_2B:
+	ifetch 2,regc
+	rtn blank
+	pincrease -1
+	istore 2,regc
+	nrtn blank
+	copy regb,pdata
+	branch callback_func
+	
+app_power_timer:
+	fetcht 2,mem_power_param_ptr
+	add temp,power_timer_offset,regc
+	arg app_power_timer_timeout,regb
+	branch timer_single_step
+	
+app_power_timer_timeout:
+	call app_got_power_state_common
+	beq POWER_STARTING,app_enter_power_stanby_state
+app_enter_power_off_state:
+	branch app_enter_hibernate
+app_enter_power_stanby_state:
+	setarg POWER_STANDBY
+	istore 1,regc
+	add temp,power_standby_cb_offset,regb
+app_power_cb_common:
+	ifetch 2,regb
+	branch callback_func
+
+
+app_bb_hibernate:
+	call app_disconn_reason_clear
+	branch app_enter_hibernate
+
+	
+app_disconn_reason_clear:
+	setarg 0
+	store APP_DISC_RSN_SIZE,mem_app_disconn_reason
+	rtn
+app_disconn_reason_flag_clear:
+	setarg 0
+	store APP_DISC_RSN_SIZE,mem_app_disconn_reason_flag
+	rtn
+
+
+	
+app_disconn_reason_collect_ble:
+	fetch APP_DISC_RSN_SIZE,mem_app_disconn_reason_flag
+	set1 APP_DISC_BLE,pdata
+	store APP_DISC_RSN_SIZE,mem_app_disconn_reason
+	setarg 0
+	store APP_DISC_RSN_SIZE,mem_app_disconn_reason_flag
+	rtn
+
+	
+//************************************************//
+//********APP SHARED FUNCSIONS*******//
+//************************************************//
+
+
+app_get_lpm_wake_lock:
+	arg wake_lock_app,queue
+	branch lpm_get_wake_lock
+
+app_put_lpm_wake_lock:
+	arg wake_lock_app,queue
+	branch lpm_put_wake_lock
+	
+app_lpm_wake_auto_lock:
+	jam  LPM_WAKE_UP_DELAY_TIMER,mem_wake_up_delay_timer
+	branch app_get_lpm_wake_lock
+	
+app_lpm_wake_auto_lock_timer:
+	arg mem_wake_up_delay_timer,regc
+	arg app_put_lpm_wake_lock,regb
+	branch timer_single_step
+
+
+app_ble_start_direct_adv:
+	jam BT_CMD_START_DIRECT_ADV,mem_fifo_temp
+	branch ui_ipc_send_cmd
+
+app_ble_stop_direct_adv:
+	jam BT_CMD_STOP_DIRECT_ADV,mem_fifo_temp
+	branch ui_ipc_send_cmd
+	
+app_ble_stop_adv:
+	jam BT_CMD_STOP_ADV,mem_fifo_temp
+	branch ui_ipc_send_cmd
+	
+app_ble_start_adv:	
+	jam BT_CMD_START_ADV,mem_fifo_temp
+	branch ui_ipc_send_cmd
+	
+app_ble_start_scan:
+	jam BT_CMD_LE_START_SCAN,mem_fifo_temp
+	branch ui_ipc_send_cmd
+	
+app_ble_stop_scan:
+	jam BT_CMD_LE_STOP_SCAN,mem_fifo_temp
+	branch ui_ipc_send_cmd
+	
+app_ble_start_conn:
+	jam BT_CMD_LE_START_CONN,mem_fifo_temp
+	branch ui_ipc_send_cmd
+	
+app_ble_disconnect:
+	jam BT_CMD_LE_DISCONNECT,mem_fifo_temp
+	branch ui_ipc_send_cmd
+	
+app_led_start_blink:	
+	jam BT_CMD_LED_BLINK,mem_fifo_temp
+	branch ui_ipc_send_cmd
+
+app_led_on:
+	jam BT_CMD_LED_ON,mem_fifo_temp
+	branch ui_ipc_send_cmd
+	
+app_led_stop_blink:
+app_led_off:
+	jam BT_CMD_LED_OFF,mem_fifo_temp
+	branch ui_ipc_send_cmd
+	
+app_enter_hibernate:
+	jam BT_CMD_ENTER_HIBERNATE,mem_fifo_temp 
+	branch ui_ipc_send_cmd
+	
+
+app_ble_store_reconn_info:
+	jam BT_CMD_STORE_RECONN_INFO_LE,mem_fifo_temp
+	branch ui_ipc_send_cmd
+
+
+app_lpm_mult_enable:
+	set1 mark_lpm_mult_enable,mark
+	rtn
+
+app_lpm_mult_disable:
+	set0 mark_lpm_mult_enable,mark
+	rtn
+
+
+/*
+
+mem_power_param struct
+{
+	usigned char     mem_power_state
+	usigned char     mem_power_timer
+	usigned char	 mem_power_off_timeout
+	usigned char	 mem_power_starting_timeout
+	usigned long	 mem_power_off_cb
+	usigned long	 mem_power_starting_cb
+	usigned long	 mem_power_standby_cb
+	usigned long 	 mem_ui_butten_up_cb
+}
+    	functions:power state switching by mem_app_power_timer timeout or by button_long_pressed event
+    	(power off -> power starting->power standby->power off) and power timer initialization 
+ input parameters:mem_power_param_ptr should be point to the variable(mem_power_param) address where the input parameters stored in with its format
+output parameters:switched power state will be stored in variable mem_power_state*/
+app_button_long_pressed:
+	call app_got_power_state_common
+	beq POWER_STANDBY,app_power_shutting_down
+app_power_starting:
+	setarg POWER_STARTING
+	istore 1,regc
+	add temp,power_starting_timeout_offset,rega
+	add temp,power_starting_cb_offset,regb
+app_power_common:
+	ifetcht 1,rega
+	increase 1,regc
+	istoret 1,regc
+	branch app_power_cb_common
+	
+app_power_shutting_down:
+	setarg POWER_OFF
+	istore 1,regc
+	fetch 2,mem_ui_state_map
+	bbit0 UI_STATE_BLE_CONNECTED,app_power_off_end
+	call le_send_terminate_ind_user_terminated
+	call app_ble_disconnect
+app_power_off_end:
+	fetcht 2,mem_power_param_ptr
+	add temp,power_off_timeout_offset,rega
+	add temp,power_off_cb_offset,regb
+	branch app_power_common
+	
+app_got_power_state_common:
+	fetcht 2,mem_power_param_ptr
+	add temp,power_state_offset,regc
+	ifetch 1,regc
+	rtn
+
+app_event_button_up:
+	call app_got_power_state_common
+	bne POWER_OFF,app_power_release
+	branch app_enter_hibernate
+app_power_release:
+	add temp,ui_butten_up_cb_offset,regb
+	branch app_power_cb_common
+
+
+
+
Index: program/app_adpcm.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/app_adpcm.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/app_adpcm.prog	(working copy)
@@ -0,0 +1,132 @@
+
+ifdef COMPLIE_ADPCM
+/*
+input:
+	mem_ad_in_numSamples
+	mem_ad_in_ptr
+	mem_ad_out_ptr
+*/
+adpcm_decode:
+	fetch 8,mem_ad_state_valpred
+	store 8,mem_ad_valpred
+	jam  0,mem_ad_bufferstep
+	fetch 1,mem_ad_index
+	lshift2 pdata,pdata
+	arg mem_ad_stepsizeTable,temp
+	iadd temp,temp
+	ifetch 4,temp
+	store 4,mem_ad_step
+adpcm_decode_loop:
+	fetch 1,mem_ad_bufferstep
+	nbranch adpcm_next_byte,blank
+	fetcht 2,mem_ad_in_ptr
+	ifetch 1,temp
+	store 1,mem_ad_inputbuffer
+	increase 1,temp
+	storet 2,mem_ad_in_ptr
+	rshift4 pdata,pdata
+	store 1,mem_ad_delta
+	branch adpcm_cal
+adpcm_next_byte:
+	fetch 1,mem_ad_inputbuffer
+	and pdata,0x0f,pdata
+	store 1,mem_ad_delta
+adpcm_cal:	
+	fetch 1,mem_ad_bufferstep
+	setflip 0,pdata
+	store 1,mem_ad_bufferstep
+	arg mem_ad_indexTable,temp
+	fetch 1,mem_ad_delta
+	iadd temp,temp
+	ifetch 1,temp
+	fetcht 1,mem_ad_index
+	call adpcm_cal_index
+	store 1,mem_ad_index
+
+	fetch 1,mem_ad_delta
+	and pdata,0x08,temp
+	storet 1,mem_ad_sign
+	and pdata,0x07,temp
+	storet 1,mem_ad_delta
+
+	call adpcm_cal_vpdiff
+	storet 4,mem_ad_vpdiff
+	
+	fetch 1,mem_ad_sign
+	branch adpcm_cal_valpred,blank
+	fetch 4,mem_ad_valpred
+	fetcht 4,mem_ad_vpdiff
+	isub temp,pdata
+	branch adpcm_cal_valpred_end
+adpcm_cal_valpred:
+	fetch 4,mem_ad_valpred
+	fetcht 4,mem_ad_vpdiff
+	iadd temp,pdata
+adpcm_cal_valpred_end:	
+	store 4,mem_ad_valpred
+	arg 32767,temp
+	isub temp,pdata
+	bbit1 31,adpcm_cal_valpred_overflow
+	storet 4,mem_ad_valpred
+	branch adpcm_cal_valpred_overflow_end
+adpcm_cal_valpred_overflow:	
+	fetch 4,mem_ad_valpred
+	arg 32768,temp
+	iadd temp,pdata
+	bbit0 31,adpcm_cal_valpred_overflow_end
+	arg -32768,temp
+	storet 4,mem_ad_valpred
+adpcm_cal_valpred_overflow_end:	
+	fetch 1,mem_ad_index
+	lshift2 pdata,pdata
+	arg mem_ad_stepsizeTable,temp
+	iadd temp,temp
+	ifetch 4,temp
+	store 4,mem_ad_step
+
+	fetch 2,mem_ad_out_ptr
+	fetcht 2,mem_ad_valpred
+	istoret 2,pdata
+	increase 2,pdata
+	store 2,mem_ad_out_ptr
+
+	fetch 1,mem_ad_in_numSamples
+	increase -1,pdata
+	store 1,mem_ad_in_numSamples
+	nbranch adpcm_decode_loop, blank
+	fetch 8,mem_ad_valpred
+	store 8,mem_ad_state_valpred
+	rtn
+
+adpcm_cal_index:
+	iadd temp,pdata
+	bbit0 7,adpcm_cal_bigger_zero
+	setarg 0
+	rtn
+adpcm_cal_bigger_zero:
+	and pdata,0xff,pdata
+	sub pdata,88,null
+	rtn positive
+	setarg 88
+	rtn
+
+adpcm_cal_vpdiff:
+	fetchr rega,4,mem_ad_step
+	rshift3 rega,temp
+	fetch 1,mem_ad_delta
+	bbit0 2,adpcm_cal_vpdiff1
+	copy rega,pdata
+	iadd temp,temp
+adpcm_cal_vpdiff1:
+	fetch 1,mem_ad_delta
+	bbit0 1,adpcm_cal_vpdiff2
+	rshift rega,pdata
+	iadd temp,temp
+adpcm_cal_vpdiff2:
+	fetch 1,mem_ad_delta
+	rtnbit0 0
+	rshift2 rega,pdata
+	iadd temp,temp
+	rtn
+endif
+
Index: program/app_car.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/app_car.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/app_car.prog	(working copy)
@@ -0,0 +1,1051 @@
+ifdef COMPILE_CAR
+
+car_init:
+	call enable_authrom
+	rtn wake
+	setarg car_idle_process
+	store 2,mem_cb_idle_process
+
+	setarg car_cb_event_timer
+	store 2,mem_cb_event_timer
+	
+	setarg car_cb_24g_ackpayload
+	store 2, mem_cb_24g_ackpayload
+
+	setarg car_ble_receive_data
+	store 2,mem_cb_att_write
+
+	setarg car_process_bb_event 
+	store 2,mem_cb_bb_event_process
+	
+	bpatch patch05_6,mem_patch05
+	call car_init_environment
+	call car_add_mac_to_local_name
+	call le_modified_name
+	call car_le_param_init
+	branch queue_init
+	
+car_default_init:	
+	
+	jam 0x0a,mem_tx_power
+	jam 0x84,mem_24g_tx_phy
+	jam 0x84,mem_24g_rx_phy
+	setarg 0xffffff
+	store 3,mem_car_full_control_remote_lap
+	jam 0xff,mem_car_full_control_remote_lap+3
+	setarg 0
+	store 3,mem_le_lap
+	setarg 0x220101
+	store 3,mem_le_lap+3
+	setarg 0xffffff
+	store 3,mem_car_motor_gpio_map
+	jam 0xff,mem_car_motor_gpio_map+3
+	jam 0x01,mem_factory_control_flag
+	setarg 0x241404
+	store 3,mem_24g_ch_map1
+	jam 0x34,mem_24g_ch_map1+3
+	jam 0x10,mem_car_pwm_gpio
+	jam 0x01,mem_stop_4w1_flag
+	jam 0x07,mem_le_adv_channel_map
+	jam 0x01,mem_le_adv_enable
+	setarg 0xf0
+	store 2,mem_le_adv_interval
+	setarg 0x801
+	store 2,mem_le_local_feature
+	jam 0x84,mem_le_tx_phys
+	jam 0x84,mem_le_rx_phys
+	
+
+	setarg 0x504708
+	store 3,mem_le_name_len
+	setarg 0x435734
+	store 3,mem_le_name_len+3
+	setarg 0x5f5241
+	store 3,mem_le_name_len+6
+	jam 0x1f,mem_le_adv_data_len
+	setarg 0x50102
+	store 3,mem_le_adv_data
+	setarg 0x08
+	store 2,mem_le_interval_min
+	setarg 0x10
+	store 2,mem_le_interval_max
+	setarg 0
+	store 2,mem_le_latency
+	setarg 0x12c
+	store 2,mem_le_timeout
+	setarg mem_car_le_queue_each_size
+	store 2,mem_queue_ptr
+	setarg 0x414
+	store 5,mem_car_le_queue_each_size
+	setarg mem_car_ble_att_list
+	store 2,mem_ui_le_uuid_table
+
+//att list
+	setsect 0,0x20001
+	setsect 1,0x20000
+	setsect 2,0x1022
+	setsect 3,0x60
+	store 9,mem_car_ble_att_list
+	setsect 0,0x20002
+	setsect 1,0x200c0
+	setsect 2,0x20012
+	setsect 3,0xc
+	store 9,mem_car_ble_att_list+8
+
+	setsect 0,0x20502
+	setsect 1,0x4a
+	setsect 2,0x40
+	setsect 3,0x808
+	store 9,mem_car_ble_att_list+17
+
+	setsect 0,0x10229
+	setsect 1,0x14000
+	setsect 2,0x2000
+	setsect 3,0xa000
+	store 9,mem_car_ble_att_list+26
+
+	setsect 0,0x02
+	setsect 1,0x186
+	setsect 2,0x3020
+	setsect 3,0x4a0
+	store 9,mem_car_ble_att_list+35
+
+	setsect 0,0x74e
+	setsect 1,0x80
+	setsect 2,0x132a0
+	setsect 3,0x1cd04
+	store 9,mem_car_ble_att_list+44
+
+	setsect 0,0x2074
+	setsect 1,0x1153
+	setsect 2,0x2f4d2
+	setsect 3,0x1cdd5
+	store 9,mem_car_ble_att_list+53
+
+	setsect 0,0x2065
+	setsect 1,0x808
+	setsect 2,0x20202
+	setsect 3,0x2080
+	store 9,mem_car_ble_att_list+62
+
+	setsect 0,0x30200
+	setsect 1,0x4a00
+	setsect 2,0x94e0
+	setsect 3,0x800
+	store 9,mem_car_ble_att_list+71
+
+	setsect 0,0x22a01
+	setsect 1,0x0
+	setsect 2,0xa0
+	setsect 3,0xc08
+	store 9,mem_car_ble_att_list+80
+
+	setsect 0,0x20128
+	setsect 1,0x2c0
+	setsect 2,0x4020
+	setsect 3,0x20a8
+	store 9,mem_car_ble_att_list+89
+
+	setsect 0,0x10
+	setsect 1,0x14008
+	setsect 2,0x2c000
+	setsect 3,0x3004
+	store 9,mem_car_ble_att_list+98
+
+	setsect 0,0x200
+	setsect 1,0x8a00
+	setsect 2,0x3ff00
+	setsect 3,0x37 
+	store 9,mem_car_ble_att_list+107
+
+	setsect 0,0x302
+	setsect 1,0x804a
+	setsect 2,0xe1
+	setsect 3,0x3c408
+	store 9,mem_car_ble_att_list+116
+
+	setsect 0,0x4ff
+	setsect 1,0x0
+	setsect 2,0xf000
+	setsect 3,0x800
+	store 9,mem_car_ble_att_list+125
+
+	setsect 0,0x22902
+	setsect 1,0x0
+	setsect 2,0x100
+	setsect 3,0xc08
+	store 9,mem_car_ble_att_list+134
+
+	setsect 0,0x128
+	setsect 1,0x442
+	setsect 2,0x32020
+	setsect 3,0x7ff
+	store 9,mem_car_ble_att_list+143
+	setarg 0
+	store 3,mem_car_ble_att_list+152
+	
+	jam 0x0c,mem_system_clk
+	setarg 0x643f35
+	store 3,mem_lpm_xtalcnt
+	setarg 0x3b2f8f
+	store 3,mem_lpm_isogate
+	jam 0x20,mem_lpm_hibernate_switch
+	jam 0x00,mem_lpm_ldo_sel
+	jam 0x08,mem_lpm_sysctl
+	jam 0xb4,mem_lpm_hv_sel
+	jam 0x18,mem_fcomp_div
+	jam 0x3e,mem_xtal_c_sel
+	setarg 0x50e08
+	store 3,mem_version
+	setarg 0x3
+	store 2,mem_version+3
+	jam 0x20,mem_le_tx2m_delay
+	jam 0xff,mem_gain_fix
+	setarg 0xc00
+	store 2,mem_rx_window_sniff
+	setarg 0x4
+	store 3,mem_gain_table
+	jam 0x08,mem_gain_second_agc_en
+	jam 0xa0,mem_ring_ibias_trim
+	setarg 0x2bc
+	store 2,mem_ring_ibias_vtune_high
+	setarg 0x190
+	store 2,mem_ring_ibias_vtune_low
+	jam 0x03,mem_ring_ibias_calc_adc_gpio
+	jam 0x09,mem_ring_ibias_calc_adc_channel
+	jam 0xff,mem_rf_init_data
+	setarg mem_rf_init_data
+	store 2,mem_rf_init_ptr
+
+	
+	call enable_otp_read
+	arg mem_otp_sys_cfg_temp,rega
+	arg OTP_SYS_PARAM_CFG,regb
+	arg 60,loopcnt
+	call otp_read_data
+	call disable_otp
+	fetch 1,mem_otp_sys_cfg_temp
+	ncall car_system_clk,blank
+
+	fetch 3,mem_otp_sys_cfg_temp+1
+	ncall car_lpm_xtalcnt,blank
+
+	fetch 3,mem_otp_sys_cfg_temp+4
+	ncall car_lpm_isogate,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+7
+	ncall car_lpm_hibernate_switch,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+8
+	ncall car_lpm_ldo_sel,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+9
+	ncall car_lpm_sysctl,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+10
+	ncall car_lpm_hv_sel,blank	
+
+	fetch 1,mem_otp_sys_cfg_temp+11
+	ncall car_fcomp_div,blank	
+	
+	fetch 1,mem_otp_sys_cfg_temp+12
+	ncall car_xtal_c_sel,blank
+
+	fetch 5,mem_otp_sys_cfg_temp+13
+	ncall car_version,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+18
+	ncall car_le_tx2m_delay,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+19
+	ncall car_gain_fix,blank
+
+	fetch 2,mem_otp_sys_cfg_temp+20
+	ncall car_rx_window_sniff,blank
+
+	fetch 3,mem_otp_sys_cfg_temp+22
+	ncall car_gain_table,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+25
+	ncall car_gain_second_agc_en,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+26
+	ncall car_ring_ibias_trim,blank
+
+	fetch 2,mem_otp_sys_cfg_temp+27
+	ncall car_ring_ibias_vtune_high,blank
+
+	fetch 2,mem_otp_sys_cfg_temp+29
+	ncall car_ring_ibias_vtune_low,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+31
+	ncall car_ring_ibias_calc_adc_gpio,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+32
+	ncall car_ring_ibias_calc_adc_channel,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+37
+	ncall car_tx_power,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+38
+	ncall car_24g_tx_phy,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+39
+	ncall car_24g_rx_phy,blank
+
+	fetch 4,mem_otp_sys_cfg_temp+40
+	ncall car_motor_gpio_map,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+44
+	ncall car_pwm_gpio,blank
+
+	fetch 4,mem_otp_sys_cfg_temp+46
+	ncall car_24g_addr,blank
+	
+	fetch 4,mem_otp_sys_cfg_temp+50
+	ncall car_24g_ch_map1,blank
+	rtn
+	
+car_system_clk:
+	store 1,mem_system_clk
+	rtn
+car_lpm_xtalcnt:
+	store 3,mem_lpm_xtalcnt
+	rtn
+car_lpm_isogate:
+	store 3,mem_lpm_isogate
+	rtn
+car_lpm_hibernate_switch:
+	store 1,mem_lpm_hibernate_switch
+	rtn
+car_lpm_ldo_sel:
+	store 1,mem_lpm_ldo_sel
+	rtn
+car_lpm_sysctl:
+	store 1,mem_lpm_sysctl	
+	rtn
+car_lpm_hv_sel:	
+	store 1,mem_lpm_hv_sel	
+	rtn
+car_fcomp_div:
+	store 1,mem_fcomp_div
+	rtn
+car_xtal_c_sel:
+	store 1,mem_xtal_c_sel
+	rtn
+car_version:
+	store 5,mem_version
+	rtn	
+car_le_tx2m_delay:
+	store 1,mem_le_tx2m_delay
+	rtn
+car_gain_fix:
+	store 1,mem_gain_fix
+	rtn
+car_rx_window_sniff:
+	store 2,mem_rx_window_sniff
+	rtn
+car_gain_table:
+	store 3,mem_gain_table
+	rtn
+car_gain_second_agc_en:
+	store 1,mem_gain_second_agc_en
+	rtn
+car_ring_ibias_trim:
+	store 1,mem_ring_ibias_trim
+	rtn
+car_ring_ibias_vtune_high:
+	store 2,mem_ring_ibias_vtune_high
+	rtn
+car_ring_ibias_vtune_low:
+	store 2,mem_ring_ibias_vtune_low
+	rtn
+car_ring_ibias_calc_adc_gpio:
+	store 1,mem_ring_ibias_calc_adc_gpio
+	rtn
+car_ring_ibias_calc_adc_channel:
+	store 1,mem_ring_ibias_calc_adc_channel
+	rtn
+car_tx_power:
+	store 1,mem_tx_power
+	rtn
+car_24g_tx_phy:
+	store 1,mem_24g_tx_phy
+	rtn
+car_24g_rx_phy:
+	store 1,mem_24g_rx_phy
+	rtn
+car_motor_gpio_map:
+	store 4,mem_car_motor_gpio_map
+	jam 1,mem_car_gpio_control_mode  //pwm con:0  h&l output:1
+	rtn
+car_pwm_gpio:
+	fetch 1,mem_car_gpio_control_mode
+	nrtn blank
+	fetch 1,mem_otp_sys_cfg_temp+44
+	store 1,mem_car_pwm_gpio
+	rtn
+
+car_24g_addr:
+	store 4,mem_24g_addr
+	rtn
+car_24g_ch_map1:
+	store 4,mem_24g_ch_map1
+	rtn
+
+
+car_init_environment:
+	setarg 15
+	store 2, mem_100ms_adv_control_timer
+	setarg 300
+	store 2, mem_100ms_factory_test_control_timer
+	call car_whitening_24g_addr
+	call car_get_rxid
+	call car_rxid_check
+	branch car_pwm_control_init
+	
+car_rxid_check:
+	arg mem_le_lap,rega
+	arg mem_car_full_control_remote_lap,regb
+	arg 4,loopcnt
+	call string_compare
+	nrtn zero
+	fetch 1,mem_le_lap
+	pincrease -1
+	store 1,mem_le_lap
+	rtn
+	
+car_add_mac_to_local_name:
+	fetch 1, mem_le_name_len
+	arg mem_le_name_len+1, contw
+	iadd contw, regb
+	add pdata, 16, pdata
+	store 1, mem_le_name_len
+
+	arg 6, loopcnt
+	arg mem_le_lap+5, rega   //big endian
+	copy regb, contw
+car_add_mac_to_local_name_loop:
+	ifetcht 1, rega
+	and temp, 0xf0, pdata
+	rshift4 pdata, pdata
+	call car_convert_hex_to_ascii
+	
+	istore 1, contw
+	and temp, 0x0f, pdata
+	call car_convert_hex_to_ascii
+	istore 1, contw
+	increase -1, rega
+	loop car_add_mac_to_local_name_loop
+	rtn
+car_convert_hex_to_ascii:
+	sub pdata, 9, null
+	branch car_convert_hex_to_ascii_0_9, positive
+car_convert_hex_to_ascii_a_f:
+	add pdata, 0x37, pdata    
+	rtn
+car_convert_hex_to_ascii_0_9:
+	add pdata, 0x30, pdata  
+	rtn	
+
+
+	
+car_le_param_init:
+	jam 0x17,mem_le_local_mtu
+	setarg 0x1b
+ 	store 2,mem_le_pairing_handle
+ 	call le_set_config_fixed_ltk
+	call le_set_fixed_ltk
+	call le_set_justwork
+	branch le_set_config_read_authentication
+
+
+car_process_bb_event:
+	deposit regc
+	beq BT_EVT_LE_CONNECTED, car_ble_connted
+	beq BT_EVT_LE_DISCONNECTED, car_ble_disconnted
+	rtn
+
+car_ble_disconnted:
+	jam 0,mem_car_ble_connted_flag
+	call car_gpio_control_stop
+	jam 0x0,mem_period_count
+	jam 1,mem_stop_4w1_flag
+	setarg 0
+	store 3,mem_car_ble_write_data
+	call queue_init
+	branch app_ble_start_adv
+
+car_ble_connted:
+	jam 1,mem_car_ble_connted_flag
+	call car_check_close_ice
+	branch app_lpm_mult_enable
+
+
+car_ble_receive_data:
+	fetch 2,mem_le_att_handle
+	beq HANDLE_OF_WRITE,car_ble_receive_writeatt
+	rtn
+	
+
+car_ble_receive_writeatt:
+	bpatch patch05_7,mem_patch05
+	copy regb, loopcnt
+	copy rega, contr
+	arg mem_car_ble_write_data, contw   
+	call memcpy
+	fetch 1,mem_car_ble_write_data
+	rtn blank	
+car_ble_receive_writeatt_parse:
+	call car_gpio_control_stop
+	jam 0x4,mem_period_count
+	fetch 1,mem_car_ble_write_data+2
+	rtnne 0x02
+	fetch 1,mem_car_ble_write_data+8
+	beq 0x01,car_f+3
+	beq 0x02,car_b+3	 
+	beq 0x03,car_r+3	
+	beq 0x04,car_l+3	
+	beq 0xa1,car_fr
+	beq 0xa2,car_fl
+	beq 0xa3,car_br
+	beq 0xa4,car_bl
+	rtn
+
+car_gpio_control_stop:
+	fetch 1,mem_car_gpio_control_mode
+	rtn blank
+	call car_fb_motor_stop
+	branch car_lr_motor_stop
+
+car_whitening_24g_addr:
+	arg 4,loopcnt
+	arg mem_24g_addr,regc
+	arg 0xae,regb
+//	call car_24g_whitening_loop
+//	rtn
+car_24g_whitening_loop:
+	call car_24g_whitening_byte
+	increase 1, regc
+	loop car_24g_whitening_loop
+	rtn
+car_24g_whitening_byte:
+	arg 1, rega     //rega is m
+car_24g_whitening_byte_loop:
+	lshift regb, regb    //regb is seed
+	isolate1 7, regb
+	call car_24g_whitening_byte_xor, true
+	lshift rega, rega
+	deposit rega
+	rtnbit1 8
+	branch car_24g_whitening_byte_loop
+car_24g_whitening_byte_xor:	
+	ifetch 1,regc
+	ixor rega, pdata
+	istore 1, regc
+	xor regb, 0x11, regb
+	rtn
+
+
+
+car_get_rxid:
+	call enable_otp_read
+	arg mem_otp_lot_xy_temp,rega
+	arg OTP_MAC_ADDR,regb
+	arg 6,loopcnt
+	call otp_read_data
+	call disable_otp
+	fetch 6,mem_otp_lot_xy_temp
+	rtn blank
+	fetch 2,mem_otp_lot_xy_temp
+	store 2,mem_le_lap
+	fetch 1,mem_otp_lot_xy_temp+3
+	store 1,mem_le_lap+2
+	fetch 1,mem_otp_lot_xy_temp+5
+	store 1,mem_le_lap+3
+
+	fetch 1,mem_otp_lot_xy_temp+1
+	sub pdata,26,null  //	piece num max is 25
+	nrtn positive
+	
+	fetch 1,mem_otp_lot_xy_temp+2
+	rtn blank
+	random pdata
+	and_into 0x07,pdata
+	lshift pdata,pdata
+	lshift4 pdata,pdata
+	fetcht 1,mem_otp_lot_xy_temp+1
+	iadd temp,pdata
+	store 1,mem_le_lap+1
+	arg mem_le_lap+1,rega
+	arg OTP_MAC_ADDR_PIECENUM,regb
+	arg 1,loopcnt
+	branch otp_write	
+
+
+
+car_pwm_control_init:
+	fetch 1,mem_car_gpio_control_mode
+	nrtn blank
+	arg 0, rega
+	call pwm_init
+	
+	arg 18000,rega
+	arg 6000, regb
+	arg 0, pdata
+	call pwm_duty_cycle_set
+	fetch 1,mem_car_pwm_gpio
+	branch pwm_enable	
+
+
+car_idle_process:
+//call ice_break
+	bpatch patch06_0,mem_patch06
+	arg 10, pdata //Լ96ms
+	call wdt_init_config 
+
+	call car_pwm_io_control
+	fetch 1,mem_car_ble_connted_flag
+	nrtn blank
+	fetch 2,mem_car_le_24g_ch_count
+	increase 1,pdata
+	store 2,mem_car_le_24g_ch_count
+	rshift4 pdata,pdata
+	call car_set_24g_ch
+	
+	call car_g24_sim_rx
+	call car_stop_run			
+	setarg mem_24g_rxbuf
+	increase 2,pdata
+	copy pdata,contr
+	arg LEN_OF_24G_PAYLOAD,loopcnt
+	arg 0,pdata	
+	call cal_sum
+	and pdata ,0xff,pdata
+	fetcht 1,mem_24g_rxbuf+14
+	isub temp,null
+	nrtn zero
+
+	fetch 1,mem_24g_rxbuf+2
+	bpatch patch06_1,mem_patch06
+	beq G24_TX_PAIR_REQUEST,car_recive_pair_request
+	beq G24_TX_REMOTE_CONTROL,car_set_motor
+	rtn
+car_pwm_io_control:
+	fetch 1,mem_car_gpio_control_mode
+	nrtn blank
+	call car_soft_timer_process	
+	call car_pwm_change_500hz
+	call car_period_change_timer	
+	call car_pwm_change_1khz
+	rtn
+
+car_g24_sim_rx:
+	arg 4,temp
+	arg 5,queue
+	call sniff_check_window
+	rtn user
+	set1 mark_24g_rxmode,mark
+	setarg 0x8ca0   //2.5ms
+	store 2, mem_24g_rx_window
+	jam 1,mem_24g_ackpayload_enable
+	fetch 1,mem_24g_rx_phy
+	call le_enable_phy_by_pdata
+	call g24_syncword_crc8
+	call g24_receive_transmit_ack
+	call g24_read_len_pid_crc
+	call g24_end_of_packet	
+	nrtn user3
+	rtn
+
+car_cb_24g_ackpayload:
+	jam LEN_OF_ACK_PAYLOAD, mem_24g_datalen
+	fetch 7,mem_car_24g_tx_payload_temp
+	store 7, mem_24g_txbuf
+	fetch 4,mem_car_24g_tx_payload_temp+7
+	store 4, mem_24g_txbuf+7	
+	rtn
+	
+car_soft_timer_process:	
+	arg 8, rega
+car_soft_timer_process_check_timer:
+	arg 12,queue
+	call timer_check
+	branch car_soft_timer_timeout,blank
+	isub rega, null
+	branch car_soft_timer_process_wait_timeout,zero
+	rtn positive
+car_soft_timer_process_wait_timeout:
+	arg 12,queue
+	call timer_check
+	branch car_soft_timer_timeout,blank
+	branch car_soft_timer_process_wait_timeout
+	
+car_soft_timer_timeout:
+	fetch 1,mem_pwm_flag
+	beq 2,car_timer_500hz_enable	
+	beq 3,car_timer_1khz_enable
+	rtn	
+car_timer_1khz_enable:
+	jam 1,mem_pwm_flag
+	rtn
+car_timer_500hz_enable:
+	jam 0,mem_pwm_flag
+	rtn
+
+car_pwm_change_1khz:
+	fetch 1,mem_period_count
+	rtn blank
+	fetcht 1,mem_pwm_flag
+	compare 1,temp,0xff
+	nrtn true
+	jam 2,mem_pwm_flag
+	arg 6000,rega
+	arg 6000, regb
+	arg 0, pdata
+	call pwm_duty_cycle_set	
+	fetch 1,mem_timer_count
+	arg 12,queue
+	call timer_init
+	rtn
+car_pwm_change_500hz:
+	fetcht 1,mem_pwm_flag
+	compare 0,temp,0xff
+	nrtn true
+	jam 3,mem_pwm_flag
+	arg 18000,rega
+	arg 6000, regb
+	arg 0, pdata
+	call pwm_duty_cycle_set
+	setarg 12
+	arg 12,queue
+	call timer_init
+	rtn
+car_period_change_timer:
+	fetch 1,mem_period_count
+	arg 0x3e8,temp
+	imul32 temp,pdata
+	arg 0x271,temp
+	idiv temp
+	call wait_div_end
+	quotient pdata
+	pincrease 1
+	store 1,mem_timer_count
+	rtn
+
+
+
+car_set_24g_ch:
+	beq 0,car_set_ch0
+	beq 1,car_set_ch1
+	beq 2,car_set_ch2
+	beq 3,car_set_ch3
+	branch car_set_ch_reset
+car_set_ch0:
+	fetch 1,mem_24g_ch_map1
+	store 1,mem_24g_ch
+	rtn
+car_set_ch1:
+	fetch 1,mem_24g_ch_map1+1
+	store 1,mem_24g_ch
+	rtn
+car_set_ch2:
+	fetch 1,mem_24g_ch_map1+2
+	store 1,mem_24g_ch
+	rtn
+car_set_ch3:
+	fetch 1,mem_24g_ch_map1+3
+	store 1,mem_24g_ch
+	rtn        
+car_set_ch_reset:
+	setarg 0
+	store 2,mem_car_le_24g_ch_count
+	rtn
+
+
+
+car_stop_run:
+	fetch 1,mem_car_le_24g_tx_pair_mode
+	rtn blank
+	fetch 1,mem_car_24g_loselink_count
+	arg 15,temp
+	isub temp,null
+	nrtn positive
+	jam 0,mem_car_24g_loselink_count
+	setarg 0
+	store 2,mem_car_24g_rx_payload_temp+9
+	call car_gpio_control_stop
+
+	jam 0x4,mem_period_count
+	jam 0,mem_le_adv_enable
+	jam 1,mem_adv_control_start_flag
+	fetch 1,mem_stop_4w1_flag
+	rtn blank
+	jam 0x0,mem_period_count
+	jam 1,mem_le_adv_enable
+	rtn
+
+
+car_set_motor:
+	bpatch patch06_2,mem_patch06
+	fetch 7,mem_24g_rxbuf+2
+	store 7,mem_car_24g_rx_payload_temp
+	fetch 5,mem_24g_rxbuf+9
+	store 5,mem_car_24g_rx_payload_temp+7        
+	arg mem_car_24g_rx_payload_temp+1,rega
+	fetch 4,mem_car_24g_addr_other
+	branch car_reconnect,blank
+ifndef FULL_CONTROL
+	arg mem_car_24g_addr_other,regb
+	arg 4,loopcnt
+	call string_compare
+	nrtn zero
+endif
+	arg mem_car_24g_rx_payload_temp+5,rega	
+	arg mem_car_full_control_remote_lap,regb
+	arg 4,loopcnt
+	call string_compare
+	branch car_run_factory_mode_select,zero	
+
+	arg mem_car_24g_rx_payload_temp+5,rega
+	arg mem_le_lap,regb
+	arg 4,loopcnt
+	call string_compare  
+	nbranch car_set_unconnect, zero
+	branch car_run_mode_select
+	
+car_set_unconnect:
+	jam G24_UNCONNECT,mem_car_le_24g_tx_pair_mode
+	setarg 0
+	store 4,mem_car_24g_addr_other       
+	rtn
+
+car_run_factory_mode_select:
+	fetch 1,mem_factory_control_flag
+	beq 0,car_set_unconnect
+	beq 1,car_run_mode_select
+	rtn
+	
+car_run_mode_select:
+	jam 0,mem_car_24g_loselink_count
+	fetch 2,mem_car_24g_rx_payload_temp+9
+	branch car_stop_run+9,blank
+	call car_pwm_mode_adv_flag_init
+	call car_factory_mode_time
+	call car_motor_mode_1
+	branch car_motor_mode_2
+
+car_pwm_mode_adv_flag_init:
+	fetch 1,mem_car_gpio_control_mode
+	nrtn blank
+	jam 1,mem_le_adv_enable
+	jam 1,mem_le_adv_channel_map
+	jam 0,mem_stop_4w1_flag
+	jam 0,mem_adv_control_start_flag
+	setarg 15
+	store 2, mem_100ms_adv_control_timer
+	rtn
+	
+car_factory_mode_time:
+	fetch 1,mem_factory_control_flag
+	rtn blank
+	setarg 300
+	store 2, mem_100ms_factory_test_control_timer
+	rtn
+	
+car_motor_mode_1:
+	fetch 1,mem_car_24g_rx_payload_temp+10
+	beq 1,car_b
+	beq 2,car_f
+	rtn
+car_motor_mode_2:
+	fetch 1,mem_car_24g_rx_payload_temp+9
+	beq 1,car_l
+	beq 2,car_r
+	rtn
+
+car_f:
+	fetch 1,mem_car_24g_rx_payload_temp+9
+	beq 1,car_fl
+	beq 2,car_fr
+	jam 0x0a,mem_period_count
+	branch car_lr_motor_right
+	
+car_b:
+	fetch 1,mem_car_24g_rx_payload_temp+9
+	beq 1,car_bl
+	beq 2,car_br
+	jam 0x28,mem_period_count
+	branch car_lr_motor_left
+
+car_l:
+	fetch 1,mem_car_24g_rx_payload_temp+10
+	beq 1,car_bl
+	beq 2,car_fl
+	jam 0x3a,mem_period_count
+	branch car_fb_motor_back
+	
+car_r:
+	fetch 1,mem_car_24g_rx_payload_temp+10
+	beq 1,car_br
+	beq 2,car_fr
+	jam 0x40,mem_period_count
+	branch car_fb_motor_front
+
+car_fl:
+	jam 0x1c,mem_period_count
+	call car_lr_motor_right
+	branch car_fb_motor_back
+car_fr:
+	jam 0x22,mem_period_count
+	call car_lr_motor_right
+	branch car_fb_motor_front
+car_bl:
+	jam 0x34,mem_period_count
+	call car_lr_motor_left
+	branch car_fb_motor_back
+car_br:
+	jam 0x2e,mem_period_count
+	call car_lr_motor_left
+	branch car_fb_motor_front	
+
+
+car_reconnect:
+	arg mem_car_24g_rx_payload_temp+5,rega	
+	arg mem_car_full_control_remote_lap,regb
+	arg 4,loopcnt
+	call string_compare 
+	branch car_recive_pair_request,zero
+
+	arg mem_car_24g_rx_payload_temp+5,rega
+	arg mem_le_lap,regb
+	arg 4,loopcnt
+	call string_compare
+	nrtn zero
+	branch car_recive_pair_request
+car_recive_pair_request:
+	fetch 7,mem_24g_rxbuf+2
+	store 7,mem_car_24g_rx_payload_temp
+	fetch 1,mem_car_le_24g_tx_pair_mode
+	beq G24_UNCONNECT,car_send_pair_response
+	beq G24_CONNECTED, car_send_pair_response_juge
+	rtn
+car_send_pair_response:
+	call car_check_close_ice
+	
+	jam G24_CONNECTED,mem_car_le_24g_tx_pair_mode
+	jam G24_RX_PAIR_RESPONES,mem_car_24g_tx_payload_temp
+	fetch 4,mem_car_24g_rx_payload_temp+1
+	store 4,mem_car_24g_addr_other
+	store 4,mem_car_24g_tx_payload_temp+5
+	fetch 4,mem_le_lap
+	store 4,mem_car_24g_tx_payload_temp+1
+	rtn
+
+car_send_pair_response_juge:
+ifndef FULL_CONTROL
+	arg mem_car_24g_rx_payload_temp+1,rega
+	arg mem_car_24g_addr_other,regb
+	arg 4,loopcnt
+	call string_compare        
+	branch car_send_pair_response,zero
+endif
+
+ifdef FULL_CONTROL
+	branch car_send_pair_response
+endif
+
+car_cb_event_timer:
+	fetch 1,mem_car_24g_loselink_count		
+	increase 1,pdata
+	store 1,mem_car_24g_loselink_count
+	call car_100ms_timer_adv_control
+	branch car_100ms_timer_factory_test_control
+	
+
+car_100ms_timer_adv_control:
+	fetch 1,mem_car_gpio_control_mode
+	nrtn blank
+	fetch 1,mem_adv_control_start_flag
+	rtn blank
+	arg mem_100ms_adv_control_timer,regc
+	arg car_100ms_timer_adv_control_timeout, regb
+	branch timer_single_step_2B
+car_100ms_timer_adv_control_timeout:
+	setarg 15
+	store 2, mem_100ms_adv_control_timer
+	jam 7,mem_le_adv_channel_map
+	jam 0,mem_adv_control_start_flag
+	jam 1,mem_stop_4w1_flag
+	rtn		
+
+car_100ms_timer_factory_test_control:
+	fetch 1,mem_factory_control_flag
+	rtn blank
+	arg mem_100ms_factory_test_control_timer,regc
+	arg car_100ms_timer_factory_test_timeout, regb
+	branch timer_single_step_2B
+car_100ms_timer_factory_test_timeout:
+	setarg 300
+	store 2, mem_100ms_factory_test_control_timer
+	jam 0,mem_factory_control_flag
+	rtn		
+
+car_motor1_status_select:
+	ifetch 1,contr
+	beq TURN_FRONT,car_lr_motor_stop
+	beq TURN_LEFT,car_lr_motor_left
+	beq TURN_RIGHT,car_lr_motor_right
+	rtn
+car_motor2_status_select:
+	ifetch 1,contr
+	beq MOTOR_STOP,car_fb_motor_stop
+	beq GO_BACK,car_fb_motor_front
+	beq GO_FRONT,car_fb_motor_back
+	rtn
+
+car_lr_motor_stop:
+	fetcht 1,mem_car_motor_left_gpio
+	call gpio_out_inactive
+	fetcht 1,mem_car_motor_right_gpio
+	branch gpio_out_inactive
+car_lr_motor_left:
+	fetcht 1,mem_car_motor_left_gpio
+	call gpio_out_active
+	fetcht 1,mem_car_motor_right_gpio
+	branch gpio_out_inactive
+car_lr_motor_right:
+	fetcht 1,mem_car_motor_left_gpio
+	call gpio_out_inactive
+	fetcht 1,mem_car_motor_right_gpio
+	branch gpio_out_active
+car_fb_motor_stop:
+	fetcht 1,mem_car_motor_front_gpio
+	call gpio_out_inactive
+	fetcht 1,mem_car_motor_back_gpio
+	branch gpio_out_inactive
+car_fb_motor_front:
+	fetcht 1,mem_car_motor_front_gpio
+	call gpio_out_active
+	fetcht 1,mem_car_motor_back_gpio
+	branch gpio_out_inactive
+car_fb_motor_back:
+	fetcht 1,mem_car_motor_front_gpio
+	call gpio_out_inactive
+	fetcht 1,mem_car_motor_back_gpio
+	branch gpio_out_active
+
+car_le_stop_random_delay_check:
+	fetch 1,mem_stop_4w1_flag
+	branch le_adv_not_match+13,blank
+	branch le_adv_not_match+8
+
+car_check_close_ice:
+	fetch 1,mem_car_gpio_control_mode
+	rtn blank
+	branch lpm_write_ice_disable
+	
+endif
+
+
+
Index: program/app_car_remote.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/app_car_remote.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/app_car_remote.prog	(working copy)
@@ -0,0 +1,712 @@
+ifdef COMPILE_REMOTE_CAR
+//define REMOTE_TEST_FUNCTION
+remote_car_init:
+	call enable_authrom
+	bpatch patch06_3,mem_patch06
+
+	fetch 1,mem_remote_le_24g_tx_pair_mode
+	call lpm_write_ice_enable,blank
+	call remote_car_set__lpm_timer_set
+	rtn wake
+	call wdt_set_disable
+	setarg remote_car_idle_process
+	store 2,mem_cb_idle_process
+
+	setarg remote_car_cb_event_timer
+	store 2,mem_cb_event_timer
+	call remote_car_get_txid
+	call remote_car_txid_check
+	call remote_car_whitening_24g_addr
+	branch remote_car_lpm_gpio_config_flag_init
+
+
+remote_car_default_init:
+	jam 0x0a,mem_tx_power
+	jam 0x84,mem_24g_tx_phy
+	jam 0x84,mem_24g_rx_phy
+	setarg 0xffffff
+	store 3,mem_remote_full_control_remote_lap
+	jam 0xff,mem_remote_full_control_remote_lap+3
+	setarg 0
+	store 3,mem_le_lap
+	setarg 0x220101
+	store 3,mem_le_lap+3
+	setarg 0x858c0c
+	store 3,mem_remote_car_key_conf0
+	jam 0x05,mem_remote_car_key_conf0+3
+	jam 0x0d,mem_24g_tx_led_map
+	jam 0x12,mem_key_public_gpio
+	setarg 0x241404
+	store 3,mem_24g_ch_map1
+	jam 0x34,mem_24g_ch_map1+3
+
+	jam 0x0c,mem_system_clk
+	setarg 0x643f35
+	store 3,mem_lpm_xtalcnt
+	setarg 0x3b2f8f
+	store 3,mem_lpm_isogate
+	jam 0x20,mem_lpm_hibernate_switch
+	jam 0x00,mem_lpm_ldo_sel
+	jam 0x08,mem_lpm_sysctl
+	jam 0xb4,mem_lpm_hv_sel
+	jam 0x18,mem_fcomp_div
+	jam 0x3e,mem_xtal_c_sel
+	setarg 0x50e08
+	store 3,mem_version
+	setarg 0x3
+	store 2,mem_version+3
+	jam 0x20,mem_le_tx2m_delay
+	jam 0xff,mem_gain_fix
+	setarg 0xc00
+	store 2,mem_rx_window_sniff
+	setarg 0x4
+	store 3,mem_gain_table
+	jam 0x08,mem_gain_second_agc_en
+	jam 0xa0,mem_ring_ibias_trim
+	setarg 0x2bc
+	store 2,mem_ring_ibias_vtune_high
+	setarg 0x190
+	store 2,mem_ring_ibias_vtune_low
+	jam 0x03,mem_ring_ibias_calc_adc_gpio
+	jam 0x09,mem_ring_ibias_calc_adc_channel
+	jam 0xff,mem_rf_init_data
+	setarg mem_rf_init_data
+	store 2,mem_rf_init_ptr
+	
+	call enable_otp_read
+	arg mem_otp_sys_cfg_temp,rega
+	arg OTP_SYS_PARAM_CFG,regb
+	arg 60,loopcnt
+	call otp_read_data
+	call disable_otp
+	fetch 1,mem_otp_sys_cfg_temp
+	ncall remote_car_system_clk,blank
+
+	fetch 3,mem_otp_sys_cfg_temp+1
+	ncall remote_car_lpm_xtalcnt,blank
+
+	fetch 3,mem_otp_sys_cfg_temp+4
+	ncall remote_car_lpm_isogate,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+7
+	ncall remote_car_lpm_hibernate_switch,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+8
+	ncall remote_car_lpm_ldo_sel,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+9
+	ncall remote_car_lpm_sysctl,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+10
+	ncall remote_car_lpm_hv_sel,blank	
+
+	fetch 1,mem_otp_sys_cfg_temp+11
+	ncall remote_car_fcomp_div,blank	
+	
+	fetch 1,mem_otp_sys_cfg_temp+12
+	ncall remote_car_xtal_c_sel,blank
+
+	fetch 5,mem_otp_sys_cfg_temp+13
+	ncall remote_car_version,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+18
+	ncall remote_car_le_tx2m_delay,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+19
+	ncall remote_car_gain_fix,blank
+
+	fetch 2,mem_otp_sys_cfg_temp+20
+	ncall remote_car_rx_window_sniff,blank
+
+	fetch 3,mem_otp_sys_cfg_temp+22
+	ncall remote_car_gain_table,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+25
+	ncall remote_car_gain_second_agc_en,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+26
+	ncall remote_car_ring_ibias_trim,blank
+
+	fetch 2,mem_otp_sys_cfg_temp+27
+	ncall remote_car_ring_ibias_vtune_high,blank
+
+	fetch 2,mem_otp_sys_cfg_temp+29
+	ncall remote_car_ring_ibias_vtune_low,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+31
+	ncall remote_car_ring_ibias_calc_adc_gpio,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+32
+	ncall remote_car_ring_ibias_calc_adc_channel,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+37
+	ncall remote_car_tx_power,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+38
+	ncall remote_car_24g_tx_phy,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+39
+	ncall remote_car_24g_rx_phy,blank
+
+	fetch 4,mem_otp_sys_cfg_temp+40
+	ncall remote_car_key_conf0,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+44
+	ncall remote_car_key_public_gpio,blank
+
+	fetch 1,mem_otp_sys_cfg_temp+45
+	ncall remote_car_24g_tx_led_map,blank
+
+	fetch 4,mem_otp_sys_cfg_temp+46
+	ncall remote_car_24g_addr,blank
+	
+	fetch 4,mem_otp_sys_cfg_temp+50
+	ncall remote_car_24g_ch_map1,blank
+	rtn
+	
+remote_car_system_clk:
+	store 1,mem_system_clk
+	rtn
+remote_car_lpm_xtalcnt:
+	store 3,mem_lpm_xtalcnt
+	rtn
+remote_car_lpm_isogate:
+	store 3,mem_lpm_isogate
+	rtn
+remote_car_lpm_hibernate_switch:
+	store 1,mem_lpm_hibernate_switch
+	rtn
+remote_car_lpm_ldo_sel:
+	store 1,mem_lpm_ldo_sel
+	rtn
+remote_car_lpm_sysctl:
+	store 1,mem_lpm_sysctl	
+	rtn
+remote_car_lpm_hv_sel:	
+	store 1,mem_lpm_hv_sel	
+	rtn
+remote_car_fcomp_div:
+	store 1,mem_fcomp_div
+	rtn
+remote_car_xtal_c_sel:
+	store 1,mem_xtal_c_sel
+	rtn
+remote_car_version:
+	store 5,mem_version
+	rtn	
+remote_car_le_tx2m_delay:
+	store 1,mem_le_tx2m_delay
+	rtn
+remote_car_gain_fix:
+	store 1,mem_gain_fix
+	rtn
+remote_car_rx_window_sniff:
+	store 2,mem_rx_window_sniff
+	rtn
+remote_car_gain_table:
+	store 3,mem_gain_table
+	rtn
+remote_car_gain_second_agc_en:
+	store 1,mem_gain_second_agc_en
+	rtn
+remote_car_ring_ibias_trim:
+	store 1,mem_ring_ibias_trim
+	rtn
+remote_car_ring_ibias_vtune_high:
+	store 2,mem_ring_ibias_vtune_high
+	rtn
+remote_car_ring_ibias_vtune_low:
+	store 2,mem_ring_ibias_vtune_low
+	rtn
+remote_car_ring_ibias_calc_adc_gpio:
+	store 1,mem_ring_ibias_calc_adc_gpio
+	rtn
+remote_car_ring_ibias_calc_adc_channel:
+	store 1,mem_ring_ibias_calc_adc_channel
+	rtn
+remote_car_tx_power:
+	store 1,mem_tx_power
+	rtn
+remote_car_24g_tx_phy:
+	store 1,mem_24g_tx_phy
+	rtn
+remote_car_24g_rx_phy:
+	store 1,mem_24g_rx_phy
+	rtn
+remote_car_key_conf0:
+	store 4,mem_remote_car_key_conf0
+	rtn
+remote_car_key_public_gpio:
+	store 1,mem_key_public_gpio
+	rtn
+remote_car_24g_tx_led_map:
+	store 1,mem_24g_tx_led_map
+	rtn
+remote_car_24g_addr:
+	store 4,mem_24g_addr
+	rtn
+remote_car_24g_ch_map1:
+	store 4,mem_24g_ch_map1
+	rtn
+
+
+
+
+	
+remote_car_set__lpm_timer_set:
+	fetch 1,mem_remote_le_24g_tx_pair_mode
+	beq G24_UNCONNECT,remote_car_set_uconnect_lpm_time
+	beq G24_CONNECTED, remote_car_set_connected_lpm_time      
+	rtn
+remote_car_set_uconnect_lpm_time:
+	setarg 0
+	store 2,mem_24g_lpm_timer_count
+	setarg 300
+	store 2,mem_24g_lpm_enter_count     
+	rtn
+remote_car_set_connected_lpm_time:
+	setarg 0
+	store 2,mem_24g_lpm_timer_count
+	setarg 15
+	store 2,mem_24g_lpm_enter_count     
+	rtn
+
+
+remote_car_get_txid:
+ifdef FULL_CONTROL
+	jam 0x94,mem_tx_power
+	setarg 0xffffff
+	store 3,mem_le_lap
+	jam 0xff,mem_le_lap+3
+	rtn
+endif
+	call enable_otp_read
+	arg mem_remote_otp_lot_xy_temp,rega
+	arg OTP_MAC_ADDR,regb
+	arg 6,loopcnt
+	call otp_read_data
+	call disable_otp
+	fetch 6,mem_remote_otp_lot_xy_temp
+	rtn blank
+	fetch 2,mem_remote_otp_lot_xy_temp
+	store 2,mem_le_lap
+	fetch 1,mem_remote_otp_lot_xy_temp+3
+	store 1,mem_le_lap+2
+	fetch 1,mem_remote_otp_lot_xy_temp+5
+	store 1,mem_le_lap+3
+
+	fetch 1,mem_remote_otp_lot_xy_temp+1
+	sub pdata,26,null  //	piece num max is 25
+	nrtn positive
+	
+	fetch 1,mem_remote_otp_lot_xy_temp+2
+	rtn blank
+	random pdata
+	and_into 0x07,pdata
+	lshift pdata,pdata
+	lshift4 pdata,pdata
+	fetcht 1,mem_remote_otp_lot_xy_temp+1
+	iadd temp,pdata
+	store 1,mem_le_lap+1
+	arg mem_le_lap+1,rega
+	arg OTP_MAC_ADDR_PIECENUM,regb
+	arg 1,loopcnt
+	branch otp_write	
+
+remote_car_txid_check:
+ifdef FULL_CONTROL
+	rtn
+endif
+	arg mem_le_lap,rega
+	arg mem_remote_full_control_remote_lap,regb
+	arg 4,loopcnt
+	call string_compare
+	nrtn zero
+	fetch 1,mem_le_lap
+	pincrease -1
+	store 1,mem_le_lap
+	rtn
+
+remote_car_whitening_24g_addr:
+	arg 4,loopcnt
+	arg mem_24g_addr,regc
+	arg 0xae,regb
+remote_car_24g_whitening_loop:
+	call remote_car_24g_whitening_byte
+	increase 1, regc
+	loop remote_car_24g_whitening_loop
+	rtn
+
+remote_car_24g_whitening_byte:
+	arg 1, rega     //rega is m
+remote_car_24g_whitening_byte_loop:
+	lshift regb, regb    //regb is seed
+	isolate1 7, regb
+	call remote_car_24g_whitening_byte_xor, true
+	lshift rega, rega
+	deposit rega
+	rtnbit1 8
+	branch remote_car_24g_whitening_byte_loop
+	
+remote_car_24g_whitening_byte_xor:	
+	ifetch 1,regc
+	ixor rega, pdata
+	istore 1, regc
+	xor regb, 0x11, regb
+	rtn
+
+	
+remote_car_lpm_gpio_config_flag_init:
+	arg 0,temp
+	arg mem_remote_car_key_conf0+1,contr
+	arg 2,loopcnt	
+remote_car_iocfg_pullup_loop:
+	ifetch 1,contr
+	set0 7,pdata
+	copy pdata,queue
+	setarg 0
+	qset1 pdata
+	iadd temp,temp
+	loop remote_car_iocfg_pullup_loop
+	storet 4,mem_remote_lpm_gpio_config_flag
+	rtn
+
+
+remote_car_idle_process:	
+	bpatch patch06_4,mem_patch06
+	fetch 2,mem_remote_le_24g_ch_count
+	increase 1,pdata
+	store 2,mem_remote_le_24g_ch_count
+	rshift2 pdata,pdata
+	call remote_car_set_24g_ch
+	call remote_car_g24_recved_ack_parse
+remote_car_24g_matching_process:
+	fetch 1,mem_remote_le_24g_tx_pair_mode
+	beq G24_UNCONNECT,remote_car_send_pair_request
+	beq G24_CONNECTED, remote_car_send_remote_control
+	rtn
+
+
+remote_car_set_24g_ch:
+	beq 0,remote_car_set_ch0
+	beq 1,remote_car_set_ch1
+	beq 2,remote_car_set_ch2
+	beq 3,remote_car_set_ch3
+	branch remote_car_set_ch_reset
+	
+remote_car_set_ch0:
+	fetch 1,mem_24g_ch_map1
+	store 1,mem_24g_ch
+	rtn
+remote_car_set_ch1:
+	fetch 1,mem_24g_ch_map1+1
+	store 1,mem_24g_ch
+	rtn
+remote_car_set_ch2:
+	fetch 1,mem_24g_ch_map1+2
+	store 1,mem_24g_ch
+	rtn
+remote_car_set_ch3:
+	fetch 1,mem_24g_ch_map1+3
+	store 1,mem_24g_ch
+	rtn    
+remote_car_set_ch_reset:
+	setarg 0
+	store 2,mem_remote_le_24g_ch_count
+	rtn
+
+        
+remote_car_send_pair_request:
+	jam G24_TX_PAIR_REQUEST,mem_remote_24g_tx_payload_temp
+	fetch 4,mem_le_lap
+	store 4,mem_remote_24g_tx_payload_temp+1
+	branch remote_car_g24_sim_tx_with_datalen_set
+
+
+remote_car_g24_sim_tx_with_datalen_set:	
+	set0 mark_24g_rxmode,mark
+	setarg 0x2ee0    
+	store 2, mem_24g_rx_window //unit:1/12us
+	fetch 7,mem_remote_24g_tx_payload_temp
+	store 7,mem_24g_txbuf
+	fetch 5,mem_remote_24g_tx_payload_temp+7
+	store 5,mem_24g_txbuf+7	
+	arg LEN_OF_24G_PAYLOAD,loopcnt
+	arg 0,pdata
+	arg mem_24g_txbuf,contr
+	call cal_sum	
+	istore 1,contw
+	setarg LEN_OF_24G_PAYLOAD
+	increase 1,pdata
+	store 1,mem_24g_datalen
+	branch remote_car_g24_sim_tx
+
+
+
+remote_car_g24_sim_tx:
+	fetch 1,mem_24g_tx_phy
+	call le_enable_phy_by_pdata
+	call g24_syncword_crc8
+	jam 0x88,mem_rssi_hex
+//	call ice_break
+	call g24_transmit_prep
+	call g24_transmit_receive_ack
+	call g24_end_of_packet
+	fetch 1,mem_24g_no_ack	//tx noack
+	beq no_ack_24g,remote_car_g24_transmit_no_ack
+	nbranch remote_car_g24_transmit_no_ack, user3    //if(user3 == 0) means a invaild packet.
+	nbranch remote_car_g24_transmit_no_ack,sync
+	call remote_car_24g_recved_ack
+remote_car_g24_transmit_no_ack:	
+	random pdata 
+	arg 0x1ff,temp
+	iand temp,pdata
+	add pdata,250,pdata
+	branch delay
+
+
+remote_car_24g_recved_ack:
+	jam 1, mem_remote_le_24g_recv_ack_flag
+	rtn
+
+remote_car_g24_recved_ack_parse:
+	fetch 1, mem_remote_le_24g_recv_ack_flag
+	rtn blank
+	jam 0, mem_remote_le_24g_recv_ack_flag
+	fetch 1,mem_24g_rxbuf+2
+	beq G24_RX_PAIR_RESPONES,remote_car_g24_tx_connected
+	rtn
+
+
+remote_car_g24_tx_connected:
+	fetch 1,mem_remote_le_24g_tx_pair_mode
+	nrtn blank
+	arg mem_24g_rxbuf+7,rega
+	arg mem_le_lap,regb
+	arg 4,loopcnt
+	call string_compare
+	nrtn zero
+	call lpm_write_ice_disable
+	jam G24_CONNECTED,mem_remote_le_24g_tx_pair_mode
+	fetch 4,mem_24g_rxbuf+3
+	store 4,mem_remote_24g_addr_other
+	store 4,mem_remote_24g_tx_payload_temp+5
+	
+ifdef FULL_CONTROL
+	fetch 4,mem_remote_full_control_remote_lap
+	store 4,mem_remote_24g_addr_other
+	store 4,mem_remote_24g_tx_payload_temp+5
+endif
+	branch remote_car_set_connected_lpm_time
+		
+
+
+remote_car_send_remote_control:
+	bpatch patch06_5,mem_patch06
+	fetch 1,mem_le_24g_tx_send_flag
+	increase 1,pdata
+	store 1,mem_le_24g_tx_send_flag
+	jam 0,mem_remote_24g_tx_payload_temp
+	setarg 0
+	store 3,mem_remote_24g_tx_payload_temp+9
+	jam G24_TX_REMOTE_CONTROL,mem_remote_24g_tx_payload_temp
+	call remote_car_scan_key
+	call remote_car_set_tx_key_led
+	fetch 1,mem_le_24g_tx_send_flag
+	beq 200,remote_car_24g_tx_send_none
+	branch remote_car_g24_sim_tx_with_datalen_set
+
+
+remote_car_scan_key:
+	fetcht 1,mem_key_public_gpio
+	call gpio_out_inactive
+	call remote_car_key_scan_fb
+	call remote_car_key_scan_lr
+	//call remote_car_key_scan_mult
+	fetcht 1,mem_key_public_gpio
+	branch gpio_set_high_impedance
+		
+
+remote_car_key_scan_lr:
+	fetcht 1,mem_remote_car_key_conf3
+	call gpio_out_inactive
+
+	fetcht 1,mem_remote_car_key_conf3
+	call gpio_config_input
+	call gpio_get_bit
+	branch remote_car_set_keyR,true
+	
+	fetcht 1,mem_remote_car_key_conf3
+	call gpio_out_active
+	nop 1200
+	fetcht 1,mem_remote_car_key_conf2
+	call gpio_config_input
+	call gpio_get_bit
+	branch remote_car_set_keyL,true
+	rtn
+remote_car_key_scan_fb:
+	fetcht 1,mem_remote_car_key_conf0
+	call gpio_out_inactive
+
+	fetcht 1,mem_remote_car_key_conf0 
+	call gpio_config_input
+	call gpio_get_bit
+	branch remote_car_set_keyF,true
+	
+	fetcht 1,mem_remote_car_key_conf0
+	call gpio_out_active
+	nop 1200
+	fetcht 1,mem_remote_car_key_conf1
+	call gpio_config_input
+	call gpio_get_bit
+	branch remote_car_set_keyB,true
+	rtn
+/*remote_car_key_scan_mult:
+	fetcht 1,mem_key_public_gpio
+	call gpio_out_active	
+	fetcht 1,mem_remote_mult_key
+	call gpio_config_input
+	call gpio_get_bit
+	branch remote_car_set_keyM,true
+	rtn	*/
+
+remote_car_set_keyF:
+	jam 1,mem_remote_24g_tx_payload_temp+9
+	jam 0,mem_le_24g_tx_send_flag
+	rtn
+	
+remote_car_set_keyB:
+	jam 2,mem_remote_24g_tx_payload_temp+9
+	jam 0,mem_le_24g_tx_send_flag
+	rtn
+	
+remote_car_set_keyL:
+	jam 1,mem_remote_24g_tx_payload_temp+10
+	jam 0,mem_le_24g_tx_send_flag
+	rtn
+	
+remote_car_set_keyR:
+	jam 2,mem_remote_24g_tx_payload_temp+10
+	jam 0,mem_le_24g_tx_send_flag
+	rtn
+
+remote_car_set_keyM:
+	jam 1,mem_remote_24g_tx_payload_temp+11
+	jam 0,mem_le_24g_tx_send_flag
+	rtn
+
+remote_car_set_tx_key_led:
+	fetch 3,mem_remote_24g_tx_payload_temp+9
+	branch remote_car_24g_led_off+1,blank
+	setarg 0
+	store 2,mem_24g_lpm_timer_count
+	setarg 15
+	store 2,mem_24g_lpm_enter_count        
+	branch remote_car_24g_led_on
+
+remote_car_24g_tx_send_none:
+	fetch 1,mem_le_24g_tx_send_flag
+	increase -1,pdata
+	store 1,mem_le_24g_tx_send_flag
+	rtn
+
+
+remote_car_24g_set_led:
+	fetch 1,mem_remote_le_24g_tx_pair_mode
+	rtneq G24_CONNECTED
+	fetch 1,mem_24g_led_count
+	increase 1,pdata
+	store 1,mem_24g_led_count
+	beq 2,remote_car_24g_led_on
+	beq 4,remote_car_24g_led_off
+	rtn	
+	
+remote_car_24g_led_on:
+	fetcht 1,mem_24g_tx_led_map
+	branch gpio_out_inactive
+        
+remote_car_24g_led_off:
+	jam 0,mem_24g_led_count
+	fetcht 1,mem_24g_tx_led_map
+	branch gpio_out_active	
+
+	
+remote_car_lpm_timeout_set:
+	fetch 2,mem_24g_lpm_enter_count
+	rtn blank
+	fetcht 2,mem_24g_lpm_timer_count
+	ixor temp,pdata
+	call remote_car_enter_lpm,blank
+	fetch 2,mem_24g_lpm_timer_count
+	increase 1,pdata
+	store 2,mem_24g_lpm_timer_count
+	rtn
+        
+remote_car_cb_event_timer:
+	call remote_car_24g_set_led
+	branch remote_car_lpm_timeout_set
+
+
+remote_car_enter_lpm:	
+	call lpm_write_ice_disable
+	call remote_car_enter_lpm_gpio_config
+	call remote_car_wakeup_config	
+	arg -1,temp
+	branch lpm_sleep
+
+
+remote_car_enter_lpm_gpio_config:
+	arg 24, loopcnt
+	jam 0, mem_remote_lpm_gpio_config_io_temp   
+remote_car_enter_lpm_gpio_config_loopcnt:
+	fetcht 1, mem_remote_lpm_gpio_config_io_temp
+	copy temp, queue
+	fetch 4, mem_remote_lpm_gpio_config_flag    
+	qisolate1 pdata
+	branch remote_car_enter_lpm_gpio_config_pull_up, true
+	or temp, 0x80, temp
+  
+remote_car_enter_lpm_gpio_config_pull_up: 
+	call gpio_config_input
+	fetch 1, mem_remote_lpm_gpio_config_io_temp
+	pincrease 1
+	store 1, mem_remote_lpm_gpio_config_io_temp
+	loop remote_car_enter_lpm_gpio_config_loopcnt
+	rtn
+
+remote_car_set_value:
+	setarg 0x30
+remote_car_gpio_wakeup_cfg:	
+	copy contw,contr
+	ifetcht 1,contr
+	iadd temp,pdata
+	istore 1,contw
+	arg mem_gpio_wakeup_cfg,contw
+	arg mem_remote_car_key_conf0+2,contr
+	loop remote_car_wakeup_config_loop
+	rtn
+
+remote_car_wakeup_config:
+	setarg 0
+	store 0x0c,mem_gpio_wakeup_cfg
+	arg mem_gpio_wakeup_cfg,contw
+	arg mem_remote_car_key_conf0+1,contr
+	arg 2,loopcnt
+remote_car_wakeup_config_loop:
+	ifetch 1,contr
+	set0 7,pdata
+	div pdata,2
+	call wait_div_end
+	quotient pdata	
+	iadd contw,contw
+	remainder pdata
+	nbranch remote_car_set_value,blank
+	setarg 0x03
+	branch remote_car_gpio_wakeup_cfg
+
+	
+	
+	
+endif
+
+
Index: program/app_dongle.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/app_dongle.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/app_dongle.prog	(working copy)
@@ -0,0 +1,605 @@
+ifdef COMPILE_DONGLE
+
+dongle_init:
+	setarg dongle_dispatch
+	store 2,mem_cb_24g_receive_process
+	setarg dongle_g24_mouse
+	store 2,mem_cb_24g_data_device1
+	setarg dongle_g24_kb
+	store 2,mem_cb_24g_data_device2
+	setarg dongle_ackpayload_prep
+	store 2,mem_cb_24g_ackpayload
+	setarg dongle_usb_config
+	store 2,mem_cb_usb_config
+	branch usb_init
+
+
+dongle_default_init:
+	bpatch patch06_6,mem_patch06
+	//sys init
+	call dongle_read_kb_bind_status
+	call dongle_xtal_select
+	fetch 1,mem_dg_sys_config
+	isolate1 DG_ENABLE_EEPROM,pdata
+	branch dongle_default_no_eeprom,true
+	fetch 1,mem_dg_sys_config
+	isolate1 DG_ENABLE_NEW_CHMAP,pdata
+	call g24_chamap_param_update,true
+dongle_default_no_eeprom:	
+	fetch 1,mem_dg_24g_tx_power_default
+	store 1,mem_tx_power
+	//24g init
+	jam 0xff,mem_rssi_buff_index
+	setarg mem_dg_rssi_noise_buffer
+	store 2,mem_rssi_noise_buffer_ptr
+	setarg mem_dg_rssi_noise_dg_buffer
+	store 2,mem_rssi_noise_self_buffer_ptr
+	setarg mem_dg_rssi_noise_ms_buffer
+	store 2,mem_rssi_noise_device1_buffer_ptr
+	setarg mem_dg_rssi_noise_kb_buffer
+	store 2,mem_rssi_noise_device2_buffer_ptr
+	jam TX_POWER_F5DB,mem_24g_pair_tx_power
+	jam 0,mem_dg_kb_bind_success
+	jam 0,mem_24g_bind_device_living
+	call g24_enable_1M
+	fetch 1,mem_dg_sys_config
+	isolate1 DG_ENABLE_24G_2M,pdata
+	call g24_enable_2M,true
+	call g24_receive_init
+	call g24_pair_param_init
+	call g24_chmap_param_init
+	//usb init
+	fetch 1,mem_dg_usb_tx_interval
+	store 1,mem_usb_tx_interval
+	fetch 9,mem_dg_usb_vid_pid
+	store 9,mem_usb_vid_pid
+	rtn
+	
+dongle_xtal_select:
+	jam XTAL_24M,mem_fcomp_div
+	fetch 1,mem_dg_sys_config
+	rtnbit0 DG_ENABLE_XTAL_24M
+	jam XTAL_16M,mem_fcomp_div
+	rtn
+
+dongle_dispatch:
+	fetch 1,mem_24g_pair_mode
+	beq 0x00,dongle_auto_bind
+	beq 0x01,dongle_pc_bind
+	beq 0x0f,dongle_all_powerful
+	rtn
+
+
+dongle_read_kb_bind_status:
+	bpatch patch06_7,mem_patch06
+	arg DONGLE_KB_BIND_EFUSE_OFFECT,regb
+	arg mem_dg_kb_bind_flag,rega
+	arg 1,loopcnt
+	branch otp_read_data
+
+dongle_write_kb_bind_status:
+	bpatch patch07_0,mem_patch07
+	arg 1,loopcnt
+	arg mem_dg_kb_bind_flag,rega
+	arg DONGLE_KB_BIND_EFUSE_OFFECT,regb
+	branch otp_write
+
+dongle_usb_config:
+	fetch 1,mem_dg_sys_config
+	bbit1 DG_ENABLE_KB_ICON,dongle_usb_config_kb
+	fetch 1,mem_dg_kb_bind_flag
+	bne DONGLE_KB_BIND_SUCCESS,dongle_usb_config_param
+dongle_usb_config_kb:
+	jam DONGLE_KB_BIND_SUCCESS,mem_dg_kb_bind_flag
+	fetch 4,USB_DEVICEDATA_ADDR+9
+	set1 29,pdata
+	store 4,mem_devicedesc+9
+dongle_usb_config_param:
+	bpatch patch07_1,mem_patch07
+	call dongle_usb_device_name
+	call usb_tx_interval_config
+	call dongle_usb_vid_pid_config
+	branch dongle_usb_hid_icon_config
+
+dongle_usb_vid_pid_config:
+	fetch 1,mem_usb_vid_pid
+	rtn blank
+	fetch 1,mem_dg_kb_bind_flag
+	beq DONGLE_KB_BIND_SUCCESS,dongle_usb_vid_pid_for_suit
+dongle_usb_vid_pid_for_mouse_only_auto_pair:	
+	fetch 4,mem_usb_vid_pid+1
+dongle_usb_vid_pid_store:	
+	store 4,mem_devicedesc+9
+	rtn
+dongle_usb_vid_pid_for_suit:
+	fetch 4,mem_usb_vid_pid+5
+	branch dongle_usb_vid_pid_store
+
+dongle_usb_hid_icon_config:
+	fetch 1,mem_dg_kb_bind_flag
+	beq DONGLE_KB_BIND_SUCCESS,dongle_usb_kb_hidreportdesc
+	setarg USB_KBDATA_VENDOR_DEFINE_ADDR
+	store 2,mem_hidreportdesc_kb
+	jam 0x1a,mem_confdesc+26//hid_descriptor--keyboard length
+	rtn
+dongle_usb_kb_hidreportdesc:
+	setarg USB_KBDATA_ADDR
+	store 2,mem_hidreportdesc_kb
+	jam 0x41,mem_confdesc+26//hid_descriptor--keyboard length	
+	rtn
+
+dongle_usb_device_name:
+	fetch 1,mem_dg_usb_device_name
+	rtn blank
+	arg mem_dg_usb_device_name,contr
+	arg mem_string2,contw
+	arg 32,loopcnt
+	branch memcpy
+
+
+dongle_all_powerful:
+	call g24_switch_work_mode
+dongle_all_powerful_loop:
+	call dongle_work_mode_auto
+	call dongle_usb_dispatch
+	branch dongle_all_powerful_loop
+
+dongle_pc_bind:
+	call g24_switch_work_mode
+dongle_pc_bind_loop:	
+	call dongle_work_mode_auto
+	call g24_bind_mode_auto
+	call dongle_usb_dispatch
+	branch dongle_pc_bind_loop
+
+dongle_g24_blank_data_process:
+	bpatch patch07_2,mem_patch07
+	call dongle_g24_ms_blank_data
+	call dongle_g24_kb_blank_data
+	call dongle_g24_kb_sys_ctrl_blank_data
+	call dongle_g24_kb_bit_consumer_blank_data
+	branch dongle_g24_kb_mul_blank_data
+
+dongle_g24_ms_blank_data:
+	fetch 1,mem_dg_ms_blank_data_enable
+	rtn blank
+	arg G24_TIMER_MS_BLANK,queue
+	call timer_check
+	nrtn blank
+	jam 0,mem_dg_ms_blank_data_enable
+	setarg MS_REPORT_ID
+	store 1,mem_usb_mouse_data
+	setarg 0
+	istore 7,contw
+dongle_usb_tx_ms_data:
+	jam USB_EP2_MS,mem_usb_ep2_data
+dongle_usb_tx_enable_ep2:
+	fetch 1,mem_usb_tx_enable
+	set1 2,pdata
+	store 1,mem_usb_tx_enable
+	rtn
+
+dongle_g24_kb_blank_data:
+	fetch 1,mem_dg_kb_blank_data_enable
+	rtn blank
+	arg G24_TIMER_KB_BLANK,queue
+	call timer_check
+	nrtn blank
+	jam 0,mem_dg_kb_blank_data_enable
+	arg mem_usb_kb_data,contw
+	call memset0_16
+	fetch 8,mem_usb_kb_data
+	store 8,mem_dg_kb_data_last_data
+dongle_usb_tx_kb_data:	
+	jam KB_NORMAL_REPORT_ID,mem_usb_kb_data
+dongle_usb_tx_enable_ep1:
+	jam USB_EP1_KB,mem_usb_ep1_data
+	fetch 1,mem_usb_tx_enable
+	set1 1,pdata
+	store 1,mem_usb_tx_enable
+	rtn
+
+dongle_g24_kb_sys_ctrl_blank_data:
+	fetch 1,mem_dg_kb_system_crtl_blank_data_enable
+	rtn blank
+	arg G24_TIMER_KB_SYS_CRTL_BLANK,queue
+	call timer_check
+	nrtn blank
+	jam 0,mem_dg_kb_system_crtl_blank_data_enable
+	arg mem_usb_kb_system,contw
+	call memset0_16
+	jam KB_SYSTEM_CONCTRL_REPORT_ID,mem_usb_kb_system
+	fetch 2,mem_usb_kb_system
+	store 2,mem_dg_kb_system_sta_data
+dongle_usb_tx_sys_ctrl_data:
+	jam USB_EP2_SYSTEMKEY,mem_usb_ep2_data
+	branch dongle_usb_tx_enable_ep2
+
+dongle_g24_kb_mul_blank_data:
+	fetch 1,mem_dg_kb_mul_blank_data_enable
+	rtn blank
+	arg G24_TIMER_KB_MUL_BLANK,queue
+	call timer_check
+	nrtn blank
+	jam 0,mem_dg_kb_mul_blank_data_enable
+	arg mem_usb_kb_multikey,contw
+	call memset0_16
+	jam KB_MULTIKEY_REPORT_ID,mem_usb_kb_multikey
+	fetch 3,mem_usb_kb_multikey
+	store 3,mem_dg_kb_multikey_last_data	
+dongle_usb_tx_multikey_data:
+	jam USB_EP2_MULTIKEY,mem_usb_ep2_data
+	branch dongle_usb_tx_enable_ep2
+
+dongle_g24_kb_bit_consumer_blank_data:
+	fetch 1,mem_dg_kb_bit_consumer_blank_data_enable
+	rtn blank
+	arg G24_TIMER_KB_BIT_CONSUMER_BLANK,queue
+	call timer_check
+	nrtn blank
+	jam 0,mem_dg_kb_bit_consumer_blank_data_enable
+	arg mem_usb_kb_multikey,contw
+	call memset0_16
+	jam KB_BIT_CONSUMER_REPORT_ID,mem_usb_kb_multikey
+	fetch 4,mem_usb_kb_multikey
+	store 4,mem_dg_kb_bit_consumer_last_data	
+dongle_usb_tx_bit_consumer_data:
+	jam USB_EP2_BIT_CONSUMER,mem_usb_ep2_data
+	branch dongle_usb_tx_enable_ep2
+
+
+dongle_usb_dispatch:
+	bpatch patch07_3,mem_patch07
+	fetch 1,mem_usb_remote_wakeup
+	call dongle_clear_pc_sleep_flag,blank
+	call usb_isr
+	fetch 1,mem_usb0_get_set_report
+	rtn blank
+	jam 0,mem_usb0_get_set_report
+	fetch 2,mem_usb_setup_bValue_temp
+	arg PC_SET_REPORT,temp
+	isub temp,null
+	nrtn zero
+	//get usb host command
+	fetch 1,mem_usb0_set_report_data
+	rtnne PC_REPORT_ID
+	fetch 1,mem_usb0_set_report_data+1
+	beq COMMAND_MODE,dongle_dispose_cmd_mode
+	beq COMMAND_BIND,dongle_dispose_cmd_bind
+	beq COMMAND_CURRENT_PROJECT,dongle_dispose_cmd_current_project
+	beq COMMAND_CURRENT_MODE,dongle_dispose_cmd_current_mode
+	beq COMMAND_CURRENT_FW_VERSION,dongle_dispose_cmd_current_fw_version
+//	beq COMMAND_USER_DEFINED,dongle_dispose_cmd_user_defined
+dongle_usb0_data_ready_report_set0:
+	jam 0,mem_usb0_data_ready_report
+	rtn
+
+dongle_dispose_cmd_mode:
+	fetch 1,mem_usb0_set_report_data+2
+	beq COM_MODE_BIND,dongle_enter_bind_mode
+	branch dongle_usb0_data_ready_report_set0
+dongle_enter_bind_mode:
+	call g24_bind_mode_enable
+dongle_usb0_data_ready_report_set1:
+	jam 1,mem_usb0_data_ready_report
+	rtn
+
+dongle_dispose_cmd_bind:
+	fetch 1,mem_usb0_set_report_data+2
+	beq COM_BIND_GET,dongle_dispose_cmd_get_bind
+	beq COM_BIND_EXIT,dongle_dispose_cmd_exit_bind
+	beq COM_READ_MODE,dongle_dispose_cmd_read_mode
+	branch dongle_usb0_data_ready_report_set0
+dongle_dispose_cmd_get_bind:
+	fetch 1,mem_24g_bind_device_status
+	store 1,mem_usb0_get_report_data+1
+	branch dongle_usb0_data_ready_report_set1
+dongle_dispose_cmd_exit_bind:
+	call g24_work_mode_enable
+	branch dongle_dispose_cmd_get_bind
+dongle_dispose_cmd_read_mode:
+dongle_dispose_in_bind_mode:
+	jam COMMAND_BIND,mem_usb0_get_report_data+1
+	branch dongle_usb0_data_ready_report_set1	
+
+dongle_dispose_cmd_current_project:
+	jam PRODUCT_ID,mem_usb0_get_report_data+1
+	branch dongle_usb0_data_ready_report_set1
+
+dongle_dispose_cmd_current_mode:
+	fetch 1,mem_24g_work_mode
+	beq DONGLE_WORK,dongle_dispose_in_work_mode
+	beq DONGLE_BIND,dongle_dispose_in_bind_mode
+	rtn
+dongle_dispose_in_work_mode:
+	jam COMMAND_MODE,mem_usb0_get_report_data+1
+	branch dongle_usb0_data_ready_report_set1
+	
+dongle_dispose_cmd_current_fw_version:
+	fetch 4,mem_dg_device_version
+	store 4,mem_usb0_get_report_data+1
+	branch dongle_usb0_data_ready_report_set1
+
+//dongle_dispose_cmd_user_defined:
+//	call g24_ackpayload_disable
+//	fetch 1,mem_usb0_set_report_data+2
+//	beq 0xff,soft_reset_chip
+//	rtn
+
+dongle_auto_bind:
+	call g24_mode_switch_init
+dongle_auto_bind_loop:
+	call g24_mode_switch_bind_work
+	call g24_mode_switch_bind_search
+	call dongle_work_mode_auto
+	call g24_bind_mode_auto
+	call g24_search_mode_auto
+	call dongle_usb_dispatch
+	branch dongle_auto_bind_loop
+
+dongle_work_mode_auto:
+	bpatch patch07_4,mem_patch07
+	fetch 1,mem_24g_work_mode
+	rtnne DONGLE_WORK
+	call g24_work_mode_start
+	call dongle_g24_blank_data_process
+	fetch 1,mem_24g_pair_mode
+	nrtn blank
+	branch g24_nodata_process
+
+dongle_ackpayload_prep:
+	fetch 1,mem_24g_data_type
+	beq DATATYPE_DEVICE1,dongle_ackpayload_prep_mouse
+	beq DATATYPE_DEVICE2,dongle_ackpayload_prep_keyboard
+dongle_ackpayload_prep_mouse:
+	fetch 1,mem_dg_pc_sleep_flag
+	bbit1 0,dongle_pc_sleep_ackpayload_prep_mouse
+	branch dongle_ackpayload_prep_end
+
+dongle_set_pc_sleep_flag:
+	fetch 1,mem_device_option
+	rtnne DVC_OP_DONGLE
+	jam 3,mem_dg_pc_sleep_flag
+	rtn
+dongle_clear_pc_sleep_flag:
+	jam 0,mem_dg_pc_sleep_flag
+	rtn
+
+dongle_ackpayload_prep_keyboard:
+	fetch 1,mem_dg_pc_sleep_flag
+	bbit1 1,dongle_pc_sleep_ackpayload_prep_keyboard
+dongle_ackpayload_prep_end:
+	fetch 1,mem_24g_ackpayload_enable
+	beq BIND_ACKPAYLOAD,dongle_g24_bind_ackpayload_prep
+	beq KB_LED_ACKPAYLOAD,dongle_g24_kb_led_ackpayload_prep
+	rtn
+
+dongle_pc_sleep_ackpayload_prep_mouse:
+	fetch 1,mem_dg_pc_sleep_flag
+	set0 0,pdata
+	store 1,mem_dg_pc_sleep_flag
+	branch dongle_pc_sleep_ackpayload_prep
+
+dongle_pc_sleep_ackpayload_prep_keyboard:
+	fetch 1,mem_dg_pc_sleep_flag
+	set0 1,pdata
+	store 1,mem_dg_pc_sleep_flag
+dongle_pc_sleep_ackpayload_prep:
+	jam 0x01,mem_24g_datalen
+	setarg 0xff
+	store 1,mem_24g_txbuf
+	rtn
+
+
+dongle_g24_bind_ackpayload_prep:
+	bpatch patch07_5,mem_patch07
+	jam 1,mem_24g_ackpayload_enable
+	fetch 1,mem_24g_work_mode
+	rtneq DONGLE_WORK
+	fetch 1,mem_24g_pair_mode
+	nrtn blank
+	call g24_binding_device_check	//works on auto pair only
+	nrtn user3
+	branch g24_bind_ackpayload_prep
+
+dongle_g24_kb_led_ackpayload_prep:
+	fetch 1,mem_24g_rxbuf+2
+	beq DATATYPE_DEVICE1,g24_bind_ackpayload_prep
+	beq DATATYPE_ATTEMP,g24_bind_ackpayload_prep
+	jam 0,mem_usb_tx_win_enable
+	jam 0x01,mem_24g_datalen
+	fetch 1,mem_24g_led_status
+	store 1,mem_24g_txbuf
+	rtn
+
+dongle_g24_mouse:
+	setarg MS_REPORT_ID
+	store 1,mem_usb_mouse_data	//report id
+	fetch 7,mem_24g_rxdata_temp+3	//key
+	istore 7,contw
+	fetch 1,mem_24g_rxdata_temp+3	//key
+	ncall dongle_g24_ms_enable_blank_data_forcibly,blank//get kb data
+	fetch 1,mem_24g_rxdata_temp+3	//key
+	call dongle_g24_ms_disable_blank_data_forcibly,blank
+	branch dongle_usb_tx_ms_data
+
+dongle_g24_ms_enable_blank_data_forcibly:
+	jam 1,mem_dg_ms_blank_data_enable
+	setarg TIMER_MS_BLANK_DELAY
+	arg G24_TIMER_MS_BLANK,queue
+	branch timer_init
+
+dongle_g24_ms_disable_blank_data_forcibly:
+	jam 0,mem_dg_ms_blank_data_enable
+	setarg 0
+	arg G24_TIMER_MS_BLANK,queue
+	branch timer_init
+
+dongle_g24_kb:
+	fetch 1,mem_24g_rxdata_temp+3
+	beq 0,dongle_g24_kb_type0	//normal key
+	beq 2,dongle_g24_kb_type2	//system key
+	beq 3,dongle_g24_kb_type3	//multikey
+	beq 5,dongle_g24_kb_type_bit_consumer
+	branch g24_rx_interrupt_clear
+
+dongle_g24_kb_type0:
+	fetch 1,mem_24g_rxdata_temp+5
+	store 1,mem_24g_ackpayload_enable
+	jam 0,mem_24g_rxdata_temp+5
+	arg mem_usb_kb_data,contw
+	arg mem_24g_rxdata_temp+4,contr
+	arg 8,loopcnt
+	call memcpy
+	fetch 8,mem_usb_kb_data
+	ncall dongle_g24_kb_enable_blank_data_forcibly,blank//get kb data
+	fetch 8,mem_usb_kb_data	
+	call dongle_g24_kb_disable_blank_data_forcibly,blank
+	fetch 8,mem_usb_kb_data
+	store 8,mem_dg_kb_data_sta_data
+	fetcht 8,mem_dg_kb_data_last_data
+	isub temp,null
+	ncall dongle_usb_tx_enable_ep1,zero
+	fetch 8,mem_dg_kb_data_sta_data
+	store 8,mem_dg_kb_data_last_data
+	branch g24_rx_interrupt_clear
+
+dongle_g24_kb_enable_blank_data_forcibly:
+	jam 1,mem_dg_kb_blank_data_enable
+	setarg TIMER_KB_BLANK_DELAY
+	arg G24_TIMER_KB_BLANK,queue
+	branch timer_init
+
+dongle_g24_kb_disable_blank_data_forcibly:
+	jam 0,mem_dg_kb_blank_data_enable
+	setarg 0
+	arg G24_TIMER_KB_BLANK,queue
+	branch timer_init
+
+dongle_g24_kb_type3:
+	arg mem_usb_kb_multikey,contw
+	arg mem_24g_rxdata_temp+3,contr
+	arg 3,loopcnt
+	call memcpy
+	fetch 2,mem_usb_kb_multikey+1
+	ncall dongle_g24_kb_mul_enable_blank_data_forcibly,blank//get multikey data
+	fetch 2,mem_usb_kb_multikey+1
+	call dongle_g24_kb_mul_disable_blank_data_forcibly,blank
+	fetch 3,mem_usb_kb_multikey
+	store 3,mem_dg_kb_multikey_sta_data
+	fetcht 3,mem_dg_kb_multikey_last_data
+	isub temp,null
+	ncall dongle_usb_tx_multikey_data,zero
+	fetch 3,mem_dg_kb_multikey_sta_data
+	store 3,mem_dg_kb_multikey_last_data
+	branch g24_rx_interrupt_clear
+
+dongle_g24_kb_mul_enable_blank_data_forcibly:
+	jam 1,mem_dg_kb_mul_blank_data_enable
+	setarg TIMER_KB_MUL_BLANK_DELAY
+	arg G24_TIMER_KB_MUL_BLANK,queue
+	branch timer_init
+	
+dongle_g24_kb_mul_disable_blank_data_forcibly:
+	jam 0,mem_dg_kb_mul_blank_data_enable
+	setarg 0
+	arg G24_TIMER_KB_MUL_BLANK,queue
+	branch timer_init
+
+dongle_g24_kb_type_bit_consumer:
+	arg mem_usb_kb_multikey,contw
+	arg mem_24g_rxdata_temp+3,contr
+	arg 4,loopcnt
+	call memcpy
+	fetch 3,mem_usb_kb_multikey+1
+	ncall dongle_g24_kb_bit_consumer_enable_blank_data_forcibly,blank//get multikey data
+	fetch 3,mem_usb_kb_multikey+1
+	call dongle_g24_kb_bit_consumer_disable_blank_data_forcibly,blank
+	fetch 3,mem_usb_kb_multikey+1
+	store 3,mem_dg_kb_bit_consumer_sta_data
+	fetcht 3,mem_dg_kb_bit_consumer_last_data
+	isub temp,null
+	ncall dongle_usb_tx_bit_consumer_data,zero
+	fetch 3,mem_dg_kb_bit_consumer_sta_data
+	store 3,mem_dg_kb_bit_consumer_last_data
+	branch g24_rx_interrupt_clear
+
+dongle_g24_kb_bit_consumer_enable_blank_data_forcibly:
+	jam 1,mem_dg_kb_bit_consumer_blank_data_enable
+	setarg TIMER_KB_MUL_BLANK_DELAY
+	arg G24_TIMER_KB_BIT_CONSUMER_BLANK,queue
+	branch timer_init
+
+dongle_g24_kb_bit_consumer_disable_blank_data_forcibly:
+	jam 0,mem_dg_kb_bit_consumer_blank_data_enable
+	setarg 0
+	arg G24_TIMER_KB_BIT_CONSUMER_BLANK,queue
+	branch timer_init
+
+
+dongle_g24_kb_type2:
+	arg mem_usb_kb_system,contw
+	arg mem_24g_rxdata_temp+3,contr
+	arg 2,loopcnt
+	call memcpy
+	fetch 2,mem_usb_kb_system
+	ncall dongle_g24_kb_sys_enable_blank_data_forcibly,blank
+	fetch 2,mem_usb_kb_system
+	call dongle_g24_kb_sys_disable_blank_data_forcibly,blank
+	fetch 2,mem_usb_kb_system
+	store 2,mem_dg_kb_system_sta_data
+	fetcht 2,mem_dg_kb_system_last_data
+	isub temp,null
+	ncall dongle_usb_tx_sys_data,zero
+	fetch 2,mem_dg_kb_system_sta_data
+	store 2,mem_dg_kb_system_last_data
+	branch g24_rx_interrupt_clear
+
+dongle_g24_kb_sys_enable_blank_data_forcibly:
+	jam 1,mem_dg_kb_system_crtl_blank_data_enable
+	setarg TIMER_KB_SYS_CRTL_BLANK_DELAY
+	arg G24_TIMER_KB_SYS_CRTL_BLANK,queue
+	branch timer_init
+dongle_g24_kb_sys_disable_blank_data_forcibly:
+	jam 0,mem_dg_kb_system_crtl_blank_data_enable
+	setarg 0
+	arg G24_TIMER_KB_SYS_CRTL_BLANK,queue
+	branch timer_init
+
+dongle_usb_tx_sys_data:
+	jam USB_EP2_SYSTEMKEY,mem_usb_ep2_data
+	branch dongle_usb_tx_enable_ep2
+
+
+dongle_g24_store_dvc2_bind_flag:
+	fetch 1,mem_device_option
+	rtnne DVC_OP_DONGLE
+	fetch 1,mem_dg_kb_bind_flag
+	rtneq DONGLE_KB_BIND_SUCCESS
+dongle_prep_soft_reset:
+	jam 1,mem_dg_kb_bind_success
+	rtn
+
+
+dongle_kb_bind_soft_reset:
+	fetch 1,mem_device_option
+	rtnne DVC_OP_DONGLE
+	fetch 1,mem_dg_kb_bind_success
+	rtn blank
+	jam 0,mem_temp
+dongle_wirte_efuse_bind_status:	
+	jam DONGLE_KB_BIND_SUCCESS,mem_dg_kb_bind_flag
+	call dongle_write_kb_bind_status
+	call dongle_read_kb_bind_status
+	fetch 1,mem_temp
+	increase 1,pdata
+	store 1,mem_temp
+	beq 0xff,soft_reset_chip
+	fetch 1,mem_dg_kb_bind_flag
+	bne DONGLE_KB_BIND_SUCCESS,dongle_wirte_efuse_bind_status
+	branch soft_reset_chip
+
+
+endif
+
+
Index: program/app_kb.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/app_kb.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/app_kb.prog	(working copy)
@@ -0,0 +1,3926 @@
+
+keyboard_softreset_process:
+	call keyboard_wakeup_from_power_check
+	nbranch soft_reset+1,user
+	fetch 1,mem_power_on_flag
+	branch soft_reset+1,blank
+	fetch 1,mem_keyboard_pb_button_gpio
+	rtneq UI_BUTTON_GPIO_DISABLE
+	copy pdata,queue
+	fetch 4,mem_saved_gpio_in
+	qisolate0 pdata					// bt button gpio num
+	call keyboard_pb_set,true
+	branch soft_reset+2	
+
+keyboard_wakeup_from_power_check:
+	disable user
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit0 KEYBOARD_ENABLE_WAKEUP_FROM_POWER,mouse_wakeup_from_poweron
+	fetch 1,core_lpm_isogate
+	bbit1 cold_wake,mouse_wakeup_from_poweron
+	enable user	//wake from hibernate
+	branch mouse_wakeup_from_poweron
+
+keyboard_default_init:
+	call hid_device_default_parm_init
+	call keyboard_xtal_init
+	call keyboard_24g_phy_select
+	branch g24_pair_param_init
+
+keyboard_xtal_init:
+	jam XTAL_16M,mem_fcomp_div		// 0x08--16M 
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit1 KEYBOARD_ENABLE_16M
+	jam XTAL_24M,mem_fcomp_div		// 0x18--24M
+	rtn
+
+keyboard_24g_phy_select:
+	call g24_enable_1M
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_24G_2M_PHY
+	branch g24_enable_2M
+
+
+keyboard_init:
+	call enable_authrom
+	call keyboard_setting_config
+	
+	call keyboard_gpio_init
+	call keyboard_low_vol_mult_set
+	call lpm_config_puchk_disable
+	rtn wake
+	call keyboard_cb_fuction
+	fetch 1,mem_device_flag
+	beq MODE_USB_DEVICE,keyboard_usb_mode_start
+keyboard_init_wireless:	
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BTN_DOWN,keyboard_start_discovery
+	jam 0,mem_keyboard_switch_count_temp
+	call keyboard_check_select_device_by_switch
+	jam 1,mem_keyboard_switch_count_temp
+	branch keyboard_start_work
+
+keyboard_setting_config:
+	rtn wake
+	call g24_transmit_init
+	call g24_chmap_param_init
+	call keyboard_param_init
+	call keyboard_device_led_all_off
+	call keyboard_rgb_off
+	call keyboard_pwm_init
+	call le_set_fixed_ltk_justwork
+	bpatch patch07_6,mem_patch07
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit1 KEYBOARD_ENABLE_OTP,keyboard_load_otp_info	
+	bbit1 KEYBOARD_ENABLE_EEPROM,keyboard_load_eeprom_info
+	bbit1 KEYBOARD_ENABLE_FLASH,keyboard_load_flash_info
+	rtn
+
+keyboard_param_common_init:
+	setarg MOUSE_BLE_ATT_LIST_ADDR				//ble attlist start address
+	store 2,mem_ui_le_uuid_table
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit1 KEYBOARD_ENABLE_MOUSE,hid_device_param_common_init
+	setarg KEYBOARD_BLE_HID_MAP_N_KEY_ROLLOVER_KEYBOARD_ADDR
+	store 2,mem_keyboard_le_hid_map
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit1 KEYBOARD_ENABLE_26_N_KEY_ROLLOVER,hid_device_param_common_init
+	bbit1 KEYBOARD_ENABLE_FULL_N_KEY_ROLLOVER,hid_device_param_common_init
+	setarg KEYBOARD_BLE_HID_MAP_MAGIC_KEYBOARD_ADDR
+	store 2,mem_keyboard_le_hid_map
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit1 KEYBOARD_ENABLE_MAGIC_KEYBOARD,hid_device_param_common_init
+	setarg KEYBOARD_BLE_HID_MAP_ONLY_KEYBOARD_ADDR
+	store 2,mem_keyboard_le_hid_map
+	branch hid_device_param_common_init
+
+	
+keyboard_param_init:
+	call keyboard_compare_addr_init
+	call keyboard_param_common_init	
+	call keyboard_adc_vol_init
+	fetch 1,mem_keyboard_device_poweron_timer_init
+	store 1,mem_keyboard_device_poweron_timer
+	jam 0,mem_same_keyvalue_timerout_flag	
+	arg mem_le_adv_swift_pair,contw
+	arg 20,loopcnt
+	call clear_mem
+
+	fetch 1,mem_le_name_len
+	sub pdata,12,null
+	nbranch keyboard_ble_name_set_no_swift_pair,positive
+	setarg 0x06ff06
+	store 3,mem_le_adv_swift_pair
+	setarg 0x000300
+	istore 3,contw
+	setarg 0x80
+	istore 1,contw
+keyboard_ble_store_le_name:
+	fetch 1,mem_le_name_len
+	increase 1,pdata
+	copy pdata,loopcnt
+	arg mem_le_scan_data,contr			// 7byte + mem_le_scan_data
+	branch memcpy
+	
+keyboard_ble_name_set_no_swift_pair:
+	arg mem_le_adv_swift_pair,contw
+	branch keyboard_ble_store_le_name
+
+keyboard_compare_addr_init:
+	arg 0,temp
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit1 KEYBOARD_ENABLE_OTP,hid_device_compare_addr_store
+	arg 0xffffff,temp
+	branch hid_device_compare_addr_store
+	
+/////////////////////////////////////////////////////////------gpio------///////////////////////////////////////////////////////////
+keyboard_gpio_init:
+	call clear_wake
+	fetcht 1,mem_keyboard_pb_button_gpio
+	call device_gpio_config_input_pu
+
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	isolate1 KEYBOARD_DISABLE_ICE,pdata
+	call lpm_write_ice_disable,true
+	
+	//row init
+	setarg mem_key_row_gpio
+	store 2,mem_kb_row_ptr
+	//col init
+	setarg mem_key_col_gpio
+	store 2,mem_kb_col_ptr
+	//portA and B init
+	setarg mem_key_excol_gpio
+	store 2,mem_kb_excol_ptr
+	call keyboard_key_row_init
+	fetch 2,mem_kb_col_ptr
+	copy pdata,regb
+	arg 20,loopcnt	
+keyboard_key_cow_init:
+	ifetcht 1,regb
+	isolate1 7,temp						// exmcu gpio
+	ncall gpio_set_high_impedance,true
+	increase 1,regb
+	loop keyboard_key_cow_init
+	rtn
+
+keyboard_key_row_init:
+	fetch 2,mem_kb_row_ptr
+	copy pdata,regb
+	arg 8,loopcnt
+keyboard_key_row_init_loop:
+	ifetcht 1,regb
+	sub temp,UI_BUTTON_GPIO_DISABLE,null
+	ncall keyboard_gpio_set_low_pullup,zero
+	increase 1,regb
+	loop keyboard_key_row_init_loop
+	branch lpm_write_gpio_wakeup
+	
+keyboard_gpio_set_low_pullup:
+	call gpio_set_high_impedance
+	ifetcht 1,regb
+	branch gpio_set_low_pullup
+
+keyboard_gpio_pu_idle:
+	arg core_gpio_conf,contr
+	arg GPIO_NUMBER,loopcnt
+keyboard_gpio_pu_idle_loop:
+	ifetch 1,contr
+	nbranch keyboard_gpio_pu_idle_configured,blank
+	setarg gpcfg_pullup
+	add contr,-1,contw
+	istore 1,contw
+keyboard_gpio_pu_idle_configured:
+	loop keyboard_gpio_pu_idle_loop
+	arg core_gpio_conf_hi+GPIO_NUMBER_EXT,pdata
+	isub contr,null
+	rtn zero
+	arg GPIO_NUMBER_EXT,loopcnt
+	arg core_gpio_conf_hi,contr
+	branch keyboard_gpio_pu_idle_loop	
+
+keyboard_key_row_wake_set:
+	fetch 1,mem_same_keyvalue_timerout_flag
+	branch gpio_set_wake,blank
+	branch gpio_set_wake_by_current_state
+	
+//////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+	
+///////////////////////////////////////otp  eeprom flash/////////////////////////////////////////////////////////////
+keyboard_pairing_check_otp_offset:
+	fetch 2,mem_otp_read_retention_offset
+	//arg 0x320,temp   //50*16 or 4*200
+	fetcht 2,mem_otp_read_retention_max_size
+	isub temp,null
+	nrtn positive
+	branch assert
+	
+//  otp process	
+keyboard_load_otp_info:
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,keyboard_load_otp_device_info_g24_init
+	beq MODE_BT_DEVICE1,keyboard_load_otp_device_info_ble_init
+	rtn	
+	
+keyboard_load_otp_device_info_g24_init:
+	arg 8,regd
+	//setarg 0x400
+	fetch 2,mem_otp_read_retention_max_size
+	idiv regd
+	call wait_div_end
+	quotient pdata
+	store 2,mem_pdatatemp
+	arg 0x1fbc,pdata
+	arg 4,temp
+	arg 4,rege
+	branch keyboard_load_otp_device_info
+keyboard_load_otp_device_info_ble_init:
+	arg 32,regd
+	//setarg 0x400
+	fetch 2,mem_otp_read_retention_max_size
+	idiv regd
+	call wait_div_end
+	quotient pdata
+	store 2,mem_pdatatemp
+	arg 0x1fb0,pdata
+	arg 16,temp		
+	arg 16,rege
+	branch keyboard_load_otp_device_info
+keyboard_load_otp_device_info:
+	store 2,mem_pdatatemp+2
+	storet 1,mem_temp
+	arg mem_otp_read_retention_memory,rega
+	arg 0,regc
+keyboard_load_otp_info_check_page_loop:
+	fetch 2,mem_pdatatemp+2
+	copy pdata,regb
+	fetchr loopcnt, 1,mem_temp
+	arg mem_otp_read_retention_memory,rega
+	call otp_read_data
+	fetch 8,mem_otp_read_retention_memory
+	fetcht 8,mem_otp_read_retention_memory+8
+	ior temp,pdata
+	fetcht 8,mem_otp_read_retention_memory+16
+	ior temp,pdata	
+	branch keyboard_load_otp_info_check_first_time,blank
+	increase 1,regc
+	fetch 2,mem_pdatatemp
+	isub regc,null
+	fetch 2,mem_pdatatemp+2
+	isub regd,pdata
+	store 2,mem_pdatatemp+2
+	branch keyboard_load_otp_info_check_page_loop
+	
+keyboard_load_otp_info_check_first_time:
+	sub regc,0,null
+	branch keyboard_load_otp_info_check_first_time_process,zero
+keyboard_load_otp_info_check_first_time_loop_init:
+	fetch 2,mem_pdatatemp+2
+	iadd regd,pdata
+keyboard_load_otp_info_check_first_time_loop:	
+	isub rege,pdata
+	store 2,mem_pdatatemp+2
+	fetch 2,mem_pdatatemp+2
+	copy pdata,regb
+	fetchr loopcnt, 1,mem_temp
+	arg mem_otp_read_retention_memory,rega
+	call otp_read_data
+	fetch 8,mem_otp_read_retention_memory
+	fetcht 8,mem_otp_read_retention_memory+8
+	ior temp,pdata
+	fetcht 8,mem_otp_read_retention_memory+16
+	ior temp,pdata	
+	branch keyboard_load_otp_info_check_offset_process,blank
+	fetch 2,mem_pdatatemp+2
+	branch keyboard_load_otp_info_check_first_time_loop
+	
+keyboard_load_otp_info_check_first_time_process:
+	storer rege,1,mem_otp_read_retention_offset
+	rtn
+keyboard_load_otp_info_check_offset_process:
+	setarg 0x1fc0
+	fetcht 2,mem_pdatatemp+2
+	isub temp,pdata
+	store 2,mem_otp_read_retention_offset		//store the next field offset ,convenient for next storage
+	copy temp,pdata
+	iadd rege,regb
+	fetchr loopcnt, 1,mem_temp
+	arg mem_otp_read_retention_memory,rega
+	call otp_read_data
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,keyboard_load_otp_info_check_offset_process_g24
+	beq MODE_BT_DEVICE1,keyboard_load_otp_info_check_offset_process_ble
+	rtn
+
+keyboard_load_otp_info_check_offset_process_g24:	
+	fetch 6,mem_otp_read_retention_memory
+	store 4,mem_device_24g_addr
+	fetch 4,mem_device_24g_addr
+	store 4,mem_24g_receiver_addr
+	store 4,mem_24g_addr
+	rtn
+
+keyboard_load_otp_info_check_offset_process_ble:
+	fetch 1,mem_otp_read_retention_memory
+	sub pdata,SYSTEM_OS_MAC,null
+	ncall set_pdata_0,positive
+	store 1,mem_kb_computer_system
+	fetch 1,mem_otp_read_retention_memory+1
+	store 1,mem_device1_type
+	fetch 6,mem_otp_read_retention_memory+2
+	store 6,mem_device1_addr
+	fetch 6,mem_otp_read_retention_memory+8
+	store 6,mem_device1_locall_addr
+	fetcht 2,mem_otp_read_retention_memory+14
+	random pdata
+	iadd temp,pdata
+	store 2,mem_random_addr_increase_count
+	branch hid_device_select_reconn_device
+
+
+keyboard_load_eeprom_info:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit0 KEYBOARD_ENABLE_SDA_MULTI_R_LINE,keyboard_load_eeprom_device_info_next
+	fetcht 1,mem_eeprom_sda_gpio
+	call device_gpio_config_input_pu
+	fetcht 1,mem_eeprom_sda_gpio
+	call gpio_get_bit
+	branch keyboard_load_eeprom_info,true
+keyboard_load_eeprom_device_info_next:
+	call keyboard_eeprom_init
+	arg 128,temp
+	arg mem_device_flag,rega
+	arg KEYBOARD_INFO_EEPROM_OFFECT,regb
+	call iicd_read_eep_data
+keyboard_load_info_check:
+	bpatch patch07_7,mem_patch07
+	call keyboard_app_initflag_check
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,keyboard_load_info_24g
+	beq MODE_BT_DEVICE1,keyboard_load_info_bt1
+	beq MODE_BT_DEVICE2,keyboard_load_info_bt2
+	beq MODE_BT_DEVICE3,keyboard_load_info_bt3
+	beq MODE_USB_DEVICE,keyboard_load_info_usb
+keyboard_load_info_24g:
+	jam SYSTEM_OS_WINDOWS,mem_kb_computer_system
+	fetch 1,mem_keyboard_24g_fn_lock
+keyboard_load_info_fn_lock:	
+	sub pdata,1,null
+	ncall set_pdata_0,zero
+	store 1,mem_keyboard_fn_lock_flag
+	rtn
+keyboard_load_info_bt1:
+	fetch 1,mem_keyboard_bt1_fn_lock
+	call keyboard_load_info_fn_lock
+	fetch 1,mem_keyboard_bt1_computer_system
+	sub pdata,SYSTEM_OS_MAC,null
+	ncall set_pdata_0,positive
+keyboard_load_info_bt:	
+	store 1,mem_kb_computer_system
+	fetcht 2,mem_random_addr_increase_count
+	random pdata
+	iadd temp,pdata
+	store 2,mem_random_addr_increase_count
+	rtn
+keyboard_load_info_bt2:
+	fetch 1,mem_keyboard_bt2_fn_lock
+	call keyboard_load_info_fn_lock
+	fetch 1,mem_keyboard_bt2_computer_system
+	branch keyboard_load_info_bt
+keyboard_load_info_bt3:
+	fetch 1,mem_keyboard_bt3_fn_lock
+	call keyboard_load_info_fn_lock
+	fetch 1,mem_keyboard_bt3_computer_system
+	branch keyboard_load_info_bt
+keyboard_load_info_usb:
+	jam SYSTEM_OS_WINDOWS,mem_kb_computer_system
+	fetch 1,mem_keyboard_usb_fn_lock
+	branch keyboard_load_info_fn_lock
+
+keyboard_app_initflag_check:
+	fetch 2,mem_store_flag
+	arg EEPROM_INIT_FLAG,temp
+	isub temp,null
+	branch hid_device_load_device_info,zero
+	storet 2,mem_store_flag
+	call hid_device_ble_init_address
+	fetch 1,mem_device_flag_temp
+	store 1,mem_device_flag
+	fetch 4,mem_24g_fast_conn_addr
+	store 4,mem_24g_receiver_addr
+	store 4,mem_24g_addr
+	fetch 1,mem_keyboard_device_info_store_flag
+	set1 KEYBOARD_STORE_EEPROMM_FLAG_ALL_INFO,pdata
+	store 1,mem_keyboard_device_info_store_flag
+	branch keyboard_store_device_info
+
+keyboard_load_flash_info:
+	call hid_device_load_flash_info_check
+	branch keyboard_load_info_check
+
+keyboard_store_device_info:
+	bpatch patch08_0,mem_patch08
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit1 KEYBOARD_ENABLE_OTP,keyboard_store_otp_device_info
+	bbit1 KEYBOARD_ENABLE_EEPROM,keyboard_store_eeprom_device_info
+	bbit1 KEYBOARD_ENABLE_FLASH,hid_device_store_flash_device_info
+	rtn
+	
+keyboard_store_otp_device_info:
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,keyboard_store_otp_device_info_g24
+	beq MODE_BT_DEVICE1,keyboard_store_otp_device_info_ble
+	rtn
+
+keyboard_store_otp_device_info_g24:
+	fetcht 2,mem_otp_read_retention_offset
+	setarg 0x1fc0
+	isub temp,regb
+	arg mem_device_24g_addr,rega
+	arg 4,loopcnt
+	call otp_write   
+	fetcht 2,mem_otp_read_retention_offset
+	increase 4,temp
+	storet 2,mem_otp_read_retention_offset
+	rtn
+
+keyboard_store_otp_device_info_ble:
+	jam 1,mem_otp_store_device_info_flag
+	fetch 1,mem_otp_store_system_flag
+	rtn blank
+keyboard_wirte_otp_ble:	
+	fetcht 2,mem_otp_read_retention_offset
+	setarg 0x1fc0
+	isub temp,pdata
+	store 2,mem_pdatatemp
+
+	copy pdata,regb
+	arg mem_kb_computer_system,rega
+	arg 1,loopcnt
+	call otp_write   /* regb = otp address, rega pointers data, loopcnt is count */	
+
+	fetch 2,mem_pdatatemp
+	add pdata,1,regb
+	arg mem_device1_type,rega
+	arg 13,loopcnt
+	call otp_write   /* regb = otp address, rega pointers data, loopcnt is count */
+
+	fetch 2,mem_pdatatemp
+	add pdata,14,regb
+	arg mem_random_addr_increase_count,rega
+	arg 2,loopcnt
+	call otp_write  /* regb = otp address, rega pointers data, loopcnt is count */
+	
+	fetcht 2,mem_otp_read_retention_offset
+	increase 16,temp
+	storet 2,mem_otp_read_retention_offset
+	rtn	
+
+keyboard_store_eeprom_device_info:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit0 KEYBOARD_ENABLE_SDA_MULTI_R_LINE,keyboard_store_eeprom_device_info_next
+	fetcht 1,mem_eeprom_sda_gpio
+	call device_gpio_config_input_pu
+	fetcht 1,mem_eeprom_sda_gpio
+	call gpio_get_bit
+	branch keyboard_store_device_info_delay,true
+keyboard_store_eeprom_device_info_next:	
+	call keyboard_eeprom_init
+keyboard_store_eeprom_device_info_typer_check:	
+	fetch 1,mem_keyboard_device_info_store_flag
+	bbit1 KEYBOARD_STORE_EEPROMM_FLAG_ALL_INFO,keyboard_store_eeprom_device_all_info
+	bbit1 KEYBOARD_STORE_EEPROMM_FLAG_BLE_ADDR,keyboard_store_eeprom_device_info_ble_addr
+	bbit1 KEYBOARD_STORE_EEPROMM_FLAG_G24_ADDR,keyboard_store_eeprom_device_info_g24_addr	
+	bbit1 KEYBOARD_STORE_EEPROMM_FLAG_FN_LOCK,keyboard_store_eeprom_device_info_fn_lock
+	bbit1 KEYBOARD_STORE_EEPROMM_FLAG_COMPUTER_SYSTEM,keyboard_store_eeprom_device_info_device_os
+	bbit1 KEYBOARD_STORE_EEPROMM_FLAG_RGB_TYPE,keyboard_store_eeprom_device_info_rgb_tpye
+	rtn
+keyboard_store_eeprom_device_all_info:
+	jam 0,mem_keyboard_device_info_store_flag
+	arg 128,temp
+	arg mem_device_flag,rega
+	arg KEYBOARD_INFO_EEPROM_OFFECT,regb
+	branch iicd_write_protect_eep_data	
+keyboard_store_eeprom_device_info_ble_addr:
+	fetch 1,mem_keyboard_device_info_store_flag
+	set0 KEYBOARD_STORE_EEPROMM_FLAG_BLE_ADDR,pdata
+	store 1,mem_keyboard_device_info_store_flag
+	arg 39,temp
+	arg mem_device1_type,rega
+	arg KEYBOARD_BLE_ADDR_EEPROM_OFFECT,regb
+	call iicd_write_protect_eep_data
+	arg 2,temp
+	arg mem_random_addr_increase_count,rega
+	arg KEYBOARD_RANDOM_ADDR_COUNT_EEPROM_OFFSET,regb
+	call iicd_write_protect_eep_data
+	branch keyboard_store_eeprom_device_info_typer_check
+keyboard_store_eeprom_device_info_g24_addr:
+	fetch 1,mem_keyboard_device_info_store_flag
+	set0 KEYBOARD_STORE_EEPROMM_FLAG_G24_ADDR,pdata
+	store 1,mem_keyboard_device_info_store_flag
+	arg 4,temp
+	arg mem_device_24g_addr,rega
+	arg KEYBOARD_G24_ADDR_EEPROM_OFFECT,regb
+	call iicd_write_protect_eep_data
+	branch keyboard_store_eeprom_device_info_typer_check
+keyboard_store_eeprom_device_info_fn_lock:
+	fetch 1,mem_keyboard_device_info_store_flag
+	set0 KEYBOARD_STORE_EEPROMM_FLAG_FN_LOCK,pdata
+	store 1,mem_keyboard_device_info_store_flag
+	arg 5,temp
+	arg mem_keyboard_24g_fn_lock,rega
+	arg KEYBOARD_FN_FLAG_EEPROM_OFFSET,regb
+	call iicd_write_protect_eep_data
+	branch keyboard_store_eeprom_device_info_typer_check	
+keyboard_store_eeprom_device_info_device_os:
+	fetch 1,mem_keyboard_device_info_store_flag
+	set0 KEYBOARD_STORE_EEPROMM_FLAG_COMPUTER_SYSTEM,pdata
+	store 1,mem_keyboard_device_info_store_flag
+	arg 3,temp
+	arg mem_keyboard_bt1_computer_system,rega
+	arg KEYBOARD_COMPUTER_SYSTEM_EEPROM_OFFSET,regb
+	call iicd_write_protect_eep_data
+	branch keyboard_store_eeprom_device_info_typer_check
+keyboard_store_eeprom_device_info_rgb_tpye:
+	fetch 1,mem_keyboard_device_info_store_flag
+	set0 KEYBOARD_STORE_EEPROMM_FLAG_RGB_TYPE,pdata
+	store 1,mem_keyboard_device_info_store_flag
+	arg 4,temp
+	arg mem_backlight_on_flag,rega
+	arg KEYBOARD_RGB_TPYE_OFFSET,regb
+	call iicd_write_protect_eep_data
+	branch keyboard_store_eeprom_device_info_typer_check
+	
+keyboard_store_device_number:
+	arg 1,temp
+	arg mem_device_flag,rega
+	arg KEYBOARD_DEVICE_NUMBER_EEPROM_OFFECT,regb
+	branch iicd_write_protect_eep_data
+
+keyboard_eeprom_init:
+	call iicd_read_init_pin
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	isolate1 KEYBOARD_ENABLE_2K_EEPROM,pdata
+	branch set_eeprom_size_2k,true
+	branch clear_eeprom_size_2k	
+////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/////////////////////////////////////cb_function//////////////////////////////////////////////////////
+keyboard_cb_fuction:
+	bpatch patch08_1,mem_patch08
+	setarg hid_device_before_lpm_set
+	store 2,mem_cb_before_lpm_sleep
+	setarg keyboard_24g_package_data
+	store 2,mem_cb_24g_transmit_data
+	setarg keyboard_24g_search_dongle
+	store 2,mem_cb_24g_search_receiver
+	setarg keyboard_lpm_before_common
+	store 2,mem_cb_24g_lpm_before
+	setarg keyboard_le
+	store 2,mem_cb_le_process
+	
+	setarg keyboard_process_lpm_before
+	store 2,mem_cb_before_lpm
+	
+	setarg keyboard_priority_bb_event
+	store 2,mem_cb_bb_event_process
+	setarg keyboard_idle
+	store 2,mem_cb_idle_process
+	setarg keyboard_before_hibernate
+	store 2,mem_cb_before_hibernate
+	setarg mouse_le_bb_event_connect_complete
+	store 2,mem_cb_att_write	
+	setarg keyboard_bb_event_timer
+	store 2,mem_cb_event_timer
+	branch hid_device_cb_fuction
+
+/////////////////////////////////////keyboard event/////////////////////////////////////////////////////////////////////
+
+keyboard_priority_bb_event:	
+	bpatch patch08_2,mem_patch08
+	copy regc,pdata	
+
+	beq BT_EVT_LE_START_ENC,keyboard_le_ll_start_encryt
+	beq BT_EVT_LE_PARSE_CONN_PAPA_UPDATE_RSP,keyboard_le_conn_param_update_rsp_recieved
+	beq BT_EVT_LE_DISCONNECTED,keyboard_le_bb_disconnected
+
+	beq BT_EVT_LE_CONNECTED,keyboard_le_bb_event_connected
+	beq BT_EVT_BUTTON_LONG_PRESSED,keyboard_bb_event_discovery_btn
+	beq BT_EVT_LE_PAIRING_SUCCESS,mouse_le_pairing_success
+	beq BT_EVT_LE_ENC_INFO,mouse_le_enc_info
+
+	beq BT_EVT_LE_PAIRING_COMPLETE,app_ble_store_reconn_info	
+	beq BT_EVT_LE_PARSE_CONN_PARAM_ACCEPTED,mouse_le_parse_conn_param_accepted
+
+	beq BT_EVT_24G_PAIRING_COMPLETE,keyboard_24g_pairing_complete
+	beq BT_EVT_24G_ATTEMPT_SUCCESS,keyboard_24g_attempt_success
+	beq BT_EVT_24G_ATTEMPT_FAIL,keyboard_24g_attempt_fail
+
+	rtn
+
+
+/////////////////////////////////////keyboard timer/////////////////////////////////////////////////////////////////////
+
+keyboard_bb_event_timer:
+	bpatch patch08_3,mem_patch08
+	call keyboard_low_voltage_param_set
+	call keyboard_adc_read
+	call keyboard_adc_gpio_set_before_hibernate
+
+	//led
+	call keyboard_low_voltage_led_timer
+	call keyboard_num_capslock_led_on_timer
+	call keyboard_rgb_on_timer
+	call keyboard_device_poweron_timer
+	call keyboard_mode_led_timer
+	call keyboard_device_pair_led_timer
+
+	//key
+	call keyboard_key_press_timer
+	call keyboard_commbination_key_process
+	call keyboard_same_key_long_press_timer
+	
+	// g24
+	call g24_pair_timeout_timer
+	call g24_reconn_timeout_timer
+	call mouse_24g_long_sleep_param_update_timer
+	call keyboard_24g_repeat_send_data
+	call keyboard_24g_led_status_get_timer
+
+	//le
+	call keyboard_check_discovery_timeout_timer
+	call keyboard_check_direct_timeout_timer
+	call mouse_le_enable_att_list_timer
+	call keyboard_le_battery_updata_timer
+	call mouse_le_send_smp_security_request_timer
+	call keyboard_le_send_conn_param_update_timer	
+	call keyboard_le_auto_recognize_timer
+
+	call mouse_current_mult_update_timer
+	call keyboard_store_information_delay_timer
+	call keyboard_commbination_delay_release_timer
+	call keyboard_usb_updata_timer
+	branch keyboard_check_no_data_timeout_timer
+
+////////////////////////////////////////////////////////////////adc/////////////////////////////////////////////
+keyboard_adc_vol_init:
+	bpatch patch08_4,mem_patch08
+	fetch 1,mem_keyboard_power_type
+	beq KEYBOARD_BATTARY_1V5,keyboard_adc_vol_1v5_init
+	beq KEYBOARD_BATTARY_3V0,keyboard_adc_vol_3v0_init
+	beq KEYBOARD_BATTARY_4V2,keyboard_adc_vol_4v2_init
+keyboard_adc_vol_1v5_init:
+	setarg 0x560094		// 0x0094--1.5V  0x0056--0.9V  0x0060--1.0V  0x006d--1.1V
+	store 3,mem_keyboard_vdd_full_vol
+	setarg 0x006d00
+	istore 3,contw
+	rtn
+keyboard_adc_vol_3v0_init:
+	setarg 0xd4012c		// 0x0094--3.0V  0x00d4--2.1V  0x00dc--2.2V  0x00e6--2.3V
+	store 3,mem_keyboard_vdd_full_vol
+	setarg 0x00e600
+	istore 3,contw
+	rtn
+keyboard_adc_vol_4v2_init:
+	setarg 0x2c01270		// 0x0170--3.7V  0x012c--3.0V  0x0140--3.2V  0x014a--3.3V
+	store 3,mem_keyboard_vdd_full_vol
+	setarg 0x014001
+	istore 3,contw
+	rtn
+
+keyboard_adc_init:
+	call keyboard_adc_gpio_set
+	branch keyboard_low_voltage_param_set
+
+keyboard_adc_gpio_set:
+	fetch 1,mem_adc_config_flag
+	rtnne ADC_CONFIG_GPIO
+	fetch 1,mem_adc_channel
+	call keyboard_channel_set_gpio	
+	copy temp,pdata
+	store 1,mem_adc_channel_gpio
+	set1 GPIO_ACTIVE_BIT,pdata
+	arg gpcfg_input,temp
+	branch gpio_config_function	
+	
+keyboard_channel_set_gpio:
+	arg 18,temp 
+	rtneq 0x6
+	arg 10,temp 	
+	rtneq 0x7
+	arg 9,temp 	
+	rtneq 0x8
+	arg 12,temp 	
+	rtneq 0x9
+	arg 6,temp 	
+	rtneq 0xa
+	arg 20,temp 	
+	rtneq 0xb
+	arg 21,temp 	
+	rtneq 0xc
+	arg 22,temp 	
+	rtneq 0xd
+	arg 13,temp 	
+	rtn
+
+keyboard_adc_read_start:
+	call keyboard_adc_init
+	call enable_adc
+	call vdd_calculate_by_mode
+	div pdata,10
+	call get_div_result
+	store 2,mem_device_vdd_now_vol
+	arg mem_device_vdd_calculate_set,rega
+	branch mouse_adc_bat_percent_lowpower_out
+	
+keyboard_adc_read:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_ADC
+	call keyboard_adc_read_start
+keyboard_adc_data_process:	
+	fetch 1,mem_adc_power_flag
+	bbit1 1,keyboard_power_down
+	bbit0 0,keyboard_adc_no_low_voltage
+	jam 1,mem_device_adc_last_low_voltage_flag
+	branch keyboard_adc_low_voltage
+
+keyboard_adc_low_voltage:
+	arg KEYBOARD_LOW_VOLTAGE_FLAG,queue
+	branch keyboard_enable_function_flag
+keyboard_adc_no_low_voltage:
+	arg KEYBOARD_LOW_VOLTAGE_FLAG,queue
+	call keyboard_disable_function_flag
+	jam 12,mem_keyboard_adc_low_volatage_led_timer_count
+	fetch 1,mem_device_adc_last_low_voltage_flag
+	rtn blank
+	jam 0,mem_device_adc_last_low_voltage_flag
+	branch keyboard_low_voltage_led_off
+
+keyboard_adc_gpio_set_before_hibernate:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_ADC
+	branch mouse_adc_gpio_set_before_hibernate+2
+
+keyboard_low_voltage_param_set:
+	fetch 6,mem_keyboard_vdd_full_vol
+	store 6,mem_device_vdd_full_vol
+	fetch 1,mem_device_adc_last_low_voltage_flag
+	branch keyboard_low_voltage_param_reset,blank
+	fetch 2,mem_keyboard_vdd_low_vol
+	increase 5,pdata
+	store 2,mem_device_vdd_low_vol
+	rtn	
+keyboard_low_voltage_param_reset:
+	fetch 2,mem_keyboard_vdd_low_vol
+	store 2,mem_device_vdd_low_vol
+	rtn	
+	
+keyboard_low_vol_mult_set:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_low_vol_mult_ble_set
+	call g24_interval_param_8ms
+	setarg 0x5d4800
+	store 4,mem_24g_long_sleep_set1
+	fetch 1,mem_adc_power_flag
+	rtnbit0 0
+	branch mouse_24g_long_sleep_set
+keyboard_low_vol_mult_ble_set:
+	setarg 160			// 320ms
+	call keyboard_mult_auto_get
+	fetch 1,mem_adc_power_flag
+	rtnbit0 0
+	setarg 80			// 100ms
+	branch keyboard_mult_auto_get
+
+keyboard_mult_auto_get:
+	fetcht 2,mem_le_interval_min
+	idiv temp
+	call get_div_result
+	store 1,mem_lpm_mult_init	
+	fetch 1,mem_mouse_current_mult_timer
+	branch mouse_current_mult_reinit,blank
+	rtn
+
+
+////////////////////////////////////////////////////adc end///////////////////////////////////////////////
+
+///////////////////////////////////////////////////led///////////////////////////////////////////////////////
+keyboard_low_voltage_led_timer:
+	jam 0,mem_keyboard_low_volatage_led_blink_new_data_enable
+	fetch 2,mem_device_discovery_timer
+	nrtn blank
+	fetch 2,mem_24g_pair_timeout
+	nrtn blank
+	fetch 2,mem_24g_reconn_timeout
+	nrtn blank
+	fetch 1,mem_keyboard_device_poweron_timer
+	nrtn blank
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_ADC
+	rtnbit0 KEYBOARD_ENABLE_LOW_LED
+	rtnbit0 KEYBOARD_LOW_VOLTAGE_FLAG
+	bbit1 KEYBOARD_ENABLE_LOW_VOLTAGE_LED_BLINK_N_SECOND,keyboard_low_voltage_led_blink_new_data
+	bpatch patch08_5,mem_patch08
+	fetch 1,mem_keyboard_adc_low_volatage_led_timer_count
+	increase 1,pdata
+	store 1,mem_keyboard_adc_low_volatage_led_timer_count
+	sub pdata,20,null
+	ncall keyboard_adc_low_volatage_led_timer_count_clean,positive
+	beq 2,keyboard_low_voltage_led_on
+	beq 4,keyboard_low_voltage_led_off
+	beq 6,keyboard_low_voltage_led_on
+	beq 8,keyboard_low_voltage_led_off
+	rtn
+keyboard_adc_low_volatage_led_timer_count_clean:
+	jam 1,mem_keyboard_adc_low_volatage_led_timer_count
+	branch keyboard_low_voltage_led_off
+	
+keyboard_low_voltage_led_blink_new_data:
+	fetch 2,mem_device_no_data_timeout
+	fetcht 2,mem_device_no_data_timer
+	isub temp,temp
+	fetch 2,mem_adc_low_volatage_led_blink_timer
+	isub temp,null
+	nbranch keyboard_low_voltage_led_off,positive
+	jam 1,mem_keyboard_low_volatage_led_blink_new_data_enable
+	fetch 1,mem_keyboard_low_volatage_led_flag
+	increase 1,pdata
+	store 1,mem_keyboard_low_volatage_led_flag
+	fetcht 1,mem_keyboard_low_volatage_led_blink_count
+	increase 1,temp
+	isub temp,null
+	nbranch keyboard_low_voltage_led_on,positive
+	call keyboard_low_voltage_led_off
+	fetch 1,mem_keyboard_low_volatage_led_flag
+	fetcht 1,mem_keyboard_low_volatage_led_blink_count
+	mul32 temp,2,temp
+	isub temp,null
+	nrtn zero
+	jam 0,mem_keyboard_low_volatage_led_flag
+	rtn
+
+
+keyboard_device_poweron_timer:
+	fetch 1,mem_keyboard_device_poweron_timer
+	rtn blank
+	increase -1,pdata
+	store 1,mem_keyboard_device_poweron_timer
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit1 KEYBOARD_ENABLE_030_POWER_LED,keyboard_device_poweron_030_led
+	branch keyboard_device_led_off,blank
+	branch keyboard_device_led_on
+
+keyboard_device_poweron_030_led:
+	branch keyboard_power_led_off,blank
+keyboard_power_led_on:
+	fetcht 1,mem_keyboard_power_led_gpio
+	branch gpio_out_active
+keyboard_power_led_off:
+	fetcht 1,mem_keyboard_power_led_gpio
+	branch gpio_out_inactive
+
+keyboard_mode_led_timer:
+	fetch 2,mem_device_no_data_timer
+	rtn blank
+	fetch 1,mem_keyboard_mode_led_on_timer
+	rtn blank
+	increase -1,pdata
+	store 1,mem_keyboard_mode_led_on_timer
+	bbit1 0,keyboard_device_led_on
+	branch keyboard_device_led_off
+
+
+keyboard_device_pair_led_timer:
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,keyboard_device_24g_pair_led
+	fetch 2,mem_device_discovery_timer
+	rtn blank
+	branch keyboard_device_pair_led
+
+keyboard_device_24g_pair_led:
+	fetch 2,mem_24g_pair_timeout
+	rtn blank
+keyboard_device_pair_led:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	isolate0 KEYBOARD_ENABLE_030_POWER_LED,pdata
+	call keyboard_device_clear_power_timer,true
+	fetch 1,mem_keyboard_pair_led_flag
+	increase 1,pdata
+	store 1,mem_keyboard_pair_led_flag
+	fetcht 1,mem_keyboard_pair_led_blink_count
+	increase 1,temp
+	isub temp,null
+	nbranch keyboard_device_led_on,positive
+	call keyboard_device_led_off
+	fetch 1,mem_keyboard_pair_led_flag
+	fetcht 1,mem_keyboard_pair_led_blink_count
+	mul32 temp,2,temp
+	isub temp,null
+	nrtn zero
+	jam 0,mem_keyboard_pair_led_flag
+	rtn
+
+keyboard_device_clear_power_timer:
+	jam 0,mem_keyboard_device_poweron_timer
+	rtn
+
+keyboard_device_led_all_off:
+	bpatch patch08_6,mem_patch08
+	call keyboard_power_led_off	
+	call keyboard_device_led_off
+	call keyboard_numlock_led_off
+	branch keyboard_capslock_led_off
+
+keyboard_device_led_off:
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,keyboard_device_24g_led_off
+	beq MODE_BT_DEVICE1,keyboard_device_bt1_led_off
+	beq MODE_BT_DEVICE2,keyboard_device_bt2_led_off
+	beq MODE_BT_DEVICE3,keyboard_device_bt3_led_off
+	rtn
+
+keyboard_device_led_on:
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,keyboard_device_24g_led_on
+	beq MODE_BT_DEVICE1,keyboard_device_bt1_led_on
+	beq MODE_BT_DEVICE2,keyboard_device_bt2_led_on
+	beq MODE_BT_DEVICE3,keyboard_device_bt3_led_on
+	rtn	
+	
+keyboard_device_24g_led_off:
+	fetcht 1,mem_keyboard_24g_led_gpio
+	branch gpio_out_inactive
+
+keyboard_device_bt1_led_off:
+	fetcht 1,mem_keyboard_bt1_led_gpio
+	branch gpio_out_inactive
+	
+keyboard_device_bt2_led_off:
+	fetcht 1,mem_keyboard_bt2_led_gpio
+	branch gpio_out_inactive
+	
+keyboard_device_bt3_led_off:
+	fetcht 1,mem_keyboard_bt3_led_gpio
+	branch gpio_out_inactive	
+
+keyboard_device_24g_led_on:
+	fetcht 1,mem_keyboard_24g_led_gpio
+	branch gpio_out_active
+
+keyboard_device_bt1_led_on:
+	fetcht 1,mem_keyboard_bt1_led_gpio
+	branch gpio_out_active
+	
+keyboard_device_bt2_led_on:
+	fetcht 1,mem_keyboard_bt2_led_gpio
+	branch gpio_out_active
+	
+keyboard_device_bt3_led_on:
+	fetcht 1,mem_keyboard_bt3_led_gpio
+	branch gpio_out_active
+	
+keyboard_low_voltage_led_on:
+	fetcht 1,mem_keyboard_low_voltage_alarm_gpio
+	branch gpio_out_active
+	
+keyboard_low_voltage_led_off:
+	fetcht 1,mem_keyboard_low_voltage_alarm_gpio
+	branch gpio_out_inactive	
+
+
+keyboard_num_capslock_led_on_timer:
+	fetch 1,mem_usb_vdd_status_current
+	beq USB_INTERFACE_INSERT,keyboard_usb_led_check
+	fetch 2,mem_device_no_data_timer
+	rtn blank
+	fetch 2,mem_device_no_data_timeout
+	fetcht 2,mem_device_no_data_timer
+	isub temp,temp
+	fetch 2,mem_keyboard_num_caps_scoll_led_on_timer
+	isub temp,pdata
+	branch keyboard_num_cap_scoll_led_check,positive
+	call keyboard_numlock_led_off
+	call keyboard_scrolllock_led_off
+	branch keyboard_capslock_led_off
+
+keyboard_usb_led_check:
+	fetch 1,mem_24g_led_status
+	store 1,mem_keyboard_led_status
+	branch keyboard_num_cap_scoll_led_check
+	
+keyboard_num_cap_scoll_led_check:
+	call keyboard_numlock_led_check_on
+	call keyboard_scrolllock_led_check_on
+	branch keyboard_capslock_led_check_on
+
+keyboard_numlock_led_check_on:
+	fetch 1,mem_keyboard_led_status
+	bbit0 KB_PC_KEYSEL_NUMLOCK,keyboard_numlock_led_off
+keyboard_numlock_led_on:	
+	fetcht 1,mem_keyboard_num_led_gpio
+	branch gpio_out_active
+keyboard_numlock_led_off:
+	fetcht 1,mem_keyboard_num_led_gpio
+	branch gpio_out_inactive
+
+keyboard_capslock_led_check_on:
+	fetch 1,mem_keyboard_led_status
+	bbit0 KB_PC_KEYSEL_CAPSLOCK,keyboard_capslock_led_off
+	fetcht 1,mem_keyboard_caps_led_gpio
+	branch gpio_out_active
+keyboard_capslock_led_off:
+	fetcht 1,mem_keyboard_caps_led_gpio
+	branch gpio_out_inactive
+
+keyboard_scrolllock_led_check_on:
+	fetch 1,mem_keyboard_led_status
+	bbit0 KB_PC_KEYSEL_SCROLLLOCK,keyboard_scrolllock_led_off
+	fetcht 1,mem_keyboard_scroll_led_gpio
+	branch gpio_out_active
+keyboard_scrolllock_led_off:
+	fetcht 1,mem_keyboard_scroll_led_gpio
+	branch gpio_out_inactive
+
+keyboard_rgb_on_timer:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_BACKLIGHT
+	fetch 2,mem_device_no_data_timer
+	rtn blank
+	fetch 2,mem_device_no_data_timeout
+	fetcht 2,mem_device_no_data_timer
+	isub temp,temp
+	fetch 2,mem_keyboard_rgb_on_timer
+	isub temp,pdata
+	rtn positive
+	jam 0,mem_backlight_on_flag
+	branch keyboard_rgb_off
+	
+////////////////////////////////////////backlight pwm//////////////////////////////////////////////////////////
+keyboard_pwm_init:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_BACKLIGHT
+	arg 0,rega 	//sys clk 12mhz
+	call pwm_init
+	fetch 6,mem_rgb_pwm_conf
+	store 6,mem_pdatatemp
+	call pwm_out_set
+	fetch 2,mem_rgb_pwm_conf
+	branch pwm_disable
+
+keyboard_rgb_pwm_disable:
+	fetch 1,mem_keyboard_led_r_gpio
+	call pwm_disable
+	fetch 1,mem_keyboard_led_g_gpio
+	call pwm_disable
+	fetch 1,mem_keyboard_led_b_gpio
+	branch pwm_disable
+
+keyboard_rgb_pwm_set:	
+	fetch 6,mem_rgb_pwm_conf
+	store 6,mem_pdatatemp
+	branch pwm_out_set	
+
+keyboard_load_rgb:
+	bpatch patch08_7,mem_patch08
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_BACKLIGHT
+	fetch 1,mem_backlight_on_flag
+	call keyboard_rgb_mode_switch_next
+	fetch 1,mem_backlight_on_type
+	branch keyboard_rgb_on_type_switch_next	
+
+keyboard_rgb_mode_switch:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_BACKLIGHT
+	call keyboard_keyvalue_clear_temp
+	fetch 1,mem_keyboard_press_flag_temp
+	rtnbit0 0
+	fetch 1,mem_keyboard_device_info_store_flag
+	set1 KEYBOARD_STORE_EEPROMM_FLAG_RGB_TYPE,pdata
+	store 1,mem_keyboard_device_info_store_flag	
+	call keyboard_store_eeprom_or_flash
+	jam 0,mem_backlight_breathe_type
+	jam 0,mem_rgb_pwm_breathe_flag
+	jam 10,mem_rgb_pwm_conf+5
+	fetch 1,mem_backlight_on_flag
+	increase 1,pdata
+keyboard_rgb_mode_switch_next:	
+	sub pdata,RGB_BACKLIGHT_STATUS_BREATHE,null
+	ncall set_pdata_0,positive
+	store 1,mem_backlight_on_flag
+	rtn
+	
+keyboard_rgb_on_type_switch:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_BACKLIGHT
+	call keyboard_keyvalue_clear_temp
+	fetch 1,mem_keyboard_press_flag_temp
+	rtnbit0 0
+	fetch 1,mem_backlight_on_flag
+	rtnne RGB_BACKLIGHT_STATUS_ON
+	fetch 1,mem_keyboard_device_info_store_flag
+	set1 KEYBOARD_STORE_EEPROMM_FLAG_RGB_TYPE,pdata
+	store 1,mem_keyboard_device_info_store_flag	
+	call keyboard_store_eeprom_or_flash
+	fetch 1,mem_backlight_on_type
+	increase 1,pdata
+keyboard_rgb_on_type_switch_next:	
+	sub pdata,RGB_BACKLIGHT_ON_TPYE_WHITE,null
+	ncall set_pdata_0,positive
+	store 1,mem_backlight_on_type
+	rtn
+
+keyboard_rgb_process:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_BACKLIGHT
+	fetcht 4,mem_ui_check_timer_setup
+	copy clkn_bt,pdata
+	isub temp,pdata
+	fetcht 2,mem_customize_timer_setup		// * 0.3125ms
+	idiv temp
+	call wait_div_end
+	quotient pdata
+	rtn blank
+	copy clkn_bt,temp
+	storet 4,mem_ui_check_timer_setup
+	fetch 1,mem_backlight_on_flag
+	beq RGB_BACKLIGHT_STATUS_BREATHE,keyboard_rbg_breathe_process
+	beq RGB_BACKLIGHT_STATUS_ON,keyboard_rgb_on_process
+	jam 0,mem_backlight_on_flag
+keyboard_rgb_off:
+	bpatch patch09_0,mem_patch09
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_BACKLIGHT
+	call keyboard_rgb_pwm_disable
+	jam 0,mem_rgb_on_color_temp
+	branch keyboard_rgb_led_control
+
+keyboard_rbg_breathe_process:
+	fetch 1,mem_rgb_pwm_breathe_flag
+	branch keyboard_rbg_breathe_up,blank
+	fetch 1,mem_rgb_pwm_conf+5
+	sub pdata,5,null
+	branch keyboard_rbg_breathe_color_switch,positive
+	increase -1,pdata
+	store 1,mem_rgb_pwm_conf+5
+	branch keyboard_rgb_pwm
+
+keyboard_rbg_breathe_up:
+	fetch 1,mem_rgb_pwm_conf+5
+	increase 1,pdata
+	store 1,mem_rgb_pwm_conf+5
+	call keyboard_rgb_pwm
+	fetch 1,mem_rgb_pwm_conf+5
+	sub pdata,90,null
+	rtn positive
+	jam 1,mem_rgb_pwm_breathe_flag
+	rtn
+
+keyboard_rbg_breathe_color_switch:
+	jam 0,mem_rgb_pwm_breathe_flag
+	fetch 1,mem_backlight_breathe_type
+	increase 1,pdata
+	sub pdata,RGB_BACKLIGHT_BREATHE_TPYE_WHITE,null
+	ncall set_pdata_0,positive
+	store 1,mem_backlight_breathe_type
+	rtn
+
+keyboard_rgb_pwm:
+	call keyboard_pwm_init
+	call keyboard_rgb_off+4
+	branch keyboard_breathe_tpye_select	
+
+keyboard_breathe_tpye_select:
+	fetch 1,mem_backlight_breathe_type
+	beq RGB_BACKLIGHT_BREATHE_TPYE_RED,keyboard_breathe_tpye_red
+	beq RGB_BACKLIGHT_BREATHE_TPYE_GREEN,keyboard_breathe_tpye_green
+	beq RGB_BACKLIGHT_BREATHE_TPYE_BLUE,keyboard_breathe_tpye_blue
+	beq RGB_BACKLIGHT_BREATHE_TPYE_CYAN,keyboard_breathe_tpye_cyan
+	beq RGB_BACKLIGHT_BREATHE_TPYE_ORANGE,keyboard_breathe_tpye_orange
+	beq RGB_BACKLIGHT_BREATHE_TPYE_PURPLE,keyboard_breathe_tpye_purple
+	beq RGB_BACKLIGHT_BREATHE_TPYE_WHITE,keyboard_breathe_tpye_white
+keyboard_breathe_tpye_red:
+	fetch 1,mem_keyboard_led_r_gpio
+	store 1,mem_rgb_pwm_conf
+	setarg 0x01
+	store 1,mem_rgb_pwm_conf+1
+	branch keyboard_rgb_pwm_set
+
+keyboard_breathe_tpye_green:
+	fetch 1,mem_keyboard_led_g_gpio
+	store 1,mem_rgb_pwm_conf
+	setarg 0x02
+	store 1,mem_rgb_pwm_conf+1
+	branch keyboard_rgb_pwm_set
+
+keyboard_breathe_tpye_blue:
+	fetch 1,mem_keyboard_led_b_gpio
+	store 1,mem_rgb_pwm_conf
+	setarg 0x04
+	store 1,mem_rgb_pwm_conf+1
+	branch keyboard_rgb_pwm_set
+
+keyboard_breathe_tpye_cyan:
+	call keyboard_breathe_tpye_green
+	branch keyboard_breathe_tpye_blue
+
+keyboard_breathe_tpye_orange:
+	call keyboard_breathe_tpye_red
+	branch keyboard_breathe_tpye_green
+	
+keyboard_breathe_tpye_purple:
+	call keyboard_breathe_tpye_red
+	branch keyboard_breathe_tpye_blue
+
+keyboard_breathe_tpye_white:
+	call keyboard_breathe_tpye_red
+	call keyboard_breathe_tpye_green
+	branch keyboard_breathe_tpye_blue
+
+keyboard_rgb_on_process:
+	call keyboard_rgb_pwm_disable
+	fetch 1,mem_backlight_on_type
+	sub pdata,RGB_BACKLIGHT_ON_TPYE_WHITE,null
+	ncall set_pdata_0,positive
+	store 1,mem_backlight_on_type
+	arg mem_rgb_on_color,contr
+	iadd contr,contr
+	ifetch 1,contr
+	store 1,mem_rgb_on_color_temp
+	branch keyboard_rgb_led_control
+
+
+keyboard_rgb_led_control:
+	fetch 1,mem_rgb_on_color_temp
+	isolate1 KEYBOARD_RGB_RED_STATUS,pdata
+	call keyboard_rgb_red_led_on,true
+	ncall keyboard_rgb_red_led_off,true
+	fetch 1,mem_rgb_on_color_temp
+	isolate1 KEYBOARD_RGB_GREEN_STATUS,pdata
+	call keyboard_rgb_green_led_on,true
+	ncall keyboard_rgb_green_led_off,true
+	fetch 1,mem_rgb_on_color_temp
+	isolate1 KEYBOARD_RGB_BLUE_STATUS,pdata
+	call keyboard_rgb_blue_led_on,true
+	ncall keyboard_rgb_blue_led_off,true
+	rtn
+	
+keyboard_rgb_red_led_on:
+	fetcht 1,mem_keyboard_led_r_gpio
+	branch gpio_out_inactive
+
+keyboard_rgb_red_led_off:
+	fetcht 1,mem_keyboard_led_r_gpio
+	branch gpio_out_active
+
+keyboard_rgb_green_led_on:
+	fetcht 1,mem_keyboard_led_g_gpio
+	branch gpio_out_inactive
+
+keyboard_rgb_green_led_off:
+	fetcht 1,mem_keyboard_led_g_gpio
+	branch gpio_out_active
+
+keyboard_rgb_blue_led_on:
+	fetcht 1,mem_keyboard_led_b_gpio
+	branch gpio_out_inactive
+
+keyboard_rgb_blue_led_off:
+	fetcht 1,mem_keyboard_led_b_gpio
+	branch gpio_out_active	
+
+////////////////////////////////////////////////////led end////////////////////////////////////////////////////////
+
+///////////////////////////event timer///////////////////////////////////////////////////////////////////////////
+keyboard_key_press_timer:
+	fetch 1,mem_keyboard_switch_device_flag
+	bbit1 KEYBOARD_FLAG_G24_DEVICE_BUTTON,keyboard_device_select_g24_press_timer
+	call keyboard_device_select_g24_nopress_timer
+	fetch 1,mem_keyboard_switch_device_flag
+	bbit1 KEYBOARD_FLAG_BT_DEVICE_BUTTON,keyboard_device_select_bt_press_timer
+	branch keyboard_device_select_bt_nopress_timer
+
+keyboard_device_select_g24_press_timer:
+	fetch 1,mem_keyboard_switch_g24_press_timer
+	sub pdata,100,null
+	nrtn positive
+	increase 1,pdata
+	store 1,mem_keyboard_switch_g24_press_timer
+	rtnne 25
+	jam 0,mem_keyboard_switch_g24_enable
+	fetch 1,mem_device_flag
+	rtneq MODE_USB_DEVICE
+	call keyboard_stop_bluetooth_mode
+	branch keyboard_24g_start_pair_mode
+
+keyboard_device_select_g24_nopress_timer:
+	jam 0,mem_keyboard_switch_g24_press_timer
+	fetch 1,mem_keyboard_switch_g24_enable
+	rtn blank
+	jam 0,mem_keyboard_switch_g24_enable
+	call keyboard_store_device_number
+	branch soft_reset_chip
+
+keyboard_device_select_bt_press_timer:
+	fetch 1,mem_keyboard_switch_bt_press_timer
+	sub pdata,100,null
+	nrtn positive
+	increase 1,pdata
+	store 1,mem_keyboard_switch_bt_press_timer
+	rtnne 25
+	jam 0,mem_keyboard_switch_bt_enable
+	fetch 1,mem_device_flag
+	rtneq MODE_USB_DEVICE
+	call hid_device_le_send_empty_packet
+	branch keyboard_long_button_bt_discovery
+
+keyboard_device_select_bt_nopress_timer:
+	jam 0,mem_keyboard_switch_bt_press_timer
+	fetch 1,mem_keyboard_switch_bt_enable
+	rtn blank
+	jam 0,mem_keyboard_switch_bt_enable
+	call keyboard_store_device_number
+	branch soft_reset_chip
+
+keyboard_commbination_key_process:
+	fetch 1,mem_commbination_key_statue
+	rtnne COMMBINATION_KEY_STATE_DOWN	
+	arg mem_combination_ui_button_count,regc
+	arg keyboard_commbination_key_press_type_check,regb
+	branch timer_single_step
+
+keyboard_commbination_key_press_type_check:
+	fetch 1,mem_keyboard_commbination_press_type
+	beq KEYBOARD_COMMBINATION_PRESS_TYPE_24G_PAIR,keyboard_24g_start_pair_mode
+	beq KEYBOARD_COMMBINATION_PRESS_TYPE_BT_PAIR,keyboard_long_button_bt_discovery
+	beq KEYBOARD_COMMBINATION_PRESS_TYPE_BT_FAST_CONN,mouse_bluetooth_fast_conn_init
+	rtn
+
+
+keyboard_check_discovery_timeout_timer:
+	arg mem_device_discovery_timer,regc
+	arg keyboard_check_discovery_timeout,regb
+	branch timer_single_step_2B
+
+keyboard_check_discovery_timeout:
+	call keyboard_stop_discovery
+	branch keyboard_power_down	
+
+keyboard_store_information_delay_timer:
+	arg mem_store_information_delay_timer,regc
+	arg keyboard_store_device_info,regb
+	branch timer_single_step
+	
+keyboard_le_auto_recognize_timer:
+	arg mem_le_start_auto_reco_timer,regc
+	arg keyboard_le_send_att_find_by_type_value_request_ancs,regb
+	branch timer_single_step
+
+keyboard_check_direct_timeout_timer:	
+	arg mem_device_direct_timer,regc
+	arg keyboard_check_direct_timeout,regb
+	call timer_single_step
+	fetch 1,mem_device_direct_timer
+	beq 1,app_ble_stop_direct_adv
+	rtn
+
+keyboard_check_direct_timeout:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit1 KEYBOARD_ENABLE_BT_RECONNECT_TIMEOUT_ENTER_DISCOVERY,keyboard_start_discovery
+	branch mouse_app_enter_hibernate
+
+
+keyboard_le_battery_updata_timer:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit1 KEYBOARD_ENABLE_LE_BATTERY_SERVICE_CANCEL
+	arg mem_le_battery_level_updata_timer,regc
+	arg mouse_le_battery_level_updata,regb
+	branch timer_single_step
+
+keyboard_le_send_conn_param_update_timer:
+	arg mem_keyboard_le_send_conn_param_update_timer,regc
+	arg mouse_updata_le_param,regb
+	branch timer_single_step
+
+keyboard_24g_repeat_send_data:
+	fetch 1,mem_24g_repeat_send_flag
+	rtn blank
+	jam 0,mem_24g_repeat_send_flag
+	fetch 1,mem_same_keyvalue_timerout_flag
+	nrtn blank
+	fetch 2,mem_24g_pair_timeout
+	nrtn blank
+	jam 1,mem_keyboard_data_change_flag
+	call g24_txdata_prep
+	branch keyboard_g24_transmit_process
+
+keyboard_24g_led_status_get_timer:
+	arg mem_keyboard_led_status_get_timer,regc
+	arg keyboard_24g_led_status_clear,regb
+	branch timer_single_step
+
+keyboard_24g_led_status_clear:
+	jam 0,mem_keyboard_led_status_get
+	rtn
+
+
+keyboard_same_key_long_press_timer:
+	arg mem_same_keyvalue_timer,regc
+	arg keyboard_long_press_timerout,regb
+	branch timer_single_step_2B
+
+keyboard_long_press_timerout:
+	jam 1,mem_same_keyvalue_timerout_flag	
+	branch keyboard_power_down
+
+keyboard_commbination_delay_release_timer:	
+	arg mem_keyboard_commbination_control_key_delay_release_timer,regc
+	arg keyboard_commbination_key_null_set,regb
+	branch timer_single_step
+
+keyboard_usb_updata_timer:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_USB
+	fetch 1,mem_usb_wait_updata_timer
+	rtn blank
+	increase -1,pdata
+	store 1,mem_usb_wait_updata_timer
+	nrtn blank
+	jam 1,mem_lpm_mode
+	branch keyboard_power_down
+
+keyboard_check_no_data_timeout_timer:
+	fetch 1,mem_usb_vdd_status_current
+	rtneq USB_INTERFACE_INSERT
+	arg mem_device_no_data_timer,regc
+	arg keyboard_check_no_data_timeout,regb
+	branch timer_single_step_2B
+
+keyboard_check_no_data_timeout:
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,keyboard_24g_hibernate_set
+	branch mouse_disconnect
+	
+/////////////////////////////////////keyboard process///////////////////////////////////////////////////////////////////////////////
+keyboard_idle:
+	bpatch patch09_1,mem_patch09
+	call kscan_dispatch
+	call keyboard_rgb_process
+	call keyboard_usb_isr
+	call keyboard_usb_mode
+	branch keyboard_check_select_device_by_switch
+
+keyboard_check_select_device_by_switch:
+	bpatch patch09_2,mem_patch09
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO
+	bbit1 KEYBOARD_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO_G24_CONNECT_VDD,keyboard_check_select_device_by_switch_vdd_check
+	bbit1 KEYBOARD_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO_BT_CONNECT_VDD,keyboard_check_select_device_by_switch_vdd_check
+	fetcht 1,mem_device_switch_gpio
+	call device_gpio_config_input_pu
+	fetcht 1,mem_device_switch_gpio
+	call gpio_get_bit
+	branch keyboard_check_select_device_by_switch_gnd,true
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit1 KEYBOARD_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO_G24_CONNECT_GND,keyboard_select_btdevice
+	branch keyboard_check_select_24g_device
+
+keyboard_check_select_device_by_switch_vdd_check:
+	fetcht 1,mem_device_switch_gpio
+	call device_gpio_config_input_pd
+	fetcht 1,mem_device_switch_gpio
+	call gpio_get_bit
+	nbranch keyboard_check_select_device_by_switch_vdd,true
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit1 KEYBOARD_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO_G24_CONNECT_VDD,keyboard_select_btdevice
+	branch keyboard_check_select_24g_device
+
+keyboard_check_select_device_by_switch_vdd:
+	fetcht 1,mem_device_switch_gpio
+	call device_gpio_config_input_pu
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit1 KEYBOARD_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO_G24_CONNECT_VDD,keyboard_check_select_24g_device
+	branch keyboard_select_btdevice
+
+keyboard_check_select_device_by_switch_gnd:
+	fetcht 1,mem_device_switch_gpio
+	call device_gpio_config_input_pd
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit1 KEYBOARD_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO_G24_CONNECT_GND,keyboard_check_select_24g_device
+	branch keyboard_select_btdevice
+
+keyboard_select_btdevice:
+	fetch 1,mem_device_flag
+	rtneq MODE_BT_DEVICE1
+	jam MODE_BT_DEVICE1,mem_device_flag
+	fetch 1,mem_keyboard_switch_count_temp
+	nbranch soft_reset_chip,blank
+	branch keyboard_stop_bluetooth_mode
+keyboard_check_select_24g_device:	
+	fetch 1,mem_device_flag
+	rtneq MODE_24G_DEVICE
+	jam MODE_24G_DEVICE,mem_device_flag
+	fetch 1,mem_keyboard_switch_count_temp
+	nbranch soft_reset_chip,blank
+	branch keyboard_24g_stop
+
+keyboard_start_work:
+	bpatch patch09_3,mem_patch09
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit0 KEYBOARD_ENABLE_ADC,keyboard_start_work_next
+	call keyboard_adc_read_start
+	fetch 2,mem_device_vdd_empty_vol
+	div pdata,2
+	call get_div_result
+	fetcht 2,mem_device_vdd_now_vol
+	isub temp,null
+	branch keyboard_start_work,positive 	// now vol < empty vol/2  check again
+	fetch 1,mem_adc_power_flag
+	bbit1 1,keyboard_power_down	
+keyboard_start_work_next:
+	fetch 1,mem_keyboard_pairing_type
+	call keyboard_enable_bt_button_pairing,blank
+	fetch 1,mem_keyboard_bt_button_flag
+	nrtn blank
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,keyboard_24g_start_mode
+	call mouse_bluetooth_fast_conn_disable
+	beq MODE_BT_DEVICE1,keyboard_start_ble1_reconnect
+	beq MODE_BT_DEVICE2,keyboard_start_ble2_reconnect
+	beq MODE_BT_DEVICE3,keyboard_start_ble3_reconnect
+keyboard_start_ble1_reconnect:	
+	fetch 6,mem_device1_addr
+keyboard_start_ble_reconnect:	
+	fetcht 6,mem_device_compare_addr
+	isub temp,null
+	branch mouse_bluetooth_fast_conn_init,zero
+	branch mouse_start_reconnect_device
+
+keyboard_start_ble2_reconnect:
+	fetch 6,mem_device2_addr
+	branch keyboard_start_ble_reconnect
+
+keyboard_start_ble3_reconnect:
+	fetch 6,mem_device3_addr
+	branch keyboard_start_ble_reconnect
+
+keyboard_24g_start_mode:
+	call keyboard_wakeup_from_power_check	// wake from hibernate :enble user
+	branch mouse_24g_reconn_dongle_start,user
+	branch mouse_24g_reconn_general_dongle
+
+/***********************************kscan and value process***********************************************/
+kscan_dispatch:
+	bpatch patch09_4,mem_patch09
+	call keyboard_keyscan
+	call keyboard_key_process
+	branch keyboard_special_key_check
+
+keyboard_keyscan:
+	call keyboard_gpio_init
+	call keyboard_stb_state_low							// exmcu wake up
+	setarg 0
+	store 2,mem_keyscan_exmcu_wait_wake_count
+	arg mem_keyscan_value_current,contr
+	arg mem_keyscan_value_check,contw
+	arg 20,loopcnt
+	call memcpy
+	setarg mem_keyscan_value_current
+	store 2,mem_keyscan_value_ptr
+	setarg mem_keyscan_exmcu_value
+	store 2,mem_keyscan_exmcu_value_ptr
+	call keyboard_stb_state_high	
+	call keyboard_clk_input
+keyboard_keyscan_exmcu_start_check:
+	fetch 2,mem_keyscan_exmcu_wait_wake_count
+	increase 1,pdata
+	store 2,mem_keyscan_exmcu_wait_wake_count
+	bbit1 9,keyboard_keyscan 								// 953us restart
+	fetcht 1,mem_mcu_clk_gpio							// waiting for exmcu wake done
+	call gpio_get_bit
+	nbranch keyboard_keyscan_exmcu_start_check,true
+	call keyboard_stb_state_low
+keyboard_keyscan_wait_wake_next:	
+	fetcht 1,mem_mcu_clk_gpio							// waiting for exmcu clk done
+	call gpio_get_bit
+	branch keyboard_keyscan_wait_wake_next,true	
+	
+	call keyboard_keyscan_get_exmcu_value
+	call keyboard_keyscan_get_mcu_value
+	call keyboard_clk_input
+	call keyboard_stb_state_high							// exmcu sleep
+keyboard_keyscan_copy_value:
+	fetch 2,mem_kb_excol_ptr
+	copy pdata,regb
+	jam 0,mem_keyscan_col_loop_count
+keyboard_compare_col_excol_gpio_loop:		// loop 12 times
+	ifetcht 1,regb
+	fetch 2,mem_kb_col_ptr
+	copy pdata,rega
+	copy rega,regc
+	arg 20,loopcnt
+keyboard_compare_col_gpio_loop:
+	ifetch 1,rega
+	isub temp,null
+	branch keyboard_copy_value_exmcu_to_mcu,zero
+	increase 1,rega
+	loop keyboard_compare_col_gpio_loop
+keyboard_compare_col_excol_gpio_loop_next:	
+	increase 1,regb
+	fetch 1,mem_keyscan_col_loop_count
+	increase 1,pdata
+	store 1,mem_keyscan_col_loop_count
+	sub pdata,11,null
+	branch keyboard_compare_col_excol_gpio_loop,positive
+	call keyboard_gpio_pu_idle
+	branch keyboard_key_row_init
+	
+keyboard_copy_value_exmcu_to_mcu:
+	fetch 2,mem_keyscan_value_ptr
+	copy pdata,contw
+	copy rega,pdata	
+	isub regc,pdata 
+	iadd contw,contw							// offset = rega-regc
+	fetch 2,mem_keyscan_exmcu_value_ptr
+	copy pdata,regc
+	fetch 1,mem_keyscan_col_loop_count
+	iadd regc,regc	
+	ifetch 1, regc								// offset = mem_keyscan_col_loop_count
+	istore 1,contw
+	branch keyboard_compare_col_excol_gpio_loop_next
+	
+keyboard_keyscan_get_exmcu_value:	//	8*12 times
+	jam 0,mem_keyscan_col_loop_count
+keyboard_keyscan_exmcu_start_loop:	// clk:0 1 0 1 0 1 0 1 0 1 0 1
+	call keyboard_clk_state_low
+	call keyboard_keyscan_exmcu_get_col_value
+	call keyboard_clk_state_high
+	call keyboard_keyscan_exmcu_get_col_value
+	sub pdata,11,null
+	branch keyboard_keyscan_exmcu_start_loop,positive
+	branch keyboard_clk_state_low
+	
+	
+keyboard_keyscan_exmcu_get_col_value:
+	jam 0,mem_keyscan_value_temp
+	call keyboard_keyscan_get_col_value
+	fetch 2,mem_keyscan_exmcu_value_ptr
+keyboard_keyscan_value_store:
+	copy  pdata,contw
+	fetch 1,mem_keyscan_col_loop_count
+	iadd contw,contw
+	fetch 1,mem_keyscan_value_temp
+	istore 1,contw
+	fetch 1,mem_keyscan_col_loop_count
+	increase 1,pdata
+	store 1,mem_keyscan_col_loop_count
+	rtn	
+
+	
+keyboard_keyscan_get_mcu_value: 
+	fetch 2,mem_kb_col_ptr
+	copy pdata,regb
+	jam 0,mem_keyscan_col_loop_count
+keyboard_keyscan_mcu_start:		// loop 20 times
+	jam 0,mem_keyscan_value_temp
+	ifetcht 1,regb
+	isolate1 7,temp								// exmcu gpio
+	branch keyboard_keyscan_mcu_start_loop,true	
+	call gpio_out_active
+	call keyboard_keyscan_get_col_value
+	ifetcht 1,regb
+	call gpio_out_inactive
+	ifetcht 1,regb
+	call device_gpio_config_input_pu
+keyboard_keyscan_mcu_start_loop:
+	increase 1,regb
+	fetch 2,mem_keyscan_value_ptr	
+	call keyboard_keyscan_value_store
+	sub pdata,19,null						//sub pdata,19,null
+	branch keyboard_keyscan_mcu_start,positive
+	rtn	
+
+	
+keyboard_keyscan_get_col_value:
+	bpatch patch09_5,mem_patch09
+	nop 120
+	fetch 2,mem_kb_row_ptr
+	copy pdata,regc
+	arg 8,loopcnt
+keyboard_keyscan_get_col_value_loop:		// loop 8 times
+	ifetcht 1,regc
+	call gpio_get_bit
+	fetch 1,mem_keyscan_value_temp
+	rshift pdata,pdata
+	setflag true,7,pdata
+	store 1,mem_keyscan_value_temp
+	increase 1,regc
+	loop keyboard_keyscan_get_col_value_loop
+	rtn
+
+keyboard_clk_state_high:
+	fetcht 1,mem_mcu_clk_gpio
+	branch gpio_out_inactive
+
+keyboard_clk_state_low:
+	fetcht 1,mem_mcu_clk_gpio
+	branch gpio_out_active
+
+keyboard_clk_input:
+	fetcht 1,mem_mcu_clk_gpio
+	branch gpio_config_input
+	
+keyboard_stb_state_high:
+	fetcht 1,mem_mcu_stb_gpio
+	branch gpio_out_inactive
+
+keyboard_stb_state_low:
+	fetcht 1,mem_mcu_stb_gpio
+	branch gpio_out_active
+/***********************************kscan process***********************************************/
+
+
+/**********************************key value process*******************************/
+// same key press check	
+keyboard_press_change_or_no_key:
+	jam 0,mem_same_keyvalue_timerout_flag
+	fetch 2,mem_same_keyvalue_timer_init
+	store 2,mem_same_keyvalue_timer
+	rtn
+
+keyboard_key_process:
+	// key deshake
+	arg mem_keyscan_value_current,rega
+	arg mem_keyscan_value_check,regb
+	arg 20,loopcnt
+	call string_compare
+	nbranch keyboard_press_change_or_no_key,zero	
+	call keyboard_keyscan_value_current_zero_check
+	call keyboard_press_change_or_no_key,blank
+
+	call keyboard_ghost_key_check
+	fetch 1,mem_keyboard_ghost_flag
+	nrtn blank
+	fetch 1,mem_keyboard_commbination_key_step
+	rtneq CAMMBINATION_KEY_PRESS
+	rtneq CAMMBINATION_KEY_HOLD
+	rtneq CAMMBINATION_KEY_WAIT_RELEASE
+
+	// keyvalue get from map,and in or out process
+	jam 0,mem_keyscan_col_loop_count
+	arg mem_keyscan_value_current,rega
+	arg mem_keyscan_value_old,regb
+keyboard_keyvalue_process:		// loop 20 times
+	ifetcht 1,rega
+	ifetch 1,regb
+	ixor  temp,pdata
+	branch keyboard_keyvalue_process_loop,blank
+	store 1,mem_keyscan_value_temp
+	storet 1,mem_keyboard_press_flag_temp
+	istoret 1,regb
+	jam 1,mem_keyboard_data_change_flag
+	jam 0,mem_keyboard_keyvalue_bit_loop_count
+keyboard_keyvalue_change:			// loop 8 times
+	fetch 1,mem_keyscan_value_temp
+	bbit0 0,keyboard_keyvalue_change_loop
+	fetch 1,mem_keyscan_col_loop_count
+	mul32 pdata,8,pdata
+	fetcht 1,mem_keyboard_keyvalue_bit_loop_count
+	iadd temp,pdata									// map offset
+	arg mem_keyboard_keyvalue_map,contr
+	iadd contr,contr
+	ifetch 1,contr
+	store 1,mem_keyboard_keyvalue_temp				// keyvalue
+	bpatch patch09_6,mem_patch09
+	call keyboard_keyvalue_normal_replace
+	call keyboard_keyvalue_fn_replace
+	call keyboard_keyvalue_commbination_replace
+	call keyboard_keyvalue_in_out
+keyboard_keyvalue_change_loop:
+	fetch 1,mem_keyscan_value_temp
+	rshift pdata,pdata
+	store 1,mem_keyscan_value_temp
+	fetch 1,mem_keyboard_press_flag_temp
+	rshift pdata,pdata
+	store 1,mem_keyboard_press_flag_temp
+	fetch 1,mem_keyboard_keyvalue_bit_loop_count
+	increase 1,pdata
+	store 1,mem_keyboard_keyvalue_bit_loop_count
+	sub pdata,7,null
+	branch keyboard_keyvalue_change,positive
+keyboard_keyvalue_process_loop:
+	increase 1,rega
+	increase 1,regb	
+	fetch 1,mem_keyscan_col_loop_count
+	increase 1,pdata
+	store 1,mem_keyscan_col_loop_count
+	sub pdata,19,null
+	branch keyboard_keyvalue_process,positive
+	rtn
+
+keyboard_keyscan_value_current_zero_check:
+	fetch 8,mem_keyscan_value_current
+	nbranch keyboard_load_rgb,blank
+	fetch 8,mem_keyscan_value_current+8
+	nbranch keyboard_load_rgb,blank
+	fetch 4,mem_keyscan_value_current+16
+	nbranch keyboard_load_rgb,blank
+
+	fetch 1,mem_keyboard_commbination_control_key_delay_release_timer
+	nrtn blank
+	fetch 1,mem_keyboard_commbination_key_step
+	rtneq CAMMBINATION_KEY_NULL
+	jam CAMMBINATION_KEY_FREE,mem_keyboard_commbination_key_step
+	rtn
+
+/************************************ghost key ******************************************/
+//**input:mem_keyscan_value_current   **output:mem_keyboard_ghost_flag   	mem_keyboard_all_press_key_count
+keyboard_ghost_key_check:	// (col[i] press >= 2) && (row[j] press >=2) && (c[i]_r[j] press) 
+	bpatch patch09_7,mem_patch09
+	jam 0,mem_keyboard_ghost_flag
+	jam 0,mem_keyboard_all_press_key_count
+	arg mem_keyscan_value_current,rega
+	arg 20,loopcnt
+keyboard_ghost_key_check_loop:
+	jam 0,mem_keyboard_current_col_press_key_count
+	ifetch 1,rega
+	branch keyboard_ghost_key_check_next_loop,blank
+keyboard_current_col_press_key_count_check:	
+	fetcht 1,mem_keyboard_current_col_press_key_count
+	increase 1,temp
+	storet 1,mem_keyboard_current_col_press_key_count
+	copy pdata,temp
+	increase -1,pdata
+	iand temp,pdata									// pdata &= pdata -1;  check pdata bit1 count
+	nbranch keyboard_current_col_press_key_count_check,zero
+	fetch 1,mem_keyboard_current_col_press_key_count
+	fetcht 1,mem_keyboard_all_press_key_count
+	iadd temp,temp
+	storet 1,mem_keyboard_all_press_key_count
+	sub pdata,1,null
+	branch keyboard_ghost_key_check_next_loop,positive
+	sub temp,2,null
+	branch keyboard_ghost_key_check_next_loop,positive
+	jam 0,mem_keyscan_col_loop_count					// col[i] press key count >= 2
+	jam 0,mem_keyboard_same_row_press_key_count
+	ifetcht 1,rega
+	arg mem_keyscan_value_current,regb
+keyboard_same_row_key_check:
+	fetch 1,mem_keyscan_col_loop_count
+	increase 1,pdata
+	store 1,mem_keyscan_col_loop_count
+	sub pdata,19,null
+	nbranch keyboard_ghost_key_check_next_loop,positive		// end col[i] row[0~7] check
+	ifetch 1,regb
+	iand temp,null												// col[i] & col[0~19]
+	branch keyboard_same_row_key_check_loop,zero
+	fetch 1,mem_keyboard_same_row_press_key_count		
+	increase 1,pdata
+	store 1,mem_keyboard_same_row_press_key_count
+	sub pdata,1,null
+	branch keyboard_same_row_key_check_loop,positive
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit1 KEYBOARD_ENABLE_FULL_N_KEY_ROLLOVER
+	jam 1,mem_keyboard_ghost_flag
+	rtn	
+	
+keyboard_ghost_key_check_next_loop:
+	increase 1,rega
+	loop keyboard_ghost_key_check_loop
+	rtn
+
+keyboard_same_row_key_check_loop:
+	increase 1,regb
+	branch keyboard_same_row_key_check
+	
+/******************************ghost key*********************************************/
+
+
+
+
+/******************************fn replace*********************************************/
+keyboard_keyvalue_normal_replace:
+	fetch 1,mem_keyboard_keyvalue_temp
+	beq HID_KEY_RIGHT_ALT,keyboard_rgb_on_type_switch
+	beq HID_KEY_RIGHT_GUI,keyboard_rgb_mode_switch
+	fetch 1,mem_kb_computer_system
+	rtneq SYSTEM_OS_WINDOWS
+	rtneq SYSTEM_OS_ANDROID
+	rtn
+
+keyboard_keyvalue_fn_replace:
+	fetch 1,mem_keyboard_press_flag_temp
+	isolate1 0,pdata
+	call keyboard_commbination_delay_release_clear,true
+	fetch 1,mem_keyboard_fn_flag
+	ncall keyboard_keyvalue_fn_replace_press,blank
+	fetch 1,mem_device_fast_conn_flag
+	rtneq 0xff
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit0 KEYBOARD_ENABLE_FN_LOCK,keyboard_fn_lock_check
+	fetch 1,mem_keyboard_fn_lock_flag
+	branch keyboard_fn_lock_check+1
+keyboard_fn_lock_check:
+	fetch 1,mem_keyboard_fn_first
+	fetcht 1,mem_keyboard_fn_flag
+	ixor temp,pdata
+	rtn zero
+	bpatch patch0a_0,mem_patch0a
+	fetch 1,mem_keyboard_keyvalue_temp
+	beq HID_KEY_ESC,keyboard_keyvalue_fn_esc
+	beq HID_KEY_DELETE,keyboard_keyvalue_fn_delete
+	sub pdata,HID_KEY_F12,null
+	nrtn positive
+	arg HID_KEY_F1,temp	
+	isub temp,pdata
+	nrtn positive			
+	arg mem_keyboard_fn_f1,contr		//  HID_KEY_F1 <= keyvalue <= HID_KEY_F12
+	iadd contr,contr
+	ifetch 1,contr
+	branch keyboard_keyvalue_store_temp
+
+keyboard_keyvalue_fn_esc:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit0 KEYBOARD_ENABLE_FN_LOCK,keyboard_keyvalue_fn_esc_next
+	fetch 1,mem_keyboard_fn_esc
+	fetcht 1,mem_keyboard_fn_lock_keyvalue
+	isub temp,null
+	rtn zero
+keyboard_keyvalue_fn_esc_next:	
+	fetch 1,mem_keyboard_fn_esc
+	branch keyboard_keyvalue_store_temp
+	
+keyboard_keyvalue_fn_delete:
+	fetch 1,mem_keyboard_fn_del
+	branch keyboard_keyvalue_store_temp
+	
+keyboard_keyvalue_fn_replace_press:
+	bpatch patch0a_1,mem_patch0a
+	call keyboard_keyvalue_fn_lock_replace
+	fetch 1,mem_keyboard_keyvalue_temp
+	beq HID_KEY_UP_ARROW,keyboard_keyvalue_fn_up_arrow
+	beq HID_KEY_DOWN_ARROW,keyboard_keyvalue_fn_down_arrow
+	beq HID_KEY_LEFT_ARROW,keyboard_keyvalue_fn_left_arrow
+	beq HID_KEY_RIGHT_ARROW,keyboard_keyvalue_fn_right_arrow
+	beq HID_KEY_LEFT_CTRL,keyboard_keyvalue_fn_left_ctrl
+	beq HID_KEY_SPACE,keyboard_keyvalue_fn_space
+	beq HID_KEY_Q,keyboard_keyvalue_os_android
+	beq HID_KEY_W,keyboard_keyvalue_os_windows
+	beq HID_KEY_E,keyboard_keyvalue_os_ios
+	rtn
+
+keyboard_keyvalue_fn_lock_replace:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_FN_LOCK
+	fetch 1,mem_keyboard_keyvalue_temp
+	fetcht 1,mem_keyboard_fn_lock_keyvalue
+	isub temp,null
+	nrtn zero
+	call keyboard_keyvalue_clear_temp
+	fetch 1,mem_keyboard_press_flag_temp
+	rtnbit0 0
+	fetch 1,mem_keyboard_fn_lock_flag
+	increase 1,pdata
+	and_into 0x01,pdata
+	store 1,mem_keyboard_fn_lock_flag
+	fetch 1,mem_keyboard_device_info_store_flag
+	set1 KEYBOARD_STORE_EEPROMM_FLAG_FN_LOCK,pdata
+	store 1,mem_keyboard_device_info_store_flag
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,keyboard_keyvalue_fn_lock_24g
+	beq MODE_BT_DEVICE1,keyboard_keyvalue_fn_lock_bt1
+	beq MODE_BT_DEVICE2,keyboard_keyvalue_fn_lock_bt2
+	beq MODE_BT_DEVICE3,keyboard_keyvalue_fn_lock_bt3
+	beq MODE_USB_DEVICE,keyboard_keyvalue_fn_lock_usb
+keyboard_keyvalue_fn_lock_24g:
+	fetch 1,mem_keyboard_fn_lock_flag
+	store 1,mem_keyboard_24g_fn_lock
+	branch keyboard_store_eeprom_or_flash
+keyboard_keyvalue_fn_lock_bt1:
+	fetch 1,mem_keyboard_fn_lock_flag
+	store 1,mem_keyboard_bt1_fn_lock
+	branch keyboard_store_eeprom_or_flash
+keyboard_keyvalue_fn_lock_bt2:
+	fetch 1,mem_keyboard_fn_lock_flag
+	store 1,mem_keyboard_bt2_fn_lock
+	branch keyboard_store_eeprom_or_flash
+keyboard_keyvalue_fn_lock_bt3:
+	fetch 1,mem_keyboard_fn_lock_flag
+	store 1,mem_keyboard_bt3_fn_lock
+	branch keyboard_store_eeprom_or_flash
+keyboard_keyvalue_fn_lock_usb:
+	fetch 1,mem_keyboard_fn_lock_flag
+	store 1,mem_keyboard_usb_fn_lock
+	branch keyboard_store_eeprom_or_flash
+
+keyboard_keyvalue_fn_up_arrow:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_FN_ARROW
+	setarg HID_KEY_PAGE_UP
+	branch keyboard_keyvalue_store_temp
+	
+keyboard_keyvalue_fn_down_arrow:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_FN_ARROW
+	setarg HID_KEY_PAGE_DOWN
+	branch keyboard_keyvalue_store_temp
+
+keyboard_keyvalue_fn_left_arrow:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_FN_ARROW
+	setarg HID_KEY_HOME
+	branch keyboard_keyvalue_store_temp
+
+keyboard_keyvalue_fn_right_arrow:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_FN_ARROW
+	setarg HID_KEY_END
+	branch keyboard_keyvalue_store_temp
+
+keyboard_keyvalue_fn_left_ctrl:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_FN_LEFT_CTRL_OSK
+	fetch 1,mem_device_fast_conn_flag
+	rtneq 0xff
+	fetch 1,mem_kb_computer_system
+	beq SYSTEM_OS_WINDOWS,keyboard_keyvalue_windows_osk
+	setarg HID_KEY_OS_SOFT_KB
+	branch keyboard_keyvalue_store_temp
+keyboard_keyvalue_windows_osk:	
+	setarg HID_KEY_OSK
+	branch keyboard_keyvalue_store_temp
+
+keyboard_keyvalue_fn_space:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_FN_SPACE_LANGUAGE
+	setarg HID_KEY_LANGUAGE
+keyboard_keyvalue_store_temp:
+	store 1,mem_keyboard_keyvalue_temp
+	rtn
+
+keyboard_keyvalue_os_android:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_FN_OS_SWITCH
+	call keyboard_keyvalue_clear_temp
+	fetch 1,mem_keyboard_press_flag_temp
+	rtnbit0 0
+	jam SYSTEM_OS_ANDROID,mem_kb_computer_system
+keyboard_keyvalue_os_switch_end:	
+	jam 6,mem_keyboard_mode_led_on_timer
+	call keyboard_store_computer_system
+	fetch 1,mem_keyboard_device_info_store_flag
+	set1 KEYBOARD_STORE_EEPROMM_FLAG_COMPUTER_SYSTEM,pdata
+	store 1,mem_keyboard_device_info_store_flag
+keyboard_store_eeprom_or_flash:	
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit1 KEYBOARD_ENABLE_OTP
+keyboard_store_device_info_delay:	
+	fetch 1,mem_store_information_delay_timer_init
+	store 1,mem_store_information_delay_timer
+	rtn
+
+keyboard_keyvalue_os_windows:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_FN_OS_SWITCH
+	call keyboard_keyvalue_clear_temp
+	fetch 1,mem_keyboard_press_flag_temp
+	rtnbit0 0
+	jam SYSTEM_OS_WINDOWS,mem_kb_computer_system
+	branch keyboard_keyvalue_os_switch_end
+
+keyboard_keyvalue_os_ios:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_FN_OS_SWITCH
+	call keyboard_keyvalue_clear_temp
+	fetch 1,mem_keyboard_press_flag_temp
+	rtnbit0 0
+	jam SYSTEM_OS_IOS,mem_kb_computer_system
+	branch keyboard_keyvalue_os_switch_end
+
+keyboard_keyvalue_clear_temp:
+	setarg 0
+	branch keyboard_keyvalue_store_temp
+
+keyboard_store_computer_system:
+	bpatch patch0a_2,mem_patch0a
+	fetch 1,mem_device_flag
+	rtneq MODE_24G_DEVICE
+	rtneq MODE_USB_DEVICE
+	beq MODE_BT_DEVICE1,keyboard_store_computer_system_bt1
+	beq MODE_BT_DEVICE2,keyboard_store_computer_system_bt2
+	beq MODE_BT_DEVICE3,keyboard_store_computer_system_bt3
+keyboard_store_computer_system_bt1:	
+	fetcht 1,mem_kb_computer_system
+	storet 1,mem_keyboard_bt1_computer_system
+	rtn
+keyboard_store_computer_system_bt2:	
+	fetcht 1,mem_kb_computer_system
+	storet 1,mem_keyboard_bt2_computer_system
+	rtn
+keyboard_store_computer_system_bt3:	
+	fetcht 1,mem_kb_computer_system
+	storet 1,mem_keyboard_bt3_computer_system
+	rtn	
+/**********************************key value process*******************************/	
+
+
+
+/*******************************commbine keyvalue *************************************/
+keyboard_keyvalue_commbination_replace:
+	fetch 1,mem_keyboard_keyvalue_temp
+	beq HID_KEY_PRINT_SCREEN,keyboard_commination_screen_shot_replace
+	beq HID_KEY_PAGE_UP,keyboard_commination_pageup_replace
+	beq HID_KEY_PAGE_DOWN,keyboard_commination_pagedown_replace
+	beq HID_KEY_HOME,keyboard_commination_home_replace
+	beq HID_KEY_END,keyboard_commination_end_replace
+	beq HID_KEY_SELECT_ALL,keyboard_commination_select_all
+	beq HID_KEY_COPY,keyboard_commbination_copy
+	beq HID_KEY_PASTE,keyboard_commbination_paste
+	beq HID_KEY_CUT,keyboard_commbination_cut
+	beq HID_KEY_ALL_OS_LOCK,keyboard_commination_os_lock
+	beq HID_KEY_OSK,keyboard_commbination_osk
+	beq HID_KEY_SEARCH,keyboard_commbination_search
+	beq HID_KEY_LANGUAGE,keyboard_commbination_language
+	beq HID_KEY_APP_TILING,keyboard_commbination_app_tiling
+	rtn
+
+keyboard_commbination_delay_release_set:
+	fetch 1,mem_keyboard_press_flag_temp
+	rtnbit0 0
+	jam 10,mem_keyboard_commbination_control_key_delay_release_timer
+	rtn
+
+keyboard_commbination_delay_release_clear:
+	jam 0,mem_keyboard_commbination_control_key_delay_release_timer
+	rtn
+
+keyboard_commination_screen_shot_replace:
+	fetch 1,mem_kb_computer_system
+	rtneq SYSTEM_OS_WINDOWS
+	rtneq SYSTEM_OS_ANDROID
+	jam LEFT_SHIFT_GUI,mem_keyboard_commbination_control_key_value
+	jam HID_KEY_3,mem_keyboard_commbination_standard_key_value
+	branch keyboard_commbination_keypress
+
+keyboard_commination_pageup_replace:
+	jam HID_KEY_UP_ARROW,mem_keyboard_commbination_standard_key_value
+keyboard_commination_ios_mac_command_commiation:	
+	fetch 1,mem_kb_computer_system
+	rtneq SYSTEM_OS_WINDOWS
+	rtneq SYSTEM_OS_ANDROID
+	jam LEFT_GUI,mem_keyboard_commbination_control_key_value
+	branch keyboard_commbination_keypress
+
+keyboard_commination_pagedown_replace:
+	jam HID_KEY_DOWN_ARROW,mem_keyboard_commbination_standard_key_value
+	branch keyboard_commination_ios_mac_command_commiation	
+
+keyboard_commination_home_replace:
+	jam HID_KEY_LEFT_ARROW,mem_keyboard_commbination_standard_key_value
+	branch keyboard_commination_ios_mac_command_commiation
+
+keyboard_commination_end_replace:
+	jam HID_KEY_RIGHT_ARROW,mem_keyboard_commbination_standard_key_value
+	branch keyboard_commination_ios_mac_command_commiation
+
+keyboard_commination_select_all:
+	jam HID_KEY_A,mem_keyboard_commbination_standard_key_value
+keyboard_commbination_text_edit:
+	jam LEFT_CONTROL,mem_keyboard_commbination_control_key_value
+	fetch 1,mem_kb_computer_system
+	beq SYSTEM_OS_WINDOWS,keyboard_commbination_keypress
+	beq SYSTEM_OS_ANDROID,keyboard_commbination_keypress
+	jam LEFT_GUI,mem_keyboard_commbination_control_key_value
+	branch keyboard_commbination_keypress
+
+keyboard_commbination_copy:
+	jam HID_KEY_C,mem_keyboard_commbination_standard_key_value
+	branch keyboard_commbination_text_edit
+
+keyboard_commbination_paste:
+	jam HID_KEY_V,mem_keyboard_commbination_standard_key_value
+	branch keyboard_commbination_text_edit
+
+keyboard_commbination_cut:	
+	jam HID_KEY_X,mem_keyboard_commbination_standard_key_value
+	branch keyboard_commbination_text_edit
+
+keyboard_commination_os_lock:
+	fetch 1,mem_kb_computer_system
+	beq SYSTEM_OS_WINDOWS,keyboard_commination_windows_lock
+	beq SYSTEM_OS_MAC,keyboard_commination_mac_lock
+	setarg HID_KEY_IOS_ANDROID_OS_LOCK
+	branch keyboard_keyvalue_store_temp
+keyboard_commination_windows_lock:	
+	jam LEFT_GUI,mem_keyboard_commbination_control_key_value
+	jam HID_KEY_L,mem_keyboard_commbination_standard_key_value
+	branch keyboard_commbination_keypress
+keyboard_commination_mac_lock:
+	jam LEFT_GUI_CONTROL,mem_keyboard_commbination_control_key_value
+	jam HID_KEY_Q,mem_keyboard_commbination_standard_key_value
+	branch keyboard_commbination_keypress
+	
+keyboard_commbination_osk:
+	fetch 1,mem_kb_computer_system
+	beq SYSTEM_OS_WINDOWS,keyboard_commbination_windows_osk
+	setarg HID_KEY_OS_SOFT_KB
+	branch keyboard_keyvalue_store_temp
+keyboard_commbination_windows_osk:	
+	jam LEFT_GUI_CONTROL,mem_keyboard_commbination_control_key_value
+	jam HID_KEY_O,mem_keyboard_commbination_standard_key_value
+	branch keyboard_commbination_keypress
+
+keyboard_commbination_search:
+	fetch 1,mem_kb_computer_system
+	beq SYSTEM_OS_MAC,keyboard_commbination_mac_search
+	setarg HID_KEY_AC_SEARCH
+	branch keyboard_keyvalue_store_temp
+keyboard_commbination_mac_search:	
+	jam LEFT_GUI,mem_keyboard_commbination_control_key_value
+	jam HID_KEY_SPACE,mem_keyboard_commbination_standard_key_value
+	branch keyboard_commbination_keypress
+	
+keyboard_commbination_language:
+	fetch 1,mem_kb_computer_system
+	beq SYSTEM_OS_WINDOWS,keyboard_commbination_language_windows
+	beq SYSTEM_OS_ANDROID,keyboard_commbination_language_android
+	jam LEFT_CONTROL,mem_keyboard_commbination_control_key_value
+keyboard_commbination_language_next:
+	jam HID_KEY_SPACE,mem_keyboard_commbination_standard_key_value
+	call keyboard_commbination_delay_release_set	
+	branch keyboard_commbination_keypress
+keyboard_commbination_language_windows:
+	jam LEFT_GUI,mem_keyboard_commbination_control_key_value
+	branch keyboard_commbination_language_next
+keyboard_commbination_language_android:
+	jam LEFT_SHIFT,mem_keyboard_commbination_control_key_value
+	branch keyboard_commbination_language_next
+
+keyboard_commbination_app_tiling:
+	fetch 1,mem_kb_computer_system
+	beq SYSTEM_OS_WINDOWS,keyboard_commbination_app_tiling_windows_android
+	beq SYSTEM_OS_ANDROID,keyboard_commbination_app_tiling_windows_android
+	jam LEFT_CONTROL,mem_keyboard_commbination_control_key_value
+	jam HID_KEY_UP_ARROW,mem_keyboard_commbination_standard_key_value
+	branch keyboard_commbination_keypress	
+keyboard_commbination_app_tiling_windows_android:
+	jam LEFT_GUI,mem_keyboard_commbination_control_key_value
+	jam HID_KEY_TAB,mem_keyboard_commbination_standard_key_value
+	branch keyboard_commbination_keypress	
+
+keyboard_commbination_keypress:
+	jam 0,mem_keyboard_keyvalue_temp
+	fetch 1,mem_keyboard_press_flag_temp
+	bbit0 0,keyboard_commbination_key_wait_release_set
+	fetch 1,mem_keyboard_commbination_key_step
+	beq CAMMBINATION_KEY_COMPLETE,keyboard_commbination_key_hold_set
+keyboard_commbination_key_press_set:	
+	jam CAMMBINATION_KEY_PRESS,mem_keyboard_commbination_key_step
+	rtn
+
+keyboard_commbination_key_wait_release_set:
+	jam CAMMBINATION_KEY_WAIT_RELEASE,mem_keyboard_commbination_key_step
+	rtn
+
+keyboard_commbination_key_null_set:
+	jam CAMMBINATION_KEY_NULL,mem_keyboard_commbination_key_step
+	rtn
+
+//**input:   pdata:control key vaule       temp:standard key value
+keyboard_commbination_key_value_store:
+	store 1,mem_keyboard_tx_data+1
+	storet 1,mem_keyboard_tx_data+3
+	call enable_user
+	jam HID_REPORTID_KEY_STANDARD,mem_keyboard_tx_data
+	branch keyboard_motion_data_check_next	
+	
+keyboard_commbination_key_press_process:
+	fetch 1,mem_keyboard_commbination_control_key_value
+	arg 0,temp
+	call keyboard_commbination_key_value_store
+keyboard_commbination_key_hold_set:
+	jam CAMMBINATION_KEY_HOLD,mem_keyboard_commbination_key_step
+	rtn
+
+keyboard_commbination_key_hold_process:
+	jam CAMMBINATION_KEY_COMPLETE,mem_keyboard_commbination_key_step
+	fetch 1,mem_keyboard_commbination_control_key_value
+	fetcht 1,mem_keyboard_commbination_standard_key_value
+	branch keyboard_commbination_key_value_store
+	
+keyboard_commbination_key_wait_release_process:
+	jam HID_REPORTID_KEY_STANDARD,mem_keyboard_tx_data
+	fetch 1,mem_keyboard_commbination_control_key_value
+	arg 0,temp
+	call keyboard_commbination_key_value_store
+	fetch 1,mem_keyboard_commbination_control_key_delay_release_timer
+	branch keyboard_commbination_key_null_set,blank
+keyboard_commbination_key_release_set:	
+	jam CAMMBINATION_KEY_RELEASE,mem_keyboard_commbination_key_step
+	rtn
+
+keyboard_commbination_key_release_process:
+	branch keyboard_commbination_key_value_store+2
+
+keyboard_commbination_key_null_process:
+	jam CAMMBINATION_KEY_FREE,mem_keyboard_commbination_key_step
+	arg 0,pdata
+	arg 0,temp
+	branch keyboard_commbination_key_value_store	
+
+
+
+keyboard_keyvalue_in_out:
+	fetch 1,mem_keyboard_keyvalue_temp
+	arg HID_KEY_LEFT_CTRL,temp
+	isub temp,null
+	nbranch keyboard_keyvalue_standard,positive		// value < 0xe0
+	sub pdata,HID_KEY_RIGHT_GUI,null
+	nbranch keyboard_keyvalue_consumer,positive		// value  > 0xe7
+	and_into 0x07,pdata
+	copy pdata,queue
+	fetch 1,mem_keyboard_press_flag_temp
+	bbit1 0,keyboard_keyvalue_control_key_in
+keyboard_keyvalue_control_key_out:
+	fetch 1,mem_keyboard_keyvalue_buffer
+	qset0 pdata
+	store 1,mem_keyboard_keyvalue_buffer
+	rtn
+keyboard_keyvalue_control_key_in:
+	fetch 1,mem_keyboard_keyvalue_buffer
+	qset1 pdata
+	store 1,mem_keyboard_keyvalue_buffer
+	rtn
+
+keyboard_keyvalue_standard:
+	jam 0,mem_keyboard_keyvalue_buffer+8
+	fetch 1,mem_keyboard_press_flag_temp
+	bbit1 0,keyboard_keyvalue_standard_in
+keyboard_keyvalue_standard_out:	
+	fetcht 1,mem_keyboard_keyvalue_temp
+	arg 6,loopcnt
+	arg mem_keyboard_keyvalue_buffer+2,contr
+keyboard_keyvalue_standard_out_loop:
+	ifetch 1,contr
+	isub temp,null
+	nbranch keyboard_keyvalue_standard_out_next,zero
+	ifetch 1,contr
+	increase -2,contr
+	istore 1,contr
+	rtn blank
+	increase 1,contr
+	istoret 1,contr
+keyboard_keyvalue_standard_out_next:	
+	loop keyboard_keyvalue_standard_out_loop
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit1 KEYBOARD_ENABLE_FULL_N_KEY_ROLLOVER,keyboard_keyvalue_standard_out_n_key_rollover
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_26_N_KEY_ROLLOVER
+keyboard_keyvalue_standard_out_n_key_rollover:
+	call keyboard_keyvalue_n_key_rollover_data_in_out
+	qset0 pdata
+	branch istore_1_contw_rtn
+
+	
+keyboard_keyvalue_standard_in:
+	fetcht 1,mem_keyboard_keyvalue_temp
+	arg 6,loopcnt
+	arg mem_keyboard_keyvalue_buffer+2,contr
+keyboard_keyvalue_standard_in_loop:
+	ifetch 1,contr
+	branch keyboard_keyvalue_standard_in_data,blank
+	isub temp,null
+	rtn zero
+	loop keyboard_keyvalue_standard_in_loop
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit1 KEYBOARD_ENABLE_FULL_N_KEY_ROLLOVER,keyboard_keyvalue_standard_in_n_key_rollover
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_26_N_KEY_ROLLOVER
+keyboard_keyvalue_standard_in_n_key_rollover:
+	call keyboard_keyvalue_n_key_rollover_data_in_out
+	qset1 pdata
+	branch istore_1_contw_rtn
+	
+keyboard_keyvalue_standard_in_data:
+	increase -1,contr
+	istoret 1,contr
+	rtn
+	
+keyboard_keyvalue_n_key_rollover_data_in_out:
+	bpatch patch0a_3,mem_patch0a
+	fetch 1,mem_keyboard_keyvalue_temp
+	sub pdata,0x70,null
+	nrtn positive		// keyboard value 14byte
+	jam 1,mem_keboard_n_key_rollover_send_flag
+	jam 1,mem_keyboard_data_change_flag
+	div pdata,8
+	call wait_div_end
+	quotient pdata
+	remainder queue
+	arg mem_keyboard_n_key_rollover_data+1,contw
+	iadd contw,contw
+	setarg 0
+	rtn
+
+keyboard_keyvalue_consumer:
+	jam KEYBOARD_CONSUMER_KEY_PRESS,mem_keyboard_consumer_key_status
+	fetch 1,mem_keyboard_press_flag_temp
+	isolate0 0,pdata
+	call keyboard_consumer_key_release_status,true
+	branch keyboard_keyvalue_standard
+	
+keyboard_consumer_key_release_status:
+	jam KEYBOARD_CONSUMER_KEY_RELEASE,mem_keyboard_consumer_key_status
+	rtn
+	
+/******************************** special key ****************************************************/
+// check Fn,pairing button,control key
+keyboard_special_key_check:
+	call keyboard_pairing_button_check
+	call keyboard_device_select
+	jam 0,mem_keyboard_fn_flag
+	jam 0,mem_keyboard_control_key_flag
+	jam 0,mem_keyboard_alt_flag
+	jam 0,mem_keyboard_shift_flag
+	jam 0,mem_keyboard_bt_button_flag
+	fetch 1,mem_keyboard_keyvalue_buffer
+	ncall keyborad_control_key_set,blank
+	arg mem_keyboard_keyvalue_buffer+2,contr
+	arg 6,loopcnt
+keyboard_special_key_check_loop:
+	ifetch 1,contr
+	sub pdata,HID_KEY_FN,null
+	call keyboard_fn_set,zero
+	sub pdata,HID_KEY_PB,null
+	call keyboard_pb_set,zero
+	loop keyboard_special_key_check_loop
+	
+	call keyboard_commbination_key_press_check
+	fetch 1,mem_keyboard_pairing_type
+	branch keyboard_enable_bt_button_pairing,blank
+	rtn
+
+keyboard_commbination_key_press_check:
+	bpatch patch0a_4,mem_patch0a
+	jam 0,mem_keyboard_commbination_press_type
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_commbination_key_press_check_bt
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_COMMBINATION_KEY_BY_24G_PAIRING
+	fetch 2,mem_keyboard_keyvalue_buffer+2
+	fetcht 2,mem_keyboard_commbination_key_24g
+	isub temp,null
+	branch keyboard_commbination_key_down_24g,zero
+	byteswap temp,temp
+	isub temp,null
+	branch keyboard_commbination_key_down_24g,zero
+	branch mouse_commbination_key_up
+	
+keyboard_commbination_key_press_check_bt:
+	fetch 2,mem_keyboard_keyvalue_buffer+2
+	fetcht 2,mem_keyboard_commbination_fast_conn_bt
+	isub temp,null
+	branch keyboard_commbination_key_down_bt_fast_conn,zero
+	byteswap temp,temp
+	isub temp,null
+	branch keyboard_commbination_key_down_bt_fast_conn,zero
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit0 KEYBOARD_ENABLE_COMMBINATION_KEY_BY_BT_DISCOVERY,mouse_commbination_key_up
+	fetch 2,mem_keyboard_keyvalue_buffer+2
+	fetcht 2,mem_keyboard_commbination_key_bt
+	isub temp,null
+	branch keyboard_commbination_key_down_bt,zero
+	byteswap temp,temp
+	isub temp,null
+	branch keyboard_commbination_key_down_bt,zero
+	branch mouse_commbination_key_up
+
+keyboard_commbination_key_down_24g:
+	jam KEYBOARD_COMMBINATION_PRESS_TYPE_24G_PAIR,mem_keyboard_commbination_press_type
+	branch keyboard_commbination_key_down
+keyboard_commbination_key_down_bt:
+	jam KEYBOARD_COMMBINATION_PRESS_TYPE_BT_PAIR,mem_keyboard_commbination_press_type
+	branch keyboard_commbination_key_down
+keyboard_commbination_key_down_bt_fast_conn:
+	jam KEYBOARD_COMMBINATION_PRESS_TYPE_BT_FAST_CONN,mem_keyboard_commbination_press_type
+	branch keyboard_commbination_key_down	
+
+keyboard_commbination_key_down:
+	fetch 1,mem_commbination_key_statue
+	rtneq COMMBINATION_KEY_STATE_DOWN
+	jam COMMBINATION_KEY_STATE_DOWN,mem_commbination_key_statue
+	rtn
+	
+
+keyboard_device_select:
+	call disable_user
+	call keyboard_device_select_g24
+	call keyboard_device_select_bt1
+	call keyboard_device_select_bt2
+	call keyboard_device_select_bt3
+	call keyboard_device_select_usb
+	branch keyboard_clear_change_flag,user
+	fetch 1,mem_keyboard_switch_device_flag
+	set0 KEYBOARD_FLAG_G24_DEVICE_BUTTON,pdata
+	set0 KEYBOARD_FLAG_BT_DEVICE_BUTTON,pdata
+	store 1,mem_keyboard_switch_device_flag
+	rtn
+	
+keyboard_clear_change_flag:
+	jam 0,mem_keyboard_data_change_flag
+	rtn
+	
+keyboard_device_select_g24:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_24G
+	fetch 1,mem_keyboard_switch_device_to_g24
+	rtn blank
+	fetch 2,mem_keyboard_keyvalue_buffer+2
+	fetcht 2,mem_keyboard_switch_device_to_g24+1
+	isub temp,null
+	branch keyboard_device_select_g24_press,zero
+	byteswap temp,temp
+	isub temp,null
+	branch keyboard_device_select_g24_press,zero
+	rtn
+
+keyboard_device_select_g24_press:
+	call enable_user
+	fetch 1,mem_keyboard_switch_device_flag
+	set1 KEYBOARD_FLAG_G24_DEVICE_BUTTON,pdata
+	set0 KEYBOARD_FLAG_BT_DEVICE_BUTTON,pdata
+	store 1,mem_keyboard_switch_device_flag
+	fetch 1,mem_device_flag
+	rtneq MODE_24G_DEVICE
+	jam MODE_24G_DEVICE,mem_device_flag
+	jam 1,mem_keyboard_switch_g24_enable
+	rtn
+	
+keyboard_device_select_bt1:
+	fetch 1,mem_keyboard_switch_device_to_bt1
+	rtn blank
+	fetch 2,mem_keyboard_keyvalue_buffer+2
+	fetcht 2,mem_keyboard_switch_device_to_bt1+1
+	isub temp,null
+	branch keyboard_device_select_bt1_press,zero
+	byteswap temp,temp
+	isub temp,null
+	branch keyboard_device_select_bt1_press,zero
+	rtn
+
+keyboard_device_select_bt1_press:
+	call enable_user
+	call keyboard_device_select_bt_set_press_flag
+	fetch 1,mem_device_flag
+	rtneq MODE_BT_DEVICE1
+	jam MODE_BT_DEVICE1,mem_device_flag
+	jam 1,mem_keyboard_switch_bt_enable
+	rtn
+
+keyboard_device_select_bt2:
+	fetch 1,mem_keyboard_switch_device_to_bt2
+	rtn blank
+	fetch 2,mem_keyboard_keyvalue_buffer+2
+	fetcht 2,mem_keyboard_switch_device_to_bt2+1
+	isub temp,null
+	branch keyboard_device_select_bt2_press,zero
+	byteswap temp,temp
+	isub temp,null
+	branch keyboard_device_select_bt2_press,zero
+	rtn
+
+keyboard_device_select_bt2_press:
+	call enable_user
+	call keyboard_device_select_bt_set_press_flag
+	fetch 1,mem_device_flag
+	rtneq MODE_BT_DEVICE2
+	jam MODE_BT_DEVICE2,mem_device_flag
+	jam 1,mem_keyboard_switch_bt_enable
+	rtn
+
+keyboard_device_select_bt3:
+	fetch 1,mem_keyboard_switch_device_to_bt3
+	rtn blank
+	fetch 2,mem_keyboard_keyvalue_buffer+2
+	fetcht 2,mem_keyboard_switch_device_to_bt3+1
+	isub temp,null
+	branch keyboard_device_select_bt3_press,zero
+	byteswap temp,temp
+	isub temp,null
+	branch keyboard_device_select_bt3_press,zero
+	rtn
+
+keyboard_device_select_bt3_press:
+	call enable_user
+	call keyboard_device_select_bt_set_press_flag
+	fetch 1,mem_device_flag
+	rtneq MODE_BT_DEVICE3
+	jam MODE_BT_DEVICE3,mem_device_flag
+	jam 1,mem_keyboard_switch_bt_enable
+	rtn
+
+keyboard_device_select_bt_set_press_flag:
+	fetch 1,mem_keyboard_switch_device_flag
+	set0 KEYBOARD_FLAG_G24_DEVICE_BUTTON,pdata
+	set1 KEYBOARD_FLAG_BT_DEVICE_BUTTON,pdata
+	store 1,mem_keyboard_switch_device_flag
+	rtn
+
+keyboard_device_select_usb:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_USB
+	fetch 1,mem_keyboard_switch_device_to_usb
+	rtn blank
+	fetch 2,mem_keyboard_keyvalue_buffer+2
+	fetcht 2,mem_keyboard_switch_device_to_usb+1
+	isub temp,null
+	branch keyboard_device_select_usb_press,zero
+	byteswap temp,temp
+	isub temp,null
+	branch keyboard_device_select_usb_press,zero
+	rtn
+
+keyboard_device_select_usb_press:
+	call enable_user
+	fetch 1,mem_device_flag
+	rtneq MODE_USB_DEVICE
+	jam MODE_USB_DEVICE,mem_device_flag
+	call keyboard_store_device_number
+	branch soft_reset_chip
+	
+keyboard_pairing_button_check:
+	fetch 1,mem_keyboard_pairing_type
+	nrtn blank
+	fetcht 1,mem_keyboard_pb_button_gpio
+	sub temp,UI_BUTTON_GPIO_DISABLE,null
+	rtn zero
+	call gpio_get_bit
+	nbranch keyboard_pairing_button_release,true
+	arg 8,loopcnt
+	arg mem_keyboard_keyvalue_buffer,contw
+	call clear_mem
+	jam HID_KEY_PB,mem_keyboard_keyvalue_buffer+2
+	rtn
+
+keyboard_pairing_button_release:
+	fetch 1,mem_keyboard_keyvalue_buffer+2
+	rtnne HID_KEY_PB
+	jam HID_KEY_NULL,mem_keyboard_keyvalue_buffer+2
+	rtn	
+
+keyboard_enable_bt_button_pairing:
+	bpatch patch0a_5,mem_patch0a
+	fetch 1,mem_keyboard_bt_button_flag
+	rtn blank
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,keyboard_24g_start_pair_mode
+keyboard_long_button_bt_discovery:
+	bpatch patch0a_6,mem_patch0a
+	call keyboard_pairing_check_otp_offset
+	jam 0,mem_keyboard_data_change_flag
+	fetch 1,mem_device_flag
+	rtneq MODE_24G_DEVICE
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit1 KEYBOARD_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG
+	arg KEYBOARD_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG,queue
+	call keyboard_enable_function_flag
+	call app_evt_button_long_pressed
+	branch keyboard_bb_event_discovery_btn
+
+keyboard_24g_start_pair_mode:
+	bpatch patch0a_7,mem_patch0a
+	call keyboard_device_led_all_off
+	call keyboard_pairing_check_otp_offset		
+	jam 0,mem_keyboard_data_change_flag
+	fetch 2,mem_24g_pair_timeout
+	nrtn blank
+	setarg 0
+	store 2,mem_device_no_data_timer
+	store 2,mem_24g_reconn_timeout
+	store 1,mem_24g_reconn_type
+	arg KEYBOARD_24G_PAIRING_FLAG,queue
+	call keyboard_enable_function_flag
+	call keyboard_stop_discovery
+	jam TYPE_KB,mem_24g_data_type
+	branch g24_pair_start
+
+
+keyborad_control_key_set:
+	store 1,mem_keyboard_control_key_flag
+	and_into 0x44,pdata
+	ncall keyboard_alt_flag_set,blank
+	fetch 1,mem_keyboard_control_key_flag
+	and_into 0x22,pdata
+	rtn blank
+	jam 1,mem_keyboard_shift_flag
+	rtn
+keyboard_alt_flag_set:	
+	jam 1,mem_keyboard_alt_flag
+	rtn
+
+
+keyboard_fn_set:
+	jam 1,mem_keyboard_fn_flag
+	rtn
+
+keyboard_pb_set:
+	jam 1,mem_keyboard_bt_button_flag
+	rtn
+
+
+///////////////////////////////////////////////////////////////---motion----//////////////////////////////////
+keyboard_motion:
+	bpatch patch0b_0,mem_patch0b
+	disable user
+	jam 0,mem_customer_key
+	jam 0,mem_customer_data_trigger
+	jam 0,mem_customer_data_trigger_last
+	fetch 1,mem_keyboard_commbination_key_step
+	beq CAMMBINATION_KEY_PRESS,keyboard_commbination_key_press_process
+	beq CAMMBINATION_KEY_HOLD,keyboard_commbination_key_hold_process
+	beq CAMMBINATION_KEY_COMPLETE,keyboard_commbination_key_hold_process
+	beq CAMMBINATION_KEY_WAIT_RELEASE,keyboard_commbination_key_wait_release_process
+	beq CAMMBINATION_KEY_NULL,keyboard_commbination_key_null_process
+	fetch 1,mem_keyboard_data_change_flag
+	branch keyboard_no_key_press,blank
+	increase -1,pdata
+	store 1,mem_keyboard_data_change_flag	
+	call keyboard_current_mult_update	
+	jam 10,mem_keyboard_led_status_get_timer
+	call mouse_no_data_timer_init
+	fetch 1,mem_keyboard_commbination_key_step
+	beq CAMMBINATION_KEY_RELEASE,keyboard_commbination_key_release_process
+	arg mem_keyboard_tx_data,contw
+	arg 10,loopcnt
+	call clear_mem
+	call keyboard_motion_data_check
+	jam 0,mem_keyboard_data_send_flag
+	rtn
+
+keyboard_current_mult_update:
+	jam 3,mem_lpm_mult
+	jam 10,mem_mouse_current_mult_timer
+	rtn
+
+keyboard_no_key_press:
+	fetch 1,mem_device_flag
+	rtnne MODE_24G_DEVICE
+	fetch 1,mem_keyboard_led_status_get
+	rtn blank
+	fetch 1,mem_24g_repeat_send_flag
+	nrtn blank
+	fetcht 1,mem_keyboard_led_status_get_timer_last
+	fetch 1,mem_keyboard_led_status_get_timer
+	isub temp,null
+	store 1,mem_keyboard_led_status_get_timer_last
+	rtn zero
+	arg mem_keyboard_tx_data,contw
+	arg 10,loopcnt
+	call clear_mem
+	call enable_user
+	branch keyboard_motion_data_check_next	
+
+keyboard_motion_data_check:
+	bpatch patch0b_1,mem_patch0b
+	fetch 1,mem_keyboard_consumer_key_status
+	beq KEYBOARD_CONSUMER_KEY_RELEASE,keyboard_value_consumer_release
+	fetch 1,mem_keboard_n_key_rollover_send_flag
+	nbranch keyboard_motion_data_check_n_key_rollover_key,blank
+	arg mem_keyboard_keyvalue_buffer+2,contr
+	arg 6,loopcnt
+keyboard_value_tpye_check:
+	ifetch 1,contr
+	sub pdata,HID_KEY_RIGHT_GUI,null
+	nbranch keyboard_value_tpye_consumer_set,positive	
+	loop keyboard_value_tpye_check
+	fetch 1,mem_keyboard_all_press_key_count
+	call keyboard_value_release_all_key,blank
+	jam HID_REPORTID_KEY_STANDARD,mem_keyboard_tx_data
+	bpatch patch0b_2,mem_patch0b
+	arg mem_keyboard_keyvalue_buffer,rega
+	arg mem_keyboard_tx_data+1,contw
+	arg 8,loopcnt
+keyboard_tx_data_store:
+	ifetcht 1,rega
+	fetch 1,mem_device_fast_conn_flag
+	beq 0xff,keyboard_tx_data_store_loop
+	sub temp,HID_KEY_FN,null
+	nbranch keyboard_tx_data_store_loop,zero
+	increase 1,rega
+	ifetcht 1,rega
+keyboard_tx_data_store_loop:
+	istoret 1,contw
+	increase 1,rega
+	loop keyboard_tx_data_store
+keyboard_motion_data_check_next:
+	bpatch patch0b_3,mem_patch0b
+	call keyboard_device_data_tpye_check
+
+	fetch 1,mem_keyboard_data_send_flag
+	beq DEVICE_DATA_TPYE_MOUSE,enable_user
+device_send_keyboard_data:
+	call mouse_customerkey_press
+	branch enable_user
+
+keyboard_motion_data_check_n_key_rollover_key:
+	jam 0,mem_keboard_n_key_rollover_send_flag
+	jam HID_REPORTID_N_KEY_ROLLOVER,mem_keyboard_tx_data
+	branch keyboard_motion_data_check_next
+
+keyboard_value_release_all_key:
+	arg mem_keyboard_n_key_rollover_data,contw
+	arg 15,loopcnt
+	call clear_mem
+	arg mem_keyboard_keyvalue_buffer,contw
+	arg 10,loopcnt
+	branch clear_mem
+////////////////////////////////////////////////////---fn---//////////////////////////////////////////////////////////
+keyboard_value_tpye_consumer_set:
+	copy pdata,temp
+	bpatch patch0b_4,mem_patch0b
+	copy temp,pdata
+	jam HID_REPORTID_BIT_CONSUMER_KEY,mem_keyboard_tx_data
+	fetcht 1,mem_keyboard_all_press_key_count
+	sub temp,HID_KEY_NULL,null
+	branch keyboard_value_consumer_all_key_release,zero
+	beq 	HID_KEY_MULTIKEY_MEDIA,keyboard_value_media
+	beq 	HID_KEY_MULTIKEY_VOL_DOWN,keyboard_value_vol_down
+	beq 	HID_KEY_MULTIKEY_VOL_UP,keyboard_value_vol_up
+	beq 	HID_KEY_MULTIKEY_MUTE,keyboard_value_mute
+	beq 	HID_KEY_MULTIKEY_PRE_TRACK,keyboard_value_pre_track
+	beq 	HID_KEY_MULTIKEY_NEXT_TRACK,keyboard_value_next_track	
+	beq 	HID_KEY_MULTIKEY_PALY,keyboard_value_play
+	beq 	HID_KEY_MULTIKEY_STOP,keyboard_value_stop
+
+	beq 	HID_KEY_AC_HOME,keyboard_value_ac_home
+	beq 	HID_KEY_MAIL,keyboard_value_mail
+	beq 	HID_KEY_MY_COMPUTER,keyboard_value_my_computer
+	beq 	HID_KEY_AC_FAVORITES,keyboard_value_ac_favorites
+	beq 	HID_KEY_CALCULATOR,keyboard_value_calculator
+	beq 	HID_KEY_AC_SEARCH,keyboard_value_ac_search	
+	beq 	HID_KEY_AC_BACK,keyboard_value_ac_back
+	beq 	HID_KEY_OS_SOFT_KB,keyboard_value_os_soft_kb	
+	
+	beq 	HID_KEY_LIGHT_DOWN,keyboard_value_light_down
+	beq 	HID_KEY_LIGHT_UP,keyboard_value_light_up
+	beq 	HID_KEY_IOS_ANDROID_OS_LOCK,keyboard_value_os_lock	
+
+	beq 	HID_KEY_MAC_EJECT,keyboard_value_mac_eject
+	beq 	HID_KEY_AC_FORWARD,keyboard_value_ac_forward
+	beq 	HID_KEY_AC_STOP,keyboard_value_ac_stop
+	beq 	HID_KEY_AC_REFRESH,keyboard_value_ac_refresh
+
+	beq 	HID_KEY_SYSTEM_SLEEP,keyboard_value_system_sleep
+	branch keyboard_motion_data_check_next
+
+keyboard_value_media:
+	setarg 0x000001
+keyboard_consumer_value_store:	
+	store 3,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next
+keyboard_value_vol_down:	
+	setarg 0x000002
+	branch keyboard_consumer_value_store
+keyboard_value_vol_up:	
+	setarg 0x000004
+	branch keyboard_consumer_value_store
+keyboard_value_mute:	
+	setarg 0x000008
+	branch keyboard_consumer_value_store
+keyboard_value_pre_track:	
+	setarg 0x000010
+	branch keyboard_consumer_value_store
+keyboard_value_next_track:	
+	setarg 0x000020
+	branch keyboard_consumer_value_store
+keyboard_value_play:	
+	setarg 0x000040
+	branch keyboard_consumer_value_store
+keyboard_value_stop:	
+	setarg 0x000080
+	branch keyboard_consumer_value_store	
+
+keyboard_value_ac_home:	
+	setarg 0x000100
+	branch keyboard_consumer_value_store
+keyboard_value_mail:	
+	setarg 0x000200
+	branch keyboard_consumer_value_store
+keyboard_value_my_computer:	
+	setarg 0x000400
+	branch keyboard_consumer_value_store
+keyboard_value_ac_favorites:	
+	setarg 0x000800
+	branch keyboard_consumer_value_store
+keyboard_value_calculator:	
+	setarg 0x001000
+	branch keyboard_consumer_value_store
+keyboard_value_ac_search:	
+	setarg 0x002000
+	branch keyboard_consumer_value_store
+keyboard_value_ac_back:
+	fetch 1,mem_kb_computer_system
+	beq SYSTEM_OS_IOS,keyboard_value_ac_home
+	beq SYSTEM_OS_MAC,keyboard_value_ac_home
+	setarg 0x004000
+	branch keyboard_consumer_value_store
+keyboard_value_os_soft_kb:
+	fetch 1,mem_kb_computer_system
+	beq SYSTEM_OS_ANDROID,keyboard_value_os_soft_kb_android
+	setarg 0x010000
+	branch keyboard_consumer_value_store
+keyboard_value_os_soft_kb_android:
+	setarg 0x008000
+	branch keyboard_consumer_value_store
+	
+keyboard_value_light_down:	
+	setarg 0x020000
+	branch keyboard_consumer_value_store
+keyboard_value_light_up:	
+	setarg 0x040000
+	branch keyboard_consumer_value_store
+keyboard_value_os_lock:
+	setarg 0x080000
+	branch keyboard_consumer_value_store
+
+keyboard_value_mac_eject:
+	setarg 0x100000
+	branch keyboard_consumer_value_store
+keyboard_value_ac_forward:
+	setarg 0x200000
+	branch keyboard_consumer_value_store
+keyboard_value_ac_stop:
+	setarg 0x400000
+	branch keyboard_consumer_value_store
+keyboard_value_ac_refresh:
+	setarg 0x800000
+	branch keyboard_consumer_value_store	
+	
+keyboard_value_consumer_all_key_release:
+keyboard_value_consumer_release:
+	jam 2,mem_keyboard_data_change_flag	
+	fetch 1,mem_keyboard_all_press_key_count
+	call keyboard_value_release_all_key,blank
+	jam KEYBOARD_CONSUMER_KEY_STANDBY,mem_keyboard_consumer_key_status
+	setarg HID_REPORTID_BIT_CONSUMER_KEY
+	store 3,mem_keyboard_tx_data
+	branch keyboard_motion_data_check_next
+keyboard_value_system_sleep:
+	jam HID_REPORTID_SYSTEM_CTRL,mem_keyboard_tx_data
+	setarg 0x02
+	store 1,mem_keyboard_tx_data+1
+	branch keyboard_motion_data_check_next		
+
+
+/************************************fn**********************************************/
+
+keyboard_device_data_tpye_check:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_device_data_tpye_check_next
+	jam 0,mem_24g_repeat_send_flag
+	fetch 2,mem_keyboard_tx_data
+	ncall keyboard_set_repeat_send_flag,blank
+	fetch 6,mem_keyboard_tx_data+3
+	ncall keyboard_set_repeat_send_flag,blank
+keyboard_device_data_tpye_check_next:
+	call hid_device_clear_key_data
+	jam DEVICE_DATA_TPYE_KEYBOARD,mem_keyboard_data_send_flag
+	bpatch patch0b_5,mem_patch0b
+	fetch 1,mem_keyboard_tx_data
+	beq HID_REPORTID_KEY_STANDARD,keyboard_standard_data_send
+	beq HID_REPORTID_MOUSE,keyboard_mouse_data_send
+	beq HID_REPORTID_CONSUMER_KEY,keyboard_consumer_data_send
+	beq HID_REPORTID_BIT_CONSUMER_KEY,keyboard_bit_consumer_data_send
+	beq HID_REPORTID_SYSTEM_CTRL,keyboard_system_control_data_send
+	beq HID_REPORTID_N_KEY_ROLLOVER,keyboard_n_key_rollover_send
+	rtn
+
+keyboard_mouse_data_send:
+	jam DEVICE_DATA_TPYE_MOUSE,mem_keyboard_data_send_flag
+	arg mem_keyboard_tx_data+1,contr
+	arg mem_mouse_key,contw
+	arg 7,loopcnt
+	branch memcpy
+	
+keyboard_standard_data_send:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_standard_data_send_end
+	call keyboard_24g_led_get_status_check
+	fetch 1,mem_keyboard_led_status_get
+	store 1,mem_keyboard_tx_data+2
+keyboard_standard_data_send_end:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit1 KEYBOARD_ENABLE_MAGIC_KEYBOARD,keyboard_magic_data_send
+	arg mem_keyboard_tx_data,contr
+	arg mem_customer_key_press,contw
+	arg 9,loopcnt
+	branch memcpy
+
+keyboard_magic_data_send:
+	jam 0,mem_keyboard_tx_data+9
+	fetch 1,mem_keyboard_fn_flag
+	branch keyboard_magic_data_send_end,blank
+	jam 1,mem_keyboard_tx_data+9
+keyboard_magic_data_send_end:	
+	arg mem_keyboard_tx_data,contr
+	arg mem_customer_key_press,contw
+	arg 10,loopcnt
+	branch memcpy
+
+keyboard_consumer_data_send:
+	setarg HID_REPORTID_CONSUMER_KEY
+keyboard_consumer_data_store:
+	store 1,mem_customer_key_press
+	fetch 3,mem_keyboard_tx_data+1
+	store 3,mem_customer_key_press+1
+	rtn
+
+keyboard_bit_consumer_data_send:
+	setarg HID_REPORTID_BIT_CONSUMER_KEY
+	branch keyboard_consumer_data_store
+
+keyboard_system_control_data_send:
+	setarg HID_REPORTID_SYSTEM_CTRL
+	store 1,mem_customer_key_press
+	fetch 1,mem_keyboard_tx_data+1
+	store 1,mem_customer_key_press+1
+	rtn
+
+keyboard_n_key_rollover_send:
+	setarg HID_REPORTID_N_KEY_ROLLOVER
+	store 1,mem_customer_key_press
+	rtn
+
+////////////////////////////////////////lpm/////////////////////////////////////////////////////////////////////////
+
+keyboard_lpm_before_common:
+	bpatch patch0b_6,mem_patch0b
+	call clear_wake
+
+	fetcht 1,mem_keyboard_pb_button_gpio
+	call gpio_set_wake
+
+	fetch 2,mem_kb_col_ptr
+	copy pdata,regb
+	arg 20,loopcnt
+keyboard_key_col_wake_init:
+	ifetcht 1,regb
+	isolate1 7,temp				// exmcu gpio
+	ncall gpio_out_active,true
+	increase 1,regb
+	loop keyboard_key_col_wake_init
+
+	call keyboard_gpio_pu_idle
+	jam 0,mem_qdec_set_flag
+	
+	fetch 2,mem_kb_row_ptr
+	copy pdata,regb
+	arg 8,loopcnt
+keyboard_key_row_wake_init:
+	ifetcht 1,regb
+	sub temp,UI_BUTTON_GPIO_DISABLE,null
+	ncall keyboard_key_row_wake_set,zero
+	increase 1,regb
+	loop keyboard_key_row_wake_init
+	
+	call lpm_puchk_set_check
+	fetcht 1,mem_device_reuse_2ice_gpio
+	call device_gpio_config_input_pu
+	call mouse_gpio_set_analog
+	branch keyboard_adc_gpio_set_before_hibernate
+	
+keyboard_process_lpm_before:
+	rtnmark1 mark_24g
+	branch keyboard_lpm_before_common
+
+keyboard_before_hibernate:
+	bpatch patch0b_7,mem_patch0b
+	call disable_authrom
+	branch keyboard_setgpio_hibernate
+
+	
+keyboard_power_down:
+	bpatch patch0c_0,mem_patch0c
+	call keyboard_device_led_all_off
+keyboard_app_enter_hibernate:
+	call keyboard_setgpio_hibernate
+	branch app_enter_hibernate		
+
+keyboard_setgpio_hibernate:
+	bpatch patch0c_1,mem_patch0c
+	call clear_wake
+	call keyboard_device_led_all_off
+	call keyboard_rgb_off
+	branch keyboard_lpm_before_common
+	
+////////////////////////////////////////24g/////////////////////////////////////////////////////////////////////////	
+keyboard_24g_pairing_complete:
+	call keyboard_get_24g_led_enable
+	call mouse_no_data_timer_init
+	arg KEYBOARD_24G_PAIRING_FLAG,queue
+	call keyboard_disable_function_flag
+	setarg 0
+	store 2,mem_24g_pair_timeout
+	store 2,mem_24g_reconn_timeout
+	store 1,mem_24g_conn_sm
+	store 1,mem_mouse_move_flag
+	store 1,mem_24g_reconn_type
+	fetch 4,mem_24g_addr
+	store 4,mem_24g_receiver_addr
+	store 4,mem_device_24g_addr
+	call keyboard_24g_fast_conn_check
+	fetch 1,mem_keyboard_device_info_store_flag
+	set1 KEYBOARD_STORE_EEPROMM_FLAG_G24_ADDR,pdata
+	store 1,mem_keyboard_device_info_store_flag
+	branch keyboard_store_device_info_delay
+
+keyboard_24g_attempt_success:
+	call keyboard_get_24g_led_enable
+	fetch 4,mem_24g_addr
+	store 4,mem_24g_receiver_addr
+	store 4,mem_device_24g_addr		// if need store 24g address to eeprom/flash,need get mem_24g_addr
+	call g24_ch_syncword_crc8_init
+	call keyboard_24g_fast_conn_check
+	jam 0,mem_24g_conn_sm
+	jam 0,mem_24g_reconn_type
+	branch mouse_no_data_timer_init	
+
+keyboard_24g_fast_conn_check:
+	fetch 4,mem_24g_addr
+	fetcht 4,mem_24g_fast_conn_addr
+	isub temp,null
+	nbranch mouse_bluetooth_fast_conn_disable,zero
+	jam 0xff,mem_device_fast_conn_flag
+	rtn
+
+keyboard_24g_led_get_status_check:
+	arg 6,loopcnt
+	arg mem_keyboard_tx_data+3,contr
+keyboard_24g_led_data_check:
+	ifetch 1,contr
+	beq HID_KEY_NUM_LOCK,keyboard_get_24g_led_enable
+	beq HID_KEY_CAPS_LOCK,keyboard_get_24g_led_enable
+	beq HID_KEY_SCROLL_LOCK,keyboard_get_24g_led_enable
+	loop keyboard_24g_led_data_check
+	rtn
+
+keyboard_get_24g_led_enable:
+	jam 0x03,mem_keyboard_led_status_get
+	jam 1,mem_keyboard_data_change_flag
+	rtn
+
+keyboard_set_repeat_send_flag:
+	jam 1,mem_24g_repeat_send_flag
+	rtn
+
+
+keyboard_24g_attempt_fail:
+	fetch 1,mem_24g_attempt_fail_flag
+	nbranch keyboard_24g_hibernate_set,blank
+	fetch 1,mem_24g_reconn_type
+	beq FAST_CONN_AND_3_0_ADDR,keyboard_24g_fast_conn_attempt_fail
+	beq FAST_CONN_AND_RECEIVER,keyboard_24g_fast_conn_attempt_fail
+	beq RECEIVER_AND_3_0_ADDR,keyboard_24g_attempt_fail_enter_hibernate
+	branch keyboard_24g_attempt_fail_enter_hibernate
+
+keyboard_24g_attempt_fail_enter_hibernate:
+	call keyboard_24g_stop
+	fetch 1,mem_reconn_times
+	nbranch mouse_polling_device,blank
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,keyboard_power_down
+	rtn	
+
+keyboard_24g_fast_conn_attempt_fail:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit1 KEYBOARD_ENABLE_AUTO_24G_PARING,mouse_24g_start_auto_pair
+	bbit0 KEYBOARD_ENABLE_24G_AUTO_PAIR_NERVER_BEEN_PAIRED,mouse_24g_reconn_dongle_start
+	fetch 4,mem_device_24g_addr		// auto pair first time
+	fetcht 4,mem_device_compare_addr
+	isub temp,null
+	branch keyboard_24g_start_pair_mode,zero
+	branch mouse_24g_reconn_dongle_start
+
+keyboard_24g_hibernate_set:
+	bpatch patch0c_2,mem_patch0c
+	jam 0,mem_24g_attempt_fail_flag
+	call g24_transmit_next_packet
+	setarg -1
+	store 8,mem_24g_enter_hibernate
+	setarg 0
+	store 7,mem_mouse_key
+	jam 1,mem_24g_shutdown_flag
+	branch keyboard_g24_long_sleep
+
+
+keyboard_24g_stop:
+	set0 mark_24g,mark
+	jam STATE_24G_STOP,mem_24g_conn_sm
+	arg KEYBOARD_24G_PAIRING_FLAG,queue
+	branch keyboard_disable_function_flag
+
+keyboard_g24_reconn_dispatch:
+	fetch 2,mem_24g_reconn_count
+	and_into 0xe0,pdata
+	branch keyboard_g24_reconn_dispatch_next,blank		// each 0x100 times,reconnect 16 times
+	fetch 2,mem_24g_reconn_count
+	increase 1,pdata
+	store 2,mem_24g_reconn_count
+	rtn
+keyboard_g24_reconn_dispatch_next:
+	call g24_reconn_data_prep
+	call g24_transmit_receive_ack
+	nbranch g24_reconn_device_fail,sync
+	nbranch g24_reconn_device_fail,user3
+	call hid_device_g24_ackpayload_parse
+	branch g24_reconn_dispatch_next+5
+
+keyboard_g24_transmit_no_interrupt:
+	call g24_txdata_prep
+	nbranch keyboard_g24_nodata_transmit,user
+keyboard_g24_transmit_start:
+	call keyboard_g24_transmit_process
+	call keyboard_power_ctrl_start
+	branch keyboard_g24_transmit_start_next
+
+keyboard_g24_nodata_transmit:
+	fetch 8,mem_keyscan_value_current
+	nbranch keyboard_g24_transmit_start_next,blank
+	fetch 8,mem_keyscan_value_current+8
+	nbranch keyboard_g24_transmit_start_next,blank
+	fetch 4,mem_keyscan_value_current+16
+	nbranch keyboard_g24_transmit_start_next,blank
+	call g24_search_receiver
+keyboard_g24_long_sleep:
+	call keyboard_g24_lpm_wait
+	nrtn user
+	call g24_setgpio_lpm_before
+	fetch 1,mem_24g_shutdown_flag
+	ncall keyboard_setgpio_hibernate,blank
+	fetch 8,mem_24g_enter_hibernate
+	branch g24_long_seep2
+
+keyboard_g24_transmit_process:
+	bpatch patch0c_3,mem_patch0c
+	jam 0,mem_24g_retry
+keyboard_g24_transmit_loop:
+	fetchr timeup,2,mem_param_rx_setup
+	until clkn_rt,meet
+	call g24_transmit_receive_ack
+	fetch 1,mem_24g_no_ack	//tx noack
+	beq no_ack_24g,g24_transmit_no_ack
+	nbranch keyboard_g24_retransmit,sync
+	nbranch keyboard_g24_retransmit,user3
+	call hid_device_g24_ackpayload_parse
+	jam 0,mem_24g_shutdown_flag
+	branch g24_transmit_no_ack
+	
+
+keyboard_g24_retransmit:
+	fetch 1,mem_24g_abort_pac
+	nrtn blank
+	fetch 2,mem_24g_txfail_cnt
+	increase 1,pdata
+	store 2,mem_24g_txfail_cnt	
+	fetch 1,mem_24g_txfail_cnt
+	beq 0xff,g24_tx_attempt_fail
+	fetch 1,mem_24g_retry
+	increase 1,pdata
+	store 1,mem_24g_retry
+	and_into 0x03,pdata
+	branch keyboard_g24_tx_fast_hop,blank		//each 4 times change channel
+	branch keyboard_g24_transmit_loop
+
+keyboard_g24_tx_fast_hop:
+	call kscan_dispatch
+	fetch 1,mem_keyboard_switch_device_flag
+	nbranch soft_reset_chip,blank
+	fetch 1,mem_keyboard_commbination_press_type
+	nbranch g24_transmit_no_ack,blank
+	call g24_tx_fast_hop
+	branch keyboard_g24_transmit_loop
+
+keyboard_g24_lpm_wait:
+	enable user
+	call lpo_calibration
+	fetch 3,mem_clks_per_lpo
+	branch disable_user,blank
+	fetch 1,mem_keyboard_fn_flag
+	nbranch disable_user,blank
+	fetch 1,mem_keyboard_control_key_flag
+	nbranch disable_user,blank
+	fetch 1,mem_keyboard_commbination_control_key_delay_release_timer
+	nbranch disable_user,blank
+	fetch 1,mem_24g_transmit_by_interrupt
+	beq G24_TX_TIMER_INT_ENABLE,disable_user
+	branch g24_lpm_wait+5
+	
+keyboard_power_ctrl_start:
+	fetch 4,mem_24g_addr
+	fetcht 4,mem_24g_fast_conn_addr
+	isub temp,null
+	nbranch power_ctrl_start+1,zero
+	jam TX_POWER_FACTORY,mem_tx_power
+	rtn
+keyboard_g24_transmit_start_next:
+	fetch 8,mem_24g_long_sleep_set
+	store 8,mem_24g_enter_hibernate
+	fetch 2,mem_24g_long_sleep_param_update_timer_init
+	store 2,mem_24g_long_sleep_param_update_timer
+keyboard_g24_short_sleep:
+	bpatch patch0c_4,mem_patch0c
+	call keyboard_g24_lpm_wait
+	branch g24_short_sleep+2
+
+keyboard_24g_package_data:
+	rtnmark0 mark_24g
+	call keyboard_motion
+	nrtn user
+	fetch 1,mem_customer_key
+	nbranch keyboard_24g_keyboard_package_data,blank
+	branch mouse_24g_mouse_package_data
+
+keyboard_24g_keyboard_package_data:
+	jam TYPE_KB,mem_24g_data_type
+	fetch 1,mem_customer_key_press
+	beq HID_REPORTID_N_KEY_ROLLOVER,keyboard_24g_keyboard_package_n_key_rollover_data
+	arg 10,rega	//length
+	branch hid_device_24g_keyboard_package_data_set
+
+keyboard_24g_keyboard_package_n_key_rollover_data:
+	store 1,mem_keyboard_n_key_rollover_data
+	arg 15,rega
+	arg mem_keyboard_n_key_rollover_data,regb
+	rtn
+
+/**************************************g24 search receiver*****************************************/
+keyboard_24g_search_dongle:
+	bpatch patch0c_5,mem_patch0c
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_24G_SEARCH_DONGLE
+	branch hid_device_24g_search_dongle
+
+/////////////////////////////////////////////////////// ble ////////////////////////////////////////////////////////////	
+keyboard_le:
+	bpatch patch0c_6,mem_patch0c
+	call le_fifo_check_nearly_full
+	nrtn blank
+	fetch 1,mem_device_fast_conn_flag
+	beq 0xff,keyboard_le_next
+	fetch 1,mem_le_connect_status_flag
+	and pdata,0x03,pdata
+	rtnne 0x03
+keyboard_le_next:	
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit1 KEYBOARD_24G_PAIRING_FLAG,hid_device_le_send_empty_packet
+	bbit1 KEYBOARD_BT_DISCOVERY_BUTTON_DOWN_FLAG,hid_device_le_send_empty_packet
+	bbit1 KEYBOARD_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG,hid_device_le_send_empty_packet
+	call keyboard_motion
+	nrtn user
+	call mouse_wheel_trigger
+	branch hid_device_send_package_data_check
+
+keyboard_le_fill_n_key_rollover_key_data:
+	jam 14,mem_le_data_len
+	fetcht 2,mem_le_notify_handle
+	fetch 1,mem_le_data_len
+	copy pdata,rega
+	call le_att_malloc_tx_notify
+	fetcht 1,mem_le_data_len
+	copy temp,loopcnt
+	arg mem_keyboard_n_key_rollover_data+1,contr
+	branch memcpy
+
+keyboard_le_fill_standard_key_data:	
+	jam 9,mem_le_data_len
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit1 KEYBOARD_ENABLE_MAGIC_KEYBOARD,keyoard_le_fill_standard_key_data_send
+	jam 8,mem_le_data_len
+	branch keyoard_le_fill_standard_key_data_send
+
+keyboard_le_bb_event_connected:
+	call keyboard_load_rgb
+	jam 0,mem_mouse_long_mult_flag
+	jam 1,mem_device_le_bb_connected_flag
+	call mouse_24g_first_store_reconn_info
+	fetch 1,mem_device_le_reconnect_flag
+	nbranch keyboard_le_bb_event_connected_next,blank
+	jam 0x14,mem_device_send_secutiry_request_timer
+keyboard_le_bb_event_connected_next:
+	fetch APP_DISC_RSN_SIZE,mem_app_disconn_reason_flag
+	set0 APP_DISC_BY_BUTTON ,pdata
+	store APP_DISC_RSN_SIZE,mem_app_disconn_reason_flag
+	jam 0,mem_device_direct_timer
+	fetch 2,mem_le_battery_level_updata_timer_init
+	store 2,mem_le_battery_level_updata_timer
+	call mouse_no_data_timer_init
+	branch keyboard_stop_discovery
+
+
+keyboard_le_bb_disconnected:
+	setarg 0
+	store 2,mem_le_battery_level_updata_timer
+	store 1,mem_keyboard_le_send_conn_param_update
+	store 1,mem_keyboard_le_send_conn_param_update_timer
+	store 1,mem_device_le_bb_connected_flag	
+keyboard_le_bb_disconnected_next:	
+	jam LE_LPM_ENABLE,mem_le_conn_param_reject
+	call le_clr_config_more_data
+	jam 0,mem_ltk_exists
+	branch keyboard_bb_disconnected
+keyboard_bb_disconnected:
+	fetch APP_DISC_RSN_SIZE,mem_app_disconn_reason
+	bbit1 APP_DISC_BLE,keyboard_le_event_bb_disconn
+	bbit1 APP_DISC_BY_BUTTON,app_disconn_reason_clear
+	branch keyboard_start_discovery
+keyboard_le_event_bb_disconn:
+	jam 0,mem_le_connect_status_flag
+	fetch APP_DISC_RSN_SIZE,mem_app_disconn_reason
+	bbit1 APP_DISC_BY_BUTTON,app_disconn_reason_clear
+	branch keyboard_power_down	
+
+keyboard_le_ll_start_encryt:
+	fetch 1,mem_device_le_reconnect_flag
+	beq 1,keyboard_le_ll_reconn_start_encryt
+	jam 20,mem_le_start_encrypt_timer
+	jam 5,mem_le_start_auto_reco_timer
+	branch mouse_le_ll_enable_start_enc_flag
+keyboard_le_ll_reconn_start_encryt:
+	call mouse_updata_le_param
+	jam 5,mem_le_start_encrypt_timer
+	branch mouse_le_ll_enable_start_enc_flag
+
+keyboard_le_conn_param_update_rsp_recieved:
+	fetch 1,mem_keyboard_le_send_conn_param_update
+	nrtn blank
+	jam 1,mem_keyboard_le_send_conn_param_update
+	jam 30,mem_keyboard_le_send_conn_param_update_timer
+	rtn	
+
+keyboard_bb_event_discovery_btn:
+	isolate1 mark_24g,mark
+	call keyboard_24g_stop,true
+	call mouse_disconnect
+	jam 0,mem_le_connect_status_flag
+	branch keyboard_start_discovery
+	
+keyboard_start_discovery:
+	bpatch patch0c_7,mem_patch0c
+	call keyboard_device_led_all_off+2
+	setarg 0
+	store 2,mem_le_battery_level_updata_timer
+	store 2,mem_otp_store_device_info_flag
+	jam 0xff,mem_kb_computer_system
+
+	fetch 2,mem_ui_state_map
+	isolate1 UI_STATE_BLE_ADV,pdata
+	call mouse_stop_le_adv,true		//reconnect adv
+	call mouse_bluetooth_fast_conn_disable
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BLE_ADV,keyboard_start_discovery_norandom
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit0 KEYBOARD_ENABLE_BLE_RANDOM_ADDRE,keyboard_start_discovery_norandom
+	fetcht 2,mem_random_addr_increase_count
+	increase 1,temp
+	storet 2,mem_random_addr_increase_count
+	storet 2,mem_le_lap+1
+	random pdata					//random ble addr
+	store 1,mem_le_lap
+keyboard_start_discovery_norandom:
+	fetch 3,mem_device_le_lap_temp
+	store 3,mem_le_lap+3
+	call app_lpm_mult_disable
+	fetch 2,mem_device_discovery_timeout
+	store 2,mem_device_discovery_timer
+	setarg 0
+	store 2,mem_device_no_data_timer
+	store 2,mem_le_battery_level_updata_timer
+	store 1,mem_device_direct_timer
+	arg KEYBOARD_STORE_MEMORY_FLAG,queue
+	call keyboard_enable_function_flag
+	call keyboard_bt_discovery_button_down_disable
+	branch mouse_check_51cmd_adv
+
+keyboard_stop_bluetooth_mode:
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BLE_CONNECTED,app_ble_disconnect
+	branch keyboard_stop_discovery
+
+keyboard_stop_discovery:
+	bpatch patch0d_0,mem_patch0d
+	setarg 0
+	store 2,mem_device_discovery_timer	
+	arg KEYBOARD_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG,queue
+	call keyboard_disable_function_flag
+	call mouse_stop_le_adv
+	fetch 1,mem_keyboard_device_poweron_timer
+	branch keyboard_device_led_all_off+2,blank
+	rtn
+
+keyboard_store_remote_bdaddr:
+	bpatch patch0d_1,mem_patch0d
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_STORE_MEMORY_FLAG
+	arg KEYBOARD_STORE_MEMORY_FLAG,queue
+	call keyboard_disable_function_flag
+	call hid_device_check_device_addr
+	call hid_device_before_store_reconn_info
+	fetch 1,mem_keyboard_device_info_store_flag
+	set1 KEYBOARD_STORE_EEPROMM_FLAG_BLE_ADDR,pdata
+	store 1,mem_keyboard_device_info_store_flag
+	branch keyboard_store_device_info_delay
+	
+/////////////////////////////////////////////////////// ble auto recognize////////////////////////////////////////////////////////////
+keyboard_le_send_att_find_by_type_value_request_ancs:
+	jam 1,mem_le_connect_ios_mac_flag
+	arg 23,rega
+	arg LE_L2CAP_CID_ATT,regb
+	call le_fifo_malloc_tx_l2cap
+	setarg ATTOP_FIND_BY_TYPE_VALUE_REQUEST
+	istore 1,contw
+	setarg 0x0001		//start handle
+	istore 2,contw
+	setarg 0xffff		//end handle
+	istore 2,contw
+	setarg 0x2800		//uuid type
+	istore 2,contw
+	arg mem_le_search_service_uuid,contr
+	branch memcpy16	
+
+keyboard_le_parse_att:
+	bpatch patch0d_2,mem_patch0d
+	copy rega,contr
+	ifetch 3,contr
+	store 3,mem_le_att_opcode
+	beq ATTOP_ERROR_RESPONSE,keyboard_le_send_att_find_by_type_value_request_mac
+	beq ATTOP_FIND_BY_TYPE_VALUE_RESPONSE,keyboard_le_parse_att_find_by_type_value_rsp
+	beq ATTOP_READ_BY_TYPE_RESPONSE,keyboard_le_send_att_read_by_type_rsp_mac
+	beq ATTOP_READ_RESPONSE,keyboard_le_parse_att_manu_resp
+	beq ATTOP_READ_BY_TYPE_REQUEST,keyboard_le_parse_att_read_by_type_request
+	beq ATTOP_READ_BLOB_REQUEST,keyboard_le_parse_att_read_blob_request
+	beq ATTOP_READ_REQUEST,keyboard_le_parse_att_read_request
+	beq ATTOP_WRITE_REQUEST,keyboard_le_parse_att_write_request
+	beq ATTOP_WRITE_COMMAND,keyboard_le_parse_att_write_command
+	branch le_parse_att2
+
+// second time read device info service differ phone from other	
+keyboard_le_send_att_find_by_type_value_request_mac:
+	fetch 1,mem_le_connect_ios_mac_flag
+	rtn blank
+	fetch 1,mem_le_connect_ios_mac_flag
+	beq 2,keyboard_le_parse_att_not_find_mac_report
+	jam 2,mem_le_connect_ios_mac_flag
+	arg 9,rega
+	arg LE_L2CAP_CID_ATT,regb
+	call le_fifo_malloc_tx_l2cap
+	setarg ATTOP_FIND_BY_TYPE_VALUE_REQUEST
+	istore 1,contw
+	setarg 0x0001		//start handle
+	istore 2,contw
+	setarg 0xffff		//end handle
+	istore 2,contw
+	setarg 0x2800		//uuid type
+	istore 2,contw
+	arg 2,loopcnt
+	arg mem_le_search_mac_uuid,contr
+	branch memcpy
+//third time read handle for manufactory name 
+keyboard_le_parse_att_find_by_type_value_rsp_mac:
+	arg 7,rega
+	arg LE_L2CAP_CID_ATT,regb
+	call le_fifo_malloc_tx_l2cap
+	setarg ATTOP_READ_BY_TYPE_REQUEST
+	istore 1,contw
+	fetcht 2,mem_le_payload_ptr
+	increase 5,temp
+	ifetch 4,temp
+	istore 4,contw
+	setarg 0x2803
+	istore 2,contw
+	rtn	
+//fourth time whether read manufactory name isn't in device info service	
+keyboard_le_send_att_read_by_type_rsp_mac:
+	fetch 1,mem_le_connect_ios_mac_flag
+	rtn blank
+	fetch 2,mem_le_l2cap_size
+	increase -2,pdata
+	div pdata,7
+	call wait_div_end
+	quotient loopcnt
+	fetch 2,mem_le_payload_ptr
+	add pdata,6,contr
+keyboard_le_check_att_read_type_manu_loop:
+	increase 3,contr
+	ifetch 2,contr
+	copy pdata,regc
+	ifetch 2,contr
+	arg 0x2a29,temp
+	isub temp,null
+	branch keyboard_le_send_att_read_by_type_rsp_manufactory,zero
+	loop keyboard_le_check_att_read_type_manu_loop
+	branch keyboard_le_parse_att_not_find_mac_report
+keyboard_le_send_att_read_by_type_rsp_manufactory:
+	arg 3,rega
+	arg LE_L2CAP_CID_ATT,regb
+	call le_fifo_malloc_tx_l2cap
+	setarg ATTOP_READ_REQUEST
+	istore 1,contw
+	copy regc,pdata
+	istore 2,contw
+	rtn	
+//fifth time 	read manufactory name make sure is Apple Inc
+keyboard_le_parse_att_manu_resp:
+	fetch 1,mem_le_connect_ios_mac_flag
+	rtn blank
+	fetch 2,mem_le_l2cap_size
+	arg 9,loopcnt
+	fetch 2,mem_le_payload_ptr
+	add pdata,5,rega	
+	arg mem_le_search_mac_manu_name,regb
+	call string_compare 
+	branch keyboard_le_parse_att_find_mac_report,zero
+	branch  keyboard_le_parse_att_not_find_mac_report
+
+keyboard_le_parse_att_find_by_type_value_rsp:
+	fetch 1,mem_le_connect_ios_mac_flag
+	rtn blank
+	fetch 1,mem_le_connect_ios_mac_flag
+	beq 2,keyboard_le_parse_att_find_by_type_value_rsp_mac
+keyboard_le_parse_att_find_ios_report:	
+	jam SYSTEM_OS_IOS,mem_kb_computer_system
+	branch keyboard_store_computer_system_ble
+keyboard_le_parse_att_not_find_mac_report:	
+	fetch 1,mem_le_conn_peer_addr_type
+	store 1,mem_kb_computer_system
+	branch keyboard_store_computer_system_ble
+keyboard_le_parse_att_find_mac_report:	
+	jam SYSTEM_OS_MAC,mem_kb_computer_system
+keyboard_store_computer_system_ble:
+	jam 0,mem_le_connect_ios_mac_flag
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit0 KEYBOARD_ENABLE_OTP,keyboard_store_computer_system_info
+	jam 1,mem_otp_store_system_flag
+	fetch 1,mem_otp_store_device_info_flag
+	rtn blank
+	branch keyboard_wirte_otp_ble
+
+keyboard_store_computer_system_info:
+	fetch 1,mem_keyboard_device_info_store_flag
+	set1 KEYBOARD_STORE_EEPROMM_FLAG_COMPUTER_SYSTEM,pdata
+	store 1,mem_keyboard_device_info_store_flag
+	branch keyboard_store_device_info_delay
+
+keyboard_le_parse_att_read_by_type_request:
+	call le_get_search_handle_start_end_common
+	call le_get_search_att_type
+keyboard_le_send_att_read_by_type_response:
+	fetcht 2,mem_le_search_handle_start
+	storet 2,mem_temp
+	call le_init_attlist_search
+	call le_att_get_handle_ptr2
+	increase -2,contr
+	copy contr,pdata
+	store 2,mem_le_cur_attlist_start_ptr
+
+	fetcht 2,mem_le_search_att_type
+	setarg UUID_CHRCTR_PNP_ID
+	isub temp,null
+	branch keyboard_le_send_att_read_by_type_res_pnp_id,zero
+	branch le_send_att_read_by_type_response+8
+keyboard_le_send_att_read_by_type_res_pnp_id:
+	fetch 1,mem_keyboard_le_change_vid_pid_flag
+	branch le_send_att_read_by_type_response+8,blank
+	call le_att_get_uuid_ptr
+	branch le_send_att_error_response_notfound,blank
+	arg mem_keyboard_le_change_vid_pid_flag+1,contr
+	force 11,pdata		// length +1
+	branch le_send_att_read_by_type_res_not_characteristic+9
+
+keyboard_le_parse_att_read_blob_request:
+	ifetch 2,contr
+	store 2,mem_le_att_offset
+	iforce rega
+	fetcht 2,mem_le_att_handle
+	fetch 2,mem_le_pairing_handle
+	isub temp,null
+	nbranch le_send_att_read_blob_response,zero
+	fetch 2,mem_le_att_offset
+	sub pdata,66,null
+	nbranch keyboard_le_send_att_read_blob_response,zero
+
+	setarg 23
+	copy pdata,rega
+	copy pdata,regc
+	call le_fifo_malloc_tx_l2cap_gatt
+	setarg ATTOP_READ_BLOB_RESPONSE
+	istore 1,contw
+	arg mem_keyboard_blob_response_consumer_customize,contr
+	add regc,-1,loopcnt
+	branch memcpy_fast
+
+keyboard_le_send_att_read_blob_response:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit1 KEYBOARD_ENABLE_MOUSE,le_send_att_read_blob_response
+	fetch 2,mem_keyboard_le_hid_map
+	copy pdata,contr
+	ifetch 2,contr
+	branch le_send_att_read_blob_response+3
+
+keyboard_le_parse_att_read_request:
+	fetcht 2,mem_le_att_handle
+	fetch 1,mem_le_configuration
+	bbit1 BIT_BLE_READ_AUTH,keyboard_le_send_att_read_response_check_auth
+//input:temp is handle
+keyboard_le_send_att_read_response:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit0 KEYBOARD_ENABLE_ADC,keyboard_le_send_att_read_response+3
+	bbit0 KEYBOARD_ENABLE_LE_BATTERY_SERVICE_CANCEL,keyboard_le_send_att_read_response_next
+	fetch 2,mem_le_att_handle
+	beq 0x30,le_send_att_error_response_notfound
+keyboard_le_send_att_read_response_next:	
+	fetch 2,mem_le_att_handle
+	beq 0x05,keyboard_le_send_att_appearance
+	beq 0x10,keyboard_le_send_att_pnp_id
+keyboard_le_send_att_read_response_next_1:
+	fetcht 2,mem_le_att_handle
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit1 KEYBOARD_ENABLE_MOUSE,le_send_att_read_response
+	fetch 2,mem_le_pairing_handle
+	isub temp,null
+	nbranch le_send_att_read_response,zero
+	call le_get_search_max_mtu_data
+	fetcht 2,mem_keyboard_le_hid_map
+	copy temp,contr
+	ifetcht 2,contr
+	increase 1,temp
+	call not_greater_than
+	branch le_send_att_read_response_less
+	
+keyboard_le_send_att_appearance:
+	arg mem_keybord_appearance,contr
+	force 3,pdata		// length +1
+	branch le_send_att_read_response_less
+	
+keyboard_le_send_att_pnp_id:
+	fetch 1,mem_keyboard_le_change_vid_pid_flag
+	branch keyboard_le_send_att_read_response_next_1,blank
+	arg mem_keyboard_le_change_vid_pid_flag+1,contr
+	force 8,pdata		// length +1
+	branch le_send_att_read_response_less
+
+keyboard_le_send_att_read_response_check_auth:
+	fetch 2,mem_le_pairing_handle
+	isub temp,null
+	nbranch keyboard_le_send_att_read_response,zero
+	call le_check_encrypt_state
+	nbranch keyboard_le_send_att_read_response_next,user
+	branch le_send_att_read_response_error_insufficient_auth
+
+keyboard_le_parse_att_write_request:		// mac os 10.9.5 reconnect can't move
+	copy contr,rega
+	fetch 2,mem_le_l2cap_size
+	add pdata,-3,regb
+	call le_writeatt_cb
+	call keyboard_le_parse_att_write_command+1		//MAC  CAPS
+	branch hid_device_le_parse_att_write_request
+
+keyboard_le_parse_att_write_command:
+	call le_parse_att_write_command
+	fetch 1,mem_device_fast_conn_flag
+	beq 0xff,keyboard_le_fast_conn_led_get
+	fetch 2,mem_le_att_handle
+	beq 0x25,keyboard_le_led_get
+	rtn
+keyboard_le_fast_conn_led_get:	
+	fetch 2,mem_le_att_handle
+	beq 0x21,keyboard_le_led_get
+	rtn
+	
+keyboard_le_led_get:
+	fetch 1,mem_le_rxbuf+9
+	store 1,mem_keyboard_led_status
+	rtn
+
+///////////////////////////////usb ///////////////////////////////////////////////////////////////////////
+keyboard_usb_mode_start:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 MOUSE_ENABLE_USB
+	call keyboard_usb_check_enable
+	branch keyboard_usb_interface_check_power_on
+
+keyboard_usb_check_enable:
+	fetch 9,mem_keyboard_usb_vid_pid
+	store 9,mem_usb_vid_pid
+	setarg keyboard_usb_config_param
+	store 2,mem_cb_usb_config
+	jam USB_INTERFACE_INSERT,mem_usb_vdd_status_current
+	rtn
+
+keyboard_usb_config_param:
+	jam DONGLE_KB_BIND_SUCCESS,mem_usb_keyboard_flag
+	jam 0x01,mem_usb_tx_interval
+	call usb_tx_interval_config
+	call keyboard_usb_vid_pid_config
+	fetch 1,mem_usb_keyboard_flag
+	branch dongle_usb_hid_icon_config+1
+
+keyboard_usb_vid_pid_config:
+	fetch 1,mem_usb_vid_pid
+	rtn blank
+	fetch 1,mem_usb_keyboard_flag
+	beq DONGLE_KB_BIND_SUCCESS,dongle_usb_vid_pid_for_suit
+	branch dongle_usb_vid_pid_for_mouse_only_auto_pair
+
+keyboard_usb_interface_check_power_on:	// last=0, current = insert
+	fetch 1,mem_usb_vdd_status_current
+	beq USB_INTERFACE_INSERT,keyboard_usb_insert
+keyboard_usb_vdd_status_store:	
+	fetch 1,mem_usb_vdd_status_current
+	store 1,mem_usb_vdd_status_last
+	rtn
+keyboard_usb_insert:
+	call keyboard_usb_vdd_status_store
+	setarg 0
+	store 2,mem_24g_pair_timeout
+	store 2,mem_24g_reconn_timeout
+	jam 0,mem_lpm_mode
+	fetch 1,mem_usb_wait_updata_timer
+	call usb_init,blank
+	jam 50,mem_usb_wait_updata_timer
+	rtn
+
+keyboard_usb_isr:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_USB
+	fetch 1,mem_device_flag
+	rtnne MODE_USB_DEVICE
+	branch usb_isr
+
+keyboard_usb_mode:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtnbit0 KEYBOARD_ENABLE_USB
+	fetch 1,mem_device_flag
+	rtnne MODE_USB_DEVICE
+	fetch 1,core_usb_addr
+	store 1,mem_usb_addr
+	rtnbit0 7
+	jam 0,mem_usb_wait_updata_timer
+	setarg 0
+	store 2,mem_device_no_data_timer
+	call keyboard_24g_stop
+	call keyboard_stop_bluetooth_mode
+	call keyboard_motion
+	nrtn user
+	fetch 1,mem_customer_key
+	beq 1,hid_device_push_keyboard_data_to_usb	
+	branch hid_device_push_mouse_data_to_usb
+
+keyboard_usb_tx_kb_normal_data:
+	jam 0,mem_usb_ep1_data
+	arg 9,loopcnt
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit1 KEYBOARD_ENABLE_MAGIC_KEYBOARD,usb_tx_kb_normal_data+4
+	branch usb_tx_kb_normal_data+2	
+
+keyboard_push_n_key_rollover_key_data_to_usb:
+	call dongle_usb_tx_enable_ep2
+	jam USB_EP2_N_KEY_ROLLOVER,mem_usb_ep2_data
+	setarg KB_N_KEY_ROLLOVER_REPORT_ID
+	store 1,mem_usb_kb_n_key_rollvoer_data
+	arg mem_keyboard_n_key_rollover_data+1,contr
+	arg mem_usb_kb_n_key_rollvoer_data+1,contw
+	arg 14,loopcnt
+	branch memcpy
+
+//////////////////////public///////////////////////////////////////////////////////
+keyboard_ui_ipc_send_event:
+	fetch 1,mem_fifo_temp
+	arg 8,loopcnt
+	arg mem_ipc_fifo_bt2c51,contr
+ui_ipc_fifo_check:
+	ifetcht 1,contr
+	isub temp,null
+	rtn zero
+	loop ui_ipc_fifo_check
+	branch ui_ipc_send_event+3
+
+keyboard_enable_function_flag:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	qset1 pdata
+	store KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtn
+keyboard_disable_function_flag:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	qset0 pdata
+	store KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	rtn
+
+keyboard_bt_discovery_button_down_enable:
+	arg KEYBOARD_BT_DISCOVERY_BUTTON_DOWN_FLAG,queue
+	branch keyboard_enable_function_flag
+keyboard_bt_discovery_button_down_disable:
+	arg KEYBOARD_BT_DISCOVERY_BUTTON_DOWN_FLAG,queue
+	branch keyboard_disable_function_flag
+
+
Index: program/app_module.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/app_module.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/app_module.prog	(working copy)
@@ -0,0 +1,1390 @@
+
+ifdef COMPILE_MODULE
+
+module_init:	
+	branch module_lpm_uart_init,wake
+//	branch module_lpm_init, wake
+	call le_modified_name
+	setarg module_process_idle
+	store 2,mem_cb_idle_process
+	setarg module_process_bb_event
+	store 2,mem_cb_bb_event_process
+	setarg module_lpm_lock
+	store 2,mem_cb_check_wakelock
+	setarg module_hci_cmd_transmit_le_notify
+	store 2,mem_cb_ble_transmit
+	setarg module_le_receive_data
+	store 2,mem_cb_att_write
+	setarg module_bb_event_timer
+	store 2,mem_cb_event_timer
+
+ifdef COMPILE_WECHAT
+	setarg module_wechat_rx_push_data
+	store 2,mem_module_wechat_rx_push_data_cb
+endif
+	bpatch patch0d_4,mem_patch0d
+	call module_lpm_uart_init
+	call module_gpio_init
+	branch module_hci_event_enter_standby_mode
+
+/*
+	function name:uart init by mem
+	input:
+		mem_module_uart_rx_buffermem_module_uart_rx_buffer_end
+		mem_module_uart_tx_buffermem_module_uart_tx_buffer_end
+		mem_module_uarta_baud_rate
+		bit0 of mem_module_flag
+*/
+module_lpm_uart_init:
+	fetch 1,core_uart_ctrl
+	set0 BIT_UART_CONTROL_ENABLE,pdata
+	store 1,core_uart_ctrl
+	fetch 8,mem_module_uart_rx_buffer
+	call uarta_init_dma_mem
+	fetch uart_baud_len,mem_module_uarta_baud_rate
+	call uarta_init_baud_rate
+	call uart_clock_select_main_freq_crystal
+	jam gpcfg_uart_txd,core_gpio_conf+HCI_UART_TX_GPIO_NUM
+	jam gpcfg_uart_rxd|gpcfg_pullup,core_gpio_conf+HCI_UART_RX_GPIO_NUM
+	jam gpcfg_uart_rts,core_gpio_conf+HCI_UART_RTS_GPIO_NUM
+	jam gpcfg_uart_cts,core_gpio_conf+HCI_UART_CTS_GPIO_NUM
+
+	arg FUN_UART_CONTROL_ENABLE|FUN_UART_CONTROL_SETTING_RATE_BAUD,temp
+	fetch 2,mem_module_flag
+	isolate1 MODULE_FLAG_UART_FLOW_CONTROL,pdata
+	setflag true,BIT_UART_CONTROL_FLOW_CONTROL,temp
+	storet 1,core_uart_ctrl
+	rtn
+
+/*
+	function:init uart & spp clock by lpm wake
+*/
+//module_lpm_init:
+//	branch module_lpm_uart_init
+
+
+
+/*
+	function name:module_gpio_init
+	init connect state & lpm wake up
+*/
+module_gpio_init:
+	fetcht 1,mem_module_connect_state_gpio
+	call gpio_config_output
+	call module_set_conn_pin_low
+	fetcht 1,mem_module_wake_up_gpio
+	branch gpio_config_input
+
+module_lpm_lock:
+	fetcht 1,mem_module_wake_up_gpio
+	call gpio_get_bit
+	nbranch app_put_lpm_wake_lock,true
+	branch app_get_lpm_wake_lock
+
+
+/*
+	function name:chip idle process callback
+	check uart Tx buffer from SPP Credit&check l2cap fifo&check uart rx data
+*/
+module_process_idle:
+	call l2cap_malloc_is_fifo_full
+	nrtn blank
+	branch module_process_check_hci_command_complete
+
+	
+module_process_bb_event:
+	copy regc,pdata
+	beq BT_EVT_LE_CONNECTED,module_process_le_conn
+	beq BT_EVT_LE_DISCONNECTED,module_process_bb_even_le_disconn
+	beq BT_EVT_LE_PAIRING_FAIL,module_hci_event_le_pairing_fail
+	beq BT_EVT_LE_PAIRING_SUCCESS,module_hci_event_le_pairing_success
+	beq BT_EVT_LE_START_ENC,module_hci_event_start_enc
+	beq BT_EVT_LE_PAUSE_ENC,module_hci_event_pause_enc
+	beq BT_EVT_LE_TK_GENERATE,module_hci_event_le_tk
+	beq BT_EVT_STORE_NVRAM,module_hci_event_store_device
+	beq BT_EVT_LE_LTK_LOST,module_process_ble_ltk_lost
+	beq BT_EVT_LE_UPDATE_PHY,module_process_ble_update_phy
+	beq BT_EVT_LE_GET_PASSKEY,module_hci_event_passkey_entry_mode
+ifdef SECURE_CONNECTION
+	beq BT_EVT_LE_GKEY_GENERATE,module_hci_event_gkey_generate
+endif
+	rtn
+
+
+	
+module_process_bb_even_le_disconn:
+	call le_clr_config_more_data
+	jam 0,mem_module_hci_notify_len
+	call module_disconn_start
+	branch module_hci_event_le_disconnect
+
+
+
+	
+module_process_le_conn:
+//	call le_send_att_exchange_mtu_requset
+	call module_conn_start
+	fetch 1,mem_module_le_lpm_mult
+	store 1,mem_lpm_mult
+	branch module_hci_event_le_connect
+
+
+
+module_disconn_start:
+	call module_start_adv_discovery_by_command
+	branch module_set_conn_pin_high
+
+
+module_process_ble_ltk_lost:
+	call le_send_reject_ind
+	branch le_send_smp_security_request
+
+module_process_ble_update_phy:
+	branch module_hci_event_le_update_phy
+
+
+module_set_conn_pin_high:
+	fetcht 1,mem_module_connect_state_gpio
+	branch gpio_out_active
+
+module_conn_start:
+	call module_stop_adv_discovery
+	branch module_set_conn_pin_low
+	
+module_stop_adv_discovery:
+	fetch 1,mem_module_state
+	isolate1 MOUDLE_STATE_BLE_BIT,pdata
+	call app_ble_stop_adv,true
+	rtn
+module_set_conn_pin_low:
+	fetcht 1,mem_module_connect_state_gpio
+	branch gpio_out_inactive
+
+
+/*
+	function name:check hci command complete
+	hci command format:
+	typedef struct HciFormat
+	{
+		uint8_t HciType;
+		uint8_t HciOpcode;
+		uint8_t HciPayloadLen;
+		uint8_t HciPayload[HciPayloadLen];
+	}
+*/
+module_process_check_hci_command_complete:
+	fetch 1,core_uart_status
+	rtnbit1 UART_STATUS_RX_FIFO_EMPTY  //rx no data
+	call uarta_prepare_rx
+	ifetch 1,contru
+	bne 0x01,module_hci_in_excp	//HciType != 0x01
+	fetch 2,core_uart_rxitems
+	sub pdata,2,null
+	rtn positive
+	ifetch 1,contru
+	store 1,mem_module_uart_opcode
+	ifetcht 1,contru
+	copy contru,rega
+	storet 1,mem_module_uart_len
+	add temp,3,temp
+	fetch 2,core_uart_rxitems
+	isub temp,temp
+	nrtn positive
+	jam HCI_DISCARD_PACKET,mem_module_temp_nl_discard_packet
+	call module_hci_cmd_control
+	fetch 1,mem_module_temp_nl_discard_packet
+	rtneq HCI_NOT_DISCARD_PACKET
+	branch module_hci_dicard_packet //discard this packet
+
+module_hci_in_excp:
+	call delay_10ms
+	call module_hci_event_invalid_packet
+	branch module_hci_release_except
+
+
+module_hci_release_except:
+	bpatch patch0d_5,mem_patch0d
+	call uarta_prepare_rx
+	fetch 2,core_uart_rxitems
+	rtn blank
+	iadd contru,contru
+	branch module_hci_dicard_bytes
+
+module_hci_dicard_packet:
+	call uarta_prepare_rx
+	increase 2,contu
+	ifetch 1,contu
+	iadd contu,contu
+module_hci_dicard_bytes:
+	branch uarta_rxdone
+	
+/*********************HCI CONTROL*********************/
+module_hci_cmd_control:
+	bpatch patch0d_6,mem_patch0d
+	fetch 1,mem_module_uart_opcode
+	beq HCI_CMD_SET_LE_ADDR_REQ,module_hci_cmd_set_le_addr
+	beq HCI_CMD_SET_VISIBILITY_REQ,module_hci_cmd_set_visibility	
+	beq HCI_CMD_SET_LE_NAME_REQ,module_hci_cmd_set_le_name
+	beq HCI_CMD_LE_DATA_REQ,module_hci_cmd_receive_le_data
+	beq HCI_CMD_STATUS_IRQ,module_hci_cmd_inquire_status
+//	beq HCI_CMD_SET_UARTCONTROL_REQ,module_hci_cmd_set_uart_control_mode
+	beq HCI_CMD_SET_UART_BAUD_REQ,module_hci_cmd_set_uart_baud
+	beq HCI_CMD_VERSION_REQ,module_hci_cmd_version_request
+	beq HCI_CMD_BLE_DISCONNECT,module_hci_cmd_ble_disconnect
+	beq HCI_CMD_SET_NVRAM_REQ,module_hci_cmd_set_nvram
+//	beq HCI_CMD_CONFIRM_GKEY,module_hci_cmd_confirm_gkey
+	beq HCI_CMD_AUTO_ADV_SCAN,module_hci_cmd_auto_adv
+	beq HCI_CMD_POWER_REQ,module_hci_cmd_power_request
+	beq HCI_CMD_POWER_SET,module_hci_cmd_power_set
+	beq HCI_CMD_PASSKEY_ENTRY,module_hci_cmd_passkey_entry
+//	beq HCI_CMD_SET_GPIO,module_hci_cmd_set_gpio
+//	beq HCI_CMD_READ_GPIO,module_hci_cmd_read_gpio
+	beq HCI_CMD_LE_SET_PAIRING,module_hci_cmd_le_set_pairing_mode
+//	beq HCI_CMD_LE_SET_ADV_DATA,module_hci_cmd_le_set_adv_data
+	beq HCI_CMD_LE_SET_SCAN_DATA,module_hci_cmd_le_set_scan_data
+	beq HCI_CMD_LE_SEND_CONN_UPDATE_REQ,module_hci_cmd_le_send_conn_update_req
+	beq HCI_CMD_LE_SET_ADV_PARM,module_hci_cmd_set_le_adv_parameter
+	beq HCI_CMD_LE_START_PAIRING,module_hci_cmd_le_start_pairing
+	beq HCI_CMD_SET_WAKE_GPIO,module_hci_cmd_set_wake_gpio
+	beq HCI_CMD_SET_TX_POWER,module_hci_cmd_set_tx_power
+	beq HCI_CMD_LE_CONFIRM_GKEY,module_hci_cmd_le_confirm_gkey
+//	beq HCI_CMD_REJECT_JUSTWORK,module_hci_cmd_set_reject_justwork_flag
+	beq HCI_CMD_RESET_CHIP_REQ,module_hci_cmd_reset_chip
+//	beq HCI_CMD_LE_SET_FIXED_PASSKEY,module_hci_cmd_le_set_fixed_passkey
+	beq HCI_CMD_DELETE_CUSTOMIZE_SERVICE,module_hci_cmd_delete_customize_service
+	beq HCI_CMD_ADD_SERVICE_UUID,module_hci_cmd_add_service_uuid
+	beq HCI_CMD_ADD_CHARACTERISTIC_UUID,module_hci_cmd_add_characteristic_uuid
+	beq HCI_CMD_PASSKEY_ENTRY_INPUT,module_hci_cmd_le_passkey_entry_input
+//	beq HCI_CMD_LE_CREAT_CONN,module_hci_cmd_le_create_conn
+//	beq HCI_CMD_BLE_SET_PHY,module_hci_cmd_ble_set_phy
+//	beq HCI_CMD_BLE_READ_CURRENT_PHY,module_hci_cmd_ble_read_current_phy
+//	beq HCI_CMD_BLE_SET_DLE,module_hci_cmd_ble_set_dle
+//	beq HCI_CMD_READ_CHIP_DATA,module_hci_cmd_read_chip_data
+//	beq HCI_CMD_WRITE_CHIP_DATA,module_hci_cmd_write_chip_data
+//ifdef COMPILE_WECHAT
+//	beq HCI_CMD_WECHAT_SEND_DATA,module_hci_cmd_wechat_send_data
+//endif
+//	beq HCI_CMD_CLOSE_LPM,module_hci_cmd_close_lpm
+	branch  module_hci_event_receive_invalid_cmd
+
+/*********************HCI COMMAND*********************/
+
+
+//command opcode 0x01
+module_hci_cmd_set_le_addr:
+	fetch 1,mem_module_uart_len
+	bne 6,module_hci_event_receive_invalid_cmd
+	ifetch 6,contru
+	store 6,mem_le_lap
+	branch module_hci_event_receive_valid_cmd
+
+
+//command opcode 0x02
+module_hci_cmd_set_visibility:
+	fetch 1,mem_module_uart_len
+	bne 1,module_hci_event_receive_invalid_cmd
+	ifetcht 1,contru
+	storet 1,mem_module_bluetooth_stauts_by_command
+	call module_hci_event_receive_valid_cmd
+	fetch 2,mem_ui_state_map
+	rtnbit1 UI_STATE_BLE_CONNECTED
+
+module_start_adv_discovery_by_command:
+moudle_start_adv_by_command:
+	fetch 1,mem_module_state
+	isolate1 MOUDLE_STATE_BLE_BIT,pdata
+	nrtn true
+	fetcht 1,mem_module_bluetooth_stauts_by_command
+	isolate1 2,temp
+	branch app_ble_start_adv,true
+	branch app_ble_stop_adv
+
+
+
+//command opcode 0x04
+module_hci_cmd_set_le_name:
+	arg 29,pdata
+	arg mem_le_name_len,contw
+	call module_hci_cmd_receive_store_mem
+	branch le_modified_name
+
+
+
+//command opcode 0x09
+module_hci_cmd_receive_le_data:
+	fetch 2,mem_ui_state_map
+	bbit0 UI_STATE_BLE_CONNECTED,module_hci_event_receive_invalid_cmd
+	call module_check_ble_encrypt_state
+	branch module_hci_event_receive_invalid_cmd,user
+	jam HCI_NOT_DISCARD_PACKET,mem_module_temp_nl_discard_packet 
+	fetch 2,mem_module_flag
+	bbit1 MODULE_FLAG_BLE_DATA_FINISH,module_hci_cmd_receive_le_data_finish
+	fetch 1,mem_module_hci_notify_len
+	nrtn blank
+	jam HCI_DISCARD_PACKET,mem_module_temp_nl_discard_packet 
+	ifetch 2,contru		//handle
+	store 2,mem_module_hci_notify_handle
+	storer contru,2,mem_module_hci_nofiy_addr
+	fetch 1,mem_module_uart_len
+	pincrease -2
+	nbranch module_hci_event_receive_invalid_cmd,positive
+	branch module_hci_event_receive_invalid_cmd,zero
+	store 1,mem_module_hci_notify_len
+	fetcht 2,mem_module_hci_notify_handle
+	increase -1,temp
+	call le_att_get_handle_ptr2
+	branch module_hci_cmd_transmit_handle_error,blank
+	ifetcht 4,contr		//flag
+	setarg 0x01280302
+	isub temp,null
+	nbranch module_hci_cmd_transmit_handle_error,zero
+	ifetch 1,contr
+	store 1,mem_module_hci_notify_type
+	and_into 0x30,pdata
+	branch module_hci_cmd_transmit_handle_error,blank
+	jam HCI_NOT_DISCARD_PACKET,mem_module_temp_nl_discard_packet
+	call le_set_config_more_data
+	call module_hci_cmd_transmit_le_notify
+	call module_hci_cmd_transmit_le_notify
+	call module_hci_cmd_transmit_le_notify
+	fetch 2,mem_module_flag
+	rtnbit0 MODULE_FLAG_BLE_DATA_FINISH
+module_hci_cmd_receive_le_data_finish:
+	jam HCI_DISCARD_PACKET,mem_module_temp_nl_discard_packet 
+	call module_clear_le_tx_data_flag
+	branch module_hci_event_receive_valid_cmd
+
+module_hci_cmd_transmit_handle_error:
+	jam 0,mem_module_hci_notify_len
+	jam HCI_DISCARD_PACKET,mem_module_temp_nl_discard_packet 
+	call module_clear_le_tx_data_flag
+	branch module_hci_event_receive_invalid_cmd
+
+module_hci_cmd_transmit_le_notify:
+	fetch 1,mem_module_hci_notify_len
+	rtn blank
+	call le_fifo_check_nearly_full
+	nrtn blank				//no fifo
+	call module_get_le_remote_mtu
+	bpatch patch0d_7,mem_patch0d
+	fetch 2,mem_le_local_mtu
+	call not_greater_than
+	copy pdata,temp
+	fetch 1,mem_le_l2cap_att_states
+	rtnbit1 BLE_L2CAP_RECV_CONFIRMATION_PACKET
+	add temp,-3,pdata		//sub handle and opcode
+	arg 251,temp
+	call not_greater_than
+	fetcht 1,mem_module_hci_notify_len
+	call not_greater_than
+	copy pdata,rega
+	copy temp,pdata
+	isub rega,pdata
+	store 1,mem_module_hci_notify_len
+	call module_hci_cmd_transmit_le_notify_malloc_l2cap
+	fetch 2,mem_module_hci_nofiy_addr
+	copy pdata,contru
+	copy rega,loopcnt
+	call uart_copy_rx_bytes_fast
+	copy contru,pdata
+	store 2,mem_module_hci_nofiy_addr
+	fetch 1,mem_module_hci_notify_len
+	nrtn blank
+	branch module_set_le_tx_data_flag
+
+module_hci_cmd_transmit_le_notify_malloc_l2cap:
+	fetcht 2,mem_module_hci_notify_handle
+	fetch 1,mem_module_hci_notify_type
+	bbit1 BIT_CHARACTERISTIC_INDICATE,le_att_malloc_tx_indication
+	bbit1 BIT_CHARACTERISTIC_NOTIFY,le_att_malloc_tx_notify
+	rtn
+
+
+//output: temp is master mtu
+module_get_le_remote_mtu:
+	arg 0x17,temp
+	fetch 2,mem_module_flag
+	rtnbit1 MODULE_FLAG_BLE_SEND_MTU23
+	fetcht 2,mem_le_remote_mtu
+	rtn
+
+module_check_ble_encrypt_state:
+	fetch 2,mem_module_flag
+	bbit1 MODULE_FLAG_BLE_DATA_ENCRYPT,le_check_encrypt_state
+	branch disable_user
+	
+
+//command opcode 0x0b
+module_hci_cmd_inquire_status:
+	branch module_hci_event_status_res
+
+
+
+
+//command opcode 0x0e
+//module_hci_cmd_set_uart_control_mode:
+//	ifetch 1,contru
+//	fetcht 1,mem_module_flag
+//	nsetflag blank,MODULE_FLAG_UART_FLOW_CONTROL,temp
+//	storet 1,mem_module_flag
+//	fetcht 1,core_uart_ctrl
+//	nsetflag blank,BIT_UART_CONTROL_FLOW_CONTROL,temp
+//	storet 1,core_uart_ctrl
+// 	branch module_hci_event_receive_valid_cmd
+
+ 	
+//command opcode 0x0f
+module_hci_cmd_set_uart_baud:
+	fetchr loopcnt,1,mem_module_uart_len
+	call string2dec_from_uart
+	call uart_calc_baud_rate_config
+	store uart_baud_len,mem_module_uarta_baud_rate
+	call module_hci_event_receive_valid_cmd
+	call wait_uarttx
+	fetch uart_baud_len,mem_module_uarta_baud_rate
+	branch uarta_init_baud_rate
+
+
+//command opcode 0x10
+module_hci_cmd_version_request:
+	arg 2,rega
+	arg mem_soft_version_num,regb
+	arg 0,temp
+	branch module_hci_event_set_cmd
+
+
+	
+//command opcode 0x12
+module_hci_cmd_ble_disconnect:
+	fetch 2,mem_ui_state_map
+	bbit0 UI_STATE_BLE_CONNECTED,module_hci_event_receive_invalid_cmd
+module_hci_cmd_ble_disconnect_doing:
+	call module_hci_event_receive_valid_cmd
+	branch app_ble_disconnect
+
+
+
+
+//command opcode 0x26
+module_hci_cmd_set_nvram:
+	fetchr loopcnt,1,mem_module_uart_len
+	fetch 2,mem_nv_data_ptr
+	icopy contw
+	call uart_copy_rx_bytes_fast
+	branch module_hci_event_receive_valid_cmd
+
+
+//command opcode 0x28
+//module_hci_cmd_confirm_gkey:
+//	fetch 2,mem_ui_state_map
+//	bbit1 UI_STATE_BLE_CONNECTED,module_hci_cmd_le_confirm_gkey
+//	branch module_hci_event_receive_invalid_cmd
+
+
+//command opcode 0x2a
+module_hci_cmd_auto_adv:
+	arg 0x40,loopcnt
+	arg mem_le_adv_data_len,contw
+	call clear_mem
+	setarg 0
+	store 1,mem_regb
+	copy rega,contru
+module_hci_cmd_auto_adv_loop:
+	copy contru,pdata
+	store 2,mem_regc
+	call module_hci_cmd_auto_adv_adv_analys
+
+	fetch 1,mem_regb
+	fetcht 1,mem_temp
+	increase 1,temp
+	iadd temp,pdata
+	store 1,mem_regb
+
+	sub pdata,31,null
+	nbranch module_hci_cmd_auto_adv_store_scan,positive
+module_hci_cmd_auto_adv_store_adv:
+	fetcht 1,mem_le_adv_data_len
+	setarg mem_le_adv_data
+	iadd temp,pdata
+	store 2,mem_contw
+	fetcht 1,mem_temp
+	increase 1,temp
+	fetch 1,mem_le_adv_data_len
+	iadd temp,pdata
+	store 1,mem_le_adv_data_len
+	branch module_hci_cmd_auto_adv_store_common
+module_hci_cmd_auto_adv_store_scan:
+	fetcht 1,mem_le_scan_data_len
+	setarg mem_le_scan_data
+	iadd temp,pdata
+	store 2,mem_contw
+	fetcht 1,mem_temp
+	increase 1,temp
+	fetch 1,mem_le_scan_data_len
+	iadd temp,pdata
+	store 1,mem_le_scan_data_len
+module_hci_cmd_auto_adv_store_common:
+	fetch 2,mem_contw
+	copy pdata,contw
+	fetch 2,mem_regc
+	copy pdata,contru
+
+	copy temp,loopcnt
+	call uart_copy_rx_bytes_fast
+
+	fetch 1,mem_module_uart_len
+	fetcht 1,mem_regb
+	isub temp,null
+	nbranch  module_hci_cmd_auto_adv_loop,zero
+	branch module_hci_event_receive_valid_cmd
+
+//block of adv len in mem_temp
+module_hci_cmd_auto_adv_adv_analys:
+	ifetch 1,contru
+	store 1,mem_temp
+	ifetch 1,contru
+	store 1,mem_rega
+	rtn
+
+
+//command opcode 0x2b
+module_hci_cmd_power_request:
+	arg 0,temp
+	arg 2,rega
+	fetch 2,mem_module_vdd_quotient
+	store 2,mem_event_cmd_response_content
+	arg mem_event_cmd_response_content,regb
+	branch module_hci_event_set_cmd
+
+
+//command opcode 0x2c
+module_hci_cmd_power_set:
+	fetch 1,mem_module_uart_len
+	bne 1,module_hci_event_receive_invalid_cmd
+	ifetch 1,contru
+	store 1,mem_module_read_vdd_flag
+	setarg 0x00
+	store 2,mem_module_vdd_quotient
+	branch module_hci_event_receive_valid_cmd
+
+
+//command opcode 0x30
+module_hci_cmd_passkey_entry:
+	fetch 1,mem_module_uart_len
+	bne 4,module_hci_event_receive_invalid_cmd
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BLE_CONNECTED,module_hci_cmd_le_passkey_entry_input
+	branch module_hci_event_receive_invalid_cmd
+
+
+
+//command opcode 0x31
+//module_hci_cmd_set_gpio:
+//	fetch 1,mem_module_uart_len
+//	bne 3,module_hci_event_receive_invalid_cmd
+//	ifetch 1,contru
+//	beq HCI_CMD_CONFIG_GPIO_INPUT,module_set_gpio_input
+//	beq HCI_CMD_CONFIG_GPIO_OUTPUT,module_set_gpio_output
+//	branch module_hci_event_receive_invalid_cmd
+
+//module_set_gpio_input:
+//	call module_hci_event_receive_valid_cmd
+//	ifetcht 1,contru
+//	ifetch 1,contru
+//	beq GPIO_INPUT_HIGH_IMPEDANCE,gpio_set_high_impedance
+//	nsetflag blank,7,temp
+//	branch gpio_config_input
+
+//module_set_gpio_output:
+//	call module_hci_event_receive_valid_cmd
+//	ifetcht 1,contru
+//	ifetch 1,contru	
+//	branch gpio_out_active,blank
+//	branch gpio_out_inactive
+
+
+//command opcode 0x32
+//module_hci_cmd_read_gpio:
+//	fetch 1,mem_module_uart_len
+//	bne 1,module_hci_event_receive_invalid_cmd
+//	ifetcht 1,contru
+//	call gpio_get_bit
+//	setarg 0x0
+//	nsetflag true,0,pdata
+//	arg 1,rega
+//	store 2,mem_event_cmd_response_content
+//	arg mem_event_cmd_response_content,regb
+//	arg 0,temp
+//	branch module_hci_event_set_cmd
+
+
+//command opcode 0x33
+module_hci_cmd_le_set_pairing_mode:
+	ifetch 1,contru
+ifdef SECURE_CONNECTION
+	copy pdata,temp
+	beq LE_PAIRING_MODE_SECURE_CONNECT_JUSTWORK,module_le_set_pairing_mode_secure_justwork
+	beq LE_PAIRING_MODE_SECURE_CONNECT_NUMERIC,module_le_set_pairing_mode_secure_numeric
+	beq LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY,module_le_set_pairing_mode_secure_passkey
+	beq LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY_RES_INPUT,module_le_set_pairing_mode_secure_passkey_res_input
+endif 
+	store 1,mem_le_pairing_mode
+ifdef SECURE_CONNECTION
+	call sc_reset
+	call le_secure_connection_disable
+endif 
+	fetch 1,mem_le_pairing_mode
+	beq LE_PAIRING_MODE_NONE, module_le_set_no_pairing
+	beq LE_PAIRING_MODE_LAGACY_JUSTWORK,module_le_set_pairing_mode_lagacy_just_work
+	beq LE_PAIRING_MODE_LAGACY_PASSKEY,module_le_set_pairing_mode_lagacy_passkey
+	beq LE_PAIRING_MODE_LAGACY_PASSKEY_RES_INPUT,module_le_set_pairing_mode_lagacy_passkey_res_input
+	branch module_hci_event_receive_invalid_cmd
+	
+ifdef SECURE_CONNECTION		
+module_le_set_pairing_mode_secure_justwork:
+	storet 1,mem_le_pairing_mode
+	call le_secure_connection_enable
+	jam FLAG_LE_BONDING_MITM_SECURE,mem_le_pres_auth
+	branch module_le_set_noinputnooutput
+module_le_set_pairing_mode_secure_numeric:
+	storet 1,mem_le_pairing_mode
+	call le_secure_connection_enable
+	jam FLAG_LE_BONDING_MITM_SECURE,mem_le_pres_auth
+	jam FLAG_IOCAP_DISPLAYYESNO,mem_le_pres_iocap
+	branch module_hci_event_receive_valid_cmd	
+module_le_set_pairing_mode_secure_passkey:	
+	storet 1,mem_le_pairing_mode
+	call le_secure_connection_enable
+	jam FLAG_LE_BONDING_MITM_SECURE,mem_le_pres_auth
+	branch module_le_set_displayonly
+module_le_set_pairing_mode_secure_passkey_res_input:
+	storet 1,mem_le_pairing_mode
+	call le_secure_connection_enable
+	jam FLAG_LE_BONDING_MITM_SECURE,mem_le_pres_auth
+	branch module_le_set_keboadonly
+endif 
+
+
+module_le_set_no_pairing:
+	jam FLAG_LE_NO_BONDING_NO_MITM,mem_le_pres_auth
+module_le_set_noinputnooutput:	
+	jam FLAG_IOCAP_NOINPUTNOOUTPUT,mem_le_pres_iocap
+	branch module_hci_event_receive_valid_cmd	
+module_le_set_pairing_mode_lagacy_just_work:
+	jam FLAG_LE_BONDING_NO_MITM,mem_le_pres_auth
+	branch module_le_set_noinputnooutput
+module_le_set_pairing_mode_lagacy_passkey:
+	jam FLAG_LE_BONDING_MITM,mem_le_pres_auth
+	branch module_le_set_displayonly
+module_le_set_pairing_mode_lagacy_passkey_res_input:
+	jam FLAG_LE_BONDING_MITM,mem_le_pres_auth
+	branch module_le_set_keboadonly
+module_le_set_keboadonly:	
+	jam FLAG_IOCAP_KEYBOARDONLY,mem_le_pres_iocap
+	branch module_hci_event_receive_valid_cmd	
+module_le_set_displayonly:	
+	jam FLAG_IOCAP_DISPLAYONLY,mem_le_pres_iocap
+	branch module_hci_event_receive_valid_cmd	
+
+
+//command opcode 0x34
+//module_hci_cmd_le_set_adv_data:
+//	arg 31,pdata
+//	arg mem_le_adv_data_len,contw
+//	branch module_hci_cmd_receive_store_mem
+
+
+//command opcode 0x35
+module_hci_cmd_le_set_scan_data:
+	arg 31,pdata
+	arg mem_le_scan_data_len,contw
+	branch module_hci_cmd_receive_store_mem
+
+/*
+	input:contw is store mem ptr
+	pdata is max length
+*/
+module_hci_cmd_receive_store_mem:
+	fetchr loopcnt,1,mem_module_uart_len
+	isub loopcnt,null
+	nbranch module_hci_event_receive_invalid_cmd,positive
+	istorer loopcnt,1,contw
+	call uart_copy_rx_bytes_fast
+	branch module_hci_event_receive_valid_cmd	
+
+	
+//command opcode 0x36
+module_hci_cmd_le_send_conn_update_req:
+	fetch 2,mem_ui_state_map
+	bbit0 UI_STATE_BLE_CONNECTED,module_hci_event_receive_invalid_cmd
+	fetch 1,mem_module_uart_len
+	bne 0x08,module_hci_event_receive_invalid_cmd
+	ifetch 8,contru
+	store 8,mem_le_interval_min
+	jam BT_CMD_LE_UPDATE_CONN,mem_fifo_temp
+	call  ui_ipc_send_cmd
+	branch module_hci_event_receive_valid_cmd
+
+
+//command opcode 0x37
+module_hci_cmd_set_le_adv_parameter:
+	ifetch 2,contru
+	store 2,mem_le_adv_interval
+	storet 1,mem_lpm_overhead
+	iadd temp,pdata
+	store 2,mem_lpm_interval
+	branch module_hci_event_receive_valid_cmd
+	
+	
+//command opcode 0x38
+module_hci_cmd_le_start_pairing:
+	fetch 1,mem_le_pairing_mode
+	branch module_hci_event_receive_invalid_cmd,blank
+	fetch 1,mem_le_pairing_state
+	bne FLAG_LE_PAIRING_NULL,module_hci_event_receive_invalid_cmd
+	fetch 1,mem_le_enc_state
+	bne FLAG_LE_ENC_NULL,module_hci_event_receive_invalid_cmd
+	call check_51cmd_le_smp_sec_req
+	branch module_hci_event_receive_valid_cmd	
+
+
+//command opcode 0x40
+module_hci_cmd_set_wake_gpio:
+	fetch 1,mem_module_uart_len
+	bne 5,module_hci_event_receive_invalid_cmd
+	ifetch 1,contru
+	store 1,mem_module_mcu_wake_pin
+	ifetch 4,contru
+	store 4, mem_module_mcu_wake_delay_us
+	fetcht 1,mem_module_mcu_wake_pin
+	call gpio_config_output
+	call module_set_mcu_wake_pin_low
+	branch module_hci_event_receive_valid_cmd
+	
+
+//command opcode 0x42
+module_hci_cmd_set_tx_power:
+	fetch 1,mem_module_uart_len
+	bne 0x01,module_hci_event_receive_invalid_cmd
+	ifetch 1,contru
+	store 1,mem_tx_power
+	branch module_hci_event_receive_valid_cmd
+
+
+//command opcode 0x48
+module_hci_cmd_le_confirm_gkey:
+	ifetch 1,contru
+	beq 0x01,module_hci_cmd_le_confirm_gkey_fail
+	fetch 1,mem_le_secure_connect_state
+	beq LE_SC_STAT_SEND_PUBLIC_KEY,module_hci_cmd_le_confirm_gkey_ok
+	beq LE_SC_STAT_RECEIVE_DHKEY,module_hci_cmd_le_confirm_gkey_ok
+	beq LE_SC_STAT_WAIT_CONFIRM_GKEY,module_hci_cmd_le_confirm_gkey_ok
+	branch module_hci_event_receive_invalid_cmd		
+module_hci_cmd_le_confirm_gkey_ok:
+	jam FLAG_LE_SC_CONFRIM_GKEY_OK,mem_le_sc_confirm_gkey_flag
+	branch module_hci_event_receive_valid_cmd	
+	
+module_hci_cmd_le_confirm_gkey_fail:
+	call le_send_pairing_confirm_value_failed
+	branch module_hci_event_receive_valid_cmd
+
+
+
+
+//command opcode 0x51
+module_hci_cmd_reset_chip:
+	call module_hci_event_receive_valid_cmd
+	call wait_uarttx
+	jam 0x01,core_reset // rest YC1021
+	branch assert
+
+
+//command opcode 0x61
+//module_hci_cmd_le_set_fixed_passkey:
+//	fetch 1,mem_module_uart_len
+//	beq 0,module_hci_event_receive_invalid_cmd
+//	ifetch 1,contru
+//	branch module_hci_cmd_le_set_random_passkey,blank
+//	fetch 1,mem_module_uart_len
+//	bne 5,module_hci_event_receive_invalid_cmd
+//	ifetch 4,contru
+//	arg 1000000,temp
+//	isub temp,null
+//	branch module_hci_event_receive_invalid_cmd,positive
+//	store 4,mem_le_tk
+//	call le_set_config_fixed_tk
+//	branch module_hci_event_receive_valid_cmd
+
+//module_hci_cmd_le_set_random_passkey:
+//	call le_clr_config_fixed_tk
+//	branch module_hci_event_receive_valid_cmd
+
+
+//command opcode 0x76
+module_hci_cmd_delete_customize_service:
+	arg 0x0001,temp
+	call le_att_get_handle_ptr2
+	add contr,-2,contw
+	setarg 0x0000
+	istore 2,contw
+	branch module_hci_event_receive_valid_cmd
+
+
+//command opcode 0x77
+module_hci_cmd_add_service_uuid:
+	call module_hci_cmd_add_service_uuid_set_uuid
+	call uart_copy_rx_bytes_len_data
+	setarg 0x0000
+	istore 2,contw
+	branch module_hci_event_uuid_handle
+
+
+
+//command opcode 0x78
+module_hci_cmd_add_characteristic_uuid:
+	ifetch 1,contru	//Characteristic
+	call module_hci_cmd_add_characteristic_uuid_set_handle
+	call module_hci_cmd_add_characteristic_uuid_set_uuid
+	branch module_hci_event_uuid_handle
+
+
+module_hci_cmd_add_service_uuid_set_uuid:
+	call le_att_creat_new_handle
+	setarg 0x280002
+	istore 3,contw
+	rtn
+
+
+module_hci_cmd_add_characteristic_uuid_set_handle:
+	store 1,mem_pdatatemp
+	call le_att_creat_new_handle
+	setarg 0x01280302
+	istore 4,contw
+	fetch 1,mem_pdatatemp
+	istore 3,contw
+	rtn
+
+
+module_hci_cmd_add_characteristic_uuid_set_uuid:
+	call le_att_get_last_handle
+	ifetch 1,contru
+	and pdata,0x1f,loopcnt
+	copy pdata,rega
+	isolate1 BIT_OF_WRITE_AUTHENTICATED,rega
+	setflag true,BIT_OF_ATT_HANDLE_WRITE_AUTHENTICATED,temp
+	isolate1 BIT_OF_READ_AUTHENTICATED,rega
+	setflag true,BIT_OF_ATT_HANDLE_READ_AUTHENTICATED,temp
+	istoret 2,contw
+	copy loopcnt,pdata
+	istore 1,contw
+	call uart_copy_rx_bytes
+	call uart_copy_rx_bytes_len_data		//data
+	setarg 0
+	istore 2,contw
+	and temp,0xff,temp
+	increase -1,temp
+	call le_att_get_handle_ptr2
+	add contr,4,contr
+	ifetch 1,contr		//characteristic data
+	bbit1 BIT_CHARACTERISTIC_NOTIFY,module_hci_cmd_add_characteristic_uuid_set_ccc_uuid
+	bbit1 BIT_CHARACTERISTIC_INDICATE,module_hci_cmd_add_characteristic_uuid_set_ccc_uuid
+	increase 1,temp
+	rtn
+
+
+module_hci_cmd_add_characteristic_uuid_set_ccc_uuid:
+	call le_att_get_last_handle
+	isolate1 BIT_OF_NOTIFY_AUTHENTICATED,rega
+	setflag true,BIT_OF_ATT_HANDLE_WRITE_AUTHENTICATED,temp
+	istoret 2,contw
+	setarg 0x02290202
+	istore 8,contw
+	increase -1,temp
+	rtn
+
+
+le_att_creat_new_handle:
+	call le_att_get_last_handle
+	istoret 2,contw
+	rtn
+
+
+uart_copy_rx_bytes_len_data:
+	ifetch 1,contru
+	copy pdata,loopcnt
+	istore 1,contw
+	branch uart_copy_rx_bytes
+
+
+//command opcode 0x7a
+module_hci_cmd_le_passkey_entry_input:
+	fetch 1,mem_le_pairing_state
+	bne FLAG_LE_PAIRING_RECEIVE_PAIRING_CONFIRM,module_hci_event_receive_invalid_cmd
+	fetch 1,mem_le_pairing_mode
+	beq LE_PAIRING_MODE_LAGACY_PASSKEY_RES_INPUT,module_hci_cmd_passkey_entry_res_input
+	beq LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY_RES_INPUT,module_hci_cmd_passkey_entry_sc_res_input
+	branch module_hci_event_receive_invalid_cmd
+
+module_hci_cmd_passkey_entry_sc_res_input:
+	jam LE_SP_FLAG_COMMIT_256,mem_le_secure_connect_flag
+	jam LE_SC_STAT_PASSKEY_WAIT_CONFIRM,mem_le_secure_connect_state	
+	branch module_hci_cmd_receive_ble_passkey
+
+module_hci_cmd_receive_ble_passkey:
+	ifetch 4,contru
+	store 4,mem_le_tk
+	branch module_hci_event_receive_valid_cmd
+	
+module_hci_cmd_passkey_entry_res_input:
+	call module_hci_cmd_receive_ble_passkey
+	branch le_send_smp_pairing_confirm
+
+
+//command opcode 0x7b
+//module_hci_cmd_le_create_conn:
+//	ifetch 6,contru
+//	store 6,mem_le_conn_peer_addr
+//	jam hci_cmd_le_create_conn,mem_cmd_le_create_conn
+//	jam ON,mem_le_conn_flag
+//	jam ON,mem_le_scan_enable
+//	branch module_hci_event_receive_valid_cmd
+	
+
+
+//command opcode 0x90
+//module_hci_cmd_ble_set_phy:
+//	fetch 1,mem_module_uart_len
+//	bne 2,module_hci_event_receive_invalid_cmd
+//	ifetcht 2,contru
+//	call le_set_phys
+//	branch module_hci_event_receive_valid_cmd
+
+
+//command opcode 0x91
+//module_hci_cmd_ble_read_current_phy:
+//	arg 0,temp
+//	arg 2,rega
+//	arg mem_context+coffset_le_rx_phy,regb
+//	branch module_hci_event_set_cmd
+
+
+//command opcode 0x92
+//module_hci_cmd_ble_set_dle:
+//	fetch 1,mem_module_uart_len
+//	bne 8,module_hci_event_receive_invalid_cmd
+//	ifetch 8,contru
+//	call le_set_dle
+//	branch module_hci_event_receive_valid_cmd
+
+
+//command opcode 0x93
+//module_hci_cmd_read_chip_data:
+//	ifetchr rega,1,contru
+//	ifetchr regb,2,contru
+//	arg 0,temp
+//	branch module_hci_event_set_cmd
+
+
+//command opcode 0x94
+//module_hci_cmd_write_chip_data:
+//	fetchr loopcnt,1,mem_module_uart_len
+//	increase -2,loopcnt
+//	ifetch 2,contru
+//	copy pdata,contw
+//	call uart_copy_rx_bytes_fast
+//	branch module_hci_event_receive_valid_cmd
+
+//ifdef COMPILE_WECHAT
+//command opcode 0x95
+//module_hci_cmd_wechat_send_data:
+//	fetch 2,mem_ui_state_map
+//	bbit0 UI_STATE_BLE_CONNECTED,module_hci_event_receive_invalid_cmd
+//	fetchr loopcnt,1,mem_module_uart_len
+//	arg mem_module_wechat_local_data_buffer,contw
+//	call uart_copy_rx_bytes_fast
+//	fetchr regb,1,mem_module_uart_len
+//	arg mem_module_wechat_local_data_buffer,rega
+//	call wechat_air_sync_send_wechat_packet
+//	jam HCI_NOT_DISCARD_PACKET,mem_module_temp_nl_discard_packet 
+//	rtn user
+//	jam HCI_DISCARD_PACKET,mem_module_temp_nl_discard_packet 
+//	branch module_hci_event_receive_valid_cmd
+//endif
+
+
+//command opcode 0xff
+//module_hci_cmd_close_lpm:
+//	jam 0,mem_lpm_mode
+//	branch module_hci_event_receive_valid_cmd
+	
+
+/*********************HCI EVENT*********************/
+
+module_hci_event_receive_invalid_cmd:
+	arg 1,temp
+	arg 0,rega
+	branch module_hci_event_set_cmd
+
+
+module_hci_event_receive_valid_cmd:
+	arg 0,temp
+	arg 0,rega
+	branch module_hci_event_set_cmd
+
+
+//event opcode 0x02
+module_hci_event_le_connect:
+	jam  HCI_EVENT_LE_CONN_REP,mem_module_uart_opcode
+	branch module_hci_event_enter_standby_mode_len0
+
+
+
+//event opcode 0x05
+module_hci_event_le_disconnect:
+	jam  HCI_EVENT_LE_DIS_REP,mem_module_uart_opcode
+	branch module_hci_event_enter_standby_mode_len0
+
+
+//event opcode 0x06
+//input:
+//	temp: success 0; fail 1
+//	rega:Response Content length
+//	regb:Response Content address
+module_hci_event_set_cmd:
+	fetch 1,mem_module_uart_opcode
+	copy pdata,regc
+	jam  HCI_EVENT_CMD_RES,mem_module_uart_opcode
+	setarg 2
+	iadd rega,pdata
+	call module_hci_prepare_tx
+	copy regc,pdata
+	istore 1,contwu
+	istoret 1,contwu
+	copy rega,loopcnt
+	copy regb,contr
+	call uart_copy_tx_bytes
+	branch module_hci_transmit_tx
+
+
+
+
+//event opcode 0x08
+//loopcnt pdata is data length
+module_hci_event_receive_le_data:
+	jam HCI_EVENT_LE_DATA_REP,mem_module_uart_opcode
+	add loopcnt,2,pdata
+	call module_hci_prepare_tx
+	fetch 2,mem_module_le_rx_data_handle // Attribute handle
+	istore 2,contwu
+	fetch 2,mem_module_le_rx_data_address
+	icopy contr
+	call uart_copy_tx_bytes_fast
+	copy contr,pdata
+	store 2,mem_module_le_rx_data_address
+	branch module_hci_transmit_tx
+
+
+//event opcode 0x09
+module_hci_event_enter_standby_mode:
+	jam HCI_EVENT_STANDBY_REP,mem_module_uart_opcode
+module_hci_event_enter_standby_mode_len0:
+	setarg 0
+	call module_hci_prepare_tx
+	branch module_hci_transmit_tx
+
+
+//event opcode 0x0a
+module_hci_event_status_res:
+	jam HCI_EVENT_STATUS_RES,mem_module_uart_opcode
+	setarg 1
+	call module_hci_prepare_tx
+	
+	call module_hci_read_bt_status
+	
+	fetch 2,mem_ui_state_map	
+	arg UI_STATE_BLE_CONNECTED,queue
+	qisolate1 pdata
+	setflag true,5,temp	
+	
+
+	
+	istoret 1,contwu
+	branch module_hci_transmit_tx
+
+//	temp: bit0 3.0 inquiry;bit1 3.0 scan;bit2 ble adv;
+
+module_hci_read_bt_status:
+	arg 0,temp
+	fetch 1,mem_le_adv_enable
+	arg 0,queue
+	qisolate1 pdata
+	setflag true,2,temp	
+	rtn
+
+
+//event opcode 0x0d
+module_hci_event_store_device:
+	jam HCI_EVENT_NVRAM_REP,mem_module_uart_opcode
+	fetch 1,mem_nv_data_number
+	mul32 pdata,34,pdata
+	icopy loopcnt
+	call module_hci_prepare_tx
+	fetch 2,mem_nv_data_ptr
+	icopy contr
+	call uart_copy_tx_bytes_fast
+	branch module_hci_transmit_tx
+
+ifdef SECURE_CONNECTION
+//event opcode 0x0e
+module_hci_event_gkey_generate:
+	jam HCI_EVENT_GKEY,mem_module_uart_opcode
+	setarg 4
+	call module_hci_prepare_tx
+	fetch 4,mem_gkey
+	istore 4,contwu
+	branch module_hci_transmit_tx
+endif
+
+//event opcode 0x0f
+module_hci_event_invalid_packet:
+	jam HCI_EVENT_INVALID_PACKET,mem_module_uart_opcode
+	fetch 2,core_uart_rxitems
+	arg 0x40,temp
+	call not_greater_than
+	copy pdata,rega
+	copy pdata,loopcnt
+	call uarta_prepare_rx
+	arg mem_module_rx_error_data_buffer,contw
+	call uart_copy_rx_bytes_fast
+	copy rega,pdata
+	copy rega,loopcnt
+	call module_hci_prepare_tx
+	arg mem_module_rx_error_data_buffer,contr
+	call uart_copy_tx_bytes_fast
+	branch module_hci_transmit_tx
+
+
+//event opcode 0x10
+module_hci_event_passkey_entry_mode:
+	jam  HCI_EVENT_GET_PASSKEY,mem_module_uart_opcode
+	branch module_hci_event_enter_standby_mode_len0
+
+
+//event opcode 0x11
+module_hci_event_le_tk:
+	jam HCI_EVENT_LE_TK,mem_module_uart_opcode
+	setarg 4
+	call module_hci_prepare_tx
+	fetch 4,mem_le_tk
+	istore 4,contwu
+	branch module_hci_transmit_tx
+
+
+//event opcode 0x14
+module_hci_event_le_pairing_fail:
+	arg FLAG_BLE_PAIRING_FAIL,rega
+	branch module_hci_event_pairing_completed
+
+module_hci_event_le_pairing_success:
+	arg FLAG_BLE_PAIRING_SUCCESS,rega
+	branch module_hci_event_pairing_completed
+
+
+module_hci_event_pairing_completed:
+	jam HCI_EVENT_LE_PAIRING_STATE,mem_module_uart_opcode
+	setarg 2
+	call module_hci_prepare_tx
+	copy rega,pdata
+	istore 2,contwu
+	branch module_hci_transmit_tx
+
+
+//event opcode 0x15
+module_hci_event_pause_enc:
+	arg FLAG_EVENT_PAUSE_ENC,regc
+	branch module_hci_event_enc
+
+module_hci_event_start_enc:
+	arg FLAG_EVENT_START_ENC,regc
+
+module_hci_event_enc:
+	jam HCI_EVENT_LE_ENCRYPTION_STATE,mem_module_uart_opcode
+	setarg 1
+	call module_hci_prepare_tx
+	copy regc,pdata
+	istore 1,contwu
+	branch module_hci_transmit_tx
+
+
+
+//event opcode 0x29
+//input:temp uuid number
+module_hci_event_uuid_handle:
+	storet 2,mem_temp
+	jam HCI_EVENT_UUID_HANDLE,mem_module_uart_opcode
+	setarg 2
+	call module_hci_prepare_tx
+	fetcht 2,mem_temp
+	istoret 2,contwu
+	branch module_hci_transmit_tx
+
+
+//event opcode 0x2B
+module_hci_event_le_input_passkey:
+	jam HCI_EVENT_LE_INPUT_GKEY,mem_module_uart_opcode
+	branch module_hci_event_enter_standby_mode_len0
+
+
+//event opcode 0x40
+module_hci_event_le_update_phy:
+	jam HCI_BLE_UPDATE_PHY_EVENT,mem_module_uart_opcode
+	setarg 2
+	call module_hci_prepare_tx
+	fetch 2,mem_context+coffset_le_rx_phy
+	istore 2,contwu
+	branch module_hci_transmit_tx
+
+ifdef COMPILE_WECHAT
+//event opcode 0x41
+module_wechat_rx_push_data:
+module_hci_event_ble_wechat_receive_push_data:
+	call wechat_air_sync_check_push_data_struct
+	nrtn user
+	jam HCI_BLE_WECHAT_RECEIVE_PUSH_DATA,mem_module_uart_opcode
+	copy loopcnt,pdata
+	call module_hci_prepare_tx
+	copy regc,contr
+	call uart_copy_tx_bytes_fast
+	branch module_hci_transmit_tx
+endif
+	
+
+//****************************************************************//
+	//module_hci_prepare_tx
+	//function:write hci packet header
+	//input: pdata-----packet length  (1byte)
+	//input: mem_uart_opcode------opcode (1byte)
+	//output:contwu --- pointer to packet payload
+	//use reg: contwu,pdata
+//****************************************************************//	
+module_hci_prepare_tx:
+	jam 0x02,mem_module_uart_cmd
+	store 1,mem_module_uart_len
+	storet 8,mem_temp
+	bpatch patch0e_0,mem_patch0e
+	call module_set_mcu_wake_pin_high_delay
+	fetcht 8,mem_temp
+	call uarta_prepare_tx_register_push
+	fetch 3,mem_module_uart_cmd
+	istore 3,contwu
+	rtn
+
+module_hci_transmit_tx:
+	bpatch patch0e_1,mem_patch0e
+	branch uarta_send_register_pop
+
+module_set_mcu_wake_pin_high_delay:
+	call module_check_mcu_wake_pin_high
+	rtn true
+module_set_mcu_wake_pin_h_delay:
+	call module_set_mcu_wake_pin_high
+	fetch 4,mem_module_mcu_wake_delay_us
+	rshift2 pdata,pdata
+	rtn blank
+	branch delay
+
+module_set_mcu_wake_pin_high:
+	fetcht 1,mem_module_mcu_wake_pin
+	branch gpio_out_active
+
+module_check_mcu_wake_pin_high:
+	fetcht 1,mem_module_mcu_wake_pin
+	branch gpio_check_active
+
+module_set_mcu_wake_pin_low:
+	fetcht 1,mem_module_mcu_wake_pin
+	branch gpio_out_inactive
+
+
+
+/*********************hci command end*********************/
+
+/*********************hci ble receive data start*********************/
+
+//rega is le rx data address
+//regb is le rx data length
+//mem_le_att_handle is write handle
+module_le_receive_data:
+	storer rega,2,mem_module_le_rx_data_address
+	storer regb,2,mem_module_le_rx_data_len
+	fetch 2,mem_le_att_handle
+	store 2,mem_module_le_rx_data_handle
+	call module_check_ble_encrypt_state
+	rtn user
+	
+module_le_receive_data_ok:	
+	fetcht 2,mem_module_le_rx_data_len
+	fetch 1,mem_module_ble_data_uart_max_length
+	call not_greater_than
+	copy pdata,loopcnt
+	copy temp,pdata
+	isub loopcnt,pdata
+	store 2,mem_module_le_rx_data_len
+	call module_hci_event_receive_le_data
+	fetch 2,mem_module_le_rx_data_len
+	rtn blank
+	branch module_le_receive_data_ok
+
+/*********************hci ble receive data end*********************/
+
+
+module_bb_event_timer:
+	rtn
+
+module_read_vdd_timer:
+	fetch 1,mem_module_read_vdd_flag
+	rtn blank
+	fetch 1,mem_module_read_vdd_count
+	rtn blank
+	increase -1,pdata
+	store 1,mem_module_read_vdd_count
+	nrtn blank
+	jam FLAG_MODULE_READ_VDD_COUNT,mem_module_read_vdd_count
+	call enable_adc
+	call vdd_calculate_by_mode
+	div pdata,10
+	call get_div_result
+	div pdata,100
+	call get_div_result
+	remainder temp
+	store 1,mem_module_vdd_quotient
+	storet 1,mem_module_vdd_remainder
+	rtn	
+	
+
+
+/**************module state *******************/
+
+module_set_le_tx_data_flag:
+	arg MODULE_FLAG_BLE_DATA_FINISH,queue
+	branch module_set_state
+	
+module_clear_le_tx_data_flag:
+	arg MODULE_FLAG_BLE_DATA_FINISH,queue
+	branch module_clr_state
+
+module_clr_state:
+	fetch 2,mem_module_flag
+	qset0 pdata
+	store 2,mem_module_flag
+	rtn
+
+module_set_state:
+	fetch 2,mem_module_flag
+	qset1 pdata
+	store 2,mem_module_flag
+	rtn
+	
+/**************module state end*******************/
+
+endif
Index: program/app_mouse.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/app_mouse.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/app_mouse.prog	(working copy)
@@ -0,0 +1,5602 @@
+
+ifdef COMPILE_MOUSE
+mouse_init:
+	call enable_authrom
+	call mouse_wake_gpio_set,wake
+	call mouse_setting_config
+	call mouse_le_name_modify
+	call mouse_init_sunt
+	rtn wake
+	call mouse_usb_check_enable
+	call mouse_setting_sensor_type
+	call mouse_drawing_optima_init
+	call mouse_cb_fuction
+	call mouse_sensor_powerdown
+mouse_init_wireless:	
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BTN_DOWN,mouse_start_discovery
+	call mouse_check_select_device_by_switch_once
+	branch mouse_start_work
+
+mouse_wake_gpio_set:
+	call mouse_matrix_public_gpio_reset
+	branch lpm_config_puchk_disable
+	
+mouse_cb_fuction:
+	bpatch patch0e_2,mem_patch0e
+	setarg mouse_24g_short_sleep
+	store 2,mem_cb_24g_transmit_short_sleep
+	setarg mouse_24g_long_sleep
+	store 2,mem_cb_24g_transmit_long_sleep
+	setarg mouse_24g_before_lpm_sleep
+	store 2,mem_cb_before_lpm_sleep
+	setarg mouse_24g_package_data
+	store 2,mem_cb_24g_transmit_data
+	setarg mouse_24g_search_dongle
+	store 2,mem_cb_24g_search_receiver
+	setarg mouse_lpm_before_common
+	store 2,mem_cb_24g_lpm_before
+	setarg mouse_le
+	store 2,mem_cb_le_process
+	setarg mouse_process_lpm_before
+	store 2,mem_cb_before_lpm
+	setarg mouse_priority_bb_event
+	store 2,mem_cb_bb_event_process
+	setarg mouse_idle
+	store 2,mem_cb_idle_process
+	setarg mouse_before_hibernate
+	store 2,mem_cb_before_hibernate
+	setarg mouse_le_bb_event_connect_complete
+	store 2,mem_cb_att_write	
+	setarg mouse_bb_event_timer
+	store 2,mem_cb_event_timer
+	setarg mouse_lpm_check_wake_lock
+	store 2,mem_cb_check_wakelock
+	branch hid_device_cb_fuction
+
+mouse_setting_config:
+	rtn wake
+	call g24_transmit_init
+	call g24_chmap_param_init
+	call mouse_24g_send_time_long_wake
+	call mouse_gpio_init
+	call mouse_param_info_init
+//	call mouse_sensor_parm_init
+	call mouse_device_multi_led_parm_init
+	call le_set_fixed_ltk_justwork
+mouse_load_device_info_check:
+	bpatch patch0e_3,mem_patch0e
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_EEPROM,mouse_load_eeprom_info_check
+	bbit1 MOUSE_ENABLE_FLASH,mouse_load_flash_info_check
+	bbit1 MOUSE_ENABLE_OTP,mouse_load_otp_info_check
+	rtn
+	
+mouse_xtal_init:
+	jam XTAL_16M,mem_fcomp_div		// 0x08--16M 
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit1 MOUSE_ENABLE_16M
+	jam XTAL_24M,mem_fcomp_div		// 0x18--24M
+	rtn
+
+mouse_24g_phy_select:
+	call g24_enable_1M
+	jam 0,mem_mouse_sleep_deal_type
+	jam 0,mem_24g_disable_fec1
+	jam 0,mem_power_ctrl_disable
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_24G_2M_PHY
+	jam 1,mem_mouse_sleep_deal_type
+	jam 1,mem_24g_disable_fec1
+	jam 1,mem_power_ctrl_disable
+	branch g24_enable_2M
+	
+//*******************************recon dispatch set*************************//
+
+mouse_g24_reconn_dispatch_set:
+	bpatchx patch3e_0,mem_patch3e
+	fetch 1,mem_24g_rxdata_length	//ack payload length
+	branch mouse_receiver_addr_check,blank
+mouse_g24_reconn_dispatch:
+	fetch 4,mem_24g_pair_addr
+	fetcht 4,mem_24g_addr
+	isub temp,null
+	branch mouse_g24_reconn_mode_judge,zero
+	branch g24_reconn_dispatch_success
+
+mouse_receiver_addr_check:
+	fetch 4,mem_24g_fast_conn_addr
+	fetcht 4,mem_24g_addr
+	isub temp,null
+	branch mouse_g24_reconn_dispatch,zero
+	fetch 4,mem_24g_rxpayload+2
+	rtn blank
+	branch mouse_g24_reconn_dispatch
+	
+mouse_g24_reconn_mode_judge:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_AUTO_24G_PARING,mouse_24g_pair_mode_check
+	bbit1 MOUSE_ENABLE_24G_FIRST_AUTO_PAIRING,mouse_24g_pair_mode_check
+	branch g24_reconn_receiver_addr
+
+mouse_g24_transmit_hop_process:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_24G_2M_PHY,g24_transmit_hop_process_next
+mouse_g24_transmit_hop_process_new:
+	fetcht 1,mem_24g_retry
+	fetch 1,mem_24g_fast_hop_count			// 125Hz=11  250Hz=5
+	isub temp,null
+	nbranch g24_tx_fast_hop,positive		// >= (6+6)or(3+3) hop fast    fail packet count >= 2
+	increase 1,temp
+	storet 1,mem_24g_retry
+	fetch 1,mem_24g_fast_hop_count
+	beq 15,mouse_g24_transmit_hop_process_4ms
+	fetch 1,mem_24g_retry
+	beq 20,g24_hop_ch_disable
+	beq 30,g24_hop_ch_disable
+	rtn	
+
+mouse_g24_transmit_hop_process_4ms:
+	fetch 1,mem_24g_retry
+	beq 10,g24_hop_ch_disable
+	beq 15,g24_hop_ch_disable
+	rtn
+	
+//**********************default parm init start********************//
+
+mouse_default_init:
+	bpatch patch0e_4,mem_patch0e
+	call hid_device_default_parm_init
+	call mouse_xtal_init
+	call mouse_24g_phy_select
+	call mouse_24g_long_sleep_set
+	branch g24_pair_param_init
+	
+//**********************default parm init end********************//
+
+
+
+//**********************mouse parm init start********************//
+
+mouse_param_info_init:
+	bpatch patch0e_5,mem_patch0e
+	call mouse_param_common_init
+	call mouse_report_rate_parm_init
+	call mouse_sensor_set_angle
+mouse_spi_parm_init:
+	setarg 0x0a77
+	store 2,mem_spi_init_clk
+	setsect 0,0x1224
+	setsect 1,0x4000
+	setsect 2,0x0
+	istore 5,contw
+	rtn
+
+mouse_param_common_init:
+	setarg MOUSE_BLE_ATT_LIST_ADDR				//ble attlist start address
+	store 2,mem_ui_le_uuid_table
+	jam DPI_BUTTON_STATE_UP,mem_mouse_dpi_button_state
+	setarg 0
+	store 7,mem_mouse_key
+	fetch 1,mem_ui_button_timeout
+	store 1,mem_bt_discovery_count
+	store 1,mem_select_device_count
+
+	jam TYPE_MS,mem_24g_data_type
+	jam 1,mem_24g_fast_conn_enable
+	jam 0,mem_mouse_pair_flag
+	
+	call mouse_compare_addr_init
+	branch hid_device_param_common_init
+
+mouse_compare_addr_init:
+	arg 0,temp
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_OTP,hid_device_compare_addr_store
+	arg 0xffffff,temp
+	branch hid_device_compare_addr_store
+//==========set report start=========/	
+
+mouse_report_rate_parm_init:
+	call mouse_24g_report_rate_parm_init
+	fetch 3,mem_24g_short_sleep_set
+	store 3,mem_mouse_24g_short_sleep_set_init
+mouse_le_report_rate_parm_init:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_BT_125Hz
+	setarg LE_INTERVAL_7_5MS
+mouse_le_interval_store:
+	store 2,mem_le_interval_min
+	store 2,mem_le_interval_min+2
+	rtn
+
+mouse_24g_report_rate_parm_init:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_24G_500Hz,mouse_g24_interval_param_2ms
+	bbit1 MOUSE_ENABLE_24G_250Hz,mouse_g24_interval_param_4ms
+	branch mouse_g24_interval_param_8ms
+
+mouse_g24_interval_param_2ms:
+	fetch 1,mem_mouse_24g_fast_hop_count_2ms
+	store 1,mem_24g_fast_hop_count
+	fetch 4,mem_mouse_24g_tsniff_2ms
+	store 4,mem_mouse_24g_tsniff
+mouse_report_rate_set_500hz:
+	setarg 0x080606
+	store 3,mem_24g_interval
+	branch g24_transmit_by_interrupt_enable
+	
+mouse_g24_interval_param_4ms:
+	fetch 3,mem_mouse_24g_short_sleep_set_4ms
+	store 3,mem_24g_short_sleep_set
+	fetch 3,mem_mouse_24g_long_sleep_set_4ms
+	store 3,mem_24g_long_sleep_set
+	
+	fetch 4,mem_mouse_24g_tsniff_4ms
+	store 4,mem_mouse_24g_tsniff
+	
+	setarg 0x100c0c
+	store 3,mem_24g_interval
+	
+	jam 0x05,mem_24g_fast_hop_count
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_24G_2M_PHY
+	jam 0x0f,mem_24g_fast_hop_count
+	rtn
+
+mouse_g24_interval_param_8ms:
+	fetch 3,mem_mouse_24g_short_sleep_set_8ms
+	store 3,mem_24g_short_sleep_set
+	fetch 3,mem_mouse_24g_long_sleep_set_8ms
+	store 3,mem_24g_long_sleep_set
+	
+	fetch 4,mem_mouse_24g_tsniff_8ms
+	store 4,mem_mouse_24g_tsniff
+	
+	setarg 0x1c1919
+	store 3,mem_24g_interval
+	
+	jam 0x0b,mem_24g_fast_hop_count
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_24G_2M_PHY
+	jam 0x1e,mem_24g_fast_hop_count
+	rtn
+
+//mouse_report_rate_set_500hz:
+//	setarg 0x080606
+//	store 3,mem_24g_interval
+//	rtn
+//mouse_report_rate_set_1000hz:
+//	setarg 0x040303
+//	store 3,mem_24g_interval
+//	rtn
+
+//==========set report end=========/	
+
+
+//==========select sensor angle start=========/	
+
+mouse_sensor_set_angle:
+	bpatch patch0e_6,mem_patch0e
+	call mouse_set_sensor_angle_float
+	fetch 1,mem_select_sensor_angle_gpio
+	rtneq GPIO_DISABLE
+
+	fetch 1,mem_select_sensor_angle_gpio
+	call mouse_gpio_config_pu_check
+	
+	fetcht 1,mem_select_sensor_angle_gpio
+	call gpio_get_bit
+	branch mouse_set_sensor_angle_gnd,true
+
+	fetch 1,mem_select_sensor_angle_gpio
+	call mouse_gpio_config_pd_check
+	
+	fetcht 1,mem_select_sensor_angle_gpio
+	call gpio_get_bit
+	branch mouse_set_sensor_angle_float,true	
+mouse_set_sensor_angle_vin:
+	fetch 1,mem_select_sensor_angle_gpio
+	call mouse_gpio_config_pu_check
+	fetch 1,mem_sensor_angle_vin
+	branch mouse_store_sensor_angle
+
+mouse_set_sensor_angle_gnd:
+	fetch 1,mem_select_sensor_angle_gpio
+	call mouse_gpio_config_pd_check
+	fetch 1,mem_sensor_angle_gnd
+	branch mouse_store_sensor_angle
+
+mouse_set_sensor_angle_float:
+	fetch 1,mem_sensor_angle_default
+mouse_store_sensor_angle:
+	store 1,mem_config_sensor_angle
+	rtn
+
+//==========select sensor angle end=========/	
+
+
+
+//**********************mouse parm init end********************//
+
+/***********************sensor parm init start*****************************/		//8650+S201 +ka8g2
+/*
+mouse_sensor_parm_init:
+	bpatch patch0e_7,mem_patch0e
+	call mouse_sensor_8650_parm_init
+	call mouse_sensor_ka8g2_parm_init
+	call mouse_sensor_3212_parm_init
+	call mouse_sensor_3205_parm_init
+	call mouse_sensor_3204_parm_init
+	call mouse_sensor_32xx_parm_init
+	call mouse_sensor_32xx_parm_init1
+	call mouse_sensor_p6520_parm_init
+	call mouse_sensor_ka8ul_parm_init
+	branch mem_sensor_8009_parm_init
+
+mouse_sensor_8650_parm_init:	
+	setsect 0,0x35a09
+	setsect 1,0x2c9ff
+	setsect 2,0x3e40a
+	setsect 3,0x28346
+	store 9,mem_sensor_8650_init
+	
+	setsect 0,0x2a141
+	setsect 1,0x3e9c4
+	setsect 2,0x00b6f
+	setsect 3,0x322d4
+	store 9,mem_sensor_8650_init+9
+	
+	setsect 0,0x3afa5
+	setsect 1,0x2403f
+	setsect 2,0x3f000
+	setsect 3,0x3ff
+	store 8,mem_sensor_8650_init+18
+	rtn
+
+mouse_sensor_ka8g2_parm_init:
+	setsect 0,0x2a509
+	setsect 1,0x24d09
+	setsect 2,0x20041
+	setsect 3,0x1a41d
+	store 9,mem_sensor_ka8g2_init
+	
+	setsect 0,0x07d04
+	setsect 1,0x01f88
+	setsect 2,0x00090
+	setsect 3,0x3fffc
+	store 9,mem_sensor_ka8g2_init+9
+	rtn
+
+mouse_sensor_3212_parm_init:
+	setsect 0,0x25a09
+	setsect 1,0x24d09
+	setsect 2,0x09041
+	setsect 3,0x3fc00
+	store 9,mem_sensor_3212_init
+mouse_sensor_parm_init_end1:
+	setarg 0xff
+	istore 1,contw
+	rtn
+
+mouse_sensor_3205_parm_init:
+	setsect 0,0x15a09
+	setsect 1,0x34403
+	setsect 2,0x3ded1
+	setsect 3,0x3fe01
+	store 9,mem_sensor_3205_init
+	branch mouse_sensor_parm_init_end1
+	
+mouse_sensor_3204_parm_init:
+	setsect 0,0x15a09
+	setsect 1,0x37c03
+	setsect 2,0x3de31
+	setsect 3,0x3ff49
+	store 9,mem_sensor_3204_init
+	branch mouse_sensor_parm_init_end1
+
+mouse_sensor_32xx_parm_init:
+	setsect 0,0x0351b
+	setsect 1,0x26d0a
+	setsect 2,0x2a462
+	setsect 3,0xae58
+	store 9,mem_sensor_32xx_init
+
+	setsect 0,0x22c8c
+	setsect 1,0x10b5b
+	setsect 2,0x1f386
+	setsect 3,0x3ce5
+	store 9,mem_sensor_32xx_init+9
+
+	setsect 0,0x3323a
+	setsect 1,0x091ce
+	setsect 2,0x3f104
+	setsect 3,0x3ff
+	store 8,mem_sensor_32xx_init+18
+	rtn
+	
+mouse_sensor_32xx_parm_init1:
+	setsect 0,0x12e54
+	setsect 1,0x07c95
+	setsect 2,0x23f46
+	setsect 3,0x1d5c1
+	store 9,mem_sensor_32xx_init_1
+
+	setsect 0,0x17652
+	setsect 1,0x35dd0
+	setsect 2,0x2378e
+	setsect 3,0x119e4
+	store 9,mem_sensor_32xx_init_1+9
+
+	setsect 0,0x0e57a
+	setsect 1,0x3921f
+	setsect 2,0x3f777
+	setsect 3,0x2c05
+	store 9,mem_sensor_32xx_init_1+18
+
+	setsect 0,0x07f00
+	setsect 1,0x00240
+	setsect 2,0x3fff0
+	setsect 3,0x3
+	store 7,mem_sensor_32xx_init_1+27
+	rtn
+
+
+mouse_sensor_p6520_parm_init:
+	setsect 0,0x1b905
+	setsect 1,0x2d682
+	setsect 2,0x0c720
+	setsect 3,0x2548
+	store 9,mem_sensor_p6520_init
+mouse_sensor_parm_init_end2:
+	setarg 0xffff00
+	istore 3,contw
+	rtn
+
+mouse_sensor_ka8ul_parm_init:
+	setsect 0,0x15a09
+	setsect 1,0x38403
+	setsect 2,0x1bc50
+	setsect 3,0x4269
+	store 9,mem_sensor_ka8ul_init
+
+	setsect 0,0x21138
+	setsect 1,0x20a10
+	setsect 2,0x23412
+	setsect 3,0xe524
+	store 9,mem_sensor_ka8ul_init+9
+
+	setsect 0,0x3b04a
+	setsect 1,0x32812
+	setsect 2,0x0d904
+	setsect 3,0x25c1
+	store 9,mem_sensor_ka8ul_init+18
+	branch mouse_sensor_parm_init_end2
+
+mem_sensor_8009_parm_init:
+	setsect 0,0x25a09
+	setsect 1,0x24081
+	setsect 2,0x0d690
+	setsect 3,0x3920
+	store 9,mem_sensor_8009_init
+
+	setsect 0,0x20f9f
+	setsect 1,0x0026e
+	setsect 2,0x3fff0
+	setsect 3,0x3
+	store 7,mem_sensor_8009_init+9
+	rtn
+*/	
+/***********************le device info modify*****************************/
+mouse_le_name_modify:	
+	bpatch patch0f_0,mem_patch0f
+	rtn wake
+	fetch 1,mem_le_name_patch_len
+	rtn blank
+	add pdata,1,loopcnt
+	arg mem_le_name_patch_len,contr
+	arg mem_le_name_len,contw
+	call memcpy
+	branch le_modified_name_adv
+
+/***********************sensor parm init end*****************************/
+
+mouse_start_work:
+	bpatch patch0f_1,mem_patch0f
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_24G_FIRST_AUTO_PAIRING, mouse_24g_first_start_auto_pair_mode
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,mouse_24g_start_mode
+mouse_le_fast_conn_judge:
+	call mouse_device_le_reconn_led_config
+	call mouse_bluetooth_fast_conn_disable
+	fetch 1,mem_device_flag
+	beq MODE_BT_DEVICE1,mouse_le_device1_judge
+	beq MODE_BT_DEVICE2,mouse_le_device2_judge
+	rtn
+mouse_le_device1_judge:
+	fetch 6,mem_device1_addr
+	fetcht 6,mem_device_compare_addr
+	isub temp,null
+	branch mouse_bluetooth_fast_conn_init,zero
+	branch mouse_start_reconnect_device
+	
+mouse_le_device2_judge:
+	fetch 6,mem_device2_addr
+	fetcht 6,mem_device_compare_addr
+	isub temp,null
+	branch mouse_bluetooth_fast_conn_init,zero	
+mouse_start_reconnect_device:
+	bpatch patch0f_2,mem_patch0f
+	arg mem_device1_type,rega
+	fetch 1,mem_device_flag
+	increase -1,pdata
+	mul32 pdata,13,pdata
+	iadd rega,rega
+	ifetch 1,rega
+	store 1,mem_xrecord_mode
+mouse_start_reconnect:	
+	fetch 1,mem_xrecord_mode
+	beq REC_4_MODE,mouse4_0_check_reconn_target
+	branch mouse_bluetooth_fast_conn_init
+
+mouse_wakeup_from_power_check:
+	bpatch patch0f_3,mem_patch0f
+	disable user
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_WAKEUP_FROM_POWER,mouse_wakeup_from_poweron
+	fetch 1,core_lpm_isogate
+	bbit1 cold_wake,mouse_wakeup_from_poweron
+	enable user	//wake from hibernate
+mouse_wakeup_from_poweron:
+	fetch 1,mem_reconn_times_init
+	store 1,mem_reconn_times
+	rtn
+
+mouse4_0_check_reconn_target:
+	jam 1,mem_device_le_reconnect_flag
+	fetcht 1,mem_device_fast_direct_timeout
+	fetch 1,mem_device_fast_conn_flag
+	beq 0xff,mouse4_0_check_reconn_target_next
+	fetcht 1,mem_device_direct_timeout
+mouse4_0_check_reconn_target_next:	
+	storet 1,mem_device_direct_timer
+	call app_lpm_mult_disable
+	fetch 3,mem_le_adv_direct_ind
+	store 3,mem_le_adv_data+4
+	call mouse_le_check_adv_flag
+	setarg ADV_FLAG_BREDR_NOT_SUPPORTED
+	istore 1,contr
+	arg mem_le_scan_data,contr
+	call mouse_le_adv_data_update
+	branch check_51cmd_adv
+
+
+/**********************system clk**********************************/
+mouse_lpm_check_wake_lock:
+	bmark1 mark_24g,app_get_lpm_wake_lock
+	fetch 1,mem_mouse_clear_sensor_data_flag
+	branch app_get_lpm_wake_lock,blank
+	fetch 1,mem_le_conn_param_reject
+	beq LE_LPM_DISABLE,app_get_lpm_wake_lock
+	fetch 1,mem_mouse_wheel_trigger
+	nbranch app_get_lpm_wake_lock,blank
+	branch app_put_lpm_wake_lock
+
+/**********************system clk end*****************************/
+ 
+mouse_app_enter_hibernate:
+	bpatch patch0f_4,mem_patch0f
+	setarg PAN_REG_CONFIG
+	call twspi_read
+	bbit1 3,mouse_app_enter_hibernate_next
+	call mouse_sensor_reset
+	call mouse_sensor_powerdown
+mouse_app_enter_hibernate_next:
+	call mouse_setgpio_hibernate
+	branch app_enter_hibernate
+
+mouse_before_hibernate:
+	bpatch patch0f_5,mem_patch0f
+	call disable_authrom 
+//	call mouse_before_hibernate_wheel_gpio_set
+mouse_before_hibernate_next:
+	call mouse_flash_power_down
+	fetcht 1,mem_sensor_motion_gpio
+	branch gpio_clr_wake
+
+mouse_setgpio_hibernate:
+	bpatch patch0f_6,mem_patch0f
+	call mouse_set_sdio_high
+	call clear_wake
+	call mouse_before_hibernate_wheel_gpio_set
+	fetch 1,mem_mouse_sensor_sdio_gpio
+	call mouse_gpio_config_output_high
+	fetcht 1,mem_device_switch_gpio
+	call mouse_gpio_set_pupd_by_input
+mouse_setgpio_hibernate_next:
+	call mouse_lpm_before_common
+//	call mouse_gpio_pd_idle
+	fetcht 1,mem_device_reuse_2ice_gpio
+	call device_gpio_config_input_pu
+	call mouse_gpio_set_analog
+	call mouse_logo_led_off
+	call mouse_device_multi_led_all_off
+	call mouse_adc_gpio_set_before_hibernate
+	branch mouse_wheel_gpio_set_before_hibernate
+
+mouse_wheel_gpio_set_before_hibernate:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_WHEEL_WAKE_UP_CANCEL
+mouse_wheel_gpio_clr_wakeup:	
+	fetcht 1,mem_whee_a_data_gpio
+	call gpio_clr_wake
+	fetcht 1,mem_whee_b_data_gpio
+	call gpio_clr_wake
+	fetcht 1,mem_whee_a_data_gpio
+	call device_gpio_config_input_pd
+	fetcht 1,mem_whee_b_data_gpio
+	branch device_gpio_config_input_pd
+	
+mouse_adc_gpio_set_before_hibernate:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_ADC
+	fetch 1,mem_adc_config_flag
+	rtnne ADC_CONFIG_GPIO
+	fetcht 1,mem_adc_channel_gpio
+	branch gpio_set_analog
+	
+
+//set all unused gpio to pull down mode to save power	
+mouse_gpio_pd_idle:
+	arg core_gpio_conf,contr
+	arg GPIO_NUMBER,loopcnt
+mouse_gpio_pd_idle_loop:
+	ifetch 1,contr
+	nbranch mouse_gpio_pd_idle_configured,blank
+	setarg gpcfg_pulldown
+	add contr,-1,contw
+	istore 1,contw
+mouse_gpio_pd_idle_configured:
+	loop mouse_gpio_pd_idle_loop
+	arg core_gpio_conf_hi+GPIO_NUMBER_EXT,pdata
+	isub contr,null
+	rtn zero
+mouse_gpio_pd_idle_ext:
+	arg GPIO_NUMBER_EXT,loopcnt
+	arg core_gpio_conf_hi,contr
+	branch mouse_gpio_pd_idle_loop
+	
+mouse_process_lpm_before:
+	rtnmark1 mark_24g
+	call mouse_lpm_before_common
+	fetch 1,mem_lpm_current_mult
+	nrtn blank					// 7.5ms, no gpio wakeup
+	branch gpio_clr_wake
+
+mouse_lpm_before_common:
+	bpatch patch0f_7,mem_patch0f
+	jam 0,mem_qdec_set_flag
+	call clear_wake
+	fetcht 1,mem_matrix_public_gpio		// enable b4/b5/dpi wakeup
+	call gpio_out_active
+	fetcht 1,mem_matrix_public_gpio
+	call gpio_clr_wake
+	
+	call mouse_wheel_check
+	fetch 1,mem_mouse_sensor_sclk_gpio		//set sdio high
+ 	call mouse_gpio_config_output_high
+	call twspi_disable
+	
+	fetcht 1,mem_lbutton_gpio
+	call gpio_set_wake
+	fetcht 1,mem_rbutton_gpio
+	call gpio_set_wake
+	fetcht 1,mem_mbutton_gpio
+	call gpio_set_wake
+
+	fetcht 1,mem_bk_button_gpio
+	call gpio_set_wake
+	fetcht 1,mem_fw_button_gpio
+	call gpio_set_wake
+	fetcht 1,mem_dpi_button_gpio
+	call gpio_set_wake
+	fetcht 1,mem_config_select_device_button_gpio
+	call gpio_set_wake
+
+	fetcht 1,mem_customer_key_gpio
+	call gpio_set_wake
+
+	call mouse_gpio_pd_idle
+
+	fetcht 1,mem_whee_a_data_gpio
+	call gpio_set_wake_by_current_state
+	fetcht 1,mem_whee_b_data_gpio
+	call gpio_set_wake_by_current_state
+	fetcht 1,mem_whee_ta_data_gpio
+	call gpio_set_wake_by_current_state
+	fetcht 1,mem_whee_tb_data_gpio
+	call gpio_set_wake_by_current_state
+	fetcht 1,mem_sensor_motion_gpio
+	branch gpio_set_wake
+
+
+//short mult: no key 
+mouse_set_mult:
+	fetch 2,mem_ui_state_map
+	rtnbit0 UI_STATE_BLE_CONNECTED
+	copy rega,pdata
+	nbranch le_set_config_short_mult,blank
+	branch le_clr_config_short_mult
+	
+	
+/****************************adc**************************************/	
+mouse_adc_gpio_set:
+	bpatch patch10_0,mem_patch10
+	fetch 1,mem_adc_config_flag
+	rtnne ADC_CONFIG_GPIO
+	fetcht 1,mem_adc_channel_gpio
+	branch gpio_set_high_impedance
+
+mouse_adc_read:
+	bpatch patch10_1,mem_patch10
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_ADC
+	call mouse_adc_gpio_set
+mouse_adc_read_start:
+	call enable_adc
+	call vdd_calculate_by_mode
+	store 2,mem_device_vdd_now_vol
+	fetch 1,mem_adc_config_flag
+	bne ADC_CONFIG_GPIO, mouse_adc_data_process
+	fetcht 2,mem_device_vdd_now_vol	// BAT= 1.5V, R = 200k, a = a*1.8
+	mul32 temp,8,pdata
+	div pdata,10
+	call get_div_result
+	iadd temp,pdata
+	store 2,mem_device_vdd_now_vol
+mouse_adc_data_process:	
+	arg mem_device_vdd_calculate_set,rega
+	call mouse_adc_bat_percent_lowpower_out
+	fetch 1,mem_adc_power_flag
+	bbit1 1,mouse_app_enter_hibernate
+	bbit0 0,mouse_adc_no_low_voltage
+	jam 1,mem_device_adc_last_low_voltage_flag
+	branch mouse_adc_low_voltage
+	
+mouse_adc_low_voltage:
+	arg MOUSE_LOW_VOLTAGE_FLAG,queue
+	branch mouse_enable_function_flag
+mouse_adc_no_low_voltage:
+	arg MOUSE_LOW_VOLTAGE_FLAG,queue
+	call mouse_disable_function_flag
+	jam 1,mem_adc_low_volatage_led_timer_count
+	fetch 1,mem_device_adc_last_low_voltage_flag
+	rtn blank
+	jam 0,mem_device_adc_last_low_voltage_flag
+	branch mouse_low_voltage_led_off_judge
+	
+
+mouse_adc_bat_percent_lowpower_out:
+	bpatch patch10_2,mem_patch10
+	ifetch 8,rega
+	store 8,mem_pdatatemp
+mouse_adc_bat_percent_lowpower_out_battery:
+	call adc_clear_no_power_flag
+	call adc_clear_low_power_flag
+	fetch 2,mem_pdatatemp+6
+	fetcht 2,mem_pdatatemp+2	        //shutdown voltage
+	isub temp,null
+	ncall adc_set_no_power_flag,positive
+	fetcht 2,mem_pdatatemp+4		//low voltage
+	isub temp,null
+	ncall adc_set_low_power_flag,positive
+mouse_adc_bat_level_set:
+	fetch 2,mem_pdatatemp+6		//now voltage	
+	fetcht 2,mem_pdatatemp		//full voltage
+	isub temp,null
+	branch mouse_adc_bat_level_100_percent,positive		// now >= full
+	fetcht 2,mem_pdatatemp+2	        //shutdown voltage
+	isub temp,pdata
+	nbranch mouse_adc_bat_level_0_percent,positive		// now < shutdown
+	branch mouse_adc_bat_level_0_percent,blank			// now = shutdown
+	mul32 pdata,100,rega								// (now - shutdown)*100 /(full - shutdown)
+	fetch 2,mem_pdatatemp
+	fetcht 2,mem_pdatatemp+2
+	isub temp,temp
+	copy rega,pdata
+	idiv temp
+	call get_div_result
+	store 1,mem_le_battery_level_percentage
+	rtn
+
+mouse_adc_bat_level_100_percent:
+	jam 100,mem_le_battery_level_percentage
+	rtn
+mouse_adc_bat_level_0_percent:	
+	jam 0,mem_le_battery_level_percentage
+	rtn
+	
+/****************************adc end********************************/	
+
+
+/****************************gpio******************************************/
+mouse_gpio_init:
+	fetcht 1,mem_eeprom_wp_gpio
+	call gpio_config_output
+//	call usb_offline_check_init
+	fetcht 1,mem_lbutton_gpio
+	call device_gpio_config_input_pu
+	fetcht 1,mem_rbutton_gpio
+	call device_gpio_config_input_pu
+	fetcht 1,mem_mbutton_gpio
+	call device_gpio_config_input_pu
+	fetcht 1,mem_bk_button_gpio
+	call device_gpio_config_input_pu
+	fetcht 1,mem_fw_button_gpio
+	call device_gpio_config_input_pu
+	fetcht 1,mem_dpi_button_gpio
+	call device_gpio_config_input_pu
+
+	fetcht 1,mem_matrix_public_gpio
+	call device_gpio_config_input_pu
+
+	fetcht 1,mem_config_select_device_button_gpio
+	call device_gpio_config_input_pu
+
+	fetcht 1,mem_customer_key_gpio
+	call device_gpio_config_input_pu
+
+	call mouse_wheel_gpio_init
+
+	fetcht 1,mem_whee_ta_data_gpio
+	call device_gpio_config_input_pu
+	fetcht 1,mem_whee_tb_data_gpio
+	call device_gpio_config_input_pu
+
+	fetcht 1,mem_sensor_motion_gpio
+	call device_gpio_config_input_pu
+
+	fetcht 1,mem_device_switch_gpio
+	branch device_gpio_config_input_pu
+
+mouse_gpio_set_pupd_by_input:
+	and temp,0x7f,queue
+	fetch 4,core_gpio_in
+	qisolate1 pdata
+	branch device_gpio_config_input_pu,true
+device_gpio_config_input_pd:
+	sub temp,UI_BUTTON_GPIO_DISABLE,null
+	rtn zero
+	set1 GPIO_ACTIVE_BIT,temp
+	branch gpio_config_input
+
+device_gpio_config_input_pu:
+	sub temp,UI_BUTTON_GPIO_DISABLE,null
+	rtn zero
+	set0 GPIO_ACTIVE_BIT,temp
+	branch gpio_config_input
+
+mouse_gpio_set_analog:
+	fetch 3,mem_device_set_analog_bit_set
+	store 3,mem_pdatatemp
+	arg 24,loopcnt
+	arg 0,temp
+mouse_gpio_set_analog_bit_loop:	
+	fetch 3,mem_pdatatemp
+	isolate1 0,pdata
+	call gpio_set_analog,true
+//	call gpio_set_high_impedance,true
+	fetch 3,mem_pdatatemp
+	lshift pdata,pdata
+	store 3,mem_pdatatemp
+	increase 1,temp
+	loop mouse_gpio_set_analog_bit_loop
+	rtn
+
+/****************************gpio end*******************************/
+
+/*******************spi*****************************/
+mouse_sensor_spi_init:
+	call mouse_spid_init_pin
+	jam 0x73,mem_spi_init_clk
+//	jam 0x1e,mem_spi_init_delay_time
+	call mouse_spi_init
+	branch twspi_enable
+	
+mouse_spi_write_flash_cb:
+mouse_spi_init:
+	branch spid_init
+	
+mouse_spid_init_pin:
+	fetch 1,mem_mouse_sensor_sclk_gpio
+ 	arg gpcfg_spid_sck,temp
+ 	call gpio_config_function_int
+ 	fetch 1,mem_mouse_sensor_sdio_gpio
+ 	arg gpcfg_spid_sdio,temp
+ 	branch gpio_config_function_int
+
+
+/*******************spi end**************************/
+
+mouse_motion:
+	bpatch patch10_3,mem_patch10
+	call hid_device_copy_key_data
+	disable user
+	setarg 0
+	store 6,mem_mouse_x
+	call mouse_check_sensor_data
+	setarg 0x0089
+	call twspi_write	
+	call mouse_setting_sensor_type
+	call mouse_zwheel
+	call mouse_t_zwheel
+	call mouse_key
+	fetch 1,mem_mouse_key
+	and_into 0x1f,pdata
+	store 1,mem_mouse_key
+	nbranch mouse_drawing_optima_init,user
+mouse_motion_rf_data:
+	call mouse_drawing_optima
+	branch mouse_no_data_timer_init
+
+
+/*******************wheel*************************/
+mouse_zwheel:
+	fetch 1,mem_mouse_z_data
+	rtn blank	
+	store 1,mem_mouse_z
+	jam 0,mem_mouse_z_data
+	branch enable_user
+	
+mouse_t_zwheel:
+	fetch 1,mem_mouse_tz_data
+	rtn blank	
+	store 1,mem_mouse_tz
+	jam 0,mem_mouse_tz_data
+	branch enable_user
+
+mouse_wheel_check:
+	bpatch patch10_4,mem_patch10
+	call mouse_wheel_gpio_init
+	call mouse_t_wheel_scan
+	call mouse_wheel_scan
+	fetch 1,mem_wheel_tb_new_pinlevel
+	fetcht 1,mem_wheel_tb_old_pinlevel
+	store 1,mem_wheel_tb_old_pinlevel
+	isub temp,null
+	nbranch app_lpm_wake_auto_lock,zero
+	fetch 1,mem_mwheel_b_new_pinlevel
+	fetcht 1,mem_mwheel_b_old_pinlevel
+	store 1,mem_mwheel_b_old_pinlevel
+	isub temp,null
+	nbranch app_lpm_wake_auto_lock,zero
+	rtn
+mouse_t_wheel_scan:
+	fetch 1,mem_whee_ta_data_gpio
+	rtneq GPIO_DISABLE
+	arg 0,rega
+	fetcht 1,mem_whee_ta_data_gpio
+	call gpio_get_bit
+	setflag true,0,rega
+	fetcht 1,mem_whee_tb_data_gpio
+	call gpio_get_bit
+	setflag true,1,rega
+	copy rega,pdata
+	store 1,mem_wheel_tb_new_pinlevel
+	beq 0x01,mouse_t_wheel_scan_judge1
+	beq 0x02,mouse_t_wheel_scan_judge2
+	fetch 1,mem_wheel_tog
+	bbit1 7,mouse_t_wheel_scan_judge3
+	rtn
+
+mouse_t_wheel_scan_judge1:
+	fetch 1,mem_wheel_tb_old_pinlevel
+	beq 0,mouse_t_wheel_scan_judge11
+	beq 3,mouse_t_wheel_scan_judge12
+	rtn
+mouse_t_wheel_scan_judge2:
+	fetch 1,mem_wheel_tb_old_pinlevel
+	beq 0,mouse_t_wheel_scan_judge21
+	beq 3,mouse_t_wheel_scan_judge22
+	rtn
+mouse_t_wheel_scan_judge11:
+	jam 0x82,mem_wheel_tog
+	rtn
+mouse_t_wheel_scan_judge12:
+	jam 0x81,mem_wheel_tog
+	rtn
+mouse_t_wheel_scan_judge21:
+	jam 0x80,mem_wheel_tog
+	rtn
+mouse_t_wheel_scan_judge22:
+	jam 0x83,mem_wheel_tog
+	rtn
+mouse_t_wheel_scan_judge3:
+	fetch 1,mem_wheel_tog
+	set0 7,pdata
+	store 1,mem_wheel_tog
+	beq 0,mouse_t_wheel_scan_judge30
+	beq 1,mouse_t_wheel_scan_judge31
+	beq 2,mouse_t_wheel_scan_judge32
+	beq 3,mouse_t_wheel_scan_judge33
+	rtn
+mouse_t_wheel_scan_judge30:
+	fetch 1,mem_wheel_tb_new_pinlevel
+	beq 3,mouse_wheel_t_forward
+	rtn
+mouse_t_wheel_scan_judge31:
+	fetch 1,mem_wheel_tb_new_pinlevel
+	beq 0,mouse_wheel_t_forward
+	rtn
+mouse_t_wheel_scan_judge32:
+	fetch 1,mem_wheel_tb_new_pinlevel
+	beq 3,mouse_wheel_t_back
+	rtn
+mouse_t_wheel_scan_judge33:
+	fetch 1,mem_wheel_tb_new_pinlevel
+	beq 0,mouse_wheel_t_back
+	rtn
+mouse_wheel_t_forward:
+	fetch 1,mem_mouse_tz_data
+	increase 1,pdata
+	store 1,mem_mouse_tz_data
+	rtn
+mouse_wheel_t_back:
+	fetch 1,mem_mouse_tz_data
+	increase -1,pdata
+	store 1,mem_mouse_tz_data
+	rtn
+
+
+mouse_wheel_scan:
+	fetch 1,mem_whee_a_data_gpio
+	rtneq GPIO_DISABLE
+	arg 0,rega
+	fetcht 1,mem_whee_a_data_gpio
+	call gpio_get_bit
+	setflag true,0,rega
+	fetcht 1,mem_whee_b_data_gpio
+	call gpio_get_bit
+	setflag true,1,rega
+	copy rega,pdata
+	store 1,mem_mwheel_b_new_pinlevel
+	beq 0x01,mouse_wheel_scan_judge1
+	beq 0x02,mouse_wheel_scan_judge2
+	fetch 1,mem_mwheel_tog
+	bbit1 7,mouse_wheel_scan_judge3
+	rtn
+
+mouse_wheel_scan_judge1:
+	fetch 1,mem_mwheel_b_old_pinlevel
+	beq 0,mouse_wheel_scan_judge11
+	beq 3,mouse_wheel_scan_judge12
+	rtn
+mouse_wheel_scan_judge2:
+	fetch 1,mem_mwheel_b_old_pinlevel
+	beq 0,mouse_wheel_scan_judge21
+	beq 3,mouse_wheel_scan_judge22
+	rtn
+mouse_wheel_scan_judge11:
+	jam 0x82,mem_mwheel_tog
+	rtn
+mouse_wheel_scan_judge12:
+	jam 0x81,mem_mwheel_tog
+	rtn
+mouse_wheel_scan_judge21:
+	jam 0x80,mem_mwheel_tog
+	rtn
+mouse_wheel_scan_judge22:
+	jam 0x83,mem_mwheel_tog
+	rtn
+mouse_wheel_scan_judge3:
+	fetch 1,mem_mwheel_tog
+	set0 7,pdata
+	store 1,mem_mwheel_tog
+	beq 0,mouse_wheel_scan_judge30
+	beq 1,mouse_wheel_scan_judge31
+	beq 2,mouse_wheel_scan_judge32
+	beq 3,mouse_wheel_scan_judge33
+	rtn
+mouse_wheel_scan_judge30:
+	fetch 1,mem_mwheel_b_new_pinlevel
+	beq 3,mouse_wheel_forward
+	rtn
+mouse_wheel_scan_judge31:
+	fetch 1,mem_mwheel_b_new_pinlevel
+	beq 0,mouse_wheel_forward
+	rtn
+mouse_wheel_scan_judge32:
+	fetch 1,mem_mwheel_b_new_pinlevel
+	beq 3,mouse_wheel_back
+	rtn
+mouse_wheel_scan_judge33:
+	fetch 1,mem_mwheel_b_new_pinlevel
+	beq 0,mouse_wheel_back
+	rtn
+mouse_wheel_forward:
+	fetch 1,mem_mouse_z_data
+	increase 1,pdata
+	store 1,mem_mouse_z_data
+	rtn
+mouse_wheel_back:
+	fetch 1,mem_mouse_z_data
+	increase -1,pdata
+	store 1,mem_mouse_z_data
+	rtn
+
+/*
+mouse_wheel_gpio_set_wake:
+	fetcht 1,mem_whee_a_data_gpio
+	call gpio_set_wake_by_current_state
+	fetcht 1,mem_whee_b_data_gpio
+	call gpio_set_wake_by_current_state
+	fetcht 1,mem_whee_ta_data_gpio
+	call gpio_set_wake_by_current_state
+	fetcht 1,mem_whee_tb_data_gpio
+	branch gpio_set_wake_by_current_state
+*/	
+mouse_before_hibernate_wheel_gpio_set:
+	fetcht 1,mem_whee_a_data_gpio
+	call mouse_gpio_set_pupd_by_input
+	fetcht 1,mem_whee_b_data_gpio
+	call mouse_gpio_set_pupd_by_input
+	fetcht 1,mem_whee_ta_data_gpio
+	call mouse_gpio_set_pupd_by_input
+	fetcht 1,mem_whee_tb_data_gpio
+	branch mouse_gpio_set_pupd_by_input
+
+mouse_wheel_trigger:
+	fetch 2,mem_mouse_z
+	rtn blank
+	jam 1,mem_mouse_wheel_trigger
+	jam 10,mem_mouse_wheel_trigger_timer
+	rtn
+
+mouse_wheel_trigger_timer:
+	arg mem_mouse_wheel_trigger_timer,regc
+	arg mouse_wheel_trigger_disable,regb
+	branch timer_single_step
+mouse_wheel_trigger_disable:
+	jam 0,mem_mouse_wheel_trigger
+	rtn
+
+
+/*
+mouse_set_qdecoder_x:
+	arg MOUSE_DEFAULT_XA_GPIO,temp
+	call device_gpio_config_input_pu
+	arg MOUSE_DEFAULT_XA_GPIO,temp
+	call gpio_get_bit
+	rtn true
+	fetch 1,core_qdec_cntx
+	set1 4,pdata
+	store 1,core_qdec_cntx
+	rtn
+*/	
+	
+/*******************wheel end**********************/
+
+
+/********************dpi******************************/
+mouse_dpi_check:
+	fetch 1,mem_dpi_button_gpio
+	rtneq GPIO_DISABLE
+	arg 0,rega
+	jam MOUSE_DPI_KEY,mem_mouse_key_temp
+	fetcht 1,mem_dpi_button_gpio
+	call mouse_dpi_key_check
+	store 1,mem_mouse_dpikey_press_status
+	fetch 1,mem_matrix_public_gpio
+	beq GPIO_DISABLE,mouse_3io6key_dpi_check_end
+	call mouse_matrix_public_gpio_reset
+mouse_dpi_check_exit:	
+	copy rega,pdata
+	bbit1 MOUSE_DPI_KEY,mouse_dpi_down
+	branch mouse_dpi_up
+	
+mouse_dpi_key_check:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_DPI_KEY_CONNECT_GND,mouse_dpi_key_connect_gnd
+	fetch 1,mem_mouse_dpikey_press_status
+	copy pdata,regc
+	fetch 1,mem_matrix_public_gpio
+	beq GPIO_DISABLE,mouse_dpi_3io6key_check
+	fetch 1,mem_mouse_ghost_flag
+	nbranch mouse_dpi_check_end,blank
+mouse_dpi_key_connect_matrix:
+	call gpio_get_bit
+	fetcht 1,mem_matrix_public_gpio
+	branch mouse_dpi_key_connect_gnd,true
+	fetcht 1,mem_matrix_public_gpio
+	call gpio_out_active
+	fetcht 1,mem_dpi_button_gpio
+	fetch 1,mem_mouse_dpikey_press_status
+	branch mouse_check_key_connect_gnd
+
+mouse_dpi_3io6key_check:
+	fetch 1,mem_dpi_button_gpio
+	call mouse_gpio_config_output_low
+	fetcht 1,mem_dpi_button_gpio
+	branch mouse_3io6key_check
+	
+
+mouse_3io6key_dpi_check_end:
+	fetcht 1,mem_dpi_button_gpio
+	call device_gpio_config_input_pu
+	branch mouse_dpi_check_exit
+
+mouse_dpi_check_end:
+	jam DPI_BUTTON_STATE_UP,mem_mouse_dpi_button_state
+	jam 0,mem_mouse_dpikey_press_status
+	rtn
+
+mouse_dpi_key_connect_gnd:
+	fetch 1,mem_mouse_dpikey_press_status
+	branch mouse_check_key_connect_gnd
+
+mouse_dpi_down:
+	fetch 1,mem_mouse_dpi_button_state
+	rtneq DPI_BUTTON_STATE_DOWN
+	jam DPI_BUTTON_STATE_DOWN,mem_mouse_dpi_button_state
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit1 MOUSE_ENABLE_SELECT_DEVICE_BY_DPI_BUTTON
+	rtnbit1 MOUSE_ENABLE_DPI_KEY_LONG_PRESS_DISCONVERY
+	branch mouse_dpi_process
+
+mouse_dpi_up:
+	fetch 1,mem_mouse_dpi_button_state
+	rtneq DPI_BUTTON_STATE_UP
+	jam DPI_BUTTON_STATE_UP,mem_mouse_dpi_button_state
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_SELECT_DEVICE_BY_DPI_BUTTON,mouse_dpi_up_next
+	bbit1 MOUSE_ENABLE_DPI_KEY_LONG_PRESS_DISCONVERY,mouse_dpi_up_next
+	rtn
+mouse_dpi_up_next:	
+	fetch 1,mem_mouse_dpi_long_press_flag
+	nbranch mouse_dpi_up_after_long_press,blank
+	fetch 1,mem_select_device_count
+	ncall mouse_dpi_process,blank
+mouse_dpi_up_after_long_press:	
+	jam 0,mem_mouse_dpi_long_press_flag
+	fetch 1,mem_ui_button_timeout
+	store 1,mem_select_device_count	
+	store 1,mem_bt_discovery_count	
+	rtn
+	
+mouse_dpi_process:	
+	bpatch patch10_5,mem_patch10
+	call mouse_dpi_ghost_check
+	rtn user
+mouse_dpi_process_skip_ghost:
+	fetch 1,mem_mouse_dpi
+	
+	copy pdata,temp
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_DOUBLE_DPI_KEY,mouse_double_dpi_check
+	copy temp,pdata
+	
+	increase 1,pdata
+	and pdata,0x03,pdata
+mouse_dpi_level_store:	
+	store 1,mem_mouse_dpi
+	call mouse_setting_dpi
+	branch mouse_store_dpi_info_check
+
+
+/***************************another dpi key dpi**********************/
+
+mouse_double_dpi_check:
+	fetch 1,mem_dpi_another_button_down_enable
+	nbranch mouse_another_dpi_button_down,blank
+mouse_dpi_increase:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_DPI_LEVEL_4,mouse_dpi_increase_level_4
+	copy temp,pdata
+	rtneq MOUSE_DPI_LEVEL2
+mouse_dpi_increase_level:
+	beq MOUSE_DPI_LEVEL1,mouse_dpi_level_3	//1600
+	beq MOUSE_DPI_LEVEL3,mouse_dpi_level_2 	//1200
+	rtn
+
+mouse_dpi_level_1:		//800
+	setarg 2
+	branch mouse_dpi_level_store
+mouse_dpi_level_2:		//1200
+	setarg 0
+	branch mouse_dpi_level_store
+mouse_dpi_level_3:		//1600
+	setarg 1
+	branch mouse_dpi_level_store
+mouse_dpi_level_4:		//1000
+	setarg 3
+	branch mouse_dpi_level_store	
+
+mouse_dpi_increase_level_4:
+	copy temp,pdata			//0->1,2->3,3->0
+	rtneq MOUSE_DPI_LEVEL2
+	beq MOUSE_DPI_LEVEL1,mouse_dpi_level_3
+	beq MOUSE_DPI_LEVEL3,mouse_dpi_level_4
+	beq MOUSE_DPI_LEVEL4,mouse_dpi_level_2
+	rtn
+mouse_dpi_decrease_level_4:
+	copy temp,pdata			//0->3,1->0,3->2
+	rtneq MOUSE_DPI_LEVEL3
+	beq MOUSE_DPI_LEVEL1,mouse_dpi_level_4
+	beq MOUSE_DPI_LEVEL2,mouse_dpi_level_2
+	beq MOUSE_DPI_LEVEL4,mouse_dpi_level_1
+	rtn
+
+mouse_another_dpi_button_down:
+mouse_dpi_decrease:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_DPI_LEVEL_4,mouse_dpi_decrease_level_4
+	copy temp,pdata
+	rtneq MOUSE_DPI_LEVEL3
+mouse_dpi_decrease_level:
+	beq MOUSE_DPI_LEVEL1,mouse_dpi_level_1
+	beq MOUSE_DPI_LEVEL2,mouse_dpi_level_2
+	rtn
+	
+
+/*************************another dpi key dpi end********************/
+
+mouse_dpi_ghost_check:
+	disable user
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit1 MOUSE_ENABLE_DPI_KEY_CONNECT_GND
+	branch mouse_ghost_key_value_check
+	
+mouse_dpi_key_check_long_press:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_SELECT_DEVICE_BY_DPI_BUTTON,mouse_select_device_by_dpi_button
+	bbit1 MOUSE_ENABLE_DPI_KEY_LONG_PRESS_DISCONVERY,mouse_discovery_by_dpi_button
+	rtn
+
+mouse_select_device_by_dpi_button:
+	fetch 1,mem_mouse_dpi_button_state
+	rtnne DPI_BUTTON_STATE_DOWN	
+	arg mem_select_device_count,regc
+	arg mouse_ready_reconnection_by_dpi_button,regb
+	branch timer_single_step
+
+mouse_ready_reconnection_by_dpi_button:
+	jam 1,mem_mouse_dpi_long_press_flag
+	branch mouse_ready_reconnection_by_button
+
+mouse_discovery_by_dpi_button:
+	fetch 1,mem_mouse_dpi_button_state
+	rtnne DPI_BUTTON_STATE_DOWN	
+	arg mem_bt_discovery_count,regc
+	arg mouse_long_dpi_button_bt_discovery,regb
+	branch timer_single_step
+
+mouse_long_dpi_button_bt_discovery:
+	jam 1,mem_mouse_dpi_long_press_flag
+	branch mouse_long_button_bt_discovery
+
+mouse_setting_dpi_4_level:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit1 MOUSE_ENABLE_DPI_LEVEL_4
+	fetch 1,mem_mouse_dpi
+	rtnne MOUSE_DPI_LEVEL4
+	jam MOUSE_DPI_LEVEL1,mem_mouse_dpi
+	rtn
+	
+mouse_setting_dpi:
+	bpatch patch10_6,mem_patch10
+	call mouse_setting_dpi_4_level
+	call mouse_dpi_led_blink_delay
+mouse_setting_sensor_type:
+	bpatch patch10_7,mem_patch10
+	fetch 1,mem_config_sensor_type
+	beq S201X,mouse_seting_S201_dpi
+	beq P3212,mouse_seting_3212_dpi
+	beq KA8G2,mouse_seting_ka8g2_dpi
+	fetch 1,mem_mouse_dpi
+	beq MOUSE_DPI_LEVEL1,mouse_set_cpi0		//1200
+	beq MOUSE_DPI_LEVEL2,mouse_set_cpi1		//1600
+	beq MOUSE_DPI_LEVEL3,mouse_set_cpi2		//800
+	beq MOUSE_DPI_LEVEL4,mouse_set_cpi3		//1000
+mouse_set_cpi1:	//320x+8009
+	fetcht 1,mem_320x_dpi_1
+	branch mouse_dpi_store
+mouse_set_cpi0:
+	fetcht 1,mem_320x_dpi_0
+	branch mouse_dpi_store
+mouse_set_cpi2:
+	fetcht 1,mem_320x_dpi_2
+	branch mouse_dpi_store
+mouse_set_cpi3:
+	fetcht 1,mem_320x_dpi_3
+mouse_dpi_store:
+	fetch 1,mem_config_sensor_type
+	beq P3065_XY,mouse_3065xy_set_dpi
+	beq MX8650,mouse_3065xy_set_dpi
+	beq KA8,mouse_ka8_set_dpi
+	beq P6520,mouse_ka8_set_dpi
+	beq P8009,mouse_3065xy_set_dpi
+mouse_dpi_write:		// 3205  1  2  3  4
+	storet 1,mem_mouse_cpi_count
+	setarg MOUSE_DPI_ADDRESS
+	call twspi_read
+	and pdata,0xf8,temp
+	fetch 1,mem_mouse_cpi_count
+	iadd temp,pdata
+	lshift8 pdata,pdata
+	add pdata,MOUSE_DPI_ADDRESS,pdata
+	branch twspi_write
+
+mouse_3065xy_set_dpi:	// 0 1 2 3
+	increase -1,temp
+	branch mouse_dpi_write
+
+mouse_ka8_set_dpi:	// 3 4 5 6
+	increase 2,temp
+	branch mouse_dpi_write
+
+mouse_seting_S201_dpi:
+	fetch 1,mem_mouse_dpi
+	beq MOUSE_DPI_LEVEL1,mouse_set_S201_dpi_0	//1200
+	beq MOUSE_DPI_LEVEL2,mouse_set_S201_dpi_2	//2400
+	beq MOUSE_DPI_LEVEL3,mouse_set_S201_dpi_3	//3200
+	beq MOUSE_DPI_LEVEL4,mouse_set_S201_dpi_4	//800
+	rtn
+mouse_set_S201_dpi_0:	//1200
+	fetch 1,mem_sensor_s201_dpi_0
+	branch mouse_dpi_S201_store
+
+mouse_set_S201_dpi_1:	//1600
+	fetch 1,mem_sensor_s201_dpi_1
+	branch mouse_dpi_S201_store
+	
+mouse_set_S201_dpi_2:	//2400
+	fetch 1,mem_sensor_s201_dpi_2
+	branch mouse_dpi_s201_store
+
+mouse_set_S201_dpi_3:	//3200
+	fetch 1,mem_sensor_s201_dpi_3
+	branch mouse_dpi_s201_store
+
+mouse_set_S201_dpi_4:	//800
+	fetch 1,mem_sensor_s201_dpi_4
+mouse_dpi_s201_store:
+	copy pdata,rega
+	setarg 0xc309
+	call twspi_write
+	copy rega,pdata
+	lshift8 pdata,pdata
+	add pdata,0x23,pdata
+	call twspi_write
+mouse_sensor_enable_wp:
+	setarg 0x0009
+	branch twspi_write
+mouse_sensor_disable_wp:
+	setarg 0x5a09
+	branch twspi_write
+
+mouse_seting_3212_dpi:
+	fetch 1,mem_mouse_dpi
+	beq MOUSE_DPI_LEVEL1,mouse_set_p3212_cpi0	//1200
+	beq MOUSE_DPI_LEVEL2,mouse_set_p3212_cpi1	//1600
+	beq MOUSE_DPI_LEVEL3,mouse_set_p3212_cpi2	//2400
+	beq MOUSE_DPI_LEVEL4,mouse_set_p3212_cpi3	//800
+mouse_set_p3212_cpi1:
+	fetch 1,mem_3212_dpi_1
+	branch mouse_p3212_dpi
+mouse_set_p3212_cpi0:
+	fetch 1,mem_3212_dpi_0
+	branch mouse_p3212_dpi
+mouse_set_p3212_cpi2:
+	fetch 1,mem_3212_dpi_2
+	branch mouse_p3212_dpi
+mouse_set_p3212_cpi3:
+	fetch 1,mem_3212_dpi_3
+mouse_p3212_dpi:
+	store 1,mem_mouse_cpi_count
+	lshift8 pdata,pdata
+	copy pdata,rega
+	add pdata,MOUSE_P3212_DPI_XADDRESS,pdata
+  	call twspi_write
+ 	copy rega,pdata
+  	add pdata,MOUSE_P3212_DPI_YADDRESS,pdata
+	branch twspi_write
+
+mouse_seting_ka8g2_dpi:
+	fetch 1,mem_mouse_dpi
+	beq MOUSE_DPI_LEVEL1,mouse_set_pka8g2_cpi0		//1200
+	beq MOUSE_DPI_LEVEL2,mouse_set_pka8g2_cpi1		//1600
+	beq MOUSE_DPI_LEVEL3,mouse_set_pka8g2_cpi2		//2400
+	beq MOUSE_DPI_LEVEL4,mouse_set_pka8g2_cpi3		//800
+mouse_set_pka8g2_cpi1:
+	fetch 1,mem_ka8g2_dpi_1
+	branch mouse_p3212_dpi
+
+mouse_set_pka8g2_cpi0:
+	fetch 1,mem_ka8g2_dpi_0
+	branch mouse_p3212_dpi
+	
+mouse_set_pka8g2_cpi2:
+	fetch 1,mem_ka8g2_dpi_2
+	branch mouse_p3212_dpi
+
+mouse_set_pka8g2_cpi3:
+	fetch 1,mem_ka8g2_dpi_3
+	branch mouse_p3212_dpi
+
+		
+/********************dpi end***************************/		
+
+
+/***********************key******************************/
+
+mouse_key:
+	call mouse_check_firekey_gpio
+	fetch 1,mem_fire_key_flag
+	nbranch fire_key_press,blank
+	fetch 1,mem_fire_key_status
+	nbranch fire_key_process,blank
+	
+	call mouse_check_key_gpio
+mouse_key_next:
+	call mouse_ghost_key_check
+	call mouse_set_mult
+	call mouse_24g_key
+	copy rega,pdata
+	fetcht 1,mem_mouse_key_last
+	store 1,mem_mouse_key_last
+	store 1,mem_mouse_key
+	ixor temp,pdata
+	sub pdata,0,null
+	rtn zero
+	branch enable_user
+
+mouse_24g_key:
+	rtnmark0 mark_24g
+	copy rega,pdata
+	rtn blank
+	store 1,mem_mouse_key
+	branch enable_user
+
+	
+/************************************ghost key******************************/
+
+mouse_ghost_key_check:
+	jam 0,mem_mouse_matrix_key_cow_count
+	jam 0,mem_mouse_matrix_key_row_count
+	jam 0,mem_mouse_ghost_flag
+	copy pdata,regb
+	fetcht 1,mem_lbutton_gpio
+	fetch 1,mem_bk_button_gpio
+	isub temp,null
+	branch mouse_matrix_ghost_key_L_BK,zero
+	fetch 1,mem_fw_button_gpio
+	isub temp,null
+	branch mouse_matrix_ghost_key_L_FW,zero
+	fetcht 1,mem_mbutton_gpio
+	fetch 1,mem_bk_button_gpio
+	isub temp,null
+	branch mouse_ghost_key_MBK_RFW,zero
+	branch mouse_ghost_key_MFW_RBK
+
+mouse_matrix_ghost_key_L_BK:
+	fetcht 1,mem_mbutton_gpio
+	fetch 1,mem_fw_button_gpio
+	isub temp,null
+	branch mouse_ghost_key_LBK_MFW,zero
+	branch mouse_ghost_key_LBK_RFW
+
+mouse_matrix_ghost_key_L_FW:
+	fetcht 1,mem_mbutton_gpio
+	fetch 1,mem_bk_button_gpio
+	isub temp,null
+	branch mouse_ghost_key_LFW_MBK,zero
+	branch mouse_ghost_key_LFW_RBK
+
+mouse_ghost_key_LBK_MFW:
+	call mouse_ghost_key_check_L_BK
+	call mouse_ghost_key_check_M_FW
+	branch mouse_ghost_key_check_next
+
+mouse_ghost_key_LBK_RFW:
+	call mouse_ghost_key_check_L_BK
+	branch mouse_ghost_key_RFW
+
+mouse_ghost_key_LFW_MBK:
+	call mouse_ghost_key_check_L_FW
+	call mouse_ghost_key_check_M_BK
+	branch mouse_ghost_key_check_next
+	
+mouse_ghost_key_LFW_RBK:
+	call mouse_ghost_key_check_L_FW
+	branch mouse_ghost_key_RBK
+	
+mouse_ghost_key_MBK_RFW:
+	call mouse_ghost_key_check_M_BK
+mouse_ghost_key_RFW:
+	call mouse_ghost_key_check_R_FW
+	branch mouse_ghost_key_check_next
+	
+mouse_ghost_key_MFW_RBK:
+	call mouse_ghost_key_check_M_FW
+mouse_ghost_key_RBK:
+	call mouse_ghost_key_check_R_BK
+mouse_ghost_key_check_next:
+	call mouse_ghost_key_check_BK_FW
+	call mouse_ghost_key_check_LMR
+	fetch 1,mem_mouse_matrix_key_row_count
+	rtn blank
+	fetch 1,mem_mouse_matrix_key_cow_count
+	rtn blank
+	jam 1,mem_mouse_ghost_flag
+	fetch 1,mem_mouse_key_last		// matrix have ghost key
+	copy pdata,rega
+	rtn
+
+mouse_ghost_key_check_L_BK:
+	and regb,MOUSE_L_BK_BUTTON,pdata
+	beq MOUSE_L_BK_BUTTON,mouse_matrix_cow_more_than_one_key
+	rtn
+mouse_ghost_key_check_M_BK:
+	and regb,MOUSE_M_BK_BUTTON,pdata
+	beq MOUSE_M_BK_BUTTON,mouse_matrix_cow_more_than_one_key
+	rtn
+mouse_ghost_key_check_R_BK:
+	and regb,MOUSE_R_BK_BUTTON,pdata
+	beq MOUSE_R_BK_BUTTON,mouse_matrix_cow_more_than_one_key
+	rtn
+mouse_ghost_key_check_L_FW:
+	and regb,MOUSE_L_FW_BUTTON,pdata
+	beq MOUSE_L_FW_BUTTON,mouse_matrix_cow_more_than_one_key
+	rtn
+mouse_ghost_key_check_M_FW:
+	and regb,MOUSE_M_FW_BUTTON,pdata
+	beq MOUSE_M_FW_BUTTON,mouse_matrix_cow_more_than_one_key
+	rtn
+mouse_ghost_key_check_R_FW:
+	and regb,MOUSE_R_FW_BUTTON,pdata
+	beq MOUSE_R_FW_BUTTON,mouse_matrix_cow_more_than_one_key
+	rtn
+
+mouse_ghost_key_check_BK_FW:
+	and regb,MOUSE_BK_FW_BUTTON,pdata
+	beq MOUSE_BK_FW_BUTTON,mouse_matrix_row_more_than_one_key
+	rtn	
+
+mouse_ghost_key_check_LMR:
+	and temp,MOUSE_LMR_BUTTON,pdata	// key LMR press
+	beq MOUSE_LR_BUTTON,mouse_matrix_row_more_than_one_key
+	beq MOUSE_LM_BUTTON,mouse_matrix_row_more_than_one_key
+	beq MOUSE_RM_BUTTON,mouse_matrix_row_more_than_one_key
+	beq MOUSE_LMR_BUTTON,mouse_matrix_row_more_than_one_key
+	rtn
+
+
+mouse_matrix_row_more_than_one_key:
+	jam 1,mem_mouse_matrix_key_row_count
+	rtn
+
+mouse_matrix_cow_more_than_one_key:
+	jam 1,mem_mouse_matrix_key_cow_count
+	rtn
+
+/************************************ghost key end******************************/
+
+
+
+/************************************double dpi key******************************/
+
+mouse_dpi_another_gpio_check:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_DOUBLE_DPI_KEY
+	bbit0 MOUSE_ENABLE_ANOTHER_DPI_KEY_CONNECT_GND,mouse_dpi_another_gpio_connect_vin_check
+mouse_dpi_another_gpio_connect_gnd_check:	
+	fetch 1,mem_dpi_another_button_gpio
+	call mouse_gpio_config_output_high
+	call mouse_dpi_another_check
+	fetcht 1,mem_dpi_another_button_gpio
+	branch device_gpio_config_input_pu	
+
+mouse_dpi_another_gpio_connect_vin_check:
+	fetch 1,mem_dpi_another_button_gpio
+	call mouse_gpio_config_output_low
+	jam MOUSE_DPI_ANOTHER_KEY,mem_mouse_key_temp_patch
+	fetcht 1,mem_dpi_another_button_gpio
+	fetch 1,mem_dpi_another_press_status
+	call mouse_check_key_connect_vin_new
+	call mouse_dpi_another_state_check
+	fetcht 1,mem_dpi_another_button_gpio
+	branch device_gpio_config_input_pu	
+
+mouse_dpi_another_down_new:
+	call device_gpio_config_input_pu	
+	fetch 1,mem_dpi_another_button_state
+	rtneq DPI_BUTTON_STATE_DOWN
+	jam DPI_BUTTON_STATE_DOWN,mem_dpi_another_button_state
+	branch mouse_dpi_process
+
+mouse_dpi_another_check:
+	jam MOUSE_DPI_ANOTHER_KEY,mem_mouse_key_temp_patch
+	fetcht 1,mem_dpi_another_button_gpio
+	fetch 1,mem_dpi_another_press_status	
+	call mouse_check_key_connect_gnd_new
+mouse_dpi_another_state_check:
+	store 1,mem_dpi_another_press_status
+	fetch 1,mem_dpi_another_button_down_enable
+	branch mouse_dpi_another_up,blank	
+mouse_dpi_another_down:
+	fetch 1,mem_dpi_another_button_state
+	rtneq DPI_BUTTON_STATE_DOWN
+	jam DPI_BUTTON_STATE_DOWN,mem_dpi_another_button_state
+	branch mouse_dpi_process
+
+mouse_dpi_another_up:
+	fetch 1,mem_dpi_another_button_state
+	rtneq DPI_BUTTON_STATE_UP
+	jam DPI_BUTTON_STATE_UP,mem_dpi_another_button_state
+	rtn
+
+mouse_check_key_connect_gnd_new:	
+	lshift pdata,pdata
+	copy pdata,regb
+	call gpio_get_bit
+	setflag true,0,regb
+	and regb,0x07,pdata
+	fetcht 1,mem_mouse_key_temp_patch
+	copy temp,queue
+	beq 0x07,mouse_another_dpi_key_press		//  about 17~22ms three times
+	beq 0x00,mouse_another_dpi_key_release
+	rtn
+
+mouse_check_key_connect_vin_new:	
+	lshift pdata,pdata
+	copy pdata,regb
+	call device_gpio_config_input_pd
+	call gpio_get_bit
+	setflag true,0,regb
+	and regb,0x07,pdata
+	fetcht 1,mem_mouse_key_temp_patch
+	copy temp,queue
+	beq 0x07,mouse_another_dpi_key_press		//  about 17~22ms three times
+	beq 0x00,mouse_another_dpi_key_release
+	rtn
+
+mouse_another_dpi_key_press:
+	jam 1,mem_dpi_another_button_down_enable
+	rtn
+mouse_another_dpi_key_release:
+	jam 0,mem_dpi_another_button_down_enable
+	rtn
+
+/************************************double dpi key end******************************/
+
+
+
+/************************************fire key************************************/
+
+mouse_check_firekey_gpio:
+	arg 0,regb
+	fetch 1,mem_firebutton_gpio
+	rtneq GPIO_DISABLE
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_FIRE_KEY_CONNECT_GND,mouse_check_firekey_connect_vin
+mouse_check_firekey_connect_gnd:
+	fetcht 1,mem_firebutton_gpio
+	call device_gpio_config_input_pu
+	fetcht 1,mem_firebutton_gpio
+	call gpio_get_bit
+	setflag true,0,regb
+mouse_firekey_state_store:	
+	copy regb,pdata
+	store 1,mem_fire_key_flag
+	rtn
+
+mouse_check_firekey_connect_vin:
+	fetcht 1,mem_firebutton_gpio
+	call device_gpio_config_input_pd
+	fetcht 1,mem_firebutton_gpio
+	call gpio_get_bit
+	nsetflag true,0,regb
+	branch mouse_firekey_state_store
+
+fire_key_process: 
+	beq 4,fire_key_process_end
+fire_key_press:
+	call firekey_clkn_bt_timer_check 
+	fetch 4,mem_fire_key_delay
+	arg 0xa0,temp      
+	iadd temp,temp
+	copy clkn_bt,pdata
+	isub temp,null
+	nrtn positive
+	store 4,mem_fire_key_delay 
+	fetch 1,mem_fire_key_status
+	beq 0,fire_key_process_start
+	beq 1,fire_key_process_release1
+	beq 2,fire_key_process_start2
+	beq 3,fire_key_process_release2
+	rtn
+
+fire_key_process_start:
+	jam 1,mem_fire_key_status
+fire_key_down:
+	jam 1,mem_mouse_key
+	branch enable_user
+
+fire_key_process_release1:
+	jam 2,mem_fire_key_status
+fire_key_release:
+	jam 0,mem_mouse_key
+	branch enable_user
+
+fire_key_process_start2:
+	jam 3,mem_fire_key_status
+	branch fire_key_down
+
+fire_key_process_release2:
+	jam 0,mem_fire_key_status
+	branch fire_key_release
+
+fire_key_process_end:
+	jam 0,mem_fire_key_status
+	jam 0,mem_mouse_key
+	rtn
+
+firekey_clkn_bt_timer_check:
+	fetcht 4,mem_fire_key_delay
+	copy clkn_bt,pdata
+	isub temp,null
+	ncall firekey_clkn_bt_timer_timeout,positive
+	rtn
+firekey_clkn_bt_timer_timeout:
+	setarg 0
+	store 4,mem_fire_key_delay
+	rtn
+
+/*********************************fire key end*****************************/
+
+
+
+/*********************************matrix key*****************************/
+
+mouse_key_check_once:
+	call mouse_check_key_gpio_once
+	call mouse_check_key_gpio
+	setarg 0x00
+	store 3,mem_mouse_lkey_press_status
+	rtn
+	
+mouse_check_key_gpio:
+	bpatch patch11_0,mem_patch11
+	fetch 1,mem_24g_shutdown_flag
+	ncall mouse_check_key_gpio_once,blank
+	arg 0,rega
+	call mouse_check_lkey_gpio
+	call mouse_check_rkey_gpio
+	call mouse_check_mkey_gpio
+	call mouse_check_bkkey_gpio
+	call mouse_check_fwkey_gpio
+	call mouse_check_firekey_gpio
+	call mouse_check_customerkey_gpio
+mouse_check_key_gpio_next:
+	copy rega,pdata
+	rtn
+
+mouse_check_key_gpio_once:
+	setarg 0x030303
+	store 3,mem_mouse_lkey_press_status
+	rtn
+
+mouse_check_lkey_gpio:
+	fetch 1,mem_lbutton_gpio
+	call mouse_gpio_config_output_high
+	jam MOUSE_L_KEY,mem_mouse_key_temp
+	fetcht 1,mem_lbutton_gpio
+	fetch 1,mem_mouse_lkey_press_status
+	call mouse_check_key_connect_gnd
+	store 1,mem_mouse_lkey_press_status
+	fetcht 1,mem_lbutton_gpio
+	branch device_gpio_config_input_pu
+
+mouse_check_rkey_gpio:
+	fetch 1,mem_rbutton_gpio
+	call mouse_gpio_config_output_high
+	jam MOUSE_R_KEY,mem_mouse_key_temp
+	fetcht 1,mem_rbutton_gpio
+	fetch 1,mem_mouse_rkey_press_status
+	call mouse_check_key_connect_gnd
+	store 1,mem_mouse_rkey_press_status
+	fetcht 1,mem_rbutton_gpio
+	branch device_gpio_config_input_pu
+	
+mouse_check_mkey_gpio:
+	fetch 1,mem_mbutton_gpio
+	call mouse_gpio_config_output_high
+	jam MOUSE_M_KEY,mem_mouse_key_temp
+	fetcht 1,mem_mbutton_gpio
+	fetch 1,mem_mouse_mkey_press_status
+	call mouse_check_key_connect_gnd
+	store 1,mem_mouse_mkey_press_status
+	fetcht 1,mem_mbutton_gpio
+	branch device_gpio_config_input_pu
+
+mouse_check_bkkey_gpio:
+	fetch 1,mem_bk_button_gpio
+	rtneq GPIO_DISABLE
+	jam MOUSE_BK_KEY,mem_mouse_key_temp
+	fetch 1,mem_mouse_bkkey_press_status
+	copy pdata,regc
+	fetcht 1,mem_bk_button_gpio
+	fetch 1,mem_matrix_public_gpio
+	beq GPIO_DISABLE,mouse_3io6key_bk_check
+	call gpio_get_bit
+	branch mouse_check_bk_button_connect_gnd,true
+	fetcht 1,mem_matrix_public_gpio
+	call gpio_out_active
+	fetcht 1,mem_bk_button_gpio
+	fetch 1,mem_mouse_bkkey_press_status
+	call mouse_check_key_connect_gnd
+mouse_check_bkkey_gpio_end:	
+	store 1,mem_mouse_bkkey_press_status
+	branch mouse_matrix_public_gpio_reset
+
+mouse_check_bk_button_connect_gnd:
+	fetcht 1,mem_matrix_public_gpio
+	fetch 1,mem_mouse_bkkey_press_status
+	call mouse_check_key_connect_gnd
+	branch mouse_check_bkkey_gpio_end
+
+mouse_3io6key_bk_check:
+	fetch 1,mem_bk_button_gpio
+	call mouse_gpio_config_output_low
+	fetcht 1,mem_bk_button_gpio
+	call mouse_3io6key_check
+	store 1,mem_mouse_bkkey_press_status
+	fetcht 1,mem_bk_button_gpio
+	branch device_gpio_config_input_pu
+
+
+mouse_check_fwkey_gpio:
+	fetch 1,mem_fw_button_gpio
+	rtneq GPIO_DISABLE
+	jam MOUSE_FW_KEY,mem_mouse_key_temp
+	fetch 1,mem_mouse_fwkey_press_status
+	copy pdata,regc
+	fetcht 1,mem_fw_button_gpio
+	fetch 1,mem_matrix_public_gpio
+	beq GPIO_DISABLE,mouse_3io6key_fw_check
+	call gpio_get_bit
+	branch mouse_check_fw_button_connect_gnd,true
+	fetcht 1,mem_matrix_public_gpio
+	call gpio_out_active
+	fetcht 1,mem_fw_button_gpio
+	fetch 1,mem_mouse_fwkey_press_status
+	call mouse_check_key_connect_gnd
+mouse_check_fwkey_gpio_end:	
+	store 1,mem_mouse_fwkey_press_status
+mouse_matrix_public_gpio_reset:	
+	fetcht 1,mem_matrix_public_gpio
+	branch device_gpio_config_input_pu
+
+mouse_check_fw_button_connect_gnd:
+	fetcht 1,mem_matrix_public_gpio
+	fetch 1,mem_mouse_fwkey_press_status
+	call mouse_check_key_connect_gnd
+	branch mouse_check_fwkey_gpio_end	
+
+mouse_3io6key_fw_check:
+	fetch 1,mem_fw_button_gpio
+	call mouse_gpio_config_output_low
+	fetcht 1,mem_fw_button_gpio
+	call mouse_3io6key_check
+	store 1,mem_mouse_fwkey_press_status
+	fetcht 1,mem_fw_button_gpio
+	branch device_gpio_config_input_pu
+
+mouse_check_customerkey_gpio:
+	jam 0,mem_customer_key
+	fetch 1,mem_customer_key_gpio
+	rtneq GPIO_DISABLE
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_KEYBOARD
+	bbit1 MOUSE_ENABLE_CUSTOMER_KEY_CONNECT_VIN,mouse_customer_key_connect_vin
+mouse_customer_key_connect_gnd:
+	jam MOUSE_CUSTOMER_KEY,mem_mouse_key_temp
+	fetcht 1,mem_customer_key_gpio
+	fetch 1,mem_mouse_customerkey_press_status
+	call mouse_check_key_connect_gnd
+	store 1,mem_mouse_customerkey_press_status
+mouse_check_customerkey_state:
+	copy rega,pdata
+	bbit1 MOUSE_CUSTOMER_KEY,mouse_customerkey_press
+	call mouse_customerkey_release
+mouse_check_customerkey_gpio_exit:
+	fetch 1,mem_customer_data_trigger
+	store 1,mem_customer_data_trigger_last
+	rtn
+
+mouse_customer_key_connect_vin:
+	jam MOUSE_CUSTOMER_KEY,mem_mouse_key_temp
+	fetch 1,mem_mouse_customerkey_press_status
+	copy pdata,regc
+	fetch 1,mem_customer_key_gpio
+	call mouse_gpio_config_output_low
+	fetcht 1,mem_customer_key_gpio
+	call mouse_3io6key_check
+	store 1,mem_mouse_customerkey_press_status
+	call mouse_check_customerkey_state
+	fetcht 1,mem_customer_key_gpio
+	branch device_gpio_config_input_pu
+
+mouse_customerkey_press:
+	jam 1,mem_customer_data_trigger
+	call mouse_customer_key_need_send
+	branch mouse_check_customerkey_gpio_exit
+
+mouse_customerkey_release:
+	jam 0,mem_customer_data_trigger
+	fetch 1,mem_customer_data_trigger_last
+	rtn blank
+mouse_customer_key_need_send:	
+	jam 1,mem_customer_key
+	rtn	
+
+/*******************************matrix key end***************************/
+
+//mouse_check_matrix_button_connect_gnd:	
+//	call gpio_get_bit
+//	fetcht 1,mem_mouse_key_temp
+//	copy temp,queue	
+//	branch  mouse_key_press,true
+mouse_key_release:
+	qset0 rega
+	rtn	
+
+mouse_check_key_connect_gnd:	
+	lshift pdata,pdata
+	copy pdata,regb
+	call gpio_get_bit
+	setflag true,0,regb
+mouse_check_key_connect_gnd_next:
+	and regb,0x07,pdata
+	fetcht 1,mem_mouse_key_temp
+	copy temp,queue
+	beq 0x07,mouse_key_press		//  about 17~22ms three times
+	beq 0x00,mouse_key_release
+	rtn
+
+mouse_key_press:
+	qset1 rega
+	rtn
+
+mouse_3io6key_check:
+	bpatch patch11_1,mem_patch11
+	copy regc,pdata
+	store 1,mem_mouse_key_status
+	lshift pdata,pdata
+	copy pdata,regb
+	copy temp,regc
+mouse_3io6key_check_next:
+	call device_gpio_config_input_pd
+	copy regc,temp
+	call gpio_get_bit
+	nsetflag true,0,regb
+	call mouse_check_press
+	branch mouse_check_key_connect_gnd_next
+
+mouse_check_press:
+	fetcht 1,mem_mouse_key_status
+	and_into 0x01,temp
+	and regb,0x01,pdata
+	isub temp,null
+	nbranch mouse_current_mult_update,zero
+	rtn
+	
+	
+//input:pdata gpio number
+mouse_gpio_config_output_high:
+	arg gpcfg_output_high,temp
+	branch gpio_config_function_int
+
+//input:pdata gpio number
+mouse_gpio_config_output_low:
+	arg gpcfg_output_low,temp
+	branch gpio_config_function_int	
+
+//input:pdata gpio number
+mouse_gpio_config_pu_check:
+	store 1,mem_device_temp_gpio
+	call mouse_gpio_config_output_high
+	fetcht 1,mem_device_temp_gpio
+	branch device_gpio_config_input_pu
+	
+//input:pdata gpio number
+mouse_gpio_config_pd_check:
+	store 1,mem_device_temp_gpio
+	call mouse_gpio_config_output_low
+	fetcht 1,mem_device_temp_gpio
+	branch device_gpio_config_input_pd	
+
+/*************************key***************************************/
+
+/**********************sensor******************************/	
+mouse_init_sunt:
+	bpatch patch11_2,mem_patch11
+	call mouse_sensor_spi_init
+	rtn wake
+mouse_init_sensor_wakeup:	
+	call mouse_sensor_poweron
+mouse_init_sensor:
+	bpatch patch11_3,mem_patch11
+	call mouse_read_sensor_id
+	beq P32XX_ID1,mouse_init_p32xx_id2_judge
+	beq P3065_ID1,mouse_init_p3065
+	beq PKA8G2_ID1,mouse_ka8g2_id2_judge
+	call mouse_twspi_reset
+	nop 6900
+	branch mouse_init_sensor
+mouse_twspi_reset:
+	fetcht 1,mem_mouse_sensor_sclk_gpio
+	call twspi_reset
+	branch mouse_spid_init_pin
+
+mouse_read_sensor_id:
+	setarg PAN_REG_PID_H
+	call twspi_read
+	store 1,mem_sensor_id2
+	setarg PAN_REG_PID_L
+	call twspi_read
+	store 1,mem_sensor_id1
+	rtn
+
+mouse_init_p32xx_id2_judge:
+	fetch 1,mem_sensor_id2
+	beq P_MX8650,mouse_mx8650_init_param
+	beq P8009_ID2,mouse_8009_init_param
+	beq P3205_TJ3T_ID2,mouse_S210X_3205_3t_judge
+	beq P3204_TJ3L_ID2,mouse_3204_3l_init_param
+	beq P3212_ID2,mouse_3212_init_param
+	beq PKA8_ID2,mouse_ka8_init_param_check
+	beq P6520A_ID2,mouse_p6520_init_param
+	branch mouse_init_sensor
+
+mouse_S210X_3205_3t_judge:
+	setarg 0x49		// id3
+	call twspi_read
+	beq 0xa1,mouse_S201X_init_param
+	branch mouse_3205_3t_init_param
+
+mouse_S201X_init_param:
+	jam S201X,mem_config_sensor_type
+	rtn
+	
+mouse_mx8650_init_param:
+	jam MX8650,mem_config_sensor_type
+	call mouse_sensor_reset
+	call delay_10ms
+	arg mem_sensor_8650_init,regc
+	branch mouse_sensor_poweron_end
+
+mouse_8009_init_param:
+	setarg 0x16
+	call twspi_read
+	sub pdata,0xbd,null 
+	nbranch mouse_init_sunt,zero
+	setarg 0x19
+	call twspi_read
+	sub pdata,0x55,null 
+	nbranch mouse_init_sunt,zero
+	setarg 0x1b
+	call twspi_read
+	sub pdata,0x1d,null 
+	nbranch mouse_init_sunt,zero
+	jam P8009,mem_config_sensor_type
+	arg mem_sensor_8009_init,regc
+	branch mouse_sensor_wr_seq
+
+mouse_3205_3t_init_param:
+	jam P3205,mem_config_sensor_type
+	arg mem_sensor_3205_init,regc
+	call mouse_sensor_wr_seq
+	arg mem_sensor_32xx_init,regc
+	call mouse_sensor_wr_seq
+	setarg 0x0943
+	call twspi_write
+	arg mem_sensor_32xx_init_1,regc
+	branch mouse_sensor_wr_seq	
+
+mouse_3204_3l_init_param:
+	jam P3204,mem_config_sensor_type
+	arg mem_sensor_3204_init,regc
+	call mouse_sensor_wr_seq
+	arg mem_sensor_32xx_init,regc
+	call mouse_sensor_wr_seq
+	arg mem_sensor_32xx_init_1,regc
+	branch mouse_sensor_wr_seq	
+
+mouse_3212_init_param:
+	jam P3212,mem_config_sensor_type
+	arg mem_sensor_3212_init,regc
+mouse_sensor_wr_seq:
+	ifetch 2,regc
+	arg 0xffff,temp
+	isub temp,null
+	rtn zero
+	call twspi_write
+	increase 2,regc
+	branch mouse_sensor_wr_seq
+
+mouse_ka8_init_param_check:	
+	call mouse_sensor_disable_wp
+	setarg 0x9a5b
+	call twspi_write
+	setarg 0x0d
+	call twspi_read
+	sub pdata,0x12,null
+	branch mouse_ka8ul_init_param,zero
+	sub pdata,0x0a,null
+	nbranch mouse_ka8hd_sensor_judge,zero
+	setarg 0x0e
+	call twspi_read
+	sub pdata,0xe5,null
+	nbranch mouse_init_sensor,zero
+	setarg 0x10
+	call twspi_read
+	sub pdata,0xa5,null
+	branch mouse_ka8ul_init_param,zero
+	call mouse_enable_ka8_sensor_wp
+mouse_ka8_init_param:
+	jam KA8,mem_config_sensor_type	
+	rtn
+mouse_ka8ul_init_param:
+	jam KA8_UL,mem_config_sensor_type	
+	arg mem_sensor_ka8ul_init,regc
+	branch mouse_sensor_wr_seq
+mouse_ka8hd_sensor_judge:
+	sub pdata,0x10,null
+	nbranch mouse_init_sensor,zero
+	setarg 0x0e
+	call twspi_read
+	sub pdata,0xc5,null
+	nbranch mouse_init_sensor,zero
+	setarg 0x10
+	call twspi_read
+	sub pdata,0x38,null
+	nbranch mouse_init_sensor,zero
+mouse_ka8hd_init_param:
+	call mouse_enable_ka8_sensor_wp
+	jam KA8_HD,mem_config_sensor_type
+	rtn
+mouse_enable_ka8_sensor_wp:
+	setarg 0x005b
+	call twspi_write
+	branch mouse_sensor_enable_wp
+	
+mouse_p6520_init_param:
+	jam P6520,mem_config_sensor_type
+	arg mem_sensor_p6520_init,regc
+	branch mouse_sensor_wr_seq
+	
+mouse_init_p3065:
+	call mouse_sensor_poweron
+	fetch 1,mem_sensor_id2
+	beq P3065_XY_ID2,mouse_p3065xy_init_param
+	beq P3065_ID2,mouse_p3065_init_param
+	branch mouse_init_sensor
+	
+mouse_p3065_init_param:	
+	jam P3065,mem_config_sensor_type
+	rtn
+
+mouse_p3065xy_init_param:
+	jam P3065_XY,mem_config_sensor_type
+	rtn
+	
+mouse_ka8g2_id2_judge:
+	call mouse_sensor_poweron
+	fetch 1,mem_sensor_id2
+	beq KA5857_ID2,mouse_ka5857_init_param
+	beq PKA8G2_ID2,mouse_ka8g2_init_param
+	branch mouse_init_p32xx_id2_judge
+mouse_ka8g2_init_param:
+	jam KA8G2,mem_config_sensor_type
+	arg mem_sensor_ka8g2_init,regc
+	branch mouse_sensor_wr_seq
+
+mouse_ka5857_init_param:
+	jam KA5857,mem_config_sensor_type
+	arg mem_sensor_ka5857_init,regc
+	branch mouse_sensor_poweron_end
+
+mouse_sensor_reset:	
+	arg 0x8006,temp
+	fetch 1,mem_config_sensor_type
+	bne KA8G2,mouse_sensor_reset_end
+	arg 0x9706,temp
+mouse_sensor_reset_end:
+	copy temp,pdata
+	call twspi_write
+	nop 12000
+	rtn
+
+mouse_sensor_poweron_init:
+	arg mem_sensor_poweron_init,regc
+	fetch 1,mem_config_sensor_type
+	rtnne KA8G2
+	arg mem_sensor_ka8g2_poweron_init,regc
+	rtn
+	
+mouse_sensor_poweron:
+	bpatch patch11_4,mem_patch11
+	call mouse_sensor_spi_init
+	call mouse_sensor_reset
+	call mouse_sensor_poweron_init
+mouse_sensor_poweron_end:
+	call mouse_sensor_wr_seq
+	branch mouse_setting_sensor_type
+
+mouse_sensor_powerdown:
+	bpatch patch11_5,mem_patch11
+	call mouse_init_sunt
+	call mouse_sensor_spi_init
+	arg 0x0806,temp
+	fetch 1,mem_config_sensor_type
+	bne KA8G2,mouse_sensor_powerdown_end
+	arg 0x1f06,temp
+mouse_sensor_powerdown_end:
+	copy temp,pdata
+	branch twspi_write
+/*********sensor init*************/	
+
+
+
+/*********sensor motion*************/
+mouse_check_sensor_data:
+	fetch 1,mem_spi_write_flash_sm
+	rtnne FLASH_SM_NO_BUYS
+	fetch 1,mem_config_sensor_type
+	beq P3205,mouse_p32xx_sensor_motion
+	beq P3065,mouse_p32xx_sensor_motion
+	beq KA8,mouse_p32xx_sensor_motion
+	beq P3204,mouse_p32xx_sensor_motion
+	beq P3212,mouse_p3212_sensor_motion
+	beq P3065_xy,mouse_p32xx_sensor_motion
+	beq P8009,mouse_p8009_sensor_motion	
+	beq KA8G2,mouse_pka8g2_sensor_motion
+	beq KA5857,mouse_pka8g2_sensor_motion
+	branch mouse_p32xx_sensor_motion
+
+
+mouse_p32xx_sensor_motion:
+	call mouse_clear_sensor_data
+	disable user
+	fetch 1,mem_sensor_motion_gpio
+	beq GPIO_DISABLE,mouse_p32xx_sensor_motion_2
+	fetcht 1,mem_sensor_motion_gpio
+	call gpio_get_bit
+	nrtn true
+mouse_p32xx_sensor_motion_2:
+	setarg PAN_REG_PID_L
+	call twspi_read
+	bne P32XX_ID1,mouse_p3065_judge   
+mouse_p32xx_sensor_motion_1:
+	setarg PAN_REG_MOTION_STAUS
+	call twspi_read
+	rtnbit0 7
+	call mouse_read_sensor_common
+	fetch 1,mem_mouse_x
+	call mouse_data_extsign
+	store 2,mem_mouse_x
+	fetch 1,mem_mouse_y
+	call mouse_data_extsign
+	store 2,mem_mouse_y
+	fetch 1,mem_config_sensor_angle
+	beq MOUSE_6CLK_ANGLE,mouse_motion32xx_6clk_direction_selection
+	beq MOUSE_9CLK_ANGLE,mouse_motion32xx_9clk_direction_selection
+	beq MOUSE_12CLK_ANGLE,mouse_motion32xx_12clk_direction_selection
+	beq MOUSE_3CLK_ANGLE,mouse_motion32xx_3clk_direction_selection
+	rtn
+
+mouse_p3065_judge:
+	beq P3065_ID1,mouse_p32xx_sensor_motion_1
+	branch mouse_twspi_reset
+	
+mouse_motion32xx_6clk_direction_selection:
+	call mouse_motion_6clk_direction_dispose
+	branch mouse_sensor_sdio_low
+mouse_motion32xx_9clk_direction_selection:
+	call mouse_motion_9clk_direction_dispose
+	branch mouse_sensor_sdio_low
+mouse_motion32xx_12clk_direction_selection:
+	call mouse_motion_12clk_direction_dispose
+	branch mouse_sensor_sdio_low
+mouse_motion32xx_3clk_direction_selection:
+	call mouse_motion_3clk_direction_dispose
+	branch mouse_sensor_sdio_low
+
+
+	
+mouse_p3212_sensor_motion:
+	call mouse_clear_sensor_data
+	fetch 1,mem_sensor_motion_gpio
+	beq GPIO_DISABLE,mouse_p3212_sensor_motion_1
+	fetcht 1,mem_sensor_motion_gpio
+	call gpio_get_bit
+	nrtn true
+mouse_p3212_sensor_motion_1:	
+	setarg PAN_REG_PID_L
+	call twspi_read
+	bne P32XX_ID1,mouse_twspi_reset
+mouse_p3212_sensor_motion_2:
+	setarg PAN_REG_MOTION_STAUS
+	call twspi_read
+	rtnbit0 7
+	call mouse_read_sensor_common
+	call mouse_read_3212sensor_xy_high
+	store 1,mem_mouse_xy_h
+	rshift4 pdata,pdata
+	call mouse_data_extsign_bit3
+	store 1,mem_mouse_x+1
+	fetch 1,mem_mouse_xy_h
+	and pdata,0x0f,pdata
+	call mouse_data_extsign_bit3
+	store 1,mem_mouse_y+1
+	fetch 1,mem_config_sensor_angle
+	beq MOUSE_6CLK_ANGLE,mouse_motion_6clk_direction_dispose
+	beq MOUSE_9CLK_ANGLE,mouse_motion_9clk_direction_dispose
+	beq MOUSE_12CLK_ANGLE,mouse_motion_12clk_direction_dispose
+	beq MOUSE_3CLK_ANGLE,mouse_motion_3clk_direction_dispose
+	rtn
+
+mouse_read_3212sensor_xy_high:
+	setarg 0x12
+	branch twspi_read
+
+mouse_pka8g2_sensor_motion:
+	call mouse_clear_sensor_data
+	fetch 1,mem_sensor_motion_gpio
+	beq GPIO_DISABLE,mouse_pka8g2_sensor_motion_1
+	fetcht 1,mem_sensor_motion_gpio
+	call gpio_get_bit
+	nrtn true
+mouse_pka8g2_sensor_motion_1:
+	setarg PAN_REG_PID_L
+	call twspi_read
+	bne PKA8G2_ID1,mouse_twspi_reset
+	branch mouse_p3212_sensor_motion_2
+
+
+mouse_p8009_sensor_motion:
+	call mouse_clear_sensor_data
+	disable user
+	setarg PAN_REG_MOTION_STAUS
+	call twspi_read
+	rtnbit0 7
+	setarg PAN_REG_OPRATION_STATE
+	call twspi_read
+	branch mouse_p32xx_sensor_motion_1+3,blank
+	setarg 0
+	store 6,mem_mouse_x
+	rtn
+
+mouse_motion_6clk_direction_dispose:
+	fetch 2,mem_mouse_x
+	sub pdata,0,pdata
+	store 2,mem_mouse_x
+	branch enable_user
+mouse_motion_12clk_direction_dispose:
+	fetch 2,mem_mouse_y
+	sub pdata,0,pdata
+	store 2,mem_mouse_y
+	branch enable_user
+mouse_motion_9clk_direction_dispose:
+	fetch 2,mem_mouse_y
+	sub pdata,0,pdata
+	store 2,mem_mouse_y
+	fetch 2,mem_mouse_x
+	sub pdata,0,pdata
+	store 2,mem_mouse_x
+	call mouse_sensor_data_swap_places
+	branch enable_user
+mouse_motion_3clk_direction_dispose:
+	call mouse_sensor_data_swap_places
+	branch enable_user
+
+mouse_sensor_data_swap_places:
+	fetch 2, mem_mouse_y
+	fetcht 2,mem_mouse_x
+	store 2,mem_mouse_x
+	storet 2,mem_mouse_y
+	rtn
+
+	
+mouse_clear_sensor_data:
+	fetch 1,mem_mouse_move_flag
+	call mouse_read_sensor_common,blank
+	jam 1,mem_mouse_move_flag
+	rtn
+
+mouse_clear_sensor_data_by_reset:
+	jam 1,mem_mouse_clear_sensor_data_flag
+	call le_set_config_more_data
+mouse_init_sensor_reset:
+	branch mouse_init_sunt
+
+mouse_data_xy_release:
+	fetch 1,mem_sensor_motion_gpio
+	rtnne GPIO_DISABLE
+	fetch 1,mem_mouse_long_mult_flag
+	rtn blank
+	increase -1,pdata
+	store 1,mem_mouse_long_mult_flag
+	setarg 0
+	store 4,mem_mouse_x
+	branch mouse_init_sensor_reset
+
+mouse_data_extsign:
+	rtnbit0 7
+	arg 0xff00,temp
+mouse_data_ior:
+	ior temp,pdata
+	rtn
+
+mouse_data_extsign_bit3:
+	rtnbit0 3
+	arg 0xf0,temp
+	branch mouse_data_ior
+
+mouse_read_sensor_common:
+	arg PAN_REG_DELTA_X,pdata
+	call twspi_read
+	store 2,mem_mouse_x
+	arg PAN_REG_DELTA_Y,pdata
+	call twspi_read
+	branch mouse_data_y_store
+
+	/* sdio high will cost extra 9mA */
+mouse_sensor_sdio_low:
+	fetcht 1,mem_mouse_sensor_sdio_gpio
+	call gpio_get_bit
+	rtn true
+	setarg 0x0a
+	call twspi_read
+	nop 1000
+	branch mouse_sensor_sdio_low
+
+mouse_set_sdio_high:		// make sdio high to make 100uA less
+	setarg 0x8100
+	branch twspi_write
+	
+/****************************sensor*************************/
+
+/*******************mouse fast connect******************/
+mouse_bluetooth_fast_conn_init:
+	jam 0xff,mem_device_fast_conn_flag
+mouse_ble_fast_conn_init:	
+	jam 0x34,mem_xrecord_mode
+	setarg 0x0f0f0f
+	store 3,mem_le_lap
+	store 3,mem_le_lap+3
+	branch mouse_start_reconnect
+
+mouse_buletooth_fast_conn_end:
+	bpatch patch11_6,mem_patch11
+	call hid_device_select_reconn_device
+	call mouse_bluetooth_fast_conn_disable
+	fetch 1,mem_device_flag
+	beq MODE_BT_DEVICE1,mouse_device1_check_auto_discover
+	beq MODE_BT_DEVICE2,mouse_device2_check_auto_discover
+	rtn
+mouse_device1_check_auto_discover:
+	fetch 6,mem_device1_addr
+	branch mouse_device_check_auto_discover
+mouse_device2_check_auto_discover:
+	fetch 6,mem_device2_addr
+mouse_device_check_auto_discover:	
+	fetcht 6,mem_device_compare_addr
+	isub temp,null
+	branch mouse_start_discovery ,zero
+	branch mouse_start_reconnect_device
+
+mouse_bluetooth_fast_conn_disable:
+	jam 0x5a,mem_device_fast_conn_flag
+	rtn	
+/*******************mouse fast connect******************/
+
+mouse_stop_bluetooth_mode:
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BLE_CONNECTED,app_ble_disconnect
+	branch mouse_stop_discovery
+mouse_disconnect:
+	setarg 0
+	store 2,mem_device_no_data_timer
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BLE_CONNECTED,app_ble_disconnect
+	rtn
+	
+mouse_check_125Hz:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_BT_125Hz
+mouse_bluetooth_125Hz:
+	nbranch mouse_bluetooth_125hz_clear,user
+	fetch 1,mem_bluetooth_125hz_cnt
+	increase 1,pdata
+	and_into 0x0f,pdata
+	store 1,mem_bluetooth_125hz_cnt
+	nrtn blank
+mouse_bluetooth_125hz_clear:
+	jam 0,mem_bluetooth_125hz_cnt
+	branch disable_user
+
+mouse_current_mult_update:
+	fetch 1,mem_sensor_motion_gpio
+	rtnne GPIO_DISABLE
+	jam 0,mem_lpm_mult
+	jam 30,mem_mouse_current_mult_timer
+	rtn
+
+
+mouse_priority_bb_event:	
+	bpatch patch11_7,mem_patch11
+	copy regc,pdata
+	beq BT_EVT_LE_CONNECTED,mouse_le_bb_event_connected
+	beq BT_EVT_LE_DISCONNECTED,mouse_le_bb_disconnected
+	beq BT_EVT_BUTTON_LONG_PRESSED,mouse_bb_event_discovery_btn
+	beq BT_EVT_LE_PAIRING_SUCCESS,mouse_le_pairing_success
+	beq BT_EVT_LE_ENC_INFO,mouse_le_enc_info
+	beq BT_EVT_LE_START_ENC,mouse_le_ll_start_encryt
+	beq BT_EVT_LE_PAIRING_COMPLETE,app_ble_store_reconn_info
+	beq BT_EVT_LE_PARSE_CONN_PAPA_UPDATE_RSP,mouse_le_conn_param_update_rsp_recieved
+	beq BT_EVT_24G_PAIRING_COMPLETE,mouse_24g_pairing_complete
+	beq BT_EVT_24G_ATTEMPT_FAIL,mouse_24g_attempt_fail
+	beq BT_EVT_24G_ATTEMPT_SUCCESS,mouse_24g_attempt_success
+	beq BT_EVT_LE_PARSE_CONN_PARAM_ACCEPTED,mouse_le_parse_conn_param_accepted
+	rtn
+
+/***************************le*************************/
+mouse_le_bb_event_connected:
+	call mouse_device_poweron_led_config
+	jam 0,mem_mouse_long_mult_flag
+	call mouse_init_sensor_reset
+	jam 1,mem_device_le_bb_connected_flag
+	call mouse_24g_first_store_reconn_info
+	fetch 1,mem_device_le_reconnect_flag
+	nbranch mouse_le_bb_event_connected_next,blank
+	jam 0x14,mem_device_send_secutiry_request_timer
+mouse_le_bb_event_connected_next:
+	fetch APP_DISC_RSN_SIZE,mem_app_disconn_reason_flag
+	set0 APP_DISC_BY_BUTTON ,pdata
+	store APP_DISC_RSN_SIZE,mem_app_disconn_reason_flag
+	jam 0,mem_device_direct_timer
+	fetch 2,mem_le_battery_level_updata_timer_init
+	store 2,mem_le_battery_level_updata_timer
+	call mouse_no_data_timer_init
+	branch mouse_stop_discovery
+
+mouse_le_bb_disconnected:
+	setarg 0
+	store 2,mem_le_battery_level_updata_timer
+	jam 0,mem_device_le_bb_connected_flag
+	arg LE_INTERVAL_7_5MS,temp
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_BT_125Hz,mouse_le_bb_disconnected_next
+	arg LE_INTERVAL_8_75MS,temp
+mouse_le_bb_disconnected_next:	
+	storet 2,mem_le_interval_min
+	storet 2,mem_le_interval_min+2
+	jam LE_LPM_ENABLE,mem_le_conn_param_reject
+	jam 0,mem_mouse_clear_sensor_data_flag
+	call le_clr_config_more_data
+	branch mouse_bb_disconnected
+
+mouse_le_pairing_success:
+	arg LL_PAIRING_SUCCESS_FLAG,queue
+	branch mouse_le_enable_connect_flag
+
+mouse_le_enc_info:
+mouse_updata_le_param:
+	jam BT_CMD_LE_UPDATE_CONN,mem_fifo_temp
+	branch ui_ipc_send_cmd
+	
+mouse_le_ll_start_encryt:
+	fetch 1,mem_device_le_reconnect_flag
+	beq 1,mouse_le_ll_reconn_start_encryt
+	branch mouse_le_ll_enable_start_enc_flag
+mouse_le_ll_reconn_start_encryt:
+	call mouse_updata_le_param
+	jam 20,mem_le_start_encrypt_timer
+mouse_le_ll_enable_start_enc_flag:
+	arg LL_START_ENC_FLAG,queue
+	branch mouse_le_enable_connect_flag
+
+mouse_le_enable_connect_flag:
+	fetch 1,mem_le_connect_status_flag
+	qset1 pdata
+	store 1,mem_le_connect_status_flag
+	rtn
+
+mouse_le_conn_param_update_rsp_recieved:
+	fetch 2,mem_le_l2cap_signaling_conn_param_update_rsp_result
+	rtneq BLE_SIGNALING_CONNECT_PARAMETER_UPDATE_ACCEPTED
+	fetch 1,mem_le_tsniff
+	rshift2 pdata,pdata
+	sub pdata,LE_INTERVAL_15MS,null
+	rtn positive
+	setarg LE_INTERVAL_11_25MS
+	call mouse_le_interval_store
+	call mouse_updata_le_param
+mouse_le_conn_param_lpm_disable:
+	jam LE_LPM_DISABLE,mem_le_conn_param_reject
+	rtn
+
+mouse_le_bb_event_connect_complete:
+	fetch 1,mem_device_le_reconnect_flag
+	nrtn blank
+	fetch 1,mem_le_att_handle
+	sub pdata,34,pdata
+	nrtn zero
+	jam 0,mem_le_start_encrypt_timer
+mouse_le_write_enable:	
+	arg WRITE_REQ_ENABLE_FLAG,queue
+	branch mouse_le_enable_connect_flag
+
+mouse_le_parse_conn_param_accepted:
+	fetch 1,mem_le_new_conninterval
+	sub pdata,LE_INTERVAL_15MS,null
+	nbranch mouse_le_conn_param_lpm_disable,positive
+	call mouse_le_interval_store
+	fetch 1,mem_le_new_connslavelatency
+	branch mouse_le_lpm_mult_reinit,blank
+	fetcht 1,mem_lpm_mult_init
+	isub temp,null
+	branch mouse_le_lpm_mult_reinit,positive
+	fetch 1,mem_le_new_connslavelatency
+	store 1,mem_lpm_mult
+	branch mouse_le_conn_param_lpm_enable
+mouse_le_lpm_mult_reinit:
+	fetch 1,mem_lpm_mult_init
+	store 1,mem_lpm_mult
+mouse_le_conn_param_lpm_enable:
+	jam LE_LPM_ENABLE,mem_le_conn_param_reject
+	rtn
+	
+/*
+mouse_le_disable_connect_flag:
+	fetch 1,mem_le_connect_status_flag
+	qset0 pdata
+	store 1,mem_le_connect_status_flag
+	rtn
+	
+mouse_le_clean_connect_flag:
+	jam 0,mem_le_connect_status_flag
+	rtn
+*/
+
+
+/*
+mouse_le_reconn_write_enable_timer_reinit:
+	fetch 1,mem_device_le_reconnect_flag
+	rtn blank
+	fetch 1,mem_le_connect_status_flag
+	and pdata,0x03,pdata
+	rtneq 0x03
+	jam 2,mem_le_start_encrypt_timer
+	rtn
+*/
+mouse_le:
+	bpatch patch12_0,mem_patch12
+	call le_fifo_check_nearly_full
+	nrtn blank
+	fetch 1,mem_device_fast_conn_flag
+	beq 0xff,mouse_le_next
+	fetch 1,mem_le_connect_status_flag
+	and pdata,0x03,pdata
+	rtnne 0x03
+mouse_le_next:	
+	fetch 1,mem_mouse_clear_sensor_data_flag
+	call mouse_clear_sensor_data_by_reset,blank
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_24G_PAIRING_FLAG,hid_device_le_send_empty_packet
+	bbit1 MOUSE_SELECT_DEVICE_FLAG,hid_device_le_send_empty_packet
+	bbit1 MOUSE_BT_DISCOVERY_BUTTON_DOWN_FLAG,hid_device_le_send_empty_packet
+	bbit1 MOUSE_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG,hid_device_le_send_empty_packet
+mouse_le_package:
+	call mouse_motion
+	call mouse_check_125Hz
+	nrtn user
+	call mouse_current_mult_update
+	call mouse_data_xy_release
+	call mouse_wheel_trigger
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_KEYBOARD,hid_device_le_send_mouse_data
+	branch hid_device_send_package_data_check
+
+mouse_fill_battery_level_le:
+	arg 1,rega
+	fetcht 2,mem_le_battery_level_handle
+	call le_att_malloc_tx_notify
+	fetch 1,mem_le_battery_level_percentage
+	branch   istore_1_contw_rtn
+
+
+mouse_check_51cmd_adv:
+	jam 0,mem_device_le_reconnect_flag
+	fetch 3,mem_le_adv_ind
+	store 3,mem_le_adv_data+4
+	call mouse_le_check_adv_flag
+	setarg ADV_FLAG_BREDR_NOT_SUPPORTED |ADV_FLAG_LIMITED_DISCOVERABLE
+	istore 1,contr
+	arg mem_le_adv_swift_pair,contr
+	call mouse_le_adv_data_update
+	branch check_51cmd_adv
+
+mouse_le_check_adv_flag:
+	arg mem_le_adv_data,rega
+mouse_le_check_adv_flag_loop:
+	ifetch 1,rega	//length
+	rtn blank
+	iadd contr,rega
+	ifetch 1,contr	//type
+	rtneq 0x01
+	branch mouse_le_check_adv_flag_loop
+	
+mouse_le_adv_data_update:
+	arg mem_le_adv_data+11,contw
+	arg 19,loopcnt
+	call memcpy
+	branch le_modified_name_adv
+	
+/***************************le*************************/
+mouse_le_parse_att:
+	bpatch patch12_1,mem_patch12
+	copy rega,contr
+	ifetch 3,contr
+	store 3,mem_le_att_opcode
+	beq ATTOP_READ_REQUEST,mouse_le_parse_att_read_request
+	beq ATTOP_WRITE_REQUEST,mouse_le_parse_att_write_request	
+	branch le_parse_att2	
+
+mouse_le_parse_att_read_request:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_LE_BATTERY_SERVICE_CANCEL,le_parse_att_read_request
+	call le_check_encrypt_state
+	fetcht 2,mem_le_att_handle
+	fetch 1,mem_le_configuration
+	bbit1 BIT_BLE_READ_AUTH,mouse_le_send_att_read_response_check_auth
+//input:temp is handle
+mouse_le_send_att_read_response:
+	fetch 2,mem_le_att_handle
+	beq 0x30,le_send_att_error_response_notfound
+	fetcht 2,mem_le_att_handle
+	branch le_send_att_read_response
+
+mouse_le_send_att_read_response_check_auth:
+	fetch 2,mem_le_pairing_handle
+	isub temp,null
+	nbranch mouse_le_send_att_read_response,zero
+	nbranch mouse_le_send_att_read_response,user
+	branch le_send_att_read_response_error_insufficient_auth
+
+mouse_le_parse_att_write_request:		// mac os 10.9.5 reconnect can't move
+	copy contr,rega
+	fetch 2,mem_le_l2cap_size
+	add pdata,-3,regb
+	call le_writeatt_cb
+	branch hid_device_le_parse_att_write_request
+
+mouse_bb_disconnected:
+	bpatch patch12_2,mem_patch12
+	call mouse_bb_discon_clear_stack
+	fetch APP_DISC_RSN_SIZE,mem_app_disconn_reason
+	bbit1 APP_DISC_BLE,mouse4_0_event_bb_disconn
+	bbit1 APP_DISC_BY_BUTTON,app_disconn_reason_clear
+	branch mouse_start_discovery
+	
+mouse_bb_discon_clear_stack:
+	setarg 0
+	store 8,mem_wheel_tb_old_pinlevel
+	istore 2,contw             //clean wheel statue
+	jam 0,mem_mouse_move_flag
+	jam 0,mem_ltk_exists
+	rtn
+
+mouse4_0_event_bb_disconn:
+	jam 0,mem_le_connect_status_flag
+	fetch APP_DISC_RSN_SIZE,mem_app_disconn_reason
+	bbit1 APP_DISC_BY_BUTTON,app_disconn_reason_clear
+	branch mouse_app_enter_hibernate
+
+
+/********************mouse 100ms timer*****************/
+mouse_bb_event_timer:
+	bpatch patch12_3,mem_patch12
+	//adc
+	call mouse_low_voltage_led_timer
+	call mouse_adc_read
+	//led
+	call mouse_logo_led_on_timer
+	call mouse_led_multi_timer
+	call mouse_dpi_led_blink_delay_timer
+	//key
+	call mouse_dpi_key_check_long_press
+	call mouse_bt_discovery_check
+	call mouse_commbination_key_process
+	call mouse_commbination_dpi_check_timer
+	call mouse_commbination_key_select_device_timer
+
+	call mouse_current_mult_update_timer
+	call mouse_wheel_trigger_timer
+	call mouse_store_information_delay_timer
+	call mouse_check_no_data_timeout_timer
+	
+	//24g
+	call mouse_24g_long_sleep_param_update_timer
+mouse_bb_event_timer_next:
+	call g24_pair_timeout_timer
+	call g24_reconn_timeout_timer
+
+	//ble
+	call mouse_check_discovery_timeout_timer
+	call mouse_check_direct_timeout_timer
+	call mouse_le_enable_att_list_timer
+	call mouse_le_battery_updata_timer
+	branch mouse_le_send_smp_security_request_timer	
+
+/***********************************100MS TIMER******************************************/
+
+mouse_bt_discovery_check:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_PB_BUTTON_LONG_PRESS_DISCONVERY
+mouse_bt_discovery_by_pb_button:
+	fetch 1,mem_select_device_button_statue
+	rtnne PB_BUTTON_STATE_DOWN
+	arg mem_bt_discovery_count,regc
+	arg mouse_long_button_bt_discovery,regb
+	branch timer_single_step
+		
+mouse_long_button_bt_discovery:
+	fetch 1,mem_device_flag
+	rtneq MODE_24G_DEVICE
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit1 MOUSE_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG
+	arg MOUSE_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG,queue
+	call mouse_enable_function_flag
+	call app_evt_button_long_pressed
+	branch mouse_bb_event_discovery_btn
+
+mouse_commbination_dpi_check_timer:
+	fetch 1,mem_mouse_commbination_key_dpi
+	rtneq GPIO_DISABLE
+	fetch 1,mem_mouse_pair_flag
+	rtn blank
+	call mouse_check_key_gpio
+	and rega,0x07,pdata
+	fetcht 1,mem_mouse_commbination_key_dpi
+	isub temp,null
+	branch mouse_commbination_dpi_check,zero
+	fetch 1,mem_mouse_commbination_dpi_timer
+mouse_commbination_key_count_init:
+	store 1,mem_mouse_commbination_key_count
+	rtn
+	
+mouse_commbination_dpi_check:	
+	arg mem_mouse_commbination_key_count,regc
+	arg mouse_dpi_process_skip_ghost,regb
+	branch timer_single_step
+
+
+mouse_retransmit_commbination_key_check:
+	fetch 1,mem_24g_shutdown_flag
+	rtn blank
+mouse_commbination_key_select_device_timer:
+	fetch 1,mem_mouse_commbination_key_select_device
+	rtneq GPIO_DISABLE
+	call mouse_check_key_gpio
+	and rega,0x07,pdata
+	fetcht 1,mem_mouse_commbination_key_select_device
+	isub temp,null
+	branch mouse_check_mouse_key_select_device_set,zero
+	fetch 1,mem_mouse_commbination_select_device_timer
+	branch mouse_commbination_key_count_init
+	
+mouse_check_mouse_key_select_device_set:
+	arg mem_mouse_commbination_key_count,regc
+	arg mouse_ready_reconnection_by_button,regb
+	branch timer_single_step
+		
+mouse_commbination_key_process:
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,mouse_24g_commbination_key_process
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_COMMBINATION_KEY_BY_BT_DISCOVERY
+	fetcht 1,mem_mouse_commbination_key_bt
+	branch mouse_commbination_key_start
+
+mouse_24g_commbination_key_process:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_COMMBINATION_KEY_BY_24G_PAIRING
+	fetcht 1,mem_mouse_commbination_key_24g
+mouse_commbination_key_start:
+	storet 1,mem_mouse_commbination_key
+	call mouse_check_key_gpio
+	and rega,0x07,pdata
+	fetcht 1,mem_mouse_commbination_key
+	isub temp,null
+	branch mouse_commbination_key_down,zero
+mouse_commbination_key_up:
+	fetch 1,mem_ui_button_timeout
+	store 1,mem_combination_ui_button_count	//combination key timer init 
+	fetch 1,mem_commbination_key_statue
+	rtneq COMMBINATION_KEY_STATE_UP
+	jam COMMBINATION_KEY_STATE_UP,mem_commbination_key_statue	
+	rtn
+		
+mouse_commbination_key_down:
+	call mouse_combination_ui_timer
+	fetch 1,mem_commbination_key_statue
+	rtneq COMMBINATION_KEY_STATE_DOWN
+	jam COMMBINATION_KEY_STATE_DOWN,mem_commbination_key_statue
+	rtn
+
+mouse_combination_ui_timer:
+	arg mouse_24g_start_pair_mode,regb
+	arg mem_combination_ui_button_count,regc
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,timer_single_step
+	arg mouse_long_button_bt_discovery,regb
+	call timer_single_step
+	fetch 1,mem_combination_ui_button_count
+	beq 1,mouse_bt_discovery_button_down_enable	// ble release key press
+	rtn
+
+mouse_check_discovery_timeout_timer:	
+	arg mem_device_discovery_timer,regc
+	arg mouse_check_discovery_timeout,regb
+	branch timer_single_step_2B
+
+mouse_check_discovery_timeout:
+	call mouse_stop_discovery
+	branch mouse_app_enter_hibernate
+
+mouse_check_direct_timeout_timer:	
+	arg mem_device_direct_timer,regc
+	arg mouse_check_direct_timeout,regb
+	call timer_single_step
+	fetch 1,mem_device_direct_timer
+	beq 1,app_ble_stop_direct_adv
+	rtn
+
+mouse_check_direct_timeout:
+	fetch 1,mem_device_fast_conn_flag
+	beq 0xff,mouse_buletooth_fast_conn_end
+	fetch 1,mem_reconn_times
+	nbranch mouse_polling_device,blank
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_BT_RECONNECT_TIMEOUT_ENTER_DISCOVERY,mouse_start_discovery
+	bbit1 MOUSE_ENABLE_24G_FIRST_AUTO_PAIRING,mouse_24g_first_bb_event_reconn_timeout
+	branch mouse_app_enter_hibernate
+	
+mouse_le_enable_att_list_timer:
+	arg mem_le_start_encrypt_timer,regc
+	arg mouse_le_write_enable,regb
+	branch timer_single_step
+
+mouse_le_send_smp_security_request_timer:
+	fetch 1,mem_device_le_bb_connected_flag
+	rtn blank
+	arg mem_device_send_secutiry_request_timer,regc
+	arg mouse_le_pairing_sm_start_check,regb
+	branch timer_single_step
+mouse_le_pairing_sm_start_check:
+	fetch 1,mem_device_le_reconnect_flag
+	nrtn blank
+	fetch 1,mem_le_pairing_state
+	rtnne FLAG_LE_PAIRING_NULL
+	branch le_pairing_sm_start
+
+mouse_le_battery_updata_timer:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit1 MOUSE_ENABLE_LE_BATTERY_SERVICE_CANCEL
+	arg mem_le_battery_level_updata_timer,regc
+	arg mouse_le_battery_level_updata,regb
+	branch timer_single_step
+
+mouse_le_battery_level_updata:
+	fetch 2,mem_le_battery_level_updata_timer_init
+	store 2,mem_le_battery_level_updata_timer
+	branch mouse_fill_battery_level_le
+	
+mouse_le_enable_att_list:	
+	fetch 1,mem_le_connect_status_flag
+	rtnbit1 LL_PAIRING_SUCCESS_FLAG
+	call mouse_updata_le_param
+	arg WRITE_REQ_ENABLE_FLAG,queue
+	branch mouse_le_enable_connect_flag
+
+mouse_current_mult_update_timer:
+	arg mem_mouse_current_mult_timer,regc
+	arg mouse_current_mult_reinit,regb
+	branch timer_single_step
+mouse_current_mult_reinit:
+	fetch 1,mem_lpm_mult_init
+	store 1,mem_lpm_mult
+mouse_long_mult_init:
+	fetch 1,mem_mouse_long_mult_count
+	store 1,mem_mouse_long_mult_flag
+	rtn
+
+mouse_check_no_data_timeout_timer:	
+	arg mem_device_no_data_timer,regc
+	arg mouse_check_no_data_timeout,regb
+	branch timer_single_step_2B
+
+mouse_check_no_data_timeout:
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,mouse_24g_hibernate_set
+	branch mouse_disconnect
+	
+mouse_no_data_timer_init:
+	fetch 2,mem_device_no_data_timeout
+	store 2,mem_device_no_data_timer
+	rtn
+
+mouse_store_information_delay_timer:
+	arg mem_store_information_delay_timer,regc
+	arg mouse_store_device_info_check,regb
+	branch timer_single_step
+
+mouse_store_device_info_check:
+	call mouse_store_device_info
+	fetch 1,mem_device_need_soft_reset
+	nbranch mouse_soft_reset,blank
+	rtn
+
+/***********************************100MS TIMER END******************************************/
+
+mouse_bb_event_discovery_btn:
+	isolate1 mark_24g,mark
+	call mouse_24g_stop,true
+	call mouse_disconnect
+	jam 0,mem_le_connect_status_flag
+	branch mouse_start_discovery
+	
+mouse_start_discovery:
+	bpatch patch12_4,mem_patch12
+	call mouse_device_discovery_led_config
+	fetch 2,mem_ui_state_map
+	isolate1 UI_STATE_BLE_ADV,pdata
+	call mouse_stop_le_adv,true		//reconnect adv
+	call mouse_bluetooth_fast_conn_disable
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BLE_ADV,mouse_start_discovery_norandom
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_BLE_RANDOM_ADDRE,mouse_start_discovery_norandom
+	fetcht 1,mem_random_addr_increase_count
+	increase 1,temp
+	storet 1,mem_random_addr_increase_count
+	storet 1,mem_le_lap+2
+	random pdata					//random ble addr
+	store 2,mem_le_lap
+mouse_start_discovery_norandom:
+	fetch 3,mem_device_le_lap_temp
+	store 3,mem_le_lap+3
+	call app_lpm_mult_disable
+	fetch 2,mem_device_discovery_timeout
+	store 2,mem_device_discovery_timer
+	setarg 0
+	store 2,mem_device_no_data_timer
+	store 2,mem_le_battery_level_updata_timer
+	store 1,mem_device_direct_timer
+	store 1,mem_mouse_clear_sensor_data_flag
+	arg MOUSE_STORE_EEPROM_FLAG,queue
+	call mouse_enable_function_flag
+	call mouse_bt_discovery_button_down_disable
+	branch mouse_check_51cmd_adv
+
+mouse_stop_discovery:
+	bpatch patch12_5,mem_patch12
+	arg MOUSE_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG,queue
+	call mouse_disable_function_flag
+mouse_stop_le_adv:
+	setarg 0
+	store 1,mem_device_direct_timer
+	store 2,mem_device_discovery_timer
+	branch check_51cmd_stop_adv
+
+mouse_store_remote_bdaddr:
+	bpatch patch12_6,mem_patch12
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_STORE_EEPROM_FLAG
+	arg MOUSE_STORE_EEPROM_FLAG,queue
+	call mouse_disable_function_flag
+	call hid_device_check_device_addr
+mouse_unplug_clean_bdaddr:
+	call hid_device_before_store_reconn_info
+	branch mouse_store_device_info_delay
+	
+/******************************store info start**************************************/
+	
+mouse_store_device_info_delay:	
+	fetch 1,mem_store_information_delay_timer_init
+	store 1,mem_store_information_delay_timer
+	rtn
+
+mouse_store_device_info:
+	bpatch patch12_7,mem_patch12
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_EEPROM,mouse_store_eeprom_device_info
+	bbit1 MOUSE_ENABLE_FLASH,mouse_store_flash_device_info
+	bbit1 MOUSE_ENABLE_OTP,mouse_store_otp_device_info
+	rtn
+
+mouse_store_dpi_info_check:
+	bpatch patch13_0,mem_patch13
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_EEPROM,mouse_store_eerpom_dpi
+	bbit1 MOUSE_ENABLE_OTP,mouse_store_otp_dpi
+	bbit1 MOUSE_ENABLE_FLASH,mouse_store_flash_device_info
+	rtn
+
+
+/******************eeprom data store****************/
+mouse_store_eeprom_device_info:
+	arg 128,temp
+	arg mem_device_flag,rega
+	arg MOUSE_INFO_EEPROM_OFFECT,regb
+	branch iicd_write_protect_eep_data
+
+mouse_store_eerpom_dpi:
+	arg 1,temp
+	arg mem_mouse_dpi,rega
+	arg MOUSE_DPI_EEPROM_OFFECT,regb
+	branch iicd_write_protect_eep_data
+	
+
+/******************flash data store****************/
+mouse_store_flash_device_info:
+	call 	hid_device_store_flash_device_info
+	branch mouse_sensor_spi_init
+
+
+
+/******************otp data store****************/
+mouse_store_otp_device_info:
+	call mouse_write_otp_app_initflag
+	call mouse_write_otp_device_flag
+	call mouse_write_otp_device_info
+	branch mouse_write_otp_le_addr_increase_count_info
+
+mouse_write_otp_app_initflag:
+	call mouse_otp_load_app_initflag
+	fetch 2,mem_store_flag
+	arg EEPROM_INIT_FLAG,temp
+	isub temp,null
+	rtn zero
+	branch mouse_otp_store_app_initflag
+
+/**********otp device flag store********/
+mouse_write_otp_device_flag:
+	fetchr regb,2,mem_otp_offset_device_flag
+	copy regb,regc
+mouse_write_otp_device_flag_loop:
+	call mouse_read_otp_device_flag_common
+	fetch 1,mem_device_otp_flag_temp
+	branch mouse_device_flag_store,blank
+	store 1,mem_device_flag_last
+	increase 1,regc
+	fetch 2,mem_otp_offset_device_flag_end
+	isub regc,null
+	nrtn positive
+	copy regc,regb
+	branch mouse_write_otp_device_flag_loop
+
+mouse_device_flag_store:
+	fetch 1,mem_device_flag_last
+	and pdata,0xf0,pdata
+	branch mouse_device_flag_store_check,blank
+	
+	fetch 1,mem_device_flag
+	call mouse_device_flag_otp_store_judge			// add device_flag check
+	store 1,mem_device_flag_value
+	
+mouse_devoce_flag_store_end:	
+	arg 1,loopcnt
+	copy regc,regb
+	arg mem_device_flag_value,rega
+	branch otp_write			/* regb = otp address, rega pointers data, loopcnt is count */
+
+mouse_device_flag_store_check:
+	fetcht 1,mem_device_flag_last
+	fetch 1,mem_device_flag
+	call mouse_device_flag_otp_store_judge
+	
+	isub temp,null
+	rtn zero
+	lshift4 pdata,pdata
+	iadd temp,pdata
+	store 1,mem_device_flag_value
+	
+	copy regc,pdata
+	fetcht 2,mem_otp_offset_device_flag
+	isub temp,null
+	branch mouse_devoce_flag_store_end,zero
+	
+	increase -1,regc
+	branch mouse_devoce_flag_store_end
+
+mouse_device_flag_otp_store_judge:
+	rtnne MODE_24G_DEVICE
+	increase 4,pdata
+	rtn
+
+/**********otp addr store********/
+mouse_write_otp_device_info:
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,mouse_write_otp_24g_addr
+	beq MODE_BT_DEVICE1,mouse_write_otp_le_device1
+	beq MODE_BT_DEVICE2,mouse_write_otp_le_device2
+	rtn
+
+mouse_write_otp_24g_addr:
+	fetchr regb,2,mem_otp_offset_24g_addr
+	copy regb,regc
+mouse_otp_store_24g_addr_loop:
+	call mouse_read_otp_24g_addr_common
+	fetch 4,mem_mouse_24g_addr_temp
+	branch mouse_24g_addr_store,blank	
+	store 4,mem_mouse_24g_addr_last
+	increase 4,regc
+	fetch 2,mem_otp_offset_24g_addr_end
+	isub regc,null
+	nrtn positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_otp_store_24g_addr_loop
+
+mouse_24g_addr_store:
+	fetch 4,mem_mouse_24g_addr_last
+	fetcht 4,mem_device_24g_addr
+	isub temp,null
+	rtn zero
+	arg 4,loopcnt
+	arg mem_device_24g_addr,rega
+	copy regc,regb
+	branch otp_write			/* regb = otp address, rega pointers data, loopcnt is count */
+
+mouse_write_otp_le_device1:
+	fetchr regb,2,mem_otp_offset_le_addr1
+	copy regb,regc
+mouse_otp_store_le_addr1_loop:
+	call mouse_read_otp_le_addr1_common
+	fetch 6,mem_mouse_le_addr1_temp
+	branch mouse_le_addr1_store,blank	
+	store 6,mem_mouse_le_addr1_last
+	increase 6,regc
+	fetch 2,mem_otp_offset_le_addr1_end
+	isub regc,null
+	nrtn positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_otp_store_le_addr1_loop
+
+mouse_le_addr1_store:
+	fetch 6,mem_mouse_le_addr1_last
+	fetcht 6,mem_device1_addr
+	isub temp,null
+	rtn zero
+	arg 6,loopcnt
+	arg mem_device1_addr,rega
+	copy regc,regb
+	branch otp_write			/* regb = otp address, rega pointers data, loopcnt is count */
+
+
+mouse_write_otp_le_device2:
+	fetchr regb,2,mem_otp_offset_le_addr2
+	copy regb,regc
+mouse_otp_store_le_addr2_loop:
+	call mouse_read_otp_le_addr2_common
+	fetch 6,mem_mouse_le_addr2_temp
+	branch mouse_le_addr2_store,blank	
+	store 6,mem_mouse_le_addr2_last
+	increase 6,regc
+	fetch 2,mem_otp_offset_le_addr2_end
+	isub regc,null
+	nrtn positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_otp_store_le_addr2_loop
+
+mouse_le_addr2_store:
+	fetch 6,mem_mouse_le_addr2_last
+	fetcht 6,mem_device2_addr
+	isub temp,null
+	rtn zero
+	arg 6,loopcnt
+	arg mem_device2_addr,rega
+	copy regc,regb
+	branch otp_write			/* regb = otp address, rega pointers data, loopcnt is count */
+
+
+/**************store le addr increase count**********/
+mouse_write_otp_le_addr_increase_count_info:
+	fetch 1,mem_device_flag
+	rtneq MODE_24G_DEVICE
+	fetchr regb,2,mem_otp_offset_le_addr_increase_count
+	copy regb,regc
+mouse_otp_store_le_addr_increase_count_loop:
+	call mouse_read_otp_le_addr_increase_count_common
+	fetch 1,mem_random_addr_increase_count_temp
+	branch mouse_le_addr_increase_count_store,blank	
+	store 1,mem_random_addr_increase_count_last
+	increase 1,regc
+	fetch 2,mem_otp_offset_le_addr_increase_count_end
+	isub regc,null
+	nrtn positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_otp_store_le_addr_increase_count_loop
+
+mouse_le_addr_increase_count_store:
+	fetch 1,mem_random_addr_increase_count_last
+	fetcht 1,mem_random_addr_increase_count
+	isub temp,null
+	rtn zero
+	arg 1,loopcnt
+	arg mem_random_addr_increase_count,rega
+	copy regc,regb
+	branch otp_write			/* regb = otp address, rega pointers data, loopcnt is count */
+
+
+/**********otp dpi store********/
+mouse_store_otp_dpi:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_LOAD_AND_STORE_DPI
+	fetchr regb,2,mem_otp_offset_dpi
+	copy regb,regc
+mouse_otp_store_dpi_loop:
+	call mouse_read_otp_dpi_common
+	fetch 1,mem_mouse_dpi_temp
+	branch mouse_otp_dpi_store,blank
+	store 1,mem_mouse_dpi_last
+	increase 1,regc
+	fetch 2,mem_otp_offset_dpi_end
+	isub regc,null
+	nrtn positive
+	copy regc,regb
+	branch mouse_otp_store_dpi_loop
+
+mouse_otp_dpi_store:
+	fetch 1,mem_mouse_dpi_last
+	and pdata,0xf0,pdata
+	branch mouse_dpi_store_last_check,blank
+	fetch 1,mem_mouse_dpi
+	call mouse_dpi_otp_store_judge	//add dpi check
+	store 1,mem_mouse_otp_dpi_value
+mouse_dpi_store_end:	
+	arg 1,loopcnt
+	copy regc,regb
+	arg mem_mouse_otp_dpi_value,rega
+	branch otp_write			/* regb = otp address, rega pointers data, loopcnt is count */
+
+mouse_dpi_store_last_check:
+	fetcht 1,mem_mouse_dpi_last
+	fetch 1,mem_mouse_dpi
+	call mouse_dpi_otp_store_judge
+	isub temp,null
+	rtn zero
+	lshift4 pdata,pdata
+	iadd temp,pdata
+	store 1,mem_mouse_otp_dpi_value
+	
+	copy regc,pdata
+	fetcht 2,mem_otp_offset_dpi
+	isub temp,null
+	branch mouse_dpi_store_end,zero
+	
+	increase -1,regc
+	branch mouse_dpi_store_end
+
+mouse_dpi_otp_store_judge:
+	rtnne MOUSE_DPI_LEVEL1
+	increase 7,pdata
+	rtn
+	
+/******************************store info end**************************************/
+	
+
+
+/******************************load info start**************************************/
+
+mouse_device_flag_check:
+	fetch 1,mem_device_flag
+	sub pdata,4,null
+	rtn positive
+	call set_pdata_0
+	branch mouse_store_device_flag
+
+/******************eeprom data load****************/
+mouse_load_eeprom_info_check:
+	call iicd_read_init_pin
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	isolate1 MOUSE_ENABLE_2K_EEPROM,pdata
+	ncall clear_eeprom_size_2k,true
+	call set_eeprom_size_2k,true
+	call mouse_eeprom_load_recon_info
+	call mouse_device_flag_check
+	branch mouse_app_initflag_load_check
+
+mouse_eeprom_load_recon_info:
+	arg 128,temp
+	arg mem_device_flag,rega
+	arg MOUSE_INFO_EEPROM_OFFECT,regb
+	branch iicd_read_eep_data
+
+mouse_load_eeprom_dpi:
+	arg 1,temp
+	arg mem_mouse_dpi,rega
+	arg MOUSE_DPI_EEPROM_OFFECT,regb
+	branch iicd_read_eep_data
+
+
+/******************flash data load****************/
+mouse_load_flash_info_check:
+	call hid_device_load_flash_info_check
+	call mouse_device_flag_check
+	call mouse_app_initflag_load_check
+	branch mouse_sensor_spi_init
+	
+mouse_information_flash_parameters:
+	setarg mem_device_information_end
+	arg mem_device_information_start,temp
+	isub temp,temp
+	fetch 3,mem_flash_base
+	arg mem_device_information_start,rega
+	rtn
+	
+mouse_spid_flash_release_form_powerdown:
+	jam FLASH_COMMAND_RELEASE_FROM_POWERDOWN,mem_temp
+mouse_spid_write_flash_cmd:
+	call delay_nop100
+	call spid_unlock_flash
+	arg mem_write_flash_head_temp,rega
+	fetcht 1,mem_temp
+	call mouse_spid_write_flash_cmd_common
+	branch delay_nop100
+
+mouse_spid_flash_powerdown:
+	jam FLASH_COMMAND_POWERDOWN,mem_temp
+	branch mouse_spid_write_flash_cmd
+
+mouse_spid_write_flash_cmd_common:
+	istoret 1,rega
+	rshift16 pdata,temp
+	istoret 1,contw
+	rshift8 pdata,temp
+	istoret 1,contw
+	istore 1,contw
+	deposit rega
+	store 2,core_spid_txaddr
+	setarg 0
+	store 2,core_spid_rxlen
+	jam spid_start,core_misc_ctrl
+	branch wait_spid_done
+		
+mouse_flash_erase_sector:
+	fetch 3,mem_flash_base
+	store 3,mem_spi_write_addr
+	branch spid_flash_erase_sector+2
+
+mouse_spid_write_flash:
+	copy pdata,regc
+	copy rega,pdata
+	increase -4,pdata
+	copy pdata,regb
+	ifetch 4,regb
+	store 4,mem_write_flash_head_temp
+	copy regc,pdata
+	call spid_write_flash
+	fetch 4,mem_write_flash_head_temp
+	istore 4,regb
+	rtn
+
+mouse_flash_power_down:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_FLASH
+	call mouse_spid_flash_powerdown
+	call twspi_enable	// 2 wire mode
+	fetcht 1,mem_spi_cs_gpio		//disable flash
+	call gpio_out_inactive
+	fetcht 1,mem_spi_hold_gpio
+	branch device_gpio_config_input_pd
+
+
+/******************otp data load****************/
+mouse_load_otp_info_check:
+	call mouse_read_otp_dpi
+	call mouse_read_otp_device_flag
+	call mouse_device_flag_check
+	call mouse_read_otp_device_info
+mouse_app_initflag_load_check:
+	bpatch patch13_1,mem_patch13
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	isolate1 MOUSE_ENABLE_OTP,pdata
+	call mouse_otp_load_app_initflag,true
+	fetch 2,mem_store_flag
+	arg EEPROM_INIT_FLAG,temp
+	isub temp,null
+	branch hid_device_load_device_info,zero
+mouse_app_initflag_load:
+	storet 2,mem_store_flag
+	call hid_device_ble_init_address
+	fetch 1,mem_device_flag_temp
+	store 1,mem_device_flag
+	store 1,mem_random_addr_increase_count
+mouse_load_default_dpi:
+	fetch 1,mem_config_sensor_dpi
+mouse_temp_store_dpi:
+	store 1,mem_mouse_dpi
+	rtn
+
+mouse_otp_load_app_initflag:
+	arg 2,loopcnt
+	fetchr regb,2,mem_otp_offset_app_initflag
+	arg mem_store_flag,rega
+	branch otp_read_data
+	
+mouse_otp_store_app_initflag:
+	arg 2,loopcnt
+	arg mem_store_flag,rega
+	fetchr regb,2,mem_otp_offset_app_initflag
+	branch otp_write
+
+/**************load device flag**********/
+mouse_read_otp_device_flag:
+	fetchr regb,2,mem_otp_offset_device_flag
+	copy regb,regc
+mouse_read_otp_device_flag_loop:
+	call mouse_read_otp_device_flag_common
+	fetch 1,mem_device_otp_flag_temp
+	branch mouse_device_flag_load,blank
+	store 1,mem_device_flag_last
+	increase 1,regc
+	fetch 2,mem_otp_offset_device_flag_end
+	isub regc,null
+	nbranch mouse_device_flag_load,positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_read_otp_device_flag_loop
+
+mouse_read_otp_device_flag_common:
+	arg 1,loopcnt
+	arg mem_device_otp_flag_temp,rega
+	branch otp_read_data				/* regb=otp address, rega points to data, loopcnt is count */
+
+mouse_device_flag_load:
+	fetch 1,mem_device_flag_last
+	copy pdata,temp
+	and pdata,0xf0,pdata
+	branch mouse_device_flag_load_last,blank
+	rshift4 pdata,pdata
+	branch mouse_device_flag_load_end
+
+mouse_device_flag_load_last:
+	copy temp,pdata
+mouse_device_flag_load_end:
+	sub pdata,0,null
+	branch mouse_device_flag_temp_load,zero
+	sub pdata,4,null
+	call set_pdata_0,zero
+mouse_store_device_flag:
+	store 1,mem_device_flag
+	rtn
+
+mouse_device_flag_temp_load:
+	fetch 1,mem_device_flag_temp
+	branch mouse_store_device_flag
+
+/****************otp load addr*************/
+mouse_read_otp_device_info:
+	call mouse_read_otp_24g_addr
+	call mouse_read_otp_le_device1
+	call mouse_read_otp_le_device2
+	branch mouse_read_otp_le_addr_increase_count_info
+	
+mouse_read_otp_le_device1:
+	call mouse_read_otp_le_device1_addr
+	branch mouse_read_otp_le_device1_locall_addr
+
+mouse_read_otp_le_device2:
+	call mouse_read_otp_le_device2_addr
+	branch mouse_read_otp_le_device2_locall_addr
+
+/*************************load le addr1**********************************/
+mouse_read_otp_le_device1_addr:
+	fetchr regb,2,mem_otp_offset_le_addr1
+	copy regb,regc
+mouse_read_otp_le_device1_addr_loop:
+	call mouse_read_otp_le_addr1_common	
+	fetch 6,mem_mouse_le_addr1_temp
+	branch mouse_le_addr1_load,blank	
+	store 6,mem_mouse_le_addr1_last
+	increase 6,regc
+	fetch 2,mem_otp_offset_le_addr1_end
+	isub regc,null
+	nbranch mouse_le_addr1_load,positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_read_otp_le_device1_addr_loop
+
+mouse_read_otp_le_addr1_common:
+	arg 6,loopcnt
+	arg mem_mouse_le_addr1_temp,rega
+	branch otp_read_data				/* regb=otp address, rega points to data, loopcnt is count */	
+
+mouse_le_addr1_load:
+	fetch 6,mem_mouse_le_addr1_last
+	store 6,mem_device1_addr
+	rtn
+
+
+mouse_read_otp_le_device1_locall_addr:
+	fetchr regb,2,mem_otp_offset_le_locall_addr1
+	copy regb,regc
+mouse_read_otp_le_device1_locall_addr_loop:
+	call mouse_read_otp_le_locall_addr1_common	
+	fetch 6,mem_mouse_le_locall_addr1_temp
+	branch mouse_le_locall_addr1_load,blank	
+	store 6,mem_mouse_le_locall_addr1_last
+	increase 6,regc
+	fetch 2,mem_otp_offset_le_locall_addr1_end
+	isub regc,null
+	nbranch mouse_le_locall_addr1_load,positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_read_otp_le_device1_locall_addr_loop
+
+mouse_read_otp_le_locall_addr1_common:
+	arg 6,loopcnt
+	arg mem_mouse_le_locall_addr1_temp,rega
+	branch otp_read_data				/* regb=otp address, rega points to data, loopcnt is count */	
+
+mouse_le_locall_addr1_load:
+	fetch 6,mem_mouse_le_locall_addr1_last
+	fetcht 6,mem_device_compare_addr
+	isub temp,null
+	call mouse_device_le_locall_addr1_init,zero
+	store 6,mem_device1_locall_addr
+	rtn
+
+mouse_device_le_locall_addr1_init:
+	fetch 6,mem_le_lap
+	rtn
+
+/*************************load le addr2**********************************/
+mouse_read_otp_le_device2_addr:
+	fetchr regb,2,mem_otp_offset_le_addr2
+	copy regb,regc
+mouse_read_otp_le_device2_addr_loop:
+	call mouse_read_otp_le_addr2_common	
+	fetch 6,mem_mouse_le_addr2_temp
+	branch mouse_le_addr2_load,blank	
+	store 6,mem_mouse_le_addr2_last
+	increase 6,regc
+	fetch 2,mem_otp_offset_le_addr2_end
+	isub regc,null
+	nbranch mouse_le_addr2_load,positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_read_otp_le_device2_addr_loop
+
+mouse_read_otp_le_addr2_common:
+	arg 6,loopcnt
+	arg mem_mouse_le_addr2_temp,rega
+	branch otp_read_data				/* regb=otp address, rega points to data, loopcnt is count */	
+
+mouse_le_addr2_load:
+	fetch 6,mem_mouse_le_addr2_last
+	store 6,mem_device2_addr
+	rtn
+
+
+mouse_read_otp_le_device2_locall_addr:
+	fetchr regb,2,mem_otp_offset_le_locall_addr2
+	copy regb,regc
+mouse_read_otp_le_device2_locall_addr_loop:
+	call mouse_read_otp_le_locall_addr2_common	
+	fetch 6,mem_mouse_le_locall_addr2_temp
+	branch mouse_le_locall_addr2_load,blank	
+	store 6,mem_mouse_le_locall_addr2_last
+	increase 6,regc
+	fetch 2,mem_otp_offset_le_locall_addr2_end
+	isub regc,null
+	nbranch mouse_le_locall_addr2_load,positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_read_otp_le_device2_locall_addr_loop
+
+mouse_read_otp_le_locall_addr2_common:
+	arg 6,loopcnt
+	arg mem_mouse_le_locall_addr2_temp,rega
+	branch otp_read_data				/* regb=otp address, rega points to data, loopcnt is count */	
+
+mouse_le_locall_addr2_load:
+	fetch 6,mem_mouse_le_locall_addr2_last
+	fetcht 6,mem_device_compare_addr
+	isub temp,null
+	call mouse_device_le_locall_addr2_init,zero
+	store 6,mem_device2_locall_addr
+	rtn
+
+mouse_device_le_locall_addr2_init:
+	fetch 6,mem_le_lap
+	add pdata,0x0100,pdata
+	rtn
+
+/**************load 24g addr**********/
+mouse_read_otp_24g_addr:
+	fetchr regb,2,mem_otp_offset_24g_addr
+	copy regb,regc
+mouse_read_otp_24g_addr_loop:
+	call mouse_read_otp_24g_addr_common
+	fetch 4,mem_mouse_24g_addr_temp
+	branch mouse_24g_addr_load,blank	
+	store 4,mem_mouse_24g_addr_last
+	increase 4,regc
+	fetch 2,mem_otp_offset_24g_addr_end
+	isub regc,null
+	nbranch mouse_24g_addr_load,positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_read_otp_24g_addr_loop
+
+mouse_read_otp_24g_addr_common:
+	arg 4,loopcnt
+	arg mem_mouse_24g_addr_temp,rega
+	branch otp_read_data				/* regb=otp address, rega points to data, loopcnt is count */
+	
+mouse_24g_addr_load:
+	fetch 4,mem_mouse_24g_addr_last
+	store 4,mem_device_24g_addr
+	rtn
+
+/**************load le addr increase count**********/
+mouse_read_otp_le_addr_increase_count_info:
+	fetchr regb,2,mem_otp_offset_le_addr_increase_count
+	copy regb,regc
+mouse_read_otp_le_addr_increase_count_loop:
+	call mouse_read_otp_le_addr_increase_count_common
+	fetch 1,mem_random_addr_increase_count_temp
+	branch mouse_le_addr_increase_count_load,blank	
+	store 1,mem_random_addr_increase_count_last
+	increase 1,regc
+	fetch 2,mem_otp_offset_le_addr_increase_count_end
+	isub regc,null
+	nbranch mouse_le_addr_increase_count_load,positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_read_otp_le_addr_increase_count_loop
+
+mouse_read_otp_le_addr_increase_count_common:
+	arg 1,loopcnt
+	arg mem_random_addr_increase_count_temp,rega
+	branch otp_read_data				/* regb=otp address, rega points to data, loopcnt is count */
+	
+mouse_le_addr_increase_count_load:
+	fetch 1,mem_random_addr_increase_count_last
+	store 1,mem_random_addr_increase_count
+	rtn
+
+/*************load dpi**********/
+mouse_read_otp_dpi:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_LOAD_AND_STORE_DPI,mouse_load_default_dpi
+	fetchr regb,2,mem_otp_offset_dpi
+	copy regb,regc
+mouse_read_otp_dpi_loop:
+	call mouse_read_otp_dpi_common	
+	fetch 1,mem_mouse_dpi_temp
+	branch mouse_dpi_load,blank	
+	store 1,mem_mouse_dpi_last
+	increase 1,regc
+	fetch 2,mem_otp_offset_dpi_end
+	isub regc,null
+	nbranch mouse_dpi_load,positive	//if read end,retention last value
+	copy regc,regb
+	branch mouse_read_otp_dpi_loop
+
+mouse_read_otp_dpi_common:
+	arg 1,loopcnt
+	arg mem_mouse_dpi_temp,rega
+	branch otp_read_data				/* regb=otp address, rega points to data, loopcnt is count */
+
+mouse_dpi_load:
+	fetch 1,mem_mouse_dpi_last
+	copy pdata,temp
+	and pdata,0xf0,pdata
+	branch mouse_dpi_load_last,blank
+	rshift4 pdata,pdata
+	branch mouse_dpi_load_end
+
+mouse_dpi_load_last:
+	copy temp,pdata
+mouse_dpi_load_end:
+	sub pdata,7,null
+	call set_pdata_0,zero
+	branch mouse_temp_store_dpi
+
+/******************************load info end**************************************/
+
+
+mouse_idle:
+	bpatch patch13_2,mem_patch13
+	call mouse_low_voltage_led_no_enter_lpm
+	call ui_check_paring_button
+	call mouse_dpi_check
+	call mouse_dpi_another_gpio_check
+	call mouse_select_device_check
+	call mouse_check_select_device_by_switch
+	call mouse_bt_button_check
+	call mouse_wheel_check
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_USB
+	bpatch patch13_3,mem_patch13
+	call mouse_usb_isr
+	branch mouse_usb_mode
+	
+mouse_select_device_check:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_SELECT_DEVICE_BY_PB_BUTTON,mouse_select_device_by_pb_button
+	bbit1 MOUSE_ENABLE_PB_BUTTON_LONG_PRESS_DISCONVERY,mouse_select_device_by_pb_button
+	rtn
+
+mouse_select_device_by_pb_button:	
+	call mouse_select_device_by_pb_button_check
+	branch mouse_select_device_by_pb_button_exit
+	
+mouse_select_device_by_pb_button_check:
+	bpatch patch13_4,mem_patch13
+	arg 0,rega
+	jam MOUSE_PB_KEY,mem_mouse_key_temp
+	fetcht 1,mem_config_select_device_button_gpio
+	call mouse_pb_button_check
+	store 1,mem_mouse_pbkey_press_status
+	fetch 1,mem_matrix_public_gpio
+	beq GPIO_DISABLE,mouse_3io6key_pb_button_check_end	
+	branch mouse_matrix_public_gpio_reset
+
+mouse_retransmit_select_device_by_pb_button:
+	fetch 1,mem_config_select_device_button_gpio
+	rtneq GPIO_DISABLE
+	call mouse_select_device_by_pb_button_check
+	copy rega,pdata
+	bbit1 MOUSE_PB_KEY,mouse_select_device_button_down+2
+	branch mouse_select_device_button_up
+	
+mouse_3io6key_pb_button_check_end:
+	fetcht 1,mem_config_select_device_button_gpio
+	call device_gpio_config_input_pu
+mouse_select_device_by_pb_button_exit:	
+	copy rega,pdata
+	bbit1 MOUSE_PB_KEY,mouse_select_device_button_down
+	branch mouse_select_device_button_up
+
+mouse_pb_button_check:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_PB_BUTTON_CONNECT_GND,mouse_pb_button_connect_gnd
+	fetch 1,mem_mouse_pbkey_press_status
+	copy pdata,regc
+	fetch 1,mem_matrix_public_gpio
+	beq GPIO_DISABLE,mouse_3io6key_check
+	fetch 1,mem_mouse_ghost_flag
+	nbranch mouse_select_device_by_pb_button_end,blank
+	branch mouse_pb_button_connect_matrix
+
+mouse_select_device_by_pb_button_end:
+	jam PB_BUTTON_STATE_UP,mem_select_device_button_statue
+	jam 0,mem_mouse_pbkey_press_status
+	rtn
+
+mouse_pb_button_connect_gnd:
+	fetch 1,mem_mouse_pbkey_press_status
+	branch mouse_check_key_connect_gnd
+
+mouse_pb_button_connect_matrix:
+	call gpio_get_bit
+	fetcht 1,mem_matrix_public_gpio
+	branch mouse_pb_button_connect_gnd,true
+	fetcht 1,mem_matrix_public_gpio
+	call gpio_out_active
+	fetcht 1,mem_config_select_device_button_gpio
+	fetch 1,mem_mouse_pbkey_press_status
+	branch mouse_check_key_connect_gnd
+	
+mouse_select_device_button_up:
+	fetch 1,mem_select_device_button_statue
+	rtneq PB_BUTTON_STATE_UP
+	jam PB_BUTTON_STATE_UP,mem_select_device_button_statue	
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit1 MOUSE_ENABLE_PB_BUTTON_SHORT_PRESS_ENTER_DISCOVERY
+	fetch 1,mem_bt_discovery_count
+	sub pdata,20,null
+	ncall mouse_ready_reconnection_by_button,positive		// press button less than 30-20=1000ms
+	fetch 1,mem_ui_button_timeout
+	store 1,mem_bt_discovery_count
+	rtn
+
+mouse_select_device_button_down:
+	call mouse_select_device_ghost_check
+	rtn user
+	fetch 1,mem_select_device_button_statue
+	rtneq PB_BUTTON_STATE_DOWN
+	jam PB_BUTTON_STATE_DOWN,mem_select_device_button_statue
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_PB_BUTTON_SHORT_PRESS_ENTER_DISCOVERY,mouse_long_button_bt_discovery
+	fetch 1,mem_device_direct_timer
+	rtn blank
+	fetch 1,mem_device_direct_timeout
+	store 1,mem_device_direct_timer
+	rtn
+
+mouse_select_device_ghost_check:
+	disable user
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit1 MOUSE_ENABLE_PB_BUTTON_CONNECT_GND
+mouse_ghost_key_value_check:
+	fetch 1,mem_mouse_lkey_press_status
+	rtn blank
+	fetch 1,mem_mouse_rkey_press_status
+	rtn blank
+	fetch 1,mem_mouse_mkey_press_status
+	rtn blank
+	branch enable_user
+
+//===========================select device by switch start==================================//	
+	
+mouse_check_select_device_by_switch:
+	bpatch patch13_5,mem_patch13
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO
+	bbit0 MOUSE_ENABLE_SWITCH_GPIO_CONNECT_VIN,mouse_switch_gpio_connect_gnd_check
+mouse_switch_gpio_connect_vin_check:
+	call mouse_switch_gpio_connect_vin
+	fetch 1,mem_device_switch_gpio
+	branch mouse_gpio_config_pu_check
+
+mouse_switch_gpio_connect_gnd_check:
+	call mouse_switch_gpio_connect_gnd
+	fetch 1,mem_device_switch_gpio
+	branch mouse_gpio_config_pd_check
+	
+mouse_switch_gpio_connect_vin:
+	fetch 1,mem_device_switch_gpio
+	call mouse_gpio_config_pd_check
+	fetcht 1,mem_device_switch_gpio
+	call gpio_get_bit
+	branch mouse_select_btdevice,true
+	branch mouse_select_24gdevice
+
+mouse_switch_gpio_connect_gnd:
+	fetch 1,mem_device_switch_gpio
+	call mouse_gpio_config_pu_check
+	fetcht 1,mem_device_switch_gpio
+	call gpio_get_bit
+	branch mouse_select_24gdevice,true
+	branch mouse_select_btdevice
+
+mouse_select_btdevice:
+	fetch 1,mem_device_flag
+	rtneq MODE_BT_DEVICE1
+	jam MODE_BT_DEVICE1,mem_device_flag
+	branch mouse_select_device_set
+
+mouse_select_24gdevice:
+	fetch 1,mem_device_flag
+	rtneq MODE_24G_DEVICE
+	jam MODE_24G_DEVICE,mem_device_flag
+mouse_select_device_set:
+	call mouse_select_device_stop_set
+	branch mouse_soft_reset
+
+//=========================================================//
+
+mouse_check_select_device_by_switch_once:
+	bpatch patch13_6,mem_patch13
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO
+	bbit0 MOUSE_ENABLE_SWITCH_GPIO_CONNECT_VIN,mouse_switch_gpio_connect_gnd_check_once
+mouse_switch_gpio_connect_vin_check_once:
+	call mouse_switch_gpio_connect_vin_once
+	fetch 1,mem_device_switch_gpio
+	branch mouse_gpio_config_pu_check
+
+mouse_switch_gpio_connect_gnd_check_once:
+	call mouse_switch_gpio_connect_gnd_once
+	fetch 1,mem_device_switch_gpio
+	branch mouse_gpio_config_pd_check
+
+
+mouse_switch_gpio_connect_vin_once:
+	fetch 1,mem_device_switch_gpio
+	call mouse_gpio_config_pd_check
+	fetcht 1,mem_device_switch_gpio
+	call gpio_get_bit
+	branch mouse_check_select_btdevice,true
+	branch mouse_check_select_24g_device
+
+mouse_switch_gpio_connect_gnd_once:
+	
+	fetch 1,mem_device_switch_gpio
+	call mouse_gpio_config_pu_check
+	fetcht 1,mem_device_switch_gpio
+	call gpio_get_bit
+	branch mouse_check_select_24g_device,true
+	branch mouse_check_select_btdevice
+
+mouse_check_select_24g_device:	
+	fetch 1,mem_device_flag
+	rtneq MODE_24G_DEVICE
+	jam MODE_24G_DEVICE,mem_device_flag
+mouse_select_device_stop_set:
+	call mouse_24g_stop
+	branch mouse_stop_bluetooth_mode
+
+mouse_check_select_btdevice:
+	fetch 1,mem_device_flag
+	rtneq MODE_BT_DEVICE1
+	jam MODE_BT_DEVICE1,mem_device_flag
+	branch mouse_select_device_stop_set
+	
+//===========================select device by switch end==================================//	
+
+
+mouse_ready_reconnection_by_button:
+	bpatch patch13_7,mem_patch13
+	fetch 1,mem_device_number
+	rtneq 1		// 1channel
+	call mouse_select_device_number
+	storet 1,mem_device_flag
+mouse_store_device_number_before_reset:	
+	call mouse_select_device_enable
+	call mouse_stop_bluetooth_mode
+	call app_evt_button_long_pressed
+	call mouse_select_device_disable
+	jam 1,mem_device_need_soft_reset
+	branch mouse_store_device_info_delay
+
+mouse_soft_reset:
+	call mouse_select_device_enable
+	branch soft_reset_chip
+
+mouse_select_device_number:
+	fetcht 1,mem_device_flag
+	increase 1,temp
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_24G,mouse_select_device_number_24g
+	sub temp,2,null
+	rtn positive
+mouse_select_device_count_clean_bt:
+	arg 1,temp
+	rtn
+	
+mouse_select_device_number_24g:	
+	fetch 1,mem_device_number
+	increase -1,pdata
+	isub temp,null
+	rtn positive
+mouse_select_device_count_clean_24g:
+	arg 0,temp
+	rtn
+
+mouse_store_device_number2eeprom:
+	arg 1,temp
+	arg mem_device_flag,rega
+	arg 0,regb
+	branch iicd_write_protect_eep_data
+		
+mouse_bt_button_check:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_PB_BUTTON_SHORT_PRESS_ENTER_DISCOVERY
+	branch mouse_select_device_by_pb_button
+	
+mouse_select_device_enable:
+	arg MOUSE_SELECT_DEVICE_FLAG,queue
+	branch mouse_enable_function_flag
+mouse_select_device_disable:
+	arg MOUSE_SELECT_DEVICE_FLAG,queue
+	branch mouse_disable_function_flag
+mouse_bt_cannel_reconn_enable:
+	arg MOUSE_BT_CANNEL_RECONN_FLAG,queue
+	branch mouse_enable_function_flag
+mouse_bt_cannel_reconn_disable:
+	arg MOUSE_BT_CANNEL_RECONN_FLAG,queue
+	branch mouse_disable_function_flag
+mouse_bt_discovery_button_down_enable:
+	arg MOUSE_BT_DISCOVERY_BUTTON_DOWN_FLAG,queue
+	branch mouse_enable_function_flag
+mouse_bt_discovery_button_down_disable:
+	arg MOUSE_BT_DISCOVERY_BUTTON_DOWN_FLAG,queue
+	branch mouse_disable_function_flag
+
+mouse_adc_read_enable:
+	arg MOUSE_ENABLE_ADC,queue
+	branch mouse_enable_function_flag
+
+mouse_24g_set_250Hz:
+	arg MOUSE_ENABLE_24G_250Hz,queue
+	branch mouse_enable_function_flag
+
+mouse_24g_search_dongle_enable:
+	arg MOUSE_ENABLE_24G_SEARCH_DONGLE,queue
+	branch mouse_enable_function_flag
+	
+mouse_16M_enable:
+	arg MOUSE_ENABLE_16M,queue
+	branch mouse_enable_function_flag
+	
+mouse_dpi_4level_enable:
+	arg MOUSE_ENABLE_DPI_LEVEL_4,queue
+	branch mouse_enable_function_flag
+
+mouse_enable_function_flag:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	qset1 pdata
+	store MOUSE_FLAG_LEN,mem_mouse_flag
+	rtn
+
+mouse_disable_function_flag:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	qset0 pdata
+	store MOUSE_FLAG_LEN,mem_mouse_flag
+	rtn
+	
+mouse_polling_device:
+	bpatch patch14_0,mem_patch14
+	fetch 1,mem_reconn_times
+	increase -1,pdata
+	store 1,mem_reconn_times
+	fetcht 1,mem_device_flag
+	sub temp,1,null
+	ncall mouse_select_device_number,zero
+	storet 1,mem_device_flag
+	call mouse_store_device_number2eeprom
+	call hid_device_before_store_reconn_info
+	branch mouse_start_reconnect_device
+
+	
+//notice: need to call p_mouse_drawing_optima_init when waked from mult
+mouse_drawing_optima:
+	bpatch patch14_1,mem_patch14
+	fetch 1,mem_config_sensor_type
+	rtneq P3212
+	rtneq KA8G2
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_SMOOTHER
+	fetch 4,mem_mouse_x
+	rtn blank
+	call mouse_data_abs_check
+	setarg 0x03	//asm_flag enable condition
+	call mouse_pdata_greater_than_check
+	call mouse_disable_asm,blank
+	ncall mouse_enable_asm,blank
+	setarg 0x02	//asm_flag disable condition
+	call mouse_data_less_than_check
+	call mouse_disable_asm,blank
+	fetch 1,mem_mouse_asm_flag
+	beq 1,mouse_drawing_optima_modify
+mouse_drawing_optima_init:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_SMOOTHER
+	arg 5,loopcnt
+	arg mem_mouse_asm_flag,contw
+	branch clear_mem
+
+mouse_drawing_optima_modify:
+	call mouse_drawing_optima_xy_offset_modify
+	fetch 2,mem_mouse_x_pre
+	store 2,mem_data_pre
+	fetch 2,mem_mouse_x
+	store 2,mem_data_current
+	call mouse_drawing_optima_data_x
+	fetch 2,mem_data_pre
+	store 2,mem_mouse_x_pre
+	fetch 2,mem_data_current
+	store 2,mem_mouse_x
+
+	fetch 2,mem_mouse_y_pre
+	store 2,mem_data_pre
+	fetch 2,mem_mouse_y
+	store 2,mem_data_current
+	call mouse_drawing_optima_data_y
+	fetch 2,mem_data_pre
+	store 2,mem_mouse_y_pre
+	fetch 2,mem_data_current
+mouse_data_y_store:
+	store 2,mem_mouse_y
+	rtn
+
+mouse_drawing_optima_xy_offset_modify:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_XY_OFFSET
+	bpatch patch14_2,mem_patch14
+	fetch 2,mem_mouse_x_pre
+	store 2,mem_data_value
+	call mouse_pre_xy_data_judge
+	store 2,mem_mouse_x_pre
+	fetch 2,mem_mouse_x
+	store 2,mem_data_value
+	call mouse_current_xy_data_judge
+	store 2,mem_mouse_x
+	fetch 2,mem_mouse_y_pre
+	store 2,mem_data_value
+	call mouse_pre_xy_data_judge
+	store 2,mem_mouse_y_pre
+	fetch 2,mem_mouse_y
+	store 2,mem_data_value
+	call mouse_current_xy_data_judge
+	branch mouse_data_y_store
+
+mouse_pre_xy_data_judge:	
+	fetch 1,mem_data_value+1
+	branch mouse_pre_xy_pdata_offset,blank
+	branch mouse_pre_xy_ndata_offset
+
+mouse_pre_xy_pdata_offset:
+	fetch 1,mem_data_value
+	call mouse_pre_xy_get_0_4_times
+	store 1,mem_data_value
+mouse_xy_data_offset_new:
+	fetch 2,mem_data_value
+	rtn
+mouse_pre_xy_ndata_offset:
+	fetch 1,mem_data_value
+	call mouse_pdata_invert
+	call mouse_pre_xy_get_0_4_times
+	call disable_blank,blank
+	call mouse_pdata_get_new_value
+	branch mouse_xy_data_offset_new
+	
+mouse_current_xy_data_judge:
+	fetch 1,mem_data_value+1
+	branch mouse_current_xy_pdata_offset,blank
+	branch mouse_current_xy_ndata_offset
+mouse_current_xy_pdata_offset:
+	fetch 1,mem_data_value
+	call mouse_current_xy_get_0_6_times
+	store 1,mem_data_value
+	branch mouse_xy_data_offset_new
+mouse_current_xy_ndata_offset:	
+	fetch 1,mem_data_value
+	call mouse_pdata_invert
+	call mouse_current_xy_get_0_6_times
+	call disable_blank,blank
+	call mouse_pdata_get_new_value
+	branch mouse_xy_data_offset_new
+	
+mouse_pre_xy_get_0_4_times:
+	mul32 pdata,4,pdata
+	div pdata,5
+	branch mouse_div_end
+	
+mouse_current_xy_get_0_6_times:	//0.6 times
+	mul32 pdata,12,pdata
+	div pdata,10
+mouse_div_end:
+	call wait_div_end
+	quotient pdata
+	rtn	
+	
+mouse_drawing_optima_data_x:
+	fetch 2,mem_data_pre
+	fetcht 2,mem_data_current
+	iadd temp,pdata
+	fetcht 1,mem_mouse_data_xtemp
+	iadd temp,pdata
+	and pdata,0x01,temp
+	storet 1,mem_mouse_data_xtemp
+	branch mouse_drawing_optima_data
+
+mouse_drawing_optima_data_y:
+	fetch 2,mem_data_pre
+	fetcht 2,mem_data_current
+	iadd temp,pdata
+	fetcht 1,mem_mouse_data_ytemp
+	iadd temp,pdata
+	and pdata,0x01,temp
+	storet 1,mem_mouse_data_ytemp
+	branch mouse_drawing_optima_data
+
+/**********
+input:data_pre,data_current
+output:data_pre,data_current after optima
+***********/
+mouse_drawing_optima_data:
+	store 3,mem_data_sum
+	isolate1 16,pdata
+	branch mouse_data_sum_overflow,true
+	fetch 1,mem_data_sum+1
+	beq 0xff,mouse_data_sum_n
+	fetch 1,mem_data_sum
+mouse_data_store_pre:
+	rshift pdata,pdata
+	store 2,mem_data_pre
+	store 2,mem_data_current
+	rtn
+mouse_data_sum_overflow:
+	fetch 1,mem_data_sum+1	//sum positive
+	beq 0,mouse_data_sum_overflow_p
+	fetch 3,mem_data_sum	
+	branch mouse_data_store_pre
+mouse_data_sum_overflow_p:
+	jam 0,mem_data_sum+2
+	fetch 1,mem_data_sum
+	branch mouse_data_store_pre
+
+mouse_data_sum_n:
+	fetch 1,mem_data_sum	//sum negetive
+	call mouse_pdata_get_half
+	store 1,mem_data_pre
+	store 1,mem_data_current
+	branch mouse_data_zero,blank
+	setarg 0xff
+mouse_data_set_direction:	
+	store 1,mem_data_pre+1
+	store 1,mem_data_current+1
+	rtn
+mouse_data_zero:
+	setarg 0
+	branch mouse_data_set_direction
+
+mouse_pdata_get_half:
+	call mouse_pdata_invert
+	rshift pdata,pdata
+mouse_pdata_get_new_value:	
+	call mouse_rega_in_out
+	sub pdata,0,pdata
+	store 1,mem_data_value	
+	rtn
+
+mouse_pdata_invert:
+	sub pdata,0,pdata
+mouse_rega_in_out:	
+	store 1,mem_rega
+	fetch 1,mem_rega
+	rtn
+
+mouse_disable_asm:
+	jam 0,mem_mouse_asm_flag
+	rtn
+mouse_enable_asm:
+	jam 1,mem_mouse_asm_flag
+	rtn
+
+//rega mouse_x, regb mouse_y, pdata refer
+mouse_pdata_greater_than_check:
+	isub rega,null
+	nbranch disable_blank,positive
+	isub regb,null
+	nbranch disable_blank,positive
+	branch enable_blank
+mouse_data_less_than_check:
+	isub rega,null
+	nrtn positive
+	isub regb,null
+	nrtn positive
+	branch enable_blank
+
+mouse_data_abs_check:
+	fetch 2,mem_mouse_x
+	call mouse_data_abs
+	copy pdata,rega
+	fetch 2,mem_mouse_y
+	call mouse_data_abs
+	copy pdata,regb
+	rtn
+
+/***********
+input: data_current
+output:pdata,abs
+************/
+mouse_data_abs:
+	store 2,mem_data_current
+	fetch 1,mem_data_current+1
+	beq 0xff,mouse_data_reversal
+	fetch 1,mem_data_current
+mouse_data_abs_store:
+	and_into 0xff,pdata
+	//output:pdata
+	rtn
+mouse_data_reversal:
+	fetch 2,mem_data_current
+	sub pdata,0,pdata
+	branch mouse_data_abs_store
+
+mouse_24g_long_sleep_param_update_timer:
+	arg mem_24g_long_sleep_param_update_timer,regc
+	arg mouse_24g_long_sleep_normal_param,regb
+	branch timer_single_step
+mouse_24g_long_sleep_normal_param:
+	fetch 4,mem_24g_long_sleep_set1
+	store 4,mem_24g_enter_hibernate
+	branch mouse_long_mult_init
+
+
+mouse_24g_long_sleep_set:
+	fetch 1,mem_24g_long_sleep_set_level
+	beq 0x00,mouse_24g_long_sleep_set_30ms
+	beq 0x01,mouse_24g_long_sleep_set_50ms
+	beq 0x02,mouse_24g_long_sleep_set_80ms
+	beq 0x03,mouse_24g_long_sleep_set_100ms
+mouse_24g_long_sleep_set_80ms:
+	setarg 0x0ea600
+mouse_24g_long_sleep_set_end:	
+	store 4,mem_24g_long_sleep_set1
+	rtn
+mouse_24g_long_sleep_set_30ms:
+	setarg 0x05e740
+	branch mouse_24g_long_sleep_set_end
+mouse_24g_long_sleep_set_50ms:
+	setarg 0x0927c0
+	branch mouse_24g_long_sleep_set_end
+mouse_24g_long_sleep_set_100ms:
+	setarg 0x124f80
+	branch mouse_24g_long_sleep_set_end
+
+mouse_24g_hibernate_set:
+	bpatch patch14_3,mem_patch14
+	jam 0,mem_mouse_pair_flag
+	jam 0,mem_24g_attempt_fail_flag
+	call g24_transmit_next_packet
+	setarg -1
+	store 8,mem_24g_enter_hibernate
+	setarg 0
+	store 7,mem_mouse_key
+	jam 1,mem_24g_shutdown_flag
+	call mouse_sensor_powerdown
+	call mouse_setgpio_hibernate
+	branch mouse_24g_long_sleep
+
+mouse_wakeup_24g:
+	bpatch patch14_4,mem_patch14
+	fetch 1,mem_24g_shutdown_flag
+	ncall mouse_wakeup_24g_from_long_sleep,blank
+	jam 0,mem_24g_shutdown_flag
+	rtn
+
+mouse_wakeup_24g_from_long_sleep:
+	jam 1,mem_mouse_pair_flag
+	call mouse_init_sensor_wakeup
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_WHEEL_WAKE_UP_CANCEL
+mouse_wheel_gpio_init:
+	fetcht 1,mem_whee_a_data_gpio
+	call device_gpio_config_input_pu
+	fetcht 1,mem_whee_b_data_gpio
+ 	branch device_gpio_config_input_pu	
+
+mouse_24g_transmit_start:
+	call mouse_24g_fast_conn_mode_check
+	fetch 1,mem_24g_shutdown_flag
+	nbranch mouse_24g_short_sleep,blank
+	branch g24_transmit_start_next
+
+mouse_24g_fast_conn_mode_check:
+	fetch 4,mem_24g_receiver_addr
+	fetcht 4,mem_24g_fast_conn_addr
+	isub temp,null
+	branch mouse_soft_agc_enable,zero
+mouse_soft_agc_disable:
+	jam 0xff,mem_gain_fix
+	rtn
+
+mouse_soft_agc_enable:
+	jam 0,mem_gain_fix
+	jam TX_POWER_FACTORY,mem_tx_power
+	rtn
+
+device_store_normal_tx_power:
+	fetch 1,mem_tx_power
+	store 1,mem_device_normal_tx_power
+	rtn
+
+device_fetch_normal_tx_power:
+	fetch 1,mem_device_normal_tx_power
+	store 1,mem_tx_power
+	rtn
+
+mouse_24g_stop:
+	set0 mark_24g,mark
+	jam STATE_24G_STOP,mem_24g_conn_sm
+	arg MOUSE_24G_PAIRING_FLAG,queue
+	branch mouse_disable_function_flag
+
+mouse_24g_start_mode:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_24G,mouse_24g_mode_setup_error
+	call mouse_device_24g_pair_led_config
+	call mouse_wakeup_from_power_check	// wake from hibernate :enble user
+	branch mouse_24g_reconn_dongle_start,user
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_AUTO_24G_PARING,mouse_24g_reconn_general_dongle
+	bbit0 MOUSE_ENABLE_24G_POWER_ON_PAIRING,mouse_24g_reconn_general_dongle
+	call mouse_key_check_once
+	and rega,0x07,pdata
+	fetcht 1,mem_mouse_commbination_key_24g
+	isub temp,null
+	branch mouse_24g_start_pair_mode,zero
+	branch mouse_24g_reconn_general_dongle
+
+mouse_24g_mode_setup_error:
+	fetch 1,mem_reconn_times
+	nbranch mouse_polling_device,blank
+	rtn
+
+mouse_24g_first_start_auto_pair_mode:
+	call mouse_wakeup_from_power_check
+	branch mouse_24g_first_start_reconn,user  	// wake from hibernate :enble user
+mouse_24g_reconn_general_dongle:	
+	jam MODE_24G_DEVICE,mem_device_flag
+	fetch 2,mem_device_24g_power_on_fast_conn_timer
+	store 2,mem_24g_reconn_timeout
+	jam FAST_CONN_AND_RECEIVER,mem_24g_reconn_type
+	branch g24_reconn_start
+
+mouse_24g_start_auto_pair:
+	fetch 2,mem_24g_pair_timeout_init
+	store 2,mem_24g_reconn_timeout
+	jam PAIR_AND_3_0_ADDR,mem_24g_reconn_type
+	branch g24_reconn_start
+
+mouse_24g_first_start_reconn:
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,mouse_24g_reconn_dongle_start
+	call mouse_bluetooth_fast_conn_disable
+mouse_24g_first_bluetooth_reconnect:
+	call mouse_24g_stop
+	jam MODE_BT_DEVICE1,mem_device_flag
+	call hid_device_select_reconn_device
+	branch mouse_le_fast_conn_judge
+
+mouse_24g_first_bb_event_reconn_timeout:
+	call mouse_wakeup_from_power_check
+	branch mouse_app_enter_hibernate,user
+	branch mouse_start_discovery
+
+mouse_24g_first_store_reconn_info:
+	call mouse_wakeup_from_power_check
+	rtn user
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_24G_FIRST_AUTO_PAIRING,mouse_store_device_info_delay
+	rtn
+
+mouse_24g_start_pair_mode:
+	call mouse_device_24g_pair_led_config
+	jam 0,mem_24g_reconn_type
+	arg MOUSE_24G_PAIRING_FLAG,queue
+	call mouse_enable_function_flag
+	setarg 0
+	store 2,mem_24g_reconn_timeout	
+	call mouse_stop_discovery
+mouse_24g_pair_mode_check:
+	jam TYPE_MS,mem_24g_data_type
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_KEYBOARD,g24_pair_start
+	jam TYPE_KB,mem_24g_data_type
+	branch g24_pair_start
+
+mouse_24g_attempt_fail:
+	call mouse_soft_agc_disable
+	call device_fetch_normal_tx_power
+	fetch 1,mem_24g_attempt_fail_flag
+	nbranch mouse_24g_hibernate_set,blank
+	fetch 1,mem_24g_reconn_type
+	beq FAST_CONN_AND_3_0_ADDR,mouse_24g_fast_conn_attempt_fail
+	beq FAST_CONN_AND_RECEIVER,mouse_24g_fast_conn_attempt_fail
+	beq PAIR_AND_3_0_ADDR,mouse_24g_auto_pair_attempt_fail
+	beq RECEIVER_AND_3_0_ADDR,mouse_reconn_dongle_attempt_fail
+mouse_24g_attempt_fail_enter_hibernate:
+	call mouse_24g_stop
+	fetch 1,mem_reconn_times
+	nbranch mouse_polling_device,blank
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,mouse_app_enter_hibernate
+	rtn
+
+mouse_24g_fast_conn_attempt_fail:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag 
+	bbit1 MOUSE_ENABLE_24G_FIRST_AUTO_PAIRING,mouse_24g_start_auto_pair
+	bbit1 MOUSE_ENABLE_AUTO_24G_PARING,mouse_24g_start_auto_pair
+	bbit0 MOUSE_ENABLE_24G_AUTO_PAIR_NERVER_BEEN_PAIRED,mouse_24g_reconn_dongle_start
+	fetch 4,mem_device_24g_addr		// auto pair first time
+	fetcht 4,mem_device_compare_addr
+	isub temp,null
+	branch mouse_24g_start_pair_mode,zero
+mouse_24g_reconn_dongle_start:
+	fetch 2,mem_24g_reconn_timeout_init
+	store 2,mem_24g_reconn_timeout
+	jam RECEIVER_AND_3_0_ADDR,mem_24g_reconn_type
+	branch g24_reconn_start
+
+mouse_24g_auto_pair_attempt_fail:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag 
+	bbit0 MOUSE_ENABLE_24G_FIRST_AUTO_PAIRING,mouse_24g_attempt_fail_enter_hibernate
+	fetch 1,mem_device_number
+	beq 1,mouse_24g_attempt_fail_enter_hibernate		//24g first mode and only 2.4g device
+	branch mouse_24g_first_bluetooth_reconnect
+
+mouse_reconn_dongle_attempt_fail:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_24G_FIRST_AUTO_PAIRING,mouse_24g_attempt_fail_enter_hibernate
+	bbit1 MOUSE_ENABLE_EEPROM,mouse_24g_attempt_fail_enter_hibernate
+	bbit1 MOUSE_ENABLE_FLASH,mouse_24g_attempt_fail_enter_hibernate
+	bbit1 MOUSE_ENABLE_OTP,mouse_24g_attempt_fail_enter_hibernate
+	branch mouse_24g_start_auto_pair
+	
+mouse_24g_attempt_success:
+	fetch 4,mem_24g_addr
+	store 4,mem_24g_receiver_addr
+	store 4,mem_device_24g_addr		// if need store 24g address to eeprom/flash,need get mem_24g_addr
+	call g24_ch_syncword_crc8_init
+	call mouse_no_data_timer_init
+	call mouse_device_poweron_led_config
+	call mouse_init_sensor_reset
+	jam 0,mem_mouse_long_mult_flag
+	jam 0,mem_24g_conn_sm
+	jam 0,mem_24g_reconn_type
+	fetch 4,mem_24g_receiver_addr
+	fetcht 4,mem_24g_fast_conn_addr
+	isub temp,null
+	rtn zero
+	call mouse_soft_agc_disable
+	call device_fetch_normal_tx_power
+	branch mouse_24g_first_store_reconn_info
+	
+mouse_24g_pairing_complete:
+	call mouse_soft_agc_disable
+	call device_fetch_normal_tx_power
+	call mouse_init_sensor_reset
+	call mouse_read_sensor_common
+	call mouse_device_poweron_led_config
+	call mouse_no_data_timer_init
+	arg MOUSE_24G_PAIRING_FLAG,queue
+	call mouse_disable_function_flag
+	setarg 0
+	store 2,mem_24g_pair_timeout
+	store 2,mem_24g_reconn_timeout
+	store 1,mem_24g_conn_sm
+	store 1,mem_mouse_move_flag
+	store 1,mem_24g_reconn_type
+
+
+	fetch 4,mem_24g_addr
+	store 4,mem_24g_receiver_addr
+	store 4,mem_device_24g_addr
+	branch mouse_store_device_info_delay
+
+mouse_24g_short_sleep_clear_wake:
+	call clear_wake
+	branch lpm_write_gpio_wakeup
+
+mouse_24g_package_data:
+	bpatch patch14_5,mem_patch14
+	rtnmark0 mark_24g
+	call mouse_motion
+	nrtn user
+	fetch 1,mem_mouse_24g_long_sleep_flag
+	jam 0,mem_mouse_24g_long_sleep_flag
+	ncall mouse_24g_short_sleep_clear_wake,blank	
+	
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_KEYBOARD,mouse_24g_mouse_package_data
+	fetch 1,mem_customer_key
+	nbranch mouse_24g_keyboard_package_data,blank
+mouse_24g_mouse_package_data:
+	call mouse_data_xy_release
+	fetch 1,mem_24g_data_type
+	bbit1 1,mouse_24g_mouse_package_data_now	// last package is keyboard data
+	fetcht 1,mem_24g_txbuf+1
+	fetch 1,mem_mouse_key
+	ior temp,pdata
+	store 1,mem_mouse_key
+	fetcht 1,mem_24g_txbuf+6
+	fetch 1,mem_mouse_z
+	iadd temp,pdata
+	store 1,mem_mouse_z
+	fetcht 1,mem_24g_txbuf+7
+	fetch 1,mem_mouse_tz
+	iadd temp,pdata
+	store 1,mem_mouse_tz	
+mouse_24g_mouse_package_data_now:	
+	jam TYPE_MS,mem_24g_data_type
+	arg 7,rega	//length
+	arg mem_mouse_key,regb //tx buff
+	fetch 2,mem_mouse_z
+	rtn blank
+	branch g24_transmit_by_interrupt_enable
+
+mouse_24g_keyboard_package_data:
+	jam TYPE_KB,mem_24g_data_type
+	arg 9,rega	//length
+	branch hid_device_24g_keyboard_package_data_set
+
+mouse_g24_retransmit:
+	fetch 1,mem_device_need_soft_reset
+	nrtn blank
+	call mouse_g24_retransmit_100ms_timer
+	branch g24_retransmit0
+
+mouse_g24_retransmit_100ms_timer:
+	arg 12,queue
+	call timer_check
+	nrtn blank
+mouse_g24_retransmit_100ms_timer_next:
+	call mouse_retransmit_select_device_by_pb_button
+	call mouse_retransmit_commbination_key_check
+	call mouse_dpi_check_once
+	call mouse_dpi_key_check_long_press
+mouse_g24_retransmit_100ms_timer_init:
+	arg 12,queue
+	setarg 160
+	branch timer_init
+	
+mouse_dpi_check_once:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_SELECT_DEVICE_BY_DPI_BUTTON
+	branch mouse_dpi_check
+
+/**************************************g24 new process start********************************************/
+mouse_24g_before_lpm_sleep:
+	call lpm_puchk_set_check
+	branch hid_device_before_lpm_set
+
+/**************************************g24 new process end********************************************/
+
+/*******************logo led*******************/
+mouse_logo_led_on_timer:
+	fetch 1,mem_mouse_logo_led_gpio
+	rtneq GPIO_DISABLE
+	fetch 2,mem_device_no_data_timer
+	rtn blank
+	fetch 2,mem_device_no_data_timeout
+	fetcht 2,mem_device_no_data_timer
+	isub temp,temp
+	fetch 2,mem_mouse_logo_led_on_time_init
+	isub temp,pdata
+	branch mouse_logo_led_on,positive
+mouse_logo_led_off:
+	fetcht 1,mem_mouse_logo_led_gpio
+	branch mouse_led_off
+mouse_logo_led_on:
+	fetcht 1,mem_mouse_logo_led_gpio
+	branch mouse_led_on
+	
+/*******************logo led end*******************/
+
+
+
+/*******************dpi led*******************/
+mouse_dpi_led_blink_delay_timer:
+	arg mem_mouse_dpi_led_delay_count,regc
+	arg mouse_dpi_led_blink_init,regb
+	branch timer_single_step
+	
+mouse_dpi_led_blink_init:
+	bpatch patch14_6,mem_patch14
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_DPI_LEVEL_4,mouse_dpi_led_blink_set_4_level
+mouse_dpi_led_blink_set_3_level:			//800-1200-1600
+	fetch 1,mem_mouse_dpi
+	beq MOUSE_DPI_LEVEL1,mouse_dpi_level_2_blink	//1200
+	beq MOUSE_DPI_LEVEL2,mouse_dpi_level_3_blink	//1600		
+	beq MOUSE_DPI_LEVEL3,mouse_dpi_level_1_blink	//800
+	rtn
+	
+mouse_dpi_led_blink_set_4_level:			//800-1000-1200-1600
+	fetch 1,mem_mouse_dpi
+	beq MOUSE_DPI_LEVEL1,mouse_dpi_level_3_blink		//1200
+	beq MOUSE_DPI_LEVEL2,mouse_dpi_level_4_blink		//1600
+	beq MOUSE_DPI_LEVEL3,mouse_dpi_level_1_blink		//800
+	beq MOUSE_DPI_LEVEL4,mouse_dpi_level_2_blink		//1000
+	rtn
+
+mouse_dpi_level_1_blink:
+	setarg 2
+	branch mouse_multi_dpi_led_blink_enable
+
+mouse_dpi_level_2_blink:
+	setarg 4
+	branch mouse_multi_dpi_led_blink_enable
+
+mouse_dpi_level_3_blink:
+	setarg 6
+	branch mouse_multi_dpi_led_blink_enable
+
+mouse_dpi_level_4_blink:
+	setarg 8
+	branch mouse_multi_dpi_led_blink_enable
+	
+mouse_multi_dpi_led_blink_enable:
+	store 1,mem_mouse_multi_led_blink_count
+	jam 4,mem_mouse_multi_led_blink_type
+	call mouse_multi_dpi_led_blink_timer_init	
+	jam MULTI_LED_BLINK,mem_mouse_multi_led_type
+	branch mouse_multi_led_enable
+
+mouse_dpi_led_blink_delay:
+//	fetch 2,mem_device_discovery_timer
+//	nrtn blank
+//	fetch 2,mem_24g_pair_timeout
+//	nrtn blank
+//	fetch 2,mem_24g_reconn_timeout
+//	nrtn blank
+//	fetch 1,mem_mouse_multi_led_powon_timer
+//	nrtn blank
+	fetch 1,mem_mouse_pair_flag
+	rtn blank
+	fetch 1,mem_mouse_dpi_led_delay_count_init
+	branch mouse_dpi_led_blink_init,blank
+	store 1,mem_mouse_dpi_led_delay_count  //delay 1s led blink
+	rtn
+
+/*******************dpi led end*******************/
+
+
+
+/*******************low voltage led*************************/
+
+mouse_check_dpi_blink:
+	disable user
+	fetch 1,mem_mouse_multi_led_blink_type		//04:dpi blink
+	sub pdata,4,null
+	nrtn zero
+	branch enable_user
+
+mouse_low_voltage_led_timer:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_LOW_LED
+	rtnbit0 MOUSE_LOW_VOLTAGE_FLAG
+//	fetch 2,mem_device_discovery_timer
+//	nrtn blank
+//	fetch 2,mem_24g_pair_timeout
+//	nrtn blank
+//	fetch 2,mem_24g_reconn_timeout
+//	nrtn blank
+//	fetch 1,mem_mouse_multi_led_powon_timer
+//	nrtn blank
+	fetch 1,mem_mouse_pair_flag
+	rtn blank
+	call mouse_check_dpi_blink		//need judge blink led=dpi? if led=dpi led->rtn
+	rtn user
+
+	fetch 1,mem_mouse_multi_low_led_blink_count
+	branch mouse_low_led_blink_count_init_judge,blank
+mouse_low_led_blink_timer:
+	fetcht 1,mem_adc_low_volatage_led_timer_count
+	increase 1,temp
+	storet 1,mem_adc_low_volatage_led_timer_count
+	fetch 1,mem_mouse_low_led_blink_timer
+	isub temp,null
+	ncall mouse_low_led_timer_count_clean,positive
+	fetch 1,mem_mouse_low_led_blink_half_timer
+	isub temp,null
+	nbranch mouse_low_voltage_led_off_judge,positive
+mouse_low_voltage_led_on_judge:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_LOW_FOR_LED,mouse_device_led_on
+mouse_low_voltage_led_on:
+	fetcht 1,mem_mouse_low_voltage_alarm_gpio 
+	branch mouse_led_on
+
+mouse_low_led_timer_count_clean:
+	jam 1,mem_adc_low_volatage_led_timer_count
+	fetch 1,mem_mouse_multi_low_led_blink_count	//blink count decrease
+	increase -1,pdata
+	store 1,mem_mouse_multi_low_led_blink_count
+mouse_low_voltage_led_off_judge:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_LOW_FOR_LED,mouse_device_led_off
+mouse_low_voltage_led_off:
+	fetcht 1,mem_mouse_low_voltage_alarm_gpio
+	branch mouse_led_off
+
+mouse_low_led_blink_count_init_judge:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_LOW_LED_BLINK_LIMIT,mouse_low_voltage_led_off_judge
+	call mouse_multi_low_led_blink_count_init
+	branch mouse_low_led_blink_timer
+	
+/*******************low voltage led end*************************/
+
+
+/*******************multi led start*************************/
+/***parm init****/
+
+mouse_device_multi_led_parm_init:
+	jam 0,mem_mouse_multi_led_blink_enable
+	call mouse_device_multi_led_all_off		//can be remove?
+	jam 0,mem_mouse_multi_led_blink_type
+	fetch 1, mem_mouse_low_led_blink_timer
+	rshift pdata,pdata
+	store 1,mem_mouse_low_led_blink_half_timer
+	rtn
+mouse_multi_low_led_blink_count_init:
+	fetch 1,mem_mouse_multi_lowled_blink_count_init
+	store 1,mem_mouse_multi_low_led_blink_count
+	rtn
+
+mouse_multi_led_blink_timer_init:
+	fetch 1,mem_mouse_multi_led_blink_type		//00:rtn	01:24g blink	02:le blink		03:reconn blink 	04:low blink	05:dpi blink
+	beq 1,mouse_device_24g_led_blink_timer_init
+	beq 2,mouse_device_le_discovery_led_blink_timer_init
+	beq 3,mouse_device_le_reconn_led_blink_timer_init
+mouse_multi_dpi_led_blink_timer_init:
+	fetch 1,mem_mouse_dpi_led_blink_timer_init
+mouse_store_multi_led_blink_timer:
+	store 1,mem_mouse_multi_led_blink_timer
+	rtn
+mouse_device_24g_led_blink_timer_init:
+	fetch 1,mem_mouse_multi_24gled_blink_timer_init
+	branch mouse_store_multi_led_blink_timer
+mouse_device_le_discovery_led_blink_timer_init:
+	fetch 1,mem_mouse_multi_le_discovery_blink_timer_init
+	branch mouse_store_multi_led_blink_timer
+mouse_device_le_reconn_led_blink_timer_init:
+	fetch 1,mem_mouse_multi_le_reconn_blink_timer_init
+	branch mouse_store_multi_led_blink_timer
+
+//===led poweron config===//
+mouse_device_poweron_led_config:	//power on
+	bpatch patch14_7,mem_patch14
+	fetch 1,mem_mouse_multi_led_powon_timer_init
+	store 1,mem_mouse_multi_led_powon_timer
+	jam MULTI_LED_ON,mem_mouse_multi_led_type
+mouse_multi_led_enable:
+	jam OFF,mem_mouse_multi_led_state
+	jam ON,mem_mouse_multi_led_blink_enable
+	rtn
+
+//===led blink config===//
+mouse_device_24g_pair_led_config:		//24g pair led config
+	bpatch patch15_0,mem_patch15
+//	call mouse_device_24g_led_blink_timer_init
+	call mouse_multi_led_blink_enable_init
+	jam 1,mem_mouse_multi_led_blink_type
+	fetch 1,mem_mouse_le_reconn_blink_limit
+	rtn blank
+	fetch 1,mem_mouse_multi_24gled_blink_count_init
+	branch mouse_device_led_blink_count_init
+
+mouse_device_le_reconn_led_config:		//le recon led config
+	bpatchx patch3a_3,mem_patch3a
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_BT_RECONN_LED_EFFECT
+//	call mouse_device_le_reconn_led_blink_timer_init
+	call mouse_multi_led_blink_enable_init
+	jam 3,mem_mouse_multi_led_blink_type
+	fetch 1,mem_mouse_le_reconn_blink_limit
+	rtn blank
+	fetch 1,mem_mouse_multi_le_reconn_blink_count_init
+mouse_device_led_blink_count_init:
+	store 1,mem_mouse_multi_led_blink_count
+	rtn	
+
+mouse_device_discovery_led_config:		//ble discovery led config
+//	call mouse_device_le_discovery_led_blink_timer_init
+	jam 0,mem_mouse_le_reconn_blink_limit
+	jam 2,mem_mouse_multi_led_blink_type
+mouse_multi_led_blink_enable_init:
+	bpatchx patch3a_4,mem_patch3a
+	jam 0x0a,mem_mouse_multi_led_blink_timer
+	jam 1,mem_mouse_multi_led_blink_enable
+	jam MULTI_LED_BLINK,mem_mouse_multi_led_type
+	branch mouse_device_multi_led_on
+
+
+//====multi timer====//
+mouse_led_multi_timer:
+	fetch 1,mem_mouse_multi_led_blink_enable
+	rtn blank
+	fetch 1,mem_mouse_multi_led_type
+	beq MULTI_LED_BLINK,mouse_multi_led_type_blink
+mouse_device_multi_led_type_on:
+	fetch 1,mem_mouse_multi_led_powon_timer
+	branch mouse_device_poweron_led_off,blank
+	increase -1,pdata
+	store 1,mem_mouse_multi_led_powon_timer
+	branch mouse_device_led_on
+
+mouse_device_poweron_led_off:
+ 	jam 0,mem_mouse_multi_led_blink_enable
+ 	jam 1,mem_mouse_pair_flag
+	call mouse_multi_low_led_blink_count_init
+	branch mouse_device_led_off
+
+mouse_multi_led_type_blink:
+	bpatch patch15_1,mem_patch15
+	fetch 1,mem_mouse_multi_led_blink_type	//00:rtn	01:24g blink	02:le blink		03:reconn blink 	04:low blink	05:dpi blink
+	rtn blank
+	beq 4,mouse_device_led_blink_limit	//dpi blink
+	branch mouse_device_led_blink_judge
+
+mouse_device_led_blink_judge:
+	fetch 1,mem_mouse_le_reconn_blink_limit
+	beq 1,mouse_device_led_blink_limit
+	branch mouse_multi_led_type_blink_next
+
+mouse_device_led_blink_limit:
+	fetch 1,mem_mouse_multi_led_blink_count
+	branch mouse_multi_led_off_judge, blank		//blink count =0
+mouse_multi_led_type_blink_next:	//blink no limit
+	arg mem_mouse_multi_led_blink_timer,regc
+	arg mouse_multi_led_type_blink_start,regb
+	branch timer_single_step
+	
+mouse_multi_led_type_blink_start:
+	fetch 1,mem_mouse_multi_led_blink_type
+	beq 4,mouse_multi_led_blink_count_decrease		//dpi blink
+	fetch 1,mem_mouse_le_reconn_blink_limit
+	beq 1,mouse_multi_led_blink_count_decrease
+mouse_multi_led_blink:
+	call mouse_multi_led_blink_timer_init
+	fetch 1,mem_mouse_multi_led_state
+	beq ON,mouse_multi_led_off_judge_next
+	branch mouse_multi_led_on_judge
+
+mouse_multi_led_blink_count_decrease:
+	fetch 1,mem_mouse_multi_led_blink_count	
+	increase -1,pdata
+	store 1,mem_mouse_multi_led_blink_count
+	branch mouse_multi_led_blink
+
+//=====led on/off interface=====//
+mouse_multi_led_on_judge:
+	fetch 1,mem_mouse_multi_led_blink_type
+	beq 4,mouse_multi_dpi_led_on_judge
+mouse_device_multi_led_on:
+	jam ON,mem_mouse_multi_led_state
+mouse_device_led_on:
+	bpatch patch15_2,mem_patch15
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,mouse_device_24g_led_on
+	beq MODE_BT_DEVICE1,mouse_device_bt1_led_on
+	beq MODE_BT_DEVICE2,mouse_device_bt2_led_on
+	rtn
+mouse_device_24g_led_on:
+	fetcht 1,mem_mouse_1io2led_multi_24gled
+	branch mouse_led_on	//by mouse.dat config
+mouse_device_bt1_led_on:
+	fetcht 1,mem_mouse_1io2led_multi_bt1led
+	branch mouse_led_on	//by mouse.dat config
+mouse_device_bt2_led_on:
+	fetcht 1,mem_mouse_1io2led_multi_bt2led
+mouse_led_on:
+	branch gpio_out_active	//by mouse.dat config
+
+mouse_led_off:
+	branch gpio_out_inactive	//by mouse.dat config
+
+mouse_multi_led_off_judge:
+	jam 0,mem_mouse_multi_led_blink_enable
+	jam 0,mem_mouse_multi_led_blink_type
+mouse_multi_led_off_judge_next:
+	fetch 1,mem_mouse_multi_led_blink_type
+	beq 4,mouse_multi_dpi_led_off_judge
+mouse_device_multi_led_off:
+	jam OFF,mem_mouse_multi_led_state
+mouse_device_led_off:
+	bpatch patch15_3,mem_patch15
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,mouse_device_24g_led_off
+	beq MODE_BT_DEVICE1,mouse_device_bt1_led_off
+	beq MODE_BT_DEVICE2,mouse_device_bt2_led_off
+	rtn
+mouse_device_24g_led_off:
+	fetcht 1,mem_mouse_1io2led_multi_24gled
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_1IO2LED,mouse_led_off
+	branch gpio_set_analog
+mouse_device_bt1_led_off:
+	fetcht 1,mem_mouse_1io2led_multi_bt1led
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_1IO2LED,mouse_led_off
+	branch gpio_set_analog
+mouse_device_bt2_led_off:
+	fetcht 1,mem_mouse_1io2led_multi_bt2led
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_1IO2LED,mouse_led_off
+	branch gpio_set_analog
+
+mouse_device_multi_led_all_off:		//dpi+low no
+	call mouse_device_24g_led_off
+	call mouse_device_bt1_led_off
+	call mouse_device_bt2_led_off
+	call mouse_low_voltage_led_off_judge
+	branch mouse_multi_dpi_led_off_judge
+
+mouse_multi_dpi_led_off_judge:
+	jam OFF,mem_mouse_multi_led_state
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_DPI_FOR_LED,mouse_device_multi_led_off
+mouse_multi_dpi_led_off:
+	fetcht 1,mem_mouse_dpi_gpio
+	branch mouse_led_off
+
+mouse_multi_dpi_led_on_judge:
+	jam ON,mem_mouse_multi_led_state
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_DPI_FOR_LED,mouse_device_multi_led_on
+mouse_multi_dpi_led_on:
+	fetcht 1,mem_mouse_dpi_gpio
+	branch mouse_led_on	//by mouse.dat config
+
+/*******************multi led end*************************/
+
+mouse_low_voltage_led_no_enter_lpm:	
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_LOW_VOLTAGE_FLAG
+	fetch 1,mem_adc_low_volatage_led_timer_count
+	fetcht 1,mem_mouse_low_led_blink_half_timer
+	sub pdata,temp,null
+	branch mouse_lpm_mode_clear,positive
+mouse_low_voltage_led_no_enter_lpm_next:	
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,g24_transmit_by_interrupt_exit_check
+	branch hid_device_enable_lpm
+
+g24_transmit_by_interrupt_exit_check:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag	
+	rtnbit1 MOUSE_ENABLE_24G_250Hz	
+	branch g24_transmit_by_interrupt_exit
+
+mouse_lpm_mode_clear:
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,g24_transmit_by_interrupt_enable
+	branch hid_device_disable_lpm
+
+
+mouse_store_signal_rssi:
+//	call rssi_hex2dec
+	fetch 1,mem_rssi
+	branch rssi_signal
+
+mouse_le_transmit:
+	call mouse_store_signal_rssi
+	branch power_ctrl_start
+
+mouse_set_lpm_mult:
+	fetch 2,mem_ui_state_map
+	rtnbit0 UI_STATE_BLE_CONNECTED
+mouse_le_set_lpm_mult:
+	fetch 1,mem_le_connect_status_flag
+	compare 3,pdata,3
+	nbranch disable_blank,true
+	call app_lpm_mult_enable
+	branch enable_blank
+
+mouse_24g_long_sleep:
+	bpatch patch15_4,mem_patch15
+	call g24_lpm_wait
+	nrtn user
+	jam 1,mem_mouse_24g_long_sleep_flag
+	call g24_setgpio_lpm_before
+	jam 0,mem_mouse_24g_sleep_miss
+	call mouse_24g_send_time_long_wake
+	fetch 1,mem_24g_shutdown_flag
+	ncall mouse_setgpio_hibernate,blank
+	fetch 8,mem_24g_enter_hibernate
+	branch g24_long_seep2	
+
+mouse_24g_short_sleep:
+	fetch 1,mem_mouse_sleep_deal_type
+	branch g24_short_sleep,blank
+	call g24_lpm_wait
+	nrtn user
+	fetch 1,mem_mouse_24g_sleep_miss
+	jam 0,mem_mouse_24g_sleep_miss
+	sub pdata,0,null
+	nbranch mouse_24g_short_sleep_last_miss,zero
+	fetcht 2,mem_24g_retransmit
+	sub temp,0,null
+	branch mouse_24g_short_sleep_default,zero
+
+	fetch 4,mem_mouse_24g_tx_time_last_delt
+	branch mouse_24g_short_sleep_default,blank
+mouse_24g_short_sleep_last_miss:
+	fetcht 4,mem_mouse_24g_sleep_miss_temp
+	isolate1 31,temp
+	branch mouse_24g_sub_miss_temp,true
+	fetch 4,mem_mouse_24g_tx_time_last_delt
+	iadd temp,pdata
+mouse_24g_short_sleep_notify:
+	fetcht 4,mem_mouse_24g_tsniff
+	isub temp,temp
+	storet 4,mem_mouse_24g_sleep_miss_temp
+	nbranch mouse_24g_short_sleep_long,positive
+	fetch 3,mem_24g_short_sleep_set
+	isub temp,pdata
+	nbranch mouse_24g_short_sleep_2,positive
+	arg 0x600,temp
+	isub temp,null
+	nbranch mouse_24g_short_sleep_2,positive
+mouse_24g_short_sleep2:
+	jam 250,mem_mouse_24g_tx_time_offset
+mouse_24g_short_sleep3:
+	call clk2lpo
+	storet 4,mem_sleep_counter
+	branch lpm_sleep
+
+mouse_24g_short_sleep_default:
+	call mouse_24g_miss_temp_clear
+	fetch 3,mem_24g_short_sleep_set
+	branch mouse_24g_short_sleep2
+
+mouse_24g_short_sleep_long:
+	sub temp,0,temp
+	fetch 3,mem_24g_short_sleep_set
+	iadd temp,pdata
+	branch mouse_24g_short_sleep2
+
+mouse_24g_miss_temp_clear:
+	setarg 0
+	store 4,mem_mouse_24g_sleep_miss_temp
+	rtn
+	
+mouse_24g_short_sleep_2:
+	jam 1,mem_mouse_24g_sleep_miss
+	rtn
+
+mouse_24g_sub_miss_temp:
+	arg -1,pdata
+	isub temp,regext
+	fetch 4,mem_mouse_24g_tx_time_last_delt
+	isub regext,pdata
+	branch mouse_24g_short_sleep_notify
+
+mouse_24g_transmit_callback:
+	call mouse_24g_send_time_check
+	branch mouse_wakeup_24g
+
+mouse_24g_send_time_check:
+	fetch 1,mem_mouse_sleep_deal_type
+	rtn blank
+	fetch 1,mem_24g_transmit_by_interrupt
+	beq G24_TX_TIMER_INT_ENABLE,mouse_24g_send_timer_first
+	fetch 1,mem_mouse_24g_tx_count
+	branch mouse_24g_send_timer_first,blank
+	copy clkn,pdata
+	fetcht 6,mem_mouse_24g_tx_time_last
+	store 6,mem_mouse_24g_tx_time_last
+	call clk_diff_rt
+	store 4,mem_mouse_24g_tx_time_last_delt
+
+	fetch 1,mem_mouse_24g_sleep_miss
+	nrtn blank
+	fetch 2,mem_24g_retransmit
+	nrtn blank
+	fetch 4,mem_mouse_24g_sleep_miss_temp
+	nrtn blank
+	
+	fetch 4,mem_mouse_24g_tx_time_last_delt
+	fetcht 4,mem_mouse_24g_tsniff
+	lshift temp,temp
+	isub temp,null
+	branch mouse_24g_send_time_long_wake,positive
+	
+	fetcht 5,mem_mouse_24g_tx_time_sum
+	iadd temp,pdata
+	store 5,mem_mouse_24g_tx_time_sum	
+	fetcht 1,mem_mouse_24g_tx_count
+	fetch 1,mem_mouse_24g_tx_time_sum_count
+	isub temp,null
+	branch mouse_24g_send_time_check_average,zero
+	increase 1,temp
+	storet 1,mem_mouse_24g_tx_count
+	rtn
+
+mouse_24g_send_time_check_average:
+	jam 1,mem_mouse_24g_tx_count
+	arg 0,temp
+	fetch 5,mem_mouse_24g_tx_time_sum
+	storet 5,mem_mouse_24g_tx_time_sum
+	fetcht 1,mem_mouse_24g_tx_time_sum_count
+	idiv temp
+	call wait_div_end
+  	quotient rega
+
+	fetch 4,mem_mouse_24g_tsniff
+	fetcht 1,mem_mouse_24g_tx_time_offset
+	isub temp,temp
+
+	copy rega,pdata
+	isub temp,pdata
+	branch mouse_24g_send_time_check_average_late,positive
+	sub pdata,0,pdata
+	
+	rshift2 pdata,pdata
+	fetcht 3,mem_24g_short_sleep_set
+	iadd temp,temp
+	bpatch patch15_5,mem_patch15
+	fetch 3,mem_mouse_24g_short_sleep_set_init
+	arg 0x1800,rega
+	iadd rega,pdata
+	isub temp,null
+	nbranch mouse_24g_send_time_check_average_min,positive
+mouse_24g_short_sleep_storet:
+	storet 3,mem_24g_short_sleep_set
+	rtn
+
+mouse_24g_send_time_check_average_late:
+	rshift2 pdata,temp
+	fetch 3,mem_24g_short_sleep_set
+	isub temp,temp
+	bpatch patch15_6,mem_patch15
+	fetch 3,mem_mouse_24g_short_sleep_set_init
+	arg 0x1800,rega
+	isub rega,pdata
+	isub temp,null
+	branch mouse_24g_send_time_check_average_min,positive
+	branch mouse_24g_short_sleep_storet
+
+mouse_24g_send_time_check_average_min:
+	store 3,mem_24g_short_sleep_set
+	rtn
+
+mouse_24g_send_timer_first:
+	jam 1,mem_mouse_24g_tx_count
+	copy clkn,pdata
+	store 6,mem_mouse_24g_tx_time_last
+	rtn
+
+mouse_24g_send_time_long_wake:
+	setarg 0
+	store 1,mem_mouse_24g_tx_count
+	store 5,mem_mouse_24g_tx_time_sum
+	rtn
+
+/******************************************USB MODE*******************************************/
+mouse_usb_check_enable:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_USB
+	jam USB_INTERFACE_REMOVE,mem_usb_vdd_status
+	rtn
+	
+mouse_usb_isr:
+	call mouse_usb_interface_check
+	fetch 1,mem_usb_vdd_status
+	rtnne USB_INTERFACE_INSERT
+	branch usb_isr
+
+mouse_usb_interface_check:
+	bpatch patch15_7,mem_patch15
+	fetcht 1,mem_usb_offline_check_gpio
+	call gpio_get_bit
+	nbranch mouse_usb_mode_disable,true
+mouse_usb_mode_enable:
+	fetch 1,mem_usb_vdd_status
+	rtneq USB_INTERFACE_INSERT
+	jam USB_INTERFACE_INSERT,mem_usb_vdd_status
+	setarg 0
+	store 2,mem_24g_pair_timeout
+	store 2,mem_24g_reconn_timeout
+	jam 0,mem_lpm_mode
+	call select_system_clk_12M_dpll
+	call mouse_24g_stop
+	call mouse_stop_bluetooth_mode
+	disable wake
+	call mouse_init_sensor_reset
+
+	setarg mouse_usb_config_param
+	store 2,mem_cb_usb_config
+	fetch 1,mem_usb_tx_interval_retention
+	store 1,mem_usb_tx_interval
+	arg mem_usb_vid_pid_retention,contr
+	arg mem_usb_vid_pid,contw
+	arg 9,loopcnt
+	call memcpy
+	branch usb_init
+
+mouse_usb_mode_disable:
+	fetch 1,mem_usb_keyboard_flag
+	rtneq USB_INTERFACE_REMOVE
+	jam USB_INTERFACE_REMOVE,mem_usb_vdd_status
+	jam 0,mem_usb_device_enumeration_endflag
+	jam 0,mem_usb_status
+	jam 0,mem_usb_state
+	fetch 2,core_clkoff
+	set1 CLOCK_OFF_USB,pdata
+	store 2,core_clkoff
+	jam 1,mem_lpm_mode
+	call select_system_clk_12M_dpll
+	branch mouse_soft_reset
+	
+mouse_usb_mode:
+	fetch 1,core_usb_addr
+	store 1,mem_usb_addr
+	rtnbit0 7
+	call mouse_usb_timer_check
+	nrtn user
+	call mouse_motion
+	nrtn user
+	fetch 1,core_usb_txbusy
+	rtnbit1 2
+	branch mouse_push_data_to_usb
+	
+mouse_push_data_to_usb:
+	fetch 1,core_usb_addr
+	rtnbit0 7
+	bpatch patch16_0,mem_patch16
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_KEYBOARD,hid_device_push_mouse_data_to_usb
+	fetch 1,mem_customer_key
+	beq 1,hid_device_push_keyboard_data_to_usb
+	branch hid_device_push_mouse_data_to_usb
+
+mouse_usb_timer_check:
+	call disable_user
+	fetcht 4,mem_btclk_sensor
+	copy clkn_bt,pdata
+	isub temp,null
+	ncall mouse_usb_timer_timeout,positive
+	copy pdata,regb
+	fetch 4,mem_btclk_sensor
+	fetcht 1,mem_wire_usb_interval
+	iadd temp,temp
+	copy regb,pdata
+	isub temp,null		
+	nrtn positive
+	set0 28,pdata
+	store 4,mem_btclk_sensor
+	branch enable_user
+
+mouse_usb_timer_timeout:
+	rtn zero
+	set1 28,pdata
+	rtn
+	
+mouse_usb_timer_init:
+	setarg 0
+	store 4,mem_btclk_sensor
+	rtn
+
+mouse_usb_config_param:
+	bpatch patch16_1,mem_patch16
+	call mouse_usb_config_kb_check
+	call mouse_usb_report_rate_set
+	call mouse_usb_config_param_setup
+mouse_usb_device_name_config:
+	fetch 1,mem_usb_device_name_retention
+	rtn blank
+	arg mem_usb_device_name_retention,contr
+	arg mem_string2,contw
+	arg 30,loopcnt
+	branch memcpy
+
+mouse_usb_config_kb_check:
+	jam DONGLE_KB_BIND_OTP_OFFECT,mem_usb_keyboard_flag
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_KEYBOARD
+	jam DONGLE_KB_BIND_SUCCESS,mem_usb_keyboard_flag
+	rtn
+
+mouse_usb_config_param_setup:
+	call usb_tx_interval_config
+	call dongle_usb_vid_pid_config
+mouse_usb_hid_icon_config:
+	fetch 1,mem_usb_keyboard_flag
+	branch dongle_usb_hid_icon_config+1
+
+mouse_usb_report_rate_set:
+	call mouse_usb_timer_init
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_USB_250,mouse_usb_report_rate_set_250hz
+	bbit1 MOUSE_ENABLE_USB_500,mouse_usb_report_rate_set_500hz
+	bbit1 MOUSE_ENABLE_USB_1000,mouse_usb_report_rate_set_1000hz
+mouse_usb_report_rate_set_125hz:
+	jam 32,mem_wire_usb_interval
+	rtn
+mouse_usb_report_rate_set_250hz:
+	jam 16,mem_wire_usb_interval
+	rtn
+mouse_usb_report_rate_set_500hz:
+	jam 8,mem_wire_usb_interval
+	rtn
+mouse_usb_report_rate_set_1000hz:
+	jam 4,mem_wire_usb_interval
+	rtn
+
+
+/*****************close define  COMPILE_MOUSE**********/
+else
+
+endif
+
+
+
Index: program/app_rec.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/app_rec.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/app_rec.prog	(working copy)
@@ -0,0 +1,2084 @@
+
+
+ifdef COMPILE_REMOTE_CONTROL
+rec_cb_function:
+	setarg rec_process_idle
+	store 2,mem_cb_idle_process
+
+//	setarg rec_2_5ms_timer
+//	store 2,mem_rec_cb_timer
+	rtn
+
+
+rec_process_idle:
+	call rec_ui_timer_check
+	rtn
+
+rec_ui_timer_check:
+	bpatch patch16_2,mem_patch16
+	arg 0,rega
+	fetcht 4,mem_rec_ui_timer_btclk
+	copy clkn_bt,regb
+	copy regb,pdata
+	isub temp,null
+	ncall ui_timer_timeout,positive
+rec_ui_timer_check_loop:
+	copy regb,pdata
+	increase 8,temp    //8btclk = 2.5ms
+	isub temp,null
+	nbranch rec_ui_timer_check_end,positive
+	increase 1,rega   //increase 1 every 100ms count
+	and rega,0x0f,pdata
+	nbranch rec_ui_timer_check_loop,blank
+	arg 0,rega  	//reset timer if it's longer than 1.5s between 2 checks
+	call rec_ui_timer_check_send_evt
+rec_ui_timer_init:
+	storer clkn_bt,4,mem_rec_ui_timer_btclk
+	rtn
+rec_ui_timer_check_end:
+	copy rega,pdata
+	rtn blank
+	increase -8,temp    //8btclk = 2.5ms
+	set0 28,temp
+	storet 4,mem_rec_ui_timer_btclk
+rec_ui_timer_check_send_evt:
+	store 1,mem_rec_ui_timer_count
+rec_evt_timer_loop:
+	fetch 1,mem_rec_ui_timer_count
+	rtn blank
+	increase -1,pdata
+	store 1,mem_rec_ui_timer_count
+	fetch 2,mem_rec_cb_timer
+	call callback_func
+	branch rec_evt_timer_loop
+
+/*
+rec_2_5ms_timer:
+	call rec_tscan_key_check_2_5ms_timer
+	rtn
+
+rec_tscan_key_check_2_5ms_timer:
+	arg mem_rec_tscan_timer,regc
+	arg rec_tscan_key_start,regb
+	branch timer_single_step
+rec_tscan_key_start:
+	call rec_set_tscan_timeout
+	call rec_tscan
+	branch rec_tscan_key_send	
+	
+rec_set_tscan_timeout:
+	fetch 1,mem_rec_tscan_timeout
+	store 1,mem_rec_tscan_timer
+	rtn
+*/
+
+
+////////////////////////////////////////////////////////////////TSACN START///////////////////////////////////////////////////////	
+
+rec_tscan:
+	bpatch patch16_3,mem_patch16
+	fetch 1,mem_rec_tscan_row_nums
+	rtn blank
+	jam 0,mem_rec_tscan_col_scanned
+	jam 0,mem_rec_tscan_sequence
+	call rec_gpio_wakeup_disable
+rec_tscan_gnd_process:
+	call rec_tscan_get_gndkey_state	
+	fetch 1,mem_rec_tscan_gndkey_need_send_flag
+	nrtn blank
+	call rec_tscan_gpio_set_before_lpm
+	call lpm_write_gpio_wakeup
+rec_tscan_process:
+	bpatch patch16_4,mem_patch16
+	call rec_tscan_col_state_init
+	call rec_tscan_row_state_init
+	call rec_tscan_get_row_state
+	call rec_tscan_pull_up_current_col_gpio
+	branch rec_tscan_col_state_next_gpio_check
+
+/*
+ * @brief: gpio config output low
+ * @param: none
+ * @return: none
+ */
+rec_tscan_col_state_init:	
+	arg mem_rec_tscan_col_gpio,rega
+	fetch 1,mem_rec_tscan_col_scanned
+	iadd rega,rega
+	storer rega,2,mem_rec_tscan_col_gpio_ptr
+	ifetcht 1,rega
+	branch gpio_config_output
+
+/*
+ * @brief: gpio config input pull up
+ * @param: none
+ * @return: none
+ */
+rec_tscan_row_state_init:	
+	fetch 1,mem_rec_tscan_row_nums
+	rtn blank
+	fetcht 1,mem_rec_tscan_col_scanned
+	isub temp,pdata
+	iforce loopcnt
+	arg mem_rec_tscan_row_gpio,rega
+	fetch 1,mem_rec_tscan_col_scanned
+	iadd rega,rega
+rec_tscan_row_gpio_config_input_pull_up:
+	ifetch 1,rega
+	call rec_gpio_weak_pullup
+	increase 1,rega
+	loop rec_tscan_row_gpio_config_input_pull_up
+	rtn
+
+
+rec_tscan_get_row_state:
+	jam 0,mem_rec_tscan_row_scanned
+	fetch 1,mem_rec_tscan_row_nums
+	fetcht 1,mem_rec_tscan_col_scanned
+	isub temp,pdata
+	store 1,mem_rec_tscan_row_scan_loop_count
+
+	arg mem_rec_tscan_row_gpio,rega
+	fetch 1,mem_rec_tscan_col_scanned
+	iadd rega,rega
+rec_tscan_get_row_state_loop:
+	ifetcht 1,rega
+	storet 1,mem_rec_gpio_bit_check
+	call rec_tscan_debounce
+	nrtn user
+
+	call rec_tscan_record_key_coord,true
+	increase 1,rega
+	fetch 1,mem_rec_tscan_row_scanned
+	increase 1,pdata
+	store 1,mem_rec_tscan_row_scanned
+	
+	fetcht 1,mem_rec_tscan_sequence
+	increase 1,temp
+	storet 1,mem_rec_tscan_sequence
+	
+	fetcht 1,mem_rec_tscan_row_scan_loop_count
+	isub temp,null
+	nbranch rec_tscan_get_row_state_loop,positive
+
+	fetch 2,mem_rec_tscan_record_row
+	rtn blank
+	store 2,mem_rec_tscan_record_now
+	
+	setarg 0
+	store 2,mem_rec_tscan_record_row
+	rtn
+
+rec_tscan_record_key_coord:
+	storer rega,2,mem_rec_tscan_current_gpio_ptr
+	
+//	call rec_tscan_get_gndkey_state	//check ghost key
+//	fetch 1,mem_rec_tscan_gndkey_need_send_flag
+//	nrtn blank
+
+	fetch 1,mem_rec_tscan_row_scanned
+	copy pdata,queue
+	fetcht 1,mem_rec_tscan_record_row
+	qset1 temp
+	storet 1,mem_rec_tscan_record_row
+
+	fetch 1,mem_rec_tscan_col_scanned
+	copy pdata,queue
+	fetcht 1,mem_rec_tscan_record_col
+	qset1 temp
+	storet 1,mem_rec_tscan_record_col
+
+	call rec_tscan_combin_key_num_output
+
+	fetchr rega,2,mem_rec_tscan_current_gpio_ptr
+	rtn
+
+rec_tscan_combin_key_num_output:
+	fetcht 2,mem_rec_tscan_record_row
+	arg mem_rec_tscan_key_nums_list,rega
+rec_tscan_combin_key_num_loop:
+	ifetch 2,rega
+	rtn blank
+	isub temp,null
+	call rec_tscan_output_combin_key_num,zero
+	increase 2,rega
+	branch rec_tscan_combin_key_num_loop
+
+rec_tscan_output_combin_key_num:
+	fetchr queue,1,mem_rec_tscan_sequence
+	fetch 8,mem_rec_tscan_key_num_bit
+	qset1 pdata
+	store 8,mem_rec_tscan_key_num_bit	
+	rtn
+
+rec_tscan_pull_up_current_col_gpio:
+	fetch 2,mem_rec_tscan_col_gpio_ptr
+	ifetch 1,pdata
+	branch rec_gpio_weak_pullup
+
+rec_tscan_col_state_next_gpio_check:
+	fetch 1,mem_rec_tscan_col_scanned
+	increase 1,pdata
+	store 1,mem_rec_tscan_col_scanned
+	fetcht 1,mem_rec_tscan_col_nums
+	isub temp,null
+	nbranch rec_tscan_process,positive
+	fetch 2,mem_rec_tscan_record_now
+	branch rec_tscan_key_up,blank
+rec_tscan_key_down:
+	store 2,mem_rec_tscan_record_temp
+	fetch 1,mem_rec_tscan_key_need_send_flag
+	nbranch rec_tscan_key_value_clear,blank
+	fetch 1,mem_rec_tscan_key_state
+	rtneq KEY_DOWN
+	jam KEY_DOWN,mem_rec_tscan_key_state	
+	jam 1,mem_rec_tscan_key_need_send_flag
+	bpatch patch16_5,mem_patch16
+	call rec_tscan_key_num_output
+	fetch 2,mem_ui_state_map
+	rtnbit1 UI_STATE_BLE_ADV
+	branch rec_led_start_on
+
+rec_tscan_key_up:
+	fetch 1,mem_rec_tscan_key_state
+	rtneq KEY_UP
+	jam KEY_UP,mem_rec_tscan_key_state
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BLE_ADV,rec_tscan_key_up_send
+	fetch 1,mem_rec_nec_learn_state
+	nbranch rec_tscan_key_up_send,blank
+	call rec_led_start_off
+rec_tscan_key_up_send:
+	setarg 0
+	store 8,mem_rec_tscan_key_num_bit
+	store 1,mem_rec_tscan_key_need_send_flag
+rec_tscan_key_up_config:
+	jam 0,mem_rec_tscan_current_key_num
+	arg mem_rec_key_release_le,regc
+	branch push_buffer_in_queue
+
+rec_tscan_key_num_output:
+	call rec_tscan_key_num_check
+rec_tscan_record_init:
+	setarg 0
+	store 2,mem_rec_tscan_record_temp
+	rtn
+
+rec_tscan_key_value_clear:
+	setarg 0
+	store 2,mem_rec_tscan_record_now
+	rtn
+
+rec_tscan_get_gndkey_state:
+	arg 0,rega
+	arg 0,regb
+	force 0,regext_index
+	fetch 1,mem_rec_tscan_gpio_nums
+	iforce loopcnt
+	arg mem_rec_tscan_col_gpio,regc
+rec_tscan_get_gndkey_loop:
+	call rec_save_regc
+	call rec_save_rega
+	ifetch 1,regc
+	call rec_gpio_weak_pullup
+	call rec_rescue_rega
+	call rec_rescue_regc
+	ifetcht 1,regc
+	storet 1,mem_rec_gpio_bit_check
+	call rec_tscan_debounce
+	nrtn user
+
+	copy regb,queue
+	call rec_tscan_store_gndkey_press_state,true
+	ncall rec_tscan_store_gndkey_release_state,true
+	increase 1,regc
+	increase 1,regb
+	loop rec_tscan_get_gndkey_loop
+	copy rega,pdata
+	branch rec_tscan_gndkey_up,blank
+rec_tscan_gndkey_down:
+	store 1,mem_rec_tscan_gndkey_record_temp
+	fetch 1,mem_rec_tscan_gndkey_state
+	rtneq KEY_DOWN
+	jam KEY_DOWN,mem_rec_tscan_gndkey_state
+	jam 1,mem_rec_tscan_gndkey_need_send_flag
+	bpatch patch16_6,mem_patch16
+	call rec_tscan_gndkey_num_output
+	fetch 2,mem_ui_state_map
+	rtnbit1 UI_STATE_BLE_ADV
+	branch rec_led_start_on
+
+rec_tscan_gndkey_up:
+	fetch 1,mem_rec_tscan_gndkey_state
+	rtneq KEY_UP
+	jam KEY_UP,mem_rec_tscan_gndkey_state
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BLE_ADV,rec_tscan_gndkey_up_send
+	fetch 1,mem_rec_nec_learn_state
+	nbranch rec_tscan_gndkey_up_send,blank
+	call rec_led_start_off
+rec_tscan_gndkey_up_send:
+	jam 0,mem_rec_tscan_gndkey_need_send_flag
+	branch rec_tscan_key_up_config
+
+rec_tscan_gndkey_num_output:
+	call rec_tscan_gndkey_num_check
+rec_tscan_gndkey_record_param_init:
+	jam 0,mem_rec_tscan_gndkey_record_temp
+	rtn
+
+rec_tscan_gndkey_num_check:
+	fetcht 1,mem_rec_tscan_gndkey_record_temp
+	arg mem_rec_tscan_gndkey_nums_list,rega
+	arg 0,regb
+rec_tscan_gndkey_num_loop:
+	ifetch 1,rega
+	rtn blank
+	isub temp,null
+	branch rec_tscan_output_gndkey_num,zero
+	increase 1,rega
+	increase 1,regb
+	branch rec_tscan_gndkey_num_loop
+
+rec_tscan_store_gndkey_press_state:
+	qset1 rega
+	rtn
+
+rec_tscan_store_gndkey_release_state:
+	qset0 rega
+	rtn
+
+
+rec_gpio_bit_first_set:
+	jam 1,mem_rec_gpio_bit_first
+	rtn
+rec_gpio_bit_second_set:
+	jam 1,mem_rec_gpio_bit_second
+	rtn
+rec_tscan_debounce:
+	call disable_user
+	jam 0,mem_rec_gpio_bit_first
+	jam 0,mem_rec_gpio_bit_second
+	fetcht 1,mem_rec_gpio_bit_check
+	call gpio_get_bit
+	call rec_gpio_bit_first_set,true
+	nop 1200
+	fetcht 1,mem_rec_gpio_bit_check
+	call gpio_get_bit
+	call rec_gpio_bit_second_set,true
+	fetch 1,mem_rec_gpio_bit_first
+	fetcht 1,mem_rec_gpio_bit_second
+	isub temp,null
+	nrtn zero
+	branch enable_user
+	
+
+//pdata: gpio number 
+rec_gpio_weak_pullup:	
+	store 1,mem_rec_gpio_for_wake_pullup
+	call rec_gpio_set_input
+	fetch 1,mem_rec_gpio_for_wake_pullup	
+rec_gpio_set_lpm_weak_pullup:
+	arg 0x01,regc
+	div pdata,2
+	call wait_div_end
+	quotient temp
+	remainder pdata
+	ncall rec_gpio_set_0x10_regc,blank	
+	copy temp,pdata
+	arg core_gpio_wakeup_cfg,contw
+	until null,lpo_edge
+	until null,lpo_edge
+	iadd contw,contw
+	ifetch 1,contw
+	ior regc,pdata
+	istore 1,contw
+	branch lpm_write_wait
+	
+rec_gpio_set_0x10_regc:
+	arg 0x10,regc
+	rtn
+
+//pdata: gpio number
+rec_gpio_set_input:
+	or pdata,0x80,pdata
+	arg gpcfg_input,temp
+	branch gpio_config_function
+	
+rec_gpio_wakeup_disable:
+	branch lpm_config_puchk_disable
+
+rec_save_regc:
+	copy regc,pdata
+	branch rec_save_reg
+
+rec_rescue_regc:
+	call rec_rescue_reg
+	copy pdata,regc
+	rtn
+
+rec_save_rega:
+	copy rega,pdata
+	branch rec_save_reg
+
+rec_rescue_rega:
+	call rec_rescue_reg
+	copy pdata,rega
+	rtn
+
+rec_save_reg:
+ 	increase 1,regext_index
+ 	copy pdata,regext
+ 	rtn
+
+rec_rescue_reg:
+ 	copy regext,pdata
+ 	increase -1,regext_index
+ 	rtn	
+
+rec_tscan_gpio_set_before_lpm:
+	call rec_tscan_gpio_config_high_impedance
+	call rec_tscan_gpio_config_tri_angle_wakeup
+	call rec_gpio_wakeup_disable
+rec_gpio_wakeup_enable:
+	setarg 0xf0
+	store 1,core_puwakeup
+	branch lpm_write_wait
+
+rec_tscan_gpio_config_high_impedance:
+	fetch 1,mem_rec_tscan_gpio_nums
+	arg mem_rec_tscan_col_gpio,rega
+	branch rec_gpio_config_high_impedance	
+
+rec_tscan_gpio_config_tri_angle_wakeup:
+	fetchr regb,1,mem_rec_gpio_wakeup_source
+	fetch 1,mem_rec_tscan_gpio_nums
+	arg mem_rec_tscan_col_gpio,rega
+	branch rec_gpio_wakeup_config
+
+/*
+ * @brief: gpio config high-impedance
+ * @param: rega: gpio buff ptr, pdata: buff length
+ * @return: none
+ */
+rec_gpio_config_high_impedance:	
+	copy pdata,loopcnt
+rec_high_impedance_loop:
+	ifetcht 1,rega
+	call gpio_set_high_impedance
+	increase 1,rega
+	loop rec_high_impedance_loop
+	rtn
+
+
+/*
+ * @brief: gpio wakeup config
+ * @param: rega: gpio buff ptr, pdata: buff length, regb: wakeup source
+ * @return: none
+ */
+rec_gpio_wakeup_config:
+	copy pdata,loopcnt
+rec_gpio_wakeup_config_loop:
+	ifetcht 1,rega
+	rshift temp,pdata
+	arg mem_gpio_wakeup_cfg,contw
+	iadd contw,contw
+	call rec_gpio_wakeup_addr_search
+	ifetcht 1,contw
+	ior temp,pdata
+	istore 1,contw
+	increase 1,rega
+	loop rec_gpio_wakeup_config_loop
+	rtn
+
+rec_gpio_wakeup_addr_search:
+	copy regb,pdata
+	isolate0 0,temp
+	rtn true
+	lshift4 pdata,pdata
+	rtn
+
+rec_tscan_output_gndkey_num:
+	bpatch patch16_7,mem_patch16
+	copy regb,pdata
+	fetcht 1,mem_rec_gnd_key_offset
+	iadd temp,pdata
+rec_tscan_output_key_map:
+	arg mem_rec_key_map,regc
+	iadd regc,regc
+	ifetch 1,regc
+	store 1,mem_rec_tscan_current_key_num
+	increase -1,pdata
+	mul32 pdata,MAX_QUEUE_UNIT,pdata
+	arg mem_rec_key_press_le,regc
+	iadd regc,regc
+	branch rec_push_buffer_in_queue
+
+rec_tscan_key_num_check:
+	fetcht 2,mem_rec_tscan_record_temp
+	arg mem_rec_tscan_key_nums_list,rega
+	arg 0,regb
+rec_tscan_key_num_loop:
+	ifetch 2,rega
+	rtn blank
+	isub temp,null
+	branch rec_tscan_output_key_num,zero
+	increase 2,rega
+	increase 1,regb
+	branch rec_tscan_key_num_loop
+
+rec_tscan_output_key_num:
+	bpatch patch17_0,mem_patch17
+	copy regb,pdata
+	branch rec_tscan_output_key_map
+
+rec_push_buffer_in_queue:
+	bpatch patch17_1,mem_patch17
+	fetch 1,mem_rec_le_connect_state
+	nbranch rec_puch_buffer_in_queue_check,blank
+rec_push_buffer_in_queue_end:
+	call rec_key_type_select
+	branch push_buffer_in_queue
+
+rec_puch_buffer_in_queue_check:
+	fetch 1,mem_rec_le_enable_notify
+	rtn blank
+	branch rec_push_buffer_in_queue_end
+
+rec_key_type_select:
+	ifetch 1,regc
+	increase 1,regc
+	beq KEYPAD_TYPE_CONSUMER,rec_set_key_type_consumer
+	beq KEYPAD_TYPE_MOUSE,rec_set_key_type_mouse
+	beq KEYPAD_TYPE_KEYPAD,rec_set_key_type_keypad
+	beq KEYPAD_TYPE_NEC,rec_set_key_type_nec
+	rtn
+rec_set_key_type_consumer:
+	jam KEYPAD_TYPE_CONSUMER,mem_rec_keypad_type
+	rtn
+rec_set_key_type_mouse:
+	jam KEYPAD_TYPE_MOUSE,mem_rec_keypad_type
+	rtn
+rec_set_key_type_keypad:
+	jam KEYPAD_TYPE_KEYPAD,mem_rec_keypad_type
+	rtn
+rec_set_key_type_nec:
+	jam KEYPAD_TYPE_NEC,mem_rec_keypad_type
+	rtn
+
+rec_tscan_key_send:
+	bpatch patch17_2,mem_patch17
+	call queue_pop_one_byte
+	nrtn user
+	store 1,mem_rec_keypad_fun
+	fetch 1,mem_rec_tscan_current_key_num
+	call rec_nec_disable,blank
+rec_tscan_send_keypad:	
+	fetch 2,mem_ui_state_map
+	bbit0 UI_STATE_BLE_CONNECTED,rec_send_nec_keypad
+	fetch 1,mem_rec_keypad_type
+	beq KEYPAD_TYPE_CONSUMER,rec_le_send_consumer
+	beq KEYPAD_TYPE_MOUSE,rec_le_send_mouse
+	beq KEYPAD_TYPE_KEYPAD,rec_le_send_keyboard
+	beq KEYPAD_TYPE_NEC,rec_send_nec_keypad
+	rtn
+
+rec_send_nec_keypad:	
+	fetch 1,mem_rec_tscan_current_key_num
+	beq 0x00,rec_nec_disable
+	fetch 1,mem_rec_keypad_fun
+	pincrease -1
+	mul32 pdata,3,pdata
+	arg mem_rec_key_nec_value_list,temp
+	iadd temp,contr
+	ifetch 2,contr
+	ifetcht 1,contr
+	branch rec_nec_6122_start
+
+rec_le_send_consumer:
+	call le_fifo_check_nearly_full
+	nrtn blank
+	fetch 1,mem_rec_keypad_fun
+	pincrease -1
+	mul32 pdata,3,pdata
+	arg mem_rec_key_consumer_value_list,temp
+	iadd temp,contr
+	arg 3,loopcnt
+	arg mem_pdatatemp,contw	
+	call memcpy
+	jam 3,mem_rec_le_data_len
+	fetcht 2,mem_rec_report_id2_handle
+rec_le_send_data:
+	fetch 1,mem_rec_le_enable_notify
+	rtn blank
+	fetchr rega,1,mem_rec_le_data_len
+	call le_att_malloc_tx_notify
+	fetcht 1,mem_rec_le_data_len
+	copy temp,loopcnt
+	arg mem_pdatatemp,contr
+	branch memcpy
+
+
+rec_le_send_mouse:
+	call le_fifo_check_nearly_full
+	nrtn blank
+	fetch 1,mem_rec_keypad_fun
+	pincrease -1
+	mul32 pdata,4,pdata
+	arg mem_rec_key_mouse_value_list,temp
+	iadd temp,contr
+	arg 4,loopcnt
+	arg mem_pdatatemp,contw	
+	call memcpy
+	jam 4,mem_rec_le_data_len
+	fetcht 2,mem_rec_report_id4_handle
+	branch rec_le_send_data
+
+rec_le_send_keyboard:
+	call le_fifo_check_nearly_full
+	nrtn blank
+	fetch 1,mem_rec_keypad_fun
+	pincrease -1
+	mul32 pdata,10,pdata
+	arg mem_rec_key_keyboard_value_list,temp
+	iadd temp,contr
+	ifetch 2,contr
+rec_le_fill_standard_key_data:	
+	arg 8,loopcnt
+	arg mem_pdatatemp,contw	
+	call memcpy
+	jam 8,mem_rec_le_data_len
+	fetcht 2,mem_rec_report_id1_handle
+	branch rec_le_send_data
+
+
+////////////////////////////////////////////////////////////////TSACN END///////////////////////////////////////////////////////
+
+
+////////////////////////////////////////////////////////////////LED START///////////////////////////////////////////////////////
+
+rec_led_start_on:
+	arg 0,rega
+	branch ui_led_on_global
+
+rec_led_start_off:
+	arg 0,rega
+	branch ui_led_off_global
+
+/*
+rec_led_le_pair:
+	arg mem_rec_le_pair_led_style,regc
+	branch rec_led_style_config
+
+rec_led_le_reconn:
+	arg mem_rec_le_reconn_led_style,regc
+	branch rec_led_style_config
+
+rec_led_adc_low:
+	arg mem_rec_adc_low_led_style,regc
+rec_led_style_config:
+	arg 0,rega
+	call calc_curr_struct_prt
+	arg 7,loopcnt
+	branch ui_led_set_style_global+2
+
+rec_led_stop_blink:
+	arg 0,rega
+	branch ui_led_blink_stop_global
+
+rec_led2_start_blink:
+	arg mem_rec_led2_style,regc
+	arg 1,rega
+	branch rec_led_style_config+1
+
+rec_led2_stop_blink:
+	arg 1,rega
+	branch ui_led_blink_stop_global
+
+rec_led2_start_on:
+	arg 1,rega
+	branch ui_led_on_global
+
+rec_led2_start_off:
+	arg 1,rega
+	branch ui_led_off_global
+*/
+////////////////////////////////////////////////////////////////LED END///////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////////NEC SEND START///////////////////////////////////////////////////////
+
+  /*
+ * @brief: send nec data
+ * @param: pdata: usercode, temp: datacode
+ * @return: none
+ */
+rec_nec_send_userdata_6122:
+	store 2,mem_rec_nec_usercode
+	storet 1,mem_rec_nec_datacode
+	force 0,regext_index
+	call rec_nec_init_6122
+	call rec_nec_send_boot_6122
+	fetch 1,mem_rec_nec_usercode
+	call rec_nec_send_byte_6122
+	fetch 1,mem_rec_nec_usercode+1
+	call rec_nec_send_byte_6122
+	fetch 1,mem_rec_nec_datacode
+	call rec_nec_send_byte_6122
+	fetch 1,mem_rec_nec_datacode
+	invert pdata,pdata
+	call rec_nec_send_byte_6122
+	setarg 570
+	call rec_nec_carrier
+	setarg 1
+	branch rec_nec_empty
+
+rec_nec_init_6122:
+	setarg 0
+	call pwm_init+3
+	call pwm_disable
+	call rec_pwm_duty_cycle_set
+	fetch 1,mem_rec_nec_send_gpio
+	branch pwm_enable	
+
+
+  /*
+ * @brief: pwm duty config
+ * @param: rega: pcnt, regb: ncnt, pdata: pwm channel select
+ * @return: none
+ */
+rec_pwm_duty_cycle_set:
+	arg 157,rega
+	arg 157,regb
+	arg 0,pdata	
+	call pwm_duty_cycle_set
+	jam 0,core_pwm_en
+	rtn
+
+
+  /*
+ * @brief: send nec bootdata
+ * @param: none
+ * @return: none
+ */
+rec_nec_send_boot_6122:
+	setarg 9000
+	call rec_nec_carrier
+	setarg 4500
+rec_nec_empty:	
+	jam 0,core_pwm_en
+	branch rec_nec_delay_us
+
+
+  /*
+ * @brief: nec carrier time
+ * @param: pdata: time, unit 1us
+ * @return: none
+ */
+rec_nec_carrier:	
+	jam 1,core_pwm_en
+	branch rec_nec_delay_us
+
+
+  /*
+ * @brief: delay timer
+ * @param: pdata: delay time
+ * @return: none
+ */
+rec_nec_delay_us:
+	rtn blank	
+rec_nec_delay_us_loop:
+	increase -1,pdata
+	nop 8
+	nbranch rec_nec_delay_us_loop,blank
+	rtn	
+
+
+  /*
+ * @brief: send nec one byte
+ * @param: pdata: nec data
+ * @return: none
+ */
+rec_nec_send_byte_6122:
+	arg 8,loopcnt
+rec_nec_send_byte_loop_6122:
+	call rec_save_reg
+	call rec_nec_send_bit_6122
+	call rec_rescue_reg
+	rshift pdata,pdata
+	loop rec_nec_send_byte_loop_6122
+	rtn
+
+  /*
+ * @brief: send nec bit check
+ * @param: pdata: nec data
+ * @return: none
+ */
+rec_nec_send_bit_6122:
+	bbit0 0,rec_nec_send_bit0_6122
+	bbit1 0,rec_nec_send_bit1_6122	
+	rtn
+
+rec_nec_send_bit0_6122:
+	arg 570,rega
+	arg 550,regb
+	branch rec_nec_send_bit
+
+rec_nec_send_bit1_6122:
+	arg 570,rega
+	arg 1680,regb
+	branch rec_nec_send_bit
+
+
+  /*
+ * @brief: send nec one bit
+ * @param: rega: carrier time, regb: empty time
+ * @return: none
+ */
+rec_nec_send_bit:
+	copy rega,pdata
+	call rec_nec_carrier
+	copy regb,pdata
+	branch rec_nec_empty
+
+
+  /*
+ * @brief: send nec repeat code
+ * @param: none
+ * @return: none
+ */
+rec_nec_send_repeat_6122:
+	setarg 9000
+	call rec_nec_carrier
+	setarg 2250
+	call rec_nec_empty
+	setarg 560
+	call rec_nec_carrier
+	setarg 1
+	branch rec_nec_empty
+
+
+/*
+ * @brief: nec data send
+ * @param: pdata:boot data, temp:user data
+ * @return: key state
+ */
+rec_nec_6122_start:
+	call rec_nec_send_userdata_6122
+	call rec_nec_send_repeat_6122_timer_init
+	jam 16,mem_rec_nec_timer	//first package need about 40ms	
+	rtn
+	
+rec_nec_disable:
+	call rec_nec_send_repeat_6122_timer_clear
+rec_nec_6122_stop:
+	call pwm_disable
+rec_nec_io_disable:
+	fetch 1,mem_rec_nec_send_gpio
+rec_gpio_config_output_low:
+	arg gpcfg_output_low,temp
+	branch gpio_config_function_int
+
+rec_gpio_config_output_high:
+	arg gpcfg_output_high,temp
+	branch gpio_config_function_int
+
+rec_nec_send_repeat_6122_timer_init:
+	setarg 43		//107.5ms, unit 2.5ms
+rec_nec_timer_set:
+	store 1,mem_rec_nec_timeout
+	store 1,mem_rec_nec_timer
+	rtn
+
+rec_nec_send_repeat_6122_timer_clear:
+	setarg 0
+	branch rec_nec_timer_set
+	
+
+///////////////////////////////////////////////////////////////NEC SEND END///////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////////NEC RECEIVE START///////////////////////////////////////////////////////
+/*
+rec_nec_learn_init: 
+	arg mem_rec_nec_rx_start,contw
+	arg 768,loopcnt
+	call clear_mem	
+	
+	jam gpcfg_no_ie,core_gpio_conf+3	//gpio3
+	fetch 2,core_clkoff
+	set0 CLOCK_OFF_NEC,pdata
+	store 2,core_clkoff	
+
+	setarg mem_rec_nec_rx_start
+	store 2,mem_pdatatemp
+	setarg mem_rec_nec_rx_end
+	istore 2,contw
+	fetch 4,mem_pdatatemp
+	jam 0x00,core_nec_ctrl	
+	arg FUN_NEC_ENABLE|0x37,temp						//1M
+//	arg FUN_NEC_ENABLE|0x35,temp							//2M
+//	arg FUN_NEC_ENABLE|0x33,temp							//6M
+//	arg FUN_NEC_ENABLE|FUN_NEC_CLK_DIVIDE_24,temp		//12M
+	call nec_init_config
+	fetch 1,core_lpm_sysctl	
+	or pdata,0xe0,pdata		//bit5: ir rx en, bit6-7: ir rx gain control
+	store 1,core_lpm_sysctl
+	until null,lpo_edge
+	fetch 1,core_nec_ctrl	//nec analogue function enable
+	set1 6,pdata
+	store 1,core_nec_ctrl
+	setarg mem_rec_nec_rx_store_start
+	store 2,mem_rec_nec_store_sptr
+	store 2,mem_rec_nec_store_wptr
+	setarg mem_rec_nec_rx_store_end
+	store 2,mem_rec_nec_store_eptr	
+
+	fetch 4,core_clkn
+	store 4,mem_rec_nec_learn_stime		
+	fetch 4,mem_rec_nec_learn_timeout	//nec learn timeout
+	store 4,mem_rec_nec_learn_outtime
+	setarg mem_rec_period_cal
+	store 2,mem_rec_period_cal_ptr
+	jam 0,mem_rec_period_cal_count
+	jam 1,mem_rec_nec_learn_state
+	rtn
+
+rec_nec_receive_data2buff:
+	call rec_nec_rx_num_big_3	
+	call rec_nec_receive_data,user
+	branch rec_nec_receiver_data_save	
+
+rec_nec_rx_num_big_3:
+	disable user
+	call rec_nec_rx_num
+	sub pdata,3,null
+	rtn positive
+	enable user
+	rtn	
+*/
+
+//pdata:rx num
+rec_nec_rx_num:
+	fetch 2,core_nec_wptr
+	fetcht 2,core_nec_rptr
+	isub temp,pdata
+	nbranch rec_nec_rptr_big_wptr,positive	
+	rtn
+rec_nec_rptr_big_wptr:
+	fetcht 2,core_nec_wptr
+	fetch 2,core_nec_rptr
+	isub temp,temp
+	setarg NEC_STORE_BUF_SIZE
+	isub temp,pdata	
+	rtn
+
+rec_nec_receive_data:
+	fetch 2,core_nec_rptr
+	ifetcht 3,pdata
+	storet 1,mem_rec_nec_receive_data0
+	rshift8 temp,temp
+	storet 1,mem_rec_nec_receive_data1
+	rshift8 temp,temp
+	storet 1,mem_rec_nec_receive_data2
+	
+	fetch 1,mem_rec_nec_receive_data0
+	and_into 0x80,pdata
+	bne 0x80, rec_nec_receive_one_data
+	branch rec_nec_receive_two_data
+
+rec_nec_receive_one_data:
+	fetch 1,mem_rec_nec_receive_data0
+	store 1,mem_rec_nec_receive_data
+	fetch 2,core_nec_rptr
+	fetcht 2,core_nec_end_addr
+	isub temp,pdata
+	branch rec_nec_rptr_reset,positive
+	fetch 2,core_nec_rptr
+	increase 1,pdata
+	store 2,core_nec_rptr
+	jam 1,mem_rec_nec_data
+	rtn	
+
+rec_nec_receive_two_data:
+	fetch 1,mem_rec_nec_receive_data2
+	and_into 0x80,pdata
+	beq 0x80,rec_nec_receive_three_data
+	fetch 1,mem_rec_nec_receive_data1
+	lshift8 pdata,pdata
+	rshift pdata,pdata
+	fetcht 1,mem_rec_nec_receive_data0
+	and_into 0x7f,temp
+	ior temp,pdata
+	store 2,mem_rec_nec_receive_data
+	fetch 2,core_nec_rptr
+	fetcht 2,core_nec_end_addr
+	isub temp,pdata
+	branch rec_nec_rptr_reset,positive
+	fetch 2,core_nec_rptr
+	increase 2,pdata
+	store 2,core_nec_rptr
+	jam 2,mem_rec_nec_data
+	rtn
+
+rec_nec_receive_three_data:
+	fetch 1,mem_rec_nec_receive_data2
+	and_into 0x7f,pdata
+	lshift16 pdata,pdata
+	rshift pdata,rega
+	fetch 1,mem_rec_nec_receive_data1
+	lshift8 pdata,pdata
+	rshift pdata,pdata
+	fetcht 1,mem_rec_nec_receive_data0
+	and_into 0x7f,temp
+	ior temp,pdata
+	ior rega,pdata
+	store 3,mem_rec_nec_receive_data
+
+	fetch 2,core_nec_rptr
+	fetcht 2,core_nec_end_addr
+	isub temp,pdata
+	branch rec_nec_rptr_reset,positive
+	
+	fetch 2,core_nec_rptr
+	increase 3,pdata
+	store 2,core_nec_rptr
+	jam 3,mem_rec_nec_data
+	rtn
+
+rec_nec_rptr_reset:
+	arg mem_rec_nec_rx_start,temp
+	iadd temp,pdata
+	store 2,core_nec_rptr
+	rtn
+/*
+rec_nec_receiver_data_save:
+	fetch 3,mem_rec_nec_receive_data
+	rtn blank
+	fetch 1,mem_rec_nec_data
+	rtn blank
+	beq 1,rec_nec_carry_time
+	fetch 1,mem_rec_nec_rx_count
+	call rec_nec_update_timeout,blank
+	fetch 1,mem_rec_nec_rx_count
+	increase 1,pdata
+	store 1,mem_rec_nec_rx_count
+	fetch 2,mem_rec_nec_store_wptr
+	fetcht 2,mem_rec_nec_store_eptr
+	isub temp,null
+	branch rec_nec_receiver_init_wtr,positive
+	fetchr loopcnt,1,mem_rec_nec_data
+	fetch 2,mem_rec_nec_store_wptr
+	copy pdata,contw
+	fetch 2,mem_rec_nec_carry_time
+	istore 2,contw
+	arg mem_rec_nec_receive_data,contr
+rec_nec_receiver_data_save_loop:
+	ifetch 1,contr
+	istore 1,contw
+	loop rec_nec_receiver_data_save_loop	
+	copy contw,pdata
+	store 2,mem_rec_nec_store_wptr
+	setarg 0
+	store 3,mem_rec_nec_receive_data
+	store 3,mem_rec_nec_carry_time
+	rtn
+*/
+rec_nec_receiver_init_wtr:
+	setarg mem_rec_nec_rx_store_start
+	store 2,mem_rec_nec_store_sptr
+	store 2,mem_rec_nec_store_wptr
+	rtn
+
+rec_nec_carry_time:
+	call rec_nec_carry_store
+	fetch 1,mem_rec_nec_receive_data
+	fetcht 2,mem_rec_nec_carry_time
+	iadd temp,pdata
+	store 2,mem_rec_nec_carry_time
+	setarg 0
+	store 3,mem_rec_nec_receive_data
+	store 1,mem_rec_nec_data
+	rtn
+
+rec_nec_carry_store:
+	fetch 1,mem_rec_period_cal_count
+	sub pdata,20,null
+	rtn zero
+	increase 1,pdata
+	store 1,mem_rec_period_cal_count
+	fetch 1,mem_rec_nec_receive_data
+	fetcht 2,mem_rec_period_cal_ptr
+	istore 1,temp
+	increase 1,temp
+	storet 2,mem_rec_period_cal_ptr	
+	rtn	
+
+//pdata:run time
+rec_nec_receive_run_time:	
+	fetch 4,core_clkn
+	fetcht 4,mem_rec_nec_learn_stime
+	isub temp,pdata	
+	rtn
+
+//positive: timeout positive is 1
+rec_nec_receive_timeout:
+	fetcht 4,mem_rec_nec_learn_outtime
+	isub temp,null
+	rtn
+	
+rec_nec_update_timeout:
+	fetch 4,core_clkn	
+	store 4,mem_rec_nec_learn_stime	
+	setarg 620
+	store 4,mem_rec_nec_learn_outtime
+	rtn
+
+rec_nec_learn_analysis:
+	fetch 1,mem_rec_nec_rx_count
+	rtn blank
+	mul32 pdata,4,pdata
+	increase -10,pdata
+	copy pdata,loopcnt
+	store 1,mem_rec_nec_rx_len
+	arg mem_rec_nec_rx_store_start,contr
+	increase 6,contr
+	arg mem_rec_nec_rx_data,contw
+	branch memcpy
+	
+
+///////////////////////////////////////////////////////////////NEC RECEIVE START///////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////////ADPCM ENCODE START///////////////////////////////////////////////////////
+
+  /*
+ * @brief: adpcm encode
+ * @param: mem_ad_in_numSamples1, mem_ad_in_ptr1, mem_ad_out_ptr1
+ * @return: none
+ */
+rec_audio_adpcm_encode:
+	jam 40,mem_rec_ad_in_numSamples1
+	fetch 2,mem_rec_adc_dma_rptr
+	store 2,mem_rec_ad_in_ptr1
+	setarg mem_rec_adpcm
+	store 2,mem_rec_ad_out_ptr1
+rec_adpcm_encode:
+	fetch 4,mem_rec_ad_state_valpred1
+	store 4,mem_rec_ad_valpred1
+	
+	fetch 4,mem_rec_ad_state_index1
+	store 4,mem_rec_ad_index1
+	
+	fetch 1,mem_rec_ad_index1		// step = stepsizeTable[index];  
+	lshift2 pdata,pdata
+	arg mem_rec_ad_stepsizeTable1,temp
+	iadd temp,temp
+	ifetch 4,temp
+	store 4,mem_rec_ad_step1
+	
+	jam 1,mem_rec_ad_bufferstep1
+rec_adpcm_encode_loop:
+	call rec_adpcm_get_val_from_inp 	// val = *inp++;
+
+	fetch 4,mem_rec_ad_val1			// diff = val - valpred;
+	fetcht 4,mem_rec_ad_valpred1
+	isub temp,pdata
+	store 4,mem_rec_ad_diff1
+	
+	call rec_adpcm_encode_cal_delta	//sign = (diff < 0) ? 8 : 0;
+	call rec_adpcm_set_diff_by_sign	//if ( sign ) diff = (-diff);
+
+	jam 0,mem_rec_ad_delta1			//delta = 0;
+
+	fetch 4,mem_rec_ad_step1 			//vpdiff = (step >> 3);
+	rshift3 pdata,pdata
+	store 4,mem_rec_ad_vpdiff1
+
+	call rec_check_diff_big_step1  		//if ( diff >= step ) {  delta = 4;
+
+	fetch 4,mem_rec_ad_step1			//step >>= 1;
+	rshift pdata,pdata
+	store 4,mem_rec_ad_step1
+
+	call rec_check_diff_big_step2		//if ( diff >= step  ) {    delta |= 2;
+
+	fetch 4,mem_rec_ad_step1			//step >>= 1;
+	rshift pdata,pdata
+	store 4,mem_rec_ad_step1
+
+	call rec_check_diff_big_step3		//if ( diff >= step ) {delta |= 1;
+
+	call rec_check_sign_deal1			//	if ( sign )
+
+	call rec_adpcm_check_valpred_more_32767 //if ( valpred > 32767 )
+
+	fetch 1,mem_rec_ad_delta1			//delta |= sign;
+	fetcht 1,mem_rec_ad_sign1
+	ior temp,pdata
+	store 1,mem_rec_ad_delta1
+
+	fetch 1,mem_rec_ad_delta1			//index += indexTable[delta];
+	arg mem_rec_ad_indexTable1,temp
+	iadd temp,temp
+	ifetch 1,temp
+	call rec_char_2_int32
+	fetcht 4,mem_rec_ad_index1
+	iadd temp,pdata
+	store 4,mem_rec_ad_index1
+
+	call rec_adpcm_check_index_less_0		//if ( index < 0 ) index = 0;
+	call rec_adpcm_check_index_big_88		//if ( index > 88 ) index = 88;
+
+	fetch 4,mem_rec_ad_index1			// step = stepsizeTable[index];  
+	lshift2 pdata,pdata
+	arg mem_rec_ad_stepsizeTable1,temp
+	iadd temp,temp
+	ifetch 4,temp
+	store 4,mem_rec_ad_step1
+
+	call rec_adpcm_check_bufferstep		//if(bufferstep){
+
+	fetch 1,mem_rec_ad_bufferstep1		//bufferstep = !bufferstep;
+	arg 0x01,temp
+	ixor temp,pdata
+	store 1,mem_rec_ad_bufferstep1
+
+	fetch 1,mem_rec_ad_in_numSamples1
+	increase -1,pdata
+	store 1,mem_rec_ad_in_numSamples1
+	nbranch rec_adpcm_encode_loop, blank
+
+
+	fetch 1,mem_rec_ad_bufferstep1
+	call rec_adpcm_set_bufferstep_to_outp,blank
+
+	fetch 4,mem_rec_ad_valpred1
+	store 4,mem_rec_ad_state_valpred1
+
+	fetch 4,mem_rec_ad_index1
+	store 4,mem_rec_ad_state_index1
+	rtn
+
+//pdata :diff
+rec_adpcm_encode_cal_delta:
+	fetch 4,mem_rec_ad_diff1
+	bbit1 31,rec_adpcm_encode_cal_smaller_zero
+	setarg 0
+rec_adpcm_encode_store_sign1:
+	store 1,mem_rec_ad_sign1
+	rtn
+
+rec_adpcm_encode_cal_smaller_zero:
+	setarg 8
+	branch rec_adpcm_encode_store_sign1
+
+rec_adpcm_set_diff_by_sign:
+	fetch 1,mem_rec_ad_sign1
+	nbranch rec_adpcm_diff_negation,blank
+	rtn
+
+rec_adpcm_diff_negation:
+	fetch 4,mem_rec_ad_diff1
+	sub pdata,0,pdata
+	store 4,mem_rec_ad_diff1
+	rtn
+
+rec_check_diff_big_step1:
+	fetch 4,mem_rec_ad_diff1
+	fetcht 4,mem_rec_ad_step1
+	isub temp,pdata
+	rtnbit1 31
+	jam 4,mem_rec_ad_delta1
+rec_check_diff_big_common:
+	fetch 4,mem_rec_ad_diff1
+	fetcht 4,mem_rec_ad_step1
+	isub temp,pdata
+	store 4,mem_rec_ad_diff1
+rec_check_diff_big_common_next:
+	fetch 4,mem_rec_ad_vpdiff1
+	fetcht 4,mem_rec_ad_step1
+	iadd temp,pdata
+	store 4,mem_rec_ad_vpdiff1
+	rtn
+
+rec_check_diff_big_step2:
+	fetch 4,mem_rec_ad_diff1
+	fetcht 4,mem_rec_ad_step1
+	isub temp,pdata
+	rtnbit1 31
+	fetch 1,mem_rec_ad_delta1
+	or pdata,2,pdata
+	store 1,mem_rec_ad_delta1
+	branch rec_check_diff_big_common
+
+rec_check_diff_big_step3:
+	fetch 4,mem_rec_ad_diff1
+	fetcht 4,mem_rec_ad_step1
+	isub temp,pdata
+	rtnbit1 31
+	fetch 1,mem_rec_ad_delta1
+	or pdata,1,pdata
+	store 1,mem_rec_ad_delta1
+	branch rec_check_diff_big_common_next
+
+rec_check_sign_deal1:
+	fetch 1,mem_rec_ad_sign1
+	branch rec_valpred_add_vpdiff,blank
+rec_valpred_sub_vpdiff:
+	fetch 4,mem_rec_ad_valpred1
+	fetcht 4,mem_rec_ad_vpdiff1
+	isub temp,pdata
+rec_valpred1_store:
+	store 4,mem_rec_ad_valpred1
+	rtn
+
+rec_valpred_add_vpdiff:
+	fetch 4,mem_rec_ad_valpred1
+	fetcht 4,mem_rec_ad_vpdiff1
+	iadd temp,pdata
+	branch rec_valpred1_store
+	
+rec_adpcm_check_valpred_more_32767:
+	fetch 4,mem_rec_ad_valpred1
+	arg 32767,temp
+	isub temp,pdata
+	bbit0 31,rec_adpcm_valpred_more_32767
+rec_adpcm_check_valpred_less_f32767:	
+	fetch 4,mem_rec_ad_valpred1
+	arg -32767,temp
+	isub temp,pdata
+	bbit1 31,rec_adpcm_valpred_less_f32767
+	rtn
+
+rec_adpcm_valpred_more_32767:
+	setarg 32767
+	branch rec_valpred1_store
+	
+rec_adpcm_valpred_less_f32767:
+	setarg -32767
+	branch rec_valpred1_store
+	
+rec_adpcm_check_index_less_0:
+	fetch 4,mem_rec_ad_index1
+	arg 0,temp
+	isub temp,pdata
+	bbit1 31,rec_adpcm_set_0_index
+	rtn
+
+rec_adpcm_check_index_big_88:
+	fetch 4,mem_rec_ad_index1
+	arg 88,temp
+	isub temp,pdata
+	bbit0 31,rec_adpcm_set_88_index
+	rtn
+
+rec_adpcm_set_0_index:
+	setarg 0
+rec_adpcm_store_index1:
+	store 4,mem_rec_ad_index1
+	rtn
+
+rec_adpcm_set_88_index:
+	setarg 88
+	branch rec_adpcm_store_index1
+
+rec_adpcm_check_bufferstep:
+	fetch 1,mem_rec_ad_bufferstep1
+	branch rec_adpcm_bufferstep_eque_0,blank
+rec_adpcm_bufferstep_neque_0:
+	fetch 1,mem_rec_ad_delta1
+	and pdata,0x0f,pdata
+	store 4,mem_rec_ad_outputbuffer1	
+	rtn
+
+//*outp++=((delta<<4)&0xf0)|outputbuffer
+rec_adpcm_bufferstep_eque_0:
+	fetch 1,mem_rec_ad_delta1
+	lshift4,pdata,pdata
+	and pdata,0xf0,pdata
+	fetcht 4,mem_rec_ad_outputbuffer1
+	ior temp,pdata
+rec_adpcm_bufferstep_increase_out_ptr1:
+	fetcht 2,mem_rec_ad_out_ptr1
+	istore 1,temp	
+	increase 1,temp
+	storet 2,mem_rec_ad_out_ptr1
+	rtn
+
+rec_adpcm_set_bufferstep_to_outp:
+	fetch 4,mem_rec_ad_outputbuffer1
+	branch rec_adpcm_bufferstep_increase_out_ptr1
+	
+
+//val = *inp++;
+//val: int ,4 byte
+//inp:shourt int ,2byte
+rec_adpcm_get_val_from_inp:	
+	fetcht 2,mem_rec_ad_in_ptr1
+	ifetch 2,temp
+	increase 2,temp
+	storet 2,mem_rec_ad_in_ptr1
+	call rec_int16_2_int32
+	store 4,mem_rec_ad_val1
+	rtn
+
+/*
+pdata: intput,int16 data
+pdata:output int data
+*/
+rec_int16_2_int32:
+	bbit1 15,rec_int16_2_int32_less_0
+	rtn
+
+rec_int16_2_int32_less_0:
+	arg 0xffff,temp
+	lshift16 temp,temp
+rec_calca_ixor:
+	ixor temp,pdata
+	rtn
+
+
+/*
+pdata: intput,char data
+pdata:output int data
+*/
+rec_char_2_int32:
+	bbit1 7,rec_char_2_int32_less_0
+	rtn
+rec_char_2_int32_less_0:
+	arg 0xffffff,temp
+	lshift8 temp,temp
+	branch rec_calca_ixor
+	
+///////////////////////////////////////////////////////////////ADPCM ENCODE END///////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////////AUDIO START///////////////////////////////////////////////////////
+
+rec_voice_notify_apk:
+	arg 20,rega
+	fetcht 2,mem_rec_voice_notify_apk_handle
+rec_le_notify_data:
+	call le_att_malloc_tx_notify
+	arg mem_rec_voice_notify,contr
+	arg 20,loopcnt
+	branch memcpy
+	
+rec_voice_start_apk:
+	jam 0x01,mem_pdatatemp
+rec_voice_notify_apk_data:
+	jam 1,mem_rec_le_data_len
+	fetcht 2,mem_rec_control_notify_apk_handle
+	branch rec_le_send_data
+
+rec_voice_end_apk:
+	jam 0x00,mem_pdatatemp
+	branch rec_voice_notify_apk_data
+
+
+rec_voice_notify_box:
+	arg 20,rega
+	fetcht 2,mem_rec_voice_notify_box_handle
+	branch rec_le_notify_data
+
+rec_voice_start_box:
+	setarg 0x221
+rec_voice_notify_box_data:
+	store 3,mem_pdatatemp
+	jam 3,mem_rec_le_data_len
+	fetcht 2,mem_rec_control_notify_box_handle
+	branch rec_le_send_data 
+
+rec_voice_end_box:
+	setarg 0xcccc
+	branch rec_voice_notify_box_data
+
+
+///////////////////////////////////////////////////////////////AUDIO END///////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////////FILTER POLICY START///////////////////////////////////////////////////////
+/*
+rec_le_adv_loop:
+	fetch 1,mem_le_adv_enable
+	rtn blank
+	arg le_adv_interval_timer,queue
+	call timer_check
+	nrtn blank
+	enable swfine
+	call le_init_adv
+	call le_next_adv_channel
+	call le_send_adv_ind
+	nbranch le_adv_not_match,match
+	fetch 1,mem_le_req_rcv
+	increase 1,pdata
+	store 1,mem_le_req_rcv
+	fetch 1,mem_le_rxbuf_adv_header
+	and pdata,0x0f,pdata
+	store 1,mem_rec_le_req_type
+	beq SCAN_REQ,rec_le_send_scan_response
+	beq CONNECT_REQ,rec_le_parse_connect_req
+	branch le_adv_not_match
+
+rec_le_parse_connect_req:
+rec_le_send_scan_response:
+rec_le_white_list_filter_check:
+	fetch 1,mem_rec_white_list_num
+	beq 0,rec_scan_filter_pass
+	fetch 1,mem_rec_le_scan_filter_policy
+	beq NONE_FILTER,rec_scan_filter_pass
+	beq WHITE_LIST_SCAN_FILTER,rec_white_filter_scan_check
+	beq WHITE_LIST_CONNECT_FILTER,rec_scan_filter_pass
+	beq WHITE_LIST_CONN_SCAN_FILTER,rec_white_filter_scan_check
+rec_white_filter_scan_check:
+	fetch 1,mem_rec_white_list_num
+	branch end_of_packet,blank
+	call rec_check_addr_in_white_list
+	nbranch end_of_packet,blank
+rec_scan_filter_pass:
+	fetch 1,mem_rec_le_req_type
+	beq SCAN_REQ,le_send_scan_response+1
+	beq CONNECT_REQ,le_parse_connect_req
+	rtn
+
+rec_check_addr_in_white_list:
+	fetchr loopcnt,1,mem_rec_white_list_num
+	increase -1,loopcnt
+	fetcht 6, mem_le_rxbuf+2
+	setarg mem_rec_white_list
+	copy pdata,contr
+rec_addr_compare:
+	ifetch 6,contr
+	isub temp,pdata
+	rtn blank
+	loop rec_addr_compare
+	rtn
+
+rec_le_add_white_list:
+	fetch 1,mem_rec_white_list_num
+	sub pdata,7,null
+	nrtn positive
+	setarg mem_rec_white_list
+	fetcht 1,mem_rec_white_list_num
+	mul32 temp,6,temp
+	iadd temp,contw
+	fetch 6,mem_le_plap
+	istore 6,contw
+	
+	fetch 1,mem_rec_white_list_num
+	increase 1,pdata
+	store 1,mem_rec_white_list_num
+	rtn
+
+rec_le_clear_white_list:
+	jam 0,mem_rec_white_list_num
+	rtn
+*/
+
+///////////////////////////////////////////////////////////////FILTER POLICY END///////////////////////////////////////////////////////
+
+
+
+///////////////////////////////////////////////////////////////OTA START///////////////////////////////////////////////////////
+
+rec_ota_process:
+	bpatch patch17_3,mem_patch17
+	copy rega,contr
+	ifetch 1,contr
+	rtnne OTA_COMMAND
+	ifetch 1,contr
+	store 1,mem_rec_ota_notify_opcode
+	beq OTA_PORTOCOL_VERSION_REQUEST,rec_ota_parse_protocol_version_req
+	beq OTA_BUCK_SIZE_REQUEST,rec_ota_parse_buck_size_req
+	beq OTA_START_REQUEST,rec_ota_parse_start_req
+	beq OTA_DATA_WRITE_CMD,rec_ota_parse_data_write_cmd
+	beq OTA_DATA_WRITE_REQUEST,rec_ota_prep_data_write_rsp
+	beq OTA_END_REQUEST,rec_ota_parse_end_req
+rec_ota_init:
+	setarg -1
+	store 2,mem_rec_ota_write_index
+	setarg 0
+	store 4,mem_rec_ota_total_sum
+	store 2,mem_rec_ota_write_length
+	jam OTA_RESULT_SUCCESS,mem_rec_ota_notify_result
+	rtn
+
+rec_ota_parse_protocol_version_req:
+	arg 5,rega
+	call rec_ota_tx_notify_success
+	fetch 2,mem_rec_ota_version
+	istore 2,contw
+	jam OTA_LE_CONN_PARAM_UPDATE_ENABLE,mem_rec_ota_le_conn_param_update
+	fetch 8,mem_rec_ota_le_conn_update_param
+	store 8,mem_le_interval_min
+	branch le_l2cap_tx_update_req
+
+rec_ota_parse_buck_size_req:
+	arg 7,rega
+	call rec_ota_tx_notify_success
+	fetch 2,mem_rec_ota_buck_size
+	istore 2,contw
+	fetch 2,mem_rec_ota_packet_max_len
+	istore 2,contw
+	rtn
+
+rec_ota_parse_start_req:
+	ifetch 1,contr
+	store 1,mem_rec_ota_update_flash_mode
+	beq OTA_UPDATE_FLASH_NORMAL,rec_ota_parse_start_req_update_normal
+rec_ota_tx_flashmode_not_support:
+	arg 4,rega
+	jam OTA_RESULT_FLASHMODE_NOT_SUPPORT,mem_rec_ota_notify_result
+	call rec_ota_tx_notify_common
+	fetch 1,mem_rec_ota_update_flash_mode
+	branch  istore_1_contw_rtn
+
+
+rec_ota_tx_start_req_success:
+	arg 4,rega
+	call rec_ota_tx_notify_success
+	fetch 1,mem_rec_ota_update_flash_mode
+	branch  istore_1_contw_rtn
+
+
+rec_ota_parse_start_req_update_normal:
+	call rec_ota_tx_start_req_success
+	call rec_ota_init
+	setarg 0
+	store 3,mem_rec_ota_flash_offset_addr
+	jam 1,mem_rec_ota_enable
+	setarg 0
+	arg 0x10,temp
+	arg mem_rec_ota_flash_buf,rega
+	call spid_read_flash
+	call rec_ota_set_flash_start_addr
+	fetchr rega,3,mem_rec_ota_flash_base_addr
+	arg 9,loopcnt
+rec_erase_num_sector_flash:
+	force 0,regext_index
+rec_erase_num_sector_flash_loop:
+	call rec_spi_wait_flash
+	storer rega,3,mem_spi_write_addr
+	call rec_save_loopcnt_rega
+	call spid_flash_erase_sector
+	call rec_rescue_rega_loopcnt
+	setarg 4096
+	iadd rega,rega
+	loop rec_erase_num_sector_flash_loop
+	rtn
+
+rec_ota_set_flash_start_addr:
+	bpatchx patch3e_1,mem_patch3e
+	fetcht 3,mem_rec_code_b_flash_addr
+	storet 3,mem_rec_ota_flash_base_addr
+	storet 3,mem_rec_ota_write_flash_addr_start
+	fetch 1,mem_rec_ota_flash_buf
+	rtneq 0x60	//0x6000
+	fetcht 3,mem_rec_code_a_flash_addr
+	storet 3,mem_rec_ota_flash_base_addr
+	storet 3,mem_rec_ota_write_flash_addr_start
+	rtn
+
+rec_ota_parse_data_write_cmd:
+rec_ota_parse_data_write_req:
+rec_ota_parse_data_write_data_store:
+	fetcht 2,mem_le_l2cap_size
+	increase -8,temp
+	fetch 2,mem_rec_ota_write_length
+	iadd temp,pdata
+	store 2,mem_rec_ota_write_length
+	copy temp,loopcnt
+	copy rega,contr
+	increase 5,contr
+	call rec_queue_ota_push
+	fetch 2,mem_rec_ota_write_index
+	increase 1,pdata
+	store 2,mem_rec_ota_write_index
+	rtn
+
+rec_ota_prep_data_write_rsp:
+	call rec_ota_parse_data_write_req
+	jam OTA_RESULT_SUCCESS,mem_rec_ota_notify_result
+	jam OTA_DATA_WRITE_REQUEST,mem_rec_ota_notify_opcode
+	arg 3,rega
+	branch rec_ota_tx_notify_common
+
+rec_ota_tx_notify_success:
+	jam OTA_RESULT_SUCCESS,mem_rec_ota_notify_result
+//input rega:length
+rec_ota_tx_notify_common:
+	fetcht 2,mem_rec_ota_notify_handle
+	call le_att_malloc_tx_notify
+	setarg OTA_EVENT
+	istore 1,contw
+	fetch 1,mem_rec_ota_notify_result
+	istore 1,contw
+	fetch 1,mem_rec_ota_notify_opcode
+	branch istore_1_contw_rtn
+
+rec_ota_parse_end_req:
+	force 0,regext_index
+	call rec_save_contr
+	call rec_ota_data2flash_remain
+	jam 0,mem_rec_ota_enable
+	setarg 0
+	store 3,mem_rec_ota_flash_offset_addr
+	store 4,mem_rec_ota_total_sum
+	call rec_ota_sum_all
+	call rec_rescue_contr
+	increase 1,contr
+	ifetch 4,contr	//length
+	store 4,mem_pdatatemp
+	ifetch 4,contr	//checksum
+	store 4,mem_pdatatemp+4
+
+	fetch 4,mem_pdatatemp
+	fetcht 4,mem_rec_ota_write_length
+	isub temp,null
+	nbranch rec_ota_tx_length_error,zero
+
+	fetch 4,mem_rec_ota_total_sum
+	fetcht 4,mem_pdatatemp+4
+	isub temp,null
+	nbranch rec_ota_result_error_write_flash,zero
+	call rec_ota_updata_head	
+	jam 2,mem_rec_ota_reset_timeout
+rec_ota_tx_end_req_return:
+	arg 0x0c,rega
+	call rec_ota_tx_notify_common
+	fetch 1,mem_rec_ota_update_flash_mode
+	istore 1,contw
+	fetch 4,mem_rec_ota_write_length
+	istore 4,contw
+	fetch 4,mem_rec_ota_total_sum
+	istore 4,contw
+	rtn
+
+rec_ota_tx_length_error:
+	jam OTA_RESULT_LENGTH_ERROR,mem_rec_ota_notify_result
+	branch rec_ota_tx_end_req_return
+
+rec_ota_result_error_write_flash:
+	jam OTA_RESULT_WRITE_FLASH_ERROR,mem_rec_ota_notify_result
+	rtn
+
+rec_ota_data2flash_remain:
+	fetch 1,mem_rec_ota_enable
+	rtn blank
+	call rec_ota_queue_count_256
+	rtn positive
+	fetcht 2,mem_rec_queue_ota_count
+	call rec_save_temp
+	copy temp,loopcnt
+	arg mem_rec_ota_flash_buf,contw
+	call rec_queue_ota_pop
+	call rec_spi_wait_flash
+	call rec_rescue_temp
+	call rec_save_temp
+	call rec_ota_data2flash
+	call rec_rescue_temp
+	branch rec_ota_increase_flash_offset_addr
+
+rec_ota_queue_count_256:
+	fetch 2,mem_rec_queue_ota_count
+	arg 256,temp
+	isub temp,null
+	rtn	
+
+//temp : out page sum
+rec_ota_sum_page:
+	arg 0x100,loopcnt
+	branch rec_ota_sum
+
+rec_ota_sum_all:
+	fetch 2,mem_rec_ota_write_length
+	fetcht 2,mem_rec_ota_flash_offset_addr
+	isub temp,pdata
+	rtn zero
+	call rec_save_reg
+	call rec_ota_data_from_flash_len
+	call rec_rescue_reg
+	call rec_ota_sum_len
+	fetch 4,mem_rec_ota_total_sum
+	iadd temp,pdata
+	store 4,mem_rec_ota_total_sum
+	branch rec_ota_sum_all
+
+rec_ota_sum_len:
+	arg 0x100,temp
+	isub temp,null
+	branch rec_ota_sum_page,positive
+	copy pdata,loopcnt
+rec_ota_sum:
+	arg mem_rec_ota_flash_buf,contr
+	arg 0,temp
+rec_ota_sum_loop:
+	ifetch 1,contr
+	iadd temp,temp
+	loop rec_ota_sum_loop
+	rtn
+
+rec_ota_data_from_flash_len:
+	arg 0x100,temp
+	isub temp,null
+	branch rec_ota_data_from_flash_page,positive
+	call rec_save_reg
+	copy pdata,loopcnt
+	call rec_ota_data_from_flash
+	call rec_rescue_reg
+	copy pdata,temp
+	branch rec_ota_increase_flash_offset_addr
+
+rec_ota_data_from_flash:
+	fetch 3,mem_rec_ota_flash_base_addr
+	fetchr regb,3,mem_rec_ota_flash_offset_addr
+	iadd regb,pdata
+	arg mem_rec_ota_flash_buf,rega
+	branch spid_read_flash
+
+rec_ota_data_from_flash_page:
+	arg 0x100,temp
+	call rec_ota_data_from_flash
+	arg 0x100,temp
+	branch rec_ota_increase_flash_offset_addr
+
+
+rec_ota_polling:
+	fetch 1,mem_rec_ota_enable
+	ncall rec_ota_data2flash_page,blank
+	rtn
+
+rec_ota_data2flash_page:
+	fetch 1,mem_rec_ota_enable
+	rtn blank
+	call rec_ota_queue_count_256
+	nrtn positive
+	arg 256,loopcnt
+	arg mem_rec_ota_flash_buf,contw
+	call rec_queue_ota_pop
+	call rec_spi_wait_flash
+	arg 256,temp
+	call rec_ota_data2flash
+	arg 256,temp
+rec_ota_increase_flash_offset_addr:
+	fetch 2,mem_rec_ota_flash_offset_addr
+	iadd temp,pdata
+	store 2,mem_rec_ota_flash_offset_addr
+	rtn
+
+rec_ota_data2flash:
+	fetch 3,mem_rec_ota_flash_base_addr
+	fetchr regb,3,mem_rec_ota_flash_offset_addr
+	iadd regb,pdata
+	arg mem_rec_ota_flash_buf,rega
+	branch spid_write_flash_data
+	
+
+rec_queue_ota_init:
+	setarg mem_rec_queue_ota_buf
+	fetcht 2,mem_rec_ota_queue_size
+rec_queue_init_config:
+	increase -1,temp
+	copy pdata,contw
+	increase -8,contw
+	istore 2,contw
+	iadd temp,pdata
+	istore 2,contw
+	isub temp,pdata
+	istore 2,contw
+	istore 2,contw
+	rtn
+
+rec_queue_ota_push:
+	call rec_save_contr
+	bpatch patch17_4,mem_patch17
+	fetch 2,mem_rec_queue_ota_count
+	iadd loopcnt,pdata
+	store 2,mem_rec_queue_ota_count
+	setarg mem_rec_queue_ota_buf
+	call rec_queue_enter_config
+	call rec_rescue_contr
+	call rec_enter_queue
+	fetch 2,mem_rec_queue_ota_count
+	fetcht 2,mem_rec_ota_queue_size
+	isub temp,null
+	call rec_queue_ota_data_loss,positive
+	rtn
+rec_queue_ota_data_loss:
+	rtn
+
+rec_queue_ota_pop:
+	call rec_save_contw
+	fetch 2,mem_rec_queue_ota_count
+	isub loopcnt,pdata
+	store 2,mem_rec_queue_ota_count
+	setarg mem_rec_queue_ota_buf
+	call rec_queue_out_config
+	call rec_rescue_contw
+rec_out_queue:
+	copy contu,pdata
+	isub temp,null
+	branch assert,zero
+rec_out_queue_loop:
+	ifetch 1,contru
+	istore 1,contw
+	loop rec_out_queue_loop	
+	istorer contru,2,rega
+	rtn
+
+rec_ota_updata_head:
+	call rec_ota_read_head
+	setarg 0
+	call rec_spid_flash_erase_page
+rec_ota_write_head_check:
+	bpatch patch17_5,mem_patch17
+	fetch 1,mem_rec_ota_flash_buf
+	beq 0x60,rec_ota_write_head_B
+	beq 0xf0,rec_ota_write_head_A
+rec_ota_write_head_A:
+	fetch 3,mem_rec_code_a_flash_addr
+	branch rec_ota_write_head
+
+rec_ota_read_head:
+	setarg 0
+	arg 0x100,temp
+	arg mem_rec_ota_flash_buf,rega
+	branch spid_read_flash
+
+rec_ota_write_head_B:
+	fetch 3,mem_rec_code_b_flash_addr
+rec_ota_write_head:	
+	increase 2,pdata
+	byteswap pdata,pdata
+	store 2,mem_rec_ota_flash_buf
+	arg 0x100,temp
+	arg mem_rec_ota_flash_buf,rega
+	setarg 0	
+	branch spid_write_flash_data
+
+
+rec_spid_flash_erase_page:
+	store 3,mem_spi_write_addr
+	call rec_spi_wait_flash
+	call spid_init_flash
+	call spid_unlock_flash
+	arg mem_spid_tbuf,rega
+	jam 4,core_spid_txlen
+	fetch 3,mem_spi_write_addr
+	arg FLASH_COMMAND_PAGE_ERASE,temp
+	branch spid_write_flash_common
+
+rec_spi_wait_flash:
+	setarg mem_spid_tbuf
+	store 2,core_spid_txaddr
+	setarg mem_spid_rbuf
+	store 2,core_spid_rxaddr
+	jam 0,core_spid_txlen+1
+	setarg FLASH_READ_SATUS
+	call spid_read_reg
+	bbit1 FLASH_STATUS_WIP,rec_spi_wait_flash
+	rtn
+	
+rec_save_contr:
+	copy contr,pdata
+	branch rec_save_reg
+
+rec_rescue_contr:
+	call rec_rescue_reg
+	branch get_contr_end
+	
+rec_save_contw:
+	copy contw,pdata
+	branch rec_save_reg
+
+rec_rescue_contw:
+	call rec_rescue_reg
+	branch get_contw_end
+
+rec_save_loopcnt_rega:
+	call rec_save_loopcnt
+	branch rec_save_rega
+
+rec_rescue_rega_loopcnt:
+	call rec_rescue_rega
+rec_rescue_loopcnt:
+	call rec_rescue_reg
+	copy pdata,loopcnt
+	rtn
+
+rec_save_loopcnt:
+	copy loopcnt,pdata
+	branch rec_save_reg
+
+rec_save_temp:
+	copy temp,pdata
+	branch rec_save_reg
+
+rec_rescue_temp:
+	call rec_rescue_reg
+	copy pdata,temp
+	rtn
+
+///////////////////////////////////////////////////////////////OTA END///////////////////////////////////////////////////////
+
+
+///////////////////////////////////////////////////////////////QUEUE START///////////////////////////////////////////////////////
+/*
+ * @brief: config push queue addr
+ * @param: none
+ * @return: pdata: adpcm data buff start addr
+ */
+rec_queue_enter_config:
+	increase -8,pdata
+	ifetchr contus,2,pdata
+	increase 2,pdata	
+	ifetchr contue,2,pdata
+	increase 2,pdata	
+	ifetchr temp,2,pdata
+	increase 2,pdata
+	ifetchr contu,2,pdata
+	copy pdata,rega
+	rtn
+
+
+/*
+ * @brief: config pop queue addr
+ * @param: none
+ * @return: pdata: adpcm data buff start addr
+ */
+rec_queue_out_config:
+	increase -8,pdata
+	ifetchr contus,2,pdata
+	increase 2,pdata	
+	ifetchr contue,2,pdata
+	increase 2,pdata
+	ifetchr contu,2,pdata
+	copy pdata,rega
+	increase 2,pdata	
+	ifetchr temp,2,pdata
+	rtn
+
+
+/*
+ * @brief: data push queue
+ * @param: contr: queue read ptr value, contwu:queue write ptr value, rega: queue write ptr
+ * @param: loopcnt: length, temp: queue read ptr value
+ * @return: none
+ */
+rec_enter_queue:
+rec_enter_queue_loop:
+	ifetch 1,contr
+	istore 1,contwu
+	loop rec_enter_queue_loop	
+	istorer contwu,2,rega
+	copy contwu,pdata	
+	isub temp,null
+	branch assert,zero
+	rtn
+
+///////////////////////////////////////////////////////////////QUEUE END///////////////////////////////////////////////////////
+
+endif
+
+
Index: program/app_shutter.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/app_shutter.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/app_shutter.prog	(working copy)
@@ -0,0 +1,624 @@
+
+ifdef COMPILE_SHUTTER
+
+shutter_init:
+	call enable_authrom
+	rtn wake
+
+	setarg shutter_process_idle
+	store 2,mem_cb_idle_process
+
+	setarg shutter_process_bb_event
+	store 2,mem_cb_bb_event_process
+
+	setarg ble_shutter_receive_data
+	store 2,mem_cb_att_write
+
+	setarg shutter_le_bb_event_timer
+	store 2,mem_cb_event_timer
+
+	setarg shutter_key_change
+	store 2,mem_cb_shutter_keycan
+
+	call shutter_common_init
+
+	bpatch patch17_6,mem_patch17
+	call shutter_load_buffer_config_form_DataRom
+
+shutter_power_switch:
+	fetch 1, mem_shutter_hard_soft_switch_case
+	beq HARD_SWITCH, shutter_hart_swtich_power_on
+	fetch 1,mem_shutter_soft_switch_button_gpio
+	store 1,mem_ui_button_gpio
+	branch ui_soft_swtich_init
+
+
+shutter_common_init:
+	setarg shutter_le_before_hibernate
+	store 2,mem_cb_before_hibernate
+
+	setarg shutter_process_lpm_before
+	store 2,mem_cb_before_lpm
+
+	setarg shutter_soft_swtich_power_on
+	store 2,mem_shutter_soft_switch_poweron_callback_function
+
+	setarg shutter_soft_swtich_power_off
+	store 2,mem_shutter_soft_switch_poweroff_callback_function
+
+	jam 7,mem_version
+	call le_modified_name_adv
+	call shutter_init_param
+	call keyscan_key_init
+	call queue_init
+	branch ui_led_init_global
+
+
+/**************hard swtich function**************/
+shutter_hart_swtich_power_on:
+	jam UI_BUTTON_GPIO_DISABLE,mem_ui_button_gpio
+	jam SS_STATE_POWER_ON,mem_shutter_soft_switch_power_state
+	branch shutter_start_reconnect
+/****************************/
+
+/**************lpm lock callback function**************/
+shutter_le_scale_lpm_lock:
+	fetch 1,mem_shutter_soft_switch_power_state
+	beq SS_STATE_POWER_OFF,app_get_lpm_wake_lock
+	call l2cap_malloc_get_full_map
+	fetch 1,mem_used_map
+	nbranch app_get_lpm_wake_lock,blank
+	branch app_put_lpm_wake_lock
+/****************************/
+
+/**************c512bt event callback function*************/
+shutter_process_bb_event:
+	copy regc,pdata
+
+/**************ble shutter event*****************/
+	beq BT_EVT_LE_CONNECTED,ble_shutter_process_baseband_connect
+	beq BT_EVT_LE_DISCONNECTED,ble_shutter_process_baseband_disconnect
+	beq BT_EVT_LE_RECONNECT_COMPLETE,ble_shutter_process_reconnect_complete
+	beq BT_EVT_LE_PARSE_CONN_PAPA_UPDATE_RSP,ble_shutter_process_parse_connect_parameter_update_response
+/***************soft swtich event****************/
+	beq BT_EVT_BUTTON_LONG_PRESSED,ui_soft_switch_botton_long_press
+	beq BT_EVT_BUTTON_DOWN,shutter_process_soft_swtich_button_down
+	beq BT_EVT_BUTTON_UP,shutter_process_soft_swtich_button_up
+	rtn
+/****************************/
+
+
+/******************ble shutter event**********************/
+ble_shutter_process_baseband_connect:
+	call shutter_stop_bluetooth_discovery
+	setarg 0
+	store 2,mem_ble_shutter_reconn_timer
+	branch app_led_off
+
+ble_shutter_process_baseband_disconnect:
+	call queue_init
+	jam 0,mem_ble_shutter_enable_notify
+	branch shutter_start_reconnect
+
+ble_shutter_process_reconnect_complete:
+	call queue_init
+	jam 1,mem_ble_shutter_enable_notify
+	call shutter_dy_check_iphone
+	call app_lpm_mult_enable
+	nbranch ble_parameter_updata_response_ios,blank
+	fetch 8,mem_ble_shutter_dy_interval_min_android
+	store 8,mem_le_interval_min
+	branch le_l2cap_tx_update_req
+
+
+ble_shutter_process_parse_connect_parameter_update_response:
+	fetch 2,mem_le_l2cap_signaling_conn_param_update_rsp_result
+	rtneq BLE_SIGNALING_CONNECT_PARAMETER_UPDATE_ACCEPTED
+	fetch 8,mem_ble_shutter_interval_min_new
+	rtn blank
+	store 8,mem_le_interval_min
+	branch le_l2cap_tx_update_req
+/**************************************/
+
+shutter_process_soft_swtich_button_down:
+	fetch 1,mem_shutter_hard_soft_switch_case
+	rtneq HARD_SWITCH
+	fetch 1,mem_shutter_soft_switch_power_state
+	rtnne SS_STATE_POWER_ON
+	call shutter_store_currenct_led_state
+	branch app_led_on
+
+shutter_store_currenct_led_state:
+	jam 1,mem_shutter_soft_swtich_botton_down
+	arg 11,loopcnt
+	arg mem_shutter_soft_swtich_led_struct_temp,contw
+	arg mem_shutter_led_struct_app_led,contr
+	branch memcpy
+
+shutter_process_soft_swtich_button_up:
+	fetch 1,mem_shutter_hard_soft_switch_case
+	rtneq HARD_SWITCH
+	fetch 1,mem_shutter_soft_switch_power_state
+	beq SS_STATE_POWER_ON,shutter_load_currenct_led_state
+	branch ui_soft_switch_botton_up
+
+shutter_load_currenct_led_state:
+	fetch 1,mem_shutter_soft_swtich_botton_down
+	rtnne 1
+	jam 0,mem_shutter_soft_swtich_botton_down
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BLE_CONNECTED,app_led_off
+	arg 11,loopcnt
+	arg mem_shutter_soft_swtich_led_struct_temp,contr
+	arg mem_shutter_led_struct_app_led,contw
+	branch memcpy
+
+/**************************************/
+
+
+shutter_le_bb_event_timer:
+/**************shutter check sleep timer**********************/
+	call shutter_check_sleep_timer
+/************************************/
+/**************soft reset power off timer**********************/
+	call shutter_check_power_off_timer
+/************************************/
+
+/**************ble shutter timer**********************/
+	branch ble_shutter_reconn_timer
+/************************************/
+
+/**************shutter check sleep timer**********************/
+shutter_check_sleep_timer:
+	arg mem_shutter_sleep_timer,regc
+	arg shutter_sleep_timeout,regb
+	branch timer_single_step_2B
+shutter_sleep_timeout:
+	jam SS_STATE_POWER_OFF,mem_shutter_soft_switch_power_state
+	call app_led_off
+	call shutter_disconnect_current_connection
+	branch shutter_wait_power_off
+
+/**************soft reset power off timer**********************/
+shutter_check_power_off_timer:
+	arg mem_shutter_power_off_timer,regc
+	arg shutter_check_power_off_timeout,regb
+	branch timer_single_step
+
+shutter_check_power_off_timeout:
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BLE_CONNECTED,shutter_wait_power_off
+	fetch 1,mem_shutter_led_struct_app_led_type
+	beq UI_LED_STATE_BLINK_START,shutter_wait_power_off
+	beq UI_LED_STATE_BLINK_LIGHTING,shutter_wait_power_off
+	beq UI_LED_STATE_BLINK_DARKING,shutter_wait_power_off
+	branch app_enter_hibernate
+/************************************/
+
+/**************ble shutter timer**********************/
+ble_shutter_reconn_timer:
+	fetch 1,mem_shutter_soft_switch_power_state
+	rtnne SS_STATE_POWER_ON
+	arg mem_ble_shutter_reconn_timer,regc
+	arg shutter_start_bluetooth_discovery,regb
+	branch timer_single_step_2B
+/************************************/
+
+shutter_process_idle:
+	call shutter_send_data_to_master
+	branch keyscan_key_process
+
+
+shutter_process_lpm_before:
+	call gpio_set_before_lpm
+	branch keyscan_process_lpm_before
+
+shutter_le_before_hibernate:
+	jam UI_BUTTON_GPIO_DISABLE,mem_ui_button_gpio
+	call gpio_set_before_lpm
+	branch disable_authrom
+
+//////////////////////////////////////////////////////////////////////////////////////////
+
+
+/****************shutter bluetooth control**********************/
+shutter_stop_bluetooth_discovery:
+//	fetch 1,mem_shutter_bluetooth_type
+//	bbit1 BLE_SHUTTER,ble_shutter_stop_bluetooth_discovery
+//	rtn
+ble_shutter_stop_bluetooth_discovery:
+	fetch 2,mem_ble_shutter_connect_timeout
+	store 2,mem_shutter_sleep_timeout
+	store 2,mem_shutter_sleep_timer
+	branch app_ble_stop_adv
+
+
+shutter_start_bluetooth_discovery:
+	fetch 1,mem_shutter_soft_switch_power_state
+	rtnne SS_STATE_POWER_ON
+//	fetch 1,mem_shutter_bluetooth_type
+//	bbit1 BLE_SHUTTER,ble_shutter_start_discovery
+//	rtn
+ble_shutter_start_discovery:
+	fetch 2,mem_ui_state_map
+	rtnbit1 UI_STATE_BLE_CONNECTED
+	fetch 2,mem_ble_shutter_discovery_timeout
+	store 2,mem_shutter_sleep_timeout
+	store 2,mem_shutter_sleep_timer
+	fetch 2,mem_ble_shutter_discovery_adv_interval
+	call shutter_ble_adv_interval_set
+	call app_led_start_blink
+	fetch 4,mem_ble_shutter_discovery_blink_on_time
+	store 4,mem_shutter_led_struct_app_led_on_time
+	fetch 2,mem_ui_state_map
+	rtnbit1 UI_STATE_BLE_ADV
+	branch app_ble_start_adv
+
+shutter_soft_swtich_power_on:
+shutter_start_reconnect:
+	fetch 1,mem_shutter_soft_switch_power_state
+	rtnne SS_STATE_POWER_ON
+//	fetch 1,mem_shutter_bluetooth_type
+//	bbit1 BLE_SHUTTER,ble_shutter_start_reconnect
+//	rtn
+ble_shutter_start_reconnect:
+	fetch 2,mem_ble_shutter_reconn_timer
+	fetcht 2,mem_ble_shutter_reconn_timeout
+	storet 2,mem_ble_shutter_reconn_timer
+	nrtn blank
+	fetch 2,mem_ble_shutter_reconn_adv_interval
+	call shutter_ble_adv_interval_set
+	call app_led_start_blink
+	fetch 4,mem_ble_shutter_reconn_blink_on_time
+	store 4,mem_shutter_led_struct_app_led_on_time
+	fetch 2,mem_ui_state_map
+	rtnbit1 UI_STATE_BLE_ADV
+	branch app_ble_start_adv
+
+shutter_disconnect_current_connection:
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BLE_CONNECTED,app_ble_disconnect
+	branch shutter_stop_bluetooth_discovery
+/**************************************/
+/////////////////////////////////////////////////////////////////////////
+//output:if user is enable,mean,can send data
+shutter_check_data_enable:
+	call disable_user
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BLE_CONNECTED,shutter_check_ble_data_enable
+	rtn
+
+shutter_check_ble_data_enable:
+	fetch 1,mem_ble_shutter_enable_notify
+	rtn blank
+	branch enable_user
+/////////////////////////////////////////////////////////////////////////
+
+/////////////////////////////////////////////////////////////////////////
+//output:if user is enable,mean,bluetooth disconnect
+shutter_check_bluetooth_conn:
+	call disable_user
+	fetch 2,mem_ui_state_map
+	rtnbit1 UI_STATE_BLE_CONNECTED
+	branch enable_user
+/////////////////////////////////////////////////////////////////////////
+
+/////////////////////////////////////////////////////////////////////////
+shutter_change_bluetooth_status_bt_disconn:
+//	fetch 1,mem_shutter_bluetooth_type
+//	bbit1 BLE_SHUTTER,ble_shutter_change_bluetooth_status_bt_disconn
+//	rtn
+ble_shutter_change_bluetooth_status_bt_disconn:
+	branch shutter_start_reconnect
+
+/////////////////////////////////////////////////////////////////////////
+
+shutter_check_send_data:
+	disable user2
+	fetch 2,mem_shutter_sleep_timeout
+	store 2,mem_shutter_sleep_timer
+
+	call shutter_check_bluetooth_conn
+	branch shutter_change_bluetooth_status_bt_disconn,user
+
+	call shutter_check_data_enable
+	nrtn user
+	branch enable_user2
+
+//queue = key index
+//rega =1 press, =0 release
+shutter_key_change:
+	call shutter_check_send_data
+	nrtn user2
+	deposit rega
+	branch shutter_key_release,blank
+shutter_key_press:
+	call app_led_on
+	arg mem_key0_press,regc
+	branch push_queue_press_or_release
+
+shutter_key_release:
+	call app_led_off
+	arg mem_key0_release,regc
+
+push_queue_press_or_release:
+	arg MAX_QUEUE_NUM,pdata
+	imul32 queue,pdata
+	iadd regc,regc
+
+//input:regc the address that want push to queue buffer
+push_buffer_in_queue:
+	ifetch 1,regc
+	rtn blank
+	call queue_push_one_byte
+	increase 1,regc
+	branch push_buffer_in_queue
+
+
+shutter_send_data_to_master:
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BLE_CONNECTED,pop_queue_to_ble_data
+	rtn
+
+pop_queue_to_ble_data:
+	call le_fifo_check_nearly_full
+	nrtn blank
+	call queue_pop_one_byte
+	nrtn user
+	pincrease -1
+	mul32 pdata,SHUTTER_BLE_DATA_BUFFER,pdata
+	arg mem_ble_data_buffer1,temp
+	iadd temp,contr
+	branch le_send_notify_from_list
+
+///////////queue function////////////
+//input:pdata is data that want push
+queue_push_one_byte:
+	store 1,mem_pdatatemp
+	arg mem_pdatatemp,rega
+	branch queue_push
+
+queue_pop_one_byte:
+	arg mem_pdatatemp,rega
+	call queue_pop
+	nrtn user
+	fetch 1,mem_pdatatemp
+	rtn
+
+///////////queue function ending////////////
+ble_shutter_receive_data:
+	fetch 2,mem_le_att_handle
+	beq GATT_KEYBOARD_WRITE_HANDLE,ble_shutter_process_reconnect_complete
+	rtn
+
+shutter_init_param:
+	jam 0x02,mem_shutter_power_off_timeout
+/////////////ble connect interval//////////////
+	setarg 0x00200008
+	store 4,mem_ble_shutter_interval_min		//set min interval is 10ms,set max interval is 40ms
+	setarg 0x012c0005
+	istore 4,contw
+///////////////////////////////////////
+//////////////////MTU/////////////
+	jam 0x17,mem_le_local_mtu
+///////////////////////////////////////
+////////////////justwork/////////
+	setarg 0x1b
+ 	store 2,mem_le_pairing_handle
+	branch le_set_fixed_ltk_justwork
+///////////////////////////////////////
+
+shutter_load_buffer_config_form_DataRom:
+///////load data Rom/////////
+	arg BLE_KEY_VALUE_LIST_SIZE,loopcnt
+	arg mem_ble_data_buffer1,contw
+	arg BLE_SHUTTER_KEY_VALUE_LIST_ADDR,contr
+	branch memcpy_fast
+
+shutter_soft_swtich_power_off:
+	arg 0,rega
+	arg mem_shutter_power_off_led_style,regc
+	call ui_led_set_style_global
+	call shutter_disconnect_current_connection
+shutter_wait_power_off:
+	fetch 1,mem_shutter_power_off_timeout
+	store 1,mem_shutter_power_off_timer
+	rtn
+
+
+/*************soft swtich ui config*********************/
+ui_soft_swtich_init:
+	setarg SS_STATE_POWER_UP
+	call ui_soft_swtich_init_power_on_time
+	jam UI_BUTTON_STATE_UP,mem_ui_button_last_state
+	call ui_button_init
+	call ui_button_polling
+ui_soft_switch_first_power_on:
+	fetch 1,mem_shutter_soft_switch_first_power_on
+	branch ui_soft_swtich_init_next, blank
+	fetch 1,core_lpm_isogate
+	bbit1 cold_wake,ui_soft_switch_power_on
+ui_soft_swtich_init_next:
+	fetch 2,mem_ui_state_map
+	rtnbit1 UI_STATE_BTN_DOWN
+	branch app_enter_hibernate
+
+ui_soft_swtich_init_power_on_time:
+	fetcht 2,mem_power_param_ptr
+	istore 1,temp		//init power state
+	ifetch 1,contw		//power on time
+	store 1,mem_ui_button_timeout
+	rtn
+
+
+ui_soft_switch_botton_up:
+	fetch 2,mem_power_param_ptr
+	ifetch 1,pdata
+	rtnne SS_STATE_POWER_UP
+	branch app_enter_hibernate
+
+
+ui_soft_switch_botton_long_press:
+	fetcht 2,mem_power_param_ptr
+	ifetch 1,temp
+	beq SS_STATE_POWER_ON,ui_soft_switch_power_off
+ui_soft_switch_power_on:
+	setarg SS_STATE_POWER_ON
+	fetcht 2,mem_power_param_ptr
+	istore 1,temp		//init power state
+	add temp,SS_POWER_OFF_TIME,contr
+	ifetch 1,contr
+	istore 1,mem_ui_button_timeout
+	ifetch 2,contr
+	branch callback_func
+
+ui_soft_switch_power_off:
+	setarg SS_STATE_POWER_OFF
+	call ui_soft_swtich_init_power_on_time
+	add temp,SS_POWER_OFF_CB,contr
+	ifetch 2,contr
+	branch app_enter_hibernate,blank		//no call back function , just enter hibernate
+	branch callback_func
+
+/*************soft swtich ui config ending*********************/
+
+//pdata:adv interval value
+shutter_ble_adv_interval_set:
+	store 2,mem_lpm_interval
+	increase -4,pdata
+	store 2,mem_le_adv_interval
+	rtn
+
+le_send_notify_from_list:
+	ifetch 1,contr	//length
+	copy pdata,rega
+	ifetcht 2,contr	//handle
+	call store_contr
+	call le_att_malloc_tx_notify
+	copy rega,loopcnt
+	call get_contr
+	branch memcpy
+
+shutter_le_uuid_table_conf:
+	setarg BLE_SHUTTER_GATT_LIST_ADDR
+	store 2,mem_ui_le_uuid_table	//BLE ATT LIST END
+	rtn
+
+
+/*************shutter default_init starting*********************/
+shutter_default_init:
+	fetch 2,mem_shutter_key_conf0_temp
+	store 2,mem_shutter_key_conf0
+	fetch 1,mem_shutter_led_struct_app_led_gpio_temp
+	store 1,mem_shutter_led_struct_app_led_gpio
+	store 1,mem_shutter_power_off_led_style_gpio
+	fetch 1,mem_shutter_hard_soft_switch_case_temp
+	store 1,mem_shutter_hard_soft_switch_case
+	fetch 1,mem_shutter_soft_switch_button_gpio_temp
+	store 1,mem_shutter_soft_switch_button_gpio
+
+	setarg 0x0002
+	store 2,mem_key0_press
+	setarg 0x0001
+	store 2,mem_key1_press
+	setarg 0x0006
+	store 2,mem_key0_release
+	store 2,mem_key1_release
+	setarg mem_shutter_soft_switch_power_state
+	store 2,mem_power_param_ptr
+	setarg 0x201400
+	store 3,mem_shutter_soft_switch_power_state
+	jam 0x01,mem_lpm_mode
+	setarg 0x0100
+	store 2,mem_lpm_interval
+	jam 0x08,mem_lpm_overhead
+	jam 0x05,mem_lpm_mult
+	jam 0x02,mem_lpm_mult_timeout
+	setarg 0x0096
+	store 2,mem_ble_shutter_reconn_blink_on_time
+	istore 2,contw
+	setarg 0x0296
+	store 2,mem_ble_shutter_discovery_blink_on_time
+	istore 2,contw
+	setsect 0,0x10
+	setsect 1,0x8008
+	setsect 2,0x2c000
+	setsect 3,0x04
+	store 8,mem_ble_shutter_interval_min_new
+	jam 0x01,mem_ui_led_struct_num
+	setarg mem_shutter_led_struct_app_led
+	store 2,mem_ui_led_struct_ptr
+	setarg 0x0000
+	store 2,mem_shutter_led_struct_app_led
+	setsect 0,0x1a0
+	setsect 1,0x68
+	setsect 2,0x00
+	setsect 3,0x00
+	store 8,mem_shutter_led_struct_app_led_on_time
+	setarg 0x0301
+	store 2,mem_shutter_power_off_led_style
+	setsect 0,0x1a0
+	setsect 1,0xe8
+	setsect 2,0x00
+	setsect 3,0x00
+	store 8,mem_shutter_power_off_led_style_on_time
+	setarg 0x000e
+	store 2,mem_ble_shutter_reconn_adv_interval
+	setarg 0x0140
+	store 2,mem_ble_shutter_discovery_adv_interval
+	store 2,mem_le_adv_interval
+	setarg 0x0050
+	store 2,mem_ble_shutter_reconn_timeout
+	jam 0x07,mem_le_adv_channel_map
+	jam 0x00,mem_le_adv_enable
+	setsect 0,0xfb
+	setsect 1,0x2c212
+	setsect 2,0x800f
+	setsect 3,0x21
+	store 8,mem_local_rx_max_octets
+	setsect 0,0x0bb8
+	setsect 1,0x02ee
+	store 4,mem_ble_shutter_discovery_timeout
+	setarg mem_queue_each_size
+	store 2,mem_queue_ptr
+	setarg 0x2001
+	store 2,mem_queue_each_size
+	jam 0x1f,mem_le_adv_data_len
+	setsect 0,0x10102
+	setsect 1,0x80c1
+	setsect 2,0x18120
+	setsect 3,0x640c
+	store 9,mem_le_adv_data
+	setsect 0,0x3c1
+	istore 2,contw
+	jam 0x1f,mem_le_scan_data_len
+	setsect 0,0x2090d
+	setsect 1,0x34c15
+	setsect 2,0x28532
+	setsect 3,0x1d1d5
+	store 9,mem_le_scan_data
+	setsect 0,0x26574
+	setsect 1,0x1c
+	istore 3,contw
+	setarg mem_shutter_keyscan
+	store 2,mem_keyscan_ptr
+	jam 0x02,mem_shutter_key_num
+	setarg mem_shutter_nv_data
+	store 2,mem_nv_data_ptr
+	jam 0x05,mem_nv_data_number
+	fetch 1,mem_shutter_dy_conf
+	beq SHUTTER_TYPE,shutter_le_uuid_table_conf
+	beq SHUTTER_DY_TYPE,shutter_dy_le_uuid_table_conf
+	rtn
+
+
+/*************shutter default_init ending*********************/
+
+
+
+
+
+else
+	branch assert
+
+endif
Index: program/app_shutter_dy.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/app_shutter_dy.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/app_shutter_dy.prog	(working copy)
@@ -0,0 +1,1556 @@
+
+ifdef COMPILE_SHUTTER
+
+/*************dy config*********************/
+shutter_dy_6_key_conf:
+	//6key
+	fetch SHUTTER_SIX_KEY,mem_shutter_dy_key_conf
+	store SHUTTER_SIX_KEY,mem_shutter_key_conf0
+	jam SHUTTER_SIX_KEY,mem_shutter_key_num
+	setarg mem_shutter_key_num
+	store 2,mem_keyscan_ptr
+	rtn
+
+shutter_dy_7_key_conf:
+	//7key
+	fetch SHUTTER_SEVEN_KEY,mem_shutter_dy_key_conf
+	store SHUTTER_SEVEN_KEY,mem_shutter_key_conf0
+	jam SHUTTER_SEVEN_KEY,mem_shutter_key_num
+	setarg mem_shutter_key_num
+	store 2,mem_keyscan_ptr
+	rtn
+
+shutter_dy_8_key_conf:
+	//8key
+	fetch SHUTTER_EIGHT_KEY,mem_shutter_dy_key_conf
+	store SHUTTER_EIGHT_KEY,mem_shutter_key_conf0
+	jam SHUTTER_EIGHT_KEY,mem_shutter_key_num
+	setarg mem_shutter_key_num
+	store 2,mem_keyscan_ptr
+	rtn
+
+shutter_dy_key_conf:
+	fetch 1,mem_shutter_key_num_conf
+	beq SHUTTER_SIX_KEY,shutter_dy_6_key_conf
+	beq SHUTTER_SEVEN_KEY,shutter_dy_7_key_conf
+	beq SHUTTER_EIGHT_KEY,shutter_dy_8_key_conf
+	rtn
+
+shutter_dy_adv_conf:
+	bpatch patch17_7,mem_patch17
+	//adv data
+	fetch 8,mem_shutter_ble_discovery_time_conf
+	store 8,mem_ble_shutter_discovery_timeout
+	setarg 0x0096
+	store 2,mem_ble_shutter_reconn_timeout
+
+	fetch 7,mem_shutter_led_on_light_dark_led_conf
+	store 7,mem_shutter_led_struct_app_led
+	fetch 7,mem_shutter_led_off_light_dark_led_conf
+	store 7,mem_shutter_power_off_led_style
+
+	fetch 4,mem_shutter_reconn_blink_on_time_conf
+	store 4,mem_ble_shutter_reconn_blink_on_time
+	fetch 4,mem_shutter_discovery_blink_on_time_conf
+	store 4,mem_ble_shutter_discovery_blink_on_time
+	/*
+	fetch 8,mem_le_dy_adv_data
+	store 8,mem_le_adv_data
+	fetch 3,mem_le_dy_adv_data+8
+	store 3,mem_le_adv_data+8
+
+	fetch 8,mem_le_dy_scan_data
+	store 8,mem_le_scan_data
+	fetch 4,mem_le_dy_scan_data+8
+	store 4,mem_le_scan_data+8
+	*/
+
+	setarg 0x000e
+	store 2,mem_ble_shutter_reconn_adv_interval
+	setarg 0x0140
+	store 2,mem_ble_shutter_discovery_adv_interval
+	store 2,mem_le_adv_interval
+
+//	setarg mem_shutter_le_uuid_sup	//BLE ATT LIST
+//	store 2,mem_ui_le_uuid_table
+
+//	call shutter_load_dy_keyvalue_buffer_config_form_DataRom
+	rtn
+
+shutter_dy_le_uuid_table_conf:
+	setarg mem_shutter_le_uuid_sup	//BLE ATT LIST
+	store 2,mem_ui_le_uuid_table	//BLE ATT LIST END
+	rtn
+
+shutter_dy_init:
+	call enable_authrom
+	rtn wake
+
+	call shutter_dy_key_conf
+	call shutter_dy_adv_conf
+
+	setarg shutter_dy_process_idle
+	store 2,mem_cb_idle_process
+
+	setarg shutter_dy_process_bb_event
+	store 2,mem_cb_bb_event_process
+
+	setarg ble_shutter_dy_receive_data
+	store 2,mem_cb_att_write
+
+	setarg shutter_dy_le_bb_event_timer
+	store 2,mem_cb_event_timer
+
+	setarg shutter_dy_key_change
+	store 2,mem_cb_shutter_keycan
+
+	setarg shutter_dy_le_before_hibernate
+	store 2,mem_cb_before_hibernate
+
+	setarg shutter_dy_process_lpm_before
+	store 2,mem_cb_before_lpm
+
+	setarg shutter_soft_swtich_power_on
+	store 2,mem_shutter_soft_switch_poweron_callback_function
+
+	setarg shutter_soft_swtich_power_off
+	store 2,mem_shutter_soft_switch_poweroff_callback_function
+
+	jam 7,mem_version
+	call le_modified_name_adv
+	call shutter_init_param
+	call keyscan_key_init
+	call queue_init
+	call ui_led_init_global
+
+	fetch 2,mem_shutter_le_pairing_handle
+ 	store 2,mem_le_pairing_handle
+	fetch 8,mem_ble_shutter_interval_min_new
+	store 8,mem_ble_shutter_interval_min
+	call shutter_dy_iphone_every_move_max_set
+	bpatch patch18_0,mem_patch18
+	branch shutter_power_switch
+
+shutter_dy_process_lpm_before:
+	call gpio_set_before_lpm
+	branch keyscan_process_lpm_before
+
+shutter_dy_le_before_hibernate:
+	jam UI_BUTTON_GPIO_DISABLE,mem_ui_button_gpio
+	call gpio_set_before_lpm
+	call dy_set_key_gpio_before_hiernate
+	branch disable_authrom
+
+dy_set_key_gpio_before_hiernate:
+	fetch 1,mem_shutter_hard_soft_switch_case_temp
+	rtn blank
+	fetch 1,mem_shutter_key_num_conf
+	copy pdata,loopcnt
+	arg mem_shutter_key_conf0,rega
+dy_set_key_gpio_loop:
+	ifetch 1,rega
+	fetcht 1,mem_shutter_soft_switch_button_gpio_temp
+	isub temp,null
+	branch dy_set_key_gpio_loop_end,zero
+	sub pdata,0xff,null
+	branch dy_set_key_gpio_loop_end,zero
+	copy pdata,temp
+	call dy_shutter_gpio_config_input_pd
+dy_set_key_gpio_loop_end:
+	increase 1,rega
+	loop dy_set_key_gpio_loop
+	rtn
+
+dy_shutter_gpio_config_input_pd:
+	set1 gpio_active_bit,temp
+	branch gpio_config_input
+
+shutter_dy_process_idle:
+	call shutter_dy_shutter_send_data_to_master
+	arg key_scan_timer,queue
+	call timer_check
+	nrtn blank
+	setarg 0x20
+	arg key_scan_timer,queue
+	call timer_init
+	disable user
+	call keyscan_process_lpm_before
+	branch shutter_dy_keyscan_key_process
+
+shutter_dy_iphone_every_move_max_set:
+	setarg 0x2b
+	mul32 pdata,EVERY_PAYLOAD_LEN,pdata
+	arg mem_shutter_mousekey_value_list,temp
+	iadd temp,rega
+	increase 3,rega
+	arg IPHONE_ONCE_MAX_MOVE_VALUE,temp
+	istoret 1,rega
+	increase 11,rega
+	arg 0xfff,pdata
+	isub temp,pdata
+	lshift4 pdata,pdata
+	istore 2,rega
+	rtn
+
+shutter_dy_shutter_send_data_to_master:
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BLE_CONNECTED,shutter_dy_pop_queue_to_ble_data
+	arg mem_queue_curr_num,contw
+	arg 35,loopcnt
+	branch clear_mem
+
+shutter_dy_pop_queue_to_ble_data:
+	call le_fifo_check_nearly_full
+	nrtn blank
+	call queue_empty
+	rtn blank
+	fetcht 4,mem_key_send_clk
+	copy clkn_bt,pdata
+	isub temp,temp
+	rtn zero
+	nbranch shutter_dy_pop_queue_to_ble_data2, positive
+	fetch 1,mem_send_data_delay
+	isub temp,null
+	rtn positive
+shutter_dy_pop_queue_to_ble_data2:
+	copy clkn_bt,pdata
+	store 4,mem_key_send_clk
+	call queue_pop_one_byte
+	nrtn user
+	pincrease -1
+	mul32 pdata,10,pdata
+	arg mem_shutter_mousekey_value_list,temp
+	iadd temp,contr
+	branch le_send_notify_from_list
+
+
+shutter_dy_le_bb_event_timer:
+	call shutter_dy_shutter_1s_timer
+	call shutter_dy_link_key_loop_timer
+	call shutter_dy_long_key_volume_timer
+	call shutter_dy_iphone_move_mid_timer
+	call shutter_dy_clear_key_state_timer
+	call shutter_check_sleep_timer
+	branch shutter_dy_check_power_off_timer
+
+shutter_dy_iphone_move_mid_timer:
+	arg mem_shutter_move_mid_timer,regc
+	arg shutter_dy_iphone_move_mid_timeout,regb
+	branch timer_single_step
+
+shutter_dy_iphone_move_mid_timeout:
+	call queue_empty
+	nrtn blank
+	fetch 2,mem_key_value_xmem
+	nrtn blank
+shutter_dy_iphone_move_mid:
+	call shutter_dy_check_iphone
+	rtn blank
+	copy queue,pdata
+	compare 0x04,pdata,0x07 //SHUTTER_UP_KEY_NUM
+	branch shutter_dy_iphone_up_mid,true
+
+	copy queue,pdata
+	compare 0x01,pdata,0x07 //SHUTTER_LIKE_KEY_NUM
+	branch shutter_dy_iphone_like_mid,true
+	arg mem_shutter_iphone_move_mid,regc
+	branch push_buffer_in_queue
+
+shutter_dy_iphone_up_mid:
+	arg mem_shutter_iphone_up_mid,regc
+	branch push_buffer_in_queue
+
+shutter_dy_iphone_like_mid:
+	arg mem_shutter_iphone_like_mid,regc
+	branch push_buffer_in_queue
+
+shutter_dy_clear_key_state_timer:
+	arg mem_shutter_like_timeout,regc
+	arg shutter_dy_clear_key_state_timeout,regb
+	branch timer_single_step
+
+shutter_dy_clear_key_state_timeout:
+	arg SHUTTER_KEY_CONF_SATE_BYTES,loopcnt
+	arg mem_shutter_key_state1,contw
+	branch clear_mem
+
+
+shutter_dy_check_power_off_timer:
+	arg mem_shutter_power_off_timer,regc
+	arg shutter_dy_check_power_off_timeout,regb
+	branch timer_single_step
+shutter_dy_check_power_off_timeout:
+	fetch 2,mem_ui_state_map
+	bbit1 UI_STATE_BLE_CONNECTED,shutter_wait_power_off
+	branch app_enter_hibernate
+
+shutter_dy_process_bb_event:
+	copy regc,pdata
+	beq BT_EVT_LE_CONNECTED,ble_shutter_dy_process_baseband_connect
+	beq BT_EVT_LE_DISCONNECTED,ble_shutter_dy_process_baseband_disconnect
+	beq BT_EVT_LE_PAIRING_SUCCESS,ble_shutter_dy_pairing_success
+	beq BT_EVT_LE_PARSE_CONN_PAPA_UPDATE_RSP,ble_dy_shutter_process_parse_connect_parameter_update_response
+	rtneq BT_EVT_LE_PARSE_CONN_PAPA_UPDATE_RSP
+	beq BT_EVT_LE_START_ENC,shutter_dy_le_find_service_hand_by_uuid
+	branch shutter_process_bb_event
+
+ble_dy_shutter_process_parse_connect_parameter_update_response:
+	fetch 2,mem_le_l2cap_signaling_conn_param_update_rsp_result
+	rtneq BLE_SIGNALING_CONNECT_PARAMETER_UPDATE_ACCEPTED
+	fetch 8,mem_ble_shutter_interval_min_new
+	rtn blank
+	call shutter_dy_check_iphone
+	nbranch ble_parameter_updata_response_ios,blank
+	fetch 8,mem_ble_shutter_dy_interval_min_android
+	store 8,mem_le_interval_min
+	branch le_l2cap_tx_update_req
+
+ble_parameter_updata_response_ios:
+	fetch 8,mem_ble_shutter_dy_interval_min_ios
+	store 8,mem_le_interval_min
+	branch le_l2cap_tx_update_req
+
+ble_shutter_dy_pairing_success:
+	jam 1,mem_shutter_pairing_success
+	call shutter_dy_clear_move_config
+//	setarg ANDROID_INITIAL_MOVE_X
+	fetch 2,mem_android_initial_move_x
+	store 2, mem_shutter_move_data_x
+//	arg ANDROID_INITIAL_MOVE_Y,temp
+	fetcht 2,mem_android_initial_move_y
+	setarg 0xfff
+	isub temp,pdata
+	store 2, mem_shutter_move_data_y
+	rtn
+
+ble_shutter_dy_process_baseband_disconnect:
+	jam 0,mem_shutter_le_conned
+	jam 0,mem_shutter_pairing_success
+	call shutter_dy_move_mode_disable
+	call shutter_dy_over_clear
+	branch ble_shutter_process_baseband_disconnect
+
+ble_shutter_dy_process_baseband_connect:
+	copy clkn_bt,pdata
+	store 4,mem_key_send_clk
+	call shutter_dy_remote_not_iphone
+	branch ble_shutter_process_baseband_connect
+
+
+shutter_dy_check_send_data:
+	disable user2
+	fetch 2,mem_shutter_sleep_timeout
+	store 2,mem_shutter_sleep_timer
+	call shutter_check_bluetooth_conn
+	branch shutter_change_bluetooth_status_bt_disconn,user
+	call shutter_check_data_enable
+	nrtn user
+	branch enable_user2
+
+shutter_dy_over_clear:
+	jam 0,mem_last_press_key_value
+	rtn
+
+shutter_dy_key_value_filter:
+	copy queue,pdata
+	rtnne SHUTTER_LIKE_KEY_NUM
+	branch shutter_dy_key_press_next
+
+shutter_dy_key_change:
+	call shutter_dy_check_send_data
+	nrtn user2
+	deposit rega
+	branch shutter_dy_shutter_key_release,blank//no data release
+shutter_dy_key_press:
+	bpatch patch18_1,mem_patch18
+	fetch 1,mem_shutter_link_loop_flag
+	nbranch shutter_dy_key_value_filter,blank
+shutter_dy_key_press_next:
+	jam 1,mem_shutter_key_pressed
+	call app_led_on
+	call shutter_dy_key_press_clk
+	call shutter_dy_jude_queue_size
+	branch shutter_dy_over_clear,positive
+	copy queue,pdata
+	fetcht 1,mem_last_press_key_value
+	isub temp,null
+	ncall shutter_dy_iphone_check_move_mid,zero
+	copy queue,pdata
+	store 1,mem_last_press_key_value
+	fetcht 1,mem_move_mode_key_index
+	isub temp,null
+	branch shutter_dy_key_move_to_specify_location,zero
+	fetch 1,mem_move_mode_trigger_enable
+	nbranch shutter_dy_move_set,blank
+shutter_dy_page_set:
+	call shutter_dy_le_get_press_ptr
+	arg MAX_QUEUE_NEW_PRESS,pdata
+	branch shutter_dy_push_queue_press_or_release
+
+shutter_dy_move_set:
+	call shutter_dy_jude_clear_move_config
+	copy queue,pdata
+	beq SHUTTER_LIKE_KEY_NUM,shutter_dy_page_set
+	call shutter_dy_check_move_data
+	branch shutter_dy_move_to_specify_location
+
+shutter_dy_key_move_to_specify_location:
+	jam 1,mem_shutter_first_move
+	branch shutter_dy_move_to_specify_location
+
+shutter_dy_iphone_check_move_mid:
+	bpatch patch18_2,mem_patch18
+	fetch 1,mem_move_mode_trigger_enable
+	branch shutter_dy_iphone_move_mid,blank
+	copy queue,pdata
+	beq SHUTTER_LIKE_KEY_NUM,shutter_dy_iphone_move_mid
+	rtn
+shutter_dy_key_press_clk:
+	arg SHUTTER_KEY_CONF_SATE_BYTES,pdata
+	imul32 queue,pdata
+	arg mem_shutter_key_state0,regc
+	iadd regc,regc
+	copy clkn_bt,pdata
+	istore KEY_STATE_PRESS_CLK_LENGTH,regc
+	increase KEY_STATE_PRESS_COUNT_OFFSET,regc
+	ifetch 1,regc
+	increase 1,pdata
+	istore 1,regc
+	rtn
+shutter_dy_shutter_key_release:
+	bpatch patch18_3,mem_patch18
+	fetch 1,mem_move_mode_trigger_enable
+	call shutter_dy_key_release_led,blank
+shutter_dy_shutter_key_release_time:
+	arg SHUTTER_KEY_CONF_SATE_BYTES,pdata
+	imul32 queue,pdata
+	arg mem_shutter_key_state0,regc
+	iadd regc,regc
+	ifetcht  4,regc
+	sub temp,0,null
+	rtn zero //already release
+	copy clkn_bt,pdata
+	isub temp,temp
+	ncall ui_timer_timeout,positive
+	add regc,KEY_STATE_LONGPRESS_OFFSET,contr
+	ifetch 1,contr
+	nbranch shutter_dy_push_queue_long_release, blank
+	increase KEY_STATE_RELEASE_CLK_OFFSET,regc
+	copy clkn_bt,pdata
+	istore KEY_STATE_RELEASE_CLK_LENGTH,regc
+	rtn
+
+shutter_dy_key_release_led:
+	fetch 1,mem_shutter_link_loop_flag
+	nbranch app_led_on,blank
+	branch app_led_off
+
+shutter_dy_push_queue_release:
+	add regc,4,contr
+	ifetch 1,contr
+	branch shutter_dy_push_queue_release1
+
+shutter_dy_push_queue_release1:
+	call shutter_clear_dy_key_state
+	fetch 1,mem_move_mode_trigger_enable
+	nbranch shutter_dy_move_mode_queue_release,blank
+shutter_dy_push_queue_release1_next:
+	call shutter_dy_jude_queue_size
+	branch shutter_dy_over_clear,positive
+	call shutter_dy_le_get_release_ptr
+	copy queue,pdata
+	beq SHUTTER_PHOTO_KEY_NUM,shutter_dy_le_get_release_ptr_volume
+	arg MAX_QUEUE_NUM_RELEASE,pdata
+shutter_dy_push_queue_press_or_release:
+	imul32 queue,pdata
+	iadd regc,regc
+	branch push_buffer_in_queue
+
+shutter_dy_move_mode_queue_release:
+	copy queue,pdata
+	beq SHUTTER_LIKE_KEY_NUM,shutter_dy_push_queue_release1_next
+	beq SHUTTER_PHOTO_KEY_NUM,shutter_dy_push_queue_release1_next
+	rtn
+
+shutter_dy_jude_queue_size:
+	call queue_get_size
+	ifetcht 1,contr
+	isub temp,pdata
+	sub pdata,MAX_QUEUE_NEW_PRESS,null
+	rtn
+
+shutter_dy_push_queue_long_release:
+	jam 1,mem_shutter_long_key_released_flag
+	call shutter_clear_dy_key_state
+	call shutter_dy_clear_volume_timer
+	arg mem_key0_long_release,regc
+	arg MAX_QUEUE_NUM_LONG_RELEASE,pdata
+	branch shutter_dy_push_queue_press_or_release
+
+shutter_clear_dy_key_state:
+	arg SHUTTER_KEY_CONF_SATE_BYTES,loopcnt
+	copy regc,contw
+	branch clear_mem
+
+shutter_dy_keyscan_key_process:
+	fetch 2,mem_key_value_xmem
+	store 2,mem_key_value_retention
+	call shutter_dy_keyscan_key_process_next
+	fetch 2,mem_key_value_retention
+	store 2,mem_key_value_xmem
+
+	arg 0,queue
+	fetch 1,mem_shutter_key_num
+	copy pdata,loopcnt
+	arg mem_shutter_key_state0,regc
+shutter_dy_keyscan_key_check_release_loop:
+	copy loopcnt,pdata
+	store 2,mem_temp
+	copy regc,pdata
+	store 2,mem_regc
+	copy queue,pdata
+	store 2,mem_temp+2
+	call shutter_dy_keyscan_key_check_release
+
+	fetch 2,mem_regc
+	copy pdata,regc
+	fetch 2,mem_temp+2
+	copy pdata,queue
+	call shutter_dy_keyscan_key_check_long_press
+
+	fetch 2,mem_temp+2
+	add pdata,1,queue
+	fetch 2,mem_regc
+	add pdata,SHUTTER_KEY_CONF_SATE_BYTES,regc
+	fetch 2,mem_temp
+	copy pdata,loopcnt
+	loop shutter_dy_keyscan_key_check_release_loop
+	rtn
+
+shutter_dy_keyscan_key_check_long_press:
+	ifetch KEY_STATE_PRESS_CLK_LENGTH,regc
+	rtn blank
+	copy pdata,temp
+	copy clkn_bt,pdata
+	isub temp,temp
+	nrtn positive
+	setarg 2500 //1000ms 3200
+	isub temp,null
+	rtn positive
+	copy clkn_bt,pdata
+	istore 4,regc
+	increase KEY_STATE_LONGPRESS_OFFSET,regc
+	setarg 1  //long press flag
+	istore KEY_STATE_LONGPRESS_LENGTH,regc
+	fetch 1,mem_shutter_long_key_released_flag
+	rtn blank
+	jam 0,mem_shutter_long_key_released_flag
+	bpatch patch18_4,mem_patch18
+	call shutter_dy_long_key_function
+	fetch 1,mem_move_mode_set
+	beq MOVE_COMBINE_KEY,shutter_dy_key_long_press_set_key_normal
+	beq MOVE_SINGLE_KEY,shutter_dy_key_long_press_set_move_trigger
+	rtn
+
+shutter_dy_key_long_press_set_key_normal:
+	call shutter_dy_long_press_android_or_ios
+	arg MAX_QUEUE_NUM_LONG,pdata
+	branch shutter_dy_push_queue_press_or_release
+
+shutter_dy_key_long_press_set_move_trigger:
+	copy queue,pdata
+	fetcht 1,mem_move_mode_key_index
+	isub temp,null
+	nbranch shutter_dy_key_long_press_set_key_normal,zero
+	fetch 1,mem_move_mode_trigger_enable
+	setflip 0,pdata
+	store 1,mem_move_mode_trigger_enable
+	nrtn blank
+shutter_dy_move_mode_disable:
+	jam 0,mem_move_mode_trigger_enable
+	branch app_led_off
+
+shutter_dy_long_press_android_or_ios:
+	arg mem_key0_long_press,regc
+	call shutter_dy_check_iphone
+	rtn blank
+	arg mem_key0_long_press_i,regc
+	rtn
+
+shutter_dy_keyscan_key_check_release:
+	add regc,KEY_STATE_RELEASE_CLK_OFFSET,regb
+	ifetch KEY_STATE_RELEASE_CLK_LENGTH,regb
+	rtn blank
+	copy pdata,temp
+	copy clkn_bt,pdata
+	isub temp,temp
+	ncall ui_timer_timeout,positive
+	setarg 1000 //100ms 320
+	isub temp,null
+	branch shutter_dy_push_queue_release
+shutter_dy_keyscan_key_process_next:
+	fetch 2,mem_key_num_ptr
+	ifetch 1,pdata
+	rtn blank
+
+	setarg 0
+	store 2,mem_key_value_temp
+	call keyscan_scan_key
+	nbranch lpm_button_clean_wake_lock,user
+	call lpm_button_get_wake_lock
+	disable user
+	fetch 1,mem_le_adv_enable
+	nrtn blank
+	bpatch patch18_5,mem_patch18
+	fetch 1,mem_move_mode_set
+	beq MOVE_SINGLE_KEY,shutter_dy_skip_check_combine_key
+	call shutter_dy_check_combine_key_release
+	call shutter_dy_check_combine_key
+	rtn user
+shutter_dy_skip_check_combine_key:
+	call shutter_dy_single_key_led
+	fetch 2,mem_key_value_temp
+	store 2,mem_key_value_temp4
+	jam 0,mem_key_value_temp6
+	force 0,queue
+	branch keyscan_key_lp1
+
+shutter_dy_single_key_led:
+	fetch 1,mem_last_press_key_value
+	fetcht 1,mem_move_mode_key_index
+	isub temp,null
+	branch app_led_on,zero
+	fetch 1,mem_move_mode_trigger_enable
+	nbranch app_led_off,blank
+	rtn
+
+shutter_dy_check_combine_key:
+	arg 0,queue
+shutter_dy_check_combine_key_loop:
+	arg mem_combine_key0,regb
+	arg 2,pdata
+	imul32 queue,pdata
+	iadd regb,regb
+	ifetch 2,regb
+
+	rtn blank
+	fetcht 2,mem_key_value_temp
+	ixor temp,null
+	branch shutter_dy_check_combine_key_parse,zero
+	increase 1,queue
+	branch shutter_dy_check_combine_key_loop
+
+shutter_dy_check_combine_key_parse:
+	store 2,mem_combine_key_state0
+	call app_led_on
+	arg mem_combine_key0_press,regc
+	arg MAX_QUEUE_NUM_COMBINEKEY,pdata
+	imul32 queue,pdata
+	iadd regc,regc
+	call shutter_dy_push_buffer_in_queue
+	branch shutter_dy_combine_key_enableuser
+
+shutter_dy_push_buffer_in_queue:
+	call shutter_dy_jude_clear_move_config
+	ifetch 1,regc
+	rtn blank
+	call shutter_dy_check_move_data
+shutter_dy_move_to_specify_location:
+	call shutter_dy_jude_clear_move_config
+	call shutter_dy_check_iphone
+	nbranch shutter_dy_move_ios_to_specify_location,blank
+	arg 0x1c,pdata
+	call queue_push_one_byte
+	arg 0x1d,pdata
+	branch queue_push_one_byte
+
+shutter_dy_move_ios_to_specify_location:
+	call shutter_dy_move_down_left_corner
+	call shutter_dy_move_x_max
+	call shutter_dy_move_y_max
+	arg 0x29,pdata
+	branch queue_push_one_byte
+
+shutter_dy_move_down_left_corner_count_set:
+	fetcht 1,mem_shutter_back_count
+	call shutter_dy_check_iphone
+	rtn blank
+	fetcht 1,mem_shutter_iphone_beyond_y_count
+	increase 1,temp
+	fetch 1,mem_shutter_first_move
+	rtn blank
+	fetcht 1,mem_shutter_back_count
+	jam 0,mem_shutter_first_move
+	rtn
+
+shutter_dy_move_down_left_corner:
+	call shutter_dy_move_down_left_corner_count_set
+	copy temp,pdata
+	rtn blank
+	store 1,mem_shutter_back_count_cache
+shutter_dy_move_down_left_corner_loop:
+	arg 0x2b,pdata
+	call queue_push_one_byte
+	fetch 1,mem_shutter_back_count_cache
+	increase -1,pdata
+	store 1,mem_shutter_back_count_cache
+	rtn blank
+	branch shutter_dy_move_down_left_corner_loop
+
+shutter_dy_move_x_max:
+	fetch 1,mem_shutter_iphone_beyond_x_count
+	rtn blank
+	store 1,mem_shutter_iphone_beyond_x_cache
+shutter_dy_move_x_max_number:
+	arg 0x2c,pdata
+	call queue_push_one_byte
+	fetch 1,mem_shutter_iphone_beyond_x_cache
+	increase -1,pdata
+	store 1,mem_shutter_iphone_beyond_x_cache
+	rtn blank
+	branch shutter_dy_move_x_max_number
+
+shutter_dy_move_y_max:
+	fetch 1,mem_shutter_iphone_beyond_y_count
+	rtn blank
+	store 1,mem_shutter_iphone_beyond_y_cache
+shutter_dy_move_y_max_number:
+	arg 0x2d,pdata
+	call queue_push_one_byte
+	fetch 1,mem_shutter_iphone_beyond_y_cache
+	increase -1,pdata
+	store 1,mem_shutter_iphone_beyond_y_cache
+	rtn blank
+	branch shutter_dy_move_y_max_number
+
+shutter_dy_check_combine_key_release:
+	fetch 2,mem_combine_key_state0
+	rtn blank
+	fetcht 2,mem_key_value_temp
+	sub temp,0,null
+	branch shutter_dy_check_combine_key_release_all,zero
+	isub temp,null
+	rtn zero
+	storet 2,mem_combine_key_state0
+	fetch 2,mem_combine_key_release_value
+	isub temp,null
+	call app_led_off,zero
+shutter_dy_combine_key_enableuser:
+	fetch 2,mem_key_value_temp
+	store 2, mem_key_value_retention
+	branch enable_user
+shutter_dy_check_combine_key_release_all:
+	jam 1,mem_shutter_long_key_released_flag
+	call app_led_off
+	arg mem_combine_key_release,regc
+	call shutter_dy_push_buffer_in_queue
+	setarg 0
+	store 2,mem_combine_key_state0
+	jam 50,mem_shutter_1s_timer
+	call shutter_dy_combine_key_enableuser
+	fetch 1,mem_shutter_key_num
+	mul32 pdata,SHUTTER_KEY_CONF_SATE_BYTES,loopcnt
+	arg mem_shutter_key_state0,contw
+	branch clear_mem
+shutter_dy_check_move_data:
+	bpatch patch18_6,mem_patch18
+	fetch 1,mem_move_mode_set
+	beq MOVE_SINGLE_KEY,shutter_dy_check_move_data_single_key
+	beq MOVE_COMBINE_KEY,shutter_dy_check_move_data_combine_key
+	rtn
+shutter_dy_check_move_data_single_key:
+	copy queue,pdata
+	beq SHUTTER_LEFT_KEY_NUM,shutter_dy_move_left
+	beq SHUTTER_RIGHT_KEY_NUM,shutter_dy_move_right
+	beq SHUTTER_UP_KEY_NUM,shutter_dy_move_up
+	beq SHUTTER_DOWN_KEY_NUM,shutter_dy_move_down
+	rtn
+shutter_dy_check_move_data_combine_key:
+	ifetch 1,regc
+	beq 0x01,shutter_dy_move_left
+	beq 0x02,shutter_dy_move_right
+	beq 0x03,shutter_dy_move_up
+	beq 0x04,shutter_dy_move_down
+	beq 0x05,shutter_dy_get_move_data
+	rtn
+
+shutter_dy_get_move_data:
+	call shutter_dy_check_iphone
+	nbranch shutter_dy_get_move_data_iphone,blank
+	setarg 0x1b
+	mul32 pdata,EVERY_PAYLOAD_LEN,pdata
+	arg mem_shutter_mousekey_value_list,temp
+	iadd temp,contw
+	increase 5,contw
+	fetch 4,mem_shutter_move_data
+	istore 4,contw
+	rtn
+
+shutter_dy_get_move_data_iphone:
+	setarg 0x29
+	mul32 pdata,EVERY_PAYLOAD_LEN,pdata
+	arg mem_shutter_mousekey_value_list,temp
+	iadd temp,contw
+	increase 3,contw
+	fetch 2,mem_shutter_move_data_x
+	istore 3,contw
+	increase 7,contw
+	fetch 2,mem_shutter_move_data_y
+	lshift4 pdata,pdata
+	lshift8 pdata,pdata
+	istore 3,contw
+	rtn
+	//branch p_store_move_config_info
+shutter_dy_move_x_empty_check:
+	fetch 1,mem_shutter_iphone_beyond_x_count
+	rtn blank
+	increase -1,pdata
+	store 1,mem_shutter_iphone_beyond_x_count
+	arg IPHONE_ONCE_MAX_MOVE_VALUE,pdata
+	rtn
+shutter_dy_every_move_size_set:
+	arg ANDROID_EVERY_MOVE_SIZE,temp
+	call shutter_dy_check_iphone
+	rtn blank
+	arg IPHONE_EVERY_MOVE_SIZE,temp
+	rtn
+shutter_dy_move_left:
+	call shutter_dy_every_move_size_set
+	fetch 2,mem_shutter_move_data_x
+	isub temp,null
+	ncall shutter_dy_move_x_empty_check,positive
+	nrtn positive//if move_x to zero,rtn
+	isub temp,pdata
+shutter_dy_move_store_x:
+	store 2,mem_shutter_move_data_x
+shutter_dy_move_data_store:
+	bpatch patch18_7,mem_patch18
+	call shutter_dy_check_iphone
+	branch shutter_dy_move_android_data_store,blank	//android
+	//ios
+	fetch 2,mem_shutter_move_data_x
+	fetcht 2,mem_shutter_move_data_y
+	lshift8 temp,temp
+	lshift4 temp,temp
+	iadd temp,pdata
+	store 3,mem_shutter_move_data
+	call shutter_dy_get_ios_move_data
+	branch shutter_dy_move_ios_release_data
+
+shutter_dy_get_ios_move_data:
+	setarg 0x28
+	mul32 pdata,EVERY_PAYLOAD_LEN,pdata
+	arg mem_shutter_mousekey_value_list,temp
+	iadd temp,contw
+	increase 3,contw
+	fetch 3,mem_shutter_move_data
+	istore 3,contw
+	rtn
+
+shutter_dy_move_ios_release_data:
+	setarg 0x29
+	mul32 pdata,EVERY_PAYLOAD_LEN,pdata
+	arg mem_shutter_mousekey_value_list,temp
+	iadd temp,contw
+	increase 3,contw
+	fetch 3,mem_shutter_move_data
+	istore 3,contw
+	rtn
+
+shutter_dy_move_android_data_store:
+	fetch 2,mem_shutter_move_data_x
+	fetcht 2,mem_shutter_move_data_y
+	lshift16 temp,temp
+	iadd temp,pdata
+	store 4,mem_shutter_move_data
+	call shutter_dy_move_android_release_data
+	branch shutter_dy_data_android_xy_data
+
+shutter_dy_move_android_release_data:
+	setarg 0x1b
+	mul32 pdata,EVERY_PAYLOAD_LEN,pdata
+	arg mem_shutter_mousekey_value_list,temp
+	iadd temp,contw
+	increase 5,contw
+	fetch 4,mem_shutter_move_data
+	istore 4,contw
+	rtn
+
+shutter_dy_data_android_xy_data:
+	setarg 0x1c
+	mul32 pdata,EVERY_PAYLOAD_LEN,pdata
+	arg mem_shutter_mousekey_value_list,temp
+	iadd temp,contw
+	increase 5,contw
+	fetch 4,mem_shutter_move_data
+	istore 4,contw
+	rtn
+
+shutter_dy_move_x_check_max:
+	fetch 2,mem_shutter_move_data_x
+	arg IPHONE_ONCE_MAX_MOVE_VALUE,temp
+	isub temp,temp
+	nrtn positive
+	copy temp,pdata
+	fetcht 1,mem_shutter_iphone_beyond_x_count
+	sub temp,0x03,null
+	branch shutter_dy_clear_move_x,zero
+	increase 1,temp
+	storet 1,mem_shutter_iphone_beyond_x_count
+	branch shutter_dy_move_store_x
+shutter_dy_clear_move_x:
+	jam 0,mem_shutter_iphone_beyond_x_count
+	arg 0,pdata
+	branch shutter_dy_move_store_x
+shutter_dy_move_right:
+	call shutter_dy_check_iphone
+	ncall shutter_dy_move_x_check_max,blank
+	call shutter_dy_every_move_size_set
+	fetch 2,mem_shutter_move_data_x
+shutter_dy_move_right_next:
+	iadd temp,pdata
+	arg 0xfff,temp
+	call ceiling
+	branch shutter_dy_move_store_x
+
+shutter_dy_move_up:
+	call shutter_dy_check_iphone
+	branch shutter_dy_dnroid_up_check_y,blank
+shutter_dy_move_y_check_max:
+	call shutter_dy_every_move_size_set
+	fetch 2,mem_shutter_move_data_y
+	isub temp,pdata
+	store 2,mem_shutter_move_data_y
+	fetcht 2,mem_shutter_move_data_y
+	setarg 0xfff
+	isub temp,pdata
+	arg IPHONE_ONCE_MAX_MOVE_VALUE,temp
+	isub temp,temp
+	nbranch shutter_dy_move_data_store, positive
+	setarg 0xfff
+	isub temp,pdata
+	fetcht 1,mem_shutter_iphone_beyond_y_count
+	sub temp,0x05,null
+	branch shutter_dy_clear_move_y,zero
+	increase 1,temp
+	storet 1,mem_shutter_iphone_beyond_y_count
+	branch shutter_dy_move_store_y
+
+shutter_dy_dnroid_up_check_y:
+	call shutter_dy_every_move_size_set
+	fetch 2,mem_shutter_move_data_y
+	isub temp,null
+	nrtn positive
+	isub temp,pdata
+	store 2,mem_shutter_move_data_y
+	branch shutter_dy_move_data_store
+
+
+shutter_dy_clear_move_y:
+	jam 0,mem_shutter_iphone_beyond_y_count
+shutter_dy_android_move_y_empty_check:
+	setarg 0xfff
+	branch shutter_dy_move_store_y
+
+shutter_dy_move_y_empty_check:
+	call shutter_dy_check_iphone
+	branch shutter_dy_android_move_y_empty_check,blank
+	fetch 1,mem_shutter_iphone_beyond_y_count
+	branch shutter_dy_android_move_y_empty_check, blank
+	increase -1,pdata
+	store 1,mem_shutter_iphone_beyond_y_count
+	setarg 0xffff
+	arg IPHONE_ONCE_MAX_MOVE_VALUE,temp
+	isub temp,pdata
+	iadd rega,pdata
+shutter_dy_move_store_y:
+	store 2,mem_shutter_move_data_y
+	branch shutter_dy_move_data_store
+
+shutter_dy_move_down:
+	call shutter_dy_check_iphone
+	branch shutter_dy_move_android_down,blank
+shutter_dy_move_down_next:
+	call shutter_dy_every_move_size_set
+	fetch 2,mem_shutter_move_data_y
+	iadd temp,pdata
+	arg 0xfff,temp
+	isub temp,rega
+	call shutter_dy_move_y_empty_check,positive
+	branch shutter_dy_move_store_y
+
+shutter_dy_move_android_down:
+	call shutter_dy_every_move_size_set
+	fetch 2,mem_shutter_move_data_y
+	iadd temp,pdata
+	arg 0xfff,temp
+	call ceiling
+	branch shutter_dy_move_store_y
+
+ble_shutter_dy_receive_data:
+	fetch 2,mem_le_att_handle
+	beq GATT_KEYBOARD_WRITE_HANDLE_NEW,ble_shutter_process_reconnect_complete
+	rtn
+
+shutter_dy_le_find_service_hand_by_uuid:
+	arg 23,rega
+	arg LE_L2CAP_CID_ATT,regb
+	call le_fifo_malloc_tx_l2cap
+	setarg ATTOP_FIND_BY_TYPE_VALUE_REQUEST
+	istore 1,contw
+	setarg 0x0001		//start handle
+	istore 2,contw
+	setarg 0xffff		//end handle
+	istore 2,contw
+	setarg 0x2800		//uuid type
+	istore 2,contw
+	arg mem_dy_le_search_service_uuid,contr
+	branch memcpy16
+
+
+shutter_dy_le_parse_att:
+	bpatch patch19_0,mem_patch19
+	copy rega,contr
+	ifetch 3,contr
+	store 3,mem_le_att_opcode
+	beq ATTOP_FIND_BY_TYPE_VALUE_RESPONSE,shutter_dy_le_parse_att_find_by_type_value_rsp
+	beq ATTOP_ERROR_RESPONSE,shutter_dy_le_parse_error_rsp
+	beq ATTOP_READ_REQUEST,shutter_dy_le_parse_att_read_request
+	beq ATTOP_READ_BLOB_REQUEST,shutter_dy_le_parse_att_read_blob_request
+	branch le_parse_att2
+
+shutter_dy_le_parse_att_read_blob_request:
+	ifetch 2,contr
+	store 2,mem_le_att_offset
+	iforce rega
+	fetcht 2,mem_le_att_handle
+	fetch 2,mem_le_pairing_handle
+	isub temp,null
+	nbranch le_send_att_read_blob_response,zero
+	call shutter_dy_check_iphone
+	nbranch shutter_dy_le_parse_att_read_blob_request_ios,blank
+	fetcht 2,mem_shutter_le_map_len_android
+	branch shutter_dy_le_parse_att_read_blob_request2
+
+shutter_dy_le_parse_att_read_blob_request_ios:
+	fetcht 2,mem_shutter_le_map_len_ios
+shutter_dy_le_parse_att_read_blob_request2:
+	arg mem_shutter_le_hid_map,contr
+	call store_contr
+	copy temp,pdata
+	isub rega,pdata
+	nbranch le_send_att_error_response_notfound,positive
+	increase 1,pdata
+	sub pdata,23,null
+	branch le_send_att_read_blob_response_less,positive
+	force 23,pdata
+	branch le_send_att_read_blob_response_less
+
+shutter_dy_le_parse_att_read_request:
+	fetcht 2,mem_le_att_handle
+	fetch 1,mem_le_configuration
+	bbit1 BIT_BLE_READ_AUTH,shutter_dy_le_send_att_read_response_check_auth
+	branch le_send_att_read_response
+shutter_dy_le_send_att_read_response_check_auth:
+	fetch 2,mem_le_pairing_handle
+	isub temp,null
+	nbranch le_send_att_read_response,zero
+	call le_check_encrypt_state
+	nbranch shutter_dy_le_send_att_read_response,user
+	branch le_send_att_read_response_error_insufficient_auth
+
+shutter_dy_le_send_att_read_response:
+	fetch 2,mem_le_pairing_handle
+	isub temp,null
+	nbranch le_send_att_read_response,zero
+	arg mem_shutter_le_hid_map,contr
+	force 23,pdata
+	branch le_send_att_read_response_less
+
+shutter_dy_le_parse_att_find_by_type_value_rsp:
+shutter_dy_le_remote_iphone:
+	bpatch patch19_1,mem_patch19
+	jam 5,mem_shutter_back_count
+	jam 1,mem_iphone_flag
+	jam 1,mem_last_shutter_le_iphone_flag
+	jam 240,mem_send_data_delay
+	jam 10,mem_shutter_move_mid_timer
+	jam 1,mem_shutter_first_move
+	call shutter_dy_load_move_config_info
+	fetch 1,mem_shutter_pairing_success
+	rtn blank
+	call shutter_dy_clear_move_config
+	arg IPHONE_ONCE_MAX_MOVE_VALUE,temp
+//	setarg IPHONE_INITIAL_MOVE_X
+	fetch 2,mem_iphone_initial_move_x
+	arg mem_shutter_move_data_x,rega
+	arg mem_shutter_iphone_beyond_x_count,regb
+	call shutter_dy_iphone_move_initial_set
+	arg IPHONE_ONCE_MAX_MOVE_VALUE,temp
+//	setarg IPHONE_INITIAL_MOVE_Y
+	fetch 2,mem_iphone_initial_move_y
+	arg mem_shutter_move_data_y,rega
+	arg mem_shutter_iphone_beyond_y_count,regb
+	call shutter_dy_iphone_move_initial_set
+	setarg 0xfff
+	fetcht 2,mem_shutter_move_data_y
+	isub temp,pdata
+	store 2,mem_shutter_move_data_y
+	rtn
+
+shutter_dy_iphone_move_initial_set:
+	idiv temp
+	call wait_div_end
+	quotient pdata
+	remainder temp
+	istore 1,regb
+	istoret 2,rega
+	rtn
+shutter_dy_le_parse_error_rsp:
+	increase -2,contr
+	ifetch 1,contr
+	beq ATTOP_FIND_BY_TYPE_VALUE_REQUEST,shutter_dy_not_iphone_read_conf
+	rtn
+shutter_dy_remote_not_iphone:
+	jam 1,mem_shutter_back_count
+	jam 0,mem_iphone_flag
+	jam 0,mem_last_shutter_le_iphone_flag
+	jam 10,mem_send_data_delay
+	rtn
+
+shutter_dy_not_iphone_read_conf:
+	call shutter_dy_remote_not_iphone
+	branch shutter_dy_load_move_config_info
+
+shutter_dy_check_iphone:
+	fetch 1,mem_iphone_flag
+	rtn
+
+
+shutter_dy_le_get_press_ptr:
+	arg mem_dy_key0_press,regc
+	call shutter_dy_check_iphone
+	rtn blank
+	jam 120,mem_send_data_delay
+	arg mem_key0_press_i,regc
+	rtn
+shutter_dy_le_get_release_ptr:
+shutter_dy_le_get_release_ptr_set:
+	arg mem_key0_release_new,regc
+	call shutter_dy_check_iphone
+	rtn blank
+	arg mem_key0_release_new_i,regc
+	jam 12,mem_send_data_delay
+	copy queue,pdata
+	rtneq SHUTTER_LIKE_KEY_NUM
+	rtn
+shutter_dy_le_get_release_ptr_volume:
+	bpatch patch19_2,mem_patch19
+	fetch 1,mem_key3_press_count
+	setflip 0,pdata
+	store 1,mem_key3_press_count
+	beq 0,shutter_dy_le_get_release_ptr_set_volume_inc
+	beq 1,shutter_dy_le_get_release_ptr_set_volume_dec
+	rtn
+shutter_dy_le_get_release_ptr_set_volume_dec:
+	call shutter_dy_le_get_vol_dec_ptr
+	branch push_buffer_in_queue
+shutter_dy_le_get_release_ptr_set_volume_inc:
+	call shutter_dy_le_get_vol_inc_ptr
+	branch push_buffer_in_queue
+shutter_dy_le_get_vol_inc_ptr:
+	arg mem_key3_release_new,regc
+	call shutter_dy_check_iphone
+	rtn blank
+	arg mem_key3_release_new_i,regc
+	rtn
+shutter_dy_le_get_vol_dec_ptr:
+	arg mem_key3_release_new_t,regc
+	call shutter_dy_check_iphone
+	rtn blank
+	arg mem_key3_release_new_i_t,regc
+	rtn
+
+
+shutter_dy_long_key_function:
+	copy queue,pdata
+	beq SHUTTER_LIKE_KEY_NUM,shutter_dy_link_key_long_press
+	beq SHUTTER_DOWN_KEY_NUM,shutter_dy_loop_send_volume_dec_page
+	beq SHUTTER_UP_KEY_NUM,shutter_dy_loop_send_volume_inc_page
+	rtn
+
+//volume timer
+shutter_dy_long_key_volume_timer:
+	arg mem_shutter_volume_timer,regc
+	arg shutter_dy_long_key_volume_timeout,regb
+	branch timer_single_step
+shutter_dy_long_key_volume_timeout:
+	jam 4, mem_shutter_volume_timer
+	fetch 1,mem_key3_press_count
+	branch shutter_dy_loop_send_volume_inc_page,blank
+	branch shutter_dy_loop_send_volume_dec_page
+
+
+shutter_dy_loop_send_volume_inc_page:
+	jam 0,mem_key3_press_count
+	jam 4, mem_shutter_volume_timer
+	arg mem_key4_long_press,regc
+	branch push_buffer_in_queue
+
+shutter_dy_loop_send_volume_dec_page:
+	jam 1,mem_key3_press_count
+	jam 4, mem_shutter_volume_timer
+	arg mem_key2_long_press,regc
+	branch push_buffer_in_queue
+shutter_dy_clear_volume_timer:
+	jam 0,mem_key3_press_count
+	jam 0, mem_shutter_volume_timer
+	rtn
+
+//link timer
+shutter_dy_link_key_loop_timer:
+	arg mem_shutter_link_timer,regc
+	arg shutter_dy_link_key_loop_timeout,regb
+	branch timer_single_step
+shutter_dy_link_key_loop_timeout:
+	jam 2, mem_shutter_link_timer
+	call shutter_dy_link_data_android_or_ios
+	branch push_buffer_in_queue
+
+shutter_dy_link_data_android_or_ios:
+	arg mem_shutter_link_data,regc
+	call shutter_dy_check_iphone
+	rtn blank
+	arg mem_shutter_link_data_i,regc
+	rtn
+
+shutter_dy_link_key_long_press:
+	fetch 1,mem_shutter_link_loop_flag
+	nbranch shutter_dy_clear_link_key_timer,blank
+	jam 1,mem_shutter_link_loop_flag
+	jam 2, mem_shutter_link_timer
+	rtn
+
+shutter_dy_clear_link_key_timer:
+	jam 0,mem_shutter_link_loop_flag
+	jam 0, mem_shutter_link_timer
+	rtn
+
+shutter_dy_jude_clear_move_config:
+	fetch 1,mem_shutter_le_conned
+	nrtn blank
+	jam 1,mem_shutter_le_conned
+	branch shutter_dy_move_data_store
+
+shutter_dy_clear_move_config:
+	setarg 0
+	store 7,mem_move_config
+	rtn
+
+shutter_dy_write_otp_convert_data:
+	call shutter_dy_check_iphone
+	beq 0x01,shutter_dy_store_ios_config_data
+	beq 0x00,shutter_dy_store_android_config
+	rtn
+
+shutter_dy_read_otp_convert_data:
+	fetch 1,mem_otp_last_shutter_le_iphone_flag	//判断是否是IOS
+	beq 0x01,shutter_dy_get_ios_config
+	beq 0x00,shutter_dy_get_android_config
+	rtn
+
+shutter_dy_store_ios_config_data:
+	fetch 1,mem_shutter_iphone_beyond_x_count
+	mul32 pdata,IPHONE_ONCE_MAX_MOVE_VALUE,pdata
+	copy pdata,temp
+	fetch 2,mem_shutter_move_data_x
+	iadd temp,pdata	//pdata = pdata+temp
+	store 2,mem_otp_shutter_move_data_x
+
+	fetch 1,mem_shutter_iphone_beyond_y_count
+	mul32 pdata,IPHONE_ONCE_MAX_MOVE_VALUE,pdata
+	copy pdata,temp
+	fetch 2,mem_shutter_move_data_y
+	copy pdata,rega
+	setarg 0xfff
+	isub rega,pdata	//pdata = pdata-rega
+	iadd temp,pdata	//pdata = pdata+temp
+	store 2,mem_otp_shutter_move_data_y
+
+	call shutter_dy_check_iphone
+//	fetch 1,mem_last_shutter_le_iphone_flag
+	store 1,mem_otp_last_shutter_le_iphone_flag
+	rtn
+
+shutter_dy_store_android_config:
+	fetch 2,mem_shutter_move_data_x
+	store 2,mem_otp_shutter_move_data_x
+	fetch 2,mem_shutter_move_data_y
+	store 2,mem_otp_shutter_move_data_y
+	call shutter_dy_check_iphone
+	store 1,mem_otp_last_shutter_le_iphone_flag
+	rtn
+shutter_dy_get_ios_config:
+	fetch 2,mem_otp_shutter_move_data_x
+	div pdata,IPHONE_ONCE_MAX_MOVE_VALUE
+	call wait_div_end
+	quotient pdata
+	remainder temp
+	store 1,mem_shutter_iphone_beyond_x_count
+	copy temp,pdata
+	store 2,mem_shutter_move_data_x
+	fetch 2,mem_otp_shutter_move_data_y
+	div pdata,IPHONE_ONCE_MAX_MOVE_VALUE
+	call wait_div_end
+	quotient pdata
+	remainder temp
+	store 1,mem_shutter_iphone_beyond_y_count
+	//copy temp,pdata
+	setarg 0xfff
+	isub temp,pdata	//pdata = pdata-temp
+	store 2,mem_shutter_move_data_y
+//	fetch 1,mem_otp_last_shutter_le_iphone_flag
+//	store 1,mem_last_shutter_le_iphone_flag
+	rtn
+shutter_dy_get_android_config:
+	fetch 2,mem_otp_shutter_move_data_x
+	store 2,mem_shutter_move_data_x
+	fetch 2,mem_otp_shutter_move_data_y
+	store 2,mem_shutter_move_data_y
+//	fetch 1,mem_otp_last_shutter_le_iphone_flag
+//	store 1,mem_last_shutter_le_iphone_flag
+	rtn
+
+shutter_dy_store_move_config_info:
+	branch shutter_dy_campare_effective_addr_write_otp
+
+shutter_dy_load_move_config_info:
+	branch shutter_dy_campare_effective_addr_read_otp
+
+//循环找数据，判断是否为空数据
+shutter_dy_shutter_uart_config_loop:
+	call shutter_dy_update_read_check_addr
+	fetch 2,mem_otp_read_offset_addr
+	call shutter_dy_shutter_read_move_config_from_otp_addr
+	jam 0,mem_shutter_first_read_flag
+	fetch 5,mem_otp_move_config
+	jam 0,mem_shutter_valid_data_flag
+	jam 0,mem_shutter_temp_count
+	call shutter_dy_campare_otp_data
+	fetch 1,mem_shutter_temp_count
+	rtneq 0
+	branch shutter_dy_shutter_uart_config_loop
+
+//第一次从0x1fe0处往前读
+shutter_dy_shutter_get_first_read_addr:
+//	setarg SHUTTER_EFUSE_START_OFFECT
+	fetch 2,mem_shutter_efuse_start_offset
+	increase -5,pdata
+	store 2,mem_otp_read_offset_addr
+	rtn
+
+//下次读，更新mem_otp_read_offset_addr 地址
+shutter_dy_shutter_next_read_addr:
+	fetch 2,mem_otp_read_offset_addr
+	increase -5,pdata
+	store 2,mem_otp_read_offset_addr
+	rtn
+
+//上次读，更新mem_otp_read_offset_addr 地址
+shutter_dy_shutter_last_read_addr:
+	fetch 2,mem_otp_read_offset_addr
+	pincrease 5
+	store 2,mem_otp_read_offset_addr
+	rtn
+
+shutter_dy_shutter_read_ios_android_addr:
+	fetch 2,mem_otp_read_ios_android_addr
+	pincrease 5
+	store 2,mem_otp_read_ios_android_addr
+	//检查在区间内
+	fetch 2,mem_otp_read_ios_android_addr
+	copy pdata, temp
+//	setarg SHUTTER_EFUSE_START_OFFECT
+	fetch 2,mem_shutter_efuse_start_offset
+	isub temp,pdata	//pdata = pdata-temp
+	arg SHUTTER_PARA_TOTAL_NUM,temp	//temp = 5
+	isub temp,null	//pdata = pdata-temp, 大于等于0，positive置1
+//	nrtn positive
+	nbranch shutter_dy_shutter_not_find_ios_or_android,positive
+	rtn
+
+shutter_dy_update_read_check_addr:
+	fetch 1,mem_shutter_first_read_flag	//第1次读标识
+	beq 0x01,shutter_dy_shutter_get_first_read_addr
+	beq 0x00,shutter_dy_shutter_next_read_addr
+	rtn
+
+//比较数据，判断是否为0
+shutter_dy_campare_otp_data:
+	arg 0x0,regb
+	copy regb, temp
+	fetch 2,mem_otp_shutter_move_data_x
+	icompare 0xffff,temp
+//	isub temp,pdata	//pdata = pdata-temp
+	ncall shutter_dy_set_shutter_valid_data_flag,true
+	arg 0x0,regb
+	copy regb, temp
+	fetch 2,mem_otp_shutter_move_data_y
+	icompare 0xffff,temp
+	ncall shutter_dy_set_shutter_valid_data_flag,true
+	arg 0x0,regb
+	copy regb, temp
+	fetch 1,mem_otp_last_shutter_le_iphone_flag
+	icompare 0xff,temp
+	ncall shutter_dy_set_shutter_valid_data_flag,true
+	rtn
+
+//mem_shutter_temp_count +1 操作
+shutter_dy_set_shutter_valid_data_flag:
+	fetch 1,mem_shutter_temp_count
+	pincrease 1
+	store 1,mem_shutter_temp_count
+	rtn
+shutter_dy_shutter_judge_ios_or_android:
+	jam 1,mem_shutter_temp_count
+	call shutter_dy_shutter_read_ios_android_addr
+	fetch 2,mem_otp_read_ios_android_addr
+	call shutter_dy_shutter_read_move_config_from_otp_addr
+	call shutter_dy_check_iphone
+	copy pdata, temp
+	fetch 1,mem_otp_last_shutter_le_iphone_flag
+	icompare 0xff,temp
+	call shutter_dy_clear_temp_count,true
+
+	fetch 1,mem_shutter_temp_count
+	rtneq 0
+	branch shutter_dy_shutter_judge_ios_or_android
+
+
+shutter_dy_shutter_not_find_ios_or_android:
+	bpatch patch19_3,mem_patch19
+	call shutter_dy_clear_temp_count
+	call shutter_dy_check_iphone
+	branch shutter_dy_shutter_android_save_init_loaction,blank
+	branch shutter_dy_shutter_ios_save_init_loaction
+shutter_dy_shutter_android_save_init_loaction:
+	fetch 2,mem_android_initial_move_x
+	store 2, mem_shutter_move_data_x
+	fetch 2,mem_android_initial_move_y
+	store 2, mem_shutter_move_data_y
+	branch shutter_dy_store_move_config_info
+
+shutter_dy_shutter_ios_save_init_loaction:
+	arg IPHONE_ONCE_MAX_MOVE_VALUE,temp
+//	setarg IPHONE_INITIAL_MOVE_X
+	fetch 2,mem_iphone_initial_move_x
+	arg mem_shutter_move_data_x,rega
+	arg  mem_shutter_iphone_beyond_x_count,regb
+	call shutter_dy_iphone_move_initial_set
+	arg IPHONE_ONCE_MAX_MOVE_VALUE,temp
+//	setarg IPHONE_INITIAL_MOVE_Y
+	fetch 2,mem_iphone_initial_move_y
+	arg mem_shutter_move_data_y,rega
+	arg  mem_shutter_iphone_beyond_y_count,regb
+	call shutter_dy_iphone_move_initial_set
+	setarg 0xfff
+	fetcht 2,mem_shutter_move_data_y
+	isub temp,pdata
+	store 2,mem_shutter_move_data_y
+	branch shutter_dy_store_move_config_info
+
+shutter_dy_clear_temp_count:
+	jam 0,mem_shutter_temp_count
+	rtn
+//取有效地址给mem_otp_write_offset_addr
+shutter_dy_campare_effective_addr_read_otp:
+	bpatch patch19_4,mem_patch19
+	jam 1,mem_shutter_first_read_flag
+	call shutter_dy_shutter_uart_config_loop
+	//获得了地址
+	//校验是否是越界
+//	setarg SHUTTER_EFUSE_END_OFFECT
+	fetch 2,mem_shutter_efuse_end_offset
+	copy pdata, temp
+	fetch 2,mem_otp_read_offset_addr
+	isub temp,pdata	//pdata = pdata-temp
+	arg 0x0,temp	//temp = 0
+	isub temp,null	//null = pdata-temp, 大于等于0，positive置1
+	nrtn positive
+	fetch 2,mem_otp_read_offset_addr
+	copy pdata, temp
+//	setarg SHUTTER_EFUSE_START_OFFECT
+	fetch 2,mem_shutter_efuse_start_offset
+	increase -5,pdata
+	isub temp,pdata	//pdata = pdata-temp
+	//读上一次地址
+//	ncall p_shutter_last_read_addr,zero
+	fetch 2,mem_otp_read_offset_addr
+	store 2,mem_otp_read_ios_android_addr
+	call shutter_dy_shutter_judge_ios_or_android
+	fetch 2,mem_otp_read_ios_android_addr
+	ncall shutter_dy_shutter_read_move_config_from_otp_addr,zero
+
+	//检查为0则不赋值
+	jam 0,mem_shutter_temp_count
+	call shutter_dy_campare_otp_data
+	fetch 1,mem_shutter_temp_count
+	rtneq 0
+	branch shutter_dy_read_otp_convert_data
+
+//取有效地址给mem_otp_write_offset_addr
+shutter_dy_campare_effective_addr_write_otp:
+	bpatch patch19_5,mem_patch19
+	jam 1,mem_shutter_first_read_flag
+	call shutter_dy_shutter_uart_config_loop
+	//获得了地址
+	//校验是否是越界
+//	setarg SHUTTER_EFUSE_END_OFFECT
+	fetcht 2,mem_shutter_efuse_end_offset
+//	copy pdata, temp
+	fetch 2,mem_otp_read_offset_addr
+	isub temp,pdata	//pdata = pdata-temp
+	arg 0x0,temp	//temp = 0
+	isub temp,null	//pdata = pdata-temp, 大于等于0，positive置1
+	nrtn positive
+	//检查在区间内
+	fetcht 2,mem_otp_read_offset_addr
+//	setarg SHUTTER_EFUSE_START_OFFECT
+	fetch 2,mem_shutter_efuse_start_offset
+	isub temp,pdata	//pdata = pdata-temp
+	arg 0x0,temp	//temp = 0
+	isub temp,null	//pdata = pdata-temp, 大于等于0，positive置1
+	nrtn positive
+	fetch 2,mem_otp_read_offset_addr
+	store 2,mem_otp_write_offset_addr
+	call shutter_dy_write_otp_convert_data
+
+	branch shutter_dy_shutter_write_move_config_to_otp_addr
+
+
+shutter_dy_shutter_read_move_config_from_otp_addr:
+	copy pdata,regb
+	bpatch patch19_6,mem_patch19
+	arg SHUTTER_PARA_TOTAL_NUM,loopcnt
+//	fetch 2,mem_otp_read_offset_addr
+	arg mem_otp_move_config,rega
+	branch otp_read_data
+
+
+shutter_dy_shutter_write_move_config_to_otp_addr:
+	arg SHUTTER_PARA_TOTAL_NUM,loopcnt
+	arg mem_otp_move_config,rega
+	fetchr regb, 2, mem_otp_write_offset_addr
+	branch otp_write
+
+shutter_dy_shutter_1s_timer:
+	arg mem_shutter_1s_timer,regc
+	arg shutter_dy_store_move_config_info,regb
+	branch timer_single_step
+
+
+
+/*************shutter dy ending*********************/
+
+endif
+
Index: program/ble_protocol_stack/le.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/ble_protocol_stack/le.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/ble_protocol_stack/le.prog	(working copy)
@@ -0,0 +1,1881 @@
+ifdef COMPILE_LE
+//******************************************//
+//*************LE INIT ****************//
+//******************************************//
+
+le_init_conn:
+	bpatchx patch27_3,mem_patch27
+	disable wake
+	jam 1,mem_le_conn_handle
+	jam 3,mem_le_state
+	jam 1,mem_le_arq
+	setarg -1
+	store 2,mem_le_event_count
+	force 0,pdata
+	store 1,mem_le_ch
+	store 1,mem_le_op
+	store 3,mem_sniff_rcv
+	store 3,mem_sniff_lost
+	call le_clear_enc
+	jam 1,mem_le_txheader
+	jam 0,mem_le_txlen
+	jam FUN_RX_LL_1M_PHY,mem_le_rx_phy
+	jam FUN_TX_LL_1M_PHY,mem_le_tx_phy
+	jam 0,mem_le_l2cap_att_states
+	branch le_supervision_flush
+
+le_init_master:
+	bpatchx patch27_4,mem_patch27
+	enable master
+	jam lemode_master,mem_le_mode
+	jam 1,mem_le_att_handle
+	jam 1,mem_le_search_handle_start
+	setarg 0xffff
+	store 2,mem_le_search_handle_end
+	force 0,pdata
+	store 5,mem_ccm_pcnt_rx
+	set1 LE_CCM_DIRECTIONBIT,pdata
+	store 5,mem_ccm_pcnt_tx	
+	branch le_init_conn
+
+
+le_init_slave:
+	bpatchx patch27_5,mem_patch27
+	disable master
+ 	setarg 0x17
+ 	store 2,mem_le_remote_mtu
+	increase 4,pdata
+	store 2,mem_remote_rx_max_octets
+	jam lemode_slave,mem_le_mode
+	jam 0,mem_le_adv_enable
+	jam 0,mem_lpm_current_mult
+	call le_clear_pairing_state
+	fetch 2,mem_le_superto
+	store 2,mem_le_init_superto
+	fetch 2,mem_le_tsniff
+	mul32 pdata,5,pdata
+	rshift4 pdata,pdata
+	store 2,mem_le_superto			// vol.6 part B 4.5.2 only 6*conninterval before establish
+	branch le_init_conn
+	
+
+//******************************************//
+//*************LE main process*********//
+//******************************************//
+
+le_conn_dispatch:
+	bpatchx patch27_6,mem_patch27
+	call le_enable
+ 	fetch 1,mem_le_state
+ 	isolate1 lestate_encryption,pdata
+ 	setflag true,mark_ble_encryption,mark
+	call app_process_ble
+	fetch 1,mem_le_mode
+	bbit1 mode_master,le_master_dispatch
+	branch le_slave_dispatch
+	
+//******************************************//
+//***********LE master process*********//
+//******************************************//
+	
+le_master_dispatch:
+	bpatchx patch27_7,mem_patch27
+	enable master
+	call le_supervision_update
+	branch le_master_disconn,positive
+	call le_setup
+	call le_prepare_tx
+	disable match
+	call le_transmit_receive_sifs
+	nrtn match
+	fetch 1,mem_le_conn_rcv
+	increase 1,pdata
+	store 1,mem_le_conn_rcv
+	call le_acknowledge
+	branch le_disable_master
+	
+le_master_disconn:
+	call le_disconnect
+le_disable_master:
+	disable master
+	rtn
+	
+//******************************************//
+//***********LE slave process***********//
+//******************************************//
+le_slave_dispatch:
+	bpatchx patch28_0,mem_patch28
+	jam 0,mem_le_md_count
+	set0 mark_ble_crc_fail,mark
+ifdef SECURE_CONNECTION
+	call sp_calc_sequence_256
+	call le_secure_connect_sm
+endif
+	disable attempt
+	call le_supervision_update
+	branch le_slave_disconn,positive
+	fetch 1,mem_le_rx_phy
+	call le_enable_phy_by_pdata
+	call le_setup
+	call le_receive_slave
+	nbranch le_slave_unsync,sync	// vol.6 part B 4.5.1 respond even crc error
+	call le_got_first_packet
+	branch le_slave_match,match
+	bmark1 mark_ble_crc_fail,le_slave_crc_fail
+	branch le_slave_cont
+	
+
+le_slave_crc_fail:
+le_slave_match:
+	bpatchx patch28_1,mem_patch28
+	fetch 1,mem_le_md_count
+	pincrease 1
+	store 1,mem_le_md_count
+	beq LE_MD_MAX_COUNT,le_slave_cont
+	call le_acknowledge
+	call le_prepare_tx
+	fetch 1,mem_le_tx_phy
+	call le_enable_phy_by_pdata
+	call le_transmit
+	call le_parse
+	fetch 2,mem_cb_ble_transmit
+	call callback_func
+	call le_check_md
+	branch le_slave_more_data,user
+le_slave_cont:
+	bpatchx patch28_2,mem_patch28
+	call le_pairing_sm
+ 	call le_check_paring_time
+	call check_51cmd
+	fetch 1,mem_le_op
+	bbit1 op_disconn,le_slave_disconn
+le_slave_unsync:
+	bpatchx patch28_3,mem_patch28
+	call end_of_packet
+	call le_lpm_set_mult
+	branch calc_clke_offset
+
+
+le_check_md:
+	bmark1 mark_ble_rx_md,enable_user
+	bmark1 mark_ble_tx_md,enable_user
+	bmark1 mark_ble_crc_fail,enable_user
+	branch disable_user
+
+
+le_slave_more_data:
+	bpatchx patch28_4,mem_patch28
+	enable attempt
+	call le_transmit_receive_sifs_notx
+	branch le_slave_match,match
+	bmark1 mark_ble_crc_fail,le_slave_crc_fail
+	branch le_slave_cont
+
+le_slave_disconn:
+	//fall through
+le_disconnect:
+	bpatchx patch28_5,mem_patch28
+	call le_clear_connection_info
+	call app_disconn_reason_collect_ble
+	call le_clear_pairing_state
+ifdef SECURE_CONNECTION
+	call le_sc_state_clear
+endif
+	jam BT_EVT_LE_DISCONNECTED,mem_fifo_temp
+	branch ui_ipc_send_event
+
+le_clear_connection_info:
+	arg mem_used_map,contw
+	call memset0_16
+	jam 0,mem_le_conn_handle
+	jam lemode_idle,mem_le_mode
+	jam 0,mem_le_state
+le_clear_pairing_state:
+	bpatchx patch28_6,mem_patch28
+	jam FLAG_LE_ENC_NULL,mem_le_enc_state
+	jam FLAG_LE_PAIRING_NULL,mem_le_pairing_state 
+ifdef SECURE_CONNECTION
+	call sp_clear_flags
+endif
+	rtn
+	
+le_got_first_packet:
+	bpatchx patch28_7,mem_patch28
+	fetch 1,mem_le_conn_rcv
+	increase 1,pdata
+	store 1,mem_le_conn_rcv
+	fetch 1,mem_le_state
+	rtnbit1 lestate_got_first_packet
+	set1 lestate_got_first_packet,pdata
+	store 1,mem_le_state
+	fetch 2,mem_le_init_superto
+	store 2,mem_le_superto
+	setarg 0
+	store 4,mem_le_transmit_window
+	rtn
+
+
+//input: pdata is phy mode
+//bit0 is le 1M phy
+//bit1 is le 2M phy
+//bit2 is le coded phy s2
+//bit7 is le coded phy s8
+le_enable_phy_by_pdata:
+	copy pdata,temp
+	bpatchx patch29_0,mem_patch29
+le_enable_phy_by_pdata1:
+	copy temp,pdata
+	bbit1 BIT_LE_1M_PHY,le_enable
+	bbit1 BIT_LE_2M_PHY,le_enable_2M
+	bbit0 BIT_LE_CODED_PHY,le_enable
+	bbit1 BIT_LE_CODED_PHY_S8,le_enable_coded_s8
+	bbit1 BIT_LE_CODED_PHY_S2,le_enable_coded_s2
+	branch le_enable
+
+le_enable_2M:
+	set0 mark_ble_lr,mark
+	set1 mark_ble_2M,mark
+	rtn
+
+le_enable_coded_s2:
+le_enable_coded:
+	set0 mark_ble_2M,mark
+	set1 mark_ble_lr,mark
+	set0 mark_ble_lr_s8,mark
+	rtn
+
+
+le_enable_coded_s8:
+	set0 mark_ble_2M,mark
+	set1 mark_ble_lr,mark
+	set1 mark_ble_lr_s8,mark
+	rtn
+
+le_enable:
+	bpatchx patch29_1,mem_patch29
+	set0 mark_ble_2M,mark
+	set0 mark_ble_lr,mark
+	rtn
+
+
+le_disable:
+	bpatchx patch29_2,mem_patch29
+	set0 mark_ble_encryption,mark
+	jam 0x01,0x8901
+	jam 0x80,0x8920
+	jam 0x03,0x8930
+	rtn
+	
+le_prep:
+	bpatchx patch29_3,mem_patch29
+	disable enable_crc
+	disable enable_white
+	fetch 3,mem_le_crcinit
+	iforce crc24_init
+	fetch 1,mem_le_ch_mapped
+le_prep_next:
+	reverse pdata,temp
+	set1 1,temp
+	rshift temp,white_init
+	rtn
+	
+
+le_rx_setfreq:
+	call le_setfreq
+le_rf_rx_enable:	
+	call set_freq_rx
+	fetch 2,mem_param_pll_setup
+	call sleep
+	branch rf_rx_enable
+
+le_tx_setfreq:
+	branch txon,match
+	bmark1 mark_ble_crc_fail,txon
+le_tx_setfreq0:
+	call le_setfreq
+	branch set_freq_tx
+	
+le_setfreq:
+	bpatchx patch29_4,mem_patch29
+	call set_sync_on
+	fetch 1, mem_le_testtype
+	nbranch le_ctf_test,blank
+	fetch 1,mem_le_ch_mapped
+	sub pdata,36,null
+	branch le_ctf_normal,positive
+	force 0,temp
+	rtneq 37
+	force 24,temp
+	rtneq 38
+	force 78,temp
+	rtn
+	
+le_ctf_normal:
+	sub pdata,10,null
+	branch le_ctf_low,positive
+	increase 1,pdata
+	
+le_ctf_low:	
+	lshift pdata,pdata
+	add pdata,2,temp
+	rtn
+	
+le_ctf_test:
+	fetch 1,mem_le_ch_mapped
+	lshift pdata,temp
+	rtn
+
+le_sca_map:
+	arg 500,temp
+	rtn blank
+	arg 250,temp
+	rtneq 1
+	arg 150,temp
+	rtneq 2
+	arg 100,temp
+	rtneq 3
+	arg 75,temp
+	rtneq 4
+	arg 50,temp
+	rtneq 5
+	arg 40,temp
+	rtneq 6
+	arg 20,temp
+	rtn
+
+
+	
+le_setup:
+	bpatchx patch29_5,mem_patch29
+	enable swfine
+	fetch 4,mem_le_access
+	iforce access
+	call le_map_channel
+	setarg 0x200
+	branch le_setup_master,master
+	fetch 2,mem_le_receive_window
+	rshift pdata,pdata
+le_setup_master:
+	fetcht 2,mem_param_pll_setup
+	iadd temp,pdata
+	call ahead_window
+	deposit clke
+	rtn
+
+
+le_context_nextevent:
+	bpatchx patch29_6,mem_patch29
+	call push_stack_rega_b_c
+	storer loopcnt ,2,mem_loopcnt
+	add rega,coffset_mode,contr
+	ifetch 1,contr
+	rtnbit0 mode_le
+	add rega,coffset_le_event_cnt,contw
+	ifetch 2,contw
+	increase 1,pdata
+	istore 2,contw
+	call le_update_param
+	call le_update_channel_map
+	call le_update_phy	
+	call le_context_nexthop
+	call pop_stack_rega_b_c
+	fetchr loopcnt ,2,mem_loopcnt
+	rtn
+	
+le_context_nexthop:	
+	add rega,coffset_le_hop,contr
+	ifetch 1,contr
+	add rega,coffset_le_ch,contw
+	ifetcht 1,contw
+	iadd temp,pdata
+	sub pdata,36,null
+	branch le_nexthop_nowrap,positive
+	increase -37,pdata
+le_nexthop_nowrap:
+	istore 1,contw
+	rtn
+
+//input rega
+le_calc_channel_map:
+	add rega,coffset_le_channel_map,contr
+	ifetch 5,contr
+	force 0,temp
+	force 37,loopcnt
+le_count_channels_loop:
+	bbit0 0,le_count_channels_notused
+	increase 1,temp
+le_count_channels_notused:
+	rshift pdata,pdata
+	loop le_count_channels_loop
+	add temp,-1,pdata
+	add rega,coffset_le_channels,contw
+	istore 1,contw
+	rtn
+
+le_map_channel:
+	bpatchx patch29_7,mem_patch29
+	fetch 1,mem_le_ch
+	iforce queue
+	fetcht 5,mem_le_channel_map
+	qisolate1 temp
+	branch le_map_channel_end,true
+le_map_channel_next:
+	fetch 1,mem_le_channels
+	isub queue,pdata
+	branch le_map_channel_cont,positive
+	sub pdata,-1,queue
+	branch le_map_channel_next
+le_map_channel_cont:
+	copy queue,loopcnt
+	force 0,queue
+le_map_channel_loop:
+	qisolate1 temp
+	branch le_map_channel_skip,true
+	increase 1,loopcnt
+le_map_channel_skip:
+	deposit loopcnt
+	branch le_map_channel_end,blank
+	increase 1,queue
+	increase -1,loopcnt
+	branch le_map_channel_loop
+le_map_channel_end:
+	deposit queue
+	store 1,mem_le_ch_mapped
+	rtn
+
+
+le_wait_tx:
+	branch le_wait_master,master
+	until null,timeout
+	rtn
+	
+le_wait_master:
+	arg 0xea0,timeup
+	until clkn_rt,meet
+	rtn
+
+le_receive_adv:
+	disable swfine
+	fetch 2,mem_le_scan_window
+	copy pdata,timeup
+	branch le_receive_packet
+
+
+le_receive_slave:
+	bpatchx patch2a_0,mem_patch2a
+ 	call le_dec_init
+	enable swfine
+	fetch 2,mem_le_receive_window
+	fetcht 4,mem_le_transmit_window
+	iadd temp,timeup
+le_receive_packet:
+	call le_rx_setfreq
+le_receive_rxon:
+	bpatchx patch2a_1,mem_patch2a
+	call le_prep
+	bmark0 mark_ble_lr,le_receive_nolr
+	pulse dewhiten_code_calc
+	nop 30
+	call le_prep
+	lshift3 timeup,timeup
+le_receive_nolr:
+	disable match
+	enable decode_fec0
+	enable is_rx
+	disable is_tx
+	copy timeup,stop_watch
+	correlate null,timeout
+	branch le_receive_on_attempt,attempt
+	copy clke,temp
+	storet 6,mem_sync_clke
+le_receive_on_attempt:
+	nbranch le_unsync_end,sync
+	enable swfine
+	fetch 1,mem_le_tx_ifs_defference
+	arg PARAM_20MS_INIT,temp
+	iadd temp,temp
+	fetch 1,mem_system_clk
+	imul32 temp,stop_watch
+	call rf_debug_rx_sync_line	//L-H
+	branch le_receive_skip,attempt
+	call calc_clke_all_modem
+	fetch 1,mem_le_state
+	bbit0 lestate_got_first_packet,le_receive_skip
+	call lpm_adjust_clk,wake
+le_receive_skip:
+	call save_rssi
+	enable enable_white
+	enable enable_crc
+	parse demod,bucket,8
+	rshift3 pwindow,pdata
+	store 1,mem_le_rxbuf_data_header
+	parse demod,bucket,8
+	rshift3 pwindow,pdata
+	store 1,mem_le_rxbuf_data_length
+ 	copy pdata,loopcnt
+	branch le_rx_nopayload,zero
+
+	bmark1 mark_ble_encryption,le_rx_dec
+
+le_rx_loop:
+	parse demod,bucket,8
+	rshift3 pwindow,pdata
+	istore 1,contw
+	loop le_rx_loop
+	branch le_rx_nopayload
+
+le_rx_dec: 
+	copy contw,regb
+	bpatchx patch2a_2,mem_patch2a
+	call le_check_retransmit	
+//	bmark1 mark_old_packet,le_retransmit_end_of_packet
+	fetchr rega, 1,mem_le_rxbuf_data_length
+	increase -4,rega
+	nbranch le_crc_fail_consecutive,positive
+//	storer rega, 1,mem_le_rxbuf_data_length
+	call le_dec_start	
+	copy regb,contw
+	arg 0,temp
+	fetchr loopcnt, 1,mem_le_rxbuf_data_length
+	increase -4,loopcnt
+	branch le_rx_dec_loop_end,zero
+le_rx_dec_loop:
+	
+	parse demod,bucket,8
+	rshift3 pwindow,pdata
+	istore 1,contw
+	increase 1,temp
+	and temp,0xf,null
+	call le_dec,zero
+	loop le_rx_dec_loop
+le_rx_dec_loop_end:
+	call le_dec_end	
+	copy regb,contw
+	
+
+le_rx_nopayload:
+	bpatchx patch2a_3,mem_patch2a
+	parse demod,bucket,24	
+	rshift32 pdata,pdata
+	rshift16 pdata,pdata
+	istore 3,contw
+	enable swfine
+	call le_set_until_tx_timer
+	branch le_crc_fail,crc_failed
+	bmark0 mark_ble_encryption,le_rx_match
+	fetch 1,mem_le_rxbuf_data_length
+	branch le_rx_match,blank
+	increase -4,pdata
+	store 1,mem_le_rxbuf_data_length
+	call wait_ccm_done
+ 	fetch 1,core_misc_status
+	bbit0 7, le_crc_fail_consecutive
+ 	force regidx_result,regext_index
+	storer regext, 4,mem_le_peer_mic
+le_rx_match:
+	call rf_debug_rx_crc_line	//L
+	enable match
+	set0 mark_ble_crc_fail,mark
+le_crc_fail_tx:
+	bpatchx patch2a_4,mem_patch2a
+	call ccm_ctrl_clr
+	fetch 1,mem_le_rx_phy
+	nsetflag ble_coded_info,BIT_LE_CODED_PHY_S8,pdata
+	store 1,mem_le_rx_phy
+	call le_match_set_sync_on
+	branch le_match_set_txfreq
+	
+le_match_set_sync_on:	
+	disable decode_fec0
+	branch set_sync_on
+	
+le_match_set_txfreq:
+	bpatchx patch2a_5,mem_patch2a
+	fetcht 1,mem_last_freq
+	branch set_freq_tx_int	
+	
+
+le_dec_init:
+	rtnmark0 mark_ble_encryption
+	call load_sk
+	force regidx_result,regext_index
+	call aes_clear
+	branch aes_clear_data
+	
+	
+le_dec_start:
+	bpatchx patch2a_6,mem_patch2a
+	jam 0,core_ccm_aad0 
+	jam 1,core_ccm_aad1
+	fetch 1,mem_le_rxbuf_data_header
+	and_into 0x3,pdata
+	store 1,core_ccm_aad2
+	
+	setarg mem_le_rxbuf_data_payload
+	store 2,core_ccm_input_playload_addr
+	store 2,core_ccm_output_playload_addr
+
+	fetchr rega, 1,mem_le_rxbuf_data_length
+	increase -4,rega
+
+	fetcht 5,mem_ccm_pcnt_rx	
+	isolate1 mark_old_packet,mark
+	call le_pcnt_rx_sub1,true
+	call ccm_b0
+	setarg 0
+	store 2,core_ccm_inptr
+	jam 6,core_ccm_ctrl
+	jam 7,core_ccm_ctrl	
+	rtn	
+
+le_pcnt_rx_sub1:
+	sub temp,0,null
+	branch le_pcnt_rx_sub1_0,zero
+	increase -1,temp
+	set1 LE_CCM_DIRECTIONBIT,temp
+	rtn
+
+le_pcnt_rx_sub1_0:
+	setarg 0xffffff
+	lshift16 pdata,pdata
+	arg 0xffff,temp
+	ior temp,temp
+	rtn
+
+le_dec:
+	copy contw,regb
+	fetch 1,mem_le_rxbuf_data_length
+	increase -4,pdata
+	isub temp,null
+	rtn zero
+	storet 2,core_ccm_inptr
+	copy regb,contw
+	rtn
+	
+le_dec_end://mic
+	parse demod,bucket,32
+	rshift32 pdata,pdata
+	rshift8 pdata,pdata
+	istore 4,contw
+	copy contw,regb
+//	store 4,mem_le_peer_mic
+	force regidx_data,regext_index
+	copy  pdata,regext
+	storet 2,core_ccm_inptr
+	rtn
+
+//le_mic_error:
+//	branch le_end_of_packet
+
+le_retransmit_end_of_packet:
+	call le_set_until_tx_timer	// start SIFS timer after last bit of crc
+	call end_of_packet
+	branch le_rx_match
+
+le_crc_fail:
+	call rf_debug_rx_crc_fail_line
+	bmark1 mark_adv,le_crc_fail_consecutive
+	bmark1 mark_ble_crc_fail,le_crc_fail_consecutive //two consecutive packets received with an invalid CRC match within a connection event shall close the event
+	set1 mark_ble_crc_fail,mark
+	branch le_crc_fail_tx
+	
+le_unsync_end:	
+le_crc_fail_consecutive:
+	set0 mark_ble_crc_fail,mark
+	branch le_end_of_packet
+
+le_end_of_packet:
+	bpatchx patch2a_7,mem_patch2a
+	call ccm_ctrl_clr
+	branch end_of_packet
+
+calc_clke_all_modem:
+	fetcht  6,mem_sync_clke
+	copy clke,pdata
+	call clk_diff
+	copy pdata,temp
+	call calc_clke_all_modem_1
+	copy clke,rege
+	copy clke_rt,pdata
+	iadd temp,pdata
+//	add pdata,8,pdata
+	copy pdata,clke_rt	
+	rtn
+	
+calc_clke_all_modem_1:
+	bmark1 mark_ble_lr,calc_clke_modem_coded
+	bmark1 mark_ble_2M,calc_clke_modem_2M
+	fetch 2,mem_param_clke_cal_le_1m
+	copy pdata,clke_rt
+	copy bt_clk,clke_bt
+	rtn
+
+
+calc_clke_modem_coded:
+	fetch 2,mem_param_clke_cal_le_coded
+	copy pdata,clke_rt
+	add bt_clk,1,clke_bt
+	rtn
+
+calc_clke_modem_2M:
+	fetch 2,mem_param_clke_cal_le_2m
+	copy pdata,clke_rt
+	copy bt_clk,clke_bt
+	rtn
+
+
+le_set_until_tx_timer:
+	fetch 1,mem_le_rxbuf_data_length
+	add pdata,5,temp	//PDU Length
+	lshift3 temp,temp	//PDU bit size
+	fetch 1,mem_le_rx_phy
+	bmark1 mark_ble_lr,le_set_until_tx_timer_rx_lr
+	bbit1 BIT_LE_1M_PHY,le_set_until_tx_timer_rx_1M
+	bbit1 BIT_LE_2M_PHY,le_set_until_tx_timer_rx_2M
+le_set_until_tx_timer_rx_lr:
+	branch le_set_until_tx_timer_rx_coded_s2,ble_coded_info
+	branch le_set_until_tx_timer_rx_coded_s8
+
+le_set_until_tx_timer_rx_1M:
+	branch le_calc_stop_watch
+
+le_set_until_tx_timer_rx_2M:
+	rshift temp,temp
+	branch le_calc_stop_watch
+
+le_set_until_tx_timer_rx_coded_s2:
+	add temp,3,temp	//term2
+	lshift temp,temp
+	branch le_set_until_tx_timer_rx_coded
+
+le_set_until_tx_timer_rx_coded_s8:
+	add temp,3,temp	//term2
+	lshift3 temp,temp
+le_set_until_tx_timer_rx_coded:
+	setarg PARAM_CODED_C1_TERM1_TIME_40US
+	iadd temp,temp
+	branch le_calc_stop_watch
+
+le_calc_stop_watch:
+	fetch 1,mem_system_clk
+	imul32 temp,temp		//mips cpu
+	arg PARAM_20MS_INIT,rega
+	imul32 rega,pdata
+	isub temp,temp
+	copy stop_watch,pdata
+	isub temp,stop_watch
+	rtn
+
+le_transmit_receive_sifs_without_change_mode:
+	call le_transmit
+	fetcht 1,mem_last_freq
+	call set_freq_rx
+	call rf_rx_enable
+	enable swfine
+	arg 5500,timeup
+	branch le_receive_rxon
+
+
+le_transmit_receive_sifs:
+	bpatchx patch2b_0,mem_patch2b
+	fetch 1,mem_le_tx_phy
+	call le_enable_phy_by_pdata
+	call le_transmit
+le_transmit_receive_sifs_notx:
+	fetch 1,mem_le_rx_phy
+	call le_enable_phy_by_pdata
+
+	fetcht 1,mem_last_freq
+	call set_freq_rx
+	call rf_rx_enable
+	enable swfine
+	arg 5500,timeup
+	bmark0 mark_ble_lr,le_receive_rxon
+	arg 8500,timeup
+	branch le_receive_rxon
+
+le_transmit_norx:
+	bpatchx patch2b_1,mem_patch2b
+	call le_transmit
+	branch end_of_packet
+	
+le_transmit:
+	bpatchx patch2b_2,mem_patch2b
+	call le_prep
+	call le_tx_setfreq
+	call rf_debug_tx_on_line	//H
+	set1 TXGFSK,radio_ctrl
+	enable encode_fec0
+	enable is_tx
+	disable is_rx
+	call le_wait_tx
+	disable lr_s2en
+	bmark1 mark_ble_lr,le_transmit_lr
+	bmark1 mark_ble_2M,le_transmit_2M
+	rshift16 access,pdata
+	rshift8 pdata,pdata
+	rshift4 pdata,pdata
+	inject mod,40
+le_transmit_packet:
+	enable enable_white
+	enable enable_crc
+	bpatchx patch2b_3,mem_patch2b
+	fetch 1,mem_le_txheader
+	inject mod,8
+	ifetch 1,contr
+	copy pdata,loopcnt
+	inject mod,8
+	sub loopcnt,0,null
+	branch le_tr_nopayload,zero
+
+	fetch 1,core_ccm_ctrl
+	branch le_transmit_packet_not_enc,blank 
+	bmark1 mark_ble_encryption,le_transmit_packet_enc
+le_transmit_packet_not_enc:	
+	arg mem_le_txpayload,contr
+le_tr_loop:
+	ifetch 1,contr
+	inject mod,8
+	loop le_tr_loop
+	
+le_tr_nopayload:
+	enable enable_parity
+	inject mod,24
+	disable enable_parity
+	bmark0 mark_ble_lr,le_transmit_skip
+	disable enable_white
+	setarg 0
+	inject mod,3
+le_transmit_skip:
+	until null,tx_clear
+	nop 100          /* flush out the last bit */
+	bpatchx patch2b_4,mem_patch2b
+	disable encode_fec0
+	disable encode_fec3
+	call set_sync_on
+	call rf_debug_tx_off_line	//L
+le_check_start_pause_enc:
+	fetch 1,mem_le_txheader
+	and pdata,LLID_LE_LL,pdata
+	rtnne LLID_LE_LL
+	fetch 1,mem_le_enc_state
+	beq  FLAG_LE_ENC_PAUSE,le_clear_enc
+	rtnne FLAG_LE_SEND_START_ENC_REQ
+	fetch 1,mem_le_txpayload
+	beq LL_START_ENC_REQ,le_set_enc
+	rtn
+	
+
+le_transmit_packet_enc:
+	increase -4,loopcnt
+	copy loopcnt,temp	
+	call ccm_wait_enc	
+	arg mem_le_txpayload,contr
+le_transmit_packet_enc_loop:
+	ifetch 1,contr
+	inject mod,8
+	loop le_transmit_packet_enc_loop
+	call ccm_check_enc_done
+	copy regext,pdata
+	inject mod,32
+	branch le_tr_nopayload
+
+le_transmit_lr:
+	arg 10,loopcnt
+le_transmit_lr_preamble_loop:
+	setarg 0x3c
+	inject mod,8
+	loop le_transmit_lr_preamble_loop
+	disable encode_fec0
+	enable encode_fec3
+	rshift16 access,pdata
+	rshift16 pdata,pdata
+	rshift4 pdata,pdata
+	inject mod,32
+	bmark1 mark_ble_lr_s8,le_transmit_lr_s8
+le_transmit_lr_s2:
+	setarg 1
+	inject mod,5
+	enable lr_s2en
+	branch le_transmit_packet
+
+le_transmit_lr_s8:
+	setarg 0
+	inject mod,5
+	branch le_transmit_packet
+
+le_transmit_2M:
+	fetch 1,mem_system_clk	
+	fetcht 1,mem_le_tx2m_delay
+	iadd temp,pdata
+	call sleep				//2M ǰ˷ͱ1M
+	rshift16 access,pdata
+	rshift8 pdata,pdata
+	rshift4 pdata,temp
+	copy temp,pdata
+	inject mod,8
+	copy temp,pdata
+	inject mod,40
+	branch le_transmit_packet
+	
+
+le_update_param:
+	arg le_update_param_ahead1_cb,regc
+	arg le_update_param_cb,regb
+	arg lestate_update_param,queue
+	branch le_check_update_flag
+
+le_update_param_ahead1_cb:
+	add rega,coffset_sniff_anchor,contr
+	ifetcht 4,contr
+	add rega,coffest_le_new_transmitwindowsize,contr
+	ifetch 1,contr
+	add rega,coffset_le_window_size,contw
+	istore 1,contw
+	ifetch 2,contr
+	lshift2 pdata,pdata
+	iadd temp,timeup	//add windowsize
+	add rega,coffset_sniff_anchor,contw  
+	deposit timeup
+	istore 4,contw
+	ifetch 2,contr
+	lshift2 pdata,pdata
+	add rega,coffset_tsniff,contw
+	istore 2,contw
+	ifetch 2,contr
+	add rega,coffset_le_slave_latency,contw
+	istore 2,contw
+	ifetch 2,contr
+	store 2,mem_le_init_superto
+	branch le_receive_window_size
+
+le_update_param_cb:
+	ifetch 1,rega
+	set0 lestate_got_first_packet,pdata
+	istore 1,rega
+	storer rega,2,mem_rega
+	jam BT_EVT_LE_PARSE_CONN_PARAM_ACCEPTED,mem_fifo_temp
+	call ui_ipc_send_event
+	fetchr rega,2,mem_rega
+	rtn	
+
+le_update_channel_map:
+	arg 0,regc
+	arg le_update_channel_map_cb,regb
+	arg lestate_update_map,queue
+	branch le_check_update_flag
+	
+le_update_channel_map_cb:
+	add rega,coffset_le_new_map,contr
+	ifetch 5,contr
+	add rega,coffset_le_channel_map,contw
+	istore 5,contw
+	branch le_calc_channel_map
+	
+
+le_update_phy:
+	arg 0,regc
+	arg le_update_phy_cb,regb
+	arg lestate_update_phy,queue
+	branch le_check_update_flag
+	
+le_update_phy_cb:
+	add rega,coffset_le_new_m2s_phy,contr
+	ifetch 1,contr
+	call le_update_phy_cb_m2s
+	istore 1,contw
+	add rega,coffset_le_new_s2m_phy,contr
+	ifetch 1,contr
+	call le_update_phy_cb_s2m
+	istore 1,contw
+	storer rega,2,mem_rega
+	jam BT_EVT_LE_UPDATE_PHY,mem_fifo_temp
+	call ui_ipc_send_event
+	fetchr rega,2,mem_rega
+	rtn	
+
+le_update_phy_cb_m2s:
+	call le_update_phy_cb_m2s_no_change,blank
+	add rega,coffset_le_rx_phy,contw
+	nrtn master
+	fetcht 1,mem_le_tx_phys
+	isolate1 BIT_LE_CODED_PHY_S8,temp
+	setflag true,BIT_LE_CODED_PHY_S8,pdata
+	add rega,coffset_le_tx_phy,contw
+	rtn
+
+le_update_phy_cb_m2s_no_change:
+	add rega,coffset_le_rx_phy,contr
+	ifetch 1,contr
+	nrtn master
+	add rega,coffset_le_tx_phy,contr
+	ifetch 1,contr
+	rtn
+
+le_update_phy_cb_s2m:
+	call le_update_phy_cb_s2m_no_change,blank
+	fetcht 1,mem_le_tx_phys
+	isolate1 BIT_LE_CODED_PHY_S8,temp
+	setflag true,BIT_LE_CODED_PHY_S8,pdata
+	add rega,coffset_le_tx_phy,contw
+	nrtn master
+	set0 BIT_LE_CODED_PHY_S8,pdata
+	add rega,coffset_le_rx_phy,contw
+	rtn
+
+le_update_phy_cb_s2m_no_change:
+	add rega,coffset_le_tx_phy,contr
+	ifetch 1,contr
+	nrtn master
+	add rega,coffset_le_rx_phy,contr
+	ifetch 1,contr
+	rtn
+	
+
+//regb regc is cb function
+//queue is state flag
+le_check_update_flag:
+	bpatchx patch2b_5,mem_patch2b
+	ifetch 1,rega
+	qisolate0 pdata
+	rtn true
+	add rega,coffset_le_event_cnt,contr
+	ifetcht 2,contr
+	add rega,coffset_le_instant,contr
+	ifetch 2,contr
+	
+	isub temp,pdata
+	branch le_update,zero
+	nbranch le_check_update_small,positive
+	sub pdata,1,null
+	branch le_update_ahead1,zero
+	rtn
+	
+le_update_ahead1:
+	copy regc,pdata
+	branch callback_func
+
+le_update:
+	ifetch 1,rega
+	qset0 pdata
+	istore 1,rega
+	copy regb,pdata
+	branch callback_func
+	
+le_check_update_small:
+	add rega,coffset_le_event_cnt,contr
+	ifetch 2,contr
+	add rega,coffset_le_instant,contr
+	ifetch 2,contr
+	isub temp,pdata
+	arg 0xffff,temp
+	isub temp,null
+	branch le_update,zero
+	arg 0xf000,temp
+	isub temp,null
+	nbranch le_update,positive
+	rtn
+	
+
+le_check_retransmit:
+	fetcht 1,mem_le_arq
+	fetch 1,mem_le_rxbuf_data_header
+//	isolate1 md,pdata
+//	setflag true,mark_ble_rx_md,mark
+	rshift pdata,pdata
+	ixor temp,pdata
+	isolate1 nesn,pdata
+	setflag true,mark_old_packet,mark	/* retransmit */
+	rtn
+
+
+le_acknowledge:
+	bpatchx patch2b_6,mem_patch2b
+	call le_supervision_flush
+	rtnmark1 mark_ble_crc_fail
+	call le_check_wak
+	fetch 1,mem_le_rxbuf_data_header
+	isolate1 md,pdata
+	setflag true,mark_ble_rx_md,mark
+	rshift pdata,pdata
+	ixor temp,pdata
+	isolate1 nesn,pdata
+	setflag true,mark_old_packet,mark	/* retransmit */
+	rtnmark1 mark_old_packet
+	fetch 1,mem_le_rxbuf_data_length
+	branch le_ack_unenc,blank		/* empty packet, no decryption */
+	fetch 1,mem_le_state
+	bbit0 lestate_encryption,le_ack_unenc
+	fetcht 4,mem_le_peer_mic
+	fetch 4,mem_ccm_last_mic			
+	isub temp,null
+	branch assert,zero
+	storet 4,mem_ccm_last_mic
+	fetch 5,mem_ccm_pcnt_rx
+	increase 1,pdata
+	set1 LE_CCM_DIRECTIONBIT,pdata
+	store 5,mem_ccm_pcnt_rx
+	
+le_ack_unenc:
+	fetcht 1,mem_le_arq
+	setflip nesn,temp
+	storet 1,mem_le_arq
+	fetch 1,mem_le_configuration
+	rtnbit0 BIT_BLE_DEAL_BB_PACKET
+	bpatchx patch2b_7,mem_patch2b
+	fetch 1,mem_le_rxbuf_data_length
+	rtn blank		//empty packet
+	fetch 1,mem_le_rxbuf_data_header
+	compare LLID_CONTINUE,pdata,3
+	branch le_parse_writing_attribute_continue,true //ACL-U continue
+	compare LLID_START,pdata,3
+	branch le_parse_writing_attribute_start,true
+	rtn
+
+	
+le_check_wak:
+	bpatchx patch2c_0,mem_patch2c
+	fetcht 1,mem_le_arq
+	isolate0 wak,temp
+	rtn true
+	fetch 1,mem_le_rxbuf_data_header
+	lshift pdata,pdata
+	ixor temp,pdata
+	rtnbit0 sn			/* received NESN is same as SN, NAK */
+	set0 wak,temp
+	setflip sn,temp
+	storet 1,mem_le_arq
+	compare 3,temp,3
+//	nrtn true
+	rtn
+	
+
+le_set_enc:
+	fetch 1,mem_le_state
+	set1 lestate_encryption,pdata
+	store 1,mem_le_state
+	set1 mark_ble_encryption,mark
+	rtn	
+	
+le_clear_enc:
+	bpatchx patch2c_1,mem_patch2c
+	jam FLAG_LE_ENC_NULL,mem_le_enc_state
+	arg 0,pdata
+	store 4,mem_ccm_last_mic
+	store 5,mem_ccm_pcnt_tx
+	set1 LE_CCM_DIRECTIONBIT,pdata
+	store 5,mem_ccm_pcnt_rx
+	fetch 1,mem_le_state
+	set0 lestate_encryption,pdata
+	store 1,mem_le_state
+	set0 mark_ble_encryption,mark
+	rtn
+
+
+
+
+le_scan_check_sender_addr_type:
+	arg 1,rega// sender_addr_type
+	fetch 1,mem_le_rxbuf_adv_connect_ind_header
+	rtnbit1 LE_SENDER_ADDR_BIT
+	arg 0,rega
+	rtn
+
+
+le_get_master_rx_max:
+	copy contr,contw
+	fetcht 2,mem_remote_rx_max_octets
+	copy contw,contr
+	rtn
+
+
+le_prepare_tx:
+	bpatchx patch2c_2,mem_patch2c
+	fetch 1,mem_le_arq
+	rtnbit1 wak
+	call le_check_tx_md
+	call le_fifo_get_first_tx_ptr	//no packet to send
+	branch le_send_empty,blank
+	ifetch 2,contr
+	ifetcht 2,contr
+	copy temp,rega
+	isub rega,pdata
+	call le_get_master_rx_max
+	call not_greater_than
+	copy pdata,temp
+	ifetchr type,1,contr
+	copy rega,pdata
+	iadd contr,pdata
+	store 2,mem_contr
+	call le_update_tx_type
+	call le_send_packet
+	
+	call le_fifo_get_first_tx_ptr
+	ifetch 2,contr
+	copy pdata,rega	//rega:total length
+	copy contr,regc
+	ifetcht 2,contr
+	copy temp,regb	//temp&regb is offset
+	isub regb,pdata
+	call le_get_master_rx_max
+	call not_greater_than
+	iadd regb,pdata
+	istore 2,regc
+	isub rega,null
+	nrtn zero
+	branch le_fifo_release_first_node
+
+	
+le_check_tx_md:
+	call le_check_continue
+	rtnmark1 mark_ble_tx_md
+	fetch 1,mem_le_configuration
+	bbit0 BIT_BLE_TRANSMIT_PACKET_BY_MD,le_clear_md
+	call le_fifo_get_second_tx_ptr	//no packet to send
+	branch le_clear_md,blank
+	branch le_set_md
+
+	
+le_check_continue:
+	call le_fifo_get_first_tx_ptr	//no packet to send
+	branch le_clear_md,blank
+	ifetch 2,contr				//pdata:length
+	ifetcht 2,contr				//temp:offest
+	isub temp,rega			//pdata:length - offset
+	call le_get_master_rx_max
+	copy temp,pdata
+	isub rega,null
+	branch le_clear_md,positive				//27 > length -offset
+le_set_md:
+	set1 mark_ble_tx_md,mark
+	rtn
+
+le_clear_md:
+	set0 mark_ble_tx_md,mark
+	rtn
+
+le_update_tx_type:
+	copy rega,pdata
+	rtn blank
+	arg LLID_CONTINUE,type
+	rtn
+
+
+le_att_check_notification_enable: // temp ->handle,output-> pdata,output :contr->rega
+	bpatchx patch2c_3,mem_patch2c
+	increase 1,temp
+	call le_att_get_handle_ptr
+	increase -2,contr
+	ifetch 2,contr
+	arg CLIENT_CHARACTERTIC_CONFIGURATION,temp
+	isub temp,null
+	nrtn zero
+	increase 1,contr
+	copy contr,rega
+	ifetch 1,contr
+	rtn
+	
+
+le_send_empty:
+	force 0,temp
+	force 1,type
+	
+le_send_packet:
+	bpatchx patch2c_4,mem_patch2c
+	storet 1,mem_le_txlen
+	fetcht 1,mem_le_arq
+	set1 wak,temp
+	and temp,0xfc,pdata
+	ior type,pdata
+	store 1,mem_le_arq
+	and_into 0x1f,pdata
+	isolate1 mark_ble_tx_md,mark
+	setflag true,md,pdata
+	store 1,mem_le_txheader
+
+	fetch 1,mem_le_txheader
+	compare 1,type,3
+	nbranch le_send_no_txlen,true
+	fetch 1,mem_le_txlen
+	rtn blank
+	
+le_send_no_txlen:	
+	bmark1 mark_ble_encryption,le_send_packet_enc
+	fetchr loopcnt,1,mem_le_txlen
+	fetch 2,mem_contr
+	copy pdata,contr
+	arg mem_le_txpayload,contw
+	branch memcpy_fast
+	
+le_send_packet_enc:
+	call load_sk
+	branch le_encrypt_new_start
+
+get_lpm_wake_ble_rx_lock:
+	arg wake_lock_ble_rx,queue
+	branch lpm_get_wake_lock
+
+put_lpm_wake_ble_rx_lock:
+	arg wake_lock_ble_rx,queue
+	branch lpm_put_wake_lock
+
+
+le_parse:
+	bpatchx patch2c_5,mem_patch2c
+	rtnmark1 mark_old_packet
+	rtnmark1 mark_ble_crc_fail
+	fetch 1,mem_le_rxbuf_data_header
+	and pdata,0x3,pdata
+	store 1,mem_le_packet_llid
+	fetch 1,mem_le_rxbuf_data_length
+	rtn blank							//empty rtn
+	setarg mem_le_rxbuf_data_payload
+	store 2,mem_le_payload_ptr
+	bpatchx patch2c_6,mem_patch2c
+	fetch 1,mem_le_packet_llid
+	rtneq LLID_RESERVED
+	beq LLID_LE_LL,le_parse_ll
+le_parse_l2cap:
+	call le_check_l2cap_complete
+	nbranch get_lpm_wake_ble_rx_lock,user
+	call put_lpm_wake_ble_rx_lock
+	setarg 0
+	store 2,mem_le_packet_len_recved
+	fetch 2,mem_le_payload_ptr
+	add pdata,2,contr	//l2cap length
+	bpatchx patch2c_7,mem_patch2c
+	ifetch 2,contr
+	beq LE_L2CAP_CID_ATT,le_parse_att
+	beq LE_L2CAP_CID_SMP,le_parse_smp
+	beq LE_L2CAP_CID_SIGNAL,le_parse_signaling
+	rtn
+
+
+le_check_l2cap_complete:
+	fetch 1,mem_le_packet_llid
+	beq LLID_START,le_check_l2cap_llid_start
+	beq LLID_CONTINUE,le_check_l2cap_llid_continue
+	rtn
+
+//input: pdata is CID number
+//output: 	if CID is legal ,enable user
+//		if ICD is illegal,disable user 
+le_check_l2cap_CID_legal:
+	call enable_user
+	arg LE_L2CAP_CID_ATT,temp
+	isub pdata,null
+	rtn zero
+	arg LE_L2CAP_CID_SIGNAL,temp
+	isub pdata,null
+	rtn zero
+	arg LE_L2CAP_CID_SMP,temp
+	isub pdata,null
+	rtn zero
+	branch disable_user
+
+	
+le_check_l2cap_llid_start:
+	fetch 2,mem_le_payload_ptr
+	copy pdata,contr
+	ifetch 2,contr
+	store 2,mem_le_l2cap_size
+	ifetch 2,contr			//CID
+	call le_check_l2cap_CID_legal
+	nrtn user		//CID error
+	fetcht 1,mem_le_rxbuf_data_length
+	storet 2,mem_le_packet_len_recved
+	fetch 2,mem_le_l2cap_size
+	increase 4,pdata		//CID:2 L2cap length 2
+	isub temp,null
+	branch enable_user,zero
+	fetchr loopcnt,1,mem_le_rxbuf_data_length
+	arg mem_le_l2cap_buf,contw
+	fetch 2,mem_le_payload_ptr
+	copy pdata,contr
+	call memcpy_fast
+	branch disable_user
+
+//no input
+//output: 	if CID is legal ,enable user
+//		if ICD is illegal,disable user 
+le_check_l2cap_continue_legal:
+	call enable_user
+	fetch 2,mem_le_packet_len_recved
+	nrtn blank
+	branch disable_user
+
+le_check_l2cap_llid_continue:
+	call le_check_l2cap_continue_legal
+	nrtn user		//check receive start packet
+	fetch 2,mem_le_packet_len_recved
+	arg mem_le_l2cap_buf,contw
+	iadd contw,rega
+	fetcht 1,mem_le_rxbuf_data_length
+	iadd temp,pdata
+	store 2,mem_le_packet_len_recved
+	fetchr loopcnt,1,mem_le_rxbuf_data_length
+	copy rega,contw
+	fetch 2,mem_le_payload_ptr
+	copy pdata,contr
+	call memcpy_fast
+	setarg mem_le_l2cap_buf
+	store 2,mem_le_payload_ptr		//update ptr->mem_le_l2capbuff
+	fetch 2,mem_le_l2cap_size
+	increase 4,pdata
+	fetcht 2,mem_le_packet_len_recved
+	isub temp,null
+	branch enable_user,zero
+	branch disable_user
+
+
+
+	/* rega pointers to data, regb is length */
+le_writeatt_cb:
+	fetch 2,mem_cb_att_write
+	branch callback_func
+	
+le_supervision_update:
+	bpatchx patch2d_0,mem_patch2d
+	fetcht 4,mem_le_supervision_timer
+	call get_clkbt
+	isub temp,timeup					/* and to 28 bits */
+	deposit timeup
+	fetcht 2,mem_le_superto
+	lshift4 temp,temp
+	lshift temp,temp
+	isub temp,pdata
+	rtn
+	
+le_supervision_flush:
+	call get_clkbt
+	store 4,mem_le_supervision_timer
+	rtn
+
+	
+//input rega
+le_receive_window_size:
+	bpatchx patch2d_1,mem_patch2d
+	add rega, coffset_le_peer_sca,contr
+	ifetch 1,contr
+	call le_sca_map
+	add rega, coffset_tsniff,contr
+	ifetch 2,contr
+	imul32 temp,pdata
+	fetcht 2,mem_param_rt_rthalfslot
+	imul32 temp,pdata
+	arg 1000000,temp
+	idiv temp
+	arg PARAM_WINDOWN_SIZE,temp
+	fetch 1,mem_system_clk
+	imul32 temp,temp
+	add rega, coffset_le_window_size,contr
+	ifetch 1,contr
+	imul32 temp,pdata
+	iadd temp,pdata
+	store 4,mem_le_transmit_window	
+	fetch 2,mem_rx_window_sniff
+	call wait_div_end
+	quotient temp
+	iadd temp,pdata
+	add rega, coffset_rx_window,contw
+	istore 2,contw
+	rtn
+
+	
+
+	
+le_modified_name:
+	bpatchx patch2d_2,mem_patch2d
+	call le_modified_name_att_list
+	branch le_modified_name_adv
+
+le_modified_name_att_list:
+	jam 2,mem_le_search_att_type_length
+	arg UUID_CHRCTR_DEVICE_NAME,temp
+	storet 2,mem_le_search_att_type
+	call le_att_get_uuid_ptr
+	rtn blank
+	ifetch 1,contr						// attribute length
+	copy contr,contw
+	fetcht 1,mem_le_name_len
+	copy temp,loopcnt
+	isub temp,null
+	nbranch le_name_length_longer_than_att,positive
+	isub temp,temp
+	arg mem_le_name,contr
+	call memcpy_fast
+	copy temp,loopcnt
+	ncall memcpy_empty,zero
+	rtn
+le_name_length_longer_than_att:
+	copy pdata,loopcnt
+	arg mem_le_name,contr
+	branch memcpy_fast
+
+
+le_modified_name_adv:
+	arg mem_le_adv_data_len+32,regc
+	arg mem_le_adv_data,rega
+	call le_modified_name_adv_and_scan
+	setarg 0
+	setflag user,0,pdata
+	store 1,mem_pdatatemp
+	arg mem_le_scan_data_len+32,regc
+	arg mem_le_scan_data,rega
+	call le_modified_name_adv_and_scan
+	rtn user
+	fetch 1,mem_pdatatemp
+	branch assert,blank
+	rtn
+
+
+le_modified_name_adv_and_scan:
+	bpatchx patch2d_3,mem_patch2d
+	call enable_user
+	call clear_temp_block
+	arg 0,regb	//current length
+	arg mem_le_data_temp,contw
+	call le_modified_name_adv_loop
+	fetch 1,mem_le_name_len
+	add pdata,1,temp
+	iadd regb,rega	
+	increase 2,rega
+	sub rega,0x1f,null
+	nbranch le_modified_name_adv_and_scan_name_overflow,positive
+	istoret 1,contw		//store ble name length
+	arg GAP_ADTYPE_LOCAL_NAME_COMPLETE,temp
+	istoret 1,contw		//store ble name type
+	iforce loopcnt
+	call memcpy_fast
+	copy rega,regb
+le_modified_name_adv_and_scan_store_data:
+	deposit regb
+	store 1,mem_le_data_len_temp
+	arg mem_le_data_len_temp,contr
+	setarg -32
+	iadd regc,contw
+	branch memcpy32
+
+le_modified_name_adv_and_scan_name_overflow:
+	call disable_user
+	branch le_modified_name_adv_and_scan_store_data
+	
+le_modified_name_adv_loop:
+	ifetch 1,rega		//pdata:length
+	rtn blank			//length is zero,ending find
+	pincrease 1		//length += 1
+	ifetcht 1,contr		//pdata:type
+	sub temp,GAP_ADTYPE_LOCAL_NAME_COMPLETE,null
+	branch le_modified_name_adv_found_name,zero
+	iadd regb,regb	
+	copy rega,contr
+	iforce loopcnt
+	call memcpy_fast
+	copy contr,rega
+le_modified_name_adv_loop2:
+	deposit rega
+	isub regc,null
+	rtn positive
+	branch le_modified_name_adv_loop
+
+le_modified_name_adv_found_name:
+	iadd rega,rega
+	branch le_modified_name_adv_loop2
+
+
+memcpy_empty:
+	setarg SPACE
+	istore 1,contw
+	loop memcpy_empty
+	rtn
+
+	
+le_lpm_set_mult:
+	bpatchx patch2d_4,mem_patch2d
+	disable wake
+	branch le_lpm_set_mult_attempt,attempt
+	nbranch le_lpm_lost,match
+le_lpm_set_mult_attempt:
+	call lpm_match
+	fetch 2,mem_rx_window_sniff
+	store 2,mem_le_receive_window
+	fetch 1,mem_le_configuration
+	bbit1 BIT_BLE_SHORT_MULT,lpm_mult_short	//check flag,if flag is 1,always short mult
+	bmark1 mark_old_packet,lpm_mult_short
+	fetch 1,mem_le_rxbuf_data_length
+	nbranch lpm_mult_short,blank		// rx not empty, short interval
+	fetch 1,mem_le_txlen
+	nbranch lpm_mult_short,blank		// tx not empty, short interval
+	
+	fetch 1,mem_le_state
+	bbit1 lestate_update_param,lpm_mult_short
+	bbit1 lestate_update_phy,lpm_mult_short
+	bbit1 lestate_update_map,lpm_mult_short
+	branch lpm_mult_wait_timeout
+	
+le_lpm_lost:
+	fetch 1,mem_sniff_unint_lost
+	sub pdata,30,null
+	nbranch lpm_lost,positive
+	fetcht 2,mem_rx_window_sniff
+	rshift temp,temp
+	fetch 2,mem_le_receive_window
+	iadd temp,pdata
+	store 2,mem_le_receive_window
+	branch lpm_lost
+
+///////////////////////////////BLE CONFIG//////////////////////////////////////////
+le_set_config_fixed_tk:
+	arg BIT_BLE_PASSKEY_FIXED_KEY,queue
+	branch le_set_config
+
+le_clr_config_fixed_tk:
+	arg BIT_BLE_PASSKEY_FIXED_KEY,queue
+	branch le_clr_config
+
+le_set_config_fixed_ltk:
+	arg BIT_BLE_PAIRING_FIXED_LTK,queue
+	branch le_set_config
+
+le_clr_config_fixed_ltk:
+	arg BIT_BLE_PAIRING_FIXED_LTK,queue
+	branch le_clr_config
+
+le_set_config_more_data:
+	arg BIT_BLE_TRANSMIT_PACKET_BY_MD,queue
+	branch le_set_config
+
+le_clr_config_more_data:
+	arg BIT_BLE_TRANSMIT_PACKET_BY_MD,queue
+	branch le_clr_config
+
+le_set_config_read_authentication:
+	arg BIT_BLE_READ_AUTH,queue
+	branch le_set_config
+
+le_clr_config_read_authentication:
+	arg BIT_BLE_READ_AUTH,queue
+	branch le_clr_config
+
+le_set_config_write_authentication:
+	arg BIT_BLE_WRITE_AUTH,queue
+	branch le_set_config
+
+le_clr_config_write_authentication:
+	arg BIT_BLE_WRITE_AUTH,queue
+	branch le_clr_config
+
+le_set_config_short_mult:
+	arg BIT_BLE_SHORT_MULT,queue
+//	branch le_set_config
+le_set_config:
+	fetch 1,mem_le_configuration
+	qset1 pdata
+	store 1,mem_le_configuration
+	rtn
+
+
+le_clr_config_short_mult:
+	arg BIT_BLE_SHORT_MULT,queue
+//	branch le_clr_config
+le_clr_config:
+	fetch 1,mem_le_configuration
+	qset0 pdata
+	store 1,mem_le_configuration
+	rtn
+
+
+
+le_set_fixed_ltk:
+	setarg 0x112233
+	store 3,mem_le_fixed_ltk
+	setarg 0x445566
+	istore 3,contw
+	setarg 0x778899
+	istore 3,contw
+	setarg 0x001122
+	istore 3,contw
+	setarg 0x334455
+	istore 3,contw
+	setarg 0x66
+	branch istore_1_contw_rtn
+
+
+
+le_set_justwork:
+	setarg 0x01000302
+	store 4,mem_le_pres
+	setarg 0x010010
+	store 3,mem_le_pres_max_keysize
+	jam 1,mem_le_pairing_mode
+	rtn
+
+/////////////////////////////////////////////////////////////////////////
+
+le_fifo_malloc_tx_empty:
+	arg 0,rega
+	arg LLID_EMPTY,type
+	branch le_fifo_malloc_tx
+
+
+//rega:len regb:ll opcode
+le_fifo_malloc_tx_ll:
+	bpatchx patch2d_5,mem_patch2d
+	arg LLID_LE_LL,type
+	call le_fifo_malloc_tx
+	copy regb,pdata
+	istore 1,contw
+	rtn
+	
+
+//rega:len regb:cid
+le_fifo_malloc_tx_l2cap:
+	bpatchx patch2d_6,mem_patch2d
+	force LLID_START,type
+	increase 4,rega
+	call le_fifo_malloc_tx
+	increase -4,rega
+	copy rega,pdata
+	istore 2,contw
+	copy regb,pdata
+	istore 2,contw
+	rtn
+
+
+//rega:len type:llid
+le_fifo_malloc_tx:
+	bpatchx patch2d_7,mem_patch2d
+	increase 5,rega
+	call ble_l2cap_malloc
+	increase -5,rega
+	copy rega,pdata
+	istore 2,contw				//lengh
+	setarg 0
+	istore 2,contw				//offset
+	copy type,pdata
+	istore 1,contw				//LLID
+	rtn
+
+
+le_fifo_get_first_tx_ptr:
+	bpatchx patch2e_0,mem_patch2e
+	call l2cap_malloc_fifo_out
+	copy pdata,contr
+	rtn
+
+le_fifo_get_second_tx_ptr:
+	fetch 2,mem_tx_fifo2_ptr
+	rtn
+
+le_fifo_get_last_tx_ptr:
+	call le_fifo_get_last_tx_ptr0
+	copy pdata,contr
+	rtn
+
+
+le_fifo_get_last_tx_ptr0:
+	fetch 2,mem_tx_fifo3_ptr
+	rtn
+
+
+le_fifo_get_first_l2cap_ptr:
+	call le_fifo_get_first_tx_ptr
+	increase 5,contr
+	rtn
+
+le_fifo_get_first_att_ptr:
+	call le_fifo_get_first_tx_ptr
+	increase 9,contr
+	rtn
+
+le_fifo_get_last_att_ptr:
+	call le_fifo_get_last_tx_ptr
+	increase 9,contr
+	rtn
+
+le_fifo_get_last_l2cap_ptr:
+	call le_fifo_get_last_tx_ptr
+	increase 5,contr
+	rtn
+
+
+le_fifo_check_full:
+	branch l2cap_malloc_is_fifo_full
+
+
+le_fifo_check_nearly_full:
+	branch l2cap_malloc_is_fifo_nearly_full
+
+	
+le_fifo_check_empty:
+	branch l2cap_malloc_is_fifo_empty
+
+
+le_fifo_release_first_node:
+	branch l2cap_malloc_free
+
+
+/*
+	function name:le_set_dle (data packet length extension)
+	input:pdata is dle params
+	bit0~bit15 max rx octets
+	bit16~bit31 max rx time
+	bit32~bit47 max tx octets
+	bit48~bit63 max tx time
+*/
+le_set_dle:
+	store 8,mem_local_rx_max_octets
+	branch le_set_feature_data_packet_length_extension
+
+
+/*
+	function name:le_set_phys
+	input:temp is tx & rx phys
+	bit0~bit7 is tx phys
+	bit8~bit15 is rx phys
+*/
+le_set_phys:
+	and temp,0xff,rega
+	call le_set_tx_phy
+	rshift8 temp,rega
+//	branch le_set_rx_phy
+le_set_rx_phy:
+	storer rega,1,mem_le_rx_phys
+	branch le_set_phy_common
+
+le_set_tx_phy:
+	storer rega,1,mem_le_tx_phys
+le_set_phy_common:	
+	isolate1 BIT_LE_2M_PHY,rega
+	call le_set_feature_2M_phy,true
+	isolate1 BIT_LE_CODED_PHY,rega
+	call le_set_feature_coded_phy,true
+	rtn
+
+
+
+le_set_feature_2M_phy:
+	arg BIT_LL_FEATURE_LE_2M_PHY,queue
+	branch le_set_feature
+
+
+le_set_feature_coded_phy:
+	arg BIT_LL_FEATURE_LE_CODED_PHY,queue
+	branch le_set_feature
+
+le_set_feature_data_packet_length_extension:
+	arg BIT_LL_FEATURE_LE_DATA_PACKET_LENGTH_EXTENSION,queue
+//	branch le_set_feature
+le_set_feature:
+	fetch 8,mem_le_local_feature
+	qset1 pdata
+	store 8,mem_le_local_feature
+	rtn
+
+le_set_fixed_ltk_justwork:
+	call le_set_config_fixed_ltk
+	call le_set_justwork
+	call le_set_fixed_ltk
+	branch le_set_config_read_authentication
+
+
Index: program/ble_protocol_stack/le_advertising.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/ble_protocol_stack/le_advertising.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/ble_protocol_stack/le_advertising.prog	(working copy)
@@ -0,0 +1,396 @@
+
+/*
+ble core spec advertising
+*/
+
+le_advertising_dispatch:
+	jam FUN_RX_LL_1M_PHY,mem_le_rx_phy
+	jam FUN_TX_LL_1M_PHY,mem_le_tx_phy
+	set0 mark_ble_crc_fail,mark	
+	set1 mark_adv,mark	
+	set0 mark_ble_encryption,mark
+	call le_enable
+	call le_scan
+	call le_adv
+	set0 mark_adv,mark	
+	branch le_disable
+
+le_scan:
+	bpatchx patch2e_1,mem_patch2e
+	fetch 1,mem_le_scan_enable
+	rtnne LE_SCAN_ENABLE
+	arg le_scan_interval_timer,queue
+	call timer_check
+	nrtn blank
+	fetch 2,mem_le_scan_interval
+	fetcht 2,mem_le_scan_window
+	isub temp,pdata
+	arg le_scan_interval_timer,queue
+	call timer_init
+	disable master
+	call le_init_adv
+	call le_wait_adv
+	nrtn match
+	bpatchx patch2e_2,mem_patch2e
+	fetch 6,mem_le_rxbuf+2
+	store 6,mem_le_plap
+//	call le_scan_dongle
+
+	fetch 1,mem_le_adv_rcv
+	increase 1,pdata
+	store 1,mem_le_adv_rcv
+	call le_create_conn
+	rtn master
+	call le_send_scan_request
+	nrtn match
+	fetch 1,mem_le_scanrsp_rcv
+	increase 1,pdata
+	store 1,mem_le_scanrsp_rcv
+	fetch 9,mem_le_rxbuf+8
+	store 9,mem_temp_block0
+	rtn
+
+
+le_wait_adv:
+	bpatchx patch2e_3,mem_patch2e
+	call le_next_adv_channel
+	call le_receive_adv
+	fetch 1,mem_le_adv_waitcnt
+	increase 1,pdata
+	store 1,mem_le_adv_waitcnt
+	rtn
+
+
+le_create_conn:
+	bpatchx patch2e_4,mem_patch2e
+	fetch 1,mem_cmd_le_create_conn
+	rtnne hci_cmd_le_create_conn
+	fetch 6,mem_le_plap
+	fetcht 6,mem_le_conn_peer_addr
+	isub temp,null
+	nrtn zero
+	call context_new
+	nrtn zero
+	call le_connect_request
+	call le_init_master
+	call le_send_version_ind
+	jam BT_EVT_LE_CONNECTED,mem_fifo_temp
+	call ui_ipc_send_event	
+	jam 0,mem_hci_cmd
+	jam 0,mem_le_peer_sca
+	jam 0,mem_le_scan_enable
+	jam 0,mem_cmd_le_create_conn
+	branch context_save
+
+le_connect_request:
+	bpatchx patch2e_5,mem_patch2e
+	force -1,pdata
+	setsect 2,1
+	store 5,mem_le_channel_map
+	arg mem_le_state,rega	
+	call le_calc_channel_map	
+	force 4,loopcnt
+	arg mem_le_access,contw
+	call generate_random_loop
+	fetch 2,mem_le_timeout
+	store 2,mem_le_superto
+le_con_req_hop_retry:
+	random pdata
+	and_into 0xf,pdata
+	sub pdata,4,null
+	branch le_con_req_hop_retry,positive
+	store 1,mem_le_hop
+//	store 1,mem_tmp1
+	bpatchx patch2e_6,mem_patch2e
+	fetcht 2,mem_le_conn_interval
+	storet 2,mem_le_tsniff	
+	copy temp,regc			// tsniff in regc
+	add clkn_bt,7,pdata			// leave space for offset
+	idiv regc
+	call wait_div_end
+	remainder rega
+	isub rega,pdata
+	iadd regc,pdata
+	fetcht 2,mem_le_dsniff
+	iadd temp,pdata
+	store 4,mem_le_anchor
+	isub clkn_bt,rega
+	increase -6,rega			// window offset
+	arg 0x2205,regb			// length & CONN_REQ PDU
+	fetch 1,mem_le_conn_own_addr_type
+	nsetflag blank,LE_SENDER_ADDR_BIT,regb
+	fetch 1,mem_le_conn_peer_addr_type
+	nsetflag blank,LE_RECEIVER_ADDR_BIT,regb
+	copy regb,pdata
+	store 2,mem_le_txheader
+	fetch 6,mem_le_lap
+	istore 6,contw//own addr
+	fetch 6,mem_le_plap
+	istore 6,contw// peer addr
+	fetch 4,mem_le_access
+	istore 4,contw
+	random pdata
+	istore 2,contw				/* crc init */
+	random pdata
+	istore 1,contw
+	force 2,pdata				/* window size */	
+	istore 1,contw
+	rshift2 rega,pdata
+	istore 2,contw				/* window offset */
+	rshift2 regc,pdata			
+	istore 2,contw				/* conn Interval */
+	bpatchx patch2e_7,mem_patch2e
+	setarg 0					/* slave latency */
+	istore 2,contw
+	fetch 2,mem_le_timeout
+	istore 2,contw
+	fetch 5,mem_le_channel_map
+	istore 5,contw				/* channel map */
+	fetch 1,mem_le_hop
+	arg param_le_sca,temp
+	ior temp,pdata
+	istore 1,contw
+	call le_transmit_norx
+	setarg mem_le_txheader
+	add pdata,18,contr
+	ifetch 3,contr
+	store 3,mem_le_crcinit
+	rtn
+		
+
+le_adv:
+	jam 36,mem_le_ch_mapped
+	jam 0,mem_le_adv_channel_map_temp
+	call le_send_adv_protect_txbuf
+	call le_adv_loop
+	branch le_send_adv_recover_txbuf
+	
+le_adv_loop:
+	bpatchx patch2f_0,mem_patch2f
+	fetch 1,mem_le_adv_enable
+	rtn blank
+	arg le_adv_interval_timer,queue
+	call timer_check
+	nrtn blank
+	enable swfine
+	call le_init_adv
+	call le_next_adv_channel
+	call le_send_adv_ind
+	nbranch le_adv_not_match,match
+	fetch 1,mem_le_req_rcv
+	increase 1,pdata
+	store 1,mem_le_req_rcv
+	fetch 1,mem_le_rxbuf_adv_header
+	and pdata,0x0f,pdata
+	beq SCAN_REQ,le_send_scan_response
+	beq CONNECT_REQ,le_parse_connect_req
+le_adv_not_match:
+	bpatchx patch2f_1,mem_patch2f
+	fetch 1,mem_le_adv_channel_map_temp
+	fetcht 1,mem_le_adv_channel_map
+	isub temp,null
+	nbranch le_adv_loop,zero
+	fetch 1,mem_device_option
+	sub pdata,DVC_OP_CAR,null
+	branch car_le_stop_random_delay_check,zero
+	random pdata 
+	arg 0x1ff,temp
+	iand temp,pdata
+	add pdata,250,pdata
+	call delay
+	arg le_adv_interval_timer,queue
+	fetch 2,mem_le_adv_interval
+	branch timer_init
+	
+le_send_adv_protect_txbuf:
+	arg mem_le_tx_buf_temp,contw
+	arg mem_le_txheader,contr	
+	branch memcpy48
+	
+le_send_adv_recover_txbuf:
+	arg mem_le_tx_buf_temp,contr
+	arg mem_le_txheader,contw
+	branch memcpy48
+
+le_init_adv:
+	bpatchx patch2f_2,mem_patch2f
+	disable master
+le_adv_access:
+	setarg 0x8e89be
+	lshift8 pdata,pdata
+	or_into 0xd6,pdata
+	iforce access
+	setarg 0x555555
+	store 3,mem_le_crcinit
+	rtn
+
+
+
+le_send_adv_ind:
+	bpatchx patch2f_3,mem_patch2f
+	fetch 1,mem_le_adv_type
+	fetcht 1,mem_le_adv_own_addr_type
+	lshift4 temp,temp
+	lshift2 temp,temp
+	iadd temp,temp
+	storet 1,mem_le_txheader
+	beq ADV_DIRECT_IND,le_send_adv_direct_ind
+	fetcht 1,mem_le_adv_data_len
+	add temp,6,pdata
+	store 1,mem_le_txlen
+	fetch 6,mem_le_lap
+	store 6,mem_le_txpayload
+	copy temp,loopcnt
+	arg mem_le_adv_data,contr
+	call memcpy_fast
+	branch le_send_adv_transmit
+
+le_send_adv_direct_ind:
+	setarg 12
+	store 1,mem_le_txlen
+	fetch 6,mem_le_lap
+	store 6,mem_le_txpayload
+	fetch 6,mem_hci_plap
+	istore 6,contw
+le_send_adv_transmit:
+	bpatchx patch2f_4,mem_patch2f
+	fetch 1,mem_le_adv_transmit
+	increase 1,pdata
+	store 1,mem_le_adv_transmit
+	arg 1800,stop_watch
+	disable match
+	branch le_transmit_receive_sifs_without_change_mode
+
+
+le_send_scan_request:
+	bpatchx patch2f_5,mem_patch2f
+	fetch 1,mem_le_scan_type
+	rtnne LE_SCAN_TYPE_ACTIVE
+	fetch 1,mem_le_adv_transmit
+	increase 1,pdata
+	store 1,mem_le_adv_transmit
+	arg 0x0c03,temp// length + SCAN_REQ PDU
+	fetch 1,mem_le_scan_own_addr_type
+	nsetflag blank,LE_SENDER_ADDR_BIT,temp
+	copy rega,pdata
+	nsetflag blank,LE_RECEIVER_ADDR_BIT,temp	
+	storet 2,mem_le_txheader
+	fetch 6,mem_le_lap
+	istore 6,contw
+	fetch 6,mem_le_plap
+	istore 6,contw
+	branch le_transmit_receive_sifs_without_change_mode
+
+le_send_scan_response:
+	bpatchx patch2f_6,mem_patch2f
+	fetch 6,mem_le_rxbuf_adv_scan_req_adv_address
+	fetcht 6,mem_le_lap
+	isub temp,null
+	nrtn zero
+	arg SCAN_RSP,temp
+	fetch 1,mem_le_adv_own_addr_type
+	nsetflag blank,LE_SENDER_ADDR_BIT,temp
+	storet 1,mem_le_txheader
+	fetcht 1,mem_le_scan_data_len
+	add temp,6,pdata
+	store 1,mem_le_txlen
+	fetch 6,mem_le_lap
+	store 6,mem_le_txpayload
+	arg mem_le_scan_data,contr
+	copy temp,loopcnt
+	call memcpy_fast
+	call le_transmit_norx
+	branch le_adv_not_match
+
+le_parse_connect_req:
+	fetch 6,mem_le_rxbuf_adv_connect_ind_adv_address
+	fetcht 6,mem_le_lap
+	isub temp,null
+	nrtn zero
+	call le_scan_check_sender_addr_type
+	storer rega,1,mem_le_conn_peer_addr_type
+	fetch 6,mem_le_rxbuf_adv_connect_ind_init_address
+	store 6,mem_le_plap
+	fetch 8,mem_le_rxbuf_adv_connect_ind_access_address
+	store 8,mem_le_access 	// and crcinit & window size
+	fetcht 2,mem_le_rxbuf_adv_connect_ind_win_offset	// transmit offset
+	bpatchx patch2f_7,mem_patch2f
+	lshift2 temp,temp
+	fetch 2,mem_le_rxbuf_adv_connect_ind_interval	// connInterval
+	lshift2 pdata,pdata
+	store 2,mem_le_tsniff
+	store 4,mem_le_anchor
+	isub temp,pdata
+	add pdata,-2,clke_bt
+	fetch 9,mem_le_rxbuf_adv_connect_ind_latency
+	store 9,mem_le_slave_latency// and super to & channel map
+	fetch 1,mem_le_rxbuf_adv_connect_ind_hop_and_sca
+	and pdata,0x1f,temp
+	storet 1,mem_le_hop
+	rshift4 pdata,temp
+	rshift temp,temp
+	storet 1,mem_le_peer_sca
+	arg mem_le_state,rega
+	call le_receive_window_size
+	arg mem_le_state,rega	
+	call le_calc_channel_map
+	call le_init_slave
+	call context_new
+	nrtn zero
+	bpatchx patch30_0,mem_patch30
+	call calc_clke_offset
+	call le_l2cap_reset_signaling_identifier
+	jam BT_EVT_LE_CONNECTED,mem_fifo_temp
+	call ui_ipc_send_event
+	branch context_save
+
+
+le_next_adv_channel:
+	bpatchx patch30_1,mem_patch30
+	fetch 1,mem_le_ch_mapped
+	beq 37,le_next_adv_channel_curr_channel_37
+	beq 38,le_next_adv_channel_curr_channel_38
+	beq 39,le_next_adv_channel_curr_channel_39
+//	branch le_next_adv_channel_curr_channel_39
+le_next_adv_channel_curr_channel_39:
+	fetcht 1,mem_le_adv_channel_map
+	isolate1 BIT_ADV_CHANNEL_MAP_37,temp		//check 37 channel enable
+	branch set_le_next_adv_channel_37,true
+	isolate1 BIT_ADV_CHANNEL_MAP_38,temp		//check 38 channel enable
+	branch set_le_next_adv_channel_38,true
+//	branch set_le_next_adv_channel_39
+set_le_next_adv_channel_39:
+	jam 39,mem_le_ch_mapped
+	fetch 1,mem_le_adv_channel_map_temp
+	set1 BIT_ADV_CHANNEL_MAP_39,pdata
+set_le_adv_channel_map_temp:
+	store 1,mem_le_adv_channel_map_temp
+	rtn
+
+
+le_next_adv_channel_curr_channel_37:
+	fetcht 1,mem_le_adv_channel_map
+	isolate1 BIT_ADV_CHANNEL_MAP_38,temp		//check 38 channel enable
+	branch set_le_next_adv_channel_38,true
+	isolate1 BIT_ADV_CHANNEL_MAP_39,temp		//check 39 channel enable
+	branch set_le_next_adv_channel_39,true
+//	branch set_le_next_adv_channel_37
+set_le_next_adv_channel_37:
+	jam 37,mem_le_ch_mapped
+	fetch 1,mem_le_adv_channel_map_temp
+	set1 BIT_ADV_CHANNEL_MAP_37,pdata
+	branch set_le_adv_channel_map_temp
+
+le_next_adv_channel_curr_channel_38:
+	fetcht 1,mem_le_adv_channel_map
+	isolate1 BIT_ADV_CHANNEL_MAP_39,temp		//check 39 channel enable
+	branch set_le_next_adv_channel_39,true
+	isolate1 BIT_ADV_CHANNEL_MAP_37,temp		//check 37 channel enable
+	branch set_le_next_adv_channel_37,true
+//	branch set_le_next_adv_channel_38
+set_le_next_adv_channel_38:
+	jam 38,mem_le_ch_mapped
+	fetch 1,mem_le_adv_channel_map_temp
+	set1 BIT_ADV_CHANNEL_MAP_38,pdata
+	branch set_le_adv_channel_map_temp
+
Index: program/ble_protocol_stack/le_l2cap_att.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/ble_protocol_stack/le_l2cap_att.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/ble_protocol_stack/le_l2cap_att.prog	(working copy)
@@ -0,0 +1,1051 @@
+
+
+le_parse_att:
+	copy contr,rega
+	fetch 1,mem_device_option
+	beq DVC_OP_SHUTTER_DY,shutter_dy_le_parse_att
+	beq DVC_OP_KEYBOARD,keyboard_le_parse_att
+	beq DVC_OP_MOUSE,mouse_le_parse_att
+	copy rega,contr
+	ifetch 3,contr
+	store 3,mem_le_att_opcode
+le_parse_att2:
+	beq ATTOP_EXCHANGE_MTU_REQUEST,le_parse_att_exchange_mtu_request
+	beq ATTOP_EXCHANGE_MTU_RESPONSE,le_parse_att_exchange_mtu_response
+	beq ATTOP_FIND_INFORMATION_REQUEST,le_parse_att_find_information_request
+	beq ATTOP_FIND_BY_TYPE_VALUE_REQUEST,le_parse_att_find_by_type_value_request
+	beq ATTOP_READ_BY_TYPE_REQUEST,le_parse_att_read_by_type_request
+	beq ATTOP_READ_REQUEST,le_parse_att_read_request
+	beq ATTOP_READ_BLOB_REQUEST,le_parse_att_read_blob_request
+	beq ATTOP_READ_BY_GROUP_TYPE_REQUEST,le_parse_att_read_by_group_type_request
+	beq ATTOP_WRITE_REQUEST,le_parse_att_write_request
+	beq ATTOP_PREPARE_WRITE_REQUEST,le_parse_att_prepare_write_request
+	beq ATTOP_EXECUTE_WRITE_REQUEST,le_parse_att_execute_write_request
+	beq ATTOP_HANDLE_VALUE_CONFIRMATION,le_parse_handle_value_confirmation
+	beq ATTOP_WRITE_COMMAND,le_parse_att_write_command
+	rtn
+
+
+le_send_att_exchange_mtu_requset:
+	force 3,rega
+	call le_fifo_malloc_tx_l2cap_gatt
+	setarg ATTOP_EXCHANGE_MTU_REQUEST
+le_send_att_exchange_mtu_common:
+	istore 1,contw
+	fetch 2,mem_le_local_mtu
+	istore 2,contw
+	rtn
+
+
+le_parse_att_exchange_mtu_request:
+	call le_parse_att_exchange_mtu_response
+le_send_att_exchange_mtu_response:
+	force 3,rega
+	call le_fifo_malloc_tx_l2cap_gatt
+	setarg ATTOP_EXCHANGE_MTU_RESPONSE
+	branch le_send_att_exchange_mtu_common
+
+le_parse_att_exchange_mtu_response:
+	rshift8 pdata,pdata
+	store 2,mem_le_remote_mtu
+	rtn
+
+le_parse_att_find_information_request:
+	call le_get_search_handle_start_end_common
+	call enable_user
+	branch le_send_att_find_information_response
+
+/* blank:end of list, positive:in range */
+le_att_handle_inrange:
+	ifetch 2,contr
+	and_into 0xff,pdata
+	rtn blank
+	isub regb,null			/* less than start ? */
+	rtn zero
+	nrtn positive
+	isub regc,null			/* greater than end ? */
+	rtn zero
+	branch enable_blank,positive
+	force 1,null
+	rtn
+
+
+le_send_att_find_information_response:
+	arg 3,timeup
+	call le_init_attlist_search
+le_send_att_find_information_res_loop:
+	call le_att_handle_inrange
+	branch le_send_att_find_information_res_end,blank
+	nbranch le_send_att_find_information_res_next,positive
+	increase -2,contr
+	call store_contr
+	call get_contw
+	nbranch le_send_att_find_information_res_store_info2,user
+	call push_stack_rega_b_c
+	storer timeup,4,mem_timeup
+	force 30,rega
+	call le_fifo_malloc_tx_l2cap_gatt
+	fetchr timeup,4,mem_timeup
+	call pop_stack_rega_b_c
+	call disable_user
+	setarg ATTOP_FIND_INFORMATION_RESPONSE
+	istore 1,contw
+	call get_contr
+	ifetch 2,contr
+	ifetchr rega, 1,contr
+	sub rega,16,null
+	branch le_send_att_find_information_res_uuid128,zero
+	sub rega,2,null
+	nbranch le_send_att_error_response_notfound,zero
+le_send_att_find_information_res_uuid16:
+	setarg UUID_SIZE_16BIT
+	istore  1,contw
+	branch le_send_att_find_information_res_store_info
+	
+le_send_att_find_information_res_uuid128:
+	setarg UUID_SIZE_128BIT
+	istore 1,contw
+	arg 1,timeup
+	branch le_send_att_find_information_res_store_info
+		
+le_send_att_find_information_res_store_info2:
+	call get_contr
+	ifetch 2,contr
+	ifetch 1,contr
+	isub rega,null //uuid size format
+	nbranch le_send_att_find_information_res_end,zero
+	
+le_send_att_find_information_res_store_info:
+	call get_contr
+	ifetch 2,contr
+	and_into 0xff,pdata
+	istore 2,contw
+	ifetchr loopcnt, 1,contr
+	call memcpy
+	call store_contw
+	increase -1,timeup
+	branch le_send_att_find_information_res_end,zero
+le_send_att_find_information_res_cont:
+	call le_att_contr_add_len
+	branch le_send_att_find_information_res_loop
+	
+le_send_att_find_information_res_next:
+	call le_att_contr_add_len
+	branch le_send_att_find_information_res_cont
+	
+le_send_att_find_information_res_end:
+	branch le_send_att_error_response_notfound,user
+	branch le_send_auto_len_by_mem
+
+
+le_parse_att_find_by_type_value_request:
+	call le_get_search_handle_start_end_common
+	ifetch 2,contr
+	store 2,mem_le_search_uuid
+	call store_contr
+	arg mem_le_search_att_type_length,contw
+	fetch 2,mem_le_l2cap_size
+	increase -7,pdata
+	call le_get_search_common2
+	branch le_send_att_find_by_type_value_response
+
+
+le_start_end_handle_check_1:
+	disable user
+	fetcht 2,mem_le_search_handle_start
+	fetch 2,mem_le_search_handle_end
+	isub temp,null
+	nbranch le_start_end_handle_check_1_fail,positive
+	deposit temp
+	rtnne 0
+le_start_end_handle_check_1_fail:
+	enable user
+	jam ATT_ERR_INVALID_HANDLE,mem_le_err_code
+	branch le_send_att_error_response
+
+
+le_send_att_find_by_type_value_response:
+	call le_start_end_handle_check_1
+	rtn user
+	fetcht 2,mem_le_search_uuid
+	setarg UUID_GATT_PRIMARY_SERVICE
+	isub temp,null
+	branch le_send_att_find_by_type_value_res_primary,zero
+	branch le_send_att_error_response_notfound
+	
+
+le_send_att_find_by_type_value_res_primary:
+	jam LE_FIND_BY_TYPE_VAL_RES_NOT_FOUND,mem_le_search_res
+	fetcht 2,mem_le_search_handle_start
+	storet 2,mem_temp
+	call le_att_get_handle_info
+	nbranch le_send_att_error_response_notfound,blank
+le_send_att_find_primary_search_loop:
+	fetcht 2,mem_temp
+	call le_att_get_handle_info
+	nbranch le_send_att_error_response_notfound2,blank	
+	copy contr,rega
+	fetch 1,mem_le_curr_att_len
+	copy pdata,loopcnt
+	fetcht 1,mem_le_search_att_type_length
+	isub temp,null
+	nbranch le_send_att_find_primary_search_loop1,zero
+	arg mem_le_search_att_type,regb
+	call string_compare
+
+	branch le_send_att_find_primary_search_end_start_handle_found,zero
+
+	fetch 2,mem_le_cur_uuid
+	fetcht 2,mem_le_search_uuid
+	isub temp,null
+	branch le_send_att_find_primary_search_end_ending_handle_found,zero
+le_send_att_find_primary_search_loop1:
+	fetch 2,mem_temp
+	increase 1,pdata
+	store 2,mem_temp
+	branch le_send_att_find_primary_search_loop
+
+le_send_att_error_response_notfound2:
+	fetch 1,mem_le_search_res
+	beq LE_FIND_BY_TYPE_VAL_RES_FOUND_STARTING_HANDLE,le_send_att_find_primary_search_end_ending_handle_found
+	branch le_send_att_error_response_notfound
+
+	
+le_send_att_find_primary_search_end_start_handle_found:
+	fetch 2,mem_le_cur_uuid
+	fetcht 2,mem_le_search_uuid
+	isub temp,null
+	nbranch  le_send_att_find_primary_search_loop1,zero
+	jam LE_FIND_BY_TYPE_VAL_RES_FOUND_STARTING_HANDLE,mem_le_search_res
+//	copy rega,temp
+	fetcht 2,mem_temp
+	storet 2,mem_le_cur_handle_start
+	branch le_send_att_find_primary_search_loop1
+
+le_send_att_find_primary_search_end_ending_handle_found:
+	fetch 1,mem_le_search_res
+	beq LE_FIND_BY_TYPE_VAL_RES_NOT_FOUND,le_send_att_find_primary_search_loop1
+	jam LE_FIND_BY_TYPE_VAL_RES_FOUND_ENDING_HANDLE,mem_le_search_res
+	fetcht 2,mem_temp
+	increase -1,temp
+	storet 2,mem_le_cur_handle_end
+	
+le_send_att_find_primary_search_end:
+	arg 5,rega
+	call le_fifo_malloc_tx_l2cap_gatt
+	setarg ATTOP_FIND_BY_TYPE_VALUE_RESPONSE
+	istore 1,contw
+	fetch 2,mem_le_cur_handle_start
+	istore 2,contw
+	fetch 2,mem_le_cur_handle_end
+	istore 2,contw
+	rtn
+
+
+
+le_parse_att_read_by_type_request:
+	call le_get_search_handle_start_end_common
+	call le_get_search_att_type
+	branch le_send_att_read_by_type_response
+	
+le_send_att_read_by_type_response:
+	fetcht 2,mem_le_search_handle_start
+	storet 2,mem_temp
+	call le_init_attlist_search
+	call le_att_get_handle_ptr2
+	increase -2,contr
+	copy contr,pdata
+	store 2,mem_le_cur_attlist_start_ptr
+
+	fetcht 2,mem_le_search_att_type
+	setarg UUID_CHRCTR_DEVICE_NAME
+	isub temp,null
+	branch le_send_att_read_by_type_res_device_name,zero
+	setarg UUID_GATT_CHARACTERISTIC
+	isub temp,null
+	nbranch le_send_att_read_by_type_res_not_characteristic,zero
+	arg 2,timeup
+le_send_att_read_by_type_response_loop:
+	call le_att_check_handle_end
+	nbranch le_send_att_read_by_type_response_end,positive
+	fetcht 2,mem_temp
+	call le_att_get_handle_info_from_ptr
+	nbranch le_send_att_read_by_type_response_end,blank
+	call le_att_same_type
+	nbranch le_send_att_read_by_type_response_next_handle,zero
+	nbranch le_send_att_read_by_type_res_found_next,user
+	disable user
+ 	call le_get_search_max_mtu_data
+	copy pdata,rega
+	call le_fifo_malloc_tx_l2cap_gatt
+	setarg ATTOP_READ_BY_TYPE_RESPONSE
+	istore 1,contw
+	copy contw,alarm
+	increase 1,contw
+	
+	call le_send_att_read_by_type_write_properties
+	call le_att_next_handle
+	call le_att_get_handle_info_from_ptr
+	call le_send_att_read_by_type_write_uuid
+	fetch 1,mem_le_cur_uuid_length
+	add pdata,5,rega
+	istorer rega,1,alarm
+	
+	sub rega,7,null
+	ncall enable_user2,zero
+	call disable_user2,zero
+ 	call le_get_search_max_mtu_data
+ 	increase -2,pdata
+	idiv rega
+	call wait_div_end
+	quotient timeup
+	increase -1,timeup
+	branch le_send_att_read_by_type_response_end,zero
+le_send_att_read_by_type_response_next_handle:
+	call le_att_next_handle
+	branch le_send_att_read_by_type_response_loop
+le_send_att_read_by_type_response_end:
+	branch le_send_att_error_response_notfound,user
+	branch le_send_auto_len_by_mem
+
+le_send_att_read_by_type_res_found_next:
+	call le_store_att_record
+	call le_att_next_handle
+	call le_att_get_handle_info_from_ptr
+	call le_send_att_read_by_type_res_check_pair_length_type
+	nbranch le_send_att_read_by_type_response_end,blank
+
+	call get_contw
+	fetch 2,mem_temp
+	increase -1,pdata
+	istore 2,contw
+	call le_write_att_record_common
+	call le_send_att_read_by_type_write_uuid
+	increase -1,timeup
+	branch le_send_att_read_by_type_response_end,zero
+	branch le_send_att_read_by_type_response_next_handle
+
+	
+le_send_att_read_by_type_write_properties:
+	fetch 2,mem_temp
+	istore 2,contw
+	
+	fetch 1,mem_le_curr_att_len
+	copy pdata,loopcnt
+	call get_contr
+	call memcpy_fast
+	branch store_contw
+le_send_att_read_by_type_write_uuid:
+	call get_contw
+	fetch 2,mem_temp
+	istore 2,contw
+	call store_contw
+	fetch 1,mem_le_cur_uuid_length
+	copy pdata,loopcnt
+	call get_contw	
+	call get_contr
+	isub loopcnt,contr
+	increase -1,contr
+	call memcpy_fast
+	branch store_contw
+
+le_send_att_read_by_type_res_not_characteristic:
+	bpatchx patch30_2,mem_patch30
+	call le_att_get_uuid_ptr
+	branch le_send_att_error_response_notfound,blank
+	copy contr,regc
+	
+	call le_get_search_max_mtu_data
+	copy regc,contr
+	ifetcht 1,contr
+	increase 4, temp
+	call not_greater_than
+	copy pdata,regc
+	copy pdata,rega
+	call store_contr
+	call le_fifo_malloc_tx_l2cap_gatt
+
+	setarg ATTOP_READ_BY_TYPE_RESPONSE
+	istore 1,contw
+	add regc,-2,pdata
+	add pdata ,-2,loopcnt
+	istore 1,contw
+	fetch 2,mem_le_cur_handle
+	istore 2,contw
+	call get_contr
+	branch  memcpy_fast
+
+	
+le_send_att_read_by_type_res_device_name:
+	call le_att_get_uuid_ptr
+	branch le_send_att_error_response_notfound,blank
+	increase -5,contr // point to handle
+	ifetch 2,contr		
+	store 2,mem_temp
+	call le_get_search_max_mtu_data
+	fetcht 1,mem_le_name_len
+	increase 4, temp
+	call not_greater_than
+	copy pdata,regc
+	copy pdata,rega
+	call le_fifo_malloc_tx_l2cap_gatt
+	setarg ATTOP_READ_BY_TYPE_RESPONSE
+	istore 1,contw
+	add regc,-2,pdata
+	add pdata ,-2,loopcnt
+	istore 1,contw
+	fetch 2,mem_temp
+	istore 2,contw
+	arg mem_le_name,contr
+	branch memcpy_fast
+	
+
+le_init_attlist_search:
+	bpatchx patch30_3,mem_patch30
+	fetch 2,mem_le_search_handle_start
+	iforce regb
+	fetch 2,mem_le_search_handle_end
+	iforce regc
+	fetch 2,mem_ui_le_uuid_table
+	iforce contr
+	branch enable_user
+
+
+	/* handle in temp, return pointer in contr to length, blank not found */
+le_att_get_handle_ptr:
+	call le_att_get_handle_ptr2
+	branch le_att_get_handle_ptr_found,zero
+	rtn
+	
+le_att_get_handle_ptr2:
+	bpatchx patch30_4,mem_patch30
+	fetch 2,mem_ui_le_uuid_table
+	iforce contr
+le_att_get_handle_loop1:
+	ifetch 2,contr
+	and_into 0xff,pdata
+	rtn blank
+	isub temp,null
+	rtn zero
+	call le_att_contr_add_len
+	call le_att_contr_add_len
+	branch le_att_get_handle_loop1
+	
+le_att_get_handle_ptr_found:
+le_att_contr_add_len:
+	ifetch 1,contr
+	iadd contr,contr	
+	rtn	
+	
+
+le_att_get_uuid_ptr:
+	bpatchx patch30_5,mem_patch30
+	fetch 2,mem_ui_le_uuid_table
+	iforce contr
+le_att_get_uuid_loop:
+	ifetch 2,contr
+	and_into 0xff,pdata
+	rtn blank
+	store 2,mem_le_cur_handle  //handle
+	ifetch 1,contr
+	copy contr,contw
+	iadd contr,contr
+	fetcht 1,mem_le_search_att_type_length
+	isub temp,null
+	nbranch le_att_get_uuid_ptr_next,zero
+	copy pdata,loopcnt
+	copy contw,regb
+	arg mem_le_search_att_type ,rega
+	call string_compare
+	rtn zero
+	fetch 1,mem_le_search_att_type_length
+le_att_get_uuid_ptr_next:	
+	iadd contw,contr
+	call le_att_contr_add_len
+	branch le_att_get_uuid_loop	
+
+
+
+
+//output:temp:new handle num
+//contr:address write data
+le_att_get_last_handle:
+	arg 0x01,temp
+	fetch 2,mem_ui_le_uuid_table
+	iforce contr
+	copy contr,contw
+le_att_get_last_handle_loop:
+	ifetch 2,contr
+	and_into 0xff,pdata
+	rtn blank
+	add pdata,1,temp
+	call le_att_contr_add_len
+	call le_att_contr_add_len
+	copy contr,contw
+	branch le_att_get_last_handle_loop
+
+
+le_att_get_handle_info_from_ptr:
+	fetch 2, mem_le_cur_attlist_start_ptr
+	branch le_att_get_handle_info_fast
+
+le_att_get_handle_info:
+	bpatchx patch30_6,mem_patch30
+	fetch 2,mem_ui_le_uuid_table
+le_att_get_handle_info_fast:
+	iforce contr
+le_att_get_handle_loop:
+	ifetch 2,contr
+	and_into 0xff,pdata
+	branch le_att_unfind_handle,blank
+	isub temp,null
+	branch le_att_finded_handle, zero
+	call le_att_contr_add_len
+	call le_att_contr_add_len
+	branch le_att_get_handle_loop
+	
+le_att_unfind_handle:
+	branch disable_blank
+
+le_att_finded_handle:
+	ifetch 1,contr
+	store 1,mem_le_cur_uuid_length
+	copy pdata,loopcnt
+	arg mem_le_cur_uuid,contw
+	call memcpy_fast
+	ifetch 1,contr
+	store 1,mem_le_curr_att_len
+	call store_contr
+	branch enable_blank
+
+
+
+le_parse_att_read_request:
+	call le_check_encrypt_state
+	fetcht 2,mem_le_att_handle
+	fetch 1,mem_le_configuration
+	bbit1 BIT_BLE_READ_AUTH,le_send_att_read_response_check_auth
+
+//input:temp is handle
+le_send_att_read_response:
+	call le_att_get_handle_ptr2
+	nbranch le_send_att_error_response_notfound,zero
+	call le_send_att_read_response_check_handle,user
+	rtn user
+	call le_att_get_handle_ptr_found
+	increase -2,contr
+	ifetch 2,contr
+	arg UUID_CHRCTR_DEVICE_NAME,temp
+	isub temp,null
+	branch le_send_device_name,zero
+le_send_att_read_response_next:
+	copy contr,regc
+	call le_get_search_max_mtu_data
+	copy regc,contr
+	ifetcht 1,contr
+	increase 1,temp
+	call not_greater_than
+le_send_att_read_response_less:
+	copy pdata,regc
+	copy pdata,rega
+	call store_contr
+	call le_fifo_malloc_tx_l2cap_gatt
+	setarg ATTOP_READ_RESPONSE
+	istore 1,contw
+	add regc,-1,loopcnt
+	call get_contr
+	branch memcpy
+
+le_send_device_name:
+	call le_get_search_max_mtu_data
+	fetcht 1,mem_le_name_len
+	increase 1, temp
+	call not_greater_than
+	copy pdata,regc
+	copy pdata,rega
+
+	call le_fifo_malloc_tx_l2cap_gatt
+	setarg ATTOP_READ_RESPONSE
+	istore 1,contw
+	add regc,-1,loopcnt
+	arg mem_le_name,contr
+	branch memcpy
+	
+	
+le_send_att_read_response_check_auth:
+	fetch 2,mem_le_pairing_handle
+	isub temp,null
+	nbranch le_send_att_read_response,zero
+	nbranch le_send_att_read_response,user
+le_send_att_read_response_error_insufficient_auth:
+	jam ATT_ERR_INSUFFICIENT_AUTHENTICATION,mem_le_err_code
+	branch le_send_att_error_response
+
+le_send_att_read_response_check_handle:
+	increase -2,contr
+	ifetch 2,contr
+	bbit1 BIT_OF_ATT_HANDLE_READ_AUTHENTICATED,le_send_att_read_response_error_insufficient_auth
+	branch disable_user
+
+le_parse_att_read_blob_request:
+	ifetch 2,contr
+	store 2,mem_le_att_offset
+	iforce rega
+	fetcht 2,mem_le_att_handle
+le_send_att_read_blob_response:
+	call le_att_get_handle_ptr 
+	branch le_send_att_error_response_notfound,blank
+	ifetch 1,contr
+	isub rega,loopcnt
+	nbranch le_send_att_error_response_notfound,positive
+	call store_contr
+	call le_get_search_max_mtu_data
+	add loopcnt,1,temp
+	call not_greater_than
+le_send_att_read_blob_response_less:
+	copy pdata,rega
+	copy pdata,regc
+	call le_fifo_malloc_tx_l2cap_gatt
+	setarg ATTOP_READ_BLOB_RESPONSE
+	istore 1,contw
+	add regc,-1,loopcnt
+	fetcht 2,mem_le_att_offset
+	call get_contr
+	iadd temp,contr
+	branch memcpy_fast
+
+
+//ѯserver
+le_parse_att_read_by_group_type_request:
+	call le_get_search_handle_start_end_common
+ 	call le_get_search_att_type
+	branch le_send_att_read_by_group_type_response
+
+
+//mem_le_search_att_type
+//mem_le_search_handle_start
+//mem_le_search_handle_end
+le_send_att_read_by_group_type_response:
+	arg 2,timeup
+	fetcht 2,mem_le_search_handle_start
+	storet 2,mem_temp
+	call le_att_get_handle_ptr2
+	increase -2,contr
+	copy contr,pdata
+	store 2,mem_le_cur_attlist_start_ptr
+le_send_att_read_by_group_type_response_loop:
+	call le_att_check_handle_end		//check current handle >= ending handle
+	nbranch le_send_att_read_by_group_type_end0,positive
+	fetcht 2,mem_temp
+	call le_att_get_handle_info_from_ptr	//get current handle info
+	nbranch le_send_att_read_by_group_type_end1,blank
+
+	call le_att_same_type				//compair attr group type
+	nbranch le_send_att_read_by_group_type_next_handle,zero
+	copy timeup,pdata
+	beq 0,le_send_att_read_by_group_type_end1	//loop count
+	nbranch le_send_att_read_by_group_type_store_write_record,user		//un first
+	disable user
+	//first att uuid
+ 	call le_get_search_max_mtu_data
+ 	copy pdata,rega
+	call le_fifo_malloc_tx_l2cap_gatt
+	setarg ATTOP_READ_BY_GROUP_TYPE_RESPONSE
+	istore 1,contw
+	fetch 1,mem_le_curr_att_len
+	add pdata,4,rega
+	istorer rega,1,contw
+	call store_contw
+	sub rega,6,null
+	ncall enable_user2,zero
+	call disable_user2,zero
+ 	call le_get_search_max_mtu_data
+ 	increase -2,pdata
+	idiv rega
+	call wait_div_end
+	quotient timeup
+	branch le_send_att_read_by_group_type_store_record
+le_send_att_read_by_group_type_store_write_record:
+	call le_send_att_read_by_group_type_check_pair_length_type
+	nbranch le_send_att_read_by_group_type_end1,blank
+	fetch 2,mem_temp
+	increase -1,pdata
+	store 2,mem_le_cur_handle_end
+	call le_write_att_record
+le_send_att_read_by_group_type_store_record:
+	fetch 2,mem_temp
+	store 2,mem_le_cur_handle_start
+	call le_store_att_record
+	increase -1,timeup
+//	branch le_send_att_read_by_group_type_last_find,zero		
+le_send_att_read_by_group_type_next_handle:
+	call le_att_next_handle
+	branch le_send_att_read_by_group_type_response_loop
+
+le_send_att_read_by_type_res_check_pair_length_type:
+	fetch 1,mem_le_cur_uuid_length
+	branch le_send_att_read_by_group_type_check_pair_length_type+1
+
+//output:blank is same
+le_send_att_read_by_group_type_check_pair_length_type:
+	fetch 1,mem_le_curr_att_len
+	branch le_send_att_read_by_group_type_check_pair_length_type_16byte,user2
+	increase -2,pdata
+	rtn
+
+le_send_att_read_by_group_type_check_pair_length_type_16byte:
+	increase -16,pdata
+	rtn
+
+le_send_att_read_by_group_type_end0:	//> att handle end
+	fetch 2,mem_temp
+	store 2,mem_le_cur_handle_end
+	branch le_send_att_read_by_group_type_end_common
+le_send_att_read_by_group_type_end1:	//>att max list handle or diff len 
+	fetch 2,mem_temp
+	increase -1,pdata
+	store 2,mem_le_cur_handle_end
+	branch le_send_att_read_by_group_type_end_common
+le_send_att_read_by_group_type_end_common:
+	branch le_send_att_error_response_notfound,user
+	call le_write_att_record
+	branch le_send_auto_len_by_mem
+
+
+
+
+le_parse_att_write_request:
+	copy contr,rega
+	fetch 2,mem_le_l2cap_size
+	add pdata,-3,regb
+	call le_writeatt_cb
+le_send_att_write_response_check_auth:
+	bpatchx patch30_7,mem_patch30
+	call le_check_encrypt_state
+	fetcht 2,mem_le_att_handle
+	call le_att_get_handle_ptr2
+	nbranch le_send_att_write_response_error_invalid_handle,zero
+	call le_send_att_write_response_check_handle,user
+	rtn user
+
+	fetch 1,mem_le_configuration
+	bbit0 BIT_BLE_WRITE_AUTH,le_send_att_write_response
+
+	fetcht 2,mem_le_att_handle
+	fetch 2,mem_le_pairing_handle
+	isub temp,null
+	nbranch le_send_att_write_response,zero
+	call le_check_encrypt_state
+	nbranch le_send_att_write_response,user
+	branch le_send_att_read_response_error_insufficient_auth
+
+
+le_send_att_write_response:
+	force 1,rega
+	call le_fifo_malloc_tx_l2cap_gatt
+	setarg ATTOP_WRITE_RESPONSE
+	istore 1,contw
+	rtn
+
+le_send_att_write_response_check_handle:
+	increase -2,contr
+	ifetch 2,contr
+	bbit1 BIT_OF_ATT_HANDLE_WRITE_AUTHENTICATED,le_send_att_read_response_error_insufficient_auth
+	branch disable_user
+
+le_send_att_write_response_error_invalid_handle:
+	jam ATT_ERR_INVALID_HANDLE,mem_le_err_code
+	branch le_send_att_error_response
+
+
+le_check_encrypt_state:
+	bpatchx patch31_0,mem_patch31
+	call disable_user
+	fetch 1,mem_le_pairing_mode
+	rtneq LE_PAIRING_MODE_NONE
+	fetch 1,mem_context
+	rtnbit1 lestate_encryption
+	branch enable_user
+
+
+le_parse_att_prepare_write_request:
+	add contr,2,rega
+	fetch 2,mem_le_l2cap_size
+	add pdata,-5,regb
+	call le_writeatt_cb
+	branch le_send_att_prepare_write_response
+
+
+le_send_att_prepare_write_response:
+	fetch 2,mem_le_l2cap_size
+	copy pdata,rega
+	call le_fifo_malloc_tx_l2cap_gatt
+	setarg ATTOP_PREPARE_WRITE_RESPONSE
+	istore 1,contw
+	fetch 2,mem_le_att_handle
+	istore 2,contw
+	fetch 2,mem_le_l2cap_size
+	add pdata,-5,loopcnt	
+	fetch 2,mem_le_payload_ptr
+	add pdata,7,contr
+	ifetch 2,contr		//offset
+	istore 2,contw
+	branch memcpy_fast
+
+
+
+le_parse_att_execute_write_request:
+
+le_send_att_execute_write_response:
+	force 1,rega
+	call le_fifo_malloc_tx_l2cap_gatt
+	setarg ATTOP_EXECUTE_WRITE_RESPONSE
+	istore 1,contw
+	rtn
+
+le_parse_handle_value_confirmation:
+	fetch 1,mem_le_l2cap_att_states
+	set0 BLE_L2CAP_RECV_CONFIRMATION_PACKET,pdata
+	store 1,mem_le_l2cap_att_states
+	rtn
+
+le_parse_att_write_command:
+	copy contr,rega
+	fetch 2,mem_le_l2cap_size
+	add pdata,-3,regb
+	branch le_writeatt_cb
+
+
+
+//rga:len temp:handle;rgea,regb,regc already used
+le_att_malloc_tx_notify:
+	copy temp,regc
+	increase 3,rega
+	call le_fifo_malloc_tx_l2cap_gatt
+	increase -3,rega
+	setarg ATTOP_HANDLE_VALUE_NOTIFICATION
+	istore 1,contw
+	copy regc,temp
+	istoret 2,contw
+	rtn
+
+//rga:len temp:handle;rgea,regb,regc already used
+le_att_malloc_tx_indication:
+	fetch 1,mem_le_l2cap_att_states
+	set1 BLE_L2CAP_SEND_INDICATION_PACKET,pdata
+	store 1,mem_le_l2cap_att_states
+	copy temp,regc
+	increase 3,rega
+	call le_fifo_malloc_tx_l2cap_gatt
+	increase -3,rega
+	setarg ATTOP_HANDLE_VALUE_INDICATION
+	istore 1,contw
+	copy regc,temp
+	istoret 2,contw
+	rtn
+
+
+///////////////////////////ATT common function////////////////////////////////////
+
+le_send_att_error_response_notfound:	
+	bpatchx patch31_1,mem_patch31
+	jam ATT_ERR_ATTRIBUTE_NOT_FOUND,mem_le_err_code
+le_send_att_error_response:	
+	force 5,rega
+	call le_fifo_malloc_tx_l2cap_gatt
+	setarg ATTOP_ERROR_RESPONSE
+	istore 1,contw
+	fetch 1,mem_le_att_opcode
+	istore 1,contw
+	fetch 2,mem_le_att_handle
+	istore 2,contw
+	fetch 1,mem_le_err_code
+	istore 1,contw
+	rtn
+
+
+le_fifo_malloc_tx_l2cap_gatt:
+	bpatchx patch31_2,mem_patch31
+	force LE_L2CAP_CID_ATT,regb
+	branch le_fifo_malloc_tx_l2cap
+
+
+le_att_next_handle:
+	fetcht 2,mem_temp
+	increase 1,temp
+	storet 2,mem_temp
+	rtn
+
+le_att_check_handle_end:
+	fetcht 2,mem_temp
+	fetch 2,mem_le_search_handle_end
+	isub temp,null
+	rtn
+
+
+le_att_same_type:
+	bpatchx patch31_3,mem_patch31
+	fetcht 1,mem_le_search_att_type_length
+	arg mem_le_search_att_type,rega
+le_att_check_same_common:
+	fetch 1,mem_le_cur_uuid_length
+	copy pdata,loopcnt
+	isub temp,null
+	nrtn zero
+	arg mem_le_cur_uuid ,regb
+	branch string_compare
+
+
+le_store_att_record:
+	bpatchx patch31_4,mem_patch31
+	fetch 1,mem_le_curr_att_len
+	store 1, mem_temp_block0
+	copy pdata,loopcnt
+	call get_contr
+	branch memcpy_fast
+
+
+le_write_att_record:
+	bpatchx patch31_5,mem_patch31
+	call get_contw
+	fetch 2,mem_le_cur_handle_start
+	istore 2,contw
+	fetch 2,mem_le_cur_handle_end
+	istore 2,contw
+le_write_att_record_common:
+	fetch 1,mem_temp_block0
+	copy pdata,loopcnt
+	call memcpy_fast
+	branch store_contw
+
+
+
+le_send_auto_len_by_mem:
+	bpatchx patch31_6,mem_patch31
+	call get_contw
+	call le_fifo_get_last_att_ptr
+	copy contw,pdata
+	isub contr,rega
+	call le_fifo_get_last_l2cap_ptr
+	copy rega,pdata
+	istore 2,contr
+	increase 4,rega
+	call le_fifo_get_last_tx_ptr
+	copy rega,pdata
+	istore 1,contr
+	rtn
+
+
+le_get_search_handle_start_end_common:
+	rshift8 pdata,pdata
+	store 2,mem_le_search_handle_start
+	ifetch 2,contr
+	store 2,mem_le_search_handle_end
+	rtn
+
+
+le_get_search_max_mtu_data:
+	bpatchx patch31_7,mem_patch31
+	fetch 2,mem_le_remote_mtu
+//	increase -2,pdata
+	fetcht 2,mem_le_local_mtu
+//	increase -2,temp
+//	call not_greater_than
+//	arg 240,temp
+	branch not_greater_than
+	//pdata is max mtu size
+
+
+le_get_search_att_type:
+	bpatchx patch32_0,mem_patch32
+	call store_contr
+	arg mem_le_search_att_type_length,contw
+le_get_search_common:	
+	fetch 2,mem_le_l2cap_size
+	increase -5,pdata
+le_get_search_common2:		
+	istore 1,contw
+	copy pdata,loopcnt
+	call get_contr
+	branch memcpy_fast	
+
+
+
+le_parse_writing_attribute_start:
+	fetch 2,mem_le_rxbuf_data_att_cid//CID
+	rtnne LE_L2CAP_CID_ATT
+	fetch 1,mem_le_l2cap_att_states
+	set1 BLE_L2CAP_DEAL_WITH_CONTINUE_PACKET,pdata
+	store 1,mem_le_l2cap_att_states
+	fetch 3,mem_le_rxbuf_data_att_opcode
+	store 3,mem_le_att_opcode
+	set1 mark_old_packet,mark
+	beq ATTOP_WRITE_REQUEST,le_parse_attribute_write_request
+	beq ATTOP_WRITE_COMMAND,le_parse_attribute_write_command
+	beq ATTOP_EXECUTE_WRITE_REQUEST,le_parse_att_execute_write_request
+	beq ATTOP_EXCHANGE_MTU_REQUEST,le_parse_att_exchange_mtu_request
+	beq ATTOP_HANDLE_VALUE_CONFIRMATION,le_parse_handle_value_confirmation
+	set0 mark_old_packet,mark
+le_clear_l2cap_att_states_deal_with_contiune_packet:
+	fetch 1,mem_le_l2cap_att_states
+	set0 BLE_L2CAP_DEAL_WITH_CONTINUE_PACKET,pdata
+	store 1,mem_le_l2cap_att_states
+	rtn
+
+le_parse_writing_attribute_continue:
+	fetch 1,mem_le_l2cap_att_states
+	rtnbit0 BLE_L2CAP_DEAL_WITH_CONTINUE_PACKET
+	set1 mark_old_packet,mark
+	call le_parse_l2cap_continue_common
+	call le_parse_attribute_check_complete_packet
+	call le_clear_l2cap_att_states_deal_with_contiune_packet,user
+	fetch 1,mem_le_att_opcode
+	beq ATTOP_WRITE_REQUEST,le_send_att_write_response_check_auth
+	rtn
+
+
+le_parse_attribute_write_request:
+	call le_parse_attribute_write_command
+	branch le_send_attribute_write_response_check_auth
+
+le_send_attribute_write_response_check_auth:
+	call le_parse_attribute_check_complete_packet
+	nrtn user
+	branch le_send_att_write_response_check_auth
+
+
+le_parse_attribute_write_command:
+	bpatchx patch32_1,mem_patch32
+	call le_parse_attribute_check_complete_packet_init
+	arg mem_le_rxbuf_data_att_write_payload,rega
+	branch le_writeatt_cb
+
+
+le_parse_attribute_check_complete_packet_init:
+	fetch 1,mem_le_rxbuf_data_att_write_length
+	add pdata,-7,regb
+	increase -4,pdata
+	store 2,mem_le_packet_len_recved	//payload length
+	fetcht 2,mem_le_rxbuf_data_att_write_l2cap_length	//l2cap length
+	storet 2,mem_le_l2cap_size
+	rtn
+
+
+le_parse_l2cap_continue_common:
+	fetchr regb,1,mem_le_rxbuf_data_continue_length
+	fetch 2,mem_le_packet_len_recved
+	iadd regb,temp
+	storet 2,mem_le_packet_len_recved
+	arg mem_le_rxbuf_data_continue_payload,rega
+	branch le_writeatt_cb
+
+
+//enable user,recevie complete packet
+le_parse_attribute_check_complete_packet:
+	call disable_user
+	fetch 2,mem_le_packet_len_recved
+	fetcht 2,mem_le_l2cap_size
+	isub temp,null
+	nrtn zero
+	branch enable_user
+
Index: program/ble_protocol_stack/le_l2cap_att_wechat.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/ble_protocol_stack/le_l2cap_att_wechat.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/ble_protocol_stack/le_l2cap_att_wechat.prog	(working copy)
@@ -0,0 +1,276 @@
+
+ifdef COMPILE_WECHAT
+
+/*
+	function name:le_l2cap_att_receive_data_check_wechat_air_sync_protocol
+	΢Э1.0.4
+	:
+		rega is le rx data address
+		regb is le rx data length
+		mem_le_att_handle is write handle
+	:
+		user enable ΢Э
+		disable΢Э
+*/
+le_l2cap_att_receive_data_check_wechat_air_sync_protocol:
+	call enable_user
+	fetch 2,mem_le_wechat_air_sync_ptr
+	rtn blank
+	arg le_l2cap_att_receive_data_deal_wechat_air_sync_protocol,regc
+	branch wechat_air_sync_calc_function
+le_l2cap_att_receive_data_deal_wechat_air_sync_protocol:
+	fetcht 2,mem_le_att_handle
+	fetch 1,mem_wechat_indication_handle
+	pincrease 1
+	isub temp,null
+	branch wechat_air_sync_enable_indicate_chara,zero
+	fetch 1,mem_wechat_write_handle
+	isub temp,null
+	branch wechat_air_sync_receive_wechat_data,zero
+	branch disable_user
+	
+wechat_air_sync_enable_indicate_chara:
+	call wechat_air_sync_reset_nSeq
+wechat_air_sync_send_request_auth:
+	call wechat_air_sync_init_authreq_base_request
+	arg mem_wechat_authreq_base_request,rega
+	arg ECI_REQ_AUTH_MESSAGE_LENGTH,loopcnt
+	arg ECI_REQ_AUTH,temp
+	branch wechat_air_sync_send_message
+
+wechat_air_sync_receive_wechat_data:
+	fetch 1,mem_wechat_receive_push_data
+	beq 1,wechat_air_sync_receive_wechat_data_contiune_packet
+	ifetch 2,rega
+	arg WECHAT_RX_HEAD,temp
+	isub temp,null
+	branch wechat_air_sync_receive_wechat_data_head_packet,zero
+wechat_air_sync_receive_wechat_data_contiune_packet:
+	fetch 2,mem_wechat_rx_len
+	iadd regb,pdata
+	store 2,mem_wechat_rx_len	
+	fetch 2,mem_wechat_rx_address
+	copy pdata,contw
+	copy rega,contr
+	copy regb,loopcnt
+	call memcpy_fast
+	copy contw,pdata
+	store 2,mem_wechat_rx_address
+	branch wechat_air_sync_receive_wechat_packet_complete
+
+
+wechat_air_sync_receive_wechat_data_head_packet:
+	fetch 2,mem_wechat_rx_buffer_ptr
+	copy pdata,contw
+	copy rega,contr
+	copy regb,loopcnt
+	call memcpy_fast
+	copy contw,pdata
+	store 2,mem_wechat_rx_address
+	storer regb,2,mem_wechat_rx_len
+	fetchr regc,2,mem_wechat_rx_buffer_ptr
+	add regc,WECHAT_PROTOCOL_MESSAGE_N_CMD_ID,contr
+	ifetch 2,contr
+	arg ECI_PUSH_RECEIVE_DATA,temp
+	isub temp,null
+	call wechat_air_sync_receive_wechat_push_data,zero
+	branch wechat_air_sync_receive_wechat_packet_complete
+
+wechat_air_sync_receive_wechat_push_data:
+	jam 1,mem_wechat_receive_push_data
+	rtn
+
+wechat_air_sync_receive_wechat_packet_complete:
+	fetch 2,mem_wechat_rx_len
+	fetchr regc,2,mem_wechat_rx_buffer_ptr
+	add regc,WECHAT_PROTOCOL_MESSAGE_N_LENGTH,contr
+	ifetcht 2,contr
+	byteswap temp,temp
+	isub temp,null
+	nrtn positive
+	jam 0,mem_wechat_receive_push_data
+	fetchr regc,2,mem_wechat_rx_buffer_ptr
+	add regc,WECHAT_PROTOCOL_MESSAGE_N_CMD_ID,contr
+	ifetch 2,contr
+	arg ECI_RESPONSE_AUTH,temp
+	isub temp,null
+	branch wechat_air_sync_receive_wechat_data_auth_respone,zero
+	arg ECI_PUSH_RECEIVE_DATA,temp
+	isub temp,null
+	branch wechat_air_sync_receive_wechat_data_push_receive_data,zero
+	rtn
+
+wechat_air_sync_receive_wechat_data_auth_respone:
+wechat_air_sync_wechat_send_request_init:
+	call wechat_air_sync_init_authreq_base_request
+	arg mem_wechat_initreq_base_request,rega
+	arg ECI_REQ_INIT_MESSAGE_LENGTH,loopcnt
+	arg ECI_REQ_INIT,temp
+	branch wechat_air_sync_send_message
+
+
+//ݵĻصʹwechat_air_sync_check_push_data_struct
+wechat_air_sync_receive_wechat_data_push_receive_data:
+
+	fetch 2,mem_wechat_rx_push_data_cb
+	branch callback_func
+
+/*
+ݽĬϺܱ֤ȫݸʽܽ
+:disable user is no data
+	loopcnt is data length
+	contr is data ptr
+*/
+wechat_air_sync_check_push_data_struct:
+	call disable_user
+	fetchr regc,2,mem_wechat_rx_buffer_ptr
+	add regc,WECHAT_PROTOCOL_MESSAGE_PAYLOAD,contr
+	ifetch 2,contr
+	rtnne TAG_RecvDataPush_BasePush
+	ifetch 1,contr
+	rtnne TAG_RecvDataPush_Data
+	ifetch 1,contr
+	rtn blank
+	copy pdata,loopcnt
+	copy contr,regc
+	branch enable_user
+
+
+wechat_air_sync_send_message:
+	call enable_user2
+wechat_air_sync_send_message_without_payload:
+	fetch 2,mem_wechat_tx_buffer_ptr
+	store 2,mem_wechat_tx_address
+	copy pdata,contw
+	setarg WECHAT_HEAD_MAGIC_NUMBER
+	istore 1,contw			//bMagicNumber
+	setarg WECAHT_HEAD_VERSION
+	istore 1,contw			//bVer
+	add loopcnt,8,regd	//nLength
+	byteswap regd,pdata
+	istore 2,contw			//nLength
+	istoret 2,contw			//nCmdId
+	fetcht 2,mem_wechat_tx_nSeq
+	istoret 2,contw			//Tx nSeq
+	copy contw,regc
+	copy rega,contr
+	call memcpy_fast,user2
+	storer regd,2,mem_wechat_tx_len
+	branch wechat_air_sync_update_nSeq
+	
+wechat_air_sync_update_nSeq:
+	byteswap temp,pdata
+	pincrease 1
+	byteswap pdata,pdata
+	nbranch wechat_air_sync_store_nSeq,blank
+wechat_air_sync_reset_nSeq:
+	setarg 0x0100
+wechat_air_sync_store_nSeq:
+	store 2,mem_wechat_tx_nSeq
+	rtn
+
+
+wechat_air_sync_init_authreq_base_request:
+	setarg 0x000a
+	store 2,mem_wechat_authreq_base_request
+	setarg 0x048084
+	lshift8 pdata,pdata
+	or pdata,0x18,pdata
+	store 4,mem_wechat_authreq_protocol_version
+	setarg 0x0120
+	store 2,mem_wechat_authreq_auth_protocol
+	setarg 0x0228
+	store 2,mem_wechat_authreq_eam_mac_no_encrypt
+	setarg 0x063a
+	store 2,mem_wechat_authreq_mac_address
+	fetch 6,mem_le_lap
+	call inverse_data_6Byte
+	store 6,mem_wechat_authreq_device_address
+	rtn
+
+wechat_air_sync_ble_transmit_wechat_message:
+	fetch 1,mem_le_l2cap_att_states
+	rtnbit1 BLE_L2CAP_RECV_CONFIRMATION_PACKET
+	call le_fifo_check_nearly_full
+	nrtn blank				//no fifo
+	fetch 2,mem_le_wechat_air_sync_ptr
+	rtn blank
+	arg wechat_air_sync_ble_send_wechat_message,regc
+	branch wechat_air_sync_calc_function
+
+wechat_air_sync_ble_send_wechat_message:
+	call module_get_le_remote_mtu
+	fetch 2,mem_wechat_tx_len
+	rtn blank
+	add temp,-3,pdata		//sub handle and opcode
+	fetcht 2,mem_wechat_tx_len
+	call not_greater_than
+	copy pdata,rega
+	copy temp,pdata
+	isub rega,pdata
+	store 2,mem_wechat_tx_len
+	fetcht 1,mem_wechat_indication_handle
+	call le_att_malloc_tx_indication
+	fetch 2,mem_wechat_tx_address
+	copy pdata,contr
+	copy rega,loopcnt
+	call memcpy_fast
+	copy contr,pdata
+	store 2,mem_wechat_tx_address
+	rtn
+
+
+wechat_air_sync_calc_function:
+	call wechat_air_sync_load_in_local_buffer
+	copy regc,pdata
+	call callback_func
+	branch wechat_air_sync_store_in_global_buffer
+
+
+wechat_air_sync_load_in_local_buffer:
+	fetch 2,mem_le_wechat_air_sync_ptr
+	rtn blank
+	copy pdata,contr
+	arg WECHAT_AIR_SYNC_STRUCT_SIZE,loopcnt
+	arg mem_wechat_indication_handle,contw
+	branch memcpy_fast
+
+wechat_air_sync_store_in_global_buffer:
+	fetch 2,mem_le_wechat_air_sync_ptr
+	rtn blank
+	copy pdata,contw
+	arg WECHAT_AIR_SYNC_STRUCT_SIZE,loopcnt
+	arg mem_wechat_indication_handle,contr
+	branch memcpy_fast
+
+
+//input:rega is data ptr
+//regb is data length
+wechat_air_sync_send_wechat_packet:
+	call enable_user
+	fetch 2,mem_le_wechat_air_sync_ptr
+	rtn blank
+	arg wechat_air_sync_send_wechat_packet_cb,regc
+	branch wechat_air_sync_calc_function
+
+wechat_air_sync_send_wechat_packet_cb:
+	fetch 2,mem_wechat_tx_len
+	nrtn blank
+	call disable_user
+	call disable_user2
+	add regb,6,loopcnt
+	arg ECI_REQ_SEND_DATA,temp
+	call wechat_air_sync_send_message_without_payload
+	copy regc,contw
+	setarg 0x12000a
+	istore 3,contw
+	istorer regb,1,contw
+	copy rega,contr
+	copy regb,loopcnt
+	call memcpy_fast
+	setarg 0x0018
+	istore 2,contw
+	rtn
+
+endif
+
Index: program/ble_protocol_stack/le_l2cap_signalling.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/ble_protocol_stack/le_l2cap_signalling.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/ble_protocol_stack/le_l2cap_signalling.prog	(working copy)
@@ -0,0 +1,54 @@
+
+
+le_parse_signaling:
+	ifetch 1,contr
+	ifetcht 1,contr //id
+	ifetcht 2,contr //length
+	beq L2CAP_CONNECTION_PARAMETER_UPDATE_RESPONSE,le_l2cap_parse_conn_parameter_update_rsp
+	rtn
+le_l2cap_parse_conn_parameter_update_rsp:
+	ifetch 2,contr	//result
+	store 2,mem_le_l2cap_signaling_conn_param_update_rsp_result
+	jam BT_EVT_LE_PARSE_CONN_PAPA_UPDATE_RSP,mem_fifo_temp
+	branch ui_ipc_send_event
+
+
+//mem_le_interval_min:the ptr that connection parameter,
+//include 	ConnIntervalMin,ConnIntervalMax,
+//		ConnSlaveLatency,ConnSupervisionTimeout
+le_l2cap_tx_update_req:
+	arg 0x0c,rega
+	arg L2CAP_CONNECTION_PARAMETER_UPDATE_REQUEST,regc
+	call le_fifo_malloc_tx_l2cap_signaling
+	setarg 0x08
+	istore 2,contw
+	fetch 8,mem_le_interval_min
+	istore 8,contw
+	rtn
+
+
+//rega:len regc:signaling opcode
+le_fifo_malloc_tx_l2cap_signaling:
+	call le_l2cap_update_signaling_identifier
+	arg LE_L2CAP_CID_SIGNAL,regb
+	call le_fifo_malloc_tx_l2cap
+	copy regc,pdata
+	istore 1,contw
+	fetch 1,mem_le_signaling_identifier
+	istore 1,contw
+	rtn
+
+
+le_l2cap_update_signaling_identifier:
+	fetch 1,mem_le_signaling_identifier
+	//beq 0xff,le_l2cap_signaling_identifier_set_1
+	pincrease 1
+	store 1,mem_le_signaling_identifier
+	rtnne 0
+	
+le_l2cap_reset_signaling_identifier:
+	jam 1,mem_le_signaling_identifier
+	rtn
+
+
+
Index: program/ble_protocol_stack/le_l2cap_smp.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/ble_protocol_stack/le_l2cap_smp.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/ble_protocol_stack/le_l2cap_smp.prog	(working copy)
@@ -0,0 +1,612 @@
+
+le_pairing_mode_init:
+	fetch  1,mem_le_pairing_mode
+	beq LE_PAIRING_MODE_NONE, le_set_no_pairing
+	beq LE_PAIRING_MODE_LAGACY_JUSTWORK,le_set_pairing_mode_lagacy_just_work
+	beq LE_PAIRING_MODE_LAGACY_PASSKEY,le_set_pairing_mode_lagacy_passkey
+ifdef SECURE_CONNECTION				
+	beq LE_PAIRING_MODE_SECURE_CONNECT_JUSTWORK,le_set_pairing_mode_secure_justwork
+	beq LE_PAIRING_MODE_SECURE_CONNECT_NUMERIC,le_set_pairing_mode_secure_numeric
+	beq LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY,le_set_pairing_mode_secure_passkey
+endif
+	rtn
+	
+ifdef SECURE_CONNECTION				
+le_set_pairing_mode_secure_justwork:
+	jam FLAG_LE_BONDING_MITM_SECURE,mem_le_pres_auth
+	branch le_set_noinputnooutput
+le_set_pairing_mode_secure_numeric:
+	jam FLAG_LE_BONDING_MITM_SECURE,mem_le_pres_auth
+	jam FLAG_IOCAP_DISPLAYYESNO,mem_le_pres_iocap
+	rtn
+le_set_pairing_mode_secure_passkey:	
+	jam FLAG_LE_BONDING_MITM_SECURE,mem_le_pres_auth
+	branch le_set_displayonly
+endif
+
+le_set_no_pairing:
+	jam FLAG_LE_NO_BONDING_NO_MITM,mem_le_pres_auth
+le_set_noinputnooutput:	
+	jam FLAG_IOCAP_NOINPUTNOOUTPUT,mem_le_pres_iocap
+	rtn
+le_set_pairing_mode_lagacy_just_work:
+	jam FLAG_LE_BONDING_MITM,mem_le_pres_auth
+	branch le_set_noinputnooutput
+le_set_pairing_mode_lagacy_passkey:
+	jam FLAG_LE_BONDING_MITM,mem_le_pres_auth
+le_set_displayonly:	
+	jam FLAG_IOCAP_DISPLAYONLY,mem_le_pres_iocap
+	rtn
+
+ifdef SECURE_CONNECTION			
+le_secure_connection_enable:
+	fetch 1,mem_secure_connections_enable
+	set1 SECURE_CONNECTIONS_LE_BIT,pdata
+	store 1,mem_secure_connections_enable
+	rtn
+	
+le_secure_connection_disable:
+	fetch 1,mem_secure_connections_enable
+	set0 SECURE_CONNECTIONS_LE_BIT,pdata
+	store 1,mem_secure_connections_enable
+	rtn
+endif
+
+le_parse_smp:
+	ifetch 1,contr
+	beq SMP_PAIRING_REQUEST,le_parse_smp_pairing_request
+//	beq SMP_PAIRING_RESPONSE,le_parse_smp_pairing_response
+	beq SMP_PAIRING_CONFIRM,le_parse_smp_pairing_confirm
+	beq SMP_PAIRING_RANDOM,le_parse_smp_pairing_random
+	beq SMP_PAIRING_FAILED,le_parse_smp_pairing_failed
+//	beq SMP_ENCRYPTION_INFORMATION,le_parse_smp_encryption_information
+	beq SMP_MASTER_IDENTIFICATION,le_parse_smp_master_identification
+	beq SMP_IDENTITY_INFORMATION,le_parse_smp_identity_information
+	beq SMP_IDENTITY_ADDRESS_INFORMATION,le_parse_smp_identity_address_information
+	beq SMP_SIGNING_INFORMATION,le_parse_smp_signing_information
+	beq SMP_SECURITY_REQUEST,le_parse_smp_security_request
+ifdef SECURE_CONNECTION			
+	beq SMP_PAIRING_PUBLIC_KEY,le_parse_smp_public_key
+	beq SMP_PAIRING_DHKEY_CHECK,le_parse_smp_dhkey_check
+endif 	
+	rtn
+
+
+
+le_send_smp_security_request:
+	force 2,rega
+	call le_fifo_malloc_tx_l2cap_smp
+	setarg SMP_SECURITY_REQUEST
+	istore 1,contw
+	fetch 1,mem_le_pres_auth
+	istore 1,contw
+	rtn
+		
+le_parse_smp_pairing_request:
+	store 1,mem_le_preq
+	ifetch 6,contr
+	istore 6,contw
+	fetch 1,mem_le_pairing_mode
+	beq  LE_PAIRING_MODE_NONE,le_smp_pairing_fail_reason_not_support_pairing
+	call le_send_smp_pairing_response
+ifdef 	SECURE_CONNECTION
+	fetch 1,mem_sc_only_mode
+	branch le_parse_smp_pairing_request2, blank
+	fetch 1,mem_le_preq_auth
+	bbit0  LE_AUTH_SECURE_CONNECTION_PAIRING_BIT,app_ble_disconnect
+	fetch 1,mem_le_pairing_mode
+	bbit0 LE_PAIRING_MODE_SECURE_CONNECT_BIT,app_ble_disconnect
+endif	
+le_parse_smp_pairing_request2:	
+	jam FLAG_LE_PAIRING_RCV_PAIRING_REQ,mem_le_pairing_state
+	fetch 1,mem_le_preq_iocap
+	beq  FLAG_IOCAP_DISPlAYONLY,le_set_tk_0
+	beq  FLAG_IOCAP_DISPLAYYESNO,le_set_tk_0
+	beq  FLAG_IOCAP_NOINPUTNOOUTPUT,le_set_tk_0
+	fetch 1,mem_le_pairing_mode	
+	beq LE_PAIRING_MODE_LAGACY_PASSKEY,le_parse_smp_pairing_req_passkey
+	rtneq LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY
+le_set_tk_0:
+	arg 0,pdata
+	store 4,mem_le_tk
+	rtn
+
+le_parse_smp_pairing_req_passkey:
+	fetch 1,mem_le_configuration
+	bbit1 BIT_BLE_PASSKEY_FIXED_KEY,le_parse_smp_pairing_req_fixed_passkey
+le_genernate_tk:
+	arg mem_le_tk,rega
+	copy rega,contw
+	arg 3,loopcnt
+	call generate_random_loop
+	fetch 2,mem_le_tk + 2
+	and_into 0x7,pdata
+	store 2,mem_le_tk + 2
+le_parse_smp_pairing_req_fixed_passkey:
+	jam BT_EVT_LE_TK_GENERATE,mem_fifo_temp
+	branch ui_ipc_send_event
+
+
+
+le_send_smp_pairing_response:
+	force 7,rega
+	call le_fifo_malloc_tx_l2cap_smp
+	fetch 7,mem_le_pres
+	istore 7,contw
+	rtn
+		
+
+le_parse_smp_pairing_confirm:
+	jam FLAG_LE_PAIRING_RECEIVE_PAIRING_CONFIRM,mem_le_pairing_state
+	arg mem_le_rconfirm,contw
+	call memcpy16
+	fetch 1,mem_le_pairing_mode
+	beq LE_PAIRING_MODE_LAGACY_PASSKEY_RES_INPUT,le_parse_smp_pairing_confirm_passkey_res_input
+ifdef SECURE_CONNECTION				
+	beq LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY,le_parse_smp_pairing_confirm_secure_passkey
+	beq LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY_RES_INPUT,le_parse_smp_pairing_confirm_sc_passkey_res_input
+endif
+	branch le_send_smp_pairing_confirm
+
+	
+le_parse_smp_pairing_confirm_passkey_res_input:
+	jam BT_EVT_LE_GET_PASSKEY,mem_fifo_temp
+	branch ui_ipc_send_event
+	
+ifdef SECURE_CONNECTION				
+le_parse_smp_pairing_confirm_secure_passkey:
+	jam LE_SP_FLAG_COMMIT_256,mem_le_secure_connect_flag
+	jam LE_SC_STAT_PASSKEY_WAIT_CONFIRM,mem_le_secure_connect_state	
+	rtn
+
+le_parse_smp_pairing_confirm_sc_passkey_res_input:
+	fetch 4,mem_le_tk
+	branch le_parse_smp_pairing_confirm_passkey_res_input,blank
+	branch le_parse_smp_pairing_confirm_secure_passkey
+endif
+
+le_send_smp_pairing_confirm:
+	jam FLAG_LE_PAIRING_SEND_PAIRING_CONFIRM,mem_le_pairing_state
+ifdef SECURE_CONNECTION				
+	fetch 1,mem_le_pairing_mode
+	bbit1 LE_PAIRING_MODE_SECURE_CONNECT_BIT,le_send_smp_pairing_confirm_sc
+endif 
+	call generate_confirm
+	force 17,rega
+	call le_fifo_malloc_tx_l2cap_smp
+	setarg SMP_PAIRING_CONFIRM
+	istore 1,contw
+	branch  store_aes_result
+
+ifdef SECURE_CONNECTION					
+le_send_smp_pairing_confirm_sc:
+	arg mem_le_srand,contw	
+	call generate_random
+	call function_f4_cb
+	force 17,rega
+	call le_fifo_malloc_tx_l2cap_smp
+	setarg SMP_PAIRING_CONFIRM
+	istore 1,contw
+	branch  load_inverse_result
+endif
+	
+le_parse_smp_pairing_random:	
+	copy contr,rega
+ifdef SECURE_CONNECTION				
+	fetch 1,mem_le_pairing_mode
+	bbit1 LE_PAIRING_MODE_SECURE_CONNECT_BIT,le_parse_smp_pairing_random_sc
+endif
+	copy rega,contr
+	call authenticate_rconfirm
+	branch le_parse_smp_pairing_random_success,zero
+le_send_pairing_confirm_value_failed:
+	jam PAIRING_FAILED_CONFIRM_VALUE_FAILED,mem_le_ll_pairing_fail_reason
+le_send_pairing_failed:
+	force 2,rega
+	call le_fifo_malloc_tx_l2cap_smp
+	setarg SMP_PAIRING_FAILED
+	istore 1,contw
+	fetch 1,mem_le_ll_pairing_fail_reason
+	istore 1,contw	
+le_parse_smp_pairing_failed:
+	bpatchx patch32_2,mem_patch32
+	force smp_pairing_timer,queue
+	call timer_stop
+	jam FLAG_LE_PAIRING_NULL,mem_le_pairing_state
+	jam BT_EVT_LE_PAIRING_FAIL,mem_fifo_temp
+	branch ui_ipc_send_event
+
+le_smp_pairing_fail_reason_not_support_pairing:
+	jam PAIRING_FAILED_PAIRING_NOT_SUPPORTED,mem_le_ll_pairing_fail_reason
+	branch le_send_pairing_failed
+	
+ifdef SECURE_CONNECTION				
+le_parse_smp_pairing_random_sc:
+	arg mem_le_mrand,contw
+	copy rega,contr
+	call memcpy16	
+	fetch 1,mem_le_pairing_mode
+	beq LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY,le_parse_smp_pairing_random_sc_passkey
+	beq LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY_RES_INPUT,le_parse_smp_pairing_random_sc_passkey
+	call function_g2
+	call le_send_smp_pairing_random
+	fetch 1,mem_le_pairing_mode
+	rtnne LE_PAIRING_MODE_SECURE_CONNECT_NUMERIC
+	jam BT_EVT_LE_GKEY_GENERATE,mem_fifo_temp
+	branch ui_ipc_send_event	
+	
+le_parse_smp_pairing_random_sc_passkey:
+	call function_f4_ca
+	arg mem_AES_CMAC_temp,contw
+	call load_inverse_result	
+	arg mem_AES_CMAC_temp,rega
+	arg mem_le_rconfirm ,regb
+	arg 16,loopcnt
+	call string_compare
+	nbranch le_send_pairing_confirm_value_failed,zero
+	branch le_send_smp_pairing_random
+endif 
+
+le_parse_smp_pairing_random_success:
+	call generate_stk
+	jam BT_EVT_LE_PAIRING_SUCCESS,mem_fifo_temp
+	call ui_ipc_send_event
+	jam 1,mem_ltk_exists
+	jam FLAG_LE_PAIRING_AFTER_AUTH,mem_le_pairing_state
+	
+le_send_smp_pairing_random:
+	force 17,rega
+	call le_fifo_malloc_tx_l2cap_smp
+	setarg SMP_PAIRING_RANDOM
+	istore 1,contw
+	arg mem_le_srand,contr
+	branch memcpy16
+
+le_send_smp_encryption_information:
+	force 17,rega
+	call le_fifo_malloc_tx_l2cap_smp
+	setarg SMP_ENCRYPTION_INFORMATION
+	istore 1,contw
+	fetch 1,mem_le_configuration
+	bbit1 BIT_BLE_PAIRING_FIXED_LTK,le_send_fixed_ltk
+	arg mem_le_ltk,contr
+	branch memcpy16
+
+le_send_fixed_ltk:
+	arg mem_le_fixed_ltk,contr
+	branch memcpy16
+
+
+le_send_smp_master_identification:
+	arg mem_le_ediv,contw
+	force 10,loopcnt
+	call generate_random_loop
+	force 11,rega
+	call le_fifo_malloc_tx_l2cap_smp
+	setarg SMP_MASTER_IDENTIFICATION
+	istore 1,contw
+	fetch 2,mem_le_ediv
+	istore 2,contw
+	fetch 8,mem_le_rand
+	istore 8,contw
+	rtn
+
+le_send_smp_identity_information:
+	force 17,rega
+	call le_fifo_malloc_tx_l2cap_smp
+	setarg SMP_IDENTITY_INFORMATION
+	istore 1,contw
+	setarg 0
+	istore 8,contw
+	istore 8,contw
+	rtn
+	
+
+le_send_smp_identity_address_information:
+	force 8,rega
+	call le_fifo_malloc_tx_l2cap_smp
+	setarg SMP_IDENTITY_ADDRESS_INFORMATION
+	istore 1,contw
+	fetch 1,mem_le_conn_own_addr_type
+	istore 1,contw
+	fetch 6,mem_le_lap	
+	istore 6,contw
+	rtn	
+
+
+le_send_pairing_fail_unspecified_reason:
+	jam PAIRING_FAILED_UNSPECIFIED_REASON,mem_le_ll_pairing_fail_reason
+	branch le_send_pairing_failed
+
+le_check_init_key_distribution:
+	fetch 1,mem_le_pres_init_key_distribution
+	fetcht 1,mem_le_pres_init_key_distribution
+	iand temp,pdata
+	rtn	
+
+le_parse_smp_identity_information:
+	arg mem_le_irk,contw
+	call memcpy16
+	call le_check_init_key_distribution
+	isolate0 LE_INITATOR_IRK_BIT,pdata
+	branch le_send_pairing_fail_unspecified_reason,true
+	fetch 1,mem_device_option
+	rtnne DVC_OP_MODULE
+	call le_check_master_addr_type
+	nrtn user
+	branch app_ble_store_reconn_info
+
+//output:user is enable ,random addr type
+le_check_master_addr_type:
+	call disable_user
+	fetch 1,mem_le_conn_peer_addr_type
+	rtneq MASTER_PUBLIC_ADDR
+	fetch 1,mem_le_preq_init_key_distribution
+	rtnbit0 LE_INITATOR_IRK_BIT
+	branch enable_user
+
+le_parse_smp_identity_address_information:
+	call le_check_init_key_distribution
+	isolate0 LE_INITATOR_IRK_BIT,pdata
+	branch le_send_pairing_fail_unspecified_reason,true
+	rtn
+
+le_parse_smp_master_identification:
+le_parse_smp_signing_information:	
+le_parse_smp_security_request:
+	rtn
+	
+ifdef SECURE_CONNECTION				
+le_parse_smp_public_key:
+	arg mem_le_pubkey_remote_x_256,contw	
+	call memcpy64
+	jam LE_SP_FLAG_COMMIT_256,mem_le_secure_connect_flag
+	jam LE_SC_STAT_RECEIVE_PUBLIC_KEY,mem_le_secure_connect_state
+	rtn
+
+le_parse_smp_dhkey_check:
+	arg mem_sp_confirm_remote,contw
+	call memcpy16	
+	jam LE_SC_STAT_RECEIVE_DHKEY,mem_le_secure_connect_state
+	jam LE_SP_FLAG_COMMIT_256,mem_le_secure_connect_flag
+	rtn	
+
+le_send_smp_pairing_public_key:
+	force 65,rega
+	call le_fifo_malloc_tx_l2cap_smp
+	setarg SMP_PAIRING_PUBLIC_KEY
+	istore 1,contw	
+	arg mem_sc_pubkey_local_x_256,contr
+	branch memcpy64
+	
+le_send_smp_pairing_dhkey_check:
+	call function_f6_eb	
+	force 17,rega
+	call le_fifo_malloc_tx_l2cap_smp
+	setarg SMP_PAIRING_DHKEY_CHECK
+	istore 1,contw
+	branch load_inverse_result
+endif	
+
+le_check_paring_time:
+	fetch 1,mem_le_pairing_state
+	rtneq FLAG_LE_PAIRING_END
+	arg FLAG_LE_PAIRING_RCV_PAIRING_REQ,temp
+	isub temp,null
+	nrtn positive
+	arg smp_pairing_timer,queue
+	call timer_check
+	nrtn blank
+	branch le_send_pairing_fail_unspecified_reason
+
+le_pairing_sm:
+	bpatchx patch32_3,mem_patch32
+	call le_fifo_check_nearly_full
+	nrtn blank	
+	fetch 1,mem_le_pairing_state
+	beq FLAG_LE_PAIRING_NULL,le_pairing_sm_null
+	beq FLAG_LE_PAIRING_START,le_pairing_sm_start
+	beq FLAG_LE_PAIRING_SEND_RECURITY_REQ,le_pairing_sm_send_sec_req
+	beq FLAG_LE_PAIRING_RCV_PAIRING_REQ,le_pairing_sm_rcv_pairing_req
+	beq FLAG_LE_PAIRING_AFTER_AUTH,le_pairing_sm_after_auth
+	beq FLAG_LE_PARING_SEND_ENC_INFORMATION,le_pairng_sm_send_enc_information
+	beq FLAG_LE_PARING_SEND_MASTER_IDENTIFICATION,le_pairng_sm_send_master_indentification
+	beq FLAG_LE_PARING_SEND_INDENTITY_INFORMATION,le_pairng_sm_send_indentity_information
+	rtn
+
+le_pairing_sm_null:
+le_pairing_sm_send_sec_req:
+	fetch 1,mem_le_enc_state
+	rtnne FLAG_LE_SEND_START_ENC_RSP
+	jam FLAG_LE_ENC_END,mem_le_enc_state
+	jam FLAG_LE_PAIRING_END,mem_le_pairing_state
+	jam BT_EVT_LE_RECONNECT_COMPLETE ,mem_fifo_temp
+	branch ui_ipc_send_event	
+	
+	
+le_pairing_sm_start:
+	jam FLAG_LE_PAIRING_SEND_RECURITY_REQ,mem_le_pairing_state
+	branch le_send_smp_security_request
+
+le_pairing_sm_rcv_pairing_req:
+	jam FLAG_LE_PAIRING_WAIT_STK_GENERATION,mem_le_pairing_state
+	setarg TIMER_SMP_PAIRING_TIMEOUT
+	arg smp_pairing_timer,queue
+	branch timer_init
+	
+le_pairing_sm_after_auth:
+	fetch 1,mem_le_enc_state
+	beq FLAG_LE_SEND_START_ENC_RSP,le_pairing_sm_after_auth_start_enc
+	rtn
+	
+le_pairing_sm_after_auth_start_enc:
+	fetch 1,mem_le_pairing_mode
+	bbit1 LE_PAIRING_MODE_SECURE_CONNECT_BIT,le_pairing_sm_after_auth_start_enc_sc
+
+	jam FLAG_LE_PARING_SEND_ENC_INFORMATION,mem_le_pairing_state
+	call le_send_smp_encryption_information
+le_pairing_sm_after_auth_start_enc_common:
+	jam BT_EVT_LE_ENC_INFO,mem_fifo_temp
+	call ui_ipc_send_event
+	fetch 1,mem_device_option
+	rtnne DVC_OP_MODULE
+	call le_check_master_addr_type
+	rtn user
+	branch app_ble_store_reconn_info
+
+le_pairing_sm_after_auth_start_enc_sc:
+	jam FLAG_LE_PARING_SEND_MASTER_IDENTIFICATION,mem_le_pairing_state
+	branch le_pairing_sm_after_auth_start_enc_common
+
+le_pairng_sm_send_enc_information:	
+	jam FLAG_LE_PARING_SEND_MASTER_IDENTIFICATION,mem_le_pairing_state
+	branch le_send_smp_master_identification
+
+le_pairng_sm_send_master_indentification:	
+	fetch 1,mem_le_preq_resp_key_distribution
+	fetcht 1,mem_le_pres_resp_key_distribution
+	iand temp,pdata
+	isolate0 LE_INITATOR_IRK_BIT,pdata
+	branch le_parse_start_enc_rsp_after_auth_end,true
+	jam FLAG_LE_PARING_SEND_INDENTITY_INFORMATION,mem_le_pairing_state
+	branch le_send_smp_identity_information
+
+le_pairng_sm_send_indentity_information:		
+	call le_send_smp_identity_address_information
+	branch le_parse_start_enc_rsp_after_auth_end
+
+
+le_parse_start_enc_rsp_after_auth_end:
+	bpatchx patch32_4,mem_patch32
+	force smp_pairing_timer,queue
+	call timer_stop
+	jam FLAG_LE_ENC_END,mem_le_enc_state
+	jam FLAG_LE_PAIRING_END,mem_le_pairing_state
+	jam BT_EVT_LE_PAIRING_COMPLETE ,mem_fifo_temp
+	branch ui_ipc_send_event	
+	
+
+ifdef SECURE_CONNECTION
+
+le_secure_connect_sm:
+	bpatchx patch32_5,mem_patch32
+	fetch 1,mem_le_pairing_mode
+	rtnbit0 LE_PAIRING_MODE_SECURE_CONNECT_BIT
+	fetch 1,mem_le_secure_connect_flag
+	rtnne LE_SP_FLAG_COMMIT_256
+	jam SP_FLAG_STANDBY,mem_le_secure_connect_flag
+	fetch 1,mem_le_secure_connect_state
+	beq  LE_SC_STAT_RECEIVE_PUBLIC_KEY,le_sc_sm_receive_public_key
+	beq LE_SC_STAT_WAIT_SEND_PUBLIC_KEY,le_sc_sm_wait_send_public_key
+	beq LE_SC_STAT_SEND_PUBLIC_KEY,le_sc_sm_send_public_key
+	beq LE_SC_STAT_RECEIVE_DHKEY,le_sc_sm_receive_dhkey
+	beq LE_SC_STAT_WAIT_CONFIRM_GKEY,le_sc_sm_wait_confirm_gkey
+	beq  LE_SC_STAT_PASSKEY_WAIT_CONFIRM,le_sc_sm_passkey_wait_confirm
+	rtn	
+
+le_sc_state_clear:
+	jam SP_FLAG_STANDBY,mem_le_secure_connect_flag
+	jam LE_SC_STAT_NULL,mem_le_secure_connect_state
+	jam FLAG_LE_SC_CONFRIM_NULL,mem_le_sc_confirm_gkey_flag
+	rtn
+	
+le_sc_sm_passkey_wait_confirm:
+	fetch 1,mem_authentication_passkey_times
+	copy pdata,queue
+	increase 1,pdata
+	store 1,mem_authentication_passkey_times
+	fetch 4,mem_le_tk
+	qisolate1 pdata
+	setarg 0x80
+	setflag true,0,pdata
+	store 1,mem_passkey_1bit
+	branch le_sc_sm_ready_send_pairing_confirm
+	
+le_sc_sm_wait_confirm_gkey:
+	fetch 1,mem_le_sc_confirm_gkey_flag
+	jam FLAG_LE_SC_CONFRIM_NULL,mem_le_sc_confirm_gkey_flag
+	beq FLAG_LE_SC_CONFRIM_GKEY_OK,le_sc_confirm_gkey_ok
+	jam LE_SP_FLAG_COMMIT_256,mem_le_secure_connect_flag
+	rtn
+	
+le_sc_confirm_gkey_ok:
+	jam BT_EVT_LE_PAIRING_SUCCESS,mem_fifo_temp
+	call ui_ipc_send_event	
+	jam FLAG_LE_PAIRING_AFTER_AUTH,mem_le_pairing_state
+	branch le_send_smp_pairing_dhkey_check
+
+le_sc_sm_receive_dhkey:
+	fetch 1,mem_sp_dhkey_invalid
+	beq SP_KEY_VALID_256,le_dhkey_ready
+	jam LE_SP_FLAG_COMMIT_256,mem_le_secure_connect_flag
+	rtn
+
+le_dhkey_ready:
+	call function_f5
+	fetch 1,mem_le_pairing_mode
+	beq LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY ,le_dhkey_ready_common
+	beq LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY_RES_INPUT ,le_dhkey_ready_common
+	call le_set_tk_0 
+le_dhkey_ready_common:
+	call function_f6_ea
+	arg mem_AES_CMAC_temp,rega
+	arg mem_sp_confirm_remote ,regb
+	arg 16,loopcnt
+	call string_compare
+	branch le_dhkey_check_ok,zero
+le_dhkey_check_fail:	
+	jam PAIRING_FAILED_DHKEY_CHECK_FAILED,mem_le_ll_pairing_fail_reason
+	branch le_send_pairing_failed
+
+	
+le_dhkey_check_ok:
+	call sp_calc_check_publickey_256
+	nbranch le_dhkey_check_fail,zero
+	jam 1,mem_ltk_exists
+	fetch 1,mem_le_pairing_mode
+	beq LE_PAIRING_MODE_SECURE_CONNECT_JUSTWORK,le_sc_confirm_gkey_ok
+	beq LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY ,le_sc_confirm_gkey_ok	
+	beq LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY_RES_INPUT ,le_sc_confirm_gkey_ok	
+	jam LE_SP_FLAG_COMMIT_256,mem_le_secure_connect_flag
+	jam LE_SC_STAT_WAIT_CONFIRM_GKEY,mem_le_secure_connect_state	
+	rtn	
+
+le_sc_sm_send_public_key:
+	fetch 1,mem_le_pairing_mode
+	beq LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY,le_sc_sm_send_public_key_passkey
+	beq LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY_RES_INPUT,le_sc_sm_send_public_key_passkey
+	jam 0,mem_passkey_1bit
+le_sc_sm_ready_send_pairing_confirm:
+	branch le_send_smp_pairing_confirm
+
+le_sc_sm_send_public_key_passkey:
+	jam 0,mem_authentication_passkey_times
+	rtneq LE_PAIRING_MODE_SECURE_CONNECT_PASSKEY_RES_INPUT
+	branch le_parse_smp_pairing_req_passkey
+
+	
+le_sc_sm_receive_public_key:
+	jam LE_SP_FLAG_COMMIT_256,mem_le_secure_connect_flag
+	fetch 1,mem_sc_local_key_invalid
+	beq SP_KEY_VALID_256,le_public_key_ready
+	rtn
+	
+le_public_key_ready:
+	jam LE_SC_STAT_WAIT_SEND_PUBLIC_KEY,mem_le_secure_connect_state	
+	jam SP_KEY_INVALID,mem_sp_dhkey_invalid
+	branch sp_dhkey_calc_256	
+
+le_sc_sm_wait_send_public_key:
+	jam LE_SP_FLAG_COMMIT_256,mem_le_secure_connect_flag
+	jam LE_SC_STAT_SEND_PUBLIC_KEY,mem_le_secure_connect_state
+	branch le_send_smp_pairing_public_key
+
+endif
+
+
+le_fifo_malloc_tx_l2cap_smp:
+	bpatchx patch32_6,mem_patch32
+	force LE_L2CAP_CID_SMP,regb
+	branch le_fifo_malloc_tx_l2cap
+
+
Index: program/ble_protocol_stack/le_ll.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/ble_protocol_stack/le_ll.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/ble_protocol_stack/le_ll.prog	(working copy)
@@ -0,0 +1,340 @@
+
+le_parse_ll:
+	fetch 1,mem_le_rxbuf_data_ll_opcode
+	beq LL_CONNECTION_UPDATE_IND,le_parse_connection_update_ind
+	beq LL_CHANNEL_MAP_IND,le_parse_channel_map_ind
+	beq LL_TERMINATE_IND,le_parse_terminate_ind
+	beq LL_ENC_REQ,le_parse_enc_req
+	beq LL_ENC_RSP,le_parse_enc_rsp
+	beq LL_START_ENC_REQ,le_parse_start_enc_req
+	beq LL_START_ENC_RSP,le_parse_start_enc_rsp
+	beq LL_UNKNOWN_RSP,le_parse_unknown_rsp
+	beq LL_FEATURE_REQ,le_parse_feature_req
+	beq LL_FEATURE_RSP,le_parse_feature_rsp
+	beq LL_PAUSE_ENC_REQ,le_parse_pause_enc_req
+	beq LL_PAUSE_ENC_RSP,le_parse_pause_enc_rsp
+	beq LL_VERSION_IND,le_parse_version_ind
+	beq LL_REJECT_IND,le_parse_reject_ind
+	beq LL_PING_REQ,le_parse_ping_req
+	beq LL_PING_RSP,le_parse_ping_rsp
+	beq LL_LENGTH_REQ,le_parse_length_req
+	beq LL_LENGTH_RSP,le_parse_length_rsp
+	beq LL_PHY_REQ,le_parse_phy_req
+	beq LL_PHY_UPDATE_IND,le_parse_phy_update_ind
+p_le_send_unknown_rsp:
+	fetchr regc,1,mem_le_rxbuf_data_ll_opcode
+	branch le_send_unknown_rsp
+
+
+//LL Opcode:0x00
+le_parse_connection_update_ind:
+	ifetch 9,contr
+	store 9,mem_le_new_param
+	ifetch 2,contr
+	store 2,mem_le_instant
+	fetch 1,mem_le_state
+	set1 lestate_update_param,pdata
+	store 1,mem_le_state
+	rtn
+
+
+//LL Opcode:0x01
+le_parse_channel_map_ind:
+	ifetch 5,contr
+	store 5,mem_le_new_map
+	ifetch 2,contr
+	store 2,mem_le_instant
+le_update_map_enable:
+	fetch 1,mem_le_state
+	set1 lestate_update_map,pdata
+	store 1,mem_le_state
+	rtn
+
+
+//LL Opcode:0x02
+le_parse_terminate_ind:
+	setarg 20 // 200ms
+	store 2,mem_le_superto
+	store 2,mem_le_init_superto
+	rtn
+
+
+//LL Opcode:0x03
+le_parse_enc_req:
+	ifetch 8,contr
+	store 8,mem_le_rand
+	ifetch 2,contr
+	store 2,mem_le_ediv
+	ifetch 8,contr
+	store 8,mem_le_skdm
+	ifetch 4,contr
+	store 4,mem_ccm_ivm
+	call le_send_enc_rsp
+	bpatchx patch32_7,mem_patch32
+	fetch 1,mem_le_pairing_state
+	beq FLAG_LE_PAIRING_AFTER_AUTH,le_parse_enc_req_after_auth
+	fetch 1,mem_le_configuration
+	bbit1  BIT_BLE_PAIRING_FIXED_LTK,le_parse_enc_req_fixed_ltk
+	fetch 1,mem_nv_data_number
+	ncall load_device_list_mode_4,blank
+	fetch 1,mem_ltk_exists
+	beq 0,le_ltk_lost
+le_parse_enc_req_after_auth:
+	jam FLAG_LE_RCV_ENC_START,mem_le_enc_state
+	call  le_send_start_enc_req
+	branch generate_sk
+le_parse_enc_req_fixed_ltk:
+	jam 1,mem_ltk_exists
+	arg mem_le_fixed_ltk,contr
+	arg mem_le_ltk,contw
+	call memcpy16
+	branch le_parse_enc_req_after_auth
+	
+le_ltk_lost:
+	jam FLAG_LE_ENC_NULL,mem_le_enc_state
+	jam FLAG_LE_ENC_NULL,mem_le_pairing_state
+	jam BT_EVT_LE_LTK_LOST,mem_fifo_temp
+	branch ui_ipc_send_event
+
+//LL Opcode:0x04
+le_parse_enc_rsp:
+	ifetch 8,contr
+	store 8,mem_le_skds
+	ifetch 4,contr
+	store 4,mem_ccm_ivs
+	branch generate_sk
+
+
+//LL Opcode:0x05
+le_parse_start_enc_req:
+	fetch 1,mem_le_state
+	set1 lestate_encryption,pdata
+	store 1,mem_le_state
+	rtn
+
+//LL Opcode:0x06
+le_parse_start_enc_rsp:
+	rtn master
+	jam BT_EVT_LE_START_ENC,mem_fifo_temp
+	call ui_ipc_send_event	
+	jam FLAG_LE_SEND_START_ENC_RSP,mem_le_enc_state
+	branch le_send_start_enc_rsp
+
+
+//LL Opcode:0x07
+le_parse_unknown_rsp:
+	rtn
+
+
+//LL Opcode:0x08
+le_parse_feature_req:
+	branch le_send_feature_rsp
+
+
+//LL Opcode:0x09
+le_parse_feature_rsp:
+	rtn
+
+
+//LL Opcode:0x0a
+le_parse_pause_enc_req:
+	jam FLAG_LE_ENC_PAUSE,mem_le_enc_state
+	call le_send_pause_enc_rsp	
+	jam BT_EVT_LE_PAUSE_ENC,mem_fifo_temp
+	branch ui_ipc_send_event	
+
+
+//LL Opcode:0x0b
+le_parse_pause_enc_rsp:
+	rtn
+
+
+//LL Opcode:0x0c
+le_parse_version_ind:
+	rtn master
+	branch le_send_version_ind
+
+
+//LL Opcode:0x0d
+le_parse_reject_ind:
+	rtn
+
+
+//LL Opcode:0x13
+le_parse_ping_req:
+	branch le_send_ping_rsp
+
+
+//LL Opcode:0x14
+le_parse_ping_rsp:
+	rtn
+
+
+le_parse_length_req:
+	call le_parse_length_rsp
+	branch le_send_data_length_res
+
+le_parse_length_rsp:
+	ifetch 8,contr
+	store 8,mem_remote_rx_max_octets
+	fetch 2,mem_remote_rx_max_octets
+	fetcht 2,mem_local_tx_max_octets
+	call not_greater_than
+	store 2,mem_remote_rx_max_octets
+	
+	fetch 2,mem_remote_tx_max_octets
+	fetcht 2,mem_local_rx_max_octets
+	call not_greater_than
+	store 2,mem_remote_tx_max_octets
+	rtn
+
+
+//LL Opcode:0x16
+le_parse_phy_req:
+	branch le_send_phy_rsp
+
+
+//LL Opcode:0x18
+le_parse_phy_update_ind:
+	ifetch 2,contr
+	store 2,mem_le_new_m2s_phy
+	ifetch 2,contr
+	store 2,mem_le_instant
+	rtn blank
+	fetch 1,mem_le_state
+	set1 lestate_update_phy,pdata
+	store 1,mem_le_state	
+	rtn
+
+
+///////////////////send ll packet//////////////
+//LL Opcode:0x02
+le_send_terminate_ind_user_terminated:
+	arg ERROR_REMOTE_USER_TERMINATED_CONNECTION,regc
+
+//regc:The ErrorCode field shall be set to inform the remote device why the connection is about to be terminated.
+le_send_terminate_ind:
+	arg 2,rega
+	arg LL_TERMINATE_IND,regb
+	call le_fifo_malloc_tx_ll
+	copy regc,pdata
+	istore 1,contw
+	rtn
+
+
+//LL Opcode:0x04
+le_send_enc_rsp:
+	arg mem_le_skds,contw
+	force 8,loopcnt
+	call generate_random_loop
+	arg mem_ccm_ivs,contw
+	force 4,loopcnt
+	call generate_random_loop
+	arg 13,rega
+	arg LL_ENC_RSP,regb
+	call le_fifo_malloc_tx_ll
+	fetch 8,mem_le_skds
+	istore 8,contw
+	fetch 4,mem_ccm_ivs
+	istore 4,contw
+	rtn
+
+
+//LL Opcode:0x05
+le_send_start_enc_req:
+	jam FLAG_LE_SEND_START_ENC_REQ,mem_le_enc_state
+	arg LL_START_ENC_REQ,regb
+	branch le_send_ll_one_lenth
+
+
+//LL Opcode:0x06
+le_send_start_enc_rsp:
+	arg LL_START_ENC_RSP,regb
+	branch le_send_ll_one_lenth
+
+
+//LL Opcode:0x07
+//input:regc is receive ll opcode
+le_send_unknown_rsp:
+	arg 2,rega
+	arg LL_UNKNOWN_RSP,regb
+	call le_fifo_malloc_tx_ll
+	istorer regc,1,contw
+	rtn	
+
+
+//LL Opcode:0x09
+le_send_feature_rsp:
+	arg 9,rega
+	arg LL_FEATURE_RSP,regb
+	call le_fifo_malloc_tx_ll
+	fetch 8,mem_le_local_feature
+	or pdata,FUN_LL_FEATURE_LE_ENCRYPTION,pdata
+	istore 8,contw
+	rtn
+
+
+//LL Opcode:0x0B
+le_send_pause_enc_rsp:
+	arg LL_PAUSE_ENC_RSP,regb
+	branch le_send_ll_one_lenth
+
+
+//LL Opcode:0x0C
+le_send_version_ind:
+	arg 6,rega
+	arg LL_VERSION_IND,regb
+	call le_fifo_malloc_tx_ll
+	fetch 5,mem_version
+	istore 5,contw
+	rtn
+
+//LL Opcode:0x0D
+le_send_reject_ind:
+	arg 2,rega
+	arg LL_REJECT_IND,regb
+	call le_fifo_malloc_tx_ll
+	setarg LE_ERR_PIN_OR_KEY_MISSING
+	istore 1,contw
+	rtn		
+
+
+//LL Opcode:0x13
+le_send_ping_rsp:
+	arg LL_PING_RSP,regb
+	branch le_send_ll_one_lenth
+	
+le_send_data_length_req:
+	arg LL_LENGTH_REQ,regb
+	branch le_send_data_length
+
+le_send_data_length_res:
+	arg LL_LENGTH_RSP,regb
+le_send_data_length:
+	arg 9,rega
+	call le_fifo_malloc_tx_ll
+	fetch 8,mem_local_rx_max_octets
+	istore 8,contw
+	rtn
+
+
+//LL Opcode:0x17
+le_send_phy_rsp:
+	arg 3,rega
+	arg LL_PHY_RSP,regb
+	call le_fifo_malloc_tx_ll
+	fetch 1,mem_le_tx_phys
+	and pdata,0x07,pdata
+	istore 1,contw
+	fetch 1,mem_le_rx_phys
+	and pdata,0x07,pdata
+	istore 1,contw
+	rtn		
+
+
+//regb:ll opcode
+le_send_ll_one_lenth:
+	arg 1,rega
+	branch le_fifo_malloc_tx_ll
+
+
Index: program/bt.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/bt.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/bt.prog	(working copy)
@@ -0,0 +1,1802 @@
+//define RAM_VERSION
+//define CLK24M
+define SECURE_CONNECTION
+//define COMPILE_KEYSCAN
+define NEC
+
+define DEBUG_RF_INIT
+
+define COMPILE_SHUTTER
+define COMPILE_MOUSE
+define COMPILE_MODULE
+define COMPILE_USB
+define COMPILE_DONGLE
+define COMPILE_LE
+define COMPILE_24G
+define COMPILE_CAR
+define COMPILE_REMOTE_CAR
+define COMPILE_REMOTE_CONTROL
+//define COMPILE_WECHAT
+//define COMPLIE_TEST
+//define COMPLIE_ADPCM
+
+INCLUDE "bt_format"
+
+org 0x0000		// start from patch ram address start
+ifdef SIM
+include sim.prog
+else
+include patch.prog
+endif
+
+/******************************************/
+/***********   ROM Start   ***************/
+/******************************************/
+
+org 0x2000		// start from rom address start
+start:
+	call lpmstate
+
+soft_reset:
+	bpatch patch00_0,mem_patch00
+	clear_stack
+
+	call load_otp_set_init
+	call app_param_init
+	call initialize_radio
+	call iic_init_360khz
+	call init_param
+	call l2cap_init
+	bpatch patch00_1,mem_patch00
+	call ui_init
+	call app_init
+ifdef SECURE_CONNECTION
+	call publickey_init
+//	call sp_wait_pubkey_calc_done
+endif
+	call lpm_recover_clk,wake
+main_loop:	
+	bpatch patch00_2,mem_patch00
+ifdef SECURE_CONNECTION
+	call sp_calc_sequence_256
+	call sp_calc_sequence_256_check
+endif
+	call le_advertising_dispatch
+	call idle_dispatch
+	call app_process_idle
+	call connection_dispatch
+	call g24_dispatch
+	call lpm_dispatch
+	branch main_loop
+
+connection_dispatch:
+	call connection_incontext
+	rtnmark0 mark_context
+	set0 mark_context,mark
+	call context_save
+	branch le_disable
+	
+connection_incontext:
+	bpatch patch00_3,mem_patch00
+	call context_search_insniff
+	nbranch connection_nosniff,zero
+	call context_load
+	add rega,coffset_mode,contr
+	ifetch 1,contr
+	bbit1 mode_le,le_conn_dispatch
+//	bbit1 mode_master, master_dispatch
+//	branch slave_dispatch
+	rtn
+	
+connection_nosniff:
+	jam 0,mem_current_context
+	call context_get_next
+	copy loopcnt,null
+	rtn zero
+	branch assert
+
+
+/**************************************/
+/**************idle dispatch*********/
+/**************************************/
+	
+idle_dispatch:
+	fetch 1,mem_hci_cmd
+	rtn blank
+	beq hci_cmd_le_create_conn,idle_le_create_conn
+	call context_search_conn_handle
+	rtn zero
+	call context_search_plap
+	rtn zero
+idle_exit:
+	jam 0,mem_hci_cmd
+	rtn
+
+idle_le_create_conn:
+	jam hci_cmd_le_create_conn,mem_cmd_le_create_conn
+	jam 0,mem_hci_cmd
+	rtn
+
+
+
+context_load:
+	bpatch patch00_4,mem_patch00
+	set1 mark_context,mark
+	deposit rega
+	store 2,mem_context_ptr
+	force context_size,loopcnt
+	arg mem_le_state,contw
+	add rega,coffset_mode,contr
+	ifetch 1,contr
+	copy rega,contr
+	bbit1 mode_le,memcpy
+	rtn
+	
+context_save:
+	bpatch patch00_5,mem_patch00
+	fetch 2,mem_context_ptr
+	iforce contw
+	force context_size,loopcnt
+	arg mem_le_state,contr
+	branch memcpy
+	
+	
+
+context_get_next:
+	arg context_num,loopcnt
+	fetcht 1,mem_current_context
+context_get_next_loop:
+	increase 1,temp
+	compare context_num,temp,0xff
+	nbranch context_get_next_cont,true
+	arg 0,temp
+context_get_next_cont:
+	storet 1,mem_current_context
+	mul32 temp,context_size,pdata
+	arg mem_context,rega
+	iadd rega,rega
+	ifetch 1,rega
+	bbit1 state_insniff,context_get_next_sniff
+	rtnbit1 state_inconn
+context_get_next_sniff:
+	loop context_get_next_loop
+	rtn
+	
+context_new:
+	bpatch patch00_6,mem_patch00
+	arg context_search_empty,regc
+	call context_search
+	nrtn zero					// all occupied
+	deposit rega
+	store 2,mem_context_ptr
+	branch enable_zero
+	
+
+	
+	//rtn nzero if idle(no conn)
+context_check_idle:
+	arg context_check_inconn,regc
+	branch context_search
+	
+
+	
+	/* return zero if conn handle is found */
+context_search_conn_handle:
+	fetcht 1,mem_hci_conn_handle
+context_search_conn_handle2:
+	arg context_search_handle,regc
+	branch context_search
+	
+	/* return zero if plap is found */
+context_search_plap:
+	bpatch patch00_7,mem_patch00
+	fetcht 6,mem_hci_plap
+context_search_plap2:
+	arg context_search_lap,regc
+	branch context_search
+	/* return zero if sniff anchor is meet and rega pointers to context */
+context_search_insniff:
+	arg context_search_sniff,regc
+	branch context_search
+	/* return zero if sniff window is in content with current transaction */
+context_search_sniff_window:
+	arg context_search_window,regc
+context_search:
+	bpatch patch01_0,mem_patch01
+	arg mem_context,rega
+	arg context_num,loopcnt
+context_search_loop:
+	ifetch 1,rega
+	copy regc,pc
+context_search_next:
+	bpatch patch01_1,mem_patch01
+	increase context_size,rega
+	loop context_search_loop
+	force 1,null
+	rtn
+
+context_search_empty:
+	bbit1 state_inconn,context_search_next
+	branch enable_zero
+	
+context_search_lap:
+	bbit0 state_inconn,context_search_next
+context_search_lap_cont:
+	add rega,coffset_plap,contr
+	ifetch 6,contr
+	isub temp,null
+	rtn zero
+	branch context_search_next
+
+context_search_handle:
+	bbit0 state_inconn,context_search_next
+	add rega,coffset_conn_handle,contr
+	ifetch 1,contr
+	isub temp,null
+	rtn zero
+	branch context_search_next
+
+context_search_sniff:
+	bbit0 state_insniff,context_search_next
+context_search_sniff_loop:
+	call context_get_anchor
+	call sign_pdata_temp
+	isub temp,pdata
+	increase 1,pdata
+	branch context_search_sniff_miss,positive
+	copy contr,regb
+	store 9,mem_temp
+	bpatch patch01_2,mem_patch01
+ifdef SECURE_CONNECTION
+	fetch 1,mem_sc_calc
+	nbranch context_search_sniff_sc,blank
+endif	
+	fetch 9,mem_temp
+	copy regb,contr
+	increase 5,pdata  
+	branch context_search_meet1
+	
+ifdef SECURE_CONNECTION
+context_search_sniff_sc:
+	fetch 9,mem_temp
+	copy regb,contr	
+	increase 20,pdata  
+endif	
+context_search_meet1:
+	nbranch context_search_next,positive
+context_search_meet:
+	copy temp,bt_clk
+	call context_next_anchor
+	branch enable_zero
+	
+	
+context_search_sniff_miss:
+	iforce regb
+	add rega,coffset_tsniff,contr
+	ifetch 2,contr
+	branch context_search_meet,blank
+	call context_next_anchor
+	branch context_search_sniff_loop
+
+sign_pdata_temp:
+	rshift16 pdata,timeup    
+	rshift8 timeup,timeup    
+	branch sign_pdata_temp_p0,zero    
+	compare 0xf,timeup,0xf    
+	nrtn true    
+	rshift16 temp,timeup    
+	rshift8 timeup,timeup    
+	nrtn zero    
+	set1 28,temp    
+	rtn
+sign_pdata_temp_p0:    
+	rshift16 temp,timeup    
+	rshift8 timeup,timeup    
+	compare 0xf,timeup,0xf    
+	nrtn true    
+	set1 28,pdata    
+	rtn
+
+context_check_inconn:
+	bbit0 state_inconn,context_search_next
+	branch enable_zero			// found
+
+	
+context_check_a_wack:
+	bbit0 state_inconn,context_search_next
+	add rega,coffset_mode,contr
+	ifetch 1,contr
+	bbit1 mode_le,context_search_next
+	rtn
+
+context_get_anchor:
+	add rega,coffset_mode,contr
+	ifetcht 1,contr
+	deposit clkn_bt
+	isolate1 mode_master,temp
+	add rega,coffset_sniff_anchor,contr
+	ifetcht 4,contr
+	rtn true
+	add rega,coffset_clk_offset,contr
+	ifetch 6,contr
+	call calc_clke2
+	deposit clke_bt
+	rtn
+
+context_next_anchor:
+	add rega,coffset_tsniff,contr
+	add rega,coffset_sniff_anchor,contw
+	ifetch 2,contr
+	iadd temp,timeup			/* wrap to 28 bits */
+	deposit timeup
+	istore 4,contw
+	branch le_context_nextevent
+	
+
+context_search_window:
+	bbit0 state_insniff,context_search_next
+	call context_get_anchor
+	iadd stop_watch,pdata
+	iadd stop_watch,pdata
+	iadd queue,pdata
+	isub temp,null
+	nbranch context_search_next,positive
+	branch enable_zero
+
+
+
+end_of_packet:
+	bpatch patch01_3,mem_patch01
+	disable lr_s2en
+	disable encode_fec0
+	disable encode_fec2
+	disable decode_fec0
+	disable decode_fec2
+	disable enable_crc
+	disable encrypt
+	disable enable_white
+	branch shutdown_radio,is_rx
+	until null,tx_clear
+	nop 100          /* flush out the last bit */
+	branch shutdown_radio
+
+
+
+	/* enable user if sniff window vialation, queue is extra overhead */
+sniff_check_window:
+	bpatch patch01_4,mem_patch01
+	disable swfine
+	copy temp,stop_watch
+	call context_search_sniff_window
+	disable user
+	nrtn zero
+	force 0,stop_watch
+	branch enable_user
+
+
+calc_slot_offset:
+	bpatch patch01_5,mem_patch01
+	until null,halfslot
+	deposit clke
+	iforce contr
+	rshift16,pdata,pdata
+	isub clkn_bt,loopcnt
+	and_into 3,loopcnt			/* bt portion */
+	nbranch calc_bt_portion,zero
+	force 0,pdata
+	branch calc_skip_bt
+calc_bt_portion:
+	fetcht 2,mem_param_rt_rthalfslot
+	force 0,pdata
+calc_slot_offset_loop:
+	iadd temp,pdata
+	loop calc_slot_offset_loop
+calc_skip_bt:
+	iadd contr,pdata			/* add rt portion */
+	div pdata,12
+	call get_div_result
+	store 2,mem_slot_offset
+	rtn
+
+calc_clke_offset:
+	bpatch patch01_6,mem_patch01
+	deposit clke
+	copy clkn,temp
+	isub temp,null
+	nsetflag positive,44,pdata
+	isub temp,temp
+	fetch 2,mem_param_rt_rthalfslot
+	isolate0 15,temp
+	branch calc_clke_pos,true
+	copy temp,alarm
+	arg 0x10000,temp
+	fetch 2,mem_param_rt_rthalfslot
+	isub temp,pdata
+	iadd alarm,temp
+	
+calc_clke_pos:
+	storet 6,mem_le_clk_offset
+	rtn
+
+calc_clke:
+	disable clknt
+	fetch 6,mem_le_clk_offset
+calc_clke2:
+	iadd clkn,alarm
+	increase 10,alarm
+	fetch 2,mem_param_rt_rthalfslot
+	isub alarm,pdata
+	isolate0 15,pdata
+	branch calc_clke_pos_adj,true
+	setarg 0x10000
+	fetchr regd,2,mem_param_rt_rthalfslot
+	isub regd,pdata
+	iadd alarm,alarm
+calc_clke_pos2:
+	copy alarm,clke
+	rtn
+calc_clke_pos_adj:		/* add 2 clock */
+	force 0,null
+	branch calc_clke_pos2
+	
+/******************************************/
+/********* RF related functions ***********/
+/******************************************/
+
+
+qsetxor:
+	rshift3 pdata,pdata
+	ifetchr rega,1,contw
+	ixor rega,pdata
+	isolate0 6,pdata
+	branch qset_p
+
+qset1_p:
+	isolate0 0,null
+qset_start:
+	arg 0x8ac2,contw
+qset_p:
+	ifetch 1,contw
+	qsetflag true,pdata
+	istore 1,contw
+	rtn
+	
+rx_dcoc_avg:
+	nop 60
+btdma:
+//	call btdma
+	setarg mem_dcoc_buf
+	store 2,0x8982
+	setarg mem_dcoc_buf_end
+	store 2,0x8984
+	jam 0x9,0x8981
+	jam 0x3,0x8981
+	jam 0x6,0x8980	
+	nop 60
+	arg 0,rega
+	arg 0,regb
+	arg 16,loopcnt
+	arg mem_dcoc_buf,contr
+rx_dcoc_loop:
+	ifetch 2,contr
+	iadd rega,rega
+	ifetch 2,contr
+	iadd regb,regb
+	loop rx_dcoc_loop
+	rtn
+
+rx_dcoc:
+	bpatch patch01_7,mem_patch01
+	rtn wake
+	call set_sync_on
+	arg 39,temp
+	call set_freq_rx	
+	call rf_rx_enable
+	jam 0x7f,0x8a25
+	jam 0x1a,0x8a30
+	jam 0x78,0x8a31
+	jam 0xb2,0x8a8f
+	jam 0,0x8ac2
+	jam 0,0x8ac3
+	arg 6,queue
+	call rx_dcoc_avg
+	isolate1 13,rega
+	call qset_start
+	isolate1 13,regb
+	call qset_p
+	arg 5,queue
+rx_dcoc_loop2:
+	call qset1_p
+	call qset_p
+	call rx_dcoc_avg
+	arg 0x8ac2,contw
+	rshift4 rega,pdata
+	call qsetxor
+	rshift4 regb,pdata
+	call qsetxor
+	increase -1,queue
+	branch rx_dcoc_loop2,positive
+	jam 0x52,0x8a8f
+	jam 2,0x8a30
+	jam 0,0x8981
+	
+shutdown_radio:
+	bpatch patch02_0,mem_patch02
+	call rf_debug_shutdown_radio_line	//L-H-L
+	disable is_tx
+	disable is_rx
+	setarg 0x0200
+	store 4,0x8a23
+	jam 0xfa,0x8a01
+	nop 12
+	jam 0,0x8a0f
+	jam 0x1a,0x8a12
+	jam 0x2b,0x8a14
+	force 8,radio_ctrl
+	force 0,radio_ctrl
+	jam 0,0x8900 
+	branch gain_control
+
+set_sync_on:
+	bpatch patch02_1,mem_patch02
+	jam 0x60,0x8a0f 
+	jam 0xaa,0x8a10 
+	jam 0x7a,0x8a12 
+	jam 0x00,0x8a25 
+	jam 0x00,0x8a26 
+	nop 60
+	jam 0x20,0x8a20 
+	jam 0xf5,0x8a23 
+	jam 0x12,0x8a24 
+	jam 0x10,0x8a24 
+	nop 60
+	jam 0x60,0x8a12 
+	jam 0xdd,0x8a23 
+	rtn
+
+set_freq_rx:
+	bpatch patch02_2,mem_patch02
+	jam 0x01,0x8900 
+	jam 0x9d,0x8a23 
+	jam 0x02,0x8a24 
+	nop 20 
+	jam 0x65,0x8a70
+	jam 0x9f,0x8a23
+	call set_lemode
+	storet 1,mem_last_freq
+	increase 1,temp
+//	branch aac_res_lookup
+	
+/* temp is frequency, 00=2400Mhz */
+aac_res_lookup:
+	bpatch patch02_3,mem_patch02
+	rshift4 temp,pdata
+	arg mem_aac_res_table,contr
+	iadd contr,contr
+	ifetch 1,contr
+	fetchr rega,1,0x8a71
+	and_into 0xf,rega
+	ior rega,pdata
+	store 1,0x8a71
+	call calc_freq
+	nop 144
+	fetch 1,mem_fcomp_div
+	beq XTAL_24M,aac_res_lookup_end
+	nop 36
+aac_res_lookup_end:
+	jam 0x80,0x8a20
+	rtn
+
+
+set_lemode_2m_16m:
+	setarg 0x8312
+	store 2,0x8907
+	branch set_lemode_2m
+
+set_lemode_1m_16m:
+	setarg 0x4189
+	store 2,0x8907
+	branch set_lemode_1m
+
+
+set_lemode:
+	bpatch patch02_4,mem_patch02
+	jam 0x11,0x8a82
+	jam 0x12,0x8a8d
+	jam 0x0a,0x8a8e
+	fetch 1,mem_fcomp_div
+	beq XTAL_16M,set_lemode_2m_16m
+	setarg 0x5762
+	store 2,0x8907
+set_lemode_2m:
+	jam 3,0x8901
+	jam 3,0x8930
+	rtnmark1 mark_ble_2M
+	jam 1,0x8901
+	jam 0x07,0x8a82
+	jam 0x44,0x8a8d
+	jam 0x0a,0x8a8e
+	fetch 1,mem_fcomp_div
+	beq XTAL_16M,set_lemode_1m_16m
+	setarg 0x2bb1
+	store 2,0x8907
+set_lemode_1m:
+	rtnmark0 mark_ble_lr
+	jam 0x24,0x8930
+	jam 5,0x8901
+	rtn
+
+rf_rx_enable:
+	bpatch patch02_5,mem_patch02
+	call rf_debug_rx_gpio_high
+	call rf_rx_agc_set
+	force 8,radio_ctrl
+	force 0,radio_ctrl
+
+	setarg 0x0aaada
+	store 3,0x8a0f
+	jam 0x40,0x8a25
+	jam 0x10,0x8a26
+	nop 60
+	jam 0xfb,0x8a01
+	jam 0xff,0x8a25
+	jam 0x30,0x8a26
+	jam 0xfe,0x8a16
+	nop 20
+	jam 0x00,0x8a10
+	jam 0x08,0x8a11
+	nop 120
+	jam 0xd,0x8900
+	rtn
+
+	
+rf_rx_agc_set:
+	fetch 1,mem_gain_fix
+	beq 0xff,rf_rx_enable_no_soft_agc 
+	arg mem_gain_table,contr
+	iadd contr,contr
+	ifetch 1,contr
+	store 1,core_rf_rx_gain_fix
+	jam 0x27,core_rf_rx_agc_ctrl
+	
+rf_rx_enable_no_soft_agc:
+	fetcht 1,mem_gain_second_agc_en	//0x00 or 0x08
+	fetch 1,core_rf_rx_agc_ctrl
+	ior temp,pdata
+	store 1,core_rf_rx_agc_ctrl
+	rtn
+	
+
+set_freq_tx_int:
+	jam 0x03,0x8900 
+	jam 0x02,0x8a24 
+	nop 20 
+	jam 0x65,0x8a70
+	jam 0xdf,0x8a23
+	call set_lemode
+	call ghp_lookup
+	storet 1,mem_last_freq
+	increase 2,temp
+	branch aac_res_lookup
+
+
+/* temp is frequency, 00=2400Mhz */
+calc_freq:
+	bpatch patch02_6,mem_patch02
+	setarg 2400
+	iadd temp,pdata
+	copy pdata, rega
+	fetcht 1,mem_fcomp_div
+	rshift temp,temp
+	idiv temp
+//	mul32 pdata,12,rega
+	call wait_div_end
+	quotient pdata
+	rshift8 pdata,queue
+	storer queue, 1,0x890a
+	store 1,0x8909
+	remainder pdata
+	lshift16 pdata,pdata
+	lshift8 pdata,pdata
+	idiv temp
+	call wait_div_end
+	quotient pdata
+	store 3,0x890b
+//	deposit rega
+//	idiv temp
+//	call wait_div_end
+//	quotient pdata
+	storer rega, 1,0x8a22
+	rshift8 rega,rega
+	storer rega, 1,0x8a21
+	jam 0xa0,0x8a20 
+	jam 0xe0,0x8a20 
+	jam 0xa0,0x8a20
+	rtn
+
+ghp_lookup:
+	add temp,2,pdata
+	rshift3 pdata,pdata
+	and_into -2,pdata
+	arg mem_ghpc_table,contr
+	bmark0 mark_ble_2M,ghp_1m
+	increase 12,contr
+ghp_1m:
+	iadd contr,contr
+	ifetchr rega,2,contr
+	ifetch 2,contr
+	isub rega,pdata
+	add temp,2,contr
+	and_into 0xf,contr
+	imul32 contr,pdata
+	rshift4 pdata,pdata
+	iadd rega,pdata
+	store 2,0x8905
+	rtn
+
+
+
+set_freq_tx:
+	bpatch patch02_7,mem_patch02
+	call set_freq_tx_int
+	nop 600 //50us
+
+txon:
+	bpatch patch03_0,mem_patch03
+	setarg 0x0aaa7e
+	store 3,0x8a0f
+	nop 60
+	jam 0x00,0x8a25 
+	jam 0x0d,0x8a26 
+	jam 0xf6,0x8a16 
+	nop 30
+	jam 0x1b,0x8a15 
+	call set_tx_power
+	nop 20
+	jam 0x0f,0x8a26 
+	nop 20
+	jam 0xa8,0x8a10 
+	jam 0x00,0x8a11 
+	rtn
+	
+set_tx_power:	
+	bpatch patch03_1,mem_patch03
+	fetch 1,mem_tx_power
+	beq TX_POWER_0DB,set_tx_power_0db
+	beq TX_POWER_3DB,set_tx_power_3db
+	beq TX_POWER_5DB,set_tx_power_5db
+	beq TX_POWER_7DB,set_tx_power_7db
+	beq TX_POWER_10DB,set_tx_power_10db
+	beq TX_POWER_F3DB,set_tx_power_f3db
+	beq TX_POWER_F5DB,set_tx_power_f5db
+	beq TX_POWER_F10DB,set_tx_power_f10db
+	beq TX_POWER_F20DB,set_tx_power_f20db
+set_tx_power_0db:
+	jam 0x17,0x8a14 
+	setarg 0x251a3f
+	store 3,0x8a60
+set_tx_power_8a63_28:	
+	jam 0x28,0x8a63 
+	rtn
+
+set_tx_power_3db:
+	jam 0x25,0x8a14 
+	setarg 0xa91c2d
+	store 3,0x8a60
+set_tx_power_8a63_2f:	
+	jam 0x2f,0x8a63 
+	rtn
+
+set_tx_power_5db:
+	jam 0x25,0x8a14 
+	setarg 0xa91c3f
+	store 3,0x8a60
+	branch set_tx_power_8a63_2f
+
+set_tx_power_7db:
+	jam 0x25,0x8a14 
+	setarg 0xa9383f
+	store 3,0x8a60
+	branch set_tx_power_8a63_2f
+
+set_tx_power_10db:
+	jam 0x25,0x8a14 
+	setarg 0xa93f3f
+	store 3,0x8a60
+	jam 0x1f,0x8a63 
+	rtn
+	
+
+set_tx_power_f3db:
+	jam 0x17,0x8a14 
+	setarg 0x251827
+	store 3,0x8a60
+	branch set_tx_power_8a63_28
+	
+set_tx_power_f5db:
+	jam 0x17,0x8a14 
+	setarg 0x25181c
+	store 3,0x8a60
+	branch set_tx_power_8a63_28
+
+set_tx_power_f10db:
+	jam 0x17,0x8a14 
+	setarg 0x25180b
+	store 3,0x8a60
+	branch set_tx_power_8a63_28
+
+set_tx_power_f20db:
+	jam 0x17,0x8a14 
+	setarg 0x251000
+	store 3,0x8a60
+	branch set_tx_power_8a63_28
+
+
+
+initialize_radio:
+	jam clksel_rc,core_clksel
+initialize_radio_wait:
+	fetch 2,mem_rf_init_ptr
+	bbit0 14,initialize_radio_wait
+	iforce contr
+	arg 0x8a00,temp		//read 8a00 data->null :no run
+initialize_radio_loop:
+	ifetch 1,contr
+	beq 0xff,initialize_radio_cont
+	ior temp,contw
+	ifetch 1,contr
+	istore 1,contw
+	branch initialize_radio_loop
+	
+initialize_radio_cont:
+	bpatch patch03_2,mem_patch03
+	until null,lpo_edge
+	jam 0x0d,0x8946
+	jam 0x10,0x896f
+	
+	jam 0xcd,0x8a13
+	jam 0x10,0x8a06
+	jam 0x4a,0x8a84
+	jam 0x40,0x8a85
+	jam 0xfe,0x8a16
+//	call set_otp_config
+	fetch 1,mem_wdt_always_work
+	call wdt_set_disable,blank
+
+	until null,lpo_edge
+	jam 0x5f,0x813b
+initialize_radio_cont_next:
+	fetch 1,mem_fcomp_div
+	beq XTAL_16M,initialize_radio_16m
+	fetch 1,mem_ring_ibias_trim
+	or_into 0x04,pdata
+	store 1,0x8a02
+	jam 0x01,0x890f
+	jam 0x24,0x8a80
+	jam 0x62,0x8a81
+	setarg 0xe61212
+	store 3,0x8a73	
+initialize_radio2:
+//	call gpio_set_before_lpm
+	bpatchx patch3e_3,mem_patch3e
+	jam 0x60,0x8a86
+	jam 0x3b,0x8a8b 
+
+	call dpll_on
+	jam 0,core_config
+	jam CLKSEL_DPLL,core_clksel
+	setarg 0x557474
+	store 3,0x8968
+	jam 0x6e,0x8960
+	call rx_dcoc
+	call rfpll_aac_ghpc
+	call set_xtal_cap
+	jam SYSTEM_CLK_12M,mem_system_clk
+	call sadc_calibration
+	call dpll_ring_ibias_calc
+	branch set_bistfix_save_patchram
+
+initialize_radio_16m:
+	fetch 1,mem_ring_ibias_trim
+	or_into 0x06,pdata
+	store 1,0x8a02
+	jam 0x00,0x890f
+	jam 0x23,0x8a80
+	jam 0xb0,0x8a81
+	setarg 0xe40909
+	store 3,0x8a73
+	jam 0x2a,0x8a76
+	jam 0x04,0x8902	
+	branch initialize_radio2
+
+set_xtal_cap:
+	rtn wake
+	until null,lpo_edge
+	fetch 1,mem_xtal_c_sel
+	store 1,core_xtal_cap
+	until null,lpo_edge
+	rtn
+	
+
+rfpll_aac_ghpc:
+	bpatch patch03_3,mem_patch03
+	rtn wake
+	call set_sync_on
+	jam 3,0x8900
+	jam 0x1,0x8a70
+	arg mem_ghpc_table,regb
+	arg mem_aac_res_table,regd
+	call rfpll_aac_ghpc_once
+	set1 mark_ble_2M,mark
+	call rfpll_aac_ghpc_once
+	jam 0x61,0x8a70
+	branch shutdown_radio
+
+rfpll_aac_ghpc_once:
+	call set_lemode
+	arg 6,loopcnt
+	arg 0,regc
+rfpll_cal_loop:
+	copy regc,temp
+	call aac_ghpc
+	increase 2,regb
+	increase 1,regd
+	increase 16,regc
+	loop rfpll_cal_loop
+	rtn
+
+dpll_on:
+	fetch 1,mem_fcomp_div
+	beq XTAL_24M,dpll_on_24m
+	fetch 1,mem_ring_ibias_trim
+	or_into 0x06,pdata
+	store 1,0x8a02
+	jam 0xe0,0x8a05
+dpll_on_24m:	
+	jam 0xd8,0x8a00
+	nop 60
+	jam 0xa0,0x8a01
+	jam 0xdf,0x8a00
+	jam 0xfa,0x8a01
+	nop 20
+	jam 0x9f,0x8a00
+	rtn
+
+aac_ghpc:
+	bpatch patch03_4,mem_patch03
+	jam 0x30,0x8a20
+	jam 0xdd,0x8a23 
+	call calc_freq
+wait_cal_done:
+	fetch 1,0x8a7c
+	bbit0 0,wait_cal_done
+	jam 0x30,0x8a7b
+	call read_cal_result
+	iforce rega
+	jam 0x40,0x8a7b
+	call read_cal_result
+	isub rega,pdata
+	mul32 pdata,125,temp
+	setarg 0xb00000
+	idiv temp
+	call wait_div_end
+	quotient pdata
+	bmark0 mark_ble_2M,aac_ghpc_1m
+	lshift pdata,pdata
+aac_ghpc_1m:
+	istore 2,regb
+	jam 0x20,0x8a7b
+	fetch 1,0x8a7e
+	lshift4 pdata,pdata
+	istore 1,regd
+	jam 0,0x8a7b
+	rtn
+
+read_cal_result:
+	fetch 2,0x8a7d
+	byteswap pdata,pdata
+	fetcht 1,0x8a7c
+	lshift16 temp,temp
+	ior temp,pdata
+	rtn
+
+//after dpll en and adc calibration
+dpll_ring_ibias_calc:
+	bpatch patch03_5,mem_patch03
+	rtn	
+/*	fetch 1,core_vtest_ctrl0
+	set1 0,pdata
+	store 1,core_vtest_ctrl0
+	jam 0xf0,core_vtest_ctrl1
+	fetch 1,core_bbpll_cfg3
+	or_into 0x16,pdata
+	store 1,core_bbpll_cfg3
+
+	fetch 1,mem_adc_dma_enable
+	store 1,mem_temp
+	fetch 1,mem_adc_channel
+	store 1,mem_temp+1
+	jam 0,mem_adc_dma_enable
+	fetch 1,mem_ring_ibias_calc_adc_channel
+	store 1,mem_adc_channel
+	fetcht 1,mem_ring_ibias_calc_adc_gpio
+	call gpio_set_high_impedance
+
+	arg 0,rega
+	arg 8,loopcnt
+dpll_ring_ibias_read_adc:
+	call enable_adc
+	fetch 2,mem_adc_current_value
+	iadd rega,rega
+	loop dpll_ring_ibias_read_adc
+	rshift3 rega,rega
+	store 2,mem_adc_current_value
+
+	fetch 1,mem_temp
+	store 1,mem_adc_dma_enable
+	fetch 1,mem_temp+1
+	store 1,mem_adc_channel
+
+	fetch 1,core_bbpll_cfg3
+	and_into 0xe0,pdata
+	store 1,core_bbpll_cfg3
+	jam 0x00,core_vtest_ctrl1
+	fetch 1,core_vtest_ctrl0
+	set0 0,pdata
+	store 1,core_vtest_ctrl0
+
+	call vdd_calculate_by_mode
+	fetcht 2,mem_ring_ibias_vtune_high
+	isub temp,null
+	branch ring_ibias_trim_incrs,positive
+	fetcht 2,mem_ring_ibias_vtune_low
+	isub temp,null	
+	rtn positive
+ring_ibias_trim_decrs:
+	fetch 1,mem_ring_ibias_trim
+	rtneq 0x00
+	increase -32,pdata
+	store 1,mem_ring_ibias_trim
+	rtn
+
+ring_ibias_trim_incrs:
+	fetch 1,mem_ring_ibias_trim
+	rtneq 0xe0
+	increase 32,pdata
+	store 1,mem_ring_ibias_trim
+	rtn
+
+*/
+
+save_rssi:
+	bpatch patch03_6,mem_patch03
+	 // bit6 is signed bit.
+	fetch 1,modem_nb_pow
+	isolate1 6,pdata
+	setflag true,7,pdata
+	store 1,mem_modem_rssi
+
+	fetch 1,modem_gain
+	and pdata,0x0f,temp
+	lshift temp,temp
+	rshift4 pdata,pdata
+	iadd temp,temp
+	mul32 temp,3,rega // (abb_gain + lna_gain*2)*3
+
+	fetch 1,mem_modem_rssi
+	call byte_sign_extern
+	sub pdata,0,pdata //-modem_nb_pow
+	iadd rega,pdata // (abb_gain + lna_gain*2)*3 + (-modem_nb_pow)
+	increase -9,pdata // (abb_gain + lna_gain*2)*3 + (-modem_nb_pow) - 9
+	and pdata,0x1ff,pdata
+	isolate1 8,pdata
+	nbranch save_rssi_store,true
+	setarg 0	 
+save_rssi_store:
+	store 1,mem_rssi_hex
+	branch rssi_hex2dec
+ 
+byte_sign_extern:
+	isolate1 7,pdata
+	nrtn true
+	arg 0xff00,temp
+	ior temp,pdata
+	rtn
+ 
+rssi_hex2dec:
+	fetch 1,mem_rssi_hex
+	call bcd
+	store 1,mem_rssi			 
+	rtn
+
+bcd:
+	and_into 0xff,pdata
+	div pdata,10
+	call get_div_result
+	lshift4 pdata,pdata
+	remainder temp
+	ior temp,pdata
+	rtn
+
+gain_control:
+	bpatch patch03_7,mem_patch03
+	fetch 1,mem_gain_fix
+	rtneq 0xff
+	nbranch  gain_increase,sync
+	fetch 1,mem_modem_rssi
+	sub pdata,0xf0,null
+	nbranch gain_descend,positive
+	sub pdata,0x7f,null
+	branch gain_descend,positive
+	
+	fetchr rega, 1,core_rf_rx_gain_fix
+	fetch 1,mem_gain_fix
+	rtneq 0	
+	arg mem_gain_table,contr
+	iadd contr,contr
+	ifetch 1,contr
+	isub rega,null
+	nrtn zero
+	increase -2,contr
+	ifetcht  1,contr
+	rshift4 temp,pdata
+	rshift4 rega,regb
+	isub regb,regb
+	and temp,0xf,pdata
+	and rega,0xf,rega
+	isub rega,rega
+	lshift rega,pdata
+	iadd regb,regb
+	mul32 regb,3,regb
+	fetcht 1,mem_modem_rssi
+	and temp,0x80,pdata
+	rtn blank
+add_negative:
+	setarg 0x100
+	isub temp,temp
+	copy regb,pdata
+	isub temp,pdata
+	rtn positive
+	and pdata,0xff,pdata
+	rtneq 0xff
+	rtneq 0xfe
+	
+gain_increase:	
+	fetch 1,mem_gain_fix
+	beq 1,set_rx_gain0
+	beq 2,set_rx_gain1
+//	beq 0,set_rx_gain0
+	branch set_rx_gain0
+	
+gain_descend:
+	fetch 1,mem_gain_fix
+	beq 0,set_rx_gain1
+	beq 1,set_rx_gain2
+//	beq 2,set_rx_gain2
+set_rx_gain2:
+	jam 2,mem_gain_fix
+	rtn
+
+set_rx_gain0:
+	jam 0,mem_gain_fix
+	rtn
+	
+set_rx_gain1:
+	jam 1,mem_gain_fix
+	rtn
+
+	
+
+
+
+	/* pdata = clks ahead of bt_clk */
+ahead_window:
+	copy pdata,temp
+	bpatch patch04_0,mem_patch04
+	copy temp,pdata
+	call clk2bt
+	lshift16 bt_clk,pdata
+	set1 44,pdata
+	call clk_diff
+	set0 44,pdata
+	call get_clk
+	call clk_diff
+	rtn user
+	call clk2rt
+	iforce stop_watch
+	until null,timeout
+	rtn
+
+
+get_clk:
+	copy clkn,temp
+	rtn master
+	copy clke,temp
+	rtn
+
+get_clkbt:
+	deposit clkn_bt
+	rtn master
+	deposit clke_bt
+	rtn
+
+
+assert:
+	bpatch patch04_1,mem_patch04
+	branch assert
+	
+
+sleep:	
+	rtn blank
+	/* sleep pdata clocks, only even clocks are accurate */
+	rshift pdata,pdata
+	increase -3,pdata
+sleep_loop:	
+	increase -1,pdata
+	nbranch sleep_loop,zero
+	force 0,pdata
+	rtn
+
+
+
+init_param:
+
+	setarg param_tx_setup
+	store 2,mem_param_tx_setup
+	setarg param_rf_setup
+	store 2,mem_param_rf_setup
+	setarg param_conn_access
+	store 2,mem_param_conn_access
+	setarg param_rx_setup
+	store 2,mem_param_rx_setup
+	setarg param_clke_cal
+	store 2,mem_param_clke_cal
+	setarg param_pll_setup
+	store 2,mem_param_pll_setup
+	setarg param_dpll_start_delay
+	store 2,mem_param_dpll_start_delay
+	setarg param_rt_rthalfslot
+	store 2,mem_param_rt_rthalfslot
+	setarg param_clke_cal_le_1m
+	store 2,mem_param_clke_cal_le_1m
+	setarg param_clke_cal_le_2m
+	store 2,mem_param_clke_cal_le_2m
+	setarg param_clke_cal_le_coded
+	store 2,mem_param_clke_cal_le_coded
+	
+	bpatch patch04_2,mem_patch04
+	rtn wake
+	setarg ATT_DEFAULT_MTU
+	store 2,mem_le_remote_mtu
+	jam PARAM_T_IFS_150US+PARAM_SYNC_TIME_DIFFERENCE,mem_le_tx_ifs_defference
+	setarg mem_ble_tx_buff0
+	store 2,mem_ble_l2cap_tx_buff0_ptr
+	setarg mem_ble_l2cap_tx_buff_size
+	store 2,mem_ble_l2cap_tx_buff_size_ptr	
+	rshift clkn_bt,pdata
+	store 4,mem_last_clkn
+	rtn
+
+
+
+
+/*****************************************LPM************************************************/
+
+lpmstate:
+	setarg 0xee21
+	store 2,core_clkoff			// disable unused peripherals
+	fetchr alarm,4,core_gpio_in
+	fetch 1,core_lpm_isogate
+	bbit0 gpio_latch,power_up
+	enable wake
+	bbit1 cold_wake,lpmwake		// wakeup from lpm	
+	disable wake
+	deposit auxcnt
+	nbranch lpmwake,blank		// sleep interrupted, wakeup
+	fetch 1,core_lpm_sysctl
+	bbit1 reload_code,lpmwake
+	arg param_hibernate_clks,temp
+	branch lpm_enter_sleep
+lpmwake:
+	call lpm_poweron_retmem
+	call lpm_load_context,wake
+	until null,lpo_edge
+	fetch 1,core_lpm_isogate
+	set0 gpio_latch,pdata			// enable gpio normal function after load gpio configuration
+	store 1,core_lpm_isogate		
+	until null,lpo_edge
+	nbranch boot_load,wake		// wakeup from hibernate
+	call set_bistfix_wake
+	storer alarm,4,mem_saved_gpio_in
+	jam OTP_KEY_LOCK,core_misc_ctrl	// disable further read/write of key
+	rtn
+
+power_up:
+	call lpm_poweron_retmem
+boot_load:
+	call loadcode	
+	storer alarm,4,mem_saved_gpio_in
+	rtn
+
+lpm_poweron_retmem:
+	until null,lpo_edge
+	fetch 1,core_lpm_ldosel
+	and_into 0x88,pdata			// clear ldo to default all zero 
+	store 1,core_lpm_ldosel
+	until null,lpo_edge
+	fetch 1,core_lpm_isogate
+	or_into 0xf,pdata				// turn on all retmem switch
+	store 1,core_lpm_isogate		
+	until null,lpo_edge
+	set1 isogate,pdata				// turn on isolation gate
+	store 1,core_lpm_isogate		
+	until null,lpo_edge
+	set1 retmem_cs,pdata			// assert CSN
+	store 1,core_lpm_isogate		
+	until null,lpo_edge
+	rtn
+
+
+xtal_fast_wake:
+	until null,lpo_edge
+	jam 0x76,core_xtal_ib
+	until null,lpo_edge
+	jam 0x37,core_xtal_cap
+	rtn
+
+lpm_write_lock:
+//	fetch 1,mem_ucode_flag
+//	and pdata,0xf,temp
+	fetch 1,mem_device_option
+	lshift4 pdata,pdata
+//	ior temp,pdata
+	store 1,core_ucode_flag
+	until null,lpo_edge
+	fetch 1,mem_peripheral_lock_flag
+	set1 rom_lock_bit,pdata
+	set1 option_lock,pdata
+	store 1,core_peripheral_lock
+	branch lpm_write_wait
+	
+lpm_write_ice_disable:
+	fetch 1,core_lpm_sysctl
+	set0 ice_mode,pdata
+	store 1,core_lpm_sysctl
+	rtn
+
+lpm_write_ice_enable:
+	fetch 1,core_lpm_sysctl
+	set1 ice_mode,pdata
+	store 1,core_lpm_sysctl
+	rtn
+
+lpm_preon_counter:
+	fetch 3,mem_lpm_xtalcnt
+	arg core_lpm_xtalcnt,contw
+lpm_write_3bytes:
+	arg 3,loopcnt
+	branch lpm_write_loop
+	
+lpm_write_mpu_s0:
+	arg core_mpu_s0_saddr,contw
+lpm_write_dword:
+	arg 4,loopcnt
+lpm_write_loop:
+	until null,lpo_edge
+	istore 1,contw
+	rshift8 pdata,pdata
+	loop lpm_write_loop
+	branch lpm_write_wait
+
+lpm_write_mpu_s1:
+	arg core_mpu_s1_saddr,contw
+	branch lpm_write_dword
+
+
+lpm_disable_exen_output:
+	fetch 1,core_lpm_ldosel
+	set0 3,pdata
+	store 1,core_lpm_ldosel
+	rtn
+
+lpm_disable_io_dozed:
+	fetch 1,mem_lpm_hv_sel
+	rtn blank
+	set0 LPM_DOZE_EN_BIT,pdata
+	branch lpm_write_sel_hv
+
+lpm_save_sel_hv:
+	store 1,mem_lpm_hv_sel
+lpm_write_sel_hv:
+	store 1,core_io_doze_en
+lpm_write_wait:	
+	until null,lpo_edge
+	until null,lpo_edge
+	rtn
+
+
+lpm_write_io_vsel:
+	store 1,core_io_vsel
+	branch lpm_write_wait
+
+
+lpm_load_context:
+	call lpm_disable_io_dozed
+	fetch 1,mem_saved_spidctrl
+	store 1,core_spid_ctrl
+	arg mem_saved_gpio,contr
+	arg core_gpio_conf,contw
+	call memcpy16
+	arg core_gpio_conf_hi,contw
+	call memcpy8
+	fetchr mark,8,mem_saved_mark
+	arg core_gpio_wakeup_cfg,contr
+	arg mem_gpio_wakeup_cfg,contw
+	arg 12,loopcnt
+	call memcpy
+	branch load_ucode
+
+lpm_save_context:
+	storer mark,8,mem_saved_mark
+	arg core_gpio_conf,contr
+	arg mem_saved_gpio,contw
+	call memcpy16
+	arg core_gpio_conf_hi,contr
+	call memcpy8
+	fetch 1,core_spid_ctrl
+	store 1,mem_saved_spidctrl
+	copy temp,regb
+	branch lpm_write_gpio_wakeup
+	
+lpm_write_gpio_wakeup:
+	arg 12,loopcnt
+	arg mem_gpio_wakeup_cfg,rega
+	arg core_gpio_wakeup_cfg,regc
+	until null,lpo_edge
+lpm_write_gpio_loop:
+	ifetch 1,rega
+	ifetcht 1,regc
+	isub temp,null
+	branch lpm_write_gpio_loop_next,zero
+	istore 1,regc
+	until null,lpo_edge
+lpm_write_gpio_loop_next:	
+	increase 1,rega
+	increase 1,regc
+	loop lpm_write_gpio_loop
+	copy regb,temp
+	rtn
+
+lpo_calibration:
+	bpatch patch04_3,mem_patch04
+	fetch 1,core_ccnt_bit
+	nbranch lpo_cal_inited,blank
+	fetch 3,mem_clks_per_lpo
+	nrtn blank
+	jam 0xc,core_ccnt_bit
+	jam ccnt_start,core_misc_ctrl
+lpo_cal_inited:
+	fetch 1,core_perf_status
+	rtnbit0 1
+	fetch 3,core_clk_counter
+	store 3,mem_clks_per_lpo
+	rtn
+
+
+	/* temp is lpo counter for doze */
+lpm_doze:
+	fetch 1,mem_lpm_sysctl
+	set1 reload_code,pdata
+	store 1,mem_lpm_sysctl
+
+	/* no retention memory at all */
+lpm_hibernate:
+	bpatch patch04_4,mem_patch04
+	arg param_hibernate_clks,temp
+	fetch 1,mem_lpm_hibernate_switch
+	store 1,mem_lpm_isogate_final	
+	fetch 1,mem_lpm_sysctl
+	store 1,core_lpm_sysctl
+	until null,lpo_edge
+	/* temp is lpo clocks to sleep */
+lpm_sleep:
+	bpatch patch04_5,mem_patch04
+	//call xtal_fast_wake
+	fetch 2,mem_cb_before_lpm_sleep
+	call callback_func
+lpm_sleep_skip_cb_function:
+	fetch 4,mem_sleep_counter_all	// sleep total time, 32k unit
+	iadd temp,pdata
+	store 4,mem_sleep_counter_all
+	call lpm_save_context
+	fetch 1,mem_lpm_hv_sel
+	set1 LPM_DOZE_EN_BIT, pdata
+	call lpm_write_sel_hv
+	ncall lpm_preon_counter,wake
+	until null,lpo_edge
+	storer clkn,6,mem_sleep_clkn
+	call set_bistfix_save_xram
+	fetch 3,mem_lpm_isogate
+	fetchr rega,1,mem_lpm_ldo_sel
+	arg 3,loopcnt
+lpm_sleep_loop:
+	until null,lpo_edge
+	store 1,core_lpm_isogate
+	rshift8 pdata,pdata
+	loop lpm_sleep_loop
+	until null,lpo_edge
+	storer rega,1,core_lpm_ldosel
+lpm_enter_sleep:
+	until null,lpo_edge
+	storet 4,core_lpm_reg
+	jam lpmreg_sel_counter,core_lpm_wr
+	until null,never
+
+/*
+lpm_cal_xtal_startup:
+	fetch 1,mem_lpm_xtalcnt
+	nrtn blank
+	jam clksel_rc,core_clksel
+	jam 0xf8,core_lpm_ctrl			// turn off xtal
+	setarg 200000
+	call sleep
+	call xtal_fast_wake
+	until null,lpo_edge
+	jam 0xff,core_lpm_ctrl				// turn on xtal
+	copy lpo_time,alarm
+	jam clksel_xtal,core_clksel
+	nop 10
+	until null,lpo_edge
+	deposit lpo_time
+	isub alarm,pdata
+	increase 0x30,pdata
+	arg 0xff,temp
+	call ceiling
+	store 1,mem_lpm_xtalcnt
+	nop 30000
+	nop 30000
+	nop 30000	
+	rtn
+*/
+
+lpm_recover_clk:
+	bpatch patch04_6,mem_patch04
+	setarg 0
+	copy auxcnt,null
+	branch lpm_recover_timeout,zero
+	fetch 1,core_lpm_xtalcnt
+	fetcht 1,core_lpm_buckcnt
+	isub temp,null
+	branch lpm_recover_xtal,positive
+	deposit temp
+lpm_recover_xtal:
+	isub auxcnt,pdata
+	increase 1,pdata
+lpm_recover_timeout:
+	increase 8,pdata
+	until null,lpo_edge
+	iadd lpo_time,pdata
+	fetcht 4,mem_sleep_counter
+	iadd temp,pdata
+	fetcht 3,mem_clks_per_lpo
+	imul32 temp,pdata
+	rshift8 pdata,pdata
+	rshift4 pdata,pdata
+	increase param_lpm_fix,pdata
+	fetcht 2,mem_param_rt_rthalfslot
+	idiv temp
+	call get_div_result
+	lshift16 pdata,pdata
+	remainder temp
+	ior temp,pdata
+	fetcht 6,mem_sleep_clkn
+	call clk_add
+	copy temp,clkn
+	fetch 6,mem_context + coffset_clk_offset
+	call calc_clke2
+	deposit clke
+	store 6,mem_pdatatemp
+	deposit auxcnt
+	istore 1,contw
+	fetch 1,core_gpio_in1
+	or_into 0xf0,pdata
+	istore 1,contw
+	rtn
+
+
+lpm_adjust_clk:
+	bpatch patch04_7,mem_patch04
+	bmark0 mark_context,lpm_clear_counter
+	fetcht 4,mem_sleep_counter_all
+	arg 0x600,pdata
+	isub temp,null
+	rtn positive				// interval too small
+	copy temp,rega
+	fetcht 6,mem_sync_clke
+	deposit rege
+	call clk_diff_rt
+	copy rega,temp
+	lshift8 pdata,pdata
+	lshift4 pdata,pdata
+	idiv temp
+	call get_div_result
+	arg param_lpm_adjmax,temp
+	call ceiling
+	store 1,mem_lpm_adjust
+	nbranch lpm_adjust_positive,user
+	sub pdata,0,pdata
+lpm_adjust_positive:
+	fetcht 3,mem_clks_per_lpo
+	iadd temp,pdata
+	store 3,mem_clks_per_lpo
+lpm_clear_counter:
+	setarg 0
+	store 4,mem_sleep_counter_all
+	rtn
+
+	
+lpm_dispatch:
+	bpatch patch05_0,mem_patch05
+	call lpo_calibration
+	fetch 3,mem_clks_per_lpo
+	rtn blank
+	fetch 1,mem_lpm_mode
+	rtn blank
+ifdef 	SECURE_CONNECTION
+	fetch 1,mem_secure_connections_enable
+	branch lpm_dispatch_next,blank
+	fetch 1,mem_sc_local_key_invalid 	// simple pairing is not ready
+	rtn blank
+lpm_dispatch_next:
+	fetch 1,mem_sc_calc
+	nrtn blank	
+endif
+	arg context_check_a_wack,regc
+	call context_search
+	rtn zero
+	call lpm_check_wake_lock
+	nrtn blank
+	call context_check_idle						
+	nbranch lpm_dispatch_unconn,zero
+	rtn wake
+	bpatch patch05_1,mem_patch05
+	fetcht 1,mem_lpm_current_mult
+	fetch 2,mem_context + coffset_tsniff
+	imul32 temp,pdata
+	rshift4 temp,temp
+	rshift2 temp,temp
+	isub temp,pdata
+	fetcht 4,mem_context + coffset_sniff_anchor
+	iadd temp,pdata
+	fetcht 1,mem_lpm_overhead
+	isub temp,pdata
+	lshift16 pdata,alarm
+	fetch 2,mem_context + coffset_rx_window
+	rshift pdata,pdata
+	call clk2bt
+	deposit alarm
+	call clk_diff
+	copy clke,temp
+	call clk_diff_rt
+	rtn user
+lpm_dispatch_sleep:
+	call clk2lpo
+lpm_dispatch_lpo:
+	bpatch patch05_2,mem_patch05
+	fetch 1,mem_lpm_xtalcnt
+	isub temp,null
+	branch lpm_clear_counter,positive
+	storet 4,mem_sleep_counter
+	call app_will_enter_lpm
+//	call l2cap_lpm_save_txbuf
+	fetcht 4,mem_sleep_counter
+	branch lpm_sleep
+	
+lpm_dispatch_unconn:
+	bpatch patch05_3,mem_patch05
+	fetch 1,mem_le_adv_enable
+	nbranch lpm_unconn_cont,blank
+	rtn
+	
+lpm_unconn_cont:
+	fetch 2,mem_lpm_interval
+	rtn blank
+lpm_sleep_btclk:
+	fetcht 1,mem_lpm_overhead
+	isub temp,pdata
+	arg 7500,temp				
+	imul32 temp,pdata
+	branch lpm_dispatch_sleep
+
+	
+lpm_mult_wait_timeout:
+	fetch 2,mem_cb_bt_set_mult
+	call callback_func
+	nbranch lpm_mult_short,blank
+	jam 0,mem_lpm_current_mult
+	bmark0 mark_lpm_mult_enable,lpm_mult_short
+	fetch 1,mem_lpm_mult_cnt
+	branch lpm_mult_long,blank
+	increase -1,pdata
+	store 1,mem_lpm_mult_cnt
+	rtn
+
+
+
+
+lpm_match:
+	jam 0,mem_sniff_unint_lost
+	fetch 3,mem_sniff_rcv
+	increase 1,pdata
+	store 3,mem_sniff_rcv
+	rtn
+
+
+lpm_lost:
+	bpatch patch05_4,mem_patch05
+	jam 0,mem_lpm_current_mult
+	fetch 3,mem_sniff_lost
+	increase 1,pdata
+	store 3,mem_sniff_lost
+	fetch 1,mem_sniff_unint_lost
+	increase 1,pdata
+	store 1,mem_sniff_unint_lost
+	rtn
+
+lpm_mult_short:
+	jam 0,mem_lpm_current_mult
+	fetch 1,mem_lpm_mult_timeout
+	store 1,mem_lpm_mult_cnt
+	rtn
+
+lpm_mult_long:
+	fetcht 1,mem_lpm_mult
+	storet 1,mem_lpm_current_mult
+	rtn
+
+
+
+lpm_get_wake_lock:
+	fetch 2,mem_lpm_wake_lock
+	qset1 pdata
+	store 2,mem_lpm_wake_lock
+	rtn
+
+lpm_put_wake_lock:
+	fetch 2,mem_lpm_wake_lock
+	qset0 pdata
+	store 2,mem_lpm_wake_lock
+	rtn
+
+
+
+lpm_check_wake_lock:
+	bpatch patch05_5,mem_patch05
+	call app_check_wake_lock
+	fetch 2,mem_lpm_wake_lock
+	copy pdata,rega
+	fetch 3,mem_tx_fifo3
+	nsetflag blank,wake_lock_ble_tx,rega
+	fetch UTIL_FIFO_LEN,mem_ipc_fifo_bt2c51
+	nsetflag blank,wake_lock_ipc_bt2c51,rega
+	fetch UTIL_FIFO_LEN,mem_ipc_fifo_c512bt
+	nsetflag blank,wake_lock_ipc_c512bt,rega
+	fetch 1,mem_hci_cmd
+	nsetflag blank,wake_lock_cmd,rega
+	fetch 1,mem_device_option
+	compare DVC_OP_MODULE,pdata,0xff
+	call lpm_uart_wake_lock,true
+	copy rega,pdata
+	store 2,mem_lpm_wake_lock
+	rtn
+
+lpm_uart_wake_lock:
+	fetch 2,core_uart_rxitems
+	nsetflag blank,wake_lock_uart_rx ,rega
+	fetch 2,core_uart_txitems
+	nsetflag blank,wake_lock_uart_tx ,rega
+	rtn
+
+	
+
+
Index: program/debug.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/debug.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/debug.prog	(working copy)
@@ -0,0 +1,66 @@
+
+// Rf debug
+
+/*****************************************************************************************************************************************************************************************
+    txon     txoff       rxon		      sync             crc pass    shutdown radio          match
+     _________          ______________    _________________     ___        ___                     
+    |         |        |              |  |                 |   |   |      |   |                   
+    |	      |        |              |  |                 |   |   |      |   |                   
+____|tx data  |________|   rx window  |__| rx data         |___|   |______|   |_______       __________
+
+*****************************************************************************************************************************************************************************************/
+
+rf_debug_rx_gpio_low:
+	fetch 1,mem_rf_debug_rx_gpio
+rf_debug_gpio_low:
+	arg gpcfg_output_low,temp
+	branch gpio_config_function
+
+rf_debug_rx_on_line:
+rf_debug_rx_gpio_high:
+	fetch 1,mem_rf_debug_rx_gpio
+rf_debug_gpio_high:
+	arg gpcfg_output_high,temp
+	branch gpio_config_function
+
+rf_debug_rx_gpio_h_l_h:
+	call rf_debug_rx_gpio_high
+rf_debug_rx_gpio_l_h:
+	call rf_debug_rx_gpio_low
+	branch rf_debug_rx_gpio_high
+
+rf_debug_rx_gpio_l_h_l:
+rf_debug_shutdown_radio_line:
+	call rf_debug_rx_gpio_l_h
+rf_debug_rx_crc_line:
+	branch rf_debug_rx_gpio_low
+
+rf_debug_rx_sync_line:
+	branch rf_debug_rx_gpio_l_h
+
+rf_debug_rx_crc_fail_line:
+	call rf_debug_rx_gpio_l_h
+	branch rf_debug_rx_gpio_l_h_l
+
+rf_debug_rx_match_line:
+rf_debug_rx_crc_error_line:
+rf_debug_rx_sync_timeout_line:
+	branch rf_debug_rx_gpio_low
+
+
+rf_debug_tx_off_line:
+rf_debug_tx_gpio_low:
+	fetch 1,mem_rf_debug_tx_gpio
+	branch rf_debug_gpio_low
+
+rf_debug_tx_on_line:
+rf_debug_tx_gpio_high:
+	fetch 1,mem_rf_debug_tx_gpio
+	branch rf_debug_gpio_high
+
+rf_debug_tx_gpio_l_h_l:
+	call rf_debug_tx_gpio_low
+	call rf_debug_tx_gpio_high
+	branch rf_debug_tx_gpio_low
+
+	
Index: program/g24_protocol_stack/24g.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/g24_protocol_stack/24g.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/g24_protocol_stack/24g.prog	(working copy)
@@ -0,0 +1,569 @@
+
+
+g24_dispatch:
+	bpatchx patch33_0,mem_patch33
+	bmark1 mark_24g_rxmode,g24_receive_dispatch
+	rtnmark0 mark_24g
+	branch g24_transmit_dispatch
+
+
+/****************************g24 base transceiver start********************************/
+
+g24_prep:
+	bpatchx patch33_1,mem_patch33
+	disable enable_crc
+	disable enable_white
+	setarg 0x555555
+	iforce crc24_init
+	fetch 1,mem_24g_ch
+	branch le_prep_next
+
+g24_receive_packet:
+	bpatchx patch33_2,mem_patch33
+	fetch 1,mem_24g_rx_phy
+	call le_enable_phy_by_pdata
+	fetch 4,mem_24g_addr
+	iforce access
+	call set_sync_on
+	fetcht 1,mem_24g_ch
+	call le_rf_rx_enable
+g24_receive_rxon:
+	call g24_prep
+	bmark0 mark_ble_lr,g24_receive_nolr
+	pulse dewhiten_code_calc
+	nop 30
+	call g24_prep
+g24_receive_nolr:
+	disable user3
+	enable decode_fec0
+	enable is_rx
+	disable is_tx
+	enable swfine
+	fetch 2,mem_24g_rx_window
+	iforce stop_watch
+	correlate null,timeout
+	nbranch g24_sync_timeout,sync
+	call rf_debug_rx_sync_line
+	bmark1 mark_ble_lr,g24_receive_skip_fec1
+	fetch 1,mem_24g_disable_fec1
+	nbranch g24_receive_skip_fec1,blank
+	disable decode_fec0	
+	enable decode_fec1	//lr do not use fec1
+g24_receive_skip_fec1:
+	enable enable_white
+	enable enable_crc
+	call g24_receive_byte
+	store 1,mem_24g_get_syncword_crc8
+	fetcht 1,mem_24g_syncword_crc8
+	isub temp,null
+	nbranch g24_hec_error,zero
+g24_receive_payload:
+	bpatchx patch33_3,mem_patch33
+	disable user7
+	isolate1 mark_ble_lr,mark
+	call g24_lr_receive_pdu_len,true
+	branch g24_lr_len_error,user7
+	call g24_receive_byte
+	store 1,mem_24g_rxbuf	//device id
+	bmark1 mark_24g_rxmode,g24_receive_skip
+	fetch 1,mem_24g_rxbuf
+	fetcht 1,mem_24g_data_type
+	icompare bits_data,temp
+	nbranch g24_type_error,true
+g24_receive_skip:
+	call g24_receive_byte
+	isolate1 mark_ble_lr,mark
+	call g24_lr_receive_payload_len,true
+	istore 1,contw
+	rshift3 pdata,pdata
+	sub pdata,0x1f,null
+	nbranch g24_len_over_error,positive	//max payload: 32bytes
+	copy pdata,loopcnt
+	branch g24rx_nopayload,zero
+g24rx_loop:
+	call g24_receive_byte
+	istore 1,contw
+	loop g24rx_loop
+g24rx_nopayload:
+	bmark1 mark_24g_rxmode,g24_receive_skip_rssi
+	copy contw,rega
+	call g24_receive_byte
+	store 1,mem_rssi_hex_received	//receive rssi hex
+	copy rega,contw
+g24_receive_skip_rssi:
+	parse demod,bucket,24
+	rshift32 pdata,pdata
+	rshift16 pdata,pdata
+	istore 3,contw
+	fetch 1,mem_24g_disable_fec1
+	nbranch g24_receive_skip_disable_fec1,blank
+	disable decode_fec1
+g24_receive_skip_next:
+	isolate1 mark_24g_rxmode,mark
+	call save_rssi_dec,true
+	branch g24_crc_error,crc_failed
+	call rf_debug_rx_crc_line	//L
+	bpatchx patch33_4,mem_patch33
+	enable user3
+	call le_match_set_txfreq
+	rtnmark1 mark_24g_rxmode
+	fetch 1,mem_rssi_hex_received
+	fetcht 1,mem_rssi_hex_received_max_value
+	isub temp,null
+	call copy_temp2pdata,positive
+	branch rssi_signal
+
+g24_receive_skip_disable_fec1:
+	disable decode_fec0
+	branch g24_receive_skip_next
+	
+
+g24_lr_receive_pdu_len:
+	call g24_receive_byte
+	sub pdata,1,null
+	branch enable_user7,positive
+	increase -2,pdata	//minus hec and pdu length
+	bmark1 mark_24g_rxmode,g24_lr_receive_pdu_norssi
+	branch enable_user7,blank
+	increase -1,pdata	//minus rssi_hex length
+g24_lr_receive_pdu_norssi:
+	store 1,mem_temp	//payload length
+	rtn
+
+g24_lr_receive_payload_len:
+	and_into 0x07,pdata	//pdata[7:3]:length
+	fetcht 1,mem_temp	//payload length
+	lshift3 temp,temp
+	ior temp,pdata
+	rtn
+	
+g24_receive_byte:
+	parse demod,bucket,8
+	rshift3 pwindow,pdata
+	rtn
+
+g24_sync_timeout:
+	jam ERR_SYNC_TO,mem_24g_off_type
+	isolate1 mark_24g_rxmode,mark
+	call rssi_noise,true
+g24_end_of_packet:
+	bpatchx patch33_5,mem_patch33
+	call le_disable
+	disable encode_fec1
+	disable decode_fec1
+	branch end_of_packet
+
+g24_hec_error:
+	jam ERR_HEC,mem_24g_off_type
+	branch g24_end_of_packet
+
+g24_lr_len_error:
+	jam ERR_LR_LEN,mem_24g_off_type
+	branch g24_end_of_packet
+
+g24_type_error:
+	jam ERR_TYPE,mem_24g_off_type
+	branch g24_end_of_packet
+
+g24_len_over_error:
+	jam ERR_LEN_OVER,mem_24g_off_type
+	branch g24_end_of_packet
+
+g24_crc_error:
+	jam ERR_CRC,mem_24g_off_type
+	branch g24_end_of_packet
+
+g24_set_freq_tx:
+	call set_sync_on
+	fetcht 1,mem_24g_ch
+	branch set_freq_tx
+
+g24_transmit:
+	bpatchx patch33_6,mem_patch33
+	fetch 1,mem_24g_tx_phy
+	call le_enable_phy_by_pdata
+	fetch 4,mem_24g_addr
+	iforce access
+	call g24_prep
+	call g24_set_freq_tx
+	set1 TXGFSK,radio_ctrl
+	enable encode_fec0
+	enable is_tx
+	disable is_rx
+	call rf_debug_tx_on_line
+	disable lr_s2en
+	bmark1 mark_ble_lr,g24_transmit_lr
+	bmark1 mark_ble_2M,g24_transmit_2M
+	rshift16 access,pdata
+	rshift8 pdata,pdata
+	rshift4 pdata,pdata
+	inject mod,40
+g24_transmit_packet:
+	bpatchx patch33_7,mem_patch33
+	bmark1 mark_ble_lr,g24_transmit_nolr
+	fetch 1,mem_24g_disable_fec1
+	nbranch g24_transmit_nolr,blank
+	disable encode_fec0	
+	enable encode_fec1	////lr use encode_fec3
+g24_transmit_nolr:
+	enable enable_white
+	enable enable_crc
+	fetch 1,mem_24g_txlen
+	iforce loopcnt
+	arg mem_24g_txpayload,contr
+g24tr_loop:
+	ifetch 1,contr
+	inject mod,8
+	loop g24tr_loop
+	enable enable_parity
+	inject mod,24	//crc
+	disable enable_parity
+	bmark0 mark_ble_lr,g24_transmit_skip
+	disable enable_white
+	setarg 0
+	inject mod,3
+g24_transmit_skip:	
+	until null,tx_clear
+	nop 100
+	disable lr_s2en
+	disable encode_fec0
+	fetch 1,mem_24g_disable_fec1
+	nbranch g24_transmit_skip_disable_fec1,blank
+	disable encode_fec1
+g24_transmit_skip_disable_fec1:
+	disable encode_fec3
+	call set_sync_on
+	branch rf_debug_tx_off_line
+
+g24_transmit_lr:
+	arg 10,loopcnt
+g24_transmit_lr_preamble_loop:
+	setarg 0x3c
+	inject mod,8
+	loop g24_transmit_lr_preamble_loop
+	disable encode_fec0
+	enable encode_fec3
+	rshift16 access,pdata
+	rshift16 pdata,pdata
+	rshift4 pdata,pdata
+	inject mod,32
+	bmark1 mark_ble_lr_s8,g24_transmit_lr_s8
+g24_transmit_lr_s2:
+	setarg 1
+	inject mod,5
+	enable lr_s2en
+	branch g24_transmit_packet
+
+g24_transmit_lr_s8:
+	setarg 0
+	inject mod,5
+	branch g24_transmit_packet
+
+g24_transmit_2M:
+	fetch 1,mem_system_clk
+	rshift pdata,loopcnt
+g24_transmit_2M_dealy:
+	nop 2
+	loop g24_transmit_2M_dealy
+//	nop 36	//2M ǰ˷ͱ1M3us
+	rshift16 access,pdata
+	rshift8 pdata,pdata
+	rshift4 pdata,temp
+	copy temp,pdata
+	inject mod,8
+	copy temp,pdata
+	inject mod,40
+	branch g24_transmit_packet
+
+/****************************g24 base transceiver end********************************/
+
+
+
+/****************************g24 general func start********************************/
+
+g24_transmit_prep:
+	bpatchx patch34_0,mem_patch34
+	fetch 1,mem_24g_tx_phy
+	bbit1 BIT_LE_CODED_PHY,g24_lr_transmit_prep
+// total length
+	fetch 1,mem_24g_datalen
+	increase 3,pdata	//hec/type/control
+	store 1,mem_24g_txlen
+//hec
+	fetch 1,mem_24g_syncword_crc8
+	store 1,mem_24g_txpayload
+// data type
+	fetch 1,mem_24g_data_type
+	istore 1,contw
+//prepare 5bit payload length, 2bit PID, 1bit NO_ACK
+	fetch 1,mem_24g_datalen
+g24_transmit_prep_pdu:
+	lshift3 pdata,pdata
+	fetcht 1,mem_24g_pid
+	and temp,0x03,temp
+	lshift temp,temp
+	ior temp,pdata
+	fetcht 1,mem_24g_no_ack
+	iadd temp,pdata
+	istore 1,contw
+//prepare payload data
+	fetch 1,mem_24g_datalen
+	iforce loopcnt
+	arg mem_24g_txbuf,contr
+	call memcpy
+g24_transmit_prep_next:
+	bpatchx patch34_1,mem_patch34
+//rssi hex	
+	rtnmark0 mark_24g_rxmode
+	fetch 1,mem_rssi_hex
+	istore 1,contw
+	fetch 1,mem_24g_tx_phy
+	rtnbit1 BIT_LE_CODED_PHY
+	fetch 1,mem_24g_txlen
+	increase 1,pdata	//plus rssi_hex length
+	store 1,mem_24g_txlen
+	rtn
+	
+g24_lr_transmit_prep:
+// total length
+	fetch 1,mem_24g_datalen
+	increase 4,pdata	//hec/pdu/type/control
+	bmark0 mark_24g_rxmode,g24_lr_transmit_prep_skip
+	increase 1,pdata	//mem_rssi_hex
+g24_lr_transmit_prep_skip:
+	store 1,mem_24g_txlen
+//hec
+	fetch 1,mem_24g_syncword_crc8
+	store 1,mem_24g_txpayload
+// pdu length
+	fetch 1,mem_24g_txlen
+	increase -2,pdata	//minus hec and pdu length
+	istore 1,contw
+// data type
+	fetch 1,mem_24g_data_type
+	istore 1,contw
+	setarg 0
+	branch g24_transmit_prep_pdu
+
+g24_read_len_pid_crc:
+	bpatchx patch34_2,mem_patch34
+//read control
+	fetch 1,mem_24g_rxbuf+1
+	rshift3 pdata,pdata
+	store 1,mem_24g_rxdata_length
+//get crc
+	increase 1,pdata
+	arg mem_24g_rxbuf+1,contr
+	iadd contr,contr
+	ifetch 3,contr
+	store 3,mem_24g_sta_crc
+//read pid
+	fetch 1,mem_24g_rxbuf+1
+	rshift pdata,pdata
+	and pdata,0x03,pdata
+	store 1,mem_24g_sta_pid
+	rtn
+
+	
+g24_ch:
+	bpatchx patch34_3,mem_patch34
+	fetcht 1,mem_24g_current_ch_number
+	call g24_ch_map_size
+	storet 1,mem_24g_current_ch_number
+	rtn
+
+g24_ch_map_size:
+	bpatchx patch34_4,mem_patch34
+	call g24_ch_calc
+	increase 1,temp
+	and_into 3,temp //map size =4
+	rtn
+	
+g24_ch_calc:
+	bpatchx patch34_5,mem_patch34
+	fetch 1,mem_24g_addr	
+	and_into 0x03,pdata
+	mul32 pdata,4,rega			//24addr low bit0 bit1 ,00-map1,01-map2,10-map3,11-map4
+	setarg mem_24g_ch_map1
+	iadd rega,pdata
+	iadd temp,contr
+	ifetch 1,contr
+	store 1,mem_24g_ch
+	rtn
+
+
+g24_update_addr_and_synccrc8:
+	store 4,mem_24g_addr
+//output: 1BYTE crc8
+	bpatchx patch34_6,mem_patch34
+g24_syncword_crc8:
+	arg 0,rega
+	arg 4,loopcnt
+	arg mem_24g_addr,contr
+g24_syncword_crc8_loop:
+	ifetch 1,contr
+	iadd rega,rega
+	loop g24_syncword_crc8_loop
+	copy rega,pdata
+	store 2,mem_24g_syncword
+	fetch 1,mem_24g_syncword
+	fetcht 1,mem_24g_syncword+1
+	iadd temp,pdata
+	store 1,mem_24g_syncword_crc8
+	rtn
+
+
+g24_timer_check:
+	bpatchx patch34_7,mem_patch34
+	call disable_user
+	fetcht 4,mem_24g_tx_btclk
+	copy clkn_bt,pdata
+	isub temp,null
+	ncall g24_timer_timeout,positive
+	copy pdata,regb
+	fetch 4,mem_24g_tx_btclk
+	fetcht 1,mem_24g_interval
+	iadd temp,temp
+	copy regb,pdata
+	isub temp,null
+	nrtn positive
+	set0 28,pdata
+	store 4,mem_24g_tx_btclk
+	branch enable_user
+	
+g24_timer_timeout:
+	rtn zero
+	set1 28,pdata
+	rtn
+	
+g24_timer_init:
+	setarg 0
+	store 4,mem_24g_tx_btclk
+	rtn
+
+
+
+//mem_24g_ch_map1:00 13 2c 42
+//mem_24g_ch_map2:06 15 36 48
+//mem_24g_ch_map3:0f 1a 3a 4c
+//mem_24g_ch_map4:11 23 31 4d
+g24_chmap_param_init:
+	bpatchx patch35_0,mem_patch35
+	setsect 0,0x1300
+	setsect 1,0x1908b
+	setsect 2,0x36150
+	setsect 3,0x3d20
+	store 9,mem_24g_ch_map1
+	setsect 0,0x3a1a
+	setsect 1,0xc453
+	setsect 2,0xd312
+	setsect 3,0x1
+	istore 7,contw
+	fetch 1,mem_24g_ch_map_update
+	rtn blank
+	arg mem_24g_ch_update_map1,contr
+	arg mem_24g_ch_map1,contw
+	branch memcpy16
+
+
+
+//mem_24g_ch_update_map1:00 1e 00 4e
+//mem_24g_ch_update_map2:03 23 03 42
+//mem_24g_ch_update_map3:06 25 06 4c
+//mem_24g_ch_update_map4:09 27 09 3c
+g24_chamap_param_update:
+	bpatchx patch35_1,mem_patch35
+	setarg 0x4e001e
+	store 3,mem_24g_ch_update_map1+1
+	setarg 0x032303
+	istore 3,contw
+	setarg 0x250642
+	istore 3,contw
+	setarg 0x094c06
+	istore 3,contw
+	setarg 0x3c0927
+	istore 3,contw
+	jam 1,mem_24g_ch_map_update
+	rtn
+
+
+g24_rx_window_init:
+	bpatchx patch35_2,mem_patch35
+	arg 0x6978,temp
+	bmark1 mark_24g_rxmode,g24_rx_window_store
+	arg 0x12c0,temp
+	fetch 1,mem_24g_rx_phy
+	bbit0 2,g24_rx_window_store	//uncoded phy
+	arg 0x2ee0,temp
+g24_rx_window_store:	
+	storet 2,mem_24g_rx_window
+	rtn
+
+g24_enable_1M:
+	jam 0x01,mem_24g_rx_phy
+	jam 0x01,mem_24g_tx_phy
+	rtn
+
+g24_enable_2M:
+	jam 0x02,mem_24g_rx_phy
+	jam 0x02,mem_24g_tx_phy
+	rtn
+	
+//g24_enable_coded_s2:
+//	jam 0x04,mem_24g_rx_phy
+//	jam 0x04,mem_24g_tx_phy
+//	rtn
+
+//g24_enable_coded_s8:
+//	jam 0x84,mem_24g_rx_phy
+//	jam 0x84,mem_24g_tx_phy
+//	rtn
+
+
+/****************************g24 general func end********************************/
+
+
+
+/****************************g24 sim start********************************/
+/*
+g24_sim_rx:
+	set1 mark_24g_rxmode,mark
+	jam 1,mem_24g_rx_phy	//0x01:1M/0x02:2M/0x04:S2/0x84:S8
+	fetch 1,mem_24g_rx_phy
+	call le_enable_phy_by_pdata
+	jam 0,mem_24g_ch
+	setarg 0x123456
+	store 3,mem_24g_addr
+	istore 1,contw
+	call g24_syncword_crc8
+	setarg 0x3000
+	store 2,mem_24g_rx_window
+g24_sim_rx_loop:
+	call g24_receive_packet
+	call g24_read_len_pid_crc
+	call g24_end_of_packet
+	branch g24_sim_rx_loop
+
+g24_sim_tx:
+	jam 1,mem_24g_tx_phy
+	fetch 1,mem_24g_tx_phy
+	call le_enable_phy_by_pdata
+	jam 0,mem_24g_ch
+	setarg 0x123456
+	store 3,mem_24g_addr
+	istore 1,contw
+	call g24_syncword_crc8
+	jam 1,mem_24g_datalen
+	jam 1,mem_24g_txbuf
+	jam 0x88,mem_rssi_hex
+	call g24_transmit_prep
+g24_sim_tx_loop:
+	call g24_transmit
+	call g24_end_of_packet
+	branch g24_sim_tx_loop
+
+*/
+
+/****************************g24 sim end********************************/
+
+	
Index: program/g24_protocol_stack/24g_pair.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/g24_protocol_stack/24g_pair.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/g24_protocol_stack/24g_pair.prog	(working copy)
@@ -0,0 +1,419 @@
+
+
+g24_pair_param_init:
+	bpatchx patch35_3,mem_patch35
+	jam 0x4e,mem_24g_pair_ch
+	setarg 0x101520
+	store 3,mem_24g_pair_addr
+	setarg 0x05
+	branch  istore_1_contw_rtn
+
+
+
+
+/****************************g24 pair transmitter start********************************/
+
+g24_pair_timeout_timer:
+	arg mem_24g_pair_timeout,regc
+	arg g24_stop_24g_mode,regb
+	branch timer_single_step_2B
+
+g24_pair_start:
+	set1 mark_24g,mark
+	fetch 1,mem_24g_conn_sm
+	set0 STATE_24G_RECONN,pdata
+	set1 STATE_24G_PAIR,pdata
+	store 1,mem_24g_conn_sm
+	setarg 0
+	store 2,mem_24g_reconn_timeout
+	fetch 2,mem_24g_pair_timeout_init
+	store 2,mem_24g_pair_timeout
+	jam 0,mem_24g_pair_no_ack
+	call g24_pair_sm_reinit
+g24_pair_init_param:
+	jam 0,mem_24g_pid
+	fetch 1,mem_24g_pair_ch
+	store 1,mem_24g_ch
+	fetch 1,mem_24g_pair_tx_power
+	store 1,mem_tx_power
+	fetch 4,mem_24g_pair_addr
+	branch g24_update_addr_and_synccrc8
+
+
+g24_pair_dispatch:
+	bpatchx patch35_4,mem_patch35
+	jam DEFAULT_24G_DEVICE,mem_24g_reconn_type
+	fetch 2,mem_24g_pair_count
+	increase 1,pdata
+	store 2,mem_24g_pair_count
+	fetch 1,mem_24g_pair_count
+	and pdata,0xff,pdata
+	nrtn blank
+	fetch 1,mem_24g_pair_sm
+	beq STATE_24G_PAIRING_SUCCESS,g24_pair_exit
+	beq STATE_24G_PAIRING_1,g24_pair_sm_1
+	beq STATE_24G_PAIRING_2,g24_pair_sm_2
+	beq STATE_24G_PAIRING_3,g24_pair_sm_3
+	beq STATE_24G_PAIRING_4,g24_pair_sm_4
+	rtn
+
+g24_pair_sm_1:
+	jam DATATYPE_ATTEMP,mem_24g_txbuf
+	branch g24_pair_sm_prep
+
+g24_pair_sm_2:
+	fetch 1,mem_24g_pair_switch
+	branch g24_pair_sm_2_skip,blank
+	fetch 4,mem_24g_device_addr
+	call g24_update_addr_and_synccrc8	//use transmitter addr
+g24_pair_sm_2_skip:
+	jam DATATYPE_BIND,mem_24g_txbuf	
+	branch g24_pair_sm_prep
+
+g24_pair_sm_3:
+	jam DATATYPE_CONFIG,mem_24g_txbuf	
+	fetch 1,mem_24g_pair_switch
+	branch g24_pair_sm_prep,blank
+	fetch 4,mem_24g_receiver_addr		//prep receiver addr
+	store 4,mem_24g_txbuf+2
+	branch g24_pair_sm_common
+
+g24_pair_sm_4:
+	jam DATATYPE_OK,mem_24g_txbuf
+g24_pair_sm_prep:
+	fetch 4,mem_24g_device_addr
+	store 4,mem_24g_txbuf+2
+g24_pair_sm_common:
+	fetch 1,mem_24g_data_type
+	and_into bits_data,pdata
+	store 1,mem_24g_txbuf+1
+	jam 0,mem_24g_txbuf+6
+	jam 7,mem_24g_datalen
+	call g24_transmit_prep
+	call g24_transmit_receive_ack
+	nrtn sync
+	nrtn user3
+	call g24_txbuf_clear
+	call g24_ackpayload_parse
+g24_pair_sm_common_next:
+	bpatchx patch35_5,mem_patch35
+	fetch 1,mem_24g_pair_sm
+	rtneq STATE_24G_PAIRING_SUCCESS
+	beq STATE_24G_PAIRING_1,g24_pair_sm_1_waiting_ack
+	beq STATE_24G_PAIRING_2,g24_pair_sm_2_waiting_ack
+	beq STATE_24G_PAIRING_3,g24_pair_sm_3_waiting_ack
+	beq STATE_24G_PAIRING_4,g24_pair_sm_4_waiting_ack
+	rtn
+
+g24_pair_sm_reinit:	
+	jam STATE_24G_PAIRING_2,mem_24g_pair_sm
+	fetch 1,mem_24g_pair_switch
+	rtn blank
+	jam STATE_24G_PAIRING_1,mem_24g_pair_sm
+	rtn
+
+g24_pair_sm_1_waiting_ack:
+	jam STATE_24G_PAIRING_2,mem_24g_pair_sm
+	branch g24_transmit_abandon
+	
+g24_pair_sm_2_waiting_ack:
+	fetch 1,mem_24g_pair_switch
+	branch g24_pair_sm_2_waiting_ack_skip,blank
+	fetch 4,mem_24g_rxpayload+2
+	store 4,mem_24g_receiver_addr
+g24_pair_sm_2_waiting_ack_skip:	
+	jam STATE_24G_PAIRING_3,mem_24g_pair_sm
+	branch g24_transmit_abandon
+
+g24_pair_sm_3_waiting_ack:
+	fetch 1,mem_24g_pair_switch
+	branch g24_pair_sm_3_waiting_ack_skip,blank
+	fetch 4,mem_24g_rxpayload+2
+	fetcht 4,mem_24g_device_addr
+	isub temp,null
+	nrtn zero
+g24_pair_sm_3_waiting_ack_skip:	
+	jam STATE_24G_PAIRING_4,mem_24g_pair_sm
+	branch g24_transmit_abandon	
+	
+g24_pair_sm_4_waiting_ack:
+	fetch 1,mem_24g_pair_switch
+	branch g24_pair_sm_4_waiting_ack_skip,blank
+	fetch 4,mem_24g_rxpayload+2
+	fetcht 4,mem_24g_receiver_addr
+	isub temp,null
+	nrtn zero
+g24_pair_sm_4_waiting_ack_skip:	
+	jam STATE_24G_PAIRING_SUCCESS,mem_24g_pair_sm
+	jam BT_EVT_24G_PAIRING_COMPLETE,mem_fifo_temp
+	call ui_ipc_send_event
+	setarg 0
+	store 2,mem_24g_pair_timeout
+	fetch 4,mem_24g_rxpayload+2
+	call g24_update_addr_and_synccrc8
+g24_pair_exit:
+	fetch 1,mem_24g_conn_sm
+	set0 STATE_24G_PAIR,pdata
+	store 1,mem_24g_conn_sm
+	branch g24_transmit_abandon
+
+
+
+
+/****************************g24 pair transmitter end********************************/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/****************************g24 pair receiver start********************************/
+
+
+g24_bind_mode_enable:
+	jam DONGLE_BIND,mem_24g_work_mode
+	jam CLEAR_INIT,mem_24g_mode_init
+	rtn
+
+g24_bind_init:
+	fetch 1,mem_24g_mode_init
+	rtnbit1 DONGLE_BIND
+	set1 DONGLE_BIND,pdata
+	store 1,mem_24g_mode_init
+	setarg 0
+	store 3,mem_24g_device1_bind_step
+	store 1,mem_24g_device1_bind_disable
+	store 1,mem_24g_device2_bind_disable
+	store 4,mem_24g_transmitter_addr
+	jam 1,mem_24g_ackpayload_enable
+	branch g24_pair_init_param
+
+
+g24_bind_ackpayload_prep:
+	jam 0x08,mem_24g_datalen
+	arg mem_24g_bind_payload,contr
+	arg mem_24g_txbuf,contw
+	branch memcpy8
+
+
+g24_bind_data_process:
+	bpatchx patch35_6,mem_patch35
+	call g24_rx_interrupt_clear
+	call g24_receive_packet
+	nbranch g24_rx_interrupt_clear,user3
+	call g24_bind_data_parse
+	call g24_transmit_ack
+	call g24_bind_device_status_check
+	call dongle_kb_bind_soft_reset
+	fetch 1,mem_24g_pair_switch
+	rtn blank
+	fetch 4,mem_24g_transmitter_addr
+	rtn blank
+	branch g24_update_addr_and_synccrc8
+
+g24_bind_data_error:
+	call g24_rx_interrupt_clear
+	branch g24_end_of_packet
+
+g24_bind_data_parse:
+	jam BIND_MODE_CONTINUE,mem_24g_bind_mode_continue	//about 400ms
+	arg mem_24g_rxbuf,contr
+	arg mem_24g_rxdata_temp,contw
+	call memcpy8
+	bpatchx patch35_7,mem_patch35
+	fetch 1,mem_24g_rxdata_temp+2
+	beq DATATYPE_BIND,g24_bind_first_step	//bind step 1
+	beq DATATYPE_CONFIG,g24_bind_second_step
+	beq DATATYPE_OK,g24_bind_third_step
+	beq DATATYPE_ATTEMP,g24_data_attemp
+	rtn
+
+
+g24_bind_first_step:
+	fetch 1,mem_24g_rxdata_temp+3
+	beq DATATYPE_DEVICE1,g24_bind_first_step_device1
+	beq DATATYPE_DEVICE2,g24_bind_first_step_device2
+	rtn
+
+g24_bind_first_step_device1:
+	fetch 1,mem_24g_device1_bind_disable
+	nrtn blank
+	jam 1,mem_24g_device1_bind_step
+g24_bind_dvc1_payload_cfg:
+	jam DATATYPE_DEVICE1,mem_24g_bind_payload
+g24_bind_payload_cfg:
+	jam 0x80,mem_24g_bind_payload+1
+	fetch 6,mem_24g_lap
+	store 6,mem_24g_bind_payload+2
+	rtn
+
+g24_bind_first_step_device2:
+	fetch 1,mem_24g_device2_bind_disable
+	nrtn blank
+	jam 1,mem_24g_device2_bind_step
+g24_bind_dvc2_payload_cfg:
+	jam DATATYPE_DEVICE2,mem_24g_bind_payload
+	branch g24_bind_payload_cfg
+
+
+g24_bind_second_step:
+	fetch 1,mem_24g_pair_switch
+	branch g24_bind_second_step_skip,blank
+	fetch 4,mem_24g_rxdata_temp+4
+	fetcht 4,mem_24g_lap
+	isub temp,null
+	nrtn zero
+g24_bind_second_step_skip:	
+	fetch 1,mem_24g_rxdata_temp+3
+	beq DATATYPE_DEVICE1,g24_bind_second_step_device1
+	beq DATATYPE_DEVICE2,g24_bind_second_step_device2
+	rtn
+
+g24_bind_second_step_device1:
+	fetch 1,mem_24g_device1_bind_disable
+	nrtn blank
+	fetch 1,mem_24g_device1_bind_step
+	beq 1,g24_bind_dvc1_step_set2
+	rtn
+g24_bind_dvc1_step_set2:
+	jam 2,mem_24g_device1_bind_step
+	fetch 1,mem_24g_pair_switch
+	branch g24_bind_dvc1_payload_cfg,blank
+g24_bind_dvc1_payload_cfg_transmitter_addr:
+	jam DATATYPE_DEVICE1,mem_24g_bind_payload
+g24_bind_payload_cfg_transmitter_addr:
+	jam 0x80,mem_24g_bind_payload+1
+	fetch 4,mem_24g_transmitter_addr
+	store 4,mem_24g_bind_payload+2
+	branch enable_user
+
+g24_bind_second_step_device2:
+	fetch 1,mem_24g_device2_bind_disable
+	nrtn blank
+	fetch 1,mem_24g_device2_bind_step
+	beq 1,g24_bind_dvc2_step_set2
+	rtn
+g24_bind_dvc2_step_set2:
+	jam 2,mem_24g_device2_bind_step
+	fetch 1,mem_24g_pair_switch
+	branch g24_bind_dvc2_payload_cfg,blank	
+	jam DATATYPE_DEVICE2,mem_24g_bind_payload
+	branch g24_bind_payload_cfg_transmitter_addr
+
+
+g24_bind_third_step:
+	fetch 1,mem_24g_pair_switch
+	branch g24_bind_third_step_skip,blank
+	fetch 4,mem_24g_rxdata_temp+4
+	fetcht 4,mem_24g_transmitter_addr
+	isub temp,null
+	nrtn zero
+g24_bind_third_step_skip:
+	fetch 1,mem_24g_rxdata_temp+3
+	beq DATATYPE_DEVICE1,g24_bind_third_step_device1
+	beq DATATYPE_DEVICE2,g24_bind_third_step_device2
+	rtn
+
+g24_bind_third_step_device1:
+	fetch 1,mem_24g_device1_bind_disable
+	nrtn blank
+	fetch 1,mem_24g_device1_bind_step
+	beq 2,g24_bind_dvc1_step_success
+	rtn
+g24_bind_dvc1_step_success:
+	jam 1,mem_24g_device1_bind_disable
+	//call g24_binding_dvc1_living	//works on auto pair only
+	call g24_bind_dvc1_payload_cfg
+	fetch 1,mem_24g_bind_device_status
+	or_into 0x01,pdata
+	store 1,mem_24g_bind_device_status
+g24_bind_exit:
+	setarg 0
+	store 2,mem_24g_device1_bind_step
+	rtn
+	
+g24_bind_third_step_device2:
+	fetch 1,mem_24g_device2_bind_disable
+	nrtn blank
+	fetch 1,mem_24g_device2_bind_step
+	bne 0,g24_bind_dvc2_step_success
+	rtn
+g24_bind_dvc2_step_success:
+	jam 1,mem_24g_device2_bind_disable
+	//call g24_binding_dvc2_living	//works on auto pair only
+	call g24_bind_dvc2_payload_cfg
+	fetch 1,mem_24g_bind_device_status
+	or_into 0x02,pdata
+	store 1,mem_24g_bind_device_status
+	call g24_bind_exit
+	branch dongle_g24_store_dvc2_bind_flag
+
+g24_binding_device_check:	//works on auto pair
+	fetch 1,mem_24g_rxbuf+3
+	beq DATATYPE_DEVICE1,g24_binding_dvc1_status	//bit0
+	beq DATATYPE_DEVICE2,g24_binding_dvc2_status	//bit1
+	rtn
+g24_binding_dvc1_status:
+	fetch 1,mem_24g_bind_device_living
+	rtnbit0 0
+disable_user3:
+	disable user3
+	rtn 
+g24_binding_dvc2_status:
+	fetch 1,mem_24g_bind_device_living
+	rtnbit0 1
+	branch disable_user3
+
+g24_binding_dvc1_living:
+	fetch 1,mem_24g_pair_mode
+	nrtn blank
+	fetch 1,mem_24g_bind_device_living
+	or_into 0x01,pdata
+	store 1,mem_24g_bind_device_living
+	rtn
+
+g24_binding_dvc2_living:
+	fetch 1,mem_24g_pair_mode
+	nrtn blank
+	fetch 1,mem_24g_bind_device_living
+	or_into 0x02,pdata
+	store 1,mem_24g_bind_device_living
+	rtn
+
+
+g24_bind_device_status_check:
+	fetch 1,mem_24g_bind_device_status
+	rtn blank
+g24_bind_device_status:
+	fetch 1,mem_24g_rxdata_temp+3
+	beq DATATYPE_DEVICE1,g24_binding_dvc1_living
+	beq DATATYPE_DEVICE2,g24_binding_dvc2_living
+	rtn
+
+
+
+/****************************g24 pair receiver end********************************/
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: program/g24_protocol_stack/24g_receiver.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/g24_protocol_stack/24g_receiver.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/g24_protocol_stack/24g_receiver.prog	(working copy)
@@ -0,0 +1,568 @@
+
+g24_receive_init:
+	set1 mark_24g_rxmode,mark
+	fetch 1,mem_tx_power
+	store 1,mem_tx_power_temp
+	branch rssi_receiver_buff_init
+
+g24_receive_dispatch:
+	fetch 2,mem_cb_24g_receive_process
+	branch callback_func
+
+g24_ackpayload_prep:
+	bpatchx patch36_0,mem_patch36
+	jam 0,mem_24g_datalen
+	fetch 1,mem_24g_ackpayload_enable
+	rtn blank
+	fetch 2,mem_cb_24g_ackpayload
+	branch callback_func
+
+
+g24_receive_packet_start:
+	call g24_receive_transmit_ack
+	nbranch g24_rx_interrupt_clear,user3
+g24_receive_packet_parse:
+	call g24_receive_packet_parse_pid_crc
+	nbranch g24_rx_interrupt_clear,user
+	fetch 1,mem_24g_rxdata_length
+	branch g24_rx_interrupt_clear,blank
+	increase 2,pdata
+	iforce loopcnt
+	arg mem_24g_rxbuf,contr
+	arg mem_24g_rxdata_temp,contw
+	call memcpy
+	jam 0,mem_24g_mode_switch
+	fetch 1,mem_24g_pair_mode
+	call g24_enable_nodata_timer,blank
+	bpatchx patch36_1,mem_patch36
+	fetch 1,mem_24g_rxdata_temp+2
+	beq DATATYPE_DEVICE1,g24_data_device1	//mouse
+	beq DATATYPE_DEVICE2,g24_data_device2	//keyboard
+	beq DATATYPE_ATTEMP,g24_data_receive_attemp	//reconn packet
+g24_rx_interrupt_clear:
+	bpatchx patch36_2,mem_patch36
+	arg mem_24g_rxbuf,contw
+	arg 66,loopcnt
+	branch clear_mem
+
+g24_data_receive_attemp:
+	call g24_bind_device_status		//works on auto pair only
+	branch g24_data_attemp
+
+g24_data_device1:
+	call g24_binding_dvc1_living	//works on auto pair only
+	call g24_ch_timer_reinit
+	fetch 1,mem_24g_abort_packet
+	fetcht 1,mem_24g_rxdata_temp
+	isolate1 bit_abort,temp
+	setflag true,0,pdata
+	store 1,mem_24g_abort_packet
+	beq 1,g24_data_attemp_device1_abort
+	fetch 1,mem_24g_hop_packet
+	fetcht 1,mem_24g_rxdata_temp
+	isolate1 bit_hop,temp
+	setflag true,0,pdata
+	store 1,mem_24g_hop_packet
+	fetch 2,mem_cb_24g_data_device1
+	branch callback_func
+
+g24_data_device2:
+	call g24_binding_dvc2_living	//works on auto pair only
+	fetcht 1,mem_24g_rxdata_temp
+	isolate1 bit_abort,temp
+	branch g24_data_attemp_device2_abort,true
+	fetch 2,mem_cb_24g_data_device2
+	branch callback_func
+
+g24_data_attemp_device1_abort:
+	fetch 1,mem_24g_device1_bind_disable
+	nrtn blank
+	jam 1,mem_24g_device1_bind_disable
+	fetch 4,mem_24g_rxdata_temp+10
+	branch g24_store_device1_addr
+g24_data_attemp_device2_abort:
+	fetch 4,mem_24g_rxdata_temp+10
+	branch g24_store_device2_addr	
+
+
+g24_receive_packet_parse_pid_crc:
+	call disable_user
+	fetch 1,mem_24g_sta_pid
+	fetcht 1,mem_24g_last_pid
+	isub temp,null
+	ncall enable_user,zero
+	fetch 1,mem_24g_sta_pid
+	store 1,mem_24g_last_pid
+	fetch 3,mem_24g_sta_crc
+	fetcht 3,mem_24g_last_crc
+	isub temp,null
+	ncall enable_user,zero
+	fetch 3,mem_24g_sta_crc
+	store 3,mem_24g_last_crc
+	rtn
+
+g24_receive_transmit_ack:
+	call g24_rx_interrupt_clear
+	call g24_receive_packet
+	nrtn user3
+g24_transmit_ack:
+//data type
+	fetch 1,mem_24g_rxbuf
+	store 1,mem_24g_data_type
+//read len pid crc
+	call g24_read_len_pid_crc
+//read ack
+	fetch 1,mem_24g_rxbuf+1
+	isolate1 bit_ack_24g,pdata
+	branch g24tx_no_ack,true
+g24tx_with_ack:
+	call g24_ackpayload_prep
+	call g24_transmit_prep
+	call g24_transmit
+g24tx_no_ack:
+	branch g24_end_of_packet
+
+
+g24_enable_nodata_timer:
+	jam 1,mem_24g_nodata_timer_enable
+g24_enable_nodata_timer_init:
+	setarg TIMER_NODATA_DELAY
+	arg G24_TIMER_NODATA,queue
+	branch timer_init
+
+
+
+/****************************g24 receiver mode switch start********************************/
+
+g24_mode_switch_init:
+	bpatchx patch36_3,mem_patch36
+	jam 1,mem_24g_mode_switch
+	jam 0,mem_24g_time_slice
+	jam 0xff,mem_24g_interval
+	branch g24_timer_init
+	
+g24_mode_switch_bind_work:
+	bpatchx patch36_4,mem_patch36
+	fetch 1,mem_24g_mode_switch
+	rtn blank
+	call g24_timer_check
+	nrtn user	//80ms
+	call g24_bind_mode_continue
+	fetch 1,mem_24g_time_slice
+	increase 1,pdata
+	and_into 1,pdata
+	store 1,mem_24g_time_slice
+	beq 0,g24_work_mode_switch
+	beq 1,g24_bind_mode_switch
+	rtn
+
+g24_bind_mode_continue:
+	fetch 1,mem_24g_bind_mode_continue
+	rtn blank
+	increase -1,pdata
+	store 1,mem_24g_bind_mode_continue
+	rtn
+
+g24_work_mode_switch:
+	fetch 1,mem_24g_bind_mode_continue
+	nrtn blank
+	branch g24_switch_work_mode
+
+g24_bind_mode_switch:
+	fetch 1,mem_24g_bind_mode_continue
+	nrtn blank
+	branch g24_bind_mode_enable
+
+
+g24_mode_B_S_switch_init:	//bind and search
+	fetch 1,mem_24g_B_S_mode_switch_disable
+	nrtn blank
+	fetch 1,mem_24g_mode_B_S_switch_exit
+	call g24_mode_B_S_switch_start,blank
+	fetch 1,mem_24g_mode_B_S_switch_init
+	rtnbit1 0
+	set1 0,pdata
+	store 1,mem_24g_mode_B_S_switch_init
+	jam 1,mem_24g_mode_B_S_switch
+	jam 0,mem_24g_B_S_time_slice
+	setarg 0
+	store 2,mem_24g_mode_B_S_switch_cnt
+	jam 0x60,mem_24g_interval	//30ms
+	branch g24_timer_init
+
+g24_mode_switch_bind_search:
+	bpatchx patch36_5,mem_patch36
+	fetch 1,mem_24g_work_mode
+	rtneq DONGLE_WORK
+	fetch 1,mem_24g_B_S_mode_switch_disable
+	nrtn blank
+	fetch 1,mem_24g_mode_B_S_switch_exit
+	nrtn blank
+	fetch 1,mem_24g_mode_B_S_switch
+	rtn blank
+	fetch 1,mem_24g_bind_device_living
+	compare 3,pdata,3
+	branch g24_mode_B_S_switch_exit,true
+	call g24_timer_check
+	nrtn user
+	fetch 2,mem_24g_mode_B_S_switch_cnt
+	increase 1,pdata
+	store 2,mem_24g_mode_B_S_switch_cnt
+	arg 0x7d0,temp	//1min
+	isub temp,null
+	branch g24_mode_B_S_switch_exit,positive
+	fetch 1,mem_24g_B_S_time_slice
+	increase 1,pdata
+	and_into 1,pdata
+	store 1,mem_24g_B_S_time_slice
+	beq 0,g24_search_mode_enable
+	beq 1,g24_bind_mode_enable
+	rtn
+
+g24_mode_switch_search:
+	fetch 1,mem_24g_bind_mode_continue
+	nbranch g24_bind_mode_enable,blank
+	branch g24_search_mode_enable
+
+g24_mode_B_S_switch_exit:
+	jam 1,mem_24g_mode_B_S_switch_exit
+	branch g24_search_mode_enable
+
+g24_mode_B_S_switch_stop:
+	jam 0,mem_24g_mode_B_S_switch
+	rtn
+g24_mode_B_S_switch_start:
+	jam 1,mem_24g_mode_B_S_switch
+	rtn
+
+
+
+/****************************g24 receiver mode switch end********************************/
+
+
+
+
+/****************************g24 receiver work mode start********************************/
+
+g24_work_init:
+	bpatchx patch36_6,mem_patch36
+	fetch 1,mem_24g_mode_init
+	rtnbit1 DONGLE_WORK
+	set1 DONGLE_WORK,pdata
+	store 1,mem_24g_mode_init
+	fetch 1,mem_tx_power_temp
+	store 1,mem_tx_power
+	jam 0,mem_24g_ackpayload_enable
+	jam 0,mem_usb_tx_enable
+	jam 1,mem_24g_abort_packet
+	jam 0,mem_24g_pid
+	fetch 4,mem_24g_lap
+	call g24_update_addr_and_synccrc8
+	call g24_ch
+	branch g24_rx_interrupt_clear
+
+
+g24_switch_work_mode:
+	jam 0,mem_24g_ackpayload_enable
+g24_work_mode_enable:
+	jam DONGLE_WORK,mem_24g_work_mode
+	jam CLEAR_INIT,mem_24g_mode_init	
+	rtn
+
+
+g24_work_mode_start:
+	fetch 1,mem_24g_work_mode
+	rtnne DONGLE_WORK
+	call g24_work_init
+	call g24_ch_process
+	branch g24_receive_packet_start
+
+
+
+/****************************g24 receiver work mode end********************************/
+
+
+
+
+
+
+/****************************g24 receiver bind mode start********************************/
+
+g24_bind_mode_auto:
+	bpatchx patch36_7,mem_patch36
+	fetch 1,mem_24g_work_mode
+	rtnne DONGLE_BIND
+	call g24_bind_init
+	call g24_bind_data_process
+	fetch 1,mem_24g_pair_mode
+	nrtn blank
+	fetch 1,mem_24g_bind_device_status
+	rtn blank
+	jam 0,mem_24g_mode_switch
+	call g24_switch_work_mode
+	call g24_enable_nodata_timer
+	branch g24_timer_init
+
+
+/****************************g24 receiver bind mode end********************************/
+
+
+
+
+
+
+/****************************g24 receiver search mode start********************************/
+
+g24_search_mode_init:
+	fetch 1,mem_24g_mode_init
+	rtnbit1 DONGLE_SEARCH
+	set1 DONGLE_SEARCH,pdata
+	store 1,mem_24g_mode_init
+	fetch 1,mem_tx_power_temp	//reinit tx power when "search-pair-switch"  is enable
+	store 1,mem_tx_power
+
+	jam 0,mem_24g_time_slice
+	jam 1,mem_24g_ackpayload_enable
+	setarg 0
+	store 3,mem_rssi_noise_self_index
+	store 7,mem_24g_self_config_ch_once
+	call g24_receiver_addr_check
+	nrtn zero
+	fetch 1,mem_24g_current_ch_number
+	store 1,mem_24g_self_ch_number
+	fetch 1,mem_24g_ch
+	store 1,mem_24g_self_last_ch
+	rtn
+
+
+g24_search_mode_auto:
+	bpatchx patch37_0,mem_patch37
+	fetch 1,mem_24g_work_mode
+	rtnne DONGLE_SEARCH
+	call g24_search_mode_init
+	call g24_auto_addr_ch_search
+	call g24_receive_transmit_ack
+	nbranch g24_rx_interrupt_clear,user3
+	//dongle addr,then parse rxdata
+	call g24_receiver_addr_check
+	call g24_receive_packet_parse,zero
+
+	fetch 1,mem_24g_abort_packet
+	call g24_mode_B_S_switch_stop,blank	//works on auto pair only
+	
+	//receive data,then go to paired
+	jam DONGLE_WORK,mem_24g_work_mode
+	fetch 1,mem_24g_mode_init
+	set1 DONGLE_WORK,pdata
+	store 1,mem_24g_mode_init
+
+	fetch 1,mem_24g_ackpayload_enable
+	sub pdata,2,null
+	ncall g24_ackpayload_disable,zero
+
+	call g24_rx_interrupt_clear
+	call g24_enable_nodata_timer
+	call g24_receiver_addr_check
+	branch g24_self_ch_num_reinit,zero
+	fetch 4,mem_24g_addr
+	fetcht 4,mem_24g_device2_addr
+	isub temp,null
+	branch g24_device2_ch_num_reinit,zero		
+	fetch 4,mem_24g_addr
+	fetcht 4,mem_24g_device1_addr
+	isub temp,null
+	branch g24_device1_ch_num_reinit,zero
+	rtn
+
+
+g24_self_ch_num_reinit:
+	fetch 1,mem_24g_self_ch_number
+g24_current_ch_num_reinit:
+	store 1,mem_24g_current_ch_number
+	rtn
+
+g24_device2_ch_num_reinit:
+	fetch 1,mem_24g_device2_ch_number
+	branch g24_current_ch_num_reinit
+
+g24_device1_ch_num_reinit:
+	fetch 1,mem_24g_device1_ch_number
+	branch g24_current_ch_num_reinit
+
+
+g24_auto_addr_ch_search:
+	bpatchx patch37_1,mem_patch37
+	fetch 1,mem_24g_time_slice
+	increase 1,pdata
+	and_into 3,pdata
+	store 1,mem_24g_time_slice
+	//pairing address and channel come first
+	beq 0,g24_auto_bind_config_device2
+	beq 1,g24_auto_bind_config_self
+	beq 2,g24_auto_bind_config_device1
+	beq 3,g24_auto_bind_config_self
+	rtn
+
+g24_auto_bind_config_device1:
+	call g24_bind_dvc1_payload_cfg
+	fetch 4,mem_24g_device1_addr
+	branch g24_auto_addr_ch_search,blank
+	call g24_update_addr_and_synccrc8
+	fetch 1,mem_24g_device1_config_ch_once
+	call g24_device1_config_ch_once,blank
+	fetch 1,mem_24g_device1_last_ch
+	store 1,mem_24g_ch
+	fetcht 1,mem_rssi_noise_device1_index
+	fetchr rega,2,mem_rssi_noise_device1_buffer_ptr
+	call rssi_store
+	storet 1,mem_rssi_noise_device1_index
+	call rssi_average
+	storet 1,mem_rssi_noise_device1_avg
+	sub temp,RSSI_THRESH_NOISE,null
+	nrtn positive
+	fetcht 1,mem_24g_device1_ch_number
+	call g24_ch_map_size
+	storet 1,mem_24g_device1_ch_number
+	store 1,mem_24g_device1_last_ch
+	rtn
+
+g24_device1_config_ch_once:
+	jam 1,mem_24g_device1_config_ch_once
+	arg 0,temp
+	call g24_ch_calc
+	store 1,mem_24g_device1_last_ch
+	rtn
+	
+g24_auto_bind_config_device2:
+	call g24_bind_dvc2_payload_cfg
+	fetch 4,mem_24g_device2_addr
+	branch g24_auto_addr_ch_search,blank
+	call g24_update_addr_and_synccrc8
+	fetch 1,mem_24g_device2_config_ch_once
+	call g24_device2_config_ch_once,blank
+	fetch 1,mem_24g_device2_last_ch
+	store 1,mem_24g_ch
+	fetcht 1,mem_rssi_noise_device2_index
+	fetchr rega,2,mem_rssi_noise_device2_buffer_ptr
+	call rssi_store
+	storet 1,mem_rssi_noise_device2_index
+	call rssi_average
+	storet 1,mem_rssi_noise_device2_avg
+	sub temp,RSSI_THRESH_NOISE,null
+	nrtn positive
+	fetcht 1,mem_24g_device2_ch_number
+	call g24_ch_map_size
+	storet 1,mem_24g_device2_ch_number
+	store 1,mem_24g_device2_last_ch
+	rtn
+
+g24_device2_config_ch_once:
+	jam 1,mem_24g_device2_config_ch_once
+	arg 0,temp
+	call g24_ch_calc
+	store 1,mem_24g_device2_last_ch
+	rtn	
+
+g24_auto_bind_config_self:
+	call g24_bind_dvc1_payload_cfg
+	fetch 4,mem_24g_lap
+	call g24_update_addr_and_synccrc8
+	fetch 1,mem_24g_self_config_ch_once
+	call g24_self_config_ch_once,blank
+	fetch 1,mem_24g_self_last_ch
+	store 1,mem_24g_ch
+	fetcht 1,mem_rssi_noise_self_index
+	fetchr rega,2,mem_rssi_noise_self_buffer_ptr
+	call rssi_store
+	storet 1,mem_rssi_noise_self_index
+	call rssi_average
+	storet 1,mem_rssi_noise_self_avg
+	sub temp,RSSI_THRESH_NOISE,null
+	nrtn positive
+	fetcht 1,mem_24g_self_ch_number
+	call g24_ch_map_size
+	storet 1,mem_24g_self_ch_number
+	store 1,mem_24g_self_last_ch
+	rtn
+
+g24_self_config_ch_once:
+	jam 1,mem_24g_self_config_ch_once
+	fetch 1,mem_24g_self_last_ch
+	store 1,mem_24g_ch
+	rtn
+
+
+g24_ackpayload_disable:
+	jam 0,mem_24g_ackpayload_enable
+	rtn
+
+
+g24_receiver_addr_check:
+	fetch 4,mem_24g_addr
+	fetcht 4,mem_24g_lap
+	isub temp,null
+	rtn
+
+/****************************g24 receiver search mode end********************************/
+
+
+
+
+
+
+/****************************g24 receiver nodata process start********************************/
+
+
+g24_nodata_process:
+	fetch 1,mem_24g_ackpayload_enable
+	rtneq 2
+	fetch 1,mem_24g_nodata_timer_enable
+	rtn blank
+	arg G24_TIMER_NODATA,queue
+	call timer_check
+	nrtn blank
+	jam 0,mem_24g_nodata_timer_enable
+	jam 0,mem_24g_bind_mode_continue
+	call g24_mode_B_S_switch_init	//works on auto pair only	
+	//no data for more than 100ms,then go to search
+g24_search_mode_enable:	
+	bpatchx patch37_2,mem_patch37
+	jam DONGLE_SEARCH,mem_24g_work_mode
+	jam CLEAR_INIT,mem_24g_mode_init
+	branch g24_rx_interrupt_clear
+
+
+/****************************g24 receiver nodata process end********************************/
+
+
+g24_ch_process:
+	bpatchx patch37_3,mem_patch37
+	fetch 1,mem_24g_abort_packet
+	beq 1,rssi_noise_monitor
+	fetch 1,mem_24g_hop_packet
+	beq 1,g24_ch_receive_hop_pac
+	fetcht 4,mem_24g_hop_btclk
+	copy clkn_bt,pdata
+	isub temp,null
+	ncall g24_timer_timeout,positive
+	copy pdata,regb
+	fetch 4,mem_24g_hop_btclk
+	fetcht 1,mem_24g_hop_interval
+	iadd temp,temp
+	copy regb,pdata
+	isub temp,null
+	nrtn positive
+	set0 28,pdata
+	store 4,mem_24g_hop_btclk
+	jam 1,mem_24g_abort_packet
+	branch g24_ch
+
+g24_ch_receive_hop_pac:
+	jam 0,mem_24g_hop_packet
+	branch g24_ch
+
+g24_ch_timer_reinit:
+	copy clkn_bt,pdata
+	store 4,mem_24g_hop_btclk
+	rtn
+
Index: program/g24_protocol_stack/24g_reconn.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/g24_protocol_stack/24g_reconn.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/g24_protocol_stack/24g_reconn.prog	(working copy)
@@ -0,0 +1,179 @@
+
+/****************************g24 reconn transmitter start********************************/
+
+g24_reconn_timeout_timer:
+	arg mem_24g_reconn_timeout,regc
+	arg g24_stop_24g_mode,regb
+	branch timer_single_step_2B
+
+
+g24_reconn_start:
+	bpatchx patch37_4,mem_patch37
+	set1 mark_24g,mark
+	fetch 1,mem_24g_conn_sm
+	set0 STATE_24G_PAIR,pdata
+	set1 STATE_24G_RECONN,pdata
+	store 1,mem_24g_conn_sm
+	fetch 1,mem_24g_fast_conn_enable
+	branch g24_reconn_receiver_addr,blank
+	fetch 1,mem_24g_reconn_type
+	beq FAST_CONN_AND_RECEIVER,g24_reconn_fast_conn
+	beq FAST_CONN_AND_3_0_ADDR,g24_reconn_fast_conn
+	beq RECEIVER_AND_3_0_ADDR,g24_reconn_device_3_0_addr
+	beq PAIR_AND_3_0_ADDR,g24_reconn_device_3_0_addr
+g24_reconn_fast_conn:
+	fetch 1,mem_24g_pair_tx_power
+	store 1,mem_tx_power
+	fetcht 1,mem_24g_fast_conn_temp_ch
+	storet 1,mem_24g_current_ch_number
+	fetch 4,mem_24g_fast_conn_addr
+	call g24_ch_syncword_crc8_init
+	storet 1,mem_24g_fast_conn_temp_ch
+	rtn
+	 
+g24_reconn_receiver_addr:
+	jam TX_POWER_3DB,mem_tx_power
+	fetcht 1,mem_24g_receiver_temp_ch
+	storet 1,mem_24g_current_ch_number
+	fetch 4,mem_24g_receiver_addr
+	call g24_ch_syncword_crc8_init
+	storet 1,mem_24g_receiver_temp_ch
+	rtn
+
+g24_reconn_device_3_0_addr:
+	jam TX_POWER_3DB,mem_tx_power
+	fetcht 1,mem_24g_device_temp_ch
+	storet 1,mem_24g_current_ch_number
+	fetch 4,mem_24g_device_addr
+	call g24_ch_syncword_crc8_init
+	storet 1,mem_24g_device_temp_ch
+	rtn	
+
+g24_store_receiver_addr:
+	fetch 4,mem_24g_rxpayload+2
+	rtn blank
+	store 4,mem_24g_receiver_addr	
+g24_ch_syncword_crc8_init:	
+	call g24_update_addr_and_synccrc8
+	branch g24_ch
+
+
+g24_reconn_dispatch:
+	bpatchx patch37_5,mem_patch37
+	fetch 2,mem_24g_reconn_count
+	arg 0x01f8,temp
+	iand temp,pdata
+	branch g24_reconn_dispatch_next,blank
+	fetch 2,mem_24g_reconn_count
+	increase 1,pdata
+	store 2,mem_24g_reconn_count
+	rtn
+
+g24_reconn_dispatch_next:
+	call g24_reconn_data_prep
+	call g24_transmit_receive_ack
+	nbranch g24_reconn_device_fail,sync
+	nbranch g24_reconn_device_fail,user3
+	call g24_ackpayload_parse
+	fetch 1,mem_device_option
+	beq DVC_OP_MOUSE,mouse_g24_reconn_dispatch_set
+	fetch 4,mem_24g_pair_addr
+	fetcht 4,mem_24g_addr
+	isub temp,null
+	branch g24_pair_start,zero
+g24_reconn_dispatch_success:
+	fetch 4,mem_24g_device_addr
+	fetcht 4,mem_24g_addr
+	isub temp,null
+	call g24_store_receiver_addr,zero
+	fetch 1,mem_24g_conn_sm
+	set0 STATE_24G_RECONN,pdata
+	store 1,mem_24g_conn_sm
+	setarg 0
+	store 2,mem_24g_pair_timeout
+	store 2,mem_24g_reconn_count
+	store 2,mem_24g_reconn_timeout
+	jam BT_EVT_24G_ATTEMPT_SUCCESS,mem_fifo_temp
+	call ui_ipc_send_event
+g24_txbuf_clear:
+	bpatchx patch37_6,mem_patch37
+	arg 32,loopcnt
+	arg mem_24g_txbuf,contw
+	branch memset0
+
+g24_reconn_data_prep:
+	jam DATATYPE_ATTEMP,mem_24g_txbuf
+	fetch 1,mem_24g_data_type
+	store 1,mem_24g_txbuf+1
+	fetch 4,mem_24g_device_addr
+	store 4,mem_24g_txbuf+2
+	jam 6,mem_24g_datalen
+	branch g24_transmit_prep
+
+g24_reconn_device_fail:
+	bpatchx patch37_7,mem_patch37
+	fetch 1,mem_24g_fast_conn_enable
+	branch g24_ch,blank
+	fetch 2,mem_24g_reconn_count
+	increase 1,pdata
+	store 2,mem_24g_reconn_count
+	isolate1 9,pdata
+	fetch 1,mem_24g_reconn_type
+	beq FAST_CONN_AND_RECEIVER,g24_reconn_fast_conn_and_receiver
+	beq FAST_CONN_AND_3_0_ADDR,g24_reconn_fast_conn_and_3_0
+	beq RECEIVER_AND_3_0_ADDR,g24_reconn_receiver_and_3_0
+	beq PAIR_AND_3_0_ADDR,g24_reconn_pair_and_3_0
+	branch g24_reconn_receiver_addr
+
+
+g24_reconn_fast_conn_and_receiver:
+	branch g24_reconn_receiver_addr,true
+	branch g24_reconn_fast_conn
+
+g24_reconn_fast_conn_and_3_0:
+	branch g24_reconn_device_3_0_addr,true
+	branch g24_reconn_fast_conn
+	
+g24_reconn_receiver_and_3_0:
+	branch g24_reconn_device_3_0_addr,true
+	branch g24_reconn_receiver_addr
+
+g24_reconn_pair_and_3_0:
+	branch g24_reconn_device_3_0_addr,true
+	branch g24_pair_init_param
+
+/****************************g24 reconn transmitter end********************************/
+
+
+
+
+
+/****************************g24 reconn receiver start********************************/
+
+g24_data_attemp:
+	fetch 1,mem_24g_rxdata_temp+3
+	beq DATATYPE_DEVICE1,g24_data_attemp_device1
+	beq DATATYPE_DEVICE2,g24_data_attemp_device2
+	rtn
+g24_data_attemp_device1:
+	fetch 1,mem_24g_device1_bind_disable
+	nrtn blank
+	fetch 4,mem_24g_rxdata_temp+4
+	store 4,mem_24g_transmitter_addr
+g24_store_device1_addr:
+	store 4,mem_24g_device1_addr
+	rtn
+g24_data_attemp_device2:
+	fetch 1,mem_24g_device2_bind_disable
+	nrtn blank
+	fetch 4,mem_24g_rxdata_temp+4
+	store 4,mem_24g_transmitter_addr	
+g24_store_device2_addr:
+	store 4,mem_24g_device2_addr
+	rtn
+
+/****************************g24 reconn receiver end********************************/
+
+
+
+
Index: program/g24_protocol_stack/24g_rssi.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/g24_protocol_stack/24g_rssi.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/g24_protocol_stack/24g_rssi.prog	(working copy)
@@ -0,0 +1,112 @@
+
+/****************************g24 rssi general start********************************/
+
+rssi_store:
+	bpatchx patch38_0,mem_patch38
+	copy rega,pdata
+	iadd temp,contw
+	fetch 1,mem_rssi
+	istore 1,contw
+	increase 1,temp
+	fetch 1,mem_rssi_buff_index	//buff len minus 1
+	iand temp,temp
+	rtn
+	
+rssi_average:
+	bpatchx patch38_1,mem_patch38
+	fetch 1,mem_rssi_buff_index
+	increase 1,pdata
+	store 2,mem_loopcnt
+	copy pdata,loopcnt
+	copy rega,contr
+	arg 0,pdata
+rssi_average_loop:
+	ifetcht 1,contr
+	iadd temp,pdata
+	loop rssi_average_loop
+	fetcht 2,mem_loopcnt
+	idiv temp
+	call wait_div_end
+	quotient temp
+	rtnmark1 mark_24g_rxmode
+	copy temp,pdata
+	rtnmark0 mark_24g
+	call bcd
+	copy pdata,temp
+	rtn
+
+save_rssi_dec:
+	branch save_rssi
+//	branch rssi_hex2dec
+
+/****************************g24 rssi general end********************************/
+
+
+
+
+
+/****************************g24 transmitter rssi start********************************/
+rssi_transmitter_buff_init:
+	fetch 2,mem_rssi_signal_buf_ptr
+	branch rssi_buff_clear
+
+rssi_signal:
+	copy pdata,rega
+	fetcht 1,mem_rssi_signal_index
+	fetch 2,mem_rssi_signal_buf_ptr
+	iadd temp,contw
+	copy rega,pdata
+	istore 1,contw
+	increase 1,temp
+	fetch 1,mem_rssi_buff_index	//buff len minus 1
+	iand temp,temp
+	storet 1,mem_rssi_signal_index
+	rtn
+
+/****************************g24 transmitter rssi end********************************/
+
+
+
+
+
+/****************************g24 receiver rssi start********************************/
+
+rssi_receiver_buff_init:
+	fetch 2,mem_rssi_noise_buffer_ptr
+	call rssi_buff_clear
+	fetch 2,mem_rssi_noise_self_buffer_ptr
+	call rssi_buff_clear
+	fetch 2,mem_rssi_noise_device1_buffer_ptr
+	call rssi_buff_clear
+	fetch 2,mem_rssi_noise_device2_buffer_ptr
+rssi_buff_clear:
+	rtn blank
+	copy pdata,contw
+	fetch 1,mem_rssi_buff_index
+	increase 1,pdata
+	copy pdata,loopcnt
+	branch clear_mem
+
+
+rssi_noise:
+	call save_rssi_dec
+	rtn blank
+	fetcht 1,mem_rssi_noise_index
+	fetchr rega,2,mem_rssi_noise_buffer_ptr
+	call rssi_store
+	storet 1,mem_rssi_noise_index
+	rtn
+
+
+rssi_noise_monitor:
+	fetchr rega,2,mem_rssi_noise_buffer_ptr
+	call rssi_average
+	storet 1,mem_rssi_noise_avg
+	sub temp,RSSI_THRESH_NOISE,null
+	nrtn positive
+	branch g24_ch
+
+
+/****************************g24 receiver rssi end********************************/
+
+	
Index: program/g24_protocol_stack/24g_transmitter.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/g24_protocol_stack/24g_transmitter.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/g24_protocol_stack/24g_transmitter.prog	(working copy)
@@ -0,0 +1,407 @@
+
+
+g24_transmit_init:
+	fetch 4,mem_24g_lap		//need to roll this address
+	store 4,mem_24g_device_addr
+	branch rssi_transmitter_buff_init
+
+g24_interval_param_4ms:
+	setarg G24_4MS_INTERVAL_PARAM
+	store 3,mem_24g_short_sleep_set
+	setarg 0x100c0c
+	store 3,mem_24g_interval
+	setarg 0x00bb80
+	store 3,mem_24g_long_sleep_set
+	jam 5,mem_24g_fast_hop_count
+	rtn
+
+g24_interval_param_8ms:
+	setarg G24_8MS_INTERVAL_PARAM
+	store 3,mem_24g_short_sleep_set
+	setarg 0x1c1919
+	store 3,mem_24g_interval
+	setarg 0x017700
+	store 3,mem_24g_long_sleep_set
+	jam 11,mem_24g_fast_hop_count
+	rtn
+
+
+g24_transmit_dispatch:
+	fetch 1,mem_24g_conn_sm
+	bbit1 STATE_24G_PAIR,g24_pair_dispatch
+	bbit1 STATE_24G_RECONN,g24_reconn_dispatch
+	fetch 1,mem_24g_transmit_by_interrupt
+	beq G24_TX_TIMER_INT_ENABLE,g24_transmit_by_interrupt
+g24_transmit_no_interrupt:
+	bpatchx patch38_2,mem_patch38
+	call g24_txdata_prep
+	nbranch g24_nodata_transmit,user
+g24_transmit_start:
+	bpatchx patch38_3,mem_patch38
+	call g24_transmit_process
+	call power_ctrl_start
+	fetch 1,mem_device_option
+	beq DVC_OP_MOUSE,mouse_24g_transmit_start
+g24_transmit_start_next:	
+	fetch 8,mem_24g_long_sleep_set
+	store 8,mem_24g_enter_hibernate
+	fetch 2,mem_24g_long_sleep_param_update_timer_init
+	store 2,mem_24g_long_sleep_param_update_timer
+	fetch 2,mem_cb_24g_transmit_short_sleep
+	branch callback_func
+
+g24_short_sleep:
+	bpatchx patch38_4,mem_patch38
+	call g24_lpm_wait
+	nrtn user
+	call g24_setgpio_lpm_before
+	call clear_wake
+	fetch 3,mem_24g_short_sleep_set
+	branch g24_long_seep2
+
+g24_long_sleep:
+	bpatchx patch38_5,mem_patch38
+	call g24_lpm_wait
+	nrtn user
+	call g24_setgpio_lpm_before
+	fetch 8,mem_24g_enter_hibernate
+g24_long_seep2:
+	call clk2lpo
+	storet 4,mem_sleep_counter
+	branch lpm_sleep
+	
+/****************************g24 transmitter data prep start********************************/
+
+g24_txdata_prep:
+	call g24_package_data
+	nrtn user
+	branch g24_transmit_prep
+
+
+g24_package_data:
+	fetch 2,mem_cb_24g_transmit_data
+	call callback_func
+	branch g24_accumulate_data,user
+	fetch 7,mem_24g_txbuf+1	//mouse data
+	rtn blank
+	branch enable_user	// retransmit
+	
+g24_accumulate_data:
+	jam 0,mem_24g_abort_pac
+	add rega,1,pdata
+	store 1,mem_24g_datalen
+	call g24_transmit_rf_ctrl_clear
+	store 1,mem_24g_txbuf
+	copy regb,contr
+	copy rega,loopcnt
+	branch memcpy
+
+g24_transmit_rf_ctrl_clear:	
+	fetch 1,mem_24g_data_type
+	and_into bits_data,pdata
+	store 1,mem_24g_data_type
+	rtn
+
+/****************************g24 transmitter data prep end********************************/
+
+
+
+
+/****************************g24 transmitter data transmit start********************************/
+
+g24_transmit_process:
+	setarg 0
+	store 1,mem_24g_retry
+	store 2,mem_24g_retransmit
+g24_transmit_loop:
+	bpatchx patch38_6,mem_patch38
+	call g24_transmit_receive_ack
+	fetch 1,mem_24g_no_ack	//tx noack
+	beq no_ack_24g,g24_transmit_no_ack
+	nbranch g24_retransmit,sync
+	nbranch g24_retransmit,user3
+	call g24_ackpayload_parse
+	fetch 1,mem_device_option
+	sub pdata,DVC_OP_MOUSE,null
+	call mouse_24g_transmit_callback,zero
+g24_transmit_no_ack:
+	call power_ctrl_pac_succ_incrs
+g24_transmit_next_packet:
+	call g24_txbuf_clear
+	fetch 1,mem_24g_pid
+	increase 1,pdata
+	store 1,mem_24g_pid
+	call g24_hop_enable_packet
+g24_transmit_abandon:
+	bpatchx patch38_7,mem_patch38
+	setarg 0
+	store 1,mem_24g_ensure
+	store 2,mem_24g_txfail_cnt
+	rtn
+
+g24_transmit_receive_ack:
+	bpatchx patch39_0,mem_patch39
+	disable user3
+	call g24_transmit
+	fetch 1,mem_24g_no_ack
+	beq no_ack_24g,g24_end_of_packet
+	force 0,radio_ctrl
+	fetch 4,mem_24g_addr
+	iforce access
+	fetcht 1,mem_last_freq
+	call set_freq_rx
+	call rf_rx_enable
+	call g24_receive_rxon
+	call g24_end_of_packet,user3
+	rtn
+
+g24_retransmit:
+	bpatchx patch39_1,mem_patch39
+	fetch 1,mem_device_option
+	beq DVC_OP_MOUSE,mouse_g24_retransmit
+g24_retransmit0:	
+	fetch 1,mem_24g_abort_pac
+	nrtn blank
+	fetch 2,mem_24g_txfail_cnt
+	increase 1,pdata
+	store 2,mem_24g_txfail_cnt	
+	fetch 1,mem_24g_txfail_cnt+1
+	bbit1 4,g24_tx_attempt_fail
+	call g24_transmit_hop_process
+	fetch 2,mem_24g_retransmit
+	increase 1,pdata
+	store 2,mem_24g_retransmit	
+	branch g24_transmit_loop
+
+g24_ackpayload_parse:
+	bpatchx patch39_2,mem_patch39
+	call g24_read_len_pid_crc
+	fetch 1,mem_24g_rxdata_length	//ack payload length 
+	rtn blank
+	iforce loopcnt
+	arg mem_24g_rxbuf+2,contr
+	arg mem_24g_rxpayload,contw	//ack payload buffer 
+	branch memcpy
+
+
+g24_tx_attempt_fail:
+	bpatchx patch39_3,mem_patch39
+	setarg 0
+	store 2,mem_24g_txfail_cnt
+	jam 1,mem_24g_attempt_fail_flag
+g24_stop_24g_mode:	
+	jam BT_EVT_24G_ATTEMPT_FAIL,mem_fifo_temp
+	branch ui_ipc_send_event
+
+/****************************g24 transmitter data transmit end********************************/
+
+
+
+
+
+/****************************g24 transmitter hop start********************************/
+
+g24_transmit_hop_process:
+	bpatchx patch39_4,mem_patch39
+	fetch 1,mem_device_option
+	beq DVC_OP_MOUSE,mouse_g24_transmit_hop_process
+g24_transmit_hop_process_next:
+	fetcht 1,mem_24g_retry
+	fetch 1,mem_24g_fast_hop_count			// 125Hz=11  250Hz=5
+	isub temp,null
+	nbranch g24_tx_fast_hop,positive		// >= (6+6)or(3+3) hop fast    fail packet count >= 2
+	increase 1,temp
+	storet 1,mem_24g_retry
+	fetch 1,mem_24g_fast_hop_count
+	beq 5,g24_transmit_hop_process_4ms
+	fetch 1,mem_24g_retry
+	beq 6,g24_hop_ch_disable
+	beq 12,g24_hop_ch_disable
+	rtn	
+
+
+g24_transmit_hop_process_4ms:
+	fetch 1,mem_24g_retry
+	beq 3,g24_hop_ch_disable
+	beq 6,g24_hop_ch_disable
+	rtn	
+
+
+
+g24_hop_ch_enable:
+	//fetch 1,mem_24g_data_type
+	//set1 bit_hop,pdata
+	//store 1,mem_24g_data_type
+	//update txpayload
+g24_txpayload_type_update:	
+	bmark1 mark_ble_lr,g24_lr_type_update
+	store 1,mem_24g_txpayload+OFFSET_DATA_TYPE
+	rtn
+g24_lr_type_update:
+	store 1,mem_24g_txpayload+OFFSET_LR_DATA_TYPE
+	rtn
+
+g24_hop_enable_packet:
+	fetch 1,mem_24g_data_type
+	rtnbit0 bit_hop
+g24_hop_ch_disable:
+	fetch 1,mem_24g_data_type
+	set0 bit_hop,pdata
+	store 1,mem_24g_data_type
+	call g24_txpayload_type_update
+	call power_ctrl_pac_succ_decrs
+	branch g24_ch
+
+g24_tx_fast_hop:
+	fetch 4,mem_24g_addr
+	fetcht 4,mem_24g_fast_conn_addr
+	isub temp,null
+	branch g24_ch,zero		//fast conn->power no chage
+	call power_ctrl_txpower_incrs
+	call power_ctrl_pac_succ_decrs
+	branch g24_ch
+	
+/****************************g24 transmitter hop end********************************/
+
+
+
+
+
+
+
+
+
+
+
+
+
+/****************************g24 transmitter long lpm prep start********************************/
+
+g24_search_receiver:
+	fetch 2,mem_cb_24g_search_receiver
+	branch callback_func
+
+g24_nodata_transmit:
+	fetch 1,mem_24g_abort_pac
+	call g24_send_abort_packet,blank
+	fetch 1,mem_24g_transmit_by_interrupt
+	rtneq G24_TX_TIMER_INT_ENABLE
+	call g24_search_receiver
+	fetch 2,mem_cb_24g_transmit_long_sleep
+	branch callback_func
+
+g24_send_abort_packet:
+	bpatchx patch39_5,mem_patch39
+	jam 1,mem_24g_abort_pac
+	jam TYPE_MS,mem_24g_data_type
+	call g24_transmit_rf_ctrl_clear
+	store 1,mem_24g_txbuf
+	setarg 0
+	store 7,mem_24g_txbuf+1
+	fetch 4,mem_24g_device_addr
+	store 4,mem_24g_txbuf+8
+	jam 12,mem_24g_datalen
+	fetch 1,mem_24g_data_type
+	set1 bit_abort,pdata
+	store 1,mem_24g_data_type
+	call g24_transmit_prep
+	branch g24_transmit_start
+	
+
+
+g24_lpm_wait:
+	bpatchx patch39_6,mem_patch39
+	enable user
+	call lpo_calibration
+	fetch 3,mem_clks_per_lpo
+	branch disable_user,blank
+	fetch 1,mem_lpm_mode
+	branch disable_user,blank
+	fetch 1,mem_24g_transmit_by_interrupt
+	beq G24_TX_TIMER_INT_ENABLE,disable_user
+	rtn
+
+g24_setgpio_lpm_before:
+	fetch 2,mem_cb_24g_lpm_before
+	branch callback_func
+
+
+/****************************g24 transmitter long lpm prep end********************************/
+
+
+
+
+
+
+
+/****************************g24 transmit by interrupt start********************************/
+
+g24_transmit_by_interrupt:
+	call g24_timer_check
+	nrtn user
+	call g24_interval_calibrate
+	fetch 2,mem_24g_transmit_by_interrupt_exit_count
+	increase 1,pdata
+	store 2,mem_24g_transmit_by_interrupt_exit_count
+	fetcht 2,mem_24g_transmit_by_interrupt_exit_count_init
+	isub temp,null
+	call g24_transmit_by_interrupt_exit,zero
+	branch g24_transmit_no_interrupt
+
+	
+g24_transmit_by_interrupt_exit:
+	jam G24_TX_TIMER_INT_DISABLE,mem_24g_transmit_by_interrupt
+	setarg 0
+	store 2,mem_24g_transmit_by_interrupt_exit_count
+	setarg 100
+	store 2,mem_24g_transmit_by_interrupt_exit_count_init
+g24_interval_min:
+	jam 0,mem_24g_pac_index
+	fetch 1,mem_24g_interval_min
+g24_interval_store:
+	store 1,mem_24g_interval
+	rtn
+g24_interval_max:
+	fetch 1,mem_24g_interval_max
+	branch g24_interval_store
+	
+g24_interval_calibrate:
+	fetch 1,mem_24g_pac_index
+	increase 1,pdata
+	store 1,mem_24g_pac_index
+	beq 4,g24_interval_max
+	beq 5,g24_interval_min
+	rtn
+
+g24_transmit_by_interrupt_enable:
+	jam G24_TX_TIMER_INT_ENABLE,mem_24g_transmit_by_interrupt
+	setarg 0
+	store 2,mem_24g_transmit_by_interrupt_exit_count
+	rtn
+
+
+/****************************g24 transmit by interrupt end********************************/
+
+
+
+
+/****************************g24 transmitter fac check start********************************/
+
+g24_factory_check:
+	arg 2,loopcnt
+	arg mem_24g_addr,contr
+pdata_0xff_check:
+	call enable_user
+	setarg 0xffff
+pdata_0xff_check_loop:
+	ifetcht 2,contr
+	isub temp,null
+	ncall disable_user,zero
+	loop pdata_0xff_check_loop
+	rtn
+
+/****************************g24 transmitter fac check end********************************/
+
+
+
+	
Index: program/g24_protocol_stack/24g_txpower_ctrl.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/g24_protocol_stack/24g_txpower_ctrl.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/g24_protocol_stack/24g_txpower_ctrl.prog	(working copy)
@@ -0,0 +1,104 @@
+
+/****************************g24 transmitter tx power start********************************/
+
+power_ctrl_start:
+	bpatchx patch39_7,mem_patch39
+	fetch 1,mem_power_ctrl_disable
+	nrtn blank
+	fetch 2,mem_ui_state_map
+	rtnbit1 UI_STATE_BLE_ADV
+	fetchr rega,2,mem_rssi_signal_buf_ptr
+	call rssi_average
+	storet 1,mem_rssi_avg_received
+	fetch 1,mem_rssi_dis_max_24g
+	bmark1 mark_24g,power_ctrl_start_next
+	fetch 1,mem_rssi_dis_max_ble
+power_ctrl_start_next:
+	isub temp,null
+	nbranch power_ctrl_txpower_incrs_force,positive
+	fetch 1,mem_power_ctrl_pac_succ_cnt
+	sub pdata,2,null
+	nbranch power_ctrl_txpower_decrs_check,positive
+	fetch 1,mem_power_ctrl_pac_succ_cnt
+	beq 0,power_ctrl_txpower_incrs
+	rtn
+
+power_ctrl_txpower_decrs_check:
+	fetch 1,mem_power_ctrl_pac_succ_cnt
+	fetcht 1,mem_power_ctrl_pac_succ_cnt_init
+	isub temp,null
+	nrtn zero
+	jam 0,mem_power_ctrl_pac_succ_cnt
+power_ctrl_txpower_decrs:
+	fetcht 1,mem_rssi_avg_received
+	fetch 1,mem_rssi_dis_min_24g
+	bmark1 mark_24g,power_ctrl_txpower_decrs_next
+	fetch 1,mem_rssi_dis_min_ble
+power_ctrl_txpower_decrs_next:	
+	isub temp,null
+	nrtn positive
+	fetch 1,mem_power_ctrl_level
+	beq 0,power_ctrl_decrs_level0
+	increase -1,pdata
+	store 1,mem_power_ctrl_level
+	beq 2,power_ctrl_decrs_level2	//3db     //3-->0-->-5
+	beq 1,power_ctrl_decrs_level1	//0db
+	branch power_ctrl_decrs_level0 //-5dBm
+
+power_ctrl_txpower_incrs_force:	//0-->3-->5
+	jam 0,mem_power_ctrl_pac_succ_cnt
+power_ctrl_txpower_incrs:
+	fetch 1,mem_power_ctrl_level
+	beq 3,power_ctrl_incrs_level3
+	increase 1,pdata
+	store 1,mem_power_ctrl_level
+	beq 1,power_ctrl_incrs_level1	//0db
+	beq 2,power_ctrl_incrs_level2	//3db
+power_ctrl_incrs_level3:	//5dBm
+	jam TX_POWER_5DB,mem_tx_power
+	rtn
+
+power_ctrl_decrs_level2:	
+power_ctrl_incrs_level2:	//+3dBm
+	jam TX_POWER_3DB,mem_tx_power
+	rtn
+
+power_ctrl_decrs_level1:
+power_ctrl_incrs_level1:	//0dBm
+	jam TX_POWER_0DB,mem_tx_power
+	rtn
+	
+power_ctrl_decrs_level0: //-5dBm
+	jam TX_POWER_f5DB,mem_tx_power
+	rtn
+
+//power_ctrl_pac_succ_cnt_init:
+//	jam 1,mem_power_ctrl_level
+//	jam 0,mem_power_ctrl_pac_succ_cnt
+//	rtn
+
+power_ctrl_pac_succ_incrs:
+	fetch 1,mem_power_ctrl_pac_succ_cnt
+	increase 1,pdata
+	store 1,mem_power_ctrl_pac_succ_cnt
+	rtn
+
+power_ctrl_pac_succ_decrs:
+	fetch 1,mem_power_ctrl_pac_succ_cnt
+	sub pdata,2,null
+	ncall power_ctrl_pac_succ_cnt_reinit,positive
+	fetch 1,mem_power_ctrl_pac_succ_cnt
+	rtneq 0
+	increase -1,pdata
+	store 1,mem_power_ctrl_pac_succ_cnt
+	rtn
+
+power_ctrl_pac_succ_cnt_reinit:
+	jam 3,mem_power_ctrl_pac_succ_cnt
+	rtn
+
+/****************************g24 transmitter tx power end********************************/
+
+
+
+
Index: program/hci_main.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/hci_main.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/hci_main.prog	(working copy)
@@ -0,0 +1,302 @@
+/*********************************/
+/**********   HCI  *****************/
+/*********************************/
+
+hci_init:
+	clear_stack		//նջ
+	call wdt_set_disable
+	call hci_init_clksel_xtal
+	call hci_init_uart_default_config
+	call hci_init_uart_config
+	call hci_init_pwm_default_config
+	call hci_init_pwm
+
+	jam 1,mem_hci_command_complete_num_hci_command_packet
+	jam HCI_H4_TYPE_EVENT,mem_hci_event_head_type
+
+hci_process_loop:
+	call hci_process_check_uart_rx
+	branch hci_process_loop
+	
+hci_init_clksel_xtal:
+	jam clksel_xtal,core_clksel
+	rtn
+
+hci_init_uart_default_config:
+	call hci_init_uart_default_config_tx
+	call hci_init_uart_default_config_rx
+	call hci_init_uart_default_config_rts
+	branch hci_init_uart_default_config_cts
+
+hci_init_uart_default_config_tx:
+	fetch 1,mem_hci_uart_tx_gpio
+	nrtn blank
+	jam HCI_UART_TX_GPIO_NUM,mem_hci_uart_tx_gpio
+	rtn	
+
+hci_init_uart_default_config_rx:
+	fetch 1,mem_hci_uart_rx_gpio
+	nrtn blank
+	jam HCI_UART_RX_GPIO_NUM,mem_hci_uart_rx_gpio
+	rtn	
+hci_init_uart_default_config_rts:
+	fetch 1,mem_hci_uart_rts_gpio
+	nrtn blank
+	jam HCI_UART_RTS_GPIO_NUM,mem_hci_uart_rts_gpio
+	rtn	
+hci_init_uart_default_config_cts:
+	fetch 1,mem_hci_uart_cts_gpio
+	nrtn blank
+	jam HCI_UART_CTS_GPIO_NUM,mem_hci_uart_cts_gpio
+	rtn	
+
+
+hci_init_uart_config:
+	setarg mem_h5rx_buf
+	store 2,mem_pdatatemp
+	setarg mem_h5rx_buf_end
+	istore 2,contw
+	setarg mem_h5tx_buf
+	istore 2,contw
+	setarg mem_h5tx_buf_end
+	istore 2,contw	
+	fetch 8,mem_pdatatemp
+	call uarta_init_dma_mem
+	call uart_clock_select_main_freq_crystal
+	arg 115200,temp
+	call uarta_calc_baud_rate_config
+	fetch 1,mem_hci_uart_tx_gpio
+	arg gpcfg_uart_txd,temp
+	call gpio_config_function_int
+	fetch 1,mem_hci_uart_rx_gpio
+	arg gpcfg_uart_rxd|gpcfg_pullup,temp
+	call gpio_config_function_int
+	fetch 1,mem_hci_uart_rts_gpio
+	arg gpcfg_uart_rts,temp
+	call gpio_config_function_int
+	fetch 1,mem_hci_uart_cts_gpio
+	arg gpcfg_uart_cts,temp
+	call gpio_config_function_int
+
+	arg FUN_UART_CONTROL_ENABLE|FUN_UART_CONTROL_SETTING_RATE_BAUD,temp
+	storet 1,core_uart_ctrl
+	branch clean_xmem
+
+hci_init_pwm_default_config:
+	fetch 1,mem_hci_pwm_12mhz_gpio
+	nrtn blank
+	jam HCI_PMW_12MHZ_GPIO_NUM,mem_hci_pwm_12mhz_gpio
+	rtn	
+
+hci_init_pwm:
+	fetch 1,mem_hci_pwm_12mhz_gpio
+	arg gpcfg_pwm_out0,temp
+	call gpio_config_function_int
+	arg 0x40,rega
+	call pwm_init
+	arg 0,rega
+	arg 0,regb
+	setarg 0
+	call pwm_duty_cycle_set
+	arg 0,queue
+	branch pwm_set_select
+
+
+hci_process_check_uart_rx:
+	fetch 2,core_uart_rxitems
+	add pdata,-4,rega
+	nrtn positive
+	call uarta_prepare_rx
+	ifetch 1,contru
+	beq HCI_H4_TYPE_CMD,hci_parse_packet_cmd
+//	beq HCI_H4_TYPE_ACL,hci_parse_packet_acl
+	call delay_10ms
+	branch uarta_clear_current_rx
+
+//hci_parse_packet_acl:
+//	rtn
+hci_parse_packet_cmd:
+	ifetch 2,contru	// Opcode
+	store 2,mem_hci_opcode
+	arg 0x3ff,temp
+	iand temp,temp	//low 10bit
+	storet 2,mem_hci_opcode_ocf
+	rshift2 pdata,pdata
+	rshift8 pdata,pdata	//high 6bit
+	store 1,mem_hci_opcode_ogf
+	ifetch 1,contru	// parameter total length
+	pincrease -1		//ڵ
+	isub rega,null
+	rtn positive
+	call hci_parse_complete_packet
+	branch hci_drop_current_packet
+
+hci_parse_complete_packet:
+	fetch 1,mem_hci_opcode_ogf
+//	beq HCI_OGF_LINK_CONTROL,hci_parse_packet_cmd_ogf_link_control
+//	beq HCI_OGF_LINK_POLICY,hci_parse_packet_cmd_ogf_link_policy
+//	beq HCI_OGF_CONTROLLER_AND_BASEBAND,hci_parse_packet_cmd_ogf_controller_and_baseband
+//	beq HCI_OGF_INFOMATIONAL_PARAM,hci_parse_packet_cmd_ogf_infomational_parameters
+//	beq HCI_OGF_STATUS_PARAM,hci_parse_packet_cmd_ogf_status_parameters
+//	beq HCI_OGF_TEST,hci_parse_packet_cmd_ogf_testing
+//	beq HCI_OGF_LE_CONTROLLER,hci_parse_packet_cmd_ogf_le_controller
+	beq HCI_OGF_VENDOR_SPECIFIC_DEBUG,hci_parse_packet_cmd_ogf_vendorspecific_debug
+	branch hci_send_event_command_complete_error_command_nuknown
+
+//hci_parse_packet_cmd_ogf_link_control:
+//hci_parse_packet_cmd_ogf_link_policy:
+//hci_parse_packet_cmd_ogf_controller_and_baseband:
+//hci_parse_packet_cmd_ogf_infomational_parameters:
+//hci_parse_packet_cmd_ogf_status_parameters:
+//hci_parse_packet_cmd_ogf_testing:
+//hci_parse_packet_cmd_ogf_le_controller:
+
+hci_parse_packet_cmd_ogf_vendorspecific_debug:
+	bpatch patch1a_2,mem_patch1a
+	fetch 1,mem_hci_opcode_ocf
+	beq HCI_VENDOR_CMD_RESET,hci_normal_reply
+	beq HCI_VENDOR_CMD_CHIPID,phci_grp_vendor_chipid
+	beq HCI_VENDOR_CMD_BAUD,phci_grp_vendor_baud
+	beq HCI_VENDOR_CMD_PATCH,phci_grp_vendor_patch
+	beq HCI_VENDOR_CMD_PATCH_DONE,phci_grp_vendor_done
+	beq HCI_VENDOR_CMD_ECHO,hci_normal_reply
+	beq HCI_VENDOR_CMD_MEM,phci_grp_vendor_mem
+	beq HCI_VENDOR_CMD_SET_FLOW_CONTROL,phci_grp_vendor_flow_control
+	branch hci_normal_reply
+
+	
+phci_grp_vendor_chipid:
+	jam COMMAND_SUCCEEDED,mem_hci_command_complete_return_parameter
+	fetch 2,core_chipid
+	store 2,mem_hci_command_complete_return_parameter_chip_id
+	arg 3,loopcnt
+	branch hci_send_event_command_complete
+	
+phci_grp_vendor_baud:
+	ifetch 2,contu
+	store 2,core_uart_baud
+	rtn
+
+
+phci_grp_vendor_patch_common:
+	ifetch 1,contu
+	copy pdata,temp //check sum via temp
+	store 1,core_ucode_low
+	ifetch 1,contu
+	iadd temp,temp
+	set1 7,pdata
+	store 1,core_ucode_ctrl
+	ifetch 1,contu
+	iadd temp,temp
+	copy pdata,loopcnt
+	rtn
+	
+phci_grp_vendor_patch:
+	call phci_grp_vendor_patch_common
+phci_grp_vendor_patch_loop:
+	ifetch 1,contu
+	store 1,core_ucode_data
+	iadd temp,temp
+	loop phci_grp_vendor_patch_loop
+phci_grp_vendor_patch_check_sum:	
+	and temp,0xff,temp
+	ifetch 1,contu
+	isub temp,null
+	nbranch phci_grp_vendor_patch_bad,zero
+	branch hci_normal_reply
+
+phci_grp_vendor_done:
+	arg 0x20,loopcnt    //patch switch length
+	arg mem_patch00,contw
+	arg 0,temp //checksum
+phci_grp_vendor_done_loop:
+	ifetch 1,contu
+	istore 1,contw
+	iadd temp,temp
+	loop phci_grp_vendor_done_loop
+	and temp,0xff,temp
+	ifetch 1,contu
+	isub temp,null
+	nbranch phci_grp_vendor_patch_bad,zero
+	jam 0,core_ucode_ctrl
+	call hci_normal_reply
+	call wait_uarttx
+	branch soft_reset
+
+phci_grp_vendor_patch_bad:
+	jam 0,core_ucode_ctrl
+	branch hci_send_event_command_complete_error_command_nuknown
+	
+
+phci_grp_vendor_mem:
+	ifetch 1,contu
+	copy pdata,loopcnt
+	ifetch 2,contu
+	copy pdata,contw
+	call uart_copy_rx_bytes
+	branch hci_normal_reply
+
+phci_grp_vendor_flow_control:
+	fetch 1,core_uart_ctrl
+	set1 BIT_UART_CONTROL_FLOW_CONTROL,pdata
+	store 1,core_uart_ctrl
+	branch hci_normal_reply
+
+	
+hci_normal_reply:
+	branch hci_send_event_command_complete_without_payload
+
+hci_send_event_command_complete_error_command_nuknown:
+	jam COMMAND_UNKNOWN,mem_hci_command_complete_return_parameter
+	branch hci_send_event_command_complete_without_payload+1
+hci_send_event_command_complete_error_command_disallowed:
+	jam COMMAND_DISALLOWED,mem_hci_command_complete_return_parameter
+	branch hci_send_event_command_complete_without_payload+1
+hci_send_event_command_complete_without_payload:
+	jam COMMAND_SUCCEEDED,mem_hci_command_complete_return_parameter
+	arg 1,loopcnt
+	branch hci_send_event_command_complete
+
+/***************
+function:send command complete event to host
+input:
+mem_mesh_command_complete_num_hci_command_packet:
+Num Hci Command Packet Commonly used 1
+mem_mesh_hci_opcode:command opcode ,OCF & OGF
+loopcnt:return parameters data length
+mem_mesh_command_complete_return_parameter
+:return parameters data point
+***************/
+hci_send_event_command_complete:
+	jam HCI_EVENT_COMMAND_COMPLETE,mem_hci_event_head_event_code
+	add loopcnt,3,pdata
+	store 1,mem_hci_event_para_total_length
+	call hci_prepare_send_event
+	fetch 3,mem_hci_command_complete_num_hci_command_packet
+	istore 3,contwu
+//	copy rega,contr
+	arg mem_hci_command_complete_return_parameter,contr
+	call uart_copy_tx_bytes
+	branch uarta_send_register_pop
+
+//mem_mesh_event_head_event_code:event code
+//mem_mesh_event_para_total_length:parameter total length
+hci_prepare_send_event:
+	call uarta_prepare_tx_register_push
+	fetch 3,mem_hci_event_head_type
+	istore 3,contwu
+	rtn
+
+hci_drop_current_packet:
+	call uarta_prepare_rx
+	increase 3,contru
+	ifetch 1,contru
+	iadd contru,contru
+	branch uarta_rxdone
+
+cmd_exit:
+	jam 0,mem_hci_cmd
+	rtn
+
+
+
Index: program/hid.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/hid.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/hid.prog	(working copy)
@@ -0,0 +1,395 @@
+
+
+/////////////////////////////////////////////mouse & keyboard  public functions/////////////////////////
+hid_device_load_flash_info_check:
+	call spid_init_flash
+	call mouse_spid_flash_release_form_powerdown
+	call mouse_information_flash_parameters
+	call spid_read_flash
+	branch mouse_spid_flash_powerdown
+
+hid_device_store_flash_device_info:
+	call spid_init_flash
+	call mouse_spid_flash_release_form_powerdown
+	call mouse_flash_erase_sector
+
+	call mouse_information_flash_parameters
+	call mouse_spid_write_flash
+	branch mouse_spid_flash_powerdown	
+
+hid_device_before_store_reconn_info:
+	arg mem_device1_type,rega
+	fetch 1,mem_device_flag
+	increase -1,pdata
+	mul32 pdata,13,pdata
+	iadd rega,rega
+	fetch 1,mem_record_bt_mode
+	istore 1,rega
+	beq REC_4_MODE,hid_device_store_le_device
+	rtn
+
+hid_device_store_le_device:
+	fetch 6,mem_le_plap
+	istore 6,contw
+	fetch 6,mem_le_lap
+	istore 6,contw
+	rtn
+
+
+hid_device_load_device_info:
+	bpatch patch1a_3,mem_patch1a
+	call hid_device_select_reconn_device
+	fetch 4,mem_device_24g_addr
+	store 4,mem_24g_receiver_addr
+	store 4,mem_24g_addr
+	rtn
+
+hid_device_select_reconn_device:
+	bpatch patch1a_4,mem_patch1a
+	arg mem_device1_type,rega
+	fetch 1,mem_device_flag
+	rtneq MODE_24G_DEVICE
+	increase -1,pdata
+	mul32 pdata,13,pdata
+	iadd rega,rega
+	ifetch 1,rega
+	store 1,mem_xrecord_mode
+	rtnne REC_4_MODE
+hid_device_load_le_device:
+	ifetch 6,contr
+	store 6,mem_hci_plap
+	ifetch 6,contr
+	store 6,mem_le_lap
+	rtn
+
+hid_device_check_device_addr:
+	fetch 1,mem_record_bt_mode
+	rtnne REC_4_MODE
+hid_device_check_le_device_addr:
+	store 1,mem_device_addr_temp
+	fetch 6,mem_le_plap
+hid_device_check_bt_device_addr_common:
+	store 6,mem_device_addr_temp+1
+	fetch 7,mem_device_addr_temp
+	arg mem_device1_type,contr
+	arg 3,loopcnt
+hid_device_check_device_addr_end:
+	ifetcht 7,contr
+	isub temp,null
+	branch hid_device_clean_addr,zero
+	increase 7,contr
+	loop hid_device_check_device_addr_end
+	rtn
+
+hid_device_clean_addr:
+	increase -6,contr
+	copy contr,contw
+	fetcht 6,mem_device_addr_temp+1
+	increase 3,temp
+	istoret 6,contw
+	rtn	
+
+hid_device_ble_init_address:
+	fetch 6,mem_le_lap
+	store 6,mem_device1_locall_addr
+	add pdata,0x0100,pdata
+	store 6,mem_device2_locall_addr
+	add pdata,0x0100,pdata
+	store 6,mem_device3_locall_addr
+	rtn
+	
+hid_device_default_parm_init:
+	jam 0xff,mem_ui_button_gpio
+	jam 0,mem_ui_led_struct_num
+	
+	fetch 2,mem_device_24g_pair_timeout_init
+	store 2,mem_24g_pair_timeout_init
+
+	fetch 1,mem_device_24g_reconn_timeout_init
+	store 2,mem_24g_reconn_timeout_init
+
+	fetch 5,mem_rssi_dis_min_24g_init
+	store 5,mem_rssi_dis_min_24g
+
+	fetch 1,mem_device_24g_pair_tx_power
+	store 1,mem_24g_pair_tx_power
+
+	fetch 1,mem_24g_ch_map_update
+	ncall g24_chamap_param_update,blank
+	rtn
+
+hid_device_param_common_init:
+	jam 3,mem_lpm_mult_timeout
+	jam 8,mem_lpm_overhead
+	jam PB_BUTTON_STATE_UP,mem_select_device_button_statue
+	jam COMMBINATION_KEY_STATE_UP,mem_commbination_key_statue	
+	setarg 0x0200
+	store 2,mem_lpm_interval
+	jam 0x17,mem_le_local_mtu
+	jam 0x17,mem_le_remote_mtu
+
+	fetch 1,mem_device_flag
+	store 1,mem_device_flag_temp
+	fetch 3,mem_le_lap+3
+	store 3,mem_device_le_lap_temp
+
+	setarg mem_le_tx_buffer0_omemalloc
+	store 2,mem_ble_l2cap_tx_buff0_ptr
+	setarg MOUSE_BLE_L2CAP_TXBUFF_SIZE
+	store 2,mem_ble_l2cap_tx_buff_size_ptr
+	branch device_store_normal_tx_power
+
+hid_device_compare_addr_store:	
+	storet 3,mem_device_compare_addr
+	storet 3,mem_device_compare_addr+3
+	rtn
+
+hid_device_enable_lpm:
+	jam 1,mem_lpm_mode
+	rtn
+
+hid_device_disable_lpm:
+	jam 0,mem_lpm_mode
+	rtn
+
+/**************************************HID LE Package*****************************************/
+hid_device_le_send_empty_packet:
+	jam 0,mem_customer_data_trigger
+hid_device_le_send_package_data:
+	bpatch patch1a_5,mem_patch1a
+	fetch 1,mem_customer_data_trigger
+	call hid_device_clear_key_data,blank
+hid_device_le_fill_package_data:
+	fetch 1,mem_customer_key_press
+	beq HID_REPORTID_KEY_STANDARD,hid_device_le_fill_standard_key_data
+	beq HID_REPORTID_BIT_CONSUMER_KEY,hid_device_le_fill_bit_consumer_key_data
+	beq HID_REPORTID_CONSUMER_KEY,hid_device_le_fill_multimedia_key_data
+	beq HID_REPORTID_SYSTEM_CTRL,hid_device_le_fill_systemctrl_key_data
+	beq HID_REPORTID_N_KEY_ROLLOVER,keyboard_le_fill_n_key_rollover_key_data	//only keyboard
+hid_device_le_fill_standard_key_data:
+	fetch 1,mem_device_option
+	beq DVC_OP_KEYBOARD,keyboard_le_fill_standard_key_data	
+mouse_le_fill_standard_key_data:
+	jam 8,mem_le_data_len
+keyoard_le_fill_standard_key_data_send:	
+	fetcht 2,mem_le_keyboard_handle
+	branch hid_device_le_fill_data
+
+hid_device_le_fill_bit_consumer_key_data:
+	jam 4,mem_le_data_len
+	fetcht 2,mem_le_multimedia_handle
+	branch hid_device_le_fill_data
+
+hid_device_le_fill_multimedia_key_data:
+	jam 3,mem_le_data_len
+	fetcht 2,mem_le_multimedia_handle
+	branch hid_device_le_fill_data
+
+hid_device_le_fill_systemctrl_key_data:
+	jam 2,mem_le_data_len
+	fetcht 2,mem_le_systemctrl_handle
+	branch hid_device_le_fill_data
+
+hid_device_send_package_data_check:	
+	fetch 1,mem_customer_key
+	beq 1,hid_device_le_send_package_data	
+hid_device_le_send_mouse_data:
+	jam 7,mem_le_data_len
+	fetch 7,mem_mouse_key
+	store 7,mem_customer_key_press+1
+	fetcht 2,mem_le_notify_handle
+	branch hid_device_le_fill_data
+
+hid_device_le_fill_data:
+	bpatch patch1a_6,mem_patch1a
+	fetch 1,mem_le_data_len
+	copy pdata,rega
+	call le_att_malloc_tx_notify
+	fetcht 1,mem_le_data_len
+	copy temp,loopcnt
+	arg mem_customer_key_press+1,contr
+	branch memcpy
+		
+hid_device_clear_key_data:
+	arg 9,loopcnt
+	arg mem_customer_key_press+1,contw
+	branch clear_mem	
+
+hid_device_copy_key_data:
+	arg 10,loopcnt
+	arg mem_customer_key_press_init,contr
+	arg mem_customer_key_press,contw
+	branch memcpy	
+
+hid_device_24g_keyboard_package_data_set:
+	fetch 1,mem_customer_data_trigger
+	call hid_device_clear_key_data,blank
+	arg mem_customer_key_press,regb
+	rtn
+
+
+/**************************************HID USB Package*****************************************/
+
+hid_device_push_mouse_data_to_usb:
+	setarg MS_REPORT_ID
+	store 1,mem_usb_mouse_data
+	fetch 7,mem_mouse_key
+	istore 7,contw
+	branch dongle_usb_tx_ms_data
+
+hid_device_push_keyboard_data_to_usb:
+	fetch 1,mem_customer_data_trigger
+	call hid_device_clear_key_data,blank
+hid_device_push_keyboard_package_data_to_usb:
+	bpatch patch0d_3,mem_patch0d
+	fetch 1,mem_customer_key_press
+	beq HID_REPORTID_KEY_STANDARD,hid_device_push_standard_keyboard_data_to_usb
+	beq KB_SYSTEM_CONCTRL_REPORT_ID,hid_device_push_systemctrl_key_data_to_usb
+	beq KB_MULTIKEY_REPORT_ID,hid_device_push_multimedia_key_data_to_usb
+	beq HID_REPORTID_BIT_CONSUMER_KEY,hid_device_push_bit_consumer_key_data_to_usb
+	beq HID_REPORTID_N_KEY_ROLLOVER,keyboard_push_n_key_rollover_key_data_to_usb
+hid_device_push_standard_keyboard_data_to_usb:
+	call dongle_usb_tx_kb_data
+	arg mem_customer_key_press+1,contr
+	arg mem_usb_kb_data,contw
+	arg 9,loopcnt
+	branch memcpy
+
+hid_device_push_systemctrl_key_data_to_usb:
+	jam USB_EP2_SYSTEMKEY,mem_usb_ep2_data
+	setarg KB_SYSTEM_CONCTRL_REPORT_ID
+	store 1,mem_usb_kb_system
+	fetch 1,mem_customer_key_press+1
+	istore 1,contw
+	branch dongle_usb_tx_enable_ep2
+
+hid_device_push_multimedia_key_data_to_usb:
+	jam USB_EP2_MULTIKEY,mem_usb_ep2_data
+	setarg KB_MULTIKEY_REPORT_ID
+	store 1,mem_usb_kb_multikey
+	fetch 3,mem_customer_key_press+1
+	istore 3,contw
+	branch dongle_usb_tx_enable_ep2
+
+hid_device_push_bit_consumer_key_data_to_usb:
+	jam USB_EP2_BIT_CONSUMER,mem_usb_ep2_data
+	setarg KB_BIT_CONSUMER_REPORT_ID
+	branch hid_device_push_multimedia_key_data_to_usb+2
+
+/**************************************HID LE Service*****************************************/
+
+hid_device_le_parse_att_write_request:	
+	fetch 1,mem_device_fast_conn_flag
+	beq 0xff,le_send_att_write_response_check_auth	
+	fetch 1,mem_device_fast_conn_flag
+	branch le_send_att_write_response_check_auth,blank
+	fetch 1,mem_le_connect_status_flag
+	bbit1 LL_START_ENC_FLAG,le_send_att_write_response_check_auth
+	setarg 0x001a		
+	fetcht 2,mem_le_att_handle
+	isub temp,null
+	nbranch le_send_att_write_response_check_auth,zero
+	branch le_send_att_read_response_error_insufficient_auth
+
+	
+/**************************************g24 search receiver*****************************************/
+hid_device_24g_search_dongle_init:
+	setarg 0
+	store 3,mem_device_search_dongle_action
+	rtn
+
+mouse_24g_search_dongle:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_24G_SEARCH_DONGLE
+hid_device_24g_search_dongle:	
+	fetch 1,mem_mouse_long_mult_flag
+	rtn blank
+	fetch 1,mem_24g_abort_pac
+	rtn blank
+	fetch 1,mem_device_search_dongle_interval
+	increase 1,pdata
+	and_into 3,pdata
+	store 1,mem_device_search_dongle_interval
+	nrtn blank	//400ms
+	jam 0,mem_device_search_dongle_ch
+hid_device_24g_search_dongle_loop:
+	bpatch patch1a_7,mem_patch1a
+	fetch 1,mem_device_search_dongle_ch
+	increase 1,pdata
+	store 1,mem_device_search_dongle_ch
+	sub pdata,G24_CH_NUMBER,null
+	nbranch hid_device_24g_search_dongle_loop_end,positive
+	call g24_reconn_data_prep
+	call g24_transmit_receive_ack
+	nbranch hid_device_24g_search_dongle_loop_retry,sync
+	nbranch hid_device_24g_search_dongle_loop_retry,user3
+	call hid_device_g24_ackpayload_parse
+	call hid_device_24g_search_dongle_success
+hid_device_24g_search_dongle_loop_end:
+	call g24_txbuf_clear
+	fetch 1,mem_device_search_dongle_count
+	increase 1,pdata
+	store 1,mem_device_search_dongle_count
+	beq G24_CH_POLL_COUNT,hid_device_24g_search_dongle_check
+	rtn
+
+hid_device_24g_search_dongle_loop_retry:
+	call g24_ch
+	branch hid_device_24g_search_dongle_loop
+
+hid_device_24g_search_dongle_check:
+	bpatch patch1b_0,mem_patch1b
+	jam 0,mem_device_search_dongle_count
+	fetch 1,mem_device_search_dongle_action
+	rtnbit1 G24_DISCONN_STATE
+	set1 G24_DISCONN_STATE,pdata
+	store 1,mem_device_search_dongle_action
+	fetch 2,mem_device_24g_search_dongle_time_init		//3min
+	store 2,mem_device_no_data_timer
+	fetch 1,mem_device_option
+	beq DVC_OP_MOUSE,mouse_sensor_powerdown
+	rtn 
+	
+hid_device_24g_search_dongle_success:
+	fetch 1,mem_24g_abort_pac
+	branch hid_device_24g_search_dongle_init,blank
+	jam 0,mem_device_search_dongle_count
+	fetch 1,mem_device_search_dongle_action
+	rtnbit0 G24_DISCONN_STATE
+	set0 G24_DISCONN_STATE,pdata
+	store 1,mem_device_search_dongle_action
+	call mouse_no_data_timer_init
+	fetch 1,mem_device_option
+	beq DVC_OP_MOUSE,mouse_init_sensor_wakeup
+	rtn
+
+hid_device_g24_ackpayload_parse:
+	call g24_ackpayload_parse
+	fetch 1,mem_24g_rxbuf+1
+	compare 0x08,pdata,0xf8
+	nrtn true
+	fetch 1,mem_24g_rxbuf+2		// pc sleep mouse ackpayload: 01 08 ff
+	beq 0xff,mouse_24g_hibernate_set
+	store 1,mem_keyboard_led_status
+	rtn
+
+hid_device_before_lpm_set:
+	fetch 1,mem_device_flag
+	rtnne MODE_24G_DEVICE
+	fetch 1,mem_24g_disable_fec1
+	rtn blank
+hid_device_peripheral_clock_off:
+	jam 2,core_clksel			//use rc clock
+	jam 0xf8,core_lpm_ctrl
+	rtn
+
+hid_device_cb_fuction:
+	setarg mouse_spi_write_flash_cb
+	store 2,mem_cb_spi_flash_write_complate
+	setarg mouse_le_transmit
+	store 2,mem_cb_ble_transmit
+	setarg mouse_set_lpm_mult
+	store 2,mem_cb_bt_set_mult
+	rtn
+
+/**************************************g24 search receiver*****************************************/
Index: program/l2cap.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/l2cap.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/l2cap.prog	(working copy)
@@ -0,0 +1,373 @@
+/************************************/
+/*initialize L2CAP related variables*/
+/************************************/
+l2cap_init:
+	branch l2cap_init_wake,wake
+	setarg mem_l2cap_xmem_end
+	arg mem_l2cap_xmem_start,contw
+	isub contw,loopcnt
+	call clear_mem
+l2cap_init_wake:	
+//	branch l2cap_lpm_load_txbuf
+	rtn
+	
+
+/*
+l2cap_check_map:
+//	call l2cap_malloc_is_fifo_full
+//	nrtn blank
+	bpatch patch1b_1,mem_patch1b
+	call l2cap_malloc_get_full_map
+	fetch 1,mem_used_map
+	beq 0,set_pdata_0
+	beq 1,set_pdata_0
+	beq 2,set_pdata_0
+	beq 3,set_pdata_0
+	beq 0x81,set_pdata_0
+	beq 0xc0,set_pdata_0
+	beq 0x80,set_pdata_0
+	beq 0x40,set_pdata_0
+	rtn
+*/
+
+check_l2cap_map:
+	arg 0,queue
+	arg 0,regb
+
+check_l2cap_map_loop:
+	sub queue,7,null
+	nrtn positive
+	qisolate1 rega
+	branch check_l2cap_map_used,true
+	branch check_l2cap_map_used2
+
+check_l2cap_map_used:
+	copy temp,pdata
+	branch check_l2cap_map_used2,blank
+	qset1 regb
+	increase -1,temp
+
+check_l2cap_map_used2:
+	increase 1,queue
+	branch check_l2cap_map_loop
+
+
+
+/*********************************************************/
+//char* malloc(short len)
+//input: rega -> len
+//rtn: regb -> pbuff;return from pdata
+//val: queue -> i
+//val: timeup -> buff_cnt
+/*********************************************************/
+
+
+ble_l2cap_malloc:
+	fetchr regd,2,mem_ble_l2cap_tx_buff0_ptr
+	fetchr rege,2,mem_ble_l2cap_tx_buff_size_ptr
+	call disable_user
+	branch host_l2cap_malloc
+
+/*
+	malloc l2cap buffer
+	input:
+	BT is enable user
+	BLE is disable user
+	rega is want malloc buffer size
+	regd is l2cap buffer start ptr
+	rege is l2cap buffer size
+	output:
+	pdata & contw is buffer ptr
+*/
+host_l2cap_malloc:
+	bpatch patch1b_2,mem_patch1b
+	call l2cap_malloc_is_fifo_full
+	nbranch assert,blank//assert when fifo full
+	call l2cap_malloc_get_full_map
+	arg 8,loopcnt
+host_l2cap_malloc_loop:
+	fetcht 1,mem_used_map
+	sub loopcnt,8,queue
+	qisolate1 temp
+	branch host_l2cap_malloc_next_buffer,true//if(1 == (used_map & (1 << i)))goto next;
+	call host_l2cap_malloc_check_buffer_enough
+	nbranch host_l2cap_malloc_next_buffer,positive//if(buff_cnt <= 0)goto next;
+	call host_l2cap_malloc_into_fifo
+	branch host_l2cap_malloc_succ//return (pbuff);
+host_l2cap_malloc_next_buffer:
+	copy rege,pdata
+	iadd regd,regd		//pbuff += BUFF_SIZE;//point to next buff
+	loop host_l2cap_malloc_loop
+	branch assert	//return NULL
+host_l2cap_malloc_succ:
+	copy regd,pdata
+	copy regd,contw
+	rtn//return pointer via pdata
+
+/*********************************************************/
+//char is_size_enough(char buff_index, short len)
+//input: rega -> len
+//input: loopcnt -> 8-buff_index
+//rtn: positive is diable mean no buffer
+//positive is enable mean get buffer
+/*********************************************************/
+host_l2cap_malloc_check_buffer_enough:
+	bpatch patch1b_3,mem_patch1b
+	sub loopcnt,8,queue
+	arg 0,temp
+	arg 0,timeup
+host_l2cap_malloc_check_buffer_enough_loop:
+	copy queue,pdata
+	beq 8,host_l2cap_malloc_check_buffer_enough_end
+	fetch 1,mem_used_map
+	qisolate1 pdata		//the buffer is used
+	branch host_l2cap_malloc_check_buffer_enough_end,true
+	qset1 timeup
+	copy rege,pdata
+	iadd temp,temp
+	increase 1,queue
+	copy rega,pdata
+	isub temp,null
+	branch host_l2cap_malloc_check_buffer_enough_end,zero//(max_size_fom_buff_index ==  len)
+	branch host_l2cap_malloc_check_buffer_enough_loop,positive//(max_size_fom_buff_index <  len)
+host_l2cap_malloc_check_buffer_enough_end:
+	copy temp,pdata
+	isub rega,null
+	nrtn zero
+	qset1 timeup
+	rtn
+
+/*********************************************************/
+//void buff_into_fifo(char buff_index, char buff_cnt, short len)
+//input: rega -> len
+//input: regc -> buff_index
+//input: timeup -> buff_cnt
+//val:temp ->   (fifo->map)
+/*********************************************************/
+host_l2cap_malloc_into_fifo:
+	bpatch patch1b_4,mem_patch1b
+	call l2cap_malloc_is_fifo_full
+	nbranch assert,blank //fifo full
+	call l2cap_malloc_is_fifo_empty
+	branch host_l2cap_malloc_into_fifo_no_push,blank//fifo empty, no need to push
+	fetch 9,mem_tx_fifo1
+	store 9,mem_tx_fifo0
+	setarg 0
+	istore 3,contw//mem_tx_fifo3
+host_l2cap_malloc_into_fifo_no_push:
+	storer timeup,1,mem_tx_fifo3_map
+	storer regd,2,mem_tx_fifo3_ptr
+	rtn
+
+
+/*********************************************************/
+//void* l2cap_malloc_fifo_out(void)
+//output:len -> temp
+//output:ptr ->pdata
+//only get ptr,not free
+/*********************************************************/
+l2cap_malloc_fifo_out:
+	bpatch patch1b_5,mem_patch1b
+	call l2cap_malloc_fifo_get_first_ptr
+	increase 1,contr
+	ifetch 2,contr //ptr ->pdata
+	rtn
+
+
+/*********************************************************/
+//void free_first_buff_in_fifo(void)
+//only free the first one
+/*********************************************************/
+l2cap_malloc_free:
+	bpatch patch1b_6,mem_patch1b
+	call l2cap_malloc_fifo_get_first_ptr
+	copy contr,contw
+	copy contr,temp
+	setarg 0
+	istore 3,contw
+	rtn
+
+
+/*********************************************************/
+//void l2cap_malloc_discard(void)
+//discard the latest malloc
+/*********************************************************/
+l2cap_malloc_discard:
+	bpatch patch1b_7,mem_patch1b
+	call l2cap_malloc_is_fifo_empty
+	branch assert,blank
+	fetch 3,mem_tx_fifo2
+	store 3,mem_tx_fifo3
+	fetch 3,mem_tx_fifo1
+	store 3,mem_tx_fifo2
+	fetch 3,mem_tx_fifo0
+	store 3,mem_tx_fifo1
+	rtn
+
+
+/*********************************************************/
+//bool fifo_is_full(void)
+//blank == 1: not full
+//blank == 0: full
+/*********************************************************/
+l2cap_malloc_is_fifo_full:
+	bpatch patch1c_0,mem_patch1c
+	fetch 3,mem_tx_fifo0
+	rtn
+
+
+/*********************************************************/
+//bool fifo_nearly_full(void)
+//blank == 1: nearly full
+//blank == 0: not nearly full
+/*********************************************************/
+l2cap_malloc_is_fifo_nearly_full:
+	bpatch patch1c_1,mem_patch1c
+	fetch 3,mem_tx_fifo1
+	rtn
+
+
+/*********************************************************/
+//bool fifo_is_empty(void)
+//blank == 1: empty
+//blank == 0: not empty
+/*********************************************************/
+l2cap_malloc_is_fifo_empty:
+	bpatch patch1c_2,mem_patch1c
+	fetch 3,mem_tx_fifo3
+	rtn
+
+
+/*********************************************************/
+//char* l2cap_malloc_fifo_get_first_ptr(void)
+//output:contr  -->ptr
+/*********************************************************/	
+l2cap_malloc_fifo_get_first_ptr:
+	call l2cap_malloc_is_fifo_empty
+	branch l2cap_malloc_fifo_get_first_ptr_empty,blank // fifo is empty
+	arg mem_tx_fifo0,contr
+l2cap_malloc_free_loop:
+	ifetch 3,contr
+	branch l2cap_malloc_free_loop,blank
+l2cap_malloc_fifo_get_first_ptr_empty:
+	increase -3,contr
+	rtn
+
+
+/*********************************************************/
+//char* l2cap_malloc_get_full_map(void)
+//output:mem_used_map  -->full_map
+//add all maps into one
+/*********************************************************/	
+l2cap_malloc_get_full_map:
+	bpatch patch1c_3,mem_patch1c
+	arg 4,loopcnt
+	arg mem_tx_fifo0_map,contr
+	arg 0,temp
+l2cap_malloc_get_full_map_loop:	
+	ifetch 3,contr
+	and pdata,0xff,pdata
+	ior temp,temp
+	loop l2cap_malloc_get_full_map_loop
+	storet 1,mem_used_map
+	rtn
+
+
+l2cap_lpm_get_wake_lock:
+	arg wake_lock_l2cap_tx,queue
+	branch lpm_get_wake_lock
+
+l2cap_lpm_put_wake_lock:
+	arg wake_lock_l2cap_tx,queue
+	branch lpm_put_wake_lock
+
+	
+/*
+
+
+l2cap_lpm_save_calc_len:
+	bpatch patch1c_4,mem_patch1c
+	arg 0,regb
+	arg mem_tx_fifo0_map,rega
+	increase -2,rega
+l2cap_lpm_save_calc_len_loop:
+	increase 2,rega
+	setarg mem_tx_fifo_end
+	isub rega,null
+	branch l2cap_lpm_save_calc_len_end,zero //end of 2lcap tx fifo
+	ifetch 1,rega
+	increase 1,rega
+	branch l2cap_lpm_save_calc_len_loop,blank
+	ifetcht 2,rega
+	ifetch 2,temp
+	iadd regb,regb
+	increase 4,regb //l2cap header len
+	branch l2cap_lpm_save_calc_len_loop
+l2cap_lpm_save_calc_len_end:
+	copy regb,pdata
+	rtn
+	
+l2cap_lpm_save_txbuf:
+	call l2cap_malloc_get_full_map
+	fetch 1,mem_used_map
+	rtn blank
+	call l2cap_lpm_save_calc_len
+	arg l2cap_lpm_txbuf_len,temp
+	isub temp,null
+	branch l2cap_lpm_get_wake_lock,positive //no enougth space to save l2cap tx data
+	call l2cap_lpm_put_wake_lock
+//	arg mem_l2cap_lpm_txbuf,contw
+	fetch 2,mem_l2cap_lpm_txbuf_ptr
+	copy contr,contw
+	arg mem_tx_fifo0,rega
+l2cap_lpm_save_txbuf_loop:
+	setarg mem_tx_fifo_end
+	isub rega,null
+	rtn zero //end of 2lcap tx fifo
+	ifetch 1,rega  //mem_tx_fifoX_map
+	increase 1,rega
+	nbranch l2cap_lpm_save_txbuf_nempty,blank
+	istore 2,contw // length = 0
+	increase 2,rega
+	branch l2cap_lpm_save_txbuf_loop
+l2cap_lpm_save_txbuf_nempty:
+	ifetch 2,rega //ptr
+	increase 2,rega
+	copy pdata,contr
+	ifetch 2,contr  //l2cap len
+	istore 2,contw
+	copy pdata,loopcnt
+	increase 2,loopcnt //add CID len
+	call memcpy
+	branch l2cap_lpm_save_txbuf_loop
+
+l2cap_lpm_load_txbuf:
+	call l2cap_malloc_get_full_map
+	fetch 1,mem_used_map
+	rtn blank
+	arg mem_tx_fifo0_ptr,rega
+	increase -3,rega //mem_tx_fifo0_ptr -3
+//	arg mem_l2cap_lpm_txbuf,contr
+	copy contr,contw
+	fetch 2,mem_l2cap_lpm_txbuf_ptr
+	copy contw,contr
+l2cap_lpm_load_txbuf_loop:
+	increase 3,rega //mem_tx_fifoX_ptr
+	setarg mem_tx_fifo_end+1
+	isub rega,null
+	rtn zero //end of 2lcap tx fifo
+	ifetch 2,contr
+	branch l2cap_lpm_load_txbuf_loop,blank
+	increase 4,pdata //l2cap header len
+	copy pdata,loopcnt
+	copy contr,regb
+	ifetch 2,rega //ptr
+	copy pdata,contw
+	copy regb,contr
+	increase -2,contr
+	call memcpy
+	branch l2cap_lpm_load_txbuf_loop
+	
+*/
+
+	
Index: program/patch.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/patch.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/patch.prog	(working copy)
@@ -0,0 +1,3271 @@
+//define G24_RETRANSMIT_COMMBINATION_PAIR
+define ADC
+//define UART_LOG
+ifdef UART_LOG
+define LOG_RAW
+define LOG_ENCODE
+endif
+define AUDIO_DEMO
+
+p_start:
+	branch p_patch_array
+
+// zcode start
+p_zcode:
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+	nop 1
+
+p_patch_array:
+	bbit1 8,pf_patch_ext
+	beq patch00_0,p_soft_reset
+	beq patch00_2,p_main_loop
+	beq patch02_0,p_shutdown_radio
+	beq patch03_1,p_set_tx_power
+	beq patch03_2,p_initialize_radio_cont
+	beq patch04_1,mouse_soft_reset
+	beq patch04_5,p_lpm_sleep
+	beq patch05_0,p_lpm_dispatch
+	beq patch0e_2,p_mouse_cb_fuction
+	beq patch0e_3,p_mouse_load_device_info_check
+	beq patch0e_4,p_mouse_default_init
+	beq patch0e_5,p_mouse_param_info_init
+	beq patch0f_1,p_mouse_start_work
+	beq patch0f_5,p_mouse_before_hibernate
+	beq patch0f_6,p_mouse_setgpio_hibernate
+ifdef ADC
+	beq patch10_1,p_mouse_adc_read
+	beq patch10_2,p_mouse_adc_bat_percent_lowpower_out
+endif
+	beq patch10_3,p_mouse_motion
+	beq patch10_7,p_mouse_setting_sensor_type
+	beq patch11_0,p_mouse_check_key_gpio
+	beq patch11_1,p_mouse_3io6key_check
+	beq patch11_3,p_mouse_init_sensor
+	beq patch11_7,p_mouse_priority_bb_event
+	beq patch12_1,p_mouse_le_parse_att
+	beq patch12_0,p_mouse_le
+	beq patch12_3,p_mouse_bb_event_timer
+	beq patch12_4,p_mouse_start_discovery
+//	beq patch12_7,p_mouse_store_device_info
+	beq patch13_0,p_mouse_store_dpi_info_check
+	beq patch14_5,p_mouse_24g_package_data
+	beq patch15_1,p_mouse_multi_led_type_blink
+	beq patch19_7,p_app_init
+ifdef AUDIO_DEMO
+	beq patch13_2,p_mouse_idle
+	beq patch1f_7,p_sadc_calibration
+endif
+	beq patch1d_2,p_otp_read_data
+	beq patch1d_3,p_spid_init
+	beq patch1d_4,p_spid_write_reg
+	beq patch1d_5,p_spid_read_regs
+	branch assert
+
+pf_patch_ext:
+	beq patch20_2,p_enable_adc
+	beq patch28_4,p_le_slave_more_data
+	beq patch2c_6,p_le_parse_ll
+	beq patch33_0,p_g24_dispatch
+	beq patch33_3,p_g24_receive_payload
+	beq patch34_2,p_g24_read_len_pid_crc
+	beq patch33_7,p_g24_transmit_packet
+	beq patch34_0,p_g24_transmit_prep
+	beq patch35_1,p_g24_chamap_param_update
+	// beq patch35_3,p_g24_pair_param_init
+	beq patch35_4,p_g24_pair_dispatch
+	beq patch37_5,p_g24_reconn_dispatch
+	beq patch37_6,p_g24_txbuf_clear
+	beq patch37_7,p_g24_reconn_device_fail
+	beq patch38_2,p_g24_transmit_no_interrupt
+	beq patch38_6,p_g24_transmit_loop
+ifdef G24_RETRANSMIT_COMMBINATION_PAIR
+	beq patch39_1,p_g24_retransmit
+endif
+	beq patch39_4,p_g24_transmit_hop_process
+	beq patch39_5,p_g24_send_abort_packet
+	beq patch3e_3,p_initialize_radio2
+	rtneq patch3f_7
+	branch assert
+
+p_soft_reset:
+	nbranch soft_reset+1,wake
+	until null,lpo_edge
+	until null,lpo_edge
+	clear_stack
+	jam 0x73,core_spid_ctrl
+	branch soft_reset+2
+
+p_set_tx_power:
+	fetch 1,mem_tx_power
+	beq TX_POWER_F20DB,set_tx_power_f20db
+	branch set_tx_power_3db
+
+p_g24_chamap_param_update:
+p_mouse_store_device_info:
+	rtn
+
+p_lpm_dispatch:
+	call lpo_calibration
+	fetch 3,mem_clks_per_lpo
+	rtn blank
+	fetch 1,mem_mouse_multi_led_blink_enable
+	nrtn blank
+	fetch 1,mem_mouse_le_delay_enter_lpm_time
+	nrtn blank
+	branch lpm_dispatch+4
+
+p_main_loop:	
+ifdef SECURE_CONNECTION
+	call sp_calc_sequence_256
+	call sp_calc_sequence_256_check
+endif
+	call le_advertising_dispatch
+	call idle_dispatch
+	call app_process_idle
+	call g24_dispatch
+	call connection_dispatch
+	call lpm_dispatch
+	branch p_main_loop
+//=================================yc bug fixed patch===================================//
+p_otp_read_data:
+	call enable_otp_read
+	call otp_read_data1
+	branch otp_disable_chgpump
+
+p_mouse_3io6key_check:
+	copy regc,pdata
+	store 1,mem_mouse_key_status
+	lshift pdata,pdata
+	copy pdata,regb
+	copy temp,regc
+	call gpio_out_active
+	copy regc,temp
+	branch mouse_3io6key_check_next
+
+p_shutdown_radio:
+	jam 0,0x8900
+	branch shutdown_radio+1
+
+p_initialize_radio_cont:
+	until null,lpo_edge
+	jam 0x0d,0x8946
+	jam 0x10,0x896f
+	jam 0xcd,0x8a13
+//	jam 0x10,0x8a06
+	fetch 1,0x8a06
+	and pdata,0xfc,pdata
+	store 1,0x8a06
+	until null,lpo_edge
+	jam 0x88,0x813c
+	until null,lpo_edge
+	branch initialize_radio_cont+6
+
+p_initialize_radio2:
+	until null,lpo_edge
+	branch initialize_radio2+1
+
+p_lpm_sleep:
+	// fetch 2,mem_cb_before_lpm_sleep
+	// call callback_func
+	call lpm_puchk_set_check
+p_lpm_sleep_skip_cb_function:
+	fetch 4,mem_sleep_counter_all	// sleep total time, 32k unit
+	iadd temp,pdata
+	store 4,mem_sleep_counter_all
+	call lpm_save_context
+	fetch 1,mem_lpm_hv_sel
+	set1 LPM_DOZE_EN_BIT, pdata
+	call lpm_write_sel_hv
+	ncall lpm_preon_counter,wake
+	until null,lpo_edge
+	copy clkn,pdata
+	store 6,mem_sleep_clkn
+	branch lpm_sleep_skip_cb_function+10
+
+ifdef ADC
+p_mouse_adc_read:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit0 MOUSE_ENABLE_ADC
+	fetch 1,mem_ms_adc_mode
+	rtnne ADC_BATTERY
+	call mouse_adc_gpio_set
+p_mouse_adc_read_start:
+	call enable_adc
+	call vdd_calculate_by_mode
+	store 2,mem_device_vdd_now_vol
+p_mouse_adc_data_process:
+	fetch 2,mem_device_vdd_now_vol	// BAT= 1.5V,  a = a/10
+	div pdata,10
+	call get_div_result
+	store 2,mem_device_vdd_now_vol
+	branch mouse_adc_data_process
+
+p_mouse_adc_bat_percent_lowpower_out:
+	ifetch 8,rega
+	store 8,mem_pdatatemp	
+p_mouse_adc_bat_percent_lowpower_out_battery:
+	call adc_clear_no_power_flag
+	call p_adc_clear_low_power_flag
+	fetch 2,mem_pdatatemp+6
+	fetcht 2,mem_pdatatemp+2	        //shutdown voltage
+	isub temp,null
+	ncall adc_set_no_power_flag,positive
+	fetcht 2,mem_pdatatemp+4		//low voltage
+	isub temp,null
+	ncall p_adc_set_low_power_flag,positive
+	branch mouse_adc_bat_level_set
+
+p_adc_clear_low_power_flag:
+	fetcht 1,mem_adc_power_flag
+	set0 0,temp
+	branch adc_set_power_flag
+
+p_adc_set_low_power_flag:
+	fetcht 1,mem_adc_power_flag
+	set1 0,temp
+	branch adc_set_power_flag
+endif
+
+p_mouse_load_device_info_check:
+	jam ZCODE_10,mem_zcode_temp_param0
+	branch p_zcode_entrance
+
+
+//============================fuction fixed patch ================================//
+
+/* pdata 6:0 is reg address, 15:8 is data to write */
+p_spid_write_reg:
+	fetch 2,mem_spid_tbuf
+	store 2,mem_spid_tbuf_new
+	jam 2,core_spid_txlen
+	jam 0,core_spid_rxlen
+	jam spid_start,core_misc_ctrl
+	branch wait_spid_done
+
+p_spid_read_regs:	
+	fetch 2,mem_spid_tbuf
+	store 1,mem_spid_tbuf_new
+	jam 1,core_spid_txlen
+	storet 2,core_spid_rxlen
+	jam spid_start,core_misc_ctrl
+	call wait_spid_done
+	fetch 1,mem_spid_rbuf_new
+	rtn
+
+p_spid_init:
+p_spid_init_common:
+	fetch 1,mem_spi_init_clk
+	store 1,core_spid_ctrl	// A7530 should at least 34, or write fail
+	fetch 1,mem_spi_init_delay_time
+	store 1,core_spid_delay	// 4us delay
+	setarg mem_spid_tbuf_new
+	store 2,core_spid_txaddr
+	setarg mem_spid_rbuf_new
+	store 2,core_spid_rxaddr
+	branch twspi_disable
+
+p_mouse_lpm_wake_param_init:
+	setarg 0
+//	store 5,mem_spid_tbuf_new
+	store 1,mem_voice_queue_count
+	rtn
+
+p_app_init:
+p_mouse_init:
+	call p_mouse_lpm_wake_param_init,wake
+	branch mouse_init	
+
+p_mouse_before_hibernate:
+	call disable_authrom 
+	call mouse_setgpio_hibernate
+	branch mouse_before_hibernate_next
+
+p_mouse_bb_event_timer:
+	call p_mouse_le_send_conn_param_update_timer
+	call p_mouse_enter_lpm_timer
+	call mouse_low_voltage_led_timer
+	call mouse_adc_read
+	//led
+	call mouse_logo_led_on_timer
+	call mouse_led_multi_timer
+	call mouse_dpi_led_blink_delay_timer
+	//key
+	call mouse_dpi_key_check_long_press
+	call mouse_bt_discovery_check
+	call mouse_commbination_key_process
+	call mouse_commbination_dpi_check_timer
+	call mouse_commbination_key_select_device_timer
+
+	call p_mouse_key_info_store_delay_timer
+	call mouse_current_mult_update_timer
+	call mouse_wheel_trigger_timer
+	call mouse_store_information_delay_timer
+	call mouse_check_no_data_timeout_timer
+	
+	//24g
+	call p_mouse_m_key_long_press_timer
+	call p_mouse_24g_long_sleep_param_update_timer
+	branch mouse_bb_event_timer_next
+
+
+p_mouse_enter_lpm_timer:
+	fetch 1,mem_mouse_le_delay_enter_lpm_time
+	rtn blank
+	pincrease -1
+	store 1,mem_mouse_le_delay_enter_lpm_time
+	rtn
+p_mouse_m_key_long_press_timer:
+	fetch 1,mem_mouse_m_key_press_flag
+	rtn blank
+	arg mem_mouse_m_key_press_count,regc
+	arg p_g24_send_http_info_enable,regb
+	branch timer_single_step
+
+
+p_mouse_24g_long_sleep_param_update_timer:
+	arg mem_24g_long_sleep_param_update_timer,regc
+	arg p_mouse_24g_long_sleep_normal_param,regb
+	branch timer_single_step
+p_mouse_24g_long_sleep_normal_param:
+	jam 1,mem_device_tx_heart_data_flag
+	branch mouse_24g_long_sleep_normal_param
+	
+p_mouse_le_send_conn_param_update_timer:
+	arg mem_mouse_le_send_conn_param_update_timer,regc
+	arg mouse_updata_le_param,regb
+	branch timer_single_step
+	
+p_mouse_priority_bb_event:
+	copy regc,pdata
+	beq BT_EVT_24G_ATTEMPT_FAIL,p_mouse_24g_attempt_fail
+	beq BT_EVT_LE_PARSE_CONN_PAPA_UPDATE_RSP,p_mouse_le_conn_param_update_rsp_recieved
+	beq BT_EVT_LE_CONNECTED,p_mouse_le_bb_event_connected
+	beq BT_EVT_LE_DISCONNECTED,p_mouse_le_bb_disconnected
+	beq BT_EVT_LE_START_ENC,p_mouse_le_ll_start_encryt
+	branch mouse_priority_bb_event+2
+
+p_mouse_le_ll_start_encryt:
+	fetch 1,mem_device_le_reconnect_flag
+	beq 1,p_mouse_le_ll_reconn_start_encryt
+	jam 20,mem_le_start_encrypt_timer
+	branch mouse_le_ll_enable_start_enc_flag
+
+p_mouse_le_ll_reconn_start_encryt:
+	call mouse_updata_le_param
+	jam 5,mem_le_start_encrypt_timer
+	branch mouse_le_ll_enable_start_enc_flag
+
+p_mouse_le_conn_param_update_rsp_recieved:
+	fetch 1,mem_mouse_le_send_conn_param_update
+	nrtn blank
+	jam 1,mem_mouse_le_send_conn_param_update
+	jam 30,mem_mouse_le_send_conn_param_update_timer
+	rtn
+
+p_mouse_le_bb_event_connected:
+	call mouse_le_bb_event_connected
+	// fetch 1,mem_device_le_reconnect_flag
+	// rtn blank
+	jam 0x64,mem_mouse_le_delay_enter_lpm_time
+	rtn
+
+p_mouse_le_bb_disconnected:
+	setarg 0
+	store 1,mem_mouse_le_send_conn_param_update
+	store 1,mem_mouse_le_send_conn_param_update_timer
+	branch mouse_le_bb_disconnected
+
+p_mouse_24g_attempt_fail:
+	call mouse_soft_agc_disable
+	call device_fetch_normal_tx_power
+	fetch 1,mem_24g_attempt_fail_flag
+	nbranch mouse_24g_hibernate_set,blank
+	jam ZCODE_11,mem_zcode_temp_param0
+	branch p_zcode_entrance
+
+
+p_mouse_le:
+	fetch 1,mem_voice_enable
+	nrtn blank
+	call le_fifo_check_nearly_full
+	nrtn blank
+	fetch 1,mem_device_fast_conn_flag
+	beq 0xff,p_mouse_le_next
+	fetch 1,mem_le_connect_status_flag
+	and pdata,0x03,pdata
+	rtnne 0x03
+p_mouse_le_next:
+	fetch 1,mem_ms_le_lpm_flag
+	call p_mouse_le_lpm_set,blank
+	fetch 1,mem_mouse_clear_sensor_data_flag
+	call mouse_clear_sensor_data_by_reset,blank
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_24G_PAIRING_FLAG,p_mouse_le_send_empty_packet
+	bbit1 MOUSE_SELECT_DEVICE_FLAG,p_mouse_le_send_empty_packet
+	bbit1 MOUSE_BT_DISCOVERY_BUTTON_DOWN_FLAG,p_mouse_le_send_empty_packet
+	bbit1 MOUSE_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG,p_mouse_le_send_empty_packet
+	call p_mouse_motion
+	call mouse_check_125Hz
+	nrtn user
+	call mouse_current_mult_update
+	call p_mouse_data_xy_release
+	branch mouse_le_package+5
+
+p_mouse_data_xy_release:
+	fetch 1,mem_sensor_motion_gpio
+	rtnne GPIO_DISABLE
+	fetch 1,mem_mouse_long_mult_flag
+	rtn blank
+	fetch 1,mem_ms_le_spi_reset_type
+	beq 1,p_mouse_le_p32xx_spi_reset
+	beq 2,p_mouse_le_p3212_spi_reset
+	beq 3,p_mouse_le_pka8g2_spi_reset
+	rtn
+
+p_mouse_le_p32xx_spi_reset:
+	setarg PAN_REG_PID_L
+	call twspi_read
+	bne P32XX_ID1,mouse_p3065_judge 
+p_mouse_le_sensor_poweron_set:
+	fetch 1,mem_mouse_long_mult_flag
+	increase -1,pdata
+	store 1,mem_mouse_long_mult_flag
+	setarg 0
+	store 4,mem_mouse_x
+	branch mouse_sensor_poweron
+
+p_mouse_le_p3212_spi_reset:
+	setarg PAN_REG_PID_L
+	call twspi_read
+	bne P32XX_ID1,mouse_twspi_reset
+	branch p_mouse_le_sensor_poweron_set
+
+p_mouse_le_pka8g2_spi_reset:
+	setarg PAN_REG_PID_L
+	call twspi_read
+	bne PKA8G2_ID1,mouse_twspi_reset
+	branch p_mouse_le_sensor_poweron_set
+
+p_mouse_le_send_empty_packet:
+	setarg 0
+	store 7,mem_mouse_key
+	branch hid_device_le_send_mouse_data
+
+p_mouse_le_lpm_set:
+	jam 1,mem_ms_le_lpm_flag
+	branch hid_device_enable_lpm
+
+p_g24_reconn_device_fail:
+	fetch 1,mem_24g_fast_conn_enable
+	branch g24_ch,blank
+	fetch 2,mem_24g_reconn_count
+	increase 1,pdata
+	store 2,mem_24g_reconn_count
+	isolate1 9,pdata
+	fetch 1,mem_24g_reconn_type
+	beq PAIR_AND_RECEIVER,p_g24_reconn_pair_and_receiver
+	branch g24_reconn_device_fail+7
+
+p_g24_reconn_pair_and_receiver:
+	branch g24_reconn_receiver_addr,true
+	branch g24_pair_init_param
+
+ifdef G24_RETRANSMIT_COMMBINATION_PAIR
+p_g24_retransmit:
+p_mouse_g24_retransmit:
+	fetch 1,mem_device_need_soft_reset
+	nrtn blank
+	call p_mouse_g24_retransmit_100ms_timer
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	rtnbit1 MOUSE_24G_PAIRING_FLAG
+	branch g24_retransmit0
+p_mouse_g24_retransmit_100ms_timer:
+	arg 12,queue
+	call timer_check
+	nrtn blank
+	call mouse_commbination_key_process
+	branch mouse_g24_retransmit_100ms_timer_next
+endif
+
+p_mouse_setgpio_hibernate:
+	call p_mouse_sensor_spi_reset
+	branch mouse_setgpio_hibernate+2
+
+p_mouse_sensor_spi_reset:
+	call mouse_read_sensor_id
+	beq P32XX_ID1,mouse_set_sdio_high
+	beq P3065_ID1,mouse_set_sdio_high
+	beq PKA8G2_ID1,mouse_set_sdio_high
+	call mouse_twspi_reset
+	nop 1200
+	branch p_mouse_sensor_spi_reset
+
+p_mouse_ka8g2_id2_judge:
+	call mouse_sensor_poweron
+	fetch 1,mem_sensor_id2
+	// beq KA5857_ID2,mouse_ka5857_init_param
+	beq PKA8G2_ID2,p_mouse_ka8g2_init_param
+	branch mouse_ka8g2_id2_judge+2
+p_mouse_ka8g2_init_param:
+	jam KA8G2,mem_config_sensor_type
+	arg mem_sensor_ka8g2_init_new,regc
+	branch mouse_sensor_wr_seq
+
+p_mouse_init_sensor:
+	call mouse_read_sensor_id
+	beq P32XX_ID1,p_mouse_init_p32xx_id2_judge
+	// beq P3065_ID1,mouse_init_p3065
+	beq PKA8G2_ID1,p_mouse_ka8g2_id2_judge
+	branch mouse_init_sensor+3
+p_mouse_init_p32xx_id2_judge:
+	fetch 1,mem_sensor_id2
+	beq P_MX8650,p_mouse_mx8650_init_param
+	branch mouse_init_p32xx_id2_judge+2
+p_mouse_mx8650_init_param:
+	jam MX8650,mem_config_sensor_type
+	call mouse_sensor_reset
+	call delay_10ms
+	arg mem_sensor_8650_init_new,regc
+	branch mouse_sensor_poweron_end
+
+p_mouse_check_key_gpio:
+	fetch 1,mem_24g_shutdown_flag
+	ncall mouse_check_key_gpio_once,blank
+	arg 0,rega
+	call mouse_check_lkey_gpio
+	call mouse_check_rkey_gpio
+	call mouse_check_mkey_gpio
+	// call mouse_check_bkkey_gpio
+	// call mouse_check_fwkey_gpio
+	// call mouse_check_firekey_gpio
+	// call mouse_check_customerkey_gpio
+	// copy rega,pdata
+	// rtn
+	branch mouse_check_key_gpio_next
+
+p_mouse_motion:
+	jam 0,mem_ms_rf_data_flag
+	call hid_device_copy_key_data
+	disable user
+	setarg 0
+	store 6,mem_mouse_x
+	call p_mouse_check_sensor_data
+	call mouse_set_sdio_high
+//	setarg 0x0089
+//	call twspi_write	
+//	call mouse_setting_sensor_type
+	call mouse_zwheel
+	call mouse_t_zwheel
+	call p_mouse_key
+	fetch 1,mem_customer_key
+	ncall enable_user,blank
+	fetch 1,mem_mouse_key
+	and_into 0x1f,pdata
+	store 1,mem_mouse_key
+	call p_mouse_check_idle_key_state
+	fetch 1,mem_mouse_fuction_key
+	ncall enable_user,blank
+
+	call p_mem_mouse_key_ior
+	nbranch mouse_drawing_optima_init,user
+	jam 0,mem_device_tx_heart_data_flag
+	jam 1,mem_ms_rf_data_flag
+	branch mouse_motion_rf_data
+
+p_mouse_key:
+	call mouse_check_firekey_gpio
+	fetch 1,mem_fire_key_flag
+	nbranch fire_key_press,blank
+	fetch 1,mem_fire_key_status
+	nbranch fire_key_process,blank
+	
+	call mouse_check_key_gpio
+	call p_mouse_m_key_press_check
+	branch mouse_key_next
+
+p_mouse_m_key_press_check:
+	copy rega,pdata
+	beq MOUSE_M_BUTTON,p_mouse_m_key_press
+p_mouse_m_key_release:
+	fetch 1,mem_mouse_m_key_press_flag
+	rtn blank
+	jam 0,mem_mouse_m_key_press_flag
+	rtn
+p_mouse_m_key_press:
+	fetch 1,mem_mouse_m_key_press_flag
+	nrtn blank
+	jam 1,mem_mouse_m_key_press_flag
+	jam 0x32,mem_mouse_m_key_press_count
+	rtn
+
+
+p_mouse_check_idle_key_state:
+	fetch 1,mem_mouse_fuction_key
+	fetcht 1,mem_mouse_fuction_key_last
+	store 1,mem_mouse_fuction_key_last
+	ixor temp,pdata
+	sub pdata,0,null
+	rtn zero
+	branch enable_user
+
+p_mem_mouse_key_ior:
+	fetch 1,mem_mouse_key
+	fetcht 1,mem_mouse_fuction_key
+	ior temp,pdata
+	store 1,mem_mouse_key
+	rtn
+
+p_mouse_check_sensor_data:
+	fetch 1,mem_spi_write_flash_sm
+	rtnne FLASH_SM_NO_BUYS
+	call mouse_sensor_spi_init
+ 	fetch 1,mem_config_sensor_type
+// 	beq P3205,p_mouse_p32xx_sensor_motion
+// beq P3065,p_mouse_p32xx_sensor_motion
+// 	beq KA8,p_mouse_p32xx_sensor_motion
+// 	beq P3204,p_mouse_p32xx_sensor_motion
+	beq P3212,p_mouse_p3212_sensor_motion
+// beq P3065_xy,p_mouse_p32xx_sensor_motion
+//	beq P8009,mouse_p8009_sensor_motion	
+	beq KA8G2,p_mouse_pka8g2_sensor_motion
+// 	beq KA5857,p_mouse_pka8g2_sensor_motion
+	//branch p_mouse_p32xx_sensor_motion
+p_mouse_p32xx_sensor_motion:
+	jam 1,mem_ms_le_spi_reset_type
+	branch mouse_p32xx_sensor_motion
+
+p_mouse_p3212_sensor_motion:
+	jam 2,mem_ms_le_spi_reset_type
+	branch mouse_p3212_sensor_motion
+
+p_mouse_pka8g2_sensor_motion:
+	jam 3,mem_ms_le_spi_reset_type
+	branch mouse_pka8g2_sensor_motion
+
+p_mouse_param_info_init:
+	jam ZCODE_01,mem_zcode_temp_param0
+	branch p_zcode_entrance
+
+
+p_mouse_start_work:	
+	jam ZCODE_00,mem_zcode_temp_param0
+	branch p_zcode_entrance
+
+
+p_mouse_start_discovery:
+	call mouse_sensor_powerdown
+	call p_mouse_eeprom_load_le_att_list_info
+	call p_mouse_le_param_default
+	branch mouse_start_discovery+1
+
+p_mouse_setting_sensor_type:
+	call p_mouse_sensor_spi_reset
+	branch mouse_setting_sensor_type+1
+//=======================================ble protocol fuction patch =========================================//
+
+p_le_slave_more_data:
+	call p_le_audio_data_out_from_queue
+	branch le_slave_more_data+1
+
+p_le_parse_ll:
+	fetch 1,mem_le_packet_llid
+	rtneq LLID_RESERVED
+	beq LLID_LE_LL,p_le_parse_ll_next
+	branch le_parse_l2cap
+p_le_parse_ll_next:
+	fetch 1,mem_le_rxbuf_data_ll_opcode
+	beq LL_LENGTH_REQ,p_le_parse_length_req
+	branch le_parse_ll+1
+p_le_parse_length_req:
+	fetch 4,mem_le_rxbuf_data_ll_control_data+4
+	branch p_le_send_unknown_rsp,blank
+	branch le_parse_length_req
+
+p_mouse_le_parse_att:
+	copy rega,contr
+	ifetch 3,contr
+	store 3,mem_le_att_opcode
+	beq ATTOP_READ_BLOB_REQUEST,p_le_parse_att_read_blob_request
+	beq ATTOP_READ_REQUEST,p_mouse_le_parse_att_read_request
+	beq ATTOP_WRITE_REQUEST,p_mouse_le_parse_att_write_request
+	beq ATTOP_WRITE_COMMAND,p_le_parse_att_write_command
+	beq ATTOP_PREPARE_WRITE_REQUEST,p_le_parse_att_prepare_write_request
+	branch le_parse_att2	
+
+p_le_parse_att_prepare_write_request:
+	call le_fifo_check_nearly_full
+	ncall l2cap_malloc_free,blank
+	call le_parse_att_prepare_write_request
+
+	fetch 2,mem_le_payload_ptr
+	add pdata,7,contr
+	ifetch 2,contr
+	nrtn blank	//offset
+
+	call le_fifo_check_nearly_full
+	ncall l2cap_malloc_free,blank
+	fetch 2,mem_le_payload_ptr
+	copy pdata,rega
+	add rega, 9, rega
+	branch p_le_parse_att_write_command+1
+
+p_le_parse_att_read_blob_request:
+	ifetch 2,contr
+	store 2,mem_le_att_offset
+	iforce rega
+	fetcht 2,mem_le_att_handle
+p_le_send_att_read_blob_response:
+	call le_att_get_handle_ptr 
+	branch le_send_att_error_response_notfound,blank
+	ifetch 2,contr
+	isub rega,loopcnt
+	branch le_send_att_read_blob_response+4
+
+
+p_mouse_le_parse_att_read_request:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_LE_BATTERY_SERVICE_CANCEL,p_le_parse_att_read_request
+	call le_check_encrypt_state
+	fetcht 2,mem_le_att_handle
+	fetch 1,mem_le_configuration
+	bbit1 BIT_BLE_READ_AUTH,p_mouse_le_send_att_read_response_check_auth
+p_mouse_le_send_att_read_response:
+	fetch 2,mem_le_att_handle
+	beq 0x13,le_send_att_error_response_notfound
+	fetcht 2,mem_le_att_handle
+	branch p_le_send_att_read_response
+
+p_mouse_le_send_att_read_response_check_auth:
+	fetch 2,mem_le_pairing_handle
+	isub temp,null
+	nbranch p_mouse_le_send_att_read_response,zero
+	nbranch p_mouse_le_send_att_read_response,user
+	branch le_send_att_read_response_error_insufficient_auth
+
+p_le_parse_att_read_request:
+	call le_check_encrypt_state
+	fetcht 2,mem_le_att_handle
+	fetch 1,mem_le_configuration
+	bbit1 BIT_BLE_READ_AUTH,p_le_send_att_read_response_check_auth
+//input:temp is handle
+p_le_send_att_read_response:
+	call le_att_get_handle_ptr2
+	nbranch le_send_att_error_response_notfound,zero
+	call le_send_att_read_response_check_handle,user
+	rtn user
+	call le_att_get_handle_ptr_found
+	increase -2,contr
+	ifetch 2,contr
+	arg UUID_CHRCTR_DEVICE_NAME,temp
+	isub temp,null
+	branch le_send_device_name,zero
+	arg UUID_CHRCTR_REPORT_MAP,temp
+	isub temp,null
+	branch p_le_modify_report_map_header,zero
+	branch le_send_att_read_response_next
+	// copy contr,regc
+	// call le_get_search_max_mtu_data
+	// copy regc,contr
+	// ifetcht 1,contr
+	// increase 1,temp
+	// call not_greater_than
+	// branch le_send_att_read_response_less
+
+p_le_send_att_read_response_check_auth:
+	fetch 2,mem_le_pairing_handle
+	isub temp,null
+	nbranch p_le_send_att_read_response,zero
+	nbranch p_le_send_att_read_response,user
+	branch le_send_att_read_response_error_insufficient_auth
+
+p_le_modify_report_map_header:
+	copy contr,regc
+	call le_get_search_max_mtu_data
+	copy regc,contr
+	ifetcht 2,contr
+	increase 1,temp
+	call not_greater_than
+	branch le_send_att_read_response_less
+
+
+//======================================= ble receive app protocol data patch ==================================//
+p_mouse_le_parse_att_write_request:
+	call p_le_parse_att_write_command
+	call le_fifo_check_nearly_full
+	ncall l2cap_malloc_free,blank
+	// branch hid_device_le_parse_att_write_request
+p_hid_device_le_parse_att_write_request:
+	fetch 1,mem_device_fast_conn_flag
+	beq 0xff,le_send_att_write_response_check_auth	
+	fetch 1,mem_device_fast_conn_flag
+	branch le_send_att_write_response_check_auth,blank
+	fetch 1,mem_le_connect_status_flag
+	bbit1 LL_START_ENC_FLAG,le_send_att_write_response_check_auth
+	
+	fetch 1,mem_att_write_resposnse_error_insufficient_auth
+	nbranch le_send_att_read_response_error_insufficient_auth,blank
+	jam 1,mem_att_write_resposnse_error_insufficient_auth
+	branch le_send_att_write_response_check_auth
+
+
+p_le_parse_att_write_command:
+	call le_parse_att_write_command
+	fetcht 2,mem_le_att_handle
+	fetch 2,mem_le_protocol_rx_handle
+	isub temp,null
+	nrtn zero
+p_mouse_le_receive_driver_data:
+	copy rega,contr
+	ifetch 1,contr
+	rtnne START_FLAG
+	ifetch 1,contr
+	ifetch 1,contr
+	beq OPCODE_VOICE_START,p_ms_le_receive_voice_start_data
+	beq OPCODE_VOICE_END,p_ms_le_receive_voice_end_data
+	beq OPCODE_GET_DEVICE_INFO,p_ms_le_receive_get_device_info_data
+	beq OPCODE_GET_DPI,p_ms_le_receive_get_dpi_data
+	beq OPCODE_SET_DPI,p_ms_le_receive_set_dpi_data
+	beq OPCODE_GET_BATTERY,p_ms_le_receive_get_battery_data
+	beq OPCODE_GET_DEVICE_TYPE,p_ms_le_receive_get_device_type_data
+	beq OPCODE_SET_KEY_FUCTION,p_ms_le_receive_set_key_fuction_data
+	rtn
+
+//voice on
+p_ms_le_receive_voice_start_data:
+	call le_fifo_check_nearly_full
+	ncall l2cap_malloc_free,blank
+	call p_audio_enable
+	setarg 0x02
+	store 1,mem_le_tx_buffer0_omemalloc
+	setarg OPCODE_VOICE_START
+	istore 1,contw
+	setarg 0x10
+	istore 1,contw
+	branch p_ms_le_tx_protocol_header_interface
+
+//voice end
+p_ms_le_receive_voice_end_data:
+	call le_fifo_check_nearly_full
+	ncall l2cap_malloc_free,blank
+	call p_audio_disable
+	setarg 0x01
+	store 1,mem_le_tx_buffer0_omemalloc
+	setarg OPCODE_VOICE_END
+	istore 1,contw
+	branch p_ms_le_tx_protocol_header_interface
+
+//get device info	
+p_ms_le_receive_get_device_info_data:
+	call le_fifo_check_nearly_full
+	ncall l2cap_malloc_free,blank
+	setarg DEVICE_INFO_LEN
+	store 1,mem_le_tx_buffer0_omemalloc
+	setarg OPCODE_GET_DEVICE_INFO
+	istore 1,contw
+	arg AUTH_LEN,loopcnt
+	arg mem_ms_auth_appkey,contr
+	call memcpy
+	call p_g24_ms_info_set
+	branch p_ms_le_tx_protocol_header_interface
+
+//get dpi
+p_ms_le_receive_get_dpi_data:
+	jam APP_ASK,mem_mouse_dpi_type
+p_ms_le_tx_dpi_info:
+	call le_fifo_check_nearly_full
+	ncall l2cap_malloc_free,blank
+	setarg NOR_PRO_HEADER_LEN
+	store 1,mem_le_tx_buffer0_omemalloc
+	setarg OPCODE_GET_DPI
+	istore 1,contw
+	fetch 1,mem_mouse_dpi
+	istore 1,contw
+	fetch 1,mem_mouse_dpi_type
+	istore 1,contw
+	branch p_ms_le_tx_protocol_header_interface
+
+//set dpi
+p_ms_le_receive_set_dpi_data:
+	copy rega,contr
+	call p_mouse_receive_dpi_check
+	call le_fifo_check_nearly_full
+	ncall l2cap_malloc_free,blank
+	setarg SET_DPI_LEN
+	store 1,mem_le_tx_buffer0_omemalloc
+	setarg OPCODE_SET_DPI
+	istore 1,contw
+	fetch 1,mem_mouse_dpi_set_result
+	istore 1,contw
+	branch p_ms_le_tx_protocol_header_interface
+
+//get battery info
+p_ms_le_receive_get_battery_data:
+	call le_fifo_check_nearly_full
+	ncall l2cap_malloc_free,blank
+	branch mouse_le_battery_level_updata
+
+//get device type info
+p_ms_le_receive_get_device_type_data:
+	call le_fifo_check_nearly_full
+	ncall l2cap_malloc_free,blank
+	fetch 1,mem_mouse_device_type
+	increase 2,pdata
+	store 1,mem_le_tx_buffer0_omemalloc
+	setarg OPCODE_GET_DEVICE_TYPE
+	istore 1,contw
+	fetchr loopcnt,1,mem_mouse_device_type
+	arg mem_mouse_device_type+1,contr
+	call memcpy
+	branch p_ms_le_tx_protocol_header_interface
+	
+//set key function
+p_ms_le_receive_set_key_fuction_data:
+	copy rega,contr
+	call p_mouse_receive_key_fuction_check
+	call le_fifo_check_nearly_full
+	ncall l2cap_malloc_free,blank
+	setarg 0x07
+	store 1,mem_le_tx_buffer0_omemalloc
+	setarg OPCODE_SET_KEY_FUCTION
+	istore 1,contw
+	setarg 1	//success
+	istore 1,contw
+	branch p_ms_le_tx_protocol_header_interface
+
+p_ms_le_tx_key_state_interface:
+	storet 1,mem_ms_recv_ackpayload_temp
+	call le_fifo_check_nearly_full
+	ncall l2cap_malloc_free,blank
+	setarg KEY_STATE_PAYLOAD_LEN
+	store 1,mem_le_tx_buffer0_omemalloc
+	fetch 1,mem_ms_recv_ackpayload_temp
+	istore 1,contw
+	fetch 1,mem_ms_tx_pro_key_val
+	istore 1,contw
+	//branch p_ms_le_tx_protocol_header_interface
+p_ms_le_tx_protocol_header_interface:
+	arg 63,rega
+	fetcht 2,mem_le_protocol_tx_handle
+	call le_att_malloc_tx_notify
+	setarg START_FLAG
+	istore 1,contw
+	arg 62,loopcnt
+	arg mem_le_tx_buffer0_omemalloc,contr
+	call memcpy_fast
+	arg 62,loopcnt
+	arg mem_le_tx_buffer0_omemalloc,contw
+	branch memset0
+	
+
+p_ms_le_tx_audio_data:
+	arg 63,rega
+	fetcht 2,mem_le_audio_tx_handle
+	call le_att_malloc_tx_notify
+	setarg VOICE_QUEUE_UNIT
+	istore 1,contw
+	arg VOICE_QUEUE_UNIT,loopcnt
+	arg mem_queue_buf,contr
+	call memcpy
+	setarg 0
+	istore 2,contw
+	rtn
+
+p_voice_updata_connect_param_req:
+	fetch 1,mem_device_flag
+	rtneq MODE_24G_DEVICE
+	arg mem_ms_le_interval_min_voice,contr
+p_le_updata_connect_param:
+	arg mem_le_interval_min,contw
+	arg 8,loopcnt
+	call memcpy
+	branch le_l2cap_tx_update_req
+
+p_ms_updata_connect_param_req:
+	fetch 1,mem_device_flag
+	rtneq MODE_24G_DEVICE
+	call mouse_long_mult_init
+	arg mem_ms_le_interval_min_new,contr
+	branch p_le_updata_connect_param
+
+p_mouse_le_param_default:
+	fetch 8,mem_ms_le_interval_min_new
+	store 8,mem_le_interval_min
+	jam 0,mem_lpm_mode
+	jam 0,mem_ms_le_lpm_flag
+	jam 0,mem_att_write_resposnse_error_insufficient_auth
+	rtn
+
+//=======================================g24 protocol fuction patch =========================================//
+p_mouse_cb_fuction:
+	setarg p_mouse_24g_short_sleep
+	store 2,mem_cb_24g_transmit_short_sleep
+	branch mouse_cb_fuction+3
+p_mouse_24g_short_sleep:
+	fetch 1,mem_mouse_sleep_deal_type
+	branch g24_short_sleep,blank
+	call g24_lpm_wait
+	nrtn user
+	call g24_setgpio_lpm_before
+	call clear_wake
+	branch mouse_24g_short_sleep+4
+
+p_mouse_default_init:
+	jam ZCODE_02,mem_zcode_temp_param0
+	branch p_zcode_entrance
+
+// p_g24_pair_param_init:
+// 	jam 0x4a,mem_24g_pair_ch
+// 	fetch 4,mem_24g_pair_addr_new
+// 	store 4,mem_24g_pair_addr
+// 	rtn
+
+p_g24_pair_dispatch:
+	jam DEFAULT_24G_DEVICE,mem_24g_reconn_type
+	fetch 2,mem_24g_pair_count
+	increase 1,pdata
+	store 2,mem_24g_pair_count
+	fetch 1,mem_24g_pair_count
+	and pdata,0xff,pdata
+	nrtn blank
+	fetch 1,mem_24g_pair_sm
+	beq STATE_24G_PAIRING_SUCCESS,g24_pair_exit
+	// beq STATE_24G_PAIRING_1,p_g24_pair_sm_1
+	beq STATE_24G_PAIRING_2,p_g24_pair_sm_2
+	beq STATE_24G_PAIRING_3,p_g24_pair_sm_3
+	beq STATE_24G_PAIRING_4,p_g24_pair_sm_4
+	// rtn
+
+p_g24_pair_sm_1:
+	jam DATATYPE_ATTEMP,mem_24g_txbuf_new
+	branch p_g24_pair_sm_prep
+
+p_g24_pair_sm_2:
+	fetch 1,mem_24g_pair_switch
+	branch p_g24_pair_sm_2_skip,blank
+	fetch 4,mem_24g_device_addr
+	call g24_update_addr_and_synccrc8	//use transmitter addr
+p_g24_pair_sm_2_skip:
+	jam DATATYPE_BIND,mem_24g_txbuf_new	
+	branch p_g24_pair_sm_prep
+
+p_g24_pair_sm_3:
+	jam DATATYPE_CONFIG,mem_24g_txbuf_new	
+	fetch 1,mem_24g_pair_switch
+	branch p_g24_pair_sm_prep,blank
+	fetch 4,mem_24g_receiver_addr		//prep receiver addr
+	store 4,mem_24g_txbuf_new+2
+	branch p_g24_pair_sm_common
+
+p_g24_pair_sm_4:
+	jam DATATYPE_OK,mem_24g_txbuf_new
+p_g24_pair_sm_prep:
+	fetch 4,mem_24g_device_addr
+	store 4,mem_24g_txbuf_new+2
+p_g24_pair_sm_common:
+	fetch 1,mem_24g_data_type
+	and_into bits_data,pdata
+	store 1,mem_24g_txbuf_new+1
+	jam 0,mem_24g_txbuf_new+6
+	branch g24_pair_sm_common+4
+
+p_g24_reconn_dispatch:
+	fetch 2,mem_24g_reconn_count
+	arg 0x01f8,temp
+	iand temp,pdata
+	branch p_g24_reconn_dispatch_next,blank
+	branch g24_reconn_dispatch+5
+
+p_g24_reconn_dispatch_next:
+	call p_g24_reconn_data_prep
+	call g24_transmit_receive_ack
+	nbranch g24_reconn_device_fail,sync
+	nbranch g24_reconn_device_fail,user3
+	call g24_ackpayload_parse
+	branch mouse_g24_reconn_dispatch_set
+
+p_g24_reconn_data_prep:
+	jam DATATYPE_ATTEMP,mem_24g_txbuf_new
+	fetch 1,mem_24g_data_type
+	store 1,mem_24g_txbuf_new+1
+	fetch 4,mem_24g_device_addr
+	store 4,mem_24g_txbuf_new+2
+	jam 6,mem_24g_datalen
+	branch p_g24_transmit_prep
+
+p_g24_transmit_hop_process:
+	fetcht 1,mem_24g_retry
+	fetch 1,mem_24g_fast_hop_count			// 125Hz=11  250Hz=5
+	isub temp,null
+	nbranch g24_tx_fast_hop,positive		// >= (6+6)or(3+3) hop fast    fail packet count >= 2
+	increase 1,temp
+	storet 1,mem_24g_retry
+	fetch 1,mem_24g_fast_hop_count
+	beq 5,p_g24_transmit_hop_process_4ms
+	fetch 1,mem_24g_retry
+	beq 6,p_g24_hop_ch_disable
+	beq 12,p_g24_hop_ch_disable
+	rtn
+
+p_g24_transmit_hop_process_4ms:
+	fetch 1,mem_24g_retry
+	beq 3,p_g24_hop_ch_disable
+	beq 6,p_g24_hop_ch_disable
+	rtn
+p_g24_hop_ch_disable:
+	fetch 1,mem_24g_data_type
+	set0 bit_hop,pdata
+	store 1,mem_24g_data_type
+	call p_g24_txpayload_type_update
+	branch g24_hop_ch_disable+4
+
+p_g24_txpayload_type_update:	
+	lshift3 pdata,pdata
+	fetcht 1,mem_24g_pid
+	and temp,0x03,temp
+	lshift temp,temp
+	ior temp,pdata
+	fetcht 1,mem_24g_no_ack
+	iadd temp,pdata
+	store 1,mem_24g_txpayload_new+OFFSET_DATA_TYPE
+	rtn
+	
+p_mouse_store_dpi_info_check:
+p_mouse_store_eerpom_dpi:
+	arg 1,temp
+	arg mem_mouse_dpi,rega
+	arg 0x2a,regb
+	branch iicd_write_protect_eep_data
+
+p_mouse_24g_package_data:
+	rtnmark0 mark_24g
+	call p_mouse_motion
+	call p_mouse_g24_tx_info_check
+	nrtn user
+	fetch 1,mem_mouse_24g_long_sleep_flag
+	jam 0,mem_mouse_24g_long_sleep_flag
+	ncall mouse_24g_short_sleep_clear_wake,blank
+	
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit0 MOUSE_ENABLE_KEYBOARD,p_mouse_24g_mouse_package_data
+	fetch 1,mem_customer_key
+	nbranch mouse_24g_keyboard_package_data,blank
+p_mouse_24g_mouse_package_data:
+	call mouse_data_xy_release
+	fetch 1,mem_24g_data_type
+	bbit1 1,mouse_24g_mouse_package_data_now	// last package is keyboard data
+	fetcht 1,mem_24g_txbuf_new+1
+	fetch 1,mem_mouse_key
+	ior temp,pdata
+	store 1,mem_mouse_key
+	fetcht 1,mem_24g_txbuf_new+6
+	fetch 1,mem_mouse_z
+	iadd temp,pdata
+	store 1,mem_mouse_z
+	fetcht 1,mem_24g_txbuf_new+7
+	fetch 1,mem_mouse_tz
+	iadd temp,pdata
+	store 1,mem_mouse_tz	
+	branch mouse_24g_mouse_package_data_now
+
+
+p_g24_transmit_loop:
+	call g24_transmit_receive_ack
+//	fetch 1,mem_24g_no_ack	//tx noack
+//	beq no_ack_24g,g24_transmit_no_ack
+	nbranch g24_retransmit,sync
+	nbranch g24_retransmit,user3
+	call g24_ackpayload_parse
+	call p_g24_parse_receive_work_data
+	call mouse_24g_transmit_callback
+	call p_g24_rxpayload_clear
+	branch g24_transmit_no_ack
+
+p_g24_rxpayload_clear:
+	arg 8,loopcnt
+	arg mem_24g_rxpayload,contw
+	branch memset0
+
+p_g24_dispatch:
+	bmark1 mark_24g_rxmode,g24_receive_dispatch
+	rtnmark0 mark_24g
+p_g24_transmit_dispatch:
+	fetch 1,mem_24g_conn_sm
+	bbit1 STATE_24G_PAIR,p_g24_pair_dispatch
+	bbit1 STATE_24G_RECONN,p_g24_reconn_dispatch
+	fetch 1,mem_ms_audio_enable_flag
+	ncall g24_transmit_by_interrupt_enable,blank
+	fetch 1,mem_24g_transmit_by_interrupt
+	beq G24_TX_TIMER_INT_ENABLE,p_g24_transmit_by_interrupt
+	branch p_g24_transmit_no_interrupt
+
+p_g24_transmit_by_interrupt:
+	call g24_timer_check
+	nrtn user
+	call g24_interval_calibrate
+	fetch 1,mem_voice_queue_count
+	ncall p_g24_send_audio_info_enable,blank
+	fetch 2,mem_24g_transmit_by_interrupt_exit_count
+	increase 1,pdata
+	store 2,mem_24g_transmit_by_interrupt_exit_count
+	fetcht 2,mem_24g_transmit_by_interrupt_exit_count_init
+	isub temp,null
+	call g24_transmit_by_interrupt_exit,zero
+	branch g24_transmit_no_interrupt
+
+//=========================================yc g24 rx payload patch=======================================//
+//==============================g24 receive ackpayload========================//
+p_g24_parse_receive_work_data:
+	call p_mouse_g24_tx_flag_clr_check
+	fetch 1,mem_24g_rxdata_length
+	rtn blank
+p_g24_receive_ack_data:
+	fetch 1,mem_24g_rxpayload
+	rtnne REPORT_ID_PRO_DATA
+	fetch 1,mem_24g_rxpayload+1
+	rtnne START_FLAG
+	fetch 1,mem_24g_rxdata_length
+	store 1,mem_ms_recv_ackpayload_temp
+	copy pdata,loopcnt
+	arg mem_24g_rxpayload+1,contr
+	arg mem_ms_recv_ackpayload_temp+1,contw
+	call memcpy
+p_g24_receive_ack_data_next:
+	fetch 1,mem_24g_rxpayload+3
+	beq OPCODE_VOICE_END,p_mouse_receive_dg_voice_end_data 	//不能放入zcode，会出现采集语音时进入zcode导致鼠标卡死情况
+	jam ZCODE_20,mem_zcode_temp_param0
+	branch p_zcode_entrance
+p_mouse_receive_dg_voice_end_data:
+	arg VOICE_END,queue
+	branch p_ms_tx_nor_pro_flag_enable
+
+p_mouse_g24_tx_dpi_data:
+	arg GET_DPI,queue
+	branch p_ms_tx_nor_pro_flag_enable
+	
+// p_memcpy_9:
+// 	arg 9,loopcnt
+// 	branch memcpy
+// p_memcpy_4:
+// 	arg 4,loopcnt
+// 	branch memcpy
+p_mouse_receive_key_fuction_check:
+	arg mem_rxpayload_temp+1,contw
+p_memcpy_9:
+	arg 9,loopcnt
+	call memcpy
+	fetch 1,mem_rxpayload_temp+4
+	beq B4_FUCTION,p_mouse_receive_b4key_data
+	beq B5_FUCTION,p_mouse_receive_b5key_data
+	beq DPI_FUCTION,p_mouse_receive_dpikey_data
+	rtn
+
+p_mouse_receive_b4key_data:
+	arg mem_mouse_b4_fuction_info,regc
+	branch p_mouse_key_info_compare_interface
+p_mouse_receive_b5key_data:
+	arg mem_mouse_b5_fuction_info,regc
+	branch p_mouse_key_info_compare_interface
+p_mouse_receive_dpikey_data:
+	arg mem_mouse_dpi_fuction_info,regc
+	branch p_mouse_key_info_compare_interface
+
+p_mouse_key_info_compare_interface:
+	copy regc,contr
+	arg mem_mouse_key_fuction_info_temp,contw
+	call p_memcpy_5
+	call p_g24_key_info_updata_check
+	arg mem_mouse_key_fuction_info_temp,contr
+	copy regc,contw
+p_memcpy_5:
+	arg 5,loopcnt
+	branch memcpy
+
+p_g24_key_info_updata_check:
+	fetch 1,mem_rxpayload_temp+5
+	beq APP_KEY,p_g24_key_info_updata_app_check
+	arg 5,loopcnt
+	arg mem_rxpayload_temp+5,rega
+	arg mem_mouse_key_fuction_info_temp,regb
+	call compare_loop
+	rtn zero
+	arg mem_rxpayload_temp+5,contr
+	arg mem_mouse_key_fuction_info_temp,contw
+	call p_memcpy_5
+	branch p_mouse_store_key_info_delay
+
+p_g24_key_info_updata_app_long_check:
+	storet 1,mem_mouse_key_fuction_info_temp+3
+	branch p_mouse_store_key_info_delay
+
+p_g24_key_info_updata_app_check:
+	store 1,mem_mouse_key_fuction_info_temp
+	fetch 1,mem_rxpayload_temp+6
+	fetcht 1,mem_rxpayload_temp+7
+	beq PRESS_LONG,p_g24_key_info_updata_app_long_check
+	storet 1,mem_mouse_key_fuction_info_temp+2
+	branch p_mouse_store_key_info_delay
+
+p_mouse_store_key_info_delay:	
+	fetch 1,mem_store_key_info_delay_timer_init
+	store 1,mem_store_key_info_delay_timer
+	rtn
+
+p_mouse_key_info_store_delay_timer:
+	arg mem_store_key_info_delay_timer,regc
+	arg p_mouse_store_key_info_check,regb
+	branch timer_single_step
+
+p_mouse_store_key_info_check:
+	arg 16,temp
+	arg mem_mouse_key_information_start,rega
+	arg MOUSE_VALUE_EEPROM_OFFECT,regb
+	branch iicd_write_protect_eep_data
+
+p_mouse_eeprom_load_le_att_list_info:
+	jam ZCODE_12,mem_zcode_temp_param0
+	branch p_zcode_entrance
+
+// p_mouse_load_key_info_check:
+// 	arg 15,temp
+// 	arg mem_mouse_key_information_start,rega
+// 	arg MOUSE_VALUE_EEPROM_OFFECT,regb
+// 	branch iicd_read_eep_data
+
+p_mouse_receive_dpi_check:
+	arg mem_rxpayload_temp+1,contw
+	// call p_memcpy_4
+p_memcpy_4:
+	arg 4,loopcnt
+	call memcpy
+	jam 0,mem_mouse_dpi_set_result
+	fetch 1,mem_rxpayload_temp+4
+	sub pdata,10,null
+	nrtn positive
+	store 1,mem_mouse_dpi
+	store 1,mem_mouse_last_dpi
+	jam 1,mem_mouse_dpi_set_result
+	branch mouse_dpi_level_store
+	
+//==============================g24 data flag or type clr==========================//
+p_mouse_g24_tx_flag_clr_check:
+	fetch 1,mem_ms_tx_data_type
+	isolate1 HTTP_BIT,pdata
+	call p_g24_clr_tx_http_info_flag,true
+	isolate1 AUDIO_BIT,pdata
+	call p_g24_clr_tx_audio_info_flag,true
+	isolate1 SPEC_PRO_BIT,pdata
+	call p_g24_clr_tx_spec_info_flag_check,true
+	isolate1 NOR_PRO_BIT,pdata
+	call p_g24_clr_tx_nor_pro_flag_check,true
+	rtn
+p_g24_clr_tx_http_info_flag:
+	set0 HTTP_BIT,pdata
+	branch p_g24_store_ms_tx_flag
+
+
+p_g24_clr_tx_audio_info_flag:
+	set0 AUDIO_BIT,pdata
+	branch p_g24_store_ms_tx_flag
+
+p_g24_clr_tx_spec_info_flag_check:
+	call p_g24_clr_tx_spec_info_flag
+	arg 0,temp
+	storet 2,mem_ms_tx_pro_key_flag
+	rtn
+
+p_g24_clr_tx_spec_info_flag:
+	set0 SPEC_PRO_BIT,pdata
+	branch p_g24_store_ms_tx_flag
+
+p_g24_clr_tx_nor_pro_flag_check:
+	call p_g24_clr_tx_nor_info_flag
+	arg 0,temp
+	storet 2,mem_ms_tx_nor_pro_data_flag
+	rtn
+
+p_g24_clr_tx_nor_info_flag:
+	set0 NOR_PRO_BIT,pdata
+	branch p_g24_store_ms_tx_flag
+//=========================================yc g24 pack  patch ===========================================//
+//queue: bit index  contw:store addr
+p_ms_param_bit_set1:
+	qset1 pdata
+p_istore_2_contw_rtn:
+	istore 2,contw
+	rtn
+
+p_ms_param_bit_set0:
+	qset0 pdata
+	branch p_istore_2_contw_rtn
+
+p_ms_long_press_key_index_enable:
+	fetch 2, mem_ms_long_press_key_index
+	arg mem_ms_long_press_key_index,contw
+	branch p_ms_param_bit_set1	
+
+p_ms_long_press_key_index_disable:
+	fetch 2, mem_ms_long_press_key_index
+	arg mem_ms_long_press_key_index,contw
+	branch p_ms_param_bit_set0	
+
+p_ms_tx_pro_key_flag_enable:
+	fetch 2, mem_ms_tx_pro_key_flag
+	arg mem_ms_tx_pro_key_flag,contw
+	branch p_ms_param_bit_set1
+
+//p_ms_tx_pro_key_flag_disable:
+//	fetch 2, mem_ms_tx_pro_key_flag
+//	arg mem_ms_tx_pro_key_flag,contw
+//	branch p_ms_param_bit_set0
+
+p_ms_tx_nor_pro_flag_enable:
+	fetch 2, mem_ms_tx_nor_pro_data_flag
+	arg mem_ms_tx_nor_pro_data_flag,contw
+	branch p_ms_param_bit_set1
+
+//p_ms_tx_nor_pro_flag_disable:
+//	fetch 2, mem_ms_tx_nor_pro_data_flag
+//	arg mem_ms_tx_nor_pro_data_flag,contw
+//	branch p_ms_param_bit_set0
+	
+//================================g24 pack tx flag enable==========================//
+
+//===========data type enable=======//
+p_mouse_g24_tx_info_check:
+	call p_mouse_g24_tx_flag_check
+p_mouse_tx_device_info_check:
+	fetch 1,mem_ms_tx_data_type
+	rtn blank
+	branch enable_user
+
+p_mouse_g24_tx_flag_check:
+	fetch 2,mem_ms_tx_pro_key_flag
+	nbranch p_g24_send_spec_info_enable,blank
+	fetch 2,mem_ms_tx_nor_pro_data_flag
+	nbranch p_g24_send_nor_info_enable,blank
+	rtn
+
+p_g24_send_audio_info_enable:
+	fetch 1,mem_ms_tx_data_type
+	set1 AUDIO_BIT,pdata
+p_g24_store_ms_tx_flag:
+	store 1,mem_ms_tx_data_type
+	rtn
+	
+p_g24_send_spec_info_enable:
+	fetch 1,mem_ms_tx_data_type
+	set1 SPEC_PRO_BIT,pdata
+	branch p_g24_store_ms_tx_flag
+
+p_g24_send_nor_info_enable:
+	fetch 1,mem_ms_tx_data_type
+	set1 NOR_PRO_BIT,pdata
+	branch p_g24_store_ms_tx_flag
+
+p_g24_send_http_info_enable:
+	fetch 1,mem_ms_tx_data_type
+	set1 HTTP_BIT,pdata
+	branch p_g24_store_ms_tx_flag
+
+
+//================================heart pack patch==========================//
+p_g24_nodata_transmit:
+	fetch 1,mem_24g_abort_pac
+	call p_g24_send_abort_packet,blank
+	fetch 1,mem_device_tx_heart_data_flag
+	ncall p_g24_send_slow_heart_info,blank
+	branch g24_nodata_transmit+2
+	
+p_g24_send_abort_packet:
+	fetch 1,mem_device_tx_heart_data_flag
+	nrtn blank
+	jam TYPE_MS,mem_24g_data_type
+	fetch 1,mem_24g_shutdown_flag
+	setflip 0,pdata
+	store 1,mem_24g_abort_pac
+	call g24_transmit_rf_ctrl_clear
+	store 1,mem_24g_txbuf_new
+	setarg 0
+	store 7,mem_24g_txbuf_new+1
+	fetch 4,mem_24g_device_addr
+	store 4,mem_24g_txbuf_new+8
+	jam 12,mem_24g_datalen
+	fetch 1,mem_24g_data_type
+	set1 bit_abort,pdata
+	store 1,mem_24g_data_type
+	call p_g24_transmit_prep
+	branch g24_transmit_start
+
+p_g24_send_slow_heart_info:
+	jam 0,mem_24g_abort_pac
+	jam TYPE_MS,mem_24g_data_type
+	call g24_transmit_rf_ctrl_clear
+	jam 1,mem_24g_datalen
+	fetch 1,mem_24g_data_type
+	set1 HEART_BIT,pdata
+	store 1,mem_24g_txbuf_new
+	call p_g24_transmit_prep
+	branch g24_transmit_process
+
+p_g24_transmit_no_interrupt:
+	call p_g24_txdata_prep
+	nbranch p_g24_nodata_transmit,user
+	branch g24_transmit_start
+
+p_g24_txdata_prep:
+	call p_g24_package_data
+	nrtn user
+	branch p_g24_transmit_prep
+
+p_g24_package_data:
+	fetch 2,mem_cb_24g_transmit_data
+	call callback_func
+	branch p_g24_accumulate_data_set,user
+	fetch 7,mem_24g_txbuf_new+1	//mouse data
+	rtn blank
+	branch enable_user	// retransmit
+
+p_g24_accumulate_data:
+	jam 0,mem_24g_abort_pac
+	add rega,1,pdata
+	store 1,mem_24g_datalen
+	call g24_transmit_rf_ctrl_clear
+	store 1,mem_24g_txbuf_new
+	branch g24_accumulate_data+5
+	
+//================================g24 pack tx pre==========================//
+p_g24_accumulate_data_set:
+	jam 0,mem_24g_abort_pac
+	fetch 1,mem_ms_tx_data_type
+	beq 0,p_g24_accumulate_data
+	bbit1 SPEC_PRO_BIT,p_g24_send_spec_pro_info_check
+	bbit1 NOR_PRO_BIT,p_g24_send_nor_pro_info_check
+	bbit1 AUDIO_BIT,p_g24_send_audio_info_check
+	bbit1 HTTP_BIT,p_g24_send_http_info_check
+	rtn
+
+//===================spec pro: send key state=========================//
+p_g24_send_spec_pro_info_check:	
+	fetch 2,mem_ms_tx_pro_key_flag
+	bbit1 AUDIO_KEY_BIT,P_g24_tx_audio_key_info
+	// bbit1 ASK_KEY_BIT,p_g24_tx_ask_key_info
+	bbit1 TRANSMIT_KEY_BIT,P_g24_tx_transmit_key_info
+	// bbit1 AUDIO_CTRL_KEY_BIT,p_g24_tx_audio_ctrl_key_info
+	// bbit1 WRITE_KEY_BIT,p_g24_tx_write_key_info
+//	bbit1 SUMARY_KEY_BIT,p_g24_tx_sumary_key_info
+//	bbit1 PPT_KEY_BIT,p_g24_tx_ppt_key_info
+//	bbit1 DRAW_KEY_BIT,p_g24_tx_draw_key_info
+//	bbit1 PRTSCN_KEY_BIT,p_g24_tx_prtscn_key_info
+//	bbit1 AI_KEY_BIT,p_g24_tx_ai_key_info
+	bbit1 ONE_PULLUP_KEY_BIT,P_g24_tx_one_pullup_key_info
+	rtn
+
+P_g24_tx_audio_key_info:
+	fetch 1,mem_mouse_b4_fuction_info
+	beq APP_KEY,P_b4_app_key_function
+P_g24_tx_audio_key_info_next:
+	arg OPCODE_VOICE_KEY,temp
+P_g24_tx_key_info_check:
+	fetch 1,mem_ms_rf_data_flag
+	branch P_g24_only_send_key_info_interface,blank
+	// branch P_g24_send_key_info_interface
+P_g24_send_key_info_interface:
+	storet 1,mem_ms_24g_temp_buff+3
+	fetch 1,mem_24g_data_type
+	set1 SPEC_PRO_BIT,pdata
+	store 1,mem_ms_24g_temp_buff
+	jam START_FLAG,mem_ms_24g_temp_buff+1
+	jam KEY_STATE_PAYLOAD_LEN,mem_ms_24g_temp_buff+2
+	fetch 1,mem_ms_tx_pro_key_val
+	store 1,mem_ms_24g_temp_buff+4
+	arg KEY_STATE_INFO_LEN,temp
+	arg mem_ms_24g_temp_buff,rega
+	branch p_g24_send_rf_other_data
+
+P_g24_only_send_key_info_interface:
+	storet 1,mem_24g_txbuf_new+3
+	fetch 1,mem_24g_data_type
+	set1 SPEC_PRO_BIT,pdata
+	store 1,mem_24g_txbuf_new
+	jam START_FLAG,mem_24g_txbuf_new+1
+	jam KEY_STATE_PAYLOAD_LEN,mem_24g_txbuf_new+2
+	fetch 1,mem_ms_tx_pro_key_val
+	store 1,mem_24g_txbuf_new+4
+	jam KEY_STATE_INFO_LEN,mem_24g_datalen
+	rtn
+
+
+P_b4_app_key_function:
+	fetch 1,mem_ms_tx_pro_key_val
+	beq LONG_PRESS,P_b4_app_key_long_function
+	beq LONG_RELEASE,P_b4_app_key_long_function
+	fetcht 1,mem_mouse_b4_fuction_info+2
+	branch P_g24_tx_key_info_check
+
+P_b4_app_key_long_function:
+	fetcht 1,mem_mouse_b4_fuction_info+3
+	branch P_g24_tx_key_info_check
+
+
+P_g24_tx_transmit_key_info:
+	fetch 1,mem_mouse_b5_fuction_info
+	beq APP_KEY,P_b5_app_key_function
+	branch P_g24_tx_transmit_key_info_next
+P_b5_app_key_function:
+	fetch 1,mem_ms_tx_pro_key_val
+	beq LONG_PRESS,P_b5_app_key_long_function
+	beq LONG_RELEASE,P_b5_app_key_long_function
+	fetcht 1,mem_mouse_b5_fuction_info+2
+	branch P_g24_tx_key_info_check
+P_g24_tx_transmit_key_info_next:
+	arg OPCODE_TRANSMIT_KEY,temp
+	branch P_g24_tx_key_info_check
+
+P_b5_app_key_long_function:
+	fetcht 1,mem_mouse_b5_fuction_info+3
+	branch P_g24_tx_key_info_check
+
+
+P_g24_tx_one_pullup_key_info:
+	fetch 1,mem_mouse_dpi_fuction_info
+	beq APP_KEY,P_dpi_app_key_function
+	branch P_g24_tx_one_pullup_key_info_next
+P_dpi_app_key_function:
+	fetch 1,mem_ms_tx_pro_key_val
+	beq LONG_PRESS,P_dpi_app_key_long_function
+	beq LONG_RELEASE,P_dpi_app_key_long_function
+	fetcht 1,mem_mouse_dpi_fuction_info+2
+	branch P_g24_tx_key_info_check
+P_g24_tx_one_pullup_key_info_next:
+	arg OPCODE_ONE_PULLUP_KEY,temp
+	branch P_g24_tx_key_info_check
+
+P_dpi_app_key_long_function:
+	fetcht 1,mem_mouse_dpi_fuction_info+3
+	branch P_g24_tx_key_info_check
+
+
+
+// p_g24_tx_ask_key_info:
+// 	arg OPCODE_ASK_KEY,temp
+// 	branch p_g24_tx_key_info_check
+
+// p_b5_app_key_long_function:
+// 	fetcht 1,mem_mouse_b5_fuction_info+3
+// 	branch p_g24_tx_key_info_check
+
+// p_g24_tx_transmit_key_info:
+// 	fetch 1,mem_mouse_b5_fuction_info
+// 	beq APP_KEY,p_b5_app_key_function
+// 	branch p_g24_tx_transmit_key_info_next
+// p_b5_app_key_function:
+// 	fetch 1,mem_ms_tx_pro_key_val
+// 	beq LONG_PRESS,p_b5_app_key_long_function
+// 	fetcht 1,mem_mouse_b5_fuction_info+2
+// 	branch p_g24_tx_key_info_check
+// p_g24_tx_transmit_key_info_next:
+// 	arg OPCODE_TRANSMIT_KEY,temp
+// 	branch p_g24_tx_key_info_check
+
+
+// p_g24_tx_audio_ctrl_key_info:
+// 	arg OPCODE_VOICE_CTRL_KEY,temp
+// 	branch p_g24_tx_key_info_check
+
+// p_g24_tx_write_key_info:
+// 	arg OPCODE_WRITE_KEY,temp
+// 	branch p_g24_tx_key_info_check
+
+p_g24_audio_data_out_from_queue:
+	fetch 1,mem_voice_enable
+	rtn blank
+	fetch 1,mem_voice_queue_count
+	rtn blank
+ifdef LOG_ENCODE
+	call p_voice_out_queue
+	branch p_print_audio_encode_data
+else
+	branch p_voice_out_queue
+endif
+
+//===================nor pro:respond app info=========================//
+p_g24_send_nor_pro_info_check:
+	fetch 2,mem_ms_tx_nor_pro_data_flag
+//	bbit1 APPKEY,p_g24_tx_appkey_info
+//	bbit1 SECRET,p_g24_tx_secret_info
+//	bbit1 SN_CODE,p_g24_tx_sn_chip_id_info
+//	bbit1 CHIP_ID,p_g24_tx_sn_chip_id_info
+	bbit1 VOICE_START,p_g24_voice_on_set
+	bbit1 VOICE_END,p_g24_voice_off_set
+	bbit1 DEVICE_INFO, p_g24_tx_device_info
+	bbit1 GET_DPI,p_g24_get_dpi
+	bbit1 SET_DPI,p_g24_set_dpi
+	bbit1 GET_BATTERY,p_g24_get_battery
+	bbit1 GET_DEVICE_TYPE,p_g24_get_device_type
+	bbit1 SET_KEY_FUCTION,p_g24_set_key_fuction
+	rtn
+
+/*
+p_g24_tx_appkey_info:
+	arg APPKEY_LEN,temp
+	arg mem_ms_auth_appkey,regc
+p_g24_tx_nor_pro_info_check:
+	fetch 1,mem_ms_rf_data_flag
+	branch p_g24_only_send_nor_pro_app_info_interface,blank
+	branch p_g24_send_nor_pro_app_info_interface
+	
+p_g24_tx_secret_info:
+	arg SECRET_LEN,temp
+	arg mem_ms_auth_secret,regc
+	branch p_g24_tx_nor_pro_info_check
+p_g24_tx_sn_chip_id_info:
+	arg SN_CHIP_LEN,temp
+	arg msm_ms_auth_sn,regc
+	branch p_g24_tx_nor_pro_info_check
+*/
+
+p_g24_voice_on_set:
+	call p_audio_enable
+	arg 2,temp
+	jam VOICE_START_DATA,mem_ms_nor_pro_temp_buff
+	branch p_g24_send_nor_pro_respond_info_check
+	
+p_g24_voice_off_set:
+	call p_audio_disable
+	fetch 1,mem_ms_rf_data_flag
+	branch p_g24_only_send_nor_same_pro_respond_info,blank
+	branch p_g24_send_nor_pro_same_respond_info
+
+//device info
+p_g24_tx_device_info:
+	jam ZCODE_40,mem_zcode_temp_param0
+	branch p_zcode_entrance
+// //device info
+// z_g24_tx_device_info:
+// 	fetch 1,mem_ms_rf_data_flag
+// 	branch z_g24_only_send_device_info,blank
+// 	branch z_g24_send_device_info
+
+// z_g24_only_send_device_info:
+// 	fetch 1,mem_24g_data_type
+// 	set1 NOR_PRO_BIT,pdata
+// 	store 1,mem_24g_txbuf_new
+// 	jam START_FLAG,mem_24g_txbuf_new+1
+// 	jam DEVICE_INFO_LEN,mem_24g_txbuf_new+2
+// 	jam OPCODE_GET_DEVICE_INFO,mem_24g_txbuf_new+3
+// 	jam DEVICE_INFO_LEN+NOR_PRO_HEADER_LEN,mem_24g_datalen
+// 	arg AUTH_LEN,loopcnt
+// 	arg mem_ms_auth_appkey,contr
+// 	arg mem_24g_txbuf_new+4,contw
+// 	call memcpy
+// 	branch p_g24_ms_info_set
+
+// z_g24_send_device_info:
+// 	fetch 1,mem_24g_data_type
+// 	set1 NOR_PRO_BIT,pdata
+// 	store 1,mem_ms_24g_temp_buff
+// 	jam START_FLAG,mem_ms_24g_temp_buff+1
+// 	jam DEVICE_INFO_LEN,mem_ms_24g_temp_buff+2
+// 	jam OPCODE_GET_DEVICE_INFO,mem_ms_24g_temp_buff+3
+// 	arg AUTH_LEN,loopcnt
+// 	arg mem_ms_auth_appkey,contr
+// 	arg mem_ms_24g_temp_buff+4,contw
+// 	call memcpy
+// 	call p_g24_ms_info_set
+// 	arg DEVICE_INFO_LEN+4,temp
+// 	arg mem_ms_24g_temp_buff,rega
+// 	branch p_g24_send_rf_other_data
+
+//get dpi info
+p_g24_get_dpi:
+	jam ZCODE_41,mem_zcode_temp_param0
+	branch p_zcode_entrance
+//set dpi info
+p_g24_set_dpi:
+	jam ZCODE_50,mem_zcode_temp_param0
+	branch p_zcode_entrance
+//send battery info
+p_g24_get_battery:
+	jam ZCODE_51,mem_zcode_temp_param0
+	branch p_zcode_entrance
+
+
+p_g24_get_device_type:
+	jam ZCODE_60,mem_zcode_temp_param0
+	branch p_zcode_entrance
+
+p_g24_set_key_fuction:
+	jam ZCODE_61,mem_zcode_temp_param0
+	branch p_zcode_entrance
+
+
+/*
+//temp:payload len ; regc:payload addr
+p_g24_send_nor_pro_app_info_interface:
+	copy temp,pdata
+	increase 1,pdata
+	store 1,mem_ms_24g_temp_buff+2
+	fetch 1,mem_24g_data_type
+	set1 NOR_PRO_BIT,pdata
+	store 1,mem_ms_24g_temp_buff
+	fetch 1,mem_ms_recv_ackpayload_temp+1
+	store 1,mem_ms_24g_temp_buff+1
+	fetch 1,mem_ms_recv_ackpayload_temp+3
+	store 1,mem_ms_24g_temp_buff+3
+	copy temp,loopcnt
+	copy regc,contr
+	arg mem_ms_24g_temp_buff+4,contw
+	call memcpy
+	increase 4,temp
+	arg mem_ms_24g_temp_buff,rega
+	branch p_g24_send_rf_other_data
+
+//temp:payload len ; contr:payload addr
+p_g24_only_send_nor_pro_app_info_interface:
+	copy temp,pdata
+	increase 1,pdata
+	store 1,mem_24g_txbuf_new+2
+	fetch 1,mem_24g_data_type
+	set1 NOR_PRO_BIT,pdata
+	store 1,mem_24g_txbuf_new
+	fetch 1,mem_ms_recv_ackpayload_temp+1
+	store 1,mem_24g_txbuf_new+1
+	fetch 1,mem_ms_recv_ackpayload_temp+3
+	store 1,mem_24g_txbuf_new+3
+	copy temp,loopcnt
+	copy regc,contr
+	arg mem_24g_txbuf_new+4,contw
+	call memcpy
+	increase 4,temp
+	storet 1,mem_24g_datalen
+	rtn
+*/
+//voice on  info
+p_g24_send_nor_pro_respond_info_check:
+	fetch 1,mem_24g_data_type
+	set1 NOR_PRO_BIT,pdata
+	store 1,mem_ms_24g_temp_buff
+	jam START_FLAG,mem_ms_24g_temp_buff+1
+	storet 1,mem_ms_24g_temp_buff+2
+	fetch 1,mem_ms_recv_ackpayload_temp+3
+	store 1,mem_ms_24g_temp_buff+3
+	add temp,-1,loopcnt
+	arg mem_ms_nor_pro_temp_buff,contr
+	arg mem_ms_24g_temp_buff+4,contw
+	call memcpy
+	add temp,NOR_PRO_HEADER_LEN,loopcnt
+	copy loopcnt,rega
+	arg mem_24g_txbuf_new,contw
+	fetch 1,mem_ms_rf_data_flag
+	ncall p_g24_rf_data_fii_fifo,blank
+	arg mem_ms_24g_temp_buff,contr
+	call memcpy
+	copy rega,pdata
+	store 1,mem_24g_datalen
+	rtn
+
+p_g24_rf_data_fii_fifo:
+	copy contw,regc
+	add rega,8,rega
+	call g24_transmit_rf_ctrl_clear
+	copy regc,contw
+	istore 1,contw
+	fetch 7,mem_mouse_key
+	istore 7,contw
+	rtn
+
+//voice off  info
+p_g24_send_nor_pro_same_respond_info:
+	fetch 1,mem_24g_data_type
+	set1 NOR_PRO_BIT,pdata
+	store 1,mem_ms_24g_temp_buff
+	fetch 4,mem_ms_recv_ackpayload_temp+1
+	store 4,mem_ms_24g_temp_buff+1
+	arg NOR_PRO_RES_LEN,temp
+	arg mem_ms_24g_temp_buff,rega
+	branch p_g24_send_rf_other_data
+	
+p_g24_only_send_nor_same_pro_respond_info:
+	fetch 1,mem_24g_data_type
+	set1 NOR_PRO_BIT,pdata
+	store 1,mem_24g_txbuf_new
+	fetch 4,mem_ms_recv_ackpayload_temp+1
+	store 4,mem_24g_txbuf_new+1
+	jam NOR_PRO_RES_LEN,mem_24g_datalen
+	rtn
+
+
+p_g24_ms_info_set:
+	fetch 1,mem_config_sensor_type
+	istore 1,contw
+
+	fetch 1,mem_mouse_dpi
+	istore 1,contw
+	fetch 1,mem_le_battery_level_percentage
+	istore 1,contw
+	fetch 1,mem_ms_version
+	istore 1,contw
+
+	arg 3,loopcnt
+	arg mem_mouse_b4_fuction_info,contr
+p_g24_send_device_info_loop:
+	ifetch 1,contr
+	istore 1,contw
+	increase 1,contr
+	ifetch 3,contr
+	istore 3,contw
+	loop p_g24_send_device_info_loop
+	rtn
+	// branch istore_1_contw_rtn
+
+
+//====================http send========================//
+p_g24_send_http_info_check:
+	jam ZCODE_30,mem_zcode_temp_param0
+	branch p_zcode_entrance
+
+// 	fetch 1,mem_ms_rf_data_flag
+// 	branch p_g24_only_send_http_info,blank
+// p_g24_send_rf_http_info:
+// 	fetch 1,mem_24g_data_type
+// 	set1 HTTP_BIT,pdata
+// 	store 1,mem_ms_24g_temp_buff
+// 	jam 0xff,mem_ms_24g_temp_buff+1
+// 	arg 2,temp
+// 	arg mem_ms_24g_temp_buff,rega
+// 	branch p_g24_send_rf_other_data
+// 	rtn
+// p_g24_only_send_http_info:
+// 	jam 2,mem_24g_datalen
+// 	fetch 1,mem_24g_data_type
+// 	set1 HTTP_BIT,pdata
+// 	store 1,mem_24g_txbuf_new
+// 	jam 0xff,mem_24g_txbuf_new+1
+// 	rtn
+
+
+//=================audio info tx pre==============//
+p_g24_send_audio_info_check:
+	call p_g24_audio_data_out_from_queue
+	fetch 1,mem_ms_rf_data_flag
+	branch p_g24_only_send_audio_info,blank
+p_g24_send_audio_info:
+	fetch 1,mem_24g_data_type
+	set1 AUDIO_BIT,pdata
+	store 1,mem_ms_24g_temp_buff
+	arg VOICE_QUEUE_UNIT,loopcnt
+	arg mem_queue_buf,contr
+	arg mem_ms_24g_temp_buff+1,contw
+	call memcpy
+	arg 61,temp
+	arg mem_ms_24g_temp_buff,rega
+	branch p_g24_send_rf_other_data
+
+p_g24_only_send_audio_info:
+	jam 61,mem_24g_datalen
+	fetch 1,mem_24g_data_type
+	set1 AUDIO_BIT,pdata
+	store 1,mem_24g_txbuf_new
+	arg VOICE_QUEUE_UNIT,loopcnt
+	arg mem_queue_buf,contr
+	arg mem_24g_txbuf_new+1,contw
+	branch memcpy
+
+p_g24_send_rf_other_data:
+	add temp,8,pdata
+	store 1,mem_24g_datalen
+	call g24_transmit_rf_ctrl_clear
+	store 1,mem_24g_txbuf_new
+	fetch 7,mem_mouse_key
+	store 7,mem_24g_txbuf_new+1
+	copy temp,loopcnt
+	copy rega,contr
+	arg mem_24g_txbuf_new+8,contw
+	branch memcpy
+//=======================================yc protocol patch =========================================//
+
+//=====================yc tx==============//
+p_g24_transmit_packet:
+	fetch 1,mem_24g_disable_fec1
+	nbranch p_g24_transmit_nolr,blank
+	disable encode_fec0	
+	enable encode_fec1	////lr use encode_fec3
+p_g24_transmit_nolr:
+	enable enable_white
+	enable enable_crc
+	fetch 1,mem_24g_txlen
+	iforce loopcnt
+	arg mem_24g_txpayload_new,contr
+	branch g24tr_loop
+
+p_g24_transmit_prep:
+// total length
+	fetch 1,mem_24g_datalen
+	increase 3,pdata	//hec/type/control
+	store 1,mem_24g_txlen
+//hec
+	fetch 1,mem_24g_syncword_crc8
+	store 1,mem_24g_txpayload_new
+// prepare 5bit data type , 2bit PID, 1bit NO_ACK
+	fetch 1,mem_24g_data_type
+	lshift3 pdata,pdata
+	fetcht 1,mem_24g_pid
+	and temp,0x03,temp
+	lshift temp,temp
+	ior temp,pdata
+	fetcht 1,mem_24g_no_ack
+	iadd temp,pdata
+	istore 1,contw
+// data len
+	fetch 1,mem_24g_datalen
+	istore 1,contw
+//prepare payload data
+	fetch 1,mem_24g_datalen
+	iforce loopcnt
+	arg mem_24g_txbuf_new,contr
+	call memcpy
+	branch g24_transmit_prep_next
+
+p_g24_txbuf_clear:
+	arg 10,loopcnt
+	arg mem_24g_txbuf_new,contw
+	branch memset0
+
+p_g24_read_len_pid_crc:
+//read control
+	fetch 1,mem_24g_rxbuf+1
+	store 1,mem_24g_rxdata_length
+//get crc
+	increase 1,pdata
+	arg mem_24g_rxbuf+1,contr
+	iadd contr,contr
+	ifetch 3,contr
+	store 3,mem_24g_sta_crc
+//read pid
+	fetch 1,mem_24g_rxbuf
+	rshift pdata,temp
+	and temp,0x03,temp
+	storet 1,mem_24g_sta_pid
+	rshift3 pdata,pdata
+	store 1,mem_24g_rxbuf
+	rtn
+
+//=====================yc rx==============//
+p_g24_receive_payload:
+	call g24_receive_byte
+	store 1,mem_24g_rxbuf	//device id
+	bmark1 mark_24g_rxmode,p_g24_receive_skip
+	fetch 1,mem_24g_rxbuf
+	rshift3 pdata,pdata
+	fetcht 1,mem_24g_data_type
+	icompare bits_data,temp
+	nbranch g24_type_error,true
+p_g24_receive_skip:
+	call g24_receive_byte
+	istore 1,contw
+	sub pdata,0x1f,null
+	nbranch g24_len_over_error,positive	//max payload: 31byte
+	copy pdata,loopcnt
+	branch g24rx_nopayload,zero
+	branch g24rx_loop
+
+//=======================================audio demo patch =========================================//
+ifdef AUDIO_DEMO
+
+p_mouse_idle:
+	call mouse_idle+1
+	call p_mouse_dpi_level_check
+	call p_mouse_fuction_key
+	call p_voice_adpcm_enter_queue
+	call p_mouse_g24_hop_set
+	branch p_le_audio_data_out_from_queue
+
+p_mouse_fuction_key:
+	jam 0,mem_customer_key
+	// fetchr rega,1,mem_mouse_fuction_key
+	call p_mouse_audio_key_scan
+	call p_mouse_one_pullup_key_scan
+	call p_mouse_transmit_key_scan
+	// copy rega,pdata
+	// storer rega,1,mem_mouse_fuction_key
+	branch p_mouse_bb_event_10ms_timer
+
+
+p_mouse_dpi_level_check:
+	fetch 1,mem_mouse_dpi
+	fetcht 1,mem_mouse_last_dpi
+	isub temp,null
+	rtn zero
+	store 1,mem_mouse_last_dpi
+	jam AUTO_IN,mem_mouse_dpi_type
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,p_mouse_g24_tx_dpi_data
+	branch p_ms_le_tx_dpi_info
+
+p_mouse_g24_hop_set:
+	fetch 1,mem_device_flag
+	rtnne MODE_24G_DEVICE
+	fetch 1,mem_voice_queue_count
+	branch p_mouse_default_hop_set,blank
+p_mouse_audio_hop_set:
+	jam 0x05,mem_24g_fast_hop_count
+	rtn
+
+p_mouse_default_hop_set:
+	jam 0x0f,mem_24g_fast_hop_count
+	rtn
+
+p_mouse_bb_event_10ms_timer:
+	arg app_ms_key_scan_timer,queue
+	call timer_check
+	nrtn blank
+	call p_mouse_audio_key_long_press_check
+	call p_mouse_one_pullup_key_long_press_check
+	call p_mouse_transmit_key_long_press_check
+	call p_app_audio_enable_set
+p_mouse_bb_event_10ms_timer_init:
+	arg app_ms_key_scan_timer,queue
+	setarg 16
+	branch timer_init
+
+
+p_app_audio_enable_set:
+	fetch 1,mem_ms_audio_enable_timer
+	rtn blank
+	increase -1,pdata
+	store 1,mem_ms_audio_enable_timer
+	nrtn blank
+p_audio_data_get_enable:
+	jam 1,mem_voice_enable
+	arg mem_voice_raw_start,contw
+	arg AUDIO_BUF_LEN,loopcnt
+	branch clear_mem
+
+//======================================key scan=================================//
+
+//=====================audio key==============//
+p_mouse_audio_key_scan:
+	fetch 1,mem_ms_audio_key_gpio
+	rtneq GPIO_DISABLE
+	jam MOUSE_AUDIO_KEY,mem_mouse_key_temp_patch
+	fetcht 1,mem_ms_audio_key_gpio
+	call p_mouse_audio_key_check
+	store 1,mem_ms_audio_key_press_status
+	call mouse_matrix_public_gpio_reset
+	fetch 1,mem_ms_audio_key_press_status
+	beq 0,p_audio_key_up
+	beq 7,p_audio_key_down
+	rtn
+
+p_mouse_audio_key_check:
+	call gpio_get_bit
+	fetcht 1,mem_matrix_public_gpio
+	branch p_mouse_check_audio_button_connect_gnd,true
+	fetcht 1,mem_matrix_public_gpio
+	call gpio_out_active
+	fetcht 1,mem_ms_audio_key_gpio
+	fetch 1,mem_ms_audio_key_press_status
+	branch mouse_check_key_connect_gnd_new
+
+p_mouse_check_audio_button_connect_gnd:
+	fetch 1,mem_ms_audio_key_press_status
+	branch mouse_check_key_connect_gnd_new
+
+p_audio_key_down:
+	fetch 1,mem_ms_audio_key_state
+	rtneq KEY_DOWN
+	jam KEY_DOWN,mem_ms_audio_key_state
+	fetch 5,mem_mouse_b4_fuction_info
+p_app_key_replace:
+	store 5,mem_mouse_key_fuction_info_temp
+	fetch 1,mem_mouse_key_fuction_info_temp
+	beq MS_KEY,p_mouse_key_value_replace
+	beq KB_KEY,p_keyboard_key_value_replace
+	rtn
+
+p_keyboard_key_value_replace:
+	fetch 3,mem_mouse_key_fuction_info_temp+2
+	store 3,mem_customer_key_press_init+1
+	branch mouse_customerkey_press
+
+p_mouse_key_value_replace:
+	fetchr rega,1,mem_mouse_fuction_key
+	fetch 1,mem_mouse_key_fuction_info_temp+2
+	beq DPI_VALUE,p_mouse_dpi_process_new
+	ior rega,rega
+	branch p_storer_mouse_function_key
+	// storer rega,1,mem_mouse_fuction_key
+	// rtn
+p_mouse_dpi_process_new:
+	storer rega,1,mem_mouse_fuction_key
+	call mouse_dpi_process
+	fetchr rega,1,mem_mouse_fuction_key
+	rtn
+
+p_app_key_clear:
+	fetch 1,mem_mouse_key_fuction_info_temp+2
+	rtneq DPI_VALUE
+	invert pdata,pdata
+	iand rega,rega
+p_storer_mouse_function_key:
+	storer rega,1,mem_mouse_fuction_key
+	rtn
+
+p_audio_key_up:
+	fetch 1,mem_ms_audio_key_state
+	rtneq KEY_UP
+	jam KEY_UP,mem_ms_audio_key_state
+	fetch 5,mem_mouse_b4_fuction_info
+	store 5,mem_mouse_key_fuction_info_temp
+	fetchr rega,1,mem_mouse_fuction_key
+	fetch 1,mem_mouse_key_fuction_info_temp
+	beq MS_KEY,p_app_key_clear
+	beq KB_KEY,mouse_customerkey_release
+	jam 0,mem_ms_audio_key_press_count
+	jam SIGNLE_PRESS,mem_ms_tx_pro_key_val
+	fetch 2,mem_ms_long_press_key_index
+	isolate1 AUDIO_KEY_BIT,pdata
+	call p_ms_key_long_release,true
+	arg AUDIO_KEY_BIT,queue
+	call p_ms_long_press_key_index_disable
+	branch p_mouse_audio_key_state_enable
+
+p_mouse_multi_led_type_blink:
+	fetch 1,mem_mouse_multi_led_blink_type	//00:rtn	01:24g blink	02:le blink		03:reconn blink 	04:low blink	05:dpi blink
+	beq 6,p_mouse_multi_led_type_blink_next
+	branch mouse_multi_led_type_blink+2
+
+p_mouse_multi_led_type_blink_next:
+	arg mem_mouse_multi_led_blink_timer,regc
+	arg p_mouse_multi_led_blink,regb
+	branch timer_single_step
+
+p_mouse_multi_led_blink:
+	call mouse_multi_dpi_led_blink_timer_init
+	branch mouse_multi_led_blink+1
+
+p_mouse_fuction_key_led_blink:
+	jam 6,mem_mouse_multi_led_blink_type
+	jam ON,mem_mouse_multi_led_blink_enable
+	jam MULTI_LED_BLINK,mem_mouse_multi_led_type
+	rtn
+p_mouse_fuction_key_led_stop_blink:
+	jam OFF,mem_mouse_multi_led_blink_enable
+	jam MULTI_LED_BLINK,mem_mouse_multi_led_type
+	branch mouse_device_led_off
+
+p_mouse_audio_key_long_press_check:
+	fetch 1,mem_ms_audio_key_state
+	rtneq KEY_UP
+	fetch 1,mem_mouse_b4_fuction_info
+	// rtneq MS_KEY
+	// rtneq KB_KEY
+	rtnne APP_KEY
+	fetch 2,mem_ms_long_press_key_index
+	rtnbit1 AUDIO_KEY_BIT
+	fetch 1,mem_ms_audio_key_press_count
+	increase 1,pdata
+	store 1,mem_ms_audio_key_press_count
+	sub pdata,KEY_LONG_PRESS,null
+	rtn positive
+	jam LONG_PRESS,mem_ms_tx_pro_key_val
+	call p_mouse_fuction_key_led_blink
+	arg AUDIO_KEY_BIT,queue
+	call p_ms_long_press_key_index_enable
+p_mouse_audio_key_state_enable:
+	fetch 1,mem_mouse_pair_flag
+	rtn blank
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,p_ms_tx_pro_key_flag_enable
+	// fetcht 1,mem_mouse_b4_fuction_info+3
+	// jam OPCODE_VOICE_KEY,mem_ms_recv_ackpayload_temp
+	// branch p_ms_le_tx_key_state_interface
+p_le_audio_app_key_set:
+	fetch 1,mem_ms_tx_pro_key_val
+	beq LONG_PRESS,p_le_audio_app_key_long_set
+	beq LONG_RELEASE,p_le_audio_app_key_long_set
+	beq SIGNLE_PRESS,p_le_audio_key_single_set
+	rtn
+p_le_audio_app_key_long_set:
+	fetcht 1,mem_mouse_b4_fuction_info+3
+	branch p_ms_le_tx_key_state_interface
+p_le_audio_key_single_set:
+	fetcht 1,mem_mouse_b4_fuction_info+2
+	branch p_ms_le_tx_key_state_interface
+
+
+
+//=====================one pullup key==============//
+p_mouse_one_pullup_key_scan:
+	fetch 1,mem_ms_one_pullup_key_gpio
+	rtneq GPIO_DISABLE
+	jam MOUSE_ONE_PULLUP_KEY,mem_mouse_key_temp_patch
+	fetcht 1,mem_ms_one_pullup_key_gpio
+	call p_mouse_one_pullup_key_check
+	store 1,mem_ms_one_pullup_key_press_status
+	call mouse_matrix_public_gpio_reset
+	fetch 1,mem_ms_one_pullup_key_press_status
+	beq 0,p_one_pullup_key_up
+	beq 7,p_one_pullup_key_down
+	rtn
+
+p_mouse_one_pullup_key_check:
+	call gpio_get_bit
+	fetcht 1,mem_matrix_public_gpio
+	branch p_mouse_check_one_pullup_button_connect_gnd,true
+	fetcht 1,mem_matrix_public_gpio
+	call gpio_out_active
+	fetcht 1,mem_ms_one_pullup_key_gpio
+	fetch 1,mem_ms_one_pullup_key_press_status
+	branch mouse_check_key_connect_gnd_new
+
+p_mouse_check_one_pullup_button_connect_gnd:
+	fetch 1,mem_ms_one_pullup_key_press_status
+	branch mouse_check_key_connect_gnd_new
+
+p_one_pullup_key_down:
+	fetch 1,mem_ms_one_pullup_key_state
+	rtneq KEY_DOWN
+	jam KEY_DOWN,mem_ms_one_pullup_key_state
+	fetch 5,mem_mouse_dpi_fuction_info
+	branch p_app_key_replace
+
+p_one_pullup_key_up:
+	fetch 1,mem_ms_one_pullup_key_state
+	rtneq KEY_UP
+	jam KEY_UP,mem_ms_one_pullup_key_state
+	fetch 5,mem_mouse_dpi_fuction_info
+	store 5,mem_mouse_key_fuction_info_temp
+	fetchr rega,1,mem_mouse_fuction_key
+	fetch 1,mem_mouse_key_fuction_info_temp
+	beq MS_KEY,p_app_key_clear
+	beq KB_KEY,mouse_customerkey_release
+	jam 0,mem_ms_one_pullup_key_press_count
+	jam SIGNLE_PRESS,mem_ms_tx_pro_key_val
+	fetch 2,mem_ms_long_press_key_index
+	isolate1 ONE_PULLUP_KEY_BIT,pdata
+	call p_ms_key_long_release,true
+	arg ONE_PULLUP_KEY_BIT,queue
+	call p_ms_long_press_key_index_disable
+	branch p_mouse_one_pullup_key_state_enable
+
+p_ms_key_long_release:
+	jam LONG_RELEASE,mem_ms_tx_pro_key_val
+	branch p_mouse_fuction_key_led_stop_blink
+
+p_mouse_one_pullup_key_long_press_check:
+	fetch 1,mem_ms_one_pullup_key_state
+	rtneq KEY_UP
+	fetch 1,mem_mouse_dpi_fuction_info
+	// rtneq MS_KEY
+	// rtneq KB_KEY
+	rtnne APP_KEY
+	fetch 2,mem_ms_long_press_key_index
+	rtnbit1 ONE_PULLUP_KEY_BIT
+	fetch 1,mem_ms_one_pullup_key_press_count
+	increase 1,pdata
+	store 1,mem_ms_one_pullup_key_press_count
+	sub pdata,KEY_LONG_PRESS,null
+	rtn positive
+	jam LONG_PRESS,mem_ms_tx_pro_key_val
+	call p_mouse_fuction_key_led_blink
+	arg ONE_PULLUP_KEY_BIT,queue
+	call p_ms_long_press_key_index_enable
+p_mouse_one_pullup_key_state_enable:
+	fetch 1,mem_mouse_pair_flag
+	rtn blank
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,p_ms_tx_pro_key_flag_enable
+	// jam OPCODE_ONE_PULLUP_KEY,mem_ms_recv_ackpayload_temp
+	// fetcht 1,mem_mouse_dpi_fuction_info+3
+	// branch p_ms_le_tx_key_state_interface
+p_le_one_pullup_app_key_set:
+	fetch 1,mem_ms_tx_pro_key_val
+	beq LONG_PRESS,p_le_one_pullup_app_key_long_set
+	beq LONG_RELEASE,p_le_one_pullup_app_key_long_set
+	beq SIGNLE_PRESS,p_le_one_pullup_key_single_set
+	rtn
+p_le_one_pullup_app_key_long_set:
+	fetcht 1,mem_mouse_dpi_fuction_info+3
+	branch p_ms_le_tx_key_state_interface
+p_le_one_pullup_key_single_set:
+	fetcht 1,mem_mouse_dpi_fuction_info+2
+	branch p_ms_le_tx_key_state_interface
+
+
+
+//=====================transmit key==============//
+p_mouse_transmit_key_scan:
+	fetch 1,mem_ms_transmit_key_gpio
+	rtneq GPIO_DISABLE
+	jam MOUSE_TRANSMIT_KEY,mem_mouse_key_temp_patch
+	fetcht 1,mem_ms_transmit_key_gpio
+	call p_mouse_transmit_key_check
+	store 1,mem_ms_transmit_key_press_status
+	call mouse_matrix_public_gpio_reset
+	fetch 1,mem_ms_transmit_key_press_status
+	beq 0,p_transmit_key_up
+	beq 7,p_transmit_key_down
+	rtn
+
+p_mouse_transmit_key_check:
+	call gpio_get_bit
+	fetcht 1,mem_matrix_public_gpio
+	branch p_mouse_check_transmit_button_connect_gnd,true
+	fetcht 1,mem_matrix_public_gpio
+	call gpio_out_active
+	fetcht 1,mem_ms_transmit_key_gpio
+	fetch 1,mem_ms_transmit_key_press_status
+	branch mouse_check_key_connect_gnd_new
+
+p_mouse_check_transmit_button_connect_gnd:
+	fetch 1,mem_ms_transmit_key_press_status
+	branch mouse_check_key_connect_gnd_new
+	
+p_transmit_key_down:
+	fetch 1,mem_ms_transmit_key_state
+	rtneq KEY_DOWN
+	jam KEY_DOWN,mem_ms_transmit_key_state
+	fetch 5,mem_mouse_b5_fuction_info
+	branch p_app_key_replace
+
+p_transmit_key_up:
+	fetch 1,mem_ms_transmit_key_state
+	rtneq KEY_UP
+	jam KEY_UP,mem_ms_transmit_key_state
+	fetch 5,mem_mouse_b5_fuction_info
+	store 5,mem_mouse_key_fuction_info_temp
+	fetchr rega,1,mem_mouse_fuction_key	
+	fetch 1,mem_mouse_key_fuction_info_temp
+	beq MS_KEY,p_app_key_clear
+	beq KB_KEY,mouse_customerkey_release
+	jam 0,mem_ms_transmit_key_press_count
+	jam SIGNLE_PRESS,mem_ms_tx_pro_key_val
+	fetch 2,mem_ms_long_press_key_index
+	isolate1 TRANSMIT_KEY_BIT,pdata
+	call p_ms_key_long_release,true
+	arg TRANSMIT_KEY_BIT,queue
+	call p_ms_long_press_key_index_disable
+	branch p_mouse_transmit_key_state_enable
+
+p_mouse_transmit_key_long_press_check:
+	fetch 1,mem_ms_transmit_key_state
+	rtneq KEY_UP
+	fetch 1,mem_mouse_b5_fuction_info
+	// rtneq MS_KEY
+	// rtneq KB_KEY
+	rtnne APP_KEY
+	fetch 2,mem_ms_long_press_key_index
+	rtnbit1 TRANSMIT_KEY_BIT
+	fetch 1,mem_ms_transmit_key_press_count
+	increase 1,pdata
+	store 1,mem_ms_transmit_key_press_count
+	sub pdata,KEY_LONG_PRESS,null
+	rtn positive
+	jam LONG_PRESS,mem_ms_tx_pro_key_val
+	call p_mouse_fuction_key_led_blink
+	arg TRANSMIT_KEY_BIT,queue
+	call p_ms_long_press_key_index_enable
+p_mouse_transmit_key_state_enable:
+	fetch 1,mem_mouse_pair_flag
+	rtn blank
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,p_ms_tx_pro_key_flag_enable
+	// jam OPCODE_TRANSMIT_KEY,mem_ms_recv_ackpayload_temp
+	// fetcht 1,mem_mouse_b5_fuction_info+3
+	// branch p_ms_le_tx_key_state_interface
+p_le_transmit_app_key_set:
+	fetch 1,mem_ms_tx_pro_key_val
+	beq LONG_PRESS,p_le_transmit_app_key_long_set
+	beq LONG_RELEASE,p_le_transmit_app_key_long_set
+	beq SIGNLE_PRESS,p_le_transmit_key_single_set
+	rtn
+p_le_transmit_app_key_long_set:
+	fetcht 1,mem_mouse_b5_fuction_info+3
+	branch p_ms_le_tx_key_state_interface
+p_le_transmit_key_single_set:
+	fetcht 1,mem_mouse_b5_fuction_info+2
+	branch p_ms_le_tx_key_state_interface
+
+//=====================audio config==============//
+p_audio_disable:
+	fetch 1,mem_ms_audio_enable_flag
+	rtn blank
+	jam 0,mem_ms_audio_enable_flag
+	jam 1,mem_lpm_mode
+	jam 0,mem_voice_enable
+	jam 0,mem_adc_dma_enable
+	jam 0x0f,mem_24g_fast_hop_count
+	jam 0,mem_voice_queue_count
+	jam 0,core_sadc_ctrl
+	jam ADC_BATTERY,mem_ms_adc_mode
+	branch p_ms_updata_connect_param_req
+
+p_audio_enable:
+	fetch 1,mem_ms_audio_enable_flag
+	nrtn blank
+	jam 1,mem_ms_audio_enable_flag
+	jam 0,mem_lpm_mode
+	jam 2,mem_ms_audio_enable_timer
+p_audio_enable_config:
+	jam 0,0x8074
+	jam 0,0x8076
+	call p_voice_updata_connect_param_req
+	call p_voice_queue_init
+	// branch p_audio_init
+p_audio_init:
+	call sadc_calibration
+	jam 0x00,mem_adc_channel//gpio9
+	jam 1,mem_adc_clkdiv
+	jam 1,mem_adc_dma_enable
+	jam ADC_AUDIO,mem_ms_adc_mode
+	fetch 2,mem_adc_audio_saddr_ptr
+	store 2,mem_adc_dma_rptr	
+	branch p_enable_adc
+
+p_enable_adc:
+	fetch 1,mem_ms_adc_mode
+ifdef ADC
+	beq ADC_BATTERY,p_enable_adc_battery
+endif
+	beq ADC_AUDIO,p_enable_adc_audio
+	rtn
+
+p_enable_adc_battery:
+	jam 0x00,0x8ac6
+	jam 0x30,0x8ac7
+	jam 0x09,mem_adc_channel
+	jam 0x0a,mem_adc_clkdiv
+	branch enable_adc+1
+
+p_enable_adc_audio:
+	jam 0x1b,0x8ac6	//micbias enable
+	// jam 0x7b,0x8ac7	//micbias gain control
+	jam 0x1f,0x8ac7	//micbias gain control
+	call sadc_cal_write
+	fetch 1,core_gpadc_cfg1
+	set0 7,pdata
+	store 1,core_gpadc_cfg1
+	jam 0x70,core_gpadc_ctrl	//adc ouput voltage set
+	jam 0x43,core_gpadc_cfg0	
+	jam 0x0c,core_gpadc_cfg3	//vol from channel
+	jam 0xef,core_gpadc_cfg2	//disable write
+	call sadc_channel
+	fetch 1,mem_adc_clkdiv
+	store 1,core_sadc_clkdiv
+	nop 3000
+	call p_sadc_read
+	jam 0,core_sadc_clkdiv
+	branch p_sadc_audio_dma
+
+p_sadc_audio_dma:
+	fetch 1,mem_adc_dma_enable
+	rtn blank	
+	fetch 1,core_gpadc_cfg1
+	set1 7,pdata
+	store 1,core_gpadc_cfg1
+	fetch 1,mem_adc_clkdiv
+	store 1,core_sadc_clkdiv
+	fetch 2,mem_adc_audio_saddr_ptr
+	store 2,core_sadc_saddr
+	fetch 2,mem_adc_audio_eaddr_ptr
+	store 2,core_sadc_eaddr
+	jam 0x8b,core_sadc_ctrl
+	nop 3000
+	jam 0x83,core_sadc_ctrl
+	jam 2,core_sadc_clkdiv
+	rtn
+
+p_sadc_calibration:
+	rtn wake
+	jam 0x77,core_gpadc_ctrl
+	jam 0xc9,core_gpadc_cfg0
+	jam 0x00,core_gpadc_cfg3
+	fetch 1,mem_adc_clkdiv
+	store 1,core_sadc_clkdiv
+	call p_sadc_read
+	fetcht 2,core_sadc_data
+	branch sadc_calibration+11
+
+p_sadc_read:
+	jam 0x83,core_sadc_ctrl
+	fetch 1,mem_ms_adc_mode
+	ncall p_sadc_ctrl_set,blank
+	call sar_adc_read_wait
+	jam 0x80,core_sadc_ctrl
+	rtn
+
+p_sadc_ctrl_set:
+	jam 0x8b,core_sadc_ctrl
+	rtn
+
+//================audio data enter queue==============//
+p_voice_adpcm_enter_queue:
+	fetch 1,mem_voice_enable
+	rtn blank
+	call p_audio_get_len
+	sub pdata,AUDIO_BUF_UINT,null
+	rtn positive
+p_voice_enter_queue:
+	fetch 1,mem_voice_queue_count
+	arg VOICE_QUEUE_MAX_COUNT,temp
+	increase -1,temp
+	isub temp,null
+//	rtn positive
+	branch p_audio_update_adc_rptr,positive
+ifdef LOG_RAW
+	call p_print_audio_raw_data
+endif
+	call p_audio_adpcm_encode
+	call p_audio_update_adc_rptr
+
+	setarg mem_voice_adpcm_buf_start
+	call rec_queue_enter_config
+	arg mem_adpcm,contr
+	arg VOICE_QUEUE_UNIT,loopcnt
+	call rec_enter_queue
+	fetch 1,mem_voice_queue_count
+	increase 1,pdata
+	store 1,mem_voice_queue_count
+	rtn
+//	branch p_voice_adpcm_enter_queue
+
+/*********************************************************************************
+ * Description  : get audio data len
+ * Parameters  : none
+ * Returns         : len= wptr-rptr>0 or wptr<rptr-->len=max_buff-(rptr-wptr)
+**********************************************************************************/
+p_audio_get_len:
+	fetch 2,core_adc_dma_wptr
+	copy pdata,rega
+	fetcht 2,mem_adc_dma_rptr
+	isub temp,pdata
+	nbranch p_audio_get_len_wptr_over,positive
+	rtn
+
+p_audio_get_len_wptr_over:
+	copy rega,temp
+	fetch 2,mem_adc_dma_rptr
+	isub temp,temp
+	setarg AUDIO_BUF_LEN
+	isub temp,pdata
+	rtn
+
+p_audio_update_adc_rptr:
+	fetch 2,mem_adc_dma_rptr
+	increase AUDIO_BUF_UINT,pdata
+	arg mem_voice_raw_end,temp
+	increase 1,temp
+	isub temp,null
+	branch p_audio_adc_dma_ptr_over,zero
+	branch p_store_adc_dma_rptr
+	// store 2,mem_adc_dma_rptr
+	// rtn
+
+p_audio_adc_dma_ptr_over:	
+	setarg mem_voice_raw_start
+p_store_adc_dma_rptr:
+	store 2,mem_adc_dma_rptr
+	rtn
+
+
+p_le_audio_data_out_from_queue:
+	fetch 1,mem_device_flag
+	rtneq MODE_24G_DEVICE
+	fetch 1,mem_voice_enable
+	rtn blank
+	fetch 1,mem_voice_queue_count
+	rtn blank
+	call le_fifo_check_nearly_full
+	nrtn blank
+	call p_voice_out_queue
+ifdef LOG_ENCODE
+	call p_print_audio_encode_data
+endif
+	branch p_ms_le_tx_audio_data
+//	branch p_le_audio_data_out_from_queue
+
+/*
+ * @brief: get audio data buff addr
+ * @param: none
+ * @return: pdata: mem_queue_buf ptr
+ */
+p_voice_out_queue:
+	setarg mem_voice_adpcm_buf_start
+	call rec_queue_out_config
+	arg VOICE_QUEUE_UNIT,loopcnt
+	arg mem_queue_buf,contw
+	call rec_out_queue
+	fetch 1,mem_voice_queue_count
+	increase -1,pdata
+	store 1,mem_voice_queue_count
+	setarg mem_queue_buf
+	rtn
+
+
+p_voice_queue_init:
+	setarg mem_voice_adpcm_buf_start
+	arg VOICE_QUEUE_SIZE,temp
+	call rec_queue_init_config
+	jam 0,mem_voice_queue_count
+	rtn
+
+
+
+
+
+
+
+//======================audio adpcm========================//
+p_audio_adpcm_encode:	
+	jam 120,mem_ad_in_numSamples1
+	fetch 2,mem_adc_dma_rptr
+	store 2,mem_ad_in_ptr1
+	setarg mem_adpcm
+	store 2,mem_ad_out_ptr1
+p_adpcm_encode:
+	fetch 4,mem_ad_state_valpred1
+	store 4,mem_ad_valpred1
+	
+	fetch 4,mem_ad_state_index1
+	store 4,mem_ad_index1
+	
+	fetch 1,mem_ad_index1		// step = stepsizeTable[index];  
+	lshift2 pdata,pdata
+	arg mem_ad_stepsizeTable1,temp
+	iadd temp,temp
+	ifetch 4,temp
+	store 4,mem_ad_step1
+	
+	jam 1,mem_ad_bufferstep1
+p_adpcm_encode_loop:
+	call p_adpcm_get_val_from_inp 	// val = *inp++;
+
+	fetch 4,mem_ad_val1			// diff = val - valpred;
+	fetcht 4,mem_ad_valpred1
+	isub temp,pdata
+	store 4,mem_ad_diff1
+	
+	call p_adpcm_encode_cal_delta	//sign = (diff < 0) ? 8 : 0;
+	call p_adpcm_set_diff_by_sign	//if ( sign ) diff = (-diff);
+
+	jam 0,mem_ad_delta1			//delta = 0;
+
+	fetch 4,mem_ad_step1 			//vpdiff = (step >> 3);
+	rshift3 pdata,pdata
+	store 4,mem_ad_vpdiff1
+
+	call p_check_diff_big_step1  		//if ( diff >= step ) {  delta = 4;
+
+	fetch 4,mem_ad_step1			//step >>= 1;
+	rshift pdata,pdata
+	store 4,mem_ad_step1
+
+	call p_check_diff_big_step2		//if ( diff >= step  ) {    delta |= 2;
+
+	fetch 4,mem_ad_step1			//step >>= 1;
+	rshift pdata,pdata
+	store 4,mem_ad_step1
+
+	call p_check_diff_big_step3		//if ( diff >= step ) {delta |= 1;
+
+	call p_check_sign_deal1			//	if ( sign )
+
+	call p_adpcm_check_valpred_more_32767 //if ( valpred > 32767 )
+
+	fetch 1,mem_ad_delta1			//delta |= sign;
+	fetcht 1,mem_ad_sign1
+	ior temp,pdata
+	store 1,mem_ad_delta1
+
+	fetch 1,mem_ad_delta1			//index += indexTable[delta];
+	arg mem_ad_indexTable1,temp
+	iadd temp,temp
+	ifetch 1,temp
+	call rec_char_2_int32
+	fetcht 4,mem_ad_index1
+	iadd temp,pdata
+	store 4,mem_ad_index1
+
+	call p_adpcm_check_index_less_0		//if ( index < 0 ) index = 0;
+	call p_adpcm_check_index_big_88		//if ( index > 88 ) index = 88;
+
+	fetch 4,mem_ad_index1			// step = stepsizeTable[index];  
+	lshift2 pdata,pdata
+	arg mem_ad_stepsizeTable1,temp
+	iadd temp,temp
+	ifetch 4,temp
+	store 4,mem_ad_step1
+
+	call p_adpcm_check_bufferstep		//if(bufferstep){
+
+	fetch 1,mem_ad_bufferstep1		//bufferstep = !bufferstep;
+	arg 0x01,temp
+	ixor temp,pdata
+	store 1,mem_ad_bufferstep1
+
+	fetch 1,mem_ad_in_numSamples1
+	increase -1,pdata
+	store 1,mem_ad_in_numSamples1
+	nbranch p_adpcm_encode_loop, blank
+
+
+	fetch 1,mem_ad_bufferstep1
+	call p_adpcm_set_bufferstep_to_outp,blank
+
+	fetch 4,mem_ad_valpred1
+	store 4,mem_ad_state_valpred1
+
+	fetch 4,mem_ad_index1
+	store 4,mem_ad_state_index1
+	rtn
+
+//pdata :diff
+p_adpcm_encode_cal_delta:
+	fetch 4,mem_ad_diff1
+	bbit1 31,p_adpcm_encode_cal_smaller_zero
+	setarg 0
+	branch p_store_ad_sign1
+	// store 1,mem_ad_sign1
+	// rtn
+
+p_adpcm_encode_cal_smaller_zero:
+	setarg 8
+p_store_ad_sign1:
+	store 1,mem_ad_sign1
+	rtn
+
+p_adpcm_set_diff_by_sign:
+	fetch 1,mem_ad_sign1
+	nbranch p_adpcm_diff_negation,blank
+	rtn
+
+p_adpcm_diff_negation:
+	fetch 4,mem_ad_diff1
+	sub pdata,0,pdata
+	store 4,mem_ad_diff1
+	rtn
+
+p_check_diff_big_step1:
+	fetch 4,mem_ad_diff1
+	fetcht 4,mem_ad_step1
+	isub temp,pdata
+	rtnbit1 31
+	jam 4,mem_ad_delta1
+p_check_diff_big_common:
+	fetch 4,mem_ad_diff1
+	fetcht 4,mem_ad_step1
+	isub temp,pdata
+	store 4,mem_ad_diff1
+p_check_diff_big_common_next:
+	fetch 4,mem_ad_vpdiff1
+	fetcht 4,mem_ad_step1
+	iadd temp,pdata
+	store 4,mem_ad_vpdiff1
+	rtn
+
+p_check_diff_big_step2:
+	fetch 4,mem_ad_diff1
+	fetcht 4,mem_ad_step1
+	isub temp,pdata
+	rtnbit1 31
+	fetch 1,mem_ad_delta1
+	or pdata,2,pdata
+	store 1,mem_ad_delta1
+	branch p_check_diff_big_common
+
+
+p_check_diff_big_step3:
+	fetch 4,mem_ad_diff1
+	fetcht 4,mem_ad_step1
+	isub temp,pdata
+	rtnbit1 31
+	fetch 1,mem_ad_delta1
+	or pdata,1,pdata
+	store 1,mem_ad_delta1
+	branch p_check_diff_big_common_next
+
+
+p_check_sign_deal1:
+	fetch 1,mem_ad_sign1
+	branch p_valpred_add_vpdiff,blank
+p_valpred_sub_vpdiff:
+	fetch 4,mem_ad_valpred1
+	fetcht 4,mem_ad_vpdiff1
+	isub temp,pdata
+p_valpred1_store:
+	store 4,mem_ad_valpred1
+	rtn
+
+p_valpred_add_vpdiff:
+	fetch 4,mem_ad_valpred1
+	fetcht 4,mem_ad_vpdiff1
+	iadd temp,pdata
+	branch p_valpred1_store
+
+p_adpcm_check_valpred_more_32767:
+	fetch 4,mem_ad_valpred1
+	arg 32767,temp
+	isub temp,pdata
+	bbit0 31,p_adpcm_valpred_more_32767
+p_adpcm_check_valpred_less_f32767:	
+	fetch 4,mem_ad_valpred1
+	arg -32767,temp
+	isub temp,pdata
+	bbit1 31,p_adpcm_valpred_less_f32767
+	rtn
+
+p_adpcm_valpred_more_32767:
+	setarg 32767
+	branch p_valpred1_store
+p_adpcm_valpred_less_f32767:
+	setarg -32767
+	branch p_valpred1_store
+
+p_adpcm_check_index_less_0:
+	fetch 4,mem_ad_index1
+	arg 0,temp
+	isub temp,pdata
+	bbit1 31,p_adpcm_set_0_index
+	rtn
+
+p_adpcm_check_index_big_88:
+	fetch 4,mem_ad_index1
+	arg 88,temp
+	isub temp,pdata
+	bbit0 31,p_adpcm_set_88_index
+	rtn
+
+p_adpcm_set_0_index:
+	setarg 0
+p_adpcm_store_index1:
+	store 4,mem_ad_index1
+	rtn
+
+p_adpcm_set_88_index:
+	setarg 88
+	branch p_adpcm_store_index1
+
+p_adpcm_check_bufferstep:
+	fetch 1,mem_ad_bufferstep1
+	branch p_adpcm_bufferstep_eque_0,blank
+p_adpcm_bufferstep_neque_0:
+	fetch 1,mem_ad_delta1
+	and pdata,0x0f,pdata
+	store 4,mem_ad_outputbuffer1	
+	rtn
+
+//*outp++=((delta<<4)&0xf0)|outputbuffer
+p_adpcm_bufferstep_eque_0:
+	fetch 1,mem_ad_delta1
+	lshift4,pdata,pdata
+	and pdata,0xf0,pdata
+	fetcht 4,mem_ad_outputbuffer1
+	ior temp,pdata
+	fetcht 2,mem_ad_out_ptr1
+	istore 1,temp	
+	increase 1,temp
+	storet 2,mem_ad_out_ptr1
+	rtn
+
+p_adpcm_set_bufferstep_to_outp:
+	fetch 4,mem_ad_outputbuffer1
+	fetcht 2,mem_ad_out_ptr1
+	istore 1,temp
+	increase 1,temp
+	storet 2,mem_ad_out_ptr1
+	rtn
+
+//val = *inp++;
+//val: int ,4 byte
+//inp:shourt int ,2byte
+p_adpcm_get_val_from_inp:	
+	fetcht 2,mem_ad_in_ptr1
+	ifetch 2,temp
+	increase 2,temp
+	storet 2,mem_ad_in_ptr1
+	call rec_int16_2_int32
+	store 4,mem_ad_val1
+	rtn
+
+
+endif
+
+
+//=======================================log patch================================================//
+ifdef UART_LOG
+p_app_uarta_init:
+	fetch 1,core_uart_ctrl
+	set0 BIT_UART_CONTROL_ENABLE,pdata
+	store 1,core_uart_ctrl
+	fetch 8,mem_app_uart_rx_buff_sptr
+	call uarta_init_dma_mem
+	fetch uart_baud_len,mem_app_uart_baud_rate
+	call uarta_init_baud_rate
+	call uart_clock_select_main_freq_crystal
+	fetch 1,mem_app_uart_tx_gpio
+	arg gpcfg_uart_txd,temp
+	call gpio_config_function_int
+	fetch 1,mem_app_uart_rx_gpio
+	arg gpcfg_uart_rxd|gpcfg_pullup,temp
+	call gpio_config_function_int
+	arg FUN_UART_CONTROL_ENABLE|FUN_UART_CONTROL_SETTING_RATE_BAUD,temp
+	storet 1,core_uart_ctrl
+	rtn
+
+//input: 1 byte hex @pdata  
+//output: 4 byte  '0','x', ASCII,ASCII, @pdata
+hex2ascii:
+	rshift4 pdata,rega  //high 4bit in rega
+	and_into 0x0f,pdata
+	call hex2ascii_half_byte
+	copy pdata,regb
+	copy rega,pdata
+	call hex2ascii_half_byte
+	lshift8 regb,regb
+	iadd regb,pdata
+//	lshift16 pdata,pdata
+//	arg 0x7830,regb   //0x
+//	iadd regb,pdata
+	rtn
+	
+//input: 1 byte hex @pdata  
+//output: 4 byte  '0','x', ASCII,ASCII, @pdata
+hex2ascii_half_byte:
+	arg 0xa,temp
+	isub temp,temp
+	nbranch hex2ascii_half_byte_numberic,positive
+	setarg 0x41  // A
+	iadd temp,pdata
+	rtn
+hex2ascii_half_byte_numberic:
+	arg 0x30,temp
+	iadd temp,pdata
+	rtn
+
+//input: loopcnt--length,regc--data ptr	
+log_bytes:
+	copy loopcnt,pdata
+	branch log_len0,blank
+log_bytes_loop:
+	ifetch 1,regc
+	increase 1,regc
+	call log_byte
+	call log_space
+	loop log_bytes_loop
+uart_wait:
+	fetch 1,core_uart_status
+	bbit1 uart_status_tx_busy,uart_wait
+//	nop 12000
+	rtn
+
+//input 1byte @pdata
+log_byte:
+	call uarta_prepare_tx
+	//call hex2ascii
+//	istore 4,contu	//0x
+	//istore 2,contwu
+	istore 1,contwu
+	branch uarta_send
+
+log_len0:
+	call uarta_prepare_tx
+	setarg 0x656c
+	istore 2,contwu
+	setarg 0x306e
+	istore 2,contwu
+	call uarta_send
+	branch log_end
+
+log_space:
+	call uarta_prepare_tx
+	setarg 0x20
+	istore 1,contwu
+	branch uarta_send
+
+log_end:
+	call uarta_prepare_tx
+	setarg 0x0a0d
+	istore 2,contwu
+	branch uarta_send
+
+ifdef LOG_RAW
+p_print_audio_raw_data:
+	call p_app_uarta_init
+	fetchr regc,2,mem_adc_dma_rptr
+	arg AUDIO_BUF_UINT,loopcnt
+endif
+p_audio_log_bytes_loop:
+	ifetch 1,regc
+	increase 1,regc
+	call log_byte
+	loop p_audio_log_bytes_loop
+p_audio_uart_wait:
+	fetch 1,core_uart_status
+	bbit1 uart_status_tx_busy,p_audio_uart_wait
+//	nop 12000
+	rtn
+
+ifdef LOG_ENCODE
+p_print_audio_encode_data:
+	call p_app_uarta_init
+	arg mem_queue_buf,regc
+	arg VOICE_QUEUE_UNIT,loopcnt
+	branch p_audio_log_bytes_loop
+endif
+endif
+//=======================================test patch================================================//
+/*
+p_mouse_motion:
+	disable user
+	setarg 0
+	store 6,mem_mouse_x
+	fetch 1,mem_24g_matrix_cnt
+	increase 1,pdata
+	store 1,mem_24g_matrix_cnt
+	sub pdata,50,null
+	branch p_ms_x_right,positive
+
+	sub pdata,100,null
+	branch p_ms_y_up,positive
+
+	sub pdata,150,null
+	branch p_ms_x_left,positive
+	sub pdata,200,null
+	branch p_ms_y_down,positive
+	rtn
+
+p_ms_x_right:
+	setarg 5
+	store 2,mem_mouse_x
+p_data:
+	enable user
+	branch mouse_no_data_timer_init
+
+p_ms_y_up:
+	setarg 5
+	store 2,mem_mouse_y
+	branch p_data
+
+p_ms_x_left:
+	setarg -5
+	store 2,mem_mouse_x
+	branch p_data
+p_ms_y_down:
+	fetch 1,mem_24g_matrix_cnt
+	beq 200,p_mem_usb_data_square_cnt_set0
+	setarg -5
+	store 2,mem_mouse_y
+	branch p_data
+p_mem_usb_data_square_cnt_set0:
+	jam 0,mem_24g_matrix_cnt
+	branch p_ms_y_down+2
+*/
+
+
+
+//=============================ZCODE PATCH ===================================//
+// input : mem_zcode_temp_param0 ---- zocde number(0~1f)
+p_zcode_entrance:
+	fetcht 1,mem_zcode_temp_param0 // zcode number @ high 4bit
+	rshift4 temp,temp
+	fetch 1,mem_zcode_current_number
+	isub temp,null
+	branch p_zcode_run,zero // if this zcode is already loaded, do not load again
+	storet 1,mem_zcode_current_number
+	increase 1,temp
+	setarg ZCODE_BUFF_SIZE
+	imul32 temp,temp
+	fetch 2,mem_xip_flash_offset
+	isub temp,pdata
+
+	fetcht 2,mem_eeprom_start_addr
+	iadd temp,pdata
+	store 2,mem_eeprom_address
+p_zcode_read_loop:
+	fetch 2,mem_eeprom_address
+	byteswap pdata,pdata
+	store 2,mem_addr_mi
+
+	arg ZCODE_BUFF_SIZE,temp
+	arg mem_zcode_buff,rega
+	call iicd_read_eep
+
+	fetch 4,mem_zcode_buff
+	fetcht 4,mem_zcode_head	//p_start
+	isub temp,null
+	nbranch p_zcode_read_loop,zero	//sometimes we will lost p_start,read flash again
+
+	setarg mem_zcode_buff
+	store 2,mem_patch_ptr
+	jam ZCODE_CODE_SIZE,mem_patch_len
+	call load_ucode
+	setarg 0
+	store 4,mem_patch_ptr
+p_zcode_run:
+	fetch 1,mem_zcode_temp_param0
+	branch p_zcode
\ No newline at end of file
Index: program/peripherals.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/peripherals.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/peripherals.prog	(working copy)
@@ -0,0 +1,3251 @@
+
+
+
+/* ===================== two wire SPI gpio ======================= */
+
+//pdata:gpio number
+twspi_reset:
+	bpatch patch1c_5,mem_patch1c
+	sub temp,UI_BUTTON_GPIO_DISABLE,null
+	rtn zero
+	copy temp,pdata
+	and_into 0xff,pdata
+	sub pdata,GPIO_NUMBER+-1,null
+	nbranch twspi_reset_ext,positive
+	arg core_gpio_conf,contw
+twspi_reset_next:
+	iadd contw,contw
+	copy contw,rega
+	arg gpcfg_output_low,temp
+	istoret 1,contw
+	call twspi_disable
+	nop 30
+	copy rega,contw
+	arg gpcfg_output_high,temp
+	istoret 1,contw
+	branch twspi_enable
+	
+twspi_reset_ext:
+	arg core_gpio_conf_hi,contw
+	increase -16,pdata
+	branch twspi_reset_next
+
+
+twspi_disable:
+	fetch 1,core_spid_delay
+	and_into 0x7f,pdata
+	store 1,core_spid_delay
+	rtn
+
+twspi_enable:
+	fetch 1,core_spid_delay
+	or_into 0x80,pdata
+	store 1,core_spid_delay
+	rtn
+
+twspi_write:
+	branch spid_write_reg
+
+twspi_read:
+	branch spid_read_reg
+
+
+/* ===================== code loading ======================= */
+aes_disable:
+	fetch 1,core_bist_ctrl
+	set0 AES_EN,pdata
+	store 1,core_bist_ctrl
+	rtn
+
+read_function_aes:
+	nbranch read_function,user
+	fetch 1,core_bist_ctrl
+	set1 AES_EN,pdata
+	store 1,core_bist_ctrl
+read_function:
+	copy temp,null //length
+	branch read_fuction_zero,zero
+	copy regc,pc  //branch pc
+	
+read_fuction_zero:
+	isolate0 0,null  // always true
+	branch set_ucode_status
+	
+/* return temp = block length */
+get_block_header:
+	force 4,temp
+get_block_header0:
+	arg mem_ucode_buf,rega
+	call aes_disable	// disable aes for header
+	call read_function
+	arg 0x55aa,rega
+	fetch 2,mem_ucode_buf
+	ifetcht 2,contr
+	isub rega,null
+	rtn
+
+
+read_first_block:
+	call load_aes_reinit,user
+	arg 2,temp
+	arg mem_ucode_ptr,rega
+	call read_function
+	fetch 2,mem_ucode_ptr
+read_first_block_cont:
+	store 2,mem_addr_mi
+	call get_iv,user
+	rtn
+	
+get_iv:
+	arg 16,temp
+	arg mem_ucode_keybuf,rega
+	call aes_disable	// disable aes for iv
+	call read_function
+set_iv:
+	arg mem_ucode_keybuf,contr
+	arg 16,loopcnt
+	call aes_load_data
+	call aes_init
+	call aes_clear_data
+	branch do_aes_cbc			// generate first IV 
+
+load_aes_reinit:
+	jam 0x0, core_ucode_ctrl
+	call aes_disable
+	branch aes_clear_data
+
+load_storage:
+	setarg 0
+	store 2,mem_queue	//data checksum
+	disable match
+	call get_block_header
+	nrtn zero
+	enable match
+	setarg 0x8000
+	store 3,core_ucode_hi
+	arg core_ucode_data,rega
+	call read_function_aes
+	jam 0x0, core_ucode_ctrl
+	fetch 1,mem_ucode_status
+	rtnbit0 0           //rtn if load code fail
+load_storage_loop:
+	arg 6,temp
+	call get_block_header0
+	nbranch load_data_checksum_compare,zero
+	ifetchr rega,2,contr
+	call read_function
+	call load_data_checksum_calc
+	branch load_storage_loop
+
+
+load_data_checksum_calc:
+	fetch 2,mem_queue
+	arg 6,loopcnt
+	arg mem_ucode_buf,contr
+	call cal_sum
+	fetchr loopcnt,2,mem_ucode_len
+	copy rega,contr
+	call cal_sum
+	store 2,mem_queue
+	rtn
+
+load_data_checksum_compare:
+	fetch 1,mem_otp_load_check_sum
+	beq 0x5a,load_data_checksum_ok //skip check sum 
+	arg 0xaa55,rega
+	fetch 2,mem_ucode_buf
+	isub rega,null
+	nbranch load_data_checksum_compare_fail, zero
+	arg 0x55aa,rega
+	fetch 2,mem_ucode_len
+	isub rega,null
+	nbranch load_data_checksum_compare_fail, zero
+	fetch 2,mem_sched_addr
+	fetcht 2,mem_queue	//calc  sum
+	isub temp,null
+	nbranch load_data_checksum_compare_fail, zero
+load_data_checksum_ok:
+	set1 15,rega
+	branch read_fuction_zero
+
+load_data_checksum_compare_fail:
+	jam 0,mem_ucode_status
+	rtn
+
+/*
+	// only load memory data from eeprom 
+reload_eeprom:
+	call clean_xmem
+	setarg 0x1000
+	store 2,mem_addr_mi
+	arg iicd_read_eep,regc
+	arg 2,loopcnt
+reload_eeprom_loop:
+	call get_block_header
+	nrtn zero
+	fetch 2,mem_addr_mi
+	byteswap pdata,pdata
+	iadd temp,pdata
+	byteswap pdata,pdata
+	store 2,mem_addr_mi
+	loop reload_eeprom_loop
+	branch load_storage_loop
+*/
+
+loadcode_lock_load_ucode:
+//	and pdata,0xf,temp
+//	storet 1,mem_ucode_flag
+	and pdata,0xff,pdata
+	rshift4 pdata,pdata
+	store 1,mem_device_option
+	branch loadcode_load_key
+
+loadcode_lock:
+	fetch 2,core_ucode_flag 
+	nbranch loadcode_lock_load_ucode, blank 	
+	call loadcode_load_key
+	fetch 2,mem_device_option
+	rtn blank
+	call loadcode_set_lock
+	branch lpm_write_lock
+	
+loadcode_set_lock:
+	fetch 1,mem_device_option
+	rtn blank
+	and pdata,0xf,temp
+	storet 1,mem_device_option
+	rshift4 pdata,pdata
+	ixor temp,pdata
+	bne 0xf,app_lpm_mpu_lock_24g_ble
+	branch app_lpm_lock_check
+
+load_otp_hv_vsel:
+	fetch 1,mem_otp_hv_sel
+	ncall lpm_save_sel_hv, blank
+	fetch 1,mem_otp_ldo_vsel
+	rtn  blank
+	branch lpm_write_io_vsel
+
+
+load_otp_set_init:
+	bpatch patch1c_6,mem_patch1c
+	nrtn wake
+	fetch 2,mem_otp_charge_pump_x
+	rtn blank
+	store 2,mem_otp_charge_pump
+	branch set_otp_config2
+
+set_otp_config:
+	call load_otp_hv_vsel
+	fetch 4 ,mem_otp_core_ldo
+	rtn blank
+	until null,lpo_edge
+	fetch 1,0x8136
+	and pdata,0xf0,pdata
+	fetcht 1,mem_otp_core_ldo
+	ior temp,pdata
+	store 1,0x8136 
+	until null,lpo_edge
+
+	fetch 1,0x8138
+	and pdata,0x7,pdata
+	fetcht 1,mem_otp_verf_bg
+	lshift3 temp,temp
+	ior temp,pdata
+	store 1,0x8138 
+	until null,lpo_edge	
+set_otp_config2:
+	fetch 1,0x8acb
+	and pdata,0xf0,pdata
+	fetcht 1,mem_otp_charge_pump
+	storet 1,mem_otp_charge_pump_x
+	ior temp,pdata
+	store 1,0x8acb
+
+	fetch 1,mem_otp_dpll_ibais
+	store 1,mem_otp_dpll_ibais_x
+	isolate1 3,pdata
+	fetch 1,0x8a06
+	setflag true,7,pdata
+	store 1,0x8a06
+	
+	fetch 1,mem_otp_dpll_ibais
+	and pdata,7,temp
+	lshift4 temp,temp
+	lshift temp,temp
+	storet 1,mem_ring_ibias_trim
+	fetch 1,0x8a02
+	and pdata,0x1f,pdata
+	ior temp,pdata
+	store 1,0x8a02
+	rtn	
+	
+
+loadcode_load_key:
+	disable user
+	fetch 1,mem_ucode_flag
+	rtnbit0 OTP_UFLAG_AES	
+	call loadcode_check_otp_lock
+	arg OTP_OFFSET_UCODE_KEY_L,pdata
+	iadd regb,regb
+	force 16,loopcnt
+	arg mem_ucode_keybuf,rega
+	call otp_read_data
+	jam OTP_KEY_LOCK,core_misc_ctrl
+	arg mem_ucode_keybuf,contr
+	call load_key
+//	call aes_clear_data
+	arg mem_ucode_keybuf,contw
+	call memset0_16
+	branch enable_user
+	
+
+loadcode:
+	jam 0x25,core_clkoff			// disable debug uart
+	call enable_otp_read
+	arg OTP_OFFSET_PATCH_PTR,regb
+	force 11,loopcnt
+	arg mem_ucode_ptr,rega
+	call otp_read_data1
+	fetchr regf,5,mem_ucode_ptr
+	fetchr rege,6,mem_bistfix_val
+	fetch 1,mem_ucode_flag
+	bbit0 OTP_UFLAG_BIST,loadcode_nobist
+	jam 0x7,core_bist_ctrl
+loadcode_bistwait:
+	fetch 1,core_bist_done
+	bne 7,loadcode_bistwait
+	fetch 1,core_bist_fail
+	lshift4 pdata,pdata
+	store 1,core_bist_ctrl
+	branch loadcode_otp
+	
+loadcode_nobist:
+	call set_bistfix
+	call clean_xmem
+	call clean_smem
+loadcode_otp:
+	storer regf,5,mem_ucode_ptr
+	storer rege,6,mem_bistfix_val
+	call loadcode_check_otp_lock
+	arg OTP_OFFSET_ADC_PARAM_L,pdata
+	iadd regb,regb
+	arg 32,loopcnt
+	arg mem_otp_temp,rega
+	call otp_read_data
+
+	call set_otp_config	
+	call loadcode_lock
+
+	fetch 1,mem_ucode_flag
+	bbit0 OTP_UFLAG_AES,loadcode_unenc
+	fetcht 1,mem_peripheral_lock_flag
+	arg 0,pdata
+	set1 OTP_NOT_LIMIT,pdata
+	set1 OTP_LIMIT,pdata
+	iand temp,rega
+	sub rega,0,null
+	branch loadcode_error,zero
+	isub rega,null
+	branch loadcode_error,zero
+loadcode_unenc:
+	jam 0,mem_loadcode_times
+	arg otp_load_code,regc	
+loadcode_otp_loop:
+	call loadcode_timeout
+	nbranch loadcode_error,positive	
+	fetch 2,mem_ucode_ptr
+	branch loadcode_otp_end,blank
+	call read_first_block_cont
+	call load_storage
+	nbranch loadcode_otp_end,match
+	fetch 1,mem_ucode_status
+	compare 3,pdata,3
+	nbranch loadcode_otp_loop,true	// otp crc error, try again
+	call run_otp_code
+loadcode_otp_end:
+	call disable_otp
+	jam 0,mem_loadcode_times
+loadcode_iic_loop:
+	call loadcode_timeout
+	nbranch loadcode_error,positive	
+	fetch 1,mem_ucode_flag
+	bbit1 OTP_UFLAG_SKIP_EEP,loadcode_spi
+	call iicd_load_gpio_init
+	call clear_eeprom_size_2k
+	call loadcode_iic_by_eeprom
+	nbranch loadcode_iic_eeprom_2k,match
+	fetch 1,mem_ucode_status
+	compare 3,pdata,3
+	nbranch loadcode_iic_loop,true		// eeprom crc error, try again
+	branch loadcode_spi
+
+run_otp_code:
+	setarg 0x1ff //patch3f_7
+	arg 0,pc
+	rtn
+
+loadcode_check_otp_lock:
+	arg OTP_OFFSET_H,regb
+	fetch 1,core_peripheral_lock
+	bbit1 OTP_LIMIT,loadcode_otp_lock
+	fetch 1,mem_peripheral_lock_flag
+	rtnbit0 OTP_LIMIT
+loadcode_otp_lock:	
+	arg 0,regb
+	rtn
+	
+			
+loadcode_iic_eeprom_2k:
+	call set_eeprom_size_2k
+	fetch 1,mem_ucode_flag
+	bbit1 OTP_UFLAG_SKIP_EEP,loadcode_spi
+	call loadcode_iic_by_eeprom
+	nbranch loadcode_spi,match
+	fetch 1,mem_ucode_status
+	compare 3,pdata,3
+	nbranch loadcode_iic_loop,true		// eeprom crc error, try again
+	branch loadcode_hci
+	
+loadcode_spi:
+	jam 0,mem_loadcode_times
+loadcode_spi_loop:
+	call loadcode_timeout
+	nbranch loadcode_error,positive	
+	fetch 1,mem_ucode_flag
+	bbit1 OTP_UFLAG_SKIP_FLASH, loadcode_hci
+	call spid_init_flash
+	nop 200						// some flash will fail if no delay here
+	call spid_flash_release_form_powerdown
+	nop 100	
+	arg spid_load_flash,regc
+	call read_first_block
+	call load_storage
+	nbranch loadcode_hci,match
+	fetch 1,mem_ucode_status
+	compare 3,pdata,3
+	nbranch loadcode_spi_loop,true	// flash crc error, try again
+
+loadcode_hci:
+	call clear_key_buf
+	fetch 1,mem_ucode_flag
+	rtnbit0 OTP_UFLAG_HCI
+	branch hci_init
+	
+clear_key_buf:
+	arg mem_ucode_keybuf,contw
+	call memset0_16
+	force regidx_key,regext_index
+	call aes_clear
+	jam 0x21,core_clkoff		// enable debug uart
+	rtn
+
+iicd_load_gpio_init:
+	fetch 1,mem_eeprom_sda_gpio
+	fetcht 1,mem_eeprom_scl_gpio
+	isub temp,null
+	nbranch iicd_read_init_pin,zero
+iicd_load_default_gpio:
+	jam 4,mem_eeprom_wp_gpio
+	jam 8,mem_eeprom_scl_gpio  
+	jam 7,mem_eeprom_sda_gpio 
+	branch iicd_read_init_pin
+
+
+
+loadcode_iic_by_eeprom:
+	setarg 0x0
+	store 2,mem_addr_mi
+	arg iicd_read_eep,regc
+	call iic_init_600khz
+	call read_first_block
+	branch load_storage
+
+
+
+//output: positive 1:continue load ;0:load timeout
+loadcode_timeout:
+	call loadcode_error_delay
+	fetch 1,mem_loadcode_times
+	increase 1,pdata
+	sub pdata,3,null
+	store 1,mem_loadcode_times	 
+	rtn
+	
+loadcode_error_delay:
+	fetch 1,mem_loadcode_times
+	rtn blank
+	fetch 1,mem_otp_load_delay
+	rtn blank
+	copy pdata,loopcnt
+	branch delay_ms_wait
+	
+	
+loadcode_error:
+	call clear_key_buf
+	call aes_disable
+//	call ice_break_disable_wdt
+	call ice_break
+	rtn
+
+set_bistfix_wake:
+	call set_bistfix
+	call set_bistfix_wake_xram
+
+set_bistfix_wake_patchram:
+	fetch 1,core_bist_ctrl
+	rtnbit0 BIST_CTRL_FIX_PATCH_RAM
+//	jam 0x80, core_ucode_ctrl
+	call set_bistfix_set_patchram_addr
+	arg 4,loopcnt
+	arg mem_bistfix_val_patchram,contr
+	branch load_ucode_loop
+
+
+set_bistfix_wake_xram:
+	fetch 1,core_bist_ctrl
+	rtnbit0 BIST_CTRL_FIX_XRAM
+	fetcht 2,mem_bistfix_addr_x
+	rshift3 temp,temp
+	arg 0x4000,pdata //add offset
+	iadd temp,contw
+	fetch 1,mem_bistfix_val_xram	
+	branch istore_1_contw_rtn
+
+
+set_bistfix_save_xram:
+	bpatchx patch3e_2,mem_patch3e
+	fetch 1,core_bist_ctrl
+	rtnbit0 BIST_CTRL_FIX_XRAM
+	fetchr rega, 2,mem_bistfix_addr_x
+	rshift3 rega,rega
+	arg 0x4000,pdata //add offset
+	iadd rega,contr
+	ifetch 1,contr
+	store 1,mem_bistfix_val_xram
+	rtn
+	
+set_bistfix_save_patchram:
+	rtn wake
+	fetch 1,core_bist_ctrl
+	rtnbit0  BIST_CTRL_FIX_PATCH_RAM 
+	call set_bistfix_set_patchram_addr
+	nop 10
+	arg 4,loopcnt
+	arg mem_bistfix_val_patchram,contw
+	branch save_ucode_loop
+	
+set_bistfix_set_patchram_addr:
+	jam 0,core_ucode_hi	
+	fetch 2,mem_bistfix_addr_patch
+	rshift4 pdata,pdata
+	rshift pdata,pdata
+	rshift4 pdata,temp
+	rshift2 temp,temp
+	set1 7,temp
+	storet 1,core_ucode_ctrl
+	lshift2 pdata,pdata
+	store 1,core_ucode_low
+	rtn
+	
+	
+set_bistfix:
+	fetch 1,mem_ucode_flag
+	and_into 0xe0,pdata
+	rtn blank
+	rshift pdata,pdata
+	store 1,core_bist_ctrl
+	setarg 1
+	arg mem_bistfix_val,contr
+set_bistfix_loop:
+	ifetcht 2,contr
+	storet 2,core_lpm_reg
+	store 1,core_set_bistfix
+	lshift pdata,pdata
+	bbit0 3,set_bistfix_loop
+	rtn
+	
+/* true flag is set into status,rega pointers to buf, */
+set_ucode_status:
+	fetch 1,mem_ucode_status
+	lshift pdata,pdata
+	setflag true,0,pdata
+	isolate0 15,rega  // load code if rega.15 = 1
+	rtn true
+	store 1,mem_ucode_status
+	rtn
+
+	/* queue is bit position of hw done status */
+decrypt_code:
+	fetch 1,core_bist_ctrl
+	rtnbit0 AES_EN
+	branch decrypt_code_skip	/* skip to key generation at first for speed */
+decrypt_code_loop:
+	fetch 1,core_dma_status
+	qisolate1 pdata
+	rtn true
+decrypt_code_skip:
+	fetch 1,core_misc_status
+	bbit0 1,decrypt_code_loop
+	call do_aes_cbc
+	branch decrypt_code_loop
+
+	/* loopcnt is ucode instruction count, pdata is buffer ptr */
+//save_ucode:
+//	copy loopcnt,temp
+//	storet 2,mem_patch_len
+//	jam 0x80, core_ucode_ctrl
+//	jam 0,core_ucode_hi
+//	jam 0,core_ucode_low
+//	store 2,mem_patch_ptr
+//	iforce contw
+//	lshift2 loopcnt,loopcnt
+save_ucode_loop:
+	fetch 1,core_ucode_data
+	istore 1,contw
+	loop save_ucode_loop
+	jam 0x0, core_ucode_ctrl
+	rtn
+
+
+load_ucode:
+	fetch 2,mem_patch_ptr
+	rtn blank
+	jam 0x80, core_ucode_ctrl
+	jam 0,core_ucode_hi
+	jam 0,core_ucode_low
+	fetcht 2,mem_patch_len
+	lshift2 temp,loopcnt
+	iforce contr
+load_ucode_loop:
+	ifetch 1,contr
+	store 1,core_ucode_data
+	loop load_ucode_loop
+	jam 0x0, core_ucode_ctrl
+	rtn
+
+	
+
+/* ===================== OTP ======================= */
+
+/* temp is length, rega pointers to buf  */
+otp_load_code:
+	copy temp,loopcnt
+	fetch 2,mem_addr_mi
+	iadd temp,temp
+	storet 2,mem_addr_mi
+	iforce regb
+	copy rega,nap
+	jam INIT_KEY,core_misc_ctrl
+	call otp_read_data
+	copy nap,rega
+	isolate0 15,rega
+	rtn true
+	call enable_true,blank		// pdata == 0, crc ok, set true to 1
+	branch set_ucode_status
+	
+ifdef CFX	
+
+
+/* regb=otp address, rega points to data, loopcnt is count */
+otp_read_data:
+	bpatch patch1c_7,mem_patch1c
+otp_read_data1:
+	storer regb,2,core_otp_addr
+	setarg -1
+	jam 0x5c,core_otp_ctrl2		// blen&wlen
+otp_read_loop:
+	jam 0x7c,core_otp_ctrl2		// sclk
+	jam 0x5c,core_otp_ctrl2		// blen&wlen
+	fetcht 1,core_otp_rdata
+	istoret 1,rega
+	bcrc temp
+	isolate1 15,rega
+	branch otp_read_noinc,true
+	increase 1,rega
+otp_read_noinc:
+	increase 1,regb
+	storer regb,2,core_otp_addr
+	loop otp_read_loop
+	jam 0x44,core_otp_ctrl2		// turn off blen&wlen
+	rtn
+
+
+/* regb = otp address, rega pointers data, loopcnt is count */
+otp_write:
+	bpatch patch1d_0,mem_patch1d
+	storer regb, 2,core_otp_addr
+	ifetcht 1,rega
+	arg 0,queue
+otp_write_loop:
+	qisolate1 temp
+	call otp_write_bit,true
+	increase 1,queue
+	compare 8,queue,0xff
+	nbranch otp_write_loop,true
+	increase 1,rega
+	fetch 2,core_otp_addr
+	pincrease 1
+	loop otp_write
+	rtn
+
+	
+otp_write_bit:
+	lshift4 queue,pdata
+	store 1,core_otp_pab
+	nop 30
+	jam 0xc0,core_otp_ctrl2		// ween
+	nop 200
+	jam 0xd0,core_otp_ctrl2		// blen
+	nop 3
+	jam 0xd8,core_otp_ctrl2		// wlen
+	nop 600
+	jam 0xd0,core_otp_ctrl2		// turn off wlen
+	nop 3
+	jam 0xc0,core_otp_ctrl2		// turn off blen
+	nop 30
+	rtn
+
+disable_otp:
+	jam 0x40,core_otp_ctrl2		// turn off reen
+	nop 200
+	jam 0x0,core_otp_ctrl2
+	jam 0,0x8a0f
+	rtn
+
+enable_otp:
+	jam 5,0x8a0f
+	jam 0x24,0x8a14				// vdd18
+	nop 200
+	jam 0x40,core_otp_ctrl2		// ce
+	nop 400
+	rtn
+
+enable_otp_read:
+	call enable_otp
+	jam 0x44,core_otp_ctrl2		// reen
+	nop 300
+	rtn	
+
+else
+
+otp_enable_chgpump25:
+	jam 0x1,core_chgpump_ctrl
+	nop 300
+	jam 0x5,core_chgpump_ctrl
+	nop 100
+	jam 0x25,core_chgpump_ctrl
+	nop 1000
+	jam 0x27,core_chgpump_ctrl
+	nop 300
+	rtn
+
+otp_enable_chgpump65:
+	call otp_enable_chgpump25
+	jam 0x3f,core_chgpump_ctrl
+	rtn
+
+disable_otp:
+	jam 0x83,core_otp_ctrl	/* initial otp state */
+otp_disable_chgpump:
+	jam 0,core_chgpump_ctrl
+	rtn
+	
+enable_otp_read:
+	call otp_enable_chgpump25
+
+otp_reset:
+	jam 0x82,core_otp_ctrl	/* ceb */
+	nop 12
+	jam 0x80,core_otp_ctrl	/* rstn */
+	jam 0x82,core_otp_ctrl	/* release rstn */
+	nop 150					/* waiting for vdd25 stable */
+	rtn
+
+	
+otp_set_addr:
+	lshift3 regb,regb
+	storer regb,2,core_otp_addr
+	jam 0,core_otp_din
+	rtn	
+
+/* regb = otp address, rega pointers data, loopcnt is count */
+otp_write:
+	bpatch patch1d_1,mem_patch1d
+	call otp_enable_chgpump65
+	call otp_set_addr
+	call otp_reset
+otp_program:
+	ifetcht 1,rega
+	increase 1,rega
+	force 0,queue
+otp_program_bit:
+	qisolate0 temp
+	branch otp_skip_0,true
+	fetch 1,core_otp_din
+	set1 6,pdata				/* din */
+	set1 7,pdata				/* dle */
+	store 1,core_otp_din
+	jam 0x02,core_otp_ctrl	/* web */
+	jam 0x82,core_otp_ctrl
+	set0 7,pdata				/* dle */
+	store 1,core_otp_din
+	jam 0x8a,core_otp_ctrl	/* pgmen */
+	nop 11
+	jam 0xca,core_otp_ctrl	/* vppen */
+	nop 33
+	jam 0x4a,core_otp_ctrl	/* web 2nd */
+	nop 44
+	jam 0xca,core_otp_ctrl	/* release web */
+	nop 22
+	jam 0x8a,core_otp_ctrl	/* release vppen */
+	nop 33
+	jam 0x82,core_otp_ctrl	/* release pgmen */
+	nop 1
+	jam 0x92,core_otp_ctrl	/* pgmvfy */
+	nop 10
+	jam 0xb2,core_otp_ctrl	/* readen */
+	fetch 1,core_otp_rdata
+	jam 0x92,core_otp_ctrl	/* release readen */
+	nop 1
+	jam 0x82,core_otp_ctrl	/* release pgmvfy */
+	nop 1
+	qisolate0 pdata
+	branch otp_program_bit,true	/* program error */
+otp_skip_0:
+	fetch 2,core_otp_addr
+	increase 1,pdata
+	store 2,core_otp_addr
+	increase 1,queue
+	compare 8,queue,0xf
+	nbranch otp_program_bit,true
+	loop otp_program
+	branch otp_disable_chgpump
+
+
+
+	
+	/* regb=otp address, rega points to data, loopcnt is count */
+otp_read_data:
+	bpatch patch1d_2,mem_patch1d
+otp_read_data1:
+	call otp_set_addr
+	jam 0xa2,core_otp_ctrl	/* readen */
+	increase 8,regb
+	arg 0,queue
+	setarg -1
+otp_read_data_loop:
+	fetcht 1,core_otp_rdata
+	istoret 1,rega
+	bcrc temp
+	jam SHIFT_KEY,core_misc_ctrl
+	storer regb,2,core_otp_addr
+	isolate1 15,rega
+	branch otp_read_noinc,true
+	increase 1,rega
+	branch otp_read_unenc
+	
+otp_read_noinc:
+	nbranch otp_read_unenc,user
+	increase 1,queue
+	compare 0,queue,0xf
+	nbranch otp_read_unenc,true
+	call do_aes_cbc
+	jam INIT_KEY,core_misc_ctrl
+otp_read_unenc:
+	increase 8,regb
+	loop otp_read_data_loop
+	jam 0x82,core_otp_ctrl	/* release readen */
+	rtn
+
+
+
+
+
+endif
+
+
+/* ===================== LOCK ======================= */
+
+
+app_lpm_lock_check:
+	fetch 1,mem_device_option
+	beq DVC_OP_MODULE,app_lpm_module_lock
+	beq DVC_OP_DONGLE,app_lpm_dongle_lock
+//	beq DVC_OP_TEST,app_lpm_peripheral_lock_test
+	beq DVC_OP_MOUSE,app_lpm_mouse_lock
+	beq DVC_OP_SHUTTER,app_lpm_shutter_lock
+	beq DVC_OP_SHUTTER_DY,app_lpm_shutter_lock
+	beq DVC_OP_HCI_BOOT,app_lpm_hciboot_lock
+	beq DVC_OP_REMOTE_CAR,app_lpm_car_lock_application_and_ble
+	beq DVC_OP_CAR,app_lpm_car_lock
+	beq DVC_OP_KEYBOARD,app_lpm_kb_lock
+	beq DVC_OP_2G4,app_lpm_mpu_lock_ble 
+	beq DVC_OP_BLE,app_lpm_mpu_lock_24g
+	beq DVC_OP_MOUSE_2G4,app_lpm_mouse_lock_24g
+	branch app_lpm_mpu_lock_24g_ble
+
+
+app_lpm_kb_lock:
+	arg module_init,pdata  //module
+	arg shutter_dy_shutter_1s_timer,temp //shutter dy
+	branch app_mpu_s0_lock
+	
+app_lpm_module_lock:
+app_lpm_hciboot_lock:
+	arg car_init,pdata  //module
+	arg keyboard_bt_discovery_button_down_disable,temp //kb
+	call app_mpu_s0_lock
+	branch app_lpm_mpu_lock_24g	
+	
+app_lpm_dongle_lock:
+	arg keyboard_softreset_process,pdata //kb
+	arg shutter_dy_shutter_1s_timer,temp  //shutter dy
+	call app_mpu_s0_lock
+	arg car_init,pdata  //car
+	arg remote_car_wakeup_config_loop,temp //remote car 
+	branch app_mpu_s1_lock
+	
+	
+app_lpm_mouse_lock:
+	arg car_init,pdata //
+	arg module_set_state,temp  //module
+	call app_mpu_s0_lock
+	arg rec_cb_function,pdata  //rec
+	arg shutter_dy_shutter_1s_timer,temp //shutter dy
+	branch app_mpu_s1_lock
+
+app_lpm_mouse_lock_24g:
+	arg car_init,pdata //
+	arg module_set_state,temp  //module
+	call app_mpu_s0_lock
+	branch app_lpm_mpu_lock_ble
+	
+app_lpm_shutter_lock:
+	arg car_init,pdata  //
+	arg rec_enter_queue,temp // rec
+	call app_mpu_s0_lock
+	branch app_lpm_mpu_lock_24g
+	
+app_lpm_car_lock:
+	arg dongle_init,pdata  //dongle
+	arg shutter_dy_shutter_1s_timer,temp //shutter dy
+	branch app_mpu_s0_lock
+	 
+
+app_lpm_car_lock_application_and_ble:
+	arg dongle_init,pdata  //dongle
+	arg shutter_dy_shutter_1s_timer,temp //shutter dy
+	call app_mpu_s0_lock
+	arg le_send_adv_ind,pdata  //ble
+	arg le_send_ll_one_lenth,temp //ble
+	branch app_mpu_s1_lock
+
+
+app_mpu_s0_lock:
+	lshift16 temp,temp
+	ior temp,pdata
+	branch lpm_write_mpu_s0
+	
+/*	
+app_lpm_mpu_lock_app:	
+	arg car_init,pdata  //
+	arg ui_soft_switch_power_off,temp //shutter
+	branch app_mpu_s0_lock
+*/
+
+app_lpm_mpu_lock_ble:	
+	arg le_parse_att,pdata
+	arg le_send_ll_one_lenth,temp
+app_mpu_s1_lock:
+	lshift16 temp,temp
+	ior temp,pdata
+	branch lpm_write_mpu_s1
+	
+app_lpm_mpu_lock_24g:	
+	arg g24_prep,pdata
+	arg g24_factory_check,temp
+	branch app_mpu_s1_lock
+	
+app_lpm_mpu_lock_24g_ble:
+	call app_lpm_mpu_lock_24g
+	arg le_parse_att,pdata
+	arg le_send_ll_one_lenth,temp
+	branch app_mpu_s0_lock
+
+
+
+/* ===================== SPI dma ======================= */
+
+spid_init:
+	bpatch patch1d_3,mem_patch1d
+spid_init_common:
+	fetch 1,mem_spi_init_clk
+	store 1,core_spid_ctrl	// A7530 should at least 34, or write fail
+	fetch 1,mem_spi_init_delay_time
+	store 1,core_spid_delay	// 4us delay
+	setarg mem_spid_tbuf
+	store 2,core_spid_txaddr
+	setarg mem_spid_rbuf
+	store 2,core_spid_rxaddr
+	branch twspi_disable
+	
+
+
+/* pdata 6:0 is reg address, 15:8 is data to write */
+spid_write_reg:
+	set1 7,pdata
+	store 2,mem_spid_tbuf
+	bpatch patch1d_4,mem_patch1d
+	jam 2,core_spid_txlen
+	jam 0,core_spid_rxlen
+	jam spid_start,core_misc_ctrl
+	branch wait_spid_done
+
+/* pdata 6:0 is reg address, temp is bytes to read */
+spid_read_reg:
+	force 1,temp
+spid_read_regs:	
+	store 1,mem_spid_tbuf
+	bpatch patch1d_5,mem_patch1d
+	jam 1,core_spid_txlen
+	storet 2,core_spid_rxlen
+	jam spid_start,core_misc_ctrl
+	call wait_spid_done
+	fetch 1,mem_spid_rbuf
+	rtn
+
+
+wait_spid_done:
+//	fetch 2,mem_afh_error_total
+//	increase 1,pdata
+//	store 2,mem_afh_error_total
+	nop 5
+	fetch 1,core_dma_status
+	bbit0 spid_done,wait_spid_done
+	rtn
+
+	
+
+
+
+
+/**
+ ******************************************************************************
+ ** \brief  write flash
+ **
+ ** \param [in]  rega: 2byte write ptr    
+ **			pdata:3byte flash address  
+ ** 			temp:2byte write data length
+ **
+ ** \retval user  0: flash buys 1:write flash setting complate
+ **
+ ******************************************************************************/
+
+flash_write:
+	disable user
+	copy pdata,regb
+	fetch 1,mem_spi_write_flash_sm
+	rtnne FLASH_SM_NO_BUYS
+	enable user
+	copy regb,pdata
+	branch spid_flash_write_start
+
+
+flash_write_spi_sm_timer:
+	fetch 1,mem_spi_write_flash_sm 	
+	beq FLASH_SM_START,spid_flash_write_start
+	beq FLASH_SM_ERASE_SECTOR,spid_flash_erase_sector
+	beq FLASH_SM_WAIT_ERASE_SECTOR,spid_flash_wait_erase_sector
+	beq FLASH_SM_WRITE_DATA,spid_flash_write_data
+	beq FLASH_SM_WAIT_WRITE_DATA,spid_flash_wait_write_data
+	rtn
+
+spid_flash_write_start:
+	store 3,mem_spi_write_addr
+	copy rega,pdata
+	store 2,mem_spi_write_ptr
+	storet 2,mem_spi_write_len
+	jam FLASH_SM_ERASE_SECTOR,mem_spi_write_flash_sm
+	branch spid_init_flash
+	
+spid_flash_erase_sector:
+	call spid_init_flash
+	jam FLASH_SM_WAIT_ERASE_SECTOR,mem_spi_write_flash_sm
+	call spid_unlock_flash
+	arg mem_spid_tbuf,rega
+	jam 4,core_spid_txlen
+	fetch 3,mem_spi_write_addr
+	arg FLASH_COMMAND_SECTOR_ERASE,temp
+	branch spid_write_flash_common
+	
+spid_flash_wait_erase_sector:
+	call spid_init_flash
+	call wait_spid_flash_done
+	jam FLASH_SM_WRITE_DATA,mem_spi_write_flash_sm
+	rtn
+
+
+spid_flash_write_data:
+	bpatch patch1d_6,mem_patch1d
+	call spid_init_flash
+	jam FLASH_SM_WAIT_WRITE_DATA,mem_spi_write_flash_sm
+	call spid_unlock_flash
+	call spid_flash_data_preserve
+	call spid_write_flash
+	branch spid_flash_data_recover
+spid_flash_wait_write_data:
+	call spid_init_flash
+	call spid_unlock_flash
+	setarg FLASH_READ_SATUS
+	call spid_read_reg
+	rtnbit1 FLASH_STATUS_WIP
+	jam FLASH_SM_NO_BUYS,mem_spi_write_flash_sm
+	fetch 2,mem_cb_spi_flash_write_complate
+	branch callback_func
+spid_flash_data_recover:
+	fetch 4,mem_temp
+	fetcht 2,mem_spi_write_ptr
+spid_flash_data_recover_comm:
+	increase -4,temp
+	istore 4,temp
+	rtn
+	
+spid_flash_data_preserve:
+	fetcht 2,mem_spi_write_ptr
+	copy temp,rega
+	increase -4,temp
+	ifetch 4,temp
+	store 4,mem_temp
+	fetcht 2,mem_spi_write_len
+	fetch 3,mem_spi_write_addr
+	rtn
+
+spid_init_flash:
+	bpatch patch1d_7,mem_patch1d
+	call spi_gpio_init
+	call twspi_disable
+	setarg 0
+	store 4,mem_spid_tbuf
+	rtn
+
+spid_unlock_flash:
+	jam FLASH_COMMAND_WRITE_ENABLE,mem_spid_tbuf
+spid_sendcmd_common:	
+	setarg 0
+	store 2,core_spid_rxlen
+	setarg 1
+	store 2,core_spid_txlen
+	setarg mem_spid_tbuf
+	store 2,core_spid_txaddr
+	jam spid_start,core_misc_ctrl
+	branch wait_spid_done
+	
+spid_flash_release_form_powerdown:
+	jam FLASH_COMMAND_RELEASE_FROM_POWERDOWN,mem_spid_tbuf
+	branch spid_sendcmd_common
+	
+spid_flash_powerdown:
+	jam FLASH_COMMAND_POWERDOWN,mem_spid_tbuf
+	branch spid_sendcmd_common
+
+spid_write_flash_data:
+	store 3,mem_pdatatemp
+	storet 2,mem_temp
+	storer rega,2,mem_rega
+	bpatch patch1e_0,mem_patch1e
+	call spid_unlock_flash
+	fetch 3,mem_pdatatemp
+	fetcht 2,mem_temp
+	fetchr rega,2,mem_rega
+	branch spid_write_flash
+	
+/* pdata is flash address, rega pointers to txdata(4 ahead bytes should be left), temp is length */
+spid_write_flash:
+	increase 4,temp
+	storet 2,core_spid_txlen
+	arg FLASH_COMMAND_WRITE_DATA,temp
+	increase -4,rega
+
+spid_write_flash_common:
+	istoret 1,rega
+	rshift16 pdata,temp
+	istoret 1,contw
+	rshift8 pdata,temp
+	istoret 1,contw
+	istore 1,contw
+	deposit rega
+	store 2,core_spid_txaddr
+	setarg 0
+	store 2,core_spid_rxlen
+	jam spid_start,core_misc_ctrl
+	call wait_spid_done
+	branch wait_spid_flash_done
+
+
+/* temp is length, rega pointers to buf   */
+spid_read_flash:
+	storet 2,core_spid_rxlen
+	rshift16 pdata,temp
+	storet 1,mem_addr_hi
+	rshift8 pdata,temp
+	storet 1,mem_addr_mi
+	store 1,mem_addr_lo
+	setarg 4
+	store 2,core_spid_txlen
+	jam FLASH_COMMAND_READ_DATA,mem_spid_tbuf
+	setarg mem_spid_tbuf
+	store 2,core_spid_txaddr
+	deposit rega
+	store 2,core_spid_rxaddr
+	fetch 1,core_spid_ctrl
+	isolate0 15,rega
+	setflag true,6,pdata
+	store 1,core_spid_ctrl
+	jam spid_start,core_misc_ctrl
+spid_read_flash_wait:
+	fetch 1,core_dma_status
+	bbit1 7,spid_read_flash_wait			// waiting for spid write
+	arg spid_done,queue
+	branch wait_spid_done
+
+wait_spid_flash_done:
+	setarg 2000
+	call sleep
+	call spid_unlock_flash
+	setarg mem_spid_rbuf
+	store 2,core_spid_rxaddr
+	setarg FLASH_READ_SATUS
+	call spid_read_reg
+	bbit1 FLASH_STATUS_WIP,wait_spid_flash_done
+	rtn
+
+
+
+
+/* temp is length, rega pointers to buf  */
+spid_load_flash:
+	storet 2,core_spid_rxlen
+	setarg 4
+	store 2,core_spid_txlen
+	jam 3,mem_spid_tbuf
+	setarg mem_spid_tbuf
+	store 2,core_spid_txaddr
+	deposit rega
+	store 2,core_spid_rxaddr
+	fetch 1,core_spid_ctrl
+	isolate0 15,rega
+	setflag true,6,pdata
+	store 1,core_spid_ctrl
+	jam spid_start,core_misc_ctrl
+spi_load_flash_wait:
+	fetch 1,core_dma_status
+	bbit1 7,spi_load_flash_wait			// waiting for spid write
+	arg spid_done,queue
+	call decrypt_code
+	call wait_spid_done
+	isolate1 spid_crcok,pdata
+	call set_ucode_status
+	fetch 1,mem_addr_hi
+	lshift16 pdata,regb
+	fetch 2,mem_addr_mi
+	byteswap pdata,pdata
+	ior regb,pdata
+	iadd temp,pdata
+	store 1,mem_addr_lo
+	rshift8 pdata,pdata
+	byteswap pdata,pdata
+	store 2,mem_addr_hi
+	rtn
+	
+spi_gpio_init:
+	fetch 1,mem_spi_cs_gpio
+	fetcht 1,mem_spi_so_gpio
+	isub temp,null
+	nbranch spi_pin_set,zero
+	call spi_gpio_default_init
+	
+spi_pin_set:
+	fetch 1,mem_spi_cs_gpio
+	arg gpcfg_spid_ncs,temp
+	call gpio_config_function_int
+	fetch 1,mem_spi_sclk_gpio
+	arg gpcfg_spid_sck,temp
+	call gpio_config_function_int
+	fetch 1,mem_spi_si_gpio
+	arg gpcfg_spid_mosi,temp
+	call gpio_config_function_int
+	fetch 1,mem_spi_so_gpio
+	arg gpcfg_spid_miso,temp
+	branch gpio_config_function_int
+
+spi_gpio_default_init:
+	jam 1,mem_spi_cs_gpio
+	jam 3,mem_spi_si_gpio
+	jam 0,mem_spi_so_gpio
+	jam 2,mem_spi_sclk_gpio
+	jam 11,mem_spi_wp_gpio
+	jam 10,mem_spi_hold_gpio
+	rtn
+
+
+/*****************************************************************************
+*soft reset chip
+*****************************************************************************/
+soft_reset_chip:
+	jam 1,core_reset
+	rtn
+
+
+
+/* ===================== I2C dma ======================= */
+
+/* scl high time: scl_high + 2 clks, scl low time:scl_low + 6 clks
+data setup time: data_setup + 2 clks, data hold time: scl_low-setup-hold+4 clks */
+iic_init_600khz:
+	jam 5,core_iicd_scl_low
+ 	jam 7,core_iicd_scl_high
+	jam 7,core_iicd_start_setup
+	jam 7,core_iicd_start_hold
+	jam 7,core_iicd_stop_setup
+	jam 5,core_iicd_data_setup
+	jam 0,core_iicd_data_hold
+	rtn
+	
+iic_init_360khz:	//360khz
+	jam 12,core_iicd_scl_low
+	jam 13,core_iicd_scl_high
+	jam 13,core_iicd_start_setup
+	jam 13,core_iicd_start_hold
+	jam 13,core_iicd_stop_setup
+	jam 12,core_iicd_data_setup
+	jam 0,core_iicd_data_hold	
+  	rtn
+
+iicd_init_pin:
+	call iicd_eeprom_write_enable
+iicd_init_pin_scl_sda:
+	fetch 1,mem_eeprom_scl_gpio
+	arg gpcfg_iic_scl|gpcfg_pullup,temp
+	call gpio_config_function_int
+	fetch 1,mem_eeprom_sda_gpio
+	arg gpcfg_iic_sda|gpcfg_pullup,temp
+	branch gpio_config_function_int
+
+iicd_read_init_pin:
+	call iicd_eeprom_write_disable
+	branch iicd_init_pin_scl_sda
+
+wait_iicd_done:
+	fetch 1,core_dma_status
+	bbit0 iicd_done,wait_iicd_done
+	rtn
+
+/*	// pdata is iic addr, rega points to buf, temp is length 
+iicd_read_data:
+	store 1,mem_iicd_addr
+	setarg mem_iicd_addr
+	store 2,core_iicd_txaddr
+	setarg 1
+	store 2,core_iicd_txlen
+	storet 2,core_iicd_rxlen
+	storer rega,2,core_iicd_rxaddr
+	jam 1,core_iicd_ctrl
+	jam iicd_start,core_misc_ctrl
+	branch wait_iicd_done
+
+	// rega points to buf, temp is length 
+iic_write_data:
+	setarg 0
+	store 2,core_iicd_rxlen
+	store 2,core_iicd_rxaddr
+	storet 2,core_iicd_txlen
+	storer rega,2,core_iicd_txaddr
+	jam 1,core_iicd_ctrl
+	jam iicd_start,core_misc_ctrl
+	branch wait_iicd_done
+*/
+set_eeprom_size_2k:
+	set1 mark_eeprom_size,mark
+	jam 0x08,mem_eeprom_block_size
+	rtn
+
+clear_eeprom_size_2k:
+	set0 mark_eeprom_size,mark
+	jam 0x20,mem_eeprom_block_size
+	rtn
+
+
+iicd_read_eep_data_size_2k:
+ 	fetch 1,mem_eeprom_base
+	iadd regb,pdata
+	store 1,mem_addr_mi
+	branch iicd_read_eep_size_2k
+
+iicd_read_eep_size_2k_lcadcode:
+	fetch 2,mem_addr_mi
+	byteswap pdata,pdata
+	store 1,mem_addr_mi
+	
+//length:temp 
+//mem ptr:rega
+//eeprom addr:pdata
+iicd_read_eep_size_2k:
+ 	setarg 3
+	store 2,core_iicd_txlen
+	jam 0xa0,mem_iicd_tbuf
+	jam 0xa1,mem_iicd_tbuf+2
+	branch iicd_read_eep_common
+
+
+//length:temp 
+//mem ptr:rega
+//eeprom addr:regb
+iicd_write_protect_eep_data:
+	storet 2,mem_temp
+	call iicd_eeprom_write_enable
+	fetcht 2,mem_temp
+	call iicd_write_eep_data
+	branch iicd_eeprom_write_disable
+	
+iicd_eeprom_write_enable:
+	fetch 1,mem_eeprom_wp_gpio
+	rtneq GPIO_DISABLE
+	bbit0 6,iicd_wp_gpio_output_low
+	setarg 150000
+	call sleep
+iicd_wp_gpio_output_low:
+	fetcht 1,mem_eeprom_wp_gpio
+	branch gpio_out_active
+	
+iicd_eeprom_write_disable:
+	fetcht 1,mem_eeprom_wp_gpio
+	branch gpio_out_inactive
+	
+//length:temp 
+//mem ptr:rega
+//eeprom addr offset:regb
+iicd_read_eep_data:
+	bpatch patch1e_1,mem_patch1e
+	bmark1 mark_eeprom_size,iicd_read_eep_data_size_2k
+	fetch 2,mem_eeprom_base
+iicd_read_eep_data_next:
+	iadd regb,pdata
+	byteswap pdata,pdata
+	store 2,mem_addr_mi
+
+/* rega pointers to buf, temp is length  */
+iicd_read_eep:
+	bpatch patch1e_2,mem_patch1e
+	bmark1 mark_eeprom_size,iicd_read_eep_size_2k_lcadcode
+	setarg 4
+	store 2,core_iicd_txlen
+	jam 0xa0,mem_iicd_tbuf
+	jam 0xa1,mem_iicd_tbuf+3
+iicd_read_eep_common:	
+	setarg mem_iicd_tbuf
+	store 2,core_iicd_txaddr
+	storet 2,core_iicd_rxlen
+	storer rega,2,core_iicd_rxaddr
+	setarg 2
+	isolate0 15,rega
+	setflag true,0,pdata
+	store 1,core_iicd_ctrl
+	jam iicd_start,core_misc_ctrl
+	arg iicd_done,queue
+	call decrypt_code
+	call wait_iicd_done
+	isolate1 iicd_crcok,pdata
+	call set_ucode_status
+	bmark1 mark_eeprom_size,iicd_read_eep_load_code_size_2k
+iicd_inc_addr:
+	fetch 2,mem_addr_mi
+	byteswap pdata,pdata
+	branch iicd_set_addr
+
+iicd_read_eep_load_code_size_2k:
+	fetch 1,mem_addr_mi
+iicd_set_addr:
+	iadd temp,pdata
+	byteswap pdata,pdata
+	store 2,mem_addr_mi
+	rtn
+	
+
+//length:temp 
+//mem ptr:rega
+//eeprom addr offset:regb
+iicd_write_eep_data:
+	fetch 2,mem_eeprom_base
+	iadd regb,pdata
+
+//cuur ptr:pdata length:temp buf:rega
+	store 2,mem_pdatatemp //curr ptr
+	bpatch patch1e_3,mem_patch1e
+	storet 2,mem_temp	//len
+	storer rega,2,mem_contr
+iicd_write_eep_loop:
+	call iicd_eep_transparency
+
+	fetcht 2,mem_regb
+	fetchr rega,2,mem_contr
+	fetch 2,mem_pdatatemp
+	
+	call iicd_write_eep
+	
+	fetch 2,mem_regb
+	fetcht 2,mem_contr
+	iadd temp,temp
+	storet 2,mem_contr
+	fetcht 2,mem_pdatatemp
+	iadd temp,temp
+	storet 2,mem_pdatatemp
+	fetch 2,mem_temp
+	nbranch iicd_write_eep_loop,blank
+	rtn
+	
+//in:
+//1.size 2.len 3.src 4.des
+//mem_regc page's area
+//mem_pdatatemp curr ptr
+//mem_temp all len      
+//mem_regb curr len
+iicd_eep_transparency:
+	bpatch patch1e_4,mem_patch1e
+	fetch 1,mem_eeprom_block_size
+	increase -1,pdata
+	fetcht 2,mem_pdatatemp
+	ior temp,pdata
+	increase 1,pdata
+	store 3,mem_regc
+
+	fetch 2,mem_temp
+	iadd temp,pdata
+
+	fetcht 3,mem_regc
+	isub temp,pdata
+	nbranch iicd_eep_deal_short_packet,positive
+	store 2,mem_temp
+	fetch 3,mem_regc
+	fetcht 2,mem_pdatatemp
+	isub temp,pdata
+	store 2,mem_regb
+	rtn
+	
+iicd_eep_deal_short_packet:
+	fetch 2,mem_temp
+	store 2,mem_regb
+	setarg 0
+	store 2,mem_temp
+	rtn
+
+iicd_write_eep_size_2k:
+	copy regb,pdata
+	increase 2,temp
+	storet 2,core_iicd_txlen
+	increase -2,rega
+	ifetcht 3,rega
+	copy temp,regb
+	arg 0xa0,temp
+	istoret 1,rega
+	istore 1,contw
+	branch iicd_write_eep_common
+
+	/* pdata is eeprom address, rega pointers to txdata(3 ahead bytes should be left), temp is length */
+iicd_write_eep:
+	copy pdata,regb
+	bpatch patch1e_5,mem_patch1e
+	bmark1 mark_eeprom_size,iicd_write_eep_size_2k
+	copy regb,pdata
+	increase 3,temp
+	storet 2,core_iicd_txlen
+	increase -3,rega
+	ifetcht 3,rega
+	copy temp,regb
+	arg 0xa0,temp
+	istoret 1,rega
+	byteswap pdata,pdata
+	istore 2,contw
+iicd_write_eep_common:	
+	storer rega,2,core_iicd_txaddr
+	setarg 0
+	store 2,core_iicd_rxlen
+	jam 1,core_iicd_ctrl
+	jam iicd_start,core_misc_ctrl
+	call wait_iicd_done
+	istorer regb,3,rega
+iic_check_eeprom_standby:
+	bpatch patch1e_6,mem_patch1e
+	jam 0,mem_iicd_tbuf+3
+iic_check_eeprom_standby_wait:
+	setarg 1
+	store 2,core_iicd_txlen
+	jam 0xa0,mem_iicd_tbuf
+	setarg mem_iicd_tbuf
+	store 2,core_iicd_txaddr
+	setarg 0
+	store 2,core_iicd_rxlen
+	store 2,core_iicd_rxaddr
+	setarg 3
+	store 1,core_iicd_ctrl
+	jam iicd_start,core_misc_ctrl
+	call wait_iicd_done
+	fetch 1,core_dma_status
+	rtnbit0 iicd_ack
+	nop 1500
+	fetch 1,mem_iicd_tbuf+3
+	increase 1,pdata
+	store 1,mem_iicd_tbuf+3
+	sub pdata,40,null
+	nrtn positive//polling timeout 6ms
+	branch iic_check_eeprom_standby_wait
+
+
+/* ===================== uart dma ======================= */
+uarta_init_dma_mem:
+	call enable_user
+	branch uart_init_dma_mem
+
+/*
+function name:uart_init_dma_mem
+input:
+	pdata is dma memory config
+	bit[0-15]:rx start memory address
+	bit[16-31]:rx ending memory address
+	bit[32-47]:tx start memory address
+	bit[48-63]:tx ending memory address
+	user is choice uart road
+	enable is mean check uart A
+	disable user is mean check uart B
+*/
+uart_init_dma_mem:
+	rshift16 pdata,temp
+	call uarta_init_rx,user
+	rshift32 pdata,pdata
+	rshift16 pdata,temp
+	call uarta_init_tx,user
+	fetch 2,core_clkoff
+	set0 CLOCK_OFF_UART,pdata
+	store 2,core_clkoff
+	rtn
+
+
+/*
+function name:uarta_init_baud_rate
+input:
+	pdata is uart A baud rate
+*/
+uarta_init_baud_rate:
+	store uart_baud_len,core_uart_baud
+	rtn
+
+
+/*
+function name:uarta_calc_baud_rate_config
+input:
+	temp is uart A baud rate,Decimal data
+	E.g:115200 input arg 115200,temp
+*/
+uarta_calc_baud_rate_config:
+	call uart_calc_baud_rate_config
+	branch uarta_init_baud_rate
+
+
+/*
+function name:uart_calc_baud_rate_config
+input:
+	temp is uart baud rate,Decimal data
+	E.g:115200 input arg 115200,temp
+output:
+	pdata is CPU config uart baud rate
+*/
+uart_calc_baud_rate_config:
+	call uart_calc_baud_rate_config_choice_uart_clock
+	idiv temp
+	call wait_div_end
+	quotient pdata
+	rtn
+
+uart_calc_baud_rate_config_choice_uart_clock:
+	fetch 1,core_uart_clksel
+	bbit0 UART_CLOCK_SELECT_BIT,uart_calc_baud_rate_config_choice_uart_clock_crystal
+	setarg uart_clock_freq_48M
+	rtn
+uart_calc_baud_rate_config_choice_uart_clock_crystal:
+	setarg uart_clock_freq_24M
+	rtn
+
+uart_clock_select_main_freq_crystal:
+	fetch 1,core_uart_clksel
+	and pdata,UART_CLOCK_SELECT_CRYSTAL,pdata
+	store 1,core_uart_clksel
+	rtn
+
+uart_clock_select_main_freq_dpll:
+	fetch 1,core_uart_clksel
+	or pdata,UART_CLOCK_SELECT_DPLL,pdata
+	store 1,core_uart_clksel
+	rtn
+
+
+	// pdata: tx buffer start, temp: tx buffer end
+uarta_init_tx:
+	store 2,core_uart_tsaddr
+	store 2,core_uart_twptr
+	storet 2,core_uart_teaddr
+	rtn
+
+	// pdata: rx buffer start, temp: rx buffer end
+uarta_init_rx:
+	store 2,core_uart_rsaddr
+	store 2,core_uart_rrptr
+	storet 2,core_uart_readdr
+	rtn
+
+uarta_prepare_tx:
+	fetchr contus,2,core_uart_tsaddr
+	fetchr contue,2,core_uart_teaddr
+	fetchr contu,2,core_uart_twptr
+	rtn
+
+uarta_prepare_rx:
+	fetchr contus,2,core_uart_rsaddr
+	fetchr contue,2,core_uart_readdr
+	fetchr contu,2,core_uart_rrptr
+	rtn
+
+uarta_send:
+	storer contu,2,core_uart_twptr
+	rtn
+
+uarta_rxdone:
+	storer contu,2,core_uart_rrptr
+	rtn
+
+uarta_clear_current_rx:
+	call uarta_prepare_rx
+	fetch 2,core_uart_rxitems
+	iadd contu,contu
+	branch uarta_rxdone
+
+uarta_prepare_tx_register_push:
+	call uart_register_push
+	branch uarta_prepare_tx
+
+uarta_send_register_pop:
+	call uarta_send
+	branch uart_register_pop
+
+
+uart_register_push:
+	storer contu,2,mem_contu
+	storer contus,2,mem_contue
+	storer contue,2,mem_contus
+	rtn
+
+uart_register_pop:
+	fetchr contu,2,mem_contu
+	fetchr contus,2,mem_contue
+	fetchr contue,2,mem_contus
+	rtn
+
+wait_uarttx:
+	fetch 2,core_uart_txitems
+	nbranch wait_uarttx,blank
+	rtn
+
+uart_copy_tx_bytes_fast:
+	deposit loopcnt
+	rtn blank
+uart_copy_tx_bytes_fast_loop:
+	increase -8,loopcnt
+	call uart_tx_8_bytes,positive
+	rtn zero
+	branch uart_copy_tx_bytes_fast_loop,positive
+	increase 8,loopcnt
+uart_copy_tx_bytes_fast_loop_four:
+	increase -4,loopcnt
+	call uart_tx_4_bytes,positive
+	rtn zero
+	branch uart_copy_tx_bytes_fast_loop_four,positive
+	increase 4,loopcnt
+	branch uart_copy_tx_bytes
+
+uart_tx_8_bytes:
+	ifetch 8,contr
+	istore 8,contu
+	rtn
+
+uart_tx_4_bytes:
+	ifetch 4,contr
+	istore 4,contu
+	rtn
+
+uart_copy_tx_bytes:
+	deposit loopcnt
+	rtn blank
+uart_copy_tx_bytes_loop:
+	ifetch 1,contr
+	istore 1,contu
+	loop uart_copy_tx_bytes_loop
+	rtn
+
+uart_copy_rx_bytes_fast:
+	deposit loopcnt
+	rtn blank
+uart_copy_rx_bytes_fast_loop:
+	increase -8,loopcnt
+	call uart_rx_8_bytes,positive
+	rtn zero
+	branch uart_copy_rx_bytes_fast_loop,positive
+	increase 8,loopcnt
+uart_copy_rx_bytes_fast_loop_four:
+	increase -4,loopcnt
+	call uart_rx_4_bytes,positive
+	rtn zero
+	branch uart_copy_rx_bytes_fast_loop_four,positive
+	increase 4,loopcnt
+	branch uart_copy_rx_bytes
+
+
+uart_rx_8_bytes:
+	ifetch 8,contu
+	istore 8,contw
+	rtn
+
+uart_rx_4_bytes:
+	ifetch 4,contu
+	istore 4,contw
+	rtn
+
+
+uart_copy_rx_bytes:
+	deposit loopcnt
+	rtn blank
+uart_copy_rx_bytes_loop:
+	ifetch 1,contu
+	istore 1,contw
+	loop uart_copy_rx_bytes_loop
+	rtn
+
+
+/* ===================== eeprom data ======================= */
+
+app_store_nvram_event:
+	jam BT_EVT_STORE_NVRAM,mem_fifo_temp
+	branch ui_ipc_send_event
+
+check_51cmd_update_device_record:
+	bpatch patch1e_7,mem_patch1e
+	fetch 1,mem_nv_data_number
+	rtn blank		// not nv data
+	call check_nvram
+	call init_device_list,zero
+	call disable_user2
+	call nvram_find_addr_from_bd_list
+write_device_record:
+	fetch 1,mem_nv_data_number
+	icopy regc
+	fetcht 2,mem_nv_data_ptr
+	storet 2,mem_list_item_ptr
+write_device_loop_find:
+	copy regc,pdata
+	branch app_store_nvram_event,blank  //EEPROM
+	increase -1,regc
+	copy temp,rega
+	ifetch 1,rega
+	fetcht 1,mem_select_list_item
+	isub temp,null
+	call set_index_finded_device,zero
+	branch write_device_loop_find0,positive
+	ifetch 1,rega
+	increase 1,pdata
+	istore 1,rega
+write_device_loop_find0:
+	fetcht 2,mem_list_item_ptr
+	increase NV_DATA_LEN,temp
+	storet 2,mem_list_item_ptr
+	branch write_device_loop_find
+
+set_index_finded_device:
+	setarg 0
+	istore 1,rega
+	fetch 1,mem_temp_reconn_record
+	istore 1,contw	
+	bne REC_3_MODE,set_index_finded_device_ble_mode
+//	arg mem_link_key,regb
+set_index_find_device_MASTER_ADDR:
+	ifetch 6,contr
+	istore 8,contw
+	setarg 0
+	istore 8,contw
+	copy regb,contr
+store_rec_data_common:
+	call memcpy16
+	force 1,null
+	rtn
+
+set_index_finded_device_ble_mode:
+	beq REC_4_MODE_RANDOM_RESOLVABLE_PRIVATE_ADDRESS,set_index_finded_device_IRK
+	beq REC_4_MODE_RANDOM_NON_RESOLVABLE_PRIVATE_ADDRESS,set_index_finded_device_EDIV
+	arg mem_le_ltk,regb
+	branch set_index_find_device_MASTER_ADDR
+
+set_index_finded_device_IRK:
+	arg mem_le_irk,contr
+	call memcpy16
+store_ble_rec_data_common:
+	arg mem_le_ltk,contr
+	branch store_rec_data_common
+
+set_index_finded_device_EDIV:
+	arg mem_le_rand,contr
+	call memcpy16
+	branch store_ble_rec_data_common
+
+
+//enable user2 reconnect
+//disable user2 pairing
+nvram_find_addr_from_bd_list:
+	bpatch patch1f_0,mem_patch1f
+	call disable_user
+	fetch 1,mem_nv_data_number
+	rtn blank		// not nv data
+	fetch 2,mem_ui_state_map
+	rtnbit0 UI_STATE_BLE_CONNECTED
+find_addr_from_bd_list_ble_mode:
+	fetch 1,mem_le_conn_peer_addr_type
+	beq MASTER_PUBLIC_ADDR,find_addr_from_bd_list_public_device_addr
+	fetch 1,mem_le_plap+5
+	compare 0xc0,pdata,0xc0
+	branch find_addr_from_bd_list_static_addr,true
+	compare 0x40,pdata,0xc0
+	branch find_addr_from_bd_list_random_addr,true
+	branch find_addr_from_bd_list_random_non_resolvable_private_address_sc_or_legacy
+
+find_addr_from_bd_list_static_addr:
+	branch find_addr_from_bd_list_static_addr_reconnect,user2
+	fetch 1,mem_le_preq_init_key_distribution
+	bbit0 LE_INITATOR_IRK_BIT,find_addr_from_bd_list_public_device_addr
+	branch find_addr_from_bd_list_static_addr_sc_or_legacy
+
+find_addr_from_bd_list_static_addr_reconnect:
+	call find_addr_from_bd_list_public_device_addr
+	rtn user
+	branch find_addr_from_bd_list_static_addr_sc_or_legacy
+
+
+find_addr_from_bd_list_static_addr_sc_or_legacy:
+find_addr_from_bd_list_random_non_resolvable_private_address_sc_or_legacy:
+	fetch 1,mem_le_pairing_mode
+	bbit1 LE_PAIRING_MODE_SECURE_CONNECT_BIT,find_addr_from_bd_list_random_non_resolvable_private_address_sc
+	branch find_addr_from_bd_list_random_non_resolvable_private_address
+
+find_addr_from_bd_list_static_addr_sc:
+find_addr_from_bd_list_random_non_resolvable_private_address_sc:
+	fetch 6,mem_le_plap
+	store 8,mem_le_rand
+	branch find_addr_from_bd_list_random_non_resolvable_private_address
+
+
+find_addr_from_bd_list_public_device_addr:
+	jam REC_4_MODE_STATIC_ADDRESS,mem_temp_reconn_record
+	fetch 6,mem_le_plap
+	branch find_addr_from_bd_list_common
+	
+find_addr_from_bd_list_random_non_resolvable_private_address:	
+	jam REC_4_MODE_RANDOM_NON_RESOLVABLE_PRIVATE_ADDRESS,mem_temp_reconn_record
+	branch find_addr_from_bd_list_common
+
+//input :pdata EDIV and rands
+find_addr_from_bd_list_random_addr:
+	jam REC_4_MODE_RANDOM_RESOLVABLE_PRIVATE_ADDRESS,mem_temp_reconn_record
+	branch find_addr_from_bd_list_common
+	
+find_addr_from_bd_list_common:
+	bpatch patch1f_1,mem_patch1f
+//	store 6,mem_temp_lap
+	fetch 2,mem_nv_data_ptr
+	ifetcht 1,pdata
+	pincrease 1
+	store 2,mem_list_item_ptr
+	storet 1,mem_select_list_item
+	fetch 1,mem_nv_data_number
+	icopy regc
+nvram_find_addr_from_list:
+	fetch 2,mem_list_item_ptr
+	copy pdata,rega
+	call nvram_find_addr_from_list_compare
+	rtn user
+	fetcht 2,mem_list_item_ptr
+	increase NV_DATA_LEN,temp
+	storet 2,mem_list_item_ptr
+	increase -1,temp
+	ifetch 1,temp
+	store 1,mem_select_list_item
+	increase -1,regc
+	nbranch nvram_find_addr_from_list,zero
+	fetch 1,mem_nv_data_number
+	pincrease DECREASED_ONE
+	store 1,mem_select_list_item
+	rtn
+nvram_find_addr_from_list_compare:
+	fetch 1,mem_temp_reconn_record
+	bne REC_3_MODE,find_addr_from_list_compare_ble_mode
+find_master_addr_from_list_compare:
+	arg mem_temp_reconn_record,regb
+	arg 7,loopcnt
+	call string_compare
+	branch enable_user,zero
+	rtn
+
+find_addr_from_list_compare_ble_mode:
+	beq REC_4_MODE_RANDOM_RESOLVABLE_PRIVATE_ADDRESS,find_irk_form_list_compare
+	beq REC_4_MODE_RANDOM_NON_RESOLVABLE_PRIVATE_ADDRESS,find_ediv_form_list_compare
+	branch find_master_addr_from_list_compare
+
+find_irk_form_list_compare:
+	ifetcht 1,rega
+	isub temp,null
+	nrtn zero
+	arg mem_le_prand,contw
+	arg 16,loopcnt
+	call clear_mem
+	fetch 3,mem_le_plap+3
+	store 3,mem_le_prand
+	call genernate_master_MacAddress
+	fetch 2,mem_le_aes_128+13
+	byteswap pdata,pdata
+	lshift8 pdata,temp
+	ifetch 1,contr
+	iadd temp,pdata
+	fetcht 3,mem_le_plap
+	isub temp,null
+	branch enable_user,zero
+	rtn
+
+
+genernate_master_MacAddress:
+	arg mem_le_prand ,contr
+	call load_data128
+//	arg mem_le_irk,contr
+	ifetch 1,rega
+	call load_regext
+	force 0x38,aes_ctrl
+	force 0x0,aes_ctrl
+	call wait_aes
+	arg mem_le_aes_128,contw
+	branch store_aes_result
+
+find_ediv_form_list_compare:
+	ifetcht 1,rega
+	isub temp,null
+	nrtn zero
+	copy contr,rega
+	add contr,8,regc
+	arg mem_le_rand,regb
+	arg 8,loopcnt
+	call string_compare
+	branch enable_user,zero
+	copy regc,rega
+	arg mem_le_irk,regb
+	arg 8,loopcnt
+	call string_compare
+	branch enable_user,zero
+	rtn
+
+check_nvram:
+	fetch 2,mem_nv_data_ptr
+	ifetcht 1,pdata
+	pincrease NV_DATA_LEN
+	ifetch 1,pdata
+	isub temp,null
+	rtn
+
+init_device_list:
+	fetch 1,mem_nv_data_number
+	icopy loopcnt
+	fetcht 2,mem_nv_data_ptr
+	setarg 0
+init_device_list_loop:
+	istore 1,temp
+	increase NV_DATA_LEN,temp
+	pincrease 1
+	loop init_device_list_loop
+	rtn
+
+load_device_list_mode_4:
+//	fetch 9,mem_le_ediv
+//	branch clear_ltk_exists,blank
+	call enable_user2
+	call nvram_find_addr_from_bd_list
+	nbranch clear_ltk_exists,user
+	fetch 2,mem_list_item_ptr
+	add pdata,1,contr
+	arg mem_le_irk,contw
+	call  memcpy16
+	arg mem_le_ltk,contw
+	call  memcpy16
+	jam 1,mem_ltk_exists
+	rtn
+
+clear_ltk_exists:
+	jam 0,mem_ltk_exists
+	rtn
+
+
+eeprom_store_le_reconn_info:
+	jam REC_4_MODE,mem_record_bt_mode
+	branch eeprom_store_reconn_info
+
+eeprom_store_reconn_info:
+	fetch 1,mem_device_option
+	beq DVC_OP_MODULE,check_51cmd_update_device_record
+	beq DVC_OP_MOUSE,mouse_store_remote_bdaddr
+	beq DVC_OP_KEYBOARD,keyboard_store_remote_bdaddr
+	rtn
+	
+
+
+/* =============== GPIO CONTROL ================= */
+//temp [4:0]=GPIO number, return ptr in contw, contr is mask
+get_gpio_wakeup_index:
+	and temp,0x1f,pdata
+	rshift pdata,pdata
+	arg mem_gpio_wakeup_cfg,contw
+	iadd contw,contw
+	arg 0xf0,alarm
+	isolate0 0,temp
+	rtn true
+	arg 0xf,alarm
+	rtn
+
+//temp [4:0]=GPIO number, 0-31, 
+gpio_set_wake_by_current_state:
+	bpatch patch1f_2,mem_patch1f
+	sub temp,GPIO_DISABLE,null
+	rtn zero
+	set1 GPIO_ACTIVE_BIT,temp
+	call gpio_get_bit
+	nbranch gpio_set_qdec_mode,true
+	nsetflag true,GPIO_ACTIVE_BIT,temp
+	
+//temp [4:0]=GPIO number, 0-31, [7]=0, low active
+gpio_set_wake:
+	bpatch patch1f_3,mem_patch1f
+	sub temp,UI_BUTTON_GPIO_DISABLE,null
+	rtn zero
+	arg 4,debug
+	isolate1 GPIO_ACTIVE_BIT,temp
+	branch gpio_set_wake_high,true
+	arg 2,debug
+gpio_set_wake_high:
+	call get_gpio_wakeup_index
+	isolate0 0,temp
+	branch gpio_set_wake_low4bit,true
+	lshift4 debug,debug
+gpio_set_wake_low4bit:
+	ifetch 1,contw
+	iand alarm,pdata
+	ior debug,pdata
+	istore 1,contw
+	rtn
+
+gpio_set_qdec_mode:
+	jam 1,mem_qdec_set_flag
+	call gpio_set_high_impedance
+	arg 6,debug
+	branch gpio_set_wake_high
+
+//temp [4:0]=GPIO number, 0-31, [7]=0, low active
+gpio_set_low_pullup:
+	bpatch patch1f_4,mem_patch1f
+	sub temp,UI_BUTTON_GPIO_DISABLE,null
+	rtn zero
+	arg 1,debug
+	call get_gpio_wakeup_index
+	isolate0 0,temp
+	branch gpio_set_low_pullup_low4bit,true
+	lshift4 debug,debug
+gpio_set_low_pullup_low4bit:
+	ifetch 1,contw
+	iand alarm,pdata
+	ior debug,pdata
+	istore 1,contw	
+	rtn	
+
+
+	
+//temp [4:0]=GPIO number, 0-31, [7]=0, low active
+gpio_clr_wake:
+	bpatch patch1f_5,mem_patch1f
+	sub temp,UI_BUTTON_GPIO_DISABLE,null
+	rtn zero
+	call get_gpio_wakeup_index
+	ifetch 1,contw
+	iand alarm,pdata
+	istore 1,contw
+	rtn	
+
+gpio_config_input_nowake:
+	call gpio_clr_wake
+	branch gpio_config_input_without_wake
+
+//temp [4:0]=GPIO number, 0-31, [7]=0, low active
+gpio_config_input:
+	sub temp,UI_BUTTON_GPIO_DISABLE,null
+	rtn zero
+	ncall gpio_set_wake,wake
+gpio_config_input_without_wake:
+	call gpio_addr
+	setarg 0
+	isolate1 GPIO_ACTIVE_BIT,temp
+	nsetflag true,6,pdata
+	setflag true,7,pdata
+	branch gpio_write
+
+//temp is gpio number, return true if gpio active
+gpio_get_bit:
+	bpatch patch1f_6,mem_patch1f
+	arg core_gpio_in,contw
+	and temp,0x07,queue
+	rshift3 temp,pdata
+	and_into 3,pdata
+	iadd contw,contw
+	ifetch 1,contw
+	isolate1 GPIO_ACTIVE_BIT,temp
+	branch gpio_get_bit_reverse,true
+	qisolate0 pdata
+	rtn
+gpio_get_bit_reverse:
+	qisolate1 pdata
+	rtn
+
+//temp [5:0]=GPIO number, 0-39, [7]=0, low active. set gpio to inactive state
+gpio_out_inactive:
+	sub temp,UI_BUTTON_GPIO_DISABLE,null
+	rtn zero
+	isolate1 GPIO_ACTIVE_BIT,null
+	branch gpio_out_flag
+
+gpio_config_output:
+gpio_out_active:
+	sub temp,UI_BUTTON_GPIO_DISABLE,null
+	rtn zero
+	isolate0 GPIO_ACTIVE_BIT,null
+
+//temp is gpio number,  [7]=1,set out equa true flag if gpio active
+gpio_out_flag:
+	setarg 0
+	nsetflag true,GPIO_ACTIVE_BIT,pdata
+	ixor temp,temp
+
+//temp is gpio number,0-31, [7]=out bit value
+gpio_out:
+	call gpio_addr
+	setarg gpcfg_output_high
+	isolate1 GPIO_ACTIVE_BIT,temp
+	setflag true,0,pdata
+	branch gpio_write
+
+//check output status
+gpio_check_active:
+	sub temp,UI_BUTTON_GPIO_DISABLE,null
+	branch  disable_true,zero
+	call gpio_addr
+	ifetch 1,contw
+	bbit1 0,gpio_check_active_high
+	isolate0 GPIO_ACTIVE_BIT,temp
+	rtn
+gpio_check_active_high:
+	isolate1 GPIO_ACTIVE_BIT,temp
+	rtn
+
+gpio_set_analog:
+	sub temp,UI_BUTTON_GPIO_DISABLE,null
+	rtn zero
+	call gpio_addr
+	setarg gpcfg_no_ie
+gpio_write:
+	istore 1,contw
+	rtn
+
+gpio_set_high_impedance:
+	sub temp,UI_BUTTON_GPIO_DISABLE,null
+	rtn zero
+	call gpio_addr
+	setarg gpcfg_high_impedance
+	branch gpio_write
+
+gpio_addr:
+	and temp,0x3f,pdata
+	sub pdata,GPIO_NUMBER+-1,null
+	nbranch gpio_addr_ext,positive
+	arg core_gpio_conf,contw
+gpio_addr_next:
+	iadd contw,contw
+	rtn
+gpio_addr_ext:
+	arg core_gpio_conf_hi,contw
+	increase -16,pdata
+	branch gpio_addr_next
+
+
+gpio_config_param:
+	and pdata,0xff,temp
+	rshift8 pdata,pdata
+	branch gpio_config_function_int
+
+//pdata: gpio number bit7=1, temp: function type
+gpio_config_function:
+	rtnbit0 GPIO_ACTIVE_BIT
+gpio_config_function_int:
+	rtneq GPIO_DISABLE 
+	and_into 0x3f,pdata
+	sub pdata,GPIO_NUMBER+-1,null
+	nbranch gpio_config_function_int_ext,positive
+	arg core_gpio_conf,contw
+gpio_config_function_int_next:
+	iadd contw,contw
+	istoret 1,contw
+	rtn
+gpio_config_function_int_ext:
+	arg core_gpio_conf_hi,contw
+	increase -16,pdata
+	branch gpio_config_function_int_next
+
+
+//temp:gpio num
+gpio_get_config:
+	and_into 0x3f,temp	
+	sub temp,GPIO_NUMBER+-1,null
+	nbranch gpio_get_config_ext,positive	
+	setarg core_gpio_conf
+gpio_get_config_next:
+	iadd temp,contr
+	ifetch 1,contr
+	rtn
+gpio_get_config_ext:
+	setarg core_gpio_conf_hi
+	increase -16,temp
+	branch gpio_get_config_next
+
+
+//The default as shutter and remote
+gpio_set_before_lpm:
+	arg GPIO_NUMBER,loopcnt
+	arg core_gpio_conf,contr
+setgpio_loop:
+	copy contr,contw
+	ifetch 1,contr
+	beq gpcfg_spid_miso,setgpio_pullup
+	beq gpcfg_spid_ncs,setgpio_pullup
+	beq gpcfg_spid_sck,setgpio_pullup
+	beq gpcfg_spid_mosi,setgpio_pullup
+	beq gpcfg_spid_sdio,setgpio_pullup
+	beq gpcfg_iic_scl,setgpio_pullup
+	beq gpcfg_iic_sda,setgpio_pullup
+	beq gpcfg_input,setgpio_pullup
+setgpio_loop_end:
+	loop setgpio_loop
+	arg core_gpio_conf_hi+GPIO_NUMBER_EXT,pdata
+	isub contr,null
+	rtn zero
+gpio_set_before_lpm_ext:
+	arg GPIO_NUMBER_EXT,loopcnt
+	arg core_gpio_conf_hi,contr
+	branch setgpio_loop
+	
+	
+setgpio_pullup:
+	setarg gpcfg_pullup
+	istore 1,contw
+	branch setgpio_loop_end
+setgpio_pulldown:
+	setarg gpcfg_pulldown
+	istore 1,contw	
+	branch setgpio_loop_end
+
+/***********************************qdec**************************************/
+
+lpm_puchk_set_check:
+	fetch 1,mem_qdec_set_flag
+	branch lpm_config_puchk_disable,blank
+	branch lpm_config_puchk_enable
+
+lpm_config_puchk_disable:
+	setarg 0x10			//bit0-1:key_delay	bit2-3:pu_delay		bit4-6:interval	bit7:enable 
+lpm_config_puchk_set:
+	store 1,core_puwakeup
+	branch lpm_write_wait
+
+lpm_config_puchk_enable:
+	setarg 0x80			//bit0-1:key_delay	bit2-3:pu_delay		bit4-6:interval	bit7:enable 
+	branch lpm_config_puchk_set
+
+/*************************************ADC*************************************/
+
+sadc_calibration:
+	bpatch patch1f_7,mem_patch1f
+	rtn wake
+	jam 0x77,core_gpadc_ctrl
+	jam 0xc9,core_gpadc_cfg0
+	jam 0x01,core_gpadc_cfg3
+	fetch 1,mem_adc_clkdiv
+	store 1,core_sadc_clkdiv
+	jam 0x03,core_sadc_ctrl
+	call sar_adc_read_wait
+	fetcht 2,core_sadc_data
+//	storet 2,mem_adc_current_value
+	jam 0x00,core_sadc_ctrl
+	jam 0xc1,core_gpadc_cfg0	
+sadc_cal_read:
+	arg 8,loopcnt
+	arg mem_adc_cal_c0,rega
+	jam 0x05,core_gpadc_cfg2
+sadc_cal_read_loop:
+	fetch 1,core_gpadc_status
+	istore 1,rega
+	increase 1,rega
+	fetch 1,core_gpadc_cfg2
+	increase 0x20,pdata
+	store 1,core_gpadc_cfg2
+	loop sadc_cal_read_loop
+	jam 0x00,core_gpadc_ctrl	
+	rtn
+
+sadc_cal_write:
+	fetch 1,core_sadc_ctrl
+	set1 1,pdata
+	store 1,core_sadc_ctrl
+	arg 8,loopcnt
+	arg mem_adc_cal_c0,rega
+	jam 0x15,core_gpadc_cfg2
+sadc_cal_write_loop:
+	ifetch 1,rega
+	store 1,core_gpadc_cfg1
+	increase 1,rega
+	fetch 1,core_gpadc_cfg2
+	increase 0x20,pdata
+	store 1,core_gpadc_cfg2
+	loop sadc_cal_write_loop
+	fetch 1,core_sadc_ctrl
+	set0 1,pdata
+	store 1,core_sadc_ctrl
+	rtn
+
+
+//mem_adc_config_flag 1:HVIN 2: GPIO
+adc_init_data:
+	bpatchx patch20_0,mem_patch20
+	fetch 8,mem_otp_adc
+	rtn blank
+	store 8,mem_reference_inter1p8v_2v_adc_io_data
+	call enable_otp_read
+	call loadcode_check_otp_lock
+	arg OTP_OFFSET_ADC_PARAM_L_C0,pdata
+	iadd regb,regb
+	arg 10,loopcnt
+	arg mem_otp_temp,rega
+	call otp_read_data
+	call disable_otp
+	fetch 8, mem_otp_temp
+	rtn blank
+	store 8,mem_adc_reference3v_gpio1v_ft_data
+	ifetch 2,contr
+	istore 2,contw	
+	rtn
+	
+
+vdd_calculate_by_mode:
+	bpatchx patch20_1,mem_patch20
+	fetch 1,mem_adc_reference_mode
+	beq SADC_REFERENCE_INTER3V,vdd_reference_inter3V_calculate
+	beq SADC_REFERENCE_INTER1P8V_DIV2,vdd_reference_inter1p8V_calculate
+	branch vdd_reference_inter3V_calculate
+
+vdd_reference_inter3V_calculate:
+	fetch 1,mem_adc_config_flag
+	beq ADC_CONFIG_HVIN,vdd_reference_inter3V_calculate_by_mode_vdcdc
+	beq ADC_CONFIG_GPIO,vdd_reference_inter3V_calculate_by_mode_gpio
+	rtn
+	
+vdd_reference_inter3V_calculate_by_mode_vdcdc:
+	setarg 1000
+	store 2,mem_reference_voltage
+	fetcht 2,mem_adc_reference3v_vdcdc3p6v_ft_data
+	fetch 2,mem_adc_reference3v_vdcdc4p6v_ft_data
+	arg 3600,regc
+	call vdd_calculate
+	branch mul1V_div1V_to_cal
+	
+vdd_reference_inter3V_calculate_by_mode_gpio:
+	setarg 1000
+	store 2,mem_reference_voltage
+	fetcht 2,mem_adc_reference3v_gpio1v_ft_data
+	fetch 2,mem_adc_reference3v_gpio2v_ft_data
+	arg 1000,regc
+	call vdd_calculate
+mul1V_div1V_to_cal:
+	fetcht 2,mem_adc_reference3v_inter1v_ft_data
+	imul32 temp,pdata
+	fetcht 2,mem_adc_reference3v_inter1v_now_data
+	idiv temp
+	branch get_div_result
+
+enable_adc_init_config:
+	call sadc_cal_write
+	fetch 1,core_gpadc_cfg1
+	set0 7,pdata
+	store 1,core_gpadc_cfg1
+	jam 0x77,core_gpadc_ctrl
+	jam 0xc1,core_gpadc_cfg0
+	jam 0x61,core_vtest_ctrl0
+	jam 0x00,core_gpadc_cfg3
+	rtn	
+
+	
+enable_adc:
+	bpatchx patch20_2,mem_patch20
+	fetch 1,mem_adc_reference_mode
+	beq SADC_REFERENCE_INTER3V,enable_adc_reference_source_inter3V
+	beq SADC_REFERENCE_INTER1P8V_DIV2,enable_adc_reference_source_inter1p8V
+	branch enable_adc_reference_source_inter3V
+	
+enable_adc_reference_source_inter3V:
+	call enable_adc_init_config
+	call sadc_channel
+	fetch 1,mem_adc_clkdiv
+	store 1,core_sadc_clkdiv
+	call sadc_read
+	jam 0x60,core_vtest_ctrl0
+	jam 0x00,core_sadc_clkdiv	
+//	rtn
+	
+read_adc_inter1V:
+	call enable_adc_init_config
+	fetch 1,mem_adc_clkdiv
+	store 1,core_sadc_clkdiv
+	jam 0x50,core_gpadc_cfg3
+	jam 0xc0,core_vtest_ctrl1//select vref1v
+
+	arg 0xb,regext_index
+	fetchr regext, 2,mem_adc_current_value
+	
+	jam 0x03,core_sadc_ctrl	
+	call sar_adc_read_wait
+	fetcht 2,core_sadc_data
+	storet 2,mem_adc_reference3v_inter1v_now_data 
+//	call sadc_read_wait+4
+	jam 0x06,core_sadc_ctrl
+	call sadc_read_wait2
+	
+	arg 0xb,regext_index
+	storer regext,2,mem_adc_current_value
+
+	jam 0x60,core_vtest_ctrl0
+	jam 0x00,core_sadc_clkdiv
+	jam 0x00,core_sadc_ctrl
+	rtn
+	
+
+vdd_reference_inter1p8V_calculate:
+	fetch 1,mem_adc_config_flag
+	beq ADC_CONFIG_HVIN,vdd_reference_inter1p8V_calculate_by_mode_vdcdc
+	beq ADC_CONFIG_GPIO,vdd_reference_inter1p8V_div2_calculate_by_mode_gpio
+	rtn
+	
+vdd_reference_inter1p8V_calculate_by_mode_vdcdc:
+	setarg 2000
+	store 2,mem_reference_voltage
+	fetcht 2,mem_reference_inter1p8v_2p6v_adc_vdcdc_data
+	fetch 2,mem_reference_inter1p8v_4p6v_adc_vdcdc_data
+	arg 2600,regc
+	branch vdd_calculate
+
+vdd_reference_inter1p8V_div2_calculate_by_mode_gpio:
+	setarg 1000
+	store 2,mem_reference_voltage
+	fetcht 2,mem_reference_inter1p8v_2v_adc_io_data
+	fetch 2,mem_reference_inter1p8v_1v_adc_io_data
+	arg 2000,regc
+//	branch vdd_calculate00
+	
+vdd_calculate00:
+	isub temp,rega
+	fetch 2,mem_adc_current_value
+	isub temp,pdata
+	nbranch vdd_calculate11,positive
+	call vdd_calculate_common
+	isub regb,pdata
+	nbranch set_pdata_0,positive
+	branch vdd_calculate2
+	
+vdd_calculate11:
+	copy temp,pdata
+	fetcht 2,mem_adc_current_value
+	isub temp,pdata
+	call vdd_calculate_common
+	iadd regb,pdata
+	branch vdd_calculate2
+
+
+enable_adc_reference_source_inter1p8V:	
+	fetch 1,mem_adc_config_flag
+	beq ADC_CONFIG_HVIN,enable_adc_reference_source_inter1p8V_vdcdc
+enable_adc_reference_source_inter1p8V_div2_gpio:	
+	call sadc_cal_write
+	fetch 1,core_gpadc_cfg1
+	set0 7,pdata
+	store 1,core_gpadc_cfg1
+	jam 0x77,core_gpadc_ctrl
+	jam 0x41,core_gpadc_cfg0
+	jam 0x14,0x8ac6			//div2
+	branch enable_adc_reference_source_inter1p8V_common
+	
+enable_adc_reference_source_inter1p8V_vdcdc:
+	call sadc_cal_write
+	fetch 1,core_gpadc_cfg1
+	set0 7,pdata
+	store 1,core_gpadc_cfg1
+	jam 0x77,core_gpadc_ctrl
+	jam 0x41,core_gpadc_cfg0
+	jam 0x10,0x8ac6			//not div2
+enable_adc_reference_source_inter1p8V_common:
+	jam 0x00,core_gpadc_cfg3
+	call sadc_channel
+	fetch 1,mem_adc_clkdiv
+	store 1,core_sadc_clkdiv
+	call  sadc_read
+	
+	jam 0x00,core_sadc_clkdiv
+	jam 0x00,0x8ac6
+	rtn
+
+sadc_channel:
+	fetch 1,mem_adc_channel
+	lshift4 pdata,pdata
+	fetcht 1,core_gpadc_cfg3
+	and_into 0x0f,temp
+	ior temp,temp
+	storet 1,core_gpadc_cfg3
+	rtn
+
+sar_adc_read_wait:
+	fetch 1,core_perf_status
+	bbit0 SARADC_DONE,sar_adc_read_wait
+	rtn
+
+	
+sadc_read:
+	bpatchx patch20_3,mem_patch20
+	jam 0x03,core_sadc_ctrl
+	call sar_adc_read_wait
+	fetcht 2,core_sadc_data
+	storet 2,mem_adc_current_value
+	jam 0x06,core_sadc_ctrl
+sadc_read_wait2:
+	fetch 1,core_perf_status
+	bbit1 SARADC_DONE,sadc_read_wait2
+	jam 0x00,core_sadc_ctrl
+	rtn
+	
+sadc_dma:
+	fetch 1,mem_adc_dma_enable
+	rtn blank	
+	fetch 1,core_gpadc_cfg1
+	set1 7,pdata
+	store 1,core_gpadc_cfg1
+	fetch 1,mem_adc_clkdiv
+	store 1,core_sadc_clkdiv
+	fetch 2,mem_adc_saddr_ptr
+	store 2,core_sadc_saddr
+	fetch 2,mem_adc_eaddr_ptr
+	store 2,core_sadc_eaddr
+	jam 0x0b,core_sadc_ctrl
+	nop 1000
+	jam 0x03,core_sadc_ctrl
+	rtn
+
+
+vdd_calculate:
+	isub temp,rega
+	fetch 2,mem_adc_current_value
+	isub temp,pdata
+	nbranch vdd_calculate1,positive
+	call vdd_calculate_common
+	iadd regb,pdata
+vdd_calculate2:
+	idiv rega
+	branch get_div_result
+
+vdd_calculate1:
+	copy temp,pdata
+	fetcht 2,mem_adc_current_value
+	isub temp,pdata
+	call vdd_calculate_common
+	isub regb,pdata
+	nbranch set_pdata_0,positive
+	branch vdd_calculate2
+
+
+vdd_calculate_common:
+	fetcht 2,mem_reference_voltage
+	imul32 temp,regb
+	copy regc,pdata
+	imul32 rega,pdata
+	rtn
+	
+
+
+/*	typedef struct
+*	{
+*		uint16 full_vol
+*		uint16 empty_vol
+*		uint16 low_vol
+*		uint16 now_vol
+*	}bat_calculate;
+*/
+//out:	pdata->bat percent
+adc_bat_percent_lowpower_out:
+	ifetch 8,rega
+	store 8,mem_pdatatemp
+	fetch 2,mem_pdatatemp
+	fetcht 2,mem_pdatatemp+2
+	isub temp,rega
+	fetch 2,mem_pdatatemp+6
+	isub temp,regb
+	fetcht 2,mem_pdatatemp+4
+	isub temp,null
+	ncall adc_set_low_power_flag,positive
+	mul32 regb,100,pdata
+	idiv rega
+	call wait_div_end
+	quotient pdata
+	call adc_set_no_power_flag,blank
+	rtn
+
+adc_set_low_power_flag:
+	fetch 1,mem_adc_power_flag
+	set1 0,pdata
+	branch adc_set_power_flag
+
+adc_clear_low_power_flag:
+	fetch 1,mem_adc_power_flag
+	set0 0,pdata
+	branch adc_set_power_flag
+	
+adc_set_no_power_flag:
+	fetcht 1,mem_adc_power_flag
+	set1 1,temp
+	branch adc_set_power_flag
+
+adc_clear_no_power_flag:
+	fetcht 1,mem_adc_power_flag
+	set0 1,temp
+adc_set_power_flag:
+	storet 1,mem_adc_power_flag
+	rtn	
+
+
+
+/****************************************key scan***************************************/
+keyscan_key_init:
+	fetch 2,mem_key_num_ptr
+	ifetch 1,pdata
+keyscan_key_init_next:
+	rtn blank
+	copy pdata,loopcnt
+//	copy contr,rega
+	fetch 2,mem_keyscan_ptr
+	increase 3,pdata	//mem_key_conf0_pin
+	copy pdata,rega
+keyscan_key_init_lp1:
+	ifetcht 1, rega
+	call gpio_config_input
+	increase KEY_CONF_STRUCT_LEN,rega
+	loop keyscan_key_init_lp1
+keyscan_key_init_end:
+	rtn
+	
+keyscan_scan_key:
+	fetch 2,mem_keyscan_ptr
+	increase 3,pdata	//mem_key_conf0_pin
+	copy pdata,rega
+//	arg mem_key_conf0_pin,rega
+	force 0,regb
+	setarg 0
+	store 2,mem_key_value_temp
+keyscan_scan_key_lp1:
+	ifetcht 1, rega
+	call gpio_get_bit
+	bpatchx patch20_4,mem_patch20
+	fetch 2,mem_key_value_temp
+	copy regb,queue
+	qsetflag true,pdata
+	store 2, mem_key_value_temp
+	increase KEY_CONF_STRUCT_LEN,rega
+	increase 1,regb
+	fetch 2,mem_key_num_ptr
+	ifetch 1,pdata
+keyscan_scan_key_lp1_next:
+	ixor regb,null
+	nbranch keyscan_scan_key_lp1,zero
+	fetch 2,mem_key_value_temp
+	fetcht 2,mem_key_value_retention
+	ixor temp,null
+	rtn zero
+	branch enable_user
+
+keyscan_process_lpm_before:
+	fetch 2,mem_key_num_ptr
+	ifetch 1,pdata
+keyscan_process_lpm_before_next:
+	rtn blank
+	copy pdata,loopcnt
+	fetch 2,mem_keyscan_ptr 
+	increase 3,pdata	//mem_key_conf0_pin
+	copy pdata,rega
+keyscan_process_lpm_before_lp1:
+	ifetcht 1, rega
+	call gpio_set_wake_by_current_state
+	increase KEY_CONF_STRUCT_LEN,rega
+	loop keyscan_process_lpm_before_lp1
+keyscan_process_lpm_before_end:
+	rtn
+
+keyscan_key_process:
+	arg key_scan_timer,queue
+	call timer_check
+	nrtn blank
+	setarg 0x20
+	arg key_scan_timer,queue
+	call timer_init
+	disable user
+	call keyscan_process_lpm_before
+	bpatchx patch20_5,mem_patch20
+	fetch 2,mem_key_num_ptr
+	ifetch 1,pdata
+keyscan_key_process_next:
+	rtn blank
+	call keyscan_scan_key
+	nbranch lpm_button_clean_wake_lock,user
+	call lpm_button_get_wake_lock
+	disable user
+	fetch 2,mem_key_value_temp
+	store 2,mem_key_value_temp4
+	jam 0,mem_key_value_temp6
+	force 0,queue
+keyscan_key_lp1:
+	fetch 2, mem_key_value_retention
+	rshift pdata,temp
+	storet 2,mem_key_value_retention
+	and pdata,0x01,pdata
+	fetcht 2, mem_key_value_temp4
+	and temp,0x01,rega
+	rshift temp,temp
+	storet 2,mem_key_value_temp4
+	ixor rega,null
+	ncall keyscan_send_key_data,zero
+	fetch 2,mem_key_num_ptr
+	ifetch 1,pdata
+keyscan_key_lp1_next:
+	fetcht 1, mem_key_value_temp6
+	increase 1,temp
+	storet 1, mem_key_value_temp6
+	copy temp,queue
+	ixor queue,null
+	nbranch keyscan_key_lp1,zero
+	fetch 2,mem_key_value_temp
+	store 2,mem_key_value_retention
+	rtn
+keyscan_send_key_data:
+	bpatchx patch20_6,mem_patch20
+	fetch 2,mem_keyscan_ptr
+	increase 1,pdata
+	ifetch 2,pdata
+	branch callback_func
+
+
+/*************************************pwm*************************************/
+
+//rega:clk select(0:system clk; 1:system clk undivied; 2:lpo)
+/*rega:clk select
+			0x00:select system clock 12M;
+			0x40:select undivied system clock 24M/48M;
+			0x80:select lpo clock:33K
+*/
+pwm_init:
+	fetch 1,core_clksel
+	ior rega,pdata
+	store 1,core_clksel
+	fetch 2,core_clkoff
+	set0 CLOCK_OFF_PWM,pdata
+	store 2,core_clkoff
+delay_nop100:
+	nop 100
+	rtn
+
+/*	typedef struct
+*	{
+*		uint8 gpio_num
+*		uint8 pwm_channel
+*		uint24 frequency
+*		uint8 duty_cycle   //0-100
+*	}PWM_Style;
+	addr: mem_pdatatemp
+*/
+pwm_clk_set:
+	fetch 1,core_clksel
+	bbit1 6,pwm_24m_clk_set
+	bbit1 7,pwm_33k_clk_set
+pwm_12m_clk_set:
+	setarg PWM_12MHZ
+	rtn
+pwm_24m_clk_set:
+	setarg PWM_24MHZ
+	rtn
+pwm_33k_clk_set:
+	setarg PWM_33KHZ
+	rtn
+
+
+/*
+input:
+mem_pdatatemp:
+byte[0]: pwm gpio selected
+byte[1]: pwm channel selected
+byte[2-4]: pwm frequency, little-endian
+byte[5]: duty cycle, percentage
+*/
+pwm_out_set:
+	fetcht 3,mem_pdatatemp+2
+	call pwm_clk_set
+	idiv temp
+	call wait_div_end
+	quotient temp
+	fetch 1,mem_pdatatemp+5
+	imul32 temp,pdata
+	div pdata,100
+	call wait_div_end
+	quotient rega
+	copy temp,pdata
+	isub rega,regb
+
+	fetch 1,mem_pdatatemp+1
+	call pwm_duty_cycle_set
+	fetch 1,mem_pdatatemp
+	fetcht 1,mem_pdatatemp+1
+	and_into 0x0f,temp
+	lshift8 temp,temp
+	ior temp,pdata
+	branch pwm_enable
+
+/*
+input:
+rega:pcnt ;
+regb:ncnt;
+pdata:pwm channel select.
+*/
+pwm_duty_cycle_set:
+	iforce queue
+	call pwm_duty_cycle_set_without_autoload
+	branch pwm_autoload_set
+
+/*
+input:
+queue: pwm channel
+*/
+pwm_autoload_set:	
+	fetch 1, core_pwm_autoload
+	qset1 pdata
+	store 1, core_pwm_autoload
+	fetcht 1, core_clksel
+	isolate1 7, temp
+	call delay_1clk_of_33k, true
+	qset0 pdata
+	store 1, core_pwm_autoload
+	rtn	
+
+
+delay_1clk_of_33k:
+	nop 480
+	rtn
+
+/*
+input:
+rega:pcnt ;
+regb:ncnt;
+pdata:pwm channel select.
+*/	
+pwm_duty_cycle_set_without_autoload:
+	and_into 0x0f,pdata
+	arg core_pwm_pcnt0,contw
+	mul32 pdata,4,pdata
+	iadd contw,contw
+	copy rega,pdata
+	istore 2,contw
+	copy regb,pdata
+	istore 2,contw
+	rtn
+
+
+
+
+/*
+rega: even pwm channel select & gpio select 
+regb: odd pwm channel select & gpio select 
+
+note:
+byte of even pwm channel:
+bit[7]: force to set even sync bit to 1;
+bit[6]: for even bit, reserved
+
+byte of odd pwm channel:
+bit[7]: 1: set odd sync bit to 1; 0: set odd sync bit to 0; 
+bit[6]: 1: set odd pwm init to 1; 0: set odd pwm init to 0;
+
+setarg 0x0008, rega
+0x00:pwm0 selected
+0x08:gpio select
+
+arg 0x4109, regb
+0x41:pwm1 selected and set pwm1 init bit to 1
+0x09:gpio select
+pwm_enable_in_syncmode:
+	rshift8 regb, queue
+	call pwm_init_bit_set
+	rshift8 regb, queue
+	call pwm_syncmode_set
+	rshift8 rega, queue
+	enable true
+	call pwm_syncmode_set_process
+
+	deposit rega
+	call pwm_gpio_select
+	deposit regb
+	branch pwm_enable
+
+pwm_disable_in_syncmode:
+	deposit rega
+	call pwm_disable
+	deposit regb
+	call pwm_disable
+
+	rshift8 rega, queue
+	disable true
+	call pwm_syncmode_set_process
+	rshift8 regb, queue
+	disable true
+	call pwm_init_bit_set_process
+	rshift8 regb, queue
+	disable true
+	branch pwm_syncmode_set_process
+*/
+
+
+/*
+input:
+queue: pwm channel
+
+note:
+for even bit, 
+0: PWM0/1 work independent
+1: PWM0 output is synchronized to PWM1
+for odd bit,
+Only used when pwm0_syn_to_pwm1 =1, PWM0/1 out inverse
+pwm_syncmode_set:
+	isolate1 7, queue
+pwm_syncmode_set_process:	
+	and queue, 0x0f,queue
+	fetch 1,core_pwm_sync
+   	qsetflag true,pdata
+   	store 1,core_pwm_sync
+   	rtn
+*/
+
+/*
+input:
+queue: pwm channel
+
+note:
+for even bit, reserved
+for odd bit,only used when pwm0_syn_to_pwm1 =1, 
+0: PWM0 out high first
+1: PWM1 out high first
+*/
+pwm_init_bit_set:
+	isolate1 6, queue
+pwm_init_bit_set_process:	
+	and queue, 0x0f,queue
+	fetch 1, core_pwm_init
+	qsetflag true, pdata
+	store 1, core_pwm_init
+	rtn
+/*
+input:
+pdata: pwm channel select & gpio select 
+
+note:
+setarg 0x0108
+0x01:pwm channel select
+0x08:gpio select
+*/
+pwm_gpio_select:
+	call pwm_select_channel
+pwm_gpio_select_process:
+	lshift8 pdata,pdata
+	add queue,gpcfg_pwm_out0,temp
+	ior temp,pdata
+	branch gpio_config_param 
+
+/*
+input:
+pdata: pwm channel select & gpio select 
+
+note:
+setarg 0x0108
+0x01:pwm channel select
+0x08:gpio select
+*/
+pwm_enable:
+	enable user
+	call pwm_gpio_select
+	branch pwm_set_select
+	
+pwm_disable:
+	disable user
+	call pwm_select_channel
+	branch pwm_set_select
+
+pwm_set_select:
+	and queue, 0x0f,queue
+	fetch 1,core_pwm_en
+   	qsetflag user,pdata
+   	store 1,core_pwm_en
+	rtn
+pwm_select_channel:
+	rshift8 pdata,queue
+	and queue, 0x0f,queue
+	rtn
+
+
+/*************WATCH DOG API*************************/
+/*
+	function name:wdt_init_config 
+   input:kick dog time (pdata*7.8125ms) (7.8125ms~16s) (16s = 0x800)
+*/
+wdt_init_config:
+	copy pdata,temp
+	bpatchx patch20_7,mem_patch20
+	call wdt_set_enable	//enable
+	setarg 2048
+	isub temp,pdata
+	copy pdata,temp
+	rshift4 temp,temp
+	storet 1,core_write_wdt
+	nop 1400
+	copy pdata,temp
+	and_into 0x0f,temp
+	storet 1,core_write_wdt2
+	rtn
+ 
+
+wdt_set_enable:
+	enable user2
+	branch wdt_init_set
+
+	
+wdt_set_disable:
+	bpatchx patch21_0,mem_patch21
+	disable user2
+wdt_init_set:
+	fetch 1,core_config
+   	setflag user2,3,pdata
+	store 1,core_config
+	rtn
+
+
+ifdef NEC
+
+/*************NEC API*************************/
+/*
+	function name:nec_init_config 
+	input:
+		pdata is nec buffer address
+		bit[0-15]:rx start memory address
+		bit[16-31]:rx ending memory address
+		temp is nec control config
+		E.M 0x31 is 12M system clock is 2us temp
+*/
+nec_init_config:
+	store 4,core_nec_start_addr
+	store 2,core_nec_rptr
+	storet 1,core_nec_ctrl
+	rtn
+
+
+endif //NEC
+
+/*
+select_system_clk_24M:
+	jam SYSTEM_CLK_24M,mem_system_clk
+	jam clksel_dpll_24M,core_clksel
+	setarg 7499
+	store 2,core_halfslot
+calc_new_param:
+	arg 11,loopcnt
+	arg mem_param_tx_setup,rega
+calc_new_param_loop:
+	ifetch 2,rega
+	lshift pdata,pdata
+	istore 2,rega
+	increase 2,rega
+	loop calc_new_param_loop
+	rtn
+
+calc_new_le_time:
+	lshift stop_watch,stop_watch
+	rtn
+*/
+select_system_clk_12M_xtal:
+	jam clksel_xtal,core_clksel
+select_system_clk_12M_common:
+	jam SYSTEM_CLK_12M,mem_system_clk
+	setarg 3749
+	store 2,core_halfslot
+	rtn
+
+select_system_clk_12M_dpll:
+	jam clksel_dpll,core_clksel
+	branch select_system_clk_12M_common
+
+/*****************************50HZ*****************************/
+/*
+(input):
+pdata:ac data buf start address
+temp:ac data buf length
+mem_ac_detect_gpio:choice gpio[0-12]
+mem_ac_detect_control:[7:2]ac detect clk divide number,[15:8]ac detect window (ms)
+
+(output):
+true=1,  50hz single disappear true=0,50hz detected
+
+*/
+/*
+ac_50hz_check:
+	store 2,core_ac_saddr
+	storet 1,core_ac_buf_len
+	fetch 1,mem_ac_detect_gpio
+	arg gpcfg_ac_input,temp
+	call gpio_config_function_int
+	fetch 2,mem_ac_detect_control  
+	set1 0,pdata                 //ac detect enable[0]
+	store 2,core_ac_ctrl
+ac_50hz_check_wait:		
+	fetch 1,core_perf_status
+	isolate1 6,pdata
+	rtn 
+*/
+
+
Index: program/security.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/security.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/security.prog	(working copy)
@@ -0,0 +1,1203 @@
+
+
+ifdef SECURE_CONNECTION
+	
+function_g2:
+	bpatchx patch21_1,mem_patch21
+	jam 80,mem_AES_CMAC_data_length
+	arg mem_dat,contw
+	arg mem_le_srand,contr
+	call memcpy16
+	arg mem_sc_pubkey_local_x_256,contr
+	call memcpy32
+	arg mem_le_pubkey_remote_x_256,contr
+	call memcpy32
+	call inverse_memdat	
+	arg mem_le_mrand,contr
+	call store_inverse_k	
+	call function_AES_CMAC	
+
+	arg mem_AES_CMAC_temp,contw
+	call load_inverse_result
+	setarg 1000000
+	copy pdata,rega
+	fetch 4,mem_AES_CMAC_temp
+	idiv rega
+	call wait_div_end
+	remainder pdata
+	store 4,mem_gkey
+//call ice_break
+	rtn
+
+function_f6_eb:
+	jam 65,mem_AES_CMAC_data_length
+	arg mem_dat,contw
+	call store_addr_common_a
+	call store_addr_common_b
+	fetch 3,mem_le_pres+1
+	istore 3,contw
+//	arg mem_le_r,contr
+//	call memcpy16	
+	call get_r
+	
+	arg mem_le_mrand,contr
+	call memcpy16
+	arg mem_le_srand,contr
+	call memcpy16
+	call inverse_memdat
+	arg mem_le_mackey ,contr
+	arg mem_AES_CMAC_k,contw
+	call memcpy16
+//	call p_store_inverse_k	
+	branch function_AES_CMAC
+//	arg mem_AES_CMAC_temp,contw
+//	branch p_load_inverse_result
+
+get_r:
+	fetch 4,mem_le_tk
+	istore 4,contw
+	call memset0_4
+	branch memset0_8
+
+function_f6_ea:
+	bpatchx patch21_2,mem_patch21
+	jam 65,mem_AES_CMAC_data_length
+	arg mem_dat,contw
+	call store_addr_common_b
+	call store_addr_common_a
+	fetch 3,mem_le_preq+1
+	istore 3,contw
+//	arg mem_le_r,contr
+//	call memcpy16	
+	call get_r
+	arg mem_le_srand,contr
+	call memcpy16
+	arg mem_le_mrand,contr
+	call memcpy16
+	call inverse_memdat
+	arg mem_le_mackey ,contr
+	arg mem_AES_CMAC_k,contw
+	call memcpy16
+//	call p_store_inverse_k	
+	call function_AES_CMAC
+	arg mem_AES_CMAC_temp,contw
+	branch load_inverse_result
+
+function_f5:
+	jam 32,mem_AES_CMAC_data_length
+	arg mem_le_dhkey_256 ,contr
+	arg mem_dat,contw
+	call memcpy32
+	call inverse_memdat
+	arg mem_le_slat,contr
+	call store_inverse_k	
+	call function_AES_CMAC
+	arg mem_AES_CMAC_k,contw
+	call store_aes_result
+	arg 1,temp
+	call function_f5_common
+	arg mem_le_ltk,contw
+	call load_inverse_result
+	arg 0,temp
+	call function_f5_common
+	arg mem_le_mackey,contw
+//	branch p_load_inverse_result
+	branch store_aes_result
+
+
+function_f5_common:
+	bpatchx patch21_3,mem_patch21
+	jam 53,mem_AES_CMAC_data_length
+	setarg 0x100
+	store 2,mem_dat
+	call store_addr_common_b
+	call store_addr_common_a
+	arg mem_le_srand,contr
+	call memcpy16
+	arg mem_le_mrand,contr
+	call memcpy16
+//	fetch 4,mem_le_keyid 0x62746c65
+	setarg 0x6c65
+	istore 2,contw
+	setarg 0x6274
+	istore 2,contw
+	istoret 1,contw   //counter
+	call inverse_memdat	
+	branch function_AES_CMAC
+
+store_addr_common_b:
+	fetch 6,mem_le_lap
+	istore 6,contw
+	fetch 1,mem_le_conn_own_addr_type
+	istore 1,contw
+	rtn
+
+store_addr_common_a:
+	fetch 6,mem_le_plap
+	istore 6,contw
+//	setarg 0x2dcfc1
+//	istore 3,contw
+//	setarg 0xa71370
+//	istore 3,contw
+	fetch 1,mem_le_conn_peer_addr_type
+	istore 1,contw
+	rtn
+
+function_f4_ca:
+	jam 65,mem_AES_CMAC_data_length
+	fetch 1,mem_passkey_1bit
+	store 1,mem_dat
+	arg mem_sc_pubkey_local_x_256,contr
+	call memcpy32
+	arg mem_le_pubkey_remote_x_256,contr
+	call memcpy32
+	call inverse_memdat
+	arg mem_le_mrand,contr
+	call store_inverse_k	
+	branch function_AES_CMAC
+	
+
+function_f4_cb:
+	jam 65,mem_AES_CMAC_data_length
+	fetch 1,mem_passkey_1bit
+	store 1,mem_dat
+	arg mem_le_pubkey_remote_x_256,contr
+	call memcpy32
+	arg mem_sc_pubkey_local_x_256,contr
+	call memcpy32
+	call inverse_memdat
+	arg mem_le_srand,contr
+	call store_inverse_k	
+	branch function_AES_CMAC
+
+function_AES_CMAC:
+	bpatchx patch21_4,mem_patch21
+	call function_AES_CMAC_Generate_Subkey
+//call ice_break
+//	jam 65,mem_AES_CMAC_data_length
+//call ice_break
+	fetch 1,mem_AES_CMAC_data_length
+	copy pdata,temp
+function_ceil16:
+	increase 15,pdata
+	rshift4 pdata,pdata
+	copy pdata,regb
+	branch function_AES_CMAC_set_flag_0_balnk,blank
+	and temp,0x0f,pdata
+	nbranch function_AES_CMAC_set_flag_0,blank
+//	flag =1;
+	arg mem_AES_CMAC_k1,regc
+	arg mem_dat,pdata
+	increase -16,pdata
+//	iadd temp,pdata
+//	isub rega,rega
+	iadd temp,rega	
+	arg mem_AES_CMAC_M_last,contw
+	arg 4,loopcnt	
+	call xor_loop
+//call ice_break
+//	arg mem_f4_k1,contr
+//	call load_key
+	branch function_AES_CMAC_aes
+
+function_AES_CMAC_set_flag_0_balnk:
+	arg 1,regb
+	arg 0,rega
+//	arg mem_f4_test_data,pdata
+	branch function_AES_CMAC_set_flag_0_common
+//call ice_break
+
+function_AES_CMAC_set_flag_0:
+//	flag = 0;
+	and temp,0x0f,rega
+function_AES_CMAC_set_flag_0_common:
+	arg mem_dat,pdata
+	iadd temp,pdata
+	isub rega,contr
+//call ice_break
+	arg mem_AES_CMAC_temp,contw
+	call function_AES_CMAC_padding
+//call ice_break
+	arg mem_AES_CMAC_k2,regc
+	arg mem_AES_CMAC_temp,rega
+	arg mem_AES_CMAC_M_last,contw
+	arg 4,loopcnt	
+	call xor_loop	
+//call ice_break
+
+//	arg mem_f4_k2,contr
+//	call load_key
+
+//	branch p_function_f4_aes
+function_AES_CMAC_aes:
+//	arg mem_f4_k,contr
+//	call load_key
+//	arg mem_AES_CMAC_xor,contr
+//	call load_data128
+	call aes_clear_data
+	call aes_init	
+//	arg mem_f4_k,contr
+//	call load_key
+	arg mem_dat,contr
+function_AES_CMAC_aes_loop:
+//generate_mic_loop:
+	increase -1,regb
+	deposit regb
+	branch function_AES_CMAC_aes_loop_end,blank
+	call load_data128
+	call do_aes_cbc
+	branch function_AES_CMAC_aes_loop
+//generate_mic_end:
+function_AES_CMAC_aes_loop_end:	
+	arg mem_AES_CMAC_temp,contw
+	call store_aes_result
+	arg mem_AES_CMAC_M_last,contr
+	call load_data128
+	call aes_init	
+	arg mem_AES_CMAC_temp,contr
+	call load_data128	
+	branch do_aes_cbc
+
+
+
+load_inverse_result:
+//	arg mem_AES_CMAC_temp,contw
+	copy contw,rega
+	call store_aes_result
+//	arg mem_AES_CMAC_temp,rega
+	arg 16,loopcnt
+	branch inverse_data
+	
+store_inverse_k:
+	arg mem_AES_CMAC_k,contw
+	call memcpy16
+inverse_k:	
+	arg 16,loopcnt
+	arg mem_AES_CMAC_k,rega	
+	branch inverse_data
+	
+inverse_memdat:
+	fetch 1,mem_AES_CMAC_data_length
+	copy pdata,loopcnt
+	arg mem_dat,rega
+	branch inverse_data
+
+bn_lshift_0_inverse:
+	ifetch 1,rega
+	lshift pdata,pdata
+	isolate1 0,regc
+	setflag true,0,pdata	
+	isolate1 8,pdata
+	setflag true,0,regc	
+	istore 1,rega
+         increase -1,rega
+	loop bn_lshift_0_inverse
+	rtn	
+
+function_AES_CMAC_k1_inverse:
+	arg mem_AES_CMAC_k1,rega
+function_AES_CMAC_inverse_common:
+	increase 15,rega
+	force 16,loopcnt
+	force 0,regc
+	branch  bn_lshift_0_inverse	
+
+function_AES_CMAC_k2_inverse:
+	arg mem_AES_CMAC_k2,rega
+	branch function_AES_CMAC_inverse_common
+	
+
+function_AES_CMAC_Generate_Subkey:
+	arg mem_AES_CMAC_k,contr
+	call load_key
+//	arg mem_AES_CMAC_xor,contr
+//	call aes_load_xor
+	force regidx_xor,regext_index
+	call aes_clear
+	call aes_clear_data
+	call do_aes_ocb
+	
+//	force 0x38,aes_ctrl
+//	force 0x0,aes_ctrl
+//	call wait_aes
+	arg mem_AES_CMAC_k1,contw
+	call store_aes_result
+function_AES_CMAC_k1:
+	bpatchx patch21_5,mem_patch21
+	fetch 1,mem_AES_CMAC_k1
+	isolate1 7,pdata
+	nbranch function_AES_CMAC_k1_0,true	
+	call function_AES_CMAC_k1_inverse
+	
+//p_function_f4_k1_xor:
+	arg mem_AES_CMAC_k1,regc
+//	arg mem_AES_CMAC_rb,rega
+	arg mem_AES_CMAC_k1,contw
+//	arg 3,loopcnt
+//	call xor_loop
+	call function_AES_CMAC_xor_rb
+	branch function_AES_CMAC_k2
+function_AES_CMAC_k1_0:	
+	call function_AES_CMAC_k1_inverse
+function_AES_CMAC_k2:
+//call ice_break
+	arg mem_AES_CMAC_k1,contr
+	arg mem_AES_CMAC_k2,contw
+	call memcpy16
+	fetch 1,mem_AES_CMAC_k2
+	isolate1 7,pdata
+	nbranch function_AES_CMAC_k2_inverse,true		
+	call function_AES_CMAC_k2_inverse
+//p_function_f4_k2_xor:
+	arg mem_AES_CMAC_k2,regc
+//	arg mem_AES_CMAC_rb,rega
+	arg mem_AES_CMAC_k2,contw
+//	arg 3,loopcnt
+//	branch xor_loop	
+
+
+//rb:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 87 
+function_AES_CMAC_xor_rb:
+	arg 3,loopcnt
+function_AES_CMAC_xor_rb_loop:	
+	arg 0,temp
+	call function_AES_CMAC_xor_loop_common	
+	increase 4,regc
+	loop  function_AES_CMAC_xor_rb_loop
+	arg 0x8700,temp
+	lshift16 temp,temp
+function_AES_CMAC_xor_loop_common:	
+	ifetch   4,regc
+	ixor  temp,pdata
+	istore   4,contw	
+	rtn
+		
+
+
+
+//input rega :length <16	contr,contw
+function_AES_CMAC_padding:
+	bpatchx patch21_6,mem_patch21
+	arg 16,loopcnt
+	arg 0,pdata
+function_AES_CMAC_padding_loop:
+	isub rega,null
+	branch function_AES_CMAC_padding_beq_length,zero
+	branch function_AES_CMAC_padding_big_length,positive
+	ifetcht 1,contr
+	istoret 1,contw
+function_AES_CMAC_padding_loop2:	
+	increase 1,pdata
+	loop function_AES_CMAC_padding_loop
+	rtn
+function_AES_CMAC_padding_beq_length:	
+	arg 0x80,temp
+function_AES_CMAC_padding_common:
+	istoret 1,contw
+	branch  function_AES_CMAC_padding_loop2
+
+function_AES_CMAC_padding_big_length:
+	arg 0,temp
+	branch function_AES_CMAC_padding_common
+
+	
+
+	
+concatenate_temp24:
+	lshift8 temp,temp
+concatenate_temp16:
+	lshift16 temp,temp
+	ior temp,temp
+	rtn
+
+endif
+
+/* ==================== LE security ================= */
+
+generate_stk:
+	bpatchx patch21_7,mem_patch21
+	call function_s1
+	arg mem_le_ltk,contw
+	branch store_aes_result
+
+	/* contr = rand pointer */
+authenticate_rconfirm:
+	arg mem_le_srand,contw
+	branch authenticate_mconfirm,master
+	arg mem_le_mrand,contw
+authenticate_mconfirm:
+	copy contr,rega
+	call memcpy16
+	call function_c1
+	arg mem_le_rconfirm,contr
+	branch compare_res
+
+generate_confirm:
+	arg mem_le_mrand,rega
+	branch generate_mrand,master
+	arg mem_le_srand,rega
+generate_mrand:
+	copy rega,contw
+	call generate_random
+	branch function_c1
+
+generate_sk:
+	arg mem_le_skdm,contr
+	call load_data128
+	arg mem_le_ltk,contr
+	call load_regext
+	force 0x38,aes_ctrl
+	force 0x0,aes_ctrl
+	call wait_aes
+	arg mem_le_sk,contw
+	branch store_aes_result
+
+
+//input temp:counter; rega:len	
+ccm_b0:
+	force regidx_xor,regext_index				
+	force 0x49,pdata
+	branch iv_common
+	
+	/* temp=packet counter, rega = length or block counter*/
+first_block_counter:
+	force 0x49,pdata
+	branch first_block
+first_block_data:
+	force 1,pdata
+first_block:
+	force regidx_data,regext_index			
+iv_common:
+	lshift8 temp,regext
+	ior regext,regext
+	increase 1,regext_index
+	rshift8 temp,regext
+	rshift16 regext,regext
+	fetch 2,mem_ccm_iv
+	lshift16 pdata,pdata
+	ior regext,regext				/* octet3&octet4 of counter and low 16 bit of IV */
+	increase 1,regext_index
+	ifetchr regext, 4,contr					/* IV2-IV5 */
+	increase 1,regext_index
+	ifetch 2,contr					/* IV6-IV7 */
+	byteswap rega,regext
+	lshift16 regext,regext
+	ior regext,regext
+	increase 1,regext_index
+	rtn
+
+
+	/* temp=packet counter, regc pointers to data */	
+generate_mic:
+	add regc,1,contr
+	ifetch 1,contr
+	iforce rega
+	call first_block_counter		//B0
+	call do_aes_ocb
+
+	force regidx_data,regext_index			/* B1 */
+	ifetch 1,regc
+	and_into 0x3,pdata
+	lshift16 pdata,regext
+	set1 8,regext
+	call clear_hidata	//B1
+	call do_aes_cbc
+
+	copy rega,loopcnt
+	add regc,2,contr
+	call padding_data	//
+generate_mic_loop:
+	call aes_load_data
+	call do_aes_cbc
+	deposit loopcnt
+	branch generate_mic_end,blank
+	branch generate_mic_loop
+generate_mic_end:
+	force regidx_result,regext_index
+	deposit regext
+	store 4,mem_le_mic
+	rtn
+
+aes_crypt_data:
+	increase 1,rega
+	call first_block_data
+	copy regc,contr
+	call aes_load_xor
+	call do_aes_ctr
+	call store_enc_data
+	increase 16,regc
+	increase -16,regb
+	branch aes_crypt_data,positive
+	rtn
+
+
+/*
+le_encrypt:
+	arg mem_le_txheader,regc
+	fetcht 5,mem_ccm_pcnt_tx
+	call generate_mic
+	force regidx_xor,regext_index
+	iforce regext
+	force 0,rega					 
+	call first_block_data
+	call do_aes_ctr
+	arg mem_le_txpayload,regc
+	fetch 1,mem_le_txlen
+	add pdata,-1,regb
+	iadd regc,contw
+	force regidx_result,regext_index
+	deposit regext
+	istore 4,contw	
+	call aes_crypt_data
+	fetch 1,mem_le_txlen
+	increase 4,pdata
+	store 1,mem_le_txlen
+	fetcht 5,mem_ccm_pcnt_tx
+	increase 1,temp
+	set0 LE_CCM_DIRECTIONBIT,temp
+	storet 5,mem_ccm_pcnt_tx
+	rtn
+
+le_decrypt:
+	fetch 1,mem_le_rxbuf+1
+	arg mem_le_rxbuf+2,regc
+	add pdata,-1,regb
+	increase -4,pdata				
+	store 1,mem_le_rxbuf+1
+	iadd regc,contr
+	ifetch 4,contr
+	force regidx_xor,regext_index
+	iforce regext
+	force 0,rega					
+	fetcht 5,mem_ccm_pcnt_rx
+	call first_block_data	//generate nonce
+	call do_aes_ctr
+	force regidx_result,regext_index
+	deposit regext
+	store 4,mem_le_peer_mic
+	call aes_crypt_data
+	arg mem_le_rxbuf,regc
+	call generate_mic
+	fetcht 4,mem_le_peer_mic
+	isub temp,pdata				
+	nrtn blank
+	fetch 4,mem_ccm_last_mic			
+	isub temp,pdata
+	rtn blank
+	storet 4,mem_ccm_last_mic
+	fetch 5,mem_ccm_pcnt_rx
+	increase 1,pdata
+	set1 LE_CCM_DIRECTIONBIT,pdata
+	store 5,mem_ccm_pcnt_rx
+	force 0,pdata
+	rtn
+
+
+ 	
+le_decrypt_new:
+ 	call ccm_init_common
+	jam 0,core_ccm_aad0 
+	jam 1,core_ccm_aad1
+	fetch 1,mem_le_rxbuf_data_header
+	and_into 0x3,pdata
+	store 1,core_ccm_aad2
+	
+	setarg mem_le_rxbuf_data_payload
+	store 2,core_ccm_input_playload_addr
+	store 2,core_ccm_output_playload_addr
+
+	fetchr rega, 1,mem_le_rxbuf_data_length
+	increase -4,rega
+	nbranch disable_blank,positive
+	storer rega, 1,mem_le_rxbuf_data_length
+	setarg mem_le_rxbuf_data_payload
+	iadd rega,contr
+	force regidx_data,regext_index
+	ifetchr regext, 4,contr
+	storer  regext,4,mem_le_peer_mic
+	fetcht 5,mem_ccm_pcnt_rx				
+	call ccm_b0
+	jam 6,core_ccm_ctrl
+	jam 7,core_ccm_ctrl
+	fetch 1,mem_le_rxbuf_data_length
+	store 2,core_ccm_inptr
+	call wait_ccm_done
+	fetch 1,core_misc_status
+	bbit0 7, disable_blank
+	fetcht 4,mem_le_peer_mic
+	fetch 4,mem_ccm_last_mic			
+	isub temp,pdata
+	rtn blank
+	storet 4,mem_ccm_last_mic
+	fetch 5,mem_ccm_pcnt_rx
+	increase 1,pdata
+	set1 LE_CCM_DIRECTIONBIT,pdata
+	store 5,mem_ccm_pcnt_rx
+	force 0,pdata
+	rtn
+
+
+le_encrypt_new:
+	call le_encrypt_new_start
+	setarg mem_le_txpayload
+	iadd rega,rega
+	call wait_ccm_done
+	arg regidx_result,regext_index
+	istorer regext, 4 ,rega
+	rtn
+*/
+
+
+le_encrypt_new_start:
+	call ccm_init_common
+	bpatchx patch22_0,mem_patch22
+	jam 0,core_ccm_aad0 
+	jam 1,core_ccm_aad1
+	fetch 1,mem_le_txheader
+	and_into 0x3,pdata
+	store 1,core_ccm_aad2
+	fetch 2,mem_contr
+	store 2,core_ccm_input_playload_addr
+	setarg mem_le_txpayload
+	store 2,core_ccm_output_playload_addr
+	
+	fetchr rega,1,mem_le_txlen
+	fetcht 5,mem_ccm_pcnt_tx				
+	call ccm_b0
+	jam 2,core_ccm_ctrl
+	jam 3,core_ccm_ctrl
+	
+	fetch 1,mem_le_txlen
+	store 2,core_ccm_inptr
+	increase 4,pdata
+	store 1,mem_le_txlen
+	fetch 5,mem_ccm_pcnt_tx
+	increase 1,pdata
+ 	set0 LE_CCM_DIRECTIONBIT,pdata
+	store 5,mem_ccm_pcnt_tx
+	rtn
+
+
+ccm_wait_enc:
+	fetch 2,core_ccm_outptr
+	isub temp,null
+	rtn zero 
+	nrtn blank
+//	call assert
+	branch ccm_wait_enc
+
+ccm_check_enc_done:
+	fetch 1,core_misc_status
+	bbit0 6,assert
+ccm_enc_done:
+	setarg mem_le_txpayload
+	iadd temp,contw	
+	arg regidx_result,regext_index
+	istorer regext, 4 ,contw	
+	branch ccm_ctrl_clr
+	
+ccm_init_common:
+	bpatchx patch22_1,mem_patch22
+	force regidx_result,regext_index
+	call aes_clear
+	call aes_clear_data
+ 	setarg 0
+	store 2,core_ccm_inptr
+	rtn
+	
+wait_ccm_done:
+	fetch 1,core_misc_status
+	bbit0 6,wait_ccm_done
+ccm_ctrl_clr:
+	jam 0,core_ccm_ctrl
+	rtn
+
+
+wait_aes:
+	nbranch wait_aes,aes_ready
+	rtn
+
+do_aes_ocb:
+	force 0x30,aes_ctrl
+	force 0x0,aes_ctrl
+	branch wait_aes
+
+do_aes_cbc:
+	force 0x32,aes_ctrl
+	force 0x2,aes_ctrl
+	branch wait_aes
+
+do_aes_ctr:
+	force 0x34,aes_ctrl
+	force 0x4,aes_ctrl
+	branch wait_aes
+
+	
+aes_init:
+	force 1,aes_ctrl
+	force 0,aes_ctrl
+	rtn
+
+
+wait_keyinit_done:
+	fetch 1,core_aes_decode_key_init
+	bbit0 2,wait_keyinit_done
+	rtn
+
+
+/*
+input:pdata,dec key buffer addr
+output:initial dec key
+密钥不改，只做一次
+*/
+dec_key_initial:
+	store 2,core_keybuf_saddr
+	force 0xc0,aes_ctrl
+	force 0x80,aes_ctrl	//dec key initial
+	branch wait_keyinit_done
+
+/*
+input:regb,user enc payload buffer ptr
+	regc,user dec payload buffer ptr
+output:user dec payload buffer ptr
+*/
+do_aes_ecb_dec:
+	force regidx_data,regext_index
+	copy regb,contr
+   	force 4,loopcnt
+	call aes_ecb_dec_loop
+
+	force 0x180,aes_ctrl	//dec load data
+	force 0x80,aes_ctrl
+	call wait_aes
+ecb_dec_generate: 
+	force regidx_result,regext_index
+	copy regc,contw
+   	force 4,loopcnt
+ecb_dec_generate_loop:
+    copy regext,pdata
+	istore 4,contw
+	increase 1,regext_index
+	loop ecb_dec_generate_loop
+	rtn
+
+aes_ecb_dec_loop:
+	ifetch 2,contr
+	ifetcht 2,contr
+	lshift16 temp,temp
+	ior temp,regext
+	increase 1,regext_index
+	loop aes_ecb_dec_loop
+	rtn
+
+
+/*
+input:rega,xor data buffer ptr
+	regb,user enc payload buffer ptr	
+	regc,user dec payload buffer ptr
+output:user dec payload buffer ptr
+*/
+do_aes_cbc_dec:
+	force regidx_xor,regext_index
+	copy rega,contr
+	force 4,loopcnt
+	call aes_ecb_dec_loop
+
+	force regidx_data,regext_index
+	copy regb,contr
+	force 4,loopcnt
+	call aes_ecb_dec_loop
+	force 0x182,aes_ctrl
+	force 0x82,aes_ctrl
+	call wait_aes
+	branch ecb_dec_generate
+
+	
+function_s1:
+	force regidx_data,regext_index
+	fetch 4,mem_le_mrand
+	iforce regext
+	increase 1,regext_index
+	ifetch 4,contr
+	iforce regext
+	increase 1,regext_index
+	fetch 4,mem_le_srand
+	iforce regext
+	increase 1,regext_index
+	ifetch 4,contr
+	iforce regext
+	increase 1,regext_index
+	call aes_clear
+	increase -4,regext_index
+	fetch 4,mem_le_tk
+	copy pdata,regext
+	increase 4,regext_index
+	force 0x38,aes_ctrl
+	force 0x8,aes_ctrl
+	branch wait_aes
+
+	/* rega pointers to random number */
+function_c1:
+	bpatchx patch22_2,mem_patch22
+	fetch 6,mem_le_lap
+	fetcht 6,mem_le_plap
+	branch function_c1_master,master
+	fetch 6,mem_le_plap
+	fetcht 6,mem_le_lap
+function_c1_master:
+	force regidx_xor,regext_index
+	copy temp,regext
+	increase 1,regext_index
+	rshift32 temp,regext
+	lshift16 pdata,pdata
+	ior regext,regext
+	increase 1,regext_index
+	rshift32 pdata,regext
+	increase 1,regext_index
+	force 0,regext					/* p2 = ia || ra */
+	force 0,pdata
+	fetch 1,mem_le_conn_peer_addr_type
+	fetcht 1,mem_le_adv_own_addr_type
+	nbranch function_c1_irat,master
+	//conn as master
+	fetch 1,mem_le_conn_own_addr_type
+	fetcht 1,mem_le_conn_peer_addr_type
+function_c1_irat:
+	store 1,mem_le_iat
+	storet 1,mem_le_rat
+	force regidx_data,regext_index
+	arg mem_le_iat,regb
+	force 4,loopcnt
+function_c1_loop1:
+	ifetch 4,rega		
+	ifetcht 4,regb
+	ixor temp,regext
+	increase 1,regext_index
+	increase 4,rega
+	increase 4,regb
+	loop function_c1_loop1		/* p1 ^ r */
+	call aes_clear				/* k = 0 */
+	increase -4,regext_index
+	fetch 4,mem_le_tk
+	copy pdata,regext
+	increase 4,regext_index
+	force 0x38,aes_ctrl
+	force 0xc,aes_ctrl
+	call wait_aes
+
+	call aes_clear_data
+	force 0x3a,aes_ctrl
+	force 0x8,aes_ctrl
+	branch wait_aes
+
+padding_data:
+	compare 0,loopcnt,3
+	rtn true
+	deposit contr
+	iadd loopcnt,contw
+	force 0,pdata
+padding_loop:
+	istore 1,contw
+	increase 1,loopcnt
+	compare 0,loopcnt,3
+	rtn true
+	branch padding_loop
+
+aes_load_data:
+	force regidx_data,regext_index
+load_data_loop:
+	deposit loopcnt
+	branch load_data_padding,blank
+	ifetch 4,contr
+	increase -4,loopcnt
+load_data_padding:
+	iforce regext
+	increase 1,regext_index
+	compare regidx_key,regext_index,0xf
+	rtn true
+	branch load_data_loop
+
+aes_load_xor:
+	force regidx_xor,regext_index
+	branch load_regext
+load_key:
+	force regidx_key,regext_index
+	branch load_regext
+load_data128:
+	force regidx_data,regext_index
+load_regext:
+	force 4,loopcnt
+load_regext_loop:
+	ifetch 4,contr
+	iforce regext
+	increase 1,regext_index
+	loop load_regext_loop
+	rtn
+
+load_sk:
+	arg mem_le_sk,contr
+	branch load_key
+
+clear_hidata:
+	force 4,loopcnt
+	branch clear_data_rest
+
+regext_clear:
+	force 0,regext_index
+	force 16,loopcnt
+	branch clear_loop
+
+aes_clear_data:
+	force regidx_data,regext_index
+aes_clear:
+	force 4,loopcnt
+clear_loop:
+	force 0,regext
+clear_data_rest:
+	increase 1,regext_index
+	loop clear_loop
+	rtn
+
+store_aes_result:
+	force regidx_result,regext_index
+	force 4,loopcnt
+send_aes_result_loop:
+	deposit regext
+	istore 4,contw
+	increase 1,regext_index
+	loop send_aes_result_loop
+	rtn
+
+store_enc_data:
+	force regidx_result,regext_index
+	copy regc,contw
+	add regb,1,loopcnt
+	sub loopcnt,15,null
+	branch store_enc_loop,positive
+	force 16,loopcnt
+store_enc_loop:
+	deposit regext
+	sub loopcnt,3,null
+	branch store_enc_byte,positive
+	istore 4,contw
+	increase -4,loopcnt
+	rtn zero
+	increase 1,regext_index
+	branch store_enc_loop
+store_enc_byte:
+	istore 1,contw
+	rshift8 pdata,pdata
+	loop store_enc_byte
+	rtn
+	
+	/* contr pointers to value to be compared */
+compare_res:
+	force regidx_result,regext_index
+	force 4,loopcnt
+compare_res_loop:
+	ifetch 4,contr
+	isub regext,null
+	nrtn zero
+	increase 1,regext_index
+	loop compare_res_loop
+	branch enable_zero
+
+enable_authrom:
+	fetch 1,core_clkoff
+	set0 CLOCK_OFF_AUTH_ROM,pdata
+	store 1,core_clkoff
+	rtn
+
+disable_authrom:
+	fetch 1,core_clkoff
+	set1 CLOCK_OFF_AUTH_ROM,pdata
+	store 1,core_clkoff
+	rtn
+
+//24 mem_p :ff ff ff ff ff ff ff ff fe ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
+//24 mem_a: fc ff ff ff ff ff ff ff fe ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
+//24 mem_b: b1 b9 46 c1 ec de b8 fe 49 30 24 72 ab e9 a7 0f e7 80 9c e5 19 05 21 64
+//24 mem_gx :12 10 ff 82 fd 0a ff f4 00 88 a1 43 eb 20 bf 7c f6 90 30 b0 0e a8 8d 18
+//24 mem_gy :11 48 79 1e a1 77 f9 73 d5 cd 24 6b ed 11 10 63 78 da c8 ff 95 2b 19 07
+//32 memh0   :19 cd e0 5b ab d9 83 1f 8c 68 05 9b 7f 52 0e 51 3a f5 4f a5 72 f3 6e 3c 85 ae 67 bb 67 e6 09 6a //use for sha
+init_memp:
+	arg mem_p,contw
+	setsect 0,0x3ffff
+	setsect 1,0x3ffff
+	setsect 2,0x3ffff
+	setsect 3,0x3fbff
+	istore 9,contw
+	setsect 0,0x3ffff
+	setsect 1,0x3ffff
+	setsect 2,0x3ffff
+	setsect 3,0x3ffff
+	istore 9,contw
+	setsect 0,0x3ffff
+	setsect 1,0x3ffff
+	setsect 2,0x3cfff
+	setsect 3,0x3ffff
+	istore 9,contw
+	setsect 0,0x3ffff
+	setsect 1,0x3ffff
+	setsect 2,0x3ffef
+	setsect 3,0x3ffff
+	istore 9,contw
+	setsect 0,0x3ffff
+	setsect 1,0x3ffff
+	setsect 2,0x3ffff
+	setsect 3,0x3ffff
+	istore 9,contw
+	setsect 0,0x3ffff
+	setsect 1,0x26c7f
+	setsect 2,0x146b
+	setsect 3,0x37bb3
+	istore 9,contw
+	setsect 0,0x1feb8
+	setsect 1,0x10c12
+	setsect 2,0x2b722
+	setsect 3,0x29fa6
+	istore 9,contw
+	setsect 0,0xe70f
+	setsect 1,0x16720
+	setsect 2,0x519e
+	setsect 3,0x19084
+	istore 9,contw
+	setsect 0,0x31012
+	setsect 1,0x360bf
+	setsect 2,0x3f0af
+	setsect 3,0x3d3
+	istore 9,contw
+	setsect 0,0x3a188
+	setsect 1,0x3ad0
+	setsect 2,0x3cbf2
+	setsect 3,0x243d9
+	istore 9,contw
+	setsect 0,0x2b030
+	setsect 1,0x36a03
+	setsect 2,0x11188
+	setsect 3,0x1e520
+	istore 9,contw
+	setsect 0,0x3a11e
+	setsect 1,0xfe5d
+	setsect 2,0xdd57
+	setsect 3,0x1ac93
+	istore 9,contw
+	setsect 0,0x11ed
+	setsect 1,0x218c4
+	setsect 2,0x8da7
+	setsect 3,0x257ff
+	istore 9,contw
+	setsect 0,0x3192b
+	setsect 1,0x34641
+	setsect 2,0x1be0c
+	setsect 3,0x366ad
+	istore 9,contw
+	setsect 0,0x1f83
+	setsect 1,0x15a23
+	setsect 2,0x3f9b0
+	setsect 3,0x3949
+	istore 9,contw
+	setsect 0,0x13a51
+	setsect 1,0x153fd
+	setsect 2,0x3372a
+	setsect 3,0xf1bb
+	istore 9,contw
+	setsect 0,0x3ae85
+	setsect 1,0x1eed9
+	setsect 2,0x9e66
+	setsect 3,0x1a8
+	istore 8,contw
+	rtn
+
+ifdef SECURE_CONNECTION
+
+// mem_p_256:ff ff ff ff ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 ff ff ff ff
+// mem_a_256: fc ff ff ff ff ff ff ff fe ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff b1 b9 46 c1 ec de b8 fe
+// mem_gx_256: 96 c2 98 d8 45 39 a1 f4 a0 33 eb 2d 81 7d 03 77 f2 40 a4 63 e5 e6 bc f8 47 42 2c e1 f2 d1 17 6b
+// mem_gy_256: f5 51 bf 37 68 40 b6 cb ce 5e 31 6b 57 33 ce 2b 16 9e 0f 7c 4a eb e7 8e 9b 7f 1a fe e2 42 e3 4f
+// mem_le_slat :be 83 60 5a db 0b 37 60 38 a5 f5 aa 91 83 88 6c
+init_memp_256:
+ 	arg mem_p_256,contw
+        setsect 0,0x3ffff
+        setsect 1,0x3ffff
+        setsect 2,0x3ffff
+        setsect 3,0x3ffff
+        istore 9,contw
+        setsect 0,0x3ffff
+        setsect 1,0x3f
+        setsect 2,0x0
+        setsect 3,0x0
+        istore 9,contw
+        setsect 0,0x0
+        setsect 1,0x0
+        setsect 2,0x1000
+        setsect 3,0x0
+        istore 9,contw
+        setsect 0,0x3ff00
+        setsect 1,0x3ffff
+        setsect 2,0x3ffcf
+        setsect 3,0x3ffff
+        istore 9,contw
+        setsect 0,0x3ffff
+        setsect 1,0x3ffff
+        setsect 2,0x3ffff
+        setsect 3,0x3ff
+        istore 9,contw
+        setsect 0,0x0
+        setsect 1,0x0
+        setsect 2,0x0
+        setsect 3,0x0
+        istore 9,contw
+        setsect 0,0x10000
+        setsect 1,0x0
+        setsect 2,0x3f000
+        setsect 3,0x3ffff
+        istore 9,contw
+        setsect 0,0x296ff
+        setsect 1,0x22630
+        setsect 2,0x3945d
+        setsect 3,0x3d284
+        istore 9,contw
+        setsect 0,0x333a0
+        setsect 1,0x4b7a
+        setsect 2,0x37d8
+        setsect 3,0x3c9dc
+        istore 9,contw
+        setsect 0,0x3a440
+        setsect 1,0x1b958
+        setsect 2,0x38bce
+        setsect 3,0x1091f
+        istore 9,contw
+        setsect 0,0x2e12c
+        setsect 1,0x1f47c
+        setsect 2,0x356b1
+        setsect 3,0x2fd47
+        istore 9,contw
+        setsect 0,0x6837
+        setsect 1,0x2ed90
+        setsect 2,0x1ecec
+        setsect 3,0x1acc5
+        istore 9,contw
+        setsect 0,0x23357
+        setsect 1,0x18af3
+        setsect 2,0xf9e1
+        setsect 3,0x129f0
+        istore 9,contw
+        setsect 0,0x2e7eb
+        setsect 1,0x3e6e3
+        setsect 2,0x3e1a7
+        setsect 3,0x10b8b
+        istore 9,contw
+        setsect 0,0x24fe3
+        setsect 1,0x20ef
+        setsect 2,0x1b5a6
+        setsect 3,0xdc2f
+        istore 9,contw
+        setsect 0,0x13860
+        setsect 1,0x2bd69
+        setsect 2,0x391a
+        setsect 3,0x1b222
+        istore 9,contw
+        rtn
+endif
+
Index: program/sim.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/sim.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/sim.prog	(working copy)
@@ -0,0 +1,785 @@
+simstart:
+	force 8,radio_ctrl
+	force 0,radio_ctrl
+    //dpll enable
+	jam 0xcf,core_bbpll_ctrl0
+	jam 0xe9,core_bbpll_ctrl1
+	jam 5,core_clksel
+	jam 0,core_clkoff
+	jam 0,core_clkoff+1
+	jam SYSTEM_CLK_12M,mem_system_clk
+
+//	call sim_nec
+//	branch sim_c1
+//	jam 8,0x8011 //efuse lock
+//	call sim_wdt
+//	call sim_nec
+//	call sim_dac
+//    call sim_ccm
+//	call sim_otp
+//    branch sim_assert
+//	branch sim_lr
+//	call sim_snooze
+//	call sim_adpcm
+//	branch sim_lpm_clk
+//	call sim_pwm
+//	call sim_saradc
+//	branch sim_usb
+	branch sim_lpm_sleep
+//	branch sim_iic
+//	call sim_cal
+//	call sim_uart
+//	call sim_spi
+//	branch sim_le
+	branch sim_assert
+	fetch 1,mem_sim_slave
+	beq 1,assert
+
+sim_assert:
+	branch sim_assert
+
+
+
+sim_adpcm:
+	arg mem_le_test_sync,contr
+	arg 0,contw
+	arg 192,loopcnt
+sim_adpcm_loop:
+	ifetch 4,contr
+	call adpcm_byte
+	istore 1,contw
+	loop sim_adpcm_loop
+	copy contr,rega
+	arg 0,regb
+	arg 192,loopcnt
+	call string_compare
+	nbranch assert,zero
+	arg mem_le_test_sync+768,contr
+	arg 0,contw
+	arg 192,loopcnt
+	pulse init_adpcm
+sim_adpcm_loop2:
+	ifetch 1,contr
+	pcm pdata,temp
+	istoret 2,contw
+	rshift4 pdata,pdata
+	pcm pdata,temp
+	istoret 2,contw
+	loop sim_adpcm_loop2	
+	copy contr,rega
+	arg 0,regb
+	arg 768,loopcnt
+	call string_compare
+	nbranch assert,zero
+	rtn
+	
+// pdata is 4 byte pcm data, return in pdata
+adpcm_byte:
+	adpcm pdata,temp
+	rshift16 pdata,pdata
+	adpcm pdata,pdata
+	lshift4 pdata,pdata
+	ior temp,pdata
+	rtn
+
+	
+
+sim_nec:
+	jam gpcfg_nec_input,core_gpio_conf+6
+	setarg 0x100000
+	arg 0x31,temp
+	call nec_init_config
+	nop 10000
+	jam 0x0,core_nec_ctrl
+	rtn
+
+sim_saradc:
+	jam 0,core_gpadc_cfg1
+	jam 0x77,core_gpadc_ctrl
+	call sim_sadc_cal
+	jam 0xc1,core_gpadc_cfg0
+	jam 1,core_sadc_clkdiv
+	call sim_sadc
+	jam 11,core_sadc_clkdiv
+	call sim_sadc
+	jam 119,core_sadc_clkdiv
+	call sim_sadc
+	jam 11,core_sadc_clkdiv
+	call sim_sadc
+	jam 0,core_sadc_clkdiv
+	call sim_sadc_dma
+	rtn
+
+
+sim_sadc_dma:
+	jam 0x80,core_gpadc_cfg1
+	jam 10,core_sadc_clkdiv
+	jam 0xff,core_sadc_eaddr
+	jam 0xb,core_sadc_ctrl
+	nop 1000
+	jam 0x3,core_sadc_ctrl
+	rtn
+
+sim_sadc_cal:
+	jam 0xc9,core_gpadc_cfg0
+	jam 7,core_sadc_clkdiv
+sim_sadc:
+	jam 0x23,core_sadc_ctrl
+sim_sadc_wait:
+	fetch 1,core_perf_status
+	bbit0 5,sim_sadc_wait
+	fetcht 2,core_sadc_data
+	jam 6,core_sadc_ctrl
+sim_sadc_wait2:
+	fetch 1,core_perf_status
+	bbit1 5,sim_sadc_wait2
+	jam 0,core_sadc_ctrl
+	rtn
+
+
+sim_pwm:
+	jam 0xce,core_clkoff+1
+	jam 0x1,core_pwm_pcnt0
+	jam 0x1,core_pwm_ncnt0
+	jam 0x10,core_gpio_conf+6
+	jam 0x1,core_pwm_autoload
+	jam 0x1,core_pwm_en //pwm0/1 enable
+	rtn
+
+sim_usb:
+	call usb_init
+sim_usb_loop:
+	call usb_isr
+	branch sim_usb_loop
+
+sim_lpm_clk:
+	jam 1,mem_context
+	branch sim_lpm_cont,wake
+	jam 0x2,core_ccnt_bit
+	jam ccnt_start,core_misc_ctrl
+sim_lpm_wait:
+	call lpo_calibration
+	fetch 3,mem_clks_per_lpo
+	branch sim_lpm_wait,blank
+	lshift4 pdata,pdata
+	store 3,mem_clks_per_lpo
+sim_lpm_cont:
+	setarg param_rt_rthalfslot
+	store 2,mem_param_rt_rthalfslot
+	call lpm_recover_clk,wake
+	setarg 10000
+	call sleep,wake
+sim_lpm_sleep:
+	branch sim_lpm_hibernate,wake
+	arg 120,temp
+	storet 4,mem_sleep_counter
+	branch lpm_sleep
+
+sim_lpm_hibernate:
+	until null,lpo_edge
+	jam 0x77,core_gpio_wakeup_cfg+3
+	until null,lpo_edge
+	jam 0x77,core_gpio_wakeup_cfg+4
+	until null,lpo_edge
+	jam 2,core_gpio_wakeup_cfg+5
+	until null,lpo_edge
+	jam 0xaa,core_puwakeup
+	until null,lpo_edge
+	arg 60,temp
+	branch lpm_hibernate+2
+
+
+sim_le:
+	jam lemode_2m,mem_le_mode
+	fetch 1,mem_sim_slave
+	beq 1,sim_le_slave
+	jam 1,mem_le_scan_enable
+sim_le_loop:
+	call le_advertising_dispatch
+	branch sim_le_loop
+
+sim_le_slave:
+	jam 1,mem_le_adv_enable
+	nop 1000
+	branch sim_le_loop
+
+
+sim_otp:
+	fetch 1,mem_sim_slave
+	beq 1,assert
+	setarg 0x1234567
+	store 4,mem_tmp_buffer
+	arg 0x1230,regb
+	arg mem_tmp_buffer,rega
+	arg 4,loopcnt
+	call otp_write
+	arg 0x1230,regb
+	arg mem_tmp_buffer+4,rega
+	arg 4,loopcnt
+	call otp_read_data
+	fetch 4,mem_tmp_buffer
+	ifetcht 4,contr
+	isub temp,null
+	nbranch assert,zero
+	jam 0x73,0x8002
+	until null,lpo_edge
+	until null,lpo_edge
+	jam 0x80,0x8144
+	until null,lpo_edge
+	fetch 1,0x8144
+	arg 0x1230,regb
+	arg mem_tmp_buffer+4,rega
+	arg 4,loopcnt
+	call otp_read_data
+	fetch 4,mem_tmp_buffer
+	ifetcht 4,contr
+	isub temp,null
+	nbranch assert,zero
+	rtn
+	
+
+sim_snooze:
+	setarg 0x40
+	arg 13,loopcnt
+	arg core_gpio_conf,contw
+	lstore contw
+	jam 0x3,0x8150
+	setarg 123
+	iadd lpo_time,alarm
+	snooze
+	rtn
+
+ifdef TEST
+
+sim_ccm:
+    //call sim_aes_key_config_case1
+    //call sim_aes_dec_dma_case1
+    //call sim_aes_enc_dma_case1
+    call sim_aes_key_config_case4
+    call sim_aes_dec_dma_case4
+    call sim_aes_enc_dma_case4
+    rtn
+
+sim_aes_key_config_case1:
+    //key
+    force 4,regext_index
+    arg 0x6789,pdata
+    lshift16 pdata,pdata
+    arg 0x6789,temp
+    ior temp,regext
+    force 5,regext_index
+    arg 0x6789,pdata
+    lshift16 pdata,pdata
+    arg 0x6789,temp
+    ior temp,regext
+    force 6,regext_index
+    arg 0x2345,pdata
+    lshift16 pdata,pdata
+    arg 0x2345,temp
+    ior temp,regext
+    force 7,regext_index
+    arg 0x2345,pdata
+    lshift16 pdata,pdata
+    arg 0x2345,temp
+    ior temp,regext
+    //nonce
+    force 8,regext_index
+    arg 0xbc61,pdata
+    lshift16 pdata,pdata
+    arg 0x4e49,temp
+    ior temp,regext
+    force 9,regext_index
+    arg 0xccdd,pdata
+    lshift16 pdata,pdata
+    arg 0x0000,temp
+    ior temp,regext
+    force 0xa,regext_index
+    arg 0x8899,pdata
+    lshift16 pdata,pdata
+    arg 0xaabb,temp
+    ior temp,regext
+    force 0xb,regext_index
+    arg 0x0000,pdata
+    lshift16 pdata,pdata
+    arg 0x6677,temp
+    ior temp,regext
+    //aad
+    jam 0x00,0x80d5
+    jam 0x19,0x80d6
+    jam 0x02,0x80d7
+    rtn
+
+sim_aes_dec_dma_case1:
+    //mic golden
+    force 0,regext_index
+    arg 0xc5dd,pdata
+    lshift16 pdata,pdata
+    arg 0xa210,temp
+    ior temp,regext
+    
+    //payload
+
+    //dma config
+    jam 0x00,0x80d1
+    jam 0x10,0x80d2
+    jam 0x00,0x80d3
+    jam 0x10,0x80d4
+    jam 0x6,0x800a 
+    jam 0x7,0x800a 
+    nop 1000
+    rtn
+
+sim_aes_enc_dma_case1:
+    //payload
+
+    //dma config
+    jam 0x00,0x80d1
+    jam 0x10,0x80d2
+    jam 0x00,0x80d3
+    jam 0x11,0x80d4
+    jam 0x2,0x800a 
+    jam 0x3,0x800a 
+    nop 1000
+    rtn
+
+sim_aes_key_config_case4:
+    //key
+    force 4,regext_index
+    arg 0x1bd1,pdata
+    lshift16 pdata,pdata
+    arg 0x2ace,temp
+    ior temp,regext
+    force 5,regext_index
+    arg 0xbd56,pdata
+    lshift16 pdata,pdata
+    arg 0x14a1,temp
+    ior temp,regext
+    force 6,regext_index
+    arg 0x1f8b,pdata
+    lshift16 pdata,pdata
+    arg 0x9dbd,temp
+    ior temp,regext
+    force 7,regext_index
+    arg 0xfc22,pdata
+    lshift16 pdata,pdata
+    arg 0x8384,temp
+    ior temp,regext
+    //nonce
+    force 8,regext_index
+    arg 0xb3be,pdata
+    lshift16 pdata,pdata
+    arg 0x9549,temp
+    ior temp,regext
+    force 9,regext_index
+    arg 0x2769,pdata
+    lshift16 pdata,pdata
+    arg 0x00bd,temp
+    ior temp,regext
+    force 0xa,regext_index
+    arg 0xb727,pdata
+    lshift16 pdata,pdata
+    arg 0x5bf9,temp
+    ior temp,regext
+    force 0xb,regext_index
+    arg 0x1100,pdata
+    lshift16 pdata,pdata
+    arg 0x82b8,temp
+    ior temp,regext
+    //aad
+    jam 0x00,0x806c
+    jam 0x19,0x806d
+    jam 0x02,0x806e
+    rtn
+
+sim_aes_dec_dma_case4:
+    //mic golden
+    force 0,regext_index
+    arg 0x7c32,pdata
+    lshift16 pdata,pdata
+    arg 0x2cc6,temp
+    ior temp,regext
+    
+    //payload
+    arg 0x1001,contw
+    arg 0xb839, pdata
+    istore 2,contw
+    arg 0xc85f, pdata
+    istore 2,contw
+    arg 0x3756, pdata
+    istore 2,contw
+    arg 0x9249, pdata
+    istore 2,contw
+    arg 0xf07f, pdata
+    istore 2,contw
+    arg 0xd647, pdata
+    istore 2,contw
+    arg 0x2b40, pdata
+    istore 2,contw
+    arg 0x7ccc, pdata
+    istore 2,contw
+    arg 0xfff9, pdata
+    istore 2,contw
+    arg 0xffff, pdata
+    istore 2,contw
+    jam 0x11,0x80c1
+
+    //dma config
+    jam 0x01,0x8068
+    jam 0x10,0x8069
+    jam 0x02,0x806a
+    jam 0x40,0x806b
+    jam 0x6,0x800a 
+    jam 0x7,0x800a 
+    call wait_ccm_done
+    fetch 1,0x4012
+    bne 0x05,assert
+    rtn
+
+sim_aes_enc_dma_case4:
+    //payload
+    arg 0x4002,contw
+    arg 0x1286, pdata
+    istore 2,contw
+    arg 0xa56d, pdata
+    istore 2,contw
+    arg 0xb3db, pdata
+    istore 2,contw
+    arg 0x6491, pdata
+    istore 2,contw
+    arg 0xa19b, pdata
+    istore 2,contw
+    arg 0xc4ca, pdata
+    istore 2,contw
+    arg 0x9160, pdata
+    istore 2,contw
+    arg 0x3372, pdata
+    istore 2,contw
+    arg 0xff05, pdata
+    istore 2,contw
+    arg 0xffff, pdata
+    istore 2,contw
+    jam 0x11,0x80da //ccm_inptr
+
+    //dma config
+    jam 0x02,0x80d1
+    jam 0x40,0x80d2
+    jam 0x01,0x80d3
+    jam 0x11,0x80d4
+    jam 0x2,0x800a 
+    jam 0x3,0x800a 
+    call wait_ccm_done
+    fetch 1,0x1111
+    bne 0xf9,assert
+    rtn
+
+
+
+
+
+
+
+
+
+sim_dac:
+	jam gpcfg_dac_p,core_gpio_conf+4
+	jam gpcfg_dac_n,core_gpio_conf+5
+	jam 0,core_clkoff
+	setarg 0x012972
+	store 3,core_dac_coef
+	call sim_sine
+	setarg 0x200
+	store 2,core_dac_saddr
+	jam 0x4f,core_dac_len
+	jam 0xe0,core_dac_vol
+	jam 0x5,core_dac_ctrl
+	branch sim_assert
+
+sim_sine:
+	setarg 00
+	store 2,0x200
+	setarg 5690
+	istore 2,contw
+	setarg 11209
+	istore 2,contw
+	setarg 16386
+	istore 2,contw
+	setarg 21065
+	istore 2,contw
+	setarg 25104
+	istore 2,contw
+	setarg 28380
+	istore 2,contw
+	setarg 30794
+	istore 2,contw
+	setarg 32271
+	istore 2,contw
+	setarg 32767
+	istore 2,contw
+	add contw,-2,contr
+	arg 10,loopcnt
+sine_loop1:
+	ifetch 2,contr
+	istore 2,contw
+	increase -4,contr
+	loop sine_loop1
+	arg 0x200,contr
+	arg 20,loopcnt
+sine_loop2:
+	ifetcht 2,contr
+	sub temp,0,temp
+	istoret 2,contw
+	loop sine_loop2
+	rtn
+
+	
+
+sim_lpm:
+	setarg 0
+	arg 8,loopcnt
+sim_lpm_loop:
+	until null,lpo_edge
+	store 1,core_lpm_ldosel
+	pincrease 0x10
+	loop sim_lpm_loop
+	call app_lpm_peripheral_lock_shutter
+	call app_lpm_mpu_lock_ble
+
+
+sim_lr:
+	jam 3,mem_le_ch_mapped
+	setarg 0xfedcba
+	store 3,mem_le_crcinit
+	call le_enable
+	setarg 0x1234567
+	iforce access
+	set1 mark_ble_lr,mark
+//	set1 mark_ble_lr_s8,mark
+	setarg 0x2e0403
+	store 3,mem_le_txheader
+	setarg 0x123456
+	istore 3,contw
+	call le_transmit
+	branch assert
+
+
+
+sim_c1:
+	setarg 0xb4b5b6
+	store 3,mem_le_lap
+	setarg 0xb1b2b3
+	istore 3,contw
+	setarg 0xa4a5a6
+	store 3,mem_le_plap
+	setarg 0xa1a2a3
+	istore 3,contw
+	setarg 0x101
+	store 4,mem_le_preq
+	setarg 0x70710
+	istore 3,contw
+	setarg 0x302
+	store 4,mem_le_pres
+	setarg 0x50008
+	istore 3,contw
+	jam 0,mem_le_conn_peer_addr_type
+	jam 1,mem_le_adv_own_addr_type
+	arg regidx_key,regext_index
+	arg 4,loopcnt
+sim_clear_key_loop:
+	arg 0,regext
+	increase 1,regext_index
+	loop sim_clear_key_loop
+
+	setarg 0x702EE0
+	store 3,mem_le_rconfirm
+	setarg 0x274EC6
+	istore 3,contw
+	setarg 0x0E6388
+	istore 3,contw
+	setarg 0x56AD6F
+	istore 3,contw
+	setarg 0x83D521
+	istore 3,contw
+	setarg 0x57	
+	istore 1,contw
+	arg mem_le_rconfirm,rega
+	call aes_init
+	call function_c1
+	branch loop
+
+loop:
+	branch loop
+
+sim_wdt:
+    jam 8,0x8043
+    jam 0x7e,0x8004
+    nop 1000
+    jam 0xf,0x800b
+    rtn
+
+
+
+
+sim_uart:
+	jam 0x67,mem_h5tx_buf
+	setarg mem_h5tx_buf
+	add pdata,0x80,temp
+	call uarta_init_tx
+	increase 0x80,pdata
+	increase 0x80,temp
+	jam gpcfg_uart_txd,core_gpio_conf + 16
+	jam 0x81,core_uart_ctrl
+	setarg 0x30
+	store 2,core_uart_baud
+	fetch 1,mem_sim_slave
+	beq 1,sim_uart_slave
+	call uarta_prepare_tx
+	call sim_uart_wait+3
+	setarg 0x1357d9a
+	istore 4,contu
+	arg 0xaa69,rega
+	istorer rega,2,contu
+	setarg 0xfedcb3
+	istore 3,contu
+	storer contu,2,core_uart_twptr
+sim_uart_wait:
+	fetch 1,core_uart_status
+	bbit1 uart_status_tx_busy,sim_uart_wait
+	nop 200
+	rtn
+
+sim_uart_slave:
+	nop 247
+	fetch 1,mem_h5tx_buf
+	bne 0x67,assert
+	branch sim_uart_slave
+	fetch 1,core_uart_status
+	bbit1 uart_status_rx_fifo_empty,sim_uart_slave
+	fetch 1,core_uart_rxitems
+	bne 9,sim_uart_slave
+	fetcht 8,mem_h5tx_buf
+	call uarta_prepare_rx
+	ifetch 8,contu
+	isub temp,null
+	nbranch assert,zero
+	rtn
+
+
+
+sim_cal:
+
+	call tx_iq_precomp
+	fetchr regf,2,mem_omega
+	ifetchr regf,2,contr
+	ifetchr regf,2,contr
+	fetchr regf,2,mem_b1
+	ifetchr regf,2,contr
+	fetchr regf,2,mem_b2
+	ifetchr regf,2,contr
+	arg 0x1000,timeup
+	call tx_iq_cal
+	jam 1,core_ice_ctrl
+
+	arg 0x1000,timeup
+	call rx_iq_comp
+	jam 1,core_ice_ctrl
+	
+
+sim_iic:
+	call iic_init_600khz
+    call iicd_init_pin
+iic_write:
+	setarg 6
+	store 2,core_iicd_txlen
+	setarg 0x10a0
+	store 2,0x1000
+    setarg 0x5a00
+	store 2,0x1002
+    setarg 0xa5a5
+	store 2,0x1004
+	setarg 0x1000
+	store 2,core_iicd_txaddr
+	setarg 0
+	store 2,core_iicd_rxlen
+	jam 3,core_iicd_ctrl
+	jam iicd_start,core_misc_ctrl
+	call wait_iicd_done
+	nop 300
+iic_dummy_write:
+	setarg 3
+	store 2,core_iicd_txlen
+	setarg 0x10a0
+	store 2,0x1000
+    setarg 0x00
+	store 1,0x1002
+	setarg 0x1000
+	store 2,core_iicd_txaddr
+	setarg 0
+	store 2,core_iicd_rxlen
+	jam 3,core_iicd_ctrl
+	jam iicd_start,core_misc_ctrl
+	call wait_iicd_done
+	nop 300
+iic_read:
+    setarg 1
+	store 2,core_iicd_txlen
+    setarg 0xa1
+	store 1,0x1000
+	setarg 0x1000
+	store 2,core_iicd_txaddr
+    setarg 0x1100
+	store 2,core_iicd_rxaddr
+	setarg 3
+	store 2,core_iicd_rxlen
+	jam 1,core_iicd_ctrl
+	jam iicd_start,core_misc_ctrl
+	call wait_iicd_done
+    fetch 1, 0x1100
+    bne 0x5a, assert
+    rtn
+
+sim_spi:
+    //jam gpcfg_spid_miso ,core_gpio_conf + 12 
+    //jam gpcfg_spid_ncs ,core_gpio_conf + 13 
+    //jam gpcfg_spid_sck ,core_gpio_conf + 14 
+    //jam gpcfg_spid_mosi ,core_gpio_conf + 15
+    call spi_gpio_init
+
+    setarg 3 
+    store 2 ,core_spid_rxlen 
+    setarg 4 
+    store 2 ,core_spid_txlen 
+    setarg 0x1200 
+    store 2 ,core_spid_txaddr 
+    setarg 0x1300 
+    store 2 ,core_spid_rxaddr
+    setarg 0x0003
+	store 2,0x1200
+    setarg 0x0000
+	store 2,0x1202
+    jam spid_start ,core_misc_ctrl 
+    call wait_spid_done
+    fetch 1, 0x1302
+    bne 0xaa, assert
+    rtn
+
+
+sim_adc:
+    jam 0xc,0x8a0a
+    jam 0x2,0x8a17
+    jam 0x1,0x8a97
+    jam 0x0,0x80dc
+    jam 0x80,0x8053
+    nop 10000
+    jam 0x5,0x80dc
+    jam 0x80,0x8053
+    nop 10000
+    jam 0xa,0x80dc
+    jam 0x80,0x8053
+    nop 10000
+    jam 0xf,0x80dc
+    jam 0x80,0x8053
+    nop 10000
+    jam 0x0,0x8053
+    rtn
+
+ endif
Index: program/simple_pairing.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/simple_pairing.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/simple_pairing.prog	(working copy)
@@ -0,0 +1,1068 @@
+
+
+ifdef SECURE_CONNECTION
+
+
+publickey_init:
+//	fetch 1,mem_ssp_enable
+//	nbranch sp_initialize,blank
+	branch sp_initialize_256
+
+sp_calc_sequence_256_check:
+	bpatchx patch22_3,mem_patch22
+//	fetch 1,mem_ssp_enable
+//	rtn blank
+//	fetch 1,mem_sp_local_key_invalid
+//	rtnne SP_KEY_VALID
+	fetch 1,mem_secure_connections_enable
+	rtn blank
+	fetch 1,mem_sc_local_key_invalid
+	rtneq SP_KEY_VALID_256
+//	fetch 2,mem_ui_state_map
+//	bbit1 UI_STATE_BT_CONNECTED,stop_publickey_calc_256
+	fetch 1,mem_sc_calc
+	beq SP_CALC_STANDBY,sp_initialize_256
+	rtn
+stop_publickey_calc_256:
+	jam SP_CALC_STANDBY,mem_sc_calc	
+	rtn
+
+
+	
+
+sp_clear_flags:
+	bpatchx patch22_4,mem_patch22
+	setarg mem_sp_state_end
+	arg mem_sp_state_start,contw
+	isub contw,loopcnt
+	call clear_mem
+	setarg mem_sp_state_xmem_end
+	arg mem_sp_state_xmem,contw
+	isub contw,loopcnt
+	branch clear_mem
+
+
+
+sp_calc_check_publickey_256:
+	call sp_calc_b256
+	arg mem_le_pubkey_remote_y_256,rega
+	arg mem_t7_256,contw
+	call bn_sqrmod_256   
+	arg mem_le_pubkey_remote_x_256,rega
+	arg mem_t2_256,contw
+	call bn_sqrmod_256   
+  	arg mem_t2_256,rega
+	arg mem_le_pubkey_remote_x_256,regb
+	arg mem_t2_256,contw
+	call bn_mulmod_256	
+  	arg mem_a_256,rega
+	arg mem_le_pubkey_remote_x_256,regb
+	arg mem_t3_256,contw
+	call bn_mulmod_256	
+  	arg mem_t3_256,rega
+	arg mem_t2_256,regb
+	arg mem_t2_256,contw
+	call bn_addmod_256	 
+  	arg mem_t0_256,rega
+	arg mem_t2_256,regb
+	arg mem_t0_256,contw
+	call bn_addmod_256	 
+	arg 32,loopcnt
+  	arg mem_t7_256,rega
+	arg mem_t0_256,regb
+	branch  string_compare
+	
+sp_calc_b256:
+	arg mem_gy_256,rega
+	arg mem_t0_256,contw
+	call bn_sqrmod_256   
+	arg mem_gx_256,rega
+	arg mem_t2_256,contw
+	call bn_sqrmod_256    
+  	arg mem_t2_256,rega
+	arg mem_gx_256,regb
+	arg mem_t2_256,contw
+	call bn_mulmod_256	
+  	arg mem_a_256,rega
+	arg mem_gx_256,regb
+	arg mem_t3_256,contw
+	call bn_mulmod_256	 
+  	arg mem_t3_256,rega
+	arg mem_t2_256,regb
+	arg mem_t2_256,contw
+	call bn_addmod_256	 
+  	arg mem_t0_256,rega
+	arg mem_t2_256,regb
+	arg mem_t0_256,contw
+	branch  bn_submod_256	
+
+
+
+
+random_generator:
+	increase -1,queue
+	nrtn     positive
+	random   pdata
+	istore   2,contw  
+	branch   random_generator
+compare4:
+	increase -1,queue
+	nbranch  compare4_success,positive
+	ifetch   4,rega
+	copy     pdata,temp
+	ifetch   4,regb
+	iflip    temp,pdata
+	nbranch  compare4_failed,zero
+	increase 4,rega
+	increase 4,regb
+	branch   compare4
+compare4_failed:
+	branch disable_true
+
+compare4_success:
+	branch enable_true
+
+
+
+
+bn_testbit:
+	and pdata,7,queue
+	rshift3 pdata,pdata
+	iadd contr,contr
+	ifetch 1,contr
+	qisolate0 pdata
+	rtn
+
+
+bn_eq_zero:
+	ifetch 8,contr
+	nrtn blank
+	ifetch 8,contr
+	nrtn blank
+	ifetch 8,contr
+	rtn
+	
+	
+	/* return zero if eq */
+
+bn_eq_0:	
+	ifetch 4,rega
+	iforce temp
+	ifetch 4,regb
+	isub temp,null
+	nrtn zero
+	increase 4,rega
+	increase 4,regb
+	loop bn_eq_0
+	rtn
+	/* return positive if A >= B */
+bn_bigeq:
+	force 6,loopcnt
+	increase 20,rega
+	increase 20,regb
+bn_bigeq_0:	
+	ifetch 4,regb
+	iforce temp
+	ifetch 4,rega
+	isub temp,pdata
+	nrtn positive
+	nrtn blank
+	increase -4,rega
+	increase -4,regb
+	loop bn_bigeq_0
+	rtn
+bn_add:
+	force 6,loopcnt
+	force 0,regc
+bn_add_0:	
+	ifetch 4,rega
+	iforce temp
+	ifetch 4,regb
+	iadd temp,pdata
+	iadd regc,pdata
+	istore 4,contw
+	isolate1 32,pdata
+	setflag true,0,regc
+	increase 4,rega
+	increase 4,regb
+	loop bn_add_0
+	rtn
+
+bn_sub:
+	force 6,loopcnt
+	force 0,regc
+bn_sub_0:	
+	ifetch 4,regb
+	iforce temp
+	ifetch 4,rega
+	isub temp,pdata
+	isub regc,pdata
+	istore 4,contw
+	isolate1 32,pdata
+	setflag true,0,regc
+	increase 4,rega
+	increase 4,regb
+	loop bn_sub_0
+	rtn
+
+bn_rshift6:
+	force 6,loopcnt
+	increase 20,rega
+bn_rshift:
+	force 0,regc
+bn_rshift_0:	
+	ifetch 4,rega
+	isolate1 0,pdata
+	setflag true,1,regc
+	rshift pdata,pdata
+	isolate1 0,regc
+	setflag true,31,pdata
+	istore 4,rega
+	increase -4,rega
+	rshift regc,regc
+	loop bn_rshift_0
+	rtn
+bn_lshift:
+	force 6,loopcnt
+	force 0,regc
+bn_lshift_0:	
+	ifetch 4,rega
+	isolate1 31,pdata
+	setflag true,1,regc
+	lshift pdata,pdata
+	isolate1 0,regc
+	setflag true,0,pdata
+	istore 4,rega
+	increase 4,rega
+	rshift regc,regc
+	loop bn_lshift_0
+	rtn
+	
+
+bn_load:
+	force 6,loopcnt
+bn_load_0:	
+	ifetch 4,contr
+	iforce regext
+	increase 1,regext_index
+	loop bn_load_0
+	rtn
+
+
+
+sp_initialize_256:	
+	bpatchx patch22_5,mem_patch22
+	fetch 1,mem_secure_connections_enable
+	nbranch sp_pubkey_calc_256,blank
+//	call sp_clear_flags
+sc_reset:
+	jam SP_CALC_STANDBY,mem_sc_calc
+	jam SP_KEY_INVALID,mem_sc_local_key_invalid
+	rtn
+	
+	
+    	
+sp_wait_pubkey_calc_256_done:
+	fetch 1,mem_secure_connections_enable
+	rtn blank
+	fetch 1,mem_sc_local_key_invalid
+	rtneq SP_KEY_VALID_256
+	call sp_calc_sequence_256
+	branch sp_wait_pubkey_calc_256_done
+
+
+//BD1A3CCD:A6B89958:99B740EB:7B60FF4A:503F10D2:E3B3C974:385FC5A3:D4F6493F
+sp_debug_private_256:
+	arg mem_sc_private_key_256,contw
+        setsect 0,0x1abd
+        setsect 1,0x1b34f
+        setsect 2,0x19b8a
+        setsect 3,0x26562
+        istore 9,contw
+        setsect 0,0x340b7
+        setsect 1,0x1efa
+        setsect 2,0xaff6
+        setsect 3,0xfd41
+        istore 9,contw
+        setsect 0,0x3d210
+        setsect 1,0x26cf8
+        setsect 2,0x3874c
+        setsect 3,0x3157c
+        istore 9,contw
+        setsect 0,0x2d4a3
+        setsect 1,0x3d27d
+        setsect 2,0x3
+        istore 5,contw
+        rtn
+	
+
+sp_pubkey_calc_256:
+	fetch    1,mem_sc_local_key_invalid
+	rtnne SP_KEY_INVALID
+	fetch    1,mem_sc_calc
+	rtnne  SP_CALC_STANDBY
+	call init_memp_256
+	arg      mem_sc_private_key_256,contw 
+	force    15,queue
+	call     random_generator
+	random   pdata
+	rshift   pdata,pdata
+	istore   2,contw 
+	
+	fetch 1,mem_sp_debug_mode
+	ncall sp_debug_private_256,blank
+	
+	arg      mem_k_256,contw
+	arg      mem_sc_private_key_256,contr	
+	call     memcpy32 //mem_sp_private_key=>mem_k 
+
+	arg      mem_ax_256,contw
+	arg      mem_gx_256,contr
+	call     memcpy64 //mem_gx=>mem_ax 
+	
+	arg      mem_az_256,contw
+	call      clear_mem_256
+	jam      1,mem_az_256 //0=>mem_az 
+
+	call     eckp_calc_init_256
+	jam SP_CALC_PUBKEY_256,mem_sc_calc
+	rtn    
+
+sp_pubkey_generated_256:
+	arg      mem_sc_pubkey_local_x_256,contw
+	arg      mem_bx_256,contr
+	call     memcpy64   
+	jam      SP_KEY_VALID_256,mem_sc_local_key_invalid
+	jam      SP_CALC_STANDBY,mem_sc_calc
+	rtn
+	
+
+
+sp_dhkey_calc_256:
+	fetch    1,mem_sp_dhkey_invalid
+	rtnne  SP_KEY_INVALID
+	fetch    1,mem_sc_calc
+	rtnne  SP_CALC_STANDBY
+
+	arg      mem_k_256,contw
+	arg      mem_sc_private_key_256,contr	
+	call     memcpy32
+
+	arg      mem_ax_256,contw
+	arg      mem_le_pubkey_remote_x_256,contr
+	call     memcpy64
+
+	arg      mem_az_256,contw
+	call     clear_mem_256
+	jam      1,mem_az_256 //0=>mem_az 
+
+	call     eckp_calc_init_256
+	jam     SP_CALC_DHKEY_256,mem_sc_calc
+	rtn 
+
+
+sp_dhkey_generated_256:
+//	jam SP_FLAG_COMMIT,mem_sp_dh_ready
+	arg mem_le_dhkey_256,contw
+	arg mem_bx_256,contr
+	call memcpy32
+	jam SP_KEY_VALID_256,mem_sp_dhkey_invalid
+	jam SP_CALC_STANDBY,mem_sc_calc
+	rtn
+
+
+
+sp_calc_sequence_256:
+	fetch 1,mem_secure_connections_enable
+	rtn blank
+	fetch 1,mem_sc_calc
+	rtn blank
+	increase 0x80,pdata
+	store    1,mem_sc_calc
+	rtnbit1 7
+	fetch    2,mem_ec_loopc
+	branch   sp_calc_sequence_done_256,blank
+	branch   eckp_calc_256
+
+sp_calc_sequence_done_256:    
+	bpatchx patch22_6,mem_patch22
+	call ecunmapz_256
+	fetch 1,mem_sc_calc
+	beq  SP_CALC_PUBKEY_256,sp_pubkey_generated_256
+	beq  SP_CALC_DHKEY_256,sp_dhkey_generated_256
+	rtn
+
+
+eckp_calc_256:
+	call     ecdbl_256  
+	fetch    2,mem_ec_loopc
+	increase -1,pdata
+	store    2,mem_ec_loopc
+	arg      mem_k_256,contr
+	call     bn_testbit
+	rtn	true
+	branch     ecadd_256   
+
+eckp_calc_init_256:
+	bpatchx patch22_7,mem_patch22
+	setarg 256
+	store 2,mem_ec_loopc
+eckp_calc_init_256_1:    
+	fetch    2,mem_ec_loopc
+	rtn      blank
+	increase -1,pdata
+	store    2,mem_ec_loopc
+	arg      mem_k_256,contr
+	call     bn_testbit
+	branch eckp_calc_init_256_1,true
+	arg      mem_ax_256,contr
+	arg      mem_cx_256,contw
+	branch     memcpy96	
+
+
+ecunmapz_256:
+	arg mem_cz_256,rega
+	arg mem_t3_256,contw
+	call bn_invmod_256			/* t3 = 1/z */
+	arg mem_t3_256,rega
+	arg mem_t1_256,contw		
+	call bn_sqrmod_256			/* t1 = 1/z2 */
+	arg mem_cx_256,rega
+	arg mem_t1_256,regb
+	arg mem_bx_256,contw
+	call bn_mulmod_256
+	arg mem_t3_256,rega
+	arg mem_t1_256,regb
+	arg mem_t2_256,contw			
+	call bn_mulmod_256			/* t2 = 1/z3 */
+	arg mem_cy_256,rega
+	arg mem_t2_256,regb
+	arg mem_by_256,contw
+	branch bn_mulmod_256	
+	
+ecdbl_256:
+	arg mem_cz_256,rega
+	arg mem_t2_256,contw
+	call bn_sqrmod_256
+	arg mem_t2_256,rega
+	arg mem_t3_256,contw
+	call bn_sqrmod_256
+//call ice_break
+	arg mem_a_256,rega
+	arg mem_t3_256,regb
+	arg mem_t3_256,contw
+	call bn_mulmod_256		/* t3=a*z4	*/
+	arg mem_cx_256,rega
+	arg mem_t2_256,contw
+	call bn_sqrmod_256
+//call ice_break
+	arg mem_t2_256,contr
+	arg mem_t1_256,contw
+	call memcpy32
+	arg mem_t1_256,rega
+	call bn_lshiftmod_256
+	arg mem_t2_256,rega
+	arg mem_t1_256,regb
+	arg mem_t2_256,contw
+	call bn_addmod_256
+//call ice_break
+	arg mem_t2_256,rega
+	arg mem_t3_256,regb
+	arg mem_t2_256,contw
+	call bn_addmod_256		/* t2=3*x2 + z*z4		D  */
+//call ice_break
+	arg mem_cx_256,contr
+	arg mem_t1_256,contw
+	call memcpy32
+	arg mem_cy_256,rega
+	arg mem_t3_256,contw
+	call bn_sqrmod_256
+	arg mem_t1_256,rega
+	call bn_lshiftmod_256
+	arg mem_t1_256,rega
+	call bn_lshiftmod_256
+	arg mem_t1_256,rega		
+	arg mem_t3_256,regb
+	arg mem_t1_256,contw
+	call bn_mulmod_256		//S = 4X1Y1^2/* t1=4x*y2	B	*/
+	arg mem_t3_256,rega
+	arg mem_t0_256,contw
+	call bn_sqrmod_256
+	arg mem_t0_256,rega
+	call bn_lshiftmod_256
+	arg mem_t0_256,rega
+	call bn_lshiftmod_256		
+	arg mem_t0_256,rega		
+	call bn_lshiftmod_256	//T = 8Y1^4	/* t0=8*y4		C */
+	arg mem_cy_256,contr
+	arg mem_t3_256,contw
+	call memcpy32
+	arg mem_t3_256,rega
+	call bn_lshiftmod_256
+	arg mem_t3_256,rega
+	arg mem_cz_256,regb
+	arg mem_cz_256,contw
+	call bn_mulmod_256		//z = 2Y1Z1
+
+
+	arg mem_t2_256,rega
+	arg mem_t3_256,contw
+	call bn_sqrmod_256   // M ^2
+//call ice_break
+	arg mem_t3_256,rega
+	arg mem_t1_256,regb
+	arg mem_t3_256,contw
+	call bn_submod_256  // t2^2 - 4*cx *cy^2 
+	arg mem_t3_256,rega
+	arg mem_t1_256,regb
+	arg mem_cx_256,contw
+	call bn_submod_256   //X2
+	arg mem_t1_256,rega
+	arg mem_cx_256,regb
+	arg mem_t3_256,contw
+	call bn_submod_256   //S-X2
+	arg mem_t3_256,rega
+	arg mem_t2_256,regb
+	arg mem_t3_256,contw
+	call bn_mulmod_256	//M(S-X2)	
+	arg mem_t3_256,rega
+	arg mem_t0_256,regb
+	arg mem_cy_256,contw
+	branch bn_submod_256  //M(S-X2)-T Y2	
+
+ecadd_256:
+
+	arg mem_az_256,rega
+	arg mem_t7_256,contw
+	call bn_sqrmod_256
+	arg mem_cx_256,rega
+	arg mem_t7_256,regb
+	arg mem_t0_256,contw
+	call bn_mulmod_256		/* n1=t0=xa*zb2 U1 = X1Z0^2*/
+
+
+	arg mem_az_256,rega
+	arg mem_t7_256,regb
+	arg mem_t7_256,contw
+	call bn_mulmod_256	
+	arg mem_cy_256,rega
+	arg mem_t7_256,regb
+	arg mem_t1_256,contw
+	call bn_mulmod_256		/* n2=t1=ya*zb3   S1 = Y1Z0^3*/
+
+
+	arg mem_cz_256,rega
+	arg mem_t7_256,contw
+	call bn_sqrmod_256
+	arg mem_ax_256,rega
+	arg mem_t7_256,regb
+	arg mem_t2_256,contw
+	call bn_mulmod_256		/* n3=t2=xb*za2  U0 = X0Z1^2*/
+
+	arg mem_cz_256,rega
+	arg mem_t7_256,regb
+	arg mem_t7_256,contw
+	call bn_mulmod_256	
+	arg mem_ay_256,rega
+	arg mem_t7_256,regb
+	arg mem_t3_256,contw
+	call bn_mulmod_256		/* n4=t3=yb*za3 S0 = Y0Z1^3*/
+
+
+//	arg mem_t0_256,rega
+//	arg mem_t2_256,regb
+	arg mem_t0_256,regb
+	arg mem_t2_256,rega
+	arg mem_t7_256,contw
+	call bn_submod_256		/* n5=t7=n1-n3=t0-t2   W=U1-U0*/
+	arg mem_t0_256,rega
+	arg mem_t2_256,regb
+	arg mem_t0_256,contw
+	call bn_addmod_256		/* n7=t0=n1+n3=t0+t2    T=U1+U0 */
+//	arg mem_t1_256,rega
+//	arg mem_t3_256,regb
+	arg mem_t1_256,regb
+	arg mem_t3_256,rega
+	arg mem_t2_256,contw
+	call bn_submod_256		/* n6=t2=n2-n4=t1-t3  S1-S0 */
+	arg mem_t1_256,rega
+	arg mem_t3_256,regb
+	arg mem_t1_256,contw
+	call bn_addmod_256		/* n8=t1=n2+n4=t1+t3 M=S1+S0*/
+	arg mem_t1_256,rega
+	arg mem_t7_256,regb
+	arg mem_t1_256,contw
+	call bn_mulmod_256		/* t1=n8*n5     MW */
+	arg mem_cz_256,rega
+	arg mem_az_256,regb
+	arg mem_t3_256,contw
+	call bn_mulmod_256	      //Z0Z1
+	arg mem_t3_256,rega
+	arg mem_t7_256,regb
+	arg mem_cz_256,contw
+	call bn_mulmod_256		/* z=za*zb*n5   Z0Z1W */
+
+	arg mem_t7_256,rega
+	arg mem_t7_256,contw
+	call bn_sqrmod_256		/* t7=n5^2 */
+	arg mem_t7_256,rega
+	arg mem_t0_256,regb
+	arg mem_t3_256,contw
+	call bn_mulmod_256		/* t3=n5^2*n7 */
+	arg mem_t7_256,rega
+	arg mem_t1_256,regb
+	arg mem_t1_256,contw
+	call bn_mulmod_256		/* t1=n8*n5^3 */
+	arg mem_t2_256,rega
+	arg mem_cx_256,contw
+	call bn_sqrmod_256		
+	arg mem_cx_256,rega
+	arg mem_t3_256,regb
+	arg mem_cx_256,contw
+	call bn_submod_256		/* x=n6^2-n5^2*n7 */
+	arg mem_cx_256,contr
+	arg mem_t7_256,contw
+	call memcpy32
+	arg mem_t7_256,rega
+	call bn_lshiftmod_256		/* t7=2*x */
+	arg mem_t3_256,rega
+	arg mem_t7_256,regb
+	arg mem_t3_256,contw
+	call bn_submod_256		/* t3=n9 */
+	arg mem_t3_256,rega
+	arg mem_t2_256,regb
+	arg mem_t2_256,contw
+	call bn_mulmod_256		/* t2=n9*n6 */
+	arg mem_t2_256,rega
+	arg mem_t1_256,regb
+	arg mem_cy_256,contw
+	call bn_submod_256	
+	arg mem_cy_256,rega
+	arg mem_p_256,regb
+	arg mem_cy_256,contw
+	force 0,regc
+	fetch 1,mem_cy_256
+	isolate1 0,pdata
+	call bn_add_256,true
+	copy regc,alarm
+	arg mem_cy_256,rega
+	call bn_rshift_256
+	fetch 1,mem_cy5_256
+	isolate1 0,alarm
+	setflag true,7,pdata
+	store 1,mem_cy5_256
+	rtn	
+
+bn_invmod_256:
+	copy contw,timeup					 
+	arg mem_tmp0_256,contw			 
+	call clear_mem_256
+	force 0,pdata
+//	store 4,mem_tmp52
+	store 4,mem_t2_256
+	jam 1,mem_tmp0_256      //y1
+	arg mem_tmp1_256,contw	//y2			 
+	call clear_mem_512      
+	arg mem_p_256,contr
+	arg mem_tmp2_256,contw		//j		 
+	call memcpy32
+	copy rega,contr
+	arg mem_tmp3_256,contw		//i		 
+	call memcpy32
+	
+//	arg mem_tmp22,rega
+//	arg mem_tmp32,regb
+//	call p_bn_bigeq_256
+//	branch assert,positive
+bn_invmod_256_2:	
+	arg mem_tmp3_256,contr
+	call bn_eq_zero_256
+	branch bn_invmod_256_0,blank
+//call ice_break    	
+//fetch 1,0x4ffe
+//increase 1,pdata
+//store 1,0x4ffe
+	arg mem_tmp3_256,rega
+	arg mem_tmp0_256,regb
+	call bn_rshifteven_256
+	arg mem_tmp2_256,rega
+	arg mem_tmp1_256,regb
+	call bn_rshifteven_256
+	
+	arg mem_tmp3_256,rega
+	arg mem_tmp2_256,regb
+	call bn_bigeq_256
+	branch bn_invmod_256_1,positive
+	arg mem_tmp2_256,rega
+	arg mem_tmp3_256,regb
+	copy rega,contw
+	call bn_sub_256
+	arg mem_tmp0_256,rega
+	arg mem_tmp1_256,regb
+	copy regb,contw
+	call bn_add_256
+	ifetch 1,rega
+	iadd regc,regc
+	ifetch 1,regb
+	iadd regc,pdata
+	istore 1,regb
+	branch bn_invmod_256_2
+bn_invmod_256_1:
+	arg mem_tmp3_256,rega
+	arg mem_tmp2_256,regb
+	copy rega,contw
+	call bn_sub_256
+	arg mem_tmp1_256,rega
+	arg mem_tmp0_256,regb
+	copy regb,contw
+	call bn_add_256
+	ifetch 1,rega
+	iadd regc,regc
+	ifetch 1,regb
+	iadd regc,pdata
+	istore 1,regb
+	branch bn_invmod_256_2
+bn_invmod_256_0:
+//call ice_break
+	arg mem_tmp1_256,rega
+	copy timeup,contw
+	call  bn_p256mod
+//call ice_break
+	arg mem_p_256,rega
+	copy timeup,regb
+	copy timeup,contw
+	branch bn_submod_256
+
+
+bn_mulmod_256:
+	copy contw,timeup					/* save result ptr */
+	
+	force 0,regext_index
+	
+	arg mem_tmp1_256,contw
+	call clear_mem_512
+	arg mem_regext,contw
+	call clear_mem_512
+//	jam 0,mem_regext_index
+
+//	arg mem_tmp12,contw
+	copy rega,contr
+//	force 0,regext_index
+	jam 0,mem_regext
+	setarg 0
+	call bn_load_mem
+	copy regb,contr
+	call bn_load_256
+//	force 0,regb
+//	jam 0,mem_regb
+	force 0,queue
+	arg mem_tmp1_256,contw	
+bn_mulmod_256_1:	
+//	copy regb,pdata
+//	store 1,
+	arg mem_regext,temp
+	copy queue,regb
+	lshift2 regb,pdata
+//	lshift4 pdata,pdata
+	iadd temp,regb	
+	force 0,temp
+	force 0,regc
+bn_mulmod_256_0:
+//	copy contw,pdata
+//	store 2,mem_contw
+//call ice_break
+//	copy pdata,contw
+	ifetch 4,contw					/* d[i+j] */
+	iforce rega
+//	copy regb,regext_index
+//	deposit regext
+	ifetch 4,regb
+	copy regc,regext_index
+	imul32 regext,pdata
+	iadd rega,pdata					/* uv = a[i]*b[j] + d[i+j] */
+	iadd temp,pdata					/* uv += u */
+	istore 4,contw					/* ->d[i+j] */
+	rshift32 pdata,temp				/* temp = u = uv >> 32 */
+	increase 1,regc
+	compare 8,regc,0xff
+	nbranch bn_mulmod_256_0,true
+//call ice_break
+	deposit temp
+	istore 4,contw					/* d[i + 12] = u */
+	increase -32,contw
+//	fetch 1,mem_regb
+//	copy pdata,regb
+	increase 1,queue
+	compare 8,queue,0xff
+	nbranch bn_mulmod_256_1,true
+	arg mem_tmp1_256,rega
+	copy timeup,contw
+	branch bn_p256mod
+
+bn_p256mod:
+	bpatchx patch23_0,mem_patch23
+	copy contw,timeup				/* save result ptr */
+	copy rega,alarm				/* temp save rega */
+	arg mem_tmp2_256,regb
+	copy regb,contw
+	call memset0_4	
+	istore 8,contw
+	add rega,44,contr
+	call memcpy8
+	call memcpy12
+	copy regb,rega
+	call  bn_lshiftmod_256 //2S1
+	arg mem_tmp2_256,regb
+	copy alarm,rega   
+	copy timeup,contw
+	call bn_addmod_256 //T+2S1
+//call ice_break	
+	arg mem_tmp2_256,regb
+	copy regb,contw
+	call memset0_4	
+	istore 8,contw
+	add alarm,48,contr
+	call memcpy16
+	call memset0_4	
+	copy regb,rega
+	call  bn_lshiftmod_256 //2S2
+//call ice_break	
+//	arg 0,regb
+
+	arg mem_tmp2_256,regb
+	copy timeup,rega   
+	copy rega,contw	
+	call bn_addmod_256  //+2S2
+//call ice_break	
+//	arg 0,regb
+		
+	arg mem_tmp2_256,regb
+	copy regb,contw
+	add alarm,32,contr
+	call memcpy12
+	call memset0_4	
+	istore 8,contw
+	add alarm,56,contr
+	call memcpy8
+	copy timeup,rega
+	copy rega,contw
+	call bn_addmod_256 //+S3
+//call ice_break	
+//	arg 0,regb
+
+	arg mem_tmp2_256,regb
+	copy regb,contw
+	add alarm,36,contr
+	call memcpy12
+	add alarm,52,contr	
+	call memcpy12
+	add alarm,52,contr
+	call memcpy4
+	add alarm,32,contr
+	call memcpy4
+	copy timeup,rega
+	copy rega,contw
+	call bn_addmod_256 //+S4	
+//call ice_break	
+//	arg 1,regb
+	arg mem_tmp2_256,regb
+	copy regb,contw
+	add alarm,44,contr
+	call memcpy12
+	call memset0_4	
+	istore 8,contw
+	add alarm,32,contr
+	call memcpy4
+	add alarm,40,contr
+	call memcpy4
+	copy timeup,rega
+	copy rega,contw
+	call bn_submod_256 //-D1	
+//call ice_break	
+//	arg 2,regb
+	arg mem_tmp2_256,regb
+	copy regb,contw
+	add alarm,48,contr
+	call memcpy8
+	call memcpy8
+	force 0,pdata
+	istore 8,contw
+	add alarm,36,contr
+	call memcpy4
+	add alarm,44,contr
+	call memcpy4
+	copy timeup,rega
+	copy rega,contw
+	call bn_submod_256 //-D2	
+//call ice_break	
+//	arg 3,regb
+	arg mem_tmp2_256,regb
+	copy regb,contw
+	add alarm,52,contr
+	call memcpy12
+	add alarm,32,contr
+	call memcpy12
+	call memset0_4	
+	add alarm,48,contr
+	call memcpy4
+	copy timeup,rega
+	copy rega,contw
+	call bn_submod_256 //-D3
+//call ice_break	
+//	arg 4,regb
+	arg mem_tmp2_256,regb
+	copy regb,contw
+	add alarm,56,contr
+	call memcpy8
+	call memset0_4	
+	add alarm,36,contr
+	call memcpy12
+	call memset0_4	
+	add alarm,52,contr
+	call memcpy4
+	copy timeup,rega
+	copy rega,contw
+	branch  bn_submod_256 //-D4	
+
+
+bn_load_mem:
+	force 32,loopcnt
+	arg mem_regext,contw
+	iadd contw,contw
+	branch memcpy
+
+bn_load_256:
+	force 8,loopcnt
+	branch bn_load_0
+
+bn_sqrmod_256:
+	copy rega,regb
+	branch bn_mulmod_256
+
+bn_add_256:
+	force 8,loopcnt
+ 	branch bn_add+1
+
+bn_addmod_256:
+	call bn_add_256
+	copy contw,rega
+	branch bn_lshiftmod_ismod_256
+
+bn_lshiftmod_256:
+	call bn_lshift_256
+bn_lshiftmod_ismod_256:	
+	isolate1 0,regc
+	branch bn_lshiftmod_p_256,true
+	arg mem_p_256,regb
+	copy rega,regc
+	increase -32,rega
+	call bn_bigeq_256
+	nrtn positive
+	copy regc,rega
+	branch sub_p2_256
+	
+bn_lshiftmod_p_256:
+	call sub_p2_256
+//	nrtn true
+	copy rega,regc
+	increase -32,rega
+	arg mem_p_256,regb
+	call bn_bigeq_256
+	nrtn positive
+	copy regc,rega
+	branch sub_p2_256
+		
+	
+sub_p2_256:
+	increase -32,rega
+	arg mem_p_256,regb
+	copy rega,contw
+	branch bn_sub_256
+	
+
+
+	
+bn_submod_256:
+	call bn_sub_256
+//	isolate1 0,regc
+	branch  bn_submod_256_np,true
+//	copy rega,regc
+//	increase -32,rega
+	add contw,-32,rega
+	arg mem_p_256,regb
+	call bn_bigeq_256
+	nrtn positive
+	arg mem_p_256,regb
+	add contw,-32,rega
+//	copy regc,rega
+	copy rega,contw
+	branch  bn_sub_256
+bn_submod_256_np:	
+	add contw,-32,rega
+	arg mem_p_256,regb
+	copy rega,contw
+	call bn_add_256
+//	isolate1 0,regc
+	rtn true
+	add contw,-32,rega
+	arg mem_p_256,regb
+	copy rega,contw
+	branch bn_add_256	
+
+
+ 
+bn_sub_256:
+	force 8,loopcnt
+	branch bn_sub+1
+
+bn_rshift_256:
+	force 8,loopcnt
+	increase 28,rega
+	branch bn_rshift
+
+bn_lshift_256:
+	force 8,loopcnt
+	force 0,regc
+	branch bn_lshift_0
+
+bn_bigeq_256:
+	force 8,loopcnt
+	increase 28,rega
+	increase 28,regb
+	branch bn_bigeq_0
+
+
+bn_eq_zero_256:
+	ifetch 8,contr
+	nrtn blank
+	branch bn_eq_zero
+
+
+
+	
+bn_rshifteven_256:
+	copy rega,alarm
+bn_rshifteven_256_1:
+	copy alarm,rega
+	ifetch 1,rega
+	isolate1 0,pdata
+	rtn true
+	call bn_rshift_256
+	ifetch 1,regb
+	isolate0 0,pdata
+	branch bn_rshifteven_256_0,true
+	arg mem_p_256,rega
+	copy regb,contw
+	call bn_add_256
+	ifetch 1,regb
+	iadd regc,pdata
+	istore 1,regb						 
+	increase -32,regb
+bn_rshifteven_256_0:
+	add regb,32,rega
+	force 9,loopcnt
+	call bn_rshift
+	branch bn_rshifteven_256_1		
+
+endif
+
Index: program/ui.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/ui.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/ui.prog	(working copy)
@@ -0,0 +1,655 @@
+ui_init:
+	rtn wake
+	call lpm_disable_exen_output
+	call ui_button_init
+	call ui_timer_init
+	branch ui_led_init_global
+
+ui_dispatch:
+	call ui_led_dispatch
+	branch ui_timer_check
+	
+ui_button_init:
+	fetch 1,mem_ui_button_gpio
+	rtneq UI_BUTTON_GPIO_DISABLE
+	iforce temp
+	call gpio_config_output
+	fetcht 1,mem_ui_button_gpio
+	call gpio_out_inactive
+	nop 100
+	fetcht 1,mem_ui_button_gpio
+	call gpio_config_input
+	branch ui_button_polling
+
+
+	
+ui_button_polling:
+	bpatchx patch23_1,mem_patch23
+	fetch 1,mem_ui_button_gpio
+	rtneq UI_BUTTON_GPIO_DISABLE
+	copy pdata,temp
+	call gpio_get_bit
+	nbranch ui_button_up,true
+	//fall through
+ui_button_down:
+	call ui_button_check_long_press
+	fetch 2,mem_ui_state_map
+	set1 UI_STATE_BTN_DOWN,pdata
+	store 2,mem_ui_state_map
+	fetch 1,mem_ui_button_last_state
+	rtneq UI_BUTTON_STATE_DOWN
+	jam UI_BUTTON_STATE_DOWN,mem_ui_button_last_state
+	//Down Edge
+	fetch 1,mem_ui_button_timeout
+	store 1,mem_ui_button_timer //start long press timer
+	call lpm_button_get_wake_lock
+	jam BT_EVT_BUTTON_DOWN,mem_fifo_temp
+	branch ui_ipc_send_event
+ui_button_up:
+	fetch 2,mem_ui_state_map
+	set0 UI_STATE_BTN_DOWN,pdata
+	store 2,mem_ui_state_map
+	fetch 1,mem_ui_button_last_state
+	rtneq UI_BUTTON_STATE_UP
+	jam UI_BUTTON_STATE_UP,mem_ui_button_last_state
+	//Up Edge
+	jam 0,mem_ui_button_timer//stop long press timer
+	call lpm_button_clean_wake_lock
+	jam BT_EVT_BUTTON_UP,mem_fifo_temp
+	branch ui_ipc_send_event
+
+ui_button_check_long_press:
+	fetch 1,mem_ui_button_timer
+	rtn blank
+	increase -1,pdata
+	store 1,mem_ui_button_timer
+	nrtn blank
+	//Long Press
+	jam BT_EVT_BUTTON_LONG_PRESSED,mem_fifo_temp
+	branch ui_ipc_send_event
+
+lpm_button_get_wake_lock:
+	arg wake_lock_button,queue
+	branch lpm_get_wake_lock
+	
+lpm_button_clean_wake_lock:
+	arg wake_lock_button,queue
+	branch lpm_put_wake_lock
+
+
+
+/***********************ui led function****************************/
+/******************
+led function
+
+ui_led_init_global
+ui_led_on_global
+
+ui_led_off_global
+//input:rega :struct number
+ui_led_blink_start_global
+
+//input:rega :struct number
+//contr: the point that want to set led style address
+ui_led_set_style_global
+
+******************/
+//input:rega :struct number
+//output:regb :current strutct starting pointer
+calc_curr_struct_prt:
+	bpatchx patch23_2,mem_patch23
+	fetch 2,mem_ui_led_struct_ptr
+	mul32 rega,LED_OFFSET_LENGTH,regb
+	iadd regb,regb
+	rtn
+
+
+ui_led_init_global:
+	fetch 1,mem_ui_led_struct_num
+	rtn blank
+	copy pdata,loopcnt
+	fetch 2,mem_ui_led_struct_ptr
+	copy pdata,regb
+ui_led_init_loop:
+	add regb,LED_OFFSET_LED_GPIO,regc
+	ifetcht 1,regc
+	call ui_led_init_set
+	increase LED_OFFSET_LENGTH,regb
+	loop ui_led_init_loop
+	rtn
+
+//mem_ui_led_init_state_set =0,set init off else set init on
+ui_led_init_set:
+	fetch 1,mem_ui_led_init_state_set
+	branch gpio_out_inactive,blank
+	branch gpio_out_active
+	
+//input:rega :struct number
+ui_led_on_global:
+	call calc_curr_struct_prt
+	setarg UI_LED_STATE_LIGHTING
+	istore 1,regb
+	call ui_led_stop_timer
+	branch ui_led_on_static
+
+	
+//input:rega :struct number
+ui_led_blink_stop_global:
+ui_led_off_global:
+	
+	call calc_curr_struct_prt
+	setarg UI_LED_STATE_DARKING
+	istore 1,regb
+	
+	call ui_led_stop_timer
+	branch ui_led_off_static
+
+
+//input:rega :struct number
+ui_led_blink_start_global:
+	call calc_curr_struct_prt
+	setarg UI_LED_STATE_BLINK_START
+	istore 1,regb
+	setarg LED_INFINITE_FLASH_NUM
+	istore 1,contw
+	branch ui_led_off_static
+
+
+//input:rega :struct number
+//REGC: the point that want to set led style address
+ui_led_set_style_global:
+	call calc_curr_struct_prt
+	arg LED_OFFSET_LENGTH,loopcnt
+	copy regc,contr
+	copy regb,contw
+	branch memcpy_fast
+
+
+
+ui_led_dispatch:
+	fetch 1,mem_ui_led_struct_num
+	rtn blank
+	arg 0,rega
+ui_led_blink_polling:
+	call ui_led_change_style_by_type
+	increase 1,rega
+	fetch 1,mem_ui_led_struct_num
+	isub rega,null
+	rtn zero
+	branch ui_led_blink_polling
+
+
+ui_led_off_static:
+	add regb,LED_OFFSET_LED_GPIO,regc
+	ifetcht 1,regc
+	branch gpio_out_inactive
+
+
+ui_led_on_static:
+	add regb,LED_OFFSET_LED_GPIO,regc
+	ifetcht 1,regc
+	branch gpio_out_active
+
+
+//input:rega :struct number
+ui_led_change_style_by_type:
+	add rega,ui_led_blink,queue
+	call timer_check
+	nrtn blank			//timer out
+	
+	call calc_curr_struct_prt
+
+	ifetch 1,regb			//led type
+
+	beq UI_LED_STATE_LIGHTING,ui_led_on_static
+	beq UI_LED_STATE_DARKING,ui_led_off_static
+	beq UI_LED_STATE_BLINK_STOP,ui_led_off_static
+	beq UI_LED_STATE_BLINK_DARKING,ui_led_blink_state_darking
+ui_led_blink_state_lighting:
+	call ui_led_on_static
+	add regb,LED_OFFSET_CB_LEDON,regc
+	call push_stack
+	ifetch 2,regc
+	call callback_func
+	call pop_stack
+	setarg UI_LED_STATE_BLINK_DARKING
+	istore 1,regb
+	add regb,LED_OFFSET_ON_TIME,regc
+	ifetch 2,regc
+	branch ui_led_blink_timer_start
+	
+
+ui_led_blink_state_darking:
+	call ui_led_off_static
+	add regb,LED_OFFSET_CB_LEDOFF,regc
+	call push_stack
+	ifetch 2,regc
+	call callback_func
+	call pop_stack
+	
+	add regb,LED_OFFSET_BLINK_COUNT,regc
+	ifetch 1,regc
+	beq LED_INFINITE_FLASH_NUM,ui_led_blink_infinite
+	increase -1,pdata
+	istore 1,regc
+	branch ui_led_blink_stop_global,blank		//End of flicker
+ui_led_blink_infinite:
+	setarg UI_LED_STATE_BLINK_LIGHTING
+	istore 1,regb
+	add regb,LED_OFFSET_OFF_TIME,regc
+	ifetch 2,regc
+ui_led_blink_timer_start:
+	add rega,ui_led_blink,queue
+	branch timer_init
+
+ui_led_stop_timer:
+	setarg 0
+	branch ui_led_blink_timer_start
+
+/***********************ui led function ending****************************/
+
+
+
+ui_timer_timeout:
+	setarg 0x1000
+	lshift16 pdata,pdata
+	iadd regb,regb
+	rtn
+	
+ui_timer_check:
+	bpatchx patch23_3,mem_patch23
+	arg 0,rega
+	fetcht 4,mem_ui_timer_last_btclk
+	copy clkn_bt,regb
+	copy regb,pdata
+	isub temp,null
+	ncall ui_timer_timeout,positive
+ui_timer_check_loop:
+	copy regb,pdata
+	increase 160,temp    //320btclk = 100ms
+	increase 160,temp
+	isub temp,null
+	nbranch ui_timer_check_end,positive
+	increase 1,rega   //increase 1 every 100ms count
+	and rega,0x0f,pdata
+	nbranch ui_timer_check_loop,blank
+	arg 0,rega  //reset timer if it's longer than 1.5s between 2 checks
+	call ui_timer_check_send_evt
+ui_timer_init:
+	copy clkn_bt,pdata
+	store 4,mem_ui_timer_last_btclk
+	rtn
+ui_timer_check_end:
+	copy rega,pdata
+	rtn blank
+	increase -160,temp    //320btclk = 100ms
+	increase -160,temp
+	set0 28,temp
+	storet 4,mem_ui_timer_last_btclk
+ui_timer_check_send_evt:
+	branch app_evt_timer
+
+	
+
+//**********************************************************//
+//************UI Inter-Processor Communication*******//
+//**********************************************************//
+ui_ipc_get_lock:
+	jam 1,mem_ipc_lock_bt
+ui_ipc_get_lock_wait:
+	fetch 1,mem_ipc_lock_c51
+	nbranch ui_ipc_get_lock_wait,blank
+	rtn
+	
+ui_ipc_put_lock:
+	jam 0,mem_ipc_lock_bt
+	rtn
+	
+
+	
+ui_ipc_send_event:
+	bpatchx patch23_4,mem_patch23
+	fetch 1,mem_device_option
+	beq DVC_OP_KEYBOARD,keyboard_ui_ipc_send_event
+	call ui_ipc_get_lock
+	copy rega,pdata
+	store 4,mem_rega
+	arg mem_ipc_fifo_bt2c51,rega
+	call fifo_in
+	fetch 4,mem_rega
+	copy pdata,rega
+	branch ui_ipc_put_lock
+
+ui_ipc_send_cmd:
+	bpatchx patch23_5,mem_patch23
+	call ui_ipc_get_lock
+	copy rega,pdata
+	store 4,mem_rega	
+	arg mem_ipc_fifo_c512bt,rega
+	call fifo_in
+	fetch 4,mem_rega
+	copy pdata,rega	
+	branch ui_ipc_put_lock
+
+ui_ipc_clean_all_fifo:
+	setarg 0
+	store UTIL_FIFO_LEN,mem_ipc_fifo_c512bt
+	store UTIL_FIFO_LEN,mem_ipc_fifo_bt2c51
+	rtn
+	
+check_51cmd:
+	bpatchx patch23_6,mem_patch23
+	fetch 1,mem_hci_cmd
+	nrtn blank
+	arg mem_ipc_fifo_c512bt,rega
+	call fifo_is_empty
+	rtn blank
+	jam IPC_CONTINUE_PROCESS,mem_ipc_skip_continue_proc
+	call check_51cmd_once
+	fetch 1,mem_ipc_skip_continue_proc
+	branch check_51cmd,blank
+	rtn
+
+check_51cmd_once:
+	call ui_ipc_get_lock
+	arg mem_ipc_fifo_c512bt,rega
+	call fifo_out
+	copy pdata,temp
+	call ui_ipc_put_lock
+	bpatchx patch23_7,mem_patch23
+	copy temp,pdata
+	rtn blank
+	beq BT_CMD_START_ADV,check_51cmd_adv
+	beq BT_CMD_STOP_ADV,check_51cmd_stop_adv
+	beq BT_CMD_START_DIRECT_ADV,check_51cmd_direct_adv
+	beq BT_CMD_STOP_DIRECT_ADV,check_51cmd_stop_direct_adv
+	beq BT_CMD_LED_OFF,check_51cmd_led_off
+	beq BT_CMD_LED_ON,check_51cmd_led_on
+	beq BT_CMD_LED_BLINK,check_51cmd_led_start_blink
+	beq BT_CMD_LE_START_CONN,check_51cmd_le_start_con
+	beq BT_CMD_LE_START_SCAN,check_51cmd_start_scan
+	beq BT_CMD_LE_STOP_SCAN,check_51cmd_stop_scan
+	beq BT_CMD_ENTER_HIBERNATE,check_51cmd_hibernate
+	//context related, process in context
+	store 1,mem_fifo_temp
+//	call lmo_fifo_check
+//	nbranch check_51cmd_restore,blank  //process this cmd next time while lmo fifo is full
+check_51cmd_once_continue:
+	fetch 1,mem_fifo_temp
+	bmark0 mark_context,check_51cmd_check_idle
+	bpatchx patch24_0,mem_patch24
+	fetch 1,mem_fifo_temp
+	beq BT_CMD_LE_DISCONNECT,check_51cmd_le_disconnect
+	beq BT_CMD_LE_SMP_SECURITY_REQUEST,check_51cmd_le_smp_sec_req
+	beq BT_CMD_LE_UPDATE_CONN,check_51cmd_ble_update_connect_param
+	beq BT_CMD_STORE_RECONN_INFO_LE,eeprom_store_le_reconn_info
+	rtn
+
+check_51cmd_check_idle:
+	store 1,mem_fifo_temp
+  	call context_check_idle
+	branch check_51cmd_restore,zero
+	call context_search_plap
+	nrtn zero
+check_51cmd_restore:
+	jam IPC_SKIP_CONTINUE_PROCESS,mem_ipc_skip_continue_proc
+	branch ui_ipc_send_cmd
+
+  
+ /******************** 51COMMAND*********************/
+
+
+//command opcode 0x13
+check_51cmd_adv:
+	jam ON,mem_le_adv_enable
+	jam ADV_IND,mem_le_adv_type
+	fetch 2,mem_ui_state_map
+	set1 UI_STATE_BLE_ADV,pdata
+	store 2,mem_ui_state_map
+	rtn
+
+
+//command opcode 0x14
+check_51cmd_stop_adv:
+	fetch 2,mem_ui_state_map
+	set0 UI_STATE_BLE_ADV,pdata
+	store 2,mem_ui_state_map
+	jam OFF,mem_le_adv_enable
+	rtn
+
+
+//command opcode 0x15
+check_51cmd_direct_adv:
+	jam ON,mem_le_adv_enable
+	jam ADV_DIRECT_IND,mem_le_adv_type
+	fetch 2,mem_ui_state_map
+	set1 UI_STATE_BLE_ADV,pdata
+	store 2,mem_ui_state_map
+	rtn
+
+
+//command opcode 0x16
+check_51cmd_stop_direct_adv:
+	fetch 2,mem_ui_state_map
+	set0 UI_STATE_BLE_ADV,pdata
+	store 2,mem_ui_state_map
+	jam OFF,mem_le_adv_enable
+	rtn
+
+
+//command opcode 0x17
+check_51cmd_le_disconnect:
+	setarg 20 // 100ms
+	store 2,mem_le_superto
+	store 2,mem_le_init_superto
+	branch le_send_terminate_ind_user_terminated
+
+
+//command opcode 0x18
+check_51cmd_ble_update_connect_param:
+	branch le_l2cap_tx_update_req
+
+
+//command opcode 19
+check_51cmd_led_off:
+	arg 0,rega
+	branch ui_led_off_global
+
+
+//command opcode 20
+check_51cmd_led_on:
+	arg 0,rega
+	branch ui_led_on_global
+
+
+//command opcode 21
+check_51cmd_led_start_blink:
+	arg 0,rega
+	call calc_curr_struct_prt
+	ifetch 1,regb
+	beq UI_LED_STATE_BLINK_START,check_51cmd_led_start_blink_in_blink
+	beq UI_LED_STATE_BLINK_LIGHTING,check_51cmd_led_start_blink_in_blink
+	beq UI_LED_STATE_BLINK_DARKING,check_51cmd_led_start_blink_in_blink
+	branch ui_led_blink_start_global
+
+check_51cmd_led_start_blink_in_blink:
+	ifetch 1,contr
+	rtneq LED_INFINITE_FLASH_NUM
+	branch ui_led_blink_start_global
+
+
+//command opcode 0x22
+check_51cmd_le_start_con:
+	jam ON,mem_le_scan_enable
+	jam hci_cmd_le_create_conn,mem_hci_cmd
+//	fetch 6,mem_app_peer_addr
+//	store 6,mem_le_conn_peer_addr
+	rtn
+
+
+//command opcode 0x23
+check_51cmd_start_scan:
+	jam ON,mem_le_scan_enable
+	rtn
+
+
+//command opcode 0x24
+check_51cmd_stop_scan:
+	jam OFF,mem_le_scan_enable
+	jam 0,mem_hci_cmd
+	rtn
+
+
+//command opcode 0x25
+check_51cmd_hibernate:
+	fetch 2,mem_cb_before_hibernate
+	call callback_func
+	fetch 1,mem_ui_button_gpio
+	beq UI_BUTTON_GPIO_DISABLE,check_51cmd_hibernate_btn_disabled
+	copy pdata,temp
+	call gpio_config_input
+check_51cmd_hibernate_btn_disabled:
+	call ui_ipc_clean_all_fifo
+	branch lpm_hibernate	
+
+
+//command opcode 0x27
+check_51cmd_le_smp_sec_req:
+	branch le_send_smp_security_request
+
+
+
+
+ui_check_paring_button:
+	fetch 1,mem_ui_state_map
+	rtnbit0 UI_STATE_BTN_DOWN
+	rtn
+
+
+
+///////////queue function////////////
+queue_init:
+	fetch 2,mem_queue_ptr
+	add pdata,QUEUE_OFFSET_CURR_NUM,contw
+	setarg 0
+	istore 3,contw
+	rtn
+	
+//input:rega:the address of the data to which you want to input queue
+//output:if user is disable,mean queue no have space
+queue_push:
+	bpatchx patch24_1,mem_patch24
+	call disable_user
+	call queue_full
+	rtn blank
+	fetch 2,mem_queue_ptr
+	add pdata,QUEUE_OFFSET_CURR_NUM,regb
+	ifetcht 1,regb
+	increase 1,temp
+	istoret 1,regb	//number add 
+	
+	ifetcht 1,pdata	//temp:each length
+	copy temp,loopcnt
+	add pdata,QUEUE_OFFSET_WRITE_PTR,regb
+	ifetch 1,regb
+	imul32 temp,pdata	//offset
+	iadd contr,contw
+	copy rega,contr
+calc_queue_next_ptr:
+	call memcpy
+	call queue_get_size
+	pincrease -1
+	ifetcht 1,regb
+	increase 1,temp
+	iand temp,temp
+	istoret 1,regb
+	branch enable_user
+
+
+//input:rega:the address of the data to which you want to output queue
+//output:if user is disable,mean queue no have data
+queue_pop:
+	bpatchx patch24_2,mem_patch24
+	call disable_user
+	call queue_empty
+	rtn blank
+	fetch 2,mem_queue_ptr
+	add pdata,QUEUE_OFFSET_CURR_NUM,regb
+	ifetcht 1,regb
+	increase -1,temp
+	istoret 1,regb
+	ifetcht 1,pdata		//each size
+	copy temp,loopcnt
+	add pdata,QUEUE_OFFSET_READ_PTR,regb
+	ifetch 1,regb
+	imul32 temp,pdata	//offset
+	iadd contr,contr
+	increase 1,contr
+	copy rega,contw
+	branch calc_queue_next_ptr
+
+
+//function:no pop element,only copy element in rega
+//input:rega:the address of the data to which you want to output queue
+//output:if user is disable,mean queue no have data
+//regb is new ptr
+queue_get_new_ele:
+	call disable_user
+	call queue_empty
+	rtn blank
+	fetch 2,mem_queue_ptr
+	ifetcht 1,pdata		//each size
+	copy temp,loopcnt
+	add pdata,QUEUE_OFFSET_READ_PTR,regb
+	ifetch 1,regb
+	imul32 temp,pdata	//offset
+	iadd contr,contr
+	increase 1,contr
+	copy contr,regb
+	copy rega,contw
+	call memcpy
+	branch enable_user
+
+queue_store_new_ele:
+	call disable_user
+	call queue_empty
+	rtn blank
+	fetch 2,mem_queue_ptr
+	ifetcht 1,pdata		//each size
+	copy temp,loopcnt
+	add pdata,QUEUE_OFFSET_READ_PTR,regb
+	ifetch 1,regb
+	imul32 temp,pdata	//offset
+	iadd contr,contr
+	add contr,2,contw
+	copy rega,contr
+	increase -1,loopcnt
+	call memcpy
+	branch enable_user
+
+//output:if blank is 1,mean queue is empty
+queue_empty:
+	fetch 2,mem_queue_ptr
+	add pdata,QUEUE_OFFSET_CURR_NUM,contr
+	ifetch 1,contr
+	rtn
+
+//output:if blank is 1,mean queue is full
+queue_full:
+	call queue_get_size
+	ifetcht 1,contr
+	isub temp,pdata
+	rtn
+
+//output:pdata is queue size
+queue_get_size:
+	fetch 2,mem_queue_ptr
+	add pdata,QUEUE_OFFSET_LENGTH,contr
+	ifetch 1,contr
+	rtn
+
+///////////queue function end////////////
+
+
+
+
Index: program/usb.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/usb.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/usb.prog	(working copy)
@@ -0,0 +1,1123 @@
+ ifdef COMPILE_USB
+
+usb_isr:
+	bpatchx patch24_3,mem_patch24
+	fetch 1,core_usb_status
+	isolate1 USB_STATUS_RESET,pdata
+	call usb_init_restart,true
+	fetch 2,core_usb_status
+	store 2,core_usb_status
+	store 2,mem_usb_status
+	call usb_nak_state_judge
+	call usb_rx
+	call usb0_tx
+	call usb_tx
+	branch usb_nak_state
+
+usb_init:
+	bpatchx patch24_4,mem_patch24
+	call enable_authrom
+	call usb_init_param
+usb_init_restart:
+	jam 0x00,core_usb_config
+ifdef SIM
+	nop 10
+else
+	nop 10000
+endif
+	jam 0x0,core_usb_hmode
+	fetch 2,core_clkoff
+	set0 CLOCK_OFF_USB,pdata
+	store 2,core_clkoff
+	jam 0x21,core_usb_epmap
+	jam 0x9d,core_usb_pupd
+	jam 0x3c,core_usb_config
+	setarg mem_usb_rxbuf
+	store 2,core_usb_rx_saddr
+	store 2,core_usb_rxptr
+	setarg mem_usb_rxbuf_end
+	store 2,core_usb_rx_eaddr
+	jam 0x80,core_usb_hmode
+	jam 0,core_usb_addr
+	jam 0xff,core_usb_status
+	setarg mem_usb_clear_mem_end
+	arg mem_usb_clear_mem_start,contw
+	isub contw,loopcnt
+	branch clear_mem
+	
+usb_offline_check_init:
+	fetcht 1,mem_usb_offline_check_gpio
+	branch gpio_config_input
+usb_offline_state:
+	fetch 1,mem_usb_device_enumeration_endflag
+	rtn blank
+	fetcht 1,mem_usb_offline_check_gpio
+	call gpio_get_bit
+	branch usb_init_restart,true
+	rtn
+
+usb_init_param:
+	jam DEV_DEFAULT,mem_usb0_state
+	setarg 0x0
+	store 1,mem_remain
+	store 2,mem_usb_zero_packet
+	pincrease 1
+	store 2,mem_usb_ones_packet
+	pincrease 1
+	store 2,mem_usb_two_packet
+	arg mem_string0,contw
+	setarg 0x030404
+	istore 3,contw
+	setarg 0x0409
+	istore 2,contw
+	arg mem_string1,contw
+	setsect 0,0x15906
+	setsect 1,0x210d2
+	setsect 2,0x10494
+	setsect 3,0x1
+	istore 9,contw
+	arg mem_string2,contw
+	setsect 0,0x1570f
+	setsect 1,0x15c9a
+	setsect 2,0x256c6
+	setsect 3,0x1cdcd
+	istore 9,contw
+	setsect 0,0x14420
+	setsect 1,0x25d99
+	setsect 2,0x25636
+	setsect 3,0x1
+	istore 7,contw
+	arg mem_string3,contw
+	setsect 0,0x1620a
+	setsect 1,0xc8c
+	setsect 2,0x30333
+	setsect 3,0xc0c0
+	istore 9,contw
+	setsect 0,0x3130
+	istore 2,contw
+	setarg USB_KBDATA_VENDOR_DEFINE_ADDR
+	store 2,mem_hidreportdesc_kb
+	setarg USB_MSDATA_ADDR
+	store 2,mem_hidreportdesc_m
+	arg USB_DEVICEDATA_ADDR,contr
+	arg mem_devicedesc,contw
+	arg 19,loopcnt
+	call memcpy	
+	arg USB_CONFDATA_ADDR,contr
+	arg mem_confdesc,contw
+	arg 60,loopcnt
+	call memcpy
+usb_config_cb:
+	fetch 2,mem_cb_usb_config
+	branch callback_func
+
+usb_tx_interval_config:
+	fetch 1,mem_usb_tx_interval
+	rtn blank
+	store 1,mem_confdesc+34
+	store 1,mem_confdesc+59
+	rtn
+
+usb_nak_state:
+	arg USB_TIMER_NAK,queue
+	call timer_check
+	nrtn blank
+	fetch 1 ,mem_usb_wakestate_onetime_flag
+	nrtn blank
+	fetch 1,mem_usb_device_enumeration_endflag
+	ncall usb_mac_wakeup_judge,blank
+	rtn
+
+usb_nak_state_judge:
+	fetch 1,mem_usb_status
+	bbit1 USB_STATUS_NAK,usb_nak_state_timer_init
+	rtn
+	
+usb_nak_state_timer_init:
+	call usb0_attached_state_judge
+	call timer_reinit
+	setarg TIMER_NAK_DELAY
+	arg USB_TIMER_NAK,queue
+	branch timer_init
+	
+usb0_attached_state_judge:
+	fetch 1,mem_usb_state
+	bne USB_CONNECTED,usb_clear_halt_dispose
+	jam 0,mem_usb_wakestate_onetime_flag
+	jam 0,mem_usb_mac_wakeup_trig
+	rtn
+
+usb_clear_halt_dispose:
+	fetch 1,mem_usb_clear_halt
+	rtn blank
+	jam 0,mem_usb_clear_halt
+	jam USB_CONNECTED,mem_usb_state
+	jam 1,mem_usb_device_enumeration_endflag
+	rtn
+
+usb_rx_no_data:
+	fetch 1,mem_usb_status
+	bbit1 USB_STATUS_SETUP,usb_class_type
+	rtn
+
+usb_rx_len:
+	fetchr contus,2,core_usb_rx_saddr
+	fetchr contue,2,core_usb_rx_eaddr
+	fetchr contu,2,core_usb_rxptr
+	ifetch 2,contu
+	rshift8 pdata,temp
+	rshift4 temp,temp					// temp is endpoint
+	arg 0xfff,contr
+	iand contr,loopcnt
+	storer loopcnt,2,mem_usb_read_len
+	rtn
+
+
+usb_rx_data:
+	fetch 1,core_usb_txbusy
+	rtnbit1 USB_STATUS_RXFULL
+	call usb_rx_len
+usb_rx_read:
+	ifetch 1,contu
+	istore 1,contw
+	loop usb_rx_read
+	storer contu,2,core_usb_rxptr
+	rtn
+
+usb_rx_ep13:
+	arg mem_usb_ccid_buf,contw
+	call usb_rx_read
+	arg mem_usb_ccid_buf+4,temp
+	storet 2,core_usb_tx_saddr3
+	fetch 1,mem_usb_ccid_buf+1
+	pincrease 6
+	istore 1,temp
+	jam 0x8,core_usb_trig
+	rtn
+
+
+usb_rx:
+	bpatchx patch24_5,mem_patch24
+	fetch 1,mem_usb_status
+	rtnbit0 USB_STATUS_RXREADY
+	call usb_rx_len
+	compare 13,temp,0xff
+	branch usb_rx_ep13,true
+	arg mem_usb_setup,contw
+	call usb_rx_read
+	fetch 1,mem_usb_read_len
+	beq 0x00,usb_rx_no_data
+	beq 0x01,usb_out_one_byte	// HUAWEI pad led status	
+	sub pdata,7,null
+	rtn positive
+usb_class_type:
+	bpatchx patch24_6,mem_patch24
+	set0 mark_isstr,mark
+	fetch 1,mem_usb_setup_bmRequestType
+	and_into 0x80,pdata
+	beq IN_DEVICE,usb_in_device
+	beq OUT_DEVICE,usb_out_device
+	branch assert
+
+usb_out_one_byte:
+	fetch 1,mem_usb_setup
+	rtnbit1 7	// OUT_DEVICE
+	call usb_get_led_status
+	branch usb0_reply_zerolen
+
+
+usb_in_device:
+	fetch 1,mem_usb_setup_bmRequestType
+	rshift4 pdata,pdata
+	rshift pdata,pdata
+	and_into 0x03,pdata
+	beq STANDARD_REQ,usb_in_standard_req
+	beq CLASS_REQ,usb_in_class_req
+	beq MANUFACTURER_REQ,usb_in_manufacturer_req
+	branch assert
+
+usb_out_device:
+	fetch 1,mem_usb_setup_bmRequestType
+	rshift4 pdata,pdata
+	rshift pdata,pdata
+	and_into 0x03,pdata
+	beq STANDARD_REQ,usb_out_standard_req
+	beq CLASS_REQ,usb_out_class_req	
+	beq MANUFACTURER_REQ,usb_out_manufacturer_req
+	branch assert
+
+usb_in_standard_req:
+	fetch 1,mem_usb_setup_bRequest
+	beq GET_CONFIGURATION,usb0_request_get_configuration
+	beq GET_DESCRIPTOR,usb0_request_get_descriptor
+	beq GET_INTERFACE,usb0_request_get_interface
+	beq GET_STATUS,usb0_request_get_status
+	branch usb0_force_stall
+
+usb_in_class_req:
+	fetch 1,mem_usb_setup_bRequest
+	beq GET_IDLE,usb_get_idle
+	beq GET_REPORT,usb_get_report
+	beq GET_PROTOCOL,usb_get_protocol_req
+	branch usb0_force_stall
+
+usb_in_manufacturer_req:
+	branch usb0_force_stall
+
+usb_out_standard_req:
+	fetch 1,mem_usb_setup_bRequest
+	beq CLEAR_FEATURE,usb0_request_clear_feature
+	beq SET_FEATURE,usb0_request_set_feature
+	beq SET_ADDRESS,usb0_request_set_address
+	beq SET_CONFIGURATION,usb0_request_set_configuration
+	beq SET_INTERFACE,usb0_request_set_interface
+	beq SET_DESCRIPTOR,usb0_force_stall
+	branch usb0_force_stall
+
+usb_out_class_req:
+	fetch 1,mem_usb_setup_bRequest
+	beq SET_IDLE,usb_set_idle
+	beq SET_REPORT,usb_set_report
+	beq SET_PROTOCOL,usb_set_protocol_req
+	branch usb0_force_stall
+
+usb_out_manufacturer_req:
+	branch usb0_force_stall
+
+usb0_force_stall:
+	bpatchx patch24_7,mem_patch24
+	fetch 1,core_usb_stall
+	set1 0,pdata
+	store 1,core_usb_stall
+	branch usb0_reply_zerolen
+	
+usb0_reply_zerolen:
+	jam 0x1,core_usb_clear_nak
+	rtn
+
+usb0_request_get_configuration:
+	fetch 1,mem_usb_setup_bmRequestType
+	bne IN_DEVICE,usb0_force_stall
+	fetch 1,mem_usb_setup_wIndex
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_wIndex+1
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bLength
+	bne 1,usb0_force_stall
+	fetch 1,mem_usb_setup_bLengthH
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bValue
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bValue+1
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb0_state
+	beq DEV_CONFIGURED,usb0_request_get_cfg_dev_cfg
+	beq DEV_ADDRESS,usb0_request_get_cfg_dev_addr
+	branch usb0_force_stall
+//Return current config : 1
+usb0_request_get_cfg_dev_cfg:
+	arg 1,regb
+	branch usb_send_ones_packet
+//Config do not work, return default config : 0
+usb0_request_get_cfg_dev_addr:
+	arg 1,regb
+	branch usb_send_zero_packet
+
+usb0_request_get_descriptor:
+	bpatchx patch25_0,mem_patch25
+//	set0 mark_isstr,mark
+	fetch 1,mem_usb_setup_bValueH
+	beq DSC_DEVICE,dsc_device_info
+	beq DSC_CONFIG,dsc_config_info	
+	beq DSC_STRING,dsc_string_info
+	beq DSC_HID,dsc_hid_info
+	beq DSC_HID_REPORT,dsc_hid_report_info
+	branch usb0_force_stall
+
+dsc_hid_info:
+	jam 0,mem_usb_get_protocol_flag
+	fetch 1,mem_usb_setup_wIndex
+	beq 0,dsc_hid_info_interface0
+	beq 1,dsc_hid_info_interface1
+	branch usb0_force_stall
+//class_descriptor hid_descriptor--keyboard 
+dsc_hid_info_interface0:
+	fetchr regb,1,mem_confdesc+19
+	arg mem_confdesc+19,rega
+	branch usb0_respond
+//class_descriptor hid_descriptor--mouse 
+dsc_hid_info_interface1:
+	fetchr regb,1,mem_confdesc+44
+	arg mem_confdesc+44,rega
+	branch usb0_respond
+
+dsc_device_info:
+//input : pdata : data poniter 
+//input : temp: data len
+//sets the data pointer and len to correct descriptor
+	fetch 1,mem_usb_set_high_addr_flag
+	ncall usb_set_high_addr,blank
+	setarg mem_devicedesc
+	fetcht 1,mem_devicedesc
+dsc_info_set_data_len:
+	store 2,mem_dsc_info_data_pointer
+	storet 1,mem_dsc_info_len
+	fetch 1,mem_usb_setup_bLength
+	isub temp,null
+	nbranch dsc_info_set_current_data_len,positive
+dsc_info_set_initial_data_len:
+	fetch 1,mem_dsc_info_len
+dsc_info_set_data_size_completed:	
+	iforce regb
+	fetch 2,mem_dsc_info_data_pointer
+	add pdata,1,pdata
+	iforce rega
+	branch usb0_respond
+dsc_info_set_current_data_len:
+	fetch 1,mem_usb_setup_bLength
+	branch dsc_info_set_data_size_completed
+
+usb_set_high_addr:
+	fetch 1,core_usb_addr
+	ncall usb0_set_addr,blank
+	jam 0,mem_usb_set_high_addr_flag
+	rtn
+usb0_set_addr:
+	fetch 1,core_usb_addr
+   	set1 7,pdata
+    	store 1,core_usb_addr
+    	rtn
+
+dsc_config_info:
+	setarg mem_confdesc
+	fetcht 1,mem_confdesc
+	branch dsc_info_set_data_len
+
+dsc_string_info:
+	fetch 1,mem_usb_setup_bValue
+	sub pdata,3,null
+	nbranch usb0_force_stall,positive
+	fetch 1,mem_usb_setup_bValue
+	arg mem_string0,rega
+	beq 0,usb0_respond_length	
+	set1 mark_isstr,mark
+	arg mem_string1,rega
+	beq 1,usb0_respond_length
+	arg mem_string2,rega
+	beq 2,usb0_respond_length
+	arg mem_string3,rega
+	beq 3,usb0_respond_length
+	rtn
+
+dsc_hid_report_info:
+	fetch 2,mem_usb_setup_wIndex
+	beq 1,dsc_hid_report_info0
+	fetchr rega,2,mem_hidreportdesc_kb
+	branch usb0_respond_length
+dsc_hid_report_info0:
+	jam 1,mem_usb_device_enumeration_endflag
+	jam USB_GOT_REPORT_REQ,mem_usb_state
+	fetchr rega,2,mem_hidreportdesc_m
+	branch usb0_respond_length
+
+
+usb0_request_get_interface:
+	fetch 1,mem_usb0_state
+	bne DEV_CONFIGURED,usb0_force_stall		
+	fetch 1,mem_usb_setup_bmRequestType
+	bne IN_INTERFACE,usb0_force_stall
+	fetch 1,mem_usb_setup_bValue
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bValueH
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bLength
+	bne 1,usb0_force_stall
+	fetch 1,mem_usb_setup_bLengthH
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_wIndex
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_wIndex+1
+	bne 0,usb0_force_stall
+	arg 1,regb
+	branch usb_send_zero_packet
+
+
+usb0_request_get_status:
+	fetch 1,mem_usb0_state
+	beq DEV_DEFAULT,usb0_force_stall
+	fetch 1,mem_usb_setup_bValue
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bValueH
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bLength
+	bne 2,usb0_force_stall
+	fetch 1,mem_usb_setup_bLengthH
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_wIndex+1
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bmRequestType
+	beq IN_DEVICE,usb0_get_status_in_device
+	beq IN_INTERFACE,usb0_get_status_in_interface
+	beq IN_ENDPOINT,usb0_get_status_in_endpoint
+	branch usb0_force_stall
+
+
+Usb0_SDsystem_dispose:
+	jam 1,mem_sdsystem_wakeup_flag
+	branch usb_send_two_packet
+
+usb0_get_status_in_device:
+	fetch 1,mem_usb_setup_wIndex
+	bne 0,usb0_force_stall
+	arg 2,regb
+	fetch 1,mem_usb_remote_wakeup
+	beq 0x01,Usb0_SDsystem_dispose
+//regb:length
+usb_send_zero_packet:
+	arg mem_usb_zero_packet,rega
+	branch usb0_respond
+usb_send_ones_packet:
+	arg mem_usb_ones_packet,rega
+	branch usb0_respond
+usb_send_two_packet:
+	arg mem_usb_two_packet,rega
+	branch usb0_respond
+
+usb0_get_status_in_interface:
+	fetch 1,mem_usb0_state
+	bne DEV_CONFIGURED,usb0_force_stall
+	arg 2,regb
+	branch usb_send_zero_packet
+
+usb0_get_status_in_endpoint:
+	fetch 1,mem_usb0_state
+	bne DEV_CONFIGURED,usb0_force_stall
+	fetch 1,mem_usb_setup_wIndex
+	beq IN_EP1,usb0_get_status_in_ep_in_ep1
+	beq IN_EP2,usb0_get_status_in_ep_in_ep2
+	beq IN_EP3,usb0_get_status_in_ep_in_ep3
+	and_into 0x7f,pdata
+	beq 0x00,usb0_get_status_in_ep_in_ep0
+	branch usb0_force_stall
+	
+usb0_get_status_in_ep_in_ep0:
+	fetch 1,mem_usb_ep0_stall_status
+usb0_get_status_in_ep_in_ack:
+	arg 2,regb
+	beq 1,usb_send_ones_packet
+	branch usb_send_zero_packet
+usb0_get_status_in_ep_in_ep1:
+	fetch 1,mem_usb_ep1_stall_status
+	branch usb0_get_status_in_ep_in_ack
+usb0_get_status_in_ep_in_ep2:
+	fetch 1,mem_usb_ep2_stall_status
+	branch usb0_get_status_in_ep_in_ack
+usb0_get_status_in_ep_in_ep3:
+	fetch 1,mem_usb_ep3_stall_status
+	branch usb0_get_status_in_ep_in_ack
+
+usb_get_idle:
+	jam 1,mem_usb_idle_flag
+	arg mem_usb_idle_rate,rega
+	arg 1,regb
+	branch usb0_respond
+
+usb_get_report:
+	bpatchx patch25_1,mem_patch25
+	fetch 2,mem_usb_setup_bValue
+	arg PC_GET_REPORT,temp
+	isub temp,null
+	nbranch usb0_force_stall,zero
+//	set0 mark_isstr,mark
+usb_get_report_dispose:	
+	fetch 1,mem_usb0_data_ready_report
+	nbranch usb_get_report_data_success,blank
+	jam PC_GET_NONDATA,mem_usb0_get_report_data
+usb_get_report_send_data:
+	fetch 1,mem_usb_setup_bLength
+	iforce regb
+	arg mem_usb0_get_report_data,rega
+	call usb0_respond
+usb_get_report_data_release:	
+	arg mem_usb0_get_report_data,contw
+	arg 64,loopcnt
+	branch memset0
+usb_get_report_data_success:
+	jam 0,mem_usb0_data_ready_report
+	jam PC_GET_DATA,mem_usb0_get_report_data
+	branch usb_get_report_send_data
+
+usb_get_protocol_req:
+	fetch 1,mem_usb_setup_bLength
+	bne 1,usb0_force_stall
+	jam 1,mem_usb_get_protocol_flag
+	arg 1,regb //length
+	fetch 1,mem_usb_set_protocol_value
+	beq 0,usb_get_report_protocol
+	beq 1,usb_get_boot_protocol
+	branch usb_send_zero_packet
+usb_get_report_protocol:
+	branch usb_send_ones_packet
+usb_get_boot_protocol:
+	branch usb_send_zero_packet
+
+
+
+//in device
+usb0_request_clear_feature:
+	fetch 1,mem_usb0_state
+	bne DEV_CONFIGURED,usb0_force_stall
+	fetch 1,mem_usb_setup_bLength
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bLengthH
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bValueH
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_wIndex+1
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bmRequestType
+	beq OUT_DEVICE,usb0_request_clear_feature_out_device
+	beq OUT_INTERFACE,usb0_request_clear_feature_out_interface
+	beq OUT_ENDPOINT,usb0_request_clear_feature_out_endpoint
+	branch usb0_force_stall
+
+usb0_request_clear_feature_out_device:
+	bpatchx patch25_2,mem_patch25
+	fetch 1,mem_usb_setup_bValue
+	bne DEVICE_REMOTE_WAKEUP,usb0_force_stall
+	fetch 1,core_usb_config
+	set0 7,pdata
+	store 1,core_usb_config
+	jam 0,mem_usb_remote_wakeup
+	jam 1,mem_usb_clear_remote_wakeup
+	fetch 1,mem_sdsystem_wakeup_flag
+	branch usb0_reply_zerolen,blank
+	jam 0,mem_sdsystem_wakeup_flag
+	jam 0,mem_usb_clear_remote_wakeup
+	jam USB_CONNECTED,mem_usb_state
+	branch usb0_reply_zerolen
+
+usb0_request_clear_feature_out_interface:
+	branch usb0_force_stall
+
+usb0_request_clear_feature_out_endpoint:
+	fetch 1,mem_usb_setup_bValue
+	bne ENDPOINT_HALT,usb0_force_stall
+	fetch 1,mem_usb_setup_wIndex
+	beq IN_EP1,usb0_force_stall_ep1_in_off
+	beq IN_EP2,usb0_force_stall_ep2_in_off
+	beq IN_EP3,usb0_force_stall_ep3_in_off
+	and_into 0x7f,pdata
+	beq 0x00,usb0_force_stall_ep0_in_off
+	branch usb0_force_stall
+
+usb0_force_stall_ep0_in_off:
+	jam 0,mem_usb_ep0_stall_status
+	branch usb0_reply_zerolen
+usb0_force_stall_ep1_in_off:
+	jam 0,mem_usb_ep1_stall_status
+usb0_force_stall_ep1_in_off_reply:	
+	jam 1,mem_usb_clear_halt
+	branch usb0_reply_zerolen
+usb0_force_stall_ep2_in_off:
+	jam 0,mem_usb_ep2_stall_status
+	branch usb0_force_stall_ep1_in_off_reply
+usb0_force_stall_ep3_in_off:
+	jam 0,mem_usb_ep3_stall_status
+	branch usb0_force_stall_ep1_in_off_reply
+
+
+usb0_request_set_feature:
+	fetch 1,mem_usb_setup_bLength
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bLengthH
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bmRequestType
+	beq OUT_DEVICE,usb0_request_set_feature_out_device
+	beq OUT_INTERFACE,usb0_request_set_feature_out_interface
+	beq OUT_ENDPOINT,usb0_request_set_feature_out_endpoint
+	branch usb0_force_stall
+
+usb0_request_set_feature_out_device:
+	bpatchx patch25_3,mem_patch25
+	fetch 1,mem_usb_setup_bValue
+	bne DEVICE_REMOTE_WAKEUP,usb0_force_stall
+	call dongle_set_pc_sleep_flag
+	fetch 1,core_usb_config
+	set1 7,pdata
+	store 1,core_usb_config
+	jam 1,mem_usb_remote_wakeup
+	jam USB_SLEEP,mem_usb_state
+	jam 0,mem_usb_tx_win_enable
+	call usb0_reply_zerolen
+usb_wakeup_timer_reinit:
+	call timer_reinit
+	setarg TIMER_WAKEUP_DELAY
+	arg USB_TIMER_WAKEUP,queue
+	branch timer_init
+	
+usb0_request_set_feature_out_interface:
+	branch usb0_force_stall
+
+usb0_request_set_feature_out_endpoint:
+	fetch 1,mem_usb_setup_bValue
+	bne ENDPOINT_HALT,usb0_force_stall
+	fetch 1,mem_usb_setup_bValueH
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_wIndex
+	beq IN_EP1,usb0_force_stall_ep1_in_on
+	beq IN_EP2,usb0_force_stall_ep2_in_on
+	beq IN_EP3,usb0_force_stall_ep3_in_on
+	and_into 0x7f,pdata
+	beq 0x00,usb0_force_stall_ep0_in_on
+	branch usb0_force_stall
+
+usb0_force_stall_ep0_in_on:
+	jam 1,mem_usb_ep0_stall_status
+	branch usb0_reply_zerolen
+usb0_force_stall_ep1_in_on:
+	jam 1,mem_usb_ep1_stall_status
+	branch usb0_reply_zerolen
+usb0_force_stall_ep2_in_on:
+	jam 1,mem_usb_ep2_stall_status
+	branch usb0_reply_zerolen
+usb0_force_stall_ep3_in_on:
+	jam 1,mem_usb_ep3_stall_status
+	branch usb0_reply_zerolen
+
+
+usb0_request_set_address:
+	fetch 1,mem_usb_setup_bmRequestType
+	bne OUT_DEVICE,usb0_force_stall
+	fetch 1,mem_usb_setup_wIndex
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_wIndex+1
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bLength
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bLengthH
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bValueH
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bValue
+	and_into 0x80,pdata
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bValue
+	bne 0,usb_usb0_state_set_dev_addr
+usb_usb0_state_set_dev_default:	
+	jam DEV_DEFAULT,mem_usb0_state
+usb0_request_set_wait_address:
+	fetch 1,mem_usb_setup_bValue
+	store 1,core_usb_addr
+	call usb0_reply_zerolen
+	jam 1,mem_usb_set_high_addr_flag
+	rtn
+usb_usb0_state_set_dev_addr:
+	jam DEV_ADDRESS,mem_usb0_state
+	branch usb0_request_set_wait_address
+
+
+usb0_request_set_configuration:
+	fetch 1,mem_usb0_state
+	beq DEV_DEFAULT,usb0_force_stall
+	fetch 1,mem_usb_setup_bmRequestType
+	bne OUT_DEVICE,usb0_force_stall
+	fetch 1,mem_usb_setup_wIndex
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_wIndex+1
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bLength
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bLengthH
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bValue+1
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bValue
+	sub pdata,USB_MAX_NUM_CFG,null
+	nbranch usb0_force_stall,positive
+	fetch 1,mem_usb0_state
+	beq DEV_ADDRESS,usb0_request_set_cfg_addr_state
+	beq DEV_CONFIGURED,usb0_request_set_cfg_cfg_state
+	branch usb0_force_stall
+ // This software only supports config = 0,1
+usb0_request_set_cfg_addr_state:
+usb0_request_set_cfg_cfg_state:
+	fetch 1,mem_usb_setup_bValue	//1:Configured state   0:Address state
+	beq 0,usb0_request_set_cfg_stay_addr_state
+	jam DEV_CONFIGURED,mem_usb0_state
+	branch usb0_reply_zerolen
+usb0_request_set_cfg_stay_addr_state:
+	jam DEV_ADDRESS,mem_usb0_state
+	branch usb0_reply_zerolen
+
+
+usb0_request_set_interface:
+	fetch 1,mem_usb0_state
+	bne DEV_CONFIGURED,usb0_force_stall		
+	fetch 1,mem_usb_setup_bmRequestType
+	bne OUT_INTERFACE,usb0_force_stall
+	fetch 1,mem_usb_setup_bValue
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bValueH
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bLength
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bLengthH
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_wIndex
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_wIndex+1
+	bne 0,usb0_force_stall
+	branch usb0_reply_zerolen
+
+
+usb_set_idle:
+	bpatchx patch25_4,mem_patch25
+	jam 1,mem_usb_idle_flag
+	fetch 1,mem_usb_setup_bValueH
+	store 1,mem_usb_idle_rate
+	fetch 1,mem_usb_setup_wIndex
+	sub pdata,1,null
+	call usb_clear_remote_wakeup_set0,zero
+	fetch 1,mem_usb_state
+	bne USB_RESUME,usb0_reply_zerolen
+	jam USB_CONNECTED,mem_usb_state
+	call usb0_reply_zerolen
+	nop 30000
+	nop 30000
+	rtn
+usb_clear_remote_wakeup_set0:
+	jam 1,mem_usb_device_enumeration_endflag
+	jam 0,mem_usb_clear_remote_wakeup
+	jam USB_RESUME,mem_usb_state
+	rtn
+
+
+usb_set_report:
+	bpatchx patch25_5,mem_patch25
+	nop 15000		//delay 1ms
+	arg mem_usb0_set_report_data,contw
+	call usb_rx_data
+	jam 1,mem_usb0_get_set_report
+	call usb_set_report_resume_judge
+	fetch 2,mem_usb_setup_bValue
+	store 2,mem_usb_setup_bValue_temp
+	jam 0x02,core_usb_clear_nak
+//	call usb0_reply_zerolen
+	fetch 1,mem_usb_tx_win_enable
+	rtn blank
+	fetch 1,mem_usb0_set_report_data
+usb_get_led_status:	
+	store 1,mem_24g_led_status
+	jam 0,mem_usb_tx_win_enable
+	jam KB_LED_ACKPAYLOAD,mem_24g_ackpayload_enable
+	rtn
+
+	
+usb_set_report_resume_judge:
+	fetch 2,mem_usb_setup_bValue
+	arg PC_SET_REPORT_bValue,temp
+	isub temp,null
+	nrtn zero
+	fetch 2,mem_usb_setup_wIndex
+	arg PC_SET_REPORT_wIndex,temp
+	isub temp,null
+	nrtn zero
+	fetch 2,mem_usb_setup_bLength
+	arg PC_SET_REPORT_bLength,temp
+	isub temp,null
+	nrtn zero
+	jam 1,mem_usb_tx_win_enable
+	rtn
+
+
+usb_set_protocol_req:
+	fetch 1,mem_usb_setup_bLength
+	bne 0,usb0_force_stall
+	fetch 1,mem_usb_setup_bValue
+	beq BOOT_PROTOCOL,usb_set_boot_protocol
+	beq REPORT_PROTOCOL,usb_set_report_protocol
+	branch usb0_force_stall
+usb_set_boot_protocol:
+	jam 0,mem_usb_set_protocol_status
+	jam 1,mem_usb_set_protocol_value
+	branch usb0_reply_zerolen
+usb_set_report_protocol:
+	jam 1,mem_usb_tx_mac_enable
+	jam 1,mem_usb_set_protocol_status
+	jam 0,mem_usb_set_protocol_value
+	branch usb0_reply_zerolen
+
+
+usb0_respond_length:
+	ifetchr regb,1,rega
+	increase 1,rega
+//rega=*buff,regb=size
+usb0_respond:
+	bpatchx patch25_6,mem_patch25
+	set1 mark_usb_first_resp,mark
+	bmark0 mark_isstr,usb0_respond_nostr
+	increase 1,regb
+	lshift regb,regb
+usb0_respond_nostr:
+	storer rega,2,mem_bufptr
+	storer regb,1,mem_remain
+	branch usb0_tx
+	rtn
+
+usb_no_respond_data:
+	arg 0,queue
+	branch usb_trig
+
+
+
+//mem_bufptr=*buff,mem_remain=size,loopcnt=i,rega=len
+usb0_tx:
+	bpatchx patch25_7,mem_patch25
+	fetch 1,core_usb_txbusy
+	rtnbit1 0
+	fetch 1,mem_remain
+	rtn blank
+	copy pdata,loopcnt
+	iforce temp
+	fetch 2,mem_usb_setup_bLength
+	sub pdata,EP0_PACKET_SIZE,null
+	branch usb0_tx_short,positive
+	sub loopcnt,EP0_PACKET_SIZE,null
+	branch usb0_tx_info,positive
+	force EP0_PACKET_SIZE,loopcnt
+	branch usb0_tx_info
+usb0_tx_short:
+	isub loopcnt,null
+	branch usb0_tx_info,positive
+	iforce loopcnt
+	store 1,mem_remain
+usb0_tx_info:
+	fetch 1,mem_remain
+	isub loopcnt,pdata
+	store 1,mem_remain
+	add loopcnt,-1,pdata
+	store 1,mem_usb_txbuf
+	bmark0 mark_isstr,usb0_tx_nostr
+	rshift pdata,pdata
+	add loopcnt,-1,pdata
+	store 1,mem_usb_txbuf
+	bmark0 mark_usb_first_resp,usb0_tx_nostr
+	set0 mark_usb_first_resp,mark
+	istoret 1,contw
+	setarg 3
+	istore 1,contw
+	increase -1,loopcnt
+	copy loopcnt,pdata
+	nbranch usb0_tx_nostr,zero
+	increase 1,loopcnt
+usb0_tx_nostr:
+	fetch 2,mem_bufptr
+	copy pdata,contr
+usb0_tx0:
+	ifetch 1,contr
+	istore 1,contw
+	bmark0 mark_isstr,usb0_tx1
+	setarg 0
+	istore 1,contw
+usb0_tx1:
+	loop usb0_tx0
+	copy contr,pdata
+	store 2,mem_bufptr				//mem_bufptr += len
+	setarg mem_usb_txbuf
+	store 2,core_usb_tx_saddr0
+	arg 0,queue
+	call usb_trig
+	fetch 1,mem_remain
+	nrtn blank
+	jam 2,core_usb_clear_nak			// clear OUT nak for last packet
+	fetch 1,mem_usb_state
+	rtnne USB_GOT_REPORT_REQ
+	jam USB_CONNECTED,mem_usb_state
+	rtn
+
+
+
+usb_tx_ep1:
+	arg mem_usb_txbuf1,rega
+	arg 1,queue
+	storer rega,2,core_usb_tx_saddr1
+usb_tx_buf:
+	add loopcnt,-1,pdata
+	istore 1,rega
+usb_tx_loop:
+	ifetch 1,contr
+	istore 1,contw
+	loop usb_tx_loop
+usb_trig:
+	setarg 0
+	qset1 pdata
+	store 1,core_usb_trig
+	rtn
+
+usb_tx_ep2:
+	arg 2,queue
+	arg mem_usb_txbuf2,rega
+	storer rega,2,core_usb_tx_saddr2
+	branch usb_tx_buf
+
+usb_tx:
+	bpatchx patch26_0,mem_patch26
+	fetch 1,mem_usb_tx_enable
+	rtn blank
+	fetch 1,core_usb_txbusy
+	and_into 0x0f,pdata
+	nbranch usb_inwake_state_tx_dispose,blank
+	fetch 1,mem_usb_device_enumeration_endflag
+	branch usb_tx_fifo_release,blank
+	fetch 1,mem_usb_state
+	beq USB_SLEEP,usb_windows_wakeup
+	bne USB_CONNECTED,usb_tx_fifo_release
+	fetch 1,mem_usb_clear_remote_wakeup
+	nbranch usb_tx_fifo_release,blank
+	call usb_tx_data_ep1
+	branch usb_tx_data_ep2
+
+usb_tx_data_ep1:
+	fetch 1,core_usb_txbusy
+	rtnbit1 1
+	fetch 1,mem_usb_tx_enable
+	rtnbit0 1
+	fetch 1,mem_usb_tx_enable
+	set0 1,pdata
+	store 1,mem_usb_tx_enable
+	bpatchx patch26_1,mem_patch26
+	fetch 1,mem_usb_ep1_data
+	rtn blank
+	beq USB_EP1_KB,usb_tx_kb_normal_data
+	branch assert
+
+usb_tx_data_ep2:
+	fetch 1,core_usb_txbusy
+	rtnbit1 2
+	fetch 1,mem_usb_tx_enable
+	rtnbit0 2
+	fetch 1,mem_usb_tx_enable
+	set0 2,pdata
+	store 1,mem_usb_tx_enable
+	bpatchx patch26_2,mem_patch26
+	fetch 1,mem_usb_ep2_data
+	rtn blank
+	beq USB_EP2_MS,usb_tx_ms_data
+	beq USB_EP2_MULTIKEY,usb_tx_kb_multikey_data
+	beq USB_EP2_SYSTEMKEY,usb_tx_kb_systemkey_data
+	beq USB_EP2_BIT_CONSUMER,usb_tx_kb_bit_consumer_data
+	beq USB_EP2_N_KEY_ROLLOVER,usb_tx_kb_n_key_rollover_data
+	branch assert
+
+usb_tx_fifo_release:
+	//clear mem_usb_mouse_data/mem_usb_kb_data/mem_usb_kb_multikey/mem_usb_kb_system
+	arg mem_usb_mouse_data,contw
+	arg 64,loopcnt
+	branch memset0
+	
+usb_tx_ms_data:
+	fetch 1,mem_usb_idle_flag
+	fetcht 1,mem_usb_get_protocol_flag
+	iand temp,pdata
+	branch usb_tx_ms_data_normal_mode,blank
+	fetcht 1,mem_usb_set_protocol_status
+	iadd temp,pdata
+	beq MAC_BOOT_MODE,usb_tx_ms_data_mac_boot_mode
+	branch usb_tx_ms_data_normal_mode
+
+usb_tx_ms_data_mac_boot_mode:
+	jam 0,mem_usb_ep2_data
+usb_tx_ms_data_mac_boot_regroup:
+	fetch 1,mem_usb_mouse_data+1	//key
+	beq R_KEY,usb_tx_mac_boot_ms_regroup_r_or_lrkey
+	beq LR_KEY,usb_tx_mac_boot_ms_regroup_r_or_lrkey
+	fetch 1,mem_usb_mouse_data+1	//key
+	store 1,mem_usb_mouse_data
+	fetch 1,mem_usb_mouse_data+2	//x low
+	istore 1,contw
+	fetch 1,mem_usb_mouse_data+4	//y low
+	istore 1,contw
+	fetch 1,mem_usb_mouse_data+6	//wheel
+	istore 1,contw
+	arg 4,loopcnt
+	arg mem_usb_mouse_data,contr
+	branch usb_tx_ep2
+	
+usb_tx_ms_data_normal_mode:
+	jam 0,mem_usb_ep2_data
+usb_tx_mac_boot_ms_regroup_r_or_lrkey:	
+	arg 8,loopcnt		
+	arg mem_usb_mouse_data,contr
+	branch usb_tx_ep2
+
+usb_tx_kb_multikey_data:
+	jam 0,mem_usb_ep2_data
+	arg 3,loopcnt
+	arg mem_usb_kb_multikey,contr
+	branch usb_tx_ep2
+
+usb_tx_kb_normal_data:
+	fetch 1,mem_device_option
+	beq DVC_OP_KEYBOARD,keyboard_usb_tx_kb_normal_data
+	jam 0,mem_usb_ep1_data
+	arg 8,loopcnt
+	arg mem_usb_kb_data,contr
+	branch usb_tx_ep1
+
+usb_tx_kb_systemkey_data:
+	jam 0,mem_usb_ep2_data
+	arg 2,loopcnt
+	arg mem_usb_kb_system,contr
+	branch usb_tx_ep2
+
+usb_tx_kb_bit_consumer_data:
+	jam 0,mem_usb_ep2_data
+	arg 4,loopcnt
+	arg mem_usb_kb_multikey,contr
+	branch usb_tx_ep2
+
+usb_tx_kb_n_key_rollover_data:
+	jam 0,mem_usb_ep2_data
+	arg 15,loopcnt
+	arg mem_usb_kb_n_key_rollvoer_data,contr
+	branch usb_tx_ep2	
+
+
+usb_inwake_state_tx_dispose:
+	fetch 1,mem_usb_state
+	beq USB_CONNECTED,usb_mac_wakeup_trig
+	rtn
+usb_mac_wakeup_trig:
+	fetch 1,core_usb_config
+	set1 7,pdata
+	store 1,core_usb_config
+	jam 1,mem_usb_mac_wakeup_trig
+	rtn
+
+usb_mac_wakeup_judge:
+	fetch 1,mem_usb_state
+	rtneq USB_SLEEP
+	beq USB_CONNECTED,usb_mac_wakeup
+	rtn
+usb_mac_wakeup:
+	fetch 1,mem_usb_mac_wakeup_trig
+	rtn blank
+	jam 1,mem_usb_wakestate_onetime_flag
+	branch usb_wakeup
+
+usb_windows_wakeup:
+	arg USB_TIMER_WAKEUP,queue
+	call timer_check
+	nrtn blank
+usb_wakeup:
+	fetch 1,core_usb_config
+	rtnbit0 7	//endpoint wakeup enable
+	jam 0xfc,core_usb_config
+	nop 30000
+	jam 0x3c,core_usb_config
+	rtn
+
+
+endif
+
Index: program/utility.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/utility.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/utility.prog	(working copy)
@@ -0,0 +1,746 @@
+
+
+	
+push_stack:
+	storer contw,2, mem_contw
+	storet 8,mem_temp
+	storer timeup,4,mem_timeup
+	call push_stack_rega_b_c
+	storer contr,2, mem_contr
+	storer loopcnt,2, mem_loopcnt
+	storer queue,2,mem_queue
+	rtn
+
+push_stack_rega_b_c:
+	storer rega,4, mem_rega
+	storer regb,4, mem_regb
+	storer regc,3, mem_regc
+	rtn
+
+pop_stack:
+	bpatchx patch26_3,mem_patch26
+	fetch 2, mem_contw
+	iforce contw
+	fetcht 8,mem_temp
+	fetchr timeup,4,mem_timeup
+	call pop_stack_rega_b_c
+	fetchr loopcnt,2,mem_loopcnt
+	fetchr queue,2,mem_queue
+	fetch 2,mem_contr
+	iforce contr
+	rtn
+
+pop_stack_rega_b_c:
+	fetchr rega,4, mem_rega
+	fetchr regb,4, mem_regb
+	fetchr regc,3,mem_regc
+	rtn
+
+get_contw:
+	fetch 2,mem_contw
+get_contw_end:
+	copy pdata,contw
+	rtn
+get_contr:
+	fetch 2,mem_contr
+get_contr_end:
+	copy pdata,contr
+	rtn
+	
+store_contw:
+	copy contw,pdata
+	store 2,mem_contw
+	rtn
+store_contr:
+	copy contr,pdata
+	store 2,mem_contr
+	rtn	
+	
+
+//
+save_cont_pointers:
+	copy contw,pdata
+	store 2,mem_contw
+	copy contr,pdata
+	store 2,mem_contr
+	rtn
+	
+load_cont_pointers:
+	fetch 2,mem_contw
+	copy pdata,contw
+	fetch 2,mem_contr
+	copy pdata,contr
+	rtn
+
+
+//input pdata,temp 1byte
+//output rega:diff
+get_diff:
+	isub temp,rega
+	rtn positive
+	arg 0x100,rega
+	iadd rega,pdata
+	isub temp,rega
+	rtn	
+
+memcpy96:
+	call memcpy32
+memcpy64:
+	call memcpy32
+	branch memcpy32
+	
+
+memcpy12:
+	call memcpy8
+memcpy4:
+	ifetch 1,contr
+	istore 1,contw
+memcpy3:
+	ifetch 3,contr
+	istore 3,contw
+	rtn	
+memcpy8:
+	ifetch 8,contr
+	istore 8,contw
+	rtn	
+
+memcpy48:
+	call memcpy16
+memcpy32:
+	call memcpy8
+memcpy24:
+	call memcpy8
+memcpy16:
+	call memcpy8
+	branch memcpy8
+
+delay:
+	increase -1,pdata
+	nop 38
+	nbranch delay,blank
+	rtn
+
+
+delay_10ms:
+	arg 10,loopcnt
+delay_ms_wait:
+	nop 12000
+	loop delay_ms_wait
+	rtn
+
+
+memset0_16:
+	call memset0_8
+memset0_8:
+	call memset0_4
+memset0_4:
+	force 4,loopcnt
+	branch memset0
+	
+clear_mem_256:
+	force 32,loopcnt
+	branch memset0 
+clear_mem_512:
+	force 64,loopcnt
+	branch memset0 
+
+clear_mem:
+	deposit loopcnt
+	rtn blank
+memset0:
+	force 0,pdata
+	lstore  contw
+	rtn	
+
+clear_temp_block:
+	arg 32,loopcnt
+	arg mem_temp_block0,contw
+	branch clear_mem
+	
+xor_loop:
+	ifetch   4,regc
+	ifetcht 4,rega
+	ixor     temp,pdata
+	istore   4,contw	
+	increase 4,rega
+	increase 4,regc
+	loop  xor_loop
+	rtn
+	
+// 11 22 -> 22 11; 11 22 33 -> 33 22 11 
+// rega:data addr ;loopnct:length
+inverse_data:
+	bpatchx patch26_4,mem_patch26
+	copy loopcnt,pdata
+	sub pdata,1,null
+	rtn positive
+	iadd rega,regb	
+	increase -1,regb
+	rshift loopcnt,loopcnt
+inverse_loop:
+	ifetcht 1,rega
+	ifetch 1,regb
+	istore 1,rega
+	istoret 1,regb
+	increase -1,regb
+	increase 1,rega
+	loop inverse_loop
+	rtn
+
+/*
+	function name:inverse_data_6Byte or le2be_6Byte
+	input: pdata is data that want change
+	output:pdata is Converted data
+	used Resources:temp,contr
+*/
+le2be_6Byte:
+inverse_data_6Byte:
+	rshift32 pdata,temp
+	call inverse_data_4Byte
+	byteswap temp,temp
+	lshift16 pdata,pdata
+	ior temp,pdata
+	rtn
+
+
+/*
+	function name:inverse_data_4Byte or le2be_4Byte
+	input: pdata is data that want change
+	output:pdata is Converted data
+	used Resources:contr
+*/
+le2be_4Byte:
+inverse_data_4Byte:
+	rshift16 pdata,contr
+	byteswap contr,contr
+	byteswap pdata,pdata
+	lshift16 pdata,pdata
+	ior contr,pdata
+	rtn
+
+
+memcpy_fast:
+	bpatchx patch26_5,mem_patch26
+	deposit loopcnt
+	rtn blank
+memcpy_fast_loop:
+	increase -8,loopcnt
+	call memcpy8,positive
+	rtn zero
+	branch memcpy_fast_loop,positive
+	increase 8,loopcnt
+memcpy_fast_loop_four:
+	increase -4,loopcnt
+	call memcpy4,positive
+	rtn zero
+	branch memcpy_fast_loop_four,positive
+	increase 4,loopcnt
+	branch memcpy
+ 
+memcpy:
+	deposit loopcnt
+	rtn blank
+memcpy_loop:
+	ifetch 1,contr
+	istore 1,contw
+	loop memcpy_loop
+	rtn
+
+timer_stop:
+	setarg 0
+timer_init:
+//	rshift clkn_bt,temp
+//	storet 4,mem_last_clkn
+	store 2,mem_pdatatemp
+	bpatchx patch26_6,mem_patch26
+	call timer_check
+	fetcht 2,mem_pdatatemp
+	arg mem_timers,contw
+//	iforce temp
+	lshift queue,pdata
+	iadd contw,contw
+	istoret 2,contw
+	rtn
+
+timer_check_timeout:
+	arg 0x800,timeup
+	lshift16 timeup,timeup
+	iadd timeup,pdata
+	rtn
+
+
+timer_reinit:
+	arg 0,queue
+timer_check:
+	bpatchx patch26_7,mem_patch26
+	fetcht 4,mem_last_clkn
+	rshift clkn_bt,pdata
+	store 4,mem_last_clkn	
+	isub temp,null
+	ncall timer_check_timeout,positive	
+	isub temp,timeup
+	copy timeup,temp
+	arg mem_timers,contr
+	copy contr,contw
+	arg 16,loopcnt
+timer_loop:
+	ifetch 2,contr
+	isub temp,pdata
+	branch timer_counting,positive
+	force 0,pdata
+timer_counting:
+	istore 2,contw
+	loop timer_loop	
+	arg mem_timers,contr
+	lshift queue,pdata
+	iadd contr,contr
+	ifetch 2,contr
+	rtn
+
+
+
+	/* pdata 28+16 bit add temp 26+16 bit, result in temp */
+clk_add:
+	iadd temp,temp
+	copy temp, loopcnt
+	fetch 2,mem_param_rt_rthalfslot
+	isub loopcnt,pdata
+	rtn positive
+	sub pdata,0,pdata
+	rshift16 temp,temp
+	increase 1,temp
+	lshift16 temp,temp
+	ior temp,temp
+	rtn
+
+clk_diff_rt:
+	call clk_diff
+	branch clk2rt
+
+/* pdata -temp -> pdata, all are 28+16 bits, set user if negative */
+clk_diff:
+	disable user
+	isub temp,pdata
+	branch clk_diff_pos,positive
+	enable user
+	sub pdata,0,pdata
+clk_diff_pos:
+	rtnbit0 15
+	copy pdata,regab
+	arg 0x10000,temp
+	fetch 2,mem_param_rt_rthalfslot
+	isub temp,pdata
+	iadd regab,pdata
+	set0 64,pdata
+	rtn
+
+	
+
+clk2rt:
+	fetcht 2,mem_param_rt_rthalfslot
+	iforce contr
+	rshift16 pdata,pdata
+	imul32 temp,pdata
+	iadd contr,pdata
+	rtn
+
+	/* pdata = clks in, temp = lpo out */
+clk2lpo:
+	lshift8 pdata,pdata
+	lshift4 pdata,pdata
+	fetcht 3,mem_clks_per_lpo
+	idiv temp
+	call wait_div_end
+	quotient temp
+	rtn
+
+	/* rt clk -> bt+rt clk */
+clk2bt:
+	fetcht 2,mem_param_rt_rthalfslot
+	idiv temp
+	call get_div_result
+	lshift16 pdata,pdata
+	remainder temp
+	ior temp,temp
+	rtn
+
+
+
+//input:contu 
+//output:temp
+//used register: temp regab
+string2dec_from_uart:
+	arg 0,temp
+string2dec_from_uart_done:
+         copy temp,regab
+	ifetch 1,contu
+	call uchar2dialog	
+	copy regab,temp
+	call swap
+	arg 10,regb
+	imul32 regb,pdata
+	iadd temp,pdata
+	copy pdata,temp
+	loop string2dec_from_uart_done
+	rtn
+	
+
+
+uchar2dialog:
+	arg 0x3a,temp
+	isub temp,null
+	nbranch uchar2dialog_number,positive
+	arg 0x61,temp
+	isub temp,null
+	branch uchar2dialog_a2f,positive
+	arg 0x37,temp
+	isub temp,pdata
+	rtn
+uchar2dialog_number:
+	arg 0x30,temp
+	isub temp,pdata
+	rtn
+uchar2dialog_a2f:
+	arg 0x57,temp
+	isub temp,pdata
+	rtn
+
+
+right_shift_n: //rshiftN pdata,pdata
+	sub loopcnt,0,null
+	rtn zero
+right_shift_n_loop: 
+	rshift pdata,pdata
+	loop right_shift_n_loop
+	rtn
+
+//lshift. 0:1 byte; 1:2byte; 2:4byte; 3:8byte; 4:16byte//
+left_shift_n:
+	force 1,pdata
+	sub loopcnt,0,null
+	rtn zero
+left_shift_n_loop:
+	lshift pdata,pdata
+	loop left_shift_n_loop
+	rtn
+	
+
+	// contr: rxdata, loopcnt is count. result in quotient
+calc_average:
+	setarg 0
+	copy loopcnt,rega
+calc_average_loop:
+	ifetcht 2,contr
+	iadd temp,pdata
+	loop calc_average_loop
+	idiv rega
+get_div_result:
+	call wait_div_end
+	quotient pdata
+	rtn
+
+wait_div_end:	
+	rtn modone
+	branch wait_div_end
+
+
+
+//input:
+//	count:loopcnt str1:rega str2:regb
+//output:
+//	same:set flag zero ,diff not set flag zero
+// using:
+//	reg:temp null flag:zero
+compare_loop:
+string_compare:
+	ifetch 1,rega
+	ifetcht 1,regb
+	isub temp,null
+	nrtn zero
+	increase 1,rega
+	increase 1,regb
+	loop string_compare
+	branch enable_zero
+
+
+	/* pdata = temp if pdata > temp */
+ceiling:
+	isub temp,null
+	nrtn positive
+	deposit temp
+	rtn
+	
+swap:
+	iadd temp,pdata
+	isub temp,temp
+	isub temp,pdata
+	rtn
+
+clean_smem:
+	arg 0,contw
+	branch clean_mem
+
+clean_xmem:
+	arg 0x4000,contw
+clean_mem:
+	arg 0x1000,loopcnt
+	branch memset0				// clear xram at boot
+
+	//cb function ptr in pdata
+callback_func:
+	rtn blank
+	copy pdata,pc	//rtn through cb functon.
+	//branch assert
+/*
+wait_uarttx:
+	fetch 2,core_uart_txitems
+	nbranch wait_uarttx,blank
+	rtn
+*/
+
+ice_break_disable_wdt:
+	call wdt_set_disable
+
+ice_break:
+	jam 0x1,core_ice_ctrl
+	rtn
+
+ice_setbp:
+	store 2,core_ice_break0
+	fetch 1,core_ice_ctrl
+	set1 4,pdata
+	store 1,core_ice_ctrl
+	rtn
+ice_setbp2:
+	store 2,core_ice_break1
+	fetch 1,core_ice_ctrl
+	set1 6,pdata
+	store 1,core_ice_ctrl
+	rtn
+	
+ice_set_write_bp:
+	store 2,core_ice_break0
+	jam 0x30,core_ice_ctrl
+	rtn
+	
+
+
+	//fuction fifo_in
+	//rega pointer to fifo memory , *(rega+len) is the end of fifo
+	//mem_fifo_temp data into fifo
+	//assert if fifo was full
+fifo_in:
+	bpatchx patch27_0,mem_patch27
+	ifetcht UTIL_FIFO_LEN,rega
+	and temp,0xff,pdata
+	nbranch fifo_in_push,blank
+	rshift8 temp,pdata
+	istore UTIL_FIFO_LEN,rega
+fifo_in_push:
+	increase UTIL_FIFO_LEN+UTIL_FIFO_OFFSET,rega
+	ifetch 1,rega
+	nbranch assert,blank //fifo full
+	fetch 1,mem_fifo_temp
+	istore 1,rega
+	rtn
+	
+	//fuction fifo_out
+	//rega pointer to fifo memory
+	//pdata  data from fifo, blank mains fifo empty
+fifo_out:
+	bpatchx patch27_1,mem_patch27
+	arg UTIL_FIFO_LEN,loopcnt
+	ifetch UTIL_FIFO_LEN,rega
+	rtn blank
+fifo_out_loop:
+	ifetch 1,rega
+	nbranch fifo_out_end,blank
+	increase 1,rega
+	loop fifo_out_loop
+	branch assert
+fifo_out_end:
+	arg 0,temp
+	istoret 1,rega
+	rtn
+
+	//fuction fifo_is_empty
+	//rega pointer to fifo memory
+	//blank--- fifo is empty
+fifo_is_empty:
+	ifetch UTIL_FIFO_LEN,rega
+	rtn
+
+	//fuction fifo_is_full
+	//rega pointer to fifo memory
+	//blank--- fifo is NOT full
+fifo_is_full:
+	ifetch 1,rega
+	rtn
+	//rega pointer to fifo memory
+	//blank--- fifo is NOT near full
+fifo_is_near_full:
+	ifetch 2,rega
+	rtn
+
+	//rega pointer to fifo memory
+	//count output via pdata
+fifo_content_count:
+	arg 0,temp
+fifo_content_count_loop:
+	fetch 1,contr
+	loop fifo_content_count_loop,blank
+	increase 1,temp
+	loop fifo_content_count_loop
+	copy temp,pdata
+	rtn
+
+//input pdata, temp, return small in pdata	
+not_greater_than:
+	isub temp,null
+	nrtn positive
+copy_temp2pdata:
+	copy temp,pdata
+	rtn
+
+
+disable_positive:
+	force -1,null
+	rtn
+enable_positive:
+disable_zero:
+	force 1,null
+	rtn
+enable_zero:
+	force 0,null
+	rtn
+
+enable_user:
+	enable user
+	rtn
+	
+disable_user:
+	disable user
+	rtn
+	
+enable_user2:
+	enable user2
+	rtn
+	
+disable_user2:
+	disable user2
+	rtn
+
+enable_user7:
+	enable user7
+	rtn
+
+disable_true:
+	disable  true
+	rtn
+
+enable_true:
+	enable  true
+	rtn
+
+disable_blank:
+	setarg 1
+	rtn
+
+enable_blank:
+set_pdata_0:
+	setarg 0
+	rtn
+
+istore_1_contw_rtn:
+	istore 1,contw
+	rtn
+
+//input pdata :sum
+//output pdata :sum
+cal_sum:
+	sub loopcnt,0,null
+	rtn zero
+cal_sum_loop:
+	ifetcht 1,contr
+	iadd temp,pdata
+	loop cal_sum_loop
+	rtn
+
+	
+reverse_byte:
+	copy loopcnt,pdata
+	rtn blank
+	copy contr,pdata
+	iadd loopcnt,pdata
+	increase -1,pdata
+	copy pdata,contr	
+reverse_loop:
+	ifetch 1,contr
+	increase -2,contr
+	istore 1,contw
+	loop reverse_loop
+	rtn
+
+
+lshift14:
+	lshift16 pdata,pdata
+rshift2:
+	rshift2 pdata,pdata
+	rtn
+
+lshift6:
+	lshift8 pdata,pdata
+	branch rshift2
+
+/*	
+savelist:		
+	store 8,mem_pdatatemp
+savelist_1:
+	fetch 1,mem_seqi
+	rtneq 0x7f
+	lshift3 pdata,pdata
+	arg mem_savelist,contw
+	iadd contw,contw
+	fetch 8,mem_pdatatemp
+	istore 8,contw
+	fetch 1,mem_seqi
+	increase 1,pdata
+	and_into 0x7f,pdata
+	store 1,mem_seqi
+	fetch 8,mem_pdatatemp
+	rtn	
+
+le_savelist:
+	fetch 5,mem_sync_clke
+	store 5,mem_pdatatemp
+	fetch 1,mem_le_ch_mapped
+	istore 1,contw
+	fetch 2,mem_le_event_count
+	arg 0x0fff,contr
+	iand contr,pdata
+	setflag match,15,pdata
+	setflag wake,14,pdata
+	setflag sync,13,pdata
+	setflag attempt,12,pdata
+	istore 2,contw
+	branch savelist_1
+*/
+
+clear_wake:
+	bpatchx patch27_2,mem_patch27
+	setarg 0
+	set1 21,pdata				//gpio5(ice) enable wakeup
+	store 8,mem_gpio_wakeup_cfg
+	setarg 0
+	istore 4,contw
+	rtn	
+
+
+generate_random:
+	arg 16,loopcnt
+generate_random_loop:
+	random pdata
+	istore 1,contw
+	loop generate_random_loop
+	rtn
+
Index: program/z.prog
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/z.prog	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/program/z.prog	(working copy)
@@ -0,0 +1,418 @@
+org 0x10001
+z_entrance0:
+	beq ZCODE_00,z_mouse_start_work
+    beq ZCODE_01,z_mouse_param_info_init
+    beq ZCODE_02,z_mouse_default_init
+	rtn
+z_mouse_start_work:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag
+	bbit1 MOUSE_ENABLE_24G_FIRST_AUTO_PAIRING, mouse_24g_first_start_auto_pair_mode
+	fetch 1,mem_device_flag
+	beq MODE_24G_DEVICE,mouse_24g_start_mode
+	call p_mouse_le_param_default
+	branch mouse_le_fast_conn_judge
+
+z_mouse_param_info_init:
+	call mouse_param_info_init+1
+	setarg mem_le_tx_buffer0_omemalloc_new
+	store 2,mem_ble_l2cap_tx_buff0_ptr
+	setarg MOUSE_BLE_L2CAP_TXBUFF_SIZE_NEW
+	store 2,mem_ble_l2cap_tx_buff_size_ptr
+	setarg mem_ui_le_uuid_table_new				//ble attlist start address
+	store 2,mem_ui_le_uuid_table
+	jam 70,mem_le_local_mtu
+	jam 0x0f,mem_24g_fast_hop_count
+	rtn
+
+z_mouse_default_init:
+	// call mouse_default_init+1
+	call hid_device_default_parm_init
+	call mouse_xtal_init
+	call mouse_24g_phy_select
+	call mouse_24g_long_sleep_set
+	call z_g24_pair_param_init
+	jam 1,mem_24g_disable_fec1
+	jam 1,mem_power_ctrl_disable
+	jam 0,mem_voice_queue_count
+	jam 1,mem_mouse_sleep_deal_type
+	jam 0x10,mem_mouse_24g_tx_time_sum_count
+	rtn
+
+z_g24_pair_param_init:
+	jam 0x4a,mem_24g_pair_ch
+	fetch 4,mem_24g_pair_addr_new
+	store 4,mem_24g_pair_addr
+	rtn
+
+org 0x20001
+z_entrance1:
+    beq ZCODE_10,z_mouse_load_device_info_check
+    beq ZCODE_11,z_mouse_24g_attempt_fail
+    beq ZCODE_12,z_mouse_eeprom_load_le_att_list_info
+    rtn
+z_mouse_load_device_info_check:
+	call z_mouse_eeprom_load_le_att_list_info
+	call mouse_load_eeprom_info_check
+	call z_mouse_load_key_info_check_flag
+	fetch 1,mem_mouse_key_information_set_flag
+	call z_mouse_load_key_info_check,blank
+	fetch 1,mem_mouse_dpi
+	store 1,mem_mouse_last_dpi
+	arg 8,temp
+	arg msm_ms_auth_sn,rega
+	arg MOUSE_AUTH_INFO_OFFSET,regb
+	branch iicd_read_eep_data
+
+z_mouse_load_key_info_check_flag:
+	arg 1,temp
+	arg mem_mouse_key_information_set_flag,rega
+	arg MOUSE_VALUE_FLAG_OFFECT,regb
+	branch iicd_read_eep_data
+
+z_mouse_load_key_info_check:
+	arg 15,temp
+	arg mem_mouse_key_information_start,rega
+	arg MOUSE_VALUE_EEPROM_OFFECT,regb
+	branch iicd_read_eep_data
+
+z_mouse_24g_attempt_fail:
+	// call mouse_soft_agc_disable
+	// call device_fetch_normal_tx_power
+	// fetch 1,mem_24g_attempt_fail_flag
+	// nbranch mouse_24g_hibernate_set,blank
+	fetch 1,mem_24g_reconn_type
+	beq PAIR_AND_RECEIVER,mouse_24g_auto_pair_attempt_fail
+	beq FAST_CONN_AND_RECEIVER,z_mouse_24g_fast_conn_attempt_fail
+	branch mouse_24g_attempt_fail+4
+
+z_mouse_24g_fast_conn_attempt_fail:
+	fetch MOUSE_FLAG_LEN,mem_mouse_flag 
+	bbit1 MOUSE_ENABLE_24G_FIRST_AUTO_PAIRING,z_mouse_24g_start_auto_pair
+	bbit1 MOUSE_ENABLE_AUTO_24G_PARING,z_mouse_24g_start_auto_pair
+	branch mouse_24g_fast_conn_attempt_fail+3
+z_mouse_24g_start_auto_pair:
+	fetch 2,mem_24g_pair_timeout_init
+	store 2,mem_24g_reconn_timeout
+	jam PAIR_AND_RECEIVER,mem_24g_reconn_type
+	branch g24_reconn_start
+
+z_mouse_eeprom_load_le_att_list_info:
+	arg 820,temp
+	arg mem_ui_le_uuid_table_new,rega
+	arg 0x00,regb
+	fetch 2,mem_eeprom_att_list_base
+	branch iicd_read_eep_data_next
+
+
+org 0x30001
+z_entrance2:
+	beq ZCODE_20,z_g24_receive_ack_data_next
+	rtn
+z_g24_receive_ack_data_next:
+	fetch 1,mem_24g_rxpayload+3
+//	beq OPCODE_APPKEY,p_mouse_receive_dg_appkey_data
+//	beq OPCODE_SECRET,p_mouse_receive_dg_secret_data
+//	beq OPCODE_SN,p_mouse_receive_dg_sn_data
+//	beq OPCODE_CHIP_ID,p_mouse_receive_dg_chip_id_data
+	beq OPCODE_VOICE_START,z_mouse_receive_dg_voice_start_data
+	// beq OPCODE_VOICE_END,z_mouse_receive_dg_voice_end_data
+	beq OPCODE_GET_DEVICE_INFO,z_mouse_receive_dg_get_device_info_data
+	beq OPCODE_GET_DPI,z_mouse_receive_dg_get_dpi_data
+	beq OPCODE_SET_DPI,z_mouse_receive_dg_set_dpi_data
+	beq OPCODE_GET_BATTERY,z_mouse_receive_dg_get_battery_data
+	beq OPCODE_GET_DEVICE_TYPE,z_mouse_receive_dg_get_device_type_data
+	beq OPCODE_SET_KEY_FUCTION,z_mouse_receive_dg_set_key_fuction_data
+	rtn
+/*
+p_mouse_receive_dg_appkey_data:
+	arg APPKEY,queue
+	branch p_ms_tx_nor_pro_flag_enable
+p_mouse_receive_dg_secret_data:
+	arg SECRET,queue
+	branch p_ms_tx_nor_pro_flag_enable
+p_mouse_receive_dg_sn_data:
+	arg SN_CODE,queue
+	branch p_ms_tx_nor_pro_flag_enable
+p_mouse_receive_dg_chip_id_data:
+	arg CHIP_ID,queue
+	branch p_ms_tx_nor_pro_flag_enable
+*/
+z_mouse_receive_dg_voice_start_data:
+	arg VOICE_START,queue
+	branch p_ms_tx_nor_pro_flag_enable
+// z_mouse_receive_dg_voice_end_data:
+// 	arg VOICE_END,queue
+// 	branch p_ms_tx_nor_pro_flag_enable
+z_mouse_receive_dg_get_device_info_data:
+	arg DEVICE_INFO,queue
+	branch p_ms_tx_nor_pro_flag_enable
+z_mouse_receive_dg_get_dpi_data:
+	jam APP_ASK,mem_mouse_dpi_type
+	branch p_mouse_g24_tx_dpi_data
+z_mouse_receive_dg_set_dpi_data:
+	arg mem_24g_rxpayload+1,contr
+	call p_mouse_receive_dpi_check
+	arg SET_DPI,queue
+	branch p_ms_tx_nor_pro_flag_enable
+z_mouse_receive_dg_get_battery_data:
+	jam APP_ASK,mem_mouse_battery_type
+	arg GET_BATTERY,queue
+	branch p_ms_tx_nor_pro_flag_enable
+z_mouse_receive_dg_get_device_type_data:
+	arg GET_DEVICE_TYPE,queue
+	branch p_ms_tx_nor_pro_flag_enable
+z_mouse_receive_dg_set_key_fuction_data:
+	jam 0,mem_mouse_key_information_set_flag
+	arg mem_24g_rxpayload+1,contr
+	call p_mouse_receive_key_fuction_check
+	arg SET_KEY_FUCTION,queue
+	branch p_ms_tx_nor_pro_flag_enable
+
+org 0x40001
+z_entrance3:
+	beq ZCODE_30,z_g24_send_http_info_check
+	rtn
+//====================http send========================//
+z_g24_send_http_info_check:
+	fetch 1,mem_ms_rf_data_flag
+	branch z_g24_only_send_http_info,blank
+z_g24_send_rf_http_info:
+	fetch 1,mem_24g_data_type
+	set1 HTTP_BIT,pdata
+	store 1,mem_ms_24g_temp_buff
+	jam 0xff,mem_ms_24g_temp_buff+1
+	arg 2,temp
+	arg mem_ms_24g_temp_buff,rega
+	branch p_g24_send_rf_other_data
+	rtn
+z_g24_only_send_http_info:
+	jam 2,mem_24g_datalen
+	fetch 1,mem_24g_data_type
+	set1 HTTP_BIT,pdata
+	store 1,mem_24g_txbuf_new
+	jam 0xff,mem_24g_txbuf_new+1
+	rtn
+
+org 0x50001
+z_entrance4:
+	beq ZCODE_40,z_g24_tx_device_info
+	beq ZCODE_41,z_g24_get_dpi
+	rtn
+//device info
+z_g24_tx_device_info:
+	fetch 1,mem_ms_rf_data_flag
+	branch z_g24_only_send_device_info,blank
+	branch z_g24_send_device_info
+
+z_g24_only_send_device_info:
+	fetch 1,mem_24g_data_type
+	set1 NOR_PRO_BIT,pdata
+	store 1,mem_24g_txbuf_new
+	jam START_FLAG,mem_24g_txbuf_new+1
+	jam DEVICE_INFO_LEN,mem_24g_txbuf_new+2
+	jam OPCODE_GET_DEVICE_INFO,mem_24g_txbuf_new+3
+	jam DEVICE_INFO_LEN+NOR_PRO_HEADER_LEN,mem_24g_datalen
+	arg AUTH_LEN,loopcnt
+	arg mem_ms_auth_appkey,contr
+	arg mem_24g_txbuf_new+4,contw
+	call memcpy
+	branch p_g24_ms_info_set
+
+z_g24_send_device_info:
+	fetch 1,mem_24g_data_type
+	set1 NOR_PRO_BIT,pdata
+	store 1,mem_ms_24g_temp_buff
+	jam START_FLAG,mem_ms_24g_temp_buff+1
+	jam DEVICE_INFO_LEN,mem_ms_24g_temp_buff+2
+	jam OPCODE_GET_DEVICE_INFO,mem_ms_24g_temp_buff+3
+	arg AUTH_LEN,loopcnt
+	arg mem_ms_auth_appkey,contr
+	arg mem_ms_24g_temp_buff+4,contw
+	call memcpy
+	call p_g24_ms_info_set
+	arg DEVICE_INFO_LEN+4,temp
+	arg mem_ms_24g_temp_buff,rega
+	branch p_g24_send_rf_other_data
+
+
+//get dpi info
+z_g24_get_dpi:
+	fetch 1,mem_ms_rf_data_flag
+	branch z_g24_only_send_dpi_info,blank
+	branch z_g24_send_dpi_info
+
+z_g24_only_send_dpi_info:
+	fetch 1,mem_24g_data_type
+	set1 NOR_PRO_BIT,pdata
+	store 1,mem_24g_txbuf_new
+	jam START_FLAG,mem_24g_txbuf_new+1
+	jam NOR_PRO_HEADER_LEN,mem_24g_txbuf_new+2
+	jam OPCODE_GET_DPI,mem_24g_txbuf_new+3
+	fetch 1,mem_mouse_dpi
+	store 1,mem_24g_txbuf_new+4
+	fetch 1,mem_mouse_dpi_type
+	istore 1,contw
+	jam NOR_PRO_GET_DPI_LEN,mem_24g_datalen
+	rtn
+z_g24_send_dpi_info:
+	fetch 1,mem_24g_data_type
+	set1 NOR_PRO_BIT,pdata
+	store 1,mem_ms_24g_temp_buff
+	jam START_FLAG,mem_ms_24g_temp_buff+1
+	jam NOR_PRO_HEADER_LEN,mem_ms_24g_temp_buff+2
+	jam OPCODE_GET_DPI,mem_ms_24g_temp_buff+3
+	fetch 1,mem_mouse_dpi
+	store 1,mem_ms_24g_temp_buff+4
+	fetch 1,mem_mouse_dpi_type
+	istore 1,contw
+	arg NOR_PRO_GET_DPI_LEN,temp
+	arg mem_ms_24g_temp_buff,rega
+	branch p_g24_send_rf_other_data
+
+
+org 0x60001
+z_entrance5:
+	beq ZCODE_50,z_g24_set_dpi
+	beq ZCODE_51,z_g24_get_battery
+	rtn
+//set dpi info
+z_g24_set_dpi:
+	fetch 1,mem_ms_rf_data_flag
+	branch z_g24_only_set_dpi_info,blank
+	branch z_g24_set_dpi_info
+
+z_g24_only_set_dpi_info:
+	fetch 1,mem_24g_data_type
+	set1 NOR_PRO_BIT,pdata
+	store 1,mem_24g_txbuf_new
+	jam START_FLAG,mem_24g_txbuf_new+1
+	jam SET_DPI_LEN,mem_24g_txbuf_new+2
+	jam OPCODE_SET_DPI,mem_24g_txbuf_new+3
+	fetch 1,mem_mouse_dpi_set_result
+	store 1,mem_24g_txbuf_new+4
+	jam NOR_PRO_RES_LEN,mem_24g_datalen
+	rtn
+z_g24_set_dpi_info:
+	fetch 1,mem_24g_data_type
+	set1 NOR_PRO_BIT,pdata
+	store 1,mem_ms_24g_temp_buff
+	jam START_FLAG,mem_ms_24g_temp_buff+1
+	jam SET_DPI_LEN,mem_ms_24g_temp_buff+2
+	jam OPCODE_SET_DPI,mem_ms_24g_temp_buff+3
+	fetch 1,mem_mouse_dpi_set_result
+	store 1,mem_ms_24g_temp_buff+4
+	arg NOR_PRO_RES_LEN,temp
+	arg mem_ms_24g_temp_buff,rega
+	branch p_g24_send_rf_other_data
+
+
+//send battery info
+z_g24_get_battery:
+	fetch 1,mem_ms_rf_data_flag
+	branch z_g24_only_send_battery_info,blank
+	branch z_g24_send_battery_info
+
+z_g24_only_send_battery_info:
+	fetch 1,mem_24g_data_type
+	set1 NOR_PRO_BIT,pdata
+	store 1,mem_24g_txbuf_new
+	jam START_FLAG,mem_24g_txbuf_new+1
+	jam NOR_PRO_HEADER_LEN,mem_24g_txbuf_new+2
+	jam OPCODE_GET_BATTERY,mem_24g_txbuf_new+3
+	fetch 1,mem_le_battery_level_percentage
+	store 1,mem_24g_txbuf_new+4
+	fetch 1,mem_mouse_battery_type
+	istore 1,contw
+	jam NOR_PRO_GET_DPI_LEN,mem_24g_datalen
+	rtn
+
+z_g24_send_battery_info:
+	fetch 1,mem_24g_data_type
+	set1 NOR_PRO_BIT,pdata
+	store 1,mem_ms_24g_temp_buff
+	jam START_FLAG,mem_ms_24g_temp_buff+1
+	jam NOR_PRO_HEADER_LEN,mem_ms_24g_temp_buff+2
+	jam OPCODE_GET_BATTERY,mem_ms_24g_temp_buff+3
+	fetch 1,mem_le_battery_level_percentage
+	store 1,mem_ms_24g_temp_buff+4
+	fetch 1,mem_mouse_battery_type
+	istore 1,contw
+	arg NOR_PRO_GET_DPI_LEN,temp
+	arg mem_ms_24g_temp_buff,rega
+	branch p_g24_send_rf_other_data
+
+
+org 0x70001
+z_entrance6:
+	beq ZCODE_60,z_g24_get_device_type
+	beq ZCODE_61,z_g24_set_key_fuction
+	rtn
+//send device type info
+z_g24_get_device_type:
+	fetch 1,mem_ms_rf_data_flag
+	branch z_g24_only_send_device_type_info,blank
+	branch z_g24_send_device_type_info
+
+z_g24_only_send_device_type_info:
+	fetch 1,mem_24g_data_type
+	set1 NOR_PRO_BIT,pdata
+	store 1,mem_24g_txbuf_new
+	jam START_FLAG,mem_24g_txbuf_new+1
+	fetch 1,mem_mouse_device_type
+	increase 2,pdata
+	store 1,mem_24g_txbuf_new+2
+	jam OPCODE_GET_DEVICE_TYPE,mem_24g_txbuf_new+3
+	fetchr loopcnt,1,mem_mouse_device_type
+	arg mem_mouse_device_type+1,contr
+	arg mem_24g_txbuf_new+4,contw
+	call memcpy
+	fetch 1,mem_mouse_device_type
+	increase 4,pdata
+	store 1,mem_24g_datalen
+	rtn
+z_g24_send_device_type_info:
+	fetch 1,mem_24g_data_type
+	set1 NOR_PRO_BIT,pdata
+	store 1,mem_ms_24g_temp_buff
+	jam START_FLAG,mem_ms_24g_temp_buff+1
+	
+	fetch 1,mem_mouse_device_type
+	increase 2,pdata
+	store 1,mem_ms_24g_temp_buff+2
+	jam OPCODE_GET_DEVICE_TYPE,mem_ms_24g_temp_buff+3
+	fetchr loopcnt,1,mem_mouse_device_type
+	arg mem_mouse_device_type+1,contr
+	arg mem_ms_24g_temp_buff+4,contw
+	call memcpy
+	fetcht 1,mem_mouse_device_type
+	increase 4,temp
+	arg mem_ms_24g_temp_buff,rega
+	branch p_g24_send_rf_other_data
+
+
+//set key fuction info
+z_g24_set_key_fuction:	
+	fetch 1,mem_ms_rf_data_flag
+	branch z_g24_only_set_key_fuction_info,blank
+	branch z_g24_set_key_fuction_info
+z_g24_only_set_key_fuction_info:
+	fetch 1,mem_24g_data_type
+	set1 NOR_PRO_BIT,pdata
+	store 1,mem_24g_txbuf_new
+	jam START_FLAG,mem_24g_txbuf_new+1
+	jam SET_DPI_LEN,mem_24g_txbuf_new+2
+	jam OPCODE_SET_KEY_FUCTION,mem_24g_txbuf_new+3
+	jam 1,mem_24g_txbuf_new+4
+	jam NOR_PRO_RES_LEN,mem_24g_datalen
+	rtn
+z_g24_set_key_fuction_info:
+	fetch 1,mem_24g_data_type
+	set1 NOR_PRO_BIT,pdata
+	store 1,mem_ms_24g_temp_buff
+	jam START_FLAG,mem_ms_24g_temp_buff+1
+	jam SET_DPI_LEN,mem_ms_24g_temp_buff+2
+	jam OPCODE_SET_KEY_FUCTION,mem_ms_24g_temp_buff+3
+	jam 1,mem_ms_24g_temp_buff+4
+	arg NOR_PRO_RES_LEN,temp
+	arg mem_ms_24g_temp_buff,rega
+	branch p_g24_send_rf_other_data
Index: sched/1305.dat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/1305.dat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/1305.dat	(working copy)
@@ -0,0 +1,40 @@
+
+
+mem_system_clk:0c
+mem_lpm_xtalcnt:35 3f 64
+mem_lpm_isogate:db 7b 3b
+mem_lpm_hibernate_switch:20
+mem_lpm_ldo_sel:00
+mem_lpm_sysctl:08
+mem_lpm_hv_sel:b4
+
+mem_fcomp_div:18
+mem_xtal_c_sel:4d #0a:EVB-2025-197:+3k  0b:EVB-2025-210:+1k  3e:2025-210-YC1032-S-Mouse-Demo-V1.0  4d:2025-230-YC1032-S-MZ-AiMouse-V1.0:+4K 3f:+7k
+mem_gpio_wakeup_cfg:00 00 20 00 00 00 00 00 00 00 00 00
+
+mem_version:08 0e 05 03 00
+mem_le_tx2m_delay:20
+
+mem_rx_window_sniff:00 0c
+
+mem_gain_fix:ff	#00:soft agc; ff:hw agc
+mem_gain_table:04 00 00
+mem_gain_second_agc_en:08	#hw agc: 0:second agc disable
+mem_otp_load_check_sum:5a
+
+mem_adc_dma_enable:00
+mem_adc_saddr_ptr:00 07
+mem_adc_eaddr_ptr:ff 07
+
+mem_ring_ibias_trim:a0
+mem_ring_ibias_vtune_high:bc 02 #700mv
+mem_ring_ibias_vtune_low:90 01 #400mv
+mem_ring_ibias_calc_adc_gpio:03
+mem_ring_ibias_calc_adc_channel:09
+
+mem_rf_init_data:
+88 40
+ff
+mem_rf_init_ptr:mem_rf_init_data
+
+
Index: sched/ble_shutter_gatt_list.dat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/ble_shutter_gatt_list.dat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/ble_shutter_gatt_list.dat	(working copy)
@@ -0,0 +1,313 @@
+01
+00
+02
+00
+28
+02
+01
+18
+02
+00
+02
+03
+28
+01
+20
+03
+00
+02
+05
+2a
+01
+00
+04
+00
+02
+02
+29
+02
+00
+00
+05
+00
+02
+00
+28
+02
+00
+18
+06
+00
+02
+03
+28
+01
+02
+07
+00
+02
+00
+2a
+13
+43
+68
+69
+70
+73
+65
+61
+2d
+42
+4c
+45
+20
+20
+20
+20
+20
+20
+20
+20
+08
+00
+02
+03
+28
+01
+02
+09
+00
+02
+01
+2a
+02
+c1
+03
+0a
+00
+02
+03
+28
+01
+02
+0b
+00
+02
+04
+2a
+08
+06
+00
+06
+00
+64
+00
+2c
+01
+0c
+00
+02
+00
+28
+02
+0a
+18
+0d
+00
+02
+03
+28
+01
+02
+0e
+00
+02
+50
+2a
+07
+02
+8a
+24
+66
+82
+01
+00
+0f
+00
+02
+00
+28
+02
+12
+18
+10
+00
+02
+03
+28
+01
+06
+11
+00
+02
+4e
+2a
+01
+01
+12
+00
+02
+03
+28
+01
+12
+13
+00
+02
+4d
+2a
+02
+00
+00
+14
+00
+02
+02
+29
+02
+00
+00
+15
+00
+02
+08
+29
+02
+02
+01
+16
+00
+02
+03
+28
+01
+12
+17
+00
+02
+4d
+2a
+02
+00
+00
+18
+00
+02
+02
+29
+02
+00
+00
+19
+00
+02
+08
+29
+02
+03
+01
+1a
+00
+02
+03
+28
+01
+02
+1b
+00
+02
+4b
+2a
+1b
+05
+0c
+09
+01
+a1
+01
+85
+02
+09
+e9
+09
+ea
+09
+e2
+09
+30
+15
+01
+25
+0c
+75
+10
+95
+01
+81
+00
+c0
+1c
+00
+02
+03
+28
+01
+02
+1d
+00
+02
+4a
+2a
+04
+11
+01
+00
+01
+1e
+00
+02
+03
+28
+01
+04
+1f
+00
+02
+4c
+2a
+01
+00
+20
+00
+02
+00
+28
+02
+0f
+18
+21
+00
+02
+03
+28
+01
+12
+22
+00
+02
+19
+2a
+01
+63
+00
+00
\ No newline at end of file
Index: sched/ble_shutter_key_value_list.dat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/ble_shutter_key_value_list.dat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/ble_shutter_key_value_list.dat	(working copy)
@@ -0,0 +1,40 @@
+02
+13
+00
+02
+00
+02
+13
+00
+01
+00
+02
+13
+00
+04
+00
+02
+13
+00
+06
+00
+02
+13
+00
+05
+00
+02
+13
+00
+00
+00
+02
+17
+00
+00
+28
+02
+17
+00
+00
+00
Index: sched/keyboard_ble_hid_map_magic_keyboard.dat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/keyboard_ble_hid_map_magic_keyboard.dat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/keyboard_ble_hid_map_magic_keyboard.dat	(working copy)
@@ -0,0 +1,188 @@
+ba
+00
+05
+0c
+09
+01
+a1
+01
+85
+05
+15
+00
+25
+01
+75
+01
+95
+18
+0a
+83
+01
+09
+ea
+09
+e9
+09
+e2
+09
+b6
+09
+b5
+09
+cd
+09
+b7
+0a
+23
+02
+0a
+8a
+01
+0a
+94
+01
+0a
+2a
+02
+0a
+92
+01
+0a
+21
+02
+0a
+24
+02
+0a
+07
+03
+0a
+ae
+01
+09
+70
+09
+6f
+09
+30
+09
+b8
+0a
+25
+02
+0a
+26
+02
+0a
+27
+02
+81
+02
+c0
+05
+01
+09
+06
+a1
+01
+85
+02
+75
+01
+95
+08
+05
+07
+19
+e0
+29
+e7
+15
+00
+25
+01
+81
+02
+95
+01
+75
+08
+81
+03
+95
+05
+75
+01
+05
+08
+19
+01
+29
+05
+91
+02
+95
+01
+75
+03
+91
+03
+95
+06
+75
+08
+15
+00
+26
+ff
+00
+05
+07
+19
+00
+2a
+ff
+00
+81
+00
+05
+ff
+09
+03
+75
+08
+95
+01
+81
+02
+c0
+05
+01
+09
+80
+a1
+01
+85
+04
+15
+00
+25
+01
+75
+01
+95
+03
+19
+81
+29
+83
+81
+02
+95
+01
+75
+05
+81
+03
+c0
\ No newline at end of file
Index: sched/keyboard_ble_hid_map_n_key_rollover_keyboard.dat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/keyboard_ble_hid_map_n_key_rollover_keyboard.dat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/keyboard_ble_hid_map_n_key_rollover_keyboard.dat	(working copy)
@@ -0,0 +1,204 @@
+ca
+00
+05
+0c
+09
+01
+a1
+01
+85
+05
+15
+00
+25
+01
+75
+01
+95
+18
+0a
+83
+01
+09
+ea
+09
+e9
+09
+e2
+09
+b6
+09
+b5
+09
+cd
+09
+b7
+0a
+23
+02
+0a
+8a
+01
+0a
+94
+01
+0a
+2a
+02
+0a
+92
+01
+0a
+21
+02
+0a
+24
+02
+0a
+07
+03
+0a
+ae
+01
+09
+70
+09
+6f
+09
+30
+09
+b8
+0a
+25
+02
+0a
+26
+02
+0a
+27
+02
+81
+02
+c0
+05
+01
+09
+06
+a1
+01
+85
+02
+75
+01
+95
+08
+05
+07
+19
+e0
+29
+e7
+15
+00
+25
+01
+81
+02
+95
+01
+75
+08
+81
+03
+95
+05
+75
+01
+05
+08
+19
+01
+29
+05
+91
+02
+95
+01
+75
+03
+91
+03
+95
+06
+75
+08
+15
+00
+26
+ff
+00
+05
+07
+19
+00
+2a
+ff
+00
+81
+00
+c0
+05
+01
+09
+06
+a1
+01
+85
+01
+95
+70
+75
+01
+15
+00
+25
+01
+05
+07
+19
+00
+2a
+ff
+00
+81
+02
+c0
+05
+01
+09
+80
+a1
+01
+85
+04
+15
+00
+25
+01
+75
+01
+95
+03
+19
+81
+29
+83
+81
+02
+95
+01
+75
+05
+81
+03
+c0
\ No newline at end of file
Index: sched/keyboard_ble_hid_map_only_keyboard.dat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/keyboard_ble_hid_map_only_keyboard.dat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/keyboard_ble_hid_map_only_keyboard.dat	(working copy)
@@ -0,0 +1,178 @@
+b0
+00
+05
+0c
+09
+01
+a1
+01
+85
+05
+15
+00
+25
+01
+75
+01
+95
+18
+0a
+83
+01
+09
+ea
+09
+e9
+09
+e2
+09
+b6
+09
+b5
+09
+cd
+09
+b7
+0a
+23
+02
+0a
+8a
+01
+0a
+94
+01
+0a
+2a
+02
+0a
+92
+01
+0a
+21
+02
+0a
+24
+02
+0a
+07
+03
+0a
+ae
+01
+09
+70
+09
+6f
+09
+30
+09
+b8
+0a
+25
+02
+0a
+26
+02
+0a
+27
+02
+81
+02
+c0
+05
+01
+09
+06
+a1
+01
+85
+02
+75
+01
+95
+08
+05
+07
+19
+e0
+29
+e7
+15
+00
+25
+01
+81
+02
+95
+01
+75
+08
+81
+03
+95
+05
+75
+01
+05
+08
+19
+01
+29
+05
+91
+02
+95
+01
+75
+03
+91
+03
+95
+06
+75
+08
+15
+00
+26
+ff
+00
+05
+07
+19
+00
+2a
+ff
+00
+81
+00
+c0
+05
+01
+09
+80
+a1
+01
+85
+04
+15
+00
+25
+01
+75
+01
+95
+03
+19
+81
+29
+83
+81
+02
+95
+01
+75
+05
+81
+03
+c0
\ No newline at end of file
Index: sched/mouse.dat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/mouse.dat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/mouse.dat	(working copy)
@@ -0,0 +1,702 @@
+mem_mouse_flag:
+#mouse flag byte1
+#bit0 MOUSE_SELECT_DEVICE_FLAG
+#bit1 MOUSE_24G_PAIRING_FLAG
+#bit2 MOUSE_STORE_EEPROM_FLAG
+#bit3 MOUSE_BT_CANNEL_RECONN_FLAG
+#bit4 MOUSE_LOW_VOLTAGE_FLAG
+#bit5 MOUSE_BT_DISCOVERY_BUTTON_DOWN_FLAG
+#bit6 MOUSE_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG
+#bit7 MOUSE_ENABLE_SPI2
+04
+
+#mouse flag byte2
+#bit0 MOUSE_ENABLE_BLE_RANDOM_ADDRE
+#bit1 MOUSE_ENABLE_2K_EEPROM
+#bit2 MOUSE_ENABLE_WAKEUP_FROM_POWER
+#bit3 MOUSE_ENABLE_16M
+#bit4 MOUSE_ENABLE_USB
+#bit5 MOUSE_ENABLE_24G_SEARCH_DONGLE
+#bit6 MOUSE_ENABLE_LOAD_AND_STORE_DPI
+#bit7 MOUSE_ENABLE_24G
+85
+
+#mouse flag byte3
+#bit0 MOUSE_ENABLE_FLASH
+#bit1 MOUSE_ENABLE_EEPROM
+#bit2 MOUSE_ENABLE_OTP
+#bit3 MOUSE_ENABLE_ADC
+#bit4 MOUSE_ENABLE_KEYBOARD
+#bit5 MOUSE_ENABLE_DOUBLE_DPI_KEY
+#bit6 MOUSE_ENABLE_SWITCH_GPIO_CONNECT_VIN
+5a
+
+#mouse flag byte4
+#bit0 MOUSE_ENABLE_24G_250Hz
+#bit1 MOUSE_ENABLE_24G_500Hz
+#bit2 MOUSE_ENABLE_24G_1000
+#bit3 MOUSE_ENABLE_BT_125Hz
+#bit4 MOUSE_ENABLE_DPI_LEVEL_4
+#bit5 MOUSE_ENABLE_USB_250
+#bit6 MOUSE_ENABLE_USB_500
+#bit7 MOUSE_ENABLE_USB_1000
+01
+
+#mouse flag byte5
+#bit0 MOUSE_ENABLE_1IO2LED
+#bit1 MOUSE_ENABLE_BT_RECONN_LED_EFFECT
+#bit2 MOUSE_ENABLE_LOW_LED_BLINK_LIMIT
+#bit3 MOUSE_ENABLE_LOW_LED
+#bit4 MOUSE_ENABLE_LOW_FOR_LED
+#bit5 MOUSE_ENABLE_DPI_FOR_LED
+02
+
+#mouse flag byte6 
+#bit0 MOUSE_ENABLE_SELECT_DEVICE_BY_DPI_BUTTON
+#bit1 MOUSE_ENABLE_SELECT_DEVICE_BY_PB_BUTTON
+#bit2 MOUSE_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO
+#bit3 MOUSE_ENABLE_DPI_KEY_CONNECT_GND
+#bit4 MOUSE_ENABLE_ANOTHER_DPI_KEY_CONNECT_GND
+#bit5 MOUSE_ENABLE_PB_BUTTON_CONNECT_GND
+#bit6 MOUSE_ENABLE_FIRE_KEY_CONNECT_GND
+#bit7 MOUSE_ENABLE_CUSTOMER_KEY_CONNECT_VIN
+04
+
+#mouse flag byte7
+#bit0 MOUSE_ENABLE_AUTO_24G_PARING
+#bit1 MOUSE_ENABLE_24G_POWER_ON_PAIRING
+#bit2 MOUSE_ENABLE_COMMBINATION_KEY_BY_24G_PAIRING
+#bit3 MOUSE_ENABLE_BT_RECONNECT_TIMEOUT_ENTER_DISCOVERY
+#bit4 MOUSE_ENABLE_PB_BUTTON_SHORT_PRESS_ENTER_DISCOVERY
+#bit5 MOUSE_ENABLE_COMMBINATION_KEY_BY_BT_DISCOVERY
+#bit6 MOUSE_ENABLE_DPI_KEY_LONG_PRESS_DISCONVERY
+#bit7 MOUSE_ENABLE_PB_BUTTON_LONG_PRESS_DISCONVERY
+22
+
+#mouse flag byte8
+#bit0 MOUSE_ENABLE_SMOOTHER
+#bit1 MOUSE_ENABLE_XY_OFFSET
+#bit2 MOUSE_ENABLE_24G_AUTO_PAIR_NERVER_BEEN_PAIRED
+#bit3 MOUSE_ENABLE_LE_BATTERY_SERVICE_CANCEL
+#bit4 MOUSE_ENABLE_WHEEL_WAKE_UP_CANCEL
+#bit5 MOUSE_ENABLE_24G_2M_PHY
+#bit6 MOUSE_ENABLE_24G_FIRST_AUTO_PAIRING
+1f
+
+
+mem_device_switch_gpio:02
+mem_device_reuse_2ice_gpio:05
+mem_sensor_motion_gpio:ff
+mem_whee_a_data_gpio:0b
+mem_whee_b_data_gpio:0a
+
+mem_mouse_param_config:
+0e #mem_lbutton_gpio
+08 #mem_mbutton_gpio
+0f #mem_rbutton_gpio
+ff #mem_bk_button_gpio
+ff #mem_fw_button_gpio
+ff #mem_dpi_button_gpio
+16 #mem_mouse_sensor_sclk_gpio
+17 #mem_mouse_sensor_sdio_gpio
+ff #mem_select_sensor_angle_gpio
+01 #mem_sensor_angle_default
+01 #mem_sensor_angle_gnd
+01 #mem_sensor_angle_vin
+00 #mem_config_sensor_dpi	#power on default dpi 00--1200  01--1600
+ff #mem_whee_ta_data_gpio
+ff #mem_whee_tb_data_gpio
+12 #mem_matrix_public_gpio
+ff#mem_config_select_device_button_gpio
+ff #mem_customer_key_gpio
+ff #mem_firebutton_gpio
+ff #mem_dpi_another_button_gpio
+ff #mem_mouse_logo_led_gpio
+01 #mem_mouse_1io2led_multi_24gled
+00 #mem_mouse_1io2led_multi_bt1led
+ff #mem_mouse_1io2led_multi_bt2led
+03 #mem_mouse_low_voltage_alarm_gpio
+ff #mem_mouse_dpi_gpio
+
+#mouse sensor angle
+#0x00 MOUSE_6CLK_ANGLE
+#0X01 MOUSE_9CLK_ANGLE
+#0X02 MOUSE_12CLK_ANGLE
+#0X03 MOUSE_3CLK_ANGLE
+
+
+#1io2led multi start
+#time parm
+mem_mouse_le_reconn_blink_limit:00		#00:disable 	01:enable
+mem_mouse_multi_led_powon_timer_init:0a	#1s
+mem_mouse_multi_24gled_blink_timer_init:05			#24gled blink time		500ms on,500ms off
+mem_mouse_multi_le_discovery_blink_timer_init:02		#le discovery blink time	500ms on,500ms off
+mem_mouse_multi_le_reconn_blink_timer_init:05			#le reconn blink time		500ms on,500ms off
+mem_mouse_low_led_blink_timer:14				#low blink time			1000ms on,1000ms off
+mem_mouse_dpi_led_blink_timer_init:02			#dpi blink time			200ms on,200ms off
+#blink count=count/2
+mem_mouse_multi_24gled_blink_count_init:02		#24g count
+mem_mouse_multi_le_reconn_blink_count_init:06	#le reconn count
+mem_mouse_multi_lowled_blink_count_init:0a		#low count=count
+mem_mouse_dpi_led_delay_count_init:0a		#1s
+#1io2led multi end
+
+#time parm
+mem_mouse_logo_led_on_time_init:58 02	#1min
+mem_device_24g_pair_timeout_init:58 02  #60s	    24g reconn timer&pair timer
+mem_device_24g_reconn_timeout_init:64 #10s
+mem_device_24g_power_on_fast_conn_timer:05 00	#500ms
+mem_device_direct_timeout:64  #10s
+mem_device_discovery_timeout:b0 04	#2min
+mem_device_fast_direct_timeout:0a #1s
+mem_device_no_data_timeout:70 17   #10mins
+
+#device parm
+mem_device_option:08
+mem_device_number:02   #01:only 2.4g   02:2.4g+ble    03:2.4g+ble+ble
+
+mem_lpm_mode:01
+mem_lpm_mult:20
+mem_lpm_mult_init:20
+
+mem_device_set_analog_bit_set:00 00 00
+
+mem_device_flag:
+00		#00--24g 01--bt
+34
+ff ff ff ff ff ff			#eeprom need
+mem_device2_type:
+34
+ff ff ff ff ff ff			#eeprom need
+mem_device3_type:
+34
+ff ff ff ff ff ff			#eeprom need
+
+mem_mouse_key_information_start:
+03 00 20 20 00
+03 00 22 22 00
+03 00 30 23 00
+
+mem_customer_key_press_init:
+# 05 00 01 00 00 00 00 00 00 00#AC Home
+#05 00 00 02 00 00 00 00 00 00#Volume Down
+#05 00 00 04 00 00 00 00 00 00#Volume Up
+#00 0a 00 72 00 00 00 00 00#copilot=win+shift+f23
+#00 05 00 04 00 00 00 00 00#CTRL+ALT+A
+#02 01 00 00 00 00 00 00 00 #POWERDOWN
+00 08 00 07 00 00 00 00 00#One-click desktop
+#03 ea 00 00 00 00 00 00 00 #VOL DOWN
+
+#bit0:mouse_key_l    bit1:mouse_key_r  bit2:mouse_key_m
+mem_mouse_commbination_key_24g:03
+mem_mouse_commbination_key_bt:07
+mem_mouse_commbination_key_dpi:ff
+mem_mouse_commbination_key_select_device:ff
+mem_mouse_commbination_dpi_timer:1e	#3s
+mem_mouse_commbination_select_device_timer:1e	#3s
+
+mem_store_key_info_delay_timer_init:05
+#ui
+mem_ui_button_timeout:1e
+
+#2.4g
+mem_24g_lap: 24 62 81 a1 51 61
+mem_24g_fast_conn_enable:01
+mem_24g_fast_conn_addr:0f 0f 0f 0f
+mem_24g_long_sleep_set_level:02    #00--30ms   01--50ms  02--80ms  03--100ms
+mem_24g_rx_window:c0 12     #400us  ## e0 2e#1ms #transmitter long range min:520us
+
+mem_mouse_24g_fast_hop_count_2ms:09	#report 500hz
+mem_mouse_24g_tsniff_2ms:c0 5d 00 00
+
+mem_mouse_24g_short_sleep_set_4ms:6a 63 00	#1662us
+mem_mouse_24g_long_sleep_set_4ms:80 bb 00
+mem_mouse_24g_tsniff_4ms:f8 bb 00 00
+
+mem_mouse_24g_short_sleep_set_8ms:1c 1f 01
+mem_mouse_24g_long_sleep_set_8ms:00 77 01
+mem_mouse_24g_tsniff_8ms:00 77 01 00
+
+mem_device_24g_pair_tx_power:94 #-20dBm
+mem_24g_enter_hibernate:00 48 60
+mem_24g_long_sleep_param_update_timer_init:05 00	#500ms
+mem_24g_transmit_by_interrupt_exit_count_init:50 00
+mem_device_24g_search_dongle_time_init:64 00	#10s
+mem_store_information_delay_timer_init:01
+
+mem_mouse_long_mult_count:02
+
+#ble
+mem_le_lap:34 47 29 51 31 41
+mem_le_adv_channel_map:07
+mem_local_rx_max_octets:fb 00 48 08 fb 00 48 08  # 1b
+mem_le_battery_level_updata_timer_init:96 00
+
+mem_le_keyboard_handle:1b 00
+mem_le_notify_handle:1f 00
+mem_le_multimedia_handle:23 00
+mem_le_systemctrl_handle:27 00
+mem_le_pairing_handle:39 00#2d 00
+mem_le_battery_level_handle:13 00#3b 00 #30 00
+
+mem_le_protocol_rx_handle:36 00
+mem_le_protocol_tx_handle:2e 00
+mem_le_audio_tx_handle:32 00
+
+mem_le_adv_data_len:1f
+mem_le_adv_data:
+#flag
+02 01 05 
+#uuid
+03 03 12 18 
+#appearance
+03 19 c2 03
+
+mem_le_adv_swift_pair:
+#microsoft swift pair
+06 ff 06 00 03 00 80	
+#name
+'\09AI Mouse
+
+mem_le_scan_data_len:1f
+mem_le_scan_data:
+#name
+'\09AI Mouse
+
+
+mem_le_name_len:
+'AI Mouse
+
+mem_le_name_patch_len:	#max 18bytes
+'AI Mouse
+
+mem_le_interval_min:
+06 00 #min interval
+09 00 #max interval
+20 00 #latency
+2c 01 #timeout
+
+
+mem_le_adv_ind:03 12 18
+mem_le_adv_direct_ind:ff 00 00
+
+mem_flash_base:00 50 00
+mem_eeprom_base:80 3a
+mem_eeprom_block_size:80
+mem_eeprom_att_list_base:00 34
+
+#zcode
+mem_zcode_current_number:ff
+mem_xip_flash_offset:00 00
+mem_zcode_head:20 20 00 40
+mem_eeprom_start_addr:00 00
+
+#usb
+mem_usb_offline_check_gpio:ff
+
+#rf
+mem_tx_power:01	#00--0db 01--3db  02--5db  03--f3db  04--f5db
+mem_rssi_buff_index:07
+mem_rssi_signal_buf_ptr:mem_mouse_rssi_signal_buf
+mem_rssi_dis_min_24g_init:85
+mem_rssi_dis_max_24g_init:90
+mem_rssi_dis_min_ble_init:75
+mem_rssi_dis_max_ble_init:80
+mem_rssi_hex_received_max_value_init:63
+mem_power_ctrl_pac_succ_cnt_init:7d
+
+#adc config
+mem_adc_reference_mode:01 #01 reference 3v 02:reference 1.8v
+mem_adc_config_flag:02
+#01 ADC_CONFIG_HVIN
+#02 ADC_CONFIG_GPIO
+mem_adc_clkdiv:0a
+mem_adc_channel:09
+#00 ADC_CH_VBAT
+#01 ADC_CH_VDCDC5V
+#06 ADC_CH_GPIO18
+#07 ADC_CH_GPIO10
+#08 ADC_CH_GPIO9
+#09 ADC_CH_GPIO12
+#0a ADC_CH_GPIO6
+#0b ADC_CH_GPIO20
+#0c ADC_CH_GPIO21
+#0d ADC_CH_GPIO22
+#0e ADC_CH_GPIO13
+
+#adc
+mem_device_vdd_full_vol:94 00		#1.5V
+78 00#mem_device_vdd_empty_vol  :0.9V
+80 00#mem_device_vdd_low_vol   :1.0V
+#mem_device_vdd_full_vol:e4 0c		#3.3V
+#b8 0b#mem_device_vdd_empty_vol  :3.0V
+#80 0c#mem_device_vdd_low_vol   :3.2V
+
+mem_adc_channel_gpio:0c
+#04
+#02
+#01
+#03
+#00
+#05
+#06
+#07
+
+# rf debug
+#bit7:0 means disable rf debug function
+#mem_rf_debug_rx_gpio:87
+#mem_rf_debug_tx_gpio:88
+
+mem_power_ctrl_disable:01
+
+##########################g24 addr #################################
+mem_24g_pair_addr_new:25 20 15 10
+mem_24g_ch_map_update:01   #00--disable   01--enable
+mem_24g_ch_update_map1:06 1a 3a 4d
+mem_24g_ch_update_map2:00 13 23 4c
+mem_24g_ch_update_map3:0f 2c 31 43 
+mem_24g_ch_update_map4:11 15 36 48
+
+##########################UART INIT#################################
+#mem_app_uart_tx_gpio:07
+#mem_app_uart_rx_gpio:ff
+#mem_app_uart_baud_rate:10 00	#d0=115200 10=1500000
+#mem_app_uart_tx_buff_sptr:mem_app_uart_tx_buff_start
+#mem_app_uart_tx_buff_eptr:mem_app_uart_tx_buff_end
+#mem_app_uart_rx_buff_sptr:mem_app_uart_rx_buff_start
+#mem_app_uart_rx_buff_eptr:mem_app_uart_rx_buff_end
+
+
+###########################auth data#######################
+mem_ms_auth_appkey:01 75 38 42 73 58 98
+mem_ms_auth_secret:
+1d a3 f4 a9 f4 fc 5a a6
+38 15 91 9c 51 65 e6 9e 
+
+#msm_ms_auth_sn:11 22 33 44 55 66
+#mem_ms_auth_chip_id:00 01
+mem_ms_version:01
+
+mem_mouse_device_type:
+'YC-AI-Mouse
+
+###########################audio demo#######################
+mem_ms_le_interval_min_voice:
+06 00 #min interval
+06 00 #max interval
+2b 00 #latency
+90 01 #timeout
+
+mem_ms_le_interval_min_new:
+06 00 #min interval
+09 00 #max interval
+20 00 #latency
+2c 01 #timeout
+
+mem_ms_audio_key_gpio:08
+mem_ms_one_pullup_key_gpio:0f
+mem_ms_transmit_key_gpio:0e
+
+mem_adc_dma_enable:00
+
+#mem_queue_ptr:mem_g_queue_each_size
+#mem_g_queue_each_size:01 20
+
+mem_adc_audio_saddr_ptr:mem_voice_raw_start
+mem_adc_audio_eaddr_ptr:mem_voice_raw_end
+
+mem_ad_indexTable1:ff ff ff ff 02 04 06 08 ff ff ff ff 02 04 06 08
+
+mem_ad_stepsizeTable1:
+07 00 00 00
+08 00 00 00
+09 00 00 00
+0a 00 00 00
+0b 00 00 00
+0c 00 00 00
+0d 00 00 00
+0e 00 00 00
+10 00 00 00
+11 00 00 00
+13 00 00 00
+15 00 00 00
+17 00 00 00
+19 00 00 00
+1c 00 00 00
+1f 00 00 00
+22 00 00 00
+25 00 00 00
+29 00 00 00
+2d 00 00 00
+32 00 00 00
+37 00 00 00
+3c 00 00 00
+42 00 00 00
+49 00 00 00
+50 00 00 00
+58 00 00 00
+61 00 00 00
+6b 00 00 00
+76 00 00 00
+82 00 00 00
+8f 00 00 00
+9d 00 00 00
+ad 00 00 00
+be 00 00 00
+d1 00 00 00
+e6 00 00 00
+fd 00 00 00
+17 01 00 00
+33 01 00 00
+51 01 00 00
+73 01 00 00
+98 01 00 00
+c1 01 00 00
+ee 01 00 00
+20 02 00 00
+56 02 00 00
+92 02 00 00
+d4 02 00 00
+1c 03 00 00
+6c 03 00 00
+c3 03 00 00
+24 04 00 00
+8e 04 00 00
+02 05 00 00
+83 05 00 00
+10 06 00 00
+ab 06 00 00
+56 07 00 00
+12 08 00 00
+e0 08 00 00
+c3 09 00 00
+bd 0a 00 00
+d0 0b 00 00
+ff 0c 00 00
+4c 0e 00 00
+ba 0f 00 00
+4c 11 00 00
+07 13 00 00
+ee 14 00 00
+06 17 00 00
+54 19 00 00
+dc 1b 00 00
+a5 1e 00 00
+b6 21 00 00
+15 25 00 00
+ca 28 00 00
+df 2c 00 00
+5b 31 00 00
+4b 36 00 00
+b9 3b 00 00
+b2 41 00 00
+44 48 00 00
+7e 4f 00 00
+71 57 00 00
+2f 60 00 00
+ce 69 00 00
+62 74 00 00
+ff 7f 00 00 
+
+# ###########################ble report map#######################
+# mem_ui_le_uuid_table_new:
+# 01 00 02 00 28 02 00 18 
+# 02 00 02 03 28 01 0a
+# 03 00 02 00 2a 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+# 04 00 02 03 28 01 02 05 00 02 01 2a 02 c2 03
+# 06 00 02 03 28 01 02 07 00 02 04 2a 08 06 00 06 00 64 00 2c 01
+# 08 00 02 00 28 02 01 18 09 00 02 03 28 01 20
+# 0a 00 02 05 2a 00 0b 00 02 02 29 02 00 00
+# 0c 00 02 00 28 02 0a 18 0d 00 02 03 28 01 02
+# 0e 00 02 29 2a 06 59 69 43 68 69 70 0f 00 02 03 28 01 02
+# 10 00 02 50 2a 07 02 8a 24 bb c0 01 00 
+
+# 11 00 02 00 28 02 0f 18
+# 12 00 02 03 28 01 12
+# 13 00 02 19 2a 01 64
+# 14 00 02 02 29 02 00 00
+# 15 00 02 03 28 01 04
+# 16 00 02 4c 2a 00
+
+# 17 00 02 00 28 02 12 18
+# 18 00 02 03 28 01 06 
+# 19 00 02 4e 2a 01 01
+# 1a 00 02 03 28 01 12 
+# 1b 00 02 4d 2a 08 00 00 00 00 00 00 00 00
+# 1c 00 02 02 29 02 00 00 
+# 1d 00 02 08 29 02 02 01
+# 1e 00 02 03 28 01 1a 
+# 1f 00 02 4d 2a 07 00 00 00 00 00 00 00
+# 20 00 02 02 29 02 00 00 
+# 21 00 02 08 29 02 01 01
+# 22 00 02 03 28 01 12 
+# 23 00 02 4d 2a 02 00 00
+# 24 00 02 02 29 02 00 00 
+# 25 00 02 08 29 02 05 01
+# 26 00 02 03 28 01 12 
+# 27 00 02 4d 2a 02 00 00
+# 28 00 02 02 29 02 00 00 
+# 29 00 02 08 29 02 04 01
+# 2a 00 02 03 28 01 0e 
+# 2b 00 02 4d 2a 02 00 00 
+# 2c 00 02 08 29 02 02 02
+
+# 2d 00 02 03 28 01 12
+# 2e 00 02 4d 2a 02 00 00
+# 2f 00 02 02 29 02 00 00
+# 30 00 02 08 29 02 C0 01
+# 31 00 02 03 28 01 12
+# 32 00 02 4d 2a 02 00 00
+# 33 00 02 02 29 02 00 00
+# 34 00 02 08 29 02 CC 01
+# 35 00 02 03 28 01 0e
+# 36 00 02 4d 2a 02 00 00
+# 37 00 02 08 29 02 C0 02
+
+# 38 00 02 03 28 01 1a
+# 39 00 02 33 2a 08 00 00 00 00 00 00 00 00
+# 3a 00 02 02 29 02 01 00
+# 3b 00 02 03 28 01 02
+# 3c 00 02 4a 2a 04 01 01 00 03
+
+# 3d 00 02 03 28 01 02 3e 00 02 4b 2a 20 01
+# 05 0C        # Usage Page (Consumer)
+# 09 01        # Usage (Consumer Control)
+# A1 01        # Collection (Application)
+# 85 05        # Report ID (5)
+# 15 00        # Logical Minimum (0)
+# 25 01        # Logical Maximum (1)
+# 75 01        # Report Size (1)
+# 95 18        # Report Count (24)
+# 0A 83 01     # Usage (AL Consumer Control Configuration)
+# 09 EA        # Usage (Volume Decrement)
+# 09 E9        # Usage (Volume Increment)
+# 09 E2        # Usage (Mute)
+# 09 B6        # Usage (Scan Previous Track)
+# 09 B5        # Usage (Scan Next Track)
+# 09 CD        # Usage (Play/Pause)
+# 09 B7        # Usage (Stop)
+# 0A 23 02     # Usage (AC Home)
+# 0A 8A 01     # Usage (AL Email Reader)
+# 0A 94 01     # Usage (AL Local Machine Browser)
+# 0A 2A 02     # Usage (AC Bookmarks)
+# 0A 92 01     # Usage (AL Calculator)
+# 0A 21 02     # Usage (AC Search)
+# 0A 24 02     # Usage (AC Back)
+# 0A 07 03     # Usage (0307)
+# 0A AE 01     # Usage (AL Keyboard Layout)
+# 09 70        # Usage (70)
+# 09 6F        # Usage (6F)
+# 09 30        # Usage (Power)
+# 09 B8        # Usage (Eject)
+# 0A 25 02     # Usage (AC Forward)
+# 0A 26 02     # Usage (AC Stop)
+# 0A 27 02     # Usage (AC Refresh)
+# 81 02        # Input (DataVarAbsNo WrapLinearPreferred StateNo Null Position)
+# C0           # End Collection
+# 05 01        # Usage Page (Generic Desktop Ctrls)
+# 09 06        # Usage (Keyboard)
+# A1 01        # Collection (Application)
+# 85 02        # Report ID (2)
+# 75 01        # Report Size (1)
+# 95 08        # Report Count (8)
+# 05 07        # Usage Page (Kbrd/Keypad)
+# 19 E0        # Usage Minimum (E0)
+# 29 E7        # Usage Maximum (E7)
+# 15 00        # Logical Minimum (0)
+# 25 01        # Logical Maximum (1)
+# 81 02        # Input (DataVarAbsNo WrapLinearPreferred StateNo Null Position)
+# 95 01        # Report Count (1)
+# 75 08        # Report Size (8)
+# 81 03        # Input (ConstVarAbsNo WrapLinearPreferred StateNo Null Position)
+# 95 05        # Report Count (5)
+# 75 01        # Report Size (1)
+# 05 08        # Usage Page (LEDs)
+# 19 01        # Usage Minimum (Num Lock)
+# 29 05        # Usage Maximum (Kana)
+# 91 02        # Output (DataVarAbsNo WrapLinearPreferred StateNo Null PositionNon-volatile)
+# 95 01        # Report Count (1)
+# 75 03        # Report Size (3)
+# 91 03        # Output (ConstVarAbsNo WrapLinearPreferred StateNo Null PositionNon-volatile)
+# 95 06        # Report Count (6)
+# 75 08        # Report Size (8)
+# 15 00        # Logical Minimum (0)
+# 26 FF 00     # Logical Maximum (255)
+# 05 07        # Usage Page (Kbrd/Keypad)
+# 19 00        # Usage Minimum (00)
+# 2A FF 00     # Usage Maximum (FF)
+# 81 00        # Input (DataArrayAbsNo WrapLinearPreferred StateNo Null Position)
+# C0           # End Collection
+# 05 01        # Usage Page (Generic Desktop Ctrls)
+# 09 02        # Usage (Mouse)
+# A1 01        # Collection (Application)
+# 85 01        # Report ID (1)
+# 09 01        # Usage (Pointer)
+# A1 00        # Collection (Physical)
+# 05 09        # Usage Page (Button)
+# 19 01        # Usage Minimum (01)
+# 29 08        # Usage Maximum (08)
+# 15 00        # Logical Minimum (0)
+# 25 01        # Logical Maximum (1)
+# 75 01        # Report Size (1)
+# 95 08        # Report Count (8)
+# 81 02        # Input (DataVarAbsNo WrapLinearPreferred StateNo Null Position)
+# 05 01        # Usage Page (Generic Desktop Ctrls)
+# 09 30        # Usage (X)
+# 09 31        # Usage (Y)
+# 16 01 F8     # Logical Minimum (-2047)
+# 26 FF 07     # Logical Maximum (2047)
+# 75 10        # Report Size (16)
+# 95 02        # Report Count (2)
+# 81 06        # Input (DataVarRelNo WrapLinearPreferred StateNo Null Position)
+# 09 38        # Usage (Wheel)
+# 15 81        # Logical Minimum (-127)
+# 25 7F        # Logical Maximum (127)
+# 75 08        # Report Size (8)
+# 95 01        # Report Count (1)
+# 81 06        # Input (DataVarRelNo WrapLinearPreferred StateNo Null Position)
+# 05 0C        # Usage Page (Consumer)
+# 0A 38 02     # Usage (AC Pan)
+# 95 01        # Report Count (1)
+# 81 06        # Input (DataVarRelNo WrapLinearPreferred StateNo Null Position)
+# C0           # End Collection
+# C0           # End Collection
+# 05 01        # Usage Page (Generic Desktop Ctrls)
+# 09 80        # Usage (Sys Control)
+# A1 01        # Collection (Application)
+# 85 04        # Report ID (4)
+# 15 00        # Logical Minimum (0)
+# 25 01        # Logical Maximum (1)
+# 75 01        # Report Size (1)
+# 95 03        # Report Count (3)
+# 19 81        # Usage Minimum (Sys Power Down)
+# 29 83        # Usage Maximum (Sys Wake Up)
+# 81 02        # Input (DataVarAbsNo WrapLinearPreferred StateNo Null Position)
+# 95 01        # Report Count (1)
+# 75 05        # Report Size (5)
+# 81 03        # Input (ConstVarAbsNo WrapLinearPreferred StateNo Null Position)
+# C0              # End Collection
+# 06 01 FF  # Usage Page (Vendor Defined FF01)
+# 09 01        # Usage (01)
+# A1 01        # Collection (Application)
+# 15 00        #   Logical Minimum (0)
+# 26 FF 00  #   Logical Maximum (255)
+# 75 08        #   Report Size (8)
+# 85 C0        #   Report ID (-64)
+# 95 3f        #   Report Count (63)
+# 09 02        #   Usage (02)
+# 81 00        #   Input (DataArrayAbsNo WrapLinearPreferred StateNo Null Position)
+# 95 3f        #   Report Count (63)
+# 09 03        #   Usage (03)
+# 91 02        #   Output (DataVarAbsNo WrapLinearPreferred StateNo Null PositionNon-volatile)
+# 85 CC        #   Report ID (-52)
+# 95 3f        #   Report Count (63)
+# 09 04        #   Usage (04)
+# 81 00        #   Input (DataArrayAbsNo WrapLinearPreferred StateNo Null Position)
+# 95 04        #   Report Count (4)
+# 09 05        #   Usage (05)
+# 91 02        #   Output (DataVarAbsNo WrapLinearPreferred StateNo Null PositionNon-volatile)
+# C0              # End Collection
+# # 288 bytes
+# 00 00
+# #811byte
Index: sched/mouse_ble_att_list.dat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/mouse_ble_att_list.dat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/mouse_ble_att_list.dat	(working copy)
@@ -0,0 +1,682 @@
+01
+00
+02
+00
+28
+02
+00
+18
+02
+00
+02
+03
+28
+01
+0a
+03
+00
+02
+00
+2a
+14
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+04
+00
+02
+03
+28
+01
+02
+05
+00
+02
+01
+2a
+02
+c2
+03
+06
+00
+02
+03
+28
+01
+02
+07
+00
+02
+04
+2a
+08
+06
+00
+06
+00
+64
+00
+2c
+01
+08
+00
+02
+00
+28
+02
+01
+18
+09
+00
+02
+03
+28
+01
+20
+0a
+00
+02
+05
+2a
+00
+0b
+00
+02
+02
+29
+02
+00
+00
+0c
+00
+02
+00
+28
+02
+0a
+18
+0d
+00
+02
+03
+28
+01
+02
+0e
+00
+02
+29
+2a
+06
+59
+69
+43
+68
+69
+70
+0f
+00
+02
+03
+28
+01
+02
+10
+00
+02
+50
+2a
+07
+02
+35
+12
+22
+aa
+01
+00
+11
+00
+02
+00
+28
+02
+12
+18
+12
+00
+02
+03
+28
+01
+06
+13
+00
+02
+4e
+2a
+01
+01
+14
+00
+02
+03
+28
+01
+12
+15
+00
+02
+4d
+2a
+08
+00
+00
+00
+00
+00
+00
+00
+00
+16
+00
+02
+02
+29
+02
+00
+00
+17
+00
+02
+08
+29
+02
+02
+01
+18
+00
+02
+03
+28
+01
+1a
+19
+00
+02
+4d
+2a
+07
+00
+00
+00
+00
+00
+00
+00
+1a
+00
+02
+02
+29
+02
+00
+00
+1b
+00
+02
+08
+29
+02
+01
+01
+1c
+00
+02
+03
+28
+01
+12
+1d
+00
+02
+4d
+2a
+02
+00
+00
+1e
+00
+02
+02
+29
+02
+00
+00
+1f
+00
+02
+08
+29
+02
+03
+01
+20
+00
+02
+03
+28
+01
+12
+21
+00
+02
+4d
+2a
+02
+00
+00
+22
+00
+02
+02
+29
+02
+00
+00
+23
+00
+02
+08
+29
+02
+04
+01
+24
+00
+02
+03
+28
+01
+0e
+25
+00
+02
+4d
+2a
+02
+00
+00
+26
+00
+02
+08
+29
+02
+02
+02
+27
+00
+02
+03
+28
+01
+02
+28
+00
+02
+4b
+2a
+f5
+05
+0c
+09
+01
+a1
+01
+85
+05
+15
+00
+25
+01
+75
+01
+95
+18
+0a
+83
+01
+09
+ea
+09
+e9
+09
+e2
+09
+b6
+09
+b5
+09
+cd
+09
+b7
+0a
+23
+02
+0a
+8a
+01
+0a
+94
+01
+0a
+2a
+02
+0a
+92
+01
+0a
+21
+02
+0a
+24
+02
+0a
+07
+03
+0a
+ae
+01
+09
+70
+09
+6f
+09
+30
+09
+b8
+0a
+25
+02
+0a
+26
+02
+0a
+27
+02
+81
+02
+c0
+05
+01
+09
+06
+a1
+01
+85
+02
+75
+01
+95
+08
+05
+07
+19
+e0
+29
+e7
+15
+00
+25
+01
+81
+02
+95
+01
+75
+08
+81
+03
+95
+05
+75
+01
+05
+08
+19
+01
+29
+05
+91
+02
+95
+01
+75
+03
+91
+03
+95
+06
+75
+08
+15
+00
+26
+ff
+00
+05
+07
+19
+00
+2a
+ff
+00
+81
+00
+c0
+05
+01
+09
+02
+a1
+01
+85
+01
+09
+01
+a1
+00
+05
+09
+19
+01
+29
+08
+15
+00
+25
+01
+75
+01
+95
+08
+81
+02
+05
+01
+09
+30
+09
+31
+16
+01
+f8
+26
+ff
+07
+75
+10
+95
+02
+81
+06
+09
+38
+15
+81
+25
+7f
+75
+08
+95
+01
+81
+06
+05
+0c
+0a
+38
+02
+95
+01
+81
+06
+c0
+c0
+05
+01
+09
+80
+a1
+01
+85
+04
+15
+00
+25
+01
+75
+01
+95
+03
+19
+81
+29
+83
+81
+02
+95
+01
+75
+05
+81
+03
+c0
+29
+00
+02
+03
+28
+01
+1a
+2a
+00
+02
+33
+2a
+08
+00
+00
+00
+00
+00
+00
+00
+00
+2b
+00
+02
+02
+29
+02
+01
+00
+2c
+00
+02
+03
+28
+01
+02
+2d
+00
+02
+4a
+2a
+04
+01
+01
+00
+03
+2e
+00
+02
+00
+28
+02
+0f
+18
+2f
+00
+02
+03
+28
+01
+12
+30
+00
+02
+19
+2a
+01
+64
+31
+00
+02
+02
+29
+02
+00
+00
+32
+00
+02
+03
+28
+01
+04
+33
+00
+02
+4c
+2a
+00
+00
+00
\ No newline at end of file
Index: sched/mouse_sensor.dat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/mouse_sensor.dat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/mouse_sensor.dat	(working copy)
@@ -0,0 +1,182 @@
+
+mem_mouse_dpi_seting:
+03##mem_320x_dpi_0  	1200/1300
+04##mem_320x_dpi_1  	1600
+01##mem_320x_dpi_2      800
+02##mem_320x_dpi_3  	1000
+
+20##mem_3212_dpi_0	    1200
+2a##mem_3212_dpi_1	    1600
+3f##mem_3212_dpi_2	    2400
+15##mem_3212_dpi_3  	800
+
+14##mem_ka8g2_dpi_0 	1200
+1b##mem_ka8g2_dpi_1 	1600
+28##mem_ka8g2_dpi_2 	2400
+0e##mem_ka8g2_dpi_3	    800
+
+mem_sensor_s201_dpi:
+8a  ##1200
+8b  ##1600
+83  ##2400
+84  ##3200
+88  ##800
+
+#################sensor parm init#################
+
+mem_sensor_3212_init:
+09 5a
+26 34
+19 04
+09 00
+ff ff
+
+mem_sensor_3204_init:
+09 5a
+0d f0
+1d e3
+7d d2
+ff ff
+
+mem_sensor_3205_init:
+09 5a
+0d 10
+1d ed
+7d 80
+ff ff
+
+mem_sensor_32xx_init:
+1b 35
+28 b4
+29 46
+2a 96
+2b 8c
+2c 6e
+2d 64
+38 5f
+39 0f
+3a 32
+3b 47
+42 10
+ff ff
+
+mem_sensor_32xx_init_1:
+54 2e
+55 f2
+61 f4
+63 70
+75 52 
+76 41
+77 ed
+78 23
+79 46
+7a e5
+7c 48
+7e 77
+7f 01
+0b 00
+7f 00
+09 00
+ff ff
+
+mem_sensor_8650_init_new:
+09 5a
+ff 27
+ab 40
+b3 56
+9b e6
+a8 12
+a9 c0
+be e6
+a5 af
+a0 21
+a1 02
+b8 10
+b9 0b
+a7 ff
+b5 d0
+b6 00
+ff 00
+09 00
+ff ff
+
+
+mem_sensor_p6520_init:
+05 b9
+09 5a
+0b 72
+0c 52
+09 00
+ff ff
+
+mem_sensor_ka8ul_init:
+09 5a
+0d 10
+0e c5
+5b 9a
+10 38
+11 42
+28 28
+41 23
+49 39
+4a b0
+4b a0
+4c 90
+4d 70
+09 00
+ff ff
+
+mem_sensor_8009_init:
+09 5a
+06 02
+09 69
+0d 48
+0e 9f
+0f ba
+09 00
+ff ff
+
+mem_sensor_ka8g2_init:
+09 a5
+26 34
+19 04
+60 07
+69 04
+7d 20
+7e 00
+09 00
+ff ff
+
+mem_sensor_ka5857_init:
+09 a5
+46 34
+6a c0
+69 24
+09 00
+ff ff
+
+mem_sensor_poweron_init:
+09 5a
+0b f3
+09 00
+ff ff
+
+mem_sensor_ka8g2_poweron_init:
+09 a5
+0b f3
+09 00
+ff ff
+
+mem_sensor_ka8g2_init_new:
+09 a5
+46 34
+19 04
+60 07
+69 04
+68 c3
+7d 20   #7d 00  7e 08 修改sensor主频到1M 高回报率划线差时使用
+7e 00
+09 00
+ff ff
+
+
Index: sched/otp_set.dat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/otp_set.dat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/otp_set.dat	(working copy)
@@ -0,0 +1,11 @@
+0b
+00
+02
+00
+00
+00
+00
+00
+00
+00
+00
Index: sched/usb_confdata.dat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/usb_confdata.dat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/usb_confdata.dat	(working copy)
@@ -0,0 +1,60 @@
+3b
+09
+02
+3b
+00
+02
+01
+00
+a0
+32
+09
+04
+00
+00
+01
+03
+01
+01
+00
+09
+21
+00
+02
+00
+01
+22
+1a
+00
+07
+05
+81
+03
+40
+00
+02
+09
+04
+01
+00
+01
+03
+01
+02
+00
+09
+21
+00
+02
+00
+01
+22
+f3
+00
+07
+05
+82
+03
+40
+00
+02
\ No newline at end of file
Index: sched/usb_devicedata.dat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/usb_devicedata.dat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/usb_devicedata.dat	(working copy)
@@ -0,0 +1,19 @@
+12
+12
+01
+00
+02
+00
+00
+00
+40
+51
+31
+20
+10
+02
+00
+01
+02
+00
+01
\ No newline at end of file
Index: sched/usb_kbdata.dat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/usb_kbdata.dat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/usb_kbdata.dat	(working copy)
@@ -0,0 +1,66 @@
+41
+05
+01
+09
+06
+a1
+01
+75
+01 
+95
+08
+05
+07
+19
+e0 
+29
+e7
+15
+00
+25
+01
+81
+02
+95
+01 
+75
+08
+81
+03
+95
+05
+75
+01
+05
+08
+19
+01
+29
+05  
+91
+02 
+95
+01  
+75
+03  
+91
+03
+95
+06 
+75
+08 
+15
+00 
+26
+ff
+00
+05
+07
+19
+00
+2a
+ff
+00 
+81
+00
+c0
Index: sched/usb_kbdata_vendor_define.dat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/usb_kbdata_vendor_define.dat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/usb_kbdata_vendor_define.dat	(working copy)
@@ -0,0 +1,27 @@
+1a
+06
+bc
+ff
+09
+88
+a1
+01
+85
+04
+19
+00
+2a
+ff
+00
+15
+00
+26
+ff
+00
+75
+08
+95
+01
+81
+00
+c0
\ No newline at end of file
Index: sched/usb_msdata.dat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/usb_msdata.dat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/sched/usb_msdata.dat	(working copy)
@@ -0,0 +1,244 @@
+f3
+05
+01
+09
+02
+a1
+01
+85
+01
+09
+01
+a1
+00
+05
+09
+19
+01
+29
+05
+15
+00
+25
+01
+95
+05
+75
+01
+81
+02
+95
+01
+75
+03
+81
+01
+05
+01
+09
+30
+09
+31
+16
+01
+F8
+26
+FF
+07
+75
+10
+95
+02
+81
+06
+09
+38
+15
+81
+25
+7f
+75
+08
+95
+01
+81
+06
+05
+0c
+0a
+38
+02
+95
+01
+81
+06
+c0
+c0
+05
+01
+09
+80
+a1
+01
+85
+02
+05
+01
+19
+81
+29
+88
+15
+00
+25
+01
+95
+08
+75
+01
+81
+06
+c0
+06
+00
+ff
+09
+0e
+a1
+01
+85
+BA
+95
+1f
+75
+08
+26
+ff
+00
+15
+00
+09
+01
+91
+02
+85
+BA
+95
+1f
+75
+08
+26
+ff
+00
+15
+00
+09
+01
+81
+02
+C0
+05
+0c
+09
+01
+a1
+01
+85
+05
+15
+00
+25
+01
+75
+01
+95
+18
+0a
+83
+01
+09
+ea
+09
+e9
+09
+e2
+09
+b6
+09
+b5
+09
+cd
+09
+b7
+0a
+23
+02
+0a
+8a
+01
+0a
+94
+01
+0a
+2a
+02
+0a
+92
+01
+0a
+21
+02
+0a
+24
+02
+0a
+07
+03
+0a
+ae
+01
+09
+70
+09
+6f
+09
+30
+09
+b8
+0a
+25
+02
+0a
+26
+02
+0a
+27
+02
+81
+02
+c0
+05
+0c
+09
+01
+a1
+01
+85
+03
+15
+00
+26
+80
+03
+19
+00
+2a
+80
+03
+75
+10
+95
+01
+81
+00
+c0
\ No newline at end of file
Index: set_chip_type_flag.bat
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/set_chip_type_flag.bat	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/set_chip_type_flag.bat	(working copy)
@@ -0,0 +1,15 @@
+@echo off  
+setlocal enabledelayedexpansion  
+  
+rem YC1305 鼠标分配的变量范围20-2f
+rem YC1304 鼠标分配的变量范围30-3f
+rem YC1305 dongle分配的变量范围f0-f7
+rem YC1304 dongle分配的变量范围e8-ee
+rem 变量分配的规则例如：鼠标的，1305sa==0x20 1305sb==0x21 1305se==0x24依次类推到2f结束
+rem 变量分配的规则例如：dongle的，1305sa==0xf0 1305sb==0xf1依次类推到f7结束
+
+rem 定义DAT文件的要插入的字节和路径及名称，如果是eeprom.dat文件,就把otp.dat改成eeprom.dat
+set insertString=24
+echo !insertstring!>>output\otp.dat
+
+echo ok end
\ No newline at end of file
Index: util/crc16.exe
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: util/crc16.exe
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: util/eeprom2fulleeprom.exe
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: util/eeprom2fulleeprom.exe
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: util/eeprom2fulleeprom.pl
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/util/eeprom2fulleeprom.pl	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/util/eeprom2fulleeprom.pl	(working copy)
@@ -0,0 +1,18 @@
+
+
+
+$source_file = $ARGV[0];
+$eeprom_size = $ARGV[1];
+
+open(EEP,"$source_file") or die("cannot open files");
+for ($i = 1 ;$i<=$eeprom_size*128-2;$i++)
+{
+
+    while (<EEP>) { 
+        $c = hex();
+        printf "%02x\n", $c;
+        $i++;
+    }
+
+	printf "FF\n";
+}
Index: util/eeprom2otp.pl
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/util/eeprom2otp.pl	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/util/eeprom2otp.pl	(working copy)
@@ -0,0 +1,24 @@
+
+#改前三个字节为0200；
+#输入一个文件，输出一个文件；
+
+if(@ARGV < 2) {
+	printf "less files\n";
+	exit;
+}
+else{
+	open(file, $ARGV[0]) or die "Can't open  file  : $!"; 
+	open(file_out, ">$ARGV[1]")or die "Can't open out file  : $!"; 
+	@lines = <file>;
+	$length = @lines;
+	
+	my $j=2;
+	print file_out "00\n01\n";
+	while($j<$length){
+			print file_out "$lines[$j]";
+			$j++;
+	}
+#	print "----- reverse end -----";
+	close(file);
+	close(file_out);
+}
Index: util/geneep.exe
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: util/geneep.exe
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: util/mergepatch.pl
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/util/mergepatch.pl	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/util/mergepatch.pl	(working copy)
@@ -0,0 +1,351 @@
+#!/usr/bin/perl
+$defs = "";
+
+sub alloc {
+	my($end, %mc) = @_;
+	my(%eadr) = ();
+	my($tstr, $str, $i, $j, $addr);
+	my($tstr) = "";
+	
+	foreach $i (sort keys %mc) {
+		if($i =~ /(.+)_(.+)/ && exists($eadr{$1})) {
+			$addr = $eadr{$1};
+		} else {
+			$addr = $end;
+		}
+		for($j = 0;$j <= $#{$mc{$i}};$j++) {
+			if($mc{$i}[$j] =~ /^\s*([0-9]+)\s+([a-zA-Z0-9_]+)\s*(.*)$/) {
+				$str = sprintf "0x%04x %s%s\n", $addr, $2, $3;
+				$var{$2} = $addr;
+				$addr += $1;
+				$tstr .= $str;
+			}
+		}
+		$eadr{$i} = $addr;
+	}
+	if($addr > 0x4000) {
+		$xend = $addr if($addr > $xend);
+	} else {
+		$bend = $addr if($addr > $bend);
+	}
+	return $tstr . "\n";
+}
+
+
+sub malloc {
+	$path="output/bt_format.meta";
+	open file, $path;
+	@f = <file>;
+	close file;
+	open file, ">$path";
+	$path =~ s/\/.*//;
+	open file1, ">output/memmap.format";
+	$xaddr = 0x4000;
+	$addr = 0;
+	if($#ARGV == 1) {
+		$addr = hex($ARGV[0]);
+		$xaddr = hex($ARGV[1]);
+	}
+	for($i = 0, $ocnt = 0;$i < @f;$i++) { 
+		$_ = $f[$i];
+		$start = 1 if(/^\s*memalloc\s*\(\s*$/);		# allocate from 0
+		$start = 2 if(/^\s*xmemalloc\s*\(\s*$/);	# allocate from 4000
+		$start = 3 if(/^\s*omemalloc\s*\(\s*$/);	# allocate after all xmemalloc, mutex from each other(obsolete, for compatibility)
+		if(/^\s*([ax]*)memalloc\s+([a-zA-Z_0-9]+)\s*\(\s*$/) {
+			$start = $1 eq 'a' ? 5 : $1 eq 'x' ? 6 : 7;
+			$basev = $2;
+		}
+		if($start) {
+			if(/^\s*([a-zA-Z0-9_]+)\s+([a-zA-Z0-9_]+)\s*(.*)$/ && exists($def2{$1})) {		# macro for size
+				$_ = sprintf("%s %s %s", $def2{$1}, $2, $3);
+			}
+			if(/^\s*([0-9]+)\s+([a-zA-Z0-9_]+)\s*(.*)$/) {
+				if($start == 1) {
+					$str = sprintf "0x%04x %s%s\n", $addr, $2, $3;
+					$var{$2} = $addr;
+					$addr += $1;
+					$bstr .= $str;
+				} elsif($start == 2) {
+					$str = sprintf "0x%04x %s%s\n", $xaddr, $2, $3;
+					$var{$2} = $xaddr;
+					$xaddr += $1;
+					$xstr .= $str;
+				} else {
+					push @ostr, $_;
+				}
+			}
+			if(/^\s*\)\s*$/) {
+				if(@ostr > 0) {
+					if($start == 3) {
+						push @{$xmalloc{$ocnt}}, @ostr;
+						$ocnt++;
+					} elsif($start == 5) {
+						push @aaddr,$basev;
+						push @amalloc,[@ostr];
+					} elsif($start == 6) {
+						push @{$xmalloc{$basev}}, @ostr;
+					} elsif($start == 7) {
+						push @{$malloc{$basev}}, @ostr;
+					} 
+				}
+				$start = 0;
+				@ostr = ();
+			}
+		} else {
+			$def2{$2} = $1 if(/^\s*([0-9]+)\s+([a-zA-Z0-9_]+)\s*(.*)$/);
+			$sstr .= $_;
+		}
+	}
+	
+#--------------------- o/x/memalloc process -----------------------
+	$bend = $addr, $xend = $xaddr;
+	$bstr .= alloc($addr, %malloc);
+	$xstr .= alloc($xaddr, %xmalloc);
+
+#--------------------- amemalloc process -----------------------
+	for($i = 0;$i <= $#aaddr;$i++) {
+		for($j = 0, $addr = $aaddr[$i] =~ /^0x([0-9a-f]+)/ ? hex($1) : $var{$aaddr[$i]};$addr != 0 && $j <= $#{$amalloc[$i]};$j++) {
+			if($amalloc[$i][$j] =~ /^\s*([0-9]+)\s+([a-zA-Z0-9_]+)\s*(.*)$/) {
+				$str = sprintf "0x%04x %s%s\n", $addr, $2, $3;
+				$addr += $1;
+				if($addr < 0x4000) {
+					$bstr .= $str;
+				} else  {
+					$xstr .= $str;
+				}
+			}
+		}
+	}
+
+	
+	print file $bstr, $xstr, $sstr;
+	print file1 $bstr, $xstr;
+	close file;
+	close file1;
+	printf "\nLast allocated address is %04x\n", $bend;
+	printf "\nLast allocated xmem address is %04x\n", $xend;
+}
+
+
+sub getdefs {
+	my($def) = @_;
+	my(@ifdefs) = split(/\s*\|\s*/, $def);
+	my $v = 0;
+	foreach (@ifdefs) {
+		s/\s//g;
+		$v = 1 if($defs =~ /(^|\s)$_(\s|$)/);
+	}
+	return $v;
+}
+
+sub parseif {
+	my($fname) = @_;
+	open file, $fname;
+	@f = <file>;
+	close file;
+	open file, ">$fname";
+	@valid = (1);
+	for($i = 0;$i < @f;$i++) { 
+		$_ = $f[$i];
+		s/\/\*.*\*\///g;
+		$comment = 1 if(/\/\*/ && !/\/\//);
+		if($comment) {
+			$comment = 0 if(/\*\//);
+			next;
+		}
+		if(/^\s*ifdef\s+(.+)$/) {
+			$v = getdefs($1) ? 1 : 0;
+			push @valid, $v & $valid[$#valid];
+		} elsif(/^\s*ifndef\s+(.+)$/) {
+			$v = getdefs($1) ? 0 : 1;
+			push @valid, $v & $valid[$#valid];
+		} elsif(/^\s*else/) {
+			printf "%s\nelse without if at line %d\n", $f[$i - 3], $i if($#valid == 0);
+			if($#valid == 0) {
+				for($j = -10;$j < 10;$j++) {
+					print $f[$i + $j];
+				}
+				last;
+ 				$i = $i;
+			}
+			$valid[$#valid] = (1 - $valid[$#valid]) & $valid[$#valid - 1];
+		} elsif(/^\s*endif/) {
+			printf "%s\nendif without if at line %d\n", $_, $i if($#valid == 0);
+			if($#valid == 0) {
+				for($j = -10;$j < 10;$j++) {
+					print $f[$i + $j];
+				}
+				last;
+ 				$i = $i;
+			}
+			pop @valid;
+		} elsif($valid[$#valid]) {
+			if(/^include\s+(.+)\s*/) {
+				open file2, "program/$1";
+				@f2 = <file2>;
+				close file2;
+				splice(@f, $i + 1, 0, @f2);
+			} else {
+			if(/^define\s+(\w+)\s*/) {
+				$defs .= $1 . " " 
+			}
+				print file $_;
+			}
+		}
+	}
+	close file;
+}
+
+sub genpatch
+{
+	print "genpatch\n";
+	$patched = 0;
+	open file,"output/bt_program23.meta";
+	while(<file>) {
+		if(/^\s*beq\s+patch([0-9a-f]+)_([0-7]),/) {
+			$a = hex($1), $b = hex($2);
+			$bits[$a] |= 1 << $b;
+			$patched = 1;
+		}
+	}
+	close file;
+	return if(!$patched);
+	open file,"output/sched.rom";
+	@sched = <file>;
+	close file;
+	for($j = 0;$j < 0x40;$j++) { 
+		$s .= sprintf ("%02x   #mem_patch%02x\n", $bits[$j], $j);
+	}
+	$s .= "\n\n";
+	for($i = $skip = 0;$i < @sched;$i++) {
+		$_ = $sched[$i];
+		if($skip > 0 && /:/) {
+			splice(@sched, $skip, $i - $skip, $s);
+			last;
+		}
+		$skip = $i + 1 if(/^mem_patch00:\s*$/);
+	}
+	if($skip == 0) {
+		$s = "mem_patch00:\n" . $s;
+		splice(@sched, 0, 0, $s);
+	}
+	open file,">output/sched.rom";
+	for($i = 0;$i < @sched;$i++) { print file $sched[$i]; }
+	close file;
+}
+
+sub zcode {
+	open file, "output/bt_program23.meta";
+	@f = <file>;
+	close file;
+	for($i = $label = $line[0] = 0, $z = 1;$i < @f;$i++) {
+		$_ = $f[$i];
+		$line[0] = $i - 1 if(/^org\s+0x([23]000|800)/ && $line[0] == 0);
+		if(/^org z\s*$/) {
+			$line[$z/0x10000 + 1] = $i - 1;
+			$z += 0x10000;
+			$f[$i] = sprintf("org 0x%x\n", $z);
+			$label = 1;
+		}
+		if(/^(\w+):\s*$/ && $label == 1) {
+			$lab{$1} = $z;
+			$label = 2;
+		}
+	}
+	return if($z == 1);
+	$line[$z/0x10000 + 1] = $i - 1;
+	for($i = 0;$i < @f;$i++) {
+		$_ = $f[$i];
+		$label = "";
+		if(/^\s*(branch|nbranch|call|ncall|setarg)\s+(\w+)\s*$/ || /^\s*(branch|nbranch|call|ncall|arg)\s+(\w+)\s*,\s*(\w+)\s*$/) {
+			$label = $2;
+		}
+		if(/^\s*(bmark|beq|bne|bbit[01])\s+(\w+)\s*,\s*(\w+)\s*$/) {
+			$label = $3;
+		}
+		$branch = /^\s+branch\s+$label\s*$/ ? 1 : 0;
+		if(exists($lab{$label})) {
+			$nlabel = "jmpz_" . $label;
+			$f[$i] =~ s/$label/eval "$nlabel"/e;
+			if($lab{$label} > 100) {
+				$z = int($lab{$label}/0x1000);
+				$l = $i < $line[1] ? $line[0] : $line[$z/10 - 1];
+				if($branch && $i >= $line[1]) {
+					$f[$i] = sprintf("\tsetarg 0x%x\n\tbranch p_zcode_entrance_2Bytes_common\n\n", $z);
+				} else {
+					$f[$l] .= sprintf("%s:\n\tsetarg 0x%x\n\tbranch p_zcode_entrance_2Bytes_common\n\n", $nlabel, $z);
+				}
+				$lab{$label} = 1;
+			}
+		}
+	}
+	open file, ">output/bt_program23.meta";
+	for($i = 0;$i < @f;$i++) {
+		if($f[$i] =~ /^\s*bbit1 8,pf_patch_ext\s*$/) {
+			printf file ("p_start:\n\tbranch p_patch_array\n\np_zcode:\n");
+			for($j = 0;$j < 63;$j++) {
+				printf file "\tnop %d\n", $j + 1;
+			}
+			printf file "p_patch_array:\n";
+		}
+		print file $f[$i];
+	}
+	close file;
+}
+
+sub authrom {
+	$addr = 0x9000;
+	foreach $s (@ARGV) {
+		open f, "../sched/" . $s . ".dat" or die "cannot open dat file $s";
+		@ff = <f>;
+		close f;
+		foreach (@ff) { $_ =~ s/\s//g;push @auth, $_ . "\n"; }
+	#	printf "0x%x %s_ADDR\n", $addr, uc($s);
+		$addr += $#ff + 1;
+	}
+	open f,">auth.rom";
+	print f @auth;
+	close f;
+	open f,"romcode.rom" or return;
+	@rom = <f>;
+	close f;
+	for($i = 0, $j = $#rom - 0x1ff;$i < 0x200;$i++,$j++) {
+		for($k = 0, $l = "";$k < 4;$k++) {
+			$_ = $auth[$i*4 + $k];
+			s/\s//g;
+			$_ = "00" if(/^$/);
+			$l =  $_ . $l;
+		}
+		$rom[$j] = $l . "\n";
+	}
+	open f,">romcode.rom";
+	print f @rom;
+	close f;
+}
+
+sub otp {
+	open f,'eeprom.dat';
+	@a=<f>;
+	open f,'../sched/otp_set.dat';
+	@b=<f>;
+	open f,'>otp.dat';
+#	printf f "0b\n00\n";
+	print f @b;
+	splice(@a,0,2);
+	print f @a;
+	close f;
+}
+
+if($ARGV[0] eq "otp") {
+	otp();
+	exit;
+} elsif(@ARGV > 0) {
+	authrom();
+	exit;
+}
+
+parseif("output/bt_program23.meta");
+parseif("output/bt_format.meta");
+genpatch() if($defs !~ / SIM /);
+malloc();
+zcode();
Index: util/otpcheck.pl
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/util/otpcheck.pl	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/util/otpcheck.pl	(working copy)
@@ -0,0 +1,105 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use File::Spec;  
+# 获取当前脚本的目录路径
+my $current_dir = File::Spec->rel2abs('.');
+my $parent_dir = File::Spec->catdir($current_dir, '..');  # 获取上一级目录
+
+# 指定要搜索的文件名
+my $filename = File::Spec->catfile($parent_dir, 'output', 'otp.dat');
+# 打开文件进行读取
+open(my $fh, '<',$filename) or die "无法打开文件 '$filename':$!";
+
+# 读取整个文件到数组中
+my @file_content = <$fh>;
+chomp @file_content;  # 移除每行的换行符
+
+# 关闭文件句柄
+close($fh);
+
+# 初始化变量
+my $found = 0;
+my $otp_end_address = 0;
+# 循环遍历文件内容，每次移动一个字节
+for my $start (0 ..$#file_content - 3) {
+    # 提取从当前起始位置开始的四个字节
+    my $chunk = join('', @file_content[$start .. $start + 3]);
+    
+    # 检查这四个字节是否匹配指定的字符串
+    if ($chunk eq '55aaaa55') {
+        $otp_end_address = $start +9;
+        # print "After adding 9 to the start position: $start\n";
+        $found = 1;
+    }
+}
+
+# 如果找到了 "55aaaa55"，则继续处理 sched.rom 文件
+if ($found) {
+    my $sched_filename = File::Spec->catfile($parent_dir, 'output', 'sched.rom');
+    # 打开文件进行读取
+    open(my $sched_fh, '<',$sched_filename) or die "无法打开文件 '$sched_filename'$!";
+    # 读取整个文件到字符串中
+    my $sched_content = do { local$/; <$sched_fh> };
+    chomp $sched_content;  # 移除字符串末尾的换行符
+    # print "sched_content: $sched_content\n";
+    # 关闭文件句柄
+    close($sched_fh);
+    # 在 sched_content 中查找 "mem_otp_offset_le_addr2:"
+    my $sched_position = index($sched_content, 'mem_otp_offset_le_addr2:');
+    # 如果找到了 "mem_otp_offset_le_addr2:"
+    if ($sched_position != -1) {
+        # 获取 "mem_otp_offset_dpi:" 后面的两个字节
+        my $five_bytes_with_spaces = substr($sched_content, $sched_position + length("mem_otp_offset_le_addr2:"), 5);
+        $five_bytes_with_spaces =~ s/ //g;  # 移除空格
+        my $five_bytes =$five_bytes_with_spaces;
+        # 字节颠倒
+        my $reversed_bytes = substr($five_bytes, 2, 2) . substr($five_bytes, 0, 2);
+        my $decimal_value = hex($reversed_bytes);
+        # 打印找到的字符串位置信息以及后面跟随的两个字节
+        print "Original otp dpi store start little-endian bytes: $five_bytes\n";
+        print "Reversed (big-endian) bytes:  $decimal_value\n";
+        print "otp end bytes:  $otp_end_address\n";
+        if($decimal_value>$otp_end_address)
+        {
+            print"otp check done";
+        }
+        else
+        {
+            die "系统错误：在文件 '$sched_filename' 中找不到字符串 'mem_otp_offset_le_addr2:'\n";
+        }
+    } else {
+        print "String 'mem_otp_offset_le_addr2:' not found in file '$sched_filename'.\n";
+    }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+
Index: util/romcrc.pl
===================================================================
--- /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/util/romcrc.pl	(nonexistent)
+++ /1121s/1121se/branch/mouse/AI_Project/jyd_project/JYD_DM_312Pro_Switch_2m_ai_voice/util/romcrc.pl	(working copy)
@@ -0,0 +1,54 @@
+#!/bin/perl
+sub crc16_ccitt2
+{
+	my($crc, $c) = @_;
+
+  $crc  = ($crc >> 8) | ($crc << 8);
+  $crc ^= $c;
+  $crc ^= ($crc & 0xff) >> 4;
+  $crc ^= $crc << 12;
+  $crc ^= ($crc & 0xff) << 5;
+  $crc &= 0xffff;
+ return $crc;
+}
+
+sub gencrc
+{
+  my($crc, $c) = @_;
+  my($i);
+	$c =~ s/\s//g;
+  for($i = 0;$i < length($c);$i+=2) {
+  	$crc = crc16_ccitt2($crc, hex(substr($c, $i, 2)));
+  }
+  return $crc;
+}
+
+open f,"$ARGV[0]" or die "open romfile fail";
+@txt = <f>;
+close f;
+$len = $len0 = $#txt;
+$len = hex($ARGV[1]) if(@ARGV > 1);
+for($i = 0, $crc = 0xffff;$i < $len;$i++) {
+	if($i <= $len) {
+		$_ = $txt[$i];
+		s/\s//g;
+		$wid = length($_) if($i == 0);
+		$crc = gencrc($crc, $_);
+		$txt[$i] = $_ . "\n";
+	} else {
+		$txt[$i] = join('', map('0', 1..$wid)) . "\n";
+		$crc = gencrc($crc, $txt[$i]);
+	}
+}
+if($wid > 4) {
+	$txt[$len] = join('', map('0', 1..($wid - 4)));
+	$crc = gencrc($crc, $txt[$i]);
+	$txt[$len] .= sprintf("%04x", $crc);
+} else {
+	$txt[$len] .= sprintf("%02x\n%02x\n", $crc >> 8, $crc & 0xff);
+}
+
+printf "%02x\n%02x\n", $crc >> 8, $crc & 0xff;
+open f,">$ARGV[0]";
+print f @txt;
+close f;
