Index: a.bat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/a.bat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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: do.bat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/do.bat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/do.bat	(working copy)
@@ -0,0 +1,102 @@
+@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
+@rem 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
+@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=flippen
+@echo off
+
+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 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 "flippen" (
+  copy sched\mouse.dat + sched\flippen.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
+
+geneep -n 
+::geneep -n -k key.dat 
+
+echo create auth rom
+perl ../util/mergepatch.pl mouse_ble_att_list usb_kbdata_vendor_define usb_kbdata usb_msdata usb_devicedata usb_confdata ble_shutter_gatt_list ble_shutter_key_value_list ble_car_att_list sha256 
+perl ../util/romcrc.pl romcode.rom
+perl  ../util/mergepatch.pl otp
+
+
+if "%device_option%" equ "keyboard" (
+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 
+)
+
+
+:end
+
+
+
Index: do_enc.bat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/do_enc.bat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/do_enc.bat	(working copy)
@@ -0,0 +1,104 @@
+@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
+@rem 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
+@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=flippen
+@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 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 "flippen" (
+  copy sched\mouse.dat + sched\flippen.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
+
+echo create auth rom
+perl ../util/mergepatch.pl mouse_ble_att_list usb_kbdata_vendor_define usb_kbdata usb_msdata usb_devicedata usb_confdata ble_shutter_gatt_list ble_shutter_key_value_list ble_car_att_list sha256 
+perl ../util/romcrc.pl romcode.rom
+perl  ../util/mergepatch.pl otp
+
+
+if "%device_option%" equ "keyboard" (
+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 
+)
+
+
+:end
+
+
+
Index: eotp.bat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/eotp.bat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/eotp.bat	(working copy)
@@ -0,0 +1,5 @@
+e pu
+e 8043 00
+e otp output/otp.dat 0
+e otr 0 20
+e ku
Index: ep.bat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/ep.bat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/ep.bat	(working copy)
@@ -0,0 +1,7 @@
+e pu
+e 8043 00
+e er 0 20
+e ew 0 11223344
+e ep output/eeprom.dat 0
+e er 0 20
+e ku
\ No newline at end of file
Index: format/app.format
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/format/app.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/app_adpcm.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/app_car.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/app_dongle.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/app_kb.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/format/app_kb.format	(working copy)
@@ -0,0 +1,588 @@
+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
+
+12 mem_keyscan_exmcu_value_new
+2 mem_keyboard_hid_fix_handle
+// patch area
+//otp store info offset
+// 2 mem_keyboard_otp_offset_le_addr2
+// 2 mem_keyboard_otp_offset_le_addr2_end
+
+// 2 mem_keyboard_otp_offset_le_locall_addr2
+// 2 mem_keyboard_otp_offset_le_locall_addr2_end
+
+// 2 mem_keyboard_otp_offset_dpi
+// 2 mem_keyboard_otp_offset_dpi_end
+
+// 2 mem_keyboard_otp_offset_device_flag
+// 2 mem_keyboard_otp_offset_device_flag_end
+
+// 2 mem_keyboard_otp_offset_24g_addr
+// 2 mem_keyboard_otp_offset_24g_addr_end
+
+// 2 mem_keyboard_otp_offset_le_addr1
+// 2 mem_keyboard_otp_offset_le_addr1_end
+
+// 2 mem_keyboard_otp_offset_le_locall_addr1
+// 2 mem_keyboard_otp_offset_le_locall_addr1_end
+
+// 2 mem_keyboard_otp_offset_le_addr_increase_count
+// 2 mem_keyboard_otp_offset_le_addr_increase_count_end
+
+// 2 mem_keyboard_otp_offset_app_initflag
+2 mem_keyboard_adv_interval
+400 mem_keyboard_le_table
+0 mem_keyboard_end
+)
+
+(
+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/keyboard/costumer/YeCai/keyboard_only_ble/format/app_module.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/app_mouse.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/format/app_mouse.format	(working copy)
@@ -0,0 +1,491 @@
+
+memalloc mouse(
+2 mem_init_cnt
+2 mem_data_pre
+2 mem_data_current
+3 mem_data_sum
+2 mem_data_value
+)
+
+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
+)
+
+
+(
+//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
+
+// 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
+)
+
+(
+0 MULTI_LED_ON
+1 MULTI_LED_BLINK
+)
+
Index: format/app_rec.format
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/format/app_rec.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/app_remote_car.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/app_shutter.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/app_shutter_dy.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/format/app_shutter_dy.format	(working copy)
@@ -0,0 +1,289 @@
+
+
+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
+
+1 mem_shutter_dy_le_enc_timer
+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/keyboard/costumer/YeCai/keyboard_only_ble/format/ble_protocol_stack/le.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/ble_protocol_stack/le_advertising.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/ble_protocol_stack/le_l2cap_att.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/ble_protocol_stack/le_l2cap_att_wechat.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/ble_protocol_stack/le_l2cap_signalling.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/ble_protocol_stack/le_l2cap_smp.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/ble_protocol_stack/le_ll.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/bt.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/format/bt.format	(working copy)
@@ -0,0 +1,653 @@
+
+	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
+34 mark_otp_write
+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
+)
+
+(
+
+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/keyboard/costumer/YeCai/keyboard_only_ble/format/command.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/debug.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/g24_protocol_stack/24g.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/g24_protocol_stack/24g_pair.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/g24_protocol_stack/24g_receiver.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/g24_protocol_stack/24g_reconn.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/format/g24_protocol_stack/24g_reconn.format	(working copy)
@@ -0,0 +1,29 @@
+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
+)
+
Index: format/g24_protocol_stack/24g_rssi.format
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/format/g24_protocol_stack/24g_rssi.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/g24_protocol_stack/24g_transmitter.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/g24_protocol_stack/24g_txpower_ctrl.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/hci.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/hid.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/format/hid.format	(working copy)
@@ -0,0 +1,212 @@
+
+//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
+64 mem_le_tx_buffer1_omemalloc
+64 mem_le_tx_buffer2_omemalloc
+64 mem_le_tx_buffer3_omemalloc
+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
+
+)
+
+
+(
+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/keyboard/costumer/YeCai/keyboard_only_ble/format/l2cap.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/memblocks.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/patch.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/regs.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/format/regs.format	(working copy)
@@ -0,0 +1,557 @@
+(
+	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
+	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/keyboard/costumer/YeCai/keyboard_only_ble/format/security.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/simple_pairing.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/ui.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/usb.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/format/utility.format	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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: output/otp.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/output/otp.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/output/otp.dat	(working copy)
@@ -0,0 +1,3241 @@
+0b
+00
+02
+00
+00
+00
+00
+00
+00
+00
+00
+aa
+55
+9a
+06
+c2
+84
+00
+10
+c0
+0d
+00
+12
+c0
+14
+00
+4e
+c0
+1f
+00
+f5
+c0
+20
+00
+79
+c0
+21
+80
+a9
+c0
+26
+00
+84
+c0
+2b
+00
+f4
+c0
+2e
+01
+1a
+c0
+35
+01
+05
+c0
+3e
+01
+a4
+c0
+74
+80
+18
+c0
+75
+00
+15
+c0
+67
+80
+5c
+c0
+7d
+00
+4a
+20
+20
+23
+3e
+c1
+7f
+80
+00
+20
+20
+23
+3e
+70
+81
+3d
+f6
+37
+d9
+82
+00
+20
+20
+22
+50
+20
+40
+6b
+28
+20
+40
+6b
+63
+20
+20
+6b
+26
+20
+40
+6b
+22
+20
+40
+6b
+2f
+20
+40
+6b
+29
+e8
+40
+80
+11
+1a
+20
+a2
+01
+18
+00
+0e
+00
+79
+3f
+80
+22
+a8
+4c
+00
+00
+20
+20
+80
+42
+6f
+f0
+80
+46
+79
+20
+7e
+06
+79
+20
+7e
+07
+67
+f0
+80
+46
+70
+80
+47
+02
+70
+80
+47
+82
+79
+3f
+fe
+07
+67
+f0
+80
+46
+70
+80
+47
+8a
+20
+00
+00
+0b
+70
+80
+47
+ca
+20
+00
+00
+21
+70
+80
+47
+4a
+20
+00
+00
+2c
+70
+80
+47
+ca
+20
+00
+00
+16
+70
+80
+47
+8a
+20
+00
+00
+21
+70
+80
+47
+82
+20
+00
+00
+01
+70
+80
+47
+92
+20
+00
+00
+0a
+70
+80
+47
+b2
+6f
+f0
+80
+07
+70
+80
+47
+92
+20
+00
+00
+01
+70
+80
+47
+82
+20
+00
+00
+01
+af
+ec
+00
+00
+20
+20
+80
+1e
+c5
+11
+00
+42
+79
+20
+00
+22
+20
+20
+00
+1f
+6f
+f1
+00
+44
+1f
+e0
+fe
+01
+67
+f1
+00
+44
+18
+e0
+8e
+01
+28
+e0
+1e
+08
+24
+20
+80
+1e
+c2
+00
+00
+1b
+20
+20
+6b
+26
+79
+20
+04
+07
+20
+40
+6e
+e0
+7d
+20
+84
+07
+20
+20
+6e
+ac
+20
+40
+23
+f0
+6f
+e1
+c0
+bd
+20
+7a
+00
+00
+6f
+e0
+ca
+7a
+24
+7a
+00
+00
+6f
+e0
+ca
+7b
+24
+7a
+00
+00
+6f
+e0
+c7
+20
+24
+7a
+00
+00
+6f
+e1
+47
+50
+24
+7a
+00
+00
+6f
+e0
+ca
+9f
+24
+7a
+00
+00
+20
+20
+24
+67
+20
+40
+37
+17
+20
+40
+73
+84
+20
+40
+00
+60
+20
+20
+3e
+b0
+20
+75
+80
+00
+20
+40
+35
+c8
+20
+40
+32
+3a
+20
+40
+00
+66
+70
+40
+a6
+0a
+20
+20
+3e
+c1
+20
+40
+3e
+f4
+20
+40
+00
+69
+20
+20
+3e
+dd
+58
+00
+90
+00
+67
+e1
+42
+f9
+6f
+e4
+48
+8e
+c2
+91
+e8
+0c
+58
+00
+95
+b8
+67
+e1
+48
+d6
+6f
+e4
+48
+8e
+c2
+90
+68
+0c
+c2
+90
+e8
+0c
+58
+00
+94
+fc
+67
+e1
+48
+d6
+6f
+e4
+48
+8e
+c2
+91
+68
+0c
+58
+00
+4a
+ea
+67
+e1
+48
+d6
+20
+20
+68
+0c
+6f
+e4
+48
+8e
+c2
+87
+80
+7c
+20
+20
+3f
+d8
+6f
+e1
+4a
+bd
+68
+49
+4a
+bf
+98
+46
+7c
+00
+20
+61
+00
+00
+6f
+e0
+c6
+78
+c0
+00
+3f
+e1
+c0
+00
+bf
+eb
+20
+60
+00
+00
+20
+40
+00
+86
+20
+20
+43
+32
+20
+40
+3e
+f9
+58
+00
+00
+00
+67
+e1
+49
+9e
+d8
+c0
+49
+4e
+d8
+a0
+49
+63
+df
+20
+00
+14
+20
+40
+7c
+dc
+20
+40
+43
+af
+58
+00
+49
+4e
+67
+e1
+49
+98
+58
+00
+4a
+da
+67
+e1
+49
+9a
+20
+40
+43
+ad
+20
+40
+43
+ab
+6f
+e1
+49
+9e
+1f
+e0
+fe
+01
+67
+e1
+49
+9e
+c2
+84
+80
+86
+68
+48
+c9
+11
+20
+40
+6e
+e0
+24
+20
+80
+94
+20
+40
+43
+af
+20
+20
+43
+4a
+6f
+e0
+ca
+c2
+20
+7a
+00
+00
+1f
+e0
+ff
+ff
+67
+e0
+ca
+c2
+6f
+e4
+48
+8e
+c2
+94
+00
+a6
+6f
+e0
+ca
+c2
+20
+3a
+41
+66
+20
+20
+41
+6c
+6f
+e0
+ca
+c2
+20
+3a
+41
+3c
+20
+20
+41
+3a
+20
+40
+40
+e0
+20
+40
+40
+cc
+20
+40
+40
+dd
+20
+40
+41
+00
+20
+40
+41
+86
+20
+40
+41
+ab
+20
+40
+00
+9d
+20
+40
+41
+3e
+20
+40
+41
+46
+20
+40
+00
+c6
+20
+40
+42
+8f
+20
+40
+42
+c4
+20
+40
+32
+6c
+20
+40
+35
+07
+20
+40
+58
+f6
+20
+40
+42
+b5
+20
+40
+42
+bf
+20
+40
+42
+99
+20
+40
+42
+a4
+20
+40
+55
+0d
+20
+40
+42
+ad
+20
+40
+55
+10
+20
+40
+42
+b2
+20
+40
+42
+a1
+20
+40
+55
+27
+20
+40
+42
+9e
+20
+40
+42
+c9
+20
+40
+42
+cc
+20
+20
+42
+d5
+6f
+e0
+c8
+a6
+c2
+80
+00
+cc
+20
+40
+00
+e4
+6f
+e0
+c8
+a6
+c2
+80
+80
+d8
+20
+20
+00
+ea
+6f
+e0
+c8
+a9
+1f
+e6
+7c
+64
+24
+61
+00
+00
+1f
+e0
+fe
+01
+67
+e0
+c8
+a9
+c1
+8c
+80
+00
+70
+48
+a7
+00
+6f
+e0
+c6
+78
+c1
+02
+00
+00
+20
+40
+00
+f0
+20
+40
+48
+e6
+20
+20
+46
+80
+6f
+e0
+c8
+aa
+1f
+e6
+7c
+64
+24
+61
+00
+00
+1f
+e0
+fe
+01
+67
+e0
+c8
+aa
+c1
+8c
+80
+00
+70
+48
+a8
+00
+6f
+e0
+c6
+78
+c1
+02
+00
+00
+20
+40
+00
+f0
+20
+40
+68
+24
+20
+20
+46
+75
+70
+48
+a9
+00
+6f
+e0
+c8
+a7
+20
+7a
+00
+00
+70
+48
+a7
+00
+20
+40
+00
+f0
+20
+20
+6c
+99
+70
+48
+aa
+00
+6f
+e0
+c8
+a8
+20
+7a
+00
+00
+70
+48
+a8
+00
+20
+40
+40
+45
+20
+20
+6c
+99
+6f
+e4
+48
+8e
+c2
+87
+d5
+94
+c2
+87
+40
+45
+20
+60
+00
+00
+20
+20
+46
+77
+6f
+e4
+48
+8e
+c2
+87
+bf
+31
+20
+20
+3e
+c8
+6f
+e4
+48
+8e
+c3
+1e
+80
+ff
+68
+48
+c4
+40
+20
+40
+4f
+0a
+68
+48
+c4
+40
+20
+40
+6e
+e0
+20
+20
+80
+f8
+20
+40
+40
+49
+d8
+40
+00
+80
+da
+20
+46
+78
+da
+40
+00
+00
+20
+40
+6c
+d7
+20
+20
+3f
+a2
+1a
+22
+0c
+00
+ef
+e1
+80
+06
+67
+e1
+c3
+9b
+c0
+00
+c9
+19
+c0
+03
+c9
+5c
+c0
+04
+c9
+38
+c0
+05
+c9
+52
+c0
+04
+49
+71
+c0
+06
+01
+12
+c0
+05
+49
+9f
+c0
+09
+49
+c5
+c0
+29
+49
+cb
+20
+20
+2b
+76
+ef
+e1
+00
+06
+67
+e1
+06
+93
+98
+00
+22
+00
+68
+49
+43
+9c
+6f
+e1
+43
+34
+98
+46
+7c
+00
+24
+22
+ad
+2e
+20
+20
+49
+99
+18
+42
+7e
+00
+70
+4a
+6f
+05
+68
+48
+c9
+a6
+18
+46
+7c
+00
+20
+22
+c7
+4b
+c0
+74
+01
+38
+c0
+74
+81
+3e
+c0
+75
+01
+42
+c0
+75
+81
+46
+c0
+76
+01
+4a
+c0
+76
+81
+4e
+c0
+77
+01
+52
+c0
+77
+81
+56
+c0
+78
+01
+5a
+c0
+78
+81
+5e
+c0
+79
+01
+62
+c0
+79
+81
+66
+c0
+7a
+01
+6a
+c0
+7a
+81
+6e
+c0
+7b
+01
+75
+c0
+7b
+81
+79
+c0
+7c
+01
+81
+c0
+7c
+81
+85
+c0
+7d
+01
+89
+c0
+7d
+81
+8d
+c0
+7e
+01
+91
+c0
+7e
+81
+95
+c0
+7f
+01
+99
+c0
+7f
+81
+9d
+20
+20
+46
+e6
+6f
+e0
+c6
+78
+c0
+80
+47
+15
+58
+00
+01
+83
+67
+e1
+4a
+70
+70
+4a
+6f
+03
+20
+20
+46
+e6
+6f
+e0
+c6
+78
+c0
+80
+47
+18
+58
+00
+00
+ea
+20
+20
+01
+3b
+6f
+e0
+c6
+78
+c0
+80
+47
+1a
+58
+00
+00
+e9
+20
+20
+01
+3b
+6f
+e0
+c6
+78
+c0
+80
+47
+1c
+58
+00
+00
+e2
+20
+20
+01
+3b
+6f
+e0
+c6
+78
+c0
+80
+47
+1e
+58
+00
+00
+b6
+20
+20
+01
+3b
+6f
+e0
+c6
+78
+c0
+80
+47
+20
+58
+00
+00
+b5
+20
+20
+01
+3b
+6f
+e0
+c6
+78
+c0
+80
+47
+22
+58
+00
+00
+cd
+20
+20
+01
+3b
+6f
+e0
+c6
+78
+c0
+80
+47
+24
+58
+00
+00
+b7
+20
+20
+01
+3b
+6f
+e0
+c6
+78
+c0
+80
+47
+26
+58
+00
+02
+23
+20
+20
+01
+3b
+6f
+e0
+c6
+78
+c0
+80
+47
+28
+58
+00
+01
+8a
+20
+20
+01
+3b
+6f
+e0
+c6
+78
+c0
+80
+47
+2a
+58
+00
+01
+94
+20
+20
+01
+3b
+6f
+e0
+c6
+78
+c0
+80
+47
+2c
+58
+00
+02
+2a
+20
+20
+01
+3b
+6f
+e0
+c6
+78
+c0
+80
+47
+2e
+58
+00
+01
+92
+20
+20
+01
+3b
+6f
+e0
+c6
+78
+c0
+80
+47
+30
+6f
+e0
+ca
+a1
+c0
+01
+01
+5a
+c0
+01
+81
+5a
+58
+00
+02
+21
+20
+20
+01
+3b
+6f
+e0
+c6
+78
+c0
+80
+47
+32
+58
+00
+02
+24
+20
+20
+01
+3b
+6f
+e0
+c6
+78
+c0
+80
+47
+37
+6f
+e0
+ca
+a1
+c0
+00
+81
+7f
+58
+00
+01
+ae
+20
+20
+01
+3b
+58
+00
+03
+07
+20
+20
+01
+3b
+6f
+e0
+c6
+78
+c0
+80
+47
+3d
+58
+00
+00
+70
+20
+20
+01
+3b
+6f
+e0
+c6
+78
+c0
+80
+47
+3f
+58
+00
+00
+6f
+20
+20
+01
+3b
+6f
+e0
+c6
+78
+c0
+80
+47
+41
+58
+00
+00
+30
+20
+20
+01
+3b
+6f
+e0
+c6
+78
+c0
+80
+47
+43
+58
+00
+00
+b8
+20
+20
+01
+3b
+6f
+e0
+c6
+78
+c0
+80
+47
+45
+58
+00
+02
+25
+20
+20
+01
+3b
+6f
+e0
+c6
+78
+c0
+80
+47
+47
+58
+00
+02
+26
+20
+20
+01
+3b
+6f
+e0
+c6
+78
+c0
+80
+47
+49
+58
+00
+02
+27
+20
+20
+01
+3b
+6f
+e0
+c6
+78
+c0
+80
+47
+52
+70
+4a
+6f
+02
+58
+00
+00
+02
+67
+e0
+ca
+70
+20
+20
+46
+e6
+c0
+76
+c7
+20
+20
+40
+47
+b3
+20
+20
+37
+9c
+46
+49
+aa
+55
+40
+00
+00
+40
+00
+00
+00
+04
+00
+01
+00
+40
+09
+10
+40
+10
+00
+04
+00
+10
+00
+00
+00
+00
+00
+00
+00
+00
+00
+80
+00
+00
+00
+06
+00
+04
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+aa
+55
+08
+00
+8e
+48
+00
+61
+00
+0b
+00
+01
+1f
+00
+aa
+55
+01
+00
+cf
+43
+0f
+aa
+55
+01
+00
+8d
+48
+01
+aa
+55
+01
+00
+03
+45
+ff
+aa
+55
+01
+00
+02
+45
+1e
+aa
+55
+01
+00
+05
+45
+01
+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
+09
+00
+d1
+4a
+01
+51
+31
+10
+50
+51
+31
+20
+50
+aa
+55
+06
+00
+08
+45
+03
+11
+36
+55
+51
+61
+aa
+55
+01
+00
+a0
+45
+02
+aa
+55
+05
+00
+fa
+45
+01
+0f
+0f
+0f
+0f
+aa
+55
+01
+00
+d0
+45
+00
+aa
+55
+01
+00
+38
+47
+02
+aa
+55
+01
+00
+e1
+45
+00
+aa
+55
+02
+00
+a2
+45
+c0
+12
+aa
+55
+01
+00
+55
+46
+94
+aa
+55
+03
+00
+c6
+45
+00
+48
+60
+aa
+55
+02
+00
+34
+46
+0a
+00
+aa
+55
+02
+00
+32
+46
+50
+00
+aa
+55
+02
+00
+1c
+47
+32
+00
+aa
+55
+01
+00
+06
+47
+02
+aa
+55
+08
+00
+c4
+43
+fb
+00
+48
+08
+fb
+00
+48
+08
+aa
+55
+01
+00
+94
+40
+01
+aa
+55
+01
+00
+c0
+40
+10
+aa
+55
+01
+00
+8b
+48
+10
+aa
+55
+06
+00
+dd
+42
+73
+83
+92
+a1
+b1
+c1
+aa
+55
+01
+00
+97
+43
+07
+aa
+55
+02
+00
+7d
+47
+96
+00
+aa
+55
+02
+00
+74
+47
+15
+00
+aa
+55
+02
+00
+9f
+43
+19
+00
+aa
+55
+04
+00
+76
+47
+1d
+00
+21
+00
+aa
+55
+02
+00
+34
+43
+28
+00
+aa
+55
+02
+00
+7a
+47
+30
+00
+aa
+55
+0c
+00
+4c
+43
+1f
+02
+01
+05
+03
+03
+12
+18
+03
+19
+c1
+03
+aa
+55
+07
+00
+5f
+47
+06
+ff
+06
+00
+03
+00
+80
+aa
+55
+11
+00
+6c
+43
+1f
+0f
+09
+42
+54
+35
+2e
+32
+20
+4b
+65
+79
+62
+6f
+61
+72
+64
+aa
+55
+0f
+00
+6d
+42
+0e
+42
+54
+35
+2e
+32
+20
+4b
+65
+79
+62
+6f
+61
+72
+64
+aa
+55
+08
+00
+d5
+42
+08
+00
+08
+00
+20
+00
+2c
+01
+aa
+55
+06
+00
+59
+47
+03
+12
+18
+ff
+00
+00
+aa
+55
+09
+00
+01
+49
+41
+70
+70
+6c
+65
+20
+49
+6e
+63
+aa
+55
+02
+00
+ff
+48
+0a
+18
+aa
+55
+10
+00
+ee
+48
+d0
+00
+2d
+12
+1e
+4b
+0f
+a4
+99
+4e
+ce
+b5
+31
+f4
+05
+79
+aa
+55
+02
+00
+0a
+49
+c1
+03
+aa
+55
+08
+00
+ce
+48
+01
+02
+e8
+04
+21
+70
+01
+00
+aa
+55
+16
+00
+d8
+48
+09
+b8
+0a
+25
+02
+0a
+26
+02
+0a
+24
+02
+81
+02
+c0
+05
+01
+09
+06
+a1
+01
+85
+02
+aa
+55
+01
+00
+1d
+44
+02
+aa
+55
+01
+00
+1f
+44
+0a
+aa
+55
+01
+00
+1e
+44
+0c
+aa
+55
+01
+00
+27
+44
+00
+aa
+55
+04
+00
+23
+44
+00
+07
+ff
+07
+aa
+55
+01
+00
+c1
+4a
+1e
+aa
+55
+02
+00
+1a
+47
+02
+00
+aa
+55
+01
+00
+54
+46
+64
+aa
+55
+02
+00
+51
+46
+58
+02
+aa
+55
+01
+00
+19
+47
+64
+aa
+55
+01
+00
+53
+46
+64
+aa
+55
+02
+00
+4f
+46
+58
+02
+aa
+55
+02
+00
+1e
+47
+70
+17
+aa
+55
+02
+00
+c7
+4a
+64
+00
+aa
+55
+01
+00
+cd
+4a
+05
+aa
+55
+01
+00
+ca
+4a
+02
+aa
+55
+02
+00
+a1
+49
+b8
+0b
+aa
+55
+08
+00
+78
+46
+01
+34
+00
+00
+00
+00
+00
+00
+aa
+55
+01
+00
+16
+47
+01
+aa
+55
+0f
+00
+97
+48
+00
+7f
+1e
+00
+7f
+1f
+00
+7f
+20
+00
+7f
+21
+00
+7f
+22
+aa
+55
+07
+00
+ba
+48
+07
+01
+02
+04
+03
+05
+06
+aa
+55
+02
+00
+c8
+48
+50
+00
+aa
+55
+02
+00
+c3
+4a
+58
+02
+aa
+55
+06
+00
+b2
+48
+13
+01
+a0
+0f
+00
+1e
+aa
+55
+03
+00
+1c
+49
+ff
+ff
+ff
+aa
+55
+01
+00
+7f
+4a
+01
+aa
+55
+06
+00
+95
+4a
+29
+14
+29
+14
+2a
+10
+aa
+55
+03
+00
+3e
+44
+ff
+03
+02
+aa
+55
+02
+00
+f4
+43
+01
+00
+aa
+55
+03
+00
+fe
+46
+00
+50
+00
+aa
+55
+02
+00
+bf
+4a
+20
+03
+aa
+55
+01
+00
+14
+49
+96
+aa
+55
+01
+00
+13
+49
+ff
+aa
+55
+02
+00
+16
+49
+8c
+ff
+aa
+55
+01
+00
+15
+49
+ff
+aa
+55
+04
+00
+18
+49
+ff
+97
+97
+97
+aa
+55
+03
+00
+10
+49
+0f
+0e
+ff
+aa
+55
+01
+00
+0f
+49
+05
+aa
+55
+01
+00
+66
+46
+05
+aa
+55
+0c
+00
+3c
+49
+c2
+c3
+c4
+c5
+c6
+c7
+80
+81
+82
+83
+84
+85
+aa
+55
+1c
+00
+1f
+49
+15
+06
+07
+08
+0a
+0b
+0d
+14
+ff
+c6
+c5
+c4
+c2
+c3
+10
+11
+83
+82
+81
+c7
+80
+84
+85
+ff
+ff
+ff
+ff
+ff
+aa
+55
+90
+00
+c7
+49
+00
+00
+00
+00
+00
+00
+00
+00
+51
+4c
+00
+00
+00
+53
+00
+2c
+4f
+00
+e1
+00
+00
+00
+e5
+00
+00
+42
+2a
+43
+00
+28
+31
+00
+50
+00
+e3
+00
+00
+00
+00
+52
+e6
+00
+00
+46
+00
+00
+7f
+e2
+00
+2e
+30
+25
+0c
+36
+0e
+3f
+38
+2d
+2f
+27
+13
+00
+33
+34
+00
+41
+40
+26
+12
+37
+0f
+00
+11
+23
+1c
+24
+18
+10
+0d
+0b
+00
+e0
+00
+3e
+00
+e4
+00
+00
+05
+22
+17
+21
+15
+19
+09
+0a
+00
+3a
+39
+1f
+1a
+1b
+16
+00
+00
+3b
+3c
+20
+08
+06
+07
+3d
+00
+35
+2b
+1e
+14
+1d
+04
+29
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+aa
+55
+0f
+00
+84
+4a
+00
+29
+44
+45
+e8
+ec
+ee
+ed
+eb
+e9
+ea
+f7
+ee
+a9
+4c
+aa
+55
+01
+00
+94
+4a
+29
+aa
+55
+b1
+00
+ea
+4a
+af
+00
+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
+29
+ff
+81
+00
+c0
+05
+0c
+09
+01
+a1
+01
+85
+03
+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
+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
+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
+3e
+aa
+55
+0c
+00
+16
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+02
+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
+10
+aa
+55
+05
+00
+43
+41
+ff
+04
+00
+00
+08
+aa
+55
+01
+00
+1d
+44
+01
+aa
+55
+01
+00
+1f
+44
+0a
+aa
+55
+01
+00
+1e
+44
+00
+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
+01
+00
+49
+41
+ff
+aa
+55
+02
+00
+9c
+40
+49
+41
+55
+aa
+aa
+55
+bc
+76
+91
+54
Index: output/program.lis
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/output/program.lis	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/output/program.lis	(working copy)
@@ -0,0 +1,32862 @@
+              include "bt_format "
+              org 0x0000
+0000 c2840010 bbit1 8 ,pf_patch_ext 
+0001 c00d0012 beq patch03_2 ,p_initialize_radio_cont 
+0002 c014004e beq patch05_0 ,p_lpm_dispatch 
+0003 c01f00f5 beq patch07_6 ,p_keyboard_setting_config_next 
+0004 c0200079 beq patch08_0 ,p_keyboard_store_device_info 
+0005 c02180a9 beq patch08_3 ,p_keyboard_bb_event_timer 
+0006 c0260084 beq patch09_4 ,p_kscan_dispatch 
+0007 c02b00f4 beq patch0a_6 ,p_keyboard_long_button_bt_discovery 
+0008 c02e011a beq patch0b_4 ,p_keyboard_value_tpye_consumer_set 
+0009 c0350105 beq patch0d_2 ,p_keyboard_le_parse_att 
+000a c03e01a4 beq patch0f_4 ,p_keyboard_app_enter_hibernate 
+000b c0748018 beq patch1d_1 ,p_otp_write 
+000c c0750015 beq patch1d_2 ,p_otp_read_data 
+000d c067805c beq patch19_7 ,p_keyboard_init 
+000e c07d004a beq patch1f_2 ,p_gpio_set_wake_by_current_state 
+000f 2020233e branch assert 
+
+pf_patch_ext:
+0010 c17f8000 rtneq patch3f_7 
+0011 2020233e branch assert 
+
+p_initialize_radio_cont:
+0012 70813df6 jam 0xf6 ,0x813d 
+0013 37d98200 until null ,lpo_edge 
+0014 20202250 branch initialize_radio_cont + 1 
+
+p_otp_read_data:
+0015 20406b28 call enable_otp_read 
+0016 20406b63 call otp_read_data1 
+0017 20206b26 branch otp_disable_chgpump 
+
+p_otp_write:
+0018 20406b22 call otp_enable_chgpump65 
+0019 20406b2f call otp_set_addr 
+001a 20406b29 call otp_reset 
+
+p_otp_program:
+001b e8408011 ifetcht 1 ,rega 
+001c 1a20a201 increase 1 ,rega 
+001d 18000e00 force 0 ,queue 
+
+p_otp_program_bit:
+001e 793f8022 set0 mark_otp_write ,mark 
+
+p_otp_program_bit2:
+001f a84c0000 qisolate0 temp 
+0020 20208042 branch p_otp_skip_0 ,true 
+0021 6ff08046 fetch 1 ,core_otp_din 
+0022 79207e06 set1 6 ,pdata 
+0023 79207e07 set1 7 ,pdata 
+0024 67f08046 store 1 ,core_otp_din 
+0025 70804702 jam 0x02 ,core_otp_ctrl 
+0026 70804782 jam 0x82 ,core_otp_ctrl 
+0027 793ffe07 set0 7 ,pdata 
+0028 67f08046 store 1 ,core_otp_din 
+0029 7080478a jam 0x8a ,core_otp_ctrl 
+002a 2000000b nop 11 
+002b 708047ca jam 0xca ,core_otp_ctrl 
+002c 20000021 nop 33 
+002d 7080474a jam 0x4a ,core_otp_ctrl 
+002e 2000002c nop 44 
+002f 708047ca jam 0xca ,core_otp_ctrl 
+0030 20000016 nop 22 
+0031 7080478a jam 0x8a ,core_otp_ctrl 
+0032 20000021 nop 33 
+0033 70804782 jam 0x82 ,core_otp_ctrl 
+0034 20000001 nop 1 
+0035 70804792 jam 0x92 ,core_otp_ctrl 
+0036 2000000a nop 10 
+0037 708047b2 jam 0xb2 ,core_otp_ctrl 
+0038 6ff08007 fetch 1 ,core_otp_rdata 
+0039 70804792 jam 0x92 ,core_otp_ctrl 
+003a 20000001 nop 1 
+003b 70804782 jam 0x82 ,core_otp_ctrl 
+003c 20000001 nop 1 
+003d afec0000 qisolate0 pdata 
+003e 2020801e branch p_otp_program_bit ,true 
+003f c5110042 bmark1 mark_otp_write ,p_otp_skip_0 
+0040 79200022 set1 mark_otp_write ,mark 
+0041 2020001f branch p_otp_program_bit2 
+
+p_otp_skip_0:
+0042 6ff10044 fetch 2 ,core_otp_addr 
+0043 1fe0fe01 increase 1 ,pdata 
+0044 67f10044 store 2 ,core_otp_addr 
+0045 18e08e01 increase 1 ,queue 
+0046 28e01e08 compare 8 ,queue ,0xf 
+0047 2420801e nbranch p_otp_program_bit ,true 
+0048 c200001b loop p_otp_program 
+0049 20206b26 branch otp_disable_chgpump 
+
+p_gpio_set_wake_by_current_state:
+004a 79200407 set1 gpio_active_bit ,temp 
+004b 20406ee0 call gpio_get_bit 
+004c 7d208407 nsetflag true ,gpio_active_bit ,temp 
+004d 20206eac branch gpio_set_wake 
+
+p_lpm_dispatch:
+004e 204023f0 call lpo_calibration 
+004f 6fe1c0bd fetch 3 ,mem_clks_per_lpo 
+0050 207a0000 rtn blank 
+0051 6fe0ca7a fetch 1 ,mem_keyboard_fn_flag 
+0052 247a0000 nrtn blank 
+0053 6fe0ca7b fetch 1 ,mem_keyboard_control_key_flag 
+0054 247a0000 nrtn blank 
+0055 6fe0c720 fetch 1 ,mem_device_direct_timer 
+0056 247a0000 nrtn blank 
+0057 6fe14750 fetch 2 ,mem_device_discovery_timer 
+0058 247a0000 nrtn blank 
+0059 6fe0ca9f fetch 1 ,mem_keyboard_commbination_control_key_delay_release_timer 
+005a 247a0000 nrtn blank 
+005b 20202467 branch lpm_dispatch + 4 
+
+p_keyboard_init:
+005c 20403717 call app_param_init 
+005d 20407384 call enable_authrom 
+005e 20400060 call p_keyboard_setting_config 
+005f 20203eb0 branch keyboard_init + 2 
+
+p_keyboard_setting_config:
+0060 20758000 rtn wake 
+0061 204035c8 call g24_transmit_init 
+0062 2040323a call g24_chmap_param_init 
+0063 20400066 call p_keyboard_param_init 
+0064 7040a60a jam 0x0a ,mem_lpm_overhead 
+0065 20203ec1 branch keyboard_setting_config + 4 
+
+p_keyboard_param_init:
+0066 20403ef4 call keyboard_compare_addr_init 
+0067 20400069 call p_keyboard_param_common_init 
+0068 20203edd branch keyboard_param_init + 2 
+
+p_keyboard_param_common_init:
+0069 58009000 setarg mouse_ble_att_list_addr 
+006a 67e142f9 store 2 ,mem_ui_le_uuid_table 
+006b 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+006c c291e80c bbit1 keyboard_enable_mouse ,hid_device_param_common_init 
+006d 580095b8 setarg keyboard_ble_hid_map_n_key_rollover_keyboard_addr 
+006e 67e148d6 store 2 ,mem_keyboard_le_hid_map 
+006f 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+0070 c290680c bbit1 keyboard_enable_26_n_key_rollover ,hid_device_param_common_init 
+0071 c290e80c bbit1 keyboard_enable_full_n_key_rollover ,hid_device_param_common_init 
+0072 580094fc setarg keyboard_ble_hid_map_magic_keyboard_addr 
+0073 67e148d6 store 2 ,mem_keyboard_le_hid_map 
+0074 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+0075 c291680c bbit1 keyboard_enable_magic_keyboard ,hid_device_param_common_init 
+0076 58004aea setarg mem_keyboard_le_table 
+0077 67e148d6 store 2 ,mem_keyboard_le_hid_map 
+0078 2020680c branch hid_device_param_common_init 
+
+p_keyboard_store_device_info:
+0079 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+007a c287807c bbit1 keyboard_enable_otp ,p_keyboard_store_otp_device_info 
+007b 20203fd8 branch keyboard_store_device_info + 1 
+
+p_keyboard_store_otp_device_info:
+007c 6fe14abd fetch 2 ,mem_otp_read_retention_offset 
+007d 68494abf fetcht 2 ,mem_otp_read_retention_max_size 
+007e 98467c00 isub temp ,null 
+007f 20610000 rtn positive 
+0080 6fe0c678 fetch 1 ,mem_device_flag 
+0081 c0003fe1 beq mode_24g_device ,keyboard_store_otp_device_info_g24 
+0082 c000bfeb beq mode_bt_device1 ,keyboard_store_otp_device_info_ble 
+0083 20600000 rtn 
+
+p_kscan_dispatch:
+0084 20400086 call p_keyboard_keyscan 
+0085 20204332 branch kscan_dispatch + 2 
+
+p_keyboard_keyscan:
+0086 20403ef9 call keyboard_gpio_init 
+0087 58000000 setarg 0 
+0088 67e1499e store 2 ,mem_keyscan_exmcu_wait_wake_count 
+0089 d8c0494e arg mem_keyscan_value_current ,contr 
+008a d8a04963 arg mem_keyscan_value_check ,contw 
+008b df200014 arg 20 ,loopcnt 
+008c 20407cdc call memcpy 
+008d 204043af call keyboard_stb_state_low 
+008e 5800494e setarg mem_keyscan_value_current 
+008f 67e14998 store 2 ,mem_keyscan_value_ptr 
+0090 58004ada setarg mem_keyscan_exmcu_value_new 
+0091 67e1499a store 2 ,mem_keyscan_exmcu_value_ptr 
+0092 204043ad call keyboard_stb_state_high 
+0093 204043ab call keyboard_clk_input 
+
+p_keyboard_keyscan_exmcu_start_check:
+0094 6fe1499e fetch 2 ,mem_keyscan_exmcu_wait_wake_count 
+0095 1fe0fe01 increase 1 ,pdata 
+0096 67e1499e store 2 ,mem_keyscan_exmcu_wait_wake_count 
+0097 c2848086 bbit1 9 ,p_keyboard_keyscan 
+0098 6848c911 fetcht 1 ,mem_mcu_clk_gpio 
+0099 20406ee0 call gpio_get_bit 
+009a 24208094 nbranch p_keyboard_keyscan_exmcu_start_check ,true 
+009b 204043af call keyboard_stb_state_low 
+009c 2020434a branch keyboard_keyscan_wait_wake_next 
+
+p_keyboard_device_poweron_timer:
+009d 6fe0cac2 fetch 1 ,mem_keyboard_device_poweron_timer 
+009e 207a0000 rtn blank 
+009f 1fe0ffff increase -1 ,pdata 
+00a0 67e0cac2 store 1 ,mem_keyboard_device_poweron_timer 
+00a1 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+00a2 c29400a6 bbit1 keyboard_enable_030_power_led ,p_keyboard_device_poweron_030_led 
+00a3 6fe0cac2 fetch 1 ,mem_keyboard_device_poweron_timer 
+00a4 203a4166 branch keyboard_device_led_off ,blank 
+00a5 2020416c branch keyboard_device_led_on 
+
+p_keyboard_device_poweron_030_led:
+00a6 6fe0cac2 fetch 1 ,mem_keyboard_device_poweron_timer 
+00a7 203a413c branch keyboard_power_led_off ,blank 
+00a8 2020413a branch keyboard_power_led_on 
+
+p_keyboard_bb_event_timer:
+00a9 204040e0 call keyboard_low_voltage_param_set 
+00aa 204040cc call keyboard_adc_read 
+00ab 204040dd call keyboard_adc_gpio_set_before_hibernate 
+00ac 20404100 call keyboard_low_voltage_led_timer 
+00ad 20404186 call keyboard_num_capslock_led_on_timer 
+00ae 204041ab call keyboard_rgb_on_timer 
+00af 2040009d call p_keyboard_device_poweron_timer 
+00b0 2040413e call keyboard_mode_led_timer 
+00b1 20404146 call keyboard_device_pair_led_timer 
+00b2 204000c6 call p_keyboard_key_press_timer 
+00b3 2040428f call keyboard_commbination_key_process 
+00b4 204042c4 call keyboard_same_key_long_press_timer 
+00b5 2040326c call g24_pair_timeout_timer 
+00b6 20403507 call g24_reconn_timeout_timer 
+00b7 204058f6 call mouse_24g_long_sleep_param_update_timer 
+00b8 204042b5 call keyboard_24g_repeat_send_data 
+00b9 204042bf call keyboard_24g_led_status_get_timer 
+00ba 20404299 call keyboard_check_discovery_timeout_timer 
+00bb 204042a4 call keyboard_check_direct_timeout_timer 
+00bc 2040550d call mouse_le_enable_att_list_timer 
+00bd 204042ad call keyboard_le_battery_updata_timer 
+00be 20405510 call mouse_le_send_smp_security_request_timer 
+00bf 204042b2 call keyboard_le_send_conn_param_update_timer 
+00c0 204042a1 call keyboard_le_auto_recognize_timer 
+00c1 20405527 call mouse_current_mult_update_timer 
+00c2 2040429e call keyboard_store_information_delay_timer 
+00c3 204042c9 call keyboard_commbination_delay_release_timer 
+00c4 204042cc call keyboard_usb_updata_timer 
+00c5 202042d5 branch keyboard_check_no_data_timeout_timer 
+
+p_keyboard_key_press_timer:
+00c6 6fe0c8a6 fetch 1 ,mem_keyboard_switch_device_flag 
+00c7 c28000cc bbit1 keyboard_flag_g24_device_button ,p_keyboard_device_select_g24_press_timer 
+00c8 204000e4 call p_keyboard_device_select_g24_nopress_timer 
+00c9 6fe0c8a6 fetch 1 ,mem_keyboard_switch_device_flag 
+00ca c28080d8 bbit1 keyboard_flag_bt_device_button ,p_keyboard_device_select_bt_press_timer 
+00cb 202000ea branch p_keyboard_device_select_bt_nopress_timer 
+
+p_keyboard_device_select_g24_press_timer:
+00cc 6fe0c8a9 fetch 1 ,mem_keyboard_switch_g24_press_timer 
+00cd 1fe67c64 sub pdata ,100 ,null 
+00ce 24610000 nrtn positive 
+00cf 1fe0fe01 increase 1 ,pdata 
+00d0 67e0c8a9 store 1 ,mem_keyboard_switch_g24_press_timer 
+00d1 c18c8000 rtnne 25 
+00d2 7048a700 jam 0 ,mem_keyboard_switch_g24_enable 
+00d3 6fe0c678 fetch 1 ,mem_device_flag 
+00d4 c1020000 rtneq mode_usb_device 
+00d5 204000f0 call p_keyboard_store_device_number 
+00d6 204048e6 call keyboard_stop_bluetooth_mode 
+00d7 20204680 branch keyboard_24g_start_pair_mode 
+
+p_keyboard_device_select_bt_press_timer:
+00d8 6fe0c8aa fetch 1 ,mem_keyboard_switch_bt_press_timer 
+00d9 1fe67c64 sub pdata ,100 ,null 
+00da 24610000 nrtn positive 
+00db 1fe0fe01 increase 1 ,pdata 
+00dc 67e0c8aa store 1 ,mem_keyboard_switch_bt_press_timer 
+00dd c18c8000 rtnne 25 
+00de 7048a800 jam 0 ,mem_keyboard_switch_bt_enable 
+00df 6fe0c678 fetch 1 ,mem_device_flag 
+00e0 c1020000 rtneq mode_usb_device 
+00e1 204000f0 call p_keyboard_store_device_number 
+00e2 20406824 call hid_device_le_send_empty_packet 
+00e3 20204675 branch keyboard_long_button_bt_discovery 
+
+p_keyboard_device_select_g24_nopress_timer:
+00e4 7048a900 jam 0 ,mem_keyboard_switch_g24_press_timer 
+00e5 6fe0c8a7 fetch 1 ,mem_keyboard_switch_g24_enable 
+00e6 207a0000 rtn blank 
+00e7 7048a700 jam 0 ,mem_keyboard_switch_g24_enable 
+00e8 204000f0 call p_keyboard_store_device_number 
+00e9 20206c99 branch soft_reset_chip 
+
+p_keyboard_device_select_bt_nopress_timer:
+00ea 7048aa00 jam 0 ,mem_keyboard_switch_bt_press_timer 
+00eb 6fe0c8a8 fetch 1 ,mem_keyboard_switch_bt_enable 
+00ec 207a0000 rtn blank 
+00ed 7048a800 jam 0 ,mem_keyboard_switch_bt_enable 
+00ee 20404045 call keyboard_store_device_number 
+00ef 20206c99 branch soft_reset_chip 
+
+p_keyboard_store_device_number:
+00f0 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+00f1 c287d594 bbit1 keyboard_enable_otp ,mouse_write_otp_device_flag 
+00f2 c2874045 bbit1 keyboard_enable_eeprom ,keyboard_store_device_number 
+00f3 20600000 rtn 
+
+p_keyboard_long_button_bt_discovery:
+00f4 20204677 branch keyboard_long_button_bt_discovery + 2 
+
+p_keyboard_setting_config_next:
+00f5 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+00f6 c287bf31 bbit1 keyboard_enable_otp ,keyboard_load_otp_info 
+00f7 20203ec8 branch keyboard_setting_config + 11 
+
+p_keyboard_load_2k_eeprom_info:
+00f8 6fe4488e fetch keyboard_flag_len ,mem_keyboard_flag 
+00f9 c31e80ff bbit0 keyboard_enable_sda_multi_r_line ,p_keyboard_load_2k_eeprom_device_info_next 
+00fa 6848c440 fetcht 1 ,mem_eeprom_sda_gpio 
+00fb 20404f0a call device_gpio_config_input_pu 
+00fc 6848c440 fetcht 1 ,mem_eeprom_sda_gpio 
+00fd 20406ee0 call gpio_get_bit 
+00fe 202080f8 branch p_keyboard_load_2k_eeprom_info ,true 
+
+p_keyboard_load_2k_eeprom_device_info_next:
+00ff 20404049 call keyboard_eeprom_init 
+0100 d8400080 arg 128 ,temp 
+0101 da204678 arg mem_device_flag ,rega 
+0102 da400000 arg keyboard_device_number_eeprom_offect ,regb 
+0103 20406cd7 call iicd_read_eep_data 
+0104 20203fa2 branch keyboard_load_info_check 
+
+p_keyboard_le_parse_att:
+0105 1a220c00 copy rega ,contr 
+0106 efe18006 ifetch 3 ,contr 
+0107 67e1c39b store 3 ,mem_le_att_opcode 
+0108 c000c919 beq attop_error_response ,keyboard_le_send_att_find_by_type_value_request_mac 
+0109 c003c95c beq attop_find_by_type_value_response ,keyboard_le_parse_att_find_by_type_value_rsp 
+010a c004c938 beq attop_read_by_type_response ,keyboard_le_send_att_read_by_type_rsp_mac 
+010b c005c952 beq attop_read_response ,keyboard_le_parse_att_manu_resp 
+010c c0044971 beq attop_read_by_type_request ,keyboard_le_parse_att_read_by_type_request 
+010d c0060112 beq attop_read_blob_request ,p_keyboard_le_parse_att_read_blob_request 
+010e c005499f beq attop_read_request ,keyboard_le_parse_att_read_request 
+010f c00949c5 beq attop_write_request ,keyboard_le_parse_att_write_request 
+0110 c02949cb beq attop_write_command ,keyboard_le_parse_att_write_command 
+0111 20202b76 branch le_parse_att2 
+
+p_keyboard_le_parse_att_read_blob_request:
+0112 efe10006 ifetch 2 ,contr 
+0113 67e10693 store 2 ,mem_le_att_offset 
+0114 98002200 iforce rega 
+0115 6849439c fetcht 2 ,mem_le_att_handle 
+0116 6fe14334 fetch 2 ,mem_le_pairing_handle 
+0117 98467c00 isub temp ,null 
+0118 2422ad2e nbranch le_send_att_read_blob_response ,zero 
+0119 20204999 branch keyboard_le_send_att_read_blob_response 
+
+p_keyboard_value_tpye_consumer_set:
+011a 18427e00 copy temp ,pdata 
+011b 704a6f05 jam hid_reportid_bit_consumer_key ,mem_keyboard_tx_data 
+011c 6848c9a6 fetcht 1 ,mem_keyboard_all_press_key_count 
+011d 18467c00 sub temp ,hid_key_null ,null 
+011e 2022c74b branch keyboard_value_consumer_all_key_release ,zero 
+011f c0740138 beq hid_key_multikey_media ,p_keyboard_value_media 
+0120 c074813e beq hid_key_multikey_vol_down ,p_keyboard_value_vol_down 
+0121 c0750142 beq hid_key_multikey_vol_up ,p_keyboard_value_vol_up 
+0122 c0758146 beq hid_key_multikey_mute ,p_keyboard_value_mute 
+0123 c076014a beq hid_key_multikey_pre_track ,p_keyboard_value_pre_track 
+0124 c076814e beq hid_key_multikey_next_track ,p_keyboard_value_next_track 
+0125 c0770152 beq hid_key_multikey_paly ,p_keyboard_value_play 
+0126 c0778156 beq hid_key_multikey_stop ,p_keyboard_value_stop 
+0127 c078015a beq hid_key_ac_home ,p_keyboard_value_ac_home 
+0128 c078815e beq hid_key_mail ,p_keyboard_value_mail 
+0129 c0790162 beq hid_key_my_computer ,p_keyboard_value_my_computer 
+012a c0798166 beq hid_key_ac_favorites ,p_keyboard_value_ac_favorites 
+012b c07a016a beq hid_key_calculator ,p_keyboard_value_calculator 
+012c c07a816e beq hid_key_ac_search ,p_keyboard_value_ac_search 
+012d c07b0175 beq hid_key_ac_back ,p_keyboard_value_ac_back 
+012e c07b8179 beq hid_key_os_soft_kb ,p_keyboard_value_os_soft_kb 
+012f c07c0181 beq hid_key_light_down ,p_keyboard_value_light_down 
+0130 c07c8185 beq hid_key_light_up ,p_keyboard_value_light_up 
+0131 c07d0189 beq hid_key_ios_android_os_lock ,p_keyboard_value_os_lock 
+0132 c07d818d beq hid_key_mac_eject ,p_keyboard_value_mac_eject 
+0133 c07e0191 beq hid_key_ac_forward ,p_keyboard_value_ac_forward 
+0134 c07e8195 beq hid_key_ac_stop ,p_keyboard_value_ac_stop 
+0135 c07f0199 beq hid_key_ac_refresh ,p_keyboard_value_ac_refresh 
+0136 c07f819d beq hid_key_system_sleep ,p_keyboard_value_system_sleep 
+0137 202046e6 branch keyboard_motion_data_check_next 
+
+p_keyboard_value_media:
+0138 6fe0c678 fetch 1 ,mem_device_flag 
+0139 c0804715 bne mode_24g_device ,keyboard_value_media 
+013a 58000183 setarg 0x0183 
+
+p_keyboard_24g_standard_data_send:
+013b 67e14a70 store 2 ,mem_keyboard_tx_data + 1 
+013c 704a6f03 jam hid_reportid_consumer_key ,mem_keyboard_tx_data 
+013d 202046e6 branch keyboard_motion_data_check_next 
+
+p_keyboard_value_vol_down:
+013e 6fe0c678 fetch 1 ,mem_device_flag 
+013f c0804718 bne mode_24g_device ,keyboard_value_vol_down 
+0140 580000ea setarg 0x00ea 
+0141 2020013b branch p_keyboard_24g_standard_data_send 
+
+p_keyboard_value_vol_up:
+0142 6fe0c678 fetch 1 ,mem_device_flag 
+0143 c080471a bne mode_24g_device ,keyboard_value_vol_up 
+0144 580000e9 setarg 0x00e9 
+0145 2020013b branch p_keyboard_24g_standard_data_send 
+
+p_keyboard_value_mute:
+0146 6fe0c678 fetch 1 ,mem_device_flag 
+0147 c080471c bne mode_24g_device ,keyboard_value_mute 
+0148 580000e2 setarg 0x00e2 
+0149 2020013b branch p_keyboard_24g_standard_data_send 
+
+p_keyboard_value_pre_track:
+014a 6fe0c678 fetch 1 ,mem_device_flag 
+014b c080471e bne mode_24g_device ,keyboard_value_pre_track 
+014c 580000b6 setarg 0x00b6 
+014d 2020013b branch p_keyboard_24g_standard_data_send 
+
+p_keyboard_value_next_track:
+014e 6fe0c678 fetch 1 ,mem_device_flag 
+014f c0804720 bne mode_24g_device ,keyboard_value_next_track 
+0150 580000b5 setarg 0x00b5 
+0151 2020013b branch p_keyboard_24g_standard_data_send 
+
+p_keyboard_value_play:
+0152 6fe0c678 fetch 1 ,mem_device_flag 
+0153 c0804722 bne mode_24g_device ,keyboard_value_play 
+0154 580000cd setarg 0x00cd 
+0155 2020013b branch p_keyboard_24g_standard_data_send 
+
+p_keyboard_value_stop:
+0156 6fe0c678 fetch 1 ,mem_device_flag 
+0157 c0804724 bne mode_24g_device ,keyboard_value_stop 
+0158 580000b7 setarg 0x00b7 
+0159 2020013b branch p_keyboard_24g_standard_data_send 
+
+p_keyboard_value_ac_home:
+015a 6fe0c678 fetch 1 ,mem_device_flag 
+015b c0804726 bne mode_24g_device ,keyboard_value_ac_home 
+015c 58000223 setarg 0x0223 
+015d 2020013b branch p_keyboard_24g_standard_data_send 
+
+p_keyboard_value_mail:
+015e 6fe0c678 fetch 1 ,mem_device_flag 
+015f c0804728 bne mode_24g_device ,keyboard_value_mail 
+0160 5800018a setarg 0x018a 
+0161 2020013b branch p_keyboard_24g_standard_data_send 
+
+p_keyboard_value_my_computer:
+0162 6fe0c678 fetch 1 ,mem_device_flag 
+0163 c080472a bne mode_24g_device ,keyboard_value_my_computer 
+0164 58000194 setarg 0x0194 
+0165 2020013b branch p_keyboard_24g_standard_data_send 
+
+p_keyboard_value_ac_favorites:
+0166 6fe0c678 fetch 1 ,mem_device_flag 
+0167 c080472c bne mode_24g_device ,keyboard_value_ac_favorites 
+0168 5800022a setarg 0x022a 
+0169 2020013b branch p_keyboard_24g_standard_data_send 
+
+p_keyboard_value_calculator:
+016a 6fe0c678 fetch 1 ,mem_device_flag 
+016b c080472e bne mode_24g_device ,keyboard_value_calculator 
+016c 58000192 setarg 0x0192 
+016d 2020013b branch p_keyboard_24g_standard_data_send 
+
+p_keyboard_value_ac_search:
+016e 6fe0c678 fetch 1 ,mem_device_flag 
+016f c0804730 bne mode_24g_device ,keyboard_value_ac_search 
+0170 6fe0caa1 fetch 1 ,mem_kb_computer_system 
+0171 c001015a beq system_os_ios ,p_keyboard_value_ac_home 
+0172 c001815a beq system_os_mac ,p_keyboard_value_ac_home 
+0173 58000221 setarg 0x0221 
+0174 2020013b branch p_keyboard_24g_standard_data_send 
+
+p_keyboard_value_ac_back:
+0175 6fe0c678 fetch 1 ,mem_device_flag 
+0176 c0804732 bne mode_24g_device ,keyboard_value_ac_back 
+0177 58000224 setarg 0x0224 
+0178 2020013b branch p_keyboard_24g_standard_data_send 
+
+p_keyboard_value_os_soft_kb:
+0179 6fe0c678 fetch 1 ,mem_device_flag 
+017a c0804737 bne mode_24g_device ,keyboard_value_os_soft_kb 
+017b 6fe0caa1 fetch 1 ,mem_kb_computer_system 
+017c c000817f beq system_os_android ,p_keyboard_value_os_soft_kb_android 
+017d 580001ae setarg 0x01ae 
+017e 2020013b branch p_keyboard_24g_standard_data_send 
+
+p_keyboard_value_os_soft_kb_android:
+017f 58000307 setarg 0x0307 
+0180 2020013b branch p_keyboard_24g_standard_data_send 
+
+p_keyboard_value_light_down:
+0181 6fe0c678 fetch 1 ,mem_device_flag 
+0182 c080473d bne mode_24g_device ,keyboard_value_light_down 
+0183 58000070 setarg 0x0070 
+0184 2020013b branch p_keyboard_24g_standard_data_send 
+
+p_keyboard_value_light_up:
+0185 6fe0c678 fetch 1 ,mem_device_flag 
+0186 c080473f bne mode_24g_device ,keyboard_value_light_up 
+0187 5800006f setarg 0x006f 
+0188 2020013b branch p_keyboard_24g_standard_data_send 
+
+p_keyboard_value_os_lock:
+0189 6fe0c678 fetch 1 ,mem_device_flag 
+018a c0804741 bne mode_24g_device ,keyboard_value_os_lock 
+018b 58000030 setarg 0x0030 
+018c 2020013b branch p_keyboard_24g_standard_data_send 
+
+p_keyboard_value_mac_eject:
+018d 6fe0c678 fetch 1 ,mem_device_flag 
+018e c0804743 bne mode_24g_device ,keyboard_value_mac_eject 
+018f 580000b8 setarg 0x00b8 
+0190 2020013b branch p_keyboard_24g_standard_data_send 
+
+p_keyboard_value_ac_forward:
+0191 6fe0c678 fetch 1 ,mem_device_flag 
+0192 c0804745 bne mode_24g_device ,keyboard_value_ac_forward 
+0193 58000225 setarg 0x0225 
+0194 2020013b branch p_keyboard_24g_standard_data_send 
+
+p_keyboard_value_ac_stop:
+0195 6fe0c678 fetch 1 ,mem_device_flag 
+0196 c0804747 bne mode_24g_device ,keyboard_value_ac_stop 
+0197 58000226 setarg 0x0226 
+0198 2020013b branch p_keyboard_24g_standard_data_send 
+
+p_keyboard_value_ac_refresh:
+0199 6fe0c678 fetch 1 ,mem_device_flag 
+019a c0804749 bne mode_24g_device ,keyboard_value_ac_refresh 
+019b 58000227 setarg 0x0227 
+019c 2020013b branch p_keyboard_24g_standard_data_send 
+
+p_keyboard_value_system_sleep:
+019d 6fe0c678 fetch 1 ,mem_device_flag 
+019e c0804752 bne mode_24g_device ,keyboard_value_system_sleep 
+019f 704a6f02 jam hid_reportid_system_ctrl ,mem_keyboard_tx_data 
+01a0 58000002 setarg 0x02 
+01a1 67e0ca70 store 1 ,mem_keyboard_tx_data + 1 
+01a2 202046e6 branch keyboard_motion_data_check_next 
+01a3 c076c720 beq hid_key_multikey_next_track ,keyboard_value_next_track 
+
+p_keyboard_app_enter_hibernate:
+01a4 204047b3 call keyboard_setgpio_hibernate 
+01a5 2020379c branch app_enter_hibernate 
+              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 
+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 
+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 
+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 
+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 
+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 
+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 
+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 
+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 
+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 
+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 
+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 
+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 
+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 
+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 p_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 
+
+p_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 
+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 
+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 
+
Index: output/ramcode.rom
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/output/ramcode.rom	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/output/ramcode.rom	(working copy)
@@ -0,0 +1,422 @@
+c2840010
+c00d0012
+c014004e
+c01f00f5
+c0200079
+c02180a9
+c0260084
+c02b00f4
+c02e011a
+c0350105
+c03e01a4
+c0748018
+c0750015
+c067805c
+c07d004a
+2020233e
+c17f8000
+2020233e
+70813df6
+37d98200
+20202250
+20406b28
+20406b63
+20206b26
+20406b22
+20406b2f
+20406b29
+e8408011
+1a20a201
+18000e00
+793f8022
+a84c0000
+20208042
+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
+2020801e
+c5110042
+79200022
+2020001f
+6ff10044
+1fe0fe01
+67f10044
+18e08e01
+28e01e08
+2420801e
+c200001b
+20206b26
+79200407
+20406ee0
+7d208407
+20206eac
+204023f0
+6fe1c0bd
+207a0000
+6fe0ca7a
+247a0000
+6fe0ca7b
+247a0000
+6fe0c720
+247a0000
+6fe14750
+247a0000
+6fe0ca9f
+247a0000
+20202467
+20403717
+20407384
+20400060
+20203eb0
+20758000
+204035c8
+2040323a
+20400066
+7040a60a
+20203ec1
+20403ef4
+20400069
+20203edd
+58009000
+67e142f9
+6fe4488e
+c291e80c
+580095b8
+67e148d6
+6fe4488e
+c290680c
+c290e80c
+580094fc
+67e148d6
+6fe4488e
+c291680c
+58004aea
+67e148d6
+2020680c
+6fe4488e
+c287807c
+20203fd8
+6fe14abd
+68494abf
+98467c00
+20610000
+6fe0c678
+c0003fe1
+c000bfeb
+20600000
+20400086
+20204332
+20403ef9
+58000000
+67e1499e
+d8c0494e
+d8a04963
+df200014
+20407cdc
+204043af
+5800494e
+67e14998
+58004ada
+67e1499a
+204043ad
+204043ab
+6fe1499e
+1fe0fe01
+67e1499e
+c2848086
+6848c911
+20406ee0
+24208094
+204043af
+2020434a
+6fe0cac2
+207a0000
+1fe0ffff
+67e0cac2
+6fe4488e
+c29400a6
+6fe0cac2
+203a4166
+2020416c
+6fe0cac2
+203a413c
+2020413a
+204040e0
+204040cc
+204040dd
+20404100
+20404186
+204041ab
+2040009d
+2040413e
+20404146
+204000c6
+2040428f
+204042c4
+2040326c
+20403507
+204058f6
+204042b5
+204042bf
+20404299
+204042a4
+2040550d
+204042ad
+20405510
+204042b2
+204042a1
+20405527
+2040429e
+204042c9
+204042cc
+202042d5
+6fe0c8a6
+c28000cc
+204000e4
+6fe0c8a6
+c28080d8
+202000ea
+6fe0c8a9
+1fe67c64
+24610000
+1fe0fe01
+67e0c8a9
+c18c8000
+7048a700
+6fe0c678
+c1020000
+204000f0
+204048e6
+20204680
+6fe0c8aa
+1fe67c64
+24610000
+1fe0fe01
+67e0c8aa
+c18c8000
+7048a800
+6fe0c678
+c1020000
+204000f0
+20406824
+20204675
+7048a900
+6fe0c8a7
+207a0000
+7048a700
+204000f0
+20206c99
+7048aa00
+6fe0c8a8
+207a0000
+7048a800
+20404045
+20206c99
+6fe4488e
+c287d594
+c2874045
+20600000
+20204677
+6fe4488e
+c287bf31
+20203ec8
+6fe4488e
+c31e80ff
+6848c440
+20404f0a
+6848c440
+20406ee0
+202080f8
+20404049
+d8400080
+da204678
+da400000
+20406cd7
+20203fa2
+1a220c00
+efe18006
+67e1c39b
+c000c919
+c003c95c
+c004c938
+c005c952
+c0044971
+c0060112
+c005499f
+c00949c5
+c02949cb
+20202b76
+efe10006
+67e10693
+98002200
+6849439c
+6fe14334
+98467c00
+2422ad2e
+20204999
+18427e00
+704a6f05
+6848c9a6
+18467c00
+2022c74b
+c0740138
+c074813e
+c0750142
+c0758146
+c076014a
+c076814e
+c0770152
+c0778156
+c078015a
+c078815e
+c0790162
+c0798166
+c07a016a
+c07a816e
+c07b0175
+c07b8179
+c07c0181
+c07c8185
+c07d0189
+c07d818d
+c07e0191
+c07e8195
+c07f0199
+c07f819d
+202046e6
+6fe0c678
+c0804715
+58000183
+67e14a70
+704a6f03
+202046e6
+6fe0c678
+c0804718
+580000ea
+2020013b
+6fe0c678
+c080471a
+580000e9
+2020013b
+6fe0c678
+c080471c
+580000e2
+2020013b
+6fe0c678
+c080471e
+580000b6
+2020013b
+6fe0c678
+c0804720
+580000b5
+2020013b
+6fe0c678
+c0804722
+580000cd
+2020013b
+6fe0c678
+c0804724
+580000b7
+2020013b
+6fe0c678
+c0804726
+58000223
+2020013b
+6fe0c678
+c0804728
+5800018a
+2020013b
+6fe0c678
+c080472a
+58000194
+2020013b
+6fe0c678
+c080472c
+5800022a
+2020013b
+6fe0c678
+c080472e
+58000192
+2020013b
+6fe0c678
+c0804730
+6fe0caa1
+c001015a
+c001815a
+58000221
+2020013b
+6fe0c678
+c0804732
+58000224
+2020013b
+6fe0c678
+c0804737
+6fe0caa1
+c000817f
+580001ae
+2020013b
+58000307
+2020013b
+6fe0c678
+c080473d
+58000070
+2020013b
+6fe0c678
+c080473f
+5800006f
+2020013b
+6fe0c678
+c0804741
+58000030
+2020013b
+6fe0c678
+c0804743
+580000b8
+2020013b
+6fe0c678
+c0804745
+58000225
+2020013b
+6fe0c678
+c0804747
+58000226
+2020013b
+6fe0c678
+c0804749
+58000227
+2020013b
+6fe0c678
+c0804752
+704a6f02
+58000002
+67e0ca70
+202046e6
+c076c720
+204047b3
+2020379c
Index: output/romcode.rom
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/output/romcode.rom	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/output/romcode.rom	(working copy)
@@ -0,0 +1,24576 @@
+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
+9a80fe00
+793ffe40
+20600000
+68490044
+98000c00
+1ff17e00
+984ffe00
+98c0fe00
+20600000
+1fed7e00
+1ff27e00
+6849c0bd
+9846fc00
+20407d64
+18078400
+20600000
+68490044
+9846fc00
+20407d61
+1ff07e00
+18070400
+98418400
+20600000
+d8400000
+18422800
+efe08003
+20407d41
+1a820400
+20407d72
+da40000a
+9a4ffe00
+9840fe00
+1fe20400
+c2007d36
+20600000
+d840003a
+98467c00
+24217d4a
+d8400061
+98467c00
+20217d4d
+d8400037
+98467e00
+20600000
+d8400030
+98467e00
+20600000
+d8400057
+98467e00
+20600000
+1f267c00
+20628000
+1fe37e00
+c2007d52
+20600000
+18007e01
+1f267c00
+20628000
+1fe3fe00
+c2007d58
+20600000
+58000000
+1f222200
+e8410006
+9840fe00
+c2007d5d
+9a26fc00
+20407d64
+1807fe00
+20600000
+207a8000
+20207d64
+efe08011
+e8408012
+98467c00
+24628000
+1a20a201
+1a40a401
+c2007d66
+20207dba
+98467c00
+24610000
+18427e00
+20600000
+9840fe00
+98460400
+98467e00
+20600000
+d8a00000
+20207d79
+d8a04000
+df201000
+20207ca5
+207a0000
+1fe27a00
+2040711d
+70820301
+20600000
+67f10205
+6ff08203
+79207e04
+67f08203
+20600000
+67f10207
+6ff08203
+79207e06
+67f08203
+20600000
+67f10205
+70820330
+20600000
+471c4027
+e8440011
+18417eff
+243a7d93
+184cfe00
+e7e40011
+1a20a207
+efe08011
+243a233e
+6fe0864d
+e7e08011
+20600000
+471cc027
+df200008
+efe40011
+207a0000
+efe08011
+243a7da2
+1a20a201
+c2007d9d
+2020233e
+d8400000
+e0408011
+20600000
+efe40011
+20600000
+efe08011
+20600000
+efe10011
+20600000
+d8400000
+6fe08006
+c2007dac
+18408401
+c2007dac
+18427e00
+20600000
+98467c00
+24610000
+18427e00
+20600000
+18007dff
+20600000
+18007c01
+20600000
+18007c00
+20600000
+78347c00
+20600000
+78547c00
+20600000
+78367c00
+20600000
+78567c00
+20600000
+7838fc00
+20600000
+7840fc00
+20600000
+7820fc00
+20600000
+58000001
+20600000
+58000000
+20600000
+e7e08005
+20600000
+1f267c00
+20628000
+e8408006
+9840fe00
+c2007dd2
+20600000
+1f227e00
+207a0000
+18c27e00
+9f20fe00
+1fe0ffff
+1fe20c00
+efe08006
+18c08dfe
+e7e08005
+c2007ddc
+20600000
+1ff07e00
+1feb7e00
+20600000
+1fed7e00
+20207de2
+471d4027
+58000000
+79207e15
+67e40016
+58000000
+e7e20005
+20600000
+df200010
+180a7e00
+e7e08005
+c2007dee
+20600000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+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
+00010200
+02280002
+00021801
+01280302
+02000320
+00012a05
+02020004
+00000229
+00020005
+18000228
+03020006
+07020128
+2a000200
+69684313
+61657370
+454c422d
+20202020
+20202020
+03020008
+09020128
+2a010200
+0a03c102
+28030200
+000b0201
+082a0402
+00060006
+012c0064
+0002000c
+180a0228
+0302000d
+0e020128
+2a500200
+248a0207
+00018266
+0002000f
+18120228
+03020010
+11060128
+2a4e0200
+00120101
+01280302
+02001312
+00022a4d
+02001400
+00022902
+02001500
+02022908
+02001601
+12012803
+4d020017
+0000022a
+02020018
+00000229
+08020019
+01030229
+0302001a
+1b020128
+2a4b0200
+090c051b
+8501a101
+09e90902
+09e209ea
+25011530
+9510750c
+c0008101
+0302001c
+1d020128
+2a4a0200
+00011104
+02001e01
+04012803
+4c02001f
+2000012a
+28000200
+21180f02
+28030200
+00221201
+012a1902
+02000063
+00020013
+01001302
+00130200
+13020004
+02000600
+00050013
+00001302
+00170200
+17022800
+01000000
+28000200
+02180102
+28030200
+00032001
+012a0502
+02000400
+00022902
+02000500
+00022800
+02000618
+02012803
+00020007
+4355112a
+204e4f48
+20203130
+20202020
+08202020
+28030200
+00090201
+022a0102
+000a00c8
+01280302
+02000b02
+06082a04
+64000600
+0c012c00
+28000200
+0d180a02
+28030200
+000e0201
+072a5002
+66248a02
+0f000182
+28000200
+10fff002
+28030200
+00111201
+0efff102
+00000000
+00000000
+00000000
+00120000
+02290202
+00130000
+01280302
+02001408
+000efff2
+00000000
+00000000
+00000000
+98000000
+91428a2f
+cf713744
+a5b5c0fb
+5be9b5db
+f13956c2
+a459f111
+d5923f82
+98ab1c5e
+01d807aa
+be12835b
+c3243185
+74550c7d
+fe72be5d
+a780deb1
+749bdc06
+c1c19bf1
+86e49b69
+c6efbe47
+cc0fc19d
+6f240ca1
+aa2de92c
+dc4a7484
+da5cb0a9
+5276f988
+6d983e51
+c8a831c6
+c7b00327
+f3bf597f
+47c6e00b
+51d5a791
+6706ca63
+85142929
+3827b70a
+fc2e1b21
+134d2c6d
+5453380d
+bb650a73
+2e766a0a
+8581c2c9
+a192722c
+4ba2bfe8
+70a81a66
+a3c24b8b
+19c76c51
+24d192e8
+85d69906
+70f40e35
+16106aa0
+0819a4c1
+4c1e376c
+b5274877
+b334b0bc
+4a391c0c
+4f4ed8aa
+f35b9cca
+ee682e6f
+6f748f82
+1478a563
+0884c878
+fa8cc702
+eb90beff
+f7a4506c
+f2bef9a3
+00c67178
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+00000000
+0000ca6d
\ No newline at end of file
Index: output/sched.rom
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/output/sched.rom	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/output/sched.rom	(working copy)
@@ -0,0 +1,888 @@
+mem_patch00:
+00   #mem_patch00
+00   #mem_patch01
+00   #mem_patch02
+04   #mem_patch03
+00   #mem_patch04
+01   #mem_patch05
+00   #mem_patch06
+40   #mem_patch07
+09   #mem_patch08
+10   #mem_patch09
+40   #mem_patch0a
+10   #mem_patch0b
+00   #mem_patch0c
+04   #mem_patch0d
+00   #mem_patch0e
+10   #mem_patch0f
+00   #mem_patch10
+00   #mem_patch11
+00   #mem_patch12
+00   #mem_patch13
+00   #mem_patch14
+00   #mem_patch15
+00   #mem_patch16
+00   #mem_patch17
+00   #mem_patch18
+80   #mem_patch19
+00   #mem_patch1a
+00   #mem_patch1b
+00   #mem_patch1c
+06   #mem_patch1d
+00   #mem_patch1e
+04   #mem_patch1f
+00   #mem_patch20
+00   #mem_patch21
+00   #mem_patch22
+00   #mem_patch23
+00   #mem_patch24
+00   #mem_patch25
+00   #mem_patch26
+00   #mem_patch27
+00   #mem_patch28
+00   #mem_patch29
+00   #mem_patch2a
+00   #mem_patch2b
+00   #mem_patch2c
+00   #mem_patch2d
+00   #mem_patch2e
+00   #mem_patch2f
+00   #mem_patch30
+00   #mem_patch31
+00   #mem_patch32
+00   #mem_patch33
+00   #mem_patch34
+00   #mem_patch35
+00   #mem_patch36
+00   #mem_patch37
+00   #mem_patch38
+00   #mem_patch39
+00   #mem_patch3a
+00   #mem_patch3b
+00   #mem_patch3c
+00   #mem_patch3d
+00   #mem_patch3e
+00   #mem_patch3f
+
+
+mem_keyboard_flag:
+#byte 0
+#bit0 KEYBOARD_24G_PAIRING_FLAG
+#bit1 KEYBOARD_STORE_MEMORY_FLAG
+#bit2 KEYBOARD_LOW_VOLTAGE_FLAG
+#bit3 KEYBOARD_BT_DISCOVERY_BUTTON_DOWN_FLAG
+#bit4 KEYBOARD_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG
+00
+
+#byte 1
+#bit0 KEYBOARD_ENABLE_WAKEUP_FROM_POWER
+#bit1 KEYBOARD_ENABLE_16M
+#bit2 KEYBOARD_DISABLE_ICE
+#bit3 KEYBOARD_ENABLE_ADC
+#bit4 KEYBOARD_ENABLE_FLASH
+#bit5 KEYBOARD_ENABLE_2K_EEPROM
+#bit6 KEYBOARD_ENABLE_EEPROM
+#bit7 KEYBOARD_ENABLE_OTP
+61
+
+#byte 2
+#bit0 KEYBOARD_ENABLE_24G
+#bit1 KEYBOARD_ENABLE_AUTO_24G_PARING
+#bit2 KEYBOARD_ENABLE_24G_AUTO_PAIR_NERVER_BEEN_PAIRED
+#bit3 KEYBOARD_ENABLE_COMMBINATION_KEY_BY_24G_PAIRING
+#bit4 KEYBOARD_ENABLE_24G_2M_PHY
+#bit5 KEYBOARD_ENABLE_24G_SEARCH_DONGLE
+00
+
+#byte 3
+#bit0 KEYBOARD_ENABLE_BLE_RANDOM_ADDRE
+#bit1 KEYBOARD_ENABLE_LE_BATTERY_SERVICE_CANCEL
+#bit2 KEYBOARD_ENABLE_BT_RECONNECT_TIMEOUT_ENTER_DISCOVERY
+#bit3 KEYBOARD_ENABLE_COMMBINATION_KEY_BY_BT_DISCOVERY
+0b
+
+#byte 4
+#bit0 KEYBOARD_ENABLE_26_N_KEY_ROLLOVER
+#bit1 KEYBOARD_ENABLE_FULL_N_KEY_ROLLOVER
+#bit2 KEYBOARD_ENABLE_MAGIC_KEYBOARD
+#bit3 KEYBOARD_ENABLE_MOUSE
+#bit4 KEYBOARD_ENABLE_USB
+00
+
+#byte 5
+#bit0 KEYBOARD_ENABLE_030_POWER_LED
+#bit1 KEYBOARD_ENABLE_LOW_LED
+#bit2 KEYBOARD_ENABLE_LOW_VOLTAGE_LED_BLINK_N_SECOND
+#bit3 KEYBOARD_ENABLE_BACKLIGHT
+01
+
+#byte 6
+#bit0 KEYBOARD_ENABLE_FN_ARROW
+#bit1 KEYBOARD_ENABLE_FN_LEFT_CTRL_OSK
+#bit2 KEYBOARD_ENABLE_FN_SPACE_LANGUAGE
+#bit3 KEYBOARD_ENABLE_FN_OS_SWITCH
+#bit4 KEYBOARD_ENABLE_FN_LOCK
+1f
+
+#byte 7
+#bit0 KEYBOARD_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO
+#bit1 KEYBOARD_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO_G24_CONNECT_GND
+#bit2 KEYBOARD_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO_BT_CONNECT_GND
+#bit3 KEYBOARD_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO_G24_CONNECT_VDD
+#bit4 KEYBOARD_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO_BT_CONNECT_VDD
+00
+
+
+mem_device_option:0f
+mem_power_on_flag:01
+
+#ui
+mem_ui_button_gpio:ff
+mem_ui_button_timeout:1e
+mem_ui_led_struct_num:01
+
+#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
+
+#usb
+mem_keyboard_usb_vid_pid:
+01 #enable
+#mouse only#auto pair
+51 31#VID
+10 50#PID
+#mouse & keyboard
+51 31#VID
+20 50#PID
+
+#2.4g
+mem_24g_lap: 03 11 36 55 51 61
+mem_24g_data_type:02	#01--mouse  02--keyboard
+mem_24g_fast_conn_enable:01
+mem_24g_fast_conn_addr:0f 0f 0f 0f
+mem_24g_ch_map_update:00   #00--disable   01--enable
+mem_24g_long_sleep_set_level:02    #00--30ms   01--50ms  02--80ms  03--100ms
+mem_24g_disable_fec1:00	 #00--default mode  01--new process
+mem_24g_rx_window:c0 12     #400us  ## e0 2e#1ms #transmitter long range min:520us
+mem_device_24g_pair_tx_power:94 #-20dBm
+
+mem_24g_enter_hibernate:00 48 60
+mem_24g_long_sleep_param_update_timer_init:0a 00	#1s
+mem_24g_transmit_by_interrupt_exit_count_init:50 00
+mem_device_24g_search_dongle_time_init:32 00	#3mins
+mem_store_information_delay_timer_init:02
+mem_local_rx_max_octets:fb 00 48 08 fb 00 48 08  # 1b
+
+#bt
+mem_lpm_mode:01
+mem_lpm_mult:10
+mem_lpm_mult_init:10
+
+
+#ble
+mem_le_lap:73 83 92 a1 b1 c1
+mem_le_adv_channel_map:07
+
+mem_le_battery_level_updata_timer_init:96 00
+mem_le_keyboard_handle:15 00
+mem_le_notify_handle:19 00
+mem_le_multimedia_handle:1d 00
+mem_le_systemctrl_handle:21 00
+mem_le_pairing_handle:28 00
+mem_le_battery_level_handle:30 00
+
+mem_le_adv_data_len:1f
+mem_le_adv_data:
+#flag
+02 01 05
+#uuid
+03 03 12 18
+#appearance
+03 19 c1 03
+
+mem_le_adv_swift_pair:
+#microsoft swift pair
+06 ff 06 00 03 00 80
+#name
+#'\09BT5.2 Keyboard
+
+mem_le_scan_data_len:1f
+mem_le_scan_data:
+#name
+'\09BT5.2 Keyboard
+
+#max 20bytes, att list data rom limits
+mem_le_name_len:
+'BT5.2 Keyboard
+
+mem_le_interval_min:
+08 00 #min interval
+08 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_le_search_mac_manu_name:
+41 70 70 6c 65 20 49 6e 63
+mem_le_search_mac_uuid:
+0a 18
+mem_le_search_service_uuid:
+D0 00 2D 12 1E 4B 0F A4 99 4E CE B5 31 F4 05 79
+
+mem_keybord_appearance:c1 03
+
+mem_keyboard_le_change_vid_pid_flag:
+01			# 00:disable    01:enable
+02
+e8 04		# vid: 04 e8
+21 70		# pid: 70 21
+01 00
+
+mem_keyboard_blob_response_consumer_customize:
+09 b8 		#bit4  MAC EJECT
+0a 25 02 		#bit5  AC Forward
+0a 26 02 		#bit6  AC Stop
+0a 24 02 		#bit6  AC Back
+
+81 02
+c0
+05 01
+09 06
+a1 01
+85 02
+
+#adc
+
+#adc config
+mem_adc_config_flag:02
+#01 ADC_CONFIG_HVIN
+#02 ADC_CONFIG_GPIO
+mem_adc_clkdiv:0a
+mem_adc_channel:0c
+#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
+
+mem_adc_dma_enable:00
+mem_adc_saddr_ptr:00 07
+mem_adc_eaddr_ptr:ff 07
+
+#led
+mem_keyboard_device_poweron_timer_init:1e
+
+#system
+mem_device_24g_power_on_fast_conn_timer:02 00	#1s
+mem_device_24g_reconn_timeout_init:64 #10s
+mem_device_24g_pair_timeout_init:58 02  #1min
+mem_device_fast_direct_timeout:64 #10s
+mem_device_direct_timeout:64  #10s
+mem_device_discovery_timeout:58 02  #1min
+mem_device_no_data_timeout:70 17   #10mins
+mem_adc_low_volatage_led_blink_timer:64 00 #10s
+mem_keyboard_pair_led_blink_count:05	#500ms
+mem_keyboard_low_volatage_led_blink_count:02		#200ms
+
+mem_same_keyvalue_timer_init:B8 0B		#5min
+
+mem_device_flag:01	#00--24g 01--ble
+mem_device1_type:34
+mem_device1_addr:00 00 00 00 00 00
+
+mem_device_number:01
+mem_keyboard_switch_device_to_g24:00 7f 1e		#enable flag + 2byte commbination key
+mem_keyboard_switch_device_to_bt1:00 7f 1f		#enable flag + 2byte commbination key
+mem_keyboard_switch_device_to_bt2:00 7f 20		#enable flag + 2byte commbination key
+mem_keyboard_switch_device_to_bt3:00 7f 21		#enable flag + 2byte commbination key
+mem_keyboard_switch_device_to_usb:00 7f 22
+
+#rgb
+mem_rgb_on_color:
+07		#white
+01		#blue
+02		#green
+04		#red
+03		#cyan
+05		#purple
+06		#orange
+
+mem_customize_timer_setup: 50 00  	# n*0.3125ms
+mem_keyboard_num_caps_scoll_led_on_timer:58 02		#1min
+
+mem_rgb_pwm_conf:
+13	#pwm gpio
+01	#pwm channel
+a0	#three  byte frequency
+0f
+00
+1e 	#duty cycle (by percent %)
+
+mem_keyboard_led_r_gpio:ff #13
+mem_keyboard_led_g_gpio:ff #14
+mem_keyboard_led_b_gpio:ff #15
+
+##												bt button connct gnd          bt button in matrix        two button commbination
+mem_keyboard_pairing_type:01					#                 00                                    00                                 01
+# mem_config_select_device_button_gpio:ff			#              00~16			               ff					ff
+mem_keyboard_commbination_key_bt:29 14			#		 not care				   not care			     Fn+C
+mem_keyboard_commbination_key_24g:29 14		#		 not care				   not care			     Esc+Q
+mem_keyboard_commbination_fast_conn_bt:2a 10	# bs+M
+mem_eeprom_wp_gpio:ff
+mem_eeprom_scl_gpio:03
+mem_eeprom_sda_gpio:02
+mem_eeprom_base:01 00
+mem_flash_base:00 50 00
+mem_otp_read_retention_max_size:20 03
+
+
+mem_keyboard_caps_led_gpio:96
+mem_keyboard_num_led_gpio:ff
+mem_keyboard_power_led_gpio:8c
+mem_keyboard_low_voltage_alarm_gpio:ff
+mem_keyboard_scroll_led_gpio:ff
+mem_keyboard_24g_led_gpio:ff
+mem_keyboard_bt1_led_gpio:97
+mem_keyboard_bt2_led_gpio:97
+mem_keyboard_bt3_led_gpio:97
+
+#mem_rf_debug_rx_gpio:96
+#mem_rf_debug_tx_gpio:89
+
+
+mem_mcu_stb_gpio:0f			#IOB0
+mem_mcu_clk_gpio:0e			#IOB1
+mem_mcu_rstb_gpio:ff
+
+mem_keyboard_pb_button_gpio:05
+mem_device_reuse_2ice_gpio:05
+#portA:8x,portB:cx,fixed conf,don't change
+mem_key_excol_gpio:c2 c3 c4 c5 c6 c7 80 81 82 83 84 85
+
+#gpio00~16
+mem_key_row_gpio:
+15		#r0/r8
+06		#r1
+07		#r2
+08		#r3
+0a		#r4
+0b		#r5
+0d		#r6
+14		#r7
+
+#gpio00~16   portA:8x,portB:cx
+mem_key_col_gpio:
+ff		#c0
+c6		#c1
+c5		#c2
+c4		#c3
+c2		#c4
+c3		#c5
+10		#c6
+11		#c7
+83		#c8
+82		#c9
+81		#c10
+c7		#c11
+80		#c12
+84		#c13
+85		#c14
+ff 		#c15
+ff		#c16
+ff		#c17
+ff		#c18
+ff		#c19
+
+mem_keyboard_keyvalue_map:
+#r0 ~ r7
+00 00 00 00 00 00 00 00					#c0
+51 4c 00 00 00 53 00 2c 				#c1
+4f 00 e1 00 00 00 e5 00 				#c2
+00 42 2a 43 00 28 31 00 				#c3
+50 00 e3 00 00 00 00 52 				#c4
+e6 00 00 46 00 00 7f e2					#c5
+00 2e 30 25 0c 36 0e 3f 				#c6
+38 2d 2f 27 13 00 33 34 				#c7
+00 41 40 26 12 37 0f 00 				#c8
+11 23 1c 24 18 10 0d 0b					#c9
+00 e0 00 3e 00 e4 00 00 				#c10
+05 22 17 21 15 19 09 0a 				#c11
+00 3a 39 1f 1a 1b 16 00 				#c12
+00 3b 3c 20 08 06 07 3d 				#c13
+00 35 2b 1e 14 1d 04 29					#c14
+00 00 00 00 00 00 00 00 				#c15
+00 00 00 00 00 00 00 00					#c16
+00 00 00 00 00 00 00 00					#c17
+
+mem_keyboard_fn_first:	00			#fn first  00:press f1~f12=f1~f12      01:press fn+f1~f12=f1~f12
+mem_keyboard_fn_esc:	29			#esc
+mem_keyboard_fn_f1: 44			#f1
+mem_keyboard_fn_f2:	45			#f2
+mem_keyboard_fn_f3:	e8			#f3
+mem_keyboard_fn_f4:	ec			#f4
+mem_keyboard_fn_f5:	ee			#f5
+mem_keyboard_fn_f6:	ed			#f6
+mem_keyboard_fn_f7:	eb			#f7
+mem_keyboard_fn_f8:	e9			#f8
+mem_keyboard_fn_f9:	ea			#f9
+mem_keyboard_fn_f10:	f7			#f10
+mem_keyboard_fn_f11:	ee			#f11
+mem_keyboard_fn_f12:	a9			#f12
+mem_keyboard_fn_del:	4c			#delete
+mem_keyboard_fn_lock_keyvalue:29
+
+mem_keyboard_le_table:
+#att table
+# 01 00 02 00 28  # Primary Service Declaration
+# 02 00 18        # Generic Access Service (UUID: 0x1800)
+# 02 00 02 03 28  # Characteristic Declaration
+# 01 0a           # Properties: Read, Write
+# 03 00 02 00 2a  # Device Name Characteristic (UUID: 0x2A00)
+# 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  # Characteristic Declaration
+# 01 02           # Properties: Read
+# 05 00 02 01 2a  # Appearance Characteristic (UUID: 0x2A01)
+# 02 c1 03        # Value: 0x03C2 (Generic Keyboard)
+
+# 06 00 02 03 28  # Characteristic Declaration
+# 01 02           # Properties: Read
+# 07 00 02 04 2a  # Peripheral Preferred Connection Parameters (UUID: 0x2A04)
+# 08 06 00 06 00  # Minimum Connection Interval: 0x0006 (7.5ms)
+# 64 00           # Maximum Connection Interval: 0x0064 (100ms)
+# 2c 01           # Slave Latency: 0x012C (300)
+
+# 08 00 02 00 28  # Primary Service Declaration
+# 02 01 18        # Generic Attribute Service (UUID: 0x1801)
+# 09 00 02 03 28  # Characteristic Declaration
+# 01 20           # Properties: Indicate
+# 0a 00 02 05 2a 01 00 # Service Changed Characteristic (UUID: 0x2A05)
+# 0b 00 02 02 29  # Client Characteristic Configuration Descriptor (UUID: 0x2902)
+# 02 00 00        # Value: 0x0000 (Notifications Disabled)
+
+
+# 0c 00 02 00 28  # Primary Service Declaration
+# 02 0a 18        # Battery Service (UUID: 0x180F)
+# 0d 00 02 03 28  # Characteristic Declaration
+# 01 02           # Properties: Read
+# 0e 00 02 29 2a  # Battery Level Characteristic (UUID: 0x2A19)
+# 06 59 69 43 68 69 70  # Value: Battery Level Data
+
+# 0f 00 02 03 28  # Characteristic Declaration
+# 01 02           # Properties: Read
+# 10 00 02 50 2a  # HID Information Characteristic (UUID: 0x2A4A)
+# 07 02 e8 04 21 70 01 00  # Value: HID Information Data
+
+# 11 00 02 00 28  # Primary Service Declaration
+# 02 12 18        # HID Service (UUID: 0x1812)
+# 12 00 02 03 28  # Characteristic Declaration
+# 01 06           # Properties: Read, Write Without Response
+# 13 00 02 4e 2a  # Report Map Characteristic (UUID: 0x2A4B)
+# 01 01           # Value: Report Map Data
+
+# 14 00 02 03 28  # Characteristic Declaration
+# 01 12           # Properties: Read, Notify
+# 15 00 02 4d 2a  # Report Characteristic (UUID: 0x2A4D)
+# 08 00 00 00 00 00 00 00 00  # Value: Report Data
+# 16 00 02 02 29  # Client Characteristic Configuration Descriptor (UUID: 0x2902)
+# 02 00 00        # Value: 0x0000 (Notifications Disabled)
+# 17 00 02 08 29  # Report Reference Descriptor (UUID: 0x2908)
+# 02 02 01        # Value: Report ID and Type
+
+# 18 00 02 03 28  # Characteristic Declaration
+# 01 12           # Properties: Read, Notify
+# 19 00 02 4d 2a  # Report Characteristic (UUID: 0x2A4D)
+# 07 00 00 00 00 00 00 00  # Value: Report Data
+# 1a 00 02 02 29  # Client Characteristic Configuration Descriptor (UUID: 0x2902)
+# 02 00 00        # Value: 0x0000 (Notifications Disabled)
+
+# 1b 00 02 08 29  # Report Reference Descriptor (UUID: 0x2908)
+# 02 01 01        # Value: Report ID and Type
+
+# 1c 00 02 03 28  # Characteristic Declaration
+# 01 12           # Properties: Read, Notify
+# 1d 00 02 4d 2a  # Report Characteristic (UUID: 0x2A4D)
+# 02 00 00        # Value: Report Data
+# 1e 00 02 02 29  # Client Characteristic Configuration Descriptor (UUID: 0x2902)
+# 02 00 00        # Value: 0x0000 (Notifications Disabled)
+# 1f 00 02 08 29  # Report Reference Descriptor (UUID: 0x2908)
+# 02 05 01        # Value: Report ID and Type
+
+# 20 00 02 03 28  # Characteristic Declaration
+# 01 12           # Properties: Read, Notify
+# 21 00 02 4d 2a  # Report Characteristic (UUID: 0x2A4D)
+# 02 00 00        # Value: Report Data
+# 22 00 02 02 29  # Client Characteristic Configuration Descriptor (UUID: 0x2902)
+# 02 00 00        # Value: 0x0000 (Notifications Disabled)
+
+# 23 00 02 08 29  # Report Reference Descriptor (UUID: 0x2908)
+# 02 04 01        # Value: Report ID and Type
+
+# 24 00 02 03 28  # Characteristic Declaration
+# 01 0e           # Properties: Read, Write
+# 25 00 02 4d 2a  # Report Characteristic (UUID: 0x2A4D)
+# 02 00 00        # Value: Report Data
+# 26 00 02 08 29  # Report Reference Descriptor (UUID: 0x2908)
+# 02 02 02        # Value: Report ID and Type
+
+# 27 00 02 03 28  # Characteristic Declaration
+# 01 02           # Properties: Read
+# 28 00 02 4b 2a  # HID Control Point Characteristic (UUID: 0x2A4C)
+# f5 05 0c 09 01 a1 01 85 05  # Value: HID Control Point Data
+# 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  # HID Keyboard Input Report
+# 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  # HID Mouse Input Report
+# 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  # HID System Control Input Report
+# 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  # Characteristic Declaration
+# 01 1a           # Properties: Read, Notify
+# 2a 00 02 33 2a  # Report Characteristic (UUID: 0x2A33)
+# 08 00 00 00 00 00 00 00 00  # Value: Report Data
+
+# 2b 00 02 02 29  # Client Characteristic Configuration Descriptor (UUID: 0x2902)
+# 02 01 00        # Value: 0x0001 (Notifications Enabled)
+
+# 2c 00 02 03 28  # Characteristic Declaration
+# 01 02           # Properties: Read
+# 2d 00 02 4a 2a  # HID Information Characteristic (UUID: 0x2A4A)
+# 04 01 01 00 03  # Value: HID Information Data
+
+# 2e 00 02 00 28  # Primary Service Declaration
+# 02 0f 18        # Battery Service (UUID: 0x180F)
+
+# 2f 00 02 03 28  # Characteristic Declaration
+# 01 12           # Properties: Read, Notify
+# 30 00 02 19 2a  # Battery Level Characteristic (UUID: 0x2A19)
+# 01 64           # Value: Battery Level (100%)
+
+# 31 00 02 02 29  # Client Characteristic Configuration Descriptor (UUID: 0x2902)
+# 02 00 00        # Value: 0x0000 (Notifications Disabled)
+
+# 32 00 02 03 28  # Characteristic Declaration
+# 01 04           # Properties: Write Without Response
+# 33 00 02 4c 2a  # HID Control Point Characteristic (UUID: 0x2A4C)
+# 00 00 00        # Value: HID Control Point Data
+
+#se map
+af 00              # Feature
+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 (0xE0)
+29 E7        #   Usage Maximum (0xE7)
+15 00        #   Logical Minimum (0)
+25 01        #   Logical Maximum (1)
+81 02        #   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
+95 01        #   Report Count (1)
+75 08        #   Report Size (8)
+81 03        #   Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No 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 (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
+95 01        #   Report Count (1)
+75 03        #   Report Size (3)
+91 03        #   Output (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-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 (0x00)
+29 FF        #   Usage Maximum (0xFF)
+81 00        #   Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
+C0              # End Collection
+
+05 0C        # Usage Page (Consumer)
+09 01        # Usage (Consumer Control)
+A1 01        # Collection (Application)
+85 03        #   Report ID (3)
+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 (0x0307)
+0A AE 01  #   Usage (AL Keyboard Layout)
+09 70        #   Usage (0x70)
+09 6F        #   Usage (0x6F)
+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 (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
+C0              # End Collection
+
+#af 00             # Feature
+
+
+# 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 (0xE0)
+# 29 E7        #   Usage Maximum (0xE7)
+# 15 00        #   Logical Minimum (0)
+# 25 01        #   Logical Maximum (1)
+# 81 02        #   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
+# 95 01        #   Report Count (1)
+# 75 08        #   Report Size (8)
+# 81 03        #   Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No 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 (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
+# 95 01        #   Report Count (1)
+# 75 03        #   Report Size (3)
+# 91 03        #   Output (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-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 (0x00)
+# 29 FF  #   Usage Maximum (0xFF)
+# 81 00        #   Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
+# 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 (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
+95 01        #   Report Count (1)
+75 05        #   Report Size (5)
+81 03        #   Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
+C0              # End Collection
+
+#sb map
+# af 00             # Feature
+# 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 (0xE0)
+# 29 E7        #   Usage Maximum (0xE7)
+# 15 00        #   Logical Minimum (0)
+# 25 01        #   Logical Maximum (1)
+# 81 02        #   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
+# 95 01        #   Report Count (1)
+# 75 08        #   Report Size (8)
+# 81 03        #   Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No 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 (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
+# 95 01        #   Report Count (1)
+# 75 03        #   Report Size (3)
+# 91 03        #   Output (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-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 (0x00)
+# 29 FF        #   Usage Maximum (0xFF)
+# 81 00        #   Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
+# C0              # End Collection
+
+# 05 0C        # Usage Page (Consumer)
+# 09 01        # Usage (Consumer Control)
+# A1 01        # Collection (Application)
+# 85 03        #   Report ID (3)
+# 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 (0x0307)
+# 0A AE 01  #   Usage (AL Keyboard Layout)
+# 09 70        #   Usage (0x70)
+# 09 6F        #   Usage (0x6F)
+# 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 (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
+# C0              # End Collection
+
+# # 05 0C        # Usage Page (Consumer)
+# # 09 01        # Usage (Consumer Control)
+# # A1 01        # Collection (Application)
+# # 85 03        #   Report ID (3)
+# # 19 00        #   Usage Minimum (Unassigned)
+# # 2A FF 03  #   Usage Maximum (0x03FF)
+# # 15 00        #   Logical Minimum (0)
+# # 26 FF 03  #   Logical Maximum (1023)
+# # 95 01        #   Report Count (1)
+# # 75 10        #   Report Size (16)
+# # 81 00        #   Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
+# # 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 (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
+# 95 01        #   Report Count (1)
+# 75 05        #   Report Size (5)
+# 81 03        #   Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
+# C0              # End Collection
+# 120 bytes
+
+
+
+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:3e
+mem_gpio_wakeup_cfg:00 00 00 00 00 00 00 00 00 00 00 02
+
+mem_version:08 0e 05 03 00
+mem_le_tx2m_delay:20
+
+mem_rx_window_sniff:00 10
+
+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
+
+
+#adc config
+mem_adc_config_flag:01
+#01 ADC_CONFIG_HVIN
+#02 ADC_CONFIG_GPIO
+mem_adc_clkdiv:0a
+mem_adc_channel:00
+#00 ADC_CH_VBAT
+#01 ADC_CH_VDCDC5V
+#06 ADC_CH_GPIO_4
+#07 ADC_CH_GPIO_2
+#08 ADC_CH_GPIO_1
+#09 ADC_CH_GPIO_3
+#0a ADC_CH_GPIO_0
+#0b ADC_CH_GPIO_5
+#0c ADC_CH_GPIO_6
+#0d ADC_CH_GPIO_7
+
+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:
+ff
+mem_rf_init_ptr:mem_rf_init_data
+
+
Index: program/app.prog
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/program/app.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/app_adpcm.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/app_car.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/app_car_remote.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/app_dongle.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/app_kb.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/program/app_kb.prog	(working copy)
@@ -0,0 +1,3925 @@
+
+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/keyboard/costumer/YeCai/keyboard_only_ble/program/app_module.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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_buffer、mem_module_uart_rx_buffer_end
+		mem_module_uart_tx_buffer、mem_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/keyboard/costumer/YeCai/keyboard_only_ble/program/app_mouse.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/program/app_mouse.prog	(working copy)
@@ -0,0 +1,5593 @@
+
+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
+	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
+	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
+	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		//1600
+	beq MOUSE_DPI_LEVEL2,mouse_set_pka8g2_cpi1		//2400
+	beq MOUSE_DPI_LEVEL3,mouse_set_pka8g2_cpi2		//3200
+	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
+	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
+	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
+	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
+	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
+	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 p_mouse_check_mouse_key_select_device_set,zero
+	fetch 1,mem_mouse_commbination_select_device_timer
+	branch mouse_commbination_key_count_init
+
+p_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
+	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/keyboard/costumer/YeCai/keyboard_only_ble/program/app_rec.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/app_shutter.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/app_shutter_dy.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/program/app_shutter_dy.prog	(working copy)
@@ -0,0 +1,1555 @@
+
+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	//鍒ゆ柇鏄惁鏄疘OS
+	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锛宲ositive缃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
+//鍙栨湁鏁堝湴鍧缁檓em_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锛宲ositive缃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
+
+//鍙栨湁鏁堝湴鍧缁檓em_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锛宲ositive缃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锛宲ositive缃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
+	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/keyboard/costumer/YeCai/keyboard_only_ble/program/ble_protocol_stack/le.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/ble_protocol_stack/le_advertising.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/ble_protocol_stack/le_l2cap_att.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/program/ble_protocol_stack/le_l2cap_att.prog	(working copy)
@@ -0,0 +1,1050 @@
+
+
+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
+	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/keyboard/costumer/YeCai/keyboard_only_ble/program/ble_protocol_stack/le_l2cap_att_wechat.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/ble_protocol_stack/le_l2cap_signalling.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/ble_protocol_stack/le_l2cap_smp.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/ble_protocol_stack/le_ll.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/program/ble_protocol_stack/le_ll.prog	(working copy)
@@ -0,0 +1,339 @@
+
+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
+	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/keyboard/costumer/YeCai/keyboard_only_ble/program/bt.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/program/bt.prog	(working copy)
@@ -0,0 +1,1801 @@
+//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 
+	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/keyboard/costumer/YeCai/keyboard_only_ble/program/debug.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/g24_protocol_stack/24g.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/program/g24_protocol_stack/24g.prog	(working copy)
@@ -0,0 +1,567 @@
+
+
+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
+	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 前端发送比1M快3us左右
+	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
+	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/keyboard/costumer/YeCai/keyboard_only_ble/program/g24_protocol_stack/24g_pair.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/program/g24_protocol_stack/24g_pair.prog	(working copy)
@@ -0,0 +1,418 @@
+
+
+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
+	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/keyboard/costumer/YeCai/keyboard_only_ble/program/g24_protocol_stack/24g_receiver.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/g24_protocol_stack/24g_reconn.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/g24_protocol_stack/24g_rssi.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/g24_protocol_stack/24g_transmitter.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/g24_protocol_stack/24g_txpower_ctrl.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/hci_main.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/hid.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/l2cap.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/patch.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/program/patch.prog	(working copy)
@@ -0,0 +1,574 @@
+
+
+	bbit1 8,pf_patch_ext
+	beq patch03_2,p_initialize_radio_cont
+	beq patch05_0,p_lpm_dispatch
+	beq patch07_6,p_keyboard_setting_config_next
+	beq patch08_0,p_keyboard_store_device_info
+	beq patch08_3,p_keyboard_bb_event_timer
+	beq patch09_4,p_kscan_dispatch
+	beq patch0a_6,p_keyboard_long_button_bt_discovery
+	beq patch0b_4,p_keyboard_value_tpye_consumer_set
+	beq patch0d_2,p_keyboard_le_parse_att
+	beq patch0f_4,p_keyboard_app_enter_hibernate
+	beq patch1d_1,p_otp_write
+	beq patch1d_2,p_otp_read_data
+	beq patch19_7,p_keyboard_init
+	beq patch1f_2,p_gpio_set_wake_by_current_state
+	branch assert
+
+pf_patch_ext:
+	rtneq patch3f_7
+	branch assert
+
+/////////////////////////////
+
+p_initialize_radio_cont:
+	jam 0xf6,0x813d
+	until null,lpo_edge
+	branch initialize_radio_cont+1
+
+p_otp_read_data:
+	call enable_otp_read
+	call otp_read_data1
+	branch otp_disable_chgpump
+
+/* regb = otp address, rega pointers data, loopcnt is count */
+p_otp_write:
+	//bpatch patch1d_1,mem_patch1d
+	call otp_enable_chgpump65
+	call otp_set_addr
+	call otp_reset
+p_otp_program:
+	ifetcht 1,rega
+	increase 1,rega
+	force 0,queue
+p_otp_program_bit:
+	set0 mark_otp_write,mark
+p_otp_program_bit2:
+	qisolate0 temp
+	branch p_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 p_otp_program_bit,true	/* program error */
+	bmark1 mark_otp_write,p_otp_skip_0
+	set1 mark_otp_write,mark
+	branch p_otp_program_bit2
+
+p_otp_skip_0:
+	fetch 2,core_otp_addr
+	increase 1,pdata
+	store 2,core_otp_addr
+	increase 1,queue
+	compare 8,queue,0xf
+	nbranch p_otp_program_bit,true
+	loop p_otp_program
+	branch otp_disable_chgpump
+
+p_gpio_set_wake_by_current_state:
+	set1 gpio_active_bit,temp
+	call gpio_get_bit
+	nsetflag true,gpio_active_bit,temp
+	branch gpio_set_wake
+
+//**************************APP INIT*******************************//
+p_lpm_dispatch:
+	call lpo_calibration
+	fetch 3,mem_clks_per_lpo
+	rtn blank
+	// fetch 1,mem_device_le_bb_connected_flag
+	// rtn blank
+	fetch 1,mem_keyboard_fn_flag
+	nrtn blank
+	fetch 1,mem_keyboard_control_key_flag
+	nrtn blank
+	fetch 1,mem_device_direct_timer
+	nrtn blank
+	fetch 2,mem_device_discovery_timer
+	nrtn blank
+	fetch 1,mem_keyboard_commbination_control_key_delay_release_timer
+	nrtn blank
+	branch lpm_dispatch+4
+
+p_keyboard_init:
+	//jam 0x0a,mem_lpm_overhead
+	call app_param_init
+	call enable_authrom
+	call p_keyboard_setting_config
+	branch keyboard_init+2
+
+p_keyboard_setting_config:
+	rtn wake
+	call g24_transmit_init
+	call g24_chmap_param_init
+	call p_keyboard_param_init
+	jam 0x0a,mem_lpm_overhead
+	branch keyboard_setting_config+4
+
+p_keyboard_param_init:
+	call keyboard_compare_addr_init
+	call p_keyboard_param_common_init
+	branch keyboard_param_init+2
+
+p_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 mem_keyboard_le_table
+	store 2,mem_keyboard_le_hid_map
+	branch hid_device_param_common_init
+
+p_keyboard_store_device_info:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit1 KEYBOARD_ENABLE_OTP,p_keyboard_store_otp_device_info
+	branch keyboard_store_device_info+1
+
+p_keyboard_store_otp_device_info:
+	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
+	rtn positive
+	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
+p_kscan_dispatch:
+	call p_keyboard_keyscan
+	branch kscan_dispatch+2
+
+p_keyboard_keyscan:
+	call keyboard_gpio_init
+	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
+	call keyboard_stb_state_low							// exmcu wake up
+	setarg mem_keyscan_value_current
+	store 2,mem_keyscan_value_ptr
+	setarg mem_keyscan_exmcu_value_new
+	store 2,mem_keyscan_exmcu_value_ptr
+	call keyboard_stb_state_high
+	call keyboard_clk_input
+p_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,p_keyboard_keyscan 								// 953us restart
+	fetcht 1,mem_mcu_clk_gpio							// waiting for exmcu wake done
+	call gpio_get_bit
+	nbranch p_keyboard_keyscan_exmcu_start_check,true
+	call keyboard_stb_state_low
+	branch keyboard_keyscan_wait_wake_next
+
+
+p_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,p_keyboard_device_poweron_030_led
+	fetch 1,mem_keyboard_device_poweron_timer
+	branch keyboard_device_led_off,blank
+	branch keyboard_device_led_on
+
+p_keyboard_device_poweron_030_led:
+	fetch 1,mem_keyboard_device_poweron_timer
+	branch keyboard_power_led_off,blank
+	branch keyboard_power_led_on
+
+p_keyboard_bb_event_timer:
+	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 p_keyboard_device_poweron_timer
+	call keyboard_mode_led_timer
+	call keyboard_device_pair_led_timer
+	//key
+	call p_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
+
+p_keyboard_key_press_timer:
+	fetch 1,mem_keyboard_switch_device_flag
+	bbit1 KEYBOARD_FLAG_G24_DEVICE_BUTTON,p_keyboard_device_select_g24_press_timer
+	call p_keyboard_device_select_g24_nopress_timer
+	fetch 1,mem_keyboard_switch_device_flag
+	bbit1 KEYBOARD_FLAG_BT_DEVICE_BUTTON,p_keyboard_device_select_bt_press_timer
+	branch p_keyboard_device_select_bt_nopress_timer
+
+p_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 p_keyboard_store_device_number
+	call keyboard_stop_bluetooth_mode
+	branch keyboard_24g_start_pair_mode
+
+p_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 p_keyboard_store_device_number
+	call hid_device_le_send_empty_packet
+	branch keyboard_long_button_bt_discovery
+
+
+p_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 p_keyboard_store_device_number
+	branch soft_reset_chip
+
+p_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
+
+p_keyboard_store_device_number:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit1 KEYBOARD_ENABLE_OTP,mouse_write_otp_device_flag
+	bbit1 KEYBOARD_ENABLE_EEPROM,keyboard_store_device_number
+	rtn
+
+p_keyboard_long_button_bt_discovery:
+	branch keyboard_long_button_bt_discovery+2
+
+/////////////////////////////////////store otp///////////////////////////////////////
+p_keyboard_setting_config_next:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	//bbit1 KEYBOARD_ENABLE_2K_EEPROM,p_keyboard_load_2k_eeprom_info
+	bbit1 KEYBOARD_ENABLE_OTP,keyboard_load_otp_info
+	branch keyboard_setting_config+11
+
+p_keyboard_load_2k_eeprom_info:
+	fetch KEYBOARD_FLAG_LEN,mem_keyboard_flag
+	bbit0 KEYBOARD_ENABLE_SDA_MULTI_R_LINE,p_keyboard_load_2k_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 p_keyboard_load_2k_eeprom_info,true
+p_keyboard_load_2k_eeprom_device_info_next:
+	call keyboard_eeprom_init
+	arg 128,temp
+	arg mem_device_flag,rega
+	arg KEYBOARD_DEVICE_NUMBER_EEPROM_OFFECT,regb
+	call iicd_read_eep_data
+	branch keyboard_load_info_check
+///////////////////////////ATT fix//////////////////////
+p_keyboard_le_parse_att:
+	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,p_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
+
+p_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
+	branch keyboard_le_send_att_read_blob_response
+
+//////////////////////////////////////media/////////////////////////////////////
+p_keyboard_value_tpye_consumer_set:
+	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,p_keyboard_value_media
+	beq 	HID_KEY_MULTIKEY_VOL_DOWN,p_keyboard_value_vol_down
+	beq 	HID_KEY_MULTIKEY_VOL_UP,p_keyboard_value_vol_up
+	beq 	HID_KEY_MULTIKEY_MUTE,p_keyboard_value_mute
+	beq 	HID_KEY_MULTIKEY_PRE_TRACK,p_keyboard_value_pre_track
+	beq 	HID_KEY_MULTIKEY_NEXT_TRACK,p_keyboard_value_next_track
+	beq 	HID_KEY_MULTIKEY_PALY,p_keyboard_value_play
+	beq 	HID_KEY_MULTIKEY_STOP,p_keyboard_value_stop
+
+	beq 	HID_KEY_AC_HOME,p_keyboard_value_ac_home
+	beq 	HID_KEY_MAIL,p_keyboard_value_mail
+	beq 	HID_KEY_MY_COMPUTER,p_keyboard_value_my_computer
+	beq 	HID_KEY_AC_FAVORITES,p_keyboard_value_ac_favorites
+	beq 	HID_KEY_CALCULATOR,p_keyboard_value_calculator
+	beq 	HID_KEY_AC_SEARCH,p_keyboard_value_ac_search
+	beq 	HID_KEY_AC_BACK,p_keyboard_value_ac_back
+	beq 	HID_KEY_OS_SOFT_KB,p_keyboard_value_os_soft_kb
+
+	beq 	HID_KEY_LIGHT_DOWN,p_keyboard_value_light_down
+	beq 	HID_KEY_LIGHT_UP,p_keyboard_value_light_up
+	beq 	HID_KEY_IOS_ANDROID_OS_LOCK,p_keyboard_value_os_lock
+
+	beq 	HID_KEY_MAC_EJECT,p_keyboard_value_mac_eject
+	beq 	HID_KEY_AC_FORWARD,p_keyboard_value_ac_forward
+	beq 	HID_KEY_AC_STOP,p_keyboard_value_ac_stop
+	beq 	HID_KEY_AC_REFRESH,p_keyboard_value_ac_refresh
+
+	beq 	HID_KEY_SYSTEM_SLEEP,p_keyboard_value_system_sleep
+	branch keyboard_motion_data_check_next
+
+p_keyboard_value_media:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_value_media
+	setarg 0x0183
+
+p_keyboard_24g_standard_data_send:
+	store 2,mem_keyboard_tx_data+1
+	jam HID_REPORTID_CONSUMER_KEY,mem_keyboard_tx_data
+	branch keyboard_motion_data_check_next
+
+p_keyboard_value_vol_down:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_value_vol_down
+	setarg 0x00ea
+	branch p_keyboard_24g_standard_data_send
+
+p_keyboard_value_vol_up:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_value_vol_up
+	setarg 0x00e9
+	branch p_keyboard_24g_standard_data_send
+
+p_keyboard_value_mute:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_value_mute
+	setarg 0x00e2
+	branch p_keyboard_24g_standard_data_send
+
+p_keyboard_value_pre_track:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_value_pre_track
+	setarg 0x00b6
+	branch p_keyboard_24g_standard_data_send
+
+p_keyboard_value_next_track:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_value_next_track
+	setarg 0x00b5
+	branch p_keyboard_24g_standard_data_send
+
+p_keyboard_value_play:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_value_play
+	setarg 0x00cd
+	branch p_keyboard_24g_standard_data_send
+
+p_keyboard_value_stop:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_value_stop
+	setarg 0x00b7
+	branch p_keyboard_24g_standard_data_send
+
+p_keyboard_value_ac_home:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_value_ac_home
+	setarg 0x0223
+	branch p_keyboard_24g_standard_data_send
+
+p_keyboard_value_mail:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_value_mail
+	setarg 0x018a
+	branch p_keyboard_24g_standard_data_send
+
+p_keyboard_value_my_computer:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_value_my_computer
+	setarg 0x0194
+	branch p_keyboard_24g_standard_data_send
+
+p_keyboard_value_ac_favorites:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_value_ac_favorites
+	setarg 0x022a
+	branch p_keyboard_24g_standard_data_send
+
+p_keyboard_value_calculator:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_value_calculator
+	setarg 0x0192
+	branch p_keyboard_24g_standard_data_send
+
+p_keyboard_value_ac_search:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_value_ac_search
+	fetch 1,mem_kb_computer_system
+	beq SYSTEM_OS_IOS,p_keyboard_value_ac_home
+	beq SYSTEM_OS_MAC,p_keyboard_value_ac_home
+	setarg 0x0221
+	branch p_keyboard_24g_standard_data_send
+
+p_keyboard_value_ac_back:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_value_ac_back
+	setarg 0x0224
+	branch p_keyboard_24g_standard_data_send
+
+p_keyboard_value_os_soft_kb:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_value_os_soft_kb
+	fetch 1,mem_kb_computer_system
+	beq SYSTEM_OS_ANDROID,p_keyboard_value_os_soft_kb_android
+	setarg 0x01ae
+	branch p_keyboard_24g_standard_data_send
+
+p_keyboard_value_os_soft_kb_android:
+	setarg 0x0307
+	branch p_keyboard_24g_standard_data_send
+
+p_keyboard_value_light_down:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_value_light_down
+	setarg 0x0070
+	branch p_keyboard_24g_standard_data_send
+
+p_keyboard_value_light_up:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_value_light_up
+	setarg 0x006f
+	branch p_keyboard_24g_standard_data_send
+
+p_keyboard_value_os_lock:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_value_os_lock
+	setarg 0x0030
+	branch p_keyboard_24g_standard_data_send
+
+p_keyboard_value_mac_eject:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_value_mac_eject
+	setarg 0x00b8
+	branch p_keyboard_24g_standard_data_send
+
+p_keyboard_value_ac_forward:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_value_ac_forward
+	setarg 0x0225
+	branch p_keyboard_24g_standard_data_send
+
+p_keyboard_value_ac_stop:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_value_ac_stop
+	setarg 0x0226
+	branch p_keyboard_24g_standard_data_send
+
+p_keyboard_value_ac_refresh:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,keyboard_value_ac_refresh
+	setarg 0x0227
+	branch p_keyboard_24g_standard_data_send
+
+p_keyboard_value_system_sleep:
+	fetch 1,mem_device_flag
+	bne MODE_24G_DEVICE,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
+	beq HID_KEY_MULTIKEY_NEXT_TRACK,keyboard_value_next_track
+
+/////////////////////////////////////////////////////////////////////////
+p_keyboard_app_enter_hibernate:
+	call keyboard_setgpio_hibernate
+	branch app_enter_hibernate
+
Index: program/peripherals.prog
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/program/peripherals.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/program/peripherals.prog	(working copy)
@@ -0,0 +1,3250 @@
+
+
+
+/* ===================== 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
+	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/keyboard/costumer/YeCai/keyboard_only_ble/program/security.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/sim.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/simple_pairing.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/ui.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/usb.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/program/utility.prog	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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: sched/1.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/1.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/1.dat	(working copy)
@@ -0,0 +1,530 @@
+#device option
+mem_device_option:06
+#power on config
+mem_ui_button_gpio:ff
+
+mem_le_lap:61 21 20 98 07 2a
+mem_le_name_len:
+'BLE-M3
+
+mem_tx_power:06
+
+//save otp addr
+mem_shutter_efuse_start_offset: b0 1f
+mem_shutter_efuse_end_offset: 70 1a
+
+mem_shutter_le_pairing_handle:2b 00
+
+#榛樿鐩告満鍦
+#mem_initial_move_conf:aa 00 78 00 69 00 38 00
+#宸︿笅瑙
+#mem_initial_move_conf:0a 00 1e 00 07 00 06 00
+#瀹夊崜涓棿锛孖OS宸︿笅瑙
+mem_initial_move_conf:43 08 4a 0e 07 00 06 00
+
+mem_shutter_dy_conf:01
+#soft switch first power on
+mem_shutter_soft_switch_first_power_on:00
+
+#led config
+mem_shutter_led_on_light_dark_led_conf:
+00		#type:stop blink
+00		#blink count:no blink
+8c		#led gpio number:GPIO01
+46 00	#led blink light time
+96 00	#led blink dark time
+mem_shutter_led_off_light_dark_led_conf:
+01		#type:start blink
+03		#blink count:no blink
+8c		#led gpio number:GPIO01
+46 00	#led blink light time
+96 00	#led blink dark time
+
+
+mem_shutter_reconn_blink_on_time_conf:
+20 01
+20 03
+mem_shutter_discovery_blink_on_time_conf:
+20 01
+20 03
+
+#hard_soft_switch config
+mem_shutter_hard_soft_switch_case_temp:00
+mem_shutter_soft_switch_button_gpio_temp:ff
+
+#100ms timera
+mem_shutter_ble_discovery_time_conf:
+b8 0b #discovery_timeout
+70 17 #connect_timeout
+b8 0b #sleep_timeout
+b8 0b #sleep_timer
+
+
+#key config
+mem_shutter_key_num_conf:06
+mem_shutter_dy_key_conf:
+# #test 6key
+# 07
+# 0b
+# 13
+# 14
+# 15
+# 16
+# 0c
+
+# jxy-181
+07	#right
+12 	#like
+13 	#down
+06 	#photo
+08 	#up
+14 	#left
+
+# ff	#right
+# ff 	#like
+# 13 	#down
+# ff 	#photo
+# ff 	#up
+# ff 	#left
+
+mem_combine_key0:
+#6key
+28 00 #left 2
+09 00 #right 2
+18 00 #up 2
+0c 00 #down 2
+
+#6key -key mirror
+#09 00 #left 2
+#28 00 #right 2
+#0c 00 #up 2
+#18 00 #down 2
+
+#7key
+# 60 00 #left 2
+# 41 00 #right 2
+# 50 00 #up 2
+# 44 00 #down 2
+# 00 00
+
+#7key -key mirror
+#41 00 #left 2
+#60 00 #right 2
+#44 00 #up 2
+#50 00 #down 2
+#00 00
+
+
+mem_combine_key_release_value:
+#6key
+# 08 00
+#7key
+40 00
+
+
+mem_shutter_iphone_up_mid:
+1e 1e 1f 20 28 28 00
+mem_shutter_iphone_like_mid:
+1e 1e 1f 20 28 28 00
+mem_shutter_iphone_move_mid:
+1e 1e 1f 20 28 28 00
+
+
+mem_key0_press_i:  #right
+00
+mem_key0_release_new_i:
+27 24 24 24 28 23 23 23
+mem_key0_long_press_i:
+04 06 00
+
+mem_key1_press_i:#like
+27 00 28 00
+mem_key1_release_new_i:
+28 28 00
+
+mem_shutter_link_data_i:
+27 28 28 27 28 28 00
+
+mem_key2_press_i:#down
+00
+mem_key2_release_new_i:
+27 26 26 26 28 25 25 25
+
+#toggle between vol-inc and vol-dec
+mem_key3_press_i:#photo
+00
+mem_key3_release_new_i:#volume increment
+#7key
+01 06 00
+#6key
+# 27 01 06 28 00
+mem_key3_release_new_i_t:#volume decrement
+#7key
+02 06 00
+#6key
+# 27 02 06 28 00
+
+mem_key4_press_i:#up
+00
+mem_key4_release_new_i:
+27 25 25 25 28 26 26 26
+
+mem_key5_press_i:#left
+00
+mem_key5_release_new_i:
+27 23 23 23 28 24 24 24
+mem_key5_long_press_i: #lock
+03 06 00
+
+mem_key6_release_new_i:#move
+27 28 00 00
+mem_key6_release_new:#move
+00
+
+mem_dy_key0_press:  #right
+00
+mem_key0_release_new:
+13 14 15 16 17 18 19 1a 1b 00
+mem_key0_long_press:
+05 06 00
+
+mem_dy_key1_press:#like
+0b 11 00
+mem_key1_release_new:
+00
+
+mem_shutter_link_data:#like key loop
+0b 11 00 00 0b 11 00
+
+mem_dy_key2_press: #down
+00
+mem_key2_release_new:
+0f 0e 0d 0c 0b 0a 09 08 07 00
+mem_key2_long_press:#volume decrement
+02 06 00
+mem_key2_long_release:
+1c 1d 00
+
+#toggle between vol-inc and vol-dec
+mem_dy_key3_press:#photo
+00
+mem_key3_release_new:#volume increment
+# 1c 02 06 1d 00 #6key
+01 06 #7key
+mem_key3_release_new_t:#volume decrement
+# 1c 01 06 1d 00 #6key
+02 06 #7key
+
+
+mem_dy_key4_press:#up
+00
+mem_key4_release_new:
+08 09 0a 0b 0c 0d 0e 0f 10 00
+mem_key4_long_press:#volume increment
+01 06 00
+mem_key4_long_release:
+00
+
+
+mem_dy_key5_press:#left
+00
+mem_key5_release_new:
+1a 19 18 17 16 15 14 13 12 00
+mem_key5_long_press: #lock
+03 06 00
+
+mem_combine_key0_press:
+01
+mem_combine_key1_press:
+02
+mem_combine_key2_press:
+03
+mem_combine_key3_press:
+04
+mem_combine_key_release:
+00
+
+mem_move_mode_set:00 #00 combine key, 01 single key when another key has already triggered
+mem_move_mode_key_index:03 #move key index,SHUTTER_MOVE_KEY_NUM,SHUTTER_PHOTO_KEY_NUM
+mem_move_mode_trigger_enable:00
+
+mem_shutter_long_key_released_flag:01
+
+################ble kb val list#######################
+mem_shutter_mousekey_value_list:
+#Media key
+02 1b 00 01 00 00 00 00 00 00 #1 volume increment
+02 1b 00 02 00 00 00 00 00 00 #2 volume decrement
+02 1b 00 04 00 00 00 00 00 00 #3 lock
+02 1b 00 08 00 00 00 00 00 00 #4 ios home
+02 1b 00 10 00 00 00 00 00 00 #5 android home
+02 1b 00 00 00 00 00 00 00 00 #6 release
+#Android Key
+#up down
+06 23 00 02 01 00 00 00 00 00 #7
+06 23 00 03 01 f4 06 20 02 00 #8
+06 23 00 03 01 f4 06 d4 02 00 #9
+06 23 00 03 01 f4 06 28 03 00 #a
+06 23 00 03 01 f4 06 3c 04 00 #b like press
+06 23 00 03 01 f4 06 20 04 00 #c
+06 23 00 03 01 f4 06 74 05 00 #d
+06 23 00 03 01 f4 06 28 06 00 #e
+06 23 00 03 01 f4 06 dc 06 00 #f
+06 23 00 02 01 f4 06 70 07 00 #10
+#like release
+06 23 00 02 01 f4 06 3c 04 00 #11
+#right left
+06 23 00 02 01 f0 08 0f 06 00#12
+06 23 00 03 01 a3 07 0f 06 00#13
+06 23 00 03 01 2c 06 0f 06 00#14
+06 23 00 03 01 2c 05 0f 06 00#15
+06 23 00 03 01 52 04 0f 06 00#16
+06 23 00 03 01 e2 03 0f 06 00#17
+06 23 00 03 01 4f 03 0f 06 00#18
+06 23 00 03 01 4f 02 0f 06 00#19
+06 23 00 03 01 ab 01 0f 06 00#1a
+06 23 00 02 01 01 01 0f 06 00#1b
+#move
+06 23 00 07 04 00 00 00 00 00#1c    //move press
+06 23 00 06 04 00 00 00 00 00#1d    //move release
+
+#ios key
+#ios localinit key
+03 1b 00 01 18 80 00 00 00 00 #1e
+03 1b 00 00 10 80 00 00 00 00 #1f
+03 1b 00 41 40 0a 00 00 00 00 #20 ios init up local
+03 1b 00 41 40 0a 00 00 00 00 #21 ios init like local
+03 1b 00 41 40 0a 00 00 00 00 #22 ios init down/right/left local
+03 1b 00 20 00 00 00 00 00 00 #23 ios left
+03 1b 00 e0 0f 00 00 00 00 00 #24 ios right
+03 1b 00 00 00 02 00 00 00 00 #25 ios up
+03 1b 00 00 00 fe 00 00 00 00 #26 ios down
+
+#mouse key
+03 17 00 01 00 00 00 00 00 00 #27   press
+03 17 00 00 00 00 00 00 00 00 #28   release
+03 1b 00 00 00 00 00 00 00 00 #29 ios move
+03 1b 00 00 00 00 00 00 00 00 #2a ios move double
+
+03 1b 00 01 f8 7f 00 00 00 00 #2b
+03 1b 00 64 00 00 00 00 00 00 #2c
+03 1b 00 00 b0 f9 00 00 00 00 #2d
+mem_shutter_move_data:
+00 00 00  #defualt
+
+mem_ble_shutter_dy_interval_min_android:
+12 00
+15 00
+10 00
+2c 01
+
+mem_ble_shutter_dy_interval_min_ios:
+18 00
+1c 00
+10 00
+2c 01
+
+#attribute list: handle 2bytes, uuid 2bytes, length 1bytes, attribute Nbytes
+mem_shutter_le_uuid_sup:
+#Primary service GATT ------
+01 00 02 00 28 02 01 18
+#Service changed
+02 00 02 03 28 01 20
+03 00 02 05 2a 01 00
+#Client Characteristic Configuration
+04 00 02 02 29 02 00 00
+
+#Primary service GAP ------
+05 00 02 00 28 02 00 18
+
+#Device name
+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
+
+#Appearance
+08 00 02 03 28 01 02
+09 00 02 01 2a 02 c1 03
+
+#Peripheral Preferred Connection Parameters
+0a 00 02 03 28 01 02
+0b 00 02 04 2a 08 06 00 06 00 64 00 2c 01 # interval 6ms, latency 100, timeout 300
+
+#Primary service device information ------
+0c 00 02 00 28 02 0a 18
+#PNP id
+0d 00 02 03 28 01 02
+0e 00 02 50 2a 07 01 05 0e 00 0a 02 40
+
+#Primary service hid ------
+0f 00 02 00 28 02 12 18
+
+#Protocol mode
+10 00 02 03 28 01 06
+11 00 02 4e 2a 01 01
+
+
+#Hid report
+12 00 02 03 28 01 10
+13 00 02 4d 2a 07 00 00 00 00 00 00 00
+#Client Characteristic
+14 00 02 02 29 02 00 00
+#Report reference
+15 00 02 08 29 02 01 01 # report id=1, type=1 input
+
+#Hid report id 4
+16 00 02 03 28 01 10
+17 00 02 4d 2a 03 00 00 00
+#Client Characteristic
+18 00 02 02 29 02 00 00
+#Report reference
+19 00 02 08 29 02 04 01 # report id=4, type=1 input
+
+#Hid report id 3
+1a 00 02 03 28 01 10
+1b 00 02 4d 2a 02 00 00
+#Client Characteristic
+1c 00 02 02 29 02 00 00
+#Report reference
+1d 00 02 08 29 02 03 01 # report id=3, type=1 input
+
+#Hid report id 5
+1e 00 02 03 28 01 10
+1f 00 02 4d 2a 03 00 00 00
+#Client Characteristic
+20 00 02 02 29 02 00 00
+#Report reference
+21 00 02 08 29 02 05 01 # report id=5, type=1 input
+
+#Hid report id 6
+22 00 02 03 28 01 10
+23 00 02 4d 2a 05 00 00 00 00 00
+#Client Characteristic
+24 00 02 02 29 02 00 00
+#Report reference
+25 00 02 08 29 02 06 01 # report id=6, type=1 input
+
+#Hid report id 2
+26 00 02 03 28 01 12
+27 00 02 4d 2a 02 00 00
+#00 00 00 00 00
+#Client Characteristic
+28 00 02 02 29 02 00 00
+#Report reference
+29 00 02 08 29 02 02 01 # report id=2, type=1 input
+
+#Report map
+2a 00 02 03 28 01 02
+2b 00 02 4b 2a 01 00
+
+#Hid information
+2c 00 02 03 28 01 02
+2d 00 02 4a 2a 04 11 01 00 01
+
+#Hid control point
+2e 00 02 03 28 01 04
+2f 00 02 4c 2a 01 00
+30 00 02 00 28 02 0f 18
+
+00 00
+
+mem_shutter_le_map_len_android:63 00 #6d 00
+mem_shutter_le_map_len_ios:b7 00
+mem_shutter_le_hid_map:
+05 0c # Usage Page(Consumer) #legth 30
+09 01 # Usage(Consumer Control)
+a1 01 # Collection(Application)
+85 03 # Report ID(3)
+15 00 # Logical Minimum(0)
+25 01 # Logical Maximum(1)
+75 01 # Report Size(1)
+95 05 # Report Count(5)
+09 e9 # volume up
+09 ea # volume down
+09 30 # lock
+09 40 # home
+0a 23 02  #home
+81 06 #Input (Data, Variable, Absolute)
+c0 #end
+
+05 0d	#Usage Page (Digitizer)
+09 04 	# Usage(touch screem)
+a1 01 	#Collection (Application)
+85 06	#Report Id (6)
+09 24   #Usage (Stylus)
+a1 02  	#Collection (Logical)
+09 42	#Usage (Tip Switch)
+15 00	#Logical minimum (0)
+25 01 	#Logical maximum (1)
+75 01	#Report Size (1)
+95 01	#Report Count (1)
+81 02 	#Input (Data,Value,Absolute,Bit Field)
+09 32	#Usage (In Range)
+81 02  	#Input (Data,Value,Absolute,Bit Field)
+95 06	#Report Count (6)
+81 03 	#Input (Constant,Array,Absolute,Bit Field)
+75 08 #        Report Size (8)
+09 51 #        Usage (Contact identifier)
+95 01 #        Report Count (1)
+81 02 #        Input (Data,Value,Absolute,Bit Field)
+05 01	#Usage Page (Generic Desktop)
+26 ff 0f  #Logical maximum (1'000)
+75 10	#Report Size (16)
+55 0E #Unit Exponent (14)
+65 33 #Unit(51)
+09 30 	#Usage (X)
+35 00   #Physical Minimum (0)
+46 00 10  #Physical maximum (1'205)
+81 02	#Input (Data,Value,Absolute,Bit Field)
+09 31	#Usage (Y)
+46 8a 03  #Physical maximum (906)
+81 02	#Input (Data,Value,Absolute,Bit Field)
+c0		#End Collection
+c0
+
+05 01 #Usage Page (Generic Desktop Controls)
+09 02 # Usage(Mouse)
+a1 01 # Collection(Application)
+85 04 # Report ID(4)
+09 01 # Usage(Pointer)
+a1 00 # Collection(Physical)
+95 05 # Report Count(5)
+75 01 # Report Size(1)
+05 09 # Usage Page(Buttons)
+19 01 # Usage Minimum(1)
+29 05 # Usage Maximum(5)
+15 00 # Logical Minimum(0)
+25 01 # Logical Maximum(1)
+81 02 #Input (Data, Variable, Absolute)
+95 01 # Report Count(1)
+75 03 # Report Size(3)
+81 01 #Input (Constant, Array, Absolute)
+75 08 # Report Size(8)
+95 01 # Report Count(1)
+05 01  #Usage Page (Generic Desktop Controls)
+09 38 #Usage (Wheel)
+15 81 # Logical Minimum(129)
+25 7f  # Logical Maximum(127)
+81 06 #Input (Data, Variable, Relative)
+05 0c #Usage page (Consumer)
+0a 38 02 	#Usage (AC Pan)
+95 01 # Report Count(1)
+81 06 #INPUT (Data, Variable, Relative)
+c0
+85 05 # Report ID(5)
+09 01 # Usage(Consumer Control)
+a1 00 # Collection(Physical)
+75 0c # Report Size(12)
+95 02 # Report Count(2)
+05 01 #Usage Page (Generic Desktop Controls)
+09 30 #Usage (x)
+09 31 #Usage (y)
+16 01 f8  # Logical Minimum(63489)
+26 ff 07 # Logical Maximum(2047)
+81 06 #Input (Data, Variable, Relative)
+c0 c0
+
+
+##############BLE ATT LIST END####################
+mem_dy_le_search_service_uuid:
+D0 00 2D 12 1E 4B 0F A4 99 4E CE B5 31 F4 05 79
+
Index: sched/1305.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/1305.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/1305.dat	(working copy)
@@ -0,0 +1,56 @@
+
+
+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:3e
+mem_gpio_wakeup_cfg:00 00 00 00 00 00 00 00 00 00 00 02
+
+mem_version:08 0e 05 03 00
+mem_le_tx2m_delay:20
+
+mem_rx_window_sniff:00 10
+
+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
+
+
+#adc config
+mem_adc_config_flag:01
+#01 ADC_CONFIG_HVIN
+#02 ADC_CONFIG_GPIO
+mem_adc_clkdiv:0a
+mem_adc_channel:00
+#00 ADC_CH_VBAT
+#01 ADC_CH_VDCDC5V
+#06 ADC_CH_GPIO_4
+#07 ADC_CH_GPIO_2
+#08 ADC_CH_GPIO_1
+#09 ADC_CH_GPIO_3
+#0a ADC_CH_GPIO_0
+#0b ADC_CH_GPIO_5
+#0c ADC_CH_GPIO_6
+#0d ADC_CH_GPIO_7
+
+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:
+ff
+mem_rf_init_ptr:mem_rf_init_data
+
+
Index: sched/DM_module.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/DM_module.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/DM_module.dat	(working copy)
@@ -0,0 +1,242 @@
+
+
+mem_device_option:0a
+
+mem_module_connect_state_gpio:FF
+mem_module_mcu_wake_pin:FF
+##############ADC CONFIG##############
+mem_module_read_vdd_count:01
+mem_module_read_vdd_flag:01
+#####################################
+
+##############NVRAM CONFIG##############
+mem_nv_data_ptr:mem_module_nv_data
+mem_nv_data_number:05
+#####################################
+
+
+#####################################
+
+##############UART CONFIG##############
+mem_module_uarta_baud_rate:D0 00
+mem_module_uart_rx_buffer:00 4d
+mem_module_uart_rx_buffer_end:7f 4e
+mem_module_uart_tx_buffer:80 4e
+mem_module_uart_tx_buffer_end:ef 4f
+#####################################
+
+
+
+##############BLUETOOTH CONFIG##############
+###commom###
+mem_soft_version_num:00 11
+mem_module_state:03
+mem_module_bluetooth_stauts_by_command:07
+
+mem_module_flag:00 00
+#bit0 MODULE_FLAG_UART_FLOW_CONTROL
+#bit1 MODULE_FLAG_BLE_SEND_MTU23
+#bit2 MODULE_FLAG_BLE_DATA_ENCRYPT
+
+mem_ui_button_gpio:ff
+mem_lpm_mode:01
+mem_lpm_interval:00 01
+mem_lpm_overhead:08
+mem_lpm_mult_timeout:02
+
+mem_module_wake_up_gpio:04
+
+
+
+###ble###
+mem_le_pairing_handle:2a 00
+mem_le_configuration:08
+
+mem_le_adv_channel_map:07
+mem_le_pairing_mode:01
+
+mem_module_ble_data_uart_max_length:f0
+
+mem_le_scan_enable:00
+mem_le_scan_type:01
+mem_le_scan_interval:00 02
+mem_le_scan_window:00 01
+#mem_le_conn_peer_addr:2a 31 00 33 02 3b
+#mem_cmd_le_create_conn:1b
+
+mem_le_adv_enable:01
+mem_le_adv_interval:f0 00
+mem_module_le_lpm_mult:05
+mem_le_lap:11 fa 0d 43 05 13
+mem_le_name_len:
+'Yichip 1121s
+
+mem_le_adv_data_len:03
+mem_le_adv_data:
+02 01 0e
+
+mem_le_scan_data_len:0e
+
+mem_le_scan_data:# 1 byte length + 1 byte type + N bytes data
+'\09Yichip 1121s
+
+mem_le_pres:02 03 00 05 10 02 03
+
+mem_le_interval_min:
+08 00 #min interval
+10 00 #max interval
+00 00 #latency
+2c 01 #timeout
+
+mem_le_conn_interval:90 00
+mem_le_local_mtu:20 00
+mem_local_rx_max_octets:fb 00 48 08 fb 00 48 08  # 1b
+mem_le_local_feature:21 09 
+mem_le_tx_phys:0707
+#####################################
+
+
+mem_ui_le_uuid_table:mem_module_le_att_list
+
+#attribute list: handle 2bytes, uuid 2bytes, length 1bytes, attribute Nbytes
+mem_module_le_att_list:
+#Primary service GAP ------
+01 00 02 00 28 02 00 18
+
+
+#Appearance
+02 00 02 03 28 01 02
+03 00 02 01 2a 02 c8 00 #3c2=hid mouse
+
+#Device name
+04 00 02 03 28 01 02
+05 00 02 00 2a 14 41 73 74 20 4c 45 20 4d 6f 75 73 65 20 20 20 20 20 20 20 20
+
+
+#Peripheral Preferred Connection Parameters
+06 00 02 03 28 01 02
+07 00 02 04 2a 08 06 00 06 00 64 00 2c 01 # interval 6ms, latency 100, timeout 300
+
+
+#privcy flag
+08 00 02 03 28 01 02
+09 00 02 02 2a 01 01
+
+#reconnecting addr 
+0a 00 02 03 28 01 08
+0b 00 02 03 2a 06 00 00 00 00 00 00
+
+#Primary service GATT ------
+0c 00 02 00 28 02 01 18
+
+#Service changed
+0d 00 02 03 28 01 20
+0e 00 02 05 2a 00
+#Client Characteristic Configuration
+0f 00 02 02 29 02 00 00
+
+#Primary service TX power ------
+10 00 02 00 28 02 04 18
+#Characteristic Tx power level
+11 00 02 03 28 01 16
+12 00 02 07 2a 01 00
+13 00 02 02 29 02 00 00
+
+#Primary service Battery ------
+14 00 02 00 28 02 0f 18
+#Characteristic Battery level
+15 00 02 03 28 01 12
+16 00 02 19 2a 01 38
+
+#Primary service device infomation
+17 00 02 00 28 02 0a 18
+#Characteristic system id
+18 00 02 03 28 01 02
+19 00 02 23 2a 03 00 00 00
+
+#Characteristic manufactor name
+1a 00 02 03 28 01 02
+1b 00 02 29 2a 06 79 69 63 68 69 70
+
+#Characteristic module number
+1c 00 02 03 28 01 02
+1d 00 02 24 2a 06 79 69 63 68 69 70
+
+#Characteristic serial number
+1e 00 02 03 28 01 02
+1f 00 02 25 2a 04 63 6f 6d 33
+
+#Characteristic firmware version
+20 00 02 03 28 01 02
+21 00 02 26 2a 03 31 2e 30
+
+#Characteristic software version
+22 00 02 03 28 01 02
+23 00 02 28 2a 03 31 2e 30
+
+#Characteristic hardware version
+24 00 02 03 28 01 02
+25 00 02 2a 2a 03 31 2e 30
+
+#Characteristic regulatory version
+26 00 02 03 28 01 02
+27 00 02 25 2a 04 63 6f 6d 33
+
+#Primary service yichip transmit ------
+28 00 02 00 28 10 55 e4 05 d2 af 9f a9 8f e5 4a 7d fe 43 53 53 49
+#Characteristic tx--notify read
+29 00 02 03 28 01 12
+2a 00 10 16 96 24 47 C6 23 61 BA D9 4B 4D 1E 43 53 53 49 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+#Client Characteristic Configuration
+2b 00 02 02 29 02 00 00
+
+#Characteristic rx--write
+2c 00 02 03 28 01 08
+2d 00 10 b3 9b 72 34 be ec d4 a8 f4 43 41 88 43 53 53 49 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+#Characteristic rx-- write without Response
+2e 00 02 03 28 01 04
+2f 00 10 fe 69 ca 9a 56 19 f6 ab 02 4d aa 6d 43 53 53 49 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+#Characteristic rx tx --read write notify
+30 00 02 03 28 01 2a
+31 0010 18 03 A6 28 5E D8 EC 91 1C 48 A3 AC 43 53 53 49 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+#Client Characteristic Configuration
+32 00 02 02 29 02 00 00
+
+
+#End of Attribute list
+00 00
+
+#mem_le_wechat_air_sync_ptr:mem_module_wechat_indication_handle
+#mem_module_wechat_indication_handle:35 38 
+
+#mem_module_wechat_tx_buffer_ptr:mem_wechat_tx_buffer
+#mem_module_wechat_rx_buffer_ptr:mem_wechat_rx_buffer
+
+#mem_le_adv_data_len:03
+#mem_le_adv_data:
+#02 
+#01 #GAP_ADTYPE_FLAGS
+#06 #GAP_ADTYPE_FLAGS_GENERAL |GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED
+
+#05 
+#02 #GAP_ADTYPE_16BIT_MORE
+#E7 FE 00 18
+
+#09 
+#FF #GAP_ADTYPE_MANUFACTURER_SPECIFIC
+#0e 05 #Yichip Microelectronics (Hangzhou) Co.,Ltd.
+#81 E8 2F 96 FD 64
+
+#mem_le_scan_data_len:0e
+
+#mem_le_scan_data:# 1 byte length + 1 byte type + N bytes data
+#'\09Yichip 1305 le
+
+
+
+#eeprom gpio config
+
+
+
Index: sched/adpcm.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/adpcm.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/adpcm.dat	(working copy)
@@ -0,0 +1,95 @@
+
+mem_ad_indexTable:ff ff ff ff 02 04 06 08 ff ff ff ff 02 04 06 08
+
+mem_ad_stepsizeTable:
+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
+
+
Index: sched/ble_car_att_list.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/ble_car_att_list.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/ble_car_att_list.dat	(working copy)
@@ -0,0 +1,204 @@
+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
+11
+55
+43
+48
+4f
+4e
+20
+30
+31
+20
+20
+20
+20
+20
+20
+20
+20
+20
+08
+00
+02
+03
+28
+01
+02
+09
+00
+02
+01
+2a
+02
+c8
+00
+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
+f0
+ff
+10
+00
+02
+03
+28
+01
+12
+11
+00
+02
+f1
+ff
+0e
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+12
+00
+02
+02
+29
+02
+00
+00
+13
+00
+02
+03
+28
+01
+08
+14
+00
+02
+f2
+ff
+0e
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
\ No newline at end of file
Index: sched/ble_shutter_gatt_list.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/ble_shutter_gatt_list.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/sched/ble_shutter_key_value_list.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/car.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/car.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/car.dat	(working copy)
@@ -0,0 +1,134 @@
+mem_device_option:0e
+mem_tx_power: 0a
+#0x00 TX_POWER_0DB
+#0x03 TX_POWER_3DB
+#0x05 TX_POWER_5DB
+#0x07 TX_POWER_7DB
+#0x0a TX_POWER_10DB
+
+#0x83 TX_POWER_F3DB
+#0x85 TX_POWER_F5DB
+#0x8a TX_POWER_F10DB
+#0x94 TX_POWER_F20DB
+
+
+mem_24g_tx_phy:84
+#Bit rate
+#0x01:1M
+#0x02:2M
+#0x04:S2, 500K
+#0x84:S8, 125K
+
+mem_24g_rx_phy:84
+#Bit rate
+#0x01:1M
+#0x02:2M
+#0x04:S2, 500K
+#0x84:S8, 125K
+
+mem_24g_ch_map1:04 14 24 34
+mem_24g_ch:20
+#2402Mhz + mem_24g_ch
+
+mem_factory_control_flag:01
+mem_car_full_control_remote_lap:ff ff ff ff
+
+mem_car_pwm_gpio:10
+
+mem_24g_addr:00 00 00 00
+
+
+mem_le_lap:ff ff ff ff 01 21
+mem_stop_4w1_flag:01
+#mem_rf_debug_rx_gpio:8a
+
+mem_le_adv_channel_map:07
+
+
+mem_le_scan_enable:
+00   #scan enable
+0a 00  #scan interval
+08 00  #scan window
+
+mem_le_adv_enable:
+01
+mem_le_adv_interval:f0 00
+
+mem_le_local_feature:01 08
+mem_le_tx_phys:84
+mem_le_rx_phys:84
+##############BLUETOOTH CONFIG##############
+mem_lpm_mode:00
+#mem_lpm_interval:00 01    #unit: 0.625ms
+mem_lpm_overhead:08   
+mem_lpm_mult:05
+mem_lpm_mult_timeout:02
+
+mem_le_name_len:
+'GP4WCAR_
+
+mem_le_adv_data_len:1f
+mem_le_adv_data:
+02 01 05
+
+mem_le_interval_min:
+08 00 #min interval
+10 00 #max interval
+00 00 #latency
+2c 01 #timeout
+
+
+mem_queue_ptr: mem_car_le_queue_each_size
+
+mem_car_le_queue_each_size:
+14     #queue 锟侥碉拷锟斤拷元锟截的筹拷锟斤拷
+04     #queue 锟侥讹拷锟叫筹拷锟斤拷
+00     #queue current num
+00     #queue read ptr
+00     #queue write ptr
+
+
+#####################################
+
+
+mem_ui_le_uuid_table:mem_car_ble_att_list
+
+#attribute list: handle 2bytes, uuid 2bytes, length 1bytes, attribute Nbytes
+mem_car_ble_att_list:
+#Primary service yichip transmit ------
+01 00 02 00 28 02 01 18   #0x1801 GATT Service------Generic Access<16-bit UUID Numbers Document.pdf>
+#Service Changed
+02 00 02 03 28 01 20    #0x20 properties------notify
+03 00 02 05 2a 01 00
+#Client Characteristic Configuration
+04 00 02 02 29 02 01 00
+
+#Primary service GAP ------
+05 00 02 00 28 02 00 18
+
+#Device name
+06 00 02 03 28 01 4e
+07 00 02 00 2a 13 41 73 74 20 4c 45 20 4d 6f 75 73 65 20 20 20 20 20 20 20
+
+#Apperance
+08 00 02 03 28 01 4e
+09 00 02 01 2a 02 00 00
+
+#Perpheral Preferred Connection Parameters
+0a 00 02 03 28 01 02
+0b 00 02 04 2a 08 10 00 20 00 05 00 2c 01
+
+#Primary service yichip transmit ------
+0c 00 02 00 28 02 f0 ff
+
+#Characteristic tx--notify&read
+0d 00 02 03 28 01 12
+0e 00 02 f1 ff 04 00 00 00 00
+#Client Characteristic Configuration
+0f 00 02 02 29 02 00 00
+#Characteristic rx--write
+10 00 02 03 28 01 08
+11 00 02 f2 ff 01 00
+00 00   
+
+
Index: sched/dongle.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/dongle.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/dongle.dat	(working copy)
@@ -0,0 +1,69 @@
+
+mem_device_option:04
+mem_ui_button_gpio:ff
+
+
+#efuse size:28 bytes
+
+#sys config
+#bit7:enable 16M xtal#0:24M#1:16M
+#bit6:enable new channel map
+#bit5:enable eeprom
+#bit4:enable kb icon
+#bit3:enable 24g 2M
+#bit2-0:retention
+mem_dg_sys_config:00  #24M
+
+#24g new process #default value 00,if need new process set value 01
+mem_24g_disable_fec1:00
+mem_dg_24g_tx_power_default:06	#6dBm
+
+#usb config
+#mem_dg_usb_vid_pid:
+#00 #disable
+#mouse only#auto pair
+#51 31#VID
+#20 10#PID
+#mouse & keyboard
+#51 31#VID
+#20 30#PID
+#mem_dg_usb_tx_interval:00
+#mem_dg_usb_device_name:
+#'123456
+
+
+#rf config
+mem_24g_lap:36 26 10 30 12 23#low 4B used for 24g rxaddr
+#mem_24g_tx_phy:01#0x01:1M/0x02:2M/0x04:S2/0x84:S8
+#mem_24g_rx_phy:01#0x01:1M/0x02:2M/0x04:S2/0x84:S8
+#mem_24g_no_ack:00#no ack
+mem_24g_rx_window:78 69#rx
+mem_24g_hop_interval:1e
+#mem_24g_ackpayload_enable:00#ack payload enable
+#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
+#mem_24g_pair_switch:00
+mem_24g_pair_mode:00
+#mem_24g_pair_ch:4e
+#mem_24g_pair_tx_power:85
+#mem_24g_pair_addr:20 15 10 05
+#mem_24g_ch_map_update:00
+#mem_24g_ch_update_map1
+#mem_24g_ch_update_map2
+#mem_24g_ch_update_map3
+#mem_24g_ch_update_map4
+
+#mem_rssi_buff_index:ff
+#mem_rssi_noise_buffer_ptr:mem_dg_rssi_noise_buffer
+#mem_rssi_noise_self_buffer_ptr:mem_dg_rssi_noise_dg_buffer
+#mem_rssi_noise_device1_buffer_ptr:mem_dg_rssi_noise_ms_buffer
+#mem_rssi_noise_device2_buffer_ptr:mem_dg_rssi_noise_kb_buffer
+
+
+
+#mem_rf_debug_rx_gpio:8c
+#mem_rf_debug_tx_gpio:8b
+
+
Index: sched/ff.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/ff.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/ff.dat	(working copy)
@@ -0,0 +1,88 @@
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+ff
+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: sched/fpga.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/fpga.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/fpga.dat	(working copy)
@@ -0,0 +1,28 @@
+mem_xtal_freq:18
+mem_le_adv_enable:01
+
+mem_rx_window_sniff:00 0e
+
+mem_version:08 0e 05 03 00
+
+mem_le_lap:11 22 35
+mem_le_adv_data_len:03
+mem_le_adv_data:
+02 01 0e
+
+mem_le_scan_data_len:0b
+mem_le_scan_data:
+'\09FPGA1121S
+
+mem_le_adv_interval:20 00
+mem_le_scan_window:20 00
+mem_le_scan_type:01
+mem_le_adv_own_addr_type:01
+mem_le_adv_channel_map:07
+
+mem_device_option:05
+
+mem_rf_init_data:
+ff
+mem_rf_init_ptr:mem_rf_init_data
+
Index: sched/gatt.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/gatt.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/gatt.dat	(working copy)
@@ -0,0 +1,85 @@
+
+#attribute list: handle 2bytes, uuid 2bytes, length 1bytes, attribute Nbytes
+mem_le_att_list:
+
+#Primary service GAP ------
+01 00 00 28 02 00 18
+
+#Device name
+02 00 03 28 01 0a
+03 00 00 2a 0c 41 73 74 20 4c 45 20 4d 6f 75 73 65
+
+#Appearance
+04 00 03 28 01 02
+05 00 01 2a 02 c2 03 #3c2=hid mouse
+
+#Peripheral Preferred Connection Parameters
+06 00 03 28 01 02
+07 00 04 2a 08 06 00 06 00 64 00 2c 01 # interval 6ms, latency 100, timeout 300
+
+#Primary service GATT ------
+08 00 00 28 02 01 18
+
+#Service changed
+09 00 03 28 01 20
+0a 00 05 2a 00
+
+#Client Characteristic Configuration
+0b 00 02 29 02 00 00
+
+#Primary service TX power ------
+0c 00 00 28 02 04 18
+#Characteristic Tx power level
+0d 00 03 28 01 06
+0e 00 07 2a 01 00
+
+
+#Primary service Battery ------
+0f 00 00 28 02 0f 18
+#Characteristic Battery level
+10 00 03 28 01 12
+11 00 19 2a 01 38
+
+#Primary service yichip transmit ------
+12 00 00 28 02 f0 18
+#Characteristic tx--notify
+13 00 03 28 01 12
+14 00 f1 2a 14	# for Android device, ATT MTU is just 23 bytes, so payload is 20 bytes max
+'Test read initial va
+#Client Characteristic Configuration
+15 00 02 29 02 00 00
+#Characteristic rx--write
+16 00 03 28 01 0c
+17 00 f0 2a 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+#End of Attribute list
+00 00
+
+mem_le_adv_enable:01
+mem_le_adv_data_len:03
+
+mem_le_adv_data:02 01 05
+#flags NOTE: should be included here, or Android will not do connectgatt()
+
+
+mem_le_scan_data_len:17
+
+mem_le_scan_data:	# 1 byte length + 1 byte type + N bytes data
+
+#complete local name
+0e 09 
+#'Ast LE2Serial
+'YiChip BLE2IR
+
+#16bit uuid
+03 03 00 f0
+
+#Apperance
+03 19 40 02
+
+
+mem_le_adv_interval:00 08 
+mem_le_adv_channel_map:07 
+
+mem_24g_lap:77 11 00 33 00 00
+
Index: sched/hci_boot.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/hci_boot.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/hci_boot.dat	(working copy)
@@ -0,0 +1,7 @@
+
+mem_device_option:0c
+
+mem_rf_init_data:
+ff
+mem_rf_init_ptr:mem_rf_init_data
+
Index: sched/keyboard.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/keyboard.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/keyboard.dat	(working copy)
@@ -0,0 +1,765 @@
+mem_keyboard_flag:
+#byte 0
+#bit0 KEYBOARD_24G_PAIRING_FLAG
+#bit1 KEYBOARD_STORE_MEMORY_FLAG
+#bit2 KEYBOARD_LOW_VOLTAGE_FLAG
+#bit3 KEYBOARD_BT_DISCOVERY_BUTTON_DOWN_FLAG
+#bit4 KEYBOARD_BT_DISCOVERY_BUTTON_LONG_DOWN_FLAG
+00
+
+#byte 1
+#bit0 KEYBOARD_ENABLE_WAKEUP_FROM_POWER
+#bit1 KEYBOARD_ENABLE_16M
+#bit2 KEYBOARD_DISABLE_ICE
+#bit3 KEYBOARD_ENABLE_ADC
+#bit4 KEYBOARD_ENABLE_FLASH
+#bit5 KEYBOARD_ENABLE_2K_EEPROM
+#bit6 KEYBOARD_ENABLE_EEPROM
+#bit7 KEYBOARD_ENABLE_OTP
+61
+
+#byte 2
+#bit0 KEYBOARD_ENABLE_24G
+#bit1 KEYBOARD_ENABLE_AUTO_24G_PARING
+#bit2 KEYBOARD_ENABLE_24G_AUTO_PAIR_NERVER_BEEN_PAIRED
+#bit3 KEYBOARD_ENABLE_COMMBINATION_KEY_BY_24G_PAIRING
+#bit4 KEYBOARD_ENABLE_24G_2M_PHY
+#bit5 KEYBOARD_ENABLE_24G_SEARCH_DONGLE
+00
+
+#byte 3
+#bit0 KEYBOARD_ENABLE_BLE_RANDOM_ADDRE
+#bit1 KEYBOARD_ENABLE_LE_BATTERY_SERVICE_CANCEL
+#bit2 KEYBOARD_ENABLE_BT_RECONNECT_TIMEOUT_ENTER_DISCOVERY
+#bit3 KEYBOARD_ENABLE_COMMBINATION_KEY_BY_BT_DISCOVERY
+0b
+
+#byte 4
+#bit0 KEYBOARD_ENABLE_26_N_KEY_ROLLOVER
+#bit1 KEYBOARD_ENABLE_FULL_N_KEY_ROLLOVER
+#bit2 KEYBOARD_ENABLE_MAGIC_KEYBOARD
+#bit3 KEYBOARD_ENABLE_MOUSE
+#bit4 KEYBOARD_ENABLE_USB
+00
+
+#byte 5
+#bit0 KEYBOARD_ENABLE_030_POWER_LED
+#bit1 KEYBOARD_ENABLE_LOW_LED
+#bit2 KEYBOARD_ENABLE_LOW_VOLTAGE_LED_BLINK_N_SECOND
+#bit3 KEYBOARD_ENABLE_BACKLIGHT
+01
+
+#byte 6
+#bit0 KEYBOARD_ENABLE_FN_ARROW
+#bit1 KEYBOARD_ENABLE_FN_LEFT_CTRL_OSK
+#bit2 KEYBOARD_ENABLE_FN_SPACE_LANGUAGE
+#bit3 KEYBOARD_ENABLE_FN_OS_SWITCH
+#bit4 KEYBOARD_ENABLE_FN_LOCK
+1f
+
+#byte 7
+#bit0 KEYBOARD_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO
+#bit1 KEYBOARD_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO_G24_CONNECT_GND
+#bit2 KEYBOARD_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO_BT_CONNECT_GND
+#bit3 KEYBOARD_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO_G24_CONNECT_VDD
+#bit4 KEYBOARD_ENABLE_SELECT_DEVICE_BY_SWITCH_GPIO_BT_CONNECT_VDD
+00
+
+
+mem_device_option:0f
+mem_power_on_flag:01
+
+#ui
+mem_ui_button_gpio:ff
+mem_ui_button_timeout:1e
+mem_ui_led_struct_num:01
+
+#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
+
+#usb
+mem_keyboard_usb_vid_pid:
+01 #enable
+#mouse only#auto pair
+51 31#VID
+10 50#PID
+#mouse & keyboard
+51 31#VID
+20 50#PID
+
+#2.4g
+mem_24g_lap: 03 11 36 55 51 61
+mem_24g_data_type:02	#01--mouse  02--keyboard
+mem_24g_fast_conn_enable:01
+mem_24g_fast_conn_addr:0f 0f 0f 0f
+mem_24g_ch_map_update:00   #00--disable   01--enable
+mem_24g_long_sleep_set_level:02    #00--30ms   01--50ms  02--80ms  03--100ms
+mem_24g_disable_fec1:00	 #00--default mode  01--new process
+mem_24g_rx_window:c0 12     #400us  ## e0 2e#1ms #transmitter long range min:520us
+mem_device_24g_pair_tx_power:94 #-20dBm
+
+mem_24g_enter_hibernate:00 48 60
+mem_24g_long_sleep_param_update_timer_init:0a 00	#1s
+mem_24g_transmit_by_interrupt_exit_count_init:50 00
+mem_device_24g_search_dongle_time_init:32 00	#3mins
+mem_store_information_delay_timer_init:02
+mem_local_rx_max_octets:fb 00 48 08 fb 00 48 08  # 1b
+
+#bt
+mem_lpm_mode:01
+mem_lpm_mult:10
+mem_lpm_mult_init:10
+
+
+#ble
+mem_le_lap:73 83 92 a1 b1 c1
+mem_le_adv_channel_map:07
+
+mem_le_battery_level_updata_timer_init:96 00
+mem_le_keyboard_handle:15 00
+mem_le_notify_handle:19 00
+mem_le_multimedia_handle:1d 00
+mem_le_systemctrl_handle:21 00
+mem_le_pairing_handle:28 00
+mem_le_battery_level_handle:30 00
+
+mem_le_adv_data_len:1f
+mem_le_adv_data:
+#flag
+02 01 05
+#uuid
+03 03 12 18
+#appearance
+03 19 c1 03
+
+mem_le_adv_swift_pair:
+#microsoft swift pair
+06 ff 06 00 03 00 80
+#name
+#'\09BT5.2 Keyboard
+
+mem_le_scan_data_len:1f
+mem_le_scan_data:
+#name
+'\09BT5.2 Keyboard
+
+#max 20bytes, att list data rom limits
+mem_le_name_len:
+'BT5.2 Keyboard
+
+mem_le_interval_min:
+08 00 #min interval
+08 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_le_search_mac_manu_name:
+41 70 70 6c 65 20 49 6e 63
+mem_le_search_mac_uuid:
+0a 18
+mem_le_search_service_uuid:
+D0 00 2D 12 1E 4B 0F A4 99 4E CE B5 31 F4 05 79
+
+mem_keybord_appearance:c1 03
+
+mem_keyboard_le_change_vid_pid_flag:
+01			# 00:disable    01:enable
+02
+e8 04		# vid: 04 e8
+21 70		# pid: 70 21
+01 00
+
+mem_keyboard_blob_response_consumer_customize:
+09 b8 		#bit4  MAC EJECT
+0a 25 02 		#bit5  AC Forward
+0a 26 02 		#bit6  AC Stop
+0a 24 02 		#bit6  AC Back
+
+81 02
+c0
+05 01
+09 06
+a1 01
+85 02
+
+#adc
+
+#adc config
+mem_adc_config_flag:02
+#01 ADC_CONFIG_HVIN
+#02 ADC_CONFIG_GPIO
+mem_adc_clkdiv:0a
+mem_adc_channel:0c
+#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
+
+mem_adc_dma_enable:00
+mem_adc_saddr_ptr:00 07
+mem_adc_eaddr_ptr:ff 07
+
+#led
+mem_keyboard_device_poweron_timer_init:1e
+
+#system
+mem_device_24g_power_on_fast_conn_timer:02 00	#1s
+mem_device_24g_reconn_timeout_init:64 #10s
+mem_device_24g_pair_timeout_init:58 02  #1min
+mem_device_fast_direct_timeout:64 #10s
+mem_device_direct_timeout:64  #10s
+mem_device_discovery_timeout:58 02  #1min
+mem_device_no_data_timeout:70 17   #10mins
+mem_adc_low_volatage_led_blink_timer:64 00 #10s
+mem_keyboard_pair_led_blink_count:05	#500ms
+mem_keyboard_low_volatage_led_blink_count:02		#200ms
+
+mem_same_keyvalue_timer_init:B8 0B		#5min
+
+mem_device_flag:01	#00--24g 01--ble
+mem_device1_type:34
+mem_device1_addr:00 00 00 00 00 00
+
+mem_device_number:01
+mem_keyboard_switch_device_to_g24:00 7f 1e		#enable flag + 2byte commbination key
+mem_keyboard_switch_device_to_bt1:00 7f 1f		#enable flag + 2byte commbination key
+mem_keyboard_switch_device_to_bt2:00 7f 20		#enable flag + 2byte commbination key
+mem_keyboard_switch_device_to_bt3:00 7f 21		#enable flag + 2byte commbination key
+mem_keyboard_switch_device_to_usb:00 7f 22
+
+#rgb
+mem_rgb_on_color:
+07		#white
+01		#blue
+02		#green
+04		#red
+03		#cyan
+05		#purple
+06		#orange
+
+mem_customize_timer_setup: 50 00  	# n*0.3125ms
+mem_keyboard_num_caps_scoll_led_on_timer:58 02		#1min
+
+mem_rgb_pwm_conf:
+13	#pwm gpio
+01	#pwm channel
+a0	#three  byte frequency
+0f
+00
+1e 	#duty cycle (by percent %)
+
+mem_keyboard_led_r_gpio:ff #13
+mem_keyboard_led_g_gpio:ff #14
+mem_keyboard_led_b_gpio:ff #15
+
+##												bt button connct gnd          bt button in matrix        two button commbination
+mem_keyboard_pairing_type:01					#                 00                                    00                                 01
+# mem_config_select_device_button_gpio:ff			#              00~16			               ff					ff
+mem_keyboard_commbination_key_bt:29 14			#		 not care				   not care			     Fn+C
+mem_keyboard_commbination_key_24g:29 14		#		 not care				   not care			     Esc+Q
+mem_keyboard_commbination_fast_conn_bt:2a 10	# bs+M
+mem_eeprom_wp_gpio:ff
+mem_eeprom_scl_gpio:03
+mem_eeprom_sda_gpio:02
+mem_eeprom_base:01 00
+mem_flash_base:00 50 00
+mem_otp_read_retention_max_size:20 03
+
+
+mem_keyboard_caps_led_gpio:96
+mem_keyboard_num_led_gpio:ff
+mem_keyboard_power_led_gpio:8c
+mem_keyboard_low_voltage_alarm_gpio:ff
+mem_keyboard_scroll_led_gpio:ff
+mem_keyboard_24g_led_gpio:ff
+mem_keyboard_bt1_led_gpio:97
+mem_keyboard_bt2_led_gpio:97
+mem_keyboard_bt3_led_gpio:97
+
+#mem_rf_debug_rx_gpio:96
+#mem_rf_debug_tx_gpio:89
+
+
+mem_mcu_stb_gpio:0f			#IOB0
+mem_mcu_clk_gpio:0e			#IOB1
+mem_mcu_rstb_gpio:ff
+
+mem_keyboard_pb_button_gpio:05
+mem_device_reuse_2ice_gpio:05
+#portA:8x,portB:cx,fixed conf,don't change
+mem_key_excol_gpio:c2 c3 c4 c5 c6 c7 80 81 82 83 84 85
+
+#gpio00~16
+mem_key_row_gpio:
+15		#r0/r8
+06		#r1
+07		#r2
+08		#r3
+0a		#r4
+0b		#r5
+0d		#r6
+14		#r7
+
+#gpio00~16   portA:8x,portB:cx
+mem_key_col_gpio:
+ff		#c0
+c6		#c1
+c5		#c2
+c4		#c3
+c2		#c4
+c3		#c5
+10		#c6
+11		#c7
+83		#c8
+82		#c9
+81		#c10
+c7		#c11
+80		#c12
+84		#c13
+85		#c14
+ff 		#c15
+ff		#c16
+ff		#c17
+ff		#c18
+ff		#c19
+
+mem_keyboard_keyvalue_map:
+#r0 ~ r7
+00 00 00 00 00 00 00 00					#c0
+51 4c 00 00 00 53 00 2c 				#c1
+4f 00 e1 00 00 00 e5 00 				#c2
+00 42 2a 43 00 28 31 00 				#c3
+50 00 e3 00 00 00 00 52 				#c4
+e6 00 00 46 00 00 7f e2					#c5
+00 2e 30 25 0c 36 0e 3f 				#c6
+38 2d 2f 27 13 00 33 34 				#c7
+00 41 40 26 12 37 0f 00 				#c8
+11 23 1c 24 18 10 0d 0b					#c9
+00 e0 00 3e 00 e4 00 00 				#c10
+05 22 17 21 15 19 09 0a 				#c11
+00 3a 39 1f 1a 1b 16 00 				#c12
+00 3b 3c 20 08 06 07 3d 				#c13
+00 35 2b 1e 14 1d 04 29					#c14
+00 00 00 00 00 00 00 00 				#c15
+00 00 00 00 00 00 00 00					#c16
+00 00 00 00 00 00 00 00					#c17
+
+mem_keyboard_fn_first:	00			#fn first  00:press f1~f12=f1~f12      01:press fn+f1~f12=f1~f12
+mem_keyboard_fn_esc:	29			#esc
+mem_keyboard_fn_f1: 44			#f1
+mem_keyboard_fn_f2:	45			#f2
+mem_keyboard_fn_f3:	e8			#f3
+mem_keyboard_fn_f4:	ec			#f4
+mem_keyboard_fn_f5:	ee			#f5
+mem_keyboard_fn_f6:	ed			#f6
+mem_keyboard_fn_f7:	eb			#f7
+mem_keyboard_fn_f8:	e9			#f8
+mem_keyboard_fn_f9:	ea			#f9
+mem_keyboard_fn_f10:	f7			#f10
+mem_keyboard_fn_f11:	ee			#f11
+mem_keyboard_fn_f12:	a9			#f12
+mem_keyboard_fn_del:	4c			#delete
+mem_keyboard_fn_lock_keyvalue:29
+
+mem_keyboard_le_table:
+#att table
+# 01 00 02 00 28  # Primary Service Declaration
+# 02 00 18        # Generic Access Service (UUID: 0x1800)
+# 02 00 02 03 28  # Characteristic Declaration
+# 01 0a           # Properties: Read, Write
+# 03 00 02 00 2a  # Device Name Characteristic (UUID: 0x2A00)
+# 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  # Characteristic Declaration
+# 01 02           # Properties: Read
+# 05 00 02 01 2a  # Appearance Characteristic (UUID: 0x2A01)
+# 02 c1 03        # Value: 0x03C2 (Generic Keyboard)
+
+# 06 00 02 03 28  # Characteristic Declaration
+# 01 02           # Properties: Read
+# 07 00 02 04 2a  # Peripheral Preferred Connection Parameters (UUID: 0x2A04)
+# 08 06 00 06 00  # Minimum Connection Interval: 0x0006 (7.5ms)
+# 64 00           # Maximum Connection Interval: 0x0064 (100ms)
+# 2c 01           # Slave Latency: 0x012C (300)
+
+# 08 00 02 00 28  # Primary Service Declaration
+# 02 01 18        # Generic Attribute Service (UUID: 0x1801)
+# 09 00 02 03 28  # Characteristic Declaration
+# 01 20           # Properties: Indicate
+# 0a 00 02 05 2a 01 00 # Service Changed Characteristic (UUID: 0x2A05)
+# 0b 00 02 02 29  # Client Characteristic Configuration Descriptor (UUID: 0x2902)
+# 02 00 00        # Value: 0x0000 (Notifications Disabled)
+
+
+# 0c 00 02 00 28  # Primary Service Declaration
+# 02 0a 18        # Battery Service (UUID: 0x180F)
+# 0d 00 02 03 28  # Characteristic Declaration
+# 01 02           # Properties: Read
+# 0e 00 02 29 2a  # Battery Level Characteristic (UUID: 0x2A19)
+# 06 59 69 43 68 69 70  # Value: Battery Level Data
+
+# 0f 00 02 03 28  # Characteristic Declaration
+# 01 02           # Properties: Read
+# 10 00 02 50 2a  # HID Information Characteristic (UUID: 0x2A4A)
+# 07 02 e8 04 21 70 01 00  # Value: HID Information Data
+
+# 11 00 02 00 28  # Primary Service Declaration
+# 02 12 18        # HID Service (UUID: 0x1812)
+# 12 00 02 03 28  # Characteristic Declaration
+# 01 06           # Properties: Read, Write Without Response
+# 13 00 02 4e 2a  # Report Map Characteristic (UUID: 0x2A4B)
+# 01 01           # Value: Report Map Data
+
+# 14 00 02 03 28  # Characteristic Declaration
+# 01 12           # Properties: Read, Notify
+# 15 00 02 4d 2a  # Report Characteristic (UUID: 0x2A4D)
+# 08 00 00 00 00 00 00 00 00  # Value: Report Data
+# 16 00 02 02 29  # Client Characteristic Configuration Descriptor (UUID: 0x2902)
+# 02 00 00        # Value: 0x0000 (Notifications Disabled)
+# 17 00 02 08 29  # Report Reference Descriptor (UUID: 0x2908)
+# 02 02 01        # Value: Report ID and Type
+
+# 18 00 02 03 28  # Characteristic Declaration
+# 01 12           # Properties: Read, Notify
+# 19 00 02 4d 2a  # Report Characteristic (UUID: 0x2A4D)
+# 07 00 00 00 00 00 00 00  # Value: Report Data
+# 1a 00 02 02 29  # Client Characteristic Configuration Descriptor (UUID: 0x2902)
+# 02 00 00        # Value: 0x0000 (Notifications Disabled)
+
+# 1b 00 02 08 29  # Report Reference Descriptor (UUID: 0x2908)
+# 02 01 01        # Value: Report ID and Type
+
+# 1c 00 02 03 28  # Characteristic Declaration
+# 01 12           # Properties: Read, Notify
+# 1d 00 02 4d 2a  # Report Characteristic (UUID: 0x2A4D)
+# 02 00 00        # Value: Report Data
+# 1e 00 02 02 29  # Client Characteristic Configuration Descriptor (UUID: 0x2902)
+# 02 00 00        # Value: 0x0000 (Notifications Disabled)
+# 1f 00 02 08 29  # Report Reference Descriptor (UUID: 0x2908)
+# 02 05 01        # Value: Report ID and Type
+
+# 20 00 02 03 28  # Characteristic Declaration
+# 01 12           # Properties: Read, Notify
+# 21 00 02 4d 2a  # Report Characteristic (UUID: 0x2A4D)
+# 02 00 00        # Value: Report Data
+# 22 00 02 02 29  # Client Characteristic Configuration Descriptor (UUID: 0x2902)
+# 02 00 00        # Value: 0x0000 (Notifications Disabled)
+
+# 23 00 02 08 29  # Report Reference Descriptor (UUID: 0x2908)
+# 02 04 01        # Value: Report ID and Type
+
+# 24 00 02 03 28  # Characteristic Declaration
+# 01 0e           # Properties: Read, Write
+# 25 00 02 4d 2a  # Report Characteristic (UUID: 0x2A4D)
+# 02 00 00        # Value: Report Data
+# 26 00 02 08 29  # Report Reference Descriptor (UUID: 0x2908)
+# 02 02 02        # Value: Report ID and Type
+
+# 27 00 02 03 28  # Characteristic Declaration
+# 01 02           # Properties: Read
+# 28 00 02 4b 2a  # HID Control Point Characteristic (UUID: 0x2A4C)
+# f5 05 0c 09 01 a1 01 85 05  # Value: HID Control Point Data
+# 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  # HID Keyboard Input Report
+# 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  # HID Mouse Input Report
+# 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  # HID System Control Input Report
+# 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  # Characteristic Declaration
+# 01 1a           # Properties: Read, Notify
+# 2a 00 02 33 2a  # Report Characteristic (UUID: 0x2A33)
+# 08 00 00 00 00 00 00 00 00  # Value: Report Data
+
+# 2b 00 02 02 29  # Client Characteristic Configuration Descriptor (UUID: 0x2902)
+# 02 01 00        # Value: 0x0001 (Notifications Enabled)
+
+# 2c 00 02 03 28  # Characteristic Declaration
+# 01 02           # Properties: Read
+# 2d 00 02 4a 2a  # HID Information Characteristic (UUID: 0x2A4A)
+# 04 01 01 00 03  # Value: HID Information Data
+
+# 2e 00 02 00 28  # Primary Service Declaration
+# 02 0f 18        # Battery Service (UUID: 0x180F)
+
+# 2f 00 02 03 28  # Characteristic Declaration
+# 01 12           # Properties: Read, Notify
+# 30 00 02 19 2a  # Battery Level Characteristic (UUID: 0x2A19)
+# 01 64           # Value: Battery Level (100%)
+
+# 31 00 02 02 29  # Client Characteristic Configuration Descriptor (UUID: 0x2902)
+# 02 00 00        # Value: 0x0000 (Notifications Disabled)
+
+# 32 00 02 03 28  # Characteristic Declaration
+# 01 04           # Properties: Write Without Response
+# 33 00 02 4c 2a  # HID Control Point Characteristic (UUID: 0x2A4C)
+# 00 00 00        # Value: HID Control Point Data
+
+#se map
+af 00              # Feature
+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 (0xE0)
+29 E7        #   Usage Maximum (0xE7)
+15 00        #   Logical Minimum (0)
+25 01        #   Logical Maximum (1)
+81 02        #   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
+95 01        #   Report Count (1)
+75 08        #   Report Size (8)
+81 03        #   Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No 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 (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
+95 01        #   Report Count (1)
+75 03        #   Report Size (3)
+91 03        #   Output (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-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 (0x00)
+29 FF        #   Usage Maximum (0xFF)
+81 00        #   Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
+C0              # End Collection
+
+05 0C        # Usage Page (Consumer)
+09 01        # Usage (Consumer Control)
+A1 01        # Collection (Application)
+85 03        #   Report ID (3)
+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 (0x0307)
+0A AE 01  #   Usage (AL Keyboard Layout)
+09 70        #   Usage (0x70)
+09 6F        #   Usage (0x6F)
+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 (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
+C0              # End Collection
+
+#af 00             # Feature
+
+
+# 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 (0xE0)
+# 29 E7        #   Usage Maximum (0xE7)
+# 15 00        #   Logical Minimum (0)
+# 25 01        #   Logical Maximum (1)
+# 81 02        #   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
+# 95 01        #   Report Count (1)
+# 75 08        #   Report Size (8)
+# 81 03        #   Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No 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 (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
+# 95 01        #   Report Count (1)
+# 75 03        #   Report Size (3)
+# 91 03        #   Output (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-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 (0x00)
+# 29 FF  #   Usage Maximum (0xFF)
+# 81 00        #   Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
+# 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 (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
+95 01        #   Report Count (1)
+75 05        #   Report Size (5)
+81 03        #   Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
+C0              # End Collection
+
+#sb map
+# af 00             # Feature
+# 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 (0xE0)
+# 29 E7        #   Usage Maximum (0xE7)
+# 15 00        #   Logical Minimum (0)
+# 25 01        #   Logical Maximum (1)
+# 81 02        #   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
+# 95 01        #   Report Count (1)
+# 75 08        #   Report Size (8)
+# 81 03        #   Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No 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 (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
+# 95 01        #   Report Count (1)
+# 75 03        #   Report Size (3)
+# 91 03        #   Output (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-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 (0x00)
+# 29 FF        #   Usage Maximum (0xFF)
+# 81 00        #   Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
+# C0              # End Collection
+
+# 05 0C        # Usage Page (Consumer)
+# 09 01        # Usage (Consumer Control)
+# A1 01        # Collection (Application)
+# 85 03        #   Report ID (3)
+# 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 (0x0307)
+# 0A AE 01  #   Usage (AL Keyboard Layout)
+# 09 70        #   Usage (0x70)
+# 09 6F        #   Usage (0x6F)
+# 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 (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
+# C0              # End Collection
+
+# # 05 0C        # Usage Page (Consumer)
+# # 09 01        # Usage (Consumer Control)
+# # A1 01        # Collection (Application)
+# # 85 03        #   Report ID (3)
+# # 19 00        #   Usage Minimum (Unassigned)
+# # 2A FF 03  #   Usage Maximum (0x03FF)
+# # 15 00        #   Logical Minimum (0)
+# # 26 FF 03  #   Logical Maximum (1023)
+# # 95 01        #   Report Count (1)
+# # 75 10        #   Report Size (16)
+# # 81 00        #   Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
+# # 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 (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
+# 95 01        #   Report Count (1)
+# 75 05        #   Report Size (5)
+# 81 03        #   Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
+# C0              # End Collection
+# 120 bytes
+
Index: sched/keyboard_ble_hid_map_magic_keyboard.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/keyboard_ble_hid_map_magic_keyboard.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/sched/keyboard_ble_hid_map_n_key_rollover_keyboard.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/sched/keyboard_ble_hid_map_only_keyboard.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/le_prcp.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/le_prcp.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/le_prcp.dat	(working copy)
@@ -0,0 +1,77 @@
+#attribute list: handle 2bytes, uuid 2bytes, length 1bytes, attribute Nbytes
+mem_le_att_list:
+
+#Primary service GAP ------
+01 00 00 28 02 00 18
+
+#Device name
+02 00 03 28 01 0a
+03 00 00 2a 0c 41 73 74 20 4c 45 20 4d 6f 75 73 65
+
+#Appearance
+04 00 03 28 01 02
+05 00 01 2a 02 c2 03 #3c2=hid mouse
+
+#Peripheral Preferred Connection Parameters
+06 00 03 28 01 02
+07 00 04 2a 08 06 00 06 00 64 00 2c 01 # interval 6ms, latency 100, timeout 300
+
+#Primary service GATT ------
+08 00 00 28 02 01 18
+
+#Service changed
+09 00 03 28 01 20
+0a 00 05 2a 00
+
+#Client Characteristic Configuration
+0b 00 02 29 02 00 00
+
+#Primary service TX power ------
+0c 00 00 28 02 04 18
+#Characteristic Tx power level
+0d 00 03 28 01 06
+0e 00 07 2a 01 00
+
+
+#Primary service Battery ------
+0f 00 00 28 02 0f 18
+#Characteristic Battery level
+10 00 03 28 01 12
+11 00 19 2a 01 38
+
+#Primary service yichip PRCP ------
+12 00 00 28 02 f1 18
+#Characteristic device tx
+13 00 03 28 01 12
+14 00 f3 2a 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+#Client Characteristic Configuration
+15 00 02 29 02 00 00
+#Characteristic device rx
+16 00 03 28 01 0e
+17 00 f2 2a 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+#End of Attribute list
+00 00
+
+mem_le_adv_data_len:1b
+mem_le_adv_data:0c 09
+'Yichip Temp
+ 03 19 40 02 02 01 05 02 0a 00 03 03 f1 18
+mem_le_scan_data_len:00
+#mem_le_adv_param:00 08 00 08 00 01 00 00 00 00 00 00 00 07 00
+mem_le_adv_enable:01
+
+
+mem_le_adv_interval:20 00 
+mem_le_adv_type:00 
+mem_le_adv_own_addr_type:01 
+mem_le_adv_direct_addr:00 00 00 00 00 00 
+mem_le_adv_channel_map:07 
+
+mem_le_notify_handle:14
+
+mem_lpm_mode:00
+#mem_lpm_ctrl:0f 0f 10 06
+mem_lpm_xtalcnt:0c 10 ca 1f
+mem_device_option:0d
+mem_le_lap:45 67 78 89 90 56
+
Index: sched/le_transmit_uuid.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/le_transmit_uuid.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/le_transmit_uuid.dat	(working copy)
@@ -0,0 +1,62 @@
+mem_device_option: 01
+
+#attribute list: handle 2bytes, uuid 2bytes, length 1bytes, attribute Nbytes
+mem_le_att_list:
+
+#Primary service GAP ------
+01 00 00 28 02 00 18
+
+#Device name
+02 00 03 28 01 0a
+03 00 00 2a 0c 41 73 74 20 4c 45 20 4d 6f 75 73 65
+
+#Appearance
+04 00 03 28 01 02
+05 00 01 2a 02 c2 03 #3c2=hid mouse
+
+#Peripheral Preferred Connection Parameters
+06 00 03 28 01 02
+07 00 04 2a 08 06 00 06 00 64 00 2c 01 # interval 6ms, latency 100, timeout 300
+
+#Primary service GATT ------
+08 00 00 28 02 01 18
+
+#Service changed
+09 00 03 28 01 20
+0a 00 05 2a 00
+
+#Client Characteristic Configuration
+0b 00 02 29 02 00 00
+
+#Primary service TX power ------
+0c 00 00 28 02 04 18
+#Characteristic Tx power level
+0d 00 03 28 01 06
+0e 00 07 2a 01 00
+
+
+#Primary service Battery ------
+0f 00 00 28 02 0f 18
+#Characteristic Battery level
+10 00 03 28 01 12
+11 00 19 2a 01 38
+
+#Primary service yichip transmit ------
+12 00 00 28 02 f0 18
+#Characteristic tx--notify
+13 00 03 28 01 12
+14 00 f1 2a 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+#Client Characteristic Configuration
+15 00 02 29 02 00 00
+#Characteristic rx--write
+16 00 03 28 01 0c
+17 00 f0 2a 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+#End of Attribute list
+00 00
+
+mem_le_adv_data_len:1b
+mem_le_adv_data:0c 09 52 74 72 69 76 72 5f 52 36 32 31 03 19 40 02 02 01 05 02 0a 00 03 03 00 f0
+mem_le_scan_data_len:00
+mem_le_adv_param:00 08 00 08 00 01 00 00 00 00 00 00 00 07 00
+mem_le_adv_enable:01
Index: sched/mouse.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/mouse.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/mouse.dat	(working copy)
@@ -0,0 +1,337 @@
+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
+e5
+
+#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
+01
+
+#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
+00
+
+#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
+00
+
+#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
+00
+
+#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
+01
+
+#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
+1b
+
+
+mem_device_switch_gpio:ff
+mem_device_reuse_2ice_gpio:05
+mem_sensor_motion_gpio:ff
+mem_whee_a_data_gpio:ff
+mem_whee_b_data_gpio:ff
+
+mem_mouse_param_config:
+06 #mem_lbutton_gpio
+0b #mem_mbutton_gpio
+0c #mem_rbutton_gpio
+06 #mem_bk_button_gpio
+0b #mem_fw_button_gpio
+0c #mem_dpi_button_gpio
+12 #mem_mouse_sensor_sclk_gpio
+13 #mem_mouse_sensor_sdio_gpio
+ff #mem_select_sensor_angle_gpio
+00 #mem_sensor_angle_default
+00 #mem_sensor_angle_gnd
+00 #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
+ff #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
+ff #mem_mouse_1io2led_multi_24gled
+ff #mem_mouse_1io2led_multi_bt1led
+ff #mem_mouse_1io2led_multi_bt2led
+ff #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:14	#2s
+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:2c 01  #30s	    24g reconn timer&pair timer
+mem_device_24g_reconn_timeout_init:0a #1s
+mem_device_24g_power_on_fast_conn_timer:05 00	#500ms
+mem_device_direct_timeout:32  #05s
+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:01   #01--only 2.4g   02--2.4g+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_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
+
+#adc
+mem_device_vdd_full_vol:dc 05		#1.5V
+84 03#mem_device_vdd_empty_vol  :0.9V
+e8 03#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:04
+#04
+#02
+#01
+#03
+#00
+#05
+#06
+#07
+
+#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
+
+#ui
+mem_ui_button_timeout:1e
+
+#2.4g
+mem_24g_lap: 11 11 31 41 51 61
+mem_24g_fast_conn_addr:0f 0f 0f 0f
+mem_24g_ch_map_update:00   #00--disable   01--enable
+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:ee 4d 00	#1662us
+mem_mouse_24g_long_sleep_set_4ms:80 bb 00
+mem_mouse_24g_tsniff_4ms:80 bb 00 00
+
+mem_mouse_24g_short_sleep_set_8ms:70 11 01	#SB:70 11 01	SA:60 ea 00
+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:2c 01	#30s
+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:05
+
+mem_mouse_long_mult_count:01
+
+#ble
+mem_le_lap:71 81 91 a1 b1 c1
+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:15 00
+mem_le_notify_handle:19 00
+mem_le_multimedia_handle:13 00
+mem_le_systemctrl_handle:21 00
+mem_le_pairing_handle:2d 00
+mem_le_battery_level_handle:30 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
+'\09BT5.2 Mouse
+
+mem_le_scan_data_len:1f
+mem_le_scan_data:
+#name
+'\09BT5.2 Mouse
+
+
+mem_le_name_len:
+'BT5.2 Mouse
+
+mem_le_name_patch_len:	#max 18bytes
+'BT5.2 Mouse
+
+mem_le_interval_min:
+07 00 #min interval
+07 00 #max interval
+20 00 #latency
+2c 01 #timeout
+
+#mem_le_adv_interval:01 00
+
+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 1f
+mem_eeprom_block_size:80
+
+#otp write info offset
+mem_otp_offset_device_flag:96 06
+mem_otp_offset_device_flag_end:bf 06
+
+mem_otp_offset_24g_addr:c0 06
+mem_otp_offset_24g_addr_end:f9 06
+
+mem_otp_offset_le_addr1:fa 06
+mem_otp_offset_le_addr1_end:53 07
+
+mem_otp_offset_le_locall_addr1:54 07
+mem_otp_offset_le_locall_addr1_end:8f 07
+
+mem_otp_offset_le_addr2:90 07
+mem_otp_offset_le_addr2_end:e9 07
+
+mem_otp_offset_le_locall_addr2:ea 07
+mem_otp_offset_le_locall_addr2_end:43 08
+
+mem_otp_offset_dpi:44 08
+mem_otp_offset_dpi_end:73 08
+
+mem_otp_offset_le_addr_increase_count:74 08
+mem_otp_offset_le_addr_increase_count_end:d8 08
+
+mem_otp_offset_app_initflag:aa 08
+
+#usb
+mem_usb_offline_check_gpio:ff
+
+#rf
+mem_tx_power:00	#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
+
+
Index: sched/mouse_ble_att_list.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/mouse_ble_att_list.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/sched/mouse_sensor.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/mouse_sensor.dat	(working copy)
@@ -0,0 +1,166 @@
+
+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
+11##mem_ka8g2_dpi_2	1000
+0e##mem_ka8g2_dpi_3	800
+
+mem_sensor_s201_dpi:
+8a  ##1200
+8b  ##1600
+83  ##2400
+84  ##3200
+88  ##800
+
+mem_sensor_3212_init:
+09 5a
+26 34
+19 04
+09 00
+ff ff
+
+#################sensor parm init#################
+
+
+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:
+09 5a
+ff 27
+ab 40
+be d1
+a0 41
+a1 12
+a7 ff
+b6 00
+b5 c8
+a5 af
+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_ka8g2_sensor_poweron_init:
+09 a5
+0b f3
+09 00
+ff ff
+
+
+
+
Index: sched/otp_set.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/otp_set.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/otp_set.dat	(working copy)
@@ -0,0 +1,11 @@
+0b
+00
+02
+00
+00
+00
+00
+00
+00
+00
+00
Index: sched/rec.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/rec.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/rec.dat	(working copy)
@@ -0,0 +1,501 @@
+
+mem_device_option:0b
+mem_ui_button_gpio:ff
+
+mem_tx_power:05
+
+###########################LED INITIAL##########################
+mem_ui_led_struct_num:01
+mem_ui_led_struct_ptr:mem_rec_led_style
+
+mem_rec_led_style:
+00		#type:stop blink 00---blink stop   01---blink start   02---lighting  03---darking  04---blink lighting  05---blink darking
+00		#blink count:no blink
+07		#led gpio number
+a0 01	#led blink light time, uint 0.625ms
+a0 01	#led blink dark time
+
+mem_rec_le_pair_led_style:
+01		#type:blink start
+ff		#blink count:no blink
+07		#led gpio number
+80 02	#led blink light time 400ms
+80 02	#led blink dark time		
+
+mem_rec_le_reconn_led_style:
+01		#type:blink start
+ff		#blink count:no blink
+07		#led gpio number
+60 04	#led blink light time 700ms
+60 04	#led blink dark time
+
+mem_rec_adc_low_led_style:
+01		#type:blink start
+03		#blink count:no blink
+07		#led gpio number
+40 01	#led blink light time 200ms
+40 01	#led blink dark time	
+
+mem_rec_led2_style:
+01		#type:blink start
+ff		#blink count:no blink
+ff		#led gpio number
+60 04	#led blink light time 700ms
+60 04	#led blink dark time
+
+
+###########################QUEUE INIT############################
+mem_queue_ptr:mem_rec_queue_each_size
+mem_rec_queue_each_size:01 20
+
+
+###########################TSCAN INITIAL##########################
+mem_rec_tscan_gpio_nums:06
+mem_rec_tscan_row_nums:05
+mem_rec_tscan_col_nums:05
+mem_rec_tscan_row_gpio:0d 0e 0c 0a 08
+mem_rec_tscan_col_gpio:0b 0d 0e 0c 0a 08
+
+mem_rec_gpio_wakeup_source:07	#tri-angle keyscan matrix check
+
+mem_rec_gnd_key_offset:0f
+
+mem_rec_key_map:01 02 04 07 0b 03 05 08 0c 06 09 0d 0a 0e 0f 
+
+mem_rec_tscan_key_nums_list:
+01 01 #k01
+02 01 #k02
+04 01 #k04
+08 01 #k07
+10 01 #k11
+01 02 #k03
+02 02 #k05
+04 02 #k08
+08 02 #k12
+01 04 #k06
+02 04 #k09
+04 04 #k13
+01 08 #k10
+02 08 #k14
+01 10 #k15
+00 00 #end
+
+mem_rec_tscan_gndkey_nums_list:
+01
+02
+04
+08
+10
+20
+40
+00
+
+mem_rec_combin_key_timeout:14		#2s
+mem_rec_tscan_combin_key_num_bit:42 00 00 00 00 00 00 00	#key2+key5 0x0042, key8+key13 0x0880
+
+
+###########################NEC INITIAL##########################
+mem_rec_nec_send_gpio:03
+
+
+###########################OTA INITIAL##########################
+mem_rec_code_a_flash_addr:00 60 00
+mem_rec_code_b_flash_addr:00 f0 00
+
+mem_rec_ota_notify_handle:48 00
+mem_rec_ota_queue_size:00 05 
+
+mem_rec_ota_le_conn_update_param:
+06 00
+06 00
+2b 01
+b0 04
+
+
+###########################ADPCM INITIAL##########################
+mem_rec_ad_indexTable1:ff ff ff ff 02 04 06 08 ff ff ff ff 02 04 06 08
+
+mem_rec_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
+
+
+
+###########################GATT INITIAL##########################
+mem_rec_voice_notify_apk_handle:42 00
+mem_rec_voice_notify_box_handle:2a 00
+mem_rec_control_notify_apk_handle:3f 00
+mem_rec_control_notify_box_handle:26 00
+
+
+mem_ui_le_uuid_table:mem_rec_le_att_list
+
+mem_rec_le_att_list:
+#Primary Service Gap	
+01 00 02 00 28 02 00 18 
+
+#Device name
+02 00 02 03 28 01 02
+03 00 02 00 2a 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+#Appearance
+04 00 02 03 28 01 02 
+05 00 02 01 2a 02 80 01 
+
+#Primary Service: Gatt Service
+06 00 02 00 28 02 01 18
+#Service Changed
+07 00 02 03 28 01 20
+08 00 02 05 2a 01 00 	
+#Client Characteristic Configuration
+09 00 02 02 29 02 00 00
+
+#Primary Service: Battery Service
+0a 00 02 00 28 02 0f 18
+0b 00 02 03 28 01 02
+0c 00 02 19 2a 01 64
+0d 00 02 02 29 02 00 00	
+
+#Primary Service: Device Information
+0e 00 02 00 28 02 0a 18
+#Model Number
+0f 00 02 03 28 01 02
+10 00 02 24 2a 05 4d 49 20 52 43
+#Manufacture name
+11 00 02 03 28 01 02
+12 00 02 29 2a 15 43 79 70 72 65 73 73 20 53 65 6D 69 63 6F 6E 64 75 63 74 6F 72
+#Pnp id
+13 00 02 03 28 01 02 
+14 00 02 50 2a 07 02 54 2b 00 16 00 00
+
+#Primary service: HID
+15 00 02 00 28 02 12 18
+#Characteristic:Hid information
+16 00 02 03 28 01 02
+17 00 02 4a 2a 04 01 01 00 02
+#Characteristic:Report map
+18 00 02 03 28 01 02
+19 00 02 4b 2a c5
+
+#65
+05 01    #Usage Page Generic Desktop) 
+09 06    #Usage (Keyboard) 
+A1 01    #Collection (Application) 
+85 0b    #report ID (HIDAPP_KEYBOARD_REPORT_ID) 
+75 01    #Report Size (1) 
+95 08    #Report Count (8) 
+05 07    #Usage Page (Key Codes) 
+19 e0    #Usage Minimum (224) 
+29 e7    #Usage Maximum (231) 
+15 00    #Logical Minimum (0) 
+25 01    #Logical Maximum (1) 
+81 02    #Input (Data, Variable, Absolute) 
+95 01    #Report Count (1) 
+75 08    #Report Size (8) 
+81 01    #Input (Constant) reserved byte(1) 
+95 05    #Report Count (5) 
+75 01    #Report Size (1) 
+05 08    #Usage Page (Page#for LEDs) 
+19 01    #Usage Minimum (1) 
+29 05    #Usage Maximum (5) 
+91 02    #Output (Data, Variable, Absolute), Led report 
+95 01    #Report Count (1) 
+75 03    #Report Size (3) 
+91 01    #Output (Constant), Led report padding 
+95 06    #Report Count (6) 
+75 08    #Report Size (8) 
+15 00    #Logical Minimum (0) 
+25 eb    #Logical Maximum (101) 
+05 07    #Usage Page (Key codes) 
+19 00    #Usage Minimum (0) 
+29 eb    #Usage Maximum (101) 
+81 00    #Input (Data, Array) Key array(6 bytes) 
+C0   	 #End Collection (Application) 
+
+
+#Consumer Usepage #46
+05 0c    #Usage Page (Consumer Devices) 
+09 01    #Usage (Consumer Control) 
+a1 01    #Collection (Application) 
+85 01    #HIDAPP_REMOTE_REPORT_ID,    #report ID (01) 
+19 00    #USAGE_MINIMUM (0) 
+2a 9c 02 #USAGE_MINIMUM (29c) 
+15 00    #Logical Minimum (0) 
+26 9c 02 #Logical Maximum (29c) 
+95 01    #Report Count (1) 
+75 10    #Report Size (16) 
+81 00    #Input (Data, array, Absolute) 
+09 02    #Usage (Numeric Key Pad ) 
+a1 02    #Collection (Application) 
+05 09    #Usage Page (button) 
+19 01    #Usage Minimum (1) 
+29 0a    #Usage Maximum (10) 
+15 01    #Logical Minimum (1) 
+25 0a    #Logical Maximum (10) 
+95 01    #Report Count (1) 
+75 08    #Report Size (8) 
+81 40    #Input (Data, Variable, Relative) 
+c0   	 #End Collection 
+c0    	 #End Collection 
+
+#optional mouse data #54
+05 01    #Usage Page (Generic Desktop) 
+09 02    #USAGE (Mouse) 
+a1 01    #COLLECTION (Application) 
+09 01    #USAGE (Pointer) 
+a1 00    #COLLECTION (Physical) 
+85 03    #HIDAPP_MOUSE_REPORT_ID,    #report ID (HIDAPP_MOUSE_REPORT_ID) 
+05 01    #USAGE_PAGE (Generic Desktop) 
+09 30    #USAGE (X) 
+09 31    #USAGE (Y) 
+09 38    #USAGE (Wheel)
+15 80    #LOGICAL_MINIMUM (-127) 
+25 7f    #LOGICAL_MAXIMUM (127) 
+75 08    #REPORT_SIZE (8) 
+95 03    #REPORT_COUNT (3) 
+81 06    #INPUT (Data, Variable, Relative) 
+05 09    #USAGE_PAGE (Button) 
+19 01    #USAGE_MINIMUM (Button 1) 
+29 05    #USAGE_MAXIMUM (Button 5) 
+15 00    #LOGICAL_MINIMUM (0) 
+25 01    #LOGICAL_MAXIMUM (1) 
+95 05    #REPORT_COUNT (5) 
+75 01    #REPORT_SIZE (1) 
+81 02    #INPUT () 
+95 01    #REPORT_COUNT (1) 
+75 03    #REPORT_SIZE (3) 
+81 03    #INPUT () 
+c0    	 #End Collection (Physical) 
+c0       #End Collection (Application) 
+
+#end mouse data	#32
+06 01 ff
+09 01    #Usage (Consumer Control) 
+a1 02    #COLLECTION () 
+85 08    #HIDAPP_VOICE_REPORT_ID,    #report ID (HIDAPP_KEYBOARD_REPORT_ID) 
+09 14
+75 08    #Report Size (8) 
+95 14    #Report Count (20) 
+15 80    #Logical Minimum (80) 
+25 7f    #Logical Minimum (7f) 
+81 22    #Input () 
+85 04    #report ID () 
+09 04    #USAGE () 
+75 08    #Report Size (8) 
+95 01    #Report Count (1) 
+91 02    #Output 
+c0
+
+#External Report Reference
+1a 00 02 07 29 02 19 2a
+#Characteristic:control point
+1b 00 02 03 28 01 04
+1c 00 02 4c 2a 01 00
+#Characteristic:boot keyboard Input report
+1d 00 02 03 28 01 12
+1e 00 02 22 2a 08 00 00 00 00 00 00 00 00
+1f 00 02 02 29 01 13
+#Characteristic:boot keyboard output report
+20 00 02 03 28 01 0e
+21 00 02 32 2a 08 00 00 00 00 00 00 00 00
+#Characteristic:boot Mouse Input report
+22 00 02 03 28 01 12
+23 00 02 33 2a 08 00 00 00 00 00 00 00 00
+24 00 02 02 29 01 13
+
+#Characteristic: hid report
+25 00 02 03 28 01 12   
+26 00 02 4d 2a 08 00 00 00 00 00 00 00 00	
+27 00 02 02 29 01 13	
+28 00 02 08 29 02 01 01	#Report ID: 1	Report Type: Input
+
+#Characteristic: hid report
+29 00 02 03 28 01 12   
+2a 00 02 4d 2a 08 00 00 00 00 00 00 00 00	
+2b 00 02 02 29 01 13	
+2c 00 02 08 29 02 08 01	#Report ID: 8	Report Type: Input
+
+#Characteristic: hid report
+2d 00 02 03 28 01 12   
+2e 00 02 4d 2a 08 00 00 00 00 00 00 00 00	
+2f 00 02 02 29 01 13
+30 00 02 08 29 02 03 01	#Report ID: 3	Report Type: input
+
+#Characteristic: hid report
+31 00 02 03 28 01 12   
+32 00 02 4d 2a 08 00 00 00 00 00 00 00 00	
+33 00 02 02 29 01 13
+34 00 02 08 29 02 0b 01	#Report ID: 0b 	 Report Type: input
+
+#Characteristic: hid report
+35 00 02 03 28 01 0e   
+36 00 02 4d 2a 08 00 00 00 00 00 00 00 00	
+37 00 02 08 29 02 00 02	#Report ID:2     Report Type:output
+
+#Characteristic: hid report
+38 00 02 03 28 01 0a  
+39 00 02 4d 2a 08 00 00 00 00 00 00 00 00	
+3a 00 02 08 29 02 00 03   #Report ID:0    Report Type:feature	
+
+#Characteristic:Protocol mode
+3b 00 02 03 28 01 06
+3c 00 02 4e 2a 01 01
+
+#Primary service yichip transmit ------
+3d 00 02 00 28 02 f0 ff 
+#Characteristic tx--notify
+3e 00 02 03 28 01 16
+3f 00 02 f1 ff 01 00 #voice data start and end 
+#Client Characteristic Configuration
+40 00 02 02 29 02 00 00
+
+41 00 02 03 28 01 16
+42 00 02 f2 ff 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  #voice data
+#Client Characteristic Configuration
+43 00 02 02 29 02 00 00
+
+44 00 02 03 28 01 0a
+45 00 02 f3 ff 01 00 # voice test bit
+46 00 02 02 29 02 00 00
+
+#ota notify
+47 00 02 03 28 01 16
+48 00 02 fe ff 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
+49 00 02 02 29 02 01 00
+
+#ota write
+4a 00 02 03 28 01 04
+4b 00 02 ff ff 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+#Warning Attention,long 16 byte uuid must put at the last
+#Primary service: Wicentric,Inc
+4c 00 02 00 28 10 fb 34 9b 5f 80 00 00 80 00 10 00 00 f6 fe 00 00 
+#
+4d 00 02 03 28 01 18
+4e 00 10 65 78 61 63 74 4c 45 b0 d5 4e f2 2f 02 00 5f 00 01 18
+4f 00 02  02 29 01 00
+#
+50 00 02 03 28 01 14
+51 00 10 65 78 61 63 74 4c 45 b0 d5 4e f2 2f 03 00 5f 00 01 14
+52 00 02 02 29 01 00
+#
+53 00 02 03 28 01 14
+54 00 10 65 78 61 63 74 4c 45 b0 d5 4e f2 2f 04 00 5f 00 01 14
+55 00 02 02 29 01 00
+#
+56 00 02 03 28 01 18
+57 00 10 65 78 61 63 74 4c 45 b0 d5 4e f2 2f 05 00 5f 00 01 18
+58 00 02 02 29 01 00
+
+#Google atv voice
+#primary service
+59 00 02 00 28 10 64 b6 17 f6 01 af 7d bc 05 4f 21 5a 01 00 5e ab
+
+#google atv write characeristic
+5a 00 02 03 28 01 08
+5b 00 10 64 b6 17 f6 01 af 7d bc 05 4f 21 5a 02 00 5e ab 01 14
+
+#google atv read characeristic
+5c 00 02 03 28 01 12
+5d 00 10 64 b6 17 f6 01 af 7d bc 05 4f 21 5a 03 00 5e ab 01 14
+5e 00 02 02 29 02 00 00
+
+#google atv ctrl characeristic
+5f 00 02 03 28 01 12
+60 00 10 64 b6 17 f6 01 af 7d bc 05 4f 21 5a 04 00 5e ab 01 14
+61 00 02 02 29 02 00 00
+
+#End of Attribute list
+00 00
+
+
+
+
+
Index: sched/remote_car.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/remote_car.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/remote_car.dat	(working copy)
@@ -0,0 +1,53 @@
+
+mem_device_option:0d
+
+mem_tx_power: 0a
+#0x00 TX_POWER_0DB
+#0x03 TX_POWER_3DB
+#0x05 TX_POWER_5DB
+#0x07 TX_POWER_7DB
+#0x0a TX_POWER_10DB
+
+#0x83 TX_POWER_F3DB
+#0x85 TX_POWER_F5DB
+#0x8a TX_POWER_F10DB
+#0x94 TX_POWER_F20DB
+
+
+mem_24g_tx_phy:84
+#Bit rate
+#0x01:1M
+#0x02:2M
+#0x04:S2, 500K
+#0x84:S8, 125K
+
+mem_24g_rx_phy:84
+#Bit rate
+#0x01:1M
+#0x02:2M
+#0x04:S2, 500K
+#0x84:S8, 125K
+
+mem_24g_ch_map1:04 14 24 34
+mem_24g_ch:20
+#2402Mhz + mem_24g_ch
+
+mem_remote_full_control_remote_lap:ff ff ff ff
+mem_le_lap:0f 01 00 00 01 22
+
+mem_24g_addr:00 00 00 00
+
+mem_remote_car_key_conf0:
+#0
+0c
+#1
+8c
+#2
+85
+#3
+05
+mem_24g_tx_led_map:0d
+
+
+mem_remote_mult_key:92
+mem_key_public_gpio:12
Index: sched/rtrivr_uuid.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/rtrivr_uuid.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/rtrivr_uuid.dat	(working copy)
@@ -0,0 +1,75 @@
+#attribute list: handle 2bytes, uuid 2bytes, length 1bytes, attribute Nbytes
+mem_le_att_list:
+
+#Primary service GAP ------
+01 00 00 28 02 00 18
+
+#Device name
+02 00 03 28 01 0a
+03 00 00 2a 0c 41 73 74 20 4c 45 20 4d 6f 75 73 65
+
+#Appearance
+04 00 03 28 01 02
+05 00 01 2a 02 c2 03 #3c2=hid mouse
+
+#Peripheral Preferred Connection Parameters
+06 00 03 28 01 02
+07 00 04 2a 08 06 00 06 00 64 00 2c 01 # interval 6ms, latency 100, timeout 300
+
+#Primary service GATT ------
+08 00 00 28 02 01 18
+
+#Service changed
+09 00 03 28 01 20
+0a 00 05 2a 00
+
+#Client Characteristic Configuration
+0b 00 02 29 02 00 00
+
+#Primary service TX power ------
+0c 00 00 28 02 04 18
+#Characteristic Tx power level
+0d 00 03 28 01 06
+0e 00 07 2a 01 00
+
+#Primary service Immediate alert ------
+0f 00 00 28 02 02 18
+#Characteristic Alert level
+10 00 03 28 01 04
+11 00 06 2a 01 00
+
+#Primary service UUID:f003 ------
+12 00 00 28 02 03 f0
+#Characteristic UUID:f803
+13 00 03 28 01 04
+14 00 03 f8 01 00
+
+
+#Primary service Link loss alert ------
+15 00 00 28 02 03 f0
+#Characteristic Alert level
+16 00 03 28 01 0a
+17 00 06 2a 01 00
+
+#Primary service UUID:f002 ------
+18 00 00 28 02 02 f0
+#Characteristic UUID:f802
+19 00 03 28 01 12
+1a 00 02 f8 01 28
+1b 00 02 29 02 00 00
+
+#Primary service Battery ------
+1c 00 00 28 02 0f 18
+#Characteristic Battery level
+1d 00 03 28 01 12
+1e 00 19 2a 01 38
+
+
+#End of Attribute list
+00 00
+
+mem_le_adv_data_len:1b
+mem_le_adv_data:0c 09 52 74 72 69 76 72 5f 52 36 32 31 03 19 40 02 02 01 05 02 0a 00 03 03 00 f0
+mem_le_scan_data_len:00
+mem_le_adv_param:00 08 00 08 00 01 00 00 00 00 00 00 00 07 00
+mem_le_adv_enable:01
Index: sched/sha256.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/sha256.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/sha256.dat	(working copy)
@@ -0,0 +1,256 @@
+98
+2f
+8a
+42
+91
+44
+37
+71
+cf
+fb
+c0
+b5
+a5
+db
+b5
+e9
+5b
+c2
+56
+39
+f1
+11
+f1
+59
+a4
+82
+3f
+92
+d5
+5e
+1c
+ab
+98
+aa
+07
+d8
+01
+5b
+83
+12
+be
+85
+31
+24
+c3
+7d
+0c
+55
+74
+5d
+be
+72
+fe
+b1
+de
+80
+a7
+06
+dc
+9b
+74
+f1
+9b
+c1
+c1
+69
+9b
+e4
+86
+47
+be
+ef
+c6
+9d
+c1
+0f
+cc
+a1
+0c
+24
+6f
+2c
+e9
+2d
+aa
+84
+74
+4a
+dc
+a9
+b0
+5c
+da
+88
+f9
+76
+52
+51
+3e
+98
+6d
+c6
+31
+a8
+c8
+27
+03
+b0
+c7
+7f
+59
+bf
+f3
+0b
+e0
+c6
+47
+91
+a7
+d5
+51
+63
+ca
+06
+67
+29
+29
+14
+85
+0a
+b7
+27
+38
+21
+1b
+2e
+fc
+6d
+2c
+4d
+13
+0d
+38
+53
+54
+73
+0a
+65
+bb
+0a
+6a
+76
+2e
+c9
+c2
+81
+85
+2c
+72
+92
+a1
+e8
+bf
+a2
+4b
+66
+1a
+a8
+70
+8b
+4b
+c2
+a3
+51
+6c
+c7
+19
+e8
+92
+d1
+24
+06
+99
+d6
+85
+35
+0e
+f4
+70
+a0
+6a
+10
+16
+c1
+a4
+19
+08
+6c
+37
+1e
+4c
+77
+48
+27
+b5
+bc
+b0
+34
+b3
+0c
+1c
+39
+4a
+aa
+d8
+4e
+4f
+ca
+9c
+5b
+f3
+6f
+2e
+68
+ee
+82
+8f
+74
+6f
+63
+a5
+78
+14
+78
+c8
+84
+08
+02
+c7
+8c
+fa
+ff
+be
+90
+eb
+6c
+50
+a4
+f7
+a3
+f9
+be
+f2
+78
+71
+c6
\ No newline at end of file
Index: sched/shutter.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/shutter.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/shutter.dat	(working copy)
@@ -0,0 +1,16 @@
+mem_device_option:09
+mem_ui_button_gpio:ff
+
+mem_le_lap:20 31 20 98 07 2a
+mem_le_name_len:
+'AB Shutter3
+
+mem_shutter_key_conf0_temp:07 0b 8c 00 ff
+
+mem_shutter_soft_switch_first_power_on:00
+
+mem_tx_power:06
+
+mem_shutter_dy_conf:00
+
+
Index: sched/shutter_dy.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/shutter_dy.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/shutter_dy.dat	(working copy)
@@ -0,0 +1,521 @@
+#device option
+mem_device_option:06
+#power on config
+mem_ui_button_gpio:ff
+
+mem_le_lap:61 21 20 98 07 2a
+mem_le_name_len:
+'BLE-M3
+
+mem_tx_power:06
+
+//save otp addr
+mem_shutter_efuse_start_offset: b0 1f
+mem_shutter_efuse_end_offset: 70 19
+
+mem_shutter_le_pairing_handle:2b 00
+
+#榛樿鐩告満鍦
+#mem_initial_move_conf:aa 00 78 00 69 00 38 00
+#宸︿笅瑙
+#mem_initial_move_conf:0a 00 1e 00 07 00 06 00
+#瀹夊崜涓棿锛孖OS宸︿笅瑙
+mem_initial_move_conf:43 08 4a 0e 07 00 06 00
+
+mem_shutter_dy_conf:01
+#soft switch first power on
+mem_shutter_soft_switch_first_power_on:00
+
+#led config
+mem_shutter_led_on_light_dark_led_conf:
+00		#type:stop blink
+00		#blink count:no blink
+8c		#led gpio number:GPIO01
+46 00	#led blink light time
+96 00	#led blink dark time
+mem_shutter_led_off_light_dark_led_conf:
+01		#type:start blink
+03		#blink count:no blink
+8c		#led gpio number:GPIO01
+46 00	#led blink light time
+96 00	#led blink dark time
+
+
+mem_shutter_reconn_blink_on_time_conf:
+20 01
+20 03
+mem_shutter_discovery_blink_on_time_conf:
+20 01
+20 03
+
+#hard_soft_switch config
+mem_shutter_hard_soft_switch_case_temp:00
+mem_shutter_soft_switch_button_gpio_temp:ff
+
+#100ms timer
+mem_shutter_ble_discovery_time_conf:
+b8 0b #discovery_timeout
+70 17 #connect_timeout
+b8 0b #sleep_timeout
+b8 0b #sleep_timer
+
+
+#key config
+mem_shutter_key_num_conf:06
+mem_shutter_dy_key_conf:
+#test 6key
+# 07
+# 0b
+# 13
+# 14
+# 15
+# 16
+# 0c
+
+# jxy-181
+07	#right
+12 	#like
+13 	#down
+06 	#photo
+08 	#up
+14 	#left
+
+mem_combine_key0:
+#6key
+28 00 #left 2
+09 00 #right 2
+18 00 #up 2
+0c 00 #down 2
+
+#6key -key mirror
+#09 00 #left 2
+#28 00 #right 2
+#0c 00 #up 2
+#18 00 #down 2
+
+#7key
+# 60 00 #left 2
+# 41 00 #right 2
+# 50 00 #up 2
+# 44 00 #down 2
+# 00 00
+
+#7key -key mirror
+#41 00 #left 2
+#60 00 #right 2
+#44 00 #up 2
+#50 00 #down 2
+#00 00
+
+
+mem_combine_key_release_value:
+#6key
+08 00
+#7key
+# 40 00
+
+
+mem_shutter_iphone_up_mid:
+1e 1e 1f 20 28 28 00
+mem_shutter_iphone_like_mid:
+1e 1e 1f 20 28 28 00
+mem_shutter_iphone_move_mid:
+1e 1e 1f 20 28 28 00
+
+
+mem_key0_press_i:  #right
+00
+mem_key0_release_new_i:
+27 24 24 24 28 23 23 23
+mem_key0_long_press_i:
+04 06 00
+
+mem_key1_press_i:#like
+00
+mem_key1_release_new_i:
+27 28 00
+
+mem_shutter_link_data_i:
+27 28 27 28 00
+
+mem_key2_press_i:#down
+00
+mem_key2_release_new_i:
+27 26 26 26 28 25 25 25
+
+#toggle between vol-inc and vol-dec
+mem_key3_press_i:#photo
+00
+mem_key3_release_new_i:#volume increment
+#7key
+# 01 06 00
+#6key
+27 01 06 28 00
+mem_key3_release_new_i_t:#volume decrement
+#7key
+# 02 06 00
+#6key
+27 02 06 28 00
+
+mem_key4_press_i:#up
+00
+mem_key4_release_new_i:
+27 25 25 25 28 26 26 26
+
+mem_key5_press_i:#left
+00
+mem_key5_release_new_i:
+27 23 23 23 28 24 24 24
+mem_key5_long_press_i: #lock
+03 06 00
+
+mem_key6_release_new_i:#move
+27 28 00 00
+mem_key6_release_new:#move
+00
+
+mem_dy_key0_press:  #right
+00
+mem_key0_release_new:
+13 14 15 16 17 18 19 1a 1b 00
+mem_key0_long_press:
+05 06 00
+
+mem_dy_key1_press:#like
+00
+mem_key1_release_new:
+0b 11 00
+
+mem_shutter_link_data:#like key loop
+0b 11 00 00 0b 11 00
+
+mem_dy_key2_press: #down
+00
+mem_key2_release_new:
+0f 0e 0d 0c 0b 0a 09 08 07 00
+mem_key2_long_press:#volume decrement
+02 06 00
+mem_key2_long_release:
+1c 1d 00
+
+#toggle between vol-inc and vol-dec
+mem_dy_key3_press:#photo
+00
+mem_key3_release_new:#volume increment
+1c 02 06 1d 00 #6key
+# 01 06 #7key
+mem_key3_release_new_t:#volume decrement
+1c 01 06 1d 00 #6key
+#02 06 #7key
+
+
+mem_dy_key4_press:#up
+00
+mem_key4_release_new:
+08 09 0a 0b 0c 0d 0e 0f 10 00
+mem_key4_long_press:#volume increment
+01 06 00
+mem_key4_long_release:
+00
+
+
+mem_dy_key5_press:#left
+00
+mem_key5_release_new:
+1a 19 18 17 16 15 14 13 12 00
+mem_key5_long_press: #lock
+03 06 00
+
+mem_combine_key0_press:
+01
+mem_combine_key1_press:
+02
+mem_combine_key2_press:
+03
+mem_combine_key3_press:
+04
+mem_combine_key_release:
+00
+
+mem_move_mode_set:00 #00 combine key, 01 single key when another key has already triggered
+mem_move_mode_key_index:03 #move key index,SHUTTER_MOVE_KEY_NUM,SHUTTER_PHOTO_KEY_NUM
+mem_move_mode_trigger_enable:00
+
+mem_shutter_long_key_released_flag:01
+
+################ble kb val list#######################
+mem_shutter_mousekey_value_list:
+#Media key
+02 13 00 01 00 00 00 00 00 00 #1 volume increment
+02 13 00 02 00 00 00 00 00 00 #2 volume decrement
+02 13 00 04 00 00 00 00 00 00 #3 lock
+02 13 00 08 00 00 00 00 00 00 #4 ios home
+02 13 00 10 00 00 00 00 00 00 #5 android home
+02 13 00 00 00 00 00 00 00 00 #6 release
+#Android Key
+#up down
+06 23 00 02 01 00 00 00 00 00 #7
+06 23 00 03 01 f4 06 20 02 00 #8
+06 23 00 03 01 f4 06 d4 02 00 #9
+06 23 00 03 01 f4 06 28 03 00 #a
+06 23 00 03 01 f4 06 3c 04 00 #b like press
+06 23 00 03 01 f4 06 20 04 00 #c
+06 23 00 03 01 f4 06 74 05 00 #d
+06 23 00 03 01 f4 06 28 06 00 #e
+06 23 00 03 01 f4 06 dc 06 00 #f
+06 23 00 02 01 f4 06 70 07 00 #10
+#like release
+06 23 00 02 01 f4 06 3c 04 00 #11
+#right left
+06 23 00 02 01 f0 08 0f 09 00#12d   dd
+06 23 00 03 01 a3 07 0f 09 00#13
+06 23 00 03 01 2c 06 0f 09 00#14
+06 23 00 03 01 2c 05 0f 09 00#15
+06 23 00 03 01 52 04 0f 09 00#16
+06 23 00 03 01 e2 03 0f 09 00#17
+06 23 00 03 01 4f 03 0f 09 00#18
+06 23 00 03 01 4f 02 0f 09 00#19
+06 23 00 03 01 ab 01 0f 09 00#1a
+06 23 00 02 01 01 01 0f 09 00#1b
+#move
+06 23 00 07 04 00 00 00 00 00#1c    //move press
+06 23 00 06 04 00 00 00 00 00#1d    //move release
+
+#ios key
+#ios localinit key
+03 1b 00 01 18 80 00 00 00 00 #1e
+03 1b 00 00 10 80 00 00 00 00 #1f
+03 1b 00 41 40 0a 00 00 00 00 #20 ios init up local
+03 1b 00 41 40 0a 00 00 00 00 #21 ios init like local
+03 1b 00 41 40 0a 00 00 00 00 #22 ios init down/right/left local
+03 1b 00 20 00 00 00 00 00 00 #23 ios left
+03 1b 00 e0 0f 00 00 00 00 00 #24 ios right
+03 1b 00 00 00 02 00 00 00 00 #25 ios up
+03 1b 00 00 00 fe 00 00 00 00 #26 ios down
+
+#mouse key
+03 17 00 01 00 00 00 00 00 00 #27   press
+03 17 00 00 00 00 00 00 00 00 #28   release
+03 1b 00 00 00 00 00 00 00 00 #29 ios move
+03 1b 00 00 00 00 00 00 00 00 #2a ios move double
+
+03 1b 00 01 f8 7f 00 00 00 00 #2b
+03 1b 00 64 00 00 00 00 00 00 #2c
+03 1b 00 00 b0 f9 00 00 00 00 #2d
+mem_shutter_move_data:
+00 00 00  #defualt
+
+mem_ble_shutter_dy_interval_min_android:
+10 00
+10 00
+10 00
+2c 01
+
+mem_ble_shutter_dy_interval_min_ios:
+18 00
+1c 00
+10 00
+2c 01
+
+#attribute list: handle 2bytes, uuid 2bytes, length 1bytes, attribute Nbytes
+mem_shutter_le_uuid_sup:
+#Primary service GATT ------
+01 00 02 00 28 02 01 18
+#Service changed
+02 00 02 03 28 01 20
+03 00 02 05 2a 01 00
+#Client Characteristic Configuration
+04 00 02 02 29 02 00 00
+
+#Primary service GAP ------
+05 00 02 00 28 02 00 18
+
+#Device name
+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
+
+#Appearance
+08 00 02 03 28 01 02
+09 00 02 01 2a 02 c1 03
+
+#Peripheral Preferred Connection Parameters
+0a 00 02 03 28 01 02
+0b 00 02 04 2a 08 06 00 06 00 64 00 2c 01 # interval 6ms, latency 100, timeout 300
+
+#Primary service device information ------
+0c 00 02 00 28 02 0a 18
+#PNP id
+0d 00 02 03 28 01 02
+0e 00 02 50 2a 07 01 05 0e 00 0a 02 40
+
+#Primary service hid ------
+0f 00 02 00 28 02 12 18
+
+#Protocol mode
+10 00 02 03 28 01 06
+11 00 02 4e 2a 01 01
+
+
+#Hid report
+12 00 02 03 28 01 10
+13 00 02 4d 2a 02 00 00
+#Client Characteristic
+14 00 02 02 29 02 00 00
+#Report reference
+15 00 02 08 29 02 01 01 # report id=1, type=1 input
+
+#Hid report id 4
+16 00 02 03 28 01 10
+17 00 02 4d 2a 03 00 00 00
+#Client Characteristic
+18 00 02 02 29 03 00 00 00
+#Report reference
+19 00 02 08 29 02 04 01 # report id=4, type=1 input
+
+#Hid report id 3
+1a 00 02 03 28 01 10
+1b 00 02 4d 2a 03 00 00 00
+#Client Characteristic
+1c 00 02 02 29 02 00 00
+#Report reference
+1d 00 02 08 29 02 03 01 # report id=3, type=1 input
+
+#Hid report id 5
+1e 00 02 03 28 01 10
+1f 00 02 4d 2a 05 00 00 00 00 00
+#Client Characteristic
+20 00 02 02 29 02 00 00
+#Report reference
+21 00 02 08 29 02 05 01 # report id=5, type=1 input
+
+#Hid report id 2
+22 00 02 03 28 01 12
+23 00 02 4d 2a 06 00 00 00 00 00 00
+#00 00 00 00 00
+#Client Characteristic
+24 00 02 02 29 02 00 00
+#Report reference
+25 00 02 08 29 02 02 01 # report id=2, type=1 input
+
+#Hid report id 6
+26 00 02 03 28 01 12
+27 00 02 4d 2a 07 00 00 00 00 00 00 00
+#Client Characteristic
+28 00 02 02 29 02 00 00
+#Report reference
+29 00 02 08 29 02 06 01 # report id=6, type=1 input
+#Report map
+2a 00 02 03 28 01 02
+2b 00 02 4b 2a 01 00
+
+#Hid information
+2c 00 02 03 28 01 02
+2d 00 02 4a 2a 04 11 01 00 01
+
+#Hid control point
+2e 00 02 03 28 01 04
+2f 00 02 4c 2a 01 00
+30 00 02 00 28 02 0f 18
+00 00
+
+mem_shutter_le_map_len_android:63 00 #6d 00
+mem_shutter_le_map_len_ios:b7 00
+mem_shutter_le_hid_map:
+05 0c # Usage Page(Consumer) #legth 30
+09 01 # Usage(Consumer Control)
+a1 01 # Collection(Application)
+85 01 # Report ID(1)
+15 00 # Logical Minimum(0)
+25 01 # Logical Maximum(1)
+75 01 # Report Size(1)
+95 05 # Report Count(5)
+09 e9 # volume up
+09 ea # volume down
+09 30 # lock
+09 40 # home
+0a 23 02  #home
+81 06 #Input (Data, Variable, Absolute)
+c0 #end
+
+05 0d	#Usage Page (Digitizer)
+09 04 	# Usage(touch screem)
+a1 01 	#Collection (Application)
+85 02	#Report Id (2)
+09 24   #Usage (Stylus)
+a1 02  	#Collection (Logical)
+09 42	#Usage (Tip Switch)
+15 00	#Logical minimum (0)
+25 01 	#Logical maximum (1)
+75 01	#Report Size (1)
+95 01	#Report Count (1)
+81 02 	#Input (Data,Value,Absolute,Bit Field)
+09 32	#Usage (In Range)
+81 02  	#Input (Data,Value,Absolute,Bit Field)
+95 06	#Report Count (6)
+81 03 	#Input (Constant,Array,Absolute,Bit Field)
+75 08 #        Report Size (8)
+09 51 #        Usage (Contact identifier)
+95 01 #        Report Count (1)
+81 02 #        Input (Data,Value,Absolute,Bit Field)
+05 01	#Usage Page (Generic Desktop)
+26 ff 0f  #Logical maximum (1'000)
+75 10	#Report Size (16)
+55 0E #Unit Exponent (14)
+65 33 #Unit(51)
+09 30 	#Usage (X)
+35 00   #Physical Minimum (0)
+46 00 10  #Physical maximum (1'205)
+81 02	#Input (Data,Value,Absolute,Bit Field)
+09 31	#Usage (Y)
+46 8a 03  #Physical maximum (906)
+81 02	#Input (Data,Value,Absolute,Bit Field)
+c0		#End Collection
+c0
+
+05 01 #Usage Page (Generic Desktop Controls)
+09 02 # Usage(Mouse)
+a1 01 # Collection(Application)
+85 04 # Report ID(4)
+09 01 # Usage(Pointer)
+a1 00 # Collection(Physical)
+95 05 # Report Count(5)
+75 01 # Report Size(1)
+05 09 # Usage Page(Buttons)
+19 01 # Usage Minimum(1)
+29 05 # Usage Maximum(5)
+15 00 # Logical Minimum(0)
+25 01 # Logical Maximum(1)
+81 02 #Input (Data, Variable, Absolute)
+95 01 # Report Count(1)
+75 03 # Report Size(3)
+81 01 #Input (Constant, Array, Absolute)
+75 08 # Report Size(8)
+95 01 # Report Count(1)
+05 01  #Usage Page (Generic Desktop Controls)
+09 38 #Usage (Wheel)
+15 81 # Logical Minimum(129)
+25 7f  # Logical Maximum(127)
+81 06 #Input (Data, Variable, Relative)
+05 0c #Usage page (Consumer)
+0a 38 02 	#Usage (AC Pan)
+95 01 # Report Count(1)
+81 06 #INPUT (Data, Variable, Relative)
+c0
+85 03 # Report ID(3)
+09 01 # Usage(Consumer Control)
+a1 00 # Collection(Physical)
+75 0c # Report Size(12)
+95 02 # Report Count(2)
+05 01 #Usage Page (Generic Desktop Controls)
+09 30 #Usage (x)
+09 31 #Usage (y)
+16 01 f8  # Logical Minimum(63489)
+26 ff 07 # Logical Maximum(2047)
+81 06 #Input (Data, Variable, Relative)
+c0 c0
+
+
+##############BLE ATT LIST END####################
+mem_dy_le_search_service_uuid:
+D0 00 2D 12 1E 4B 0F A4 99 4E CE B5 31 F4 05 79
+
Index: sched/sim.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/sim.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/sim.dat	(working copy)
@@ -0,0 +1,54 @@
+
+mem_lpm_xtalcnt:10 20 64
+mem_lpm_isogate:8f 2f 3b
+mem_lpm_hibernate_switch:20
+mem_lpm_ldo_sel:19
+mem_fcomp_div:24
+
+mem_xtal_freq:18	#24MHz
+mem_set_cdb_on:00
+mem_syn_cal_ctrl:00
+
+mem_le_lap:11 22 33
+mem_le_adv_data_len:1b
+mem_le_adv_data:0c 09
+'Yichip Temp
+ 03 19 40 02 02 01 05 02 0a 00 03 03 f1 18
+mem_le_ch_mapped:24
+mem_le_adv_interval:20 00
+mem_le_scan_window:20 00
+mem_le_scan_type:01
+mem_le_adv_own_addr_type:01
+
+
+mem_patch00:01
+
+
+4580:ff
+mem_rf_init_ptr:80 45		
+
+
+
+
+
+
+#ecb enc data
+4f00:
+0a94 0bb5 416e f045 f1c3 9458 c653 ea5a 
+
+
+#cbc xor data
+4e00:
+5a5a 5a5a 5a5a 5a5a 6363 6363 6363 6363
+
+#cbc enc data1
+4e20:
+7033 eafa b089 698f 43cb 1050 1e73 1109 
+
+#cbc enc data2
+4e30:
+3cfd e1a1 eb69 42b0 2593 3009 5238 53f9 
+
+
+
+
Index: sched/spp.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/spp.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/spp.dat	(working copy)
@@ -0,0 +1,206 @@
+#device option
+mem_device_option:04
+
+#spp uuid
+mem_uuid_list:
+04
+10
+02
+12
+00
+01
+00
+00
+01
+00
+01
+00
+01
+36
+00
+5a
+09
+00
+00
+0a
+00
+01
+00
+01
+09
+00
+01
+35
+03
+19
+12
+00
+09
+00
+04
+35
+0d
+35
+06
+19
+01
+00
+09
+00
+01
+35
+03
+19
+00
+01
+09
+00
+05
+35
+03
+19
+10
+02
+09
+00
+09
+35
+08
+35
+06
+19
+12
+00
+09
+01
+00
+09
+02
+00
+09
+01
+03
+09
+02
+01
+09
+05
+ac
+09
+02
+02
+09
+02
+39
+09
+02
+03
+09
+06
+44
+09
+02
+04
+28
+01
+09
+02
+05
+09
+00
+02
+03
+11
+01
+00
+03
+01
+00
+00
+01
+00
+03
+36
+00
+4e
+09
+00
+00
+0a
+00
+01
+00
+03
+09
+00
+01
+35
+03
+19
+11
+01
+09
+00
+02
+0a
+00
+00
+00
+00
+09
+00
+04
+35
+0c
+35
+03
+19
+01
+00
+35
+05
+19
+00
+03
+08
+01
+09
+00
+05
+35
+03
+19
+10
+02
+09
+00
+06
+35
+09
+09
+65
+6e
+09
+00
+6a
+09
+01
+00
+09
+01
+00
+25
+0a
+53
+50
+50
+20
+73
+6c
+61
+76
+65
+00
+00
+00
+01
Index: sched/test.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/test.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/test.dat	(working copy)
@@ -0,0 +1,139 @@
+mem_device_option:ff
+mem_le_lap:11 22 33
+mem_le_adv_enable:01
+mem_le_adv_interval:00 02 
+mem_le_adv_channel_map:07
+mem_le_adv_data_len:03
+mem_le_adv_data:
+02 01 0e
+
+mem_le_scan_data_len:0a
+mem_le_scan_data:
+'\09test1305
+
+mem_ui_le_uuid_table:mem_module_le_att_list
+
+#attribute list: handle 2bytes, uuid 2bytes, length 1bytes, attribute Nbytes
+mem_module_le_att_list:
+#Primary service GAP ------
+01 00 02 00 28 02 00 18
+
+
+#Appearance
+02 00 02 03 28 01 02
+03 00 02 01 2a 02 c8 00 #3c2=hid mouse
+
+#Device name
+04 00 02 03 28 01 0a
+05 00 02 00 2a 14 41 73 74 20 4c 45 20 4d 6f 75 73 65 20 20 20 20 20 20 20 20
+
+
+#Peripheral Preferred Connection Parameters
+06 00 02 03 28 01 02
+07 00 02 04 2a 08 06 00 06 00 64 00 2c 01 # interval 6ms, latency 100, timeout 300
+
+
+#privcy flag
+08 00 02 03 28 01 02
+09 00 02 02 2a 01 01
+
+#reconnecting addr 
+0a 00 02 03 28 01 08
+0b 00 02 03 2a 06 00 00 00 00 00 00
+
+#Primary service GATT ------
+0c 00 02 00 28 02 01 18
+
+#Service changed
+0d 00 02 03 28 01 20
+0e 00 02 05 2a 00
+#Client Characteristic Configuration
+0f 00 02 02 29 02 00 00
+
+#Primary service TX power ------
+10 00 02 00 28 02 04 18
+#Characteristic Tx power level
+11 00 02 03 28 01 16
+12 00 02 07 2a 01 00
+13 00 02 02 29 02 00 00
+
+#Primary service Battery ------
+14 00 02 00 28 02 0f 18
+#Characteristic Battery level
+15 00 02 03 28 01 12
+16 00 02 19 2a 01 38
+
+#Primary service device infomation
+17 00 02 00 28 02 0a 18
+#Characteristic system id
+18 00 02 03 28 01 02
+19 00 02 23 2a 03 00 00 00
+
+#Characteristic manufactor name
+1a 00 02 03 28 01 02
+1b 00 02 29 2a 08 46 6c 61 67 74 72 69 70
+
+#Characteristic module number
+1c 00 02 03 28 01 02
+1d 00 02 24 2a 06 79 69 63 68 69 70
+
+#Characteristic serial number
+1e 00 02 03 28 01 02
+1f 00 02 25 2a 04 63 6f 6d 33
+
+#Characteristic firmware version
+20 00 02 03 28 01 02
+21 00 02 26 2a 03 31 2e 30
+
+#Characteristic software version
+22 00 02 03 28 01 02
+23 00 02 28 2a 03 31 2e 30
+
+#Characteristic hardware version
+24 00 02 03 28 01 02
+25 00 02 2a 2a 03 31 2e 30
+
+#Characteristic regulatory version
+26 00 02 03 28 01 02
+27 00 02 25 2a 04 63 6f 6d 33
+
+#Primary service yichip transmit ------
+28 00 02 00 28 10 55 e4 05 d2 af 9f a9 8f e5 4a 7d fe 43 53 53 49
+#Characteristic tx--notify read
+29 00 02 03 28 01 12
+2a 00 10 16 96 24 47 C6 23 61 BA D9 4B 4D 1E 43 53 53 49 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+#Client Characteristic Configuration
+2b 00 02 02 29 02 00 00
+
+#Characteristic rx--write
+2c 00 02 03 28 01 08
+2d 00 10 b3 9b 72 34 be ec d4 a8 f4 43 41 88 43 53 53 49 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+#Characteristic rx-- write without Response
+2e 00 02 03 28 01 04
+2f 00 10 fe 69 ca 9a 56 19 f6 ab 02 4d aa 6d 43 53 53 49 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+#Characteristic rx tx --read write notify
+30 00 02 03 28 01 2a
+31 0010 18 03 A6 28 5E D8 EC 91 1C 48 A3 AC 43 53 53 49 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+#Client Characteristic Configuration
+32 00 02 02 29 02 00 00
+
+#Primary service yichip transmit ------
+33 00 02 00 28 02 e7 fe 
+#Characteristic tx--indicate
+34 00 02 03 28 01 20
+35 00 02 c8 fe 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+#Client Characteristic Configuration
+36 00 02 02 29 02 00 00
+
+#Characteristic rx--write,read
+37 00 02 03 28 01 0a
+38 00 02 c7 fe 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+
+#Characteristic - read
+39 00 02 03 28 01 02
+3a 00 02 c9 fe 06 11 22 33 44 55 66
+
+#End of Attribute list
+00 00
Index: sched/usb_confdata.dat
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/sched/usb_confdata.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/sched/usb_devicedata.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/sched/usb_kbdata.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/sched/usb_kbdata_vendor_define.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/sched/usb_msdata.dat	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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: 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/keyboard/costumer/YeCai/keyboard_only_ble/util/eeprom2fulleeprom.pl	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/util/eeprom2otp.pl	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/keyboard/costumer/YeCai/keyboard_only_ble/util/mergepatch.pl	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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/romcrc.pl
===================================================================
--- /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/util/romcrc.pl	(nonexistent)
+++ /1121s/1121se/branch/keyboard/costumer/YeCai/keyboard_only_ble/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;
